From 5534a02565802c987092e991372842e61b7cbf8c Mon Sep 17 00:00:00 2001 From: Zhaoyifeng Date: Tue, 27 Feb 2018 12:03:30 +0800 Subject: [PATCH] drivers: rk_nand: add nand driver for rk3326 and px30 Change-Id: Ib052507c864e4ef0a09dc036fc0d73fef7c58a3a Signed-off-by: Zhaoyifeng --- drivers/rk_nand/Makefile | 2 +- drivers/rk_nand/rk_ftlv5_arm64.S | 23244 +++++++++++++++++++++++++ drivers/rk_nand/rk_zftl_arm64.S | 26137 +++++++++++++++++++++++++++++ 3 files changed, 49382 insertions(+), 1 deletion(-) create mode 100644 drivers/rk_nand/rk_ftlv5_arm64.S create mode 100644 drivers/rk_nand/rk_zftl_arm64.S diff --git a/drivers/rk_nand/Makefile b/drivers/rk_nand/Makefile index f8f93992636a..40aedbeb60e4 100644 --- a/drivers/rk_nand/Makefile +++ b/drivers/rk_nand/Makefile @@ -3,6 +3,6 @@ obj-$(CONFIG_RK_NAND) += rk_ftl.o rk_nand_base.o rk_nand_blk.o ifdef CONFIG_THUMB2_KERNEL rk_ftl-$(CONFIG_THUMB2_KERNEL) += rk_ftl_arm_v7_thumb.o else -rk_ftl-$(CONFIG_ARM64) += rk_ftl_arm_v8.o +rk_ftl-$(CONFIG_ARM64) += rk_zftl_arm64.o rk_ftlv5_arm64.o rk_ftl-$(CONFIG_ARM) += rk_ftl_arm_v7.o endif diff --git a/drivers/rk_nand/rk_ftlv5_arm64.S b/drivers/rk_nand/rk_ftlv5_arm64.S new file mode 100644 index 000000000000..40a1fc92c7b0 --- /dev/null +++ b/drivers/rk_nand/rk_ftlv5_arm64.S @@ -0,0 +1,23244 @@ +/* + * Copyright (c) 2016-2017, Fuzhou Rockchip Electronics Co., Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * date: 2018-02-27 + * function: rk ftl v5 for rockchip soc base on arm v8 to support MLC NAND. + */ + .cpu generic+fp+simd + .file "rk_ftlv5_arm_v8.S" +#APP + .irp num,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17\ + ,18,19,20,21,22,23,24,25,26,27,28,29,30 + .equ .L__reg_num_x\num, \num + .endr + .equ .L__reg_num_xzr, 31 + + .macro mrs_s, rt, sreg + .inst 0xd5200000|(\sreg)|(.L__reg_num_\rt) + .endm + + .macro msr_s, sreg, rt + .inst 0xd5000000|(\sreg)|(.L__reg_num_\rt) + .endm + +#NO_APP + .text + .align 2 + .type FlashReadFacBbtData.part.6, %function +FlashReadFacBbtData.part.6: + stp x29, x30, [sp, -32]! + mov w3, 0 + adrp x5, .LANCHOR0 + add x29, sp, 0 + str x19, [sp,16] + mov w7, 1 + mov x19, x0 + cbnz w1, .L4 +.L6: + add x0, x5, :lo12:.LANCHOR0 + ldr w0, [x0,8] + cmp w3, w0 + bcs .L4 + ubfx x4, x3, 5, 11 + ldr x0, [x5,#:lo12:.LANCHOR0] + lsl x4, x4, 2 + lsl w6, w7, w3 + add w3, w3, 1 + ldr w1, [x0,x4] + uxth w3, w3 + orr w6, w1, w6 + str w6, [x0,x4] + b .L6 +.L4: + ldr x1, [x5,#:lo12:.LANCHOR0] + mov x0, x19 + bl ftl_memcpy + mov w2, 4 + adrp x0, .LC0 + mov x1, x19 + add x0, x0, :lo12:.LC0 + mov w3, w2 + bl rknand_print_hex + ldr x19, [sp,16] + mov w0, 0 + ldp x29, x30, [sp], 32 + ret + .size FlashReadFacBbtData.part.6, .-FlashReadFacBbtData.part.6 + .align 2 + .type ftl_set_blk_mode.part.18, %function +ftl_set_blk_mode.part.18: + adrp x1, .LANCHOR0+16 + uxth w0, w0 + ubfx x2, x0, 5, 11 + lsl x2, x2, 2 + ldr x3, [x1,#:lo12:.LANCHOR0+16] + mov w1, 1 + lsl w0, w1, w0 + ldr w1, [x3,x2] + orr w0, w1, w0 + str w0, [x3,x2] + ret + .size ftl_set_blk_mode.part.18, .-ftl_set_blk_mode.part.18 + .align 2 + .global FlashMemCmp8 + .type FlashMemCmp8, %function +FlashMemCmp8: + mov x5, x0 + adrp x0, .LANCHOR0+24 + ldrb w0, [x0,#:lo12:.LANCHOR0+24] + cbz w0, .L15 + ldrb w4, [x5,1] + mov w0, 0 + ldrb w3, [x1,1] + cmp w4, w3 + beq .L12 +.L15: + mov x3, 0 +.L13: + cmp w3, w2 + mov w4, w3 + bcs .L18 + ldrb w0, [x5,x3] + add x3, x3, 1 + add x6, x1, x3 + ldrb w6, [x6,-1] + cmp w6, w0 + beq .L13 + add w0, w4, 1 + b .L12 +.L18: + mov w0, 0 +.L12: + ret + .size FlashMemCmp8, .-FlashMemCmp8 + .align 2 + .global FlashRsvdBlkChk + .type FlashRsvdBlkChk, %function +FlashRsvdBlkChk: + adrp x2, .LANCHOR0 + uxtb w0, w0 + add x2, x2, :lo12:.LANCHOR0 + ldrb w3, [x2,25] + ldr w2, [x2,28] + mul w2, w3, w2 + cmp w1, w2 + cset w1, cc + cmp w0, wzr + cset w0, eq + and w0, w1, w0 + eor w0, w0, 1 + ret + .size FlashRsvdBlkChk, .-FlashRsvdBlkChk + .align 2 + .global FlashGetRandomizer + .type FlashGetRandomizer, %function +FlashGetRandomizer: + stp x29, x30, [sp, -32]! + adrp x2, .LANCHOR1 + and w3, w1, 127 + add x2, x2, :lo12:.LANCHOR1 + add x29, sp, 0 + uxtb w0, w0 + str x19, [sp,16] + ldrh w19, [x2,w3,uxtw 1] + adrp x2, .LANCHOR0+32 + ldrb w2, [x2,#:lo12:.LANCHOR0+32] + cbz w2, .L21 + bl FlashRsvdBlkChk + cmp w0, wzr + orr w1, w19, -1073741824 + csel w19, w1, w19, ne +.L21: + mov w0, w19 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FlashGetRandomizer, .-FlashGetRandomizer + .align 2 + .global FlashSetRandomizer + .type FlashSetRandomizer, %function +FlashSetRandomizer: + stp x29, x30, [sp, -48]! + and w2, w1, 127 + add x29, sp, 0 + str x21, [sp,32] + uxtb w21, w0 + adrp x0, .LANCHOR1 + add x0, x0, :lo12:.LANCHOR1 + stp x19, x20, [sp,16] + ldrh w20, [x0,w2,uxtw 1] + adrp x2, .LANCHOR0 + add x0, x2, :lo12:.LANCHOR0 + mov x19, x2 + ldrb w0, [x0,32] + cbz w0, .L28 + mov w0, w21 + bl FlashRsvdBlkChk + cmp w0, wzr + orr w1, w20, -1073741824 + csel w20, w1, w20, ne +.L28: + add x2, x19, :lo12:.LANCHOR0 + add x2, x2, x21, sxtw 4 + ldr x0, [x2,40] + str w20, [x0,336] + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FlashSetRandomizer, .-FlashSetRandomizer + .align 2 + .global FlashReadCmd + .type FlashReadCmd, %function +FlashReadCmd: + adrp x3, .LANCHOR0 + uxtb w0, w0 + add x3, x3, :lo12:.LANCHOR0 + sbfiz x5, x0, 4, 32 + add x3, x3, 40 + lsr w4, w1, 16 + add x2, x3, x5 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrb w2, [x2,8] + ldr x3, [x3,x5] + add x2, x3, x2, lsl 8 + and w3, w1, 255 + str wzr, [x2,2056] + str wzr, [x2,2052] + str wzr, [x2,2052] + str w3, [x2,2052] + lsr w3, w1, 8 + str w3, [x2,2052] + mov w3, 48 + str w4, [x2,2052] + str w3, [x2,2056] + bl FlashSetRandomizer + ldp x29, x30, [sp], 16 + ret + .size FlashReadCmd, .-FlashReadCmd + .align 2 + .global FlashReadDpDataOutCmd + .type FlashReadDpDataOutCmd, %function +FlashReadDpDataOutCmd: + adrp x3, .LANCHOR0 + uxtb w0, w0 + add x3, x3, :lo12:.LANCHOR0 + sbfiz x2, x0, 4, 32 + add x4, x3, 40 + stp x29, x30, [sp, -16]! + add x5, x4, x2 + add x29, sp, 0 + ldr x6, [x4,x2] + lsr w4, w1, 8 + ldrb w2, [x3,120] + lsr w3, w1, 16 + cmp w2, 1 + ldrb w2, [x5,8] + and w5, w1, 255 + add x2, x6, x2, lsl 8 + bne .L36 + mov w6, 6 + str w6, [x2,2056] + str wzr, [x2,2052] + str wzr, [x2,2052] + str w5, [x2,2052] + str w4, [x2,2052] + str w3, [x2,2052] + b .L38 +.L36: + str wzr, [x2,2056] + str wzr, [x2,2052] + str wzr, [x2,2052] + str w5, [x2,2052] + str w4, [x2,2052] + str w3, [x2,2052] + mov w3, 5 + str w3, [x2,2056] + str wzr, [x2,2052] + str wzr, [x2,2052] +.L38: + mov w3, 224 + str w3, [x2,2056] + bl FlashSetRandomizer + ldp x29, x30, [sp], 16 + ret + .size FlashReadDpDataOutCmd, .-FlashReadDpDataOutCmd + .align 2 + .global flash_enter_slc_mode + .type flash_enter_slc_mode, %function +flash_enter_slc_mode: + adrp x1, .LANCHOR0 + uxtb w0, w0 + add x1, x1, :lo12:.LANCHOR0 + ldrb w2, [x1,136] + cbz w2, .L39 + sbfiz x0, x0, 4, 32 + add x1, x1, 40 + add x2, x1, x0 + ldr x1, [x1,x0] + ldrb w0, [x2,8] + add x0, x0, 8 + add x0, x1, x0, lsl 8 + mov w1, 218 + str w1, [x0,8] +.L39: + ret + .size flash_enter_slc_mode, .-flash_enter_slc_mode + .align 2 + .global flash_exit_slc_mode + .type flash_exit_slc_mode, %function +flash_exit_slc_mode: + adrp x1, .LANCHOR0 + uxtb w0, w0 + add x1, x1, :lo12:.LANCHOR0 + ldrb w2, [x1,136] + cbz w2, .L44 + sbfiz x0, x0, 4, 32 + add x1, x1, 40 + add x2, x1, x0 + ldr x1, [x1,x0] + ldrb w0, [x2,8] + add x0, x0, 8 + add x0, x1, x0, lsl 8 + mov w1, 223 + str w1, [x0,8] +.L44: + ret + .size flash_exit_slc_mode, .-flash_exit_slc_mode + .align 2 + .global FlashProgFirstCmd + .type FlashProgFirstCmd, %function +FlashProgFirstCmd: + adrp x3, .LANCHOR0 + uxtb w0, w0 + add x3, x3, :lo12:.LANCHOR0 + sbfiz x5, x0, 4, 32 + add x3, x3, 40 + lsr w4, w1, 16 + add x2, x3, x5 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrb w2, [x2,8] + ldr x3, [x3,x5] + add x2, x3, x2, lsl 8 + mov w3, 128 + str w3, [x2,2056] + and w3, w1, 255 + str wzr, [x2,2052] + str wzr, [x2,2052] + str w3, [x2,2052] + lsr w3, w1, 8 + str w3, [x2,2052] + str w4, [x2,2052] + bl FlashSetRandomizer + ldp x29, x30, [sp], 16 + ret + .size FlashProgFirstCmd, .-FlashProgFirstCmd + .align 2 + .global FlashEraseCmd + .type FlashEraseCmd, %function +FlashEraseCmd: + adrp x3, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x3, x3, :lo12:.LANCHOR0 + add x4, x3, 40 + add x5, x4, x0 + ldr x4, [x4,x0] + ldrb w0, [x5,8] + cbz w2, .L51 + add x2, x4, x0, lsl 8 + mov w5, 96 + str w5, [x2,2056] + and w5, w1, 255 + str w5, [x2,2052] + lsr w5, w1, 8 + str w5, [x2,2052] + lsr w5, w1, 16 + str w5, [x2,2052] + ldr w2, [x3,28] + add w1, w1, w2 +.L51: + add x0, x4, x0, lsl 8 + mov w2, 96 + str w2, [x0,2056] + and w2, w1, 255 + str w2, [x0,2052] + lsr w2, w1, 8 + str w2, [x0,2052] + lsr w1, w1, 16 + str w1, [x0,2052] + mov w1, 208 + str w1, [x0,2056] + ret + .size FlashEraseCmd, .-FlashEraseCmd + .align 2 + .global FlashProgDpSecondCmd + .type FlashProgDpSecondCmd, %function +FlashProgDpSecondCmd: + adrp x2, .LANCHOR0 + uxtb w0, w0 + add x2, x2, :lo12:.LANCHOR0 + sbfiz x4, x0, 4, 32 + add x5, x2, 40 + lsr w3, w1, 16 + add x7, x5, x4 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrb w6, [x2,115] + ldrb w2, [x7,8] + ldr x4, [x5,x4] + add x2, x4, x2, lsl 8 + and w4, w1, 255 + str w6, [x2,2056] + str wzr, [x2,2052] + str wzr, [x2,2052] + str w4, [x2,2052] + lsr w4, w1, 8 + str w4, [x2,2052] + str w3, [x2,2052] + bl FlashSetRandomizer + ldp x29, x30, [sp], 16 + ret + .size FlashProgDpSecondCmd, .-FlashProgDpSecondCmd + .align 2 + .global FlashProgSecondCmd + .type FlashProgSecondCmd, %function +FlashProgSecondCmd: + adrp x1, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x1, x1, :lo12:.LANCHOR0 + add x1, x1, 40 + add x2, x1, x0 + ldr x1, [x1,x0] + ldrb w0, [x2,8] + add x0, x0, 8 + add x0, x1, x0, lsl 8 + mov w1, 16 + str w1, [x0,8] + ret + .size FlashProgSecondCmd, .-FlashProgSecondCmd + .align 2 + .global FlashProgDpFirstCmd + .type FlashProgDpFirstCmd, %function +FlashProgDpFirstCmd: + adrp x1, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x1, x1, :lo12:.LANCHOR0 + add x2, x1, 40 + add x3, x2, x0 + ldrb w1, [x1,114] + ldr x2, [x2,x0] + ldrb w0, [x3,8] + add x0, x0, 8 + add x0, x2, x0, lsl 8 + str w1, [x0,8] + ret + .size FlashProgDpFirstCmd, .-FlashProgDpFirstCmd + .align 2 + .global JSHash + .type JSHash, %function +JSHash: + mov x5, x0 + mov w0, 42982 + mov x2, 0 + movk w0, 0x47c6, lsl 16 +.L59: + cmp w1, w2 + bls .L61 + lsl w3, w0, 5 + ldrb w4, [x5,x2] + add w3, w3, w0, lsr 2 + add x2, x2, 1 + add w3, w3, w4 + eor w0, w0, w3 + b .L59 +.L61: + ret + .size JSHash, .-JSHash + .align 2 + .global FlashLoadIdbInfo + .type FlashLoadIdbInfo, %function +FlashLoadIdbInfo: + mov w0, 0 + ret + .size FlashLoadIdbInfo, .-FlashLoadIdbInfo + .align 2 + .global BuildFlashLsbPageTable + .type BuildFlashLsbPageTable, %function +BuildFlashLsbPageTable: + stp x29, x30, [sp, -48]! + adrp x2, .LANCHOR0 + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + mov w19, w1 + cbnz w0, .L64 + mov x0, 0 + add x3, x2, :lo12:.LANCHOR0 +.L65: + add x1, x3, 140 + strh w0, [x1,x0,lsl 1] + add x0, x0, 1 + cmp x0, 256 + bne .L65 +.L71: + add x20, x2, :lo12:.LANCHOR0 + mov w1, 255 + add x21, x20, 652 + mov w2, 1024 + mov x0, x21 + uxth w19, w19 + bl ftl_memset + mov x1, 0 + mov x2, x20 + b .L66 +.L64: + cmp w0, 1 + bne .L67 + mov x0, 0 + mov w5, 3 + mov w6, 2 + add x4, x2, :lo12:.LANCHOR0 +.L70: + cmp x0, 3 + uxth w1, w0 + mov w3, w1 + bls .L68 + ubfiz w3, w1, 1, 15 + and w1, w1, 1 + cmp w1, wzr + csel w1, w5, w6, ne + sub w3, w3, w1 + uxth w3, w3 +.L68: + add x1, x4, 140 + strh w3, [x1,x0,lsl 1] + add x0, x0, 1 + cmp x0, 256 + bne .L70 + b .L71 +.L67: + cmp w0, 2 + bne .L72 + mov w1, 65535 + mov x0, 0 + add x5, x2, :lo12:.LANCHOR0 +.L74: + add x4, x5, 140 + cmp x0, 1 + uxth w3, w0 + csel w3, w1, w3, hi + add w1, w1, 2 + strh w3, [x4,x0,lsl 1] + add x0, x0, 1 + cmp x0, 256 + uxth w1, w1 + bne .L74 + b .L71 +.L72: + cmp w0, 3 + bne .L75 + mov x0, 0 + mov w6, 5 + mov w7, 4 + add x5, x2, :lo12:.LANCHOR0 +.L78: + cmp x0, 5 + uxth w4, w0 + mov w3, w4 + bls .L76 + ubfiz w3, w4, 1, 15 + and w4, w4, 1 + cmp w4, wzr + csel w1, w6, w7, ne + sub w3, w3, w1 + uxth w3, w3 +.L76: + add x1, x5, 140 + strh w3, [x1,x0,lsl 1] + add x0, x0, 1 + cmp x0, 256 + bne .L78 + b .L71 +.L75: + cmp w0, 4 + bne .L79 + add x1, x2, :lo12:.LANCHOR0 + mov w6, 7 + add x3, x1, 140 + mov w5, 6 + strh w0, [x3,8] + mov w0, 5 + strh wzr, [x1,140] + mov w1, 1 + strh w0, [x3,10] + mov w0, 7 + strh w1, [x3,2] + mov w1, 2 + strh w0, [x3,12] + mov w0, 8 + strh w1, [x3,4] + mov w1, 3 + strh w0, [x3,14] + mov w0, 8 + strh w1, [x3,6] +.L81: + and w4, w0, 1 + ubfiz w1, w0, 1, 15 + add w0, w0, 1 + cmp w4, wzr + csel w4, w6, w5, ne + add x3, x3, 2 + uxth w0, w0 + sub w1, w1, w4 + cmp w0, 256 + strh w1, [x3,14] + bne .L81 + b .L71 +.L79: + cmp w0, 5 + bne .L82 + mov x0, 0 + add x3, x2, :lo12:.LANCHOR0 +.L83: + add x1, x3, 140 + strh w0, [x1,x0,lsl 1] + add x0, x0, 1 + cmp x0, 16 + bne .L83 + mov x0, 0 +.L84: + add x3, x1, x0 + add w4, w0, 16 + add x0, x0, 2 + cmp x0, 480 + strh w4, [x3,32] + bne .L84 + b .L71 +.L82: + cmp w0, 6 + bne .L71 + mov x3, 0 + mov w6, 12 + mov w7, 10 + add x5, x2, :lo12:.LANCHOR0 +.L87: + cmp x3, 5 + uxth w4, w3 + mov w0, w4 + bls .L85 + add w0, w4, w4, lsl 1 + and w4, w4, 1 + cmp w4, wzr + uxth w0, w0 + csel w1, w6, w7, ne + sub w0, w0, w1 + uxth w0, w0 +.L85: + add x1, x5, 140 + strh w0, [x1,x3,lsl 1] + add x3, x3, 1 + cmp x3, 256 + bne .L87 + b .L71 +.L66: + cmp w19, w1, uxth + bls .L105 + add x0, x2, 140 + ldrh w0, [x0,x1,lsl 1] + add x1, x1, 1 + strh w0, [x21,w0,sxtw 1] + b .L66 +.L105: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size BuildFlashLsbPageTable, .-BuildFlashLsbPageTable + .align 2 + .global FlashPrintInfo + .type FlashPrintInfo, %function +FlashPrintInfo: + ret + .size FlashPrintInfo, .-FlashPrintInfo + .align 2 + .global FlashDieInfoInit + .type FlashDieInfoInit, %function +FlashDieInfoInit: + stp x29, x30, [sp, -80]! + adrp x1, .LANCHOR1+266 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + ldrh w1, [x1,#:lo12:.LANCHOR1+266] + add x0, x21, :lo12:.LANCHOR0 + str x25, [sp,64] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + strb wzr, [x0,1676] + cmp w1, 256 + strb wzr, [x0,1677] + bls .L108 + mov w1, 512 + b .L124 +.L108: + cmp w1, 128 + bls .L124 + mov w1, 256 +.L124: + add x19, x21, :lo12:.LANCHOR0 + str w1, [x0,28] + mov w2, 8 + mov w1, 0 + add x0, x19, 1680 + adrp x24, IDByte + mov x23, 0 + add x24, x24, :lo12:IDByte + bl ftl_memset + mov w1, 0 + mov w2, 32 + add x0, x19, 1688 + bl ftl_memset + add x0, x19, 1720 + mov w1, 0 + mov w2, 192 + bl ftl_memset + ldr x20, [x19,1912] + add x22, x20, 1 +.L112: + ldrb w2, [x20] + mov x0, x22 + add x1, x24, x23, lsl 3 + bl FlashMemCmp8 + cbnz w0, .L111 + ldrb w1, [x19,1676] + add x2, x19, 1688 + str w0, [x2,w1,sxtw 2] + add w0, w1, 1 + add x1, x19, x1, sxtw + strb w0, [x19,1676] + strb w23, [x1,1680] +.L111: + add x23, x23, 1 + cmp x23, 4 + bne .L112 + add x19, x21, :lo12:.LANCHOR0 + ldrb w0, [x19,1676] + strb w0, [x19,1677] + ldrb w0, [x20,8] + cmp w0, 2 + beq .L113 +.L117: + add x21, x21, :lo12:.LANCHOR0 + ldrb w1, [x20,13] + ldp x23, x24, [sp,48] + ldr x25, [sp,64] + ldrb w0, [x21,1676] + mul w0, w0, w1 + ldrh w1, [x20,14] + ldp x19, x20, [sp,16] + mul w0, w0, w1 + strh w0, [x21,1920] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 80 + ret +.L113: + adrp x24, IDByte + ldr w25, [x19,28] + mov x23, 0 + add x24, x24, :lo12:IDByte +.L116: + ldrb w2, [x20] + mov x0, x22 + add x1, x24, x23, lsl 3 + bl FlashMemCmp8 + cbnz w0, .L114 + ldrb w1, [x20,13] + add x4, x19, 1688 + ldrb w3, [x19,1676] + mul w2, w1, w25 + ldrh w1, [x20,14] + mov x0, x3 + and w1, w1, 65280 + mul w1, w2, w1 + str w1, [x4,w3,sxtw 2] + ldrb w2, [x20,23] + cbz w2, .L115 + lsl w1, w1, 1 + str w1, [x4,w3,sxtw 2] +.L115: + add w0, w0, 1 + strb w0, [x19,1676] + add x0, x19, x3 + strb w23, [x0,1680] +.L114: + add x23, x23, 1 + cmp x23, 4 + bne .L116 + b .L117 + .size FlashDieInfoInit, .-FlashDieInfoInit + .align 2 + .global FlashReadIdbData + .type FlashReadIdbData, %function +FlashReadIdbData: + stp x29, x30, [sp, -16]! + adrp x1, .LANCHOR0 + mov w2, 2048 + add x1, x1, :lo12:.LANCHOR0 + add x29, sp, 0 + add x1, x1, 1928 + bl ftl_memcpy + mov w0, 0 + ldp x29, x30, [sp], 16 + ret + .size FlashReadIdbData, .-FlashReadIdbData + .align 2 + .global FlashLoadPhyInfoInRam + .type FlashLoadPhyInfoInRam, %function +FlashLoadPhyInfoInRam: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR1 + str x23, [sp,48] + stp x21, x22, [sp,32] + adrp x23, IDByte + add x21, x20, :lo12:.LANCHOR1 + add x21, x21, 288 + mov w19, 0 + add x23, x23, :lo12:IDByte +.L130: + ldrb w2, [x21] + add x0, x21, 1 + mov x1, x23 + bl FlashMemCmp8 + mov w22, w0 + cbnz w0, .L127 + add x0, x20, :lo12:.LANCHOR1 + ubfiz x19, x19, 5, 32 + add x1, x0, 288 + adds x19, x1, x19 + beq .L133 + ldrb w3, [x19,22] + mov x2, 0 + mov x1, x0 + b .L132 +.L127: + add w19, w19, 1 + add x21, x21, 32 + cmp w19, 73 + bne .L130 + b .L133 +.L132: + add x4, x1, x2, lsl 5 + mov w0, w2 + ldrb w4, [x4,2624] + cmp w4, w3 + beq .L131 + add x2, x2, 1 + cmp x2, 4 + bne .L132 + mov w0, w2 +.L131: + add x20, x20, :lo12:.LANCHOR1 + ubfiz x1, x0, 5, 32 + adrp x0, .LANCHOR0 + add x2, x20, 2624 + add x0, x0, :lo12:.LANCHOR0 + add x1, x2, x1 + add x0, x0, 104 + mov w2, 32 + bl ftl_memcpy + add x0, x20, 256 + mov x1, x19 + mov w2, 32 + bl ftl_memcpy + b .L128 +.L133: + mov w22, -1 +.L128: + mov w0, w22 + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size FlashLoadPhyInfoInRam, .-FlashLoadPhyInfoInRam + .align 2 + .global ftl_flash_suspend + .type ftl_flash_suspend, %function +ftl_flash_suspend: + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + ldr x1, [x0,3976] + ldr w2, [x1] + str w2, [x0,3984] + ldr w2, [x1,4] + str w2, [x0,3988] + ldr w2, [x1,8] + str w2, [x0,3992] + ldr w2, [x1,12] + str w2, [x0,3996] + ldr w2, [x1,304] + str w2, [x0,4000] + ldr w2, [x1,308] + str w2, [x0,4004] + ldr w2, [x1,336] + ldr w1, [x1,344] + str w2, [x0,4008] + str w1, [x0,4012] + ret + .size ftl_flash_suspend, .-ftl_flash_suspend + .align 2 + .global LogAddr2PhyAddr + .type LogAddr2PhyAddr, %function +LogAddr2PhyAddr: + adrp x7, .LANCHOR0 + uxtb w4, w4 + add x6, x7, :lo12:.LANCHOR0 + ldrh w8, [x6,4030] + ldrh w5, [x6,4028] + ldrh w9, [x6,28] + ldrb w6, [x6,24] + mul w5, w5, w8 + cmp w6, 1 + ubfiz w8, w9, 1, 15 + csel w9, w8, w9, eq + ldr w8, [x0,4] + uxth w5, w5 + cmp w1, 1 + ubfx x6, x8, 10, 16 + and w8, w8, 1023 + udiv w10, w6, w5 + msub w5, w10, w5, w6 + uxth w6, w5 + bne .L140 + add x1, x7, :lo12:.LANCHOR0 + ldrb w5, [x1,136] + cbnz w5, .L140 + add x1, x1, 140 + ldrh w8, [x1,w8,sxtw 1] +.L140: + add x7, x7, :lo12:.LANCHOR0 + cmp w4, 1 + add x7, x7, 1688 + mov w1, 0 + ldr w5, [x7,w10,uxtw 2] + madd w5, w6, w9, w5 + add w5, w5, w8 + str w5, [x2] + str w10, [x3] + bls .L141 + ldr w1, [x0,4] + ldr w0, [x0,60] + add w1, w1, 1024 + cmp w1, w0 + cset w1, eq +.L141: + mov w0, w1 + ret + .size LogAddr2PhyAddr, .-LogAddr2PhyAddr + .align 2 + .global ftl_read_flash_info + .type ftl_read_flash_info, %function +ftl_read_flash_info: + stp x29, x30, [sp, -32]! + mov w1, 0 + mov w2, 11 + add x29, sp, 0 + str x19, [sp,16] + mov x19, x0 + bl ftl_memset + adrp x1, .LANCHOR0 + mov w5, 1 + add x1, x1, :lo12:.LANCHOR0 + ldr x0, [x1,1912] + ldrb w2, [x0,9] + ldr w0, [x1,28] + mul w0, w0, w2 + strh w0, [x19,4] + ldrb w0, [x1,4044] + strb w0, [x19,7] + ldr w0, [x1,4048] + str w0, [x19] + ldr x0, [x1,1912] + ldrb w4, [x1,1676] + ldrb w0, [x0,9] + strb w0, [x19,6] + mov w0, 32 + strb w0, [x19,8] + ldr x0, [x1,1912] + ldrb w0, [x0,7] + strb w0, [x19,9] + mov x0, 0 + strb wzr, [x19,10] +.L144: + cmp w4, w0, uxtb + bls .L146 + add x2, x1, 1680 + ldrb w3, [x19,10] + ldrb w2, [x0,x2] + add x0, x0, 1 + lsl w2, w5, w2 + orr w2, w2, w3 + strb w2, [x19,10] + b .L144 +.L146: + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size ftl_read_flash_info, .-ftl_read_flash_info + .align 2 + .global FlashScheduleEnSet + .type FlashScheduleEnSet, %function +FlashScheduleEnSet: + adrp x1, .LANCHOR0 + add x1, x1, :lo12:.LANCHOR0 + ldr w2, [x1,4052] + str w0, [x1,4052] + mov w0, w2 + ret + .size FlashScheduleEnSet, .-FlashScheduleEnSet + .align 2 + .global FlashGetPageSize + .type FlashGetPageSize, %function +FlashGetPageSize: + adrp x0, .LANCHOR0+1912 + ldr x0, [x0,#:lo12:.LANCHOR0+1912] + ldrb w0, [x0,9] + ret + .size FlashGetPageSize, .-FlashGetPageSize + .align 2 + .global NandcReadDontCaseBusyEn + .type NandcReadDontCaseBusyEn, %function +NandcReadDontCaseBusyEn: + ret + .size NandcReadDontCaseBusyEn, .-NandcReadDontCaseBusyEn + .align 2 + .global NandcGetChipIf + .type NandcGetChipIf, %function +NandcGetChipIf: + adrp x1, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x1, x1, :lo12:.LANCHOR0 + add x1, x1, 40 + add x2, x1, x0 + ldr x0, [x1,x0] + ldrb w2, [x2,8] + add x2, x2, 8 + add x0, x0, x2, lsl 8 + ret + .size NandcGetChipIf, .-NandcGetChipIf + .align 2 + .global NandcSetDdrPara + .type NandcSetDdrPara, %function +NandcSetDdrPara: + adrp x1, .LANCHOR0+3976 + uxtb w0, w0 + lsl w2, w0, 8 + orr w0, w2, w0, lsl 16 + ldr x1, [x1,#:lo12:.LANCHOR0+3976] + orr w0, w0, 1 + str w0, [x1,304] + ret + .size NandcSetDdrPara, .-NandcSetDdrPara + .align 2 + .global NandcSetDdrDiv + .type NandcSetDdrDiv, %function +NandcSetDdrDiv: + adrp x1, .LANCHOR0+3976 + uxtb w0, w0 + ldr x2, [x1,#:lo12:.LANCHOR0+3976] + mov w1, 16640 + orr w0, w0, w1 + str w0, [x2,344] + ret + .size NandcSetDdrDiv, .-NandcSetDdrDiv + .align 2 + .global NandcSetDdrMode + .type NandcSetDdrMode, %function +NandcSetDdrMode: + adrp x1, .LANCHOR0+3976 + cmp w0, wzr + ldr x2, [x1,#:lo12:.LANCHOR0+3976] + ldr w1, [x2] + and w3, w1, -8193 + orr w1, w1, 253952 + csel w1, w1, w3, ne + str w1, [x2] + ret + .size NandcSetDdrMode, .-NandcSetDdrMode + .align 2 + .global NandcSetMode + .type NandcSetMode, %function +NandcSetMode: + adrp x1, .LANCHOR0+3976 + uxtb w0, w0 + tst w0, 6 + ldr x2, [x1,#:lo12:.LANCHOR0+3976] + ldr w1, [x2] + beq .L157 + and w0, w0, 4 + orr w1, w1, 24576 + cmp w0, wzr + mov w0, 8322 + and w1, w1, -32769 + str w0, [x2,344] + mov w0, 4099 + orr w1, w1, 196608 + movk w0, 0x10, lsl 16 + str w0, [x2,304] + orr w3, w1, 32768 + mov w0, 38 + str w0, [x2,308] + csel w1, w3, w1, ne + mov w0, 39 + str w0, [x2,308] + b .L159 +.L157: + and w1, w1, -8193 +.L159: + str w1, [x2] + mov w0, 0 + ret + .size NandcSetMode, .-NandcSetMode + .align 2 + .global NandcFlashCs + .type NandcFlashCs, %function +NandcFlashCs: + adrp x1, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x1, x1, :lo12:.LANCHOR0 + add x1, x1, 40 + add x3, x1, x0 + ldr x2, [x1,x0] + mov w1, 1 + ldrb w3, [x3,8] + ldr w0, [x2] + lsl w1, w1, w3 + bfi w0, w1, 0, 8 + str w0, [x2] + ret + .size NandcFlashCs, .-NandcFlashCs + .align 2 + .global NandcFlashDeCs + .type NandcFlashDeCs, %function +NandcFlashDeCs: + adrp x1, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x1, x1, :lo12:.LANCHOR0 + add x1, x1, 40 + ldr x1, [x1,x0] + ldr w0, [x1] + and w0, w0, -256 + and w0, w0, -131073 + str w0, [x1] + ret + .size NandcFlashDeCs, .-NandcFlashDeCs + .align 2 + .global NandcDelayns + .type NandcDelayns, %function +NandcDelayns: + sub sp, sp, #16 + lsr w0, w0, 4 + str w0, [sp,12] +.L165: + ldr w0, [sp,12] + sub w1, w0, #1 + str w1, [sp,12] + cbnz w0, .L165 + add sp, sp, 16 + ret + .size NandcDelayns, .-NandcDelayns + .align 2 + .global FlashReadStatus + .type FlashReadStatus, %function +FlashReadStatus: + adrp x1, .LANCHOR0 + ubfiz x0, x0, 4, 8 + stp x29, x30, [sp, -32]! + add x1, x1, :lo12:.LANCHOR0 + add x1, x1, 40 + add x29, sp, 0 + add x2, x1, x0 + str x19, [sp,16] + ldrb w2, [x2,8] + ldr x19, [x1,x0] + mov w0, 112 + add x19, x19, x2, lsl 8 + str w0, [x19,2056] + mov w0, 80 + bl NandcDelayns + ldr w0, [x19,2048] + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FlashReadStatus, .-FlashReadStatus + .align 2 + .global ToshibaSetRRPara + .type ToshibaSetRRPara, %function +ToshibaSetRRPara: + uxtb w1, w1 + mov w3, 5 + add w2, w1, 1 + stp x29, x30, [sp, -80]! + smull x3, w2, w3 + adrp x2, .LANCHOR1 + add x29, sp, 0 + add x2, x2, :lo12:.LANCHOR1 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + add x23, x2, x1, sxtw + stp x25, x26, [sp,64] + add x21, x2, 2800 + add x25, x2, 2752 + adrp x24, g_maxRegNum + adrp x26, g_retryMode + stp x19, x20, [sp,16] + mov x22, x0 + add x25, x25, x3 + add x21, x21, x3 + mov x20, 0 + add x24, x24, :lo12:g_maxRegNum + mov x19, x2 + add x26, x26, :lo12:g_retryMode +.L169: + ldrb w0, [x24] + cmp w0, w20 + bls .L175 + mov w0, 85 + str w0, [x22,8] + add x0, x19, 2752 + ldrsb w0, [x20,x0] + str w0, [x22,4] + mov w0, 200 + bl NandcDelayns + ldrb w0, [x26] + cmp w0, 34 + bne .L170 + ldrsb w0, [x25,x20] + b .L174 +.L170: + cmp w0, 35 + bne .L172 + ldrsb w0, [x21,x20] + b .L174 +.L172: + ldrsb w0, [x23,2896] +.L174: + str w0, [x22] + add x20, x20, 1 + b .L169 +.L175: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size ToshibaSetRRPara, .-ToshibaSetRRPara + .align 2 + .global SamsungSetRRPara + .type SamsungSetRRPara, %function +SamsungSetRRPara: + stp x29, x30, [sp, -64]! + adrp x2, .LANCHOR1 + add x29, sp, 0 + stp x21, x22, [sp,32] + add x2, x2, :lo12:.LANCHOR1 + adrp x22, g_maxRegNum + stp x19, x20, [sp,16] + add x1, x2, x1, uxtb 2 + stp x23, x24, [sp,48] + mov x21, x0 + add x23, x1, 2908 + mov x20, 0 + add x22, x22, :lo12:g_maxRegNum + mov w24, 161 + mov x19, x2 +.L177: + ldrb w0, [x22] + cmp w0, w20 + bls .L179 + str w24, [x21,8] + add x0, x19, 2904 + str wzr, [x21] + ldrsb w0, [x20,x0] + str w0, [x21] + ldrsb w0, [x23,x20] + add x20, x20, 1 + str w0, [x21] + mov w0, 300 + bl NandcDelayns + b .L177 +.L179: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size SamsungSetRRPara, .-SamsungSetRRPara + .align 2 + .global HynixSetRRPara + .type HynixSetRRPara, %function +HynixSetRRPara: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x21, x22, [sp,32] + mov x21, x2 + adrp x2, .LANCHOR0 + stp x19, x20, [sp,16] + add x19, x2, :lo12:.LANCHOR0 + uxtb w20, w3 + stp x25, x26, [sp,64] + stp x23, x24, [sp,48] + uxtb x24, w0 + uxtb w26, w1 + ldr x0, [x19,1912] + mov x25, x24 + add x19, x19, 4056 + ldrb w0, [x0,19] + cmp w0, 6 + bne .L181 + add x19, x19, x24, lsl 6 + lsl w4, w20, 2 + add x19, x19, 20 + b .L186 +.L181: + cmp w0, 7 + bne .L183 + mov x0, 160 + mov w4, 10 + madd x19, x24, x0, x19 + mul w4, w20, w4 + add x19, x19, 28 +.L186: + add x19, x19, x4, sxtw + b .L182 +.L183: + lsl x4, x24, 3 + add x4, x4, x20, sxtw + add x19, x19, x4, lsl 3 + add x19, x19, 20 +.L182: + add x2, x2, :lo12:.LANCHOR0 + lsl x0, x24, 4 + add x2, x2, 40 + uxtb x26, w26 + add x1, x2, x0 + ldr x22, [x2,x0] + mov w0, w25 + ldrb w23, [x1,8] + bl NandcFlashCs + ubfiz x23, x23, 8, 8 + mov w0, 54 + add x22, x22, x23 + mov x23, 0 + str w0, [x22,2056] +.L184: + cmp x23, x26 + beq .L187 + ldrb w0, [x21,x23] + str w0, [x22,2052] + mov w0, 200 + bl NandcDelayns + ldrsb w0, [x19,x23] + add x23, x23, 1 + str w0, [x22,2048] + b .L184 +.L187: + mov w0, 22 + str w0, [x22,2056] + mov w0, w25 + bl NandcFlashDeCs + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + add x24, x0, x24 + strb w20, [x24,560] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size HynixSetRRPara, .-HynixSetRRPara + .align 2 + .global FlashSetReadRetryDefault + .type FlashSetReadRetryDefault, %function +FlashSetReadRetryDefault: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + mov x20, 0 + add x19, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + ldr x0, [x19,1912] + ldrb w0, [x0,19] + sub w0, w0, #1 + uxtb w0, w0 + cmp w0, 6 + bhi .L188 + adrp x21, IDByte + add x22, x19, 4060 + add x21, x21, :lo12:IDByte +.L193: + lsl x1, x20, 3 + uxtb w0, w20 + ldrb w1, [x1,x21] + cmp w1, 173 + bne .L190 + ldrb w1, [x19,4057] + mov x2, x22 + mov w3, 0 + bl HynixSetRRPara +.L190: + add x20, x20, 1 + cmp x20, 4 + bne .L193 +.L188: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FlashSetReadRetryDefault, .-FlashSetReadRetryDefault + .align 2 + .global FlashReadStatusEN + .type FlashReadStatusEN, %function +FlashReadStatusEN: + stp x29, x30, [sp, -32]! + adrp x3, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x4, x3, :lo12:.LANCHOR0 + add x29, sp, 0 + add x5, x4, 40 + stp x19, x20, [sp,16] + add x6, x5, x0 + uxtb w2, w2 + ldr x20, [x5,x0] + ldr x0, [x4,1912] + ldrb w19, [x6,8] + ldrb w0, [x0,8] + cmp w0, 2 + bne .L196 + add x4, x4, 104 + cbnz w2, .L197 + ldrb w2, [x4,13] + b .L205 +.L197: + ldrb w2, [x4,14] +.L205: + add x0, x19, 8 + add x3, x3, :lo12:.LANCHOR0 + add x0, x20, x0, lsl 8 + str w2, [x0,8] + mov w2, 0 + ldrb w4, [x3,119] + cbz w4, .L200 + add x3, x19, 8 + lsl x3, x3, 8 +.L204: + cmp w2, w4 + bcs .L200 + add x5, x20, x3 + lsl w0, w2, 3 + lsr w0, w1, w0 + add w2, w2, 1 + and w0, w0, 255 + str w0, [x5,4] + b .L204 +.L196: + add x0, x19, 8 + mov w1, 112 + add x0, x20, x0, lsl 8 + str w1, [x0,8] +.L200: + add x19, x19, 8 + mov w0, 80 + lsl x19, x19, 8 + bl NandcDelayns + ldr w0, [x20,x19] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + uxtb w0, w0 + ret + .size FlashReadStatusEN, .-FlashReadStatusEN + .align 2 + .global FlashWaitReadyEN + .type FlashWaitReadyEN, %function +FlashWaitReadyEN: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + uxtb w19, w0 + mov w20, w1 + uxtb w21, w2 +.L210: + mov w0, w19 + mov w1, w20 + mov w2, w21 + bl FlashReadStatusEN + cmp w0, 255 + mov w3, w0 + beq .L210 + tbz x3, 6, .L210 + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FlashWaitReadyEN, .-FlashWaitReadyEN + .align 2 + .global FlashWaitCmdDone + .type FlashWaitCmdDone, %function +FlashWaitCmdDone: + stp x29, x30, [sp, -48]! + uxtb x1, w0 + mov x2, 24 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + stp x21, x22, [sp,32] + add x20, x20, :lo12:.LANCHOR0 + mov x22, x1 + mul x1, x1, x2 + add x0, x20, 1720 + add x19, x0, x1 + ldrb w21, [x0,x1] + ldr x0, [x19,8] + cbz x0, .L215 + mov w0, w21 + add x20, x20, 1688 + bl NandcFlashCs + ldr w0, [x20,w22,sxtw 2] + ldr w1, [x19,4] + cmp w0, wzr + mov w0, w21 + cset w2, ne + bl FlashWaitReadyEN + mov w20, w0 + mov w0, w21 + bl NandcFlashDeCs + ldr x1, [x19,8] + sbfx x0, x20, 0, 1 + str w0, [x1] + str xzr, [x19,8] + ldr x1, [x19,16] + cbz x1, .L215 + str w0, [x1] + str xzr, [x19,16] +.L215: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FlashWaitCmdDone, .-FlashWaitCmdDone + .align 2 + .global NandcWaitFlashReady + .type NandcWaitFlashReady, %function +NandcWaitFlashReady: + stp x29, x30, [sp, -48]! + adrp x1, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x1, x1, :lo12:.LANCHOR0 + add x29, sp, 0 + add x1, x1, 40 + stp x19, x20, [sp,16] + mov w19, 34464 + ldr x20, [x1,x0] + movk w19, 0x1, lsl 16 +.L222: + mov w0, 100 + bl NandcDelayns + ldr w0, [x20] + str w0, [x29,40] + ldr w0, [x29,40] + tbnz x0, 9, .L223 + subs w19, w19, #1 + bne .L222 + mov w0, -1 + b .L221 +.L223: + mov w0, 0 +.L221: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size NandcWaitFlashReady, .-NandcWaitFlashReady + .align 2 + .global FlashReset + .type FlashReset, %function +FlashReset: + stp x29, x30, [sp, -48]! + adrp x1, .LANCHOR0 + add x29, sp, 0 + stp x19, x20, [sp,16] + add x1, x1, :lo12:.LANCHOR0 + uxtb w20, w0 + add x1, x1, 40 + sbfiz x0, x20, 4, 32 + add x2, x1, x0 + str x21, [sp,32] + ldr x21, [x1,x0] + mov w0, w20 + ldrb w19, [x2,8] + bl NandcFlashCs + add x19, x19, 8 + mov w0, 255 + add x19, x21, x19, lsl 8 + str w0, [x19,8] + mov w0, w20 + bl NandcWaitFlashReady + mov w0, w20 + bl NandcFlashDeCs + ldr x21, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size FlashReset, .-FlashReset + .align 2 + .global FlashEraseBlock + .type FlashEraseBlock, %function +FlashEraseBlock: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + uxtb w19, w0 + mov w20, w1 + mov w0, w19 + str x2, [x29,40] + bl NandcWaitFlashReady + mov w0, w19 + bl NandcFlashCs + ldr x2, [x29,40] + mov w1, w20 + mov w0, w19 + bl FlashEraseCmd + mov w0, w19 + bl NandcWaitFlashReady + mov w1, w20 + mov w0, w19 + bl FlashReadStatus + mov w20, w0 + mov w0, w19 + bl NandcFlashDeCs + and w0, w20, 1 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size FlashEraseBlock, .-FlashEraseBlock + .align 2 + .global FlashSetInterfaceMode + .type FlashSetInterfaceMode, %function +FlashSetInterfaceMode: + adrp x1, .LANCHOR2+564 + adrp x3, .LANCHOR0 + stp x29, x30, [sp, -16]! + add x3, x3, :lo12:.LANCHOR0 + adrp x7, IDByte + add x29, sp, 0 + ldrb w1, [x1,#:lo12:.LANCHOR2+564] + add x3, x3, 40 + mov x6, 0 + add x7, x7, :lo12:IDByte + and w11, w1, 1 + and w1, w1, 4 + mov w8, 239 + mov w9, 128 + uxtb w5, w1 + mov w10, 1 + mov w12, 35 + mov w13, 32 + mov w14, 5 +.L238: + ldrb w4, [x6,x7] + ldr x1, [x3] + cmp w4, 152 + ldrb w2, [x3,8] + beq .L228 + cmp w4, 69 + beq .L228 + cmp w4, 173 + beq .L228 + cmp w4, 44 + bne .L229 +.L228: + cmp w0, 1 + bne .L231 + cbz w11, .L229 + ubfiz x2, x2, 8, 8 + cmp w4, 173 + add x1, x1, x2 + str w8, [x1,2056] + bne .L232 + str w0, [x1,2052] + b .L249 +.L232: + cmp w4, 44 + bne .L234 + str w0, [x1,2052] + str w14, [x1,2048] + b .L236 +.L234: + str w9, [x1,2052] + str w0, [x1,2048] + b .L236 +.L231: + cbz w5, .L229 + ubfiz x2, x2, 8, 8 + cmp w4, 173 + add x1, x1, x2 + str w8, [x1,2056] + bne .L235 + str w10, [x1,2052] + str w13, [x1,2048] + b .L236 +.L235: + cmp w4, 44 + bne .L237 + str w10, [x1,2052] + str w12, [x1,2048] + b .L236 +.L237: + str w9, [x1,2052] +.L249: + str wzr, [x1,2048] +.L236: + str wzr, [x1,2048] + str wzr, [x1,2048] + str wzr, [x1,2048] +.L229: + add x6, x6, 8 + add x3, x3, 16 + cmp x6, 32 + bne .L238 + mov w0, 0 + bl NandcWaitFlashReady + mov w0, 0 + ldp x29, x30, [sp], 16 + ret + .size FlashSetInterfaceMode, .-FlashSetInterfaceMode + .align 2 + .global FlashReadSpare + .type FlashReadSpare, %function +FlashReadSpare: + adrp x3, .LANCHOR1+265 + adrp x5, .LANCHOR0 + stp x29, x30, [sp, -48]! + uxtb w0, w0 + add x5, x5, :lo12:.LANCHOR0 + add x5, x5, 40 + sbfiz x6, x0, 4, 32 + add x29, sp, 0 + ldrb w4, [x3,#:lo12:.LANCHOR1+265] + add x3, x5, x6 + str x19, [sp,16] + lsl w4, w4, 9 + str x2, [x29,40] + ldrb w3, [x3,8] + ldr x19, [x5,x6] + add x19, x19, x3, lsl 8 + and w3, w1, 255 + str wzr, [x19,2056] + str w4, [x19,2052] + lsr w4, w4, 8 + str w4, [x19,2052] + str w3, [x19,2052] + lsr w3, w1, 8 + str w3, [x19,2052] + lsr w1, w1, 16 + str w1, [x19,2052] + mov w1, 48 + str w1, [x19,2056] + bl NandcWaitFlashReady + ldr x2, [x29,40] + ldr w0, [x19,2048] + strb w0, [x2] + ldr x19, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size FlashReadSpare, .-FlashReadSpare + .align 2 + .global SandiskProgTestBadBlock + .type SandiskProgTestBadBlock, %function +SandiskProgTestBadBlock: + adrp x3, .LANCHOR0 + uxtb w0, w0 + stp x29, x30, [sp, -32]! + add x3, x3, :lo12:.LANCHOR0 + sbfiz x4, x0, 4, 32 + add x3, x3, 40 + add x29, sp, 0 + add x2, x3, x4 + str x19, [sp,16] + ldrb w2, [x2,8] + ldr x19, [x3,x4] + add x19, x19, x2, lsl 8 + mov w2, 162 + str w2, [x19,2056] + mov w2, 128 + str w2, [x19,2056] + and w2, w1, 255 + str wzr, [x19,2052] + str wzr, [x19,2052] + str w2, [x19,2052] + lsr w2, w1, 8 + str w2, [x19,2052] + lsr w1, w1, 16 + str w1, [x19,2052] + mov w1, 16 + str w1, [x19,2056] + bl NandcWaitFlashReady + mov w0, 112 + str w0, [x19,2056] + mov w0, 80 + bl NandcDelayns + ldr w0, [x19,2048] + ldr x19, [sp,16] + and w0, w0, 1 + ldp x29, x30, [sp], 32 + ret + .size SandiskProgTestBadBlock, .-SandiskProgTestBadBlock + .align 2 + .global SandiskSetRRPara + .type SandiskSetRRPara, %function +SandiskSetRRPara: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + mov x20, x0 + mov w0, 239 + uxtb w19, w1 + add w19, w19, 1 + str w0, [x20,8] + mov w0, 17 + str w0, [x20,4] + mov w0, 200 + bl NandcDelayns + mov w1, 5 + adrp x2, .LANCHOR1 + add x2, x2, :lo12:.LANCHOR1 + adrp x0, g_maxRegNum + smull x1, w19, w1 + add x3, x2, 2752 + adrp x4, g_retryMode + add x2, x2, 2800 + add x3, x3, x1 + add x0, x0, :lo12:g_maxRegNum + add x1, x2, x1 + add x4, x4, :lo12:g_retryMode + mov x2, 0 +.L253: + ldrb w5, [x0] + cmp w5, w2 + bls .L258 + ldrb w5, [x4] + cmp w5, 67 + bne .L254 + ldrsb w5, [x3,x2] + b .L257 +.L254: + ldrsb w5, [x1,x2] +.L257: + str w5, [x20] + add x2, x2, 1 + b .L253 +.L258: + mov w0, 0 + bl NandcWaitFlashReady + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size SandiskSetRRPara, .-SandiskSetRRPara + .align 2 + .global FlashEraseSLc2KBlocks + .type FlashEraseSLc2KBlocks, %function +FlashEraseSLc2KBlocks: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + str x25, [sp,64] + stp x23, x24, [sp,48] + add x21, x21, :lo12:.LANCHOR0 + adrp x23, .LC1 + stp x19, x20, [sp,16] + mov w24, w1 + mov x20, x0 + mov w22, 0 + add x25, x21, 1720 + add x23, x23, :lo12:.LC1 +.L260: + cmp w22, w24 + beq .L269 + add x2, x29, 88 + sub w4, w24, w22 + mov x0, x20 + mov w1, 0 + add x3, x29, 92 + bl LogAddr2PhyAddr + ldr w2, [x29,92] + ldrb w0, [x21,1676] + cmp w2, w0 + bcc .L261 + mov w0, -1 + str w0, [x20] + b .L262 +.L261: + uxtw x2, w2 + add x0, x21, x2 + ldrb w19, [x0,1680] + mov x0, 24 + mul x2, x2, x0 + mov w0, w19 + strb w19, [x25,x2] + bl NandcWaitFlashReady + mov w0, w19 + bl NandcFlashCs + ldr w1, [x29,88] + mov w2, 0 + mov w0, w19 + bl FlashEraseCmd + mov w0, w19 + bl NandcWaitFlashReady + ldr w1, [x29,88] + mov w0, w19 + bl FlashReadStatus + sbfx x0, x0, 0, 1 + str w0, [x20] + mov w0, w19 + ldr w1, [x29,88] + ldr w2, [x21,28] + add w1, w2, w1 + mov w2, 0 + bl FlashEraseCmd + mov w0, w19 + bl NandcWaitFlashReady + ldr w1, [x29,88] + mov w0, w19 + bl FlashReadStatus + tbz x0, 0, .L263 + mov w0, -1 + str w0, [x20] +.L263: + ldr w0, [x20] + cmn w0, #1 + bne .L264 + ldr w1, [x29,88] + mov x0, x23 + bl printk +.L264: + mov w0, w19 + bl NandcFlashDeCs +.L262: + add w22, w22, 1 + add x20, x20, 56 + b .L260 +.L269: + mov w0, 0 + ldr x25, [sp,64] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 96 + ret + .size FlashEraseSLc2KBlocks, .-FlashEraseSLc2KBlocks + .align 2 + .global HynixGetReadRetryDefault + .type HynixGetReadRetryDefault, %function +HynixGetReadRetryDefault: + stp x29, x30, [sp, -144]! + mov w4, -83 + mov w3, -82 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + stp x25, x26, [sp,64] + mov w26, w0 + add x0, x20, :lo12:.LANCHOR0 + add x1, x0, 4056 + cmp w26, 2 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x27, x28, [sp,80] + strb w26, [x0,4056] + mov w0, -84 + strb w4, [x1,5] + strb w0, [x1,4] + mov w0, -81 + strb w3, [x1,6] + strb w0, [x1,7] + bne .L271 + mov w0, -89 + strb w0, [x1,4] + adrp x0, .LANCHOR1+2985 + mov w1, -9 + strb w1, [x0,#:lo12:.LANCHOR1+2985] + b .L326 +.L271: + cmp w26, 3 + bne .L273 + mov w0, -80 + strb w0, [x1,4] + mov w0, -79 + strb w0, [x1,5] + mov w0, -78 + strb w0, [x1,6] + mov w0, -77 + strb w0, [x1,7] + mov w0, -76 + strb w0, [x1,8] + mov w0, -75 + strb w0, [x1,9] + mov w0, -74 + strb w0, [x1,10] + mov w0, -73 + b .L359 +.L273: + cmp w26, 4 + bne .L274 + mov w5, -52 + strb w5, [x1,4] + mov w5, -65 + strb w5, [x1,5] + mov w5, -86 + strb w5, [x1,6] + mov w5, -85 + strb w4, [x1,9] + strb w5, [x1,7] + mov w5, -51 + strb w3, [x1,10] + strb w5, [x1,8] +.L359: + mov w27, 8 + strb w0, [x1,11] + mov w28, w27 + b .L272 +.L274: + cmp w26, 5 + bne .L275 + mov w0, 56 + strb w0, [x1,4] + mov w0, 57 + strb w0, [x1,5] + mov w0, 58 + mov w27, 8 + strb w0, [x1,6] + mov w0, 59 + strb w0, [x1,7] + b .L358 +.L275: + cmp w26, 6 + bne .L276 + mov w0, 14 + strb w0, [x1,4] + mov w0, 15 + strb w0, [x1,5] + mov w0, 16 + mov w27, 12 + strb w0, [x1,6] + mov w0, 17 + strb w0, [x1,7] + b .L358 +.L276: + cmp w26, 7 + bne .L326 + mov w0, -80 + strb w0, [x1,4] + mov w0, -79 + strb w0, [x1,5] + mov w0, -78 + strb w0, [x1,6] + mov w0, -77 + strb w0, [x1,7] + mov w0, -76 + strb w0, [x1,8] + mov w0, -75 + strb w0, [x1,9] + mov w0, -74 + strb w0, [x1,10] + mov w0, -73 + strb w0, [x1,11] + mov w0, -44 + mov w27, 12 + strb w0, [x1,12] + mov w28, 10 + mov w0, -43 + strb w0, [x1,13] + b .L272 +.L326: + mov w27, 7 +.L358: + mov w28, 4 +.L272: + sub w0, w26, #1 + cmp w0, 1 + bhi .L355 + adrp x22, .LANCHOR1 + add x25, x20, :lo12:.LANCHOR0 + add x22, x22, :lo12:.LANCHOR1 + mov w21, 0 + add x26, x25, 4056 + add x3, x25, 40 + add x22, x22, 2968 +.L277: + ldrb w0, [x25,1676] + cmp w0, w21 + bls .L284 + add x0, x25, x21, sxtw + ldrb w0, [x0,1680] + mov x23, 0 + add x19, x26, x0, lsl 6 + lsl x0, x0, 4 + add x1, x3, x0 + add x19, x19, 20 + ldr x24, [x3,x0] + ldrb w0, [x1,8] + mov w1, 55 + add x24, x24, x0, lsl 8 +.L279: + add x0, x26, x23 + str w1, [x24,2056] + str x3, [x29,128] + str x1, [x29,136] + ldrb w0, [x0,4] + str w0, [x24,2052] + mov w0, 80 + bl NandcDelayns + ldr w0, [x24,2048] + strb w0, [x19,x23] + add x23, x23, 1 + ldr x1, [x29,136] + cmp w28, w23, uxtb + ldr x3, [x29,128] + bhi .L279 + mov x0, 0 +.L280: + add w2, w0, 8 + mov x1, 0 +.L281: + add x5, x1, x0 + add x1, x1, 4 + add x5, x22, x5 + cmp x1, 24 + ldrb w6, [x5,4] + ldrb w5, [x19,x0] + add w5, w6, w5 + strb w5, [x19,w2,sxtw] + add w2, w2, 8 + bne .L281 + add x0, x0, 1 + cmp x0, 4 + bne .L280 + add w21, w21, 1 + strb wzr, [x19,16] + strb wzr, [x19,24] + strb wzr, [x19,32] + uxtb w21, w21 + strb wzr, [x19,40] + strb wzr, [x19,48] + strb wzr, [x19,41] + strb wzr, [x19,49] + b .L277 +.L355: + sub w0, w26, #3 + cmp w0, 4 + bhi .L284 + mul w25, w28, w27 + sub w23, w28, #1 + mov w21, 0 + lsl w0, w25, 4 + asr w22, w25, 2 + str w0, [x29,124] + add x25, x20, :lo12:.LANCHOR0 + lsl w0, w22, 1 + uxtb x23, w23 + str w0, [x29,120] + add x0, x25, 40 + add x23, x23, 1 + str x0, [x29,128] + sub w0, w26, #5 + str w0, [x29,136] +.L285: + ldrb w0, [x25,1676] + cmp w0, w21 + bhi .L325 +.L284: + add x20, x20, :lo12:.LANCHOR0 + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + strb w28, [x20,4057] + strb w27, [x20,4058] + ldp x25, x26, [sp,64] + ldp x19, x20, [sp,16] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret +.L325: + add x0, x25, x21, sxtw + ldrb w1, [x0,1680] + str x1, [x29,112] + lsl x0, x1, 4 + mov x24, x1 + ldr x1, [x29,128] + add x6, x1, x0 + ldr x0, [x1,x0] + ldrb w19, [x6,8] + add x19, x0, x19, lsl 8 + mov w0, 255 + str w0, [x19,2056] + mov w0, w24 + bl NandcWaitFlashReady + cmp w26, 7 + add x6, x25, 4056 + ldr x1, [x29,112] + beq .L286 + add x1, x6, x1, lsl 6 + add x6, x1, 20 + b .L287 +.L286: + mov x0, 160 + madd x1, x1, x0, x6 + add x6, x1, 28 +.L287: + mov w0, 54 + cmp w26, 4 + str w0, [x19,2056] + bne .L288 + mov w0, 255 + str w0, [x19,2052] + mov w0, 64 + str w0, [x19,2048] + mov w0, 204 + b .L360 +.L288: + ldr w0, [x29,136] + cmp w0, 1 + bhi .L290 + ldrb w0, [x25,4060] + str w0, [x19,2052] + mov w0, 82 + b .L361 +.L290: + mov w0, 174 + str w0, [x19,2052] + str wzr, [x19,2048] + mov w0, 176 +.L360: + str w0, [x19,2052] + mov w0, 77 +.L361: + str w0, [x19,2048] + mov w0, 22 + str w0, [x19,2056] + mov w0, 23 + str w0, [x19,2056] + mov w0, 4 + str w0, [x19,2056] + mov w0, 25 + str w0, [x19,2056] + cmp w26, 6 + str wzr, [x19,2056] + str wzr, [x19,2052] + str wzr, [x19,2052] + bne .L291 + mov w0, 31 + str w0, [x19,2052] + b .L292 +.L291: + str wzr, [x19,2052] +.L292: + mov w7, 2 + str w7, [x19,2052] + str wzr, [x19,2052] + mov w0, 48 + str w0, [x19,2056] + mov w0, w24 + str x6, [x29,104] + str x7, [x29,112] + bl NandcWaitFlashReady + ldr w0, [x29,136] + mov w1, 16 + ldr x6, [x29,104] + cmp w0, 1 + bls .L294 + ldr x7, [x29,112] + cmp w26, 7 + mov w1, 32 + csel w1, w1, w7, eq +.L294: + ldr x0, [x25] + mov x7, 0 +.L295: + ldr w8, [x19,2048] + strb w8, [x0,x7] + add x7, x7, 1 + cmp w1, w7, uxtb + bhi .L295 + cmp w26, 7 + bne .L296 + mov w1, 0 +.L298: + ldrb w7, [x0] + cmp w7, 12 + beq .L297 + ldrb w7, [x0,1] + cmp w7, 10 + beq .L297 + add w1, w1, 1 + add x0, x0, 4 + uxtb w1, w1 + cmp w1, 8 + bne .L298 + b .L299 +.L297: + cmp w1, 7 + bne .L300 +.L299: + adrp x0, .LC2 + mov w1, 0 + add x0, x0, :lo12:.LC2 + bl printk +.L301: + b .L301 +.L296: + cmp w26, 6 + bne .L300 + mov x1, 0 +.L302: + ldrb w7, [x0,x1] + cmp w7, 12 + beq .L300 + add x7, x0, x1 + ldrb w7, [x7,8] + cmp w7, 4 + beq .L300 + add x1, x1, 1 + cmp x1, 8 + bne .L302 + adrp x0, .LC2 + mov w1, 0 + add x0, x0, :lo12:.LC2 + bl printk +.L304: + b .L304 +.L300: + ldr x9, [x25] + mov x0, 0 +.L305: + ldr w1, [x29,124] + cmp w1, w0 + ble .L362 + ldr w1, [x19,2048] + strb w1, [x9,x0] + add x0, x0, 1 + b .L305 +.L362: + ldr x11, [x25] + mov w8, w22 + mov w7, 8 +.L308: + mov w0, 0 +.L307: + add w1, w0, w8 + add w0, w0, 1 + sbfiz x1, x1, 2, 32 + cmp w0, w22 + ldr w10, [x11,x1] + mvn w10, w10 + str w10, [x11,x1] + bne .L307 + ldr w0, [x29,120] + subs w7, w7, #1 + add w8, w8, w0 + bne .L308 + mov x7, 0 + mov w15, 1 +.L309: + mov w1, 0 + ldr x14, [x25] + mov w10, w1 +.L313: + lsl w8, w15, w10 + mov w12, w7 + mov w0, 16 + mov w11, 0 +.L311: + ldr w13, [x14,w12,sxtw 2] + add w12, w12, w22 + and w13, w8, w13 + cmp w13, w8 + csinc w11, w11, w11, ne + subs w0, w0, #1 + bne .L311 + cmp w11, 9 + orr w8, w1, w8 + add w10, w10, 1 + csel w1, w8, w1, cs + cmp w10, 32 + bne .L313 + str w1, [x14,x7,lsl 2] + add x7, x7, 1 + cmp w22, w7 + bgt .L309 + mov x7, 0 + ldr x1, [x25] + mov w8, w7 +.L316: + ldr w10, [x1,x7] + add x7, x7, 4 + cmp w10, wzr + csinc w8, w8, w8, ne + cmp x7, 32 + bne .L316 + cmp w8, 7 + ble .L317 + adrp x0, .LC3 + mov w2, 1 + add x0, x0, :lo12:.LC3 + mov w3, 1024 + bl rknand_print_hex + adrp x0, .LC2 + mov w1, 0 + add x0, x0, :lo12:.LC2 + bl printk +.L318: + b .L318 +.L317: + cmp w26, 6 + mov w7, 4 + beq .L319 + cmp w26, 7 + mov w7, 10 + mov w1, 8 + csel w7, w1, w7, ne +.L319: + mov w8, 0 +.L320: + mov x1, 0 +.L321: + add w10, w0, w1 + ldrb w11, [x9,x1] + add x1, x1, 1 + cmp w28, w1, uxtb + strb w11, [x6,w10,sxtw] + bhi .L321 + add w8, w8, 1 + add x9, x9, x23 + cmp w8, w27 + add w0, w0, w7 + blt .L320 + mov w0, 255 + str w0, [x19,2056] + mov w0, w24 + bl NandcWaitFlashReady + ldr w0, [x29,136] + cmp w0, 1 + bhi .L323 + mov w0, 54 + str w0, [x19,2056] + adrp x0, .LANCHOR0+4060 + mov w1, -1 + ldrb w0, [x0,#:lo12:.LANCHOR0+4060] + str w0, [x19,2052] + mov w0, 22 + str wzr, [x19,2048] + str w0, [x19,2056] + mov w0, w21 + bl FlashReadCmd + b .L324 +.L323: + mov w0, 56 + str w0, [x19,2056] +.L324: + mov w0, w24 + add w21, w21, 1 + bl NandcWaitFlashReady + uxtb w21, w21 + b .L285 + .size HynixGetReadRetryDefault, .-HynixGetReadRetryDefault + .align 2 + .global FlashGetReadRetryDefault + .type FlashGetReadRetryDefault, %function +FlashGetReadRetryDefault: + stp x29, x30, [sp, -16]! + mov w1, w0 + add x29, sp, 0 + cbz w0, .L363 + sub w2, w0, #1 + cmp w2, 6 + bhi .L365 + bl HynixGetReadRetryDefault + b .L363 +.L365: + cmp w0, 49 + bne .L366 + adrp x0, .LANCHOR0 + mov w2, 64 + add x0, x0, :lo12:.LANCHOR0 + add x0, x0, 4060 + strb w1, [x0,-4] + mov w1, 4 + strb w1, [x0,-3] + mov w1, 15 + strb w1, [x0,-2] + adrp x1, .LANCHOR1 + add x1, x1, :lo12:.LANCHOR1 + add x1, x1, 2904 + b .L381 +.L366: + sub w0, w0, #65 + cmp w0, 1 + bls .L372 + cmp w1, 33 + bne .L367 +.L372: + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + strb w1, [x0,4056] + mov w1, 4 + b .L382 +.L367: + cmp w1, 67 + beq .L373 + cmp w1, 34 + bne .L369 +.L373: + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + strb w1, [x0,4056] + mov w1, 5 +.L382: + strb w1, [x0,4057] + mov w1, 7 + strb w1, [x0,4058] + adrp x1, .LANCHOR1 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, 4060 + add x1, x1, 2752 + mov w2, 45 + b .L381 +.L369: + cmp w1, 68 + beq .L374 + cmp w1, 35 + bne .L363 +.L374: + adrp x0, .LANCHOR0 + mov w2, 95 + add x0, x0, :lo12:.LANCHOR0 + add x0, x0, 4060 + strb w1, [x0,-4] + mov w1, 5 + strb w1, [x0,-3] + mov w1, 17 + strb w1, [x0,-2] + adrp x1, .LANCHOR1 + add x1, x1, :lo12:.LANCHOR1 + add x1, x1, 2800 +.L381: + bl ftl_memcpy +.L363: + ldp x29, x30, [sp], 16 + ret + .size FlashGetReadRetryDefault, .-FlashGetReadRetryDefault + .align 2 + .global FlashReadDpCmd + .type FlashReadDpCmd, %function +FlashReadDpCmd: + stp x29, x30, [sp, -80]! + adrp x3, .LANCHOR0 + add x29, sp, 0 + stp x21, x22, [sp,32] + add x3, x3, :lo12:.LANCHOR0 + uxtb w21, w0 + add x4, x3, 40 + sbfiz x0, x21, 4, 32 + add x3, x3, 104 + str x23, [sp,48] + stp x19, x20, [sp,16] + add x5, x4, x0 + and w23, w2, 255 + ldr x6, [x4,x0] + lsr w22, w2, 8 + ldrb w0, [x3,16] + lsr w4, w1, 8 + ldrb w19, [x5,8] + lsr w20, w2, 16 + cmp w0, 1 + and w5, w1, 255 + lsr w0, w1, 16 + bne .L384 + add x19, x6, x19, lsl 8 + ldrb w2, [x3,8] + str x1, [x29,72] + str w2, [x19,2056] + str wzr, [x19,2052] + str wzr, [x19,2052] + str w5, [x19,2052] + str w4, [x19,2052] + str w0, [x19,2052] + ldrb w0, [x3,9] + str w0, [x19,2056] + mov w0, w21 + bl NandcWaitFlashReady + str wzr, [x19,2056] + str wzr, [x19,2052] + mov w0, 48 + str wzr, [x19,2052] + str w23, [x19,2052] + str w22, [x19,2052] + str w20, [x19,2052] + str w0, [x19,2056] + ldr x1, [x29,72] + b .L385 +.L384: + add x19, x6, x19, lsl 8 + ldrb w2, [x3,8] + str w2, [x19,2056] + str w5, [x19,2052] + str w4, [x19,2052] + str w0, [x19,2052] + ldrb w0, [x3,9] + str w0, [x19,2056] + mov w0, 48 + str w23, [x19,2052] + str w22, [x19,2052] + str w20, [x19,2052] + str w0, [x19,2056] +.L385: + mov w0, w21 + bl FlashSetRandomizer + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 80 + ret + .size FlashReadDpCmd, .-FlashReadDpCmd + .align 2 + .global ftl_flash_de_init + .type ftl_flash_de_init, %function +ftl_flash_de_init: + stp x29, x30, [sp, -32]! + mov w0, 0 + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR2 + add x19, x19, :lo12:.LANCHOR2 + bl NandcWaitFlashReady + bl FlashSetReadRetryDefault + ldrb w0, [x19,565] + cbz w0, .L387 + ldrb w0, [x19,564] + tbz x0, 0, .L387 + mov w0, 1 + bl FlashSetInterfaceMode + mov w0, 1 + bl NandcSetMode + strb wzr, [x19,565] +.L387: + adrp x0, .LANCHOR0+40 + ldr x0, [x0,#:lo12:.LANCHOR0+40] + str wzr, [x0,336] + mov w0, 0 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size ftl_flash_de_init, .-ftl_flash_de_init + .align 2 + .global NandcRandmzSel + .type NandcRandmzSel, %function +NandcRandmzSel: + adrp x2, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x2, x2, :lo12:.LANCHOR0 + add x2, x2, 40 + ldr x0, [x2,x0] + str w1, [x0,336] + ret + .size NandcRandmzSel, .-NandcRandmzSel + .align 2 + .global NandcTimeCfg + .type NandcTimeCfg, %function +NandcTimeCfg: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + mov w19, w0 + mov w0, 0 + bl rknand_get_clk_rate + mov w2, 16960 + adrp x1, .LANCHOR0 + movk w2, 0xf, lsl 16 + add x1, x1, :lo12:.LANCHOR0 + sdiv w0, w0, w2 + cmp w0, 250 + ble .L396 + ldr x0, [x1,3976] + mov w1, 8354 + b .L403 +.L396: + cmp w0, 220 + ble .L398 + ldr x0, [x1,3976] + b .L404 +.L398: + cmp w0, 185 + ble .L399 + ldr x0, [x1,3976] + mov w1, 4226 + b .L403 +.L399: + cmp w0, 160 + ldr x0, [x1,3976] + ble .L400 + mov w1, 4194 + b .L403 +.L400: + cmp w19, 35 + mov w1, 4193 + bls .L403 + cmp w19, 99 + mov w1, 4225 + bls .L403 +.L404: + mov w1, 8322 +.L403: + str w1, [x0,4] + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size NandcTimeCfg, .-NandcTimeCfg + .align 2 + .global FlashTimingCfg + .type FlashTimingCfg, %function +FlashTimingCfg: + sub w1, w0, #4096 + sub w1, w1, #97 + stp x29, x30, [sp, -16]! + and w1, w1, -33 + cmp w1, 1 + add x29, sp, 0 + bls .L406 + mov w1, 8322 + cmp w0, w1 + bne .L407 +.L406: + adrp x1, .LANCHOR0+3976 + ldr x1, [x1,#:lo12:.LANCHOR0+3976] + str w0, [x1,4] +.L407: + adrp x0, .LANCHOR1+277 + ldrb w0, [x0,#:lo12:.LANCHOR1+277] + bl NandcTimeCfg + ldp x29, x30, [sp], 16 + ret + .size FlashTimingCfg, .-FlashTimingCfg + .align 2 + .global NandcInit + .type NandcInit, %function +NandcInit: + stp x29, x30, [sp, -32]! + mov w2, 1 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + adrp x19, .LANCHOR2 + add x20, x20, :lo12:.LANCHOR0 + add x19, x19, :lo12:.LANCHOR2 + str w2, [x20,64] + mov w2, 2 + str x0, [x20,40] + str x0, [x20,56] + str w2, [x20,80] + mov w2, 3 + str x0, [x20,72] + str w2, [x20,96] + str x0, [x20,88] + str x0, [x20,3976] + str wzr, [x20,48] + ldr w1, [x0] + ubfx x2, x1, 13, 1 + str w2, [x19,568] + ldr w2, [x0,352] + and w1, w1, 245760 + orr w1, w1, 256 + ubfx x2, x2, 16, 4 + str w2, [x19,572] + ldr w2, [x0,352] + str w2, [x19,576] + str w1, [x0] + ldr x0, [x20,3976] + str wzr, [x0,336] + mov w0, 40 + bl NandcTimeCfg + ldr x0, [x20,3976] + mov w1, 8322 + str w1, [x0,344] + mov w1, 6145 + movk w1, 0x18, lsl 16 + str w1, [x0,304] + mov w0, 36864 + bl ftl_malloc + str wzr, [x19,632] + str x0, [x19,584] + str x0, [x19,592] + add x0, x0, 32768 + str wzr, [x19,640] + str x0, [x19,600] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size NandcInit, .-NandcInit + .align 2 + .global NandcGetTimeCfg + .type NandcGetTimeCfg, %function +NandcGetTimeCfg: + adrp x4, .LANCHOR0 + add x4, x4, :lo12:.LANCHOR0 + ldr x5, [x4,3976] + ldr w5, [x5,4] + str w5, [x0] + ldr x0, [x4,3976] + ldr w0, [x0] + str w0, [x1] + ldr x0, [x4,3976] + ldr w0, [x0,304] + str w0, [x2] + ldr x1, [x4,3976] + ldr w0, [x1,308] + ldr w1, [x1,344] + and w0, w0, 255 + orr w0, w0, w1, lsl 16 + str w0, [x3] + ret + .size NandcGetTimeCfg, .-NandcGetTimeCfg + .align 2 + .global NandcBchSel + .type NandcBchSel, %function +NandcBchSel: + adrp x1, .LANCHOR0+3976 + uxtb w0, w0 + cmp w0, 16 + ldr x2, [x1,#:lo12:.LANCHOR0+3976] + mov w1, 1 + str w1, [x2,8] + adrp x1, .LANCHOR2+644 + str w0, [x1,#:lo12:.LANCHOR2+644] + mov w1, 4096 + bne .L411 +.L414: + and w1, w1, -17 + b .L412 +.L411: + cmp w0, 24 + bne .L413 + orr w1, w1, 16 + b .L412 +.L413: + cmp w0, 40 + orr w1, w1, 262144 + orr w1, w1, 16 + beq .L414 +.L412: + orr w1, w1, 1 + str w1, [x2,12] + ret + .size NandcBchSel, .-NandcBchSel + .align 2 + .global FlashBchSel + .type FlashBchSel, %function +FlashBchSel: + stp x29, x30, [sp, -16]! + adrp x1, .LANCHOR0+4044 + uxtb w0, w0 + add x29, sp, 0 + strb w0, [x1,#:lo12:.LANCHOR0+4044] + bl NandcBchSel + ldp x29, x30, [sp], 16 + ret + .size FlashBchSel, .-FlashBchSel + .align 2 + .global ftl_flash_resume + .type ftl_flash_resume, %function +ftl_flash_resume: + stp x29, x30, [sp, -48]! + adrp x0, .LANCHOR0 + add x1, x0, :lo12:.LANCHOR0 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + adrp x20, IDByte + mov x19, 0 + ldr x2, [x1,3976] + mov x22, x0 + ldr w3, [x1,3984] + add x20, x20, :lo12:IDByte + ldr w21, [x1,4000] + str w3, [x2] + ldr w3, [x1,3988] + ldr x2, [x1,3976] + str w3, [x2,4] + ldr w3, [x1,3992] + ldr x2, [x1,3976] + str w3, [x2,8] + ldr w3, [x1,3996] + str w3, [x2,12] + str w21, [x2,304] + ldr w3, [x1,4004] + str w3, [x2,308] + ldr w3, [x1,4008] + str w3, [x2,336] + ldr w1, [x1,4012] + str w1, [x2,344] +.L421: + lsl x0, x19, 3 + ldrb w1, [x0,x20] + sub w1, w1, #1 + uxtb w1, w1 + cmp w1, 253 + bhi .L420 + mov w0, w19 + bl FlashReset +.L420: + add x19, x19, 1 + cmp x19, 4 + bne .L421 + adrp x19, .LANCHOR2 + add x19, x19, :lo12:.LANCHOR2 + ldrb w0, [x19,565] + cbz w0, .L422 + mov w0, 1 + bl NandcSetMode + ldrb w0, [x19,564] + bl FlashSetInterfaceMode + ldrb w0, [x19,564] + bl NandcSetMode + lsr w0, w21, 8 + bl NandcSetDdrPara +.L422: + add x0, x22, :lo12:.LANCHOR0 + ldr x0, [x0,1912] + ldrb w0, [x0,20] + bl FlashBchSel + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size ftl_flash_resume, .-ftl_flash_resume + .align 2 + .global ftl_nandc_get_irq_status + .type ftl_nandc_get_irq_status, %function +ftl_nandc_get_irq_status: + ldr w0, [x0,372] + ret + .size ftl_nandc_get_irq_status, .-ftl_nandc_get_irq_status + .align 2 + .global NandcIqrWaitFlashReady + .type NandcIqrWaitFlashReady, %function +NandcIqrWaitFlashReady: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + mov x19, x0 + bl rk_nandc_rb_irq_flag_init + ldr w0, [x19,368] + orr w0, w0, 2 + str w0, [x19,368] + ldr w0, [x19,364] + orr w0, w0, 2 + str w0, [x19,364] + ldr w0, [x19] + tbnz x0, 9, .L429 + mov x0, x19 + bl wait_for_nand_flash_ready + b .L428 +.L429: + ldr w0, [x19,368] + orr w0, w0, 2 + str w0, [x19,368] + ldr w0, [x19,364] + and w0, w0, -3 + str w0, [x19,364] +.L428: + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size NandcIqrWaitFlashReady, .-NandcIqrWaitFlashReady + .align 2 + .global FlashEraseBlocks + .type FlashEraseBlocks, %function +FlashEraseBlocks: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x25, x26, [sp,64] + mov w26, w1 + adrp x1, .LANCHOR0 + stp x19, x20, [sp,16] + add x20, x1, :lo12:.LANCHOR0 + str x1, [x29,104] + stp x23, x24, [sp,48] + stp x21, x22, [sp,32] + stp x27, x28, [sp,80] + mov w23, w2 + mov x24, x0 + ldrb w2, [x20,24] + mov w19, 0 + cbz w2, .L432 + mov w1, w23 + bl FlashEraseSLc2KBlocks + b .L433 +.L432: + mov w27, 56 + adrp x28, .LANCHOR2 + add x25, x20, 1720 +.L458: + cmp w19, w23 + bcs .L459 + umull x5, w19, w27 + mov w1, 0 + sub w4, w23, w19 + add x21, x24, x5 + add x2, x29, 120 + mov x0, x21 + add x3, x29, 124 + str x5, [x29,96] + bl LogAddr2PhyAddr + mov w22, w0 + ldrb w1, [x20,1676] + ldr w0, [x29,124] + ldr x5, [x29,96] + cmp w0, w1 + bcc .L434 + mov w0, -1 + str w0, [x24,x5] + b .L435 +.L434: + add x1, x28, :lo12:.LANCHOR2 + mov x2, 24 + ldrb w1, [x1,648] + cmp w1, wzr + uxtw x1, w0 + csel w22, w22, wzr, ne + madd x1, x1, x2, x25 + ldr x1, [x1,8] + cbz x1, .L437 + bl FlashWaitCmdDone +.L437: + ldr w1, [x29,124] + mov x0, 24 + ldr w2, [x29,120] + madd x0, x1, x0, x25 + str x21, [x0,8] + str xzr, [x0,16] + str w2, [x0,4] + cbz w22, .L438 + add w2, w19, 1 + umull x2, w2, w27 + add x2, x24, x2 + str x2, [x0,16] +.L438: + add x0, x20, x1 + ldrb w21, [x0,1680] + mov x0, 24 + mul x1, x1, x0 + mov w0, w21 + strb w21, [x25,x1] + bl NandcFlashCs + cmp w26, 1 + bne .L439 + ldrb w0, [x20,136] + cbz w0, .L439 + mov w0, w21 + bl flash_enter_slc_mode + b .L440 +.L439: + mov w0, w21 + bl flash_exit_slc_mode +.L440: + ldr w1, [x29,124] + add x0, x20, 1688 + add w19, w19, w22 + ldr w0, [x0,x1,lsl 2] + ldr w1, [x29,120] + cmp w0, wzr + mov w0, w21 + cset w2, ne + bl FlashWaitReadyEN + ldr w1, [x29,120] + mov w0, w21 + mov w2, w22 + bl FlashEraseCmd + mov w0, w21 + bl NandcFlashDeCs +.L435: + add w19, w19, 1 + b .L458 +.L459: + ldr x0, [x29,104] + mov x20, 0 + mov x21, 24 + add x19, x0, :lo12:.LANCHOR0 + ldr x0, [x19,3976] + bl NandcIqrWaitFlashReady +.L442: + ldrb w0, [x19,1676] + cmp w0, w20 + bls .L460 + mov w0, w20 + bl FlashWaitCmdDone + cmp w26, 1 + bne .L443 + ldrb w0, [x19,136] + cbz w0, .L443 + madd x0, x20, x21, x19 + ldrb w0, [x0,1720] + bl flash_exit_slc_mode +.L443: + add x20, x20, 1 + b .L442 +.L460: + mov w0, 0 +.L433: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size FlashEraseBlocks, .-FlashEraseBlocks + .align 2 + .global NandcSendDumpDataStart + .type NandcSendDumpDataStart, %function +NandcSendDumpDataStart: + sub sp, sp, #16 + mov w2, 1 + mov w1, 10 + bfi w1, w2, 5, 2 + ldr w2, [x0,16] + str w2, [sp,8] + orr w1, w1, 536870912 + orr w1, w1, 1024 + ldr w2, [sp,8] + orr w1, w1, 2097152 + and w2, w2, -5 + str w2, [sp,8] + ldr w2, [sp,8] + add sp, sp, 16 + str w2, [x0,16] + str w1, [x0,8] + orr w1, w1, 4 + str w1, [x0,8] + ret + .size NandcSendDumpDataStart, .-NandcSendDumpDataStart + .align 2 + .global NandcSendDumpDataDone + .type NandcSendDumpDataDone, %function +NandcSendDumpDataDone: + sub sp, sp, #16 +.L463: + ldr w1, [x0,8] + str w1, [sp,8] + ldr w1, [sp,8] + tbz x1, 20, .L463 + add sp, sp, 16 + ret + .size NandcSendDumpDataDone, .-NandcSendDumpDataDone + .align 2 + .global NandcXferStart + .type NandcXferStart, %function +NandcXferStart: + stp x29, x30, [sp, -96]! + ubfiz x0, x0, 4, 8 + ubfx x3, x3, 1, 7 + add x29, sp, 0 + stp x21, x22, [sp,32] + mov x22, x4 + adrp x4, .LANCHOR0 + add x4, x4, :lo12:.LANCHOR0 + str x25, [sp,64] + add x4, x4, 40 + uxtb w25, w1 + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + add x1, x4, x0 + ubfiz w20, w25, 1, 1 + ldr x21, [x4,x0] + orr w20, w20, 8 + adrp x19, .LANCHOR2 + uxtb w23, w2 + ldrb w0, [x1,8] + mov w1, 16 + ldr w24, [x21,12] + bfi w24, w1, 8, 8 + and w24, w24, -9 + bfi w24, w0, 5, 3 + mov w0, 1 + bfi w20, w0, 5, 2 + add x0, x19, :lo12:.LANCHOR2 + orr w20, w20, 536870912 + orr w20, w20, 1024 + ldr w0, [x0,572] + bfi w20, w3, 4, 1 + cmp w0, 3 + bls .L467 + ldr w0, [x21,16] + cmp x5, xzr + str w0, [x29,88] + cset w7, ne + ldr w0, [x29,88] + and w0, w0, -5 + str w0, [x29,88] + cbnz w7, .L481 + cbz x22, .L468 +.L481: + cbnz w25, .L470 +.L478: + mov x0, x21 + add w23, w23, 1 + asr w23, w23, 1 + bl rk_nandc_xfer_irq_flag_init + bfi w20, w23, 22, 6 + ldr w0, [x21,368] + orr w0, w0, 1 + str w0, [x21,368] + ldr w0, [x21,364] + orr w0, w0, 1 + str w0, [x21,364] + mov x0, x22 + cbnz x22, .L472 + add x0, x19, :lo12:.LANCHOR2 + ldr x0, [x0,592] + b .L472 +.L470: + add x1, x19, :lo12:.LANCHOR2 + mov w4, 128 + mov w2, 0 + lsr w8, w23, 1 + mov w3, w2 + mov w9, -1 + ldr w0, [x1,644] + cmp w0, 25 + mov w0, 64 + csel w4, w0, w4, cc +.L474: + cmp w3, w8 + bcs .L478 + lsr w0, w2, 2 + ubfiz x0, x0, 2, 30 + cbz w7, .L475 + ldrh w6, [x5,2] + ldr x10, [x1,600] + ldrh w11, [x5],4 + orr w6, w11, w6, lsl 16 + str w6, [x10,x0] + b .L476 +.L475: + ldr x6, [x1,600] + str w9, [x6,x0] +.L476: + add w3, w3, 1 + add w2, w2, w4 + b .L474 +.L472: + add x19, x19, :lo12:.LANCHOR2 + ubfx x23, x20, 22, 5 + mov w2, w25 + and x22, x22, 3 + ldr x1, [x19,600] + str x1, [x19,616] + lsl w1, w23, 10 + str x0, [x19,608] + bl rknand_dma_map_single + str w0, [x19,624] + ldr x0, [x19,616] + lsl w1, w23, 7 + mov w2, w25 + bl rknand_dma_map_single + str w0, [x19,628] + mov w0, 1 + str w0, [x19,632] + ldr w0, [x19,624] + mov w1, 16 + str w0, [x21,20] + ldr w0, [x19,628] + str w0, [x21,24] + str wzr, [x29,88] + ldr w0, [x29,88] + bfi w0, w1, 9, 5 + str w0, [x29,88] + ldr w0, [x29,88] + orr w0, w0, 448 + str w0, [x29,88] + cbnz x22, .L479 + ldr w0, [x29,88] + mov w1, 2 + bfi w0, w1, 3, 3 + str w0, [x29,88] +.L479: + ldr w0, [x29,88] + cmp w25, wzr + cset w1, eq + orr w0, w0, 4 + str w0, [x29,88] + ldr w0, [x29,88] + bfi w0, w1, 1, 1 + str w0, [x29,88] + ldr w0, [x29,88] + orr w0, w0, 1 + str w0, [x29,88] +.L468: + ldr w0, [x29,88] + str w0, [x21,16] +.L467: + str w24, [x21,12] + str w20, [x21,8] + orr w20, w20, 4 + str w20, [x21,8] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldr x25, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size NandcXferStart, .-NandcXferStart + .align 2 + .global NandcXferComp + .type NandcXferComp, %function +NandcXferComp: + stp x29, x30, [sp, -80]! + adrp x1, .LANCHOR0 + ubfiz x0, x0, 4, 8 + add x1, x1, :lo12:.LANCHOR0 + add x29, sp, 0 + add x1, x1, 40 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + str x23, [sp,48] + adrp x20, .LANCHOR2 + ldr x19, [x1,x0] + add x0, x20, :lo12:.LANCHOR2 + ldr w0, [x0,572] + cmp w0, 3 + bls .L516 + ldr w0, [x19,16] + tbz x0, 2, .L516 + mov x0, x19 + bl wait_for_nandc_xfer_completed + ldr w21, [x19,16] + ldr w0, [x19,8] + ubfx x21, x21, 1, 1 + str w0, [x29,64] + cbz w21, .L487 + adrp x22, .LC4 + adrp x23, .LC5 + mov w21, 0 + add x22, x22, :lo12:.LC4 + add x23, x23, :lo12:.LC5 +.L488: + ldr w2, [x19,28] + ldr w1, [x29,64] + ubfx x2, x2, 16, 5 + ubfx x1, x1, 22, 6 + cmp w2, w1 + bge .L496 + add x0, x20, :lo12:.LANCHOR2 + ldr w0, [x0,572] + cmp w0, 5 + bhi .L489 +.L492: + add w21, w21, 1 + and w0, w21, 16777215 + cbnz w0, .L488 + ldr w2, [x19,28] + mov w1, w21 + ldr w3, [x29,64] + mov x0, x22 + ubfx x2, x2, 16, 5 + ubfx x3, x3, 22, 6 + bl printk + mov x0, x23 + mov x1, x19 + mov w2, 4 + mov w3, 512 + bl rknand_print_hex + b .L488 +.L489: + ldr w0, [x19] + str w0, [x29,72] + ldr w0, [x29,72] + tbz x0, 13, .L492 + ldr w0, [x29,72] + tbz x0, 17, .L492 +.L496: + add x19, x20, :lo12:.LANCHOR2 + add x19, x19, 592 + ldr w0, [x19,40] + cbz w0, .L497 + ldr w1, [x29,64] + mov w2, 0 + ldr w0, [x19,32] + ubfx x1, x1, 22, 5 + lsl w1, w1, 10 + bl rknand_dma_unmap_single + ldr w1, [x29,64] + mov w2, 0 + ldr w0, [x19,36] + ubfx x1, x1, 22, 5 + lsl w1, w1, 7 + bl rknand_dma_unmap_single + b .L497 +.L487: + adrp x22, .LC6 + adrp x23, .LC5 + add x22, x22, :lo12:.LC6 + add x23, x23, :lo12:.LC5 +.L498: + ldr w0, [x29,64] + tbnz x0, 20, .L524 + ldr w0, [x19,8] + add w21, w21, 1 + str w0, [x29,64] + and w0, w21, 16777215 + cbnz w0, .L498 + ldr w2, [x29,64] + mov w1, w21 + ldr w3, [x19,28] + mov x0, x22 + ubfx x3, x3, 16, 5 + bl printk + mov x0, x23 + mov x1, x19 + mov w2, 4 + mov w3, 512 + bl rknand_print_hex + b .L498 +.L524: + add x0, x20, :lo12:.LANCHOR2 + ldr w0, [x0,640] + cbz w0, .L501 + mov x0, x19 + bl NandcSendDumpDataStart +.L501: + add x21, x20, :lo12:.LANCHOR2 + add x21, x21, 592 + ldr w0, [x21,40] + cbz w0, .L502 + ldr w1, [x29,64] + mov w2, 1 + ldr w0, [x21,32] + ubfx x1, x1, 22, 5 + lsl w1, w1, 10 + bl rknand_dma_unmap_single + ldr w1, [x29,64] + mov w2, 1 + ldr w0, [x21,36] + ubfx x1, x1, 22, 5 + lsl w1, w1, 7 + bl rknand_dma_unmap_single +.L502: + add x0, x20, :lo12:.LANCHOR2 + ldr w0, [x0,640] + cbz w0, .L497 + mov x0, x19 + bl NandcSendDumpDataDone +.L497: + add x20, x20, :lo12:.LANCHOR2 + str wzr, [x20,632] + b .L485 +.L516: + ldr w0, [x19,8] + str w0, [x29,64] + ldr w0, [x29,64] + tbz x0, 20, .L516 +.L485: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size NandcXferComp, .-NandcXferComp + .align 2 + .global NandcCopy1KB + .type NandcCopy1KB, %function +NandcCopy1KB: + stp x29, x30, [sp, -48]! + uxtb w1, w1 + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + uxtb w19, w2 + cmp w1, 1 + mov x20, x4 + ubfiz x2, x19, 9, 8 + add x4, x0, 4096 + add x21, x0, 512 + add x2, x4, x2 + bne .L526 + cbz x3, .L527 + mov x0, x2 + mov x1, x3 + mov w2, 1024 + bl ftl_memcpy +.L527: + cbz x20, .L525 + mov w0, 48 + lsr w19, w19, 1 + ldrb w1, [x20,1] + mul w19, w19, w0 + ldrb w0, [x20,2] + asr w19, w19, 2 + lsl w0, w0, 16 + orr w0, w0, w1, lsl 8 + ldrb w1, [x20] + orr w0, w0, w1 + ldrb w1, [x20,3] + orr w0, w0, w1, lsl 24 + str w0, [x21,w19,sxtw 2] + b .L525 +.L526: + cbz x3, .L530 + mov x1, x2 + mov x0, x3 + mov w2, 1024 + bl ftl_memcpy +.L530: + cbz x20, .L525 + mov w0, 48 + lsr w19, w19, 1 + mul w19, w19, w0 + asr w19, w19, 2 + ldr w0, [x21,w19,sxtw 2] + strb w0, [x20] + lsr w1, w0, 8 + strb w1, [x20,1] + lsr w1, w0, 16 + lsr w0, w0, 24 + strb w1, [x20,2] + strb w0, [x20,3] +.L525: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size NandcCopy1KB, .-NandcCopy1KB + .align 2 + .global NandcXferData + .type NandcXferData, %function +NandcXferData: + stp x29, x30, [sp, -176]! + add x29, sp, 0 + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + uxtb w24, w0 + adrp x0, .LANCHOR0 + stp x27, x28, [sp,80] + add x0, x0, :lo12:.LANCHOR0 + add x0, x0, x24, sxtw 4 + ldr x19, [x0,40] + and x0, x3, 63 + uxtb w20, w1 + uxtb w23, w2 + mov x25, x3 + mov x21, x4 + cbnz x0, .L542 + cbnz x4, .L543 + add x0, x29, 112 + mov w1, 255 + mov w2, 64 + add x21, x29, 112 + bl ftl_memset +.L543: + mov w0, w24 + mov w1, w20 + mov w2, w23 + mov w3, 0 + mov x4, x25 + mov x5, x21 + mov w22, 0 + bl NandcXferStart + mov w0, w24 + bl NandcXferComp + cbnz w20, .L544 + adrp x0, .LANCHOR2 + ubfx x3, x23, 1, 7 + add x2, x0, :lo12:.LANCHOR2 + mov w4, 128 + add x3, x21, x3, lsl 2 + ldr w1, [x2,644] + cmp w1, 25 + mov w1, 64 + csel w4, w1, w4, cc + mov w1, w20 +.L546: + cmp x21, x3 + add w5, w1, w4 + beq .L588 + ldr x6, [x2,600] + and x1, x1, 4294967292 + add x21, x21, 4 + ldr w1, [x6,x1] + strb w1, [x21,-4] + lsr w6, w1, 8 + strb w6, [x21,-3] + lsr w6, w1, 16 + strb w6, [x21,-2] + lsr w1, w1, 24 + strb w1, [x21,-1] + mov w1, w5 + b .L546 +.L588: + add x0, x0, :lo12:.LANCHOR2 + lsr w23, w23, 2 + ldr w4, [x0,644] + ldr w5, [x0,572] + mov w0, 0 + mov w22, w0 +.L548: + cmp w0, w23 + bcs .L544 + cbz w4, .L544 + uxtw x1, w0 + add x1, x1, 8 + ldr w1, [x19,x1,lsl 2] + str w1, [x29,104] + ldr w1, [x29,104] + tbnz x1, 2, .L572 + ldr w3, [x29,104] + ubfx x3, x3, 15, 1 + cbnz w3, .L572 + cmp w5, 5 + bls .L550 + ldr w2, [x29,104] + ubfx x6, x2, 3, 5 + ldr w2, [x29,104] + ldr w1, [x29,104] + ubfx x2, x2, 27, 1 + ubfx x3, x1, 16, 5 + ldr w1, [x29,104] + orr w2, w6, w2, lsl 5 + ubfx x1, x1, 29, 1 + orr w1, w3, w1, lsl 5 + ldr w3, [x29,104] + cmp w2, w1 + bls .L551 + ldr w1, [x29,104] + ubfx x3, x3, 3, 5 + ubfx x1, x1, 27, 1 + orr w3, w3, w1, lsl 5 + b .L552 +.L551: + ubfx x1, x3, 16, 5 + ldr w3, [x29,104] + ubfx x3, x3, 29, 1 + b .L587 +.L550: + cmp w5, 3 + bls .L552 + ldr w2, [x29,104] + ubfx x6, x2, 3, 5 + ldr w2, [x29,104] + ldr w1, [x29,104] + ubfx x2, x2, 28, 1 + ubfx x3, x1, 16, 5 + ldr w1, [x29,104] + orr w2, w6, w2, lsl 5 + ubfx x1, x1, 30, 1 + orr w1, w3, w1, lsl 5 + ldr w3, [x29,104] + cmp w2, w1 + bls .L553 + ubfx x1, x3, 3, 5 + ldr w3, [x29,104] + ubfx x3, x3, 28, 1 + b .L587 +.L553: + ubfx x1, x3, 16, 5 + ldr w3, [x29,104] + ubfx x3, x3, 30, 1 +.L587: + orr w3, w1, w3, lsl 5 +.L552: + cmp w22, w3 + csel w22, w22, w3, cs + b .L549 +.L572: + mov w22, -1 +.L549: + add w0, w0, 1 + b .L548 +.L544: + str wzr, [x19,16] + b .L555 +.L542: + cmp w20, 1 + bne .L586 + mov w22, 0 + mov w27, 2 +.L556: + cmp w22, w23 + bcs .L589 + and w26, w22, 3 + mov x3, x25 + cbz x25, .L558 + ubfiz x0, x22, 9, 23 + add x3, x25, x0 +.L558: + cmp x21, xzr + mov x0, x19 + csel w4, w27, wzr, ne + mov w1, 1 + mov w2, w26 + mul w4, w4, w22 + add w22, w22, 2 + add x4, x21, x4 + bl NandcCopy1KB + mov x4, 0 + mov w0, w24 + mov w1, 1 + mov w2, 2 + mov w3, w26 + mov x5, x4 + bl NandcXferStart + mov w0, w24 + bl NandcXferComp + b .L556 +.L589: + mov w22, 0 + b .L555 +.L586: + mov w1, 0 + mov x4, 0 + mov w26, 0 + mov w0, w24 + mov w2, 2 + mov w3, w1 + mov x5, x4 + mov w22, w26 + mov w27, 2 + bl NandcXferStart +.L561: + cmp w26, w23 + bcs .L555 + mov w0, w24 + add w28, w26, 2 + bl NandcXferComp + ldr w0, [x19,32] + cmp w28, w23 + str w0, [x29,104] + bcs .L562 + mov x4, 0 + mov w0, w24 + mov w1, 0 + mov w2, 2 + and w3, w28, 3 + mov x5, x4 + bl NandcXferStart +.L562: + ldr w0, [x29,104] + tbnz x0, 2, .L577 + ldr w0, [x29,104] + ubfx x1, x0, 3, 5 + ldr w0, [x29,104] + ubfx x0, x0, 27, 1 + orr w0, w1, w0, lsl 5 + cmp w22, w0 + csel w22, w22, w0, cs + b .L563 +.L577: + mov w22, -1 +.L563: + and w2, w26, 3 + mov x3, x25 + cbz x25, .L564 + ubfiz x3, x26, 9, 23 + add x3, x25, x3 +.L564: + cmp x21, xzr + mov x0, x19 + csel w4, w27, wzr, ne + mov w1, 0 + mul w4, w4, w26 + mov w26, w28 + add x4, x21, x4 + bl NandcCopy1KB + b .L561 +.L555: + cbnz w20, .L567 + adrp x0, .LANCHOR2+572 + ldr w0, [x0,#:lo12:.LANCHOR2+572] + cmp w0, 5 + bls .L567 + ldr w0, [x19] + mov w1, 8192 + movk w1, 0x2, lsl 16 + and w1, w0, w1 + cmp w1, 139264 + bne .L567 + orr w0, w0, 131072 + mov w22, -1 + str w0, [x19] +.L567: + mov w0, w22 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 176 + ret + .size NandcXferData, .-NandcXferData + .align 2 + .global FlashReadRawPage + .type FlashReadRawPage, %function +FlashReadRawPage: + stp x29, x30, [sp, -64]! + mov x4, x3 + add x29, sp, 0 + stp x19, x20, [sp,16] + uxtb w19, w0 + adrp x0, .LANCHOR1+265 + str x21, [sp,32] + mov x21, x2 + ldrb w20, [x0,#:lo12:.LANCHOR1+265] + cbnz w19, .L591 + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + ldrb w5, [x0,25] + ldr w0, [x0,28] + mul w0, w5, w0 + cmp w1, w0 + mov w0, 4 + csel w20, w20, w0, cs +.L591: + mov w0, w19 + str x4, [x29,48] + str x1, [x29,56] + bl NandcWaitFlashReady + mov w0, w19 + bl NandcFlashCs + ldr x1, [x29,56] + mov w0, w19 + bl FlashReadCmd + mov w0, w19 + bl NandcWaitFlashReady + ldr x4, [x29,48] + mov w2, w20 + mov x3, x21 + mov w1, 0 + mov w0, w19 + bl NandcXferData + mov w20, w0 + mov w0, w19 + bl NandcFlashDeCs + ldr x21, [sp,32] + mov w0, w20 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 64 + ret + .size FlashReadRawPage, .-FlashReadRawPage + .align 2 + .global FlashDdrTunningRead + .type FlashDdrTunningRead, %function +FlashDdrTunningRead: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + adrp x19, .LANCHOR2 + add x20, x20, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + uxtb w24, w0 + add x27, x19, :lo12:.LANCHOR2 + ldr x0, [x20,3976] + mov w22, 6 + mov w25, w1 + mov x28, x2 + mov x23, x3 + mov w26, w4 + ldr w0, [x0,304] + mov w21, 1024 + str w0, [x29,124] + ldr w0, [x27,572] + cmp w0, 8 + mov w0, 12 + csel w22, w22, w0, cc + cbz w4, .L594 + mov w0, 1 + bl FlashSetInterfaceMode + mov w0, 1 + bl NandcSetMode + mov w0, w24 + bl FlashReset + mov w1, w25 + mov x2, x28 + mov x3, x23 + mov w0, w24 + bl FlashReadRawPage + mov w21, w0 + ldrb w0, [x27,564] + bl FlashSetInterfaceMode + ldrb w0, [x27,564] + bl NandcSetMode + cmn w21, #1 + bne .L595 +.L604: + mov w21, -1 + b .L596 +.L595: + adrp x0, .LC7 + mov w1, w25 + add x0, x0, :lo12:.LC7 + mov w2, w21 + bl printk + cmp w21, 9 + bhi .L597 + add x20, x20, x24, sxtw 4 + ldr x0, [x20,40] + ldr w1, [x0,3840] + ldr w1, [x0] + orr w1, w1, 131072 + str w1, [x0] +.L597: + add x19, x19, :lo12:.LANCHOR2 + ldr w0, [x19,652] + add w0, w0, 1 + str w0, [x19,652] + cmp w0, 2047 + bls .L596 + mov x23, 0 + str wzr, [x19,652] + mov x28, x23 +.L594: + mov w19, 0 + mov w27, -1 + mov w5, w19 + mov w6, w19 + mov w20, w19 +.L602: + mov w0, w22 + str x5, [x29,104] + str x6, [x29,112] + bl NandcSetDdrPara + mov w1, w25 + mov w0, w24 + mov x2, x28 + mov x3, x23 + bl FlashReadRawPage + add w1, w21, 1 + ldr x6, [x29,112] + cmp w0, w1 + ldr x5, [x29,104] + bhi .L598 + cmp w0, 2 + bhi .L608 + add w20, w20, 1 + cmp w20, 9 + bls .L608 + sub w19, w22, w20 + mov w21, w0 + mov w27, 0 + b .L600 +.L598: + cmp w6, w20 + bcs .L609 + cmp w20, 7 + sub w5, w19, w20 + bhi .L610 + mov w6, w20 + b .L609 +.L608: + mov x23, 0 + mov w19, w22 + mov w21, w0 + mov w27, 0 + mov x28, x23 + b .L599 +.L609: + mov w20, 0 +.L599: + add w22, w22, 2 + cmp w22, 69 + bls .L602 +.L600: + cmp w6, w20 + csel w19, w19, w5, cc + b .L601 +.L610: + mov w19, w5 +.L601: + cbz w19, .L603 + adrp x0, .LC8 + mov w1, w19 + add x0, x0, :lo12:.LC8 + bl printk + mov w0, w19 + bl NandcSetDdrPara +.L603: + cbz w27, .L596 + adrp x0, .LC9 + mov w1, w24 + add x0, x0, :lo12:.LC9 + mov w2, w25 + bl printk + cbz w26, .L604 + ldr w0, [x29,124] + lsr w0, w0, 8 + bl NandcSetDdrPara +.L596: + mov w0, w21 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size FlashDdrTunningRead, .-FlashDdrTunningRead + .align 2 + .global FlashReadPage + .type FlashReadPage, %function +FlashReadPage: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + uxtb w20, w0 + str x27, [sp,80] + mov w0, w20 + stp x23, x24, [sp,48] + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + mov w22, w1 + mov x25, x2 + mov x24, x3 + bl FlashReadRawPage + cmn w0, #1 + mov w19, w0 + adrp x23, .LANCHOR2 + bne .L620 + adrp x21, .LANCHOR0 + add x26, x21, :lo12:.LANCHOR0 + ldrb w27, [x26,32] + cbnz w27, .L621 +.L623: + add x0, x23, :lo12:.LANCHOR2 + ldrb w0, [x0,565] + cbz w0, .L620 + b .L641 +.L621: + mov w0, w20 + mov w1, w22 + mov x2, x25 + mov x3, x24 + strb wzr, [x26,32] + bl FlashReadRawPage + strb w27, [x26,32] + cmn w0, #1 + beq .L623 + mov w19, w0 + b .L620 +.L641: + add x21, x21, :lo12:.LANCHOR0 + mov w1, w22 + mov x2, x25 + mov x3, x24 + mov w4, 1 + ldr x0, [x21,3976] + ldr w26, [x0,304] + mov w0, w20 + bl FlashDdrTunningRead + cmn w0, #1 + mov w19, w0 + beq .L624 + ldrb w0, [x21,4044] + cmp w19, w0, lsr 1 + bls .L620 +.L624: + lsr w0, w26, 8 + bl NandcSetDdrPara +.L620: + add x21, x23, :lo12:.LANCHOR2 + cmn w19, #1 + ldr x4, [x21,656] + bne .L625 + cbz x4, .L625 + mov w1, w22 + mov x2, x25 + mov x3, x24 + mov w0, w20 + blr x4 + mov w19, w0 + adrp x0, .LC10 + mov w1, w19 + add x0, x0, :lo12:.LC10 + mov w2, w20 + mov w3, w22 + bl printk + cmn w19, #1 + bne .L625 + adrp x0, .LANCHOR0+136 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + cbz w0, .L625 + mov w0, w20 + bl flash_enter_slc_mode + ldr x4, [x21,656] + mov w0, w20 + mov w1, w22 + mov x2, x25 + mov x3, x24 + blr x4 + mov w19, w0 + mov w0, w20 + bl flash_exit_slc_mode +.L625: + mov w0, w19 + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size FlashReadPage, .-FlashReadPage + .align 2 + .global FlashDdrParaScan + .type FlashDdrParaScan, %function +FlashDdrParaScan: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + mov w20, w1 + stp x21, x22, [sp,32] + add x22, x19, :lo12:.LANCHOR2 + uxtb w21, w0 + ldrb w0, [x22,564] + bl FlashSetInterfaceMode + ldrb w0, [x22,564] + bl NandcSetMode + mov x2, 0 + mov w1, w20 + mov x3, x2 + mov w4, w2 + mov w0, w21 + bl FlashDdrTunningRead + mov w22, w0 + mov x2, 0 + mov w0, w21 + mov w1, w20 + mov x3, x2 + bl FlashReadRawPage + cmn w0, #1 + beq .L646 + cmn w22, #1 + bne .L643 +.L646: + add x20, x19, :lo12:.LANCHOR2 + ldrb w0, [x20,564] + tbz x0, 0, .L643 + mov w0, 1 + bl FlashSetInterfaceMode + mov w0, 1 + bl NandcSetMode + strb wzr, [x20,565] + b .L645 +.L643: + add x19, x19, :lo12:.LANCHOR2 + mov w0, 1 + strb w0, [x19,565] +.L645: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FlashDdrParaScan, .-FlashDdrParaScan + .align 2 + .global FlashLoadPhyInfo + .type FlashLoadPhyInfo, %function +FlashLoadPhyInfo: + stp x29, x30, [sp, -112]! + mov w0, 60 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + strb w0, [x29,104] + mov w0, 40 + strb w0, [x29,105] + mov w0, 24 + adrp x25, .LANCHOR2 + strb w0, [x29,106] + adrp x19, .LANCHOR0 + mov w0, 16 + stp x23, x24, [sp,48] + strb w0, [x29,107] + adrp x23, .LANCHOR1 + add x0, x25, :lo12:.LANCHOR2 + ldr x1, [x19,#:lo12:.LANCHOR0] + stp x21, x22, [sp,32] + add x21, x23, :lo12:.LANCHOR1 + mov w20, 0 + stp x27, x28, [sp,80] + add x21, x21, 256 + str x1, [x0,664] + str wzr, [x0,672] + mov w27, 4 + mov w0, 0 + mov w24, -1 + ldrh w28, [x21,10] + bl flash_enter_slc_mode +.L654: + add w26, w20, 1 + mov x22, 0 +.L656: + add x0, x29, 104 + ldrb w0, [x22,x0] + bl FlashBchSel + ldr x2, [x19,#:lo12:.LANCHOR0] + mov w0, 0 + mov w1, w20 + mov x3, 0 + bl FlashReadRawPage + cmn w0, #1 + bne .L655 + ldr x2, [x19,#:lo12:.LANCHOR0] + mov w0, 0 + mov w1, w26 + mov x3, 0 + bl FlashReadRawPage + cmn w0, #1 + bne .L655 + add x22, x22, 1 + cmp x22, 4 + beq .L657 + b .L656 +.L658: + mov w1, 2036 + add x0, x26, 12 + mov w24, -1 + bl JSHash + ldr w1, [x26,8] + cmp w1, w0 + beq .L668 +.L657: + subs w27, w27, #1 + add w20, w20, w28 + bne .L654 + mov w0, w27 +.L667: + bl flash_exit_slc_mode + mov w0, w24 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret +.L655: + add x22, x25, :lo12:.LANCHOR2 + mov w0, 20036 + movk w0, 0x4e41, lsl 16 + ldr x26, [x22,664] + ldr w1, [x26] + cmp w1, w0 + bne .L657 + cbnz w24, .L658 + add x23, x23, :lo12:.LANCHOR1 + add x19, x19, :lo12:.LANCHOR0 + ldrh w0, [x23,266] + udiv w20, w20, w0 + mov w0, w24 + add w20, w20, 1 + str w20, [x19,8] + b .L667 +.L668: + add x1, x26, 160 + mov w2, 32 + mov x0, x21 + add x24, x19, :lo12:.LANCHOR0 + bl ftl_memcpy + ldr x1, [x22,664] + mov w2, 32 + add x0, x24, 104 + add x1, x1, 192 + bl ftl_memcpy + ldr x1, [x22,664] + mov w2, 852 + add x0, x24, 4056 + add x1, x1, 224 + bl ftl_memcpy + str w20, [x22,672] + ldr x1, [x22,664] + ldr w0, [x1,1076] + strb w0, [x22,565] + ldrh w0, [x21,10] + udiv w0, w20, w0 + add w2, w0, 1 + cbz w0, .L660 + str w2, [x24,8] + b .L661 +.L660: + mov w0, 2 + str w0, [x24,8] +.L661: + add x0, x25, :lo12:.LANCHOR2 + ldrh w1, [x1,14] + mov w24, 0 + strb w1, [x0,676] + b .L657 + .size FlashLoadPhyInfo, .-FlashLoadPhyInfo + .align 2 + .global ToshibaReadRetrial + .type ToshibaReadRetrial, %function +ToshibaReadRetrial: + stp x29, x30, [sp, -144]! + add x29, sp, 0 + stp x23, x24, [sp,48] + uxtb w23, w0 + mov w0, w23 + str w1, [x29,132] + stp x19, x20, [sp,16] + stp x27, x28, [sp,80] + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + mov x27, x2 + mov x26, x3 + bl NandcWaitFlashReady + adrp x20, g_retryMode + adrp x2, .LANCHOR0 + sbfiz x1, x23, 4, 32 + add x0, x2, :lo12:.LANCHOR0 + str x2, [x29,120] + add x0, x0, 40 + mov w22, 0 + add x3, x0, x1 + ldr x24, [x0,x1] + ldrb w0, [x3,8] + str x0, [x29,136] + add x19, x0, 8 + mov x28, x0 + ldrb w0, [x20,#:lo12:g_retryMode] + add x19, x24, x19, lsl 8 + sub w0, w0, #67 + uxtb w0, w0 + cmp w0, 1 + bls .L670 + adrp x0, .LANCHOR2+565 + ldrb w0, [x0,#:lo12:.LANCHOR2+565] + cbz w0, .L671 + mov w0, w22 + mov w22, 1 + bl NandcSetDdrMode +.L671: + ubfiz x0, x28, 8, 8 + mov w2, 92 + add x0, x24, x0 + str w2, [x0,2056] + mov w2, 197 + str w2, [x0,2056] +.L670: + adrp x0, g_maxRetryCount + mov w21, 1 + add x0, x0, :lo12:g_maxRetryCount + str x0, [x29,112] + ldr x0, [x29,136] + mov w25, -1 + add x0, x0, 8 + lsl x0, x0, 8 + str x0, [x29,104] + ubfiz x0, x28, 8, 8 + str x0, [x29,96] +.L672: + adrp x0, g_maxRetryCount + ldrb w0, [x0,#:lo12:g_maxRetryCount] + add w0, w0, 1 + cmp w21, w0 + bcs .L697 + ldrb w0, [x20,#:lo12:g_retryMode] + mov w1, w21 + sub w0, w0, #67 + uxtb w0, w0 + cmp w0, 1 + mov x0, x19 + bhi .L673 + bl SandiskSetRRPara + b .L674 +.L673: + bl ToshibaSetRRPara +.L674: + ldrb w0, [x20,#:lo12:g_retryMode] + cmp w0, 34 + bne .L675 + ldr x0, [x29,112] + ldrb w0, [x0] + sub w0, w0, #3 + cmp w21, w0 + bne .L675 + ldr x0, [x29,104] + mov w1, 179 + add x0, x24, x0 + str w1, [x0,8] +.L675: + ldr x0, [x29,96] + mov w1, 38 + add x0, x24, x0 + str w1, [x0,2056] + mov w1, 93 + str w1, [x0,2056] + cbz w22, .L676 + mov w0, 4 + bl NandcSetDdrMode + ldr w1, [x29,132] + mov w0, w23 + mov x2, x27 + mov x3, x26 + bl FlashReadRawPage + mov w28, w0 + mov w0, 0 + bl NandcSetDdrMode + b .L677 +.L676: + ldr w1, [x29,132] + mov w0, w23 + mov x2, x27 + mov x3, x26 + bl FlashReadRawPage + mov w28, w0 +.L677: + cmn w28, #1 + beq .L678 + ldr x0, [x29,120] + cmn w25, #1 + csel w25, w25, w28, ne + add x0, x0, :lo12:.LANCHOR0 + ldrb w0, [x0,4044] + add w0, w0, w0, lsl 1 + cmp w28, w0, lsr 2 + bcc .L680 + mov x26, 0 + mov x27, x26 +.L678: + add w21, w21, 1 + b .L672 +.L697: + mov w28, w25 +.L680: + ldrb w0, [x20,#:lo12:g_retryMode] + mov w1, 0 + sub w0, w0, #67 + uxtb w0, w0 + cmp w0, 1 + mov x0, x19 + bhi .L682 + bl SandiskSetRRPara + b .L683 +.L682: + bl ToshibaSetRRPara +.L683: + ldr x0, [x29,136] + add x0, x0, 8 + add x24, x24, x0, lsl 8 + mov w0, 255 + str w0, [x24,8] + ldr x0, [x29,120] + add x0, x0, :lo12:.LANCHOR0 + ldrb w0, [x0,4044] + add w0, w0, w0, lsl 1 + cmp w28, w0, lsr 2 + bcc .L684 + cmn w28, #1 + mov w0, 256 + csel w28, w28, w0, eq +.L684: + mov w0, w23 + bl NandcWaitFlashReady + cbz w22, .L685 + mov w0, 4 + bl NandcSetDdrMode +.L685: + mov w0, w28 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret + .size ToshibaReadRetrial, .-ToshibaReadRetrial + .align 2 + .global SamsungReadRetrial + .type SamsungReadRetrial, %function +SamsungReadRetrial: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x21, x22, [sp,32] + uxtb w22, w0 + str x27, [sp,80] + mov w0, w22 + adrp x27, g_maxRetryCount + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + mov x24, x2 + mov w25, w1 + mov x23, x3 + adrp x20, .LANCHOR0 + bl NandcWaitFlashReady + mov w26, 1 + add x0, x20, :lo12:.LANCHOR0 + sbfiz x1, x22, 4, 32 + add x0, x0, 40 + mov w19, -1 + add x2, x0, x1 + add x27, x27, :lo12:g_maxRetryCount + ldr x0, [x0,x1] + ldrb w21, [x2,8] + add x21, x21, 8 + add x21, x0, x21, lsl 8 +.L699: + ldrb w0, [x27] + add w0, w0, 1 + cmp w26, w0 + bcs .L702 + mov x0, x21 + mov w1, w26 + bl SamsungSetRRPara + mov w0, w22 + mov w1, w25 + mov x2, x24 + mov x3, x23 + bl FlashReadRawPage + cmn w0, #1 + beq .L700 + add x1, x20, :lo12:.LANCHOR0 + cmn w19, #1 + csel w19, w19, w0, ne + ldrb w1, [x1,4044] + add w1, w1, w1, lsl 1 + cmp w0, w1, lsr 2 + bcc .L705 + mov x23, 0 + mov x24, x23 +.L700: + add w26, w26, 1 + b .L699 +.L705: + mov w19, w0 +.L702: + mov x0, x21 + mov w1, 0 + add x20, x20, :lo12:.LANCHOR0 + bl SamsungSetRRPara + ldrb w0, [x20,4044] + add w0, w0, w0, lsl 1 + cmp w19, w0, lsr 2 + bcc .L704 + cmn w19, #1 + mov w0, 256 + csel w19, w19, w0, eq +.L704: + mov w0, w19 + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size SamsungReadRetrial, .-SamsungReadRetrial + .align 2 + .global MicronReadRetrial + .type MicronReadRetrial, %function +MicronReadRetrial: + stp x29, x30, [sp, -144]! + adrp x4, .LANCHOR0 + add x29, sp, 0 + stp x21, x22, [sp,32] + uxtb w22, w0 + add x0, x4, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov w24, w1 + mov x25, x2 + ldrb w20, [x0,4044] + mov x23, x3 + ldrb w0, [x0,136] + mov x19, x4 + cbnz w0, .L712 + add w20, w20, w20, lsl 1 + ubfx x20, x20, 2, 8 + b .L713 +.L712: + mov w0, 3 + sdiv w20, w20, w0 +.L713: + mov w0, w22 + adrp x28, g_maxRetryCount + mov w27, 0 + add x28, x28, :lo12:g_maxRetryCount + bl NandcWaitFlashReady + add x4, x19, :lo12:.LANCHOR0 + sbfiz x0, x22, 4, 32 + add x4, x4, 40 + mov w19, -1 + add x1, x4, x0 + mov w7, 239 + mov w8, 137 + ldr x4, [x4,x0] + ldrb w21, [x1,8] + lsl x6, x21, 8 +.L714: + ldrb w0, [x28] + cmp w27, w0 + bcs .L717 + add x26, x4, x6 + mov w0, 200 + str x6, [x29,104] + str x4, [x29,112] + str w7, [x26,2056] + str w8, [x26,2052] + str x7, [x29,120] + str x8, [x29,128] + bl NandcDelayns + add w5, w27, 1 + str w5, [x26,2048] + str wzr, [x26,2048] + mov w0, w22 + str wzr, [x26,2048] + mov w1, w24 + str wzr, [x26,2048] + mov x2, x25 + mov x3, x23 + str x5, [x29,136] + bl FlashReadRawPage + cmn w0, #1 + ldr x5, [x29,136] + ldr x8, [x29,128] + ldr x7, [x29,120] + ldr x4, [x29,112] + ldr x6, [x29,104] + beq .L715 + cmn w19, #1 + csel w19, w19, w0, ne + cmp w0, w20 + bcc .L722 + mov x23, 0 + mov x25, x23 +.L715: + mov w27, w5 + b .L714 +.L722: + mov w19, w0 +.L717: + add x21, x4, x21, lsl 8 + mov w0, 239 + str w0, [x21,2056] + mov w0, 137 + str w0, [x21,2052] + mov w0, 200 + bl NandcDelayns + str wzr, [x21,2048] + str wzr, [x21,2048] + cmp w19, w20 + str wzr, [x21,2048] + str wzr, [x21,2048] + bcc .L719 + cmn w19, #1 + mov w0, 256 + csel w19, w19, w0, eq +.L719: + cmn w19, #1 + beq .L723 + cmp w19, 256 + bne .L720 +.L723: + adrp x0, .LC11 + mov w1, w27 + add x0, x0, :lo12:.LC11 + mov w2, w24 + mov w3, w27 + mov w4, w19 + bl printk +.L720: + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret + .size MicronReadRetrial, .-MicronReadRetrial + .align 2 + .global HynixReadRetrial + .type HynixReadRetrial, %function +HynixReadRetrial: + stp x29, x30, [sp, -112]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + uxtb x22, w0 + stp x27, x28, [sp,80] + mov w27, w1 + add x1, x21, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + mov x26, x2 + add x2, x1, 4056 + ldrb w25, [x1,4058] + add x0, x2, x22 + ldr x1, [x1,1912] + mov x23, x22 + mov x24, x3 + ldrb w19, [x0,12] + ldrb w1, [x1,19] + cmp w1, 7 + bne .L733 + ldrb w19, [x0,20] +.L733: + mov w0, w23 + mov w28, 0 + mov w20, -1 + bl NandcWaitFlashReady + add x4, x21, :lo12:.LANCHOR0 + add x5, x4, 4060 +.L734: + cmp w28, w25 + bcs .L738 + add w19, w19, 1 + ldrb w1, [x4,4057] + mov x2, x5 + mov w0, w23 + uxtb w19, w19 + str x4, [x29,96] + cmp w19, w25 + str x5, [x29,104] + csel w19, w19, wzr, cc + mov w3, w19 + bl HynixSetRRPara + mov w0, w23 + mov w1, w27 + mov x2, x26 + mov x3, x24 + bl FlashReadRawPage + cmn w0, #1 + ldr x5, [x29,104] + ldr x4, [x29,96] + beq .L736 + ldrb w1, [x4,4044] + cmn w20, #1 + csel w20, w20, w0, ne + add w1, w1, w1, lsl 1 + cmp w0, w1, lsr 2 + bcc .L743 + mov x24, 0 + mov x26, x24 +.L736: + add w28, w28, 1 + b .L734 +.L743: + mov w20, w0 +.L738: + add x0, x21, :lo12:.LANCHOR0 + ldr x1, [x0,1912] + add x0, x0, 4056 + add x0, x0, x22 + ldrb w1, [x1,19] + cmp w1, 7 + bne .L740 + strb w19, [x0,20] + b .L741 +.L740: + strb w19, [x0,12] +.L741: + add x21, x21, :lo12:.LANCHOR0 + ldrb w0, [x21,4044] + add w0, w0, w0, lsl 1 + cmp w20, w0, lsr 2 + bcc .L742 + cmn w20, #1 + mov w0, 256 + csel w20, w20, w0, eq +.L742: + mov w0, w20 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size HynixReadRetrial, .-HynixReadRetrial + .align 2 + .global FlashProgPage + .type FlashProgPage, %function +FlashProgPage: + stp x29, x30, [sp, -64]! + mov x4, x3 + add x29, sp, 0 + stp x19, x20, [sp,16] + uxtb w19, w0 + adrp x0, .LANCHOR1+265 + stp x21, x22, [sp,32] + mov w20, w1 + mov x22, x2 + ldrb w21, [x0,#:lo12:.LANCHOR1+265] + cbnz w19, .L750 + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + ldrb w1, [x0,25] + ldr w2, [x0,28] + mul w1, w1, w2 + cmp w20, w1 + bcs .L750 + ldrb w0, [x0,24] + cbnz w0, .L751 + sub w21, w21, #2 + b .L750 +.L751: + mov w21, 4 +.L750: + mov w0, w19 + str x4, [x29,56] + bl NandcWaitFlashReady + mov w0, w19 + bl NandcFlashCs + mov w0, w19 + mov w1, w20 + bl FlashProgFirstCmd + ldr x4, [x29,56] + mov w2, w21 + mov x3, x22 + mov w0, w19 + mov w1, 1 + bl NandcXferData + mov w1, w20 + mov w0, w19 + bl FlashProgSecondCmd + mov w0, w19 + bl NandcWaitFlashReady + mov w1, w20 + mov w0, w19 + bl FlashReadStatus + mov w20, w0 + mov w0, w19 + bl NandcFlashDeCs + and w0, w20, 1 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size FlashProgPage, .-FlashProgPage + .align 2 + .global FlashSavePhyInfo + .type FlashSavePhyInfo, %function +FlashSavePhyInfo: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + adrp x22, .LANCHOR0 + adrp x23, .LANCHOR2 + stp x19, x20, [sp,16] + add x19, x23, :lo12:.LANCHOR2 + add x20, x22, :lo12:.LANCHOR0 + stp x25, x26, [sp,64] + ldr x0, [x22,#:lo12:.LANCHOR0] + mov w21, 0 + str x0, [x19,664] + ldrb w0, [x19,677] + bl FlashBchSel + ldr x0, [x22,#:lo12:.LANCHOR0] + mov w1, 0 + mov w2, 2048 + bl ftl_memset + ldr x1, [x19,664] + mov w0, 20036 + movk w0, 0x4e41, lsl 16 + mov w2, 32 + str w0, [x1] + ldr x0, [x19,664] + ldrb w1, [x20,1676] + add x0, x0, 16 + strh w1, [x0,-4] + ldrb w1, [x20,25] + strh w1, [x0,-2] + ldrb w1, [x19,565] + str w1, [x0,1060] + adrp x1, IDByte + add x1, x1, :lo12:IDByte + bl ftl_memcpy + ldr x0, [x19,664] + add x1, x20, 1680 + mov w2, 8 + add x0, x0, 80 + bl ftl_memcpy + ldr x0, [x19,664] + add x1, x20, 1688 + mov w2, 32 + add x0, x0, 96 + bl ftl_memcpy + ldr x0, [x19,664] + adrp x1, .LANCHOR1 + add x1, x1, :lo12:.LANCHOR1 + mov w2, 32 + add x1, x1, 256 + add x0, x0, 160 + bl ftl_memcpy + ldr x0, [x19,664] + add x1, x20, 104 + mov w2, 32 + add x0, x0, 192 + bl ftl_memcpy + ldr x0, [x19,664] + add x1, x20, 4056 + mov w2, 852 + add x0, x0, 224 + bl ftl_memcpy + ldr x20, [x19,664] + mov w1, 2036 + add x0, x20, 12 + bl JSHash + str w0, [x20,8] + mov w0, 1592 + str w0, [x20,4] + ldr x0, [x19,680] + str x0, [x19,664] + mov w0, 0 + mov w19, w21 + bl flash_enter_slc_mode +.L755: + add x20, x22, :lo12:.LANCHOR0 + mov w2, 0 + mov w0, 0 + add x24, x23, :lo12:.LANCHOR2 + add w26, w19, 1 + ldr w1, [x20,28] + mul w1, w19, w1 + bl FlashEraseBlock + ldr w1, [x20,28] + mov x3, 0 + ldr x2, [x22,#:lo12:.LANCHOR0] + mov w0, 0 + mul w1, w19, w1 + bl FlashProgPage + ldr w1, [x20,28] + mov x3, 0 + ldr x2, [x22,#:lo12:.LANCHOR0] + mov w0, 0 + mul w1, w19, w1 + add w1, w1, 1 + bl FlashProgPage + ldr w1, [x20,28] + mov w0, 0 + ldr x2, [x24,680] + mov x3, 0 + mul w1, w19, w1 + bl FlashReadRawPage + cmn w0, #1 + beq .L753 + ldr x25, [x24,664] + mov w0, 20036 + movk w0, 0x4e41, lsl 16 + ldr w1, [x25] + cmp w1, w0 + bne .L753 + mov w1, 2036 + add x0, x25, 12 + bl JSHash + ldr w1, [x25,8] + cmp w1, w0 + bne .L753 + ldr w0, [x20,28] + cmp w21, 1 + str w26, [x20,8] + mul w19, w19, w0 + str w19, [x24,672] + beq .L756 + mov w21, 1 +.L753: + cmp w26, 4 + mov w19, w26 + bne .L755 + b .L754 +.L756: + mov w21, 2 +.L754: + mov w0, 0 + bl flash_exit_slc_mode + cmp w21, wzr + csetm w0, eq + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size FlashSavePhyInfo, .-FlashSavePhyInfo + .align 2 + .global FlashReadIdbDataRaw + .type FlashReadIdbDataRaw, %function +FlashReadIdbDataRaw: + stp x29, x30, [sp, -112]! + add x29, sp, 0 + stp x27, x28, [sp,80] + mov x27, x0 + mov w0, 60 + strb w0, [x29,104] + mov w0, 40 + strb w0, [x29,105] + mov w0, 24 + stp x21, x22, [sp,32] + strb w0, [x29,106] + adrp x21, .LANCHOR0 + mov w0, 16 + strb w0, [x29,107] + add x0, x21, :lo12:.LANCHOR0 + adrp x22, .LANCHOR2 + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + ldrb w28, [x0,4044] + add x0, x22, :lo12:.LANCHOR2 + ldr w1, [x0,576] + mov w0, 12336 + movk w0, 0x5638, lsl 16 + cmp w1, w0 + bne .L762 + mov w0, 0 + bl flash_enter_slc_mode +.L762: + adrp x25, .LC12 + mov x0, x27 + mov w1, 0 + mov w2, 2048 + mov w24, -1 + mov w20, 2 + add x25, x25, :lo12:.LC12 + bl ftl_memset +.L763: + add x0, x21, :lo12:.LANCHOR0 + ldrb w0, [x0,25] + cmp w20, w0 + bcs .L767 + mov x23, 0 +.L765: + add x0, x29, 104 + add x19, x21, :lo12:.LANCHOR0 + ldrb w26, [x23,x0] + mov w0, w26 + bl FlashBchSel + ldr w1, [x19,28] + mov w0, 0 + ldr x2, [x21,#:lo12:.LANCHOR0] + mov x3, 0 + mul w1, w20, w1 + bl FlashReadRawPage + cmn w0, #1 + bne .L764 + add x23, x23, 1 + cmp x23, 4 + bne .L765 + b .L766 +.L764: + ldr x0, [x19] + ldr w1, [x0] + mov w0, 35899 + movk w0, 0xfcdc, lsl 16 + cmp w1, w0 + bne .L766 + mov w1, w26 + mov x0, x25 + bl printk + ldr x1, [x19] + mov x0, x27 + mov w2, 2048 + bl ftl_memcpy + ldr x0, [x19] + ldr w0, [x0,512] + strb w0, [x19,25] + ldr w0, [x19,8] + cmp w0, w20 + bls .L770 + mov w24, 0 + str w20, [x19,8] + bl FlashSavePhyInfo +.L766: + add w20, w20, 1 + b .L763 +.L770: + mov w24, 0 +.L767: + mov w0, w28 + add x22, x22, :lo12:.LANCHOR2 + bl FlashBchSel + ldr w1, [x22,576] + mov w0, 12336 + movk w0, 0x5638, lsl 16 + cmp w1, w0 + bne .L772 + mov w0, 0 + bl flash_exit_slc_mode +.L772: + mov w0, w24 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size FlashReadIdbDataRaw, .-FlashReadIdbDataRaw + .align 2 + .global FlashInit + .type FlashInit, %function +FlashInit: + stp x29, x30, [sp, -112]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + adrp x19, .LANCHOR0 + mov x22, x0 + mov w0, 32768 + adrp x20, .LANCHOR2 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + bl ftl_malloc + add x21, x20, :lo12:.LANCHOR2 + str x0, [x19,#:lo12:.LANCHOR0] + mov w0, 32768 + add x24, x19, :lo12:.LANCHOR0 + adrp x23, IDByte + bl ftl_malloc + str x0, [x21,680] + mov w0, 4096 + adrp x25, .LC13 + add x24, x24, 40 + mov w27, 0 + bl ftl_malloc + str x0, [x21,688] + mov w0, 32768 + mov w28, 44 + bl ftl_malloc + str x0, [x21,696] + mov w0, 4096 + bl ftl_malloc + str x0, [x21,704] + mov w0, 128 + str w0, [x24,-12] + mov w0, 60 + mov w1, 50 + strb w0, [x21,677] + mov x0, x22 + strb w1, [x24,-15] + strb w1, [x21,676] + str wzr, [x24,-32] + strb wzr, [x21,565] + str wzr, [x21,652] + add x21, x23, :lo12:IDByte + strb wzr, [x24,-16] + bl NandcInit + add x0, x25, :lo12:.LC13 + mov x26, x21 + str x0, [x29,104] +.L779: + uxtb w25, w27 + mov w0, w25 + bl FlashReset + ldrb w22, [x24,8] + ldr x2, [x24] + mov w0, w25 + str x2, [x29,96] + ubfiz x22, x22, 8, 8 + bl NandcFlashCs + ldr x2, [x29,96] + mov w0, 144 + add x22, x2, x22 + str w0, [x22,2056] + mov w0, 200 + str wzr, [x22,2052] + bl NandcDelayns + ldr w0, [x22,2048] + strb w0, [x21] + ldr w0, [x22,2048] + strb w0, [x21,1] + ldr w0, [x22,2048] + strb w0, [x21,2] + ldr w0, [x22,2048] + strb w0, [x21,3] + ldr w0, [x22,2048] + strb w0, [x21,4] + ldr w0, [x22,2048] + strb w0, [x21,5] + mov w0, w25 + bl NandcFlashDeCs + ldrb w2, [x21] + sub w0, w2, #1 + uxtb w0, w0 + cmp w0, 253 + bhi .L775 + ldr x0, [x29,104] + add w1, w27, 1 + ldrb w3, [x21,1] + ldrb w4, [x21,2] + ldrb w5, [x21,3] + ldrb w6, [x21,4] + ldrb w7, [x21,5] + bl printk +.L775: + cbnz w27, .L776 + ldrb w0, [x26] + sub w0, w0, #1 + uxtb w0, w0 + cmp w0, 253 + bhi .L822 + ldrb w0, [x26,1] + cmp w0, 255 + beq .L822 + bl FlashCs123Init +.L776: + ldrb w0, [x21] + cmp w0, 181 + bne .L778 + strb w28, [x21] +.L778: + add w27, w27, 1 + add x24, x24, 16 + cmp w27, 4 + add x21, x21, 8 + bne .L779 + ldrb w0, [x23,#:lo12:IDByte] + cmp w0, 173 + beq .L780 + add x0, x20, :lo12:.LANCHOR2 + ldr w0, [x0,568] + bl NandcSetDdrMode +.L780: + add x21, x19, :lo12:.LANCHOR0 + mov w1, 0 + mov w2, 852 + add x0, x21, 4056 + bl ftl_memset + strb wzr, [x21,32] + adrp x1, .LANCHOR1 + add x4, x23, :lo12:IDByte + add x0, x1, :lo12:.LANCHOR1 + add x0, x0, 256 + str x0, [x21,1912] + ldrb w0, [x4,1] + cmp w0, 218 + cset w3, eq + cmp w0, 161 + cset w2, eq + orr w2, w3, w2 + cbnz w2, .L781 + and w2, w0, -33 + cmp w2, 209 + beq .L781 + cmp w0, 220 + bne .L782 + ldrb w2, [x4,3] + cmp w2, 149 + bne .L782 +.L781: + add x2, x19, :lo12:.LANCHOR0 + mov w4, 1 + mov w5, 16 + add x6, x23, :lo12:IDByte + strb w4, [x2,24] + add x4, x20, :lo12:.LANCHOR2 + strb w5, [x2,25] + add x2, x1, :lo12:.LANCHOR1 + strb w5, [x4,677] + ldrb w5, [x23,#:lo12:IDByte] + strb w5, [x2,3001] + strb w0, [x2,3002] + cmp w5, 152 + bne .L783 + ldrsb w2, [x6,4] + tbnz w2, #31, .L783 + mov w2, 24 + strb w2, [x4,677] +.L783: + add x2, x20, :lo12:.LANCHOR2 + mov w4, 12336 + movk w4, 0x5638, lsl 16 + ldr w5, [x2,576] + cmp w5, w4 + bne .L784 + mov w4, 16 + strb w4, [x2,677] +.L784: + cbz w3, .L785 + add x0, x1, :lo12:.LANCHOR1 + mov w2, 2048 + strh w2, [x0,3014] + mov w2, -38 + b .L853 +.L785: + cmp w0, 220 + bne .L786 + add x0, x1, :lo12:.LANCHOR1 + mov w2, 4096 + strh w2, [x0,3014] + mov w2, -36 +.L853: + strb w2, [x0,3002] +.L786: + add x21, x1, :lo12:.LANCHOR1 + add x0, x19, :lo12:.LANCHOR0 + add x1, x21, 2656 + mov w2, 32 + add x0, x0, 104 + bl ftl_memcpy + add x0, x21, 256 + add x1, x21, 3000 + mov w2, 32 + bl ftl_memcpy +.L782: + add x21, x19, :lo12:.LANCHOR0 + ldrb w0, [x21,24] + cbnz w0, .L787 + bl FlashLoadPhyInfoInRam + cbnz w0, .L789 + ldr x0, [x21,1912] + add x21, x20, :lo12:.LANCHOR2 + ldrb w1, [x0,17] + and w0, w1, 7 + strb w0, [x21,564] + tbnz x1, 0, .L789 + mov w1, 1 + strb w1, [x21,565] + bl FlashSetInterfaceMode + ldrb w0, [x21,564] + bl NandcSetMode +.L789: + add x0, x19, :lo12:.LANCHOR0 + ldr x1, [x0,1912] + ldrb w1, [x1,26] + strb w1, [x0,136] + bl FlashLoadPhyInfo + cbz w0, .L787 + add x21, x20, :lo12:.LANCHOR2 + ldr w0, [x21,568] + cbz w0, .L792 + mov w0, 1 + bl FlashSetInterfaceMode + mov w0, 1 + b .L854 +.L792: + ldrb w0, [x21,564] + bl FlashSetInterfaceMode + ldrb w0, [x21,564] +.L854: + bl NandcSetMode + bl FlashLoadPhyInfo + cbz w0, .L787 + mov w0, 1 + add x21, x19, :lo12:.LANCHOR0 + bl FlashSetInterfaceMode + mov w0, 1 + bl NandcSetMode + ldr x1, [x21,1912] + adrp x0, .LC14 + add x0, x0, :lo12:.LC14 + ldrh w1, [x1,14] + bl printk + bl FlashLoadPhyInfoInRam + cmn w0, #1 + beq .L777 + bl FlashDieInfoInit + ldr x0, [x21,1912] + ldrb w0, [x0,19] + bl FlashGetReadRetryDefault + ldr x0, [x21,1912] + ldrh w1, [x21,1920] + ldrb w2, [x0,9] + add w1, w1, 4095 + cmp w2, w1, lsr 12 + blt .L794 + ldrh w1, [x0,14] + add w1, w1, 255 + cmp w2, w1, lsr 8 + bge .L795 +.L794: + ldrh w1, [x0,14] + and w1, w1, -256 + strh w1, [x0,14] +.L795: + add x21, x20, :lo12:.LANCHOR2 + ldrb w0, [x21,564] + tst w0, 6 + beq .L796 + bl FlashSavePhyInfo + ldr w1, [x21,672] + mov w0, 0 + bl FlashDdrParaScan +.L796: + bl FlashSavePhyInfo +.L787: + add x21, x19, :lo12:.LANCHOR0 + add x22, x20, :lo12:.LANCHOR2 + ldr x2, [x21,1912] + str xzr, [x22,656] + ldrb w0, [x2,26] + strb w0, [x21,136] + ldrh w0, [x2,16] + ldrh w3, [x2,10] + ubfx x1, x0, 7, 1 + strb w1, [x21,32] + ubfx x1, x0, 3, 1 + strb w1, [x22,712] + ubfx x1, x0, 4, 1 + strb w1, [x22,648] + ldrb w1, [x2,12] + ubfx x0, x0, 8, 3 + strb w0, [x22,564] + ldrb w0, [x2,18] + sdiv w1, w3, w1 + bl BuildFlashLsbPageTable + bl FlashDieInfoInit + ldr x0, [x21,1912] + ldrh w1, [x0,16] + tbz x1, 6, .L798 + adrp x1, g_retryMode + adrp x3, g_maxRegNum + ldrb w0, [x0,19] + mov x5, x3 + ldrb w2, [x21,4058] + strb w0, [x1,#:lo12:g_retryMode] + ldrb w1, [x21,4057] + strb w1, [x3,#:lo12:g_maxRegNum] + adrp x1, g_maxRetryCount + strb w2, [x1,#:lo12:g_maxRetryCount] + sub w2, w0, #1 + uxtb w2, w2 + cmp w2, 6 + mov x2, x1 + bhi .L799 + adrp x1, HynixReadRetrial + add x1, x1, :lo12:HynixReadRetrial + str x1, [x22,656] + sub w1, w0, #5 + uxtb w1, w1 + cmp w1, 1 + bhi .L800 + mov w1, 1 + str w1, [x22,640] + b .L801 +.L800: + cmp w0, 7 + add x21, x21, 4084 + beq .L802 +.L801: + add x21, x19, :lo12:.LANCHOR0 + add x21, x21, 4076 +.L802: + mov x1, 0 + mov w2, w1 +.L804: + ldrsb w3, [x21,x1] + add x1, x1, 1 + cmp w3, wzr + csinc w2, w2, w2, ne + cmp x1, 32 + bne .L804 + cmp w2, 27 + bls .L798 + bl FlashGetReadRetryDefault + bl FlashSavePhyInfo + b .L798 +.L799: + sub w3, w0, #17 + uxtb w3, w3 + cmp w3, 2 + bhi .L806 + adrp x2, MicronReadRetrial + cmp w0, 19 + add x2, x2, :lo12:MicronReadRetrial + str x2, [x22,656] + beq .L807 + mov w0, 7 + b .L856 +.L807: + mov w0, 15 +.L856: + strb w0, [x1,#:lo12:g_maxRetryCount] + b .L798 +.L806: + sub w1, w0, #65 + uxtb w1, w1 + cmp w1, 1 + bls .L824 + cmp w0, 33 + bne .L808 +.L824: + add x0, x20, :lo12:.LANCHOR2 + adrp x1, ToshibaReadRetrial + add x1, x1, :lo12:ToshibaReadRetrial + str x1, [x0,656] + mov w0, 4 + strb w0, [x5,#:lo12:g_maxRegNum] + mov w0, 7 + strb w0, [x2,#:lo12:g_maxRetryCount] + b .L798 +.L808: + sub w1, w0, #67 + uxtb w1, w1 + cmp w1, 1 + sub w1, w0, #34 + cset w4, ls + uxtb w1, w1 + cmp w1, 1 + bls .L825 + cbz w4, .L810 +.L825: + add x1, x20, :lo12:.LANCHOR2 + adrp x3, ToshibaReadRetrial + add x3, x3, :lo12:ToshibaReadRetrial + cmp w0, 35 + str x3, [x1,656] + beq .L812 + cmp w0, 68 + beq .L812 + mov w0, 7 + b .L855 +.L812: + mov w0, 17 +.L855: + strb w0, [x2,#:lo12:g_maxRetryCount] + mov w0, 4 + cbnz w4, .L857 + mov w0, 5 +.L857: + strb w0, [x5,#:lo12:g_maxRegNum] + b .L798 +.L810: + cmp w0, 49 + bne .L798 + adrp x0, SamsungReadRetrial + add x0, x0, :lo12:SamsungReadRetrial + str x0, [x22,656] +.L798: + add x0, x20, :lo12:.LANCHOR2 + ldr w1, [x0,576] + mov w0, 12336 + movk w0, 0x5638, lsl 16 + cmp w1, w0 + bne .L815 + add x0, x19, :lo12:.LANCHOR0 + ldrb w1, [x0,136] + cbz w1, .L815 + ldr x0, [x0,1912] + strb wzr, [x0,18] +.L815: + ldrb w0, [x23,#:lo12:IDByte] + cmp w0, 44 + bne .L816 + add x0, x20, :lo12:.LANCHOR2 + ldrb w1, [x0,565] + cbz w1, .L816 + strb wzr, [x0,565] + mov w0, 1 + bl FlashSetInterfaceMode + mov w0, 1 + bl NandcSetMode +.L816: + mov w0, 0 + bl flash_enter_slc_mode + add x1, x20, :lo12:.LANCHOR2 + ldrb w0, [x1,564] + tst w0, 6 + beq .L817 + ldrb w1, [x1,565] + cbnz w1, .L818 + tbnz x0, 0, .L817 +.L818: + add x20, x20, :lo12:.LANCHOR2 + mov w0, 0 + ldr w1, [x20,672] + bl FlashDdrParaScan +.L817: + add x19, x19, :lo12:.LANCHOR0 + mov w0, 0 + mov w20, 16 + add x23, x23, :lo12:IDByte + bl flash_exit_slc_mode + ldr x0, [x19,1912] + ldrb w0, [x0,20] + bl FlashBchSel + add x0, x19, 1928 + bl FlashReadIdbDataRaw + strb w20, [x19,25] + mov w0, 18928 + movk w0, 0x2, lsl 16 + bl FlashTimingCfg + ldr x1, [x19,1912] + ldrb w2, [x1,12] + strh w2, [x19,4024] + ldrh w4, [x1,14] + ldrb w2, [x1,7] + str w2, [x19,4020] + ldr w2, [x23] + str w2, [x19,4016] + ldrb w2, [x19,1676] + strh w2, [x19,4026] + ldrb w2, [x1,13] + strh w2, [x19,4028] + strh w4, [x19,4030] + ldrh w2, [x1,10] + strh w2, [x19,4032] + ldrb w3, [x1,12] + ldrh w2, [x1,10] + sdiv w2, w2, w3 + strh w2, [x19,4034] + ldrb w3, [x1,9] + strh w3, [x19,4036] + ldrh w5, [x1,10] + ldrb w2, [x1,9] + mul w2, w2, w5 + mov w5, 512 + strh w5, [x19,4040] + ldrb w5, [x19,25] + strh w5, [x19,4042] + uxth w2, w2 + ldrb w5, [x19,24] + strh w2, [x19,4038] + cmp w5, 1 + bne .L820 + lsl w2, w2, 1 + lsr w4, w4, 1 + lsl w3, w3, 1 + strh w2, [x19,4038] + strb w20, [x19,25] + mov w2, 8 + strh w4, [x19,4030] + strh w3, [x19,4036] + strh w2, [x19,4042] +.L820: + ldrb w0, [x1,20] + bl FlashBchSel + bl ftl_flash_suspend + mov w0, 0 + b .L777 +.L822: + mov w0, -2 +.L777: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size FlashInit, .-FlashInit + .align 2 + .global FlashPageProgMsbFFData + .type FlashPageProgMsbFFData, %function +FlashPageProgMsbFFData: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + uxth w19, w2 + stp x21, x22, [sp,32] + uxtb w22, w0 + add x0, x20, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + ldr x2, [x0,1912] + ldrb w0, [x0,136] + ldrb w3, [x2,19] + cbz w0, .L859 + adrp x0, .LANCHOR2+576 + ldr w2, [x0,#:lo12:.LANCHOR2+576] + mov w0, 12336 + movk w0, 0x5638, lsl 16 + cmp w2, w0 + beq .L858 +.L859: + sub w0, w3, #5 + uxtb w0, w0 + cmp w0, 2 + bls .L860 + cmp w3, 68 + beq .L860 + sub w3, w3, #19 + and w3, w3, -17 + uxtb w3, w3 + cbnz w3, .L858 +.L860: + add x20, x20, :lo12:.LANCHOR0 + mov w21, w1 + add x24, x20, 652 + mov w25, 65535 + adrp x26, .LANCHOR2 +.L862: + ldr x0, [x20,1912] + ldrh w0, [x0,10] + cmp w0, w19 + bls .L858 + ldrh w0, [x24,w19,sxtw 1] + cmp w0, w25 + bne .L858 + add x23, x26, :lo12:.LANCHOR2 + mov w1, 255 + mov w2, 32768 + ldr x0, [x23,680] + bl ftl_memset + ldr x2, [x23,680] + add w1, w19, w21 + mov w0, w22 + mov x3, 0 + add w19, w19, 1 + bl FlashProgPage + uxth w19, w19 + b .L862 +.L858: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size FlashPageProgMsbFFData, .-FlashPageProgMsbFFData + .align 2 + .global FlashReadSlc2KPages + .type FlashReadSlc2KPages, %function +FlashReadSlc2KPages: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x25, x26, [sp,64] + mov w25, w1 + adrp x1, .LANCHOR1+265 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + adrp x21, .LANCHOR0 + adrp x23, .LC15 + adrp x24, .LC17 + ldrb w26, [x1,#:lo12:.LANCHOR1+265] + stp x19, x20, [sp,16] + stp x27, x28, [sp,80] + mov x19, x0 + mov w27, w2 + mov w22, 0 + add x21, x21, :lo12:.LANCHOR0 + add x23, x23, :lo12:.LC15 + add x24, x24, :lo12:.LC17 +.L868: + cmp w22, w25 + beq .L902 + mov w1, w27 + sub w4, w25, w22 + mov x0, x19 + add x2, x29, 124 + add x3, x29, 120 + bl LogAddr2PhyAddr + ldr w0, [x29,120] + adrp x5, .LANCHOR0 + ldrb w1, [x21,1676] + cmp w0, w1 + bcc .L869 + mov w0, -1 + str w0, [x19] + b .L870 +.L869: + add x0, x21, x0, uxtw + ldrb w28, [x0,1680] + str x5, [x29,96] + mov w0, w28 + bl NandcWaitFlashReady + mov w0, w28 + bl NandcFlashCs + ldr w1, [x29,124] + mov w0, w28 + bl FlashReadCmd + mov w0, w28 + bl NandcWaitFlashReady + ldr x3, [x19,8] + mov w1, 0 + ldr x4, [x19,16] + mov w2, w26 + mov w0, w28 + bl NandcXferData + mov w6, w0 + ldr w2, [x21,28] + mov w0, w28 + ldr w1, [x29,124] + str x6, [x29,104] + add w1, w2, w1 + bl FlashReadCmd + ldr x0, [x19,8] + mov w1, 0 + mov w2, w26 + cmp x0, xzr + add x3, x0, 2048 + ldr x0, [x19,16] + csel x3, x3, xzr, ne + add x4, x0, 8 + cmp x0, xzr + csel x4, x4, xzr, ne + mov w0, w28 + bl NandcXferData + mov w20, w0 + mov w0, w28 + bl NandcFlashDeCs + ldr x5, [x29,96] + ldr x6, [x29,104] + add x0, x5, :lo12:.LANCHOR0 + cmp w20, w6 + csel w3, w20, w6, cs + ldrb w0, [x0,4044] + add w0, w0, w0, lsl 1 + cmp w3, w0, lsr 2 + bls .L873 + cmn w3, #1 + mov w0, 256 + csel w3, w3, w0, eq +.L873: + cmp w3, 256 + beq .L884 + cmn w3, #1 + bne .L874 +.L884: + str w3, [x19] + b .L876 +.L874: + str wzr, [x19] +.L876: + ldr x0, [x19,16] + cbz x0, .L877 + ldr w1, [x0,8] + cmn w1, #1 + bne .L877 + ldr w0, [x0] + cmn w0, #1 + beq .L877 + str w1, [x19] +.L877: + ldr w3, [x19] + cmn w3, #1 + bne .L870 + add x5, x5, :lo12:.LANCHOR0 + ldr w1, [x19,4] + mov x0, x23 + ldrb w2, [x5,4044] + bl printk + ldr x1, [x19,8] + cbz x1, .L879 + adrp x0, .LC16 + mov w2, 4 + add x0, x0, :lo12:.LC16 + mov w3, 8 + bl rknand_print_hex +.L879: + ldr x1, [x19,16] + cbz x1, .L870 + mov w2, 4 + mov x0, x24 + mov w3, w2 + bl rknand_print_hex +.L870: + add w22, w22, 1 + add x19, x19, 56 + b .L868 +.L902: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size FlashReadSlc2KPages, .-FlashReadSlc2KPages + .align 2 + .global FlashReadPages + .type FlashReadPages, %function +FlashReadPages: + stp x29, x30, [sp, -176]! + adrp x3, .LANCHOR1+265 + add x29, sp, 0 + stp x21, x22, [sp,32] + ldrb w3, [x3,#:lo12:.LANCHOR1+265] + adrp x22, .LANCHOR0 + str w3, [x29,148] + add x3, x22, :lo12:.LANCHOR0 + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + stp x27, x28, [sp,80] + str w1, [x29,144] + mov x26, x0 + ldrb w4, [x3,32] + ldrb w23, [x3,24] + str w2, [x29,140] + str w4, [x29,136] + cbz w23, .L943 + bl FlashReadSlc2KPages + b .L992 +.L943: + adrp x0, .LC15 + mov w25, w23 + add x0, x0, :lo12:.LC15 + str x0, [x29,128] + adrp x0, .LC17 + add x0, x0, :lo12:.LC17 + str x0, [x29,120] + adrp x0, .LC18 + add x0, x0, :lo12:.LC18 + str x0, [x29,112] +.L904: + ldr w0, [x29,144] + cmp w25, w0 + bcs .L994 + mov w27, 56 + ldr w0, [x29,144] + ldr w1, [x29,140] + add x2, x29, 172 + umull x27, w25, w27 + sub w4, w0, w25 + add x3, x29, 168 + add x21, x26, x27 + mov x0, x21 + ldr w28, [x21,4] + bl LogAddr2PhyAddr + add x1, x22, :lo12:.LANCHOR0 + mov w20, w0 + ldr w0, [x29,168] + ldrb w2, [x1,1676] + cmp w0, w2 + bcc .L906 + mov w0, -1 + str w0, [x26,x27] + b .L907 +.L906: + add x0, x1, x0, uxtw + adrp x24, .LANCHOR2 + ldrb w19, [x0,1680] + add x0, x24, :lo12:.LANCHOR2 + str x1, [x29,152] + ldrb w0, [x0,712] + cmp w0, wzr + mov w0, w19 + csel w20, w20, wzr, ne + bl NandcWaitFlashReady + ldr x1, [x29,152] + ldr x0, [x1,1912] + ldrb w2, [x0,19] + sub w0, w2, #1 + uxtb w0, w0 + cmp w0, 6 + bhi .L909 + add x1, x1, 4056 + sxtw x0, w19 + add x1, x1, x0 + cmp w2, 7 + ldrb w3, [x1,12] + bne .L910 + ldrb w3, [x1,20] +.L910: + add x1, x24, :lo12:.LANCHOR2 + add x0, x1, x0 + ldrb w0, [x0,560] + cmp w0, w3 + beq .L909 + add x2, x22, :lo12:.LANCHOR0 + mov w0, w19 + add x2, x2, 4060 + ldrb w1, [x2,-3] + bl HynixSetRRPara +.L909: + mov w0, w19 + bl NandcFlashCs + ldr w0, [x29,140] + cmp w0, 1 + cset w0, eq + orr w0, w0, w28, lsr 31 + str w0, [x29,152] + cbz w0, .L911 + add x0, x22, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L911 + mov w0, w19 + bl flash_enter_slc_mode + b .L912 +.L911: + mov w0, w19 + bl flash_exit_slc_mode +.L912: + cmp w19, 255 + ldr w1, [x29,172] + bne .L950 + cmn w1, #1 + cset w0, ne + cbz w0, .L944 +.L950: + cbz w20, .L916 + add x0, x22, :lo12:.LANCHOR0 + ldr w2, [x0,28] + mov w0, w19 + add w2, w1, w2 + bl FlashReadDpCmd + b .L917 +.L916: + mov w0, w19 + bl FlashReadCmd + b .L917 +.L944: + mov w20, w0 +.L914: + ldrb w2, [x29,148] + mov w0, w19 + ldr x3, [x21,8] + mov w1, 0 + ldr x4, [x21,16] + bl NandcXferData + cmn w0, #1 + mov w28, w0 + bne .L918 + add x0, x22, :lo12:.LANCHOR0 + ldrb w1, [x0,32] + cbz w1, .L918 + strb wzr, [x0,32] + mov w20, 0 + b .L912 +.L918: + cbz w20, .L919 + add x0, x22, :lo12:.LANCHOR0 + ldr w1, [x29,172] + ldr w2, [x0,28] + mov w0, w19 + add w1, w2, w1 + bl FlashReadDpDataOutCmd + add w0, w25, 1 + mov w4, 56 + ldrb w2, [x29,148] + mov w1, 0 + umull x4, w0, w4 + mov w0, w19 + add x4, x26, x4 + ldr x3, [x4,8] + ldr x4, [x4,16] + bl NandcXferData + cmn w0, #1 + mov w23, w0 + csel w20, w20, wzr, ne +.L919: + mov w0, w19 + bl NandcFlashDeCs + add x6, x22, :lo12:.LANCHOR0 + ldrb w0, [x29,136] + cmn w28, #1 + strb w0, [x6,32] + bne .L926 + add x0, x24, :lo12:.LANCHOR2 + ldrb w0, [x0,565] + cbnz w0, .L921 +.L925: + add x0, x24, :lo12:.LANCHOR2 + ldr x20, [x0,656] + cbnz x20, .L922 + b .L995 +.L921: + ldr x0, [x6,3976] + mov w4, 1 + ldr w1, [x29,172] + ldr x2, [x21,8] + ldr x3, [x21,16] + ldr w20, [x0,304] + mov w0, w19 + str x6, [x29,104] + bl FlashDdrTunningRead + cmn w0, #1 + mov w28, w0 + beq .L924 + ldr x6, [x29,104] + ldrb w0, [x6,4044] + cmp w28, w0, lsr 1 + bls .L946 +.L924: + lsr w0, w20, 8 + bl NandcSetDdrPara + cmn w28, #1 + beq .L925 + b .L946 +.L922: + ldr w1, [x29,172] + mov w0, w19 + ldr x2, [x21,8] + ldr x3, [x21,16] + blr x20 + cmn w0, #1 + mov w28, w0 + mov w20, 0 + bne .L927 + add x2, x22, :lo12:.LANCHOR0 + ldr x0, [x2,1912] + ldrb w0, [x0,19] + sub w0, w0, #1 + uxtb w0, w0 + cmp w0, 6 + bhi .L928 + ldrb w1, [x2,4057] + mov w0, w19 + add x2, x2, 4060 + mov w3, w20 + bl HynixSetRRPara +.L928: + ldr w1, [x29,172] + mov w0, w19 + ldr x2, [x21,8] + mov w20, 0 + ldr x3, [x21,16] + bl FlashReadRawPage + mov w28, w0 + add x4, x22, :lo12:.LANCHOR0 + ldr x0, [x29,112] + ldr w1, [x21,4] + mov w3, w28 + str x4, [x29,104] + ldrb w2, [x4,4044] + bl printk + cmn w28, #1 + ldr x4, [x29,104] + bne .L927 + ldrb w0, [x4,136] + cbz w0, .L927 + ldr w0, [x29,152] + cbz w0, .L929 + mov w0, w19 + bl flash_enter_slc_mode + b .L930 +.L929: + mov w0, w19 + bl flash_exit_slc_mode +.L930: + add x0, x24, :lo12:.LANCHOR2 + ldr w1, [x29,172] + ldr x2, [x21,8] + mov w20, 0 + ldr x3, [x21,16] + ldr x4, [x0,656] + mov w0, w19 + blr x4 + mov w28, w0 + b .L927 +.L995: + ldr w1, [x29,172] + mov w0, w19 + ldr x2, [x21,8] + ldr x3, [x21,16] + bl FlashReadRawPage + mov w28, w0 + b .L927 +.L946: + mov w20, 0 +.L926: + add x0, x22, :lo12:.LANCHOR0 + ldrb w0, [x0,4044] + add w0, w0, w0, lsl 1 + cmp w28, w0, lsr 2 + bls .L927 + add x0, x24, :lo12:.LANCHOR2 + ldr x0, [x0,656] + cmp x0, xzr + mov w0, 256 + csel w28, w28, w0, ne +.L927: + cmp w28, 256 + beq .L951 + cmn w28, #1 + bne .L931 +.L951: + str w28, [x26,x27] + b .L933 +.L931: + str wzr, [x26,x27] +.L933: + ldr w3, [x26,x27] + cmn w3, #1 + bne .L935 + add x2, x22, :lo12:.LANCHOR0 + ldr w1, [x21,4] + ldr x0, [x29,128] + ldrb w2, [x2,4044] + bl printk + ldr x1, [x21,16] + cbz x1, .L935 + mov w2, 4 + ldr x0, [x29,120] + mov w3, w2 + bl rknand_print_hex +.L935: + cbz w20, .L937 + add x0, x22, :lo12:.LANCHOR0 + ldrb w0, [x0,4044] + add w0, w0, w0, lsl 1 + cmp w23, w0, lsr 2 + bls .L938 + add x24, x24, :lo12:.LANCHOR2 + ldr x0, [x24,656] + cmp x0, xzr + mov w0, 256 + csel w23, w23, w0, ne +.L938: + add w0, w25, 1 + mov w1, 56 + cmp w23, 256 + umull x0, w0, w1 + beq .L952 + cmn w23, #1 + bne .L939 +.L952: + str w23, [x26,x0] + b .L937 +.L939: + str wzr, [x26,x0] +.L937: + ldr w0, [x29,152] + add w25, w25, w20 + cbz w0, .L907 + add x0, x22, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L907 + mov w0, w19 + bl flash_exit_slc_mode +.L907: + add w25, w25, 1 + b .L904 +.L994: + mov w0, 0 + b .L992 +.L917: + mov w0, w19 + bl NandcWaitFlashReady + cbz w20, .L914 + ldr w1, [x29,172] + mov w0, w19 + bl FlashReadDpDataOutCmd + b .L914 +.L992: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 176 + ret + .size FlashReadPages, .-FlashReadPages + .align 2 + .global FlashLoadFactorBbt + .type FlashLoadFactorBbt, %function +FlashLoadFactorBbt: + stp x29, x30, [sp, -192]! + mov w2, 16 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x22, .LANCHOR0 + add x0, x22, :lo12:.LANCHOR0 + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + adrp x23, .LANCHOR2 + mov w27, -1 + ldrh w1, [x0,4028] + add x19, x23, :lo12:.LANCHOR2 + ldrh w21, [x0,4030] + add x0, x19, 720 + mov w28, 0 + adrp x26, .LC19 + add x26, x26, :lo12:.LC19 + mul w21, w1, w21 + mov w1, 0 + uxth w21, w21 + bl ftl_memset + add w25, w21, w27 + ldr x0, [x19,688] + str x0, [x29,152] + mov w19, w28 + sub w0, w21, #12 + str xzr, [x29,144] + uxth w25, w25 + str w0, [x29,124] +.L997: + add x1, x22, :lo12:.LANCHOR0 + ldrb w1, [x1,1676] + cmp w1, w19 + bls .L1007 + mul w3, w19, w21 + mov w20, w25 + mov w4, 61664 +.L998: + ldr w0, [x29,124] + cmp w20, w0 + ble .L1000 + add w1, w3, w20 + add x0, x29, 136 + lsl w1, w1, 10 + str w1, [x29,140] + mov w1, 1 + str x4, [x29,104] + mov w2, w1 + str x3, [x29,112] + bl FlashReadPages + ldr w0, [x29,136] + ldr x3, [x29,112] + cmn w0, #1 + ldr x4, [x29,104] + beq .L999 + add x24, x23, :lo12:.LANCHOR2 + ldr x0, [x24,688] + ldrh w0, [x0] + cmp w0, w4 + bne .L999 + add x24, x24, 720 + mov x0, x26 + mov w1, w19 + mov w2, w20 + add w28, w28, 1 + bl printk + strh w20, [x24,w19,sxtw 1] + uxth w28, w28 + b .L1000 +.L999: + sub w20, w20, #1 + uxth w20, w20 + b .L998 +.L1000: + add x1, x22, :lo12:.LANCHOR0 + add w19, w19, 1 + uxtb w19, w19 + ldrb w1, [x1,1676] + cmp w1, w28 + csel w27, w27, wzr, ne + b .L997 +.L1007: + mov w0, w27 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 192 + ret + .size FlashLoadFactorBbt, .-FlashLoadFactorBbt + .align 2 + .global FlashReadFacBbtData + .type FlashReadFacBbtData, %function +FlashReadFacBbtData: + stp x29, x30, [sp, -144]! + add x29, sp, 0 + stp x21, x22, [sp,32] + mov x22, x0 + adrp x0, .LANCHOR0 + add x4, x0, :lo12:.LANCHOR0 + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + mov w23, w1 + ldr x0, [x0,#:lo12:.LANCHOR0] + ldrh w3, [x4,4028] + mov w25, w2 + ldrh w1, [x4,4030] + adrp x4, .LANCHOR2 + str x0, [x29,96] + add x0, x4, :lo12:.LANCHOR2 + mov x21, x4 + mov w26, 61664 + mul w3, w3, w1 + ldr x0, [x0,688] + str x0, [x29,104] + uxth w3, w3 + sub w20, w3, #1 + sub w19, w3, #16 + mul w24, w23, w3 + uxth w20, w20 +.L1009: + cmp w20, w19 + ble .L1017 + add w0, w20, w24 + mov w1, 1 + lsl w0, w0, 10 + mov w2, w1 + str w0, [x29,92] + add x0, x29, 88 + bl FlashReadPages + ldr w0, [x29,88] + cmn w0, #1 + beq .L1010 + add x0, x21, :lo12:.LANCHOR2 + ldr x0, [x0,688] + ldrh w0, [x0] + cmp w0, w26 + bne .L1010 + mov w0, w22 + cbz x22, .L1011 + mov x0, x22 + mov w1, w23 + mov w2, w25 + bl FlashReadFacBbtData.part.6 + b .L1011 +.L1010: + sub w20, w20, #1 + uxth w20, w20 + b .L1009 +.L1017: + mov w0, -1 +.L1011: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 144 + ret + .size FlashReadFacBbtData, .-FlashReadFacBbtData + .align 2 + .global FlashGetBadBlockList + .type FlashGetBadBlockList, %function +FlashGetBadBlockList: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + str x21, [sp,32] + mov x21, x0 + adrp x0, .LANCHOR0+1912 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR2 + ldr x0, [x0,#:lo12:.LANCHOR0+1912] + ldrb w2, [x0,13] + ldrh w19, [x0,14] + add x0, x20, :lo12:.LANCHOR2 + mul w19, w2, w19 + ldr x0, [x0,680] + uxth w19, w19 + add w2, w19, 7 + lsr w2, w2, 3 + bl FlashReadFacBbtData + cmn w0, #1 + bne .L1019 +.L1023: + mov w1, 0 + b .L1020 +.L1019: + mov w2, 0 + lsr w0, w19, 4 + mov w1, w2 + sub w19, w19, #1 + mov w5, 1 +.L1021: + cmp w2, w19 + bge .L1020 + add x3, x20, :lo12:.LANCHOR2 + ubfx x4, x2, 5, 11 + ldr x6, [x3,680] + lsl w3, w5, w2 + ldr w4, [x6,x4,lsl 2] + tst w3, w4 + beq .L1022 + add w3, w1, 1 + ubfiz x1, x1, 1, 16 + strh w2, [x21,x1] + uxth w1, w3 +.L1022: + cmp w1, w0 + bcs .L1023 + add w2, w2, 1 + uxth w2, w2 + b .L1021 +.L1020: + ubfiz x1, x1, 1, 16 + mov w0, -1 + ldp x19, x20, [sp,16] + strh w0, [x21,x1] + mov w0, 0 + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FlashGetBadBlockList, .-FlashGetBadBlockList + .align 2 + .global FlashProgSlc2KPages + .type FlashProgSlc2KPages, %function +FlashProgSlc2KPages: + stp x29, x30, [sp, -160]! + add x29, sp, 0 + stp x23, x24, [sp,48] + mov w23, w1 + adrp x1, .LANCHOR1+265 + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + adrp x22, .LANCHOR0 + ldrb w26, [x1,#:lo12:.LANCHOR1+265] + stp x27, x28, [sp,80] + stp x19, x20, [sp,16] + mov w24, w2 + mov w27, w3 + mov x19, x0 + mov x21, x0 + mov w25, 0 + add x22, x22, :lo12:.LANCHOR0 + mov w28, -1 +.L1029: + cmp w25, w23 + beq .L1058 + mov w1, w24 + sub w4, w23, w25 + mov x0, x21 + add x2, x29, 96 + add x3, x29, 100 + bl LogAddr2PhyAddr + ldr w0, [x29,100] + ldrb w1, [x22,1676] + cmp w0, w1 + bcc .L1030 + str w28, [x21] + b .L1031 +.L1030: + add x0, x22, x0, uxtw + ldrb w20, [x0,1680] + mov w0, w20 + bl NandcWaitFlashReady + mov w0, w20 + bl NandcFlashCs + ldr w1, [x29,96] + mov w0, w20 + bl FlashProgFirstCmd + ldr x3, [x21,8] + mov w2, w26 + ldr x4, [x21,16] + mov w1, 1 + mov w0, w20 + bl NandcXferData + ldr w1, [x29,96] + mov w0, w20 + bl FlashProgSecondCmd + mov w0, w20 + bl NandcWaitFlashReady + ldr w1, [x29,96] + mov w0, w20 + bl FlashReadStatus + sbfx x0, x0, 0, 1 + str w0, [x21] + mov w0, w20 + ldr w1, [x29,96] + ldr w2, [x22,28] + add w1, w2, w1 + bl FlashProgFirstCmd + ldr x0, [x21,8] + mov w1, 1 + mov w2, w26 + cmp x0, xzr + add x3, x0, 2048 + ldr x0, [x21,16] + csel x3, x3, xzr, ne + add x4, x0, 8 + cmp x0, xzr + csel x4, x4, xzr, ne + mov w0, w20 + bl NandcXferData + adrp x0, .LANCHOR0 + ldr w1, [x29,96] + add x0, x0, :lo12:.LANCHOR0 + ldr w2, [x0,28] + mov w0, w20 + add w1, w2, w1 + bl FlashProgSecondCmd + mov w0, w20 + bl NandcWaitFlashReady + ldr w1, [x29,96] + mov w0, w20 + bl FlashReadStatus + tbz x0, 0, .L1034 + str w28, [x21] +.L1034: + mov w0, w20 + bl NandcFlashDeCs +.L1031: + add w25, w25, 1 + add x21, x21, 56 + b .L1029 +.L1058: + mov w21, 0 + cbz w27, .L1056 + adrp x25, .LC23 + adrp x26, .LC22 + adrp x27, .LC21 + add x25, x25, :lo12:.LC23 + add x26, x26, :lo12:.LC22 + add x27, x27, :lo12:.LC21 +.L1057: + cmp w21, w23 + beq .L1056 + ldr w0, [x19] + cmn w0, #1 + bne .L1037 + adrp x0, .LC20 + ldr w1, [x19,4] + add x0, x0, :lo12:.LC20 + bl printk + b .L1038 +.L1037: + adrp x20, .LANCHOR2 + sub w4, w23, w21 + add x22, x20, :lo12:.LANCHOR2 + add x3, x29, 100 + mov w1, w24 + add x2, x29, 96 + mov x0, x19 + bl LogAddr2PhyAddr + ldr x0, [x22,696] + mov x1, x19 + mov x2, 56 + str wzr, [x0] + ldr x0, [x22,704] + str wzr, [x0] + add x0, x29, 104 + bl memcpy + ldr x0, [x22,696] + mov w1, 1 + str x0, [x29,112] + mov w2, w24 + ldr x0, [x22,704] + str x0, [x29,120] + add x0, x29, 104 + bl FlashReadPages + ldr w22, [x29,104] + cmn w22, #1 + bne .L1039 + ldr w1, [x19,4] + mov x0, x27 + bl printk + str w22, [x19] +.L1039: + ldr x0, [x19,16] + cbz x0, .L1040 + ldr w2, [x0] + add x0, x20, :lo12:.LANCHOR2 + ldr x0, [x0,704] + ldr w3, [x0] + cmp w2, w3 + beq .L1040 + ldr w1, [x19,4] + mov x0, x26 + bl printk + mov w0, -1 + str w0, [x19] +.L1040: + ldr x0, [x19,8] + cbz x0, .L1038 + add x20, x20, :lo12:.LANCHOR2 + ldr w2, [x0] + ldr x0, [x20,696] + ldr w3, [x0] + cmp w2, w3 + beq .L1038 + ldr w1, [x19,4] + mov x0, x25 + bl printk + mov w0, -1 + str w0, [x19] +.L1038: + add w21, w21, 1 + add x19, x19, 56 + b .L1057 +.L1056: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 160 + ret + .size FlashProgSlc2KPages, .-FlashProgSlc2KPages + .align 2 + .global FlashProgPages + .type FlashProgPages, %function +FlashProgPages: + stp x29, x30, [sp, -192]! + adrp x6, .LANCHOR1+265 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + mov w22, 0 + add x4, x21, :lo12:.LANCHOR0 + str w3, [x29,124] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov x19, x0 + mov w25, w1 + ldr x5, [x4,1912] + mov w23, w2 + ldrb w4, [x4,24] + ldrb w27, [x6,#:lo12:.LANCHOR1+265] + ldrb w5, [x5,19] + cbz w4, .L1060 + bl FlashProgSlc2KPages + b .L1061 +.L1060: + sub w0, w5, #1 + adrp x28, .LANCHOR2 + str w0, [x29,120] + add x0, x28, :lo12:.LANCHOR2 + str x0, [x29,112] +.L1112: + cmp w22, w25 + bcs .L1113 + mov w20, 56 + mov w1, w23 + add x2, x29, 128 + sub w4, w25, w22 + umull x20, w22, w20 + add x3, x29, 132 + add x26, x19, x20 + mov x0, x26 + bl LogAddr2PhyAddr + mov w24, w0 + add x1, x21, :lo12:.LANCHOR0 + ldr w0, [x29,132] + ldrb w2, [x1,1676] + cmp w0, w2 + bcc .L1062 + mov w0, -1 + str w0, [x19,x20] + b .L1063 +.L1062: + add x3, x28, :lo12:.LANCHOR2 + uxtw x0, w0 + ldrb w3, [x3,648] + cmp w3, wzr + mov x3, 24 + csel w24, w24, wzr, ne + madd x0, x0, x3, x1 + ldr x0, [x0,1728] + cbz x0, .L1065 + cmp w2, 1 + bne .L1066 + ldr x0, [x1,3976] + bl NandcIqrWaitFlashReady +.L1066: + ldrb w0, [x29,132] + bl FlashWaitCmdDone +.L1065: + add x0, x21, :lo12:.LANCHOR0 + ldr w2, [x29,132] + mov x1, 24 + add x0, x0, 1720 + madd x0, x2, x1, x0 + ldr w1, [x29,128] + str x26, [x0,8] + str xzr, [x0,16] + str w1, [x0,4] + cbz w24, .L1067 + add w1, w22, 1 + mov w3, 56 + umull x1, w1, w3 + add x1, x19, x1 + str x1, [x0,16] +.L1067: + add x1, x21, :lo12:.LANCHOR0 + add x0, x1, x2 + ldrb w20, [x0,1680] + mov x0, 24 + madd x2, x2, x0, x1 + ldrb w0, [x1,1676] + strb w20, [x2,1720] + cmp w0, 1 + bne .L1068 + mov w0, w20 + bl NandcWaitFlashReady + b .L1069 +.L1068: + mov w0, w20 + str x1, [x29,104] + bl NandcFlashCs + ldr x1, [x29,104] + ldr w0, [x29,132] + add x1, x1, 1688 + ldr w0, [x1,x0,lsl 2] + ldr w1, [x29,128] + cmp w0, wzr + mov w0, w20 + cset w2, ne + bl FlashWaitReadyEN + mov w0, w20 + bl NandcFlashDeCs +.L1069: + ldr w0, [x29,120] + cmp w0, 6 + bhi .L1070 + ldr x0, [x29,112] + add x0, x0, x20, sxtw + ldrb w0, [x0,560] + cbz w0, .L1070 + add x2, x21, :lo12:.LANCHOR0 + mov w0, w20 + add x2, x2, 4060 + mov w3, 0 + ldrb w1, [x2,-3] + bl HynixSetRRPara +.L1070: + mov w0, w20 + bl NandcFlashCs + cmp w23, 1 + bne .L1071 + add x0, x21, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L1071 + mov w0, w20 + bl flash_enter_slc_mode + b .L1072 +.L1071: + mov w0, w20 + bl flash_exit_slc_mode +.L1072: + ldr w1, [x29,128] + mov w0, w20 + bl FlashProgFirstCmd + ldr x3, [x26,8] + mov w0, w20 + ldr x4, [x26,16] + mov w1, 1 + mov w2, w27 + bl NandcXferData + cbz w24, .L1073 + ldr w1, [x29,128] + mov w0, w20 + add x26, x21, :lo12:.LANCHOR0 + bl FlashProgDpFirstCmd + ldr w1, [x29,132] + add x0, x26, 1688 + ldr w0, [x0,x1,lsl 2] + ldr w1, [x29,128] + cmp w0, wzr + mov w0, w20 + cset w2, ne + bl FlashWaitReadyEN + ldr w2, [x26,28] + mov w0, w20 + ldr w1, [x29,128] + add w1, w2, w1 + bl FlashProgDpSecondCmd + add w0, w22, 1 + mov w4, 56 + mov w1, 1 + mov w2, w27 + umull x4, w0, w4 + mov w0, w20 + add x4, x19, x4 + ldr x3, [x4,8] + ldr x4, [x4,16] + bl NandcXferData +.L1073: + ldr w1, [x29,128] + mov w0, w20 + add w22, w22, w24 + bl FlashProgSecondCmd + mov w0, w20 + bl NandcFlashDeCs +.L1063: + add w22, w22, 1 + b .L1112 +.L1113: + add x21, x21, :lo12:.LANCHOR0 + mov x20, 0 + mov x22, 24 + ldr x0, [x21,3976] + bl NandcIqrWaitFlashReady +.L1075: + ldrb w0, [x21,1676] + cmp w0, w20 + bls .L1114 + mov w0, w20 + bl FlashWaitCmdDone + cmp w23, 1 + bne .L1076 + ldrb w0, [x21,136] + cbz w0, .L1076 + madd x0, x20, x22, x21 + ldrb w0, [x0,1720] + bl flash_exit_slc_mode +.L1076: + add x20, x20, 1 + b .L1075 +.L1114: + ldr w0, [x29,124] + cbnz w0, .L1078 +.L1086: + mov w0, 0 + b .L1061 +.L1078: + adrp x24, .LC23 + adrp x26, .LC22 + adrp x27, .LC21 + mov w21, 0 + add x24, x24, :lo12:.LC23 + add x26, x26, :lo12:.LC22 + add x27, x27, :lo12:.LC21 +.L1079: + cmp w21, w25 + beq .L1086 + ldr w0, [x19] + cmn w0, #1 + bne .L1080 + adrp x0, .LC20 + ldr w1, [x19,4] + add x0, x0, :lo12:.LC20 + bl printk + b .L1081 +.L1080: + adrp x20, .LANCHOR2 + sub w4, w25, w21 + add x22, x20, :lo12:.LANCHOR2 + add x3, x29, 132 + mov w1, w23 + add x2, x29, 128 + mov x0, x19 + bl LogAddr2PhyAddr + ldr x0, [x22,696] + mov x1, x19 + mov x2, 56 + str wzr, [x0] + ldr x0, [x22,704] + str wzr, [x0] + add x0, x29, 136 + bl memcpy + ldr x0, [x22,696] + mov w1, 1 + str x0, [x29,144] + mov w2, w23 + ldr x0, [x22,704] + str x0, [x29,152] + add x0, x29, 136 + bl FlashReadPages + ldr w22, [x29,136] + cmn w22, #1 + bne .L1082 + ldr w1, [x19,4] + mov x0, x27 + bl printk + str w22, [x19] +.L1082: + ldr x0, [x19,16] + cbz x0, .L1083 + ldr w2, [x0] + add x0, x20, :lo12:.LANCHOR2 + ldr x0, [x0,704] + ldr w3, [x0] + cmp w2, w3 + beq .L1083 + ldr w1, [x19,4] + mov x0, x26 + bl printk + mov w0, -1 + str w0, [x19] +.L1083: + ldr x0, [x19,8] + cbz x0, .L1081 + add x20, x20, :lo12:.LANCHOR2 + ldr w2, [x0] + ldr x0, [x20,696] + ldr w3, [x0] + cmp w2, w3 + beq .L1081 + ldr w1, [x19,4] + mov x0, x24 + bl printk + mov w0, -1 + str w0, [x19] +.L1081: + add w21, w21, 1 + add x19, x19, 56 + b .L1079 +.L1061: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 192 + ret + .size FlashProgPages, .-FlashProgPages + .align 2 + .type FlashTestBlk.part.7, %function +FlashTestBlk.part.7: + stp x29, x30, [sp, -160]! + mov w1, 165 + mov w2, 32 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + uxth w20, w0 + add x19, x19, :lo12:.LANCHOR2 + lsl w20, w20, 10 + ldr x0, [x19,680] + str x0, [x29,48] + add x0, x29, 96 + str x0, [x29,56] + bl ftl_memset + ldr x0, [x19,680] + mov w1, 90 + mov w2, 8 + bl ftl_memset + str w20, [x29,44] + mov w1, 1 + add x0, x29, 40 + mov w2, w1 + bl FlashEraseBlocks + mov w1, 1 + add x0, x29, 40 + mov w3, w1 + mov w2, w1 + bl FlashProgPages + ldr w0, [x29,40] + mov w1, 0 + mov w2, 1 + cmp w0, wzr + add x0, x29, 40 + csetm w19, ne + bl FlashEraseBlocks + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 160 + ret + .size FlashTestBlk.part.7, .-FlashTestBlk.part.7 + .align 2 + .global FlashTestBlk + .type FlashTestBlk, %function +FlashTestBlk: + uxth w1, w0 + adrp x0, .LANCHOR0+8 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr w2, [x0,#:lo12:.LANCHOR0+8] + mov w0, 0 + cmp w1, w2 + bcc .L1117 + mov w0, w1 + bl FlashTestBlk.part.7 +.L1117: + ldp x29, x30, [sp], 16 + ret + .size FlashTestBlk, .-FlashTestBlk + .align 2 + .global FlashMakeFactorBbt + .type FlashMakeFactorBbt, %function +FlashMakeFactorBbt: + stp x29, x30, [sp, -224]! + adrp x2, .LANCHOR2 + add x29, sp, 0 + add x0, x2, :lo12:.LANCHOR2 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + adrp x19, .LANCHOR0 + str x2, [x29,136] + ldr x0, [x0,688] + mov w20, 0 + str x0, [x29,152] + add x0, x19, :lo12:.LANCHOR0 + ldrh w1, [x0,4028] + ldrh w22, [x0,4030] + ldrh w25, [x0,28] + mul w22, w1, w22 + ldr x1, [x0,1912] + ldrb w0, [x0,24] + uxth w22, w22 + ldrb w1, [x1,24] + cmp w0, 1 + str w1, [x29,148] + adrp x0, .LC24 + ubfiz w1, w25, 1, 15 + add x0, x0, :lo12:.LC24 + csel w25, w1, w25, eq + mov w1, 1 + bl printk + ldr x0, [x29,136] + mov w1, 0 + mov w2, 4096 + add x0, x0, :lo12:.LANCHOR2 + ldr x0, [x0,688] + bl ftl_memset + lsr w0, w22, 4 + str w0, [x29,144] + ldr w0, [x29,148] + and w0, w0, 1 + str w0, [x29,124] + ldr w0, [x29,148] + and w0, w0, 2 + uxtb w0, w0 + str w0, [x29,120] + sub w0, w22, #1 + uxth w0, w0 + str w0, [x29,132] +.L1121: + add x23, x19, :lo12:.LANCHOR0 + ldrb w0, [x23,1676] + cmp w0, w20 + bls .L1172 + ldr x0, [x29,136] + sxtw x24, w20 + add x0, x0, :lo12:.LANCHOR2 + add x0, x0, 720 + ldrh w21, [x0,w20,sxtw 1] + cbnz w21, .L1151 + ldrh w2, [x23,4036] + mov w1, w21 + ldr x0, [x19,#:lo12:.LANCHOR0] + add x23, x23, x24 + lsl w2, w2, 9 + mov w26, w21 + bl ftl_memset + ldrb w27, [x23,1680] + ldr w0, [x29,148] + mov w23, w21 + and w0, w0, 4 + uxtb w0, w0 + str w0, [x29,128] +.L1123: + uxth w28, w26 + cmp w28, w22 + bcs .L1133 + mov w0, -1 + strb w0, [x29,166] + strb w0, [x29,167] + ldr w0, [x29,124] + cbz w0, .L1125 + add x4, x19, :lo12:.LANCHOR0 + add x2, x29, 166 + add x0, x4, 1688 + str x4, [x29,104] + ldr w3, [x0,x24,lsl 2] + mov w0, w27 + add w3, w21, w3 + str x3, [x29,112] + mov w1, w3 + bl FlashReadSpare + ldr x4, [x29,104] + ldr x3, [x29,112] + ldrb w0, [x4,24] + cmp w0, 1 + bne .L1125 + ldr w1, [x4,28] + mov w0, w27 + add x2, x29, 167 + add w1, w3, w1 + bl FlashReadSpare + ldrb w0, [x29,166] + ldrb w1, [x29,167] + and w0, w1, w0 + strb w0, [x29,166] +.L1125: + ldr w0, [x29,120] + cbz w0, .L1127 + add x0, x19, :lo12:.LANCHOR0 + add x2, x29, 167 + add x0, x0, 1688 + ldr x1, [x0,224] + ldr w0, [x0,x24,lsl 2] + ldrh w1, [x1,10] + sub w1, w1, #1 + add w1, w1, w0 + mov w0, w27 + add w1, w1, w21 + bl FlashReadSpare +.L1127: + add x0, x19, :lo12:.LANCHOR0 + ldrb w1, [x29,166] + ldr x0, [x0,1912] + ldrb w0, [x0,7] + cmp w0, 8 + beq .L1152 + cmp w0, 1 + bne .L1128 +.L1152: + mov w0, 1 + cbz w1, .L1130 + ldrb w0, [x29,167] + cmp w0, wzr + cset w0, eq + b .L1130 +.L1128: + cmp w1, 255 + mov w0, 1 + bne .L1130 + ldrb w0, [x29,167] + cmp w0, 255 + cset w0, ne +.L1130: + ldr w1, [x29,128] + cbz w1, .L1131 + add x0, x19, :lo12:.LANCHOR0 + add x0, x0, 1688 + ldr w1, [x0,x24,lsl 2] + mov w0, w27 + add w1, w21, w1 + bl SandiskProgTestBadBlock +.L1131: + cbz w0, .L1132 + adrp x0, .LC25 + mov w1, w20 + mov w2, w26 + add x0, x0, :lo12:.LC25 + add w23, w23, 1 + bl printk + ubfx x1, x28, 5, 11 + ldr x3, [x19,#:lo12:.LANCHOR0] + lsl x1, x1, 2 + mov w0, 1 + lsl w28, w0, w28 + add x2, x19, :lo12:.LANCHOR0 + uxth w23, w23 + ldr w0, [x3,x1] + orr w28, w0, w28 + str w28, [x3,x1] + ldr w1, [x29,144] + ldrb w0, [x2,1676] + mul w0, w1, w0 + cmp w23, w0 + bgt .L1133 +.L1132: + add w26, w26, 1 + add w21, w21, w25 + b .L1123 +.L1133: + adrp x0, .LC26 + mov w1, w20 + mov w2, w23 + add x0, x0, :lo12:.LC26 + bl printk + add x1, x19, :lo12:.LANCHOR0 + ldr w2, [x29,144] + ldrb w0, [x1,1676] + mul w0, w2, w0 + cmp w23, w0 + blt .L1135 + ldrh w2, [x1,4036] + mov w1, 0 + ldr x0, [x19,#:lo12:.LANCHOR0] + lsl w2, w2, 9 + bl ftl_memset +.L1135: + cbnz w20, .L1137 + add x0, x19, :lo12:.LANCHOR0 + adrp x26, .LC27 + mov w21, w20 + add x26, x26, :lo12:.LC27 + mov w23, 1 + ldrh w27, [x0,8] +.L1138: + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,25] + cmp w0, w27 + bls .L1173 + mov w0, w27 + bl FlashTestBlk + cbz w0, .L1139 + mov w1, w27 + mov x0, x26 + add w21, w21, 1 + bl printk + ubfx x1, x27, 5, 11 + ldr x2, [x19,#:lo12:.LANCHOR0] + lsl x1, x1, 2 + lsl w0, w23, w27 + uxth w21, w21 + ldr w3, [x2,x1] + orr w0, w3, w0 + str w0, [x2,x1] +.L1139: + add w27, w27, 1 + uxth w27, w27 + b .L1138 +.L1173: + adrp x26, .LC27 + ldr w28, [x29,132] + sub w27, w22, #50 + add x26, x26, :lo12:.LC27 + mov w23, 1 +.L1141: + cmp w28, w27 + ble .L1174 + mov w0, w28 + bl FlashTestBlk + cbz w0, .L1142 + mov w1, w28 + mov x0, x26 + bl printk + ubfx x1, x28, 5, 11 + ldr x2, [x19,#:lo12:.LANCHOR0] + lsl x1, x1, 2 + lsl w0, w23, w28 + ldr w3, [x2,x1] + orr w0, w3, w0 + str w0, [x2,x1] +.L1142: + sub w28, w28, #1 + uxth w28, w28 + b .L1141 +.L1174: + add x0, x19, :lo12:.LANCHOR0 + ldrb w1, [x0,25] + ldr w2, [x0,8] + sub w1, w1, w2 + cmp w21, w1 + bcc .L1137 + ldrh w2, [x0,4036] + mov w1, 0 + ldr x0, [x19,#:lo12:.LANCHOR0] + lsl w2, w2, 9 + bl ftl_memset +.L1137: + ldr x0, [x29,136] + adrp x23, .LC28 + ldr w27, [x29,132] + add x23, x23, :lo12:.LC28 + mul w26, w20, w22 + add x28, x0, :lo12:.LANCHOR2 + mov w21, -3872 +.L1145: + mov w2, w27 + mov x0, x23 + mov w1, w20 + bl printk + ldr x2, [x19,#:lo12:.LANCHOR0] +.L1146: + ubfx x0, x27, 5, 11 + ldr w0, [x2,x0,lsl 2] + lsr w0, w0, w27 + and w1, w0, 1 + tbz x0, 0, .L1175 + sub w27, w27, #1 + uxth w27, w27 + b .L1146 +.L1175: + add x0, x28, 720 + strh w27, [x0,x24,lsl 1] + ldr x0, [x29,152] + strh w21, [x0] + strh w27, [x0,2] + strh w1, [x0,8] + mov w1, 1 + ldr x0, [x19,#:lo12:.LANCHOR0] + mov w2, w1 + str x0, [x29,176] + ldr x0, [x28,688] + str x0, [x29,184] + add w0, w27, w26 + lsl w0, w0, 10 + str w0, [x29,172] + add x0, x29, 168 + bl FlashEraseBlocks + mov w1, 1 + add x0, x29, 168 + mov w2, w1 + mov w3, w1 + bl FlashProgPages + ldr w0, [x29,168] + cbz w0, .L1151 + sub w27, w27, #1 + uxth w27, w27 + b .L1145 +.L1151: + add w20, w20, 1 + uxtb w20, w20 + b .L1121 +.L1172: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 224 + ret + .size FlashMakeFactorBbt, .-FlashMakeFactorBbt + .align 2 + .global Ftl_log2 + .type Ftl_log2, %function +Ftl_log2: + mov w2, 1 + mov w1, 0 +.L1177: + cmp w2, w0 + bhi .L1179 + add w1, w1, 1 + lsl w2, w2, 1 + uxth w1, w1 + b .L1177 +.L1179: + sub w0, w1, #1 + ret + .size Ftl_log2, .-Ftl_log2 + .align 2 + .global FtlPrintInfo + .type FtlPrintInfo, %function +FtlPrintInfo: + ret + .size FtlPrintInfo, .-FtlPrintInfo + .align 2 + .global FtlSysBlkNumInit + .type FtlSysBlkNumInit, %function +FtlSysBlkNumInit: + uxth w0, w0 + mov w1, 24 + cmp w0, 23 + csel w0, w0, w1, hi + adrp x1, .LANCHOR2 + add x1, x1, :lo12:.LANCHOR2 + ldrh w2, [x1,740] + ldrh w3, [x1,750] + str w0, [x1,736] + mul w2, w0, w2 + sub w0, w3, w0 + strh w0, [x1,748] + ldr w0, [x1,756] + str w2, [x1,744] + sub w2, w0, w2 + mov w0, 0 + str w2, [x1,752] + ret + .size FtlSysBlkNumInit, .-FtlSysBlkNumInit + .align 2 + .global FtlConstantsInit + .type FtlConstantsInit, %function +FtlConstantsInit: + stp x29, x30, [sp, -96]! + mov x3, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov x24, x0 + adrp x19, .LANCHOR2 + ldrh w6, [x0,8] + add x0, x19, :lo12:.LANCHOR2 + ldrh w2, [x24,10] + ldrh w1, [x24,12] + ldrh w4, [x24,14] + strh w6, [x0,760] + strh w2, [x0,762] + strh w1, [x0,764] + strh w4, [x0,750] +.L1184: + add x5, x0, 768 + strb w3, [x3,x5] + add x3, x3, 1 + cmp x3, 32 + bne .L1184 + ldrh w3, [x24,20] + ldrb w0, [x24,15] + cmp w3, w0 + bcs .L1185 + uxtb w8, w1 + mov w3, 0 + mul w11, w1, w2 + ubfiz w10, w8, 1, 7 + add x12, x19, :lo12:.LANCHOR2 +.L1186: + cmp w3, w1 + bcs .L1188 + uxtb w0, w3 + mov w5, w3 + mov w7, 0 +.L1189: + cmp w7, w2 + bcs .L1212 + add x9, x12, 768 + add w13, w5, w11 + add w14, w0, w8 + add w7, w7, 1 + strb w0, [x9,w5,uxtw] + add w0, w0, w10 + strb w14, [x9,x13] + add w5, w5, w1 + uxtb w0, w0 + b .L1189 +.L1212: + add w3, w3, 1 + b .L1186 +.L1188: + add x0, x19, :lo12:.LANCHOR2 + lsl w2, w2, 1 + lsr w4, w4, 1 + strh w2, [x0,762] + strh w4, [x0,750] +.L1185: + add x0, x19, :lo12:.LANCHOR2 + mov w2, 5 + cmp w6, 1 + strh w2, [x0,800] + strh wzr, [x0,802] + bne .L1190 + strh w6, [x0,800] +.L1190: + add x0, x19, :lo12:.LANCHOR2 + mov w2, 4352 + adrp x22, .LANCHOR0 + strh w2, [x0,804] + add x2, x22, :lo12:.LANCHOR0 + ldrb w27, [x2,24] + cbz w27, .L1191 + mov w2, 384 + strh w2, [x0,804] +.L1191: + add x21, x19, :lo12:.LANCHOR2 + ldrh w20, [x21,750] + ldrh w23, [x21,762] + mul w23, w1, w23 + mul w1, w20, w1 + uxth w23, w23 + strh w23, [x21,740] + uxth w0, w1 + strh w0, [x21,806] + bl Ftl_log2 + ldrh w26, [x24,16] + ldrh w25, [x24,20] + strh w0, [x21,808] + mul w0, w23, w26 + strh w0, [x21,814] + mov w0, w25 + ldrh w28, [x24,18] + strh w26, [x21,810] + strh w28, [x21,812] + strh w25, [x21,816] + bl Ftl_log2 + lsl w2, w25, 9 + uxth w3, w0 + strh w0, [x21,818] + cmp w20, 1024 + ldrh w0, [x24,26] + strh w2, [x21,820] + ubfx x2, x2, 9, 7 + strh w0, [x21,824] + lsl w2, w2, 1 + mul w0, w23, w20 + strh w2, [x21,822] + str w0, [x21,756] + bls .L1192 + and w0, w20, 255 + strh w0, [x21,802] +.L1192: + add x2, x19, :lo12:.LANCHOR2 + mul w0, w25, w28 + ldrh w1, [x2,802] + sub w1, w20, w1 + mul w1, w23, w1 + mul w1, w1, w25 + mul w1, w1, w26 + asr w1, w1, 11 + str w1, [x2,828] + ldrh w1, [x2,804] + lsl w1, w1, 3 + sdiv w0, w1, w0 + uxth w0, w0 + cmp w0, 4 + bhi .L1210 + mov w0, 4 +.L1210: + strh w0, [x2,832] + cbz w27, .L1195 + add x0, x19, :lo12:.LANCHOR2 + mov w1, 640 + strh w1, [x0,804] +.L1195: + add x1, x19, :lo12:.LANCHOR2 + lsl w20, w20, 6 + cmp w23, 1 + ldrh w0, [x1,804] + asr w0, w0, w3 + add w3, w3, 9 + asr w20, w20, w3 + strh w20, [x1,836] + and w20, w20, 65535 + add w0, w0, 2 + strh w0, [x1,834] + mul w0, w20, w23 + str w0, [x1,840] + add w20, w20, 8 + ldrh w0, [x1,832] + udiv w0, w0, w23 + add w20, w20, w0 + bne .L1211 + add w20, w20, 4 +.L1211: + str w20, [x1,736] + add x20, x19, :lo12:.LANCHOR2 + add x22, x22, :lo12:.LANCHOR0 + ldrh w0, [x20,736] + bl FtlSysBlkNumInit + str wzr, [x22,4048] + ldr w0, [x20,736] + str w0, [x20,844] + ldr w0, [x20,752] + ldrh w1, [x20,810] + lsl w0, w0, 2 + ldrh w3, [x20,816] + ldrh w2, [x20,832] + mul w1, w0, w1 + ldrh w0, [x20,818] + add w0, w0, 9 + lsr w0, w1, w0 + mov w1, 2048 + add w0, w0, 2 + sdiv w1, w1, w3 + strh w1, [x20,850] + uxth w0, w0 + strh w0, [x20,848] + add w1, w2, 3 + strh w1, [x20,832] + ldr w1, [x20,840] + add w4, w1, 3 + str w4, [x20,840] + ldrb w4, [x22,136] + cbz w4, .L1198 + add w2, w2, 4 + add w1, w1, 5 + strh w2, [x20,832] + str w1, [x20,840] +.L1198: + add x19, x19, :lo12:.LANCHOR2 + ldrh w1, [x19,748] + strh wzr, [x19,852] + lsr w2, w1, 3 + add w1, w2, w1, lsl 1 + add w1, w1, 52 + add w0, w1, w0, lsl 2 + cmp w0, w3, lsl 9 + bcs .L1199 + mov w0, 1 + strh w0, [x19,852] +.L1199: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size FtlConstantsInit, .-FtlConstantsInit + .align 2 + .global FtlMemInit + .type FtlMemInit, %function +FtlMemInit: + stp x29, x30, [sp, -64]! + mov w1, 65535 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR2 + str x23, [sp,48] + add x0, x20, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + str w1, [x0,924] + mov w1, -1 + strh wzr, [x0,854] + strh w1, [x0,940] + strh w1, [x0,942] + mov w1, 32 + str wzr, [x0,856] + strh w1, [x0,944] + mov w1, 128 + str wzr, [x0,860] + str wzr, [x0,864] + str wzr, [x0,868] + str wzr, [x0,872] + str wzr, [x0,876] + str wzr, [x0,880] + str wzr, [x0,884] + str wzr, [x0,888] + str wzr, [x0,892] + str wzr, [x0,896] + str wzr, [x0,900] + str wzr, [x0,904] + str wzr, [x0,908] + str wzr, [x0,912] + str wzr, [x0,916] + str wzr, [x0,920] + str wzr, [x0,928] + str wzr, [x0,932] + str wzr, [x0,936] + strh w1, [x0,946] + mov w1, 1024 + ldrh w2, [x0,816] + strh wzr, [x0,948] + strh wzr, [x0,950] + sdiv w2, w1, w2 + ldrh w1, [x0,740] + strh wzr, [x0,952] + lsl w1, w1, 2 + strh wzr, [x0,954] + str w2, [x0,956] + cmp w2, w1 + bls .L1214 + str w1, [x0,956] +.L1214: + add x19, x20, :lo12:.LANCHOR2 + mov w22, 56 + ldrh w0, [x19,814] + str wzr, [x19,960] + lsl w0, w0, 1 + bl ftl_malloc + str x0, [x19,968] + ldrh w1, [x19,814] + mov w0, 12 + mul w0, w1, w0 + bl ftl_malloc + ldrh w21, [x19,740] + str x0, [x19,976] + mul w21, w21, w22 + lsl w23, w21, 3 + mov w0, w23 + bl ftl_malloc + str x0, [x19,984] + mov w0, w21 + bl ftl_malloc + str x0, [x19,992] + mov w0, w23 + bl ftl_malloc + str x0, [x19,1000] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1008] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1016] + ldr w0, [x19,956] + mul w0, w0, w22 + bl ftl_malloc + str x0, [x19,1024] + ldrh w0, [x19,740] + ldrh w21, [x19,820] + lsl w0, w0, 1 + add w0, w0, 1 + str w0, [x19,1032] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1040] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1048] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1056] + ldr w0, [x19,1032] + mul w0, w21, w0 + bl ftl_malloc + str x0, [x19,1064] + ldr w0, [x19,956] + mul w0, w21, w0 + bl ftl_malloc + str x0, [x19,1072] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1080] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1088] + ldr w1, [x19,1032] + mov w0, 24 + mul w0, w1, w0 + bl ftl_malloc + ldrh w21, [x19,740] + str x0, [x19,1096] + ldrh w0, [x19,822] + mul w21, w0, w21 + mov w0, w21 + bl ftl_malloc + str x0, [x19,1104] + lsl w0, w21, 3 + bl ftl_malloc + str x0, [x19,1112] + ldrh w1, [x19,822] + ldr w0, [x19,1032] + mul w0, w1, w0 + bl ftl_malloc + str x0, [x19,1120] + ldrh w1, [x19,822] + ldr w0, [x19,956] + mul w0, w1, w0 + bl ftl_malloc + str x0, [x19,1128] + ldrh w0, [x19,750] + lsl w0, w0, 1 + strh w0, [x19,1136] + and w0, w0, 65534 + bl ftl_malloc + str x0, [x19,1144] + ldrh w0, [x19,1136] + add x0, x0, 547 + lsr x0, x0, 9 + strh w0, [x19,1136] + lsl w0, w0, 9 + bl ftl_malloc + ldrh w21, [x19,750] + str x0, [x19,1152] + add x0, x0, 32 + lsl w21, w21, 1 + str x0, [x19,1160] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1168] + mov w0, w21 + bl ftl_malloc + ldr w21, [x19,840] + str x0, [x19,1176] + lsl w21, w21, 1 + mov w0, w21 + bl ftl_malloc + str x0, [x19,1184] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1192] + ldrh w0, [x19,750] + lsr w0, w0, 3 + add w0, w0, 4 + bl ftl_malloc + adrp x1, .LANCHOR0+16 + str x0, [x1,#:lo12:.LANCHOR0+16] + ldrh w0, [x19,832] + lsl w0, w0, 1 + bl ftl_malloc + str x0, [x19,1200] + ldrh w0, [x19,832] + lsl w0, w0, 1 + bl ftl_malloc + str x0, [x19,1208] + ldrh w0, [x19,832] + lsl w0, w0, 2 + bl ftl_malloc + str x0, [x19,1216] + ldrh w0, [x19,834] + lsl w0, w0, 2 + bl ftl_malloc + str x0, [x19,1224] + ldrh w2, [x19,834] + mov w1, 0 + lsl w2, w2, 2 + bl ftl_memset + ldrh w21, [x19,848] + lsl w21, w21, 2 + mov w0, w21 + bl ftl_malloc + str x0, [x19,1232] + mov w0, w21 + bl ftl_malloc + str x0, [x19,1240] + ldr w0, [x19,840] + lsl w0, w0, 2 + bl ftl_malloc + str x0, [x19,1248] + ldrh w0, [x19,850] + lsl w0, w0, 4 + bl ftl_malloc + str x0, [x19,1256] + ldrh w1, [x19,850] + ldrh w0, [x19,820] + mul w0, w1, w0 + bl ftl_malloc + str x0, [x19,1264] + ldrh w1, [x19,750] + mov w0, 6 + mul w0, w1, w0 + bl ftl_malloc + str x0, [x19,1272] + ldrh w0, [x19,806] + ldrh w1, [x19,762] + add w0, w0, 31 + asr w0, w0, 5 + strh w0, [x19,1280] + mul w0, w0, w1 + lsl w0, w0, 2 + bl ftl_malloc + str x0, [x19,1320] + add x1, x19, 1288 + ldrh w4, [x19,1280] + ldrh w5, [x19,762] + mov w0, 1 + mov w2, w4 +.L1215: + cmp w0, w5 + add x1, x1, 8 + bcs .L1315 + ldr x3, [x19,1320] + add w0, w0, 1 + add x3, x3, x2, uxtw 2 + add w2, w2, w4 + str x3, [x1,32] + b .L1215 +.L1315: + add x1, x20, :lo12:.LANCHOR2 +.L1217: + cmp w0, 8 + beq .L1316 + add x2, x1, x0, uxtw 3 + add w0, w0, 1 + str xzr, [x2,1320] + b .L1217 +.L1316: + add x0, x20, :lo12:.LANCHOR2 + ldr x1, [x0,1184] + cbnz x1, .L1219 +.L1221: + adrp x0, .LC29 + adrp x1, .LANCHOR3 + add x0, x0, :lo12:.LC29 + add x1, x1, :lo12:.LANCHOR3 + bl printk + mov w0, -1 + b .L1220 +.L1219: + ldr x1, [x0,1192] + cbz x1, .L1221 + ldr x1, [x0,1232] + cbz x1, .L1221 + ldr x1, [x0,1248] + cbz x1, .L1221 + ldr x1, [x0,1256] + cbz x1, .L1221 + ldr x1, [x0,1264] + cbz x1, .L1221 + ldr x1, [x0,1272] + cbz x1, .L1221 + ldr x1, [x0,1320] + cbz x1, .L1221 + ldr x0, [x0,1176] + cbz x0, .L1221 + add x0, x20, :lo12:.LANCHOR2 + ldr x1, [x0,968] + cbz x1, .L1221 + ldr x1, [x0,976] + cbz x1, .L1221 + ldr x1, [x0,984] + cbz x1, .L1221 + ldr x1, [x0,1000] + cbz x1, .L1221 + ldr x1, [x0,1008] + cbz x1, .L1221 + ldr x1, [x0,1016] + cbz x1, .L1221 + ldr x1, [x0,992] + cbz x1, .L1221 + ldr x1, [x0,1040] + cbz x1, .L1221 + ldr x1, [x0,1048] + cbz x1, .L1221 + ldr x0, [x0,1056] + cbz x0, .L1221 + add x0, x20, :lo12:.LANCHOR2 + ldr x1, [x0,1064] + cbz x1, .L1221 + ldr x1, [x0,1080] + cbz x1, .L1221 + ldr x1, [x0,1088] + cbz x1, .L1221 + ldr x1, [x0,1096] + cbz x1, .L1221 + ldr x1, [x0,1104] + cbz x1, .L1221 + ldr x1, [x0,1112] + cbz x1, .L1221 + ldr x1, [x0,1120] + cbz x1, .L1221 + ldr x1, [x0,1160] + cbz x1, .L1221 + ldr x1, [x0,1144] + cbz x1, .L1221 + ldr x0, [x0,1200] + cbz x0, .L1221 + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + ldr x1, [x0,1208] + cbz x1, .L1221 + ldr x1, [x0,1216] + cbz x1, .L1221 + ldr x0, [x0,1224] + cbz x0, .L1221 + mov w0, 0 +.L1220: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size FtlMemInit, .-FtlMemInit + .align 2 + .global IsBlkInVendorPart + .type IsBlkInVendorPart, %function +IsBlkInVendorPart: + adrp x1, .LANCHOR2 + uxth w4, w0 + add x1, x1, :lo12:.LANCHOR2 + mov w0, 0 + ldrh w2, [x1,1384] + cbz w2, .L1318 + ldrh w2, [x1,832] + ldr x3, [x1,1200] + mov x1, 0 +.L1319: + cmp w2, w1, uxth + bls .L1324 + add x1, x1, 1 + add x0, x3, x1, lsl 1 + ldrh w0, [x0,-2] + cmp w0, w4 + bne .L1319 + mov w0, 1 + b .L1318 +.L1324: + mov w0, 0 +.L1318: + ret + .size IsBlkInVendorPart, .-IsBlkInVendorPart + .align 2 + .global FtlCacheMetchLpa + .type FtlCacheMetchLpa, %function +FtlCacheMetchLpa: + adrp x2, .LANCHOR2 + mov w6, w0 + add x2, x2, :lo12:.LANCHOR2 + mov w0, 0 + ldr w3, [x2,960] + cbz w3, .L1326 + ldr x5, [x2,1024] + mov x0, 56 + mov x2, 0 +.L1327: + cmp w3, w2 + bls .L1336 + madd x4, x2, x0, x5 + add x2, x2, 1 + ldr w4, [x4,24] + cmp w4, w6 + bcc .L1327 + cmp w4, w1 + bhi .L1327 + mov w0, 1 + b .L1326 +.L1336: + mov w0, 0 +.L1326: + ret + .size FtlCacheMetchLpa, .-FtlCacheMetchLpa + .align 2 + .global FtlGetCap + .type FtlGetCap, %function +FtlGetCap: + adrp x0, .LANCHOR0+4048 + ldr w0, [x0,#:lo12:.LANCHOR0+4048] + ret + .size FtlGetCap, .-FtlGetCap + .align 2 + .global ftl_get_density + .type ftl_get_density, %function +ftl_get_density: + adrp x0, .LANCHOR0+4048 + ldr w0, [x0,#:lo12:.LANCHOR0+4048] + ret + .size ftl_get_density, .-ftl_get_density + .align 2 + .global FtlGetLpn + .type FtlGetLpn, %function +FtlGetLpn: + adrp x0, .LANCHOR2+1388 + ldr w0, [x0,#:lo12:.LANCHOR2+1388] + ret + .size FtlGetLpn, .-FtlGetLpn + .align 2 + .global FtlBbmMapBadBlock + .type FtlBbmMapBadBlock, %function +FtlBbmMapBadBlock: + stp x29, x30, [sp, -32]! + uxth w1, w0 + mov w4, 1 + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR2 + add x19, x19, :lo12:.LANCHOR2 + ldrh w3, [x19,806] + add x19, x19, 1288 + udiv w2, w1, w3 + add x0, x19, x2, uxth 3 + ldr x0, [x0,32] + msub w3, w2, w3, w1 + uxth w3, w3 + ubfx x6, x3, 5, 11 + lsl w4, w4, w3 + lsl x6, x6, 2 + ldr w5, [x0,x6] + orr w4, w4, w5 + str w4, [x0,x6] + adrp x0, .LC30 + add x0, x0, :lo12:.LC30 + bl printk + ldrh w0, [x19,6] + add w0, w0, 1 + strh w0, [x19,6] + mov w0, 0 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlBbmMapBadBlock, .-FtlBbmMapBadBlock + .align 2 + .global FtlBbmIsBadBlock + .type FtlBbmIsBadBlock, %function +FtlBbmIsBadBlock: + adrp x2, .LANCHOR2 + uxth w0, w0 + add x3, x2, :lo12:.LANCHOR2 + ldrh w1, [x3,806] + udiv w2, w0, w1 + msub w0, w2, w1, w0 + add x2, x3, x2, uxth 3 + ldr x1, [x2,1320] + uxth w0, w0 + ubfx x3, x0, 5, 11 + ldr w1, [x1,x3,lsl 2] + lsr w0, w1, w0 + and w0, w0, 1 + ret + .size FtlBbmIsBadBlock, .-FtlBbmIsBadBlock + .align 2 + .global FtlBbtInfoPrint + .type FtlBbtInfoPrint, %function +FtlBbtInfoPrint: + ret + .size FtlBbtInfoPrint, .-FtlBbtInfoPrint + .align 2 + .global FtlBbt2Bitmap + .type FtlBbt2Bitmap, %function +FtlBbt2Bitmap: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + mov x20, x0 + adrp x0, .LANCHOR2+1280 + mov x19, x1 + ldrh w2, [x0,#:lo12:.LANCHOR2+1280] + mov x0, x1 + mov w1, 0 + lsl w2, w2, 2 + bl ftl_memset + mov x3, 0 + mov w0, 65535 + mov w5, 1 +.L1345: + ldrh w2, [x20,x3] + cmp w2, w0 + beq .L1343 + ubfx x4, x2, 5, 11 + add x3, x3, 2 + lsl x4, x4, 2 + lsl w2, w5, w2 + cmp x3, 1024 + ldr w1, [x19,x4] + orr w2, w1, w2 + str w2, [x19,x4] + bne .L1345 +.L1343: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlBbt2Bitmap, .-FtlBbt2Bitmap + .align 2 + .global FtlBbmTblFlush + .type FtlBbmTblFlush, %function +FtlBbmTblFlush: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x19, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + ldr w1, [x19,1392] + stp x25, x26, [sp,64] + cbnz w1, .L1350 + ldr x0, [x19,1040] + mov x22, 0 + ldr x3, [x19,1104] + add x21, x19, 1288 + ldrh w2, [x19,820] + str x0, [x19,1408] + str x3, [x19,1416] + bl ftl_memset +.L1351: + ldrh w1, [x19,762] + mov w0, w22 + add x20, x19, 1400 + add x22, x22, 1 + cmp w0, w1 + bge .L1359 + add x1, x21, x22, lsl 3 + ldrh w2, [x19,1280] + ldr x3, [x20,8] + ldr x1, [x1,24] + mul w0, w0, w2 + add x0, x3, x0, sxtw 2 + lsl w2, w2, 2 + bl ftl_memcpy + b .L1351 +.L1359: + ldr x25, [x20,16] + mov w1, 255 + mov w2, 16 + mov w26, 0 + mov x0, x25 + adrp x22, .LC31 + adrp x24, .LC32 + mov w23, w26 + bl ftl_memset + add x22, x22, :lo12:.LC31 + mov w0, -3887 + strh w0, [x25] + add x24, x24, :lo12:.LC32 + ldr w0, [x21,8] + str w0, [x25,4] + ldrh w0, [x19,1288] + strh w0, [x25,2] + ldrh w0, [x21,4] + strh w0, [x25,8] + ldrh w0, [x21,6] + strh w0, [x25,10] + ldr w0, [x19,736] + strh w0, [x25,12] +.L1353: + ldr x0, [x19,1040] + str x0, [x20,8] + ldrh w1, [x19,1288] + ldr x0, [x19,1104] + str x0, [x20,16] + ldrh w2, [x19,1290] + ldrh w3, [x19,1292] + orr w0, w2, w1, lsl 10 + ldrh w4, [x25,10] + str w0, [x20,4] + mov x0, x22 + str wzr, [x20] + bl printk + mov w1, 1 + mov x0, x20 + mov w2, w1 + mov w3, w1 + bl FlashProgPages + ldrh w1, [x19,812] + ldrh w0, [x19,1290] + sub w1, w1, #1 + cmp w0, w1 + blt .L1354 + ldr w1, [x19,1296] + ldrh w0, [x19,1288] + add w1, w1, 1 + str w1, [x19,1296] + str w1, [x25,4] + strh w0, [x25,8] + ldrh w1, [x19,1292] + strh w0, [x19,1292] + ldr x0, [x19,1008] + strh w1, [x19,1288] + lsl w1, w1, 10 + str w1, [x20,4] + str w1, [x0,4] + mov w1, 1 + mov w2, w1 + strh wzr, [x19,1290] + ldr x0, [x19,1008] + bl FlashEraseBlocks + mov w1, 1 + mov x0, x20 + mov w2, w1 + mov w3, w1 + bl FlashProgPages +.L1354: + ldrh w1, [x19,1290] + ldr w0, [x20] + add w1, w1, 1 + strh w1, [x19,1290] + cmn w0, #1 + bne .L1355 + ldr w1, [x20,4] + mov x0, x24 + add w26, w26, 1 + bl printk + uxth w26, w26 + cmp w26, 3 + bls .L1353 + adrp x0, .LC33 + ldr w1, [x20,4] + add x0, x0, :lo12:.LC33 + mov w2, w26 + bl printk + mov w0, 1 + str w0, [x19,1392] + b .L1350 +.L1355: + cbnz w23, .L1350 + mov w23, 1 + b .L1353 +.L1350: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size FtlBbmTblFlush, .-FtlBbmTblFlush + .align 2 + .global FtlLoadFactoryBbt + .type FtlLoadFactoryBbt, %function +FtlLoadFactoryBbt: + stp x29, x30, [sp, -80]! + adrp x1, .LANCHOR2 + add x1, x1, :lo12:.LANCHOR2 + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + add x21, x1, 1400 + add x23, x1, 1288 + ldr x0, [x1,1040] + mov w22, 0 + ldr x24, [x1,1104] + mov x19, x1 + str x0, [x21,8] + mov w25, -1 + str x24, [x21,16] + mov w26, 61664 +.L1361: + ldrh w0, [x19,762] + cmp w22, w0 + bcs .L1370 + ldrh w20, [x19,806] + strh w25, [x23,12] +.L1363: + sub w20, w20, #1 + ldrh w0, [x19,806] + uxth w20, w20 + sub w1, w0, #16 + cmp w20, w1 + ble .L1364 + madd w0, w22, w0, w20 + mov w1, 1 + lsl w0, w0, 10 + mov w2, w1 + str w0, [x21,4] + mov x0, x21 + bl FlashReadPages + ldr w0, [x21] + cmn w0, #1 + beq .L1363 + ldrh w0, [x24] + cmp w0, w26 + bne .L1363 + strh w20, [x23,12] +.L1364: + add w22, w22, 1 + add x23, x23, 2 + b .L1361 +.L1370: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size FtlLoadFactoryBbt, .-FtlLoadFactoryBbt + .align 2 + .global FtlBbtMemInit + .type FtlBbtMemInit, %function +FtlBbtMemInit: + adrp x0, .LANCHOR2 + mov w1, -1 + stp x29, x30, [sp, -16]! + add x0, x0, :lo12:.LANCHOR2 + mov w2, 16 + add x29, sp, 0 + add x0, x0, 1300 + strh w1, [x0,-12] + mov w1, 255 + strh wzr, [x0,-6] + bl ftl_memset + ldp x29, x30, [sp], 16 + ret + .size FtlBbtMemInit, .-FtlBbtMemInit + .align 2 + .global FtlBbtCalcTotleCnt + .type FtlBbtCalcTotleCnt, %function +FtlBbtCalcTotleCnt: + stp x29, x30, [sp, -48]! + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + mov w19, 0 + mov w20, w19 + ldrh w1, [x0,806] + ldrh w21, [x0,762] + mul w21, w1, w21 +.L1373: + cmp w20, w21 + bge .L1379 + mov w0, w20 + bl FtlBbmIsBadBlock + cbz w0, .L1374 + add w19, w19, 1 + uxth w19, w19 +.L1374: + add w20, w20, 1 + uxth w20, w20 + b .L1373 +.L1379: + mov w0, w19 + ldr x21, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt + .align 2 + .global FtlMakeBbt + .type FtlMakeBbt, %function +FtlMakeBbt: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x20, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov x21, x19 + ldr w22, [x20,1392] + cbnz w22, .L1381 + add x24, x20, 1288 + mov x19, x20 + mov x25, x24 + add x20, x20, 1400 + mov w28, -3872 + bl FtlBbtMemInit + bl FtlLoadFactoryBbt +.L1382: + ldrh w0, [x19,762] + cmp w22, w0 + bcs .L1400 + ldrh w4, [x25,12] + mov w1, 65535 + ldr x0, [x19,1040] + ldr x26, [x19,1104] + cmp w4, w1 + str x0, [x20,8] + str x26, [x20,16] + beq .L1383 + ldrh w0, [x19,806] + mov w1, 1 + mov w2, w1 + madd w27, w22, w0, w4 + lsl w0, w27, 10 + str w0, [x20,4] + mov x0, x20 + bl FlashReadPages + ldrh w2, [x19,806] + ldr x0, [x24,32] + add w2, w2, 7 + ldr x1, [x20,8] + lsr w2, w2, 3 + bl ftl_memcpy + b .L1384 +.L1383: + mov w1, w22 + bl FlashGetBadBlockList + ldr x0, [x20,8] + ldr x1, [x24,32] + bl FtlBbt2Bitmap + ldrh w23, [x19,806] +.L1386: + sub w23, w23, #1 + uxth w23, w23 +.L1385: + ldrh w0, [x19,806] + madd w0, w22, w0, w23 + bl FtlBbmIsBadBlock + cmp w0, 1 + beq .L1386 + ldr x0, [x19,1104] + mov w1, 0 + mov w2, 16 + strh w23, [x25,12] + bl ftl_memset + strh w28, [x26] + str wzr, [x26,4] + ldrh w2, [x19,1280] + ldrh w0, [x25,12] + strh w0, [x26,2] + lsl w2, w2, 2 + ldrh w0, [x19,806] + ldrh w4, [x25,12] + ldr x1, [x24,32] + madd w27, w22, w0, w4 + lsl w0, w27, 10 + str w0, [x20,4] + ldr x0, [x20,8] + bl ftl_memcpy + mov w1, 1 + mov x0, x20 + mov w2, w1 + bl FlashEraseBlocks + mov w1, 1 + mov x0, x20 + mov w2, w1 + mov w3, w1 + bl FlashProgPages + ldr w0, [x20] + cmn w0, #1 + bne .L1384 + mov w0, w27 + bl FtlBbmMapBadBlock + b .L1385 +.L1384: + mov w0, w27 + add w22, w22, 1 + add x24, x24, 8 + add x25, x25, 2 + bl FtlBbmMapBadBlock + b .L1382 +.L1400: + mov w19, 0 +.L1389: + add x20, x21, :lo12:.LANCHOR2 + ldrh w0, [x20,824] + cmp w0, w19 + bls .L1401 + mov w0, w19 + add w19, w19, 1 + bl FtlBbmMapBadBlock + uxth w19, w19 + b .L1389 +.L1401: + ldrh w19, [x20,1300] + mov w23, 65535 + sub w19, w19, #1 + uxth w19, w19 +.L1391: + add x22, x20, 1288 + ldrh w0, [x22,12] + sub w0, w0, #48 + cmp w19, w0 + ble .L1395 + mov w0, w19 + bl FtlBbmIsBadBlock + cmp w0, 1 + beq .L1392 + mov w0, w19 + bl FlashTestBlk + cbz w0, .L1393 + mov w0, w19 + bl FtlBbmMapBadBlock + b .L1392 +.L1393: + ldrh w0, [x20,1288] + cmp w0, w23 + bne .L1394 + strh w19, [x20,1288] + b .L1392 +.L1394: + strh w19, [x22,4] + b .L1395 +.L1392: + sub w19, w19, #1 + uxth w19, w19 + b .L1391 +.L1395: + add x19, x21, :lo12:.LANCHOR2 + mov w2, 2 + ldr x1, [x19,1008] + ldrh w0, [x19,1288] + str wzr, [x19,1296] + lsl w0, w0, 10 + str w0, [x1,4] + strh wzr, [x19,1290] + ldr x0, [x19,1008] + ldrh w1, [x19,1292] + lsl w1, w1, 10 + str w1, [x0,60] + mov w1, 1 + bl FlashEraseBlocks + ldrh w0, [x19,1288] + bl FtlBbmMapBadBlock + ldrh w0, [x19,1292] + bl FtlBbmMapBadBlock + bl FtlBbmTblFlush + strh wzr, [x19,1290] + ldr w0, [x19,1296] + ldrh w1, [x19,1292] + add w0, w0, 1 + str w0, [x19,1296] + ldrh w0, [x19,1288] + strh w0, [x19,1292] + strh w1, [x19,1288] + bl FtlBbmTblFlush +.L1381: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size FtlMakeBbt, .-FtlMakeBbt + .align 2 + .global V2P_block + .type V2P_block, %function +V2P_block: + adrp x3, .LANCHOR2 + uxth w0, w0 + add x3, x3, :lo12:.LANCHOR2 + uxth w1, w1 + ldrh w4, [x3,764] + udiv w2, w0, w4 + msub w0, w2, w4, w0 + madd w0, w1, w4, w0 + ldrh w1, [x3,806] + madd w0, w2, w1, w0 + ret + .size V2P_block, .-V2P_block + .align 2 + .global P2V_plane + .type P2V_plane, %function +P2V_plane: + adrp x2, .LANCHOR2 + uxth w0, w0 + add x2, x2, :lo12:.LANCHOR2 + ldrh w1, [x2,764] + ldrh w3, [x2,806] + udiv w2, w0, w1 + udiv w3, w0, w3 + msub w0, w2, w1, w0 + madd w0, w1, w3, w0 + ret + .size P2V_plane, .-P2V_plane + .align 2 + .global P2V_block_in_plane + .type P2V_block_in_plane, %function +P2V_block_in_plane: + adrp x2, .LANCHOR2 + uxth w0, w0 + add x2, x2, :lo12:.LANCHOR2 + ldrh w3, [x2,806] + udiv w1, w0, w3 + msub w0, w1, w3, w0 + ldrh w1, [x2,764] + uxth w0, w0 + udiv w0, w0, w1 + ret + .size P2V_block_in_plane, .-P2V_block_in_plane + .align 2 + .global ftl_cmp_data_ver + .type ftl_cmp_data_ver, %function +ftl_cmp_data_ver: + cmp w0, w1 + mov w2, -2147483648 + bls .L1406 + sub w1, w0, w1 + cmp w1, w2 + cset w0, ls + b .L1407 +.L1406: + sub w1, w1, w0 + cmp w1, w2 + cset w0, hi +.L1407: + ret + .size ftl_cmp_data_ver, .-ftl_cmp_data_ver + .align 2 + .global FtlGetLastWrittenPage + .type FtlGetLastWrittenPage, %function +FtlGetLastWrittenPage: + stp x29, x30, [sp, -208]! + cmp w1, 1 + adrp x3, .LANCHOR2 + add x29, sp, 0 + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + str x25, [sp,64] + mov w23, w1 + add x3, x3, :lo12:.LANCHOR2 + bne .L1409 + ldrh w19, [x3,812] + b .L1410 +.L1409: + ldrh w19, [x3,810] +.L1410: + sub w19, w19, #1 + lsl w21, w0, 10 + mov w1, 1 + mov w2, w23 + sxth w19, w19 + str xzr, [x29,96] + orr w0, w19, w21 + str w0, [x29,92] + add x0, x29, 88 + add x24, x29, 144 + str x24, [x29,104] + bl FlashReadPages + ldr w0, [x29,144] + cmn w0, #1 + bne .L1411 + mov w22, 0 + mov w25, 2 +.L1412: + cmp w22, w19 + bgt .L1411 + add w3, w22, w19 + mov w1, 1 + mov w2, w23 + sdiv w20, w3, w25 + sxth w0, w20 + orr w0, w0, w21 + str w0, [x29,92] + add x0, x29, 88 + bl FlashReadPages + ldr w0, [x24] + cmn w0, #1 + bne .L1413 + ldr w0, [x24,4] + cmn w0, #1 + bne .L1413 + ldr w0, [x29,88] + cmn w0, #1 + beq .L1413 + sub w19, w20, #1 + sxth w19, w19 + b .L1412 +.L1413: + add w20, w20, 1 + sxth w22, w20 + b .L1412 +.L1411: + mov w0, w19 + ldr x25, [sp,64] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 208 + ret + .size FtlGetLastWrittenPage, .-FtlGetLastWrittenPage + .align 2 + .global FtlLoadBbt + .type FtlLoadBbt, %function +FtlLoadBbt: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + stp x23, x24, [sp,48] + add x23, x19, :lo12:.LANCHOR2 + mov w24, 61649 + stp x21, x22, [sp,32] + add x21, x23, 1400 + ldr x22, [x23,1104] + str xzr, [x21,8] + str x22, [x21,16] + bl FtlBbtMemInit + ldrh w20, [x23,806] + sub w20, w20, #1 + uxth w20, w20 +.L1420: + ldrh w0, [x23,806] + sub w0, w0, #48 + cmp w20, w0 + ble .L1423 + lsl w0, w20, 10 + mov w1, 1 + str w0, [x21,4] + mov w2, w1 + mov x0, x21 + bl FlashReadPages + ldr w0, [x21] + cmn w0, #1 + bne .L1421 + ldr w0, [x21,4] + mov w1, 1 + mov w2, w1 + add w0, w0, 1 + str w0, [x21,4] + mov x0, x21 + bl FlashReadPages +.L1421: + ldr w0, [x21] + cmn w0, #1 + beq .L1422 + ldrh w0, [x22] + cmp w0, w24 + bne .L1422 + ldr w1, [x22,4] + str w1, [x23,1296] + strh w20, [x23,1288] + ldrh w1, [x22,8] + strh w1, [x23,1292] + b .L1423 +.L1422: + sub w20, w20, #1 + uxth w20, w20 + b .L1420 +.L1423: + add x21, x19, :lo12:.LANCHOR2 + mov w2, 65535 + mov w0, -1 + ldrh w1, [x21,1288] + cmp w1, w2 + beq .L1425 + ldrh w1, [x21,1292] + cmp w1, w2 + beq .L1427 + add x0, x21, 1400 + lsl w1, w1, 10 + str w1, [x0,4] + mov w1, 1 + mov w2, w1 + bl FlashReadPages + ldr w0, [x21,1400] + cmn w0, #1 + beq .L1427 + ldrh w1, [x22] + mov w0, 61649 + cmp w1, w0 + bne .L1427 + ldr w0, [x22,4] + ldr w1, [x21,1296] + cmp w0, w1 + bls .L1427 + str w0, [x21,1296] + ldrh w1, [x21,1292] + ldrh w0, [x22,8] + strh w1, [x21,1288] + strh w0, [x21,1292] +.L1427: + add x20, x19, :lo12:.LANCHOR2 + mov w1, 1 + add x23, x20, 1400 + mov w24, 61649 + ldrh w0, [x20,1288] + bl FtlGetLastWrittenPage + sxth w21, w0 + add w0, w0, 1 + strh w0, [x20,1290] +.L1429: + tbnz w21, #31, .L1434 + ldrh w0, [x20,1288] + mov w1, 1 + mov w2, w1 + orr w0, w21, w0, lsl 10 + str w0, [x23,4] + ldr x0, [x20,1040] + str x0, [x23,8] + mov x0, x23 + bl FlashReadPages + ldr w0, [x23] + cmn w0, #1 + beq .L1430 + ldrh w0, [x22] + cmp w0, w24 + bne .L1430 +.L1434: + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x22,10] + mov w2, 65535 + strh w0, [x1,1294] + ldrh w0, [x22,12] + cmp w0, w2 + bne .L1431 + b .L1432 +.L1430: + sub w21, w21, #1 + sxth w21, w21 + b .L1429 +.L1431: + ldr w2, [x1,736] + cmp w0, w2 + beq .L1432 + ldrh w1, [x1,750] + lsr w1, w1, 2 + cmp w0, w1 + bcs .L1432 + cmp w2, w1 + bcs .L1432 + bl FtlSysBlkNumInit +.L1432: + add x19, x19, :lo12:.LANCHOR2 + mov x20, 0 + add x21, x19, 1288 +.L1435: + ldrh w0, [x19,762] + mov w1, w20 + add x20, x20, 1 + cmp w1, w0 + bcs .L1453 + ldrh w2, [x19,1280] + add x0, x21, x20, lsl 3 + ldr x3, [x19,1408] + mul w1, w1, w2 + ldr x0, [x0,24] + lsl w2, w2, 2 + add x1, x3, x1, lsl 2 + bl ftl_memcpy + b .L1435 +.L1453: + mov w0, 0 +.L1425: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size FtlLoadBbt, .-FtlLoadBbt + .align 2 + .global FtlFreeSysBlkQueueInit + .type FtlFreeSysBlkQueueInit, %function +FtlFreeSysBlkQueueInit: + adrp x1, .LANCHOR2 + mov w2, 2048 + stp x29, x30, [sp, -16]! + add x1, x1, :lo12:.LANCHOR2 + add x29, sp, 0 + strh w0, [x1,1456] + add x0, x1, 1464 + strh wzr, [x1,1458] + strh wzr, [x1,1460] + strh wzr, [x1,1462] + mov w1, 0 + bl ftl_memset + mov w0, 0 + ldp x29, x30, [sp], 16 + ret + .size FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit + .align 2 + .global FtlFreeSysBlkQueueEmpty + .type FtlFreeSysBlkQueueEmpty, %function +FtlFreeSysBlkQueueEmpty: + adrp x0, .LANCHOR2+1462 + ldrh w0, [x0,#:lo12:.LANCHOR2+1462] + cmp w0, wzr + cset w0, eq + ret + .size FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty + .align 2 + .global FtlFreeSysBlkQueueFull + .type FtlFreeSysBlkQueueFull, %function +FtlFreeSysBlkQueueFull: + adrp x0, .LANCHOR2+1462 + ldrh w0, [x0,#:lo12:.LANCHOR2+1462] + cmp w0, 1024 + cset w0, eq + ret + .size FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull + .align 2 + .global FtlFreeSysBlkQueueIn + .type FtlFreeSysBlkQueueIn, %function +FtlFreeSysBlkQueueIn: + stp x29, x30, [sp, -48]! + adrp x2, .LANCHOR2 + uxth w1, w1 + add x29, sp, 0 + stp x19, x20, [sp,16] + add x20, x2, :lo12:.LANCHOR2 + mov x19, x2 + stp x21, x22, [sp,32] + uxth w22, w0 + ldrh w0, [x20,1462] + cmp w0, 1024 + beq .L1457 + cbz w1, .L1459 + ldr w0, [x20,1392] + cbnz w0, .L1459 + mov w0, w22 + bl P2V_block_in_plane + uxth w21, w0 + ldr x0, [x20,1008] + lsl w1, w22, 10 + str w1, [x0,4] + mov w1, 1 + mov w2, w1 + ldr x0, [x20,1008] + bl FlashEraseBlocks + ubfiz x1, x21, 1, 16 + ldr x2, [x20,1160] + ldrh w0, [x2,x1] + add w0, w0, 1 + strh w0, [x2,x1] + ldr w0, [x20,904] + add w0, w0, 1 + str w0, [x20,904] +.L1459: + add x1, x19, :lo12:.LANCHOR2 + add x1, x1, 1456 + ldrh w0, [x1,6] + ldrh w2, [x1,4] + add w0, w0, 1 + strh w0, [x1,6] + add x0, x1, x2, sxtw 1 + add w2, w2, 1 + and w2, w2, 1023 + strh w22, [x0,8] + strh w2, [x1,4] +.L1457: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn + .align 2 + .global FtlLowFormatEraseBlock + .type FtlLowFormatEraseBlock, %function +FtlLowFormatEraseBlock: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR2 + add x2, x21, :lo12:.LANCHOR2 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + stp x27, x28, [sp,80] + uxth w25, w0 + uxtb w24, w1 + ldr w3, [x2,1392] + mov w0, 0 + cbnz w3, .L1467 + adrp x23, .LANCHOR0 + str w25, [x2,936] + add x0, x23, :lo12:.LANCHOR0 + str x23, [x29,112] + mov w27, w3 + mov w20, w3 + mov w22, w3 + mov x23, x2 + ldrb w0, [x0,136] + mov w26, 56 + str w0, [x29,124] + mov w28, 4 +.L1468: + ldrh w0, [x23,740] + cmp w0, w27 + bls .L1512 + umull x0, w27, w26 + ldr x1, [x23,1008] + str wzr, [x1,x0] + add x0, x23, 768 + mov w1, w25 + ldrb w0, [x0,w27,sxtw] + bl V2P_block + uxth w19, w0 + mov w1, w19 + cbz w24, .L1469 + str x1, [x29,104] + bl IsBlkInVendorPart + ldr x1, [x29,104] + cbnz w0, .L1470 +.L1469: + mov w0, w1 + bl FtlBbmIsBadBlock + cbnz w0, .L1471 + umull x0, w20, w26 + ldr x1, [x23,1008] + lsl w19, w19, 10 + add x1, x1, x0 + str w19, [x1,4] + ldr x1, [x23,1008] + ldr x4, [x23,1112] + add x1, x1, x0 + ldrh w0, [x23,822] + mul w0, w20, w0 + add w20, w20, 1 + str xzr, [x1,8] + sdiv w0, w0, w28 + uxth w20, w20 + add x0, x4, x0, sxtw 2 + str x0, [x1,16] + b .L1470 +.L1471: + add w22, w22, 1 + uxth w22, w22 +.L1470: + add w3, w27, 1 + uxth w27, w3 + b .L1468 +.L1512: + mov w19, w22 + mov w0, w22 + cbz w20, .L1467 + ldr w0, [x29,124] + mov w2, w20 + mov x26, 0 + mov x27, 56 + cmp w0, wzr + ldr x0, [x23,1008] + cset w22, ne + mov w1, w22 + bl FlashEraseBlocks +.L1474: + cmp w20, w26, uxth + bls .L1513 + add x1, x21, :lo12:.LANCHOR2 + mul x0, x26, x27 + ldr x1, [x1,1008] + add x2, x1, x0 + ldr w0, [x1,x0] + cmn w0, #1 + bne .L1475 + ldr w0, [x2,4] + add w19, w19, 1 + lsr w0, w0, 10 + uxth w19, w19 + bl FtlBbmMapBadBlock +.L1475: + add x26, x26, 1 + b .L1474 +.L1513: + cbnz w24, .L1477 + mov w0, 1 + uxth w22, w22 + mov w27, 6 + str w0, [x29,124] + b .L1478 +.L1477: + add x0, x21, :lo12:.LANCHOR2 + ldrh w0, [x0,812] + str w0, [x29,124] + ldr x0, [x29,112] + add x23, x0, :lo12:.LANCHOR0 + ldrb w0, [x23,136] + cbnz w0, .L1494 + ldr w0, [x29,124] + mov w22, 1 + lsr w27, w0, 2 + b .L1478 +.L1494: + mov w22, 1 + mov w27, w22 +.L1478: + mov w23, 0 + add x28, x21, :lo12:.LANCHOR2 +.L1487: + mov w26, 0 + mov w20, w26 +.L1479: + ldrh w0, [x28,740] + cmp w0, w26 + bls .L1514 + mov w0, 56 + ldr x1, [x28,1008] + umull x0, w26, w0 + str wzr, [x1,x0] + add x0, x28, 768 + mov w1, w25 + ldrb w0, [x0,w26,sxtw] + bl V2P_block + uxth w2, w0 + str w2, [x29,112] + mov w1, w2 + cbz w24, .L1480 + str x1, [x29,104] + bl IsBlkInVendorPart + ldr x1, [x29,104] + cbnz w0, .L1481 +.L1480: + mov w0, w1 + bl FtlBbmIsBadBlock + cbnz w0, .L1481 + mov w0, 56 + ldr x1, [x28,1008] + ldr w2, [x29,112] + umull x0, w20, w0 + add x1, x1, x0 + add w2, w23, w2, lsl 10 + str w2, [x1,4] + mov w2, 4 + ldr x1, [x28,1008] + add x1, x1, x0 + ldr x0, [x28,1080] + str x0, [x1,8] + ldrh w0, [x28,822] + mul w0, w20, w0 + add w20, w20, 1 + sdiv w0, w0, w2 + uxth w20, w20 + ldr x2, [x28,1088] + add x0, x2, x0, sxtw 2 + str x0, [x1,16] +.L1481: + add w3, w26, 1 + uxth w26, w3 + b .L1479 +.L1514: + cbz w20, .L1491 + ldr x0, [x28,1008] + mov w1, w20 + mov w2, w22 + mov w3, 1 + bl FlashProgPages + mov x1, 0 +.L1484: + cmp w20, w1, uxth + bls .L1515 + mov x0, 56 + ldr x2, [x28,1008] + mul x0, x1, x0 + add x3, x2, x0 + ldr w0, [x2,x0] + cbz w0, .L1485 + ldr w0, [x3,4] + add w19, w19, 1 + str x1, [x29,112] + lsr w0, w0, 10 + uxth w19, w19 + bl FtlBbmMapBadBlock + ldr x1, [x29,112] +.L1485: + add x1, x1, 1 + b .L1484 +.L1515: + add w23, w23, w27 + ldr w0, [x29,124] + uxth w23, w23 + cmp w23, w0 + bcc .L1487 + mov x23, 0 + mov x26, 56 +.L1488: + cmp w20, w23, uxth + bls .L1516 + cbz w24, .L1489 + add x1, x21, :lo12:.LANCHOR2 + mul x0, x23, x26 + ldr x1, [x1,1008] + add x2, x1, x0 + ldr w0, [x1,x0] + cbnz w0, .L1489 + ldr w0, [x2,4] + mov w1, 1 + lsr w0, w0, 10 + bl FtlFreeSysBlkQueueIn +.L1489: + add x23, x23, 1 + b .L1488 +.L1516: + cmp w25, 63 + bls .L1495 + cbz w24, .L1491 +.L1495: + add x21, x21, :lo12:.LANCHOR2 + mov w1, w22 + mov w2, w20 + ldr x0, [x21,1008] + bl FlashEraseBlocks +.L1491: + mov w0, w19 +.L1467: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock + .align 2 + .global FtlFreeSysBLkSort + .type FtlFreeSysBLkSort, %function +FtlFreeSysBLkSort: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR2 + str x21, [sp,32] + add x20, x20, :lo12:.LANCHOR2 + mov w19, 0 + add x21, x20, 1456 +.L1518: + ldrh w0, [x21,6] + cmp w0, w19 + bls .L1526 + ldrh w0, [x21,2] + add w0, w0, w19 + add x0, x21, x0, sxtw 1 + ldrh w0, [x0,8] + bl P2V_block_in_plane + ubfiz x0, x0, 1, 16 + ldr x3, [x20,1160] + ubfiz x1, x19, 2, 16 + ldr x2, [x20,1040] + add w19, w19, 1 + ldrh w0, [x3,x0] + uxth w19, w19 + str w0, [x2,x1] + b .L1518 +.L1526: + adrp x3, .LANCHOR2 + mov w0, 0 + add x3, x3, :lo12:.LANCHOR2 +.L1520: + ldrh w6, [x3,1462] + sub w1, w6, #1 + cmp w0, w1 + bge .L1527 + add w5, w0, 1 + ldr x4, [x3,1040] + mov w1, w0 + uxth w5, w5 + mov w2, w5 +.L1521: + cmp w2, w6 + bcs .L1528 + ubfiz x7, x2, 2, 16 + ldr w8, [x4,w1,uxtw 2] + ldr w7, [x4,x7] + cmp w8, w7 + csel w1, w1, w2, ls + add w2, w2, 1 + uxth w2, w2 + b .L1521 +.L1528: + cmp w0, w1 + beq .L1524 + ubfiz x2, x0, 2, 16 + ubfiz x6, x1, 2, 32 + ldr w8, [x4,x2] + ldr w7, [x4,x6] + str w8, [x4,x6] + ldr x4, [x3,1040] + str w7, [x4,x2] + add x2, x3, 1456 + ldrh w4, [x3,1458] + add w1, w4, w1 + add w0, w4, w0 + add x1, x2, x1, sxtw 1 + add x0, x2, x0, sxtw 1 + ldrh w2, [x0,8] + ldrh w6, [x1,8] + strh w2, [x1,8] + strh w6, [x0,8] +.L1524: + mov w0, w5 + b .L1520 +.L1527: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FtlFreeSysBLkSort, .-FtlFreeSysBLkSort + .align 2 + .global remove_from_free_sys_Queue + .type remove_from_free_sys_Queue, %function +remove_from_free_sys_Queue: + stp x29, x30, [sp, -32]! + uxth w1, w0 + mov w0, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR2 + add x20, x20, :lo12:.LANCHOR2 + add x20, x20, 1456 + ldrh w3, [x20,6] + cbz w3, .L1530 + ldrh w4, [x20,2] + mov w19, w0 +.L1531: + cmp w19, w3 + bcs .L1536 + add w2, w19, w4 + ubfiz x2, x2, 1, 10 + add x2, x20, x2 + ldrh w0, [x2,8] + cmp w0, w1 + bne .L1532 + adrp x0, .LC34 + add x0, x0, :lo12:.LC34 + bl printk + ldrh w0, [x20,2] + add x1, x20, x0, sxtw 1 + ldrh w1, [x1,8] + add w19, w19, w0 + add w0, w0, 1 + and w0, w0, 1023 + ubfiz x19, x19, 1, 10 + add x19, x20, x19 + strh w0, [x20,2] + ldrh w0, [x20,6] + sub w0, w0, #1 + strh w1, [x19,8] + strh w0, [x20,6] + mov w0, 1 + b .L1530 +.L1532: + add w19, w19, 1 + b .L1531 +.L1536: + mov w0, 0 +.L1530: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size remove_from_free_sys_Queue, .-remove_from_free_sys_Queue + .align 2 + .global FtlFreeSysBlkQueueOut + .type FtlFreeSysBlkQueueOut, %function +FtlFreeSysBlkQueueOut: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + mov w20, 65535 + stp x21, x22, [sp,32] + add x22, x19, :lo12:.LANCHOR2 + add x2, x22, 1456 + ldrh w0, [x22,1462] + cbz w0, .L1538 + ldrh w1, [x22,1458] + add x3, x2, x1, sxtw 1 + sub w0, w0, #1 + strh w0, [x22,1462] + add w1, w1, 1 + ldrh w20, [x3,8] + and w1, w1, 1023 + strh w1, [x22,1458] + ldr w1, [x22,1392] + str x1, [x29,56] + cbnz w1, .L1538 + mov w0, w20 + bl P2V_block_in_plane + uxth w21, w0 + ldr x0, [x22,1008] + lsl w2, w20, 10 + ldr x1, [x29,56] + str w2, [x0,4] + adrp x0, .LANCHOR0+136 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + cbz w0, .L1539 + ldr x0, [x22,1008] + mov w2, 1 + bl FlashEraseBlocks +.L1539: + add x19, x19, :lo12:.LANCHOR2 + mov w1, 1 + mov w2, w1 + ldr x0, [x19,1008] + bl FlashEraseBlocks + ubfiz x0, x21, 1, 16 + ldr x2, [x19,1160] + ldrh w1, [x2,x0] + add w1, w1, 1 + strh w1, [x2,x0] + ldr w0, [x19,904] + add w0, w0, 1 + str w0, [x19,904] +.L1538: + mov w0, w20 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut + .align 2 + .global insert_data_list + .type insert_data_list, %function +insert_data_list: + adrp x2, .LANCHOR2 + uxth w0, w0 + add x3, x2, :lo12:.LANCHOR2 + mov x4, x2 + ldrh w1, [x3,748] + cmp w1, w0 + bls .L1547 + mov w7, 6 + ldr x11, [x3,1272] + mov w1, -1 + umull x10, w0, w7 + add x5, x11, x10 + strh w1, [x5,2] + strh w1, [x11,x10] + ldr x1, [x3,3512] + cbnz x1, .L1548 + str x5, [x3,3512] + b .L1547 +.L1548: + ubfiz x8, x0, 1, 16 + ldr x13, [x3,1176] + ldrh w2, [x5,4] + mov x9, -6148914691236517206 + ldr x12, [x3,1272] + mov w18, 65535 + ldrh w6, [x13,x8] + cmp w2, wzr + ldr x14, [x3,1160] + ldrh w17, [x3,748] + mov w3, 0 + mul w6, w6, w2 + sub x2, x1, x12 + asr x2, x2, 1 + csinv w6, w6, wzr, ne + madd x2, x9, x2, x2 + add x9, x14, x8 + mov w8, w7 + uxth w2, w2 +.L1556: + add w3, w3, 1 + cmp w0, w2 + uxth w3, w3 + beq .L1547 + cmp w3, w17 + bhi .L1547 + ubfiz x15, x2, 1, 16 + ldrh w16, [x1,4] + cmp w16, wzr + ldrh w7, [x13,x15] + mul w7, w7, w16 + csinv w7, w7, wzr, ne + cmp w7, w6 + bne .L1552 + ldrh w15, [x14,x15] + ldrh w7, [x9] + cmp w15, w7 + bcc .L1554 + b .L1553 +.L1552: + bhi .L1553 +.L1554: + ldrh w7, [x1] + cmp w7, w18 + bne .L1555 + strh w2, [x5,2] + add x2, x4, :lo12:.LANCHOR2 + strh w0, [x1] + str x5, [x2,3520] + b .L1547 +.L1555: + umull x1, w7, w8 + mov w2, w7 + add x1, x12, x1 + b .L1556 +.L1553: + strh w2, [x11,x10] + ldrh w2, [x1,2] + strh w2, [x5,2] + add x2, x4, :lo12:.LANCHOR2 + ldr x3, [x2,3512] + cmp x1, x3 + bne .L1557 + strh w0, [x1,2] + str x5, [x2,3512] + b .L1547 +.L1557: + ldrh w3, [x1,2] + mov w4, 6 + ldr x2, [x2,1272] + umull x3, w3, w4 + strh w0, [x2,x3] + strh w0, [x1,2] +.L1547: + mov w0, 0 + ret + .size insert_data_list, .-insert_data_list + .align 2 + .global INSERT_DATA_LIST + .type INSERT_DATA_LIST, %function +INSERT_DATA_LIST: + stp x29, x30, [sp, -16]! + add x29, sp, 0 + bl insert_data_list + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + ldrh w1, [x0,3528] + add w1, w1, 1 + strh w1, [x0,3528] + ldp x29, x30, [sp], 16 + ret + .size INSERT_DATA_LIST, .-INSERT_DATA_LIST + .align 2 + .global insert_free_list + .type insert_free_list, %function +insert_free_list: + uxth w0, w0 + mov w7, 65535 + cmp w0, w7 + beq .L1562 + adrp x2, .LANCHOR2 + mov w6, 6 + add x5, x2, :lo12:.LANCHOR2 + mov w1, -1 + umull x8, w0, w6 + mov x3, x2 + ldr x9, [x5,1272] + add x4, x9, x8 + strh w1, [x4,2] + strh w1, [x9,x8] + ldr x1, [x5,3536] + cbnz x1, .L1563 + str x4, [x5,3536] + b .L1562 +.L1563: + ldr x11, [x5,1160] + ubfiz x2, x0, 1, 16 + ldr x10, [x5,1272] + mov x5, -6148914691236517206 + ldrh w12, [x11,x2] + sub x2, x1, x10 + asr x2, x2, 1 + madd x2, x5, x2, x2 + uxth w2, w2 +.L1566: + ubfiz x5, x2, 1, 16 + ldrh w5, [x11,x5] + cmp w5, w12 + bcs .L1564 + ldrh w5, [x1] + cmp w5, w7 + bne .L1565 + strh w2, [x4,2] + strh w0, [x1] + b .L1562 +.L1565: + umull x1, w5, w6 + mov w2, w5 + add x1, x10, x1 + b .L1566 +.L1564: + ldrh w5, [x1,2] + strh w5, [x4,2] + strh w2, [x9,x8] + add x2, x3, :lo12:.LANCHOR2 + ldr x3, [x2,3536] + cmp x1, x3 + bne .L1567 + strh w0, [x1,2] + str x4, [x2,3536] + b .L1562 +.L1567: + ldrh w3, [x1,2] + mov w4, 6 + ldr x2, [x2,1272] + umull x3, w3, w4 + strh w0, [x2,x3] + strh w0, [x1,2] +.L1562: + mov w0, 0 + ret + .size insert_free_list, .-insert_free_list + .align 2 + .global INSERT_FREE_LIST + .type INSERT_FREE_LIST, %function +INSERT_FREE_LIST: + stp x29, x30, [sp, -16]! + add x29, sp, 0 + bl insert_free_list + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + ldrh w1, [x0,3544] + add w1, w1, 1 + strh w1, [x0,3544] + ldp x29, x30, [sp], 16 + ret + .size INSERT_FREE_LIST, .-INSERT_FREE_LIST + .align 2 + .global List_remove_node + .type List_remove_node, %function +List_remove_node: + adrp x6, .LANCHOR2 + uxth w1, w1 + add x6, x6, :lo12:.LANCHOR2 + mov w5, 6 + ldr x3, [x0] + mov w7, 65535 + umull x1, w1, w5 + ldr x2, [x6,1272] + add x4, x2, x1 + cmp x4, x3 + bne .L1570 + ldrh w3, [x2,x1] + cmp w3, w7 + bne .L1571 + str xzr, [x0] + b .L1572 +.L1571: + umull x3, w3, w5 + add x3, x2, x3 + str x3, [x0] + mov w0, -1 + strh w0, [x3,2] + b .L1572 +.L1570: + ldrh w0, [x2,x1] + ldrh w3, [x4,2] + cmp w0, w7 + bne .L1573 + cmp w3, w0 + beq .L1572 + umull x3, w3, w5 + mov w0, -1 + strh w0, [x2,x3] + b .L1572 +.L1573: + umull x0, w0, w5 + add x0, x2, x0 + strh w3, [x0,2] + ldrh w3, [x4,2] + ldr x0, [x6,1272] + ldrh w7, [x2,x1] + umull x3, w3, w5 + strh w7, [x0,x3] +.L1572: + mov w0, -1 + strh w0, [x2,x1] + strh w0, [x4,2] + mov w0, 0 + ret + .size List_remove_node, .-List_remove_node + .align 2 + .global List_pop_index_node + .type List_pop_index_node, %function +List_pop_index_node: + stp x29, x30, [sp, -32]! + uxth w1, w1 + add x29, sp, 0 + str x19, [sp,16] + mov w19, 65535 + ldr x2, [x0] + cbz x2, .L1575 + adrp x3, .LANCHOR2+1272 + mov w5, w19 + mov w6, 6 + ldr x4, [x3,#:lo12:.LANCHOR2+1272] +.L1576: + cbnz w1, .L1577 +.L1579: + sub x2, x2, x4 + mov x1, -6148914691236517206 + asr x2, x2, 1 + madd x2, x1, x2, x2 + uxth w19, w2 + mov w1, w19 + bl List_remove_node + b .L1575 +.L1577: + ldrh w3, [x2] + cmp w3, w5 + beq .L1579 + umull x3, w3, w6 + sub w1, w1, #1 + add x2, x4, x3 + uxth w1, w1 + b .L1576 +.L1575: + mov w0, w19 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size List_pop_index_node, .-List_pop_index_node + .align 2 + .global List_get_gc_head_node + .type List_get_gc_head_node, %function +List_get_gc_head_node: + adrp x2, .LANCHOR2 + uxth w3, w0 + add x2, x2, :lo12:.LANCHOR2 + mov w0, 65535 + ldr x1, [x2,3512] + cbz x1, .L1587 + ldr x4, [x2,1272] + mov w5, 6 +.L1583: + cbz w3, .L1584 + ldrh w2, [x1] + cmp w2, w0 + beq .L1587 + umull x2, w2, w5 + sub w3, w3, #1 + add x1, x4, x2 + uxth w3, w3 + b .L1583 +.L1584: + sub x1, x1, x4 + mov x0, -6148914691236517206 + asr x1, x1, 1 + madd x1, x0, x1, x1 + uxth w0, w1 +.L1587: + ret + .size List_get_gc_head_node, .-List_get_gc_head_node + .align 2 + .global List_update_data_list + .type List_update_data_list, %function +List_update_data_list: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + uxth w20, w0 + add x0, x19, :lo12:.LANCHOR2 + ldrh w1, [x0,3552] + cmp w1, w20 + beq .L1589 + ldrh w1, [x0,3600] + cmp w1, w20 + beq .L1589 + ldrh w1, [x0,3648] + cmp w1, w20 + beq .L1589 + mov w3, 6 + ldr x4, [x0,1272] + ldr x2, [x0,3512] + umull x3, w20, w3 + add x1, x4, x3 + cmp x1, x2 + beq .L1589 + ldr x5, [x0,1176] + ubfiz x0, x20, 1, 16 + ldrh w2, [x1,4] + ldrh w1, [x1,2] + ldrh w0, [x5,x0] + mul w2, w0, w2 + mov w0, 65535 + cmp w2, wzr + csinv w2, w2, wzr, ne + cmp w1, w0 + bne .L1591 + ldrh w0, [x4,x3] + cmp w0, w1 + beq .L1589 +.L1591: + mov w0, 6 + mov x3, -6148914691236517206 + umull x1, w1, w0 + asr x0, x1, 1 + add x1, x4, x1 + madd x0, x3, x0, x0 + ldrh w1, [x1,4] + ldrh w0, [x5,x0,lsl 1] + mul w0, w0, w1 + cmp w0, wzr + csinv w0, w0, wzr, ne + cmp w2, w0 + bcs .L1589 + add x19, x19, :lo12:.LANCHOR2 + mov w1, w20 + add x0, x19, 3512 + bl List_remove_node + ldrh w0, [x19,3528] + sub w0, w0, #1 + strh w0, [x19,3528] + mov w0, w20 + bl INSERT_DATA_LIST +.L1589: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size List_update_data_list, .-List_update_data_list + .align 2 + .global ftl_free_no_use_map_blk + .type ftl_free_no_use_map_blk, %function +ftl_free_no_use_map_blk: + stp x29, x30, [sp, -96]! + mov w1, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + str x27, [sp,80] + mov x19, x0 + ldrh w2, [x0,10] + ldr x21, [x0,32] + ldr x25, [x0,16] + lsl w2, w2, 1 + ldr x20, [x0,40] + mov x0, x21 + bl ftl_memset + mov w0, 0 +.L1594: + ldrh w1, [x19,6] + cmp w1, w0 + bls .L1607 + ubfiz x1, x0, 2, 16 + ldr w2, [x20,x1] + mov w1, 0 + ubfx x2, x2, 10, 16 +.L1595: + ldrh w3, [x19,10] + cmp w3, w1 + bls .L1608 + ubfiz x3, x1, 1, 16 + ldrh w4, [x25,x3] + cmp w4, w2 + bne .L1596 + ldrh w4, [x21,x3] + add w4, w4, 1 + strh w4, [x21,x3] +.L1596: + add w1, w1, 1 + uxth w1, w1 + b .L1595 +.L1608: + add w0, w0, 1 + uxth w0, w0 + b .L1594 +.L1607: + mov w24, 0 + ldrh w26, [x21] + mov w20, w24 + adrp x27, .LANCHOR2 +.L1599: + ldrh w0, [x19,10] + cmp w0, w20 + bls .L1609 + ldrh w0, [x19] + uxtw x22, w20 + cmp w0, w20 + bne .L1600 + add x0, x27, :lo12:.LANCHOR2 + ldrh w1, [x19,2] + ldrh w0, [x0,812] + cmp w1, w0 + bcs .L1600 + strh w0, [x21,x22,lsl 1] +.L1600: + lsl x22, x22, 1 + ldrh w23, [x21,x22] + cmp w26, w23 + bls .L1601 + mov w24, w20 + mov w26, w23 +.L1601: + cbnz w23, .L1602 + ldrh w0, [x25,x22] + cbz w0, .L1602 + mov w1, 1 + bl FtlFreeSysBlkQueueIn + strh w23, [x25,x22] + ldrh w0, [x19,8] + sub w0, w0, #1 + strh w0, [x19,8] +.L1602: + add w20, w20, 1 + uxth w20, w20 + b .L1599 +.L1609: + mov w0, w24 + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk + .align 2 + .global ftl_map_blk_alloc_new_blk + .type ftl_map_blk_alloc_new_blk, %function +ftl_map_blk_alloc_new_blk: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + mov w20, 0 + ldrh w2, [x0,10] + ldr x1, [x0,16] +.L1611: + cmp w20, w2 + beq .L1614 + mov x22, x1 + ldrh w21, [x1],2 + cbnz w21, .L1612 + mov x19, x0 + bl FtlFreeSysBlkQueueOut + uxth w1, w0 + strh w0, [x22] + cbz w1, .L1614 + ldr w0, [x19,48] + strh w21, [x19,2] + add w0, w0, 1 + str w0, [x19,48] + ldrh w0, [x19,8] + strh w20, [x19] + add w0, w0, 1 + strh w0, [x19,8] + b .L1614 +.L1612: + add w20, w20, 1 + uxth w20, w20 + b .L1611 +.L1614: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size ftl_map_blk_alloc_new_blk, .-ftl_map_blk_alloc_new_blk + .align 2 + .global FtlMapWritePage + .type FtlMapWritePage, %function +FtlMapWritePage: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR2 + mov x19, x0 + stp x21, x22, [sp,32] + add x22, x20, :lo12:.LANCHOR2 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + ldr w21, [x22,1392] + mov w24, w1 + stp x27, x28, [sp,80] + mov x25, x2 + cbnz w21, .L1618 + adrp x23, .LC35 + mov w26, 65535 + add x28, x22, 1400 + add x23, x23, :lo12:.LC35 +.L1619: + ldr w1, [x22,888] + add w1, w1, 1 + str w1, [x22,888] + ldrh w1, [x22,812] + ldrh w0, [x19,2] + sub w1, w1, #1 + cmp w0, w1 + bge .L1620 + ldrh w0, [x19] + cmp w0, w26 + bne .L1621 +.L1620: + mov x0, x19 + bl Ftl_write_map_blk_to_last_page +.L1621: + ldrh w1, [x19] + mov w2, 16 + ldr x0, [x19,16] + ldrh w27, [x0,x1,lsl 1] + ldrh w1, [x19,2] + ldr x0, [x22,1104] + orr w1, w1, w27, lsl 10 + str w1, [x28,4] + mov w1, 0 + str x25, [x28,8] + str x0, [x28,16] + bl ftl_memset + ldr x1, [x28,16] + ldr w0, [x19,48] + str w0, [x1,4] + strh w24, [x1,8] + ldrh w0, [x19,4] + strh w0, [x1] + mov x0, x28 + strh w27, [x1,2] + mov w1, 1 + mov w3, w1 + mov w2, w1 + bl FlashProgPages + ldrh w3, [x19,2] + add w3, w3, 1 + uxth w3, w3 + strh w3, [x19,2] + ldr w1, [x28] + cmn w1, #1 + bne .L1622 + ldr w1, [x28,4] + mov x0, x23 + add w21, w21, 1 + bl printk + uxth w21, w21 + ldrh w0, [x19,2] + cmp w0, 2 + bhi .L1623 + ldrh w1, [x22,812] + sub w1, w1, #1 + strh w1, [x19,2] +.L1623: + cmp w21, 3 + bls .L1619 + add x20, x20, :lo12:.LANCHOR2 + adrp x0, .LC36 + add x0, x0, :lo12:.LC36 + mov w2, w21 + ldr w1, [x20,1404] + bl printk + mov w0, 1 + str w0, [x20,1392] + b .L1618 +.L1622: + cbz w1, .L1625 + strh w27, [x19,60] +.L1625: + cmp w3, 1 + beq .L1619 + cmp w1, 256 + beq .L1619 + add x20, x20, :lo12:.LANCHOR2 + ldr x0, [x19,40] + ldr w1, [x20,1404] + str w1, [x0,w24,uxtw 2] +.L1618: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size FtlMapWritePage, .-FtlMapWritePage + .align 2 + .global ftl_map_blk_gc + .type ftl_map_blk_gc, %function +ftl_map_blk_gc: + stp x29, x30, [sp, -112]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov x19, x0 + adrp x20, .LANCHOR2 + ldr x22, [x0,16] + ldr x23, [x0,40] + bl ftl_free_no_use_map_blk + ldrh w4, [x19,10] + ldrh w2, [x19,8] + sub w1, w4, #4 + cmp w2, w1 + bge .L1630 + ldrh w2, [x19,60] + mov w1, 65535 + cmp w2, w1 + beq .L1632 + add x1, x20, :lo12:.LANCHOR2 + ldrh w2, [x19,2] + ldrh w1, [x1,812] + cmp w2, w1 + bcc .L1632 +.L1630: + ldrh w1, [x19,60] + uxth w21, w0 + mov w0, 65535 + cmp w1, w0 + beq .L1634 + add x0, x20, :lo12:.LANCHOR2 + ldrh w3, [x19,2] + ldrh w0, [x0,812] + cmp w0, w3 + bhi .L1634 + mov x2, 0 +.L1635: + uxth w0, w2 + cmp w0, w4 + bcs .L1636 + add x2, x2, 1 + add x5, x22, x2, lsl 1 + ldrh w5, [x5,-2] + cmp w5, w1 + bne .L1635 + mov w21, w0 +.L1636: + ubfiz x2, x0, 1, 16 + adrp x0, .LC37 + add x0, x0, :lo12:.LC37 + ldrh w2, [x22,x2] + bl printk + mov w0, -1 + strh w0, [x19,60] +.L1634: + ubfiz x21, x21, 1, 16 + ldrh w25, [x22,x21] + cbz w25, .L1632 + ldr w0, [x19,52] + cbnz w0, .L1632 + mov w1, 1 + str w1, [x19,52] + strh w0, [x22,x21] + ldrh w0, [x19,8] + ldrh w1, [x19,2] + sub w0, w0, #1 + strh w0, [x19,8] + add x0, x20, :lo12:.LANCHOR2 + ldrh w0, [x0,812] + cmp w1, w0 + bcc .L1638 + mov x0, x19 + bl ftl_map_blk_alloc_new_blk +.L1638: + add x24, x20, :lo12:.LANCHOR2 + adrp x26, .LC38 + mov w21, 0 + add x22, x24, 1400 + mov w27, 1 + add x26, x26, :lo12:.LC38 +.L1639: + ldrh w0, [x19,6] + cmp w0, w21 + bls .L1649 + ubfiz x28, x21, 2, 16 + ldr w0, [x23,x28] + cmp w25, w0, lsr 10 + bne .L1640 + ldr x3, [x24,1104] + mov w1, 1 + ldr x0, [x24,1048] + mov w2, w1 + str x3, [x22,16] + str x0, [x22,8] + str x3, [x29,104] + ldr w0, [x23,x28] + str w0, [x22,4] + mov x0, x22 + bl FlashReadPages + ldr w0, [x22] + ldr x3, [x29,104] + cmn w0, #1 + bne .L1641 + str wzr, [x23,x28] + mov x0, x26 + ldr w1, [x22,4] + ldrh w2, [x3,8] + bl printk + str w27, [x24,1392] + b .L1640 +.L1641: + ldr x2, [x22,8] + mov x0, x19 + mov w1, w21 + bl FtlMapWritePage +.L1640: + add w21, w21, 1 + uxth w21, w21 + b .L1639 +.L1649: + mov w0, w25 + mov w1, 1 + bl FtlFreeSysBlkQueueIn + str wzr, [x19,52] +.L1632: + add x20, x20, :lo12:.LANCHOR2 + ldrh w1, [x19,2] + ldrh w0, [x20,812] + cmp w1, w0 + bcc .L1643 + mov x0, x19 + bl ftl_map_blk_alloc_new_blk +.L1643: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size ftl_map_blk_gc, .-ftl_map_blk_gc + .align 2 + .global Ftl_write_map_blk_to_last_page + .type Ftl_write_map_blk_to_last_page, %function +Ftl_write_map_blk_to_last_page: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR2 + str x23, [sp,48] + add x1, x21, :lo12:.LANCHOR2 + stp x19, x20, [sp,16] + ldr w20, [x1,1392] + ldr x22, [x0,16] + ldr x23, [x0,40] + cbnz w20, .L1651 + mov x19, x0 + ldrh w0, [x0] + mov w2, 65535 + cmp w0, w2 + bne .L1652 + ldrh w0, [x19,8] + add w0, w0, 1 + strh w0, [x19,8] + bl FtlFreeSysBlkQueueOut + strh w0, [x22] + strh w20, [x19,2] + ldr w0, [x19,48] + strh w20, [x19] + add w0, w0, 1 + str w0, [x19,48] + b .L1651 +.L1652: + ubfiz x0, x0, 1, 16 + ldr w2, [x19,48] + ldrh w22, [x22,x0] + ldrh w0, [x19,2] + orr w0, w0, w22, lsl 10 + str w0, [x1,1404] + ldr x0, [x1,1040] + str x0, [x1,1408] + ldr x0, [x1,1104] + str x0, [x1,1416] + str w2, [x0,4] + mov w2, -1291 + strh w2, [x0,8] + ldrh w2, [x19,4] + strh w2, [x0] + strh w22, [x0,2] + ldrh w2, [x1,812] + ldr x0, [x1,1040] + mov w1, 255 + lsl w2, w2, 3 + bl ftl_memset + mov w0, w20 +.L1653: + ldrh w1, [x19,6] + cmp w1, w0 + bls .L1656 + ubfiz x3, x0, 2, 32 + ldr w1, [x23,x3] + cmp w22, w1, lsr 10 + bne .L1654 + add x2, x21, :lo12:.LANCHOR2 + add w20, w20, 1 + uxth w20, w20 + ldr x4, [x2,1040] + ubfiz x1, x20, 3, 16 + str w0, [x4,x1] + ldr x2, [x2,1040] + ldr w3, [x23,x3] + add x1, x2, x1 + str w3, [x1,4] +.L1654: + add w0, w0, 1 + uxth w0, w0 + b .L1653 +.L1656: + mov w1, 1 + add x0, x21, :lo12:.LANCHOR2 + add x0, x0, 1400 + mov w2, w1 + mov w3, 0 + bl FlashProgPages + ldrh w0, [x19,2] + add w0, w0, 1 + strh w0, [x19,2] + mov x0, x19 + bl ftl_map_blk_gc +.L1651: + mov w0, 0 + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page + .align 2 + .global flush_l2p_region + .type flush_l2p_region, %function +flush_l2p_region: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR2 + ubfiz x19, x0, 4, 16 + add x20, x20, :lo12:.LANCHOR2 + add x0, x20, 3696 + ldr x1, [x20,1256] + add x2, x1, x19 + ldrh w1, [x1,x19] + ldr x2, [x2,8] + bl FtlMapWritePage + ldr x0, [x20,1256] + add x19, x0, x19 + ldr w0, [x19,4] + and w0, w0, 2147483647 + str w0, [x19,4] + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size flush_l2p_region, .-flush_l2p_region + .align 2 + .global select_l2p_ram_region + .type select_l2p_ram_region, %function +select_l2p_ram_region: + adrp x0, .LANCHOR2 + mov x4, 0 + add x1, x0, :lo12:.LANCHOR2 + mov x3, x0 + mov w5, 65535 + ldrh w2, [x1,850] + ldr x1, [x1,1256] +.L1659: + uxth w0, w4 + cmp w0, w2 + bcs .L1675 + add x4, x4, 1 + add x6, x1, x4, lsl 4 + ldrh w6, [x6,-16] + cmp w6, w5 + bne .L1659 + b .L1660 +.L1675: + mov w0, w2 + mov x4, 0 + mov w7, -2147483648 +.L1662: + uxth w6, w4 + cmp w6, w2 + bcs .L1676 + add x5, x1, x4, lsl 4 + ldr w5, [x5,4] + tbnz w5, #31, .L1671 + cmp w5, w7 + bcc .L1663 +.L1671: + mov w5, w7 + mov w6, w0 +.L1663: + add x4, x4, 1 + mov w7, w5 + mov w0, w6 + b .L1662 +.L1676: + cmp w0, w2 + bcc .L1660 + add x0, x3, :lo12:.LANCHOR2 + add x1, x1, 4 + mov w4, -1 + mov w3, 0 + ldrh w5, [x0,3760] + mov w0, w2 +.L1666: + cmp w3, w2 + beq .L1660 + ldr w7, [x1] + cmp w7, w4 + bcs .L1667 + ldrh w6, [x1,-4] + cmp w6, w5 + csel w4, w4, w7, eq + cmp w6, w5 + csel w0, w0, w3, eq +.L1667: + add w3, w3, 1 + add x1, x1, 16 + uxth w3, w3 + b .L1666 +.L1660: + ret + .size select_l2p_ram_region, .-select_l2p_ram_region + .align 2 + .global log2phys + .type log2phys, %function +log2phys: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR2 + add x3, x21, :lo12:.LANCHOR2 + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + mov x26, x1 + mov w27, w2 + ldrh w1, [x3,818] + mov x2, 1 + ldr x20, [x3,1256] + add w1, w1, 7 + lsr w28, w0, w1 + lsl x1, x2, x1 + sub w1, w1, #1 + and w23, w1, w0 + ldrh w1, [x3,850] + uxth w25, w28 + mov x0, 0 + uxth x23, w23 +.L1678: + uxth x19, w0 + cmp w19, w1 + bcs .L1692 + add x0, x0, 1 + add x2, x20, x0, lsl 4 + ldrh w2, [x2,-16] + cmp w2, w25 + bne .L1678 +.L1679: + cbnz w27, .L1680 + add x0, x21, :lo12:.LANCHOR2 + ldr x1, [x0,1256] + add x1, x1, x19, lsl 4 + ldr x0, [x1,8] + ldr w0, [x0,x23,lsl 2] + str w0, [x26] + b .L1681 +.L1680: + add x1, x21, :lo12:.LANCHOR2 + lsl x0, x19, 4 + ldr w3, [x26] + ldr x2, [x1,1256] + add x2, x2, x0 + ldr x2, [x2,8] + str w3, [x2,x23,lsl 2] + strh w25, [x1,3760] + ldr x2, [x1,1256] + add x0, x2, x0 + ldr w2, [x0,4] + orr w2, w2, -2147483648 + str w2, [x0,4] +.L1681: + add x21, x21, :lo12:.LANCHOR2 + ldr x0, [x21,1256] + add x19, x0, x19, lsl 4 + ldr w0, [x19,4] + cmn w0, #1 + beq .L1689 + add w0, w0, 1 + str w0, [x19,4] + b .L1689 +.L1692: + bl select_l2p_ram_region + uxth x19, w0 + ubfiz x22, x19, 4, 16 + mov w2, 65535 + add x1, x20, x22 + ldrh w3, [x20,x22] + cmp w3, w2 + beq .L1684 + ldr w1, [x1,4] + tbz w1, #31, .L1684 + bl flush_l2p_region +.L1684: + add x20, x21, :lo12:.LANCHOR2 + ubfiz x0, x25, 2, 16 + ldr x1, [x20,1232] + ldr w24, [x1,x0] + cbnz w24, .L1685 + ldr x0, [x20,1256] + mov w1, 255 + ldrh w2, [x20,820] + add x0, x0, x22 + ldr x0, [x0,8] + bl ftl_memset + ldr x0, [x20,1256] + strh w25, [x0,x22] + ldr x0, [x20,1256] + add x22, x0, x22 + str w24, [x22,4] + b .L1679 +.L1685: + ldr x1, [x20,1256] + add x0, x20, 1400 + str w24, [x0,4] + add x1, x1, x22 + ldr x1, [x1,8] + str x1, [x0,8] + ldr x1, [x20,1104] + str x1, [x0,16] + mov w1, 1 + mov w2, w1 + bl FlashReadPages + ldr w0, [x20,1400] + cmp w0, 256 + bne .L1686 + and w28, w28, 65535 + adrp x0, .LC39 + mov w2, w24 + mov w1, w28 + add x0, x0, :lo12:.LC39 + lsr w24, w24, 10 + bl printk + strh w24, [x20,3756] + add x0, x20, 3696 + ldr x2, [x20,1256] + mov w1, w28 + add x2, x2, x22 + ldr x2, [x2,8] + bl FtlMapWritePage +.L1686: + add x1, x21, :lo12:.LANCHOR2 + ldr x0, [x1,1256] + add x0, x0, x22 + str wzr, [x0,4] + ldr x0, [x1,1256] + strh w25, [x0,x22] + b .L1679 +.L1689: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size log2phys, .-log2phys + .align 2 + .global FtlVendorPartWrite + .type FtlVendorPartWrite, %function +FtlVendorPartWrite: + stp x29, x30, [sp, -160]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x19, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + mov w22, w1 + mov w25, w0 + add w1, w0, w1 + ldrh w0, [x19,804] + stp x23, x24, [sp,48] + stp x27, x28, [sp,80] + cmp w1, w0 + mov x24, x2 + ldrh w23, [x19,818] + mov w21, -1 + bhi .L1694 + lsr w23, w25, w23 + mov w21, 0 + add x27, x19, 3768 +.L1695: + cbz w22, .L1694 + ldrh w1, [x19,816] + ldr x0, [x19,1224] + udiv w26, w25, w1 + ldr w2, [x0,w23,uxtw 2] + uxth w0, w22 + msub w26, w26, w1, w25 + sub w20, w1, w26 + uxth w20, w20 + cmp w20, w22 + csel w20, w0, w20, hi + cmp w20, w1 + beq .L1697 + cbz w2, .L1697 + ldr x0, [x19,1056] + mov w1, 1 + str w2, [x29,108] + mov w2, w1 + str x0, [x29,112] + add x0, x29, 104 + str xzr, [x29,120] + bl FlashReadPages + b .L1698 +.L1697: + ldr x0, [x19,1056] + mov w1, 0 + ldrh w2, [x19,820] + bl ftl_memset +.L1698: + ldr x0, [x19,1056] + lsl w28, w20, 9 + ubfiz x26, x26, 9, 16 + mov x1, x24 + mov w2, w28 + add x0, x0, x26 + sub w22, w22, w20 + add w25, w25, w20 + bl ftl_memcpy + add x24, x24, x28, sxtw + ldr x2, [x19,1056] + mov w1, w23 + mov x0, x27 + add w23, w23, 1 + bl FtlMapWritePage + cmn w0, #1 + csinv w21, w21, wzr, ne + b .L1695 +.L1694: + mov w0, w21 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 160 + ret + .size FtlVendorPartWrite, .-FtlVendorPartWrite + .align 2 + .global FtlVendorPartRead + .type FtlVendorPartRead, %function +FtlVendorPartRead: + stp x29, x30, [sp, -176]! + adrp x3, .LANCHOR2 + add x3, x3, :lo12:.LANCHOR2 + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + stp x27, x28, [sp,80] + mov w22, w1 + mov x25, x2 + add w2, w0, w1 + ldrh w1, [x3,804] + mov w23, w0 + ldrh w20, [x3,818] + cmp w2, w1 + mov w0, -1 + bhi .L1709 + adrp x26, .LC40 + add x0, x3, 3768 + lsr w20, w23, w20 + mov w21, 0 + mov x28, x3 + add x26, x26, :lo12:.LC40 + str x0, [x29,104] +.L1710: + cbz w22, .L1718 + ldrh w19, [x28,816] + ldr x0, [x28,1224] + udiv w24, w23, w19 + ldr w4, [x0,w20,uxtw 2] + uxth w0, w22 + msub w24, w24, w19, w23 + sub w19, w19, w24 + uxth w19, w19 + cmp w19, w22 + csel w19, w0, w19, hi + lsl w27, w19, 9 + cbz w4, .L1712 + ldr x0, [x28,1056] + mov w1, 1 + str x0, [x29,128] + mov w2, w1 + add x0, x29, 120 + str w4, [x29,124] + str x4, [x29,96] + str xzr, [x29,136] + bl FlashReadPages + ldr w0, [x29,120] + ldr x4, [x29,96] + cmn w0, #1 + ldr w0, [x28,1400] + csinv w21, w21, wzr, ne + cmp w0, 256 + bne .L1714 + mov w1, w20 + mov w2, w4 + mov x0, x26 + bl printk + ldr x0, [x29,104] + mov w1, w20 + ldr x2, [x28,1056] + bl FtlMapWritePage +.L1714: + ldr x1, [x28,1056] + ubfiz x24, x24, 9, 16 + mov x0, x25 + mov w2, w27 + add x1, x1, x24 + bl ftl_memcpy + b .L1715 +.L1712: + mov x0, x25 + mov w1, w4 + mov w2, w27 + bl ftl_memset +.L1715: + add w20, w20, 1 + sub w22, w22, w19 + add w23, w23, w19 + add x25, x25, x27, sxtw + b .L1710 +.L1718: + mov w0, w21 +.L1709: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 176 + ret + .size FtlVendorPartRead, .-FtlVendorPartRead + .align 2 + .global FtlUpdateVaildLpn + .type FtlUpdateVaildLpn, %function +FtlUpdateVaildLpn: + adrp x1, .LANCHOR2 + add x3, x1, :lo12:.LANCHOR2 + ldrh w2, [x3,3832] + cbnz w0, .L1720 + cmp w2, 4 + bhi .L1720 + add w2, w2, 1 + strh w2, [x3,3832] + b .L1719 +.L1720: + add x0, x1, :lo12:.LANCHOR2 + mov w7, 65535 + strh wzr, [x0,3832] + str wzr, [x0,3836] + ldrh w5, [x0,748] + ldr x6, [x0,1176] + mov x0, 0 +.L1721: + cmp w5, w0, uxth + bls .L1719 + ldrh w4, [x6,x0,lsl 1] + cmp w4, w7 + beq .L1722 + add x3, x1, :lo12:.LANCHOR2 + ldr w2, [x3,3836] + add w2, w4, w2 + str w2, [x3,3836] +.L1722: + add x0, x0, 1 + b .L1721 +.L1719: + ret + .size FtlUpdateVaildLpn, .-FtlUpdateVaildLpn + .align 2 + .global FtlMapBlkWriteDumpData + .type FtlMapBlkWriteDumpData, %function +FtlMapBlkWriteDumpData: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + ldr w1, [x0,56] + ldrh w19, [x0,6] + ldr x4, [x0,40] + cbz w1, .L1725 + adrp x1, .LANCHOR2 + str wzr, [x0,56] + add x2, x1, :lo12:.LANCHOR2 + mov x21, x1 + ldr w3, [x2,1392] + cbnz w3, .L1725 + mov x20, x0 + sub w19, w19, #1 + add x0, x2, 1400 + ldr x3, [x2,1104] + uxth w19, w19 + ldr x1, [x2,1048] + str x3, [x0,16] + ubfiz x3, x19, 2, 16 + str x1, [x0,8] + ldr w3, [x4,x3] + str w3, [x0,4] + cbz w3, .L1729 + mov w1, 1 + mov w2, w1 + bl FlashReadPages + b .L1730 +.L1729: + ldrh w2, [x2,820] + mov x0, x1 + mov w1, 255 + bl ftl_memset +.L1730: + add x2, x21, :lo12:.LANCHOR2 + mov x0, x20 + mov w1, w19 + ldr x2, [x2,1408] + bl FtlMapWritePage +.L1725: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData + .align 2 + .global FtlVpcTblFlush + .type FtlVpcTblFlush, %function +FtlVpcTblFlush: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x22, .LANCHOR2 + str x25, [sp,64] + stp x19, x20, [sp,16] + add x19, x22, :lo12:.LANCHOR2 + stp x23, x24, [sp,48] + ldr w0, [x19,1392] + cbnz w0, .L1733 + ldr x21, [x19,1104] + add x20, x19, 3856 + ldr x1, [x19,1040] + str x1, [x19,1408] + str x21, [x19,1416] + ldrh w2, [x19,3840] + strh w2, [x21,2] + mov w2, -3932 + strh w2, [x21] + str w0, [x21,12] + ldr w2, [x19,3848] + str w2, [x21,4] + str w0, [x21,8] + mov w0, 19539 + ldrh w1, [x19,3552] + movk w0, 0x4654, lsl 16 + strh w1, [x19,3870] + ldrh w1, [x19,3554] + ldrb w2, [x19,3558] + str w0, [x19,3856] + mov w0, 71 + orr w1, w2, w1, lsl 6 + strh w1, [x19,3872] + ldrh w1, [x19,3600] + movk w0, 0x5000, lsl 16 + strh w1, [x19,3874] + ldrh w1, [x19,3602] + ldrb w2, [x19,3606] + str w0, [x19,3860] + ldrh w0, [x19,3846] + orr w1, w2, w1, lsl 6 + strh w0, [x19,3864] + ldrh w0, [x19,762] + strb w0, [x19,3866] + ldrb w0, [x19,3560] + strb w0, [x19,3867] + strh w1, [x19,3876] + ldrb w0, [x19,3608] + ldrh w1, [x19,3648] + strb w0, [x19,3868] + strh w1, [x19,3878] + ldrh w1, [x19,3650] + ldrb w0, [x19,3656] + strb w0, [x19,3869] + ldr w0, [x19,896] + ldrb w2, [x19,3654] + str w0, [x19,3888] + ldr w0, [x19,864] + orr w1, w2, w1, lsl 6 + str w0, [x19,3896] + ldr w0, [x19,868] + str w0, [x19,3892] + ldrh w2, [x19,820] + ldr x0, [x19,1408] + strh w1, [x19,3880] + mov w1, 255 + bl ftl_memset + ldr x0, [x19,1408] + mov x1, x20 + mov w2, 48 + bl ftl_memcpy + ldr x0, [x19,1408] + ldrh w2, [x19,748] + ldr x1, [x19,1176] + add x0, x0, 48 + lsl w2, w2, 1 + bl ftl_memcpy + ldrh w2, [x19,748] + ldr x1, [x19,1408] + uxth x0, w2 + lsr w2, w2, 3 + add x0, x0, 24 + add w2, w2, 4 + lsr x0, x0, 1 + add x0, x1, x0, lsl 2 + adrp x1, .LANCHOR0+16 + ldr x1, [x1,#:lo12:.LANCHOR0+16] + bl ftl_memcpy + ldrh w0, [x19,852] + cbz w0, .L1734 + ldrh w0, [x19,748] + ldrh w2, [x19,848] + lsr w1, w0, 3 + add w0, w1, w0, lsl 1 + ldr x1, [x19,1408] + add w0, w0, 52 + lsl w2, w2, 2 + and x0, x0, 65532 + add x0, x1, x0 + ldr x1, [x19,1232] + bl ftl_memcpy +.L1734: + add x19, x22, :lo12:.LANCHOR2 + mov w0, 0 + mov w23, 0 + mov w25, 65535 + add x20, x19, 1400 + bl FtlUpdateVaildLpn +.L1735: + ldr x0, [x19,1040] + str x0, [x20,8] + ldr x0, [x19,1104] + str x0, [x20,16] + ldrh w0, [x19,3840] + ldrh w1, [x19,3842] + orr w0, w1, w0, lsl 10 + mov w1, 1 + str w0, [x20,4] + mov w2, w1 + mov w3, w1 + mov x0, x20 + bl FlashProgPages + ldrh w0, [x19,812] + ldrh w1, [x19,3842] + sub w0, w0, #1 + cmp w1, w0 + blt .L1736 + ldrh w0, [x19,3840] + ldrh w25, [x19,3844] + strh wzr, [x19,3842] + strh w0, [x19,3844] + bl FtlFreeSysBlkQueueOut + ldr w1, [x19,864] + str w1, [x19,3848] + add w2, w1, 1 + str w2, [x19,864] + ubfiz w2, w0, 10, 16 + str w2, [x20,4] + str w1, [x21,4] + mov w1, 1 + strh w0, [x19,3840] + mov w2, w1 + strh w0, [x21,2] + mov w3, w1 + mov x0, x20 + bl FlashProgPages +.L1736: + ldrh w1, [x19,3842] + ldr w2, [x20] + add w1, w1, 1 + cmn w2, #1 + uxth w1, w1 + strh w1, [x19,3842] + bne .L1737 + cmp w1, 1 + bne .L1738 + ldrh w1, [x19,812] + sub w1, w1, #1 + strh w1, [x19,3842] +.L1738: + add w23, w23, 1 + uxth w23, w23 + cmp w23, 3 + bls .L1735 + add x22, x22, :lo12:.LANCHOR2 + adrp x0, .LC41 + add x0, x0, :lo12:.LC41 + mov w2, w23 + ldr w1, [x22,1404] + bl printk + mov w0, 1 + str w0, [x22,1392] + b .L1733 +.L1737: + cmp w1, 1 + beq .L1735 + cmp w2, 256 + beq .L1735 + mov w0, 65535 + cmp w25, w0 + beq .L1733 + mov w0, w25 + mov w1, 1 + bl FtlFreeSysBlkQueueIn +.L1733: + mov w0, 0 + ldr x25, [sp,64] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size FtlVpcTblFlush, .-FtlVpcTblFlush + .align 2 + .global FtlScanSysBlk + .type FtlScanSysBlk, %function +FtlScanSysBlk: + stp x29, x30, [sp, -128]! + mov w1, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x20, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + stp x23, x24, [sp,48] + stp x27, x28, [sp,80] + strh wzr, [x20,3904] + mov x26, 56 + ldr w2, [x20,840] + mov w22, 65535 + ldr x0, [x20,1248] + lsl w2, w2, 2 + strh wzr, [x20,1384] + bl ftl_memset + ldr w2, [x20,840] + mov w1, 0 + ldr x0, [x20,1184] + lsl w2, w2, 1 + bl ftl_memset + ldrh w2, [x20,832] + mov w1, 0 + ldr x0, [x20,1216] + lsl w2, w2, 2 + bl ftl_memset + ldrh w2, [x20,832] + mov w1, 0 + ldr x0, [x20,1200] + lsl w2, w2, 1 + bl ftl_memset + add x0, x20, 3840 + mov w1, 255 + mov w2, 12 + bl ftl_memset + ldrh w21, [x20,748] +.L1745: + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x1,750] + cmp w0, w21 + bls .L1786 + mov x27, 0 + ldrh w3, [x1,740] + ldrh w2, [x1,822] + mov w20, w27 + mov x23, x1 +.L1787: + cmp w3, w27, uxth + bls .L1820 + add x0, x23, 768 + mov w1, w21 + str x2, [x29,112] + str x3, [x29,120] + ldrb w0, [x0,x27] + bl V2P_block + uxth w28, w0 + bl FtlBbmIsBadBlock + ldr x3, [x29,120] + ldr x2, [x29,112] + cbnz w0, .L1746 + mov w0, 56 + ldr x1, [x23,984] + lsl w28, w28, 10 + mov w4, 4 + umull x0, w20, w0 + add x1, x1, x0 + str w28, [x1,4] + ldr x1, [x23,984] + add x0, x1, x0 + ldr x1, [x23,1064] + str x1, [x0,8] + mul w1, w20, w2 + add w20, w20, 1 + sdiv w1, w1, w4 + uxth w20, w20 + ldr x4, [x23,1120] + add x1, x4, x1, sxtw 2 + str x1, [x0,16] +.L1746: + add x27, x27, 1 + b .L1787 +.L1820: + cbz w20, .L1749 + add x0, x19, :lo12:.LANCHOR2 + mov w1, w20 + mov w2, 1 + mov x23, 0 + mov w27, -1 + adrp x28, .LANCHOR0 + ldr x0, [x0,984] + bl FlashReadPages +.L1750: + cmp w20, w23, uxth + bls .L1749 + add x0, x19, :lo12:.LANCHOR2 + mul x5, x23, x26 + ldr x0, [x0,984] + add x1, x0, x5 + ldr w0, [x0,x5] + ldr w4, [x1,4] + cmn w0, #1 + ldr x25, [x1,16] + ubfx x24, x4, 10, 16 + bne .L1752 + mov w6, 16 +.L1751: + add x7, x19, :lo12:.LANCHOR2 + str x6, [x29,104] + str x7, [x29,112] + str x5, [x29,120] + ldr x0, [x7,984] + add x0, x0, x5 + ldr w1, [x0,4] + add w1, w1, 1 + str w1, [x0,4] + mov w1, 1 + ldr x0, [x7,984] + mov w2, w1 + add x0, x0, x5 + bl FlashReadPages + ldrh w0, [x25] + ldr x7, [x29,112] + cmp w0, w22 + ldr x5, [x29,120] + ldr x6, [x29,104] + ldr x0, [x7,984] + bne .L1753 + str w27, [x0,x5] + b .L1752 +.L1753: + ldr w0, [x0,x5] + cmn w0, #1 + bne .L1752 + sub w6, w6, #1 + uxth w6, w6 + cbnz w6, .L1751 +.L1752: + add x0, x19, :lo12:.LANCHOR2 + ldr x1, [x0,984] + ldr w1, [x1,x5] + cmn w1, #1 + beq .L1755 + ldr w0, [x0,864] + cmn w0, #1 + beq .L1756 + ldr w1, [x25,4] + cmp w0, w1 + bhi .L1757 +.L1756: + ldr w0, [x25,4] + cmn w0, #1 + beq .L1757 + add x1, x19, :lo12:.LANCHOR2 + add w0, w0, 1 + str w0, [x1,864] +.L1757: + ldrh w0, [x25] + mov w1, 61604 + cmp w0, w1 + beq .L1759 + bhi .L1760 + mov w1, 61574 + cmp w0, w1 + bne .L1758 + add x5, x19, :lo12:.LANCHOR2 + ldrh w6, [x5,832] + ldrh w0, [x5,1384] + sub w2, w6, #1 + ldr x5, [x5,1216] + sxth x1, w2 + sub w2, w2, w0 + b .L1773 +.L1760: + mov w1, 61634 + cmp w0, w1 + beq .L1762 + cmp w0, w22 + bne .L1758 + mov w0, w24 + b .L1819 +.L1762: + add x5, x19, :lo12:.LANCHOR2 + ldr w6, [x5,840] + ldrh w0, [x5,3904] + ldr x5, [x5,1248] + uxth w2, w6 + sub w1, w2, #1 + sub w2, w2, w0 + sub w2, w2, #1 + sxth x1, w1 + sxth w2, w2 +.L1764: + cmp w1, w2 + ble .L1821 + sbfiz x7, x1, 2, 32 + ldr w10, [x25,4] + sxth x8, w1 + ldr w9, [x5,x7] + cmp w10, w9 + bls .L1765 + ldr w2, [x5] + cbnz w2, .L1766 + cmp w0, w6 + beq .L1766 + add x2, x19, :lo12:.LANCHOR2 + add w0, w0, 1 + strh w0, [x2,3904] +.L1766: + mov w0, 0 +.L1767: + cmp w0, w1 + beq .L1822 + add x5, x19, :lo12:.LANCHOR2 + sxtw x2, w0 + lsl x6, x2, 2 + lsl x2, x2, 1 + add w0, w0, 1 + ldr x9, [x5,1248] + sxth w0, w0 + add x10, x9, x6 + ldr w10, [x10,4] + str w10, [x9,x6] + ldr x5, [x5,1184] + add x6, x5, x2 + ldrh w6, [x6,2] + strh w6, [x5,x2] + b .L1767 +.L1822: + add x2, x19, :lo12:.LANCHOR2 + ldr w5, [x25,4] + ldr x0, [x2,1248] + str w5, [x0,x7] + ldr x0, [x2,1184] + strh w24, [x0,x8,lsl 1] + tbz w1, #31, .L1769 + b .L1758 +.L1765: + sub w1, w1, #1 + sxth x1, w1 + b .L1764 +.L1821: + tbz w1, #31, .L1802 + b .L1758 +.L1769: + ldrh w0, [x2,3904] + ldr w2, [x2,840] + sub w2, w2, w0 + sub w2, w2, #1 + cmp w1, w2, sxth + bgt .L1758 +.L1802: + add x2, x19, :lo12:.LANCHOR2 + add w0, w0, 1 + ldr w3, [x25,4] + strh w0, [x2,3904] + ldr x0, [x2,1248] + str w3, [x0,x1,lsl 2] + ldr x0, [x2,1184] + b .L1818 +.L1779: + sbfiz x7, x1, 2, 32 + ldr w10, [x25,4] + sxth x8, w1 + ldr w9, [x5,x7] + cmp w10, w9 + bhi .L1823 + sub w1, w1, #1 + sxth x1, w1 +.L1773: + cmp w1, w2 + bgt .L1779 + b .L1778 +.L1823: + ldr w2, [x5] + cbnz w2, .L1775 + cmp w0, w6 + beq .L1775 + add x2, x19, :lo12:.LANCHOR2 + add w0, w0, 1 + strh w0, [x2,1384] +.L1775: + mov w0, 0 +.L1776: + cmp w0, w1 + beq .L1824 + add x5, x19, :lo12:.LANCHOR2 + sxtw x2, w0 + lsl x6, x2, 2 + lsl x2, x2, 1 + add w0, w0, 1 + ldr x9, [x5,1216] + sxth w0, w0 + add x10, x9, x6 + ldr w10, [x10,4] + str w10, [x9,x6] + ldr x5, [x5,1200] + add x6, x5, x2 + ldrh w6, [x6,2] + strh w6, [x5,x2] + b .L1776 +.L1824: + add x0, x19, :lo12:.LANCHOR2 + ldr w5, [x25,4] + ldr x2, [x0,1216] + str w5, [x2,x7] + ldr x0, [x0,1200] + strh w24, [x0,x8,lsl 1] +.L1778: + tbnz w1, #31, .L1758 + add x0, x19, :lo12:.LANCHOR2 + ldrh w2, [x0,832] + ldrh w5, [x0,1384] + sub w2, w2, #1 + sub w2, w2, w5 + cmp w1, w2, sxth + bgt .L1758 + ldr x2, [x0,1216] + add w5, w5, 1 + ldr w3, [x25,4] + strh w5, [x0,1384] + str w3, [x2,x1,lsl 2] + ldr x0, [x0,1200] +.L1818: + strh w24, [x0,x1,lsl 1] + b .L1758 +.L1759: + add x0, x19, :lo12:.LANCHOR2 + add x1, x0, 3840 + ldrh w2, [x0,3840] + cmp w2, w22 + bne .L1780 + strh w24, [x0,3840] + ldr w0, [x25,4] + str w0, [x1,8] + b .L1758 +.L1780: + ldrh w0, [x1,4] + cmp w0, w22 + beq .L1781 + mov w1, 1 + bl FtlFreeSysBlkQueueIn +.L1781: + add x1, x19, :lo12:.LANCHOR2 + ldr w2, [x25,4] + add x0, x1, 3840 + ldr w5, [x0,8] + cmp w5, w2 + bcs .L1782 + ldrh w2, [x1,3840] + strh w2, [x0,4] + strh w24, [x1,3840] + ldr w1, [x25,4] + str w1, [x0,8] + b .L1758 +.L1782: + strh w24, [x0,4] + b .L1758 +.L1755: + add x0, x28, :lo12:.LANCHOR0 + ldrb w1, [x0,136] + mov w0, w24 + cbz w1, .L1783 +.L1819: + mov w1, 0 +.L1783: + bl FtlFreeSysBlkQueueIn +.L1758: + add x23, x23, 1 + b .L1750 +.L1749: + add w21, w21, 1 + uxth w21, w21 + b .L1745 +.L1786: + ldr x2, [x1,1184] + ldrh w0, [x2] + cbz w0, .L1788 +.L1791: + add x1, x19, :lo12:.LANCHOR2 + ldr x2, [x1,1200] + ldrh w0, [x2] + cbz w0, .L1789 + b .L1812 +.L1788: + ldrh w3, [x1,3904] + cbz w3, .L1791 + ldr w1, [x1,840] +.L1792: + cmp w0, w1 + bcs .L1791 + ldrh w3, [x2,w0,sxtw 1] + cbz w3, .L1793 + mov w6, w0 +.L1794: + add x1, x19, :lo12:.LANCHOR2 + ldr w2, [x1,840] + cmp w0, w2 + bcs .L1791 + sxtw x5, w0 + sub w2, w0, w6 + ldr x4, [x1,1184] + lsl x3, x5, 1 + sxtw x2, w2 + add w0, w0, 1 + ldrh w7, [x4,x3] + sxth w0, w0 + strh w7, [x4,x2,lsl 1] + ldr x4, [x1,1248] + ldr w5, [x4,x5,lsl 2] + str w5, [x4,x2,lsl 2] + ldr x1, [x1,1184] + strh wzr, [x1,x3] + b .L1794 +.L1793: + add w0, w0, 1 + sxth w0, w0 + b .L1792 +.L1789: + ldrh w3, [x1,1384] + cbz w3, .L1812 + ldrh w1, [x1,832] +.L1797: + cmp w0, w1 + mov w6, w0 + bge .L1812 + ldrh w3, [x2,w0,sxtw 1] + cbz w3, .L1798 +.L1799: + add x1, x19, :lo12:.LANCHOR2 + ldrh w2, [x1,832] + cmp w0, w2 + bge .L1812 + sxtw x5, w0 + sub w2, w0, w6 + ldr x4, [x1,1200] + lsl x3, x5, 1 + sxtw x2, w2 + add w0, w0, 1 + ldrh w7, [x4,x3] + sxth w0, w0 + strh w7, [x4,x2,lsl 1] + ldr x4, [x1,1216] + ldr w5, [x4,x5,lsl 2] + str w5, [x4,x2,lsl 2] + ldr x1, [x1,1200] + strh wzr, [x1,x3] + b .L1799 +.L1798: + add w0, w0, 1 + sxth w0, w0 + b .L1797 +.L1812: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size FtlScanSysBlk, .-FtlScanSysBlk + .align 2 + .global FtlLoadEctTbl + .type FtlLoadEctTbl, %function +FtlLoadEctTbl: + stp x29, x30, [sp, -32]! + mov w0, 64 + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR2 + add x19, x19, :lo12:.LANCHOR2 + ldrh w1, [x19,1136] + ldr x2, [x19,1152] + bl FtlVendorPartRead + ldr x0, [x19,1152] + ldr w1, [x0] + mov w0, 17221 + movk w0, 0x4254, lsl 16 + cmp w1, w0 + beq .L1826 + adrp x0, .LC42 + adrp x1, .LC43 + add x1, x1, :lo12:.LC43 + add x0, x0, :lo12:.LC42 + bl printk + ldrh w2, [x19,1136] + mov w1, 0 + ldr x0, [x19,1152] + lsl w2, w2, 9 + bl ftl_memset +.L1826: + mov w0, 0 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlLoadEctTbl, .-FtlLoadEctTbl + .align 2 + .global ftl_set_blk_mode + .type ftl_set_blk_mode, %function +ftl_set_blk_mode: + stp x29, x30, [sp, -16]! + uxth w0, w0 + add x29, sp, 0 + cbz w1, .L1828 + bl ftl_set_blk_mode.part.18 + b .L1827 +.L1828: + adrp x1, .LANCHOR0+16 + ubfx x2, x0, 5, 11 + lsl x2, x2, 2 + ldr x3, [x1,#:lo12:.LANCHOR0+16] + mov w1, 1 + lsl w0, w1, w0 + ldr w1, [x3,x2] + bic w0, w1, w0 + str w0, [x3,x2] +.L1827: + ldp x29, x30, [sp], 16 + ret + .size ftl_set_blk_mode, .-ftl_set_blk_mode + .align 2 + .global ftl_get_blk_mode + .type ftl_get_blk_mode, %function +ftl_get_blk_mode: + adrp x1, .LANCHOR0+16 + uxth w0, w0 + ubfx x2, x0, 5, 11 + ldr x1, [x1,#:lo12:.LANCHOR0+16] + ldr w1, [x1,x2,lsl 2] + lsr w0, w1, w0 + and w0, w0, 1 + ret + .size ftl_get_blk_mode, .-ftl_get_blk_mode + .align 2 + .global FtlMapTblRecovery + .type FtlMapTblRecovery, %function +FtlMapTblRecovery: + stp x29, x30, [sp, -128]! + mov w1, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov x19, x0 + adrp x21, .LANCHOR2 + ldr x0, [x0,40] + mov w26, 0 + str x0, [x29,120] + ldrh w23, [x19,6] + ldrh w0, [x19,8] + str w0, [x29,116] + lsl w2, w23, 2 + ldr x0, [x29,120] + ldr x22, [x19,16] + ldr x25, [x19,24] + bl ftl_memset + str wzr, [x19,52] + add x1, x21, :lo12:.LANCHOR2 + str wzr, [x19,48] + add x6, x1, 1400 + mov x27, x1 + mov x24, x6 + ldr x0, [x1,1040] + ldr x20, [x1,1104] + str x0, [x1,1408] + mov w0, -1 + str x20, [x1,1416] + strh w0, [x19] + strh w0, [x19,2] + mov w0, 1 + str w0, [x19,56] + ldr w0, [x29,116] + sub w0, w0, #1 + str w0, [x29,112] +.L1832: + ldr w0, [x29,116] + cmp w26, w0 + bge .L1849 + ldr w0, [x29,112] + sxtw x28, w26 + cmp w26, w0 + bne .L1833 + lsl x0, x28, 1 + mov w1, 1 + add x24, x22, x0 + ldrh w0, [x22,x0] + bl FtlGetLastWrittenPage + strh w26, [x19] + sxth w27, w0 + add w0, w0, 1 + strh w0, [x19,2] + add x26, x21, :lo12:.LANCHOR2 + add w27, w27, 1 + add x26, x26, 1400 + ldr w0, [x25,x28,lsl 2] + mov w25, 0 + str w0, [x19,48] +.L1834: + cmp w25, w27 + bge .L1849 + ldrh w0, [x24] + mov w1, 1 + mov w2, w1 + orr w0, w25, w0, lsl 10 + str w0, [x26,4] + mov x0, x26 + bl FlashReadPages + ldr w0, [x26] + cmn w0, #1 + beq .L1835 + ldrh w0, [x20,8] + cmp w0, w23 + bcs .L1836 + ldrh w2, [x20] + ldrh w1, [x19,4] + cmp w2, w1 + bne .L1836 + ubfiz x0, x0, 2, 16 + ldr x2, [x29,120] + ldr w1, [x26,4] + str w1, [x2,x0] + b .L1836 +.L1835: + ldrh w0, [x24] + strh w0, [x19,60] +.L1836: + add w25, w25, 1 + sxth w25, w25 + b .L1834 +.L1849: + add x20, x21, :lo12:.LANCHOR2 + add x0, x20, 3696 + cmp x19, x0 + bne .L1839 + b .L1874 +.L1833: + ldr x0, [x27,1040] + lsl x1, x28, 1 + str x0, [x24,8] + add x28, x22, x1 + ldrh w0, [x27,812] + ldrh w1, [x22,x1] + sub w0, w0, #1 + orr w0, w0, w1, lsl 10 + mov w1, 1 + str w0, [x24,4] + mov w2, w1 + mov x0, x24 + bl FlashReadPages + ldr w0, [x24] + cmn w0, #1 + beq .L1862 + ldrh w1, [x20] + mov w3, 0 + ldrh w0, [x19,4] + cmp w1, w0 + bne .L1871 + ldrh w0, [x20,8] + mov w1, 64245 + cmp w0, w1 + bne .L1871 +.L1841: + ldrh w0, [x27,812] + sub w0, w0, #1 + cmp w3, w0 + bge .L1844 + ldr x0, [x27,1040] + sbfiz x2, x3, 3, 32 + ldrh w1, [x0,x2] + cmp w1, w23 + bcs .L1842 + add x2, x0, x2 + ubfiz x1, x1, 2, 16 + ldr w0, [x2,4] + ldr x2, [x29,120] + str w0, [x2,x1] +.L1842: + add w3, w3, 1 + sxth w3, w3 + b .L1841 +.L1862: + mov w3, 0 +.L1871: + ldrh w0, [x27,812] + cmp w3, w0 + bge .L1844 + ldrh w0, [x28] + mov w1, 1 + mov w2, w1 + str x3, [x29,104] + orr w0, w3, w0, lsl 10 + str w0, [x24,4] + mov x0, x24 + bl FlashReadPages + ldr w0, [x24] + ldr x3, [x29,104] + cmn w0, #1 + beq .L1845 + ldrh w1, [x20,8] + cmp w1, w23 + bcs .L1845 + ldrh w2, [x20] + ldrh w0, [x19,4] + cmp w2, w0 + bne .L1845 + ubfiz x1, x1, 2, 16 + ldr x2, [x29,120] + ldr w0, [x24,4] + str w0, [x2,x1] +.L1845: + add w3, w3, 1 + sxth w3, w3 + b .L1871 +.L1844: + add w4, w26, 1 + sxth w26, w4 + b .L1832 +.L1860: + ubfiz x23, x24, 2, 32 + ldr x0, [x20,1240] + ldr w1, [x0,x23] + sub w2, w1, #1 + cmn w2, #3 + bls .L1875 +.L1854: + add w24, w24, 1 +.L1852: + ldrh w0, [x20,848] + cmp w24, w0 + bcc .L1860 +.L1839: + mov x0, x19 + add x21, x21, :lo12:.LANCHOR2 + bl ftl_free_no_use_map_blk + ldrh w1, [x19,2] + ldrh w0, [x21,812] + cmp w1, w0 + bne .L1851 + mov x0, x19 + bl ftl_map_blk_alloc_new_blk + b .L1851 +.L1874: + ldrh w0, [x20,852] + cbz w0, .L1839 + adrp x25, .LC44 + mov w24, 0 + add x27, x20, 1400 + add x25, x25, :lo12:.LC44 + b .L1852 +.L1875: + ldr x2, [x20,1232] + ldr w2, [x2,x23] + cmp w1, w2 + beq .L1854 + ldr x1, [x20,1040] + ldr x26, [x20,1104] + str x1, [x27,8] + mov w1, 1 + str x26, [x27,16] + mov w2, w1 + ldr w0, [x0,x23] + str w0, [x27,4] + mov x0, x27 + bl FlashReadPages + ldr w0, [x27] + mov w3, 0 + cmn w0, #1 + beq .L1856 + ldrh w1, [x26] + ldrh w0, [x20,3700] + cmp w1, w0 + bne .L1856 + ldr w3, [x26,4] +.L1856: + ldr x0, [x20,1232] + mov w1, 1 + mov w2, w1 + str x3, [x29,120] + ldr w0, [x0,x23] + str w0, [x27,4] + mov x0, x27 + bl FlashReadPages + ldr w4, [x26,4] + ldr x3, [x29,120] + cmp w3, w4 + bls .L1854 + ldr x1, [x20,1240] + mov x0, x25 + ldr x2, [x20,1232] + ldr w1, [x1,x23] + ldr w2, [x2,x23] + bl printk + ldr x0, [x20,1240] + ldr w1, [x0,x23] + ldr x0, [x20,1232] + str w1, [x0,x23] + mov w1, 0 + ldr x0, [x20,1240] + ldrh w3, [x20,3904] + ldr w2, [x0,x23] + ubfx x2, x2, 10, 16 +.L1857: + cmp w1, w3 + bge .L1876 + ldrh w0, [x22,w1,sxtw 1] + cmp w0, w2 + beq .L1854 + add w1, w1, 1 + sxth w1, w1 + b .L1857 +.L1876: + ldr w0, [x20,840] + cmp w3, w0 + bcs .L1854 + ubfiz x3, x3, 1, 16 + strh w2, [x22,x3] + ldrh w0, [x20,3904] + add w0, w0, 1 + strh w0, [x20,3904] + mov w0, w2 + bl remove_from_free_sys_Queue + b .L1854 +.L1851: + mov x0, x19 + bl ftl_map_blk_gc + mov x0, x19 + bl ftl_map_blk_gc + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size FtlMapTblRecovery, .-FtlMapTblRecovery + .align 2 + .global FtlLoadVonderInfo + .type FtlLoadVonderInfo, %function +FtlLoadVonderInfo: + adrp x1, .LANCHOR2 + add x1, x1, :lo12:.LANCHOR2 + stp x29, x30, [sp, -16]! + add x0, x1, 3768 + add x29, sp, 0 + ldrh w2, [x1,832] + strh w2, [x0,10] + mov w2, -3962 + strh w2, [x0,4] + ldrh w2, [x1,1384] + strh w2, [x0,8] + ldrh w2, [x1,834] + strh w2, [x0,6] + ldr x2, [x1,1200] + str x2, [x0,16] + ldr x2, [x1,1216] + str x2, [x0,24] + ldr x2, [x1,1208] + ldr x1, [x1,1224] + str x1, [x0,40] + mov w1, -1 + str x2, [x0,32] + strh w1, [x0,60] + bl FtlMapTblRecovery + mov w0, 0 + ldp x29, x30, [sp], 16 + ret + .size FtlLoadVonderInfo, .-FtlLoadVonderInfo + .align 2 + .global FtlL2PDataInit + .type FtlL2PDataInit, %function +FtlL2PDataInit: + stp x29, x30, [sp, -32]! + mov w1, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR2 + add x19, x20, :lo12:.LANCHOR2 + ldr w2, [x19,840] + ldr x0, [x19,1192] + lsl w2, w2, 1 + bl ftl_memset + ldrh w3, [x19,820] + mov w1, 255 + ldrh w2, [x19,850] + ldr x0, [x19,1264] + mul w2, w3, w2 + bl ftl_memset + mov w2, 0 + mov w4, -1 +.L1879: + add x0, x20, :lo12:.LANCHOR2 + ldrh w1, [x0,850] + cmp w1, w2 + bls .L1881 + ldr x3, [x0,1256] + ubfiz x1, x2, 4, 16 + add x3, x3, x1 + str wzr, [x3,4] + ldr x3, [x0,1256] + strh w4, [x3,x1] + ldr x3, [x0,1256] + add x3, x3, x1 + ldrh w1, [x0,820] + ldr x0, [x0,1264] + mul w1, w1, w2 + add w2, w2, 1 + sxtw x1, w1 + uxth w2, w2 + and x1, x1, -4 + add x0, x0, x1 + str x0, [x3,8] + b .L1879 +.L1881: + ldr w3, [x0,840] + add x1, x0, 3696 + strh w3, [x0,3706] + mov w3, -3902 + strh w3, [x0,3700] + mov w2, -1 + ldrh w3, [x0,3904] + strh w3, [x0,3704] + ldrh w3, [x0,848] + strh w3, [x0,3702] + ldr x3, [x0,1184] + str x3, [x0,3712] + ldr x3, [x0,1248] + str x3, [x0,3720] + ldr x3, [x0,1192] + strh w2, [x0,3698] + strh w2, [x0,3696] + str x3, [x0,3728] + ldr x0, [x0,1232] + str x0, [x1,40] + strh w2, [x1,60] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlL2PDataInit, .-FtlL2PDataInit + .align 2 + .global FtlLoadMapInfo + .type FtlLoadMapInfo, %function +FtlLoadMapInfo: + stp x29, x30, [sp, -16]! + add x29, sp, 0 + bl FtlL2PDataInit + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + add x0, x0, 3696 + bl FtlMapTblRecovery + mov w0, 0 + ldp x29, x30, [sp], 16 + ret + .size FtlLoadMapInfo, .-FtlLoadMapInfo + .align 2 + .global ftl_sb_update_avl_pages + .type ftl_sb_update_avl_pages, %function +ftl_sb_update_avl_pages: + adrp x3, .LANCHOR2 + uxth w1, w1 + add x4, x3, :lo12:.LANCHOR2 + uxth w2, w2 + strh wzr, [x0,4] + mov w6, 65535 + ldrh w4, [x4,740] +.L1884: + cmp w2, w4 + bcs .L1890 + add x5, x0, x2, sxtw 1 + ldrh w5, [x5,16] + cmp w5, w6 + beq .L1885 + ldrh w5, [x0,4] + add w5, w5, 1 + strh w5, [x0,4] +.L1885: + add w2, w2, 1 + uxth w2, w2 + b .L1884 +.L1890: + add x3, x3, :lo12:.LANCHOR2 + mov w6, 65535 + add x4, x0, x4, uxth 1 + ldrh w5, [x3,810] + mov x3, x0 +.L1887: + cmp x3, x4 + beq .L1891 + ldrh w2, [x3,16] + cmp w2, w6 + beq .L1888 + ldrh w2, [x0,4] + add w2, w5, w2 + sub w2, w2, #1 + sub w2, w2, w1 + strh w2, [x0,4] +.L1888: + add x3, x3, 2 + b .L1887 +.L1891: + ret + .size ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages + .align 2 + .global FtlReUsePrevPpa + .type FtlReUsePrevPpa, %function +FtlReUsePrevPpa: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + mov w20, w0 + lsr x0, x1, 10 + stp x21, x22, [sp,32] + str w1, [x29,60] + adrp x21, .LANCHOR2 + bl P2V_block_in_plane + uxth w0, w0 + add x2, x21, :lo12:.LANCHOR2 + ubfiz x22, x0, 1, 16 + ldr x3, [x2,1176] + ldrh w1, [x3,x22] + cbnz w1, .L1893 + ldr x19, [x2,3536] + cbz x19, .L1894 + ldrh w3, [x2,3544] + mov x4, -6148914691236517206 + ldr x2, [x2,1272] + mov w5, 65535 + sub x19, x19, x2 + asr x19, x19, 1 + madd x19, x4, x19, x19 + mov w4, 6 + uxth w19, w19 +.L1895: + cmp w1, w3 + beq .L1894 + cmp w19, w0 + bne .L1896 + add x21, x21, :lo12:.LANCHOR2 + mov w1, w19 + add x0, x21, 3536 + bl List_remove_node + ldrh w0, [x21,3544] + sub w0, w0, #1 + strh w0, [x21,3544] + mov w0, w19 + bl INSERT_DATA_LIST + ldr x1, [x21,1176] + ldrh w0, [x1,x22] + add w0, w0, 1 + strh w0, [x1,x22] + b .L1894 +.L1896: + umull x19, w19, w4 + ldrh w19, [x2,x19] + cmp w19, w5 + beq .L1894 + add w1, w1, 1 + uxth w1, w1 + b .L1895 +.L1893: + add w1, w1, 1 + strh w1, [x3,x22] +.L1894: + add x1, x29, 60 + mov w0, w20 + mov w2, 1 + bl log2phys + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size FtlReUsePrevPpa, .-FtlReUsePrevPpa + .align 2 + .global make_superblock + .type make_superblock, %function +make_superblock: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + mov x19, x0 + strh wzr, [x0,4] + strb wzr, [x0,7] + adrp x0, .LANCHOR2 + add x1, x0, :lo12:.LANCHOR2 + add x22, x19, 16 + mov x21, 0 + mov x20, x0 + mov x23, x1 + mov w25, -1 + ldrh w24, [x1,740] +.L1902: + cmp w24, w21, uxth + bls .L1913 + add x0, x23, 768 + ldrh w1, [x19] + ldrb w0, [x0,x21] + bl V2P_block + strh w25, [x22] + mov w26, w0 + bl FtlBbmIsBadBlock + cbnz w0, .L1903 + strh w26, [x22] + ldrb w0, [x19,7] + add w0, w0, 1 + strb w0, [x19,7] +.L1903: + add x21, x21, 1 + add x22, x22, 2 + b .L1902 +.L1913: + add x0, x20, :lo12:.LANCHOR2 + ldrb w1, [x19,7] + strb wzr, [x19,9] + ldrh w2, [x0,810] + mul w1, w1, w2 + strh w1, [x19,4] + ldr w1, [x0,3908] + cbz w1, .L1905 + ldrh w1, [x19] + ldr x0, [x0,1160] + ldrh w0, [x0,x1,lsl 1] + cmp w0, 59 + bhi .L1905 + mov w0, 1 + strb w0, [x19,9] +.L1905: + adrp x0, .LANCHOR0+24 + ldrb w0, [x0,#:lo12:.LANCHOR0+24] + cbz w0, .L1906 + mov w0, 1 + strb w0, [x19,9] +.L1906: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size make_superblock, .-make_superblock + .align 2 + .global FtlLoadSysInfo + .type FtlLoadSysInfo, %function +FtlLoadSysInfo: + stp x29, x30, [sp, -64]! + mov w1, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + str x23, [sp,48] + add x20, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + add x21, x20, 1400 + add x23, x20, 3840 + ldr x0, [x20,1104] + ldrh w2, [x20,748] + str x0, [x21,16] + ldr x0, [x20,1176] + lsl w2, w2, 1 + str xzr, [x21,8] + bl ftl_memset + ldrh w0, [x20,3840] + mov w1, 65535 + cmp w0, w1 + bne .L1915 +.L1923: + mov w19, -1 + b .L1916 +.L1915: + mov w1, 1 + bl FtlGetLastWrittenPage + sxth w22, w0 + add w0, w0, 1 + strh w0, [x23,2] + mov w23, 61604 +.L1917: + tbnz w22, #31, .L1922 + ldrh w0, [x20,3840] + mov w1, 1 + mov w2, w1 + orr w0, w22, w0, lsl 10 + str w0, [x21,4] + ldr x0, [x20,1040] + str x0, [x21,8] + mov x0, x21 + bl FlashReadPages + ldr w0, [x21] + cmn w0, #1 + beq .L1918 + ldr x0, [x20,1040] + ldr w1, [x0] + mov w0, 19539 + movk w0, 0x4654, lsl 16 + cmp w1, w0 + bne .L1918 + ldr x0, [x20,1104] + ldrh w0, [x0] + cmp w0, w23 + bne .L1918 +.L1922: + add x20, x19, :lo12:.LANCHOR2 + mov w2, 48 + add x22, x20, 1400 + add x0, x20, 3856 + adrp x21, .LANCHOR0 + ldr x1, [x22,8] + bl ftl_memcpy + ldr x1, [x22,8] + ldrh w2, [x20,748] + ldr x0, [x20,1176] + add x1, x1, 48 + lsl w2, w2, 1 + bl ftl_memcpy + ldrh w2, [x20,748] + add x0, x21, :lo12:.LANCHOR0 + ldr x3, [x22,8] + uxth x1, w2 + ldr x0, [x0,16] + add x1, x1, 24 + lsr w2, w2, 3 + lsr x1, x1, 1 + add w2, w2, 4 + add x1, x3, x1, lsl 2 + bl ftl_memcpy + ldrh w0, [x20,852] + cbz w0, .L1920 + ldrh w0, [x20,748] + ldr x3, [x22,8] + lsr w1, w0, 3 + ldrh w2, [x20,848] + add w1, w1, w0, lsl 1 + ldr x0, [x20,1240] + add w1, w1, 52 + lsl w2, w2, 2 + and x1, x1, 65532 + add x1, x3, x1 + bl ftl_memcpy + b .L1920 +.L1918: + sub w22, w22, #1 + sxth w22, w22 + b .L1917 +.L1920: + add x0, x19, :lo12:.LANCHOR2 + mov w2, 19539 + movk w2, 0x4654, lsl 16 + ldr w3, [x0,3856] + cmp w3, w2 + bne .L1923 + ldrb w3, [x0,3866] + ldrh w2, [x0,762] + ldrh w4, [x0,3864] + strh w4, [x0,3846] + cmp w3, w2 + bne .L1923 + ldrh w3, [x0,810] + add x21, x21, :lo12:.LANCHOR0 + ldrh w2, [x0,816] + str w4, [x0,3912] + mul w3, w3, w4 + str w3, [x0,1388] + strh wzr, [x0,3922] + mul w3, w3, w2 + str w3, [x21,4048] + ldrh w2, [x0,1294] + ldr w3, [x0,752] + strb wzr, [x0,3926] + sub w2, w3, w2 + ldrh w3, [x0,740] + sub w2, w2, w4 + ldrh w4, [x0,3870] + strh w4, [x0,3552] + udiv w2, w2, w3 + ldrh w3, [x0,3872] + strh w2, [x0,3916] + lsr w5, w3, 6 + and w3, w3, 63 + strb w3, [x0,3558] + ldrb w3, [x0,3867] + strb w3, [x0,3560] + mov w3, -1 + strh w3, [x0,3920] + ldrh w3, [x0,3874] + strh w3, [x0,3600] + ldrh w3, [x0,3876] + strh w5, [x0,3554] + lsr w5, w3, 6 + and w3, w3, 63 + strb w3, [x0,3606] + ldrb w3, [x0,3868] + strb w3, [x0,3608] + ldrh w3, [x0,3878] + strh w3, [x0,3648] + ldrh w3, [x0,3880] + strh w5, [x0,3602] + lsr w5, w3, 6 + and w3, w3, 63 + strb wzr, [x0,3928] + strb w3, [x0,3654] + strh w5, [x0,3650] + ldrb w3, [x0,3869] + strb w3, [x0,3656] + ldr w2, [x0,3888] + str w2, [x0,896] + ldr w1, [x0,3896] + ldr w2, [x0,864] + str wzr, [x0,872] + str wzr, [x0,876] + cmp w1, w2 + str wzr, [x0,892] + str wzr, [x0,888] + str wzr, [x0,900] + str wzr, [x0,908] + str wzr, [x0,884] + bls .L1924 + str w1, [x0,864] +.L1924: + add x0, x19, :lo12:.LANCHOR2 + ldr w1, [x0,3892] + ldr w2, [x0,868] + cmp w1, w2 + bls .L1925 + str w1, [x0,868] +.L1925: + mov w0, 65535 + cmp w4, w0 + beq .L1926 + add x0, x19, :lo12:.LANCHOR2 + add x0, x0, 3552 + bl make_superblock +.L1926: + add x1, x19, :lo12:.LANCHOR2 + add x0, x1, 3600 + ldrh w2, [x1,3600] + mov w1, 65535 + cmp w2, w1 + beq .L1927 + bl make_superblock +.L1927: + add x1, x19, :lo12:.LANCHOR2 + add x0, x1, 3648 + ldrh w2, [x1,3648] + mov w1, 65535 + cmp w2, w1 + beq .L1928 + bl make_superblock +.L1928: + add x19, x19, :lo12:.LANCHOR2 + mov w1, 65535 + add x0, x19, 3920 + ldrh w2, [x19,3920] + mov w19, 0 + cmp w2, w1 + beq .L1916 + bl make_superblock +.L1916: + mov w0, w19 + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size FtlLoadSysInfo, .-FtlLoadSysInfo + .align 2 + .global SupperBlkListInit + .type SupperBlkListInit, %function +SupperBlkListInit: + stp x29, x30, [sp, -112]! + mov w1, 0 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR2 + stp x19, x20, [sp,16] + add x19, x21, :lo12:.LANCHOR2 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov w23, 6 + mov w27, 0 + ldrh w2, [x19,750] + mov w22, w27 + ldr x0, [x19,1272] + mov w24, -1 + mov w25, 32768 + mul w2, w2, w23 + bl ftl_memset + str xzr, [x19,3536] + str xzr, [x19,3512] + str xzr, [x19,3520] + strh wzr, [x19,3528] + strh wzr, [x19,3544] + strh wzr, [x19,854] + mov w19, w27 +.L1934: + add x0, x21, :lo12:.LANCHOR2 + ldrh w1, [x0,748] + cmp w19, w1 + bge .L1941 + mov w20, 0 + ldrh w3, [x0,740] + ldrh w2, [x0,810] + mov w28, w20 + mov x26, x0 +.L1942: + cmp w28, w3 + bge .L1943 + add x0, x26, 768 + mov w1, w19 + str x2, [x29,96] + str x3, [x29,104] + ldrb w0, [x0,w28,sxtw] + bl V2P_block + bl FtlBbmIsBadBlock + ldr x3, [x29,104] + ldr x2, [x29,96] + cbnz w0, .L1935 + add w20, w2, w20 + sxth w20, w20 +.L1935: + add w28, w28, 1 + sxth w28, w28 + b .L1942 +.L1943: + cbz w20, .L1937 + sdiv w20, w25, w20 + sxth w20, w20 + b .L1938 +.L1937: + add x0, x21, :lo12:.LANCHOR2 + ldr x0, [x0,1176] + strh w24, [x0,w19,sxtw 1] +.L1938: + add x0, x21, :lo12:.LANCHOR2 + ldr x1, [x0,1272] + smaddl x1, w19, w23, x1 + strh w20, [x1,4] + ldrh w1, [x0,3552] + cmp w19, w1 + beq .L1939 + ldrh w1, [x0,3600] + cmp w19, w1 + beq .L1939 + ldrh w1, [x0,3648] + cmp w19, w1 + beq .L1939 + ldr x0, [x0,1176] + ldrh w0, [x0,w19,sxtw 1] + cbnz w0, .L1940 + add w27, w27, 1 + mov w0, w19 + uxth w27, w27 + bl INSERT_FREE_LIST + b .L1939 +.L1940: + add w22, w22, 1 + mov w0, w19 + uxth w22, w22 + bl INSERT_DATA_LIST +.L1939: + add w19, w19, 1 + sxth w19, w19 + b .L1934 +.L1941: + strh w22, [x0,3528] + strh w27, [x0,3544] + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size SupperBlkListInit, .-SupperBlkListInit + .align 2 + .global Ftl_save_ext_data + .type Ftl_save_ext_data, %function +Ftl_save_ext_data: + adrp x0, .LANCHOR2 + mov w1, 19539 + add x0, x0, :lo12:.LANCHOR2 + movk w1, 0x4654, lsl 16 + stp x29, x30, [sp, -16]! + add x2, x0, 3968 + add x29, sp, 0 + ldr w3, [x0,3968] + cmp w3, w1 + bne .L1944 + mov w1, 71 + movk w1, 0x5000, lsl 16 + str w1, [x2,4] + adrp x1, .LANCHOR4 + add x1, x1, :lo12:.LANCHOR4 + ldr w3, [x1,128] + ldr w1, [x1,132] + str w1, [x2,92] + ldr w1, [x0,872] + str w1, [x2,8] + ldr w1, [x0,876] + str w1, [x2,12] + ldr w1, [x0,892] + str w1, [x2,16] + ldr w1, [x0,888] + str w1, [x2,20] + ldr w1, [x0,900] + str w1, [x2,28] + ldr w1, [x0,904] + str w1, [x2,32] + ldr w1, [x0,880] + str w1, [x2,36] + ldr w1, [x0,884] + str w1, [x2,40] + ldr w1, [x0,908] + str w1, [x2,44] + ldr w1, [x0,912] + str w1, [x2,48] + ldr w1, [x0,860] + ldr w0, [x0,856] + str w1, [x2,60] + mov w1, 1 + str w0, [x2,64] + mov w0, 0 + str w3, [x2,88] + bl FtlVendorPartWrite +.L1944: + ldp x29, x30, [sp], 16 + ret + .size Ftl_save_ext_data, .-Ftl_save_ext_data + .align 2 + .global FtlEctTblFlush + .type FtlEctTblFlush, %function +FtlEctTblFlush: + adrp x2, .LANCHOR2 + mov w1, 32 + add x3, x2, :lo12:.LANCHOR2 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr w4, [x3,3908] + cbz w4, .L1947 + ldr w3, [x3,912] + cmp w3, 29 + mov w3, 4 + csel w1, w1, w3, hi +.L1947: + adrp x3, .LANCHOR4 + add x3, x3, :lo12:.LANCHOR4 + ldrh w4, [x3,136] + cmp w4, 31 + bhi .L1948 + add w4, w4, 1 + mov w1, 1 + strh w4, [x3,136] +.L1948: + cbnz w0, .L1949 + add x0, x2, :lo12:.LANCHOR2 + ldr x3, [x0,1152] + ldr w0, [x3,20] + add w1, w1, w0 + ldr w0, [x3,16] + cmp w0, w1 + bcc .L1950 +.L1949: + add x2, x2, :lo12:.LANCHOR2 + ldr x0, [x2,1152] + ldr w1, [x0,16] + str w1, [x0,20] + mov w1, 17221 + movk w1, 0x4254, lsl 16 + str w1, [x0] + ldr x0, [x2,1152] + ldrh w1, [x2,1136] + str wzr, [x0,4] + lsl w3, w1, 9 + str w3, [x0,12] + ldr w3, [x0,8] + ldr x2, [x2,1152] + add w3, w3, 1 + str w3, [x0,8] + mov w0, 64 + bl FtlVendorPartWrite + bl Ftl_save_ext_data +.L1950: + mov w0, 0 + ldp x29, x30, [sp], 16 + ret + .size FtlEctTblFlush, .-FtlEctTblFlush + .align 2 + .global Ftl_load_ext_data + .type Ftl_load_ext_data, %function +Ftl_load_ext_data: + stp x29, x30, [sp, -48]! + mov w1, 1 + mov w0, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + str x21, [sp,32] + add x20, x19, :lo12:.LANCHOR2 + add x21, x20, 3968 + mov x2, x21 + bl FtlVendorPartRead + ldr w1, [x20,3968] + mov w0, 19539 + movk w0, 0x4654, lsl 16 + cmp w1, w0 + beq .L1955 + mov x0, x21 + mov w1, 0 + mov w2, 512 + bl ftl_memset + mov w0, 19539 + movk w0, 0x4654, lsl 16 + str w0, [x20,3968] +.L1955: + add x0, x19, :lo12:.LANCHOR2 + mov w2, 19539 + movk w2, 0x4654, lsl 16 + adrp x20, .LANCHOR4 + ldr w3, [x0,3968] + cmp w3, w2 + bne .L1956 + add x2, x20, :lo12:.LANCHOR4 + ldr w3, [x0,4056] + ldr w1, [x0,4028] + str w1, [x0,860] + str w3, [x2,128] + ldr w3, [x0,4060] + str w3, [x2,132] + ldr w2, [x0,3976] + str w2, [x0,872] + ldr w2, [x0,3980] + str w2, [x0,876] + ldr w2, [x0,3984] + str w2, [x0,892] + ldr w2, [x0,3988] + str w2, [x0,888] + ldr w2, [x0,3996] + str w2, [x0,900] + ldr w2, [x0,4000] + str w2, [x0,904] + ldr w2, [x0,4004] + str w2, [x0,880] + ldr w2, [x0,4008] + str w2, [x0,884] + ldr w2, [x0,4012] + str w2, [x0,908] + ldr w2, [x0,4016] + str w2, [x0,912] +.L1956: + add x0, x19, :lo12:.LANCHOR2 + mov w1, 34661 + movk w1, 0x1234, lsl 16 + ldr w2, [x0,4036] + str wzr, [x0,856] + cmp w2, w1 + bne .L1957 + mov w1, 1 + str w1, [x0,3908] + adrp x0, .LC42 + adrp x1, .LC45 + add x0, x0, :lo12:.LC42 + add x1, x1, :lo12:.LC45 + bl printk +.L1957: + add x0, x19, :lo12:.LANCHOR2 + add x20, x20, :lo12:.LANCHOR4 + ldrh w2, [x0,800] + ldr w3, [x0,896] + ldr w1, [x0,900] + ldrh w0, [x0,748] + madd w1, w2, w3, w1 + udiv w0, w1, w0 + str w0, [x20,140] + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size Ftl_load_ext_data, .-Ftl_load_ext_data + .align 2 + .global update_multiplier_value + .type update_multiplier_value, %function +update_multiplier_value: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + uxth w20, w0 + adrp x0, .LANCHOR2 + add x1, x0, :lo12:.LANCHOR2 + str x25, [sp,64] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + mov x22, 0 + mov x21, x0 + ldrh w24, [x1,740] + mov w19, w22 + ldrh w25, [x1,810] + mov x23, x1 +.L1959: + cmp w24, w22, uxth + bls .L1966 + add x0, x23, 768 + mov w1, w20 + ldrb w0, [x0,x22] + bl V2P_block + bl FtlBbmIsBadBlock + cbnz w0, .L1960 + add w19, w19, w25 + uxth w19, w19 +.L1960: + add x22, x22, 1 + b .L1959 +.L1966: + cbz w19, .L1962 + mov w0, 32768 + sdiv w19, w0, w19 +.L1962: + add x0, x21, :lo12:.LANCHOR2 + mov w1, 6 + umull x20, w20, w1 + ldr x0, [x0,1272] + add x20, x0, x20 + mov w0, 0 + strh w19, [x20,4] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldr x25, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size update_multiplier_value, .-update_multiplier_value + .align 2 + .global GetFreeBlockMinEraseCount + .type GetFreeBlockMinEraseCount, %function +GetFreeBlockMinEraseCount: + adrp x2, .LANCHOR2 + add x2, x2, :lo12:.LANCHOR2 + ldr x1, [x2,3536] + mov w0, w1 + cbz x1, .L1968 + ldr x0, [x2,1272] + sub x1, x1, x0 + mov x0, -6148914691236517206 + asr x1, x1, 1 + madd x1, x0, x1, x1 + ldr x0, [x2,1160] + and x1, x1, 65535 + ldrh w0, [x0,x1,lsl 1] +.L1968: + ret + .size GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount + .align 2 + .global GetFreeBlockMaxEraseCount + .type GetFreeBlockMaxEraseCount, %function +GetFreeBlockMaxEraseCount: + adrp x2, .LANCHOR2 + uxth w4, w0 + add x5, x2, :lo12:.LANCHOR2 + ldr x1, [x5,3536] + mov w0, w1 + cbz x1, .L1971 + ldrh w3, [x5,3544] + mov w0, 7 + mov w6, 6 + mov w7, 65535 + mul w3, w3, w0 + ldr x0, [x5,1272] + asr w3, w3, 3 + cmp w4, w3 + sub x1, x1, x0 + csel w4, w3, w4, gt + asr x1, x1, 1 + mov x3, -6148914691236517206 + madd x1, x3, x1, x1 + mov w3, 0 + uxth w1, w1 +.L1973: + cmp w3, w4 + beq .L1976 + umull x5, w1, w6 + ldrh w5, [x0,x5] + cmp w5, w7 + bne .L1974 +.L1976: + add x2, x2, :lo12:.LANCHOR2 + ubfiz x1, x1, 1, 16 + ldr x0, [x2,1160] + ldrh w0, [x0,x1] + b .L1971 +.L1974: + add w3, w3, 1 + mov w1, w5 + uxth w3, w3 + b .L1973 +.L1971: + ret + .size GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount + .align 2 + .global FtlPrintInfo2buf + .type FtlPrintInfo2buf, %function +FtlPrintInfo2buf: + stp x29, x30, [sp, -112]! + adrp x1, .LC46 + add x29, sp, 0 + stp x25, x26, [sp,64] + adrp x25, .LANCHOR0 + add x1, x1, :lo12:.LC46 + add x25, x25, :lo12:.LANCHOR0 + str x27, [sp,80] + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + mov x23, x0 + bl strcpy + add x20, x23, 12 + ldr w2, [x25,4016] + adrp x1, .LC47 + adrp x24, .LANCHOR2 + mov x0, x20 + add x1, x1, :lo12:.LC47 + add x22, x24, :lo12:.LANCHOR2 + bl sprintf + add x20, x20, x0, sxtw + adrp x1, .LC48 + mov x0, x20 + ldr w2, [x22,828] + add x1, x1, :lo12:.LC48 + bl sprintf + add x20, x20, x0, sxtw + adrp x0, .LANCHOR1+3032 + ldr w0, [x0,#:lo12:.LANCHOR1+3032] + cmp w0, 1 + beq .L1979 + sub w0, w20, w23 + b .L1980 +.L1979: + add x0, x29, 96 + add x1, x29, 100 + add x2, x29, 104 + add x3, x29, 108 + adrp x19, .LANCHOR4 + bl NandcGetTimeCfg + add x19, x19, :lo12:.LANCHOR4 + ldr w4, [x29,104] + adrp x1, .LC49 + ldr w5, [x29,108] + add x1, x1, :lo12:.LC49 + ldr w3, [x29,100] + mov x0, x20 + ldr w2, [x29,96] + bl sprintf + add x21, x20, x0, sxtw + adrp x1, .LC50 + mov x0, x21 + add x1, x1, :lo12:.LC50 + add x21, x21, 10 + bl strcpy + ldr w2, [x22,1388] + adrp x1, .LC51 + mov x0, x21 + add x1, x1, :lo12:.LC51 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,3836] + adrp x1, .LC52 + mov x0, x21 + add x1, x1, :lo12:.LC52 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,892] + adrp x1, .LC53 + mov x0, x21 + add x1, x1, :lo12:.LC53 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,880] + adrp x1, .LC54 + mov x0, x21 + add x1, x1, :lo12:.LC54 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,876] + adrp x1, .LC55 + mov x0, x21 + add x1, x1, :lo12:.LC55 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,884] + adrp x1, .LC56 + mov x0, x21 + add x1, x1, :lo12:.LC56 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,888] + adrp x1, .LC57 + mov x0, x21 + add x1, x1, :lo12:.LC57 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,872] + adrp x1, .LC58 + mov x0, x21 + add x1, x1, :lo12:.LC58 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x19,128] + adrp x1, .LC59 + mov x0, x21 + add x1, x1, :lo12:.LC59 + lsr w2, w2, 11 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x19,132] + adrp x1, .LC60 + mov x0, x21 + add x1, x1, :lo12:.LC60 + lsr w2, w2, 11 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,864] + adrp x1, .LC61 + mov x0, x21 + add x1, x1, :lo12:.LC61 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,868] + adrp x1, .LC62 + add x1, x1, :lo12:.LC62 + mov x0, x21 + bl sprintf + add x21, x21, x0, sxtw + bl FtlBbtCalcTotleCnt + uxth w3, w0 + ldrh w2, [x22,1294] + adrp x1, .LC63 + mov x0, x21 + add x1, x1, :lo12:.LC63 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3544] + adrp x1, .LC64 + mov x0, x21 + add x1, x1, :lo12:.LC64 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,896] + adrp x1, .LC65 + mov x0, x21 + add x1, x1, :lo12:.LC65 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,900] + adrp x1, .LC66 + mov x0, x21 + add x1, x1, :lo12:.LC66 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x19,140] + adrp x1, .LC67 + mov x0, x21 + add x1, x1, :lo12:.LC67 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,904] + adrp x1, .LC68 + mov x0, x21 + add x1, x1, :lo12:.LC68 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,908] + adrp x1, .LC69 + mov x0, x21 + add x1, x1, :lo12:.LC69 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,912] + adrp x1, .LC70 + mov x0, x21 + add x1, x1, :lo12:.LC70 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3886] + adrp x1, .LC71 + mov x0, x21 + add x1, x1, :lo12:.LC71 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3884] + adrp x1, .LC72 + mov x0, x21 + add x1, x1, :lo12:.LC72 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x25,4048] + adrp x1, .LC73 + mov x0, x21 + add x1, x1, :lo12:.LC73 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,844] + adrp x1, .LC74 + mov x0, x21 + add x1, x1, :lo12:.LC74 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,736] + adrp x1, .LC75 + mov x0, x21 + add x1, x1, :lo12:.LC75 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,1462] + adrp x1, .LC76 + mov x0, x21 + add x1, x1, :lo12:.LC76 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,748] + adrp x1, .LC77 + mov x0, x21 + add x1, x1, :lo12:.LC77 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3916] + adrp x1, .LC78 + mov x0, x21 + add x1, x1, :lo12:.LC78 + bl sprintf + add x21, x21, x0, sxtw + ldr w2, [x22,752] + adrp x1, .LC79 + mov x0, x21 + add x1, x1, :lo12:.LC79 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3840] + adrp x1, .LC80 + mov x0, x21 + add x1, x1, :lo12:.LC80 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,1288] + adrp x1, .LC81 + mov x0, x21 + add x1, x1, :lo12:.LC81 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3554] + adrp x1, .LC82 + mov x0, x21 + add x1, x1, :lo12:.LC82 + bl sprintf + add x21, x21, x0, sxtw + ldrb w2, [x22,3558] + adrp x1, .LC83 + mov x0, x21 + add x1, x1, :lo12:.LC83 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3552] + adrp x1, .LC84 + mov x0, x21 + add x1, x1, :lo12:.LC84 + bl sprintf + add x21, x21, x0, sxtw + ldrb w2, [x22,3560] + adrp x1, .LC85 + mov x0, x21 + add x1, x1, :lo12:.LC85 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3556] + adrp x1, .LC86 + mov x0, x21 + add x1, x1, :lo12:.LC86 + bl sprintf + add x21, x21, x0, sxtw + ldrh w3, [x22,3552] + adrp x1, .LC87 + ldr x2, [x22,1176] + mov x0, x21 + add x1, x1, :lo12:.LC87 + ldrh w2, [x2,x3,lsl 1] + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3602] + adrp x1, .LC88 + mov x0, x21 + add x1, x1, :lo12:.LC88 + bl sprintf + add x21, x21, x0, sxtw + ldrb w2, [x22,3606] + adrp x1, .LC89 + mov x0, x21 + add x1, x1, :lo12:.LC89 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3600] + adrp x1, .LC90 + mov x0, x21 + add x1, x1, :lo12:.LC90 + bl sprintf + add x21, x21, x0, sxtw + ldrb w2, [x22,3608] + adrp x1, .LC91 + mov x0, x21 + add x1, x1, :lo12:.LC91 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3604] + adrp x1, .LC92 + mov x0, x21 + add x1, x1, :lo12:.LC92 + bl sprintf + add x21, x21, x0, sxtw + ldrh w3, [x22,3600] + adrp x1, .LC93 + ldr x2, [x22,1176] + mov x0, x21 + add x1, x1, :lo12:.LC93 + ldrh w2, [x2,x3,lsl 1] + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3650] + adrp x1, .LC94 + mov x0, x21 + add x1, x1, :lo12:.LC94 + bl sprintf + add x21, x21, x0, sxtw + ldrb w2, [x22,3654] + adrp x1, .LC95 + mov x0, x21 + add x1, x1, :lo12:.LC95 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3648] + adrp x1, .LC96 + mov x0, x21 + add x1, x1, :lo12:.LC96 + bl sprintf + add x21, x21, x0, sxtw + ldrb w2, [x22,3656] + adrp x1, .LC97 + mov x0, x21 + add x1, x1, :lo12:.LC97 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3652] + adrp x1, .LC98 + mov x0, x21 + add x1, x1, :lo12:.LC98 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3922] + adrp x1, .LC99 + mov x0, x21 + add x1, x1, :lo12:.LC99 + bl sprintf + add x21, x21, x0, sxtw + ldrb w2, [x22,3926] + adrp x1, .LC100 + mov x0, x21 + add x1, x1, :lo12:.LC100 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3920] + adrp x1, .LC101 + mov x0, x21 + add x1, x1, :lo12:.LC101 + bl sprintf + add x21, x21, x0, sxtw + ldrb w2, [x22,3928] + adrp x1, .LC102 + mov x0, x21 + add x1, x1, :lo12:.LC102 + bl sprintf + add x21, x21, x0, sxtw + ldrh w2, [x22,3924] + adrp x1, .LC103 + mov x0, x21 + add x1, x1, :lo12:.LC103 + bl sprintf + add x21, x21, x0, sxtw + ldr w3, [x22,860] + adrp x1, .LC104 + ldr w2, [x22,3908] + add x1, x1, :lo12:.LC104 + ldr w4, [x22,4052] + mov x0, x21 + ldr w5, [x22,4044] + orr w2, w2, w3, lsl 8 + ldr w3, [x22,4048] + bl sprintf + add x19, x21, x0, sxtw + ldr w2, [x22,4040] + adrp x1, .LC105 + mov x0, x19 + add x1, x1, :lo12:.LC105 + bl sprintf + add x19, x19, x0, sxtw + ldr w2, [x22,4064] + adrp x1, .LC106 + mov x0, x19 + add x1, x1, :lo12:.LC106 + bl sprintf + add x19, x19, x0, sxtw + ldrh w2, [x22,944] + adrp x1, .LC107 + mov x0, x19 + add x1, x1, :lo12:.LC107 + bl sprintf + add x19, x19, x0, sxtw + ldrh w2, [x22,946] + adrp x1, .LC108 + mov x0, x19 + add x1, x1, :lo12:.LC108 + bl sprintf + add x19, x19, x0, sxtw + ldr w2, [x22,932] + adrp x1, .LC109 + mov x0, x19 + add x1, x1, :lo12:.LC109 + bl sprintf + add x19, x19, x0, sxtw + ldrh w2, [x22,948] + adrp x1, .LC110 + add x1, x1, :lo12:.LC110 + mov x0, x19 + bl sprintf + add x19, x19, x0, sxtw + bl GetFreeBlockMinEraseCount + uxth w2, w0 + adrp x1, .LC111 + mov x0, x19 + add x1, x1, :lo12:.LC111 + bl sprintf + add x19, x19, x0, sxtw + ldrh w0, [x22,3544] + bl GetFreeBlockMaxEraseCount + uxth w2, w0 + adrp x1, .LC112 + mov x0, x19 + add x1, x1, :lo12:.LC112 + bl sprintf + add x19, x19, x0, sxtw + ldrh w0, [x22,3920] + mov w1, 65535 + cmp w0, w1 + beq .L1981 + ubfiz x2, x0, 1, 16 + ldr x3, [x22,1176] + adrp x1, .LC113 + mov x0, x19 + add x1, x1, :lo12:.LC113 + ldrh w2, [x3,x2] + bl sprintf + add x19, x19, x0, sxtw +.L1981: + mov w0, 0 + adrp x22, .LC114 + mov w20, 0 + mov w27, 65535 + bl List_get_gc_head_node + mov w26, 6 + uxth w3, w0 + add x22, x22, :lo12:.LC114 +.L1983: + cmp w3, w27 + beq .L1982 + add x21, x24, :lo12:.LANCHOR2 + ubfiz x6, x3, 1, 16 + umull x25, w3, w26 + mov x0, x19 + mov w2, w20 + ldr x5, [x21,1272] + mov x1, x22 + ldr x4, [x21,1176] + add w20, w20, 1 + ldr x7, [x21,1160] + add x5, x5, x25 + ldrh w4, [x4,x6] + ldrh w5, [x5,4] + ldrh w6, [x7,x6] + bl sprintf + add x19, x19, x0, sxtw + ldr x0, [x21,1272] + cmp w20, 16 + ldrh w3, [x0,x25] + bne .L1983 +.L1982: + add x1, x24, :lo12:.LANCHOR2 + adrp x22, .LC115 + mov w20, 0 + mov w27, 65535 + mov w26, 6 + add x22, x22, :lo12:.LC115 + ldr x0, [x1,3536] + ldr x3, [x1,1272] + sub x3, x0, x3 + mov x0, -6148914691236517206 + asr x3, x3, 1 + madd x3, x0, x3, x3 + uxth w3, w3 +.L1985: + cmp w3, w27 + beq .L1984 + add x21, x24, :lo12:.LANCHOR2 + ubfiz x5, x3, 1, 16 + umull x25, w3, w26 + mov x0, x19 + mov w2, w20 + ldr x4, [x21,1272] + mov x1, x22 + ldr x6, [x21,1160] + add w20, w20, 1 + add x4, x4, x25 + ldrh w5, [x6,x5] + ldrh w4, [x4,4] + bl sprintf + add x19, x19, x0, sxtw + ldr x0, [x21,1272] + cmp w20, 4 + ldrh w3, [x0,x25] + bne .L1985 +.L1984: + sub w0, w19, w23 +.L1980: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldr x27, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size FtlPrintInfo2buf, .-FtlPrintInfo2buf + .align 2 + .global ftl_proc_ftl_read + .type ftl_proc_ftl_read, %function +ftl_proc_ftl_read: + stp x29, x30, [sp, -32]! + adrp x1, .LC42 + adrp x2, .LC116 + add x29, sp, 0 + add x1, x1, :lo12:.LC42 + add x2, x2, :lo12:.LC116 + stp x19, x20, [sp,16] + mov x20, x0 + bl sprintf + add x19, x20, x0, sxtw + mov x0, x19 + bl FtlPrintInfo2buf + add x0, x19, x0, sxtw + sub w0, w0, w20 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size ftl_proc_ftl_read, .-ftl_proc_ftl_read + .align 2 + .global GetSwlReplaceBlock + .type GetSwlReplaceBlock, %function +GetSwlReplaceBlock: + stp x29, x30, [sp, -96]! + adrp x0, .LANCHOR4 + add x1, x0, :lo12:.LANCHOR4 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + adrp x19, .LANCHOR2 + ldr w3, [x1,140] + add x1, x19, :lo12:.LANCHOR2 + ldr w2, [x1,912] + cmp w3, w2 + bcs .L1990 + str wzr, [x1,896] + ldrh w3, [x1,748] + ldr x5, [x1,1160] + mov x1, 0 +.L1991: + cmp w3, w1 + bls .L2023 + add x4, x19, :lo12:.LANCHOR2 + ldrh w6, [x5,x1,lsl 1] + add x1, x1, 1 + ldr w2, [x4,896] + add w2, w6, w2 + str w2, [x4,896] + b .L1991 +.L2023: + add x2, x19, :lo12:.LANCHOR2 + add x4, x0, :lo12:.LANCHOR4 + ldr w1, [x2,896] + udiv w3, w1, w3 + str w3, [x4,140] + ldr w3, [x2,900] + sub w1, w1, w3 + ldrh w3, [x2,800] + udiv w1, w1, w3 + str w1, [x2,896] + b .L1993 +.L1990: + ldr w2, [x1,908] + cmp w3, w2 + bls .L1993 + add w2, w2, 1 + str w2, [x1,908] + mov w1, 0 +.L1995: + add x2, x19, :lo12:.LANCHOR2 + ldrh w3, [x2,748] + cmp w1, w3 + bcs .L1993 + ubfiz x3, x1, 1, 32 + ldr x4, [x2,1160] + add w1, w1, 1 + ldrh w2, [x4,x3] + add w2, w2, 1 + strh w2, [x4,x3] + b .L1995 +.L1993: + add x1, x19, :lo12:.LANCHOR2 + add x0, x0, :lo12:.LANCHOR4 + ldr w21, [x1,912] + ldr w23, [x0,140] + add w0, w21, 256 + cmp w0, w23 + bls .L1998 + ldr w2, [x1,908] + add w0, w21, 768 + cmp w0, w2 + bls .L1998 + ldr w0, [x1,3908] + cbz w0, .L2001 + cmp w21, 30 + bls .L1998 +.L2001: + mov w0, 65535 + b .L2000 +.L1998: + add x0, x19, :lo12:.LANCHOR2 + ldrh w0, [x0,3544] + add w0, w0, w0, lsl 1 + lsr w0, w0, 2 + bl GetFreeBlockMaxEraseCount + uxth w6, w0 + add w0, w21, 64 + cmp w6, w0 + bcs .L2010 + cmp w21, 30 + bhi .L2001 +.L2010: + add x1, x19, :lo12:.LANCHOR2 + ldr x3, [x1,3512] + cbz x3, .L2001 + mov w26, 65535 + mov x0, -6148914691236517206 + ldrh w9, [x1,748] + mov w20, w26 + ldr x7, [x1,1272] + mov w8, w26 + ldr x25, [x1,1160] + add x0, x0, 1 + mov w1, 0 + mov w10, 6 +.L2003: + ldrh w5, [x3] + cmp w5, w8 + beq .L2005 + add w1, w1, 1 + uxth w1, w1 + cmp w1, w9 + bhi .L2001 + ldrh w2, [x3,4] + cbz w2, .L2004 + sub x4, x3, x7 + asr x4, x4, 1 + mul x4, x4, x0 + uxth w3, w4 + and x4, x4, 65535 + ldrh w2, [x25,x4,lsl 1] + cmp w2, w21 + bls .L2009 + cmp w2, w26 + bcs .L2004 + mov w26, w2 + mov w20, w3 +.L2004: + umull x3, w5, w10 + add x3, x7, x3 + b .L2003 +.L2009: + mov w20, w3 +.L2005: + mov w0, 65535 + cmp w20, w0 + beq .L2001 + ubfiz x24, x20, 1, 16 + ldrh w22, [x25,x24] + cmp w22, w21 + bls .L2007 + str x6, [x29,88] + bl GetFreeBlockMinEraseCount + ldr x6, [x29,88] + cmp w21, w0, uxth + bcs .L2007 + add x0, x19, :lo12:.LANCHOR2 + str w26, [x0,912] +.L2007: + cmp w22, w23 + bcs .L2001 + add w0, w22, 128 + cmp w6, w0 + ble .L2001 + add w0, w22, 256 + cmp w0, w23 + bcc .L2008 + add x0, x19, :lo12:.LANCHOR2 + add w22, w22, 768 + ldr w0, [x0,908] + cmp w22, w0 + bcs .L2001 +.L2008: + add x19, x19, :lo12:.LANCHOR2 + adrp x0, .LC117 + ldrh w5, [x25,x24] + add x0, x0, :lo12:.LC117 + mov w1, w20 + mov w2, w23 + ldr x4, [x19,1176] + ldr w3, [x19,908] + ldrh w4, [x4,x24] + bl printk + mov w0, 1 + str w0, [x19,920] + mov w0, w20 +.L2000: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size GetSwlReplaceBlock, .-GetSwlReplaceBlock + .align 2 + .global free_data_superblock + .type free_data_superblock, %function +free_data_superblock: + stp x29, x30, [sp, -16]! + uxth w0, w0 + mov w1, 65535 + cmp w0, w1 + add x29, sp, 0 + beq .L2025 + adrp x2, .LANCHOR2+1176 + ubfiz x1, x0, 1, 16 + ldr x2, [x2,#:lo12:.LANCHOR2+1176] + strh wzr, [x2,x1] + bl INSERT_FREE_LIST +.L2025: + mov w0, 0 + ldp x29, x30, [sp], 16 + ret + .size free_data_superblock, .-free_data_superblock + .align 2 + .global allocate_data_superblock + .type allocate_data_superblock, %function +allocate_data_superblock: + stp x29, x30, [sp, -144]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR2 + stp x19, x20, [sp,16] + add x19, x21, :lo12:.LANCHOR2 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + ldr w1, [x19,1392] + stp x27, x28, [sp,80] + cbnz w1, .L2027 + mov x20, x0 + add x23, x19, 3648 + adrp x22, .LANCHOR0 + mov w24, 7 + add x25, x19, 3536 +.L2028: + cmp x20, x23 + bne .L2029 + ldrh w2, [x19,3544] + ldr w4, [x19,920] + lsr w3, w2, 1 + add w1, w3, 1 + mul w0, w2, w4 + add w1, w1, w0, lsr 2 + ldr w0, [x19,3908] + uxth w1, w1 + cbz w0, .L2030 + ldr w0, [x19,912] + cmp w0, 29 + bhi .L2030 + cmp w0, 2 + mov w1, 0 + bls .L2031 + tbz x2, 0, .L2058 + cbz w4, .L2031 +.L2058: + mov w1, w3 + b .L2030 +.L2029: + ldrb w0, [x20,8] + mov w1, 0 + cmp w0, 1 + bne .L2031 + ldrh w0, [x19,760] + cmp w0, 1 + beq .L2031 + add x0, x22, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbnz w0, .L2031 + ldr w2, [x19,3908] + ldrh w0, [x19,3544] + lsr w1, w0, 3 + cbz w2, .L2030 + ldr w2, [x19,912] + cmp w2, 1 + bhi .L2030 + mul w1, w0, w24 + lsr w1, w1, 3 +.L2030: + cbz w1, .L2031 + sub w1, w1, #1 + uxth w1, w1 +.L2031: + ldrb w2, [x20,8] + mov x0, x25 + bl List_pop_index_node + uxth w27, w0 + ldrh w0, [x19,3544] + sub w0, w0, #1 + strh w0, [x19,3544] + strh w27, [x20] + mov x0, x20 + bl make_superblock + ldrb w0, [x20,7] + cbz w0, .L2033 + mov x0, 0 + ldrh w5, [x19,740] + mov w26, w0 + mov x3, 56 + mov w6, 65535 + b .L2034 +.L2033: + ubfiz x27, x27, 1, 16 + ldr x0, [x19,1176] + mov w1, -1 + strh w1, [x0,x27] + b .L2028 +.L2037: + ldr x4, [x19,1008] + madd x1, x0, x3, x4 + str xzr, [x1,16] + str xzr, [x1,8] + add x1, x20, x0, lsl 1 + ldrh w1, [x1,16] + cmp w1, w6 + beq .L2036 + umull x2, w26, w3 + add w26, w26, 1 + lsl w1, w1, 10 + add x2, x4, x2 + uxth w26, w26 + str w1, [x2,4] +.L2036: + add x0, x0, 1 +.L2034: + cmp w5, w0, uxth + bhi .L2037 + add x0, x19, 3552 + uxtw x28, w27 + cmp x20, x0 + bne .L2038 + ldr w1, [x19,3908] + cbz w1, .L2038 + ldr x1, [x19,1160] + ldrh w1, [x1,x28,lsl 1] + cmp w1, 30 + bls .L2038 + strb wzr, [x19,3560] +.L2038: + ldrb w0, [x20,8] + cbnz w0, .L2039 + lsl x0, x28, 1 + ldr x1, [x19,1160] + mov w2, 2 + ldrh w3, [x1,x0] + cbz w3, .L2083 + ldrh w2, [x19,800] + add w2, w3, w2 +.L2083: + strh w2, [x1,x0] + mov w1, 0 + ldr w0, [x19,896] + add w0, w0, 1 + str w0, [x19,896] + mov w0, w27 + bl ftl_set_blk_mode + b .L2042 +.L2039: + lsl x0, x28, 1 + ldr x2, [x19,1160] + ldrh w1, [x2,x0] + add w1, w1, 1 + strh w1, [x2,x0] + ldr w0, [x19,900] + add w0, w0, 1 + str w0, [x19,900] + mov w0, w27 + bl ftl_set_blk_mode.part.18 +.L2042: + lsl x28, x28, 1 + ldr x0, [x19,1160] + ldr w1, [x19,908] + ldrh w0, [x0,x28] + cmp w0, w1 + bls .L2043 + str w0, [x19,908] +.L2043: + ldrh w1, [x19,800] + mov x3, 56 + ldr w2, [x19,896] + ldr w0, [x19,900] + madd w0, w1, w2, w0 + ldrh w1, [x19,748] + udiv w0, w0, w1 + adrp x1, .LANCHOR4+140 + str w0, [x1,#:lo12:.LANCHOR4+140] + ldr x1, [x19,1152] + ldr w0, [x1,16] + add w0, w0, 1 + str w0, [x1,16] + mov x0, 0 +.L2044: + cmp w26, w0, uxth + bls .L2085 + ldr x1, [x19,1008] + madd x1, x0, x3, x1 + add x0, x0, 1 + ldr w2, [x1,4] + and w2, w2, -1024 + str w2, [x1,4] + b .L2044 +.L2085: + add x0, x22, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L2046 + ldrb w0, [x20,8] + cmp w0, 1 + ldr x0, [x19,1008] + bne .L2047 + mov w1, 0 + b .L2084 +.L2047: + mov w1, 1 +.L2084: + mov w2, w26 + bl FlashEraseBlocks +.L2046: + ldrb w1, [x20,8] + mov w2, w26 + ldr x0, [x19,1008] + bl FlashEraseBlocks + mov x1, 0 + mov x4, 56 + mov w2, w1 +.L2048: + cmp w26, w1, uxth + bls .L2086 + mul x0, x1, x4 + ldr x3, [x19,1008] + add x5, x3, x0 + ldr w3, [x3,x0] + cmn w3, #1 + bne .L2049 + ldr w0, [x5,4] + add w2, w2, 1 + str x4, [x29,104] + lsr w0, w0, 10 + str x3, [x29,112] + str x1, [x29,120] + str x2, [x29,128] + str x2, [x29,136] + bl FtlBbmMapBadBlock + ldr x1, [x29,120] + ldr x3, [x29,112] + ldr x4, [x29,104] + add x0, x20, x1, lsl 1 + ldr x2, [x29,136] + strh w3, [x0,16] + ldrb w0, [x20,7] + sub w0, w0, #1 + strb w0, [x20,7] +.L2049: + add x1, x1, 1 + b .L2048 +.L2086: + cbz w2, .L2051 + mov w0, w27 + bl update_multiplier_value + bl FtlBbmTblFlush +.L2051: + ldrb w0, [x20,7] + cbnz w0, .L2052 + ldr x0, [x19,1176] + mov w1, -1 + strh w1, [x0,x28] + b .L2028 +.L2052: + add x21, x21, :lo12:.LANCHOR2 + strh wzr, [x20,2] + strb wzr, [x20,6] + ldrh w1, [x21,810] + strh w27, [x20] + mul w0, w0, w1 + ldr w1, [x21,864] + str w1, [x20,12] + uxth w0, w0 + add w1, w1, 1 + strh w0, [x20,4] + str w1, [x21,864] + ldr x1, [x21,1176] + ldrh w2, [x20] + strh w0, [x1,x2,lsl 1] +.L2027: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret + .size allocate_data_superblock, .-allocate_data_superblock + .align 2 + .global FtlGcBufInit + .type FtlGcBufInit, %function +FtlGcBufInit: + adrp x0, .LANCHOR4+144 + mov w1, 0 + adrp x7, .LANCHOR2 + mov w8, 24 + mov w9, 1 + mov w4, 4 + str wzr, [x0,#:lo12:.LANCHOR4+144] + mov w10, 56 +.L2088: + add x2, x7, :lo12:.LANCHOR2 + adrp x6, .LANCHOR2 + ldrh w0, [x2,740] + cmp w1, w0 + bcs .L2092 + umull x3, w1, w8 + ldr x5, [x2,1096] + ldr x6, [x2,1064] + add x0, x5, x3 + str w9, [x0,16] + ldrh w0, [x2,820] + mul w0, w1, w0 + sdiv w0, w0, w4 + add x0, x6, x0, sxtw 2 + str x0, [x5,x3] + ldrh w0, [x2,822] + ldr x6, [x2,1096] + ldr x11, [x2,1120] + mul w0, w1, w0 + add x5, x6, x3 + ldr x2, [x2,1016] + sdiv w0, w0, w4 + add x0, x11, x0, sxtw 2 + str x0, [x5,8] + umull x0, w1, w10 + add w1, w1, 1 + add x0, x2, x0 + ldr x2, [x6,x3] + uxth w1, w1 + str x2, [x0,8] + ldr x2, [x5,8] + str x2, [x0,16] + b .L2088 +.L2092: + mov w7, 24 + mov w4, 4 +.L2090: + add x1, x6, :lo12:.LANCHOR2 + ldr w2, [x1,1032] + cmp w0, w2 + bcs .L2093 + umull x3, w0, w7 + ldr x5, [x1,1096] + ldr x8, [x1,1064] + add x2, x5, x3 + str wzr, [x2,16] + ldrh w2, [x1,820] + mul w2, w0, w2 + sdiv w2, w2, w4 + add x2, x8, x2, sxtw 2 + str x2, [x5,x3] + ldrh w2, [x1,822] + ldr x5, [x1,1096] + ldr x1, [x1,1120] + mul w2, w0, w2 + add x3, x5, x3 + add w0, w0, 1 + sdiv w2, w2, w4 + uxth w0, w0 + add x1, x1, x2, sxtw 2 + str x1, [x3,8] + b .L2090 +.L2093: + ret + .size FtlGcBufInit, .-FtlGcBufInit + .align 2 + .global FtlVariablesInit + .type FtlVariablesInit, %function +FtlVariablesInit: + stp x29, x30, [sp, -32]! + adrp x0, .LANCHOR4 + mov w1, -1 + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR2 + add x19, x19, :lo12:.LANCHOR2 + add x0, x0, :lo12:.LANCHOR4 + ldrh w2, [x19,832] + strh w1, [x0,160] + mov w1, -1 + str xzr, [x0,152] + lsl w2, w2, 1 + str w1, [x0,172] + mov w1, 0 + str wzr, [x0,164] + str wzr, [x0,168] + ldr x0, [x19,1200] + str wzr, [x19,3908] + strh wzr, [x19,1384] + bl ftl_memset + ldrh w2, [x19,750] + mov w1, 0 + ldr x0, [x19,1160] + lsl w2, w2, 1 + bl ftl_memset + ldrh w2, [x19,750] + mov w1, 0 + ldr x0, [x19,1144] + lsl w2, w2, 1 + bl ftl_memset + add x0, x19, 3856 + mov w1, 0 + mov w2, 48 + bl ftl_memset + mov w1, 0 + mov w2, 512 + add x0, x19, 3968 + bl ftl_memset + bl FtlGcBufInit + bl FtlL2PDataInit + ldr x19, [sp,16] + mov w0, 0 + ldp x29, x30, [sp], 32 + ret + .size FtlVariablesInit, .-FtlVariablesInit + .align 2 + .global FtlGcBufFree + .type FtlGcBufFree, %function +FtlGcBufFree: + adrp x2, .LANCHOR2 + mov w3, 0 + add x2, x2, :lo12:.LANCHOR2 + mov w7, 56 + mov w9, 24 + ldr w8, [x2,1032] + ldr x5, [x2,1096] +.L2096: + cmp w3, w1 + bcs .L2095 + umull x4, w3, w7 + mov w2, 0 + add x4, x0, x4 +.L2101: + cmp w2, w8 + bcs .L2098 + umull x6, w2, w9 + add x10, x5, x6 + ldr x11, [x5,x6] + ldr x6, [x4,8] + cmp x11, x6 + bne .L2097 + str wzr, [x10,16] + b .L2098 +.L2097: + add w2, w2, 1 + uxth w2, w2 + b .L2101 +.L2098: + add w3, w3, 1 + uxth w3, w3 + b .L2096 +.L2095: + ret + .size FtlGcBufFree, .-FtlGcBufFree + .align 2 + .global FtlGcBufAlloc + .type FtlGcBufAlloc, %function +FtlGcBufAlloc: + adrp x2, .LANCHOR2 + mov w7, 24 + add x2, x2, :lo12:.LANCHOR2 + mov w8, 1 + mov w9, 56 + ldr w5, [x2,1032] + ldr x6, [x2,1096] + mov w2, 0 +.L2103: + cmp w2, w1 + bcs .L2109 + mov w3, 0 +.L2107: + cmp w3, w5 + bcs .L2105 + umull x4, w3, w7 + add x4, x6, x4 + ldr w10, [x4,16] + cbnz w10, .L2104 + umull x3, w2, w9 + str w8, [x4,16] + add x3, x0, x3 + ldr x10, [x4] + str x10, [x3,8] + ldr x4, [x4,8] + str x4, [x3,16] + b .L2105 +.L2104: + add w3, w3, 1 + uxth w3, w3 + b .L2107 +.L2105: + add w2, w2, 1 + uxth w2, w2 + b .L2103 +.L2109: + ret + .size FtlGcBufAlloc, .-FtlGcBufAlloc + .align 2 + .global IsBlkInGcList + .type IsBlkInGcList, %function +IsBlkInGcList: + adrp x1, .LANCHOR4+176 + uxth w0, w0 + ldrh w2, [x1,#:lo12:.LANCHOR4+176] + adrp x1, .LANCHOR2+968 + ldr x3, [x1,#:lo12:.LANCHOR2+968] + mov x1, 0 +.L2111: + cmp w2, w1, uxth + bls .L2115 + add x1, x1, 1 + add x4, x3, x1, lsl 1 + ldrh w4, [x4,-2] + cmp w4, w0 + bne .L2111 + mov w0, 1 + b .L2112 +.L2115: + mov w0, 0 +.L2112: + ret + .size IsBlkInGcList, .-IsBlkInGcList + .align 2 + .global FtlGcUpdatePage + .type FtlGcUpdatePage, %function +FtlGcUpdatePage: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + str x19, [sp,16] + mov w19, w0 + lsr x0, x19, 10 + str x1, [x29,32] + str x2, [x29,40] + bl P2V_block_in_plane + adrp x3, .LANCHOR4 + ldr x2, [x29,40] + add x4, x3, :lo12:.LANCHOR4 + ldr x1, [x29,32] + uxth w9, w0 + mov x6, 0 + ldrh w8, [x4,176] + adrp x4, .LANCHOR2 + add x5, x4, :lo12:.LANCHOR2 + ldr x7, [x5,968] +.L2117: + uxth w5, w6 + cmp w5, w8 + bcs .L2121 + add x6, x6, 1 + add x10, x7, x6, lsl 1 + ldrh w10, [x10,-2] + cmp w10, w9 + bne .L2117 +.L2121: + cmp w5, w8 + bne .L2119 + ubfiz x5, x5, 1, 16 + strh w0, [x7,x5] + add x0, x3, :lo12:.LANCHOR4 + ldrh w5, [x0,176] + add w5, w5, 1 + strh w5, [x0,176] +.L2119: + add x3, x3, :lo12:.LANCHOR4 + add x4, x4, :lo12:.LANCHOR2 + mov w0, 12 + ldrh w5, [x3,178] + ldr x6, [x4,976] + umull x5, w5, w0 + add x6, x6, x5 + str w1, [x6,4] + ldr x1, [x4,976] + add x0, x1, x5 + str w2, [x0,8] + str w19, [x1,x5] + ldrh w0, [x3,178] + add w0, w0, 1 + strh w0, [x3,178] + ldr x19, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size FtlGcUpdatePage, .-FtlGcUpdatePage + .align 2 + .global FtlGcPageVarInit + .type FtlGcPageVarInit, %function +FtlGcPageVarInit: + stp x29, x30, [sp, -32]! + adrp x0, .LANCHOR4 + mov w1, 255 + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR2 + add x19, x19, :lo12:.LANCHOR2 + add x0, x0, :lo12:.LANCHOR4 + ldrh w2, [x19,814] + strh wzr, [x0,176] + strh wzr, [x0,178] + lsl w2, w2, 1 + ldr x0, [x19,968] + bl ftl_memset + ldrh w3, [x19,814] + mov w2, 12 + ldr x0, [x19,976] + mov w1, 255 + mul w2, w3, w2 + bl ftl_memset + bl FtlGcBufInit + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlGcPageVarInit, .-FtlGcPageVarInit + .align 2 + .global FtlGcScanTempBlk + .type FtlGcScanTempBlk, %function +FtlGcScanTempBlk: + stp x29, x30, [sp, -160]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR1 + mov x19, x0 + add x0, x20, :lo12:.LANCHOR1 + str w1, [x29,152] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + str x20, [x29,136] + ldrh w26, [x0,3036] + mov w0, 65535 + cmp w26, w0 + beq .L2146 + cbnz w26, .L2125 + b .L2126 +.L2146: + mov w26, 0 +.L2125: + adrp x0, .LANCHOR2+810 + ldr w1, [x29,152] + ldrh w0, [x0,#:lo12:.LANCHOR2+810] + cmp w1, w0 + bne .L2127 +.L2126: + bl FtlGcPageVarInit +.L2127: + mov w0, -1 + adrp x25, .LANCHOR2 + str w0, [x29,156] + adrp x0, .LC118 + add x0, x0, :lo12:.LC118 + mov w22, 0 + mov w23, 65535 + mov x21, x25 + mov x24, x25 + str x0, [x29,128] +.L2140: + ldrh w0, [x19] + strb wzr, [x19,8] + cmp w0, w23 + beq .L2147 +.L2129: +.L2143: + add x0, x25, :lo12:.LANCHOR2 + mov x2, x19 + mov w20, 0 + ldrh w5, [x0,740] + ldrh w8, [x0,822] + add x5, x19, x5, lsl 1 +.L2130: + cmp x2, x5 + beq .L2155 + ldrh w1, [x2,16] + cmp w1, w23 + beq .L2131 + add x6, x21, :lo12:.LANCHOR2 + mov w0, 56 + orr w1, w26, w1, lsl 10 + mov w3, 4 + umull x0, w20, w0 + ldr x7, [x6,984] + add w4, w20, 1 + add x7, x7, x0 + str w1, [x7,4] + ldr x1, [x6,984] + ldr x6, [x6,1120] + add x0, x1, x0 + mul w1, w20, w8 + uxth w20, w4 + str xzr, [x0,8] + sdiv w1, w1, w3 + add x1, x6, x1, sxtw 2 + str x1, [x0,16] +.L2131: + add x2, x2, 2 + b .L2130 +.L2155: + add x0, x21, :lo12:.LANCHOR2 + mov w1, w20 + mov w2, 0 + mov x27, 0 + ldr x0, [x0,984] + bl FlashReadPages +.L2133: + cmp w20, w27, uxth + bls .L2156 + mov x0, 56 + mul x28, x27, x0 + add x0, x21, :lo12:.LANCHOR2 + str x0, [x29,144] + ldr x8, [x0,984] + str x8, [x29,104] + add x1, x8, x28 + str x1, [x29,112] + ldr w2, [x1,4] + str x2, [x29,120] + lsr x0, x2, 10 + bl P2V_plane + uxth w6, w0 + ldr x8, [x29,104] + ldr x2, [x29,120] + ldr w0, [x8,x28] + cbnz w0, .L2134 + ldr x1, [x29,112] + add x27, x27, 1 + ldr x5, [x1,16] + ldrh w0, [x5] + cmp w0, w23 + bne .L2135 + adrp x0, .LANCHOR4+168 + mov w1, 1 + str w1, [x0,#:lo12:.LANCHOR4+168] + b .L2128 +.L2135: + mov w1, w2 + ldr w0, [x5,12] + ldr w2, [x5,8] + bl FtlGcUpdatePage + b .L2133 +.L2134: + ldr x0, [x29,128] + ldrh w1, [x19] + bl printk + ldr x0, [x29,144] + ldr w0, [x0,3908] + cbnz w0, .L2136 + adrp x0, .LANCHOR0+136 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + cbz w0, .L2137 +.L2136: + add x0, x24, :lo12:.LANCHOR2 + ldrh w1, [x19] + ldr x0, [x0,1160] + ldrh w0, [x0,x1,lsl 1] + cmp w0, 119 + bls .L2138 +.L2137: + add x0, x24, :lo12:.LANCHOR2 + ldr x0, [x0,984] + ldr w0, [x0,x28] + cmn w0, #1 + bne .L2139 +.L2138: + add x0, x24, :lo12:.LANCHOR2 + ldr x0, [x0,984] + add x5, x0, x28 + ldr w0, [x5,4] + str w0, [x29,156] +.L2139: + add x0, x24, :lo12:.LANCHOR2 + ldrh w1, [x19] + mov w26, 0 + ldr x0, [x0,1176] + strh wzr, [x0,x1,lsl 1] + ldrh w0, [x19] + bl INSERT_FREE_LIST + mov w0, -1 + strh w0, [x19] + bl FtlGcPageVarInit + b .L2140 +.L2156: + ldr w0, [x29,152] + add w22, w22, 1 + add w3, w26, 1 + cmp w22, w0 + uxth w26, w3 + bcs .L2142 +.L2144: + add x0, x21, :lo12:.LANCHOR2 + ldrh w0, [x0,810] + cmp w0, w26 + bhi .L2143 + b .L2147 +.L2142: + ldr x0, [x29,136] + add x1, x0, :lo12:.LANCHOR1 + ldrh w0, [x1,3036] + cmp w0, w23 + beq .L2144 + add w0, w0, w22 + strh w0, [x1,3036] + add x0, x21, :lo12:.LANCHOR2 + ldrh w0, [x0,810] + cmp w0, w26 + bls .L2144 + b .L2145 +.L2147: + mov w6, 0 +.L2128: + ldr x0, [x29,136] + mov w1, w26 + strh w26, [x19,2] + mov w2, w6 + add x20, x0, :lo12:.LANCHOR1 + mov w0, -1 + strb w6, [x19,6] + strh w0, [x20,3036] + mov x0, x19 + bl ftl_sb_update_avl_pages +.L2145: + ldr w0, [x29,156] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 160 + ret + .size FtlGcScanTempBlk, .-FtlGcScanTempBlk + .align 2 + .global FtlGcRefreshOpenBlock + .type FtlGcRefreshOpenBlock, %function +FtlGcRefreshOpenBlock: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + uxth w19, w0 + adrp x0, .LC119 + mov w1, w19 + add x0, x0, :lo12:.LC119 + bl printk + adrp x2, .LANCHOR2 + add x2, x2, :lo12:.LANCHOR2 + ldrh w3, [x2,940] + cmp w3, w19 + beq .L2158 + ldrh w1, [x2,942] + cmp w1, w19 + beq .L2158 + mov w0, 65535 + cmp w3, w0 + bne .L2159 + strh w19, [x2,940] + b .L2158 +.L2159: + cmp w1, w0 + bne .L2158 + strh w19, [x2,942] +.L2158: + mov w0, 0 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlGcRefreshOpenBlock, .-FtlGcRefreshOpenBlock + .align 2 + .global FtlGcRefreshBlock + .type FtlGcRefreshBlock, %function +FtlGcRefreshBlock: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + uxth w19, w0 + adrp x0, .LC119 + mov w1, w19 + add x0, x0, :lo12:.LC119 + bl printk + adrp x2, .LANCHOR2 + add x2, x2, :lo12:.LANCHOR2 + ldrh w3, [x2,940] + cmp w3, w19 + beq .L2161 + ldrh w1, [x2,942] + cmp w1, w19 + beq .L2161 + mov w0, 65535 + cmp w3, w0 + bne .L2162 + strh w19, [x2,940] + b .L2161 +.L2162: + cmp w1, w0 + bne .L2161 + strh w19, [x2,942] +.L2161: + mov w0, 0 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlGcRefreshBlock, .-FtlGcRefreshBlock + .align 2 + .global FtlGcMarkBadPhyBlk + .type FtlGcMarkBadPhyBlk, %function +FtlGcMarkBadPhyBlk: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + uxth w20, w0 + adrp x19, .LANCHOR2 + stp x21, x22, [sp,32] + mov w0, w20 + add x22, x19, :lo12:.LANCHOR2 + str x23, [sp,48] + bl P2V_block_in_plane + uxth w21, w0 + ldrh w1, [x22,950] + adrp x0, .LC120 + mov w2, w20 + add x0, x0, :lo12:.LC120 + bl printk + mov w0, w21 + bl FtlGcRefreshBlock + ldr w0, [x22,3908] + cbz w0, .L2164 + ubfiz x0, x21, 1, 16 + ldr x2, [x22,1160] + ldrh w1, [x2,x0] + cmp w1, 29 + bls .L2164 + sub w1, w1, #30 + strh w1, [x2,x0] +.L2164: + add x0, x19, :lo12:.LANCHOR2 + adrp x1, .LANCHOR4 + add x1, x1, :lo12:.LANCHOR4 + add x1, x1, 184 + ldrh w3, [x0,950] + mov x0, 0 +.L2165: + cmp w3, w0, uxth + bls .L2171 + add x0, x0, 1 + add x2, x1, x0, lsl 1 + ldrh w2, [x2,-2] + cmp w2, w20 + bne .L2165 + b .L2166 +.L2171: + cmp w3, 15 + bhi .L2166 + adrp x1, .LANCHOR4 + add x19, x19, :lo12:.LANCHOR2 + add x1, x1, :lo12:.LANCHOR4 + add w0, w3, 1 + add x1, x1, 184 + strh w0, [x19,950] + strh w20, [x1,w3,sxtw 1] +.L2166: + mov w0, 0 + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size FtlGcMarkBadPhyBlk, .-FtlGcMarkBadPhyBlk + .align 2 + .global FtlGcReFreshBadBlk + .type FtlGcReFreshBadBlk, %function +FtlGcReFreshBadBlk: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR2 + add x0, x19, :lo12:.LANCHOR2 + ldrh w1, [x0,950] + cbz w1, .L2173 + ldrh w3, [x0,940] + mov w2, 65535 + cmp w3, w2 + bne .L2173 + ldrh w2, [x0,954] + cmp w2, w1 + bcc .L2174 + strh wzr, [x0,954] +.L2174: + add x19, x19, :lo12:.LANCHOR2 + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + add x0, x0, 184 + ldrh w1, [x19,954] + ldrh w0, [x0,w1,sxtw 1] + bl P2V_block_in_plane + bl FtlGcRefreshBlock + ldrh w0, [x19,954] + add w0, w0, 1 + strh w0, [x19,954] +.L2173: + mov w0, 0 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlGcReFreshBadBlk, .-FtlGcReFreshBadBlk + .align 2 + .global FtlGcFreeBadSuperBlk + .type FtlGcFreeBadSuperBlk, %function +FtlGcFreeBadSuperBlk: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + str x27, [sp,80] + add x19, x19, :lo12:.LANCHOR2 + stp x23, x24, [sp,48] + uxth w23, w0 + ldrh w0, [x19,950] + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + mov w21, 0 + cbz w0, .L2180 + adrp x24, .LANCHOR4 + adrp x22, .LC121 + add x22, x22, :lo12:.LC121 + add x25, x24, :lo12:.LANCHOR4 +.L2188: + ldrh w0, [x19,740] + cmp w0, w21 + bls .L2189 + add x0, x19, 768 + mov w1, w23 + mov w20, 0 + add x27, x24, :lo12:.LANCHOR4 + ldrb w0, [x0,w21,sxtw] + bl V2P_block + uxth w26, w0 +.L2181: + ldrh w0, [x19,950] + cmp w0, w20 + bls .L2190 + add x0, x27, 184 + ldrh w0, [x0,w20,sxtw 1] + cmp w0, w26 + bne .L2182 + mov w1, w26 + mov x0, x22 + bl printk + mov w0, w26 + bl FtlBbmMapBadBlock + bl FtlBbmTblFlush + ldrh w2, [x19,950] + mov w3, w20 +.L2183: + cmp w3, w2 + bcs .L2191 + add x4, x25, 184 + add w0, w3, 1 + ldrh w1, [x4,w0,sxtw 1] + strh w1, [x4,w3,sxtw 1] + uxth w3, w0 + b .L2183 +.L2191: + sub w2, w2, #1 + strh w2, [x19,950] +.L2182: + add w20, w20, 1 + uxth w20, w20 + b .L2181 +.L2190: + add w21, w21, 1 + uxth w21, w21 + b .L2188 +.L2189: + bl FtlGcReFreshBadBlk +.L2180: + mov w0, 0 + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk + .align 2 + .global update_vpc_list + .type update_vpc_list, %function +update_vpc_list: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR2 + uxth w19, w0 + add x1, x20, :lo12:.LANCHOR2 + ubfiz x0, x19, 1, 16 + ldr x2, [x1,1176] + ldrh w2, [x2,x0] + cbnz w2, .L2193 + ldrh w0, [x1,3920] + cmp w0, w19 + bne .L2194 + mov w0, -1 + strh w0, [x1,3920] + b .L2195 +.L2194: + ldrh w3, [x1,3552] + mov w0, w2 + cmp w3, w19 + beq .L2196 + ldrh w3, [x1,3600] + cmp w3, w19 + beq .L2196 + ldrh w1, [x1,3648] + cmp w1, w19 + beq .L2196 +.L2195: + add x20, x20, :lo12:.LANCHOR2 + mov w1, w19 + add x0, x20, 3512 + bl List_remove_node + ldrh w0, [x20,3528] + sub w0, w0, #1 + strh w0, [x20,3528] + mov w0, w19 + bl free_data_superblock + mov w0, w19 + bl FtlGcFreeBadSuperBlk + mov w0, 1 + b .L2196 +.L2193: + mov w0, w19 + bl List_update_data_list + mov w0, 0 +.L2196: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size update_vpc_list, .-update_vpc_list + .align 2 + .global decrement_vpc_count + .type decrement_vpc_count, %function +decrement_vpc_count: + stp x29, x30, [sp, -48]! + uxth w1, w0 + mov w0, 65535 + add x29, sp, 0 + str x19, [sp,16] + cmp w1, w0 + beq .L2201 + adrp x2, .LANCHOR2+1176 + ubfiz x0, x1, 1, 16 + ldr x2, [x2,#:lo12:.LANCHOR2+1176] + ldrh w19, [x2,x0] + cbnz w19, .L2202 + adrp x0, .LC122 + mov w2, w19 + add x0, x0, :lo12:.LC122 + bl printk + b .L2206 +.L2202: + sub w19, w19, #1 + strh w19, [x2,x0] +.L2201: + adrp x19, .LANCHOR4 + mov w0, 65535 + add x19, x19, :lo12:.LANCHOR4 + ldrh w2, [x19,160] + cmp w2, w0 + bne .L2204 + strh w1, [x19,160] +.L2206: + mov w0, 0 + b .L2203 +.L2204: + cmp w2, w1 + str x1, [x29,40] + mov w0, 0 + beq .L2203 + mov w0, w2 + bl update_vpc_list + cmp w0, wzr + ldr x1, [x29,40] + cset w0, ne + strh w1, [x19,160] +.L2203: + ldr x19, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size decrement_vpc_count, .-decrement_vpc_count + .align 2 + .global FtlRecoverySuperblock + .type FtlRecoverySuperblock, %function +FtlRecoverySuperblock: + stp x29, x30, [sp, -208]! + mov w2, 65535 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov x19, x0 + ldrh w0, [x0] + cmp w0, w2 + beq .L2365 + ldrh w0, [x19,2] + adrp x20, .LANCHOR2 + str w0, [x29,188] + add x0, x20, :lo12:.LANCHOR2 + ldrb w28, [x19,6] + ldr w1, [x29,188] + ldrh w0, [x0,810] + cmp w0, w1 + bne .L2210 + strh wzr, [x19,4] + b .L2371 +.L2210: + ldrh w0, [x19,16] + mov w1, 0 +.L2211: + cmp w0, w2 + bne .L2374 + add w1, w1, 1 + uxth w1, w1 + add x0, x19, x1, sxtw 1 + ldrh w0, [x0,16] + b .L2211 +.L2374: + ldrb w1, [x19,8] + cmp w1, 1 + bne .L2213 + bl FtlGetLastWrittenPage + cmn w0, #1 + mov w21, w0 + beq .L2214 + adrp x0, .LANCHOR0 + mov w23, w21 + add x0, x0, :lo12:.LANCHOR0 + ldrb w1, [x0,136] + cbnz w1, .L2288 + add x0, x0, 140 + ldrh w23, [x0,w21,sxtw 1] + b .L2288 +.L2213: + mov w1, 0 + bl FtlGetLastWrittenPage + cmn w0, #1 + mov w21, w0 + beq .L2214 + mov w23, w0 +.L2288: + add x0, x20, :lo12:.LANCHOR2 + mov x2, x19 + mov w25, 0 + mov w8, 65535 + mov w9, 56 + mov w10, 4 + ldrh w4, [x0,740] + ldrh w7, [x0,822] + add x4, x19, x4, lsl 1 + b .L2216 +.L2214: + strh wzr, [x19,2] +.L2371: + strb wzr, [x19,6] + b .L2365 +.L2218: + ldrh w1, [x2,16] + cmp w1, w8 + beq .L2217 + add x5, x20, :lo12:.LANCHOR2 + orr w1, w23, w1, lsl 10 + umull x0, w25, w9 + add w3, w25, 1 + ldr x6, [x5,984] + add x6, x6, x0 + str w1, [x6,4] + ldr x1, [x5,984] + ldr x5, [x5,1120] + add x0, x1, x0 + mul w1, w25, w7 + uxth w25, w3 + str xzr, [x0,8] + sdiv w1, w1, w10 + add x1, x5, x1, sxtw 2 + str x1, [x0,16] +.L2217: + add x2, x2, 2 +.L2216: + cmp x2, x4 + bne .L2218 + ldrb w0, [x19,8] + str wzr, [x29,184] + cmp w0, 1 + bne .L2219 + adrp x0, .LANCHOR0+136 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + cmp w0, wzr + cset w0, ne + str w0, [x29,184] +.L2219: + add x22, x20, :lo12:.LANCHOR2 + ldr w2, [x29,184] + mov w1, w25 + mov x26, 0 + mov w24, 65535 + adrp x27, .LANCHOR4 + ldr x0, [x22,984] + bl FlashReadPages + ldr w0, [x22,868] + adrp x22, .LC123 + str w0, [x29,176] + add x22, x22, :lo12:.LC123 + uxth w0, w23 + str w0, [x29,168] +.L2220: + uxth w2, w26 + cmp w2, w25 + bcs .L2227 + add x6, x20, :lo12:.LANCHOR2 + mov x0, 56 + mul x0, x26, x0 + ldr x4, [x6,984] + add x1, x4, x0 + ldr w0, [x4,x0] + cbnz w0, .L2221 + ldr x7, [x1,16] + ldr w4, [x7,4] + cmn w4, #1 + beq .L2222 + ldr w1, [x6,868] + mov w0, w4 + str x7, [x29,136] + str x2, [x29,144] + str x4, [x29,152] + str x6, [x29,160] + bl ftl_cmp_data_ver + ldr x6, [x29,160] + ldr x4, [x29,152] + ldr x2, [x29,144] + ldr x7, [x29,136] + cbz w0, .L2222 + add w4, w4, 1 + str w4, [x6,868] +.L2222: + ldr w0, [x7] + cmn w0, #1 + bne .L2223 +.L2227: + cmp w2, w25 + bne .L2366 + add x0, x20, :lo12:.LANCHOR2 + add w21, w21, 1 + uxth w21, w21 + ldr x0, [x0,984] + ldr w0, [x0,4] + b .L2367 +.L2221: + ldr w1, [x1,4] + mov x0, x22 + bl printk + ldr w24, [x29,168] + add x0, x27, :lo12:.LANCHOR4 + ldrh w1, [x19] + strh w1, [x0,218] +.L2223: + add x26, x26, 1 + b .L2220 +.L2366: + add x0, x20, :lo12:.LANCHOR2 + mov w1, 56 + uxth w21, w21 + umull x2, w2, w1 + ldr x0, [x0,984] + add x2, x0, x2 + ldr w0, [x2,4] +.L2367: + lsr x0, x0, 10 + bl P2V_plane + uxth w26, w0 + ldrb w1, [x19,8] + cmp w1, 1 + bne .L2229 + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + ldrb w2, [x0,136] + cbnz w2, .L2229 + add x0, x0, 140 + ldrh w21, [x0,w21,sxtw 1] +.L2229: + add x0, x20, :lo12:.LANCHOR2 + ldrh w0, [x0,810] + cmp w0, w21 + bne .L2230 + strh w21, [x19,2] + strb wzr, [x19,6] + strh wzr, [x19,4] +.L2230: + uxth w0, w28 + str w0, [x29,152] + ldr w0, [x29,188] + cmp w21, w0 + bne .L2231 + ldr w0, [x29,152] + cmp w26, w0 + beq .L2372 +.L2231: + ldr w0, [x29,176] + adrp x25, .LANCHOR4 + sub w22, w0, #1 + mov w0, 65535 + cmp w24, w0 + bne .L2232 + cbnz w1, .L2233 +.L2232: + add x0, x25, :lo12:.LANCHOR4 + uxth w6, w23 + ldr w1, [x0,172] + cmn w1, #1 + bne .L2234 + str w22, [x0,172] +.L2234: + add x0, x25, :lo12:.LANCHOR4 + ldr w24, [x29,188] + ldr w3, [x0,172] + ldr w0, [x29,188] + add w0, w0, 7 + cmp w0, w23, uxth + bge .L2235 + sub w24, w6, #7 + uxth w24, w24 +.L2235: + adrp x7, .LANCHOR0 + mov w28, -1 + add x5, x7, :lo12:.LANCHOR0 + mov w27, w28 + mov w4, 65535 + add x5, x5, 652 +.L2236: + cmp w24, w6 + bhi .L2249 + add x0, x20, :lo12:.LANCHOR2 + mov w23, 0 + mov w10, 56 + ldrh w2, [x0,740] + mov x0, x19 + add x2, x19, x2, lsl 1 +.L2250: + cmp x0, x2 + beq .L2375 + ldrh w1, [x0,16] + cmp w1, w4 + beq .L2237 + add x9, x20, :lo12:.LANCHOR2 + orr w1, w24, w1, lsl 10 + umull x8, w23, w10 + add w23, w23, 1 + ldr x9, [x9,984] + uxth w23, w23 + add x8, x9, x8 + str w1, [x8,4] +.L2237: + add x0, x0, 2 + b .L2250 +.L2375: + add x8, x20, :lo12:.LANCHOR2 + ldr w2, [x29,184] + mov w1, w23 + str x5, [x29,128] + str x7, [x29,136] + ldr x0, [x8,984] + str x4, [x29,144] + str x3, [x29,160] + str x6, [x29,168] + str x8, [x29,176] + bl FlashReadPages + ldr x7, [x29,136] + mov w1, 0 + ldr x8, [x29,176] + sxtw x10, w24 + add x0, x7, :lo12:.LANCHOR0 + ldr x6, [x29,168] + ldr x3, [x29,160] + ldr x4, [x29,144] + ldrb w9, [x0,136] + ldr x0, [x8,984] + ldr x5, [x29,128] + add x0, x0, 16 +.L2239: + cmp w1, w23 + beq .L2376 + ldr w2, [x0,-16] + cbnz w2, .L2240 + ldr x2, [x0] + ldrh w8, [x2] + cmp w8, w4 + beq .L2241 + ldr w8, [x2,4] + cmn w8, #1 + beq .L2241 + add x2, x25, :lo12:.LANCHOR4 + cmn w28, #1 + ldr w27, [x2,172] + str w8, [x2,172] + bne .L2241 + ldrh w2, [x5,x10,lsl 1] + cmp w2, w4 + bne .L2242 + cbz w9, .L2241 +.L2242: + cmp w27, w22 + csinv w28, w27, wzr, ne + b .L2241 +.L2240: + add x0, x25, :lo12:.LANCHOR4 + ldrh w1, [x19] + strh w1, [x0,218] + ldrb w1, [x19,8] + cbnz w1, .L2233 + adrp x1, .LANCHOR0 + add x1, x1, :lo12:.LANCHOR0 + add x1, x1, 652 + ldrh w2, [x1,w24,sxtw 1] + mov w1, 65535 + cmp w2, w1 + bne .L2244 + cmn w28, #1 + beq .L2245 + str w28, [x0,172] + b .L2233 +.L2245: + cmp w3, w22 + beq .L2246 + str w3, [x0,172] + b .L2233 +.L2246: + ldr w1, [x0,172] + b .L2373 +.L2244: + cmp w27, w22 + beq .L2247 + cmn w27, #1 + beq .L2233 + str w27, [x0,172] + b .L2233 +.L2247: + ldr w1, [x0,172] + cmp w1, w22 + beq .L2233 +.L2373: + sub w1, w1, #1 + b .L2368 +.L2241: + add w1, w1, 1 + add x0, x0, 56 + uxth w1, w1 + b .L2239 +.L2376: + add w24, w24, 1 + uxth w24, w24 + b .L2236 +.L2249: + add x0, x25, :lo12:.LANCHOR4 + mov w1, -1 +.L2368: + str w1, [x0,172] +.L2233: + add x0, x25, :lo12:.LANCHOR4 + mov w1, 1 + strh w1, [x0,220] + add x0, x20, :lo12:.LANCHOR2 + add x0, x0, 3696 + bl FtlMapBlkWriteDumpData + ldr w23, [x29,188] + adrp x0, .LC125 + add x0, x0, :lo12:.LC125 + str x0, [x29,128] + adrp x0, .LC124 + add x0, x0, :lo12:.LC124 + str x0, [x29,120] +.L2251: + add x0, x20, :lo12:.LANCHOR2 + adrp x1, .LANCHOR0 + add x1, x1, :lo12:.LANCHOR0 + str wzr, [x29,176] + mov w7, 65535 + mov w8, 56 + ldrh w3, [x0,740] + ldrb w6, [x1,136] + mov x1, x19 + add x3, x19, x3, lsl 1 +.L2252: + cmp x1, x3 + beq .L2377 + ldrh w2, [x1,16] + cmp w2, w7 + beq .L2253 + ldr w0, [x29,176] + add x5, x20, :lo12:.LANCHOR2 + orr w2, w23, w2, lsl 10 + ldr x4, [x5,984] + umull x0, w0, w8 + add x4, x4, x0 + str w2, [x4,4] + ldrb w2, [x19,8] + cmp w2, 1 + bne .L2254 + cbz w6, .L2254 + ldr x2, [x5,984] + add x0, x2, x0 + ldr w2, [x0,4] + orr w2, w2, -2147483648 + str w2, [x0,4] +.L2254: + ldr w0, [x29,176] + add w0, w0, 1 + uxth w0, w0 + str w0, [x29,176] +.L2253: + add x1, x1, 2 + b .L2252 +.L2377: + add x0, x20, :lo12:.LANCHOR2 + ldr w1, [x29,176] + ldr w2, [x29,184] + ldr x0, [x0,984] + bl FlashReadPages + str xzr, [x29,160] +.L2256: + ldrh w0, [x29,160] + ldr w1, [x29,176] + cmp w1, w0, uxth + bls .L2378 + ldr x0, [x29,160] + mov x24, 56 + mul x24, x0, x24 + add x0, x20, :lo12:.LANCHOR2 + ldr x28, [x0,984] + add x27, x28, x24 + ldr w1, [x27,4] + str w1, [x29,204] + lsr x0, x1, 10 + str x1, [x29,168] + bl P2V_plane + uxth w0, w0 + ldr w1, [x29,188] + cmp w23, w1 + ldr x1, [x29,168] + bcc .L2257 + ldr w2, [x29,152] + cmp w0, w2 + bcs .L2292 + ldr w2, [x29,188] + cmp w23, w2 + beq .L2257 +.L2292: + cmp w0, w26 + bne .L2293 + cmp w23, w21 + beq .L2259 +.L2293: + ldr w0, [x28,x24] + cmn w0, #1 + beq .L2261 + ldr x28, [x27,16] + mov w0, 61589 + ldrh w1, [x28] + cmp w1, w0 + bne .L2268 + ldr w22, [x28,4] + cmn w22, #1 + beq .L2263 + add x27, x20, :lo12:.LANCHOR2 + mov w0, w22 + ldr w1, [x27,868] + bl ftl_cmp_data_ver + cbz w0, .L2263 + add w0, w22, 1 + str w0, [x27,868] +.L2263: + ldr w27, [x28,8] + add x1, x29, 200 + ldr w0, [x28,12] + mov w2, 0 + str w0, [x29,196] + mov w0, w27 + bl log2phys + add x0, x25, :lo12:.LANCHOR4 + str x0, [x29,136] + ldr w1, [x0,172] + cmn w1, #1 + beq .L2264 + mov w0, w22 + bl ftl_cmp_data_ver + cbz w0, .L2264 + ldr w1, [x29,196] + cmn w1, #1 + beq .L2265 + add x3, x20, :lo12:.LANCHOR2 + str x3, [x29,112] + ldr x0, [x3,984] + add x0, x0, x24 + str w1, [x0,4] + mov w1, 1 + ldr x2, [x0,16] + ldr x0, [x3,984] + str x2, [x29,168] + mov w2, 0 + add x0, x0, x24 + bl FlashReadPages + ldr x3, [x29,112] + ldr x0, [x29,168] + ldr x2, [x3,984] + ldr w0, [x0,4] + str w0, [x29,144] + add x4, x2, x24 + ldr w0, [x2,x24] + cmn w0, #1 + bne .L2266 + b .L2267 +.L2265: + ldr w0, [x29,204] + ldr w1, [x29,200] + cmp w1, w0 + bne .L2268 + mov w0, w27 + add x1, x29, 196 + mov w2, 1 + bl log2phys +.L2268: + ldrh w0, [x19] + b .L2370 +.L2266: + ldr x0, [x29,168] + ldr w28, [x0,8] + cmp w28, w27 + bne .L2267 + ldr x0, [x29,136] + ldr w1, [x29,144] + str x2, [x29,96] + ldr w0, [x0,172] + str x3, [x29,104] + str x4, [x29,112] + bl ftl_cmp_data_ver + ldr x4, [x29,112] + ldr x3, [x29,104] + ldr x2, [x29,96] + cbz w0, .L2267 + ldr w0, [x29,200] + ldr w1, [x29,204] + cmp w0, w1 + beq .L2273 + ldr w1, [x29,196] + cmp w0, w1 + beq .L2267 + cmn w0, #1 + beq .L2271 + str w0, [x4,4] + mov w2, 0 + ldr x1, [x4,16] + ldr x0, [x3,984] + str x1, [x29,168] + mov w1, 1 + add x0, x0, x24 + bl FlashReadPages + b .L2272 +.L2271: + str w0, [x2,x24] +.L2272: + adrp x0, .LANCHOR2+984 + ldr x0, [x0,#:lo12:.LANCHOR2+984] + ldr w0, [x0,x24] + cmn w0, #1 + beq .L2273 + ldr x0, [x29,168] + ldr w24, [x0,4] + add x0, x25, :lo12:.LANCHOR4 + mov w1, w24 + ldr w0, [x0,172] + bl ftl_cmp_data_ver + cbz w0, .L2273 + ldr w0, [x29,144] + mov w1, w24 + bl ftl_cmp_data_ver + cbz w0, .L2267 +.L2273: + ldr w1, [x29,196] + mov w0, w28 + bl FtlReUsePrevPpa +.L2267: + mov w0, -1 + str w0, [x29,196] + ldrh w0, [x19] + bl decrement_vpc_count + b .L2275 +.L2264: + ldr w0, [x29,204] + ldr w1, [x29,200] + cmp w1, w0 + beq .L2275 + mov w0, w27 + add x1, x29, 204 + mov w2, 1 + bl log2phys + ldr w24, [x29,200] + cmn w24, #1 + beq .L2275 + ldr w0, [x29,196] + cmp w24, w0 + beq .L2275 + lsr x0, x24, 10 + bl P2V_block_in_plane + uxth w0, w0 + add x1, x20, :lo12:.LANCHOR2 + ldrh w2, [x1,3552] + cmp w2, w0 + beq .L2278 + ldrh w2, [x1,3600] + cmp w2, w0 + beq .L2278 + ldrh w1, [x1,3648] + cmp w1, w0 + bne .L2275 +.L2278: + add x28, x20, :lo12:.LANCHOR2 + mov w1, 1 + mov w2, 0 + ldr x0, [x28,984] + str w24, [x0,4] + ldr x3, [x0,16] + ldr x0, [x28,984] + str x3, [x29,168] + bl FlashReadPages + ldr x0, [x28,984] + ldr x3, [x29,168] + ldr w0, [x0] + ldr w1, [x3,4] + cmn w0, #1 + beq .L2275 + mov w0, w22 + bl ftl_cmp_data_ver + cbnz w0, .L2275 + mov w0, w27 + add x1, x29, 200 + mov w2, 1 + bl log2phys +.L2275: + ldr w0, [x29,196] + cmn w0, #1 + beq .L2257 + lsr x0, x0, 10 + bl P2V_block_in_plane + uxth w1, w0 + add x2, x20, :lo12:.LANCHOR2 + ubfiz x3, x1, 1, 16 + ldr x2, [x2,1176] + ldrh w2, [x2,x3] + cbz w2, .L2279 +.L2370: + bl decrement_vpc_count + b .L2257 +.L2279: + ldr x0, [x29,120] + bl printk + b .L2257 +.L2261: + add x24, x25, :lo12:.LANCHOR4 + ldrh w0, [x19] + mov w2, w22 + strh w0, [x24,218] + ldr x0, [x29,128] + bl printk + ldr w0, [x24,224] + cmp w0, 31 + bhi .L2280 + add x1, x24, 232 + ldr w2, [x29,204] + str w2, [x1,w0,uxtw 2] + add w0, w0, 1 + str w0, [x24,224] +.L2280: + ldrh w0, [x19] + bl decrement_vpc_count + add x0, x25, :lo12:.LANCHOR4 + ldr w1, [x0,172] + cmn w1, #1 + beq .L2369 + cmp w1, w22 + bls .L2257 +.L2369: + str w22, [x0,172] +.L2257: + ldr x0, [x29,160] + add x0, x0, 1 + str x0, [x29,160] + b .L2256 +.L2378: + ldrb w0, [x19,8] + add w23, w23, 1 + cmp w0, 1 + uxth w23, w23 + bne .L2283 + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L2283 + cmp w21, w23 + bne .L2283 + add x0, x20, :lo12:.LANCHOR2 + ldrh w0, [x0,812] + cmp w0, w23 + beq .L2259 +.L2283: + add x0, x20, :lo12:.LANCHOR2 + ldrh w1, [x0,810] + cmp w23, w1 + bne .L2251 + ldrh w2, [x0,740] + mov w3, 65535 + strh w23, [x19,2] + mov x0, 0 + strh wzr, [x19,4] +.L2285: + uxth w1, w0 + cmp w1, w2 + bcs .L2365 + add x0, x0, 1 + add x4, x19, x0, lsl 1 + ldrh w4, [x4,14] + cmp w4, w3 + beq .L2285 + strb w1, [x19,6] + b .L2365 +.L2259: + strb w26, [x19,6] + strh w21, [x19,2] +.L2372: + mov x0, x19 + mov w1, w21 + mov w2, w26 + bl ftl_sb_update_avl_pages +.L2365: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 208 + ret + .size FtlRecoverySuperblock, .-FtlRecoverySuperblock + .align 2 + .global FtlSlcSuperblockCheck + .type FtlSlcSuperblockCheck, %function +FtlSlcSuperblockCheck: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + str x23, [sp,48] + ldrh w1, [x0,4] + cbz w1, .L2379 + ldrh w1, [x0] + mov w20, 65535 + cmp w1, w20 + beq .L2379 + mov x19, x0 + ldrb w0, [x0,6] + adrp x21, .LANCHOR0 + adrp x23, .LANCHOR2 + add x0, x0, 8 + add x21, x21, :lo12:.LANCHOR0 + add x22, x21, 652 + ldrh w0, [x19,x0,lsl 1] +.L2383: + cmp w0, w20 + bne .L2390 +.L2385: + ldrb w0, [x19,6] + add x1, x23, :lo12:.LANCHOR2 + add w0, w0, 1 + ldrh w1, [x1,740] + uxtb w0, w0 + strb w0, [x19,6] + cmp w1, w0 + bne .L2384 + ldrh w0, [x19,2] + strb wzr, [x19,6] + add w0, w0, 1 + strh w0, [x19,2] +.L2384: + ldrb w0, [x19,6] + add x0, x0, 8 + ldrh w0, [x19,x0,lsl 1] + b .L2383 +.L2390: + ldrb w1, [x19,8] + cmp w1, 1 + bne .L2386 + ldrb w0, [x21,136] + cbnz w0, .L2386 + ldrh w0, [x19,2] + ldrh w0, [x22,w0,sxtw 1] + cmp w0, w20 + bne .L2386 + ldrh w0, [x19,4] + sub w0, w0, #1 + strh w0, [x19,4] + ldrh w0, [x19] + bl decrement_vpc_count + ldrh w1, [x19,4] + cbnz w1, .L2385 + ldrh w0, [x19,2] + strb w1, [x19,6] + add w0, w0, 1 + strh w0, [x19,2] + b .L2379 +.L2386: + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L2379 + cmp w1, 1 + bne .L2379 + adrp x0, .LANCHOR2 + ldrh w2, [x19,2] + add x0, x0, :lo12:.LANCHOR2 + ldrh w1, [x0,812] + cmp w2, w1 + bcc .L2379 + ldrh w1, [x19] + ldr x3, [x0,1176] + lsl x1, x1, 1 + ldrh w4, [x19,4] + ldrh w2, [x3,x1] + sub w2, w2, w4 + strh w2, [x3,x1] + strh wzr, [x19,4] + ldrh w0, [x0,810] + strh w0, [x19,2] + strb wzr, [x19,6] +.L2379: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size FtlSlcSuperblockCheck, .-FtlSlcSuperblockCheck + .align 2 + .global get_new_active_ppa + .type get_new_active_ppa, %function +get_new_active_ppa: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + stp x21, x22, [sp,32] + str x25, [sp,64] + mov x19, x0 + strb wzr, [x0,10] + adrp x20, .LANCHOR0 + ldrb w0, [x0,6] + add x20, x20, :lo12:.LANCHOR0 + mov w22, 65535 + adrp x23, .LANCHOR2 + add x0, x0, 8 + add x24, x20, 652 + ldrh w0, [x19,x0,lsl 1] +.L2392: + cmp w0, w22 + adrp x21, .LANCHOR2 + bne .L2407 +.L2393: + ldrb w0, [x19,6] + add x1, x23, :lo12:.LANCHOR2 + add w0, w0, 1 + ldrh w1, [x1,740] + uxtb w0, w0 + strb w0, [x19,6] + cmp w1, w0 + bne .L2394 + ldrh w0, [x19,2] + strb wzr, [x19,6] + add w0, w0, 1 + strh w0, [x19,2] +.L2394: + ldrb w0, [x19,6] + add x0, x0, 8 + ldrh w0, [x19,x0,lsl 1] + b .L2392 +.L2407: + ldrb w1, [x19,8] + cmp w1, 1 + bne .L2395 + ldrb w1, [x20,136] + cbnz w1, .L2395 + ldrh w1, [x19,2] + ldrh w1, [x24,w1,sxtw 1] + cmp w1, w22 + bne .L2395 + ldrh w0, [x19,4] + sub w0, w0, #1 + strh w0, [x19,4] + ldrh w0, [x19] + bl decrement_vpc_count + b .L2393 +.L2395: + ldrh w1, [x19,4] + adrp x20, .LANCHOR0 + ldrh w22, [x19,2] + mov w23, 65535 + add x20, x20, :lo12:.LANCHOR0 + sub w1, w1, #1 + orr w22, w22, w0, lsl 10 + strh w1, [x19,4] + mov w24, w23 + add x25, x20, 652 +.L2396: + add x0, x21, :lo12:.LANCHOR2 + ldrb w1, [x19,6] + ldrh w2, [x0,740] +.L2398: + add w1, w1, 1 + uxtb w1, w1 + cmp w1, w2 + bne .L2397 + ldrh w1, [x19,2] + add w1, w1, 1 + strh w1, [x19,2] + mov w1, 0 +.L2397: + add x0, x19, x1, sxtw 1 + ldrh w0, [x0,16] + cmp w0, w23 + beq .L2398 + ldrb w0, [x19,8] + strb w1, [x19,6] + cmp w0, 1 + bne .L2403 + ldrb w0, [x20,136] + cbnz w0, .L2400 + ldrh w0, [x19,2] + ldrh w0, [x25,w0,sxtw 1] + cmp w0, w24 + bne .L2400 + ldrh w1, [x19,4] + cbz w1, .L2400 + ldrh w0, [x19] + sub w1, w1, #1 + strh w1, [x19,4] + bl decrement_vpc_count + b .L2396 +.L2400: + adrp x1, .LANCHOR0 + add x1, x1, :lo12:.LANCHOR0 + ldrb w0, [x1,136] + cbz w0, .L2403 + add x2, x21, :lo12:.LANCHOR2 + ldrh w1, [x19,2] + ldrh w0, [x2,812] + cmp w1, w0 + bcc .L2403 + ldrh w1, [x19] + ldr x0, [x2,1176] + lsl x1, x1, 1 + ldrh w4, [x19,4] + ldrh w3, [x0,x1] + sub w3, w3, w4 + strh w3, [x0,x1] + strh wzr, [x19,4] + ldrh w0, [x2,810] + strh w0, [x19,2] + strb wzr, [x19,6] +.L2403: + mov w0, w22 + ldr x25, [sp,64] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size get_new_active_ppa, .-get_new_active_ppa + .align 2 + .global FtlWriteDumpData + .type FtlWriteDumpData, %function +FtlWriteDumpData: + stp x29, x30, [sp, -144]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + str x25, [sp,64] + add x20, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + ldr w0, [x20,1392] + cbnz w0, .L2408 + ldrh w2, [x20,3556] + cbz w2, .L2410 + ldrb w1, [x20,3560] + cbnz w1, .L2410 + ldrb w1, [x20,3559] + ldrh w3, [x20,810] + mul w1, w1, w3 + cmp w2, w1 + beq .L2410 + ldrb w23, [x20,3562] + ldr w22, [x20,1388] + ldrh w24, [x20,740] + cbnz w23, .L2408 + sub w22, w22, #1 + add x1, x29, 84 + mov w0, w22 + mov w2, w23 + bl log2phys + ldr x21, [x20,1104] + ldr w0, [x29,84] + ldr x1, [x20,1040] + str w0, [x29,92] + cmn w0, #1 + str w22, [x29,112] + str x1, [x29,96] + str x21, [x29,104] + str w23, [x21,4] + beq .L2412 + add x0, x29, 88 + mov w1, 1 + mov w2, w23 + bl FlashReadPages + b .L2413 +.L2412: + ldr x0, [x20,1040] + mov w1, 255 + ldrh w2, [x20,820] + bl ftl_memset +.L2413: + add x25, x19, :lo12:.LANCHOR2 + mov w0, -3947 + lsl w24, w24, 2 + strh w0, [x21] + mov w23, 0 + add x20, x25, 3552 +.L2414: + cmp w23, w24 + beq .L2415 + ldrh w0, [x20,4] + cbz w0, .L2415 + ldr w0, [x29,92] + add w23, w23, 1 + str w0, [x21,12] + ldrh w0, [x20] + strh w0, [x21,2] + mov x0, x20 + str w22, [x21,8] + bl get_new_active_ppa + str w0, [x29,92] + ldr w1, [x25,868] + mov w2, 0 + str w1, [x21,4] + mov w3, w2 + add w1, w1, 1 + add x0, x29, 88 + cmn w1, #1 + csel w1, w1, wzr, ne + str w1, [x25,868] + mov w1, 1 + bl FlashProgPages + ldrh w0, [x20] + bl decrement_vpc_count + b .L2414 +.L2415: + add x19, x19, :lo12:.LANCHOR2 + mov w0, 1 + strb w0, [x19,3562] + b .L2408 +.L2410: + add x19, x19, :lo12:.LANCHOR2 + strb wzr, [x19,3562] +.L2408: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldr x25, [sp,64] + ldp x29, x30, [sp], 144 + ret + .size FtlWriteDumpData, .-FtlWriteDumpData + .align 2 + .global l2p_flush + .type l2p_flush, %function +l2p_flush: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + mov w19, 0 + adrp x20, .LANCHOR2 + bl FtlWriteDumpData +.L2426: + add x1, x20, :lo12:.LANCHOR2 + ldrh w0, [x1,850] + cmp w0, w19 + bls .L2429 + ldr x1, [x1,1256] + ubfiz x0, x19, 4, 16 + add x0, x1, x0 + ldr w0, [x0,4] + tbz w0, #31, .L2427 + mov w0, w19 + bl flush_l2p_region +.L2427: + add w19, w19, 1 + uxth w19, w19 + b .L2426 +.L2429: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size l2p_flush, .-l2p_flush + .align 2 + .global FtlSuperblockPowerLostFix + .type FtlSuperblockPowerLostFix, %function +FtlSuperblockPowerLostFix: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x19, x20, [sp,16] + mov x19, x0 + adrp x0, .LANCHOR0+136 + stp x21, x22, [sp,32] + str x23, [sp,48] + ldrb w20, [x0,#:lo12:.LANCHOR0+136] + cbz w20, .L2444 + ldrb w20, [x19,8] + cmp w20, 1 + bne .L2439 + ldrh w21, [x19,4] + b .L2431 +.L2439: + mov w20, 0 +.L2444: + mov w21, 12 +.L2431: + adrp x23, .LANCHOR2 + mov w22, -1 +.L2432: + sub w21, w21, #1 + cmn w21, #1 + beq .L2434 + ldrh w0, [x19,4] + cbnz w0, .L2433 +.L2434: + adrp x0, .LANCHOR2 + ldrh w1, [x19] + add x0, x0, :lo12:.LANCHOR2 + ldrh w4, [x19,4] + lsl x1, x1, 1 + ldr x3, [x0,1176] + ldrh w2, [x3,x1] + sub w2, w2, w4 + strh w2, [x3,x1] + strb wzr, [x19,6] + ldrh w0, [x0,810] + strh w0, [x19,2] + strh wzr, [x19,4] + ldp x21, x22, [sp,32] + ldp x19, x20, [sp,16] + ldr x23, [sp,48] + ldp x29, x30, [sp], 128 + ret +.L2433: + mov x0, x19 + bl get_new_active_ppa + str w0, [x29,76] + cmn w0, #1 + beq .L2434 + add x2, x23, :lo12:.LANCHOR2 + str w22, [x29,96] + mov w3, 0 + ldr x1, [x2,1104] + ldr x0, [x2,1040] + str x0, [x29,80] + str x1, [x29,88] + str w22, [x1,8] + str w22, [x1,12] + ldrh w0, [x19] + strh w0, [x1,2] + strh wzr, [x1] + ldr w0, [x2,868] + str w0, [x1,4] + mov w1, 1 + add w0, w0, 1 + cmn w0, #1 + csel w0, w0, wzr, ne + str w0, [x2,868] + add x0, x29, 72 + mov w2, w20 + bl FlashProgPages + ldrh w0, [x19] + bl decrement_vpc_count + b .L2432 + .size FtlSuperblockPowerLostFix, .-FtlSuperblockPowerLostFix + .align 2 + .global FtlVpcCheckAndModify + .type FtlVpcCheckAndModify, %function +FtlVpcCheckAndModify: + stp x29, x30, [sp, -80]! + adrp x1, .LANCHOR3 + adrp x0, .LC126 + add x1, x1, :lo12:.LANCHOR3 + add x29, sp, 0 + add x1, x1, 16 + add x0, x0, :lo12:.LC126 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + adrp x19, .LANCHOR2 + str x23, [sp,48] + bl printk + mov w20, 0 + add x0, x19, :lo12:.LANCHOR2 + mov w1, 0 + mov x21, x19 + ldrh w2, [x0,750] + ldr x0, [x0,1168] + lsl w2, w2, 1 + bl ftl_memset +.L2446: + add x19, x21, :lo12:.LANCHOR2 + ldr w0, [x19,1388] + cmp w20, w0 + bcs .L2461 + mov w0, w20 + add x1, x29, 76 + mov w2, 0 + bl log2phys + ldr w0, [x29,76] + cmn w0, #1 + beq .L2447 + lsr x0, x0, 10 + bl P2V_block_in_plane + ubfiz x0, x0, 1, 16 + ldr x2, [x19,1168] + ldrh w1, [x2,x0] + add w1, w1, 1 + strh w1, [x2,x0] +.L2447: + add w20, w20, 1 + b .L2446 +.L2461: + adrp x22, .LC127 + mov w20, 0 + mov w23, 65535 + add x22, x22, :lo12:.LC127 +.L2449: + ldrh w0, [x19,748] + cmp w0, w20 + bls .L2462 + ubfiz x21, x20, 1, 16 + ldr x0, [x19,1176] + ldrh w2, [x0,x21] + ldr x0, [x19,1168] + ldrh w3, [x0,x21] + cmp w2, w3 + beq .L2452 + cmp w2, w23 + beq .L2452 + mov x0, x22 + mov w1, w20 + bl printk + ldrh w0, [x19,3552] + cmp w0, w20 + beq .L2452 + ldrh w0, [x19,3648] + cmp w0, w20 + beq .L2452 + ldrh w0, [x19,3600] + cmp w0, w20 + beq .L2452 + ldr x0, [x19,1168] + ldrh w1, [x0,x21] + ldr x0, [x19,1176] + strh w1, [x0,x21] + mov w0, w20 + bl update_vpc_list + bl l2p_flush + bl FtlVpcTblFlush +.L2452: + add w20, w20, 1 + uxth w20, w20 + b .L2449 +.L2462: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size FtlVpcCheckAndModify, .-FtlVpcCheckAndModify + .align 2 + .global allocate_new_data_superblock + .type allocate_new_data_superblock, %function +allocate_new_data_superblock: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x2, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + ldr w1, [x2,1392] + ldrh w22, [x0] + cbnz w1, .L2464 + mov x21, x0 + mov w0, 65535 + cmp w22, w0 + beq .L2465 + ubfiz x1, x22, 1, 16 + ldr x0, [x2,1176] + ldrh w0, [x0,x1] + cbz w0, .L2466 + mov w0, w22 + bl INSERT_DATA_LIST + b .L2465 +.L2466: + mov w0, w22 + bl INSERT_FREE_LIST +.L2465: + add x1, x19, :lo12:.LANCHOR2 + strb wzr, [x21,8] + add x0, x1, 3600 + cmp x21, x0 + beq .L2467 + ldrh w2, [x1,760] + cmp w2, 1 + beq .L2467 + adrp x0, .LANCHOR0+136 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + cbz w0, .L2468 +.L2467: + mov w0, 1 + strb w0, [x21,8] + b .L2469 +.L2468: + add x0, x1, 3552 + cmp x21, x0 + bne .L2469 + cmp w2, 3 + beq .L2471 + ldr w0, [x1,860] + cmp w0, 1 + bne .L2472 +.L2471: + add x1, x19, :lo12:.LANCHOR2 + mov w0, 1 + strb w0, [x1,3560] +.L2472: + add x1, x19, :lo12:.LANCHOR2 + ldr w0, [x1,3908] + cbz w0, .L2469 + ldr w0, [x1,912] + cmp w0, 29 + bhi .L2469 + mov w0, 1 + strb w0, [x1,3560] +.L2469: + adrp x1, .LANCHOR4 + add x0, x1, :lo12:.LANCHOR4 + mov x20, x1 + ldrh w2, [x0,160] + mov w0, 65535 + cmp w2, w0 + beq .L2474 + cmp w22, w2 + bne .L2475 + add x19, x19, :lo12:.LANCHOR2 + ubfiz x1, x2, 1, 16 + ldr x0, [x19,1176] + ldrh w0, [x0,x1] + cbz w0, .L2476 +.L2475: + mov w0, w2 + bl update_vpc_list +.L2476: + add x1, x20, :lo12:.LANCHOR4 + mov w0, -1 + strh w0, [x1,160] +.L2474: + mov x0, x21 + bl allocate_data_superblock + bl l2p_flush + mov w0, 0 + bl FtlEctTblFlush + bl FtlVpcTblFlush +.L2464: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size allocate_new_data_superblock, .-allocate_new_data_superblock + .align 2 + .global FtlReadRefresh + .type FtlReadRefresh, %function +FtlReadRefresh: + stp x29, x30, [sp, -112]! + adrp x1, .LANCHOR2 + add x0, x1, :lo12:.LANCHOR2 + add x29, sp, 0 + add x2, x0, 3968 + stp x19, x20, [sp,16] + str x21, [sp,32] + ldr w3, [x2,80] + cbz w3, .L2490 + ldr w3, [x2,84] + ldr w1, [x0,1388] + cmp w3, w1 + bcs .L2491 + mov w20, 2048 + mov x19, x0 +.L2496: + ldr w0, [x19,4052] + ldr w1, [x19,1388] + cmp w0, w1 + bcs .L2493 + add x1, x29, 52 + mov w2, 0 + bl log2phys + ldr w0, [x19,4052] + ldr w1, [x29,52] + add w0, w0, 1 + str w0, [x19,4052] + cmn w1, #1 + beq .L2494 + str w1, [x29,60] + mov w2, 0 + str w0, [x29,80] + mov w1, 1 + add x0, x29, 56 + str xzr, [x29,64] + str xzr, [x29,72] + str wzr, [x29,56] + bl FlashReadPages + ldr w0, [x29,56] + cmp w0, 256 + bne .L2493 + ldr w0, [x29,52] + lsr x0, x0, 10 + bl P2V_block_in_plane + bl FtlGcRefreshBlock + b .L2493 +.L2494: + subs w20, w20, #1 + bne .L2496 +.L2493: + mov w0, -1 + b .L2498 +.L2491: + ldr w0, [x0,892] + str wzr, [x2,80] + str wzr, [x2,84] + str w0, [x2,76] + b .L2504 +.L2490: + adrp x2, .LANCHOR0+136 + ldr w3, [x0,908] + ldr w0, [x0,3908] + ldrb w4, [x2,#:lo12:.LANCHOR0+136] + mov w2, 4194304 + cbnz w4, .L2499 + add w0, w0, w3, lsr 10 + mov w3, 33554432 + asr w2, w3, w0 +.L2499: + add x4, x1, :lo12:.LANCHOR2 + ldr w3, [x4,892] + ldr w0, [x4,4044] + add w5, w3, 1048576 + cmp w0, w5 + bhi .L2500 + add w0, w2, w0 + cmp w0, w3 + bcc .L2500 + ldrb w2, [x4,3884] + mov w0, 0 + cbnz w2, .L2498 +.L2500: + add x0, x1, :lo12:.LANCHOR2 + mov w1, 1 + str wzr, [x0,4052] + str w1, [x0,4048] + str w3, [x0,4044] +.L2504: + mov w0, 0 +.L2498: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 112 + ret + .size FtlReadRefresh, .-FtlReadRefresh + .align 2 + .global ftl_do_gc + .type ftl_do_gc, %function +ftl_do_gc: + stp x29, x30, [sp, -144]! + mov w2, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x3, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + ldr w4, [x3,1392] + cbnz w4, .L2650 + ldr w4, [x3,916] + cbnz w4, .L2650 + ldrh w4, [x3,3528] + cmp w4, 47 + bls .L2650 + mov w23, w0 + adrp x0, .LANCHOR1+3036 + mov w24, w1 + ldrh w1, [x0,#:lo12:.LANCHOR1+3036] + mov w0, 65535 + cmp w1, w0 + bne .L2507 +.L2510: + add x0, x19, :lo12:.LANCHOR2 + mov w2, 65535 + ldrh w1, [x0,942] + cmp w1, w2 + bne .L2508 + b .L2509 +.L2507: + ldrh w1, [x3,3648] + cmp w1, w0 + beq .L2510 + mov w0, 1 + bl FtlGcFreeTempBlock + mov w2, 1 + cbz w0, .L2510 + b .L2650 +.L2508: + ldrh w3, [x0,940] + cmp w3, w2 + bne .L2509 + strh w1, [x0,940] + mov w1, -1 + strh w1, [x0,942] +.L2509: + add x1, x19, :lo12:.LANCHOR2 + cmp w23, 1 + ldr w0, [x1,932] + add w0, w0, 1 + add w0, w0, w23, lsl 7 + str w0, [x1,932] + bne .L2521 + ldr w1, [x1,3908] + cbnz w1, .L2512 + adrp x1, .LANCHOR0+136 + ldrb w1, [x1,#:lo12:.LANCHOR0+136] + cbz w1, .L2521 +.L2512: + add x20, x19, :lo12:.LANCHOR2 + ldr w1, [x20,912] + cmp w1, 29 + bhi .L2521 + adrp x21, .LANCHOR4 + add x1, x21, :lo12:.LANCHOR4 + ldrh w1, [x1,360] + add w0, w0, w1 + str w0, [x20,932] + bl FtlGcReFreshBadBlk + ldrh w0, [x20,3920] + mov w1, 65535 + cmp w0, w1 + bne .L2521 + ldrh w1, [x20,940] + cmp w1, w0 + bne .L2521 + ldr w0, [x20,932] + cmp w0, 1024 + bhi .L2513 + ldrh w0, [x20,3544] + cmp w0, 63 + bhi .L2521 +.L2513: + add x0, x19, :lo12:.LANCHOR2 + add x1, x21, :lo12:.LANCHOR4 + ldrh w2, [x0,946] + ldrh w3, [x0,3544] + add w2, w2, 64 + strh wzr, [x1,360] + cmp w3, w2 + bgt .L2521 + str wzr, [x0,932] + ldr w0, [x0,912] + cbnz w0, .L2514 + mov w0, 6 + b .L2672 +.L2514: + cmp w0, 5 + bhi .L2515 + mov w0, 18 +.L2672: + strh w0, [x1,360] +.L2515: + mov w0, 32 + mov w27, 65535 + bl List_get_gc_head_node + uxth w25, w0 + cmp w25, w27 + beq .L2520 + add x22, x19, :lo12:.LANCHOR2 + ldrh w0, [x22,948] + cbz w0, .L2517 + ldrh w1, [x22,812] + ubfiz x25, x25, 1, 16 + ldrh w3, [x22,740] + ldr x26, [x22,1176] + mul w1, w1, w3 + ldrh w2, [x26,x25] + add w1, w1, 1 + cmp w2, w1 + bgt .L2520 + add w1, w0, 1 + str wzr, [x22,920] + uxth w1, w1 + strh w1, [x22,948] + str x1, [x29,120] + bl List_get_gc_head_node + uxth w20, w0 + cmp w20, w27 + ldr x1, [x29,120] + beq .L2520 + ubfiz x27, x20, 1, 16 + adrp x0, .LC128 + ldrh w4, [x26,x25] + add x0, x0, :lo12:.LC128 + mov w2, w20 + ldrh w3, [x26,x27] + bl printk + ldrh w0, [x22,948] + cmp w0, 40 + bls .L2518 + ldr x0, [x22,1176] + ldrh w0, [x0,x27] + cmp w0, 32 + bls .L2518 + strh wzr, [x22,948] +.L2518: + add x21, x21, :lo12:.LANCHOR4 + mov w0, 6 + strh w0, [x21,360] + b .L2522 +.L2517: + mov w0, 1 + strh w0, [x22,948] +.L2520: + bl GetSwlReplaceBlock + uxth w20, w0 + mov w0, 65535 + cmp w20, w0 + bne .L2522 + add x21, x21, :lo12:.LANCHOR4 + strh wzr, [x21,360] +.L2521: + add x22, x19, :lo12:.LANCHOR2 + mov w0, 65535 + ldrh w20, [x22,3920] + cmp w20, w0 + bne .L2678 + ldrh w0, [x22,3648] + cmp w0, w20 + beq .L2679 +.L2522: + mov w0, 65535 + cmp w20, w0 + cset w1, eq + cbz w1, .L2535 + cbnz w23, .L2535 + add x0, x19, :lo12:.LANCHOR2 + mov w21, 1 + ldrh w1, [x0,3544] + cmp w1, 24 + bhi .L2536 + cmp w1, 16 + ldrh w21, [x0,810] + bls .L2537 + lsr w21, w21, 5 + b .L2536 +.L2537: + cmp w1, 12 + bls .L2538 + lsr w21, w21, 4 + b .L2536 +.L2538: + lsr w0, w21, 2 + cmp w1, 9 + csel w21, w0, w21, cs +.L2536: + add x0, x19, :lo12:.LANCHOR2 + ldrh w2, [x0,944] + cmp w2, w1 + bcs .L2540 + ldrh w1, [x0,3648] + mov w2, 65535 + cmp w1, w2 + bne .L2541 + ldrh w2, [x0,940] + cmp w2, w1 + bne .L2541 + adrp x1, .LANCHOR4+360 + ldrh w2, [x1,#:lo12:.LANCHOR4+360] + cbnz w2, .L2542 + ldr w1, [x0,1388] + ldr w3, [x0,3836] + add w1, w1, w1, lsl 1 + cmp w3, w1, lsr 2 + bcs .L2543 +.L2542: + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x1,3916] + add w0, w0, w0, lsl 1 + asr w0, w0, 2 + strh w0, [x1,944] + b .L2544 +.L2543: + mov w1, 18 + strh w1, [x0,944] +.L2544: + add x19, x19, :lo12:.LANCHOR2 + str wzr, [x19,920] + b .L2650 +.L2541: + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x1,3916] + add w0, w0, w0, lsl 1 + asr w0, w0, 2 + strh w0, [x1,944] +.L2540: + cmp w24, 2 + bhi .L2605 + add x0, x19, :lo12:.LANCHOR2 + ldr w0, [x0,3908] + cbz w0, .L2605 + add w21, w21, 1 + uxth w21, w21 + b .L2605 +.L2535: + add x21, x19, :lo12:.LANCHOR2 + mov w2, 65535 + ldrh w0, [x21,3648] + cmp w0, w2 + bne .L2547 + cbz w1, .L2547 + ldrh w1, [x21,940] + cmp w1, w0 + bne .L2547 + ldrh w1, [x21,3920] + cmp w1, w0 + beq .L2548 +.L2553: + mov w20, 65535 + b .L2547 +.L2548: + ldrh w24, [x21,3544] + adrp x20, .LANCHOR4 + ldrh w0, [x21,944] + str wzr, [x21,920] + cmp w0, w24 + bcs .L2549 + add x0, x20, :lo12:.LANCHOR4 + ldrh w0, [x0,360] + cbnz w0, .L2550 + ldr w0, [x21,1388] + ldr w1, [x21,3836] + add w0, w0, w0, lsl 1 + cmp w1, w0, lsr 2 + bcs .L2551 +.L2550: + add x19, x19, :lo12:.LANCHOR2 + ldrh w0, [x19,3916] + add w0, w0, w0, lsl 1 + asr w0, w0, 2 + strh w0, [x19,944] + b .L2552 +.L2551: + mov w0, 18 + strh w0, [x21,944] +.L2552: + add x20, x20, :lo12:.LANCHOR4 + bl FtlReadRefresh + ldrh w2, [x20,360] + b .L2650 +.L2549: + add x22, x20, :lo12:.LANCHOR4 + ldrh w0, [x22,360] + cbnz w0, .L2553 + ldrh w20, [x21,3916] + add w1, w20, w20, lsl 1 + asr w1, w1, 2 + strh w1, [x21,944] + bl List_get_gc_head_node + ubfiz x0, x0, 1, 16 + ldr x1, [x21,1176] + ldrh w2, [x21,740] + ldrh w1, [x1,x0] + ldrh w0, [x21,812] + mul w0, w0, w2 + mov w2, 2 + sdiv w0, w0, w2 + cmp w1, w0 + ble .L2554 + sub w20, w20, #1 + cmp w24, w20 + blt .L2554 + bl FtlReadRefresh + b .L2676 +.L2554: + cbnz w1, .L2553 + mov w0, -1 + add x19, x19, :lo12:.LANCHOR2 + bl decrement_vpc_count + ldrh w2, [x19,3544] + add w2, w2, 1 + b .L2650 +.L2547: + add x0, x19, :lo12:.LANCHOR2 + mov w21, 2 + ldr w0, [x0,3908] + cmp w0, wzr + csinc w21, w21, wzr, ne + b .L2546 +.L2605: + mov w20, 65535 +.L2546: + add x0, x19, :lo12:.LANCHOR2 + mov w2, 65535 + ldrh w1, [x0,3920] + cmp w1, w2 + bne .L2556 + cmp w20, w1 + beq .L2557 + strh w20, [x0,3920] + b .L2558 +.L2557: + ldrh w1, [x0,940] + cmp w1, w20 + beq .L2558 + ubfiz x1, x1, 1, 16 + ldr x2, [x0,1176] + ldrh w1, [x2,x1] + cbnz w1, .L2559 + mov w1, -1 + strh w1, [x0,940] +.L2559: + add x0, x19, :lo12:.LANCHOR2 + ldrh w1, [x0,940] + strh w1, [x0,3920] + mov w1, -1 + strh w1, [x0,940] +.L2558: + add x22, x19, :lo12:.LANCHOR2 + mov w1, 65535 + ldrh w0, [x22,3920] + strb wzr, [x22,3928] + cmp w0, w1 + beq .L2556 + bl IsBlkInGcList + cbz w0, .L2561 + mov w0, -1 + strh w0, [x22,3920] +.L2561: + adrp x0, .LANCHOR0+136 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + cbz w0, .L2562 + add x0, x19, :lo12:.LANCHOR2 + add x22, x0, 3920 + ldrh w0, [x0,3920] + bl ftl_get_blk_mode + strb w0, [x22,8] +.L2562: + add x22, x19, :lo12:.LANCHOR2 + mov w0, 65535 + add x24, x22, 3920 + ldrh w1, [x22,3920] + cmp w1, w0 + beq .L2556 + mov x0, x24 + bl make_superblock + strh wzr, [x22,3922] + adrp x0, .LANCHOR4 + ldrh w2, [x22,3920] + add x0, x0, :lo12:.LANCHOR4 + ldr x1, [x22,1176] + strb wzr, [x22,3926] + strh wzr, [x0,362] + ldrh w1, [x1,x2,lsl 1] + strh w1, [x0,364] +.L2556: + add x3, x19, :lo12:.LANCHOR2 + ldrh w0, [x3,3920] + ldrh w1, [x3,3552] + cmp w1, w0 + beq .L2563 + ldrh w1, [x3,3600] + cmp w1, w0 + beq .L2563 +.L2564: + mov x28, x3 + mov w24, 65535 + b .L2565 +.L2563: + add x19, x19, :lo12:.LANCHOR2 + mov w0, -1 + strh w0, [x19,3920] + b .L2677 +.L2586: + ldrh w0, [x28,3922] + add w21, w21, w0 + uxth w21, w21 + strh w21, [x28,3922] + cmp w21, w25 + bcs .L2680 +.L2588: + ldrh w0, [x28,3544] + cmp w0, 2 + bhi .L2591 + ldrh w21, [x28,810] +.L2565: + ldrh w0, [x28,3920] + cmp w0, w24 + bne .L2566 + str wzr, [x28,920] + adrp x25, .LANCHOR4 +.L2567: + ldrh w22, [x28,948] + mov w0, w22 + bl List_get_gc_head_node + uxth w26, w0 + cmp w26, w24 + strh w26, [x28,3920] + bne .L2568 + strh wzr, [x28,948] + mov w2, 8 + b .L2650 +.L2568: + mov w0, w26 + add w22, w22, 1 + bl IsBlkInGcList + cbz w0, .L2569 + strh w22, [x28,948] + b .L2567 +.L2569: + ldrh w5, [x28,740] + ubfiz x1, x26, 1, 16 + ldrh w0, [x28,810] + uxth w22, w22 + ldr x2, [x28,1176] + mov w3, 2 + strh w22, [x28,948] + mul w0, w0, w5 + ldrh w4, [x2,x1] + sdiv w5, w0, w3 + cmp w4, w5 + bgt .L2571 + cmp w4, 8 + bls .L2572 + cmp w22, 48 + bls .L2572 + add x4, x25, :lo12:.LANCHOR4 + ldrh w4, [x4,176] + cmp w4, 35 + bhi .L2572 +.L2571: + strh wzr, [x28,948] +.L2572: + ldrh w1, [x2,x1] + cmp w1, w0 + blt .L2573 + cmp w20, w24 + bne .L2573 + add x19, x19, :lo12:.LANCHOR2 + mov w0, -1 + strh wzr, [x19,948] + strh w0, [x19,3920] +.L2677: + adrp x0, .LANCHOR4+360 + ldrh w2, [x0,#:lo12:.LANCHOR4+360] + b .L2650 +.L2573: + cbnz w1, .L2574 + mov w0, -1 + bl decrement_vpc_count + ldrh w0, [x28,948] + add w0, w0, 1 + strh w0, [x28,948] + b .L2567 +.L2574: + adrp x0, .LANCHOR0 + strb wzr, [x28,3928] + add x0, x0, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L2575 + mov w0, w26 + bl ftl_get_blk_mode + strb w0, [x28,3928] +.L2575: + add x22, x28, 3920 + mov x0, x22 + bl make_superblock + adrp x1, .LANCHOR4 + ldrh w2, [x28,3920] + add x1, x1, :lo12:.LANCHOR4 + ldr x0, [x28,1176] + strh wzr, [x1,362] + ldrh w0, [x0,x2,lsl 1] + strh w0, [x1,364] + strh wzr, [x28,3922] + strb wzr, [x28,3926] +.L2566: + cmp w23, 1 + bne .L2576 + bl FtlReadRefresh +.L2576: + mov w0, 1 + str w0, [x28,916] + adrp x0, .LANCHOR0 + ldrh w25, [x28,810] + add x0, x0, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L2577 + ldrb w0, [x28,3928] + cmp w0, 1 + bne .L2577 + ldrh w25, [x28,812] +.L2577: + ldrh w0, [x28,3922] + add w1, w0, w21 + cmp w1, w25 + ble .L2578 + sub w21, w25, w0 + uxth w21, w21 +.L2578: + mov w26, 0 +.L2579: + cmp w21, w26, uxth + bls .L2586 + add x1, x28, 3920 + ldrh w4, [x1,2] + mov x0, 0 + ldrh w6, [x28,740] + add w4, w4, w26 + mov w22, w0 +.L2587: + cmp w6, w0, uxth + bls .L2681 + add x2, x1, x0, lsl 1 + ldrh w2, [x2,16] + cmp w2, w24 + beq .L2580 + mov w3, 56 + ldr x7, [x28,1016] + orr w2, w4, w2, lsl 10 + umull x5, w22, w3 + add w22, w22, 1 + add x5, x7, x5 + uxth w22, w22 + str w2, [x5,4] +.L2580: + add x0, x0, 1 + b .L2587 +.L2681: + ldr x0, [x28,1016] + mov w1, w22 + ldrb w2, [x28,3928] + mov x27, 0 + bl FlashReadPages +.L2582: + cmp w22, w27, uxth + bls .L2682 + mov x0, 56 + mul x5, x27, x0 + ldr x0, [x28,1016] + add x1, x0, x5 + ldr w0, [x0,x5] + cmn w0, #1 + ldr x4, [x1,16] + beq .L2607 + ldrh w0, [x4] + mov w1, 61589 + cmp w0, w1 + bne .L2607 + ldr w0, [x4,8] + add x1, x29, 140 + mov w2, 0 + str x5, [x29,112] + str x4, [x29,120] + bl log2phys + ldr x6, [x28,1016] + ldr x5, [x29,112] + ldr w0, [x29,140] + add x6, x6, x5 + ldr x4, [x29,120] + and w0, w0, 2147483647 + ldr w1, [x6,4] + cmp w0, w1 + bne .L2607 + adrp x0, .LANCHOR4 + ldr x1, [x28,992] + add x2, x0, :lo12:.LANCHOR4 + str x2, [x29,112] + str x5, [x29,96] + str x4, [x29,104] + ldrh w0, [x2,362] + add w0, w0, 1 + strh w0, [x2,362] + ldr w0, [x2,144] + mov x2, 56 + madd x1, x0, x2, x1 + ldr w0, [x6,24] + str x1, [x29,120] + str w0, [x1,24] + bl Ftl_get_new_temp_ppa + ldr x1, [x29,120] + mov x3, 56 + ldr x2, [x29,112] + ldr x5, [x29,96] + str w0, [x1,4] + ldr w0, [x2,144] + ldr x1, [x28,992] + ldr x4, [x29,104] + str x2, [x29,120] + madd x0, x0, x3, x1 + ldr x1, [x28,1016] + add x1, x1, x5 + ldr x6, [x1,8] + str x6, [x0,8] + add x6, x28, 3648 + str x6, [x29,112] + ldr x1, [x1,16] + str x1, [x0,16] + mov w1, 1 + ldr w0, [x29,140] + str w0, [x4,12] + ldrh w0, [x28,3648] + strh w0, [x4,2] + ldr w0, [x28,868] + str w0, [x4,4] + ldr w0, [x2,144] + add w0, w0, 1 + str w0, [x2,144] + ldr x0, [x28,1016] + add x0, x0, x5 + bl FtlGcBufAlloc + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbnz w0, .L2584 + ldr x6, [x29,112] + ldr x2, [x29,120] + ldrb w0, [x6,7] + ldr w1, [x2,144] + cmp w1, w0 + beq .L2584 + ldrh w0, [x6,4] + cbnz w0, .L2607 +.L2584: + bl Ftl_gc_temp_data_write_back + cbz w0, .L2607 + adrp x0, .LANCHOR4 + add x19, x19, :lo12:.LANCHOR2 + add x0, x0, :lo12:.LANCHOR4 + str wzr, [x19,916] + ldrh w2, [x0,360] + b .L2650 +.L2607: + add x27, x27, 1 + b .L2582 +.L2682: + add w26, w26, 1 + b .L2579 +.L2680: + adrp x0, .LANCHOR4 + add x22, x0, :lo12:.LANCHOR4 + mov x21, x0 + ldr w1, [x22,144] + cbz w1, .L2589 + bl Ftl_gc_temp_data_write_back + cbz w0, .L2589 + str wzr, [x28,916] +.L2676: + ldrh w2, [x22,360] + b .L2650 +.L2589: + add x0, x21, :lo12:.LANCHOR4 + ldrh w2, [x0,362] + cbnz w2, .L2590 + ldrh w0, [x28,3920] + ldr x1, [x28,1176] + lsl x0, x0, 1 + ldrh w4, [x1,x0] + cbz w4, .L2590 + strh w2, [x1,x0] + ldrh w0, [x28,3920] + bl update_vpc_list + bl FtlCacheWriteBack + bl l2p_flush + bl FtlVpcTblFlush +.L2590: + mov w0, -1 + strh w0, [x28,3920] + b .L2588 +.L2591: + adrp x1, .LANCHOR4+360 + str wzr, [x28,916] + ldrh w2, [x1,#:lo12:.LANCHOR4+360] + cmp w2, wzr + csinc w2, w2, w0, ne + b .L2650 +.L2679: + ldrh w25, [x22,940] + cmp w25, w20 + bne .L2522 + ldrh w0, [x22,3544] + mov w2, 1024 + ldr w1, [x22,932] + cmp w0, 24 + mov w0, 5120 + csel w0, w0, w2, cc + cmp w1, w0 + bls .L2522 + adrp x0, .LANCHOR4+360 + str wzr, [x22,932] + strh wzr, [x0,#:lo12:.LANCHOR4+360] + bl GetSwlReplaceBlock + uxth w20, w0 + cmp w20, w25 + bne .L2524 + ldrh w1, [x22,3544] + ldrh w0, [x22,946] + cmp w1, w0 + bcs .L2525 + mov w0, 64 + bl List_get_gc_head_node + uxth w0, w0 + cmp w0, w20 + beq .L2534 + ldr w2, [x22,856] + uxtw x1, w0 + cbnz w2, .L2527 + ldrh w0, [x22,760] + cmp w0, 3 + beq .L2527 + ldr w0, [x22,860] + cbnz w0, .L2527 + ldr w0, [x22,3908] + cbnz w0, .L2527 + adrp x0, .LANCHOR0+136 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + cbz w0, .L2528 +.L2527: + add x2, x19, :lo12:.LANCHOR2 + ldr x0, [x2,1176] + ldrh w4, [x0,x1,lsl 1] + ldrh w1, [x2,812] + ldrh w0, [x2,740] + ldrh w2, [x2,760] + mul w3, w1, w0 + cmp w2, 3 + mov w0, 0 + lsr w1, w1, 1 + csel w0, w1, w0, eq + add w0, w3, w0 + cmp w4, w0 + bgt .L2530 + mov w0, 0 + bl List_get_gc_head_node + uxth w20, w0 + add x0, x19, :lo12:.LANCHOR2 + ldr w1, [x0,1388] + ldr w2, [x0,3836] + add w1, w1, w1, lsl 1 + cmp w2, w1, lsr 2 + bhi .L2674 + mov w1, 160 + b .L2673 +.L2530: + add x0, x19, :lo12:.LANCHOR2 + mov w1, 128 + b .L2675 +.L2528: + ldr x2, [x22,1176] + ldrh w1, [x2,x1,lsl 1] + cmp w1, 7 + bhi .L2533 + bl List_get_gc_head_node + uxth w20, w0 + add x0, x19, :lo12:.LANCHOR2 +.L2674: + mov w1, 128 +.L2673: + strh w1, [x0,946] + mov w0, 65535 + cmp w20, w0 + beq .L2534 + b .L2524 +.L2533: + add x0, x19, :lo12:.LANCHOR2 + mov w1, 64 +.L2675: + strh w1, [x0,946] + b .L2534 +.L2525: + mov w0, 80 + strh w0, [x22,946] + b .L2534 +.L2524: + add x5, x19, :lo12:.LANCHOR2 + ubfiz x4, x20, 1, 32 + adrp x0, .LC129 + mov w1, w20 + add x0, x0, :lo12:.LC129 + ldr x3, [x5,1176] + ldr x6, [x5,1160] + ldrh w2, [x5,3544] + ldrh w3, [x3,x4] + ldrh w5, [x5,944] + ldrh w4, [x6,x4] + bl printk +.L2534: + bl FtlGcReFreshBadBlk + b .L2522 +.L2678: + mov w20, w0 + b .L2522 +.L2650: + mov w0, w2 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret + .size ftl_do_gc, .-ftl_do_gc + .align 2 + .global FtlCacheWriteBack + .type FtlCacheWriteBack, %function +FtlCacheWriteBack: + stp x29, x30, [sp, -112]! + adrp x0, .LANCHOR4+368 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + ldr x20, [x0,#:lo12:.LANCHOR4+368] + add x0, x19, :lo12:.LANCHOR2 + str x27, [sp,80] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + ldr w22, [x0,1392] + cbnz w22, .L2685 + ldr w1, [x0,960] + cbz w1, .L2685 + adrp x0, .LANCHOR0+136 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + cbz w0, .L2687 + ldrb w0, [x20,8] + cmp w0, 1 + cset w22, eq +.L2687: + add x0, x19, :lo12:.LANCHOR2 + ldrb w3, [x20,9] + adrp x24, .LC130 + mov w2, w22 + mov w23, 0 + mov w26, 56 + ldr x0, [x0,1024] + add x24, x24, :lo12:.LC130 + bl FlashProgPages +.L2688: + add x0, x19, :lo12:.LANCHOR2 + ldr w1, [x0,960] + cmp w23, w1 + bcs .L2705 + umull x21, w23, w26 + ldr x1, [x0,1024] + add x0, x1, x21 + ldr w25, [x1,x21] + cmn w25, #1 + beq .L2708 + ldr w1, [x0,4] + cbz w22, .L2722 + orr w1, w1, -2147483648 +.L2722: + ldr w0, [x0,24] + mov w2, 1 + str w1, [x29,108] + add x25, x19, :lo12:.LANCHOR2 + add x1, x29, 108 + bl log2phys + ldr x0, [x25,1024] + add x21, x0, x21 + ldr x0, [x21,16] + ldr w0, [x0,12] + cmn w0, #1 + beq .L2692 + lsr x0, x0, 10 + bl P2V_block_in_plane + uxth w1, w0 + ubfiz x0, x1, 1, 16 + ldr x2, [x25,1176] + mov w21, w1 + ldrh w2, [x2,x0] + cbnz w2, .L2693 + mov x0, x24 + bl printk +.L2693: + mov w0, w21 + bl decrement_vpc_count +.L2692: + add w23, w23, 1 + b .L2688 +.L2724: + mov w20, 16386 +.L2704: + add x0, x19, :lo12:.LANCHOR2 + ldrh w0, [x0,950] + cbz w0, .L2705 + mov w0, 1 + mov w1, w0 + bl ftl_do_gc + subs w20, w20, #1 + bne .L2704 +.L2705: + add x19, x19, :lo12:.LANCHOR2 + str wzr, [x19,960] + b .L2685 +.L2708: + adrp x26, .LC130 + mov w24, 0 + mov w27, 56 + add x26, x26, :lo12:.LC130 +.L2689: + add x0, x19, :lo12:.LANCHOR2 + ldr w1, [x0,960] + cmp w24, w1 + bcs .L2724 + umull x21, w24, w27 + ldr x0, [x0,1024] + str w25, [x0,x21] +.L2695: + add x23, x19, :lo12:.LANCHOR2 + ldr x0, [x23,1024] + add x1, x0, x21 + ldr w0, [x0,x21] + cmn w0, #1 + ldr w0, [x1,4] + bne .L2725 + lsr x0, x0, 10 + bl P2V_block_in_plane + ldrh w1, [x20] + cmp w1, w0, uxth + bne .L2696 + ldr x2, [x23,1176] + ubfiz x1, x1, 1, 16 + ldrh w3, [x20,4] + ldrh w0, [x2,x1] + sub w0, w0, w3 + strh w0, [x2,x1] + strb wzr, [x20,6] + ldrh w0, [x23,810] + strh w0, [x20,2] + strh wzr, [x20,4] +.L2696: + ldrh w0, [x20,4] + cbnz w0, .L2697 + mov x0, x20 + bl allocate_new_data_superblock +.L2697: + add x23, x19, :lo12:.LANCHOR2 + ldr w0, [x23,4064] + add w0, w0, 1 + str w0, [x23,4064] + ldr x0, [x23,1024] + add x0, x0, x21 + ldr w0, [x0,4] + lsr x0, x0, 10 + bl FtlGcMarkBadPhyBlk + mov x0, x20 + bl get_new_active_ppa + str w0, [x29,108] + ldr x1, [x23,1024] + mov w2, w22 + add x1, x1, x21 + str w0, [x1,4] + mov w1, 1 + ldr x0, [x23,1024] + ldrb w3, [x20,9] + add x0, x0, x21 + bl FlashProgPages + ldr w0, [x23,1392] + cbz w0, .L2695 + b .L2685 +.L2725: + cbz w22, .L2723 + orr w0, w0, -2147483648 +.L2723: + str w0, [x29,108] + mov w2, 1 + ldr w0, [x1,24] + add x23, x19, :lo12:.LANCHOR2 + add x1, x29, 108 + bl log2phys + ldr x0, [x23,1024] + add x21, x0, x21 + ldr x0, [x21,16] + ldr w0, [x0,12] + cmn w0, #1 + beq .L2701 + lsr x0, x0, 10 + bl P2V_block_in_plane + uxth w1, w0 + ubfiz x0, x1, 1, 16 + ldr x2, [x23,1176] + mov w21, w1 + ldrh w2, [x2,x0] + cbnz w2, .L2702 + mov x0, x26 + bl printk +.L2702: + mov w0, w21 + bl decrement_vpc_count +.L2701: + add w24, w24, 1 + b .L2689 +.L2685: + mov w0, 0 + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 112 + ret + .size FtlCacheWriteBack, .-FtlCacheWriteBack + .align 2 + .global FtlSysFlush + .type FtlSysFlush, %function +FtlSysFlush: + adrp x0, .LANCHOR2+1392 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr w0, [x0,#:lo12:.LANCHOR2+1392] + cbnz w0, .L2727 + bl FtlCacheWriteBack + bl l2p_flush + mov w0, 1 + bl FtlEctTblFlush + bl FtlVpcTblFlush +.L2727: + mov w0, 0 + ldp x29, x30, [sp], 16 + ret + .size FtlSysFlush, .-FtlSysFlush + .align 2 + .global FtlDeInit + .type FtlDeInit, %function +FtlDeInit: + adrp x0, .LANCHOR1+3032 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr w0, [x0,#:lo12:.LANCHOR1+3032] + cmp w0, 1 + bne .L2729 + bl FtlSysFlush +.L2729: + mov w0, 0 + ldp x29, x30, [sp], 16 + ret + .size FtlDeInit, .-FtlDeInit + .align 2 + .global ftl_deinit + .type ftl_deinit, %function +ftl_deinit: + stp x29, x30, [sp, -16]! + add x29, sp, 0 + bl ftl_flash_de_init + bl FtlDeInit + bl ftl_flash_de_init + ldp x29, x30, [sp], 16 + ret + .size ftl_deinit, .-ftl_deinit + .align 2 + .global ftl_cache_flush + .type ftl_cache_flush, %function +ftl_cache_flush: + stp x29, x30, [sp, -16]! + add x29, sp, 0 + bl FtlCacheWriteBack + ldp x29, x30, [sp], 16 + ret + .size ftl_cache_flush, .-ftl_cache_flush + .align 2 + .global ftl_discard + .type ftl_discard, %function +ftl_discard: + stp x29, x30, [sp, -80]! + add w2, w0, w1 + add x29, sp, 0 + stp x19, x20, [sp,16] + mov w20, w0 + adrp x0, .LANCHOR0+4048 + mov w19, w1 + str x23, [sp,48] + stp x21, x22, [sp,32] + ldr w1, [x0,#:lo12:.LANCHOR0+4048] + mov w0, -1 + cmp w2, w1 + bhi .L2733 + cmp w19, 31 + bls .L2747 + adrp x22, .LANCHOR2 + add x21, x22, :lo12:.LANCHOR2 + ldr w0, [x21,1392] + cbnz w0, .L2747 + bl FtlCacheWriteBack + ldrh w1, [x21,816] + udiv w21, w20, w1 + msub w20, w1, w21, w20 + uxth w20, w20 + cbz w20, .L2736 + sub w1, w1, w20 + add w21, w21, 1 + cmp w1, w19 + csel w1, w1, w19, ls + sub w19, w19, w1, uxth +.L2736: + mov w0, -1 + adrp x23, .LANCHOR4 + str w0, [x29,76] +.L2737: + add x20, x22, :lo12:.LANCHOR2 + ldrh w0, [x20,816] + cmp w19, w0 + bcc .L2748 + mov w0, w21 + add x1, x29, 72 + mov w2, 0 + bl log2phys + ldr w0, [x29,72] + cmn w0, #1 + beq .L2738 + add x1, x23, :lo12:.LANCHOR4 + mov w2, 1 + ldr w0, [x1,376] + add w0, w0, 1 + str w0, [x1,376] + ldr w0, [x20,880] + add x1, x29, 76 + add w0, w0, 1 + str w0, [x20,880] + mov w0, w21 + bl log2phys + ldr w0, [x29,72] + lsr x0, x0, 10 + bl P2V_block_in_plane + bl decrement_vpc_count +.L2738: + add x0, x22, :lo12:.LANCHOR2 + add w21, w21, 1 + ldrh w0, [x0,816] + sub w19, w19, w0 + b .L2737 +.L2748: + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + ldr w1, [x0,376] + cmp w1, 32 + bls .L2747 + str wzr, [x0,376] + bl l2p_flush + bl FtlVpcTblFlush +.L2747: + mov w0, 0 +.L2733: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size ftl_discard, .-ftl_discard + .align 2 + .global FtlGcFreeTempBlock + .type FtlGcFreeTempBlock, %function +FtlGcFreeTempBlock: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x2, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + ldr w3, [x2,1392] + ldrh w1, [x2,810] + cbnz w3, .L2784 + ldrh w20, [x2,3648] + mov w4, 65535 + cmp w20, w4 + bne .L2752 +.L2761: + add x20, x19, :lo12:.LANCHOR2 + adrp x21, .LANCHOR4 + add x22, x21, :lo12:.LANCHOR4 + mov w0, 65535 + add x23, x20, 3648 + ldrh w1, [x20,3648] + str wzr, [x22,168] + cmp w1, w0 + beq .L2784 + bl FtlCacheWriteBack + mov w26, 12 + ldrb w0, [x23,7] + ldrh w3, [x20,810] + ldr x1, [x20,1176] + ldrh w2, [x20,3648] + mul w0, w0, w3 + strh w0, [x1,x2,lsl 1] + ldrh w1, [x22,178] + mov w22, 0 + ldr w0, [x20,872] + add w0, w1, w0 + str w0, [x20,872] + b .L2762 +.L2752: + cbz w0, .L2755 + adrp x0, .LANCHOR1 + add x0, x0, :lo12:.LANCHOR1 + ldrh w5, [x0,3036] + cmp w5, w4 + beq .L2756 +.L2757: + mov w1, 2 + b .L2755 +.L2756: + strh w3, [x0,3036] + ldrh w0, [x2,3544] + cmp w0, 17 + bhi .L2757 +.L2755: + add x21, x19, :lo12:.LANCHOR2 + add x0, x21, 3648 + bl FtlGcScanTempBlk + str w0, [x29,92] + cmn w0, #1 + beq .L2758 + ubfiz x20, x20, 1, 16 + ldr x1, [x21,1160] + ldrh w0, [x1,x20] + cmp w0, 4 + bls .L2759 + sub w0, w0, #5 + strh w0, [x1,x20] + mov w0, 1 + bl FtlEctTblFlush +.L2759: + adrp x0, .LANCHOR4 + add x1, x0, :lo12:.LANCHOR4 + mov x20, x0 + ldr w1, [x1,168] + cbnz w1, .L2760 + add x19, x19, :lo12:.LANCHOR2 + ldr w0, [x19,4064] + add w0, w0, 1 + str w0, [x19,4064] + ldr w0, [x29,92] + lsr w0, w0, 10 + bl FtlBbmMapBadBlock + bl FtlBbmTblFlush +.L2760: + add x0, x20, :lo12:.LANCHOR4 + str wzr, [x0,168] + mov w0, 1 + b .L2751 +.L2758: + adrp x0, .LANCHOR1+3036 + mov w1, 65535 + ldrh w2, [x0,#:lo12:.LANCHOR1+3036] + mov w0, 1 + cmp w2, w1 + bne .L2751 + b .L2761 +.L2765: + ldr x25, [x20,976] + add x1, x29, 92 + umull x24, w22, w26 + mov w2, 0 + add x23, x25, x24 + ldr w0, [x23,8] + bl log2phys + ldr w0, [x29,92] + ldr w1, [x25,x24] + cmp w0, w1 + bne .L2763 + lsr x0, x0, 10 + bl P2V_block_in_plane + mov w24, w0 + ldr w0, [x23,8] + add x1, x23, 4 + mov w2, 1 + bl log2phys + mov w0, w24 +.L2783: + bl decrement_vpc_count +.L2764: + add w22, w22, 1 + uxth w22, w22 +.L2762: + add x0, x21, :lo12:.LANCHOR4 + ldrh w0, [x0,178] + cmp w0, w22 + bhi .L2765 + b .L2785 +.L2763: + ldr w1, [x23,4] + cmp w0, w1 + beq .L2764 + ldrh w0, [x20,3648] + b .L2783 +.L2785: + mov w0, -1 + adrp x20, .LANCHOR0 + bl decrement_vpc_count + add x0, x20, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L2766 + add x1, x19, :lo12:.LANCHOR2 + adrp x0, .LC131 + add x0, x0, :lo12:.LC131 + ldrh w1, [x1,3648] + bl printk +.L2766: + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x1,3648] + ldr x1, [x1,1176] + ubfiz x2, x0, 1, 16 + ldrh w1, [x1,x2] + cbz w1, .L2767 + bl INSERT_DATA_LIST + b .L2768 +.L2767: + bl INSERT_FREE_LIST +.L2768: + add x22, x19, :lo12:.LANCHOR2 + add x21, x21, :lo12:.LANCHOR4 + mov w0, -1 + strh wzr, [x21,178] + strh w0, [x22,3648] + strh wzr, [x21,176] + bl l2p_flush + bl FtlVpcTblFlush + ldr w0, [x22,3908] + cbz w0, .L2769 + ldr w0, [x22,912] + cmp w0, 29 + bhi .L2769 + ldrh w0, [x22,3916] + ldrh w1, [x22,3544] + cmp w1, w0 + bcs .L2770 + lsl w0, w0, 1 + strh w0, [x22,944] +.L2770: + add x19, x19, :lo12:.LANCHOR2 + mov w0, -1 + strh w0, [x19,3920] +.L2784: + mov w0, 0 + b .L2751 +.L2769: + add x19, x19, :lo12:.LANCHOR2 + ldrh w1, [x19,3916] + ldrh w0, [x19,3544] + add w2, w1, w1, lsl 1 + cmp w0, w2, lsr 2 + ble .L2784 + add x20, x20, :lo12:.LANCHOR0 + mov w0, -1 + strh w0, [x19,3920] + ldrb w0, [x20,136] + cbz w0, .L2771 + sub w1, w1, #2 + strh w1, [x19,944] + b .L2784 +.L2771: + mov w1, 20 + strh w1, [x19,944] +.L2751: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size FtlGcFreeTempBlock, .-FtlGcFreeTempBlock + .align 2 + .global FtlGcPageRecovery + .type FtlGcPageRecovery, %function +FtlGcPageRecovery: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x19, x19, :lo12:.LANCHOR2 + add x20, x19, 3648 + mov x0, x20 + ldrh w1, [x19,810] + bl FtlGcScanTempBlk + ldrh w1, [x19,3650] + ldrh w0, [x19,810] + cmp w1, w0 + bcc .L2786 + add x0, x19, 3696 + bl FtlMapBlkWriteDumpData + mov w0, 0 + bl FtlGcFreeTempBlock + adrp x0, .LANCHOR4+168 + str wzr, [x0,#:lo12:.LANCHOR4+168] +.L2786: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlGcPageRecovery, .-FtlGcPageRecovery + .align 2 + .global FtlPowerLostRecovery + .type FtlPowerLostRecovery, %function +FtlPowerLostRecovery: + stp x29, x30, [sp, -32]! + adrp x0, .LANCHOR4+224 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + str wzr, [x0,#:lo12:.LANCHOR4+224] + add x19, x19, :lo12:.LANCHOR2 + add x20, x19, 3552 + add x19, x19, 3600 + mov x0, x20 + bl FtlRecoverySuperblock + mov x0, x20 + bl FtlSlcSuperblockCheck + mov x0, x19 + bl FtlRecoverySuperblock + mov x0, x19 + bl FtlSlcSuperblockCheck + bl FtlGcPageRecovery + mov w0, -1 + bl decrement_vpc_count + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size FtlPowerLostRecovery, .-FtlPowerLostRecovery + .align 2 + .global Ftl_gc_temp_data_write_back + .type Ftl_gc_temp_data_write_back, %function +Ftl_gc_temp_data_write_back: + adrp x0, .LANCHOR0+136 + stp x29, x30, [sp, -64]! + add x29, sp, 0 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + str x23, [sp,48] + adrp x21, .LANCHOR4 + adrp x19, .LANCHOR2 + cbz w0, .L2790 + add x0, x21, :lo12:.LANCHOR4 + ldr w0, [x0,144] + tbz x0, 0, .L2790 + add x0, x19, :lo12:.LANCHOR2 + ldrh w0, [x0,3652] + cbz w0, .L2790 +.L2795: + mov w0, 0 + b .L2791 +.L2790: + add x0, x19, :lo12:.LANCHOR2 + add x1, x21, :lo12:.LANCHOR4 + mov w2, 0 + mov w20, 0 + mov w3, w2 + mov w23, 56 + ldr x0, [x0,992] + ldr w1, [x1,144] + bl FlashProgPages +.L2792: + add x22, x21, :lo12:.LANCHOR4 + ldr w1, [x22,144] + cmp w20, w1 + bcs .L2806 + add x0, x19, :lo12:.LANCHOR2 + umull x1, w20, w23 + ldr x2, [x0,992] + add x3, x2, x1 + ldr w2, [x2,x1] + cmn w2, #1 + bne .L2793 + ldrh w4, [x0,3648] + ldr x3, [x0,1176] + strh wzr, [x3,x4,lsl 1] + strh w2, [x0,3648] + ldr w2, [x0,4064] + add w2, w2, 1 + str w2, [x0,4064] + ldr x0, [x0,992] + add x1, x0, x1 + ldr w0, [x1,4] + lsr w0, w0, 10 + bl FtlBbmMapBadBlock + bl FtlBbmTblFlush + bl FtlGcPageVarInit + b .L2805 +.L2793: + ldr x2, [x3,16] + add w20, w20, 1 + ldr w1, [x3,4] + uxth w20, w20 + ldr w0, [x2,12] + ldr w2, [x2,8] + bl FtlGcUpdatePage + b .L2792 +.L2806: + add x19, x19, :lo12:.LANCHOR2 + ldr x0, [x19,992] + bl FtlGcBufFree + str wzr, [x22,144] + ldrh w0, [x19,3652] + cbnz w0, .L2795 + mov w0, 1 + bl FtlGcFreeTempBlock +.L2805: + mov w0, 1 +.L2791: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size Ftl_gc_temp_data_write_back, .-Ftl_gc_temp_data_write_back + .align 2 + .global Ftl_get_new_temp_ppa + .type Ftl_get_new_temp_ppa, %function +Ftl_get_new_temp_ppa: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR2 + add x0, x19, :lo12:.LANCHOR2 + add x1, x0, 3648 + ldrh w2, [x0,3648] + mov w0, 65535 + cmp w2, w0 + beq .L2808 + ldrh w0, [x1,4] + cbnz w0, .L2809 +.L2808: + bl FtlCacheWriteBack + mov w0, 0 + bl FtlGcFreeTempBlock + add x0, x19, :lo12:.LANCHOR2 + add x0, x0, 3648 + strb wzr, [x0,8] + bl allocate_data_superblock + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + strh wzr, [x0,176] + strh wzr, [x0,178] + bl l2p_flush + mov w0, 0 + bl FtlEctTblFlush + bl FtlVpcTblFlush +.L2809: + add x0, x19, :lo12:.LANCHOR2 + add x0, x0, 3648 + bl get_new_active_ppa + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa + .align 2 + .global ftl_read + .type ftl_read, %function +ftl_read: + stp x29, x30, [sp, -176]! + uxtb w0, w0 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + cmp w0, 16 + mov w20, w1 + mov w28, w2 + mov x25, x3 + bne .L2811 + add w0, w1, 256 + mov w1, w2 + mov x2, x3 + bl FtlVendorPartRead + b .L2812 +.L2811: + add w0, w1, w2 + str w0, [x29,156] + adrp x0, .LANCHOR0+4048 + ldr w2, [x29,156] + ldr w1, [x0,#:lo12:.LANCHOR0+4048] + mov w0, -1 + cmp w2, w1 + bhi .L2812 + adrp x19, .LANCHOR2 + sub w24, w2, #1 + add x1, x19, :lo12:.LANCHOR2 + ldrh w0, [x1,816] + udiv w27, w20, w0 + udiv w24, w24, w0 + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + sub w23, w24, w27 + add w23, w23, 1 + ldr w2, [x0,132] + add w2, w28, w2 + str w2, [x0,132] + ldr w0, [x1,892] + add w0, w23, w0 + str w0, [x1,892] + mov w0, w27 + mov w1, w24 + bl FtlCacheMetchLpa + cbz w0, .L2813 + bl FtlCacheWriteBack +.L2813: + mov w26, 0 + mov w21, w27 + str w26, [x29,152] + mov w22, w26 + str w26, [x29,140] +.L2814: + cbz w23, .L2855 + mov w0, w21 + add x1, x29, 172 + mov w2, 0 + bl log2phys + ldr w3, [x29,172] + cmn w3, #1 + bne .L2853 + mov w3, 0 +.L2815: + add x0, x19, :lo12:.LANCHOR2 + ldrh w0, [x0,816] + cmp w3, w0 + bcs .L2819 + madd w0, w21, w0, w3 + cmp w0, w20 + bcc .L2817 + ldr w1, [x29,156] + cmp w0, w1 + bcs .L2817 + sub w0, w0, w20 + mov w1, 0 + ubfiz x0, x0, 9, 23 + mov w2, 512 + add x0, x25, x0 + str x3, [x29,144] + bl ftl_memset + ldr x3, [x29,144] +.L2817: + add w3, w3, 1 + b .L2815 +.L2853: + add x2, x19, :lo12:.LANCHOR2 + mov w0, 56 + cmp w21, w27 + umull x1, w22, w0 + ldr x0, [x2,984] + add x0, x0, x1 + str w3, [x0,4] + ldrh w0, [x2,816] + bne .L2820 + ldr x3, [x2,984] + ldr x2, [x2,1080] + add x3, x3, x1 + str x2, [x3,8] + udiv w2, w20, w0 + msub w2, w2, w0, w20 + str w2, [x29,112] + sub w2, w0, w2 + cmp w2, w28 + csel w2, w2, w28, ls + str w2, [x29,152] + cmp w2, w0 + bne .L2821 + str x25, [x3,8] + b .L2821 +.L2820: + cmp w21, w24 + bne .L2822 + ldr x3, [x2,984] + ldr x2, [x2,1088] + add x3, x3, x1 + ldr w4, [x29,156] + str x2, [x3,8] + mul w2, w21, w0 + sub w26, w4, w2 + cmp w26, w0 + bne .L2821 + sub w2, w2, w20 + ubfiz x2, x2, 9, 23 + add x2, x25, x2 + str x2, [x3,8] + b .L2821 +.L2822: + ldr x2, [x2,984] + mul w0, w21, w0 + add x2, x2, x1 + sub w0, w0, w20 + ubfiz x0, x0, 9, 23 + add x0, x25, x0 + str x0, [x2,8] +.L2821: + add x2, x19, :lo12:.LANCHOR2 + ldr x0, [x2,984] + add x1, x0, x1 + ldrh w0, [x2,822] + ldr x2, [x2,1112] + mul w0, w22, w0 + str w21, [x1,24] + add w22, w22, 1 + and x0, x0, 4294967292 + add x0, x2, x0 + str x0, [x1,16] +.L2819: + subs w23, w23, #1 + add w21, w21, 1 + beq .L2823 + add x0, x19, :lo12:.LANCHOR2 + ldrh w0, [x0,740] + cmp w22, w0, lsl 3 + bne .L2814 +.L2823: + cbz w22, .L2814 + add x0, x19, :lo12:.LANCHOR2 + mov w1, w22 + mov w2, 0 + ldr x0, [x0,984] + bl FlashReadPages + str xzr, [x29,144] + ldr x0, [x29,112] + ubfiz x0, x0, 9, 23 + str x0, [x29,128] + ldr w0, [x29,152] + lsl w0, w0, 9 + str w0, [x29,136] + lsl w0, w26, 9 + str w0, [x29,108] +.L2825: + ldr w0, [x29,144] + cmp w22, w0 + bls .L2856 + ldr x0, [x29,144] + add x2, x19, :lo12:.LANCHOR2 + mov x1, 56 + mul x3, x0, x1 + ldr x0, [x2,984] + add x0, x0, x3 + ldr w1, [x0,24] + cmp w1, w27 + bne .L2826 + ldr x1, [x0,8] + ldr x0, [x2,1080] + cmp x1, x0 + bne .L2827 + ldr x2, [x29,128] + mov x0, x25 + str x3, [x29,96] + add x1, x1, x2 + ldr w2, [x29,136] + b .L2854 +.L2826: + cmp w1, w24 + bne .L2827 + ldr x1, [x0,8] + ldr x0, [x2,1088] + cmp x1, x0 + bne .L2827 + ldrh w0, [x2,816] + ldr w2, [x29,108] + str x3, [x29,96] + mul w0, w24, w0 + sub w0, w0, w20 + ubfiz x0, x0, 9, 23 + add x0, x25, x0 +.L2854: + bl ftl_memcpy + ldr x3, [x29,96] +.L2827: + add x0, x19, :lo12:.LANCHOR2 + ldr x1, [x0,984] + add x5, x1, x3 + ldr w4, [x1,x3] + cmn w4, #1 + bne .L2828 + ldr w2, [x0,4040] + str w4, [x29,140] + add w2, w2, 1 + str w2, [x0,4040] +.L2828: + ldr w0, [x1,x3] + cmp w0, 256 + bne .L2829 + ldr w0, [x5,4] + lsr x0, x0, 10 + bl P2V_block_in_plane + bl FtlGcRefreshBlock +.L2829: + ldr x0, [x29,144] + add x0, x0, 1 + str x0, [x29,144] + b .L2825 +.L2856: + mov w22, 0 + b .L2814 +.L2855: + add x19, x19, :lo12:.LANCHOR2 + ldrh w0, [x19,950] + cbz w0, .L2832 + mov w0, w23 + mov w1, 1 + bl ftl_do_gc +.L2832: + ldr w0, [x29,140] +.L2812: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 176 + ret + .size ftl_read, .-ftl_read + .align 2 + .global ftl_write + .type ftl_write, %function +ftl_write: + stp x29, x30, [sp, -272]! + add x29, sp, 0 + stp x19, x20, [sp,16] + mov w20, w1 + adrp x1, .LANCHOR2 + stp x21, x22, [sp,32] + mov w21, w2 + add x2, x1, :lo12:.LANCHOR2 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov x22, x3 + str x1, [x29,152] + ldr w3, [x2,1392] + cbz w3, .L2858 +.L2865: + mov w0, 0 + b .L2859 +.L2858: + cmp w0, 16 + bne .L2860 + add w0, w20, 256 + mov w1, w21 + mov x2, x22 + bl FtlVendorPartWrite + b .L2859 +.L2860: + adrp x0, .LANCHOR0+4048 + add w24, w20, w21 + ldr w1, [x0,#:lo12:.LANCHOR0+4048] + mov w0, -1 + cmp w24, w1 + bhi .L2859 + adrp x3, .LANCHOR4 + ldrh w1, [x2,816] + add x26, x3, :lo12:.LANCHOR4 + sub w24, w24, #1 + mov w0, 2048 + str x3, [x29,144] + udiv w23, w20, w1 + cmp w21, w1, lsl 1 + str w0, [x26,380] + add x19, x2, 3552 + ldr w3, [x2,960] + udiv w0, w24, w1 + str w0, [x29,188] + sub w28, w0, w23 + add w25, w28, 1 + ldr w0, [x2,876] + add w0, w25, w0 + str w0, [x2,876] + ldr w0, [x26,128] + add w0, w21, w0 + str w0, [x26,128] + cset w0, cs + str w0, [x29,204] + cmp w21, 8 + add x0, x2, 3600 + csel x19, x19, x0, hi + cbz w3, .L2862 + mov w0, 56 + sub w3, w3, #1 + umull x3, w3, w0 + ldr x0, [x2,1024] + add x3, x0, x3 + ldr w0, [x3,24] + cmp w23, w0 + bne .L2863 + ldr w0, [x2,884] + add w0, w0, 1 + str w0, [x2,884] + ldr w0, [x26,384] + add w0, w0, 1 + str w0, [x26,384] + msub w0, w23, w1, w20 + sub w1, w1, w0 + ubfiz x0, x0, 9, 23 + cmp w1, w21 + csel w19, w1, w21, ls + ldr x1, [x3,8] + lsl w25, w19, 9 + add x0, x1, x0 + mov w2, w25 + mov x1, x22 + bl ftl_memcpy + cbnz w28, .L2864 + ldr w0, [x26,384] + cmp w0, 2 + ble .L2865 +.L2864: + add x22, x22, x25 + sub w21, w21, w19 + add w20, w20, w19 + add w23, w23, 1 + mov w25, w28 +.L2863: + ldr x0, [x29,144] + add x0, x0, :lo12:.LANCHOR4 + ldr x19, [x0,368] + str wzr, [x0,384] +.L2862: + ldr w1, [x29,188] + mov w0, w23 + bl FtlCacheMetchLpa + cbz w0, .L2866 + bl FtlCacheWriteBack +.L2866: + ldr x0, [x29,144] + str w23, [x29,200] + add x0, x0, :lo12:.LANCHOR4 + str x19, [x0,368] + ldr x0, [x29,152] + add x24, x0, :lo12:.LANCHOR2 + add x0, x24, 3552 + str x0, [x29,176] + adrp x0, .LC132 + add x0, x0, :lo12:.LC132 + str x0, [x29,104] +.L2867: + cbz w25, .L2926 + ldrh w0, [x19,4] + cbnz w0, .L2868 + ldr x1, [x29,176] + adrp x26, .LANCHOR1 + cmp x19, x1 + bne .L2869 + add x0, x24, 3600 + ldrh w19, [x0,4] + cbnz w19, .L2870 + bl allocate_new_data_superblock + add x0, x26, :lo12:.LANCHOR1 + str w19, [x0,3040] +.L2870: + ldr x0, [x29,176] + add x26, x26, :lo12:.LANCHOR1 + add x19, x24, 3600 + bl allocate_new_data_superblock + ldr w0, [x26,3040] + cbnz w0, .L2871 +.L2872: + ldr x19, [x29,176] + b .L2871 +.L2869: + add x26, x26, :lo12:.LANCHOR1 + str w0, [x26,3040] + ldr x0, [x29,176] + ldrh w0, [x0,4] + cbnz w0, .L2872 + mov x0, x19 + bl allocate_new_data_superblock +.L2871: + ldrh w0, [x19,4] + cbnz w0, .L2873 + mov x0, x19 + bl allocate_new_data_superblock +.L2873: + ldr x0, [x29,144] + add x0, x0, :lo12:.LANCHOR4 + str x19, [x0,368] +.L2868: + ldr w0, [x24,956] + mov x28, 0 + ldr w2, [x24,960] + ldrh w1, [x19,4] + sub w0, w0, w2 + cmp w1, w0 + csel w0, w1, w0, ls + cmp w0, w25 + csel w0, w0, w25, ls + str w0, [x29,140] + ldr w0, [x29,204] + and w0, w0, 1 + str w0, [x29,116] + add w0, w21, w20 + str w0, [x29,136] +.L2874: + ldr w1, [x29,200] + mov w0, w28 + add w27, w1, w28 + ldr w1, [x29,140] + cmp w28, w1 + bcs .L2927 + ldrh w1, [x19,4] + cbz w1, .L2903 + ldr w1, [x29,188] + cmp w27, w1 + cset w7, eq + cbz w0, .L2876 + ldr w1, [x29,116] + tst w7, w1 + beq .L2876 + ldrh w1, [x24,816] + ldr w2, [x29,136] + msub w2, w27, w1, w2 + cmp w2, w1 + bne .L2903 +.L2876: + add x1, x29, 212 + mov w2, 0 + mov w0, w27 + str x7, [x29,160] + bl log2phys + mov x0, x19 + bl get_new_active_ppa + ldr w6, [x24,960] + mov w5, 56 + ldr x2, [x24,1024] + str x5, [x29,192] + umull x1, w6, w5 + add x2, x2, x1 + str w0, [x2,4] + ldrh w2, [x24,822] + ldr x0, [x24,1024] + add x1, x0, x1 + mul w0, w2, w6 + and x0, x0, 4294967292 + str x0, [x29,128] + ldr x0, [x24,1128] + ldr x3, [x29,128] + str x0, [x29,120] + add x26, x0, x3 + ldrh w0, [x24,820] + str x26, [x1,16] + str w27, [x1,24] + mul w0, w0, w6 + ldr x6, [x24,1072] + and x0, x0, 4294967292 + add x0, x6, x0 + str x0, [x1,8] + mov x0, x26 + mov w1, 0 + bl ftl_memset + cmp w27, w23 + cset w0, eq + str w0, [x29,184] + cbnz w0, .L2906 + ldr x7, [x29,160] + ldr x5, [x29,192] + cbz w7, .L2877 + ldr w0, [x29,136] + ldrh w2, [x24,816] + msub w2, w27, w2, w0 + uxth w0, w2 + str w0, [x29,192] + ldr w0, [x29,184] + str w0, [x29,160] + b .L2880 +.L2906: + ldrh w2, [x24,816] + udiv w0, w20, w2 + msub w0, w0, w2, w20 + str w0, [x29,160] + sub w2, w2, w0 + cmp w2, w21 + csel w0, w2, w21, ls + str w0, [x29,192] +.L2880: + ldrh w0, [x24,816] + ldr w1, [x29,192] + cmp w1, w0 + bne .L2881 + ldr w0, [x29,184] + mov x1, x22 + cbnz w0, .L2882 + ldr w0, [x29,192] + mul w1, w0, w27 + sub w1, w1, w20 + ubfiz x1, x1, 9, 23 + add x1, x22, x1 +.L2882: + ldr w2, [x29,204] + mov w0, 56 + cbz w2, .L2883 + ldr w2, [x24,960] + umull x0, w2, w0 + ldr x2, [x24,1024] + add x0, x2, x0 + b .L2925 +.L2883: + ldr w2, [x24,960] + umull x0, w2, w0 + ldr x2, [x24,1024] + add x0, x2, x0 + ldr x0, [x0,8] + b .L2923 +.L2881: + ldr w0, [x29,212] + cmn w0, #1 + beq .L2885 + str w0, [x29,220] + mov w1, 56 + ldr w0, [x24,960] + mov w2, 0 + str w27, [x29,240] + umull x0, w0, w1 + ldr x1, [x24,1024] + add x0, x1, x0 + ldr x1, [x0,8] + ldr x0, [x0,16] + str x1, [x29,224] + mov w1, 1 + str x0, [x29,232] + add x0, x29, 216 + bl FlashReadPages + ldr w0, [x29,216] + cmn w0, #1 + bne .L2886 + ldr w0, [x24,4040] + add w0, w0, 1 + str w0, [x24,4040] + b .L2888 +.L2886: + ldr w0, [x26,8] + cmp w0, w27 + beq .L2888 + ldr w0, [x24,4040] + mov w2, w27 + add w0, w0, 1 + str w0, [x24,4040] + ldr x0, [x29,104] + ldr w1, [x26,8] + bl printk + b .L2888 +.L2885: + ldr w0, [x24,960] + mov w1, 56 + ldrh w2, [x24,820] + umull x0, w0, w1 + ldr x1, [x24,1024] + add x0, x1, x0 + mov w1, 0 + ldr x0, [x0,8] + bl ftl_memset +.L2888: + ldr w1, [x29,192] + mov w0, 56 + lsl w2, w1, 9 + ldr w1, [x29,184] + cbz w1, .L2889 + ldr w1, [x24,960] + umull x0, w1, w0 + ldr x1, [x24,1024] + add x1, x1, x0 + ldr x0, [x29,160] + ubfiz x0, x0, 9, 23 + ldr x1, [x1,8] + add x0, x1, x0 + mov x1, x22 + b .L2924 +.L2889: + ldr w1, [x24,960] + umull x0, w1, w0 + ldr x1, [x24,1024] + add x0, x1, x0 + ldrh w1, [x24,816] + mul w1, w27, w1 + ldr x0, [x0,8] + sub w1, w1, w20 + ubfiz x1, x1, 9, 23 + add x1, x22, x1 + b .L2924 +.L2877: + ldr w0, [x29,204] + ldrh w1, [x24,816] + ldr w2, [x24,960] + cbz w0, .L2890 + mul w1, w27, w1 + umull x0, w2, w5 + sub w1, w1, w20 + ldr x2, [x24,1024] + ubfiz x1, x1, 9, 23 + add x0, x2, x0 + add x1, x22, x1 +.L2925: + str x1, [x0,8] + b .L2884 +.L2890: + umull x0, w2, w5 + ldr x2, [x24,1024] + mul w1, w27, w1 + add x0, x2, x0 + sub w1, w1, w20 + ubfiz x1, x1, 9, 23 + ldr x0, [x0,8] + add x1, x22, x1 +.L2923: + ldrh w2, [x24,820] +.L2924: + bl ftl_memcpy +.L2884: + ldr x1, [x29,120] + mov w0, -3947 + ldr x2, [x29,128] + add x28, x28, 1 + strh w0, [x1,x2] + str w27, [x26,8] + ldr w0, [x24,868] + str w0, [x26,4] + add w0, w0, 1 + cmn w0, #1 + csel w0, w0, wzr, ne + str w0, [x24,868] + ldr w0, [x29,212] + str w0, [x26,12] + ldrh w0, [x19] + strh w0, [x26,2] + ldr w0, [x24,960] + add w0, w0, 1 + str w0, [x24,960] + b .L2874 +.L2927: + str w27, [x29,200] + mov x0, x1 + b .L2875 +.L2903: + str w27, [x29,200] +.L2875: + sub w25, w25, w0 + ldr w0, [x29,204] + cbnz w0, .L2894 + ldr w1, [x24,960] + ldr w0, [x24,956] + cmp w1, w0 + bcs .L2894 + ldrh w0, [x19,4] + cbz w0, .L2894 +.L2896: + str wzr, [x29,204] + b .L2867 +.L2894: + bl FtlCacheWriteBack + str wzr, [x24,960] + cmp w25, 3 + bls .L2896 + b .L2867 +.L2926: + ldr w1, [x29,188] + mov w0, w25 + sub w1, w1, w23 + bl ftl_do_gc + ldr x0, [x29,152] + add x0, x0, :lo12:.LANCHOR2 + ldrh w1, [x0,3544] + cmp w1, 31 + bhi .L2865 + mov w1, 128 + mov w19, 16 + strh w1, [x0,946] + strh w1, [x0,944] +.L2898: + mov w0, 0 + mov w1, 1 + bl ftl_do_gc + ldr x0, [x29,152] + add x0, x0, :lo12:.LANCHOR2 + ldr w0, [x0,1392] + cbnz w0, .L2865 + subs w19, w19, #1 + bne .L2898 + b .L2865 +.L2859: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 272 + ret + .size ftl_write, .-ftl_write + .align 2 + .global ftl_fix_nand_power_lost_error + .type ftl_fix_nand_power_lost_error, %function +ftl_fix_nand_power_lost_error: + adrp x0, .LANCHOR0+136 + stp x29, x30, [sp, -128]! + add x29, sp, 0 + ldrb w0, [x0,#:lo12:.LANCHOR0+136] + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + cbz w0, .L2928 + adrp x21, .LANCHOR4 + adrp x19, .LANCHOR2 + add x0, x21, :lo12:.LANCHOR4 + add x20, x19, :lo12:.LANCHOR2 + adrp x24, .LC133 + add x26, x20, 3552 + add x25, x20, 3600 + ldrh w23, [x0,218] + add x0, x24, :lo12:.LC133 + ldr x2, [x20,1176] + ubfiz x22, x23, 1, 16 + mov w1, w23 + ldrh w2, [x2,x22] + bl printk + ldrh w0, [x20,3552] + bl FtlGcRefreshOpenBlock + ldrh w0, [x20,3600] + mov w20, 4097 + bl FtlGcRefreshOpenBlock + mov x0, x26 + bl allocate_new_data_superblock + mov x0, x25 + bl allocate_new_data_superblock +.L2930: + subs w20, w20, #1 + beq .L2934 + mov w0, 1 + mov w1, w0 + bl ftl_do_gc + add x0, x19, :lo12:.LANCHOR2 + ldr x0, [x0,1176] + ldrh w0, [x0,x22] + cbnz w0, .L2930 +.L2934: + add x20, x19, :lo12:.LANCHOR2 + add x0, x24, :lo12:.LC133 + mov w1, w23 + ldr x2, [x20,1176] + ldrh w2, [x2,x22] + bl printk + ldr x0, [x20,1176] + ldrh w0, [x0,x22] + cbnz w0, .L2932 + add x0, x29, 80 + strh w23, [x29,80] + bl make_superblock + mov x0, 0 + ldrh w5, [x20,740] + mov w6, 65535 + mov w20, w0 + mov w7, 56 +.L2935: + cmp w5, w0, uxth + bls .L2942 + add x1, x29, 80 + add x1, x1, x0, lsl 1 + ldrh w2, [x1,16] + cmp w2, w6 + beq .L2936 + add x4, x19, :lo12:.LANCHOR2 + lsl w2, w2, 10 + umull x1, w20, w7 + add w20, w20, 1 + ldr x3, [x4,1008] + uxth w20, w20 + add x3, x3, x1 + str w2, [x3,4] + ldr x2, [x4,1008] + add x1, x2, x1 + str xzr, [x1,8] + str xzr, [x1,16] +.L2936: + add x0, x0, 1 + b .L2935 +.L2942: + add x19, x19, :lo12:.LANCHOR2 + adrp x0, .LC134 + mov w1, w23 + add x0, x0, :lo12:.LC134 + ldr x2, [x19,1176] + ldrh w2, [x2,x22] + bl printk + ldr x0, [x19,1008] + mov w1, 0 + mov w2, w20 + bl FlashEraseBlocks + ldr x0, [x19,1008] + mov w1, 1 + mov w2, w20 + bl FlashEraseBlocks +.L2932: + add x21, x21, :lo12:.LANCHOR4 + mov w0, -1 + strh w0, [x21,218] +.L2928: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 128 + ret + .size ftl_fix_nand_power_lost_error, .-ftl_fix_nand_power_lost_error + .align 2 + .global FtlSysBlkInit + .type FtlSysBlkInit, %function +FtlSysBlkInit: + stp x29, x30, [sp, -64]! + mov w1, -1 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR4 + adrp x20, .LANCHOR2 + stp x21, x22, [sp,32] + add x0, x19, :lo12:.LANCHOR4 + add x21, x20, :lo12:.LANCHOR2 + str x23, [sp,48] + strh w1, [x0,218] + strh wzr, [x0,220] + ldrh w0, [x21,744] + bl FtlFreeSysBlkQueueInit + bl FtlScanSysBlk + ldrh w1, [x21,3840] + mov w0, 65535 + cmp w1, w0 + bne .L2944 +.L2946: + mov w23, -1 + b .L2945 +.L2944: + bl FtlLoadSysInfo + mov w23, w0 + cbnz w0, .L2946 + bl FtlLoadMapInfo + bl FtlLoadVonderInfo + bl Ftl_load_ext_data + bl FtlLoadEctTbl + bl FtlFreeSysBLkSort + bl SupperBlkListInit + bl FtlPowerLostRecovery + mov w0, 1 + bl FtlUpdateVaildLpn + ldrh w2, [x21,850] + mov x1, 0 + ldr x0, [x21,1256] +.L2947: + cmp w1, w2 + mov w3, w1 + bge .L2951 + add x4, x0, x1, lsl 4 + add x1, x1, 1 + ldr w4, [x4,4] + tbz w4, #31, .L2947 +.L2951: + add x0, x20, :lo12:.LANCHOR2 + cmp w3, w2 + ldrh w1, [x0,3884] + add w1, w1, 1 + strh w1, [x0,3884] + blt .L2948 + add x19, x19, :lo12:.LANCHOR4 + ldrh w0, [x19,220] + cbz w0, .L2952 +.L2948: + add x19, x20, :lo12:.LANCHOR2 + add x22, x19, 3552 + add x21, x19, 3600 + mov x0, x22 + bl FtlSuperblockPowerLostFix + mov x0, x21 + bl FtlSuperblockPowerLostFix + ldrh w0, [x19,3552] + ldr x2, [x19,1176] + lsl x0, x0, 1 + ldrh w3, [x19,3556] + ldrh w1, [x2,x0] + sub w1, w1, w3 + strh w1, [x2,x0] + strb wzr, [x19,3558] + ldrh w0, [x19,810] + strh w0, [x19,3554] + ldrh w0, [x19,3600] + ldr x2, [x19,1176] + lsl x0, x0, 1 + strh wzr, [x19,3556] + ldrh w3, [x19,3604] + ldrh w1, [x2,x0] + sub w1, w1, w3 + strh w1, [x2,x0] + strb wzr, [x19,3606] + ldrh w0, [x19,810] + strh w0, [x19,3602] + add x0, x19, 3696 + strh wzr, [x19,3604] + bl FtlMapBlkWriteDumpData + add x0, x19, 3768 + bl FtlMapBlkWriteDumpData + ldrh w0, [x19,3886] + add w0, w0, 1 + strh w0, [x19,3886] + bl l2p_flush + bl FtlVpcTblFlush + bl FtlVpcTblFlush +.L2952: + add x19, x20, :lo12:.LANCHOR2 + mov w0, 65535 + add x22, x19, 3552 + ldrh w1, [x19,3552] + cmp w1, w0 + bne .L2953 +.L2955: + add x20, x20, :lo12:.LANCHOR2 + ldrh w0, [x20,3884] + and w0, w0, 31 + cbnz w0, .L2945 + bl FtlVpcCheckAndModify + b .L2945 +.L2953: + ldrh w0, [x22,4] + cbnz w0, .L2955 + ldrh w0, [x19,3604] + add x21, x19, 3600 + cbnz w0, .L2955 + bl FtlVpcTblFlush + ldrh w0, [x19,3552] + bl FtlGcRefreshOpenBlock + ldrh w0, [x19,3600] + bl FtlGcRefreshOpenBlock + mov x0, x22 + bl allocate_new_data_superblock + mov x0, x21 + bl allocate_new_data_superblock + add x0, x19, 3768 + bl FtlMapBlkWriteDumpData + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + ldrb w1, [x0,136] + cbnz w1, .L2957 + ldrb w0, [x0,24] + cbz w0, .L2955 +.L2957: + mov w19, 4096 +.L2962: + mov w0, 1 + mov w1, w0 + bl ftl_do_gc + subs w19, w19, #1 + bne .L2962 + b .L2955 +.L2945: + mov w0, w23 + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size FtlSysBlkInit, .-FtlSysBlkInit + .align 2 + .global FtlLowFormat + .type FtlLowFormat, %function +FtlLowFormat: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + add x0, x19, :lo12:.LANCHOR2 + stp x21, x22, [sp,32] + ldr w1, [x0,1392] + cbnz w1, .L2970 + str w1, [x0,864] + str w1, [x0,868] + ldrh w0, [x0,744] + bl FtlFreeSysBlkQueueInit + bl FtlLoadBbt + cbz w0, .L2971 + bl FtlMakeBbt +.L2971: + mov w0, 0 +.L2972: + add x1, x19, :lo12:.LANCHOR2 + ldrh w2, [x1,816] + cmp w0, w2, lsl 7 + bge .L2999 + ubfiz x3, x0, 2, 16 + ldr x4, [x1,1080] + mvn w2, w0 + orr w2, w0, w2, lsl 16 + str w2, [x4,x3] + add w0, w0, 1 + ldr x2, [x1,1088] + mov w1, 23752 + movk w1, 0xa0f, lsl 16 + uxth w0, w0 + str w1, [x2,x3] + b .L2972 +.L2999: + ldrh w21, [x1,748] + mov w20, 0 +.L2974: + add x22, x19, :lo12:.LANCHOR2 + ldrh w0, [x22,750] + cmp w0, w21 + bls .L3000 + mov w0, w21 + mov w1, 1 + add w21, w21, 1 + bl FtlLowFormatEraseBlock + add w0, w20, w0 + uxth w21, w21 + uxth w20, w0 + b .L2974 +.L3000: + ldrh w0, [x22,740] + sub w1, w20, #3 + cmp w1, w0, lsl 1 + bge .L2976 +.L2980: + mov w20, 0 + mov w21, w20 + b .L2977 +.L2976: + udiv w20, w20, w0 + ldr w0, [x22,844] + add w0, w20, w0 + bl FtlSysBlkNumInit + ldrh w0, [x22,744] + bl FtlFreeSysBlkQueueInit + ldrh w20, [x22,748] +.L2978: + add x0, x19, :lo12:.LANCHOR2 + ldrh w0, [x0,750] + cmp w0, w20 + bls .L2980 + mov w0, w20 + mov w1, 1 + add w20, w20, 1 + bl FtlLowFormatEraseBlock + uxth w20, w20 + b .L2978 +.L2977: + add x2, x19, :lo12:.LANCHOR2 + ldrh w0, [x2,748] + cmp w0, w21 + bls .L3001 + mov w0, w21 + mov w1, 0 + add w21, w21, 1 + bl FtlLowFormatEraseBlock + add w0, w20, w0 + uxth w21, w21 + uxth w20, w0 + b .L2977 +.L3001: + ldrh w3, [x2,740] + ldr w1, [x2,752] + ldrh w0, [x2,750] + str w0, [x2,936] + udiv w4, w1, w3 + str w4, [x2,1388] + ubfx x5, x4, 5, 16 + add w0, w5, 36 + strh w0, [x2,3916] + mov w0, 24 + mul w0, w3, w0 + cmp w20, w0 + ble .L2982 + sub w1, w1, w20 + udiv w1, w1, w3 + str w1, [x2,1388] + lsr w1, w1, 5 + add w1, w1, 24 + strh w1, [x2,3916] +.L2982: + add x2, x19, :lo12:.LANCHOR2 + ldr w0, [x2,3908] + cmp w0, 1 + bne .L2983 + ldrh w1, [x2,3916] + udiv w0, w20, w3 + add w0, w1, w0 + add w0, w1, w0, asr 2 + strh w0, [x2,3916] +.L2983: + adrp x21, .LANCHOR0 + add x0, x21, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L2984 + add x1, x19, :lo12:.LANCHOR2 + udiv w0, w20, w3 + ldrh w2, [x1,3916] + add w0, w2, w0 + add w0, w2, w0, asr 2 + strh w0, [x1,3916] +.L2984: + add x0, x19, :lo12:.LANCHOR2 + ldrh w1, [x0,802] + cbz w1, .L2986 + ldrh w2, [x0,3916] + add w2, w2, w1, lsr 1 + strh w2, [x0,3916] + mul w2, w1, w3 + cmp w2, w20 + ble .L2986 + add w1, w1, 32 + str w4, [x0,1388] + add w1, w5, w1 + strh w1, [x0,3916] +.L2986: + add x19, x19, :lo12:.LANCHOR2 + add x21, x21, :lo12:.LANCHOR0 + add x20, x19, 3552 + mov w22, -1 + ldr w1, [x19,1388] + ldrh w0, [x19,3916] + sub w0, w1, w0 + ldrh w1, [x19,810] + mul w0, w0, w3 + str w0, [x19,3912] + mul w0, w0, w1 + ldrh w1, [x19,816] + str w0, [x19,1388] + mul w0, w0, w1 + str w0, [x21,4048] + bl FtlBbmTblFlush + ldrh w2, [x19,750] + mov w1, 0 + ldr x0, [x19,1176] + lsl w2, w2, 1 + bl ftl_memset + str wzr, [x19,3836] + mov w0, 1 + ldrh w2, [x19,748] + strb w0, [x20,8] + mov w1, 255 + ldr x0, [x21,16] + lsr w2, w2, 3 + strh w22, [x19,3920] + strh wzr, [x19,3922] + strb wzr, [x19,3926] + strb wzr, [x19,3928] + strh wzr, [x20,2] + strb wzr, [x20,6] + strh wzr, [x19,3552] + bl ftl_memset +.L2988: + mov x0, x20 + bl make_superblock + ldrb w0, [x20,7] + cbnz w0, .L2989 + ldrh w1, [x20] + ldr x0, [x19,1176] + strh w22, [x0,x1,lsl 1] + ldrh w0, [x20] + add w0, w0, 1 + strh w0, [x20] + b .L2988 +.L2989: + ldr w0, [x19,864] + mov w21, -1 + str w0, [x20,12] + add w0, w0, 1 + ldrh w1, [x20] + str w0, [x19,864] + ldr x0, [x19,1176] + ldrh w2, [x20,4] + strh w2, [x0,x1,lsl 1] + add x0, x19, 3600 + strh wzr, [x19,3602] + ldrh w1, [x20] + mov x20, x0 + strb wzr, [x19,3606] + add w1, w1, 1 + strh w1, [x19,3600] + mov w1, 1 + strb w1, [x19,3608] +.L2990: + mov x0, x20 + bl make_superblock + ldrb w0, [x20,7] + cbnz w0, .L2991 + ldrh w1, [x20] + ldr x0, [x19,1176] + strh w21, [x0,x1,lsl 1] + ldrh w0, [x20] + add w0, w0, 1 + strh w0, [x20] + b .L2990 +.L2991: + ldr w0, [x19,864] + str w0, [x20,12] + add w0, w0, 1 + ldrh w1, [x20] + str w0, [x19,864] + ldr x0, [x19,1176] + ldrh w2, [x20,4] + mov w20, -1 + strh w2, [x0,x1,lsl 1] + strh w20, [x19,3648] + bl FtlFreeSysBlkQueueOut + strh w0, [x19,3840] + ldr w0, [x19,3912] + strh w0, [x19,3846] + ldr w0, [x19,864] + str w0, [x19,3848] + add w0, w0, 1 + strh wzr, [x19,3842] + strh w20, [x19,3844] + str w0, [x19,864] + bl FtlVpcTblFlush + bl FtlSysBlkInit + cbnz w0, .L2970 + adrp x0, .LANCHOR1+3032 + mov w1, 1 + str w1, [x0,#:lo12:.LANCHOR1+3032] +.L2970: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size FtlLowFormat, .-FtlLowFormat + .align 2 + .global FtlReInitForSDUpdata + .type FtlReInitForSDUpdata, %function +FtlReInitForSDUpdata: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,136] + cbz w0, .L3003 +.L3005: + mov w0, 0 + b .L3004 +.L3003: + adrp x0, RK29_NANDC_REG_BASE + ldr x0, [x0,#:lo12:RK29_NANDC_REG_BASE] + bl FlashInit + cbnz w0, .L3005 + bl FlashLoadFactorBbt + cbz w0, .L3006 + bl FlashMakeFactorBbt +.L3006: + adrp x20, .LANCHOR2 + add x0, x20, :lo12:.LANCHOR2 + ldr x0, [x0,680] + bl FlashReadIdbDataRaw + cbz w0, .L3007 + mov w1, 0 + mov w2, 16 + add x0, x29, 32 + bl FlashReadFacBbtData + mov w0, 0 + ldr w2, [x29,32] + mov w1, w0 + mov w4, 1 +.L3009: + lsl w3, w4, w1 + add w1, w1, 1 + tst w3, w2 + cset w3, ne + cmp w1, 16 + add w0, w0, w3 + bne .L3009 + cmp w0, 6 + bhi .L3010 + add x0, x19, :lo12:.LANCHOR0 + b .L3032 +.L3010: + mov w1, 0 + mov w4, 1 +.L3013: + lsl w3, w4, w1 + add w1, w1, 1 + tst w3, w2 + cset w3, ne + cmp w1, 24 + add w0, w0, w3 + bne .L3013 + cmp w0, 17 + add x0, x19, :lo12:.LANCHOR0 + bls .L3032 + mov w1, 36 +.L3032: + strb w1, [x0,25] + add x0, x19, :lo12:.LANCHOR0 + ldrb w1, [x0,25] + strh w1, [x0,4042] +.L3007: + adrp x0, .LC42 + adrp x1, .LC116 + add x1, x1, :lo12:.LC116 + add x0, x0, :lo12:.LC42 + add x20, x20, :lo12:.LANCHOR2 + bl printk + add x0, x19, :lo12:.LANCHOR0 + mov w19, 1 + add x0, x0, 4016 + bl FtlConstantsInit + bl FtlVariablesInit + ldrh w0, [x20,744] + bl FtlFreeSysBlkQueueInit +.L3015: + bl FtlLoadBbt + cbz w0, .L3016 +.L3034: + bl FtlLowFormat + cmp w19, 3 + bhi .L3035 + add w19, w19, 1 + b .L3015 +.L3035: + mov w0, -1 + b .L3004 +.L3016: + bl FtlSysBlkInit + cbnz w0, .L3034 + adrp x1, .LANCHOR1+3032 + mov w2, 1 + str w2, [x1,#:lo12:.LANCHOR1+3032] +.L3004: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size FtlReInitForSDUpdata, .-FtlReInitForSDUpdata + .align 2 + .global FtlInit + .type FtlInit, %function +FtlInit: + stp x29, x30, [sp, -48]! + mov w0, -1 + adrp x1, .LC116 + add x29, sp, 0 + str x21, [sp,32] + adrp x21, .LANCHOR1 + add x21, x21, :lo12:.LANCHOR1 + add x1, x1, :lo12:.LC116 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR2 + adrp x20, .LANCHOR0 + str w0, [x21,3032] + adrp x0, .LANCHOR4+388 + add x19, x19, :lo12:.LANCHOR2 + add x20, x20, :lo12:.LANCHOR0 + str wzr, [x0,#:lo12:.LANCHOR4+388] + adrp x0, .LC42 + add x0, x0, :lo12:.LC42 + str wzr, [x19,1392] + bl printk + add x0, x20, 4016 + bl FtlConstantsInit + bl FtlMemInit + bl FtlVariablesInit + ldrh w0, [x19,744] + bl FtlFreeSysBlkQueueInit + bl FtlLoadBbt + cbz w0, .L3037 + adrp x0, .LC135 + add x0, x0, :lo12:.LC135 + b .L3049 +.L3037: + bl FtlSysBlkInit + cbz w0, .L3039 + adrp x0, .LC136 + add x0, x0, :lo12:.LC136 +.L3049: + adrp x1, .LANCHOR3 + add x1, x1, :lo12:.LANCHOR3 + add x1, x1, 40 + bl printk + b .L3038 +.L3039: + mov w1, 1 + str w1, [x21,3032] + bl ftl_do_gc + ldrh w0, [x19,3544] + cmp w0, 15 + bhi .L3040 + mov w19, 1024 +.L3041: + mov w0, 1 + mov w1, w0 + bl ftl_do_gc + subs w19, w19, #1 + bne .L3041 + b .L3038 +.L3040: + ldrb w0, [x20,136] + cbz w0, .L3038 + mov w19, 128 +.L3043: + mov w0, 1 + mov w1, w0 + bl ftl_do_gc + subs w19, w19, #1 + bne .L3043 +.L3038: + mov w0, 0 + ldr x21, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size FtlInit, .-FtlInit + .global gc_ink_free_return_value + .global FtlUpdateVaildLpnCount + .global g_ect_tbl_power_up_flush + .global last_cache_match_count + .global power_up_flag + .global g_LowFormat + .global gFtlInitStatus + .global DeviceCapacity + .global ToshibaRefValue + .global Toshiba15RefValue + .global ToshibaA19RefValue + .global SamsungRefValue + .global refValueDefault + .global FbbtBlk + .global random_seed + .global gSlcNandParaInfo + .global gNandParaInfo + .global g_page_map_check_enable + .global g_power_lost_ecc_error_blk + .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 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_all_blk_used_slc_mode + .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_refresh_block_temp_tbl + .global g_free_slc_blk_num + .global g_gc_refresh_block_temp_num + .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_check_table + .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_blk_mode_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 g_wr_page_num + .global req_wr_io + .global c_wr_page_buf_num + .global p_wr_io_data_buf + .global p_wr_io_spare_buf + .global p_plane_order_table + .global g_req_cache + .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_flash_read_only_en + .global g_inkDie_check_enable + .global g_SlcPartLbaEndSector + .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 + .global gMasterTempBuf + .global gMasterInfo + .global gNandcDumpWriteEn + .global gToggleModeClkDiv + .global gBootDdrMode + .global gNandcEccBits + .global gpNandc1 + .global gpNandc + .global g_nandc_version_data + .global gNandcVer + .global gNandChipMap + .global gNandIDataBuf + .global FlashDdrTunningReadCount + .global FlashWaitBusyScheduleEn + .global gNandPhyInfo + .global gFlashProgCheckSpareBuffer + .global gFlashProgCheckBuffer + .global gFlashSpareBuffer + .global gFlashPageBuffer1 + .global gFlashPageBuffer0 + .global gpFlashSaveInfo + .global gReadRetryInfo + .global gpNandParaInfo + .global gNandOptPara + .global g_slc2KBNand + .global gNandIDBResBlkNumSaveInFlash + .global gNandIDBResBlkNum + .global gNandFlashResEndPageAddr + .global gNandFlashInfoBlockAddr + .global gNandFlashIdbBlockAddr + .global gNandFlashInfoBlockEcc + .global gNandFlashIDBEccBits + .global gNandFlashEccBits + .global gNandRandomizer + .global gBlockPageAlignSize + .global gTotleBlock + .global gNandMaxChip + .global gNandMaxDie + .global gFlashInterfaceMode + .global gFlashSlcMode + .global gFlashOnfiModeEn + .global gFlashToggleModeEn + .global gFlashSdrModeEn + .global gMultiPageProgEn + .global gMultiPageReadEn + .global gpReadRetrial + .global mlcPageToSlcPageTbl + .global slcPageToMlcPageTbl + .global DieAddrs + .global gDieOp + .global DieCsIndex + .global read_retry_cur_offset + .section .rodata + .align 3 +.LANCHOR3 = . + 0 + .type __func__.19411, %object + .size __func__.19411, 11 +__func__.19411: + .string "FtlMemInit" + .zero 5 + .type __func__.20343, %object + .size __func__.20343, 21 +__func__.20343: + .string "FtlVpcCheckAndModify" + .zero 3 + .type __func__.19482, %object + .size __func__.19482, 8 +__func__.19482: + .string "FtlInit" + .section .rodata.str1.1,"aMS",%progbits,1 +.LC0: + .string "BBT:" +.LC1: + .string "FlashEraseBlocks pageAddr error %x\n" +.LC2: + .string "otp error! %d" +.LC3: + .string "rr" +.LC4: + .string "%d statReg->V6.mtrans_cnt=%d flReg.V6.page_num=%d\n" +.LC5: + .string "nandc:" +.LC6: + .string "%d flReg.d32=%x %x\n" +.LC7: + .string "sdr read ok %x ecc=%d\n" +.LC8: + .string "sync para %d\n" +.LC9: + .string "TOG mode Read error %x %x\n" +.LC10: + .string "read retry status %x %x %x\n" +.LC11: + .string "micron RR %d row=%x,count %d,status=%d\n" +.LC12: + .string "ECC:%d\n" +.LC13: + .string "No.%d FLASH ID:%x %x %x %x %x %x\n" +.LC14: + .string "FlashLoadPhyInfo fail %x!!\n" +.LC15: + .string "Read pageadd=%x ecc=%x err=%x\n" +.LC16: + .string "data:" +.LC17: + .string "spare:" +.LC18: + .string "ReadRetry pageadd=%x ecc=%x err=%x\n" +.LC19: + .string "FLFB:%d %d\n" +.LC20: + .string "prog error: = %x\n" +.LC21: + .string "prog read error: = %x\n" +.LC22: + .string "prog read s error: = %x %x %x\n" +.LC23: + .string "prog read d error: = %x %x %x\n" +.LC24: + .string "FlashMakeFactorBbt %d\n" +.LC25: + .string "bad block:%d %d\n" +.LC26: + .string "FMFB:%d %d\n" +.LC27: + .string "E:bad block:%d\n" +.LC28: + .string "FMFB:Save %d %d\n" +.LC29: + .string "%s error allocating memory. return -1\n" +.LC30: + .string "phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\n" +.LC31: + .string "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\n" +.LC32: + .string "FtlBbmTblFlush error:%x\n" +.LC33: + .string "FtlBbmTblFlush error = %x error count = %d\n" +.LC34: + .string "remove_from_free_sys_Queue %x\n" +.LC35: + .string "FtlMapWritePage error = %x\n" +.LC36: + .string "FtlMapWritePage error = %x error count = %d\n" +.LC37: + .string "ftl_map_blk_gc blk info: %x %x %x\n" +.LC38: + .string "page map lost: %x %x\n" +.LC39: + .string "load_l2p_region refresh = %x phyAddr = %x\n" +.LC40: + .string "FtlVendorPartRead refresh = %x phyAddr = %x\n" +.LC41: + .string "FtlVpcTblFlush error = %x error count = %d\n" +.LC42: + .string "%s\n" +.LC43: + .string "no ect" +.LC44: + .string "page map lost %x %x %x %x\n" +.LC45: + .string "slc mode" +.LC46: + .string "FLASH INFO:\n" +.LC47: + .string "FLASH ID: %x\n" +.LC48: + .string "Device Capacity: %d MB\n" +.LC49: + .string "FMWAIT: %x %x %x %x\n" +.LC50: + .string "FTL INFO:\n" +.LC51: + .string "g_MaxLpn = 0x%x\n" +.LC52: + .string "g_VaildLpn = 0x%x\n" +.LC53: + .string "read_page_count = 0x%x\n" +.LC54: + .string "discard_page_count = 0x%x\n" +.LC55: + .string "write_page_count = 0x%x\n" +.LC56: + .string "cache_write_count = 0x%x\n" +.LC57: + .string "l2p_write_count = 0x%x\n" +.LC58: + .string "gc_page_count = 0x%x\n" +.LC59: + .string "totle_write = %d MB\n" +.LC60: + .string "totle_read = %d MB\n" +.LC61: + .string "GSV = 0x%x\n" +.LC62: + .string "GDV = 0x%x\n" +.LC63: + .string "bad blk num = %d %d\n" +.LC64: + .string "free_superblocks = 0x%x\n" +.LC65: + .string "mlc_EC = 0x%x\n" +.LC66: + .string "slc_EC = 0x%x\n" +.LC67: + .string "avg_EC = 0x%x\n" +.LC68: + .string "sys_EC = 0x%x\n" +.LC69: + .string "max_EC = 0x%x\n" +.LC70: + .string "min_EC = 0x%x\n" +.LC71: + .string "PLT = 0x%x\n" +.LC72: + .string "POT = 0x%x\n" +.LC73: + .string "MaxSector = 0x%x\n" +.LC74: + .string "init_sys_blks_pp = 0x%x\n" +.LC75: + .string "sys_blks_pp = 0x%x\n" +.LC76: + .string "free sysblock = 0x%x\n" +.LC77: + .string "data_blks_pp = 0x%x\n" +.LC78: + .string "data_op_blks_pp = 0x%x\n" +.LC79: + .string "max_data_blks = 0x%x\n" +.LC80: + .string "Sys.id = 0x%x\n" +.LC81: + .string "Bbt.id = 0x%x\n" +.LC82: + .string "ACT.page = 0x%x\n" +.LC83: + .string "ACT.plane = 0x%x\n" +.LC84: + .string "ACT.id = 0x%x\n" +.LC85: + .string "ACT.mode = 0x%x\n" +.LC86: + .string "ACT.a_pages = 0x%x\n" +.LC87: + .string "ACT VPC = 0x%x\n" +.LC88: + .string "BUF.page = 0x%x\n" +.LC89: + .string "BUF.plane = 0x%x\n" +.LC90: + .string "BUF.id = 0x%x\n" +.LC91: + .string "BUF.mode = 0x%x\n" +.LC92: + .string "BUF.a_pages = 0x%x\n" +.LC93: + .string "BUF VPC = 0x%x\n" +.LC94: + .string "TMP.page = 0x%x\n" +.LC95: + .string "TMP.plane = 0x%x\n" +.LC96: + .string "TMP.id = 0x%x\n" +.LC97: + .string "TMP.mode = 0x%x\n" +.LC98: + .string "TMP.a_pages = 0x%x\n" +.LC99: + .string "GC.page = 0x%x\n" +.LC100: + .string "GC.plane = 0x%x\n" +.LC101: + .string "GC.id = 0x%x\n" +.LC102: + .string "GC.mode = 0x%x\n" +.LC103: + .string "GC.a_pages = 0x%x\n" +.LC104: + .string "WR_CHK = 0x%x %x %x %x\n" +.LC105: + .string "Read Err Cnt = 0x%x\n" +.LC106: + .string "Prog Err Cnt = 0x%x\n" +.LC107: + .string "gc_free_blk_th= 0x%x\n" +.LC108: + .string "gc_merge_free_blk_th= 0x%x\n" +.LC109: + .string "gc_skip_write_count= 0x%x\n" +.LC110: + .string "gc_blk_index= 0x%x\n" +.LC111: + .string "free min EC= 0x%x\n" +.LC112: + .string "free max EC= 0x%x\n" +.LC113: + .string "GC__SB VPC = 0x%x\n" +.LC114: + .string "%d. [0x%x]=0x%x 0x%x 0x%x\n" +.LC115: + .string "free %d. [0x%x] 0x%x 0x%x\n" +.LC116: + .string "FTL version: 5.0.47 20180118" +.LC117: + .string "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x\n" +.LC118: + .string "FtlGcScanTempBlkError ID %x %x!!!!!!!\n" +.LC119: + .string "FtlGcRefreshBlock 0x%x\n" +.LC120: + .string "FtlGcMarkBadPhyBlk %d 0x%x\n" +.LC121: + .string "FtlGcFreeBadSuperBlk 0x%x\n" +.LC122: + .string "decrement_vpc_count %x = %d\n" +.LC123: + .string "RSB refresh addr %x\n" +.LC124: + .string "spuer block %x vpn is 0\n " +.LC125: + .string "g_recovery_ppa %x ver %x\n " +.LC126: + .string "...%s enter...\n" +.LC127: + .string "FtlCheckVpc %x = %x %x\n" +.LC128: + .string "%d GC datablk = %x vpc %x %x\n" +.LC129: + .string "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\n" +.LC130: + .string "Ftlwrite decrement_vpc_count %x = %d\n" +.LC131: + .string "GC des block %x done\n" +.LC132: + .string "FtlWrite: lpa error:%x %x\n" +.LC133: + .string "fix power lost blk = %x vpc=%x\n" +.LC134: + .string "erase power lost blk = %x vpc=%x\n" +.LC135: + .string "...%s: no bad block mapping table, format device\n" +.LC136: + .string "...%s FtlSysBlkInit error ,format device!\n" + .data + .align 3 +.LANCHOR1 = . + 0 + .type random_seed, %object + .size random_seed, 256 +random_seed: + .hword 22378 + .hword 1512 + .hword 25245 + .hword 17827 + .hword 25756 + .hword 19440 + .hword 9026 + .hword 10030 + .hword 29528 + .hword 20467 + .hword 29676 + .hword 24432 + .hword 31328 + .hword 6872 + .hword 13426 + .hword 13842 + .hword 8783 + .hword 1108 + .hword 782 + .hword 28837 + .hword 30729 + .hword 9505 + .hword 18676 + .hword 23085 + .hword 18730 + .hword 1085 + .hword 32609 + .hword 14697 + .hword 20858 + .hword 15170 + .hword 30365 + .hword 1607 + .hword 32298 + .hword 4995 + .hword 18905 + .hword 1976 + .hword 9592 + .hword 20204 + .hword 17443 + .hword 13615 + .hword 23330 + .hword 29369 + .hword 13947 + .hword 9398 + .hword 32398 + .hword 8984 + .hword 27600 + .hword 21785 + .hword 6019 + .hword 6311 + .hword 31598 + .hword 30210 + .hword 19327 + .hword 13896 + .hword 11347 + .hword 27545 + .hword 3107 + .hword 26575 + .hword 32270 + .hword 19852 + .hword 20601 + .hword 8349 + .hword 9290 + .hword 29819 + .hword 13579 + .hword 3661 + .hword 28676 + .hword 27331 + .hword 32574 + .hword 8693 + .hword 31253 + .hword 9081 + .hword 5399 + .hword 6842 + .hword 20087 + .hword 5537 + .hword 1274 + .hword 11617 + .hword 9530 + .hword 4866 + .hword 8035 + .hword 23219 + .hword 1178 + .hword 23272 + .hword 7383 + .hword 18944 + .hword 12488 + .hword 12871 + .hword 29340 + .hword 20532 + .hword 11022 + .hword 22514 + .hword 228 + .hword 22363 + .hword 24978 + .hword 14584 + .hword 12138 + .hword 3092 + .hword 17916 + .hword 16863 + .hword 14554 + .hword 31457 + .hword 29474 + .hword 25311 + .hword 24121 + .hword 3684 + .hword 28037 + .hword 22865 + .hword 22839 + .hword 25217 + .hword 13217 + .hword 27186 + .hword 14938 + .hword 11180 + .hword 29754 + .hword 24180 + .hword 15150 + .hword 32455 + .hword 20434 + .hword 23848 + .hword 29983 + .hword 16120 + .hword 14769 + .hword 20041 + .hword 29803 + .hword 28406 + .hword 17598 + .hword 28087 + .type gNandParaInfo, %object + .size gNandParaInfo, 32 +gNandParaInfo: + .byte 0 + .byte 0 + .zero 5 + .byte 0 + .byte 1 + .byte 8 + .hword 128 + .byte 2 + .byte 1 + .hword 2048 + .hword 0 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .type NandFlashParaTbl, %object + .size NandFlashParaTbl, 2336 +NandFlashParaTbl: + .byte 6 + .byte 44 + .byte 100 + .byte 68 + .byte 75 + .byte -87 + .byte 0 + .byte 4 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 479 + .byte 3 + .byte 17 + .byte 40 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte 68 + .byte 68 + .byte 75 + .byte -87 + .byte 0 + .byte 4 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 1064 + .hword 479 + .byte 3 + .byte 17 + .byte 40 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte 104 + .byte 4 + .byte 74 + .byte -87 + .byte 0 + .byte 4 + .byte 1 + .byte 8 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 287 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 5 + .byte 44 + .byte -120 + .byte 4 + .byte 75 + .byte -87 + .byte 0 + .byte 4 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 287 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte -88 + .byte 5 + .byte -53 + .byte -87 + .byte 0 + .byte 4 + .byte 2 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 287 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte 104 + .byte 4 + .byte 70 + .byte -119 + .byte 0 + .byte 4 + .byte 1 + .byte 8 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 287 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte 72 + .byte 4 + .byte 74 + .byte -91 + .byte 0 + .byte 4 + .byte 1 + .byte 8 + .hword 256 + .byte 2 + .byte 2 + .hword 1024 + .hword 287 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte -124 + .byte 100 + .byte 60 + .byte -91 + .byte 0 + .byte 4 + .byte 1 + .byte 32 + .hword 512 + .byte 2 + .byte 2 + .hword 1024 + .hword 479 + .byte 3 + .byte 17 + .byte 40 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 5 + .byte 44 + .byte -124 + .byte 100 + .byte 84 + .byte -87 + .byte 0 + .byte 4 + .byte 1 + .byte 32 + .hword 512 + .byte 2 + .byte 2 + .hword 1024 + .hword 479 + .byte 4 + .byte 18 + .byte 60 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte -41 + .byte -108 + .byte 62 + .byte -124 + .byte 0 + .byte 4 + .byte 1 + .byte 8 + .hword 128 + .byte 2 + .byte 2 + .hword 4096 + .hword 279 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte 72 + .byte 4 + .byte 70 + .byte -123 + .byte 0 + .byte 4 + .byte 1 + .byte 8 + .hword 256 + .byte 2 + .byte 2 + .hword 1024 + .hword 287 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte -120 + .byte 5 + .byte -58 + .byte -119 + .byte 0 + .byte 4 + .byte 2 + .byte 8 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 287 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 5 + .byte 44 + .byte -120 + .byte 36 + .byte 75 + .byte -87 + .byte 0 + .byte 4 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 287 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte 104 + .byte 0 + .byte 39 + .byte -87 + .byte 0 + .byte 4 + .byte 1 + .byte 16 + .hword 128 + .byte 1 + .byte 2 + .hword 2048 + .hword 287 + .byte 0 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 5 + .byte 44 + .byte 100 + .byte 100 + .byte 86 + .byte -91 + .byte 0 + .byte 4 + .byte 1 + .byte 24 + .hword 512 + .byte 2 + .byte 2 + .hword 700 + .hword 479 + .byte 4 + .byte 18 + .byte 60 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte -124 + .byte -59 + .byte 75 + .byte -87 + .byte 0 + .byte 4 + .byte 2 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 479 + .byte 3 + .byte 17 + .byte 40 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte -43 + .byte -47 + .byte -90 + .byte 104 + .byte 0 + .byte 4 + .byte 2 + .byte 8 + .hword 64 + .byte 1 + .byte 2 + .hword 2048 + .hword 279 + .byte 0 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 44 + .byte -36 + .byte -112 + .byte -90 + .byte 84 + .byte 0 + .byte 4 + .byte 1 + .byte 8 + .hword 64 + .byte 1 + .byte 2 + .hword 1024 + .hword 279 + .byte 0 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 5 + .byte 44 + .byte 100 + .byte 100 + .byte 84 + .byte -92 + .byte 0 + .byte 4 + .byte 1 + .byte 32 + .hword 512 + .byte 2 + .byte 1 + .hword 1024 + .hword 479 + .byte 4 + .byte 18 + .byte 60 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 5 + .byte 44 + .byte 100 + .byte 68 + .byte 50 + .byte -91 + .byte 0 + .byte 4 + .byte 1 + .byte 32 + .hword 512 + .byte 2 + .byte 1 + .hword 1048 + .hword 1503 + .byte 5 + .byte 19 + .byte 60 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .zero 4 + .byte 5 + .byte 44 + .byte 100 + .byte 100 + .byte 60 + .byte -91 + .byte 0 + .byte 4 + .byte 1 + .byte 32 + .hword 512 + .byte 2 + .byte 1 + .hword 1044 + .hword 479 + .byte 3 + .byte 17 + .byte 40 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -34 + .byte -108 + .byte -46 + .byte 4 + .byte 67 + .byte 2 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 473 + .byte 1 + .byte 1 + .byte 24 + .byte 32 + .byte 4 + .byte 0 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -41 + .byte -108 + .byte -38 + .byte 116 + .byte -61 + .byte 2 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 1024 + .hword 473 + .byte 1 + .byte 2 + .byte 40 + .byte 32 + .byte 4 + .byte 0 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -41 + .byte -108 + .byte -111 + .byte 96 + .byte 68 + .byte 2 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 1046 + .hword 473 + .byte 1 + .byte 3 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -34 + .byte -108 + .byte -38 + .byte 116 + .byte -60 + .byte 2 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2090 + .hword 473 + .byte 1 + .byte 4 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -34 + .byte -108 + .byte -21 + .byte 116 + .byte 68 + .byte 2 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1066 + .hword 473 + .byte 1 + .byte 7 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -43 + .byte -108 + .byte -38 + .byte 116 + .byte -60 + .byte 2 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 530 + .hword 473 + .byte 1 + .byte 3 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -41 + .byte -108 + .byte -102 + .byte 116 + .byte 66 + .byte 2 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 1024 + .hword 281 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 4 + .byte 0 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -34 + .byte 20 + .byte -89 + .byte 66 + .byte 74 + .byte 2 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1060 + .hword 473 + .byte 2 + .byte 5 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -41 + .byte 20 + .byte -98 + .byte 52 + .byte 74 + .byte 2 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 1056 + .hword 473 + .byte 2 + .byte 5 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -34 + .byte -108 + .byte -89 + .byte 66 + .byte 72 + .byte 2 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1060 + .hword 473 + .byte 2 + .byte 5 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -34 + .byte 20 + .byte -85 + .byte 66 + .byte 74 + .byte 2 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1056 + .hword 473 + .byte 2 + .byte 6 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte 58 + .byte 20 + .byte -85 + .byte 66 + .byte 74 + .byte 2 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 2092 + .hword 473 + .byte 2 + .byte 5 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -83 + .byte -43 + .byte -108 + .byte -102 + .byte 116 + .byte 66 + .byte 2 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 1 + .hword 1024 + .hword 273 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -119 + .byte 100 + .byte 68 + .byte 75 + .byte -87 + .byte 0 + .byte 7 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 479 + .byte 3 + .byte 17 + .byte 40 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -119 + .byte -120 + .byte 36 + .byte 75 + .byte -87 + .byte -124 + .byte 7 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 479 + .byte 3 + .byte 17 + .byte 40 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -119 + .byte -120 + .byte 36 + .byte 75 + .byte -87 + .byte 0 + .byte 7 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 279 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -119 + .byte 104 + .byte 36 + .byte 74 + .byte -87 + .byte 0 + .byte 7 + .byte 1 + .byte 8 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 279 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -119 + .byte 104 + .byte 4 + .byte 74 + .byte -87 + .byte 0 + .byte 7 + .byte 1 + .byte 8 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 279 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -119 + .byte -41 + .byte -108 + .byte 62 + .byte -124 + .byte 0 + .byte 7 + .byte 1 + .byte 8 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 279 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -119 + .byte 104 + .byte 4 + .byte 70 + .byte -87 + .byte 0 + .byte 7 + .byte 1 + .byte 8 + .hword 256 + .byte 2 + .byte 2 + .hword 2048 + .hword 279 + .byte 1 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -41 + .byte -124 + .byte -109 + .byte 114 + .byte 87 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 1060 + .hword 1473 + .byte 2 + .byte 33 + .byte 40 + .byte 32 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -34 + .byte -124 + .byte -109 + .byte 114 + .byte 87 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 2092 + .hword 1473 + .byte 2 + .byte 33 + .byte 40 + .byte 32 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte 58 + .byte -123 + .byte -109 + .byte 118 + .byte 87 + .byte 1 + .byte 2 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 2092 + .hword 1505 + .byte 2 + .byte 33 + .byte 40 + .byte 32 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -43 + .byte -124 + .byte 50 + .byte 114 + .byte 86 + .byte 1 + .byte 1 + .byte 16 + .hword 128 + .byte 2 + .byte 1 + .hword 2056 + .hword 1473 + .byte 2 + .byte 33 + .byte 40 + .byte 32 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -41 + .byte -108 + .byte 50 + .byte 118 + .byte 86 + .byte 1 + .byte 1 + .byte 16 + .hword 128 + .byte 2 + .byte 2 + .hword 2058 + .hword 1489 + .byte 2 + .byte 33 + .byte 40 + .byte 32 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -34 + .byte -108 + .byte -126 + .byte 118 + .byte 86 + .byte 1 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2062 + .hword 1489 + .byte 1 + .byte 33 + .byte 40 + .byte 32 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 80 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1066 + .hword 1497 + .byte 2 + .byte 34 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte 58 + .byte -107 + .byte -109 + .byte 122 + .byte 80 + .byte 1 + .byte 2 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1066 + .hword 1497 + .byte 2 + .byte 34 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -41 + .byte -108 + .byte 50 + .byte 118 + .byte 85 + .byte 1 + .byte 1 + .byte 16 + .hword 128 + .byte 2 + .byte 2 + .hword 2050 + .hword 401 + .byte 2 + .byte 0 + .byte 24 + .byte 32 + .byte 1 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 87 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1058 + .hword 1497 + .byte 2 + .byte 33 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -41 + .byte -124 + .byte -109 + .byte 114 + .byte 80 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 1060 + .hword 1473 + .byte 2 + .byte 34 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 81 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1074 + .hword 1497 + .byte 2 + .byte 35 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte 58 + .byte -108 + .byte -109 + .byte 118 + .byte 81 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 2106 + .hword 1497 + .byte 2 + .byte 35 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -104 + .byte -41 + .byte -124 + .byte -109 + .byte 114 + .byte 81 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 1056 + .hword 1497 + .byte 2 + .byte 35 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 87 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1058 + .hword 1497 + .byte 2 + .byte 66 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -41 + .byte -124 + .byte -109 + .byte 114 + .byte 87 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 1060 + .hword 1473 + .byte 2 + .byte 66 + .byte 40 + .byte 32 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -34 + .byte -92 + .byte -126 + .byte 118 + .byte 86 + .byte 8 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2082 + .hword 473 + .byte 1 + .byte 65 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 80 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1066 + .hword 1497 + .byte 2 + .byte 67 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -41 + .byte -124 + .byte -109 + .byte 114 + .byte 80 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 1060 + .hword 1473 + .byte 2 + .byte 67 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -34 + .byte -92 + .byte -126 + .byte 118 + .byte -41 + .byte 8 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2090 + .hword 1241 + .byte 1 + .byte 66 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -34 + .byte -124 + .byte -109 + .byte 114 + .byte 87 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 2092 + .hword 1473 + .byte 2 + .byte 66 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte 58 + .byte -108 + .byte -109 + .byte 118 + .byte 81 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 2106 + .hword 473 + .byte 2 + .byte 68 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 81 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1074 + .hword 473 + .byte 2 + .byte 68 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte 58 + .byte -92 + .byte -109 + .byte 122 + .byte 80 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 2138 + .hword 1497 + .byte 2 + .byte 0 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -34 + .byte -108 + .byte -126 + .byte 118 + .byte 86 + .byte 8 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 2062 + .hword 473 + .byte 1 + .byte 0 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte 69 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte -41 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1058 + .hword 1497 + .byte 2 + .byte 66 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -20 + .byte -41 + .byte -108 + .byte 126 + .byte 100 + .byte 68 + .byte 0 + .byte 1 + .byte 16 + .hword 128 + .byte 2 + .byte 2 + .hword 2048 + .hword 473 + .byte 2 + .byte 49 + .byte 60 + .byte 36 + .byte 3 + .byte 0 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -20 + .byte -34 + .byte -43 + .byte 126 + .byte 104 + .byte 68 + .byte 0 + .byte 2 + .byte 16 + .hword 128 + .byte 2 + .byte 2 + .hword 2048 + .hword 505 + .byte 2 + .byte 49 + .byte 60 + .byte 36 + .byte 3 + .byte 0 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -20 + .byte -41 + .byte -108 + .byte 122 + .byte 84 + .byte 67 + .byte 0 + .byte 1 + .byte 16 + .hword 128 + .byte 2 + .byte 2 + .hword 2076 + .hword 409 + .byte 2 + .byte 0 + .byte 40 + .byte 36 + .byte 3 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -20 + .byte -34 + .byte -43 + .byte 122 + .byte 88 + .byte 67 + .byte 0 + .byte 2 + .byte 16 + .hword 128 + .byte 2 + .byte 2 + .hword 2076 + .hword 441 + .byte 2 + .byte 0 + .byte 40 + .byte 36 + .byte 3 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -20 + .byte -43 + .byte -108 + .byte 118 + .byte 84 + .byte 67 + .byte 0 + .byte 1 + .byte 16 + .hword 128 + .byte 2 + .byte 2 + .hword 1038 + .hword 281 + .byte 2 + .byte 0 + .byte 24 + .byte 36 + .byte 3 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .byte 6 + .byte -20 + .byte -41 + .byte 20 + .byte 118 + .byte 84 + .byte -62 + .byte 0 + .byte 1 + .byte 16 + .hword 128 + .byte 2 + .byte 2 + .hword 2076 + .hword 1169 + .byte 2 + .byte 0 + .byte 24 + .byte 40 + .byte 3 + .byte 1 + .byte 3 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .type NandOptPara, %object + .size NandOptPara, 128 +NandOptPara: + .byte 1 + .byte 0 + .byte 49 + .byte 63 + .byte 0 + .byte 49 + .byte -128 + .byte 21 + .byte 0 + .byte 50 + .byte 17 + .byte -128 + .byte 112 + .byte 120 + .byte 120 + .byte 3 + .byte 1 + .byte 0 + .zero 14 + .byte 2 + .byte 0 + .byte 49 + .byte 63 + .byte 0 + .byte 49 + .byte -128 + .byte 21 + .byte 0 + .byte 0 + .byte 17 + .byte -127 + .byte 112 + .byte -15 + .byte -14 + .byte 0 + .byte 0 + .byte 0 + .zero 14 + .byte 3 + .byte 0 + .byte 49 + .byte 63 + .byte 0 + .byte 49 + .byte -128 + .byte 21 + .byte 96 + .byte 96 + .byte 17 + .byte -127 + .byte 112 + .byte -15 + .byte -14 + .byte 0 + .byte 0 + .byte 0 + .zero 14 + .byte 4 + .byte 0 + .byte 49 + .byte 63 + .byte 0 + .byte 49 + .byte -128 + .byte 21 + .byte 96 + .byte 96 + .byte 17 + .byte -127 + .byte 112 + .byte 112 + .byte 112 + .byte 0 + .byte 0 + .byte 0 + .zero 14 + .type ToshibaA19RefValue, %object + .size ToshibaA19RefValue, 45 +ToshibaA19RefValue: + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 13 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 4 + .byte 4 + .byte 124 + .byte 126 + .byte 0 + .byte 0 + .byte 124 + .byte 120 + .byte 120 + .byte 0 + .byte 124 + .byte 118 + .byte 116 + .byte 114 + .byte 0 + .byte 8 + .byte 8 + .byte 0 + .byte 0 + .byte 0 + .byte 11 + .byte 126 + .byte 118 + .byte 116 + .byte 0 + .byte 16 + .byte 118 + .byte 114 + .byte 112 + .byte 0 + .byte 2 + .byte 0 + .byte 126 + .byte 124 + .byte 0 + .zero 3 + .type Toshiba15RefValue, %object + .size Toshiba15RefValue, 95 +Toshiba15RefValue: + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 13 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 2 + .byte 4 + .byte 2 + .byte 0 + .byte 0 + .byte 8 + .byte 8 + .byte 0 + .byte 0 + .byte 0 + .byte 124 + .byte 0 + .byte 124 + .byte 124 + .byte 0 + .byte 122 + .byte 0 + .byte 122 + .byte 122 + .byte 0 + .byte 11 + .byte 126 + .byte 118 + .byte 116 + .byte 0 + .byte 120 + .byte 2 + .byte 120 + .byte 122 + .byte 0 + .byte 126 + .byte 4 + .byte 126 + .byte 122 + .byte 0 + .byte 16 + .byte 118 + .byte 114 + .byte 112 + .byte 0 + .byte 118 + .byte 4 + .byte 118 + .byte 120 + .byte 0 + .byte 4 + .byte 4 + .byte 4 + .byte 118 + .byte 0 + .byte 2 + .byte 0 + .byte 126 + .byte 124 + .byte 0 + .byte 6 + .byte 10 + .byte 6 + .byte 2 + .byte 0 + .byte 116 + .byte 124 + .byte 116 + .byte 118 + .byte 0 + .byte 4 + .byte 4 + .byte 124 + .byte 126 + .byte 0 + .byte 0 + .byte 124 + .byte 120 + .byte 120 + .byte 0 + .byte 124 + .byte 118 + .byte 116 + .byte 114 + .byte 0 + .zero 1 + .type ToshibaRefValue, %object + .size ToshibaRefValue, 8 +ToshibaRefValue: + .byte 0 + .byte 4 + .byte 124 + .byte 120 + .byte 116 + .byte 8 + .byte 12 + .byte 112 + .type SamsungRefValue, %object + .size SamsungRefValue, 64 +SamsungRefValue: + .byte -89 + .byte -92 + .byte -91 + .byte -90 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 5 + .byte 10 + .byte 0 + .byte 0 + .byte 40 + .byte 0 + .byte -20 + .byte -40 + .byte -19 + .byte -11 + .byte -19 + .byte -26 + .byte 10 + .byte 15 + .byte 5 + .byte 0 + .byte 15 + .byte 10 + .byte -5 + .byte -20 + .byte -24 + .byte -17 + .byte -24 + .byte -36 + .byte -15 + .byte -5 + .byte -2 + .byte -16 + .byte 10 + .byte 0 + .byte -5 + .byte -20 + .byte -48 + .byte -30 + .byte -48 + .byte -62 + .byte 20 + .byte 15 + .byte -5 + .byte -20 + .byte -24 + .byte -5 + .byte -24 + .byte -36 + .byte 30 + .byte 20 + .byte -5 + .byte -20 + .byte -5 + .byte -1 + .byte -5 + .byte -8 + .byte 7 + .byte 12 + .byte 2 + .byte 0 + .type refValueDefault, %object + .size refValueDefault, 28 +refValueDefault: + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 6 + .byte 10 + .byte 6 + .byte 0 + .byte -3 + .byte -7 + .byte -8 + .byte 0 + .byte -6 + .byte -13 + .byte -15 + .byte 0 + .byte -11 + .byte -20 + .byte -23 + .byte 0 + .byte 0 + .byte -26 + .byte -30 + .byte 0 + .byte 0 + .byte -32 + .byte -37 + .zero 4 + .type gSlcNandParaInfo, %object + .size gSlcNandParaInfo, 32 +gSlcNandParaInfo: + .byte 2 + .byte -104 + .byte -15 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 1 + .byte 1 + .byte 4 + .hword 64 + .byte 1 + .byte 1 + .hword 1024 + .hword 256 + .byte 0 + .byte 0 + .byte 16 + .byte 40 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .zero 4 + .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: + .hword -1 + .zero 2 + .type power_up_flag, %object + .size power_up_flag, 4 +power_up_flag: + .word 1 + .bss + .align 3 +.LANCHOR0 = . + 0 +.LANCHOR2 = . + 4352 +.LANCHOR4 = . + 8704 + .type gFlashPageBuffer0, %object + .size gFlashPageBuffer0, 8 +gFlashPageBuffer0: + .zero 8 + .type gNandFlashIdbBlockAddr, %object + .size gNandFlashIdbBlockAddr, 4 +gNandFlashIdbBlockAddr: + .zero 4 + .zero 4 + .type p_blk_mode_table, %object + .size p_blk_mode_table, 8 +p_blk_mode_table: + .zero 8 + .type g_slc2KBNand, %object + .size g_slc2KBNand, 1 +g_slc2KBNand: + .zero 1 + .type gNandIDBResBlkNum, %object + .size gNandIDBResBlkNum, 1 +gNandIDBResBlkNum: + .zero 1 + .zero 2 + .type gBlockPageAlignSize, %object + .size gBlockPageAlignSize, 4 +gBlockPageAlignSize: + .zero 4 + .type gNandRandomizer, %object + .size gNandRandomizer, 1 +gNandRandomizer: + .zero 1 + .zero 7 + .type gNandChipMap, %object + .size gNandChipMap, 64 +gNandChipMap: + .zero 64 + .type gNandOptPara, %object + .size gNandOptPara, 32 +gNandOptPara: + .zero 32 + .type gFlashSlcMode, %object + .size gFlashSlcMode, 1 +gFlashSlcMode: + .zero 1 + .zero 3 + .type slcPageToMlcPageTbl, %object + .size slcPageToMlcPageTbl, 512 +slcPageToMlcPageTbl: + .zero 512 + .type mlcPageToSlcPageTbl, %object + .size mlcPageToSlcPageTbl, 1024 +mlcPageToSlcPageTbl: + .zero 1024 + .type gNandMaxDie, %object + .size gNandMaxDie, 1 +gNandMaxDie: + .zero 1 + .type gNandMaxChip, %object + .size gNandMaxChip, 1 +gNandMaxChip: + .zero 1 + .zero 2 + .type DieCsIndex, %object + .size DieCsIndex, 8 +DieCsIndex: + .zero 8 + .type DieAddrs, %object + .size DieAddrs, 32 +DieAddrs: + .zero 32 + .type gDieOp, %object + .size gDieOp, 192 +gDieOp: + .zero 192 + .type gpNandParaInfo, %object + .size gpNandParaInfo, 8 +gpNandParaInfo: + .zero 8 + .type gTotleBlock, %object + .size gTotleBlock, 2 +gTotleBlock: + .zero 2 + .zero 6 + .type gNandIDataBuf, %object + .size gNandIDataBuf, 2048 +gNandIDataBuf: + .zero 2048 + .type gpNandc, %object + .size gpNandc, 8 +gpNandc: + .zero 8 + .type NANDC_FMCTL, %object + .size NANDC_FMCTL, 4 +NANDC_FMCTL: + .zero 4 + .type NANDC_FMWAIT, %object + .size NANDC_FMWAIT, 4 +NANDC_FMWAIT: + .zero 4 + .type NANDC_FLCTL, %object + .size NANDC_FLCTL, 4 +NANDC_FLCTL: + .zero 4 + .type NANDC_BCHCTL, %object + .size NANDC_BCHCTL, 4 +NANDC_BCHCTL: + .zero 4 + .type NANDC_DLL_CTL_REG0, %object + .size NANDC_DLL_CTL_REG0, 4 +NANDC_DLL_CTL_REG0: + .zero 4 + .type NANDC_DLL_CTL_REG1, %object + .size NANDC_DLL_CTL_REG1, 4 +NANDC_DLL_CTL_REG1: + .zero 4 + .type NANDC_RANDMZ_CFG, %object + .size NANDC_RANDMZ_CFG, 4 +NANDC_RANDMZ_CFG: + .zero 4 + .type NANDC_FMWAIT_SYN, %object + .size NANDC_FMWAIT_SYN, 4 +NANDC_FMWAIT_SYN: + .zero 4 + .type gNandPhyInfo, %object + .size gNandPhyInfo, 28 +gNandPhyInfo: + .zero 28 + .type gNandFlashEccBits, %object + .size gNandFlashEccBits, 1 +gNandFlashEccBits: + .zero 1 + .zero 3 + .type g_MaxLbaSector, %object + .size g_MaxLbaSector, 4 +g_MaxLbaSector: + .zero 4 + .type FlashWaitBusyScheduleEn, %object + .size FlashWaitBusyScheduleEn, 4 +FlashWaitBusyScheduleEn: + .zero 4 + .type gReadRetryInfo, %object + .size gReadRetryInfo, 852 +gReadRetryInfo: + .zero 852 + .zero 4 + .type read_retry_cur_offset, %object + .size read_retry_cur_offset, 4 +read_retry_cur_offset: + .zero 4 + .type gFlashInterfaceMode, %object + .size gFlashInterfaceMode, 1 +gFlashInterfaceMode: + .zero 1 + .type gFlashToggleModeEn, %object + .size gFlashToggleModeEn, 1 +gFlashToggleModeEn: + .zero 1 + .zero 2 + .type gBootDdrMode, %object + .size gBootDdrMode, 4 +gBootDdrMode: + .zero 4 + .type gNandcVer, %object + .size gNandcVer, 4 +gNandcVer: + .zero 4 + .type g_nandc_version_data, %object + .size g_nandc_version_data, 4 +g_nandc_version_data: + .zero 4 + .zero 4 + .type gMasterTempBuf, %object + .size gMasterTempBuf, 8 +gMasterTempBuf: + .zero 8 + .type gMasterInfo, %object + .size gMasterInfo, 48 +gMasterInfo: + .zero 48 + .type gNandcDumpWriteEn, %object + .size gNandcDumpWriteEn, 4 +gNandcDumpWriteEn: + .zero 4 + .type gNandcEccBits, %object + .size gNandcEccBits, 4 +gNandcEccBits: + .zero 4 + .type gMultiPageProgEn, %object + .size gMultiPageProgEn, 1 +gMultiPageProgEn: + .zero 1 + .zero 3 + .type FlashDdrTunningReadCount, %object + .size FlashDdrTunningReadCount, 4 +FlashDdrTunningReadCount: + .zero 4 + .type gpReadRetrial, %object + .size gpReadRetrial, 8 +gpReadRetrial: + .zero 8 + .type gpFlashSaveInfo, %object + .size gpFlashSaveInfo, 8 +gpFlashSaveInfo: + .zero 8 + .type gNandFlashInfoBlockAddr, %object + .size gNandFlashInfoBlockAddr, 4 +gNandFlashInfoBlockAddr: + .zero 4 + .type gNandIDBResBlkNumSaveInFlash, %object + .size gNandIDBResBlkNumSaveInFlash, 1 +gNandIDBResBlkNumSaveInFlash: + .zero 1 + .type gNandFlashIDBEccBits, %object + .size gNandFlashIDBEccBits, 1 +gNandFlashIDBEccBits: + .zero 1 + .zero 2 + .type gFlashPageBuffer1, %object + .size gFlashPageBuffer1, 8 +gFlashPageBuffer1: + .zero 8 + .type gFlashSpareBuffer, %object + .size gFlashSpareBuffer, 8 +gFlashSpareBuffer: + .zero 8 + .type gFlashProgCheckBuffer, %object + .size gFlashProgCheckBuffer, 8 +gFlashProgCheckBuffer: + .zero 8 + .type gFlashProgCheckSpareBuffer, %object + .size gFlashProgCheckSpareBuffer, 8 +gFlashProgCheckSpareBuffer: + .zero 8 + .type gMultiPageReadEn, %object + .size gMultiPageReadEn, 1 +gMultiPageReadEn: + .zero 1 + .zero 7 + .type FbbtBlk, %object + .size FbbtBlk, 16 +FbbtBlk: + .zero 16 + .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: + .zero 4 + .type c_ftl_nand_planes_num, %object + .size c_ftl_nand_planes_num, 2 +c_ftl_nand_planes_num: + .zero 2 + .zero 2 + .type c_ftl_nand_max_sys_blks, %object + .size c_ftl_nand_max_sys_blks, 4 +c_ftl_nand_max_sys_blks: + .zero 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: + .zero 2 + .type c_ftl_nand_blk_pre_plane, %object + .size c_ftl_nand_blk_pre_plane, 2 +c_ftl_nand_blk_pre_plane: + .zero 2 + .type c_ftl_nand_max_data_blks, %object + .size c_ftl_nand_max_data_blks, 4 +c_ftl_nand_max_data_blks: + .zero 4 + .type c_ftl_nand_totle_phy_blks, %object + .size c_ftl_nand_totle_phy_blks, 4 +c_ftl_nand_totle_phy_blks: + .zero 4 + .type c_ftl_nand_type, %object + .size c_ftl_nand_type, 2 +c_ftl_nand_type: + .zero 2 + .type c_ftl_nand_die_num, %object + .size c_ftl_nand_die_num, 2 +c_ftl_nand_die_num: + .zero 2 + .type c_ftl_nand_planes_per_die, %object + .size c_ftl_nand_planes_per_die, 2 +c_ftl_nand_planes_per_die: + .zero 2 + .zero 2 + .type p_plane_order_table, %object + .size p_plane_order_table, 32 +p_plane_order_table: + .zero 32 + .type c_mlc_erase_count_value, %object + .size c_mlc_erase_count_value, 2 +c_mlc_erase_count_value: + .zero 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: + .zero 2 + .type c_ftl_vendor_part_size, %object + .size c_ftl_vendor_part_size, 2 +c_ftl_vendor_part_size: + .zero 2 + .type c_ftl_nand_blks_per_die, %object + .size c_ftl_nand_blks_per_die, 2 +c_ftl_nand_blks_per_die: + .zero 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: + .zero 2 + .type c_ftl_nand_page_pre_blk, %object + .size c_ftl_nand_page_pre_blk, 2 +c_ftl_nand_page_pre_blk: + .zero 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: + .zero 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: + .zero 2 + .type c_ftl_nand_sec_pre_page, %object + .size c_ftl_nand_sec_pre_page, 2 +c_ftl_nand_sec_pre_page: + .zero 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: + .zero 2 + .type c_ftl_nand_byte_pre_page, %object + .size c_ftl_nand_byte_pre_page, 2 +c_ftl_nand_byte_pre_page: + .zero 2 + .type c_ftl_nand_byte_pre_oob, %object + .size c_ftl_nand_byte_pre_oob, 2 +c_ftl_nand_byte_pre_oob: + .zero 2 + .type c_ftl_nand_reserved_blks, %object + .size c_ftl_nand_reserved_blks, 2 +c_ftl_nand_reserved_blks: + .zero 2 + .zero 2 + .type DeviceCapacity, %object + .size DeviceCapacity, 4 +DeviceCapacity: + .zero 4 + .type c_ftl_nand_max_vendor_blks, %object + .size c_ftl_nand_max_vendor_blks, 2 +c_ftl_nand_max_vendor_blks: + .zero 2 + .type c_ftl_nand_vendor_region_num, %object + .size c_ftl_nand_vendor_region_num, 2 +c_ftl_nand_vendor_region_num: + .zero 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: + .zero 2 + .zero 2 + .type c_ftl_nand_max_map_blks, %object + .size c_ftl_nand_max_map_blks, 4 +c_ftl_nand_max_map_blks: + .zero 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: + .zero 4 + .type c_ftl_nand_map_region_num, %object + .size c_ftl_nand_map_region_num, 2 +c_ftl_nand_map_region_num: + .zero 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: + .zero 2 + .type g_page_map_check_enable, %object + .size g_page_map_check_enable, 2 +g_page_map_check_enable: + .zero 2 + .type g_free_slc_blk_num, %object + .size g_free_slc_blk_num, 2 +g_free_slc_blk_num: + .zero 2 + .type g_SlcPartLbaEndSector, %object + .size g_SlcPartLbaEndSector, 4 +g_SlcPartLbaEndSector: + .zero 4 + .type g_all_blk_used_slc_mode, %object + .size g_all_blk_used_slc_mode, 4 +g_all_blk_used_slc_mode: + .zero 4 + .type g_GlobalSysVersion, %object + .size g_GlobalSysVersion, 4 +g_GlobalSysVersion: + .zero 4 + .type g_GlobalDataVersion, %object + .size g_GlobalDataVersion, 4 +g_GlobalDataVersion: + .zero 4 + .type g_totle_gc_page_count, %object + .size g_totle_gc_page_count, 4 +g_totle_gc_page_count: + .zero 4 + .type g_totle_write_page_count, %object + .size g_totle_write_page_count, 4 +g_totle_write_page_count: + .zero 4 + .type g_totle_discard_page_count, %object + .size g_totle_discard_page_count, 4 +g_totle_discard_page_count: + .zero 4 + .type g_totle_cache_write_count, %object + .size g_totle_cache_write_count, 4 +g_totle_cache_write_count: + .zero 4 + .type g_totle_l2p_write_count, %object + .size g_totle_l2p_write_count, 4 +g_totle_l2p_write_count: + .zero 4 + .type g_totle_read_page_count, %object + .size g_totle_read_page_count, 4 +g_totle_read_page_count: + .zero 4 + .type g_totle_mlc_erase_count, %object + .size g_totle_mlc_erase_count, 4 +g_totle_mlc_erase_count: + .zero 4 + .type g_totle_slc_erase_count, %object + .size g_totle_slc_erase_count, 4 +g_totle_slc_erase_count: + .zero 4 + .type g_totle_sys_slc_erase_count, %object + .size g_totle_sys_slc_erase_count, 4 +g_totle_sys_slc_erase_count: + .zero 4 + .type g_max_erase_count, %object + .size g_max_erase_count, 4 +g_max_erase_count: + .zero 4 + .type g_min_erase_count, %object + .size g_min_erase_count, 4 +g_min_erase_count: + .zero 4 + .type g_in_gc_progress, %object + .size g_in_gc_progress, 4 +g_in_gc_progress: + .zero 4 + .type g_in_swl_replace, %object + .size g_in_swl_replace, 4 +g_in_swl_replace: + .zero 4 + .type g_gc_head_data_block, %object + .size g_gc_head_data_block, 4 +g_gc_head_data_block: + .zero 4 + .type g_gc_head_data_block_count, %object + .size g_gc_head_data_block_count, 4 +g_gc_head_data_block_count: + .zero 4 + .type g_gc_skip_write_count, %object + .size g_gc_skip_write_count, 4 +g_gc_skip_write_count: + .zero 4 + .type g_cur_erase_blk, %object + .size g_cur_erase_blk, 4 +g_cur_erase_blk: + .zero 4 + .type g_gc_next_blk, %object + .size g_gc_next_blk, 2 +g_gc_next_blk: + .zero 2 + .type g_gc_next_blk_1, %object + .size g_gc_next_blk_1, 2 +g_gc_next_blk_1: + .zero 2 + .type g_gc_free_blk_threshold, %object + .size g_gc_free_blk_threshold, 2 +g_gc_free_blk_threshold: + .zero 2 + .type g_gc_merge_free_blk_threshold, %object + .size g_gc_merge_free_blk_threshold, 2 +g_gc_merge_free_blk_threshold: + .zero 2 + .type g_gc_blk_index, %object + .size g_gc_blk_index, 2 +g_gc_blk_index: + .zero 2 + .type g_gc_bad_block_temp_num, %object + .size g_gc_bad_block_temp_num, 2 +g_gc_bad_block_temp_num: + .zero 2 + .type g_gc_refresh_block_temp_num, %object + .size g_gc_refresh_block_temp_num, 2 +g_gc_refresh_block_temp_num: + .zero 2 + .type g_gc_bad_block_gc_index, %object + .size g_gc_bad_block_gc_index, 2 +g_gc_bad_block_gc_index: + .zero 2 + .type c_wr_page_buf_num, %object + .size c_wr_page_buf_num, 4 +c_wr_page_buf_num: + .zero 4 + .type g_wr_page_num, %object + .size g_wr_page_num, 4 +g_wr_page_num: + .zero 4 + .zero 4 + .type p_gc_blk_tbl, %object + .size p_gc_blk_tbl, 8 +p_gc_blk_tbl: + .zero 8 + .type p_gc_page_info, %object + .size p_gc_page_info, 8 +p_gc_page_info: + .zero 8 + .type req_read, %object + .size req_read, 8 +req_read: + .zero 8 + .type req_gc_dst, %object + .size req_gc_dst, 8 +req_gc_dst: + .zero 8 + .type req_prgm, %object + .size req_prgm, 8 +req_prgm: + .zero 8 + .type req_erase, %object + .size req_erase, 8 +req_erase: + .zero 8 + .type req_gc, %object + .size req_gc, 8 +req_gc: + .zero 8 + .type req_wr_io, %object + .size req_wr_io, 8 +req_wr_io: + .zero 8 + .type c_gc_page_buf_num, %object + .size c_gc_page_buf_num, 4 +c_gc_page_buf_num: + .zero 4 + .zero 4 + .type p_sys_data_buf, %object + .size p_sys_data_buf, 8 +p_sys_data_buf: + .zero 8 + .type p_sys_data_buf_1, %object + .size p_sys_data_buf_1, 8 +p_sys_data_buf_1: + .zero 8 + .type p_vendor_data_buf, %object + .size p_vendor_data_buf, 8 +p_vendor_data_buf: + .zero 8 + .type p_gc_data_buf, %object + .size p_gc_data_buf, 8 +p_gc_data_buf: + .zero 8 + .type p_wr_io_data_buf, %object + .size p_wr_io_data_buf, 8 +p_wr_io_data_buf: + .zero 8 + .type p_io_data_buf_0, %object + .size p_io_data_buf_0, 8 +p_io_data_buf_0: + .zero 8 + .type p_io_data_buf_1, %object + .size p_io_data_buf_1, 8 +p_io_data_buf_1: + .zero 8 + .type gp_gc_page_buf_info, %object + .size gp_gc_page_buf_info, 8 +gp_gc_page_buf_info: + .zero 8 + .type p_sys_spare_buf, %object + .size p_sys_spare_buf, 8 +p_sys_spare_buf: + .zero 8 + .type p_io_spare_buf, %object + .size p_io_spare_buf, 8 +p_io_spare_buf: + .zero 8 + .type p_gc_spare_buf, %object + .size p_gc_spare_buf, 8 +p_gc_spare_buf: + .zero 8 + .type p_wr_io_spare_buf, %object + .size p_wr_io_spare_buf, 8 +p_wr_io_spare_buf: + .zero 8 + .type g_ect_tbl_info_size, %object + .size g_ect_tbl_info_size, 2 +g_ect_tbl_info_size: + .zero 2 + .zero 6 + .type p_swl_mul_table, %object + .size p_swl_mul_table, 8 +p_swl_mul_table: + .zero 8 + .type gp_ect_tbl_info, %object + .size gp_ect_tbl_info, 8 +gp_ect_tbl_info: + .zero 8 + .type p_erase_count_table, %object + .size p_erase_count_table, 8 +p_erase_count_table: + .zero 8 + .type p_valid_page_count_check_table, %object + .size p_valid_page_count_check_table, 8 +p_valid_page_count_check_table: + .zero 8 + .type p_valid_page_count_table, %object + .size p_valid_page_count_table, 8 +p_valid_page_count_table: + .zero 8 + .type p_map_block_table, %object + .size p_map_block_table, 8 +p_map_block_table: + .zero 8 + .type p_map_block_valid_page_count, %object + .size p_map_block_valid_page_count, 8 +p_map_block_valid_page_count: + .zero 8 + .type p_vendor_block_table, %object + .size p_vendor_block_table, 8 +p_vendor_block_table: + .zero 8 + .type p_vendor_block_valid_page_count, %object + .size p_vendor_block_valid_page_count, 8 +p_vendor_block_valid_page_count: + .zero 8 + .type p_vendor_block_ver_table, %object + .size p_vendor_block_ver_table, 8 +p_vendor_block_ver_table: + .zero 8 + .type p_vendor_region_ppn_table, %object + .size p_vendor_region_ppn_table, 8 +p_vendor_region_ppn_table: + .zero 8 + .type p_map_region_ppn_table, %object + .size p_map_region_ppn_table, 8 +p_map_region_ppn_table: + .zero 8 + .type p_map_region_ppn_check_table, %object + .size p_map_region_ppn_check_table, 8 +p_map_region_ppn_check_table: + .zero 8 + .type p_map_block_ver_table, %object + .size p_map_block_ver_table, 8 +p_map_block_ver_table: + .zero 8 + .type p_l2p_ram_map, %object + .size p_l2p_ram_map, 8 +p_l2p_ram_map: + .zero 8 + .type p_l2p_map_buf, %object + .size p_l2p_map_buf, 8 +p_l2p_map_buf: + .zero 8 + .type p_data_block_list_table, %object + .size p_data_block_list_table, 8 +p_data_block_list_table: + .zero 8 + .type c_ftl_nand_bbm_buf_size, %object + .size c_ftl_nand_bbm_buf_size, 2 +c_ftl_nand_bbm_buf_size: + .zero 2 + .zero 6 + .type gBbtInfo, %object + .size gBbtInfo, 96 +gBbtInfo: + .zero 96 + .type g_totle_vendor_block, %object + .size g_totle_vendor_block, 2 +g_totle_vendor_block: + .zero 2 + .zero 2 + .type g_MaxLpn, %object + .size g_MaxLpn, 4 +g_MaxLpn: + .zero 4 + .type g_flash_read_only_en, %object + .size g_flash_read_only_en, 4 +g_flash_read_only_en: + .zero 4 + .zero 4 + .type req_sys, %object + .size req_sys, 56 +req_sys: + .zero 56 + .type gSysFreeQueue, %object + .size gSysFreeQueue, 2056 +gSysFreeQueue: + .zero 2056 + .type p_data_block_list_head, %object + .size p_data_block_list_head, 8 +p_data_block_list_head: + .zero 8 + .type p_data_block_list_tail, %object + .size p_data_block_list_tail, 8 +p_data_block_list_tail: + .zero 8 + .type g_num_data_superblocks, %object + .size g_num_data_superblocks, 2 +g_num_data_superblocks: + .zero 2 + .zero 6 + .type p_free_data_block_list_head, %object + .size p_free_data_block_list_head, 8 +p_free_data_block_list_head: + .zero 8 + .type g_num_free_superblocks, %object + .size g_num_free_superblocks, 2 +g_num_free_superblocks: + .zero 2 + .zero 6 + .type g_active_superblock, %object + .size g_active_superblock, 48 +g_active_superblock: + .zero 48 + .type g_buffer_superblock, %object + .size g_buffer_superblock, 48 +g_buffer_superblock: + .zero 48 + .type g_gc_temp_superblock, %object + .size g_gc_temp_superblock, 48 +g_gc_temp_superblock: + .zero 48 + .type gL2pMapInfo, %object + .size gL2pMapInfo, 64 +gL2pMapInfo: + .zero 64 + .type g_l2p_last_update_region_id, %object + .size g_l2p_last_update_region_id, 2 +g_l2p_last_update_region_id: + .zero 2 + .zero 6 + .type gVendorBlkInfo, %object + .size gVendorBlkInfo, 64 +gVendorBlkInfo: + .zero 64 + .type FtlUpdateVaildLpnCount, %object + .size FtlUpdateVaildLpnCount, 2 +FtlUpdateVaildLpnCount: + .zero 2 + .zero 2 + .type g_VaildLpn, %object + .size g_VaildLpn, 4 +g_VaildLpn: + .zero 4 + .type gSysInfo, %object + .size gSysInfo, 12 +gSysInfo: + .zero 12 + .zero 4 + .type g_sys_save_data, %object + .size g_sys_save_data, 48 +g_sys_save_data: + .zero 48 + .type g_totle_map_block, %object + .size g_totle_map_block, 2 +g_totle_map_block: + .zero 2 + .zero 2 + .type g_inkDie_check_enable, %object + .size g_inkDie_check_enable, 4 +g_inkDie_check_enable: + .zero 4 + .type g_MaxLbn, %object + .size g_MaxLbn, 4 +g_MaxLbn: + .zero 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: + .zero 2 + .zero 2 + .type g_gc_superblock, %object + .size g_gc_superblock, 48 +g_gc_superblock: + .zero 48 + .type g_sys_ext_data, %object + .size g_sys_ext_data, 512 +g_sys_ext_data: + .zero 512 + .type g_totle_write_sector, %object + .size g_totle_write_sector, 4 +g_totle_write_sector: + .zero 4 + .type g_totle_read_sector, %object + .size g_totle_read_sector, 4 +g_totle_read_sector: + .zero 4 + .type g_ect_tbl_power_up_flush, %object + .size g_ect_tbl_power_up_flush, 2 +g_ect_tbl_power_up_flush: + .zero 2 + .zero 2 + .type g_totle_avg_erase_count, %object + .size g_totle_avg_erase_count, 4 +g_totle_avg_erase_count: + .zero 4 + .type g_gc_num_req, %object + .size g_gc_num_req, 4 +g_gc_num_req: + .zero 4 + .zero 4 + .type g_req_cache, %object + .size g_req_cache, 8 +g_req_cache: + .zero 8 + .type g_tmp_data_superblock_id, %object + .size g_tmp_data_superblock_id, 2 +g_tmp_data_superblock_id: + .zero 2 + .zero 2 + .type g_totle_swl_count, %object + .size g_totle_swl_count, 4 +g_totle_swl_count: + .zero 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: + .zero 4 + .type g_recovery_page_min_ver, %object + .size g_recovery_page_min_ver, 4 +g_recovery_page_min_ver: + .zero 4 + .type g_gc_blk_num, %object + .size g_gc_blk_num, 2 +g_gc_blk_num: + .zero 2 + .type g_gc_page_offset, %object + .size g_gc_page_offset, 2 +g_gc_page_offset: + .zero 2 + .zero 4 + .type g_gc_bad_block_temp_tbl, %object + .size g_gc_bad_block_temp_tbl, 34 +g_gc_bad_block_temp_tbl: + .zero 34 + .type g_power_lost_ecc_error_blk, %object + .size g_power_lost_ecc_error_blk, 2 +g_power_lost_ecc_error_blk: + .zero 2 + .type g_power_lost_recovery_flag, %object + .size g_power_lost_recovery_flag, 2 +g_power_lost_recovery_flag: + .zero 2 + .zero 2 + .type g_recovery_page_num, %object + .size g_recovery_page_num, 4 +g_recovery_page_num: + .zero 4 + .zero 4 + .type g_recovery_ppa_tbl, %object + .size g_recovery_ppa_tbl, 128 +g_recovery_ppa_tbl: + .zero 128 + .type gc_ink_free_return_value, %object + .size gc_ink_free_return_value, 2 +gc_ink_free_return_value: + .zero 2 + .type g_gc_cur_blk_valid_pages, %object + .size g_gc_cur_blk_valid_pages, 2 +g_gc_cur_blk_valid_pages: + .zero 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: + .zero 2 + .zero 2 + .type gp_last_act_superblock, %object + .size gp_last_act_superblock, 8 +gp_last_act_superblock: + .zero 8 + .type gc_discard_updated, %object + .size gc_discard_updated, 4 +gc_discard_updated: + .zero 4 + .type g_ftl_nand_free_count, %object + .size g_ftl_nand_free_count, 4 +g_ftl_nand_free_count: + .zero 4 + .type last_cache_match_count, %object + .size last_cache_match_count, 4 +last_cache_match_count: + .zero 4 + .type g_LowFormat, %object + .size g_LowFormat, 4 +g_LowFormat: + .zero 4 + .type g_gc_refresh_block_temp_tbl, %object + .size g_gc_refresh_block_temp_tbl, 34 +g_gc_refresh_block_temp_tbl: + .zero 34 + .zero 2 + .type gToggleModeClkDiv, %object + .size gToggleModeClkDiv, 4 +gToggleModeClkDiv: + .zero 4 + .type gpNandc1, %object + .size gpNandc1, 8 +gpNandc1: + .zero 8 + .type gNandFlashResEndPageAddr, %object + .size gNandFlashResEndPageAddr, 4 +gNandFlashResEndPageAddr: + .zero 4 + .type gNandFlashInfoBlockEcc, %object + .size gNandFlashInfoBlockEcc, 1 +gNandFlashInfoBlockEcc: + .zero 1 + .type gFlashOnfiModeEn, %object + .size gFlashOnfiModeEn, 1 +gFlashOnfiModeEn: + .zero 1 + .type gFlashSdrModeEn, %object + .size gFlashSdrModeEn, 1 +gFlashSdrModeEn: + .zero 1 diff --git a/drivers/rk_nand/rk_zftl_arm64.S b/drivers/rk_nand/rk_zftl_arm64.S new file mode 100644 index 000000000000..8e7ae81c2178 --- /dev/null +++ b/drivers/rk_nand/rk_zftl_arm64.S @@ -0,0 +1,26137 @@ +/* + * Copyright (c) 2016-2017, Fuzhou Rockchip Electronics Co., Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * date: 2018-02-27 + * function: rk ftl v5 for rockchip soc base on arm v8 to support 3D/2D + * TLC and MLC. + */ + .cpu generic+fp+simd + .file "rk_zftl_arm_v8.S" +#APP + .irp num,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17\ + ,18,19,20,21,22,23,24,25,26,27,28,29,30 + .equ .L__reg_num_x\num, \num + .endr + .equ .L__reg_num_xzr, 31 + + .macro mrs_s, rt, sreg + .inst 0xd5200000|(\sreg)|(.L__reg_num_\rt) + .endm + + .macro msr_s, sreg, rt + .inst 0xd5000000|(\sreg)|(.L__reg_num_\rt) + .endm + +#NO_APP + .text + .align 2 + .type flash_mem_cmp8, %function +flash_mem_cmp8: + mov x3, 0 +.L2: + cmp w3, w2 + mov w4, w3 + bcs .L7 + ldrb w5, [x0,x3] + add x3, x3, 1 + add x6, x1, x3 + ldrb w6, [x6,-1] + cmp w6, w5 + beq .L2 + add w0, w4, 1 + b .L3 +.L7: + mov w0, 0 +.L3: + ret + .size flash_mem_cmp8, .-flash_mem_cmp8 + .align 2 + .global zftl_nandc_get_irq_status + .type zftl_nandc_get_irq_status, %function +zftl_nandc_get_irq_status: + adrp x1, .LANCHOR0 + ldrb w1, [x1,#:lo12:.LANCHOR0] + cmp w1, 9 + bne .L9 + ldr w0, [x0,296] + b .L10 +.L9: + ldr w0, [x0,372] +.L10: + ret + .size zftl_nandc_get_irq_status, .-zftl_nandc_get_irq_status + .align 2 + .global zftl_get_density + .type zftl_get_density, %function +zftl_get_density: + cbnz w0, .L12 + adrp x0, .LANCHOR0+4 + ldr w0, [x0,#:lo12:.LANCHOR0+4] + b .L13 +.L12: + cmp w0, 4 + mov w0, 8192 + csel w0, w0, wzr, cc +.L13: + ret + .size zftl_get_density, .-zftl_get_density + .align 2 + .global zftl_flash_suspend + .type zftl_flash_suspend, %function +zftl_flash_suspend: + adrp x1, .LANCHOR0 + add x0, x1, :lo12:.LANCHOR0 + ldrb w1, [x1,#:lo12:.LANCHOR0] + cmp w1, 9 + ldr x1, [x0,8] + ldr w2, [x1] + str w2, [x0,16] + ldr w2, [x1,4] + str w2, [x0,20] + bne .L16 + ldr w2, [x1,16] + str w2, [x0,24] + ldr w2, [x1,32] + str w2, [x0,28] + ldr w2, [x1,80] + str w2, [x0,32] + ldr w2, [x1,84] + str w2, [x0,36] + ldr w2, [x1,520] + str w2, [x0,40] + ldr w1, [x1,8] + b .L18 +.L16: + ldr w2, [x1,8] + str w2, [x0,24] + ldr w2, [x1,12] + str w2, [x0,28] + ldr w2, [x1,304] + str w2, [x0,32] + ldr w2, [x1,308] + str w2, [x0,36] + ldr w2, [x1,336] + ldr w1, [x1,344] + str w2, [x0,40] +.L18: + str w1, [x0,44] + ret + .size zftl_flash_suspend, .-zftl_flash_suspend + .align 2 + .type nandc_irq_disable, %function +nandc_irq_disable: + adrp x2, .LANCHOR0 + ldrb w2, [x2,#:lo12:.LANCHOR0] + cmp w2, 9 + mov x2, 1 + bne .L20 + ldr w3, [x0,292] + lsl x1, x2, x1 + orr w2, w3, w1 + str w2, [x0,292] + ldr w2, [x0,288] + bic w1, w2, w1 + str w1, [x0,288] + b .L19 +.L20: + ldr w3, [x0,368] + lsl x1, x2, x1 + orr w2, w3, w1 + str w2, [x0,368] + ldr w2, [x0,364] + bic w1, w2, w1 + str w1, [x0,364] +.L19: + ret + .size nandc_irq_disable, .-nandc_irq_disable + .align 2 + .global nand_flash_print_info + .type nand_flash_print_info, %function +nand_flash_print_info: + stp x29, x30, [sp, -32]! + adrp x0, .LC0 + adrp x1, .LANCHOR1 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x1, x1, :lo12:.LANCHOR1 + add x19, x19, :lo12:.LANCHOR0 + add x0, x0, :lo12:.LC0 + bl printk + ldr x6, [x19,48] + adrp x0, .LC1 + add x0, x0, :lo12:.LC1 + ldrb w3, [x6,3] + ldrb w4, [x6,4] + ldrb w5, [x6,5] + ldrb w2, [x6,2] + ldrb w1, [x6,1] + ldrb w6, [x6,6] + bl printk + ldr x1, [x19,48] + adrp x0, .LC2 + add x0, x0, :lo12:.LC2 + ldrb w1, [x1,8] + bl printk + ldr x1, [x19,48] + adrp x0, .LC3 + add x0, x0, :lo12:.LC3 + ldrb w1, [x1,9] + bl printk + ldr x1, [x19,48] + adrp x0, .LC4 + add x0, x0, :lo12:.LC4 + ldrh w1, [x1,10] + bl printk + ldr x1, [x19,48] + adrp x0, .LC5 + add x0, x0, :lo12:.LC5 + ldrb w1, [x1,12] + bl printk + ldr x1, [x19,48] + adrp x0, .LC6 + add x0, x0, :lo12:.LC6 + ldrb w1, [x1,13] + bl printk + ldr x1, [x19,48] + adrp x0, .LC7 + add x0, x0, :lo12:.LC7 + ldrh w1, [x1,14] + bl printk + ldr x1, [x19,48] + adrp x0, .LC8 + add x0, x0, :lo12:.LC8 + ldrb w1, [x1,23] + bl printk + ldr x1, [x19,48] + adrp x0, .LC9 + add x0, x0, :lo12:.LC9 + ldrb w1, [x1,18] + bl printk + ldr x1, [x19,48] + adrp x0, .LC10 + add x0, x0, :lo12:.LC10 + ldrb w1, [x1,19] + bl printk + ldr x1, [x19,48] + adrp x0, .LC11 + add x0, x0, :lo12:.LC11 + ldrb w1, [x1,20] + bl printk + ldrb w1, [x19,56] + adrp x0, .LC12 + add x0, x0, :lo12:.LC12 + bl printk + ldr x1, [x19,48] + adrp x0, .LC13 + add x0, x0, :lo12:.LC13 + ldrb w1, [x1,21] + bl printk + ldr x1, [x19,48] + adrp x0, .LC14 + add x0, x0, :lo12:.LC14 + ldrb w1, [x1,22] + bl printk + ldrb w1, [x19,57] + adrp x0, .LC15 + add x0, x0, :lo12:.LC15 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC16 + add x0, x0, :lo12:.LC16 + and w1, w1, 1 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC17 + add x0, x0, :lo12:.LC17 + ubfx x1, x1, 1, 1 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC18 + add x0, x0, :lo12:.LC18 + ubfx x1, x1, 2, 1 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC19 + add x0, x0, :lo12:.LC19 + ubfx x1, x1, 3, 1 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC20 + add x0, x0, :lo12:.LC20 + ubfx x1, x1, 4, 1 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC21 + add x0, x0, :lo12:.LC21 + ubfx x1, x1, 5, 1 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC22 + add x0, x0, :lo12:.LC22 + ubfx x1, x1, 6, 1 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC23 + add x0, x0, :lo12:.LC23 + ubfx x1, x1, 7, 1 + bl printk + ldr x0, [x19,48] + ldrb w1, [x0,17] + adrp x0, .LC24 + add x0, x0, :lo12:.LC24 + and w1, w1, 1 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC25 + add x0, x0, :lo12:.LC25 + ubfx x1, x1, 9, 1 + bl printk + ldr x0, [x19,48] + ldrh w1, [x0,16] + adrp x0, .LC26 + add x0, x0, :lo12:.LC26 + ubfx x1, x1, 10, 1 + bl printk + ldrb w1, [x19,58] + adrp x0, .LC27 + add x0, x0, :lo12:.LC27 + bl printk + ldrb w1, [x19,74] + adrp x0, .LC28 + ldrb w2, [x19,75] + add x0, x0, :lo12:.LC28 + bl printk + ldrb w2, [x19,73] + adrp x0, .LC29 + ldrb w1, [x19,72] + add x0, x0, :lo12:.LC29 + bl printk + ldrb w1, [x19,96] + adrp x0, .LC30 + add x0, x0, :lo12:.LC30 + bl printk + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size nand_flash_print_info, .-nand_flash_print_info + .align 2 + .global nandc_init + .type nandc_init, %function +nandc_init: + stp x29, x30, [sp, -64]! + adrp x1, .LANCHOR1 + add x29, sp, 0 + stp x21, x22, [sp,32] + add x1, x1, :lo12:.LANCHOR1 + mov x21, x0 + adrp x0, .LC31 + add x1, x1, 24 + add x0, x0, :lo12:.LC31 + mov x2, x21 + stp x19, x20, [sp,16] + str wzr, [x29,56] + adrp x19, .LANCHOR0 + bl printk + add x0, x19, :lo12:.LANCHOR0 + mov w1, 6 + strb w1, [x19,#:lo12:.LANCHOR0] + ldr w1, [x21,352] + str x21, [x0,8] + mov w0, 12336 + movk w0, 0x5638, lsl 16 + cmp w1, w0 + bne .L24 + mov w0, 8 + strb w0, [x19,#:lo12:.LANCHOR0] +.L24: + ldr w1, [x21,128] + mov w0, 12336 + movk w0, 0x5639, lsl 16 + cmp w1, w0 + bne .L25 + mov w0, 9 + strb w0, [x19,#:lo12:.LANCHOR0] +.L25: + ldrb w0, [x19,#:lo12:.LANCHOR0] + add x20, x19, :lo12:.LANCHOR0 + adrp x22, .LC32 + cmp w0, 9 + bne .L26 + ldr w1, [x29,56] + mov w0, 1 + strb w0, [x20,97] + orr w1, w1, 256 + str w1, [x29,56] + mov w1, 4225 + ldr w0, [x29,56] + str w0, [x21] + ldr x0, [x20,8] + str wzr, [x0,520] + str w1, [x0,4] + mov w0, 8321 + ldr x5, [x20,8] + str w0, [x5,8] + mov w0, 4099 + movk w0, 0x10, lsl 16 + str w0, [x5,80] + mov w0, 38 + str w0, [x5,84] + mov w0, 39 + str w0, [x5,84] + ldr w1, [x5] + ldr w2, [x5,8] + ldr w3, [x5,80] + ldr w4, [x5,84] + ldr w5, [x5,88] + b .L28 +.L26: + ldr w1, [x29,56] + strb wzr, [x20,97] + orr w1, w1, 256 + str w1, [x29,56] + mov w1, 4225 + ldr w0, [x29,56] + str w0, [x21] + ldr x0, [x20,8] + str wzr, [x0,336] + str w1, [x0,4] + mov w0, 8321 + ldr x1, [x20,8] + str w0, [x1,344] + mov w0, 4099 + movk w0, 0x10, lsl 16 + str w0, [x1,304] + mov w0, 38 + str w0, [x1,308] + mov w0, 39 + str w0, [x1,308] + mov w0, 2048 + bl ftl_malloc + str x0, [x20,104] + ldr x5, [x20,8] + ldr w1, [x5] + ldr w2, [x5,344] + ldr w3, [x5,304] + ldr w4, [x5,308] + ldr w5, [x5,312] +.L28: + add x0, x22, :lo12:.LC32 + bl printk + add x0, x19, :lo12:.LANCHOR0 + mov w1, 1 + strh wzr, [x0,146] + strb w1, [x0,144] + strb wzr, [x0,148] + adrp x0, .LC33 + ldrb w1, [x19,#:lo12:.LANCHOR0] + add x0, x0, :lo12:.LC33 + bl printk + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size nandc_init, .-nandc_init + .align 2 + .global timer_delay_ns + .type timer_delay_ns, %function +timer_delay_ns: + sub sp, sp, #16 + lsr w0, w0, 4 + str w0, [sp,12] +.L30: + ldr w0, [sp,12] + sub w1, w0, #1 + str w1, [sp,12] + cbnz w0, .L30 + add sp, sp, 16 + ret + .size timer_delay_ns, .-timer_delay_ns + .align 2 + .global flash_read_status + .type flash_read_status, %function +flash_read_status: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + mov x19, x0 + mov w0, 112 + str w0, [x19,8] + mov w0, 120 + bl timer_delay_ns + ldr w0, [x19] + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + uxtb w0, w0 + ret + .size flash_read_status, .-flash_read_status + .align 2 + .global toshiba_set_rr_para + .type toshiba_set_rr_para, %function +toshiba_set_rr_para: + uxtb w1, w1 + mov w3, 5 + add w2, w1, 1 + stp x29, x30, [sp, -96]! + smull x3, w2, w3 + adrp x2, .LANCHOR1 + add x29, sp, 0 + add x2, x2, :lo12:.LANCHOR1 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + add x23, x2, x1, sxtw + add x24, x2, 40 + add x21, x2, 88 + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + str x27, [sp,80] + mov x22, x0 + add x24, x24, x3 + add x21, x21, x3 + mov x20, 0 + adrp x26, .LANCHOR0 + mov w27, 85 + mov x19, x2 +.L34: + add x25, x26, :lo12:.LANCHOR0 + ldrb w0, [x25,150] + cmp w0, w20 + bls .L40 + add x0, x19, 40 + str w27, [x22,8] + ldrsb w0, [x20,x0] + str w0, [x22,4] + mov w0, 200 + bl timer_delay_ns + ldrb w0, [x25,149] + cmp w0, 34 + bne .L35 + ldrsb w0, [x24,x20] + b .L39 +.L35: + cmp w0, 35 + bne .L37 + ldrsb w0, [x21,x20] + b .L39 +.L37: + ldrsb w0, [x23,184] +.L39: + str w0, [x22] + add x20, x20, 1 + b .L34 +.L40: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldr x27, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size toshiba_set_rr_para, .-toshiba_set_rr_para + .align 2 + .type hynix_set_rr_para, %function +hynix_set_rr_para: + stp x29, x30, [sp, -64]! + adrp x3, .LANCHOR0 + uxtb w0, w0 + add x3, x3, :lo12:.LANCHOR0 + add x29, sp, 0 + uxtb w1, w1 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + str x23, [sp,48] + mov x20, 160 + mov x21, 0 + ldr x4, [x3,152] + ldr x19, [x3,8] + add x23, x4, 128 + ldrb w22, [x4,113] + mul w2, w1, w22 + sxtw x1, w0 + ubfiz x0, x0, 8, 8 + add x19, x19, x0 + mov w0, 54 + mul x20, x1, x20 + add x1, x20, x2, sxtw + add x20, x4, x1 + add x20, x20, 144 + str w0, [x19,2056] +.L42: + cmp w22, w21, uxtb + bls .L44 + ldrb w0, [x23,x21] + str w0, [x19,2052] + mov w0, 120 + bl timer_delay_ns + ldrsb w0, [x20,x21] + add x21, x21, 1 + str w0, [x19,2048] + b .L42 +.L44: + mov w0, 22 + str w0, [x19,2056] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size hynix_set_rr_para, .-hynix_set_rr_para + .align 2 + .global hynix_reconfig_rr_para + .type hynix_reconfig_rr_para, %function +hynix_reconfig_rr_para: + stp x29, x30, [sp, -32]! + uxtb w0, w0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x19, x19, :lo12:.LANCHOR0 + ldrb w1, [x19,149] + sub w1, w1, #1 + uxtb w1, w1 + cmp w1, 6 + bhi .L45 + ldr x1, [x19,152] + sxtw x20, w0 + add x1, x1, x20 + ldrb w1, [x1,120] + cbz w1, .L45 + mov w1, 0 + bl hynix_set_rr_para + ldr x0, [x19,152] + add x20, x0, x20 + strb wzr, [x20,120] +.L45: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size hynix_reconfig_rr_para, .-hynix_reconfig_rr_para + .align 2 + .global nandc_set_ddr_para + .type nandc_set_ddr_para, %function +nandc_set_ddr_para: + adrp x1, .LANCHOR0 + uxtb w0, w0 + add x2, x1, :lo12:.LANCHOR0 + ldrb w1, [x1,#:lo12:.LANCHOR0] + ldr x2, [x2,8] + cmp w1, 9 + lsl w1, w0, 16 + lsl w0, w0, 8 + orr w0, w1, w0 + orr w0, w0, 3 + bne .L51 + str w0, [x2,80] + b .L50 +.L51: + str w0, [x2,304] +.L50: + ret + .size nandc_set_ddr_para, .-nandc_set_ddr_para + .align 2 + .global nandc_get_ddr_para + .type nandc_get_ddr_para, %function +nandc_get_ddr_para: + adrp x1, .LANCHOR0 + add x0, x1, :lo12:.LANCHOR0 + ldrb w1, [x1,#:lo12:.LANCHOR0] + ldr x0, [x0,8] + cmp w1, 9 + bne .L54 + ldr w0, [x0,80] + b .L56 +.L54: + ldr w0, [x0,304] +.L56: + ubfx x0, x0, 8, 8 + ret + .size nandc_get_ddr_para, .-nandc_get_ddr_para + .align 2 + .global nandc_set_if_mode + .type nandc_set_if_mode, %function +nandc_set_if_mode: + adrp x3, .LANCHOR0 + uxtb w0, w0 + add x1, x3, :lo12:.LANCHOR0 + tst w0, 6 + ldr x2, [x1,8] + ldr w1, [x2] + beq .L58 + orr w1, w1, 24576 + and w0, w0, 4 + and w1, w1, -32769 + cmp w0, wzr + orr w1, w1, 196608 + ldrb w0, [x3,#:lo12:.LANCHOR0] + orr w4, w1, 32768 + csel w1, w4, w1, ne + cmp w0, 9 + mov w0, 8321 + bne .L60 + str w0, [x2,8] + mov w0, 4099 + movk w0, 0x10, lsl 16 + str w0, [x2,80] + mov w0, 38 + str w0, [x2,84] + mov w0, 39 + str w0, [x2,84] + b .L61 +.L60: + str w0, [x2,344] + mov w0, 4099 + movk w0, 0x10, lsl 16 + str w0, [x2,304] + mov w0, 38 + str w0, [x2,308] + mov w0, 39 + str w0, [x2,308] + b .L61 +.L58: + and w1, w1, -8193 +.L61: + str w1, [x2] + ret + .size nandc_set_if_mode, .-nandc_set_if_mode + .align 2 + .global nandc_cs + .type nandc_cs, %function +nandc_cs: + adrp x1, .LANCHOR0+8 + mov w2, 1 + lsl w0, w2, w0 + ldr x3, [x1,#:lo12:.LANCHOR0+8] + ldr w1, [x3] + bfi w1, w0, 0, 8 + str w1, [x3] + ret + .size nandc_cs, .-nandc_cs + .align 2 + .global nandc_de_cs + .type nandc_de_cs, %function +nandc_de_cs: + adrp x0, .LANCHOR0+8 + ldr x1, [x0,#:lo12:.LANCHOR0+8] + ldr w0, [x1] + and w0, w0, -256 + and w0, w0, -131073 + str w0, [x1] + ret + .size nandc_de_cs, .-nandc_de_cs + .align 2 + .global flash_wait_device_ready_raw + .type flash_wait_device_ready_raw, %function +flash_wait_device_ready_raw: + stp x29, x30, [sp, -64]! + adrp x3, .LANCHOR0 + uxtb w0, w0 + add x29, sp, 0 + add x3, x3, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x19, x20, [sp,16] + mov w21, w2 + ldrb w2, [x3,57] + cmp w2, w0 + bhi .L67 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 192 + mov w2, 607 + bl printk +.L68: + b .L68 +.L67: + add x0, x3, x0, sxtw + ldrb w22, [x0,160] + ldr x20, [x3,8] + mov w0, w22 + str x1, [x29,56] + bl nandc_cs + ubfiz x3, x22, 8, 8 + ldr x1, [x29,56] + add x20, x20, x3 + mov w0, 120 + and w2, w1, 255 + str w0, [x20,2056] + str w2, [x20,2052] + lsr w2, w1, 8 + str w2, [x20,2052] + lsr w1, w1, 16 + str w1, [x20,2052] +.L71: + bl timer_delay_ns + ldr w19, [x20,2048] + and w19, w19, 255 + and w0, w19, w21 + cmp w0, w21 + beq .L72 +.L70: + mov w0, 20 + b .L71 +.L72: + cmp w19, 255 + beq .L70 + mov w0, w22 + bl nandc_de_cs + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size flash_wait_device_ready_raw, .-flash_wait_device_ready_raw + .align 2 + .global flash_wait_device_ready + .type flash_wait_device_ready, %function +flash_wait_device_ready: + stp x29, x30, [sp, -16]! + ubfx x3, x0, 24, 2 + mov w2, w1 + add x29, sp, 0 + and w1, w0, 2097151 + ubfx x6, x0, 21, 3 + cbnz w3, .L74 + adrp x4, .LANCHOR0 + add x3, x4, :lo12:.LANCHOR0 + ldrb w0, [x3,58] + cbz w0, .L75 + ldrb w0, [x3,168] + cbz w0, .L74 +.L75: + add x4, x4, :lo12:.LANCHOR0 + ldrh w5, [x4,170] + ldrb w0, [x4,168] + udiv w3, w1, w5 + mul w5, w3, w5 + sub w3, w1, w5 + add w1, w5, w3, lsl 1 + cbnz w0, .L74 + add x4, x4, 172 + ldrh w3, [x4,w3,uxtw 1] + add w1, w3, w5 +.L74: + mov w0, w6 + bl flash_wait_device_ready_raw + ldp x29, x30, [sp], 16 + ret + .size flash_wait_device_ready, .-flash_wait_device_ready + .align 2 + .global nandc_wait_flash_ready + .type nandc_wait_flash_ready, %function +nandc_wait_flash_ready: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + mov w19, 34464 + adrp x20, .LANCHOR0 + movk w19, 0x1, lsl 16 +.L85: + mov w0, 100 + bl timer_delay_ns + add x0, x20, :lo12:.LANCHOR0 + ldr x0, [x0,8] + ldr w0, [x0] + str w0, [x29,40] + ldr w0, [x29,40] + tbnz x0, 9, .L86 + subs w19, w19, #1 + bne .L85 + mov w0, -1 + b .L84 +.L86: + mov w0, 0 +.L84: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size nandc_wait_flash_ready, .-nandc_wait_flash_ready + .align 2 + .global sandisk_set_rr_para + .type sandisk_set_rr_para, %function +sandisk_set_rr_para: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + mov x20, x0 + mov w0, 239 + uxtb w19, w1 + add w19, w19, 1 + str w0, [x20,8] + mov w0, 17 + str w0, [x20,4] + mov w0, 200 + bl timer_delay_ns + mov w1, 5 + adrp x2, .LANCHOR1 + add x2, x2, :lo12:.LANCHOR1 + adrp x5, .LANCHOR0 + smull x1, w19, w1 + add x0, x2, 40 + add x2, x2, 88 + add x0, x0, x1 + add x1, x2, x1 + mov x2, 0 +.L89: + add x3, x5, :lo12:.LANCHOR0 + ldrb w4, [x3,150] + cmp w4, w2 + bls .L94 + ldrb w3, [x3,149] + cmp w3, 67 + bne .L90 + ldrsb w3, [x0,x2] + b .L93 +.L90: + ldrsb w3, [x1,x2] +.L93: + str w3, [x20] + add x2, x2, 1 + b .L89 +.L94: + bl nandc_wait_flash_ready + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size sandisk_set_rr_para, .-sandisk_set_rr_para + .align 2 + .global toshiba_3d_set_tlc_rr_para + .type toshiba_3d_set_tlc_rr_para, %function +toshiba_3d_set_tlc_rr_para: + stp x29, x30, [sp, -48]! + uxtb x2, w1 + mov x1, 7 + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + mov x19, x0 + mov w21, 213 + str w21, [x0,8] + str wzr, [x0,4] + mov w0, -119 + str w0, [x19,4] + adrp x0, .LANCHOR1 + madd x1, x2, x1, x1 + add x0, x0, :lo12:.LANCHOR1 + add x0, x0, 224 + add x20, x0, x1 + ldrsb w0, [x0,x1] + str w0, [x19] + ldrsb w0, [x20,1] + str w0, [x19] + ldrsb w0, [x20,2] + str w0, [x19] + ldrsb w0, [x20,3] + str w0, [x19] + bl nandc_wait_flash_ready + str w21, [x19,8] + str wzr, [x19,4] + mov w0, -118 + str w0, [x19,4] + ldrsb w0, [x20,4] + str w0, [x19] + ldrsb w0, [x20,5] + str w0, [x19] + ldrsb w0, [x20,6] + str w0, [x19] + str wzr, [x19] + bl nandc_wait_flash_ready + ldr x21, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size toshiba_3d_set_tlc_rr_para, .-toshiba_3d_set_tlc_rr_para + .align 2 + .global toshiba_3d_set_slc_rr_para + .type toshiba_3d_set_slc_rr_para, %function +toshiba_3d_set_slc_rr_para: + stp x29, x30, [sp, -16]! + mov w2, 213 + add x29, sp, 0 + str w2, [x0,8] + mov w2, -117 + str wzr, [x0,4] + str w2, [x0,4] + adrp x2, .LANCHOR1 + add x2, x2, :lo12:.LANCHOR1 + add x1, x2, x1, uxtb + ldrsb w1, [x1,625] + str w1, [x0] + str wzr, [x0] + str wzr, [x0] + str wzr, [x0] + bl nandc_wait_flash_ready + ldp x29, x30, [sp], 16 + ret + .size toshiba_3d_set_slc_rr_para, .-toshiba_3d_set_slc_rr_para + .align 2 + .global toshiba_tlc_set_rr_para + .type toshiba_tlc_set_rr_para, %function +toshiba_tlc_set_rr_para: + stp x29, x30, [sp, -48]! + uxtw x1, w1 + add x29, sp, 0 + stp x19, x20, [sp,16] + mov x19, x0 + str x21, [sp,32] + mov w21, 239 + adrp x0, .LANCHOR2 + str w21, [x19,8] + cbz w2, .L98 + mov w2, 18 + str w2, [x19,4] + mov x2, 7 + add x0, x0, :lo12:.LANCHOR2 + mul x1, x1, x2 + add x20, x0, x1 + ldrb w0, [x0,x1] + str w0, [x19] + ldrb w0, [x20,1] + str w0, [x19] + ldrb w0, [x20,2] + str w0, [x19] + ldrb w0, [x20,3] + str w0, [x19] + bl nandc_wait_flash_ready + str w21, [x19,8] + mov w0, 19 + str w0, [x19,4] + ldrb w0, [x20,4] + str w0, [x19] + ldrb w0, [x20,5] + str w0, [x19] + ldrb w0, [x20,6] + str w0, [x19] + str wzr, [x19] + b .L99 +.L98: + add x0, x0, :lo12:.LANCHOR2 + mov w3, 20 + add x0, x0, 336 + str w3, [x19,4] + ldrb w0, [x0,x1] + str w0, [x19] + str w2, [x19] + str w2, [x19] + str w2, [x19] +.L99: + bl nandc_wait_flash_ready + ldr x21, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size toshiba_tlc_set_rr_para, .-toshiba_tlc_set_rr_para + .align 2 + .global zftl_flash_enter_slc_mode + .type zftl_flash_enter_slc_mode, %function +zftl_flash_enter_slc_mode: + adrp x1, .LANCHOR0 + uxtb w0, w0 + add x1, x1, :lo12:.LANCHOR0 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrb w2, [x1,58] + cbz w2, .L100 + cmp w2, 1 + ldr x3, [x1,8] + bne .L102 + adrp x1, .LANCHOR2+397 + ldrb w2, [x1,#:lo12:.LANCHOR2+397] + cbz w2, .L100 + sxtw x1, w0 + add x1, x1, 8 + add x0, x3, x1, lsl 8 + str w2, [x0,8] + b .L100 +.L102: + cmp w2, 2 + bne .L100 + ldrb w2, [x1,684] + cbz w2, .L100 + ubfiz x0, x0, 8, 8 + strb wzr, [x1,684] + add x0, x3, x0 + mov w1, 239 + str w1, [x0,2056] + mov w1, 145 + str w1, [x0,2052] + mov w1, 1 + str wzr, [x0,2048] + str w1, [x0,2048] + str wzr, [x0,2048] + str wzr, [x0,2048] + bl nandc_wait_flash_ready +.L100: + ldp x29, x30, [sp], 16 + ret + .size zftl_flash_enter_slc_mode, .-zftl_flash_enter_slc_mode + .align 2 + .global zftl_flash_exit_slc_mode + .type zftl_flash_exit_slc_mode, %function +zftl_flash_exit_slc_mode: + adrp x1, .LANCHOR0 + uxtb w0, w0 + add x1, x1, :lo12:.LANCHOR0 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrb w2, [x1,58] + cbz w2, .L112 + cmp w2, 1 + ldr x4, [x1,8] + bne .L114 + adrp x1, .LANCHOR2+398 + ldrb w2, [x1,#:lo12:.LANCHOR2+398] + cbz w2, .L112 + sxtw x1, w0 + add x1, x1, 8 + add x0, x4, x1, lsl 8 + str w2, [x0,8] + b .L112 +.L114: + cmp w2, 2 + bne .L112 + ldrb w3, [x1,684] + cbnz w3, .L112 + adrp x2, .LANCHOR2+380 + ubfiz x0, x0, 8, 8 + add x0, x4, x0 + mov w5, 4 + ldrb w2, [x2,#:lo12:.LANCHOR2+380] + cmp w2, 2 + csel w2, w2, w5, eq + strb w2, [x1,684] + mov w1, 239 + str w1, [x0,2056] + mov w1, 145 + str w1, [x0,2052] + str w2, [x0,2048] + mov w1, 1 + str w1, [x0,2048] + str w3, [x0,2048] + str w3, [x0,2048] + bl nandc_wait_flash_ready +.L112: + ldp x29, x30, [sp], 16 + ret + .size zftl_flash_exit_slc_mode, .-zftl_flash_exit_slc_mode + .align 2 + .global flash_set_interface_mode + .type flash_set_interface_mode, %function +flash_set_interface_mode: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + adrp x21, .LANCHOR0 + adrp x22, .LC36 + adrp x23, .LC35 + str x25, [sp,64] + stp x19, x20, [sp,16] + mov w25, w0 + mov x20, 0 + add x21, x21, :lo12:.LANCHOR0 + add x22, x22, :lo12:.LC36 + add x23, x23, :lo12:.LC35 +.L132: + add x0, x21, x20, lsl 3 + ldr x19, [x21,8] + ldrb w1, [x0,688] + cmp w1, 44 + cset w24, eq + cmp w1, 69 + cset w2, eq + cmp w1, 152 + cset w0, eq + adrp x1, .LANCHOR0 + orr w0, w2, w0 + cbnz w0, .L133 + cbz w24, .L125 +.L133: + add x1, x1, :lo12:.LANCHOR0 + cmp w25, 1 + ldrb w1, [x1,720] + bne .L127 + tbz x1, 0, .L125 + mov x0, x23 + bl printk + add x1, x19, x20, lsl 8 + mov w0, 239 + str w0, [x1,2056] + cbz w24, .L128 + str w25, [x1,2052] + mov w0, 5 + b .L144 +.L128: + mov w0, 128 + str w0, [x1,2052] + str w25, [x1,2048] + b .L131 +.L127: + tbz x1, 2, .L125 + mov x0, x22 + bl printk + add x1, x19, x20, lsl 8 + mov w0, 239 + str w0, [x1,2056] + cbz w24, .L130 + mov w0, 1 + str w0, [x1,2052] + mov w0, 35 +.L144: + str w0, [x1,2048] + b .L131 +.L130: + mov w0, 128 + str w0, [x1,2052] + str w24, [x1,2048] +.L131: + str wzr, [x1,2048] + str wzr, [x1,2048] + str wzr, [x1,2048] +.L125: + add x20, x20, 1 + cmp x20, 4 + bne .L132 + bl nandc_wait_flash_ready + ldr x25, [sp,64] + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size flash_set_interface_mode, .-flash_set_interface_mode + .align 2 + .global flash_reset + .type flash_reset, %function +flash_reset: + adrp x1, .LANCHOR0+8 + uxtb x0, w0 + stp x29, x30, [sp, -16]! + add x0, x0, 8 + add x29, sp, 0 + ldr x1, [x1,#:lo12:.LANCHOR0+8] + add x0, x1, x0, lsl 8 + mov w1, 255 + str w1, [x0,8] + bl nandc_wait_flash_ready + ldp x29, x30, [sp], 16 + ret + .size flash_reset, .-flash_reset + .align 2 + .global flash_read_id + .type flash_read_id, %function +flash_read_id: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + str x21, [sp,32] + uxtb w21, w0 + adrp x0, .LANCHOR0+8 + stp x19, x20, [sp,16] + mov x19, x1 + ldr x20, [x0,#:lo12:.LANCHOR0+8] + mov w0, w21 + bl flash_reset + mov w0, w21 + bl nandc_cs + ubfiz x2, x21, 8, 8 + mov w0, 144 + add x20, x20, x2 + str w0, [x20,2056] + mov w0, 200 + str wzr, [x20,2052] + bl timer_delay_ns + ldr w0, [x20,2048] + strb w0, [x19] + ldr w0, [x20,2048] + strb w0, [x19,1] + ldr w0, [x20,2048] + strb w0, [x19,2] + ldr w0, [x20,2048] + strb w0, [x19,3] + ldr w0, [x20,2048] + strb w0, [x19,4] + ldr w0, [x20,2048] + strb w0, [x19,5] + ldr w0, [x20,2048] + strb w0, [x19,6] + ldr w0, [x20,2048] + strb w0, [x19,7] + mov w0, w21 + bl nandc_de_cs + ldrb w2, [x19] + sub w0, w2, #1 + uxtb w0, w0 + cmp w0, 253 + bhi .L146 + adrp x0, .LC37 + ldrb w3, [x19,1] + ldrb w4, [x19,2] + add x0, x0, :lo12:.LC37 + ldrb w5, [x19,3] + add w1, w21, 1 + ldrb w6, [x19,4] + ldrb w7, [x19,5] + bl printk +.L146: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size flash_read_id, .-flash_read_id + .align 2 + .global flash_read_spare + .type flash_read_spare, %function +flash_read_spare: + stp x29, x30, [sp, -48]! + adrp x4, .LANCHOR0+8 + ubfiz x0, x0, 8, 8 + add x29, sp, 0 + str x19, [sp,16] + adrp x3, .LANCHOR2+377 + ldr x19, [x4,#:lo12:.LANCHOR0+8] + str x2, [x29,40] + add x19, x19, x0 + ldrb w3, [x3,#:lo12:.LANCHOR2+377] + and w0, w1, 255 + lsl w3, w3, 9 + str wzr, [x19,2056] + str w3, [x19,2052] + lsr w3, w3, 8 + str w3, [x19,2052] + str w0, [x19,2052] + lsr w0, w1, 8 + str w0, [x19,2052] + lsr w1, w1, 16 + str w1, [x19,2052] + mov w0, 48 + str w0, [x19,2056] + bl nandc_wait_flash_ready + ldr x2, [x29,40] + ldr w0, [x19,2048] + strb w0, [x2] + ldr x19, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size flash_read_spare, .-flash_read_spare + .align 2 + .global sandisk_prog_test_bad_block + .type sandisk_prog_test_bad_block, %function +sandisk_prog_test_bad_block: + stp x29, x30, [sp, -64]! + adrp x2, .LANCHOR0+8 + uxtb w0, w0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR2 + ldr x19, [x2,#:lo12:.LANCHOR0+8] + add x2, x20, :lo12:.LANCHOR2 + str x21, [sp,32] + ldrb w3, [x2,397] + sxtw x2, w0 + add x2, x2, 8 + add x2, x19, x2, lsl 8 + cbnz w3, .L160 + mov w3, 162 +.L160: + ubfiz x0, x0, 8, 8 + str w3, [x2,8] + add x19, x19, x0 + mov w0, 128 + str x1, [x29,56] + str w0, [x19,2056] + and w0, w1, 255 + str wzr, [x19,2052] + str wzr, [x19,2052] + str w0, [x19,2052] + lsr w0, w1, 8 + str w0, [x19,2052] + lsr w0, w1, 16 + str w0, [x19,2052] + mov w0, 16 + str w0, [x19,2056] + bl nandc_wait_flash_ready + mov w0, 112 + str w0, [x19,2056] + mov w0, 80 + bl timer_delay_ns + ldr w2, [x19,2048] + mov w0, 5 + ldr x1, [x29,56] + ands w21, w2, w0 + beq .L152 + adrp x0, .LC38 + add x0, x0, :lo12:.LC38 + bl printk +.L152: + add x20, x20, :lo12:.LANCHOR2 + ldrb w0, [x20,398] + cbz w0, .L153 + str w0, [x19,2056] +.L153: + mov w0, w21 + ldr x21, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 64 + ret + .size sandisk_prog_test_bad_block, .-sandisk_prog_test_bad_block + .align 2 + .global nandc_bch_sel + .type nandc_bch_sel, %function +nandc_bch_sel: + adrp x2, .LANCHOR0 + mov w3, 1 + add x1, x2, :lo12:.LANCHOR0 + ldrb w2, [x2,#:lo12:.LANCHOR0] + strb w0, [x1,148] + cmp w2, 9 + ldr x2, [x1,8] + bne .L162 + str w3, [x2,16] + cmp w0, 70 + mov w1, 0 + beq .L163 + cmp w0, 60 + mov w1, 3 + beq .L163 + cmp w0, 40 + mov w1, 2 + csel w1, w1, w3, eq +.L163: + lsl w1, w1, 25 + orr w1, w1, 1 + str w1, [x2,32] + b .L161 +.L162: + str w3, [x2,8] + cmp w0, 16 + mov w1, 4096 + bne .L165 +.L168: + and w1, w1, -17 + b .L166 +.L165: + cmp w0, 24 + bne .L167 + orr w1, w1, 16 + b .L166 +.L167: + cmp w0, 40 + orr w1, w1, 262144 + orr w1, w1, 16 + beq .L168 +.L166: + orr w1, w1, 1 + str w1, [x2,12] +.L161: + ret + .size nandc_bch_sel, .-nandc_bch_sel + .align 2 + .global zftl_flash_resume + .type zftl_flash_resume, %function +zftl_flash_resume: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + str x21, [sp,32] + add x0, x20, :lo12:.LANCHOR0 + ldrb w1, [x20,#:lo12:.LANCHOR0] + ldr w2, [x0,16] + cmp w1, 9 + ldr x1, [x0,8] + str w2, [x1] + ldr x1, [x0,8] + ldr w2, [x0,20] + str w2, [x1,4] + ldr x1, [x0,8] + ldr w2, [x0,24] + bne .L176 + str w2, [x1,16] + ldr w2, [x0,28] + str w2, [x1,32] + ldr w2, [x0,32] + str w2, [x1,80] + ldr w2, [x0,36] + str w2, [x1,84] + ldr w2, [x0,40] + str w2, [x1,520] + ldr w0, [x0,44] + str w0, [x1,8] + b .L177 +.L176: + str w2, [x1,8] + ldr w2, [x0,28] + str w2, [x1,12] + ldr w2, [x0,32] + str w2, [x1,304] + ldr w2, [x0,36] + str w2, [x1,308] + ldr w2, [x0,40] + str w2, [x1,336] + ldr w0, [x0,44] + str w0, [x1,344] +.L177: + mov x19, 0 + add x21, x20, :lo12:.LANCHOR0 +.L179: + add x0, x21, x19, lsl 3 + ldrb w0, [x0,688] + sub w0, w0, #1 + uxtb w0, w0 + cmp w0, 253 + bhi .L178 + mov w0, w19 + bl flash_reset +.L178: + add x19, x19, 1 + cmp x19, 4 + bne .L179 + add x20, x20, :lo12:.LANCHOR0 + ldrb w0, [x20,96] + cbz w0, .L180 + mov w0, 1 + bl nandc_set_if_mode + mov w0, w19 + bl flash_set_interface_mode + mov w0, w19 + bl nandc_set_if_mode + ldr w0, [x20,32] + lsr w0, w0, 8 + bl nandc_set_ddr_para +.L180: + adrp x0, .LANCHOR2+388 + ldrb w0, [x0,#:lo12:.LANCHOR2+388] + bl nandc_bch_sel + ldr x21, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size zftl_flash_resume, .-zftl_flash_resume + .align 2 + .global rk_nandc_flash_ready + .type rk_nandc_flash_ready, %function +rk_nandc_flash_ready: + stp x29, x30, [sp, -16]! + mov w1, 1 + add x29, sp, 0 + bl nandc_irq_disable + ldp x29, x30, [sp], 16 + ret + .size rk_nandc_flash_ready, .-rk_nandc_flash_ready + .align 2 + .global nandc_iqr_wait_flash_ready + .type nandc_iqr_wait_flash_ready, %function +nandc_iqr_wait_flash_ready: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x20, x19, :lo12:.LANCHOR0 + ldr x0, [x20,8] + bl rk_nandc_rb_irq_flag_init + ldrb w1, [x19,#:lo12:.LANCHOR0] + ldr x0, [x20,8] + cmp w1, 9 + bne .L187 + ldr w1, [x0,292] + orr w1, w1, 2 + str w1, [x0,292] + ldr w1, [x0,288] + orr w1, w1, 2 + str w1, [x0,288] + b .L188 +.L187: + ldr w1, [x0,368] + orr w1, w1, 2 + str w1, [x0,368] + ldr w1, [x0,364] + orr w1, w1, 2 + str w1, [x0,364] +.L188: + ldr w1, [x0] + tbnz x1, 9, .L189 + bl wait_for_nand_flash_ready + b .L186 +.L189: + mov w1, 1 + bl nandc_irq_disable +.L186: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size nandc_iqr_wait_flash_ready, .-nandc_iqr_wait_flash_ready + .align 2 + .global flash_erase_duplane_block + .type flash_erase_duplane_block, %function +flash_erase_duplane_block: + stp x29, x30, [sp, -80]! + uxtb w0, w0 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + str x25, [sp,64] + uxtb w25, w1 + add x1, x21, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + mov w24, w2 + mov w23, w3 + ldrb w4, [x1,57] + cmp w4, w0 + bhi .L192 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 640 + mov w2, 518 + bl printk +.L193: + b .L193 +.L192: + add x0, x1, x0, sxtw + ldrb w22, [x0,160] + adrp x0, .LANCHOR2+400 + ldr x19, [x1,8] + mov x20, x22 + add x22, x22, 8 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + add x22, x19, x22, lsl 8 + tbz x0, 4, .L194 + adrp x0, .LC39 + mov w1, w20 + add x0, x0, :lo12:.LC39 + bl printk +.L194: + bl nandc_wait_flash_ready + mov w0, w20 + bl nandc_cs + mov w0, w20 + cbnz w25, .L195 + bl zftl_flash_enter_slc_mode + b .L196 +.L195: + bl zftl_flash_exit_slc_mode +.L196: + ubfiz x4, x20, 8, 8 + mov w0, 96 + add x19, x19, x4 + add x21, x21, :lo12:.LANCHOR0 + str w0, [x19,2056] + and w0, w24, 255 + str w0, [x19,2052] + lsr w0, w24, 8 + str w0, [x19,2052] + lsr w0, w24, 16 + str w0, [x19,2052] + ldrb w0, [x21,721] + mov w21, 0 + cbnz w0, .L197 + mov w0, 208 + str w0, [x19,2056] + mov w21, 5 + bl nandc_wait_flash_ready + mov x0, x22 + bl flash_read_status + and w21, w0, w21 +.L197: + mov w0, 96 + str w0, [x19,2056] + and w0, w23, 255 + str w0, [x19,2052] + lsr w0, w23, 8 + str w0, [x19,2052] + lsr w23, w23, 16 + str w23, [x19,2052] + mov w0, 208 + str w0, [x19,2056] + bl nandc_iqr_wait_flash_ready + bl nandc_wait_flash_ready + mov x0, x22 + bl flash_read_status + mov w19, w0 + cbnz w25, .L198 + mov w0, w20 + bl zftl_flash_exit_slc_mode +.L198: + mov w0, w20 + bl nandc_de_cs + mov w1, 5 + and w1, w19, w1 + orr w21, w1, w21 + cbz w21, .L199 + adrp x0, .LC40 + mov w1, w24 + add x0, x0, :lo12:.LC40 + mov w2, w19 + bl printk +.L199: + mov w0, w21 + ldr x25, [sp,64] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size flash_erase_duplane_block, .-flash_erase_duplane_block + .align 2 + .global flash_erase_block_en + .type flash_erase_block_en, %function +flash_erase_block_en: + stp x29, x30, [sp, -80]! + uxtb w0, w0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + str x25, [sp,64] + stp x23, x24, [sp,48] + uxtb w24, w1 + add x1, x20, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + mov w23, w2 + and w22, w2, 2097151 + ldrb w3, [x1,57] + cmp w3, w0 + bhi .L208 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 672 + mov w2, 563 + bl printk +.L209: + b .L209 +.L208: + add x0, x1, x0, sxtw + ldrb w21, [x0,160] + adrp x0, .LANCHOR2+400 + ldr x25, [x1,8] + mov x19, x21 + add x21, x21, 8 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + add x21, x25, x21, lsl 8 + tbz x0, 4, .L210 + adrp x0, .LC41 + mov w1, w19 + add x0, x0, :lo12:.LC41 + bl printk +.L210: + bl nandc_wait_flash_ready + mov w0, w19 + bl nandc_cs + mov w0, w19 + cbnz w24, .L211 + bl zftl_flash_enter_slc_mode + b .L212 +.L211: + bl zftl_flash_exit_slc_mode +.L212: + ubfiz x3, x19, 8, 8 + mov w0, 96 + add x3, x25, x3 + str w0, [x3,2056] + and w0, w23, 255 + str w0, [x3,2052] + lsr w0, w22, 8 + str w0, [x3,2052] + lsr w22, w22, 16 + str w22, [x3,2052] + mov w0, 208 + str w0, [x3,2056] + bl nandc_iqr_wait_flash_ready + bl nandc_wait_flash_ready + mov x0, x21 + bl flash_read_status + mov w21, w0 + cbnz w24, .L213 + mov w0, w19 + bl zftl_flash_exit_slc_mode +.L213: + mov w0, w19 + bl nandc_de_cs + mov w3, 5 + ands w19, w21, w3 + beq .L214 + add x20, x20, :lo12:.LANCHOR0 + adrp x0, .LC42 + add x0, x0, :lo12:.LC42 + mov w2, w19 + ldrh w1, [x20,170] + udiv w1, w23, w1 + bl printk +.L214: + mov w0, w19 + ldr x25, [sp,64] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size flash_erase_block_en, .-flash_erase_block_en + .align 2 + .global flash_erase_block + .type flash_erase_block, %function +flash_erase_block: + stp x29, x30, [sp, -16]! + mov w2, w1 + mov w1, 0 + add x29, sp, 0 + bl flash_erase_block_en + ldp x29, x30, [sp], 16 + ret + .size flash_erase_block, .-flash_erase_block + .align 2 + .global flash_erase_all + .type flash_erase_all, %function +flash_erase_all: + stp x29, x30, [sp, -64]! + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + mov w19, 0 + ldrb w1, [x0,381] + ldrh w20, [x0,382] + adrp x0, .LANCHOR0 + add x23, x0, :lo12:.LANCHOR0 + mov x21, x0 + mul w20, w1, w20 + uxth w20, w20 +.L223: + ldrb w0, [x23,57] + cmp w0, w19 + bls .L227 + add x0, x23, x19, sxtw + ldrb w24, [x0,160] + mov w22, 0 +.L224: + cmp w20, w22, uxth + bls .L228 + add x0, x21, :lo12:.LANCHOR0 + ldrh w1, [x0,170] + mov w0, w24 + mul w1, w22, w1 + add w22, w22, 1 + bl flash_erase_block + b .L224 +.L228: + add w19, w19, 1 + uxth w19, w19 + b .L223 +.L227: + adrp x0, .LC43 + mov w1, 0 + add x0, x0, :lo12:.LC43 + bl printk + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size flash_erase_all, .-flash_erase_all + .align 2 + .global rk_nandc_flash_xfer_completed + .type rk_nandc_flash_xfer_completed, %function +rk_nandc_flash_xfer_completed: + stp x29, x30, [sp, -16]! + mov w1, 0 + add x29, sp, 0 + bl nandc_irq_disable + ldp x29, x30, [sp], 16 + ret + .size rk_nandc_flash_xfer_completed, .-rk_nandc_flash_xfer_completed + .align 2 + .global nandc_xfer_start + .type nandc_xfer_start, %function +nandc_xfer_start: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x22, .LANCHOR0 + str x25, [sp,64] + add x21, x22, :lo12:.LANCHOR0 + str x2, [x29,80] + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + uxtb w24, w0 + uxtb w23, w1 + ldr x0, [x21,8] + add w20, w23, 1 + str x3, [x29,88] + bl rk_nandc_xfer_irq_flag_init + ldrb w0, [x22,#:lo12:.LANCHOR0] + ldr x4, [x21,8] + cmp w0, 9 + ldr x3, [x29,88] + ldr x2, [x29,80] + bne .L231 + ldr w0, [x4,292] + ubfiz w19, w24, 1, 1 + orr w19, w19, 8 + asr w20, w20, 1 + orr w0, w0, 1 + str w0, [x4,292] + ldr w0, [x4,288] + orr w0, w0, 1 + str w0, [x4,288] + mov w0, 1 + bfi w19, w0, 5, 2 + ldrb w0, [x21,97] + orr w19, w19, 536870912 + orr w19, w19, 1024 + and w19, w19, -17 + bfi w19, w20, 22, 6 + cbz w0, .L233 + ldrb w1, [x21,144] + orr w0, w19, 512 + cmp w1, wzr + csel w19, w0, w19, ne + b .L233 +.L231: + ldr w0, [x4,368] + ubfiz w19, w24, 1, 1 + orr w19, w19, 8 + asr w20, w20, 1 + orr w0, w0, 1 + str w0, [x4,368] + ldr w0, [x4,364] + orr w0, w0, 1 + str w0, [x4,364] + mov w0, 16 + ldr w25, [x4,12] + bfi w25, w0, 8, 8 + mov w0, 1 + bfi w19, w0, 5, 2 + and w25, w25, -9 + orr w19, w19, 536870912 + and w25, w25, -225 + orr w19, w19, 1024 + and w19, w19, -17 + bfi w19, w20, 22, 6 + cbz w24, .L245 + ldrb w0, [x21,148] + ubfx x23, x23, 1, 7 + mov w1, 64 + mov w4, 128 + cmp w0, 25 + add x23, x3, x23, lsl 2 + csel w4, w1, w4, cc + mov w1, 0 + b .L238 +.L233: + add x22, x22, :lo12:.LANCHOR0 + ubfx x21, x19, 22, 6 + mov x0, x2 + lsl w1, w21, 10 + str x2, [x22,112] + mov w2, w24 + str x3, [x22,120] + bl rknand_dma_map_single + str w0, [x22,128] + ldr x0, [x22,120] + lsl w1, w21, 2 + mov w2, w24 + bl rknand_dma_map_single + str w0, [x22,132] + ldr x3, [x22,8] + mov w1, 1 + str w1, [x22,136] + cmp w24, wzr + ldr w1, [x22,128] + str w1, [x3,52] + str w0, [x3,56] + mov w0, 16 + ldr w1, [x3,48] + bfi w1, w0, 9, 5 + mov w0, 2 + orr w1, w1, 448 + bfi w1, w0, 3, 3 + cset w0, eq + orr w1, w1, 4 + bfi w1, w0, 1, 1 + ldrh w0, [x22,146] + orr w1, w1, 1 + bfi w1, w0, 16, 11 + str w1, [x3,48] + str w19, [x3,16] + orr w19, w19, 4 + str w19, [x3,16] + b .L230 +.L238: + cmp x3, x23 + add w0, w1, w4 + beq .L240 + ldrh w5, [x3,2] + and x1, x1, 4294967292 + ldr x6, [x21,104] + ldrh w7, [x3],4 + orr w5, w7, w5, lsl 16 + str w5, [x6,x1] + mov w1, w0 + b .L238 +.L245: + ldr x1, [x21,104] + str w0, [x1] +.L240: + add x22, x22, :lo12:.LANCHOR0 + and w20, w20, 63 + lsl w1, w20, 10 + ldr x0, [x22,104] + str x2, [x22,112] + str x0, [x22,120] + mov x0, x2 + mov w2, w24 + bl rknand_dma_map_single + str w0, [x22,128] + ldr x0, [x22,120] + lsl w1, w20, 7 + mov w2, w24 + bl rknand_dma_map_single + str w0, [x22,132] + ldr x3, [x22,8] + mov w0, 1 + str w0, [x22,136] + cmp w24, wzr + ldr w0, [x22,128] + mov w1, 8660 + str w0, [x3,20] + ldr w0, [x22,132] + str w0, [x3,24] + cset w0, eq + bfi w1, w0, 1, 1 + orr w1, w1, 1 + str w1, [x3,16] + str w25, [x3,12] + str w19, [x3,8] + orr w19, w19, 4 + str w19, [x3,8] +.L230: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldr x25, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size nandc_xfer_start, .-nandc_xfer_start + .align 2 + .global dump_bch_info + .type dump_bch_info, %function +dump_bch_info: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + adrp x20, .LANCHOR2 + adrp x21, .LC44 + mov w19, 0 + add x20, x20, :lo12:.LANCHOR2 + adrp x22, .LANCHOR0 + add x21, x21, :lo12:.LC44 +.L247: + ldrb w0, [x20,377] + cmp w19, w0, lsr 2 + bcs .L249 + add x0, x22, :lo12:.LANCHOR0 + ldr x1, [x0,8] + uxtw x0, w19 + add x0, x0, 84 + ldr w0, [x1,x0,lsl 2] + mov w1, w19 + str w0, [x29,56] + mov x0, x21 + add w19, w19, 1 + ldr w2, [x29,56] + ldr w3, [x29,56] + ubfx x2, x2, 3, 7 + ubfx x3, x3, 19, 7 + bl printk + b .L247 +.L249: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size dump_bch_info, .-dump_bch_info + .align 2 + .global nandc_set_seed + .type nandc_set_seed, %function +nandc_set_seed: + adrp x1, .LANCHOR1 + and w0, w0, 127 + add x1, x1, :lo12:.LANCHOR1 + adrp x2, .LANCHOR0 + add x1, x1, 696 + ldrh w0, [x1,w0,uxtw 1] + add x1, x2, :lo12:.LANCHOR0 + ldrb w2, [x2,#:lo12:.LANCHOR0] + orr w3, w0, -1073741824 + ldrb w4, [x1,144] + ldr x1, [x1,8] + cmp w4, wzr + csel w0, w3, w0, ne + cmp w2, 9 + bne .L252 + str w0, [x1,520] + b .L250 +.L252: + str w0, [x1,336] +.L250: + ret + .size nandc_set_seed, .-nandc_set_seed + .align 2 + .global flash_start_page_read + .type flash_start_page_read, %function +flash_start_page_read: + stp x29, x30, [sp, -80]! + ubfx x2, x1, 21, 3 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x22, .LANCHOR0 + str x25, [sp,64] + stp x23, x24, [sp,48] + add x23, x22, :lo12:.LANCHOR0 + uxtb w24, w0 + stp x19, x20, [sp,16] + ubfx x21, x1, 24, 2 + and w19, w1, 2097151 + ldrb w0, [x23,57] + cmp w0, w2 + bhi .L257 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 952 + mov w2, 741 + bl printk +.L258: + b .L258 +.L257: + add x2, x23, x2, sxtw + ldrb w20, [x2,160] + ldr x25, [x23,8] + mov w0, w20 + bl nandc_cs + cbnz w21, .L259 + ldrb w0, [x23,58] + cbz w0, .L260 + ldrb w0, [x23,168] + cbz w0, .L261 +.L260: + add x2, x22, :lo12:.LANCHOR0 + ldrh w1, [x2,170] + udiv w0, w19, w1 + mul w1, w0, w1 + ldrb w0, [x2,168] + sub w19, w19, w1 + cbz w0, .L262 + add w19, w1, w19, lsl 1 + b .L261 +.L262: + add x2, x2, 172 + ldrh w19, [x2,w19,uxtw 1] + add w19, w19, w1 + b .L263 +.L261: + mov w0, w20 + bl zftl_flash_enter_slc_mode + b .L263 +.L259: + ldr x0, [x23,48] + ldrb w0, [x0,12] + cmp w0, 3 + bne .L264 + sxtw x1, w20 + add x1, x1, 8 + add x1, x25, x1, lsl 8 + str w21, [x1,8] + b .L263 +.L264: + mov w0, w20 + bl zftl_flash_exit_slc_mode +.L263: + ubfiz x20, x20, 8, 8 + and w0, w19, 255 + add x2, x25, x20 + str wzr, [x2,2056] + str wzr, [x2,2052] + str wzr, [x2,2052] + str w0, [x2,2052] + lsr w0, w19, 8 + str w0, [x2,2052] + lsr w0, w19, 16 + str w0, [x2,2052] + str w24, [x2,2056] + cbz w21, .L265 + add x22, x22, :lo12:.LANCHOR0 + ldr x0, [x22,48] + ldrb w0, [x0,12] + cmp w0, 3 + bne .L265 + sub w21, w21, #1 + add w0, w19, w19, lsl 1 + add w0, w21, w0 + b .L276 +.L265: + mov w0, w19 +.L276: + bl nandc_set_seed + mov w0, 0 + bl nandc_de_cs + ldr x25, [sp,64] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size flash_start_page_read, .-flash_start_page_read + .align 2 + .global zftl_flash_de_init + .type zftl_flash_de_init, %function +zftl_flash_de_init: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + bl nandc_wait_flash_ready + adrp x19, .LANCHOR0 + mov w0, 0 + add x20, x19, :lo12:.LANCHOR0 + bl hynix_reconfig_rr_para + ldrb w0, [x20,96] + cbz w0, .L278 + ldrb w0, [x20,720] + tbz x0, 0, .L278 + mov w0, 1 + bl flash_set_interface_mode + mov w0, 1 + bl nandc_set_if_mode + strb wzr, [x20,96] +.L278: + add x19, x19, :lo12:.LANCHOR0 + ldrb w0, [x19,144] + cbz w0, .L279 + mov w0, 0 + strb wzr, [x19,144] + bl nandc_set_seed + mov w0, 1 + strb w0, [x19,144] +.L279: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size zftl_flash_de_init, .-zftl_flash_de_init + .align 2 + .global nandc_randomizer_enable + .type nandc_randomizer_enable, %function +nandc_randomizer_enable: + adrp x1, .LANCHOR0+144 + strb w0, [x1,#:lo12:.LANCHOR0+144] + ret + .size nandc_randomizer_enable, .-nandc_randomizer_enable + .align 2 + .global nandc_get_chip_if + .type nandc_get_chip_if, %function +nandc_get_chip_if: + adrp x1, .LANCHOR0+8 + uxtb x0, w0 + add x0, x0, 8 + ldr x1, [x1,#:lo12:.LANCHOR0+8] + add x0, x1, x0, lsl 8 + ret + .size nandc_get_chip_if, .-nandc_get_chip_if + .align 2 + .global buf_init + .type buf_init, %function +buf_init: + stp x29, x30, [sp, -48]! + adrp x0, .LANCHOR0 + add x29, sp, 0 + stp x19, x20, [sp,16] + add x19, x0, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + add x19, x19, 728 + mov w21, 0 + mov x22, x0 +.L292: + add x20, x22, :lo12:.LANCHOR0 + uxtb w0, w21 + add w1, w0, 1 + strb w0, [x19,1] + strb w1, [x19] + add w21, w21, 1 + ldrb w0, [x20,2776] + add x19, x19, 64 + strb wzr, [x19,-62] + str xzr, [x19,-48] + lsl w0, w0, 9 + bl ftl_malloc + str x0, [x19,-56] + ldrb w0, [x20,2776] + lsl w0, w0, 1 + bl ftl_malloc + str x0, [x19,-40] + cmp w21, 32 + bne .L292 + strb w21, [x20,2778] + mov w0, -1 + strb wzr, [x20,2777] + strb w0, [x20,2712] + ldp x21, x22, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size buf_init, .-buf_init + .align 2 + .global buf_reinit + .type buf_reinit, %function +buf_reinit: + adrp x0, .LANCHOR0 + mov w2, 0 + add x1, x0, :lo12:.LANCHOR0 + add x1, x1, 728 +.L295: + uxtb w3, w2 + add w2, w2, 1 + add w4, w3, 1 + strb w3, [x1,1] + strb w4, [x1] + cmp w2, 32 + strb wzr, [x1,2] + add x1, x1, 64 + str xzr, [x1,-48] + bne .L295 + add x0, x0, :lo12:.LANCHOR0 + mov w1, -1 + strb wzr, [x0,2777] + strb w1, [x0,2712] + strb w2, [x0,2778] + ret + .size buf_reinit, .-buf_reinit + .align 2 + .global buf_add_tail + .type buf_add_tail, %function +buf_add_tail: + stp x29, x30, [sp, -16]! + mov w2, -1 + add x29, sp, 0 + strb w2, [x1] + ldrb w3, [x0] + cmp w3, 255 + bne .L305 + ldrb w1, [x1,1] + cmp w1, 255 + bne .L299 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 976 + mov w2, 74 + bl printk +.L300: + b .L300 +.L299: + strb w1, [x0] + b .L297 +.L305: + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + add x0, x0, 728 +.L306: + mov w2, w3 + sbfiz x3, x3, 6, 32 + ldrb w3, [x0,x3] + cmp w3, 255 + bne .L306 + ldrb w1, [x1,1] + cmp w1, 255 + bne .L302 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 976 + mov w2, 81 + bl printk +.L303: + b .L303 +.L302: + sbfiz x2, x2, 6, 32 + strb w1, [x0,x2] +.L297: + ldp x29, x30, [sp], 16 + ret + .size buf_add_tail, .-buf_add_tail + .align 2 + .global buf_free + .type buf_free, %function +buf_free: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR0 + ldrb w1, [x0,2] + and w1, w1, 8 + uxtb w1, w1 + strb w1, [x0,2] + cbz w1, .L308 + mov x1, x0 + add x0, x19, :lo12:.LANCHOR0 + add x0, x0, 2777 + bl buf_add_tail + b .L309 +.L308: + add x1, x19, :lo12:.LANCHOR0 + ldrb w2, [x1,2777] + strb w2, [x0] + ldrb w0, [x0,1] + strb w0, [x1,2777] +.L309: + add x19, x19, :lo12:.LANCHOR0 + ldrb w0, [x19,2778] + add w0, w0, 1 + strb w0, [x19,2778] + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size buf_free, .-buf_free + .align 2 + .global buf_alloc + .type buf_alloc, %function +buf_alloc: + uxtb w5, w0 + adrp x0, .LANCHOR0 + add x2, x0, :lo12:.LANCHOR0 + mov x1, x0 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrb w3, [x2,2778] + cbnz w3, .L311 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 992 + mov w2, 121 + bl printk +.L312: + b .L312 +.L311: + add x4, x2, 728 + ldrb w2, [x2,2777] + add x4, x4, x2, lsl 6 + cbnz w5, .L316 + cmp w3, 1 + mov x0, 0 + beq .L313 +.L316: + add x0, x1, :lo12:.LANCHOR0 + lsl x1, x2, 6 + add x5, x0, 728 + sub w3, w3, #1 + add x2, x5, x1 + strb w3, [x0,2778] + ldrb w6, [x5,x1] + strb w6, [x0,2777] + mov w0, 1 + strb w0, [x2,2] + mov w0, -1 + strb w0, [x5,x1] + mov w0, -1 + strh wzr, [x2,50] + str w0, [x2,36] + mov x0, x4 + str xzr, [x2,16] +.L313: + ldp x29, x30, [sp], 16 + ret + .size buf_alloc, .-buf_alloc + .align 2 + .global buf_remove_buf + .type buf_remove_buf, %function +buf_remove_buf: + ldrb w4, [x1,1] + ldrb w2, [x0] + cmp w4, w2 + bne .L323 + ldrb w1, [x1] + strb w1, [x0] + b .L327 +.L323: + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + add x0, x0, 728 +.L325: + cmp w2, 255 + beq .L328 + mov w3, w2 + sbfiz x2, x2, 6, 32 + ldrb w2, [x0,x2] + cmp w2, w4 + bne .L325 + sbfiz x3, x3, 6, 32 + ldrb w2, [x1] + strb w2, [x0,x3] + mov w0, -1 + strb w0, [x1] +.L327: + mov w0, 1 + b .L322 +.L328: + mov w0, 0 +.L322: + ret + .size buf_remove_buf, .-buf_remove_buf + .align 2 + .global buf_remove_free + .type buf_remove_free, %function +buf_remove_free: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + mov x20, x0 + add x19, x19, :lo12:.LANCHOR0 + ldrb w0, [x19,2778] + cbnz w0, .L330 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1008 + mov w2, 170 + bl printk +.L331: + b .L331 +.L330: + add x0, x19, 2777 + mov x1, x20 + bl buf_remove_buf + cmp w0, 1 + bne .L329 + ldrb w0, [x19,2778] + sub w0, w0, #1 + strb w0, [x19,2778] + ldrb w0, [x20,2] + orr w0, w0, 1 + strb w0, [x20,2] +.L329: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size buf_remove_free, .-buf_remove_free + .align 2 + .global flash_check_bad_block + .type flash_check_bad_block, %function +flash_check_bad_block: + adrp x2, .LANCHOR2 + uxtb w0, w0 + add x2, x2, :lo12:.LANCHOR2 + add x2, x2, 368 + ldrb w3, [x2,13] + ldrh w2, [x2,14] + mul w2, w3, w2 + ubfx x3, x1, 5, 27 + uxth w2, w2 + add w2, w2, 31 + asr w2, w2, 5 + lsl w2, w2, 2 + mul w2, w0, w2 + adrp x0, .LANCHOR0+152 + sxtw x2, w2 + ldr x0, [x0,#:lo12:.LANCHOR0+152] + add x2, x2, 912 + add x2, x0, x2 + ldr w0, [x2,x3,lsl 2] + lsr w0, w0, w1 + and w0, w0, 1 + ret + .size flash_check_bad_block, .-flash_check_bad_block + .align 2 + .global flash_mask_bad_block + .type flash_mask_bad_block, %function +flash_mask_bad_block: + stp x29, x30, [sp, -48]! + adrp x3, .LANCHOR2 + add x29, sp, 0 + add x3, x3, :lo12:.LANCHOR2 + stp x19, x20, [sp,16] + str x21, [sp,32] + uxtb w19, w0 + mov w21, w1 + mov w1, w19 + ldrb w0, [x3,381] + mov w2, w21 + ldrh w20, [x3,382] + mul w20, w0, w20 + adrp x0, .LC45 + add x0, x0, :lo12:.LC45 + uxth w20, w20 + add w20, w20, 31 + bl printk + asr w20, w20, 5 + adrp x0, .LANCHOR0+152 + lsl w20, w20, 2 + ubfx x3, x21, 5, 27 + lsl x3, x3, 2 + mul w19, w19, w20 + ldr x0, [x0,#:lo12:.LANCHOR0+152] + sxtw x19, w19 + add x19, x19, 912 + add x19, x0, x19 + mov w0, 1 + lsl w1, w0, w21 + ldr w0, [x19,x3] + orr w1, w0, w1 + str w1, [x19,x3] + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size flash_mask_bad_block, .-flash_mask_bad_block + .align 2 + .global ftl_print_info_to_buf + .type ftl_print_info_to_buf, %function +ftl_print_info_to_buf: + stp x29, x30, [sp, -48]! + adrp x1, .LC46 + adrp x2, .LC47 + add x29, sp, 0 + add x1, x1, :lo12:.LC46 + add x2, x2, :lo12:.LC47 + stp x19, x20, [sp,16] + str x21, [sp,32] + mov x20, x0 + bl sprintf + adrp x21, .LANCHOR0 + adrp x7, .LANCHOR2 + adrp x1, .LC48 + add x7, x7, :lo12:.LANCHOR2 + add x21, x21, :lo12:.LANCHOR0 + add x7, x7, 368 + add x19, x20, x0, sxtw + add x1, x1, :lo12:.LC48 + mov x0, x19 + ldrb w5, [x7,4] + ldrb w6, [x7,5] + ldrb w4, [x7,3] + ldrb w3, [x7,2] + ldrb w2, [x7,1] + ldrb w7, [x7,6] + bl sprintf + add x19, x19, x0, sxtw + ldr w2, [x21,4] + adrp x1, .LC49 + mov x0, x19 + add x1, x1, :lo12:.LC49 + lsr w2, w2, 11 + bl sprintf + add x19, x19, x0, sxtw + ldr w2, [x21,2780] + adrp x1, .LC50 + mov x0, x19 + add x1, x1, :lo12:.LC50 + lsr w2, w2, 11 + bl sprintf + add x19, x19, x0, sxtw + adrp x1, .LC51 + mov x0, x19 + add x1, x1, :lo12:.LC51 + add x19, x19, 10 + bl strcpy + ldr w2, [x21,2784] + adrp x1, .LC52 + mov x0, x19 + add x1, x1, :lo12:.LC52 + bl sprintf + add x19, x19, x0, sxtw + ldr w2, [x21,4] + adrp x1, .LC53 + mov x0, x19 + add x1, x1, :lo12:.LC53 + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2792] + adrp x1, .LC54 + mov x0, x19 + add x1, x1, :lo12:.LC54 + ldr w2, [x2,524] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2792] + adrp x1, .LC55 + mov x0, x19 + add x1, x1, :lo12:.LC55 + ldr w2, [x2,528] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC56 + mov x0, x19 + add x1, x1, :lo12:.LC56 + ldrh w2, [x2,114] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC57 + mov x0, x19 + add x1, x1, :lo12:.LC57 + ldrh w2, [x2,118] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC58 + mov x0, x19 + add x1, x1, :lo12:.LC58 + ldrh w2, [x2,116] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC59 + mov x0, x19 + add x1, x1, :lo12:.LC59 + ldrh w2, [x2,122] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC60 + mov x0, x19 + add x1, x1, :lo12:.LC60 + ldrh w2, [x2,124] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC61 + mov x0, x19 + add x1, x1, :lo12:.LC61 + ldrh w2, [x2,120] + bl sprintf + add x19, x19, x0, sxtw + ldr x0, [x21,2800] + adrp x1, .LC62 + add x1, x1, :lo12:.LC62 + ldr w3, [x0,16] + ldr w2, [x0,20] + mov x0, x19 + add w2, w2, w3, lsr 11 + bl sprintf + add x19, x19, x0, sxtw + ldr x0, [x21,2800] + adrp x1, .LC63 + add x1, x1, :lo12:.LC63 + ldr w3, [x0,24] + ldr w2, [x0,28] + mov x0, x19 + add w2, w2, w3, lsr 11 + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC64 + mov x0, x19 + add x1, x1, :lo12:.LC64 + ldr w2, [x2,64] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC65 + mov x0, x19 + add x1, x1, :lo12:.LC65 + ldr w2, [x2,68] + bl sprintf + add x19, x19, x0, sxtw + ldr x0, [x21,2792] + mov w2, 10 + adrp x1, .LC66 + add x1, x1, :lo12:.LC66 + ldr w3, [x0,12] + mov x0, x19 + udiv w2, w3, w2 + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2792] + adrp x1, .LC67 + mov x0, x19 + add x1, x1, :lo12:.LC67 + ldr w2, [x2,556] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2792] + adrp x1, .LC68 + mov x0, x19 + add x1, x1, :lo12:.LC68 + ldr w2, [x2,552] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC69 + mov x0, x19 + add x1, x1, :lo12:.LC69 + ldr w2, [x2,52] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC70 + mov x0, x19 + add x1, x1, :lo12:.LC70 + ldr w2, [x2,60] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC71 + mov x0, x19 + add x1, x1, :lo12:.LC71 + ldr w2, [x2,76] + bl sprintf + add x19, x19, x0, sxtw + ldr x2, [x21,2800] + adrp x1, .LC72 + mov x0, x19 + add x1, x1, :lo12:.LC72 + ldr w2, [x2,8] + bl sprintf + add x19, x19, x0, sxtw + ldr x4, [x21,2792] + adrp x1, .LC73 + mov x0, x19 + add x1, x1, :lo12:.LC73 + ldrh w2, [x4,16] + ldrh w3, [x4,22] + ldrb w4, [x4,25] + bl sprintf + add x19, x19, x0, sxtw + ldr x4, [x21,2792] + adrp x1, .LC74 + mov x0, x19 + add x1, x1, :lo12:.LC74 + ldrh w2, [x4,48] + ldrh w3, [x4,54] + ldrb w4, [x4,57] + bl sprintf + add x19, x19, x0, sxtw + ldr x4, [x21,2792] + adrp x1, .LC75 + mov x0, x19 + add x1, x1, :lo12:.LC75 + ldrh w2, [x4,80] + ldrh w3, [x4,86] + ldrb w4, [x4,89] + bl sprintf + add x19, x19, x0, sxtw + ldr x6, [x21,2800] + adrp x1, .LC76 + mov x0, x19 + add x1, x1, :lo12:.LC76 + ldrh w2, [x6,74] + ldr w3, [x6,84] + ldrh w4, [x6,88] + ldrh w5, [x6,92] + ldrh w6, [x6,96] + bl sprintf + add x19, x19, x0, sxtw + ldr x6, [x21,2800] + adrp x1, .LC77 + mov x0, x19 + add x1, x1, :lo12:.LC77 + ldrh w2, [x6,72] + ldr w3, [x6,80] + ldrh w4, [x6,90] + ldrh w5, [x6,94] + ldrh w6, [x6,98] + bl sprintf + add x0, x19, x0, sxtw + ldr x21, [sp,32] + sub w0, w0, w20 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size ftl_print_info_to_buf, .-ftl_print_info_to_buf + .align 2 + .global zftl_proc_ftl_read + .type zftl_proc_ftl_read, %function +zftl_proc_ftl_read: + stp x29, x30, [sp, -16]! + add x29, sp, 0 + bl ftl_print_info_to_buf + ldp x29, x30, [sp], 16 + ret + .size zftl_proc_ftl_read, .-zftl_proc_ftl_read + .align 2 + .global ftl_gc_write_buf + .type ftl_gc_write_buf, %function +ftl_gc_write_buf: + stp x29, x30, [sp, -32]! + mov x1, x0 + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR0 + add x19, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,2] + orr w0, w0, 2 + strb w0, [x1,2] + add x0, x19, 2808 + bl buf_add_tail + ldrb w0, [x19,2809] + add w0, w0, 1 + uxtb w0, w0 + strb w0, [x19,2809] + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size ftl_gc_write_buf, .-ftl_gc_write_buf + .align 2 + .global ftl_read_buf + .type ftl_read_buf, %function +ftl_read_buf: + stp x29, x30, [sp, -32]! + mov w2, 0 + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR0 + add x3, x19, :lo12:.LANCHOR0 + add x3, x3, 728 + ldr w4, [x3,2056] + cmp w0, w4 + bcc .L348 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1024 + mov w2, 794 + bl printk +.L340: + b .L340 +.L353: + ldrb w4, [x3,2] + tbnz x4, 3, .L351 +.L341: + add w2, w2, 1 + add x3, x3, 64 + cmp w2, 32 + beq .L352 +.L348: + ldr w4, [x3,36] + cmp w4, w0 + bne .L341 + b .L353 +.L351: + add x19, x19, :lo12:.LANCHOR0 + ubfiz x2, x2, 6, 32 + add x19, x19, 728 + orr w0, w4, 4 + add x19, x19, x2 + strb w0, [x19,2] + tbnz x4, 0, .L343 + mov x0, x19 + bl buf_remove_free + b .L343 +.L352: + add x2, x19, :lo12:.LANCHOR0 + mov x19, 0 + ldr w3, [x2,2812] + cmn w3, #1 + bne .L343 + str w0, [x2,2812] + str x1, [x2,2816] +.L343: + mov x0, x19 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size ftl_read_buf, .-ftl_read_buf + .align 2 + .global ftl_read_buf_free + .type ftl_read_buf_free, %function +ftl_read_buf_free: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + mov x19, x0 + adrp x0, .LANCHOR0 + mov x1, x19 + add x0, x0, :lo12:.LANCHOR0 + add x0, x0, 2824 + bl buf_remove_buf + ldrb w0, [x19,2] + tbz x0, 1, .L355 + and w0, w0, -5 + strb w0, [x19,2] + b .L354 +.L355: + mov x0, x19 + bl buf_free +.L354: + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size ftl_read_buf_free, .-ftl_read_buf_free + .align 2 + .global gc_hook + .type gc_hook, %function +gc_hook: + ret + .size gc_hook, .-gc_hook + .align 2 + .global gc_add_sblk + .type gc_add_sblk, %function +gc_add_sblk: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + uxth w20, w0 + add x6, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + uxth w22, w1 + uxth w23, w2 + ldrh w0, [x6,2826] + cmp w0, w20 + bhi .L359 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1040 + mov w2, 243 + bl printk +.L360: + b .L360 +.L359: + ldr x0, [x6,2832] + uxtw x21, w20 + ldrh w24, [x0,x21,lsl 1] + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L361 + ldr x0, [x6,2840] + mov w1, w20 + ldrh w5, [x6,2904] + mov w2, w22 + add x0, x0, x21, lsl 2 + ldrh w6, [x6,3176] + mov w4, w24 + ldrb w3, [x0,2] + adrp x0, .LC78 + add x0, x0, :lo12:.LC78 + ubfx x3, x3, 5, 3 + bl printk +.L361: + add x5, x19, :lo12:.LANCHOR0 + ldr x0, [x5,2840] + add x21, x0, x21, lsl 2 + ldrb w3, [x21,2] + ands w0, w3, 224 + bne .L362 + cbz w24, .L363 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1040 + mov w2, 248 + bl printk +.L364: + b .L364 +.L362: + ldrh w1, [x5,2848] + add x3, x5, 2848 + mov w0, 0 + cmp w1, w20 + beq .L363 + ldr x4, [x5,2792] + ldrh w1, [x4,48] + cmp w1, w20 + beq .L363 + ldrh w1, [x4,16] + cmp w1, w20 + beq .L363 + ldrh w1, [x4,80] + cmp w1, w20 + beq .L363 + ldrh w1, [x3,56] + mov x0, 0 +.L365: + cmp w1, w0 + bls .L384 + add x0, x0, 1 + add x2, x3, x0, lsl 1 + ldrh w2, [x2,56] + cmp w2, w20 + bne .L365 + mov w0, 0 + b .L363 +.L384: + add x3, x4, 392 + cbnz w22, .L368 + sxtw x3, w23 + add x3, x4, x3, lsl 7 + add x3, x3, 136 +.L368: + add x0, x3, 128 + mov w1, 65535 +.L371: + ldrh w2, [x3] + cmp w2, w1 + bne .L369 + strh w20, [x3] + add x19, x19, :lo12:.LANCHOR0 + cbz w22, .L370 + ldr x1, [x19,2792] + ldrh w0, [x1,124] + add w0, w0, 1 + strh w0, [x1,124] + b .L383 +.L370: + ldr x0, [x19,2792] + add x2, x0, x23, uxth 1 + ldrh w0, [x2,120] + add w0, w0, 1 + strh w0, [x2,120] +.L383: + mov w0, 1 + b .L363 +.L369: + add x3, x3, 2 + cmp x3, x0 + bne .L371 + b .L383 +.L363: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size gc_add_sblk, .-gc_add_sblk + .align 2 + .global gc_get_src_ppa_from_index + .type gc_get_src_ppa_from_index, %function +gc_get_src_ppa_from_index: + adrp x1, .LANCHOR0+3184 + ubfiz x0, x0, 2, 16 + ldr x1, [x1,#:lo12:.LANCHOR0+3184] + ldr w0, [x1,x0] + ret + .size gc_get_src_ppa_from_index, .-gc_get_src_ppa_from_index + .align 2 + .global gc_write_completed + .type gc_write_completed, %function +gc_write_completed: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x19, x19, :lo12:.LANCHOR0 + stp x25, x26, [sp,64] + add x25, x19, 728 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + mov x22, x19 + mov x24, x25 +.L387: + ldrb w20, [x19,3192] + cmp w20, 255 + beq .L409 + lsl x1, x20, 6 + add x0, x25, x1 + ldrb w1, [x25,x1] + strb w1, [x19,3192] + ldr w1, [x0,52] + ldrh w23, [x0,48] + cbz w1, .L388 + mov w2, 1 + strh w2, [x19,3166] + ldr w2, [x0,40] + adrp x0, .LC79 + add x0, x0, :lo12:.LC79 + str w2, [x19,3168] + bl printk + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1056 + mov w2, 505 + bl printk +.L389: + b .L389 +.L388: + ldrb w0, [x19,3193] + mov w21, 1 + cmp w0, 3 + bne .L390 + ldr x0, [x19,2792] + ldrb w21, [x0,89] + add w21, w21, w21, lsl 1 + and w21, w21, 1023 +.L390: + adrp x0, .LANCHOR2+400 + uxth x26, w23 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L391 + add x2, x24, x20, lsl 6 + ldr x4, [x22,3200] + adrp x0, .LC80 + mov w1, w23 + add x0, x0, :lo12:.LC80 + mov w3, w23 + ldrb w2, [x2,1] + ldrb w4, [x4,x26] + bl printk +.L391: + ldr x2, [x22,3200] + add x20, x24, x20, lsl 6 + ldrb w1, [x2,x26] + ldrb w0, [x20,1] + cmp w1, w0 + beq .L392 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1056 + mov w2, 512 + bl printk +.L393: + b .L393 +.L392: + ldrb w0, [x20,61] + cmp w0, 3 + beq .L394 + ldrb w0, [x22,3193] + cmp w0, 3 + bne .L394 + ldrb w0, [x22,3208] + cbz w0, .L395 +.L394: + strh w23, [x22,3164] + mov w20, 0 + mov w26, -1 +.L396: + cmp w21, w20, uxth + bls .L387 + add w1, w20, w23 + ldr x2, [x22,3200] + add w20, w20, 1 + ldrb w0, [x2,x1] + strb w26, [x2,x1] + sbfiz x0, x0, 6, 32 + add x0, x24, x0 + strb wzr, [x0,61] + bl buf_free + ldrb w0, [x22,2855] + sub w0, w0, #1 + strb w0, [x22,2855] + b .L396 +.L395: + cmp w21, w0, uxth + bls .L387 + add w1, w0, w23 + add w0, w0, 1 + ldrb w1, [x2,x1] + add x1, x24, x1, lsl 6 + strb wzr, [x1,61] + b .L395 +.L409: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size gc_write_completed, .-gc_write_completed + .align 2 + .global gc_get_src_blk + .type gc_get_src_blk, %function +gc_get_src_blk: + adrp x3, .LANCHOR0 + add x0, x3, :lo12:.LANCHOR0 + ldr x1, [x0,2792] + ldrb w0, [x0,3209] + ldrh w4, [x1,124] + cbz w4, .L411 + add x1, x1, 392 + mov w2, 1 + b .L412 +.L411: + sxtw x2, w0 + add x0, x1, x2, lsl 1 + ldrh w5, [x0,120] + mov w0, 65535 + cbz w5, .L413 + add x1, x1, x2, lsl 7 + mov w2, w4 + add x1, x1, 136 +.L412: + add x4, x1, 128 + mov w5, 65535 +.L416: + ldrh w0, [x1] + cmp w0, w5 + beq .L414 + mov w4, -1 + strh w4, [x1] + add x3, x3, :lo12:.LANCHOR0 + cbz w2, .L415 + ldr x2, [x3,2792] + ldrh w1, [x2,124] + sub w1, w1, #1 + strh w1, [x2,124] + b .L413 +.L415: + ldrb w1, [x3,3209] + ldr x2, [x3,2792] + add x1, x2, x1, lsl 1 + ldrh w2, [x1,120] + sub w2, w2, #1 + strh w2, [x1,120] + b .L413 +.L414: + add x1, x1, 2 + cmp x1, x4 + bne .L416 +.L413: + ret + .size gc_get_src_blk, .-gc_get_src_blk + .align 2 + .global gc_free_temp_buf + .type gc_free_temp_buf, %function +gc_free_temp_buf: + stp x29, x30, [sp, -64]! + mov w0, 0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + str x21, [sp,32] + add x2, x19, :lo12:.LANCHOR0 + ldrb w3, [x2,2855] + cbz w3, .L421 + ldrb w3, [x2,2778] + cmp w3, 1 + bhi .L421 + ldrh w4, [x2,3210] + mov x20, x2 + ldrb w0, [x2,3212] + add x2, x2, 728 + ldrh w1, [x2,2436] + mul w0, w4, w0 + add w3, w1, 24 + ldr x4, [x2,2472] + cmp w0, w3 + csel w3, w0, w3, ls +.L422: + cmp w1, w3 + bcs .L435 + uxtw x21, w1 + ldrb w0, [x4,x21] + cmp w0, 255 + beq .L423 + sbfiz x0, x0, 6, 32 + add x0, x2, x0 + ldrb w5, [x0,61] + cbnz w5, .L423 + str x1, [x29,56] + bl buf_free + adrp x0, .LANCHOR2+400 + ldr x1, [x29,56] + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L424 + ldr x2, [x20,3200] + adrp x0, .LC81 + add x0, x0, :lo12:.LC81 + ldrb w2, [x2,x21] + bl printk +.L424: + add x19, x19, :lo12:.LANCHOR0 + mov w1, -1 + ldr x0, [x19,3200] + strb w1, [x0,x21] + ldrb w0, [x19,2855] + sub w0, w0, #1 + strb w0, [x19,2855] + mov w0, 1 + b .L421 +.L423: + add w1, w1, 1 + b .L422 +.L435: + mov w0, 0 +.L421: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size gc_free_temp_buf, .-gc_free_temp_buf + .align 2 + .global gc_static_wearleveling + .type gc_static_wearleveling, %function +gc_static_wearleveling: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + add x0, x21, :lo12:.LANCHOR0 + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + ldr x6, [x0,2800] + ldr w0, [x6,32] + cmp w0, 20480 + bls .L437 + ldr w1, [x6,36] + add w1, w1, w0, lsr 10 + and w0, w0, 1023 + str w1, [x6,36] + str w0, [x6,32] +.L437: + add x0, x21, :lo12:.LANCHOR0 + ldr x0, [x0,2792] + ldr w1, [x0,568] + ldr w2, [x0,12] + add w1, w1, 12959744 + add w1, w1, 256 + cmp w2, w1 + bhi .L438 + ldr w1, [x0,572] + ldr w3, [x6,36] + add w1, w1, 128 + cmp w3, w1 + bls .L436 +.L438: + ldr w1, [x6,36] + mov w8, 0 + str w1, [x0,572] + mov w20, 65535 + str w2, [x0,568] + add x0, x21, :lo12:.LANCHOR0 + mov w4, w8 + mov w2, w8 + ldrh w9, [x6,134] + mov w1, w8 + ldrh w12, [x0,2826] + mov w24, w8 + ldr x10, [x0,2840] + mov w23, w8 + mov w19, w20 + mov w3, w20 +.L440: + cmp w9, w12 + bcs .L478 + ubfiz x11, x9, 2, 16 + add x0, x10, x11 + ldrb w0, [x0,2] + tbz x0, 3, .L441 + ldrh w5, [x10,x11] + and w7, w5, 2047 + ldr w5, [x10,x11] + ubfx x0, x5, 11, 8 + b .L442 +.L441: + tst w0, 24 + bne .L443 + ldrh w5, [x10,x11] + mov w0, 65535 + and w7, w5, 2047 + b .L442 +.L443: + ldr w5, [x10,x11] + ubfx x0, x5, 11, 8 +.L464: + cmp w19, w0 + add w2, w2, 1 + csel w19, w19, w0, cc + cmp w23, w0 + add w4, w4, w0 + csel w0, w23, w0, hi + uxth w2, w2 + uxth w19, w19 + uxth w23, w0 +.L465: + add w9, w9, 1 + uxth w9, w9 + b .L440 +.L478: + ldrh w0, [x6,96] + cmp w0, w24 + bcs .L445 + strh w24, [x6,96] +.L445: + ldrh w0, [x6,98] + cmp w0, w23 + bcs .L446 + strh w23, [x6,98] +.L446: + adrp x5, .LANCHOR2 + add x0, x5, :lo12:.LANCHOR2 + mov x22, x5 + udiv w3, w8, w1 + strh w3, [x6,88] + ldr w0, [x0,400] + udiv w4, w4, w2 + strh w4, [x6,90] + tbz x0, 8, .L447 + adrp x0, .LC82 + uxth w3, w3 + add x0, x0, :lo12:.LC82 + uxth w4, w4 + bl printk +.L447: + add x5, x22, :lo12:.LANCHOR2 + ldr w0, [x5,400] + tbz x0, 8, .L448 + adrp x0, .LC83 + mov w1, w20 + add x0, x0, :lo12:.LC83 + mov w2, w19 + mov w3, w24 + mov w4, w23 + bl printk +.L448: + sub w0, w23, w19 + cmp w0, 64 + bgt .L449 +.L455: + cbz w19, .L456 + add x0, x21, :lo12:.LANCHOR0 + ldr x0, [x0,2800] + ldrh w0, [x0,134] + b .L457 +.L449: + add x0, x21, :lo12:.LANCHOR0 + ldr x0, [x0,2800] + ldrh w22, [x0,134] +.L452: + add x0, x21, :lo12:.LANCHOR0 + ldrh w1, [x0,2826] + cmp w1, w22 + bls .L455 + ldr x2, [x0,2840] + ubfiz x1, x22, 2, 16 + add x0, x2, x1 + ldrb w0, [x0,2] + and w3, w0, 224 + cmp w3, 224 + beq .L453 + tst w0, 192 + beq .L453 + tbz x0, 4, .L453 + ldr w0, [x2,x1] + ubfx x0, x0, 11, 8 + cmp w0, w19 + bhi .L453 + mov w1, 1 + mov w0, w22 + mov w2, w1 + bl gc_add_sblk +.L453: + add w22, w22, 1 + uxth w22, w22 + b .L452 +.L459: + ubfiz x3, x0, 2, 16 + ldr x4, [x1,2840] + ldr w1, [x4,x3] + ubfx x2, x1, 11, 8 + cmp w2, w19 + bcc .L458 + sub w2, w2, w19 + bfi w1, w2, 11, 8 + str w1, [x4,x3] +.L458: + add w0, w0, 1 + uxth w0, w0 +.L457: + add x1, x21, :lo12:.LANCHOR0 + ldrh w2, [x1,2826] + cmp w2, w0 + bhi .L459 + ldr x0, [x1,2800] + ldrh w1, [x0,72] + add w1, w19, w1 + strh w1, [x0,72] + ldrh w1, [x0,98] + cmp w1, w19 + bls .L456 + sub w19, w1, w19 + strh w19, [x0,98] +.L456: + cbz w20, .L436 + add x0, x21, :lo12:.LANCHOR0 + ldr x0, [x0,2800] + ldrh w0, [x0,134] +.L461: + add x1, x21, :lo12:.LANCHOR0 + ldrh w2, [x1,2826] + cmp w2, w0 + bls .L479 + ubfiz x3, x0, 2, 16 + ldr x4, [x1,2840] + ldrh w1, [x4,x3] + and w2, w1, 2047 + cmp w2, w20 + blt .L462 + sub w2, w2, w20 + bfi w1, w2, 0, 11 + strh w1, [x4,x3] +.L462: + add w0, w0, 1 + uxth w0, w0 + b .L461 +.L479: + ldr x0, [x1,2800] + ldrh w1, [x0,74] + add w1, w20, w1 + strh w1, [x0,74] + ldrh w1, [x0,96] + cmp w1, w20 + bls .L436 + sub w20, w1, w20 + strh w20, [x0,96] + b .L436 +.L442: + cmp w20, w7 + add w1, w1, 1 + csel w20, w20, w7, cc + cmp w24, w7 + add w8, w8, w7 + csel w7, w24, w7, hi + cmp w0, w3 + uxth w1, w1 + uxth w20, w20 + uxth w24, w7 + bne .L464 + b .L465 +.L436: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size gc_static_wearleveling, .-gc_static_wearleveling + .align 2 + .global print_gc_debug_info + .type print_gc_debug_info, %function +print_gc_debug_info: + adrp x6, .LANCHOR0 + adrp x0, .LC84 + add x6, x6, :lo12:.LANCHOR0 + add x0, x0, :lo12:.LC84 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrh w1, [x6,2848] + ldrh w2, [x6,2850] + ldrh w3, [x6,3162] + ldrb w4, [x6,2778] + ldrb w5, [x6,2855] + ldrh w6, [x6,3214] + bl printk + ldp x29, x30, [sp], 16 + ret + .size print_gc_debug_info, .-print_gc_debug_info + .align 2 + .global ftl_get_blk_list_in_sblk + .type ftl_get_blk_list_in_sblk, %function +ftl_get_blk_list_in_sblk: + adrp x6, .LANCHOR0 + uxth w0, w0 + add x2, x6, :lo12:.LANCHOR0 + mov w11, 21 + ldr x2, [x2,2840] + add x2, x2, x0, uxth 2 + ldrb w10, [x2,3] + mov w2, 0 + mov w5, w2 +.L482: + add x7, x6, :lo12:.LANCHOR0 + ldrb w3, [x7,3212] + cmp w5, w3 + bge .L488 + asr w3, w10, w5 + tbnz x3, 0, .L483 + ldrb w4, [x7,3216] + sbfiz x9, x2, 1, 32 + ldrh w3, [x7,3218] + sdiv w8, w5, w4 + sub w3, w11, w3 + lsl w3, w8, w3 + madd w3, w0, w4, w3 + uxth w3, w3 + strh w3, [x1,x9] + ldrb w4, [x7,3216] + cmp w4, 1 + bls .L484 + and w4, w5, 1 + add w3, w3, w4 + strh w3, [x1,x9] +.L484: + add w2, w2, 1 +.L483: + add w5, w5, 1 + b .L482 +.L488: + mov w0, w2 + mov w4, -1 +.L486: + add x3, x6, :lo12:.LANCHOR0 + ldrb w3, [x3,3212] + cmp w2, w3 + bge .L489 + strh w4, [x1,w2,sxtw 1] + add w2, w2, 1 + b .L486 +.L489: + ret + .size ftl_get_blk_list_in_sblk, .-ftl_get_blk_list_in_sblk + .align 2 + .global ftl_alloc_sblk + .type ftl_alloc_sblk, %function +ftl_alloc_sblk: +.L491: + stp x29, x30, [sp, -64]! + mov w6, 2 + mov w8, 0 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + mov w22, w0 + add x0, x21, :lo12:.LANCHOR0 + str x23, [sp,48] + stp x19, x20, [sp,16] + cmp w22, 5 + mov w19, 65535 + ldrh w10, [x0,2826] + csel w23, wzr, w6, ne + ldr x4, [x0,2800] + cmp w22, 5 + ldr x9, [x0,2840] + csel w6, w6, wzr, ne + mov w12, w10 + mov w5, w19 + mov w11, w19 +.L506: + ldrh w7, [x4,132] + mov w1, w7 +.L492: + cmp w1, w12 + bge .L518 + sbfiz x0, x1, 2, 32 + add x20, x9, x0 + ldrb w3, [x20,2] + tst w3, 224 + bne .L493 + ubfx x3, x3, 3, 2 + cmp w3, w6 + beq .L493 + cbz w23, .L494 + ldr w3, [x9,x0] + ldrh w2, [x4,72] + ldrh w0, [x4,90] + ubfx x3, x3, 11, 8 + add w2, w3, w2 + add w0, w0, 1 + cmp w2, w0 + ble .L495 + uxth w3, w3 + cmp w5, w3 + bls .L493 + uxth w19, w1 + mov w5, w3 + b .L493 +.L494: + ldrh w3, [x9,x0] + ldrh w2, [x4,74] + ldrh w0, [x4,88] + and w3, w3, 2047 + add w2, w3, w2 + add w0, w0, 1 + cmp w2, w0 + ble .L495 + cmp w5, w3 + ble .L493 + mov w5, w3 + uxth w19, w1 + b .L493 +.L495: + uxth w19, w1 +.L496: + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 12, .L497 + ldrb w3, [x20,2] + adrp x0, .LC85 + ldrb w4, [x20,3] + add x0, x0, :lo12:.LC85 + mov w1, w19 + mov w2, w22 + ubfx x3, x3, 5, 3 + bl printk +.L497: + ldrb w1, [x20,2] + add x21, x21, :lo12:.LANCHOR0 + bfi w1, w22, 5, 3 + ubfx x0, x1, 3, 2 + orr w0, w23, w0 + bfi w1, w0, 3, 2 + strb w1, [x20,2] + ldr x1, [x21,2800] + strh w19, [x1,132] + ldrb w0, [x20,2] + tbz x0, 3, .L498 + ldrh w0, [x1,116] + sub w0, w0, #1 + strh w0, [x1,116] + b .L499 +.L498: + tst w0, 24 + bne .L500 + ldrh w0, [x1,114] + sub w0, w0, #1 + strh w0, [x1,114] + b .L499 +.L500: + ldrh w0, [x1,118] + sub w0, w0, #1 + strh w0, [x1,118] +.L499: + cmp w22, 5 + bne .L501 + ldrh w0, [x1,120] + add w0, w0, 1 + strh w0, [x1,120] + b .L511 +.L501: + cmp w22, 2 + bne .L503 + ldrh w0, [x1,122] + add w0, w0, 1 + strh w0, [x1,122] + b .L511 +.L503: + cmp w22, 3 + bne .L511 + ldrh w0, [x1,124] + add w0, w0, 1 + strh w0, [x1,124] + b .L511 +.L493: + add w1, w1, 1 + b .L492 +.L518: + sub w3, w1, w7 + ldrh w0, [x4,134] + add w1, w8, w3 + uxth w8, w1 + sub w1, w10, w0 + cmp w8, w1 + blt .L505 + cmp w19, w11 + beq .L505 + add x0, x21, :lo12:.LANCHOR0 + ldr x20, [x0,2840] + add x20, x20, x19, uxtw 2 + b .L496 +.L505: + strh w0, [x4,132] + mov w12, w7 + b .L506 +.L511: + mov w0, w19 + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size ftl_alloc_sblk, .-ftl_alloc_sblk + .align 2 + .global ftl_free_sblk + .type ftl_free_sblk, %function +ftl_free_sblk: + stp x29, x30, [sp, -16]! + uxth x0, w0 + mov w1, 65535 + cmp w0, w1 + add x29, sp, 0 + bne .L520 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1080 + mov w2, 313 + bl printk +.L521: + b .L521 +.L520: + adrp x1, .LANCHOR0 + lsl x3, x0, 2 + add x5, x1, :lo12:.LANCHOR0 + ldr x7, [x5,2840] + add x4, x7, x3 + ldrb w2, [x4,2] + ands w6, w2, 224 + bne .L522 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1080 + mov w2, 316 + bl printk +.L523: + b .L523 +.L522: + cmp w6, 160 + ubfx x2, x2, 3, 2 + bne .L524 + ldr x6, [x5,2800] + ldrh w5, [x6,120] + sub w5, w5, #1 + strh w5, [x6,120] + b .L525 +.L524: + cmp w6, 64 + bne .L526 + ldr x6, [x5,2800] + ldrh w5, [x6,122] + sub w5, w5, #1 + strh w5, [x6,122] + b .L525 +.L526: + cmp w6, 96 + bne .L525 + ldr x6, [x5,2800] + ldrh w5, [x6,124] + sub w5, w5, #1 + strh w5, [x6,124] +.L525: + tbz x2, 0, .L527 + add x6, x1, :lo12:.LANCHOR0 + ldr x2, [x6,2800] + ldrh w5, [x2,116] + ldrh w8, [x2,74] + add w5, w5, 1 + strh w5, [x2,116] + ldrh w9, [x2,72] + ldr w5, [x7,x3] + ldrh w7, [x7,x3] + ubfx x5, x5, 11, 8 + ubfx x7, x7, 0, 11 + add w7, w7, w8 + ldrh w8, [x6,3220] + cmp w8, w7, uxth + bcc .L528 + b .L535 +.L527: + cbnz w2, .L530 + add x2, x1, :lo12:.LANCHOR0 + ldr x4, [x2,2800] + ldrh w2, [x4,114] + add w2, w2, 1 + strh w2, [x4,114] + b .L532 +.L530: + add x2, x1, :lo12:.LANCHOR0 + ldr x4, [x2,2800] + ldrh w2, [x4,118] + add w2, w2, 1 + strh w2, [x4,118] + b .L532 +.L535: + add w5, w9, w5 + ldrh w6, [x6,3222] + cmp w6, w5, uxth + bcs .L532 +.L528: + ldrh w5, [x2,118] + ldrh w6, [x2,120] + add w6, w6, w5 + add x5, x1, :lo12:.LANCHOR0 + ldrh w7, [x5,3224] + cmp w6, w7 + bge .L533 + ldrb w2, [x4,2] + mov w6, 2 + bfi w2, w6, 3, 2 + strb w2, [x4,2] + ldr x2, [x5,2800] + ldrh w4, [x2,116] + sub w4, w4, #1 + strh w4, [x2,116] + ldrh w4, [x2,118] + add w4, w4, 1 + strh w4, [x2,118] + b .L532 +.L533: + ldrh w6, [x2,122] + ldrh w2, [x2,114] + add w2, w6, w2 + ldrh w6, [x5,3226] + cmp w2, w6 + bge .L532 + ldrb w2, [x4,2] + and w2, w2, -25 + strb w2, [x4,2] + ldr x2, [x5,2800] + ldrh w4, [x2,116] + sub w4, w4, #1 + strh w4, [x2,116] + ldrh w4, [x2,114] + add w4, w4, 1 + strh w4, [x2,114] +.L532: + add x1, x1, :lo12:.LANCHOR0 + ldr x2, [x1,2840] + add x3, x2, x3 + ldrb w2, [x3,2] + and w2, w2, 31 + strb w2, [x3,2] + ldr x1, [x1,2832] + strh wzr, [x1,x0,lsl 1] + ldp x29, x30, [sp], 16 + ret + .size ftl_free_sblk, .-ftl_free_sblk + .align 2 + .global gc_free_src_blk + .type gc_free_src_blk, %function +gc_free_src_blk: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + str x27, [sp,80] + stp x23, x24, [sp,48] + add x21, x21, :lo12:.LANCHOR0 + adrp x23, .LC86 + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + mov w20, 0 + add x22, x21, 2848 + add x23, x23, :lo12:.LC86 + adrp x24, .LANCHOR2 +.L537: + ldrh w0, [x22,56] + adrp x26, .LANCHOR0 + cmp w0, w20 + bls .L573 + add x0, x22, x20, sxtw 1 + ldrh w25, [x0,58] + ldr x0, [x21,2832] + lsl x27, x25, 1 + mov x19, x25 + ldrh w2, [x0,x27] + cbz w2, .L538 + mov x0, x23 + mov w1, w25 + bl printk +.L538: + add x0, x26, :lo12:.LANCHOR0 + ldr x1, [x0,2832] + ldrh w1, [x1,x27] + cbnz w1, .L539 + ldr x0, [x0,2840] + add x25, x0, x25, lsl 2 + add x0, x24, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 8, .L540 + ldrb w2, [x25,2] + adrp x0, .LC87 + add x0, x0, :lo12:.LC87 + mov w1, w19 + ubfx x2, x2, 5, 3 + bl printk +.L540: + ldrb w0, [x25,2] + tst w0, 192 + beq .L554 + and w0, w0, 224 + cmp w0, 224 + bne .L541 +.L554: + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1096 + mov w2, 756 + bl printk +.L543: + b .L543 +.L541: + mov w0, w19 + add x26, x26, :lo12:.LANCHOR0 + bl ftl_free_sblk + ldr x2, [x26,2792] + ldrh w0, [x2,124] + cbz w0, .L544 + mov x1, 0 +.L546: + add x4, x2, x1, lsl 1 + mov w3, w1 + ldrh w4, [x4,392] + cmp w4, w19 + bne .L545 + add x1, x2, x3, sxtw 1 + mov w3, -1 + strh w3, [x1,392] + sub w0, w0, #1 + strh w0, [x2,124] + b .L544 +.L545: + add x1, x1, 1 + cmp x1, 64 + bne .L546 +.L544: + ldrh w0, [x2,120] + cbz w0, .L547 + mov x1, 0 +.L549: + add x4, x2, x1, lsl 1 + mov w3, w1 + ldrh w4, [x4,136] + cmp w4, w19 + bne .L548 + add x1, x2, x3, sxtw 1 + mov w3, -1 + strh w3, [x1,136] + sub w0, w0, #1 + strh w0, [x2,120] + b .L547 +.L548: + add x1, x1, 1 + cmp x1, 64 + bne .L549 +.L547: + ldrh w0, [x2,122] + cbz w0, .L550 + mov x1, 0 +.L552: + add x4, x2, x1, lsl 1 + mov w3, w1 + ldrh w4, [x4,264] + cmp w4, w19 + bne .L551 + add x1, x2, x3, sxtw 1 + mov w3, -1 + strh w3, [x1,264] + sub w0, w0, #1 + strh w0, [x2,122] + b .L550 +.L551: + add x1, x1, 1 + cmp x1, 64 + bne .L552 + b .L550 +.L539: + mov w0, w19 + mov w1, 1 + mov w2, 0 + bl gc_add_sblk +.L550: + add w20, w20, 1 + uxth w20, w20 + b .L537 +.L573: + strh wzr, [x22,56] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldr x27, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size gc_free_src_blk, .-gc_free_src_blk + .align 2 + .global ftl_erase_phy_blk + .type ftl_erase_phy_blk, %function +ftl_erase_phy_blk: + stp x29, x30, [sp, -48]! + adrp x3, .LANCHOR0 + uxth w2, w0 + add x5, x3, :lo12:.LANCHOR0 + add x29, sp, 0 + mov w0, 21 + stp x21, x22, [sp,32] + stp x19, x20, [sp,16] + mov w4, 1 + mov w21, w1 + ldrh w19, [x5,3218] + mov x20, x3 + sub w19, w0, w19 + ldrb w0, [x5,3228] + asr w22, w2, w19 + lsl w19, w4, w19 + sub w19, w19, #1 + and w19, w19, w2 + sxth w19, w19 + cbz w0, .L575 + ldrh w2, [x5,3230] + cmp w1, wzr + mov w0, w22 + cset w1, eq + mul w2, w19, w2 + bl flash_erase_block_en +.L575: + add x3, x20, :lo12:.LANCHOR0 + mov w1, w21 + mov w0, w22 + ldrh w2, [x3,3230] + mul w2, w19, w2 + bl flash_erase_block_en + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size ftl_erase_phy_blk, .-ftl_erase_phy_blk + .align 2 + .global ftl_erase_sblk + .type ftl_erase_sblk, %function +ftl_erase_sblk: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + mov w22, w1 + stp x23, x24, [sp,48] + uxth w23, w0 + add x0, x21, :lo12:.LANCHOR0 + stp x19, x20, [sp,16] + ubfiz x20, x23, 2, 16 + mov w19, 0 + ldr x0, [x0,2840] + add x0, x0, x20 + ldrb w24, [x0,3] +.L580: + add x2, x21, :lo12:.LANCHOR0 + ldrb w0, [x2,3232] + cmp w19, w0 + bge .L587 + ldrb w0, [x2,3216] + ldrh w4, [x2,3230] + mov w2, 0 + mov w1, w2 + mul w6, w19, w0 + mul w5, w23, w0 +.L588: + cmp w1, w0 + bge .L599 + add w3, w1, w6 + asr w3, w24, w3 + tbnz x3, 0, .L581 + and w3, w1, 1 + add x7, x29, 64 + add w3, w5, w3 + mul w3, w3, w4 + str w3, [x7,w2,sxtw 2] + add w2, w2, 1 +.L581: + add w1, w1, 1 + b .L588 +.L599: + cmp w2, 2 + bne .L583 + add x0, x21, :lo12:.LANCHOR0 + ldrb w0, [x0,3228] + cbz w0, .L584 + cmp w22, wzr + ldr w2, [x29,64] + ldr w3, [x29,68] + mov w0, w19 + cset w1, eq + bl flash_erase_duplane_block +.L584: + ldr w2, [x29,64] + mov w0, w19 + ldr w3, [x29,68] + mov w1, w22 + bl flash_erase_duplane_block + b .L585 +.L583: + cmp w2, 1 + bne .L585 + add x0, x21, :lo12:.LANCHOR0 + ldrb w0, [x0,3228] + cbz w0, .L586 + cmp w22, wzr + ldr w2, [x29,64] + mov w0, w19 + cset w1, eq + bl flash_erase_block_en +.L586: + ldr w2, [x29,64] + mov w0, w19 + mov w1, w22 + bl flash_erase_block_en +.L585: + add w19, w19, 1 + b .L580 +.L587: + cbnz w22, .L589 + ldr x1, [x2,2840] + ldrh w0, [x1,x20] + add w3, w0, 1 + bfi w0, w3, 0, 11 + strh w0, [x1,x20] + ldr x0, [x2,2800] + ldr w1, [x0,84] + ldrh w3, [x0,96] + add w1, w1, 1 + str w1, [x0,84] + ldr x1, [x2,2840] + ldrh w1, [x1,x20] + ubfx x1, x1, 0, 11 + uxth w2, w1 + cmp w3, w2 + bge .L591 + strh w1, [x0,96] + b .L591 +.L589: + ldr x3, [x2,2840] + ldr w0, [x3,x20] + ubfx x1, x0, 11, 8 + add w1, w1, 1 + bfi w0, w1, 11, 8 + str w0, [x3,x20] + ldr x0, [x2,2800] + ldr w1, [x0,80] + add w1, w1, 1 + str w1, [x0,80] + ldr x1, [x2,2840] + ldrh w2, [x0,98] + ldr w1, [x1,x20] + ubfx x1, x1, 11, 8 + cmp w2, w1, uxtb + bcs .L591 + strh w1, [x0,98] +.L591: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 128 + ret + .size ftl_erase_sblk, .-ftl_erase_sblk + .align 2 + .global ftl_alloc_sys_blk + .type ftl_alloc_sys_blk, %function +ftl_alloc_sys_blk: + adrp x0, .LANCHOR0+2800 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x1, [x0,#:lo12:.LANCHOR0+2800] + ldrh w0, [x1,136] + cmp w0, 63 + bls .L601 + strh wzr, [x1,136] +.L601: + ldrh w3, [x1,112] + mov w5, 65535 + cbnz w3, .L607 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1112 + mov w2, 441 + bl printk +.L603: + b .L603 +.L606: + sxtw x4, w2 + add x4, x4, 80 + ldrh w0, [x1,x4,lsl 1] + cmp w0, w5 + bne .L609 + add w2, w2, 1 +.L604: + cmp w2, 63 + ble .L606 + strh wzr, [x1,136] +.L607: + ldrh w2, [x1,136] + b .L604 +.L609: + mov w5, -1 + strh w5, [x1,x4,lsl 1] + strh w2, [x1,136] + sub w3, w3, #1 + strh w3, [x1,112] + ldp x29, x30, [sp], 16 + ret + .size ftl_alloc_sys_blk, .-ftl_alloc_sys_blk + .align 2 + .global ftl_free_sys_blk + .type ftl_free_sys_blk, %function +ftl_free_sys_blk: + adrp x1, .LANCHOR0+2800 + uxth w0, w0 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x1, [x1,#:lo12:.LANCHOR0+2800] + ldrh w2, [x1,138] + cmp w2, 63 + bls .L611 + strh wzr, [x1,138] +.L611: + ldrh w3, [x1,112] + mov w5, 65535 + cmp w3, 63 + bls .L617 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1136 + mov w2, 465 + bl printk +.L613: + b .L613 +.L615: + add w2, w2, 1 +.L614: + cmp w2, 63 + ble .L616 + strh wzr, [x1,138] +.L617: + ldrh w2, [x1,138] + b .L614 +.L616: + sxtw x4, w2 + add x4, x4, 80 + ldrh w6, [x1,x4,lsl 1] + cmp w6, w5 + bne .L615 + strh w0, [x1,x4,lsl 1] + add w3, w3, 1 + strh w2, [x1,138] + strh w3, [x1,112] + ldp x29, x30, [sp], 16 + ret + .size ftl_free_sys_blk, .-ftl_free_sys_blk + .align 2 + .global ftl_info_data_recovery + .type ftl_info_data_recovery, %function +ftl_info_data_recovery: + ldrh w2, [x0] + mov w1, 65535 + cmp w2, w1 + beq .L619 + adrp x1, .LANCHOR0 + ubfiz x2, x2, 2, 16 + add x5, x1, :lo12:.LANCHOR0 + ldr x4, [x5,2840] + add x6, x4, x2 + ldrb w3, [x6,2] + tst w3, 224 + bne .L619 + ldrb w0, [x0,4] + bfi w3, w0, 5, 3 + strb w3, [x6,2] + tbz x3, 3, .L623 + ldr x3, [x5,2800] + ldrh w0, [x3,116] + sub w0, w0, #1 + strh w0, [x3,116] + b .L624 +.L623: + tst w3, 24 + ldr x3, [x5,2800] + bne .L625 + ldrh w0, [x3,114] + sub w0, w0, #1 + strh w0, [x3,114] + b .L624 +.L625: + ldrh w0, [x3,118] + sub w0, w0, #1 + strh w0, [x3,118] +.L624: + ldrb w0, [x6,2] + and w0, w0, 224 + cmp w0, 160 + bne .L626 + ldr w0, [x4,x2] + add x1, x1, :lo12:.LANCHOR0 + ubfx x3, x0, 11, 8 + add w3, w3, 1 + bfi w0, w3, 11, 8 + str w0, [x4,x2] + ldr x1, [x1,2800] + ldrh w0, [x1,120] + sub w0, w0, #1 + strh w0, [x1,120] + b .L619 +.L626: + ldrh w3, [x4,x2] + cmp w0, 64 + add w5, w3, 1 + bfi w3, w5, 0, 11 + strh w3, [x4,x2] + bne .L627 + add x1, x1, :lo12:.LANCHOR0 + ldr x1, [x1,2800] + ldrh w0, [x1,122] + sub w0, w0, #1 + strh w0, [x1,122] + b .L619 +.L627: + cmp w0, 96 + bne .L619 + add x1, x1, :lo12:.LANCHOR0 + ldr x1, [x1,2800] + ldrh w0, [x1,124] + sub w0, w0, #1 + strh w0, [x1,124] +.L619: + ret + .size ftl_info_data_recovery, .-ftl_info_data_recovery + .align 2 + .global ftl_get_ppa_from_index + .type ftl_get_ppa_from_index, %function +ftl_get_ppa_from_index: + adrp x2, .LANCHOR0 + uxth w1, w0 + add x3, x2, :lo12:.LANCHOR0 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrh w0, [x3,3234] + ldr x4, [x3,2792] + ldrb w3, [x3,3212] + mul w0, w0, w3 + cmp w1, w0 + bge .L629 + add x4, x4, 16 + b .L630 +.L629: + sub w1, w1, w0 + add x4, x4, 48 + uxth w1, w1 +.L630: + ldrb w3, [x4,9] + sdiv w5, w1, w3 + msub w1, w5, w3, w1 + add x1, x4, x1, uxth 1 + ldrh w0, [x1,16] + mov w1, 65535 + cmp w0, w1 + bne .L631 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1160 + mov w2, 842 + bl printk +.L632: + b .L632 +.L631: + add x2, x2, :lo12:.LANCHOR0 + ldp x29, x30, [sp], 16 + ldrh w1, [x2,3230] + madd w0, w0, w1, w5 + ret + .size ftl_get_ppa_from_index, .-ftl_get_ppa_from_index + .align 2 + .global lpa_hash_get_ppa + .type lpa_hash_get_ppa, %function +lpa_hash_get_ppa: + adrp x1, .LANCHOR0 + mov w3, 65535 + add x1, x1, :lo12:.LANCHOR0 + add x2, x1, x0, uxtb 1 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrh w2, [x2,3240] + ldr x4, [x1,3752] + ldr x5, [x1,3760] +.L634: + cmp w2, w3 + beq .L638 + uxtw x1, w2 + ldr w6, [x4,x1,lsl 2] + cmp w6, w0 + bne .L635 + mov w0, w2 + bl ftl_get_ppa_from_index + b .L636 +.L635: + ldrh w2, [x5,x1,lsl 1] + b .L634 +.L638: + mov w0, -1 +.L636: + ldp x29, x30, [sp], 16 + ret + .size lpa_hash_get_ppa, .-lpa_hash_get_ppa + .align 2 + .global ftl_get_new_free_page + .type ftl_get_new_free_page, %function +ftl_get_new_free_page: + stp x29, x30, [sp, -16]! + mov x1, x0 + mov w4, 65535 + add x29, sp, 0 + ldrh w0, [x0] + cmp w0, w4 + bne .L640 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1184 + mov w2, 955 + bl printk +.L641: + b .L641 +.L640: + adrp x2, .LANCHOR0 + ldrh w3, [x1,2] + add x5, x2, :lo12:.LANCHOR0 + ldrh w0, [x5,3234] + cmp w3, w0 + bne .L642 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1184 + mov w2, 956 + bl printk +.L643: + b .L643 +.L642: + ldrh w3, [x1,6] + cbnz w3, .L644 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1184 + mov w2, 957 + bl printk +.L645: + b .L645 +.L644: + ldrb w0, [x1,5] + ldrb w5, [x5,3212] + add x0, x0, 8 + ldrh w0, [x1,x0,lsl 1] +.L646: + cmp w0, w4 + bne .L650 + ldrb w0, [x1,5] + add w0, w0, 1 + uxtb w0, w0 + strb w0, [x1,5] + cmp w0, w5 + bne .L647 + ldrh w0, [x1,2] + strb wzr, [x1,5] + add w0, w0, 1 + strh w0, [x1,2] +.L647: + ldrb w0, [x1,5] + add x0, x0, 8 + ldrh w0, [x1,x0,lsl 1] + b .L646 +.L650: + sub w3, w3, #1 + strh w3, [x1,6] + ldrh w3, [x1,10] + add x2, x2, :lo12:.LANCHOR0 + ldrh w4, [x1,2] + add w3, w3, 1 + strh w3, [x1,10] + ldrb w3, [x1,5] + ldrh w5, [x2,3230] + add w3, w3, 1 + ldrb w2, [x2,3212] + uxtb w3, w3 + strb w3, [x1,5] + mul w0, w0, w5 + cmp w2, w3 + orr w0, w0, w4 + bne .L649 + add w4, w4, 1 + strb wzr, [x1,5] + strh w4, [x1,2] +.L649: + ldp x29, x30, [sp], 16 + ret + .size ftl_get_new_free_page, .-ftl_get_new_free_page + .align 2 + .global ftl_ext_alloc_new_blk + .type ftl_ext_alloc_new_blk, %function +ftl_ext_alloc_new_blk: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + bl ftl_alloc_sys_blk + uxth w1, w0 + mov w20, w1 + mov w2, 65533 + sub w1, w1, #1 + cmp w2, w1, uxth + bcs .L652 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1208 + mov w2, 988 + bl printk +.L653: + b .L653 +.L652: + adrp x19, .LANCHOR0 + mov w1, 0 + add x19, x19, :lo12:.LANCHOR0 + bl ftl_erase_phy_blk + ldr x0, [x19,2800] + ldrh w0, [x0,130] + bl ftl_free_sys_blk + ldr x1, [x19,2800] + mov w0, 0 + strh w20, [x1,130] + strh wzr, [x1,140] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size ftl_ext_alloc_new_blk, .-ftl_ext_alloc_new_blk + .align 2 + .global ftl_total_vpn_update + .type ftl_total_vpn_update, %function +ftl_total_vpn_update: + adrp x1, .LANCHOR0 + add x3, x1, :lo12:.LANCHOR0 + ldrh w2, [x3,3768] + cbnz w0, .L655 + cmp w2, 4 + bhi .L655 + add w2, w2, 1 + strh w2, [x3,3768] + b .L654 +.L655: + add x0, x1, :lo12:.LANCHOR0 + mov w9, 65535 + strh wzr, [x0,3768] + ldrh w6, [x0,2826] + ldr x7, [x0,2832] + ldr x8, [x0,2840] + mov x0, 0 + mov w2, w0 + mov w3, w0 +.L657: + cmp w6, w0, uxth + bls .L665 + ldrh w4, [x7,x0,lsl 1] + cmp w4, w9 + beq .L658 + add x5, x8, x0, lsl 2 + ldrb w5, [x5,2] + and w5, w5, 224 + cmp w5, 160 + bne .L659 + add w2, w2, w4 + b .L658 +.L659: + add w3, w3, w4 +.L658: + add x0, x0, 1 + b .L657 +.L665: + add x1, x1, :lo12:.LANCHOR0 + ldr x0, [x1,2792] + ldr x1, [x1,2800] + str w3, [x0,524] + str w2, [x0,528] + ldrh w1, [x1,120] + cbz w1, .L654 + udiv w2, w2, w1 + str w2, [x0,532] +.L654: + ret + .size ftl_total_vpn_update, .-ftl_total_vpn_update + .align 2 + .global ftl_debug_info_fill + .type ftl_debug_info_fill, %function +ftl_debug_info_fill: + mov w0, 0 + ret + .size ftl_debug_info_fill, .-ftl_debug_info_fill + .align 2 + .global ftl_vpn_update + .type ftl_vpn_update, %function +ftl_vpn_update: + adrp x1, .LANCHOR0+2832 + ubfiz x0, x0, 1, 16 + ldr x1, [x1,#:lo12:.LANCHOR0+2832] + ldrh w0, [x1,x0] + cmp w0, wzr + cset w0, eq + ret + .size ftl_vpn_update, .-ftl_vpn_update + .align 2 + .global ftl_vpn_decrement + .type ftl_vpn_decrement, %function +ftl_vpn_decrement: + stp x29, x30, [sp, -48]! + uxth w1, w0 + mov w0, 65535 + add x29, sp, 0 + str x19, [sp,16] + cmp w1, w0 + adrp x2, .LANCHOR0 + beq .L669 + add x0, x2, :lo12:.LANCHOR0 + ubfiz x3, x1, 1, 16 + ldr x0, [x0,2832] + ldrh w19, [x0,x3] + cbnz w19, .L670 + adrp x0, .LC88 + mov w2, w19 + add x0, x0, :lo12:.LC88 + bl printk + b .L674 +.L670: + sub w19, w19, #1 + strh w19, [x0,x3] +.L669: + add x19, x2, :lo12:.LANCHOR0 + mov w0, 0 + ldrh w2, [x19,3770] + cmp w2, w1 + beq .L671 + mov w0, 65535 + cmp w2, w0 + bne .L672 + strh w1, [x19,3770] +.L674: + mov w0, 0 + b .L671 +.L672: + mov w0, w2 + str x1, [x29,40] + bl ftl_vpn_update + cmp w0, wzr + ldr x1, [x29,40] + cset w0, ne + strh w1, [x19,3770] +.L671: + ldr x19, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size ftl_vpn_decrement, .-ftl_vpn_decrement + .align 2 + .global lpa_hash_update_ppa + .type lpa_hash_update_ppa, %function +lpa_hash_update_ppa: + adrp x3, .LANCHOR0 + uxtb w5, w0 + add x6, x3, :lo12:.LANCHOR0 + uxth w2, w2 + add x4, x6, 3240 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x8, [x6,3752] + ldr x12, [x6,3760] + mov w6, 65535 + ldrh w4, [x4,w5,sxtw 1] + mov w11, w6 +.L676: + cmp w4, w11 + beq .L680 + uxtw x9, w4 + uxth x7, w4 + lsl x10, x9, 2 + add x13, x8, x10 + ldr w10, [x8,x10] + cmp w10, w0 + bne .L677 + mov w4, -1 + str w4, [x13] + mov w4, 65535 + cmp w6, w4 + add x4, x3, :lo12:.LANCHOR0 + bne .L678 + ldr x6, [x4,3760] + add x4, x4, 3240 + ldrh w6, [x6,x7,lsl 1] + strh w6, [x4,w5,sxtw 1] + b .L679 +.L678: + ldr x4, [x4,3760] + ldrh w8, [x4,x7,lsl 1] + strh w8, [x4,w6,uxtw 1] +.L679: + add x4, x3, :lo12:.LANCHOR0 + mov w6, -1 + ldr x4, [x4,3760] + strh w6, [x4,x7,lsl 1] + b .L680 +.L677: + mov w6, w4 + ldrh w4, [x12,x9,lsl 1] + b .L676 +.L680: + add x3, x3, :lo12:.LANCHOR0 + uxtw x4, w2 + cmn w1, #1 + ldr x6, [x3,3752] + str w0, [x6,x4,lsl 2] + add x0, x3, 3240 + ldrh w6, [x0,w5,sxtw 1] + strh w2, [x0,w5,sxtw 1] + ldr x0, [x3,3760] + strh w6, [x0,x4,lsl 1] + beq .L682 + ldrh w0, [x3,3218] + mov w2, 21 + mov w4, 1 + sub w2, w2, w0 + lsr w1, w1, w0 + lsl w2, w4, w2 + ldrb w0, [x3,3216] + sub w2, w2, #1 + and w1, w2, w1 + udiv w0, w1, w0 + bl ftl_vpn_decrement +.L682: + mov w0, -1 + ldp x29, x30, [sp], 16 + ret + .size lpa_hash_update_ppa, .-lpa_hash_update_ppa + .align 2 + .global ftl_mask_bad_block + .type ftl_mask_bad_block, %function +ftl_mask_bad_block: + stp x29, x30, [sp, -48]! + adrp x3, .LANCHOR0 + mov w2, 21 + add x1, x3, :lo12:.LANCHOR0 + add x29, sp, 0 + mov w4, 1 + stp x19, x20, [sp,16] + str x21, [sp,32] + ubfx x21, x0, 21, 3 + mov x19, x3 + ldrh w5, [x1,3218] + sub w2, w2, w5 + lsr w0, w0, w5 + lsl w2, w4, w2 + sub w2, w2, #1 + and w0, w2, w0 + ldrb w2, [x1,3216] + udiv w2, w0, w2 + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + uxtb w20, w2 + tbz x0, 14, .L687 + adrp x0, .LC89 + mov w1, w21 + add x0, x0, :lo12:.LC89 + mov w2, w20 + bl printk +.L687: + add x0, x19, :lo12:.LANCHOR0 + ldrh w1, [x0,2826] + cmp w1, w20 + bls .L686 + ldr x0, [x0,2840] + add x20, x0, x20, uxtb 2 + mov w0, 1 + lsl w1, w0, w21 + ldrb w0, [x20,3] + orr w1, w1, w0 + strb w1, [x20,3] +.L686: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size ftl_mask_bad_block, .-ftl_mask_bad_block + .align 2 + .global print_ftl_debug_info + .type print_ftl_debug_info, %function +print_ftl_debug_info: + sub sp, sp, #64 + stp x29, x30, [sp,32] + add x29, sp, 32 + str x19, [sp,48] + adrp x19, .LANCHOR0 + add x19, x19, :lo12:.LANCHOR0 + ldr x0, [x19,2800] + ldr x7, [x19,2792] + ldrh w6, [x0,120] + ldrh w1, [x0,114] + ldrh w2, [x0,118] + ldrh w3, [x0,116] + ldrh w4, [x0,122] + ldrh w5, [x0,124] + ldr w0, [x7,528] + str w0, [sp] + ldrh w0, [x19,3214] + str w0, [sp,8] + adrp x0, .LC90 + add x0, x0, :lo12:.LC90 + ldr w7, [x7,524] + bl printk + ldr x5, [x19,2800] + adrp x0, .LC91 + ldrb w3, [x19,3772] + add x0, x0, :lo12:.LC91 + ldr w4, [x5,8] + ldr w1, [x5,20] + ldr w2, [x5,28] + ldr w5, [x5,64] + bl printk + ldr x2, [x19,2800] + adrp x0, .LC92 + add x0, x0, :lo12:.LC92 + ldr w3, [x2,16] + ldr w1, [x2,52] + ldr w2, [x2,60] + lsr w3, w3, 11 + bl printk + ldr x7, [x19,2800] + ldrh w0, [x7,90] + ldrh w1, [x7,74] + ldrh w3, [x7,88] + ldrh w4, [x7,92] + ldrh w5, [x7,96] + ldrh w6, [x7,72] + str w0, [sp] + ldrh w0, [x7,94] + str w0, [sp,8] + ldrh w0, [x7,98] + str w0, [sp,16] + adrp x0, .LC93 + add x0, x0, :lo12:.LC93 + ldr w2, [x7,84] + ldr w7, [x7,80] + bl printk + sub sp, x29, #32 + ldr x19, [sp,48] + ldp x29, x30, [sp,32] + add sp, sp, 64 + ret + .size print_ftl_debug_info, .-print_ftl_debug_info + .align 2 + .global ftl_write_buf + .type ftl_write_buf, %function +ftl_write_buf: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + mov x20, x0 + cbnz x0, .L694 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1232 + mov w2, 558 + bl printk +.L695: + b .L695 +.L694: + adrp x19, .LANCHOR0 + ldrb w1, [x0,56] + add x19, x19, :lo12:.LANCHOR0 + ldrb w2, [x19,2776] + cmp w2, w1 + bcs .L696 + adrp x1, .LANCHOR1 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR1 + add x0, x0, :lo12:.LC34 + add x1, x1, 1232 + mov w2, 563 + bl printk +.L697: + b .L697 +.L696: + cbnz w1, .L698 + bl buf_free + ldrb w0, [x19,2809] + b .L699 +.L698: + add x0, x19, 2808 + mov x1, x20 + bl buf_add_tail + ldrb w2, [x19,2809] + ldrb w1, [x20,56] + add w2, w2, 1 + uxtb w0, w2 + ldr x2, [x19,2800] + strb w0, [x19,2809] + ldr w3, [x2,16] + add w1, w3, w1 + str w1, [x2,16] + ldr w1, [x2,32] + add w1, w1, 1 + str w1, [x2,32] +.L699: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size ftl_write_buf, .-ftl_write_buf + .align 2 + .global ftl_write_completed + .type ftl_write_completed, %function +ftl_write_completed: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + str x25, [sp,64] + stp x21, x22, [sp,32] + add x19, x19, :lo12:.LANCHOR0 + adrp x21, .LC94 + stp x23, x24, [sp,48] + add x22, x19, 728 + mov w23, 21 + mov w24, 1 + add x21, x21, :lo12:.LC94 +.L701: + ldrb w0, [x19,3773] + cmp w0, 255 + beq .L708 + sbfiz x0, x0, 6, 32 + add x20, x22, x0 + add x4, x20, 32 + ldrb w0, [x22,x0] + strb w0, [x19,3773] + ldr w0, [x20,52] + cmn w0, #1 + bne .L702 + ldrh w2, [x19,3218] + mov x0, x21 + ldr w3, [x4,8] + sub w1, w23, w2 + lsl w1, w24, w1 + lsr w2, w3, w2 + sub w1, w1, #1 + and w2, w1, w2 + ldrb w1, [x19,3216] + udiv w1, w2, w1 + ldr w2, [x4,4] + uxth w25, w1 + mov w1, w25 + bl printk + mov w1, 1 + mov w0, w25 + mov w2, 0 + bl gc_add_sblk + ldr x0, [x19,2792] + ldr w1, [x0,556] + add w1, w1, 1 + str w1, [x0,556] + ldrh w1, [x0,16] + cmp w1, w25 + bne .L703 + strh wzr, [x0,22] + b .L704 +.L703: + ldrh w1, [x0,48] + cmp w1, w25 + bne .L704 + strh wzr, [x0,54] +.L704: + mov x0, x20 + bl ftl_write_buf + b .L701 +.L702: + ldr w0, [x4,4] + ldr w1, [x4,12] + ldrh w2, [x20,48] + bl lpa_hash_update_ppa + ldrb w0, [x20,2] + tbz x0, 2, .L706 + and w0, w0, -3 + strb w0, [x20,2] + b .L701 +.L706: + mov x0, x20 + bl buf_free + b .L701 +.L708: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldr x25, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size ftl_write_completed, .-ftl_write_completed + .align 2 + .global sblk_init + .type sblk_init, %function +sblk_init: + adrp x0, .LANCHOR0 + mov w1, -1 + add x0, x0, :lo12:.LANCHOR0 + strb w1, [x0,3774] + strb w1, [x0,3773] + strb w1, [x0,2824] + strb w1, [x0,3192] + mov w0, 0 + ret + .size sblk_init, .-sblk_init + .align 2 + .global dump_sblk_queue + .type dump_sblk_queue, %function +dump_sblk_queue: + stp x29, x30, [sp, -48]! + adrp x0, .LC95 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + str x21, [sp,32] + add x20, x20, :lo12:.LANCHOR0 + add x0, x0, :lo12:.LC95 + ldrb w1, [x20,3774] + bl printk + ldrb w19, [x20,3774] + cmp w19, 255 + beq .L710 + add x20, x20, 728 + sbfiz x19, x19, 6, 32 + adrp x21, .LC96 + add x19, x20, x19 + add x21, x21, :lo12:.LC96 +.L712: + ldrb w1, [x19,1] + mov x0, x21 + ldrb w2, [x19,58] + ldr w3, [x19,40] + bl printk + ldrb w19, [x19] + cmp w19, 255 + beq .L710 + sbfiz x19, x19, 6, 32 + add x19, x20, x19 + b .L712 +.L710: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size dump_sblk_queue, .-dump_sblk_queue + .align 2 + .global queue_lun_state + .type queue_lun_state, %function +queue_lun_state: + adrp x3, .LANCHOR0 + mov w5, w0 + add x3, x3, :lo12:.LANCHOR0 + mov w0, 0 + ldrb w2, [x3,3774] + cmp w2, 255 + beq .L720 + ldrh w8, [x3,3218] + mov w4, 21 + ldrb w7, [x3,3216] + mov w0, 1 + sub w4, w4, w8 + ubfx x9, x5, 21, 3 + lsl w4, w0, w4 + sub w7, w7, #1 + sub w4, w4, #1 + asr w5, w5, w8 + uxth w7, w7 + adrp x10, .L724 + uxth w4, w4 + and w5, w5, w7 + and w5, w5, w4 + add x3, x3, 728 + add x10, x10, :lo12:.L724 +.L727: + add x0, x3, x2, lsl 6 + ldr w6, [x0,40] + ubfx x11, x6, 21, 3 + cmp w11, w9 + bne .L721 + lsr w6, w6, w8 + ldrb w0, [x0,58] + and w6, w7, w6 + and w6, w4, w6 + cmp w6, w5 + bne .L722 + cmp w1, 1 + beq .L725 + b .L720 +.L722: + cmp w1, 3 + bhi .L721 + ldrb w6, [x10,w1,uxtw] + adr x11, .Lrtx724 + add x6, x11, w6, sxtb #2 + br x6 +.Lrtx724: + .section .rodata + .align 0 + .align 2 +.L724: + .byte (.L723 - .Lrtx724) / 4 + .byte (.L725 - .Lrtx724) / 4 + .byte (.L726 - .Lrtx724) / 4 + .byte (.L720 - .Lrtx724) / 4 + .text +.L723: + cmp w0, 2 + b .L736 +.L725: + sub w6, w0, #6 + and w6, w6, -3 + uxtb w6, w6 + cbz w6, .L721 + b .L720 +.L726: + cmp w0, 10 +.L736: + bne .L720 +.L721: + lsl x2, x2, 6 + ldrb w2, [x3,x2] + cmp w2, 255 + bne .L727 + mov w0, 0 +.L720: + ret + .size queue_lun_state, .-queue_lun_state + .align 2 + .global queue_remove_completed_req + .type queue_remove_completed_req, %function +queue_remove_completed_req: + adrp x0, .LANCHOR0 + add x1, x0, :lo12:.LANCHOR0 + ldrb w2, [x1,3774] + cmp w2, 255 + beq .L738 + add x6, x1, 728 + lsl x5, x2, 6 + add x7, x6, x5 + ldrb w3, [x7,58] + sub w3, w3, #11 + uxtb w3, w3 + cmp w3, 1 + bhi .L738 + ldrb w3, [x6,x5] + strb w3, [x1,3774] + mov w3, -1 + strb w3, [x6,x5] + ldrb w3, [x7,59] + cmp w3, 1 + bne .L740 + ldrh w3, [x7,50] + cbnz w3, .L741 + ldrb w3, [x1,3773] + add x1, x1, 3773 + b .L742 +.L741: + ldrb w3, [x1,3192] + add x1, x1, 3192 + b .L742 +.L740: + cbnz w3, .L738 + ldr w3, [x7,36] + cmn w3, #1 + beq .L738 + ldrb w3, [x1,2824] + add x1, x1, 2824 +.L742: + cmp w3, 255 + add x0, x0, :lo12:.LANCHOR0 + bne .L746 + add x0, x0, x2, lsl 6 + ldrb w0, [x0,729] + strb w0, [x1] + b .L738 +.L746: + add x0, x0, 728 +.L753: + mov w1, w3 + sbfiz x3, x3, 6, 32 + ldrb w3, [x0,x3] + cmp w3, 255 + bne .L753 + add x2, x0, x2, lsl 6 + sbfiz x1, x1, 6, 32 + ldrb w2, [x2,1] + strb w2, [x0,x1] +.L738: + ret + .size queue_remove_completed_req, .-queue_remove_completed_req + .align 2 + .global pm_alloc_new_blk + .type pm_alloc_new_blk, %function +pm_alloc_new_blk: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + str x23, [sp,48] + add x3, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + ldr x2, [x3,2800] + ldrh w1, [x2,690] + add w1, w1, 1 + uxth w0, w1 + ldrb w1, [x3,3212] + strh w0, [x2,690] + cmp w1, w0 + bls .L755 + add x0, x2, x0, sxtw 1 + ldrh w1, [x0,672] + mov w0, 65535 + cmp w1, w0 + bne .L756 +.L755: + adrp x22, .LC97 + add x22, x22, :lo12:.LC97 +.L770: + mov w0, 1 + add x21, x19, :lo12:.LANCHOR0 + bl ftl_alloc_sblk + uxth w20, w0 + mov w1, 0 + bl ftl_erase_sblk + ldr x1, [x21,2800] + mov w0, w20 + add x1, x1, 672 + bl ftl_get_blk_list_in_sblk + uxth w0, w0 + cbnz w0, .L757 + mov w1, w20 + mov x0, x22 + bl printk + ldr x0, [x21,2840] + add x20, x0, x20, uxth 2 + ldrb w1, [x20,2] + orr w1, w1, -32 + strb w1, [x20,2] + b .L770 +.L757: + ldr x0, [x21,2800] + mov w1, 1 + mov w3, 65535 + str w1, [x21,3776] + mov x1, 0 + strh wzr, [x0,690] +.L759: + add x4, x0, x1, lsl 1 + mov w2, w1 + ldrh w4, [x4,416] + cmp w4, w3 + beq .L758 + add x1, x1, 1 + cmp x1, 128 + bne .L759 + adrp x0, .LC34 + adrp x1, .LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, :lo12:.LANCHOR3 + mov w2, 188 + bl printk +.L761: + b .L761 +.L758: + add x1, x0, x2, sxtw 1 + strh w20, [x1,416] + ldrh w1, [x0,688] + add w1, w1, 1 + strh w1, [x0,688] +.L756: + add x19, x19, :lo12:.LANCHOR0 + mov w2, 65533 + ldr x0, [x19,2800] + ldrh w1, [x0,690] + add x1, x1, 336 + ldrh w1, [x0,x1,lsl 1] + sub w3, w1, #1 + cmp w2, w3, uxth + bcs .L762 + adrp x0, .LC34 + adrp x1, .LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, :lo12:.LANCHOR3 + mov w2, 193 + bl printk +.L763: + b .L763 +.L762: + ldrh w3, [x19,3218] + mov w2, 21 + strh wzr, [x0,696] + sub w2, w2, w3 + strh w1, [x0,692] + asr w4, w1, w2 + strh w4, [x0,694] + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 12, .L767 + mov w0, 1 + mov w3, w1 + lsl w2, w0, w2 + adrp x0, .LC98 + add x0, x0, :lo12:.LC98 + sub w2, w2, #1 + uxth w4, w4 + bl printk +.L767: + mov w0, 0 + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 64 + ret + .size pm_alloc_new_blk, .-pm_alloc_new_blk + .align 2 + .global pm_select_ram_region + .type pm_select_ram_region, %function +pm_select_ram_region: + adrp x3, .LANCHOR0 + mov x0, 0 + stp x29, x30, [sp, -16]! + add x3, x3, :lo12:.LANCHOR0 + mov w4, 65535 + add x29, sp, 0 +.L774: + add x2, x3, 3784 + lsl x5, x0, 4 + uxth w1, w0 + ldrh w5, [x5,x2] + cmp w5, w4 + beq .L780 + add x0, x0, 1 + cmp x0, 32 + bne .L774 + mov x1, 0 + mov w4, 32768 +.L776: + add x3, x2, x1, lsl 4 + uxth w5, w1 + ldrh w3, [x3,2] + tbnz x3, 15, .L775 + cmp w3, w4 + bcs .L775 + mov w4, w3 + mov w0, w5 +.L775: + add x1, x1, 1 + cmp x1, 32 + bne .L776 + cmp w0, 32 + mov w3, w0 + bne .L773 + adrp x0, .LANCHOR4-56 + adrp x1, .LANCHOR0 + add x1, x1, :lo12:.LANCHOR0 + mov w2, 0 + add x1, x1, 3784 + ldrb w4, [x0,#:lo12:.LANCHOR4-56] + mov w0, -1 +.L778: + ldrh w6, [x1,2] + cmp w6, w0 + bcs .L777 + ldrh w5, [x1] + cmp w5, w4 + csel w0, w0, w6, eq + cmp w5, w4 + csel w3, w3, w2, eq +.L777: + add w2, w2, 1 + add x1, x1, 16 + uxth w2, w2 + cmp w2, 32 + bne .L778 + cmp w3, 32 + mov w0, w3 + bne .L773 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 24 + mov w2, 289 + bl printk +.L779: + b .L779 +.L780: + mov w0, w1 +.L773: + ldp x29, x30, [sp], 16 + ret + .size pm_select_ram_region, .-pm_select_ram_region + .align 2 + .global ftl_memset + .type ftl_memset, %function +ftl_memset: + stp x29, x30, [sp, -16]! + uxtw x2, w2 + add x29, sp, 0 + bl memset + ldp x29, x30, [sp], 16 + ret + .size ftl_memset, .-ftl_memset + .align 2 + .global flash_lsb_page_tbl_build + .type flash_lsb_page_tbl_build, %function +flash_lsb_page_tbl_build: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + cbnz w0, .L788 + mov x0, 0 + add x2, x19, :lo12:.LANCHOR0 +.L789: + add x1, x2, 172 + strh w0, [x1,x0,lsl 1] + add x0, x0, 1 + cmp x0, 256 + bne .L789 +.L795: + adrp x20, .LANCHOR4 + mov w1, 255 + add x20, x20, :lo12:.LANCHOR4 + mov w2, 1024 + sub x0, x20, #52 + add x19, x19, :lo12:.LANCHOR0 + bl ftl_memset + mov x0, 0 + b .L790 +.L788: + cmp w0, 1 + bne .L791 + mov x0, 0 + mov w4, 3 + mov w5, 2 + add x3, x19, :lo12:.LANCHOR0 +.L794: + cmp x0, 3 + uxth w2, w0 + mov w1, w2 + bls .L792 + ubfiz w1, w2, 1, 15 + and w2, w2, 1 + cmp w2, wzr + csel w2, w4, w5, ne + sub w1, w1, w2 + uxth w1, w1 +.L792: + add x2, x3, 172 + strh w1, [x2,x0,lsl 1] + add x0, x0, 1 + cmp x0, 256 + bne .L794 + b .L795 +.L791: + cmp w0, 2 + bne .L796 + mov w1, 65535 + mov x0, 0 + add x4, x19, :lo12:.LANCHOR0 +.L798: + add x3, x4, 172 + cmp x0, 1 + uxth w2, w0 + csel w2, w1, w2, hi + add w1, w1, 2 + strh w2, [x3,x0,lsl 1] + add x0, x0, 1 + cmp x0, 256 + uxth w1, w1 + bne .L798 + b .L795 +.L796: + cmp w0, 3 + bne .L799 + mov x0, 0 + mov w4, 5 + mov w5, 4 + add x3, x19, :lo12:.LANCHOR0 +.L802: + cmp x0, 5 + uxth w2, w0 + mov w1, w2 + bls .L800 + ubfiz w1, w2, 1, 15 + and w2, w2, 1 + cmp w2, wzr + csel w2, w4, w5, ne + sub w1, w1, w2 + uxth w1, w1 +.L800: + add x2, x3, 172 + strh w1, [x2,x0,lsl 1] + add x0, x0, 1 + cmp x0, 256 + bne .L802 + b .L795 +.L799: + cmp w0, 4 + bne .L803 + add x2, x19, :lo12:.LANCHOR0 + mov w5, 7 + add x1, x2, 172 + mov w4, 6 + strh w0, [x1,8] + mov w0, 5 + strh wzr, [x2,172] + mov w2, 1 + strh w0, [x1,10] + mov w0, 7 + strh w2, [x1,2] + mov w2, 2 + strh w0, [x1,12] + mov w0, 8 + strh w2, [x1,4] + mov w2, 3 + strh w0, [x1,14] + mov w0, 8 + strh w2, [x1,6] +.L805: + and w3, w0, 1 + ubfiz w2, w0, 1, 15 + add w0, w0, 1 + cmp w3, wzr + csel w3, w5, w4, ne + add x1, x1, 2 + uxth w0, w0 + sub w2, w2, w3 + cmp w0, 256 + strh w2, [x1,14] + bne .L805 + b .L795 +.L803: + cmp w0, 5 + bne .L806 + mov x0, 0 + add x2, x19, :lo12:.LANCHOR0 +.L807: + add x1, x2, 172 + strh w0, [x1,x0,lsl 1] + add x0, x0, 1 + cmp x0, 16 + bne .L807 + mov x0, 0 +.L808: + add x2, x1, x0 + add w3, w0, 16 + add x0, x0, 2 + cmp x0, 480 + strh w3, [x2,32] + bne .L808 + b .L795 +.L806: + cmp w0, 8 + bne .L795 + mov x0, 0 + add x2, x19, :lo12:.LANCHOR0 +.L809: + add x1, x2, 172 + strh w0, [x0,x1] + add x0, x0, 2 + cmp x0, 512 + bne .L809 + b .L795 +.L790: + add x1, x19, 172 + sub x2, x20, #52 + ldrh w1, [x0,x1] + add x0, x0, 2 + cmp x0, 512 + strh w1, [x2,w1,sxtw 1] + bne .L790 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size flash_lsb_page_tbl_build, .-flash_lsb_page_tbl_build + .align 2 + .global flash_die_info_init + .type flash_die_info_init, %function +flash_die_info_init: + stp x29, x30, [sp, -112]! + adrp x1, .LANCHOR3 + adrp x0, .LC0 + add x29, sp, 0 + stp x19, x20, [sp,16] + add x1, x1, :lo12:.LANCHOR3 + adrp x19, .LANCHOR2 + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + add x1, x1, 48 + add x25, x19, :lo12:.LANCHOR2 + add x0, x0, :lo12:.LC0 + adrp x21, .LANCHOR0 + add x20, x21, :lo12:.LANCHOR0 + adrp x22, .LANCHOR4 + stp x23, x24, [sp,48] + stp x27, x28, [sp,80] + bl printk + add x26, x22, :lo12:.LANCHOR4 + ldrh w0, [x25,394] + mov w2, 8 + ldrb w1, [x25,380] + mov x24, 0 + strh w0, [x20,170] + add x25, x25, 369 + ldrh w0, [x25,9] + add x27, x20, 688 + strb wzr, [x20,57] + sdiv w0, w0, w1 + mov w1, 0 + strh w0, [x26,972] + add x0, x20, 160 + bl ftl_memset + add x0, x26, 976 + mov w1, 0 + mov w2, 32 + bl ftl_memset + ldrb w23, [x25,-1] +.L827: + mov x0, x25 + add x1, x27, x24, lsl 3 + mov w2, w23 + bl flash_mem_cmp8 + cbnz w0, .L826 + ldrb w1, [x20,57] + add x2, x26, 976 + str w0, [x2,w1,sxtw 2] + add w0, w1, 1 + add x1, x20, x1, sxtw + strb w0, [x20,57] + strb w24, [x1,160] +.L826: + add x24, x24, 1 + cmp x24, 4 + bne .L827 + add x0, x19, :lo12:.LANCHOR2 + add x1, x0, 368 + ldrb w2, [x1,8] + cmp w2, 2 + beq .L828 +.L832: + add x19, x19, :lo12:.LANCHOR2 + add x21, x21, :lo12:.LANCHOR0 + add x22, x22, :lo12:.LANCHOR4 + ldp x23, x24, [sp,48] + ldrb w1, [x19,381] + ldrb w0, [x21,57] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + mul w0, w0, w1 + ldrh w1, [x19,382] + ldp x19, x20, [sp,16] + mul w0, w0, w1 + strh w0, [x22,1008] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 112 + ret +.L828: + add x24, x21, :lo12:.LANCHOR0 + ldrh w20, [x1,14] + ldrb w27, [x1,23] + mov x25, 0 + and w20, w20, 65280 + add x26, x0, 369 + ldrh w2, [x24,170] + add x3, x24, 688 + add x4, x22, :lo12:.LANCHOR4 + mul w20, w20, w2 + ldrb w2, [x1,13] + mul w20, w20, w2 + lsl w28, w20, 1 +.L831: + add x1, x3, x25, lsl 3 + mov x0, x26 + mov w2, w23 + str x4, [x29,96] + str x3, [x29,104] + bl flash_mem_cmp8 + ldr x3, [x29,104] + ldr x4, [x29,96] + cbnz w0, .L829 + ldrb w1, [x24,57] + add x0, x4, 976 + cmp w27, wzr + csel w2, w20, w28, eq + str w2, [x0,w1,sxtw 2] + add w0, w1, 1 + add x1, x24, x1, sxtw + strb w0, [x24,57] + strb w25, [x1,160] +.L829: + add x25, x25, 1 + cmp x25, 4 + bne .L831 + b .L832 + .size flash_die_info_init, .-flash_die_info_init + .align 2 + .global lpa_hash_init + .type lpa_hash_init, %function +lpa_hash_init: + stp x29, x30, [sp, -32]! + mov w1, 255 + mov w2, 512 + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR0 + add x19, x19, :lo12:.LANCHOR0 + add x0, x19, 3240 + bl ftl_memset + ldrh w0, [x19,3234] + mov w1, 255 + ldrb w2, [x19,3212] + mul w2, w0, w2 + ldr x0, [x19,3760] + lsl w2, w2, 2 + bl ftl_memset + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size lpa_hash_init, .-lpa_hash_init + .align 2 + .global lpa_rebuild_hash + .type lpa_rebuild_hash, %function +lpa_rebuild_hash: + adrp x0, .LANCHOR2+400 + stp x29, x30, [sp, -32]! + add x29, sp, 0 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + str x19, [sp,16] + tbz x0, 12, .L840 + adrp x1, .LANCHOR3 + adrp x0, .LC99 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC99 + add x1, x1, 72 + mov w2, 199 + mov w3, 0 + bl printk +.L840: + adrp x19, .LANCHOR0 + mov w1, 255 + add x19, x19, :lo12:.LANCHOR0 + mov w2, 512 + add x0, x19, 3240 + bl ftl_memset + ldrh w0, [x19,3234] + mov w1, 255 + ldrb w2, [x19,3212] + mul w2, w0, w2 + ldr x0, [x19,3760] + lsl w2, w2, 2 + bl ftl_memset + mov w0, 0 +.L841: + ldrh w1, [x19,3234] + ldrb w2, [x19,3212] + mul w1, w1, w2 + cmp w0, w1, lsl 1 + bge .L850 + uxtw x2, w0 + ldr x1, [x19,3752] + ldr w1, [x1,x2,lsl 2] + cmn w1, #1 + beq .L842 + uxtb w1, w1 + add x3, x19, 3240 + ldrh w4, [x3,w1,sxtw 1] + strh w0, [x3,w1,sxtw 1] + ldr x1, [x19,3760] + strh w4, [x1,x2,lsl 1] +.L842: + add w0, w0, 1 + uxth w0, w0 + b .L841 +.L850: + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size lpa_rebuild_hash, .-lpa_rebuild_hash + .align 2 + .global zftl_read_flash_info + .type zftl_read_flash_info, %function +zftl_read_flash_info: + stp x29, x30, [sp, -32]! + mov w1, 0 + mov w2, 11 + add x29, sp, 0 + str x19, [sp,16] + mov x19, x0 + bl ftl_memset + adrp x1, .LANCHOR2 + adrp x0, .LANCHOR0 + add x1, x1, :lo12:.LANCHOR2 + add x0, x0, :lo12:.LANCHOR0 + add x1, x1, 368 + mov w5, 1 + ldrb w2, [x1,9] + ldrh w3, [x0,170] + mul w2, w2, w3 + ldrb w3, [x0,148] + strb w3, [x19,7] + uxth w2, w2 + strh w2, [x19,4] + ldrb w3, [x1,13] + mul w2, w3, w2 + ldrh w3, [x1,14] + strb wzr, [x19,10] + mul w2, w2, w3 + ldrb w3, [x1,8] + mul w2, w2, w3 + str w2, [x19] + ldrb w2, [x1,9] + strb w2, [x19,6] + mov w2, 32 + ldrb w4, [x0,57] + ldrb w1, [x1,7] + strb w1, [x19,9] + mov x1, 0 + strb w2, [x19,8] +.L852: + cmp w4, w1, uxtb + bls .L854 + add x2, x0, 160 + ldrb w3, [x19,10] + ldrb w2, [x1,x2] + add x1, x1, 1 + lsl w2, w5, w2 + orr w2, w2, w3 + strb w2, [x19,10] + b .L852 +.L854: + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size zftl_read_flash_info, .-zftl_read_flash_info + .align 2 + .global gc_init + .type gc_init, %function +gc_init: + stp x29, x30, [sp, -48]! + mov w1, 0 + mov w2, 328 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + adrp x20, .LANCHOR4 + add x19, x19, :lo12:.LANCHOR0 + add x20, x20, :lo12:.LANCHOR4 + str x21, [sp,32] + add x21, x19, 2848 + mov x0, x21 + strb wzr, [x19,3209] + strb wzr, [x20,1010] + bl ftl_memset + ldrh w1, [x19,3234] + mov w0, -1 + strh w0, [x19,2848] + lsr w0, w1, 2 + ldrb w2, [x19,3212] + strh w0, [x19,2884] + lsr w3, w1, 1 + strh w0, [x19,3176] + ldrh w0, [x19,3210] + mul w1, w1, w2 + strh w3, [x19,2886] + mul w0, w0, w2 + sub w1, w1, #32 + strh w3, [x20,1014] + lsl w0, w0, 2 + strh w1, [x20,1012] + str xzr, [x19,2856] + bl ftl_malloc + str x0, [x20,1016] + ldrb w1, [x19,3212] + ldrh w0, [x19,3210] + mul w0, w0, w1 + lsl w0, w0, 2 + bl ftl_malloc + str x0, [x20,1024] + ldrh w1, [x19,3210] + ldrb w0, [x19,3212] + mul w0, w1, w0 + bl ftl_malloc + str x0, [x19,3200] + ldrb w1, [x19,3212] + ldrh w0, [x19,3210] + mul w0, w0, w1 + lsl w0, w0, 2 + bl ftl_malloc + str x0, [x19,3184] + ldrb w1, [x19,3212] + ldrh w0, [x19,3210] + mul w0, w0, w1 + lsl w0, w0, 2 + bl ftl_malloc + str x0, [x20,1032] + ldrh w0, [x19,2826] + ldr x21, [sp,32] + lsr w0, w0, 3 + strh w0, [x19,3214] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size gc_init, .-gc_init + .align 2 + .global ftl_open_sblk_init + .type ftl_open_sblk_init, %function +ftl_open_sblk_init: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + adrp x20, .LC97 + adrp x23, .LANCHOR0 + stp x25, x26, [sp,64] + stp x21, x22, [sp,32] + stp x27, x28, [sp,80] + mov x19, x0 + mov w21, w1 + add x25, x0, 16 + mov x26, x23 + add x20, x20, :lo12:.LC97 + mov w24, -1 +.L857: +.L860: + mov w0, w21 + bl ftl_alloc_sblk + uxth w22, w0 + mov w1, 0 + bl ftl_erase_sblk + mov x1, x25 + mov w0, w22 + bl ftl_get_blk_list_in_sblk + uxtb w2, w0 + add x0, x23, :lo12:.LANCHOR0 + strh w22, [x19] + strb w2, [x19,9] + cmp w21, 2 + strh wzr, [x19,2] + mov w3, 0 + ldrh w1, [x0,3234] + strb wzr, [x19,5] + strh wzr, [x19,10] + mul w2, w1, w2 + strh w2, [x19,6] + strb w21, [x19,4] + beq .L858 + ldrb w3, [x0,3212] + mul w3, w1, w3 + uxth w3, w3 +.L858: + add x27, x26, :lo12:.LANCHOR0 + strh w3, [x19,12] + ubfiz x28, x22, 1, 16 + ldrb w2, [x27,3212] + ldr x0, [x27,3752] + add x0, x0, x3, uxth 2 + mul w2, w1, w2 + mov w1, 255 + lsl w2, w2, 2 + bl ftl_memset + ldr x0, [x27,2832] + ldrh w1, [x19,6] + strh w1, [x0,x28] + ldrb w0, [x19,9] + cbnz w0, .L856 + mov x0, x20 + mov w1, w22 + bl printk + ldr x0, [x27,2832] + strh w24, [x0,x28] + mov w0, 7 + strb w0, [x19,4] + b .L860 +.L856: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size ftl_open_sblk_init, .-ftl_open_sblk_init + .align 2 + .global pm_free_sblk + .type pm_free_sblk, %function +pm_free_sblk: + stp x29, x30, [sp, -368]! + add x29, sp, 0 + stp x23, x24, [sp,48] + adrp x23, .LANCHOR4 + stp x19, x20, [sp,16] + add x19, x23, :lo12:.LANCHOR4 + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + ldrh w0, [x19,1040] + cmp w0, 128 + bls .L863 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 96 + mov w2, 74 + bl printk +.L864: + b .L864 +.L863: + add x24, x29, 112 + mov w1, 0 + mov w2, 256 + mov x0, x24 + adrp x21, .LANCHOR0 + bl ftl_memset + add x2, x21, :lo12:.LANCHOR0 + mov w0, 21 + mov w1, 1 + ldrh w9, [x19,1040] + mov x3, 0 + ldr x4, [x2,2800] + ldrh w6, [x2,3218] + ldrb w8, [x2,3216] + sub w0, w0, w6 + ldrh w7, [x4,698] + lsl w0, w1, w0 + sub w0, w0, #1 +.L865: + cmp w7, w3, uxth + bls .L886 + add x1, x4, x3, lsl 2 + mov x2, 0 + ldr w1, [x1,704] + lsr w1, w1, w6 + and w1, w1, w0 + udiv w1, w1, w8 + uxth w1, w1 +.L866: + cmp w9, w2, uxth + bls .L887 + add x5, x4, x2, lsl 1 + ldrh w5, [x5,416] + cmp w5, w1 + bne .L867 + ldrh w5, [x24,x2,lsl 1] + add w5, w5, 1 + strh w5, [x24,x2,lsl 1] +.L867: + add x2, x2, 1 + b .L866 +.L887: + add x3, x3, 1 + b .L865 +.L886: + add x1, x21, :lo12:.LANCHOR0 + mov w25, 0 + adrp x26, .LC100 + mov w19, w25 + mov w28, 65535 + add x26, x26, :lo12:.LC100 + ldrb w0, [x1,3212] + mov w5, -1 + ldrh w20, [x1,3234] + mul w20, w0, w20 + uxth w20, w20 +.L870: + add x0, x23, :lo12:.LANCHOR4 + ldrh w0, [x0,1040] + cmp w0, w19 + bls .L888 + add x1, x21, :lo12:.LANCHOR0 + sxtw x22, w19 + add x0, x22, 208 + ldr x4, [x1,2800] + ldrb w2, [x1,3216] + ldrh w3, [x4,x0,lsl 1] + ldrh w0, [x4,692] + sdiv w0, w0, w2 + cmp w0, w3 + bne .L871 + ldrb w0, [x1,3212] + ldrh w1, [x1,3234] + mul w0, w0, w1 + strh w0, [x24,w19,sxtw 1] +.L871: + ldrh w1, [x24,x22,lsl 1] + cmp w20, w1 + bls .L872 + cmp w1, wzr + csel w25, w25, w19, eq + csel w20, w20, w1, eq +.L872: + cbnz w1, .L874 + cmp w3, w28 + beq .L874 + ldrh w4, [x4,688] + mov w1, w19 + mov w2, 0 + add x27, x21, :lo12:.LANCHOR0 + mov x0, x26 + str x5, [x29,104] + add x22, x22, 208 + bl printk + ldr x0, [x27,2800] + ldrh w0, [x0,x22,lsl 1] + bl ftl_free_sblk + ldr x0, [x27,2800] + ldr x5, [x29,104] + strh w5, [x0,x22,lsl 1] + ldrh w1, [x0,688] + sub w1, w1, #1 + strh w1, [x0,688] +.L874: + add w19, w19, 1 + uxth w19, w19 + b .L870 +.L888: + mov w0, w25 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 368 + ret + .size pm_free_sblk, .-pm_free_sblk + .align 2 + .global ftl_memcpy + .type ftl_memcpy, %function +ftl_memcpy: + stp x29, x30, [sp, -16]! + uxtw x2, w2 + add x29, sp, 0 + bl memcpy + ldp x29, x30, [sp], 16 + ret + .size ftl_memcpy, .-ftl_memcpy + .align 2 + .global flash_into_data_init + .type flash_into_data_init, %function +flash_into_data_init: + stp x29, x30, [sp, -32]! + adrp x2, .LANCHOR3 + adrp x0, .LC101 + add x29, sp, 0 + str x19, [sp,16] + add x2, x2, :lo12:.LANCHOR3 + adrp x19, .LANCHOR0 + mov w1, 100 + add x19, x19, :lo12:.LANCHOR0 + add x2, x2, 112 + add x0, x0, :lo12:.LC101 + bl printk + ldr x0, [x19,152] + mov w1, 0 + mov w2, 2048 + bl ftl_memset + ldr x1, [x19,152] + mov w0, 21321 + movk w0, 0x5359, lsl 16 + mov w2, 32 + str w0, [x1] + mov w1, 2032 + ldr x0, [x19,152] + add x0, x0, 80 + str w1, [x0,-72] + mov w1, 1 + strh w1, [x0,-64] + add x1, x19, 64 + bl ftl_memcpy + ldr x0, [x19,152] + adrp x1, .LANCHOR2 + add x1, x1, :lo12:.LANCHOR2 + mov w2, 32 + add x1, x1, 368 + add x0, x0, 48 + bl ftl_memcpy + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size flash_into_data_init, .-flash_into_data_init + .align 2 + .global ftl_memcpy32 + .type ftl_memcpy32, %function +ftl_memcpy32: + mov x3, 0 +.L892: + cmp w2, w3 + bls .L894 + ldr w4, [x1,x3,lsl 2] + str w4, [x0,x3,lsl 2] + add x3, x3, 1 + b .L892 +.L894: + ret + .size ftl_memcpy32, .-ftl_memcpy32 + .align 2 + .global ftl_memcmp + .type ftl_memcmp, %function +ftl_memcmp: + stp x29, x30, [sp, -16]! + uxtw x2, w2 + add x29, sp, 0 + bl memcmp + ldp x29, x30, [sp], 16 + ret + .size ftl_memcmp, .-ftl_memcmp + .align 2 + .global js_hash + .type js_hash, %function +js_hash: + mov x5, x0 + mov w0, 42982 + mov x2, 0 + movk w0, 0x47c6, lsl 16 +.L897: + cmp w1, w2 + bls .L899 + lsl w3, w0, 5 + ldrb w4, [x5,x2] + add w3, w3, w0, lsr 2 + add x2, x2, 1 + add w3, w3, w4 + eor w0, w0, w3 + b .L897 +.L899: + ret + .size js_hash, .-js_hash + .align 2 + .global timer_get_time + .type timer_get_time, %function +timer_get_time: + adrp x0, jiffies + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x1, [x0,#:lo12:jiffies] + adrp x0, .LANCHOR4+1048 + ldr x0, [x0,#:lo12:.LANCHOR4+1048] + sub x0, x1, x0 + bl jiffies_to_msecs + ldp x29, x30, [sp], 16 + ret + .size timer_get_time, .-timer_get_time + .align 2 + .global StorageSysDataLoad + .type StorageSysDataLoad, %function +StorageSysDataLoad: + stp x29, x30, [sp, -48]! + mov w2, 512 + add x29, sp, 0 + stp x19, x20, [sp,16] + mov w20, w0 + mov x19, x1 + mov x0, x1 + mov w1, 0 + bl ftl_memset + bl rknand_device_lock + adrp x0, .LANCHOR4+1056 + mov x2, x19 + mov w1, 1 + ldr x0, [x0,#:lo12:.LANCHOR4+1056] + ldr x3, [x0,24] + mov w0, w20 + blr x3 + str x0, [x29,40] + bl rknand_device_unlock + ldr x0, [x29,40] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size StorageSysDataLoad, .-StorageSysDataLoad + .align 2 + .global StorageSysDataStore + .type StorageSysDataStore, %function +StorageSysDataStore: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x0, [x29,16] + str x1, [x29,24] + bl rknand_device_lock + adrp x1, .LANCHOR4+1056 + ldr x2, [x29,24] + ldr x0, [x29,16] + ldr x1, [x1,#:lo12:.LANCHOR4+1056] + ldr x3, [x1,32] + mov w1, 1 + blr x3 + str x0, [x29,24] + bl rknand_device_unlock + ldr x0, [x29,24] + ldp x29, x30, [sp], 32 + ret + .size StorageSysDataStore, .-StorageSysDataStore + .align 2 + .global FlashBootVendorRead + .type FlashBootVendorRead, %function +FlashBootVendorRead: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + str x0, [x29,24] + str x1, [x29,32] + str x2, [x29,40] + bl rknand_device_lock + adrp x3, .LANCHOR4+1056 + ldr x1, [x29,32] + ldr x2, [x29,40] + ldr x0, [x29,24] + ldr x3, [x3,#:lo12:.LANCHOR4+1056] + ldr x3, [x3,8] + blr x3 + str x0, [x29,40] + bl rknand_device_unlock + ldr x0, [x29,40] + ldp x29, x30, [sp], 48 + ret + .size FlashBootVendorRead, .-FlashBootVendorRead + .align 2 + .global FlashBootVendorWrite + .type FlashBootVendorWrite, %function +FlashBootVendorWrite: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + str x0, [x29,24] + str x1, [x29,32] + str x2, [x29,40] + bl rknand_device_lock + adrp x3, .LANCHOR4+1056 + ldr x1, [x29,32] + ldr x2, [x29,40] + ldr x0, [x29,24] + ldr x3, [x3,#:lo12:.LANCHOR4+1056] + ldr x3, [x3,16] + blr x3 + str x0, [x29,40] + bl rknand_device_unlock + ldr x0, [x29,40] + ldp x29, x30, [sp], 48 + ret + .size FlashBootVendorWrite, .-FlashBootVendorWrite + .align 2 + .global flash_sram_load_store + .type flash_sram_load_store, %function +flash_sram_load_store: + adrp x4, .LANCHOR4+1064 + mov x6, x0 + stp x29, x30, [sp, -16]! + uxtw x1, w1 + add x29, sp, 0 + ldr x4, [x4,#:lo12:.LANCHOR4+1064] + add x4, x4, 4096 + cbnz w2, .L906 + add x1, x4, x1 + b .L908 +.L906: + add x0, x4, x1 + mov x1, x6 +.L908: + mov w2, w3 + bl ftl_memcpy + ldp x29, x30, [sp], 16 + ret + .size flash_sram_load_store, .-flash_sram_load_store + .align 2 + .global FlashCs123Init + .type FlashCs123Init, %function +FlashCs123Init: + ret + .size FlashCs123Init, .-FlashCs123Init + .align 2 + .global rk_ftl_de_init + .type rk_ftl_de_init, %function +rk_ftl_de_init: + stp x29, x30, [sp, -16]! + adrp x0, .LC102 + mov w1, 0 + add x29, sp, 0 + add x0, x0, :lo12:.LC102 + bl printk + adrp x0, .LANCHOR4+1056 + ldr x0, [x0,#:lo12:.LANCHOR4+1056] + ldr x0, [x0,80] + blr x0 + ldp x29, x30, [sp], 16 + ret + .size rk_ftl_de_init, .-rk_ftl_de_init + .align 2 + .global rk_ftl_cache_write_back + .type rk_ftl_cache_write_back, %function +rk_ftl_cache_write_back: + adrp x0, .LANCHOR4+1056 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x0, [x0,#:lo12:.LANCHOR4+1056] + ldr x1, [x0,64] + mov w0, 0 + blr x1 + ldp x29, x30, [sp], 16 + ret + .size rk_ftl_cache_write_back, .-rk_ftl_cache_write_back + .align 2 + .global rk_nand_suspend + .type rk_nand_suspend, %function +rk_nand_suspend: + adrp x0, .LANCHOR4+1056 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x0, [x0,#:lo12:.LANCHOR4+1056] + ldr x0, [x0,88] + blr x0 + ldp x29, x30, [sp], 16 + ret + .size rk_nand_suspend, .-rk_nand_suspend + .align 2 + .global rk_nand_resume + .type rk_nand_resume, %function +rk_nand_resume: + adrp x0, .LANCHOR4+1056 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x0, [x0,#:lo12:.LANCHOR4+1056] + ldr x0, [x0,96] + blr x0 + ldp x29, x30, [sp], 16 + ret + .size rk_nand_resume, .-rk_nand_resume + .align 2 + .global rk_ftl_get_capacity + .type rk_ftl_get_capacity, %function +rk_ftl_get_capacity: + adrp x0, .LANCHOR4+1056 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x0, [x0,#:lo12:.LANCHOR4+1056] + ldr x1, [x0,72] + mov w0, 0 + blr x1 + ldp x29, x30, [sp], 16 + ret + .size rk_ftl_get_capacity, .-rk_ftl_get_capacity + .align 2 + .global rk_nandc_get_irq_status + .type rk_nandc_get_irq_status, %function +rk_nandc_get_irq_status: + adrp x1, .LANCHOR4+1056 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x1, [x1,#:lo12:.LANCHOR4+1056] + ldr x1, [x1,120] + blr x1 + ldp x29, x30, [sp], 16 + ret + .size rk_nandc_get_irq_status, .-rk_nandc_get_irq_status + .align 2 + .global rknand_proc_ftlread + .type rknand_proc_ftlread, %function +rknand_proc_ftlread: + adrp x1, .LANCHOR4+1056 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x1, [x1,#:lo12:.LANCHOR4+1056] + ldr x1, [x1,128] + blr x1 + ldp x29, x30, [sp], 16 + ret + .size rknand_proc_ftlread, .-rknand_proc_ftlread + .align 2 + .global FtlWrite + .type FtlWrite, %function +FtlWrite: + adrp x4, .LANCHOR4+1056 + uxtb w0, w0 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x4, [x4,#:lo12:.LANCHOR4+1056] + ldr x4, [x4,48] + blr x4 + ldp x29, x30, [sp], 16 + ret + .size FtlWrite, .-FtlWrite + .align 2 + .global FtlRead + .type FtlRead, %function +FtlRead: + adrp x4, .LANCHOR4+1056 + uxtb w0, w0 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x4, [x4,#:lo12:.LANCHOR4+1056] + ldr x4, [x4,40] + blr x4 + ldp x29, x30, [sp], 16 + ret + .size FtlRead, .-FtlRead + .align 2 + .global FtlDiscard + .type FtlDiscard, %function +FtlDiscard: + adrp x2, .LANCHOR4+1056 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x2, [x2,#:lo12:.LANCHOR4+1056] + ldr x2, [x2,56] + blr x2 + ldp x29, x30, [sp], 16 + ret + .size FtlDiscard, .-FtlDiscard + .align 2 + .global rk_ftl_garbage_collect + .type rk_ftl_garbage_collect, %function +rk_ftl_garbage_collect: + adrp x2, .LANCHOR4+1056 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x2, [x2,#:lo12:.LANCHOR4+1056] + ldr x2, [x2,104] + blr x2 + ldp x29, x30, [sp], 16 + ret + .size rk_ftl_garbage_collect, .-rk_ftl_garbage_collect + .align 2 + .global ReadFlashInfo + .type ReadFlashInfo, %function +ReadFlashInfo: + adrp x1, .LANCHOR4+1056 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldr x1, [x1,#:lo12:.LANCHOR4+1056] + ldr x1, [x1,112] + blr x1 + ldp x29, x30, [sp], 16 + ret + .size ReadFlashInfo, .-ReadFlashInfo + .align 2 + .global rknand_print_hex + .type rknand_print_hex, %function +rknand_print_hex: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + mov x19, 0 + adrp x23, .LC103 + adrp x21, .LC104 + adrp x24, .LC46 + stp x25, x26, [sp,64] + str x27, [sp,80] + mov x22, x1 + mov x27, x0 + mov w25, w2 + uxtw x26, w3 + mov w20, w19 + add x23, x23, :lo12:.LC103 + add x21, x21, :lo12:.LC104 + add x24, x24, :lo12:.LC46 +.L923: + cmp x19, x26 + beq .L931 + cbnz w20, .L924 + mov x0, x23 + mov x1, x27 + mov x2, x22 + mov w3, w19 + bl printk +.L924: + cmp w25, 4 + mov x0, x21 + bne .L925 + ldr w1, [x22,x19,lsl 2] + b .L930 +.L925: + cmp w25, 2 + bne .L927 + ldrsh w1, [x22,x19,lsl 1] + b .L930 +.L927: + ldrb w1, [x22,x19] +.L930: + bl printk + add w20, w20, 1 + cmp w20, 15 + bls .L928 + adrp x1, .LC105 + mov x0, x24 + add x1, x1, :lo12:.LC105 + mov w20, 0 + bl printk +.L928: + add x19, x19, 1 + b .L923 +.L931: + adrp x0, .LC46 + adrp x1, .LC105 + add x1, x1, :lo12:.LC105 + add x0, x0, :lo12:.LC46 + bl printk + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size rknand_print_hex, .-rknand_print_hex + .align 2 + .global hynix_get_read_retry_default + .type hynix_get_read_retry_default, %function +hynix_get_read_retry_default: + stp x29, x30, [sp, -144]! + mov w2, -83 + mov w1, -82 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + stp x25, x26, [sp,64] + mov w25, w0 + add x0, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x27, x28, [sp,80] + cmp w25, 2 + str x19, [x29,128] + ldr x27, [x0,152] + add x0, x27, 112 + str x0, [x29,136] + mov w0, -84 + strb w25, [x27,112] + strb w0, [x27,128] + mov w0, -81 + strb w2, [x27,129] + add x26, x27, 128 + strb w1, [x27,130] + strb w0, [x27,131] + bne .L933 + ldr x1, [x29,136] + mov w0, -89 + strb w0, [x1,16] + adrp x0, .LANCHOR2+425 + mov w1, -9 + strb w1, [x0,#:lo12:.LANCHOR2+425] + b .L988 +.L933: + cmp w25, 3 + bne .L935 + mov x4, 0 +.L936: + sub w0, w4, #80 + strb w0, [x26,x4] + add x4, x4, 1 + cmp x4, 8 + bne .L936 + mov w21, w4 + mov w28, w4 + b .L934 +.L935: + cmp w25, 4 + bne .L937 + mov w4, -52 + strb w4, [x27,128] + mov w4, -65 + strb w4, [x27,129] + mov w4, -86 + mov w21, 8 + strb w4, [x27,130] + mov w4, -85 + strb w2, [x27,133] + mov w28, w21 + strb w4, [x27,131] + mov w4, -51 + strb w1, [x27,134] + strb w4, [x27,132] + strb w0, [x27,135] + b .L934 +.L937: + cmp w25, 5 + bne .L938 + mov w0, 56 + strb w0, [x27,128] + mov w0, 57 + strb w0, [x27,129] + mov w0, 58 + mov w21, 8 + strb w0, [x27,130] + mov w0, 59 + strb w0, [x27,131] + b .L1022 +.L938: + cmp w25, 6 + bne .L939 + mov w0, 14 + strb w0, [x27,128] + mov w0, 15 + strb w0, [x27,129] + mov w0, 16 + mov w21, 12 + strb w0, [x27,130] + mov w0, 17 + strb w0, [x27,131] + b .L1022 +.L939: + cmp w25, 7 + bne .L988 + mov x0, 0 +.L940: + sub w1, w0, #80 + strb w1, [x26,x0] + add x0, x0, 1 + cmp x0, 8 + bne .L940 + mov w0, -44 + mov w21, 12 + strb w0, [x27,136] + mov w28, 10 + mov w0, -43 + strb w0, [x27,137] + b .L934 +.L988: + mov w21, 7 +.L1022: + mov w28, 4 +.L934: + sub w0, w25, #1 + cmp w0, 1 + bhi .L1019 + ldr x0, [x29,128] + adrp x24, .LANCHOR2 + add x24, x24, :lo12:.LANCHOR2 + mov w23, 0 + add x19, x0, :lo12:.LANCHOR0 + mov w27, 55 + add x24, x24, 408 +.L941: + ldrb w0, [x19,57] + cmp w0, w23 + bls .L948 + add x0, x19, x23, sxtw + ldr x2, [x29,136] + ldrb w0, [x0,160] + mov x20, 160 + ldr x22, [x19,8] + mov x25, 0 + ubfiz x1, x0, 8, 8 + madd x20, x0, x20, x2 + add x22, x22, x1 + add x20, x20, 32 +.L943: + str w27, [x22,2056] + ldrb w0, [x26,x25] + str w0, [x22,2052] + mov w0, 80 + bl timer_delay_ns + ldr w0, [x22,2048] + strb w0, [x20,x25] + add x25, x25, 1 + cmp w28, w25, uxtb + bhi .L943 + mov x0, 0 +.L944: + add w2, w0, 8 + mov x1, 0 +.L945: + add x3, x1, x0 + add x1, x1, 4 + add x3, x24, x3 + cmp x1, 24 + ldrb w5, [x3,4] + ldrb w3, [x20,x0] + add w3, w5, w3 + strb w3, [x20,w2,sxtw] + add w2, w2, 8 + bne .L945 + add x0, x0, 1 + cmp x0, 4 + bne .L944 + add w23, w23, 1 + strb wzr, [x20,16] + strb wzr, [x20,24] + strb wzr, [x20,32] + uxtb w23, w23 + strb wzr, [x20,40] + strb wzr, [x20,48] + strb wzr, [x20,41] + strb wzr, [x20,49] + b .L941 +.L1019: + sub w0, w25, #3 + cmp w0, 4 + bhi .L948 + mul w0, w28, w21 + sub w23, w28, #1 + mov w20, 0 + asr w22, w0, 2 + lsl w0, w0, 4 + uxtb x23, w23 + str w0, [x29,120] + lsl w0, w22, 1 + sub w19, w25, #5 + str w0, [x29,124] + adrp x26, .LANCHOR4 + add x0, x23, 1 + str x0, [x29,112] +.L949: + ldr x0, [x29,128] + add x0, x0, :lo12:.LANCHOR0 + ldrb w1, [x0,57] + cmp w1, w20 + bhi .L987 +.L948: + ldr x0, [x29,136] + strb w28, [x0,1] + strb w21, [x0,2] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret +.L987: + add x1, x0, x20, sxtw + ldrb w1, [x1,160] + ldr x0, [x0,8] + mov x24, 160 + ubfiz x2, x1, 8, 8 + ldr x3, [x29,136] + add x23, x0, x2 + madd x24, x1, x24, x3 + mov w1, 255 + str w1, [x23,2056] + str x1, [x29,104] + add x24, x24, 32 + bl nandc_wait_flash_ready + mov w0, 54 + cmp w25, 4 + str w0, [x23,2056] + ldr x1, [x29,104] + bne .L950 + mov w0, 64 + str w1, [x23,2052] + str w0, [x23,2048] + mov w0, 204 + b .L1023 +.L950: + cmp w19, 1 + bhi .L952 + ldrb w0, [x27,128] + str w0, [x23,2052] + mov w0, 82 + b .L1024 +.L952: + mov w0, 174 + str w0, [x23,2052] + str wzr, [x23,2048] + mov w0, 176 +.L1023: + str w0, [x23,2052] + mov w0, 77 +.L1024: + str w0, [x23,2048] + mov w0, 22 + str w0, [x23,2056] + mov w0, 23 + str w0, [x23,2056] + mov w0, 4 + str w0, [x23,2056] + mov w0, 25 + str w0, [x23,2056] + cmp w25, 6 + str wzr, [x23,2056] + str wzr, [x23,2052] + str wzr, [x23,2052] + bne .L953 + mov w0, 31 + str w0, [x23,2052] + b .L954 +.L953: + str wzr, [x23,2052] +.L954: + mov w7, 2 + str w7, [x23,2052] + str wzr, [x23,2052] + mov w0, 48 + str w0, [x23,2056] + str x7, [x29,104] + bl nandc_wait_flash_ready + cmp w19, 1 + mov w1, 16 + bls .L956 + ldr x7, [x29,104] + cmp w25, 7 + mov w1, 32 + csel w1, w1, w7, eq +.L956: + adrp x0, .LANCHOR4 + mov x7, 0 + add x0, x0, :lo12:.LANCHOR4 + ldr x0, [x0,1072] +.L957: + ldr w8, [x23,2048] + strb w8, [x0,x7] + add x7, x7, 1 + cmp w1, w7, uxtb + bhi .L957 + cmp w25, 7 + bne .L958 + mov w1, 0 +.L960: + ldrb w7, [x0] + cmp w7, 12 + beq .L959 + ldrb w7, [x0,1] + cmp w7, 10 + beq .L959 + add w1, w1, 1 + add x0, x0, 4 + uxtb w1, w1 + cmp w1, 8 + bne .L960 + b .L961 +.L959: + cmp w1, 7 + bne .L962 +.L961: + adrp x0, .LC106 + mov w1, 0 + add x0, x0, :lo12:.LC106 + bl printk +.L963: + b .L963 +.L958: + cmp w25, 6 + bne .L962 + mov x1, 0 +.L964: + ldrb w7, [x0,x1] + cmp w7, 12 + beq .L962 + add x7, x0, x1 + ldrb w7, [x7,8] + cmp w7, 4 + beq .L962 + add x1, x1, 1 + cmp x1, 8 + bne .L964 + adrp x0, .LC106 + mov w1, 0 + add x0, x0, :lo12:.LC106 + bl printk +.L966: + b .L966 +.L962: + add x0, x26, :lo12:.LANCHOR4 + ldr x9, [x0,1072] + mov x0, 0 +.L967: + ldr w1, [x29,120] + cmp w1, w0 + ble .L1026 + ldr w1, [x23,2048] + strb w1, [x9,x0] + add x0, x0, 1 + b .L967 +.L1026: + add x0, x26, :lo12:.LANCHOR4 + mov w8, w22 + mov w7, 8 + ldr x11, [x0,1072] +.L970: + mov w0, 0 +.L969: + add w1, w0, w8 + add w0, w0, 1 + sbfiz x1, x1, 2, 32 + cmp w0, w22 + ldr w10, [x11,x1] + mvn w10, w10 + str w10, [x11,x1] + bne .L969 + ldr w0, [x29,124] + subs w7, w7, #1 + add w8, w8, w0 + bne .L970 + mov x7, 0 + mov w15, 1 +.L971: + add x0, x26, :lo12:.LANCHOR4 + mov w1, 0 + mov w10, w1 + ldr x14, [x0,1072] +.L975: + lsl w8, w15, w10 + mov w12, w7 + mov w0, 16 + mov w11, 0 +.L973: + ldr w13, [x14,w12,sxtw 2] + add w12, w12, w22 + and w13, w8, w13 + cmp w13, w8 + csinc w11, w11, w11, ne + subs w0, w0, #1 + bne .L973 + cmp w11, 9 + orr w8, w1, w8 + add w10, w10, 1 + csel w1, w8, w1, cs + cmp w10, 32 + bne .L975 + str w1, [x14,x7,lsl 2] + add x7, x7, 1 + cmp w22, w7 + bgt .L971 + add x1, x26, :lo12:.LANCHOR4 + mov x7, 0 + mov w8, w7 + ldr x1, [x1,1072] +.L978: + ldr w10, [x1,x7] + add x7, x7, 4 + cmp w10, wzr + csinc w8, w8, w8, ne + cmp x7, 32 + bne .L978 + cmp w8, 7 + ble .L979 + adrp x0, .LC107 + mov w2, 1 + add x0, x0, :lo12:.LC107 + mov w3, 1024 + bl rknand_print_hex + adrp x0, .LC106 + mov w1, 0 + add x0, x0, :lo12:.LC106 + bl printk +.L980: + b .L980 +.L979: + cmp w25, 6 + mov w7, 4 + beq .L981 + cmp w25, 7 + mov w7, 10 + mov w1, 8 + csel w7, w1, w7, ne +.L981: + mov w8, 0 +.L982: + mov x1, 0 +.L983: + add w10, w0, w1 + ldrb w11, [x9,x1] + add x1, x1, 1 + cmp w28, w1, uxtb + strb w11, [x24,w10,sxtw] + bhi .L983 + add w8, w8, 1 + ldr x1, [x29,112] + cmp w8, w21 + add w0, w0, w7 + add x9, x9, x1 + blt .L982 + mov w24, 255 + str w24, [x23,2056] + bl nandc_wait_flash_ready + cmp w19, 1 + mov w0, 56 + bhi .L1025 + mov w0, 54 + str w0, [x23,2056] + ldrb w0, [x27,128] + str w0, [x23,2052] + mov w0, 22 + str wzr, [x23,2048] + str w0, [x23,2056] + mov w0, 48 + str wzr, [x23,2056] + str wzr, [x23,2052] + str wzr, [x23,2052] + str w24, [x23,2052] + str w24, [x23,2052] + str w24, [x23,2052] +.L1025: + str w0, [x23,2056] + add w20, w20, 1 + bl nandc_wait_flash_ready + uxtb w20, w20 + b .L949 + .size hynix_get_read_retry_default, .-hynix_get_read_retry_default + .align 2 + .global flash_get_read_retry_tbl + .type flash_get_read_retry_tbl, %function +flash_get_read_retry_tbl: + adrp x0, .LANCHOR2+387 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrb w0, [x0,#:lo12:.LANCHOR2+387] + sub w1, w0, #1 + uxtb w1, w1 + cmp w1, 6 + bhi .L1027 + bl hynix_get_read_retry_default +.L1027: + ldp x29, x30, [sp], 16 + ret + .size flash_get_read_retry_tbl, .-flash_get_read_retry_tbl + .align 2 + .global nandc_xfer_done + .type nandc_xfer_done, %function +nandc_xfer_done: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x20, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + ldr x0, [x20,8] + bl wait_for_nandc_xfer_completed + ldr x21, [x20,8] + ldrb w0, [x19,#:lo12:.LANCHOR0] + cmp w0, 9 + bne .L1030 + ldr w0, [x21,16] + str w0, [x29,64] + ldr w20, [x21,48] + ubfx x20, x20, 1, 1 + cbnz w20, .L1050 + adrp x22, .LC110 + adrp x23, .LC109 + add x22, x22, :lo12:.LC110 + add x23, x23, :lo12:.LC109 + b .L1032 +.L1050: + adrp x22, .LC108 + adrp x23, .LC109 + mov w20, 0 + add x22, x22, :lo12:.LC108 + add x23, x23, :lo12:.LC109 +.L1031: + ldr w2, [x21,64] + ldr w1, [x29,64] + ubfx x2, x2, 16, 6 + ubfx x1, x1, 22, 6 + cmp w2, w1 + bge .L1038 + add x0, x19, :lo12:.LANCHOR0 + ldr x0, [x0,8] + ldr w0, [x0] + str w0, [x29,72] + ldr w0, [x29,72] + tbz x0, 13, .L1033 + ldr w0, [x29,72] + tbz x0, 17, .L1033 +.L1038: + add x20, x19, :lo12:.LANCHOR0 + add x20, x20, 104 + ldr w0, [x20,32] + cbz w0, .L1039 + ldr w1, [x29,64] + mov w2, 0 + ldr w0, [x20,24] + ubfx x1, x1, 22, 6 + lsl w1, w1, 10 + bl rknand_dma_unmap_single + ldr w1, [x29,64] + ldr w0, [x20,28] + ubfx x1, x1, 22, 6 + lsl w1, w1, 2 + b .L1075 +.L1033: + add w20, w20, 1 + and w0, w20, 16777215 + cbnz w0, .L1031 + ldr w2, [x21,64] + mov w1, w20 + ldr w3, [x29,64] + mov x0, x22 + ubfx x2, x2, 16, 5 + ubfx x3, x3, 22, 6 + bl printk + add x1, x19, :lo12:.LANCHOR0 + mov x0, x23 + mov w2, 4 + mov w3, 256 + ldr x1, [x1,8] + bl rknand_print_hex + b .L1031 +.L1041: + add x24, x19, :lo12:.LANCHOR0 + add w20, w20, 1 + ldr x0, [x24,8] + ldr w0, [x0,16] + str w0, [x29,64] + and w0, w20, 16777215 + cbnz w0, .L1032 + ldr w2, [x29,64] + mov w1, w20 + ldr w3, [x21,64] + mov x0, x22 + ubfx x3, x3, 16, 6 + bl printk + ldr x1, [x24,8] + mov x0, x23 + mov w2, 4 + mov w3, 256 + bl rknand_print_hex +.L1032: + ldr w0, [x29,64] + tbz x0, 20, .L1041 + add x20, x19, :lo12:.LANCHOR0 + add x20, x20, 104 + ldr w0, [x20,32] + cbz w0, .L1039 + ldr w1, [x29,64] + mov w2, 1 + ldr w0, [x20,24] + ubfx x1, x1, 22, 6 + lsl w1, w1, 10 + bl rknand_dma_unmap_single + ldr w1, [x29,64] + ldr w0, [x20,28] + ubfx x1, x1, 22, 6 + lsl w1, w1, 2 + b .L1074 +.L1030: + ldr w0, [x21,8] + str w0, [x29,64] + ldr w20, [x21,16] + ubfx x20, x20, 1, 1 + cbnz w20, .L1051 + adrp x22, .LC110 + adrp x23, .LC109 + add x22, x22, :lo12:.LC110 + add x23, x23, :lo12:.LC109 + b .L1043 +.L1051: + adrp x22, .LC108 + adrp x23, .LC109 + mov w20, 0 + add x22, x22, :lo12:.LC108 + add x23, x23, :lo12:.LC109 +.L1042: + ldr w2, [x21,28] + ldr w1, [x29,64] + ubfx x2, x2, 16, 5 + ubfx x1, x1, 22, 6 + cmp w2, w1 + bge .L1045 + add x0, x19, :lo12:.LANCHOR0 + ldr x0, [x0,8] + ldr w0, [x0] + str w0, [x29,72] + ldr w0, [x29,72] + tbz x0, 13, .L1044 + ldr w0, [x29,72] + tbz x0, 17, .L1044 + ldr w1, [x29,72] + adrp x0, .LC111 + add x0, x0, :lo12:.LC111 + bl printk + b .L1045 +.L1044: + add w20, w20, 1 + and w0, w20, 16777215 + cbnz w0, .L1042 + ldr w2, [x21,28] + mov w1, w20 + ldr w3, [x29,64] + mov x0, x22 + ubfx x2, x2, 16, 5 + ubfx x3, x3, 22, 6 + bl printk + add x1, x19, :lo12:.LANCHOR0 + mov x0, x23 + mov w2, 4 + mov w3, 256 + ldr x1, [x1,8] + bl rknand_print_hex + b .L1042 +.L1045: + add x20, x19, :lo12:.LANCHOR0 + add x20, x20, 104 + ldr w0, [x20,32] + cbz w0, .L1039 + ldr w1, [x29,64] + mov w2, 0 + ldr w0, [x20,24] + ubfx x1, x1, 22, 6 + lsl w1, w1, 10 + bl rknand_dma_unmap_single + ldr w1, [x29,64] + ldr w0, [x20,28] + ubfx x1, x1, 22, 6 + lsl w1, w1, 7 +.L1075: + mov w2, 0 + b .L1073 +.L1049: + add x24, x19, :lo12:.LANCHOR0 + add w20, w20, 1 + ldr x0, [x24,8] + ldr w0, [x0,8] + str w0, [x29,64] + and w0, w20, 16777215 + cbnz w0, .L1043 + ldr w2, [x29,64] + mov w1, w20 + ldr w3, [x21,28] + mov x0, x22 + ubfx x3, x3, 16, 5 + bl printk + ldr x1, [x24,8] + mov x0, x23 + mov w2, 4 + mov w3, 256 + bl rknand_print_hex +.L1043: + ldr w0, [x29,64] + tbz x0, 20, .L1049 + add x20, x19, :lo12:.LANCHOR0 + add x20, x20, 104 + ldr w0, [x20,32] + cbz w0, .L1039 + ldr w1, [x29,64] + mov w2, 1 + ldr w0, [x20,24] + ubfx x1, x1, 22, 6 + lsl w1, w1, 10 + bl rknand_dma_unmap_single + ldr w1, [x29,64] + ldr w0, [x20,28] + ubfx x1, x1, 22, 6 + lsl w1, w1, 7 +.L1074: + mov w2, 1 +.L1073: + bl rknand_dma_unmap_single +.L1039: + add x19, x19, :lo12:.LANCHOR0 + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + str wzr, [x19,136] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 80 + ret + .size nandc_xfer_done, .-nandc_xfer_done + .align 2 + .global nandc_xfer + .type nandc_xfer, %function +nandc_xfer: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x19, x20, [sp,16] + uxtb w21, w2 + uxtb w19, w1 + mov w0, w19 + mov x2, x3 + mov w1, w21 + mov x22, x3 + mov x3, x4 + str x4, [x29,56] + bl nandc_xfer_start + bl nandc_xfer_done + mov w0, 0 + cbnz w19, .L1077 + adrp x20, .LANCHOR0 + ldr x4, [x29,56] + add x3, x20, :lo12:.LANCHOR0 + ldrb w1, [x20,#:lo12:.LANCHOR0] + cmp w1, 9 + bne .L1078 + ldr x5, [x3,8] + lsr w21, w21, 2 + mov w4, 1 + mov w3, w0 +.L1079: + cmp w3, w21 + bcs .L1105 + uxtw x1, w3 + add x1, x1, 84 + ldr w1, [x5,x1,lsl 2] + str w1, [x29,72] + ldr w1, [x29,72] + ubfx x2, x1, 10, 1 + ldr w1, [x29,72] + ubfx x1, x1, 26, 1 + and w1, w1, w2 + and w4, w4, w1 + ldr w1, [x29,72] + tbnz x1, 2, .L1096 + ldr w1, [x29,72] + tbnz x1, 18, .L1096 + ldr w2, [x29,72] + ldr w1, [x29,72] + ubfx x2, x2, 3, 7 + ubfx x1, x1, 19, 7 + cmp w2, w1 + ldr w1, [x29,72] + ble .L1081 + ubfx x1, x1, 3, 7 + b .L1082 +.L1081: + ubfx x1, x1, 19, 7 +.L1082: + cmp w0, w1 + csel w0, w0, w1, cs + b .L1080 +.L1096: + mov w0, -1 +.L1080: + add w3, w3, 1 + b .L1079 +.L1105: + add x20, x20, :lo12:.LANCHOR0 + cmp w4, wzr + ldr x1, [x20,8] + ldr w19, [x1] + mov w1, 512 + csel w0, w0, w1, eq + mov w1, 8192 + movk w1, 0x2, lsl 16 + and w1, w19, w1 + cmp w1, 139264 + bne .L1077 + adrp x0, .LC112 + mov w1, w19 + add x0, x0, :lo12:.LC112 + orr w19, w19, 131072 + bl printk + ldr x0, [x20,8] + b .L1104 +.L1078: + ldrb w0, [x3,148] + mov w6, 128 + lsr w7, w21, 1 + mov w2, 1 + cmp w0, 25 + mov w0, 64 + csel w6, w0, w6, cc + mov w1, w19 + mov w5, w19 +.L1086: + cmp w5, w7 + add w8, w1, w6 + bcs .L1106 + ldr x0, [x3,104] + and x1, x1, 4294967292 + ldr w0, [x0,x1] + ubfiz x1, x5, 2, 30 + add w5, w5, 1 + lsr w9, w0, 16 + strb w0, [x4,x1] + lsr w1, w0, 8 + strb w1, [x4,w2,uxtw] + add w1, w2, 1 + lsr w0, w0, 24 + strb w9, [x4,x1] + add w1, w2, 2 + add w2, w2, 4 + strb w0, [x4,x1] + mov w1, w8 + b .L1086 +.L1106: + add x0, x20, :lo12:.LANCHOR0 + mov w5, 0 + lsr w21, w21, 2 + ldr x7, [x0,8] + mov w0, w5 +.L1088: + cmp w5, w21 + bcs .L1107 + uxtw x1, w5 + add x1, x1, 8 + ldr w1, [x7,x1,lsl 2] + str w1, [x29,72] + ldr w1, [x29,72] + tbnz x1, 2, .L1099 + ldr w1, [x29,72] + tbnz x1, 15, .L1099 + ldr w6, [x29,72] + ubfx x3, x6, 3, 5 + ldr w6, [x29,72] + ldr w1, [x29,72] + ubfx x6, x6, 27, 1 + ubfx x2, x1, 16, 5 + ldr w1, [x29,72] + orr w6, w3, w6, lsl 5 + ubfx x1, x1, 29, 1 + orr w1, w2, w1, lsl 5 + cmp w6, w1 + ldr w1, [x29,72] + bls .L1090 + ubfx x2, x1, 3, 5 + ldr w1, [x29,72] + ubfx x1, x1, 27, 1 + b .L1103 +.L1090: + ubfx x2, x1, 16, 5 + ldr w1, [x29,72] + ubfx x1, x1, 29, 1 +.L1103: + orr w1, w2, w1, lsl 5 + cmp w0, w1 + csel w0, w0, w1, cs + b .L1089 +.L1099: + mov w0, -1 +.L1089: + add w5, w5, 1 + b .L1088 +.L1107: + add x1, x20, :lo12:.LANCHOR0 + cmn w0, #1 + ldr x1, [x1,8] + str wzr, [x1,16] + beq .L1093 + ldr w2, [x4] + cmn w2, #1 + bne .L1093 + ldr w2, [x4,4] + cmn w2, #1 + bne .L1093 + ldr w2, [x22] + cmn w2, #1 + mov w2, 512 + csel w0, w0, w2, ne +.L1093: + ldr w19, [x1] + mov w1, 8192 + movk w1, 0x2, lsl 16 + and w1, w19, w1 + cmp w1, 139264 + bne .L1077 + adrp x0, .LC113 + mov w1, w19 + add x0, x0, :lo12:.LC113 + orr w19, w19, 131072 + bl printk + add x0, x20, :lo12:.LANCHOR0 + ldr x0, [x0,8] +.L1104: + str w19, [x0] + mov w0, -1 +.L1077: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 80 + ret + .size nandc_xfer, .-nandc_xfer + .align 2 + .global flash_read_page + .type flash_read_page, %function +flash_read_page: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x22, .LANCHOR0 + uxtb w21, w0 + add x0, x22, :lo12:.LANCHOR0 + str x27, [sp,80] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + mov w24, w1 + mov x26, x2 + ldr x19, [x0,8] + adrp x0, .LANCHOR2+400 + mov x25, x3 + mov w27, w4 + and w20, w1, 2097151 + ubfx x23, x24, 24, 2 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 4, .L1109 + adrp x0, .LC114 + mov w1, w21 + add x0, x0, :lo12:.LC114 + mov w2, w23 + mov w3, w24 + bl printk +.L1109: + bl nandc_wait_flash_ready + mov w0, w21 + bl nandc_cs + cbnz w23, .L1110 + mov w0, w21 + bl zftl_flash_enter_slc_mode + b .L1111 +.L1110: + add x0, x22, :lo12:.LANCHOR0 + ldr x0, [x0,48] + ldrb w0, [x0,12] + cmp w0, 3 + bne .L1112 + sxtw x0, w21 + add x0, x0, 8 + add x0, x19, x0, lsl 8 + str w23, [x0,8] + b .L1111 +.L1112: + mov w0, w21 + bl zftl_flash_exit_slc_mode +.L1111: + ubfiz x5, x21, 8, 8 + and w24, w24, 255 + add x19, x19, x5 + lsr w0, w20, 8 + str wzr, [x19,2056] + str wzr, [x19,2052] + str wzr, [x19,2052] + str w24, [x19,2052] + str w0, [x19,2052] + lsr w0, w20, 16 + str w0, [x19,2052] + mov w0, 48 + str w0, [x19,2056] + cbz w23, .L1113 + add x22, x22, :lo12:.LANCHOR0 + ldr x0, [x22,48] + ldrb w0, [x0,12] + cmp w0, 3 + bne .L1113 + add w20, w20, w20, lsl 1 + sub w0, w20, #1 + add w0, w0, w23 + b .L1125 +.L1113: + mov w0, w20 +.L1125: + bl nandc_set_seed + bl nandc_wait_flash_ready + mov w0, 5 + str w0, [x19,2056] + str wzr, [x19,2052] + mov w0, 224 + str wzr, [x19,2052] + mov w1, 0 + str w0, [x19,2056] + mov w2, w27 + mov w0, w21 + mov x3, x26 + mov x4, x25 + bl nandc_xfer + mov w19, w0 + cbnz w23, .L1115 + mov w0, w21 + bl zftl_flash_exit_slc_mode +.L1115: + mov w0, 0 + bl nandc_de_cs + ldr x27, [sp,80] + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size flash_read_page, .-flash_read_page + .align 2 + .global micron_read_retrial + .type micron_read_retrial, %function +micron_read_retrial: + stp x29, x30, [sp, -160]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x19, x19, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + stp x21, x22, [sp,32] + uxtb w25, w0 + mov w23, w2 + ldrb w21, [x19,148] + mov x26, x3 + mov x27, x4 + mov w28, w5 + uxtb x20, w25 + bl nandc_wait_flash_ready + add w21, w21, w21, lsl 1 + adrp x24, .LC115 + ldr x7, [x19,8] + asr w21, w21, 2 + mov w22, 0 + mov w19, -1 + adrp x9, .LANCHOR4 + lsl x10, x20, 8 + mov w11, 239 + add x24, x24, :lo12:.LC115 +.L1127: + add x6, x9, :lo12:.LANCHOR4 + ldrb w0, [x6,1088] + cmp w22, w0 + bcs .L1130 + add x1, x7, x10 + mov w0, 137 + str x9, [x29,104] + str x10, [x29,120] + str w11, [x1,2056] + str w0, [x1,2052] + mov w0, 200 + str x7, [x29,128] + str x11, [x29,136] + str x6, [x29,112] + str x1, [x29,152] + bl timer_delay_ns + ldr x1, [x29,152] + add w8, w22, 1 + mov x2, x26 + mov x3, x27 + mov w4, w28 + mov w0, w25 + str w8, [x1,2048] + str wzr, [x1,2048] + str wzr, [x1,2048] + str wzr, [x1,2048] + mov w1, w23 + str x8, [x29,144] + bl flash_read_page + mov w5, w0 + mov w1, w22 + mov x0, x24 + mov w2, w23 + mov w3, w22 + mov w4, w19 + str x5, [x29,152] + bl printk + ldr x5, [x29,152] + ldr x8, [x29,144] + cmn w5, #1 + ldr x11, [x29,136] + ldr x7, [x29,128] + ldr x10, [x29,120] + ldr x9, [x29,104] + beq .L1128 + cmn w19, #1 + ldr x6, [x29,112] + csel w19, w19, w5, ne + cmp w5, w21 + ldr x26, [x6,1072] + ldr x27, [x6,1080] + bcc .L1135 +.L1128: + mov w22, w8 + b .L1127 +.L1135: + mov w19, w5 +.L1130: + add x20, x7, x20, lsl 8 + mov w0, 239 + str w0, [x20,2056] + mov w0, 137 + str w0, [x20,2052] + mov w0, 200 + bl timer_delay_ns + str wzr, [x20,2048] + str wzr, [x20,2048] + cmp w19, w21 + str wzr, [x20,2048] + str wzr, [x20,2048] + bcc .L1132 + cmn w19, #1 + mov w0, 256 + csel w19, w19, w0, eq +.L1132: + cmn w19, #1 + beq .L1136 + cmp w19, 256 + bne .L1133 +.L1136: + adrp x0, .LC116 + mov w1, w22 + add x0, x0, :lo12:.LC116 + mov w2, w23 + mov w3, w22 + mov w4, w19 + bl printk +.L1133: + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 160 + ret + .size micron_read_retrial, .-micron_read_retrial + .align 2 + .global toshiba_3d_read_retrial + .type toshiba_3d_read_retrial, %function +toshiba_3d_read_retrial: + stp x29, x30, [sp, -144]! + uxtb w0, w0 + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + uxtb w19, w1 + mov w25, w2 + str w0, [x29,128] + mov x27, x3 + mov x28, x4 + str w5, [x29,124] + adrp x20, .LANCHOR0 + bl nandc_wait_flash_ready + add x0, x20, :lo12:.LANCHOR0 + ldrsw x22, [x29,128] + mov w1, 46 + mov w2, 56 + add x22, x22, 8 + mov w21, 10 + ldr x26, [x0,8] + lsl x22, x22, 8 + ldrb w0, [x0,149] + add x24, x26, x22 + cmp w0, 36 + csel w1, w2, w1, ne + cmp w0, 36 + mov w0, 26 + mov w23, w1 + csel w21, w21, w0, ne + cbnz w19, .L1147 + adrp x0, .LC117 + str x22, [x29,112] + add x0, x0, :lo12:.LC117 + mov w19, -1 + mov w23, 1 + str x0, [x29,104] + adrp x22, .LANCHOR4 +.L1154: + add x0, x20, :lo12:.LANCHOR0 + ldrb w0, [x0,149] + cmp w0, 36 + mov x0, x24 + bne .L1148 + mov w1, w23 + mov w2, 0 + bl toshiba_tlc_set_rr_para + ldr x0, [x29,112] + mov w1, 93 + add x0, x26, x0 + str w1, [x0,8] + b .L1149 +.L1148: + mov w1, w23 + bl toshiba_3d_set_slc_rr_para +.L1149: + ldr w4, [x29,124] + mov w1, w25 + ldrb w0, [x29,128] + mov x2, x27 + mov x3, x28 + bl flash_read_page + mov w4, w0 + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 4, .L1150 + ldr x0, [x29,104] + mov w3, w4 + mov w1, w23 + mov w2, w25 + str x4, [x29,96] + bl printk + ldr x4, [x29,96] +.L1150: + cmn w4, #1 + beq .L1151 + add x0, x22, :lo12:.LANCHOR4 + cmn w19, #1 + csel w19, w19, w4, ne + ldr x27, [x0,1072] + ldr x28, [x0,1080] + add x0, x20, :lo12:.LANCHOR0 + ldrb w0, [x0,148] + add w0, w0, w0, lsl 1 + cmp w4, w0, lsr 2 + bcc .L1170 +.L1151: + add w23, w23, 1 + cmp w23, w21 + bne .L1154 + b .L1153 +.L1170: + mov w21, w23 + mov w19, w4 +.L1153: + add x0, x20, :lo12:.LANCHOR0 + ldrb w0, [x0,149] + cmp w0, 36 + mov x0, x24 + bne .L1155 + mov w1, 0 + mov w2, w1 + b .L1193 +.L1155: + mov w1, 0 + bl toshiba_3d_set_slc_rr_para + b .L1156 +.L1147: + adrp x0, .LC118 + orr w25, w25, w19, lsl 24 + add x0, x0, :lo12:.LC118 + mov w19, -1 + mov w21, 1 + str x0, [x29,112] +.L1163: + add x0, x20, :lo12:.LANCHOR0 + ldrb w0, [x0,149] + cmp w0, 36 + mov x0, x24 + bne .L1157 + mov w1, w21 + mov w2, 1 + bl toshiba_tlc_set_rr_para + add x0, x26, x22 + mov w1, 93 + b .L1192 +.L1157: + mov w1, w21 + bl toshiba_3d_set_tlc_rr_para + add x0, x26, x22 + mov w1, 38 +.L1192: + str w1, [x0,8] + mov x2, x27 + mov w1, w25 + mov x3, x28 + ldr w4, [x29,124] + ldrb w0, [x29,128] + bl flash_read_page + mov w4, w0 + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 4, .L1159 + ldr x0, [x29,112] + mov w3, w4 + mov w1, w21 + mov w2, w25 + str x4, [x29,104] + bl printk + ldr x4, [x29,104] +.L1159: + cmn w4, #1 + beq .L1160 + adrp x0, .LANCHOR4 + cmn w19, #1 + add x0, x0, :lo12:.LANCHOR4 + csel w19, w19, w4, ne + ldr x27, [x0,1072] + ldr x28, [x0,1080] + add x0, x20, :lo12:.LANCHOR0 + ldrb w0, [x0,148] + add w0, w0, w0, lsl 1 + cmp w4, w0, lsr 2 + bcc .L1171 +.L1160: + add w21, w21, 1 + cmp w21, w23 + bne .L1163 + b .L1162 +.L1171: + mov w19, w4 +.L1162: + add x0, x20, :lo12:.LANCHOR0 + ldrb w0, [x0,149] + cmp w0, 36 + mov x0, x24 + bne .L1164 + mov w1, 0 + mov w2, 1 +.L1193: + bl toshiba_tlc_set_rr_para + b .L1156 +.L1164: + mov w1, 0 + bl toshiba_3d_set_tlc_rr_para +.L1156: + add x0, x20, :lo12:.LANCHOR0 + ldrb w0, [x0,149] + cmp w0, 36 + bne .L1165 + ldr x0, [x29,128] + ubfiz x23, x0, 8, 8 + mov w0, 85 + add x26, x26, x23 + str w0, [x26,2056] + mov w0, 255 + str wzr, [x26,2052] + str wzr, [x26,2048] + str w0, [x26,2056] +.L1165: + add x20, x20, :lo12:.LANCHOR0 + ldrb w0, [x20,148] + add w0, w0, w0, lsl 1 + cmp w19, w0, lsr 2 + bcc .L1166 + cmn w19, #1 + mov w0, 256 + csel w19, w19, w0, eq +.L1166: + cmn w19, #1 + beq .L1172 + cmp w19, 256 + bne .L1167 +.L1172: + adrp x0, .LC119 + mov w1, w21 + add x0, x0, :lo12:.LC119 + mov w2, w25 + mov w3, w21 + mov w4, w19 + bl printk +.L1167: + bl nandc_wait_flash_ready + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret + .size toshiba_3d_read_retrial, .-toshiba_3d_read_retrial + .align 2 + .global toshiba_read_retrial + .type toshiba_read_retrial, %function +toshiba_read_retrial: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x27, x28, [sp,80] + stp x19, x20, [sp,16] + uxtb w23, w0 + str w2, [x29,124] + stp x25, x26, [sp,64] + mov x27, x3 + mov x28, x4 + str w5, [x29,120] + adrp x19, .LANCHOR0 + bl nandc_wait_flash_ready + mov w24, 0 + add x1, x19, :lo12:.LANCHOR0 + sxtw x0, w23 + add x21, x0, 8 + str x0, [x29,112] + ldrb w0, [x1,149] + ldr x22, [x1,8] + sub w0, w0, #67 + add x21, x22, x21, lsl 8 + uxtb w0, w0 + cmp w0, 1 + bls .L1195 + ldrb w0, [x1,96] + cbz w0, .L1196 + mov w0, 1 + mov w24, 1 + bl nandc_set_if_mode +.L1196: + ubfiz x0, x23, 8, 8 + mov w1, 92 + add x0, x22, x0 + str w1, [x0,2056] + mov w1, 197 + str w1, [x0,2056] +.L1195: + ldr x0, [x29,112] + mov w20, 1 + mov w25, -1 + add x0, x0, 8 + lsl x0, x0, 8 + str x0, [x29,104] + ubfiz x0, x23, 8, 8 + str x0, [x29,96] +.L1197: + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + ldrb w0, [x0,1088] + add w0, w0, 1 + cmp w20, w0 + bcs .L1228 + add x0, x19, :lo12:.LANCHOR0 + mov w1, w20 + ldrb w0, [x0,149] + sub w0, w0, #67 + uxtb w0, w0 + cmp w0, 1 + mov x0, x21 + bhi .L1198 + bl sandisk_set_rr_para + b .L1199 +.L1198: + bl toshiba_set_rr_para +.L1199: + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,149] + cmp w0, 34 + bne .L1200 + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + ldrb w0, [x0,1088] + sub w0, w0, #3 + cmp w20, w0 + bne .L1200 + ldr x0, [x29,104] + mov w1, 179 + add x0, x22, x0 + str w1, [x0,8] +.L1200: + ldr x0, [x29,96] + mov w1, 38 + ldr w4, [x29,120] + mov x2, x27 + add x0, x22, x0 + mov x3, x28 + str w1, [x0,2056] + mov w1, 93 + str w1, [x0,2056] + mov w0, w23 + ldr w1, [x29,124] + bl flash_read_page + cmn w0, #1 + mov w26, w0 + beq .L1203 + cmn w25, #1 + csel w25, w25, w0, ne + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + ldr x27, [x0,1072] + ldr x28, [x0,1080] + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,148] + add w0, w0, w0, lsl 1 + cmp w26, w0, lsr 2 + bcc .L1205 +.L1203: + add w20, w20, 1 + b .L1197 +.L1228: + mov w26, w25 +.L1205: + add x0, x19, :lo12:.LANCHOR0 + mov w1, 0 + ldrb w0, [x0,149] + sub w0, w0, #67 + uxtb w0, w0 + cmp w0, 1 + mov x0, x21 + bhi .L1207 + bl sandisk_set_rr_para + b .L1208 +.L1207: + bl toshiba_set_rr_para +.L1208: + ldr x0, [x29,112] + add x19, x19, :lo12:.LANCHOR0 + add x0, x0, 8 + add x22, x22, x0, lsl 8 + mov w0, 255 + str w0, [x22,8] + ldrb w0, [x19,148] + add w0, w0, w0, lsl 1 + cmp w26, w0, lsr 2 + bcc .L1209 + cmn w26, #1 + mov w0, 256 + csel w26, w26, w0, eq +.L1209: + cmn w26, #1 + beq .L1215 + cmp w26, 256 + bne .L1210 +.L1215: + adrp x0, .LC119 + ldr w2, [x29,124] + add x0, x0, :lo12:.LC119 + mov w1, w20 + mov w3, w20 + mov w4, w26 + bl printk +.L1210: + bl nandc_wait_flash_ready + cbz w24, .L1212 + mov w0, 4 + bl nandc_set_if_mode +.L1212: + mov w0, w26 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size toshiba_read_retrial, .-toshiba_read_retrial + .align 2 + .global hynix_read_retrial + .type hynix_read_retrial, %function +hynix_read_retrial: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x27, x28, [sp,80] + adrp x28, .LANCHOR0 + stp x21, x22, [sp,32] + uxtb x21, w0 + add x0, x28, :lo12:.LANCHOR0 + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + str w5, [x29,124] + mov w23, w2 + ldr x5, [x0,152] + mov x25, x3 + mov x26, x4 + mov x22, x21 + add x27, x5, 112 + mov w19, -1 + add x0, x27, x21 + ldrb w24, [x27,2] + ldrb w20, [x0,8] + bl nandc_wait_flash_ready + mov w6, 0 + adrp x7, .LANCHOR4 +.L1230: + cmp w6, w24 + bcs .L1234 + add w20, w20, 1 + mov w0, w22 + str x7, [x29,104] + uxtb w20, w20 + str x6, [x29,112] + cmp w20, w24 + csel w20, w20, wzr, cc + mov w1, w20 + bl hynix_set_rr_para + ldr w4, [x29,124] + mov w0, w22 + mov w1, w23 + mov x2, x25 + mov x3, x26 + bl flash_read_page + cmn w0, #1 + ldr x6, [x29,112] + ldr x7, [x29,104] + beq .L1232 + add x1, x7, :lo12:.LANCHOR4 + cmn w19, #1 + csel w19, w19, w0, ne + ldr x25, [x1,1072] + ldr x26, [x1,1080] + add x1, x28, :lo12:.LANCHOR0 + ldrb w1, [x1,148] + add w1, w1, w1, lsl 1 + cmp w0, w1, lsr 2 + bcc .L1239 +.L1232: + add w6, w6, 1 + b .L1230 +.L1239: + mov w19, w0 +.L1234: + add x28, x28, :lo12:.LANCHOR0 + add x21, x27, x21 + ldrb w0, [x28,148] + strb w20, [x21,8] + add w0, w0, w0, lsl 1 + cmp w19, w0, lsr 2 + bcc .L1236 + cmn w19, #1 + mov w0, 256 + csel w19, w19, w0, eq +.L1236: + cmn w19, #1 + beq .L1240 + cmp w19, 256 + bne .L1237 +.L1240: + adrp x0, .LC120 + mov w1, w6 + add x0, x0, :lo12:.LC120 + mov w2, w23 + mov w3, w6 + mov w4, w19 + bl printk +.L1237: + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size hynix_read_retrial, .-hynix_read_retrial + .align 2 + .global flash_ddr_tunning_read + .type flash_ddr_tunning_read, %function +flash_ddr_tunning_read: + stp x29, x30, [sp, -160]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov w19, 0 + uxtb w25, w0 + mov w23, w1 + mov x26, x2 + mov x27, x3 + str w4, [x29,156] + adrp x24, .LC121 + bl nandc_get_ddr_para + mov w7, w19 + mov w8, w0 + mov w6, w19 + mov w20, w19 + mov w28, 1024 + mov w21, 6 + mov w22, -1 + add x24, x24, :lo12:.LC121 + adrp x9, .LANCHOR4 + adrp x10, .LANCHOR0 +.L1254: + mov w0, w21 + str x10, [x29,104] + str x9, [x29,112] + str x8, [x29,120] + str x7, [x29,128] + str x6, [x29,136] + bl nandc_set_ddr_para + ldr w4, [x29,156] + mov w1, w23 + mov x2, x26 + mov x3, x27 + mov w0, w25 + bl flash_read_page + mov w4, w0 + mov w3, w4 + mov x0, x24 + mov w1, w21 + mov w2, w23 + str x4, [x29,144] + bl printk + ldr x4, [x29,144] + add w0, w28, 1 + ldr x6, [x29,136] + cmp w4, w0 + ldr x7, [x29,128] + ldr x8, [x29,120] + ldr x9, [x29,112] + ldr x10, [x29,104] + bhi .L1250 + add x0, x10, :lo12:.LANCHOR0 + add x1, x9, :lo12:.LANCHOR4 + ldrb w0, [x0,148] + ldr x26, [x1,1072] + ldr x27, [x1,1080] + cmp w4, w0, lsr 2 + bcs .L1259 + add w20, w20, 1 + cmp w20, 7 + bls .L1259 + sub w19, w21, w20 + mov w28, w4 + mov w22, 0 + b .L1252 +.L1250: + cmp w6, w20 + bcs .L1260 + cmp w20, 7 + sub w7, w19, w20 + bhi .L1253 + mov w6, w20 + b .L1260 +.L1259: + mov w19, w21 + mov w28, w4 + mov w22, 0 + b .L1251 +.L1260: + mov w20, 0 +.L1251: + add w21, w21, 2 + cmp w21, 50 + bne .L1254 +.L1252: + cmp w6, w20 + csel w19, w19, w7, ls +.L1253: + cbz w19, .L1255 + adrp x0, .LANCHOR0+148 + ldrb w1, [x0,#:lo12:.LANCHOR0+148] + mov w0, 3 + udiv w1, w1, w0 + cmp w28, w1 + bcs .L1255 + adrp x0, .LC122 + mov w1, w19 + add x0, x0, :lo12:.LC122 + bl printk + mov w0, w19 + b .L1265 +.L1255: + mov w0, w8 +.L1265: + bl nandc_set_ddr_para + cbz w22, .L1257 + adrp x0, .LC123 + mov w1, w25 + add x0, x0, :lo12:.LC123 + mov w2, w23 + mov w28, w22 + bl printk +.L1257: + mov w0, w28 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 160 + ret + .size flash_ddr_tunning_read, .-flash_ddr_tunning_read + .align 2 + .global flash_read_page_en + .type flash_read_page_en, %function +flash_read_page_en: + stp x29, x30, [sp, -96]! + uxtb w0, w0 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + mov w19, w1 + add x1, x20, :lo12:.LANCHOR0 + str x27, [sp,80] + stp x23, x24, [sp,48] + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + mov x25, x2 + mov x24, x3 + ldrb w2, [x1,57] + mov w23, w4 + ubfx x21, x19, 24, 2 + cmp w2, w0 + bhi .L1267 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 136 + mov w2, 386 + bl printk +.L1268: + b .L1268 +.L1267: + add x0, x1, x0, sxtw + ldrb w22, [x0,160] + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 4, .L1269 + adrp x0, .LC124 + mov w1, w22 + add x0, x0, :lo12:.LC124 + mov w2, w19 + bl printk +.L1269: + cbnz w21, .L1270 + add x0, x20, :lo12:.LANCHOR0 + ldrb w1, [x0,58] + cbz w1, .L1271 + ldrb w0, [x0,168] + cbz w0, .L1270 +.L1271: + add x1, x20, :lo12:.LANCHOR0 + ldrh w2, [x1,170] + udiv w0, w19, w2 + mul w0, w0, w2 + ldrb w2, [x1,168] + sub w19, w19, w0 + cbz w2, .L1272 + add w19, w0, w19, lsl 1 + b .L1270 +.L1272: + add x1, x1, 172 + ldrh w19, [x1,w19,uxtw 1] + add w19, w19, w0 +.L1270: + mov w0, w22 + mov w1, w19 + mov x2, x25 + mov x3, x24 + mov w4, w23 + bl flash_read_page + cmn w0, #1 + mov w21, w0 + bne .L1279 + add x26, x20, :lo12:.LANCHOR0 + ldrb w27, [x26,144] + cbnz w27, .L1274 +.L1277: + adrp x0, .LANCHOR4+1096 + ldr x6, [x0,#:lo12:.LANCHOR4+1096] + cbnz x6, .L1275 + b .L1276 +.L1274: + mov w0, w22 + mov w1, w19 + mov x2, x25 + mov x3, x24 + mov w4, w23 + strb wzr, [x26,144] + bl flash_read_page + strb w27, [x26,144] + cmn w0, #1 + beq .L1277 + b .L1295 +.L1275: + mov w0, w22 + mov w1, 0 + mov w2, w19 + mov x3, x25 + mov x4, x24 + mov w5, w23 + blr x6 + cmn w0, #1 + bne .L1295 +.L1276: + add x20, x20, :lo12:.LANCHOR0 + adrp x0, .LC125 + add x0, x0, :lo12:.LC125 + mov w1, 0 + mov w2, w19 + mov w3, -1 + ldrb w4, [x20,144] + bl printk + ldrb w0, [x20,96] + cbz w0, .L1279 + mov w0, w22 + mov w1, w19 + mov x2, x25 + mov x3, x24 + mov w4, w23 + bl flash_ddr_tunning_read +.L1295: + mov w21, w0 +.L1279: + mov w0, w21 + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size flash_read_page_en, .-flash_read_page_en + .align 2 + .global flash_get_last_written_page + .type flash_get_last_written_page, %function +flash_get_last_written_page: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x23, x24, [sp,48] + uxtb w23, w0 + adrp x0, .LANCHOR4+972 + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + ldrh w19, [x0,#:lo12:.LANCHOR4+972] + adrp x0, .LANCHOR2+394 + stp x21, x22, [sp,32] + uxth w22, w1 + sub w19, w19, #1 + ldrh w26, [x0,#:lo12:.LANCHOR2+394] + mov w0, w23 + sxth w19, w19 + mov x24, x2 + stp x27, x28, [sp,80] + mul w26, w22, w26 + mov x21, x3 + mov w25, w4 + add w1, w26, w19 + bl flash_read_page_en + cmp w0, 512 + bne .L1297 + mov w27, 0 + mov w28, 2 +.L1298: + cmp w27, w19 + bgt .L1297 + add w0, w27, w19 + mov x2, x24 + mov x3, x21 + mov w4, w25 + sdiv w20, w0, w28 + mov w0, w23 + add w1, w26, w20, sxth + bl flash_read_page_en + cmp w0, 512 + bne .L1299 + sub w19, w20, #1 + sxth w19, w19 + b .L1298 +.L1299: + add w20, w20, 1 + sxth w27, w20 + b .L1298 +.L1297: + ldr w3, [x21] + adrp x0, .LC126 + mov w1, w22 + mov w2, w19 + add x0, x0, :lo12:.LC126 + bl printk + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size flash_get_last_written_page, .-flash_get_last_written_page + .align 2 + .global flash_get_last_written_page_ext + .type flash_get_last_written_page_ext, %function +flash_get_last_written_page_ext: + uxth w6, w0 + adrp x0, .LANCHOR0+3218 + stp x29, x30, [sp, -16]! + mov w5, 21 + mov x8, x1 + add x29, sp, 0 + ldrh w0, [x0,#:lo12:.LANCHOR0+3218] + mov x7, x2 + mov w4, w3 + mov x2, x8 + sub w0, w5, w0 + mov w5, 1 + lsl w5, w5, w0 + mov x3, x7 + sub w1, w5, #1 + asr w0, w6, w0 + and w1, w6, w1 + bl flash_get_last_written_page + ldp x29, x30, [sp], 16 + ret + .size flash_get_last_written_page_ext, .-flash_get_last_written_page_ext + .align 2 + .global flash_info_blk_init + .type flash_info_blk_init, %function +flash_info_blk_init: + stp x29, x30, [sp, -64]! + adrp x2, .LANCHOR3 + adrp x0, .LC127 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + add x2, x2, :lo12:.LANCHOR3 + add x4, x20, :lo12:.LANCHOR0 + add x0, x0, :lo12:.LC127 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + mov w1, 49 + add x2, x2, 160 + ldr x4, [x4,152] + mov w3, 2048 + mov w22, 4 + adrp x24, .LANCHOR4 + bl printk +.L1306: + add x19, x20, :lo12:.LANCHOR0 + add x21, x24, :lo12:.LANCHOR4 + mov w0, 0 + mov w4, 4 + adrp x23, .LANCHOR4 + ldrh w1, [x19,170] + ldr x2, [x19,152] + ldr x3, [x21,1104] + mul w1, w22, w1 + bl flash_read_page_en + cmn w0, #1 + beq .L1304 + ldr x2, [x19,152] + mov w0, 21321 + movk w0, 0x5359, lsl 16 + ldr w1, [x2] + cmp w1, w0 + beq .L1305 +.L1304: + add w22, w22, 1 + cmp w22, 16 + bne .L1306 +.L1327: + mov w0, -1 + b .L1326 +.L1305: + ldrb w1, [x2,36] + mov w4, 4 + ldrh w3, [x19,170] + strb w1, [x21,1112] + ldrb w0, [x2,37] + mul w1, w1, w3 + ldr x3, [x21,1104] + strb w0, [x21,1113] + mov w0, 0 + mov w21, 0 + bl flash_read_page_en + cmn w0, #1 + beq .L1308 + ldr x0, [x19,152] + mov w1, 21321 + movk w1, 0x5359, lsl 16 + mov w21, 0 + ldr w2, [x0] + cmp w2, w1 + bne .L1308 + ldr w21, [x0,4] +.L1308: + add x19, x23, :lo12:.LANCHOR4 + add x22, x20, :lo12:.LANCHOR0 + mov w0, 0 + mov w4, 4 + ldrb w2, [x19,1113] + ldrh w1, [x22,170] + ldr x3, [x19,1104] + mul w1, w2, w1 + ldr x2, [x22,152] + bl flash_read_page_en + cmn w0, #1 + beq .L1309 + ldr x0, [x22,152] + mov w1, 21321 + movk w1, 0x5359, lsl 16 + ldr w2, [x0] + cmp w2, w1 + bne .L1309 + ldr w1, [x0,4] + cmp w21, w1 + bcs .L1309 + ldrb w1, [x0,37] + ldrb w0, [x0,36] + strb w1, [x19,1112] + strb w0, [x19,1113] +.L1309: + add x21, x23, :lo12:.LANCHOR4 + add x22, x20, :lo12:.LANCHOR0 + mov w0, 0 + mov w4, 4 + ldrb w1, [x21,1112] + ldr x3, [x21,1104] + ldr x2, [x22,152] + bl flash_get_last_written_page + sxth w19, w0 + add w0, w0, 1 + strh w0, [x21,1114] + ldrb w0, [x21,1112] + ldrh w21, [x22,170] + mul w21, w0, w21 +.L1310: + tbnz w19, #31, .L1328 + add x22, x20, :lo12:.LANCHOR0 + add x3, x23, :lo12:.LANCHOR4 + mov w0, 0 + add w1, w19, w21 + mov w4, 4 + ldr x2, [x22,152] + ldr x3, [x3,1104] + bl flash_read_page_en + cmn w0, #1 + beq .L1311 + ldr x0, [x22,152] + ldr w1, [x0] + mov w0, 21321 + movk w0, 0x5359, lsl 16 + cmp w1, w0 + bne .L1311 +.L1313: + mov w0, 0 + b .L1326 +.L1311: + sub w19, w19, #1 + sxth w19, w19 + b .L1310 +.L1328: + cmn w19, #1 + bne .L1313 + add x20, x20, :lo12:.LANCHOR0 + adrp x0, .LC128 + add x0, x0, :lo12:.LC128 + ldr x1, [x20,152] + ldr w1, [x1] + bl printk + b .L1327 +.L1326: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size flash_info_blk_init, .-flash_info_blk_init + .align 2 + .global flash_ddr_para_scan + .type flash_ddr_para_scan, %function +flash_ddr_para_scan: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + adrp x20, .LANCHOR4 + stp x21, x22, [sp,32] + add x21, x19, :lo12:.LANCHOR0 + mov w22, 1 + stp x23, x24, [sp,48] + uxtb w24, w0 + mov w23, w1 + ldrb w0, [x21,720] + add x20, x20, :lo12:.LANCHOR4 + strb w22, [x21,96] + bl flash_set_interface_mode + ldrb w0, [x21,720] + bl nandc_set_if_mode + ldr x2, [x20,1120] + mov w1, w23 + ldr x3, [x20,1128] + mov w4, 4 + mov w0, w24 + bl flash_ddr_tunning_read + ldr x2, [x20,1120] + mov w0, w24 + ldr x3, [x20,1128] + mov w1, w23 + mov w4, 4 + bl flash_read_page + cmn w0, #1 + bne .L1330 + ldrb w0, [x21,720] + tbz x0, 0, .L1330 + mov w0, 1 + bl flash_set_interface_mode + mov w0, w22 + bl nandc_set_if_mode + strb wzr, [x21,96] + b .L1331 +.L1330: + add x19, x19, :lo12:.LANCHOR0 + mov w0, 1 + strb w0, [x19,96] +.L1331: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size flash_ddr_para_scan, .-flash_ddr_para_scan + .align 2 + .type id_block_read_data.constprop.29, %function +id_block_read_data.constprop.29: + stp x29, x30, [sp, -240]! + add x29, sp, 0 + stp x27, x28, [sp,80] + mov w27, w1 + adrp x1, .LANCHOR0 + stp x19, x20, [sp,16] + add x19, x1, :lo12:.LANCHOR0 + str x1, [x29,120] + stp x25, x26, [sp,64] + mov w26, w0 + ldr x0, [x19,48] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + mov x21, x2 + mov w22, 0 + ldrb w2, [x0,9] + mov w23, 4 + ldrh w0, [x0,10] + mov w25, w22 + str w2, [x29,164] + mul w0, w2, w0 + ldrb w2, [x19,144] + str w2, [x29,136] + uxth w0, w0 + strb wzr, [x19,144] + udiv w2, w26, w0 + msub w0, w2, w0, w26 + str w0, [x29,172] + sub w0, w26, w0 + str w0, [x29,160] + ldr w0, [x29,172] + and w0, w0, 3 + str w0, [x29,168] + adrp x0, .LC129 + add x0, x0, :lo12:.LC129 + str x0, [x29,112] +.L1336: + cmp w22, w27 + bcs .L1373 + ldr w0, [x29,168] + adrp x1, .LANCHOR4 + add x1, x1, :lo12:.LANCHOR4 + sub w0, w23, w0 + uxth w0, w0 + str w0, [x29,144] + ldr w0, [x29,172] + ldrb w1, [x1,1136] + add w20, w22, w0 + add x0, x19, 172 + udiv w20, w20, w23 + and w20, w20, 65535 + ldrh w0, [x0,w20,sxtw 1] + cbnz w1, .L1337 + mov w20, w0 + b .L1338 +.L1337: + ldrb w1, [x19,168] + lsl w0, w20, 1 + cmp w1, wzr + csel w20, w0, w20, ne +.L1338: + ldr w1, [x29,160] + ldr w0, [x29,164] + ldrb w28, [x19,56] + madd w0, w20, w0, w1 + ldr w1, [x29,168] + str w0, [x29,140] + add w24, w0, w1 + ldr x0, [x19,48] + ldrb w0, [x0,9] + udiv w24, w24, w0 + ldrb w0, [x19,148] + str w0, [x29,132] + mov w0, w28 + bl nandc_bch_sel +.L1339: + mov w0, 0 + mov w1, w24 + mov x2, x21 + add x3, x29, 176 + mov w4, w23 + bl flash_read_page + cmn w0, #1 + mov w20, w0 + bne .L1346 + ldrb w5, [x19,144] + cbnz w5, .L1341 +.L1344: + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + ldr x7, [x0,1096] + cbnz x7, .L1342 + b .L1343 +.L1341: + mov w0, 0 + mov w1, w24 + mov x2, x21 + add x3, x29, 176 + mov w4, w23 + str x5, [x29,104] + strb wzr, [x19,144] + bl flash_read_page + cmn w0, #1 + ldr x5, [x29,104] + strb w5, [x19,144] + beq .L1344 + b .L1372 +.L1342: + mov w0, 0 + mov w2, w24 + mov w1, w0 + mov x3, x21 + add x4, x29, 176 + mov w5, w23 + blr x7 + cmn w0, #1 + bne .L1372 +.L1343: + ldrb w0, [x19,96] + cbz w0, .L1346 + mov w0, 0 + mov w1, w24 + mov x2, x21 + add x3, x29, 176 + mov w4, w23 + bl flash_ddr_tunning_read +.L1372: + mov w20, w0 +.L1346: + cmn w20, #1 + bne .L1347 + cmp w28, 16 + beq .L1347 + mov w0, 16 + mov w28, 16 + bl nandc_bch_sel + b .L1339 +.L1347: + ldr w0, [x29,132] + bl nandc_bch_sel + cmn w20, #1 + ldr w0, [x29,160] + csinv w25, w25, wzr, ne + cmp w22, wzr + cset w1, eq + cmp w0, w26 + cset w0, eq + tst w1, w0 + beq .L1349 + cbnz w25, .L1349 + ldr w1, [x21] + mov w0, 18766 + movk w0, 0x464e, lsl 16 + cmp w1, w0 + bne .L1349 + ldr w0, [x29,144] + ldrb w23, [x21,17] + add w27, w27, w0 + b .L1350 +.L1349: + ldr x0, [x29,144] + mov w2, w22 + ldr w1, [x29,140] + ubfiz x0, x0, 9, 16 + ldr w3, [x29,176] + add x21, x21, x0 + ldr w4, [x29,180] + ldr x0, [x29,112] + bl printk + str wzr, [x29,168] +.L1350: + ldr w0, [x29,144] + add w22, w0, w22 + uxth w22, w22 + b .L1336 +.L1373: + ldr x0, [x29,120] + ldrb w1, [x29,136] + add x0, x0, :lo12:.LANCHOR0 + strb w1, [x0,144] + mov w0, w25 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 240 + ret + .size id_block_read_data.constprop.29, .-id_block_read_data.constprop.29 + .align 2 + .global flash_complete_page_read + .type flash_complete_page_read, %function +flash_complete_page_read: + stp x29, x30, [sp, -112]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + and w19, w0, 2097151 + stp x21, x22, [sp,32] + add x21, x20, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov w26, w0 + mov x24, x1 + ldrb w1, [x21,57] + ubfx x0, x26, 21, 3 + mov x23, x2 + ubfx x25, x26, 24, 2 + cmp w1, w0 + bhi .L1375 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 184 + mov w2, 794 + bl printk +.L1376: + b .L1376 +.L1375: + add x0, x21, x0, sxtw + ldrb w22, [x0,160] + ldr x27, [x21,8] + mov w0, w22 + bl nandc_cs + cbnz w25, .L1377 + ldrb w0, [x21,58] + cbz w0, .L1378 + ldrb w0, [x21,168] + cbz w0, .L1377 +.L1378: + add x1, x20, :lo12:.LANCHOR0 + ldrh w2, [x1,170] + udiv w0, w19, w2 + mul w0, w0, w2 + ldrb w2, [x1,168] + sub w19, w19, w0 + cbz w2, .L1379 + add w19, w0, w19, lsl 1 + b .L1377 +.L1379: + add x1, x1, 172 + ldrh w19, [x1,w19,uxtw 1] + add w19, w19, w0 +.L1377: + ubfiz x5, x22, 8, 8 + mov w0, 5 + add x5, x27, x5 + adrp x21, .LANCHOR2 + add x28, x21, :lo12:.LANCHOR2 + mov w1, 0 + add x28, x28, 368 + mov x3, x24 + str w0, [x5,2056] + and w0, w19, 255 + str wzr, [x5,2052] + mov x4, x23 + str wzr, [x5,2052] + str w0, [x5,2052] + lsr w0, w19, 8 + str w0, [x5,2052] + lsr w0, w19, 16 + ldrb w2, [x28,9] + str w0, [x5,2052] + mov w0, 224 + str w0, [x5,2056] + mov w0, w22 + bl nandc_xfer + cmn w0, #1 + mov w27, w0 + bne .L1386 + add x5, x20, :lo12:.LANCHOR0 + ldrb w6, [x5,144] + cbnz w6, .L1381 +.L1384: + adrp x0, .LANCHOR4+1096 + ldr x6, [x0,#:lo12:.LANCHOR4+1096] + cbnz x6, .L1382 + b .L1383 +.L1381: + ldrb w4, [x28,9] + mov w0, w22 + orr w1, w19, w25, lsl 24 + mov x2, x24 + mov x3, x23 + str x6, [x29,96] + strb wzr, [x5,144] + str x5, [x29,104] + bl flash_read_page + ldr x5, [x29,104] + cmn w0, #1 + ldr x6, [x29,96] + strb w6, [x5,144] + beq .L1384 + b .L1399 +.L1382: + add x5, x21, :lo12:.LANCHOR2 + mov w0, w22 + mov w1, w25 + mov w2, w19 + mov x3, x24 + mov x4, x23 + ldrb w5, [x5,377] + blr x6 + cmn w0, #1 + bne .L1399 +.L1383: + add x20, x20, :lo12:.LANCHOR0 + adrp x0, .LC130 + add x0, x0, :lo12:.LC130 + mov w1, 0 + mov w2, w26 + mov w3, -1 + ldrb w4, [x20,144] + bl printk + ldrb w0, [x20,96] + cbz w0, .L1386 + add x21, x21, :lo12:.LANCHOR2 + mov w0, w22 + orr w1, w19, w25, lsl 24 + mov x2, x24 + mov x3, x23 + ldrb w4, [x21,377] + bl flash_ddr_tunning_read +.L1399: + mov w27, w0 +.L1386: + mov w0, w27 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size flash_complete_page_read, .-flash_complete_page_read + .align 2 + .type queue_wait_first_req_completed, %function +queue_wait_first_req_completed: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x0, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + ldrb w20, [x0,3774] + cmp w20, 255 + beq .L1436 + add x0, x0, 728 + mov w1, 0 + add x0, x0, x20, lsl 6 + ldrb w2, [x0,58] + ldr w21, [x0,40] + sub w3, w2, #1 + cmp w3, 9 + bhi .L1402 + adrp x0, .L1404 + add x0, x0, :lo12:.L1404 + ldrb w0, [x0,w3,uxtw] + adr x1, .Lrtx1404 + add x0, x1, w0, sxtb #2 + br x0 +.Lrtx1404: + .section .rodata + .align 0 + .align 2 +.L1404: + .byte (.L1403 - .Lrtx1404) / 4 + .byte (.L1403 - .Lrtx1404) / 4 + .byte (.L1405 - .Lrtx1404) / 4 + .byte (.L1405 - .Lrtx1404) / 4 + .byte (.L1405 - .Lrtx1404) / 4 + .byte (.L1406 - .Lrtx1404) / 4 + .byte (.L1407 - .Lrtx1404) / 4 + .byte (.L1408 - .Lrtx1404) / 4 + .byte (.L1405 - .Lrtx1404) / 4 + .byte (.L1408 - .Lrtx1404) / 4 + .text +.L1403: + mov w0, w21 + mov w1, 64 + bl flash_wait_device_ready + tbz x0, 6, .L1436 + add x19, x19, :lo12:.LANCHOR0 + mov w0, w21 + add x19, x19, 728 + add x20, x19, x20, lsl 6 + mov x2, x20 + ldr x3, [x20,8] + ldr x1, [x2,16]! + cmp x1, xzr + ldr x2, [x2,8] + csel x1, x3, x1, eq + bl flash_complete_page_read + str w0, [x20,52] + mov w0, 12 + strb w0, [x20,58] + ldrb w0, [x20,2] + orr w0, w0, 8 + strb w0, [x20,2] + b .L1436 +.L1405: + bl nandc_iqr_wait_flash_ready + mov w0, w21 + mov w1, 64 + bl flash_wait_device_ready + mov w21, w0 + tbz x21, 6, .L1436 + mov w1, 5 + add x19, x19, :lo12:.LANCHOR0 + ands w1, w21, w1 + beq .L1411 + add x19, x19, 728 + mov w0, 11 + add x20, x19, x20, lsl 6 + mov w4, 11 + strb w0, [x20,58] + adrp x0, .LC131 + ldrb w1, [x20,1] + add x0, x0, :lo12:.LC131 + ldr w2, [x20,52] + ldr w3, [x20,40] + bl printk + mov w0, -1 + str w0, [x20,52] + b .L1437 +.L1411: + add x20, x19, x20, lsl 6 + b .L1418 +.L1408: + add x22, x19, :lo12:.LANCHOR0 + mov w0, 3 + cmp w2, 10 + mov w1, 9 + add x22, x22, 728 + csel w1, w0, w1, ne + ubfx x3, x21, 21, 3 + add x0, x22, x20, lsl 6 +.L1413: + ldrb w23, [x0] + cmp w23, 255 + beq .L1438 + add x0, x22, x23, lsl 6 + ldrb w2, [x0,58] + cmp w2, w1 + bne .L1413 + ldr w2, [x0,40] + ubfx x2, x2, 21, 3 + cmp w3, w2 + bne .L1413 + bl nandc_iqr_wait_flash_ready + mov w0, w21 + mov w1, 64 + bl flash_wait_device_ready + mov w21, w0 + and w0, w0, 64 + tbz x21, 6, .L1421 + ands w0, w21, 15 + add x22, x22, x20, lsl 6 + beq .L1416 + adrp x0, .LC131 + ldrb w1, [x22,1] + ldr w2, [x22,52] + add x0, x0, :lo12:.LC131 + ldr w3, [x22,40] + mov w4, 11 + bl printk + mov w0, 11 + strb w0, [x22,58] + mov w0, -1 + str w0, [x22,52] +.L1415: + add x19, x19, :lo12:.LANCHOR0 + add x19, x19, 728 + add x20, x19, x20, lsl 6 + add x23, x19, x23, lsl 6 + ldrb w0, [x20,58] + strb w0, [x23,58] + ldr w0, [x20,52] + str w0, [x23,52] +.L1437: + mov w1, w21 + b .L1402 +.L1416: + mov w1, 12 + str w0, [x22,52] + strb w1, [x22,58] +.L1421: + mov w21, w0 + b .L1415 +.L1438: + mov w1, -1 + b .L1402 +.L1406: + mov w1, 32 + mov w0, w21 + bl flash_wait_device_ready + tbz x0, 5, .L1436 + ands w1, w0, 15 + add x19, x19, :lo12:.LANCHOR0 + add x20, x19, x20, lsl 6 + beq .L1418 + mov w1, 11 + strb w1, [x20,786] + mov w1, -1 + str w1, [x20,780] + mov w1, w0 + b .L1402 +.L1418: + mov w0, 12 + str w1, [x20,780] + strb w0, [x20,786] + b .L1402 +.L1407: + mov w1, 64 + mov w0, w21 + bl flash_wait_device_ready + tbz x0, 6, .L1436 + add x19, x19, :lo12:.LANCHOR0 + add x20, x19, x20, lsl 6 + str w0, [x20,780] + mov w0, 6 + strb w0, [x20,786] +.L1436: + mov w1, 0 +.L1402: + mov w0, w1 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size queue_wait_first_req_completed, .-queue_wait_first_req_completed + .align 2 + .global sblk_wait_write_queue_completed + .type sblk_wait_write_queue_completed, %function +sblk_wait_write_queue_completed: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + adrp x19, .LANCHOR0 +.L1440: + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,3774] + cmp w0, 255 + beq .L1442 + bl queue_wait_first_req_completed + bl queue_remove_completed_req + b .L1440 +.L1442: + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size sblk_wait_write_queue_completed, .-sblk_wait_write_queue_completed + .align 2 + .global ftl_read_page + .type ftl_read_page, %function +ftl_read_page: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + str x19, [sp,16] + uxtb w19, w0 + str x1, [x29,32] + str x2, [x29,40] + str x3, [x29,48] + str x4, [x29,56] + bl sblk_wait_write_queue_completed + ldr x1, [x29,32] + mov w0, w19 + ldr x2, [x29,40] + ldr x3, [x29,48] + ldr x4, [x29,56] + bl flash_read_page_en + ldr x19, [sp,16] + ldp x29, x30, [sp], 64 + ret + .size ftl_read_page, .-ftl_read_page + .align 2 + .global ftl_read_ppa_page + .type ftl_read_ppa_page, %function +ftl_read_ppa_page: + stp x29, x30, [sp, -64]! + mov w4, w3 + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + mov w19, w0 + mov x21, x1 + mov x20, x2 + str x4, [x29,56] + bl sblk_wait_write_queue_completed + ldr x4, [x29,56] + mov w1, w19 + mov x2, x21 + mov x3, x20 + ubfx x0, x19, 21, 3 + bl flash_read_page_en + ldr x21, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 64 + ret + .size ftl_read_ppa_page, .-ftl_read_ppa_page + .align 2 + .global ftl_open_sblk_read_test + .type ftl_open_sblk_read_test, %function +ftl_open_sblk_read_test: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + uxth w19, w0 + add x1, x29, 80 + stp x21, x22, [sp,32] + mov w0, w19 + adrp x21, .LANCHOR4 + adrp x22, .LANCHOR5 + add x21, x21, :lo12:.LANCHOR4 + add x22, x22, :lo12:.LANCHOR5 + str x23, [sp,48] + add x21, x21, 1152 + bl ftl_get_blk_list_in_sblk + add x22, x22, 128 + strh w19, [x29,64] + strb w0, [x29,73] + mov w19, 0 +.L1446: + adrp x0, .LANCHOR0 + add x1, x0, :lo12:.LANCHOR0 + mov x23, x0 + ldrh w1, [x1,3234] + cmp w1, w19 + bls .L1445 + mov w20, 0 +.L1452: + add x3, x23, :lo12:.LANCHOR0 + ldrb w0, [x3,3212] + cmp w0, w20 + bls .L1458 + add x0, x29, 64 + add x0, x0, x20, sxtw 1 + ldrh w0, [x0,16] + mov w1, 65535 + cmp w0, w1 + beq .L1448 + ldrh w1, [x3,3230] + mov x2, x22 + ldrb w3, [x3,2776] + madd w0, w0, w1, w19 + mov x1, x21 + bl ftl_read_ppa_page + cmp w0, 512 + beq .L1445 +.L1448: + add w20, w20, 1 + uxth w20, w20 + b .L1452 +.L1458: + add w19, w19, 1 + uxth w19, w19 + b .L1446 +.L1445: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 96 + ret + .size ftl_open_sblk_read_test, .-ftl_open_sblk_read_test + .align 2 + .global sblk_read_page + .type sblk_read_page, %function +sblk_read_page: + stp x29, x30, [sp, -112]! + add x29, sp, 0 + stp x23, x24, [sp,48] + adrp x23, .LANCHOR0 + mov w24, 1 + stp x21, x22, [sp,32] + add x23, x23, :lo12:.LANCHOR0 + uxtb w21, w1 + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov x20, x0 + mov x19, x0 + mov w22, w21 + mov w25, -1 + add x26, x23, 3774 +.L1460: + cbz w22, .L1472 + ldrb w27, [x19] + ldr w28, [x19,40] +.L1461: + mov w0, w28 + mov w1, 0 + bl queue_lun_state + mov w2, w0 + cbz w0, .L1473 + bl queue_wait_first_req_completed + bl queue_remove_completed_req + b .L1461 +.L1473: + ldr w1, [x19,40] + mov w0, 48 + str x2, [x29,104] + bl flash_start_page_read + strb w24, [x19,58] + ldr x2, [x29,104] + mov x0, x26 + strb w2, [x19,59] + mov x1, x19 + strb w25, [x19] + bl buf_add_tail + subs w22, w22, #1 + beq .L1472 + add x19, x23, 728 + sbfiz x27, x27, 6, 32 + add x19, x19, x27 + b .L1460 +.L1472: + adrp x19, .LANCHOR0 + add x19, x19, :lo12:.LANCHOR0 + add x19, x19, 728 +.L1465: + cbz w21, .L1474 + ldrb w0, [x20,58] + cmp w0, 12 + bne .L1466 + ldrb w20, [x20] + sub w21, w21, #1 + add x20, x19, x20, lsl 6 + b .L1465 +.L1466: + bl queue_wait_first_req_completed + bl queue_remove_completed_req + b .L1465 +.L1474: + mov w0, w21 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size sblk_read_page, .-sblk_read_page + .align 2 + .global gc_check_data_one_wl + .type gc_check_data_one_wl, %function +gc_check_data_one_wl: + sub sp, sp, #112 + stp x29, x30, [sp,16] + add x29, sp, 16 + stp x19, x20, [sp,32] + adrp x19, .LANCHOR0 + str x27, [sp,96] + add x20, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,48] + stp x23, x24, [sp,64] + stp x25, x26, [sp,80] + add x20, x20, 2848 + ldr x0, [x20,8] + ldr x23, [x20,-56] + cbnz x0, .L1476 + mov w0, 1 + bl buf_alloc + str x0, [x20,8] +.L1476: + add x21, x19, :lo12:.LANCHOR0 + mov w24, 0 + ldr x20, [x21,2856] + cbnz x20, .L1477 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 216 + mov w2, 336 + bl printk +.L1478: + b .L1478 +.L1477: + add x25, x23, 80 + adrp x26, .LANCHOR4 +.L1499: + ldrb w0, [x25,9] + cmp w24, w0 + bge .L1501 + mov w22, 1 + sxtw x27, w24 +.L1487: + add x0, x21, 2848 + ldrh w1, [x0,20] + cmp w22, w1 + bgt .L1502 + add x1, x27, 8 + ldrh w2, [x21,3230] + ldrh w0, [x0,16] + ldrh w1, [x25,x1,lsl 1] + mul w1, w1, w2 + ldrb w2, [x21,3193] + cmp w2, 3 + bne .L1479 + add w1, w1, w0 + orr w1, w1, w22, lsl 24 + b .L1500 +.L1479: + cmp w2, 2 + bne .L1481 + sub w0, w0, #1 + add w1, w0, w1 + add w1, w1, w22 + orr w1, w1, 33554432 + b .L1500 +.L1481: + add w1, w1, w0 +.L1500: + str w1, [x20,40] + mov x0, x20 + mov w1, 1 + bl sblk_read_page + ldr w2, [x20,52] + cmn w2, #1 + beq .L1482 + add x3, x26, :lo12:.LANCHOR4 + ldrh w0, [x21,2870] + ldr x1, [x20,24] + lsl x0, x0, 2 + ldr x4, [x3,1016] + ldr w5, [x4,x0] + ldr w4, [x1,4] + cmp w5, w4 + bne .L1482 + ldr x3, [x3,1024] + ldr w3, [x3,x0] + ldr w0, [x1,8] + cmp w3, w0 + beq .L1483 +.L1482: + add x0, x26, :lo12:.LANCHOR4 + ldrh w4, [x21,2870] + lsl x4, x4, 2 + ldr x1, [x0,1016] + ldr w3, [x1,x4] + cmn w3, #1 + beq .L1483 + adrp x1, .LANCHOR2+400 + ldr w1, [x1,#:lo12:.LANCHOR2+400] + tbz x1, 10, .L1484 + ldr x7, [x20,24] + ldr x5, [x0,1024] + ldr w0, [x7,12] + str w0, [sp] + adrp x0, .LC132 + add x0, x0, :lo12:.LC132 + ldr w4, [x5,x4] + ldr w6, [x7,4] + ldr w5, [x7] + ldr w1, [x20,40] + ldr w7, [x7,8] + bl printk +.L1484: + add x19, x19, :lo12:.LANCHOR0 + ldrh w1, [x23,80] + ldr x0, [x19,2832] + strh wzr, [x0,x1,lsl 1] + mov w0, -1 + b .L1485 +.L1483: + ldrh w0, [x21,2870] + add w22, w22, 1 + add w0, w0, 1 + strh w0, [x21,2870] + b .L1487 +.L1502: + add w24, w24, 1 + b .L1499 +.L1501: + add x19, x19, :lo12:.LANCHOR0 + ldrh w0, [x19,2864] + add w0, w0, 1 + strh w0, [x19,2864] + mov w0, 0 +.L1485: + sub sp, x29, #16 + ldp x19, x20, [sp,32] + ldp x21, x22, [sp,48] + ldp x23, x24, [sp,64] + ldp x25, x26, [sp,80] + ldr x27, [sp,96] + ldp x29, x30, [sp,16] + add sp, sp, 112 + ret + .size gc_check_data_one_wl, .-gc_check_data_one_wl + .align 2 + .global flash_start_tlc_page_prog + .type flash_start_tlc_page_prog, %function +flash_start_tlc_page_prog: + stp x29, x30, [sp, -96]! + adrp x7, .LANCHOR0 + uxtb w3, w3 + add x29, sp, 0 + add x7, x7, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + str x25, [sp,64] + uxtb w25, w0 + uxtb w24, w1 + uxtb w20, w2 + ldrb w0, [x7,57] + mov x22, x5 + mov x21, x6 + cmp w0, w3 + bhi .L1504 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 240 + mov w2, 658 + bl printk +.L1505: + b .L1505 +.L1504: + add x3, x7, x3, sxtw + ldrb w23, [x3,160] + str x4, [x29,88] + mov w0, w23 + ldr x19, [x7,8] + bl nandc_cs + ldr x4, [x29,88] + cbz w25, .L1506 + sxtw x7, w23 + add x7, x7, 8 + add x7, x19, x7, lsl 8 + str w25, [x7,8] +.L1506: + ubfiz x7, x23, 8, 8 + mov w0, 128 + add x19, x19, x7 + str w24, [x19,2056] + str w0, [x19,2056] + and w0, w4, 255 + str wzr, [x19,2052] + str wzr, [x19,2052] + str w0, [x19,2052] + lsr w0, w4, 8 + str w0, [x19,2052] + lsr w0, w4, 16 + add w4, w4, w4, lsl 1 + str w0, [x19,2052] + sub w0, w4, #1 + add w0, w0, w24 + bl nandc_set_seed + adrp x1, .LANCHOR2+377 + mov x2, x22 + mov x3, x21 + mov w0, 1 + ldrb w1, [x1,#:lo12:.LANCHOR2+377] + bl nandc_xfer_start + bl nandc_xfer_done + str w20, [x19,2056] + mov w0, w23 + bl nandc_de_cs + ldr x25, [sp,64] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 96 + ret + .size flash_start_tlc_page_prog, .-flash_start_tlc_page_prog + .align 2 + .type queue_tlc_prog_cmd, %function +queue_tlc_prog_cmd: + stp x29, x30, [sp, -48]! + mov w1, 1 + mov w2, 26 + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + mov x19, x0 + ldr x6, [x0] + ldr w20, [x6,40] + ldr x5, [x6,8] + and w21, w20, 2097151 + ldrb w0, [x6,60] + ubfx x20, x20, 21, 3 + ldr x6, [x6,24] + mov w3, w20 + mov w4, w21 + bl flash_start_tlc_page_prog + bl nandc_iqr_wait_flash_ready + bl nandc_wait_flash_ready + ldr x6, [x19,8] + mov w3, w20 + ldr x0, [x19] + mov w4, w21 + mov w1, 2 + mov w2, 26 + ldr x5, [x6,8] + ldrb w0, [x0,60] + ldr x6, [x6,24] + bl flash_start_tlc_page_prog + bl nandc_iqr_wait_flash_ready + bl nandc_wait_flash_ready + ldr x6, [x19,16] + mov w3, w20 + ldr x0, [x19] + mov w4, w21 + mov w2, 16 + mov w1, 3 + ldr x5, [x6,8] + ldrb w0, [x0,60] + ldr x6, [x6,24] + bl flash_start_tlc_page_prog + ldr x1, [x19] + mov w0, 4 + strb w0, [x1,58] + mov w0, 1 + strb w0, [x1,59] + mov w0, -1 + strb w0, [x1] + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + add x0, x0, 3774 + bl buf_add_tail + ldr x21, [sp,32] + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size queue_tlc_prog_cmd, .-queue_tlc_prog_cmd + .align 2 + .global sblk_tlc_prog_one_page + .type sblk_tlc_prog_one_page, %function +sblk_tlc_prog_one_page: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + mov x20, x0 + ldr x0, [x0] + ldr w21, [x0,40] +.L1512: + mov w0, w21 + mov w1, 1 + bl queue_lun_state + mov w19, w0 + cbz w0, .L1514 + bl queue_wait_first_req_completed + bl queue_remove_completed_req + b .L1512 +.L1514: + mov x0, x20 + bl queue_tlc_prog_cmd + ldr x21, [sp,32] + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size sblk_tlc_prog_one_page, .-sblk_tlc_prog_one_page + .align 2 + .global sblk_xlc_prog_pages + .type sblk_xlc_prog_pages, %function +sblk_xlc_prog_pages: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + mov x19, x0 + mov x22, x1 + ldr x0, [x0] + mov w24, w2 + ldr w20, [x0,40] +.L1516: + mov w0, w20 + mov w1, 1 + bl queue_lun_state + cbz w0, .L1520 + bl queue_wait_first_req_completed + bl queue_remove_completed_req + b .L1516 +.L1520: + cmp w24, 2 + bne .L1518 + ldr x6, [x19] + mov w1, 1 + ldr x0, [x22] + mov w2, 17 + ldr w20, [x6,40] + ldr x5, [x6,8] + and w23, w20, 2097151 + ldr w21, [x0,40] + ubfx x20, x20, 21, 3 + ldrb w0, [x6,60] + ldr x6, [x6,24] + mov w3, w20 + mov w4, w23 + and w21, w21, 2097151 + bl flash_start_tlc_page_prog + bl nandc_wait_flash_ready + ldr x6, [x22] + mov w3, w20 + ldr x0, [x19] + mov w4, w21 + mov w1, 1 + mov w2, 26 + ldr x5, [x6,8] + ldrb w0, [x0,60] + ldr x6, [x6,24] + bl flash_start_tlc_page_prog + bl nandc_iqr_wait_flash_ready + bl nandc_wait_flash_ready + ldr x6, [x19,8] + mov w1, w24 + ldr x0, [x19] + mov w3, w20 + mov w4, w23 + mov w2, 17 + ldr x5, [x6,8] + ldrb w0, [x0,60] + ldr x6, [x6,24] + bl flash_start_tlc_page_prog + bl nandc_wait_flash_ready + ldr x6, [x22,8] + mov w1, w24 + ldr x0, [x19] + mov w3, w20 + mov w4, w21 + mov w2, 26 + ldr x5, [x6,8] + ldrb w0, [x0,60] + ldr x6, [x6,24] + bl flash_start_tlc_page_prog + bl nandc_iqr_wait_flash_ready + bl nandc_wait_flash_ready + ldr x6, [x19,16] + mov w3, w20 + ldr x0, [x19] + mov w4, w23 + mov w1, 3 + mov w2, 17 + ldr x5, [x6,8] + ldrb w0, [x0,60] + ldr x6, [x6,24] + bl flash_start_tlc_page_prog + bl nandc_wait_flash_ready + ldr x6, [x22,16] + mov w1, 3 + ldr x0, [x19] + mov w2, 16 + mov w3, w20 + mov w4, w21 + ldr x5, [x6,8] + ldrb w0, [x0,60] + ldr x6, [x6,24] + bl flash_start_tlc_page_prog + ldr x1, [x19] + mov w0, 5 + strb w0, [x1,58] + mov w0, 1 + strb w0, [x1,59] + mov w0, -1 + strb w0, [x1] + adrp x0, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + add x0, x0, 3774 + bl buf_add_tail + b .L1519 +.L1518: + mov x0, x19 + bl queue_tlc_prog_cmd +.L1519: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size sblk_xlc_prog_pages, .-sblk_xlc_prog_pages + .align 2 + .global flash_start_page_prog + .type flash_start_page_prog, %function +flash_start_page_prog: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + str x27, [sp,80] + uxtb w22, w0 + and w19, w1, 2097151 + ubfx x0, x1, 21, 3 + ubfx x27, x1, 24, 2 + adrp x1, .LANCHOR0 + stp x25, x26, [sp,64] + add x26, x1, :lo12:.LANCHOR0 + mov x20, x1 + stp x23, x24, [sp,48] + mov x24, x2 + mov x23, x3 + ldrb w2, [x26,57] + cmp w2, w0 + bhi .L1522 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 272 + mov w2, 695 + bl printk +.L1523: + b .L1523 +.L1522: + add x0, x26, x0, sxtw + ldrb w21, [x0,160] + ldr x25, [x26,8] + mov w0, w21 + bl hynix_reconfig_rr_para + mov w0, w21 + bl nandc_cs + cbnz w27, .L1524 + ldrb w0, [x26,58] + cbz w0, .L1525 + ldrb w0, [x26,168] + cbz w0, .L1526 +.L1525: + add x1, x20, :lo12:.LANCHOR0 + ldrh w2, [x1,170] + udiv w0, w19, w2 + mul w0, w0, w2 + ldrb w2, [x1,168] + sub w19, w19, w0 + cbz w2, .L1527 + add w19, w0, w19, lsl 1 + b .L1526 +.L1527: + add x1, x1, 172 + ldrh w19, [x1,w19,uxtw 1] + add w19, w19, w0 + b .L1528 +.L1526: + mov w0, w21 + bl zftl_flash_enter_slc_mode + b .L1528 +.L1524: + mov w0, w21 + bl zftl_flash_exit_slc_mode +.L1528: + ubfiz x0, x21, 8, 8 + add x25, x25, x0 + mov w0, 128 + str w0, [x25,2056] + and w0, w19, 255 + str wzr, [x25,2052] + str wzr, [x25,2052] + str w0, [x25,2052] + lsr w0, w19, 8 + str w0, [x25,2052] + lsr w0, w19, 16 + str w0, [x25,2052] + mov w0, w19 + bl nandc_set_seed + adrp x1, .LANCHOR2+377 + mov x2, x24 + mov x3, x23 + mov w0, 1 + ldrb w1, [x1,#:lo12:.LANCHOR2+377] + bl nandc_xfer_start + bl nandc_xfer_done + str w22, [x25,2056] + mov w0, w21 + bl nandc_de_cs + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size flash_start_page_prog, .-flash_start_page_prog + .align 2 + .type queue_prog_cmd, %function +queue_prog_cmd: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + mov x19, x0 + mov w0, 16 + ldr w1, [x19,40] + ldr x2, [x19,8] + ldr x3, [x19,24] + bl flash_start_page_prog + adrp x0, .LANCHOR0 + ldr w4, [x19,40] + add x1, x0, :lo12:.LANCHOR0 + ldrb w2, [x1,3774] + cmp w2, 255 + beq .L1533 + ubfx x4, x4, 21, 3 + add x1, x1, 728 +.L1535: + add x3, x1, x2, lsl 6 + ldr w5, [x3,40] + ubfx x5, x5, 21, 3 + cmp w4, w5 + bne .L1534 + ldrb w5, [x3,58] + add x3, x3, 48 + cmp w5, 6 + bne .L1534 + mov w1, 3 + strb w1, [x3,10] + b .L1533 +.L1534: + lsl x2, x2, 6 + ldrb w2, [x1,x2] + cmp w2, 255 + bne .L1535 +.L1533: + mov w1, 3 + strb w1, [x19,58] + mov w1, 1 + add x0, x0, :lo12:.LANCHOR0 + strb w1, [x19,59] + mov w1, -1 + add x0, x0, 3774 + strb w1, [x19] + mov x1, x19 + bl buf_add_tail + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size queue_prog_cmd, .-queue_prog_cmd + .align 2 + .global sblk_prog_page + .type sblk_prog_page, %function +sblk_prog_page: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov x19, x0 + uxtb w20, w1 + ldrh w0, [x0,50] + cbz w0, .L1541 + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L1541 + adrp x0, .LC133 + ldr w1, [x19,40] + add x0, x0, :lo12:.LC133 + mov w2, w20 + bl printk +.L1541: + adrp x21, .LANCHOR0 + mov w22, 0 + add x21, x21, :lo12:.LANCHOR0 + mov w23, 1 + add x25, x21, 728 + mov w26, 21 +.L1542: + cbz w20, .L1569 + ldrb w24, [x19] + ldr w27, [x19,40] +.L1543: + mov w0, w27 + mov w1, 1 + bl queue_lun_state + mov w28, w0 + cbz w0, .L1570 + bl queue_wait_first_req_completed + bl queue_remove_completed_req + b .L1543 +.L1570: + cmp w20, 1 + beq .L1545 + ldrb w0, [x21,721] + cbnz w0, .L1546 +.L1545: + mov x0, x19 + bl queue_prog_cmd + b .L1547 +.L1546: + ldrb w1, [x19] + ubfx x2, x27, 21, 3 + cmp w1, 255 + bne .L1548 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 296 + mov w2, 484 + bl printk +.L1549: + b .L1549 +.L1548: + sbfiz x1, x1, 6, 32 + add x1, x25, x1 + ldr w5, [x1,40] + ubfx x0, x5, 21, 3 + cmp w2, w0 + bne .L1550 + ldrh w3, [x21,3218] + ldrb w6, [x21,3216] + sub w2, w26, w3 + lsr w1, w27, w3 + sub w6, w6, #1 + lsl w2, w23, w2 + sub w2, w2, #1 + lsl w4, w23, w3 + uxth w7, w6 + sub w4, w4, #1 + and w0, w7, w1 + lsr w1, w5, w3 + uxth w2, w2 + and w3, w7, w1 + and w3, w2, w3 + and w1, w2, w0 + cmp w1, w3 + uxth w4, w4 + beq .L1551 + and w27, w4, w27 + and w4, w4, w5 + cmp w27, w4 + bne .L1551 + cmp w22, w6 + beq .L1550 + ldr w1, [x19,40] + mov w0, 17 + ldr x2, [x19,8] + add w22, w22, 1 + ldr x3, [x19,24] + bl flash_start_page_prog + strb w23, [x19,59] + mov w0, 8 + strb w0, [x19,58] + mov w0, -1 + mov x1, x19 + strb w0, [x19] + add x0, x21, 3774 + bl buf_add_tail + b .L1547 +.L1551: + mov x0, x19 + mov w22, 0 + bl queue_prog_cmd + b .L1547 +.L1550: + mov x0, x19 + mov w22, w28 + bl queue_prog_cmd +.L1547: + sbfiz x19, x24, 6, 32 + sub w20, w20, #1 + add x19, x25, x19 + b .L1542 +.L1569: + mov w0, w20 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size sblk_prog_page, .-sblk_prog_page + .align 2 + .global ftl_flush + .type ftl_flush, %function +ftl_flush: + stp x29, x30, [sp, -32]! + adrp x2, .LANCHOR0 + add x29, sp, 0 + add x0, x2, :lo12:.LANCHOR0 + stp x19, x20, [sp,16] + mov x19, x2 + adrp x20, .LANCHOR5 + ldrb w1, [x0,3772] + cbz w1, .L1572 + add x2, x20, :lo12:.LANCHOR5 + add x0, x0, 728 + ldrb w2, [x2,384] + add x0, x0, x2, lsl 6 + bl sblk_prog_page +.L1572: + add x2, x19, :lo12:.LANCHOR0 + add x20, x20, :lo12:.LANCHOR5 + mov w0, -1 + strb wzr, [x2,3772] + strb w0, [x20,384] + bl sblk_wait_write_queue_completed + bl ftl_write_completed + mov w0, -1 + bl ftl_vpn_decrement + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size ftl_flush, .-ftl_flush + .align 2 + .global zftl_cache_flush + .type zftl_cache_flush, %function +zftl_cache_flush: + adrp x0, .LANCHOR0+3772 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrb w0, [x0,#:lo12:.LANCHOR0+3772] + cbz w0, .L1576 + bl timer_get_time + adrp x1, .LANCHOR5+388 + ldr w1, [x1,#:lo12:.LANCHOR5+388] + add w1, w1, 100 + cmp w0, w1 + bls .L1576 + bl ftl_flush +.L1576: + ldp x29, x30, [sp], 16 + ret + .size zftl_cache_flush, .-zftl_cache_flush + .align 2 + .global flash_prog_page + .type flash_prog_page, %function +flash_prog_page: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x21, x22, [sp,32] + uxtb x22, w0 + adrp x0, .LANCHOR0+8 + adrp x21, .LANCHOR2 + str x27, [sp,80] + stp x19, x20, [sp,16] + ldr x19, [x0,#:lo12:.LANCHOR0+8] + add x0, x21, :lo12:.LANCHOR2 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + mov x20, x22 + add x22, x22, 8 + ldr w0, [x0,400] + mov w23, w1 + mov x25, x3 + mov x26, x2 + mov w3, w4 + add x22, x19, x22, lsl 8 + and w27, w1, 2097151 + ubfx x24, x23, 24, 2 + tbz x0, 4, .L1581 + adrp x0, .LC134 + mov w2, w24 + add x0, x0, :lo12:.LC134 + bl printk +.L1581: + bl nandc_wait_flash_ready + mov w0, w20 + bl hynix_reconfig_rr_para + mov w0, w20 + bl nandc_cs + mov w0, w20 + cbnz w24, .L1582 + bl zftl_flash_enter_slc_mode + b .L1583 +.L1582: + bl zftl_flash_exit_slc_mode +.L1583: + ubfiz x4, x20, 8, 8 + mov w0, 128 + add x19, x19, x4 + add x21, x21, :lo12:.LANCHOR2 + str w0, [x19,2056] + and w0, w23, 255 + str wzr, [x19,2052] + str wzr, [x19,2052] + str w0, [x19,2052] + lsr w0, w27, 8 + str w0, [x19,2052] + lsr w0, w27, 16 + str w0, [x19,2052] + mov w0, w27 + bl nandc_set_seed + ldrb w1, [x21,377] + mov x2, x26 + mov x3, x25 + mov w0, 1 + bl nandc_xfer_start + bl nandc_xfer_done + mov w0, 16 + str w0, [x19,2056] + bl nandc_iqr_wait_flash_ready + bl nandc_wait_flash_ready + mov x0, x22 + bl flash_read_status + mov w21, w0 + cbnz w24, .L1584 + mov w0, w20 + bl zftl_flash_exit_slc_mode +.L1584: + mov w0, w20 + and w19, w21, 4 + bl nandc_de_cs + tbz x21, 2, .L1585 + adrp x0, .LC135 + mov w1, w23 + add x0, x0, :lo12:.LC135 + mov w2, w19 + bl printk +.L1585: + mov w0, w19 + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size flash_prog_page, .-flash_prog_page + .align 2 + .global flash_test_blk + .type flash_test_blk, %function +flash_test_blk: + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + uxtb w22, w0 + uxth w20, w1 + cbnz w22, .L1593 + adrp x0, .LANCHOR5+392 + ldrb w1, [x0,#:lo12:.LANCHOR5+392] + mov w0, w22 + cmp w1, w20 + bhi .L1594 +.L1593: + adrp x19, .LANCHOR4 + mov w1, 165 + add x19, x19, :lo12:.LANCHOR4 + mov w2, 32 + ldr x0, [x19,1128] + bl ftl_memset + ldr x0, [x19,1120] + mov w1, 90 + mov w2, 8 + bl ftl_memset + adrp x0, .LANCHOR0+170 + ldrh w21, [x0,#:lo12:.LANCHOR0+170] + mov w0, w22 + mul w21, w20, w21 + mov w1, w21 + bl flash_erase_block + cmn w0, #1 + beq .L1599 + adrp x20, .LANCHOR2 + ldr x2, [x19,1120] + add x20, x20, :lo12:.LANCHOR2 + ldr x3, [x19,1128] + mov w0, w22 + mov w1, w21 + add x20, x20, 368 + ldrb w4, [x20,9] + bl flash_prog_page + cmn w0, #1 + beq .L1599 + ldrb w4, [x20,9] + mov w0, w22 + ldr x2, [x19,1120] + mov w1, w21 + ldr x3, [x19,1128] + bl flash_read_page + cmn w0, #1 + mov w20, w0 + beq .L1599 + ldr x0, [x19,1120] + ldr w1, [x0] + mov w0, 23130 + bfi w0, w0, 16, 16 + cmp w1, w0 + bne .L1599 + ldr x0, [x19,1128] + ldr w1, [x0] + mov w0, 42405 + bfi w0, w0, 16, 16 + cmp w1, w0 + csinv w20, w20, wzr, eq + b .L1596 +.L1599: + mov w20, -1 +.L1596: + mov w0, w22 + mov w1, w21 + bl flash_erase_block + mov w0, w20 +.L1594: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size flash_test_blk, .-flash_test_blk + .section .text.unlikely,"ax",%progbits + .align 2 + .type fw_flash_page_prog.constprop.30, %function +fw_flash_page_prog.constprop.30: + stp x29, x30, [sp, -64]! + adrp x4, .LANCHOR0 + add x29, sp, 0 + add x4, x4, :lo12:.LANCHOR0 + str x21, [sp,32] + mov x21, x1 + stp x19, x20, [sp,16] + str x2, [x29,56] + ldr x1, [x4,48] + ldrb w20, [x4,148] + ldrb w19, [x1,9] + udiv w19, w0, w19 + ldrb w0, [x4,56] + bl nandc_bch_sel + ldr x3, [x29,56] + mov w1, w19 + mov x2, x21 + mov w4, 4 + mov w0, 0 + bl flash_prog_page + mov w19, w0 + mov w0, w20 + bl nandc_bch_sel + ldr x21, [sp,32] + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 64 + ret + .size fw_flash_page_prog.constprop.30, .-fw_flash_page_prog.constprop.30 + .text + .align 2 + .global flash_prog_page_en + .type flash_prog_page_en, %function +flash_prog_page_en: + stp x29, x30, [sp, -80]! + adrp x7, .LANCHOR0 + add x29, sp, 0 + stp x21, x22, [sp,32] + mov x21, x2 + add x2, x7, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + mov w24, w1 + uxtb w25, w0 + ldrb w1, [x2,57] + mov x20, x3 + mov w22, w4 + uxtb w23, w5 + cmp w1, w25 + ubfx x0, x24, 24, 2 + bhi .L1609 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 312 + mov w2, 481 + bl printk +.L1610: + b .L1610 +.L1609: + add x1, x2, x25, sxtw + mov w19, w24 + ldrb w26, [x1,160] + cbnz w0, .L1611 + ldrb w0, [x2,58] + cbz w0, .L1612 + ldrb w0, [x2,168] + cbz w0, .L1611 +.L1612: + add x7, x7, :lo12:.LANCHOR0 + ldrh w19, [x7,170] + ldrb w1, [x7,168] + udiv w6, w24, w19 + mul w19, w6, w19 + sub w0, w24, w19 + cbz w1, .L1613 + add w19, w19, w0, lsl 1 + b .L1611 +.L1613: + add x7, x7, 172 + ldrh w0, [x7,w0,uxtw 1] + add w19, w0, w19 +.L1611: + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 4, .L1614 + adrp x0, .LC136 + mov w1, w26 + add x0, x0, :lo12:.LC136 + mov w2, w24 + bl printk +.L1614: + mov w0, w26 + mov w1, w19 + mov x2, x21 + mov x3, x20 + mov w4, w22 + bl flash_prog_page + mov w26, w0 + cbz w23, .L1615 + adrp x19, .LANCHOR4 + mov w0, w25 + add x23, x19, :lo12:.LANCHOR4 + mov w1, w24 + mov w4, w22 + ldr x2, [x23,1120] + ldr x3, [x23,1128] + bl flash_read_page_en + cmp w0, 512 + beq .L1616 + cmn w0, #1 + beq .L1616 + ldr x0, [x23,1120] + ldr w1, [x21] + ldr w0, [x0] + cmp w1, w0 + bne .L1616 + ldr x0, [x23,1128] + ldr w1, [x20] + ldr w0, [x0] + cmp w1, w0 + beq .L1615 +.L1616: + add x19, x19, :lo12:.LANCHOR4 + mov w2, 4 + adrp x0, .LC137 + mov w3, w2 + add x0, x0, :lo12:.LC137 + ldr x1, [x19,1128] + bl rknand_print_hex + mov w2, 4 + adrp x0, .LC138 + ldr x1, [x19,1120] + add x0, x0, :lo12:.LC138 + mov w3, w2 + bl rknand_print_hex + b .L1617 +.L1615: + cmn w26, #1 + bne .L1618 +.L1617: + adrp x0, .LC139 + mov w1, w24 + add x0, x0, :lo12:.LC139 + bl printk + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 312 + mov w2, 507 + bl printk +.L1619: + b .L1619 +.L1618: + mov w0, w26 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size flash_prog_page_en, .-flash_prog_page_en + .align 2 + .global ftl_test_block + .type ftl_test_block, %function +ftl_test_block: + stp x29, x30, [sp, -112]! + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + adrp x22, .LANCHOR4 + adrp x24, .LANCHOR5 + add x22, x22, :lo12:.LANCHOR4 + add x24, x24, :lo12:.LANCHOR5 + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + stp x27, x28, [sp,80] + adrp x25, .LC140 + str wzr, [x22,1152] + uxth w26, w0 + str wzr, [x24,128]! + mov w20, 0 + add x25, x25, :lo12:.LC140 + add x22, x22, 1152 +.L1633: + adrp x21, .LANCHOR0 + add x0, x21, :lo12:.LANCHOR0 + ldrb w0, [x0,3232] + cmp w0, w20 + bls .L1649 + mov w23, 0 +.L1640: + add x0, x21, :lo12:.LANCHOR0 + ldrb w0, [x0,3216] + cmp w0, w23 + bls .L1650 + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 12, .L1634 + mov x0, x25 + mov w1, w26 + bl printk +.L1634: + add x0, x21, :lo12:.LANCHOR0 + ldrb w19, [x0,3216] + madd w19, w26, w19, w23 + uxth w19, w19 + cbnz w20, .L1635 + ldr x0, [x0,152] + ldrb w0, [x0,47] + cmp w0, w19 + bcs .L1636 +.L1635: + uxtb w27, w20 + mov w1, w19 + mov w0, w27 + bl flash_check_bad_block + cbnz w0, .L1636 + add x4, x21, :lo12:.LANCHOR0 + mov w0, w27 + str x4, [x29,104] + ldrh w28, [x4,3230] + mul w28, w19, w28 + mov w1, w28 + bl flash_erase_block + ldr x4, [x29,104] + cbnz w0, .L1648 + ldrb w4, [x4,2776] + mov w0, w27 + mov w1, w28 + mov x2, x22 + mov x3, x24 + mov w5, 1 + bl flash_prog_page_en + cbz w0, .L1636 +.L1648: + mov w0, w27 + mov w1, w19 + bl flash_mask_bad_block +.L1636: + add w23, w23, 1 + uxth w23, w23 + b .L1640 +.L1650: + add w20, w20, 1 + uxth w20, w20 + b .L1633 +.L1649: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size ftl_test_block, .-ftl_test_block + .align 2 + .global ftl_prog_page + .type ftl_prog_page, %function +ftl_prog_page: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + str x19, [sp,16] + uxtb w19, w0 + str x1, [x29,32] + str x2, [x29,40] + str x3, [x29,48] + str x4, [x29,56] + bl sblk_wait_write_queue_completed + ldr x1, [x29,32] + mov w0, w19 + ldr x2, [x29,40] + mov w5, 1 + ldr x3, [x29,48] + ldr x4, [x29,56] + bl flash_prog_page_en + cmn w0, #1 + bne .L1652 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 336 + mov w2, 1439 + bl printk +.L1653: + b .L1653 +.L1652: + ldr x19, [sp,16] + ldp x29, x30, [sp], 64 + ret + .size ftl_prog_page, .-ftl_prog_page + .align 2 + .global ftl_info_flush + .type ftl_info_flush, %function +ftl_info_flush: + stp x29, x30, [sp, -112]! + mov w1, 0 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x22, .LANCHOR0 + adrp x21, .LANCHOR5 + stp x25, x26, [sp,64] + mov w26, w0 + add x0, x22, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + stp x27, x28, [sp,80] + add x19, x21, :lo12:.LANCHOR5 + adrp x23, .LC141 + ldrb w2, [x0,2776] + mov w24, 0 + add x0, x19, 448 + add x23, x23, :lo12:.LC141 + lsl w2, w2, 1 + mov w27, 1 + add x25, x19, 768 + bl ftl_memset +.L1655: + add x0, x22, :lo12:.LANCHOR0 + ldrb w28, [x19,704] + ldrh w20, [x19,706] + ldr x2, [x0,2800] + ldrh w4, [x0,3230] + ldr w3, [x2,4] + add w3, w3, 1 + str w3, [x2,4] + str w26, [x19,448] + ldr x3, [x0,2800] + ldr w0, [x3,4] + str w0, [x19,452] + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 12, .L1656 + ldr w3, [x3,4] + mov x0, x23 + mov w1, w28 + mov w2, w20 + str x4, [x29,104] + bl printk + ldr x4, [x29,104] +.L1656: + add x2, x22, :lo12:.LANCHOR0 + ldrh w0, [x19,706] + ldrh w1, [x2,3234] + cmp w1, w0 + bhi .L1657 + ldrb w0, [x19,705] + mov w4, 0 + ldr x5, [x2,152] + ldrb w1, [x19,704] +.L1664: + add w0, w0, 1 + uxtb w0, w0 + cmp w0, 7 + bls .L1658 + mov x2, 0 +.L1663: + add x3, x5, x2 + uxth w6, w2 + ldrb w7, [x3,40] + add w3, w7, 127 + uxtb w3, w3 + cmp w3, 125 + bhi .L1659 + add x21, x21, :lo12:.LANCHOR5 + strb w0, [x21,705] + cbz w4, .L1660 + strb w1, [x21,704] +.L1660: + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 352 + mov w2, 157 + bl printk +.L1661: + b .L1661 +.L1659: + cmp w7, 255 + bne .L1662 + add x2, x2, 1 + cmp x2, 8 + bne .L1663 + mov w6, w2 +.L1662: + uxtb w0, w6 + mov w24, 1 +.L1658: + add w1, w0, 8 + add x1, x5, x1, sxtw + ldrb w1, [x1,32] + mov w4, 1 + cmp w1, 255 + beq .L1664 + add x28, x22, :lo12:.LANCHOR0 + strb w0, [x19,705] + strb w1, [x19,704] + mov w0, 0 + ldrh w20, [x28,3230] + mul w20, w1, w20 + mov w1, w20 + bl flash_erase_block + ldrb w4, [x28,2776] + mov w1, w20 + mov w0, 0 + mov x2, x25 + add x3, x19, 448 + add w20, w20, 1 + bl ftl_prog_page + strh w27, [x19,706] + b .L1665 +.L1657: + madd w20, w28, w4, w20 + cbnz w0, .L1665 + mov w1, w20 + bl flash_erase_block +.L1665: + add x4, x22, :lo12:.LANCHOR0 + mov w1, w20 + mov w0, 0 + mov x2, x25 + add x3, x19, 448 + ldrb w4, [x4,2776] + bl ftl_prog_page + cmn w0, #1 + ldrh w1, [x19,706] + add w1, w1, 1 + strh w1, [x19,706] + beq .L1655 + cbnz w24, .L1666 +.L1674: + add x21, x21, :lo12:.LANCHOR5 + ldrb w0, [x21,704] + cmp w0, 255 + bne .L1690 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + mov w2, 192 + add x1, x1, 352 + add x0, x0, :lo12:.LC34 + bl printk + b .L1675 +.L1666: + ldrb w19, [x19,705] + add w19, w19, 1 +.L1669: + cmp w19, 7 + bhi .L1674 + add x2, x22, :lo12:.LANCHOR0 + add w0, w19, 8 + ldr x1, [x2,152] + add x0, x1, x0, sxtw + ldrb w1, [x0,32] + add w0, w1, 127 + uxtb w0, w0 + cmp w0, 125 + bhi .L1670 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 352 + mov w2, 185 + bl printk +.L1671: + b .L1671 +.L1670: + cmp w1, 255 + beq .L1672 + ldrh w2, [x2,3230] + mov w0, 0 + mul w1, w1, w2 + bl flash_erase_block +.L1672: + add w19, w19, 1 + uxth w19, w19 + b .L1669 +.L1675: + b .L1675 +.L1690: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size ftl_info_flush, .-ftl_info_flush + .align 2 + .global ftl_info_blk_init + .type ftl_info_blk_init, %function +ftl_info_blk_init: + stp x29, x30, [sp, -112]! + mov w2, 16384 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + add x19, x20, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + adrp x21, .LANCHOR5 + adrp x23, .LANCHOR6 + ldrh w1, [x19,2826] + add x22, x21, :lo12:.LANCHOR5 + add x24, x22, 768 + add x23, x23, :lo12:.LANCHOR6 + mov x0, x24 + str x24, [x19,2840] + add x1, x24, x1, lsl 2 + str x1, [x19,2800] + mov w1, 0 + strb wzr, [x23,-256] + adrp x26, .LC142 + adrp x27, .LANCHOR2 + bl ftl_memset + add x26, x26, :lo12:.LC142 + sub x0, x23, #192 + mov w1, 0 + mov w2, 16384 + add x23, x22, 448 + bl ftl_memset + strb wzr, [x22,705] + ldr x0, [x19,152] + mov w19, 7 + strh wzr, [x22,706] + ldrb w0, [x0,40] + strb w0, [x22,704] +.L1696: + add x5, x20, :lo12:.LANCHOR0 + add w0, w19, 8 + sxth w25, w19 + ldr x1, [x5,152] + add x0, x1, x0, sxtw + ldrb w1, [x0,32] + cmp w1, 255 + beq .L1692 + ldrh w22, [x5,3230] + mov w0, 0 + ldrb w4, [x5,2776] + mov x2, x24 + mov x3, x23 + str x5, [x29,104] + mul w22, w1, w22 + mov w1, w22 + bl ftl_read_page + cmn w0, #1 + mov w28, w0 + ldr x5, [x29,104] + bne .L1693 + ldrb w4, [x5,2776] + mov w0, 0 + add w1, w22, 1 + mov x2, x24 + mov x3, x23 + bl ftl_read_page + mov w28, w0 +.L1693: + add x0, x27, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 12, .L1694 + add x0, x20, :lo12:.LANCHOR0 + mov w1, w19 + mov w2, w28 + mov w3, 65 + ldr x4, [x0,2800] + mov x0, x26 + ldr w4, [x4] + bl printk +.L1694: + cmn w28, #1 + beq .L1692 + add x0, x20, :lo12:.LANCHOR0 + ldr x0, [x0,2800] + ldr w1, [x0] + mov w0, 21574 + movk w0, 0x494c, lsl 16 + cmp w1, w0 + beq .L1709 +.L1692: + sub w19, w19, #1 + cmn w19, #1 + bne .L1696 + mov w25, 0 + b .L1695 +.L1709: + mov w19, w25 +.L1695: + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 12, .L1697 + add x0, x20, :lo12:.LANCHOR0 + mov w1, w19 + mov w2, 4800 + ldr x3, [x0,2800] + adrp x0, .LC143 + add x0, x0, :lo12:.LC143 + ldr w3, [x3] + bl printk +.L1697: + cmn w19, #1 + bne .L1698 + add x0, x21, :lo12:.LANCHOR5 + mov w1, 0 + add x0, x0, 768 + mov w2, 16384 + add x20, x20, :lo12:.LANCHOR0 + bl ftl_memset + mov w0, 21574 + ldr x1, [x20,2800] + movk w0, 0x494c, lsl 16 + str w0, [x1] + mov w0, w19 + b .L1699 +.L1698: + add x26, x20, :lo12:.LANCHOR0 + add x23, x21, :lo12:.LANCHOR5 + add w0, w25, 8 + add x24, x23, 768 + mov x2, x24 + mov w4, 4 + ldr x1, [x26,152] + add x0, x1, x0, sxtw + strb w25, [x23,705] + add x25, x23, 448 + ldrb w1, [x0,32] + mov x3, x25 + mov w0, 0 + strb w1, [x23,704] + bl flash_get_last_written_page + sxth w22, w0 + add w0, w0, 1 + uxth w19, w0 + ldrb w0, [x23,704] + ldrh w23, [x26,3230] + mul w23, w0, w23 +.L1700: + tbnz w22, #31, .L1705 + add x26, x20, :lo12:.LANCHOR0 + mov w0, 0 + add w1, w22, w23 + mov x2, x24 + mov x3, x25 + ldrb w4, [x26,2776] + bl ftl_read_page + cmn w0, #1 + beq .L1701 + ldr x0, [x26,2800] + ldr w1, [x0] + mov w0, 21574 + movk w0, 0x494c, lsl 16 + cmp w1, w0 + bne .L1701 +.L1705: + add x20, x20, :lo12:.LANCHOR0 + add x21, x21, :lo12:.LANCHOR5 + ldr x0, [x20,2800] + strh w19, [x21,706] + ldr w2, [x0,16] + cmp w2, 2048 + bls .L1703 + lsr w1, w2, 11 + ldr w3, [x0,20] + add w3, w3, w1 + sub w1, w2, w1, lsl 11 + str w3, [x0,20] + str w1, [x0,16] + b .L1703 +.L1701: + sub w22, w22, #1 + sxth w22, w22 + b .L1700 +.L1703: + ldr w2, [x0,24] + cmp w2, 2048 + bls .L1706 + lsr w1, w2, 11 + ldr w3, [x0,28] + add w3, w3, w1 + sub w1, w2, w1, lsl 11 + str w3, [x0,28] + str w1, [x0,24] +.L1706: + ldr w2, [x0,32] + cmp w2, 1024 + bls .L1707 + lsr w1, w2, 10 + ldr w3, [x0,36] + add w3, w3, w1 + sub w1, w2, w1, lsl 10 + str w3, [x0,36] + str w1, [x0,32] +.L1707: + ldr w2, [x0,40] + cmp w2, 1024 + bls .L1708 + lsr w1, w2, 10 + ldr w3, [x0,44] + add w3, w3, w1 + sub w1, w2, w1, lsl 10 + str w3, [x0,44] + str w1, [x0,40] +.L1708: + ldr w1, [x0,64] + add w1, w1, 1 + str w1, [x0,64] + mov w0, 0 + bl ftl_info_flush + mov w0, 0 + bl ftl_info_flush + mov w0, 0 +.L1699: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size ftl_info_blk_init, .-ftl_info_blk_init + .align 2 + .global ftl_ext_info_flush + .type ftl_ext_info_flush, %function +ftl_ext_info_flush: + stp x29, x30, [sp, -64]! + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + bl timer_get_time + adrp x22, .LANCHOR0 + mov w1, 100 + udiv w0, w0, w1 + add x1, x22, :lo12:.LANCHOR0 + ldr x1, [x1,2792] + ldr w3, [x1,520] + cmp w0, w3 + bls .L1727 + ldr w2, [x1,12] + sub w2, w2, w3 + add w2, w2, w0 + str w2, [x1,12] + b .L1734 +.L1727: + bcs .L1728 +.L1734: + str w0, [x1,520] +.L1728: + adrp x20, .LANCHOR5 + adrp x23, .LANCHOR6 + add x20, x20, :lo12:.LANCHOR5 + add x23, x23, :lo12:.LANCHOR6 + mov w0, 0 + add x20, x20, 448 + sub x23, x23, #192 + bl ftl_total_vpn_update +.L1733: + add x2, x22, :lo12:.LANCHOR0 + ldr x0, [x2,2800] + ldr w1, [x0,56] + add w1, w1, 1 + str w1, [x0,56] + ldrh w1, [x0,140] + ldrh w0, [x2,3234] + cmp w1, w0 + bcc .L1729 + bl ftl_ext_alloc_new_blk +.L1729: + add x21, x22, :lo12:.LANCHOR0 + mov w0, 65535 + ldr x3, [x21,2800] + ldrh w1, [x3,130] + cmp w1, w0 + bne .L1730 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 368 + mov w2, 1058 + bl printk +.L1731: + b .L1731 +.L1730: + ldrh w19, [x21,3218] + mov w0, 21 + mov w2, 1 + sub w19, w0, w19 + ldrh w0, [x3,140] + asr w24, w1, w19 + lsl w19, w2, w19 + sub w19, w19, #1 + ldrb w2, [x21,2776] + and w1, w19, w1 + ldrh w19, [x21,3230] + lsl w2, w2, 1 + madd w19, w1, w19, w0 + mov w1, 0 + mov x0, x20 + bl ftl_memset + str wzr, [x20] + ldr x0, [x21,2800] + uxth w19, w19 + ldrb w4, [x21,2776] + mov w1, w19 + mov x2, x23 + mov x3, x20 + ldr w0, [x0,56] + str w0, [x20,4] + mov w0, w24 + bl ftl_prog_page + cmn w0, #1 + ldr x2, [x21,2800] + ldrh w1, [x2,140] + add w1, w1, 1 + uxth w1, w1 + strh w1, [x2,140] + beq .L1733 + cmp w1, 1 + cset w0, eq + cbnz w0, .L1733 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size ftl_ext_info_flush, .-ftl_ext_info_flush + .align 2 + .global ftl_ext_info_init + .type ftl_ext_info_init, %function +ftl_ext_info_init: + stp x29, x30, [sp, -96]! + mov w4, 4 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + str x27, [sp,80] + add x1, x19, :lo12:.LANCHOR0 + adrp x20, .LANCHOR6 + stp x23, x24, [sp,48] + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + strh wzr, [x1,3768] + adrp x21, .LANCHOR5 + ldr x0, [x1,2800] + add x2, x20, :lo12:.LANCHOR6 + ldrh w22, [x1,3218] + mov w1, 21 + add x3, x21, :lo12:.LANCHOR5 + sub x2, x2, #192 + ldrh w0, [x0,130] + sub w22, w1, w22 + add x3, x3, 448 + asr w22, w0, w22 + and w24, w0, 16383 + mov w1, w24 + uxtb w22, w22 + mov w0, w22 + bl flash_get_last_written_page + sxth w26, w0 + adrp x0, .LANCHOR2+400 + mov w23, w26 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 12, .L1736 + adrp x1, .LANCHOR3 + adrp x0, .LC99 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC99 + add x1, x1, 392 + mov w2, 1101 + mov w3, w26 + bl printk +.L1736: + add x20, x20, :lo12:.LANCHOR6 + add x21, x21, :lo12:.LANCHOR5 + mov w25, w26 + sub x20, x20, #192 + add x21, x21, 448 +.L1737: + tbnz w25, #31, .L1742 + add x27, x19, :lo12:.LANCHOR0 + mov w0, w22 + mov x2, x20 + mov x3, x21 + ldrh w1, [x27,3230] + ldrb w4, [x27,2776] + madd w1, w24, w1, w25 + bl flash_read_page_en + cmp w0, 512 + beq .L1738 + cmn w0, #1 + beq .L1738 + ldr x0, [x27,2792] + ldr w1, [x0] + mov w0, 20038 + movk w0, 0x4549, lsl 16 + cmp w1, w0 + bne .L1738 +.L1742: + add x0, x19, :lo12:.LANCHOR0 + ldr x0, [x0,2800] + ldrh w1, [x0,140] + cmp w1, w26 + bgt .L1740 + add w23, w23, 1 + strh w23, [x0,140] + bl ftl_ext_info_flush + b .L1740 +.L1738: + sub w25, w25, #1 + sxth w25, w25 + b .L1737 +.L1740: + add x19, x19, :lo12:.LANCHOR0 + ldr x20, [x19,2792] + bl timer_get_time + mov w1, 100 + udiv w0, w0, w1 + str w0, [x20,520] + ldr x20, [x19,2792] + bl timer_get_time + str w0, [x20,604] + ldr x0, [x19,2792] + str wzr, [x0,608] + mov w0, -1 + strh w0, [x19,3770] + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldr x27, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size ftl_ext_info_init, .-ftl_ext_info_init + .align 2 + .global ftl_low_format + .type ftl_low_format, %function +ftl_low_format: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov w19, 8 + adrp x21, .LANCHOR0 +.L1756: + add x2, x21, :lo12:.LANCHOR0 + adrp x20, .LANCHOR0 + ldr x0, [x2,152] + add x0, x0, x19, sxtw + ldrb w1, [x0,32] + add w0, w1, 127 + uxtb w0, w0 + cmp w0, 125 + bhi .L1753 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 416 + mov w2, 1253 + bl printk +.L1754: + b .L1754 +.L1753: + cmp w1, 255 + beq .L1755 + ldrh w2, [x2,3230] + mov w0, 0 + mul w1, w1, w2 + bl flash_erase_block +.L1755: + add w19, w19, 1 + cmp w19, 16 + bne .L1756 + bl sblk_init + mov w19, 0 + bl ftl_info_blk_init + adrp x24, .LANCHOR7 + adrp x0, .LANCHOR5 + mov w1, 0 + add x0, x0, :lo12:.LANCHOR5 + mov w2, 16384 + add x0, x0, 768 + mov w25, 1 + bl ftl_memset + add x0, x20, :lo12:.LANCHOR0 + ldr x1, [x0,2800] + mov w0, 21574 + movk w0, 0x494c, lsl 16 + str w0, [x1] +.L1757: + add x21, x20, :lo12:.LANCHOR0 + ldrh w0, [x21,2826] + cmp w0, w19 + bls .L1791 + add x0, x24, :lo12:.LANCHOR7 + mov w27, 0 + ubfiz x22, x19, 2, 16 + mov w23, w27 + strh w19, [x0,3136] + mov w0, w19 + bl ftl_test_block + ldrb w28, [x21,3216] + ldrb w3, [x21,3232] + mov w21, w27 + mul w5, w19, w28 + uxth w4, w28 +.L1758: + cmp w21, w3 + bcs .L1762 + mov x26, 0 +.L1763: + cmp w4, w26, uxth + bls .L1792 + add w1, w5, w26 + mov w0, w21 + str x4, [x29,104] + str x3, [x29,112] + str x5, [x29,120] + bl flash_check_bad_block + ldr x5, [x29,120] + ldr x3, [x29,112] + ldr x4, [x29,104] + cbz w0, .L1759 + add x0, x20, :lo12:.LANCHOR0 + add w1, w27, w26 + lsl w1, w25, w1 + ldr x0, [x0,2840] + add x0, x0, x22 + ldrb w2, [x0,3] + orr w1, w1, w2 + strb w1, [x0,3] + b .L1760 +.L1759: + add w23, w23, 1 + uxth w23, w23 +.L1760: + add x26, x26, 1 + b .L1763 +.L1792: + add w21, w21, 1 + add w27, w27, w28 + uxth w21, w21 + b .L1758 +.L1762: + cbnz w23, .L1764 + add x0, x20, :lo12:.LANCHOR0 + ldr x0, [x0,2840] + add x22, x0, x22 + ldrb w0, [x22,2] + orr w0, w0, -32 + strb w0, [x22,2] +.L1764: + add w19, w19, 1 + uxth w19, w19 + b .L1757 +.L1791: + adrp x0, .LANCHOR6 + mov w1, 0 + add x0, x0, :lo12:.LANCHOR6 + mov w2, 16384 + sub x0, x0, #192 + bl ftl_memset + ldr x1, [x21,2792] + mov w0, 20038 + movk w0, 0x4549, lsl 16 + mov x2, 0 + mov w6, 3 + str w0, [x1] + ldr x0, [x21,152] + ldrb w4, [x21,3216] + ldrb w19, [x0,47] + udiv w19, w19, w4 + add w19, w19, 1 +.L1767: + add x1, x20, :lo12:.LANCHOR0 + lsl x0, x2, 2 + cmp w4, 1 + add x2, x2, 1 + csinc w5, w6, wzr, ne + ldr x3, [x1,2840] + cmp w19, w2, uxth + add x3, x3, x0 + strb w5, [x3,3] + ldr x3, [x1,2840] + add x3, x3, x0 + ldrb w5, [x3,2] + orr w5, w5, -32 + strb w5, [x3,2] + ldr x3, [x1,2840] + add x0, x3, x0 + ldrb w3, [x0,2] + and w3, w3, -25 + strb w3, [x0,2] + bhi .L1767 + mov w0, 16 + sdiv w4, w0, w4 + ldr x0, [x1,2800] + add w4, w19, w4 + uxth w4, w4 + strh w4, [x0,134] + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 12, .L1768 + adrp x0, .LC144 + mov w1, 1290 + add x0, x0, :lo12:.LC144 + mov w2, 128 + mov w3, w19 + bl printk +.L1768: + add x21, x20, :lo12:.LANCHOR0 + mov w1, 255 + mov w2, 128 + ldr x0, [x21,2800] + add x0, x0, 160 + bl ftl_memset + ldrb w10, [x21,3216] + mov w12, 21 + ldrh w0, [x21,3218] + mov w3, 0 + ldrb w14, [x21,3232] + mov w1, w3 + uxth w11, w10 + sub w12, w12, w0 + mul w9, w19, w11 + uxth w9, w9 +.L1769: + add x2, x20, :lo12:.LANCHOR0 + ldr x0, [x2,2800] + ldrh w0, [x0,134] + cmp w19, w0 + bcs .L1793 + ldr x4, [x2,2840] + ubfiz x0, x19, 2, 16 + add w7, w3, w9 + mov w6, 0 + add x4, x4, x0 + uxth w7, w7 + ldrb w5, [x4,2] + orr w5, w5, -32 + strb w5, [x4,2] + ldr x4, [x2,2840] + add x4, x4, x0 + ldrb w5, [x4,2] + and w5, w5, -25 + strb w5, [x4,2] + mov w5, w6 + ldr x4, [x2,2840] + ldr x15, [x2,2800] + add x0, x4, x0 +.L1770: + cmp w14, w5, uxth + bls .L1774 + lsl w13, w5, w12 + mov x4, 0 + uxth w13, w13 +.L1775: + uxth w2, w4 + cmp w2, w11 + bcs .L1794 + ldrb w8, [x0,3] + add w16, w6, w4 + asr w8, w8, w16 + tbnz x8, 0, .L1771 + cmp w10, 1 + mov w8, w7 + bls .L1772 + and w2, w2, 1 + add w2, w7, w2 + uxth w8, w2 +.L1772: + add x16, x15, x1, sxtw 1 + add w1, w1, 1 + add w2, w8, w13 + strh w2, [x16,160] + uxth w1, w1 +.L1771: + add x4, x4, 1 + b .L1775 +.L1794: + add w5, w5, 1 + add w6, w6, w10 + b .L1770 +.L1774: + add w19, w19, 1 + add w3, w3, w11 + uxth w19, w19 + uxth w3, w3 + b .L1769 +.L1793: + ldrh w3, [x2,2826] + mov w7, 1 +.L1777: + cmp w0, w3 + bcs .L1795 + add x6, x20, :lo12:.LANCHOR0 + ubfiz x2, x0, 2, 16 + add w0, w0, 1 + ldr x4, [x6,2840] + uxth w0, w0 + add x4, x4, x2 + ldrb w5, [x4,2] + and w5, w5, 31 + strb w5, [x4,2] + ldr x4, [x6,2840] + add x2, x4, x2 + ldrb w4, [x2,2] + bfi w4, w7, 3, 2 + strb w4, [x2,2] + b .L1777 +.L1795: + add x19, x20, :lo12:.LANCHOR0 + ldr x0, [x19,2800] + strh w1, [x0,112] + ldrh w1, [x0,134] + strh wzr, [x0,114] + sub w3, w3, w1 + strh wzr, [x0,118] + strh w3, [x0,116] + mov w0, 1 + bl ftl_alloc_sblk + mov w21, w0 + mov w1, 0 + bl ftl_erase_sblk + ldr x1, [x19,2800] + mov w0, w21 + add x1, x1, 672 + bl ftl_get_blk_list_in_sblk + ldr x1, [x19,2800] + mov w0, 65533 + ldrh w20, [x1,672] + strh wzr, [x1,690] + sub w2, w20, #1 + cmp w0, w2, uxth + bcs .L1779 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 416 + mov w2, 1322 + bl printk +.L1780: + b .L1780 +.L1779: + strh wzr, [x1,696] + add x0, x1, 416 + mov w2, 256 + mov w1, 255 + bl ftl_memset + ldr x1, [x19,2800] + mov w2, 21 + ldrh w0, [x19,3218] + sub w2, w2, w0 + mov w0, 1 + strh w0, [x1,688] + adrp x0, .LANCHOR7+3138 + asr w2, w20, w2 + strh w20, [x1,692] + strh w2, [x1,694] + ldrh w0, [x0,#:lo12:.LANCHOR7+3138] + strh w21, [x1,416] + strh w0, [x1,698] + bl ftl_alloc_sys_blk + mov w20, w0 + mov w1, 0 + bl ftl_erase_phy_blk + ldr x1, [x19,2800] + ldr x0, [x19,2792] + strh w20, [x1,130] + add x0, x0, 16 + mov w1, 2 + bl ftl_open_sblk_init + ldr x0, [x19,2792] + mov w1, 3 + add x0, x0, 48 + bl ftl_open_sblk_init + ldr x1, [x19,2800] + ldr x0, [x19,2792] + ldrh w2, [x1,134] + add x0, x0, 136 + strh w2, [x0,-10] + mov w2, -1 + strh wzr, [x0,-12] + strh w2, [x0,-56] + strh w2, [x0,-6] + mov w2, -1 + strh wzr, [x0,-16] + str w2, [x0,408] + strh wzr, [x0,-14] + strh w2, [x1,126] + mov w1, 255 + mov w2, 256 + bl ftl_memset + ldr x0, [x19,2792] + mov w1, 255 + mov w2, 128 + add x0, x0, 392 + bl ftl_memset + bl ftl_ext_info_flush + mov w0, 0 + bl ftl_info_flush + bl ftl_info_blk_init + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size ftl_low_format, .-ftl_low_format + .align 2 + .global ftl_re_low_format_test + .type ftl_re_low_format_test, %function +ftl_re_low_format_test: + stp x29, x30, [sp, -48]! + adrp x0, .LC145 + mov w1, 1 + add x29, sp, 0 + add x0, x0, :lo12:.LC145 + stp x19, x20, [sp,16] + str x21, [sp,32] + adrp x19, .LANCHOR0 + bl printk + bl sblk_init + bl ftl_info_blk_init + bl ftl_ext_info_init + add x0, x19, :lo12:.LANCHOR0 + ldr x1, [x0,2800] + ldrh w6, [x0,2826] + mov w0, 0 + mov w2, w0 + mov w3, w0 + ldrh w1, [x1,134] +.L1797: + cmp w1, w6 + bcs .L1804 + add x4, x19, :lo12:.LANCHOR0 + ldr x5, [x4,2840] + add x5, x5, x1, uxth 2 + ldrb w4, [x5,2] + and w7, w4, 31 + ands w4, w4, 24 + strb w7, [x5,2] + bne .L1798 + add w3, w3, 1 + uxth w3, w3 + b .L1799 +.L1798: + cmp w4, 16 + bne .L1800 + add w2, w2, 1 + uxth w2, w2 + b .L1799 +.L1800: + add w0, w0, 1 + uxth w0, w0 +.L1799: + add w1, w1, 1 + uxth w1, w1 + b .L1797 +.L1804: + add x19, x19, :lo12:.LANCHOR0 + ldr x1, [x19,2800] + strh w2, [x1,118] + strh w3, [x1,114] + strh w0, [x1,116] + mov w0, 1 + strh wzr, [x1,122] + strh wzr, [x1,120] + strh wzr, [x1,124] + bl ftl_alloc_sblk + mov w21, w0 + mov w1, 0 + bl ftl_erase_sblk + ldr x1, [x19,2800] + mov w0, w21 + add x1, x1, 672 + bl ftl_get_blk_list_in_sblk + ldr x1, [x19,2800] + mov w0, 65533 + ldrh w20, [x1,672] + strh wzr, [x1,690] + sub w2, w20, #1 + cmp w0, w2, uxth + bcs .L1802 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 432 + mov w2, 1391 + bl printk +.L1803: + b .L1803 +.L1802: + strh wzr, [x1,696] + add x0, x1, 416 + mov w2, 256 + mov w1, 255 + bl ftl_memset + ldr x0, [x19,2800] + mov w1, 0 + mov w2, 4096 + add x0, x0, 704 + bl ftl_memset + ldr x1, [x19,2800] + lsr w0, w20, 14 + ldrh w2, [x19,2826] + and w20, w20, 16383 + strh w0, [x1,694] + mov w0, 1 + strh w0, [x1,688] + adrp x0, .LANCHOR7+3138 + lsl w2, w2, 1 + strh w20, [x1,692] + strh w21, [x1,416] + ldrh w0, [x0,#:lo12:.LANCHOR7+3138] + strh w0, [x1,698] + mov w1, 0 + ldr x0, [x19,2832] + bl ftl_memset + ldr x0, [x19,2792] + mov w1, 2 + add x0, x0, 16 + bl ftl_open_sblk_init + ldr x0, [x19,2792] + mov w1, 3 + add x0, x0, 48 + bl ftl_open_sblk_init + ldr x1, [x19,2800] + ldr x0, [x19,2792] + ldrh w2, [x1,134] + add x0, x0, 136 + strh w2, [x0,-10] + mov w2, -1 + strh wzr, [x0,-12] + strh w2, [x0,-56] + strh w2, [x0,-6] + mov w2, -1 + strh wzr, [x0,-16] + str w2, [x0,408] + strh wzr, [x0,-14] + strh w2, [x1,126] + mov w1, 255 + mov w2, 256 + bl ftl_memset + ldr x0, [x19,2792] + mov w1, 255 + mov w2, 128 + add x0, x0, 392 + bl ftl_memset + ldr x0, [x19,2792] + str wzr, [x0,520] + str wzr, [x0,524] + str wzr, [x0,528] + bl ftl_ext_info_flush + mov w0, 0 + bl ftl_info_flush + bl ftl_info_blk_init + ldr x21, [sp,32] + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 48 + ret + .size ftl_re_low_format_test, .-ftl_re_low_format_test + .align 2 + .global ftl_prog_ppa_page + .type ftl_prog_ppa_page, %function +ftl_prog_ppa_page: + stp x29, x30, [sp, -16]! + mov w5, w0 + mov x7, x1 + mov x6, x2 + add x29, sp, 0 + mov w4, w3 + ubfx x0, x5, 21, 3 + and w1, w5, 2097151 + mov x2, x7 + mov x3, x6 + bl ftl_prog_page + ldp x29, x30, [sp], 16 + ret + .size ftl_prog_ppa_page, .-ftl_prog_ppa_page + .align 2 + .global ftl_write_last_log_page + .type ftl_write_last_log_page, %function +ftl_write_last_log_page: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + adrp x19, .LANCHOR0 + mov w21, -1 + ldrh w1, [x0,6] + add x19, x19, :lo12:.LANCHOR0 + ldrh w24, [x0,12] + cmp w1, 1 + ldr x22, [x19,3752] + bne .L1807 + mov x20, x0 + bl ftl_get_new_free_page + cmn w0, #1 + mov w23, w0 + mov w21, 0 + beq .L1807 + ldrh w0, [x20] + add x22, x22, x24, uxth 2 + bl ftl_vpn_decrement + adrp x1, .LANCHOR5 + mov w0, 15555 + add x1, x1, :lo12:.LANCHOR5 + movk w0, 0xf55f, lsl 16 + add x2, x1, 128 + str x2, [x29,72] + str w0, [x1,128] + ldrb w0, [x19,3212] + ldrh w1, [x19,3234] + mul w1, w1, w0 + mov x0, x22 + lsl w1, w1, 2 + bl js_hash + ldr x2, [x29,72] + mov x1, x22 + ldrb w3, [x19,2776] + str w0, [x2,4] + mov w0, w23 + str w21, [x2,8] + str w21, [x2,12] + bl ftl_prog_ppa_page +.L1807: + mov w0, w21 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size ftl_write_last_log_page, .-ftl_write_last_log_page + .align 2 + .global ftl_open_sblk_recovery + .type ftl_open_sblk_recovery, %function +ftl_open_sblk_recovery: + sub sp, sp, #160 + stp x29, x30, [sp,48] + add x29, sp, 48 + stp x21, x22, [sp,80] + adrp x21, .LANCHOR2 + stp x27, x28, [sp,128] + mov x28, x0 + add x0, x21, :lo12:.LANCHOR2 + stp x25, x26, [sp,112] + stp x19, x20, [sp,64] + stp x23, x24, [sp,96] + mov x25, x1 + ldr w0, [x0,400] + tbz x0, 12, .L1812 + adrp x0, .LC146 + ldrh w1, [x28,2] + add x0, x0, :lo12:.LC146 + bl printk +.L1812: + add x0, x21, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 12, .L1813 + adrp x0, .LC147 + ldrb w1, [x28,5] + add x0, x0, :lo12:.LC147 + bl printk +.L1813: + add x0, x21, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 12, .L1814 + adrp x0, .LC148 + ldrh w1, [x28] + add x0, x0, :lo12:.LC148 + bl printk +.L1814: + add x0, x21, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 12, .L1815 + adrp x0, .LC149 + ldrh w1, [x28,16] + ldrh w2, [x28,18] + add x0, x0, :lo12:.LC149 + bl printk +.L1815: + ldrh w0, [x28,10] + adrp x23, .LANCHOR5 + strh w0, [x28,14] + mov w0, 1 + add x23, x23, :lo12:.LANCHOR5 + adrp x24, .LC150 + bl buf_alloc + ldrb w19, [x28,5] + ldrh w20, [x28,2] + mov x27, x0 + mov w26, 0 + add x23, x23, 448 + add x24, x24, :lo12:.LC150 +.L1816: + adrp x0, .LANCHOR0 + adrp x22, .LANCHOR0 + add x0, x0, :lo12:.LANCHOR0 + ldrh w0, [x0,3234] + cmp w0, w20 + bls .L1819 + ldrb w19, [x28,5] +.L1817: + ldrb w0, [x28,9] + cmp w0, w19 + bls .L1898 + add x0, x28, x19, sxtw 1 + ldrh w5, [x0,16] + mov w0, 65535 + cmp w5, w0 + beq .L1818 + add x3, x22, :lo12:.LANCHOR0 + ldr x1, [x27,8] + ldr x2, [x27,24] + str x5, [x29,96] + ldrh w4, [x3,3230] + ldrb w3, [x3,2776] + madd w4, w5, w4, w20 + str x4, [x29,104] + mov w0, w4 + bl ftl_read_ppa_page + cmp w0, 512 + mov w10, w0 + beq .L1819 + cmn w0, #1 + ldr x4, [x29,104] + ldr x5, [x29,96] + beq .L1820 + ldr x0, [x27,24] + ldr w1, [x0] + cmn w1, #1 + bne .L1820 + ldr w0, [x0,4] + cmn w0, #1 + bne .L1820 + ldr x0, [x27,8] + ldr w0, [x0] + cmn w0, #1 + beq .L1819 +.L1820: + add x0, x21, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 12, .L1821 + ldr x7, [x27,8] + mov w3, w4 + ldr x0, [x27,24] + mov w4, w10 + mov w2, w20 + str x10, [x29,104] + ldr w1, [x7,12] + str w1, [sp] + ldr w1, [x0] + str w1, [sp,8] + ldr w1, [x0,4] + str w1, [sp,16] + ldr w1, [x0,8] + str w1, [sp,24] + mov w1, w5 + ldr w0, [x0,12] + str w0, [sp,32] + mov x0, x24 + ldr w5, [x7] + ldr w6, [x7,4] + ldr w7, [x7,8] + bl printk + ldr x10, [x29,104] +.L1821: + adrp x0, .LANCHOR6-256 + ldrb w2, [x28,9] + mov w1, 1 + strb w1, [x0,#:lo12:.LANCHOR6-256] + ldrh w0, [x28,10] + madd w1, w20, w2, w19 + cmp w0, w1 + beq .L1822 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 456 + mov w2, 712 + bl printk +.L1823: + b .L1823 +.L1822: + add x26, x22, :lo12:.LANCHOR0 + ldrh w1, [x28,6] + add w0, w1, w0 + ldrh w1, [x26,3234] + mul w1, w1, w2 + cmp w0, w1 + beq .L1824 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 456 + mov w2, 713 + bl printk +.L1825: + b .L1825 +.L1824: + cmn w10, #1 + beq .L1829 + ldr x4, [x27,24] + str x4, [x29,104] + ldr w0, [x4,4] + cmn w0, #1 + beq .L1829 + bl lpa_hash_get_ppa + cbz x25, .L1827 + ldr x4, [x29,104] + ldr w1, [x4,8] + cmp w0, w1 + beq .L1827 + cmn w0, #1 + beq .L1827 + ldrh w5, [x26,3218] + mov w1, 21 + mov w2, 1 + sub w1, w1, w5 + lsr w3, w0, w5 + lsl w1, w2, w1 + ldrb w2, [x26,3216] + sub w1, w1, #1 + and w1, w3, w1 + udiv w1, w1, w2 + ldrh w2, [x25] + cmp w2, w1, uxth + bne .L1827 + ldr w4, [x4] + mov x2, x23 + ldr x1, [x27,8] + ldrb w3, [x26,2776] + str x4, [x29,104] + bl ftl_read_ppa_page + ldr w0, [x23] + ldr x4, [x29,104] + cmp w0, w4 + bcc .L1827 + ldr x0, [x27,24] + ldr w1, [x0,8] + cmn w1, #1 + beq .L1829 + add x4, x22, :lo12:.LANCHOR0 + mov w2, 21 + mov w3, 1 + ldrh w0, [x4,3218] + sub w2, w2, w0 + lsr w1, w1, w0 + lsl w2, w3, w2 + ldrb w0, [x4,3216] + sub w2, w2, #1 + and w1, w2, w1 + udiv w0, w1, w0 + bl ftl_vpn_decrement + b .L1829 +.L1827: + ldr x2, [x27,24] + add x1, x22, :lo12:.LANCHOR0 + ldr w3, [x2,4] + ldr w0, [x1,2784] + cmp w3, w0 + bcs .L1829 + ldrb w0, [x28,9] + ldrh w4, [x1,3234] + ldrh w3, [x28,10] + mul w0, w0, w4 + sub w0, w0, #1 + cmp w3, w0 + blt .L1899 +.L1829: + ldrh w0, [x28,6] + mov w26, 1 + sub w0, w0, #1 + strh w0, [x28,6] + ldrh w0, [x28,10] + add w0, w0, 1 + strh w0, [x28,10] +.L1818: + add w19, w19, 1 + uxth w19, w19 + b .L1817 +.L1898: + add w20, w20, 1 + strb wzr, [x28,5] + uxth w20, w20 + b .L1816 +.L1819: + add x4, x22, :lo12:.LANCHOR0 + ldrb w1, [x28,9] + ldrh w2, [x28,10] + ldrh w3, [x28,6] + ldrh w0, [x4,3234] + add w3, w3, w2 + strh w20, [x28,2] + strb w19, [x28,5] + mul w0, w1, w0 + cmp w3, w0 + bne .L1833 + mov w19, 0 + ldr x4, [x4,3752] + mov w1, w19 + b .L1834 +.L1833: + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 456 + mov w2, 789 + bl printk +.L1835: + b .L1835 +.L1837: + ldrh w3, [x28,12] + add w3, w1, w3 + ldr w3, [x4,x3,lsl 2] + cmn w3, #1 + beq .L1836 + add w19, w19, 1 + uxth w19, w19 +.L1836: + add w1, w1, 1 +.L1834: + cmp w1, w2 + bcc .L1837 + sub w0, w0, w2 + add w19, w19, w0 + add x0, x21, :lo12:.LANCHOR2 + uxth w19, w19 + ldr w0, [x0,400] + tbz x0, 12, .L1838 + add x0, x22, :lo12:.LANCHOR0 + ldrh w1, [x28] + mov w2, w19 + ubfiz x3, x1, 1, 16 + ldr x4, [x0,2832] + adrp x0, .LC151 + add x0, x0, :lo12:.LC151 + ldrh w3, [x4,x3] + bl printk +.L1838: + add x0, x22, :lo12:.LANCHOR0 + ldrh w1, [x28] + adrp x20, .LC152 + mov w23, -1 + add x20, x20, :lo12:.LC152 + ldr x0, [x0,2832] + strh w19, [x0,x1,lsl 1] + mov x0, x27 + mov w19, 0 + bl buf_free +.L1839: + add x2, x22, :lo12:.LANCHOR0 + ldrb w0, [x2,3212] + cmp w19, w0, lsl 1 + bcs .L1900 + cbz w26, .L1840 + ldrh w0, [x28,6] + cmp w0, 1 + bls .L1840 + mov x0, x28 + bl ftl_get_new_free_page + mov w24, w0 + add x0, x21, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 12, .L1841 + mov x0, x20 + mov w1, w24 + bl printk +.L1841: + add x3, x22, :lo12:.LANCHOR0 + ldr x0, [x27,24] + ldr x1, [x3,2800] + ldr w1, [x1,8] + str w1, [x0] + ldr x0, [x27,24] + str w23, [x0,4] + ldr x0, [x27,24] + str w23, [x0,8] + ldr x0, [x27,24] + str wzr, [x0,12] + ldr x0, [x27,8] + str wzr, [x0] + mov w0, w24 + ldr x1, [x27,8] + ldr x2, [x27,24] + ldrb w3, [x3,2776] + bl ftl_prog_ppa_page + ldrh w0, [x28] + bl ftl_vpn_decrement +.L1840: + add w19, w19, 1 + b .L1839 +.L1900: + ldrh w1, [x2,3234] + ldrh w0, [x28,12] + ldrb w3, [x28,9] + madd w0, w1, w3, w0 + mov x1, -4 + add x0, x1, x0, sxtw 2 + ldr x1, [x2,3752] + ldr w0, [x1,x0] + cmn w0, #1 + beq .L1843 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 456 + mov w2, 816 + bl printk +.L1844: + b .L1844 +.L1843: + ldrh w0, [x28,6] + cmp w0, 1 + bne .L1811 + mov x0, x28 + bl ftl_write_last_log_page + b .L1811 +.L1899: + ldr x0, [x1,2800] + ldr w2, [x2] + ldr w1, [x0,8] + cmp w2, w1 + bls .L1830 + str w2, [x0,8] +.L1830: + ldr x1, [x27,24] + ldrh w0, [x28,10] + ldrh w2, [x28,12] + add w2, w2, w0 + ldr w0, [x1,4] + ldr w1, [x1,8] + bl lpa_hash_update_ppa + b .L1829 +.L1811: + sub sp, x29, #48 + ldp x19, x20, [sp,64] + ldp x21, x22, [sp,80] + ldp x23, x24, [sp,96] + ldp x25, x26, [sp,112] + ldp x27, x28, [sp,128] + ldp x29, x30, [sp,48] + add sp, sp, 160 + ret + .size ftl_open_sblk_recovery, .-ftl_open_sblk_recovery + .align 2 + .global pm_write_page + .type pm_write_page, %function +pm_write_page: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x22, .LANCHOR0 + adrp x21, .LC153 + stp x23, x24, [sp,48] + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov w20, w0 + mov x24, x1 + mov x25, x22 + mov w23, 65535 + add x21, x21, :lo12:.LC153 +.L1902: + adrp x26, .LANCHOR7 +.L1907: + add x2, x22, :lo12:.LANCHOR0 + ldr x0, [x2,2800] + ldr w1, [x0,48] + ldrh w3, [x0,696] + add w1, w1, 1 + str w1, [x0,48] + ldrh w1, [x2,3234] + cmp w3, w1 + bcs .L1903 + ldrh w0, [x0,692] + cmp w0, w23 + bne .L1904 +.L1903: + bl pm_alloc_new_blk + mov w0, 0 + bl ftl_info_flush +.L1904: + add x27, x25, :lo12:.LANCHOR0 + ldr x0, [x27,2800] + ldrh w3, [x0,692] + cmp w3, w23 + bne .L1905 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 480 + mov w2, 224 + bl printk +.L1906: + b .L1906 +.L1905: + add x28, x26, :lo12:.LANCHOR7 + ldrh w0, [x0,696] + ldrh w19, [x27,3230] + mov w1, 0 + mov w2, 64 + madd w19, w3, w19, w0 + ldr x0, [x28,3144] + bl ftl_memset + ldr x0, [x28,3144] + mov x2, x24 + str w20, [x0] + ldr x1, [x27,2800] + ldr x0, [x28,3144] + ldrb w4, [x27,2776] + ldr w1, [x1,48] + str w1, [x0,4] + mov w1, w19 + ldr x0, [x27,2800] + ldr x3, [x28,3144] + ldrb w0, [x0,694] + bl ftl_prog_page + ldr x1, [x27,2800] + ldrh w3, [x1,696] + add w3, w3, 1 + uxth w3, w3 + strh w3, [x1,696] + cmp w3, 1 + beq .L1907 + cmn w0, #1 + bne .L1908 + mov x0, x21 + mov w1, w19 + bl printk + b .L1902 +.L1908: + ldrh w0, [x1,698] + cmp w20, w0 + bcs .L1909 + add x20, x1, x20, uxtw 2 + str w19, [x20,704] +.L1909: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size pm_write_page, .-pm_write_page + .align 2 + .global flash_info_flush + .type flash_info_flush, %function +flash_info_flush: + stp x29, x30, [sp, -96]! + adrp x2, .LANCHOR3 + adrp x0, .LC101 + add x2, x2, :lo12:.LANCHOR3 + add x29, sp, 0 + mov w1, 251 + add x2, x2, 496 + add x0, x0, :lo12:.LC101 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x27, x28, [sp,80] + adrp x22, .LANCHOR4 + bl printk + add x0, x22, :lo12:.LANCHOR4 + adrp x23, .LANCHOR0 + mov w1, 0 + mov w2, 64 + add x19, x23, :lo12:.LANCHOR0 + adrp x24, .LC155 + ldr x0, [x0,1104] + adrp x25, .LC156 + mov w26, 0 + add x24, x24, :lo12:.LC155 + add x25, x25, :lo12:.LC156 + bl ftl_memset + ldr x1, [x19,152] + adrp x0, .LC154 + add x0, x0, :lo12:.LC154 + mov w2, 4 + mov w3, 16 + bl rknand_print_hex + ldr x19, [x19,152] + add x0, x19, 16 + ldr w1, [x19,8] + bl js_hash + str w0, [x19,12] +.L1913: + add x21, x22, :lo12:.LANCHOR4 + add x27, x23, :lo12:.LANCHOR0 + mov x0, x24 + ldrb w20, [x21,1112] + ldrh w19, [x21,1114] + mov w1, w20 + ldrh w28, [x27,170] + mov w2, w19 + bl printk + ldrh w1, [x21,972] + ldrh w0, [x21,1114] + sub w1, w1, #1 + cmp w0, w1 + blt .L1914 + ldr x1, [x27,152] + ldrb w19, [x21,1113] + strh wzr, [x21,1114] + ldr w0, [x1,4] + add w0, w0, 1 + str w0, [x1,4] + ldrb w0, [x21,1112] + ldr x20, [x27,152] + strb w0, [x21,1113] + mov x0, x20 + strb w19, [x21,1112] + ldrh w1, [x20,16] + add w1, w1, 1 + strh w1, [x0,16]! + ldr w1, [x20,8] + bl js_hash + str w0, [x20,12] + ldrh w0, [x27,170] + mul w19, w19, w0 + mov w0, 0 + b .L1919 +.L1914: + madd w19, w20, w28, w19 + cbnz w0, .L1915 +.L1919: + mov w1, w19 + bl flash_erase_block +.L1915: + add x2, x23, :lo12:.LANCHOR0 + add x20, x22, :lo12:.LANCHOR4 + mov w4, 4 + mov w5, 1 + ldr x1, [x2,152] + ldr x0, [x20,1104] + ldr w1, [x1,4] + str w1, [x0] + mov w0, 21321 + movk w0, 0x5359, lsl 16 + ldr x1, [x20,1104] + str w0, [x1,4] + mov w1, w19 + mov w0, 0 + ldr x2, [x2,152] + ldr x3, [x20,1104] + bl flash_prog_page_en + cmn w0, #1 + ldrh w1, [x20,1114] + add w1, w1, 1 + strh w1, [x20,1114] + bne .L1916 + mov x0, x25 + mov w1, w19 + bl printk + b .L1913 +.L1916: + cbnz w26, .L1920 + mov w26, 1 + b .L1913 +.L1920: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size flash_info_flush, .-flash_info_flush + .align 2 + .global nand_flash_init + .type nand_flash_init, %function +nand_flash_init: + stp x29, x30, [sp, -80]! + mov w1, 2074 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR3 + mov w22, 0 + stp x23, x24, [sp,48] + add x2, x21, :lo12:.LANCHOR3 + adrp x24, .LC101 + stp x19, x20, [sp,16] + add x2, x2, 520 + mov x20, x0 + adrp x19, .LANCHOR0 + add x0, x24, :lo12:.LC101 + add x23, x19, :lo12:.LANCHOR0 + stp x25, x26, [sp,64] + bl printk + add x25, x23, 688 + mov w0, 2 + strb w0, [x23,684] + mov x0, x20 + adrp x20, .LANCHOR2 + mov w26, 44 + bl nandc_init + add x0, x20, :lo12:.LANCHOR2 + add x0, x0, 368 + str x0, [x23,48] +.L1927: + mov w0, w22 + mov x1, x25 + bl flash_read_id + cbnz w22, .L1922 + ldrb w0, [x23,688] + add x1, x23, 688 + sub w0, w0, #1 + uxtb w0, w0 + cmp w0, 253 + bls .L1923 +.L1925: + mov w20, -2 + b .L1973 +.L1923: + ldrb w0, [x1,1] + cmp w0, 255 + beq .L1925 +.L1922: + ldrb w0, [x25] + cmp w0, 181 + bne .L1926 + strb w26, [x25] +.L1926: + add w22, w22, 1 + add x25, x25, 8 + uxtb w22, w22 + cmp w22, 4 + bne .L1927 + add x23, x20, :lo12:.LANCHOR2 + add x25, x19, :lo12:.LANCHOR0 + add x23, x23, 440 + mov w22, 0 + add x25, x25, 688 +.L1930: + ldrb w2, [x23] + add x0, x23, 1 + mov x1, x25 + bl flash_mem_cmp8 + cbnz w0, .L1928 + add x1, x20, :lo12:.LANCHOR2 + ubfiz x22, x22, 5, 32 + add x0, x1, 440 + adds x22, x0, x22 + beq .L1925 + ldrb w3, [x22,22] + mov x0, 0 + b .L1932 +.L1928: + add w22, w22, 1 + add x23, x23, 32 + cmp w22, 24 + bne .L1930 + b .L1925 +.L1932: + add x4, x1, x0, lsl 5 + mov w2, w0 + ldrb w4, [x4,1208] + cmp w4, w3 + beq .L1931 + add x0, x0, 1 + cmp x0, 4 + bne .L1932 + mov w2, w0 +.L1931: + add x23, x20, :lo12:.LANCHOR2 + ubfiz x2, x2, 5, 32 + add x1, x23, 1208 + add x0, x19, :lo12:.LANCHOR0 + add x1, x1, x2 + add x0, x0, 64 + mov w2, 32 + add x23, x23, 368 + bl ftl_memcpy + mov x0, x23 + mov x1, x22 + mov w2, 32 + bl ftl_memcpy + ldrb w0, [x19,#:lo12:.LANCHOR0] + cmp w0, 8 + bhi .L1933 + ldrb w1, [x23,20] + cmp w1, 60 + bls .L1934 + mov w1, 60 + strb w1, [x23,20] +.L1934: + cmp w0, 8 + bne .L1933 + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,688] + cmp w0, 44 + beq .L1979 +.L1933: + add x2, x21, :lo12:.LANCHOR3 + mov w1, 2095 + add x2, x2, 520 + add x0, x24, :lo12:.LC101 + adrp x22, .LANCHOR4 + add x23, x19, :lo12:.LANCHOR0 + bl printk + add x25, x22, :lo12:.LANCHOR4 + mov w0, 16384 + add x26, x20, :lo12:.LANCHOR2 + bl ftl_malloc + str x0, [x25,1120] + mov w0, 16384 + bl ftl_malloc + str x0, [x25,1072] + mov w0, 2048 + bl ftl_malloc + str x0, [x23,152] + mov w0, 64 + bl ftl_malloc + str x0, [x25,1128] + mov w0, 64 + bl ftl_malloc + str x0, [x25,1080] + mov w0, 64 + bl ftl_malloc + str x0, [x25,1104] + adrp x0, .LANCHOR5+392 + strb wzr, [x0,#:lo12:.LANCHOR5+392] + bl flash_die_info_init + ldrb w0, [x26,386] + bl flash_lsb_page_tbl_build + ldrb w0, [x26,388] + bl nandc_bch_sel + str xzr, [x25,1096] + ldr x1, [x23,48] + ldrh w0, [x1,16] + ldrb w1, [x1,28] + ubfx x2, x0, 8, 3 + strb w2, [x23,720] + adrp x2, .LANCHOR7+3152 + ubfx x3, x0, 3, 1 + strb w1, [x23,58] + strb w3, [x2,#:lo12:.LANCHOR7+3152] + ubfx x2, x0, 4, 1 + strb w2, [x23,721] + ubfx x2, x0, 12, 1 + strb w2, [x23,3208] + ubfx x2, x0, 13, 1 + ubfx x0, x0, 14, 1 + strb w0, [x23,168] + mov w0, 60 + strb w0, [x23,56] + ldrb w0, [x19,#:lo12:.LANCHOR0] + strb w2, [x23,3228] + cmp w0, 9 + bne .L1935 + mov w0, 70 + strb w0, [x23,56] +.L1935: + add x20, x20, :lo12:.LANCHOR2 + add x0, x22, :lo12:.LANCHOR4 + add x2, x19, :lo12:.LANCHOR0 + strb w1, [x0,1136] + ldrb w1, [x20,387] + strb w1, [x2,149] + ldrh w2, [x20,384] + tbz x2, 6, .L1937 + sub w2, w1, #17 + uxtb w2, w2 + cmp w2, 2 + bhi .L1938 + adrp x2, micron_read_retrial + cmp w1, 19 + add x2, x2, :lo12:micron_read_retrial + str x2, [x0,1096] + mov w2, 7 + strb w2, [x0,1088] + bne .L1937 + mov w1, 15 + b .L1975 +.L1938: + sub w2, w1, #65 + uxtb w2, w2 + cmp w2, 1 + bls .L1955 + cmp w1, 33 + bne .L1940 +.L1955: + add x0, x22, :lo12:.LANCHOR4 + adrp x1, toshiba_read_retrial + add x1, x1, :lo12:toshiba_read_retrial + mov w2, 4 + str x1, [x0,1096] + add x1, x19, :lo12:.LANCHOR0 + strb w2, [x1,150] + b .L1976 +.L1940: + sub w2, w1, #67 + uxtb w2, w2 + cmp w2, 1 + sub w2, w1, #34 + cset w3, ls + cmp w1, 35 + cset w4, eq + uxtb w2, w2 + cmp w1, 68 + cset w5, eq + cmp w2, 1 + bls .L1956 + cbz w3, .L1942 +.L1956: + add x0, x22, :lo12:.LANCHOR4 + adrp x1, toshiba_read_retrial + add x1, x1, :lo12:toshiba_read_retrial + str x1, [x0,1096] + mov w1, 7 + strb w1, [x0,1088] + cbnz w5, .L1957 + cbz w4, .L1944 +.L1957: + add x0, x22, :lo12:.LANCHOR4 + mov w1, 17 + strb w1, [x0,1088] +.L1944: + add x0, x19, :lo12:.LANCHOR0 + mov w1, 4 + cbnz w3, .L1977 + mov w1, 5 +.L1977: + strb w1, [x0,150] + b .L1937 +.L1942: + sub w1, w1, #36 + uxtb w1, w1 + cmp w1, 1 + bhi .L1937 + adrp x1, toshiba_3d_read_retrial + add x1, x1, :lo12:toshiba_3d_read_retrial + str x1, [x0,1096] +.L1976: + mov w1, 7 +.L1975: + strb w1, [x0,1088] +.L1937: + add x2, x21, :lo12:.LANCHOR3 + add x0, x24, :lo12:.LC101 + mov w1, 2143 + add x2, x2, 520 + bl printk + add x0, x19, :lo12:.LANCHOR0 + strb wzr, [x0,96] + ldrb w0, [x0,720] + tbz x0, 0, .L1947 + mov w0, 4 + bl nandc_set_if_mode + mov w0, 1 + bl flash_set_interface_mode + mov w0, 1 + b .L1978 +.L1947: + mov w0, 4 +.L1978: + bl nandc_set_if_mode + bl flash_info_blk_init + cmn w0, #1 + mov w20, w0 + bne .L1949 + add x2, x21, :lo12:.LANCHOR3 + add x0, x24, :lo12:.LC101 + mov w1, 2161 + add x2, x2, 520 + bl printk + b .L1973 +.L1949: + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,149] + sub w0, w0, #1 + uxtb w0, w0 + cmp w0, 6 + bhi .L1950 + add x0, x22, :lo12:.LANCHOR4 + adrp x1, hynix_read_retrial + add x1, x1, :lo12:hynix_read_retrial + str x1, [x0,1096] +.L1950: + add x19, x19, :lo12:.LANCHOR0 + ldrb w0, [x19,720] + tbz x0, 2, .L1952 + ldr x0, [x19,152] + ldrb w0, [x0,19] + cbz w0, .L1952 + add x22, x22, :lo12:.LANCHOR4 + ldrh w1, [x19,170] + mov w0, 0 + ldrb w2, [x22,1112] + mul w1, w2, w1 + bl flash_ddr_para_scan + ldrb w0, [x19,96] + cbnz w0, .L1952 + ldr x1, [x19,152] + strb w0, [x1,19] + bl flash_info_flush +.L1952: + add x2, x21, :lo12:.LANCHOR3 + mov w1, 2196 + add x2, x2, 520 + add x0, x24, :lo12:.LC101 + mov w20, 0 + bl printk + bl nand_flash_print_info + b .L1973 +.L1979: + add x0, x20, :lo12:.LANCHOR2 + add x0, x0, 368 + ldrb w1, [x0,28] + cmp w1, 2 + bne .L1933 + strb wzr, [x0,28] + b .L1933 +.L1973: + mov w0, w20 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 80 + ret + .size nand_flash_init, .-nand_flash_init + .align 2 + .global ftl_sysblk_dump + .type ftl_sysblk_dump, %function +ftl_sysblk_dump: + sub sp, sp, #144 + stp x29, x30, [sp,48] + add x29, sp, 48 + stp x23, x24, [sp,96] + uxth w24, w0 + mov w0, 1 + stp x21, x22, [sp,80] + stp x27, x28, [sp,128] + stp x19, x20, [sp,64] + stp x25, x26, [sp,112] + bl buf_alloc + ldr x23, [x0,8] + mov w27, 0 + adrp x21, .LC150 + adrp x22, .LC157 + mov x26, x0 + mov w19, w27 + adrp x28, .LANCHOR0 + add x21, x21, :lo12:.LC150 + add x22, x22, :lo12:.LC157 + add x23, x23, 704 +.L1981: + add x3, x28, :lo12:.LANCHOR0 + ldrh w1, [x3,3234] + cmp w1, w19 + bls .L1991 + ldrh w20, [x3,3230] + ldr x1, [x26,8] + ldr x2, [x26,24] + madd w20, w24, w20, w19 + ldrb w3, [x3,2776] + mov w0, w20 + bl ftl_read_ppa_page + mov w25, w0 + ldr x7, [x26,8] + mov w1, w24 + ldr x2, [x26,24] + mov w3, w20 + mov w4, w25 + ldr w0, [x7,12] + str w0, [sp] + ldr w0, [x2] + str w0, [sp,8] + ldr w0, [x2,4] + str w0, [sp,16] + ldr w0, [x2,8] + str w0, [sp,24] + ldr w0, [x2,12] + mov w2, w19 + str w0, [sp,32] + mov x0, x21 + ldr w5, [x7] + ldr w6, [x7,4] + ldr w7, [x7,8] + bl printk + mov x0, x22 + mov x1, x23 + mov w2, 4 + mov w3, 32 + bl rknand_print_hex + cmp w25, 512 + beq .L1987 + cmn w25, #1 + bne .L1982 +.L1987: + mov w27, 1 +.L1982: + add w19, w19, 1 + uxth w19, w19 + b .L1981 +.L1991: + mov x0, x26 + bl buf_free + cbz w27, .L1985 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 536 + mov w2, 656 + bl printk +.L1986: + b .L1986 +.L1985: + sub sp, x29, #48 + mov w0, w27 + ldp x19, x20, [sp,64] + ldp x21, x22, [sp,80] + ldp x23, x24, [sp,96] + ldp x25, x26, [sp,112] + ldp x27, x28, [sp,128] + ldp x29, x30, [sp,48] + add sp, sp, 144 + ret + .size ftl_sysblk_dump, .-ftl_sysblk_dump + .align 2 + .global dump_ftl_info + .type dump_ftl_info, %function +dump_ftl_info: + stp x29, x30, [sp, -32]! + adrp x3, .LANCHOR5 + adrp x0, .LC158 + add x29, sp, 0 + add x3, x3, :lo12:.LANCHOR5 + add x0, x0, :lo12:.LC158 + str x19, [sp,16] + adrp x19, .LANCHOR0 + add x19, x19, :lo12:.LANCHOR0 + ldrb w1, [x3,704] + ldrb w2, [x3,705] + ldrh w3, [x3,706] + bl printk + ldr x2, [x19,2800] + adrp x0, .LC159 + add x0, x0, :lo12:.LC159 + ldrh w1, [x2,130] + ldrh w2, [x2,140] + bl printk + ldr x1, [x19,2792] + adrp x0, .LC160 + add x0, x0, :lo12:.LC160 + add x5, x1, 16 + ldrh w1, [x1,16] + ldrh w2, [x5,2] + ldrb w3, [x5,5] + ldrh w4, [x5,6] + ldrh w5, [x5,10] + bl printk + ldr x1, [x19,2792] + adrp x0, .LC161 + add x0, x0, :lo12:.LC161 + add x5, x1, 48 + ldrh w1, [x1,48] + ldrh w2, [x5,2] + ldrb w3, [x5,5] + ldrh w4, [x5,6] + ldrh w5, [x5,10] + bl printk + ldr x1, [x19,2792] + adrp x0, .LC162 + add x0, x0, :lo12:.LC162 + add x5, x1, 80 + ldrh w1, [x1,80] + ldrh w4, [x5,6] + ldrh w2, [x5,2] + ldrb w3, [x5,5] + ldrh w5, [x5,10] + bl printk + ldrh w0, [x19,3234] + mov w2, 4 + ldrb w3, [x19,3212] + ldr x1, [x19,3752] + mul w3, w0, w3 + adrp x0, .LC163 + add x0, x0, :lo12:.LC163 + lsl w3, w3, 1 + bl rknand_print_hex + ldr x1, [x19,2832] + adrp x0, .LC164 + ldrh w3, [x19,2826] + add x0, x0, :lo12:.LC164 + mov w2, 2 + bl rknand_print_hex + ldr x1, [x19,2800] + adrp x0, .LC157 + add x0, x0, :lo12:.LC157 + mov w2, 4 + add x1, x1, 704 + mov w3, 32 + bl rknand_print_hex + ldr x1, [x19,2840] + adrp x0, .LC165 + ldrh w3, [x19,2826] + add x0, x0, :lo12:.LC165 + mov w2, 4 + bl rknand_print_hex + adrp x0, .LC166 + add x1, x19, 3240 + add x0, x0, :lo12:.LC166 + mov w2, 2 + mov w3, 256 + bl rknand_print_hex + ldrh w0, [x19,3234] + mov w2, 2 + ldrb w3, [x19,3212] + ldr x1, [x19,3760] + mul w3, w0, w3 + adrp x0, .LC167 + add x0, x0, :lo12:.LC167 + lsl w3, w3, 1 + bl rknand_print_hex + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size dump_ftl_info, .-dump_ftl_info + .align 2 + .global pm_ppa_update_check + .type pm_ppa_update_check, %function +pm_ppa_update_check: + adrp x5, .LANCHOR0 + mov w6, 21 + add x5, x5, :lo12:.LANCHOR0 + mov w7, 1 + stp x29, x30, [sp, -16]! + add x29, sp, 0 + ldrh w4, [x5,3218] + ldrb w3, [x5,3216] + sub w6, w6, w4 + lsr w4, w2, w4 + lsl w6, w7, w6 + sub w6, w6, #1 + and w4, w6, w4 + udiv w4, w4, w3 + ldr x3, [x5,2840] + add x4, x3, x4, uxth 2 + ldrb w3, [x4,2] + ubfx x3, x3, 5, 3 + cmp w3, 7 + cset w4, eq + cbnz w4, .L1997 + cmp w3, w7 + bne .L1994 +.L1997: + mov w3, w2 + mov w2, w1 + mov x1, x0 + adrp x0, .LC168 + add x0, x0, :lo12:.LC168 + bl printk + bl dump_ftl_info + mov w4, -1 +.L1994: + mov w0, w4 + ldp x29, x30, [sp], 16 + ret + .size pm_ppa_update_check, .-pm_ppa_update_check + .align 2 + .type load_l2p_region, %function +load_l2p_region: + stp x29, x30, [sp, -64]! + uxth w1, w1 + add x29, sp, 0 + stp x21, x22, [sp,32] + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + cmp w1, 31 + uxth w21, w0 + bls .L2000 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 552 + mov w2, 30 + bl printk +.L2001: + b .L2001 +.L2000: + adrp x20, .LANCHOR0 + adrp x19, .LANCHOR7 + add x20, x20, :lo12:.LANCHOR0 + ldr x0, [x20,2800] + ldrh w2, [x0,698] + cmp w21, w2 + bls .L2002 + adrp x0, .LC169 + mov w1, w21 + add x0, x0, :lo12:.LC169 + add x19, x19, :lo12:.LANCHOR7 + bl printk + mov x0, 0 + ldrh w2, [x19,3154] + mov w1, 255 + ldr x0, [x0,8] + bl ftl_memset + ldr x0, [x20,2800] + ldrh w0, [x0,698] + cmp w0, w21 + bcs .L2006 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 552 + mov w2, 34 + bl printk +.L2004: + b .L2004 +.L2002: + add x0, x0, x21, sxtw 2 + sbfiz x1, x1, 4, 32 + ldr w22, [x0,704] + add x0, x20, 3784 + add x23, x0, x1 + strh w21, [x0,x1] + strh wzr, [x23,2] + cbnz w22, .L2005 + add x19, x19, :lo12:.LANCHOR7 + ldr x0, [x23,8] + mov w1, 255 + ldrh w2, [x19,3154] + bl ftl_memset + b .L2006 +.L2005: + add x24, x19, :lo12:.LANCHOR7 + ldrb w3, [x20,2776] + ldr x1, [x23,8] + mov w0, w22 + ldr x2, [x24,3144] + bl ftl_read_ppa_page + mov w3, w0 + ldr x0, [x24,3144] + ldr w2, [x0] + cmp w2, w21 + beq .L2007 + adrp x0, .LC170 + mov w4, w22 + mov w1, w21 + add x0, x0, :lo12:.LC170 + bl printk + ldr x3, [x20,2800] + adrp x0, .LC171 + add x0, x0, :lo12:.LC171 + mov w2, 4 + add x1, x3, 704 + ldrh w3, [x3,698] + bl rknand_print_hex + ldr x1, [x23,8] + adrp x0, .LC172 + add x0, x0, :lo12:.LC172 + mov w2, 4 + mov w3, 16 + bl rknand_print_hex + ldr x1, [x24,3144] + adrp x0, .LC173 + add x0, x0, :lo12:.LC173 + mov w2, 4 + mov w3, 16 + bl rknand_print_hex + ldrh w0, [x20,3218] + mov w1, 21 + mov w2, 1 + sub w1, w1, w0 + lsr w22, w22, w0 + lsl w1, w2, w1 + ldrb w0, [x20,3216] + sub w1, w1, #1 + and w22, w1, w22 + mov x1, 0 + udiv w0, w22, w0 + bl ftl_sblk_dump +.L2007: + add x19, x19, :lo12:.LANCHOR7 + ldr x0, [x19,3144] + ldr w0, [x0] + cmp w0, w21 + beq .L2006 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 552 + mov w2, 55 + bl printk +.L2008: + b .L2008 +.L2006: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size load_l2p_region, .-load_l2p_region + .align 2 + .global pm_gc + .type pm_gc, %function +pm_gc: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x23, x24, [sp,48] + adrp x23, .LANCHOR0 + str x25, [sp,64] + stp x19, x20, [sp,16] + add x19, x23, :lo12:.LANCHOR0 + adrp x20, .LANCHOR4 + stp x21, x22, [sp,32] + add x20, x20, :lo12:.LANCHOR4 + ldr x0, [x19,2800] + ldrh w1, [x0,688] + ldrh w0, [x20,1040] + sub w0, w0, #1 + cmp w1, w0 + blt .L2011 + bl pm_free_sblk + ldr x2, [x19,2800] + ldrh w1, [x20,1040] + ldrh w3, [x2,688] + sub w1, w1, #1 + cmp w3, w1 + blt .L2011 + add x0, x2, x0, uxth 1 + ldrh w21, [x0,416] + mov w25, 65535 + cmp w21, w25 + bne .L2013 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 568 + mov w2, 127 + bl printk +.L2014: + b .L2014 +.L2013: + bl pm_select_ram_region + uxth x20, w0 + add x19, x19, 3784 + lsl x0, x20, 4 + add x24, x19, x0 + mov x22, x20 + ldrh w0, [x19,x0] + cmp w0, w25 + beq .L2015 + ldr x1, [x24,8] + cbz x1, .L2015 + ldrsh w2, [x24,2] + tbz w2, #31, .L2015 + bl pm_write_page + ldrh w0, [x24,2] + and w0, w0, 32767 + strh w0, [x24,2] +.L2015: + add x23, x23, :lo12:.LANCHOR0 + mov w19, 0 + add x0, x23, 3784 + mov w24, 21 + mov w25, 1 + add x20, x0, x20, lsl 4 +.L2016: + ldr x0, [x23,2800] + ldrh w1, [x0,698] + cmp w1, w19 + bls .L2022 + ldrh w1, [x23,3218] + add x0, x0, x19, sxtw 2 + ldr w0, [x0,704] + lsr w0, w0, w1 + sub w1, w24, w1 + lsl w1, w25, w1 + sub w1, w1, #1 + and w1, w0, w1 + ldrb w0, [x23,3216] + udiv w1, w1, w0 + cmp w21, w1, uxth + bne .L2017 + mov w1, w22 + mov w0, w19 + bl load_l2p_region + ldr x1, [x20,8] + mov w0, w19 + bl pm_write_page +.L2017: + add w19, w19, 1 + uxth w19, w19 + b .L2016 +.L2022: + bl pm_free_sblk +.L2011: + mov w0, 0 + ldr x25, [sp,64] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size pm_gc, .-pm_gc + .align 2 + .global pm_flush_id + .type pm_flush_id, %function +pm_flush_id: + stp x29, x30, [sp, -32]! + ubfiz x0, x0, 4, 16 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x19, x19, :lo12:.LANCHOR0 + add x1, x19, 3784 + add x20, x1, x0 + ldrh w0, [x1,x0] + ldr x1, [x20,8] + bl pm_write_page + ldrh w0, [x20,2] + and w0, w0, 32767 + strh w0, [x20,2] + ldr w0, [x19,3776] + cbz w0, .L2024 + bl pm_gc + str wzr, [x19,3776] +.L2024: + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size pm_flush_id, .-pm_flush_id + .align 2 + .global pm_flush + .type pm_flush, %function +pm_flush: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + mov x19, 0 + add x20, x20, :lo12:.LANCHOR0 + add x20, x20, 3784 +.L2030: + add x1, x20, x19, lsl 4 + uxth w0, w19 + ldrsh w1, [x1,2] + tbz w1, #31, .L2029 + bl pm_flush_id +.L2029: + add x19, x19, 1 + cmp x19, 32 + bne .L2030 + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size pm_flush, .-pm_flush + .align 2 + .global flt_sys_flush + .type flt_sys_flush, %function +flt_sys_flush: + stp x29, x30, [sp, -16]! + add x29, sp, 0 + bl ftl_flush + bl pm_flush + bl ftl_ext_info_flush + mov w0, 0 + bl ftl_info_flush + ldp x29, x30, [sp], 16 + ret + .size flt_sys_flush, .-flt_sys_flush + .align 2 + .global zftl_deinit + .type zftl_deinit, %function +zftl_deinit: + stp x29, x30, [sp, -16]! + add x29, sp, 0 + bl zftl_flash_de_init + bl flt_sys_flush + bl zftl_flash_de_init + ldp x29, x30, [sp], 16 + ret + .size zftl_deinit, .-zftl_deinit + .align 2 + .global pm_init + .type pm_init, %function +pm_init: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x20, x19, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + mov w23, w0 + mov w0, 64 + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + str wzr, [x20,3776] + bl ftl_malloc + adrp x1, .LANCHOR7 + add x20, x20, 3784 + add x2, x1, :lo12:.LANCHOR7 + add x22, x20, 512 + mov x21, x1 + mov w24, -1 + str x0, [x2,3144] +.L2036: + strh w24, [x20] + strh wzr, [x20,2] + cbz w23, .L2035 + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,2776] + lsl w0, w0, 9 + bl ftl_malloc + str x0, [x20,8] +.L2035: + add x20, x20, 16 + cmp x20, x22 + bne .L2036 + add x20, x19, :lo12:.LANCHOR0 + add x1, x21, :lo12:.LANCHOR7 + mov w4, 4 + ldr x25, [x1,3144] + ldr x1, [x20,2800] + ldr x23, [x20,3792] + mov x3, x25 + ldrb w0, [x1,694] + mov x2, x23 + ldrh w1, [x1,692] + bl flash_get_last_written_page + sxth w21, w0 + ldr x1, [x20,2800] + mov w24, w21 + ldrh w2, [x1,696] + cmp w2, w21 + bgt .L2037 + adrp x0, .LC174 + ldrh w1, [x1,692] + mov w3, w21 + add x0, x0, :lo12:.LC174 + adrp x26, .LC175 + add w21, w21, 1 + bl printk + add x26, x26, :lo12:.LC175 + ldr x0, [x20,2800] + ldrsh w20, [x0,696] +.L2038: + cmp w20, w21 + bge .L2051 + add x27, x19, :lo12:.LANCHOR0 + mov x2, x23 + mov x3, x25 + ldr x0, [x27,2800] + ldrh w22, [x27,3230] + ldrb w4, [x27,2776] + ldrh w1, [x0,692] + ldrb w0, [x0,694] + madd w22, w1, w22, w20 + mov w1, w22 + bl flash_read_page_en + mov w28, w0 + ldr x3, [x27,2800] + mov x0, x26 + mov w2, w22 + ldr w1, [x3,48] + add w1, w1, 1 + str w1, [x3,48] + ldrh w3, [x3,694] + ldr w1, [x25] + bl printk + cmp w28, 512 + beq .L2039 + cmn w28, #1 + beq .L2039 + ldr x1, [x27,2800] + ldr w0, [x25] + ldrh w2, [x1,698] + cmp w0, w2 + bcs .L2039 + add x0, x1, x0, uxtw 2 + str w22, [x0,704] +.L2039: + add w20, w20, 1 + sxth w20, w20 + b .L2038 +.L2051: + add x19, x19, :lo12:.LANCHOR0 + adrp x0, .LANCHOR6-256 + mov w1, 1 + add w24, w24, 1 + strb w1, [x0,#:lo12:.LANCHOR6-256] + ldr x0, [x19,2800] + strh w24, [x0,696] + bl pm_free_sblk + ldr x1, [x19,3792] + mov w0, -1 + bl pm_write_page + ldr x1, [x19,3792] + mov w0, -1 + bl pm_write_page +.L2037: + bl pm_free_sblk + bl pm_gc + mov w0, 0 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size pm_init, .-pm_init + .align 2 + .global pm_log2phys + .type pm_log2phys, %function +pm_log2phys: + stp x29, x30, [sp, -96]! + mov w5, w0 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + str x25, [sp,64] + add x3, x21, :lo12:.LANCHOR0 + mov x22, x1 + stp x19, x20, [sp,16] + stp x23, x24, [sp,48] + mov w23, w2 + mov x19, 0 + ldrb w4, [x3,2776] + ldr w2, [x3,2784] + add x3, x3, 3784 + lsl w20, w4, 7 + lsl w24, w4, 7 + cmp w0, w2 + udiv w20, w0, w20 + uxth w25, w20 + msub w24, w25, w24, w0 + uxth x24, w24 + bcc .L2064 + adrp x0, .LC176 + mov w1, w5 + add x0, x0, :lo12:.LC176 + bl printk + mov w0, -1 + b .L2054 +.L2068: + ldrh w0, [x3] + cmp w0, w25 + beq .L2056 +.L2055: + add w19, w19, 1 + add x3, x3, 16 + uxth x19, w19 + cmp w19, 32 + beq .L2067 +.L2064: + ldr x0, [x3,8] + cbnz x0, .L2068 + b .L2055 +.L2067: + bl pm_select_ram_region + uxth x19, w0 + add x2, x21, :lo12:.LANCHOR0 + sbfiz x3, x19, 4, 32 + add x2, x2, 3784 + mov w1, w0 + add x4, x2, x3 + ldrh w3, [x2,x3] + mov w2, 65535 + cmp w3, w2 + bne .L2069 +.L2060: + adrp x0, .LANCHOR7+3156 + strb w19, [x0,#:lo12:.LANCHOR7+3156] + mov w0, w25 + bl load_l2p_region +.L2056: + cbnz w23, .L2057 + add x0, x21, :lo12:.LANCHOR0 + add x0, x0, x19, lsl 4 + ldr x0, [x0,3792] + ldr w0, [x0,x24,lsl 2] + str w0, [x22] + b .L2058 +.L2057: + add x0, x21, :lo12:.LANCHOR0 + ldr w2, [x22] + add x0, x0, 3784 + add x0, x0, x19, lsl 4 + ldr x1, [x0,8] + str w2, [x1,x24,lsl 2] + ldrh w1, [x0,2] + orr w1, w1, -32768 + strh w1, [x0,2] + adrp x0, .LANCHOR4-56 + strb w20, [x0,#:lo12:.LANCHOR4-56] +.L2058: + add x21, x21, :lo12:.LANCHOR0 + mov w2, 32767 + add x21, x21, 3784 + mov w0, 0 + add x19, x21, x19, lsl 4 + ldrh w1, [x19,2] + and w3, w1, 32767 + cmp w3, w2 + beq .L2054 + add w1, w1, 1 + strh w1, [x19,2] + b .L2054 +.L2069: + ldrsh w2, [x4,2] + tbz w2, #31, .L2060 + str x1, [x29,88] + bl pm_flush_id + ldr x1, [x29,88] + b .L2060 +.L2054: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldr x25, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size pm_log2phys, .-pm_log2phys + .align 2 + .global ftl_read_ahead + .type ftl_read_ahead, %function +ftl_read_ahead: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + stp x21, x22, [sp,32] + add x22, x20, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + ldr w0, [x22,2812] + cmn w0, #1 + beq .L2080 + mov w0, 0 + bl buf_alloc + mov x19, x0 + mov w1, -1 + cbz x0, .L2081 + ldr w21, [x22,2812] + str w21, [x0,36] + str w1, [x22,2812] + ldr x23, [x0,8] + ldr x22, [x0,24] + mov w0, w21 + bl lpa_hash_get_ppa + str w0, [x29,76] + cmn w0, #1 + bne .L2073 + mov w0, w21 + add x1, x29, 76 + mov w2, 0 + bl pm_log2phys +.L2073: + ldr w1, [x29,76] + str w1, [x19,40] + str w1, [x19,44] + cmn w1, #1 + bne .L2074 + add x20, x20, :lo12:.LANCHOR0 + mov x0, x23 + mov w1, 0 + ldrb w2, [x20,2776] + lsl w2, w2, 9 + bl ftl_memset + ldrb w0, [x19,2] + orr w0, w0, 8 + strb w0, [x19,2] + b .L2080 +.L2074: + mov x0, x19 + mov w1, 1 + bl sblk_read_page + ldr w23, [x19,52] + cmn w23, #1 + bne .L2075 + ldrb w0, [x19,2] + add x20, x20, :lo12:.LANCHOR0 + and w0, w0, -9 + strb w0, [x19,2] + ldr x1, [x20,2792] + ldr w0, [x1,552] + add w0, w0, 1 + str w0, [x1,552] + b .L2076 +.L2075: + cmp w23, 256 + bne .L2076 + add x20, x20, :lo12:.LANCHOR0 + mov w5, 21 + mov w24, 1 + ldr w4, [x29,76] + ldr w2, [x19,36] + adrp x0, .LC177 + ldrh w3, [x20,3218] + add x0, x0, :lo12:.LC177 + ldrb w20, [x20,3216] + sub w5, w5, w3 + lsr w3, w4, w3 + lsl w5, w24, w5 + sub w5, w5, #1 + and w3, w5, w3 + udiv w20, w3, w20 + ldr w3, [x19,40] + uxth w1, w20 + bl printk + mov w0, w20 + mov w1, w24 + mov w2, 0 + bl gc_add_sblk +.L2076: + ldr w5, [x22,4] + cmp w5, w21 + beq .L2077 + adrp x0, .LC178 + ldrb w1, [x19,1] + ldr w3, [x29,76] + add x0, x0, :lo12:.LC178 + ldr w4, [x22] + mov w2, w21 + ldr w6, [x22,8] + ldr w7, [x22,12] + bl printk +.L2077: + ldr w0, [x22,4] + cmp w0, w21 + cset w0, ne + cbnz w0, .L2083 + cmn w23, #1 + bne .L2071 +.L2083: + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 576 + mov w2, 781 + bl printk +.L2079: + b .L2079 +.L2081: + mov w0, w1 + b .L2071 +.L2080: + mov w0, 0 +.L2071: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size ftl_read_ahead, .-ftl_read_ahead + .align 2 + .global gc_update_l2p_map + .type gc_update_l2p_map, %function +gc_update_l2p_map: + stp x29, x30, [sp, -144]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x0, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + mov w21, 0 + ldr x25, [x0,2792] + mov w20, w21 + mov w24, w21 + bl timer_get_time + add x26, x25, 80 +.L2086: + add x0, x19, :lo12:.LANCHOR0 + ldrh w1, [x0,3234] + cmp w20, w1 + bge .L2096 + lsl w0, w20, 1 + mov w23, 0 + sub w0, w0, #1 + str w0, [x29,124] +.L2097: + ldrb w0, [x26,9] + cmp w23, w0 + bge .L2094 + sxtw x0, w23 + mov w22, 1 + str x0, [x29,112] +.L2095: + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,3193] + cmp w22, w0 + bgt .L2102 + adrp x1, .LANCHOR4 + sbfiz x0, x24, 2, 32 + add x1, x1, :lo12:.LANCHOR4 + ldr x2, [x1,1016] + ldr w27, [x2,x0] + cmn w27, #1 + beq .L2087 + ldr x1, [x1,1024] + ldr w28, [x1,x0] + mov w0, w27 + bl lpa_hash_get_ppa + str w0, [x29,140] + cmn w0, #1 + bne .L2088 + mov w0, w27 + add x1, x29, 140 + mov w2, 0 + bl pm_log2phys +.L2088: + ldr w3, [x29,140] + cmp w3, w28 + bne .L2089 + ldr x0, [x29,112] + add x0, x0, 8 + ldrh w1, [x26,x0,lsl 1] + add x0, x19, :lo12:.LANCHOR0 + ldrh w2, [x0,3230] + ldrb w0, [x0,3193] + cmp w0, 3 + mul w1, w1, w2 + bne .L2090 + add w1, w1, w20 + orr w1, w1, w22, lsl 24 + b .L2101 +.L2090: + cmp w0, 2 + bne .L2092 + ldr w0, [x29,124] + add w1, w1, w0 + add w1, w1, w22 + orr w1, w1, 33554432 + b .L2101 +.L2092: + add w1, w1, w20 +.L2101: + str w1, [x29,136] + mov w2, 1 + add x1, x29, 136 + mov w0, w27 + str x3, [x29,104] + add w21, w21, 1 + bl pm_log2phys + add x2, x19, :lo12:.LANCHOR0 + mov w1, 21 + mov w3, 1 + ldrh w0, [x2,3218] + sub w1, w1, w0 + lsl w1, w3, w1 + ldr x3, [x29,104] + sub w1, w1, #1 + lsr w3, w3, w0 + ldrb w0, [x2,3216] + and w3, w1, w3 + udiv w0, w3, w0 + bl ftl_vpn_decrement +.L2089: + add w24, w24, 1 + bl timer_get_time +.L2087: + add w22, w22, 1 + b .L2095 +.L2102: + add w23, w23, 1 + b .L2097 +.L2094: + add w20, w20, 1 + b .L2086 +.L2096: + ldrh w1, [x25,80] + ldr x0, [x0,2832] + strh w21, [x0,x1,lsl 1] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret + .size gc_update_l2p_map, .-gc_update_l2p_map + .align 2 + .global gc_update_l2p_map_new + .type gc_update_l2p_map_new, %function +gc_update_l2p_map_new: + stp x29, x30, [sp, -160]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + adrp x20, .LANCHOR2 + add x0, x19, :lo12:.LANCHOR0 + stp x27, x28, [sp,80] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + ldr x24, [x0,2792] + ldrh w1, [x0,3210] + add x28, x24, 80 + ldrb w0, [x28,9] + mul w0, w1, w0 + str w0, [x29,140] + bl timer_get_time + add x0, x20, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 8, .L2104 + adrp x0, .LC179 + ldrh w1, [x24,80] + add x0, x0, :lo12:.LC179 + bl printk +.L2104: + add x0, x19, :lo12:.LANCHOR0 + ldrh w1, [x24,80] + ldr w2, [x29,140] + mov w23, 0 + mov w21, w23 + ldr x0, [x0,2832] + sub w2, w2, #1 + strh w2, [x0,x1,lsl 1] + adrp x0, .LC182 + add x0, x0, :lo12:.LC182 + str x0, [x29,120] + adrp x0, .LC181 + add x0, x0, :lo12:.LC181 + str x0, [x29,112] + adrp x0, .LC180 + add x0, x0, :lo12:.LC180 + str x0, [x29,104] +.L2105: + ldr w0, [x29,140] + cmp w21, w0 + beq .L2140 + adrp x22, .LANCHOR4 + str x22, [x29,128] + add x0, x22, :lo12:.LANCHOR4 + ldr x0, [x0,1016] + ldr w2, [x0,w21,sxtw 2] + cmn w2, #1 + beq .L2106 + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,2776] + lsl w0, w0, 7 + udiv w0, w2, w0 + and w0, w0, 65535 + str w0, [x29,136] + add x0, x20, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 8, .L2107 + ldr x0, [x29,104] + mov w3, w21 + ldr w1, [x29,136] + bl printk +.L2107: + mov w25, w21 +.L2113: + ldr x0, [x29,128] + sbfiz x26, x25, 2, 32 + add x1, x0, :lo12:.LANCHOR4 + ldr x0, [x1,1016] + ldr w22, [x0,x26] + cmn w22, #1 + beq .L2108 + add x0, x19, :lo12:.LANCHOR0 + ldr w2, [x29,136] + ldrb w0, [x0,2776] + lsl w0, w0, 7 + udiv w0, w22, w0 + cmp w2, w0, uxth + bne .L2108 + ldr x0, [x1,1024] + ldr w27, [x0,x26] + mov w0, w22 + bl lpa_hash_get_ppa + str w0, [x29,156] + cmn w0, #1 + bne .L2109 + mov w0, w22 + add x1, x29, 156 + mov w2, 0 + bl pm_log2phys +.L2109: + ldr w3, [x29,156] + cmp w3, w27 + bne .L2110 + ldr x0, [x29,128] + add x1, x29, 152 + mov w2, 1 + add w23, w23, 1 + add x0, x0, :lo12:.LANCHOR4 + ldr x0, [x0,1032] + ldr w0, [x0,x26] + str w0, [x29,152] + mov w0, w22 + bl pm_log2phys + add x1, x19, :lo12:.LANCHOR0 + mov w2, 21 + mov w0, 1 + ldrh w3, [x1,3218] + sub w2, w2, w3 + lsr w3, w27, w3 + lsl w2, w0, w2 + sub w2, w2, #1 + and w3, w2, w3 + ldrb w2, [x1,3216] + udiv w2, w3, w2 + uxth w2, w2 + str x2, [x29,96] + mov w0, w2 + bl ftl_vpn_decrement + ldrh w0, [x28] + ldr x2, [x29,96] + cmp w0, w2 + bne .L2111 + add x0, x20, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 8, .L2111 + ldr x0, [x29,112] + mov w1, w22 + ldr w3, [x29,156] + mov w2, w27 + bl printk + b .L2111 +.L2110: + add x0, x20, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 8, .L2112 + ldr x0, [x29,120] + mov w1, w22 + mov w2, w27 + bl printk +.L2112: + ldrh w0, [x28] + bl ftl_vpn_decrement +.L2111: + ldr x0, [x29,128] + mov w1, -1 + add x0, x0, :lo12:.LANCHOR4 + ldr x0, [x0,1016] + str w1, [x0,x26] + bl timer_get_time +.L2108: + ldr w0, [x29,140] + add w25, w25, 1 + cmp w25, w0 + bne .L2113 +.L2106: + add w21, w21, 1 + b .L2105 +.L2140: + add x20, x20, :lo12:.LANCHOR2 + ldr w0, [x20,400] + tbz x0, 8, .L2115 + add x0, x19, :lo12:.LANCHOR0 + ldrh w3, [x24,80] + ldr x1, [x0,2792] + ldr x2, [x0,2832] + adrp x0, .LC183 + add x0, x0, :lo12:.LC183 + ldrh w1, [x1,80] + ldrh w2, [x2,x3,lsl 1] + mov w3, w23 + bl printk +.L2115: + add x19, x19, :lo12:.LANCHOR0 + ldrh w1, [x24,80] + ldr x0, [x19,2832] + ldrh w0, [x0,x1,lsl 1] + cmp w0, w23 + beq .L2103 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 592 + mov w2, 451 + bl printk +.L2117: + b .L2117 +.L2103: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 160 + ret + .size gc_update_l2p_map_new, .-gc_update_l2p_map_new + .align 2 + .global gc_scan_src_blk_one_page + .type gc_scan_src_blk_one_page, %function +gc_scan_src_blk_one_page: + stp x29, x30, [sp, -80]! + mov w4, 0 + mov w6, 65535 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + str x23, [sp,48] + add x3, x19, :lo12:.LANCHOR0 + mov w5, w4 + add x2, x3, 2848 + stp x21, x22, [sp,32] + ldrb w0, [x2,4] + add x1, x2, x0, sxtw 1 + ldrb w7, [x3,3212] + ldrh w1, [x1,40] + ldrh w3, [x2,2] +.L2142: + cmp w1, w6 + bne .L2184 + add w0, w0, 1 + uxtb w0, w0 + cmp w0, w7 + bne .L2143 + add w3, w3, 1 + mov w4, 1 + mov w0, 0 + uxth w3, w3 +.L2143: + add x1, x2, x0, sxtw 1 + mov w5, 1 + ldrh w1, [x1,40] + b .L2142 +.L2184: + cbz w5, .L2145 + add x2, x19, :lo12:.LANCHOR0 + strb w0, [x2,2852] +.L2145: + cbz w4, .L2146 + add x0, x19, :lo12:.LANCHOR0 + strh w3, [x0,2850] +.L2146: + add x0, x19, :lo12:.LANCHOR0 + ldrb w2, [x0,3193] + ldrh w20, [x0,3230] + cmp w2, 2 + mul w1, w1, w20 + bne .L2147 + ldrb w2, [x0,2854] + add x0, x0, 2848 + cbnz w2, .L2147 + ldrh w20, [x0,2] + add w20, w1, w20, lsl 1 + b .L2148 +.L2147: + add x0, x19, :lo12:.LANCHOR0 + ldrh w20, [x0,2850] + add w20, w1, w20 +.L2148: + add x2, x19, :lo12:.LANCHOR0 + add x1, x2, 2848 + ldrb w0, [x2,2852] + add w0, w0, 1 + uxtb w0, w0 + strb w0, [x2,2852] + ldrb w2, [x2,3212] + cmp w2, w0 + bne .L2149 + ldrh w0, [x1,2] + strb wzr, [x1,4] + add w0, w0, 1 + strh w0, [x1,2] +.L2149: + mov w0, 1 + mov w21, 0 + add x19, x19, :lo12:.LANCHOR0 + bl buf_alloc + mov x22, x0 +.L2160: + ldrb w0, [x19,2854] + cbnz w21, .L2162 + cmp w0, 3 + beq .L2150 +.L2162: + cmp w0, w21 + bgt .L2152 +.L2161: + mov x0, x22 + bl buf_free + ldr x23, [sp,48] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 80 + ret +.L2152: + ldrb w1, [x19,3193] + cmp w1, 2 + bne .L2153 + cbnz w0, .L2153 + add w0, w21, w20 + orr w0, w0, 33554432 + b .L2183 +.L2153: + orr w0, w20, w21, lsl 24 +.L2183: + str w0, [x22,40] + mov w1, 1 + mov x0, x22 + bl sblk_read_page + ldr w0, [x22,52] + cmp w0, 512 + beq .L2157 + cmn w0, #1 + beq .L2157 + ldr x0, [x22,24] + ldr w23, [x0,4] + mov w0, w23 + bl lpa_hash_get_ppa + str w0, [x29,76] + cmn w0, #1 + bne .L2158 + mov w0, w23 + add x1, x29, 76 + mov w2, 0 + bl pm_log2phys +.L2158: + ldr w0, [x29,76] + cmp w20, w0 + bne .L2157 + ldrh w2, [x19,2872] + ldr x1, [x19,3184] + str w20, [x1,x2,lsl 2] + ldrh w1, [x19,2872] + add w1, w1, 1 + strh w1, [x19,2872] +.L2157: + ldrh w0, [x19,2874] + add w0, w0, 1 + strh w0, [x19,2874] +.L2150: + add w21, w21, 1 + cmp w21, 4 + bne .L2160 + b .L2161 + .size gc_scan_src_blk_one_page, .-gc_scan_src_blk_one_page + .align 2 + .global gc_scan_static_data + .type gc_scan_static_data, %function +gc_scan_static_data: + stp x29, x30, [sp, -80]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x1, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + ldr x0, [x1,2792] + ldr w2, [x0,544] + cmn w2, #1 + beq .L2186 + mov w20, 11 + mov w21, 21 + mov w22, 1 +.L2187: + add x24, x19, :lo12:.LANCHOR0 + add x1, x29, 76 + mov w2, 0 + ldr x0, [x24,2792] + ldr w0, [x0,544] + bl pm_log2phys + ldr w0, [x29,76] + cmn w0, #1 + beq .L2188 + mov w0, 1 + bl buf_alloc + mov x23, x0 + ldr w1, [x29,76] + str w1, [x0,40] + mov w1, 1 + bl sblk_read_page + ldr w0, [x23,52] + cmp w0, 256 + bne .L2189 + ldrh w1, [x24,3218] + ldr w2, [x29,76] + sub w3, w21, w1 + ldrb w0, [x24,3216] + lsl w3, w22, w3 + lsr w1, w2, w1 + sub w3, w3, #1 + mov w2, 0 + and w1, w3, w1 + udiv w0, w1, w0 + mov w1, 1 + bl gc_add_sblk +.L2189: + add x0, x19, :lo12:.LANCHOR0 + ldr x1, [x23,24] + ldr x0, [x0,2792] + ldr w1, [x1,4] + ldr w0, [x0,544] + cmp w1, w0 + beq .L2190 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 616 + mov w2, 1156 + bl printk +.L2191: + b .L2191 +.L2190: + mov x0, x23 + bl buf_free +.L2188: + add x2, x19, :lo12:.LANCHOR0 + ldr x0, [x2,2792] + ldr w2, [x2,2784] + ldr w1, [x0,544] + add w1, w1, 1 + str w1, [x0,544] + cmp w1, w2 + bcc .L2192 + mov w1, -1 + str w1, [x0,544] + ldr w1, [x0,548] + add w1, w1, 1 + str w1, [x0,548] + bl ftl_flush + bl pm_flush + bl ftl_ext_info_flush + mov w0, 0 + bl ftl_info_flush + b .L2185 +.L2192: + ldr w0, [x29,76] + cmn w0, #1 + bne .L2185 + sub w20, w20, #1 + uxth w20, w20 + cbnz w20, .L2187 + b .L2185 +.L2186: + ldr x1, [x1,2800] + ldr w2, [x1,40] + cmp w2, 20480 + bls .L2197 + ldr w3, [x1,44] + add w3, w3, w2, lsr 10 + and w2, w2, 1023 + str w3, [x1,44] + str w2, [x1,40] +.L2197: + ldr w2, [x0,536] + ldr w3, [x0,12] + add w2, w2, 12959744 + add w2, w2, 256 + cmp w3, w2 + bhi .L2198 + ldr w2, [x0,540] + ldr w4, [x1,44] + add w2, w2, 98304 + add w2, w2, 1696 + cmp w4, w2 + bls .L2185 +.L2198: + ldr w1, [x1,44] + str w1, [x0,540] + str w3, [x0,536] + str wzr, [x0,544] +.L2185: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 80 + ret + .size gc_scan_static_data, .-gc_scan_static_data + .align 2 + .global gc_block_vpn_scan + .type gc_block_vpn_scan, %function +gc_block_vpn_scan: + stp x29, x30, [sp, -144]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x20, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + ldr x1, [x20,2792] + ldrh w0, [x20,2826] + ldr w1, [x1,608] + cmp w1, w0 + bcs .L2203 + bl timer_get_time + ldr x21, [x20,2792] + ldr w1, [x21,604] + add w1, w1, 28672 + add w1, w1, 1328 + cmp w0, w1 + bls .L2203 + bl timer_get_time + str w0, [x21,604] + ldr x0, [x20,2792] + ldrh w2, [x20,2826] + ldr w1, [x0,600] + cmp w1, w2 + bcs .L2209 + ldr x2, [x20,2800] + ldrh w2, [x2,134] + cmp w1, w2 + bcs .L2210 +.L2209: + add x1, x19, :lo12:.LANCHOR0 + ldr x1, [x1,2800] + ldrh w1, [x1,134] + str w1, [x0,600] +.L2210: + ldr w24, [x0,600] + add w1, w24, 1 + str w1, [x0,600] + ldr w1, [x0,608] + uxth w20, w24 + add w1, w1, 1 + str w1, [x0,608] + add x1, x29, 128 + mov w0, w20 + bl ftl_get_blk_list_in_sblk + uxth w1, w0 + cbz w1, .L2203 + add x2, x19, :lo12:.LANCHOR0 + uxtw x22, w20 + ldr x25, [x2,2840] + add x25, x25, x22, lsl 2 + ldrb w1, [x25,2] + tst w1, 192 + and w3, w1, 224 + beq .L2211 + cmp w3, 224 + beq .L2211 + ldr x1, [x2,2792] + ldrh w4, [x1,16] + cmp w4, w20 + beq .L2211 + ldrh w4, [x1,48] + cmp w4, w20 + beq .L2211 + ldrh w1, [x1,80] + cmp w1, w20 + bne .L2212 +.L2211: + cbnz w3, .L2203 + add x19, x19, :lo12:.LANCHOR0 + lsl x22, x22, 1 + ldr x0, [x19,2832] + ldrh w1, [x0,x22] + cbz w1, .L2213 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 640 + mov w2, 1361 + bl printk +.L2214: + b .L2214 +.L2213: + strh w3, [x0,x22] + b .L2203 +.L2212: + add x1, x29, 144 + and w0, w0, 65535 + sub w0, w0, #1 + add x0, x1, x0, sxtw 1 + ldrh w1, [x0,-16] + mov w0, 65535 + cmp w1, w0 + bne .L2216 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 640 + mov w2, 1367 + bl printk +.L2217: + b .L2217 +.L2216: + ldrh w0, [x2,3234] + cmp w3, 160 + ldrh w4, [x2,3230] + mov w26, 1 + sub w0, w0, #1 + mul w1, w1, w4 + uxth w0, w0 + bne .L2218 + ldrb w3, [x2,3193] + cmp w3, 2 + uxth w26, w3 + orr w1, w1, w3, lsl 24 + bne .L2218 + ldrh w0, [x2,3210] + sub w0, w0, #1 + uxth w0, w0 +.L2218: + orr w21, w0, w1 + mov w0, 1 + bl buf_alloc + str w21, [x0,40] + mov w1, 1 + add x21, x19, :lo12:.LANCHOR0 + mov x23, x0 + bl sblk_read_page + ldrh w0, [x21,3210] + mov w1, 255 + ldrb w2, [x21,3212] + mul w2, w0, w2 + ldr x0, [x21,3184] + lsl w2, w2, 2 + bl ftl_memset + ldr w0, [x23,52] + cmp w0, 512 + beq .L2230 + cmn w0, #1 + cset w2, eq + cbz w2, .L2219 +.L2230: + mov w0, w20 + mov w1, 1 + mov w2, 0 + b .L2240 +.L2219: + ldr x0, [x23,24] + ldr w1, [x0] + mov w0, 15555 + movk w0, 0xf55f, lsl 16 + cmp w1, w0 + beq .L2221 + mov w0, w20 + mov w1, 1 +.L2240: + bl gc_add_sblk + mov x0, x23 + bl buf_free + b .L2203 +.L2221: + ldrb w0, [x21,3212] + mov x27, 0 + ldrh w1, [x21,3234] + and w28, w24, 65535 + mov w21, w27 + mul w0, w0, w1 + mul w26, w26, w0 + uxth w0, w26 + ldr x26, [x23,8] + str w0, [x29,108] +.L2222: + ldr w0, [x29,108] + cmp w0, w27 + ble .L2241 + ldr w0, [x26,x27,lsl 2] + cmn w0, #1 + beq .L2223 + bl lpa_hash_get_ppa + str w0, [x29,124] + cmn w0, #1 + bne .L2224 + ldr w0, [x26,x27,lsl 2] + add x1, x29, 124 + mov w2, 0 + bl pm_log2phys +.L2224: + add x4, x19, :lo12:.LANCHOR0 + mov w1, 21 + ldrh w0, [x4,3218] + sub w2, w1, w0 + mov w1, 1 + lsl w2, w1, w2 + ldr w1, [x29,124] + sub w2, w2, #1 + lsr w0, w1, w0 + ldrb w1, [x4,3216] + and w0, w2, w0 + udiv w0, w0, w1 + cmp w0, w28 + bne .L2223 + add w21, w21, 1 + uxth w21, w21 +.L2223: + add x27, x27, 1 + b .L2222 +.L2241: + mov x0, x23 + bl buf_free + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L2226 + add x0, x19, :lo12:.LANCHOR0 + ldrb w4, [x25,2] + uxth w1, w24 + mov w3, w21 + ubfx x4, x4, 5, 3 + ldr x2, [x0,2832] + adrp x0, .LC184 + add x0, x0, :lo12:.LC184 + ldrh w2, [x2,x22,lsl 1] + bl printk +.L2226: + add x19, x19, :lo12:.LANCHOR0 + cmp w21, 31 + ldr x0, [x19,2832] + strh w21, [x0,x22,lsl 1] + bhi .L2203 + mov w0, w20 + mov w1, 1 + mov w2, 0 + bl gc_add_sblk +.L2203: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret + .size gc_block_vpn_scan, .-gc_block_vpn_scan + .align 2 + .global ftl_sblk_dump + .type ftl_sblk_dump, %function +ftl_sblk_dump: + sub sp, sp, #256 + stp x29, x30, [sp,48] + add x29, sp, 48 + stp x23, x24, [sp,96] + uxth w24, w0 + mov w0, 65535 + stp x19, x20, [sp,64] + stp x21, x22, [sp,80] + stp x25, x26, [sp,112] + stp x27, x28, [sp,128] + cmp w24, w0 + beq .L2265 + adrp x3, .LANCHOR0 + uxtw x0, w24 + add x2, x3, :lo12:.LANCHOR0 + lsl x20, x0, 2 + str x0, [x29,128] + mov w26, 1 + str x3, [x29,152] + ldr x0, [x2,2840] + add x0, x0, x20 + ldrb w0, [x0,2] + and w0, w0, 224 + cmp w0, 160 + bne .L2244 + ldrb w26, [x2,3193] +.L2244: + str x1, [x29,144] + mov w0, w24 + add x1, x29, 192 + strh w24, [x29,176] + adrp x19, .LANCHOR2 + bl ftl_get_blk_list_in_sblk + uxtb w1, w0 + mov w4, w0 + ldr x0, [x29,152] + strb w1, [x29,185] + add x0, x0, :lo12:.LANCHOR0 + strh wzr, [x29,178] + strb wzr, [x29,181] + strh wzr, [x29,186] + ldrh w2, [x0,3234] + mul w1, w1, w2 + strh w1, [x29,182] + add x1, x19, :lo12:.LANCHOR2 + ldr w1, [x1,400] + tbz x1, 12, .L2245 + ldr x0, [x0,2840] + mov w1, w24 + mov w3, w26 + uxtb w4, w4 + add x20, x0, x20 + adrp x0, .LC185 + add x0, x0, :lo12:.LC185 + ldrb w2, [x20,2] + ubfx x2, x2, 5, 3 + bl printk +.L2245: + mov w0, 1 + mov w22, 0 + mov w28, w22 + mov w20, w22 + bl buf_alloc + mov x27, x0 + adrp x0, .LC187 + str w22, [x29,140] + add x0, x0, :lo12:.LC187 + str x0, [x29,120] + adrp x0, .LC186 + add x0, x0, :lo12:.LC186 + str x0, [x29,112] + adrp x0, .LC150 + add x0, x0, :lo12:.LC150 + str x0, [x29,104] +.L2246: + ldr x0, [x29,152] + add x21, x0, :lo12:.LANCHOR0 + ldrh w0, [x21,3234] + cmp w0, w20 + bls .L2262 + lsl w0, w20, 1 + mov w25, 0 + sub w0, w0, #1 + str w0, [x29,136] +.L2263: + ldrb w0, [x29,185] + cmp w0, w25 + bls .L2260 + mov w23, 1 +.L2261: + cmp w23, w26 + bhi .L2295 + add x0, x29, 176 + add x0, x0, x25, sxtw 1 + ldrh w3, [x0,16] + mov w0, 65535 + cmp w3, w0 + beq .L2247 + ldr x0, [x29,152] + cmp w26, 3 + add x0, x0, :lo12:.LANCHOR0 + ldrh w2, [x0,3230] + mul w2, w3, w2 + add w21, w2, w20 + bne .L2248 + orr w21, w21, w23, lsl 24 + b .L2249 +.L2248: + cmp w26, 2 + bne .L2249 + ldr w1, [x29,136] + ldrb w21, [x0,3193] + add w2, w2, w1 + add w2, w2, w23 + orr w21, w2, w21, lsl 24 +.L2249: + str w21, [x27,40] + mov x0, x27 + mov w1, 1 + str x3, [x29,96] + bl sblk_read_page + add x0, x19, :lo12:.LANCHOR2 + ldr w9, [x27,52] + ldr x3, [x29,96] + ldr w0, [x0,400] + tbz x0, 12, .L2251 + ldr x7, [x27,8] + mov w4, w9 + ldr x0, [x27,24] + mov w2, w20 + str x9, [x29,96] + ldr w1, [x7,12] + str w1, [sp] + ldr w1, [x0] + str w1, [sp,8] + ldr w1, [x0,4] + str w1, [sp,16] + ldr w1, [x0,8] + str w1, [sp,24] + mov w1, w3 + mov w3, w21 + ldr w0, [x0,12] + str w0, [sp,32] + ldr x0, [x29,104] + ldr w5, [x7] + ldr w6, [x7,4] + ldr w7, [x7,8] + bl printk + ldr x9, [x29,96] +.L2251: + cmp w9, 512 + beq .L2267 + cmn w9, #1 + bne .L2252 +.L2267: + mov w0, 1 + str w0, [x29,140] +.L2252: + ldr x0, [x27,24] + ldr w1, [x0,4] + str x1, [x29,96] + mov w0, w1 + bl lpa_hash_get_ppa + str w0, [x29,172] + cmn w0, #1 + ldr x1, [x29,96] + bne .L2254 + mov w0, w1 + mov w2, 0 + add x1, x29, 172 + bl pm_log2phys +.L2254: + ldr w0, [x29,172] + cmp w0, w21 + bne .L2255 + add x0, x19, :lo12:.LANCHOR2 + add w22, w22, 1 + ldr w0, [x0,400] + tbz x0, 12, .L2255 + ldr x2, [x27,24] + mov w1, w21 + ldr x0, [x29,112] + mov w3, w22 + ldr w2, [x2,4] + bl printk +.L2255: + ldr x0, [x29,144] + cbz x0, .L2256 + ubfiz x21, x28, 2, 32 + ldr w2, [x0,x21] + ldr x0, [x27,24] + ldr w0, [x0,4] + cmp w0, w2 + beq .L2257 + add x0, x19, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 12, .L2257 + ldr x0, [x29,120] + mov w1, w28 + bl printk +.L2257: + ldr x0, [x29,144] + ldr x1, [x27,24] + ldr w0, [x0,x21] + ldr w1, [x1,4] + cmp w1, w0 + beq .L2256 + cmn w0, #1 + beq .L2256 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 664 + mov w2, 617 + bl printk +.L2258: + b .L2258 +.L2256: + add w28, w28, 1 +.L2247: + add w23, w23, 1 + uxth w23, w23 + b .L2261 +.L2295: + add w25, w25, 1 + uxth w25, w25 + b .L2263 +.L2260: + add w20, w20, 1 + uxth w20, w20 + b .L2246 +.L2262: + mov x0, x27 + add x19, x19, :lo12:.LANCHOR2 + bl buf_free + ldr w0, [x19,400] + tbz x0, 12, .L2264 + ldr x3, [x29,128] + adrp x0, .LC188 + ldr x2, [x21,2832] + add x0, x0, :lo12:.LC188 + mov w1, w24 + ldrh w2, [x2,x3,lsl 1] + mov w3, w22 + bl printk +.L2264: + ldr w0, [x29,140] + b .L2243 +.L2265: + mov w0, 0 +.L2243: + sub sp, x29, #48 + ldp x19, x20, [sp,64] + ldp x21, x22, [sp,80] + ldp x23, x24, [sp,96] + ldp x25, x26, [sp,112] + ldp x27, x28, [sp,128] + ldp x29, x30, [sp,48] + add sp, sp, 256 + ret + .size ftl_sblk_dump, .-ftl_sblk_dump + .align 2 + .global gc_search_src_blk + .type gc_search_src_blk, %function +gc_search_src_blk: + stp x29, x30, [sp, -128]! + add x29, sp, 0 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + adrp x20, .LANCHOR0 + uxtb w21, w0 + uxtb w0, w1 + str w0, [x29,124] + add x0, x20, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + uxtb w24, w2 + ldr x1, [x0,2800] + ldr x0, [x0,2792] + add x0, x0, x21, sxtw 1 + ldrh w0, [x0,120] + ldrh w25, [x1,134] + cbnz w0, .L2298 + adrp x22, .LANCHOR2 + add x0, x22, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 8, .L2299 + adrp x0, .LC189 + ldr w2, [x29,124] + add x0, x0, :lo12:.LC189 + mov w1, w21 + mov w3, w24 + bl printk +.L2299: + add x0, x22, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 8, .L2300 + add x3, x20, :lo12:.LANCHOR0 + adrp x4, .LANCHOR4+1014 + adrp x0, .LC190 + add x0, x0, :lo12:.LC190 + ldr x1, [x3,2800] + ldr x2, [x3,2792] + ldrh w4, [x4,#:lo12:.LANCHOR4+1014] + ldrh w1, [x1,134] + ldrh w2, [x2,126] + ldrh w3, [x3,3176] + bl printk +.L2300: + cmp w24, 64 + bls .L2301 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 680 + mov w2, 1033 + bl printk +.L2302: + b .L2302 +.L2301: + add x0, x20, :lo12:.LANCHOR0 + adrp x26, .LC191 + mov w19, 0 + add x26, x26, :lo12:.LC191 + ldrb w1, [x0,3212] + ldrh w4, [x0,3234] + ldrh w3, [x0,3210] + ldr x0, [x0,2800] + mul w4, w1, w4 + mul w3, w1, w3 + ldrh w23, [x0,134] + adrp x0, .LANCHOR7 + add x0, x0, :lo12:.LANCHOR7 + uxth w27, w4 + uxth w28, w3 + str x0, [x29,112] +.L2303: + add x2, x20, :lo12:.LANCHOR0 + ldr x0, [x2,2800] + ldrh w1, [x2,2826] + ldrh w0, [x0,134] + sub w6, w1, w0 + cmp w23, w6 + bge .L2312 + ldr x2, [x2,2792] + ldrh w5, [x2,126] + add w5, w23, w5 + uxth w25, w5 + cmp w25, w1 + bcc .L2304 + sub w0, w0, w1 + add w5, w25, w0 + uxth w25, w5 + cmp w25, w1 + bcc .L2304 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 680 + mov w2, 1043 + bl printk +.L2305: + b .L2305 +.L2304: + add x7, x20, :lo12:.LANCHOR0 + uxtw x6, w25 + ldr x0, [x7,2840] + add x0, x0, x6, lsl 2 + ldrb w2, [x0,2] + and w2, w2, 224 + cmp w2, 224 + beq .L2306 + cmp w2, 32 + cset w1, eq + cbnz w1, .L2306 + lsl x6, x6, 1 + ldr x0, [x7,2832] + cbnz w2, .L2307 + ldrh w1, [x0,x6] + cbz w1, .L2308 + mov w2, w25 + mov x0, x26 + str x6, [x29,104] + bl printk + mov w0, w25 + mov x1, 0 + bl ftl_sblk_dump + ldr x6, [x29,104] +.L2308: + add x0, x20, :lo12:.LANCHOR0 + ldr x0, [x0,2832] + ldrh w0, [x0,x6] + cbz w0, .L2306 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 680 + mov w2, 1052 + bl printk +.L2309: + b .L2309 +.L2307: + ldrh w0, [x0,x6] + mov w3, 65535 + cmp w0, w3 + beq .L2306 + ldr x3, [x29,112] + cmp w2, 160 + add x6, x3, 3160 + ldr w3, [x29,124] + ldrb w6, [x6,w25,sxtw] + mul w0, w0, w6 + mov w6, 2 + csinc w6, w6, wzr, eq + uxth w0, w0 + and w6, w6, w3 + cbnz w21, .L2311 + cmp w27, w0 + csel w4, w27, w0, cc + uxth w27, w4 + cbz w6, .L2306 + ldrh w1, [x7,3176] + cmp w1, w0 + bls .L2306 + mov w0, w25 + mov w1, w21 + mov w2, w21 + bl gc_add_sblk + cbz w0, .L2306 + b .L2358 +.L2311: + cbz w6, .L2313 + cmp w2, 160 + adrp x2, .LANCHOR4 + bne .L2314 + add x2, x2, :lo12:.LANCHOR4 + cmp w28, w0 + csel w3, w28, w0, cc + ldrh w2, [x2,1014] + uxth w28, w3 + cmp w2, w0 + bls .L2313 + b .L2360 +.L2314: + add x2, x2, :lo12:.LANCHOR4 + cmp w27, w0 + csel w4, w27, w0, cc + ldrh w2, [x2,1012] + uxth w27, w4 + cmp w2, w0 + bhi .L2313 +.L2360: + mov w0, w25 + mov w2, w21 + bl gc_add_sblk + cbz w0, .L2313 +.L2358: + add w19, w19, 1 + uxth w19, w19 +.L2313: + cmp w19, w24 + bhi .L2312 +.L2306: + add w23, w23, 1 + uxth w23, w23 + b .L2303 +.L2312: + add x1, x20, :lo12:.LANCHOR0 + ldr x0, [x1,2800] + ldrh w2, [x0,134] + ldrh w0, [x1,2826] + sub w0, w0, w2 + cmp w23, w0 + ldr x0, [x1,2792] + blt .L2316 + strh w2, [x0,126] + cbnz w21, .L2317 + ldrh w0, [x1,3176] + cmp w0, w27 + bcs .L2318 + strh w27, [x1,3176] +.L2318: + add x20, x20, :lo12:.LANCHOR0 + mov w1, 7 + ldrh w0, [x20,3234] + ldrh w2, [x20,3176] + mul w1, w0, w1 + cmp w2, w1, lsr 3 + bge .L2320 + add w0, w2, w0, lsr 3 + strh w0, [x20,3176] + b .L2320 +.L2317: + ldrh w0, [x1,3210] + ldrb w1, [x1,3216] + mul w1, w0, w1 + adrp x0, .LANCHOR4 + cmp w28, w1 + beq .L2321 + add x2, x0, :lo12:.LANCHOR4 + ldrh w5, [x2,1014] + cmp w5, w28 + bcs .L2321 + strh w28, [x2,1014] +.L2321: + add x20, x20, :lo12:.LANCHOR0 + add x7, x0, :lo12:.LANCHOR4 + ldrh w6, [x20,3234] + ldrh w2, [x7,1014] + lsr w5, w6, 3 + sub w1, w1, w5 + cmp w2, w1 + bge .L2322 + add w2, w5, w2 + strh w2, [x7,1014] +.L2322: + add x0, x0, :lo12:.LANCHOR4 + ldrh w1, [x0,1012] + cmp w1, w6, lsr 1 + bls .L2320 + sub w1, w1, w5 + strh w1, [x0,1012] + b .L2320 +.L2316: + strh w25, [x0,126] + ldrh w0, [x1,3234] + cbnz w21, .L2324 + ldrh w2, [x1,3176] + cmp w2, w0, lsr 2 + bls .L2320 + sub w0, w2, w0, lsr 3 + strh w0, [x1,3176] + b .L2320 +.L2324: + adrp x1, .LANCHOR4 + add x5, x1, :lo12:.LANCHOR4 + ldrh w2, [x5,1014] + cmp w2, w0, lsr 1 + bls .L2325 + sub w2, w2, w0, lsr 3 + strh w2, [x5,1014] +.L2325: + add x20, x20, :lo12:.LANCHOR0 + add x1, x1, :lo12:.LANCHOR4 + ldrb w5, [x20,3216] + ldrh w2, [x1,1012] + mul w0, w0, w5 + sub w0, w0, #32 + cmp w2, w0 + bge .L2320 + add w2, w2, 32 + strh w2, [x1,1012] +.L2320: + add x22, x22, :lo12:.LANCHOR2 + ldr w0, [x22,400] + tbz x0, 8, .L2326 + adrp x0, .LC192 + mov w1, w19 + add x0, x0, :lo12:.LC192 + mov w2, w27 + mov w3, w28 + bl printk +.L2326: + mov w0, w19 +.L2298: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 128 + ret + .size gc_search_src_blk, .-gc_search_src_blk + .align 2 + .global zftl_read + .type zftl_read, %function +zftl_read: + stp x29, x30, [sp, -176]! + add x29, sp, 0 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x27, x28, [sp,80] + mov w26, w2 + mov x23, x3 + cbnz w0, .L2362 + adrp x0, .LANCHOR0+4 + ldr w2, [x0,#:lo12:.LANCHOR0+4] + mov w0, 24576 + b .L2363 +.L2362: + cmp w0, 3 + bhi .L2389 + lsl w0, w0, 13 + mov w2, 8192 +.L2363: + add w3, w1, w26 + cmp w3, w2 + bhi .L2389 + adrp x22, .LANCHOR0 + add w24, w0, w1 + add x1, x22, :lo12:.LANCHOR0 + add w28, w24, w26 + str wzr, [x29,152] + ldr x2, [x1,2800] + ldr w0, [x2,24] + add w0, w0, w26 + str w0, [x2,24] + ldrb w0, [x1,2776] + sub w1, w28, #1 + udiv w27, w24, w0 + mov w21, w27 + udiv w0, w1, w0 + str w0, [x29,148] + sub w25, w0, w27 + add w0, w25, 1 + str w0, [x29,156] + uxth w0, w26 + str w0, [x29,144] + adrp x0, .LC178 + add x0, x0, :lo12:.LC178 + str x0, [x29,136] + adrp x0, .LC193 + add x0, x0, :lo12:.LC193 + str x0, [x29,128] +.L2365: + ldr w0, [x29,156] + cbz w0, .L2406 + add x0, x22, :lo12:.LANCHOR0 + ldr w1, [x29,148] + cmp w21, w27 + cset w2, eq + cmp w21, w1 + ldrb w0, [x0,2776] + cset w20, eq + uxth w19, w0 + cbnz w20, .L2392 + cbz w2, .L2366 + b .L2405 +.L2392: + cbz w2, .L2368 +.L2405: + udiv w20, w24, w0 + msub w20, w20, w0, w24 + ldr w0, [x29,144] + uxth w20, w20 + sub w19, w19, w20 + uxth w19, w19 + cmp w19, w26 + csel w19, w0, w19, hi + b .L2366 +.L2368: + msub w19, w0, w21, w28 + mov w20, w2 + uxtb w19, w19 +.L2366: + add x1, x22, :lo12:.LANCHOR0 + mov w0, 0 + add x1, x1, 728 +.L2371: + ldr w2, [x1,36] + cmp w2, w21 + bne .L2369 + ldrb w2, [x1,2] + tbz x2, 3, .L2369 + add x2, x22, :lo12:.LANCHOR0 + ubfiz x1, x0, 6, 32 + add x0, x2, x1 + ubfiz x20, x20, 9, 16 + lsl w2, w19, 9 + ubfiz x19, x19, 9, 16 + ldr x1, [x0,736] + mov x0, x23 + add x23, x23, x19 + add x1, x1, x20 + bl ftl_memcpy + b .L2370 +.L2369: + add w0, w0, 1 + add x1, x1, 64 + cmp w0, 32 + bne .L2371 + mov w0, w21 + bl lpa_hash_get_ppa + str w0, [x29,172] + cmn w0, #1 + bne .L2372 + mov w0, w21 + add x1, x29, 172 + mov w2, 0 + bl pm_log2phys +.L2372: + ldr w0, [x29,172] + cmn w0, #1 + bne .L2373 + mov w19, 0 +.L2374: + add x0, x22, :lo12:.LANCHOR0 + ldrb w0, [x0,2776] + cmp w19, w0 + bcs .L2370 + madd w0, w21, w0, w19 + cmp w0, w24 + bcc .L2375 + cmp w0, w28 + bcs .L2375 + mov x0, x23 + mov w1, 0 + mov w2, 512 + add x23, x23, 512 + bl ftl_memset +.L2375: + add w19, w19, 1 + b .L2374 +.L2373: + mov w0, 0 + bl buf_alloc + mov x25, x0 + cbnz x0, .L2377 + bl ftl_read_ahead + b .L2365 +.L2377: + add x1, x22, :lo12:.LANCHOR0 + ldr x2, [x1,2800] + ldr w0, [x2,40] + add w0, w0, 1 + str w0, [x2,40] + ldr w0, [x29,172] + str w0, [x25,40] + str w0, [x25,44] + ldrb w0, [x1,2776] + cmp w0, w19 + bne .L2379 + str x23, [x25,16] +.L2379: + mov x0, x25 + mov w1, 1 + bl sblk_read_page + ldr w9, [x25,52] + cmn w9, #1 + bne .L2380 + add x0, x22, :lo12:.LANCHOR0 + str w9, [x29,152] + ldr x1, [x0,2792] + ldr w0, [x1,552] + add w0, w0, 1 + str w0, [x1,552] + b .L2381 +.L2380: + cmp w9, 256 + bne .L2381 + add x1, x22, :lo12:.LANCHOR0 + mov w2, 21 + mov w5, 1 + ldr w0, [x29,172] + ldr w3, [x25,40] + ldrh w4, [x1,3218] + str x9, [x29,104] + sub w2, w2, w4 + lsr w4, w0, w4 + lsl w2, w5, w2 + ldrb w0, [x1,3216] + sub w2, w2, #1 + str x5, [x29,112] + and w4, w2, w4 + ldr w2, [x25,36] + udiv w4, w4, w0 + ldr x0, [x29,128] + str x4, [x29,120] + uxth w1, w4 + bl printk + ldr x4, [x29,120] + mov w2, 0 + ldr x5, [x29,112] + mov w0, w4 + mov w1, w5 + bl gc_add_sblk + ldr x9, [x29,104] +.L2381: + ldr x7, [x25,24] + ldr w5, [x7,4] + cmp w5, w21 + beq .L2382 + ldr w4, [x7] + mov w2, w21 + ldr w6, [x7,8] + ldrb w1, [x25,1] + ldr w3, [x29,172] + ldr w7, [x7,12] + ldr x0, [x29,136] + str x9, [x29,120] + bl printk + add x3, x22, :lo12:.LANCHOR0 + mov w2, 21 + mov w1, 1 + ldrh w0, [x3,3218] + sub w2, w2, w0 + lsl w2, w1, w2 + ldr w1, [x29,172] + sub w2, w2, #1 + lsr w0, w1, w0 + ldrb w1, [x3,3216] + and w0, w2, w0 + udiv w0, w0, w1 + mov x1, 0 + bl ftl_sblk_dump + ldr x9, [x29,120] +.L2382: + ldr x0, [x25,24] + ldr w0, [x0,4] + cmp w0, w21 + bne .L2393 + cmn w9, #1 + bne .L2383 +.L2393: + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 704 + mov w2, 936 + bl printk +.L2385: + b .L2385 +.L2383: + ldr x0, [x25,16] + cbnz x0, .L2386 + ldr x1, [x25,8] + ubfiz x20, x20, 9, 16 + mov x0, x23 + lsl w2, w19, 9 + add x1, x1, x20 + bl ftl_memcpy +.L2386: + mov x0, x25 + ubfiz x19, x19, 9, 16 + add x23, x23, x19 + bl buf_free +.L2370: + ldr w0, [x29,156] + add w21, w21, 1 + sub w0, w0, #1 + str w0, [x29,156] + b .L2365 +.L2406: + ldr w0, [x29,152] + b .L2364 +.L2389: + mov w0, -1 +.L2364: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 176 + ret + .size zftl_read, .-zftl_read + .align 2 + .global zftl_vendor_read + .type zftl_vendor_read, %function +zftl_vendor_read: + stp x29, x30, [sp, -16]! + mov x3, x2 + add w1, w0, 512 + add x29, sp, 0 + mov w2, 1 + mov w0, 2 + bl zftl_read + ldp x29, x30, [sp], 16 + ret + .size zftl_vendor_read, .-zftl_vendor_read + .align 2 + .global zftl_sys_read + .type zftl_sys_read, %function +zftl_sys_read: + stp x29, x30, [sp, -16]! + mov w1, w0 + mov x3, x2 + add x29, sp, 0 + mov w2, 1 + mov w0, 2 + bl zftl_read + ldp x29, x30, [sp], 16 + ret + .size zftl_sys_read, .-zftl_sys_read + .align 2 + .global vpn_check + .type vpn_check, %function +vpn_check: + stp x29, x30, [sp, -112]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + str x27, [sp,80] + add x20, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + bl timer_get_time + mov w21, w0 + bl dump_ftl_info + adrp x23, .LC197 + ldr x3, [x20,2792] + adrp x0, .LC194 + add x0, x0, :lo12:.LC194 + adrp x24, .LC198 + mov w22, 0 + mov w25, 21 + ldrh w1, [x3,16] + add x23, x23, :lo12:.LC197 + ldrh w2, [x3,48] + add x24, x24, :lo12:.LC198 + ldrh w3, [x3,80] + bl printk + ldr x0, [x20,2792] + ldr x3, [x20,2832] + ldrh w1, [x0,16] + ubfiz x2, x1, 1, 16 + ldrh w3, [x3,x2] + ldrh w2, [x0,22] + adrp x0, .LC195 + add x0, x0, :lo12:.LC195 + sub w4, w3, w2 + bl printk + ldr x0, [x20,2792] + ldr x3, [x20,2832] + adrp x20, .LANCHOR8 + ldrh w1, [x0,48] + ubfiz x2, x1, 1, 16 + ldrh w3, [x3,x2] + ldrh w2, [x0,54] + adrp x0, .LC196 + add x0, x0, :lo12:.LC196 + sub w4, w3, w2 + bl printk + add x0, x20, :lo12:.LANCHOR8 + mov w1, 0 + add x0, x0, 1112 + mov w2, 4352 + bl ftl_memset +.L2410: + add x26, x19, :lo12:.LANCHOR0 + ldr w0, [x26,2784] + cmp w22, w0 + bcs .L2442 + mov w0, w22 + bl lpa_hash_get_ppa + str w0, [x29,108] + cmn w0, #1 + bne .L2411 + mov w0, w22 + add x1, x29, 108 + mov w2, 0 + bl pm_log2phys + b .L2412 +.L2411: + ldrh w1, [x26,3218] + mov w2, 1 + lsr w0, w0, w1 + sub w1, w25, w1 + lsl w1, w2, w1 + sub w1, w1, #1 + and w0, w0, w1 + ldrb w1, [x26,3216] + udiv w0, w0, w1 + ldrh w1, [x26,2826] + cmp w1, w0, uxth + bhi .L2412 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 720 + mov w2, 1150 + bl printk +.L2413: + b .L2413 +.L2412: + ldr w2, [x29,108] + cmn w2, #1 + beq .L2414 + add x26, x19, :lo12:.LANCHOR0 + mov w0, 1 + ldrh w4, [x26,3218] + sub w3, w25, w4 + lsr w4, w2, w4 + lsl w3, w0, w3 + ldrh w0, [x26,2826] + sub w3, w3, #1 + and w4, w3, w4 + ldrb w3, [x26,3216] + udiv w3, w4, w3 + uxth w27, w3 + and w3, w3, 65535 + cmp w0, w27 + bls .L2415 + add x0, x20, :lo12:.LANCHOR8 + add x0, x0, 1112 + ldrh w1, [x0,w3,sxtw 1] + add w1, w1, 1 + strh w1, [x0,w3,sxtw 1] + b .L2416 +.L2415: + mov w1, w22 + mov x0, x23 + bl printk + ldrb w3, [x26,2776] + mov x0, x24 + ldr x1, [x26,3792] + mov w2, 4 + lsl w3, w3, 7 + bl rknand_print_hex +.L2416: + add x0, x19, :lo12:.LANCHOR0 + ldrh w0, [x0,2826] + cmp w0, w27 + bhi .L2414 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 720 + mov w2, 1160 + bl printk +.L2417: + b .L2417 +.L2414: + bl timer_get_time + sub w1, w0, w21 + cmp w1, 6 + add w22, w22, 1 + csel w21, w21, w0, cc + b .L2410 +.L2442: + adrp x23, .LC199 + mov w22, 0 + add x24, x20, :lo12:.LANCHOR8 + add x23, x23, :lo12:.LC199 +.L2420: + add x4, x19, :lo12:.LANCHOR0 + ldrh w0, [x4,2826] + cmp w0, w22 + bls .L2443 + ldr x0, [x4,2832] + uxtw x1, w22 + ldrh w3, [x0,x1,lsl 1] + add x0, x24, 1112 + ldrh w2, [x0,w22,sxtw 1] + cmp w3, w2 + beq .L2421 + ldr x0, [x4,2840] + add x1, x0, x1, lsl 2 + mov x0, x23 + ldrb w4, [x1,2] + mov w1, w22 + ubfx x4, x4, 5, 3 + bl printk +.L2421: + add w22, w22, 1 + uxth w22, w22 + b .L2420 +.L2443: + adrp x23, .LC200 + mov w22, 0 + add x20, x20, :lo12:.LANCHOR8 + add x23, x23, :lo12:.LC200 +.L2423: + add x1, x19, :lo12:.LANCHOR0 + ldrh w0, [x1,2826] + cmp w0, w22 + bls .L2444 + uxtw x24, w22 + ldr x0, [x1,2840] + add x0, x0, x24, lsl 2 + ldrb w0, [x0,2] + tst w0, 224 + bne .L2429 + add x0, x20, 1112 + sxtw x26, w22 + ldrh w0, [x0,w22,sxtw 1] + cbnz w0, .L2425 + lsl x25, x24, 1 + ldr x0, [x1,2832] + ldrh w0, [x0,x25] + cbz w0, .L2426 + mov x0, x23 + mov w1, w22 + bl printk +.L2426: + add x0, x19, :lo12:.LANCHOR0 + ldr x0, [x0,2832] + strh wzr, [x0,x25] +.L2425: + add x0, x19, :lo12:.LANCHOR0 + ldr x0, [x0,2832] + ldrh w0, [x0,x24,lsl 1] + cbz w0, .L2429 + add x0, x20, 1112 + ldrh w0, [x0,x26,lsl 1] + cbz w0, .L2429 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 720 + mov w2, 1192 + bl printk +.L2427: + b .L2427 +.L2429: + add w22, w22, 1 + uxth w22, w22 + b .L2423 +.L2444: + bl timer_get_time + sub w2, w0, w21 + adrp x1, .LANCHOR3 + adrp x0, .LC201 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC201 + add x1, x1, 720 + bl printk + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 112 + ret + .size vpn_check, .-vpn_check + .align 2 + .global ftl_info_check + .type ftl_info_check, %function +ftl_info_check: + stp x29, x30, [sp, -112]! + mov w1, 1 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR0 + add x19, x20, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + adrp x21, .LANCHOR7 + adrp x27, .LC202 + add x21, x21, :lo12:.LANCHOR7 + ldrh w2, [x19,2826] + add x0, x21, 3160 + add x27, x27, :lo12:.LC202 + bl ftl_memset + str x21, [x29,104] + ldr x0, [x19,2800] + mov w19, 0 + mov w25, w19 + mov w26, w19 + mov w22, w19 + mov w23, w19 + ldrh w28, [x0,134] + mov w24, w19 +.L2446: + add x5, x20, :lo12:.LANCHOR0 + ldrh w0, [x5,2826] + cmp w0, w28 + bls .L2488 + uxtw x21, w28 + ldr x4, [x5,2840] + add x4, x4, x21, lsl 2 + ldrb w6, [x4,3] + cbz w6, .L2447 + mov w0, 0 + ldrb w2, [x5,3212] + mov w5, w0 +.L2448: + cmp w5, w2 + bge .L2489 + asr w1, w6, w5 + add w5, w5, 1 + and w1, w1, 1 + eor w1, w1, 1 + add w0, w0, w1 + b .L2448 +.L2489: + cbz w0, .L2451 + ldr x1, [x29,104] + sdiv w0, w2, w0 + add x1, x1, 3160 + strb w0, [x1,w28,sxtw] + b .L2447 +.L2451: + ldrb w0, [x4,2] + mov w1, -1 + orr w0, w0, -32 + strb w0, [x4,2] + add x0, x20, :lo12:.LANCHOR0 + ldr x0, [x0,2832] + strh w1, [x0,x21,lsl 1] +.L2447: + ldrb w0, [x4,2] + and w1, w0, 224 + cmp w1, 64 + bne .L2452 + add w24, w24, 1 + uxth w24, w24 + b .L2487 +.L2452: + cmp w1, 96 + bne .L2455 + add w22, w22, 1 + uxth w22, w22 +.L2487: + add x1, x20, :lo12:.LANCHOR0 + ldr x0, [x1,2832] + ldrh w2, [x0,x21,lsl 1] + cmp w2, 15 + bls .L2458 + ldrh w0, [x1,3234] + b .L2484 +.L2455: + cmp w1, 160 + bne .L2457 + add x1, x20, :lo12:.LANCHOR0 + add w23, w23, 1 + uxth w23, w23 + ldr x0, [x1,2832] + ldrh w2, [x0,x21,lsl 1] + cmp w2, 15 + bls .L2458 + ldrh w0, [x1,3210] +.L2484: + ldrb w1, [x1,3212] + mul w0, w0, w1 + cmp w2, w0 + bne .L2454 +.L2458: + mov w0, w28 + mov w1, 1 + mov w2, 0 + bl gc_add_sblk + b .L2454 +.L2457: + cbnz w1, .L2454 + ands w0, w0, 24 + bne .L2459 + add w26, w26, 1 + uxth w26, w26 + b .L2460 +.L2459: + cmp w0, 16 + bne .L2461 + add w25, w25, 1 + uxth w25, w25 + b .L2460 +.L2461: + add w19, w19, 1 + uxth w19, w19 +.L2460: + add x0, x20, :lo12:.LANCHOR0 + lsl x21, x21, 1 + ldr x0, [x0,2832] + ldrh w2, [x0,x21] + cbz w2, .L2462 + mov x0, x27 + mov w1, w28 + str x4, [x29,96] + bl printk + ldr x4, [x29,96] + ldrb w0, [x4,2] + tbz x0, 4, .L2463 + mov w1, 5 + b .L2482 +.L2463: + mov w1, 2 +.L2482: + bfi w0, w1, 5, 3 + mov w2, 0 + strb w0, [x4,2] + mov w1, 1 + mov w0, w28 + bl gc_add_sblk + bl vpn_check +.L2462: + add x0, x20, :lo12:.LANCHOR0 + ldr x0, [x0,2832] + ldrh w0, [x0,x21] + cbz w0, .L2454 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 736 + mov w2, 1267 + bl printk +.L2465: + b .L2465 +.L2454: + add w3, w28, 1 + uxth w28, w3 + b .L2446 +.L2488: + adrp x0, .LC203 + mov w1, w24 + mov w2, w23 + mov w3, w22 + add x0, x0, :lo12:.LC203 + str x5, [x29,104] + bl printk + adrp x0, .LC204 + mov w1, w26 + add x0, x0, :lo12:.LC204 + mov w2, w25 + mov w3, w19 + bl printk + ldr x5, [x29,104] + ldr x0, [x5,2800] + ldrh w1, [x0,114] + cmp w1, w26 + beq .L2467 + strh w26, [x0,114] +.L2467: + ldrh w1, [x0,118] + cmp w1, w25 + beq .L2468 + strh w25, [x0,118] +.L2468: + ldrh w1, [x0,116] + cmp w1, w19 + beq .L2469 + strh w19, [x0,116] +.L2469: + ldrh w1, [x0,122] + cmp w1, w24 + beq .L2470 + strh w24, [x0,122] +.L2470: + ldrh w1, [x0,120] + cmp w1, w23 + beq .L2471 + strh w23, [x0,120] +.L2471: + ldrh w1, [x0,124] + cmp w1, w22 + beq .L2445 + strh w22, [x0,124] +.L2445: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size ftl_info_check, .-ftl_info_check + .align 2 + .global gc_scan_src_blk + .type gc_scan_src_blk, %function +gc_scan_src_blk: + stp x29, x30, [sp, -96]! + mov w2, 65535 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + add x0, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + ldrh w1, [x0,2848] + cmp w1, w2 + bne .L2491 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 752 + mov w2, 883 + bl printk +.L2492: + b .L2492 +.L2491: + adrp x2, .LANCHOR2+400 + ldr w2, [x2,#:lo12:.LANCHOR2+400] + tbz x2, 8, .L2493 + ldr x3, [x0,2832] + ubfiz x2, x1, 1, 16 + adrp x0, .LC205 + add x0, x0, :lo12:.LC205 + ldrh w2, [x3,x2] + bl printk +.L2493: + add x20, x19, :lo12:.LANCHOR0 + bl timer_get_time + add x21, x20, 2848 + add x1, x20, 2888 + ldrh w0, [x20,2848] + bl ftl_get_blk_list_in_sblk + uxtb w1, w0 + strb w1, [x21,5] + cbnz w1, .L2494 + mov w0, -1 + strh w0, [x20,2848] + b .L2522 +.L2494: + ldrh w1, [x20,2848] + ldr x2, [x20,2840] + add x2, x2, x1, lsl 2 + ldrb w4, [x2,2] + tst w4, 192 + and w2, w4, 224 + beq .L2496 + cmp w2, 224 + beq .L2496 + ldr x4, [x20,2792] + ldrh w5, [x4,16] + cmp w5, w1 + beq .L2496 + ldrh w5, [x4,48] + cmp w5, w1 + beq .L2496 + ldrh w4, [x4,80] + cmp w4, w1 + bne .L2497 +.L2496: + cbnz w2, .L2498 + add x3, x19, :lo12:.LANCHOR0 + lsl x0, x1, 1 + ldr x1, [x3,2832] + ldrh w3, [x1,x0] + cbz w3, .L2499 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 752 + mov w2, 903 + bl printk +.L2500: + b .L2500 +.L2499: + strh w2, [x1,x0] +.L2498: + add x19, x19, :lo12:.LANCHOR0 + mov w0, -1 + strh wzr, [x19,2872] + strh w0, [x19,2848] +.L2522: + mov w0, 0 + b .L2495 +.L2497: + and w0, w0, 255 + sub w0, w0, #1 + add x0, x21, x0, sxtw 1 + ldrh w1, [x0,40] + mov w0, 65535 + cmp w1, w0 + bne .L2501 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 752 + mov w2, 911 + bl printk +.L2502: + b .L2502 +.L2501: + ldrh w0, [x20,3234] + cmp w2, 160 + ldrh w3, [x20,3230] + mov w24, 1 + sub w0, w0, #1 + mul w1, w1, w3 + uxth w0, w0 + bne .L2503 + ldrb w2, [x20,3193] + cmp w2, 2 + uxth w24, w2 + orr w1, w1, w2, lsl 24 + bne .L2503 + ldrh w0, [x20,3210] + sub w0, w0, #1 + uxth w0, w0 +.L2503: + add x20, x19, :lo12:.LANCHOR0 + orr w23, w0, w1 + mov w0, 1 + strb w24, [x20,2854] + strh wzr, [x20,2850] + strb wzr, [x20,2852] + strh wzr, [x20,2874] + bl buf_alloc + mov w1, 1 + str w23, [x0,40] + mov x21, x0 + bl sblk_read_page + ldrh w0, [x20,3210] + mov w1, 255 + ldrb w2, [x20,3212] + mul w2, w0, w2 + ldr x0, [x20,3184] + lsl w2, w2, 2 + bl ftl_memset + strh wzr, [x20,2872] + ldr w0, [x21,52] + cmp w0, 512 + beq .L2507 + cmn w0, #1 + beq .L2507 + ldr x0, [x21,24] + ldr w1, [x0] + mov w0, 15555 + movk w0, 0xf55f, lsl 16 + cmp w1, w0 + beq .L2506 + ldrh w0, [x20,2848] + mov x1, 0 + bl ftl_sblk_dump + ldr x0, [x21,24] + ldr w1, [x0] + mov w0, 15555 + movk w0, 0xf55f, lsl 16 + cmp w1, w0 + beq .L2507 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 752 + mov w2, 941 + bl printk +.L2508: + b .L2508 +.L2507: + mov x0, x21 + bl buf_free + mov w0, -1 + b .L2495 +.L2506: + ldrb w0, [x20,3212] + mov x26, 0 + ldrh w22, [x20,3234] + mov w25, 1 + ldr x23, [x21,8] + mul w22, w0, w22 + mul w22, w24, w22 + mov w24, 21 + uxth w22, w22 +.L2509: + cmp w22, w26 + ble .L2523 + ldr w0, [x23,x26,lsl 2] + cmn w0, #1 + beq .L2511 + bl lpa_hash_get_ppa + str w0, [x29,92] + cmn w0, #1 + bne .L2512 + ldr w0, [x23,x26,lsl 2] + add x1, x29, 92 + mov w2, 0 + bl pm_log2phys +.L2512: + ldrh w0, [x20,3218] + ldr w2, [x29,92] + sub w1, w24, w0 + ldrh w3, [x20,2848] + lsl w1, w25, w1 + lsr w0, w2, w0 + sub w1, w1, #1 + and w0, w1, w0 + ldrb w1, [x20,3216] + udiv w0, w0, w1 + cmp w0, w3 + bne .L2511 + ldrh w3, [x20,2872] + ldr x0, [x20,3184] + str w2, [x0,x3,lsl 2] + ldrh w0, [x20,2872] + add w0, w0, 1 + strh w0, [x20,2872] +.L2511: + bl timer_get_time + add x26, x26, 1 + b .L2509 +.L2523: + mov x0, x21 + bl buf_free + add x0, x19, :lo12:.LANCHOR0 + ldrh w1, [x0,2848] + ldr x3, [x0,2832] + ubfiz x2, x1, 1, 16 + ldrh w2, [x3,x2] + ldrh w3, [x0,2872] + cmp w2, w3 + beq .L2515 + adrp x0, .LC206 + add x0, x0, :lo12:.LC206 + bl printk +.L2515: + add x0, x19, :lo12:.LANCHOR0 + ldrh w2, [x0,2848] + ldr x1, [x0,2832] + ldrh w0, [x0,2872] + ldrh w1, [x1,x2,lsl 1] + cmp w1, w0 + bcs .L2516 + bl vpn_check +.L2516: + add x19, x19, :lo12:.LANCHOR0 + ldrh w2, [x19,2848] + ldr x1, [x19,2832] + ldrh w3, [x19,2872] + strh w3, [x1,x2,lsl 1] + strh wzr, [x19,2876] + ldrh w0, [x19,2872] +.L2495: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 96 + ret + .size gc_scan_src_blk, .-gc_scan_src_blk + .align 2 + .global ftl_scan_all_data + .type ftl_scan_all_data, %function +ftl_scan_all_data: + sub sp, sp, #144 + mov w0, 0 + stp x29, x30, [sp,16] + add x29, sp, 16 + stp x19, x20, [sp,32] + stp x23, x24, [sp,64] + stp x25, x26, [sp,80] + stp x27, x28, [sp,96] + stp x21, x22, [sp,48] + bl buf_alloc + adrp x24, .LC208 + mov x19, x0 + adrp x25, .LC209 + adrp x0, .LC207 + mov w1, 0 + add x0, x0, :lo12:.LC207 + mov w20, 0 + add x24, x24, :lo12:.LC208 + add x27, x25, :lo12:.LC209 + bl printk +.L2525: + adrp x21, .LANCHOR0 + add x0, x21, :lo12:.LANCHOR0 + ldr w0, [x0,2784] + cmp w20, w0 + bcs .L2548 + mov w0, -1 + str w0, [x19,36] + and w0, w20, 4095 + cbnz w0, .L2526 + ldr w2, [x29,124] + mov x0, x24 + mov w1, w20 + bl printk +.L2526: + mov w0, w20 + bl lpa_hash_get_ppa + str w0, [x29,124] + cmn w0, #1 + bne .L2527 + mov w0, w20 + add x1, x29, 124 + mov w2, 0 + bl pm_log2phys +.L2527: + ldr w0, [x29,124] + str w0, [x19,40] + str w0, [x19,44] + cmn w0, #1 + beq .L2529 + mov x0, x19 + mov w1, 1 + bl sblk_read_page + ldr w3, [x19,52] + cmn w3, #1 + beq .L2530 + cmp w3, 256 + beq .L2530 + ldr x0, [x19,24] + ldr w0, [x0,4] + cmp w0, w20 + beq .L2529 +.L2530: + ldr x0, [x19,8] + add x23, x25, :lo12:.LC209 + ldr x7, [x19,24] + adrp x26, .LC210 + ldr w1, [x0] + str w1, [sp] + mov w1, w20 + ldr w0, [x0,4] + str w0, [sp,8] + mov x0, x23 + ldr w4, [x7] + ldr w5, [x7,4] + ldr w6, [x7,8] + ldr w2, [x19,40] + ldr w7, [x7,12] + bl printk + ldr x0, [x19,24] + ldr w22, [x0,4] + ldr w0, [x0,8] + cmn w0, #1 + bne .L2532 +.L2534: + add x21, x21, :lo12:.LANCHOR0 + mov w0, w20 + bl lpa_hash_get_ppa + mov w4, w0 + ldrb w22, [x21,2776] + add x0, x26, :lo12:.LC210 + mov w1, w20 + adrp x26, .LC212 + lsl w28, w22, 7 + lsl w3, w22, 7 + sub w3, w3, #1 + mov x22, 0 + sdiv w28, w20, w28 + and w3, w20, w3 + add x21, x21, 3784 + add x26, x26, :lo12:.LC212 + uxth w3, w3 + uxth w23, w28 + mov w2, w23 + bl printk + mov w0, w20 + add x1, x29, 124 + mov w2, 0 + bl pm_log2phys + b .L2533 +.L2532: + add x1, x21, :lo12:.LANCHOR0 + ldr w1, [x1,2784] + cmp w22, w1 + bcs .L2534 + str w0, [x19,40] + mov w1, 1 + mov x0, x19 + bl sblk_read_page + ldr x0, [x19,8] + ldr x7, [x19,24] + ldr w1, [x0] + str w1, [sp] + mov w1, w20 + ldr w0, [x0,4] + str w0, [sp,8] + mov x0, x23 + ldr w4, [x7] + ldr w5, [x7,4] + ldr w6, [x7,8] + ldr w2, [x19,40] + ldr w3, [x19,52] + ldr w7, [x7,12] + bl printk + mov w0, w22 + bl lpa_hash_get_ppa + str w0, [x29,124] + cmn w0, #1 + bne .L2535 + mov w0, w22 + add x1, x29, 124 + mov w2, 0 + bl pm_log2phys +.L2535: + ldr w0, [x29,124] + mov w1, 1 + str w0, [x19,40] + mov x0, x19 + bl sblk_read_page + ldr x0, [x19,8] + ldr x7, [x19,24] + ldr w1, [x0] + str w1, [sp] + mov w1, w22 + ldr w0, [x0,4] + str w0, [sp,8] + mov x0, x27 + ldr w6, [x7,8] + ldr w4, [x7] + ldr w3, [x19,52] + ldr w5, [x7,4] + ldr w2, [x19,40] + ldr w7, [x7,12] + bl printk + add x5, x21, :lo12:.LANCHOR0 + mov w0, w22 + str x5, [x29,96] + ldrb w23, [x5,2776] + lsl w2, w23, 7 + udiv w2, w22, w2 + str x2, [x29,104] + uxth w28, w2 + bl lpa_hash_get_ppa + lsl w3, w23, 7 + ldr x2, [x29,104] + sub w3, w3, #1 + mov w4, w0 + and w3, w3, w22 + mov w1, w22 + uxth w2, w2 + add x0, x26, :lo12:.LC210 + uxth w3, w3 + bl printk + mov w0, w22 + add x1, x29, 124 + mov w2, 0 + mov x22, 0 + bl pm_log2phys + ldr x5, [x29,96] + adrp x4, .LC211 + add x4, x4, :lo12:.LC211 + add x23, x5, 3784 +.L2537: + add x0, x23, x22 + ldr x1, [x0,8] + cbz x1, .L2536 + ldrh w0, [x22,x23] + cmp w0, w28 + bne .L2536 + mov x0, x4 + mov w2, 4 + mov w3, 4096 + str x4, [x29,104] + bl rknand_print_hex + ldr x4, [x29,104] +.L2536: + add x22, x22, 16 + cmp x22, 512 + bne .L2537 + b .L2534 +.L2549: + ldrh w0, [x22,x21] + cmp w0, w23 + bne .L2538 + mov x0, x26 + mov w2, 4 + mov w3, 4096 + bl rknand_print_hex +.L2538: + add x22, x22, 16 + cmp x22, 512 + beq .L2529 +.L2533: + add x0, x21, x22 + ldr x1, [x0,8] + cbnz x1, .L2549 + b .L2538 +.L2529: + add w20, w20, 1 + b .L2525 +.L2548: + mov x0, x19 + bl buf_free + sub sp, x29, #16 + ldp x19, x20, [sp,32] + ldp x21, x22, [sp,48] + ldp x23, x24, [sp,64] + ldp x25, x26, [sp,80] + ldp x27, x28, [sp,96] + ldp x29, x30, [sp,16] + add sp, sp, 144 + ret + .size ftl_scan_all_data, .-ftl_scan_all_data + .align 2 + .global gc_recovery + .type gc_recovery, %function +gc_recovery: + sub sp, sp, #208 + stp x29, x30, [sp,32] + add x29, sp, 32 + stp x19, x20, [sp,48] + adrp x19, .LANCHOR0 + stp x23, x24, [sp,80] + add x24, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,64] + stp x25, x26, [sp,96] + stp x27, x28, [sp,112] + adrp x22, .LANCHOR4 + strb wzr, [x24,3209] + add x0, x22, :lo12:.LANCHOR4 + ldr x20, [x24,2792] + add x21, x20, 80 + strb wzr, [x0,1010] + bl gc_init + ldrh w1, [x20,80] + mov w0, 65535 + str x22, [x29,152] + cmp w1, w0 + ldr x0, [x24,2792] + beq .L2551 + mov w1, -1 + strh w1, [x0,130] + mov w0, 1 + bl buf_alloc + mov x23, x0 + ldrb w0, [x21,9] + ldrh w1, [x24,3230] + sub w0, w0, #1 + add x0, x21, x0, sxtw 1 + ldrh w0, [x0,16] + mul w0, w0, w1 + ldrb w1, [x24,3193] + str w0, [x29,168] + cmp w1, 3 + bne .L2552 + ldrh w1, [x24,3234] + sub w1, w1, #1 + add w0, w1, w0 + orr w0, w0, 50331648 + b .L2598 +.L2552: + cmp w1, 2 + bne .L2553 + ldrh w1, [x24,3234] + add w0, w0, w1, lsl 1 + sub w0, w0, #1 + orr w0, w0, 33554432 +.L2598: + str w0, [x23,40] +.L2553: + mov x0, x23 + mov w1, 1 + bl sblk_read_page + ldr w0, [x23,52] + cmp w0, 512 + beq .L2554 + cmn w0, #1 + beq .L2554 + ldr x0, [x23,24] + ldr w1, [x0] + mov w0, 15555 + movk w0, 0xf55f, lsl 16 + cmp w1, w0 + beq .L2555 +.L2554: + mov x0, x23 + bl buf_free + ldr x7, [x23,24] + ldr x6, [x23,8] + ldr w0, [x7,4] + str w0, [sp] + ldr w0, [x7,8] + str w0, [sp,8] + ldr w0, [x7,12] + str w0, [sp,16] + adrp x0, .LC213 + add x0, x0, :lo12:.LC213 + ldr w3, [x6] + ldr w4, [x6,4] + ldr w5, [x6,8] + ldr w1, [x23,40] + ldr w2, [x23,52] + ldr w6, [x6,12] + ldr w7, [x7] + bl printk + b .L2601 +.L2555: + add x24, x19, :lo12:.LANCHOR0 + ldr x0, [x29,152] + ldr x1, [x23,8] + add x25, x0, :lo12:.LANCHOR4 + ldrb w2, [x24,3212] + ldrh w0, [x24,3210] + mul w2, w0, w2 + ldr x0, [x25,1016] + lsl w2, w2, 2 + bl ftl_memcpy + ldrh w0, [x24,3210] + ldrb w2, [x24,3212] + ldr x1, [x23,8] + mul w2, w0, w2 + add x1, x1, x2, sxtw 2 + ldr x0, [x25,1024] + lsl w2, w2, 2 + bl ftl_memcpy + ldrh w4, [x24,3210] + adrp x0, .LC214 + ldrb w3, [x24,3212] + add x0, x0, :lo12:.LC214 + ldr x1, [x25,1016] + mov w2, 4 + mul w3, w4, w3 + bl rknand_print_hex + ldrh w4, [x24,3210] + adrp x0, .LC215 + ldrb w3, [x24,3212] + add x0, x0, :lo12:.LC215 + ldr x1, [x25,1024] + mov w2, 4 + mul w3, w4, w3 + bl rknand_print_hex + ldrb w27, [x24,3193] + ldrh w26, [x24,3234] + cmp w27, 2 + bne .L2557 + lsl w26, w26, 1 + mov w27, 1 +.L2557: + mov w22, 0 + adrp x24, .LC216 + add x0, x24, :lo12:.LC216 + mov w25, w22 + str x0, [x29,128] + b .L2558 +.L2603: + ldr x0, [x0,1024] + ldr w1, [x0,x12] + ldr w0, [x7,8] + cmp w1, w0 + bne .L2562 +.L2587: + add w25, w25, 1 + add w28, w28, 1 +.L2566: + cmp w28, w27 + bhi .L2602 + ldr x0, [x29,144] + add x1, x19, :lo12:.LANCHOR0 + add x0, x0, 8 + ldrh w2, [x1,3230] + ldrb w1, [x1,3193] + ldrh w0, [x21,x0,lsl 1] + cmp w1, 3 + mul w0, w0, w2 + str w0, [x29,168] + bne .L2559 + add w0, w0, w22 + orr w0, w0, w28, lsl 24 +.L2599: + str w0, [x23,40] + mov w1, 1 + mov x0, x23 + bl sblk_read_page + ldr x0, [x29,152] + sbfiz x12, x25, 2, 32 + ldr x7, [x23,24] + add x0, x0, :lo12:.LANCHOR4 + ldr w6, [x7,4] + ldr x1, [x0,1016] + ldr w3, [x1,x12] + cmp w3, w6 + beq .L2603 +.L2562: + ldr x0, [x29,152] + str x12, [x29,120] + add x13, x0, :lo12:.LANCHOR4 + ldr w0, [x7,12] + str x13, [x29,112] + ldr x4, [x13,1024] + str w0, [sp] + ldr x0, [x29,128] + ldr w4, [x4,x12] + ldr w5, [x7] + ldr w1, [x23,40] + ldr w2, [x23,52] + ldr w7, [x7,8] + bl printk + ldr x13, [x29,112] + ldr x12, [x29,120] + ldr x0, [x13,1016] + ldr w0, [x0,x12] + cmn w0, #1 + beq .L2587 + mov x0, x23 + bl buf_free +.L2601: + add x0, x19, :lo12:.LANCHOR0 + ldrh w2, [x20,80] + mov w28, 0 + ldr x1, [x0,2832] + strh wzr, [x1,x2,lsl 1] + ldr x0, [x0,2792] + ldrh w1, [x20,80] + strh w1, [x0,130] + b .L2556 +.L2565: + add w22, w22, 1 +.L2558: + cmp w22, w26 + beq .L2567 + sub w0, w22, #1 + mov w24, 0 + str w0, [x29,140] +.L2568: + ldrb w0, [x21,9] + cmp w24, w0 + bge .L2565 + sxtw x0, w24 + mov w28, 1 + str x0, [x29,144] + b .L2566 +.L2559: + cmp w1, 2 + bne .L2561 + ldr w1, [x29,140] + add w0, w0, w1 + add w0, w0, w28 + orr w0, w0, 33554432 + b .L2599 +.L2561: + add w0, w0, w22 + b .L2599 +.L2602: + add w24, w24, 1 + b .L2568 +.L2567: + mov x0, x23 + mov w28, 0 + mov w23, w28 + bl buf_free + str w28, [x29,144] + add x0, x19, :lo12:.LANCHOR0 + ldrb w1, [x21,9] + ldrh w3, [x20,80] + ldr x2, [x0,2832] + ldrh w0, [x0,3210] + mul w0, w1, w0 + strh w0, [x2,x3,lsl 1] + adrp x0, .LC217 + add x0, x0, :lo12:.LC217 + str x0, [x29,104] +.L2569: + cmp w23, w26 + beq .L2582 + sub w0, w23, #1 + mov w25, 0 + str w0, [x29,112] +.L2583: + ldrb w0, [x21,9] + cmp w25, w0 + bge .L2580 + sxtw x0, w25 + mov w24, 1 + str x0, [x29,120] +.L2581: + cmp w24, w27 + bhi .L2604 + ldr x1, [x29,152] + ldr w0, [x29,144] + add x1, x1, :lo12:.LANCHOR4 + sbfiz x0, x0, 2, 32 + ldr x2, [x1,1016] + ldr w22, [x2,x0] + cmn w22, #1 + beq .L2570 + ldr x1, [x1,1024] + ldr w0, [x1,x0] + str w0, [x29,140] + mov w0, w22 + bl lpa_hash_get_ppa + str w0, [x29,172] + cmn w0, #1 + bne .L2571 + mov w0, w22 + add x1, x29, 172 + mov w2, 0 + bl pm_log2phys +.L2571: + ldr x0, [x29,120] + add x0, x0, 8 + ldrh w3, [x21,x0,lsl 1] + add x0, x19, :lo12:.LANCHOR0 + ldrh w1, [x0,3230] + ldrb w0, [x0,3193] + cmp w0, 3 + mul w3, w3, w1 + bne .L2572 + add w3, w3, w23 + orr w3, w3, w24, lsl 24 + b .L2600 +.L2572: + cmp w0, 2 + bne .L2574 + ldr w0, [x29,112] + add w3, w3, w0 + add w3, w3, w24 + orr w3, w3, 33554432 + b .L2600 +.L2574: + add w3, w3, w23 +.L2600: + add x0, x19, :lo12:.LANCHOR0 + str w3, [x29,168] + ldr w1, [x29,140] + mov w4, 21 + mov w2, 1 + ldrh w3, [x0,3218] + ldrb w0, [x0,3216] + lsr w1, w1, w3 + sub w3, w4, w3 + lsl w3, w2, w3 + sub w3, w3, #1 + and w3, w1, w3 + ldr w1, [x29,140] + udiv w3, w3, w0 + uxth w0, w3 + str w0, [x29,128] + ldr w0, [x29,172] + cmp w0, w1 + bne .L2575 + ldr x0, [x29,104] + mov w1, w22 + ldr w2, [x29,168] + bl pm_ppa_update_check + cbz w0, .L2576 +.L2597: + b .L2597 +.L2576: + mov w0, w22 + add x1, x29, 168 + mov w2, 1 + add w28, w28, 1 + bl pm_log2phys + ldrh w0, [x29,128] + bl ftl_vpn_decrement + b .L2578 +.L2575: + ldr w1, [x29,168] + cmp w0, w1 + csinc w28, w28, w28, ne +.L2578: + ldr w0, [x29,144] + add x2, x19, :lo12:.LANCHOR0 + add w0, w0, 1 + str w0, [x29,144] + ldr w0, [x29,128] + ldr x1, [x2,2840] + add x1, x1, x0, lsl 2 + ldrb w1, [x1,2] + ands w1, w1, 224 + bne .L2570 + lsl x0, x0, 1 + ldr x2, [x2,2832] + ldrh w3, [x2,x0] + cbz w3, .L2570 + strh w1, [x2,x0] +.L2570: + add w24, w24, 1 + b .L2581 +.L2604: + add w25, w25, 1 + b .L2583 +.L2580: + add w23, w23, 1 + b .L2569 +.L2582: + add x0, x19, :lo12:.LANCHOR0 + ldrh w1, [x20,80] + ldr x0, [x0,2832] + strh w28, [x0,x1,lsl 1] +.L2556: + ldrh w1, [x20,80] + adrp x0, .LC218 + mov w2, w28 + add x0, x0, :lo12:.LC218 + bl printk + mov w0, -1 + strh w0, [x20,80] + bl pm_flush + bl ftl_ext_info_flush + add x0, x19, :lo12:.LANCHOR0 + mov w1, 65535 + ldr x0, [x0,2792] + ldrh w0, [x0,130] + cmp w0, w1 + beq .L2584 + bl ftl_free_sblk +.L2584: + add x19, x19, :lo12:.LANCHOR0 + mov w0, -1 + ldr x1, [x19,2800] + strh w0, [x1,126] + ldr x1, [x19,2792] + strh w0, [x1,130] + mov w0, 0 + bl ftl_info_flush + b .L2550 +.L2551: + ldrh w0, [x0,130] + cmp w0, w1 + beq .L2550 + ldr x1, [x24,2800] + ldrh w1, [x1,126] + cmp w1, w0 + bne .L2586 + bl pm_flush + ldr x0, [x24,2792] + ldrh w0, [x0,130] + bl ftl_free_sblk + ldr x0, [x24,2800] + mov w1, -1 + strh w1, [x0,126] + mov w0, 0 + bl ftl_info_flush +.L2586: + add x19, x19, :lo12:.LANCHOR0 + mov w1, -1 + ldr x0, [x19,2792] + strh w1, [x0,130] +.L2550: + sub sp, x29, #32 + ldp x19, x20, [sp,48] + ldp x21, x22, [sp,64] + ldp x23, x24, [sp,80] + ldp x25, x26, [sp,96] + ldp x27, x28, [sp,112] + ldp x29, x30, [sp,32] + add sp, sp, 208 + ret + .size gc_recovery, .-gc_recovery + .align 2 + .global zftl_init + .type zftl_init, %function +zftl_init: + stp x29, x30, [sp, -64]! + adrp x1, .LANCHOR5+384 + mov w0, -1 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + str x23, [sp,48] + add x20, x19, :lo12:.LANCHOR0 + strb w0, [x1,#:lo12:.LANCHOR5+384] + stp x21, x22, [sp,32] + adrp x1, .LC47 + strb w0, [x20,2808] + mov w0, -1 + str w0, [x20,2812] + adrp x0, .LC46 + add x1, x1, :lo12:.LC47 + add x0, x0, :lo12:.LC46 + strb wzr, [x20,2809] + strb wzr, [x20,3772] + bl printk + adrp x1, .LANCHOR2 + ldrb w4, [x20,57] + add x1, x1, :lo12:.LANCHOR2 + adrp x8, .LANCHOR7 + strb w4, [x20,3232] + ldrh w5, [x20,170] + ldrb w3, [x1,381] + ldrb w7, [x1,380] + ldrh w2, [x1,378] + strb w3, [x20,3216] + mul w3, w3, w4 + add x4, x8, :lo12:.LANCHOR7 + ldrb w0, [x1,377] + ldrh w9, [x1,382] + mov w1, 0 + sdiv w6, w2, w7 + strb w7, [x20,3193] + strb w0, [x20,2776] + uxtb w3, w3 + strh w2, [x20,3210] + ubfiz w11, w0, 9, 7 + strh w6, [x20,3234] + strb w3, [x20,3212] + strh w9, [x20,2826] + strh w11, [x4,3154] + mov w4, 1 + strh w5, [x20,3230] + mov x20, x8 +.L2606: + cmp w4, w5 + bhi .L2627 + add w1, w1, 1 + lsl w4, w4, 1 + uxth w1, w1 + b .L2606 +.L2627: + add x8, x19, :lo12:.LANCHOR0 + sub w1, w1, #1 + mul w4, w0, w2 + mul w6, w6, w3 + strh w1, [x8,3218] + mov w1, 57344 + movk w1, 0x1c, lsl 16 + adrp x21, .LANCHOR9 + mul w2, w4, w9 + mul w1, w3, w1 + lsr w5, w2, 21 + add x10, x21, :lo12:.LANCHOR9 + mul w2, w2, w3 + mul w1, w1, w5 + str w2, [x8,2780] + cmp w7, 2 + add w5, w1, 24576 + str w1, [x8,4] + mul w3, w4, w3 + udiv w2, w5, w0 + sub w0, w11, #1 + str w2, [x8,2784] + str w5, [x10,1112] + add w0, w0, w2, lsl 2 + add x2, x20, :lo12:.LANCHOR7 + udiv w3, w5, w3 + add w3, w3, 2 + strh w3, [x8,3224] + udiv w0, w0, w11 + strh w0, [x2,3138] + adrp x2, .LANCHOR4 + ubfiz w0, w0, 4, 16 + add x11, x2, :lo12:.LANCHOR4 + mov x22, x2 + sdiv w0, w0, w6 + strh w0, [x11,1040] + add w0, w9, w9, lsl 1 + asr w0, w0, 2 + strh w0, [x8,3226] + lsr w0, w9, 4 + strh w0, [x10,1116] + mov w0, 4000 + strh w0, [x8,3220] + mov w0, 50 + strh w0, [x8,3222] + beq .L2608 + ldrb w0, [x8,3208] + cbz w0, .L2609 +.L2608: + add x0, x19, :lo12:.LANCHOR0 + mov w2, 150 + strh w2, [x0,3222] +.L2609: + adrp x0, .LC219 + add x19, x19, :lo12:.LANCHOR0 + add x0, x0, :lo12:.LC219 + add x21, x21, :lo12:.LANCHOR9 + add x20, x20, :lo12:.LANCHOR7 + adrp x23, .LANCHOR6 + bl printk + add x23, x23, :lo12:.LANCHOR6 + ldr w1, [x19,2780] + adrp x0, .LC220 + add x0, x0, :lo12:.LC220 + bl printk + ldr w1, [x19,2784] + adrp x0, .LC221 + add x0, x0, :lo12:.LC221 + bl printk + ldr w1, [x21,1112] + adrp x0, .LC222 + add x0, x0, :lo12:.LC222 + bl printk + ldrh w1, [x20,3138] + adrp x0, .LC223 + add x0, x0, :lo12:.LC223 + bl printk + ldrh w1, [x20,3154] + adrp x0, .LC224 + add x0, x0, :lo12:.LC224 + bl printk + add x2, x22, :lo12:.LANCHOR4 + adrp x0, .LC225 + add x0, x0, :lo12:.LC225 + ldrh w1, [x2,1040] + bl printk + ldrh w1, [x21,1116] + adrp x0, .LC226 + add x0, x0, :lo12:.LC226 + bl printk + ldrh w1, [x19,3224] + adrp x0, .LC227 + add x0, x0, :lo12:.LC227 + bl printk + bl buf_init + ldrb w1, [x19,3212] + ldrh w0, [x19,3234] + mul w0, w0, w1 + lsl w0, w0, 2 + bl ftl_malloc + str x0, [x19,3760] + ldrb w1, [x19,3212] + sub x2, x23, #192 + ldrh w0, [x19,3234] + str x2, [x19,3752] + mul w1, w0, w1 + ldrh w0, [x19,2826] + lsl w1, w1, 1 + add x3, x2, x1, sxtw 2 + str x3, [x19,2832] + add w1, w1, w0, lsr 1 + adrp x0, .LC228 + add x0, x0, :lo12:.LC228 + add x1, x2, x1, sxtw 2 + str x1, [x19,2792] + bl printk + ldrb w21, [x19,3212] + ldrh w0, [x19,3234] + ldrh w1, [x19,2826] + ldrh w22, [x20,3138] + mul w21, w0, w21 + lsl w22, w22, 2 + adrp x0, .LC229 + add w22, w22, w1, lsl 2 + ldrh w3, [x20,3154] + add w21, w1, w21, lsl 2 + add w22, w22, 704 + lsl w21, w21, 1 + add x0, x0, :lo12:.LC229 + add w21, w21, 612 + mov w2, w22 + mov w1, w21 + bl printk + ldrh w0, [x20,3154] + cmp w21, w0 + bhi .L2611 + cmp w22, w0 + bls .L2610 +.L2611: +.L2612: + b .L2612 +.L2610: + bl sblk_init + bl ftl_info_blk_init + cmn w0, #1 + beq .L2613 + bl ftl_ext_info_init + mov w0, 1 + bl pm_init + bl lpa_rebuild_hash + ldr x0, [x19,2792] + mov x1, 0 + add x0, x0, 16 + bl ftl_open_sblk_recovery + ldr x1, [x19,2792] + add x0, x1, 48 + add x1, x1, 16 + bl ftl_open_sblk_recovery + ldr x1, [x19,2800] + ldr w0, [x1,8] + add w0, w0, 16 + str w0, [x1,8] + ldr x0, [x19,2792] + add x0, x0, 16 + bl ftl_info_data_recovery + ldr x0, [x19,2792] + add x0, x0, 48 + bl ftl_info_data_recovery + ldr x0, [x19,2792] + add x0, x0, 80 + bl ftl_info_data_recovery + bl gc_recovery + bl ftl_info_check + bl pm_flush + mov w0, 1 + bl ftl_total_vpn_update + ldrb w0, [x23,-256] + cbz w0, .L2614 + ldr x1, [x19,2800] + ldr w0, [x1,68] + add w0, w0, 1 + str w0, [x1,68] +.L2614: + bl ftl_ext_info_flush + mov w0, 0 + bl ftl_info_flush + bl print_ftl_debug_info + mov w0, 0 +.L2613: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldr x23, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size zftl_init, .-zftl_init + .align 2 + .global rk_ftl_init + .type rk_ftl_init, %function +rk_ftl_init: + stp x29, x30, [sp, -32]! + adrp x0, jiffies + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR4 + ldr x0, [x0,#:lo12:jiffies] + add x19, x19, :lo12:.LANCHOR4 + str x0, [x19,1048] + mov w0, 136 + bl ftl_malloc + str x0, [x19,1056] + cbnz x0, .L2629 +.L2631: + mov w0, -1 + b .L2630 +.L2629: + adrp x20, .LANCHOR9 + mov w0, 2048 + add x20, x20, :lo12:.LANCHOR9 + bl ftl_malloc + str xzr, [x19,1064] + add x1, x20, 1128 + str x0, [x20,1120] + add x0, x19, 1064 + str xzr, [x20,1128] + bl rknand_get_reg_addr + ldr x0, [x19,1064] + cbz x0, .L2631 + bl rk_nandc_irq_init + mov w1, 0 + ldr x0, [x20,1120] + mov w2, w1 + mov w3, 2048 + bl flash_sram_load_store + bl rknand_flash_cs_init + ldr x0, [x19,1056] + adrp x1, zftl_deinit + add x1, x1, :lo12:zftl_deinit + str x1, [x0,80] + adrp x1, zftl_cache_flush + add x1, x1, :lo12:zftl_cache_flush + str x1, [x0,64] + adrp x1, zftl_flash_suspend + add x1, x1, :lo12:zftl_flash_suspend + str x1, [x0,88] + adrp x1, zftl_flash_resume + add x1, x1, :lo12:zftl_flash_resume + str x1, [x0,96] + adrp x1, zftl_get_density + add x1, x1, :lo12:zftl_get_density + str x1, [x0,72] + adrp x1, zftl_read_flash_info + add x1, x1, :lo12:zftl_read_flash_info + str x1, [x0,112] + adrp x1, zftl_read + add x1, x1, :lo12:zftl_read + str x1, [x0,40] + adrp x1, zftl_write + add x1, x1, :lo12:zftl_write + str x1, [x0,48] + adrp x1, zftl_sys_read + add x1, x1, :lo12:zftl_sys_read + str x1, [x0,24] + adrp x1, zftl_sys_write + add x1, x1, :lo12:zftl_sys_write + str x1, [x0,32] + adrp x1, zftl_vendor_read + add x1, x1, :lo12:zftl_vendor_read + str x1, [x0,8] + adrp x1, zftl_vendor_write + add x1, x1, :lo12:zftl_vendor_write + str x1, [x0,16] + adrp x1, zftl_nandc_get_irq_status + add x1, x1, :lo12:zftl_nandc_get_irq_status + str x1, [x0,120] + adrp x1, zftl_proc_ftl_read + add x1, x1, :lo12:zftl_proc_ftl_read + str x1, [x0,128] + adrp x1, zftl_do_gc + add x1, x1, :lo12:zftl_do_gc + str x1, [x0,104] + adrp x1, zftl_discard + add x1, x1, :lo12:zftl_discard + str x1, [x0,56] + ldr x0, [x19,1064] + bl nand_flash_init + cbnz w0, .L2632 + bl zftl_init + b .L2637 +.L2632: + ldr x0, [x19,1056] + adrp x1, ftl_deinit + add x1, x1, :lo12:ftl_deinit + str x1, [x0,80] + adrp x1, ftl_cache_flush + add x1, x1, :lo12:ftl_cache_flush + str x1, [x0,64] + adrp x1, ftl_flash_suspend + add x1, x1, :lo12:ftl_flash_suspend + str x1, [x0,88] + adrp x1, ftl_flash_resume + add x1, x1, :lo12:ftl_flash_resume + str x1, [x0,96] + adrp x1, ftl_get_density + add x1, x1, :lo12:ftl_get_density + str x1, [x0,72] + adrp x1, ftl_read_flash_info + add x1, x1, :lo12:ftl_read_flash_info + str x1, [x0,112] + adrp x1, ftl_read + add x1, x1, :lo12:ftl_read + str x1, [x0,40] + adrp x1, ftl_write + add x1, x1, :lo12:ftl_write + str x1, [x0,48] + adrp x1, ftl_nandc_get_irq_status + add x1, x1, :lo12:ftl_nandc_get_irq_status + str x1, [x0,120] + adrp x1, ftl_proc_ftl_read + add x1, x1, :lo12:ftl_proc_ftl_read + str x1, [x0,128] + adrp x1, ftl_do_gc + add x1, x1, :lo12:ftl_do_gc + str x1, [x0,104] + adrp x1, ftl_discard + add x1, x1, :lo12:ftl_discard + str x1, [x0,56] + ldr x0, [x19,1064] + bl FlashInit + mov w20, w0 + adrp x0, .LANCHOR2 + adrp x1, gNandParaInfo + add x0, x0, :lo12:.LANCHOR2 + add x1, x1, :lo12:gNandParaInfo + add x0, x0, 368 + mov w2, 32 + bl ftl_memcpy + strb wzr, [x19,1136] + adrp x0, .LANCHOR0+58 + strb wzr, [x0,#:lo12:.LANCHOR0+58] + cbnz w20, .L2633 + bl FtlInit +.L2637: + mov w20, w0 +.L2633: + adrp x0, .LC230 + mov w1, w20 + add x0, x0, :lo12:.LC230 + bl printk + mov w0, w20 +.L2630: + ldp x19, x20, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size rk_ftl_init, .-rk_ftl_init + .align 2 + .global ftl_update_l2p_map + .type ftl_update_l2p_map, %function +ftl_update_l2p_map: + stp x29, x30, [sp, -144]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + stp x23, x24, [sp,48] + mov x23, x0 + add x0, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x27, x28, [sp,80] + stp x25, x26, [sp,64] + ldrb w1, [x23,9] + mov x27, 0 + ldrh w24, [x0,3234] + mov w22, w27 + ldr x0, [x0,3752] + ldrh w20, [x23,12] + mul w24, w24, w1 + add x20, x0, x20, lsl 2 + add x0, x20, x24, sxtw 2 + ldr w0, [x0,-4] + cmn w0, #1 + beq .L2639 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 768 + mov w2, 889 + bl printk +.L2640: + b .L2640 +.L2639: + adrp x25, .LC232 + adrp x26, .LC231 + add x0, x25, :lo12:.LC232 + str x0, [x29,120] + add x0, x26, :lo12:.LC231 + str x0, [x29,112] +.L2663: + cmp w27, w24 + mov w25, w27 + bge .L2664 + ldr w2, [x20,x27,lsl 2] + cmn w2, #1 + beq .L2641 + add x0, x19, :lo12:.LANCHOR0 + ldrb w21, [x0,2776] + adrp x0, .LANCHOR2 + add x0, x0, :lo12:.LANCHOR2 + lsl w21, w21, 7 + ldr w0, [x0,400] + udiv w21, w2, w21 + and w21, w21, 65535 + tbz x0, 12, .L2642 + ldr x0, [x29,112] + mov w1, w21 + mov w3, w27 + bl printk +.L2642: + mov w28, -1 +.L2646: + sbfiz x26, x25, 2, 32 + ldr w0, [x20,x26] + cmn w0, #1 + beq .L2643 + add x6, x19, :lo12:.LANCHOR0 + ldrb w1, [x6,2776] + lsl w1, w1, 7 + udiv w0, w0, w1 + cmp w21, w0, uxth + bne .L2643 + ldrb w0, [x23,9] + ldrh w2, [x6,3230] + str x6, [x29,104] + sdiv w1, w25, w0 + msub w0, w1, w0, w25 + add x0, x23, x0, sxtw 1 + ldrh w0, [x0,16] + madd w2, w0, w2, w1 + str w2, [x29,140] + ldr x0, [x29,120] + ldr w1, [x20,x26] + bl pm_ppa_update_check + ldr x6, [x29,104] + cbz w0, .L2644 + adrp x0, .LC233 + ldr x1, [x6,3752] + add x0, x0, :lo12:.LC233 + mov w2, 4 + mov w3, w24 + bl rknand_print_hex +.L2645: + b .L2645 +.L2644: + ldr w0, [x20,x26] + add x1, x29, 140 + mov w2, 1 + add w22, w22, 1 + bl pm_log2phys + uxth w22, w22 + str w28, [x20,x26] +.L2643: + add w25, w25, 1 + cmp w25, w24 + bne .L2646 +.L2641: + add x27, x27, 1 + b .L2663 +.L2664: + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 12, .L2648 + add x0, x19, :lo12:.LANCHOR0 + ldrh w1, [x23] + mov w2, w22 + ubfiz x3, x1, 1, 16 + ldr x4, [x0,2832] + adrp x0, .LC234 + add x0, x0, :lo12:.LC234 + ldrh w3, [x4,x3] + bl printk +.L2648: + add x19, x19, :lo12:.LANCHOR0 + ldrh w1, [x23] + ldr x0, [x19,2832] + strh w22, [x0,x1,lsl 1] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 144 + ret + .size ftl_update_l2p_map, .-ftl_update_l2p_map + .align 2 + .global ftl_alloc_new_data_sblk + .type ftl_alloc_new_data_sblk, %function +ftl_alloc_new_data_sblk: + stp x29, x30, [sp, -32]! + add x29, sp, 0 + str x19, [sp,16] + mov x19, x0 + bl ftl_update_l2p_map + bl pm_flush + adrp x0, .LANCHOR0+2792 + mov w2, 2 + ldr x1, [x0,#:lo12:.LANCHOR0+2792] + mov x0, x19 + add x1, x1, 16 + cmp x19, x1 + mov w1, 3 + csel w1, w2, w1, eq + bl ftl_open_sblk_init + bl ftl_ext_info_flush + mov w0, 0 + bl ftl_info_flush + bl lpa_rebuild_hash + ldr x19, [sp,16] + mov w0, 0 + ldp x29, x30, [sp], 32 + ret + .size ftl_alloc_new_data_sblk, .-ftl_alloc_new_data_sblk + .align 2 + .global ftl_write_commit + .type ftl_write_commit, %function +ftl_write_commit: + stp x29, x30, [sp, -160]! + add x29, sp, 0 + stp x23, x24, [sp,48] + adrp x24, .LANCHOR0 + add x24, x24, :lo12:.LANCHOR0 + add x0, x24, 728 + str x0, [x29,128] + adrp x0, .LANCHOR5 + add x0, x0, :lo12:.LANCHOR5 + str x0, [x29,120] + stp x19, x20, [sp,16] + add x0, x0, 384 + str x0, [x29,104] + stp x21, x22, [sp,32] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] +.L2669: + ldrb w0, [x24,2809] + adrp x21, .LANCHOR0 + cbz w0, .L2671 + ldrb w1, [x24,2808] + sub w0, w0, #1 + ldr x2, [x29,128] + str x1, [x29,112] + lsl x1, x1, 6 + add x26, x2, x1 + strb w0, [x24,2809] + ldr w0, [x24,2784] + ldrb w1, [x2,x1] + ldr w23, [x26,36] + strb w1, [x24,2808] + cmp w23, w0 + bcc .L2672 + mov x0, x26 + bl buf_free + mov w0, -1 + b .L2726 +.L2672: + ldr x0, [x26,24] + str x0, [x29,136] + ldrb w0, [x24,3772] + ldr x27, [x26,8] + ldrb w22, [x26,57] + ldrb w20, [x26,56] + cbz w0, .L2674 + ldr x0, [x29,120] + add x1, x21, :lo12:.LANCHOR0 + add x1, x1, 728 + ldrb w3, [x0,384] + ldr x0, [x29,128] + add x3, x0, x3, lsl 6 +.L2675: + ldrb w0, [x3] + cmp w0, 255 + beq .L2729 + sbfiz x3, x0, 6, 32 + add x3, x1, x3 + b .L2675 +.L2729: + ldr w0, [x3,36] + cmp w0, w23 + bne .L2674 + ldr x0, [x3,8] + ubfiz x1, x22, 9, 8 + lsl w2, w20, 9 + add x0, x0, x1 + add x1, x27, x1 + bl ftl_memcpy + mov x0, x26 + bl buf_free + b .L2669 +.L2674: + mov w0, w23 + bl lpa_hash_get_ppa + str w0, [x29,156] + cmn w0, #1 + bne .L2678 + mov w0, w23 + add x1, x29, 156 + mov w2, 0 + bl pm_log2phys +.L2678: + add x1, x21, :lo12:.LANCHOR0 + mov w0, 0 + add x1, x1, 728 + ldr x19, [x1,2064] +.L2681: + ldr w2, [x1,36] + cmp w2, w23 + bne .L2679 + ldrb w2, [x1,2] + tbz x2, 3, .L2679 + add x1, x21, :lo12:.LANCHOR0 + ubfiz x0, x0, 6, 32 + add x1, x1, 728 + and w2, w2, -9 + add x0, x1, x0 + strb w2, [x0,2] + ldr x25, [x0,8] + ldr w0, [x0,40] + str w0, [x29,156] + b .L2680 +.L2679: + add w0, w0, 1 + add x1, x1, 64 + cmp w0, 32 + bne .L2681 + mov x25, 0 +.L2680: + add x0, x21, :lo12:.LANCHOR0 + ldrb w0, [x0,2776] + cmp w20, w0 + bcs .L2727 + cbz x25, .L2684 + cbz w22, .L2685 + mov x0, x27 + mov x1, x25 + lsl w2, w22, 9 + bl ftl_memcpy +.L2685: + add x0, x21, :lo12:.LANCHOR0 + add w20, w22, w20 + ldrb w3, [x0,2776] + ldr x19, [x0,2792] + cmp w20, w3 + bcc .L2686 +.L2727: + add x19, x19, 16 + b .L2728 +.L2686: + ubfiz x1, x20, 9, 9 + sub w2, w3, w20 + add x0, x27, x1 + lsl w2, w2, 9 + add x1, x25, x1 + add x19, x19, 48 + bl ftl_memcpy +.L2728: + mov w25, 0 + b .L2683 +.L2684: + ldr w0, [x29,156] + cmn w0, #1 + beq .L2687 + mov w0, 1 + bl buf_alloc + mov x28, x0 + ldr w1, [x29,156] + str w1, [x0,40] + mov w1, 1 + str w23, [x0,36] + bl sblk_read_page + ldr x0, [x28,24] + ldr w25, [x0,12] + ldr w0, [x0,4] + add w25, w25, 1 + cmp w0, w23 + bne .L2688 + ldr w0, [x28,52] + cmn w0, #1 + bne .L2689 +.L2688: + ldrb w1, [x28,1] + adrp x0, .LC235 + ldr w2, [x29,156] + mov w3, w23 + ldr w4, [x28,52] + add x0, x0, :lo12:.LC235 + bl printk + mov w2, 4 + ldr x1, [x28,24] + adrp x0, .LC173 + mov w3, w2 + add x0, x0, :lo12:.LC173 + bl rknand_print_hex + add x3, x21, :lo12:.LANCHOR0 + mov w2, 21 + mov w1, 1 + ldrh w0, [x3,3218] + sub w2, w2, w0 + lsl w2, w1, w2 + ldr w1, [x29,156] + sub w2, w2, #1 + lsr w0, w1, w0 + ldrb w1, [x3,3216] + and w0, w2, w0 + udiv w0, w0, w1 + mov x1, 0 + bl ftl_sblk_dump +.L2689: + ldr x0, [x28,24] + ldr w0, [x0,4] + cmp w0, w23 + bne .L2690 + ldr w0, [x28,52] + cmn w0, #1 + bne .L2691 +.L2690: + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 792 + mov w2, 464 + bl printk +.L2692: + b .L2692 +.L2691: + cbz w22, .L2693 + ldr w0, [x29,156] + lsl w2, w22, 9 + cmn w0, #1 + beq .L2694 + ldr x1, [x28,8] + mov x0, x27 + bl ftl_memcpy + b .L2693 +.L2687: + cbz w22, .L2730 + lsl w2, w22, 9 + mov x28, x25 +.L2694: + mov x0, x27 + mov w1, 0 + bl ftl_memset +.L2693: + add x1, x21, :lo12:.LANCHOR0 + add w20, w22, w20 + ldrb w2, [x1,2776] + ldr x0, [x1,2792] + cmp w20, w2 + add x19, x0, 48 + bcc .L2695 + add x19, x0, 16 + b .L2696 +.L2695: + ldr w0, [x29,156] + sub w2, w2, w20 + lsl w2, w2, 9 + cmn w0, #1 + ubfiz x0, x20, 7, 9 + beq .L2697 + ldr x1, [x28,8] + lsl x20, x0, 2 + add x0, x27, x20 + add x1, x1, x20 + bl ftl_memcpy + b .L2696 +.L2697: + add x0, x27, x0, lsl 2 + mov w1, 0 + bl ftl_memset +.L2696: + cbz x28, .L2683 + ldrb w0, [x28,2] + mov x1, x28 + and w0, w0, -9 + strb w0, [x28,2] + add x0, x21, :lo12:.LANCHOR0 + add x0, x0, 2824 + bl buf_remove_buf + mov x0, x28 + bl buf_free +.L2683: + ldrh w0, [x19,6] + cbnz w0, .L2698 + bl ftl_flush + mov x0, x19 + bl ftl_alloc_new_data_sblk +.L2698: + mov x0, x19 + add x20, x21, :lo12:.LANCHOR0 + bl ftl_get_new_free_page + ldr x1, [x29,112] + add x3, x20, 728 + ldr x6, [x29,136] + lsl x2, x1, 6 + add x1, x3, x2 + ldr w5, [x1,32] + str w5, [x6] + str w23, [x6,4] + ldr w5, [x29,156] + str w5, [x6,8] + str w25, [x6,12] + str w0, [x1,40] + mov w0, -1 + strb w0, [x3,x2] + mov w0, 10 + ldrb w2, [x1,2] + str w5, [x1,44] + orr w0, w2, w0 + strb w0, [x1,2] + ldrh w2, [x19,10] + ldrh w0, [x19,12] + add w0, w2, w0 + sub w0, w0, #1 + strh w0, [x1,48] + ldr x0, [x29,104] + mov x1, x26 + bl buf_add_tail + ldrb w0, [x20,3772] + add w0, w0, 1 + strb w0, [x20,3772] + bl timer_get_time + ldr x1, [x29,120] + ldrb w2, [x20,3772] + str w0, [x1,388] + cmp w2, 2 + adrp x0, .LANCHOR5 + bhi .L2699 + ldrh w1, [x19,6] + cmp w1, 1 + bne .L2671 +.L2699: + ldrb w1, [x19,5] + mov w4, 2 + add x6, x21, :lo12:.LANCHOR0 + cmp w1, wzr + ldrh w1, [x19,6] + csinc w4, w4, wzr, ne + add x6, x6, 728 + cmp w1, 1 + add x1, x0, :lo12:.LANCHOR5 + csel w4, w4, w2, ne + ldrb w5, [x1,384] + mov w1, 0 + mov w3, w5 +.L2703: + cmp w1, w4 + beq .L2731 + ubfiz x3, x3, 6, 8 + add w1, w1, 1 + ldrb w3, [x6,x3] + b .L2703 +.L2731: + add x0, x0, :lo12:.LANCHOR5 + uxtb w1, w1 + sub w2, w2, w1 + ubfiz x5, x5, 6, 8 + strb w3, [x0,384] + add x0, x21, :lo12:.LANCHOR0 + add x0, x0, 728 + strb w2, [x0,3044] + add x0, x0, x5 + bl sblk_prog_page + ldrh w0, [x19,6] + cmp w0, 1 + bne .L2671 + bl sblk_wait_write_queue_completed + bl ftl_write_completed + mov x0, x19 + bl ftl_write_last_log_page + mov x0, x19 + bl ftl_alloc_new_data_sblk +.L2671: + add x21, x21, :lo12:.LANCHOR0 + ldrb w19, [x21,2809] + cbnz w19, .L2669 + bl ftl_write_completed + mov w0, w19 + b .L2726 +.L2730: + mov x28, x25 + b .L2693 +.L2726: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 160 + ret + .size ftl_write_commit, .-ftl_write_commit + .align 2 + .global gc_do_copy_back + .type gc_do_copy_back, %function +gc_do_copy_back: + sub sp, sp, #192 + stp x29, x30, [sp,16] + add x29, sp, 16 + stp x19, x20, [sp,32] + adrp x19, .LANCHOR0 + stp x21, x22, [sp,48] + add x21, x19, :lo12:.LANCHOR0 + stp x23, x24, [sp,64] + stp x25, x26, [sp,80] + stp x27, x28, [sp,96] + ldrb w0, [x21,3209] + ldr x22, [x21,2792] + cbnz w0, .L2733 + bl buf_alloc + mov x20, x0 + cbz x0, .L2732 + ldrh w23, [x21,2874] + mov w0, w23 + add w23, w23, 1 + bl gc_get_src_ppa_from_index + str w0, [x20,40] + mov w22, w0 + mov w1, 1 + mov x0, x20 + strh w23, [x21,2874] + bl sblk_read_page + ldr w0, [x20,52] + cmp w0, 512 + beq .L2790 + cmn w0, #1 + bne .L2735 +.L2790: + add x3, x19, :lo12:.LANCHOR0 + mov w2, 21 + ldrh w1, [x3,3218] + lsr w0, w22, w1 + sub w1, w2, w1 + mov w2, 1 + lsl w1, w2, w1 + sub w1, w1, #1 + and w1, w0, w1 + ldrb w0, [x3,3216] + udiv w0, w1, w0 + mov x1, 0 + bl ftl_sblk_dump +.L2735: + ldr w0, [x20,52] + cmp w0, 512 + beq .L2791 + cmn w0, #1 + cset w2, eq + cbz w2, .L2737 +.L2791: + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 816 + mov w2, 559 + bl printk +.L2739: + b .L2739 +.L2737: + ldr x0, [x20,24] + str x2, [x29,120] + ldr w21, [x0,4] + mov w0, w21 + bl lpa_hash_get_ppa + str w0, [x29,128] + cmn w0, #1 + ldr x2, [x29,120] + bne .L2740 + mov w0, w21 + add x1, x29, 128 + bl pm_log2phys +.L2740: + ldr w23, [x29,128] + cmp w23, w22 + bne .L2741 + add x1, x19, :lo12:.LANCHOR0 + add x0, x1, 728 + add x1, x1, 2776 +.L2744: + ldr w2, [x0,36] + cmp w2, w21 + bne .L2742 + ldrb w2, [x0,2] + tbz x2, 1, .L2742 + mov x0, x20 + bl buf_free + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L2732 + add x19, x19, :lo12:.LANCHOR0 + adrp x0, .LC236 + mov w1, w21 + mov w2, w23 + add x0, x0, :lo12:.LC236 + ldrh w3, [x19,2874] + bl printk + b .L2732 +.L2742: + add x0, x0, 64 + cmp x0, x1 + bne .L2744 + add x22, x19, :lo12:.LANCHOR0 + ldrb w1, [x20,2] + str w21, [x20,36] + strb wzr, [x20,57] + ldrb w0, [x22,2776] + strb w0, [x20,56] + mov w0, 10 + orr w0, w1, w0 + strb w0, [x20,2] + ldr x0, [x20,24] + ldr w0, [x0] + str w0, [x20,32] + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L2745 + ldr w2, [x29,128] + mov w0, w21 + str x2, [x29,120] + bl lpa_hash_get_ppa + mov w3, w0 + ldr x2, [x29,120] + adrp x0, .LC237 + ldrh w5, [x22,2874] + add x0, x0, :lo12:.LC237 + mov w1, w21 + mov w4, w23 + bl printk +.L2745: + add x19, x19, :lo12:.LANCHOR0 + mov x0, x20 + bl ftl_gc_write_buf + bl ftl_write_commit + ldr x1, [x19,2800] + ldr w0, [x1,60] + add w0, w0, 1 + str w0, [x1,60] + ldrh w0, [x19,2876] + add w0, w0, 1 + strh w0, [x19,2876] + b .L2732 +.L2741: + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L2747 + mov w0, w21 + add x19, x19, :lo12:.LANCHOR0 + bl lpa_hash_get_ppa + mov w3, w0 + ldrh w5, [x19,2874] + adrp x0, .LC237 + add x0, x0, :lo12:.LC237 + mov w1, w21 + mov w2, w23 + mov w4, w22 + bl printk +.L2747: + mov x0, x20 + bl buf_free + b .L2732 +.L2733: + ldrb w24, [x21,3193] + add x0, x21, 2848 + add x22, x22, 80 + cmp w24, 3 + bne .L2748 + ldrb w1, [x21,3208] + cbz w1, .L2749 + ldrb w20, [x22,9] + ldrh w21, [x0,314] + add w23, w20, w20, lsl 1 + sub w20, w20, w20, lsl 2 + sdiv w23, w21, w23 + madd w20, w23, w20, w21 + uxth w20, w20 + b .L2751 +.L2749: + ldrh w20, [x0,314] + adrp x0, .LANCHOR2 + ldrb w21, [x22,9] + add x0, x0, :lo12:.LANCHOR2 + add x0, x0, 1336 + sdiv w1, w20, w21 + msub w20, w1, w21, w20 + ldrh w25, [x0,w1,sxtw 1] + uxth w20, w20 + lsr w23, w25, 3 + and w25, w25, 7 + madd w21, w23, w21, w20 + cmp w25, 1 + add w21, w21, w21, lsl 1 + uxth w21, w21 + bne .L2752 + b .L2751 +.L2748: + ldrb w20, [x22,9] + mov w24, 1 + ldrb w1, [x21,3228] + ldrh w21, [x0,314] + sdiv w23, w21, w20 + msub w20, w23, w20, w21 + uxth w20, w20 + cbz w1, .L2751 + mov w24, 2 +.L2751: + mov w25, 0 + add x2, x19, :lo12:.LANCHOR0 + adrp x3, .LANCHOR4 +.L2754: + ldrb w1, [x22,9] + mul w0, w24, w1 + cmp w25, w0 + bge .L2788 + ldrh w0, [x2,3210] + add w26, w21, w25 + mul w0, w0, w1 + sub w0, w0, #1 + cmp w26, w0 + beq .L2788 + add x0, x3, :lo12:.LANCHOR4 + sbfiz x26, x26, 2, 32 + ldr x1, [x0,1024] + ldr w0, [x1,x26] + cmn w0, #1 + bne .L2755 + ldrh w27, [x2,2874] + add x28, x2, 2848 + ldrh w0, [x2,2872] + str x3, [x29,104] + str x1, [x29,112] + cmp w0, w27 + str x2, [x29,120] + bls .L2732 + mov w0, w27 + add w27, w27, 1 + bl gc_get_src_ppa_from_index + strh w27, [x28,26] + ldr x1, [x29,112] + ldr x3, [x29,104] + ldr x2, [x29,120] + str w0, [x1,x26] +.L2755: + add w25, w25, 1 + uxth w25, w25 + b .L2754 +.L2788: + mov w25, 1 +.L2752: + adrp x0, .LANCHOR2 + str x0, [x29,112] + add x1, x0, :lo12:.LANCHOR2 + ldr w1, [x1,400] + tbz x1, 8, .L2757 + adrp x0, .LANCHOR4+1024 + add x4, x19, :lo12:.LANCHOR0 + ubfiz x5, x21, 2, 16 + mov w1, w23 + mov w2, w25 + mov w3, w20 + ldr x6, [x0,#:lo12:.LANCHOR4+1024] + adrp x0, .LC238 + ldrh w4, [x4,3162] + add x0, x0, :lo12:.LC238 + ldr w5, [x6,x5] + mov w6, w21 + bl printk +.L2757: + adrp x0, .LC239 + mov w28, 0 + add x0, x0, :lo12:.LC239 + str x0, [x29,104] +.L2758: + ldrb w0, [x22,9] + mul w0, w24, w0 + cmp w28, w0 + bge .L2832 + add w1, w21, w28 + sxtw x0, w1 + str x0, [x29,120] + add x0, x19, :lo12:.LANCHOR0 + ldr x2, [x29,120] + ldr x0, [x0,3200] + ldrb w0, [x0,x2] + cmp w0, 255 + bne .L2759 + mov w0, 0 + str x1, [x29,96] + bl buf_alloc + mov x27, x0 + ldr x1, [x29,96] + cbnz x0, .L2760 + bl sblk_wait_write_queue_completed + bl ftl_write_completed + bl gc_write_completed + bl gc_free_temp_buf + mov w0, w27 + bl buf_alloc + mov x27, x0 + ldr x1, [x29,96] + cbz x0, .L2732 +.L2760: + add x26, x19, :lo12:.LANCHOR0 + ldr x3, [x29,120] + ldrb w2, [x27,1] + ldr x0, [x26,3200] + strb w2, [x0,x3] + strh w1, [x27,48] + ldrb w0, [x26,2855] + strb w25, [x27,61] + add w0, w0, 1 + strb w0, [x26,2855] + ldrb w2, [x22,9] + ldrh w0, [x26,3210] + mul w0, w0, w2 + sub w0, w0, #1 + cmp w1, w0 + bne .L2761 + adrp x0, .LANCHOR4 + mov w2, -1 + add x5, x0, :lo12:.LANCHOR4 + str x5, [x29,96] + ldr x0, [x5,1016] + str w2, [x0,x3,lsl 2] + ldrh w0, [x26,3210] + ldrb w2, [x26,3212] + ldr x1, [x5,1016] + mul w2, w0, w2 + ldr x0, [x27,8] + lsl w2, w2, 2 + bl ftl_memcpy + ldrh w0, [x26,3210] + ldrb w2, [x26,3212] + ldr x5, [x29,96] + mul w2, w0, w2 + ldr x1, [x5,1024] + ldr x0, [x27,8] + add x0, x0, x2, sxtw 2 + lsl w2, w2, 2 + bl ftl_memcpy + ldrb w2, [x26,2776] + mov w1, 0 + ldr x0, [x27,24] + lsl w2, w2, 1 + bl ftl_memset + ldr x1, [x27,24] + mov w0, 15555 + movk w0, 0xf55f, lsl 16 + str w0, [x1] + ldrh w0, [x26,3210] + ldrb w1, [x26,3212] + ldr x2, [x27,24] + str x2, [x29,96] + mul w1, w0, w1 + ldr x0, [x27,8] + lsl w1, w1, 2 + bl js_hash + ldr x2, [x29,96] + str w0, [x2,4] + ldr x1, [x26,2792] + ldr x0, [x27,24] + ldr w1, [x1,132] + b .L2829 +.L2761: + ldr x0, [x29,120] + mov w1, 1 + lsl x4, x0, 2 + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + str x4, [x29,96] + ldr x0, [x0,1024] + ldr w0, [x0,x4] + str w0, [x27,40] + mov x0, x27 + bl sblk_read_page + ldr w0, [x27,52] + ldr x4, [x29,96] + cmp w0, 512 + beq .L2762 + cmn w0, #1 + bne .L2763 +.L2762: + add x5, x19, :lo12:.LANCHOR0 + mov w1, 21 + str x4, [x29,96] + ldrh w0, [x5,3218] + sub w2, w1, w0 + mov w1, 1 + lsl w2, w1, w2 + ldr w1, [x27,40] + sub w2, w2, #1 + lsr w0, w1, w0 + ldrb w1, [x5,3216] + and w0, w2, w0 + udiv w0, w0, w1 + mov x1, 0 + bl ftl_sblk_dump + ldr w0, [x27,52] + ldr x4, [x29,96] + cmp w0, 512 + beq .L2792 + cmn w0, #1 + bne .L2763 +.L2792: + ldr x0, [x27,24] + mov w1, -1 + str w1, [x0,4] +.L2763: + ldr w0, [x27,52] + cmp w0, 512 + beq .L2793 + cmn w0, #1 + bne .L2766 +.L2793: + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 816 + mov w2, 674 + bl printk +.L2768: + b .L2768 +.L2766: + ldr x1, [x27,24] + add x0, x19, :lo12:.LANCHOR0 + ldr w2, [x1,4] + ldr w0, [x0,2784] + cmp w2, w0 + bcc .L2769 + mov w0, -1 + str w0, [x1,4] +.L2769: + ldr x0, [x27,24] + ldr w1, [x0,4] + adrp x0, .LANCHOR4 + add x0, x0, :lo12:.LANCHOR4 + ldr x0, [x0,1016] + str w1, [x0,x4] + ldr x0, [x27,24] + ldr w1, [x27,40] +.L2829: + str w1, [x0,8] +.L2759: + add x2, x19, :lo12:.LANCHOR0 + ldr x3, [x29,120] + add x1, x2, 728 + mov w5, 1 + sxtw x4, w28 + ldr x0, [x2,3200] + ldrb w3, [x0,x3] + add x0, x29, 128 + add x1, x1, x3, lsl 6 + str x1, [x0,w28,sxtw 3] + ldrb w0, [x2,3193] + strb w25, [x1,61] + cmp w0, 3 + strh w5, [x1,50] + bne .L2770 + udiv w0, w28, w0 + ldrh w2, [x2,3230] + ldrh w5, [x1,48] + add w3, w0, w20 + add x3, x22, x3, sxtw 1 + ldrh w3, [x3,16] + mul w2, w3, w2 + adrp x3, .LANCHOR4 + add x3, x3, :lo12:.LANCHOR4 + add w0, w0, w0, lsl 1 + sub w0, w28, w0 + orr w2, w2, w23 + str w2, [x1,40] + uxth w0, w0 + ldr x1, [x3,1032] + add w0, w0, 1 + orr w0, w2, w0, lsl 24 + str w0, [x1,x5,lsl 2] + b .L2771 +.L2770: + cmp w0, 2 + bne .L2772 + ldrb w5, [x2,3228] + add x1, x1, 32 + ldrh w0, [x2,3230] + cbnz w5, .L2773 + add w2, w28, w20 + add x2, x22, x2, sxtw 1 + ldrh w2, [x2,16] + madd w0, w2, w0, w23 + b .L2831 +.L2773: + add w2, w20, w28, lsr 1 + add x2, x22, x2, sxtw 1 + ldrh w2, [x2,16] + madd w0, w2, w0, w23 + and w2, w28, 1 + add w0, w0, w2 +.L2831: + orr w0, w0, 33554432 + str w0, [x1,8] +.L2772: + add x0, x19, :lo12:.LANCHOR0 + adrp x1, .LANCHOR4 + add x0, x0, 728 + add x1, x1, :lo12:.LANCHOR4 + add x0, x0, x3, lsl 6 + ldr w3, [x0,40] + ldrh w2, [x0,48] + ldr x0, [x1,1032] + str w3, [x0,x2,lsl 2] +.L2771: + ldr x0, [x29,112] + add x0, x0, :lo12:.LANCHOR2 + ldr w0, [x0,400] + tbz x0, 8, .L2774 + add x0, x29, 128 + ldr x1, [x29,120] + mov w2, w25 + ldr x5, [x0,x4,lsl 3] + add x0, x19, :lo12:.LANCHOR0 + ldrb w3, [x0,2854] + ldr x0, [x0,3200] + ldrh w6, [x5,48] + ldrb w7, [x5,1] + ldrb w4, [x0,x1] + mov w0, 3 + mov w1, w28 + udiv w0, w28, w0 + add w0, w20, w0 + str w0, [sp] + ldr x0, [x5,24] + ldr w0, [x0,4] + str w0, [sp,8] + ldr x0, [x29,104] + ldr w5, [x5,40] + bl printk +.L2774: + add w8, w28, 1 + uxth w28, w8 + b .L2758 +.L2832: + add x2, x19, :lo12:.LANCHOR0 + mov w1, 0 + ldrb w0, [x2,3193] + cmp w0, 3 + add x0, x29, 128 + bne .L2817 + ldrb w1, [x2,3208] + cbz w1, .L2777 +.L2780: + ldr x1, [x29,128] + strb wzr, [x1,60] + b .L2778 +.L2777: + cmp w25, 1 + mov w2, 9 + beq .L2830 + cmp w25, 2 + bne .L2780 + mov w2, 13 +.L2830: + ldr x1, [x29,128] + strb w2, [x1,60] +.L2778: + ldrb w2, [x22,9] + add x1, x0, 24 + bl sblk_xlc_prog_pages + b .L2781 +.L2817: + ldrb w2, [x22,9] + mul w2, w2, w24 + sub w2, w2, #1 + cmp w1, w2 + bge .L2833 + ldr x2, [x0,w1,sxtw 3] + add w1, w1, 1 + ldr x3, [x0,w1,sxtw 3] + uxth w1, w1 + ldrb w3, [x3,1] + strb w3, [x2] + b .L2817 +.L2833: + ldr x0, [x0,w2,sxtw 3] + mov w1, -1 + strb w1, [x0] + ldrb w1, [x22,9] + ldr x0, [x29,128] + mul w1, w24, w1 + bl sblk_prog_page +.L2781: + add x1, x19, :lo12:.LANCHOR0 + ldrb w2, [x22,9] + ldrb w3, [x1,3208] + cbz w3, .L2783 + add w0, w2, w2, lsl 1 + and w2, w0, 1023 + b .L2784 +.L2783: + ldrb w1, [x1,3228] + ubfiz w0, w2, 1, 8 + cmp w1, wzr + csel w2, w0, w2, ne +.L2784: + add x19, x19, :lo12:.LANCHOR0 + ldr x1, [x19,2800] + ldr w0, [x1,52] + add w0, w0, w2 + str w0, [x1,52] + ldrh w1, [x19,3162] + add w0, w2, w1 + ldrh w1, [x19,3210] + uxth w0, w0 + strh w0, [x19,3162] + ldrb w2, [x22,9] + mul w1, w1, w2 + cmp w0, w1 + blt .L2785 + ldr x0, [x19,2792] + strh wzr, [x0,86] +.L2785: + bl gc_write_completed +.L2732: + sub sp, x29, #16 + ldp x19, x20, [sp,32] + ldp x21, x22, [sp,48] + ldp x23, x24, [sp,64] + ldp x25, x26, [sp,80] + ldp x27, x28, [sp,96] + ldp x29, x30, [sp,16] + add sp, sp, 192 + ret + .size gc_do_copy_back, .-gc_do_copy_back + .align 2 + .global zftl_discard + .type zftl_discard, %function +zftl_discard: + stp x29, x30, [sp, -112]! + add w2, w0, w1 + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + str x27, [sp,80] + stp x19, x20, [sp,16] + mov w20, w1 + add x1, x21, :lo12:.LANCHOR0 + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + ldr w1, [x1,4] + cmp w2, w1 + bhi .L2856 + add w23, w0, 24576 + adrp x0, .LANCHOR2+400 + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 12, .L2836 + adrp x0, .LC240 + mov w1, 0 + add x0, x0, :lo12:.LC240 + mov w2, w23 + mov w3, w20 + mov w4, w1 + bl printk +.L2836: + add x0, x21, :lo12:.LANCHOR0 + ldrb w3, [x0,2776] + ldr x1, [x0,2800] + udiv w19, w23, w3 + ldr w24, [x1,8] + add w2, w24, 1 + str w2, [x1,8] + msub w26, w19, w3, w23 + cbz w26, .L2837 + sub w3, w3, w26 + mov w0, w19 + cmp w3, w20 + csel w25, w3, w20, ls + bl lpa_hash_get_ppa + str w0, [x29,104] + cmn w0, #1 + bne .L2838 + mov w0, w19 + add x1, x29, 104 + mov w2, 0 + bl pm_log2phys +.L2838: + ldr w0, [x29,104] + and w27, w25, 65535 + cmn w0, #1 + beq .L2840 + mov w0, 0 + bl buf_alloc + mov x22, x0 + cbz x0, .L2840 + str w19, [x0,36] + ubfiz x1, x26, 9, 25 + strb w26, [x0,57] + lsl w2, w27, 9 + strb w25, [x0,56] + str w24, [x0,32] + ldr x0, [x0,8] + add x0, x0, x1 + mov w1, 0 + bl ftl_memset + mov x0, x22 + bl ftl_write_buf + bl ftl_write_commit + add x0, x21, :lo12:.LANCHOR0 + ldr x1, [x0,2800] + ldr w0, [x1,76] + add w0, w0, 1 + str w0, [x1,76] +.L2840: + add w19, w19, 1 + sub w20, w20, w27 +.L2837: + cbz w20, .L2842 + bl ftl_flush +.L2842: + mov w0, -1 + mov w26, 1 + str w0, [x29,108] + mov w27, 21 +.L2843: + add x25, x21, :lo12:.LANCHOR0 + ldrb w0, [x25,2776] + cmp w20, w0 + bcc .L2883 + mov w0, w19 + bl lpa_hash_get_ppa + str w0, [x29,104] + cmn w0, #1 + beq .L2844 + mov w0, 0 + bl buf_alloc + mov x22, x0 + cbz x0, .L2845 + ldrb w2, [x25,2776] + mov w1, 0 + strb w2, [x0,56] + str w19, [x0,36] + lsl w2, w2, 9 + strb wzr, [x0,57] + str w24, [x0,32] + ldr x0, [x0,8] + bl ftl_memset + mov x0, x22 + bl ftl_write_buf + bl ftl_write_commit + ldr x1, [x25,2800] + ldr w0, [x1,76] + add w0, w0, 1 + str w0, [x1,76] +.L2845: + mov w0, w19 + add x1, x29, 104 + mov w2, 0 + bl pm_log2phys + ldr w0, [x29,104] + cmn w0, #1 + beq .L2847 + add x1, x29, 108 + mov w0, w19 + mov w2, 1 + bl pm_log2phys + add x0, x21, :lo12:.LANCHOR0 + ldr x1, [x0,2800] + b .L2882 +.L2844: + mov w0, w19 + add x1, x29, 104 + mov w2, 0 + bl pm_log2phys + ldr w0, [x29,104] + cmn w0, #1 + beq .L2847 + add x1, x29, 108 + mov w2, 1 + mov w0, w19 + bl pm_log2phys + ldrh w0, [x25,3218] + ldr w1, [x29,104] + sub w2, w27, w0 + lsl w2, w26, w2 + lsr w0, w1, w0 + sub w2, w2, #1 + ldrb w1, [x25,3216] + and w0, w2, w0 + udiv w0, w0, w1 + bl ftl_vpn_decrement + ldr x1, [x25,2800] +.L2882: + ldr w0, [x1,76] + add w0, w0, 1 + str w0, [x1,76] +.L2847: + add x0, x21, :lo12:.LANCHOR0 + add w19, w19, 1 + ldrb w0, [x0,2776] + sub w20, w20, w0 + b .L2843 +.L2883: + cbz w20, .L2851 + mov w0, w19 + bl lpa_hash_get_ppa + str w0, [x29,104] + cmn w0, #1 + bne .L2852 + mov w0, w19 + add x1, x29, 104 + mov w2, 0 + bl pm_log2phys +.L2852: + ldr w0, [x29,104] + cmn w0, #1 + beq .L2851 + mov w0, 0 + bl buf_alloc + mov x22, x0 + cbz x0, .L2851 + add x21, x21, :lo12:.LANCHOR0 + str w19, [x0,36] + strb wzr, [x0,57] + strb w20, [x0,56] + str w24, [x0,32] + ldrb w0, [x21,2776] + cmp w20, w0 + bcc .L2854 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 832 + mov w2, 1071 + bl printk +.L2855: + b .L2855 +.L2854: + ldr x0, [x22,8] + mov w1, 0 + lsl w2, w20, 9 + bl ftl_memset + mov x0, x22 + bl ftl_write_buf + bl ftl_write_commit + ldr x1, [x21,2800] + ldr w0, [x1,76] + add w0, w0, 1 + str w0, [x1,76] +.L2851: + adrp x19, .LANCHOR9 + mov w21, 0 + add x19, x19, :lo12:.LANCHOR9 + ldr w1, [x19,1136] + add w1, w20, w1 + str w1, [x19,1136] + cmp w1, 8192 + bls .L2835 + adrp x0, .LC240 + mov w2, w23 + mov w3, w20 + mov w4, w21 + add x0, x0, :lo12:.LC240 + bl printk + str w21, [x19,1136] + bl flt_sys_flush + b .L2835 +.L2856: + mov w21, -1 +.L2835: + mov w0, w21 + ldr x27, [sp,80] + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x29, x30, [sp], 112 + ret + .size zftl_discard, .-zftl_discard + .align 2 + .global zftl_do_gc + .type zftl_do_gc, %function +zftl_do_gc: + stp x29, x30, [sp, -112]! + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x19, .LANCHOR0 + adrp x20, .LANCHOR4 + add x1, x19, :lo12:.LANCHOR0 + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + ldr x22, [x1,2792] + ldr x1, [x1,2800] + ldrh w24, [x1,116] + ldrh w2, [x1,118] + ldrh w25, [x1,114] + add w25, w24, w25 + add w24, w24, w2 + add x2, x20, :lo12:.LANCHOR4 + uxth w25, w25 + uxth w24, w24 + ldrb w3, [x2,1010] + cmp w3, 6 + bhi .L2885 + adrp x2, .L2887 + add x2, x2, :lo12:.L2887 + ldrh w2, [x2,w3,uxtw #1] + adr x3, .Lrtx2887 + add x2, x3, w2, sxth #2 + br x2 +.Lrtx2887: + .section .rodata + .align 0 + .align 2 +.L2887: + .2byte (.L2886 - .Lrtx2887) / 4 + .2byte (.L2888 - .Lrtx2887) / 4 + .2byte (.L2889 - .Lrtx2887) / 4 + .2byte (.L2890 - .Lrtx2887) / 4 + .2byte (.L2891 - .Lrtx2887) / 4 + .2byte (.L2892 - .Lrtx2887) / 4 + .2byte (.L2893 - .Lrtx2887) / 4 + .text +.L2886: + ldrh w2, [x22,80] + ldrh w27, [x1,122] + ldrh w28, [x1,124] + mov w1, 65535 + cmp w2, w1 + beq .L2894 + adrp x0, .LANCHOR2+400 + cmp w24, 7 + mov w21, 3 + csinc w21, w21, wzr, hi + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L2896 + add x2, x19, :lo12:.LANCHOR0 + adrp x0, .LC241 + ldrh w5, [x22,124] + add x0, x0, :lo12:.LC241 + ldrh w6, [x22,120] + mov w1, 1455 + ldrb w2, [x2,3209] + mov w3, w25 + ldrh w7, [x22,122] + mov w4, w24 + bl printk +.L2896: + add x19, x19, :lo12:.LANCHOR0 + mov w1, w21 + mov w2, 1 + ldrb w0, [x19,3209] + bl gc_search_src_blk + cmp w0, wzr + ble .L2885 +.L2897: + add x20, x20, :lo12:.LANCHOR4 + mov w0, 1 + b .L3049 +.L2894: + cmp w0, 1 + bne .L2898 + bl gc_scan_static_data + bl gc_static_wearleveling + bl gc_block_vpn_scan +.L2898: + add x21, x19, :lo12:.LANCHOR0 + mov w23, 1 + ldr x7, [x21,2792] + strb w23, [x21,3209] + ldrh w26, [x7,124] + cbz w26, .L2899 + adrp x0, .LANCHOR2+400 + add x20, x20, :lo12:.LANCHOR4 + strb wzr, [x21,3209] + ldr w0, [x0,#:lo12:.LANCHOR2+400] + strb w23, [x20,1010] + tbz x0, 8, .L2885 + ldrh w6, [x7,120] + adrp x0, .LC241 + ldrh w7, [x7,122] + mov w1, 1483 + mov w2, 0 + mov w3, w25 + mov w4, w24 + mov w5, w26 + add x0, x0, :lo12:.LC241 + bl printk + b .L2885 +.L2899: + ldrh w0, [x21,3214] + cmp w25, w0, lsr 2 + bcs .L2902 + cmp w24, 1 + bls .L2903 + cmp w24, 16 + bhi .L2904 + ldr x0, [x21,2800] + ldrh w0, [x0,120] + cmp w0, 127 + bhi .L2905 +.L2904: + mov w0, 1 + mov w1, 3 + b .L2908 +.L2905: + mov w0, w23 + mov w1, 2 + mov w2, 8 +.L3045: + bl gc_search_src_blk + uxth w3, w0 + b .L2906 +.L2903: + adrp x0, .LANCHOR2+400 + strb w26, [x21,3209] + ldr w0, [x0,#:lo12:.LANCHOR2+400] + tbz x0, 8, .L2907 + adrp x0, .LC241 + ldrh w6, [x7,120] + ldrh w7, [x7,122] + add x0, x0, :lo12:.LC241 + mov w1, 1496 + mov w2, w26 + mov w3, w25 + mov w4, w24 + mov w5, w26 + bl printk +.L2907: + add x19, x19, :lo12:.LANCHOR0 + cmp w25, 16 + mov w1, 3 + mov w2, 1 + ldrb w0, [x19,3209] + bhi .L3045 +.L2908: + mov w2, 16 + b .L3045 +.L2902: + add w22, w28, w27 + cmp w25, w0, lsr 1 + uxth w22, w22 + bcs .L2909 + sub w0, w24, #2 + uxth w0, w0 + cmp w0, 13 + bhi .L2910 + mov w0, w23 + mov w1, 2 + mov w2, 8 + bl gc_search_src_blk + uxth w0, w0 + cbnz w0, .L2897 +.L2910: + add x0, x19, :lo12:.LANCHOR0 + adrp x21, .LANCHOR9 + ldrb w1, [x0,3193] + cmp w1, 2 + bne .L2911 + strh wzr, [x0,2882] + cmp w24, 1 + bls .L2912 +.L2915: + add x0, x19, :lo12:.LANCHOR0 + mov w1, 1 + strb w1, [x0,3209] + adrp x1, .LANCHOR2+400 + ldr w1, [x1,#:lo12:.LANCHOR2+400] + tbz x1, 8, .L2914 + ldr x7, [x0,2792] + adrp x0, .LC241 + mov w1, 1519 + mov w2, 1 + mov w3, w25 + mov w4, w24 + ldrh w5, [x7,124] + add x0, x0, :lo12:.LC241 + ldrh w6, [x7,120] + ldrh w7, [x7,122] + bl printk + b .L2914 +.L2911: + cmp w24, 1 + bls .L2912 + ldrh w0, [x0,2882] + cmp w0, 3 + bls .L2915 + b .L2912 +.L2914: + add x0, x21, :lo12:.LANCHOR9 + add x2, x19, :lo12:.LANCHOR0 + mov w3, 0 + ldrh w0, [x0,1116] + ldrh w1, [x2,2882] + strh wzr, [x2,2880] + add w1, w1, 1 + cmp w22, w0, lsr 2 + strh w1, [x2,2882] + bls .L2916 + ldrb w0, [x2,3209] + mov w1, 1 + mov w2, 16 + bl gc_search_src_blk + uxth w3, w0 +.L2916: + cmp w3, 7 + bhi .L2989 + cmp w24, 31 + bls .L2917 +.L2989: + add x0, x19, :lo12:.LANCHOR0 + ldr x1, [x0,2800] + ldrh w0, [x0,3224] + ldrh w1, [x1,120] + cmp w1, w0 + bls .L2926 +.L2917: + add x21, x21, :lo12:.LANCHOR9 + ldrh w0, [x21,1116] + cmp w22, w0, lsr 2 + add x0, x19, :lo12:.LANCHOR0 + ldrb w0, [x0,3209] + bcs .L3040 + mov w1, 2 + mov w2, 8 + b .L3042 +.L2912: + add x0, x21, :lo12:.LANCHOR9 + ldrh w0, [x0,1116] + cmp w22, w0, lsr 1 + add x0, x19, :lo12:.LANCHOR0 + strh wzr, [x0,2882] + bls .L2921 + adrp x1, .LANCHOR2+400 + strb wzr, [x0,3209] + ldr w1, [x1,#:lo12:.LANCHOR2+400] + tbz x1, 8, .L2922 + ldr x7, [x0,2792] + adrp x0, .LC241 + add x0, x0, :lo12:.LC241 + mov w1, 1536 + mov w2, 0 + mov w3, w25 + ldrh w5, [x7,124] + mov w4, w24 + ldrh w6, [x7,120] + ldrh w7, [x7,122] + bl printk +.L2922: + add x21, x21, :lo12:.LANCHOR9 + mov w3, 0 + ldrh w0, [x21,1116] + cmp w22, w0, lsr 1 + bls .L2926 + add x0, x19, :lo12:.LANCHOR0 + cmp w24, 31 + ldrb w0, [x0,3209] + bhi .L2923 + cmp w25, 32 + bls .L2923 +.L3040: + mov w1, 3 + b .L3041 +.L2923: + mov w1, 1 +.L3041: + mov w2, 16 +.L3042: + bl gc_search_src_blk + uxth w3, w0 + b .L2926 +.L2921: + mov w3, 0 + b .L2926 +.L2909: + cmp w25, w0 + bcs .L2924 + adrp x25, .LANCHOR9 + add x0, x25, :lo12:.LANCHOR9 + ldrh w0, [x0,1116] + cmp w22, w0, lsr 1 + bcc .L2885 + mov w0, w26 + mov w1, w23 + mov w2, 16 + strb w26, [x21,3209] + bl gc_search_src_blk + uxth w3, w0 + cmp w3, 7 + bhi .L2926 + cmp w24, 4 + bls .L2926 + ldr x0, [x21,2792] + mov w1, 255 + mov w2, 128 + add x0, x0, 136 + strh w26, [x0,-16] + bl ftl_memset + strb w23, [x21,3209] + ldr x0, [x21,2800] + ldrh w1, [x0,120] + ldrh w0, [x21,3224] + cmp w1, w0 + bls .L2927 + cmp w24, 16 + bls .L2928 +.L2930: + mov w0, 1 + mov w1, 2 + mov w2, 8 + b .L3043 +.L2927: + cmp w24, 32 + bls .L2928 + mov w0, w23 + mov w1, w23 + b .L3044 +.L2928: + cmp w24, 7 + bls .L2930 + mov w0, 1 + mov w1, 3 +.L3044: + mov w2, 16 +.L3043: + bl gc_search_src_blk + add x25, x25, :lo12:.LANCHOR9 + uxth w3, w0 + add x0, x20, :lo12:.LANCHOR4 + mov w1, 1 + strb w1, [x0,1010] + ldrh w0, [x25,1116] + add w0, w0, 16 + cmp w22, w0 + bge .L2906 + add x19, x19, :lo12:.LANCHOR0 + ldrh w0, [x19,2826] + lsr w0, w0, 4 + b .L3046 +.L2926: + add x19, x19, :lo12:.LANCHOR0 + ldrh w0, [x19,2826] + lsr w0, w0, 3 +.L3046: + strh w0, [x19,3214] + b .L2906 +.L2924: + sub w24, w24, #2 + uxth w24, w24 + cmp w24, 5 + bhi .L2931 + adrp x0, .LANCHOR9+1116 + ldrh w0, [x0,#:lo12:.LANCHOR9+1116] + cmp w22, w0, lsr 1 + bls .L2885 + mov w0, w23 + mov w1, 2 + mov w2, 16 + bl gc_search_src_blk + uxth w0, w0 + cmp w0, 15 + bhi .L2897 + ldrb w0, [x21,3209] + ldr x1, [x21,2792] + add x2, x1, x0, lsl 1 + add x0, x1, x0, lsl 7 + add x0, x0, 136 + mov w1, 255 + strh w26, [x2,120] + mov w2, 128 + bl ftl_memset + b .L2885 +.L2931: + ldrh w0, [x21,2826] + ldrh w1, [x21,3224] + lsr w0, w0, 4 + strh w0, [x21,3214] + ldr x0, [x21,2800] + ldrh w0, [x0,120] + cmp w0, w1, lsr 2 + bls .L2885 + ldrb w1, [x21,3212] + ldrh w0, [x21,3210] + mul w0, w0, w1 + ldr w1, [x7,532] + cmp w1, w0, lsr 3 + bcs .L2885 + mov w0, w23 + mov w1, 3 + mov w2, 16 + bl gc_search_src_blk + uxth w3, w0 + add x0, x20, :lo12:.LANCHOR4 + strb w23, [x0,1010] +.L2906: + cbnz w3, .L2897 + b .L2885 +.L2888: + add x21, x19, :lo12:.LANCHOR0 + mov w0, 65535 + ldrh w1, [x21,2848] + cmp w1, w0 + bne .L2934 + bl gc_get_src_blk + strh w0, [x21,2848] +.L2934: + add x0, x19, :lo12:.LANCHOR0 + mov w2, 65535 + add x1, x0, 2848 + ldrh w3, [x0,2848] + cmp w3, w2 + beq .L2935 + ldrh w5, [x1,56] + uxtw x4, w3 + ldr x2, [x0,2840] + add x2, x2, x4, lsl 2 + cbz w5, .L2937 + mov x0, 0 +.L2936: + cmp w5, w0, uxth + bls .L2937 + add x0, x0, 1 + add x6, x1, x0, lsl 1 + ldrh w6, [x6,56] + cmp w6, w3 + bne .L2936 +.L2941: + add x19, x19, :lo12:.LANCHOR0 + mov w0, -1 + strh w0, [x19,2848] + b .L2885 +.L2937: + ldrb w0, [x2,2] + tst w0, 192 + beq .L2990 + and w0, w0, 224 + cmp w0, 224 + bne .L2939 +.L2990: + add x0, x19, :lo12:.LANCHOR0 + ldr x0, [x0,2832] + ldrh w0, [x0,x4,lsl 1] + cbz w0, .L2941 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 848 + mov w2, 1622 + bl printk +.L2942: + b .L2942 +.L2939: + add x20, x20, :lo12:.LANCHOR4 + mov w0, 2 + b .L3049 +.L2935: + add x20, x20, :lo12:.LANCHOR4 + strb wzr, [x20,1010] + b .L2885 +.L2889: + bl gc_scan_src_blk + cmn w0, #1 + bne .L2943 + add x20, x20, :lo12:.LANCHOR4 + mov w0, 3 +.L3049: + strb w0, [x20,1010] + b .L2885 +.L2943: + add x22, x19, :lo12:.LANCHOR0 + mov w1, 65535 + add x21, x22, 2848 + ldrh w0, [x22,2848] + cmp w0, w1 + beq .L2897 + ldrh w1, [x21,24] + add x20, x20, :lo12:.LANCHOR4 + cbz w1, .L2944 + mov w0, 4 + strh wzr, [x21,26] + strb w0, [x20,1010] + b .L2885 +.L2944: + mov w1, 1 + ldr x2, [x22,2832] + strb w1, [x20,1010] + ubfiz x1, x0, 1, 16 + ldrh w20, [x2,x1] + cbz w20, .L2945 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 848 + mov w2, 1650 + bl printk +.L2946: + b .L2946 +.L2945: + bl ftl_free_sblk + ldrh w1, [x22,2848] + ldr x0, [x22,2832] + strh w20, [x0,x1,lsl 1] + ldrh w1, [x21,30] + add w1, w1, 1 + uxth w1, w1 + cmp w1, 8 + bhi .L2947 + strh w1, [x21,30] + b .L2941 +.L2947: + strh w20, [x21,30] + bl ftl_flush + bl pm_flush + bl ftl_ext_info_flush + mov w0, w20 + bl ftl_info_flush + b .L2941 +.L2890: + add x21, x19, :lo12:.LANCHOR0 +.L3021: + bl gc_scan_src_blk_one_page + ldrh w2, [x21,2850] + add x1, x21, 2848 + ldrh w0, [x21,3234] + cmp w2, w0 + bcs .L2948 + cmp w25, 7 + bls .L3021 + b .L2885 +.L2948: + ldrh w3, [x1,24] + adrp x0, .LANCHOR2 + cbz w3, .L2949 + add x0, x0, :lo12:.LANCHOR2 + add x20, x20, :lo12:.LANCHOR4 + mov w2, 4 + strh wzr, [x1,26] + ldr w0, [x0,400] + strb w2, [x20,1010] + tbz x0, 8, .L2950 + ldrh w1, [x1] + adrp x0, .LC242 + ldr x4, [x21,2832] + add x0, x0, :lo12:.LC242 + ubfiz x2, x1, 1, 16 + ldrh w2, [x4,x2] + bl printk +.L2950: + add x19, x19, :lo12:.LANCHOR0 + ldr x0, [x19,2832] + ldrh w1, [x19,2848] + ldrh w1, [x0,x1,lsl 1] + ldrh w0, [x19,2872] + cmp w1, w0 + beq .L2885 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 848 + mov w2, 1684 + bl printk +.L2951: + b .L2951 +.L2949: + add x0, x0, :lo12:.LANCHOR2 + add x20, x20, :lo12:.LANCHOR4 + mov w2, 1 + ldrh w1, [x1] + ldr x21, [x21,2840] + add x21, x21, x1, uxth 2 + ldr w0, [x0,400] + strb w2, [x20,1010] + tbz x0, 8, .L2952 + ldrb w2, [x21,2] + adrp x0, .LC243 + add x0, x0, :lo12:.LC243 + ubfx x2, x2, 5, 3 + bl printk +.L2952: + ldrb w0, [x21,2] + tst w0, 192 + beq .L2991 + and w0, w0, 224 + cmp w0, 224 + cset w21, eq + cbz w21, .L2953 +.L2991: + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 848 + mov w2, 1694 + bl printk +.L2955: + b .L2955 +.L2953: + add x19, x19, :lo12:.LANCHOR0 + add x20, x19, 2848 + ldrh w0, [x19,2848] + bl ftl_free_sblk + mov w0, -1 + strh w0, [x19,2848] + ldrh w0, [x20,30] + add w0, w0, 1 + uxth w0, w0 + cmp w0, 8 + bhi .L2956 + strh w0, [x20,30] + b .L2885 +.L2956: + strh w21, [x20,30] + b .L3050 +.L2891: + ldrh w26, [x22,80] + mov w0, 65535 + add x23, x22, 80 + cmp w26, w0 + bne .L2957 + add x21, x19, :lo12:.LANCHOR0 + ldrb w1, [x21,3209] + cmp w1, 1 + bne .L2957 + str x1, [x29,104] + bl ftl_flush + mov w0, 5 + bl ftl_alloc_sblk + uxth w24, w0 + cmp w24, w26 + ldr x1, [x29,104] + bne .L2958 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 848 + mov w2, 1710 + bl printk +.L2959: + b .L2959 +.L2958: + bl ftl_erase_sblk + add x20, x20, :lo12:.LANCHOR4 + mov w0, 5 + add x1, x22, 96 + strb w0, [x23,4] + mov w0, w24 + bl ftl_get_blk_list_in_sblk + uxtb w0, w0 + ldrh w1, [x21,3234] + strb w0, [x23,9] + strh w24, [x22,80] + mul w0, w0, w1 + strh w0, [x23,6] + mov w1, 255 + ldrh w0, [x21,3210] + ldrb w2, [x21,3212] + strh wzr, [x23,2] + strb wzr, [x23,5] + mul w2, w0, w2 + ldr x0, [x20,1016] + strh wzr, [x23,10] + lsl w2, w2, 2 + bl ftl_memset + ldrh w0, [x21,3210] + mov w1, 255 + ldrb w2, [x21,3212] + mul w2, w0, w2 + ldr x0, [x20,1024] + lsl w2, w2, 2 + bl ftl_memset + ldrh w3, [x21,3210] + mov w1, 255 + ldrb w2, [x21,3212] + ldr x0, [x21,3200] + mul w2, w3, w2 + bl ftl_memset + ldr x0, [x21,2792] + mov w1, -1 + str w24, [x0,132] + strh w1, [x0,128] + strh w1, [x0,130] + bl pm_flush + bl ftl_ext_info_flush + strh wzr, [x21,2904] + ldr x0, [x21,2800] + strh w24, [x0,126] + mov w0, -1 + str w0, [x21,3168] + mov w0, 0 + strh wzr, [x21,3162] + strh wzr, [x21,3164] + strh wzr, [x21,3166] + bl ftl_info_flush + b .L2885 +.L2957: + cmp w25, 7 + bhi .L2960 + add x0, x19, :lo12:.LANCHOR0 + ldrh w21, [x0,3210] + lsr w21, w21, 1 + b .L3047 +.L2960: + cmp w25, 15 + bhi .L2962 + add x0, x19, :lo12:.LANCHOR0 + ldrh w21, [x0,3210] + lsr w21, w21, 3 +.L3047: + add w21, w21, 1 + uxtb w21, w21 + b .L2961 +.L2962: + cmp w25, 31 + bhi .L2963 + add x0, x19, :lo12:.LANCHOR0 + ldrh w21, [x0,3210] + lsr w21, w21, 4 + b .L3047 +.L2963: + cmp w25, 63 + mov w21, 9 + bls .L2961 + cmp w25, 127 + mov w21, 5 + bls .L2961 + cmp w25, 255 + mov w21, 2 + csinc w21, w21, wzr, ls +.L2961: + cmp w24, 7 + bhi .L2964 + add x0, x19, :lo12:.LANCHOR0 + ldrh w0, [x0,3210] + add w21, w21, w0, lsr 3 + b .L3048 +.L2964: + cmp w24, 15 + bhi .L2965 + add w21, w21, 16 +.L3048: + uxtb w21, w21 +.L2965: + add x24, x19, :lo12:.LANCHOR0 + bl timer_get_time +.L2966: + cbz w21, .L2885 + bl gc_do_copy_back + ldrb w0, [x24,3209] + cbnz w0, .L2967 + ldrb w0, [x24,2778] + cmp w0, 3 + bhi .L2968 + bl ftl_write_commit +.L2968: + add x25, x24, 2848 + ldrh w1, [x25,26] + ldrh w0, [x25,24] + cmp w1, w0 + bcc .L2992 + add x20, x20, :lo12:.LANCHOR4 + mov w0, 1 + strb w0, [x20,1010] + bl ftl_write_commit + bl ftl_flush + ldrh w0, [x25] + ldr x1, [x24,2832] + lsl x0, x0, 1 + ldrh w2, [x1,x0] + cbz w2, .L2970 + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 848 + mov w2, 1771 + bl printk +.L2971: + b .L2971 +.L2970: + strh w2, [x1,x0] + ldrh w0, [x25] + bl ftl_free_sblk + mov w0, -1 + strh w0, [x25] + b .L2885 +.L2967: + add x0, x24, 2848 + ldrh w1, [x0,318] + cbz w1, .L2972 + strh wzr, [x0,318] + ldr w0, [x0,320] + cmn w0, #1 + beq .L2973 + bl ftl_mask_bad_block +.L2973: + add x21, x19, :lo12:.LANCHOR0 + ldr x0, [x21,2792] + str wzr, [x21,3168] + strh wzr, [x21,2904] + ldrh w0, [x0,80] + bl ftl_free_sblk + ldr x1, [x21,2792] + mov w0, -1 + ldr x2, [x21,2800] + strh w0, [x1,80] + strh w0, [x2,126] + strh w0, [x1,130] + ldr x0, [x21,2856] + cbz x0, .L2974 + bl buf_free +.L2974: + add x19, x19, :lo12:.LANCHOR0 + add x20, x20, :lo12:.LANCHOR4 + str xzr, [x19,2856] + bl flt_sys_flush + adrp x1, .LANCHOR3 + adrp x0, .LC34 + add x1, x1, :lo12:.LANCHOR3 + add x0, x0, :lo12:.LC34 + add x1, x1, 848 + mov w2, 1804 + strb wzr, [x20,1010] + bl printk +.L2975: + b .L2975 +.L2972: + ldrh w1, [x23,6] + cmp w1, 1 + bls .L2976 + ldrh w2, [x0,26] + ldrh w1, [x0,24] + cmp w2, w1 + bcc .L2992 + add x20, x20, :lo12:.LANCHOR4 + mov w1, 1 + strb w1, [x20,1010] + ldrh w1, [x0,56] + add w2, w1, 1 + add x1, x0, x1, sxtw 1 + strh w2, [x0,56] + ldrh w2, [x0] + strh w2, [x1,58] + mov w1, -1 + strh w1, [x0] + b .L2885 +.L2976: + add x20, x20, :lo12:.LANCHOR4 + mov w1, 5 + ldrh w2, [x0,26] + strb w1, [x20,1010] + ldrh w1, [x0,24] + cmp w2, w1 + bcc .L2977 + ldrh w1, [x0,56] + add w2, w1, 1 + add x1, x0, x1, sxtw 1 + strh w2, [x0,56] + ldrh w2, [x0] + strh w2, [x1,58] + mov w1, -1 + strh w1, [x0] +.L2977: + add x20, x19, :lo12:.LANCHOR0 + bl ftl_flush + bl sblk_wait_write_queue_completed + bl gc_write_completed + ldr x0, [x20,2792] + ldrh w1, [x22,80] + strh w1, [x0,128] + bl pm_flush + bl ftl_ext_info_flush + strh wzr, [x20,2864] + ldrb w2, [x20,3193] + ldrh w1, [x20,3234] + strh w1, [x20,2866] + cmp w2, 2 + strh w2, [x20,2868] + bne .L2978 + lsl w1, w1, 1 + strh w1, [x20,2866] + mov w1, 1 + strh w1, [x20,2868] +.L2978: + add x19, x19, :lo12:.LANCHOR0 + strh wzr, [x19,2870] + b .L2885 +.L2992: + sub w21, w21, #1 + bl timer_get_time + uxtb w21, w21 + b .L2966 +.L2892: + add x22, x19, :lo12:.LANCHOR0 +.L3022: + bl gc_check_data_one_wl + cbz w0, .L2980 + add x19, x19, :lo12:.LANCHOR0 + add x20, x20, :lo12:.LANCHOR4 + ldr x0, [x19,2792] + strh wzr, [x19,2904] + ldrh w0, [x0,80] + bl ftl_free_sblk + ldr x1, [x19,2792] + mov w0, -1 + ldr x2, [x19,2800] + strh w0, [x1,80] + strh w0, [x2,126] + strh w0, [x1,130] + ldr x0, [x19,2856] + bl buf_free + str xzr, [x19,2856] + strb wzr, [x20,1010] +.L3050: + bl flt_sys_flush + b .L2885 +.L2980: + ldrh w1, [x22,2864] + ldrh w0, [x22,2866] + cmp w1, w0 + bcc .L2981 + add x20, x20, :lo12:.LANCHOR4 + mov w0, 6 + strb w0, [x20,1010] + ldr x0, [x22,2856] + bl buf_free + str xzr, [x22,2856] + b .L2885 +.L2981: + cmp w25, 7 + bls .L3022 + b .L2885 +.L2893: + bl gc_update_l2p_map_new + mov w21, -1 + bl gc_free_src_blk + add x19, x19, :lo12:.LANCHOR0 + bl ftl_flush + add x20, x20, :lo12:.LANCHOR4 + bl pm_flush + strh w21, [x22,80] + bl ftl_ext_info_flush + ldr x0, [x19,2800] + strh w21, [x0,126] + mov w0, 0 + bl ftl_info_flush + strb wzr, [x20,1010] + bl print_ftl_debug_info +.L2885: + mov w0, 16 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size zftl_do_gc, .-zftl_do_gc + .align 2 + .global zftl_write + .type zftl_write, %function +zftl_write: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + mov w28, w2 + mov x25, x3 + cbnz w0, .L3052 + adrp x0, .LANCHOR0+4 + ldr w3, [x0,#:lo12:.LANCHOR0+4] + mov w0, 24576 + b .L3053 +.L3052: + cmp w0, 3 + mov w19, -1 + bhi .L3054 + lsl w0, w0, 13 + mov w3, 8192 +.L3053: + add w2, w1, w28 + mov w19, -1 + cmp w2, w3 + bhi .L3054 + adrp x22, .LANCHOR0 + add w27, w0, w1 + add x0, x22, :lo12:.LANCHOR0 + add w21, w28, w19 + add w21, w21, w27 + add w24, w27, w28 + ldrb w0, [x0,2776] + udiv w23, w27, w0 + mov w20, w23 + udiv w21, w21, w0 + sub w19, w21, w23 + add w19, w19, 1 +.L3055: + cbz w19, .L3068 + mov w0, 0 + bl buf_alloc + mov x26, x0 + cbnz x0, .L3056 + bl ftl_write_commit + b .L3055 +.L3056: + strb wzr, [x0,57] + add x0, x22, :lo12:.LANCHOR0 + cmp w20, w23 + ldrb w4, [x0,2776] + cset w0, eq + strb w4, [x26,56] + cmp w20, w21 + beq .L3058 + cbz w0, .L3059 + b .L3066 +.L3058: + cbz w0, .L3060 +.L3066: + udiv w0, w27, w4 + msub w0, w0, w4, w27 + uxtb w0, w0 + strb w0, [x26,57] + sub w4, w4, w0 + uxtb w4, w4 + cmp w4, w28 + csel w4, w28, w4, hi + b .L3067 +.L3060: + msub w4, w4, w20, w24 +.L3067: + strb w4, [x26,56] +.L3059: + ldrb w1, [x26,57] + sub w19, w19, #1 + ldr x0, [x26,8] + ldrb w2, [x26,56] + add x0, x0, x1, lsl 9 + mov x1, x25 + lsl w2, w2, 9 + bl ftl_memcpy + str w20, [x26,36] + add x0, x22, :lo12:.LANCHOR0 + add w20, w20, 1 + ldr x1, [x0,2800] + ldr w0, [x1,8] + add w2, w0, 1 + str w2, [x1,8] + str w0, [x26,32] + mov x0, x26 + bl ftl_write_buf + ldrb w0, [x26,56] + add x25, x25, x0, lsl 9 + b .L3055 +.L3068: + bl ftl_write_commit + mov w0, w19 + mov w1, 1 + bl zftl_do_gc +.L3054: + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size zftl_write, .-zftl_write + .align 2 + .global zftl_vendor_write + .type zftl_vendor_write, %function +zftl_vendor_write: + stp x29, x30, [sp, -16]! + mov x3, x2 + add w1, w0, 512 + add x29, sp, 0 + mov w2, 1 + mov w0, 2 + bl zftl_write + ldp x29, x30, [sp], 16 + ret + .size zftl_vendor_write, .-zftl_vendor_write + .align 2 + .global zftl_sys_write + .type zftl_sys_write, %function +zftl_sys_write: + stp x29, x30, [sp, -16]! + mov w1, w0 + mov x3, x2 + add x29, sp, 0 + mov w2, 1 + mov w0, 2 + bl zftl_write + ldp x29, x30, [sp], 16 + ret + .size zftl_sys_write, .-zftl_sys_write + .align 2 + .global id_block_prog_msb_ff_data + .type id_block_prog_msb_ff_data, %function +id_block_prog_msb_ff_data: + stp x29, x30, [sp, -96]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + stp x23, x24, [sp,48] + uxtb w23, w0 + add x0, x21, :lo12:.LANCHOR0 + stp x19, x20, [sp,16] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + adrp x20, .LANCHOR4 + uxth w19, w2 + ldr x0, [x0,48] + ldrb w2, [x0,19] + add x0, x20, :lo12:.LANCHOR4 + ldrb w0, [x0,1136] + cbnz w0, .L3071 + sub w0, w2, #5 + uxtb w0, w0 + cmp w0, 2 + bls .L3073 + cmp w2, 68 + beq .L3073 + sub w2, w2, #19 + and w2, w2, -17 + uxtb w2, w2 + cbnz w2, .L3071 +.L3073: + adrp x24, .LC244 + mov w25, w1 + add x24, x24, :lo12:.LC244 + add x20, x20, :lo12:.LANCHOR4 + mov w27, 65535 +.L3075: + add x28, x21, :lo12:.LANCHOR0 + ldr x0, [x28,48] + ldrh w0, [x0,10] + cmp w0, w19 + bls .L3071 + sub x22, x20, #52 + add w26, w19, w25 + mov x0, x24 + mov w1, w19 + mov w2, w26 + ldrh w3, [x22,w19,sxtw 1] + bl printk + ldrh w0, [x22,w19,sxtw 1] + cmp w0, w27 + bne .L3071 + ldr x0, [x20,1072] + mov w1, 255 + mov w2, 16384 + add w19, w19, 1 + bl ftl_memset + uxth w19, w19 + ldr x4, [x28,48] + mov w0, w23 + ldr x2, [x20,1072] + mov w1, w26 + ldrb w4, [x4,9] + mov x3, x2 + bl flash_prog_page + b .L3075 +.L3071: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 96 + ret + .size id_block_prog_msb_ff_data, .-id_block_prog_msb_ff_data + .align 2 + .global write_idblock + .type write_idblock, %function +write_idblock: + stp x29, x30, [sp, -208]! + add x29, sp, 0 + stp x21, x22, [sp,32] + adrp x21, .LANCHOR0 + stp x19, x20, [sp,16] + mov w19, w0 + add x0, x21, :lo12:.LANCHOR0 + stp x25, x26, [sp,64] + stp x23, x24, [sp,48] + stp x27, x28, [sp,80] + mov x26, x1 + ldr x0, [x0,48] + ldrb w23, [x0,9] + ldrh w20, [x0,10] + mov w0, 59392 + movk w0, 0x3, lsl 16 + bl ftl_malloc + mov x22, x0 + mov w0, -1 + cbz x22, .L3111 + add w19, w19, 511 + add x2, x26, 253952 + lsr w19, w19, 9 + add x2, x2, 2044 + mov w0, 0 + mov w24, 63999 + mov w3, 4097 +.L3082: + ldr w1, [x2] + cbnz w1, .L3079 + ldr w1, [x26,w0,uxtw 2] + add w0, w0, 1 + cmp w0, w3 + sub w24, w24, #1 + csel w0, w0, wzr, cc + str w1, [x2],-4 + cmp w24, 4096 + bne .L3082 + b .L3081 +.L3079: + adrp x0, .LC245 + mov w2, w24 + add x0, x0, :lo12:.LC245 + bl printk +.L3081: + add x0, x21, :lo12:.LANCHOR0 + add w1, w19, 128 + mul w20, w20, w23 + mov w25, 0 + ldr x2, [x0,48] + ldrh w0, [x2,10] + ldrb w19, [x2,12] + mov w2, w24 + lsl w0, w0, 2 + sdiv w19, w0, w19 + mov w0, 500 + cmp w19, 500 + csel w19, w19, w0, ls + adrp x0, .LC246 + cmp w19, w1 + add x0, x0, :lo12:.LC246 + csel w19, w19, w1, ls + ldr w1, [x26,w24,uxtw 2] + mov w3, w19 + bl printk + str w25, [x29,140] + uxth w0, w20 + str w0, [x29,116] +.L3101: + mov w1, 0 + mov x0, x22 + mov w2, 512 + add x24, x21, :lo12:.LANCHOR0 + bl ftl_memset + ldr x0, [x24,152] + ldr w1, [x29,140] + add x0, x0, x1, uxtw + ldrb w20, [x0,32] + cmp w20, 255 + beq .L3083 + ldr w0, [x29,116] + mul w20, w20, w0 + ldr x0, [x24,48] + ldrb w27, [x0,9] + ldrh w23, [x0,10] + ldrb w0, [x24,144] + udiv w1, w20, w27 + str w0, [x29,112] + mul w23, w27, w23 + mov w0, 0 + strb wzr, [x24,144] + uxth w23, w23 + bl flash_erase_block + udiv w0, w20, w23 + msub w0, w0, w23, w20 + str w0, [x29,136] + sub w28, w20, w0 + cmp w20, w28 + bne .L3105 + ldrb w0, [x21,#:lo12:.LANCHOR0] + cmp w0, 9 + bne .L3105 + adrp x0, .LANCHOR4 + mov w1, 0 + add x0, x0, :lo12:.LANCHOR4 + mov w2, 1024 + ldr x3, [x0,1120] + str x3, [x29,128] + mov x0, x3 + bl ftl_memset + ldr x3, [x29,128] + mov w0, 18766 + movk w0, 0x464e, lsl 16 + mov w1, 12 + cmp w27, 8 + str w0, [x3] + str w1, [x3,4] + str wzr, [x3,12] + ldr x2, [x24,48] + ldrb w0, [x2,29] + strb w0, [x3,16] + mov w0, 4 + strb w0, [x3,17] + ldrh w0, [x2,10] + ldrb w2, [x2,12] + strb wzr, [x3,20] + strh wzr, [x3,22] + sdiv w0, w0, w2 + mov w2, 16 + strh w0, [x3,18] + mov w0, 70 + csel w0, w0, w2, hi + strb w0, [x3,21] + add x0, x3, 12 + bl js_hash + ldr x3, [x29,128] + str w0, [x3,8] + sub w0, w19, #4 + str w0, [x29,128] + b .L3084 +.L3105: + str w19, [x29,128] + mov x3, 0 +.L3084: + str x26, [x29,120] + mov w24, 0 + add x23, x21, :lo12:.LANCHOR0 +.L3086: + cmp w24, w19 + bcs .L3119 + ldr w0, [x29,136] + adrp x2, .LANCHOR4 + add x2, x2, :lo12:.LANCHOR4 + add w4, w24, w0 + add x0, x23, 172 + ubfx x4, x4, 2, 16 + add w1, w4, 1 + ldrb w2, [x2,1136] + ldrh w0, [x0,w1,sxtw 1] + cbz w2, .L3088 + ldrb w6, [x23,168] + lsl w0, w1, 1 + cmp w6, wzr + csel w0, w0, w1, ne +.L3088: + ldrb w1, [x23] + cmp w1, 9 + beq .L3118 + sub w0, w0, #1 + lsl w0, w0, 2 +.L3118: + str w0, [x29,144] + mov w0, 61424 + str w0, [x29,148] + add x0, x23, 172 + ldrh w0, [x0,w4,sxtw 1] + cbnz w2, .L3092 + mov w4, w0 + b .L3093 +.L3092: + ldrb w1, [x23,168] + lsl w0, w4, 1 + cmp w1, wzr + csel w4, w0, w4, ne +.L3093: + mul w0, w4, w27 + cbnz x3, .L3094 + ldr x1, [x29,120] + add w0, w0, w28 + add x2, x29, 144 + str x4, [x29,104] + bl fw_flash_page_prog.constprop.30 + adrp x0, .LANCHOR4 + ldr x4, [x29,104] + add x0, x0, :lo12:.LANCHOR4 + ldrb w0, [x0,1136] + cbnz w0, .L3095 + udiv w1, w28, w27 + add w2, w4, 1 + bl id_block_prog_msb_ff_data +.L3095: + ldr x0, [x29,120] + add x0, x0, 2048 + str x0, [x29,120] + b .L3096 +.L3094: + add w0, w0, w28 + mov x1, x3 + add x2, x29, 144 + bl fw_flash_page_prog.constprop.30 +.L3096: + add w24, w24, 4 + mov x3, 0 + uxth w24, w24 + b .L3086 +.L3119: + add x0, x21, :lo12:.LANCHOR0 + ldrb w1, [x29,112] + mov x2, x22 + strb w1, [x0,144] + mov w0, w20 + ldr w1, [x29,128] + bl id_block_read_data.constprop.29 + ldr w0, [x29,128] + lsl w23, w0, 7 + mov x0, 0 +.L3098: + cmp w23, w0 + bls .L3120 + ldr w2, [x22,x0,lsl 2] + add x0, x0, 1 + add x1, x26, x0, lsl 2 + ldr w1, [x1,-4] + cmp w2, w1 + beq .L3098 + mov x0, x22 + mov w1, 0 + mov w2, 512 + bl ftl_memset + mov w1, w20 + mov w0, 0 + bl flash_erase_block + b .L3083 +.L3120: + add w25, w25, 1 + cmp w25, 5 + bhi .L3102 +.L3083: + ldr w0, [x29,140] + add w0, w0, 1 + str w0, [x29,140] + cmp w0, 4 + bne .L3101 +.L3102: + mov x0, x22 + bl ftl_free + cmp w25, wzr + csetm w0, eq +.L3111: + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 208 + ret + .size write_idblock, .-write_idblock + .align 2 + .global CRC_32 + .type CRC_32, %function +CRC_32: + mov x2, 0 + adrp x3, .LANCHOR2 + mov x5, x0 + add x3, x3, :lo12:.LANCHOR2 + mov w0, w2 +.L3122: + cmp w1, w2 + bls .L3124 + ldrb w4, [x5,x2] + add x6, x3, 2104 + add x2, x2, 1 + eor w4, w4, w0, lsr 24 + ldr w4, [x6,w4,uxtw 2] + eor w0, w4, w0, lsl 8 + b .L3122 +.L3124: + ret + .size CRC_32, .-CRC_32 + .align 2 + .global rknand_sys_storage_ioctl + .type rknand_sys_storage_ioctl, %function +rknand_sys_storage_ioctl: + sub sp, sp, #528 + mov w0, 29187 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + stp x29, x30, [sp, -48]! + add x29, sp, 0 + stp x19, x20, [sp,16] + str x21, [sp,32] + mov w19, w1 + mov x20, x2 + beq .L3127 + mov w0, 29187 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + bhi .L3128 + mov w0, 25726 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3129 + mov w0, 25726 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + bhi .L3130 + mov w0, 25601 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3131 + mov w0, 25601 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + bhi .L3132 + mov w0, 25364 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + bne .L3188 + bl rknand_dev_flush + b .L3222 +.L3132: + mov w0, 25602 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3134 + mov w0, 25603 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3135 + b .L3188 +.L3130: + mov w0, 27688 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3136 + mov w0, 27688 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + bhi .L3137 + mov w0, 25727 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3138 + b .L3188 +.L3137: + mov w0, 27698 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3136 + mov w0, 27708 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3136 + b .L3188 +.L3128: + mov w0, 29267 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3139 + mov w0, 29267 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + bhi .L3140 + mov w0, 29189 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3141 + mov w0, 29189 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + bcc .L3142 + mov w0, 29210 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3143 + mov w0, 29266 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3144 + b .L3188 +.L3140: + mov w0, 30225 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3145 + mov w0, 30225 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + bhi .L3146 + mov w0, 29268 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3147 + mov w0, 30224 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3148 + b .L3188 +.L3146: + mov w0, 30226 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3148 + mov w0, 30227 + movk w0, 0x4004, lsl 16 + cmp w1, w0 + beq .L3145 + b .L3188 +.L3142: + adrp x0, .LC247 + add x0, x0, :lo12:.LC247 + bl printk + mov w0, 4096 + bl ftl_malloc + mov x19, x0 + cbnz x0, .L3149 +.L3154: + mov x0, -12 + b .L3126 +.L3149: + mov x1, x20 + mov x2, 512 + bl rk_copy_from_user + cbnz x0, .L3229 + adrp x0, .LC249 + ldr w1, [x19] + ldr w2, [x19,4] + add x0, x0, :lo12:.LC249 + bl printk + ldr w0, [x19,4] + str w0, [x29,52] + cmp w0, 8 + bhi .L3226 + bl rknand_device_lock + ldr w1, [x29,52] + mov x2, x19 + ldr w0, [x19] + bl id_block_read_data.constprop.29 + bl rknand_device_unlock + ldr w2, [x29,52] + mov x0, x20 + mov x1, x19 + ubfiz x2, x2, 9, 23 + bl rk_copy_to_user + cbz x0, .L3232 + adrp x0, .LC250 + add x0, x0, :lo12:.LC250 +.L3224: + bl printk +.L3226: + mov x0, x19 +.L3227: + bl ftl_free +.L3225: + mov x0, -14 + b .L3126 +.L3141: + adrp x0, .LC251 + add x0, x0, :lo12:.LC251 + bl printk + mov w0, 4096 + bl ftl_malloc + mov x19, x0 + cbz x0, .L3154 + mov x1, x20 + mov x2, 4096 + bl rk_copy_from_user + cbnz x0, .L3229 + ldr w1, [x19] + adrp x0, .LC252 + ldr w2, [x19,4] + add x0, x0, :lo12:.LC252 + bl printk + adrp x0, .LANCHOR9 + add x21, x0, :lo12:.LANCHOR9 + mov x20, x0 + ldr x1, [x21,1144] + cbnz x1, .L3156 + mov w0, 260096 + bl ftl_malloc + str x0, [x21,1144] + cbz x0, .L3226 +.L3156: + ldr w2, [x19,4] + cmp w2, 4088 + bhi .L3226 + ldr w0, [x19] + mov w1, 55296 + movk w1, 0x3, lsl 16 + cmp w0, w1 + bhi .L3226 + add x20, x20, :lo12:.LANCHOR9 + uxtw x2, w2 + ldr x1, [x20,1144] + add x0, x1, x0, uxtw + add x1, x19, 8 + bl memcpy +.L3232: + mov x0, x19 + bl ftl_free + b .L3222 +.L3144: + adrp x0, .LC253 + add x0, x0, :lo12:.LC253 + bl printk + mov w0, 4096 + bl ftl_malloc + mov x19, x0 + cbz x0, .L3154 + mov x1, x20 + mov x2, 28 + bl rk_copy_from_user + cbz x0, .L3158 +.L3229: + adrp x0, .LC248 + add x0, x0, :lo12:.LC248 + b .L3224 +.L3158: + ldr w1, [x19] + adrp x0, .LC254 + ldr w2, [x19,4] + add x0, x0, :lo12:.LC254 + bl printk + ldr w1, [x19] + mov w0, 59392 + movk w0, 0x3, lsl 16 + cmp w1, w0 + bhi .L3226 + adrp x20, .LANCHOR9 + add x20, x20, :lo12:.LANCHOR9 + ldr x0, [x20,1144] + cbz x0, .L3226 + bl CRC_32 + ldr w1, [x19,4] + cmp w1, w0 + beq .L3161 + mov x0, x19 + bl ftl_free + mov x0, -2 + b .L3126 +.L3161: + bl rknand_device_lock + ldr x1, [x20,1144] + add x2, x19, 8 + ldr w0, [x19] + bl write_idblock + bl rknand_device_unlock + ldr x0, [x20,1144] + bl ftl_free + str xzr, [x20,1144] + b .L3232 +.L3143: + adrp x0, .LC255 + add x0, x0, :lo12:.LC255 + bl printk + mov w0, 4096 + bl ftl_malloc + mov x21, x0 + cbz x0, .L3154 + bl ReadFlashInfo + mov x0, x20 + mov x1, x21 + mov x2, 11 + b .L3234 +.L3127: + adrp x0, .LC256 + add x0, x0, :lo12:.LC256 + bl printk + bl nand_blk_add_whole_disk + mov w0, 4096 + bl ftl_malloc + mov x21, x0 + cbz x0, .L3154 + mov w1, 0 + mov w2, 64 + bl ftl_memset + mov x0, x20 + mov x1, x21 + mov x2, 64 + b .L3234 +.L3139: + adrp x0, .LC257 + add x0, x0, :lo12:.LC257 + bl printk + adrp x0, .LANCHOR9+1152 + add x1, x29, 52 + mov x2, 4 + ldr x0, [x0,#:lo12:.LANCHOR9+1152] + ldr w0, [x0,20] + str w0, [x29,52] + mov x0, x20 +.L3217: + bl rk_copy_to_user + cbnz x0, .L3225 + b .L3222 +.L3147: + adrp x0, .LC258 + add x0, x0, :lo12:.LC258 + bl printk + mov w0, 4096 + bl ftl_malloc + mov x21, x0 + cbz x0, .L3154 + bl rknand_device_lock + mov w1, 264 + mov w2, 2 + mov x3, x21 + mov w0, 16 + bl FtlRead + bl rknand_device_unlock + mov x0, x20 + mov x1, x21 + mov x2, 1024 +.L3234: + bl rk_copy_to_user + mov x19, x0 + mov x0, x21 + cbnz x19, .L3227 + bl ftl_free + b .L3153 +.L3131: + adrp x0, .LC259 + add x0, x0, :lo12:.LC259 + bl printk + add x0, x29, 56 + mov x1, x20 + mov x2, 520 + bl rk_copy_from_user + mov x19, x0 + cbz x0, .L3166 +.L3171: + adrp x0, .LC248 + add x0, x0, :lo12:.LC248 + bl printk + b .L3225 +.L3166: + ldr w1, [x29,56] + mov w0, 21060 + movk w0, 0x4b4d, lsl 16 + cmp w1, w0 + beq .L3167 +.L3168: + mov x19, -1 + b .L3153 +.L3167: + ldr w0, [x29,60] + cmp w0, 512 + bhi .L3168 + adrp x21, .LANCHOR9 + add x0, x29, 56 + add x21, x21, :lo12:.LANCHOR9 + mov x2, 512 + ldr x1, [x21,1152] + bl memcpy + ldr w1, [x21,1160] + mov w0, 5161 + movk w0, 0xc059, lsl 16 + cmp w1, w0 + beq .L3169 + add x0, x29, 120 + mov w1, w19 + mov x2, 128 + str w19, [x29,64] + str w19, [x29,68] + bl memset +.L3169: + add x0, x29, 312 + mov w1, 0 + mov x2, 256 + str wzr, [x29,72] + bl memset + b .L3231 +.L3134: + adrp x0, .LC260 + add x0, x0, :lo12:.LC260 + bl printk + add x0, x29, 56 + mov x1, x20 + mov x2, 520 + bl rk_copy_from_user + cbnz x0, .L3171 + ldr w1, [x29,56] + mov w0, 21060 + movk w0, 0x4b4d, lsl 16 + cmp w1, w0 + bne .L3168 + ldr w0, [x29,60] + cmp w0, 512 + bhi .L3168 + adrp x1, .LANCHOR9 + mov w2, 5161 + add x1, x1, :lo12:.LANCHOR9 + movk w2, 0xc059, lsl 16 + mov x0, -2 + ldr w3, [x1,1160] + cmp w3, w2 + bne .L3126 + ldr w2, [x29,68] + mov x0, -3 + sub w3, w2, #1 + cmp w3, 127 + bhi .L3126 + ldr x19, [x1,1152] + add x1, x29, 120 + add x0, x19, 64 + str w2, [x19,12] + ldr w2, [x29,68] + bl memcpy + mov w0, 1 + mov x1, x19 + b .L3223 +.L3138: + adrp x0, .LC261 + add x0, x0, :lo12:.LC261 + bl printk + add x0, x29, 56 + mov x1, x20 + mov x2, 520 + bl rk_copy_from_user + cbnz x0, .L3171 + ldr w1, [x29,56] + mov w0, 17476 + movk w0, 0x4253, lsl 16 + cmp w1, w0 + bne .L3168 + ldr w0, [x29,60] + cmp w0, 512 + bhi .L3168 + adrp x19, .LANCHOR9 + add x0, x19, :lo12:.LANCHOR9 + ldr w1, [x0,1164] + cbnz w1, .L3172 +.L3175: + mov x0, 0 + b .L3126 +.L3172: + ldr x1, [x0,1168] + mov w2, 22867 + movk w2, 0x4453, lsl 16 + ldr w3, [x1] + cmp w3, w2 + beq .L3173 + mov w2, 22867 + movk w2, 0x4453, lsl 16 + str w2, [x1] + mov w2, 504 + ldr x1, [x0,1168] + str w2, [x1,4] + ldr x0, [x0,1168] + str wzr, [x0,8] + str wzr, [x0,12] +.L3173: + add x20, x19, :lo12:.LANCHOR9 + mov w0, 0 + ldr x1, [x20,1168] + str wzr, [x1,16] + bl StorageSysDataStore + ldr x0, [x20,1152] + mov w1, 21060 + movk w1, 0x4b4d, lsl 16 + ldr w2, [x0] + cmp w2, w1 + beq .L3174 + mov w1, 21060 + movk w1, 0x4b4d, lsl 16 + str w1, [x0] + mov w1, 504 + ldr x0, [x20,1152] + str w1, [x0,4] + ldr x0, [x20,1152] + str wzr, [x0,8] +.L3174: + add x19, x19, :lo12:.LANCHOR9 + mov w1, 0 + mov x2, 128 + ldr x20, [x19,1152] + add x0, x20, 64 + str wzr, [x20,12] + bl memset + mov w0, 1 + mov x1, x20 + bl StorageSysDataStore + str wzr, [x19,1164] + str wzr, [x19,1160] + b .L3222 +.L3129: + adrp x0, .LC262 + add x0, x0, :lo12:.LC262 + bl printk + add x0, x29, 56 + mov x1, x20 + mov x2, 520 + bl rk_copy_from_user + cbnz x0, .L3171 + ldr w2, [x29,56] + mov w1, 20037 + movk w1, 0x4253, lsl 16 + cmp w2, w1 + bne .L3168 + ldr w1, [x29,60] + cmp w1, 512 + bhi .L3168 + adrp x19, .LANCHOR9 + add x1, x19, :lo12:.LANCHOR9 + ldr w2, [x1,1164] + cmp w2, 1 + beq .L3175 + ldr x2, [x1,1168] + mov w3, 22867 + movk w3, 0x4453, lsl 16 + ldr w4, [x2] + cmp w4, w3 + beq .L3176 + mov w3, 22867 + movk w3, 0x4453, lsl 16 + str w3, [x2] + mov w3, 504 + ldr x2, [x1,1168] + str w3, [x2,4] + ldr x1, [x1,1168] + str w0, [x1,8] + str w0, [x1,12] +.L3176: + add x20, x19, :lo12:.LANCHOR9 + mov w0, 1 + ldr x1, [x20,1168] + str w0, [x1,16] + mov w0, 0 + bl StorageSysDataStore + ldr x0, [x20,1152] + mov w1, 21060 + movk w1, 0x4b4d, lsl 16 + ldr w2, [x0] + cmp w2, w1 + beq .L3177 + mov w1, 21060 + movk w1, 0x4b4d, lsl 16 + str w1, [x0] + mov w1, 504 + ldr x0, [x20,1152] + str w1, [x0,4] + ldr x0, [x20,1152] + str wzr, [x0,8] +.L3177: + add x19, x19, :lo12:.LANCHOR9 + mov w1, 0 + mov x2, 128 + ldr x20, [x19,1152] + add x0, x20, 64 + str wzr, [x20,12] + bl memset + mov w0, 1 + mov x1, x20 + bl StorageSysDataStore + mov w0, 1 + str w0, [x19,1164] + b .L3222 +.L3135: + adrp x0, .LC263 + add x0, x0, :lo12:.LC263 + bl printk + add x0, x29, 56 + mov x1, x20 + mov x2, 520 + bl rk_copy_from_user + cbnz x0, .L3171 + ldr w1, [x29,56] + mov w0, 20051 + movk w0, 0x4144, lsl 16 + cmp w1, w0 + bne .L3168 + ldr w2, [x29,60] + cmp w2, 512 + bhi .L3168 + adrp x1, .LANCHOR9 + add x0, x29, 64 + add x1, x1, :lo12:.LANCHOR9 + uxtw x2, w2 + add x1, x1, 1176 + b .L3230 +.L3136: + mov w0, 27698 + movk w0, 0x4004, lsl 16 + cmp w19, w0 + bne .L3178 + adrp x0, .LC264 + add x0, x0, :lo12:.LC264 + b .L3220 +.L3178: + mov w0, 27708 + movk w0, 0x4004, lsl 16 + cmp w19, w0 + bne .L3180 + adrp x0, .LC265 + add x0, x0, :lo12:.LC265 + b .L3220 +.L3180: + adrp x0, .LC266 + add x0, x0, :lo12:.LC266 +.L3220: + bl printk + add x0, x29, 56 + mov x1, x20 + mov x2, 520 + bl rk_copy_from_user + cbnz x0, .L3171 + ldr w1, [x29,56] + mov w0, 17227 + movk w0, 0x4c4f, lsl 16 + cmp w1, w0 + bne .L3225 + mov w0, 27708 + movk w0, 0x4004, lsl 16 + cmp w19, w0 + adrp x0, .LANCHOR9 + bne .L3181 + add x0, x0, :lo12:.LANCHOR9 + add x1, x29, 56 + mov x2, 16 + ldr x0, [x0,1152] + ldr w0, [x0,20] + str w0, [x29,60] + strb w0, [x29,64] + mov x0, x20 + bl rk_copy_to_user + cbz x0, .L3126 + b .L3225 +.L3181: + add x20, x0, :lo12:.LANCHOR9 + ldr w1, [x20,1688] + cmp w1, 10 + bhi .L3225 + ldr x1, [x20,1152] + ldr w2, [x29,60] + ldr w3, [x1,24] + cmp w3, w2 + beq .L3182 + cbz w3, .L3182 + adrp x0, .LC267 + mov w1, w2 + add x0, x0, :lo12:.LC267 + bl printk + ldr w0, [x20,1688] + add w0, w0, 1 + str w0, [x20,1688] + b .L3225 +.L3182: + add x0, x0, :lo12:.LANCHOR9 + str wzr, [x0,1688] + mov w0, 27698 + movk w0, 0x4004, lsl 16 + cmp w19, w0 + bne .L3183 + str wzr, [x1,20] + str wzr, [x1,24] + b .L3184 +.L3183: + mov w0, 1 + str w2, [x1,24] + str w0, [x1,20] +.L3184: + mov w0, 1 + mov x19, -2 + bl StorageSysDataStore + cmn w0, #1 + bne .L3222 + b .L3153 +.L3148: + adrp x0, .LC268 + add x0, x0, :lo12:.LC268 + bl printk + add x0, x29, 56 + mov x1, x20 + mov x2, 520 + bl rk_copy_from_user + cbnz x0, .L3171 + ldr w1, [x29,56] + mov w0, 17750 + movk w0, 0x444e, lsl 16 + cmp w1, w0 + bne .L3168 + ldr w2, [x29,60] + cmp w2, 504 + bhi .L3168 + mov w0, 30224 + adrp x1, .LANCHOR9 + movk w0, 0x4004, lsl 16 + uxtw x2, w2 + cmp w19, w0 + add x1, x1, :lo12:.LANCHOR9 + add x0, x29, 64 + bne .L3185 + ldr x1, [x1,1696] + b .L3221 +.L3185: + ldr x1, [x1,1704] +.L3221: + add x1, x1, 8 +.L3230: + bl memcpy +.L3231: + mov x0, x20 + add x1, x29, 56 + mov x2, 520 + b .L3217 +.L3145: + adrp x0, .LC269 + add x0, x0, :lo12:.LC269 + bl printk + add x0, x29, 56 + mov x1, x20 + mov x2, 520 + bl rk_copy_from_user + cbnz x0, .L3171 + ldr w1, [x29,56] + mov w0, 17750 + movk w0, 0x444e, lsl 16 + cmp w1, w0 + bne .L3168 + ldr w2, [x29,60] + cmp w2, 504 + bhi .L3168 + mov w0, 30225 + add w2, w2, 8 + movk w0, 0x4004, lsl 16 + cmp w19, w0 + adrp x19, .LANCHOR9 + add x19, x19, :lo12:.LANCHOR9 + bne .L3187 + ldr x0, [x19,1696] + add x1, x29, 56 + bl memcpy + mov w0, 2 + ldr x1, [x19,1696] + b .L3223 +.L3187: + ldr x0, [x19,1704] + add x1, x29, 56 + bl memcpy + ldr x1, [x19,1704] + mov w0, 3 +.L3223: + bl StorageSysDataStore + uxtw x19, w0 + b .L3153 +.L3222: + mov x19, 0 +.L3153: + adrp x0, .LC270 + mov x1, x19 + add x0, x0, :lo12:.LC270 + bl printk + mov x0, x19 + b .L3126 +.L3188: + mov x0, -22 +.L3126: + ldp x19, x20, [sp,16] + ldr x21, [sp,32] + ldp x29, x30, [sp], 48 + add sp, sp, 528 + ret + .size rknand_sys_storage_ioctl, .-rknand_sys_storage_ioctl + .align 2 + .global rk_ftl_storage_sys_init + .type rk_ftl_storage_sys_init, %function +rk_ftl_storage_sys_init: + stp x29, x30, [sp, -48]! + mov w2, 512 + add x29, sp, 0 + stp x19, x20, [sp,16] + adrp x20, .LANCHOR9 + add x19, x20, :lo12:.LANCHOR9 + stp x21, x22, [sp,32] + ldr x1, [x19,1120] + str x1, [x19,1168] + add x0, x1, 512 + str x0, [x19,1152] + add x0, x1, 1024 + add x1, x1, 1536 + str x0, [x19,1696] + add x0, x19, 1176 + str xzr, [x19,1144] + str x1, [x19,1704] + bl ftl_memcpy + ldr x21, [x19,1168] + str wzr, [x19,1160] + str wzr, [x19,1688] + ldr w0, [x21,16] + ldr w22, [x21,508] + str w0, [x19,1164] + cbz w22, .L3237 + mov x0, x21 + mov w1, 508 + bl js_hash + cmp w22, w0 + beq .L3237 + adrp x0, .LC271 + str wzr, [x21,16] + add x0, x0, :lo12:.LC271 + str wzr, [x19,1164] + bl printk +.L3237: + add x0, x20, :lo12:.LANCHOR9 + ldr w1, [x0,1164] + cbz w1, .L3238 + mov w1, 5161 + movk w1, 0xc059, lsl 16 + str w1, [x0,1160] +.L3238: + add x20, x20, :lo12:.LANCHOR9 + mov w0, 2 + ldr x1, [x20,1696] + bl StorageSysDataLoad + ldr x1, [x20,1704] + mov w0, 3 + bl StorageSysDataLoad + bl rknand_sys_storage_init + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size rk_ftl_storage_sys_init, .-rk_ftl_storage_sys_init + .align 2 + .global StorageSysDataDeInit + .type StorageSysDataDeInit, %function +StorageSysDataDeInit: + mov w0, 0 + ret + .size StorageSysDataDeInit, .-StorageSysDataDeInit + .align 2 + .global rk_ftl_vendor_storage_init + .type rk_ftl_vendor_storage_init, %function +rk_ftl_vendor_storage_init: + stp x29, x30, [sp, -64]! + mov w1, 193 + mov x0, 65536 + add x29, sp, 0 + movk w1, 0x240, lsl 16 + mov w2, 4 + stp x19, x20, [sp,16] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + adrp x21, .LANCHOR9 + bl kmalloc_order_trace + add x1, x21, :lo12:.LANCHOR9 + mov w19, -12 + str x0, [x1,1712] + cbz x0, .L3247 + mov w23, 0 + adrp x24, .LC272 + mov w19, w23 + mov w22, w23 + add x24, x24, :lo12:.LC272 +.L3251: + add x20, x21, :lo12:.LANCHOR9 + lsl w0, w22, 7 + mov w1, 128 + ldr x2, [x20,1712] + bl FlashBootVendorRead + cbnz w0, .L3248 + ldr x3, [x20,1712] + mov x0, x24 + add x2, x3, 61440 + ldr w1, [x3] + ldr w3, [x3,4] + ldr w2, [x2,4092] + bl printk + ldr x20, [x20,1712] + mov w0, 22084 + movk w0, 0x524b, lsl 16 + ldr w1, [x20] + cmp w1, w0 + bne .L3249 + ldr w0, [x20,4] + cmp w19, w0 + bcs .L3249 + add x1, x20, 61440 + ldr w1, [x1,4092] + cmp w1, w0 + csel w23, w23, w22, ne + csel w19, w19, w0, ne +.L3249: + cbnz w22, .L3259 + mov w22, 1 + b .L3251 +.L3259: + cbz w19, .L3252 + lsl w0, w23, 7 + mov w1, 128 + mov x2, x20 + bl FlashBootVendorRead + mov w19, w0 + cbz w0, .L3247 + b .L3248 +.L3252: + mov x0, x20 + mov w1, w19 + mov x2, 65536 + bl memset + str w22, [x20,4] + mov w0, 22084 + movk w0, 0x524b, lsl 16 + str w0, [x20] + add x0, x20, 61440 + str w22, [x0,4092] + mov w0, -1032 + strh w19, [x20,12] + strh w0, [x20,14] + b .L3247 +.L3248: + add x21, x21, :lo12:.LANCHOR9 + mov w19, -1 + ldr x0, [x21,1712] + bl kfree + str xzr, [x21,1712] +.L3247: + mov w0, w19 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x29, x30, [sp], 64 + ret + .size rk_ftl_vendor_storage_init, .-rk_ftl_vendor_storage_init + .align 2 + .global rk_ftl_vendor_read + .type rk_ftl_vendor_read, %function +rk_ftl_vendor_read: + adrp x3, .LANCHOR9+1712 + stp x29, x30, [sp, -32]! + add x29, sp, 0 + ldr x5, [x3,#:lo12:.LANCHOR9+1712] + mov w3, -1 + str x19, [sp,16] + cbz x5, .L3261 + ldrh w3, [x5,10] + mov x4, 0 +.L3262: + cmp w4, w3 + mov w6, w4 + bcs .L3266 + add x7, x5, x4, lsl 3 + add x4, x4, 1 + ldrh w7, [x7,16] + cmp w7, w0 + bne .L3262 + add x6, x5, x6, uxtw 3 + ldrh w4, [x6,20] + mov x0, x1 + ldrh w1, [x6,18] + cmp w2, w4 + csel w19, w2, w4, ls + add x1, x1, 1024 + add x1, x5, x1 + uxtw x2, w19 + bl memcpy + mov w3, w19 + b .L3261 +.L3266: + mov w3, -1 +.L3261: + mov w0, w3 + ldr x19, [sp,16] + ldp x29, x30, [sp], 32 + ret + .size rk_ftl_vendor_read, .-rk_ftl_vendor_read + .align 2 + .global rk_ftl_vendor_write + .type rk_ftl_vendor_write, %function +rk_ftl_vendor_write: + stp x29, x30, [sp, -112]! + mov w6, w0 + adrp x0, .LANCHOR9+1712 + add x29, sp, 0 + stp x19, x20, [sp,16] + ldr x19, [x0,#:lo12:.LANCHOR9+1712] + stp x25, x26, [sp,64] + stp x27, x28, [sp,80] + stp x21, x22, [sp,32] + stp x23, x24, [sp,48] + mov w26, w2 + mov x28, x1 + mov w2, -1 + cbz x19, .L3268 + add w20, w26, 63 + ldrh w3, [x19,10] + ldrh w23, [x19,8] + and w20, w20, -64 + mov x2, 0 +.L3269: + cmp w2, w3 + mov w4, w2 + bcs .L3284 + add x0, x19, x2, lsl 3 + add x2, x2, 1 + ldrh w0, [x0,16] + cmp w0, w6 + bne .L3269 + add x21, x19, x4, uxtw 3 + ldrh w24, [x21,20] + add x5, x19, 1024 + add w24, w24, 63 + and w24, w24, -64 + cmp w26, w24 + bls .L3270 + ldrh w0, [x19,14] + mov w2, -1 + cmp w0, w20 + bcc .L3268 + ldrh w21, [x21,18] + add w22, w3, w2 +.L3271: + cmp w4, w22 + uxtw x3, w4 + bcs .L3285 + add x3, x19, x3, lsl 3 + add w25, w4, 1 + add x1, x19, x25, uxtw 3 + ldrh w0, [x1,16] + str x6, [x29,96] + strh w0, [x3,16] + str x5, [x29,104] + ldrh w0, [x1,20] + strh w0, [x3,20] + strh w21, [x3,18] + add x0, x5, x21, uxtw + ldrh w27, [x1,20] + ldrh w1, [x1,18] + add w27, w27, 63 + and w27, w27, -64 + add x1, x5, x1 + and x2, x27, 131008 + add w21, w21, w27 + bl memcpy + mov w4, w25 + ldr x6, [x29,96] + ldr x5, [x29,104] + b .L3271 +.L3285: + add x3, x19, x3, lsl 3 + uxth w21, w21 + mov x1, x28 + uxtw x2, w26 + add x0, x5, x21, uxth + uxth w20, w20 + strh w21, [x3,18] + add w21, w21, w20 + strh w6, [x3,16] + strh w26, [x3,20] + bl memcpy + strh w21, [x19,12] + ldrh w0, [x19,14] + add w24, w24, w0 + sub w24, w24, w20 + strh w24, [x19,14] + b .L3283 +.L3270: + ldrh w0, [x21,18] + mov x1, x28 + uxtw x2, w26 + add x0, x5, x0 + bl memcpy + strh w26, [x21,20] + b .L3283 +.L3284: + ldrh w4, [x19,14] + mov w2, -1 + cmp w4, w20 + bcc .L3268 + add x3, x19, x3, uxth 3 + strh w6, [x3,16] + uxth w20, w20 + mov x1, x28 + ldrh w0, [x19,12] + uxtw x2, w26 + strh w0, [x3,18] + strh w26, [x3,20] + add w0, w20, w0 + sub w20, w4, w20 + strh w0, [x19,12] + strh w20, [x19,14] + ldrh w0, [x3,18] + add x0, x0, 1024 + add x0, x19, x0 + bl memcpy + ldrh w0, [x19,10] + add w0, w0, 1 + strh w0, [x19,10] +.L3283: + ldr w0, [x19,4] + add x1, x19, 61440 + mov x2, x19 + add w0, w0, 1 + str w0, [x19,4] + str w0, [x1,4092] + mov w1, 128 + ldrh w0, [x19,8] + add w0, w0, 1 + uxth w0, w0 + cmp w0, 1 + csel w0, w0, wzr, ls + strh w0, [x19,8] + lsl w0, w23, 7 + bl FlashBootVendorWrite + mov w2, 0 +.L3268: + mov w0, w2 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x23, x24, [sp,48] + ldp x25, x26, [sp,64] + ldp x27, x28, [sp,80] + ldp x29, x30, [sp], 112 + ret + .size rk_ftl_vendor_write, .-rk_ftl_vendor_write + .align 2 + .global rk_ftl_vendor_storage_ioctl + .type rk_ftl_vendor_storage_ioctl, %function +rk_ftl_vendor_storage_ioctl: + stp x29, x30, [sp, -48]! + adrp x0, kmalloc_caches+96 + add x29, sp, 0 + stp x21, x22, [sp,32] + ldr x0, [x0,#:lo12:kmalloc_caches+96] + mov w22, w1 + mov w1, 192 + mov x21, x2 + movk w1, 0x240, lsl 16 + mov x2, 4096 + stp x19, x20, [sp,16] + bl kmem_cache_alloc_trace + mov x20, -1 + mov x19, x0 + cbz x0, .L3287 + mov w1, 30209 + movk w1, 0x4004, lsl 16 + cmp w22, w1 + beq .L3289 + mov w2, 30210 + movk w2, 0x4004, lsl 16 + cmp w22, w2 + beq .L3290 + b .L3301 +.L3289: + mov x1, x21 + mov x2, 8 + bl rk_copy_from_user + cbnz x0, .L3301 + ldr w1, [x19] + mov w0, 17745 + movk w0, 0x5652, lsl 16 + cmp w1, w0 + beq .L3292 +.L3293: + mov x20, -1 + b .L3288 +.L3292: + ldrh w0, [x19,4] + add x1, x19, 8 + ldrh w2, [x19,6] + bl rk_ftl_vendor_read + cmn w0, #1 + beq .L3293 + uxth x2, w0 + strh w0, [x19,6] + mov x1, x19 + mov x0, x21 + add x2, x2, 8 + mov x20, -14 + bl rk_copy_to_user + cmp x0, xzr + csel x20, xzr, x20, eq + b .L3288 +.L3290: + mov x1, x21 + mov x2, 8 + bl rk_copy_from_user + cbnz x0, .L3301 + ldr w1, [x19] + mov w0, 17745 + movk w0, 0x5652, lsl 16 + cmp w1, w0 + bne .L3293 + ldrh w3, [x19,6] + cmp w3, 4087 + bhi .L3293 + add w2, w3, 8 + mov x0, x19 + mov x1, x21 + sxtw x2, w2 + bl rk_copy_from_user + cbnz x0, .L3301 + ldrh w0, [x19,4] + add x1, x19, 8 + ldrh w2, [x19,6] + bl rk_ftl_vendor_write + sxtw x20, w0 + b .L3288 +.L3301: + mov x20, -14 +.L3288: + mov x0, x19 + bl kfree +.L3287: + mov x0, x20 + ldp x19, x20, [sp,16] + ldp x21, x22, [sp,32] + ldp x29, x30, [sp], 48 + ret + .size rk_ftl_vendor_storage_ioctl, .-rk_ftl_vendor_storage_ioctl + .global gTable_Crc32 + .global SecureBootUnlockTryCount + .global SecureBootCheckOK + .global SecureBootEn + .global gpVendor1Info + .global gpVendor0Info + .global g_idb_buffer + .global gSnSectorData + .global gpDrmKeyInfo + .global gpBootConfig + .global gLoaderBootInfo + .global RK29_NANDC1_REG_BASE + .global RK29_NANDC_REG_BASE + .global gp_ftl_api + .global g_pm_spare + .global pm_gc_enable + .global pm_last_load_ram_id + .global pm_last_update_ram_id + .global pm_ram_info + .global sblk_gc_write_completed_queue_head + .global sblk_read_completed_queue_head + .global sblk_write_completed_queue_head + .global sblk_queue_head + .global vpn_mulit_value + .global ftl_low_format_cur_blk + .global ftl_power_lost_flag + .global ftl_vpn_update_count + .global ftl_sblk_vpn_update_id + .global ftl_sblk_lpa_tbl + .global ftl_sblk_vpn + .global gp_ftl_ext_info + .global gp_ftl_info + .global gp_blk_info + .global ftl_tmp_spare + .global ftl_info_spare + .global ftl_ext_info_data_buffer + .global ftl_info_data_buffer + .global ftl_tmp_buffer + .global g_ftl_info_blk + .global tlc_prog_order + .global gc_des_ppa_tbl + .global gc_valid_page_ppa + .global gc_page_buf_id + .global gc_pre_ppa_tbl + .global gc_lpa_tbl + .global g_gc_info + .global gc_free_slc_sblk_th + .global gc_slc_mode_vpn_th + .global gc_tlc_mode_tlc_vpn_th + .global gc_tlc_mode_slc_vpn_th + .global gc_state + .global gc_mode + .global check_vpc_tbl + .global p_read_ahead_ext_buf + .global discard_sector_count + .global read_ahead_lpa + .global write_commit_count + .global write_commit_head + .global write_buf_count + .global write_buf_head + .global ftl_flush_jiffies + .global lpa_hash + .global lpa_hash_index + .global _c_mix_max_xlc_ec_count + .global _c_mix_max_slc_ec_count + .global _min_slc_super_block + .global _max_slc_super_block + .global _max_xlc_super_block + .global _c_max_pm_sblk + .global _c_ftl_pm_page_num + .global _c_totle_log_page + .global _c_totle_data_density + .global _c_user_data_density + .global _c_totle_phy_density + .global _c_ftl_block_addr_log2 + .global _c_ftl_block_align_addr + .global _c_ftl_byte_pre_page + .global _c_ftl_nand_blks_per_die + .global _c_ftl_page_pre_slc_blk + .global _c_ftl_page_pre_blk + .global _c_ftl_blk_pre_plane + .global _c_ftl_nand_planes_num + .global _c_ftl_planes_per_die + .global _c_ftl_sec_per_page + .global _c_ftl_nand_die_num + .global _c_ftl_nand_type + .global zftl_debug + .global g_flash_blk_info + .global gp_flash_info + .global p_free_buf_head + .global free_buf_count + .global g_buf + .global g_nandc_v6_master_info + .global nandc_randomizer_en + .global nandc_hw_seed + .global fill_spare_size + .global g_nandc_ecc_bits + .global g_nandc_ver + .global gp_nandc + .global hy_f26_ref_value + .global sd15_tlc_rr + .global sd15_slc_rr + .global g_nand_para_info + .global gp_nand_para_info + .global g_nand_opt_para + .global g_msb_page_tbl + .global g_lsb_page_tbl + .global g_die_addr + .global g_die_cs_idx + .global IDByte + .global flash_read_retry + .global g_maxRetryCount + .global g_maxRegNum + .global g_retryMode + .global g_flash_toggle_mode_en + .global g_flash_3d_mlc_flag + .global g_flash_3d_tlc_flag + .global g_flash_multi_page_prog_en + .global g_flash_multi_page_read_en + .global g_flash_interface_mode + .global g_idb_ecc_bits + .global g_idb_slc_mode_enable + .global g_slc_mode_addr2 + .global g_slc_mode_enable + .global g_flash_cur_mode + .global g_flash_slc_mode + .global g_slc_page_num + .global g_totle_phy_block + .global g_block_align_addr + .global g_flash_reversd_blks + .global g_nand_max_die + .global g_flash_tmp_spare_buffer + .global g_flash_tmp_page_buffer + .global g_flash_sys_spare_buffer + .global g_flash_spare_buffer + .global g_flash_page_buffer + .section .rodata + .align 3 +.LANCHOR1 = . + 0 + .type __func__.18805, %object + .size __func__.18805, 22 +__func__.18805: + .string "nand_flash_print_info" + .zero 2 + .type __func__.18885, %object + .size __func__.18885, 11 +__func__.18885: + .string "nandc_init" + .zero 5 + .type toshiba_A19ref_value, %object + .size toshiba_A19ref_value, 45 +toshiba_A19ref_value: + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 13 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 4 + .byte 4 + .byte 124 + .byte 126 + .byte 0 + .byte 0 + .byte 124 + .byte 120 + .byte 120 + .byte 0 + .byte 124 + .byte 118 + .byte 116 + .byte 114 + .byte 0 + .byte 8 + .byte 8 + .byte 0 + .byte 0 + .byte 0 + .byte 11 + .byte 126 + .byte 118 + .byte 116 + .byte 0 + .byte 16 + .byte 118 + .byte 114 + .byte 112 + .byte 0 + .byte 2 + .byte 0 + .byte 126 + .byte 124 + .byte 0 + .zero 3 + .type toshiba_15ref_value, %object + .size toshiba_15ref_value, 95 +toshiba_15ref_value: + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 13 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 2 + .byte 4 + .byte 2 + .byte 0 + .byte 0 + .byte 8 + .byte 8 + .byte 0 + .byte 0 + .byte 0 + .byte 124 + .byte 0 + .byte 124 + .byte 124 + .byte 0 + .byte 122 + .byte 0 + .byte 122 + .byte 122 + .byte 0 + .byte 11 + .byte 126 + .byte 118 + .byte 116 + .byte 0 + .byte 120 + .byte 2 + .byte 120 + .byte 122 + .byte 0 + .byte 126 + .byte 4 + .byte 126 + .byte 122 + .byte 0 + .byte 16 + .byte 118 + .byte 114 + .byte 112 + .byte 0 + .byte 118 + .byte 4 + .byte 118 + .byte 120 + .byte 0 + .byte 4 + .byte 4 + .byte 4 + .byte 118 + .byte 0 + .byte 2 + .byte 0 + .byte 126 + .byte 124 + .byte 0 + .byte 6 + .byte 10 + .byte 6 + .byte 2 + .byte 0 + .byte 116 + .byte 124 + .byte 116 + .byte 118 + .byte 0 + .byte 4 + .byte 4 + .byte 124 + .byte 126 + .byte 0 + .byte 0 + .byte 124 + .byte 120 + .byte 120 + .byte 0 + .byte 124 + .byte 118 + .byte 116 + .byte 114 + .byte 0 + .zero 1 + .type toshiba_ref_value, %object + .size toshiba_ref_value, 8 +toshiba_ref_value: + .byte 0 + .byte 4 + .byte 124 + .byte 120 + .byte 116 + .byte 8 + .byte 12 + .byte 112 + .type __func__.18413, %object + .size __func__.18413, 28 +__func__.18413: + .string "flash_wait_device_ready_raw" + .zero 4 + .type toshiba_3D_tlc_value, %object + .size toshiba_3D_tlc_value, 399 +toshiba_3D_tlc_value: + .byte -119 + .byte -119 + .byte -119 + .byte -119 + .byte -118 + .byte -118 + .byte -118 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 5 + .byte -2 + .byte -1 + .byte 0 + .byte -3 + .byte -2 + .byte 6 + .byte -9 + .byte -12 + .byte -9 + .byte -7 + .byte -13 + .byte -12 + .byte -7 + .byte -6 + .byte -15 + .byte -15 + .byte -2 + .byte -12 + .byte -16 + .byte -6 + .byte -2 + .byte -19 + .byte -19 + .byte -6 + .byte -4 + .byte -12 + .byte -14 + .byte -2 + .byte -11 + .byte -23 + .byte -34 + .byte -4 + .byte -20 + .byte -22 + .byte -2 + .byte -7 + .byte -31 + .byte -30 + .byte -12 + .byte -20 + .byte -18 + .byte 2 + .byte -15 + .byte -19 + .byte -36 + .byte -12 + .byte -28 + .byte -34 + .byte -6 + .byte -15 + .byte -11 + .byte 2 + .byte -12 + .byte -8 + .byte -2 + .byte 2 + .byte -3 + .byte -7 + .byte -10 + .byte -4 + .byte -8 + .byte -6 + .byte -6 + .byte -11 + .byte -27 + .byte -38 + .byte -16 + .byte -12 + .byte -2 + .byte 2 + .byte -7 + .byte -31 + .byte -22 + .byte -4 + .byte -16 + .byte -22 + .byte -7 + .byte -31 + .byte -23 + .byte -22 + .byte -28 + .byte -28 + .byte -26 + .byte 2 + .byte -7 + .byte -11 + .byte -14 + .byte -8 + .byte -12 + .byte -10 + .byte -10 + .byte -27 + .byte -25 + .byte -22 + .byte -20 + .byte -28 + .byte -22 + .byte -7 + .byte -23 + .byte -29 + .byte -34 + .byte -24 + .byte -32 + .byte -22 + .byte -10 + .byte -11 + .byte -29 + .byte -18 + .byte -12 + .byte -24 + .byte -22 + .byte 6 + .byte 1 + .byte -3 + .byte -6 + .byte 0 + .byte -4 + .byte -2 + .byte 10 + .byte -3 + .byte -7 + .byte -6 + .byte 4 + .byte -4 + .byte -2 + .byte -10 + .byte -23 + .byte -39 + .byte -22 + .byte -19 + .byte -24 + .byte -18 + .byte -14 + .byte -23 + .byte -29 + .byte -30 + .byte -15 + .byte -30 + .byte -30 + .byte -7 + .byte -27 + .byte -35 + .byte -26 + .byte -15 + .byte -24 + .byte -26 + .byte 6 + .byte -11 + .byte 5 + .byte -2 + .byte -16 + .byte -16 + .byte -2 + .byte -2 + .byte -15 + .byte -15 + .byte -20 + .byte -8 + .byte -16 + .byte -18 + .byte 6 + .byte 5 + .byte -15 + .byte -2 + .byte -24 + .byte -28 + .byte -22 + .byte 10 + .byte -15 + .byte -3 + .byte -30 + .byte -8 + .byte -24 + .byte -30 + .byte -10 + .byte -27 + .byte -19 + .byte -30 + .byte -12 + .byte -16 + .byte -10 + .byte 14 + .byte -19 + .byte -3 + .byte -30 + .byte 4 + .byte 4 + .byte 6 + .byte 2 + .byte 1 + .byte -3 + .byte -10 + .byte -8 + .byte -4 + .byte -6 + .byte -2 + .byte -15 + .byte -11 + .byte -26 + .byte -8 + .byte -20 + .byte -30 + .byte 6 + .byte -19 + .byte -3 + .byte -46 + .byte 0 + .byte 0 + .byte 2 + .byte 6 + .byte 9 + .byte 5 + .byte 2 + .byte 4 + .byte 8 + .byte 6 + .byte 8 + .byte 9 + .byte 9 + .byte 6 + .byte 8 + .byte 8 + .byte 6 + .byte 10 + .byte 13 + .byte 9 + .byte 6 + .byte 8 + .byte 12 + .byte 10 + .byte 2 + .byte 5 + .byte 1 + .byte -2 + .byte 0 + .byte 0 + .byte 6 + .byte 12 + .byte 1 + .byte 13 + .byte 2 + .byte 12 + .byte 12 + .byte 14 + .byte -12 + .byte -14 + .byte -20 + .byte -18 + .byte -16 + .byte -16 + .byte -14 + .byte -12 + .byte -10 + .byte -21 + .byte -14 + .byte -12 + .byte -12 + .byte -10 + .byte -12 + .byte -18 + .byte -22 + .byte -24 + .byte -18 + .byte -18 + .byte -18 + .byte -12 + .byte -14 + .byte -23 + .byte -20 + .byte -20 + .byte -20 + .byte -20 + .byte -12 + .byte -24 + .byte -24 + .byte -30 + .byte -24 + .byte -28 + .byte -28 + .byte -12 + .byte -26 + .byte -25 + .byte -34 + .byte -24 + .byte -24 + .byte -24 + .byte -12 + .byte -13 + .byte -26 + .byte -20 + .byte -14 + .byte -18 + .byte -18 + .byte -12 + .byte -15 + .byte -27 + .byte -22 + .byte -20 + .byte -24 + .byte -22 + .byte -12 + .byte -21 + .byte -28 + .byte -28 + .byte -24 + .byte -26 + .byte -24 + .byte 20 + .byte 16 + .byte 6 + .byte 10 + .byte 16 + .byte 12 + .byte 12 + .byte 16 + .byte 16 + .byte 8 + .byte 8 + .byte 12 + .byte 12 + .byte 12 + .byte 18 + .byte 18 + .byte 10 + .byte 8 + .byte 14 + .byte 14 + .byte 14 + .byte 16 + .byte 14 + .byte 6 + .byte 6 + .byte 12 + .byte 14 + .byte 8 + .byte 20 + .byte 18 + .byte 8 + .byte 6 + .byte 14 + .byte 14 + .byte 10 + .byte 20 + .byte 20 + .byte 6 + .byte 10 + .byte 10 + .byte 12 + .byte 12 + .byte 10 + .byte 13 + .byte 5 + .byte 2 + .byte 14 + .byte 8 + .byte 6 + .byte 6 + .byte 13 + .byte 9 + .byte 4 + .byte 14 + .byte 10 + .byte 10 + .byte 10 + .byte 13 + .byte 9 + .byte 6 + .byte 8 + .byte 12 + .byte 10 + .byte 2 + .byte 5 + .byte 1 + .byte -2 + .byte 0 + .byte 0 + .byte 6 + .byte 12 + .byte 1 + .byte 13 + .byte 2 + .byte 12 + .byte 12 + .byte 14 + .zero 1 + .type toshiba_3D_slc_value, %object + .size toshiba_3D_slc_value, 11 +toshiba_3D_slc_value: + .byte -117 + .byte 0 + .byte -8 + .byte 8 + .byte -16 + .byte -24 + .byte 24 + .byte -40 + .byte 40 + .byte -56 + .byte 56 + .zero 5 + .type __func__.18388, %object + .size __func__.18388, 26 +__func__.18388: + .string "flash_erase_duplane_block" + .zero 6 + .type __func__.18399, %object + .size __func__.18399, 21 +__func__.18399: + .string "flash_erase_block_en" + .zero 3 + .type random_seed, %object + .size random_seed, 256 +random_seed: + .hword 22378 + .hword 1512 + .hword 25245 + .hword 17827 + .hword 25756 + .hword 19440 + .hword 9026 + .hword 10030 + .hword 29528 + .hword 20467 + .hword 29676 + .hword 24432 + .hword 31328 + .hword 6872 + .hword 13426 + .hword 13842 + .hword 8783 + .hword 1108 + .hword 782 + .hword 28837 + .hword 30729 + .hword 9505 + .hword 18676 + .hword 23085 + .hword 18730 + .hword 1085 + .hword 32609 + .hword 14697 + .hword 20858 + .hword 15170 + .hword 30365 + .hword 1607 + .hword 32298 + .hword 4995 + .hword 18905 + .hword 1976 + .hword 9592 + .hword 20204 + .hword 17443 + .hword 13615 + .hword 23330 + .hword 29369 + .hword 13947 + .hword 9398 + .hword 32398 + .hword 8984 + .hword 27600 + .hword 21785 + .hword 6019 + .hword 6311 + .hword 31598 + .hword 30210 + .hword 19327 + .hword 13896 + .hword 11347 + .hword 27545 + .hword 3107 + .hword 26575 + .hword 32270 + .hword 19852 + .hword 20601 + .hword 8349 + .hword 9290 + .hword 29819 + .hword 13579 + .hword 3661 + .hword 28676 + .hword 27331 + .hword 32574 + .hword 8693 + .hword 31253 + .hword 9081 + .hword 5399 + .hword 6842 + .hword 20087 + .hword 5537 + .hword 1274 + .hword 11617 + .hword 9530 + .hword 4866 + .hword 8035 + .hword 23219 + .hword 1178 + .hword 23272 + .hword 7383 + .hword 18944 + .hword 12488 + .hword 12871 + .hword 29340 + .hword 20532 + .hword 11022 + .hword 22514 + .hword 228 + .hword 22363 + .hword 24978 + .hword 14584 + .hword 12138 + .hword 3092 + .hword 17916 + .hword 16863 + .hword 14554 + .hword 31457 + .hword 29474 + .hword 25311 + .hword 24121 + .hword 3684 + .hword 28037 + .hword 22865 + .hword 22839 + .hword 25217 + .hword 13217 + .hword 27186 + .hword 14938 + .hword 11180 + .hword 29754 + .hword 24180 + .hword 15150 + .hword 32455 + .hword 20434 + .hword 23848 + .hword 29983 + .hword 16120 + .hword 14769 + .hword 20041 + .hword 29803 + .hword 28406 + .hword 17598 + .hword 28087 + .type __func__.18464, %object + .size __func__.18464, 22 +__func__.18464: + .string "flash_start_page_read" + .zero 2 + .type __func__.19059, %object + .size __func__.19059, 13 +__func__.19059: + .string "buf_add_tail" + .zero 3 + .type __func__.19072, %object + .size __func__.19072, 10 +__func__.19072: + .string "buf_alloc" + .zero 6 + .type __func__.19086, %object + .size __func__.19086, 16 +__func__.19086: + .string "buf_remove_free" + .type __func__.19326, %object + .size __func__.19326, 13 +__func__.19326: + .string "ftl_read_buf" + .zero 3 + .type __func__.19561, %object + .size __func__.19561, 12 +__func__.19561: + .string "gc_add_sblk" + .zero 4 + .type __func__.19651, %object + .size __func__.19651, 19 +__func__.19651: + .string "gc_write_completed" + .zero 5 + .type __func__.19994, %object + .size __func__.19994, 14 +__func__.19994: + .string "ftl_free_sblk" + .zero 2 + .type __func__.19702, %object + .size __func__.19702, 16 +__func__.19702: + .string "gc_free_src_blk" + .type __func__.20028, %object + .size __func__.20028, 18 +__func__.20028: + .string "ftl_alloc_sys_blk" + .zero 6 + .type __func__.20038, %object + .size __func__.20038, 17 +__func__.20038: + .string "ftl_free_sys_blk" + .zero 7 + .type __func__.20141, %object + .size __func__.20141, 23 +__func__.20141: + .string "ftl_get_ppa_from_index" + .zero 1 + .type __func__.20181, %object + .size __func__.20181, 22 +__func__.20181: + .string "ftl_get_new_free_page" + .zero 2 + .type __func__.20192, %object + .size __func__.20192, 22 +__func__.20192: + .string "ftl_ext_alloc_new_blk" + .zero 2 + .type __func__.19270, %object + .size __func__.19270, 14 +__func__.19270: + .string "ftl_write_buf" + .align 3 +.LANCHOR3 = . + 0 + .type __func__.20612, %object + .size __func__.20612, 17 +__func__.20612: + .string "pm_alloc_new_blk" + .zero 7 + .type __func__.20640, %object + .size __func__.20640, 21 +__func__.20640: + .string "pm_select_ram_region" + .zero 3 + .type __func__.18795, %object + .size __func__.18795, 20 +__func__.18795: + .string "flash_die_info_init" + .zero 4 + .type __func__.19207, %object + .size __func__.19207, 17 +__func__.19207: + .string "lpa_rebuild_hash" + .zero 7 + .type __func__.20576, %object + .size __func__.20576, 13 +__func__.20576: + .string "pm_free_sblk" + .zero 3 + .type __func__.19109, %object + .size __func__.19109, 21 +__func__.19109: + .string "flash_into_data_init" + .zero 3 + .type __func__.18344, %object + .size __func__.18344, 19 +__func__.18344: + .string "flash_read_page_en" + .zero 5 + .type __func__.19098, %object + .size __func__.19098, 20 +__func__.19098: + .string "flash_info_blk_init" + .zero 4 + .type __func__.18479, %object + .size __func__.18479, 25 +__func__.18479: + .string "flash_complete_page_read" + .zero 7 + .type __func__.19604, %object + .size __func__.19604, 21 +__func__.19604: + .string "gc_check_data_one_wl" + .zero 3 + .type __func__.18438, %object + .size __func__.18438, 26 +__func__.18438: + .string "flash_start_tlc_page_prog" + .zero 6 + .type __func__.18451, %object + .size __func__.18451, 22 +__func__.18451: + .string "flash_start_page_prog" + .zero 2 + .type __func__.20503, %object + .size __func__.20503, 15 +__func__.20503: + .string "sblk_prog_page" + .zero 1 + .type __func__.18373, %object + .size __func__.18373, 19 +__func__.18373: + .string "flash_prog_page_en" + .zero 5 + .type __func__.20328, %object + .size __func__.20328, 14 +__func__.20328: + .string "ftl_prog_page" + .zero 2 + .type __func__.19945, %object + .size __func__.19945, 15 +__func__.19945: + .string "ftl_info_flush" + .zero 1 + .type __func__.20217, %object + .size __func__.20217, 19 +__func__.20217: + .string "ftl_ext_info_flush" + .zero 5 + .type __func__.20229, %object + .size __func__.20229, 18 +__func__.20229: + .string "ftl_ext_info_init" + .zero 6 + .type __func__.20274, %object + .size __func__.20274, 15 +__func__.20274: + .string "ftl_low_format" + .zero 1 + .type __func__.20318, %object + .size __func__.20318, 23 +__func__.20318: + .string "ftl_re_low_format_test" + .zero 1 + .type __func__.20115, %object + .size __func__.20115, 23 +__func__.20115: + .string "ftl_open_sblk_recovery" + .zero 1 + .type __func__.20622, %object + .size __func__.20622, 14 +__func__.20622: + .string "pm_write_page" + .zero 2 + .type __func__.19131, %object + .size __func__.19131, 17 +__func__.19131: + .string "flash_info_flush" + .zero 7 + .type __func__.18849, %object + .size __func__.18849, 16 +__func__.18849: + .string "nand_flash_init" + .type __func__.20096, %object + .size __func__.20096, 16 +__func__.20096: + .string "ftl_sysblk_dump" + .type __func__.20562, %object + .size __func__.20562, 16 +__func__.20562: + .string "load_l2p_region" + .type __func__.20596, %object + .size __func__.20596, 6 +__func__.20596: + .string "pm_gc" + .zero 2 + .type __func__.19318, %object + .size __func__.19318, 15 +__func__.19318: + .string "ftl_read_ahead" + .zero 1 + .type __func__.19638, %object + .size __func__.19638, 22 +__func__.19638: + .string "gc_update_l2p_map_new" + .zero 2 + .type __func__.19796, %object + .size __func__.19796, 20 +__func__.19796: + .string "gc_scan_static_data" + .zero 4 + .type __func__.19852, %object + .size __func__.19852, 18 +__func__.19852: + .string "gc_block_vpn_scan" + .zero 6 + .type __func__.20072, %object + .size __func__.20072, 14 +__func__.20072: + .string "ftl_sblk_dump" + .zero 2 + .type __func__.19780, %object + .size __func__.19780, 18 +__func__.19780: + .string "gc_search_src_blk" + .zero 6 + .type __func__.19364, %object + .size __func__.19364, 10 +__func__.19364: + .string "zftl_read" + .zero 6 + .type __func__.19431, %object + .size __func__.19431, 10 +__func__.19431: + .string "vpn_check" + .zero 6 + .type __func__.19461, %object + .size __func__.19461, 15 +__func__.19461: + .string "ftl_info_check" + .zero 1 + .type __func__.19747, %object + .size __func__.19747, 16 +__func__.19747: + .string "gc_scan_src_blk" + .type __func__.20162, %object + .size __func__.20162, 19 +__func__.20162: + .string "ftl_update_l2p_map" + .zero 5 + .type __func__.19259, %object + .size __func__.19259, 17 +__func__.19259: + .string "ftl_write_commit" + .zero 7 + .type __func__.19680, %object + .size __func__.19680, 16 +__func__.19680: + .string "gc_do_copy_back" + .type __func__.19390, %object + .size __func__.19390, 13 +__func__.19390: + .string "_ftl_discard" + .zero 3 + .type __func__.19881, %object + .size __func__.19881, 11 +__func__.19881: + .string "zftl_do_gc" + .section .rodata.str1.1,"aMS",%progbits,1 +.LC0: + .string "...%s enter...\n" +.LC1: + .string "No.0 FLASH ID: %x %x %x %x %x %x\n" +.LC2: + .string "DiePerChip: %x\n" +.LC3: + .string "SectPerPage: %x\n" +.LC4: + .string "PagePerBlk: %x\n" +.LC5: + .string "Cell: %x\n" +.LC6: + .string "PlanePerDie: %x\n" +.LC7: + .string "BlkPerPlane: %x\n" +.LC8: + .string "die gap: %x\n" +.LC9: + .string "lsbMode: %x\n" +.LC10: + .string "ReadRetryMode: %x\n" +.LC11: + .string "ecc: %x\n" +.LC12: + .string "idb ecc: %x\n" +.LC13: + .string "AccessFreq: %x\n" +.LC14: + .string "OptMode: %x\n" +.LC15: + .string "g_nand_max_die: %x\n" +.LC16: + .string "Cache read enable: %x\n" +.LC17: + .string "Cache random read enable: %x\n" +.LC18: + .string "Cache prog enable: %x\n" +.LC19: + .string "multi read enable: %x\n" +.LC20: + .string "multi prog enable: %x\n" +.LC21: + .string "interleave enable: %x\n" +.LC22: + .string "read retry enable: %x\n" +.LC23: + .string "randomizer enable: %x\n" +.LC24: + .string "SDR enable: %x\n" +.LC25: + .string "ONFI enable: %x\n" +.LC26: + .string "TOGGLE enable: %x\n" +.LC27: + .string "g_flash_slc_mode: %x\n" +.LC28: + .string "MultiPlaneProgCmd: %x %x\n" +.LC29: + .string "MultiPlaneReadCmd: %x %x\n" +.LC30: + .string "g_flash_toggle_mode_en: %x\n" +.LC31: + .string "...%s enter... %p\n" +.LC32: + .string "0:%x %x %x %x %x\n" +.LC33: + .string "g_nandc_ver...%d\n" +.LC34: + .string "\n!!!!! error @ func:%s - line:%d\n" +.LC35: + .string "nand sdr mode %x\n" +.LC36: + .string "nand ddr mode %x\n" +.LC37: + .string "No.%d FLASH ID:%x %x %x %x %x %x\n" +.LC38: + .string "bad block test:%x %x\n" +.LC39: + .string "flash_erase_duplane_block %x %x %x\n" +.LC40: + .string "flash_erase_duplane_block pageadd = %x status = %x\n" +.LC41: + .string "flash_erase_block %x %x\n" +.LC42: + .string "flash_erase_block block = %x status = %x\n" +.LC43: + .string "erase done: %x\n" +.LC44: + .string "bch%d: %d %d\n" +.LC45: + .string "flash_mask_bad_block %d %d\n" +.LC46: + .string "%s\n" +.LC47: + .string "FTL version: 6.0.3 20180211" +.LC48: + .string "FLASH ID: %x %x %x %x %x %x\n" +.LC49: + .string "density: %d MB\n" +.LC50: + .string "device density: %d MB\n" +.LC51: + .string "FTL INFO:\n" +.LC52: + .string "max_lpn = 0x%x\n" +.LC53: + .string "density = 0x%x\n" +.LC54: + .string "slc vpn = 0x%x\n" +.LC55: + .string "xlc vpn = 0x%x\n" +.LC56: + .string "free slc blk = 0x%x\n" +.LC57: + .string "free xlc blk = 0x%x\n" +.LC58: + .string "free mix blk = 0x%x\n" +.LC59: + .string "slc data blk = 0x%x\n" +.LC60: + .string "slc cache blk = 0x%x\n" +.LC61: + .string "xlc data blk = 0x%x\n" +.LC62: + .string "TBW = %d MB\n" +.LC63: + .string "TBR = %d MB\n" +.LC64: + .string "POC = %d\n" +.LC65: + .string "PLC = %d\n" +.LC66: + .string "sys run time = %d S\n" +.LC67: + .string "prog err = %d\n" +.LC68: + .string "read err = %d\n" +.LC69: + .string "GC XLC page = %d\n" +.LC70: + .string "GC SLC page = %d\n" +.LC71: + .string "discard page = 0x%x\n" +.LC72: + .string "version = %d\n" +.LC73: + .string "acblk = 0x%x %d %d\n" +.LC74: + .string "tmblk = 0x%x %d %d\n" +.LC75: + .string "gcblk = 0x%x %d %d\n" +.LC76: + .string "slc ec = %d, %d, %d, %d, %d\n" +.LC77: + .string "xlc ec = %d, %d, %d, %d, %d\n" +.LC78: + .string "gc_add_sblk = %d, %d, %d, %d, %d, %d\n" +.LC79: + .string "status: %x, ppa: %x\n" +.LC80: + .string "gc_write_completed: %x %x %x %x\n" +.LC81: + .string "%d gc_free_temp_buf buf id= %x\n" +.LC82: + .string "gc_static_wearleveling: slc blk: %d, tlc blk: %d avg slc ec: %d, avg tlc ec: %d \n" +.LC83: + .string "gc_static_wearleveling: min slc ec: %d, min tlc ec: %d max slc ec: %d, max tlc ec: %d \n" +.LC84: + .string "gc: b:%x,p:%x,i:%x; free buf=%d %d free slc th: %d\n" +.LC85: + .string "ftl_alloc_sblk %x, %d %d %d\n" +.LC86: + .string "gc_free_src_blk = %x, vpn = %d\n" +.LC87: + .string "gc_free_src_blk %x, %d\n" +.LC88: + .string "ftl_vpn_decrement %x = %d\n" +.LC89: + .string "mask bad block:cs %x block: %x\n" +.LC90: + .string "free blk: s:%x,t:%x,m:%x, data blk:s:%x,%x,t%x vpn: s:%x t:%x, gc th: %x\n" +.LC91: + .string "totle w: %d MB,r: %d MB %d dv:0x%X,poc:%d\n" +.LC92: + .string "gc xlc page: %d,gc slc page: %d, tmp w: %d MB\n" +.LC93: + .string "slc ec: %d,%d,%d,%d,%d,tlc ec: %d,%d,%d,%d,%d\n" +.LC94: + .string "ftl prog error =%x, lpa = %x, ppa= %x\n" +.LC95: + .string "dump_sblk_queue: %d\n" +.LC96: + .string "buf id= %d state = %d ppa = %x\n" +.LC97: + .string "blk %x is bad block\n" +.LC98: + .string "pm_alloc_new_blk: %x %x %x %x\n" +.LC99: + .string "%s %d %d\n" +.LC100: + .string "ftl_free_no_use_map_blk %x %x %x %d\n" +.LC101: + .string "...%d @ %s\n" +.LC102: + .string "rk_ftl_de_init %x\n" +.LC103: + .string "%s %p:0x%x:" +.LC104: + .string "%x " +.LC105: + .string "" +.LC106: + .string "otp error! %d" +.LC107: + .string "rr" +.LC108: + .string "%d mtrans_cnt = %d page_num = %d\n" +.LC109: + .string "nandc:" +.LC110: + .string "%d flReg.d32=%x %x\n" +.LC111: + .string "nandc_xfer_done read error %x\n" +.LC112: + .string "dqs data abort %x\n" +.LC113: + .string "xfer error %x\n" +.LC114: + .string "flash_read_page %x %x %x\n" +.LC115: + .string "micron %d row=%x,count %d,status=%d\n" +.LC116: + .string "micron RR %d row=%x,count %d,status=%d\n" +.LC117: + .string "toshiba SRR %d row=%x, status=%d\n" +.LC118: + .string "toshiba TRR %d row=%x, status=%d\n" +.LC119: + .string "toshiba RR %d row=%x,count %d,status=%d\n" +.LC120: + .string "hynix RR %d row=%x, count %d, status=%d\n" +.LC121: + .string "%d flash_ddr_tunning_read %x ecc=%d\n" +.LC122: + .string "sync para %d\n" +.LC123: + .string "DDR mode Read error %x %x\n" +.LC124: + .string "flash_read_page_en %x %x\n" +.LC125: + .string "flash_read_page_en %x %x error_ecc %d %d\n" +.LC126: + .string "flash_get_last_written_page: %x %x %x\n" +.LC127: + .string "...%d @ %s %d %p\n" +.LC128: + .string "no sys info %x\n" +.LC129: + .string "read page: %x %x %x %x\n" +.LC130: + .string "flash_complete_page_read %x %x error_ecc %d %d\n" +.LC131: + .string "set buf %d,status = %x, ppa = %x lun state = %d\n" +.LC132: + .string "1ppa = %x, status = %x, %x %x spare: %x %x %x %x\n" +.LC133: + .string "sblk_prog_page ppa = %x, count = %d\n" +.LC134: + .string "flash_prog_page %x %x %x\n" +.LC135: + .string "flash_prog_page page_addr = %x status = %x\n" +.LC136: + .string "flash_prog_page_en:%x %x\n" +.LC137: + .string "spare" +.LC138: + .string "data" +.LC139: + .string "write error: %x\n" +.LC140: + .string "low format %d\n" +.LC141: + .string "g_ftl_info_blk blk = %x, page = %x version = %d\n" +.LC142: + .string "%d %x @%d %x\n" +.LC143: + .string "ftl_info_blk_init %d %d %x\n" +.LC144: + .string "low format %d %d %d %d\n" +.LC145: + .string "re low formaet %d\n" +.LC146: + .string "saved_active_page = %x\n" +.LC147: + .string "saved_active_plane = %x\n" +.LC148: + .string "sblk = %x\n" +.LC149: + .string "phy_blk = %x %x\n" +.LC150: + .string "blk= %x, page=%x, ppa = %x, status = %x, data:%x %x %x %x, spare: %x %x %x %x\n" +.LC151: + .string "sblk = %x, vpn0 = %d, vpn1 = %d\n" +.LC152: + .string "dump write = %x\n" +.LC153: + .string "pm_write_page write error: %x\n" +.LC154: + .string "finfo:" +.LC155: + .string "flash_info_flush id = %x, page = %x\n" +.LC156: + .string "sys_info_flush error:%x\n" +.LC157: + .string "l2p:" +.LC158: + .string "g_ftl_info_blk blk:0x%x, index:0x%x, page:0x%x\n" +.LC159: + .string "ftl_ext_info_blk blk:0x%x, page:0x%x\n" +.LC160: + .string "ac_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page_index:0x%x\n" +.LC161: + .string "tmp_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page_index:0x%x\n" +.LC162: + .string "gc_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page_index:0x%x\n" +.LC163: + .string "lpa:" +.LC164: + .string "vpn:" +.LC165: + .string "sblk:" +.LC166: + .string "lpa_hash:" +.LC167: + .string "lpa_hash_index:" +.LC168: + .string "%s w error lpn = %x, max ppa = %d\n" +.LC169: + .string "region_id = %d, pm_max_region = %d\n" +.LC170: + .string "load_l2p_region = %x,%x,%x, %x\n" +.LC171: + .string "pm_ppa:" +.LC172: + .string "data:" +.LC173: + .string "spare:" +.LC174: + .string "pm_init posr %x %x %x\n" +.LC175: + .string "pm_init recovery %x %x %x\n" +.LC176: + .string "pm_log2phys lpn = %d, max lpn = %d\n" +.LC177: + .string "ftl_read_ahead refresh =%x, lpa = %x, ppa= %x\n" +.LC178: + .string "id=%d, lpa = %x, ppa = %x spare = %x %x %x %x\n" +.LC179: + .string "gc_update_l2p_map_new sblk %x\n" +.LC180: + .string "gc_update_l2p_map_new: %x %x %x\n" +.LC181: + .string "0lpa: %x %x %x\n" +.LC182: + .string "lpa: %x %x %x\n" +.LC183: + .string "gc_update_l2p_map_new: %x vpn = %x vpn1 = %x done\n" +.LC184: + .string "gc_block_vpn_scan = %x, s vpn0 = %d, c vpn1 = %d f:%d\n" +.LC185: + .string "ftl_sblk_dump = %x %x %x %x\n" +.LC186: + .string "page_addr = %x, lpa=%x vpn = %d\n" +.LC187: + .string "index= %x, lpa=%x\n" +.LC188: + .string "block = %x, vpn=%x check vpn = %d\n" +.LC189: + .string "gc_search_src_blk = %d, %d, %d\n" +.LC190: + .string "gc_search_src_blk = %d, %d, %d %d\n" +.LC191: + .string "vpn gc = %d, id = %d\n" +.LC192: + .string "gc_search_src_blk count= %d slc_min_vpc = %d xlc_min_vpc = %d\n" +.LC193: + .string "ftl_read refresh =%x, lpa = %x, ppa= %x\n" +.LC194: + .string "acblk = %x, tempblk = %x, gc_des = %x\n" +.LC195: + .string "acblk = %x, free page = %x, vpn = %x %x\n" +.LC196: + .string "tmp_blk = %x, free page = %x, vpn = %x %x\n" +.LC197: + .string "vpn_check lpa = %x, ppa = %x, blk = %x\n" +.LC198: + .string "l2p" +.LC199: + .string "vpn_check %x = c %x s %x function: %x\n" +.LC200: + .string "vpn_check blk = %x fix vpc\n" +.LC201: + .string "...%s exit...%d ms\n" +.LC202: + .string "free blk vpn error: %x %x\n" +.LC203: + .string "data blk: %d %d %d\n" +.LC204: + .string "free blk: %d %d %d\n" +.LC205: + .string "gc_scan_src_blk = %x, vpn = %d\n" +.LC206: + .string "gc_scan_src_blk = %x, s vpn0 = %d, c vpn1 = %d\n" +.LC207: + .string "ftl_scan_all_data = %x\n" +.LC208: + .string "scan lpa = %x ppa= %x\n" +.LC209: + .string "lba = %x,addr= %x, ststus = %x, spare= %x %x %x %x data=%x %x\n" +.LC210: + .string "lba = %x, id= %x, index = %x hash ppa = %x\n" +.LC211: + .string "0pm:" +.LC212: + .string "1pm:" +.LC213: + .string "ppa = %x, status = %x, data:%x %x %x %x, spare: %x %x %x %x\n" +.LC214: + .string "gc_lpa:" +.LC215: + .string "gc_ppa:" +.LC216: + .string "ppa = %x, status = %x, %x %x spare: %x %x %x %x\n" +.LC217: + .string "gc_recovery" +.LC218: + .string "gc_recovery: %x vpn = %x\n" +.LC219: + .string "_c_user_data_density := %d\n" +.LC220: + .string "_c_totle_phy_density := %d\n" +.LC221: + .string "_c_totle_log_page := %d\n" +.LC222: + .string "_c_totle_data_density := %d\n" +.LC223: + .string "_c_ftl_pm_page_num := %d\n" +.LC224: + .string "_c_ftl_byte_pre_page := %d\n" +.LC225: + .string "_c_max_pm_sblk := %d\n" +.LC226: + .string "_min_slc_super_block := %d\n" +.LC227: + .string "_max_xlc_super_block := %d\n" +.LC228: + .string "gp_ftl_ext_info %p %p %p\n" +.LC229: + .string "flash info size: %d %d %d\n" +.LC230: + .string "ftl_init %x\n" +.LC231: + .string "ftl_update_l2p_map: %x %x %x\n" +.LC232: + .string "ftl_update_l2p_map" +.LC233: + .string "lpa_tbl:" +.LC234: + .string "sblk %x vpn: %d %d\n" +.LC235: + .string "%d read error: ppa:%x, lpa:%x, status:%x\n" +.LC236: + .string "gc page in buf: lpa %x ppa = %x pageindex= %x\n" +.LC237: + .string "gc_do_copy_back: lpa %x des_ppa = %x %x gc_ppa= %x page_index= %d\n" +.LC238: + .string "gc_do_copy_back: %x %x %x %x gc_ppa:%x %x\n" +.LC239: + .string "%d prog_step: %x %x buf id= %x ppa = %x hash=%x id = %x plane = %x lpa=%x\n" +.LC240: + .string "ftl_discard:(%x, %x, %x, %x)\n" +.LC241: + .string "gc %d: %d %d %d %d %d %d\n" +.LC242: + .string "GC_STATE_SCAN_ALL_PAGE = %x, vpn0 = %d, vpn1 = %d\n" +.LC243: + .string "gc free %x, %d\n" +.LC244: + .string "id_block_prog_msb_ff_data slc page = %d pageadd=%x %x\n" +.LC245: + .string "write_idblock fix data %x %x\n" +.LC246: + .string "1 write_idblock fix data %x %x %x\n" +.LC247: + .string "READ_SECTOR_IO\n" +.LC248: + .string "rk_copy_from_user error\n" +.LC249: + .string "READ_SECTOR_IO %x %x\n" +.LC250: + .string "rk_copy_to_user error\n" +.LC251: + .string "WRITE_SECTOR_IO\n" +.LC252: + .string "WRITE_SECTOR_IO %x %x\n" +.LC253: + .string "END_WRITE_SECTOR_IO\n" +.LC254: + .string "END_WRITE_SECTOR_IO %x %x\n" +.LC255: + .string "GET_FLASH_INFO_IO\n" +.LC256: + .string "GET_BAD_BLOCK_IO\n" +.LC257: + .string "GET_LOCK_FLAG_IO\n" +.LC258: + .string "GET_PUBLIC_KEY_IO\n" +.LC259: + .string "RKNAND_GET_DRM_KEY\n" +.LC260: + .string "RKNAND_STORE_DRM_KEY\n" +.LC261: + .string "RKNAND_DIASBLE_SECURE_BOOT\n" +.LC262: + .string "RKNAND_ENASBLE_SECURE_BOOT\n" +.LC263: + .string "RKNAND_GET_SN_SECTOR\n" +.LC264: + .string "RKNAND_LOADER_UNLOCK\n" +.LC265: + .string "RKNAND_LOADER_STATUS\n" +.LC266: + .string "RKNAND_LOADER_LOCK\n" +.LC267: + .string "LockKey not match %d\n" +.LC268: + .string "RKNAND_GET_VENDOR_SECTOR\n" +.LC269: + .string "RKNAND_STORE_VENDOR_SECTOR\n" +.LC270: + .string "return ret = %lx\n" +.LC271: + .string "secureBootEn check error\n" +.LC272: + .string "\0013vendor storage %x,%x,%x\n" + .data + .align 3 +.LANCHOR2 = . + 0 + .type sd15_tlc_rr, %object + .size sd15_tlc_rr, 329 +sd15_tlc_rr: + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte -8 + .byte 0 + .byte 16 + .byte 8 + .byte 8 + .byte 0 + .byte -8 + .byte -8 + .byte -8 + .byte -16 + .byte -8 + .byte -8 + .byte -8 + .byte -8 + .byte -24 + .byte 0 + .byte 0 + .byte 0 + .byte -8 + .byte -16 + .byte -32 + .byte 0 + .byte 8 + .byte -8 + .byte 8 + .byte 8 + .byte 0 + .byte 0 + .byte -16 + .byte -8 + .byte -8 + .byte -8 + .byte 0 + .byte -16 + .byte -24 + .byte -16 + .byte 8 + .byte 8 + .byte -8 + .byte -16 + .byte -16 + .byte 0 + .byte 8 + .byte 8 + .byte 8 + .byte 8 + .byte -8 + .byte -8 + .byte -24 + .byte 0 + .byte -16 + .byte 0 + .byte -8 + .byte -16 + .byte -8 + .byte -8 + .byte 0 + .byte 8 + .byte 0 + .byte 0 + .byte -8 + .byte 0 + .byte -24 + .byte -8 + .byte 0 + .byte 0 + .byte -8 + .byte -24 + .byte -8 + .byte 8 + .byte -8 + .byte 0 + .byte -8 + .byte 8 + .byte -16 + .byte -8 + .byte -8 + .byte -8 + .byte 8 + .byte 8 + .byte 0 + .byte 0 + .byte -8 + .byte -8 + .byte 8 + .byte -8 + .byte -8 + .byte 0 + .byte 0 + .byte -8 + .byte -16 + .byte -16 + .byte -8 + .byte 0 + .byte 0 + .byte -8 + .byte 0 + .byte -16 + .byte 8 + .byte 0 + .byte 8 + .byte 0 + .byte -16 + .byte -8 + .byte -16 + .byte 16 + .byte 0 + .byte 16 + .byte 0 + .byte -8 + .byte 8 + .byte 0 + .byte -24 + .byte 0 + .byte -16 + .byte -8 + .byte -16 + .byte -16 + .byte -16 + .byte -16 + .byte 0 + .byte 8 + .byte -8 + .byte -24 + .byte 0 + .byte 8 + .byte 8 + .byte 16 + .byte 16 + .byte 0 + .byte 8 + .byte -8 + .byte 8 + .byte 16 + .byte -8 + .byte 24 + .byte 0 + .byte 8 + .byte -4 + .byte 0 + .byte 16 + .byte 8 + .byte 24 + .byte 8 + .byte 0 + .byte -4 + .byte -8 + .byte 24 + .byte 16 + .byte 16 + .byte 0 + .byte 0 + .byte 0 + .byte -16 + .byte 0 + .byte 0 + .byte 4 + .byte 0 + .byte -4 + .byte -4 + .byte -4 + .byte 8 + .byte 8 + .byte 16 + .byte 0 + .byte 16 + .byte -4 + .byte 16 + .byte 0 + .byte 16 + .byte 8 + .byte 0 + .byte 16 + .byte -4 + .byte 16 + .byte -8 + .byte 0 + .byte 0 + .byte -8 + .byte 16 + .byte -4 + .byte 16 + .byte -16 + .byte -8 + .byte -8 + .byte -8 + .byte 8 + .byte -4 + .byte 8 + .byte -24 + .byte 4 + .byte -16 + .byte 0 + .byte 8 + .byte 0 + .byte 0 + .byte -24 + .byte 8 + .byte -16 + .byte 8 + .byte 0 + .byte 8 + .byte -24 + .byte -32 + .byte 16 + .byte -24 + .byte 8 + .byte -8 + .byte 8 + .byte -24 + .byte -32 + .byte 8 + .byte 0 + .byte 16 + .byte 0 + .byte 16 + .byte 0 + .byte -32 + .byte 4 + .byte 0 + .byte -8 + .byte -16 + .byte -8 + .byte 0 + .byte -32 + .byte 4 + .byte 0 + .byte 8 + .byte -24 + .byte 8 + .byte 0 + .byte -32 + .byte 4 + .byte 0 + .byte 0 + .byte -32 + .byte -4 + .byte 0 + .byte -24 + .byte 4 + .byte 0 + .byte 16 + .byte -24 + .byte 16 + .byte 0 + .byte -24 + .byte -4 + .byte 0 + .byte 8 + .byte -32 + .byte 8 + .byte 0 + .byte 0 + .byte -4 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte -4 + .byte 0 + .byte 0 + .byte 0 + .byte -4 + .byte 0 + .byte 0 + .byte -4 + .byte 0 + .byte -8 + .byte 0 + .byte -8 + .byte 0 + .byte 0 + .byte -4 + .byte 0 + .byte -16 + .byte 0 + .byte -16 + .byte 0 + .byte 0 + .byte -16 + .byte 0 + .byte -16 + .byte 0 + .byte -16 + .byte 0 + .byte 0 + .byte -8 + .byte 0 + .byte -16 + .byte 0 + .byte -16 + .byte 0 + .byte 0 + .byte -16 + .byte 0 + .byte -24 + .byte 0 + .byte -24 + .byte 0 + .byte 0 + .byte -24 + .byte 0 + .byte -24 + .byte 0 + .byte -24 + .byte 0 + .byte 0 + .byte -24 + .byte 0 + .byte -16 + .byte 0 + .byte -16 + .byte 0 + .byte 0 + .byte -24 + .byte 0 + .byte -32 + .byte 0 + .byte -32 + .byte 0 + .zero 7 + .type sd15_slc_rr, %object + .size sd15_slc_rr, 25 +sd15_slc_rr: + .byte 0 + .byte 8 + .byte -8 + .byte 16 + .byte -16 + .byte 24 + .byte -24 + .byte 32 + .byte -32 + .byte 32 + .byte -40 + .byte 48 + .byte -48 + .byte 56 + .byte -56 + .byte 64 + .byte -64 + .byte 72 + .byte -72 + .byte 80 + .byte -80 + .byte 88 + .byte 96 + .byte 104 + .byte 112 + .zero 7 + .type g_nand_para_info, %object + .size g_nand_para_info, 32 +g_nand_para_info: + .byte 6 + .byte -104 + .byte 58 + .byte -104 + .byte -77 + .byte 118 + .byte 114 + .byte 1 + .byte 1 + .byte 32 + .hword 768 + .byte 3 + .byte 2 + .hword 758 + .hword 5593 + .byte 0 + .byte 37 + .byte 60 + .byte 32 + .byte 2 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .type zftl_debug, %object + .size zftl_debug, 4 +zftl_debug: + .word 17476 + .zero 4 + .type hy_f26_ref_value, %object + .size hy_f26_ref_value, 28 +hy_f26_ref_value: + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 6 + .byte 10 + .byte 6 + .byte 0 + .byte -3 + .byte -7 + .byte -8 + .byte 0 + .byte -6 + .byte -13 + .byte -15 + .byte 0 + .byte -11 + .byte -20 + .byte -23 + .byte 0 + .byte 0 + .byte -26 + .byte -30 + .byte 0 + .byte 0 + .byte -32 + .byte -37 + .zero 4 + .type zftl_nand_flash_para_tbl, %object + .size zftl_nand_flash_para_tbl, 768 +zftl_nand_flash_para_tbl: + .byte 6 + .byte -104 + .byte 58 + .byte -104 + .byte -77 + .byte 118 + .byte 114 + .byte 1 + .byte 1 + .byte 32 + .hword 768 + .byte 3 + .byte 2 + .hword 758 + .hword 5593 + .byte 0 + .byte 37 + .byte 60 + .byte 32 + .byte 2 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte -104 + .byte 60 + .byte -104 + .byte -77 + .byte 118 + .byte 114 + .byte 1 + .byte 1 + .byte 32 + .hword 768 + .byte 3 + .byte 2 + .hword 1478 + .hword 5593 + .byte 0 + .byte 37 + .byte 60 + .byte 32 + .byte 2 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte -104 + .byte 58 + .byte -104 + .byte -93 + .byte 118 + .byte 81 + .byte 1 + .byte 1 + .byte 32 + .hword 384 + .byte 3 + .byte 2 + .hword 1446 + .hword 1497 + .byte 0 + .byte 36 + .byte 60 + .byte 32 + .byte 2 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte -104 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 81 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1074 + .hword 17881 + .byte 2 + .byte 35 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte -104 + .byte -34 + .byte -124 + .byte -109 + .byte 114 + .byte 87 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 2092 + .hword 17857 + .byte 2 + .byte 33 + .byte 40 + .byte 32 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte -104 + .byte 58 + .byte -108 + .byte -109 + .byte 118 + .byte 81 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 2106 + .hword 17881 + .byte 2 + .byte 35 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte -104 + .byte -41 + .byte -124 + .byte -109 + .byte 114 + .byte 81 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 1056 + .hword 17881 + .byte 2 + .byte 35 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte -104 + .byte -41 + .byte -124 + .byte -109 + .byte 114 + .byte 80 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 1060 + .hword 17857 + .byte 2 + .byte 34 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte -104 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 80 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1066 + .hword 17881 + .byte 2 + .byte 34 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte -104 + .byte -41 + .byte -124 + .byte -109 + .byte 114 + .byte 87 + .byte 1 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 1 + .hword 1060 + .hword 17857 + .byte 2 + .byte 33 + .byte 40 + .byte 32 + .byte 2 + .byte 1 + .byte 1 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte 69 + .byte 58 + .byte -108 + .byte -109 + .byte 118 + .byte 81 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 2106 + .hword 17881 + .byte 2 + .byte 68 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte 69 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 81 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1074 + .hword 17881 + .byte 2 + .byte 68 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte 69 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 87 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1058 + .hword 1497 + .byte 2 + .byte 66 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 6 + .byte 69 + .byte -34 + .byte -108 + .byte -109 + .byte 118 + .byte 80 + .byte 8 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1066 + .hword 1497 + .byte 2 + .byte 67 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 1 + .byte 0 + .hword 256 + .byte 1 + .byte -94 + .byte 0 + .byte 0 + .byte 5 + .byte 44 + .byte 100 + .byte 68 + .byte 50 + .byte -91 + .byte 0 + .byte 4 + .byte 1 + .byte 32 + .hword 512 + .byte 2 + .byte 1 + .hword 1048 + .hword 9695 + .byte 5 + .byte 19 + .byte 70 + .byte 32 + .byte 1 + .byte 0 + .byte 4 + .byte 0 + .hword 512 + .byte 1 + .byte -38 + .byte -33 + .byte 0 + .byte 5 + .byte 44 + .byte 100 + .byte 100 + .byte 86 + .byte -91 + .byte 0 + .byte 4 + .byte 1 + .byte 24 + .hword 512 + .byte 2 + .byte 2 + .hword 700 + .hword 479 + .byte 4 + .byte 18 + .byte 60 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .hword 512 + .byte 2 + .byte 0 + .byte 0 + .byte 0 + .byte 6 + .byte 44 + .byte 68 + .byte 68 + .byte 75 + .byte -87 + .byte 0 + .byte 4 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 1064 + .hword 479 + .byte 3 + .byte 17 + .byte 40 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .hword 256 + .byte 2 + .byte 0 + .byte 0 + .byte 0 + .byte 5 + .byte 44 + .byte -124 + .byte 100 + .byte 84 + .byte -87 + .byte 0 + .byte 4 + .byte 1 + .byte 32 + .hword 512 + .byte 2 + .byte 2 + .hword 1024 + .hword 479 + .byte 4 + .byte 18 + .byte 60 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .hword 512 + .byte 2 + .byte 0 + .byte 0 + .byte 0 + .byte 5 + .byte 44 + .byte 100 + .byte 100 + .byte 84 + .byte -92 + .byte 0 + .byte 4 + .byte 1 + .byte 32 + .hword 512 + .byte 2 + .byte 1 + .hword 1024 + .hword 479 + .byte 4 + .byte 18 + .byte 60 + .byte 32 + .byte 1 + .byte 0 + .byte 1 + .byte 0 + .hword 512 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 6 + .byte -83 + .byte -34 + .byte 20 + .byte -85 + .byte 66 + .byte 74 + .byte 2 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1056 + .hword 473 + .byte 2 + .byte 6 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 4 + .byte 0 + .hword 256 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 6 + .byte -83 + .byte -34 + .byte -108 + .byte -21 + .byte 116 + .byte 68 + .byte 2 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1066 + .hword 473 + .byte 1 + .byte 7 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .hword 256 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 6 + .byte -83 + .byte -34 + .byte 20 + .byte -89 + .byte 66 + .byte 74 + .byte 2 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 1060 + .hword 473 + .byte 2 + .byte 5 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .hword 256 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 6 + .byte -83 + .byte -41 + .byte -108 + .byte -111 + .byte 96 + .byte 68 + .byte 2 + .byte 1 + .byte 16 + .hword 256 + .byte 2 + .byte 2 + .hword 1046 + .hword 473 + .byte 1 + .byte 3 + .byte 40 + .byte 32 + .byte 4 + .byte 1 + .byte 3 + .byte 0 + .hword 256 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 6 + .byte -83 + .byte 58 + .byte 20 + .byte -85 + .byte 66 + .byte 74 + .byte 2 + .byte 1 + .byte 32 + .hword 256 + .byte 2 + .byte 2 + .hword 2092 + .hword 473 + .byte 2 + .byte 5 + .byte 40 + .byte 32 + .byte 3 + .byte 1 + .byte 3 + .byte 0 + .hword 256 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .type nand_opt_para, %object + .size nand_opt_para, 128 +nand_opt_para: + .byte 1 + .byte 0 + .byte 49 + .byte 63 + .byte 0 + .byte 49 + .byte -128 + .byte 21 + .byte 0 + .byte 50 + .byte 17 + .byte -128 + .byte 112 + .byte 120 + .byte 120 + .byte 3 + .byte 1 + .byte 0 + .zero 14 + .byte 2 + .byte 0 + .byte 49 + .byte 63 + .byte 0 + .byte 49 + .byte -128 + .byte 21 + .byte 0 + .byte 0 + .byte 17 + .byte -127 + .byte 112 + .byte -15 + .byte -14 + .byte 0 + .byte 0 + .byte 0 + .zero 14 + .byte 3 + .byte 0 + .byte 49 + .byte 63 + .byte 0 + .byte 49 + .byte -128 + .byte 21 + .byte 96 + .byte 96 + .byte 17 + .byte -127 + .byte 112 + .byte -15 + .byte -14 + .byte 0 + .byte 0 + .byte 0 + .zero 14 + .byte 4 + .byte 0 + .byte 49 + .byte 63 + .byte 0 + .byte 49 + .byte -128 + .byte 21 + .byte 96 + .byte 96 + .byte 17 + .byte -127 + .byte 112 + .byte 112 + .byte 112 + .byte 0 + .byte 0 + .byte 0 + .zero 14 + .type tlc_prog_order, %object + .size tlc_prog_order, 768 +tlc_prog_order: + .hword 1 + .hword 9 + .hword 2 + .hword 17 + .hword 10 + .hword 3 + .hword 25 + .hword 18 + .hword 11 + .hword 33 + .hword 26 + .hword 19 + .hword 41 + .hword 34 + .hword 27 + .hword 49 + .hword 42 + .hword 35 + .hword 57 + .hword 50 + .hword 43 + .hword 65 + .hword 58 + .hword 51 + .hword 73 + .hword 66 + .hword 59 + .hword 81 + .hword 74 + .hword 67 + .hword 89 + .hword 82 + .hword 75 + .hword 97 + .hword 90 + .hword 83 + .hword 105 + .hword 98 + .hword 91 + .hword 113 + .hword 106 + .hword 99 + .hword 121 + .hword 114 + .hword 107 + .hword 129 + .hword 122 + .hword 115 + .hword 137 + .hword 130 + .hword 123 + .hword 145 + .hword 138 + .hword 131 + .hword 153 + .hword 146 + .hword 139 + .hword 161 + .hword 154 + .hword 147 + .hword 169 + .hword 162 + .hword 155 + .hword 177 + .hword 170 + .hword 163 + .hword 185 + .hword 178 + .hword 171 + .hword 193 + .hword 186 + .hword 179 + .hword 201 + .hword 194 + .hword 187 + .hword 209 + .hword 202 + .hword 195 + .hword 217 + .hword 210 + .hword 203 + .hword 225 + .hword 218 + .hword 211 + .hword 233 + .hword 226 + .hword 219 + .hword 241 + .hword 234 + .hword 227 + .hword 249 + .hword 242 + .hword 235 + .hword 257 + .hword 250 + .hword 243 + .hword 265 + .hword 258 + .hword 251 + .hword 273 + .hword 266 + .hword 259 + .hword 281 + .hword 274 + .hword 267 + .hword 289 + .hword 282 + .hword 275 + .hword 297 + .hword 290 + .hword 283 + .hword 305 + .hword 298 + .hword 291 + .hword 313 + .hword 306 + .hword 299 + .hword 321 + .hword 314 + .hword 307 + .hword 329 + .hword 322 + .hword 315 + .hword 337 + .hword 330 + .hword 323 + .hword 345 + .hword 338 + .hword 331 + .hword 353 + .hword 346 + .hword 339 + .hword 361 + .hword 354 + .hword 347 + .hword 369 + .hword 362 + .hword 355 + .hword 377 + .hword 370 + .hword 363 + .hword 385 + .hword 378 + .hword 371 + .hword 393 + .hword 386 + .hword 379 + .hword 401 + .hword 394 + .hword 387 + .hword 409 + .hword 402 + .hword 395 + .hword 417 + .hword 410 + .hword 403 + .hword 425 + .hword 418 + .hword 411 + .hword 433 + .hword 426 + .hword 419 + .hword 441 + .hword 434 + .hword 427 + .hword 449 + .hword 442 + .hword 435 + .hword 457 + .hword 450 + .hword 443 + .hword 465 + .hword 458 + .hword 451 + .hword 473 + .hword 466 + .hword 459 + .hword 481 + .hword 474 + .hword 467 + .hword 489 + .hword 482 + .hword 475 + .hword 497 + .hword 490 + .hword 483 + .hword 505 + .hword 498 + .hword 491 + .hword 513 + .hword 506 + .hword 499 + .hword 521 + .hword 514 + .hword 507 + .hword 529 + .hword 522 + .hword 515 + .hword 537 + .hword 530 + .hword 523 + .hword 545 + .hword 538 + .hword 531 + .hword 553 + .hword 546 + .hword 539 + .hword 561 + .hword 554 + .hword 547 + .hword 569 + .hword 562 + .hword 555 + .hword 577 + .hword 570 + .hword 563 + .hword 585 + .hword 578 + .hword 571 + .hword 593 + .hword 586 + .hword 579 + .hword 601 + .hword 594 + .hword 587 + .hword 609 + .hword 602 + .hword 595 + .hword 617 + .hword 610 + .hword 603 + .hword 625 + .hword 618 + .hword 611 + .hword 633 + .hword 626 + .hword 619 + .hword 641 + .hword 634 + .hword 627 + .hword 649 + .hword 642 + .hword 635 + .hword 657 + .hword 650 + .hword 643 + .hword 665 + .hword 658 + .hword 651 + .hword 673 + .hword 666 + .hword 659 + .hword 681 + .hword 674 + .hword 667 + .hword 689 + .hword 682 + .hword 675 + .hword 697 + .hword 690 + .hword 683 + .hword 705 + .hword 698 + .hword 691 + .hword 713 + .hword 706 + .hword 699 + .hword 721 + .hword 714 + .hword 707 + .hword 729 + .hword 722 + .hword 715 + .hword 737 + .hword 730 + .hword 723 + .hword 745 + .hword 738 + .hword 731 + .hword 753 + .hword 746 + .hword 739 + .hword 761 + .hword 754 + .hword 747 + .hword 769 + .hword 762 + .hword 755 + .hword 777 + .hword 770 + .hword 763 + .hword 785 + .hword 778 + .hword 771 + .hword 793 + .hword 786 + .hword 779 + .hword 801 + .hword 794 + .hword 787 + .hword 809 + .hword 802 + .hword 795 + .hword 817 + .hword 810 + .hword 803 + .hword 825 + .hword 818 + .hword 811 + .hword 833 + .hword 826 + .hword 819 + .hword 841 + .hword 834 + .hword 827 + .hword 849 + .hword 842 + .hword 835 + .hword 857 + .hword 850 + .hword 843 + .hword 865 + .hword 858 + .hword 851 + .hword 873 + .hword 866 + .hword 859 + .hword 881 + .hword 874 + .hword 867 + .hword 889 + .hword 882 + .hword 875 + .hword 897 + .hword 890 + .hword 883 + .hword 905 + .hword 898 + .hword 891 + .hword 913 + .hword 906 + .hword 899 + .hword 921 + .hword 914 + .hword 907 + .hword 929 + .hword 922 + .hword 915 + .hword 937 + .hword 930 + .hword 923 + .hword 945 + .hword 938 + .hword 931 + .hword 953 + .hword 946 + .hword 939 + .hword 961 + .hword 954 + .hword 947 + .hword 969 + .hword 962 + .hword 955 + .hword 977 + .hword 970 + .hword 963 + .hword 985 + .hword 978 + .hword 971 + .hword 993 + .hword 986 + .hword 979 + .hword 1001 + .hword 994 + .hword 987 + .hword 1009 + .hword 1002 + .hword 995 + .hword 1017 + .hword 1010 + .hword 1003 + .hword 1018 + .hword 1011 + .hword 1019 + .type gTable_Crc32, %object + .size gTable_Crc32, 1024 +gTable_Crc32: + .word 0 + .word 79760823 + .word 159521646 + .word 222500569 + .word 319043292 + .word 398801771 + .word 445001138 + .word 507977733 + .word 638086584 + .word 583622671 + .word 797603542 + .word 726367073 + .word 890002276 + .word 835540691 + .word 1015955466 + .word 944721341 + .word 1276173168 + .word 1221711559 + .word 1167245342 + .word 1096011177 + .word 1595207084 + .word 1540743195 + .word 1452734146 + .word 1381497717 + .word 1780004552 + .word 1859763071 + .word 1671081382 + .word 1734058001 + .word 2031910932 + .word 2111671715 + .word 1889442682 + .word 1952421581 + .word -1742620960 + .word -1662993577 + .word -1851544178 + .word -1788698567 + .word -1960476612 + .word -1880846965 + .word -2102944942 + .word -2040097051 + .word -1104553128 + .word -1159145745 + .word -1213480906 + .word -1284846207 + .word -1389499004 + .word -1444093901 + .word -1531971862 + .word -1603339427 + .word -734958192 + .word -789553113 + .word -575441154 + .word -646808759 + .word -952804532 + .word -1007397125 + .word -826851294 + .word -898216555 + .word -231145432 + .word -151515745 + .word -71623866 + .word -8775951 + .word -516081932 + .word -436454589 + .word -390124134 + .word -327278547 + .word 880959607 + .word 809725376 + .word 1023441689 + .word 968980142 + .word 663115435 + .word 591878940 + .word 772033989 + .word 717570162 + .word 311037391 + .word 374014072 + .word 453514913 + .word 533273366 + .word 26098451 + .word 89077412 + .word 135012477 + .word 214773194 + .word 2022882055 + .word 2085861040 + .word 1896915049 + .word 1976675806 + .word 1805028827 + .word 1868005484 + .word 1645516469 + .word 1725274882 + .word 1587205823 + .word 1515969288 + .word 1461243345 + .word 1406779494 + .word 1302257763 + .word 1231023572 + .word 1142749965 + .word 1088288442 + .word -1398548841 + .word -1469916384 + .word -1524511239 + .word -1579106226 + .word -1079517109 + .word -1150882308 + .word -1239024859 + .word -1293617518 + .word -1968456913 + .word -1905609064 + .word -2094423999 + .word -2014794250 + .word -1716548109 + .word -1653702588 + .word -1876060515 + .word -1796433110 + .word -525136409 + .word -462290864 + .word -382658935 + .word -303031490 + .word -206095557 + .word -143247732 + .word -97181611 + .word -17551902 + .word -960798625 + .word -1032163864 + .word -818316495 + .word -872909178 + .word -708880765 + .word -780248268 + .word -599962131 + .word -654557094 + .word 1761919214 + .word 1841679705 + .word 1619450752 + .word 1682429495 + .word 2046883378 + .word 2126642053 + .word 1937960284 + .word 2000937195 + .word 1326230870 + .word 1271767265 + .word 1183757880 + .word 1112521615 + .word 1544067978 + .word 1489606205 + .word 1435140324 + .word 1363905875 + .word 622074782 + .word 567612969 + .word 748028144 + .word 676793671 + .word 907029826 + .word 852566261 + .word 1066546732 + .word 995310491 + .word 52196902 + .word 131955601 + .word 178154824 + .word 241131775 + .word 270024954 + .word 349785421 + .word 429546388 + .word 492525091 + .word -249203186 + .word -169575495 + .word -123245216 + .word -60399401 + .word -501137198 + .word -421507739 + .word -341615684 + .word -278768117 + .word -684909642 + .word -739502591 + .word -558956328 + .word -630321809 + .word -1003934358 + .word -1058529059 + .word -844417532 + .word -915784781 + .word -1120555650 + .word -1175150391 + .word -1263028720 + .word -1334395993 + .word -1372480606 + .word -1427073515 + .word -1481408308 + .word -1552773765 + .word -1690451770 + .word -1610822287 + .word -1832920152 + .word -1770072545 + .word -2009467366 + .word -1929839699 + .word -2118390412 + .word -2055544637 + .word 1569104025 + .word 1497869614 + .word 1409596407 + .word 1355134528 + .word 1317180997 + .word 1245944818 + .word 1191218475 + .word 1136754844 + .word 2072956193 + .word 2135933078 + .word 1913443919 + .word 1993202680 + .word 1753938941 + .word 1816917578 + .word 1627971731 + .word 1707732260 + .word 295074793 + .word 358053470 + .word 403988615 + .word 483749168 + .word 43142453 + .word 106119298 + .word 185620059 + .word 265378796 + .word 933107281 + .word 861871078 + .word 1042025791 + .word 987562120 + .word 614080653 + .word 542846266 + .word 756562915 + .word 702101076 + .word -978905479 + .word -1050272818 + .word -869987049 + .word -924581728 + .word -693952347 + .word -765317870 + .word -551470133 + .word -606062980 + .word -475038783 + .word -412191114 + .word -366124881 + .word -286495464 + .word -257209059 + .word -194363222 + .word -114731405 + .word -35103804 + .word -1984443127 + .word -1921597250 + .word -2143955353 + .word -2064327728 + .word -1699480619 + .word -1636632990 + .word -1825447749 + .word -1745818356 + .word -1346395983 + .word -1417761530 + .word -1505903649 + .word -1560496536 + .word -1128556947 + .word -1199924262 + .word -1254519549 + .word -1309114188 + .bss + .align 6 +.LANCHOR0 = . + 0 +.LANCHOR4 = . + 4352 +.LANCHOR5 = . + 21760 +.LANCHOR6 = . + 39168 +.LANCHOR7 = . + 52224 +.LANCHOR8 = . + 56576 +.LANCHOR9 = . + 60928 + .type g_nandc_ver, %object + .size g_nandc_ver, 1 +g_nandc_ver: + .zero 1 + .zero 3 + .type _c_user_data_density, %object + .size _c_user_data_density, 4 +_c_user_data_density: + .zero 4 + .type gp_nandc, %object + .size gp_nandc, 8 +gp_nandc: + .zero 8 + .type NANDC_FMCTL, %object + .size NANDC_FMCTL, 4 +NANDC_FMCTL: + .zero 4 + .type NANDC_FMWAIT, %object + .size NANDC_FMWAIT, 4 +NANDC_FMWAIT: + .zero 4 + .type NANDC_FLCTL, %object + .size NANDC_FLCTL, 4 +NANDC_FLCTL: + .zero 4 + .type NANDC_BCHCTL, %object + .size NANDC_BCHCTL, 4 +NANDC_BCHCTL: + .zero 4 + .type NANDC_DLL_CTL_REG0, %object + .size NANDC_DLL_CTL_REG0, 4 +NANDC_DLL_CTL_REG0: + .zero 4 + .type NANDC_DLL_CTL_REG1, %object + .size NANDC_DLL_CTL_REG1, 4 +NANDC_DLL_CTL_REG1: + .zero 4 + .type NANDC_RANDMZ_CFG, %object + .size NANDC_RANDMZ_CFG, 4 +NANDC_RANDMZ_CFG: + .zero 4 + .type NANDC_FMWAIT_SYN, %object + .size NANDC_FMWAIT_SYN, 4 +NANDC_FMWAIT_SYN: + .zero 4 + .type gp_nand_para_info, %object + .size gp_nand_para_info, 8 +gp_nand_para_info: + .zero 8 + .type g_idb_ecc_bits, %object + .size g_idb_ecc_bits, 1 +g_idb_ecc_bits: + .zero 1 + .type g_nand_max_die, %object + .size g_nand_max_die, 1 +g_nand_max_die: + .zero 1 + .type g_flash_slc_mode, %object + .size g_flash_slc_mode, 1 +g_flash_slc_mode: + .zero 1 + .zero 5 + .type g_nand_opt_para, %object + .size g_nand_opt_para, 32 +g_nand_opt_para: + .zero 32 + .type g_flash_toggle_mode_en, %object + .size g_flash_toggle_mode_en, 1 +g_flash_toggle_mode_en: + .zero 1 + .type nandc_hw_seed, %object + .size nandc_hw_seed, 1 +nandc_hw_seed: + .zero 1 + .zero 6 + .type g_nandc_v6_master_info, %object + .size g_nandc_v6_master_info, 40 +g_nandc_v6_master_info: + .zero 40 + .type nandc_randomizer_en, %object + .size nandc_randomizer_en, 1 +nandc_randomizer_en: + .zero 1 + .zero 1 + .type fill_spare_size, %object + .size fill_spare_size, 2 +fill_spare_size: + .zero 2 + .type g_nandc_ecc_bits, %object + .size g_nandc_ecc_bits, 1 +g_nandc_ecc_bits: + .zero 1 + .type g_retryMode, %object + .size g_retryMode, 1 +g_retryMode: + .zero 1 + .type g_maxRegNum, %object + .size g_maxRegNum, 1 +g_maxRegNum: + .zero 1 + .zero 1 + .type gp_flash_info, %object + .size gp_flash_info, 8 +gp_flash_info: + .zero 8 + .type g_die_cs_idx, %object + .size g_die_cs_idx, 8 +g_die_cs_idx: + .zero 8 + .type g_slc_mode_addr2, %object + .size g_slc_mode_addr2, 1 +g_slc_mode_addr2: + .zero 1 + .zero 1 + .type g_block_align_addr, %object + .size g_block_align_addr, 2 +g_block_align_addr: + .zero 2 + .type g_lsb_page_tbl, %object + .size g_lsb_page_tbl, 512 +g_lsb_page_tbl: + .zero 512 + .type g_flash_cur_mode, %object + .size g_flash_cur_mode, 1 +g_flash_cur_mode: + .zero 1 + .zero 3 + .type IDByte, %object + .size IDByte, 32 +IDByte: + .zero 32 + .type g_flash_interface_mode, %object + .size g_flash_interface_mode, 1 +g_flash_interface_mode: + .zero 1 + .type g_flash_multi_page_prog_en, %object + .size g_flash_multi_page_prog_en, 1 +g_flash_multi_page_prog_en: + .zero 1 + .zero 6 + .type g_buf, %object + .size g_buf, 2048 +g_buf: + .zero 2048 + .type _c_ftl_sec_per_page, %object + .size _c_ftl_sec_per_page, 1 +_c_ftl_sec_per_page: + .zero 1 + .type p_free_buf_head, %object + .size p_free_buf_head, 1 +p_free_buf_head: + .zero 1 + .type free_buf_count, %object + .size free_buf_count, 1 +free_buf_count: + .zero 1 + .zero 1 + .type _c_totle_phy_density, %object + .size _c_totle_phy_density, 4 +_c_totle_phy_density: + .zero 4 + .type _c_totle_log_page, %object + .size _c_totle_log_page, 4 +_c_totle_log_page: + .zero 4 + .zero 4 + .type gp_ftl_ext_info, %object + .size gp_ftl_ext_info, 8 +gp_ftl_ext_info: + .zero 8 + .type gp_ftl_info, %object + .size gp_ftl_info, 8 +gp_ftl_info: + .zero 8 + .type write_buf_head, %object + .size write_buf_head, 1 +write_buf_head: + .zero 1 + .type write_buf_count, %object + .size write_buf_count, 1 +write_buf_count: + .zero 1 + .zero 2 + .type read_ahead_lpa, %object + .size read_ahead_lpa, 4 +read_ahead_lpa: + .zero 4 + .type p_read_ahead_ext_buf, %object + .size p_read_ahead_ext_buf, 8 +p_read_ahead_ext_buf: + .zero 8 + .type sblk_read_completed_queue_head, %object + .size sblk_read_completed_queue_head, 1 +sblk_read_completed_queue_head: + .zero 1 + .zero 1 + .type _c_ftl_blk_pre_plane, %object + .size _c_ftl_blk_pre_plane, 2 +_c_ftl_blk_pre_plane: + .zero 2 + .zero 4 + .type ftl_sblk_vpn, %object + .size ftl_sblk_vpn, 8 +ftl_sblk_vpn: + .zero 8 + .type gp_blk_info, %object + .size gp_blk_info, 8 +gp_blk_info: + .zero 8 + .type g_gc_info, %object + .size g_gc_info, 328 +g_gc_info: + .zero 328 + .type gc_slc_mode_vpn_th, %object + .size gc_slc_mode_vpn_th, 2 +gc_slc_mode_vpn_th: + .zero 2 + .zero 6 + .type gc_valid_page_ppa, %object + .size gc_valid_page_ppa, 8 +gc_valid_page_ppa: + .zero 8 + .type sblk_gc_write_completed_queue_head, %object + .size sblk_gc_write_completed_queue_head, 1 +sblk_gc_write_completed_queue_head: + .zero 1 + .type _c_ftl_nand_type, %object + .size _c_ftl_nand_type, 1 +_c_ftl_nand_type: + .zero 1 + .zero 6 + .type gc_page_buf_id, %object + .size gc_page_buf_id, 8 +gc_page_buf_id: + .zero 8 + .type g_flash_3d_tlc_flag, %object + .size g_flash_3d_tlc_flag, 1 +g_flash_3d_tlc_flag: + .zero 1 + .type gc_mode, %object + .size gc_mode, 1 +gc_mode: + .zero 1 + .type _c_ftl_page_pre_blk, %object + .size _c_ftl_page_pre_blk, 2 +_c_ftl_page_pre_blk: + .zero 2 + .type _c_ftl_nand_planes_num, %object + .size _c_ftl_nand_planes_num, 1 +_c_ftl_nand_planes_num: + .zero 1 + .zero 1 + .type gc_free_slc_sblk_th, %object + .size gc_free_slc_sblk_th, 2 +gc_free_slc_sblk_th: + .zero 2 + .type _c_ftl_planes_per_die, %object + .size _c_ftl_planes_per_die, 1 +_c_ftl_planes_per_die: + .zero 1 + .zero 1 + .type _c_ftl_block_addr_log2, %object + .size _c_ftl_block_addr_log2, 2 +_c_ftl_block_addr_log2: + .zero 2 + .type _c_mix_max_slc_ec_count, %object + .size _c_mix_max_slc_ec_count, 2 +_c_mix_max_slc_ec_count: + .zero 2 + .type _c_mix_max_xlc_ec_count, %object + .size _c_mix_max_xlc_ec_count, 2 +_c_mix_max_xlc_ec_count: + .zero 2 + .type _max_xlc_super_block, %object + .size _max_xlc_super_block, 2 +_max_xlc_super_block: + .zero 2 + .type _max_slc_super_block, %object + .size _max_slc_super_block, 2 +_max_slc_super_block: + .zero 2 + .type g_flash_3d_mlc_flag, %object + .size g_flash_3d_mlc_flag, 1 +g_flash_3d_mlc_flag: + .zero 1 + .zero 1 + .type _c_ftl_block_align_addr, %object + .size _c_ftl_block_align_addr, 2 +_c_ftl_block_align_addr: + .zero 2 + .type _c_ftl_nand_die_num, %object + .size _c_ftl_nand_die_num, 1 +_c_ftl_nand_die_num: + .zero 1 + .zero 1 + .type _c_ftl_page_pre_slc_blk, %object + .size _c_ftl_page_pre_slc_blk, 2 +_c_ftl_page_pre_slc_blk: + .zero 2 + .zero 4 + .type lpa_hash, %object + .size lpa_hash, 512 +lpa_hash: + .zero 512 + .type ftl_sblk_lpa_tbl, %object + .size ftl_sblk_lpa_tbl, 8 +ftl_sblk_lpa_tbl: + .zero 8 + .type lpa_hash_index, %object + .size lpa_hash_index, 8 +lpa_hash_index: + .zero 8 + .type ftl_vpn_update_count, %object + .size ftl_vpn_update_count, 2 +ftl_vpn_update_count: + .zero 2 + .type ftl_sblk_vpn_update_id, %object + .size ftl_sblk_vpn_update_id, 2 +ftl_sblk_vpn_update_id: + .zero 2 + .type write_commit_count, %object + .size write_commit_count, 1 +write_commit_count: + .zero 1 + .type sblk_write_completed_queue_head, %object + .size sblk_write_completed_queue_head, 1 +sblk_write_completed_queue_head: + .zero 1 + .type sblk_queue_head, %object + .size sblk_queue_head, 1 +sblk_queue_head: + .zero 1 + .zero 1 + .type pm_gc_enable, %object + .size pm_gc_enable, 4 +pm_gc_enable: + .zero 4 + .zero 4 + .type pm_ram_info, %object + .size pm_ram_info, 512 +pm_ram_info: + .zero 512 + .type pm_last_update_ram_id, %object + .size pm_last_update_ram_id, 1 +pm_last_update_ram_id: + .zero 1 + .zero 3 + .type g_msb_page_tbl, %object + .size g_msb_page_tbl, 1024 +g_msb_page_tbl: + .zero 1024 + .type g_slc_page_num, %object + .size g_slc_page_num, 2 +g_slc_page_num: + .zero 2 + .zero 2 + .type g_die_addr, %object + .size g_die_addr, 32 +g_die_addr: + .zero 32 + .type g_totle_phy_block, %object + .size g_totle_phy_block, 2 +g_totle_phy_block: + .zero 2 + .type gc_state, %object + .size gc_state, 1 +gc_state: + .zero 1 + .zero 1 + .type gc_tlc_mode_slc_vpn_th, %object + .size gc_tlc_mode_slc_vpn_th, 2 +gc_tlc_mode_slc_vpn_th: + .zero 2 + .type gc_tlc_mode_tlc_vpn_th, %object + .size gc_tlc_mode_tlc_vpn_th, 2 +gc_tlc_mode_tlc_vpn_th: + .zero 2 + .type gc_lpa_tbl, %object + .size gc_lpa_tbl, 8 +gc_lpa_tbl: + .zero 8 + .type gc_pre_ppa_tbl, %object + .size gc_pre_ppa_tbl, 8 +gc_pre_ppa_tbl: + .zero 8 + .type gc_des_ppa_tbl, %object + .size gc_des_ppa_tbl, 8 +gc_des_ppa_tbl: + .zero 8 + .type _c_max_pm_sblk, %object + .size _c_max_pm_sblk, 2 +_c_max_pm_sblk: + .zero 2 + .zero 6 + .type power_on_init_jiffies, %object + .size power_on_init_jiffies, 8 +power_on_init_jiffies: + .zero 8 + .type gp_ftl_api, %object + .size gp_ftl_api, 8 +gp_ftl_api: + .zero 8 + .type RK29_NANDC_REG_BASE, %object + .size RK29_NANDC_REG_BASE, 8 +RK29_NANDC_REG_BASE: + .zero 8 + .type g_flash_tmp_page_buffer, %object + .size g_flash_tmp_page_buffer, 8 +g_flash_tmp_page_buffer: + .zero 8 + .type g_flash_tmp_spare_buffer, %object + .size g_flash_tmp_spare_buffer, 8 +g_flash_tmp_spare_buffer: + .zero 8 + .type g_maxRetryCount, %object + .size g_maxRetryCount, 1 +g_maxRetryCount: + .zero 1 + .zero 7 + .type flash_read_retry, %object + .size flash_read_retry, 8 +flash_read_retry: + .zero 8 + .type g_flash_sys_spare_buffer, %object + .size g_flash_sys_spare_buffer, 8 +g_flash_sys_spare_buffer: + .zero 8 + .type g_flash_blk_info, %object + .size g_flash_blk_info, 4 +g_flash_blk_info: + .zero 4 + .zero 4 + .type g_flash_page_buffer, %object + .size g_flash_page_buffer, 8 +g_flash_page_buffer: + .zero 8 + .type g_flash_spare_buffer, %object + .size g_flash_spare_buffer, 8 +g_flash_spare_buffer: + .zero 8 + .type g_idb_slc_mode_enable, %object + .size g_idb_slc_mode_enable, 1 +g_idb_slc_mode_enable: + .zero 1 + .zero 15 + .type ftl_tmp_buffer, %object + .size ftl_tmp_buffer, 16384 +ftl_tmp_buffer: + .zero 16384 + .type ftl_tmp_spare, %object + .size ftl_tmp_spare, 256 +ftl_tmp_spare: + .zero 256 + .type write_commit_head, %object + .size write_commit_head, 1 +write_commit_head: + .zero 1 + .zero 3 + .type ftl_flush_jiffies, %object + .size ftl_flush_jiffies, 4 +ftl_flush_jiffies: + .zero 4 + .type g_flash_reversd_blks, %object + .size g_flash_reversd_blks, 1 +g_flash_reversd_blks: + .zero 1 + .zero 55 + .type ftl_info_spare, %object + .size ftl_info_spare, 256 +ftl_info_spare: + .zero 256 + .type g_ftl_info_blk, %object + .size g_ftl_info_blk, 4 +g_ftl_info_blk: + .zero 4 + .zero 60 + .type ftl_info_data_buffer, %object + .size ftl_info_data_buffer, 16384 +ftl_info_data_buffer: + .zero 16384 + .type ftl_power_lost_flag, %object + .size ftl_power_lost_flag, 1 +ftl_power_lost_flag: + .zero 1 + .zero 63 + .type ftl_ext_info_data_buffer, %object + .size ftl_ext_info_data_buffer, 16384 +ftl_ext_info_data_buffer: + .zero 16384 + .type ftl_low_format_cur_blk, %object + .size ftl_low_format_cur_blk, 2 +ftl_low_format_cur_blk: + .zero 2 + .type _c_ftl_pm_page_num, %object + .size _c_ftl_pm_page_num, 2 +_c_ftl_pm_page_num: + .zero 2 + .zero 4 + .type g_pm_spare, %object + .size g_pm_spare, 8 +g_pm_spare: + .zero 8 + .type g_flash_multi_page_read_en, %object + .size g_flash_multi_page_read_en, 1 +g_flash_multi_page_read_en: + .zero 1 + .zero 1 + .type _c_ftl_byte_pre_page, %object + .size _c_ftl_byte_pre_page, 2 +_c_ftl_byte_pre_page: + .zero 2 + .type pm_last_load_ram_id, %object + .size pm_last_load_ram_id, 1 +pm_last_load_ram_id: + .zero 1 + .zero 3 + .type vpn_mulit_value, %object + .size vpn_mulit_value, 2304 +vpn_mulit_value: + .zero 2304 + .type check_vpc_tbl, %object + .size check_vpc_tbl, 4352 +check_vpc_tbl: + .zero 4352 + .type _c_totle_data_density, %object + .size _c_totle_data_density, 4 +_c_totle_data_density: + .zero 4 + .type _min_slc_super_block, %object + .size _min_slc_super_block, 2 +_min_slc_super_block: + .zero 2 + .zero 2 + .type gLoaderBootInfo, %object + .size gLoaderBootInfo, 8 +gLoaderBootInfo: + .zero 8 + .type RK29_NANDC1_REG_BASE, %object + .size RK29_NANDC1_REG_BASE, 8 +RK29_NANDC1_REG_BASE: + .zero 8 + .type discard_sector_count, %object + .size discard_sector_count, 4 +discard_sector_count: + .zero 4 + .zero 4 + .type g_idb_buffer, %object + .size g_idb_buffer, 8 +g_idb_buffer: + .zero 8 + .type gpDrmKeyInfo, %object + .size gpDrmKeyInfo, 8 +gpDrmKeyInfo: + .zero 8 + .type SecureBootCheckOK, %object + .size SecureBootCheckOK, 4 +SecureBootCheckOK: + .zero 4 + .type SecureBootEn, %object + .size SecureBootEn, 4 +SecureBootEn: + .zero 4 + .type gpBootConfig, %object + .size gpBootConfig, 8 +gpBootConfig: + .zero 8 + .type gSnSectorData, %object + .size gSnSectorData, 512 +gSnSectorData: + .zero 512 + .type SecureBootUnlockTryCount, %object + .size SecureBootUnlockTryCount, 4 +SecureBootUnlockTryCount: + .zero 4 + .zero 4 + .type gpVendor0Info, %object + .size gpVendor0Info, 8 +gpVendor0Info: + .zero 8 + .type gpVendor1Info, %object + .size gpVendor1Info, 8 +gpVendor1Info: + .zero 8 + .type g_vendor, %object + .size g_vendor, 8 +g_vendor: + .zero 8 + .type _c_ftl_nand_blks_per_die, %object + .size _c_ftl_nand_blks_per_die, 2 +_c_ftl_nand_blks_per_die: + .zero 2 + .type g_slc_mode_enable, %object + .size g_slc_mode_enable, 1 +g_slc_mode_enable: + .zero 1