diff --git a/patch/kernel/archive/rk322x-5.15/02-linux-0010-add-rknand-driver.patch.disabled b/patch/kernel/archive/rk322x-5.15/02-linux-0010-add-rknand-driver.patch.disabled new file mode 100644 index 000000000..d514cf83e --- /dev/null +++ b/patch/kernel/archive/rk322x-5.15/02-linux-0010-add-rknand-driver.patch.disabled @@ -0,0 +1,215436 @@ +From 2d49e99980ac3e0ccecb445d5ae3db5883fff5d6 Mon Sep 17 00:00:00 2001 +From: Paolo Sabatino +Date: Sun, 13 Mar 2022 18:24:24 +0000 +Subject: [PATCH] first rknand iteration + +--- + drivers/Kconfig | 3 + + drivers/Makefile | 1 + + drivers/rk_nand/Kconfig | 10 + + drivers/rk_nand/Makefile | 11 + + drivers/rk_nand/rk_ftl_api.h | 41 + + drivers/rk_nand/rk_ftl_arm_v7.S | 30165 +++++++++++++ + drivers/rk_nand/rk_ftl_arm_v7_thumb.S | 30192 +++++++++++++ + drivers/rk_nand/rk_ftl_arm_v8.S | 27968 ++++++++++++ + drivers/rk_nand/rk_ftlv5_arm32.S | 27612 ++++++++++++ + drivers/rk_nand/rk_ftlv5_arm64.S | 25632 +++++++++++ + drivers/rk_nand/rk_helpers.S | 54 + + drivers/rk_nand/rk_helpers.c | 26 + + drivers/rk_nand/rk_nand_base.c | 456 + + drivers/rk_nand/rk_nand_base.h | 46 + + drivers/rk_nand/rk_nand_blk.c | 626 + + drivers/rk_nand/rk_nand_blk.h | 67 + + drivers/rk_nand/rk_zftl_arm32.S | 37095 ++++++++++++++++ + drivers/rk_nand/rk_zftl_arm64.S | 35207 +++++++++++++++ + .../linux/soc/rockchip/rk_vendor_storage.h | 58 + + 19 files changed, 215270 insertions(+) + create mode 100644 drivers/rk_nand/Kconfig + create mode 100644 drivers/rk_nand/Makefile + create mode 100644 drivers/rk_nand/rk_ftl_api.h + create mode 100644 drivers/rk_nand/rk_ftl_arm_v7.S + create mode 100644 drivers/rk_nand/rk_ftl_arm_v7_thumb.S + create mode 100644 drivers/rk_nand/rk_ftl_arm_v8.S + create mode 100644 drivers/rk_nand/rk_ftlv5_arm32.S + create mode 100644 drivers/rk_nand/rk_ftlv5_arm64.S + create mode 100644 drivers/rk_nand/rk_helpers.S + create mode 100644 drivers/rk_nand/rk_helpers.c + create mode 100644 drivers/rk_nand/rk_nand_base.c + create mode 100644 drivers/rk_nand/rk_nand_base.h + create mode 100644 drivers/rk_nand/rk_nand_blk.c + create mode 100644 drivers/rk_nand/rk_nand_blk.h + create mode 100644 drivers/rk_nand/rk_zftl_arm32.S + create mode 100644 drivers/rk_nand/rk_zftl_arm64.S + create mode 100644 include/linux/soc/rockchip/rk_vendor_storage.h + +diff --git a/drivers/Kconfig b/drivers/Kconfig +index 0d399ddaa18..9473d9a4b83 100644 +--- a/drivers/Kconfig ++++ b/drivers/Kconfig +@@ -236,4 +236,7 @@ source "drivers/interconnect/Kconfig" + source "drivers/counter/Kconfig" + + source "drivers/most/Kconfig" ++ ++source "drivers/rk_nand/Kconfig" ++ + endmenu +diff --git a/drivers/Makefile b/drivers/Makefile +index a110338c860..6a55de22220 100644 +--- a/drivers/Makefile ++++ b/drivers/Makefile +@@ -187,3 +187,4 @@ obj-$(CONFIG_GNSS) += gnss/ + obj-$(CONFIG_INTERCONNECT) += interconnect/ + obj-$(CONFIG_COUNTER) += counter/ + obj-$(CONFIG_MOST) += most/ ++obj-$(CONFIG_RK_NAND) += rk_nand/ +diff --git a/drivers/rk_nand/Kconfig b/drivers/rk_nand/Kconfig +new file mode 100644 +index 00000000000..c49a1c28b70 +--- /dev/null ++++ b/drivers/rk_nand/Kconfig +@@ -0,0 +1,10 @@ ++# SPDX-License-Identifier: GPL-2.0 ++if ARCH_ROCKCHIP ++config RK_NAND ++ tristate "RK NAND Device Support" ++ default n ++ depends on BLOCK_RKNAND != y ++ help ++ RK NAND Device Support. ++ ++endif +diff --git a/drivers/rk_nand/Makefile b/drivers/rk_nand/Makefile +new file mode 100644 +index 00000000000..b749c8a5e07 +--- /dev/null ++++ b/drivers/rk_nand/Makefile +@@ -0,0 +1,11 @@ ++# SPDX-License-Identifier: GPL-2.0 ++obj-$(CONFIG_RK_NAND) += rknand.o ++ ++#ifdef CONFIG_THUMB2_KERNEL ++#rk_ftl-$(CONFIG_THUMB2_KERNEL) += rk_ftl_arm_v7_thumb.o ++#else ++#rk_ftl-$(CONFIG_ARM64) += rk_zftl_arm64.o rk_ftlv5_arm64.o ++#rk_ftl-$(CONFIG_ARM) := rk_zftl_arm32.o rk_ftlv5_arm32.o ++#endif ++ ++rknand-y := rk_zftl_arm32.o rk_ftlv5_arm32.o rk_nand_base.o rk_nand_blk.o rk_helpers.o +diff --git a/drivers/rk_nand/rk_ftl_api.h b/drivers/rk_nand/rk_ftl_api.h +new file mode 100644 +index 00000000000..ebde01e3dbb +--- /dev/null ++++ b/drivers/rk_nand/rk_ftl_api.h +@@ -0,0 +1,41 @@ ++/* ++ * Copyright (c) 2016, 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. ++ */ ++ ++#ifndef __RK_FTL_API_H ++#define __RK_FTL_API_H ++ ++void rk_nandc_flash_xfer_completed(void *nandc_reg); ++void rk_nandc_flash_ready(void *nandc_reg); ++u32 rk_nandc_get_irq_status(void *nandc_reg); ++int rknand_proc_ftlread(char *page); ++int FtlRead(u8 lun, u32 index, u32 sectors, u8 *buf); ++int FtlWrite(u8 lun, u32 index, u32 sectors, u8 *buf); ++int rk_ftl_garbage_collect(u32 mode, u32 pages); ++void rk_ftl_cache_write_back(void); ++int FtlDiscard(u32 index, u32 sectors); ++int rk_nand_schedule_enable_config(int en); ++int rk_ftl_get_capacity(void); ++void rk_ftl_storage_sys_init(void); ++int rk_ftl_init(void); ++void rk_nand_de_init(void); ++void rk_ftl_de_init(void); ++void rk_nand_suspend(void); ++void rk_nand_resume(void); ++int rknand_get_reg_addr(unsigned long *p_nandc0, unsigned long *p_nandc1); ++long rknand_sys_storage_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg); ++long rk_ftl_vendor_storage_ioctl(struct file *file, unsigned int cmd, ++ unsigned long arg); ++int rk_ftl_vendor_write(u32 id, void *pbuf, u32 size); ++int rk_ftl_vendor_read(u32 id, void *pbuf, u32 size); ++int rk_ftl_vendor_storage_init(void); ++int rknand_vendor_storage_init(void); ++ ++#endif ++ +diff --git a/drivers/rk_nand/rk_ftl_arm_v7.S b/drivers/rk_nand/rk_ftl_arm_v7.S +new file mode 100644 +index 00000000000..304c982d496 +--- /dev/null ++++ b/drivers/rk_nand/rk_ftl_arm_v7.S +@@ -0,0 +1,30165 @@ ++/* ++ * Copyright (c) 2016-2018, 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: 2021-07-26 ++ */ ++ .arch armv7-a ++ .eabi_attribute 20, 1 ++ .eabi_attribute 21, 1 ++ .eabi_attribute 23, 3 ++ .eabi_attribute 24, 1 ++ .eabi_attribute 25, 1 ++ .eabi_attribute 26, 2 ++ .eabi_attribute 30, 2 ++ .eabi_attribute 34, 1 ++ .eabi_attribute 18, 2 ++ .file "rk_ftl_arm_v7.c" ++ .syntax unified ++ .text ++ .align 2 ++ .fpu softvfp ++ .type ndelay, %function ++ndelay: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L2 ++ add r0, r0, #996 ++ add r0, r0, #3 ++ umull r0, r1, r0, r3 ++ ldr r3, .L2+4 ++ ldr r3, [r3, #8] ++ lsr r0, r1, #6 ++ bx r3 @ indirect register sibling call ++.L3: ++ .align 2 ++.L2: ++ .word 274877907 ++ .word arm_delay_ops ++ .fnend ++ .size ndelay, .-ndelay ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_read_ecc, %function ++flash_read_ecc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L6 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ mov r0, #80 ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r4, r4, r3, lsl #8 ++ mov r3, #122 ++ str r3, [r4, #2056] ++ bl ndelay ++ ldr r3, [r4, #2048] ++ ldr r0, [r4, #2048] ++ and r3, r3, #15 ++ and r0, r0, #15 ++ cmp r0, r3 ++ movcc r0, r3 ++ ldr r3, [r4, #2048] ++ and r3, r3, #15 ++ cmp r3, r0 ++ movcc r3, r0 ++ ldr r0, [r4, #2048] ++ and r0, r0, #15 ++ cmp r0, r3 ++ movcc r0, r3 ++ pop {r4, pc} ++.L7: ++ .align 2 ++.L6: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_read_ecc, .-flash_read_ecc ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_set_blk_mode.part.9, %function ++ftl_set_blk_mode.part.9: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L9 ++ lsr r1, r0, #5 ++ mov ip, #1 ++ and r0, r0, #31 ++ ldr r2, [r3, #32] ++ ldr r3, [r2, r1, lsl #2] ++ orr r0, r3, ip, lsl r0 ++ str r0, [r2, r1, lsl #2] ++ bx lr ++.L10: ++ .align 2 ++.L9: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_set_blk_mode.part.9, .-ftl_set_blk_mode.part.9 ++ .align 2 ++ .global FlashMemCmp8 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashMemCmp8, %function ++FlashMemCmp8: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L25 ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L20 ++ ldrb r3, [r1, #1] @ zero_extendqisi2 ++ ldrb ip, [r0, #1] @ zero_extendqisi2 ++ cmp ip, r3 ++ movne r3, #0 ++ bne .L20 ++.L24: ++ mov r0, #0 ++ bx lr ++.L14: ++ cmp r3, r2 ++ bne .L16 ++ mov r0, #0 ++ ldr pc, [sp], #4 ++.L20: ++ cmp r3, r2 ++ beq .L24 ++ str lr, [sp, #-4]! ++ .save {lr} ++.L16: ++ ldrb lr, [r0, r3] @ zero_extendqisi2 ++ ldrb ip, [r1, r3] @ zero_extendqisi2 ++ add r3, r3, #1 ++ cmp lr, ip ++ beq .L14 ++ mov r0, r3 ++ ldr pc, [sp], #4 ++.L26: ++ .align 2 ++.L25: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashMemCmp8, .-FlashMemCmp8 ++ .align 2 ++ .global FlashRsvdBlkChk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashRsvdBlkChk, %function ++FlashRsvdBlkChk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L28 ++ ldrb ip, [r2, #37] @ zero_extendqisi2 ++ ldr r3, [r2, #40] ++ mul r3, r3, ip ++ cmp r3, r1 ++ movls r2, #0 ++ movhi r2, #1 ++ cmp r0, #0 ++ movne r2, #0 ++ eor r0, r2, #1 ++ bx lr ++.L29: ++ .align 2 ++.L28: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashRsvdBlkChk, .-FlashRsvdBlkChk ++ .align 2 ++ .global FlashGetRandomizer ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashGetRandomizer, %function ++FlashGetRandomizer: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ and r3, r1, #127 ++ ldr r2, .L39 ++ lsl r3, r3, #1 ++ push {r4, lr} ++ .save {r4, lr} ++ ldrh r4, [r2, r3] ++ ldr r3, .L39+4 ++ ldrb r3, [r3, #44] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L30 ++ bl FlashRsvdBlkChk ++ cmp r0, #0 ++ orrne r4, r4, #-1073741824 ++.L30: ++ mov r0, r4 ++ pop {r4, pc} ++.L40: ++ .align 2 ++.L39: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashGetRandomizer, .-FlashGetRandomizer ++ .align 2 ++ .global FlashSetRandomizer ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashSetRandomizer, %function ++FlashSetRandomizer: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L50 ++ and r3, r1, #127 ++ lsl r3, r3, #1 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r6, r0 ++ ldrh r5, [r2, r3] ++ ldr r3, .L50+4 ++ ldrb r2, [r3, #44] @ zero_extendqisi2 ++ mov r4, r3 ++ cmp r2, #0 ++ beq .L42 ++ bl FlashRsvdBlkChk ++ cmp r0, #0 ++ orrne r5, r5, #-1073741824 ++.L42: ++ ldr r3, [r4, r6, lsl #3] ++ str r5, [r3, #336] ++ pop {r4, r5, r6, pc} ++.L51: ++ .align 2 ++.L50: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashSetRandomizer, .-FlashSetRandomizer ++ .align 2 ++ .global FlashBlockAlignInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashBlockAlignInit, %function ++FlashBlockAlignInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r0, #512 ++ ldr r3, .L58 ++ movhi r2, #1024 ++ bhi .L57 ++ cmp r0, #256 ++ movhi r2, #512 ++ bhi .L57 ++ cmp r0, #128 ++ movhi r2, #256 ++ bhi .L57 ++ str r0, [r3, #40] ++ bx lr ++.L57: ++ str r2, [r3, #40] ++ bx lr ++.L59: ++ .align 2 ++.L58: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashBlockAlignInit, .-FlashBlockAlignInit ++ .align 2 ++ .global FlashReadCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadCmd, %function ++FlashReadCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L63 ++ str lr, [sp, #-4]! ++ .save {lr} ++ add r2, ip, r0, lsl #3 ++ ldr r3, [ip, r0, lsl #3] ++ ldr ip, [ip, #48] ++ ldrb r2, [r2, #4] @ zero_extendqisi2 ++ ldrb ip, [ip, #7] @ zero_extendqisi2 ++ lsl r2, r2, #8 ++ cmp ip, #1 ++ addeq ip, r3, r2 ++ moveq lr, #38 ++ add r3, r3, r2 ++ mov r2, #0 ++ streq lr, [ip, #2056] ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ uxtb r2, r1 ++ str r2, [r3, #2052] ++ lsr r2, r1, #8 ++ str r2, [r3, #2052] ++ lsr r2, r1, #16 ++ str r2, [r3, #2052] ++ mov r2, #48 ++ str r2, [r3, #2056] ++ ldr lr, [sp], #4 ++ b FlashSetRandomizer ++.L64: ++ .align 2 ++.L63: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadCmd, .-FlashReadCmd ++ .align 2 ++ .global FlashReadDpDataOutCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadDpDataOutCmd, %function ++FlashReadDpDataOutCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L70 ++ push {r4, lr} ++ .save {r4, lr} ++ uxtb r4, r1 ++ lsr lr, r1, #8 ++ add r2, ip, r0, lsl #3 ++ ldr r3, [ip, r0, lsl #3] ++ ldrb ip, [ip, #68] @ zero_extendqisi2 ++ ldrb r2, [r2, #4] @ zero_extendqisi2 ++ cmp ip, #1 ++ lsr ip, r1, #16 ++ lsl r2, r2, #8 ++ add r3, r3, r2 ++ bne .L66 ++ mov r2, #6 ++ str r2, [r3, #2056] ++ mov r2, #0 ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ str r4, [r3, #2052] ++ str lr, [r3, #2052] ++ str ip, [r3, #2052] ++.L69: ++ mov r2, #224 ++ str r2, [r3, #2056] ++ pop {r4, lr} ++ b FlashSetRandomizer ++.L66: ++ mov r2, #0 ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ str r4, [r3, #2052] ++ str lr, [r3, #2052] ++ str ip, [r3, #2052] ++ mov ip, #5 ++ str ip, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ b .L69 ++.L71: ++ .align 2 ++.L70: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadDpDataOutCmd, .-FlashReadDpDataOutCmd ++ .align 2 ++ .global FlashProgFirstCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgFirstCmd, %function ++FlashProgFirstCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L74 ++ lsr r2, r1, #16 ++ str lr, [sp, #-4]! ++ .save {lr} ++ ldr r3, [ip, r0, lsl #3] ++ add ip, ip, r0, lsl #3 ++ ldrb ip, [ip, #4] @ zero_extendqisi2 ++ add r3, r3, ip, lsl #8 ++ mov ip, #128 ++ str ip, [r3, #2056] ++ mov ip, #0 ++ str ip, [r3, #2052] ++ str ip, [r3, #2052] ++ uxtb ip, r1 ++ str ip, [r3, #2052] ++ lsr ip, r1, #8 ++ str ip, [r3, #2052] ++ str r2, [r3, #2052] ++ ldr lr, [sp], #4 ++ b FlashSetRandomizer ++.L75: ++ .align 2 ++.L74: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgFirstCmd, .-FlashProgFirstCmd ++ .align 2 ++ .global FlashEraseCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashEraseCmd, %function ++FlashEraseCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L82 ++ cmp r2, #0 ++ str lr, [sp, #-4]! ++ .save {lr} ++ ldr r3, [ip, r0, lsl #3] ++ add r0, ip, r0, lsl #3 ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ lsl r0, r0, #8 ++ beq .L77 ++ add r2, r3, r0 ++ mov lr, #96 ++ str lr, [r2, #2056] ++ uxtb lr, r1 ++ str lr, [r2, #2052] ++ lsr lr, r1, #8 ++ str lr, [r2, #2052] ++ lsr lr, r1, #16 ++ str lr, [r2, #2052] ++ ldr r2, [ip, #40] ++ add r1, r1, r2 ++.L77: ++ add r3, r3, r0 ++ mov r2, #96 ++ str r2, [r3, #2056] ++ uxtb r2, r1 ++ str r2, [r3, #2052] ++ lsr r2, r1, #8 ++ lsr r1, r1, #16 ++ str r2, [r3, #2052] ++ mov r2, #208 ++ str r1, [r3, #2052] ++ str r2, [r3, #2056] ++ ldr pc, [sp], #4 ++.L83: ++ .align 2 ++.L82: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashEraseCmd, .-FlashEraseCmd ++ .align 2 ++ .global FlashProgDpSecondCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgDpSecondCmd, %function ++FlashProgDpSecondCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ lsr r2, r1, #16 ++ ldr lr, .L86 ++ ldr r3, [lr, r0, lsl #3] ++ add ip, lr, r0, lsl #3 ++ ldrb r4, [ip, #4] @ zero_extendqisi2 ++ ldrb ip, [lr, #63] @ zero_extendqisi2 ++ add r3, r3, r4, lsl #8 ++ str ip, [r3, #2056] ++ mov ip, #0 ++ str ip, [r3, #2052] ++ str ip, [r3, #2052] ++ uxtb ip, r1 ++ str ip, [r3, #2052] ++ lsr ip, r1, #8 ++ str ip, [r3, #2052] ++ str r2, [r3, #2052] ++ pop {r4, lr} ++ b FlashSetRandomizer ++.L87: ++ .align 2 ++.L86: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgDpSecondCmd, .-FlashProgDpSecondCmd ++ .align 2 ++ .global FlashProgSecondCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgSecondCmd, %function ++FlashProgSecondCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L90 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ ldr r0, .L90+4 ++ ldrb r5, [r3, #4] @ zero_extendqisi2 ++ ldr r3, .L90+8 ++ add r4, r4, r5, lsl #8 ++ ldr r3, [r3, #4] ++ blx r3 ++ mov r3, #16 ++ str r3, [r4, #2056] ++ pop {r4, r5, r6, pc} ++.L91: ++ .align 2 ++.L90: ++ .word .LANCHOR0 ++ .word 64424500 ++ .word arm_delay_ops ++ .fnend ++ .size FlashProgSecondCmd, .-FlashProgSecondCmd ++ .align 2 ++ .global FlashProgDpFirstCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgDpFirstCmd, %function ++FlashProgDpFirstCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L93 ++ ldr r3, [r2, r0, lsl #3] ++ add r0, r2, r0, lsl #3 ++ ldrb r2, [r2, #62] @ zero_extendqisi2 ++ ldrb r1, [r0, #4] @ zero_extendqisi2 ++ add r3, r3, r1, lsl #8 ++ str r2, [r3, #2056] ++ bx lr ++.L94: ++ .align 2 ++.L93: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgDpFirstCmd, .-FlashProgDpFirstCmd ++ .align 2 ++ .global FlashReadStatus ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadStatus, %function ++FlashReadStatus: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L97 ++ mov r2, #112 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r5, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ mov r0, #80 ++ ldrb r4, [r3, #4] @ zero_extendqisi2 ++ add r3, r5, r4, lsl #8 ++ add r4, r4, #8 ++ str r2, [r3, #2056] ++ bl ndelay ++ ldr r0, [r5, r4, lsl #8] ++ pop {r4, r5, r6, pc} ++.L98: ++ .align 2 ++.L97: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadStatus, .-FlashReadStatus ++ .align 2 ++ .global js_hash ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type js_hash, %function ++js_hash: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L102 ++ add r1, r0, r1 ++.L100: ++ cmp r0, r1 ++ bne .L101 ++ mov r0, r3 ++ bx lr ++.L101: ++ lsr r2, r3, #2 ++ ldrb ip, [r0], #1 @ zero_extendqisi2 ++ add r2, r2, r3, lsl #5 ++ add r2, r2, ip ++ eor r3, r3, r2 ++ b .L100 ++.L103: ++ .align 2 ++.L102: ++ .word 1204201446 ++ .fnend ++ .size js_hash, .-js_hash ++ .align 2 ++ .global FlashLoadIdbInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashLoadIdbInfo, %function ++FlashLoadIdbInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r0, #0 ++ bx lr ++ .fnend ++ .size FlashLoadIdbInfo, .-FlashLoadIdbInfo ++ .align 2 ++ .global FlashPrintInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashPrintInfo, %function ++FlashPrintInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FlashPrintInfo, .-FlashPrintInfo ++ .align 2 ++ .global ToshibaSetRRPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ToshibaSetRRPara, %function ++ToshibaSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ add r9, r1, r1, lsl #2 ++ ldr r7, .L114 ++ mov r6, r0 ++ mov r5, #0 ++ add r7, r1, r7 ++.L107: ++ ldr r8, .L114+4 ++ ldrb r3, [r8, #85] @ zero_extendqisi2 ++ cmp r5, r3 ++ bcc .L111 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L111: ++ ldr r4, .L114+8 ++ mov r3, #85 ++ str r3, [r6, #8] ++ mov r0, #200 ++ ldrsb r3, [r5, r4] ++ str r3, [r6, #4] ++ bl ndelay ++ ldrb r3, [r8, #84] @ zero_extendqisi2 ++ cmp r3, #34 ++ addeq r3, r5, r9 ++ addeq r4, r4, r3 ++ ldrsbeq r3, [r4, #5] ++ beq .L113 ++ cmp r3, #35 ++ addeq r3, r5, r9 ++ ldrsbne r3, [r7] ++ addeq r4, r4, r3 ++ ldrsbeq r3, [r4, #50] ++.L113: ++ str r3, [r6] ++ add r5, r5, #1 ++ b .L107 ++.L115: ++ .align 2 ++.L114: ++ .word .LANCHOR1+396 ++ .word .LANCHOR0 ++ .word .LANCHOR1+256 ++ .fnend ++ .size ToshibaSetRRPara, .-ToshibaSetRRPara ++ .align 2 ++ .global SamsungSetRRPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SamsungSetRRPara, %function ++SamsungSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L120 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r4, #0 ++ ldr r8, .L120+4 ++ mov r6, r0 ++ mov r7, r3 ++ mov r9, #161 ++ add r1, r3, r1, lsl #2 ++ mov r10, r4 ++ add r5, r1, #3 ++.L117: ++ ldrb r3, [r8, #85] @ zero_extendqisi2 ++ cmp r4, r3 ++ bcc .L118 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L118: ++ str r9, [r6, #8] ++ mov r0, #300 ++ str r10, [r6] ++ ldrsb r3, [r7, r4] ++ add r4, r4, #1 ++ str r3, [r6] ++ ldrsb r3, [r5, #1]! ++ str r3, [r6] ++ bl ndelay ++ b .L117 ++.L121: ++ .align 2 ++.L120: ++ .word .LANCHOR1+404 ++ .word .LANCHOR0 ++ .fnend ++ .size SamsungSetRRPara, .-SamsungSetRRPara ++ .align 2 ++ .global ftl_flash_suspend ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_flash_suspend, %function ++ftl_flash_suspend: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L123 ++ ldr r2, [r3, #88] ++ ldr r1, [r2] ++ str r1, [r3, #92] ++ ldr r1, [r2, #4] ++ str r1, [r3, #96] ++ ldr r1, [r2, #8] ++ str r1, [r3, #100] ++ ldr r1, [r2, #12] ++ str r1, [r3, #104] ++ ldr r1, [r2, #304] ++ str r1, [r3, #108] ++ ldr r1, [r2, #308] ++ str r1, [r3, #112] ++ ldr r1, [r2, #336] ++ ldr r2, [r2, #344] ++ str r1, [r3, #116] ++ str r2, [r3, #120] ++ bx lr ++.L124: ++ .align 2 ++.L123: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_flash_suspend, .-ftl_flash_suspend ++ .global __aeabi_uidiv ++ .global __aeabi_uidivmod ++ .align 2 ++ .global LogAddr2PhyAddr ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type LogAddr2PhyAddr, %function ++LogAddr2PhyAddr: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r9, r2 ++ ldr r4, .L131 ++ mov fp, r3 ++ mov r10, r1 ++ mov r7, r0 ++ ldr r5, [r0, #4] ++ ldrh r2, [r4, #136] ++ ldrh r3, [r4, #138] ++ ldrh r6, [r4, #40] ++ smulbb r3, r3, r2 ++ ldrb r2, [r4, #36] @ zero_extendqisi2 ++ uxth r3, r3 ++ cmp r2, #1 ++ lsleq r6, r6, #1 ++ ubfx r2, r5, #10, #16 ++ mov r1, r3 ++ str r3, [sp, #4] ++ mov r0, r2 ++ uxtheq r6, r6 ++ str r2, [sp] ++ bl __aeabi_uidiv ++ ldr r3, [sp, #4] ++ uxth r8, r0 ++ ldr r2, [sp] ++ mov r1, r3 ++ mov r0, r2 ++ bl __aeabi_uidivmod ++ cmp r10, #1 ++ uxth r1, r1 ++ ubfx r0, r5, #0, #10 ++ bne .L127 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ addeq r0, r4, r0, lsl #1 ++ ldrheq r0, [r0, #156] ++.L127: ++ add r4, r4, r8, lsl #2 ++ ldr r3, [r4, #1180] ++ mla r6, r6, r1, r3 ++ ldrb r3, [sp, #48] @ zero_extendqisi2 ++ cmp r3, #1 ++ add r0, r6, r0 ++ str r0, [r9] ++ movls r0, #0 ++ str r8, [fp] ++ ldrhi r0, [r7, #4] ++ ldrhi r3, [r7, #40] ++ addhi r0, r0, #1024 ++ subhi r0, r0, r3 ++ clzhi r0, r0 ++ lsrhi r0, r0, #5 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L132: ++ .align 2 ++.L131: ++ .word .LANCHOR0 ++ .fnend ++ .size LogAddr2PhyAddr, .-LogAddr2PhyAddr ++ .align 2 ++ .global FlashReadStatusEN ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadStatusEN, %function ++FlashReadStatusEN: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L146 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r0, r3, r0, lsl #3 ++ ldrb r5, [r0, #4] @ zero_extendqisi2 ++ ldr r0, [r3, #48] ++ ldrb r0, [r0, #8] @ zero_extendqisi2 ++ cmp r0, #2 ++ mov r0, r3 ++ lsl r3, r5, #8 ++ movne r2, #112 ++ add r5, r5, #8 ++ addne r3, r4, r3 ++ strne r2, [r3, #2056] ++ bne .L139 ++ cmp r2, #0 ++ add r3, r4, r3 ++ ldrbne r2, [r0, #66] @ zero_extendqisi2 ++ ldrbeq r2, [r0, #65] @ zero_extendqisi2 ++ str r2, [r3, #2056] ++ ldrb r0, [r0, #67] @ zero_extendqisi2 ++ cmp r0, #0 ++ movne r2, #0 ++ addne ip, r4, r5, lsl #8 ++ bne .L138 ++.L139: ++ mov r0, #80 ++ bl ndelay ++ ldr r0, [r4, r5, lsl #8] ++ uxtb r0, r0 ++ pop {r4, r5, r6, pc} ++.L140: ++ lsl r3, r2, #3 ++ add r2, r2, #1 ++ lsr r3, r1, r3 ++ uxtb r3, r3 ++ str r3, [ip, #4] ++.L138: ++ cmp r2, r0 ++ bcc .L140 ++ b .L139 ++.L147: ++ .align 2 ++.L146: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadStatusEN, .-FlashReadStatusEN ++ .align 2 ++ .global FlashWaitReadyEN ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashWaitReadyEN, %function ++FlashWaitReadyEN: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++.L149: ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashReadStatusEN ++ cmp r0, #255 ++ beq .L149 ++ tst r0, #64 ++ popne {r4, r5, r6, pc} ++ mov r1, #3 ++ mov r0, #1 ++ bl usleep_range ++ b .L149 ++ .fnend ++ .size FlashWaitReadyEN, .-FlashWaitReadyEN ++ .align 2 ++ .global FlashScheduleEnSet ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashScheduleEnSet, %function ++FlashScheduleEnSet: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L156 ++ ldr r2, [r3, #1212] ++ str r0, [r3, #1212] ++ mov r0, r2 ++ bx lr ++.L157: ++ .align 2 ++.L156: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashScheduleEnSet, .-FlashScheduleEnSet ++ .align 2 ++ .global FlashGetPageSize ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashGetPageSize, %function ++FlashGetPageSize: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L159 ++ ldr r3, [r3, #48] ++ ldrb r0, [r3, #9] @ zero_extendqisi2 ++ bx lr ++.L160: ++ .align 2 ++.L159: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashGetPageSize, .-FlashGetPageSize ++ .align 2 ++ .global NandcReadDontCaseBusyEn ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcReadDontCaseBusyEn, %function ++NandcReadDontCaseBusyEn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size NandcReadDontCaseBusyEn, .-NandcReadDontCaseBusyEn ++ .align 2 ++ .global NandcGetChipIf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcGetChipIf, %function ++NandcGetChipIf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L163 ++ add r3, r2, r0, lsl #3 ++ ldr r0, [r2, r0, lsl #3] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r3, r3, #8 ++ add r0, r0, r3, lsl #8 ++ bx lr ++.L164: ++ .align 2 ++.L163: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcGetChipIf, .-NandcGetChipIf ++ .align 2 ++ .global NandcSetDdrPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSetDdrPara, %function ++NandcSetDdrPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L166 ++ ldr r2, [r3, #88] ++ lsl r3, r0, #8 ++ orr r0, r3, r0, lsl #16 ++ orr r0, r0, #1 ++ str r0, [r2, #304] ++ bx lr ++.L167: ++ .align 2 ++.L166: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcSetDdrPara, .-NandcSetDdrPara ++ .align 2 ++ .global NandcSetDdrDiv ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSetDdrDiv, %function ++NandcSetDdrDiv: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L169 ++ orr r0, r0, #16640 ++ ldr r3, [r3, #88] ++ str r0, [r3, #344] ++ bx lr ++.L170: ++ .align 2 ++.L169: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcSetDdrDiv, .-NandcSetDdrDiv ++ .align 2 ++ .global NandcSetDdrMode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSetDdrMode, %function ++NandcSetDdrMode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L174 ++ cmp r0, #0 ++ ldr r2, [r3, #88] ++ ldr r3, [r2] ++ bfieq r3, r0, #13, #1 ++ orrne r3, r3, #253952 ++ str r3, [r2] ++ bx lr ++.L175: ++ .align 2 ++.L174: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcSetDdrMode, .-NandcSetDdrMode ++ .align 2 ++ .global NandcSetMode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSetMode, %function ++NandcSetMode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L183 ++ ands r1, r0, #6 ++ ldr r2, [r3, #88] ++ ldr r3, [r2] ++ bfieq r3, r1, #13, #1 ++ beq .L179 ++ movw r1, #8322 ++ orr r3, r3, #24576 ++ str r1, [r2, #344] ++ bfc r3, #15, #1 ++ ldr r1, .L183+4 ++ orr r3, r3, #196608 ++ tst r0, #4 ++ orrne r3, r3, #32768 ++ str r1, [r2, #304] ++ mov r1, #38 ++ str r1, [r2, #308] ++ mov r1, #39 ++ str r1, [r2, #308] ++.L179: ++ str r3, [r2] ++ mov r0, #0 ++ bx lr ++.L184: ++ .align 2 ++.L183: ++ .word .LANCHOR0 ++ .word 1052675 ++ .fnend ++ .size NandcSetMode, .-NandcSetMode ++ .align 2 ++ .global NandcFlashCs ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcFlashCs, %function ++NandcFlashCs: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L186 ++ mov r2, #1 ++ ldr r1, [r3, r0, lsl #3] ++ add r0, r3, r0, lsl #3 ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ ldr r3, [r1] ++ lsl r2, r2, r0 ++ bfi r3, r2, #0, #8 ++ str r3, [r1] ++ bx lr ++.L187: ++ .align 2 ++.L186: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcFlashCs, .-NandcFlashCs ++ .align 2 ++ .global NandcFlashDeCs ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcFlashDeCs, %function ++NandcFlashDeCs: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L189 ++ ldr r2, [r3, r0, lsl #3] ++ ldr r3, [r2] ++ bfc r3, #0, #8 ++ bfc r3, #17, #1 ++ str r3, [r2] ++ bx lr ++.L190: ++ .align 2 ++.L189: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcFlashDeCs, .-NandcFlashDeCs ++ .align 2 ++ .global HynixSetRRPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type HynixSetRRPara, %function ++HynixSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r6, r0 ++ ldr r0, .L200 ++ mov r7, r3 ++ mov r8, r1 ++ mov r10, r2 ++ ldr r3, [r0, #48] ++ mov r5, r0 ++ add r4, r0, #1216 ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ cmp r3, #6 ++ moveq r3, #20 ++ addeq r3, r3, r6, lsl #6 ++ addeq r3, r3, r7, lsl #2 ++ beq .L199 ++ cmp r3, #7 ++ bne .L194 ++ mov r3, #160 ++ mov r2, #28 ++ smlabb r2, r3, r6, r2 ++ mov r3, #10 ++ smlabb r3, r3, r7, r2 ++.L199: ++ add r4, r4, r3 ++.L193: ++ add r3, r5, r6, lsl #3 ++ ldr r9, [r5, r6, lsl #3] ++ mov r0, r6 ++ ldrb fp, [r3, #4] @ zero_extendqisi2 ++ sub r8, r8, #1 ++ bl NandcFlashCs ++ mov r3, #54 ++ add r8, r10, r8 ++ sub r4, r4, #1 ++ lsl fp, fp, #8 ++ add r0, r9, fp ++ str r3, [r0, #2056] ++ sub r3, r10, #1 ++ mov r10, r0 ++.L196: ++ cmp r3, r8 ++ bne .L197 ++ mov r3, #22 ++ add r9, r9, fp ++ mov r0, r6 ++ str r3, [r9, #2056] ++ bl NandcFlashDeCs ++ add r0, r5, r6 ++ strb r7, [r0, #2068] ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L194: ++ cmp r3, #8 ++ addeq r4, r4, #28 ++ addeq r3, r7, r7, lsl #2 ++ beq .L199 ++ add r3, r7, #2 ++ add r3, r3, r6, lsl #3 ++ add r4, r4, r3, lsl #3 ++ add r4, r4, #4 ++ b .L193 ++.L197: ++ ldrb r2, [r3, #1]! @ zero_extendqisi2 ++ mov r0, #200 ++ str r2, [r10, #2052] ++ str r3, [sp, #4] ++ bl ndelay ++ ldrsb r2, [r4, #1]! ++ ldr r3, [sp, #4] ++ str r2, [r10, #2048] ++ b .L196 ++.L201: ++ .align 2 ++.L200: ++ .word .LANCHOR0 ++ .fnend ++ .size HynixSetRRPara, .-HynixSetRRPara ++ .align 2 ++ .global FlashSetReadRetryDefault ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashSetReadRetryDefault, %function ++FlashSetReadRetryDefault: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r5, .L209 ++ ldr r3, [r5, #48] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ cmp r3, #7 ++ pophi {r4, r5, r6, r7, r8, pc} ++ ldr r7, .L209+4 ++ add r6, r5, #1216 ++ mov r4, #0 ++ add r6, r6, #4 ++.L205: ++ ldrb r3, [r7, r4, lsl #3] @ zero_extendqisi2 ++ uxtb r0, r4 ++ cmp r3, #173 ++ bne .L204 ++ mov r3, #0 ++ mov r2, r6 ++ ldrb r1, [r5, #1217] @ zero_extendqisi2 ++ bl HynixSetRRPara ++.L204: ++ add r4, r4, #1 ++ cmp r4, #4 ++ bne .L205 ++ pop {r4, r5, r6, r7, r8, pc} ++.L210: ++ .align 2 ++.L209: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2072 ++ .fnend ++ .size FlashSetReadRetryDefault, .-FlashSetReadRetryDefault ++ .align 2 ++ .global FlashWaitCmdDone ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashWaitCmdDone, %function ++FlashWaitCmdDone: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r5, .L219 ++ add r4, r5, r0, lsl #4 ++ ldr r3, [r4, #2112] ++ cmp r3, #0 ++ beq .L213 ++ ldrb r7, [r4, #2104] @ zero_extendqisi2 ++ mov r6, r0 ++ add r5, r5, r6, lsl #2 ++ mov r0, r7 ++ bl NandcFlashCs ++ ldr r2, [r5, #1180] ++ mov r0, r7 ++ ldr r1, [r4, #2108] ++ adds r2, r2, #0 ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ mov r1, r0 ++ mov r0, r7 ++ bl NandcFlashDeCs ++ ldr r3, [r4, #2112] ++ sbfx r0, r1, #0, #1 ++ str r0, [r3] ++ mov r3, #0 ++ ldr r2, [r4, #2116] ++ str r3, [r4, #2112] ++ cmp r2, r3 ++ strne r0, [r2] ++ strne r3, [r4, #2116] ++.L213: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L220: ++ .align 2 ++.L219: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashWaitCmdDone, .-FlashWaitCmdDone ++ .align 2 ++ .global NandcDelayns ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcDelayns, %function ++NandcDelayns: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl ndelay ++ mov r0, #0 ++ pop {r4, pc} ++ .fnend ++ .size NandcDelayns, .-NandcDelayns ++ .align 2 ++ .global NandcWaitFlashReadyNoDelay ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcWaitFlashReadyNoDelay, %function ++NandcWaitFlashReadyNoDelay: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L229 ++ push {r0, r1, r2, r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #12 ++ ldr r4, .L229+4 ++ ldr r5, [r3, r0, lsl #3] ++.L225: ++ ldr r3, [r5] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #512 ++ bne .L226 ++ mov r0, #10 ++ bl ndelay ++ subs r4, r4, #1 ++ bne .L225 ++ mvn r0, #0 ++.L223: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, pc} ++.L226: ++ mov r0, #0 ++ b .L223 ++.L230: ++ .align 2 ++.L229: ++ .word .LANCHOR0 ++ .word 100000 ++ .fnend ++ .size NandcWaitFlashReadyNoDelay, .-NandcWaitFlashReadyNoDelay ++ .align 2 ++ .global NandcWaitFlashReady ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcWaitFlashReady, %function ++NandcWaitFlashReady: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #12 ++ ldr r3, .L237 ++ ldr r4, .L237+4 ++ ldr r5, [r3, r0, lsl #3] ++ mov r0, #130 ++ bl ndelay ++.L233: ++ ldr r3, [r5] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #512 ++ bne .L234 ++ mov r1, #2 ++ mov r0, #1 ++ bl usleep_range ++ subs r4, r4, #1 ++ bne .L233 ++ mvn r0, #0 ++.L231: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, pc} ++.L234: ++ mov r0, #0 ++ b .L231 ++.L238: ++ .align 2 ++.L237: ++ .word .LANCHOR0 ++ .word 100000 ++ .fnend ++ .size NandcWaitFlashReady, .-NandcWaitFlashReady ++ .align 2 ++ .global FlashReset ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReset, %function ++FlashReset: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L241 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ ldr r5, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ ldrb r6, [r3, #4] @ zero_extendqisi2 ++ bl NandcFlashCs ++ mov r3, #255 ++ mov r0, r4 ++ add r5, r5, r6, lsl #8 ++ str r3, [r5, #2056] ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ pop {r4, r5, r6, lr} ++ b NandcFlashDeCs ++.L242: ++ .align 2 ++.L241: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReset, .-FlashReset ++ .align 2 ++ .global flash_enter_slc_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_enter_slc_mode, %function ++flash_enter_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r5, .L250 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ popeq {r4, r5, r6, r7, r8, pc} ++ mov r6, r0 ++ bl NandcFlashCs ++ add r3, r5, r6, lsl #3 ++ ldr r7, [r5, r6, lsl #3] ++ ldrb r8, [r3, #4] @ zero_extendqisi2 ++ ldrb r3, [r3, #2072] @ zero_extendqisi2 ++ cmp r3, #44 ++ lsl r8, r8, #8 ++ bne .L245 ++ add r4, r7, r8 ++ mov r3, #239 ++ str r3, [r4, #2056] ++ mov r3, #145 ++ str r3, [r4, #2052] ++ mov r0, #50 ++ bl ndelay ++ mov r3, #0 ++ mov r2, #1 ++ str r3, [r4, #2048] ++ mov r0, #100 ++ str r2, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ bl ndelay ++.L245: ++ mov r0, r6 ++ add r7, r7, r8 ++ bl NandcWaitFlashReadyNoDelay ++ mov r3, #218 ++ mov r0, r6 ++ str r3, [r7, #2056] ++ bl NandcWaitFlashReady ++ mov r3, #2 ++ strb r3, [r5, #2232] ++ pop {r4, r5, r6, r7, r8, pc} ++.L251: ++ .align 2 ++.L250: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_enter_slc_mode, .-flash_enter_slc_mode ++ .align 2 ++ .global flash_exit_slc_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_exit_slc_mode, %function ++flash_exit_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r5, .L259 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ popeq {r4, r5, r6, r7, r8, pc} ++ mov r6, r0 ++ bl NandcFlashCs ++ add r3, r5, r6, lsl #3 ++ ldr r7, [r5, r6, lsl #3] ++ ldrb r8, [r3, #4] @ zero_extendqisi2 ++ ldrb r3, [r3, #2072] @ zero_extendqisi2 ++ cmp r3, #44 ++ lsl r8, r8, #8 ++ bne .L254 ++ add r4, r7, r8 ++ mov r3, #239 ++ str r3, [r4, #2056] ++ mov r3, #145 ++ str r3, [r4, #2052] ++ mov r0, #50 ++ bl ndelay ++ mov r3, #2 ++ mov r0, #100 ++ str r3, [r4, #2048] ++ mov r3, #1 ++ str r3, [r4, #2048] ++ mov r3, #0 ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ bl ndelay ++.L254: ++ mov r0, r6 ++ add r7, r7, r8 ++ bl NandcWaitFlashReadyNoDelay ++ mov r3, #223 ++ mov r0, r6 ++ str r3, [r7, #2056] ++ bl NandcWaitFlashReady ++ mov r3, #0 ++ strb r3, [r5, #2232] ++ pop {r4, r5, r6, r7, r8, pc} ++.L260: ++ .align 2 ++.L259: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_exit_slc_mode, .-flash_exit_slc_mode ++ .align 2 ++ .global FlashEraseBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashEraseBlock, %function ++FlashEraseBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashEraseCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashReadStatus ++ mov r1, r0 ++ mov r0, r4 ++ bl NandcFlashDeCs ++ and r0, r1, #1 ++ pop {r4, r5, r6, pc} ++ .fnend ++ .size FlashEraseBlock, .-FlashEraseBlock ++ .align 2 ++ .global FlashSetInterfaceMode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashSetInterfaceMode, %function ++FlashSetInterfaceMode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov lr, #0 ++ ldr r4, .L286 ++ mov r5, #239 ++ mov r6, #128 ++ mov r7, #1 ++ mov r8, #35 ++ mov r9, #32 ++ ldrb r3, [r4, #2233] @ zero_extendqisi2 ++ mov r10, #5 ++ and r2, r3, #4 ++ and r3, r3, #1 ++ str r2, [sp, #4] ++ mov r2, lr ++ str r3, [sp] ++.L273: ++ ldr r1, .L286+4 ++ add r3, r4, lr ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ ldrb ip, [lr, r1] @ zero_extendqisi2 ++ cmp ip, #69 ++ cmpne ip, #152 ++ beq .L264 ++ cmp ip, #44 ++ cmpne ip, #173 ++ bne .L265 ++.L264: ++ cmp r0, #1 ++ ldr r1, [r4, lr] ++ bne .L266 ++ ldr fp, [sp] ++ cmp fp, #0 ++ beq .L265 ++ lsl r3, r3, #8 ++ cmp ip, #173 ++ add fp, r1, r3 ++ str r5, [fp, #2056] ++ streq r0, [fp, #2052] ++ beq .L285 ++ cmp ip, #44 ++ streq r0, [fp, #2052] ++ strne r6, [fp, #2052] ++ streq r10, [fp, #2048] ++ strne r0, [fp, #2048] ++.L271: ++ add r3, r1, r3 ++ str r2, [r3, #2048] ++ str r2, [r3, #2048] ++ str r2, [r3, #2048] ++.L265: ++ add lr, lr, #8 ++ cmp lr, #32 ++ bne .L273 ++ mov r0, #0 ++ bl NandcWaitFlashReady ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L266: ++ ldr fp, [sp, #4] ++ cmp fp, #0 ++ beq .L265 ++ lsl r3, r3, #8 ++ cmp ip, #173 ++ add fp, r1, r3 ++ str r5, [fp, #2056] ++ streq r7, [fp, #2052] ++ streq r9, [fp, #2048] ++ beq .L271 ++ cmp ip, #44 ++ streq r7, [fp, #2052] ++ streq r8, [fp, #2048] ++ beq .L271 ++ str r6, [fp, #2052] ++.L285: ++ str r2, [fp, #2048] ++ b .L271 ++.L287: ++ .align 2 ++.L286: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2072 ++ .fnend ++ .size FlashSetInterfaceMode, .-FlashSetInterfaceMode ++ .align 2 ++ .global FlashReadSpare ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadSpare, %function ++FlashReadSpare: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L290 ++ ldr r3, .L290+4 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r2 ++ ldr r4, [ip, r0, lsl #3] ++ add ip, ip, r0, lsl #3 ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ ldrb r2, [ip, #4] @ zero_extendqisi2 ++ lsl r3, r3, #9 ++ add r4, r4, r2, lsl #8 ++ mov r2, #0 ++ str r2, [r4, #2056] ++ str r3, [r4, #2052] ++ lsr r3, r3, #8 ++ str r3, [r4, #2052] ++ uxtb r3, r1 ++ str r3, [r4, #2052] ++ lsr r3, r1, #8 ++ lsr r1, r1, #16 ++ str r3, [r4, #2052] ++ mov r3, #48 ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #2048] ++ strb r3, [r5] ++ pop {r4, r5, r6, pc} ++.L291: ++ .align 2 ++.L290: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .fnend ++ .size FlashReadSpare, .-FlashReadSpare ++ .align 2 ++ .global SandiskProgTestBadBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SandiskProgTestBadBlock, %function ++SandiskProgTestBadBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L294 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r4, r4, r3, lsl #8 ++ mov r3, #162 ++ str r3, [r4, #2056] ++ mov r3, #128 ++ str r3, [r4, #2056] ++ mov r3, #0 ++ str r3, [r4, #2052] ++ str r3, [r4, #2052] ++ uxtb r3, r1 ++ str r3, [r4, #2052] ++ lsr r3, r1, #8 ++ lsr r1, r1, #16 ++ str r3, [r4, #2052] ++ mov r3, #16 ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl NandcWaitFlashReady ++ mov r3, #112 ++ mov r0, #80 ++ str r3, [r4, #2056] ++ bl ndelay ++ ldr r0, [r4, #2048] ++ and r0, r0, #1 ++ pop {r4, pc} ++.L295: ++ .align 2 ++.L294: ++ .word .LANCHOR0 ++ .fnend ++ .size SandiskProgTestBadBlock, .-SandiskProgTestBadBlock ++ .align 2 ++ .global SandiskSetRRPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SandiskSetRRPara, %function ++SandiskSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov r3, #239 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ str r3, [r0, #8] ++ mov r3, #17 ++ mov r5, r0 ++ mov r4, r1 ++ str r3, [r0, #4] ++ mov r0, #200 ++ bl ndelay ++ ldr r0, .L303 ++ add r4, r4, r4, lsl #2 ++ ldr r1, .L303+4 ++ mov r2, #0 ++ sub ip, r0, #45 ++.L297: ++ ldrb r3, [r1, #85] @ zero_extendqisi2 ++ cmp r2, r3 ++ bcc .L300 ++ mov r0, #0 ++ pop {r4, r5, r6, lr} ++ b NandcWaitFlashReady ++.L300: ++ ldrb r3, [r1, #84] @ zero_extendqisi2 ++ cmp r3, #67 ++ add r3, r2, r4 ++ addeq r3, ip, r3 ++ addne r3, r0, r3 ++ ldrsb r3, [r3, #5] ++ add r2, r2, #1 ++ str r3, [r5] ++ b .L297 ++.L304: ++ .align 2 ++.L303: ++ .word .LANCHOR1+301 ++ .word .LANCHOR0 ++ .fnend ++ .size SandiskSetRRPara, .-SandiskSetRRPara ++ .align 2 ++ .global micron_auto_read_calibration_config ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type micron_auto_read_calibration_config, %function ++micron_auto_read_calibration_config: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ mov r6, r1 ++ bl NandcWaitFlashReady ++ ldr r0, .L307 ++ ldr r4, [r0, r5, lsl #3] ++ add r0, r0, r5, lsl #3 ++ ldrb r3, [r0, #4] @ zero_extendqisi2 ++ mov r0, #200 ++ add r4, r4, r3, lsl #8 ++ mov r3, #239 ++ str r3, [r4, #2056] ++ mov r3, #150 ++ str r3, [r4, #2052] ++ bl ndelay ++ mov r3, #0 ++ str r6, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ pop {r4, r5, r6, pc} ++.L308: ++ .align 2 ++.L307: ++ .word .LANCHOR0 ++ .fnend ++ .size micron_auto_read_calibration_config, .-micron_auto_read_calibration_config ++ .align 2 ++ .global FlashEraseSLc2KBlocks ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashEraseSLc2KBlocks, %function ++FlashEraseSLc2KBlocks: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #16 ++ mov r5, #0 ++ ldr r8, .L320 ++ mov r6, r0 ++ mov r9, r1 ++ mov r7, r5 ++ ldr r10, .L320+4 ++.L310: ++ cmp r7, r9 ++ bne .L315 ++ mov r0, #0 ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L315: ++ sub r3, r9, r7 ++ add r2, sp, #8 ++ uxtb r3, r3 ++ mov r1, #0 ++ add r0, r6, r5 ++ str r3, [sp] ++ add r3, sp, #12 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r8, #2234] @ zero_extendqisi2 ++ ldr r3, [sp, #12] ++ cmp r2, r3 ++ mvnls r3, #0 ++ strls r3, [r6, r5] ++ bls .L312 ++ add r2, r8, r3 ++ add r3, r8, r3, lsl #4 ++ ldrb r4, [r2, #2236] @ zero_extendqisi2 ++ strb r4, [r3, #2104] ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r2, #0 ++ ldr r1, [sp, #8] ++ mov r0, r4 ++ bl FlashEraseCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ ldr r1, [sp, #8] ++ bl FlashReadStatus ++ sbfx r0, r0, #0, #1 ++ ldr r1, [sp, #8] ++ str r0, [r6, r5] ++ mov r2, #0 ++ ldr r3, [r8, #40] ++ mov r0, r4 ++ add r1, r1, r3 ++ bl FlashEraseCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ ldr r1, [sp, #8] ++ bl FlashReadStatus ++ tst r0, #1 ++ mvnne r3, #0 ++ strne r3, [r6, r5] ++ ldr r3, [r6, r5] ++ cmn r3, #1 ++ bne .L314 ++ ldr r1, [sp, #8] ++ mov r0, r10 ++ bl printk ++.L314: ++ mov r0, r4 ++ bl NandcFlashDeCs ++.L312: ++ add r7, r7, #1 ++ add r5, r5, #36 ++ b .L310 ++.L321: ++ .align 2 ++.L320: ++ .word .LANCHOR0 ++ .word .LC1 ++ .fnend ++ .size FlashEraseSLc2KBlocks, .-FlashEraseSLc2KBlocks ++ .align 2 ++ .global FlashEraseBlocks ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashEraseBlocks, %function ++FlashEraseBlocks: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r2 ++ ldr r4, .L355 ++ .pad #20 ++ sub sp, sp, #20 ++ ldrb r5, [r4, #36] @ zero_extendqisi2 ++ cmp r5, #0 ++ moveq r9, r0 ++ moveq r10, r1 ++ beq .L324 ++ mov r1, r2 ++ bl FlashEraseSLc2KBlocks ++.L322: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L333: ++ mov r3, #36 ++ add r2, sp, #8 ++ mul r6, r3, r5 ++ sub r3, r8, r5 ++ uxtb r3, r3 ++ mov r1, #0 ++ str r3, [sp] ++ add r3, sp, #12 ++ add fp, r9, r6 ++ mov r0, fp ++ bl LogAddr2PhyAddr ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ mov r7, r0 ++ ldr r0, [sp, #12] ++ cmp r3, r0 ++ mvnls r3, #0 ++ strls r3, [r9, r6] ++ bls .L327 ++ ldrb r3, [r4, #2244] @ zero_extendqisi2 ++ cmp r3, #0 ++ add r3, r4, r0, lsl #4 ++ moveq r7, #0 ++ ldr r3, [r3, #2112] ++ cmp r3, #0 ++ beq .L329 ++ uxtb r0, r0 ++ bl FlashWaitCmdDone ++.L329: ++ ldr r2, [sp, #12] ++ cmp r7, #0 ++ addne r6, r6, #36 ++ mov r0, #0 ++ addne r6, r9, r6 ++ lsl r3, r2, #4 ++ add r2, r4, r2 ++ add r1, r4, r3 ++ add r3, r4, r3 ++ str r0, [r1, #2116] ++ ldr r0, [sp, #8] ++ strne r6, [r1, #2116] ++ ldrb r6, [r2, #2236] @ zero_extendqisi2 ++ str r0, [r1, #2108] ++ str fp, [r1, #2112] ++ mov r0, r6 ++ strb r6, [r3, #2104] ++ bl NandcFlashCs ++ cmp r10, #1 ++ mov r0, r6 ++ bne .L331 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L331 ++ bl flash_enter_slc_mode ++.L332: ++ ldr r3, [sp, #12] ++ mov r0, r6 ++ ldr r1, [sp, #8] ++ add r5, r5, r7 ++ add r3, r4, r3, lsl #2 ++ ldr r2, [r3, #1180] ++ adds r2, r2, #0 ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ mov r2, r7 ++ ldr r1, [sp, #8] ++ mov r0, r6 ++ bl FlashEraseCmd ++ mov r0, r6 ++ bl NandcFlashDeCs ++.L327: ++ add r5, r5, #1 ++.L324: ++ cmp r5, r8 ++ bcc .L333 ++ ldr r6, .L355+4 ++ mov r5, #0 ++.L334: ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ cmp r5, r3 ++ bcc .L336 ++ ldr r3, [r4, #2248] ++ cmp r3, #0 ++ bne .L337 ++.L338: ++ mov r0, #0 ++ b .L322 ++.L331: ++ bl flash_exit_slc_mode ++ b .L332 ++.L336: ++ uxtb r0, r5 ++ bl FlashWaitCmdDone ++ cmp r10, #1 ++ bne .L335 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L335 ++ ldrb r0, [r6, r5, lsl #4] @ zero_extendqisi2 ++ bl flash_exit_slc_mode ++.L335: ++ add r5, r5, #1 ++ b .L334 ++.L337: ++ ldrb r3, [r4, #2072] @ zero_extendqisi2 ++ cmp r3, #69 ++ moveq r3, #0 ++ moveq r2, #36 ++ moveq r1, r3 ++ bne .L338 ++.L339: ++ cmp r3, r8 ++ beq .L338 ++ mul r0, r2, r3 ++ add r3, r3, #1 ++ str r1, [r9, r0] ++ b .L339 ++.L356: ++ .align 2 ++.L355: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2104 ++ .fnend ++ .size FlashEraseBlocks, .-FlashEraseBlocks ++ .align 2 ++ .global FlashReadDpCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadDpCmd, %function ++FlashReadDpCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r7, r0 ++ ldr r0, .L363 ++ mov r8, r1 ++ uxtb r10, r2 ++ lsr r9, r2, #8 ++ lsr r6, r2, #16 ++ uxtb lr, r8 ++ ldr r2, [r0, #48] ++ lsr ip, r8, #8 ++ add r1, r0, r7, lsl #3 ++ ldr r3, [r0, r7, lsl #3] ++ ldrb r4, [r1, #4] @ zero_extendqisi2 ++ ldrb r1, [r0, #68] @ zero_extendqisi2 ++ ldrb r2, [r2, #7] @ zero_extendqisi2 ++ cmp r1, #1 ++ lsl r4, r4, #8 ++ lsr r1, r8, #16 ++ bne .L358 ++ cmp r2, #1 ++ addeq r2, r3, r4 ++ moveq r5, #38 ++ add r4, r3, r4 ++ streq r5, [r2, #2056] ++ ldrb r3, [r0, #61] @ zero_extendqisi2 ++ mov r5, #0 ++ ldrb r2, [r0, #60] @ zero_extendqisi2 ++ mov r0, r7 ++ str r2, [r4, #2056] ++ str r5, [r4, #2052] ++ str r5, [r4, #2052] ++ str lr, [r4, #2052] ++ str ip, [r4, #2052] ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl NandcWaitFlashReady ++ mov r3, #48 ++ str r5, [r4, #2056] ++ str r5, [r4, #2052] ++ str r5, [r4, #2052] ++ str r10, [r4, #2052] ++ str r9, [r4, #2052] ++ str r6, [r4, #2052] ++ str r3, [r4, #2056] ++.L360: ++ mov r1, r8 ++ mov r0, r7 ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ b FlashSetRandomizer ++.L358: ++ cmp r2, #1 ++ addeq r2, r3, r4 ++ moveq r5, #38 ++ streq r5, [r2, #2056] ++ add r3, r3, r4 ++ ldrb r2, [r0, #60] @ zero_extendqisi2 ++ str r2, [r3, #2056] ++ ldrb r2, [r0, #61] @ zero_extendqisi2 ++ str lr, [r3, #2052] ++ str ip, [r3, #2052] ++ str r1, [r3, #2052] ++ str r2, [r3, #2056] ++ mov r2, #48 ++ str r10, [r3, #2052] ++ str r9, [r3, #2052] ++ str r6, [r3, #2052] ++ str r2, [r3, #2056] ++ b .L360 ++.L364: ++ .align 2 ++.L363: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadDpCmd, .-FlashReadDpCmd ++ .align 2 ++ .global ftl_flash_de_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_flash_de_init, %function ++ftl_flash_de_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r0, #0 ++ ldr r4, .L376 ++ bl NandcWaitFlashReady ++ bl FlashSetReadRetryDefault ++ ldr r0, [r4, #2252] ++ cmp r0, #0 ++ beq .L366 ++ mov r0, #0 ++ bl flash_enter_slc_mode ++.L367: ++ ldrb r3, [r4, #2256] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L368 ++ ldrb r3, [r4, #2233] @ zero_extendqisi2 ++ tst r3, #1 ++ beq .L368 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++ mov r3, #0 ++ strb r3, [r4, #2256] ++.L368: ++ ldr r3, [r4] ++ mov r0, #0 ++ str r0, [r3, #336] ++ pop {r4, pc} ++.L366: ++ bl flash_exit_slc_mode ++ b .L367 ++.L377: ++ .align 2 ++.L376: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_flash_de_init, .-ftl_flash_de_init ++ .align 2 ++ .global NandcRandmzSel ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcRandmzSel, %function ++NandcRandmzSel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L379 ++ ldr r3, [r3, r0, lsl #3] ++ str r1, [r3, #336] ++ bx lr ++.L380: ++ .align 2 ++.L379: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcRandmzSel, .-NandcRandmzSel ++ .global __aeabi_idiv ++ .align 2 ++ .global NandcTimeCfg ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcTimeCfg, %function ++NandcTimeCfg: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r0 ++ mov r0, #0 ++ bl rknand_get_clk_rate ++ ldr r1, .L392 ++ bl __aeabi_idiv ++ ldr r3, .L392+4 ++ cmp r0, #250 ++ movwgt r2, #8354 ++ ldr r3, [r3, #88] ++ bgt .L390 ++ cmp r0, #220 ++ ble .L384 ++.L391: ++ movw r2, #8322 ++ b .L390 ++.L384: ++ cmp r0, #185 ++ movwgt r2, #4226 ++ bgt .L390 ++ cmp r0, #160 ++ movwgt r2, #4194 ++ bgt .L390 ++ cmp r4, #35 ++ movwls r2, #4193 ++ bls .L390 ++ cmp r4, #99 ++ movwls r2, #4225 ++ bhi .L391 ++.L390: ++ str r2, [r3, #4] ++ pop {r4, pc} ++.L393: ++ .align 2 ++.L392: ++ .word 1000000 ++ .word .LANCHOR0 ++ .fnend ++ .size NandcTimeCfg, .-NandcTimeCfg ++ .align 2 ++ .global FlashTimingCfg ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashTimingCfg, %function ++FlashTimingCfg: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ sub r3, r0, #4160 ++ sub r3, r3, #33 ++ bic r3, r3, #32 ++ cmp r3, #1 ++ bls .L395 ++ movw r3, #8322 ++ cmp r0, r3 ++ bne .L396 ++.L395: ++ ldr r3, .L397 ++ ldr r3, [r3, #88] ++ str r0, [r3, #4] ++.L396: ++ ldr r3, .L397+4 ++ ldrb r0, [r3, #489] @ zero_extendqisi2 ++ b NandcTimeCfg ++.L398: ++ .align 2 ++.L397: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .fnend ++ .size FlashTimingCfg, .-FlashTimingCfg ++ .align 2 ++ .global NandcInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcInit, %function ++NandcInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L402 ++ mov r2, #1 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r1, #0 ++ mov r5, #0 ++ mov r4, r3 ++ str r2, [r3, #12] ++ mov r2, #2 ++ str r2, [r3, #20] ++ mov r2, #3 ++ stm r3, {r0, r1} ++ str r0, [r3, #8] ++ str r0, [r3, #16] ++ str r0, [r3, #24] ++ str r0, [r3, #88] ++ str r2, [r3, #28] ++ ldr r2, [r0] ++ and r2, r2, #253952 ++ ubfx ip, r2, #13, #1 ++ bfi r2, r1, #13, #1 ++ ldr r1, [r0, #352] ++ orr r2, r2, #256 ++ str ip, [r3, #2260] ++ movw ip, #2049 ++ ubfx r1, r1, #16, #4 ++ str r1, [r3, #2264] ++ ldr r1, [r0, #352] ++ cmp r1, ip ++ str r1, [r3, #2268] ++ moveq r3, #8 ++ streq r3, [r4, #2264] ++ str r2, [r0] ++ mov r0, #40 ++ ldr r3, [r4, #88] ++ str r5, [r3, #336] ++ bl NandcTimeCfg ++ ldr r3, [r4, #88] ++ movw r2, #8322 ++ mov r0, #36864 ++ str r2, [r3, #344] ++ ldr r2, .L402+4 ++ str r2, [r3, #304] ++ bl ftl_malloc ++ str r0, [r4, #2272] ++ str r0, [r4, #2276] ++ add r0, r0, #32768 ++ str r0, [r4, #2280] ++ str r5, [r4, #2300] ++ str r5, [r4, #2308] ++ pop {r4, r5, r6, pc} ++.L403: ++ .align 2 ++.L402: ++ .word .LANCHOR0 ++ .word 1579009 ++ .fnend ++ .size NandcInit, .-NandcInit ++ .align 2 ++ .global NandcGetTimeCfg ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcGetTimeCfg, %function ++NandcGetTimeCfg: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L406 ++ str lr, [sp, #-4]! ++ .save {lr} ++ ldr lr, [ip, #88] ++ ldr lr, [lr, #4] ++ str lr, [r0] ++ ldr r0, [ip, #88] ++ ldr r0, [r0] ++ str r0, [r1] ++ ldr r1, [ip, #88] ++ ldr r1, [r1, #304] ++ str r1, [r2] ++ ldr r1, [ip, #88] ++ ldr r2, [r1, #308] ++ ldr r1, [r1, #344] ++ uxtb r2, r2 ++ orr r2, r2, r1, lsl #16 ++ str r2, [r3] ++ ldr pc, [sp], #4 ++.L407: ++ .align 2 ++.L406: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcGetTimeCfg, .-NandcGetTimeCfg ++ .align 2 ++ .global NandcBchSel ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcBchSel, %function ++NandcBchSel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L416 ++ mov ip, #1 ++ mov r1, #0 ++ ldr r2, [r3, #88] ++ str r0, [r3, #2312] ++ mov r3, r1 ++ str ip, [r2, #8] ++ mov ip, #16 ++ cmp r0, ip ++ bfi r3, ip, #8, #8 ++ bfi r3, r1, #18, #1 ++ bne .L409 ++.L412: ++ bfc r3, #4, #1 ++.L410: ++ orr r3, r3, #1 ++ str r3, [r2, #12] ++ bx lr ++.L409: ++ cmp r0, #24 ++ orreq r3, r3, #16 ++ beq .L410 ++ cmp r0, #40 ++ orr r3, r3, #262144 ++ orr r3, r3, #16 ++ bne .L410 ++ b .L412 ++.L417: ++ .align 2 ++.L416: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcBchSel, .-NandcBchSel ++ .align 2 ++ .global FlashBchSel ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashBchSel, %function ++FlashBchSel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L419 ++ strb r0, [r3, #2316] ++ b NandcBchSel ++.L420: ++ .align 2 ++.L419: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashBchSel, .-FlashBchSel ++ .align 2 ++ .global ftl_flash_resume ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_flash_resume, %function ++ftl_flash_resume: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L430 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, #0 ++ ldr r6, .L430+4 ++ mov r4, r3 ++ ldr r2, [r3, #88] ++ ldr r1, [r3, #92] ++ str r1, [r2] ++ ldr r1, [r3, #96] ++ ldr r2, [r3, #88] ++ str r1, [r2, #4] ++ ldr r1, [r3, #100] ++ str r1, [r2, #8] ++ ldr r1, [r3, #104] ++ str r1, [r2, #12] ++ ldr r1, [r3, #108] ++ str r1, [r2, #304] ++ ldr r1, [r3, #112] ++ str r1, [r2, #308] ++ ldr r1, [r3, #116] ++ str r1, [r2, #336] ++ ldr r1, [r3, #120] ++ str r1, [r2, #344] ++.L423: ++ ldrb r3, [r6, r5, lsl #3] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L422 ++ uxtb r0, r5 ++ bl FlashReset ++.L422: ++ add r5, r5, #1 ++ cmp r5, #4 ++ bne .L423 ++ ldrb r3, [r4, #2256] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L424 ++ mov r0, #1 ++ bl NandcSetMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl NandcSetMode ++ ldrb r0, [r4, #109] @ zero_extendqisi2 ++ bl NandcSetDdrPara ++.L424: ++ ldr r3, [r4, #48] ++ pop {r4, r5, r6, lr} ++ ldrb r0, [r3, #20] @ zero_extendqisi2 ++ b FlashBchSel ++.L431: ++ .align 2 ++.L430: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2072 ++ .fnend ++ .size ftl_flash_resume, .-ftl_flash_resume ++ .align 2 ++ .global ftl_nandc_get_irq_status ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_nandc_get_irq_status, %function ++ftl_nandc_get_irq_status: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r0, [r0, #372] ++ bx lr ++ .fnend ++ .size ftl_nandc_get_irq_status, .-ftl_nandc_get_irq_status ++ .align 2 ++ .global rk_nandc_flash_ready ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nandc_flash_ready, %function ++rk_nandc_flash_ready: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, [r0, #368] ++ orr r3, r3, #2 ++ str r3, [r0, #368] ++ ldr r3, [r0, #364] ++ bic r3, r3, #2 ++ str r3, [r0, #364] ++ bx lr ++ .fnend ++ .size rk_nandc_flash_ready, .-rk_nandc_flash_ready ++ .align 2 ++ .global NandcIqrWaitFlashReady ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcIqrWaitFlashReady, %function ++NandcIqrWaitFlashReady: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size NandcIqrWaitFlashReady, .-NandcIqrWaitFlashReady ++ .align 2 ++ .global rk_nandc_flash_xfer_completed ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nandc_flash_xfer_completed, %function ++rk_nandc_flash_xfer_completed: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, [r0, #368] ++ orr r3, r3, #1 ++ str r3, [r0, #368] ++ ldr r3, [r0, #364] ++ bic r3, r3, #1 ++ str r3, [r0, #364] ++ bx lr ++ .fnend ++ .size rk_nandc_flash_xfer_completed, .-rk_nandc_flash_xfer_completed ++ .align 2 ++ .global NandcSendDumpDataStart ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSendDumpDataStart, %function ++NandcSendDumpDataStart: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, [r0, #16] ++ .pad #8 ++ sub sp, sp, #8 ++ ldr r3, .L438 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ bfc r2, #2, #1 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ str r2, [r0, #16] ++ str r3, [r0, #8] ++ orr r3, r3, #4 ++ str r3, [r0, #8] ++ add sp, sp, #8 ++ @ sp needed ++ bx lr ++.L439: ++ .align 2 ++.L438: ++ .word 538969130 ++ .fnend ++ .size NandcSendDumpDataStart, .-NandcSendDumpDataStart ++ .align 2 ++ .global NandcSendDumpDataDone ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSendDumpDataDone, %function ++NandcSendDumpDataDone: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ .pad #8 ++ sub sp, sp, #8 ++.L441: ++ ldr r3, [r0, #8] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #1048576 ++ beq .L441 ++ add sp, sp, #8 ++ @ sp needed ++ bx lr ++ .fnend ++ .size NandcSendDumpDataDone, .-NandcSendDumpDataDone ++ .align 2 ++ .global NandcXferStart ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcXferStart, %function ++NandcXferStart: ++ .fnstart ++ @ args = 8, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov ip, #16 ++ ldr r4, .L463 ++ mov r5, #0 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r8, [sp, #56] ++ ldr r6, [r4, r0, lsl #3] ++ add r0, r4, r0, lsl #3 ++ ldr r7, [r6, #12] ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ bfi r7, ip, #8, #8 ++ bfi r7, r5, #3, #1 ++ bfi r5, r1, #1, #1 ++ bfi r7, r0, #5, #3 ++ orr r5, r5, #8 ++ mov r0, #1 ++ bfi r5, r0, #5, #2 ++ lsr r3, r3, r0 ++ orr r5, r5, #536870912 ++ orr r5, r5, #1024 ++ bfi r5, r3, #4, #1 ++ ldr r3, [r4, #2264] ++ cmp r3, #3 ++ bls .L446 ++ ldr r3, [r6, #16] ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfc r3, #2, #1 ++ str r3, [sp, #12] ++ ldr r3, [sp, #60] ++ cmp r8, #0 ++ cmpeq r3, #0 ++ beq .L447 ++ cmp r1, #0 ++ bne .L448 ++.L456: ++ add r2, r2, #1 ++ cmp r8, #0 ++ asr r2, r2, #1 ++ movne r0, r8 ++ bfi r5, r2, #22, #6 ++ ldreq r0, [r4, #2276] ++.L450: ++ ldr r3, [r4, #2280] ++ ubfx r10, r5, #22, #5 ++ mov r9, r1 ++ mov r2, r1 ++ lsl r1, r10, #10 ++ str r0, [r4, #2284] ++ str r3, [r4, #2288] ++ bl rknand_dma_map_single ++ mov r2, r9 ++ str r0, [r4, #2292] ++ lsl r1, r10, #7 ++ ldr r0, [r4, #2288] ++ bl rknand_dma_map_single ++ mov r3, #1 ++ str r0, [r4, #2296] ++ str r3, [r4, #2300] ++ mov r2, #16 ++ ldr r3, [r4, #2292] ++ tst r8, #3 ++ clz r1, r9 ++ lsr r1, r1, #5 ++ str r3, [r6, #20] ++ ldr r3, [r4, #2296] ++ str r3, [r6, #24] ++ mov r3, #0 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfi r3, r2, #9, #5 ++ moveq r2, #2 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ orr r3, r3, #448 ++ str r3, [sp, #12] ++ ldreq r3, [sp, #12] ++ bfieq r3, r2, #3, #3 ++ streq r3, [sp, #12] ++ ldr r3, [sp, #12] ++ orr r3, r3, #4 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfi r3, r1, #1, #1 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ orr r3, r3, #1 ++ str r3, [sp, #12] ++.L447: ++ ldr r3, [sp, #12] ++ str r3, [r6, #16] ++.L446: ++ str r7, [r6, #12] ++ str r5, [r6, #8] ++ orr r5, r5, #4 ++ str r5, [r6, #8] ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L448: ++ ldr r3, [r4, #2312] ++ lsr r10, r2, #1 ++ ldr ip, [sp, #60] ++ cmp r3, #25 ++ movcc r3, #64 ++ movcs r3, #128 ++ str r3, [sp, #4] ++ mov r3, #0 ++ mov r0, r3 ++.L452: ++ cmp r0, r10 ++ bcs .L456 ++ ldr lr, [sp, #60] ++ add r0, r0, #1 ++ cmp lr, #0 ++ bic lr, r3, #3 ++ ldrne fp, [ip], #4 @ unaligned ++ mvneq r9, #0 ++ ldrne r9, [r4, #2280] ++ ldreq fp, [r4, #2280] ++ strne fp, [r9, lr] ++ streq r9, [fp, lr] ++ ldr lr, [sp, #4] ++ add r3, r3, lr ++ b .L452 ++.L464: ++ .align 2 ++.L463: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcXferStart, .-NandcXferStart ++ .align 2 ++ .global Ftl_log2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_log2, %function ++Ftl_log2: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r1, #0 ++ mov r2, #1 ++.L466: ++ cmp r2, r0 ++ uxth r3, r1 ++ add r1, r1, #1 ++ bls .L467 ++ sub r0, r3, #1 ++ uxth r0, r0 ++ bx lr ++.L467: ++ lsl r2, r2, #1 ++ b .L466 ++ .fnend ++ .size Ftl_log2, .-Ftl_log2 ++ .align 2 ++ .global FtlPrintInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlPrintInfo, %function ++FtlPrintInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FtlPrintInfo, .-FtlPrintInfo ++ .align 2 ++ .global FtlSysBlkNumInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSysBlkNumInit, %function ++FtlSysBlkNumInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L470 ++ movw r2, #2324 ++ movw r1, #2334 ++ cmp r0, #24 ++ movcc r0, #24 ++ ldrh r2, [r3, r2] ++ ldrh r1, [r3, r1] ++ str r0, [r3, #2320] ++ mul r2, r0, r2 ++ sub r0, r1, r0 ++ movw r1, #2332 ++ strh r0, [r3, r1] @ movhi ++ mov r0, #0 ++ ldr r1, [r3, #2340] ++ str r2, [r3, #2328] ++ sub r2, r1, r2 ++ str r2, [r3, #2336] ++ bx lr ++.L471: ++ .align 2 ++.L470: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlSysBlkNumInit, .-FtlSysBlkNumInit ++ .align 2 ++ .global FtlConstantsInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlConstantsInit, %function ++FtlConstantsInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #2344 ++ ldr r4, .L500 ++ movw r1, #2348 ++ mov r5, r0 ++ .pad #20 ++ sub sp, sp, #20 ++ ldrh r6, [r0, #8] ++ ldrh r2, [r0, #10] ++ ldrh lr, [r0, #14] ++ strh r6, [r4, r3] @ movhi ++ movw r3, #2346 ++ strh r2, [r4, r3] @ movhi ++ ldrh r3, [r0, #12] ++ ldr r0, .L500+4 ++ strh r3, [r4, r1] @ movhi ++ movw r1, #2334 ++ strh lr, [r4, r1] @ movhi ++ mov r1, #0 ++.L473: ++ strb r1, [r1, r0] ++ add r1, r1, #1 ++ cmp r1, #32 ++ bne .L473 ++ ldrh r0, [r5, #14] ++ ldrh r1, [r5, #20] ++ cmp r1, r0, lsr #8 ++ bcs .L474 ++ uxtb r10, r3 ++ ldr r9, .L500+4 ++ lsl r1, r10, #1 ++ uxtb r1, r1 ++ str r1, [sp] ++ sub r1, r2, #1 ++ mul r1, r3, r1 ++ str r1, [sp, #8] ++ mov r1, #0 ++.L475: ++ cmp r1, r3 ++ bcs .L477 ++ ldr ip, [sp, #8] ++ sub r7, r1, r3 ++ add r7, r9, r7 ++ uxtb r0, r1 ++ str r7, [sp, #12] ++ add ip, r1, ip ++ add ip, r9, ip ++ str ip, [sp, #4] ++ mov ip, #0 ++ mov r8, ip ++ b .L478 ++.L476: ++ ldr r7, [sp, #12] ++ add fp, r10, r0 ++ add r8, r8, #1 ++ strb r0, [r7, ip] ++ ldr r7, [sp, #4] ++ strb fp, [r7, ip] ++ ldr r7, [sp] ++ add r0, r7, r0 ++ uxtb r0, r0 ++.L478: ++ cmp r8, r2 ++ add ip, ip, r3 ++ bcc .L476 ++ add r1, r1, #1 ++ b .L475 ++.L477: ++ lsl r2, r2, #1 ++ movw r1, #2346 ++ lsr lr, lr, #1 ++ strh r2, [r4, r1] @ movhi ++ movw r2, #2334 ++ strh lr, [r4, r2] @ movhi ++.L474: ++ ldr fp, .L500+8 ++ movw r2, #2382 ++ ldrb r9, [r4, #36] @ zero_extendqisi2 ++ mov r1, #5 ++ strh r1, [r4, r2] @ movhi ++ cmp r6, #1 ++ mov r1, #0 ++ strheq r6, [r4, r2] @ movhi ++ strh r1, [fp] @ movhi ++ cmp r9, #0 ++ mov r1, #4352 ++ movw r2, #2386 ++ strh r1, [r4, r2] @ movhi ++ movne r1, #384 ++ strhne r1, [r4, r2] @ movhi ++ movw r2, #2346 ++ ldrh r7, [r4, r2] ++ movw r2, #2324 ++ ldrh r8, [r5, #16] ++ ldrh r1, [r5, #18] ++ smulbb r7, r7, r3 ++ str r1, [sp, #4] ++ uxth r7, r7 ++ strh r7, [r4, r2] @ movhi ++ movw r2, #2334 ++ ldrh r6, [r4, r2] ++ movw r2, #2388 ++ smulbb r3, r3, r6 ++ strh r3, [r4, r2] @ movhi ++ smulbb r2, r7, r8 ++ movw r3, #2390 ++ strh r8, [r4, r3] @ movhi ++ movw r3, #2392 ++ strh r1, [r4, r3] @ movhi ++ movw r3, #2394 ++ strh r2, [r4, r3] @ movhi ++ movw r2, #2396 ++ ldrh r3, [r5, #20] ++ mov r0, r3 ++ strh r3, [r4, r2] @ movhi ++ str r3, [sp] ++ bl Ftl_log2 ++ ldr r3, [sp] ++ movw r2, #2398 ++ strh r0, [r4, r2] @ movhi ++ mov r10, r0 ++ ldr r0, .L500+12 ++ cmp r6, #1024 ++ ldr r1, [sp, #4] ++ lsl r2, r3, #9 ++ uxth r2, r2 ++ mul r1, r3, r1 ++ strh r2, [r0] @ movhi ++ lsr r2, r2, #8 ++ movw r0, #2402 ++ strh r2, [r4, r0] @ movhi ++ movw r2, #2404 ++ ldrh r0, [r5, #26] ++ strh r0, [r4, r2] @ movhi ++ mul r2, r6, r7 ++ str r2, [r4, #2340] ++ uxtbhi r2, r6 ++ strhhi r2, [fp] @ movhi ++ ldrh r2, [fp] ++ sub r2, r6, r2 ++ lsl r6, r6, #6 ++ mul r2, r7, r2 ++ mul r2, r3, r2 ++ mul r8, r8, r2 ++ movw r2, #2386 ++ ldrh r0, [r4, r2] ++ asr r8, r8, #11 ++ lsl r0, r0, #3 ++ str r8, [r4, #2408] ++ bl __aeabi_idiv ++ uxth r0, r0 ++ movw r3, #2412 ++ mov r1, r7 ++ cmp r0, #4 ++ movls r2, #4 ++ strhhi r0, [r4, r3] @ movhi ++ strhls r2, [r4, r3] @ movhi ++ cmp r9, #0 ++ movne r2, #640 ++ movwne r3, #2386 ++ strhne r2, [r4, r3] @ movhi ++ movw r3, #2386 ++ ldrh r3, [r4, r3] ++ movw r2, #2414 ++ asr r3, r3, r10 ++ add r10, r10, #9 ++ asr r6, r6, r10 ++ add r3, r3, #2 ++ strh r3, [r4, r2] @ movhi ++ ldr r3, .L500+16 ++ strh r6, [r3] @ movhi ++ uxth r6, r6 ++ mul r3, r6, r7 ++ add r6, r6, #8 ++ str r3, [r4, #2420] ++ movw r3, #2412 ++ ldrh r0, [r4, r3] ++ bl __aeabi_uidiv ++ uxtah r0, r6, r0 ++ cmp r7, #1 ++ add r3, r4, #2320 ++ addeq r0, r0, #4 ++ str r0, [r4, #2320] ++ ldrh r0, [r3] ++ bl FtlSysBlkNumInit ++ ldr r5, [r4, #2336] ++ movw r2, #2390 ++ ldr r3, [r4, #2320] ++ mov r0, #2048 ++ str r3, [r4, #2424] ++ lsl r3, r5, #2 ++ ldrh r5, [r4, r2] ++ mul r5, r5, r3 ++ movw r3, #2398 ++ ldrh r3, [r4, r3] ++ add r3, r3, #9 ++ lsr r5, r5, r3 ++ movw r3, #2428 ++ add r5, r5, #2 ++ uxth r5, r5 ++ strh r5, [r4, r3] @ movhi ++ movw r3, #2396 ++ ldrh r6, [r4, r3] ++ mov r1, r6 ++ bl __aeabi_idiv ++ movw r1, #2412 ++ movw r3, #2430 ++ ldrh r2, [r4, r1] ++ strh r0, [r4, r3] @ movhi ++ mov r3, #0 ++ str r3, [r4, #2432] ++ ldrb ip, [r4, #152] @ zero_extendqisi2 ++ add r3, r2, #3 ++ strh r3, [r4, r1] @ movhi ++ ldr r3, [r4, #2420] ++ cmp ip, #0 ++ addne r2, r2, #4 ++ add r0, r3, #3 ++ strhne r2, [r4, r1] @ movhi ++ str r0, [r4, #2420] ++ addne r3, r3, #5 ++ bne .L499 ++ cmp r0, #7 ++ bhi .L488 ++ mov r3, #8 ++.L499: ++ str r3, [r4, #2420] ++.L488: ++ movw r2, #2436 ++ mov r3, #0 ++ strh r3, [r4, r2] @ movhi ++ movw r3, #2332 ++ ldrh r1, [r4, r3] ++ mov r0, #0 ++ lsr r3, r1, #3 ++ add r3, r3, r1, lsl #1 ++ add r3, r3, #52 ++ add r5, r3, r5, lsl #2 ++ cmp r5, r6, lsl #9 ++ movcc r3, #1 ++ strhcc r3, [r4, r2] @ movhi ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L501: ++ .align 2 ++.L500: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2350 ++ .word .LANCHOR0+2384 ++ .word .LANCHOR0+2400 ++ .word .LANCHOR0+2416 ++ .fnend ++ .size FtlConstantsInit, .-FtlConstantsInit ++ .align 2 ++ .global IsBlkInVendorPart ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type IsBlkInVendorPart, %function ++IsBlkInVendorPart: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L509 ++ movw r3, #2438 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L508 ++ movw r1, #2412 ++ ldr r3, [r2, #2440] ++ ldrh r2, [r2, r1] ++ add r2, r3, r2, lsl #1 ++.L504: ++ cmp r3, r2 ++ bne .L505 ++.L508: ++ mov r0, #0 ++ bx lr ++.L505: ++ ldrh r1, [r3], #2 ++ cmp r0, r1 ++ bne .L504 ++ mov r0, #1 ++ bx lr ++.L510: ++ .align 2 ++.L509: ++ .word .LANCHOR0 ++ .fnend ++ .size IsBlkInVendorPart, .-IsBlkInVendorPart ++ .align 2 ++ .global FtlCacheMetchLpa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlCacheMetchLpa, %function ++FtlCacheMetchLpa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L521 ++ ldr r3, [r2, #2444] ++ cmp r3, #0 ++ beq .L514 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ mov r5, #36 ++ ldr r4, [r2, #2448] ++ mov r2, #0 ++.L513: ++ mla ip, r5, r2, r4 ++ ldr lr, [ip, #16] ++ cmp lr, r1 ++ movhi ip, #0 ++ movls ip, #1 ++ cmp lr, r0 ++ movcc ip, #0 ++ cmp ip, #0 ++ bne .L515 ++ add r2, r2, #1 ++ cmp r3, r2 ++ bne .L513 ++ mov r0, ip ++ pop {r4, r5, pc} ++.L514: ++ mov r0, r3 ++ bx lr ++.L515: ++ mov r0, #1 ++ pop {r4, r5, pc} ++.L522: ++ .align 2 ++.L521: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlCacheMetchLpa, .-FtlCacheMetchLpa ++ .align 2 ++ .global FtlGetCap ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGetCap, %function ++FtlGetCap: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L524 ++ ldr r0, [r3, #2432] ++ bx lr ++.L525: ++ .align 2 ++.L524: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGetCap, .-FtlGetCap ++ .align 2 ++ .global FtlGetCapacity ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGetCapacity, %function ++FtlGetCapacity: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L527 ++ ldr r0, [r3, #2432] ++ bx lr ++.L528: ++ .align 2 ++.L527: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGetCapacity, .-FtlGetCapacity ++ .align 2 ++ .global ftl_get_density ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_get_density, %function ++ftl_get_density: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L530 ++ ldr r0, [r3, #2432] ++ bx lr ++.L531: ++ .align 2 ++.L530: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_get_density, .-ftl_get_density ++ .align 2 ++ .global FtlGetLpn ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGetLpn, %function ++FtlGetLpn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L533 ++ ldr r0, [r3, #2452] ++ bx lr ++.L534: ++ .align 2 ++.L533: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGetLpn, .-FtlGetLpn ++ .align 2 ++ .global FtlBbmMapBadBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbmMapBadBlock, %function ++FtlBbmMapBadBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ .pad #12 ++ movw r3, #2388 ++ ldr r4, .L537 ++ mov r5, r0 ++ ldrh r7, [r4, r3] ++ mov r1, r7 ++ bl __aeabi_uidiv ++ uxth r6, r0 ++ mov r1, r7 ++ mov r0, r5 ++ bl __aeabi_uidivmod ++ add r2, r4, r6, lsl #2 ++ uxth r3, r1 ++ ldr r2, [r2, #2484] ++ lsr r1, r3, #5 ++ and ip, r3, #31 ++ mov lr, #1 ++ ldr r0, [r2, r1, lsl #2] ++ orr r0, r0, lr, lsl ip ++ str r0, [r2, r1, lsl #2] ++ mov r2, r6 ++ str r0, [sp] ++ mov r1, r5 ++ ldr r0, .L537+4 ++ bl printk ++ add r3, r4, #2448 ++ mov r0, #0 ++ ldrh r2, [r3, #14] ++ add r2, r2, #1 ++ strh r2, [r3, #14] @ movhi ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, pc} ++.L538: ++ .align 2 ++.L537: ++ .word .LANCHOR0 ++ .word .LC2 ++ .fnend ++ .size FtlBbmMapBadBlock, .-FtlBbmMapBadBlock ++ .align 2 ++ .global FtlBbmIsBadBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbmIsBadBlock, %function ++FtlBbmIsBadBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ movw r3, #2388 ++ ldr r5, .L541 ++ mov r7, r0 ++ ldrh r6, [r5, r3] ++ mov r1, r6 ++ bl __aeabi_uidivmod ++ mov r0, r7 ++ uxth r4, r1 ++ mov r1, r6 ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ lsr r2, r4, #5 ++ add r5, r5, r0, lsl #2 ++ and r4, r4, #31 ++ ldr r3, [r5, #2484] ++ ldr r0, [r3, r2, lsl #2] ++ lsr r0, r0, r4 ++ and r0, r0, #1 ++ pop {r4, r5, r6, r7, r8, pc} ++.L542: ++ .align 2 ++.L541: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlBbmIsBadBlock, .-FtlBbmIsBadBlock ++ .align 2 ++ .global FtlBbtInfoPrint ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbtInfoPrint, %function ++FtlBbtInfoPrint: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FtlBbtInfoPrint, .-FtlBbtInfoPrint ++ .align 2 ++ .global FtlBbtCalcTotleCnt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbtCalcTotleCnt, %function ++FtlBbtCalcTotleCnt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L552 ++ movw r2, #2388 ++ movw r1, #2346 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, #0 ++ mov r4, r5 ++ ldrh r2, [r3, r2] ++ ldrh r6, [r3, r1] ++ mul r6, r6, r2 ++.L545: ++ uxth r0, r5 ++ cmp r0, r6 ++ blt .L547 ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L547: ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ add r5, r5, #1 ++ addne r4, r4, #1 ++ uxthne r4, r4 ++ b .L545 ++.L553: ++ .align 2 ++.L552: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt ++ .align 2 ++ .global V2P_block ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type V2P_block, %function ++V2P_block: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ movw r3, #2348 ++ ldr r4, .L556 ++ mov r5, r1 ++ mov r7, r0 ++ ldrh r6, [r4, r3] ++ mov r1, r6 ++ bl __aeabi_uidiv ++ movw r3, #2388 ++ smulbb r5, r6, r5 ++ ldrh r4, [r4, r3] ++ mov r1, r6 ++ smulbb r4, r4, r0 ++ mov r0, r7 ++ bl __aeabi_uidivmod ++ add r0, r5, r1 ++ add r0, r4, r0 ++ uxth r0, r0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L557: ++ .align 2 ++.L556: ++ .word .LANCHOR0 ++ .fnend ++ .size V2P_block, .-V2P_block ++ .align 2 ++ .global P2V_plane ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type P2V_plane, %function ++P2V_plane: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L560 ++ movw r2, #2348 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r6, r0 ++ ldrh r5, [r3, r2] ++ movw r2, #2388 ++ ldrh r1, [r3, r2] ++ bl __aeabi_uidiv ++ mov r1, r5 ++ smulbb r4, r0, r5 ++ mov r0, r6 ++ bl __aeabi_uidivmod ++ add r1, r4, r1 ++ uxth r0, r1 ++ pop {r4, r5, r6, pc} ++.L561: ++ .align 2 ++.L560: ++ .word .LANCHOR0 ++ .fnend ++ .size P2V_plane, .-P2V_plane ++ .align 2 ++ .global P2V_block_in_plane ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type P2V_block_in_plane, %function ++P2V_block_in_plane: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ movw r3, #2388 ++ ldr r4, .L564 ++ ldrh r1, [r4, r3] ++ bl __aeabi_uidivmod ++ movw r3, #2348 ++ uxth r0, r1 ++ ldrh r1, [r4, r3] ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ pop {r4, pc} ++.L565: ++ .align 2 ++.L564: ++ .word .LANCHOR0 ++ .fnend ++ .size P2V_block_in_plane, .-P2V_block_in_plane ++ .align 2 ++ .global ftl_cmp_data_ver ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_cmp_data_ver, %function ++ftl_cmp_data_ver: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r0, r1 ++ bls .L567 ++ sub r0, r0, r1 ++ cmp r0, #-2147483648 ++ movhi r0, #0 ++ movls r0, #1 ++ bx lr ++.L567: ++ sub r0, r1, r0 ++ cmp r0, #-2147483648 ++ movls r0, #0 ++ movhi r0, #1 ++ bx lr ++ .fnend ++ .size ftl_cmp_data_ver, .-ftl_cmp_data_ver ++ .align 2 ++ .global FtlFreeSysBlkQueueEmpty ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueEmpty, %function ++FtlFreeSysBlkQueueEmpty: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L570 ++ ldrh r0, [r3, #6] ++ clz r0, r0 ++ lsr r0, r0, #5 ++ bx lr ++.L571: ++ .align 2 ++.L570: ++ .word .LANCHOR0+2516 ++ .fnend ++ .size FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty ++ .align 2 ++ .global FtlFreeSysBlkQueueFull ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueFull, %function ++FtlFreeSysBlkQueueFull: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L573 ++ ldrh r0, [r3, #6] ++ sub r0, r0, #1024 ++ clz r0, r0 ++ lsr r0, r0, #5 ++ bx lr ++.L574: ++ .align 2 ++.L573: ++ .word .LANCHOR0+2516 ++ .fnend ++ .size FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull ++ .align 2 ++ .global FtlFreeSysBlkQueueIn ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueIn, %function ++FtlFreeSysBlkQueueIn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ sub r3, r0, #1 ++ movw r2, #65533 ++ uxth r3, r3 ++ cmp r3, r2 ++ bxhi lr ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r4, .L588 ++ ldrh r3, [r4, #6] ++ cmp r3, #1024 ++ popeq {r4, r5, r6, r7, r8, pc} ++ cmp r1, #0 ++ mov r5, r0 ++ beq .L577 ++ ldr r6, .L588+4 ++ ldr r3, [r6, #-3612] ++ cmp r3, #0 ++ bne .L577 ++ bl P2V_block_in_plane ++ mov r7, r0 ++ ldr r0, [r6, #-3608] ++ lsl r3, r5, #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [r0, #4] ++ bl FlashEraseBlocks ++ ldr r2, [r6, #-3604] ++ lsl r0, r7, #1 ++ ldrh r3, [r2, r0] ++ add r3, r3, #1 ++ strh r3, [r2, r0] @ movhi ++ ldr r3, [r6, #-3600] ++ add r3, r3, #1 ++ str r3, [r6, #-3600] ++.L577: ++ ldrh r3, [r4, #6] ++ add r3, r3, #1 ++ strh r3, [r4, #6] @ movhi ++ ldrh r3, [r4, #4] ++ add r2, r4, r3, lsl #1 ++ add r3, r3, #1 ++ ubfx r3, r3, #0, #10 ++ strh r5, [r2, #8] @ movhi ++ strh r3, [r4, #4] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L589: ++ .align 2 ++.L588: ++ .word .LANCHOR0+2516 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn ++ .align 2 ++ .global FtlFreeSysBLkSort ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBLkSort, %function ++FtlFreeSysBLkSort: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L603 ++ ldrh r2, [r3, #6] ++ cmp r2, #0 ++ bxeq lr ++ ldr r2, .L603+4 ++ mov r0, #0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r0 ++ ldrh r1, [r3, #2] ++ ldrh lr, [r2, #28] ++ ldrh r2, [r3, #4] ++ and lr, lr, #31 ++.L592: ++ uxth ip, r0 ++ add r0, r0, #1 ++ cmp lr, ip ++ bgt .L593 ++ cmp r4, #0 ++ strhne r1, [r3, #2] @ movhi ++ strhne r2, [r3, #4] @ movhi ++ pop {r4, pc} ++.L593: ++ add ip, r3, r1, lsl #1 ++ add r1, r1, #1 ++ ubfx r1, r1, #0, #10 ++ ldrh r4, [ip, #8] ++ add ip, r3, r2, lsl #1 ++ strh r4, [ip, #8] @ movhi ++ mov r4, #1 ++ add r2, r2, r4 ++ ubfx r2, r2, #0, #10 ++ b .L592 ++.L604: ++ .align 2 ++.L603: ++ .word .LANCHOR0+2516 ++ .word .LANCHOR2-3596 ++ .fnend ++ .size FtlFreeSysBLkSort, .-FtlFreeSysBLkSort ++ .align 2 ++ .global FtlFreeSysBlkQueueOut ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueOut, %function ++FtlFreeSysBlkQueueOut: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r4, .L616 ++ ldr r8, .L616+4 ++ mov r7, r4 ++.L606: ++ ldrh r1, [r4, #6] ++ cmp r1, #0 ++ beq .L607 ++ ldr r5, .L616+8 ++ sub r1, r1, #1 ++ ldrh r3, [r4, #2] ++ strh r1, [r4, #6] @ movhi ++ ldr r10, [r5, #-3612] ++ add r2, r4, r3, lsl #1 ++ add r3, r3, #1 ++ cmp r10, #0 ++ ubfx r3, r3, #0, #10 ++ ldrh r6, [r2, #8] ++ strh r3, [r4, #2] @ movhi ++ bne .L608 ++ mov r0, r6 ++ bl P2V_block_in_plane ++ mov r9, r0 ++ ldr r0, [r5, #-3608] ++ lsl r3, r6, #10 ++ str r3, [r0, #4] ++ ldrb r3, [r8, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L609 ++ mov r2, #1 ++ mov r1, r10 ++ bl FlashEraseBlocks ++.L609: ++ mov r2, #1 ++ ldr r0, [r5, #-3608] ++ mov r1, r2 ++ bl FlashEraseBlocks ++ ldr r2, [r5, #-3604] ++ lsl r0, r9, #1 ++ ldrh r3, [r2, r0] ++ add r3, r3, #1 ++ strh r3, [r2, r0] @ movhi ++ ldr r3, [r5, #-3600] ++ add r3, r3, #1 ++ str r3, [r5, #-3600] ++.L608: ++ sub r3, r6, #1 ++ movw r2, #65533 ++ uxth r3, r3 ++ cmp r3, r2 ++ bls .L611 ++ ldrh r2, [r7, #6] ++ mov r1, r6 ++ ldr r0, .L616+12 ++ bl printk ++ b .L606 ++.L607: ++ ldr r0, .L616+16 ++ bl printk ++.L610: ++ b .L610 ++.L611: ++ mov r0, r6 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L617: ++ .align 2 ++.L616: ++ .word .LANCHOR0+2516 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC4 ++ .word .LC3 ++ .fnend ++ .size FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut ++ .align 2 ++ .global test_node_in_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type test_node_in_list, %function ++test_node_in_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L624 ++ str lr, [sp, #-4]! ++ .save {lr} ++ movw lr, #65535 ++ ldr r2, [r0] ++ ldr ip, [r3, #-3548] ++ sub r3, r2, ip ++ asr r0, r3, #1 ++ ldr r3, .L624+4 ++ mul r3, r3, r0 ++ mov r0, #6 ++ uxth r3, r3 ++.L620: ++ cmp r3, r1 ++ beq .L621 ++ ldrh r3, [r2] ++ cmp r3, lr ++ beq .L622 ++ mla r2, r0, r3, ip ++ b .L620 ++.L621: ++ mov r0, #1 ++ ldr pc, [sp], #4 ++.L622: ++ mov r0, #0 ++ ldr pc, [sp], #4 ++.L625: ++ .align 2 ++.L624: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size test_node_in_list, .-test_node_in_list ++ .align 2 ++ .global insert_data_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type insert_data_list, %function ++insert_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ movw r3, #2332 ++ ldr r4, .L642 ++ ldrh r3, [r4, r3] ++ cmp r3, r0 ++ bls .L628 ++ ldr r2, .L642+4 ++ mov lr, #6 ++ mul lr, lr, r0 ++ mvn ip, #0 ++ ldr r6, [r2, #-3548] ++ mov r5, r2 ++ add r1, r6, lr ++ strh ip, [r1, #2] @ movhi ++ strh ip, [r6, lr] @ movhi ++ ldr r3, [r2, #-3544] ++ cmp r3, #0 ++ streq r1, [r2, #-3544] ++ beq .L628 ++ ldr r8, [r2, #-3540] ++ lsl r10, r0, #1 ++ ldrh r2, [r1, #4] ++ ldrh r7, [r8, r10] ++ cmp r2, #0 ++ mulne ip, r2, r7 ++ ldr r7, [r5, #-3548] ++ sub r2, r3, r7 ++ asr r9, r2, #1 ++ ldr r2, .L642+8 ++ mul r2, r2, r9 ++ movw r9, #2332 ++ ldrh r4, [r4, r9] ++ ldr r9, [r5, #-3604] ++ str r4, [sp] ++ uxth r2, r2 ++ add r4, r9, r10 ++ str r4, [sp, #4] ++ mov r4, #0 ++.L637: ++ ldr r5, [sp] ++ add r4, r4, #1 ++ uxth r4, r4 ++ cmp r4, r5 ++ movls r5, #0 ++ movhi r5, #1 ++ cmp r0, r2 ++ orreq r5, r5, #1 ++ cmp r5, #0 ++ bne .L628 ++ lsl r10, r2, #1 ++ ldrh r5, [r3, #4] ++ ldrh fp, [r8, r10] ++ cmp r5, #0 ++ mvneq r5, #0 ++ mulne r5, r5, fp ++ cmp ip, r5 ++ bne .L633 ++ ldr r5, [sp, #4] ++ ldrh r10, [r9, r10] ++ ldrh r5, [r5] ++ cmp r10, r5 ++ bcc .L635 ++.L634: ++ strh r2, [r6, lr] @ movhi ++ ldr ip, .L642+4 ++ ldrh r2, [r3, #2] ++ strh r2, [r1, #2] @ movhi ++ ldr r2, [ip, #-3544] ++ cmp r3, r2 ++ ldrhne lr, [r3, #2] ++ movne r2, #6 ++ ldrne r1, [ip, #-3548] ++ strheq r0, [r3, #2] @ movhi ++ streq r1, [ip, #-3544] ++ mulne r2, r2, lr ++ strhne r0, [r1, r2] @ movhi ++ strhne r0, [r3, #2] @ movhi ++ b .L628 ++.L633: ++ bcc .L634 ++.L635: ++ ldrh r5, [r3] ++ movw r10, #65535 ++ cmp r5, r10 ++ bne .L636 ++ strh r2, [r1, #2] @ movhi ++ strh r0, [r3] @ movhi ++ ldr r3, .L642+4 ++ str r1, [r3, #-3536] ++.L628: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L636: ++ mov r3, #6 ++ mov r2, r5 ++ mla r3, r3, r5, r7 ++ b .L637 ++.L643: ++ .align 2 ++.L642: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size insert_data_list, .-insert_data_list ++ .align 2 ++ .global INSERT_DATA_LIST ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type INSERT_DATA_LIST, %function ++INSERT_DATA_LIST: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl insert_data_list ++ ldr r2, .L646 ++ ldrh r3, [r2, #-12] ++ add r3, r3, #1 ++ strh r3, [r2, #-12] @ movhi ++ pop {r4, pc} ++.L647: ++ .align 2 ++.L646: ++ .word .LANCHOR2-3520 ++ .fnend ++ .size INSERT_DATA_LIST, .-INSERT_DATA_LIST ++ .align 2 ++ .global insert_free_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type insert_free_list, %function ++insert_free_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ movw r4, #65535 ++ cmp r0, r4 ++ beq .L649 ++ ldr r2, .L656 ++ mov r1, #6 ++ mul r5, r1, r0 ++ mvn r3, #0 ++ ldr r6, [r2, #-3548] ++ mov ip, r2 ++ add lr, r6, r5 ++ strh r3, [lr, #2] @ movhi ++ strh r3, [r6, r5] @ movhi ++ ldr r3, [r2, #-3528] ++ cmp r3, #0 ++ streq lr, [r2, #-3528] ++ beq .L649 ++ ldr r8, [r2, #-3604] ++ lsl r2, r0, #1 ++ ldr r7, [ip, #-3548] ++ ldrh r9, [r8, r2] ++ sub r2, r3, r7 ++ asr r10, r2, #1 ++ ldr r2, .L656+4 ++ mul r2, r2, r10 ++ mov r10, r1 ++ uxth r2, r2 ++.L653: ++ lsl r1, r2, #1 ++ ldrh r1, [r8, r1] ++ cmp r1, r9 ++ bcs .L651 ++ ldrh r1, [r3] ++ cmp r1, r4 ++ bne .L652 ++ strh r2, [lr, #2] @ movhi ++ strh r0, [r3] @ movhi ++.L649: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L652: ++ mla r3, r10, r1, r7 ++ mov r2, r1 ++ b .L653 ++.L651: ++ ldrh r1, [r3, #2] ++ strh r1, [lr, #2] @ movhi ++ strh r2, [r6, r5] @ movhi ++ ldr r2, [ip, #-3528] ++ cmp r3, r2 ++ ldrhne lr, [r3, #2] ++ movne r2, #6 ++ ldrne r1, [ip, #-3548] ++ strheq r0, [r3, #2] @ movhi ++ streq lr, [ip, #-3528] ++ mulne r2, r2, lr ++ strhne r0, [r1, r2] @ movhi ++ strhne r0, [r3, #2] @ movhi ++ b .L649 ++.L657: ++ .align 2 ++.L656: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size insert_free_list, .-insert_free_list ++ .align 2 ++ .global INSERT_FREE_LIST ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type INSERT_FREE_LIST, %function ++INSERT_FREE_LIST: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl insert_free_list ++ ldr r2, .L660 ++ ldrh r3, [r2, #-4] ++ add r3, r3, #1 ++ strh r3, [r2, #-4] @ movhi ++ pop {r4, pc} ++.L661: ++ .align 2 ++.L660: ++ .word .LANCHOR2-3520 ++ .fnend ++ .size INSERT_FREE_LIST, .-INSERT_FREE_LIST ++ .align 2 ++ .global List_remove_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type List_remove_node, %function ++List_remove_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ mov ip, #6 ++ ldr r4, .L668 ++ mul r1, ip, r1 ++ movw r5, #65535 ++ ldr r3, [r0] ++ ldr r2, [r4, #-3548] ++ add lr, r2, r1 ++ cmp lr, r3 ++ ldrh r3, [r2, r1] ++ bne .L663 ++ cmp r3, r5 ++ mlane r3, ip, r3, r2 ++ moveq r3, #0 ++ streq r3, [r0] ++ strne r3, [r0] ++ mvnne r0, #0 ++ strhne r0, [r3, #2] @ movhi ++.L665: ++ mvn r3, #0 ++ mov r0, #0 ++ strh r3, [r2, r1] @ movhi ++ strh r3, [lr, #2] @ movhi ++ pop {r4, r5, pc} ++.L663: ++ cmp r3, r5 ++ ldrh r0, [lr, #2] ++ bne .L666 ++ cmp r0, r3 ++ mulne r3, ip, r0 ++ mvnne r0, #0 ++ strhne r0, [r2, r3] @ movhi ++ b .L665 ++.L666: ++ mla r3, ip, r3, r2 ++ strh r0, [r3, #2] @ movhi ++ ldrh r3, [lr, #2] ++ ldrh r5, [r2, r1] ++ ldr r0, [r4, #-3548] ++ mul r3, ip, r3 ++ strh r5, [r0, r3] @ movhi ++ b .L665 ++.L669: ++ .align 2 ++.L668: ++ .word .LANCHOR2 ++ .fnend ++ .size List_remove_node, .-List_remove_node ++ .align 2 ++ .global List_pop_index_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type List_pop_index_node, %function ++List_pop_index_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, [r0] ++ cmp r3, #0 ++ beq .L676 ++ ldr r2, .L681 ++ push {r4, lr} ++ .save {r4, lr} ++ movw lr, #65535 ++ mov r4, #6 ++ ldr r2, [r2, #-3548] ++.L672: ++ cmp r1, #0 ++ bne .L673 ++.L675: ++ ldr r4, .L681+4 ++ sub r3, r3, r2 ++ asr r3, r3, #1 ++ mul r4, r4, r3 ++ uxth r1, r4 ++ bl List_remove_node ++ uxth r0, r4 ++ pop {r4, pc} ++.L673: ++ ldrh ip, [r3] ++ cmp ip, lr ++ beq .L675 ++ sub r1, r1, #1 ++ mla r3, r4, ip, r2 ++ uxth r1, r1 ++ b .L672 ++.L676: ++ movw r0, #65535 ++ bx lr ++.L682: ++ .align 2 ++.L681: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size List_pop_index_node, .-List_pop_index_node ++ .align 2 ++ .global List_get_gc_head_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type List_get_gc_head_node, %function ++List_get_gc_head_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L689 ++ ldr r3, [r2, #-3544] ++ cmp r3, #0 ++ ldrne r1, [r2, #-3548] ++ movne ip, #6 ++ movwne r2, #65535 ++ bne .L685 ++.L688: ++ movw r0, #65535 ++ bx lr ++.L687: ++ sub r0, r0, #1 ++ mla r3, ip, r3, r1 ++ uxth r0, r0 ++.L685: ++ cmp r0, #0 ++ beq .L686 ++ ldrh r3, [r3] ++ cmp r3, r2 ++ bne .L687 ++ b .L688 ++.L686: ++ ldr r0, .L689+4 ++ sub r3, r3, r1 ++ asr r3, r3, #1 ++ mul r3, r0, r3 ++ uxth r0, r3 ++ bx lr ++.L690: ++ .align 2 ++.L689: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size List_get_gc_head_node, .-List_get_gc_head_node ++ .align 2 ++ .global List_update_data_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type List_update_data_list, %function ++List_update_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L699 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ sub r5, r3, #3520 ++ ldrh r2, [r5] ++ cmp r2, r0 ++ beq .L692 ++ sub r2, r3, #3472 ++ ldrh r2, [r2] ++ cmp r2, r0 ++ beq .L692 ++ sub r2, r3, #3424 ++ ldrh r2, [r2] ++ cmp r2, r0 ++ beq .L692 ++ mov lr, #6 ++ ldr r1, [r3, #-3548] ++ mul lr, lr, r0 ++ ldr r2, [r3, #-3544] ++ add ip, r1, lr ++ cmp ip, r2 ++ beq .L692 ++ ldr r4, [r3, #-3540] ++ lsl r3, r0, #1 ++ ldrh r2, [ip, #4] ++ ldrh r3, [r4, r3] ++ cmp r2, #0 ++ mvneq r2, #0 ++ mulne r2, r2, r3 ++ ldrh r3, [ip, #2] ++ movw ip, #65535 ++ cmp r3, ip ++ bne .L694 ++ ldrh ip, [r1, lr] ++ cmp ip, r3 ++ beq .L692 ++.L694: ++ mov ip, #6 ++ mul ip, ip, r3 ++ ldr r3, .L699+4 ++ asr lr, ip, #1 ++ add r1, r1, ip ++ mul r3, r3, lr ++ lsl r3, r3, #1 ++ ldrh lr, [r4, r3] ++ ldrh r3, [r1, #4] ++ cmp r3, #0 ++ mulne r3, r3, lr ++ mvneq r3, #0 ++ cmp r2, r3 ++ bcs .L692 ++ mov r4, r0 ++ mov r1, r0 ++ ldr r0, .L699+8 ++ bl List_remove_node ++ ldrh r3, [r5, #-12] ++ mov r0, r4 ++ sub r3, r3, #1 ++ strh r3, [r5, #-12] @ movhi ++ bl INSERT_DATA_LIST ++.L692: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L700: ++ .align 2 ++.L699: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .word .LANCHOR2-3544 ++ .fnend ++ .size List_update_data_list, .-List_update_data_list ++ .align 2 ++ .global ftl_map_blk_alloc_new_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_map_blk_alloc_new_blk, %function ++ftl_map_blk_alloc_new_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r3, #0 ++ ldrh r1, [r0, #10] ++ ldr r2, [r0, #12] ++.L702: ++ uxth r5, r3 ++ cmp r5, r1 ++ bcs .L705 ++ mov r7, r2 ++ add r3, r3, #1 ++ ldrh r6, [r7] ++ add r2, r2, #2 ++ cmp r6, #0 ++ bne .L702 ++ mov r4, r0 ++ bl FtlFreeSysBlkQueueOut ++ sub r3, r0, #1 ++ movw r2, #65533 ++ uxth r3, r3 ++ mov r1, r0 ++ strh r0, [r7] @ movhi ++ cmp r3, r2 ++ bls .L703 ++ ldr r3, .L709 ++ ldr r0, .L709+4 ++ ldrh r2, [r3, #6] ++ bl printk ++.L704: ++ b .L704 ++.L703: ++ ldr r3, [r4, #28] ++ strh r6, [r4, #2] @ movhi ++ strh r5, [r4] @ movhi ++ add r3, r3, #1 ++ str r3, [r4, #28] ++ ldrh r3, [r4, #8] ++ add r3, r3, #1 ++ strh r3, [r4, #8] @ movhi ++.L705: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L710: ++ .align 2 ++.L709: ++ .word .LANCHOR0+2516 ++ .word .LC5 ++ .fnend ++ .size ftl_map_blk_alloc_new_blk, .-ftl_map_blk_alloc_new_blk ++ .align 2 ++ .global select_l2p_ram_region ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type select_l2p_ram_region, %function ++select_l2p_ram_region: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L722 ++ movw r3, #2430 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r1, #0 ++ mov ip, #12 ++ movw lr, #65535 ++ ldrh r2, [r2, r3] ++ ldr r3, .L722+4 ++ ldr r3, [r3, #-3376] ++.L712: ++ uxth r0, r1 ++ cmp r0, r2 ++ bcc .L714 ++ mov r0, r2 ++ mov r1, #0 ++ mov ip, #-2147483648 ++ mov r5, #12 ++.L715: ++ uxth r4, r1 ++ cmp r4, r2 ++ bcc .L717 ++ cmp r0, r2 ++ popcc {r4, r5, r6, pc} ++ ldr r1, .L722+8 ++ mov r0, r2 ++ mvn ip, #0 ++ ldrh r5, [r1, #-12] ++ mov r1, #0 ++.L718: ++ uxth lr, r1 ++ cmp lr, r2 ++ bcc .L720 ++ pop {r4, r5, r6, pc} ++.L714: ++ add r1, r1, #1 ++ mla r4, ip, r1, r3 ++ ldrh r4, [r4, #-12] ++ cmp r4, lr ++ bne .L712 ++ pop {r4, r5, r6, pc} ++.L717: ++ mla lr, r5, r1, r3 ++ add r1, r1, #1 ++ ldr lr, [lr, #4] ++ cmp ip, lr ++ movls r6, #0 ++ movhi r6, #1 ++ cmp lr, #0 ++ movlt r6, #0 ++ cmp r6, #0 ++ movne ip, lr ++ movne r0, r4 ++ b .L715 ++.L720: ++ ldr r4, [r3, #4] ++ cmp ip, r4 ++ bls .L719 ++ ldrh r6, [r3] ++ cmp r6, r5 ++ movne ip, r4 ++ movne r0, lr ++.L719: ++ add r1, r1, #1 ++ add r3, r3, #12 ++ b .L718 ++.L723: ++ .align 2 ++.L722: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR2-3360 ++ .fnend ++ .size select_l2p_ram_region, .-select_l2p_ram_region ++ .align 2 ++ .global FtlUpdateVaildLpn ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlUpdateVaildLpn, %function ++FtlUpdateVaildLpn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L733 ++ sub r1, r3, #3360 ++ ldrh r2, [r1, #-10] ++ cmp r2, #4 ++ cmpls r0, #0 ++ bne .L725 ++ add r2, r2, #1 ++ strh r2, [r1, #-10] @ movhi ++ bx lr ++.L725: ++ ldr r0, .L733+4 ++ mov r2, #0 ++ str lr, [sp, #-4]! ++ .save {lr} ++ movw lr, #65535 ++ strh r2, [r1, #-10] @ movhi ++ movw r1, #2332 ++ str r2, [r3, #-3368] ++ ldrh r1, [r0, r1] ++ ldr r2, [r3, #-3540] ++ add r1, r2, r1, lsl #1 ++.L726: ++ cmp r2, r1 ++ bne .L728 ++ ldr pc, [sp], #4 ++.L728: ++ ldrh ip, [r2], #2 ++ cmp ip, lr ++ ldrne r0, [r3, #-3368] ++ addne r0, r0, ip ++ strne r0, [r3, #-3368] ++ b .L726 ++.L734: ++ .align 2 ++.L733: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlUpdateVaildLpn, .-FtlUpdateVaildLpn ++ .align 2 ++ .global ftl_set_blk_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_set_blk_mode, %function ++ftl_set_blk_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r1, #0 ++ mov r3, r0 ++ beq .L736 ++ b ftl_set_blk_mode.part.9 ++.L736: ++ ldr r2, .L737 ++ lsr r0, r0, #5 ++ and r3, r3, #31 ++ mov ip, #1 ++ ldr r1, [r2, #32] ++ ldr r2, [r1, r0, lsl #2] ++ bic r3, r2, ip, lsl r3 ++ str r3, [r1, r0, lsl #2] ++ bx lr ++.L738: ++ .align 2 ++.L737: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_set_blk_mode, .-ftl_set_blk_mode ++ .align 2 ++ .global ftl_get_blk_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_get_blk_mode, %function ++ftl_get_blk_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L740 ++ lsr r2, r0, #5 ++ and r0, r0, #31 ++ ldr r3, [r3, #32] ++ ldr r3, [r3, r2, lsl #2] ++ lsr r0, r3, r0 ++ and r0, r0, #1 ++ bx lr ++.L741: ++ .align 2 ++.L740: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_get_blk_mode, .-ftl_get_blk_mode ++ .align 2 ++ .global ftl_sb_update_avl_pages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_sb_update_avl_pages, %function ++ftl_sb_update_avl_pages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov r3, #0 ++ movw ip, #2324 ++ strh r3, [r0, #4] @ movhi ++ ldr r3, .L750 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ movw r5, #65535 ++ ldrh lr, [r3, ip] ++ add ip, r0, r2, lsl #1 ++ add ip, ip, #14 ++.L743: ++ cmp r2, lr ++ bcc .L745 ++ movw r2, #2390 ++ add ip, r0, #16 ++ ldrh r3, [r3, r2] ++ movw r4, #65535 ++ sub r3, r3, #1 ++ sub r1, r3, r1 ++ mov r3, #0 ++ uxth r1, r1 ++.L746: ++ uxth r2, r3 ++ cmp lr, r2 ++ bhi .L748 ++ pop {r4, r5, pc} ++.L745: ++ ldrh r4, [ip, #2]! ++ add r2, r2, #1 ++ uxth r2, r2 ++ cmp r4, r5 ++ ldrhne r4, [r0, #4] ++ addne r4, r4, #1 ++ strhne r4, [r0, #4] @ movhi ++ b .L743 ++.L748: ++ ldrh r2, [ip], #2 ++ add r3, r3, #1 ++ cmp r2, r4 ++ ldrhne r2, [r0, #4] ++ addne r2, r1, r2 ++ strhne r2, [r0, #4] @ movhi ++ b .L746 ++.L751: ++ .align 2 ++.L750: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages ++ .align 2 ++ .global make_superblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type make_superblock, %function ++make_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #2324 ++ ldr r6, .L765 ++ mov r4, r0 ++ add r7, r0, #16 ++ mvn r9, #0 ++ ldr r10, .L765+4 ++ mov r5, #0 ++ ldrh r8, [r6, r3] ++ strh r5, [r0, #4] @ movhi ++ strb r5, [r0, #7] ++.L753: ++ uxth r3, r5 ++ cmp r8, r3 ++ bhi .L755 ++ movw r2, #2390 ++ ldrb r3, [r4, #7] @ zero_extendqisi2 ++ ldrh r2, [r6, r2] ++ smulbb r3, r3, r2 ++ strh r3, [r4, #4] @ movhi ++ mov r3, #0 ++ strb r3, [r4, #9] ++ ldr r3, [r6, #2248] ++ cmp r3, #0 ++ beq .L756 ++ ldrh r3, [r4] ++ ldr r2, .L765+8 ++ ldr r2, [r2, #-3604] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #79 ++ movls r3, #1 ++ strbls r3, [r4, #9] ++.L756: ++ ldrb r3, [r6, #36] @ zero_extendqisi2 ++ mov r0, #0 ++ cmp r3, #0 ++ movne r3, #1 ++ strbne r3, [r4, #9] ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L755: ++ ldrb r0, [r10, r5] @ zero_extendqisi2 ++ add r7, r7, #2 ++ ldrh r1, [r4] ++ add r5, r5, #1 ++ bl V2P_block ++ strh r9, [r7, #-2] @ movhi ++ mov fp, r0 ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ strheq fp, [r7, #-2] @ movhi ++ ldrbeq r3, [r4, #7] @ zero_extendqisi2 ++ addeq r3, r3, #1 ++ strbeq r3, [r4, #7] ++ b .L753 ++.L766: ++ .align 2 ++.L765: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2350 ++ .word .LANCHOR2 ++ .fnend ++ .size make_superblock, .-make_superblock ++ .align 2 ++ .global update_multiplier_value ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type update_multiplier_value, %function ++update_multiplier_value: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L774 ++ movw r2, #2324 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r5, #0 ++ ldr r9, .L774+4 ++ mov r6, r0 ++ mov r4, r5 ++ ldrh r7, [r3, r2] ++ movw r2, #2390 ++ ldrh r8, [r3, r2] ++.L768: ++ uxth r3, r5 ++ cmp r7, r3 ++ bhi .L770 ++ cmp r4, #0 ++ moveq r0, r4 ++ beq .L771 ++ mov r1, r4 ++ mov r0, #32768 ++ bl __aeabi_idiv ++.L771: ++ ldr r3, .L774+8 ++ mov r2, #6 ++ ldr r3, [r3, #-3548] ++ mla r6, r2, r6, r3 ++ strh r0, [r6, #4] @ movhi ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L770: ++ mov r1, r6 ++ ldrb r0, [r9, r5] @ zero_extendqisi2 ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ add r5, r5, #1 ++ addeq r4, r4, r8 ++ uxtheq r4, r4 ++ b .L768 ++.L775: ++ .align 2 ++.L774: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2350 ++ .word .LANCHOR2 ++ .fnend ++ .size update_multiplier_value, .-update_multiplier_value ++ .align 2 ++ .global GetFreeBlockMinEraseCount ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type GetFreeBlockMinEraseCount, %function ++GetFreeBlockMinEraseCount: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L779 ++ ldr r0, [r2, #-3528] ++ cmp r0, #0 ++ bxeq lr ++ ldr r3, [r2, #-3548] ++ sub r0, r0, r3 ++ ldr r3, .L779+4 ++ asr r0, r0, #1 ++ mul r0, r3, r0 ++ ldr r3, [r2, #-3604] ++ uxth r0, r0 ++ lsl r0, r0, #1 ++ ldrh r0, [r3, r0] ++ bx lr ++.L780: ++ .align 2 ++.L779: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount ++ .align 2 ++ .global GetFreeBlockMaxEraseCount ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type GetFreeBlockMaxEraseCount, %function ++GetFreeBlockMaxEraseCount: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r1, .L793 ++ ldr r3, [r1, #-3528] ++ cmp r3, #0 ++ beq .L787 ++ sub r2, r1, #3520 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ ldrh r2, [r2, #-4] ++ mov r4, #6 ++ movw r5, #65535 ++ ldr ip, [r1, #-3548] ++ rsb r2, r2, r2, lsl #3 ++ sub r3, r3, ip ++ asr r2, r2, #3 ++ asr r3, r3, #1 ++ cmp r0, r2 ++ uxthgt r0, r2 ++ ldr r2, .L793+4 ++ mul r3, r2, r3 ++ mov r2, #0 ++ uxth r3, r3 ++.L784: ++ uxth lr, r2 ++ cmp r0, lr ++ bls .L786 ++ mul lr, r4, r3 ++ add r2, r2, #1 ++ ldrh lr, [ip, lr] ++ cmp lr, r5 ++ bne .L788 ++.L786: ++ ldr r2, [r1, #-3604] ++ lsl r3, r3, #1 ++ ldrh r0, [r2, r3] ++ pop {r4, r5, pc} ++.L788: ++ mov r3, lr ++ b .L784 ++.L787: ++ mov r0, r3 ++ bx lr ++.L794: ++ .align 2 ++.L793: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount ++ .align 2 ++ .global FtlPrintInfo2buf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlPrintInfo2buf, %function ++FtlPrintInfo2buf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r0 ++ ldr r9, .L808 ++ add r5, r8, #12 ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r1, .L808+4 ++ bl strcpy ++ ldr r2, [r9, #124] ++ mov r0, r5 ++ ldr r1, .L808+8 ++ bl sprintf ++ add r5, r5, r0 ++ ldr r2, [r9, #2408] ++ mov r0, r5 ++ ldr r1, .L808+12 ++ bl sprintf ++ ldr r3, .L808+16 ++ add r5, r5, r0 ++ ldr r3, [r3, #500] ++ cmp r3, #1 ++ subne r0, r5, r8 ++ bne .L795 ++ add r3, sp, #28 ++ add r2, sp, #24 ++ add r1, sp, #20 ++ add r0, sp, #16 ++ bl NandcGetTimeCfg ++ ldr r3, [sp, #28] ++ mov r0, r5 ++ ldr r2, [sp, #16] ++ ldr r1, .L808+20 ++ str r3, [sp, #4] ++ ldr r3, [sp, #24] ++ ldr r7, .L808+24 ++ str r3, [sp] ++ ldr r3, [sp, #20] ++ sub r10, r7, #3520 ++ bl sprintf ++ add r6, r5, r0 ++ ldr r1, .L808+28 ++ mov r0, r6 ++ add r6, r6, #10 ++ bl strcpy ++ ldr r2, [r9, #2452] ++ mov r0, r6 ++ ldr r1, .L808+32 ++ sub r4, r7, #3584 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3368] ++ ldr r1, .L808+36 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3364] ++ ldr r1, .L808+40 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3360] ++ ldr r1, .L808+44 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3356] ++ ldr r1, .L808+48 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3352] ++ ldr r1, .L808+52 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3348] ++ ldr r1, .L808+56 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3344] ++ ldr r1, .L808+60 ++ mov r0, r6 ++ bl sprintf ++ ldr r2, [r7, #-3340] ++ add r6, r6, r0 ++ ldr r1, .L808+64 ++ mov r0, r6 ++ sub r5, r7, #3280 ++ lsr r2, r2, #11 ++ bl sprintf ++ ldr r2, [r7, #-3336] ++ add r6, r6, r0 ++ ldr r1, .L808+68 ++ mov r0, r6 ++ lsr r2, r2, #11 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3332] ++ ldr r1, .L808+72 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3328] ++ ldr r1, .L808+76 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ bl FtlBbtCalcTotleCnt ++ ldr r2, .L808+80 ++ mov r3, r0 ++ ldr r1, .L808+84 ++ mov r0, r6 ++ ldrh r2, [r2, #6] ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r10, #-4] ++ ldr r1, .L808+88 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3324] ++ ldr r1, .L808+92 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3320] ++ ldr r1, .L808+96 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3316] ++ ldr r1, .L808+100 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3600] ++ ldr r1, .L808+104 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3312] ++ ldr r1, .L808+108 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-3308] ++ ldr r1, .L808+112 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #18] ++ ldr r1, .L808+116 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #16] ++ ldr r1, .L808+120 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r9, #2432] ++ ldr r1, .L808+124 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r9, #2424] ++ ldr r1, .L808+128 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r9, #2320] ++ ldr r1, .L808+132 ++ mov r0, r6 ++ bl sprintf ++ ldr r3, .L808+136 ++ add r6, r6, r0 ++ ldr r1, .L808+140 ++ mov r0, r6 ++ sub r4, r7, #3296 ++ ldrh r2, [r3, #6] ++ bl sprintf ++ movw r3, #2332 ++ add r6, r6, r0 ++ ldrh r2, [r9, r3] ++ mov r0, r6 ++ ldr r1, .L808+144 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #-8] ++ ldr r1, .L808+148 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r9, #2336] ++ ldr r1, .L808+152 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #-4] ++ ldr r1, .L808+156 ++ mov r0, r6 ++ bl sprintf ++ movw r3, #2456 ++ add r6, r6, r0 ++ ldrh r2, [r9, r3] ++ mov r0, r6 ++ ldr r1, .L808+160 ++ sub r4, r7, #3472 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r10, #2] ++ ldr r1, .L808+164 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #-3514] @ zero_extendqisi2 ++ ldr r1, .L808+168 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r10] ++ ldr r1, .L808+172 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #-3512] @ zero_extendqisi2 ++ ldr r1, .L808+176 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r10, #4] ++ ldr r1, .L808+180 ++ mov r0, r6 ++ bl sprintf ++ ldrh r3, [r10] ++ add r6, r6, r0 ++ ldr r2, [r7, #-3540] ++ mov r0, r6 ++ ldr r1, .L808+184 ++ lsl r3, r3, #1 ++ ldrh r2, [r2, r3] ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #2] ++ ldr r1, .L808+188 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #-3466] @ zero_extendqisi2 ++ ldr r1, .L808+192 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4] ++ ldr r1, .L808+196 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #-3464] @ zero_extendqisi2 ++ ldr r1, .L808+200 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #4] ++ ldr r1, .L808+204 ++ mov r0, r6 ++ bl sprintf ++ ldrh r3, [r4] ++ add r6, r6, r0 ++ ldr r2, [r7, #-3540] ++ mov r0, r6 ++ ldr r1, .L808+208 ++ sub r4, r7, #3424 ++ lsl r3, r3, #1 ++ ldrh r2, [r2, r3] ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #2] ++ ldr r1, .L808+212 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #-3418] @ zero_extendqisi2 ++ ldr r1, .L808+216 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4] ++ ldr r1, .L808+220 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #-3416] @ zero_extendqisi2 ++ ldr r1, .L808+224 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #4] ++ ldr r1, .L808+228 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #-2] ++ ldr r1, .L808+232 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #-3278] @ zero_extendqisi2 ++ ldr r1, .L808+236 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #-4] ++ ldr r1, .L808+240 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #-3276] @ zero_extendqisi2 ++ ldr r1, .L808+244 ++ mov r0, r6 ++ bl sprintf ++ sub r4, r5, #4 ++ add r6, r6, r0 ++ ldrh r2, [r4, #4] ++ mov r0, r6 ++ ldr r1, .L808+248 ++ bl sprintf ++ ldr r3, [r7, #-3160] ++ add r6, r6, r0 ++ ldr r2, [r9, #2248] ++ mov r0, r6 ++ ldr r1, [r7, #-2724] ++ str r3, [sp, #4] ++ ldr r3, [r7, #-3152] ++ orr r2, r2, r1, lsl #8 ++ ldr r1, .L808+252 ++ str r3, [sp] ++ ldr r3, [r7, #-3156] ++ bl sprintf ++ add r4, r6, r0 ++ ldr r2, [r7, #-3164] ++ ldr r1, .L808+256 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldr r2, [r7, #-3140] ++ ldr r1, .L808+260 ++ mov r0, r4 ++ bl sprintf ++ sub r3, r7, #2720 ++ add r4, r4, r0 ++ ldrh r2, [r3] ++ mov r0, r4 ++ ldr r1, .L808+264 ++ sub r6, r7, #2704 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r2, [r6, #-14] ++ ldr r1, .L808+268 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldr r2, [r7, #-2716] ++ ldr r1, .L808+272 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r2, [r6, #-8] ++ ldr r1, .L808+276 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ bl GetFreeBlockMinEraseCount ++ ldr r1, .L808+280 ++ mov r2, r0 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r0, [r10, #-4] ++ bl GetFreeBlockMaxEraseCount ++ ldr r1, .L808+284 ++ mov r2, r0 ++ mov r0, r4 ++ bl sprintf ++ ldrh r3, [r5, #-4] ++ movw r2, #65535 ++ add r4, r4, r0 ++ cmp r3, r2 ++ beq .L798 ++ ldr r2, [r7, #-3540] ++ lsl r3, r3, #1 ++ mov r0, r4 ++ ldr r1, .L808+288 ++ ldrh r2, [r2, r3] ++ bl sprintf ++ add r4, r4, r0 ++.L798: ++ mov r0, #0 ++ ldr r9, .L808+292 ++ bl List_get_gc_head_node ++ uxth r3, r0 ++ mov r5, #0 ++ movw fp, #65535 ++ mov r10, #6 ++.L800: ++ cmp r3, fp ++ beq .L799 ++ ldr r2, [r7, #-3604] ++ lsl r1, r3, #1 ++ mul r6, r10, r3 ++ mov r0, r4 ++ ldrh r2, [r2, r1] ++ str r2, [sp, #8] ++ ldr r2, [r7, #-3548] ++ add r2, r2, r6 ++ ldrh r2, [r2, #4] ++ str r2, [sp, #4] ++ ldr r2, [r7, #-3540] ++ ldrh r2, [r2, r1] ++ mov r1, r9 ++ str r2, [sp] ++ mov r2, r5 ++ bl sprintf ++ add r5, r5, #1 ++ ldr r3, [r7, #-3548] ++ cmp r5, #16 ++ add r4, r4, r0 ++ ldrh r3, [r3, r6] ++ bne .L800 ++.L799: ++ ldr r2, [r7, #-3548] ++ mov r5, #0 ++ ldr r3, [r7, #-3528] ++ movw r9, #65535 ++ ldr fp, .L808+296 ++ mov r10, #6 ++ sub r3, r3, r2 ++ ldr r2, .L808+300 ++ asr r3, r3, #1 ++ mul r3, r2, r3 ++ uxth r3, r3 ++.L802: ++ cmp r3, r9 ++ beq .L801 ++ ldr r1, [r7, #-3604] ++ lsl r2, r3, #1 ++ mul r6, r10, r3 ++ mov r0, r4 ++ ldrh r2, [r1, r2] ++ mov r1, fp ++ str r2, [sp, #4] ++ ldr r2, [r7, #-3548] ++ add r2, r2, r6 ++ ldrh r2, [r2, #4] ++ str r2, [sp] ++ mov r2, r5 ++ add r5, r5, #1 ++ bl sprintf ++ cmp r5, #4 ++ add r4, r4, r0 ++ ldrne r3, [r7, #-3548] ++ ldrhne r3, [r3, r6] ++ bne .L802 ++.L801: ++ sub r0, r4, r8 ++.L795: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L809: ++ .align 2 ++.L808: ++ .word .LANCHOR0 ++ .word .LC6 ++ .word .LC7 ++ .word .LC8 ++ .word .LANCHOR1 ++ .word .LC9 ++ .word .LANCHOR2 ++ .word .LC10 ++ .word .LC11 ++ .word .LC12 ++ .word .LC13 ++ .word .LC14 ++ .word .LC15 ++ .word .LC16 ++ .word .LC17 ++ .word .LC18 ++ .word .LC19 ++ .word .LC20 ++ .word .LC21 ++ .word .LC22 ++ .word .LANCHOR0+2456 ++ .word .LC23 ++ .word .LC24 ++ .word .LC25 ++ .word .LC26 ++ .word .LC27 ++ .word .LC28 ++ .word .LC29 ++ .word .LC30 ++ .word .LC31 ++ .word .LC32 ++ .word .LC33 ++ .word .LC34 ++ .word .LC35 ++ .word .LANCHOR0+2516 ++ .word .LC36 ++ .word .LC37 ++ .word .LC38 ++ .word .LC39 ++ .word .LC40 ++ .word .LC41 ++ .word .LC42 ++ .word .LC43 ++ .word .LC44 ++ .word .LC45 ++ .word .LC46 ++ .word .LC47 ++ .word .LC48 ++ .word .LC49 ++ .word .LC50 ++ .word .LC51 ++ .word .LC52 ++ .word .LC53 ++ .word .LC54 ++ .word .LC55 ++ .word .LC56 ++ .word .LC57 ++ .word .LC58 ++ .word .LC59 ++ .word .LC60 ++ .word .LC61 ++ .word .LC62 ++ .word .LC63 ++ .word .LC64 ++ .word .LC65 ++ .word .LC66 ++ .word .LC67 ++ .word .LC68 ++ .word .LC69 ++ .word .LC70 ++ .word .LC71 ++ .word .LC72 ++ .word .LC73 ++ .word .LC74 ++ .word .LC75 ++ .word -1431655765 ++ .fnend ++ .size FtlPrintInfo2buf, .-FtlPrintInfo2buf ++ .align 2 ++ .global ftl_proc_ftl_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_proc_ftl_read, %function ++ftl_proc_ftl_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ ldr r2, .L812 ++ ldr r1, .L812+4 ++ bl sprintf ++ add r4, r5, r0 ++ mov r0, r4 ++ bl FtlPrintInfo2buf ++ add r0, r4, r0 ++ sub r0, r0, r5 ++ pop {r4, r5, r6, pc} ++.L813: ++ .align 2 ++.L812: ++ .word .LC76 ++ .word .LC77 ++ .fnend ++ .size ftl_proc_ftl_read, .-ftl_proc_ftl_read ++ .align 2 ++ .global GetSwlReplaceBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type GetSwlReplaceBlock, %function ++GetSwlReplaceBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, .L842 ++ ldr r2, [r4, #-3316] ++ ldr r3, [r4, #-3308] ++ cmp r2, r3 ++ bcs .L815 ++ ldr r0, .L842+4 ++ movw r2, #2332 ++ mov r3, #0 ++ str r3, [r4, #-3324] ++ ldrh r1, [r0, r2] ++ mov r6, r0 ++ ldr r2, [r4, #-3604] ++ sub r2, r2, #2 ++.L816: ++ cmp r3, r1 ++ bcc .L817 ++ ldr r5, [r4, #-3324] ++ mov r0, r5 ++ bl __aeabi_uidiv ++ str r0, [r4, #-3316] ++ movw r3, #2382 ++ ldr r0, [r4, #-3320] ++ ldrh r1, [r6, r3] ++ sub r0, r5, r0 ++ bl __aeabi_uidiv ++ str r0, [r4, #-3324] ++.L818: ++ ldr r5, [r4, #-3308] ++ ldr r8, [r4, #-3316] ++ add r3, r5, #256 ++ cmp r3, r8 ++ bls .L823 ++ ldr r2, [r4, #-3312] ++ add r3, r5, #768 ++ cmp r3, r2 ++ bls .L823 ++ ldr r3, .L842+4 ++ cmp r5, #40 ++ ldr r2, [r3, #2248] ++ movls r3, #0 ++ movhi r3, #1 ++ cmp r2, #0 ++ orreq r3, r3, #1 ++ cmp r3, #0 ++ beq .L823 ++.L825: ++ movw r6, #65535 ++.L824: ++ mov r0, r6 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L817: ++ ldrh r0, [r2, #2]! ++ add r3, r3, #1 ++ ldr ip, [r4, #-3324] ++ add r0, r0, ip ++ str r0, [r4, #-3324] ++ b .L816 ++.L815: ++ ldr r3, [r4, #-3312] ++ cmp r2, r3 ++ bls .L818 ++ ldr ip, .L842+8 ++ add r3, r3, #1 ++ str r3, [r4, #-3312] ++ mov r3, #0 ++.L820: ++ ldrh r2, [ip] ++ cmp r3, r2 ++ bcs .L818 ++ ldr r0, [r4, #-3604] ++ lsl r1, r3, #1 ++ add r3, r3, #1 ++ ldrh r2, [r0, r1] ++ add r2, r2, #1 ++ strh r2, [r0, r1] @ movhi ++ b .L820 ++.L823: ++ ldr r3, .L842+12 ++ ldrh r0, [r3, #-4] ++ add r0, r0, r0, lsl #1 ++ ubfx r0, r0, #2, #16 ++ bl GetFreeBlockMaxEraseCount ++ add r1, r5, #64 ++ mov r10, r0 ++ cmp r0, r1 ++ movcs r1, #0 ++ movcc r1, #1 ++ cmp r5, #40 ++ movls r1, #0 ++ cmp r1, #0 ++ bne .L825 ++ ldr r3, [r4, #-3544] ++ cmp r3, #0 ++ beq .L825 ++ ldr r0, .L842+4 ++ movw r2, #2332 ++ ldr ip, [r4, #-3548] ++ movw r7, #65535 ++ ldr r9, [r4, #-3604] ++ mov fp, #6 ++ ldrh r2, [r0, r2] ++ ldr lr, .L842+16 ++ str r2, [sp, #20] ++ mov r2, r7 ++.L826: ++ ldrh r0, [r3] ++ movw r6, #65535 ++ cmp r0, r6 ++ bne .L829 ++ mov r6, r2 ++.L828: ++ movw r3, #65535 ++ cmp r6, r3 ++ beq .L825 ++ lsl fp, r6, #1 ++ ldrh r1, [r9, fp] ++ cmp r5, r1 ++ bcs .L830 ++ bl GetFreeBlockMinEraseCount ++ cmp r5, r0 ++ strcc r7, [r4, #-3308] ++.L830: ++ cmp r8, r1 ++ bls .L825 ++ add r3, r1, #128 ++ cmp r10, r3 ++ ble .L825 ++ add r3, r1, #256 ++ cmp r8, r3 ++ bhi .L831 ++ ldr r3, [r4, #-3312] ++ add r1, r1, #768 ++ cmp r1, r3 ++ bcs .L825 ++.L831: ++ str r10, [sp, #8] ++ mov r2, r8 ++ ldrh r3, [r9, fp] ++ mov r1, r6 ++ ldr r0, .L842+20 ++ str r3, [sp, #4] ++ ldr r3, [r4, #-3540] ++ ldrh r3, [r3, fp] ++ str r3, [sp] ++ ldr r3, [r4, #-3312] ++ bl printk ++ mov r3, #1 ++ str r3, [r4, #-2708] ++ b .L824 ++.L829: ++ add r1, r1, #1 ++ ldr r6, [sp, #20] ++ uxth r1, r1 ++ cmp r1, r6 ++ bhi .L825 ++ ldrh r6, [r3, #4] ++ cmp r6, #0 ++ beq .L827 ++ sub r3, r3, ip ++ asr r3, r3, #1 ++ mul r3, lr, r3 ++ uxth r6, r3 ++ lsl r3, r6, #1 ++ ldrh r3, [r9, r3] ++ cmp r5, r3 ++ bcs .L828 ++ cmp r7, r3 ++ movhi r7, r3 ++ movhi r2, r6 ++.L827: ++ mla r3, fp, r0, ip ++ b .L826 ++.L843: ++ .align 2 ++.L842: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR0+2332 ++ .word .LANCHOR2-3520 ++ .word -1431655765 ++ .word .LC78 ++ .fnend ++ .size GetSwlReplaceBlock, .-GetSwlReplaceBlock ++ .align 2 ++ .global free_data_superblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type free_data_superblock, %function ++free_data_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L847 ++ ldr r2, .L850 ++ lsl r3, r0, #1 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r1, #0 ++ ldr r2, [r2, #-3540] ++ strh r1, [r2, r3] @ movhi ++ bl INSERT_FREE_LIST ++ mov r0, #0 ++ pop {r4, pc} ++.L847: ++ mov r0, #0 ++ bx lr ++.L851: ++ .align 2 ++.L850: ++ .word .LANCHOR2 ++ .fnend ++ .size free_data_superblock, .-free_data_superblock ++ .align 2 ++ .global FtlGcBufInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcBufInit, %function ++FtlGcBufInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L858 ++ mov r3, #0 ++ ldr r2, .L858+4 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r4, #12 ++ mov r5, #1 ++ add r6, ip, #76 ++ mov r7, #36 ++ str r3, [r2, #-2704] ++.L853: ++ ldrh r1, [ip] ++ uxth r0, r3 ++ add lr, r3, #1 ++ cmp r0, r1 ++ bcc .L854 ++ ldr r4, .L858+8 ++ mov ip, #12 ++ mov lr, #0 ++.L855: ++ ldr r3, [r2, #-2684] ++ cmp r1, r3 ++ bcc .L856 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L854: ++ uxth r3, r3 ++ ldr r8, [r2, #-2700] ++ mul r0, r4, r3 ++ add r1, r8, r0 ++ str r5, [r1, #8] ++ ldrh r1, [r6] ++ mul r1, r3, r1 ++ add r9, r1, #3 ++ cmp r1, #0 ++ movlt r1, r9 ++ ldr r9, [r2, #-2696] ++ bic r1, r1, #3 ++ add r1, r9, r1 ++ str r1, [r8, r0] ++ ldr r1, .L858+12 ++ ldr r9, [r2, #-2700] ++ ldrh r1, [r1] ++ add r8, r9, r0 ++ mul r1, r3, r1 ++ add r10, r1, #3 ++ cmp r1, #0 ++ movlt r1, r10 ++ ldr r10, [r2, #-2692] ++ bic r1, r1, #3 ++ add r1, r10, r1 ++ str r1, [r8, #4] ++ ldr r1, [r2, #-2688] ++ mla r3, r7, r3, r1 ++ ldr r1, [r9, r0] ++ str r1, [r3, #8] ++ ldr r1, [r8, #4] ++ str r1, [r3, #12] ++ mov r3, lr ++ b .L853 ++.L856: ++ mul r5, ip, r1 ++ ldr r6, [r2, #-2700] ++ add r3, r6, r5 ++ str lr, [r3, #8] ++ ldrh r3, [r4] ++ mul r3, r1, r3 ++ add r0, r3, #3 ++ cmp r3, #0 ++ movlt r3, r0 ++ ldr r0, [r2, #-2696] ++ bic r3, r3, #3 ++ add r3, r0, r3 ++ str r3, [r6, r5] ++ ldr r3, .L858+12 ++ ldr r0, [r2, #-2700] ++ ldrh r3, [r3] ++ add r0, r0, r5 ++ mul r3, r1, r3 ++ add r1, r1, #1 ++ uxth r1, r1 ++ add r5, r3, #3 ++ cmp r3, #0 ++ movlt r3, r5 ++ ldr r5, [r2, #-2692] ++ bic r3, r3, #3 ++ add r3, r5, r3 ++ str r3, [r0, #4] ++ b .L855 ++.L859: ++ .align 2 ++.L858: ++ .word .LANCHOR0+2324 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2400 ++ .word .LANCHOR0+2402 ++ .fnend ++ .size FtlGcBufInit, .-FtlGcBufInit ++ .align 2 ++ .global FtlGcBufFree ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcBufFree, %function ++FtlGcBufFree: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L868 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov lr, #0 ++ mov r5, #36 ++ mov r7, #12 ++ mov r8, lr ++ ldr r6, [r3, #-2684] ++ ldr r4, [r3, #-2700] ++.L861: ++ uxth r3, lr ++ cmp r1, r3 ++ popls {r4, r5, r6, r7, r8, r9, r10, pc} ++ mla ip, r5, r3, r0 ++ mov r2, #0 ++.L862: ++ uxth r3, r2 ++ cmp r6, r3 ++ bls .L863 ++ mul r3, r7, r3 ++ add r2, r2, #1 ++ ldr r10, [r4, r3] ++ add r9, r4, r3 ++ ldr r3, [ip, #8] ++ cmp r10, r3 ++ bne .L862 ++ str r8, [r9, #8] ++.L863: ++ add lr, lr, #1 ++ b .L861 ++.L869: ++ .align 2 ++.L868: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcBufFree, .-FtlGcBufFree ++ .align 2 ++ .global FtlGcBufAlloc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcBufAlloc, %function ++FtlGcBufAlloc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L878 ++ mov ip, #0 ++ push {r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ mov r6, #12 ++ mov r7, #1 ++ mov r8, #36 ++ ldr r4, [r3, #-2684] ++ ldr r5, [r3, #-2700] ++.L871: ++ uxth r2, ip ++ cmp r1, r2 ++ bhi .L875 ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L875: ++ mov lr, #0 ++.L872: ++ uxth r3, lr ++ cmp r4, r3 ++ bls .L873 ++ mla r3, r6, r3, r5 ++ add lr, lr, #1 ++ ldr r9, [r3, #8] ++ cmp r9, #0 ++ bne .L872 ++ mla r2, r8, r2, r0 ++ ldr lr, [r3] ++ str r7, [r3, #8] ++ str lr, [r2, #8] ++ ldr r3, [r3, #4] ++ str r3, [r2, #12] ++.L873: ++ add ip, ip, #1 ++ b .L871 ++.L879: ++ .align 2 ++.L878: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcBufAlloc, .-FtlGcBufAlloc ++ .align 2 ++ .global IsBlkInGcList ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type IsBlkInGcList, %function ++IsBlkInGcList: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L885 ++ ldr r3, [r2, #-2680] ++ sub r2, r2, #2672 ++ ldrh r2, [r2, #-4] ++ add r2, r3, r2, lsl #1 ++.L881: ++ cmp r3, r2 ++ bne .L883 ++ mov r0, #0 ++ bx lr ++.L883: ++ ldrh r1, [r3], #2 ++ cmp r1, r0 ++ bne .L881 ++ mov r0, #1 ++ bx lr ++.L886: ++ .align 2 ++.L885: ++ .word .LANCHOR2 ++ .fnend ++ .size IsBlkInGcList, .-IsBlkInGcList ++ .align 2 ++ .global FtlGcUpdatePage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcUpdatePage, %function ++FtlGcUpdatePage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, r0 ++ ubfx r0, r0, #10, #16 ++ mov r5, r1 ++ mov r6, r2 ++ bl P2V_block_in_plane ++ ldr r2, .L892 ++ mov r3, #0 ++ sub ip, r2, #2672 ++ ldr lr, [r2, #-2680] ++ ldrh r7, [ip, #-4] ++ sub r1, lr, #2 ++.L888: ++ uxth r8, r3 ++ cmp r8, r7 ++ bcc .L890 ++ moveq r3, r8 ++ lsleq r3, r3, #1 ++ strheq r0, [lr, r3] @ movhi ++ ldrheq r3, [ip, #-4] ++ addeq r3, r3, #1 ++ strheq r3, [ip, #-4] @ movhi ++ b .L889 ++.L890: ++ ldrh r8, [r1, #2]! ++ add r3, r3, #1 ++ cmp r8, r0 ++ bne .L888 ++.L889: ++ ldr r0, .L892+4 ++ mov r3, #12 ++ ldr r2, [r2, #-2672] ++ ldrh r1, [r0, #-12] ++ mul r3, r3, r1 ++ add r1, r2, r3 ++ stmib r1, {r5, r6} ++ str r4, [r2, r3] ++ ldrh r3, [r0, #-12] ++ add r3, r3, #1 ++ strh r3, [r0, #-12] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L893: ++ .align 2 ++.L892: ++ .word .LANCHOR2 ++ .word .LANCHOR2-2656 ++ .fnend ++ .size FtlGcUpdatePage, .-FtlGcUpdatePage ++ .align 2 ++ .global FtlGcRefreshOpenBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcRefreshOpenBlock, %function ++FtlGcRefreshOpenBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, .L902 ++ ldrh r3, [r4, #-10] ++ cmp r3, r0 ++ beq .L896 ++ ldrh r3, [r4, #-8] ++ cmp r3, r0 ++ beq .L896 ++ ldrh r3, [r4, #-6] ++ cmp r3, r0 ++ beq .L896 ++ ldrh r3, [r4, #-4] ++ cmp r3, r0 ++ beq .L896 ++ mov r5, r0 ++ mov r1, r0 ++ ldr r0, .L902+4 ++ bl printk ++ ldrh r2, [r4, #-10] ++ movw r3, #65535 ++ cmp r2, r3 ++ strheq r5, [r4, #-10] @ movhi ++ beq .L896 ++ ldrh r2, [r4, #-8] ++ cmp r2, r3 ++ strheq r5, [r4, #-8] @ movhi ++ beq .L896 ++ ldrh r2, [r4, #-6] ++ cmp r2, r3 ++ strheq r5, [r4, #-6] @ movhi ++ beq .L896 ++ ldrh r2, [r4, #-4] ++ cmp r2, r3 ++ strheq r5, [r4, #-4] @ movhi ++.L896: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L903: ++ .align 2 ++.L902: ++ .word .LANCHOR2-2656 ++ .word .LC79 ++ .fnend ++ .size FtlGcRefreshOpenBlock, .-FtlGcRefreshOpenBlock ++ .align 2 ++ .global FtlGcRefreshBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcRefreshBlock, %function ++FtlGcRefreshBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, .L915 ++ ldrh r3, [r4, #-10] ++ cmp r3, r0 ++ beq .L912 ++ ldrh r3, [r4, #-8] ++ cmp r3, r0 ++ beq .L912 ++ ldrh r3, [r4, #-6] ++ cmp r3, r0 ++ beq .L912 ++ ldrh r3, [r4, #-4] ++ cmp r3, r0 ++ beq .L912 ++ mov r5, r0 ++ mov r1, r0 ++ ldr r0, .L915+4 ++ bl printk ++ ldrh r2, [r4, #-10] ++ movw r3, #65535 ++ cmp r2, r3 ++ strheq r5, [r4, #-10] @ movhi ++ beq .L912 ++ ldrh r2, [r4, #-8] ++ cmp r2, r3 ++ strheq r5, [r4, #-8] @ movhi ++ beq .L912 ++ ldrh r2, [r4, #-6] ++ cmp r2, r3 ++ strheq r5, [r4, #-6] @ movhi ++ beq .L912 ++ ldrh r2, [r4, #-4] ++ cmp r2, r3 ++ bne .L913 ++ strh r5, [r4, #-4] @ movhi ++.L912: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L913: ++ mvn r0, #0 ++ pop {r4, r5, r6, pc} ++.L916: ++ .align 2 ++.L915: ++ .word .LANCHOR2-2656 ++ .word .LC79 ++ .fnend ++ .size FtlGcRefreshBlock, .-FtlGcRefreshBlock ++ .align 2 ++ .global FtlGcMarkBadPhyBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcMarkBadPhyBlk, %function ++FtlGcMarkBadPhyBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, r0 ++ ldr r6, .L926 ++ bl P2V_block_in_plane ++ sub r7, r6, #2656 ++ mov r4, r0 ++ mov r2, r5 ++ ldrh r1, [r7, #-2] ++ ldr r0, .L926+4 ++ bl printk ++ mov r0, r4 ++ bl FtlGcRefreshBlock ++ ldr r3, .L926+8 ++ ldr r3, [r3, #2248] ++ cmp r3, #0 ++ mov r3, r7 ++ beq .L918 ++ ldr r1, [r6, #-3604] ++ lsl r4, r4, #1 ++ ldrh r2, [r1, r4] ++ cmp r2, #39 ++ subhi r2, r2, #40 ++ strhhi r2, [r1, r4] @ movhi ++.L918: ++ ldrh r2, [r3, #-2] ++ mov r1, #0 ++.L919: ++ uxth r0, r1 ++ cmp r2, r0 ++ bhi .L921 ++ cmp r2, #15 ++ addls r1, r2, #1 ++ lslls r2, r2, #1 ++ strhls r1, [r3, #-2] @ movhi ++ strhls r5, [r3, r2] @ movhi ++ b .L920 ++.L921: ++ add r1, r1, #1 ++ add r0, r3, r1, lsl #1 ++ ldrh r0, [r0, #-2] ++ cmp r0, r5 ++ bne .L919 ++.L920: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L927: ++ .align 2 ++.L926: ++ .word .LANCHOR2 ++ .word .LC80 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGcMarkBadPhyBlk, .-FtlGcMarkBadPhyBlk ++ .align 2 ++ .global FtlGcReFreshBadBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcReFreshBadBlk, %function ++FtlGcReFreshBadBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L938 ++ ldrh r2, [r3, #-2] ++ cmp r2, #0 ++ beq .L935 ++ ldrh r0, [r3, #-10] ++ movw r1, #65535 ++ cmp r0, r1 ++ bne .L935 ++ push {r4, lr} ++ .save {r4, lr} ++ add r4, r3, #48 ++ ldrh r1, [r4, #-14] ++ cmp r1, r2 ++ movcs r2, #0 ++ strhcs r2, [r4, #-14] @ movhi ++ ldrh r2, [r4, #-14] ++ lsl r2, r2, #1 ++ ldrh r0, [r3, r2] ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ ldrh r3, [r4, #-14] ++ mov r0, #0 ++ add r3, r3, #1 ++ strh r3, [r4, #-14] @ movhi ++ pop {r4, pc} ++.L935: ++ mov r0, #0 ++ bx lr ++.L939: ++ .align 2 ++.L938: ++ .word .LANCHOR2-2656 ++ .fnend ++ .size FtlGcReFreshBadBlk, .-FtlGcReFreshBadBlk ++ .align 2 ++ .global ftl_memset ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_memset, %function ++ftl_memset: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b memset ++ .fnend ++ .size ftl_memset, .-ftl_memset ++ .align 2 ++ .global BuildFlashLsbPageTable ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type BuildFlashLsbPageTable, %function ++BuildFlashLsbPageTable: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r0, #0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r1 ++ bne .L942 ++ ldr r3, .L998 ++.L943: ++ lsl r2, r0, #1 ++ strh r0, [r2, r3] @ movhi ++ add r0, r0, #1 ++ cmp r0, #512 ++ bne .L943 ++.L949: ++ ldr r5, .L998+4 ++ mov r1, #255 ++ mov r2, #2048 ++ uxth r4, r4 ++ sub r0, r5, #12 ++ sub r5, r5, #12 ++ bl ftl_memset ++ ldr r1, .L998 ++ mov r3, #0 ++.L944: ++ uxth r2, r3 ++ cmp r4, r2 ++ bhi .L977 ++ pop {r4, r5, r6, pc} ++.L942: ++ cmp r0, #1 ++ bne .L945 ++ ldr r1, .L998 ++ mov r3, #0 ++.L948: ++ cmp r3, #3 ++ uxth r2, r3 ++ bls .L946 ++ tst r2, #1 ++ movne r0, #3 ++ moveq r0, #2 ++ rsb r2, r0, r2, lsl #1 ++ uxth r2, r2 ++.L946: ++ lsl r0, r3, #1 ++ add r3, r3, #1 ++ cmp r3, #512 ++ strh r2, [r0, r1] @ movhi ++ bne .L948 ++ b .L949 ++.L945: ++ cmp r0, #2 ++ bne .L950 ++ ldr r1, .L998 ++ mov r2, #0 ++.L952: ++ uxth r3, r2 ++ cmp r2, #1 ++ lsl r0, r2, #1 ++ add r2, r2, #1 ++ lslhi r3, r3, #1 ++ subhi r3, r3, #1 ++ uxthhi r3, r3 ++ cmp r2, #512 ++ strh r3, [r0, r1] @ movhi ++ bne .L952 ++ b .L949 ++.L950: ++ cmp r0, #3 ++ bne .L953 ++ ldr r1, .L998 ++ mov r3, #0 ++.L956: ++ cmp r3, #5 ++ uxth r2, r3 ++ bls .L954 ++ tst r2, #1 ++ movne r0, #5 ++ moveq r0, #4 ++ rsb r2, r0, r2, lsl #1 ++ uxth r2, r2 ++.L954: ++ lsl r0, r3, #1 ++ add r3, r3, #1 ++ cmp r3, #512 ++ strh r2, [r0, r1] @ movhi ++ bne .L956 ++ b .L949 ++.L953: ++ cmp r0, #4 ++ mov r3, #0 ++ bne .L957 ++ ldr r2, .L998+8 ++ strh r3, [r2, #156] @ movhi ++ mov r3, #1 ++ strh r3, [r2, #158] @ movhi ++ mov r3, #2 ++ strh r3, [r2, #160] @ movhi ++ mov r3, #3 ++ strh r3, [r2, #162] @ movhi ++ mov r3, #5 ++ strh r3, [r2, #166] @ movhi ++ mov r3, #7 ++ strh r3, [r2, #168] @ movhi ++ mov r3, #8 ++ strh r0, [r2, #164] @ movhi ++ strh r3, [r2, #170]! @ movhi ++.L959: ++ tst r3, #1 ++ movne r1, #7 ++ moveq r1, #6 ++ rsb r1, r1, r3, lsl #1 ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r1, [r2, #2]! @ movhi ++ cmp r3, #512 ++ bne .L959 ++ b .L949 ++.L957: ++ cmp r0, #5 ++ bne .L960 ++ ldr r2, .L998+8 ++ add r1, r2, #156 ++.L961: ++ lsl r0, r3, #1 ++ strh r3, [r0, r1] @ movhi ++ add r3, r3, #1 ++ cmp r3, #16 ++ bne .L961 ++ add r2, r2, #186 ++.L962: ++ strh r3, [r2, #2]! @ movhi ++ add r3, r3, #2 ++ uxth r3, r3 ++ cmp r3, #1008 ++ bne .L962 ++ b .L949 ++.L960: ++ cmp r0, #6 ++ bne .L963 ++ ldr r0, .L998 ++ mov r1, r3 ++.L966: ++ cmp r1, #5 ++ uxth r2, r1 ++ bls .L964 ++ tst r2, #1 ++ movne r2, #12 ++ moveq r2, #10 ++ sub r2, r3, r2 ++ uxth r2, r2 ++.L964: ++ lsl ip, r1, #1 ++ add r1, r1, #1 ++ cmp r1, #512 ++ add r3, r3, #3 ++ strh r2, [ip, r0] @ movhi ++ uxth r3, r3 ++ bne .L966 ++ b .L949 ++.L963: ++ cmp r0, #9 ++ bne .L967 ++ ldr r2, .L998+8 ++ movw r1, #1021 ++ strh r3, [r2, #156] @ movhi ++ mov r3, #1 ++ strh r3, [r2, #158] @ movhi ++ mov r3, r2 ++ mov r2, #2 ++ strh r2, [r3, #160]! @ movhi ++ mov r2, #3 ++.L968: ++ strh r2, [r3, #2]! @ movhi ++ add r2, r2, #2 ++ uxth r2, r2 ++ cmp r2, r1 ++ bne .L968 ++ b .L949 ++.L967: ++ cmp r0, #10 ++ bne .L969 ++ ldr r2, .L998+8 ++ add r1, r2, #156 ++.L970: ++ lsl r0, r3, #1 ++ strh r3, [r0, r1] @ movhi ++ add r3, r3, #1 ++ cmp r3, #63 ++ bne .L970 ++ add r2, r2, #280 ++ movw r1, #961 ++.L971: ++ strh r3, [r2, #2]! @ movhi ++ add r3, r3, #2 ++ uxth r3, r3 ++ cmp r3, r1 ++ bne .L971 ++ b .L949 ++.L969: ++ cmp r0, #11 ++ bne .L972 ++ ldr r2, .L998+8 ++ mov r3, #0 ++ add r1, r2, #156 ++.L973: ++ lsl r0, r3, #1 ++ strh r3, [r0, r1] @ movhi ++ add r3, r3, #1 ++ cmp r3, #8 ++ bne .L973 ++ add r2, r2, #170 ++.L975: ++ tst r3, #1 ++ movne r1, #7 ++ moveq r1, #6 ++ rsb r1, r1, r3, lsl #1 ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r1, [r2, #2]! @ movhi ++ cmp r3, #512 ++ bne .L975 ++ b .L949 ++.L972: ++ cmp r0, #12 ++ bne .L949 ++ ldr r3, .L998+8 ++ mov r2, #0 ++ strh r2, [r3, #156] @ movhi ++ mov r2, #1 ++ strh r2, [r3, #158] @ movhi ++ mov r2, #2 ++ strh r2, [r3, #160] @ movhi ++ mov r2, #3 ++ strh r2, [r3, #162]! @ movhi ++ mov r2, #4 ++.L976: ++ sub r1, r2, #1 ++ add r1, r1, r2, lsr #1 ++ add r2, r2, #1 ++ uxth r2, r2 ++ strh r1, [r3, #2]! @ movhi ++ cmp r2, #512 ++ bne .L976 ++ b .L949 ++.L977: ++ lsl r2, r3, #1 ++ add r3, r3, #1 ++ ldrh r2, [r2, r1] ++ lsl r0, r2, #1 ++ strh r2, [r5, r0] @ movhi ++ b .L944 ++.L999: ++ .align 2 ++.L998: ++ .word .LANCHOR0+156 ++ .word .LANCHOR2-2608 ++ .word .LANCHOR0 ++ .fnend ++ .size BuildFlashLsbPageTable, .-BuildFlashLsbPageTable ++ .align 2 ++ .global FlashDieInfoInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashDieInfoInit, %function ++FlashDieInfoInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1015 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r6, #0 ++ ldr r4, .L1015+4 ++ ldr r10, .L1015+8 ++ ldrh r0, [r3, #10] ++ strb r6, [r4, #2234] ++ strb r6, [r10, #-572] ++ bl FlashBlockAlignInit ++ mov r2, #8 ++ mov r1, r6 ++ ldr r0, .L1015+12 ++ bl ftl_memset ++ mov r2, #32 ++ mov r1, r6 ++ ldr r0, .L1015+16 ++ bl ftl_memset ++ mov r2, #128 ++ mov r1, r6 ++ ldr r0, .L1015+20 ++ bl ftl_memset ++ ldr r9, .L1015+24 ++ ldr r5, [r4, #48] ++ mov r8, r9 ++ add r7, r5, #1 ++.L1002: ++ ldrb r2, [r5] @ zero_extendqisi2 ++ add r1, r9, r6, lsl #3 ++ mov r0, r7 ++ bl FlashMemCmp8 ++ cmp r0, #0 ++ bne .L1001 ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ add r2, r4, r3, lsl #2 ++ str r0, [r2, #1180] ++ add r2, r3, #1 ++ add r3, r4, r3 ++ strb r2, [r4, #2234] ++ strb r6, [r3, #2236] ++.L1001: ++ add r6, r6, #1 ++ cmp r6, #4 ++ bne .L1002 ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ strb r3, [r10, #-572] ++ ldrb r3, [r5, #8] @ zero_extendqisi2 ++ cmp r3, #2 ++ beq .L1003 ++.L1007: ++ ldrh r2, [r5, #14] ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ smulbb r3, r3, r2 ++ ldrb r2, [r5, #13] @ zero_extendqisi2 ++ smulbb r3, r3, r2 ++ ldr r2, .L1015+28 ++ strh r3, [r2, #-2] @ movhi ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1003: ++ ldr r9, [r4, #40] ++ mov r6, #0 ++.L1006: ++ ldrb r2, [r5] @ zero_extendqisi2 ++ add r1, r8, r6, lsl #3 ++ mov r0, r7 ++ bl FlashMemCmp8 ++ cmp r0, #0 ++ bne .L1004 ++ ldrh r3, [r5, #14] ++ ldrb r2, [r4, #2234] @ zero_extendqisi2 ++ and r1, r3, #65280 ++ ldrb r3, [r5, #13] @ zero_extendqisi2 ++ mul r3, r9, r3 ++ mul r3, r3, r1 ++ add r1, r4, r2, lsl #2 ++ str r3, [r1, #1180] ++ ldrb r0, [r5, #23] @ zero_extendqisi2 ++ cmp r0, #0 ++ lslne r3, r3, #1 ++ strne r3, [r1, #1180] ++ add r3, r2, #1 ++ add r2, r4, r2 ++ strb r3, [r4, #2234] ++ strb r6, [r2, #2236] ++.L1004: ++ add r6, r6, #1 ++ cmp r6, #4 ++ bne .L1006 ++ b .L1007 ++.L1016: ++ .align 2 ++.L1015: ++ .word .LANCHOR1+468 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2236 ++ .word .LANCHOR0+1180 ++ .word .LANCHOR0+2104 ++ .word .LANCHOR0+2072 ++ .word .LANCHOR2-568 ++ .fnend ++ .size FlashDieInfoInit, .-FlashDieInfoInit ++ .align 2 ++ .global ftl_read_flash_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_read_flash_info, %function ++ftl_read_flash_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r2, #11 ++ mov r1, #0 ++ mov r4, r0 ++ bl ftl_memset ++ ldr r2, .L1021 ++ mov ip, #1 ++ ldr r0, .L1021+4 ++ ldr r3, [r2, #48] ++ ldr r1, [r2, #40] ++ ldrb r3, [r3, #9] @ zero_extendqisi2 ++ smulbb r3, r3, r1 ++ strh r3, [r4, #4] @ unaligned ++ ldrb r3, [r2, #2316] @ zero_extendqisi2 ++ strb r3, [r4, #7] ++ ldr r3, [r2, #2432] ++ str r3, [r4] @ unaligned ++ ldr r3, [r2, #48] ++ ldrb r1, [r3, #9] @ zero_extendqisi2 ++ strb r1, [r4, #6] ++ mov r1, #32 ++ strb r1, [r4, #8] ++ ldrb r1, [r2, #2234] @ zero_extendqisi2 ++ ldrb r3, [r3, #7] @ zero_extendqisi2 ++ strb r3, [r4, #9] ++ mov r3, #0 ++ strb r3, [r4, #10] ++.L1018: ++ uxtb r2, r3 ++ cmp r1, r2 ++ bhi .L1019 ++ pop {r4, pc} ++.L1019: ++ ldrb lr, [r3, r0] @ zero_extendqisi2 ++ add r3, r3, #1 ++ ldrb r2, [r4, #10] @ zero_extendqisi2 ++ orr r2, r2, ip, lsl lr ++ strb r2, [r4, #10] ++ b .L1018 ++.L1022: ++ .align 2 ++.L1021: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2236 ++ .fnend ++ .size ftl_read_flash_info, .-ftl_read_flash_info ++ .align 2 ++ .global FtlMemInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMemInit, %function ++FtlMemInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r6, #0 ++ ldr r4, .L1126 ++ mvn r2, #0 ++ mov r1, #32 ++ mov r0, #1024 ++ ldr r5, .L1126+4 ++ mov r8, #12 ++ sub r3, r4, #568 ++ str r6, [r4, #-564] ++ strh r6, [r3] @ movhi ++ movw r3, #65535 ++ str r3, [r4, #-556] ++ sub r3, r4, #2656 ++ strh r2, [r3, #-10] @ movhi ++ movw r9, #2324 ++ strh r2, [r3, #-8] @ movhi ++ mov r7, #36 ++ strh r2, [r3, #-6] @ movhi ++ strh r2, [r3, #-4] @ movhi ++ sub r2, r4, #2720 ++ strh r6, [r3, #-2] @ movhi ++ sub r3, r4, #544 ++ strh r1, [r2] @ movhi ++ sub r2, r4, #2704 ++ strh r6, [r3] @ movhi ++ mov r1, #128 ++ sub r3, r4, #2608 ++ strh r1, [r2, #-14] @ movhi ++ strh r6, [r2, #-8] @ movhi ++ str r6, [r4, #-2724] ++ str r6, [r4, #-3332] ++ str r6, [r4, #-3328] ++ str r6, [r4, #-3344] ++ str r6, [r4, #-3356] ++ str r6, [r4, #-3360] ++ str r6, [r4, #-3352] ++ str r6, [r4, #-3348] ++ str r6, [r4, #-3364] ++ str r6, [r4, #-3324] ++ str r6, [r4, #-3320] ++ str r6, [r4, #-3600] ++ str r6, [r4, #-3312] ++ str r6, [r4, #-3308] ++ str r6, [r4, #-560] ++ str r6, [r4, #-2708] ++ str r6, [r4, #-552] ++ str r6, [r4, #-2716] ++ str r6, [r4, #-548] ++ strh r6, [r3, #-14] @ movhi ++ movw r3, #2396 ++ ldrh r1, [r5, r3] ++ bl __aeabi_idiv ++ movw r3, #2324 ++ str r6, [r5, #2444] ++ ldrh r3, [r5, r3] ++ movw r6, #2394 ++ str r0, [r4, #-540] ++ lsl r3, r3, #2 ++ cmp r0, r3 ++ ldrh r0, [r5, r6] ++ strhi r3, [r4, #-540] ++ lsl r0, r0, #1 ++ bl ftl_malloc ++ str r0, [r4, #-2680] ++ ldrh r0, [r5, r6] ++ mul r0, r8, r0 ++ bl ftl_malloc ++ ldrh r6, [r5, r9] ++ str r0, [r4, #-2672] ++ mul r6, r7, r6 ++ lsl r10, r6, #3 ++ mov r0, r10 ++ bl ftl_malloc ++ str r0, [r4, #-536] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #-532] ++ mov r0, r10 ++ bl ftl_malloc ++ str r0, [r4, #-528] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #-3608] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #-2688] ++ movw r10, #2402 ++ ldr r0, [r4, #-540] ++ ldr r6, .L1126+8 ++ mul r0, r7, r0 ++ bl ftl_malloc ++ ldrh r3, [r5, r9] ++ ldrh r7, [r6] ++ str r0, [r5, #2448] ++ lsl r3, r3, #1 ++ mov r0, r7 ++ add r3, r3, #1 ++ str r3, [r4, #-2684] ++ bl ftl_malloc ++ str r0, [r4, #-524] ++ mov r0, r7 ++ bl ftl_malloc ++ str r0, [r4, #-520] ++ mov r0, r7 ++ bl ftl_malloc ++ str r0, [r4, #-516] ++ ldr r0, [r4, #-2684] ++ mul r0, r0, r7 ++ bl ftl_malloc ++ str r0, [r4, #-2696] ++ ldr r0, [r4, #-540] ++ mul r0, r0, r7 ++ bl ftl_malloc ++ str r0, [r4, #-512] ++ mov r0, r7 ++ bl ftl_malloc ++ str r0, [r4, #-508] ++ mov r0, r7 ++ bl ftl_malloc ++ str r0, [r4, #-504] ++ ldr r0, [r4, #-2684] ++ mul r0, r8, r0 ++ bl ftl_malloc ++ ldrh r3, [r5, r10] ++ ldrh r7, [r5, r9] ++ movw r9, #2334 ++ str r0, [r4, #-2700] ++ mul r7, r7, r3 ++ mov r0, r7 ++ bl ftl_malloc ++ str r0, [r4, #-500] ++ lsl r0, r7, #3 ++ ldr r7, .L1126+12 ++ bl ftl_malloc ++ ldrh r3, [r5, r10] ++ str r0, [r4, #-496] ++ ldr r0, [r4, #-2684] ++ mul r0, r0, r3 ++ bl ftl_malloc ++ ldrh r3, [r5, r10] ++ str r0, [r4, #-2692] ++ ldr r0, [r4, #-540] ++ mul r0, r0, r3 ++ bl ftl_malloc ++ str r0, [r4, #-492] ++ ldrh r0, [r5, r9] ++ lsl r0, r0, #1 ++ uxth r0, r0 ++ strh r0, [r7] @ movhi ++ bl ftl_malloc ++ str r0, [r4, #-484] ++ ldrh r0, [r7] ++ ldr r3, .L1126+16 ++ add r0, r0, #544 ++ add r0, r0, #3 ++ lsr r0, r0, #9 ++ strh r0, [r7] @ movhi ++ and r0, r3, r0, lsl #9 ++ bl ftl_malloc ++ ldrh r10, [r5, r9] ++ str r0, [r4, #-480] ++ add r0, r0, #32 ++ str r0, [r4, #-3604] ++ lsl r10, r10, #1 ++ mov r0, r10 ++ bl ftl_malloc ++ str r0, [r4, #-476] ++ mov r0, r10 ++ bl ftl_malloc ++ ldr r10, [r5, #2420] ++ str r0, [r4, #-3540] ++ lsl r10, r10, #1 ++ mov r0, r10 ++ bl ftl_malloc ++ str r0, [r4, #-472] ++ mov r0, r10 ++ bl ftl_malloc ++ str r0, [r4, #-468] ++ movw r10, #2412 ++ ldrh r0, [r5, r9] ++ lsr r0, r0, #3 ++ add r0, r0, #4 ++ bl ftl_malloc ++ str r0, [r5, #32] ++ ldrh r0, [r5, r10] ++ lsl r0, r0, #1 ++ bl ftl_malloc ++ str r0, [r5, #2440] ++ ldrh r0, [r5, r10] ++ lsl r0, r0, #1 ++ bl ftl_malloc ++ str r0, [r4, #-464] ++ ldrh r0, [r5, r10] ++ movw r10, #2414 ++ lsl r0, r0, #2 ++ bl ftl_malloc ++ str r0, [r4, #-460] ++ ldrh r0, [r5, r10] ++ lsl r0, r0, #2 ++ bl ftl_malloc ++ ldrh r2, [r5, r10] ++ mov r1, #0 ++ str r0, [r4, #-456] ++ lsl r2, r2, #2 ++ bl ftl_memset ++ movw r3, #2428 ++ ldrh r10, [r5, r3] ++ lsl r10, r10, #2 ++ mov r0, r10 ++ bl ftl_malloc ++ str r0, [r4, #-452] ++ mov r0, r10 ++ bl ftl_malloc ++ str r0, [r4, #-448] ++ movw r10, #2430 ++ ldr r0, [r5, #2420] ++ lsl r0, r0, #2 ++ bl ftl_malloc ++ str r0, [r4, #-444] ++ ldrh r0, [r5, r10] ++ mul r0, r8, r0 ++ mov r8, r6 ++ add r6, r6, #56 ++ bl ftl_malloc ++ ldrh r3, [r5, r10] ++ str r0, [r4, #-3376] ++ ldrh r0, [r8], #84 ++ mul r0, r0, r3 ++ bl ftl_malloc ++ ldrh r3, [r5, r9] ++ movw r9, #2346 ++ str r0, [r4, #-440] ++ mov r0, #6 ++ mul r0, r0, r3 ++ bl ftl_malloc ++ movw r3, #2388 ++ str r0, [r4, #-3548] ++ ldrh r0, [r5, r3] ++ ldrh r3, [r5, r9] ++ add r0, r0, #31 ++ asr r0, r0, #5 ++ strh r0, [r7, #52]! @ movhi ++ mul r0, r0, r3 ++ lsl r0, r0, #2 ++ bl ftl_malloc ++ ldrh r2, [r7] ++ mov r3, #1 ++ ldrh ip, [r5, r9] ++ str r0, [r5, #2484] ++ lsl r2, r2, #2 ++ mov r1, r2 ++.L1025: ++ cmp r3, ip ++ bcc .L1026 ++ add r6, r6, r3, lsl #2 ++ ldr r3, .L1126+20 ++ mov r2, #0 ++ add r6, r6, #24 ++.L1027: ++ cmp r3, r6 ++ bne .L1028 ++ ldr r3, [r4, #-472] ++ cmp r3, #0 ++ bne .L1029 ++.L1031: ++ ldr r1, .L1126+24 ++ ldr r0, .L1126+28 ++ bl printk ++ mvn r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1026: ++ ldr r0, [r5, #2484] ++ add r3, r3, #1 ++ add r0, r0, r1 ++ add r1, r1, r2 ++ str r0, [r8, #4]! ++ b .L1025 ++.L1028: ++ str r2, [r6, #4]! ++ b .L1027 ++.L1029: ++ ldr r3, [r4, #-468] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-452] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-444] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-3376] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-440] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-3548] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r5, #2484] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-3540] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-2680] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-2672] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-536] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-528] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-3608] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-2688] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-532] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-524] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-520] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-516] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-2696] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-508] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-504] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-2700] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-500] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-496] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-2692] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-3604] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, [r4, #-484] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, .L1126+4 ++ ldr r3, [r3, #2440] ++ cmp r3, #0 ++ beq .L1031 ++ ldr r3, .L1126 ++ ldr r2, [r3, #-464] ++ cmp r2, #0 ++ beq .L1031 ++ ldr r2, [r3, #-460] ++ cmp r2, #0 ++ beq .L1031 ++ ldr r3, [r3, #-456] ++ cmp r3, #0 ++ beq .L1031 ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1127: ++ .align 2 ++.L1126: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR0+2400 ++ .word .LANCHOR2-488 ++ .word 33553920 ++ .word .LANCHOR0+2512 ++ .word .LANCHOR3 ++ .word .LC81 ++ .fnend ++ .size FtlMemInit, .-FtlMemInit ++ .align 2 ++ .global FtlBbt2Bitmap ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbt2Bitmap, %function ++FtlBbt2Bitmap: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1134 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r1 ++ mov r4, r0 ++ mov r1, #0 ++ mov r0, r5 ++ movw r6, #65535 ++ ldrh r2, [r3] ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldr ip, .L1134+4 ++ add r0, r4, #1020 ++ sub r2, r4, #2 ++ add r0, r0, #2 ++ mov r4, #1 ++.L1130: ++ ldrh r3, [r2, #2]! ++ cmp r3, r6 ++ popeq {r4, r5, r6, pc} ++ lsr lr, r3, #5 ++ and r3, r3, #31 ++ cmp r2, r0 ++ ldr r1, [r5, lr, lsl #2] ++ orr r3, r1, r4, lsl r3 ++ str r3, [r5, lr, lsl #2] ++ ldrh r3, [ip, #6] ++ add r3, r3, #1 ++ strh r3, [ip, #6] @ movhi ++ bne .L1130 ++ pop {r4, r5, r6, pc} ++.L1135: ++ .align 2 ++.L1134: ++ .word .LANCHOR2-436 ++ .word .LANCHOR0+2456 ++ .fnend ++ .size FtlBbt2Bitmap, .-FtlBbt2Bitmap ++ .align 2 ++ .global FtlBbtMemInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbtMemInit, %function ++FtlBbtMemInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L1137 ++ movw r3, #2456 ++ mvn r1, #0 ++ add r0, r2, r3 ++ strh r1, [r2, r3] @ movhi ++ mov r3, #0 ++ mov r2, #16 ++ strh r3, [r0, #6] @ movhi ++ mov r1, #255 ++ add r0, r0, #12 ++ b ftl_memset ++.L1138: ++ .align 2 ++.L1137: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlBbtMemInit, .-FtlBbtMemInit ++ .align 2 ++ .global FtlFreeSysBlkQueueInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueInit, %function ++FtlFreeSysBlkQueueInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r1, .L1141 ++ movw r2, #2516 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, #0 ++ add r3, r1, r2 ++ strh r0, [r1, r2] @ movhi ++ mov r2, #2048 ++ mov r1, r4 ++ add r0, r3, #8 ++ strh r4, [r3, #2] @ movhi ++ strh r4, [r3, #4] @ movhi ++ strh r4, [r3, #6] @ movhi ++ bl ftl_memset ++ mov r0, r4 ++ pop {r4, pc} ++.L1142: ++ .align 2 ++.L1141: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit ++ .align 2 ++ .global ftl_free_no_use_map_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_free_no_use_map_blk, %function ++ftl_free_no_use_map_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r1, #0 ++ ldrh r2, [r0, #10] ++ mov r4, r0 ++ ldr r5, [r0, #20] ++ ldr r7, [r0, #12] ++ ldr r6, [r0, #24] ++ lsl r2, r2, #1 ++ mov r0, r5 ++ bl ftl_memset ++ mov r2, #0 ++.L1144: ++ ldrh r1, [r4, #6] ++ uxth r3, r2 ++ cmp r1, r3 ++ bhi .L1148 ++ ldr r2, .L1164 ++ movw r3, #2392 ++ mov r6, #0 ++ mov r8, r6 ++ mov r10, r6 ++ ldrh r2, [r2, r3] ++ ldrh r3, [r4] ++ lsl r3, r3, #1 ++ strh r2, [r5, r3] @ movhi ++ ldrh r9, [r5] ++.L1149: ++ ldrh r3, [r4, #10] ++ uxth r1, r6 ++ cmp r3, r1 ++ bhi .L1153 ++ mov r0, r8 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1148: ++ uxth r3, r2 ++ mov r1, #0 ++ ldr r0, [r6, r3, lsl #2] ++ ubfx r0, r0, #10, #16 ++.L1145: ++ ldrh ip, [r4, #10] ++ uxth r3, r1 ++ cmp ip, r3 ++ addls r2, r2, #1 ++ bls .L1144 ++.L1147: ++ uxth r3, r1 ++ add r1, r1, #1 ++ lsl r3, r3, #1 ++ ldrh ip, [r7, r3] ++ adds lr, ip, #0 ++ movne lr, #1 ++ cmp r0, ip ++ movne lr, #0 ++ cmp lr, #0 ++ ldrhne ip, [r5, r3] ++ addne ip, ip, #1 ++ strhne ip, [r5, r3] @ movhi ++ b .L1145 ++.L1153: ++ uxth r3, r6 ++ lsl r3, r3, #1 ++ ldrh r2, [r5, r3] ++ cmp r9, r2 ++ bls .L1150 ++ ldrh r0, [r7, r3] ++ add fp, r7, r3 ++ cmp r0, #0 ++ bne .L1151 ++.L1152: ++ add r6, r6, #1 ++ b .L1149 ++.L1150: ++ cmp r2, #0 ++ bne .L1152 ++ ldrh r0, [r7, r3] ++ add fp, r7, r3 ++ cmp r0, #0 ++ beq .L1152 ++.L1154: ++ mov r1, #1 ++ bl FtlFreeSysBlkQueueIn ++ strh r10, [fp] @ movhi ++ ldrh r3, [r4, #8] ++ sub r3, r3, #1 ++ strh r3, [r4, #8] @ movhi ++ b .L1152 ++.L1151: ++ subs r9, r2, #0 ++ mov r8, r1 ++ beq .L1154 ++ b .L1152 ++.L1165: ++ .align 2 ++.L1164: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk ++ .align 2 ++ .global FtlL2PDataInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlL2PDataInit, %function ++FtlL2PDataInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r1, #0 ++ ldr r4, .L1170 ++ mvn r7, #0 ++ ldr r5, .L1170+4 ++ ldr r2, [r4, #2420] ++ add r6, r4, #2400 ++ ldr r0, [r5, #-468] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ movw r2, #2430 ++ ldrh r3, [r6] ++ ldrh r2, [r4, r2] ++ mov r1, #255 ++ ldr r0, [r5, #-440] ++ mul r2, r2, r3 ++ bl ftl_memset ++ mov r2, #0 ++ mov r3, r5 ++ mov r1, r6 ++ add ip, r6, #30 ++ mov r5, #12 ++ mov r6, r2 ++.L1167: ++ ldrh r8, [ip] ++ uxth r0, r2 ++ add lr, r2, #1 ++ cmp r8, r0 ++ bhi .L1168 ++ ldr r2, .L1170+8 ++ mvn r1, #0 ++ strh r1, [r2, #2] @ movhi ++ strh r1, [r2] @ movhi ++ ldr r1, [r4, #2420] ++ strh r1, [r2, #10] @ movhi ++ ldr r1, .L1170+12 ++ strh r1, [r2, #4] @ movhi ++ ldrh r1, [r2, #44] ++ strh r1, [r2, #8] @ movhi ++ movw r1, #2428 ++ ldrh r1, [r4, r1] ++ strh r1, [r2, #6] @ movhi ++ ldr r2, [r3, #-472] ++ str r2, [r3, #-420] ++ ldr r2, [r3, #-444] ++ str r2, [r3, #-416] ++ ldr r2, [r3, #-468] ++ str r2, [r3, #-412] ++ ldr r2, [r3, #-452] ++ str r2, [r3, #-408] ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1168: ++ uxth r2, r2 ++ ldr r8, [r3, #-3376] ++ mul r0, r5, r2 ++ add r9, r8, r0 ++ str r6, [r9, #4] ++ strh r7, [r8, r0] @ movhi ++ ldr r8, [r3, #-3376] ++ add r0, r8, r0 ++ ldrh r8, [r1] ++ mul r2, r2, r8 ++ ldr r8, [r3, #-440] ++ bic r2, r2, #3 ++ add r2, r8, r2 ++ str r2, [r0, #8] ++ mov r2, lr ++ b .L1167 ++.L1171: ++ .align 2 ++.L1170: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR2-432 ++ .word -3902 ++ .fnend ++ .size FtlL2PDataInit, .-FtlL2PDataInit ++ .align 2 ++ .global FtlVariablesInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVariablesInit, %function ++FtlVariablesInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mvn r3, #0 ++ ldr r5, .L1174 ++ mov r4, #0 ++ mov r1, r4 ++ movw r7, #2334 ++ ldr r6, .L1174+4 ++ sub r2, r5, #380 ++ str r3, [r5, #-368] ++ strh r3, [r2] @ movhi ++ movw r3, #2438 ++ strh r4, [r6, r3] @ movhi ++ movw r3, #2412 ++ ldrh r2, [r6, r3] ++ ldr r0, [r6, #2440] ++ str r4, [r5, #-384] ++ str r4, [r5, #-376] ++ lsl r2, r2, #1 ++ str r4, [r5, #-372] ++ str r4, [r6, #2248] ++ bl ftl_memset ++ ldrh r2, [r6, r7] ++ mov r1, r4 ++ ldr r0, [r5, #-3604] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldrh r2, [r6, r7] ++ mov r1, r4 ++ ldr r0, [r5, #-484] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ sub r0, r5, #3584 ++ mov r1, r4 ++ mov r2, #48 ++ sub r0, r0, #12 ++ bl ftl_memset ++ sub r0, r5, #3232 ++ mov r2, #512 ++ mov r1, r4 ++ sub r0, r0, #4 ++ bl ftl_memset ++ bl FtlGcBufInit ++ bl FtlL2PDataInit ++ mov r0, r4 ++ pop {r4, r5, r6, r7, r8, pc} ++.L1175: ++ .align 2 ++.L1174: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlVariablesInit, .-FtlVariablesInit ++ .align 2 ++ .global SupperBlkListInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SupperBlkListInit, %function ++SupperBlkListInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #2334 ++ ldr r6, .L1187 ++ mov r4, #0 ++ mov r2, #6 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r5, .L1187+4 ++ mov r1, #0 ++ ldrh r3, [r6, r3] ++ mov r9, r4 ++ mov r10, r4 ++ ldr r0, [r5, #-3548] ++ sub r7, r5, #3520 ++ mul r2, r2, r3 ++ bl ftl_memset ++ sub r3, r5, #568 ++ str r4, [r5, #-3528] ++ str r4, [r5, #-3544] ++ str r4, [r5, #-3536] ++ strh r4, [r7, #-12] @ movhi ++ strh r4, [r7, #-4] @ movhi ++ strh r4, [r3] @ movhi ++ str r6, [sp] ++.L1177: ++ ldr r3, .L1187+8 ++ sxth r8, r4 ++ ldrh r3, [r3] ++ cmp r8, r3 ++ bge .L1184 ++ ldr r3, .L1187+12 ++ uxth r1, r4 ++ mov fp, #0 ++ mov r6, fp ++ str r1, [sp, #4] ++ ldrh r2, [r3] ++ add r3, r3, #66 ++ ldrh r3, [r3] ++ b .L1185 ++.L1179: ++ str r3, [sp, #12] ++ add fp, fp, #1 ++ ldr r3, [sp] ++ str r2, [sp, #8] ++ add r0, r3, r1 ++ ldr r1, [sp, #4] ++ ldrb r0, [r0, #2350] @ zero_extendqisi2 ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ ldr r3, [sp, #12] ++ cmp r0, #0 ++ ldr r2, [sp, #8] ++ addeq r6, r3, r6 ++ sxtheq r6, r6 ++.L1185: ++ sxth r1, fp ++ cmp r1, r2 ++ blt .L1179 ++ cmp r6, #0 ++ lsl fp, r8, #1 ++ ldreq r3, [r5, #-3540] ++ mvneq r2, #0 ++ strheq r2, [r3, fp] @ movhi ++ beq .L1181 ++ mov r1, r6 ++ mov r0, #32768 ++ bl __aeabi_idiv ++ sxth r6, r0 ++.L1181: ++ ldr r2, [r5, #-3548] ++ add r3, fp, r8 ++ add r3, r2, r3, lsl #1 ++ strh r6, [r3, #4] @ movhi ++ ldrh r3, [r7] ++ cmp r8, r3 ++ beq .L1182 ++ ldr r3, .L1187+16 ++ ldrh r3, [r3] ++ cmp r8, r3 ++ beq .L1182 ++ ldr r3, .L1187+20 ++ ldrh r3, [r3] ++ cmp r8, r3 ++ beq .L1182 ++ ldr r3, [r5, #-3540] ++ uxth r0, r4 ++ ldrh r3, [r3, fp] ++ cmp r3, #0 ++ bne .L1183 ++ add r9, r9, #1 ++ uxth r9, r9 ++ bl INSERT_FREE_LIST ++.L1182: ++ add r4, r4, #1 ++ b .L1177 ++.L1183: ++ add r10, r10, #1 ++ uxth r10, r10 ++ bl INSERT_DATA_LIST ++ b .L1182 ++.L1184: ++ mov r0, #0 ++ strh r10, [r7, #-12] @ movhi ++ strh r9, [r7, #-4] @ movhi ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1188: ++ .align 2 ++.L1187: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2332 ++ .word .LANCHOR0+2324 ++ .word .LANCHOR2-3472 ++ .word .LANCHOR2-3424 ++ .fnend ++ .size SupperBlkListInit, .-SupperBlkListInit ++ .align 2 ++ .global FtlGcPageVarInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcPageVarInit, %function ++FtlGcPageVarInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r3, #0 ++ ldr r4, .L1191 ++ movw r5, #2394 ++ mov r1, #255 ++ ldr r6, .L1191+4 ++ sub r2, r4, #2672 ++ ldr r0, [r4, #-2680] ++ strh r3, [r2, #-4] @ movhi ++ sub r2, r4, #2656 ++ strh r3, [r2, #-12] @ movhi ++ ldrh r2, [r6, r5] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldrh r3, [r6, r5] ++ mov r2, #12 ++ ldr r0, [r4, #-2672] ++ mov r1, #255 ++ mul r2, r2, r3 ++ bl ftl_memset ++ pop {r4, r5, r6, lr} ++ b FtlGcBufInit ++.L1192: ++ .align 2 ++.L1191: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGcPageVarInit, .-FtlGcPageVarInit ++ .align 2 ++ .global ftl_memcpy ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_memcpy, %function ++ftl_memcpy: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b memcpy ++ .fnend ++ .size ftl_memcpy, .-ftl_memcpy ++ .align 2 ++ .global FlashReadIdbData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadIdbData, %function ++FlashReadIdbData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r2, #2048 ++ ldr r1, .L1196 ++ bl ftl_memcpy ++ mov r0, #0 ++ pop {r4, pc} ++.L1197: ++ .align 2 ++.L1196: ++ .word .LANCHOR2-364 ++ .fnend ++ .size FlashReadIdbData, .-FlashReadIdbData ++ .align 2 ++ .global FlashLoadPhyInfoInRam ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashLoadPhyInfoInRam, %function ++FlashLoadPhyInfoInRam: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r4, #0 ++ ldr r5, .L1207 ++ ldr r9, .L1207+4 ++ add r6, r5, #504 ++.L1201: ++ lsl r8, r4, #5 ++ ldrb r2, [r6, r4, lsl #5] @ zero_extendqisi2 ++ mov r1, r9 ++ add r0, r8, #1 ++ add r0, r6, r0 ++ bl FlashMemCmp8 ++ subs r7, r0, #0 ++ bne .L1199 ++ add r5, r5, r8 ++ ldr r2, .L1207+8 ++ ldrb r0, [r5, #526] @ zero_extendqisi2 ++ add r6, r6, r8 ++ mov r3, r7 ++ mov r1, r2 ++.L1200: ++ ldrb ip, [r2, r3, lsl #5] @ zero_extendqisi2 ++ cmp ip, r0 ++ beq .L1203 ++ add r3, r3, #1 ++ cmp r3, #4 ++ bne .L1200 ++.L1203: ++ ldr r4, .L1207+12 ++ add r1, r1, r3, lsl #5 ++ mov r2, #32 ++ ldr r0, .L1207+16 ++ bl ftl_memcpy ++ mov r2, #32 ++ mov r1, r6 ++ mov r0, r4 ++ bl ftl_memcpy ++ ldrh r0, [r4, #10] ++ bl FlashBlockAlignInit ++ b .L1198 ++.L1199: ++ add r4, r4, #1 ++ cmp r4, #86 ++ bne .L1201 ++ mvn r7, #0 ++.L1198: ++ mov r0, r7 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1208: ++ .align 2 ++.L1207: ++ .word .LANCHOR1 ++ .word .LANCHOR0+2072 ++ .word .LANCHOR1+3256 ++ .word .LANCHOR1+468 ++ .word .LANCHOR0+52 ++ .fnend ++ .size FlashLoadPhyInfoInRam, .-FlashLoadPhyInfoInRam ++ .align 2 ++ .global NandcCopy1KB ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcCopy1KB, %function ++NandcCopy1KB: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r1, #1 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r2 ++ add r2, r0, #4096 ++ add r6, r0, #512 ++ add r0, r2, r4, lsl #9 ++ ldr r5, [sp, #16] ++ bne .L1210 ++ cmp r3, #0 ++ beq .L1211 ++ mov r2, #1024 ++ mov r1, r3 ++ bl ftl_memcpy ++.L1211: ++ cmp r5, #0 ++ lsrne r4, r4, #1 ++ ldrne r3, [r5] @ unaligned ++ addne r4, r4, r4, lsl #1 ++ strne r3, [r6, r4, lsl #4] ++ pop {r4, r5, r6, pc} ++.L1210: ++ cmp r3, #0 ++ beq .L1214 ++ mov r1, r0 ++ mov r2, #1024 ++ mov r0, r3 ++ bl ftl_memcpy ++.L1214: ++ cmp r5, #0 ++ popeq {r4, r5, r6, pc} ++ lsr r4, r4, #1 ++ add r4, r4, r4, lsl #1 ++ ldr r3, [r6, r4, lsl #4] ++ strb r3, [r5] ++ lsr r2, r3, #8 ++ strb r2, [r5, #1] ++ lsr r2, r3, #16 ++ lsr r3, r3, #24 ++ strb r2, [r5, #2] ++ strb r3, [r5, #3] ++ pop {r4, r5, r6, pc} ++ .fnend ++ .size NandcCopy1KB, .-NandcCopy1KB ++ .align 2 ++ .global ftl_memcpy32 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_memcpy32, %function ++ftl_memcpy32: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, #0 ++.L1227: ++ cmp r3, r2 ++ bne .L1228 ++ bx lr ++.L1228: ++ ldr ip, [r1, r3, lsl #2] ++ str ip, [r0, r3, lsl #2] ++ add r3, r3, #1 ++ b .L1227 ++ .fnend ++ .size ftl_memcpy32, .-ftl_memcpy32 ++ .align 2 ++ .global ftl_memcmp ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_memcmp, %function ++ftl_memcmp: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b memcmp ++ .fnend ++ .size ftl_memcmp, .-ftl_memcmp ++ .align 2 ++ .global timer_get_time ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type timer_get_time, %function ++timer_get_time: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1231 ++ ldr r0, [r3] ++ b jiffies_to_msecs ++.L1232: ++ .align 2 ++.L1231: ++ .word jiffies ++ .fnend ++ .size timer_get_time, .-timer_get_time ++ .align 2 ++ .global FlashSramLoadStore ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashSramLoadStore, %function ++FlashSramLoadStore: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L1238 ++ cmp r2, #0 ++ moveq r2, r3 ++ ldr ip, [ip, #1684] ++ add ip, ip, #4096 ++ add ip, ip, r1 ++ moveq r1, ip ++ strne lr, [sp, #-4]! ++ .save {lr} ++ movne r1, r0 ++ ldrne lr, [sp], #4 ++ movne r2, r3 ++ movne r0, ip ++.L1237: ++ b ftl_memcpy ++.L1239: ++ .align 2 ++.L1238: ++ .word .LANCHOR2 ++ .fnend ++ .size FlashSramLoadStore, .-FlashSramLoadStore ++ .align 2 ++ .global FlashCs123Init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashCs123Init, %function ++FlashCs123Init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FlashCs123Init, .-FlashCs123Init ++ .align 2 ++ .global ftl_dma32_malloc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_dma32_malloc, %function ++ftl_dma32_malloc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r0, #8192 ++ ble .L1242 ++ b ftl_malloc ++.L1242: ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ add r4, r0, #63 ++ ldr r5, .L1246 ++ bic r4, r4, #63 ++ ldr r3, [r5, #1688] ++ cmp r4, r3 ++ ble .L1243 ++ mov r0, #16384 ++ bl ftl_malloc ++ mov r3, #16384 ++ str r0, [r5, #1692] ++ str r3, [r5, #1688] ++.L1243: ++ ldr r3, [r5, #1688] ++ ldr r0, [r5, #1692] ++ sub r3, r3, r4 ++ add r4, r0, r4 ++ str r3, [r5, #1688] ++ str r4, [r5, #1692] ++ pop {r4, r5, r6, pc} ++.L1247: ++ .align 2 ++.L1246: ++ .word .LANCHOR2 ++ .fnend ++ .size ftl_dma32_malloc, .-ftl_dma32_malloc ++ .align 2 ++ .global rk_nand_suspend ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nand_suspend, %function ++rk_nand_suspend: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_flash_suspend ++ .fnend ++ .size rk_nand_suspend, .-rk_nand_suspend ++ .align 2 ++ .global rk_nand_resume ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nand_resume, %function ++rk_nand_resume: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_flash_resume ++ .fnend ++ .size rk_nand_resume, .-rk_nand_resume ++ .align 2 ++ .global rk_ftl_get_capacity ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_get_capacity, %function ++rk_ftl_get_capacity: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1251 ++ ldr r0, [r3, #2432] ++ bx lr ++.L1252: ++ .align 2 ++.L1251: ++ .word .LANCHOR0 ++ .fnend ++ .size rk_ftl_get_capacity, .-rk_ftl_get_capacity ++ .align 2 ++ .global rk_nandc_get_irq_status ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nandc_get_irq_status, %function ++rk_nandc_get_irq_status: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r0, [r0, #372] ++ bx lr ++ .fnend ++ .size rk_nandc_get_irq_status, .-rk_nandc_get_irq_status ++ .align 2 ++ .global rknand_proc_ftlread ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rknand_proc_ftlread, %function ++rknand_proc_ftlread: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_proc_ftl_read ++ .fnend ++ .size rknand_proc_ftlread, .-rknand_proc_ftlread ++ .align 2 ++ .global ReadFlashInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ReadFlashInfo, %function ++ReadFlashInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_read_flash_info ++ .fnend ++ .size ReadFlashInfo, .-ReadFlashInfo ++ .align 2 ++ .global rknand_print_hex ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rknand_print_hex, %function ++rknand_print_hex: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r5, #0 ++ ldr r7, .L1266 ++ mov r10, r0 ++ mov r6, r1 ++ mov r8, r2 ++ ldr fp, .L1266+4 ++ mov r9, r3 ++ mov r4, r5 ++.L1257: ++ cmp r4, r9 ++ bne .L1263 ++ ldr r1, .L1266+4 ++ ldr r0, .L1266+8 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b printk ++.L1263: ++ cmp r5, #0 ++ bne .L1258 ++ mov r3, r4 ++ mov r2, r6 ++ mov r1, r10 ++ ldr r0, .L1266+12 ++ bl printk ++.L1258: ++ cmp r8, #4 ++ ldreq r1, [r6, r4, lsl #2] ++ beq .L1265 ++ cmp r8, #2 ++ lsleq r3, r4, #1 ++ ldrbne r1, [r6, r4] @ zero_extendqisi2 ++ ldrsheq r1, [r6, r3] ++.L1265: ++ mov r0, r7 ++ add r5, r5, #1 ++ bl printk ++ cmp r5, #15 ++ bls .L1262 ++ mov r5, #0 ++ mov r1, fp ++ ldr r0, .L1266+8 ++ bl printk ++.L1262: ++ add r4, r4, #1 ++ b .L1257 ++.L1267: ++ .align 2 ++.L1266: ++ .word .LC83 ++ .word .LC84 ++ .word .LC77 ++ .word .LC82 ++ .fnend ++ .size rknand_print_hex, .-rknand_print_hex ++ .align 2 ++ .global HynixGetReadRetryDefault ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type HynixGetReadRetryDefault, %function ++HynixGetReadRetryDefault: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mvn r3, #83 ++ ldr r7, .L1384 ++ cmp r0, #2 ++ mvn r1, #82 ++ mvn r2, #81 ++ .pad #60 ++ sub sp, sp, #60 ++ mov r4, r0 ++ strb r3, [r7, #1220] ++ mvn r3, #80 ++ strb r0, [r7, #1216] ++ strb r1, [r7, #1221] ++ strb r2, [r7, #1222] ++ strb r3, [r7, #1223] ++ bne .L1269 ++ mvn r3, #88 ++ mov r5, #7 ++ strb r3, [r7, #1220] ++ mvn r2, #8 ++ ldr r3, .L1384+4 ++ strb r2, [r3, #3401] ++.L1334: ++ mov r6, #4 ++ b .L1270 ++.L1269: ++ cmp r0, #3 ++ bne .L1271 ++ mvn r3, #79 ++ strb r3, [r7, #1220] ++ mvn r3, #78 ++ strb r3, [r7, #1221] ++ mvn r3, #77 ++ strb r3, [r7, #1222] ++ mvn r3, #76 ++ strb r3, [r7, #1223] ++ mvn r3, #75 ++ strb r3, [r7, #1224] ++ mvn r3, #74 ++ strb r3, [r7, #1225] ++ mvn r3, #73 ++ strb r3, [r7, #1226] ++ mvn r3, #72 ++.L1379: ++ mov r5, #8 ++ strb r3, [r7, #1227] ++ mov r6, r5 ++.L1270: ++ sub r3, r4, #1 ++ cmp r3, #1 ++ bhi .L1276 ++ ldr fp, .L1384+8 ++ mov r10, #0 ++ ldr r2, .L1384+12 ++.L1277: ++ ldrb r1, [r7, #2234] @ zero_extendqisi2 ++ uxtb r3, r10 ++ cmp r1, r3 ++ bhi .L1283 ++.L1284: ++ ldr r3, .L1384 ++ strb r6, [r3, #1217] ++ strb r5, [r3, #1218] ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1271: ++ cmp r0, #4 ++ bne .L1272 ++ mvn r0, #51 ++ strb r1, [r7, #1225] ++ strb r0, [r7, #1220] ++ mvn r0, #64 ++ strb r0, [r7, #1221] ++ mvn r0, #85 ++ strb r0, [r7, #1222] ++ mvn r0, #84 ++ strb r0, [r7, #1223] ++ mvn r0, #50 ++ strb r0, [r7, #1224] ++ strb r2, [r7, #1226] ++ b .L1379 ++.L1272: ++ cmp r0, #5 ++ bne .L1273 ++ mov r3, #56 ++ mov r5, #8 ++ strb r3, [r7, #1220] ++ mov r3, #57 ++ strb r3, [r7, #1221] ++ mov r3, #58 ++ strb r3, [r7, #1222] ++ mov r3, #59 ++ strb r3, [r7, #1223] ++ b .L1334 ++.L1273: ++ cmp r0, #6 ++ bne .L1274 ++ mov r3, #14 ++ mov r5, #12 ++ strb r3, [r7, #1220] ++ mov r3, #15 ++ strb r3, [r7, #1221] ++ mov r3, #16 ++ strb r3, [r7, #1222] ++ mov r3, #17 ++ strb r3, [r7, #1223] ++ b .L1334 ++.L1274: ++ cmp r0, #7 ++ bne .L1275 ++ mvn r3, #79 ++ mov r5, #12 ++ strb r3, [r7, #1220] ++ mvn r3, #78 ++ strb r3, [r7, #1221] ++ mvn r3, #77 ++ strb r3, [r7, #1222] ++ mvn r3, #76 ++ strb r3, [r7, #1223] ++ mvn r3, #75 ++ strb r3, [r7, #1224] ++ mvn r3, #74 ++ strb r3, [r7, #1225] ++ mvn r3, #73 ++ strb r3, [r7, #1226] ++ mvn r3, #72 ++ strb r3, [r7, #1227] ++ mvn r3, #43 ++ strb r3, [r7, #1228] ++ mvn r3, #42 ++ strb r3, [r7, #1229] ++ mov r6, #10 ++ b .L1270 ++.L1275: ++ cmp r0, #8 ++ mov r5, #7 ++ bne .L1334 ++ mov r3, #6 ++ strb r5, [r7, #1221] ++ strb r3, [r7, #1220] ++ mov r3, #9 ++ strb r3, [r7, #1223] ++ mov r3, #10 ++ strb r0, [r7, #1222] ++ mov r5, #50 ++ strb r3, [r7, #1224] ++ mov r6, #5 ++ b .L1270 ++.L1283: ++ add r3, r7, r3 ++ mov r8, #0 ++ ldrb r3, [r3, #2236] @ zero_extendqisi2 ++ mov r1, #55 ++ ldr r9, [r7, r3, lsl #3] ++ add r4, fp, r3, lsl #6 ++ add r3, r7, r3, lsl #3 ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r4, r4, #20 ++ add r9, r9, r3, lsl #8 ++.L1278: ++ add r3, fp, r8 ++ str r1, [r9, #2056] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ mov r0, #80 ++ str r2, [sp, #4] ++ str r1, [sp] ++ str r3, [r9, #2052] ++ bl ndelay ++ ldr r3, [r9, #2048] ++ ldm sp, {r1, r2} ++ strb r3, [r4, r8] ++ add r8, r8, #1 ++ uxtb r3, r8 ++ cmp r6, r3 ++ bhi .L1278 ++ mov r0, r4 ++ mov r1, #0 ++.L1281: ++ mov r3, #1 ++ add lr, r2, r1 ++.L1280: ++ ldrb ip, [lr, r3, lsl #2] @ zero_extendqisi2 ++ ldrb r8, [r0] @ zero_extendqisi2 ++ add ip, ip, r8 ++ strb ip, [r0, r3, lsl #3] ++ add r3, r3, #1 ++ cmp r3, #7 ++ bne .L1280 ++ add r1, r1, #1 ++ add r0, r0, #1 ++ cmp r1, #4 ++ bne .L1281 ++ mov r3, #0 ++ add r10, r10, #1 ++ strb r3, [r4, #16] ++ strb r3, [r4, #24] ++ strb r3, [r4, #32] ++ strb r3, [r4, #40] ++ strb r3, [r4, #48] ++ strb r3, [r4, #41] ++ strb r3, [r4, #49] ++ b .L1277 ++.L1276: ++ sub r3, r4, #3 ++ cmp r3, #5 ++ bhi .L1284 ++ smulbb r3, r6, r5 ++ ldr r8, .L1384 ++ asr r2, r3, #1 ++ lsl r3, r3, #4 ++ str r3, [sp, #48] ++ lsl r3, r2, #2 ++ str r2, [sp, #4] ++ str r3, [sp, #40] ++ lsl r3, r2, #1 ++ str r3, [sp, #28] ++ mov r3, #0 ++ str r3, [sp, #24] ++ add r3, r8, #1216 ++ add r3, r3, #28 ++ str r3, [sp, #52] ++.L1285: ++ ldrb r3, [sp, #24] @ zero_extendqisi2 ++ str r3, [sp, #8] ++ ldr r2, [sp, #8] ++ ldrb r3, [r8, #2234] @ zero_extendqisi2 ++ cmp r3, r2 ++ bls .L1284 ++ ldr r3, [sp, #8] ++ add r3, r8, r3 ++ ldrb r9, [r3, #2236] @ zero_extendqisi2 ++ ldr fp, [r8, r9, lsl #3] ++ mov r0, r9 ++ add r3, r8, r9, lsl #3 ++ ldrb r10, [r3, #4] @ zero_extendqisi2 ++ mov r3, #255 ++ add r7, fp, r10, lsl #8 ++ str r3, [r7, #2056] ++ bl NandcWaitFlashReady ++ cmp r4, #7 ++ bne .L1286 ++ ldr r3, .L1384+8 ++ mov r0, #160 ++ mla r0, r0, r9, r3 ++ add r3, r0, #28 ++.L1380: ++ str r3, [sp, #20] ++ cmp r4, #4 ++ add r3, fp, r10, lsl #8 ++ mov r2, #54 ++ str r2, [r3, #2056] ++ bne .L1289 ++ mov r2, #255 ++ str r2, [r3, #2052] ++ mov r2, #64 ++ str r2, [r3, #2048] ++ mov r2, #204 ++.L1381: ++ str r2, [r3, #2052] ++ mov r2, #77 ++.L1382: ++ str r2, [r3, #2048] ++.L1290: ++ add r3, fp, r10, lsl #8 ++ mov r2, #22 ++ cmp r4, #6 ++ str r2, [r3, #2056] ++ mov r2, #23 ++ str r2, [r3, #2056] ++ mov r2, #4 ++ str r2, [r3, #2056] ++ mov r2, #25 ++ str r2, [r3, #2056] ++ mov r2, #0 ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ moveq r2, #31 ++ str r2, [r3, #2052] ++ mov r2, #2 ++ str r2, [r3, #2052] ++ mov r2, #0 ++ str r2, [r3, #2052] ++.L1333: ++ add r3, fp, r10, lsl #8 ++ mov r2, #48 ++ mov r0, r9 ++ str r2, [r3, #2056] ++ bl NandcWaitFlashReady ++ sub r3, r4, #5 ++ cmp r4, #8 ++ cmpne r3, #1 ++ str r3, [sp, #44] ++ movls r2, #16 ++ bls .L1294 ++ cmp r4, #7 ++ moveq r2, #32 ++ movne r2, #2 ++.L1294: ++ ldr r3, .L1384+16 ++ sub r2, r2, #1 ++ add ip, fp, r10, lsl #8 ++ ldr r3, [r3, #1696] ++ str ip, [sp] ++ sub r1, r3, #1 ++ uxtab r2, r3, r2 ++ mov r0, r1 ++.L1295: ++ ldr ip, [sp] ++ ldr ip, [ip, #2048] ++ strb ip, [r0, #1]! ++ cmp r2, r0 ++ bne .L1295 ++ cmp r4, #8 ++ bne .L1296 ++ mov r2, #0 ++.L1298: ++ ldrb r0, [r3, r2, lsl #2] @ zero_extendqisi2 ++ uxtb r1, r2 ++ cmp r0, #50 ++ beq .L1297 ++ add r0, r3, r2, lsl #2 ++ ldrb r0, [r0, #1] @ zero_extendqisi2 ++ cmp r0, #5 ++ beq .L1297 ++ add r2, r2, #1 ++ cmp r2, #8 ++ bne .L1298 ++.L1299: ++ mov r1, #0 ++ ldr r0, .L1384+20 ++ bl printk ++.L1301: ++ b .L1301 ++.L1286: ++ cmp r4, #8 ++ beq .L1288 ++ ldr r3, .L1384+8 ++ add r0, r3, r9, lsl #6 ++ add r3, r0, #20 ++ b .L1380 ++.L1289: ++ sub r2, r4, #5 ++ cmp r2, #1 ++ ldrbls r2, [r8, #1220] @ zero_extendqisi2 ++ strls r2, [r3, #2052] ++ movls r2, #82 ++ bls .L1382 ++ cmp r4, #7 ++ bne .L1290 ++ mov r2, #174 ++ str r2, [r3, #2052] ++ mov r2, #0 ++ str r2, [r3, #2048] ++ mov r2, #176 ++ b .L1381 ++.L1297: ++ cmp r1, #6 ++ bhi .L1299 ++.L1300: ++ ldr r1, .L1384+16 ++ ldr r2, [r1, #1696] ++ mov r3, r2 ++.L1310: ++ ldr ip, [sp, #48] ++ sub r0, r3, r2 ++ cmp r0, ip ++ blt .L1311 ++ ldr r3, [sp, #28] ++ ldr r1, [r1, #1696] ++ add r0, r1, r3 ++ mov r3, #8 ++.L1313: ++ mov lr, r0 ++ mov ip, #0 ++.L1312: ++ ldrh r7, [lr] ++ add ip, ip, #1 ++ mvn r7, r7 ++ strh r7, [lr], #2 @ movhi ++ ldr r7, [sp, #4] ++ cmp r7, ip ++ bgt .L1312 ++ ldr ip, [sp, #40] ++ subs r3, r3, #1 ++ add r0, r0, ip ++ bne .L1313 ++ str r1, [sp, #12] ++ str r3, [sp, #16] ++.L1319: ++ mov ip, #0 ++ mov r0, ip ++.L1318: ++ mov lr, #1 ++ mov r7, #16 ++ lsl lr, lr, r0 ++ str r7, [sp, #36] ++ mov r7, #0 ++ str lr, [sp, #32] ++ ldr lr, [sp, #12] ++.L1316: ++ ldrh r3, [lr] ++ mov r1, r3 ++ ldr r3, [sp, #32] ++ bics r3, r3, r1 ++ ldr r3, [sp, #28] ++ addeq r7, r7, #1 ++ add lr, lr, r3 ++ ldr r3, [sp, #36] ++ subs r3, r3, #1 ++ str r3, [sp, #36] ++ bne .L1316 ++ cmp r7, #8 ++ add r0, r0, #1 ++ ldrhi r3, [sp, #32] ++ orrhi ip, ip, r3 ++ uxthhi ip, ip ++ cmp r0, #16 ++ bne .L1318 ++ ldr r3, [sp, #12] ++ strh ip, [r3], #2 @ movhi ++ str r3, [sp, #12] ++ ldr r3, [sp, #16] ++ add r3, r3, #1 ++ str r3, [sp, #16] ++ ldr r1, [sp, #16] ++ ldr r3, [sp, #4] ++ cmp r3, r1 ++ bgt .L1319 ++ ldr r3, .L1384+16 ++ ldr r1, [r3, #1696] ++ mov r3, #0 ++ sub r0, r1, #4 ++ add ip, r1, #28 ++.L1322: ++ ldr lr, [r0, #4]! ++ cmp lr, #0 ++ addeq r3, r3, #1 ++ cmp ip, r0 ++ bne .L1322 ++ cmp r3, #7 ++ ble .L1323 ++ ldr r0, .L1384+24 ++ mov r3, #1024 ++ mov r2, #1 ++ bl rknand_print_hex ++ mov r1, #0 ++ ldr r0, .L1384+20 ++ bl printk ++.L1324: ++ b .L1324 ++.L1296: ++ cmp r4, #7 ++ bne .L1302 ++ mov r2, #0 ++.L1304: ++ ldrb r0, [r3, r2, lsl #2] @ zero_extendqisi2 ++ uxtb r1, r2 ++ cmp r0, #12 ++ beq .L1303 ++ add r0, r3, r2, lsl #2 ++ ldrb r0, [r0, #1] @ zero_extendqisi2 ++ cmp r0, #10 ++ beq .L1303 ++ add r2, r2, #1 ++ cmp r2, #8 ++ bne .L1304 ++.L1305: ++ mov r1, #0 ++ ldr r0, .L1384+20 ++ bl printk ++.L1306: ++ b .L1306 ++.L1303: ++ cmp r1, #6 ++ bls .L1300 ++ b .L1305 ++.L1302: ++ cmp r4, #6 ++ bne .L1300 ++ add r3, r3, #7 ++.L1307: ++ ldrb r2, [r1, #1]! @ zero_extendqisi2 ++ cmp r2, #12 ++ beq .L1300 ++ ldrb r2, [r1, #8] @ zero_extendqisi2 ++ cmp r2, #4 ++ beq .L1300 ++ cmp r3, r1 ++ bne .L1307 ++ mov r1, #0 ++ ldr r0, .L1384+20 ++ bl printk ++.L1309: ++ b .L1309 ++.L1311: ++ ldr r0, [sp] ++ ldr r0, [r0, #2048] ++ strb r0, [r3], #1 ++ b .L1310 ++.L1323: ++ cmp r4, #6 ++ moveq ip, #4 ++ beq .L1325 ++ cmp r4, #7 ++ moveq ip, #10 ++ beq .L1325 ++ cmp r4, #8 ++ moveq ip, #5 ++ movne ip, #8 ++.L1325: ++ sub r3, r6, #1 ++ ldr r0, [sp, #20] ++ uxtb r3, r3 ++ mov lr, #0 ++ add r3, r3, #1 ++ str r3, [sp, #12] ++.L1326: ++ mov r3, r0 ++ mov r1, r2 ++.L1327: ++ ldrb r7, [r1], #1 @ zero_extendqisi2 ++ strb r7, [r3], #1 ++ sub r7, r1, r2 ++ uxtb r7, r7 ++ cmp r6, r7 ++ bhi .L1327 ++ ldr r3, [sp, #12] ++ add lr, lr, #1 ++ cmp r5, lr ++ add r0, r0, ip ++ add r2, r2, r3 ++ bgt .L1326 ++ add r10, fp, r10, lsl #8 ++ mov r3, #255 ++ mov r0, r9 ++ str r3, [r10, #2056] ++ bl NandcWaitFlashReady ++ ldr r3, [sp, #44] ++ cmp r3, #1 ++ bhi .L1329 ++ mov r3, #54 ++ ldr r2, [sp] ++ str r3, [r10, #2056] ++ mvn r1, #0 ++ ldrb r3, [r8, #1220] @ zero_extendqisi2 ++ ldr r0, [sp, #8] ++ str r3, [r2, #2052] ++ mov r3, #0 ++ str r3, [r2, #2048] ++ mov r3, #22 ++ str r3, [r10, #2056] ++ bl FlashReadCmd ++.L1330: ++ mov r0, r9 ++ bl NandcWaitFlashReady ++ ldr r3, [sp, #24] ++ add r3, r3, #1 ++ str r3, [sp, #24] ++ b .L1285 ++.L1329: ++ cmp r4, #8 ++ moveq r3, #190 ++ movne r3, #56 ++ str r3, [r10, #2056] ++ b .L1330 ++.L1288: ++ mov r3, #120 ++ mov r2, #23 ++ str r3, [r7, #2056] ++ mov r3, #0 ++ str r3, [r7, #2052] ++ mov r1, #25 ++ str r3, [r7, #2052] ++ str r3, [r7, #2052] ++ str r2, [r7, #2056] ++ mov r2, #4 ++ str r2, [r7, #2056] ++ str r1, [r7, #2056] ++ mov r1, #218 ++ str r1, [r7, #2056] ++ mov r1, #21 ++ str r3, [r7, #2056] ++ str r3, [r7, #2052] ++ str r3, [r7, #2052] ++ str r1, [r7, #2052] ++ str r2, [r7, #2052] ++ str r3, [r7, #2052] ++ ldr r3, [sp, #52] ++ str r3, [sp, #20] ++ b .L1333 ++.L1385: ++ .align 2 ++.L1384: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .word .LANCHOR0+1216 ++ .word .LANCHOR1+3384 ++ .word .LANCHOR2 ++ .word .LC85 ++ .word .LC86 ++ .fnend ++ .size HynixGetReadRetryDefault, .-HynixGetReadRetryDefault ++ .align 2 ++ .global FlashGetReadRetryDefault ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashGetReadRetryDefault, %function ++FlashGetReadRetryDefault: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ subs r3, r0, #0 ++ bxeq lr ++ sub r2, r3, #1 ++ cmp r2, #7 ++ bhi .L1388 ++ b HynixGetReadRetryDefault ++.L1388: ++ cmp r3, #49 ++ bne .L1389 ++ ldr r2, .L1400 ++ ldr r1, .L1400+4 ++ strb r3, [r2, #1216] ++ mov r3, #4 ++ strb r3, [r2, #1217] ++ mov r3, #15 ++ strb r3, [r2, #1218] ++ mov r2, #64 ++.L1398: ++ ldr r0, .L1400+8 ++ b ftl_memcpy ++.L1389: ++ sub r2, r3, #65 ++ cmp r3, #33 ++ cmpne r2, #1 ++ bhi .L1390 ++ ldr r2, .L1400 ++ strb r3, [r2, #1216] ++ mov r3, #4 ++.L1399: ++ strb r3, [r2, #1217] ++ mov r3, #7 ++ strb r3, [r2, #1218] ++ mov r2, #45 ++ ldr r1, .L1400+12 ++ b .L1398 ++.L1390: ++ cmp r3, #67 ++ cmpne r3, #34 ++ ldreq r2, .L1400 ++ strbeq r3, [r2, #1216] ++ moveq r3, #5 ++ beq .L1399 ++.L1391: ++ cmp r3, #68 ++ cmpne r3, #35 ++ bxne lr ++ ldr r2, .L1400 ++ ldr r1, .L1400+16 ++ strb r3, [r2, #1216] ++ mov r3, #5 ++ strb r3, [r2, #1217] ++ mov r3, #17 ++ strb r3, [r2, #1218] ++ mov r2, #95 ++ b .L1398 ++.L1401: ++ .align 2 ++.L1400: ++ .word .LANCHOR0 ++ .word .LANCHOR1+404 ++ .word .LANCHOR0+1220 ++ .word .LANCHOR1+256 ++ .word .LANCHOR1+301 ++ .fnend ++ .size FlashGetReadRetryDefault, .-FlashGetReadRetryDefault ++ .align 2 ++ .global NandcXferComp ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcXferComp, %function ++NandcXferComp: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ ldr r5, .L1442 ++ ldr r3, [r5, #2264] ++ ldr r4, [r5, r0, lsl #3] ++ cmp r3, #3 ++ bls .L1433 ++ ldr r3, [r4, #16] ++ tst r3, #4 ++ beq .L1433 ++ ldr r6, [r4, #16] ++ ldr r3, [r4, #8] ++ ubfx r6, r6, #1, #1 ++ cmp r6, #0 ++ str r3, [sp] ++ beq .L1404 ++ ldr r7, .L1442+4 ++ mov r6, #0 ++ ldr r8, .L1442+8 ++.L1405: ++ ldr r2, [r4, #28] ++ ldr r3, [sp] ++ ubfx r2, r2, #16, #5 ++ ubfx r3, r3, #22, #6 ++ cmp r2, r3 ++ bge .L1413 ++ ldr r3, [r5, #2264] ++ cmp r3, #5 ++ bhi .L1406 ++.L1409: ++ add r6, r6, #1 ++ bics r3, r6, #-16777216 ++ bne .L1408 ++ ldr r2, [r4, #28] ++ mov r1, r6 ++ ldr r3, [sp] ++ mov r0, r7 ++ ubfx r2, r2, #16, #5 ++ ubfx r3, r3, #22, #6 ++ bl printk ++ mov r3, #512 ++ mov r2, #4 ++ mov r1, r4 ++ mov r0, r8 ++ bl rknand_print_hex ++.L1408: ++ mov r1, #5 ++ mov r0, #1 ++ bl usleep_range ++ b .L1405 ++.L1406: ++ ldr r3, [r4] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #8192 ++ beq .L1409 ++ ldr r3, [sp, #4] ++ tst r3, #131072 ++ beq .L1409 ++.L1413: ++ ldr r3, [r5, #2300] ++ cmp r3, #0 ++ beq .L1414 ++ ldr r1, [sp] ++ mov r2, #0 ++ ldr r0, [r5, #2292] ++ ubfx r1, r1, #22, #5 ++ lsl r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ mov r2, #0 ++ ldr r0, [r5, #2296] ++ ubfx r1, r1, #22, #5 ++ lsl r1, r1, #7 ++ bl rknand_dma_unmap_single ++.L1414: ++ mov r3, #0 ++ str r3, [r5, #2300] ++.L1402: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1404: ++ ldr r7, .L1442+12 ++ ldr r8, .L1442+8 ++.L1415: ++ ldr r3, [sp] ++ tst r3, #1048576 ++ beq .L1417 ++ ldr r3, [r5, #2308] ++ cmp r3, #0 ++ beq .L1418 ++ mov r0, r4 ++ bl NandcSendDumpDataStart ++.L1418: ++ ldr r3, [r5, #2300] ++ cmp r3, #0 ++ beq .L1419 ++ ldr r1, [sp] ++ mov r2, #1 ++ ldr r0, [r5, #2292] ++ ubfx r1, r1, #22, #5 ++ lsl r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ mov r2, #1 ++ ldr r0, [r5, #2296] ++ ubfx r1, r1, #22, #5 ++ lsl r1, r1, #7 ++ bl rknand_dma_unmap_single ++.L1419: ++ ldr r3, [r5, #2308] ++ cmp r3, #0 ++ beq .L1414 ++ mov r0, r4 ++ bl NandcSendDumpDataDone ++ b .L1414 ++.L1417: ++ ldr r3, [r4, #8] ++ add r6, r6, #1 ++ str r3, [sp] ++ bics r3, r6, #-16777216 ++ bne .L1416 ++ ldr r2, [sp] ++ mov r1, r6 ++ ldr r3, [r4, #28] ++ mov r0, r7 ++ ubfx r3, r3, #16, #5 ++ bl printk ++ mov r3, #512 ++ mov r2, #4 ++ mov r1, r4 ++ mov r0, r8 ++ bl rknand_print_hex ++.L1416: ++ mov r1, #5 ++ mov r0, #1 ++ bl usleep_range ++ b .L1415 ++.L1433: ++ ldr r3, [r4, #8] ++ str r3, [sp] ++ ldr r3, [sp] ++ tst r3, #1048576 ++ beq .L1433 ++ b .L1402 ++.L1443: ++ .align 2 ++.L1442: ++ .word .LANCHOR0 ++ .word .LC87 ++ .word .LC88 ++ .word .LC89 ++ .fnend ++ .size NandcXferComp, .-NandcXferComp ++ .align 2 ++ .global NandcXferData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcXferData, %function ++NandcXferData: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ tst r3, #63 ++ ldr r9, .L1484 ++ .pad #92 ++ sub sp, sp, #92 ++ mov r7, r0 ++ mov r5, r1 ++ str r2, [sp, #8] ++ mov r8, r3 ++ ldr r4, [sp, #128] ++ ldr r6, [r9, r0, lsl #3] ++ bne .L1445 ++ cmp r4, #0 ++ bne .L1446 ++ mov r2, #64 ++ mov r1, #255 ++ add r0, sp, #24 ++ bl ftl_memset ++ add r4, sp, #24 ++.L1446: ++ mov r3, #0 ++ ldr r2, [sp, #8] ++ mov r1, r5 ++ mov r0, r7 ++ str r4, [sp, #4] ++ str r8, [sp] ++ bl NandcXferStart ++ mov r1, r5 ++ mov r0, r7 ++ bl NandcXferComp ++ cmp r5, #0 ++ movne r9, #0 ++ bne .L1447 ++ ldr r3, [r9, #2312] ++ mov r2, r5 ++ cmp r3, #25 ++ ldr r3, [sp, #8] ++ movcc ip, #64 ++ movcs ip, #128 ++ lsr r1, r3, #1 ++ mov r3, r5 ++.L1449: ++ cmp r2, r1 ++ add r4, r4, #4 ++ add r0, ip, r3 ++ bcc .L1450 ++ ldr r3, [sp, #8] ++ mov r2, #0 ++ ldr r1, [r9, #2312] ++ ldr ip, [r9, #2264] ++ mov r9, r2 ++ lsr r0, r3, #2 ++.L1451: ++ cmp r2, r0 ++ bcs .L1447 ++ cmp r1, #0 ++ bne .L1457 ++.L1447: ++ mov r3, #0 ++ str r3, [r6, #16] ++.L1458: ++ ldr r3, .L1484 ++ ldr r3, [r3, #2264] ++ cmp r3, #5 ++ movls r3, #0 ++ movhi r3, #1 ++ cmp r5, #0 ++ movne r3, #0 ++ cmp r3, #0 ++ beq .L1444 ++ ldr r3, [r6] ++ and r2, r3, #139264 ++ cmp r2, #139264 ++ mvneq r9, #0 ++ orreq r3, r3, #131072 ++ streq r3, [r6] ++.L1444: ++ mov r0, r9 ++ add sp, sp, #92 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1450: ++ ldr lr, [r9, #2280] ++ bic r3, r3, #3 ++ add r2, r2, #1 ++ ldr r3, [lr, r3] ++ strb r3, [r4, #-4] ++ lsr lr, r3, #8 ++ strb lr, [r4, #-3] ++ lsr lr, r3, #16 ++ lsr r3, r3, #24 ++ strb lr, [r4, #-2] ++ strb r3, [r4, #-1] ++ mov r3, r0 ++ b .L1449 ++.L1457: ++ add r3, r2, #8 ++ ldr r3, [r6, r3, lsl #2] ++ str r3, [sp, #20] ++ ldr r3, [sp, #20] ++ tst r3, #4 ++ bne .L1473 ++ ldr r3, [sp, #20] ++ ubfx r3, r3, #15, #1 ++ cmp r3, #0 ++ bne .L1473 ++ cmp ip, #5 ++ bls .L1453 ++ ldr lr, [sp, #20] ++ ldr r7, [sp, #20] ++ ldr r3, [sp, #20] ++ ldr r4, [sp, #20] ++ ubfx lr, lr, #3, #5 ++ ubfx r7, r7, #27, #1 ++ ubfx r3, r3, #16, #5 ++ orr lr, lr, r7, lsl #5 ++ ubfx r4, r4, #29, #1 ++ orr r3, r3, r4, lsl #5 ++ cmp lr, r3 ++ ldr r3, [sp, #20] ++ ldrhi lr, [sp, #20] ++ ldrls lr, [sp, #20] ++ ubfxhi r3, r3, #3, #5 ++ ubfxls r3, r3, #16, #5 ++ ubfxhi lr, lr, #27, #1 ++ ubfxls lr, lr, #29, #1 ++.L1483: ++ orr r3, r3, lr, lsl #5 ++.L1455: ++ cmp r9, r3 ++ movcc r9, r3 ++.L1452: ++ add r2, r2, #1 ++ b .L1451 ++.L1453: ++ cmp ip, #3 ++ bls .L1455 ++ ldr lr, [sp, #20] ++ ldr r7, [sp, #20] ++ ldr r3, [sp, #20] ++ ldr r4, [sp, #20] ++ ubfx lr, lr, #3, #5 ++ ubfx r7, r7, #28, #1 ++ ubfx r3, r3, #16, #5 ++ orr lr, lr, r7, lsl #5 ++ ubfx r4, r4, #30, #1 ++ orr r3, r3, r4, lsl #5 ++ cmp lr, r3 ++ ldr r3, [sp, #20] ++ ldrhi lr, [sp, #20] ++ ldrls lr, [sp, #20] ++ ubfxhi r3, r3, #3, #5 ++ ubfxls r3, r3, #16, #5 ++ ubfxhi lr, lr, #28, #1 ++ ubfxls lr, lr, #30, #1 ++ b .L1483 ++.L1473: ++ mvn r9, #0 ++ b .L1452 ++.L1445: ++ cmp r1, #1 ++ bne .L1459 ++ mov r9, #0 ++ cmp r4, #0 ++ mov r10, r9 ++ movne r3, #4 ++ moveq r3, #0 ++ str r3, [sp, #12] ++.L1460: ++ ldr r3, [sp, #8] ++ cmp r9, r3 ++ movcs r9, #0 ++ bcs .L1458 ++.L1462: ++ cmp r8, #0 ++ and fp, r9, #3 ++ addne r3, r8, r9, lsl #9 ++ moveq r3, r8 ++ str r4, [sp] ++ mov r2, fp ++ mov r1, #1 ++ mov r0, r6 ++ bl NandcCopy1KB ++ mov r3, fp ++ mov r2, #2 ++ mov r1, #1 ++ mov r0, r7 ++ str r10, [sp, #4] ++ add r9, r9, #2 ++ str r10, [sp] ++ bl NandcXferStart ++ mov r1, #1 ++ mov r0, r7 ++ bl NandcXferComp ++ ldr r3, [sp, #12] ++ add r4, r4, r3 ++ b .L1460 ++.L1459: ++ mov r10, #0 ++ mov r2, #2 ++ mov r3, r10 ++ str r10, [sp, #4] ++ str r10, [sp] ++ mov r1, r10 ++ bl NandcXferStart ++ mov fp, r8 ++ cmp r4, r10 ++ mov r9, r10 ++ movne r3, #4 ++ moveq r3, r10 ++ str r3, [sp, #12] ++.L1463: ++ ldr r3, [sp, #8] ++ cmp r10, r3 ++ bcs .L1458 ++ mov r1, r5 ++ mov r0, r7 ++ bl NandcXferComp ++ ldr r3, [r6, #32] ++ add r10, r10, #2 ++ str r3, [sp, #20] ++ ldr r3, [sp, #8] ++ cmp r3, r10 ++ bls .L1464 ++ mov r3, #0 ++ mov r2, #2 ++ str r3, [sp, #4] ++ mov r1, #0 ++ str r3, [sp] ++ mov r0, r7 ++ and r3, r10, #3 ++ bl NandcXferStart ++.L1464: ++ ldr r3, [sp, #20] ++ tst r3, #4 ++ mvnne r9, #0 ++ bne .L1465 ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #20] ++ ubfx r3, r3, #3, #5 ++ ubfx r2, r2, #27, #1 ++ orr r3, r3, r2, lsl #5 ++ cmp r9, r3 ++ movcc r9, r3 ++.L1465: ++ cmp r8, #0 ++ sub r2, r10, #2 ++ movne r3, fp ++ str r4, [sp] ++ moveq r3, #0 ++ and r2, r2, #3 ++ mov r1, #0 ++ mov r0, r6 ++ bl NandcCopy1KB ++ ldr r3, [sp, #12] ++ add fp, fp, #1024 ++ add r4, r4, r3 ++ b .L1463 ++.L1485: ++ .align 2 ++.L1484: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcXferData, .-NandcXferData ++ .align 2 ++ .global FlashReadRawPage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadRawPage, %function ++FlashReadRawPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r8, r3 ++ ldr r3, .L1489 ++ subs r4, r0, #0 ++ mov r6, r1 ++ mov r7, r2 ++ ldrb r5, [r3, #477] @ zero_extendqisi2 ++ bne .L1487 ++ ldr r1, .L1489+4 ++ ldrb r3, [r1, #37] @ zero_extendqisi2 ++ ldr r0, [r1, #40] ++ mul r0, r0, r3 ++ cmp r0, r6 ++ movhi r5, #4 ++.L1487: ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r1, r6 ++ mov r0, r4 ++ bl FlashReadCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r3, r7 ++ mov r2, r5 ++ str r8, [sp] ++ mov r1, #0 ++ mov r0, r4 ++ bl NandcXferData ++ mov r1, r0 ++ mov r0, r4 ++ bl NandcFlashDeCs ++ mov r0, r1 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1490: ++ .align 2 ++.L1489: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadRawPage, .-FlashReadRawPage ++ .align 2 ++ .global FlashDdrTunningRead ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashDdrTunningRead, %function ++FlashDdrTunningRead: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r3 ++ ldr r4, .L1517 ++ .pad #20 ++ sub sp, sp, #20 ++ mov fp, r2 ++ stm sp, {r0, r1} ++ ldr r3, [r4, #88] ++ ldr r3, [r3, #304] ++ str r3, [sp, #12] ++ ldr r3, [r4, #2264] ++ cmp r3, #8 ++ ldr r3, [sp, #56] ++ movcc r10, #6 ++ movcs r10, #12 ++ cmp r3, #0 ++ moveq r5, #1024 ++ beq .L1493 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++ ldr r0, [sp] ++ bl FlashReset ++ mov r3, r7 ++ mov r2, fp ++ ldm sp, {r0, r1} ++ bl FlashReadRawPage ++ mov r5, r0 ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl NandcSetMode ++ cmn r5, #1 ++ bne .L1494 ++.L1503: ++ mvn r5, #0 ++.L1491: ++ mov r0, r5 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1494: ++ mov r2, r5 ++ ldr r1, [sp, #4] ++ ldr r0, .L1517+4 ++ bl printk ++ cmp r5, #9 ++ ldrls r3, [sp] ++ ldrls r3, [r4, r3, lsl #3] ++ ldrls r2, [r3, #3840] ++ ldrls r2, [r3] ++ orrls r2, r2, #131072 ++ strls r2, [r3] ++ ldr r2, .L1517+8 ++ ldr r3, [r2, #1700] ++ add r3, r3, #1 ++ cmp r3, #2048 ++ str r3, [r2, #1700] ++ movcs r7, #0 ++ strcs r7, [r2, #1700] ++ movcs fp, r7 ++ bcc .L1491 ++.L1493: ++ mov r9, #0 ++ mvn r8, #0 ++ mov r6, r9 ++ mov r4, r9 ++ str r9, [sp, #8] ++.L1501: ++ uxtb r0, r10 ++ bl NandcSetDdrPara ++ mov r3, r7 ++ mov r2, fp ++ ldm sp, {r0, r1} ++ bl FlashReadRawPage ++ add r3, r5, #1 ++ cmp r0, r3 ++ bhi .L1497 ++ cmp r0, #2 ++ bhi .L1507 ++ add r4, r4, #1 ++ cmp r4, #9 ++ bls .L1507 ++ mov r3, r6 ++ mov r5, r0 ++ sub r6, r10, r4 ++ mov r8, #0 ++.L1499: ++ ldr r2, [sp, #8] ++ cmp r4, r2 ++ movls r6, r3 ++.L1500: ++ cmp r6, #0 ++ beq .L1502 ++ mov r1, r6 ++ ldr r0, .L1517+12 ++ bl printk ++ uxtb r0, r6 ++ bl NandcSetDdrPara ++.L1502: ++ cmn r8, #1 ++ bne .L1491 ++ ldm sp, {r1, r2} ++ ldr r0, .L1517+16 ++ bl printk ++ ldr r3, [sp, #56] ++ cmp r3, #0 ++ beq .L1503 ++ ldr r3, [sp, #12] ++ ubfx r0, r3, #8, #8 ++ bl NandcSetDdrPara ++ b .L1491 ++.L1497: ++ ldr r3, [sp, #8] ++ cmp r4, r3 ++ bls .L1508 ++ cmp r4, #7 ++ sub r6, r9, r4 ++ bhi .L1500 ++ str r4, [sp, #8] ++.L1508: ++ mov r4, #0 ++ b .L1498 ++.L1507: ++ mov r8, #0 ++ mov r9, r10 ++ mov r5, r0 ++ mov r7, r8 ++ mov fp, r8 ++.L1498: ++ add r10, r10, #2 ++ cmp r10, #69 ++ bls .L1501 ++ mov r3, r6 ++ mov r6, r9 ++ b .L1499 ++.L1518: ++ .align 2 ++.L1517: ++ .word .LANCHOR0 ++ .word .LC90 ++ .word .LANCHOR2 ++ .word .LC91 ++ .word .LC92 ++ .fnend ++ .size FlashDdrTunningRead, .-FlashDdrTunningRead ++ .align 2 ++ .global FlashReadPage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadPage, %function ++FlashReadPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r5, r0 ++ mov r6, r1 ++ mov r7, r2 ++ mov r8, r3 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ mov r4, r0 ++ bne .L1520 ++ ldr r9, .L1539 ++ ldrb fp, [r9, #44] @ zero_extendqisi2 ++ mov r10, r9 ++ cmp fp, #0 ++ bne .L1521 ++.L1523: ++ ldrb r3, [r10, #2256] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1520 ++ ldr r3, [r10, #88] ++ mov r2, r7 ++ mov r1, r6 ++ mov r0, r5 ++ ldr r9, [r3, #304] ++ mov r3, #1 ++ str r3, [sp] ++ mov r3, r8 ++ bl FlashDdrTunningRead ++ cmn r0, #1 ++ mov r4, r0 ++ beq .L1524 ++ ldrb r3, [r10, #2316] @ zero_extendqisi2 ++ cmp r0, r3, lsr #1 ++ bls .L1520 ++.L1524: ++ ubfx r0, r9, #8, #8 ++ bl NandcSetDdrPara ++ b .L1520 ++.L1521: ++ mov r3, #0 ++ mov r2, r7 ++ strb r3, [r9, #44] ++ mov r1, r6 ++ mov r3, r8 ++ mov r0, r5 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ strb fp, [r9, #44] ++ movne r4, r0 ++ beq .L1523 ++.L1520: ++ ldr r9, .L1539+4 ++ ldr r10, [r9, #1704] ++ adds r3, r10, #0 ++ movne r3, #1 ++ cmn r4, #1 ++ movne r3, #0 ++ cmp r3, #0 ++ beq .L1519 ++ mov r3, r8 ++ mov r2, r7 ++ mov r1, r6 ++ mov r0, r5 ++ blx r10 ++ mov r3, r6 ++ mov r4, r0 ++ mov r1, r0 ++ mov r2, r5 ++ ldr r0, .L1539+8 ++ bl printk ++ cmn r4, #1 ++ bne .L1519 ++ ldr r3, .L1539 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1519 ++ mov r0, r5 ++ bl flash_enter_slc_mode ++ ldr r4, [r9, #1704] ++ mov r3, r8 ++ mov r2, r7 ++ mov r1, r6 ++ mov r0, r5 ++ blx r4 ++ mov r4, r0 ++ mov r0, r5 ++ bl flash_exit_slc_mode ++.L1519: ++ mov r0, r4 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1540: ++ .align 2 ++.L1539: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC93 ++ .fnend ++ .size FlashReadPage, .-FlashReadPage ++ .align 2 ++ .global FlashDdrParaScan ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashDdrParaScan, %function ++FlashDdrParaScan: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r6, r0 ++ ldr r5, .L1551 ++ mov r4, #0 ++ mov r7, r1 ++ ldrb r0, [r5, #2233] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r5, #2233] @ zero_extendqisi2 ++ bl NandcSetMode ++ mov r3, r4 ++ mov r2, r4 ++ mov r1, r7 ++ str r4, [sp] ++ mov r0, r6 ++ bl FlashDdrTunningRead ++ mov r3, r4 ++ mov r8, r0 ++ mov r2, r4 ++ mov r1, r7 ++ mov r0, r6 ++ bl FlashReadRawPage ++ cmn r8, #1 ++ cmnne r0, #1 ++ mov r3, r5 ++ bne .L1542 ++ ldrb r2, [r5, #2233] @ zero_extendqisi2 ++ tst r2, #1 ++ beq .L1542 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++ strb r4, [r5, #2256] ++.L1543: ++ mov r0, #0 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1542: ++ mov r2, #1 ++ strb r2, [r3, #2256] ++ b .L1543 ++.L1552: ++ .align 2 ++.L1551: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashDdrParaScan, .-FlashDdrParaScan ++ .align 2 ++ .global FlashLoadPhyInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashLoadPhyInfo, %function ++FlashLoadPhyInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r3, #60 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r6, .L1568 ++ mov r5, #0 ++ mov r8, #4 ++ strb r3, [sp, #12] ++ mov r3, #40 ++ strb r3, [sp, #13] ++ mov r3, #24 ++ strb r3, [sp, #14] ++ mov r3, #16 ++ ldr r4, .L1568+4 ++ mvn r7, #0 ++ strb r3, [sp, #15] ++ mov r0, r5 ++ ldr r3, [r6, #40] ++ str r5, [r4, #1712] ++ str r3, [sp, #4] ++ ldr r3, [r4, #1696] ++ str r3, [r4, #1708] ++ bl flash_enter_slc_mode ++.L1554: ++ add fp, r5, #1 ++ mov r9, #0 ++ add r10, sp, #12 ++.L1556: ++ ldrb r0, [r10, r9] @ zero_extendqisi2 ++ bl FlashBchSel ++ mov r3, #0 ++ ldr r2, [r4, #1696] ++ mov r1, r5 ++ mov r0, r3 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ bne .L1555 ++ mov r3, #0 ++ ldr r2, [r4, #1696] ++ mov r1, fp ++ mov r0, r3 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ bne .L1555 ++ add r9, r9, #1 ++ cmp r9, #4 ++ bne .L1556 ++.L1557: ++ ldr r3, [sp, #4] ++ subs r8, r8, #1 ++ add r5, r5, r3 ++ bne .L1554 ++ mov r0, r8 ++ b .L1567 ++.L1558: ++ movw r1, #2036 ++ add r0, r9, #12 ++ bl js_hash ++ ldr r3, [r9, #8] ++ cmp r3, r0 ++ mvnne r7, #0 ++ bne .L1557 ++ mov r2, #32 ++ add r1, r9, #160 ++ ldr r0, .L1568+8 ++ bl ftl_memcpy ++ ldr r1, [r4, #1708] ++ mov r2, #32 ++ ldr r0, .L1568+12 ++ add r1, r1, #192 ++ bl ftl_memcpy ++ ldr r1, [r4, #1708] ++ mov r2, #852 ++ ldr r0, .L1568+16 ++ add r1, r1, #224 ++ bl ftl_memcpy ++ ldr r3, .L1568+8 ++ ldrh r0, [r3, #10] ++ bl FlashBlockAlignInit ++ ldr r7, [r4, #1708] ++ mov r0, r5 ++ str r5, [r4, #1712] ++ ldr r1, [r6, #40] ++ ldr r3, [r7, #1076] ++ strb r3, [r6, #2256] ++ bl __aeabi_uidiv ++ add r0, r0, #1 ++ cmp r0, #1 ++ movls r3, #2 ++ strhi r0, [r4, #1716] ++ strls r3, [r4, #1716] ++ ldrh r3, [r7, #14] ++ mov r7, #0 ++ strb r3, [r4, #1720] ++ b .L1557 ++.L1555: ++ ldr r9, [r4, #1708] ++ ldr r2, .L1568+20 ++ ldr r3, [r9] ++ cmp r3, r2 ++ bne .L1557 ++ cmp r7, #0 ++ bne .L1558 ++ ldr r1, [r6, #40] ++ mov r0, r5 ++ bl __aeabi_uidiv ++ add r0, r0, #1 ++ str r0, [r4, #1716] ++ mov r0, r7 ++.L1567: ++ bl flash_exit_slc_mode ++ mov r0, r7 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1569: ++ .align 2 ++.L1568: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR1+468 ++ .word .LANCHOR0+52 ++ .word .LANCHOR0+1216 ++ .word 1312902724 ++ .fnend ++ .size FlashLoadPhyInfo, .-FlashLoadPhyInfo ++ .align 2 ++ .global ToshibaReadRetrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ToshibaReadRetrial, %function ++ToshibaReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r0 ++ ldr r4, .L1598 ++ .pad #28 ++ sub sp, sp, #28 ++ mov fp, r3 ++ str r1, [sp, #12] ++ str r2, [sp, #8] ++ bl NandcWaitFlashReady ++ add r3, r4, r8, lsl #3 ++ ldr r6, [r4, r8, lsl #3] ++ ldrb r1, [r3, #4] @ zero_extendqisi2 ++ ldrb r3, [r4, #84] @ zero_extendqisi2 ++ add r7, r1, #8 ++ sub r3, r3, #67 ++ add r7, r6, r7, lsl #8 ++ cmp r3, #1 ++ lsl r3, r1, #8 ++ movls r5, #0 ++ str r3, [sp, #16] ++ bls .L1571 ++ ldrb r5, [r4, #2256] @ zero_extendqisi2 ++ cmp r5, #0 ++ beq .L1572 ++ mov r5, #1 ++ mov r0, #0 ++ bl NandcSetDdrMode ++.L1572: ++ lsl r3, r1, #8 ++ mov r2, #92 ++ add r3, r6, r3 ++ str r2, [r3, #2056] ++ mov r2, #197 ++ str r2, [r3, #2056] ++.L1571: ++ mvn r3, #0 ++ mov r9, #1 ++ str r3, [sp, #4] ++ lsl r3, r1, #8 ++ str r3, [sp, #20] ++.L1573: ++ ldr r3, .L1598+4 ++ ldrb r3, [r3, #1721] @ zero_extendqisi2 ++ add r3, r3, #1 ++ cmp r9, r3 ++ bcc .L1582 ++ ldr r10, [sp, #4] ++.L1581: ++ ldrb r2, [r4, #84] @ zero_extendqisi2 ++ mov r1, #0 ++ mov r0, r7 ++ sub r2, r2, #67 ++ cmp r2, #1 ++ bhi .L1583 ++ bl SandiskSetRRPara ++.L1584: ++ ldr r3, [sp, #16] ++ mov r2, #255 ++ add r6, r6, r3 ++ str r2, [r6, #2056] ++ ldrb r2, [r4, #2316] @ zero_extendqisi2 ++ add r2, r2, r2, lsl #1 ++ cmp r10, r2, asr #2 ++ bcc .L1585 ++ cmn r10, #1 ++ movne r10, #256 ++.L1585: ++ mov r0, r8 ++ bl NandcWaitFlashReady ++ cmp r5, #0 ++ beq .L1570 ++ mov r0, #4 ++ bl NandcSetDdrMode ++.L1570: ++ mov r0, r10 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1582: ++ ldrb r3, [r4, #84] @ zero_extendqisi2 ++ mov r0, r7 ++ uxtb r1, r9 ++ sub r3, r3, #67 ++ cmp r3, #1 ++ bhi .L1574 ++ bl SandiskSetRRPara ++.L1575: ++ ldrb r3, [r4, #84] @ zero_extendqisi2 ++ cmp r3, #34 ++ bne .L1576 ++ ldr r3, .L1598+4 ++ ldrb r3, [r3, #1721] @ zero_extendqisi2 ++ sub r3, r3, #3 ++ cmp r9, r3 ++ ldreq r3, [sp, #20] ++ moveq r2, #179 ++ addeq r3, r6, r3 ++ streq r2, [r3, #2056] ++.L1576: ++ ldr r3, [sp, #16] ++ mov r2, #38 ++ cmp r5, #0 ++ add r3, r6, r3 ++ str r2, [r3, #2056] ++ mov r2, #93 ++ str r2, [r3, #2056] ++ beq .L1577 ++ mov r0, #4 ++ bl NandcSetDdrMode ++ mov r3, fp ++ ldr r2, [sp, #8] ++ ldr r1, [sp, #12] ++ mov r0, r8 ++ bl FlashReadRawPage ++ mov r10, r0 ++ mov r0, #0 ++ bl NandcSetDdrMode ++.L1578: ++ cmn r10, #1 ++ beq .L1579 ++ ldrb r2, [r4, #2316] @ zero_extendqisi2 ++ ldr r3, [sp, #4] ++ add r2, r2, r2, lsl #1 ++ cmn r3, #1 ++ moveq r3, r10 ++ cmp r10, r2, asr #2 ++ str r3, [sp, #4] ++ bcc .L1581 ++ mov fp, #0 ++ str fp, [sp, #8] ++.L1579: ++ add r9, r9, #1 ++ b .L1573 ++.L1574: ++ bl ToshibaSetRRPara ++ b .L1575 ++.L1577: ++ mov r3, fp ++ ldr r2, [sp, #8] ++ ldr r1, [sp, #12] ++ mov r0, r8 ++ bl FlashReadRawPage ++ mov r10, r0 ++ b .L1578 ++.L1583: ++ bl ToshibaSetRRPara ++ b .L1584 ++.L1599: ++ .align 2 ++.L1598: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size ToshibaReadRetrial, .-ToshibaReadRetrial ++ .align 2 ++ .global SamsungReadRetrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SamsungReadRetrial, %function ++SamsungReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r0 ++ ldr r5, .L1614 ++ mov r9, r3 ++ mov fp, r1 ++ mov r10, r2 ++ bl NandcWaitFlashReady ++ mov r7, #1 ++ mvn r4, #0 ++ add r3, r5, r8, lsl #3 ++ ldrb r6, [r3, #4] @ zero_extendqisi2 ++ add r3, r6, #8 ++ ldr r6, [r5, r8, lsl #3] ++ add r6, r6, r3, lsl #8 ++.L1601: ++ ldr r3, .L1614+4 ++ ldrb r3, [r3, #1721] @ zero_extendqisi2 ++ add r3, r3, #1 ++ cmp r7, r3 ++ bcc .L1605 ++.L1604: ++ mov r1, #0 ++ mov r0, r6 ++ bl SamsungSetRRPara ++ ldrb r3, [r5, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L1600 ++ cmn r4, #1 ++ movne r4, #256 ++.L1600: ++ mov r0, r4 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1605: ++ uxtb r1, r7 ++ mov r0, r6 ++ bl SamsungSetRRPara ++ mov r3, r9 ++ mov r2, r10 ++ mov r1, fp ++ mov r0, r8 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L1602 ++ ldrb r3, [r5, #2316] @ zero_extendqisi2 ++ cmn r4, #1 ++ moveq r4, r0 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L1608 ++ mov r9, #0 ++ mov r10, r9 ++.L1602: ++ add r7, r7, #1 ++ b .L1601 ++.L1608: ++ mov r4, r0 ++ b .L1604 ++.L1615: ++ .align 2 ++.L1614: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size SamsungReadRetrial, .-SamsungReadRetrial ++ .align 2 ++ .global MicronReadRetrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type MicronReadRetrial, %function ++MicronReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 32 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++.L1618: ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r3 ++ ldr r3, .L1642 ++ mov r10, r2 ++ .pad #44 ++ sub sp, sp, #44 ++ mov r5, r0 ++ ldr fp, .L1642 ++ ldrb r2, [r3, #2316] @ zero_extendqisi2 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ str r1, [sp, #28] ++ cmp r3, #0 ++ ldrne r3, .L1642+4 ++ addeq r2, r2, r2, lsl #1 ++ asreq r3, r2, #2 ++ smullne r2, r3, r2, r3 ++ str r3, [sp, #12] ++ mov r3, #0 ++ str r3, [sp, #16] ++ add r3, fp, r0, lsl #3 ++ str r3, [sp, #36] ++.L1628: ++ mov r0, r5 ++ mov r9, #0 ++ bl NandcWaitFlashReady ++ ldr r3, [fp, r5, lsl #3] ++ mvn r4, #0 ++ str r3, [sp, #20] ++ ldr r3, [sp, #36] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ str r3, [sp, #24] ++ ldr r2, [sp, #24] ++ ldr r3, [sp, #20] ++ add r6, r3, r2, lsl #8 ++.L1619: ++ ldr r3, .L1642+8 ++ ldrb r3, [r3, #1721] @ zero_extendqisi2 ++ cmp r9, r3 ++ bcc .L1623 ++.L1622: ++ ldr r3, [sp, #20] ++ mov r0, #200 ++ ldr r2, [sp, #24] ++ add r6, r3, r2, lsl #8 ++ mov r3, #239 ++ str r3, [r6, #2056] ++ mov r3, #137 ++ str r3, [r6, #2052] ++ bl ndelay ++ mov r3, #0 ++ str r3, [r6, #2048] ++ str r3, [r6, #2048] ++ str r3, [r6, #2048] ++ str r3, [r6, #2048] ++ ldr r3, [sp, #12] ++ cmp r4, r3 ++ bcc .L1624 ++ cmn r4, #1 ++ movne r4, #256 ++.L1624: ++ cmn r4, #1 ++ movne r6, #0 ++ moveq r6, #1 ++ cmp r4, #256 ++ movne r1, r6 ++ orreq r1, r6, #1 ++ cmp r1, #0 ++ beq .L1625 ++ mov r3, r9 ++ str r4, [sp] ++ ldr r2, [sp, #28] ++ mov r1, r9 ++ ldr r0, .L1642+12 ++ bl printk ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ bne .L1626 ++ ldrb r3, [fp, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ moveq r6, #0 ++ andne r6, r6, #1 ++ cmp r6, #0 ++ beq .L1616 ++ mov r1, #3 ++ mov r0, r5 ++ bl micron_auto_read_calibration_config ++ mov r3, #1 ++ str r3, [sp, #16] ++ b .L1628 ++.L1623: ++ mov r3, #239 ++ mov r0, #200 ++ str r3, [r6, #2056] ++ mov r3, #137 ++ str r3, [r6, #2052] ++ mov r8, #0 ++ bl ndelay ++ add r3, r9, #1 ++ mov r2, r10 ++ str r3, [r6, #2048] ++ mov r0, r5 ++ str r8, [r6, #2048] ++ str r3, [sp, #32] ++ mov r3, r7 ++ str r8, [r6, #2048] ++ ldr r1, [sp, #28] ++ str r8, [r6, #2048] ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L1620 ++ ldr r3, [sp, #12] ++ cmn r4, #1 ++ moveq r4, r0 ++ cmp r0, r3 ++ bcc .L1630 ++ mov r7, r8 ++ mov r10, r8 ++.L1620: ++ ldr r9, [sp, #32] ++ b .L1619 ++.L1630: ++ mov r4, r0 ++ mov r7, r8 ++ mov r10, r8 ++ b .L1622 ++.L1626: ++ mov r1, #0 ++ mov r0, r5 ++ bl micron_auto_read_calibration_config ++ cmn r4, #1 ++ movne r4, #256 ++.L1616: ++ mov r0, r4 ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1625: ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ beq .L1616 ++ mov r0, r5 ++ mov r4, #256 ++ bl micron_auto_read_calibration_config ++ b .L1616 ++.L1643: ++ .align 2 ++.L1642: ++ .word .LANCHOR0 ++ .word 1431655766 ++ .word .LANCHOR2 ++ .word .LC94 ++ .fnend ++ .size MicronReadRetrial, .-MicronReadRetrial ++ .align 2 ++ .global HynixReadRetrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type HynixReadRetrial, %function ++HynixReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r9, r3 ++ ldr r5, .L1662 ++ mov r8, #0 ++ mvn r6, #0 ++ mov fp, r2 ++ mov r7, r0 ++ str r1, [sp, #4] ++ ldr r3, [r5, #48] ++ add r2, r5, r0 ++ ldrb r4, [r2, #1228] @ zero_extendqisi2 ++ ldrb r10, [r5, #1218] @ zero_extendqisi2 ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r3, r3, #7 ++ cmp r3, #1 ++ ldrbls r4, [r2, #1236] @ zero_extendqisi2 ++ bl NandcWaitFlashReady ++.L1646: ++ cmp r8, r10 ++ bcc .L1651 ++.L1650: ++ ldr r3, [r5, #48] ++ add r7, r5, r7 ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r3, r3, #7 ++ cmp r3, #1 ++ ldrb r3, [r5, #2316] @ zero_extendqisi2 ++ strbls r4, [r7, #1236] ++ strbhi r4, [r7, #1228] ++ add r3, r3, r3, lsl #1 ++ cmp r6, r3, asr #2 ++ bcc .L1644 ++ cmn r6, #1 ++ movne r6, #256 ++.L1644: ++ mov r0, r6 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1651: ++ add r4, r4, #1 ++ ldr r2, .L1662+4 ++ uxtb r4, r4 ++ ldrb r1, [r5, #1217] @ zero_extendqisi2 ++ mov r0, r7 ++ cmp r10, r4 ++ movls r4, #0 ++ mov r3, r4 ++ bl HynixSetRRPara ++ mov r3, r9 ++ mov r2, fp ++ ldr r1, [sp, #4] ++ mov r0, r7 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L1648 ++ ldrb r3, [r5, #2316] @ zero_extendqisi2 ++ cmn r6, #1 ++ moveq r6, r0 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L1655 ++ mov r9, #0 ++ mov fp, r9 ++.L1648: ++ add r8, r8, #1 ++ b .L1646 ++.L1655: ++ mov r6, r0 ++ b .L1650 ++.L1663: ++ .align 2 ++.L1662: ++ .word .LANCHOR0 ++ .word .LANCHOR0+1220 ++ .fnend ++ .size HynixReadRetrial, .-HynixReadRetrial ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type samsung_read_retrial, %function ++samsung_read_retrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ mov r10, r0 ++ mov fp, r2 ++ mov r9, r3 ++ str r1, [sp, #16] ++ bl NandcWaitFlashReady ++ ldr r3, .L1694 ++ ldr r2, [r3, r10, lsl #3] ++ str r3, [sp, #20] ++ str r2, [sp, #12] ++ add r2, r3, r10, lsl #3 ++ ldrb r6, [r2, #4] @ zero_extendqisi2 ++ ldrb r2, [r3, #2232] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L1665 ++ ldr r3, [sp, #12] ++ lsl r8, r6, #8 ++ mvn r4, #0 ++ mov r7, #1 ++ add r5, r3, r8 ++.L1669: ++ mov r3, #239 ++ mov r6, #0 ++ str r3, [r5, #2056] ++ mov r3, #141 ++ str r3, [r5, #2052] ++ mov r2, fp ++ ldr r3, .L1694+4 ++ mov r0, r10 ++ ldr r1, [sp, #16] ++ ldrsb r3, [r7, r3] ++ str r3, [r5, #2048] ++ mov r3, r9 ++ str r6, [r5, #2048] ++ str r6, [r5, #2048] ++ str r6, [r5, #2048] ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L1666 ++ ldr r3, [sp, #20] ++ cmn r4, #1 ++ moveq r4, r0 ++ ldrb r3, [r3, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L1677 ++ mov r9, r6 ++ mov fp, r6 ++.L1666: ++ add r7, r7, #1 ++ cmp r7, #26 ++ bne .L1669 ++.L1668: ++ ldr r3, [sp, #12] ++ add r8, r3, r8 ++ mov r3, #239 ++ str r3, [r8, #2056] ++ mov r3, #141 ++.L1693: ++ str r3, [r5, #2052] ++ mov r3, #0 ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ ldr r3, .L1694 ++ ldrb r3, [r3, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L1675 ++ cmn r4, #1 ++ movne r4, #256 ++.L1675: ++ cmn r4, #1 ++ cmpne r4, #256 ++ bne .L1676 ++ str r4, [sp] ++ mov r3, r7 ++ ldr r2, [sp, #16] ++ mov r1, r7 ++ ldr r0, .L1694+8 ++ bl printk ++.L1676: ++ mov r0, r10 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1677: ++ mov r4, r0 ++ b .L1668 ++.L1665: ++ ldr r3, [sp, #12] ++ lsl r6, r6, #8 ++ ldr r8, .L1694+12 ++ mvn r4, #0 ++ mov r7, #1 ++ add r5, r3, r6 ++.L1674: ++ mov r3, #239 ++ mov r2, fp ++ str r3, [r5, #2056] ++ mov r3, #137 ++ str r3, [r5, #2052] ++ mov r0, r10 ++ ldrb r3, [r8, #4] @ zero_extendqisi2 ++ ldr r1, [sp, #16] ++ str r3, [r5, #2048] ++ ldrb r3, [r8, #5] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ ldrb r3, [r8, #6] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ ldrb r3, [r8, #7] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ mov r3, r9 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L1671 ++ ldr r3, .L1694 ++ cmn r4, #1 ++ moveq r4, r0 ++ ldrb r3, [r3, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L1678 ++ mov r9, #0 ++ mov fp, r9 ++.L1671: ++ add r7, r7, #1 ++ add r8, r8, #4 ++ cmp r7, #26 ++ bne .L1674 ++.L1673: ++ ldr r3, [sp, #12] ++ add r6, r3, r6 ++ mov r3, #239 ++ str r3, [r6, #2056] ++ mov r3, #137 ++ b .L1693 ++.L1678: ++ mov r4, r0 ++ b .L1673 ++.L1695: ++ .align 2 ++.L1694: ++ .word .LANCHOR0 ++ .word .LANCHOR3+11 ++ .word .LC95 ++ .word .LANCHOR3+37 ++ .fnend ++ .size samsung_read_retrial, .-samsung_read_retrial ++ .align 2 ++ .global FlashProgPage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgPage, %function ++FlashProgPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r8, r3 ++ ldr r3, .L1700 ++ subs r4, r0, #0 ++ mov r5, r1 ++ mov r7, r2 ++ ldrb r6, [r3, #477] @ zero_extendqisi2 ++ bne .L1697 ++ ldr r1, .L1700+4 ++ ldrb r3, [r1, #37] @ zero_extendqisi2 ++ ldr r0, [r1, #40] ++ mul r0, r0, r3 ++ cmp r0, r5 ++ bls .L1697 ++ ldrb r3, [r1, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ movne r6, #4 ++.L1697: ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashProgFirstCmd ++ mov r3, r7 ++ mov r2, r6 ++ str r8, [sp] ++ mov r1, #1 ++ mov r0, r4 ++ bl NandcXferData ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashProgSecondCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashReadStatus ++ mov r1, r0 ++ mov r0, r4 ++ bl NandcFlashDeCs ++ and r0, r1, #1 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1701: ++ .align 2 ++.L1700: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgPage, .-FlashProgPage ++ .align 2 ++ .global FlashSavePhyInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashSavePhyInfo, %function ++FlashSavePhyInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r4, .L1716 ++ ldr r5, .L1716+4 ++ ldr r3, [r4, #1696] ++ ldrb r0, [r4, #1722] @ zero_extendqisi2 ++ ldr r8, .L1716+8 ++ str r3, [r4, #1708] ++ bl FlashBchSel ++ mov r2, #2048 ++ mov r1, #0 ++ ldr r0, [r4, #1696] ++ bl ftl_memset ++ ldr r3, [r4, #1708] ++ mov r2, #32 ++ ldr r1, .L1716+12 ++ str r8, [r3] ++ ldr r0, [r4, #1708] ++ ldrb r3, [r5, #2234] @ zero_extendqisi2 ++ add r0, r0, #16 ++ strh r3, [r0, #-4] @ movhi ++ ldrb r3, [r5, #37] @ zero_extendqisi2 ++ strh r3, [r0, #-2] @ movhi ++ ldrb r3, [r5, #2256] @ zero_extendqisi2 ++ str r3, [r0, #1060] ++ bl ftl_memcpy ++ ldr r0, [r4, #1708] ++ mov r2, #8 ++ ldr r1, .L1716+16 ++ add r0, r0, #80 ++ bl ftl_memcpy ++ ldr r0, [r4, #1708] ++ mov r2, #32 ++ ldr r1, .L1716+20 ++ add r0, r0, #96 ++ bl ftl_memcpy ++ ldr r0, [r4, #1708] ++ mov r2, #32 ++ ldr r1, .L1716+24 ++ add r0, r0, #160 ++ bl ftl_memcpy ++ ldr r0, [r4, #1708] ++ mov r2, #32 ++ add r1, r5, #52 ++ add r0, r0, #192 ++ bl ftl_memcpy ++ ldr r0, [r4, #1708] ++ mov r2, #852 ++ add r1, r5, #1216 ++ add r0, r0, #224 ++ bl ftl_memcpy ++ ldr r6, [r4, #1708] ++ movw r1, #2036 ++ add r0, r6, #12 ++ bl js_hash ++ movw r3, #1592 ++ str r0, [r6, #8] ++ str r3, [r6, #4] ++ mov r6, #0 ++ ldr r3, [r4, #1724] ++ mov r7, r6 ++ mov r0, #0 ++ str r3, [r4, #1708] ++ bl flash_enter_slc_mode ++.L1708: ++ ldr r1, [r5, #40] ++ mov r2, #0 ++ mov r0, r2 ++ mul r1, r1, r7 ++ bl FlashEraseBlock ++ ldrb r9, [r5, #152] @ zero_extendqisi2 ++ cmp r9, #0 ++ beq .L1703 ++ mov r9, #0 ++.L1704: ++ ldr r1, [r5, #40] ++ mov r3, #0 ++ ldr r2, [r4, #1696] ++ mov r0, r3 ++ mla r1, r1, r7, r9 ++ add r9, r9, #1 ++ bl FlashProgPage ++ cmp r9, #10 ++ bne .L1704 ++.L1705: ++ ldr r1, [r5, #40] ++ mov r3, #0 ++ ldr r2, [r4, #1724] ++ mov r0, r3 ++ add r10, r7, #1 ++ mul r1, r1, r7 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L1706 ++ ldr r9, [r4, #1708] ++ ldr r3, [r9] ++ cmp r3, r8 ++ bne .L1706 ++ movw r1, #2036 ++ add r0, r9, #12 ++ bl js_hash ++ ldr r3, [r9, #8] ++ cmp r3, r0 ++ bne .L1706 ++ ldr r3, [r5, #40] ++ cmp r6, #1 ++ str r10, [r4, #1716] ++ mul r7, r7, r3 ++ str r7, [r4, #1712] ++ beq .L1709 ++ mov r6, #1 ++.L1706: ++ cmp r10, #4 ++ mov r7, r10 ++ bne .L1708 ++.L1707: ++ mov r0, #0 ++ bl flash_exit_slc_mode ++ clz r0, r6 ++ lsr r0, r0, #5 ++ rsb r0, r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1703: ++ ldr r1, [r5, #40] ++ mov r3, r9 ++ ldr r2, [r4, #1696] ++ mov r0, r9 ++ mul r1, r1, r7 ++ bl FlashProgPage ++ ldr r1, [r5, #40] ++ mov r3, r9 ++ ldr r2, [r4, #1696] ++ mov r0, r9 ++ mul r1, r1, r7 ++ add r1, r1, #1 ++ bl FlashProgPage ++ b .L1705 ++.L1709: ++ mov r6, #2 ++ b .L1707 ++.L1717: ++ .align 2 ++.L1716: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word 1312902724 ++ .word .LANCHOR0+2072 ++ .word .LANCHOR0+2236 ++ .word .LANCHOR0+1180 ++ .word .LANCHOR1+468 ++ .fnend ++ .size FlashSavePhyInfo, .-FlashSavePhyInfo ++ .align 2 ++ .global FlashReadIdbDataRaw ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadIdbDataRaw, %function ++FlashReadIdbDataRaw: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r3, #60 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r4, .L1737 ++ mov r10, r0 ++ strb r3, [sp, #12] ++ mov r3, #40 ++ strb r3, [sp, #13] ++ mov r3, #24 ++ strb r3, [sp, #14] ++ mov r3, #16 ++ strb r3, [sp, #15] ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ str r3, [sp, #4] ++ ldr r3, [r4, #2252] ++ cmp r3, #0 ++ beq .L1719 ++ mov r0, #0 ++ bl flash_enter_slc_mode ++.L1719: ++ ldr r6, .L1737+4 ++ mvn r8, #0 ++ mov r5, #2 ++ mov r2, #2048 ++ mov r1, #0 ++ mov r0, r10 ++ bl ftl_memset ++.L1720: ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ cmp r5, r3 ++ bcc .L1725 ++.L1724: ++ ldr r0, [sp, #4] ++ bl FlashBchSel ++ ldr r3, [r4, #2252] ++ cmp r3, #0 ++ beq .L1718 ++ mov r0, #0 ++ bl flash_exit_slc_mode ++.L1718: ++ mov r0, r8 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1725: ++ mov r7, #0 ++ add fp, sp, #12 ++.L1722: ++ ldrb r9, [r7, fp] @ zero_extendqisi2 ++ mov r0, r9 ++ bl FlashBchSel ++ ldr r1, [r4, #40] ++ mov r3, #0 ++ ldr r2, [r6, #1696] ++ mov r0, r3 ++ mul r1, r1, r5 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ bne .L1721 ++ add r7, r7, #1 ++ cmp r7, #4 ++ bne .L1722 ++.L1723: ++ add r5, r5, #1 ++ b .L1720 ++.L1728: ++ mov r8, #0 ++ b .L1724 ++.L1721: ++ ldr r3, [r6, #1696] ++ ldr r2, .L1737+8 ++ ldr r3, [r3] ++ cmp r3, r2 ++ bne .L1723 ++ mov r1, r9 ++ ldr r0, .L1737+12 ++ bl printk ++ mov r2, #2048 ++ ldr r1, [r6, #1696] ++ mov r0, r10 ++ bl ftl_memcpy ++ ldr r3, [r6, #1696] ++ ldr r3, [r3, #512] ++ strb r3, [r4, #37] ++ ldr r3, [r6, #1716] ++ cmp r5, r3 ++ bcs .L1728 ++ str r5, [r6, #1716] ++ mov r8, #0 ++ bl FlashSavePhyInfo ++ b .L1723 ++.L1738: ++ .align 2 ++.L1737: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word -52655045 ++ .word .LC96 ++ .fnend ++ .size FlashReadIdbDataRaw, .-FlashReadIdbDataRaw ++ .align 2 ++ .global FlashInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashInit, %function ++FlashInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r0 ++ ldr r5, .L1837 ++ .pad #28 ++ sub sp, sp, #28 ++ mov r0, #32768 ++ mov r6, #0 ++ bl ftl_malloc ++ str r0, [r5, #1696] ++ mov r0, #32768 ++ bl ftl_malloc ++ str r0, [r5, #1724] ++ mov r0, #4096 ++ bl ftl_dma32_malloc ++ str r0, [r5, #1728] ++ mov r0, #32768 ++ bl ftl_malloc ++ ldr r4, .L1837+4 ++ mov r8, r6 ++ str r0, [r5, #1732] ++ mov r0, #4096 ++ bl ftl_dma32_malloc ++ ldr fp, .L1837+8 ++ mov r3, #50 ++ str r0, [r5, #1736] ++ mov r0, r7 ++ ldr r7, .L1837+12 ++ strb r3, [r4, #37] ++ strb r3, [r5, #1720] ++ mov r3, #128 ++ str r3, [r4, #40] ++ mov r3, #60 ++ str r6, [r5, #1716] ++ strb r6, [r4, #2256] ++ str r6, [r5, #1700] ++ strb r6, [r4, #36] ++ strb r6, [r5, #1740] ++ strb r3, [r5, #1722] ++ bl NandcInit ++.L1745: ++ add r2, r4, r6, lsl #3 ++ uxtb r9, r6 ++ ldr r10, [r4, r6, lsl #3] ++ ldrb r2, [r2, #4] @ zero_extendqisi2 ++ mov r0, r9 ++ str r2, [sp, #20] ++ bl FlashReset ++ mov r0, r9 ++ bl NandcFlashCs ++ ldr r2, [sp, #20] ++ mov r3, #144 ++ mov r0, #200 ++ add r10, r10, r2, lsl #8 ++ str r3, [r10, #2056] ++ str r8, [r10, #2052] ++ bl ndelay ++ ldr r2, [r10, #2048] ++ uxtb r2, r2 ++ strb r2, [r7] ++ cmp r2, #44 ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #1] ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #2] ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #3] ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #4] ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #5] ++ bne .L1740 ++ mov r2, #239 ++ mov r0, #200 ++ str r2, [r10, #2056] ++ mov r2, #1 ++ str r2, [r10, #2052] ++ bl ndelay ++ mov r2, #4 ++ str r2, [r10, #2048] ++ str r8, [r10, #2048] ++ str r8, [r10, #2048] ++ str r8, [r10, #2048] ++.L1740: ++ mov r0, r9 ++ bl NandcFlashDeCs ++ ldrb r2, [r7] @ zero_extendqisi2 ++ sub r3, r2, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L1741 ++ ldrb r1, [r7, #5] @ zero_extendqisi2 ++ mov r0, fp ++ ldrb r3, [r7, #1] @ zero_extendqisi2 ++ str r1, [sp, #12] ++ ldrb r1, [r7, #4] @ zero_extendqisi2 ++ str r1, [sp, #8] ++ ldrb r1, [r7, #3] @ zero_extendqisi2 ++ str r1, [sp, #4] ++ ldrb r1, [r7, #2] @ zero_extendqisi2 ++ str r1, [sp] ++ add r1, r6, #1 ++ bl printk ++.L1741: ++ cmp r6, #0 ++ bne .L1742 ++ ldrb r3, [r4, #2072] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L1792 ++ ldrb r3, [r4, #2073] @ zero_extendqisi2 ++ cmp r3, #255 ++ beq .L1792 ++.L1742: ++ ldrb r3, [r7] @ zero_extendqisi2 ++ add r6, r6, #1 ++ add r7, r7, #8 ++ cmp r3, #181 ++ moveq r3, #44 ++ strbeq r3, [r7, #-8] ++ cmp r6, #4 ++ bne .L1745 ++ ldrb r3, [r4, #2072] @ zero_extendqisi2 ++ cmp r3, #173 ++ beq .L1746 ++ ldr r0, [r4, #2260] ++ bl NandcSetDdrMode ++.L1746: ++ mov r2, #852 ++ mov r1, #0 ++ ldr r0, .L1837+16 ++ bl ftl_memset ++ ldr r6, .L1837+20 ++ ldr r2, .L1837+24 ++ ldr r0, [r4, #2268] ++ add r3, r2, #468 ++ cmp r0, r6 ++ str r3, [r4, #48] ++ mov r3, #0 ++ strb r3, [r4, #44] ++ bne .L1747 ++ ldrb r3, [r2, #487] @ zero_extendqisi2 ++ cmp r3, #50 ++ movne r3, #1 ++ strne r3, [r4, #2252] ++.L1747: ++ ldrb r3, [r4, #2073] @ zero_extendqisi2 ++ cmp r3, #241 ++ cmpne r3, #161 ++ and ip, r3, #253 ++ moveq r1, #1 ++ movne r1, #0 ++ cmp r3, #218 ++ orreq r1, r1, #1 ++ cmp ip, #209 ++ orreq r1, r1, #1 ++ cmp r1, #0 ++ bne .L1748 ++ cmp r3, #220 ++ bne .L1749 ++ ldrb r1, [r4, #2075] @ zero_extendqisi2 ++ cmp r1, #149 ++ bne .L1749 ++.L1748: ++ mov ip, #16 ++ mov r1, #1 ++ strb ip, [r4, #37] ++ strb ip, [r5, #1722] ++ ldrb ip, [r4, #2072] @ zero_extendqisi2 ++ strb r1, [r4, #36] ++ strb r3, [r2, #3414] ++ cmp ip, #152 ++ strb ip, [r2, #3413] ++ bne .L1751 ++ ldrb ip, [r4, #2076] @ zero_extendqisi2 ++ lsrs ip, ip, #7 ++ moveq r1, #24 ++ strbne r1, [r5, #1740] ++ strbeq r1, [r5, #1722] ++.L1751: ++ movw r1, #2049 ++ cmp r0, r1 ++ cmpne r0, r6 ++ moveq r1, #16 ++ strbeq r1, [r5, #1722] ++ cmp r3, #218 ++ bne .L1755 ++ ldr r3, .L1837+28 ++ mov r1, #2048 ++ strh r1, [r3, #14] @ movhi ++ mvn r3, #37 ++.L1831: ++ strb r3, [r2, #3414] ++.L1756: ++ mov r2, #32 ++ ldr r1, .L1837+32 ++ ldr r0, .L1837+36 ++ bl ftl_memcpy ++ ldr r1, .L1837+28 ++ mov r2, #32 ++ sub r0, r1, #2944 ++ bl ftl_memcpy ++.L1749: ++ ldrb r3, [r4, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1759 ++ bl FlashLoadPhyInfoInRam ++ cmp r0, #0 ++ bne .L1761 ++ ldr r3, [r4, #48] ++ ldrh r3, [r3, #16] ++ lsr r3, r3, #8 ++ tst r3, #1 ++ and r0, r3, #7 ++ strb r0, [r4, #2233] ++ bne .L1761 ++ mov r3, #1 ++ strb r3, [r4, #2256] ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl NandcSetMode ++.L1761: ++ ldr r3, [r4, #48] ++ ldrb r3, [r3, #26] @ zero_extendqisi2 ++ strb r3, [r4, #152] ++ bl FlashLoadPhyInfo ++ cmp r0, #0 ++ beq .L1759 ++ ldr r3, [r4, #2260] ++ cmp r3, #0 ++ beq .L1764 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++.L1832: ++ bl NandcSetMode ++ bl FlashLoadPhyInfo ++ cmp r0, #0 ++ beq .L1759 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++ ldr r3, [r4, #48] ++ ldr r0, .L1837+40 ++ ldrh r1, [r3, #14] ++ bl printk ++ bl FlashLoadPhyInfoInRam ++ cmn r0, #1 ++ beq .L1739 ++ bl FlashDieInfoInit ++ ldr r3, [r4, #48] ++ ldrb r0, [r3, #19] @ zero_extendqisi2 ++ bl FlashGetReadRetryDefault ++ ldr r3, .L1837+44 ++ ldr r2, [r4, #48] ++ ldrh r3, [r3, #-2] ++ ldrb r1, [r2, #9] @ zero_extendqisi2 ++ add r3, r3, #4080 ++ add r3, r3, #15 ++ cmp r1, r3, asr #12 ++ ldrh r3, [r2, #14] ++ blt .L1766 ++ add r0, r3, #255 ++ cmp r1, r0, asr #8 ++ bge .L1767 ++.L1766: ++ bic r3, r3, #255 ++ strh r3, [r2, #14] @ movhi ++.L1767: ++ ldrb r3, [r4, #2233] @ zero_extendqisi2 ++ tst r3, #6 ++ beq .L1768 ++ bl FlashSavePhyInfo ++ mov r0, #0 ++ bl flash_enter_slc_mode ++ ldr r1, [r5, #1712] ++ mov r0, #0 ++ bl FlashDdrParaScan ++ mov r0, #0 ++ bl flash_exit_slc_mode ++.L1768: ++ bl FlashSavePhyInfo ++.L1759: ++ ldr r7, [r4, #48] ++ ldrb r3, [r7, #26] @ zero_extendqisi2 ++ ldrb r1, [r7, #12] @ zero_extendqisi2 ++ ldrh r0, [r7, #10] ++ strb r3, [r4, #152] ++ ldrh r3, [r7, #16] ++ ubfx r2, r3, #7, #1 ++ strb r2, [r4, #44] ++ ubfx r2, r3, #3, #1 ++ strb r2, [r5, #1741] ++ ubfx r2, r3, #4, #1 ++ ubfx r3, r3, #8, #3 ++ strb r2, [r4, #2244] ++ strb r3, [r4, #2233] ++ mov r3, #0 ++ str r3, [r5, #1704] ++ bl __aeabi_idiv ++ mov r1, r0 ++ ldrb r0, [r7, #18] @ zero_extendqisi2 ++ bl BuildFlashLsbPageTable ++ bl FlashDieInfoInit ++ ldr r3, [r4, #48] ++ ldrh r2, [r3, #16] ++ tst r2, #64 ++ beq .L1770 ++ ldrb r0, [r3, #19] @ zero_extendqisi2 ++ ldrb r3, [r4, #1217] @ zero_extendqisi2 ++ strb r0, [r4, #84] ++ strb r3, [r4, #85] ++ ldrb r3, [r4, #1218] @ zero_extendqisi2 ++ strb r3, [r5, #1721] ++ sub r3, r0, #1 ++ cmp r3, #7 ++ bhi .L1771 ++ ldr r3, .L1837+48 ++ str r3, [r5, #1704] ++ sub r3, r0, #5 ++ cmp r0, #8 ++ cmpne r3, #1 ++ movls r3, #1 ++ strls r3, [r4, #2308] ++ cmp r0, #7 ++ ldr r3, .L1837+16 ++ beq .L1793 ++ cmp r0, #8 ++ addne r3, r3, #20 ++ bne .L1773 ++.L1793: ++ add r3, r3, #28 ++.L1773: ++ sub r1, r3, #1 ++ mov r2, #0 ++ add r3, r3, #31 ++.L1775: ++ ldrsb ip, [r1, #1]! ++ cmp ip, #0 ++ addeq r2, r2, #1 ++ cmp r3, r1 ++ bne .L1775 ++ cmp r2, #27 ++ bls .L1770 ++ bl FlashGetReadRetryDefault ++ bl FlashSavePhyInfo ++.L1770: ++ ldr r3, [r4, #2268] ++ cmp r3, r6 ++ bne .L1785 ++ ldrb r2, [r4, #152] @ zero_extendqisi2 ++ cmp r2, #0 ++ ldrne r2, [r4, #48] ++ movne r1, #0 ++ strbne r1, [r2, #18] ++.L1785: ++ ldrb r2, [r4, #2072] @ zero_extendqisi2 ++ cmp r2, #44 ++ bne .L1786 ++ ldrb r2, [r4, #2256] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L1786 ++ cmp r3, r6 ++ bne .L1787 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1786 ++.L1787: ++ mov r3, #0 ++ mov r0, #1 ++ strb r3, [r4, #2256] ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++.L1786: ++ ldrb r3, [r4, #2233] @ zero_extendqisi2 ++ tst r3, #6 ++ beq .L1788 ++ ldrb r2, [r4, #2256] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L1789 ++ tst r3, #1 ++ bne .L1788 ++.L1789: ++ mov r0, #0 ++ bl flash_enter_slc_mode ++ ldr r1, [r5, #1712] ++ mov r0, #0 ++ bl FlashDdrParaScan ++ mov r0, #0 ++ bl flash_exit_slc_mode ++.L1788: ++ ldr r3, [r4, #48] ++ mov r6, #16 ++ ldrb r0, [r3, #20] @ zero_extendqisi2 ++ bl FlashBchSel ++ ldr r0, .L1837+52 ++ bl FlashReadIdbDataRaw ++ ldr r0, .L1837+56 ++ strb r6, [r4, #37] ++ bl FlashTimingCfg ++ ldr r5, [r4, #48] ++ ldrb r2, [r4, #2073] @ zero_extendqisi2 ++ ldrb r3, [r5, #12] @ zero_extendqisi2 ++ ldrh r7, [r5, #14] ++ strh r3, [r4, #132] @ movhi ++ ldrb r3, [r5, #7] @ zero_extendqisi2 ++ str r3, [r4, #128] ++ lsl r3, r2, r6 ++ orr r3, r3, r2, lsl #8 ++ ldrb r2, [r4, #2072] @ zero_extendqisi2 ++ orr r3, r3, r2 ++ ldrb r2, [r4, #2075] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #24 ++ str r3, [r4, #124] ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ strh r3, [r4, #134] @ movhi ++ ldrb r3, [r5, #13] @ zero_extendqisi2 ++ strh r7, [r4, #138] @ movhi ++ strh r3, [r4, #136] @ movhi ++ ldrh r3, [r5, #10] ++ strh r3, [r4, #140] @ movhi ++ ldrb r1, [r5, #12] @ zero_extendqisi2 ++ ldrh r0, [r5, #10] ++ bl __aeabi_idiv ++ strh r0, [r4, #142] @ movhi ++ ldrb r2, [r5, #9] @ zero_extendqisi2 ++ strh r2, [r4, #144] @ movhi ++ ldrh r1, [r5, #10] ++ ldrb r3, [r5, #9] @ zero_extendqisi2 ++ smulbb r3, r3, r1 ++ mov r1, #512 ++ strh r1, [r4, #148] @ movhi ++ ldrb r1, [r4, #37] @ zero_extendqisi2 ++ uxth r3, r3 ++ strh r1, [r4, #150] @ movhi ++ ldrb r1, [r4, #36] @ zero_extendqisi2 ++ strh r3, [r4, #146] @ movhi ++ cmp r1, #1 ++ bne .L1790 ++ lsl r3, r3, #1 ++ lsr r1, r7, #1 ++ lsl r2, r2, #1 ++ strb r6, [r4, #37] ++ strh r3, [r4, #146] @ movhi ++ mov r3, #8 ++ strh r1, [r4, #138] @ movhi ++ strh r2, [r4, #144] @ movhi ++ strh r3, [r4, #150] @ movhi ++.L1790: ++ ldrb r0, [r5, #20] @ zero_extendqisi2 ++ bl FlashBchSel ++ bl ftl_flash_suspend ++ mov r0, #0 ++.L1739: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1755: ++ cmp r3, #220 ++ ldreq r3, .L1837+28 ++ moveq r1, #4096 ++ strheq r1, [r3, #14] @ movhi ++ mvneq r3, #35 ++ beq .L1831 ++.L1757: ++ cmp r3, #211 ++ ldreq r3, .L1837+28 ++ moveq r1, #4096 ++ strheq r1, [r3, #14] @ movhi ++ moveq r3, #2 ++ strbeq r3, [r2, #3425] ++ b .L1756 ++.L1764: ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ b .L1832 ++.L1771: ++ sub r3, r0, #17 ++ cmp r3, #2 ++ bhi .L1777 ++ ldr r3, .L1837+60 ++ cmp r0, #19 ++ str r3, [r5, #1704] ++ moveq r3, #15 ++ beq .L1834 ++.L1836: ++ mov r3, #7 ++.L1834: ++ strb r3, [r5, #1721] ++ b .L1770 ++.L1777: ++ sub r3, r0, #65 ++ cmp r0, #33 ++ cmpne r3, #1 ++ ldrls r3, .L1837+64 ++ strls r3, [r5, #1704] ++ movls r3, #4 ++ strbls r3, [r4, #85] ++ bls .L1836 ++.L1779: ++ sub r3, r0, #67 ++ sub r2, r0, #34 ++ uxtb r3, r3 ++ cmp r3, #1 ++ cmphi r2, #1 ++ movls r2, #1 ++ movhi r2, #0 ++ bhi .L1780 ++ ldr r2, .L1837+64 ++ cmp r0, #68 ++ cmpne r0, #35 ++ str r2, [r5, #1704] ++ movne r2, #7 ++ moveq r2, #17 ++ cmp r3, #1 ++ movls r3, #4 ++ movhi r3, #5 ++ strb r2, [r5, #1721] ++ strb r3, [r4, #85] ++ b .L1770 ++.L1780: ++ cmp r0, #49 ++ ldreq r3, .L1837+68 ++ streq r3, [r5, #1704] ++ beq .L1770 ++ cmp r0, #50 ++ ldreq r3, .L1837+72 ++ streq r2, [r4, #2252] ++ streq r3, [r5, #1704] ++ b .L1770 ++.L1792: ++ mvn r0, #1 ++ b .L1739 ++.L1838: ++ .align 2 ++.L1837: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC97 ++ .word .LANCHOR0+2072 ++ .word .LANCHOR0+1216 ++ .word 1446522928 ++ .word .LANCHOR1 ++ .word .LANCHOR1+3412 ++ .word .LANCHOR1+3288 ++ .word .LANCHOR0+52 ++ .word .LC98 ++ .word .LANCHOR2-568 ++ .word HynixReadRetrial ++ .word .LANCHOR2-364 ++ .word 150000 ++ .word MicronReadRetrial ++ .word ToshibaReadRetrial ++ .word SamsungReadRetrial ++ .word samsung_read_retrial ++ .fnend ++ .size FlashInit, .-FlashInit ++ .align 2 ++ .global FlashPageProgMsbFFData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashPageProgMsbFFData, %function ++FlashPageProgMsbFFData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r8, r0 ++ ldr r5, .L1855 ++ mov r9, r1 ++ mov r4, r2 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1840 ++ ldr r3, [r5, #2252] ++ cmp r3, #0 ++ popne {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1840: ++ ldr r3, [r5, #48] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r2, r3, #5 ++ cmp r3, #50 ++ cmpne r2, #2 ++ bls .L1841 ++ sub r2, r3, #19 ++ and r2, r2, #239 ++ cmp r2, #0 ++ cmpne r3, #68 ++ popne {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1841: ++ ldr r6, .L1855+4 ++ sub r7, r6, #2608 ++ sub r7, r7, #12 ++.L1843: ++ ldr r3, [r5, #48] ++ ldrh r3, [r3, #10] ++ cmp r3, r4 ++ bhi .L1844 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1844: ++ lsl r3, r4, #1 ++ ldrh r2, [r7, r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ popne {r4, r5, r6, r7, r8, r9, r10, pc} ++ mov r2, #32768 ++ mov r1, #255 ++ ldr r0, [r6, #1724] ++ bl ftl_memset ++ ldr r3, [r6, #1724] ++ add r1, r4, r9 ++ mov r0, r8 ++ add r4, r4, #1 ++ uxth r4, r4 ++ mov r2, r3 ++ bl FlashProgPage ++ b .L1843 ++.L1856: ++ .align 2 ++.L1855: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FlashPageProgMsbFFData, .-FlashPageProgMsbFFData ++ .align 2 ++ .global FlashReadSlc2KPages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadSlc2KPages, %function ++FlashReadSlc2KPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1906 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, r0 ++ ldr r8, .L1906+4 ++ mov r9, #0 ++ .pad #36 ++ sub sp, sp, #36 ++ ldr fp, .L1906+8 ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ str r1, [sp, #16] ++ str r2, [sp, #20] ++ str r3, [sp, #12] ++.L1858: ++ ldr r3, [sp, #16] ++ cmp r9, r3 ++ bne .L1878 ++ mov r0, #0 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1878: ++ ldr r3, [sp, #16] ++ add r2, sp, #28 ++ ldr r1, [sp, #20] ++ mov r0, r4 ++ sub r3, r3, r9 ++ uxtb r3, r3 ++ str r3, [sp] ++ add r3, sp, #24 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r8, #2234] @ zero_extendqisi2 ++ ldr r3, [sp, #24] ++ cmp r2, r3 ++ mvnls r3, #0 ++ strls r3, [r4] ++ bls .L1860 ++ add r3, r8, r3 ++ mov r7, #0 ++ ldrb r6, [r3, #2236] @ zero_extendqisi2 ++ mov r0, r6 ++ bl NandcWaitFlashReady ++ mov r0, r6 ++ bl NandcFlashCs ++.L1861: ++ ldr r1, [sp, #28] ++ mov r0, r6 ++ bl FlashReadCmd ++ mov r0, r6 ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #12] ++ mov r1, #0 ++ ldr r2, [sp, #12] ++ mov r0, r6 ++ str r3, [sp] ++ ldr r3, [r4, #8] ++ bl NandcXferData ++ ldrb r3, [fp, #1740] @ zero_extendqisi2 ++ mov r5, r0 ++ cmp r3, #0 ++ beq .L1862 ++ mov r0, r6 ++ bl flash_read_ecc ++ cmp r0, #5 ++ movhi r5, #256 ++.L1862: ++ cmp r7, #9 ++ cmnls r5, #1 ++ moveq r3, #1 ++ movne r3, #0 ++ addeq r7, r7, #1 ++ beq .L1861 ++.L1863: ++ cmp r7, #0 ++ mov r7, r3 ++ movne r5, #256 ++.L1865: ++ ldr r3, [r8, #40] ++ mov r0, r6 ++ ldr r1, [sp, #28] ++ add r1, r1, r3 ++ bl FlashReadCmd ++ mov r0, r6 ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #8] ++ mov r1, #0 ++ ldr r2, [r4, #12] ++ mov r0, r6 ++ cmp r3, #0 ++ addne r3, r3, #2048 ++ cmp r2, #0 ++ addne r2, r2, #8 ++ str r2, [sp] ++ ldr r2, [sp, #12] ++ bl NandcXferData ++ ldrb r2, [fp, #1740] @ zero_extendqisi2 ++ mov r10, r0 ++ cmp r2, #0 ++ beq .L1868 ++ mov r0, r6 ++ bl flash_read_ecc ++ cmp r0, #5 ++ movhi r10, #256 ++.L1868: ++ cmp r7, #9 ++ cmnls r10, #1 ++ addeq r7, r7, #1 ++ beq .L1865 ++.L1869: ++ cmp r7, #0 ++ mov r0, r6 ++ movne r10, #256 ++ bl NandcFlashDeCs ++ ldrb r3, [r8, #2316] @ zero_extendqisi2 ++ cmp r5, r10 ++ movcc r5, r10 ++ add r3, r3, r3, lsl #1 ++ cmp r5, r3, asr #2 ++ bls .L1871 ++ cmn r5, #1 ++ movne r5, #256 ++.L1871: ++ cmp r5, #256 ++ cmnne r5, #1 ++ movne r3, #0 ++ streq r5, [r4] ++ strne r3, [r4] ++ ldr r3, [r4, #12] ++ cmp r3, #0 ++ beq .L1874 ++ ldr r2, [r3, #12] ++ cmn r2, #1 ++ bne .L1874 ++ ldr r2, [r3, #8] ++ cmn r2, #1 ++ bne .L1874 ++ ldr r3, [r3] ++ cmn r3, #1 ++ strne r2, [r4] ++.L1874: ++ ldr r3, [r4] ++ cmn r3, #1 ++ bne .L1860 ++ ldr r1, [r4, #4] ++ ldrb r2, [r8, #2316] @ zero_extendqisi2 ++ ldr r0, .L1906+12 ++ bl printk ++ ldr r1, [r4, #8] ++ cmp r1, #0 ++ beq .L1876 ++ mov r3, #8 ++ mov r2, #4 ++ ldr r0, .L1906+16 ++ bl rknand_print_hex ++.L1876: ++ ldr r1, [r4, #12] ++ cmp r1, #0 ++ beq .L1860 ++ mov r3, #4 ++ ldr r0, .L1906+20 ++ mov r2, r3 ++ bl rknand_print_hex ++.L1860: ++ add r9, r9, #1 ++ add r4, r4, #36 ++ b .L1858 ++.L1907: ++ .align 2 ++.L1906: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC99 ++ .word .LC100 ++ .word .LC101 ++ .fnend ++ .size FlashReadSlc2KPages, .-FlashReadSlc2KPages ++ .align 2 ++ .global FlashReadPages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadPages, %function ++FlashReadPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #52 ++ sub sp, sp, #52 ++ ldr r4, .L1979 ++ str r1, [sp, #24] ++ ldrb r9, [r4, #36] @ zero_extendqisi2 ++ str r2, [sp, #28] ++ cmp r9, #0 ++ bne .L1909 ++ ldr r3, .L1979+4 ++ mov fp, r0 ++ ldr r10, .L1979+8 ++ str r9, [sp, #8] ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ str r3, [sp, #20] ++ ldrb r3, [r4, #44] @ zero_extendqisi2 ++ str r3, [sp, #36] ++.L1910: ++ ldr r3, [sp, #8] ++ ldr r2, [sp, #24] ++ cmp r3, r2 ++ bcc .L1943 ++ mov r0, #0 ++ b .L1908 ++.L1909: ++ bl FlashReadSlc2KPages ++.L1908: ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1943: ++ ldr r2, [sp, #8] ++ mov r3, #36 ++ ldr r1, [sp, #28] ++ mul r3, r3, r2 ++ add r8, fp, r3 ++ str r3, [sp, #12] ++ ldr r3, [sp, #24] ++ mov r0, r8 ++ ldr r7, [r8, #4] ++ sub r3, r3, r2 ++ add r2, sp, #44 ++ uxtb r3, r3 ++ str r3, [sp] ++ add r3, sp, #40 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r4, #2234] @ zero_extendqisi2 ++ mov r6, r0 ++ ldr r3, [sp, #40] ++ cmp r2, r3 ++ ldrls r2, [sp, #12] ++ mvnls r3, #0 ++ strls r3, [fp, r2] ++ bls .L1913 ++ add r3, r4, r3 ++ ldrb r5, [r3, #2236] @ zero_extendqisi2 ++ ldrb r3, [r10, #1741] @ zero_extendqisi2 ++ mov r0, r5 ++ cmp r3, #0 ++ moveq r6, #0 ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #48] ++ ldrb r2, [r3, #19] @ zero_extendqisi2 ++ sub r3, r2, #1 ++ cmp r3, #7 ++ bhi .L1915 ++ sub r2, r2, #7 ++ add r1, r4, r5 ++ cmp r2, #1 ++ add r2, r4, r5 ++ ldrb r3, [r1, #1228] @ zero_extendqisi2 ++ ldrb r2, [r2, #2068] @ zero_extendqisi2 ++ ldrbls r3, [r1, #1236] @ zero_extendqisi2 ++ cmp r2, r3 ++ beq .L1915 ++ ldr r2, .L1979+12 ++ mov r0, r5 ++ ldrb r1, [r4, #1217] @ zero_extendqisi2 ++ bl HynixSetRRPara ++.L1915: ++ mov r0, r5 ++ lsr r7, r7, #31 ++ bl NandcFlashCs ++ ldr r3, [sp, #28] ++ mov r0, r5 ++ cmp r3, #1 ++ orreq r7, r7, #1 ++ cmp r7, #0 ++ str r7, [sp, #16] ++ beq .L1917 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1917 ++ bl flash_enter_slc_mode ++.L1923: ++ ldr r1, [sp, #44] ++ cmn r1, #1 ++ cmpeq r5, #255 ++ moveq r3, #0 ++ movne r3, #1 ++ moveq r6, r3 ++ beq .L1919 ++ cmp r6, #0 ++ beq .L1920 ++ ldr r2, [r4, #40] ++ mov r0, r5 ++ add r2, r1, r2 ++ bl FlashReadDpCmd ++.L1921: ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ cmp r6, #0 ++ beq .L1919 ++ ldr r1, [sp, #44] ++ mov r0, r5 ++ bl FlashReadDpDataOutCmd ++.L1919: ++ ldr r3, [r8, #12] ++ mov r1, #0 ++ ldr r2, [sp, #20] ++ mov r0, r5 ++ str r3, [sp] ++ ldr r3, [r8, #8] ++ bl NandcXferData ++ ldrb r3, [r4, #44] @ zero_extendqisi2 ++ mov r7, r0 ++ adds r2, r3, #0 ++ movne r2, #1 ++ cmn r0, #1 ++ movne r2, #0 ++ cmp r2, #0 ++ str r2, [sp, #32] ++ beq .L1922 ++ mov r3, #0 ++ mov r6, #0 ++ strb r3, [r4, #44] ++ b .L1923 ++.L1917: ++ bl flash_exit_slc_mode ++ b .L1923 ++.L1920: ++ mov r0, r5 ++ bl FlashReadCmd ++ b .L1921 ++.L1922: ++ cmp r6, #0 ++ beq .L1924 ++ ldr r3, [r4, #40] ++ mov r0, r5 ++ ldr r1, [sp, #44] ++ add r1, r1, r3 ++ bl FlashReadDpDataOutCmd ++ ldr r3, [sp, #12] ++ mov r0, r5 ++ ldr r1, [sp, #32] ++ add r3, r3, #36 ++ add r3, fp, r3 ++ ldr r2, [r3, #12] ++ str r2, [sp] ++ ldr r2, [sp, #20] ++ ldr r3, [r3, #8] ++ bl NandcXferData ++ cmn r0, #1 ++ mov r9, r0 ++ moveq r6, #0 ++.L1924: ++ mov r0, r5 ++ bl NandcFlashDeCs ++ ldrb r3, [sp, #36] @ zero_extendqisi2 ++ cmn r7, #1 ++ strb r3, [r4, #44] ++ bne .L1925 ++ ldrb r3, [r4, #2256] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1926 ++.L1930: ++ ldr r6, [r10, #1704] ++ cmp r6, #0 ++ bne .L1927 ++ ldr r3, [r8, #12] ++ mov r0, r5 ++ ldr r2, [r8, #8] ++ ldr r1, [sp, #44] ++ bl FlashReadRawPage ++ mov r7, r0 ++.L1931: ++ cmp r7, #256 ++ cmnne r7, #1 ++ ldreq r3, [sp, #12] ++ movne r3, #0 ++ ldrne r2, [sp, #12] ++ streq r7, [fp, r3] ++ strne r3, [fp, r2] ++ ldr r3, [sp, #12] ++ ldr r3, [fp, r3] ++ cmn r3, #1 ++ bne .L1938 ++ ldr r1, [r8, #4] ++ ldrb r2, [r4, #2316] @ zero_extendqisi2 ++ ldr r0, .L1979+16 ++ bl printk ++ ldr r1, [r8, #12] ++ cmp r1, #0 ++ beq .L1938 ++ mov r3, #4 ++ ldr r0, .L1979+20 ++ mov r2, r3 ++ bl rknand_print_hex ++.L1938: ++ cmp r6, #0 ++ beq .L1940 ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r9, r3, asr #2 ++ bls .L1941 ++ ldr r3, [r10, #1704] ++ cmp r3, #0 ++ moveq r9, #256 ++.L1941: ++ ldr r3, [sp, #12] ++ cmp r9, #256 ++ cmnne r9, #1 ++ movne r2, #0 ++ add r3, r3, #36 ++ streq r9, [fp, r3] ++ strne r2, [fp, r3] ++.L1940: ++ ldr r3, [sp, #8] ++ add r3, r3, r6 ++ str r3, [sp, #8] ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ beq .L1913 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1913 ++ mov r0, r5 ++ bl flash_exit_slc_mode ++.L1913: ++ ldr r3, [sp, #8] ++ add r3, r3, #1 ++ str r3, [sp, #8] ++ b .L1910 ++.L1926: ++ ldr r3, [r4, #88] ++ mov r0, r5 ++ ldr r1, [sp, #44] ++ ldr r6, [r3, #304] ++ mov r3, #1 ++ str r3, [sp] ++ ldr r3, [r8, #12] ++ ldr r2, [r8, #8] ++ bl FlashDdrTunningRead ++ cmn r0, #1 ++ mov r7, r0 ++ beq .L1929 ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ cmp r0, r3, lsr #1 ++ bls .L1946 ++.L1929: ++ ubfx r0, r6, #8, #8 ++ bl NandcSetDdrPara ++ cmn r7, #1 ++ beq .L1930 ++.L1946: ++ mov r6, #0 ++.L1925: ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r7, r3, asr #2 ++ bls .L1931 ++ ldr r3, [r10, #1704] ++ cmp r3, #0 ++ moveq r7, #256 ++ b .L1931 ++.L1927: ++ ldr r3, [r8, #12] ++ mov r0, r5 ++ ldr r2, [r8, #8] ++ ldr r1, [sp, #44] ++ blx r6 ++ cmn r0, #1 ++ mov r7, r0 ++ bne .L1948 ++ ldr r3, [r4, #48] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ cmp r3, #7 ++ bhi .L1932 ++ mov r3, #0 ++ ldr r2, .L1979+12 ++ ldrb r1, [r4, #1217] @ zero_extendqisi2 ++ mov r0, r5 ++ bl HynixSetRRPara ++.L1932: ++ ldr r3, [r8, #12] ++ mov r0, r5 ++ ldr r2, [r8, #8] ++ ldr r1, [sp, #44] ++ bl FlashReadRawPage ++ ldrb r2, [r4, #2316] @ zero_extendqisi2 ++ mov r7, r0 ++ mov r3, r0 ++ ldr r1, [r8, #4] ++ ldr r0, .L1979+24 ++ bl printk ++ cmn r7, #1 ++ bne .L1948 ++ ldrb r6, [r4, #152] @ zero_extendqisi2 ++ cmp r6, #0 ++ beq .L1931 ++ ldr r3, [sp, #16] ++ mov r0, r5 ++ cmp r3, #0 ++ beq .L1933 ++ bl flash_enter_slc_mode ++.L1934: ++ ldr r6, [r10, #1704] ++ mov r0, r5 ++ ldr r3, [r8, #12] ++ ldr r2, [r8, #8] ++ ldr r1, [sp, #44] ++ blx r6 ++ mov r7, r0 ++.L1948: ++ mov r6, #0 ++ b .L1931 ++.L1933: ++ bl flash_exit_slc_mode ++ b .L1934 ++.L1980: ++ .align 2 ++.L1979: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .word .LANCHOR2 ++ .word .LANCHOR0+1220 ++ .word .LC99 ++ .word .LC101 ++ .word .LC102 ++ .fnend ++ .size FlashReadPages, .-FlashReadPages ++ .align 2 ++ .global FlashLoadFactorBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashLoadFactorBbt, %function ++FlashLoadFactorBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r2, #16 ++ ldr r8, .L1993 ++ .pad #60 ++ sub sp, sp, #60 ++ mov r1, #0 ++ mvn fp, #0 ++ ldr r10, .L1993+4 ++ mov r5, #0 ++ ldrh r3, [r8, #136] ++ mov r9, r5 ++ ldrh r6, [r8, #138] ++ ldr r0, .L1993+8 ++ smulbb r6, r6, r3 ++ bl ftl_memset ++ ldr r3, [r10, #1728] ++ uxth r6, r6 ++ str r5, [sp, #28] ++ str r3, [sp, #32] ++ add r3, r6, fp ++ uxth r3, r3 ++ str r3, [sp, #8] ++.L1982: ++ ldrb r3, [r8, #2234] @ zero_extendqisi2 ++ uxtb r7, r5 ++ cmp r3, r7 ++ bhi .L1988 ++ mov r0, fp ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1988: ++ ldr r4, [sp, #8] ++ mul r3, r7, r6 ++ sub r2, r6, #12 ++ str r2, [sp, #4] ++.L1983: ++ ldr r2, [sp, #4] ++ cmp r4, r2 ++ ble .L1985 ++ add r2, r4, r3 ++ add r0, sp, #20 ++ lsl r2, r2, #10 ++ str r3, [sp, #12] ++ str r2, [sp, #24] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [sp, #20] ++ ldr r3, [sp, #12] ++ cmn r2, #1 ++ beq .L1984 ++ ldr r2, [r10, #1728] ++ ldrh r1, [r2] ++ movw r2, #61664 ++ cmp r1, r2 ++ bne .L1984 ++ mov r1, r7 ++ mov r2, r4 ++ ldr r0, .L1993+12 ++ add r9, r9, #1 ++ bl printk ++ uxth r9, r9 ++ ldr r3, .L1993+8 ++ lsl r7, r7, #1 ++ strh r4, [r3, r7] @ movhi ++.L1985: ++ ldrb r3, [r8, #2234] @ zero_extendqisi2 ++ add r5, r5, #1 ++ cmp r3, r9 ++ moveq fp, #0 ++ b .L1982 ++.L1984: ++ sub r4, r4, #1 ++ uxth r4, r4 ++ b .L1983 ++.L1994: ++ .align 2 ++.L1993: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR2+1742 ++ .word .LC103 ++ .fnend ++ .size FlashLoadFactorBbt, .-FlashLoadFactorBbt ++ .align 2 ++ .global FlashProgSlc2KPages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgSlc2KPages, %function ++FlashProgSlc2KPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2023 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r1 ++ ldr r9, .L2023+4 ++ .pad #60 ++ sub sp, sp, #60 ++ mov r8, r2 ++ mov r4, r0 ++ ldrb fp, [r3, #477] @ zero_extendqisi2 ++ mov r6, r0 ++ mov r7, #0 ++.L1996: ++ cmp r7, r10 ++ bne .L2002 ++ ldr r5, .L2023+8 ++ mov r6, #0 ++ ldr r9, .L2023+12 ++.L2003: ++ cmp r7, r6 ++ bne .L2010 ++ mov r0, #0 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2002: ++ sub r3, r10, r7 ++ add r2, sp, #12 ++ uxtb r3, r3 ++ mov r1, r8 ++ mov r0, r6 ++ str r3, [sp] ++ add r3, sp, #16 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r9, #2234] @ zero_extendqisi2 ++ ldr r3, [sp, #16] ++ cmp r2, r3 ++ mvnls r3, #0 ++ strls r3, [r6] ++ bls .L1998 ++ add r3, r9, r3 ++ ldrb r5, [r3, #2236] @ zero_extendqisi2 ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ bl NandcFlashCs ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashProgFirstCmd ++ ldr r3, [r6, #12] ++ mov r2, fp ++ mov r1, #1 ++ mov r0, r5 ++ str r3, [sp] ++ ldr r3, [r6, #8] ++ bl NandcXferData ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashProgSecondCmd ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashReadStatus ++ sbfx r0, r0, #0, #1 ++ ldr r1, [sp, #12] ++ str r0, [r6] ++ mov r0, r5 ++ ldr r3, [r9, #40] ++ add r1, r1, r3 ++ bl FlashProgFirstCmd ++ ldr r3, [r6, #8] ++ mov r1, #1 ++ ldr r2, [r6, #12] ++ mov r0, r5 ++ cmp r3, #0 ++ addne r3, r3, #2048 ++ cmp r2, #0 ++ addne r2, r2, #8 ++ str r2, [sp] ++ mov r2, fp ++ bl NandcXferData ++ ldr r3, [r9, #40] ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ add r1, r1, r3 ++ bl FlashProgSecondCmd ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashReadStatus ++ tst r0, #1 ++ mov r0, r5 ++ mvnne r3, #0 ++ strne r3, [r6] ++ bl NandcFlashDeCs ++.L1998: ++ add r7, r7, #1 ++ add r6, r6, #36 ++ b .L1996 ++.L2010: ++ ldr r3, [r4] ++ cmn r3, #1 ++ bne .L2004 ++ ldr r1, [r4, #4] ++ ldr r0, .L2023+16 ++ bl printk ++.L2005: ++ add r6, r6, #1 ++ add r4, r4, #36 ++ b .L2003 ++.L2004: ++ sub r3, r7, r6 ++ add r2, sp, #12 ++ uxtb r3, r3 ++ mov r1, r8 ++ mov r0, r4 ++ str r3, [sp] ++ add r3, sp, #16 ++ bl LogAddr2PhyAddr ++ ldr r2, [r5, #1732] ++ mov r3, #0 ++ mov lr, r4 ++ add ip, sp, #20 ++ str r3, [r2] ++ ldr r2, [r5, #1736] ++ str r3, [r2] ++ ldmia lr!, {r0, r1, r2, r3} ++ stmia ip!, {r0, r1, r2, r3} ++ ldmia lr!, {r0, r1, r2, r3} ++ stmia ip!, {r0, r1, r2, r3} ++ mov r2, r8 ++ ldr r3, [lr] ++ mov r1, #1 ++ add r0, sp, #20 ++ str r3, [ip] ++ ldr r3, [r5, #1732] ++ str r3, [sp, #28] ++ ldr r3, [r5, #1736] ++ str r3, [sp, #32] ++ bl FlashReadPages ++ ldr r10, [sp, #20] ++ cmn r10, #1 ++ bne .L2006 ++ ldr r1, [r4, #4] ++ ldr r0, .L2023+20 ++ bl printk ++ str r10, [r4] ++.L2006: ++ ldr r10, [sp, #20] ++ cmp r10, #256 ++ bne .L2007 ++ ldr r1, [r4, #4] ++ ldr r0, .L2023+24 ++ bl printk ++ str r10, [r4] ++.L2007: ++ ldr r3, [r4, #12] ++ cmp r3, #0 ++ beq .L2008 ++ ldr r2, [r3] ++ ldr r3, [r5, #1736] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L2008 ++ ldr r1, [r4, #4] ++ ldr r0, .L2023+28 ++ bl printk ++ mvn r3, #0 ++ str r3, [r4] ++.L2008: ++ ldr r3, [r4, #8] ++ cmp r3, #0 ++ beq .L2005 ++ ldr r2, [r3] ++ ldr r3, [r5, #1732] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L2005 ++ ldr r1, [r4, #4] ++ mov r0, r9 ++ bl printk ++ mvn r3, #0 ++ str r3, [r4] ++ b .L2005 ++.L2024: ++ .align 2 ++.L2023: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC108 ++ .word .LC104 ++ .word .LC105 ++ .word .LC106 ++ .word .LC107 ++ .fnend ++ .size FlashProgSlc2KPages, .-FlashProgSlc2KPages ++ .align 2 ++ .global FtlLoadFactoryBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadFactoryBbt, %function ++FtlLoadFactoryBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r7, #0 ++ ldr r5, .L2036 ++ ldr r6, .L2036+4 ++ ldr r3, [r5, #-524] ++ ldr r8, [r5, #-500] ++ sub r10, r6, #120 ++ sub r9, r6, #78 ++ str r3, [r5, #1768] ++ str r8, [r5, #1772] ++.L2026: ++ ldrh r3, [r10] ++ cmp r7, r3 ++ bcc .L2031 ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2031: ++ ldrh r4, [r9] ++ mvn r3, #0 ++ ldr fp, .L2036+8 ++ strh r3, [r6, #2]! @ movhi ++ add r4, r4, r3 ++ movw r3, #61664 ++ uxth r4, r4 ++.L2027: ++ ldrh r2, [r9] ++ sub r1, r2, #16 ++ cmp r4, r1 ++ ble .L2029 ++ mla r2, r7, r2, r4 ++ str r3, [sp, #4] ++ mov r0, fp ++ lsl r2, r2, #10 ++ str r2, [r5, #1764] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [r5, #1760] ++ ldr r3, [sp, #4] ++ cmn r2, #1 ++ beq .L2028 ++ ldrh r2, [r8] ++ cmp r2, r3 ++ bne .L2028 ++ strh r4, [r6] @ movhi ++.L2029: ++ add r7, r7, #1 ++ b .L2026 ++.L2028: ++ sub r4, r4, #1 ++ uxth r4, r4 ++ b .L2027 ++.L2037: ++ .align 2 ++.L2036: ++ .word .LANCHOR2 ++ .word .LANCHOR0+2466 ++ .word .LANCHOR2+1760 ++ .fnend ++ .size FtlLoadFactoryBbt, .-FtlLoadFactoryBbt ++ .align 2 ++ .global FtlGetLastWrittenPage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGetLastWrittenPage, %function ++FtlGetLastWrittenPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 104 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2051 ++ cmp r1, #1 ++ movweq r2, #2392 ++ movwne r2, #2390 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ lsl r8, r0, #10 ++ ldrh r5, [r3, r2] ++ .pad #104 ++ sub sp, sp, #104 ++ add r3, sp, #40 ++ mov r2, r1 ++ str r3, [sp, #16] ++ mov r7, r1 ++ sub r5, r5, #1 ++ mov r6, #0 ++ sxth r5, r5 ++ mov r1, #1 ++ add r0, sp, #4 ++ str r6, [sp, #12] ++ orr r3, r5, r8 ++ str r3, [sp, #8] ++ bl FlashReadPages ++ ldr r3, [sp, #40] ++ cmn r3, #1 ++ bne .L2041 ++.L2042: ++ cmp r6, r5 ++ ble .L2045 ++.L2041: ++ mov r0, r5 ++ add sp, sp, #104 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L2045: ++ add r3, r6, r5 ++ mov r2, r7 ++ add r3, r3, r3, lsr #31 ++ mov r1, #1 ++ add r0, sp, #4 ++ asr r4, r3, #1 ++ sxth r3, r4 ++ orr r3, r3, r8 ++ str r3, [sp, #8] ++ bl FlashReadPages ++ ldr r3, [sp, #40] ++ cmn r3, #1 ++ bne .L2043 ++ ldr r3, [sp, #44] ++ cmn r3, #1 ++ bne .L2043 ++ ldr r3, [sp, #4] ++ cmn r3, #1 ++ subne r4, r4, #1 ++ sxthne r5, r4 ++ bne .L2042 ++.L2043: ++ add r4, r4, #1 ++ sxth r6, r4 ++ b .L2042 ++.L2052: ++ .align 2 ++.L2051: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGetLastWrittenPage, .-FtlGetLastWrittenPage ++ .align 2 ++ .global FtlLoadBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadBbt, %function ++FtlLoadBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r4, .L2085 ++ ldr r5, .L2085+4 ++ ldr r3, [r4, #-524] ++ add r8, r4, #1760 ++ ldr r7, [r4, #-500] ++ ldr r9, .L2085+8 ++ str r3, [r4, #1768] ++ str r7, [r4, #1772] ++ bl FtlBbtMemInit ++ movw r3, #2388 ++ ldrh r6, [r5, r3] ++ sub r6, r6, #1 ++ uxth r6, r6 ++.L2054: ++ ldrh r3, [r9] ++ sub r3, r3, #48 ++ cmp r6, r3 ++ ble .L2057 ++ lsl r3, r6, #10 ++ mov r2, #1 ++ mov r1, r2 ++ mov r0, r8 ++ str r3, [r4, #1764] ++ bl FlashReadPages ++ ldr r3, [r4, #1760] ++ cmn r3, #1 ++ bne .L2055 ++ ldr r3, [r4, #1764] ++ mov r2, #1 ++ mov r1, r2 ++ mov r0, r8 ++ add r3, r3, #1 ++ str r3, [r4, #1764] ++ bl FlashReadPages ++.L2055: ++ ldr r3, [r4, #1760] ++ cmn r3, #1 ++ beq .L2056 ++ ldrh r2, [r7] ++ movw r3, #61649 ++ cmp r2, r3 ++ bne .L2056 ++ movw r3, #2456 ++ strh r6, [r5, r3] @ movhi ++ ldr r3, [r7, #4] ++ str r3, [r5, #2464] ++ ldr r3, .L2085+12 ++ ldrh r2, [r7, #8] ++ strh r2, [r3, #4] @ movhi ++.L2057: ++ movw r8, #2456 ++ movw r2, #65535 ++ ldrh r3, [r5, r8] ++ ldr r6, .L2085+12 ++ cmp r3, r2 ++ beq .L2071 ++ ldrh r3, [r6, #4] ++ cmp r3, r2 ++ beq .L2061 ++ lsl r3, r3, #10 ++ mov r2, #1 ++ mov r1, r2 ++ ldr r0, .L2085+16 ++ str r3, [r4, #1764] ++ bl FlashReadPages ++ ldr r3, [r4, #1760] ++ cmn r3, #1 ++ beq .L2061 ++ ldrh r2, [r7] ++ movw r3, #61649 ++ cmp r2, r3 ++ bne .L2061 ++ ldr r3, [r7, #4] ++ ldr r2, [r5, #2464] ++ cmp r3, r2 ++ ldrhhi r2, [r6, #4] ++ strhi r3, [r5, #2464] ++ ldrhhi r3, [r7, #8] ++ strhhi r2, [r5, r8] @ movhi ++ strhhi r3, [r6, #4] @ movhi ++.L2061: ++ ldr r9, .L2085+16 ++ movw r3, #2456 ++ mov r1, #1 ++ ldrh r0, [r5, r3] ++ movw r10, #61649 ++ bl FtlGetLastWrittenPage ++ sxth r8, r0 ++ add r0, r0, #1 ++ strh r0, [r6, #2] @ movhi ++.L2063: ++ cmp r8, #0 ++ blt .L2068 ++ ldrh r3, [r6] ++ mov r2, #1 ++ mov r1, r2 ++ mov r0, r9 ++ orr r3, r8, r3, lsl #10 ++ str r3, [r4, #1764] ++ ldr r3, [r4, #-524] ++ str r3, [r4, #1768] ++ bl FlashReadPages ++ ldr r3, [r4, #1760] ++ cmn r3, #1 ++ beq .L2064 ++ ldrh r3, [r7] ++ cmp r3, r10 ++ bne .L2064 ++.L2068: ++ ldrh r3, [r7, #10] ++ ldrh r0, [r7, #12] ++ strh r3, [r6, #6] @ movhi ++ movw r3, #65535 ++ cmp r0, r3 ++ bne .L2065 ++.L2066: ++ ldr r6, .L2085+20 ++ mov r5, #0 ++ ldr r8, .L2085+24 ++ sub r7, r6, #134 ++.L2069: ++ ldrh r3, [r7] ++ cmp r5, r3 ++ bcc .L2070 ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2056: ++ sub r6, r6, #1 ++ uxth r6, r6 ++ b .L2054 ++.L2064: ++ sub r8, r8, #1 ++ sxth r8, r8 ++ b .L2063 ++.L2065: ++ ldr r2, [r5, #2320] ++ cmp r0, r2 ++ beq .L2066 ++ movw r3, #2334 ++ ldrh r3, [r5, r3] ++ lsr r3, r3, #2 ++ cmp r2, r3 ++ cmpcc r0, r3 ++ bcs .L2066 ++ bl FtlSysBlkNumInit ++ b .L2066 ++.L2070: ++ ldrh r2, [r8] ++ ldr r1, [r4, #1768] ++ ldr r0, [r6, #4]! ++ lsl r2, r2, #2 ++ mla r1, r5, r2, r1 ++ add r5, r5, #1 ++ bl ftl_memcpy ++ b .L2069 ++.L2071: ++ mvn r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2086: ++ .align 2 ++.L2085: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR0+2388 ++ .word .LANCHOR0+2456 ++ .word .LANCHOR2+1760 ++ .word .LANCHOR0+2480 ++ .word .LANCHOR2-436 ++ .fnend ++ .size FtlLoadBbt, .-FtlLoadBbt ++ .align 2 ++ .global FtlScanSysBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlScanSysBlk, %function ++FtlScanSysBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r6, #0 ++ ldr r5, .L2166 ++ movw r3, #2438 ++ mov r1, r6 ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, .L2166+4 ++ movw r8, #2412 ++ ldr r2, [r5, #2420] ++ strh r6, [r5, r3] @ movhi ++ sub r7, r4, #388 ++ ldr r0, [r4, #-444] ++ strh r6, [r7] @ movhi ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldr r2, [r5, #2420] ++ mov r1, r6 ++ ldr r0, [r4, #-472] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldrh r2, [r5, r8] ++ mov r1, r6 ++ ldr r0, [r4, #-460] ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldrh r2, [r5, r8] ++ mov r1, r6 ++ ldr r0, [r5, #2440] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ sub r0, r4, #3296 ++ mov r2, #16 ++ mov r1, #255 ++ sub r0, r0, #4 ++ bl ftl_memset ++ movw r3, #2332 ++ str r7, [sp] ++ ldrh fp, [r5, r3] ++ str r5, [sp, #4] ++.L2088: ++ ldr r3, .L2166+8 ++ ldr r2, .L2166 ++ ldrh r3, [r3] ++ cmp r3, fp ++ bls .L2128 ++ ldr r1, [r4, #-2692] ++ mov r6, #0 ++ ldr r3, .L2166+12 ++ mov r5, r6 ++ ldr r7, [r4, #-536] ++ mov r8, #36 ++ str r1, [sp, #8] ++ ldr r1, .L2166+16 ++ ldrh r2, [r3] ++ ldr r3, [r4, #-2696] ++ ldrh r10, [r1] ++ sub r9, r1, #52 ++ b .L2129 ++.L2090: ++ mov r1, fp ++ ldrb r0, [r9, r6] @ zero_extendqisi2 ++ str r3, [sp, #20] ++ str r2, [sp, #16] ++ bl V2P_block ++ str r0, [sp, #12] ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ ldr r2, [sp, #16] ++ ldr r3, [sp, #20] ++ bne .L2089 ++ ldr r1, [sp, #12] ++ mla r0, r8, r5, r7 ++ lsl r1, r1, #10 ++ stmib r0, {r1, r3} ++ mul r1, r10, r5 ++ add r5, r5, #1 ++ uxth r5, r5 ++ add ip, r1, #3 ++ cmp r1, #0 ++ movlt r1, ip ++ ldr ip, [sp, #8] ++ bic r1, r1, #3 ++ add r1, ip, r1 ++ str r1, [r0, #12] ++.L2089: ++ add r6, r6, #1 ++.L2129: ++ uxth r1, r6 ++ cmp r2, r1 ++ bhi .L2090 ++ cmp r5, #0 ++ bne .L2091 ++.L2127: ++ add r3, fp, #1 ++ uxth fp, r3 ++ b .L2088 ++.L2091: ++ mov r8, #0 ++ mov r2, #1 ++ mov r1, r5 ++ mov r0, r7 ++ bl FlashReadPages ++.L2092: ++ uxth r3, r8 ++ cmp r5, r3 ++ bls .L2127 ++ mov r9, #36 ++ ldr r3, [r4, #-536] ++ mul r9, r9, r8 ++ add r2, r3, r9 ++ ldr r3, [r3, r9] ++ ldr r6, [r2, #4] ++ ldr r7, [r2, #12] ++ cmn r3, #1 ++ ubfx r6, r6, #10, #16 ++ bne .L2095 ++ mov r10, #16 ++.L2097: ++ ldr r0, [r4, #-536] ++ mov r2, #1 ++ mov r1, r2 ++ add r0, r0, r9 ++ ldr r3, [r0, #4] ++ add r3, r3, #1 ++ str r3, [r0, #4] ++ bl FlashReadPages ++ ldrh r3, [r7] ++ movw r2, #65535 ++ cmp r3, r2 ++ ldr r3, [r4, #-536] ++ bne .L2094 ++ mvn r2, #0 ++ str r2, [r3, r9] ++ ldr r3, [r4, #-536] ++ ldr r3, [r3, r9] ++ cmp r3, r2 ++ beq .L2096 ++.L2095: ++ ldr r2, [r4, #-3332] ++ ldr r3, [r7, #4] ++ cmn r2, #1 ++ beq .L2098 ++ cmp r2, r3 ++ bhi .L2099 ++.L2098: ++ cmn r3, #1 ++ addne r2, r3, #1 ++ strne r2, [r4, #-3332] ++.L2099: ++ ldrh r2, [r7] ++ movw r1, #61604 ++ cmp r2, r1 ++ beq .L2101 ++ bhi .L2102 ++ movw r3, #61574 ++ cmp r2, r3 ++ beq .L2103 ++.L2100: ++ add r8, r8, #1 ++ b .L2092 ++.L2094: ++ ldr r3, [r3, r9] ++ cmn r3, #1 ++ bne .L2095 ++ sub r10, r10, #1 ++ uxth r10, r10 ++ cmp r10, #0 ++ bne .L2097 ++.L2096: ++ ldr r3, .L2166 ++ ldrb r1, [r3, #152] @ zero_extendqisi2 ++ cmp r1, #0 ++ bne .L2165 ++.L2125: ++ mov r0, r6 ++ bl FtlFreeSysBlkQueueIn ++ b .L2100 ++.L2102: ++ movw r3, #61634 ++ cmp r2, r3 ++ beq .L2104 ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L2100 ++.L2165: ++ mov r1, #0 ++ b .L2125 ++.L2104: ++ ldr r3, [sp, #4] ++ ldr r2, [sp] ++ ldr ip, [r4, #-444] ++ ldr r0, [r3, #2420] ++ ldrh r2, [r2] ++ uxth r1, r0 ++ sub r3, r1, #1 ++ sub r1, r1, r2 ++ sub r1, r1, #1 ++ sxth r3, r3 ++ sxth r1, r1 ++.L2106: ++ cmp r3, r1 ++ bgt .L2112 ++ cmp r3, #0 ++ bge .L2142 ++ b .L2100 ++.L2112: ++ ldr r10, [r7, #4] ++ lsl lr, r3, #2 ++ ldr r9, [ip, r3, lsl #2] ++ cmp r10, r9 ++ bls .L2107 ++ ldr r1, [ip] ++ cmp r1, #0 ++ bne .L2108 ++ cmp r0, r2 ++ ldrne r1, .L2166+20 ++ addne r2, r2, #1 ++ strhne r2, [r1] @ movhi ++.L2108: ++ uxth ip, r3 ++ mov r1, #0 ++.L2109: ++ uxth r0, r1 ++ sxth r2, r1 ++ cmp r0, ip ++ bcc .L2110 ++ ldr r1, [r7, #4] ++ cmp r3, #0 ++ ldr r2, [r4, #-444] ++ str r1, [r2, lr] ++ lsl r2, r3, #1 ++ ldr r1, [r4, #-472] ++ strh r6, [r1, r2] @ movhi ++ blt .L2100 ++ ldr r2, [sp] ++ ldr r1, .L2166 ++ ldrh r2, [r2] ++ ldr r1, [r1, #2420] ++ sub r1, r1, r2 ++ sub r1, r1, #1 ++ sxth r1, r1 ++ cmp r3, r1 ++ bgt .L2100 ++.L2142: ++ ldr r1, [sp] ++ add r2, r2, #1 ++ strh r2, [r1] @ movhi ++ ldr r2, [r4, #-444] ++ ldr r1, [r7, #4] ++ str r1, [r2, r3, lsl #2] ++ lsl r3, r3, #1 ++ ldr r2, [r4, #-472] ++.L2163: ++ strh r6, [r2, r3] @ movhi ++ b .L2100 ++.L2110: ++ ldr r0, [r4, #-444] ++ add r1, r1, #1 ++ add r9, r0, r2, lsl #2 ++ ldr r9, [r9, #4] ++ str r9, [r0, r2, lsl #2] ++ lsl r2, r2, #1 ++ ldr r0, [r4, #-472] ++ add r9, r0, r2 ++ ldrh r9, [r9, #2] ++ strh r9, [r0, r2] @ movhi ++ b .L2109 ++.L2107: ++ sub r3, r3, #1 ++ sxth r3, r3 ++ b .L2106 ++.L2103: ++ ldr r3, .L2166+24 ++ ldr r1, .L2166+28 ++ ldr lr, [r4, #-460] ++ ldrh r2, [r3] ++ ldrh r1, [r1] ++ sub r0, r2, #1 ++ sxth r3, r0 ++ sub r0, r0, r1 ++.L2115: ++ cmp r3, r0 ++ ble .L2120 ++ ldr r10, [r7, #4] ++ lsl ip, r3, #2 ++ ldr r9, [lr, r3, lsl #2] ++ cmp r10, r9 ++ bls .L2116 ++ sub r2, r2, r1 ++ ldr r0, [lr] ++ clz r2, r2 ++ uxth r9, r3 ++ lsr r2, r2, #5 ++ cmp r0, #0 ++ orrne r2, r2, #1 ++ ldr r0, .L2166 ++ cmp r2, #0 ++ ldreq r2, .L2166+28 ++ addeq r1, r1, #1 ++ strheq r1, [r2] @ movhi ++ mov r1, #0 ++.L2118: ++ uxth lr, r1 ++ sxth r2, r1 ++ cmp lr, r9 ++ bcc .L2119 ++ ldr r1, [r7, #4] ++ ldr r2, [r4, #-460] ++ str r1, [r2, ip] ++ lsl r2, r3, #1 ++ ldr r1, [r0, #2440] ++ strh r6, [r1, r2] @ movhi ++.L2120: ++ cmp r3, #0 ++ blt .L2100 ++ ldr r0, .L2166+28 ++ ldrh r2, [r0, #-26] ++ ldrh r1, [r0] ++ sub r2, r2, #1 ++ sub r2, r2, r1 ++ sxth r2, r2 ++ cmp r3, r2 ++ bgt .L2100 ++ add r1, r1, #1 ++ ldr r2, [r4, #-460] ++ strh r1, [r0] @ movhi ++ ldr r1, [r7, #4] ++ str r1, [r2, r3, lsl #2] ++ lsl r3, r3, #1 ++ ldr r2, [sp, #4] ++ ldr r2, [r2, #2440] ++ b .L2163 ++.L2119: ++ ldr lr, [r4, #-460] ++ add r1, r1, #1 ++ add r10, lr, r2, lsl #2 ++ ldr r10, [r10, #4] ++ str r10, [lr, r2, lsl #2] ++ lsl r2, r2, #1 ++ ldr lr, [r0, #2440] ++ add r10, lr, r2 ++ ldrh r10, [r10, #2] ++ strh r10, [lr, r2] @ movhi ++ b .L2118 ++.L2116: ++ sub r3, r3, #1 ++ sxth r3, r3 ++ b .L2115 ++.L2101: ++ ldr r2, .L2166+32 ++ movw r1, #65535 ++ mov r9, r2 ++ ldrh r0, [r9], #4 ++ cmp r0, r1 ++ strheq r6, [r2] @ movhi ++ beq .L2164 ++ ldrh r0, [r2, #4] ++ cmp r0, r1 ++ beq .L2123 ++ mov r1, #1 ++ bl FtlFreeSysBlkQueueIn ++.L2123: ++ ldr r3, [r7, #4] ++ ldr r2, [r4, #-3292] ++ cmp r2, r3 ++ strhcs r6, [r9] @ movhi ++ bcs .L2100 ++ ldrh r3, [r9, #-4] ++ strh r6, [r9, #-4] @ movhi ++ strh r3, [r9] @ movhi ++ ldr r3, [r7, #4] ++.L2164: ++ str r3, [r4, #-3292] ++ b .L2100 ++.L2128: ++ ldr r0, [r4, #-472] ++ ldrh r3, [r0] ++ cmp r3, #0 ++ beq .L2130 ++.L2133: ++ ldr r0, [r2, #2440] ++ ldrh r1, [r0] ++ cmp r1, #0 ++ beq .L2131 ++.L2153: ++ mov r0, #0 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2130: ++ ldr r1, .L2166+20 ++ ldrh r1, [r1] ++ cmp r1, #0 ++ ldrne ip, [r2, #2420] ++ beq .L2133 ++.L2134: ++ sxth r1, r3 ++ cmp r1, ip ++ bcs .L2133 ++ lsl lr, r1, #1 ++ add r3, r3, #1 ++ ldrh lr, [r0, lr] ++ cmp lr, #0 ++ beq .L2134 ++ mov r3, r1 ++ mov r5, #0 ++.L2135: ++ ldr r0, [r2, #2420] ++ cmp r3, r0 ++ bcs .L2133 ++ ldr ip, [r4, #-472] ++ lsl r0, r3, #1 ++ sub lr, r3, r1 ++ lsl r6, lr, #1 ++ ldrh r7, [ip, r0] ++ strh r7, [ip, r6] @ movhi ++ ldr ip, [r4, #-444] ++ ldr r6, [ip, r3, lsl #2] ++ add r3, r3, #1 ++ sxth r3, r3 ++ str r6, [ip, lr, lsl #2] ++ ldr ip, [r4, #-472] ++ strh r5, [ip, r0] @ movhi ++ b .L2135 ++.L2131: ++ movw r3, #2438 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ movwne r3, #2412 ++ ldrhne ip, [r2, r3] ++ beq .L2153 ++.L2138: ++ sxth r3, r1 ++ cmp r3, ip ++ mov lr, r3 ++ bge .L2153 ++ lsl r5, r3, #1 ++ add r1, r1, #1 ++ ldrh r5, [r0, r5] ++ cmp r5, #0 ++ beq .L2138 ++ ldr r5, .L2166+24 ++ mov r6, #0 ++.L2139: ++ ldrh r1, [r5] ++ cmp r3, r1 ++ bge .L2153 ++ ldr r0, [r2, #2440] ++ lsl r1, r3, #1 ++ sub ip, r3, lr ++ lsl r7, ip, #1 ++ ldrh r8, [r0, r1] ++ strh r8, [r0, r7] @ movhi ++ ldr r0, [r4, #-460] ++ ldr r7, [r0, r3, lsl #2] ++ add r3, r3, #1 ++ sxth r3, r3 ++ str r7, [r0, ip, lsl #2] ++ ldr r0, [r2, #2440] ++ strh r6, [r0, r1] @ movhi ++ b .L2139 ++.L2167: ++ .align 2 ++.L2166: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2334 ++ .word .LANCHOR0+2324 ++ .word .LANCHOR0+2402 ++ .word .LANCHOR2-388 ++ .word .LANCHOR0+2412 ++ .word .LANCHOR0+2438 ++ .word .LANCHOR2-3300 ++ .fnend ++ .size FtlScanSysBlk, .-FtlScanSysBlk ++ .align 2 ++ .global FtlLoadSysInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadSysInfo, %function ++FtlLoadSysInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r1, #0 ++ ldr r4, .L2197 ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r5, .L2197+4 ++ ldr r3, [r4, #-524] ++ sub r7, r4, #3296 ++ ldr r0, [r4, #-3540] ++ str r3, [r4, #1768] ++ ldr r3, [r4, #-500] ++ str r3, [r4, #1772] ++ movw r3, #2332 ++ ldrh r2, [r5, r3] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldrh r0, [r7, #-4] ++ movw r3, #65535 ++ cmp r0, r3 ++ bne .L2169 ++.L2180: ++ mvn r0, #0 ++.L2168: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2169: ++ mov r1, #1 ++ add fp, r5, #2400 ++ bl FtlGetLastWrittenPage ++ ldrsh r9, [r7, #-4] ++ sub r8, r7, #4 ++ sxth r6, r0 ++ add r0, r0, #1 ++ strh r0, [r8, #2] @ movhi ++.L2171: ++ cmp r6, #0 ++ blt .L2179 ++ orr r3, r6, r9, lsl #10 ++ mov r2, #1 ++ mov r1, r2 ++ ldr r0, .L2197+8 ++ str r3, [r4, #1764] ++ ldr r3, [r4, #-524] ++ str r3, [r4, #1768] ++ bl FlashReadPages ++ ldrb r3, [r5, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2172 ++ ldr r8, [r4, #1772] ++ ldr r3, [r8, #12] ++ cmp r3, #0 ++ str r3, [sp, #28] ++ beq .L2172 ++ ldr r2, [r4, #1768] ++ ldrh r1, [fp] ++ mov r0, r2 ++ str r2, [sp, #24] ++ bl js_hash ++ ldr r3, [sp, #28] ++ cmp r3, r0 ++ beq .L2172 ++ cmp r6, #0 ++ bne .L2173 ++ mov r10, r7 ++ ldr r2, [sp, #24] ++ ldrh r1, [r10], #-4 ++ cmp r9, r1 ++ beq .L2173 ++ ldr r2, [r2] ++ ldrh r1, [r7, #-4] ++ str r3, [sp, #12] ++ str r2, [sp, #16] ++ ldr r3, [r8, #8] ++ ldr r2, [r4, #1760] ++ ldr r0, .L2197+12 ++ str r3, [sp, #8] ++ ldr r3, [r8, #4] ++ str r3, [sp, #4] ++ ldr r3, [r8] ++ str r3, [sp] ++ ldr r3, [r4, #1764] ++ bl printk ++ ldr r3, .L2197+16 ++ ldrsh r9, [r10, #4] ++ ldrh r6, [r3] ++.L2175: ++ sub r6, r6, #1 ++ sxth r6, r6 ++ b .L2171 ++.L2173: ++ mvn r3, #0 ++ str r3, [r4, #1760] ++.L2172: ++ ldr r3, [r4, #1760] ++ cmn r3, #1 ++ beq .L2175 ++ ldr r3, [r4, #-524] ++ ldr r2, .L2197+20 ++ ldr r3, [r3] ++ cmp r3, r2 ++ bne .L2175 ++ ldr r3, [r4, #-500] ++ ldrh r2, [r3] ++ movw r3, #61604 ++ cmp r2, r3 ++ bne .L2175 ++.L2179: ++ mov r2, #48 ++ ldr r1, [r4, #1768] ++ movw r6, #2332 ++ ldr r0, .L2197+24 ++ bl ftl_memcpy ++ ldrh r2, [r5, r6] ++ ldr r1, [r4, #1768] ++ ldr r0, [r4, #-3540] ++ lsl r2, r2, #1 ++ add r1, r1, #48 ++ bl ftl_memcpy ++ ldrh r1, [r5, r6] ++ ldr r3, [r4, #1768] ++ ldr r0, [r5, #32] ++ lsr r2, r1, #3 ++ lsl r1, r1, #1 ++ add r1, r1, #51 ++ add r2, r2, #4 ++ bic r1, r1, #3 ++ add r1, r3, r1 ++ bl ftl_memcpy ++ movw r3, #2436 ++ ldrh r3, [r5, r3] ++ cmp r3, #0 ++ beq .L2177 ++ ldrh r1, [r5, r6] ++ movw r3, #2428 ++ ldrh r2, [r5, r3] ++ ldr r0, [r4, #-448] ++ lsr r3, r1, #3 ++ lsl r2, r2, #2 ++ add r3, r3, r1, lsl #1 ++ ldr r1, [r4, #1768] ++ add r3, r3, #52 ++ ubfx r3, r3, #2, #14 ++ add r1, r1, r3, lsl #2 ++ bl ftl_memcpy ++.L2177: ++ ldr r2, [r4, #-3596] ++ ldr r3, .L2197+20 ++ cmp r2, r3 ++ bne .L2180 ++ ldr r6, .L2197+24 ++ movw r3, #2346 ++ ldrb r1, [r4, #-3586] @ zero_extendqisi2 ++ ldrh r3, [r5, r3] ++ ldrh r2, [r6, #8] ++ cmp r1, r3 ++ strh r2, [r7, #2] @ movhi ++ bne .L2180 ++ movw r3, #2390 ++ movw r1, #2396 ++ ldrh r3, [r5, r3] ++ ldrh r1, [r5, r1] ++ ldr r0, [r5, #2336] ++ str r2, [r4, #1796] ++ mul r3, r2, r3 ++ str r3, [r5, #2452] ++ mul r3, r3, r1 ++ str r3, [r5, #2432] ++ ldr r3, .L2197+28 ++ ldrh r3, [r3, #6] ++ sub r0, r0, r3 ++ movw r3, #2324 ++ ldrh r1, [r5, r3] ++ sub r0, r0, r2 ++ bl __aeabi_uidiv ++ ldrh r3, [r6, #16] ++ add r2, r6, #76 ++ mov r5, r2 ++ strh r0, [r7, #-8] @ movhi ++ ldrh r0, [r6, #14] ++ add r7, r2, #240 ++ lsr r1, r3, #6 ++ and r3, r3, #63 ++ strb r3, [r4, #-3514] ++ strh r1, [r2, #2] @ movhi ++ ldrh r1, [r6, #18] ++ ldrb r3, [r4, #-3585] @ zero_extendqisi2 ++ strh r0, [r2] @ movhi ++ strh r1, [r5, #48]! @ movhi ++ ldrh r1, [r6, #20] ++ strb r3, [r4, #-3512] ++ mvn r3, #0 ++ strh r3, [r7, #-4] @ movhi ++ mov r3, #0 ++ strh r3, [r2, #238] @ movhi ++ lsr ip, r1, #6 ++ and r1, r1, #63 ++ strb r1, [r4, #-3466] ++ ldrb r1, [r4, #-3584] @ zero_extendqisi2 ++ strh ip, [r5, #2] @ movhi ++ strb r3, [r4, #-3278] ++ strb r1, [r4, #-3464] ++ ldrh r1, [r6, #22] ++ strb r3, [r4, #-3276] ++ strh r1, [r2, #96]! @ movhi ++ ldrh r1, [r6, #24] ++ mov r6, r2 ++ lsr ip, r1, #6 ++ and r1, r1, #63 ++ strb r1, [r4, #-3418] ++ ldrb r1, [r4, #-3583] @ zero_extendqisi2 ++ strh ip, [r2, #2] @ movhi ++ strb r1, [r4, #-3416] ++ str r3, [r4, #-3344] ++ ldr r1, [r4, #-3564] ++ str r3, [r4, #-3356] ++ str r3, [r4, #-3364] ++ str r3, [r4, #-3348] ++ str r1, [r4, #-3324] ++ str r3, [r4, #-3320] ++ ldr r1, [r4, #-3332] ++ str r3, [r4, #-3312] ++ str r3, [r4, #-3352] ++ ldr r3, [r4, #-3556] ++ ldr r2, [r4, #-3328] ++ cmp r3, r1 ++ strhi r3, [r4, #-3332] ++ ldr r3, [r4, #-3560] ++ cmp r3, r2 ++ strhi r3, [r4, #-3328] ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L2183 ++ ldr r0, .L2197+32 ++ bl make_superblock ++.L2183: ++ ldrh r2, [r5] ++ movw r3, #65535 ++ cmp r2, r3 ++ beq .L2184 ++ ldr r0, .L2197+36 ++ bl make_superblock ++.L2184: ++ ldrh r2, [r6] ++ movw r3, #65535 ++ cmp r2, r3 ++ beq .L2185 ++ ldr r0, .L2197+40 ++ bl make_superblock ++.L2185: ++ ldrh r2, [r7, #-4] ++ movw r3, #65535 ++ sub r0, r7, #4 ++ cmp r2, r3 ++ beq .L2186 ++ bl make_superblock ++.L2186: ++ mov r0, #0 ++ b .L2168 ++.L2198: ++ .align 2 ++.L2197: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2+1760 ++ .word .LC109 ++ .word .LANCHOR0+2392 ++ .word 1179929683 ++ .word .LANCHOR2-3596 ++ .word .LANCHOR0+2456 ++ .word .LANCHOR2-3520 ++ .word .LANCHOR2-3472 ++ .word .LANCHOR2-3424 ++ .fnend ++ .size FtlLoadSysInfo, .-FtlLoadSysInfo ++ .align 2 ++ .global FtlDumpBlockInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlDumpBlockInfo, %function ++FtlDumpBlockInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 64 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #2390 ++ ldr r5, .L2211 ++ .pad #92 ++ sub sp, sp, #92 ++ ubfx r0, r0, #10, #16 ++ mov r9, r1 ++ ldr r7, .L2211+4 ++ ldrh r8, [r5, r3] ++ bl P2V_block_in_plane ++ ldr r1, .L2211+8 ++ mov r6, r0 ++ ldr r0, .L2211+12 ++ bl printk ++ ldr r2, [r7, #-3540] ++ lsl r3, r6, #1 ++ mov r1, r6 ++ ldr r0, .L2211+16 ++ ldrh r2, [r2, r3] ++ bl printk ++ add r0, sp, #88 ++ strh r6, [r0, #-48]! @ movhi ++ bl make_superblock ++ ldrb r4, [r5, #152] @ zero_extendqisi2 ++ str r7, [sp, #36] ++ adds r3, r4, #0 ++ movne r3, #1 ++ cmp r9, #0 ++ movne r3, #0 ++ cmp r3, #0 ++ moveq r4, r3 ++ beq .L2200 ++ mov r0, r6 ++ bl ftl_get_blk_mode ++ cmp r0, #1 ++ mov r4, r0 ++ movweq r3, #2392 ++ ldrheq r8, [r5, r3] ++.L2200: ++ movw r3, #2390 ++ mov r6, #0 ++ mov r9, #36 ++ ldrh r3, [r5, r3] ++ mov r2, r8 ++ mov r1, r4 ++ ldr r0, .L2211+20 ++ bl printk ++.L2201: ++ ldr r3, .L2211+24 ++ add ip, sp, #54 ++ movw r10, #65535 ++ ldrh r3, [r3] ++ mov r7, r3 ++ ldr r3, .L2211+4 ++ ldr r2, [r3, #-2696] ++ ldr r0, [r3, #-536] ++ ldr r3, [r3, #-2692] ++ str r2, [sp, #24] ++ ldr r2, .L2211+28 ++ str r3, [sp, #32] ++ ldrh r1, [r2] ++ ldrh lr, [r2, #2] ++ mov r2, #0 ++ mov r5, r2 ++ str r1, [sp, #28] ++.L2202: ++ uxth r3, r2 ++ cmp r7, r3 ++ bhi .L2204 ++ ldr fp, .L2211+32 ++ mov r10, #0 ++ mov r2, r4 ++ mov r1, r5 ++ bl FlashReadPages ++.L2205: ++ uxth r3, r10 ++ cmp r5, r3 ++ bhi .L2206 ++ add r6, r6, #1 ++ uxth r6, r6 ++ cmp r8, r6 ++ bne .L2201 ++.L2207: ++ mov r0, #0 ++ add sp, sp, #92 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2204: ++ ldrh r3, [ip, #2]! ++ cmp r3, r10 ++ beq .L2203 ++ mla r1, r9, r5, r0 ++ orr r3, r6, r3, lsl #10 ++ str r3, [r1, #4] ++ ldr r3, [sp, #28] ++ mul r3, r3, r5 ++ add fp, r3, #3 ++ cmp r3, #0 ++ movlt r3, fp ++ ldr fp, [sp, #24] ++ bic r3, r3, #3 ++ add r3, fp, r3 ++ str r3, [r1, #8] ++ mul r3, lr, r5 ++ add r5, r5, #1 ++ uxth r5, r5 ++ add fp, r3, #3 ++ cmp r3, #0 ++ movlt r3, fp ++ ldr fp, [sp, #32] ++ bic r3, r3, #3 ++ add r3, fp, r3 ++ str r3, [r1, #12] ++.L2203: ++ add r2, r2, #1 ++ b .L2202 ++.L2206: ++ ldr r3, [sp, #36] ++ mul r0, r9, r10 ++ ldrh r1, [sp, #40] ++ add r10, r10, #1 ++ ldr ip, [r3, #-536] ++ add r2, ip, r0 ++ ldr lr, [r2, #8] ++ ldr r3, [r2, #12] ++ ldr r7, [lr, #4] ++ str r7, [sp, #20] ++ ldr lr, [lr] ++ str lr, [sp, #16] ++ ldr lr, [r3, #12] ++ str lr, [sp, #12] ++ ldr lr, [r3, #8] ++ str lr, [sp, #8] ++ ldr lr, [r3, #4] ++ str lr, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r3, [r2, #4] ++ ldr r2, [ip, r0] ++ mov r0, fp ++ bl printk ++ b .L2205 ++.L2212: ++ .align 2 ++.L2211: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR3+141 ++ .word .LC110 ++ .word .LC111 ++ .word .LC112 ++ .word .LANCHOR0+2324 ++ .word .LANCHOR0+2400 ++ .word .LC113 ++ .fnend ++ .size FtlDumpBlockInfo, .-FtlDumpBlockInfo ++ .align 2 ++ .global FtlScanAllBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlScanAllBlock, %function ++FtlScanAllBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r6, #0 ++ ldr r5, .L2224 ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r1, .L2224+4 ++ ldr r0, .L2224+8 ++ bl printk ++.L2214: ++ ldr r3, .L2224+12 ++ uxth r0, r6 ++ ldrh r3, [r3] ++ cmp r3, r0 ++ bhi .L2222 ++ mov r0, #0 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2222: ++ add r4, sp, #80 ++ movw r9, #65535 ++ strh r0, [r4, #-48]! @ movhi ++ mov r10, #36 ++ bl ftl_get_blk_mode ++ uxth r1, r6 ++ ldr ip, [r5, #-3540] ++ mov r3, r0 ++ ldr r0, .L2224+16 ++ lsl r2, r1, #1 ++ ldrh r2, [ip, r2] ++ bl printk ++ mov r0, r4 ++ bl make_superblock ++ ldr r3, .L2224+20 ++ add ip, sp, #46 ++ ldr r0, [r5, #-536] ++ ldr r7, [r5, #-2692] ++ ldrh r2, [r3] ++ ldrh lr, [r3, #76] ++ ldrh r8, [r3, #78] ++ str r2, [sp, #24] ++ ldr r2, [r5, #-2696] ++ str r2, [sp, #28] ++ mov r2, #0 ++ mov r4, r2 ++.L2215: ++ ldr r1, [sp, #24] ++ uxth r3, r2 ++ cmp r1, r3 ++ bhi .L2217 ++ ldr r9, .L2224+24 ++ mov r7, #0 ++ mov r8, #36 ++ mov r2, #0 ++ mov r1, r4 ++ bl FlashReadPages ++.L2218: ++ uxth r3, r7 ++ cmp r4, r3 ++ bhi .L2219 ++ ldr r9, .L2224+28 ++ mov r7, #0 ++ mov r8, #36 ++ mov r2, #1 ++ mov r1, r4 ++ ldr r0, [r5, #-536] ++ bl FlashReadPages ++.L2220: ++ uxth r3, r7 ++ cmp r4, r3 ++ bhi .L2221 ++ add r6, r6, #1 ++ b .L2214 ++.L2217: ++ ldrh r3, [ip, #2]! ++ cmp r3, r9 ++ beq .L2216 ++ mla r1, r10, r4, r0 ++ lsl r3, r3, #10 ++ str r3, [r1, #4] ++ mul r3, lr, r4 ++ add fp, r3, #3 ++ cmp r3, #0 ++ movlt r3, fp ++ ldr fp, [sp, #28] ++ bic r3, r3, #3 ++ add r3, fp, r3 ++ str r3, [r1, #8] ++ mul r3, r8, r4 ++ add r4, r4, #1 ++ uxth r4, r4 ++ add fp, r3, #3 ++ cmp r3, #0 ++ movlt r3, fp ++ bic r3, r3, #3 ++ add r3, r7, r3 ++ str r3, [r1, #12] ++.L2216: ++ add r2, r2, #1 ++ b .L2215 ++.L2219: ++ mul r0, r8, r7 ++ ldr ip, [r5, #-536] ++ ldrh r1, [sp, #32] ++ add r7, r7, #1 ++ add r2, ip, r0 ++ ldr lr, [r2, #8] ++ ldr r3, [r2, #12] ++ ldr r10, [lr, #4] ++ str r10, [sp, #20] ++ ldr lr, [lr] ++ str lr, [sp, #16] ++ ldr lr, [r3, #12] ++ str lr, [sp, #12] ++ ldr lr, [r3, #8] ++ str lr, [sp, #8] ++ ldr lr, [r3, #4] ++ str lr, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r3, [r2, #4] ++ ldr r2, [ip, r0] ++ mov r0, r9 ++ bl printk ++ b .L2218 ++.L2221: ++ mul r0, r8, r7 ++ ldr ip, [r5, #-536] ++ ldrh r1, [sp, #32] ++ add r7, r7, #1 ++ add r2, ip, r0 ++ ldr lr, [r2, #8] ++ ldr r3, [r2, #12] ++ ldr r10, [lr, #4] ++ str r10, [sp, #20] ++ ldr lr, [lr] ++ str lr, [sp, #16] ++ ldr lr, [r3, #12] ++ str lr, [sp, #12] ++ ldr lr, [r3, #8] ++ str lr, [sp, #8] ++ ldr lr, [r3, #4] ++ str lr, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r3, [r2, #4] ++ ldr r2, [ip, r0] ++ mov r0, r9 ++ bl printk ++ b .L2220 ++.L2225: ++ .align 2 ++.L2224: ++ .word .LANCHOR2 ++ .word .LANCHOR3+158 ++ .word .LC110 ++ .word .LANCHOR0+2334 ++ .word .LC114 ++ .word .LANCHOR0+2324 ++ .word .LC115 ++ .word .LC116 ++ .fnend ++ .size FtlScanAllBlock, .-FtlScanAllBlock ++ .align 2 ++ .global ftl_scan_all_ppa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_scan_all_ppa, %function ++ftl_scan_all_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2243 ++ movw r2, #2388 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r5, .L2243+4 ++ ldrh r4, [r3, r2] ++ add r10, r5, #1760 ++ str r3, [sp, #28] ++ sub r4, r4, #16 ++ lsl r9, r4, #10 ++.L2227: ++ ldr r3, .L2243+8 ++ ldrh r3, [r3] ++ cmp r4, r3 ++ blt .L2235 ++ ldr r1, .L2243+12 ++ ldr r0, .L2243+16 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b printk ++.L2235: ++ uxth r7, r4 ++ mov r0, r7 ++ bl ftl_get_blk_mode ++ ldr r3, [sp, #28] ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2228 ++ ldr r3, .L2243+20 ++ ldrh r2, [r3] ++ cmp r4, r2 ++ bge .L2229 ++ ldrh r3, [r3, #72] ++ cmp r4, r3 ++ blt .L2229 ++.L2228: ++ cmp r0, #1 ++ bne .L2230 ++.L2229: ++ ldr r3, .L2243+24 ++ mov r8, #-2147483648 ++ ldrh r6, [r3] ++.L2231: ++ mov r3, r8 ++ mov r2, r6 ++ mov r1, r4 ++ ldr r0, .L2243+28 ++ bl printk ++ mov r0, r7 ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ beq .L2232 ++ mov r3, r8 ++ mov r2, r6 ++ mov r1, r4 ++ ldr r0, .L2243+32 ++ bl printk ++.L2232: ++ ldr fp, .L2243+36 ++ mov r7, #0 ++.L2233: ++ cmp r7, r6 ++ bne .L2234 ++ add r4, r4, #1 ++ add r9, r9, #1024 ++ b .L2227 ++.L2230: ++ ldr r3, .L2243+40 ++ mov r8, #0 ++ ldrh r6, [r3] ++ b .L2231 ++.L2234: ++ add r3, r8, r9 ++ mov r2, #0 ++ add r3, r3, r7 ++ mov r1, #1 ++ str r3, [r5, #1764] ++ mov r0, r10 ++ ldr r3, [r5, #-524] ++ add r7, r7, #1 ++ str r2, [r5, #1760] ++ str r3, [r5, #1768] ++ ldr r3, [r5, #-500] ++ str r3, [r5, #1772] ++ bl FlashReadPages ++ ldr r2, [r5, #1768] ++ mov r0, fp ++ ldr r3, [r5, #1772] ++ ldr r1, [r2, #4] ++ str r1, [sp, #16] ++ ldr r2, [r2] ++ ldr r1, [r5, #1764] ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r2, [r5, #1760] ++ ldr r3, [r3] ++ bl printk ++ b .L2233 ++.L2244: ++ .align 2 ++.L2243: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2388 ++ .word .LANCHOR3+174 ++ .word .LC120 ++ .word .LANCHOR0+2332 ++ .word .LANCHOR0+2392 ++ .word .LC117 ++ .word .LC118 ++ .word .LC119 ++ .word .LANCHOR0+2390 ++ .fnend ++ .size ftl_scan_all_ppa, .-ftl_scan_all_ppa ++ .align 2 ++ .global FlashProgPages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgPages, %function ++FlashProgPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 72 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r5, .L2298 ++ str r1, [sp, #12] ++ ldr ip, [r5, #48] ++ ldrb r8, [r5, #36] @ zero_extendqisi2 ++ str r3, [sp, #24] ++ ldrb ip, [ip, #19] @ zero_extendqisi2 ++ cmp r8, #0 ++ str ip, [sp, #20] ++ bne .L2246 ++ ldr r3, .L2298+4 ++ mov r4, r0 ++ mov r9, r2 ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ str r3, [sp, #16] ++ add r3, r5, #1216 ++ add r3, r3, #4 ++ str r3, [sp, #28] ++.L2247: ++ ldr r3, [sp, #12] ++ cmp r8, r3 ++ bcc .L2260 ++ ldr r7, .L2298+8 ++ mov r6, #0 ++.L2261: ++ ldrb r3, [r5, #2234] @ zero_extendqisi2 ++ cmp r6, r3 ++ bcc .L2263 ++ ldr r3, [sp, #24] ++ cmp r3, #0 ++ bne .L2264 ++.L2272: ++ mov r0, #0 ++ b .L2245 ++.L2246: ++ bl FlashProgSlc2KPages ++.L2245: ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2260: ++ ldr r3, [sp, #12] ++ mov r7, #36 ++ mul r7, r7, r8 ++ add r2, sp, #36 ++ mov r1, r9 ++ sub r3, r3, r8 ++ uxtb r3, r3 ++ add fp, r4, r7 ++ str r3, [sp] ++ mov r0, fp ++ add r3, sp, #40 ++ bl LogAddr2PhyAddr ++ ldrb r3, [r5, #2234] @ zero_extendqisi2 ++ mov r10, r0 ++ ldr r0, [sp, #40] ++ cmp r3, r0 ++ mvnls r3, #0 ++ strls r3, [r4, r7] ++ bls .L2250 ++ ldrb r3, [r5, #2244] @ zero_extendqisi2 ++ cmp r3, #0 ++ add r3, r5, r0, lsl #4 ++ moveq r10, #0 ++ ldr r3, [r3, #2112] ++ cmp r3, #0 ++ beq .L2252 ++ uxtb r0, r0 ++ bl FlashWaitCmdDone ++.L2252: ++ ldr r3, [sp, #40] ++ mov r1, #0 ++ cmp r10, #0 ++ add r2, r5, r3, lsl #4 ++ str r1, [r2, #2116] ++ ldr r1, [sp, #36] ++ str fp, [r2, #2112] ++ str r1, [r2, #2108] ++ addne r1, r7, #36 ++ addne r1, r4, r1 ++ strne r1, [r2, #2116] ++ add r2, r5, r3 ++ ldrb r6, [r2, #2236] @ zero_extendqisi2 ++ add r3, r5, r3, lsl #4 ++ strb r6, [r3, #2104] ++ mov r0, r6 ++ ldrb r3, [r5, #2234] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L2254 ++ bl NandcWaitFlashReady ++.L2255: ++ ldr r3, [sp, #20] ++ sub r3, r3, #1 ++ cmp r3, #7 ++ bhi .L2256 ++ add r3, r5, r6 ++ ldrb r3, [r3, #2068] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2256 ++ mov r3, #0 ++ ldr r2, [sp, #28] ++ ldrb r1, [r5, #1217] @ zero_extendqisi2 ++ mov r0, r6 ++ bl HynixSetRRPara ++.L2256: ++ mov r0, r6 ++ bl NandcFlashCs ++ cmp r9, #1 ++ mov r0, r6 ++ bne .L2257 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2257 ++ bl flash_enter_slc_mode ++.L2258: ++ ldr r1, [sp, #36] ++ mov r0, r6 ++ bl FlashProgFirstCmd ++ ldr r3, [fp, #12] ++ mov r1, #1 ++ ldr r2, [sp, #16] ++ mov r0, r6 ++ str r3, [sp] ++ ldr r3, [fp, #8] ++ bl NandcXferData ++ cmp r10, #0 ++ beq .L2259 ++ ldr r1, [sp, #36] ++ mov r0, r6 ++ bl FlashProgDpFirstCmd ++ ldr r3, [sp, #40] ++ mov r0, r6 ++ ldr r1, [sp, #36] ++ add r7, r7, #36 ++ add r7, r4, r7 ++ add r3, r5, r3, lsl #2 ++ ldr r2, [r3, #1180] ++ adds r2, r2, #0 ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ ldr r3, [r5, #40] ++ mov r0, r6 ++ ldr r1, [sp, #36] ++ add r1, r1, r3 ++ bl FlashProgDpSecondCmd ++ ldr r3, [r7, #12] ++ mov r1, #1 ++ ldr r2, [sp, #16] ++ mov r0, r6 ++ str r3, [sp] ++ ldr r3, [r7, #8] ++ bl NandcXferData ++.L2259: ++ ldr r1, [sp, #36] ++ mov r0, r6 ++ add r8, r8, r10 ++ bl FlashProgSecondCmd ++ mov r0, r6 ++ bl NandcFlashDeCs ++.L2250: ++ add r8, r8, #1 ++ b .L2247 ++.L2254: ++ bl NandcFlashCs ++ ldr r3, [sp, #40] ++ mov r0, r6 ++ ldr r1, [sp, #36] ++ add r3, r5, r3, lsl #2 ++ ldr r2, [r3, #1180] ++ adds r2, r2, #0 ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ mov r0, r6 ++ bl NandcFlashDeCs ++ b .L2255 ++.L2257: ++ bl flash_exit_slc_mode ++ b .L2258 ++.L2263: ++ uxtb r0, r6 ++ bl FlashWaitCmdDone ++ cmp r9, #1 ++ bne .L2262 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2262 ++ ldrb r0, [r7, r6, lsl #4] @ zero_extendqisi2 ++ bl flash_exit_slc_mode ++.L2262: ++ add r6, r6, #1 ++ b .L2261 ++.L2264: ++ ldr r5, .L2298+12 ++ mov r6, #0 ++ ldr r7, .L2298+16 ++.L2265: ++ ldr r3, [sp, #12] ++ cmp r6, r3 ++ beq .L2272 ++ ldr r3, [r4] ++ cmn r3, #1 ++ bne .L2266 ++ ldr r1, [r4, #4] ++ ldr r0, .L2298+20 ++ bl printk ++.L2267: ++ add r6, r6, #1 ++ add r4, r4, #36 ++ b .L2265 ++.L2266: ++ ldr r3, [sp, #12] ++ add r2, sp, #36 ++ mov r1, r9 ++ mov r0, r4 ++ sub r3, r3, r6 ++ uxtb r3, r3 ++ str r3, [sp] ++ add r3, sp, #40 ++ bl LogAddr2PhyAddr ++ ldr r2, [r5, #1732] ++ mov r3, #0 ++ mov lr, r4 ++ add ip, sp, #44 ++ str r3, [r2] ++ ldr r2, [r5, #1736] ++ str r3, [r2] ++ ldmia lr!, {r0, r1, r2, r3} ++ stmia ip!, {r0, r1, r2, r3} ++ ldmia lr!, {r0, r1, r2, r3} ++ stmia ip!, {r0, r1, r2, r3} ++ mov r2, r9 ++ ldr r3, [lr] ++ mov r1, #1 ++ add r0, sp, #44 ++ str r3, [ip] ++ ldr r3, [r5, #1732] ++ str r3, [sp, #52] ++ ldr r3, [r5, #1736] ++ str r3, [sp, #56] ++ bl FlashReadPages ++ ldr r8, [sp, #44] ++ cmn r8, #1 ++ bne .L2268 ++ ldr r1, [r4, #4] ++ ldr r0, .L2298+24 ++ bl printk ++ str r8, [r4] ++.L2268: ++ ldr r3, [r4, #12] ++ cmp r3, #0 ++ beq .L2269 ++ ldr r2, [r3] ++ ldr r3, [r5, #1736] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L2269 ++ ldr r1, [r4, #4] ++ ldr r0, .L2298+28 ++ bl printk ++ mvn r3, #0 ++ str r3, [r4] ++.L2269: ++ ldr r3, [r4, #8] ++ cmp r3, #0 ++ beq .L2267 ++ ldr r2, [r3] ++ ldr r3, [r5, #1732] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L2267 ++ ldr r1, [r4, #4] ++ mov r0, r7 ++ bl printk ++ mvn r3, #0 ++ str r3, [r4] ++ b .L2267 ++.L2299: ++ .align 2 ++.L2298: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .word .LANCHOR0+2104 ++ .word .LANCHOR2 ++ .word .LC108 ++ .word .LC104 ++ .word .LC105 ++ .word .LC107 ++ .fnend ++ .size FlashProgPages, .-FlashProgPages ++ .align 2 ++ .global FlashTestBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashTestBlk, %function ++FlashTestBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 104 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #108 ++ sub sp, sp, #108 ++ ldr r5, .L2304 ++ ldr r3, [r5, #1716] ++ cmp r0, r3 ++ movcc r4, #0 ++ bcc .L2300 ++ ldr r3, [r5, #1724] ++ mov r4, r0 ++ mov r2, #32 ++ add r0, sp, #40 ++ mov r1, #165 ++ str r0, [sp, #16] ++ str r3, [sp, #12] ++ bl ftl_memset ++ mov r2, #8 ++ mov r1, #90 ++ ldr r0, [r5, #1724] ++ bl ftl_memset ++ lsl r0, r4, #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r0, [sp, #8] ++ add r0, sp, #4 ++ bl FlashEraseBlocks ++ mov r3, #1 ++ add r0, sp, #4 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldr r4, [sp, #4] ++ mov r2, #1 ++ mov r1, #0 ++ add r0, sp, #4 ++ adds r4, r4, #0 ++ movne r4, #1 ++ rsb r4, r4, #0 ++ bl FlashEraseBlocks ++.L2300: ++ mov r0, r4 ++ add sp, sp, #108 ++ @ sp needed ++ pop {r4, r5, pc} ++.L2305: ++ .align 2 ++.L2304: ++ .word .LANCHOR2 ++ .fnend ++ .size FlashTestBlk, .-FlashTestBlk ++ .align 2 ++ .global FlashMakeFactorBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashMakeFactorBbt, %function ++FlashMakeFactorBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L2357 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r5, .L2357 ++ mov r4, r2 ++ ldr r3, [r2, #1728] ++ str r3, [sp, #24] ++ ldr r3, .L2357+4 ++ ldrh r0, [r3, #136] ++ ldrh r1, [r3, #138] ++ smulbb r1, r1, r0 ++ ldr r0, .L2357+8 ++ uxth r1, r1 ++ str r1, [sp, #4] ++ ldr r1, [r3, #48] ++ ldrb r1, [r1, #24] @ zero_extendqisi2 ++ str r1, [sp, #28] ++ ldrh r1, [r3, #40] ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ str r1, [sp, #20] ++ cmp r3, #1 ++ moveq r3, r1 ++ mov r1, #1 ++ lsleq r3, r3, #1 ++ uxtheq r3, r3 ++ streq r3, [sp, #20] ++ bl printk ++ ldr r0, [r4, #1728] ++ mov r2, #4096 ++ mov r1, #0 ++ ldr r4, .L2357+4 ++ bl ftl_memset ++ ldr r3, [sp, #4] ++ lsr r3, r3, #4 ++ str r3, [sp, #32] ++ mov r3, #0 ++ str r3, [sp, #12] ++.L2308: ++ ldrb r7, [sp, #12] @ zero_extendqisi2 ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ cmp r3, r7 ++ bhi .L2335 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2335: ++ ldr r2, .L2357+12 ++ lsl r3, r7, #1 ++ ldrh r6, [r2, r3] ++ cmp r6, #0 ++ bne .L2309 ++ ldrh r2, [r4, #144] ++ mov r1, r6 ++ ldr r0, [r5, #1696] ++ add fp, r4, r7, lsl #2 ++ mov r8, r6 ++ mov r9, r6 ++ lsl r2, r2, #9 ++ bl ftl_memset ++ add r3, r4, r7 ++ str r6, [sp, #8] ++ ldrb r10, [r3, #2236] @ zero_extendqisi2 ++.L2310: ++ ldrh r3, [sp, #8] ++ ldr r2, [sp, #4] ++ str r3, [sp, #16] ++ cmp r3, r2 ++ bcc .L2321 ++.L2320: ++ mov r2, r8 ++ mov r1, r7 ++ ldr r0, .L2357+16 ++ bl printk ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ ldr r2, [sp, #32] ++ mul r3, r2, r3 ++ cmp r8, r3 ++ blt .L2322 ++ ldrh r2, [r4, #144] ++ mov r1, #0 ++ ldr r0, [r5, #1696] ++ lsl r2, r2, #9 ++ bl ftl_memset ++.L2322: ++ cmp r7, #0 ++ bne .L2324 ++ add r3, r5, #1712 ++ ldr r8, .L2357+20 ++ add r3, r3, #4 ++ ldrh r10, [r3] ++ mov r9, #1 ++.L2325: ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ cmp r3, r10 ++ bhi .L2327 ++ ldr r3, [sp, #4] ++ mov r10, #1 ++ ldr r9, .L2357+20 ++ sub fp, r3, #1 ++ sub r8, r3, #50 ++ uxth fp, fp ++.L2328: ++ cmp fp, r8 ++ bgt .L2330 ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ ldr r2, [r5, #1716] ++ sub r3, r3, r2 ++ cmp r6, r3 ++ bcc .L2324 ++ ldrh r2, [r4, #144] ++ mov r1, #0 ++ ldr r0, [r5, #1696] ++ lsl r2, r2, #9 ++ bl ftl_memset ++.L2324: ++ ldr r3, [sp, #4] ++ ldrb r8, [sp, #12] @ zero_extendqisi2 ++ ldr r9, .L2357+12 ++ sub r6, r3, #1 ++ ldr fp, .L2357+24 ++ ldr r10, .L2357+28 ++ uxth r6, r6 ++ mul r8, r3, r8 ++ add r9, r9, r7, lsl #1 ++.L2332: ++ mov r1, r7 ++ mov r2, r6 ++ mov r0, fp ++ bl printk ++ ldr r1, [r5, #1696] ++.L2333: ++ lsr r2, r6, #5 ++ and r3, r6, #31 ++ ldr r2, [r1, r2, lsl #2] ++ lsr r3, r2, r3 ++ ands r3, r3, #1 ++ bne .L2334 ++ ldr r2, [sp, #24] ++ add r0, sp, #44 ++ strh r6, [r9] @ movhi ++ strh r10, [r2] @ movhi ++ strh r6, [r2, #2] @ movhi ++ strh r3, [r2, #8] @ movhi ++ mov r2, #1 ++ ldr r3, [r5, #1696] ++ mov r1, r2 ++ str r3, [sp, #52] ++ ldr r3, [r5, #1728] ++ str r3, [sp, #56] ++ add r3, r6, r8 ++ lsl r3, r3, #10 ++ str r3, [sp, #48] ++ bl FlashEraseBlocks ++ mov r3, #1 ++ add r0, sp, #44 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldr r3, [sp, #44] ++ cmp r3, #0 ++ beq .L2309 ++ sub r6, r6, #1 ++ uxth r6, r6 ++ b .L2332 ++.L2321: ++ mvn r3, #0 ++ strb r3, [sp, #42] ++ strb r3, [sp, #43] ++ ldr r3, [sp, #28] ++ tst r3, #1 ++ beq .L2312 ++ ldr r3, [fp, #1180] ++ add r2, sp, #42 ++ mov r0, r10 ++ add r3, r9, r3 ++ mov r1, r3 ++ str r3, [sp, #36] ++ bl FlashReadSpare ++ ldrb r2, [r4, #36] @ zero_extendqisi2 ++ ldr r3, [sp, #36] ++ cmp r2, #1 ++ bne .L2312 ++ ldr r1, [r4, #40] ++ add r2, sp, #43 ++ mov r0, r10 ++ add r1, r3, r1 ++ bl FlashReadSpare ++ ldrb r3, [sp, #42] @ zero_extendqisi2 ++ ldrb r2, [sp, #43] @ zero_extendqisi2 ++ and r3, r3, r2 ++ strb r3, [sp, #42] ++.L2312: ++ ldr r3, [sp, #28] ++ tst r3, #2 ++ beq .L2314 ++ ldr r3, [r4, #48] ++ add r2, sp, #43 ++ mov r0, r10 ++ ldrh r1, [r3, #10] ++ ldr r3, [fp, #1180] ++ sub r1, r1, #1 ++ add r1, r1, r3 ++ add r1, r1, r9 ++ bl FlashReadSpare ++.L2314: ++ ldr r2, [r4, #48] ++ ldrb r3, [r2, #7] @ zero_extendqisi2 ++ cmp r3, #8 ++ cmpne r3, #1 ++ ldrb r3, [sp, #42] @ zero_extendqisi2 ++ beq .L2315 ++ ldrb r2, [r2, #18] @ zero_extendqisi2 ++ cmp r2, #12 ++ bne .L2316 ++.L2315: ++ cmp r3, #0 ++ ldrbne r0, [sp, #43] @ zero_extendqisi2 ++ clzne r0, r0 ++ lsrne r0, r0, #5 ++ bne .L2317 ++.L2337: ++ mov r0, #1 ++ b .L2317 ++.L2316: ++ cmp r3, #255 ++ bne .L2337 ++ ldrb r0, [sp, #43] @ zero_extendqisi2 ++ subs r0, r0, #255 ++ movne r0, #1 ++.L2317: ++ ldr r3, [sp, #28] ++ tst r3, #4 ++ beq .L2318 ++ ldr r1, [fp, #1180] ++ mov r0, r10 ++ add r1, r9, r1 ++ bl SandiskProgTestBadBlock ++.L2318: ++ cmp r0, #0 ++ beq .L2319 ++ ldr r2, [sp, #8] ++ mov r1, r7 ++ ldr r0, .L2357+32 ++ add r8, r8, #1 ++ bl printk ++ ldr r3, [sp, #16] ++ mov ip, #1 ++ ldr r2, [r5, #1696] ++ uxth r8, r8 ++ and r0, r3, #31 ++ lsr r1, r3, #5 ++ ldr r3, [r2, r1, lsl #2] ++ orr r3, r3, ip, lsl r0 ++ str r3, [r2, r1, lsl #2] ++ ldr r2, [sp, #32] ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ mul r3, r2, r3 ++ cmp r8, r3 ++ bgt .L2320 ++.L2319: ++ ldr r3, [sp, #8] ++ add r3, r3, #1 ++ str r3, [sp, #8] ++ ldr r3, [sp, #20] ++ add r9, r9, r3 ++ b .L2310 ++.L2327: ++ mov r0, r10 ++ bl FlashTestBlk ++ cmp r0, #0 ++ beq .L2326 ++ mov r1, r10 ++ mov r0, r8 ++ bl printk ++ ldr r1, [r5, #1696] ++ lsr r0, r10, #5 ++ add r6, r6, #1 ++ and r3, r10, #31 ++ uxth r6, r6 ++ ldr r2, [r1, r0, lsl #2] ++ orr r3, r2, r9, lsl r3 ++ str r3, [r1, r0, lsl #2] ++.L2326: ++ add r10, r10, #1 ++ uxth r10, r10 ++ b .L2325 ++.L2330: ++ mov r0, fp ++ bl FlashTestBlk ++ cmp r0, #0 ++ beq .L2329 ++ mov r1, fp ++ mov r0, r9 ++ bl printk ++ ldr r1, [r5, #1696] ++ lsr r0, fp, #5 ++ and r3, fp, #31 ++ ldr r2, [r1, r0, lsl #2] ++ orr r3, r2, r10, lsl r3 ++ str r3, [r1, r0, lsl #2] ++.L2329: ++ sub fp, fp, #1 ++ uxth fp, fp ++ b .L2328 ++.L2334: ++ sub r6, r6, #1 ++ uxth r6, r6 ++ b .L2333 ++.L2309: ++ ldr r3, [sp, #12] ++ add r3, r3, #1 ++ str r3, [sp, #12] ++ b .L2308 ++.L2358: ++ .align 2 ++.L2357: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC121 ++ .word .LANCHOR2+1742 ++ .word .LC123 ++ .word .LC124 ++ .word .LC125 ++ .word -3872 ++ .word .LC122 ++ .fnend ++ .size FlashMakeFactorBbt, .-FlashMakeFactorBbt ++ .align 2 ++ .global FtlLowFormatEraseBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLowFormatEraseBlock, %function ++FtlLowFormatEraseBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2404 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r2, [r3, #-3612] ++ cmp r2, #0 ++ movne r4, #0 ++ bne .L2359 ++ ldr r5, .L2404+4 ++ mov r10, r3 ++ ldr fp, .L2404+8 ++ mov r9, r2 ++ mov r6, r2 ++ mov r4, r2 ++ ldrb r3, [r5, #2244] @ zero_extendqisi2 ++ mov r8, #36 ++ str r1, [sp, #4] ++ str r0, [sp, #8] ++ str r3, [sp, #20] ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ str r0, [r10, #-548] ++ str r3, [sp, #12] ++.L2361: ++ ldrh r0, [fp] ++ uxth r1, r9 ++ cmp r0, r1 ++ bhi .L2365 ++ cmp r6, #0 ++ beq .L2359 ++ ldr r3, [sp, #12] ++ mov r8, #0 ++ mov r2, r6 ++ ldr r0, [r10, #-3608] ++ strb r8, [r5, #2244] ++ mov r9, #36 ++ adds r7, r3, #0 ++ movne r7, #1 ++ mov r1, r7 ++ bl FlashEraseBlocks ++ ldrb r3, [sp, #20] @ zero_extendqisi2 ++ strb r3, [r5, #2244] ++.L2367: ++ uxth r2, r8 ++ cmp r6, r2 ++ bhi .L2369 ++ ldr r3, [sp, #4] ++ cmp r3, #0 ++ bne .L2370 ++ uxth r7, r7 ++ mov r3, #6 ++ str r3, [sp, #16] ++ mov r3, #1 ++ str r3, [sp, #12] ++.L2371: ++ ldr r6, .L2404 ++ mov r9, #0 ++.L2380: ++ ldr fp, .L2404+4 ++ mov r10, #0 ++ mov r5, r10 ++.L2372: ++ ldr r3, .L2404+8 ++ ldrh r1, [r3] ++ uxth r3, r10 ++ cmp r1, r3 ++ bhi .L2375 ++ cmp r5, #0 ++ beq .L2359 ++ mov r3, #1 ++ mov r8, #0 ++ mov r2, r7 ++ mov r1, r5 ++ ldr r0, [r6, #-3608] ++ strb r8, [fp, #2244] ++ bl FlashProgPages ++ ldrb r3, [sp, #20] @ zero_extendqisi2 ++ strb r3, [fp, #2244] ++ mov fp, #36 ++.L2377: ++ uxth r3, r8 ++ cmp r5, r3 ++ bhi .L2379 ++ ldr r3, [sp, #16] ++ add r9, r9, r3 ++ ldr r3, [sp, #12] ++ uxth r9, r9 ++ cmp r3, r9 ++ bhi .L2380 ++ mov r8, #0 ++ mov r9, #36 ++.L2381: ++ uxth r3, r8 ++ cmp r5, r3 ++ ldr r3, [sp, #4] ++ bhi .L2383 ++ adds r0, r3, #0 ++ ldr r3, [sp, #8] ++ movne r0, #1 ++ cmp r3, #63 ++ orrls r0, r0, #1 ++ cmp r0, #0 ++ beq .L2359 ++ mov r2, r5 ++ mov r1, r7 ++ ldr r0, [r6, #-3608] ++ bl FlashEraseBlocks ++.L2359: ++ mov r0, r4 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2365: ++ uxth r1, r9 ++ ldr ip, [r10, #-3608] ++ mov r3, #0 ++ mul r0, r8, r1 ++ str r3, [ip, r0] ++ add r0, r5, r1 ++ ldrb r0, [r0, #2350] @ zero_extendqisi2 ++ ldr r1, [sp, #8] ++ bl V2P_block ++ ldr r3, [sp, #4] ++ mov r7, r0 ++ cmp r3, #0 ++ beq .L2362 ++ bl IsBlkInVendorPart ++ cmp r0, #0 ++ bne .L2363 ++.L2362: ++ mov r0, r7 ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ addne r4, r4, #1 ++ uxthne r4, r4 ++ bne .L2363 ++ ldr r3, .L2404+12 ++ lsl r7, r7, #10 ++ ldr ip, [r10, #-3608] ++ ldrh r1, [r3] ++ mla ip, r8, r6, ip ++ mul r1, r6, r1 ++ add r6, r6, #1 ++ uxth r6, r6 ++ str r0, [ip, #8] ++ str r7, [ip, #4] ++ add r0, r1, #3 ++ cmp r1, #0 ++ movlt r1, r0 ++ ldr r0, [r10, #-496] ++ bic r1, r1, #3 ++ add r1, r0, r1 ++ str r1, [ip, #12] ++.L2363: ++ add r9, r9, #1 ++ b .L2361 ++.L2369: ++ mul r2, r9, r8 ++ ldr r1, [r10, #-3608] ++ add ip, r1, r2 ++ ldr r2, [r1, r2] ++ cmn r2, #1 ++ bne .L2368 ++ ldr r0, [ip, #4] ++ add r4, r4, #1 ++ uxth r4, r4 ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++.L2368: ++ add r8, r8, #1 ++ b .L2367 ++.L2370: ++ movw r3, #2392 ++ ldrh r3, [r5, r3] ++ str r3, [sp, #12] ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldreq r3, [sp, #12] ++ movne r7, #1 ++ moveq r7, #1 ++ strne r7, [sp, #16] ++ lsreq r3, r3, #2 ++ streq r3, [sp, #16] ++ b .L2371 ++.L2375: ++ uxth r3, r10 ++ mov r2, #36 ++ ldr r0, [r6, #-3608] ++ mul r1, r2, r3 ++ add r3, fp, r3 ++ mov r2, #0 ++ str r2, [r0, r1] ++ ldr r1, [sp, #8] ++ ldrb r0, [r3, #2350] @ zero_extendqisi2 ++ bl V2P_block ++ ldr r3, [sp, #4] ++ mov r8, r0 ++ cmp r3, #0 ++ beq .L2373 ++ bl IsBlkInVendorPart ++ cmp r0, #0 ++ bne .L2374 ++.L2373: ++ mov r0, r8 ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ bne .L2374 ++ ldr r1, [r6, #-3608] ++ mov r3, #36 ++ add r8, r9, r8, lsl #10 ++ mla r1, r3, r5, r1 ++ ldr r3, [r6, #-508] ++ str r3, [r1, #8] ++ ldr r3, .L2404+12 ++ str r8, [r1, #4] ++ ldrh r3, [r3] ++ mul r3, r5, r3 ++ add r5, r5, #1 ++ uxth r5, r5 ++ add r0, r3, #3 ++ cmp r3, #0 ++ movlt r3, r0 ++ ldr r0, [r6, #-504] ++ bic r3, r3, #3 ++ add r3, r0, r3 ++ str r3, [r1, #12] ++.L2374: ++ add r10, r10, #1 ++ b .L2372 ++.L2379: ++ mul r3, fp, r8 ++ ldr r2, [r6, #-3608] ++ add r1, r2, r3 ++ ldr r3, [r2, r3] ++ cmp r3, #0 ++ beq .L2378 ++ ldr r0, [r1, #4] ++ add r4, r4, #1 ++ uxth r4, r4 ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++.L2378: ++ add r8, r8, #1 ++ b .L2377 ++.L2383: ++ cmp r3, #0 ++ beq .L2382 ++ mul r3, r9, r8 ++ ldr r2, [r6, #-3608] ++ add r1, r2, r3 ++ ldr r3, [r2, r3] ++ cmp r3, #0 ++ bne .L2382 ++ ldr r0, [r1, #4] ++ mov r1, #1 ++ ubfx r0, r0, #10, #16 ++ bl FtlFreeSysBlkQueueIn ++.L2382: ++ add r8, r8, #1 ++ b .L2381 ++.L2405: ++ .align 2 ++.L2404: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR0+2324 ++ .word .LANCHOR0+2402 ++ .fnend ++ .size FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock ++ .align 2 ++ .global FtlBbmTblFlush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbmTblFlush, %function ++FtlBbmTblFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L2421 ++ ldr r5, [r4, #-3612] ++ cmp r5, #0 ++ bne .L2408 ++ ldr r7, .L2421+4 ++ sub r10, r4, #436 ++ ldr r8, .L2421+8 ++ mov r1, r5 ++ ldr r0, [r4, #-524] ++ ldr r3, [r4, #-500] ++ mov r6, r7 ++ sub r7, r7, #2400 ++ ldrh r2, [r6], #80 ++ mov r9, r7 ++ str r0, [r4, #1768] ++ str r3, [r4, #1772] ++ bl ftl_memset ++.L2409: ++ ldrh r3, [r8] ++ cmp r5, r3 ++ blt .L2410 ++ ldr r6, [r4, #1772] ++ mov r2, #16 ++ mov r1, #255 ++ ldr r5, .L2421+12 ++ ldr fp, .L2421+16 ++ mov r0, r6 ++ bl ftl_memset ++ ldr r3, .L2421+20 ++ strh r3, [r6] @ movhi ++ ldr r3, [r7, #2464] ++ str r3, [r6, #4] ++ movw r3, #2456 ++ ldrh r3, [r7, r3] ++ strh r3, [r6, #2] @ movhi ++ ldrh r3, [r5, #4] ++ strh r3, [r6, #8] @ movhi ++ ldrh r3, [r5, #6] ++ strh r3, [r6, #10] @ movhi ++ ldr r3, [r7, #2320] ++ mov r7, #0 ++ mov r8, r7 ++ strh r3, [r6, #12] @ movhi ++.L2411: ++ ldr r3, [r4, #-524] ++ mov r10, #0 ++ ldrh r2, [r5, #2] ++ ldrh r1, [r5] ++ str r3, [r4, #1768] ++ ldr r3, [r4, #-500] ++ str r10, [r4, #1760] ++ str r3, [r4, #1772] ++ orr r3, r2, r1, lsl #10 ++ ldrh r0, [r6, #10] ++ str r3, [r4, #1764] ++ ldrh r3, [r5, #4] ++ str r0, [sp] ++ mov r0, fp ++ bl printk ++ ldr r3, .L2421+24 ++ ldrh r2, [r5, #2] ++ ldrh r3, [r3] ++ sub r3, r3, #1 ++ cmp r2, r3 ++ blt .L2412 ++ ldr r3, [r9, #2464] ++ ldrh r2, [r5] ++ ldr r0, [r4, #-3608] ++ add r3, r3, #1 ++ strh r10, [r5, #2] @ movhi ++ str r3, [r9, #2464] ++ str r3, [r6, #4] ++ ldrh r3, [r5, #4] ++ strh r2, [r6, #8] @ movhi ++ strh r2, [r5, #4] @ movhi ++ mov r2, #1 ++ strh r3, [r5] @ movhi ++ mov r1, r2 ++ lsl r3, r3, #10 ++ str r3, [r4, #1764] ++ str r3, [r0, #4] ++ bl FlashEraseBlocks ++.L2412: ++ mov r3, #1 ++ ldr r0, .L2421+28 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldrh r3, [r5, #2] ++ add r3, r3, #1 ++ strh r3, [r5, #2] @ movhi ++ ldr r3, [r4, #1760] ++ cmn r3, #1 ++ bne .L2413 ++ add r7, r7, #1 ++ ldr r1, [r4, #1764] ++ uxth r7, r7 ++ ldr r0, .L2421+32 ++ bl printk ++ cmp r7, #3 ++ bls .L2411 ++ mov r2, r7 ++ ldr r1, [r4, #1764] ++ ldr r0, .L2421+36 ++ bl printk ++ mov r3, #1 ++ str r3, [r4, #-3612] ++.L2408: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2410: ++ ldrh r2, [r10] ++ ldr r3, [r4, #1768] ++ ldr r1, [r6, #4]! ++ mul r0, r5, r2 ++ lsl r2, r2, #2 ++ add r5, r5, #1 ++ add r0, r3, r0, lsl #2 ++ bl ftl_memcpy ++ b .L2409 ++.L2416: ++ mov r8, #1 ++ b .L2411 ++.L2413: ++ add r8, r8, #1 ++ cmp r8, #1 ++ ble .L2416 ++ cmp r3, #256 ++ bne .L2408 ++ b .L2411 ++.L2422: ++ .align 2 ++.L2421: ++ .word .LANCHOR2 ++ .word .LANCHOR0+2400 ++ .word .LANCHOR0+2346 ++ .word .LANCHOR0+2456 ++ .word .LC126 ++ .word -3887 ++ .word .LANCHOR0+2392 ++ .word .LANCHOR2+1760 ++ .word .LC127 ++ .word .LC128 ++ .fnend ++ .size FtlBbmTblFlush, .-FtlBbmTblFlush ++ .align 2 ++ .global allocate_data_superblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type allocate_data_superblock, %function ++allocate_data_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, .L2473 ++ ldr r3, [r4, #-3612] ++ cmp r3, #0 ++ bne .L2424 ++ sub r9, r4, #3520 ++ mov r7, r0 ++ sub r3, r9, #8 ++ str r3, [sp, #12] ++.L2425: ++ ldr r3, .L2473+4 ++ ldr r8, .L2473+8 ++ ldrb r2, [r7, #8] @ zero_extendqisi2 ++ cmp r7, r3 ++ bne .L2426 ++ ldrh r0, [r9, #-4] ++ ldr lr, [r4, #-2708] ++ lsr ip, r0, #1 ++ mul r5, lr, r0 ++ add r1, ip, #1 ++ add r1, r1, r5, lsr #2 ++ ldr r5, [r8, #2248] ++ uxth r1, r1 ++ cmp r5, #0 ++ beq .L2427 ++ ldr r5, [r4, #-3308] ++ cmp r5, #39 ++ bhi .L2427 ++ cmp r5, #2 ++ bls .L2453 ++ cmp lr, #0 ++ movne r0, #0 ++ andeq r0, r0, #1 ++ cmp r0, #0 ++ moveq r1, ip ++ beq .L2427 ++.L2453: ++ mov r1, #0 ++ b .L2428 ++.L2426: ++ cmp r2, #1 ++ bne .L2453 ++ ldr r1, .L2473+12 ++ ldrh r1, [r1] ++ cmp r1, #1 ++ beq .L2453 ++ ldrb r1, [r8, #152] @ zero_extendqisi2 ++ cmp r1, #0 ++ bne .L2453 ++ ldr ip, [r8, #2248] ++ ldrh r0, [r9, #-4] ++ cmp ip, #0 ++ lsr r1, r0, #3 ++ beq .L2427 ++ ldr ip, [r4, #-3308] ++ cmp ip, #1 ++ rsbls r0, r0, r0, lsl #3 ++ ubfxls r1, r0, #3, #16 ++.L2427: ++ cmp r1, #0 ++ subne r1, r1, #1 ++ uxthne r1, r1 ++.L2428: ++ ldr r0, [sp, #12] ++ bl List_pop_index_node ++ ldrh r2, [r9, #-4] ++ uxth r3, r0 ++ ldr r10, .L2473+16 ++ str r3, [sp, #4] ++ sub r2, r2, #1 ++ strh r2, [r9, #-4] @ movhi ++ ldrh r2, [r10] ++ cmp r2, r3 ++ bls .L2425 ++ ldr r2, [r4, #-3540] ++ lsl r5, r3, #1 ++ ldrh r6, [r2, r5] ++ cmp r6, #0 ++ bne .L2425 ++ ldrh r3, [sp, #4] ++ mov r0, r7 ++ strh r3, [r7] @ movhi ++ bl make_superblock ++ ldrb r2, [r7, #7] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L2470 ++ ldr r0, [r4, #-3608] ++ add r3, r7, #16 ++ ldrh ip, [r10, #-8] ++ mov r1, #36 ++ str r3, [sp, #8] ++ add fp, r7, #16 ++ mov r2, r0 ++ str r1, [sp, #16] ++ mla r3, r1, ip, r0 ++ mov ip, r6 ++.L2431: ++ cmp r3, r2 ++ bne .L2433 ++ ldr r2, [r8, #2248] ++ adds r2, r2, #0 ++ movne r2, #1 ++ cmp r7, r9 ++ movne r2, #0 ++ cmp r2, #0 ++ beq .L2434 ++ ldr r2, [r4, #-3604] ++ ldrh r2, [r2, r5] ++ cmp r2, #40 ++ movhi r2, #0 ++ strbhi r2, [r4, #-3512] ++.L2434: ++ ldrb r2, [r7, #8] @ zero_extendqisi2 ++ ldr r1, [r4, #-3604] ++ ldr fp, .L2473+20 ++ cmp r2, #0 ++ ldrh r2, [r1, r5] ++ bne .L2435 ++ cmp r2, #0 ++ ldrhne r0, [fp] ++ moveq r2, #2 ++ addne r2, r2, r0 ++ ldr r0, [sp, #4] ++ strh r2, [r1, r5] @ movhi ++ mov r1, #0 ++ ldr r2, [r4, #-3324] ++ add r2, r2, #1 ++ str r2, [r4, #-3324] ++ bl ftl_set_blk_mode ++.L2438: ++ ldr r2, [r4, #-3604] ++ ldr r1, [r4, #-3312] ++ ldr ip, [r4, #-3324] ++ ldrh r2, [r2, r5] ++ ldrh r0, [fp] ++ cmp r2, r1 ++ ldrh r1, [r10] ++ strhi r2, [r4, #-3312] ++ ldr r2, [r4, #-3320] ++ mla r0, ip, r0, r2 ++ bl __aeabi_uidiv ++ ldr r1, [r4, #-480] ++ str r0, [r4, #-3316] ++ ldr r0, [r4, #-3608] ++ ldr r2, [r1, #16] ++ ldr ip, .L2473+24 ++ add r2, r2, #1 ++ str r2, [r1, #16] ++ mov r1, #36 ++ mla r1, r1, r6, r0 ++ add r2, r0, #4 ++ add r1, r1, #40 ++.L2440: ++ add r2, r2, #36 ++ cmp r1, r2 ++ bne .L2441 ++ ldrb r2, [r8, #152] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L2442 ++ ldrb r2, [r7, #8] @ zero_extendqisi2 ++ ldr r0, [r4, #-3608] ++ cmp r2, #1 ++ mov r2, r6 ++ moveq r1, #0 ++ movne r1, #1 ++ bl FlashEraseBlocks ++.L2442: ++ ldrb r1, [r7, #8] @ zero_extendqisi2 ++ mov r2, r6 ++ ldr r0, [r4, #-3608] ++ mov r10, #0 ++ bl FlashEraseBlocks ++ mov fp, r10 ++ mov r1, #36 ++.L2444: ++ uxth r2, r10 ++ cmp r6, r2 ++ bhi .L2446 ++ cmp fp, #0 ++ ble .L2447 ++ ldr r0, [sp, #4] ++ bl update_multiplier_value ++ bl FtlBbmTblFlush ++.L2447: ++ ldrb r1, [r7, #7] @ zero_extendqisi2 ++ cmp r1, #0 ++ bne .L2448 ++.L2470: ++ ldr r2, [r4, #-3540] ++ mvn r1, #0 ++ strh r1, [r2, r5] @ movhi ++ b .L2425 ++.L2433: ++ str ip, [r2, #8] ++ movw lr, #65535 ++ str ip, [r2, #12] ++ add r2, r2, #36 ++ ldrh r1, [fp], #2 ++ cmp r1, lr ++ ldrne lr, [sp, #16] ++ lslne r1, r1, #10 ++ mlane lr, lr, r6, r0 ++ addne r6, r6, #1 ++ uxthne r6, r6 ++ strne r1, [lr, #4] ++ b .L2431 ++.L2435: ++ add r2, r2, #1 ++ ldr r0, [sp, #4] ++ strh r2, [r1, r5] @ movhi ++ ldr r2, [r4, #-3320] ++ add r2, r2, #1 ++ str r2, [r4, #-3320] ++ bl ftl_set_blk_mode.part.9 ++ b .L2438 ++.L2441: ++ ldr r0, [r2, #-36] ++ and r0, r0, ip ++ str r0, [r2, #-36] ++ b .L2440 ++.L2446: ++ mul r2, r1, r10 ++ ldr r0, [r4, #-3608] ++ add ip, r0, r2 ++ ldr r2, [r0, r2] ++ cmn r2, #1 ++ bne .L2445 ++ ldr r0, [ip, #4] ++ add fp, fp, #1 ++ str r1, [sp, #20] ++ str r2, [sp, #16] ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++ ldr r2, [sp, #16] ++ ldr r3, [sp, #8] ++ ldr r1, [sp, #20] ++ strh r2, [r3] @ movhi ++ ldrb r2, [r7, #7] @ zero_extendqisi2 ++ sub r2, r2, #1 ++ strb r2, [r7, #7] ++.L2445: ++ ldr r3, [sp, #8] ++ add r10, r10, #1 ++ add r3, r3, #2 ++ str r3, [sp, #8] ++ b .L2444 ++.L2448: ++ movw r2, #2390 ++ ldrh r3, [sp, #4] ++ ldrh r2, [r8, r2] ++ strh r3, [r7] @ movhi ++ smulbb r2, r2, r1 ++ mov r1, #0 ++ strh r1, [r7, #2] @ movhi ++ strb r1, [r7, #6] ++ ldr r1, [r4, #-3332] ++ uxth r2, r2 ++ strh r2, [r7, #4] @ movhi ++ str r1, [r7, #12] ++ add r1, r1, #1 ++ str r1, [r4, #-3332] ++ ldrh r3, [r7] ++ ldr r1, [r4, #-3540] ++ lsl r3, r3, #1 ++ strh r2, [r1, r3] @ movhi ++.L2424: ++ mov r0, #0 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2474: ++ .align 2 ++.L2473: ++ .word .LANCHOR2 ++ .word .LANCHOR2-3424 ++ .word .LANCHOR0 ++ .word .LANCHOR0+2344 ++ .word .LANCHOR0+2332 ++ .word .LANCHOR0+2382 ++ .word -1024 ++ .fnend ++ .size allocate_data_superblock, .-allocate_data_superblock ++ .align 2 ++ .global FtlGcFreeBadSuperBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcFreeBadSuperBlk, %function ++FtlGcFreeBadSuperBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L2488 ++ ldrh r3, [r4, #-2] ++ cmp r3, #0 ++ beq .L2476 ++ ldr r9, .L2488+4 ++ mov r6, #0 ++ ldr r8, .L2488+8 ++ ldr r10, .L2488+12 ++ str r0, [sp] ++.L2477: ++ ldrh r2, [r8] ++ uxth r3, r6 ++ cmp r2, r3 ++ bhi .L2483 ++ bl FtlGcReFreshBadBlk ++.L2476: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2483: ++ uxtah r3, r9, r6 ++ ldr r1, [sp] ++ mov fp, #0 ++ ldrb r0, [r3, #2350] @ zero_extendqisi2 ++ bl V2P_block ++ mov r7, r0 ++.L2478: ++ ldrh r3, [r4, #-2] ++ uxth r5, fp ++ cmp r3, r5 ++ addls r6, r6, #1 ++ bls .L2477 ++.L2482: ++ uxth r3, fp ++ lsl r1, r3, #1 ++ ldrh r1, [r4, r1] ++ cmp r1, r7 ++ bne .L2479 ++ mov r1, r7 ++ mov r0, r10 ++ str r3, [sp, #4] ++ bl printk ++ mov r0, r7 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ ldr r3, [sp, #4] ++ ldrh r1, [r4, #-2] ++ add r3, r4, r3, lsl #1 ++.L2480: ++ cmp r5, r1 ++ bcc .L2481 ++ sub r1, r1, #1 ++ strh r1, [r4, #-2] @ movhi ++.L2479: ++ add fp, fp, #1 ++ b .L2478 ++.L2481: ++ ldrh r0, [r3, #2]! ++ add r5, r5, #1 ++ uxth r5, r5 ++ strh r0, [r3, #-2] @ movhi ++ b .L2480 ++.L2489: ++ .align 2 ++.L2488: ++ .word .LANCHOR2-2656 ++ .word .LANCHOR0 ++ .word .LANCHOR0+2324 ++ .word .LC129 ++ .fnend ++ .size FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk ++ .align 2 ++ .global update_vpc_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type update_vpc_list, %function ++update_vpc_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L2499 ++ lsl r3, r0, #1 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r1, [r2, #-3540] ++ ldrh r3, [r1, r3] ++ cmp r3, #0 ++ bne .L2491 ++ sub r1, r2, #3280 ++ mov r4, r0 ++ ldrh r0, [r1, #-4] ++ sub r5, r2, #3520 ++ cmp r0, r4 ++ mvneq r3, #0 ++ strheq r3, [r1, #-4] @ movhi ++ beq .L2493 ++ ldrh r1, [r5] ++ cmp r1, r4 ++ beq .L2490 ++ sub r1, r2, #3472 ++ ldrh r1, [r1] ++ cmp r1, r4 ++ beq .L2490 ++ sub r2, r2, #3424 ++ ldrh r2, [r2] ++ cmp r2, r4 ++ beq .L2490 ++.L2493: ++ mov r1, r4 ++ ldr r0, .L2499+4 ++ bl List_remove_node ++ ldrh r3, [r5, #-12] ++ mov r0, r4 ++ sub r3, r3, #1 ++ strh r3, [r5, #-12] @ movhi ++ bl free_data_superblock ++ mov r0, r4 ++ bl FtlGcFreeBadSuperBlk ++ mov r3, #1 ++.L2490: ++ mov r0, r3 ++ pop {r4, r5, r6, pc} ++.L2491: ++ bl List_update_data_list ++ mov r3, #0 ++ b .L2490 ++.L2500: ++ .align 2 ++.L2499: ++ .word .LANCHOR2 ++ .word .LANCHOR2-3544 ++ .fnend ++ .size update_vpc_list, .-update_vpc_list ++ .align 2 ++ .global decrement_vpc_count ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type decrement_vpc_count, %function ++decrement_vpc_count: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movw r3, #65535 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ cmp r0, r3 ++ mov r4, r0 ++ beq .L2502 ++ ldr r6, .L2512 ++ lsl r5, r0, #1 ++ ldr r3, [r6, #-3540] ++ ldrh r2, [r3, r5] ++ cmp r2, #0 ++ subne r2, r2, #1 ++ strhne r2, [r3, r5] @ movhi ++ bne .L2502 ++ mov r1, r0 ++ ldr r0, .L2512+4 ++ bl printk ++ ldr r3, [r6, #-3540] ++ sub r7, r6, #3520 ++ mov r2, #32 ++ sub r8, r7, #8 ++ mov r1, r4 ++ mov r0, r8 ++ strh r2, [r3, r5] @ movhi ++ bl test_node_in_list ++ cmp r0, #0 ++ beq .L2504 ++ mov r1, r4 ++ mov r0, r8 ++ bl List_remove_node ++ ldrh r3, [r7, #-4] ++ mov r0, r4 ++ sub r3, r3, #1 ++ strh r3, [r7, #-4] @ movhi ++ bl INSERT_DATA_LIST ++ ldr r3, [r6, #-3540] ++ mov r1, r4 ++ ldr r0, .L2512+8 ++ ldrh r2, [r3, r5] ++ bl printk ++.L2504: ++ mov r0, r4 ++ bl FtlGcRefreshBlock ++.L2507: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L2502: ++ ldr r5, .L2512+12 ++ movw r3, #65535 ++ ldrh r0, [r5] ++ cmp r0, r3 ++ strheq r4, [r5] @ movhi ++ beq .L2507 ++ cmp r4, r0 ++ beq .L2507 ++ bl update_vpc_list ++ adds r0, r0, #0 ++ strh r4, [r5] @ movhi ++ movne r0, #1 ++ pop {r4, r5, r6, r7, r8, pc} ++.L2513: ++ .align 2 ++.L2512: ++ .word .LANCHOR2 ++ .word .LC130 ++ .word .LC131 ++ .word .LANCHOR2-380 ++ .fnend ++ .size decrement_vpc_count, .-decrement_vpc_count ++ .align 2 ++ .global FtlSlcSuperblockCheck ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSlcSuperblockCheck, %function ++FtlSlcSuperblockCheck: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldrh r3, [r0, #4] ++ cmp r3, #0 ++ bxeq lr ++ ldrh r2, [r0] ++ movw r3, #65535 ++ cmp r2, r3 ++ bxeq lr ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ ldrb r3, [r0, #6] @ zero_extendqisi2 ++ ldr r5, .L2529 ++ ldr r6, .L2529+4 ++ add r3, r0, r3, lsl #1 ++ ldrh r3, [r3, #16] ++.L2518: ++ movw r1, #65535 ++ cmp r3, r1 ++ beq .L2520 ++ ldrb r2, [r4, #8] @ zero_extendqisi2 ++ cmp r2, #1 ++ bne .L2521 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2521 ++ ldrh r3, [r4, #2] ++ lsl r3, r3, #1 ++ ldrh r3, [r6, r3] ++ cmp r3, r1 ++ bne .L2521 ++ ldrh r3, [r4, #4] ++ ldrh r0, [r4] ++ sub r3, r3, #1 ++ strh r3, [r4, #4] @ movhi ++ bl decrement_vpc_count ++ ldrh r2, [r4, #4] ++ cmp r2, #0 ++ bne .L2520 ++ ldrh r3, [r4, #2] ++ strb r2, [r4, #6] ++ add r3, r3, #1 ++ strh r3, [r4, #2] @ movhi ++ pop {r4, r5, r6, pc} ++.L2520: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ ldr r2, .L2529+8 ++ add r3, r3, #1 ++ ldrh r2, [r2] ++ uxtb r3, r3 ++ strb r3, [r4, #6] ++ cmp r2, r3 ++ ldrheq r3, [r4, #2] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #2] @ movhi ++ moveq r3, #0 ++ strbeq r3, [r4, #6] ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ add r3, r4, r3, lsl #1 ++ ldrh r3, [r3, #16] ++ b .L2518 ++.L2521: ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ adds r3, r3, #0 ++ movne r3, #1 ++ cmp r2, #1 ++ movne r3, #0 ++ cmp r3, #0 ++ popeq {r4, r5, r6, pc} ++ movw r3, #2392 ++ ldrh r2, [r4, #2] ++ ldrh r3, [r5, r3] ++ cmp r2, r3 ++ popcc {r4, r5, r6, pc} ++ ldrh r3, [r4] ++ ldr r2, .L2529+12 ++ ldrh r0, [r4, #4] ++ ldr r1, [r2, #-3540] ++ lsl r3, r3, #1 ++ ldrh r2, [r1, r3] ++ sub r2, r2, r0 ++ strh r2, [r1, r3] @ movhi ++ movw r2, #2390 ++ ldrh r2, [r5, r2] ++ mov r3, #0 ++ strh r3, [r4, #4] @ movhi ++ strb r3, [r4, #6] ++ strh r2, [r4, #2] @ movhi ++ pop {r4, r5, r6, pc} ++.L2530: ++ .align 2 ++.L2529: ++ .word .LANCHOR0 ++ .word .LANCHOR2-2620 ++ .word .LANCHOR0+2324 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlSlcSuperblockCheck, .-FtlSlcSuperblockCheck ++ .align 2 ++ .global get_new_active_ppa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type get_new_active_ppa, %function ++get_new_active_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov r3, #0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ strb r3, [r0, #10] ++ mov r4, r0 ++ ldrb r3, [r0, #6] @ zero_extendqisi2 ++ ldr r5, .L2547 ++ ldr r7, .L2547+4 ++ add r3, r0, r3, lsl #1 ++ ldrh r2, [r3, #16] ++.L2532: ++ movw r1, #65535 ++ cmp r2, r1 ++ beq .L2533 ++ ldrb r3, [r4, #8] @ zero_extendqisi2 ++ ldrh r6, [r4, #2] ++ cmp r3, #1 ++ ldrh r3, [r4, #4] ++ bne .L2535 ++ ldr r0, .L2547+8 ++ ldrb r0, [r0, #152] @ zero_extendqisi2 ++ cmp r0, #0 ++ bne .L2535 ++ lsl r0, r6, #1 ++ ldrh r0, [r7, r0] ++ cmp r0, r1 ++ bne .L2535 ++ sub r3, r3, #1 ++ ldrh r0, [r4] ++ strh r3, [r4, #4] @ movhi ++ bl decrement_vpc_count ++.L2533: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ ldrh r2, [r5] ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r2, r3 ++ strb r3, [r4, #6] ++ ldrheq r3, [r4, #2] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #2] @ movhi ++ moveq r3, #0 ++ strbeq r3, [r4, #6] ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ add r3, r4, r3, lsl #1 ++ ldrh r2, [r3, #16] ++ b .L2532 ++.L2535: ++ ldr r7, .L2547+4 ++ orr r6, r6, r2, lsl #10 ++ sub r3, r3, #1 ++ strh r3, [r4, #4] @ movhi ++.L2536: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ movw r1, #65535 ++ ldrh r0, [r5] ++.L2538: ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, r0 ++ ldrheq r3, [r4, #2] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #2] @ movhi ++ moveq r3, #0 ++ add r2, r4, r3, lsl #1 ++ ldrh r2, [r2, #16] ++ cmp r2, r1 ++ beq .L2538 ++ strb r3, [r4, #6] ++ ldrb r3, [r4, #8] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L2531 ++ ldr r2, .L2547+8 ++ ldrb r3, [r2, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrh r3, [r4, #2] ++ bne .L2540 ++ lsl r3, r3, #1 ++ ldrh r3, [r7, r3] ++ cmp r3, r1 ++ bne .L2531 ++ ldrh r3, [r4, #4] ++ cmp r3, #0 ++ beq .L2531 ++ sub r3, r3, #1 ++ ldrh r0, [r4] ++ strh r3, [r4, #4] @ movhi ++ bl decrement_vpc_count ++ b .L2536 ++.L2540: ++ movw r1, #2392 ++ ldrh r1, [r2, r1] ++ cmp r3, r1 ++ bcc .L2531 ++ ldrh r3, [r4] ++ ldr r1, .L2547+12 ++ ldrh ip, [r4, #4] ++ ldr r0, [r1, #-3540] ++ lsl r3, r3, #1 ++ ldrh r1, [r0, r3] ++ sub r1, r1, ip ++ strh r1, [r0, r3] @ movhi ++ movw r1, #2390 ++ ldrh r2, [r2, r1] ++ mov r3, #0 ++ strh r3, [r4, #4] @ movhi ++ strb r3, [r4, #6] ++ strh r2, [r4, #2] @ movhi ++.L2531: ++ mov r0, r6 ++ pop {r4, r5, r6, r7, r8, pc} ++.L2548: ++ .align 2 ++.L2547: ++ .word .LANCHOR0+2324 ++ .word .LANCHOR2-2620 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size get_new_active_ppa, .-get_new_active_ppa ++ .align 2 ++ .global FtlVpcTblFlush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVpcTblFlush, %function ++FtlVpcTblFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L2567 ++ ldr r3, [r4, #-3612] ++ cmp r3, #0 ++ bne .L2551 ++ ldr r2, [r4, #-524] ++ sub r5, r4, #3296 ++ ldr r7, [r4, #-500] ++ sub r8, r5, #300 ++ ldr r6, .L2567+4 ++ mov r1, #255 ++ str r2, [r4, #1768] ++ ldrh r2, [r5, #-4] ++ str r7, [r4, #1772] ++ add r9, r6, #2400 ++ str r3, [r7, #12] ++ strh r2, [r7, #2] @ movhi ++ ldr r2, .L2567+8 ++ strh r2, [r7] @ movhi ++ ldr r2, [r4, #-3292] ++ stmib r7, {r2, r3} ++ ldr r3, .L2567+12 ++ str r3, [r4, #-3596] ++ ldr r3, .L2567+16 ++ str r3, [r4, #-3592] ++ ldrh r3, [r5, #2] ++ strh r3, [r8, #8] @ movhi ++ movw r3, #2346 ++ ldrh r3, [r6, r3] ++ strb r3, [r4, #-3586] ++ sub r3, r4, #3520 ++ ldrh r2, [r3] ++ strh r2, [r8, #14] @ movhi ++ ldrh r2, [r3, #2] ++ ldrb r3, [r4, #-3514] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #6 ++ strh r3, [r8, #16] @ movhi ++ ldrb r3, [r4, #-3512] @ zero_extendqisi2 ++ strb r3, [r4, #-3585] ++ sub r3, r4, #3472 ++ ldrh r2, [r3] ++ strh r2, [r8, #18] @ movhi ++ ldrh r2, [r3, #2] ++ ldrb r3, [r4, #-3466] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #6 ++ strh r3, [r8, #20] @ movhi ++ ldrb r3, [r4, #-3464] @ zero_extendqisi2 ++ strb r3, [r4, #-3584] ++ sub r3, r4, #3424 ++ ldrh r2, [r3] ++ strh r2, [r8, #22] @ movhi ++ ldrh r2, [r3, #2] ++ ldrb r3, [r4, #-3418] @ zero_extendqisi2 ++ ldr r0, [r4, #1768] ++ orr r3, r3, r2, lsl #6 ++ strh r3, [r8, #24] @ movhi ++ ldrb r3, [r4, #-3416] @ zero_extendqisi2 ++ strb r3, [r4, #-3583] ++ ldr r3, [r4, #-3324] ++ str r3, [r4, #-3564] ++ ldr r3, [r4, #-3332] ++ str r3, [r4, #-3556] ++ ldr r3, [r4, #-3328] ++ str r3, [r4, #-3560] ++ sub r3, r4, #2656 ++ ldrh r2, [r3, #-10] ++ ldrh r3, [r3, #-8] ++ strh r2, [r8, #44] @ movhi ++ ldrh r2, [r9] ++ strh r3, [r5, #-254] @ movhi ++ bl ftl_memset ++ mov r1, r8 ++ mov r2, #48 ++ movw r8, #2332 ++ ldr r0, [r4, #1768] ++ bl ftl_memcpy ++ ldrh r2, [r6, r8] ++ ldr r0, [r4, #1768] ++ ldr r1, [r4, #-3540] ++ lsl r2, r2, #1 ++ add r0, r0, #48 ++ bl ftl_memcpy ++ ldrh r0, [r6, r8] ++ ldr r3, [r4, #1768] ++ ldr r1, [r6, #32] ++ lsr r2, r0, #3 ++ lsl r0, r0, #1 ++ add r0, r0, #51 ++ add r2, r2, #4 ++ bic r0, r0, #3 ++ add r0, r3, r0 ++ bl ftl_memcpy ++ movw r3, #2436 ++ str r9, [sp, #4] ++ ldrh r3, [r6, r3] ++ cmp r3, #0 ++ beq .L2552 ++ ldrh r0, [r6, r8] ++ movw r3, #2428 ++ ldrh r2, [r6, r3] ++ ldr r1, [r4, #-452] ++ lsr r3, r0, #3 ++ lsl r2, r2, #2 ++ add r3, r3, r0, lsl #1 ++ ldr r0, [r4, #1768] ++ add r3, r3, #52 ++ ubfx r3, r3, #2, #14 ++ add r0, r0, r3, lsl #2 ++ bl ftl_memcpy ++.L2552: ++ ldr r10, .L2567+20 ++ mov r8, #0 ++ movw r9, #65535 ++ sub r5, r5, #4 ++ mov r0, #0 ++ mov fp, r10 ++ bl FtlUpdateVaildLpn ++.L2553: ++ ldr r3, [r4, #-524] ++ ldrh r1, [r5, #2] ++ ldrh r2, [r5] ++ str r3, [r4, #1768] ++ ldr r3, [r4, #-500] ++ str r3, [r4, #1772] ++ orr r3, r1, r2, lsl #10 ++ str r3, [r4, #1764] ++ ldrh r3, [r10] ++ sub r3, r3, #1 ++ cmp r1, r3 ++ blt .L2554 ++ mov r3, #0 ++ ldrh r9, [r5, #4] ++ strh r3, [r5, #2] @ movhi ++ strh r2, [r5, #4] @ movhi ++ bl FtlFreeSysBlkQueueOut ++ ldr r3, [r4, #-3332] ++ strh r0, [r5] @ movhi ++ add r2, r3, #1 ++ str r3, [r4, #-3292] ++ str r2, [r4, #-3332] ++ lsl r2, r0, #10 ++ str r2, [r4, #1764] ++ str r3, [r7, #4] ++ strh r0, [r7, #2] @ movhi ++.L2554: ++ ldrb r3, [r6, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2555 ++ ldr r3, [sp, #4] ++ ldr r0, [r4, #-524] ++ ldrh r1, [r3] ++ bl js_hash ++ str r0, [r7, #12] ++.L2555: ++ mov r3, #1 ++ ldr r0, .L2567+24 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldrh r3, [r5, #2] ++ ldr r2, [r4, #1760] ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmn r2, #1 ++ strh r3, [r5, #2] @ movhi ++ bne .L2556 ++ cmp r3, #1 ++ add r8, r8, #1 ++ ldrheq r3, [fp] ++ uxth r8, r8 ++ subeq r3, r3, #1 ++ strheq r3, [r5, #2] @ movhi ++ cmp r8, #3 ++ bls .L2553 ++ mov r2, r8 ++ ldr r1, [r4, #1764] ++ ldr r0, .L2567+28 ++ bl printk ++ mov r3, #1 ++ str r3, [r4, #-3612] ++.L2551: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2556: ++ cmp r3, #1 ++ cmpne r2, #256 ++ beq .L2553 ++ movw r3, #65535 ++ cmp r9, r3 ++ beq .L2551 ++ mov r1, #1 ++ mov r0, r9 ++ bl FtlFreeSysBlkQueueIn ++ b .L2551 ++.L2568: ++ .align 2 ++.L2567: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word -3932 ++ .word 1179929683 ++ .word 1342177379 ++ .word .LANCHOR0+2392 ++ .word .LANCHOR2+1760 ++ .word .LC132 ++ .fnend ++ .size FtlVpcTblFlush, .-FtlVpcTblFlush ++ .align 2 ++ .global FtlSuperblockPowerLostFix ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSuperblockPowerLostFix, %function ++FtlSuperblockPowerLostFix: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #40 ++ sub sp, sp, #40 ++ ldr r5, .L2585 ++ ldr r10, [r5, #-3612] ++ cmp r10, #0 ++ bne .L2569 ++ ldr r8, .L2585+4 ++ ldrb r3, [r8, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2580 ++ ldrb r3, [r0, #8] @ zero_extendqisi2 ++ cmp r3, #1 ++ ldrheq r7, [r0, #4] ++ moveq r10, r3 ++ beq .L2571 ++.L2580: ++ mov r7, #12 ++.L2571: ++ mvn r3, #0 ++ ldr r6, [r5, #-500] ++ str r3, [sp, #20] ++ mov r9, #0 ++ ldr r3, [r5, #-524] ++ movw r2, #61589 ++ str r6, [sp, #16] ++ mov r4, r0 ++ str r3, [sp, #12] ++ mvn r3, #2 ++ str r3, [r6, #8] ++ mvn r3, #1 ++ str r3, [r6, #12] ++ ldrh r3, [r0] ++ strh r9, [r6] @ movhi ++ strh r3, [r6, #2] @ movhi ++ ldr r3, [r5, #-524] ++ str r2, [r3] ++ ldr r2, .L2585+8 ++ ldr r3, [r5, #-524] ++ str r2, [r3, #4] ++.L2572: ++ subs r7, r7, #1 ++ bcc .L2575 ++ ldrh r3, [r4, #4] ++ cmp r3, #0 ++ bne .L2573 ++.L2575: ++ ldrh r3, [r4] ++ ldr r1, [r5, #-3540] ++ ldrh r0, [r4, #4] ++ lsl r3, r3, #1 ++ ldrh r2, [r1, r3] ++ sub r2, r2, r0 ++ strh r2, [r1, r3] @ movhi ++ movw r3, #2390 ++ ldrh r3, [r8, r3] ++ strh r3, [r4, #2] @ movhi ++ mov r3, #0 ++ strb r3, [r4, #6] ++ strh r3, [r4, #4] @ movhi ++.L2569: ++ add sp, sp, #40 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2573: ++ mov r0, r4 ++ bl get_new_active_ppa ++ cmn r0, #1 ++ str r0, [sp, #8] ++ beq .L2575 ++ ldr r3, [r5, #-3328] ++ mov r2, r10 ++ mov r1, #1 ++ add r0, sp, #4 ++ str r3, [r6, #4] ++ add r3, r3, #1 ++ cmn r3, #1 ++ moveq r3, r9 ++ str r3, [r5, #-3328] ++ mov r3, #0 ++ bl FlashProgPages ++ ldrh r0, [r4] ++ bl decrement_vpc_count ++ b .L2572 ++.L2586: ++ .align 2 ++.L2585: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word 305419896 ++ .fnend ++ .size FtlSuperblockPowerLostFix, .-FtlSuperblockPowerLostFix ++ .align 2 ++ .global ftl_map_blk_gc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_map_blk_gc, %function ++ftl_map_blk_gc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, r0 ++ ldr r5, [r0, #12] ++ ldr r10, [r0, #24] ++ bl ftl_free_no_use_map_blk ++ ldrh r3, [r4, #10] ++ ldrh r2, [r4, #8] ++ ldr fp, .L2600 ++ sub r3, r3, #4 ++ cmp r2, r3 ++ blt .L2588 ++ uxth r0, r0 ++ lsl r0, r0, #1 ++ ldrh r9, [r5, r0] ++ cmp r9, #0 ++ beq .L2588 ++ ldr r3, [r4, #32] ++ cmp r3, #0 ++ bne .L2588 ++ mov r2, #1 ++ str r2, [r4, #32] ++ strh r3, [r5, r0] @ movhi ++ ldrh r3, [r4, #8] ++ ldrh r2, [r4, #2] ++ sub r3, r3, #1 ++ strh r3, [r4, #8] @ movhi ++ movw r3, #2392 ++ ldrh r3, [fp, r3] ++ cmp r2, r3 ++ bcc .L2589 ++ mov r0, r4 ++ bl ftl_map_blk_alloc_new_blk ++.L2589: ++ ldr r5, .L2600+4 ++ mov r6, #0 ++.L2590: ++ ldrh r2, [r4, #6] ++ uxth r3, r6 ++ cmp r2, r3 ++ bhi .L2595 ++ mov r1, #1 ++ mov r0, r9 ++ bl FtlFreeSysBlkQueueIn ++ mov r3, #0 ++ str r3, [r4, #32] ++.L2588: ++ movw r3, #2392 ++ ldrh r2, [r4, #2] ++ ldrh r3, [fp, r3] ++ cmp r2, r3 ++ bcc .L2593 ++ mov r0, r4 ++ bl ftl_map_blk_alloc_new_blk ++ b .L2593 ++.L2595: ++ uxth r7, r6 ++ add r2, r10, r7, lsl #2 ++ str r2, [sp] ++ ldr r2, [r10, r7, lsl #2] ++ cmp r9, r2, lsr #10 ++ bne .L2591 ++ ldr r2, [r5, #-520] ++ ldr r8, [r5, #-500] ++ ldr r0, .L2600+8 ++ str r2, [r5, #1768] ++ str r8, [r5, #1772] ++ ldr r2, [r10, r7, lsl #2] ++ str r3, [sp, #4] ++ str r2, [r5, #1764] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [r5, #1760] ++ ldr r3, [sp, #4] ++ cmn r2, #1 ++ bne .L2592 ++.L2594: ++ ldr r2, [sp] ++ mov r3, #0 ++ ldr r0, .L2600+12 ++ str r3, [r2] ++ ldrh r2, [r8, #8] ++ ldr r1, [r5, #1764] ++ bl printk ++ mov r3, #1 ++ str r3, [r5, #-3612] ++.L2593: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2592: ++ ldrh r2, [r8, #8] ++ cmp r2, r3 ++ bne .L2594 ++ ldrh r2, [r8] ++ ldrh r3, [r4, #4] ++ cmp r2, r3 ++ bne .L2594 ++ ldr r2, [r5, #1768] ++ mov r1, r7 ++ mov r0, r4 ++ bl FtlMapWritePage ++.L2591: ++ add r6, r6, #1 ++ b .L2590 ++.L2601: ++ .align 2 ++.L2600: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR2+1760 ++ .word .LC133 ++ .fnend ++ .size ftl_map_blk_gc, .-ftl_map_blk_gc ++ .align 2 ++ .global Ftl_write_map_blk_to_last_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_write_map_blk_to_last_page, %function ++Ftl_write_map_blk_to_last_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r5, .L2613 ++ ldr r6, [r5, #-3612] ++ cmp r6, #0 ++ bne .L2603 ++ ldrh r3, [r0] ++ movw r2, #65535 ++ mov r4, r0 ++ ldr r7, [r0, #12] ++ cmp r3, r2 ++ bne .L2604 ++ ldrh r3, [r0, #8] ++ add r3, r3, #1 ++ strh r3, [r0, #8] @ movhi ++ bl FtlFreeSysBlkQueueOut ++ strh r0, [r7] @ movhi ++ ldr r3, [r4, #28] ++ strh r6, [r4, #2] @ movhi ++ strh r6, [r4] @ movhi ++ add r3, r3, #1 ++ str r3, [r4, #28] ++.L2603: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2604: ++ lsl r3, r3, #1 ++ ldr r8, [r0, #24] ++ ldr r10, .L2613+4 ++ mov r1, #255 ++ ldrh r9, [r7, r3] ++ ldrh r3, [r0, #2] ++ ldr r7, [r5, #-500] ++ orr r3, r3, r9, lsl #10 ++ str r7, [r5, #1772] ++ str r3, [r5, #1764] ++ ldr r3, [r5, #-524] ++ str r3, [r5, #1768] ++ ldr r3, [r0, #28] ++ str r3, [r7, #4] ++ ldr r3, .L2613+8 ++ strh r3, [r7, #8] @ movhi ++ ldrh r3, [r0, #4] ++ strh r9, [r7, #2] @ movhi ++ strh r3, [r7] @ movhi ++ movw r3, #2392 ++ ldrh r2, [r10, r3] ++ ldr r0, [r5, #-524] ++ lsl r2, r2, #3 ++ bl ftl_memset ++ mov r2, r6 ++ mov r3, r6 ++.L2605: ++ ldrh r0, [r4, #6] ++ uxth r1, r2 ++ cmp r0, r1 ++ bhi .L2607 ++ ldrb r3, [r10, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2608 ++ ldr r3, .L2613+12 ++ ldr r0, [r5, #1768] ++ ldrh r1, [r3] ++ bl js_hash ++ str r0, [r7, #12] ++.L2608: ++ mov r2, #1 ++ mov r3, #0 ++ mov r1, r2 ++ ldr r0, .L2613+16 ++ bl FlashProgPages ++ ldrh r3, [r4, #2] ++ mov r0, r4 ++ add r3, r3, #1 ++ strh r3, [r4, #2] @ movhi ++ bl ftl_map_blk_gc ++ b .L2603 ++.L2607: ++ uxth r1, r2 ++ ldr r0, [r8, r1, lsl #2] ++ cmp r9, r0, lsr #10 ++ bne .L2606 ++ ldr r0, [r5, #-524] ++ add r3, r3, #1 ++ uxth r3, r3 ++ str r1, [r0, r3, lsl #3] ++ ldr r0, [r8, r1, lsl #2] ++ ldr r1, [r5, #-524] ++ add r1, r1, r3, lsl #3 ++ str r0, [r1, #4] ++.L2606: ++ add r2, r2, #1 ++ b .L2605 ++.L2614: ++ .align 2 ++.L2613: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word -1291 ++ .word .LANCHOR0+2400 ++ .word .LANCHOR2+1760 ++ .fnend ++ .size Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page ++ .align 2 ++ .global FtlMapWritePage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMapWritePage, %function ++FtlMapWritePage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, r0 ++ ldr r7, .L2634 ++ mov r9, r1 ++ mov fp, r2 ++ mov r6, #0 ++ ldr r10, .L2634+4 ++ mov r5, r7 ++.L2616: ++ ldr r3, [r7, #-3348] ++ add r3, r3, #1 ++ str r3, [r7, #-3348] ++ ldrh r3, [r10] ++ ldrh r2, [r4, #2] ++ sub r3, r3, #1 ++ cmp r2, r3 ++ bge .L2617 ++ ldrh r2, [r4] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L2618 ++.L2617: ++ mov r0, r4 ++ bl Ftl_write_map_blk_to_last_page ++.L2618: ++ ldr r1, [r5, #-3612] ++ cmp r1, #0 ++ bne .L2619 ++ ldrh r3, [r4] ++ ldr r2, [r4, #12] ++ ldr r0, [r5, #-500] ++ lsl r3, r3, #1 ++ ldrh r8, [r2, r3] ++ mov r2, #16 ++ ldrh r3, [r4, #2] ++ str fp, [r5, #1768] ++ str r0, [r5, #1772] ++ orr r3, r3, r8, lsl #10 ++ str r3, [r5, #1764] ++ bl ftl_memset ++ ldr r3, [r5, #1772] ++ ldr r2, [r4, #28] ++ strh r9, [r3, #8] @ movhi ++ str r2, [r3, #4] ++ ldrh r2, [r4, #4] ++ str r3, [sp, #4] ++ strh r8, [r3, #2] @ movhi ++ strh r2, [r3] @ movhi ++ ldr r2, .L2634+8 ++ ldrb r1, [r2, #36] @ zero_extendqisi2 ++ cmp r1, #0 ++ beq .L2620 ++ add r2, r2, #2400 ++ ldr r0, [r5, #1768] ++ ldrh r1, [r2] ++ bl js_hash ++ ldr r3, [sp, #4] ++ str r0, [r3, #12] ++.L2620: ++ mov r3, #1 ++ ldr r0, .L2634+12 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldrh r3, [r4, #2] ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r3, [r4, #2] @ movhi ++ ldr r2, [r5, #1760] ++ cmn r2, #1 ++ bne .L2621 ++ ldr r1, [r5, #1764] ++ add r6, r6, #1 ++ ldr r0, .L2634+16 ++ uxth r6, r6 ++ bl printk ++ ldrh r3, [r4, #2] ++ cmp r3, #2 ++ ldrhls r3, [r10] ++ subls r3, r3, #1 ++ strhls r3, [r4, #2] @ movhi ++ cmp r6, #3 ++ bls .L2616 ++ mov r2, r6 ++ ldr r1, [r5, #1764] ++ ldr r0, .L2634+20 ++ bl printk ++ mov r3, #1 ++ str r3, [r5, #-3612] ++.L2619: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2621: ++ cmp r2, #0 ++ strhne r8, [r4, #40] @ movhi ++ cmp r3, #1 ++ cmpne r2, #256 ++ beq .L2625 ++ ldr r3, [r4, #36] ++ cmp r3, #0 ++ beq .L2626 ++.L2625: ++ mov r3, #0 ++ str r3, [r4, #36] ++ b .L2616 ++.L2626: ++ ldr r2, [r5, #1764] ++ ldr r3, [r4, #24] ++ str r2, [r3, r9, lsl #2] ++ b .L2619 ++.L2635: ++ .align 2 ++.L2634: ++ .word .LANCHOR2 ++ .word .LANCHOR0+2392 ++ .word .LANCHOR0 ++ .word .LANCHOR2+1760 ++ .word .LC134 ++ .word .LC135 ++ .fnend ++ .size FtlMapWritePage, .-FtlMapWritePage ++ .align 2 ++ .global flush_l2p_region ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flush_l2p_region, %function ++flush_l2p_region: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, #12 ++ ldr r5, .L2638 ++ mul r4, r4, r0 ++ ldr r3, [r5, #-3376] ++ sub r0, r5, #432 ++ add r2, r3, r4 ++ ldrh r1, [r3, r4] ++ ldr r2, [r2, #8] ++ bl FtlMapWritePage ++ ldr r3, [r5, #-3376] ++ mov r0, #0 ++ add r4, r3, r4 ++ ldr r3, [r4, #4] ++ bic r3, r3, #-2147483648 ++ str r3, [r4, #4] ++ pop {r4, r5, r6, pc} ++.L2639: ++ .align 2 ++.L2638: ++ .word .LANCHOR2 ++ .fnend ++ .size flush_l2p_region, .-flush_l2p_region ++ .align 2 ++ .global FtlMapTblRecovery ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMapTblRecovery, %function ++FtlMapTblRecovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r3, [r0, #24] ++ mov r4, r0 ++ mov r1, #0 ++ mov r7, #0 ++ ldr r5, .L2682 ++ str r3, [sp] ++ ldr r3, [r0, #16] ++ ldr r8, [r0, #12] ++ ldr fp, .L2682+4 ++ str r3, [sp, #12] ++ ldrh r3, [r0, #6] ++ str r3, [sp, #4] ++ ldrh r3, [r0, #8] ++ ldr r0, [sp] ++ str r3, [sp, #8] ++ ldr r3, [sp, #4] ++ lsl r2, r3, #2 ++ bl ftl_memset ++ ldr r3, [r5, #-524] ++ ldr r6, [r5, #-500] ++ str r7, [r4, #32] ++ str r3, [r5, #1768] ++ mvn r3, #0 ++ str r6, [r5, #1772] ++ strh r3, [r4] @ movhi ++ strh r3, [r4, #2] @ movhi ++ mov r3, #1 ++ str r7, [r4, #28] ++ str r3, [r4, #36] ++.L2641: ++ ldr r3, [sp, #8] ++ sxth r10, r7 ++ cmp r10, r3 ++ bge .L2660 ++ ldr r3, [sp, #8] ++ sub r3, r3, #1 ++ cmp r10, r3 ++ lsl r3, r10, #1 ++ bne .L2642 ++ ldrh r0, [r8, r3] ++ mov r1, #1 ++ add r9, r8, r3 ++ mov r8, #0 ++ bl FtlGetLastWrittenPage ++ sxth r3, r0 ++ strh r7, [r4] @ movhi ++ add r0, r0, #1 ++ ldr r7, .L2682+8 ++ str r3, [sp, #8] ++ ldr r3, [sp, #12] ++ strh r0, [r4, #2] @ movhi ++ add fp, r7, #2400 ++ ldr r3, [r3, r10, lsl #2] ++ ldr r10, .L2682+12 ++ str r3, [r4, #28] ++.L2643: ++ ldr r3, [sp, #8] ++ sxth r2, r8 ++ add r1, r3, #1 ++ cmp r2, r1 ++ blt .L2646 ++.L2660: ++ mov r0, r4 ++ bl ftl_free_no_use_map_blk ++ ldr r1, .L2682+8 ++ movw r3, #2392 ++ ldrh r2, [r4, #2] ++ ldrh r3, [r1, r3] ++ cmp r2, r3 ++ bne .L2648 ++ mov r0, r4 ++ bl ftl_map_blk_alloc_new_blk ++.L2648: ++ mov r0, r4 ++ bl ftl_map_blk_gc ++ mov r0, r4 ++ bl ftl_map_blk_gc ++ mov r0, #0 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2646: ++ ldrh r1, [r9] ++ mov r0, r10 ++ orr r2, r2, r1, lsl #10 ++ str r2, [r5, #1764] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldrb r2, [r7, #36] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L2644 ++ ldr r2, [r5, #1772] ++ ldr r2, [r2, #12] ++ cmp r2, #0 ++ str r2, [sp, #12] ++ beq .L2644 ++ ldrh r1, [fp] ++ ldr r0, [r5, #1768] ++ bl js_hash ++ ldr r2, [sp, #12] ++ cmp r2, r0 ++ mvnne r2, #0 ++ strne r2, [r5, #1760] ++.L2644: ++ ldr r1, .L2682 ++ ldr r2, [r1, #1760] ++ cmn r2, #1 ++ beq .L2645 ++ ldrh r2, [r6, #8] ++ ldr r3, [sp, #4] ++ cmp r3, r2 ++ bls .L2645 ++ ldrh ip, [r6] ++ ldrh r0, [r4, #4] ++ cmp ip, r0 ++ ldreq r1, [r1, #1764] ++ ldreq r3, [sp] ++ streq r1, [r3, r2, lsl #2] ++.L2645: ++ add r8, r8, #1 ++ b .L2643 ++.L2642: ++ ldr r2, [r5, #-524] ++ ldr r0, .L2682+12 ++ str r2, [r5, #1768] ++ add r2, r8, r3 ++ str r2, [sp, #16] ++ ldrh r2, [r8, r3] ++ ldrh r3, [fp] ++ sub r3, r3, #1 ++ orr r3, r3, r2, lsl #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [r5, #1764] ++ bl FlashReadPages ++ ldr r3, [r5, #1760] ++ cmn r3, #1 ++ beq .L2662 ++ ldrh r2, [r6] ++ ldrh r3, [r4, #4] ++ cmp r2, r3 ++ bne .L2662 ++ ldrh r2, [r6, #8] ++ movw r3, #64245 ++ cmp r2, r3 ++ beq .L2650 ++.L2662: ++ ldr r9, .L2682 ++ mov r10, #0 ++.L2651: ++ ldrh r2, [fp] ++ sxth r3, r10 ++ cmp r3, r2 ++ bge .L2658 ++ ldr r2, [sp, #16] ++ ldr r0, .L2682+12 ++ ldrh r2, [r2] ++ orr r3, r3, r2, lsl #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [r9, #1764] ++ bl FlashReadPages ++ ldr r3, .L2682+8 ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2655 ++ ldr r3, [r9, #1772] ++ ldr r3, [r3, #12] ++ cmp r3, #0 ++ str r3, [sp, #20] ++ beq .L2655 ++ ldr r2, .L2682+16 ++ ldr r0, [r9, #1768] ++ ldrh r1, [r2] ++ bl js_hash ++ ldr r3, [sp, #20] ++ cmp r3, r0 ++ mvnne r3, #0 ++ strne r3, [r9, #1760] ++.L2655: ++ ldr r3, [r9, #1760] ++ cmn r3, #1 ++ beq .L2656 ++ ldrh r3, [r6, #8] ++ ldr r2, [sp, #4] ++ cmp r2, r3 ++ bls .L2656 ++ ldrh r1, [r6] ++ ldrh r2, [r4, #4] ++ cmp r1, r2 ++ ldreq r2, [r9, #1764] ++ ldreq r1, [sp] ++ streq r2, [r1, r3, lsl #2] ++.L2656: ++ add r10, r10, #1 ++ b .L2651 ++.L2650: ++ mov r1, #0 ++ mov ip, #4 ++.L2652: ++ ldrh r2, [fp] ++ sxth r3, r1 ++ sub r2, r2, #1 ++ cmp r3, r2 ++ blt .L2654 ++.L2658: ++ add r7, r7, #1 ++ b .L2641 ++.L2654: ++ ldr r0, [r5, #-524] ++ add r1, r1, #1 ++ ldr r9, [sp, #4] ++ ldr r2, [r0, r3, lsl #3] ++ uxth lr, r2 ++ cmp r9, lr ++ addhi r3, ip, r3, lsl #3 ++ movhi r2, lr ++ ldrhi r3, [r0, r3] ++ ldrhi r0, [sp] ++ strhi r3, [r0, r2, lsl #2] ++ b .L2652 ++.L2683: ++ .align 2 ++.L2682: ++ .word .LANCHOR2 ++ .word .LANCHOR0+2392 ++ .word .LANCHOR0 ++ .word .LANCHOR2+1760 ++ .word .LANCHOR0+2400 ++ .fnend ++ .size FtlMapTblRecovery, .-FtlMapTblRecovery ++ .align 2 ++ .global FtlLoadVonderInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadVonderInfo, %function ++FtlLoadVonderInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L2686 ++ movw r1, #2412 ++ ldr r3, .L2686+4 ++ push {r4, lr} ++ .save {r4, lr} ++ ldrh r1, [r2, r1] ++ add r0, r3, #1792 ++ add r0, r0, #8 ++ strh r1, [r0, #10] @ movhi ++ ldr r1, .L2686+8 ++ strh r1, [r0, #4] @ movhi ++ movw r1, #2438 ++ ldrh r1, [r2, r1] ++ strh r1, [r0, #8] @ movhi ++ movw r1, #2414 ++ ldrh r1, [r2, r1] ++ ldr r2, [r2, #2440] ++ strh r1, [r0, #6] @ movhi ++ str r2, [r3, #1812] ++ ldr r2, [r3, #-460] ++ str r2, [r3, #1816] ++ ldr r2, [r3, #-464] ++ str r2, [r3, #1820] ++ ldr r2, [r3, #-456] ++ str r2, [r3, #1824] ++ bl FtlMapTblRecovery ++ mov r0, #0 ++ pop {r4, pc} ++.L2687: ++ .align 2 ++.L2686: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word -3962 ++ .fnend ++ .size FtlLoadVonderInfo, .-FtlLoadVonderInfo ++ .align 2 ++ .global FtlLoadMapInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadMapInfo, %function ++FtlLoadMapInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl FtlL2PDataInit ++ ldr r0, .L2690 ++ bl FtlMapTblRecovery ++ mov r0, #0 ++ pop {r4, pc} ++.L2691: ++ .align 2 ++.L2690: ++ .word .LANCHOR2-432 ++ .fnend ++ .size FtlLoadMapInfo, .-FtlLoadMapInfo ++ .align 2 ++ .global FtlVendorPartWrite ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVendorPartWrite, %function ++FtlVendorPartWrite: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2702 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r2 ++ movw r2, #2386 ++ mov r5, r1 ++ add r1, r0, r1 ++ .pad #60 ++ sub sp, sp, #60 ++ ldrh r2, [r3, r2] ++ cmp r1, r2 ++ mvnhi r9, #0 ++ bhi .L2692 ++ movw r2, #2398 ++ ldr r8, .L2702+4 ++ ldrh r6, [r3, r2] ++ mov r7, r0 ++ mov r9, #0 ++ lsr r6, r0, r6 ++ lsl fp, r6, #2 ++.L2694: ++ cmp r5, #0 ++ bne .L2699 ++.L2692: ++ mov r0, r9 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2699: ++ ldr r3, [r8, #-456] ++ mov r0, r7 ++ ldr r2, [r3, fp] ++ ldr r3, .L2702+8 ++ str r2, [sp, #12] ++ ldrh r3, [r3] ++ mov r1, r3 ++ str r3, [sp, #8] ++ bl __aeabi_uidivmod ++ ldr r3, [sp, #8] ++ ldr r2, [sp, #12] ++ str r1, [sp, #4] ++ sub r4, r3, r1 ++ uxth r4, r4 ++ cmp r5, r4 ++ uxthcc r4, r5 ++ cmp r2, #0 ++ cmpne r4, r3 ++ movne r1, #1 ++ moveq r1, #0 ++ beq .L2696 ++ ldr r3, [r8, #-516] ++ add r0, sp, #20 ++ str r2, [sp, #24] ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [sp, #28] ++ mov r3, #0 ++ str r3, [sp, #32] ++ bl FlashReadPages ++.L2697: ++ lsl r3, r4, #9 ++ ldr r0, [r8, #-516] ++ mov r1, r10 ++ mov r2, r3 ++ str r3, [sp, #8] ++ ldr r3, [sp, #4] ++ sub r5, r5, r4 ++ add r7, r7, r4 ++ add fp, fp, #4 ++ add r0, r0, r3, lsl #9 ++ bl ftl_memcpy ++ mov r1, r6 ++ ldr r2, [r8, #-516] ++ ldr r0, .L2702+12 ++ add r6, r6, #1 ++ bl FtlMapWritePage ++ ldr r3, [sp, #8] ++ cmn r0, #1 ++ mvneq r9, #0 ++ add r10, r10, r3 ++ b .L2694 ++.L2696: ++ ldr r3, .L2702+16 ++ ldr r0, [r8, #-516] ++ ldrh r2, [r3] ++ bl ftl_memset ++ b .L2697 ++.L2703: ++ .align 2 ++.L2702: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2396 ++ .word .LANCHOR2+1800 ++ .word .LANCHOR0+2400 ++ .fnend ++ .size FtlVendorPartWrite, .-FtlVendorPartWrite ++ .align 2 ++ .global Ftl_save_ext_data ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_save_ext_data, %function ++Ftl_save_ext_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L2706 ++ ldr r2, .L2706+4 ++ ldr r1, [r3, #-3236] ++ cmp r1, r2 ++ bxne lr ++ ldr r2, .L2706+8 ++ mov r1, #1 ++ mov r0, #0 ++ str r2, [r3, #-3232] ++ ldr r2, [r3, #-3340] ++ str r2, [r3, #-3148] ++ ldr r2, [r3, #-3336] ++ str r2, [r3, #-3144] ++ ldr r2, [r3, #-3344] ++ str r2, [r3, #-3228] ++ ldr r2, [r3, #-3356] ++ str r2, [r3, #-3224] ++ ldr r2, [r3, #-3364] ++ str r2, [r3, #-3220] ++ ldr r2, [r3, #-3348] ++ str r2, [r3, #-3216] ++ ldr r2, [r3, #-3320] ++ str r2, [r3, #-3208] ++ ldr r2, [r3, #-3600] ++ str r2, [r3, #-3204] ++ ldr r2, [r3, #-3360] ++ str r2, [r3, #-3200] ++ ldr r2, [r3, #-3352] ++ str r2, [r3, #-3196] ++ ldr r2, [r3, #-3312] ++ str r2, [r3, #-3192] ++ ldr r2, [r3, #-3308] ++ str r2, [r3, #-3188] ++ ldr r2, [r3, #-2724] ++ str r2, [r3, #-3176] ++ ldr r2, [r3, #-564] ++ str r2, [r3, #-3172] ++ ldr r2, .L2706+12 ++ b FtlVendorPartWrite ++.L2707: ++ .align 2 ++.L2706: ++ .word .LANCHOR2 ++ .word 1179929683 ++ .word 1342177379 ++ .word .LANCHOR2-3236 ++ .fnend ++ .size Ftl_save_ext_data, .-Ftl_save_ext_data ++ .align 2 ++ .global FtlEctTblFlush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlEctTblFlush, %function ++FtlEctTblFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2718 ++ ldr r3, [r3, #2248] ++ cmp r3, #0 ++ ldr r3, .L2718+4 ++ moveq r2, #32 ++ beq .L2709 ++ ldr r2, [r3, #-3308] ++ cmp r2, #39 ++ movhi r2, #32 ++ movls r2, #4 ++.L2709: ++ movw ip, #1844 ++ ldrh r1, [r3, ip] ++ cmp r1, #31 ++ addls r1, r1, #1 ++ movls r2, #1 ++ strhls r1, [r3, ip] @ movhi ++ cmp r0, #0 ++ bne .L2711 ++ ldr r1, [r3, #-480] ++ ldr r0, [r1, #20] ++ ldr r1, [r1, #16] ++ add r2, r2, r0 ++ cmp r1, r2 ++ bcc .L2716 ++.L2711: ++ push {r4, lr} ++ .save {r4, lr} ++ mov r0, #64 ++ ldr r2, [r3, #-480] ++ ldr r1, [r2, #16] ++ str r1, [r2, #20] ++ ldr r1, .L2718+8 ++ str r1, [r2] ++ ldr r2, [r3, #-480] ++ ldr r3, .L2718+12 ++ ldrh r1, [r3] ++ lsl r3, r1, #9 ++ str r3, [r2, #12] ++ ldr r3, [r2, #8] ++ add r3, r3, #1 ++ str r3, [r2, #8] ++ mov r3, #0 ++ str r3, [r2, #4] ++ bl FtlVendorPartWrite ++ bl Ftl_save_ext_data ++ mov r0, #0 ++ pop {r4, pc} ++.L2716: ++ mov r0, #0 ++ bx lr ++.L2719: ++ .align 2 ++.L2718: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word 1112818501 ++ .word .LANCHOR2-488 ++ .fnend ++ .size FtlEctTblFlush, .-FtlEctTblFlush ++ .align 2 ++ .global FtlVendorPartRead ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVendorPartRead, %function ++FtlVendorPartRead: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2731 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r2 ++ movw r2, #2386 ++ mov r6, r1 ++ add r1, r0, r1 ++ .pad #60 ++ sub sp, sp, #60 ++ ldrh r2, [r3, r2] ++ cmp r1, r2 ++ mvnhi r9, #0 ++ bhi .L2720 ++ movw r2, #2398 ++ ldr r8, .L2731+4 ++ ldrh r5, [r3, r2] ++ mov r7, r0 ++ mov r9, #0 ++ lsr r5, r0, r5 ++ lsl fp, r5, #2 ++.L2722: ++ cmp r6, #0 ++ bne .L2728 ++.L2720: ++ mov r0, r9 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2728: ++ ldr r3, [r8, #-456] ++ mov r0, r7 ++ ldr r3, [r3, fp] ++ str r3, [sp, #8] ++ ldr r3, .L2731+8 ++ ldrh r4, [r3] ++ mov r1, r4 ++ bl __aeabi_uidivmod ++ sub r4, r4, r1 ++ ldr r3, [sp, #8] ++ uxth r4, r4 ++ str r1, [sp, #4] ++ cmp r6, r4 ++ uxthcc r4, r6 ++ cmp r3, #0 ++ lsl r2, r4, #9 ++ str r2, [sp, #8] ++ beq .L2724 ++ ldr r2, [r8, #-516] ++ add r0, sp, #20 ++ str r3, [sp, #24] ++ str r3, [sp, #12] ++ str r2, [sp, #28] ++ mov r2, #0 ++ str r2, [sp, #32] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [sp, #20] ++ ldr r3, [sp, #12] ++ cmn r2, #1 ++ ldr r2, [r8, #1760] ++ mvneq r9, #0 ++ cmp r2, #256 ++ bne .L2726 ++ mov r2, r3 ++ mov r1, r5 ++ ldr r0, .L2731+12 ++ bl printk ++ ldr r2, [r8, #-516] ++ mov r1, r5 ++ ldr r0, .L2731+16 ++ bl FtlMapWritePage ++.L2726: ++ ldr r1, [r8, #-516] ++ lsl r2, r4, #9 ++ ldr r3, [sp, #4] ++ mov r0, r10 ++ add r1, r1, r3, lsl #9 ++ bl ftl_memcpy ++.L2727: ++ ldr r3, [sp, #8] ++ add r5, r5, #1 ++ sub r6, r6, r4 ++ add r7, r7, r4 ++ add fp, fp, #4 ++ add r10, r10, r3 ++ b .L2722 ++.L2724: ++ lsl r2, r4, #9 ++ mov r1, r3 ++ mov r0, r10 ++ bl ftl_memset ++ b .L2727 ++.L2732: ++ .align 2 ++.L2731: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2396 ++ .word .LC136 ++ .word .LANCHOR2+1800 ++ .fnend ++ .size FtlVendorPartRead, .-FtlVendorPartRead ++ .align 2 ++ .global FtlLoadEctTbl ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadEctTbl, %function ++FtlLoadEctTbl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r0, #64 ++ ldr r4, .L2736 ++ sub r5, r4, #488 ++ ldr r2, [r4, #-480] ++ ldrh r1, [r5] ++ bl FtlVendorPartRead ++ ldr r3, [r4, #-480] ++ ldr r2, [r3] ++ ldr r3, .L2736+4 ++ cmp r2, r3 ++ beq .L2734 ++ ldr r1, .L2736+8 ++ ldr r0, .L2736+12 ++ bl printk ++ ldrh r2, [r5] ++ mov r1, #0 ++ ldr r0, [r4, #-480] ++ lsl r2, r2, #9 ++ bl ftl_memset ++.L2734: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L2737: ++ .align 2 ++.L2736: ++ .word .LANCHOR2 ++ .word 1112818501 ++ .word .LC137 ++ .word .LC77 ++ .fnend ++ .size FtlLoadEctTbl, .-FtlLoadEctTbl ++ .align 2 ++ .global Ftl_load_ext_data ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_load_ext_data, %function ++Ftl_load_ext_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r1, #1 ++ ldr r4, .L2744 ++ mov r0, #0 ++ ldr r5, .L2744+4 ++ sub r6, r4, #3232 ++ sub r6, r6, #4 ++ mov r2, r6 ++ bl FtlVendorPartRead ++ ldr r3, [r4, #-3236] ++ cmp r3, r5 ++ beq .L2739 ++ mov r2, #512 ++ mov r1, #0 ++ mov r0, r6 ++ bl ftl_memset ++ str r5, [r4, #-3236] ++.L2739: ++ ldr r3, [r4, #-3236] ++ cmp r3, r5 ++ bne .L2740 ++ ldr r3, [r4, #-3148] ++ str r3, [r4, #-3340] ++ ldr r3, [r4, #-3144] ++ str r3, [r4, #-3336] ++ ldr r3, [r4, #-3228] ++ str r3, [r4, #-3344] ++ ldr r3, [r4, #-3224] ++ str r3, [r4, #-3356] ++ ldr r3, [r4, #-3220] ++ str r3, [r4, #-3364] ++ ldr r3, [r4, #-3216] ++ str r3, [r4, #-3348] ++ ldr r3, [r4, #-3208] ++ str r3, [r4, #-3320] ++ ldr r3, [r4, #-3204] ++ str r3, [r4, #-3600] ++ ldr r3, [r4, #-3200] ++ str r3, [r4, #-3360] ++ ldr r3, [r4, #-3196] ++ str r3, [r4, #-3352] ++ ldr r3, [r4, #-3192] ++ str r3, [r4, #-3312] ++ ldr r3, [r4, #-3188] ++ str r3, [r4, #-3308] ++ ldr r3, [r4, #-3176] ++ str r3, [r4, #-2724] ++.L2740: ++ ldr r1, [r4, #-3168] ++ mov r3, #0 ++ ldr r2, .L2744+8 ++ str r3, [r4, #-564] ++ ldr r5, .L2744+12 ++ cmp r1, r2 ++ bne .L2741 ++ ldrb r2, [r5, #152] @ zero_extendqisi2 ++ cmp r2, r3 ++ beq .L2742 ++ str r3, [r4, #-3168] ++ bl Ftl_save_ext_data ++.L2741: ++ movw r3, #2382 ++ ldr r0, [r4, #-3324] ++ ldrh r2, [r5, r3] ++ movw r1, #2332 ++ ldr r3, [r4, #-3320] ++ ldrh r1, [r5, r1] ++ mla r0, r0, r2, r3 ++ bl __aeabi_uidiv ++ str r0, [r4, #-3316] ++ pop {r4, r5, r6, pc} ++.L2742: ++ mov r3, #1 ++ ldr r1, .L2744+16 ++ ldr r0, .L2744+20 ++ str r3, [r5, #2248] ++ bl printk ++ b .L2741 ++.L2745: ++ .align 2 ++.L2744: ++ .word .LANCHOR2 ++ .word 1179929683 ++ .word 305432421 ++ .word .LANCHOR0 ++ .word .LC138 ++ .word .LC77 ++ .fnend ++ .size Ftl_load_ext_data, .-Ftl_load_ext_data ++ .align 2 ++ .global FtlMapBlkWriteDumpData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMapBlkWriteDumpData, %function ++FtlMapBlkWriteDumpData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, [r0, #36] ++ cmp r3, #0 ++ bxeq lr ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r2, #0 ++ ldr r4, .L2756 ++ str r2, [r0, #36] ++ ldr r2, [r4, #-3612] ++ ldrh r5, [r0, #6] ++ ldr r3, [r0, #24] ++ cmp r2, #0 ++ popne {r4, r5, r6, pc} ++ mov r6, r0 ++ ldr r2, [r4, #-500] ++ ldr r0, [r4, #-520] ++ sub r5, r5, #1 ++ uxth r5, r5 ++ str r2, [r4, #1772] ++ str r0, [r4, #1768] ++ ldr r3, [r3, r5, lsl #2] ++ cmp r3, #0 ++ str r3, [r4, #1764] ++ beq .L2750 ++ mov r2, #1 ++ add r0, r4, #1760 ++ mov r1, r2 ++ bl FlashReadPages ++.L2751: ++ ldr r2, [r4, #1768] ++ mov r1, r5 ++ mov r0, r6 ++ pop {r4, r5, r6, lr} ++ b FtlMapWritePage ++.L2750: ++ ldr r3, .L2756+4 ++ mov r1, #255 ++ ldrh r2, [r3] ++ bl ftl_memset ++ b .L2751 ++.L2757: ++ .align 2 ++.L2756: ++ .word .LANCHOR2 ++ .word .LANCHOR0+2400 ++ .fnend ++ .size FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData ++ .align 2 ++ .global FlashReadFacBbtData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadFacBbtData, %function ++FlashReadFacBbtData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r8, r2 ++ ldr r2, .L2771 ++ .pad #40 ++ sub sp, sp, #40 ++ mov r5, r0 ++ mov r7, r1 ++ ldr r9, .L2771+4 ++ ldrh r3, [r2, #138] ++ ldrh r2, [r2, #136] ++ smulbb r3, r3, r2 ++ ldr r2, [r9, #1696] ++ uxth r3, r3 ++ str r2, [sp, #12] ++ ldr r2, [r9, #1728] ++ sub r6, r3, #1 ++ mul r10, r1, r3 ++ uxth r6, r6 ++ sub r4, r3, #16 ++ str r2, [sp, #16] ++.L2759: ++ cmp r6, r4 ++ mvnle r0, #0 ++ ble .L2758 ++.L2765: ++ add r3, r6, r10 ++ mov r2, #1 ++ lsl r3, r3, #10 ++ mov r1, r2 ++ add r0, sp, #4 ++ str r3, [sp, #8] ++ bl FlashReadPages ++ ldr r3, [sp, #4] ++ cmn r3, #1 ++ beq .L2760 ++ ldr r3, [r9, #1728] ++ ldrh r2, [r3] ++ movw r3, #61664 ++ cmp r2, r3 ++ bne .L2760 ++ cmp r5, #0 ++ moveq r0, r5 ++ beq .L2758 ++ cmp r7, #0 ++ moveq r1, r7 ++ moveq lr, #1 ++ beq .L2763 ++.L2762: ++ mov r2, r8 ++ ldr r1, [r9, #1696] ++ mov r0, r5 ++ bl ftl_memcpy ++ mov r3, #4 ++ ldr r0, .L2771+8 ++ mov r2, r3 ++ mov r1, r5 ++ bl rknand_print_hex ++ mov r0, #0 ++.L2758: ++ add sp, sp, #40 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2764: ++ ldr r0, [r9, #1696] ++ lsr ip, r3, #5 ++ and r3, r3, #31 ++ ldr r2, [r0, ip, lsl #2] ++ orr r3, r2, lr, lsl r3 ++ str r3, [r0, ip, lsl #2] ++.L2763: ++ ldr r0, [r9, #1716] ++ uxth r3, r1 ++ add r1, r1, #1 ++ cmp r3, r0 ++ bcc .L2764 ++ b .L2762 ++.L2760: ++ sub r6, r6, #1 ++ uxth r6, r6 ++ b .L2759 ++.L2772: ++ .align 2 ++.L2771: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC139 ++ .fnend ++ .size FlashReadFacBbtData, .-FlashReadFacBbtData ++ .align 2 ++ .global FlashGetBadBlockList ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashGetBadBlockList, %function ++FlashGetBadBlockList: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2784 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, r0 ++ ldr r6, .L2784+4 ++ ldr r3, [r3, #48] ++ ldr r0, [r6, #1724] ++ ldrb r4, [r3, #13] @ zero_extendqisi2 ++ ldrh r3, [r3, #14] ++ smulbb r4, r4, r3 ++ uxth r4, r4 ++ add r2, r4, #7 ++ asr r2, r2, #3 ++ bl FlashReadFacBbtData ++ cmn r0, #1 ++ bne .L2774 ++.L2778: ++ mov r3, #0 ++.L2775: ++ lsl r3, r3, #1 ++ mvn r2, #0 ++ mov r0, #0 ++ strh r2, [r5, r3] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L2774: ++ mov r2, #0 ++ lsr lr, r4, #4 ++ mov r3, r2 ++ sub r4, r4, #1 ++ mov r7, #1 ++.L2776: ++ uxth r1, r2 ++ cmp r1, r4 ++ bge .L2775 ++ ldr r8, [r6, #1724] ++ lsr ip, r1, #5 ++ and r0, r1, #31 ++ add r2, r2, #1 ++ ldr ip, [r8, ip, lsl #2] ++ ands r0, ip, r7, lsl r0 ++ addne r0, r3, #1 ++ lslne r3, r3, #1 ++ strhne r1, [r5, r3] @ movhi ++ uxthne r3, r0 ++ cmp r3, lr ++ bcc .L2776 ++ b .L2778 ++.L2785: ++ .align 2 ++.L2784: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FlashGetBadBlockList, .-FlashGetBadBlockList ++ .align 2 ++ .global FtlMakeBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMakeBbt, %function ++FtlMakeBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L2807 ++ ldr r8, [r4, #-3612] ++ cmp r8, #0 ++ bne .L2787 ++ ldr r9, .L2807+4 ++ bl FtlBbtMemInit ++ bl FtlLoadFactoryBbt ++ sub r10, r9, #18 ++ sub r5, r9, #28 ++.L2788: ++ ldr r3, .L2807+8 ++ ldr r6, .L2807+12 ++ ldrh r3, [r3] ++ cmp r8, r3 ++ bcc .L2794 ++ ldr r8, .L2807+16 ++ mov r7, #0 ++.L2795: ++ ldrh r3, [r8] ++ uxth r0, r7 ++ add r7, r7, #1 ++ cmp r3, r0 ++ bhi .L2796 ++ ldrh r7, [r5, #12] ++ movw r8, #65535 ++ sub r7, r7, #1 ++ uxth r7, r7 ++.L2797: ++ ldrh r3, [r5, #12] ++ sub r3, r3, #48 ++ cmp r7, r3 ++ ble .L2801 ++ mov r0, r7 ++ bl FtlBbmIsBadBlock ++ cmp r0, #1 ++ beq .L2798 ++ mov r0, r7 ++ bl FlashTestBlk ++ cmp r0, #0 ++ beq .L2799 ++ mov r0, r7 ++ bl FtlBbmMapBadBlock ++.L2798: ++ sub r7, r7, #1 ++ uxth r7, r7 ++ b .L2797 ++.L2794: ++ ldr r3, [r4, #-500] ++ movw r2, #65535 ++ ldr r0, [r4, #-524] ++ ldr fp, .L2807+20 ++ str r3, [sp, #4] ++ str r3, [r4, #1772] ++ ldrh r3, [r10, #2]! ++ str r0, [r4, #1768] ++ cmp r3, r2 ++ beq .L2789 ++ ldrh r7, [fp] ++ mov r2, #1 ++ mov r1, r2 ++ ldr r0, .L2807+24 ++ mla r7, r8, r7, r3 ++ lsl r3, r7, #10 ++ str r3, [r4, #1764] ++ bl FlashReadPages ++ ldrh r2, [fp] ++ ldr r1, [r4, #1768] ++ ldr r0, [r9] ++ add r2, r2, #7 ++ asr r2, r2, #3 ++ bl ftl_memcpy ++.L2790: ++ uxth r0, r7 ++ add r8, r8, #1 ++ add r9, r9, #4 ++ bl FtlBbmMapBadBlock ++ b .L2788 ++.L2789: ++ mov r1, r8 ++ bl FlashGetBadBlockList ++ ldr r1, [r9] ++ ldr r0, [r4, #1768] ++ bl FtlBbt2Bitmap ++ ldrh r6, [fp] ++.L2792: ++ sub r6, r6, #1 ++ uxth r6, r6 ++.L2791: ++ ldrh r0, [fp] ++ smlabb r0, r0, r8, r6 ++ uxth r0, r0 ++ bl FtlBbmIsBadBlock ++ cmp r0, #1 ++ beq .L2792 ++ mov r2, #16 ++ mov r1, #0 ++ strh r6, [r10] @ movhi ++ ldr r0, [r4, #-500] ++ bl ftl_memset ++ ldr r3, [sp, #4] ++ movw r2, 61664 @ movhi ++ strh r2, [r3] @ movhi ++ mov r3, #0 ++ ldr r2, [sp, #4] ++ ldrh r7, [fp] ++ str r3, [r2, #4] ++ ldrh r3, [r10] ++ strh r3, [r2, #2] @ movhi ++ ldrh r3, [r10] ++ ldr r1, [r9] ++ ldr r0, [r4, #1768] ++ mla r7, r8, r7, r3 ++ lsl r3, r7, #10 ++ str r3, [r4, #1764] ++ ldr r3, .L2807+28 ++ ldrh r2, [r3] ++ lsl r2, r2, #2 ++ bl ftl_memcpy ++ mov r2, #1 ++ ldr r0, .L2807+24 ++ mov r1, r2 ++ bl FlashEraseBlocks ++ mov r3, #1 ++ ldr r0, .L2807+24 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldr r3, [r4, #1760] ++ cmn r3, #1 ++ bne .L2790 ++ uxth r0, r7 ++ bl FtlBbmMapBadBlock ++ b .L2791 ++.L2796: ++ bl FtlBbmMapBadBlock ++ b .L2795 ++.L2799: ++ ldrh r3, [r5] ++ cmp r3, r8 ++ strheq r7, [r5] @ movhi ++ beq .L2798 ++.L2800: ++ strh r7, [r5, #4] @ movhi ++.L2801: ++ movw r7, #2456 ++ ldr r0, [r4, #-3608] ++ ldrh r3, [r6, r7] ++ mov r8, #0 ++ str r8, [r6, #2464] ++ mov r2, #2 ++ mov r1, #1 ++ strh r8, [r5, #2] @ movhi ++ lsl r3, r3, #10 ++ str r3, [r0, #4] ++ ldrh r3, [r5, #4] ++ lsl r3, r3, #10 ++ str r3, [r0, #40] ++ bl FlashEraseBlocks ++ ldrh r0, [r6, r7] ++ bl FtlBbmMapBadBlock ++ ldrh r0, [r5, #4] ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ ldr r3, [r6, #2464] ++ ldrh r2, [r5, #4] ++ strh r8, [r5, #2] @ movhi ++ add r3, r3, #1 ++ str r3, [r6, #2464] ++ ldrh r3, [r6, r7] ++ strh r2, [r6, r7] @ movhi ++ strh r3, [r5, #4] @ movhi ++ bl FtlBbmTblFlush ++.L2787: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2808: ++ .align 2 ++.L2807: ++ .word .LANCHOR2 ++ .word .LANCHOR0+2484 ++ .word .LANCHOR0+2346 ++ .word .LANCHOR0 ++ .word .LANCHOR0+2404 ++ .word .LANCHOR0+2388 ++ .word .LANCHOR2+1760 ++ .word .LANCHOR2-436 ++ .fnend ++ .size FtlMakeBbt, .-FtlMakeBbt ++ .align 2 ++ .global log2phys ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type log2phys, %function ++log2phys: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r8, .L2825 ++ ldr r3, [r8, #2452] ++ cmp r0, r3 ++ bcs .L2810 ++ movw r3, #2398 ++ mov r10, r0 ++ ldrh r0, [r8, r3] ++ mov r5, #12 ++ ldr r4, .L2825+4 ++ str r1, [sp, #8] ++ add r3, r0, #7 ++ str r2, [sp, #12] ++ lsr r6, r10, r3 ++ ldr fp, [r4, #-3376] ++ str r3, [sp, #4] ++ movw r3, #2430 ++ uxth r9, r6 ++ ldrh r1, [r8, r3] ++ mov r3, #0 ++.L2811: ++ uxth r7, r3 ++ cmp r7, r1 ++ bcc .L2816 ++ bl select_l2p_ram_region ++ mul r5, r5, r0 ++ movw r2, #65535 ++ mov r7, r0 ++ ldrh r1, [fp, r5] ++ add r3, fp, r5 ++ cmp r1, r2 ++ beq .L2817 ++ ldr r3, [r3, #4] ++ cmp r3, #0 ++ bge .L2817 ++ bl flush_l2p_region ++.L2817: ++ ldr r3, [r4, #-452] ++ uxth r6, r6 ++ ldr fp, [r3, r6, lsl #2] ++ cmp fp, #0 ++ bne .L2818 ++ ldr r0, [r4, #-3376] ++ mov r1, #255 ++ ldr r2, .L2825+8 ++ add r0, r0, r5 ++ ldrh r2, [r2] ++ ldr r0, [r0, #8] ++ bl ftl_memset ++ ldr r2, [r4, #-3376] ++ strh r9, [r2, r5] @ movhi ++ ldr r2, [r4, #-3376] ++ add r5, r2, r5 ++ str fp, [r5, #4] ++ b .L2813 ++.L2810: ++ cmp r2, #0 ++ mvn r0, #0 ++ streq r0, [r1] ++.L2809: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2816: ++ add r3, r3, #1 ++ mla r0, r5, r3, fp ++ ldrh r0, [r0, #-12] ++ cmp r0, r9 ++ bne .L2811 ++.L2813: ++ ldr r3, [sp, #4] ++ mvn r0, #0 ++ ldr r1, .L2825+4 ++ bic r10, r10, r0, lsl r3 ++ ldr r3, [sp, #12] ++ uxth r10, r10 ++ cmp r3, #0 ++ mov r3, #12 ++ bne .L2814 ++ ldr r2, [r1, #-3376] ++ mla r3, r3, r7, r2 ++ ldr r2, [sp, #8] ++ ldr r3, [r3, #8] ++ ldr r3, [r3, r10, lsl #2] ++ str r3, [r2] ++.L2815: ++ ldr r2, [r1, #-3376] ++ mov r3, #12 ++ mov r0, #0 ++ mla r7, r3, r7, r2 ++ ldr r3, [r7, #4] ++ cmn r3, #1 ++ addne r3, r3, #1 ++ strne r3, [r7, #4] ++ b .L2809 ++.L2814: ++ ldr r2, [sp, #8] ++ mul r3, r3, r7 ++ ldr r0, [r2] ++ ldr r2, [r4, #-3376] ++ add r2, r2, r3 ++ ldr r2, [r2, #8] ++ str r0, [r2, r10, lsl #2] ++ ldr r2, [r4, #-3376] ++ add r3, r2, r3 ++ ldr r2, [r3, #4] ++ orr r2, r2, #-2147483648 ++ str r2, [r3, #4] ++ sub r3, r1, #3360 ++ strh r9, [r3, #-12] @ movhi ++ b .L2815 ++.L2818: ++ ldr r2, [r4, #-3376] ++ ldr r0, .L2825+12 ++ str fp, [r4, #1764] ++ add r2, r2, r5 ++ ldr r2, [r2, #8] ++ str r2, [r4, #1768] ++ ldr r2, [r4, #-500] ++ str r2, [r4, #1772] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [r4, #1772] ++ ldrh r2, [r2, #8] ++ cmp r2, r9 ++ beq .L2819 ++ mov r2, fp ++ mov r1, r6 ++ ldr r0, .L2825+16 ++ bl printk ++ mov r3, #4 ++ ldr r1, [r4, #1772] ++ mov r2, r3 ++ ldr r0, .L2825+20 ++ bl rknand_print_hex ++ movw r3, #2428 ++ mov r2, #4 ++ ldrh r3, [r8, r3] ++ ldr r1, [r4, #-452] ++ ldr r0, .L2825+24 ++ bl rknand_print_hex ++ mov r3, #1 ++ str r3, [r4, #-3612] ++.L2820: ++ ldr r3, .L2825+4 ++ mov r1, #0 ++ ldr r3, [r3, #-3376] ++ add r2, r3, r5 ++ str r1, [r2, #4] ++ strh r9, [r3, r5] @ movhi ++ b .L2813 ++.L2819: ++ ldr r2, [r4, #1760] ++ cmp r2, #256 ++ bne .L2820 ++ mov r2, fp ++ mov r1, r6 ++ ldr r0, .L2825+28 ++ bl printk ++ ldr r3, [r4, #-3376] ++ mov r1, r6 ++ ldr r0, .L2825+32 ++ add r3, r3, r5 ++ ldr r2, [r3, #8] ++ bl FtlMapWritePage ++ b .L2820 ++.L2826: ++ .align 2 ++.L2825: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2400 ++ .word .LANCHOR2+1760 ++ .word .LC140 ++ .word .LC101 ++ .word .LC141 ++ .word .LC142 ++ .word .LANCHOR2-432 ++ .fnend ++ .size log2phys, .-log2phys ++ .align 2 ++ .global FtlWriteDumpData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlWriteDumpData, %function ++FtlWriteDumpData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r4, .L2846 ++ ldr r3, [r4, #-3612] ++ cmp r3, #0 ++ bne .L2827 ++ sub r6, r4, #3520 ++ ldrh r2, [r6, #4] ++ cmp r2, #0 ++ beq .L2829 ++ ldrb r3, [r4, #-3512] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2829 ++ ldr r8, .L2846+4 ++ movw r3, #2390 ++ ldrb r1, [r4, #-3513] @ zero_extendqisi2 ++ ldrh r3, [r8, r3] ++ mul r3, r3, r1 ++ cmp r2, r3 ++ beq .L2829 ++ ldrb r10, [r4, #-3510] @ zero_extendqisi2 ++ cmp r10, #0 ++ bne .L2827 ++ ldr r7, [r8, #2452] ++ movw r3, #2324 ++ mov r2, r10 ++ mov r1, sp ++ ldrh r9, [r8, r3] ++ sub r7, r7, #1 ++ mov r0, r7 ++ bl log2phys ++ ldr r3, [sp] ++ ldr r5, [r4, #-500] ++ ldr r0, [r4, #-524] ++ cmn r3, #1 ++ str r3, [sp, #8] ++ str r7, [sp, #20] ++ str r0, [sp, #12] ++ str r5, [sp, #16] ++ str r10, [r5, #4] ++ beq .L2831 ++ mov r2, r10 ++ mov r1, #1 ++ add r0, sp, #4 ++ bl FlashReadPages ++.L2832: ++ ldr r10, .L2846+8 ++ mov r8, #0 ++ ldr r3, .L2846+12 ++ lsl r9, r9, #2 ++ mov fp, r8 ++ strh r3, [r5] @ movhi ++.L2833: ++ cmp r9, r8 ++ bne .L2837 ++.L2834: ++ mov r3, #1 ++.L2845: ++ strb r3, [r4, #-3510] ++.L2827: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2831: ++ add r8, r8, #2400 ++ mov r1, #255 ++ ldrh r2, [r8] ++ bl ftl_memset ++ b .L2832 ++.L2837: ++ ldrh r3, [r6, #4] ++ cmp r3, #0 ++ beq .L2834 ++ ldr r3, [sp, #8] ++ mov r0, r10 ++ str r7, [r5, #8] ++ add r8, r8, #1 ++ str r3, [r5, #12] ++ ldrh r3, [r6] ++ strh r3, [r5, #2] @ movhi ++ bl get_new_active_ppa ++ ldr r3, [r4, #-3328] ++ mov r1, #1 ++ str r0, [sp, #8] ++ add r0, sp, #4 ++ str r3, [r5, #4] ++ add r3, r3, #1 ++ cmn r3, #1 ++ moveq r3, fp ++ str r3, [r4, #-3328] ++ mov r3, #0 ++ mov r2, r3 ++ bl FlashProgPages ++ ldrh r0, [r6] ++ bl decrement_vpc_count ++ b .L2833 ++.L2829: ++ mov r3, #0 ++ b .L2845 ++.L2847: ++ .align 2 ++.L2846: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2-3520 ++ .word -3947 ++ .fnend ++ .size FtlWriteDumpData, .-FtlWriteDumpData ++ .align 2 ++ .global l2p_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type l2p_flush, %function ++l2p_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, #0 ++ ldr r5, .L2853 ++ mov r7, #12 ++ ldr r6, .L2853+4 ++ bl FtlWriteDumpData ++.L2849: ++ ldrh r3, [r5] ++ uxth r0, r4 ++ cmp r3, r0 ++ bhi .L2851 ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L2851: ++ ldr r2, [r6, #-3376] ++ uxth r3, r4 ++ mla r3, r7, r3, r2 ++ ldr r3, [r3, #4] ++ cmp r3, #0 ++ bge .L2850 ++ bl flush_l2p_region ++.L2850: ++ add r4, r4, #1 ++ b .L2849 ++.L2854: ++ .align 2 ++.L2853: ++ .word .LANCHOR0+2430 ++ .word .LANCHOR2 ++ .fnend ++ .size l2p_flush, .-l2p_flush ++ .align 2 ++ .global allocate_new_data_superblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type allocate_new_data_superblock, %function ++allocate_new_data_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r4, .L2882 ++ ldr r3, [r4, #-3612] ++ cmp r3, #0 ++ bne .L2856 ++ ldrh r5, [r0] ++ movw r3, #65535 ++ mov r7, r0 ++ cmp r5, r3 ++ beq .L2857 ++ ldr r2, [r4, #-3540] ++ lsl r3, r5, #1 ++ mov r0, r5 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L2858 ++ bl INSERT_DATA_LIST ++.L2857: ++ ldr r2, .L2882+4 ++ mov r3, #0 ++ strb r3, [r7, #8] ++ cmp r7, r2 ++ beq .L2859 ++ ldr r3, .L2882+8 ++ movw r1, #2344 ++ ldrh r1, [r3, r1] ++ cmp r1, #1 ++ beq .L2859 ++ ldrb r0, [r3, #152] @ zero_extendqisi2 ++ cmp r0, #0 ++ beq .L2860 ++.L2859: ++ mov r3, #1 ++ strb r3, [r7, #8] ++.L2861: ++ ldr r3, .L2882+12 ++ movw r2, #65535 ++ ldrh r0, [r3] ++ mov r6, r3 ++ cmp r0, r2 ++ beq .L2866 ++ cmp r5, r0 ++ bne .L2867 ++ ldr r2, [r4, #-3540] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L2868 ++.L2867: ++ bl update_vpc_list ++.L2868: ++ mvn r3, #0 ++ strh r3, [r6] @ movhi ++.L2866: ++ mov r0, r7 ++ bl allocate_data_superblock ++ bl l2p_flush ++ mov r0, #0 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L2856: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L2858: ++ bl INSERT_FREE_LIST ++ b .L2857 ++.L2860: ++ sub r2, r2, #48 ++ cmp r7, r2 ++ bne .L2861 ++ cmp r1, #3 ++ beq .L2863 ++ ldr r2, [r4, #-2724] ++ cmp r2, #1 ++ bne .L2864 ++.L2863: ++ mov r2, #1 ++ strb r2, [r4, #-3512] ++.L2864: ++ ldr r3, [r3, #2248] ++ cmp r3, #0 ++ beq .L2861 ++ ldr r3, [r4, #-3308] ++ cmp r3, #39 ++ movls r3, #1 ++ strbls r3, [r4, #-3512] ++ b .L2861 ++.L2883: ++ .align 2 ++.L2882: ++ .word .LANCHOR2 ++ .word .LANCHOR2-3472 ++ .word .LANCHOR0 ++ .word .LANCHOR2-380 ++ .fnend ++ .size allocate_new_data_superblock, .-allocate_new_data_superblock ++ .align 2 ++ .global FtlCheckVpc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlCheckVpc, %function ++FtlCheckVpc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, #0 ++ ldr r6, .L2905 ++ ldr r5, .L2905+4 ++ ldr r1, .L2905+8 ++ ldr r0, .L2905+12 ++ bl printk ++ mov r2, #8192 ++ mov r1, #0 ++ ldr r0, .L2905+4 ++ bl memset ++.L2885: ++ ldr r3, [r6, #2452] ++ cmp r4, r3 ++ bcc .L2887 ++ ldr r9, .L2905+16 ++ mov r4, #0 ++ ldr r5, .L2905+20 ++ mov r6, r4 ++ ldr r8, .L2905+4 ++.L2888: ++ ldrh r2, [r9] ++ uxth r3, r4 ++ cmp r2, r3 ++ bhi .L2890 ++ ldr r4, [r5, #-3528] ++ cmp r4, #0 ++ beq .L2891 ++ ldr r3, .L2905+24 ++ mov r7, #0 ++ ldr r9, .L2905+4 ++ mov fp, #6 ++ ldr r10, .L2905+28 ++ ldrh r8, [r3, #-4] ++ ldr r3, [r5, #-3548] ++ sub r4, r4, r3 ++ ldr r3, .L2905+32 ++ asr r4, r4, #1 ++ mul r4, r3, r4 ++ uxth r4, r4 ++.L2892: ++ uxth r3, r7 ++ cmp r8, r3 ++ bls .L2891 ++ ldr r2, [r5, #-3540] ++ lsl r3, r4, #1 ++ ldrh r2, [r2, r3] ++ cmp r2, #0 ++ beq .L2893 ++ mov r6, #1 ++ ldrh r3, [r9, r3] ++ mov r1, r4 ++ mov r0, r10 ++ bl printk ++.L2893: ++ mul r4, fp, r4 ++ ldr r3, [r5, #-3548] ++ add r7, r7, #1 ++ ldrh r4, [r3, r4] ++ movw r3, #65535 ++ cmp r4, r3 ++ bne .L2892 ++.L2891: ++ mov r1, r6 ++ ldr r0, .L2905+36 ++ bl printk ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2887: ++ mov r2, #0 ++ add r1, sp, #4 ++ mov r0, r4 ++ bl log2phys ++ ldr r0, [sp, #4] ++ cmn r0, #1 ++ beq .L2886 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ lsl r0, r0, #1 ++ ldrh r3, [r5, r0] ++ add r3, r3, #1 ++ strh r3, [r5, r0] @ movhi ++.L2886: ++ add r4, r4, #1 ++ b .L2885 ++.L2890: ++ uxth r1, r4 ++ ldr r3, [r5, #-3540] ++ lsl r7, r1, #1 ++ ldrh r2, [r3, r7] ++ ldrh r3, [r8, r7] ++ cmp r2, r3 ++ beq .L2889 ++ ldr r0, .L2905+40 ++ bl printk ++ ldr r3, [r5, #-3540] ++ movw r2, #65535 ++ ldrh r3, [r3, r7] ++ cmp r3, r2 ++ beq .L2889 ++ ldrh r2, [r8, r7] ++ cmp r2, r3 ++ movhi r6, #1 ++.L2889: ++ add r4, r4, #1 ++ b .L2888 ++.L2906: ++ .align 2 ++.L2905: ++ .word .LANCHOR0 ++ .word check_valid_page_count_table ++ .word .LANCHOR3+191 ++ .word .LC110 ++ .word .LANCHOR0+2332 ++ .word .LANCHOR2 ++ .word .LANCHOR2-3520 ++ .word .LC144 ++ .word -1431655765 ++ .word .LC145 ++ .word .LC143 ++ .fnend ++ .size FtlCheckVpc, .-FtlCheckVpc ++ .align 2 ++ .global Ftlscanalldata ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftlscanalldata, %function ++Ftlscanalldata: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, #0 ++ ldr r4, .L2916 ++ .pad #32 ++ sub sp, sp, #32 ++ mov r1, #0 ++ ldr r7, .L2916+4 ++ add r8, r4, #1760 ++ ldr r0, .L2916+8 ++ bl printk ++.L2908: ++ ldr r3, [r7, #2452] ++ cmp r5, r3 ++ bcc .L2914 ++ add sp, sp, #32 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L2914: ++ mov r2, #0 ++ add r1, sp, #28 ++ mov r0, r5 ++ bl log2phys ++ ubfx r3, r5, #0, #11 ++ cmp r3, #0 ++ bne .L2909 ++ ldr r2, [sp, #28] ++ mov r1, r5 ++ ldr r0, .L2916+12 ++ bl printk ++.L2909: ++ ldr r3, [sp, #28] ++ cmn r3, #1 ++ beq .L2911 ++ str r3, [r4, #1764] ++ mov r2, #0 ++ ldr r3, [r4, #-524] ++ mov r1, #1 ++ ldr r6, [r4, #-500] ++ mov r0, r8 ++ str r5, [r4, #1776] ++ str r3, [r4, #1768] ++ str r6, [r4, #1772] ++ str r2, [r4, #1760] ++ bl FlashReadPages ++ ldr r3, [r4, #1760] ++ cmn r3, #1 ++ cmpne r3, #256 ++ beq .L2912 ++ ldr r3, [r6, #8] ++ cmp r5, r3 ++ beq .L2911 ++.L2912: ++ ldr r2, [r4, #1768] ++ ldr r3, [r4, #1772] ++ ldr r0, .L2916+16 ++ ldr r1, [r2, #4] ++ str r1, [sp, #16] ++ mov r1, r5 ++ ldr r2, [r2] ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r2, [r4, #1764] ++ ldr r3, [r3] ++ bl printk ++.L2911: ++ add r5, r5, #1 ++ b .L2908 ++.L2917: ++ .align 2 ++.L2916: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC146 ++ .word .LC147 ++ .word .LC148 ++ .fnend ++ .size Ftlscanalldata, .-Ftlscanalldata ++ .align 2 ++ .global FtlReUsePrevPpa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlReUsePrevPpa, %function ++FtlReUsePrevPpa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ .pad #12 ++ mov r5, r0 ++ ldr r6, .L2928 ++ ubfx r0, r1, #10, #16 ++ str r1, [sp, #4] ++ bl P2V_block_in_plane ++ ldr r2, [r6, #-3540] ++ lsl r7, r0, #1 ++ ldrh r3, [r2, r7] ++ cmp r3, #0 ++ bne .L2919 ++ ldr r4, [r6, #-3528] ++ cmp r4, #0 ++ beq .L2920 ++ ldr r2, [r6, #-3548] ++ sub r8, r6, #3520 ++ ldr ip, .L2928+4 ++ mov lr, #6 ++ ldrh r1, [r8, #-4] ++ movw r9, #65535 ++ sub r4, r4, r2 ++ asr r4, r4, #1 ++ mul r4, ip, r4 ++ uxth r4, r4 ++.L2921: ++ uxth ip, r3 ++ cmp r1, ip ++ bls .L2920 ++ cmp r4, r0 ++ bne .L2922 ++ mov r1, r4 ++ sub r0, r8, #8 ++ bl List_remove_node ++ ldrh r3, [r8, #-4] ++ mov r0, r4 ++ sub r3, r3, #1 ++ strh r3, [r8, #-4] @ movhi ++ bl INSERT_DATA_LIST ++ ldr r2, [r6, #-3540] ++ ldrh r3, [r2, r7] ++.L2919: ++ add r3, r3, #1 ++ strh r3, [r2, r7] @ movhi ++ b .L2920 ++.L2922: ++ mul r4, lr, r4 ++ add r3, r3, #1 ++ ldrh r4, [r2, r4] ++ cmp r4, r9 ++ bne .L2921 ++.L2920: ++ mov r2, #1 ++ add r1, sp, #4 ++ mov r0, r5 ++ bl log2phys ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L2929: ++ .align 2 ++.L2928: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size FtlReUsePrevPpa, .-FtlReUsePrevPpa ++ .align 2 ++ .global FtlRecoverySuperblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlRecoverySuperblock, %function ++FtlRecoverySuperblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldrh r2, [r0] ++ movw r1, #65535 ++ cmp r2, r1 ++ beq .L3075 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r2, #2390 ++ ldr r6, .L3087 ++ .pad #52 ++ sub sp, sp, #52 ++ mov r10, r0 ++ ldrh r3, [r0, #2] ++ ldrh r2, [r6, r2] ++ str r3, [sp, #8] ++ cmp r2, r3 ++ mov r2, #0 ++ strheq r2, [r0, #4] @ movhi ++ strbeq r2, [r0, #6] ++ ldrhne r0, [r0, #16] ++ bne .L2934 ++.L3073: ++ mov r0, #0 ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2935: ++ uxth r0, r2 ++ add r0, r10, r0, lsl #1 ++ ldrh r0, [r0, #16] ++.L2934: ++ cmp r0, r1 ++ add r2, r2, #1 ++ beq .L2935 ++ ldrb r1, [r10, #8] @ zero_extendqisi2 ++ ldrb r3, [r10, #6] @ zero_extendqisi2 ++ cmp r1, #1 ++ str r3, [sp, #12] ++ bne .L2936 ++ bl FtlGetLastWrittenPage ++ cmn r0, #1 ++ mov r4, r0 ++ beq .L2937 ++ ldrb r3, [r6, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ addeq r3, r6, r0, lsl #1 ++ ldrheq r5, [r3, #156] ++ beq .L2938 ++.L3008: ++ mov r5, r4 ++.L2938: ++ movw r3, #2324 ++ mov r2, #0 ++ ldrh r3, [r6, r3] ++ movw r8, #65535 ++ mov r9, #36 ++ str r3, [sp] ++ ldr r3, .L3087+4 ++ ldr r0, [r3, #-536] ++ ldr lr, [r3, #-2692] ++ movw r3, #2402 ++ ldrh r7, [r6, r3] ++ add r3, r10, #16 ++ mov ip, r3 ++ mov r6, r2 ++ str r3, [sp, #20] ++.L2939: ++ ldr r1, [sp] ++ uxth r3, r2 ++ cmp r1, r3 ++ bhi .L2941 ++ ldrb r3, [r10, #8] @ zero_extendqisi2 ++ cmp r3, #1 ++ movne r3, #0 ++ bne .L3078 ++ ldr r3, .L3087 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ adds r3, r3, #0 ++ movne r3, #1 ++.L3078: ++ ldr r7, .L3087+4 ++ mov r1, r6 ++ str r3, [sp, #24] ++ mov r8, #0 ++ ldr r2, [sp, #24] ++ movw r9, #65535 ++ bl FlashReadPages ++ ldr r3, [r7, #-3328] ++ mov fp, r7 ++ str r3, [sp, #16] ++.L2943: ++ uxth r3, r8 ++ cmp r6, r3 ++ bhi .L2948 ++ bne .L2946 ++ add r4, r4, #1 ++ uxth r3, r4 ++ str r3, [sp] ++ ldr r3, [r7, #-536] ++ ldr r0, [r3, #4] ++.L3079: ++ ubfx r0, r0, #10, #16 ++ bl P2V_plane ++ ldrb r2, [r10, #8] @ zero_extendqisi2 ++ str r0, [sp, #4] ++ ldr r3, .L3087 ++ cmp r2, #1 ++ bne .L2950 ++ ldrb r1, [r3, #152] @ zero_extendqisi2 ++ cmp r1, #0 ++ ldreq r1, [sp] ++ addeq r4, r3, r1, lsl #1 ++ ldrheq r1, [r4, #156] ++ streq r1, [sp] ++.L2950: ++ movw r1, #2390 ++ ldrh r3, [r3, r1] ++ ldr r1, [sp] ++ cmp r3, r1 ++ ldmib sp, {r0, r1} ++ ldrheq r3, [sp] ++ strheq r3, [r10, #2] @ movhi ++ moveq r3, #0 ++ strbeq r3, [r10, #6] ++ strheq r3, [r10, #4] @ movhi ++ ldrh r3, [sp, #12] ++ str r3, [sp, #28] ++ ldr ip, [sp, #28] ++ ldr r3, [sp] ++ cmp r3, r1 ++ cmpeq r0, ip ++ moveq r2, r0 ++ moveq r1, r3 ++ beq .L3085 ++ ldr r3, [sp, #16] ++ sub fp, r3, #1 ++ movw r3, #65535 ++ subs r9, r9, r3 ++ movne r9, #1 ++ cmp r2, #0 ++ orreq r9, r9, #1 ++ cmp r9, #0 ++ beq .L2954 ++ ldr r3, [r7, #-368] ++ uxth r8, r5 ++ uxth r5, r5 ++ cmn r3, #1 ++ streq fp, [r7, #-368] ++ ldr r3, [r7, #-368] ++ mvn r7, #0 ++ mov r6, r7 ++ str r3, [sp, #12] ++ ldr r3, [sp, #8] ++ add r3, r3, #7 ++ cmp r5, r3 ++ subgt r4, r8, #7 ++ ldrle r4, [sp, #8] ++ uxthgt r4, r4 ++.L2957: ++ cmp r4, r8 ++ ldr r3, .L3087+4 ++ bhi .L2970 ++ ldr r2, .L3087+8 ++ mov ip, #36 ++ ldr r0, [r3, #-536] ++ mov r3, #0 ++ ldr r1, [sp, #20] ++ mov r5, r3 ++ ldrh r9, [r2] ++ b .L2971 ++.L2936: ++ mov r1, #0 ++ bl FtlGetLastWrittenPage ++ cmn r0, #1 ++ mov r4, r0 ++ bne .L3008 ++.L2937: ++ mov r3, #0 ++ strh r3, [r10, #2] @ movhi ++.L3084: ++ strb r3, [r10, #6] ++ b .L3073 ++.L2941: ++ ldrh r3, [ip], #2 ++ cmp r3, r8 ++ beq .L2940 ++ mla r1, r9, r6, r0 ++ orr r3, r5, r3, lsl #10 ++ str r3, [r1, #4] ++ mov r3, #0 ++ str r3, [r1, #8] ++ mul r3, r7, r6 ++ add r6, r6, #1 ++ uxth r6, r6 ++ add fp, r3, #3 ++ cmp r3, #0 ++ movlt r3, fp ++ bic r3, r3, #3 ++ add r3, lr, r3 ++ str r3, [r1, #12] ++.L2940: ++ add r2, r2, #1 ++ b .L2939 ++.L2948: ++ mov r3, #36 ++ ldr r1, [fp, #-536] ++ mul r3, r3, r8 ++ add r2, r1, r3 ++ ldr r3, [r1, r3] ++ cmp r3, #0 ++ bne .L2944 ++ ldr r2, [r2, #12] ++ ldr r3, [r2, #4] ++ cmn r3, #1 ++ beq .L2945 ++ ldr r1, [fp, #-3328] ++ mov r0, r3 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ addne r3, r3, #1 ++ strne r3, [fp, #-3328] ++.L2945: ++ ldr r3, [r2] ++ cmn r3, #1 ++ bne .L2947 ++.L2946: ++ uxth r3, r4 ++ uxth r8, r8 ++ str r3, [sp] ++ mov r2, #36 ++ ldr r3, [r7, #-536] ++ mla r8, r2, r8, r3 ++ ldr r0, [r8, #4] ++ b .L3079 ++.L2944: ++ ldr r1, [r2, #4] ++ uxth r9, r5 ++ ldr r0, .L3087+12 ++ bl printk ++ ldrh r3, [r10] ++ ldr r2, .L3087+16 ++ strh r3, [r2] @ movhi ++.L2947: ++ add r8, r8, #1 ++ b .L2943 ++.L2959: ++ ldrh r2, [r1], #2 ++ movw lr, #65535 ++ add r3, r3, #1 ++ cmp r2, lr ++ mlane lr, ip, r5, r0 ++ addne r5, r5, #1 ++ orrne r2, r4, r2, lsl #10 ++ uxthne r5, r5 ++ strne r2, [lr, #4] ++.L2971: ++ uxth r2, r3 ++ cmp r2, r9 ++ bcc .L2959 ++ mov r1, r5 ++ ldr r2, [sp, #24] ++ bl FlashReadPages ++ ldr r3, .L3087 ++ mov r1, #36 ++ ldr r2, .L3087+4 ++ ldr r0, .L3087+20 ++ ldrb ip, [r3, #152] @ zero_extendqisi2 ++ ldr r3, [r2, #-536] ++ add lr, r0, r4, lsl #1 ++ mla r5, r1, r5, r3 ++ movw r1, #65535 ++.L2960: ++ cmp r5, r3 ++ addeq r4, r4, #1 ++ uxtheq r4, r4 ++ beq .L2957 ++.L2969: ++ ldr r0, [r3] ++ cmp r0, #0 ++ bne .L2961 ++ ldr r0, [r3, #12] ++ ldrh r9, [r0] ++ cmp r9, r1 ++ beq .L2962 ++ ldr r0, [r0, #4] ++ cmn r0, #1 ++ beq .L2962 ++ cmn r7, #1 ++ ldr r6, [r2, #-368] ++ str r0, [r2, #-368] ++ bne .L2962 ++ ldrh r0, [lr] ++ cmp r0, r1 ++ bne .L2963 ++ cmp ip, #0 ++ beq .L2962 ++.L2963: ++ cmp fp, r6 ++ movne r7, r6 ++.L2962: ++ add r3, r3, #36 ++ b .L2960 ++.L2961: ++ ldrh r1, [r10] ++ movw r2, #1846 ++ ldr r3, .L3087+4 ++ strh r1, [r3, r2] @ movhi ++ ldrb r2, [r10, #8] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L2954 ++ ldr r2, .L3087+20 ++ lsl r4, r4, #1 ++ ldrh r1, [r2, r4] ++ movw r2, #65535 ++ cmp r1, r2 ++ bne .L2965 ++ cmn r7, #1 ++ strne r7, [r3, #-368] ++ bne .L2954 ++ ldr r2, [sp, #12] ++ cmp fp, r2 ++ beq .L2967 ++.L3080: ++ str r2, [r3, #-368] ++ b .L2954 ++.L2967: ++ ldr r2, [r3, #-368] ++.L3086: ++ sub r2, r2, #1 ++ b .L3080 ++.L2965: ++ cmp r6, fp ++ beq .L2968 ++ cmn r6, #1 ++ strne r6, [r3, #-368] ++.L2954: ++ ldr r9, [sp, #8] ++ mov r2, #1 ++ ldr r4, .L3087+4 ++ movw r3, #1848 ++ strh r2, [r4, r3] @ movhi ++.L2972: ++ ldr r3, .L3087+8 ++ movw r6, #65535 ++ ldr r0, [r4, #-536] ++ mov r7, #36 ++ ldr r1, [sp, #20] ++ mov r2, #0 ++ ldrh lr, [r3] ++ ldr r3, .L3087 ++ str r2, [sp, #12] ++ ldrb r5, [r3, #152] @ zero_extendqisi2 ++.L2973: ++ uxth r3, r2 ++ cmp lr, r3 ++ bhi .L2976 ++ ldr r2, [sp, #24] ++ ldr r1, [sp, #12] ++ bl FlashReadPages ++ mov r3, #0 ++.L3083: ++ str r3, [sp, #16] ++ ldr r2, [sp, #12] ++ ldrh r3, [sp, #16] ++ cmp r2, r3 ++ bhi .L3002 ++ ldrb r3, [r10, #8] @ zero_extendqisi2 ++ add r9, r9, #1 ++ uxth r9, r9 ++ cmp r3, #1 ++ bne .L3003 ++ ldr r3, .L3087 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3003 ++ ldr r3, .L3087+24 ++ ldr r2, [sp] ++ ldrh r3, [r3] ++ cmp r3, r9 ++ cmpeq r2, r9 ++ beq .L2979 ++.L3003: ++ ldr r3, .L3087+28 ++ ldrh r3, [r3] ++ cmp r3, r9 ++ bne .L2972 ++ ldr r1, .L3087 ++ movw r2, #2324 ++ movw r0, #65535 ++ mov r3, #0 ++ strh r9, [r10, #2] @ movhi ++ ldrh r2, [r1, r2] ++ strh r3, [r10, #4] @ movhi ++.L3004: ++ uxth r1, r3 ++ cmp r1, r2 ++ bcs .L3073 ++ ldr r1, [sp, #20] ++ ldrh ip, [r1], #2 ++ cmp ip, r0 ++ str r1, [sp, #20] ++ add r1, r3, #1 ++ bne .L3084 ++ mov r3, r1 ++ b .L3004 ++.L2968: ++ ldr r2, [r3, #-368] ++ cmp fp, r2 ++ bne .L3086 ++ b .L2954 ++.L2970: ++ mvn r2, #0 ++ b .L3080 ++.L2976: ++ ldrh r3, [r1], #2 ++ cmp r3, r6 ++ beq .L2974 ++ ldr ip, [sp, #12] ++ orr r3, r9, r3, lsl #10 ++ mla ip, r7, ip, r0 ++ str r3, [ip, #4] ++ ldrb r8, [r10, #8] @ zero_extendqisi2 ++ cmp r8, #1 ++ bne .L2975 ++ cmp r5, #0 ++ orrne r3, r3, #-2147483648 ++ strne r3, [ip, #4] ++.L2975: ++ ldr r3, [sp, #12] ++ add r3, r3, #1 ++ uxth r3, r3 ++ str r3, [sp, #12] ++.L2974: ++ add r2, r2, #1 ++ b .L2973 ++.L3002: ++ ldr r3, [sp, #16] ++ mov r6, #36 ++ ldr r8, [r4, #-536] ++ mul r6, r6, r3 ++ add r7, r8, r6 ++ ldr r5, [r7, #4] ++ ubfx r0, r5, #10, #16 ++ str r5, [sp, #44] ++ bl P2V_plane ++ ldr r3, [sp, #8] ++ cmp r9, r3 ++ bcc .L2978 ++ ldr r2, [sp, #28] ++ moveq r3, #1 ++ movne r3, #0 ++ cmp r2, r0 ++ movls r3, #0 ++ andhi r3, r3, #1 ++ cmp r3, #0 ++ bne .L2978 ++ ldr r3, [sp] ++ ldr r2, [sp, #4] ++ cmp r9, r3 ++ cmpeq r2, r0 ++ beq .L2979 ++ ldr r3, [r8, r6] ++ cmn r3, #1 ++ beq .L2980 ++ ldr r3, [r7, #12] ++ movw r2, #61589 ++ ldrh r1, [r3] ++ cmp r1, r2 ++ ldrhne r0, [r10] ++ bne .L3081 ++ ldr fp, [r3, #4] ++ cmn fp, #1 ++ beq .L2982 ++ ldr r1, [r4, #-3328] ++ mov r0, fp ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ addne r2, fp, #1 ++ strne r2, [r4, #-3328] ++.L2982: ++ ldr r5, [r3, #8] ++ add r1, sp, #40 ++ ldr r3, [r3, #12] ++ mov r2, #0 ++ mov r0, r5 ++ str r3, [sp, #36] ++ bl log2phys ++ ldr r1, [r4, #-368] ++ cmn r1, #1 ++ beq .L2983 ++ mov r0, fp ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2983 ++ ldr r3, [sp, #36] ++ cmn r3, #1 ++ beq .L2984 ++ ldr r0, [r4, #-536] ++ mov r2, #0 ++ mov r1, #1 ++ add r0, r0, r6 ++ str r3, [r0, #4] ++ ldr r7, [r0, #12] ++ bl FlashReadPages ++ ldr r2, [r4, #-536] ++ ldr r1, [r2, r6] ++ add r3, r2, r6 ++ cmn r1, #1 ++ bne .L2985 ++.L2986: ++ mvn r3, #0 ++ str r3, [sp, #36] ++.L2993: ++ ldr r8, [sp, #36] ++ cmn r8, #1 ++ beq .L2978 ++.L3007: ++ ubfx r0, r8, #10, #16 ++ bl P2V_block_in_plane ++ ldr r2, [r4, #-3540] ++ lsl r3, r0, #1 ++ mov r1, r0 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L2999 ++.L3081: ++ bl decrement_vpc_count ++ b .L2978 ++.L2984: ++ ldr r3, [sp, #44] ++ ldr r2, [sp, #40] ++ cmp r2, r3 ++ bne .L2978 ++ mov r2, #1 ++ add r1, sp, #36 ++ mov r0, r5 ++ bl log2phys ++.L2978: ++ ldr r3, [sp, #16] ++ add r3, r3, #1 ++ b .L3083 ++.L2985: ++ ldr r1, [r7, #8] ++ cmp r5, r1 ++ bne .L2986 ++ ldr r8, [r7, #4] ++ ldr r0, [r4, #-368] ++ mov r1, r8 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2986 ++ ldr r1, [sp, #40] ++ ldr r0, [sp, #44] ++ cmp r1, r0 ++ bne .L2988 ++.L2991: ++ ldr r1, [sp, #36] ++ mov r0, r5 ++ bl FtlReUsePrevPpa ++ b .L2986 ++.L2988: ++ ldr r0, [sp, #36] ++ cmp r1, r0 ++ beq .L2986 ++ cmn r1, #1 ++ streq r1, [r2, r6] ++ beq .L2990 ++ str r1, [r3, #4] ++ mov r2, #0 ++ mov r1, #1 ++ mov r0, r3 ++ ldr r7, [r3, #12] ++ bl FlashReadPages ++.L2990: ++ ldr r3, [r4, #-536] ++ ldr r3, [r3, r6] ++ cmn r3, #1 ++ beq .L2991 ++ ldr r3, [r7, #4] ++ ldr r0, [r4, #-368] ++ mov r1, r3 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2991 ++ mov r1, r3 ++ mov r0, r8 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2986 ++ b .L2991 ++.L2983: ++ ldr r3, [sp, #44] ++ ldr r2, [sp, #40] ++ cmp r2, r3 ++ beq .L2993 ++ ldr r3, [sp, #36] ++ cmn r3, #1 ++ beq .L2995 ++ ldr r2, .L3087 ++ ubfx r3, r3, #10, #21 ++ ldr r2, [r2, #2340] ++ cmp r3, r2 ++ bcs .L2978 ++.L2995: ++ mov r2, #1 ++ add r1, sp, #44 ++ mov r0, r5 ++ bl log2phys ++ ldr r8, [sp, #40] ++ cmn r8, #1 ++ beq .L2993 ++ ldr r3, [sp, #36] ++ cmp r8, r3 ++ beq .L3007 ++ ldr r6, .L3087+32 ++ ubfx r0, r8, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r6] ++ cmp r3, r0 ++ beq .L2998 ++ add r2, r6, #48 ++ ldrh r2, [r2] ++ cmp r2, r0 ++ beq .L2998 ++ add r3, r6, #96 ++ ldrh r3, [r3] ++ cmp r3, r0 ++ bne .L2993 ++.L2998: ++ ldr r0, [r6, #2984] ++ mov r2, #0 ++ mov r1, #1 ++ str r8, [r0, #4] ++ ldr r7, [r0, #12] ++ bl FlashReadPages ++ ldr r3, [r6, #2984] ++ ldr r3, [r3] ++ cmn r3, #1 ++ beq .L2993 ++ ldr r1, [r7, #4] ++ mov r0, fp ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ bne .L2993 ++ mov r2, #1 ++ add r1, sp, #40 ++ mov r0, r5 ++ bl log2phys ++ b .L2993 ++.L2999: ++ ldr r0, .L3087+36 ++ bl printk ++ b .L2978 ++.L2980: ++ ldrh r3, [r10] ++ mov r1, r5 ++ ldr r2, .L3087+16 ++ ldr r0, .L3087+40 ++ strh r3, [r2] @ movhi ++ mov r2, fp ++ bl printk ++ ldr r3, [r4, #1852] ++ cmp r3, #31 ++ ldrls r1, [sp, #44] ++ addls r2, r4, r3, lsl #2 ++ addls r3, r3, #1 ++ strls r3, [r4, #1852] ++ strls r1, [r2, #1856] ++ ldrh r0, [r10] ++ bl decrement_vpc_count ++ ldr r3, [r4, #-368] ++ cmn r3, #1 ++ bne .L3001 ++.L3082: ++ str fp, [r4, #-368] ++ b .L2978 ++.L3001: ++ cmp fp, r3 ++ bcs .L2978 ++ b .L3082 ++.L2979: ++ ldrb r3, [sp, #4] @ zero_extendqisi2 ++ ldm sp, {r1, r2} ++ strb r3, [r10, #6] ++ ldrh r3, [sp] ++ strh r3, [r10, #2] @ movhi ++.L3085: ++ mov r0, r10 ++ bl ftl_sb_update_avl_pages ++ b .L3073 ++.L3075: ++ mov r0, #0 ++ bx lr ++.L3088: ++ .align 2 ++.L3087: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2324 ++ .word .LC149 ++ .word .LANCHOR2+1846 ++ .word .LANCHOR2-2620 ++ .word .LANCHOR0+2392 ++ .word .LANCHOR0+2390 ++ .word .LANCHOR2-3520 ++ .word .LC150 ++ .word .LC151 ++ .fnend ++ .size FtlRecoverySuperblock, .-FtlRecoverySuperblock ++ .align 2 ++ .global FtlVpcCheckAndModify ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVpcCheckAndModify, %function ++FtlVpcCheckAndModify: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ mov r5, #0 ++ ldr r6, .L3104 ++ ldr r1, .L3104+4 ++ ldr r0, .L3104+8 ++ bl printk ++ movw r3, #2334 ++ ldr r4, .L3104+12 ++ ldrh r2, [r6, r3] ++ mov r1, #0 ++ ldr r0, [r4, #-476] ++ lsl r2, r2, #1 ++ bl ftl_memset ++.L3090: ++ ldr r3, [r6, #2452] ++ cmp r5, r3 ++ bcc .L3092 ++ ldr r8, .L3104+16 ++ mov r7, #0 ++ ldr r9, .L3104+20 ++ add r10, r8, #96 ++.L3093: ++ ldrh r3, [r9] ++ uxth r6, r7 ++ cmp r3, r6 ++ bhi .L3096 ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3092: ++ mov r2, #0 ++ add r1, sp, #4 ++ mov r0, r5 ++ bl log2phys ++ ldr r0, [sp, #4] ++ cmn r0, #1 ++ beq .L3091 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r2, [r4, #-476] ++ lsl r0, r0, #1 ++ ldrh r3, [r2, r0] ++ add r3, r3, #1 ++ strh r3, [r2, r0] @ movhi ++.L3091: ++ add r5, r5, #1 ++ b .L3090 ++.L3096: ++ uxth r1, r7 ++ ldr r3, [r4, #-3540] ++ movw r0, #65535 ++ lsl r5, r1, #1 ++ ldrh r2, [r3, r5] ++ ldr r3, [r4, #-476] ++ ldrh r3, [r3, r5] ++ cmp r2, r0 ++ cmpne r2, r3 ++ beq .L3094 ++ ldrh r0, [r8] ++ cmp r0, r6 ++ beq .L3094 ++ ldrh r0, [r10] ++ cmp r0, r6 ++ beq .L3094 ++ ldr r0, .L3104+24 ++ ldrh r0, [r0] ++ cmp r0, r6 ++ beq .L3094 ++ ldr r0, .L3104+28 ++ bl printk ++ ldr r3, [r4, #-3540] ++ ldrh r2, [r3, r5] ++ cmp r2, #0 ++ ldr r2, [r4, #-476] ++ ldrh r2, [r2, r5] ++ strh r2, [r3, r5] @ movhi ++ bne .L3095 ++.L3094: ++ add r7, r7, #1 ++ b .L3093 ++.L3095: ++ mov r0, r6 ++ bl update_vpc_list ++ b .L3094 ++.L3105: ++ .align 2 ++.L3104: ++ .word .LANCHOR0 ++ .word .LANCHOR3+203 ++ .word .LC110 ++ .word .LANCHOR2 ++ .word .LANCHOR2-3520 ++ .word .LANCHOR0+2332 ++ .word .LANCHOR2-3472 ++ .word .LC152 ++ .fnend ++ .size FtlVpcCheckAndModify, .-FtlVpcCheckAndModify ++ .align 2 ++ .global FtlGcScanTempBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcScanTempBlk, %function ++FtlGcScanTempBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 64 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L3154 ++ movw r3, #3444 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #68 ++ sub sp, sp, #68 ++ mov r4, r0 ++ str r1, [sp, #12] ++ ldrh r6, [r2, r3] ++ movw r3, #65535 ++ cmp r6, r3 ++ beq .L3138 ++ cmp r6, #0 ++ bne .L3107 ++.L3108: ++ bl FtlGcPageVarInit ++ b .L3109 ++.L3138: ++ mov r6, #0 ++.L3107: ++ ldr r2, .L3154+4 ++ movw r3, #2390 ++ ldrh r3, [r2, r3] ++ ldr r2, [sp, #12] ++ cmp r3, r2 ++ beq .L3108 ++.L3109: ++ ldr r5, .L3154+8 ++ mvn r3, #0 ++ str r3, [sp, #8] ++ mov r3, #0 ++ str r3, [sp] ++.L3110: ++ ldrh r1, [r4] ++ movw r3, #65535 ++ mov r2, #0 ++ strb r2, [r4, #8] ++ cmp r1, r3 ++ beq .L3111 ++.L3135: ++ ldr r3, .L3154+12 ++ add ip, r4, #16 ++ ldr r0, [r5, #-536] ++ movw r9, #65535 ++ ldr lr, [r5, #-2692] ++ mov r10, #36 ++ ldrh r3, [r3] ++ str r3, [sp, #4] ++ ldr r3, [r5, #-2696] ++ str r3, [sp, #16] ++ ldr r3, .L3154+16 ++ ldrh r2, [r3] ++ ldrh r8, [r3, #2] ++ str r2, [sp, #20] ++ mov r2, #0 ++ mov r7, r2 ++.L3112: ++ ldr r1, [sp, #4] ++ uxth r3, r2 ++ cmp r1, r3 ++ bhi .L3114 ++ ldr r10, .L3154+4 ++ mov fp, #0 ++ mov r2, #0 ++ mov r1, r7 ++ bl FlashReadPages ++.L3115: ++ uxth r3, fp ++ cmp r7, r3 ++ bhi .L3133 ++ ldr r3, [sp] ++ add r6, r6, #1 ++ uxth r6, r6 ++ add r3, r3, #1 ++ str r3, [sp] ++ ldr r2, [sp] ++ ldr r3, [sp, #12] ++ cmp r3, r2 ++ ldr r2, .L3154+20 ++ bls .L3134 ++.L3136: ++ ldrh r3, [r2] ++ cmp r3, r6 ++ bhi .L3135 ++ mov r2, #0 ++ b .L3111 ++.L3114: ++ ldrh r3, [ip], #2 ++ cmp r3, r9 ++ beq .L3113 ++ mla r1, r10, r7, r0 ++ orr r3, r6, r3, lsl #10 ++ str r3, [r1, #4] ++ ldr r3, [sp, #20] ++ mul r3, r3, r7 ++ add fp, r3, #3 ++ cmp r3, #0 ++ movlt r3, fp ++ ldr fp, [sp, #16] ++ bic r3, r3, #3 ++ add r3, fp, r3 ++ str r3, [r1, #8] ++ mul r3, r8, r7 ++ add r7, r7, #1 ++ uxth r7, r7 ++ add fp, r3, #3 ++ cmp r3, #0 ++ movlt r3, fp ++ bic r3, r3, #3 ++ add r3, lr, r3 ++ str r3, [r1, #12] ++.L3113: ++ add r2, r2, #1 ++ b .L3112 ++.L3133: ++ mov r9, #36 ++ ldr r8, [r5, #-536] ++ mul r9, r9, fp ++ add r3, r8, r9 ++ ldr r2, [r3, #4] ++ str r3, [sp, #16] ++ ubfx r0, r2, #10, #16 ++ str r2, [sp, #4] ++ bl P2V_plane ++ ldr r8, [r8, r9] ++ mov r2, r0 ++ ldr r3, [sp, #16] ++ cmp r8, #0 ++ ldr r3, [r3, #12] ++ bne .L3116 ++ ldrh r0, [r3] ++ movw r1, #65535 ++ cmp r0, r1 ++ bne .L3117 ++.L3120: ++ ldrb r1, [r10, #152] @ zero_extendqisi2 ++ cmp r1, #0 ++ beq .L3150 ++ mov r3, #1 ++ str r3, [r5, #-372] ++.L3111: ++ ldr r1, .L3154 ++ mvn r0, #0 ++ movw r3, #3444 ++ strh r6, [r4, #2] @ movhi ++ strb r2, [r4, #6] ++ strh r0, [r1, r3] @ movhi ++ mov r1, r6 ++ mov r0, r4 ++ bl ftl_sb_update_avl_pages ++ b .L3106 ++.L3117: ++ ldr r0, [r3, #8] ++ ldr r1, [r10, #2452] ++ cmp r0, r1 ++ bhi .L3120 ++ ldrb r2, [r10, #36] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L3123 ++.L3124: ++ ldr r2, [r3, #8] ++ add fp, fp, #1 ++ ldr r1, [sp, #4] ++ ldr r0, [r3, #12] ++ bl FtlGcUpdatePage ++ b .L3115 ++.L3150: ++ ldrh r3, [r4] ++ ldr r2, [r5, #-3540] ++ lsl r3, r3, #1 ++ strh r1, [r2, r3] @ movhi ++ ldrh r0, [r4] ++ bl INSERT_FREE_LIST ++ ldr r2, .L3154+24 ++ mvn r3, #0 ++ strh r3, [r4] @ movhi ++ strh r3, [r2] @ movhi ++.L3153: ++ bl FtlGcPageVarInit ++ mov r6, #0 ++ b .L3110 ++.L3123: ++ mov r2, r8 ++ add r1, sp, #24 ++ str r3, [sp, #16] ++ bl log2phys ++ ldr r3, [sp, #16] ++ ldr r1, [sp, #24] ++ ldr r2, [r3, #12] ++ cmn r1, #1 ++ sub r0, r2, r1 ++ clz r0, r0 ++ lsr r0, r0, #5 ++ moveq r0, #0 ++ cmp r0, #0 ++ beq .L3124 ++ str r2, [sp, #32] ++ mov r1, #1 ++ ldr r2, [r5, #-504] ++ add r0, sp, #28 ++ str r2, [sp, #36] ++ ldr r2, [r5, #-496] ++ str r2, [sp, #40] ++ mov r2, r8 ++ bl FlashReadPages ++ ldr r2, .L3154+28 ++ ldr r1, [r5, #-536] ++ ldr r3, [sp, #16] ++ ldrh r2, [r2] ++ add r9, r1, r9 ++ ldr r1, [sp, #36] ++ lsl r2, r2, #7 ++.L3125: ++ cmp r8, r2 ++ beq .L3124 ++ ldr r0, [r9, #8] ++ ldr ip, [r0, r8, lsl #2] ++ ldr r0, [r1, r8, lsl #2] ++ cmp ip, r0 ++ beq .L3126 ++ ldr r2, [sp, #32] ++ ldrh r1, [r4] ++ ldr r0, .L3154+32 ++ bl printk ++ ldrh r3, [r4] ++ mov r1, #0 ++ ldr r2, [r5, #-3540] ++ lsl r3, r3, #1 ++ strh r1, [r2, r3] @ movhi ++ ldrh r0, [r4] ++ bl INSERT_FREE_LIST ++ ldr r2, .L3154+36 ++ mvn r3, #0 ++ strh r3, [r4] @ movhi ++ strh r3, [r2, #-4] @ movhi ++ b .L3153 ++.L3126: ++ add r8, r8, #1 ++ b .L3125 ++.L3116: ++ ldr r2, [sp, #4] ++ ldrh r1, [r4] ++ ldr r0, .L3154+40 ++ bl printk ++ ldr r3, [r10, #2248] ++ cmp r3, #0 ++ ldrh r3, [r4] ++ bne .L3129 ++ ldrb r2, [r10, #152] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3130 ++.L3129: ++ ldr r1, [r5, #-3604] ++ lsl r2, r3, #1 ++ ldrh r2, [r1, r2] ++ cmp r2, #159 ++ bls .L3131 ++.L3130: ++ ldr r2, [r5, #-536] ++ ldr r2, [r2, r9] ++ cmn r2, #1 ++ bne .L3132 ++.L3131: ++ ldr r2, [r5, #-536] ++ add r9, r2, r9 ++ ldr r2, [r9, #4] ++ str r2, [sp, #8] ++.L3132: ++ ldr r2, [r5, #-3540] ++ lsl r3, r3, #1 ++ mov r1, #0 ++ strh r1, [r2, r3] @ movhi ++ ldrh r0, [r4] ++ bl INSERT_FREE_LIST ++ mvn r3, #0 ++ strh r3, [r4] @ movhi ++ b .L3153 ++.L3134: ++ ldr r1, .L3154+44 ++ movw r0, #65535 ++ ldrh r3, [r1] ++ cmp r3, r0 ++ beq .L3136 ++ ldr r0, [sp] ++ add r3, r3, r0 ++ strh r3, [r1] @ movhi ++ ldrh r3, [r2] ++ cmp r3, r6 ++ bls .L3136 ++.L3106: ++ ldr r0, [sp, #8] ++ add sp, sp, #68 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3155: ++ .align 2 ++.L3154: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2324 ++ .word .LANCHOR0+2400 ++ .word .LANCHOR0+2390 ++ .word .LANCHOR2-3284 ++ .word .LANCHOR0+2396 ++ .word .LC153 ++ .word .LANCHOR2-3280 ++ .word .LC154 ++ .word .LANCHOR1+3444 ++ .fnend ++ .size FtlGcScanTempBlk, .-FtlGcScanTempBlk ++ .align 2 ++ .global FtlReadRefresh ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlReadRefresh, %function ++FtlReadRefresh: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #40 ++ sub sp, sp, #40 ++ ldr r5, .L3173 ++ ldr r9, [r5, #-3156] ++ mov r6, r5 ++ cmp r9, #0 ++ beq .L3157 ++ ldr r3, .L3173+4 ++ ldr r1, [r5, #-3152] ++ ldr r2, [r3, #2452] ++ mov r4, r3 ++ cmp r1, r2 ++ bcs .L3158 ++ mov r5, #2048 ++.L3163: ++ ldr r0, [r6, #-3152] ++ ldr r3, [r4, #2452] ++ cmp r0, r3 ++ bcc .L3159 ++.L3162: ++ mvn r0, #0 ++.L3156: ++ add sp, sp, #40 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3159: ++ mov r2, #0 ++ mov r1, sp ++ bl log2phys ++ ldr r2, [sp] ++ ldr r3, [r6, #-3152] ++ cmn r2, #1 ++ add r3, r3, #1 ++ str r3, [r6, #-3152] ++ beq .L3161 ++ str r2, [sp, #8] ++ add r0, sp, #40 ++ mov r2, #0 ++ mov r1, #1 ++ str r2, [r0, #-36]! ++ str r3, [sp, #20] ++ str r2, [sp, #12] ++ str r2, [sp, #16] ++ bl FlashReadPages ++ ldr r3, [sp, #4] ++ cmp r3, #256 ++ bne .L3162 ++ ldr r0, [sp] ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ b .L3162 ++.L3161: ++ subs r5, r5, #1 ++ bne .L3163 ++ b .L3162 ++.L3158: ++ ldr r3, [r5, #-3364] ++ mov r0, #0 ++ str r0, [r5, #-3156] ++ str r0, [r5, #-3152] ++ str r3, [r5, #-3160] ++ b .L3156 ++.L3157: ++ ldr r1, [r5, #-3312] ++ movw r4, #10000 ++ ldr r8, [r5, #-3364] ++ sub r10, r5, #3584 ++ ldr r7, [r5, #-3160] ++ cmp r1, r4 ++ add r3, r8, #1048576 ++ movhi r4, #31 ++ movls r4, #63 ++ cmp r7, r3 ++ bhi .L3167 ++ ldr r3, .L3173+4 ++ lsr r1, r1, #10 ++ mov r0, #1000 ++ add r1, r1, #1 ++ ldr r3, [r3, #2452] ++ mul r0, r0, r3 ++ bl __aeabi_uidiv ++ add r0, r0, r7 ++ cmp r8, r0 ++ bhi .L3167 ++ ldrh r3, [r10, #16] ++ ands r0, r4, r3 ++ movne r0, r9 ++ bne .L3156 ++ ldr r2, [r5, #-3136] ++ cmp r3, r2 ++ beq .L3156 ++.L3167: ++ ldrh r3, [r10, #16] ++ mov r0, #0 ++ str r0, [r6, #-3152] ++ str r8, [r6, #-3160] ++ str r3, [r6, #-3136] ++ mov r3, #1 ++ str r3, [r6, #-3156] ++ b .L3156 ++.L3174: ++ .align 2 ++.L3173: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlReadRefresh, .-FtlReadRefresh ++ .align 2 ++ .global FtlGcFreeTempBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcFreeTempBlock, %function ++FtlGcFreeTempBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #2390 ++ ldr r4, .L3213 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r6, .L3213+4 ++ ldr ip, [r4, #-3612] ++ ldrh r1, [r6, r3] ++ cmp ip, #0 ++ beq .L3176 ++.L3212: ++ mov r0, #0 ++.L3175: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3176: ++ sub r5, r4, #3424 ++ movw lr, #65535 ++ ldrh r7, [r5] ++ cmp r7, lr ++ bne .L3178 ++.L3187: ++ ldrh r2, [r5] ++ movw r3, #65535 ++ mov r7, #0 ++ str r7, [r4, #-372] ++ cmp r2, r3 ++ beq .L3212 ++ bl FtlCacheWriteBack ++ movw r0, #2390 ++ ldrb r2, [r4, #-3417] @ zero_extendqisi2 ++ ldrh r0, [r6, r0] ++ mov fp, #12 ++ ldrh r3, [r5] ++ ldr r1, [r4, #-3540] ++ ldr r8, .L3213+8 ++ smulbb r2, r2, r0 ++ lsl r3, r3, #1 ++ strh r2, [r1, r3] @ movhi ++ ldr r2, [r4, #-3344] ++ ldrh r3, [r8, #-12] ++ add r3, r3, r2 ++ str r3, [r4, #-3344] ++.L3188: ++ ldrh r2, [r8, #-12] ++ uxth r3, r7 ++ cmp r2, r3 ++ bhi .L3192 ++ movw r0, #65535 ++ bl decrement_vpc_count ++ ldrb r3, [r6, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3193 ++ ldrh r1, [r5] ++ ldr r0, .L3213+12 ++ bl printk ++.L3193: ++ ldrh r0, [r5] ++ ldr r2, [r4, #-3540] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L3194 ++ bl INSERT_DATA_LIST ++.L3195: ++ ldr r7, .L3213+16 ++ mvn r9, #0 ++ strh r9, [r5] @ movhi ++ mov r5, #0 ++ strh r5, [r8, #-12] @ movhi ++ strh r5, [r7, #-4] @ movhi ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ sub r3, r7, #608 ++ sub r2, r7, #848 ++ strh r9, [r3, #-4] @ movhi ++ ldr r3, [r6, #2248] ++ ldrh r2, [r2, #-4] ++ cmp r3, r5 ++ sub r3, r7, #624 ++ ldrh r3, [r3, #-8] ++ beq .L3196 ++ ldr r1, [r4, #-3308] ++ cmp r1, #39 ++ bhi .L3196 ++ cmp r2, r3 ++ lslcc r3, r3, #1 ++ strhcc r3, [r7, #-48] @ movhi ++ b .L3212 ++.L3178: ++ cmp r0, #0 ++ beq .L3181 ++ ldr r2, .L3213+20 ++ movw r3, #3444 ++ ldrh r0, [r2, r3] ++ cmp r0, lr ++ beq .L3182 ++.L3183: ++ mov r1, #2 ++.L3181: ++ ldr r0, .L3213+24 ++ bl FtlGcScanTempBlk ++ cmn r0, #1 ++ str r0, [sp, #12] ++ beq .L3184 ++ ldr r2, [r4, #-3604] ++ lsl r7, r7, #1 ++ ldrh r3, [r2, r7] ++ cmp r3, #4 ++ bls .L3185 ++ sub r3, r3, #5 ++ mov r0, #1 ++ strh r3, [r2, r7] @ movhi ++ bl FtlEctTblFlush ++.L3185: ++ ldr r3, [r4, #-372] ++ cmp r3, #0 ++ bne .L3186 ++ ldr r3, [r4, #-3140] ++ ldr r0, [sp, #12] ++ add r3, r3, #1 ++ ubfx r0, r0, #10, #16 ++ str r3, [r4, #-3140] ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++.L3186: ++ mov r3, #0 ++ str r3, [r4, #-372] ++.L3198: ++ mov r0, #1 ++ b .L3175 ++.L3182: ++ strh ip, [r2, r3] @ movhi ++ sub r3, r4, #3520 ++ ldrh r3, [r3, #-4] ++ cmp r3, #17 ++ bhi .L3183 ++ b .L3181 ++.L3184: ++ ldr r2, .L3213+20 ++ movw r3, #3444 ++ ldrh r2, [r2, r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3198 ++ b .L3187 ++.L3192: ++ uxth r10, r7 ++ ldr r3, [r4, #-2672] ++ ldr r2, [r6, #2452] ++ mul r10, fp, r10 ++ add r9, r3, r10 ++ ldr r0, [r9, #8] ++ cmp r0, r2 ++ bcc .L3189 ++.L3210: ++ ldrh r0, [r5] ++ b .L3211 ++.L3189: ++ mov r2, #0 ++ add r1, sp, #12 ++ str r3, [sp, #4] ++ bl log2phys ++ ldr r3, [sp, #4] ++ ldr r2, [sp, #12] ++ ldr r0, [r3, r10] ++ cmp r0, r2 ++ bne .L3191 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ mov r2, #1 ++ mov r10, r0 ++ add r1, r9, #4 ++ ldr r0, [r9, #8] ++ bl log2phys ++ mov r0, r10 ++.L3211: ++ bl decrement_vpc_count ++ b .L3190 ++.L3191: ++ ldr r3, [r9, #4] ++ cmp r2, r3 ++ bne .L3210 ++.L3190: ++ add r7, r7, #1 ++ b .L3188 ++.L3194: ++ bl INSERT_FREE_LIST ++ b .L3195 ++.L3196: ++ add r1, r3, r3, lsl #1 ++ cmp r2, r1, asr #2 ++ ble .L3212 ++ ldrb r0, [r6, #152] @ zero_extendqisi2 ++ ldr r2, .L3213+28 ++ cmp r0, #0 ++ moveq r3, #20 ++ strheq r3, [r2] @ movhi ++ beq .L3175 ++ sub r3, r3, #2 ++ strh r3, [r2] @ movhi ++ b .L3212 ++.L3214: ++ .align 2 ++.L3213: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2-2656 ++ .word .LC155 ++ .word .LANCHOR2-2672 ++ .word .LANCHOR1 ++ .word .LANCHOR2-3424 ++ .word .LANCHOR2-2720 ++ .fnend ++ .size FtlGcFreeTempBlock, .-FtlGcFreeTempBlock ++ .align 2 ++ .global FtlGcPageRecovery ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcPageRecovery, %function ++FtlGcPageRecovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ movw r5, #2390 ++ ldr r4, .L3218 ++ ldr r6, .L3218+4 ++ sub r7, r4, #3424 ++ mov r0, r7 ++ ldrh r1, [r6, r5] ++ bl FtlGcScanTempBlk ++ ldrh r2, [r7, #2] ++ ldrh r3, [r6, r5] ++ cmp r2, r3 ++ popcc {r4, r5, r6, r7, r8, pc} ++ sub r0, r4, #432 ++ bl FtlMapBlkWriteDumpData ++ mov r0, #0 ++ bl FtlGcFreeTempBlock ++ mov r3, #0 ++ str r3, [r4, #-372] ++ pop {r4, r5, r6, r7, r8, pc} ++.L3219: ++ .align 2 ++.L3218: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGcPageRecovery, .-FtlGcPageRecovery ++ .align 2 ++ .global FtlPowerLostRecovery ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlPowerLostRecovery, %function ++FtlPowerLostRecovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, #0 ++ ldr r4, .L3222 ++ sub r6, r4, #3520 ++ str r5, [r4, #1852] ++ mov r0, r6 ++ sub r4, r4, #3472 ++ bl FtlRecoverySuperblock ++ mov r0, r6 ++ bl FtlSlcSuperblockCheck ++ mov r0, r4 ++ bl FtlRecoverySuperblock ++ mov r0, r4 ++ bl FtlSlcSuperblockCheck ++ bl FtlGcPageRecovery ++ movw r0, #65535 ++ bl decrement_vpc_count ++ mov r0, r5 ++ pop {r4, r5, r6, pc} ++.L3223: ++ .align 2 ++.L3222: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlPowerLostRecovery, .-FtlPowerLostRecovery ++ .align 2 ++ .global FtlSysBlkInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSysBlkInit, %function ++FtlSysBlkInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r2, #0 ++ ldr r5, .L3242 ++ movw r3, #1848 ++ ldr r6, .L3242+4 ++ strh r2, [r5, r3] @ movhi ++ mvn r2, #0 ++ movw r3, #1846 ++ strh r2, [r5, r3] @ movhi ++ add r3, r6, #2320 ++ add r3, r3, #8 ++ ldrh r0, [r3] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlScanSysBlk ++ sub r3, r5, #3296 ++ ldrh r2, [r3, #-4] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3225 ++.L3227: ++ mvn r7, #0 ++.L3224: ++ mov r0, r7 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3225: ++ bl FtlLoadSysInfo ++ subs r7, r0, #0 ++ bne .L3227 ++ bl FtlLoadMapInfo ++ bl FtlLoadVonderInfo ++ bl Ftl_load_ext_data ++ bl FtlLoadEctTbl ++ bl FtlFreeSysBLkSort ++ bl SupperBlkListInit ++ bl FtlPowerLostRecovery ++ mov r0, #1 ++ bl FtlUpdateVaildLpn ++ ldr r2, [r5, #-3376] ++ movw r3, #2430 ++ ldrh r1, [r6, r3] ++ mov r0, #12 ++ mov r3, r7 ++.L3228: ++ cmp r3, r1 ++ bge .L3233 ++ mla ip, r0, r3, r2 ++ ldr ip, [ip, #4] ++ cmp ip, #0 ++ bge .L3229 ++.L3233: ++ ldr r4, .L3242+8 ++ cmp r3, r1 ++ ldrh r2, [r4, #28] ++ add r8, r4, #12 ++ add r4, r4, #76 ++ add r2, r2, #1 ++ strh r2, [r4, #-48] @ movhi ++ bge .L3240 ++.L3230: ++ ldrh r3, [r4] ++ movw ip, #2390 ++ ldr r1, [r5, #-3540] ++ ldrh r0, [r4, #4] ++ lsl r3, r3, #1 ++ ldrh r2, [r1, r3] ++ sub r2, r2, r0 ++ strh r2, [r1, r3] @ movhi ++ mov r2, #0 ++ ldrh r3, [r6, ip] ++ ldr lr, [r5, #-3540] ++ strb r2, [r5, #-3514] ++ strh r3, [r4, #2] @ movhi ++ ldr r3, .L3242+12 ++ strh r2, [r4, #4] @ movhi ++ ldrh r1, [r3] ++ ldrh r9, [r3, #4] ++ lsl r1, r1, #1 ++ ldrh r0, [lr, r1] ++ sub r0, r0, r9 ++ strh r0, [lr, r1] @ movhi ++ ldrh r1, [r6, ip] ++ strh r2, [r3, #4] @ movhi ++ strb r2, [r5, #-3466] ++ strh r1, [r3, #2] @ movhi ++ ldrh r3, [r8, #18] ++ add r3, r3, #1 ++ strh r3, [r8, #18] @ movhi ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ bl FtlVpcTblFlush ++ b .L3234 ++.L3229: ++ add r3, r3, #1 ++ b .L3228 ++.L3240: ++ movw r3, #1848 ++ ldrh r3, [r5, r3] ++ cmp r3, #0 ++ bne .L3230 ++.L3234: ++ ldrh r0, [r4] ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L3235 ++ ldrh r3, [r4, #4] ++ cmp r3, #0 ++ bne .L3235 ++ ldr r4, .L3242+12 ++ ldrh r3, [r4, #4] ++ cmp r3, #0 ++ bne .L3235 ++ bl FtlGcRefreshOpenBlock ++ ldrh r0, [r4] ++ bl FtlGcRefreshOpenBlock ++ bl FtlVpcTblFlush ++ sub r0, r4, #48 ++ bl allocate_new_data_superblock ++ mov r0, r4 ++ bl allocate_new_data_superblock ++.L3235: ++ ldrb r3, [r6, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3236 ++ ldrh r3, [r8, #16] ++ tst r3, #31 ++ bne .L3224 ++.L3236: ++ bl FtlVpcCheckAndModify ++ b .L3224 ++.L3243: ++ .align 2 ++.L3242: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2-3596 ++ .word .LANCHOR2-3472 ++ .fnend ++ .size FtlSysBlkInit, .-FtlSysBlkInit ++ .align 2 ++ .global FtlLowFormat ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLowFormat, %function ++FtlLowFormat: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L3276 ++ ldr r6, [r4, #-3612] ++ cmp r6, #0 ++ bne .L3246 ++ ldr r5, .L3276+4 ++ movw r7, #2428 ++ mov r1, r6 ++ ldr r0, [r4, #-448] ++ ldrh r2, [r5, r7] ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldrh r2, [r5, r7] ++ mov r1, r6 ++ ldr r0, [r4, #-452] ++ lsl r2, r2, #2 ++ bl ftl_memset ++ add r3, r5, #2320 ++ str r6, [r4, #-3332] ++ add r3, r3, #8 ++ ldrh r0, [r3] ++ str r6, [r4, #-3328] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cmp r0, #0 ++ beq .L3247 ++ bl FtlMakeBbt ++.L3247: ++ ldr r0, .L3276+8 ++ mov r2, #0 ++ ldr ip, .L3276+12 ++.L3248: ++ ldrh r1, [r0] ++ uxth r3, r2 ++ add r2, r2, #1 ++ cmp r3, r1, lsl #7 ++ blt .L3249 ++ movw r3, #2332 ++ ldr r9, .L3276+16 ++ ldrh r7, [r5, r3] ++ mov r6, #0 ++ mov r8, r9 ++.L3250: ++ ldrh r3, [r9] ++ cmp r3, r7 ++ bhi .L3251 ++ movw r3, #2324 ++ ldrh r1, [r5, r3] ++ sub r3, r6, #3 ++ cmp r3, r1, lsl #1 ++ blt .L3252 ++ mov r0, r6 ++ mov r6, #0 ++ bl __aeabi_uidiv ++ ldr r3, [r5, #2424] ++ add r0, r0, r3 ++ uxth r0, r0 ++ bl FtlSysBlkNumInit ++ add r3, r5, #2320 ++ add r3, r3, #8 ++ ldrh r0, [r3] ++ bl FtlFreeSysBlkQueueInit ++ movw r3, #2332 ++ ldrh r7, [r5, r3] ++.L3253: ++ ldrh r3, [r8] ++ cmp r3, r7 ++ bhi .L3254 ++.L3252: ++ ldr r8, .L3276+20 ++ mov r7, #0 ++ mov r9, r7 ++.L3255: ++ ldrh r3, [r8] ++ uxth r0, r7 ++ add r7, r7, #1 ++ cmp r3, r0 ++ bhi .L3256 ++ movw r3, #2334 ++ ldr r2, [r5, #2336] ++ ldrh r3, [r5, r3] ++ ldr r8, .L3276+24 ++ mov r0, r2 ++ str r2, [sp, #4] ++ str r3, [r4, #-548] ++ movw r3, #2324 ++ ldrh r7, [r5, r3] ++ mov r1, r7 ++ bl __aeabi_uidiv ++ ubfx r10, r0, #5, #16 ++ mov fp, r0 ++ add r3, r10, #36 ++ str r0, [r5, #2452] ++ strh r3, [r8, #-8] @ movhi ++ mov r3, #24 ++ mul r3, r3, r7 ++ cmp r9, r3 ++ ble .L3257 ++ ldr r2, [sp, #4] ++ mov r1, r7 ++ sub r0, r2, r9 ++ bl __aeabi_uidiv ++ str r0, [r5, #2452] ++ lsr r0, r0, #5 ++ add r0, r0, #24 ++ strh r0, [r8, #-8] @ movhi ++.L3257: ++ ldr r3, [r5, #2248] ++ cmp r3, #1 ++ bne .L3258 ++ ldrh r3, [r8, #-8] ++ mov r1, r7 ++ mov r0, r9 ++ str r3, [sp, #4] ++ bl __aeabi_uidiv ++ ldr r3, [sp, #4] ++ uxtah r0, r3, r0 ++ add r3, r3, r0, asr #2 ++ strh r3, [r8, #-8] @ movhi ++.L3258: ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3259 ++ ldrh r3, [r8, #-8] ++ mov r1, r7 ++ mov r0, r9 ++ str r3, [sp, #4] ++ bl __aeabi_uidiv ++ ldr r3, [sp, #4] ++ uxtah r0, r3, r0 ++ add r3, r3, r0, asr #2 ++ strh r3, [r8, #-8] @ movhi ++.L3259: ++ ldr r3, .L3276+28 ++ ldrh r3, [r3] ++ cmp r3, #0 ++ beq .L3261 ++ ldrh r2, [r8, #-8] ++ add r2, r2, r3, lsr #1 ++ strh r2, [r8, #-8] @ movhi ++ mul r2, r7, r3 ++ cmp r9, r2 ++ addlt r3, r3, #32 ++ strlt fp, [r5, #2452] ++ addlt r3, r10, r3 ++ strhlt r3, [r8, #-8] @ movhi ++.L3261: ++ ldrh r2, [r8, #-8] ++ ldr r3, [r5, #2452] ++ sub r3, r3, r2 ++ mul r7, r7, r3 ++ movw r3, #2390 ++ ldrh r3, [r5, r3] ++ str r7, [r4, #1796] ++ mul r7, r7, r3 ++ movw r3, #2396 ++ ldrh r3, [r5, r3] ++ str r7, [r5, #2452] ++ mul r7, r7, r3 ++ str r7, [r5, #2432] ++ bl FtlBbmTblFlush ++ movw r3, #2404 ++ ldr r2, [r5, #2340] ++ ldrh r3, [r5, r3] ++ add r1, r6, r9 ++ add r3, r3, r2, lsr #3 ++ cmp r1, r3 ++ bls .L3263 ++ lsr r2, r2, #5 ++ ldr r0, .L3276+32 ++ bl printk ++.L3263: ++ movw r3, #2334 ++ ldr r6, .L3276+36 ++ ldrh r2, [r5, r3] ++ mov r1, #0 ++ ldr r0, [r4, #-3540] ++ mvn r7, #0 ++ sub r6, r6, #240 ++ lsl r2, r2, #1 ++ bl ftl_memset ++ mov r3, #0 ++ strh r7, [r6, #236] @ movhi ++ strh r3, [r6, #238] @ movhi ++ mov r1, #255 ++ str r3, [r4, #-3368] ++ strb r3, [r4, #-3278] ++ strb r3, [r4, #-3276] ++ strh r3, [r6, #2] @ movhi ++ strb r3, [r4, #-3514] ++ strh r3, [r6] @ movhi ++ mov r3, #1 ++ strb r3, [r4, #-3512] ++ movw r3, #2332 ++ ldrh r2, [r5, r3] ++ ldr r0, [r5, #32] ++ mov r5, r6 ++ lsr r2, r2, #3 ++ bl ftl_memset ++.L3264: ++ mov r0, r6 ++ bl make_superblock ++ ldrb r3, [r4, #-3513] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrh r3, [r5] ++ bne .L3265 ++ ldr r2, [r4, #-3540] ++ lsl r3, r3, #1 ++ strh r7, [r2, r3] @ movhi ++ ldrh r3, [r5] ++ add r3, r3, #1 ++ strh r3, [r5] @ movhi ++ b .L3264 ++.L3249: ++ ldr lr, [r4, #-508] ++ mvn r1, r3 ++ orr r1, r3, r1, lsl #16 ++ str r1, [lr, r3, lsl #2] ++ ldr r1, [r4, #-504] ++ str ip, [r1, r3, lsl #2] ++ b .L3248 ++.L3251: ++ mov r0, r7 ++ mov r1, #1 ++ bl FtlLowFormatEraseBlock ++ add r7, r7, #1 ++ add r6, r6, r0 ++ uxth r6, r6 ++ uxth r7, r7 ++ b .L3250 ++.L3254: ++ mov r0, r7 ++ mov r1, #1 ++ bl FtlLowFormatEraseBlock ++ add r7, r7, #1 ++ add r6, r6, r0 ++ uxth r6, r6 ++ uxth r7, r7 ++ b .L3253 ++.L3256: ++ mov r1, #0 ++ bl FtlLowFormatEraseBlock ++ add r9, r9, r0 ++ uxth r9, r9 ++ b .L3255 ++.L3265: ++ ldr r2, [r4, #-3332] ++ lsl r3, r3, #1 ++ ldrh r1, [r5, #4] ++ mvn r6, #0 ++ str r2, [r4, #-3508] ++ add r2, r2, #1 ++ str r2, [r4, #-3332] ++ ldr r2, [r4, #-3540] ++ strh r1, [r2, r3] @ movhi ++ mov r2, #0 ++ ldr r3, .L3276+40 ++ strb r2, [r4, #-3466] ++ strh r2, [r3, #2] @ movhi ++ mov r7, r3 ++ ldrh r2, [r5] ++ mov r5, r3 ++ add r2, r2, #1 ++ strh r2, [r3] @ movhi ++ mov r2, #1 ++ strb r2, [r4, #-3464] ++.L3266: ++ mov r0, r7 ++ bl make_superblock ++ ldrb r3, [r4, #-3465] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrh r3, [r5] ++ bne .L3267 ++ ldr r2, [r4, #-3540] ++ lsl r3, r3, #1 ++ strh r6, [r2, r3] @ movhi ++ ldrh r3, [r5] ++ add r3, r3, #1 ++ strh r3, [r5] @ movhi ++ b .L3266 ++.L3267: ++ ldr r2, [r4, #-3332] ++ lsl r3, r3, #1 ++ ldrh r1, [r5, #4] ++ mvn r5, #0 ++ str r2, [r4, #-3460] ++ add r2, r2, #1 ++ str r2, [r4, #-3332] ++ ldr r2, [r4, #-3540] ++ strh r1, [r2, r3] @ movhi ++ ldr r3, .L3276+44 ++ strh r5, [r3] @ movhi ++ bl FtlFreeSysBlkQueueOut ++ sub r3, r8, #4 ++ mov r2, #0 ++ strh r5, [r3, #4] @ movhi ++ ldr r3, [r4, #-3332] ++ strh r2, [r8, #-2] @ movhi ++ ldr r2, [r4, #1796] ++ str r3, [r4, #-3292] ++ add r3, r3, #1 ++ str r3, [r4, #-3332] ++ strh r2, [r8, #2] @ movhi ++ strh r0, [r8, #-4] @ movhi ++ bl FtlVpcTblFlush ++ bl FtlSysBlkInit ++ cmp r0, #0 ++ ldreq r3, .L3276+48 ++ moveq r2, #1 ++ streq r2, [r3, #500] ++.L3246: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3277: ++ .align 2 ++.L3276: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR0+2396 ++ .word 168778952 ++ .word .LANCHOR0+2334 ++ .word .LANCHOR0+2332 ++ .word .LANCHOR2-3296 ++ .word .LANCHOR0+2384 ++ .word .LC156 ++ .word .LANCHOR2-3280 ++ .word .LANCHOR2-3472 ++ .word .LANCHOR2-3424 ++ .word .LANCHOR1 ++ .fnend ++ .size FtlLowFormat, .-FtlLowFormat ++ .align 2 ++ .global FtlReInitForSDUpdata ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlReInitForSDUpdata, %function ++FtlReInitForSDUpdata: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ .pad #16 ++ ldr r4, .L3314 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3279 ++.L3281: ++ mov r6, #0 ++.L3278: ++ mov r0, r6 ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, pc} ++.L3279: ++ ldr r5, .L3314+4 ++ ldr r0, [r5, #1684] ++ bl FlashInit ++ subs r6, r0, #0 ++ bne .L3281 ++ bl FlashLoadFactorBbt ++ cmp r0, #0 ++ beq .L3282 ++ bl FlashMakeFactorBbt ++.L3282: ++ ldr r0, [r5, #1724] ++ bl FlashReadIdbDataRaw ++ cmp r0, #0 ++ beq .L3283 ++ mov r2, #16 ++ mov r1, #0 ++ mov r0, sp ++ bl FlashReadFacBbtData ++ ldr r1, [sp] ++ mov r3, #0 ++ mov r2, r3 ++ mov r0, #1 ++.L3285: ++ ands ip, r1, r0, lsl r2 ++ add r2, r2, #1 ++ addne r3, r3, #1 ++ cmp r2, #16 ++ bne .L3285 ++ cmp r3, #6 ++ bhi .L3286 ++.L3311: ++ strb r2, [r4, #37] ++ b .L3287 ++.L3286: ++ mov r2, #0 ++ mov r0, #1 ++.L3289: ++ ands ip, r1, r0, lsl r2 ++ add r2, r2, #1 ++ addne r3, r3, #1 ++ cmp r2, #24 ++ bne .L3289 ++ cmp r3, #17 ++ movhi r3, #36 ++ strbhi r3, [r4, #37] ++ bls .L3311 ++.L3287: ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ strh r3, [r4, #150] @ movhi ++.L3283: ++ ldr r1, .L3314+8 ++ ldr r0, .L3314+12 ++ bl printk ++ ldr r0, .L3314+16 ++ bl FtlConstantsInit ++ bl FtlVariablesInit ++ ldr r0, [r4, #2328] ++ mov r4, #1 ++ uxth r0, r0 ++ bl FtlFreeSysBlkQueueInit ++.L3291: ++ bl FtlLoadBbt ++ cmp r0, #0 ++ beq .L3292 ++.L3313: ++ bl FtlLowFormat ++ cmp r4, #3 ++ mvnhi r6, #0 ++ bhi .L3278 ++.L3293: ++ add r4, r4, #1 ++ b .L3291 ++.L3292: ++ bl FtlSysBlkInit ++ cmp r0, #0 ++ bne .L3313 ++ ldr r3, .L3314+20 ++ mov r2, #1 ++ str r2, [r3, #500] ++ b .L3278 ++.L3315: ++ .align 2 ++.L3314: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC76 ++ .word .LC77 ++ .word .LANCHOR0+124 ++ .word .LANCHOR1 ++ .fnend ++ .size FtlReInitForSDUpdata, .-FtlReInitForSDUpdata ++ .align 2 ++ .global Ftl_gc_temp_data_write_back ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_gc_temp_data_write_back, %function ++Ftl_gc_temp_data_write_back: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, .L3332 ++ ldr r3, [r4, #-3612] ++ cmp r3, #0 ++ beq .L3317 ++.L3320: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L3317: ++ ldr r3, .L3332+4 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3319 ++ ldr r3, [r4, #-2704] ++ tst r3, #1 ++ beq .L3319 ++ sub r3, r4, #3424 ++ ldrh r3, [r3, #4] ++ cmp r3, #0 ++ bne .L3320 ++.L3319: ++ mov r3, #0 ++ mov r5, #0 ++ mov r6, #36 ++ mov r2, r3 ++ ldr r1, [r4, #-2704] ++ ldr r0, [r4, #-532] ++ bl FlashProgPages ++.L3321: ++ ldr r1, [r4, #-2704] ++ uxth r3, r5 ++ cmp r3, r1 ++ bcc .L3323 ++ ldr r0, [r4, #-532] ++ bl FtlGcBufFree ++ mov r3, #0 ++ str r3, [r4, #-2704] ++ ldr r3, .L3332+8 ++ ldrh r3, [r3, #4] ++ cmp r3, #0 ++ bne .L3320 ++ mov r0, #1 ++ bl FtlGcFreeTempBlock ++ b .L3331 ++.L3323: ++ mul r3, r6, r3 ++ ldr r2, [r4, #-532] ++ add r5, r5, #1 ++ ldr ip, [r2, r3] ++ add r1, r2, r3 ++ ldr r0, [r1, #12] ++ cmn ip, #1 ++ bne .L3322 ++ ldr r1, .L3332+8 ++ mov lr, #0 ++ ldr r0, [r4, #-3540] ++ ldrh r2, [r1] ++ lsl r2, r2, #1 ++ strh lr, [r0, r2] @ movhi ++ ldr r2, [r4, #-3140] ++ strh ip, [r1] @ movhi ++ add r2, r2, #1 ++ str r2, [r4, #-3140] ++ ldr r2, [r4, #-532] ++ add r3, r2, r3 ++ ldr r0, [r3, #4] ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ bl FtlGcPageVarInit ++.L3331: ++ mov r0, #1 ++ pop {r4, r5, r6, pc} ++.L3322: ++ ldr r2, [r0, #8] ++ ldr r1, [r1, #4] ++ ldr r0, [r0, #12] ++ bl FtlGcUpdatePage ++ b .L3321 ++.L3333: ++ .align 2 ++.L3332: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2-3424 ++ .fnend ++ .size Ftl_gc_temp_data_write_back, .-Ftl_gc_temp_data_write_back ++ .align 2 ++ .global Ftl_get_new_temp_ppa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_get_new_temp_ppa, %function ++Ftl_get_new_temp_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3341 ++ movw r2, #65535 ++ ldrh r1, [r3] ++ cmp r1, r2 ++ beq .L3335 ++ ldrh r3, [r3, #4] ++ cmp r3, #0 ++ ldrne r0, .L3341 ++ bne .L3340 ++.L3335: ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, #0 ++ ldr r4, .L3341+4 ++ bl FtlCacheWriteBack ++ mov r0, #0 ++ bl FtlGcFreeTempBlock ++ sub r0, r4, #3424 ++ strb r5, [r4, #-3416] ++ bl allocate_data_superblock ++ sub r3, r4, #2672 ++ sub r4, r4, #2656 ++ strh r5, [r3, #-4] @ movhi ++ strh r5, [r4, #-12] @ movhi ++ bl l2p_flush ++ mov r0, r5 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++ pop {r4, r5, r6, lr} ++ ldr r0, .L3341 ++.L3340: ++ b get_new_active_ppa ++.L3342: ++ .align 2 ++.L3341: ++ .word .LANCHOR2-3424 ++ .word .LANCHOR2 ++ .fnend ++ .size Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa ++ .align 2 ++ .global ftl_do_gc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_do_gc, %function ++ftl_do_gc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 32 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3507 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov lr, r0 ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r0, [r3, #-3612] ++ cmp r0, #0 ++ bne .L3439 ++ ldr ip, .L3507+4 ++ ldr r5, [ip, #500] ++ cmp r5, #1 ++ bne .L3343 ++ ldr r2, [r3, #-560] ++ cmp r2, #0 ++ bne .L3343 ++ sub r8, r3, #3520 ++ ldrh r0, [r8, #-12] ++ cmp r0, #47 ++ bls .L3439 ++ movw r2, #3444 ++ mov r7, r1 ++ ldrh r1, [ip, r2] ++ movw r2, #65535 ++ mov r4, r3 ++ str lr, [sp, #16] ++ cmp r1, r2 ++ bne .L3345 ++.L3348: ++ ldr r6, .L3507+8 ++ movw r2, #65535 ++ ldrh r0, [r6, #-8] ++ cmp r0, r2 ++ bne .L3346 ++.L3347: ++ ldr r3, [r4, #-2716] ++ ldr r2, [sp, #16] ++ add r3, r3, #1 ++ cmp r2, #1 ++ add r3, r3, r2, lsl #7 ++ str r3, [r4, #-2716] ++ bne .L3349 ++ ldr r9, .L3507+12 ++ ldr r2, [r9, #2248] ++ cmp r2, #0 ++ bne .L3350 ++ ldrb r2, [r9, #152] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3349 ++.L3350: ++ ldr r2, [r4, #-3308] ++ cmp r2, #39 ++ bhi .L3349 ++ ldr r10, .L3507+16 ++ movw r5, #65535 ++ ldrh r2, [r10] ++ add r3, r2, r3 ++ str r3, [r4, #-2716] ++ bl FtlGcReFreshBadBlk ++ ldr r3, .L3507+20 ++ mov r2, r10 ++ ldrh r3, [r3, #-4] ++ cmp r3, r5 ++ bne .L3351 ++ ldrh r1, [r6, #-10] ++ cmp r1, r3 ++ bne .L3438 ++ ldr r3, [r4, #-2716] ++ cmp r3, #1024 ++ bhi .L3353 ++ ldrh r3, [r8, #-4] ++ cmp r3, #63 ++ bhi .L3438 ++.L3353: ++ ldr r6, .L3507+24 ++ mov r1, #0 ++ ldrh r0, [r8, #-4] ++ strh r1, [r2] @ movhi ++ ldrh r3, [r6, #-14] ++ add r3, r3, #64 ++ cmp r0, r3 ++ bgt .L3438 ++ ldr r3, [r4, #-3308] ++ str r1, [r4, #-2716] ++ cmp r3, r1 ++ moveq r3, #6 ++ beq .L3499 ++ cmp r3, #5 ++ bhi .L3355 ++ mov r3, #18 ++.L3499: ++ strh r3, [r2] @ movhi ++.L3355: ++ mov r0, #32 ++ movw r10, #65535 ++ bl List_get_gc_head_node ++ uxth r3, r0 ++ cmp r3, r10 ++ beq .L3359 ++ ldrh ip, [r6, #-8] ++ cmp ip, #0 ++ beq .L3357 ++ movw r2, #2392 ++ uxth r0, r0 ++ ldrh lr, [r9, r2] ++ movw r2, #2324 ++ ldrh r2, [r9, r2] ++ lsl r1, r0, #1 ++ ldr r3, [r4, #-3540] ++ str r1, [sp, #12] ++ mul r2, r2, lr ++ ldrh r0, [r3, r1] ++ str r3, [sp, #8] ++ add r2, r2, #1 ++ cmp r0, r2 ++ bgt .L3359 ++ add fp, ip, #1 ++ mov r9, #0 ++ uxth fp, fp ++ mov r0, ip ++ str r9, [r4, #-2708] ++ strh fp, [r6, #-8] @ movhi ++ bl List_get_gc_head_node ++ uxth r5, r0 ++ ldr r3, [sp, #8] ++ ldr r1, [sp, #12] ++ cmp r5, r10 ++ beq .L3359 ++ lsl r10, r5, #1 ++ mov r2, r5 ++ ldrh r0, [r3, r10] ++ ldrh r3, [r3, r1] ++ mov r1, fp ++ str r3, [sp] ++ mov r3, r0 ++ ldr r0, .L3507+28 ++ bl printk ++ ldrh r3, [r6, #-8] ++ cmp r3, #40 ++ bls .L3358 ++ ldr r3, [r4, #-3540] ++ ldrh r3, [r3, r10] ++ cmp r3, #32 ++ strhhi r9, [r6, #-8] @ movhi ++.L3358: ++ ldr r3, .L3507+16 ++ mov r2, #6 ++ strh r2, [r3] @ movhi ++.L3351: ++ movw r0, #65535 ++ ldr r3, [sp, #16] ++ sub r2, r5, r0 ++ clz r2, r2 ++ lsr r2, r2, #5 ++ cmp r3, #0 ++ movne r1, #0 ++ andeq r1, r2, #1 ++ cmp r1, #0 ++ beq .L3373 ++ ldrh r3, [r8, #-4] ++ cmp r3, #24 ++ movhi r6, #1 ++ bhi .L3374 ++ ldr r1, .L3507+12 ++ movw r2, #2390 ++ cmp r3, #16 ++ ldrh r6, [r1, r2] ++ lsrhi r6, r6, #5 ++ bhi .L3374 ++ cmp r3, #12 ++ lsrhi r6, r6, #4 ++ bhi .L3374 ++ cmp r3, #8 ++ lsrhi r6, r6, #2 ++.L3374: ++ ldr r1, .L3507+32 ++ ldrh r2, [r1] ++ cmp r2, r3 ++ mov r2, r1 ++ bcs .L3378 ++ sub r3, r1, #704 ++ movw r0, #65535 ++ ldrh r3, [r3] ++ cmp r3, r0 ++ bne .L3379 ++ ldrh r0, [r1, #54] ++ cmp r0, r3 ++ bne .L3379 ++ ldr r3, .L3507+16 ++ ldrh r0, [r3] ++ cmp r0, #0 ++ bne .L3380 ++ ldr r3, .L3507+12 ++ ldr ip, [r4, #-3368] ++ ldr r3, [r3, #2452] ++ add r3, r3, r3, lsl #1 ++ cmp ip, r3, lsr #2 ++ movcs r3, #18 ++ strhcs r3, [r1] @ movhi ++ bcs .L3382 ++.L3380: ++ ldr r3, .L3507+36 ++ ldrh r3, [r3, #-8] ++ add r3, r3, r3, lsl #1 ++ asr r3, r3, #2 ++ strh r3, [r2] @ movhi ++.L3382: ++ mov r3, #0 ++ str r3, [r4, #-2708] ++.L3343: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3345: ++ sub r3, r3, #3424 ++ ldrh r3, [r3] ++ cmp r3, r2 ++ beq .L3348 ++ mov r0, r5 ++ bl FtlGcFreeTempBlock ++ cmp r0, #0 ++ beq .L3348 ++ mov r0, r5 ++ b .L3343 ++.L3346: ++ ldrh r3, [r6, #-10] ++ cmp r3, r2 ++ bne .L3347 ++ ldrh r1, [r6, #-6] ++ cmp r1, r3 ++ beq .L3347 ++ ldrh r2, [r6, #-4] ++ cmp r2, r3 ++ mvnne r3, #0 ++ strhne r0, [r6, #-10] @ movhi ++ strhne r1, [r6, #-8] @ movhi ++ strhne r2, [r6, #-6] @ movhi ++ strhne r3, [r6, #-4] @ movhi ++ b .L3347 ++.L3357: ++ mov r3, #1 ++ strh r3, [r6, #-8] @ movhi ++.L3359: ++ bl GetSwlReplaceBlock ++ movw r3, #65535 ++ mov r5, r0 ++ cmp r0, r3 ++ bne .L3351 ++ ldr r3, .L3507+16 ++ mov r2, #0 ++ strh r2, [r3] @ movhi ++.L3349: ++ ldr r3, .L3507+20 ++ movw r5, #65535 ++ ldrh r3, [r3, #-4] ++ cmp r3, r5 ++ bne .L3351 ++.L3438: ++ ldr r6, .L3507+40 ++ movw r3, #65535 ++ ldrh r5, [r6] ++ cmp r5, r3 ++ movne r5, r3 ++ bne .L3351 ++ add r3, r6, #768 ++ ldrh r9, [r3, #-10] ++ cmp r9, r5 ++ bne .L3351 ++ ldrh r3, [r8, #-4] ++ ldr r2, [r4, #-2716] ++ cmp r3, #24 ++ movcc r3, #5120 ++ movcs r3, #1024 ++ cmp r2, r3 ++ bls .L3351 ++ ldr r2, .L3507+16 ++ mov r3, #0 ++ str r3, [r4, #-2716] ++ strh r3, [r2] @ movhi ++ bl GetSwlReplaceBlock ++ cmp r0, r9 ++ mov r5, r0 ++ movne r10, r0 ++ bne .L3361 ++ add r6, r6, #720 ++ ldrh r2, [r8, #-4] ++ ldrh r3, [r6, #-14] ++ mov r9, r6 ++ cmp r2, r3 ++ movcs r3, #80 ++ strhcs r3, [r6, #-14] @ movhi ++ bcs .L3364 ++ mov r0, #64 ++ bl List_get_gc_head_node ++ uxth r3, r0 ++ cmp r3, r5 ++ beq .L3364 ++ ldr r3, [r4, #-564] ++ ldr r6, .L3507+12 ++ cmp r3, #0 ++ uxth r3, r0 ++ bne .L3365 ++ movw r2, #2344 ++ ldrh r2, [r6, r2] ++ cmp r2, #3 ++ beq .L3365 ++ ldr r2, [r4, #-2724] ++ cmp r2, #0 ++ bne .L3365 ++ ldr r2, [r6, #2248] ++ cmp r2, #0 ++ bne .L3365 ++ ldrb r0, [r6, #152] @ zero_extendqisi2 ++ cmp r0, #0 ++ beq .L3366 ++.L3365: ++ ldr r2, [r4, #-3540] ++ lsl r3, r3, #1 ++ movw r0, #2344 ++ ldrh r0, [r6, r0] ++ ldrh r1, [r2, r3] ++ movw r3, #2392 ++ movw r2, #2324 ++ ldrh r3, [r6, r3] ++ ldrh r2, [r6, r2] ++ cmp r0, #3 ++ mul r2, r3, r2 ++ lsreq r3, r3, #1 ++ movne r3, #0 ++ add r3, r3, r2 ++ cmp r1, r3 ++ bgt .L3368 ++ mov r0, #0 ++ bl List_get_gc_head_node ++ ldr r3, [r6, #2452] ++ uxth r10, r0 ++ ldr r2, [r4, #-3368] ++ add r3, r3, r3, lsl #1 ++ cmp r2, r3, lsr #2 ++ movls r3, #160 ++ bls .L3500 ++.L3501: ++ mov r3, #128 ++.L3500: ++ strh r3, [r9, #-14] @ movhi ++ movw r3, #65535 ++ cmp r10, r3 ++ beq .L3364 ++.L3361: ++ ldr r0, .L3507+32 ++ lsl r1, r10, #1 ++ ldr r3, [r4, #-3540] ++ mov r5, r10 ++ ldrh r2, [r8, #-4] ++ ldrh r0, [r0] ++ ldrh r3, [r3, r1] ++ str r0, [sp, #4] ++ ldr r0, [r4, #-3604] ++ ldrh r1, [r0, r1] ++ ldr r0, .L3507+44 ++ str r1, [sp] ++ mov r1, r10 ++ bl printk ++ b .L3364 ++.L3368: ++ mov r3, #128 ++.L3502: ++ strh r3, [r9, #-14] @ movhi ++.L3364: ++ bl FtlGcReFreshBadBlk ++ b .L3351 ++.L3366: ++ ldr r2, [r4, #-3540] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #7 ++ bhi .L3371 ++ bl List_get_gc_head_node ++ uxth r10, r0 ++ b .L3501 ++.L3371: ++ mov r3, #64 ++ b .L3502 ++.L3379: ++ ldr r3, .L3507+36 ++ ldrh r3, [r3, #-8] ++ add r3, r3, r3, lsl #1 ++ asr r3, r3, #2 ++ strh r3, [r2] @ movhi ++.L3378: ++ ldr r3, .L3507+12 ++ movw r5, #65535 ++ ldr r3, [r3, #2248] ++ adds r3, r3, #0 ++ movne r3, #1 ++ cmp r7, #2 ++ movhi r3, #0 ++ cmp r3, #0 ++ addne r6, r6, #1 ++ uxthne r6, r6 ++.L3384: ++ ldr r7, .L3507+20 ++ movw r2, #65535 ++ ldrh r3, [r7, #-4] ++ cmp r3, r2 ++ bne .L3394 ++ cmp r5, r3 ++ strhne r5, [r7, #-4] @ movhi ++ bne .L3396 ++ add r3, r7, #624 ++ ldrh r2, [r3, #-10] ++ cmp r2, r5 ++ beq .L3396 ++ ldr r1, [r4, #-3540] ++ lsl r2, r2, #1 ++ ldrh r2, [r1, r2] ++ cmp r2, #0 ++ mvneq r2, #0 ++ strheq r2, [r3, #-10] @ movhi ++ ldrh r2, [r3, #-10] ++ strh r2, [r7, #-4] @ movhi ++ mvn r2, #0 ++ strh r2, [r3, #-10] @ movhi ++.L3396: ++ ldrh r0, [r7, #-4] ++ mov r3, #0 ++ strb r3, [r4, #-3276] ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L3394 ++ bl IsBlkInGcList ++ cmp r0, #0 ++ mvnne r3, #0 ++ strhne r3, [r7, #-4] @ movhi ++ ldr r3, .L3507+12 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3400 ++ ldrh r0, [r7, #-4] ++ bl ftl_get_blk_mode ++ strb r0, [r4, #-3276] ++.L3400: ++ ldrh r2, [r7, #-4] ++ movw r3, #65535 ++ sub r9, r7, #4 ++ cmp r2, r3 ++ beq .L3394 ++ mov r0, r9 ++ bl make_superblock ++ mov r3, #0 ++ movw r2, #1986 ++ strh r3, [r4, r2] @ movhi ++ strh r3, [r7, #-2] @ movhi ++ strb r3, [r4, #-3278] ++ ldrh r3, [r7, #-4] ++ ldr r2, [r4, #-3540] ++ lsl r3, r3, #1 ++ ldrh r2, [r2, r3] ++ movw r3, #1988 ++ strh r2, [r4, r3] @ movhi ++.L3394: ++ ldrh r3, [r7, #-4] ++ ldrh r2, [r8] ++ cmp r2, r3 ++ beq .L3401 ++ ldr r2, .L3507+48 ++ ldrh r1, [r2] ++ cmp r1, r3 ++ beq .L3401 ++ ldrh r2, [r2, #48] ++ cmp r2, r3 ++ bne .L3402 ++.L3401: ++ mvn r3, #0 ++ strh r3, [r7, #-4] @ movhi ++.L3402: ++ ldr r4, .L3507 ++ sub r7, r4, #3280 ++.L3435: ++ ldrh r2, [r7, #-4] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3403 ++ ldr r9, .L3507+24 ++ mov r3, #0 ++ ldr r10, .L3507+52 ++ str r3, [r4, #-2708] ++.L3404: ++ ldr fp, .L3507+56 ++ ldrh r8, [fp] ++ mov r0, r8 ++ bl List_get_gc_head_node ++ uxth r2, r0 ++ sub r1, fp, #568 ++ strh r2, [r1, #-4] @ movhi ++ movw r1, #65535 ++ cmp r2, r1 ++ bne .L3405 ++ mov r3, #0 ++ mov r0, #8 ++ strh r3, [fp] @ movhi ++ b .L3343 ++.L3373: ++ ldr r3, .L3507+40 ++ ldrh r7, [r3] ++ cmp r7, r0 ++ bne .L3385 ++ add r0, r3, #768 ++ ldrh r0, [r0, #-10] ++ cmp r0, r7 ++ movne r2, #0 ++ andeq r2, r2, #1 ++ cmp r2, #0 ++ beq .L3385 ++ ldrh r2, [r3, #140] ++ cmp r2, r7 ++ beq .L3386 ++.L3391: ++ mov r5, r7 ++.L3385: ++ ldr r3, .L3507+12 ++ ldr r3, [r3, #2248] ++ cmp r3, #0 ++ moveq r6, #1 ++ movne r6, #2 ++ b .L3384 ++.L3386: ++ add r5, r3, #704 ++ ldrh r2, [r8, #-4] ++ ldrh r3, [r5] ++ str r1, [r4, #-2708] ++ ldr r6, .L3507+16 ++ cmp r2, r3 ++ bls .L3387 ++ ldrh r3, [r6] ++ cmp r3, #0 ++ bne .L3388 ++ ldr r3, .L3507+12 ++ ldr r2, [r4, #-3368] ++ ldr r3, [r3, #2452] ++ add r3, r3, r3, lsl #1 ++ cmp r2, r3, lsr #2 ++ movcs r3, #18 ++ bcs .L3503 ++.L3388: ++ ldr r3, .L3507+36 ++ ldrh r3, [r3, #-8] ++ add r3, r3, r3, lsl #1 ++ asr r3, r3, #2 ++.L3503: ++ strh r3, [r5] @ movhi ++ bl FtlReadRefresh ++ mov r0, #0 ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ ldr r3, [r4, #-3540] ++ lsl r0, r0, #1 ++ ldrh r3, [r3, r0] ++ cmp r3, #4 ++ bls .L3387 ++.L3504: ++ ldrh r0, [r6] ++ b .L3343 ++.L3387: ++ ldrh r0, [r6] ++ cmp r0, #0 ++ bne .L3391 ++ ldr r3, .L3507+36 ++ ldrh r9, [r3, #-8] ++ add r3, r9, r9, lsl #1 ++ asr r3, r3, #2 ++ strh r3, [r5] @ movhi ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ ldr r3, [r4, #-3540] ++ ldr r2, .L3507+12 ++ lsl r0, r0, #1 ++ ldrh r1, [r3, r0] ++ movw r3, #2392 ++ ldrh r0, [r2, r3] ++ movw r3, #2324 ++ ldrh r3, [r2, r3] ++ mul r3, r3, r0 ++ add r3, r3, r3, lsr #31 ++ cmp r1, r3, asr #1 ++ ble .L3392 ++ ldrh r2, [r8, #-4] ++ sub r3, r9, #1 ++ cmp r2, r3 ++ blt .L3392 ++ bl FtlReadRefresh ++ b .L3504 ++.L3392: ++ cmp r1, #0 ++ bne .L3391 ++ movw r0, #65535 ++ bl decrement_vpc_count ++ ldrh r0, [r8, #-4] ++ add r0, r0, #1 ++ b .L3343 ++.L3405: ++ str r0, [sp, #12] ++ mov r0, r2 ++ str r2, [sp, #8] ++ add r8, r8, #1 ++ bl IsBlkInGcList ++ cmp r0, #0 ++ ldr r2, [sp, #8] ++ ldr r3, [sp, #12] ++ strhne r8, [fp] @ movhi ++ bne .L3404 ++ uxth r3, r3 ++ ldrh lr, [r10] ++ ldr r0, [r4, #-3540] ++ uxth r8, r8 ++ lsl r1, r3, #1 ++ ldr r3, .L3507+60 ++ strh r8, [fp] @ movhi ++ ldrh ip, [r0, r1] ++ ldrh r3, [r3] ++ mul r3, r3, lr ++ add lr, r3, r3, lsr #31 ++ cmp ip, lr, asr #1 ++ bgt .L3408 ++ cmp r8, #48 ++ cmphi ip, #8 ++ bls .L3409 ++ ldrh ip, [fp, #36] ++ cmp ip, #35 ++ bhi .L3409 ++.L3408: ++ mov ip, #0 ++ strh ip, [r9, #-8] @ movhi ++.L3409: ++ ldrh r1, [r0, r1] ++ movw r0, #65535 ++ cmp r3, r1 ++ cmple r5, r0 ++ bne .L3410 ++ ldrh r0, [r9, #-8] ++ cmp r0, #3 ++ bhi .L3410 ++ ldr r1, .L3507+20 ++ mvn r2, #0 ++ strh r2, [r1, #-4] @ movhi ++ mov r2, #0 ++ strh r2, [r9, #-8] @ movhi ++.L3506: ++ ldr r3, .L3507+16 ++ b .L3505 ++.L3410: ++ cmp r1, #0 ++ bne .L3411 ++ movw r0, #65535 ++ bl decrement_vpc_count ++ ldrh r3, [r9, #-8] ++ add r3, r3, #1 ++ strh r3, [r9, #-8] @ movhi ++ b .L3404 ++.L3411: ++ mov r3, #0 ++ strb r3, [r4, #-3276] ++ ldr r3, .L3507+12 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3412 ++ mov r0, r2 ++ bl ftl_get_blk_mode ++ strb r0, [r4, #-3276] ++.L3412: ++ ldr r3, .L3507+20 ++ sub r8, r3, #4 ++ mov r0, r8 ++ bl make_superblock ++ add r2, r8, #4 ++ ldr r1, .L3507+64 ++ ldrh r2, [r2, #-4] ++ mov r3, #0 ++ ldr r0, [r4, #-3540] ++ strh r3, [r1] @ movhi ++ lsl r2, r2, #1 ++ ldrh r2, [r0, r2] ++ strh r3, [r8, #2] @ movhi ++ strb r3, [r4, #-3278] ++ strh r2, [r1, #2] @ movhi ++.L3403: ++ ldr r3, [sp, #16] ++ cmp r3, #1 ++ bne .L3413 ++ bl FtlReadRefresh ++.L3413: ++ mov r3, #1 ++ str r3, [r4, #-560] ++ ldr r3, .L3507+52 ++ ldrh r3, [r3] ++ str r3, [sp, #8] ++ ldr r3, .L3507+12 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3414 ++ ldrb r3, [r4, #-3276] @ zero_extendqisi2 ++ cmp r3, #1 ++ ldreq r3, .L3507+68 ++ ldrheq r3, [r3] ++ streq r3, [sp, #8] ++.L3414: ++ ldr r3, .L3507+20 ++ ldr r1, [sp, #8] ++ ldrh r3, [r3, #-2] ++ add r2, r3, r6 ++ cmp r2, r1 ++ movgt r2, r1 ++ subgt r6, r2, r3 ++ mov r3, #0 ++ uxthgt r6, r6 ++ str r3, [sp, #12] ++ sub r3, r7, #4 ++ str r3, [sp, #20] ++.L3416: ++ ldrh r3, [sp, #12] ++ cmp r6, r3 ++ bls .L3423 ++ ldr r3, .L3507+60 ++ add ip, r7, #10 ++ ldr r0, [r4, #-2688] ++ movw r9, #65535 ++ mov lr, #36 ++ ldrh r10, [r3] ++ ldr r3, [sp, #20] ++ ldrh r1, [r3, #2] ++ ldr r3, [sp, #12] ++ add r1, r1, r3 ++ mov r3, #0 ++ mov r8, r3 ++ b .L3424 ++.L3418: ++ ldrh r2, [ip, #2]! ++ add r3, r3, #1 ++ cmp r2, r9 ++ mlane fp, lr, r8, r0 ++ addne r8, r8, #1 ++ orrne r2, r1, r2, lsl #10 ++ uxthne r8, r8 ++ strne r2, [fp, #4] ++.L3424: ++ uxth r2, r3 ++ cmp r10, r2 ++ bhi .L3418 ++ mov fp, #0 ++ ldrb r2, [r4, #-3276] @ zero_extendqisi2 ++ mov r1, r8 ++ bl FlashReadPages ++.L3419: ++ uxth r3, fp ++ cmp r8, r3 ++ ldrls r3, [sp, #12] ++ addls r3, r3, #1 ++ strls r3, [sp, #12] ++ bls .L3416 ++.L3422: ++ mov r3, #36 ++ ldr r2, [r4, #-2688] ++ mul r9, r3, fp ++ add r1, r2, r9 ++ ldr r2, [r2, r9] ++ cmn r2, #1 ++ beq .L3420 ++ ldr r10, [r1, #12] ++ movw r2, #61589 ++ ldrh r1, [r10] ++ cmp r1, r2 ++ bne .L3420 ++ mov r2, #0 ++ add r1, sp, #32 ++ ldr r0, [r10, #8] ++ str r3, [sp, #24] ++ bl log2phys ++ ldr r1, [r4, #-2688] ++ ldr r2, [sp, #32] ++ ldr r3, [sp, #24] ++ add r1, r1, r9 ++ ldr r0, [r1, #4] ++ bic r2, r2, #-2147483648 ++ cmp r2, r0 ++ bne .L3420 ++ ldr r2, .L3507+64 ++ ldr r0, .L3507+64 ++ ldr r1, [r1, #16] ++ ldrh r2, [r2] ++ str r3, [sp, #28] ++ add r2, r2, #1 ++ strh r2, [r0] @ movhi ++ ldr r0, [r4, #-2704] ++ ldr r2, [r4, #-532] ++ mla r2, r3, r0, r2 ++ str r1, [r2, #16] ++ str r2, [sp, #24] ++ bl Ftl_get_new_temp_ppa ++ ldr r2, [sp, #24] ++ ldr r1, [r4, #-532] ++ ldr r3, [sp, #28] ++ str r0, [r2, #4] ++ ldr r2, [r4, #-2704] ++ mla r3, r3, r2, r1 ++ ldr r2, [r4, #-2688] ++ add r2, r2, r9 ++ ldr r1, [r2, #8] ++ str r1, [r3, #8] ++ mov r1, #1 ++ ldr r2, [r2, #12] ++ str r2, [r3, #12] ++ ldr r3, [sp, #32] ++ str r3, [r10, #12] ++ ldr r3, .L3507+40 ++ ldrh r3, [r3] ++ strh r3, [r10, #2] @ movhi ++ ldr r3, [r4, #-3328] ++ ldr r0, [r4, #-2688] ++ str r3, [r10, #4] ++ ldr r3, [r4, #-2704] ++ add r0, r0, r9 ++ add r3, r3, #1 ++ str r3, [r4, #-2704] ++ bl FtlGcBufAlloc ++ ldr r3, .L3507+12 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3421 ++ ldrb r2, [r4, #-3417] @ zero_extendqisi2 ++ ldr r3, [r4, #-2704] ++ cmp r2, r3 ++ beq .L3421 ++ ldr r3, .L3507+40 ++ ldrh r3, [r3, #4] ++ cmp r3, #0 ++ bne .L3420 ++.L3421: ++ bl Ftl_gc_temp_data_write_back ++ cmp r0, #0 ++ beq .L3420 ++ ldr r3, .L3507 ++ mov r2, #0 ++ mvn ip, #0 ++ sub r1, r3, #3280 ++ str r2, [r3, #-560] ++ add r3, r3, #1984 ++ strh ip, [r1, #-4] @ movhi ++ strh r2, [r1, #-2] @ movhi ++.L3505: ++ ldrh r0, [r3] ++ b .L3343 ++.L3420: ++ add fp, fp, #1 ++ b .L3419 ++.L3423: ++ ldrh r3, [r7, #-2] ++ add r6, r6, r3 ++ ldr r3, [sp, #8] ++ uxth r6, r6 ++ cmp r3, r6 ++ strh r6, [r7, #-2] @ movhi ++ bhi .L3425 ++ ldr r3, [r4, #-2704] ++ cmp r3, #0 ++ beq .L3426 ++ bl Ftl_gc_temp_data_write_back ++ cmp r0, #0 ++ movne r3, #0 ++ strne r3, [r4, #-560] ++ bne .L3506 ++.L3426: ++ ldr r3, .L3507+64 ++ ldrh r0, [r3] ++ cmp r0, #0 ++ bne .L3427 ++ ldrh r3, [r7, #-4] ++ ldr r2, [r4, #-3540] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ movne r6, r0 ++ ldrne r8, .L3507+12 ++ bne .L3428 ++.L3427: ++ mvn r3, #0 ++ strh r3, [r7, #-4] @ movhi ++.L3425: ++ ldr r3, .L3507+72 ++ ldrh r3, [r3] ++ cmp r3, #2 ++ bhi .L3434 ++ ldr r3, .L3507+52 ++ ldrh r6, [r3] ++ b .L3435 ++.L3429: ++ add r6, r6, #1 ++.L3428: ++ ldr r3, [r8, #2452] ++ cmp r6, r3 ++ bcs .L3433 ++ mov r2, #0 ++ add r1, sp, #36 ++ mov r0, r6 ++ bl log2phys ++ ldr r0, [sp, #36] ++ cmn r0, #1 ++ beq .L3429 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r7, #-4] ++ cmp r3, r0 ++ bne .L3429 ++.L3433: ++ ldr r3, [r8, #2452] ++ cmp r6, r3 ++ bcc .L3427 ++ ldrh r3, [r7, #-4] ++ mov r1, #0 ++ ldr r2, [r4, #-3540] ++ lsl r3, r3, #1 ++ strh r1, [r2, r3] @ movhi ++ ldrh r0, [r7, #-4] ++ bl update_vpc_list ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ b .L3427 ++.L3434: ++ mov r2, #0 ++ str r2, [r4, #-560] ++ ldr r2, .L3507+16 ++ ldrh r0, [r2] ++ cmp r0, #0 ++ addeq r0, r3, #1 ++ b .L3343 ++.L3439: ++ mov r0, #0 ++ b .L3343 ++.L3508: ++ .align 2 ++.L3507: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .word .LANCHOR2-2656 ++ .word .LANCHOR0 ++ .word .LANCHOR2+1984 ++ .word .LANCHOR2-3280 ++ .word .LANCHOR2-2704 ++ .word .LC157 ++ .word .LANCHOR2-2720 ++ .word .LANCHOR2-3296 ++ .word .LANCHOR2-3424 ++ .word .LC158 ++ .word .LANCHOR2-3472 ++ .word .LANCHOR0+2390 ++ .word .LANCHOR2-2712 ++ .word .LANCHOR0+2324 ++ .word .LANCHOR2+1986 ++ .word .LANCHOR0+2392 ++ .word .LANCHOR2-3524 ++ .fnend ++ .size ftl_do_gc, .-ftl_do_gc ++ .align 2 ++ .global FtlCacheWriteBack ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlCacheWriteBack, %function ++FtlCacheWriteBack: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r6, .L3552 ++ ldr r9, [r6, #-3612] ++ cmp r9, #0 ++ bne .L3511 ++ ldr r4, .L3552+4 ++ ldr r1, [r4, #2444] ++ cmp r1, #0 ++ beq .L3511 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ mov r7, #0 ++ ldr r5, [r6, #1992] ++ mov r10, #36 ++ ldr fp, .L3552+8 ++ cmp r3, #0 ++ ldr r0, [r4, #2448] ++ ldrbne r8, [r5, #8] @ zero_extendqisi2 ++ moveq r8, r9 ++ ldrb r3, [r5, #9] @ zero_extendqisi2 ++ subne r8, r8, #1 ++ clzne r8, r8 ++ lsrne r8, r8, #5 ++ mov r2, r8 ++ bl FlashProgPages ++.L3514: ++ ldr r3, [r4, #2444] ++ cmp r7, r3 ++ bcc .L3521 ++.L3533: ++ mov r3, #0 ++ str r3, [r4, #2444] ++.L3511: ++ mov r0, #0 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3521: ++ mul r3, r10, r7 ++ ldr r2, [r4, #2448] ++ add r0, r2, r3 ++ ldr r2, [r2, r3] ++ cmn r2, #1 ++ beq .L3516 ++ ldr r2, [r0, #4] ++ cmp r8, #0 ++ add r1, sp, #12 ++ ldr r0, [r0, #16] ++ str r3, [sp, #4] ++ orrne r2, r2, #-2147483648 ++ str r2, [sp, #12] ++ mov r2, #1 ++ bl log2phys ++ ldr r2, [r4, #2448] ++ ldr r3, [sp, #4] ++ add r3, r2, r3 ++ ldr r3, [r3, #12] ++ ldr r0, [r3, #12] ++ cmn r0, #1 ++ beq .L3519 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r1, [r6, #-3540] ++ lsl r2, r0, #1 ++ mov r3, r0 ++ ldrh r2, [r1, r2] ++ cmp r2, #0 ++ bne .L3520 ++ mov r1, r0 ++ str r0, [sp, #4] ++ mov r0, fp ++ bl printk ++ ldr r3, [sp, #4] ++.L3520: ++ mov r0, r3 ++ bl decrement_vpc_count ++.L3519: ++ add r7, r7, #1 ++ b .L3514 ++.L3531: ++ mov r7, #36 ++ ldr r3, [r4, #2448] ++ mul r7, r7, r9 ++ mov r10, #0 ++ mov fp, #1 ++ mvn r2, #0 ++ str r2, [r3, r7] ++.L3522: ++ ldr r2, [r4, #2448] ++ add r3, r2, r7 ++ ldr r2, [r2, r7] ++ ldr r0, [r3, #4] ++ cmn r2, #1 ++ beq .L3526 ++ cmp r8, #0 ++ mov r2, #1 ++ orrne r0, r0, #-2147483648 ++ add r1, sp, #12 ++ str r0, [sp, #12] ++ ldr r0, [r3, #16] ++ bl log2phys ++ ldr r3, [r4, #2448] ++ add r7, r3, r7 ++ ldr r3, [r7, #12] ++ ldr r0, [r3, #12] ++ cmn r0, #1 ++ beq .L3529 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r2, [r6, #-3540] ++ lsl r3, r0, #1 ++ mov r7, r0 ++ ldrh r2, [r2, r3] ++ cmp r2, #0 ++ bne .L3530 ++ mov r1, r0 ++ ldr r0, .L3552+8 ++ bl printk ++.L3530: ++ mov r0, r7 ++ bl decrement_vpc_count ++.L3529: ++ add r9, r9, #1 ++.L3516: ++ ldr r3, [r4, #2444] ++ cmp r9, r3 ++ bcc .L3531 ++ movw r5, #16386 ++.L3534: ++ ldr r3, .L3552+12 ++ ldrh r3, [r3] ++ cmp r3, #0 ++ beq .L3533 ++ mov r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ subs r5, r5, #1 ++ bne .L3534 ++ b .L3533 ++.L3526: ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r5] ++ cmp r3, r0 ++ bne .L3523 ++ ldr r1, [r6, #-3540] ++ lsl r3, r3, #1 ++ ldrh r0, [r5, #4] ++ ldrh r2, [r1, r3] ++ sub r2, r2, r0 ++ strh r2, [r1, r3] @ movhi ++ ldr r3, .L3552+16 ++ strb r10, [r5, #6] ++ strh r10, [r5, #4] @ movhi ++ ldrh r3, [r3] ++ strh r3, [r5, #2] @ movhi ++.L3523: ++ ldrh r3, [r5, #4] ++ cmp r3, #0 ++ bne .L3524 ++ mov r0, r5 ++ bl allocate_new_data_superblock ++.L3524: ++ ldr r3, [r6, #-3140] ++ add r3, r3, #1 ++ str r3, [r6, #-3140] ++ ldr r3, [r4, #2448] ++ add r3, r3, r7 ++ ldr r0, [r3, #4] ++ ubfx r0, r0, #10, #16 ++ bl FtlGcMarkBadPhyBlk ++ mov r0, r5 ++ bl get_new_active_ppa ++ ldr r3, [r4, #2448] ++ mov r2, r0 ++ str r0, [sp, #12] ++ mov r1, #1 ++ add r0, r3, r7 ++ str r2, [r0, #4] ++ mov r2, r8 ++ ldrb r3, [r5, #9] @ zero_extendqisi2 ++ bl FlashProgPages ++ ldr r3, [r4, #2448] ++ ldr r3, [r3, r7] ++ cmn r3, #1 ++ streq fp, [r6, #-3612] ++ ldr r3, [r6, #-3612] ++ cmp r3, #0 ++ beq .L3522 ++ b .L3511 ++.L3553: ++ .align 2 ++.L3552: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC159 ++ .word .LANCHOR2-2658 ++ .word .LANCHOR0+2390 ++ .fnend ++ .size FtlCacheWriteBack, .-FtlCacheWriteBack ++ .align 2 ++ .global FtlSysFlush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSysFlush, %function ++FtlSysFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3560 ++ ldr r3, [r3, #-3612] ++ cmp r3, #0 ++ bne .L3557 ++ ldr r3, .L3560+4 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, [r3, #500] ++ cmp r4, #1 ++ bne .L3555 ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ mov r0, r4 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L3555: ++ mov r0, #0 ++ pop {r4, pc} ++.L3557: ++ mov r0, #0 ++ bx lr ++.L3561: ++ .align 2 ++.L3560: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .fnend ++ .size FtlSysFlush, .-FtlSysFlush ++ .align 2 ++ .global FtlDeInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlDeInit, %function ++FtlDeInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3568 ++ ldr r3, [r3, #500] ++ cmp r3, #1 ++ bne .L3565 ++ push {r4, lr} ++ .save {r4, lr} ++ bl FtlSysFlush ++ mov r0, #0 ++ pop {r4, pc} ++.L3565: ++ mov r0, #0 ++ bx lr ++.L3569: ++ .align 2 ++.L3568: ++ .word .LANCHOR1 ++ .fnend ++ .size FtlDeInit, .-FtlDeInit ++ .align 2 ++ .global ftl_deinit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_deinit, %function ++ftl_deinit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl ftl_flash_de_init ++ bl FtlDeInit ++ pop {r4, lr} ++ b ftl_flash_de_init ++ .fnend ++ .size ftl_deinit, .-ftl_deinit ++ .align 2 ++ .global rk_ftl_de_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_de_init, %function ++rk_ftl_de_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r1, #0 ++ ldr r0, .L3574 ++ bl printk ++ pop {r4, lr} ++ b ftl_deinit ++.L3575: ++ .align 2 ++.L3574: ++ .word .LC160 ++ .fnend ++ .size rk_ftl_de_init, .-rk_ftl_de_init ++ .align 2 ++ .global ftl_cache_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_cache_flush, %function ++ftl_cache_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b FtlCacheWriteBack ++ .fnend ++ .size ftl_cache_flush, .-ftl_cache_flush ++ .align 2 ++ .global rk_ftl_cache_write_back ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_cache_write_back, %function ++rk_ftl_cache_write_back: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b FtlCacheWriteBack ++ .fnend ++ .size rk_ftl_cache_write_back, .-rk_ftl_cache_write_back ++ .align 2 ++ .global ftl_discard ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_discard, %function ++ftl_discard: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r6, r0 ++ ldr r5, .L3596 ++ ldr r3, [r5, #2432] ++ cmp r3, r1 ++ cmpcs r3, r0 ++ movls r0, #1 ++ movhi r0, #0 ++ bls .L3586 ++ add r2, r6, r1 ++ mov r4, r1 ++ cmp r3, r2 ++ bcc .L3586 ++ cmp r1, #31 ++ bls .L3578 ++ ldr r7, .L3596+4 ++ ldr r3, [r7, #-3612] ++ cmp r3, #0 ++ bne .L3578 ++ bl FtlCacheWriteBack ++ movw r3, #2396 ++ mov r0, r6 ++ ldrh r5, [r5, r3] ++ mov r1, r5 ++ bl __aeabi_uidiv ++ smulbb r3, r0, r5 ++ mov r8, r0 ++ sub r6, r6, r3 ++ uxth r6, r6 ++ cmp r6, #0 ++ beq .L3580 ++ sub r5, r5, r6 ++ add r8, r0, #1 ++ cmp r5, r4 ++ movcs r5, r4 ++ uxth r5, r5 ++ sub r4, r4, r5 ++.L3580: ++ ldr r5, .L3596+8 ++ mvn r3, #0 ++ str r3, [sp, #4] ++ mov r6, r5 ++.L3581: ++ ldrh r3, [r5] ++ cmp r4, r3 ++ bcs .L3583 ++ ldr r3, [r7, #1996] ++ cmp r3, #32 ++ bls .L3584 ++ mov r3, #0 ++ str r3, [r7, #1996] ++ bl l2p_flush ++ bl FtlVpcTblFlush ++.L3584: ++ mov r0, #0 ++.L3578: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L3583: ++ mov r2, #0 ++ mov r1, sp ++ mov r0, r8 ++ bl log2phys ++ ldr r3, [sp] ++ cmn r3, #1 ++ beq .L3582 ++ ldr r3, [r7, #1996] ++ mov r2, #1 ++ add r1, sp, #4 ++ mov r0, r8 ++ add r3, r3, #1 ++ str r3, [r7, #1996] ++ ldr r3, [r7, #-3360] ++ add r3, r3, #1 ++ str r3, [r7, #-3360] ++ bl log2phys ++ ldr r0, [sp] ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ bl decrement_vpc_count ++.L3582: ++ ldrh r3, [r6] ++ add r8, r8, #1 ++ sub r4, r4, r3 ++ b .L3581 ++.L3586: ++ mvn r0, #0 ++ b .L3578 ++.L3597: ++ .align 2 ++.L3596: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2396 ++ .fnend ++ .size ftl_discard, .-ftl_discard ++ .align 2 ++ .global FtlDiscard ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlDiscard, %function ++FtlDiscard: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_discard ++ .fnend ++ .size FtlDiscard, .-FtlDiscard ++ .align 2 ++ .global ftl_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_read, %function ++ftl_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L3643 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #84 ++ sub sp, sp, #84 ++ ldr ip, [ip, #500] ++ cmp ip, #1 ++ bne .L3623 ++ cmp r0, #16 ++ mov r8, r3 ++ str r2, [sp, #28] ++ mov r5, r1 ++ bne .L3601 ++ mov r2, r3 ++ ldr r1, [sp, #28] ++ add r0, r5, #256 ++ bl FtlVendorPartRead ++ mov r10, r0 ++.L3599: ++ mov r0, r10 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3601: ++ ldr r2, .L3643+4 ++ ldr r1, [sp, #28] ++ ldr r3, [r2, #2432] ++ cmp r1, r3 ++ cmpls r5, r3 ++ bcs .L3623 ++ add r1, r5, r1 ++ cmp r3, r1 ++ str r1, [sp, #44] ++ bcc .L3623 ++ movw r3, #2396 ++ mov r0, r5 ++ ldrh r4, [r2, r3] ++ mov r1, r4 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #44] ++ mov r1, r4 ++ str r0, [sp, #36] ++ sub r0, r3, #1 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #36] ++ ldr r1, [sp, #28] ++ str r0, [sp, #40] ++ rsb r3, r3, #1 ++ add r3, r3, r0 ++ str r3, [sp, #32] ++ ldr r3, .L3643+8 ++ ldr r2, [r3, #-3336] ++ add r2, r2, r1 ++ ldr r1, [sp, #32] ++ str r2, [r3, #-3336] ++ ldr r2, [r3, #-3364] ++ add r2, r2, r1 ++ mov r1, r0 ++ ldr r0, [sp, #36] ++ str r2, [r3, #-3364] ++ bl FtlCacheMetchLpa ++ cmp r0, #0 ++ beq .L3602 ++ bl FtlCacheWriteBack ++.L3602: ++ ldr r6, [sp, #36] ++ mov r3, #0 ++ ldr r4, .L3643+8 ++ mov r7, r3 ++ mov r10, r3 ++ str r3, [sp, #52] ++ str r3, [sp, #48] ++.L3603: ++ ldr r3, [sp, #32] ++ cmp r3, #0 ++ bne .L3620 ++ ldr r3, .L3643+12 ++ ldrh r3, [r3, #-2] ++ cmp r3, #0 ++ beq .L3599 ++ mov r1, #1 ++ ldr r0, [sp, #32] ++ bl ftl_do_gc ++ b .L3599 ++.L3620: ++ mov r2, #0 ++ add r1, sp, #76 ++ mov r0, r6 ++ bl log2phys ++ ldr r3, [sp, #76] ++ cmn r3, #1 ++ moveq r9, #0 ++ beq .L3605 ++ ldr r2, [r4, #-536] ++ mov r9, #36 ++ mla r9, r9, r7, r2 ++ str r3, [r9, #4] ++ ldr r3, [sp, #36] ++ cmp r6, r3 ++ bne .L3609 ++ ldr r3, [r4, #-508] ++ mov r0, r5 ++ str r3, [r9, #8] ++ ldr r3, .L3643+16 ++ ldrh fp, [r3] ++ mov r1, fp ++ bl __aeabi_uidivmod ++ ldr r2, [sp, #28] ++ sub r3, fp, r1 ++ str r1, [sp, #56] ++ cmp r2, r3 ++ movcc r3, r2 ++ cmp r3, fp ++ str r3, [sp, #48] ++ streq r8, [r9, #8] ++.L3610: ++ ldr r3, .L3643+20 ++ ldr r2, [r4, #-496] ++ str r6, [r9, #16] ++ ldrh r3, [r3] ++ mul r3, r7, r3 ++ add r7, r7, #1 ++ bic r3, r3, #3 ++ add r3, r2, r3 ++ str r3, [r9, #12] ++ b .L3608 ++.L3607: ++ mla r0, r0, r6, r9 ++ ldr r2, [sp, #44] ++ cmp r5, r0 ++ movls r3, #1 ++ movhi r3, #0 ++ cmp r2, r0 ++ movls r3, #0 ++ cmp r3, #0 ++ beq .L3606 ++ sub r0, r0, r5 ++ mov r2, #512 ++ mov r1, #0 ++ add r0, r8, r0, lsl #9 ++ bl ftl_memset ++.L3606: ++ add r9, r9, #1 ++.L3605: ++ ldr r3, .L3643+16 ++ ldrh r0, [r3] ++ cmp r9, r0 ++ bcc .L3607 ++.L3608: ++ ldr r3, [sp, #32] ++ add r6, r6, #1 ++ subs r3, r3, #1 ++ str r3, [sp, #32] ++ beq .L3612 ++ ldr r3, .L3643+24 ++ ldrh r3, [r3] ++ cmp r7, r3, lsl #3 ++ bne .L3603 ++.L3612: ++ cmp r7, #0 ++ beq .L3603 ++ mov r2, #0 ++ mov r1, r7 ++ ldr r0, [r4, #-536] ++ mov fp, #0 ++ bl FlashReadPages ++ ldr r3, [sp, #52] ++ lsl r3, r3, #9 ++ str r3, [sp, #68] ++ ldr r3, [sp, #56] ++ lsl r3, r3, #9 ++ str r3, [sp, #60] ++ ldr r3, [sp, #48] ++ lsl r3, r3, #9 ++ str r3, [sp, #64] ++.L3619: ++ mov r9, #36 ++ ldr r3, [r4, #-536] ++ mul r9, r9, fp ++ ldr r1, [sp, #36] ++ add r3, r3, r9 ++ ldr r2, [r3, #16] ++ cmp r1, r2 ++ bne .L3614 ++ ldr r1, [r3, #8] ++ ldr r3, [r4, #-508] ++ cmp r1, r3 ++ bne .L3615 ++ ldr r3, [sp, #60] ++ mov r0, r8 ++ ldr r2, [sp, #64] ++ add r1, r1, r3 ++.L3642: ++ bl ftl_memcpy ++.L3615: ++ ldr r3, [r4, #-536] ++ ldr r2, [r3, r9] ++ add r1, r3, r9 ++ cmn r2, #1 ++ ldreq r3, [r4, #-3164] ++ moveq r10, r2 ++ addeq r3, r3, #1 ++ streq r3, [r4, #-3164] ++ ldr r3, [r1, #12] ++ ldr r2, [r1, #16] ++ ldr r3, [r3, #8] ++ cmp r2, r3 ++ beq .L3617 ++ ldr r3, [r4, #-3164] ++ add r3, r3, #1 ++ str r3, [r4, #-3164] ++ ldr r2, [r1, #8] ++ ldr r3, [r1, #12] ++ ldr r0, [r2, #4] ++ str r0, [sp, #16] ++ ldr r2, [r2] ++ ldr r0, .L3643+28 ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r2, [r1, #4] ++ ldr r3, [r3] ++ ldr r1, [r1, #16] ++ bl printk ++.L3617: ++ ldr r3, [r4, #-536] ++ add r2, r3, r9 ++ ldr r3, [r3, r9] ++ cmp r3, #256 ++ bne .L3618 ++ ldr r0, [r2, #4] ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++.L3618: ++ add fp, fp, #1 ++ cmp r7, fp ++ bne .L3619 ++ mov r7, #0 ++ b .L3603 ++.L3609: ++ ldr r3, [sp, #40] ++ cmp r6, r3 ++ bne .L3611 ++ ldr r3, [r4, #-504] ++ ldr r1, [sp, #44] ++ str r3, [r9, #8] ++ ldr r3, .L3643+16 ++ ldrh r2, [r3] ++ mul r3, r2, r6 ++ sub r1, r1, r3 ++ cmp r2, r1 ++ str r1, [sp, #52] ++ bne .L3610 ++.L3641: ++ sub r3, r3, r5 ++ add r3, r8, r3, lsl #9 ++ str r3, [r9, #8] ++ b .L3610 ++.L3611: ++ ldr r3, .L3643+16 ++ ldrh r3, [r3] ++ mul r3, r6, r3 ++ b .L3641 ++.L3614: ++ ldr r1, [sp, #40] ++ cmp r1, r2 ++ bne .L3615 ++ ldr r1, [r3, #8] ++ ldr r3, [r4, #-504] ++ cmp r1, r3 ++ bne .L3615 ++ ldr r3, .L3643+16 ++ ldr r2, [sp, #68] ++ ldrh r0, [r3] ++ ldr r3, [sp, #40] ++ mul r0, r3, r0 ++ sub r0, r0, r5 ++ add r0, r8, r0, lsl #9 ++ b .L3642 ++.L3623: ++ mvn r10, #0 ++ b .L3599 ++.L3644: ++ .align 2 ++.L3643: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR2-2656 ++ .word .LANCHOR0+2396 ++ .word .LANCHOR0+2402 ++ .word .LANCHOR0+2324 ++ .word .LC148 ++ .fnend ++ .size ftl_read, .-ftl_read ++ .align 2 ++ .global ftl_vendor_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_vendor_read, %function ++ftl_vendor_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ mov r0, #16 ++ b ftl_read ++ .fnend ++ .size ftl_vendor_read, .-ftl_vendor_read ++ .align 2 ++ .global FlashBootVendorRead ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashBootVendorRead, %function ++FlashBootVendorRead: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ bl rknand_device_lock ++ ldr r3, .L3650 ++ ldr r3, [r3, #500] ++ cmp r3, #1 ++ mvnne r4, #0 ++ bne .L3647 ++ mov r0, r4 ++ mov r2, r6 ++ mov r1, r5 ++ bl ftl_vendor_read ++ mov r4, r0 ++.L3647: ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L3651: ++ .align 2 ++.L3650: ++ .word .LANCHOR1 ++ .fnend ++ .size FlashBootVendorRead, .-FlashBootVendorRead ++ .align 2 ++ .global ftl_sys_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_sys_read, %function ++ftl_sys_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ add r1, r0, #256 ++ mov r0, #16 ++ b ftl_read ++ .fnend ++ .size ftl_sys_read, .-ftl_sys_read ++ .align 2 ++ .global StorageSysDataLoad ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type StorageSysDataLoad, %function ++StorageSysDataLoad: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r1 ++ mov r5, r0 ++ mov r2, #512 ++ mov r1, #0 ++ mov r0, r4 ++ bl ftl_memset ++ bl rknand_device_lock ++ mov r2, r4 ++ mov r1, #1 ++ mov r0, r5 ++ bl ftl_sys_read ++ mov r4, r0 ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++ .fnend ++ .size StorageSysDataLoad, .-StorageSysDataLoad ++ .align 2 ++ .global FtlRead ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlRead, %function ++FtlRead: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_read ++ .fnend ++ .size FtlRead, .-FtlRead ++ .align 2 ++ .global FtlInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlInit, %function ++FtlInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mvn r3, #0 ++ ldr r7, .L3673 ++ ldr r5, .L3673+4 ++ ldr r6, .L3673+8 ++ ldr r1, .L3673+12 ++ str r3, [r7, #500] ++ mov r3, #0 ++ ldr r0, .L3673+16 ++ str r3, [r5, #2000] ++ str r3, [r5, #-3612] ++ bl printk ++ add r0, r6, #124 ++ bl FtlConstantsInit ++ bl FtlMemInit ++ bl FtlVariablesInit ++ add r3, r6, #2320 ++ add r3, r3, #8 ++ ldrh r0, [r3] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cmp r0, #0 ++ beq .L3657 ++ ldr r1, .L3673+20 ++ ldr r0, .L3673+24 ++.L3672: ++ bl printk ++.L3658: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L3657: ++ bl FtlSysBlkInit ++ subs r4, r0, #0 ++ ldrne r1, .L3673+20 ++ ldrne r0, .L3673+28 ++ bne .L3672 ++.L3659: ++ mov r1, #1 ++ sub r5, r5, #3520 ++ str r1, [r7, #500] ++ bl ftl_do_gc ++ ldrh r7, [r5, #-4] ++ cmp r7, #15 ++ bhi .L3660 ++.L3663: ++ ldr r3, .L3673+32 ++ movw r2, #65535 ++ ldrh r3, [r3] ++ cmp r3, r2 ++ bne .L3661 ++ ldr r2, .L3673+36 ++ ldrh r2, [r2] ++ cmp r2, r3 ++ bne .L3661 ++ and r0, r4, #63 ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ bl FtlGcRefreshBlock ++.L3661: ++ mov r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ mov r1, #1 ++ mov r0, #0 ++ bl ftl_do_gc ++ ldrh r2, [r5, #-4] ++ add r3, r7, #2 ++ cmp r2, r3 ++ bhi .L3658 ++ add r4, r4, #1 ++ cmp r4, #4096 ++ bne .L3663 ++ b .L3658 ++.L3660: ++ ldrb r3, [r6, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3658 ++ mov r4, #128 ++.L3665: ++ mov r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ subs r4, r4, #1 ++ bne .L3665 ++ b .L3658 ++.L3674: ++ .align 2 ++.L3673: ++ .word .LANCHOR1 ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC76 ++ .word .LC77 ++ .word .LANCHOR3+224 ++ .word .LC161 ++ .word .LC162 ++ .word .LANCHOR2-3284 ++ .word .LANCHOR2-2666 ++ .fnend ++ .size FtlInit, .-FtlInit ++ .align 2 ++ .global rk_ftl_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_init, %function ++rk_ftl_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r0, #2048 ++ bl ftl_dma32_malloc ++ mov r5, #0 ++ ldr r4, .L3680 ++ ldr r1, .L3680+4 ++ str r0, [r4, #2004] ++ sub r0, r1, #324 ++ str r5, [r4, #1688] ++ str r5, [r4, #1684] ++ str r5, [r4, #2008] ++ bl rknand_get_reg_addr ++ ldr r3, [r4, #1684] ++ cmp r3, r5 ++ mvneq r4, #0 ++ beq .L3675 ++ bl rk_nandc_irq_init ++ mov r3, #2048 ++ mov r2, r5 ++ mov r1, r5 ++ ldr r0, [r4, #2004] ++ bl FlashSramLoadStore ++ bl rknand_flash_cs_init ++ ldr r0, [r4, #1684] ++ bl FlashInit ++ subs r4, r0, #0 ++ bne .L3677 ++ bl FtlInit ++.L3677: ++ mov r1, r4 ++ ldr r0, .L3680+8 ++ bl printk ++.L3675: ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L3681: ++ .align 2 ++.L3680: ++ .word .LANCHOR2 ++ .word .LANCHOR2+2008 ++ .word .LC163 ++ .fnend ++ .size rk_ftl_init, .-rk_ftl_init ++ .align 2 ++ .global ftl_fix_nand_power_lost_error ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_fix_nand_power_lost_error, %function ++ftl_fix_nand_power_lost_error: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #48 ++ sub sp, sp, #48 ++ ldr r8, .L3697 ++ ldrb r3, [r8, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3682 ++ ldr r4, .L3697+4 ++ movw r3, #1846 ++ ldr r0, .L3697+8 ++ ldrh r6, [r4, r3] ++ sub r9, r4, #3520 ++ ldr r3, [r4, #-3540] ++ sub r5, r4, #3472 ++ mov r1, r6 ++ lsl r7, r6, #1 ++ ldrh r2, [r3, r7] ++ bl printk ++ ldrh r0, [r9] ++ bl FtlGcRefreshOpenBlock ++ ldrh r0, [r5] ++ bl FtlGcRefreshOpenBlock ++ mov r0, r9 ++ bl allocate_new_data_superblock ++ mov r0, r5 ++ movw r5, #4097 ++ bl allocate_new_data_superblock ++.L3684: ++ subs r5, r5, #1 ++ beq .L3688 ++ mov r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ ldr r3, [r4, #-3540] ++ ldrh r3, [r3, r7] ++ cmp r3, #0 ++ bne .L3684 ++.L3688: ++ ldr r3, [r4, #-3540] ++ mov r1, r6 ++ ldr r0, .L3697+8 ++ ldrh r2, [r3, r7] ++ bl printk ++ ldr r3, [r4, #-3540] ++ ldrh r5, [r3, r7] ++ cmp r5, #0 ++ bne .L3686 ++ add r0, sp, #48 ++ movw r9, #65535 ++ strh r6, [r0, #-48]! @ movhi ++ mov r10, #36 ++ bl make_superblock ++ movw r3, #2324 ++ add r0, sp, #14 ++ ldrh lr, [r8, r3] ++ mov r2, r5 ++ ldr r8, [r4, #-3608] ++ mov ip, r5 ++.L3689: ++ uxth r3, r2 ++ cmp lr, r3 ++ bhi .L3691 ++ ldr r3, [r4, #-3540] ++ mov r1, r6 ++ ldr r0, .L3697+12 ++ ldrh r2, [r3, r7] ++ bl printk ++ mov r2, r5 ++ mov r1, #0 ++ ldr r0, [r4, #-3608] ++ bl FlashEraseBlocks ++ mov r2, r5 ++ mov r1, #1 ++ ldr r0, [r4, #-3608] ++ bl FlashEraseBlocks ++.L3686: ++ mvn r2, #0 ++ movw r3, #1846 ++ strh r2, [r4, r3] @ movhi ++.L3682: ++ add sp, sp, #48 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3691: ++ ldrh r3, [r0, #2]! ++ add r2, r2, #1 ++ cmp r3, r9 ++ mlane r1, r10, r5, r8 ++ lslne r3, r3, #10 ++ addne r5, r5, #1 ++ uxthne r5, r5 ++ stmibne r1, {r3, ip} ++ strne ip, [r1, #12] ++ b .L3689 ++.L3698: ++ .align 2 ++.L3697: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC164 ++ .word .LC165 ++ .fnend ++ .size ftl_fix_nand_power_lost_error, .-ftl_fix_nand_power_lost_error ++ .align 2 ++ .global rk_ftl_garbage_collect ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_garbage_collect, %function ++rk_ftl_garbage_collect: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_do_gc ++ .fnend ++ .size rk_ftl_garbage_collect, .-rk_ftl_garbage_collect ++ .align 2 ++ .global ftl_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_write, %function ++ftl_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov fp, r3 ++ ldr r4, .L3768 ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r3, [r4, #-3612] ++ cmp r3, #0 ++ bne .L3741 ++ mov r9, r2 ++ ldr r2, .L3768+4 ++ ldr r2, [r2, #500] ++ cmp r2, #1 ++ movne r0, r3 ++ bne .L3700 ++ cmp r0, #16 ++ mov r7, r1 ++ bne .L3702 ++ mov r2, fp ++ mov r1, r9 ++ add r0, r7, #256 ++ bl FtlVendorPartWrite ++.L3700: ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3702: ++ ldr r10, .L3768+8 ++ ldr r3, [r10, #2432] ++ cmp r9, r3 ++ cmpls r1, r3 ++ bcs .L3744 ++ add r6, r1, r9 ++ cmp r3, r6 ++ bcc .L3744 ++ mov r3, #2048 ++ mov r0, r7 ++ str r3, [r4, #2012] ++ movw r3, #2396 ++ ldrh r5, [r10, r3] ++ mov r1, r5 ++ bl __aeabi_uidiv ++ mov r1, r5 ++ str r0, [sp, #4] ++ sub r0, r6, #1 ++ bl __aeabi_uidiv ++ ldr r2, [sp, #4] ++ cmp r9, r5, lsl #1 ++ ldr r3, [r4, #-3356] ++ ldr r1, [r10, #2444] ++ sub r6, r0, r2 ++ str r0, [sp, #24] ++ add r8, r6, #1 ++ add r3, r3, r8 ++ str r3, [r4, #-3356] ++ ldr r3, [r4, #-3340] ++ add r3, r3, r9 ++ str r3, [r4, #-3340] ++ movcs r3, #1 ++ movcc r3, #0 ++ cmp r1, #0 ++ str r3, [sp, #16] ++ beq .L3745 ++ mov r3, #36 ++ ldr r2, [r10, #2448] ++ mul r3, r3, r1 ++ sub r3, r3, #36 ++ add r10, r2, r3 ++ ldr r3, [sp, #4] ++ ldr r2, [r10, #16] ++ cmp r3, r2 ++ strne fp, [sp, #12] ++ bne .L3705 ++ ldr r2, [r4, #-3352] ++ mov r1, r5 ++ mov r0, r7 ++ add r2, r2, #1 ++ str r2, [r4, #-3352] ++ ldr r2, [r4, #2016] ++ add r2, r2, #1 ++ str r2, [r4, #2016] ++ bl __aeabi_uidivmod ++ sub r5, r5, r1 ++ ldr r3, [r10, #8] ++ cmp r9, r5 ++ mov r0, r1 ++ movcc r5, r9 ++ mov r1, fp ++ lsl r8, r5, #9 ++ add r0, r3, r0, lsl #9 ++ mov r2, r8 ++ bl ftl_memcpy ++ cmp r6, #0 ++ bne .L3706 ++ ldr r3, [r4, #2016] ++ cmp r3, #2 ++ bgt .L3706 ++.L3741: ++ mov r0, #0 ++ b .L3700 ++.L3706: ++ add r3, fp, r8 ++ sub r9, r9, r5 ++ str r3, [sp, #12] ++ add r7, r7, r5 ++ ldr r3, [sp, #4] ++ mov r8, r6 ++ add r3, r3, #1 ++ str r3, [sp, #4] ++.L3705: ++ mov r3, #0 ++ str r3, [r4, #2016] ++.L3704: ++ ldr r1, [sp, #24] ++ ldr r0, [sp, #4] ++ bl FtlCacheMetchLpa ++ cmp r0, #0 ++ beq .L3707 ++ bl FtlCacheWriteBack ++.L3707: ++ ldr r6, [sp, #4] ++ ldr r10, .L3768+8 ++ ldr r5, .L3768+12 ++ str r5, [r4, #1992] ++.L3708: ++ cmp r8, #0 ++ bne .L3736 ++ ldr r3, [sp, #24] ++ mov r0, r8 ++ ldr r2, [sp, #4] ++ sub r1, r3, r2 ++ bl ftl_do_gc ++ ldr r2, .L3768+12 ++ ldrh r3, [r2, #-4] ++ mov r4, r2 ++ cmp r3, #5 ++ bls .L3737 ++ cmp r3, #31 ++ bhi .L3741 ++ ldr r3, .L3768+8 ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3741 ++.L3737: ++ ldr r5, .L3768+16 ++.L3740: ++ ldr r3, .L3768+20 ++ ldrh r2, [r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3739 ++ ldr r3, .L3768+24 ++ ldrh r3, [r3] ++ cmp r3, r2 ++ bne .L3739 ++ ldrh r2, [r5, #-8] ++ cmp r2, r3 ++ bne .L3739 ++ and r0, r8, #7 ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ bl FtlGcRefreshBlock ++.L3739: ++ ldr r3, .L3768+28 ++ mov r1, #1 ++ mov r2, #128 ++ mov r0, r1 ++ strh r2, [r3] @ movhi ++ strh r2, [r3, #-2] @ movhi ++ bl ftl_do_gc ++ mov r1, #1 ++ mov r0, #0 ++ bl ftl_do_gc ++ ldr r3, .L3768 ++ ldr r3, [r3, #-3612] ++ cmp r3, #0 ++ bne .L3741 ++ ldrh r3, [r4, #-4] ++ cmp r3, #2 ++ bhi .L3741 ++ add r8, r8, #1 ++ cmp r8, #256 ++ bne .L3740 ++ b .L3741 ++.L3745: ++ str fp, [sp, #12] ++ b .L3704 ++.L3736: ++ ldrh r1, [r5, #4] ++ ldr r4, .L3768 ++ cmp r1, #0 ++ bne .L3709 ++ sub r2, r4, #3520 ++ ldr fp, .L3768+4 ++ cmp r5, r2 ++ bne .L3710 ++ sub r0, r4, #3472 ++ ldrh r5, [r0, #4] ++ cmp r5, #0 ++ bne .L3711 ++ bl allocate_new_data_superblock ++ str r5, [fp, #3448] ++.L3711: ++ ldr r0, .L3768+12 ++ bl allocate_new_data_superblock ++ ldr r5, .L3768+12 ++ ldr r1, [fp, #3448] ++ add r2, r5, #48 ++ cmp r1, #0 ++ movne r5, r2 ++.L3712: ++ ldrh r2, [r5, #4] ++ cmp r2, #0 ++ bne .L3713 ++ mov r0, r5 ++ bl allocate_new_data_superblock ++.L3713: ++ str r5, [r4, #1992] ++.L3709: ++ ldr r1, [r10, #2444] ++ ldr r2, [r4, #-540] ++ sub r2, r2, r1 ++ ldrh r1, [r5, #4] ++ cmp r2, r8 ++ movcs r2, r8 ++ cmp r1, r2 ++ movcc r3, r1 ++ movcs r3, r2 ++ str r3, [sp, #36] ++ mov r3, #0 ++.L3766: ++ str r3, [sp, #20] ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #36] ++ cmp r3, r2 ++ bne .L3732 ++.L3715: ++ ldr r3, [sp, #20] ++ ldr r1, .L3768 ++ ldr r2, [r10, #2444] ++ sub r8, r8, r3 ++ ldr r3, [sp, #16] ++ ldr r1, [r1, #-540] ++ cmp r2, r1 ++ orrcs r3, r3, #1 ++ cmp r3, #0 ++ bne .L3733 ++ ldrh r2, [r5, #4] ++ cmp r2, #0 ++ beq .L3733 ++.L3735: ++ mov r3, #0 ++ str r3, [sp, #16] ++ b .L3708 ++.L3710: ++ str r1, [fp, #3448] ++ ldrh r1, [r2, #4] ++ cmp r1, #0 ++ movne r5, r2 ++ bne .L3713 ++ mov r0, r5 ++ bl allocate_new_data_superblock ++ b .L3712 ++.L3732: ++ ldrh r2, [r5, #4] ++ cmp r2, #0 ++ beq .L3715 ++ ldr r3, [sp, #24] ++ sub r4, r3, r6 ++ ldr r3, [sp, #16] ++ clz r4, r4 ++ lsr r4, r4, #5 ++ and r2, r4, r3 ++ ldr r3, [sp, #20] ++ cmp r3, #0 ++ moveq r2, #0 ++ andne r2, r2, #1 ++ cmp r2, #0 ++ beq .L3716 ++ ldr r3, .L3768+32 ++ add r2, r7, r9 ++ ldrh r1, [r3] ++ mls r2, r1, r6, r2 ++ cmp r1, r2 ++ bne .L3715 ++.L3716: ++ mov r2, #0 ++ add r1, sp, #40 ++ mov r0, r6 ++ mov fp, #36 ++ bl log2phys ++ mov r0, r5 ++ bl get_new_active_ppa ++ ldr r2, .L3768+36 ++ ldr r1, [r10, #2444] ++ ldr ip, [r10, #2448] ++ ldrh r2, [r2] ++ mla ip, fp, r1, ip ++ mul lr, r2, r1 ++ str r0, [ip, #4] ++ ldr r0, .L3768 ++ bic r3, lr, #3 ++ str r6, [ip, #16] ++ str r3, [sp, #28] ++ ldr lr, [sp, #28] ++ ldr r3, [r0, #-492] ++ ldr r0, [r0, #-512] ++ str r3, [sp, #32] ++ add r3, r3, lr ++ str r3, [sp, #8] ++ str r3, [ip, #12] ++ ldr r3, .L3768+40 ++ ldrh lr, [r3] ++ mul r1, r1, lr ++ bic r1, r1, #3 ++ add r1, r0, r1 ++ ldr r0, [sp, #8] ++ str r1, [ip, #8] ++ mov r1, #0 ++ bl ftl_memset ++ ldr r3, [sp, #4] ++ cmp r3, r6 ++ orreq r4, r4, #1 ++ cmp r4, #0 ++ beq .L3717 ++ cmp r3, r6 ++ bne .L3718 ++ ldr r3, .L3768+32 ++ mov r0, r7 ++ ldrh r4, [r3] ++ mov r1, r4 ++ bl __aeabi_uidivmod ++ sub r4, r4, r1 ++ mov fp, r1 ++ cmp r4, r9 ++ movcs r4, r9 ++.L3719: ++ ldr r3, .L3768+32 ++ ldrh r2, [r3] ++ cmp r2, r4 ++ bne .L3720 ++ ldr r3, [sp, #4] ++ cmp r3, r6 ++ mulne r1, r4, r6 ++ ldrne r3, [sp, #12] ++ ldreq r1, [sp, #12] ++ subne r1, r1, r7 ++ addne r1, r3, r1, lsl #9 ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ beq .L3722 ++ ldr r2, [r10, #2444] ++ mov ip, #36 ++ ldr r0, [r10, #2448] ++ mla r2, ip, r2, r0 ++ str r1, [r2, #8] ++.L3723: ++ ldr r2, .L3768+44 ++ ldr r3, [sp, #32] ++ ldr r1, [sp, #28] ++ strh r2, [r3, r1] @ movhi ++ ldr r1, .L3768 ++ ldr r3, [sp, #8] ++ ldr r2, [r1, #-3328] ++ str r2, [r3, #4] ++ add r2, r2, #1 ++ cmn r2, #1 ++ ldr r3, [sp, #8] ++ moveq r2, #0 ++ str r2, [r1, #-3328] ++ ldr r2, [sp, #40] ++ str r6, [r3, #8] ++ add r6, r6, #1 ++ str r2, [r3, #12] ++ ldrh r2, [r5] ++ strh r2, [r3, #2] @ movhi ++ ldr r2, [r10, #2444] ++ ldr r3, [sp, #20] ++ add r2, r2, #1 ++ str r2, [r10, #2444] ++ add r3, r3, #1 ++ b .L3766 ++.L3718: ++ ldr r3, .L3768+32 ++ add r4, r7, r9 ++ mov fp, #0 ++ ldrh r2, [r3] ++ smulbb r2, r2, r6 ++ sub r4, r4, r2 ++ uxth r4, r4 ++ b .L3719 ++.L3722: ++ ldr r2, [r10, #2448] ++ mov ip, #36 ++ ldr r0, [r10, #2444] ++ mla r0, ip, r0, r2 ++ ldr r2, .L3768+40 ++ ldrh r2, [r2] ++.L3767: ++ ldr r0, [r0, #8] ++ b .L3764 ++.L3720: ++ ldr r2, [sp, #40] ++ cmn r2, #1 ++ beq .L3724 ++ ldr r1, [r10, #2448] ++ mov r0, #36 ++ str r2, [sp, #48] ++ ldr r2, [r10, #2444] ++ str r6, [sp, #60] ++ mla r2, r0, r2, r1 ++ add r0, sp, #44 ++ ldr r1, [r2, #8] ++ ldr r2, [r2, #12] ++ str r1, [sp, #52] ++ mov r1, #1 ++ str r2, [sp, #56] ++ mov r2, #0 ++ bl FlashReadPages ++ ldr r2, [sp, #44] ++ cmn r2, #1 ++ ldr r2, .L3768 ++ ldreq r1, [r2, #-3164] ++ addeq r1, r1, #1 ++ streq r1, [r2, #-3164] ++ beq .L3727 ++ ldr r3, [sp, #8] ++ ldr r1, [r3, #8] ++ cmp r6, r1 ++ beq .L3727 ++ ldr r1, [r2, #-3164] ++ ldr r0, .L3768+48 ++ add r1, r1, #1 ++ str r1, [r2, #-3164] ++ mov r2, r6 ++ ldr r1, [r3, #8] ++ bl printk ++.L3727: ++ ldr r3, [sp, #4] ++ lsl r2, r4, #9 ++ cmp r3, r6 ++ bne .L3728 ++ ldr r0, [r10, #2448] ++ mov ip, #36 ++ ldr r1, [r10, #2444] ++ mla r1, ip, r1, r0 ++ ldr r0, [r1, #8] ++ ldr r1, [sp, #12] ++ add r0, r0, fp, lsl #9 ++.L3764: ++ bl ftl_memcpy ++ b .L3723 ++.L3724: ++ ldr r2, [r10, #2448] ++ mov r1, #36 ++ ldr r0, [r10, #2444] ++ mla r0, r1, r0, r2 ++ ldr r2, .L3768+40 ++ mov r1, #0 ++ ldrh r2, [r2] ++ ldr r0, [r0, #8] ++ bl ftl_memset ++ b .L3727 ++.L3728: ++ ldr r3, .L3768+32 ++ mov lr, #36 ++ ldr r0, [r10, #2444] ++ ldr ip, [r10, #2448] ++ ldrh r1, [r3] ++ ldr r3, [sp, #12] ++ mla r0, lr, r0, ip ++ mul r1, r6, r1 ++ sub r1, r1, r7 ++ add r1, r3, r1, lsl #9 ++ b .L3767 ++.L3717: ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ beq .L3729 ++ ldr r2, [r10, #2444] ++ ldr r1, [r10, #2448] ++ ldr r3, .L3768+32 ++ mla fp, fp, r2, r1 ++ ldrh r2, [r3] ++ ldr r3, [sp, #12] ++ mul r2, r6, r2 ++ sub r2, r2, r7 ++ add r2, r3, r2, lsl #9 ++ str r2, [fp, #8] ++ b .L3723 ++.L3729: ++ ldr r3, .L3768+32 ++ ldr r2, [r10, #2444] ++ ldr r0, [r10, #2448] ++ ldrh r1, [r3] ++ mla fp, fp, r2, r0 ++ ldrh r2, [r3, #4] ++ ldr r3, [sp, #12] ++ mul r1, r6, r1 ++ ldr r0, [fp, #8] ++ sub r1, r1, r7 ++ add r1, r3, r1, lsl #9 ++ b .L3764 ++.L3733: ++ bl FtlCacheWriteBack ++ cmp r8, #1 ++ mov r2, #0 ++ str r2, [r10, #2444] ++ bhi .L3708 ++ b .L3735 ++.L3744: ++ mvn r0, #0 ++ b .L3700 ++.L3769: ++ .align 2 ++.L3768: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2-3520 ++ .word .LANCHOR2-2656 ++ .word .LANCHOR2-3284 ++ .word .LANCHOR2-2666 ++ .word .LANCHOR2-2718 ++ .word .LANCHOR0+2396 ++ .word .LANCHOR0+2402 ++ .word .LANCHOR0+2400 ++ .word -3947 ++ .word .LC166 ++ .fnend ++ .size ftl_write, .-ftl_write ++ .align 2 ++ .global ftl_vendor_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_vendor_write, %function ++ftl_vendor_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ mov r0, #16 ++ b ftl_write ++ .fnend ++ .size ftl_vendor_write, .-ftl_vendor_write ++ .align 2 ++ .global FlashBootVendorWrite ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashBootVendorWrite, %function ++FlashBootVendorWrite: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ bl rknand_device_lock ++ ldr r3, .L3775 ++ ldr r3, [r3, #500] ++ cmp r3, #1 ++ mvnne r4, #0 ++ bne .L3772 ++ mov r0, r4 ++ mov r2, r6 ++ mov r1, r5 ++ bl ftl_vendor_write ++ mov r4, r0 ++.L3772: ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L3776: ++ .align 2 ++.L3775: ++ .word .LANCHOR1 ++ .fnend ++ .size FlashBootVendorWrite, .-FlashBootVendorWrite ++ .align 2 ++ .global ftl_sys_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_sys_write, %function ++ftl_sys_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ add r1, r0, #256 ++ mov r0, #16 ++ b ftl_write ++ .fnend ++ .size ftl_sys_write, .-ftl_sys_write ++ .align 2 ++ .global StorageSysDataStore ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type StorageSysDataStore, %function ++StorageSysDataStore: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r1 ++ mov r4, r0 ++ bl rknand_device_lock ++ mov r2, r5 ++ mov r1, #1 ++ mov r0, r4 ++ bl ftl_sys_write ++ mov r4, r0 ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++ .fnend ++ .size StorageSysDataStore, .-StorageSysDataStore ++ .align 2 ++ .global FtlDumpSysBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlDumpSysBlock, %function ++FtlDumpSysBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ lsl r8, r0, #10 ++ ldr r4, .L3788 ++ .pad #24 ++ sub sp, sp, #24 ++ mov r6, r0 ++ mov r5, #0 ++ ldr r7, .L3788+4 ++ ldr r3, [r4, #-524] ++ add r9, r4, #1760 ++ ldr r10, .L3788+8 ++ str r3, [r4, #1768] ++ ldr r3, [r4, #-500] ++ str r3, [r4, #1772] ++.L3781: ++ ldrh r2, [r7] ++ sxth r3, r5 ++ cmp r3, r2 ++ blt .L3783 ++ add sp, sp, #24 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3783: ++ mov r2, #1 ++ orr r3, r3, r8 ++ mov r1, r2 ++ mov r0, r9 ++ str r3, [r4, #1764] ++ bl FlashReadPages ++ ldr r2, [r4, #1768] ++ mov r1, r6 ++ ldr r3, [r4, #1772] ++ mov r0, r10 ++ ldr r2, [r2] ++ str r2, [sp, #16] ++ ldr r2, [r3, #12] ++ str r2, [sp, #12] ++ ldr r2, [r3, #8] ++ str r2, [sp, #8] ++ ldr r2, [r3, #4] ++ str r2, [sp, #4] ++ ldr r3, [r3] ++ ldr r2, [r4, #1760] ++ str r3, [sp] ++ ldr r3, [r4, #1764] ++ bl printk ++ ldr r3, [r4, #1772] ++ ldr r3, [r3] ++ cmn r3, #1 ++ beq .L3782 ++ mov r3, #768 ++ mov r2, #4 ++ ldr r1, [r4, #-524] ++ ldr r0, .L3788+12 ++ bl rknand_print_hex ++.L3782: ++ add r5, r5, #1 ++ b .L3781 ++.L3789: ++ .align 2 ++.L3788: ++ .word .LANCHOR2 ++ .word .LANCHOR0+2392 ++ .word .LC167 ++ .word .LC168 ++ .fnend ++ .size FtlDumpSysBlock, .-FtlDumpSysBlock ++ .align 2 ++ .global dump_map_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type dump_map_info, %function ++dump_map_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3805 ++ movw r2, #2332 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #44 ++ sub sp, sp, #44 ++ ldrh r6, [r3, r2] ++ str r3, [sp, #24] ++.L3791: ++ ldr r3, .L3805+4 ++ ldr r4, .L3805+8 ++ ldrh r3, [r3] ++ cmp r3, r6 ++ bhi .L3798 ++ ldr r10, .L3805+12 ++ mov r7, #0 ++ sub r9, r4, #388 ++ add fp, r4, #1760 ++.L3799: ++ ldrh r3, [r9] ++ sxth r5, r7 ++ cmp r5, r3 ++ bge .L3802 ++ lsl r5, r5, #1 ++ mov r6, #0 ++ ldr r8, .L3805+16 ++ b .L3803 ++.L3793: ++ str r3, [sp, #32] ++ mov r1, r6 ++ ldr r3, .L3805+20 ++ str r2, [sp, #36] ++ ldrb r0, [r3, r7] @ zero_extendqisi2 ++ bl V2P_block ++ str r0, [sp, #28] ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ ldr r3, [sp, #32] ++ ldr r2, [sp, #36] ++ bne .L3792 ++ ldr r1, [sp, #28] ++ mla r0, r2, r5, r8 ++ lsl r1, r1, #10 ++ stmib r0, {r1, fp} ++ mul r1, r9, r5 ++ add r5, r5, #1 ++ uxth r5, r5 ++ add ip, r1, #3 ++ cmp r1, #0 ++ movlt r1, ip ++ bic r1, r1, #3 ++ add r1, r10, r1 ++ str r1, [r0, #12] ++.L3792: ++ add r7, r7, #1 ++.L3800: ++ uxth r1, r7 ++ cmp r3, r1 ++ bhi .L3793 ++ cmp r5, #0 ++ bne .L3794 ++.L3797: ++ add r6, r6, #1 ++ uxth r6, r6 ++ b .L3791 ++.L3794: ++ ldr r9, .L3805+24 ++ mov r0, r8 ++ mov r7, #0 ++ mov r8, #36 ++ mov r2, #1 ++ mov r1, r5 ++ bl FlashReadPages ++.L3795: ++ uxth r3, r7 ++ cmp r5, r3 ++ bls .L3797 ++ ldr r3, [r4, #-536] ++ mla r3, r8, r7, r3 ++ add r7, r7, #1 ++ ldr r1, [r3, #12] ++ ldr r2, [r3, #4] ++ ldr r3, [r3, #8] ++ ldr r0, [r3, #4] ++ str r0, [sp, #16] ++ mov r0, r9 ++ ldr r3, [r3] ++ str r3, [sp, #12] ++ ldr r3, [r1, #12] ++ str r3, [sp, #8] ++ ldr r3, [r1, #8] ++ str r3, [sp, #4] ++ ldr r3, [r1, #4] ++ str r3, [sp] ++ ldr r3, [r1] ++ ubfx r1, r2, #10, #16 ++ bl printk ++ b .L3795 ++.L3798: ++ ldr r2, .L3805+28 ++ mov r7, #0 ++ ldr r8, [r4, #-536] ++ mov r5, r7 ++ ldr fp, [r4, #-2696] ++ ldrh r3, [r2] ++ ldrh r9, [r2, #78] ++ mov r2, #36 ++ ldr r10, [r4, #-2692] ++ b .L3800 ++.L3801: ++ ldr r2, [r4, #-472] ++ mov r0, fp ++ ldrh r2, [r2, r5] ++ orr r3, r3, r2, lsl #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [r4, #1764] ++ bl FlashReadPages ++ ldr r2, [r4, #1768] ++ ldr r1, [r4, #-472] ++ ldr r3, [r4, #1772] ++ ldr r0, [r2, #4] ++ ldrh r1, [r1, r5] ++ str r0, [sp, #20] ++ mov r0, r8 ++ ldr r2, [r2] ++ str r2, [sp, #16] ++ ldr r2, [r3, #12] ++ str r2, [sp, #12] ++ ldr r2, [r3, #8] ++ str r2, [sp, #8] ++ ldr r2, [r3, #4] ++ str r2, [sp, #4] ++ ldr r3, [r3] ++ ldr r2, [r4, #1760] ++ str r3, [sp] ++ ldr r3, [r4, #1764] ++ bl printk ++.L3803: ++ ldrh r2, [r10] ++ sxth r3, r6 ++ add r6, r6, #1 ++ cmp r3, r2 ++ blt .L3801 ++ add r7, r7, #1 ++ b .L3799 ++.L3802: ++ ldr r3, [sp, #24] ++ mov r2, #2 ++ ldr r1, [r4, #-472] ++ movw r5, #2428 ++ ldr r0, .L3805+32 ++ ldr r3, [r3, #2420] ++ bl rknand_print_hex ++ ldr r3, [sp, #24] ++ mov r2, #4 ++ ldr r1, [r4, #-452] ++ ldr r0, .L3805+36 ++ ldrh r3, [r3, r5] ++ bl rknand_print_hex ++ ldr r3, [sp, #24] ++ mov r2, #4 ++ ldr r1, [r4, #-448] ++ ldr r0, .L3805+40 ++ ldrh r3, [r3, r5] ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b rknand_print_hex ++.L3806: ++ .align 2 ++.L3805: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2334 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2392 ++ .word .LC113 ++ .word .LANCHOR0+2350 ++ .word .LC169 ++ .word .LANCHOR0+2324 ++ .word .LC170 ++ .word .LC171 ++ .word .LC172 ++ .fnend ++ .size dump_map_info, .-dump_map_info ++ .align 2 ++ .global flash_boot_enter_slc_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_boot_enter_slc_mode, %function ++flash_boot_enter_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L3809 ++ ldr r2, [r3, #2268] ++ ldr r3, .L3809+4 ++ cmp r2, r3 ++ bxne lr ++ b flash_enter_slc_mode ++.L3810: ++ .align 2 ++.L3809: ++ .word .LANCHOR0 ++ .word 1446522928 ++ .fnend ++ .size flash_boot_enter_slc_mode, .-flash_boot_enter_slc_mode ++ .align 2 ++ .global flash_boot_exit_slc_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_boot_exit_slc_mode, %function ++flash_boot_exit_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L3813 ++ ldr r2, [r3, #2268] ++ ldr r3, .L3813+4 ++ cmp r2, r3 ++ bxne lr ++ b flash_exit_slc_mode ++.L3814: ++ .align 2 ++.L3813: ++ .word .LANCHOR0 ++ .word 1446522928 ++ .fnend ++ .size flash_boot_exit_slc_mode, .-flash_boot_exit_slc_mode ++ .align 2 ++ .global write_idblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type write_idblock, %function ++write_idblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 112 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r6, r0 ++ ldr r4, .L3864 ++ .pad #124 ++ sub sp, sp, #124 ++ mov r0, #256000 ++ mov r10, r1 ++ mov r5, r2 ++ ldr r3, [r4, #48] ++ ldr r8, [r4, #40] ++ ldrb r7, [r3, #9] @ zero_extendqisi2 ++ bl ftl_malloc ++ subs r3, r0, #0 ++ str r3, [sp, #8] ++ beq .L3842 ++ add r0, r6, #508 ++ add r0, r0, #3 ++ lsr r9, r0, #9 ++ cmp r9, #8 ++ bls .L3840 ++ cmp r9, #500 ++ bhi .L3842 ++.L3817: ++ ldr r2, [r10] ++ ldr r3, .L3864+4 ++ cmp r2, r3 ++ bne .L3842 ++ smulbb r7, r7, r8 ++ uxth fp, r7 ++ sub r0, fp, #1 ++ mov r1, fp ++ add r0, r0, r9 ++ bl __aeabi_uidiv ++ str r0, [sp, #32] ++ add r0, r10, #254976 ++ add r0, r0, #512 ++ mov r3, #0 ++ movw r2, #63871 ++.L3821: ++ ldr r1, [r0, #-4]! ++ cmp r1, #0 ++ bne .L3818 ++ ldr r1, [r10, r3, lsl #2] ++ add r3, r3, #1 ++ cmp r3, #4096 ++ sub r2, r2, #1 ++ movhi r3, #0 ++ cmp r2, #4096 ++ str r1, [r0, #512] ++ bne .L3821 ++.L3820: ++ mov r3, #5 ++ mov r1, r5 ++ mov r2, #4 ++ ldr r0, .L3864+8 ++ bl rknand_print_hex ++ ldrb r2, [r4, #37] @ zero_extendqisi2 ++ sub r5, r5, #4 ++ ldr r1, [r10, #512] ++ ldr r0, .L3864+12 ++ bl printk ++ ldr r2, .L3864+16 ++ mov r1, r9 ++ ldrh r3, [r4, #150] ++ ldr r0, .L3864+20 ++ ldr r2, [r2, #1716] ++ str r2, [sp] ++ mov r2, r9 ++ bl printk ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ ldr r2, [r10, #512] ++ ldr r4, .L3864 ++ cmp r2, r3 ++ strhi r3, [r10, #512] ++ lsl r3, r9, #7 ++ str r3, [sp, #40] ++ mov r3, #0 ++ str r3, [sp, #20] ++ str r3, [sp, #12] ++.L3838: ++ ldr r2, [r5, #4] ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ cmp r2, r3 ++ bcs .L3823 ++ ldr r3, .L3864+16 ++ ldr r3, [r3, #1716] ++ cmp r2, r3 ++ bcc .L3823 ++ ldr r3, [sp, #32] ++ ldr r1, [sp, #12] ++ cmp r1, #0 ++ cmpne r3, #1 ++ bls .L3824 ++ ldr r3, [r5] ++ add r3, r3, #1 ++ cmp r2, r3 ++ beq .L3823 ++.L3824: ++ mov r2, #512 ++ mov r1, #0 ++ ldr r0, [sp, #8] ++ bl memset ++ ldr r3, [r4, #48] ++ mov r2, r9 ++ ldr r6, [r5, #4] ++ ldr r7, [r4, #40] ++ ldrb r3, [r3, #9] @ zero_extendqisi2 ++ ldr r0, .L3864+24 ++ mul r6, r6, fp ++ str r3, [sp, #16] ++ ldrh r3, [sp, #16] ++ mov r1, r6 ++ smulbb r7, r7, r3 ++ bl printk ++ mov r0, #0 ++ uxth r7, r7 ++ bl flash_boot_enter_slc_mode ++ mov r0, r6 ++ ldr r1, [sp, #16] ++ bl __aeabi_uidiv ++ mov r2, #0 ++ mov r1, r0 ++ mov r0, r2 ++ bl FlashEraseBlock ++ cmp r7, r9 ++ movcs r8, #1 ++ bcs .L3825 ++ mov r2, #0 ++ mov r8, #2 ++ add r1, r6, r7 ++ mov r0, r2 ++ bl FlashEraseBlock ++.L3825: ++ mov r0, #0 ++ bl flash_boot_exit_slc_mode ++ ldr r3, [r4, #48] ++ ldrh r0, [r3, #10] ++ ldrb r1, [r3, #12] @ zero_extendqisi2 ++ lsl r0, r0, #2 ++ mul r0, r8, r0 ++ mov r8, #0 ++ bl __aeabi_idiv ++ mov r1, r7 ++ str r0, [sp, #44] ++ mov r0, r6 ++ bl __aeabi_uidivmod ++ sub r3, r6, r1 ++ str r1, [sp, #28] ++ str r3, [sp, #36] ++ str r10, [sp, #24] ++.L3826: ++ ldr r3, [sp, #44] ++ cmp r3, r8 ++ bhi .L3830 ++ mov r1, r6 ++ mov r3, #0 ++ mov r2, r9 ++ ldr r0, .L3864+28 ++ bl printk ++ ldr r3, [r4, #48] ++ mov r2, r9 ++ ldr r6, [r5, #4] ++ mov r8, #0 ++ ldr r7, [r4, #40] ++ ldrb r3, [r3, #9] @ zero_extendqisi2 ++ ldr r0, .L3864+32 ++ mul r6, r6, fp ++ str r3, [sp, #16] ++ ldrh r3, [sp, #16] ++ mov r1, r6 ++ smulbb r7, r7, r3 ++ bl printk ++ uxth r7, r7 ++ mov r0, r6 ++ mov r1, r7 ++ bl __aeabi_uidivmod ++ sub r3, r6, r1 ++ ldr r2, [sp, #8] ++ str r3, [sp, #36] ++ ldr r3, [sp, #16] ++ str r1, [sp, #24] ++ str r2, [sp, #28] ++ mul r3, r3, r1 ++ ubfx r3, r3, #2, #2 ++.L3831: ++ cmp r8, r9 ++ bcc .L3833 ++ mov r3, #0 ++ mov r2, r9 ++ mov r1, r6 ++ ldr r0, .L3864+36 ++ bl printk ++ ldr r2, [sp, #8] ++ mov r3, r10 ++ mov r6, #0 ++.L3836: ++ mov r7, r2 ++ mov r8, r3 ++ ldr r0, [r7] ++ add r2, r2, #4 ++ ldr r1, [r8] ++ add r3, r3, #4 ++ cmp r0, r1 ++ beq .L3834 ++ mov r2, #512 ++ mov r1, #0 ++ ldr r0, [sp, #8] ++ bl memset ++ ldr r3, [r8] ++ ldr r1, [sp, #12] ++ ldr r0, .L3864+40 ++ str r3, [sp, #4] ++ ldr r3, [r7] ++ str r3, [sp] ++ mov r3, r6 ++ bic r6, r6, #255 ++ ldr r2, [r5, #4] ++ lsl r6, r6, #2 ++ bl printk ++ mov r3, #256 ++ mov r2, #4 ++ add r1, r10, r6 ++ ldr r0, .L3864+44 ++ bl rknand_print_hex ++ ldr r1, [sp, #8] ++ mov r3, #256 ++ mov r2, #4 ++ ldr r0, .L3864+48 ++ add r1, r1, r6 ++ bl rknand_print_hex ++ mov r0, #0 ++ bl flash_boot_enter_slc_mode ++ ldr r1, [r5, #4] ++ mov r2, #0 ++ mov r0, r2 ++ mul r1, r1, fp ++ bl FlashEraseBlock ++ ldr r3, [sp, #32] ++ cmp r3, #1 ++ bls .L3835 ++ ldr r1, [r5, #4] ++ mov r2, #0 ++ mov r0, r2 ++ mla r1, r1, fp, fp ++ bl FlashEraseBlock ++.L3835: ++ mov r0, #0 ++ bl flash_boot_exit_slc_mode ++ ldr r1, [r5, #4] ++ ldr r0, .L3864+52 ++ bl printk ++.L3823: ++ ldr r3, [sp, #12] ++ add r5, r5, #4 ++ add r3, r3, #1 ++ cmp r3, #5 ++ str r3, [sp, #12] ++ bne .L3838 ++ ldr r0, [sp, #8] ++ bl ftl_free ++ ldr r3, [sp, #20] ++ clz r0, r3 ++ lsr r0, r0, #5 ++ rsb r0, r0, #0 ++.L3815: ++ add sp, sp, #124 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3840: ++ mov r9, #8 ++ b .L3817 ++.L3818: ++ ldr r0, .L3864+56 ++ bl printk ++ b .L3820 ++.L3830: ++ ldr r3, [sp, #28] ++ add r2, r3, r8 ++ lsrs r2, r2, #2 ++ beq .L3827 ++ ldrb r0, [r4, #152] @ zero_extendqisi2 ++ add r1, r2, #1 ++ add r3, r4, r1, lsl #1 ++ cmp r0, #0 ++ ldrh r3, [r3, #156] ++ beq .L3828 ++ ldr r0, [r4, #2268] ++ ldr ip, .L3864+60 ++ cmp r0, ip ++ moveq r3, r1 ++.L3828: ++ sub r3, r3, #-1073741823 ++ lsl r3, r3, #2 ++ str r3, [sp, #56] ++.L3827: ++ movw r3, #61424 ++ str r3, [sp, #60] ++ add r3, r4, r2, lsl #1 ++ ldrh r7, [r3, #156] ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3829 ++ ldr r3, [r4, #2268] ++ ldr r1, .L3864+60 ++ cmp r3, r1 ++ moveq r7, r2 ++.L3829: ++ ldr r2, [sp, #36] ++ add r8, r8, #4 ++ ldr r3, [sp, #16] ++ uxth r8, r8 ++ mla r3, r7, r3, r2 ++ ldr r2, .L3864+16 ++ add r7, r7, #1 ++ ldrb r0, [r2, #1722] @ zero_extendqisi2 ++ uxth r7, r7 ++ str r3, [sp, #52] ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ str r3, [sp, #48] ++ bl FlashBchSel ++ mov r0, #0 ++ bl flash_boot_enter_slc_mode ++ ldr r2, [r4, #48] ++ ldr r3, [sp, #52] ++ ldrb r1, [r2, #9] @ zero_extendqisi2 ++ mov r0, r3 ++ bl __aeabi_uidiv ++ add r3, sp, #56 ++ ldr r2, [sp, #24] ++ mov r1, r0 ++ mov r0, #0 ++ bl FlashProgPage ++ mov r0, #0 ++ bl flash_boot_exit_slc_mode ++ ldr r0, [sp, #48] ++ bl FlashBchSel ++ ldr r1, [sp, #16] ++ ldr r0, [sp, #36] ++ bl __aeabi_uidiv ++ mov r2, r7 ++ mov r1, r0 ++ mov r0, #0 ++ bl FlashPageProgMsbFFData ++ ldr r3, [sp, #24] ++ add r3, r3, #2048 ++ str r3, [sp, #24] ++ b .L3826 ++.L3833: ++ ldr r2, [sp, #24] ++ rsb r7, r3, #4 ++ ldrb r0, [r4, #152] @ zero_extendqisi2 ++ uxth r7, r7 ++ add r2, r2, r8 ++ lsr r2, r2, #2 ++ cmp r0, #0 ++ add r1, r4, r2, lsl #1 ++ ldrh r1, [r1, #156] ++ beq .L3832 ++ ldr r0, [r4, #2268] ++ ldr ip, .L3864+60 ++ cmp r0, ip ++ moveq r1, r2 ++.L3832: ++ ldr r2, [sp, #36] ++ add r8, r7, r8 ++ uxth r8, r8 ++ add r3, r3, r2 ++ ldr r2, [sp, #16] ++ mla r3, r1, r2, r3 ++ ldr r2, [r4, #48] ++ ldrb r1, [r2, #9] @ zero_extendqisi2 ++ ldr r2, .L3864+16 ++ str r3, [sp, #52] ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ ldrb r0, [r2, #1722] @ zero_extendqisi2 ++ str r1, [sp, #48] ++ str r3, [sp, #44] ++ bl FlashBchSel ++ mov r0, #0 ++ bl flash_boot_enter_slc_mode ++ ldr r3, [sp, #52] ++ ldr r1, [sp, #48] ++ mov r0, r3 ++ bl __aeabi_uidiv ++ mov r3, #0 ++ mov r1, r0 ++ ldr r2, [sp, #28] ++ mov r0, r3 ++ bl FlashReadPage ++ mov r0, #0 ++ bl flash_boot_exit_slc_mode ++ ldr r0, [sp, #44] ++ bl FlashBchSel ++ ldr r3, [sp, #28] ++ add r3, r3, r7, lsl #9 ++ str r3, [sp, #28] ++ mov r3, #0 ++ b .L3831 ++.L3834: ++ ldr r1, [sp, #40] ++ add r6, r6, #1 ++ cmp r1, r6 ++ bne .L3836 ++ ldr r3, [sp, #20] ++ add r3, r3, #1 ++ str r3, [sp, #20] ++ b .L3823 ++.L3842: ++ mvn r0, #0 ++ b .L3815 ++.L3865: ++ .align 2 ++.L3864: ++ .word .LANCHOR0 ++ .word -52655045 ++ .word .LC174 ++ .word .LC175 ++ .word .LANCHOR2 ++ .word .LC176 ++ .word .LC177 ++ .word .LC178 ++ .word .LC179 ++ .word .LC180 ++ .word .LC181 ++ .word .LC182 ++ .word .LC183 ++ .word .LC184 ++ .word .LC173 ++ .word 1446522928 ++ .fnend ++ .size write_idblock, .-write_idblock ++ .align 2 ++ .global write_loader_lba ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type write_loader_lba, %function ++write_loader_lba: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r0, #64 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, r0 ++ .pad #48 ++ sub sp, sp, #48 ++ mov r6, r1 ++ mov r8, r2 ++ ldr r4, .L3890 ++ bne .L3867 ++ ldr r2, [r2] ++ ldr r3, .L3890+4 ++ cmp r2, r3 ++ bne .L3867 ++ mov r3, #1 ++ mov r0, #256000 ++ strb r3, [r4, #2020] ++ bl ftl_malloc ++ mov r2, #256000 ++ mov r1, #0 ++ str r0, [r4, #2024] ++ bl ftl_memset ++ str r5, [r4, #2028] ++.L3867: ++ str r6, [sp] ++ mov r3, r5 ++ ldr r2, [r8] ++ ldr r1, [r4, #2024] ++ ldr r0, .L3890+8 ++ bl printk ++ ldrb r3, [r4, #2020] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3866 ++ sub r0, r5, #64 ++ ldr r7, [r4, #2024] ++ cmp r0, #500 ++ bcs .L3869 ++ rsb r2, r5, #564 ++ mov r1, r8 ++ cmp r6, r2 ++ add r0, r7, r0, lsl #9 ++ movcc r2, r6 ++ lsl r2, r2, #9 ++ bl ftl_memcpy ++.L3870: ++ ldr r3, [r4, #2028] ++ cmp r5, r3 ++ beq .L3879 ++ mov r3, #0 ++ cmp r7, r3 ++ strb r3, [r4, #2020] ++ mov r8, r3 ++ beq .L3880 ++ mov r0, r7 ++ bl ftl_free ++.L3880: ++ str r8, [r4, #2024] ++ b .L3879 ++.L3869: ++ cmp r5, #564 ++ bcc .L3870 ++ ldr r3, .L3890+12 ++ ldr r0, [r4, #2028] ++ ldr r3, [r3, #48] ++ sub r0, r0, #64 ++ cmp r0, #500 ++ ldrb r3, [r3, #9] @ zero_extendqisi2 ++ movcs r0, #500 ++ cmp r3, #4 ++ beq .L3871 ++ mov r3, #2 ++ str r3, [sp, #8] ++ mov r3, #3 ++ str r3, [sp, #12] ++ mov r3, #4 ++ str r3, [sp, #16] ++ mov r3, #5 ++ str r3, [sp, #20] ++ mov r3, #6 ++ str r3, [sp, #24] ++.L3872: ++ movw r3, #63872 ++.L3878: ++ ldr r2, [r7, r3, lsl #2] ++ cmp r2, #0 ++ beq .L3876 ++ add r3, r3, #128 ++ lsl r0, r3, #2 ++.L3877: ++ mov r1, r7 ++ add r2, sp, #8 ++ mov r7, #0 ++ bl write_idblock ++ ldr r0, [r4, #2024] ++ strb r7, [r4, #2020] ++ bl ftl_free ++ str r7, [r4, #2024] ++.L3879: ++ add r5, r5, r6 ++ str r5, [r4, #2028] ++.L3866: ++ add sp, sp, #48 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L3871: ++ mov r2, #0 ++ add r3, sp, #8 ++.L3875: ++ cmp r0, #256 ++ lslhi r1, r2, #1 ++ strls r2, [r3, r2, lsl #2] ++ strhi r1, [r3, r2, lsl #2] ++ add r2, r2, #1 ++ cmp r2, #5 ++ bne .L3875 ++ b .L3872 ++.L3876: ++ sub r3, r3, #1 ++ cmp r3, #4096 ++ bne .L3878 ++ lsl r0, r0, #9 ++ b .L3877 ++.L3891: ++ .align 2 ++.L3890: ++ .word .LANCHOR2 ++ .word -52655045 ++ .word .LC185 ++ .word .LANCHOR0 ++ .fnend ++ .size write_loader_lba, .-write_loader_lba ++ .align 2 ++ .global FtlWrite ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlWrite, %function ++FtlWrite: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r6, r2 ++ sub r2, r1, #64 ++ mov r4, r1 ++ cmp r2, #1984 ++ mov r7, r3 ++ movcs r2, #0 ++ movcc r2, #1 ++ cmp r0, #0 ++ mov r5, r0 ++ movne r2, #0 ++ cmp r2, #0 ++ beq .L3893 ++ mov r2, r3 ++ mov r1, r6 ++ mov r0, r4 ++ bl write_loader_lba ++.L3893: ++ mov r3, r7 ++ mov r2, r6 ++ mov r1, r4 ++ mov r0, r5 ++ pop {r4, r5, r6, r7, r8, lr} ++ b ftl_write ++ .fnend ++ .size FtlWrite, .-FtlWrite ++ .align 2 ++ .global rknand_sys_storage_ioctl ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rknand_sys_storage_ioctl, %function ++rknand_sys_storage_ioctl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 520 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3955 ++ push {r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ mov r4, r1 ++ .pad #524 ++ sub sp, sp, #524 ++ mov r5, r2 ++ cmp r1, r3 ++ beq .L3900 ++ bhi .L3901 ++ sub r3, r3, #2080 ++ sub r3, r3, #6 ++ cmp r1, r3 ++ beq .L3902 ++ bhi .L3903 ++ sub r3, r3, #238 ++ cmp r1, r3 ++ beq .L3904 ++ add r3, r3, #237 ++ cmp r1, r3 ++ beq .L3905 ++.L3935: ++ mvn r4, #21 ++ b .L3898 ++.L3903: ++ ldr r3, .L3955+4 ++ cmp r1, r3 ++ beq .L3906 ++ add r3, r3, #1 ++ cmp r1, r3 ++ beq .L3907 ++ sub r3, r3, #124 ++ cmp r1, r3 ++ bne .L3935 ++ ldr r0, .L3955+8 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3918 ++ ldr r2, [sp] ++ ldr r3, .L3955+12 ++ cmp r2, r3 ++ bne .L3915 ++ ldr r2, [sp, #4] ++ cmp r2, #512 ++ ldrls r1, .L3955+16 ++ bhi .L3915 ++.L3953: ++ add r0, sp, #8 ++ bl memcpy ++ b .L3947 ++.L3901: ++ ldr r3, .L3955+20 ++ cmp r1, r3 ++ mov r6, r3 ++ beq .L3909 ++ bhi .L3910 ++ sub r3, r3, #2512 ++ sub r3, r3, #14 ++ cmp r1, r3 ++ beq .L3900 ++ add r3, r3, #10 ++ cmp r1, r3 ++ bne .L3935 ++.L3900: ++ ldr r3, .L3955+24 ++ cmp r4, r3 ++ mov r7, r3 ++ ldreq r0, .L3955+28 ++ beq .L3949 ++ ldr r3, .L3955+32 ++ cmp r4, r3 ++ ldreq r0, .L3955+36 ++ ldrne r0, .L3955+40 ++.L3949: ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3918 ++ ldr r2, [sp] ++ ldr r3, .L3955+44 ++ cmp r2, r3 ++ bne .L3952 ++ ldr r3, .L3955+32 ++ ldr r6, .L3955+48 ++ cmp r4, r3 ++ bne .L3928 ++ ldr r3, [r6, #2032] ++ mov r2, #16 ++ mov r1, sp ++ mov r0, r5 ++ ldr r3, [r3, #20] ++ str r3, [sp, #4] ++ strb r3, [sp, #8] ++ bl rk_copy_to_user ++ cmp r0, #0 ++ bne .L3952 ++.L3919: ++ mov r4, #0 ++.L3898: ++ mov r0, r4 ++ add sp, sp, #524 ++ @ sp needed ++ pop {r4, r5, r6, r7, pc} ++.L3910: ++ ldr r3, .L3955+52 ++ cmp r1, r3 ++ beq .L3909 ++ bcc .L3911 ++ add r3, r3, #1 ++ cmp r1, r3 ++ bne .L3935 ++.L3911: ++ ldr r0, .L3955+56 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3918 ++ ldr r2, [sp] ++ ldr r3, .L3955+60 ++ cmp r2, r3 ++ bne .L3915 ++ ldr r2, [sp, #4] ++ cmp r2, #504 ++ bhi .L3915 ++ ldr r3, .L3955+64 ++ mov r1, sp ++ add r2, r2, #8 ++ cmp r4, r3 ++ ldr r4, .L3955+48 ++ bne .L3934 ++ ldr r0, [r4, #2564] ++ bl memcpy ++ ldr r1, [r4, #2564] ++ mov r0, #2 ++ b .L3950 ++.L3905: ++ ldr r0, .L3955+68 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ beq .L3912 ++.L3918: ++ ldr r0, .L3955+72 ++ bl printk ++.L3952: ++ mvn r4, #13 ++ b .L3898 ++.L3912: ++ ldr r2, [sp] ++ ldr r3, .L3955+76 ++ cmp r2, r3 ++ beq .L3913 ++.L3915: ++ mvn r4, #0 ++.L3914: ++ mov r1, r4 ++ ldr r0, .L3955+80 ++ bl printk ++ b .L3898 ++.L3913: ++ ldr r3, [sp, #4] ++ cmp r3, #512 ++ bhi .L3915 ++ ldr r4, .L3955+48 ++ mov r2, #512 ++ mov r0, sp ++ ldr r1, [r4, #2032] ++ bl memcpy ++ ldr r2, [r4, #2036] ++ ldr r3, .L3955+84 ++ cmp r2, r3 ++ beq .L3916 ++ mov r1, #0 ++ mov r2, #128 ++ add r0, sp, #64 ++ str r1, [sp, #8] ++ str r1, [sp, #12] ++ bl memset ++.L3916: ++ mov r2, #256 ++ mov r1, #0 ++ add r0, sp, r2 ++ str r1, [sp, #16] ++ bl memset ++.L3947: ++ mov r2, #520 ++ mov r1, sp ++ mov r0, r5 ++ bl rk_copy_to_user ++ cmp r0, #0 ++ bne .L3952 ++.L3951: ++ mov r4, #0 ++ b .L3914 ++.L3902: ++ ldr r0, .L3955+88 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3918 ++ ldr r2, [sp] ++ ldr r3, .L3955+76 ++ cmp r2, r3 ++ bne .L3915 ++ ldr r3, [sp, #4] ++ cmp r3, #512 ++ bhi .L3915 ++ ldr r2, .L3955+48 ++ ldr r3, .L3955+84 ++ ldr r1, [r2, #2036] ++ cmp r1, r3 ++ mvnne r4, #1 ++ bne .L3898 ++ ldr r3, [sp, #12] ++ sub r1, r3, #1 ++ cmp r1, #127 ++ mvnhi r4, #2 ++ bhi .L3898 ++ ldr r4, [r2, #2032] ++ add r1, sp, #64 ++ str r3, [r4, #12] ++ add r0, r4, #64 ++ ldr r2, [sp, #12] ++ bl memcpy ++ mov r1, r4 ++ mov r0, #1 ++.L3950: ++ bl StorageSysDataStore ++ mov r4, r0 ++ b .L3914 ++.L3907: ++ ldr r0, .L3955+92 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3918 ++ ldr r2, [sp] ++ ldr r3, .L3955+96 ++ cmp r2, r3 ++ bne .L3915 ++ ldr r3, [sp, #4] ++ cmp r3, #512 ++ bhi .L3915 ++ ldr r5, .L3955+48 ++ ldr r3, [r5, #2040] ++ cmp r3, #0 ++ beq .L3919 ++ ldr r3, [r5, #2044] ++ ldr r2, .L3955+100 ++ ldr r1, [r3] ++ cmp r1, r2 ++ beq .L3920 ++ str r2, [r3] ++ mov r2, #504 ++ ldr r3, [r5, #2044] ++ str r2, [r3, #4] ++ mov r2, #0 ++ str r2, [r3, #8] ++ str r2, [r3, #12] ++.L3920: ++ ldr r1, [r5, #2044] ++ mov r4, #0 ++ mov r0, r4 ++ str r4, [r1, #16] ++ bl StorageSysDataStore ++ ldr r3, [r5, #2032] ++ ldr r2, .L3955+76 ++ ldr r1, [r3] ++ cmp r1, r2 ++ strne r2, [r3] ++ movne r2, #504 ++ ldrne r3, [r5, #2032] ++ ldr r6, [r5, #2032] ++ stmibne r3, {r2, r4} ++ mov r4, #0 ++ mov r2, #128 ++ mov r1, r4 ++ str r4, [r6, #12] ++ add r0, r6, #64 ++ bl memset ++ mov r1, r6 ++ mov r0, #1 ++ bl StorageSysDataStore ++ str r4, [r5, #2040] ++ str r4, [r5, #2036] ++ b .L3914 ++.L3906: ++ ldr r0, .L3955+104 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3918 ++ ldr r2, [sp] ++ ldr r3, .L3955+108 ++ cmp r2, r3 ++ bne .L3915 ++ ldr r3, [sp, #4] ++ cmp r3, #512 ++ bhi .L3915 ++ ldr r5, .L3955+48 ++ ldr r3, [r5, #2040] ++ cmp r3, #1 ++ beq .L3919 ++ ldr r2, [r5, #2044] ++ ldr r3, .L3955+100 ++ ldr r1, [r2] ++ cmp r1, r3 ++ beq .L3922 ++ str r3, [r2] ++ mov r2, #504 ++ ldr r3, [r5, #2044] ++ str r2, [r3, #4] ++ mov r2, #0 ++ str r2, [r3, #8] ++ str r2, [r3, #12] ++.L3922: ++ ldr r1, [r5, #2044] ++ mov r3, #1 ++ mov r0, #0 ++ mov r4, #0 ++ str r3, [r1, #16] ++ bl StorageSysDataStore ++ ldr r3, [r5, #2032] ++ ldr r2, .L3955+76 ++ ldr r1, [r3] ++ cmp r1, r2 ++ strne r2, [r3] ++ movne r1, #504 ++ ldrne r3, [r5, #2032] ++ movne r2, #0 ++ ldr r6, [r5, #2032] ++ stmibne r3, {r1, r2} ++ mov r2, #128 ++ mov r1, r4 ++ str r4, [r6, #12] ++ add r0, r6, #64 ++ bl memset ++ mov r1, r6 ++ mov r0, #1 ++ bl StorageSysDataStore ++ mov r3, #1 ++ str r3, [r5, #2040] ++ b .L3914 ++.L3928: ++ ldr r3, [r6, #2560] ++ cmp r3, #10 ++ bhi .L3952 ++ ldr r2, [r6, #2032] ++ ldr r1, [sp, #4] ++ ldr r3, [r2, #24] ++ cmp r3, r1 ++ cmpne r3, #0 ++ movne r3, #1 ++ moveq r3, #0 ++ beq .L3929 ++ ldr r0, .L3955+112 ++ bl printk ++ ldr r3, [r6, #2560] ++ add r3, r3, #1 ++ str r3, [r6, #2560] ++ b .L3952 ++.L3929: ++ cmp r4, r7 ++ str r3, [r6, #2560] ++ movne r3, #1 ++ strne r1, [r2, #24] ++ streq r3, [r2, #20] ++ mov r1, r2 ++ streq r3, [r2, #24] ++ mov r0, #1 ++ strne r3, [r2, #20] ++ bl StorageSysDataStore ++ cmn r0, #1 ++ bne .L3951 ++ mvn r4, #1 ++ b .L3914 ++.L3909: ++ ldr r0, .L3955+116 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3918 ++ ldr r2, [sp] ++ ldr r3, .L3955+60 ++ cmp r2, r3 ++ bne .L3915 ++ ldr r2, [sp, #4] ++ cmp r2, #504 ++ bhi .L3915 ++ ldr r3, .L3955+48 ++ cmp r4, r6 ++ ldreq r1, [r3, #2564] ++ ldrne r1, [r3, #2568] ++ add r1, r1, #8 ++ b .L3953 ++.L3934: ++ ldr r0, [r4, #2568] ++ bl memcpy ++ ldr r1, [r4, #2568] ++ mov r0, #3 ++ b .L3950 ++.L3904: ++ bl rknand_dev_flush ++ b .L3951 ++.L3956: ++ .align 2 ++.L3955: ++ .word 1074031656 ++ .word 1074029694 ++ .word .LC191 ++ .word 1094995539 ++ .word .LANCHOR2+2048 ++ .word 1074034192 ++ .word 1074031666 ++ .word .LC192 ++ .word 1074031676 ++ .word .LC193 ++ .word .LC194 ++ .word 1280262987 ++ .word .LANCHOR2 ++ .word 1074034194 ++ .word .LC197 ++ .word 1145980246 ++ .word 1074034193 ++ .word .LC186 ++ .word .LC187 ++ .word 1263358532 ++ .word .LC198 ++ .word -1067903959 ++ .word .LC188 ++ .word .LC189 ++ .word 1112753220 ++ .word 1146313043 ++ .word .LC190 ++ .word 1112755781 ++ .word .LC195 ++ .word .LC196 ++ .fnend ++ .size rknand_sys_storage_ioctl, .-rknand_sys_storage_ioctl ++ .align 2 ++ .global rk_ftl_storage_sys_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_storage_sys_init, %function ++rk_ftl_storage_sys_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mvn r3, #0 ++ ldr r4, .L3967 ++ mov r5, #0 ++ mov r2, #512 ++ ldr r1, [r4, #2004] ++ add r0, r4, #2048 ++ str r3, [r4, #2028] ++ strb r5, [r4, #2020] ++ add r3, r1, #512 ++ str r1, [r4, #2044] ++ str r3, [r4, #2032] ++ add r3, r1, #1024 ++ add r1, r1, #1536 ++ str r3, [r4, #2564] ++ str r5, [r4, #2024] ++ str r5, [r4, #2572] ++ str r1, [r4, #2568] ++ bl ftl_memcpy ++ ldr r6, [r4, #2044] ++ str r5, [r4, #2036] ++ str r5, [r4, #2560] ++ ldr r7, [r6, #508] ++ ldr r3, [r6, #16] ++ cmp r7, r5 ++ str r3, [r4, #2040] ++ beq .L3958 ++ mov r1, #508 ++ mov r0, r6 ++ bl js_hash ++ cmp r7, r0 ++ beq .L3958 ++ str r5, [r6, #16] ++ ldr r0, .L3967+4 ++ str r5, [r4, #2040] ++ bl printk ++.L3958: ++ ldr r3, [r4, #2040] ++ mov r0, #2 ++ ldr r1, [r4, #2564] ++ cmp r3, #0 ++ ldrne r3, .L3967+8 ++ strne r3, [r4, #2036] ++ bl StorageSysDataLoad ++ ldr r1, [r4, #2568] ++ mov r0, #3 ++ bl StorageSysDataLoad ++ pop {r4, r5, r6, r7, r8, lr} ++ b rknand_sys_storage_init ++.L3968: ++ .align 2 ++.L3967: ++ .word .LANCHOR2 ++ .word .LC199 ++ .word -1067903959 ++ .fnend ++ .size rk_ftl_storage_sys_init, .-rk_ftl_storage_sys_init ++ .align 2 ++ .global StorageSysDataDeInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type StorageSysDataDeInit, %function ++StorageSysDataDeInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r0, #0 ++ bx lr ++ .fnend ++ .size StorageSysDataDeInit, .-StorageSysDataDeInit ++ .align 2 ++ .global rk_ftl_vendor_storage_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_vendor_storage_init, %function ++rk_ftl_vendor_storage_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r0, #65536 ++ ldr r6, .L3980 ++ bl ftl_malloc ++ cmp r0, #0 ++ str r0, [r6, #2576] ++ beq .L3976 ++ ldr r10, .L3980+4 ++ mov r7, #0 ++ ldr r9, .L3980+8 ++ mov r4, r7 ++ mov r8, r7 ++.L3974: ++ ldr r2, [r6, #2576] ++ mov r1, #128 ++ lsl r0, r8, #7 ++ bl FlashBootVendorRead ++ cmp r0, #0 ++ bne .L3972 ++ ldr r1, [r6, #2576] ++ mov r0, r10 ++ add r2, r1, #61440 ++ ldr r3, [r1, #4] ++ ldr r2, [r2, #4092] ++ ldr r1, [r1] ++ bl printk ++ ldr r5, [r6, #2576] ++ ldr r3, [r5] ++ cmp r3, r9 ++ bne .L3973 ++ add r2, r5, #61440 ++ ldr r3, [r5, #4] ++ ldr r2, [r2, #4092] ++ cmp r3, r4 ++ sub r2, r2, r3 ++ clz r2, r2 ++ lsr r2, r2, #5 ++ movls r2, #0 ++ cmp r2, #0 ++ movne r7, r8 ++ movne r4, r3 ++.L3973: ++ add r8, r8, #1 ++ cmp r8, #2 ++ bne .L3974 ++ cmp r4, #0 ++ beq .L3975 ++ mov r2, r5 ++ mov r1, #128 ++ lsl r0, r7, #7 ++ bl FlashBootVendorRead ++ cmp r0, #0 ++ bne .L3972 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3975: ++ mov r2, #65536 ++ mov r1, r4 ++ mov r0, r5 ++ bl memset ++ mov r3, #1 ++ add r2, r5, #61440 ++ str r3, [r5, #4] ++ mov r0, r4 ++ str r9, [r5] ++ str r3, [r2, #4092] ++ ldr r3, .L3980+12 ++ strh r4, [r5, #12] @ movhi ++ strh r3, [r5, #14] @ movhi ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3972: ++ ldr r0, [r6, #2576] ++ bl kfree ++ mov r3, #0 ++ mvn r0, #0 ++ str r3, [r6, #2576] ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3976: ++ mvn r0, #11 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3981: ++ .align 2 ++.L3980: ++ .word .LANCHOR2 ++ .word .LC200 ++ .word 1380668996 ++ .word -1032 ++ .fnend ++ .size rk_ftl_vendor_storage_init, .-rk_ftl_vendor_storage_init ++ .align 2 ++ .global rk_ftl_vendor_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_vendor_read, %function ++rk_ftl_vendor_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3992 ++ ldr ip, [r3, #2576] ++ cmp ip, #0 ++ beq .L3987 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r3, #0 ++ ldrh r4, [ip, #10] ++.L3984: ++ cmp r3, r4 ++ bcc .L3986 ++ mvn r0, #0 ++ pop {r4, r5, r6, pc} ++.L3986: ++ add lr, ip, r3, lsl #3 ++ ldrh r5, [lr, #16] ++ cmp r5, r0 ++ bne .L3985 ++ ldrh r4, [lr, #20] ++ mov r0, r1 ++ ldrh r1, [lr, #18] ++ cmp r4, r2 ++ movcs r4, r2 ++ add r1, r1, #1024 ++ mov r2, r4 ++ add r1, ip, r1 ++ bl memcpy ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L3985: ++ add r3, r3, #1 ++ b .L3984 ++.L3987: ++ mvn r0, #0 ++ bx lr ++.L3993: ++ .align 2 ++.L3992: ++ .word .LANCHOR2 ++ .fnend ++ .size rk_ftl_vendor_read, .-rk_ftl_vendor_read ++ .align 2 ++ .global rk_ftl_vendor_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_vendor_write, %function ++rk_ftl_vendor_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L4015 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, [r3, #2576] ++ cmp r4, #0 ++ beq .L4009 ++ mov r8, r2 ++ ldrh r2, [r4, #10] ++ add r6, r8, #63 ++ ldrh r3, [r4, #8] ++ mov fp, r1 ++ bic r6, r6, #63 ++ mov r7, #0 ++ str r3, [sp, #4] ++.L3996: ++ cmp r7, r2 ++ bcc .L4004 ++ ldrh r1, [r4, #14] ++ cmp r6, r1 ++ bhi .L4009 ++ add r3, r4, r2, lsl #3 ++ uxth r6, r6 ++ strh r0, [r3, #16] @ movhi ++ ldrh r2, [r4, #12] ++ strh r8, [r3, #20] @ movhi ++ strh r2, [r3, #18] @ movhi ++ add r2, r2, r6 ++ sub r6, r1, r6 ++ strh r2, [r4, #12] @ movhi ++ strh r6, [r4, #14] @ movhi ++ mov r2, r8 ++ ldrh r0, [r3, #18] ++ mov r1, fp ++ add r0, r0, #1024 ++ add r0, r4, r0 ++ bl memcpy ++ ldrh r3, [r4, #10] ++ add r3, r3, #1 ++ strh r3, [r4, #10] @ movhi ++ b .L4014 ++.L4004: ++ add r5, r4, r7, lsl #3 ++ ldrh r3, [r5, #16] ++ cmp r3, r0 ++ str r3, [sp, #8] ++ bne .L3997 ++ ldrh r1, [r5, #20] ++ add r3, r4, #1024 ++ add r1, r1, #63 ++ bic r1, r1, #63 ++ cmp r8, r1 ++ str r1, [sp, #12] ++ bls .L3998 ++ ldrh r1, [r4, #14] ++ cmp r6, r1 ++ subls r2, r2, #1 ++ ldrhls r10, [r5, #18] ++ strls r2, [sp, #16] ++ bls .L3999 ++.L4009: ++ mvn r0, #0 ++ b .L3994 ++.L4000: ++ ldrh r9, [r5, #20] ++ add r0, r3, r10 ++ ldrh r2, [r5, #16] ++ add r7, r7, #1 ++ ldrh r1, [r5, #18] ++ strh r9, [r5, #12] @ movhi ++ add r9, r9, #63 ++ bic r9, r9, #63 ++ strh r2, [r5, #8] @ movhi ++ strh r10, [r5, #10] @ movhi ++ add r1, r3, r1 ++ mov r2, r9 ++ str r3, [sp, #20] ++ bl memcpy ++ ldr r3, [sp, #20] ++ add r10, r10, r9 ++.L3999: ++ ldr r2, [sp, #16] ++ add r5, r5, #8 ++ cmp r7, r2 ++ bcc .L4000 ++ ldrh r2, [sp, #8] ++ add r7, r4, r7, lsl #3 ++ uxth r5, r10 ++ uxtah r0, r3, r10 ++ strh r8, [r7, #20] @ movhi ++ strh r2, [r7, #16] @ movhi ++ mov r1, fp ++ strh r5, [r7, #18] @ movhi ++ mov r2, r8 ++ bl memcpy ++ uxth r3, r6 ++ ldrh r6, [r4, #14] ++ add r5, r5, r3 ++ sub r6, r6, r3 ++ ldr r3, [sp, #12] ++ strh r5, [r4, #12] @ movhi ++ add r6, r6, r3 ++ strh r6, [r4, #14] @ movhi ++.L4014: ++ ldr r3, [r4, #4] ++ add r2, r4, #61440 ++ mov r1, #128 ++ add r3, r3, #1 ++ str r3, [r4, #4] ++ str r3, [r2, #4092] ++ mov r2, r4 ++ ldrh r3, [r4, #8] ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmp r3, #1 ++ movhi r3, #0 ++ strh r3, [r4, #8] @ movhi ++ ldr r3, [sp, #4] ++ lsl r0, r3, #7 ++ bl FlashBootVendorWrite ++ mov r0, #0 ++.L3994: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3998: ++ ldrh r0, [r5, #18] ++ mov r2, r8 ++ mov r1, fp ++ add r0, r3, r0 ++ bl memcpy ++ strh r8, [r5, #20] @ movhi ++ b .L4014 ++.L3997: ++ add r7, r7, #1 ++ b .L3996 ++.L4016: ++ .align 2 ++.L4015: ++ .word .LANCHOR2 ++ .fnend ++ .size rk_ftl_vendor_write, .-rk_ftl_vendor_write ++ .align 2 ++ .global rk_ftl_vendor_storage_ioctl ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_vendor_storage_ioctl, %function ++rk_ftl_vendor_storage_ioctl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r0, #4096 ++ mov r5, r2 ++ mov r6, r1 ++ bl ftl_malloc ++ subs r4, r0, #0 ++ mvneq r5, #0 ++ beq .L4017 ++ ldr r3, .L4033 ++ cmp r6, r3 ++ beq .L4020 ++ add r3, r3, #1 ++ cmp r6, r3 ++ beq .L4021 ++.L4031: ++ mvn r5, #13 ++ b .L4019 ++.L4020: ++ mov r2, #8 ++ mov r1, r5 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L4031 ++ ldr r2, [r4] ++ ldr r3, .L4033+4 ++ cmp r2, r3 ++ beq .L4023 ++.L4024: ++ mvn r5, #0 ++.L4019: ++ mov r0, r4 ++ bl kfree ++.L4017: ++ mov r0, r5 ++ pop {r4, r5, r6, pc} ++.L4023: ++ ldrh r2, [r4, #6] ++ add r1, r4, #8 ++ ldrh r0, [r4, #4] ++ bl rk_ftl_vendor_read ++ cmn r0, #1 ++ beq .L4024 ++ uxth r2, r0 ++ strh r0, [r4, #6] @ movhi ++ mov r1, r4 ++ mov r0, r5 ++ add r2, r2, #8 ++ bl rk_copy_to_user ++ subs r5, r0, #0 ++ beq .L4019 ++ b .L4031 ++.L4021: ++ mov r2, #8 ++ mov r1, r5 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L4031 ++ ldr r2, [r4] ++ ldr r3, .L4033+4 ++ cmp r2, r3 ++ bne .L4024 ++ ldrh r2, [r4, #6] ++ movw r3, #4087 ++ cmp r2, r3 ++ bhi .L4024 ++ add r2, r2, #8 ++ mov r1, r5 ++ mov r0, r4 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L4031 ++ ldrh r2, [r4, #6] ++ add r1, r4, #8 ++ ldrh r0, [r4, #4] ++ bl rk_ftl_vendor_write ++ mov r5, r0 ++ b .L4019 ++.L4034: ++ .align 2 ++.L4033: ++ .word 1074034177 ++ .word 1448232273 ++ .fnend ++ .size rk_ftl_vendor_storage_ioctl, .-rk_ftl_vendor_storage_ioctl ++ .global SecureBootUnlockTryCount ++ .global SecureBootCheckOK ++ .global SecureBootEn ++ .global gpVendor1Info ++ .global gpVendor0Info ++ .global g_idb_buffer ++ .global gSnSectorData ++ .global gpDrmKeyInfo ++ .global gpBootConfig ++ .global ftl_dma32_buffer_size ++ .global ftl_dma32_buffer ++ .global gLoaderBootInfo ++ .global RK29_NANDC1_REG_BASE ++ .global RK29_NANDC_REG_BASE ++ .global gc_ink_free_return_value ++ .global check_valid_page_count_table ++ .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_3 ++ .global g_gc_next_blk_2 ++ .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 ++ .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 idb_flash_slc_mode ++ .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_nand_ecc_en ++ .global g_slc2KBNand ++ .global g_maxRetryCount ++ .global g_maxRegNum ++ .global g_retryMode ++ .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 gFlashCurMode ++ .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 IDByte ++ .global read_retry_cur_offset ++ .section .rodata ++ .set .LANCHOR3,. + 0 ++ .type __func__.23812, %object ++ .size __func__.23812, 11 ++__func__.23812: ++ .ascii "FtlMemInit\000" ++ .type samsung_14nm_slc_rr, %object ++ .size samsung_14nm_slc_rr, 26 ++samsung_14nm_slc_rr: ++ .byte 0 ++ .byte 10 ++ .byte -10 ++ .byte 20 ++ .byte -20 ++ .byte 30 ++ .byte -30 ++ .byte 40 ++ .byte -40 ++ .byte 50 ++ .byte -50 ++ .byte 60 ++ .byte -60 ++ .byte -70 ++ .byte -80 ++ .byte -90 ++ .byte -100 ++ .byte -110 ++ .byte -120 ++ .byte -9 ++ .byte 70 ++ .byte 80 ++ .byte 90 ++ .byte -125 ++ .byte -115 ++ .byte 100 ++ .type samsung_14nm_mlc_rr, %object ++ .size samsung_14nm_mlc_rr, 104 ++samsung_14nm_mlc_rr: ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -4 ++ .byte 3 ++ .byte -4 ++ .byte -6 ++ .byte 6 ++ .byte 0 ++ .byte 6 ++ .byte -10 ++ .byte -10 ++ .byte 4 ++ .byte -10 ++ .byte 16 ++ .byte 12 ++ .byte -4 ++ .byte 12 ++ .byte 8 ++ .byte -16 ++ .byte 10 ++ .byte -16 ++ .byte 24 ++ .byte 18 ++ .byte -14 ++ .byte 18 ++ .byte -4 ++ .byte -22 ++ .byte -16 ++ .byte -22 ++ .byte -8 ++ .byte 24 ++ .byte -9 ++ .byte 24 ++ .byte 8 ++ .byte -28 ++ .byte -4 ++ .byte -28 ++ .byte 16 ++ .byte 30 ++ .byte 10 ++ .byte 30 ++ .byte 10 ++ .byte -34 ++ .byte 6 ++ .byte -34 ++ .byte 0 ++ .byte 36 ++ .byte -8 ++ .byte 36 ++ .byte -8 ++ .byte -40 ++ .byte -2 ++ .byte -40 ++ .byte -20 ++ .byte -46 ++ .byte -4 ++ .byte -46 ++ .byte -30 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte -3 ++ .byte -2 ++ .byte -4 ++ .byte -2 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -4 ++ .byte -10 ++ .byte -6 ++ .byte -8 ++ .byte -6 ++ .byte -14 ++ .byte -9 ++ .byte -8 ++ .byte -9 ++ .byte -18 ++ .byte -52 ++ .byte 22 ++ .byte -52 ++ .byte 10 ++ .byte 42 ++ .byte 4 ++ .byte 42 ++ .byte 4 ++ .byte 48 ++ .byte -9 ++ .byte 48 ++ .byte 4 ++ .byte -58 ++ .byte 12 ++ .byte -58 ++ .byte 0 ++ .byte -64 ++ .byte -24 ++ .byte -64 ++ .byte -6 ++ .byte 9 ++ .byte 18 ++ .byte 9 ++ .byte 8 ++ .type __func__.24591, %object ++ .size __func__.24591, 17 ++__func__.24591: ++ .ascii "FtlDumpBlockInfo\000" ++ .type __func__.24610, %object ++ .size __func__.24610, 16 ++__func__.24610: ++ .ascii "FtlScanAllBlock\000" ++ .type __func__.24878, %object ++ .size __func__.24878, 17 ++__func__.24878: ++ .ascii "ftl_scan_all_ppa\000" ++ .type __func__.24559, %object ++ .size __func__.24559, 12 ++__func__.24559: ++ .ascii "FtlCheckVpc\000" ++ .type __func__.24858, %object ++ .size __func__.24858, 21 ++__func__.24858: ++ .ascii "FtlVpcCheckAndModify\000" ++ .type __func__.23885, %object ++ .size __func__.23885, 8 ++__func__.23885: ++ .ascii "FtlInit\000" ++ .data ++ .align 2 ++ .set .LANCHOR1,. + 0 ++ .type random_seed, %object ++ .size random_seed, 256 ++random_seed: ++ .short 22378 ++ .short 1512 ++ .short 25245 ++ .short 17827 ++ .short 25756 ++ .short 19440 ++ .short 9026 ++ .short 10030 ++ .short 29528 ++ .short 20467 ++ .short 29676 ++ .short 24432 ++ .short 31328 ++ .short 6872 ++ .short 13426 ++ .short 13842 ++ .short 8783 ++ .short 1108 ++ .short 782 ++ .short 28837 ++ .short 30729 ++ .short 9505 ++ .short 18676 ++ .short 23085 ++ .short 18730 ++ .short 1085 ++ .short 32609 ++ .short 14697 ++ .short 20858 ++ .short 15170 ++ .short 30365 ++ .short 1607 ++ .short 32298 ++ .short 4995 ++ .short 18905 ++ .short 1976 ++ .short 9592 ++ .short 20204 ++ .short 17443 ++ .short 13615 ++ .short 23330 ++ .short 29369 ++ .short 13947 ++ .short 9398 ++ .short 32398 ++ .short 8984 ++ .short 27600 ++ .short 21785 ++ .short 6019 ++ .short 6311 ++ .short 31598 ++ .short 30210 ++ .short 19327 ++ .short 13896 ++ .short 11347 ++ .short 27545 ++ .short 3107 ++ .short 26575 ++ .short 32270 ++ .short 19852 ++ .short 20601 ++ .short 8349 ++ .short 9290 ++ .short 29819 ++ .short 13579 ++ .short 3661 ++ .short 28676 ++ .short 27331 ++ .short 32574 ++ .short 8693 ++ .short 31253 ++ .short 9081 ++ .short 5399 ++ .short 6842 ++ .short 20087 ++ .short 5537 ++ .short 1274 ++ .short 11617 ++ .short 9530 ++ .short 4866 ++ .short 8035 ++ .short 23219 ++ .short 1178 ++ .short 23272 ++ .short 7383 ++ .short 18944 ++ .short 12488 ++ .short 12871 ++ .short 29340 ++ .short 20532 ++ .short 11022 ++ .short 22514 ++ .short 228 ++ .short 22363 ++ .short 24978 ++ .short 14584 ++ .short 12138 ++ .short 3092 ++ .short 17916 ++ .short 16863 ++ .short 14554 ++ .short 31457 ++ .short 29474 ++ .short 25311 ++ .short 24121 ++ .short 3684 ++ .short 28037 ++ .short 22865 ++ .short 22839 ++ .short 25217 ++ .short 13217 ++ .short 27186 ++ .short 14938 ++ .short 11180 ++ .short 29754 ++ .short 24180 ++ .short 15150 ++ .short 32455 ++ .short 20434 ++ .short 23848 ++ .short 29983 ++ .short 16120 ++ .short 14769 ++ .short 20041 ++ .short 29803 ++ .short 28406 ++ .short 17598 ++ .short 28087 ++ .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 ++ .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 ++ .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 gNandParaInfo, %object ++ .size gNandParaInfo, 32 ++gNandParaInfo: ++ .byte 0 ++ .byte 0 ++ .space 5 ++ .byte 0 ++ .byte 1 ++ .byte 8 ++ .short 128 ++ .byte 2 ++ .byte 1 ++ .short 2048 ++ .short 0 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .type gFtlInitStatus, %object ++ .size gFtlInitStatus, 4 ++gFtlInitStatus: ++ .word -1 ++ .type NandFlashParaTbl, %object ++ .size NandFlashParaTbl, 2752 ++NandFlashParaTbl: ++ .byte 6 ++ .byte 44 ++ .byte 100 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 68 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1064 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 104 ++ .byte 4 ++ .byte 74 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -120 ++ .byte 4 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -88 ++ .byte 5 ++ .byte -53 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 104 ++ .byte 4 ++ .byte 70 ++ .byte -119 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 72 ++ .byte 4 ++ .byte 74 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 84 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -41 ++ .byte -108 ++ .byte 62 ++ .byte -124 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 4096 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 72 ++ .byte 4 ++ .byte 70 ++ .byte -123 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -120 ++ .byte 5 ++ .byte -58 ++ .byte -119 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 104 ++ .byte 0 ++ .byte 39 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 1 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 0 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 86 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 24 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 700 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -124 ++ .byte -59 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -43 ++ .byte -47 ++ .byte -90 ++ .byte 104 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 8 ++ .short 64 ++ .byte 1 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 0 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -36 ++ .byte -112 ++ .byte -90 ++ .byte 84 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 64 ++ .byte 1 ++ .byte 2 ++ .short 1024 ++ .short 279 ++ .byte 0 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 84 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 68 ++ .byte 50 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1048 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1044 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte -60 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -92 ++ .byte 100 ++ .byte 50 ++ .byte -86 ++ .byte 4 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 1024 ++ .byte 2 ++ .byte 1 ++ .short 2192 ++ .short 1479 ++ .byte 10 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -46 ++ .byte 4 ++ .byte 67 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 473 ++ .byte 1 ++ .byte 1 ++ .byte 24 ++ .byte 32 ++ .byte 4 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -38 ++ .byte 116 ++ .byte -61 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 473 ++ .byte 1 ++ .byte 2 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -111 ++ .byte 96 ++ .byte 68 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1046 ++ .short 473 ++ .byte 1 ++ .byte 3 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -38 ++ .byte 116 ++ .byte -60 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2090 ++ .short 473 ++ .byte 1 ++ .byte 4 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -21 ++ .byte 116 ++ .byte 68 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 473 ++ .byte 1 ++ .byte 7 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -43 ++ .byte -108 ++ .byte -38 ++ .byte 116 ++ .byte -60 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 530 ++ .short 473 ++ .byte 1 ++ .byte 3 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -102 ++ .byte 116 ++ .byte 66 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 281 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 4 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte 20 ++ .byte -89 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1060 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte 20 ++ .byte -98 ++ .byte 52 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1056 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -89 ++ .byte 66 ++ .byte 72 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1060 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte 20 ++ .byte -85 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1056 ++ .short 473 ++ .byte 2 ++ .byte 6 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte 58 ++ .byte 20 ++ .byte -85 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2092 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -43 ++ .byte -108 ++ .byte -102 ++ .byte 116 ++ .byte 66 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 273 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte 58 ++ .byte 20 ++ .byte 3 ++ .byte 8 ++ .byte 80 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 388 ++ .byte 2 ++ .byte 2 ++ .short 1362 ++ .short 473 ++ .byte 9 ++ .byte 8 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 100 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte -124 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 104 ++ .byte 36 ++ .byte 74 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 104 ++ .byte 4 ++ .byte 74 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -41 ++ .byte -108 ++ .byte 62 ++ .byte -124 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 104 ++ .byte 4 ++ .byte 70 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte -119 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -95 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte -119 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 59 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 192 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 12 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 1473 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte 58 ++ .byte -123 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 1 ++ .byte 2 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 1505 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -43 ++ .byte -124 ++ .byte 50 ++ .byte 114 ++ .byte 86 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 1 ++ .short 2056 ++ .short 1473 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -108 ++ .byte 50 ++ .byte 118 ++ .byte 86 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2058 ++ .short 1489 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -126 ++ .byte 118 ++ .byte 86 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2062 ++ .short 1489 ++ .byte 1 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 80 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 1497 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte 58 ++ .byte -107 ++ .byte -109 ++ .byte 122 ++ .byte 80 ++ .byte 1 ++ .byte 2 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 1497 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -108 ++ .byte 50 ++ .byte 118 ++ .byte 85 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2050 ++ .short 401 ++ .byte 2 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 1497 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 80 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte 58 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2106 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 81 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1056 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -47 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 1497 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -92 ++ .byte -126 ++ .byte 118 ++ .byte 86 ++ .byte 8 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2082 ++ .short 473 ++ .byte 1 ++ .byte 65 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 80 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 1497 ++ .byte 2 ++ .byte 67 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 80 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 67 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -92 ++ .byte -126 ++ .byte 118 ++ .byte -41 ++ .byte 8 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2090 ++ .short 1241 ++ .byte 1 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 1473 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte 58 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2106 ++ .short 473 ++ .byte 2 ++ .byte 68 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 473 ++ .byte 2 ++ .byte 68 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte 58 ++ .byte -92 ++ .byte -109 ++ .byte 122 ++ .byte 80 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2138 ++ .short 1497 ++ .byte 2 ++ .byte 0 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -126 ++ .byte 118 ++ .byte 86 ++ .byte 8 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2062 ++ .short 473 ++ .byte 1 ++ .byte 0 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -41 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 1497 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte -20 ++ .byte -41 ++ .byte -108 ++ .byte 126 ++ .byte 100 ++ .byte 68 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 473 ++ .byte 2 ++ .byte 49 ++ .byte 60 ++ .byte 36 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -43 ++ .byte 126 ++ .byte 104 ++ .byte 68 ++ .byte 0 ++ .byte 2 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 505 ++ .byte 2 ++ .byte 49 ++ .byte 60 ++ .byte 36 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -41 ++ .byte -108 ++ .byte 122 ++ .byte 84 ++ .byte 67 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2076 ++ .short 409 ++ .byte 2 ++ .byte 0 ++ .byte 40 ++ .byte 36 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -43 ++ .byte 122 ++ .byte 88 ++ .byte 67 ++ .byte 0 ++ .byte 2 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2076 ++ .short 441 ++ .byte 2 ++ .byte 0 ++ .byte 40 ++ .byte 36 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -43 ++ .byte -108 ++ .byte 118 ++ .byte 84 ++ .byte 67 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 1038 ++ .short 281 ++ .byte 2 ++ .byte 0 ++ .byte 24 ++ .byte 36 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -41 ++ .byte 20 ++ .byte 118 ++ .byte 84 ++ .byte -62 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2076 ++ .short 1169 ++ .byte 2 ++ .byte 0 ++ .byte 24 ++ .byte 40 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -108 ++ .byte -61 ++ .byte -92 ++ .byte -54 ++ .byte 0 ++ .byte 1 ++ .byte 32 ++ .short 792 ++ .byte 2 ++ .byte 1 ++ .short 688 ++ .short 1217 ++ .byte 11 ++ .byte 50 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 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 ++ .space 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 ++ .space 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 ++ .space 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 ++ .space 14 ++ .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 ++ .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 ++ .short 64 ++ .byte 1 ++ .byte 1 ++ .short 1024 ++ .short 256 ++ .byte 0 ++ .byte 0 ++ .byte 16 ++ .byte 40 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .type ftl_gc_temp_block_bops_scan_page_addr, %object ++ .size ftl_gc_temp_block_bops_scan_page_addr, 2 ++ftl_gc_temp_block_bops_scan_page_addr: ++ .short -1 ++ .space 2 ++ .type power_up_flag, %object ++ .size power_up_flag, 4 ++power_up_flag: ++ .word 1 ++ .bss ++ .align 2 ++ .set .LANCHOR0,. + 0 ++ .set .LANCHOR2,. + 8184 ++ .type gNandChipMap, %object ++ .size gNandChipMap, 32 ++gNandChipMap: ++ .space 32 ++ .type p_blk_mode_table, %object ++ .size p_blk_mode_table, 4 ++p_blk_mode_table: ++ .space 4 ++ .type g_slc2KBNand, %object ++ .size g_slc2KBNand, 1 ++g_slc2KBNand: ++ .space 1 ++ .type gNandIDBResBlkNum, %object ++ .size gNandIDBResBlkNum, 1 ++gNandIDBResBlkNum: ++ .space 1 ++ .space 2 ++ .type gBlockPageAlignSize, %object ++ .size gBlockPageAlignSize, 4 ++gBlockPageAlignSize: ++ .space 4 ++ .type gNandRandomizer, %object ++ .size gNandRandomizer, 1 ++gNandRandomizer: ++ .space 1 ++ .space 3 ++ .type gpNandParaInfo, %object ++ .size gpNandParaInfo, 4 ++gpNandParaInfo: ++ .space 4 ++ .type gNandOptPara, %object ++ .size gNandOptPara, 32 ++gNandOptPara: ++ .space 32 ++ .type g_retryMode, %object ++ .size g_retryMode, 1 ++g_retryMode: ++ .space 1 ++ .type g_maxRegNum, %object ++ .size g_maxRegNum, 1 ++g_maxRegNum: ++ .space 1 ++ .space 2 ++ .type gpNandc, %object ++ .size gpNandc, 4 ++gpNandc: ++ .space 4 ++ .type NANDC_FMCTL, %object ++ .size NANDC_FMCTL, 4 ++NANDC_FMCTL: ++ .space 4 ++ .type NANDC_FMWAIT, %object ++ .size NANDC_FMWAIT, 4 ++NANDC_FMWAIT: ++ .space 4 ++ .type NANDC_FLCTL, %object ++ .size NANDC_FLCTL, 4 ++NANDC_FLCTL: ++ .space 4 ++ .type NANDC_BCHCTL, %object ++ .size NANDC_BCHCTL, 4 ++NANDC_BCHCTL: ++ .space 4 ++ .type NANDC_DLL_CTL_REG0, %object ++ .size NANDC_DLL_CTL_REG0, 4 ++NANDC_DLL_CTL_REG0: ++ .space 4 ++ .type NANDC_DLL_CTL_REG1, %object ++ .size NANDC_DLL_CTL_REG1, 4 ++NANDC_DLL_CTL_REG1: ++ .space 4 ++ .type NANDC_RANDMZ_CFG, %object ++ .size NANDC_RANDMZ_CFG, 4 ++NANDC_RANDMZ_CFG: ++ .space 4 ++ .type NANDC_FMWAIT_SYN, %object ++ .size NANDC_FMWAIT_SYN, 4 ++NANDC_FMWAIT_SYN: ++ .space 4 ++ .type gNandPhyInfo, %object ++ .size gNandPhyInfo, 28 ++gNandPhyInfo: ++ .space 28 ++ .type gFlashSlcMode, %object ++ .size gFlashSlcMode, 1 ++gFlashSlcMode: ++ .space 1 ++ .space 3 ++ .type slcPageToMlcPageTbl, %object ++ .size slcPageToMlcPageTbl, 1024 ++slcPageToMlcPageTbl: ++ .space 1024 ++ .type DieAddrs, %object ++ .size DieAddrs, 32 ++DieAddrs: ++ .space 32 ++ .type FlashWaitBusyScheduleEn, %object ++ .size FlashWaitBusyScheduleEn, 4 ++FlashWaitBusyScheduleEn: ++ .space 4 ++ .type gReadRetryInfo, %object ++ .size gReadRetryInfo, 852 ++gReadRetryInfo: ++ .space 852 ++ .type read_retry_cur_offset, %object ++ .size read_retry_cur_offset, 4 ++read_retry_cur_offset: ++ .space 4 ++ .type IDByte, %object ++ .size IDByte, 32 ++IDByte: ++ .space 32 ++ .type gDieOp, %object ++ .size gDieOp, 128 ++gDieOp: ++ .space 128 ++ .type gFlashCurMode, %object ++ .size gFlashCurMode, 1 ++gFlashCurMode: ++ .space 1 ++ .type gFlashInterfaceMode, %object ++ .size gFlashInterfaceMode, 1 ++gFlashInterfaceMode: ++ .space 1 ++ .type gNandMaxDie, %object ++ .size gNandMaxDie, 1 ++gNandMaxDie: ++ .space 1 ++ .space 1 ++ .type DieCsIndex, %object ++ .size DieCsIndex, 8 ++DieCsIndex: ++ .space 8 ++ .type gMultiPageProgEn, %object ++ .size gMultiPageProgEn, 1 ++gMultiPageProgEn: ++ .space 1 ++ .space 3 ++ .type g_inkDie_check_enable, %object ++ .size g_inkDie_check_enable, 4 ++g_inkDie_check_enable: ++ .space 4 ++ .type idb_flash_slc_mode, %object ++ .size idb_flash_slc_mode, 4 ++idb_flash_slc_mode: ++ .space 4 ++ .type gFlashToggleModeEn, %object ++ .size gFlashToggleModeEn, 1 ++gFlashToggleModeEn: ++ .space 1 ++ .space 3 ++ .type gBootDdrMode, %object ++ .size gBootDdrMode, 4 ++gBootDdrMode: ++ .space 4 ++ .type gNandcVer, %object ++ .size gNandcVer, 4 ++gNandcVer: ++ .space 4 ++ .type g_nandc_version_data, %object ++ .size g_nandc_version_data, 4 ++g_nandc_version_data: ++ .space 4 ++ .type gMasterTempBuf, %object ++ .size gMasterTempBuf, 4 ++gMasterTempBuf: ++ .space 4 ++ .type gMasterInfo, %object ++ .size gMasterInfo, 32 ++gMasterInfo: ++ .space 32 ++ .type gNandcDumpWriteEn, %object ++ .size gNandcDumpWriteEn, 4 ++gNandcDumpWriteEn: ++ .space 4 ++ .type gNandcEccBits, %object ++ .size gNandcEccBits, 4 ++gNandcEccBits: ++ .space 4 ++ .type gNandFlashEccBits, %object ++ .size gNandFlashEccBits, 1 ++gNandFlashEccBits: ++ .space 1 ++ .space 3 ++ .type c_ftl_nand_sys_blks_per_plane, %object ++ .size c_ftl_nand_sys_blks_per_plane, 4 ++c_ftl_nand_sys_blks_per_plane: ++ .space 4 ++ .type c_ftl_nand_planes_num, %object ++ .size c_ftl_nand_planes_num, 2 ++c_ftl_nand_planes_num: ++ .space 2 ++ .space 2 ++ .type c_ftl_nand_max_sys_blks, %object ++ .size c_ftl_nand_max_sys_blks, 4 ++c_ftl_nand_max_sys_blks: ++ .space 4 ++ .type c_ftl_nand_data_blks_per_plane, %object ++ .size c_ftl_nand_data_blks_per_plane, 2 ++c_ftl_nand_data_blks_per_plane: ++ .space 2 ++ .type c_ftl_nand_blk_pre_plane, %object ++ .size c_ftl_nand_blk_pre_plane, 2 ++c_ftl_nand_blk_pre_plane: ++ .space 2 ++ .type c_ftl_nand_max_data_blks, %object ++ .size c_ftl_nand_max_data_blks, 4 ++c_ftl_nand_max_data_blks: ++ .space 4 ++ .type c_ftl_nand_totle_phy_blks, %object ++ .size c_ftl_nand_totle_phy_blks, 4 ++c_ftl_nand_totle_phy_blks: ++ .space 4 ++ .type c_ftl_nand_type, %object ++ .size c_ftl_nand_type, 2 ++c_ftl_nand_type: ++ .space 2 ++ .type c_ftl_nand_die_num, %object ++ .size c_ftl_nand_die_num, 2 ++c_ftl_nand_die_num: ++ .space 2 ++ .type c_ftl_nand_planes_per_die, %object ++ .size c_ftl_nand_planes_per_die, 2 ++c_ftl_nand_planes_per_die: ++ .space 2 ++ .type p_plane_order_table, %object ++ .size p_plane_order_table, 32 ++p_plane_order_table: ++ .space 32 ++ .type c_mlc_erase_count_value, %object ++ .size c_mlc_erase_count_value, 2 ++c_mlc_erase_count_value: ++ .space 2 ++ .type c_ftl_nand_ext_blk_pre_plane, %object ++ .size c_ftl_nand_ext_blk_pre_plane, 2 ++c_ftl_nand_ext_blk_pre_plane: ++ .space 2 ++ .type c_ftl_vendor_part_size, %object ++ .size c_ftl_vendor_part_size, 2 ++c_ftl_vendor_part_size: ++ .space 2 ++ .type c_ftl_nand_blks_per_die, %object ++ .size c_ftl_nand_blks_per_die, 2 ++c_ftl_nand_blks_per_die: ++ .space 2 ++ .type c_ftl_nand_page_pre_blk, %object ++ .size c_ftl_nand_page_pre_blk, 2 ++c_ftl_nand_page_pre_blk: ++ .space 2 ++ .type c_ftl_nand_page_pre_slc_blk, %object ++ .size c_ftl_nand_page_pre_slc_blk, 2 ++c_ftl_nand_page_pre_slc_blk: ++ .space 2 ++ .type c_ftl_nand_page_pre_super_blk, %object ++ .size c_ftl_nand_page_pre_super_blk, 2 ++c_ftl_nand_page_pre_super_blk: ++ .space 2 ++ .type c_ftl_nand_sec_pre_page, %object ++ .size c_ftl_nand_sec_pre_page, 2 ++c_ftl_nand_sec_pre_page: ++ .space 2 ++ .type c_ftl_nand_sec_pre_page_shift, %object ++ .size c_ftl_nand_sec_pre_page_shift, 2 ++c_ftl_nand_sec_pre_page_shift: ++ .space 2 ++ .type c_ftl_nand_byte_pre_page, %object ++ .size c_ftl_nand_byte_pre_page, 2 ++c_ftl_nand_byte_pre_page: ++ .space 2 ++ .type c_ftl_nand_byte_pre_oob, %object ++ .size c_ftl_nand_byte_pre_oob, 2 ++c_ftl_nand_byte_pre_oob: ++ .space 2 ++ .type c_ftl_nand_reserved_blks, %object ++ .size c_ftl_nand_reserved_blks, 2 ++c_ftl_nand_reserved_blks: ++ .space 2 ++ .space 2 ++ .type DeviceCapacity, %object ++ .size DeviceCapacity, 4 ++DeviceCapacity: ++ .space 4 ++ .type c_ftl_nand_max_vendor_blks, %object ++ .size c_ftl_nand_max_vendor_blks, 2 ++c_ftl_nand_max_vendor_blks: ++ .space 2 ++ .type c_ftl_nand_vendor_region_num, %object ++ .size c_ftl_nand_vendor_region_num, 2 ++c_ftl_nand_vendor_region_num: ++ .space 2 ++ .type c_ftl_nand_map_blks_per_plane, %object ++ .size c_ftl_nand_map_blks_per_plane, 2 ++c_ftl_nand_map_blks_per_plane: ++ .space 2 ++ .space 2 ++ .type c_ftl_nand_max_map_blks, %object ++ .size c_ftl_nand_max_map_blks, 4 ++c_ftl_nand_max_map_blks: ++ .space 4 ++ .type c_ftl_nand_init_sys_blks_per_plane, %object ++ .size c_ftl_nand_init_sys_blks_per_plane, 4 ++c_ftl_nand_init_sys_blks_per_plane: ++ .space 4 ++ .type c_ftl_nand_map_region_num, %object ++ .size c_ftl_nand_map_region_num, 2 ++c_ftl_nand_map_region_num: ++ .space 2 ++ .type c_ftl_nand_l2pmap_ram_region_num, %object ++ .size c_ftl_nand_l2pmap_ram_region_num, 2 ++c_ftl_nand_l2pmap_ram_region_num: ++ .space 2 ++ .type g_MaxLbaSector, %object ++ .size g_MaxLbaSector, 4 ++g_MaxLbaSector: ++ .space 4 ++ .type g_page_map_check_enable, %object ++ .size g_page_map_check_enable, 2 ++g_page_map_check_enable: ++ .space 2 ++ .type g_totle_vendor_block, %object ++ .size g_totle_vendor_block, 2 ++g_totle_vendor_block: ++ .space 2 ++ .type p_vendor_block_table, %object ++ .size p_vendor_block_table, 4 ++p_vendor_block_table: ++ .space 4 ++ .type g_wr_page_num, %object ++ .size g_wr_page_num, 4 ++g_wr_page_num: ++ .space 4 ++ .type req_wr_io, %object ++ .size req_wr_io, 4 ++req_wr_io: ++ .space 4 ++ .type g_MaxLpn, %object ++ .size g_MaxLpn, 4 ++g_MaxLpn: ++ .space 4 ++ .type gBbtInfo, %object ++ .size gBbtInfo, 60 ++gBbtInfo: ++ .space 60 ++ .type gSysFreeQueue, %object ++ .size gSysFreeQueue, 2056 ++gSysFreeQueue: ++ .space 2056 ++ .type g_flash_read_only_en, %object ++ .size g_flash_read_only_en, 4 ++g_flash_read_only_en: ++ .space 4 ++ .type req_erase, %object ++ .size req_erase, 4 ++req_erase: ++ .space 4 ++ .type p_erase_count_table, %object ++ .size p_erase_count_table, 4 ++p_erase_count_table: ++ .space 4 ++ .type g_totle_sys_slc_erase_count, %object ++ .size g_totle_sys_slc_erase_count, 4 ++g_totle_sys_slc_erase_count: ++ .space 4 ++ .type g_sys_save_data, %object ++ .size g_sys_save_data, 48 ++g_sys_save_data: ++ .space 48 ++ .type p_data_block_list_table, %object ++ .size p_data_block_list_table, 4 ++p_data_block_list_table: ++ .space 4 ++ .type p_data_block_list_head, %object ++ .size p_data_block_list_head, 4 ++p_data_block_list_head: ++ .space 4 ++ .type p_valid_page_count_table, %object ++ .size p_valid_page_count_table, 4 ++p_valid_page_count_table: ++ .space 4 ++ .type p_data_block_list_tail, %object ++ .size p_data_block_list_tail, 4 ++p_data_block_list_tail: ++ .space 4 ++ .type g_num_data_superblocks, %object ++ .size g_num_data_superblocks, 2 ++g_num_data_superblocks: ++ .space 2 ++ .space 2 ++ .type p_free_data_block_list_head, %object ++ .size p_free_data_block_list_head, 4 ++p_free_data_block_list_head: ++ .space 4 ++ .type g_num_free_superblocks, %object ++ .size g_num_free_superblocks, 2 ++g_num_free_superblocks: ++ .space 2 ++ .space 2 ++ .type g_active_superblock, %object ++ .size g_active_superblock, 48 ++g_active_superblock: ++ .space 48 ++ .type g_buffer_superblock, %object ++ .size g_buffer_superblock, 48 ++g_buffer_superblock: ++ .space 48 ++ .type g_gc_temp_superblock, %object ++ .size g_gc_temp_superblock, 48 ++g_gc_temp_superblock: ++ .space 48 ++ .type p_l2p_ram_map, %object ++ .size p_l2p_ram_map, 4 ++p_l2p_ram_map: ++ .space 4 ++ .type g_l2p_last_update_region_id, %object ++ .size g_l2p_last_update_region_id, 2 ++g_l2p_last_update_region_id: ++ .space 2 ++ .type FtlUpdateVaildLpnCount, %object ++ .size FtlUpdateVaildLpnCount, 2 ++FtlUpdateVaildLpnCount: ++ .space 2 ++ .type g_VaildLpn, %object ++ .size g_VaildLpn, 4 ++g_VaildLpn: ++ .space 4 ++ .type g_totle_read_page_count, %object ++ .size g_totle_read_page_count, 4 ++g_totle_read_page_count: ++ .space 4 ++ .type g_totle_discard_page_count, %object ++ .size g_totle_discard_page_count, 4 ++g_totle_discard_page_count: ++ .space 4 ++ .type g_totle_write_page_count, %object ++ .size g_totle_write_page_count, 4 ++g_totle_write_page_count: ++ .space 4 ++ .type g_totle_cache_write_count, %object ++ .size g_totle_cache_write_count, 4 ++g_totle_cache_write_count: ++ .space 4 ++ .type g_totle_l2p_write_count, %object ++ .size g_totle_l2p_write_count, 4 ++g_totle_l2p_write_count: ++ .space 4 ++ .type g_totle_gc_page_count, %object ++ .size g_totle_gc_page_count, 4 ++g_totle_gc_page_count: ++ .space 4 ++ .type g_totle_write_sector, %object ++ .size g_totle_write_sector, 4 ++g_totle_write_sector: ++ .space 4 ++ .type g_totle_read_sector, %object ++ .size g_totle_read_sector, 4 ++g_totle_read_sector: ++ .space 4 ++ .type g_GlobalSysVersion, %object ++ .size g_GlobalSysVersion, 4 ++g_GlobalSysVersion: ++ .space 4 ++ .type g_GlobalDataVersion, %object ++ .size g_GlobalDataVersion, 4 ++g_GlobalDataVersion: ++ .space 4 ++ .type g_totle_mlc_erase_count, %object ++ .size g_totle_mlc_erase_count, 4 ++g_totle_mlc_erase_count: ++ .space 4 ++ .type g_totle_slc_erase_count, %object ++ .size g_totle_slc_erase_count, 4 ++g_totle_slc_erase_count: ++ .space 4 ++ .type g_totle_avg_erase_count, %object ++ .size g_totle_avg_erase_count, 4 ++g_totle_avg_erase_count: ++ .space 4 ++ .type g_max_erase_count, %object ++ .size g_max_erase_count, 4 ++g_max_erase_count: ++ .space 4 ++ .type g_min_erase_count, %object ++ .size g_min_erase_count, 4 ++g_min_erase_count: ++ .space 4 ++ .type c_ftl_nand_data_op_blks_per_plane, %object ++ .size c_ftl_nand_data_op_blks_per_plane, 2 ++c_ftl_nand_data_op_blks_per_plane: ++ .space 2 ++ .space 2 ++ .type gSysInfo, %object ++ .size gSysInfo, 16 ++gSysInfo: ++ .space 16 ++ .type g_gc_superblock, %object ++ .size g_gc_superblock, 48 ++g_gc_superblock: ++ .space 48 ++ .type g_sys_ext_data, %object ++ .size g_sys_ext_data, 512 ++g_sys_ext_data: ++ .space 512 ++ .type g_all_blk_used_slc_mode, %object ++ .size g_all_blk_used_slc_mode, 4 ++g_all_blk_used_slc_mode: ++ .space 4 ++ .type g_gc_free_blk_threshold, %object ++ .size g_gc_free_blk_threshold, 2 ++g_gc_free_blk_threshold: ++ .space 2 ++ .type g_gc_merge_free_blk_threshold, %object ++ .size g_gc_merge_free_blk_threshold, 2 ++g_gc_merge_free_blk_threshold: ++ .space 2 ++ .type g_gc_skip_write_count, %object ++ .size g_gc_skip_write_count, 4 ++g_gc_skip_write_count: ++ .space 4 ++ .type g_gc_blk_index, %object ++ .size g_gc_blk_index, 2 ++g_gc_blk_index: ++ .space 2 ++ .space 2 ++ .type g_in_swl_replace, %object ++ .size g_in_swl_replace, 4 ++g_in_swl_replace: ++ .space 4 ++ .type g_gc_num_req, %object ++ .size g_gc_num_req, 4 ++g_gc_num_req: ++ .space 4 ++ .type gp_gc_page_buf_info, %object ++ .size gp_gc_page_buf_info, 4 ++gp_gc_page_buf_info: ++ .space 4 ++ .type p_gc_data_buf, %object ++ .size p_gc_data_buf, 4 ++p_gc_data_buf: ++ .space 4 ++ .type p_gc_spare_buf, %object ++ .size p_gc_spare_buf, 4 ++p_gc_spare_buf: ++ .space 4 ++ .type req_gc, %object ++ .size req_gc, 4 ++req_gc: ++ .space 4 ++ .type c_gc_page_buf_num, %object ++ .size c_gc_page_buf_num, 4 ++c_gc_page_buf_num: ++ .space 4 ++ .type p_gc_blk_tbl, %object ++ .size p_gc_blk_tbl, 4 ++p_gc_blk_tbl: ++ .space 4 ++ .type g_gc_blk_num, %object ++ .size g_gc_blk_num, 2 ++g_gc_blk_num: ++ .space 2 ++ .space 2 ++ .type p_gc_page_info, %object ++ .size p_gc_page_info, 4 ++p_gc_page_info: ++ .space 4 ++ .type g_gc_page_offset, %object ++ .size g_gc_page_offset, 2 ++g_gc_page_offset: ++ .space 2 ++ .type g_gc_next_blk, %object ++ .size g_gc_next_blk, 2 ++g_gc_next_blk: ++ .space 2 ++ .type g_gc_next_blk_1, %object ++ .size g_gc_next_blk_1, 2 ++g_gc_next_blk_1: ++ .space 2 ++ .type g_gc_next_blk_2, %object ++ .size g_gc_next_blk_2, 2 ++g_gc_next_blk_2: ++ .space 2 ++ .type g_gc_next_blk_3, %object ++ .size g_gc_next_blk_3, 2 ++g_gc_next_blk_3: ++ .space 2 ++ .type g_gc_bad_block_temp_num, %object ++ .size g_gc_bad_block_temp_num, 2 ++g_gc_bad_block_temp_num: ++ .space 2 ++ .type g_gc_bad_block_temp_tbl, %object ++ .size g_gc_bad_block_temp_tbl, 34 ++g_gc_bad_block_temp_tbl: ++ .space 34 ++ .type g_gc_bad_block_gc_index, %object ++ .size g_gc_bad_block_gc_index, 2 ++g_gc_bad_block_gc_index: ++ .space 2 ++ .type mlcPageToSlcPageTbl, %object ++ .size mlcPageToSlcPageTbl, 2048 ++mlcPageToSlcPageTbl: ++ .space 2048 ++ .type gNandMaxChip, %object ++ .size gNandMaxChip, 1 ++gNandMaxChip: ++ .space 1 ++ .space 1 ++ .type gTotleBlock, %object ++ .size gTotleBlock, 2 ++gTotleBlock: ++ .space 2 ++ .type g_free_slc_blk_num, %object ++ .size g_free_slc_blk_num, 2 ++g_free_slc_blk_num: ++ .space 2 ++ .space 2 ++ .type g_SlcPartLbaEndSector, %object ++ .size g_SlcPartLbaEndSector, 4 ++g_SlcPartLbaEndSector: ++ .space 4 ++ .type g_in_gc_progress, %object ++ .size g_in_gc_progress, 4 ++g_in_gc_progress: ++ .space 4 ++ .type g_gc_head_data_block, %object ++ .size g_gc_head_data_block, 4 ++g_gc_head_data_block: ++ .space 4 ++ .type g_gc_head_data_block_count, %object ++ .size g_gc_head_data_block_count, 4 ++g_gc_head_data_block_count: ++ .space 4 ++ .type g_cur_erase_blk, %object ++ .size g_cur_erase_blk, 4 ++g_cur_erase_blk: ++ .space 4 ++ .type g_gc_refresh_block_temp_num, %object ++ .size g_gc_refresh_block_temp_num, 2 ++g_gc_refresh_block_temp_num: ++ .space 2 ++ .space 2 ++ .type c_wr_page_buf_num, %object ++ .size c_wr_page_buf_num, 4 ++c_wr_page_buf_num: ++ .space 4 ++ .type req_read, %object ++ .size req_read, 4 ++req_read: ++ .space 4 ++ .type req_gc_dst, %object ++ .size req_gc_dst, 4 ++req_gc_dst: ++ .space 4 ++ .type req_prgm, %object ++ .size req_prgm, 4 ++req_prgm: ++ .space 4 ++ .type p_sys_data_buf, %object ++ .size p_sys_data_buf, 4 ++p_sys_data_buf: ++ .space 4 ++ .type p_sys_data_buf_1, %object ++ .size p_sys_data_buf_1, 4 ++p_sys_data_buf_1: ++ .space 4 ++ .type p_vendor_data_buf, %object ++ .size p_vendor_data_buf, 4 ++p_vendor_data_buf: ++ .space 4 ++ .type p_wr_io_data_buf, %object ++ .size p_wr_io_data_buf, 4 ++p_wr_io_data_buf: ++ .space 4 ++ .type p_io_data_buf_0, %object ++ .size p_io_data_buf_0, 4 ++p_io_data_buf_0: ++ .space 4 ++ .type p_io_data_buf_1, %object ++ .size p_io_data_buf_1, 4 ++p_io_data_buf_1: ++ .space 4 ++ .type p_sys_spare_buf, %object ++ .size p_sys_spare_buf, 4 ++p_sys_spare_buf: ++ .space 4 ++ .type p_io_spare_buf, %object ++ .size p_io_spare_buf, 4 ++p_io_spare_buf: ++ .space 4 ++ .type p_wr_io_spare_buf, %object ++ .size p_wr_io_spare_buf, 4 ++p_wr_io_spare_buf: ++ .space 4 ++ .type g_ect_tbl_info_size, %object ++ .size g_ect_tbl_info_size, 2 ++g_ect_tbl_info_size: ++ .space 2 ++ .space 2 ++ .type p_swl_mul_table, %object ++ .size p_swl_mul_table, 4 ++p_swl_mul_table: ++ .space 4 ++ .type gp_ect_tbl_info, %object ++ .size gp_ect_tbl_info, 4 ++gp_ect_tbl_info: ++ .space 4 ++ .type p_valid_page_count_check_table, %object ++ .size p_valid_page_count_check_table, 4 ++p_valid_page_count_check_table: ++ .space 4 ++ .type p_map_block_table, %object ++ .size p_map_block_table, 4 ++p_map_block_table: ++ .space 4 ++ .type p_map_block_valid_page_count, %object ++ .size p_map_block_valid_page_count, 4 ++p_map_block_valid_page_count: ++ .space 4 ++ .type p_vendor_block_valid_page_count, %object ++ .size p_vendor_block_valid_page_count, 4 ++p_vendor_block_valid_page_count: ++ .space 4 ++ .type p_vendor_block_ver_table, %object ++ .size p_vendor_block_ver_table, 4 ++p_vendor_block_ver_table: ++ .space 4 ++ .type p_vendor_region_ppn_table, %object ++ .size p_vendor_region_ppn_table, 4 ++p_vendor_region_ppn_table: ++ .space 4 ++ .type p_map_region_ppn_table, %object ++ .size p_map_region_ppn_table, 4 ++p_map_region_ppn_table: ++ .space 4 ++ .type p_map_region_ppn_check_table, %object ++ .size p_map_region_ppn_check_table, 4 ++p_map_region_ppn_check_table: ++ .space 4 ++ .type p_map_block_ver_table, %object ++ .size p_map_block_ver_table, 4 ++p_map_block_ver_table: ++ .space 4 ++ .type p_l2p_map_buf, %object ++ .size p_l2p_map_buf, 4 ++p_l2p_map_buf: ++ .space 4 ++ .type c_ftl_nand_bbm_buf_size, %object ++ .size c_ftl_nand_bbm_buf_size, 2 ++c_ftl_nand_bbm_buf_size: ++ .space 2 ++ .space 2 ++ .type gL2pMapInfo, %object ++ .size gL2pMapInfo, 44 ++gL2pMapInfo: ++ .space 44 ++ .type g_totle_map_block, %object ++ .size g_totle_map_block, 2 ++g_totle_map_block: ++ .space 2 ++ .space 2 ++ .type g_req_cache, %object ++ .size g_req_cache, 4 ++g_req_cache: ++ .space 4 ++ .type g_tmp_data_superblock_id, %object ++ .size g_tmp_data_superblock_id, 2 ++g_tmp_data_superblock_id: ++ .space 2 ++ .space 2 ++ .type g_totle_swl_count, %object ++ .size g_totle_swl_count, 4 ++g_totle_swl_count: ++ .space 4 ++ .type ftl_gc_temp_power_lost_recovery_flag, %object ++ .size ftl_gc_temp_power_lost_recovery_flag, 4 ++ftl_gc_temp_power_lost_recovery_flag: ++ .space 4 ++ .type g_recovery_page_min_ver, %object ++ .size g_recovery_page_min_ver, 4 ++g_recovery_page_min_ver: ++ .space 4 ++ .type gNandIDataBuf, %object ++ .size gNandIDataBuf, 2048 ++gNandIDataBuf: ++ .space 2048 ++ .type RK29_NANDC_REG_BASE, %object ++ .size RK29_NANDC_REG_BASE, 4 ++RK29_NANDC_REG_BASE: ++ .space 4 ++ .type ftl_dma32_buffer_size, %object ++ .size ftl_dma32_buffer_size, 4 ++ftl_dma32_buffer_size: ++ .space 4 ++ .type ftl_dma32_buffer, %object ++ .size ftl_dma32_buffer, 4 ++ftl_dma32_buffer: ++ .space 4 ++ .type gFlashPageBuffer0, %object ++ .size gFlashPageBuffer0, 4 ++gFlashPageBuffer0: ++ .space 4 ++ .type FlashDdrTunningReadCount, %object ++ .size FlashDdrTunningReadCount, 4 ++FlashDdrTunningReadCount: ++ .space 4 ++ .type gpReadRetrial, %object ++ .size gpReadRetrial, 4 ++gpReadRetrial: ++ .space 4 ++ .type gpFlashSaveInfo, %object ++ .size gpFlashSaveInfo, 4 ++gpFlashSaveInfo: ++ .space 4 ++ .type gNandFlashInfoBlockAddr, %object ++ .size gNandFlashInfoBlockAddr, 4 ++gNandFlashInfoBlockAddr: ++ .space 4 ++ .type gNandFlashIdbBlockAddr, %object ++ .size gNandFlashIdbBlockAddr, 4 ++gNandFlashIdbBlockAddr: ++ .space 4 ++ .type gNandIDBResBlkNumSaveInFlash, %object ++ .size gNandIDBResBlkNumSaveInFlash, 1 ++gNandIDBResBlkNumSaveInFlash: ++ .space 1 ++ .type g_maxRetryCount, %object ++ .size g_maxRetryCount, 1 ++g_maxRetryCount: ++ .space 1 ++ .type gNandFlashIDBEccBits, %object ++ .size gNandFlashIDBEccBits, 1 ++gNandFlashIDBEccBits: ++ .space 1 ++ .space 1 ++ .type gFlashPageBuffer1, %object ++ .size gFlashPageBuffer1, 4 ++gFlashPageBuffer1: ++ .space 4 ++ .type gFlashSpareBuffer, %object ++ .size gFlashSpareBuffer, 4 ++gFlashSpareBuffer: ++ .space 4 ++ .type gFlashProgCheckBuffer, %object ++ .size gFlashProgCheckBuffer, 4 ++gFlashProgCheckBuffer: ++ .space 4 ++ .type gFlashProgCheckSpareBuffer, %object ++ .size gFlashProgCheckSpareBuffer, 4 ++gFlashProgCheckSpareBuffer: ++ .space 4 ++ .type g_nand_ecc_en, %object ++ .size g_nand_ecc_en, 1 ++g_nand_ecc_en: ++ .space 1 ++ .type gMultiPageReadEn, %object ++ .size gMultiPageReadEn, 1 ++gMultiPageReadEn: ++ .space 1 ++ .type FbbtBlk, %object ++ .size FbbtBlk, 16 ++FbbtBlk: ++ .space 16 ++ .space 2 ++ .type req_sys, %object ++ .size req_sys, 36 ++req_sys: ++ .space 36 ++ .type g_MaxLbn, %object ++ .size g_MaxLbn, 4 ++g_MaxLbn: ++ .space 4 ++ .type gVendorBlkInfo, %object ++ .size gVendorBlkInfo, 44 ++gVendorBlkInfo: ++ .space 44 ++ .type g_ect_tbl_power_up_flush, %object ++ .size g_ect_tbl_power_up_flush, 2 ++g_ect_tbl_power_up_flush: ++ .space 2 ++ .type g_power_lost_ecc_error_blk, %object ++ .size g_power_lost_ecc_error_blk, 2 ++g_power_lost_ecc_error_blk: ++ .space 2 ++ .type g_power_lost_recovery_flag, %object ++ .size g_power_lost_recovery_flag, 2 ++g_power_lost_recovery_flag: ++ .space 2 ++ .space 2 ++ .type g_recovery_page_num, %object ++ .size g_recovery_page_num, 4 ++g_recovery_page_num: ++ .space 4 ++ .type g_recovery_ppa_tbl, %object ++ .size g_recovery_ppa_tbl, 128 ++g_recovery_ppa_tbl: ++ .space 128 ++ .type gc_ink_free_return_value, %object ++ .size gc_ink_free_return_value, 2 ++gc_ink_free_return_value: ++ .space 2 ++ .type g_gc_cur_blk_valid_pages, %object ++ .size g_gc_cur_blk_valid_pages, 2 ++g_gc_cur_blk_valid_pages: ++ .space 2 ++ .type g_gc_cur_blk_max_valid_pages, %object ++ .size g_gc_cur_blk_max_valid_pages, 2 ++g_gc_cur_blk_max_valid_pages: ++ .space 2 ++ .space 2 ++ .type gp_last_act_superblock, %object ++ .size gp_last_act_superblock, 4 ++gp_last_act_superblock: ++ .space 4 ++ .type gc_discard_updated, %object ++ .size gc_discard_updated, 4 ++gc_discard_updated: ++ .space 4 ++ .type g_LowFormat, %object ++ .size g_LowFormat, 4 ++g_LowFormat: ++ .space 4 ++ .type gLoaderBootInfo, %object ++ .size gLoaderBootInfo, 4 ++gLoaderBootInfo: ++ .space 4 ++ .type RK29_NANDC1_REG_BASE, %object ++ .size RK29_NANDC1_REG_BASE, 4 ++RK29_NANDC1_REG_BASE: ++ .space 4 ++ .type g_ftl_nand_free_count, %object ++ .size g_ftl_nand_free_count, 4 ++g_ftl_nand_free_count: ++ .space 4 ++ .type last_cache_match_count, %object ++ .size last_cache_match_count, 4 ++last_cache_match_count: ++ .space 4 ++ .type idb_write_enable, %object ++ .size idb_write_enable, 1 ++idb_write_enable: ++ .space 1 ++ .space 3 ++ .type idb_buf, %object ++ .size idb_buf, 4 ++idb_buf: ++ .space 4 ++ .type idb_last_lba, %object ++ .size idb_last_lba, 4 ++idb_last_lba: ++ .space 4 ++ .type gpDrmKeyInfo, %object ++ .size gpDrmKeyInfo, 4 ++gpDrmKeyInfo: ++ .space 4 ++ .type SecureBootCheckOK, %object ++ .size SecureBootCheckOK, 4 ++SecureBootCheckOK: ++ .space 4 ++ .type SecureBootEn, %object ++ .size SecureBootEn, 4 ++SecureBootEn: ++ .space 4 ++ .type gpBootConfig, %object ++ .size gpBootConfig, 4 ++gpBootConfig: ++ .space 4 ++ .type gSnSectorData, %object ++ .size gSnSectorData, 512 ++gSnSectorData: ++ .space 512 ++ .type SecureBootUnlockTryCount, %object ++ .size SecureBootUnlockTryCount, 4 ++SecureBootUnlockTryCount: ++ .space 4 ++ .type gpVendor0Info, %object ++ .size gpVendor0Info, 4 ++gpVendor0Info: ++ .space 4 ++ .type gpVendor1Info, %object ++ .size gpVendor1Info, 4 ++gpVendor1Info: ++ .space 4 ++ .type g_idb_buffer, %object ++ .size g_idb_buffer, 4 ++g_idb_buffer: ++ .space 4 ++ .type g_vendor, %object ++ .size g_vendor, 4 ++g_vendor: ++ .space 4 ++ .type check_valid_page_count_table, %object ++ .size check_valid_page_count_table, 8192 ++check_valid_page_count_table: ++ .space 8192 ++ .type g_gc_refresh_block_temp_tbl, %object ++ .size g_gc_refresh_block_temp_tbl, 34 ++g_gc_refresh_block_temp_tbl: ++ .space 34 ++ .space 2 ++ .type gToggleModeClkDiv, %object ++ .size gToggleModeClkDiv, 4 ++gToggleModeClkDiv: ++ .space 4 ++ .type gpNandc1, %object ++ .size gpNandc1, 4 ++gpNandc1: ++ .space 4 ++ .type gNandFlashResEndPageAddr, %object ++ .size gNandFlashResEndPageAddr, 4 ++gNandFlashResEndPageAddr: ++ .space 4 ++ .type gNandFlashInfoBlockEcc, %object ++ .size gNandFlashInfoBlockEcc, 1 ++gNandFlashInfoBlockEcc: ++ .space 1 ++ .type gFlashOnfiModeEn, %object ++ .size gFlashOnfiModeEn, 1 ++gFlashOnfiModeEn: ++ .space 1 ++ .type gFlashSdrModeEn, %object ++ .size gFlashSdrModeEn, 1 ++gFlashSdrModeEn: ++ .space 1 ++ .section .rodata.str1.1,"aMS",%progbits,1 ++.LC1: ++ .ascii "FlashEraseBlocks pageAddr error %x\012\000" ++.LC2: ++ .ascii "phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\012" ++ .ascii "\000" ++.LC3: ++ .ascii "FtlFreeSysBlkQueueOut free count = %d\012\000" ++.LC4: ++ .ascii "FtlFreeSysBlkQueueOut = %x, free count = %d, error\012" ++ .ascii "\000" ++.LC5: ++ .ascii "FtlFreeSysBlkQueueOut = %x, free count = %d\012\000" ++.LC6: ++ .ascii "FLASH INFO:\012\000" ++.LC7: ++ .ascii "FLASH ID: %x\012\000" ++.LC8: ++ .ascii "Device Capacity: %d MB\012\000" ++.LC9: ++ .ascii "FMWAIT: %x %x %x %x\012\000" ++.LC10: ++ .ascii "FTL INFO:\012\000" ++.LC11: ++ .ascii "g_MaxLpn = 0x%x\012\000" ++.LC12: ++ .ascii "g_VaildLpn = 0x%x\012\000" ++.LC13: ++ .ascii "read_page_count = 0x%x\012\000" ++.LC14: ++ .ascii "discard_page_count = 0x%x\012\000" ++.LC15: ++ .ascii "write_page_count = 0x%x\012\000" ++.LC16: ++ .ascii "cache_write_count = 0x%x\012\000" ++.LC17: ++ .ascii "l2p_write_count = 0x%x\012\000" ++.LC18: ++ .ascii "gc_page_count = 0x%x\012\000" ++.LC19: ++ .ascii "totle_write = %d MB\012\000" ++.LC20: ++ .ascii "totle_read = %d MB\012\000" ++.LC21: ++ .ascii "GSV = 0x%x\012\000" ++.LC22: ++ .ascii "GDV = 0x%x\012\000" ++.LC23: ++ .ascii "bad blk num = %d %d\012\000" ++.LC24: ++ .ascii "free_superblocks = 0x%x\012\000" ++.LC25: ++ .ascii "mlc_EC = 0x%x\012\000" ++.LC26: ++ .ascii "slc_EC = 0x%x\012\000" ++.LC27: ++ .ascii "avg_EC = 0x%x\012\000" ++.LC28: ++ .ascii "sys_EC = 0x%x\012\000" ++.LC29: ++ .ascii "max_EC = 0x%x\012\000" ++.LC30: ++ .ascii "min_EC = 0x%x\012\000" ++.LC31: ++ .ascii "PLT = 0x%x\012\000" ++.LC32: ++ .ascii "POT = 0x%x\012\000" ++.LC33: ++ .ascii "MaxSector = 0x%x\012\000" ++.LC34: ++ .ascii "init_sys_blks_pp = 0x%x\012\000" ++.LC35: ++ .ascii "sys_blks_pp = 0x%x\012\000" ++.LC36: ++ .ascii "free sysblock = 0x%x\012\000" ++.LC37: ++ .ascii "data_blks_pp = 0x%x\012\000" ++.LC38: ++ .ascii "data_op_blks_pp = 0x%x\012\000" ++.LC39: ++ .ascii "max_data_blks = 0x%x\012\000" ++.LC40: ++ .ascii "Sys.id = 0x%x\012\000" ++.LC41: ++ .ascii "Bbt.id = 0x%x\012\000" ++.LC42: ++ .ascii "ACT.page = 0x%x\012\000" ++.LC43: ++ .ascii "ACT.plane = 0x%x\012\000" ++.LC44: ++ .ascii "ACT.id = 0x%x\012\000" ++.LC45: ++ .ascii "ACT.mode = 0x%x\012\000" ++.LC46: ++ .ascii "ACT.a_pages = 0x%x\012\000" ++.LC47: ++ .ascii "ACT VPC = 0x%x\012\000" ++.LC48: ++ .ascii "BUF.page = 0x%x\012\000" ++.LC49: ++ .ascii "BUF.plane = 0x%x\012\000" ++.LC50: ++ .ascii "BUF.id = 0x%x\012\000" ++.LC51: ++ .ascii "BUF.mode = 0x%x\012\000" ++.LC52: ++ .ascii "BUF.a_pages = 0x%x\012\000" ++.LC53: ++ .ascii "BUF VPC = 0x%x\012\000" ++.LC54: ++ .ascii "TMP.page = 0x%x\012\000" ++.LC55: ++ .ascii "TMP.plane = 0x%x\012\000" ++.LC56: ++ .ascii "TMP.id = 0x%x\012\000" ++.LC57: ++ .ascii "TMP.mode = 0x%x\012\000" ++.LC58: ++ .ascii "TMP.a_pages = 0x%x\012\000" ++.LC59: ++ .ascii "GC.page = 0x%x\012\000" ++.LC60: ++ .ascii "GC.plane = 0x%x\012\000" ++.LC61: ++ .ascii "GC.id = 0x%x\012\000" ++.LC62: ++ .ascii "GC.mode = 0x%x\012\000" ++.LC63: ++ .ascii "GC.a_pages = 0x%x\012\000" ++.LC64: ++ .ascii "WR_CHK = 0x%x %x %x %x\012\000" ++.LC65: ++ .ascii "Read Err = 0x%x\012\000" ++.LC66: ++ .ascii "Prog Err = 0x%x\012\000" ++.LC67: ++ .ascii "gc_free_blk_th= 0x%x\012\000" ++.LC68: ++ .ascii "gc_merge_free_blk_th= 0x%x\012\000" ++.LC69: ++ .ascii "gc_skip_write_count= 0x%x\012\000" ++.LC70: ++ .ascii "gc_blk_index= 0x%x\012\000" ++.LC71: ++ .ascii "free min EC= 0x%x\012\000" ++.LC72: ++ .ascii "free max EC= 0x%x\012\000" ++.LC73: ++ .ascii "GC__SB VPC = 0x%x\012\000" ++.LC74: ++ .ascii "%d. [0x%x]=0x%x 0x%x 0x%x\012\000" ++.LC75: ++ .ascii "free %d. [0x%x] 0x%x 0x%x\012\000" ++.LC76: ++ .ascii "FTL version: 5.0.63 20210616\000" ++.LC77: ++ .ascii "%s\012\000" ++.LC78: ++ .ascii "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x" ++ .ascii "\012\000" ++.LC79: ++ .ascii "FtlGcRefreshBlock 0x%x\012\000" ++.LC80: ++ .ascii "FtlGcMarkBadPhyBlk %d 0x%x\012\000" ++.LC81: ++ .ascii "%s error allocating memory. return -1\012\000" ++.LC82: ++ .ascii "%s %p:0x%x:\000" ++.LC83: ++ .ascii "%x \000" ++.LC84: ++ .ascii "\000" ++.LC85: ++ .ascii "otp error! %d\000" ++.LC86: ++ .ascii "rr\000" ++.LC87: ++ .ascii "%d statReg->V6.mtrans_cnt=%d flReg.V6.page_num=%d\012" ++ .ascii "\000" ++.LC88: ++ .ascii "nandc:\000" ++.LC89: ++ .ascii "%d flReg.d32=%x %x\012\000" ++.LC90: ++ .ascii "sdr read ok %x ecc=%d\012\000" ++.LC91: ++ .ascii "sync para %d\012\000" ++.LC92: ++ .ascii "TOG mode Read error %x %x\012\000" ++.LC93: ++ .ascii "read retry status %x %x %x\012\000" ++.LC94: ++ .ascii "micron RR %d row=%x,count %d,status=%d\012\000" ++.LC95: ++ .ascii "samsung RR %d row=%x,count %d,status=%d\012\000" ++.LC96: ++ .ascii "ECC:%d\012\000" ++.LC97: ++ .ascii "No.%d FLASH ID:%x %x %x %x %x %x\012\000" ++.LC98: ++ .ascii "FlashLoadPhyInfo fail %x!!\012\000" ++.LC99: ++ .ascii "Read pageadd=%x ecc=%x err=%x\012\000" ++.LC100: ++ .ascii "data:\000" ++.LC101: ++ .ascii "spare:\000" ++.LC102: ++ .ascii "ReadRetry pageadd=%x ecc=%x err=%x\012\000" ++.LC103: ++ .ascii "FLFB:%d %d\012\000" ++.LC104: ++ .ascii "prog error: = %x\012\000" ++.LC105: ++ .ascii "prog read error: = %x\012\000" ++.LC106: ++ .ascii "prog read REFRESH: = %x\012\000" ++.LC107: ++ .ascii "prog read s error: = %x %x %x\012\000" ++.LC108: ++ .ascii "prog read d error: = %x %x %x\012\000" ++.LC109: ++ .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data= %x\012" ++ .ascii "\000" ++.LC110: ++ .ascii "...%s enter...\012\000" ++.LC111: ++ .ascii "superBlkID = %x vpc=%x\012\000" ++.LC112: ++ .ascii "flashmode = %x pagenum = %x %x\012\000" ++.LC113: ++ .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC114: ++ .ascii "blk = %x vpc=%x mode = %x\012\000" ++.LC115: ++ .ascii "mlc id = %x,%x addr= %x,spare= %x %x %x %x data=%x " ++ .ascii "%x\012\000" ++.LC116: ++ .ascii "slc id = %x,%x addr= %x,spare= %x %x %x %x data=%x " ++ .ascii "%x\012\000" ++.LC117: ++ .ascii "ftl_scan_all_ppa blk %x page %x flag: %x\012\000" ++.LC118: ++ .ascii "ftl_scan_all_ppa blk %x page %x flag: %x .........." ++ .ascii "..... is bad block\012\000" ++.LC119: ++ .ascii "addr= %x, status= %d,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC120: ++ .ascii "%s finished\012\000" ++.LC121: ++ .ascii "FlashMakeFactorBbt %d\012\000" ++.LC122: ++ .ascii "bad block:%d %d\012\000" ++.LC123: ++ .ascii "FMFB:%d %d\012\000" ++.LC124: ++ .ascii "E:bad block:%d\012\000" ++.LC125: ++ .ascii "FMFB:Save %d %d\012\000" ++.LC126: ++ .ascii "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\012\000" ++.LC127: ++ .ascii "FtlBbmTblFlush error:%x\012\000" ++.LC128: ++ .ascii "FtlBbmTblFlush error = %x error count = %d\012\000" ++.LC129: ++ .ascii "FtlGcFreeBadSuperBlk 0x%x\012\000" ++.LC130: ++ .ascii "decrement_vpc_count %x = %d\012\000" ++.LC131: ++ .ascii "decrement_vpc_count %x = %d in free list\012\000" ++.LC132: ++ .ascii "FtlVpcTblFlush error = %x error count = %d\012\000" ++.LC133: ++ .ascii "page map lost: %x %x\012\000" ++.LC134: ++ .ascii "FtlMapWritePage error = %x\012\000" ++.LC135: ++ .ascii "FtlMapWritePage error = %x error count = %d\012\000" ++.LC136: ++ .ascii "FtlVendorPartRead refresh = %x phyAddr = %x\012\000" ++.LC137: ++ .ascii "no ect\000" ++.LC138: ++ .ascii "slc mode\000" ++.LC139: ++ .ascii "BBT:\000" ++.LC140: ++ .ascii "region_id = %x phyAddr = %x\012\000" ++.LC141: ++ .ascii "map_ppn:\000" ++.LC142: ++ .ascii "load_l2p_region refresh = %x phyAddr = %x\012\000" ++.LC143: ++ .ascii "FtlCheckVpc2 %x = %x %x\012\000" ++.LC144: ++ .ascii "free blk vpc error %x = %x %x\012\000" ++.LC145: ++ .ascii "error_flag %x\012\000" ++.LC146: ++ .ascii "Ftlscanalldata = %x\012\000" ++.LC147: ++ .ascii "scan lpa = %x ppa= %x\012\000" ++.LC148: ++ .ascii "lba = %x,addr= %x,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC149: ++ .ascii "RSB refresh addr %x\012\000" ++.LC150: ++ .ascii "spuer block %x vpn is 0\012 \000" ++.LC151: ++ .ascii "g_recovery_ppa %x ver %x\012 \000" ++.LC152: ++ .ascii "FtlCheckVpc %x = %x %x\012\000" ++.LC153: ++ .ascii "FtlGcScanTempBlk Error ID %x %x!!!!!!! \012\000" ++.LC154: ++ .ascii "FtlGcScanTempBlkError ID %x %x!!!!!!!\012\000" ++.LC155: ++ .ascii "GC des block %x done\012\000" ++.LC156: ++ .ascii "too many bad block = %d %d\012\000" ++.LC157: ++ .ascii "%d GC datablk = %x vpc %x %x\012\000" ++.LC158: ++ .ascii "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\012\000" ++.LC159: ++ .ascii "Ftlwrite decrement_vpc_count %x = %d\012\000" ++.LC160: ++ .ascii "rk_ftl_de_init %x\012\000" ++.LC161: ++ .ascii "...%s: no bad block mapping table, format device\012" ++ .ascii "\000" ++.LC162: ++ .ascii "...%s FtlSysBlkInit error ,format device!\012\000" ++.LC163: ++ .ascii "FtlInit %x\012\000" ++.LC164: ++ .ascii "fix power lost blk = %x vpc=%x\012\000" ++.LC165: ++ .ascii "erase power lost blk = %x vpc=%x\012\000" ++.LC166: ++ .ascii "FtlWrite: lpa error:%x %x\012\000" ++.LC167: ++ .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data = %x\012" ++ .ascii "\000" ++.LC168: ++ .ascii ":\000" ++.LC169: ++ .ascii "phyBlk = %x,addr= %x,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC170: ++ .ascii "Mblk:\000" ++.LC171: ++ .ascii "L2P:\000" ++.LC172: ++ .ascii "L2PC:\000" ++.LC173: ++ .ascii "write_idblock fix data %x %x\012\000" ++.LC174: ++ .ascii "idblk:\000" ++.LC175: ++ .ascii "idb reverse %x %x\012\000" ++.LC176: ++ .ascii "write_idblock totle_sec %x %x %x %x\012\000" ++.LC177: ++ .ascii "IDBlockWriteData %x %x\012\000" ++.LC178: ++ .ascii "IDBlockWriteData %x %x ret= %x\012\000" ++.LC179: ++ .ascii "IdBlockReadData %x %x\012\000" ++.LC180: ++ .ascii "IdBlockReadData %x %x ret= %x\012\000" ++.LC181: ++ .ascii "write and check error:%d idb=%x,offset=%x,r=%x,w=%x" ++ .ascii "\012\000" ++.LC182: ++ .ascii "write\000" ++.LC183: ++ .ascii "read\000" ++.LC184: ++ .ascii "write_idblock error %d\012\000" ++.LC185: ++ .ascii "wl_lba %p %x %x %x\012\000" ++.LC186: ++ .ascii "RKNAND_GET_DRM_KEY\012\000" ++.LC187: ++ .ascii "rk_copy_from_user error\012\000" ++.LC188: ++ .ascii "RKNAND_STORE_DRM_KEY\012\000" ++.LC189: ++ .ascii "RKNAND_DIASBLE_SECURE_BOOT\012\000" ++.LC190: ++ .ascii "RKNAND_ENASBLE_SECURE_BOOT\012\000" ++.LC191: ++ .ascii "RKNAND_GET_SN_SECTOR\012\000" ++.LC192: ++ .ascii "RKNAND_LOADER_UNLOCK\012\000" ++.LC193: ++ .ascii "RKNAND_LOADER_STATUS\012\000" ++.LC194: ++ .ascii "RKNAND_LOADER_LOCK\012\000" ++.LC195: ++ .ascii "LockKey not match %d\012\000" ++.LC196: ++ .ascii "RKNAND_GET_VENDOR_SECTOR\012\000" ++.LC197: ++ .ascii "RKNAND_STORE_VENDOR_SECTOR\012\000" ++.LC198: ++ .ascii "return ret = %lx\012\000" ++.LC199: ++ .ascii "secureBootEn check error\012\000" ++.LC200: ++ .ascii "\0013vendor storage %x,%x,%x\012\000" +diff --git a/drivers/rk_nand/rk_ftl_arm_v7_thumb.S b/drivers/rk_nand/rk_ftl_arm_v7_thumb.S +new file mode 100644 +index 00000000000..a67898acb67 +--- /dev/null ++++ b/drivers/rk_nand/rk_ftl_arm_v7_thumb.S +@@ -0,0 +1,30192 @@ ++/* ++ * 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: 2021-07-26 ++ */ ++ .syntax unified ++ .arch armv7-a ++ .eabi_attribute 20, 1 ++ .eabi_attribute 21, 1 ++ .eabi_attribute 23, 3 ++ .eabi_attribute 24, 1 ++ .eabi_attribute 25, 1 ++ .eabi_attribute 26, 2 ++ .eabi_attribute 30, 4 ++ .eabi_attribute 34, 1 ++ .eabi_attribute 18, 4 ++ .file "rk_ftl_arm_v7.c" ++ .thumb ++ .text ++ .align 1 ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ndelay, %function ++ndelay: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L2 ++ addw r0, r0, #999 ++ umull r0, r1, r0, r3 ++ ldr r3, .L2+4 ++ ldr r3, [r3, #8] ++ lsrs r0, r1, #6 ++ bx r3 @ indirect register sibling call ++.L3: ++ .align 2 ++.L2: ++ .word 274877907 ++ .word arm_delay_ops ++ .fnend ++ .size ndelay, .-ndelay ++ .align 1 ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type flash_read_ecc, %function ++flash_read_ecc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L5 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ movs r0, #80 ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r4, r4, r3, lsl #8 ++ movs r3, #122 ++ str r3, [r4, #2056] ++ bl ndelay ++ ldr r3, [r4, #2048] ++ ldr r0, [r4, #2048] ++ and r3, r3, #15 ++ and r0, r0, #15 ++ cmp r0, r3 ++ it cc ++ movcc r0, r3 ++ ldr r3, [r4, #2048] ++ and r3, r3, #15 ++ cmp r3, r0 ++ it cc ++ movcc r3, r0 ++ ldr r0, [r4, #2048] ++ and r0, r0, #15 ++ cmp r0, r3 ++ it cc ++ movcc r0, r3 ++ pop {r4, pc} ++.L6: ++ .align 2 ++.L5: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_read_ecc, .-flash_read_ecc ++ .align 1 ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_set_blk_mode.part.9, %function ++ftl_set_blk_mode.part.9: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L8 ++ lsrs r1, r0, #5 ++ and r0, r0, #31 ++ ldr r2, [r3, #32] ++ movs r3, #1 ++ lsl r0, r3, r0 ++ ldr r3, [r2, r1, lsl #2] ++ orrs r3, r3, r0 ++ str r3, [r2, r1, lsl #2] ++ bx lr ++.L9: ++ .align 2 ++.L8: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_set_blk_mode.part.9, .-ftl_set_blk_mode.part.9 ++ .align 1 ++ .global FlashMemCmp8 ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashMemCmp8, %function ++FlashMemCmp8: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L18 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cbz r3, .L13 ++ ldrb r4, [r0, #1] @ zero_extendqisi2 ++ ldrb r3, [r1, #1] @ zero_extendqisi2 ++ cmp r4, r3 ++ beq .L17 ++ movs r3, #0 ++.L13: ++ cmp r3, r2 ++ bne .L15 ++.L17: ++ movs r0, #0 ++ pop {r4, r5, pc} ++.L15: ++ ldrb r5, [r0, r3] @ zero_extendqisi2 ++ ldrb r4, [r1, r3] @ zero_extendqisi2 ++ adds r3, r3, #1 ++ cmp r5, r4 ++ beq .L13 ++ mov r0, r3 ++ pop {r4, r5, pc} ++.L19: ++ .align 2 ++.L18: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashMemCmp8, .-FlashMemCmp8 ++ .align 1 ++ .global FlashRsvdBlkChk ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashRsvdBlkChk, %function ++FlashRsvdBlkChk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L23 ++ push {r4, lr} ++ .save {r4, lr} ++ ldrb r4, [r2, #37] @ zero_extendqisi2 ++ ldr r3, [r2, #40] ++ muls r3, r4, r3 ++ cmp r3, r1 ++ bls .L22 ++ adds r0, r0, #0 ++ it ne ++ movne r0, #1 ++ pop {r4, pc} ++.L22: ++ movs r0, #1 ++ pop {r4, pc} ++.L24: ++ .align 2 ++.L23: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashRsvdBlkChk, .-FlashRsvdBlkChk ++ .align 1 ++ .global FlashGetRandomizer ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashGetRandomizer, %function ++FlashGetRandomizer: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L33 ++ and r2, r1, #127 ++ push {r4, lr} ++ .save {r4, lr} ++ ldrh r4, [r3, r2, lsl #1] ++ ldr r3, .L33+4 ++ ldrb r3, [r3, #44] @ zero_extendqisi2 ++ cbz r3, .L25 ++ bl FlashRsvdBlkChk ++ cbz r0, .L25 ++ orr r4, r4, #-1073741824 ++.L25: ++ mov r0, r4 ++ pop {r4, pc} ++.L34: ++ .align 2 ++.L33: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashGetRandomizer, .-FlashGetRandomizer ++ .align 1 ++ .global FlashSetRandomizer ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashSetRandomizer, %function ++FlashSetRandomizer: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ and r2, r1, #127 ++ ldr r3, .L43 ++ mov r6, r0 ++ ldr r4, .L43+4 ++ ldrh r5, [r3, r2, lsl #1] ++ ldrb r2, [r4, #44] @ zero_extendqisi2 ++ cbz r2, .L36 ++ bl FlashRsvdBlkChk ++ cbz r0, .L36 ++ orr r5, r5, #-1073741824 ++.L36: ++ ldr r3, [r4, r6, lsl #3] ++ str r5, [r3, #336] ++ pop {r4, r5, r6, pc} ++.L44: ++ .align 2 ++.L43: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashSetRandomizer, .-FlashSetRandomizer ++ .align 1 ++ .global FlashBlockAlignInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashBlockAlignInit, %function ++FlashBlockAlignInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r0, #512 ++ ldr r3, .L51 ++ bls .L46 ++ mov r2, #1024 ++.L50: ++ str r2, [r3, #40] ++ bx lr ++.L46: ++ cmp r0, #256 ++ bls .L48 ++ mov r2, #512 ++ b .L50 ++.L48: ++ cmp r0, #128 ++ bhi .L49 ++ str r0, [r3, #40] ++ bx lr ++.L49: ++ mov r2, #256 ++ b .L50 ++.L52: ++ .align 2 ++.L51: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashBlockAlignInit, .-FlashBlockAlignInit ++ .align 1 ++ .global FlashReadCmd ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadCmd, %function ++FlashReadCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ push {r4, r5} ++ .save {r4, r5} ++ ldr r4, .L55 ++ ldr r3, [r4, r0, lsl #3] ++ add r2, r4, r0, lsl #3 ++ ldr r4, [r4, #48] ++ ldrb r2, [r2, #4] @ zero_extendqisi2 ++ ldrb r4, [r4, #7] @ zero_extendqisi2 ++ lsls r2, r2, #8 ++ cmp r4, #1 ++ itt eq ++ moveq r5, #38 ++ addeq r4, r3, r2 ++ add r3, r3, r2 ++ mov r2, #0 ++ it eq ++ streq r5, [r4, #2056] ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ uxtb r2, r1 ++ str r2, [r3, #2052] ++ lsrs r2, r1, #8 ++ str r2, [r3, #2052] ++ lsrs r2, r1, #16 ++ str r2, [r3, #2052] ++ movs r2, #48 ++ str r2, [r3, #2056] ++ pop {r4, r5} ++ b FlashSetRandomizer ++.L56: ++ .align 2 ++.L55: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadCmd, .-FlashReadCmd ++ .align 1 ++ .global FlashReadDpDataOutCmd ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadDpDataOutCmd, %function ++FlashReadDpDataOutCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ push {r4, r5, r6} ++ .save {r4, r5, r6} ++ uxtb r6, r1 ++ ldr r4, .L61 ++ lsrs r5, r1, #8 ++ ldr r3, [r4, r0, lsl #3] ++ add r2, r4, r0, lsl #3 ++ ldrb r4, [r4, #68] @ zero_extendqisi2 ++ ldrb r2, [r2, #4] @ zero_extendqisi2 ++ cmp r4, #1 ++ lsr r4, r1, #16 ++ lsl r2, r2, #8 ++ add r3, r3, r2 ++ bne .L58 ++ movs r2, #6 ++ str r2, [r3, #2056] ++ movs r2, #0 ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ str r6, [r3, #2052] ++ str r5, [r3, #2052] ++ str r4, [r3, #2052] ++.L60: ++ movs r2, #224 ++ str r2, [r3, #2056] ++ pop {r4, r5, r6} ++ b FlashSetRandomizer ++.L58: ++ movs r2, #0 ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ str r6, [r3, #2052] ++ str r5, [r3, #2052] ++ str r4, [r3, #2052] ++ movs r4, #5 ++ str r4, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ b .L60 ++.L62: ++ .align 2 ++.L61: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadDpDataOutCmd, .-FlashReadDpDataOutCmd ++ .align 1 ++ .global FlashProgFirstCmd ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashProgFirstCmd, %function ++FlashProgFirstCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ push {r4, r5} ++ .save {r4, r5} ++ lsrs r2, r1, #16 ++ ldr r4, .L64 ++ ldr r3, [r4, r0, lsl #3] ++ add r4, r4, r0, lsl #3 ++ ldrb r4, [r4, #4] @ zero_extendqisi2 ++ add r3, r3, r4, lsl #8 ++ movs r4, #128 ++ str r4, [r3, #2056] ++ movs r4, #0 ++ str r4, [r3, #2052] ++ str r4, [r3, #2052] ++ uxtb r4, r1 ++ str r4, [r3, #2052] ++ lsrs r4, r1, #8 ++ str r4, [r3, #2052] ++ str r2, [r3, #2052] ++ pop {r4, r5} ++ b FlashSetRandomizer ++.L65: ++ .align 2 ++.L64: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgFirstCmd, .-FlashProgFirstCmd ++ .align 1 ++ .global FlashEraseCmd ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashEraseCmd, %function ++FlashEraseCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ ldr r4, .L71 ++ ldr r3, [r4, r0, lsl #3] ++ add r0, r4, r0, lsl #3 ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ lsls r0, r0, #8 ++ cbz r2, .L67 ++ adds r2, r3, r0 ++ movs r5, #96 ++ str r5, [r2, #2056] ++ uxtb r5, r1 ++ str r5, [r2, #2052] ++ lsrs r5, r1, #8 ++ str r5, [r2, #2052] ++ lsrs r5, r1, #16 ++ str r5, [r2, #2052] ++ ldr r2, [r4, #40] ++ add r1, r1, r2 ++.L67: ++ add r3, r3, r0 ++ movs r2, #96 ++ str r2, [r3, #2056] ++ uxtb r2, r1 ++ str r2, [r3, #2052] ++ lsrs r2, r1, #8 ++ lsrs r1, r1, #16 ++ str r2, [r3, #2052] ++ movs r2, #208 ++ str r1, [r3, #2052] ++ str r2, [r3, #2056] ++ pop {r4, r5, pc} ++.L72: ++ .align 2 ++.L71: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashEraseCmd, .-FlashEraseCmd ++ .align 1 ++ .global FlashProgDpSecondCmd ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashProgDpSecondCmd, %function ++FlashProgDpSecondCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ push {r4, r5, r6} ++ .save {r4, r5, r6} ++ lsrs r2, r1, #16 ++ ldr r5, .L74 ++ ldr r3, [r5, r0, lsl #3] ++ add r4, r5, r0, lsl #3 ++ ldrb r6, [r4, #4] @ zero_extendqisi2 ++ ldrb r4, [r5, #63] @ zero_extendqisi2 ++ add r3, r3, r6, lsl #8 ++ str r4, [r3, #2056] ++ movs r4, #0 ++ str r4, [r3, #2052] ++ str r4, [r3, #2052] ++ uxtb r4, r1 ++ str r4, [r3, #2052] ++ lsrs r4, r1, #8 ++ str r4, [r3, #2052] ++ str r2, [r3, #2052] ++ pop {r4, r5, r6} ++ b FlashSetRandomizer ++.L75: ++ .align 2 ++.L74: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgDpSecondCmd, .-FlashProgDpSecondCmd ++ .align 1 ++ .global FlashProgSecondCmd ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashProgSecondCmd, %function ++FlashProgSecondCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ ldr r3, .L77 ++ ldr r4, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ ldr r0, .L77+4 ++ ldrb r5, [r3, #4] @ zero_extendqisi2 ++ ldr r3, .L77+8 ++ add r4, r4, r5, lsl #8 ++ ldr r3, [r3, #4] ++ blx r3 ++ movs r3, #16 ++ str r3, [r4, #2056] ++ pop {r3, r4, r5, pc} ++.L78: ++ .align 2 ++.L77: ++ .word .LANCHOR0 ++ .word 64424500 ++ .word arm_delay_ops ++ .fnend ++ .size FlashProgSecondCmd, .-FlashProgSecondCmd ++ .align 1 ++ .global FlashProgDpFirstCmd ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashProgDpFirstCmd, %function ++FlashProgDpFirstCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L80 ++ ldr r3, [r2, r0, lsl #3] ++ add r0, r2, r0, lsl #3 ++ ldrb r2, [r2, #62] @ zero_extendqisi2 ++ ldrb r1, [r0, #4] @ zero_extendqisi2 ++ add r3, r3, r1, lsl #8 ++ str r2, [r3, #2056] ++ bx lr ++.L81: ++ .align 2 ++.L80: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgDpFirstCmd, .-FlashProgDpFirstCmd ++ .align 1 ++ .global FlashReadStatus ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadStatus, %function ++FlashReadStatus: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ movs r2, #112 ++ ldr r3, .L83 ++ ldr r5, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ movs r0, #80 ++ ldrb r4, [r3, #4] @ zero_extendqisi2 ++ add r3, r5, r4, lsl #8 ++ adds r4, r4, #8 ++ lsls r4, r4, #8 ++ str r2, [r3, #2056] ++ bl ndelay ++ ldr r0, [r5, r4] ++ pop {r3, r4, r5, pc} ++.L84: ++ .align 2 ++.L83: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadStatus, .-FlashReadStatus ++ .align 1 ++ .global js_hash ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type js_hash, %function ++js_hash: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L88 ++ add r1, r1, r0 ++ push {r4, lr} ++ .save {r4, lr} ++.L86: ++ cmp r0, r1 ++ bne .L87 ++ mov r0, r3 ++ pop {r4, pc} ++.L87: ++ lsrs r2, r3, #2 ++ ldrb r4, [r0], #1 @ zero_extendqisi2 ++ add r2, r2, r3, lsl #5 ++ add r2, r2, r4 ++ eors r3, r3, r2 ++ b .L86 ++.L89: ++ .align 2 ++.L88: ++ .word 1204201446 ++ .fnend ++ .size js_hash, .-js_hash ++ .align 1 ++ .global FlashLoadIdbInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashLoadIdbInfo, %function ++FlashLoadIdbInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ movs r0, #0 ++ bx lr ++ .fnend ++ .size FlashLoadIdbInfo, .-FlashLoadIdbInfo ++ .align 1 ++ .global FlashPrintInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashPrintInfo, %function ++FlashPrintInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FlashPrintInfo, .-FlashPrintInfo ++ .align 1 ++ .global ToshibaSetRRPara ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ToshibaSetRRPara, %function ++ToshibaSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ add r8, r1, r1, lsl #2 ++ ldr r9, .L100+8 ++ mov r5, r0 ++ mov r6, r1 ++ movs r4, #0 ++ ldr r7, .L100 ++ add r10, r9, #256 ++.L93: ++ ldrb r3, [r7, #85] @ zero_extendqisi2 ++ cmp r4, r3 ++ bcc .L97 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L97: ++ movs r3, #85 ++ movs r0, #200 ++ str r3, [r5, #8] ++ ldrsb r3, [r4, r10] ++ str r3, [r5, #4] ++ bl ndelay ++ ldrb r3, [r7, #84] @ zero_extendqisi2 ++ cmp r3, #34 ++ bne .L94 ++ add r3, r4, r8 ++ add r3, r3, r10 ++.L99: ++ ldrsb r3, [r3, #5] ++.L98: ++ str r3, [r5] ++ adds r4, r4, #1 ++ b .L93 ++.L94: ++ cmp r3, #35 ++ bne .L96 ++ ldr r2, .L100+4 ++ add r3, r4, r8 ++ add r3, r3, r2 ++ b .L99 ++.L96: ++ add r3, r9, r6 ++ ldrsb r3, [r3, #396] ++ b .L98 ++.L101: ++ .align 2 ++.L100: ++ .word .LANCHOR0 ++ .word .LANCHOR1+301 ++ .word .LANCHOR1 ++ .fnend ++ .size ToshibaSetRRPara, .-ToshibaSetRRPara ++ .align 1 ++ .global SamsungSetRRPara ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type SamsungSetRRPara, %function ++SamsungSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ movs r4, #0 ++ ldr r7, .L105 ++ mov r6, r0 ++ mov r9, #161 ++ mov r10, r4 ++ ldr r8, .L105+4 ++ add r1, r7, r1, lsl #2 ++ adds r5, r1, #3 ++.L103: ++ ldrb r3, [r8, #85] @ zero_extendqisi2 ++ cmp r4, r3 ++ bcc .L104 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L104: ++ str r9, [r6, #8] ++ mov r0, #300 ++ str r10, [r6] ++ ldrsb r3, [r7, r4] ++ adds r4, r4, #1 ++ str r3, [r6] ++ ldrsb r3, [r5, #1]! ++ str r3, [r6] ++ bl ndelay ++ b .L103 ++.L106: ++ .align 2 ++.L105: ++ .word .LANCHOR1+404 ++ .word .LANCHOR0 ++ .fnend ++ .size SamsungSetRRPara, .-SamsungSetRRPara ++ .align 1 ++ .global ftl_flash_suspend ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_flash_suspend, %function ++ftl_flash_suspend: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L108 ++ ldr r2, [r3, #88] ++ ldr r1, [r2] ++ str r1, [r3, #92] ++ ldr r1, [r2, #4] ++ str r1, [r3, #96] ++ ldr r1, [r2, #8] ++ str r1, [r3, #100] ++ ldr r1, [r2, #12] ++ str r1, [r3, #104] ++ ldr r1, [r2, #304] ++ str r1, [r3, #108] ++ ldr r1, [r2, #308] ++ str r1, [r3, #112] ++ ldr r1, [r2, #336] ++ ldr r2, [r2, #344] ++ str r1, [r3, #116] ++ str r2, [r3, #120] ++ bx lr ++.L109: ++ .align 2 ++.L108: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_flash_suspend, .-ftl_flash_suspend ++ .global __aeabi_uidiv ++ .global __aeabi_uidivmod ++ .align 1 ++ .global LogAddr2PhyAddr ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type LogAddr2PhyAddr, %function ++LogAddr2PhyAddr: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r9, r2 ++ ldr r4, .L115 ++ mov fp, r3 ++ mov r10, r1 ++ mov r7, r0 ++ ldr r5, [r0, #4] ++ ldrh r2, [r4, #136] ++ ldrh r3, [r4, #138] ++ ldrh r6, [r4, #40] ++ smulbb r3, r3, r2 ++ ldrb r2, [r4, #36] @ zero_extendqisi2 ++ uxth r3, r3 ++ cmp r2, #1 ++ it eq ++ lsleq r6, r6, #1 ++ ubfx r2, r5, #10, #16 ++ mov r1, r3 ++ str r3, [sp, #4] ++ mov r0, r2 ++ it eq ++ uxtheq r6, r6 ++ str r2, [sp] ++ bl __aeabi_uidiv ++ ldr r3, [sp, #4] ++ uxth r8, r0 ++ ldr r2, [sp] ++ mov r1, r3 ++ mov r0, r2 ++ bl __aeabi_uidivmod ++ cmp r10, #1 ++ uxth r1, r1 ++ ubfx r0, r5, #0, #10 ++ bne .L112 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cbnz r3, .L112 ++ add r0, r4, r0, lsl #1 ++ ldrh r0, [r0, #156] ++.L112: ++ add r4, r4, r8, lsl #2 ++ ldr r3, [r4, #1180] ++ mla r6, r6, r1, r3 ++ ldrb r3, [sp, #48] @ zero_extendqisi2 ++ cmp r3, #1 ++ add r0, r0, r6 ++ str r0, [r9] ++ str r8, [fp] ++ bls .L114 ++ ldr r0, [r7, #4] ++ ldr r3, [r7, #40] ++ add r0, r0, #1024 ++ subs r3, r0, r3 ++ rsbs r0, r3, #0 ++ adcs r0, r0, r3 ++.L113: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L114: ++ movs r0, #0 ++ b .L113 ++.L116: ++ .align 2 ++.L115: ++ .word .LANCHOR0 ++ .fnend ++ .size LogAddr2PhyAddr, .-LogAddr2PhyAddr ++ .align 1 ++ .global FlashReadStatusEN ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadStatusEN, %function ++FlashReadStatusEN: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L129 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r5, [r3, r0, lsl #3] ++ add r0, r3, r0, lsl #3 ++ ldrb r4, [r0, #4] @ zero_extendqisi2 ++ ldr r0, [r3, #48] ++ ldrb r0, [r0, #8] @ zero_extendqisi2 ++ cmp r0, #2 ++ mov r0, r3 ++ lsl r3, r4, #8 ++ add r4, r4, #8 ++ bne .L118 ++ cbnz r2, .L119 ++ ldrb r2, [r0, #65] @ zero_extendqisi2 ++.L128: ++ add r3, r3, r5 ++ str r2, [r3, #2056] ++ ldrb r0, [r0, #67] @ zero_extendqisi2 ++ cbz r0, .L123 ++ add r6, r5, r4, lsl #8 ++ movs r2, #0 ++.L122: ++ cmp r2, r0 ++ bcc .L124 ++.L123: ++ lsls r4, r4, #8 ++ movs r0, #80 ++ bl ndelay ++ ldr r0, [r5, r4] ++ uxtb r0, r0 ++ pop {r4, r5, r6, pc} ++.L119: ++ ldrb r2, [r0, #66] @ zero_extendqisi2 ++ b .L128 ++.L124: ++ lsls r3, r2, #3 ++ adds r2, r2, #1 ++ lsr r3, r1, r3 ++ uxtb r3, r3 ++ str r3, [r6, #4] ++ b .L122 ++.L118: ++ add r3, r3, r5 ++ movs r2, #112 ++ str r2, [r3, #2056] ++ b .L123 ++.L130: ++ .align 2 ++.L129: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadStatusEN, .-FlashReadStatusEN ++ .align 1 ++ .global FlashWaitReadyEN ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashWaitReadyEN, %function ++FlashWaitReadyEN: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++.L132: ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashReadStatusEN ++ cmp r0, #255 ++ mov r3, r0 ++ beq .L132 ++ lsls r3, r3, #25 ++ bmi .L131 ++ movs r1, #3 ++ movs r0, #1 ++ bl usleep_range ++ b .L132 ++.L131: ++ pop {r4, r5, r6, pc} ++ .fnend ++ .size FlashWaitReadyEN, .-FlashWaitReadyEN ++ .align 1 ++ .global FlashScheduleEnSet ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashScheduleEnSet, %function ++FlashScheduleEnSet: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L138 ++ ldr r2, [r3, #1212] ++ str r0, [r3, #1212] ++ mov r0, r2 ++ bx lr ++.L139: ++ .align 2 ++.L138: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashScheduleEnSet, .-FlashScheduleEnSet ++ .align 1 ++ .global FlashGetPageSize ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashGetPageSize, %function ++FlashGetPageSize: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L141 ++ ldr r3, [r3, #48] ++ ldrb r0, [r3, #9] @ zero_extendqisi2 ++ bx lr ++.L142: ++ .align 2 ++.L141: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashGetPageSize, .-FlashGetPageSize ++ .align 1 ++ .global NandcReadDontCaseBusyEn ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcReadDontCaseBusyEn, %function ++NandcReadDontCaseBusyEn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size NandcReadDontCaseBusyEn, .-NandcReadDontCaseBusyEn ++ .align 1 ++ .global NandcGetChipIf ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcGetChipIf, %function ++NandcGetChipIf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L145 ++ add r3, r2, r0, lsl #3 ++ ldr r0, [r2, r0, lsl #3] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ adds r3, r3, #8 ++ add r0, r0, r3, lsl #8 ++ bx lr ++.L146: ++ .align 2 ++.L145: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcGetChipIf, .-NandcGetChipIf ++ .align 1 ++ .global NandcSetDdrPara ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcSetDdrPara, %function ++NandcSetDdrPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L148 ++ ldr r2, [r3, #88] ++ lsls r3, r0, #8 ++ orr r0, r3, r0, lsl #16 ++ orr r0, r0, #1 ++ str r0, [r2, #304] ++ bx lr ++.L149: ++ .align 2 ++.L148: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcSetDdrPara, .-NandcSetDdrPara ++ .align 1 ++ .global NandcSetDdrDiv ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcSetDdrDiv, %function ++NandcSetDdrDiv: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L151 ++ orr r0, r0, #16640 ++ ldr r3, [r3, #88] ++ str r0, [r3, #344] ++ bx lr ++.L152: ++ .align 2 ++.L151: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcSetDdrDiv, .-NandcSetDdrDiv ++ .align 1 ++ .global NandcSetDdrMode ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcSetDdrMode, %function ++NandcSetDdrMode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L156 ++ ldr r2, [r3, #88] ++ ldr r3, [r2] ++ cbnz r0, .L154 ++ bfi r3, r0, #13, #1 ++.L155: ++ str r3, [r2] ++ bx lr ++.L154: ++ orr r3, r3, #253952 ++ b .L155 ++.L157: ++ .align 2 ++.L156: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcSetDdrMode, .-NandcSetDdrMode ++ .align 1 ++ .global NandcSetMode ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcSetMode, %function ++NandcSetMode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L165 ++ ands r1, r0, #6 ++ ldr r2, [r3, #88] ++ ldr r3, [r2] ++ beq .L159 ++ lsls r1, r0, #29 ++ orr r3, r3, #24576 ++ movw r1, #8322 ++ bfc r3, #15, #1 ++ str r1, [r2, #344] ++ add r1, r1, #1040384 ++ addw r1, r1, #3969 ++ orr r3, r3, #196608 ++ str r1, [r2, #304] ++ it mi ++ orrmi r3, r3, #32768 ++ movs r1, #38 ++ str r1, [r2, #308] ++ movs r1, #39 ++ str r1, [r2, #308] ++.L161: ++ str r3, [r2] ++ movs r0, #0 ++ bx lr ++.L159: ++ bfi r3, r1, #13, #1 ++ b .L161 ++.L166: ++ .align 2 ++.L165: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcSetMode, .-NandcSetMode ++ .align 1 ++ .global NandcFlashCs ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcFlashCs, %function ++NandcFlashCs: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L168 ++ movs r2, #1 ++ ldr r1, [r3, r0, lsl #3] ++ add r0, r3, r0, lsl #3 ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ ldr r3, [r1] ++ lsls r2, r2, r0 ++ bfi r3, r2, #0, #8 ++ str r3, [r1] ++ bx lr ++.L169: ++ .align 2 ++.L168: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcFlashCs, .-NandcFlashCs ++ .align 1 ++ .global NandcFlashDeCs ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcFlashDeCs, %function ++NandcFlashDeCs: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L171 ++ ldr r2, [r3, r0, lsl #3] ++ ldr r3, [r2] ++ bfc r3, #0, #8 ++ bfc r3, #17, #1 ++ str r3, [r2] ++ bx lr ++.L172: ++ .align 2 ++.L171: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcFlashDeCs, .-NandcFlashDeCs ++ .align 1 ++ .global HynixSetRRPara ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type HynixSetRRPara, %function ++HynixSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r7, r3 ++ ldr r5, .L181 ++ mov r6, r0 ++ mov r8, r1 ++ mov r9, r2 ++ ldr r3, [r5, #48] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ cmp r3, #6 ++ bne .L174 ++ movs r3, #20 ++ add r4, r5, #1216 ++ add r3, r3, r0, lsl #6 ++ add r3, r3, r7, lsl #2 ++.L180: ++ add r4, r4, r3 ++ b .L175 ++.L174: ++ cmp r3, #7 ++ bne .L176 ++ movs r3, #160 ++ movs r4, #28 ++ smlabb r4, r3, r0, r4 ++ movs r3, #10 ++ add r2, r5, #1216 ++ smlabb r3, r3, r7, r4 ++ adds r4, r2, r3 ++.L175: ++ add r3, r5, r6, lsl #3 ++ ldr r10, [r5, r6, lsl #3] ++ mov r0, r6 ++ ldrb fp, [r3, #4] @ zero_extendqisi2 ++ add r8, r8, #-1 ++ bl NandcFlashCs ++ movs r3, #54 ++ add r8, r8, r9 ++ subs r4, r4, #1 ++ lsl fp, fp, #8 ++ add r0, r10, fp ++ str r3, [r0, #2056] ++ add r3, r9, #-1 ++ mov r9, r0 ++.L178: ++ cmp r3, r8 ++ bne .L179 ++ movs r3, #22 ++ add r10, r10, fp ++ str r3, [r10, #2056] ++ mov r0, r6 ++ add r5, r5, r6 ++ bl NandcFlashDeCs ++ strb r7, [r5, #2068] ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L176: ++ cmp r3, #8 ++ bne .L177 ++ addw r4, r5, #1244 ++ add r3, r7, r7, lsl #2 ++ b .L180 ++.L177: ++ adds r4, r7, #2 ++ add r4, r4, r0, lsl #3 ++ add r4, r5, r4, lsl #3 ++ addw r4, r4, #1220 ++ b .L175 ++.L179: ++ ldrb r2, [r3, #1]! @ zero_extendqisi2 ++ movs r0, #200 ++ str r2, [r9, #2052] ++ str r3, [sp, #4] ++ bl ndelay ++ ldrsb r2, [r4, #1]! ++ ldr r3, [sp, #4] ++ str r2, [r9, #2048] ++ b .L178 ++.L182: ++ .align 2 ++.L181: ++ .word .LANCHOR0 ++ .fnend ++ .size HynixSetRRPara, .-HynixSetRRPara ++ .align 1 ++ .global FlashSetReadRetryDefault ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashSetReadRetryDefault, %function ++FlashSetReadRetryDefault: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r5, .L189 ++ ldr r3, [r5, #48] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ subs r3, r3, #1 ++ cmp r3, #7 ++ bhi .L183 ++ movs r4, #0 ++ addw r6, r5, #2072 ++.L186: ++ ldrb r3, [r6, r4, lsl #3] @ zero_extendqisi2 ++ uxtb r0, r4 ++ cmp r3, #173 ++ bne .L185 ++ movs r3, #0 ++ ldr r2, .L189+4 ++ ldrb r1, [r5, #1217] @ zero_extendqisi2 ++ bl HynixSetRRPara ++.L185: ++ adds r4, r4, #1 ++ cmp r4, #4 ++ bne .L186 ++.L183: ++ pop {r4, r5, r6, pc} ++.L190: ++ .align 2 ++.L189: ++ .word .LANCHOR0 ++ .word .LANCHOR0+1220 ++ .fnend ++ .size FlashSetReadRetryDefault, .-FlashSetReadRetryDefault ++ .align 1 ++ .global FlashWaitCmdDone ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashWaitCmdDone, %function ++FlashWaitCmdDone: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r7, r0 ++ ldr r5, .L198 ++ add r4, r5, r0, lsl #4 ++ ldr r3, [r4, #2112] ++ cbz r3, .L193 ++ ldrb r6, [r4, #2104] @ zero_extendqisi2 ++ add r5, r5, r7, lsl #2 ++ mov r0, r6 ++ bl NandcFlashCs ++ ldr r2, [r5, #1180] ++ mov r0, r6 ++ ldr r1, [r4, #2108] ++ adds r2, r2, #0 ++ it ne ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ mov r1, r0 ++ mov r0, r6 ++ bl NandcFlashDeCs ++ ldr r3, [r4, #2112] ++ sbfx r1, r1, #0, #1 ++ str r1, [r3] ++ movs r3, #0 ++ ldr r2, [r4, #2116] ++ str r3, [r4, #2112] ++ cbz r2, .L193 ++ str r1, [r2] ++ str r3, [r4, #2116] ++.L193: ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, pc} ++.L199: ++ .align 2 ++.L198: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashWaitCmdDone, .-FlashWaitCmdDone ++ .align 1 ++ .global NandcDelayns ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcDelayns, %function ++NandcDelayns: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, lr} ++ .save {r3, lr} ++ bl ndelay ++ movs r0, #0 ++ pop {r3, pc} ++ .fnend ++ .size NandcDelayns, .-NandcDelayns ++ .align 1 ++ .global NandcWaitFlashReadyNoDelay ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcWaitFlashReadyNoDelay, %function ++NandcWaitFlashReadyNoDelay: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L206 ++ push {r0, r1, r2, r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #12 ++ ldr r4, .L206+4 ++ ldr r5, [r3, r0, lsl #3] ++.L203: ++ ldr r3, [r5] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ lsls r3, r3, #22 ++ bmi .L204 ++ movs r0, #10 ++ bl ndelay ++ subs r4, r4, #1 ++ bne .L203 ++ mov r0, #-1 ++.L201: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, pc} ++.L204: ++ movs r0, #0 ++ b .L201 ++.L207: ++ .align 2 ++.L206: ++ .word .LANCHOR0 ++ .word 100000 ++ .fnend ++ .size NandcWaitFlashReadyNoDelay, .-NandcWaitFlashReadyNoDelay ++ .align 1 ++ .global NandcWaitFlashReady ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcWaitFlashReady, %function ++NandcWaitFlashReady: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #12 ++ ldr r3, .L213 ++ ldr r4, .L213+4 ++ ldr r5, [r3, r0, lsl #3] ++ movs r0, #130 ++ bl ndelay ++.L210: ++ ldr r3, [r5] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ lsls r3, r3, #22 ++ bmi .L211 ++ movs r1, #2 ++ movs r0, #1 ++ bl usleep_range ++ subs r4, r4, #1 ++ bne .L210 ++ mov r0, #-1 ++.L208: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, pc} ++.L211: ++ movs r0, #0 ++ b .L208 ++.L214: ++ .align 2 ++.L213: ++ .word .LANCHOR0 ++ .word 100000 ++ .fnend ++ .size NandcWaitFlashReady, .-NandcWaitFlashReady ++ .align 1 ++ .global FlashReset ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReset, %function ++FlashReset: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L216 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ ldr r5, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ ldrb r6, [r3, #4] @ zero_extendqisi2 ++ bl NandcFlashCs ++ movs r3, #255 ++ mov r0, r4 ++ add r5, r5, r6, lsl #8 ++ str r3, [r5, #2056] ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ pop {r4, r5, r6, lr} ++ b NandcFlashDeCs ++.L217: ++ .align 2 ++.L216: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReset, .-FlashReset ++ .align 1 ++ .global flash_enter_slc_mode ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type flash_enter_slc_mode, %function ++flash_enter_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r6, r0 ++ ldr r5, .L224 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cbz r3, .L218 ++ bl NandcFlashCs ++ add r3, r5, r6, lsl #3 ++ ldr r7, [r5, r6, lsl #3] ++ ldrb r8, [r3, #4] @ zero_extendqisi2 ++ ldrb r3, [r3, #2072] @ zero_extendqisi2 ++ cmp r3, #44 ++ lsl r8, r8, #8 ++ bne .L220 ++ add r4, r7, r8 ++ movs r3, #239 ++ str r3, [r4, #2056] ++ movs r3, #145 ++ str r3, [r4, #2052] ++ movs r0, #50 ++ bl ndelay ++ movs r3, #0 ++ movs r2, #1 ++ str r3, [r4, #2048] ++ movs r0, #100 ++ str r2, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ bl ndelay ++.L220: ++ mov r0, r6 ++ add r7, r7, r8 ++ bl NandcWaitFlashReadyNoDelay ++ movs r3, #218 ++ mov r0, r6 ++ str r3, [r7, #2056] ++ bl NandcWaitFlashReady ++ movs r3, #2 ++ strb r3, [r5, #2232] ++.L218: ++ pop {r4, r5, r6, r7, r8, pc} ++.L225: ++ .align 2 ++.L224: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_enter_slc_mode, .-flash_enter_slc_mode ++ .align 1 ++ .global flash_exit_slc_mode ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type flash_exit_slc_mode, %function ++flash_exit_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r6, r0 ++ ldr r5, .L232 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cbz r3, .L226 ++ bl NandcFlashCs ++ add r3, r5, r6, lsl #3 ++ ldr r7, [r5, r6, lsl #3] ++ ldrb r8, [r3, #4] @ zero_extendqisi2 ++ ldrb r3, [r3, #2072] @ zero_extendqisi2 ++ cmp r3, #44 ++ lsl r8, r8, #8 ++ bne .L228 ++ add r4, r7, r8 ++ movs r3, #239 ++ str r3, [r4, #2056] ++ movs r3, #145 ++ str r3, [r4, #2052] ++ movs r0, #50 ++ bl ndelay ++ movs r3, #2 ++ movs r0, #100 ++ str r3, [r4, #2048] ++ movs r3, #1 ++ str r3, [r4, #2048] ++ movs r3, #0 ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ bl ndelay ++.L228: ++ mov r0, r6 ++ add r7, r7, r8 ++ bl NandcWaitFlashReadyNoDelay ++ movs r3, #223 ++ mov r0, r6 ++ str r3, [r7, #2056] ++ bl NandcWaitFlashReady ++ movs r3, #0 ++ strb r3, [r5, #2232] ++.L226: ++ pop {r4, r5, r6, r7, r8, pc} ++.L233: ++ .align 2 ++.L232: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_exit_slc_mode, .-flash_exit_slc_mode ++ .align 1 ++ .global FlashEraseBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashEraseBlock, %function ++FlashEraseBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashEraseCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashReadStatus ++ mov r1, r0 ++ mov r0, r4 ++ bl NandcFlashDeCs ++ and r0, r1, #1 ++ pop {r4, r5, r6, pc} ++ .fnend ++ .size FlashEraseBlock, .-FlashEraseBlock ++ .align 1 ++ .global FlashSetInterfaceMode ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashSetInterfaceMode, %function ++FlashSetInterfaceMode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ movs r5, #0 ++ ldr r6, .L263 ++ mov ip, #128 ++ mov lr, #1 ++ mov r9, #32 ++ mov r10, #5 ++ ldrb r3, [r6, #2233] @ zero_extendqisi2 ++ addw r8, r6, #2072 ++ and r2, r3, #4 ++ and r3, r3, #1 ++ str r2, [sp, #4] ++ mov r2, r5 ++ str r3, [sp] ++.L245: ++ ldrb r4, [r5, r8] @ zero_extendqisi2 ++ cmp r4, #152 ++ beq .L236 ++ cmp r4, #69 ++ beq .L236 ++ cmp r4, #173 ++ beq .L236 ++ cmp r4, #44 ++ bne .L237 ++.L236: ++ cmp r0, #1 ++ add r3, r6, r5 ++ ldr r1, [r6, r5] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ bne .L238 ++ ldr r7, [sp] ++ cbz r7, .L237 ++ lsls r3, r3, #8 ++ cmp r4, #173 ++ mov r7, #239 ++ add fp, r1, r3 ++ str r7, [fp, #2056] ++ bne .L239 ++ str r0, [fp, #2052] ++.L262: ++ str r2, [fp, #2048] ++ b .L243 ++.L239: ++ cmp r4, #44 ++ itete eq ++ streq r0, [fp, #2052] ++ strne ip, [fp, #2052] ++ streq r10, [fp, #2048] ++ strne r0, [fp, #2048] ++.L243: ++ add r3, r3, r1 ++ str r2, [r3, #2048] ++ str r2, [r3, #2048] ++ str r2, [r3, #2048] ++.L237: ++ adds r5, r5, #8 ++ cmp r5, #32 ++ bne .L245 ++ movs r0, #0 ++ bl NandcWaitFlashReady ++ movs r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L238: ++ ldr r7, [sp, #4] ++ cmp r7, #0 ++ beq .L237 ++ lsls r3, r3, #8 ++ cmp r4, #173 ++ mov r7, #239 ++ add fp, r1, r3 ++ str r7, [fp, #2056] ++ bne .L242 ++ str lr, [fp, #2052] ++ str r9, [fp, #2048] ++ b .L243 ++.L242: ++ cmp r4, #44 ++ bne .L244 ++ movs r4, #35 ++ str lr, [fp, #2052] ++ str r4, [fp, #2048] ++ b .L243 ++.L244: ++ str ip, [fp, #2052] ++ b .L262 ++.L264: ++ .align 2 ++.L263: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashSetInterfaceMode, .-FlashSetInterfaceMode ++ .align 1 ++ .global FlashReadSpare ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadSpare, %function ++FlashReadSpare: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r7, r2 ++ ldr r5, .L266 ++ ldr r3, .L266+4 ++ ldr r4, [r5, r0, lsl #3] ++ add r5, r5, r0, lsl #3 ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ ldrb r2, [r5, #4] @ zero_extendqisi2 ++ lsls r3, r3, #9 ++ add r4, r4, r2, lsl #8 ++ movs r2, #0 ++ str r2, [r4, #2056] ++ str r3, [r4, #2052] ++ lsrs r3, r3, #8 ++ str r3, [r4, #2052] ++ uxtb r3, r1 ++ str r3, [r4, #2052] ++ lsrs r3, r1, #8 ++ lsrs r1, r1, #16 ++ str r3, [r4, #2052] ++ movs r3, #48 ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #2048] ++ strb r3, [r7] ++ pop {r3, r4, r5, r6, r7, pc} ++.L267: ++ .align 2 ++.L266: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .fnend ++ .size FlashReadSpare, .-FlashReadSpare ++ .align 1 ++ .global SandiskProgTestBadBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type SandiskProgTestBadBlock, %function ++SandiskProgTestBadBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L269 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r4, r4, r3, lsl #8 ++ movs r3, #162 ++ str r3, [r4, #2056] ++ movs r3, #128 ++ str r3, [r4, #2056] ++ movs r3, #0 ++ str r3, [r4, #2052] ++ str r3, [r4, #2052] ++ uxtb r3, r1 ++ str r3, [r4, #2052] ++ lsrs r3, r1, #8 ++ lsrs r1, r1, #16 ++ str r3, [r4, #2052] ++ movs r3, #16 ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl NandcWaitFlashReady ++ movs r3, #112 ++ movs r0, #80 ++ str r3, [r4, #2056] ++ bl ndelay ++ ldr r0, [r4, #2048] ++ and r0, r0, #1 ++ pop {r4, pc} ++.L270: ++ .align 2 ++.L269: ++ .word .LANCHOR0 ++ .fnend ++ .size SandiskProgTestBadBlock, .-SandiskProgTestBadBlock ++ .align 1 ++ .global SandiskSetRRPara ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type SandiskSetRRPara, %function ++SandiskSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movs r3, #239 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ str r3, [r0, #8] ++ movs r3, #17 ++ mov r5, r0 ++ mov r4, r1 ++ str r3, [r0, #4] ++ movs r0, #200 ++ bl ndelay ++ ldr r0, .L277 ++ add r4, r4, r4, lsl #2 ++ ldr r1, .L277+4 ++ movs r2, #0 ++ sub r6, r0, #45 ++.L272: ++ ldrb r3, [r1, #85] @ zero_extendqisi2 ++ cmp r2, r3 ++ bcc .L275 ++ movs r0, #0 ++ pop {r4, r5, r6, lr} ++ b NandcWaitFlashReady ++.L275: ++ ldrb r3, [r1, #84] @ zero_extendqisi2 ++ cmp r3, #67 ++ add r3, r2, r4 ++ ite eq ++ addeq r3, r3, r6 ++ addne r3, r3, r0 ++ ldrsb r3, [r3, #5] ++ adds r2, r2, #1 ++ str r3, [r5] ++ b .L272 ++.L278: ++ .align 2 ++.L277: ++ .word .LANCHOR1+301 ++ .word .LANCHOR0 ++ .fnend ++ .size SandiskSetRRPara, .-SandiskSetRRPara ++ .align 1 ++ .global micron_auto_read_calibration_config ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type micron_auto_read_calibration_config, %function ++micron_auto_read_calibration_config: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ mov r6, r1 ++ bl NandcWaitFlashReady ++ ldr r0, .L280 ++ ldr r4, [r0, r5, lsl #3] ++ add r0, r0, r5, lsl #3 ++ ldrb r3, [r0, #4] @ zero_extendqisi2 ++ movs r0, #200 ++ add r4, r4, r3, lsl #8 ++ movs r3, #239 ++ str r3, [r4, #2056] ++ movs r3, #150 ++ str r3, [r4, #2052] ++ bl ndelay ++ movs r3, #0 ++ str r6, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ pop {r4, r5, r6, pc} ++.L281: ++ .align 2 ++.L280: ++ .word .LANCHOR0 ++ .fnend ++ .size micron_auto_read_calibration_config, .-micron_auto_read_calibration_config ++ .align 1 ++ .global FlashEraseSLc2KBlocks ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashEraseSLc2KBlocks, %function ++FlashEraseSLc2KBlocks: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #16 ++ movs r5, #0 ++ ldr r8, .L292 ++ mov r6, r0 ++ mov r9, r1 ++ mov r7, r5 ++ ldr r10, .L292+4 ++.L283: ++ cmp r7, r9 ++ bne .L288 ++ movs r0, #0 ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L288: ++ sub r3, r9, r7 ++ add r2, sp, #8 ++ uxtb r3, r3 ++ movs r1, #0 ++ adds r0, r6, r5 ++ str r3, [sp] ++ add r3, sp, #12 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r8, #2234] @ zero_extendqisi2 ++ ldr r3, [sp, #12] ++ cmp r2, r3 ++ bhi .L284 ++ mov r3, #-1 ++ str r3, [r6, r5] ++.L285: ++ adds r7, r7, #1 ++ adds r5, r5, #36 ++ b .L283 ++.L284: ++ add r2, r8, r3 ++ add r3, r8, r3, lsl #4 ++ ldrb r4, [r2, #2236] @ zero_extendqisi2 ++ strb r4, [r3, #2104] ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ movs r2, #0 ++ ldr r1, [sp, #8] ++ mov r0, r4 ++ bl FlashEraseCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ ldr r1, [sp, #8] ++ bl FlashReadStatus ++ sbfx r0, r0, #0, #1 ++ ldr r1, [sp, #8] ++ str r0, [r6, r5] ++ movs r2, #0 ++ ldr r3, [r8, #40] ++ mov r0, r4 ++ add r1, r1, r3 ++ bl FlashEraseCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ ldr r1, [sp, #8] ++ bl FlashReadStatus ++ lsls r3, r0, #31 ++ itt mi ++ movmi r3, #-1 ++ strmi r3, [r6, r5] ++ ldr r3, [r6, r5] ++ adds r3, r3, #1 ++ bne .L287 ++ ldr r1, [sp, #8] ++ mov r0, r10 ++ bl printk ++.L287: ++ mov r0, r4 ++ bl NandcFlashDeCs ++ b .L285 ++.L293: ++ .align 2 ++.L292: ++ .word .LANCHOR0 ++ .word .LC1 ++ .fnend ++ .size FlashEraseSLc2KBlocks, .-FlashEraseSLc2KBlocks ++ .align 1 ++ .global FlashEraseBlocks ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashEraseBlocks, %function ++FlashEraseBlocks: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r9, r0 ++ ldr r4, .L325 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r10, r1 ++ mov r8, r2 ++ ldrb r5, [r4, #36] @ zero_extendqisi2 ++ cbz r5, .L296 ++ mov r1, r2 ++ bl FlashEraseSLc2KBlocks ++.L294: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L305: ++ movs r3, #36 ++ add r2, sp, #8 ++ mul r6, r3, r5 ++ sub r3, r8, r5 ++ uxtb r3, r3 ++ movs r1, #0 ++ str r3, [sp] ++ add r3, sp, #12 ++ add fp, r9, r6 ++ mov r0, fp ++ bl LogAddr2PhyAddr ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ mov r7, r0 ++ ldr r0, [sp, #12] ++ cmp r3, r0 ++ bhi .L298 ++ mov r3, #-1 ++ str r3, [r9, r6] ++.L299: ++ adds r5, r5, #1 ++.L296: ++ cmp r5, r8 ++ bcc .L305 ++ ldr r6, .L325+4 ++ movs r5, #0 ++.L306: ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ cmp r5, r3 ++ bcc .L308 ++ ldr r3, [r4, #2248] ++ cmp r3, #0 ++ bne .L309 ++.L310: ++ movs r0, #0 ++ b .L294 ++.L298: ++ ldrb r3, [r4, #2244] @ zero_extendqisi2 ++ cmp r3, #0 ++ add r3, r4, r0, lsl #4 ++ it eq ++ moveq r7, #0 ++ ldr r3, [r3, #2112] ++ cbz r3, .L301 ++ uxtb r0, r0 ++ bl FlashWaitCmdDone ++.L301: ++ ldr r2, [sp, #12] ++ movs r0, #0 ++ lsls r3, r2, #4 ++ adds r1, r4, r3 ++ str r0, [r1, #2116] ++ ldr r0, [sp, #8] ++ str fp, [r1, #2112] ++ str r0, [r1, #2108] ++ cbz r7, .L302 ++ adds r6, r6, #36 ++ add r6, r6, r9 ++ str r6, [r1, #2116] ++.L302: ++ add r2, r2, r4 ++ add r3, r3, r4 ++ ldrb r6, [r2, #2236] @ zero_extendqisi2 ++ mov r0, r6 ++ strb r6, [r3, #2104] ++ bl NandcFlashCs ++ cmp r10, #1 ++ mov r0, r6 ++ bne .L303 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cbz r3, .L303 ++ bl flash_enter_slc_mode ++.L304: ++ ldr r3, [sp, #12] ++ mov r0, r6 ++ ldr r1, [sp, #8] ++ add r5, r5, r7 ++ add r3, r4, r3, lsl #2 ++ ldr r2, [r3, #1180] ++ adds r2, r2, #0 ++ it ne ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ mov r2, r7 ++ ldr r1, [sp, #8] ++ mov r0, r6 ++ bl FlashEraseCmd ++ mov r0, r6 ++ bl NandcFlashDeCs ++ b .L299 ++.L303: ++ bl flash_exit_slc_mode ++ b .L304 ++.L308: ++ uxtb r0, r5 ++ bl FlashWaitCmdDone ++ cmp r10, #1 ++ bne .L307 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cbz r3, .L307 ++ lsls r3, r5, #4 ++ ldrb r0, [r6, r3] @ zero_extendqisi2 ++ bl flash_exit_slc_mode ++.L307: ++ adds r5, r5, #1 ++ b .L306 ++.L309: ++ ldrb r3, [r4, #2072] @ zero_extendqisi2 ++ cmp r3, #69 ++ bne .L310 ++ movs r3, #0 ++ movs r2, #36 ++ mov r1, r3 ++.L311: ++ cmp r3, r8 ++ beq .L310 ++ mul r0, r2, r3 ++ adds r3, r3, #1 ++ str r1, [r9, r0] ++ b .L311 ++.L326: ++ .align 2 ++.L325: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2104 ++ .fnend ++ .size FlashEraseBlocks, .-FlashEraseBlocks ++ .align 1 ++ .global FlashReadDpCmd ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadDpCmd, %function ++FlashReadDpCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r6, r0 ++ ldr r0, .L332 ++ mov r7, r1 ++ uxtb r9, r2 ++ lsr r8, r2, #8 ++ lsrs r5, r2, #16 ++ uxtb lr, r7 ++ ldr r2, [r0, #48] ++ lsr ip, r7, #8 ++ add r1, r0, r6, lsl #3 ++ ldr r3, [r0, r6, lsl #3] ++ ldrb r4, [r1, #4] @ zero_extendqisi2 ++ ldrb r1, [r0, #68] @ zero_extendqisi2 ++ ldrb r2, [r2, #7] @ zero_extendqisi2 ++ cmp r1, #1 ++ lsl r4, r4, #8 ++ lsr r1, r7, #16 ++ bne .L328 ++ cmp r2, #1 ++ itt eq ++ addeq r2, r3, r4 ++ moveq r10, #38 ++ add r4, r4, r3 ++ it eq ++ streq r10, [r2, #2056] ++ ldrb r3, [r0, #61] @ zero_extendqisi2 ++ mov r10, #0 ++ ldrb r2, [r0, #60] @ zero_extendqisi2 ++ mov r0, r6 ++ str r2, [r4, #2056] ++ str r10, [r4, #2052] ++ str r10, [r4, #2052] ++ str lr, [r4, #2052] ++ str ip, [r4, #2052] ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl NandcWaitFlashReady ++ movs r3, #48 ++ str r10, [r4, #2056] ++ str r10, [r4, #2052] ++ str r10, [r4, #2052] ++ str r9, [r4, #2052] ++ str r8, [r4, #2052] ++ str r5, [r4, #2052] ++ str r3, [r4, #2056] ++.L330: ++ mov r1, r7 ++ mov r0, r6 ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ b FlashSetRandomizer ++.L328: ++ cmp r2, #1 ++ ittt eq ++ addeq r2, r3, r4 ++ moveq r10, #38 ++ streq r10, [r2, #2056] ++ add r3, r3, r4 ++ ldrb r2, [r0, #60] @ zero_extendqisi2 ++ str r2, [r3, #2056] ++ ldrb r2, [r0, #61] @ zero_extendqisi2 ++ str lr, [r3, #2052] ++ str ip, [r3, #2052] ++ str r1, [r3, #2052] ++ str r2, [r3, #2056] ++ movs r2, #48 ++ str r9, [r3, #2052] ++ str r8, [r3, #2052] ++ str r5, [r3, #2052] ++ str r2, [r3, #2056] ++ b .L330 ++.L333: ++ .align 2 ++.L332: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadDpCmd, .-FlashReadDpCmd ++ .align 1 ++ .global ftl_flash_de_init ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_flash_de_init, %function ++ftl_flash_de_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ movs r0, #0 ++ ldr r4, .L344 ++ bl NandcWaitFlashReady ++ bl FlashSetReadRetryDefault ++ ldr r0, [r4, #2252] ++ cbz r0, .L335 ++ movs r0, #0 ++ bl flash_enter_slc_mode ++.L336: ++ ldrb r3, [r4, #2256] @ zero_extendqisi2 ++ cbz r3, .L337 ++ ldrb r3, [r4, #2233] @ zero_extendqisi2 ++ lsls r3, r3, #31 ++ bpl .L337 ++ movs r0, #1 ++ bl FlashSetInterfaceMode ++ movs r0, #1 ++ bl NandcSetMode ++ movs r3, #0 ++ strb r3, [r4, #2256] ++.L337: ++ ldr r3, [r4] ++ movs r0, #0 ++ str r0, [r3, #336] ++ pop {r4, pc} ++.L335: ++ bl flash_exit_slc_mode ++ b .L336 ++.L345: ++ .align 2 ++.L344: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_flash_de_init, .-ftl_flash_de_init ++ .align 1 ++ .global NandcRandmzSel ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcRandmzSel, %function ++NandcRandmzSel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L347 ++ ldr r3, [r3, r0, lsl #3] ++ str r1, [r3, #336] ++ bx lr ++.L348: ++ .align 2 ++.L347: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcRandmzSel, .-NandcRandmzSel ++ .global __aeabi_idiv ++ .align 1 ++ .global NandcTimeCfg ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcTimeCfg, %function ++NandcTimeCfg: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r0 ++ movs r0, #0 ++ bl rknand_get_clk_rate ++ ldr r1, .L359 ++ bl __aeabi_idiv ++ ldr r3, .L359+4 ++ cmp r0, #250 ++ ldr r3, [r3, #88] ++ ble .L350 ++ movw r2, #8354 ++.L357: ++ str r2, [r3, #4] ++ pop {r4, pc} ++.L350: ++ cmp r0, #220 ++ ble .L352 ++.L358: ++ movw r2, #8322 ++ b .L357 ++.L352: ++ cmp r0, #185 ++ ble .L353 ++ movw r2, #4226 ++ b .L357 ++.L353: ++ cmp r0, #160 ++ ble .L354 ++ movw r2, #4194 ++ b .L357 ++.L354: ++ cmp r4, #35 ++ bhi .L355 ++ movw r2, #4193 ++ b .L357 ++.L355: ++ cmp r4, #99 ++ bhi .L358 ++ movw r2, #4225 ++ b .L357 ++.L360: ++ .align 2 ++.L359: ++ .word 1000000 ++ .word .LANCHOR0 ++ .fnend ++ .size NandcTimeCfg, .-NandcTimeCfg ++ .align 1 ++ .global FlashTimingCfg ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashTimingCfg, %function ++FlashTimingCfg: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ sub r3, r0, #4192 ++ subs r3, r3, #1 ++ cmp r3, #1 ++ bls .L362 ++ sub r3, r0, #4224 ++ subs r3, r3, #1 ++ cmp r3, #1 ++ bls .L362 ++ movw r3, #8322 ++ cmp r0, r3 ++ bne .L363 ++.L362: ++ ldr r3, .L364 ++ ldr r3, [r3, #88] ++ str r0, [r3, #4] ++.L363: ++ ldr r3, .L364+4 ++ ldrb r0, [r3, #489] @ zero_extendqisi2 ++ b NandcTimeCfg ++.L365: ++ .align 2 ++.L364: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .fnend ++ .size FlashTimingCfg, .-FlashTimingCfg ++ .align 1 ++ .global NandcInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcInit, %function ++NandcInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ movs r2, #1 ++ ldr r3, .L368 ++ movs r1, #0 ++ movs r5, #0 ++ str r2, [r3, #12] ++ movs r2, #2 ++ str r2, [r3, #20] ++ movs r2, #3 ++ stm r3, {r0, r1} ++ str r0, [r3, #8] ++ str r0, [r3, #16] ++ str r0, [r3, #24] ++ str r0, [r3, #88] ++ str r2, [r3, #28] ++ ldr r2, [r0] ++ and r2, r2, #253952 ++ ubfx r4, r2, #13, #1 ++ bfi r2, r1, #13, #1 ++ ldr r1, [r0, #352] ++ orr r2, r2, #256 ++ str r4, [r3, #2260] ++ movw r4, #2049 ++ ubfx r1, r1, #16, #4 ++ str r1, [r3, #2264] ++ ldr r1, [r0, #352] ++ cmp r1, r4 ++ str r1, [r3, #2268] ++ mov r4, r3 ++ itt eq ++ moveq r3, #8 ++ streq r3, [r4, #2264] ++ str r2, [r0] ++ movs r0, #40 ++ ldr r3, [r4, #88] ++ str r5, [r3, #336] ++ bl NandcTimeCfg ++ ldr r3, [r4, #88] ++ movw r2, #8322 ++ mov r0, #36864 ++ str r2, [r3, #344] ++ ldr r2, .L368+4 ++ str r2, [r3, #304] ++ bl ftl_malloc ++ str r0, [r4, #2272] ++ str r0, [r4, #2276] ++ add r0, r0, #32768 ++ str r0, [r4, #2280] ++ str r5, [r4, #2300] ++ str r5, [r4, #2308] ++ pop {r3, r4, r5, pc} ++.L369: ++ .align 2 ++.L368: ++ .word .LANCHOR0 ++ .word 1579009 ++ .fnend ++ .size NandcInit, .-NandcInit ++ .align 1 ++ .global NandcGetTimeCfg ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcGetTimeCfg, %function ++NandcGetTimeCfg: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ ldr r4, .L371 ++ ldr r5, [r4, #88] ++ ldr r5, [r5, #4] ++ str r5, [r0] ++ ldr r0, [r4, #88] ++ ldr r0, [r0] ++ str r0, [r1] ++ ldr r1, [r4, #88] ++ ldr r1, [r1, #304] ++ str r1, [r2] ++ ldr r1, [r4, #88] ++ ldr r2, [r1, #308] ++ ldr r1, [r1, #344] ++ uxtb r2, r2 ++ orr r2, r2, r1, lsl #16 ++ str r2, [r3] ++ pop {r4, r5, pc} ++.L372: ++ .align 2 ++.L371: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcGetTimeCfg, .-NandcGetTimeCfg ++ .align 1 ++ .global NandcBchSel ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcBchSel, %function ++NandcBchSel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L381 ++ movs r1, #0 ++ push {r4, lr} ++ .save {r4, lr} ++ movs r4, #1 ++ ldr r2, [r3, #88] ++ str r0, [r3, #2312] ++ mov r3, r1 ++ str r4, [r2, #8] ++ movs r4, #16 ++ cmp r0, r4 ++ bfi r3, r4, #8, #8 ++ bfi r3, r1, #18, #1 ++ bne .L374 ++.L377: ++ bfc r3, #4, #1 ++.L375: ++ orr r3, r3, #1 ++ str r3, [r2, #12] ++ pop {r4, pc} ++.L374: ++ cmp r0, #24 ++ bne .L376 ++ orr r3, r3, #16 ++ b .L375 ++.L376: ++ cmp r0, #40 ++ orr r3, r3, #262144 ++ orr r3, r3, #16 ++ bne .L375 ++ b .L377 ++.L382: ++ .align 2 ++.L381: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcBchSel, .-NandcBchSel ++ .align 1 ++ .global FlashBchSel ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashBchSel, %function ++FlashBchSel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L384 ++ strb r0, [r3, #2316] ++ b NandcBchSel ++.L385: ++ .align 2 ++.L384: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashBchSel, .-FlashBchSel ++ .align 1 ++ .global ftl_flash_resume ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_flash_resume, %function ++ftl_flash_resume: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ movs r5, #0 ++ ldr r4, .L394 ++ ldr r2, [r4, #88] ++ addw r6, r4, #2072 ++ ldr r1, [r4, #92] ++ str r1, [r2] ++ ldr r1, [r4, #96] ++ ldr r2, [r4, #88] ++ str r1, [r2, #4] ++ ldr r1, [r4, #100] ++ str r1, [r2, #8] ++ ldr r1, [r4, #104] ++ str r1, [r2, #12] ++ ldr r1, [r4, #108] ++ str r1, [r2, #304] ++ ldr r1, [r4, #112] ++ str r1, [r2, #308] ++ ldr r1, [r4, #116] ++ str r1, [r2, #336] ++ ldr r1, [r4, #120] ++ str r1, [r2, #344] ++.L388: ++ ldrb r3, [r6, r5, lsl #3] @ zero_extendqisi2 ++ subs r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L387 ++ uxtb r0, r5 ++ bl FlashReset ++.L387: ++ adds r5, r5, #1 ++ cmp r5, #4 ++ bne .L388 ++ ldrb r3, [r4, #2256] @ zero_extendqisi2 ++ cbz r3, .L389 ++ movs r0, #1 ++ bl NandcSetMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl NandcSetMode ++ ldrb r0, [r4, #109] @ zero_extendqisi2 ++ bl NandcSetDdrPara ++.L389: ++ ldr r3, [r4, #48] ++ pop {r4, r5, r6, lr} ++ ldrb r0, [r3, #20] @ zero_extendqisi2 ++ b FlashBchSel ++.L395: ++ .align 2 ++.L394: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_flash_resume, .-ftl_flash_resume ++ .align 1 ++ .global ftl_nandc_get_irq_status ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_nandc_get_irq_status, %function ++ftl_nandc_get_irq_status: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r0, [r0, #372] ++ bx lr ++ .fnend ++ .size ftl_nandc_get_irq_status, .-ftl_nandc_get_irq_status ++ .align 1 ++ .global rk_nandc_flash_ready ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_nandc_flash_ready, %function ++rk_nandc_flash_ready: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, [r0, #368] ++ orr r3, r3, #2 ++ str r3, [r0, #368] ++ ldr r3, [r0, #364] ++ bic r3, r3, #2 ++ str r3, [r0, #364] ++ bx lr ++ .fnend ++ .size rk_nandc_flash_ready, .-rk_nandc_flash_ready ++ .align 1 ++ .global NandcIqrWaitFlashReady ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcIqrWaitFlashReady, %function ++NandcIqrWaitFlashReady: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size NandcIqrWaitFlashReady, .-NandcIqrWaitFlashReady ++ .align 1 ++ .global rk_nandc_flash_xfer_completed ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_nandc_flash_xfer_completed, %function ++rk_nandc_flash_xfer_completed: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, [r0, #368] ++ orr r3, r3, #1 ++ str r3, [r0, #368] ++ ldr r3, [r0, #364] ++ bic r3, r3, #1 ++ str r3, [r0, #364] ++ bx lr ++ .fnend ++ .size rk_nandc_flash_xfer_completed, .-rk_nandc_flash_xfer_completed ++ .align 1 ++ .global NandcSendDumpDataStart ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcSendDumpDataStart, %function ++NandcSendDumpDataStart: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, [r0, #16] ++ .pad #8 ++ sub sp, sp, #8 ++ ldr r3, .L401 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ bfc r2, #2, #1 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ str r2, [r0, #16] ++ str r3, [r0, #8] ++ orr r3, r3, #4 ++ str r3, [r0, #8] ++ add sp, sp, #8 ++ @ sp needed ++ bx lr ++.L402: ++ .align 2 ++.L401: ++ .word 538969130 ++ .fnend ++ .size NandcSendDumpDataStart, .-NandcSendDumpDataStart ++ .align 1 ++ .global NandcSendDumpDataDone ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcSendDumpDataDone, %function ++NandcSendDumpDataDone: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ .pad #8 ++ sub sp, sp, #8 ++.L404: ++ ldr r3, [r0, #8] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ lsls r3, r3, #11 ++ bpl .L404 ++ add sp, sp, #8 ++ @ sp needed ++ bx lr ++ .fnend ++ .size NandcSendDumpDataDone, .-NandcSendDumpDataDone ++ .align 1 ++ .global NandcXferStart ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcXferStart, %function ++NandcXferStart: ++ .fnstart ++ @ args = 8, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ mov r6, r1 ++ ldr r1, [sp, #60] ++ str r2, [sp, #4] ++ ldr fp, [sp, #56] ++ cmp r1, #0 ++ bne .L421 ++ adds r1, fp, #0 ++ it ne ++ movne r1, #1 ++.L408: ++ ldr r4, .L426 ++ mov ip, #16 ++ movs r5, #0 ++ ldr r7, [r4, r0, lsl #3] ++ add r0, r4, r0, lsl #3 ++ ldr r8, [r7, #12] ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ bfi r8, ip, #8, #8 ++ bfi r8, r5, #3, #1 ++ bfi r5, r6, #1, #1 ++ bfi r8, r0, #5, #3 ++ orr r5, r5, #8 ++ movs r0, #1 ++ bfi r5, r0, #5, #2 ++ lsrs r3, r3, r0 ++ orr r5, r5, #536870912 ++ orr r5, r5, #1024 ++ bfi r5, r3, #4, #1 ++ ldr r3, [r4, #2264] ++ cmp r3, #3 ++ bls .L409 ++ ldr r3, [r7, #16] ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfc r3, #2, #1 ++ str r3, [sp, #12] ++ cmp r1, #0 ++ beq .L410 ++ cmp r6, #0 ++ bne .L411 ++.L419: ++ ldr r2, [sp, #4] ++ adds r2, r2, #1 ++ asrs r2, r2, #1 ++ bfi r5, r2, #22, #6 ++ cmp fp, #0 ++ beq .L412 ++ mov r0, fp ++.L413: ++ ldr r3, [r4, #2280] ++ ubfx r9, r5, #22, #5 ++ mov r2, r6 ++ lsl r1, r9, #10 ++ str r0, [r4, #2284] ++ str r3, [r4, #2288] ++ bl rknand_dma_map_single ++ mov r2, r6 ++ str r0, [r4, #2292] ++ lsl r1, r9, #7 ++ ldr r0, [r4, #2288] ++ clz r6, r6 ++ bl rknand_dma_map_single ++ movs r3, #1 ++ str r0, [r4, #2296] ++ str r3, [r4, #2300] ++ movs r2, #16 ++ ldr r3, [r4, #2292] ++ tst fp, #3 ++ lsr r6, r6, #5 ++ str r3, [r7, #20] ++ ldr r3, [r4, #2296] ++ str r3, [r7, #24] ++ mov r3, #0 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfi r3, r2, #9, #5 ++ it eq ++ moveq r2, #2 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ orr r3, r3, #448 ++ str r3, [sp, #12] ++ ittt eq ++ ldreq r3, [sp, #12] ++ bfieq r3, r2, #3, #3 ++ streq r3, [sp, #12] ++ ldr r3, [sp, #12] ++ orr r3, r3, #4 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfi r3, r6, #1, #1 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ orr r3, r3, #1 ++ str r3, [sp, #12] ++.L410: ++ ldr r3, [sp, #12] ++ str r3, [r7, #16] ++.L409: ++ str r8, [r7, #12] ++ str r5, [r7, #8] ++ orr r5, r5, #4 ++ str r5, [r7, #8] ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L421: ++ movs r1, #1 ++ b .L408 ++.L411: ++ ldr r3, [r4, #2312] ++ cmp r3, #25 ++ ldr r3, [sp, #4] ++ ite cc ++ movcc r10, #64 ++ movcs r10, #128 ++ lsr r9, r3, #1 ++ ldr r3, [sp, #60] ++ str r3, [sp] ++ movs r3, #0 ++ mov r0, r3 ++.L415: ++ cmp r0, r9 ++ bcs .L419 ++ ldr r1, [sp, #60] ++ bic lr, r3, #3 ++ cbz r1, .L416 ++ ldr r2, [sp] ++ ldr r1, [r2], #4 @ unaligned ++ str r2, [sp] ++ mov r2, r1 ++ ldr r1, [r4, #2280] ++ mov ip, r1 ++ str r2, [ip, lr] ++.L417: ++ adds r0, r0, #1 ++ add r3, r3, r10 ++ b .L415 ++.L416: ++ ldr r1, [r4, #2280] ++ mov r2, #-1 ++ str r2, [r1, lr] ++ b .L417 ++.L412: ++ ldr r0, [r4, #2276] ++ b .L413 ++.L427: ++ .align 2 ++.L426: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcXferStart, .-NandcXferStart ++ .align 1 ++ .global Ftl_log2 ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type Ftl_log2, %function ++Ftl_log2: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ movs r1, #0 ++ movs r2, #1 ++.L429: ++ cmp r2, r0 ++ uxth r3, r1 ++ add r1, r1, #1 ++ bls .L430 ++ subs r0, r3, #1 ++ uxth r0, r0 ++ bx lr ++.L430: ++ lsls r2, r2, #1 ++ b .L429 ++ .fnend ++ .size Ftl_log2, .-Ftl_log2 ++ .align 1 ++ .global FtlPrintInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlPrintInfo, %function ++FtlPrintInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FtlPrintInfo, .-FtlPrintInfo ++ .align 1 ++ .global FtlSysBlkNumInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlSysBlkNumInit, %function ++FtlSysBlkNumInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L433 ++ cmp r0, #24 ++ it cc ++ movcc r0, #24 ++ ldrh r2, [r3, #2324] ++ ldrh r1, [r3, #2334] ++ str r0, [r3, #2320] ++ muls r2, r0, r2 ++ subs r0, r1, r0 ++ ldr r1, [r3, #2340] ++ strh r0, [r3, #2332] @ movhi ++ movs r0, #0 ++ str r2, [r3, #2328] ++ subs r2, r1, r2 ++ str r2, [r3, #2336] ++ bx lr ++.L434: ++ .align 2 ++.L433: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlSysBlkNumInit, .-FtlSysBlkNumInit ++ .align 1 ++ .global FtlConstantsInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlConstantsInit, %function ++FtlConstantsInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ ldrh r1, [r0, #14] ++ mov r5, r0 ++ ldr r4, .L462 ++ str r1, [sp] ++ ldrh r1, [sp] ++ ldrh ip, [r0, #8] ++ ldrh r2, [r0, #10] ++ ldrh r3, [r0, #12] ++ addw r0, r4, #2350 ++ strh r1, [r4, #2334] @ movhi ++ movs r1, #0 ++ strh ip, [r4, #2344] @ movhi ++ strh r2, [r4, #2346] @ movhi ++ strh r3, [r4, #2348] @ movhi ++.L436: ++ strb r1, [r1, r0] ++ adds r1, r1, #1 ++ cmp r1, #32 ++ bne .L436 ++ ldrh r0, [r5, #14] ++ ldrh r1, [r5, #20] ++ cmp r1, r0, lsr #8 ++ bcs .L437 ++ uxtb r10, r3 ++ ldr r9, .L462+4 ++ lsl r1, r10, #1 ++ uxtb r1, r1 ++ str r1, [sp, #4] ++ subs r1, r2, #1 ++ muls r1, r3, r1 ++ str r1, [sp, #12] ++ movs r1, #0 ++.L438: ++ cmp r1, r3 ++ bcs .L440 ++ ldr r6, [sp, #12] ++ sub lr, r1, r3 ++ uxtb r0, r1 ++ add lr, lr, r9 ++ adds r6, r1, r6 ++ add r6, r9, r6 ++ str r6, [sp, #8] ++ movs r6, #0 ++ mov r8, r6 ++ b .L441 ++.L439: ++ ldr r7, [sp, #8] ++ add fp, r10, r0 ++ strb r0, [lr, r6] ++ add r8, r8, #1 ++ strb fp, [r7, r6] ++ ldr r7, [sp, #4] ++ add r0, r0, r7 ++ uxtb r0, r0 ++.L441: ++ cmp r8, r2 ++ add r6, r6, r3 ++ bcc .L439 ++ adds r1, r1, #1 ++ b .L438 ++.L440: ++ lsls r2, r2, #1 ++ strh r2, [r4, #2346] @ movhi ++ ldr r2, [sp] ++ lsrs r7, r2, #1 ++ strh r7, [r4, #2334] @ movhi ++.L437: ++ movs r2, #5 ++ ldrb r9, [r4, #36] @ zero_extendqisi2 ++ strh r2, [r4, #2382] @ movhi ++ movs r2, #0 ++ strh r2, [r4, #2384] @ movhi ++ cmp ip, #1 ++ mov r2, #4352 ++ it eq ++ strheq ip, [r4, #2382] @ movhi ++ strh r2, [r4, #2386] @ movhi ++ cmp r9, #0 ++ beq .L443 ++ mov r2, #384 ++ strh r2, [r4, #2386] @ movhi ++.L443: ++ ldrh r7, [r4, #2346] ++ ldrh r6, [r4, #2334] ++ ldrh r8, [r5, #16] ++ ldrh fp, [r5, #20] ++ smulbb r7, r7, r3 ++ ldrh r1, [r5, #18] ++ smulbb r3, r3, r6 ++ strh r8, [r4, #2390] @ movhi ++ mov r0, fp ++ strh fp, [r4, #2396] @ movhi ++ uxth r7, r7 ++ strh r1, [r4, #2392] @ movhi ++ strh r3, [r4, #2388] @ movhi ++ smulbb r3, r7, r8 ++ str r1, [sp] ++ strh r7, [r4, #2324] @ movhi ++ strh r3, [r4, #2394] @ movhi ++ bl Ftl_log2 ++ lsl r3, fp, #9 ++ cmp r6, #1024 ++ strh r0, [r4, #2398] @ movhi ++ mov r10, r0 ++ uxth r3, r3 ++ ldr r1, [sp] ++ ldrh r0, [r4, #2386] ++ strh r3, [r4, #2400] @ movhi ++ lsr r3, r3, #8 ++ strh r3, [r4, #2402] @ movhi ++ mul r1, fp, r1 ++ ldrh r3, [r5, #26] ++ lsl r0, r0, #3 ++ strh r3, [r4, #2404] @ movhi ++ mul r3, r6, r7 ++ str r3, [r4, #2340] ++ itt hi ++ uxtbhi r3, r6 ++ strhhi r3, [r4, #2384] @ movhi ++ ldrh r3, [r4, #2384] ++ subs r3, r6, r3 ++ muls r3, r7, r3 ++ mul r3, fp, r3 ++ mul r8, r8, r3 ++ asr r3, r8, #11 ++ str r3, [r4, #2408] ++ bl __aeabi_idiv ++ uxth r0, r0 ++ cmp r0, #4 ++ itet ls ++ movls r3, #4 ++ strhhi r0, [r4, #2412] @ movhi ++ strhls r3, [r4, #2412] @ movhi ++ cmp r9, #0 ++ beq .L447 ++ mov r3, #640 ++ strh r3, [r4, #2386] @ movhi ++.L447: ++ ldrh r3, [r4, #2386] ++ lsls r6, r6, #6 ++ mov r1, r7 ++ ldrh r0, [r4, #2412] ++ asr r3, r3, r10 ++ add r10, r10, #9 ++ asr r6, r6, r10 ++ adds r3, r3, #2 ++ strh r6, [r4, #2416] @ movhi ++ uxth r6, r6 ++ strh r3, [r4, #2414] @ movhi ++ mul r3, r6, r7 ++ adds r6, r6, #8 ++ str r3, [r4, #2420] ++ bl __aeabi_uidiv ++ uxtah r0, r6, r0 ++ cmp r7, #1 ++ it eq ++ addeq r0, r0, #4 ++ str r0, [r4, #2320] ++ ldrh r0, [r4, #2320] ++ bl FtlSysBlkNumInit ++ ldr r5, [r4, #2336] ++ mov r0, #2048 ++ ldr r3, [r4, #2320] ++ ldrh r6, [r4, #2396] ++ str r3, [r4, #2424] ++ lsls r3, r5, #2 ++ ldrh r5, [r4, #2390] ++ mov r1, r6 ++ muls r5, r3, r5 ++ ldrh r3, [r4, #2398] ++ adds r3, r3, #9 ++ lsrs r5, r5, r3 ++ adds r5, r5, #2 ++ uxth r5, r5 ++ strh r5, [r4, #2428] @ movhi ++ bl __aeabi_idiv ++ ldrh r2, [r4, #2412] ++ movs r3, #0 ++ str r3, [r4, #2432] ++ strh r0, [r4, #2430] @ movhi ++ adds r3, r2, #3 ++ ldrb r0, [r4, #152] @ zero_extendqisi2 ++ strh r3, [r4, #2412] @ movhi ++ ldr r3, [r4, #2420] ++ adds r1, r3, #3 ++ str r1, [r4, #2420] ++ cbz r0, .L450 ++ adds r3, r3, #5 ++ adds r2, r2, #4 ++ strh r2, [r4, #2412] @ movhi ++.L461: ++ str r3, [r4, #2420] ++.L451: ++ ldrh r2, [r4, #2332] ++ movs r3, #0 ++ strh r3, [r4, #2436] @ movhi ++ movs r0, #0 ++ lsrs r3, r2, #3 ++ add r3, r3, r2, lsl #1 ++ adds r3, r3, #52 ++ add r5, r3, r5, lsl #2 ++ cmp r5, r6, lsl #9 ++ itt cc ++ movcc r3, #1 ++ strhcc r3, [r4, #2436] @ movhi ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L450: ++ cmp r1, #7 ++ bhi .L451 ++ movs r3, #8 ++ b .L461 ++.L463: ++ .align 2 ++.L462: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2350 ++ .fnend ++ .size FtlConstantsInit, .-FtlConstantsInit ++ .align 1 ++ .global IsBlkInVendorPart ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type IsBlkInVendorPart, %function ++IsBlkInVendorPart: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L471 ++ ldrh r3, [r2, #2438] ++ cbz r3, .L470 ++ ldr r3, [r2, #2440] ++ ldrh r2, [r2, #2412] ++ add r2, r3, r2, lsl #1 ++.L466: ++ cmp r3, r2 ++ bne .L467 ++.L470: ++ movs r0, #0 ++ bx lr ++.L467: ++ ldrh r1, [r3], #2 ++ cmp r0, r1 ++ bne .L466 ++ movs r0, #1 ++ bx lr ++.L472: ++ .align 2 ++.L471: ++ .word .LANCHOR0 ++ .fnend ++ .size IsBlkInVendorPart, .-IsBlkInVendorPart ++ .align 1 ++ .global FtlCacheMetchLpa ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlCacheMetchLpa, %function ++FtlCacheMetchLpa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L481 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r3, [r2, #2444] ++ cbz r3, .L480 ++ ldr r5, [r2, #2448] ++ movs r6, #36 ++ movs r2, #0 ++.L476: ++ mla r4, r6, r2, r5 ++ ldr r4, [r4, #16] ++ cmp r4, r0 ++ bcc .L475 ++ cmp r4, r1 ++ bls .L478 ++.L475: ++ adds r2, r2, #1 ++ cmp r3, r2 ++ bne .L476 ++.L480: ++ movs r0, #0 ++ pop {r4, r5, r6, pc} ++.L478: ++ movs r0, #1 ++ pop {r4, r5, r6, pc} ++.L482: ++ .align 2 ++.L481: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlCacheMetchLpa, .-FtlCacheMetchLpa ++ .align 1 ++ .global FtlGetCap ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGetCap, %function ++FtlGetCap: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L484 ++ ldr r0, [r3, #2432] ++ bx lr ++.L485: ++ .align 2 ++.L484: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGetCap, .-FtlGetCap ++ .align 1 ++ .global FtlGetCapacity ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGetCapacity, %function ++FtlGetCapacity: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L487 ++ ldr r0, [r3, #2432] ++ bx lr ++.L488: ++ .align 2 ++.L487: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGetCapacity, .-FtlGetCapacity ++ .align 1 ++ .global ftl_get_density ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_get_density, %function ++ftl_get_density: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L490 ++ ldr r0, [r3, #2432] ++ bx lr ++.L491: ++ .align 2 ++.L490: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_get_density, .-ftl_get_density ++ .align 1 ++ .global FtlGetLpn ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGetLpn, %function ++FtlGetLpn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L493 ++ ldr r0, [r3, #2452] ++ bx lr ++.L494: ++ .align 2 ++.L493: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGetLpn, .-FtlGetLpn ++ .align 1 ++ .global FtlBbmMapBadBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlBbmMapBadBlock, %function ++FtlBbmMapBadBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ .pad #12 ++ mov r5, r0 ++ ldr r4, .L496 ++ ldrh r7, [r4, #2388] ++ mov r1, r7 ++ bl __aeabi_uidiv ++ uxth r6, r0 ++ mov r1, r7 ++ mov r0, r5 ++ bl __aeabi_uidivmod ++ add r2, r4, r6, lsl #2 ++ uxth r3, r1 ++ ldr r2, [r2, #2484] ++ lsrs r1, r3, #5 ++ and r7, r3, #31 ++ movs r0, #1 ++ lsls r0, r0, r7 ++ ldr r7, [r2, r1, lsl #2] ++ orrs r0, r0, r7 ++ str r0, [r2, r1, lsl #2] ++ mov r2, r6 ++ str r0, [sp] ++ mov r1, r5 ++ ldr r0, .L496+4 ++ bl printk ++ ldrh r3, [r4, #2462] ++ movs r0, #0 ++ adds r3, r3, #1 ++ strh r3, [r4, #2462] @ movhi ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, pc} ++.L497: ++ .align 2 ++.L496: ++ .word .LANCHOR0 ++ .word .LC2 ++ .fnend ++ .size FtlBbmMapBadBlock, .-FtlBbmMapBadBlock ++ .align 1 ++ .global FtlBbmIsBadBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlBbmIsBadBlock, %function ++FtlBbmIsBadBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r7, r0 ++ ldr r5, .L499 ++ ldrh r6, [r5, #2388] ++ mov r1, r6 ++ bl __aeabi_uidivmod ++ mov r0, r7 ++ uxth r4, r1 ++ mov r1, r6 ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ lsrs r2, r4, #5 ++ add r5, r5, r0, lsl #2 ++ and r4, r4, #31 ++ ldr r3, [r5, #2484] ++ ldr r0, [r3, r2, lsl #2] ++ lsrs r0, r0, r4 ++ and r0, r0, #1 ++ pop {r3, r4, r5, r6, r7, pc} ++.L500: ++ .align 2 ++.L499: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlBbmIsBadBlock, .-FtlBbmIsBadBlock ++ .align 1 ++ .global FtlBbtInfoPrint ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlBbtInfoPrint, %function ++FtlBbtInfoPrint: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FtlBbtInfoPrint, .-FtlBbtInfoPrint ++ .align 1 ++ .global FtlBbtCalcTotleCnt ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlBbtCalcTotleCnt, %function ++FtlBbtCalcTotleCnt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L509 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ movs r5, #0 ++ mov r4, r5 ++ ldrh r2, [r3, #2388] ++ ldrh r6, [r3, #2346] ++ muls r6, r2, r6 ++.L503: ++ uxth r0, r5 ++ cmp r0, r6 ++ blt .L505 ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L505: ++ bl FtlBbmIsBadBlock ++ cbz r0, .L504 ++ adds r4, r4, #1 ++ uxth r4, r4 ++.L504: ++ adds r5, r5, #1 ++ b .L503 ++.L510: ++ .align 2 ++.L509: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt ++ .align 1 ++ .global V2P_block ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type V2P_block, %function ++V2P_block: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r5, r1 ++ ldr r4, .L512 ++ mov r7, r0 ++ ldrh r6, [r4, #2348] ++ mov r1, r6 ++ bl __aeabi_uidiv ++ ldrh r4, [r4, #2388] ++ smulbb r5, r6, r5 ++ mov r1, r6 ++ smulbb r4, r4, r0 ++ mov r0, r7 ++ bl __aeabi_uidivmod ++ adds r0, r5, r1 ++ add r0, r0, r4 ++ uxth r0, r0 ++ pop {r3, r4, r5, r6, r7, pc} ++.L513: ++ .align 2 ++.L512: ++ .word .LANCHOR0 ++ .fnend ++ .size V2P_block, .-V2P_block ++ .align 1 ++ .global P2V_plane ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type P2V_plane, %function ++P2V_plane: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L515 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r6, r0 ++ ldrh r5, [r3, #2348] ++ ldrh r1, [r3, #2388] ++ bl __aeabi_uidiv ++ mov r1, r5 ++ smulbb r4, r0, r5 ++ mov r0, r6 ++ bl __aeabi_uidivmod ++ add r1, r1, r4 ++ uxth r0, r1 ++ pop {r4, r5, r6, pc} ++.L516: ++ .align 2 ++.L515: ++ .word .LANCHOR0 ++ .fnend ++ .size P2V_plane, .-P2V_plane ++ .align 1 ++ .global P2V_block_in_plane ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type P2V_block_in_plane, %function ++P2V_block_in_plane: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, .L518 ++ ldrh r1, [r4, #2388] ++ bl __aeabi_uidivmod ++ uxth r0, r1 ++ ldrh r1, [r4, #2348] ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ pop {r4, pc} ++.L519: ++ .align 2 ++.L518: ++ .word .LANCHOR0 ++ .fnend ++ .size P2V_block_in_plane, .-P2V_block_in_plane ++ .align 1 ++ .global ftl_cmp_data_ver ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_cmp_data_ver, %function ++ftl_cmp_data_ver: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r0, r1 ++ bls .L521 ++ subs r0, r0, r1 ++ cmp r0, #-2147483648 ++ ite hi ++ movhi r0, #0 ++ movls r0, #1 ++ bx lr ++.L521: ++ subs r0, r1, r0 ++ cmp r0, #-2147483648 ++ ite ls ++ movls r0, #0 ++ movhi r0, #1 ++ bx lr ++ .fnend ++ .size ftl_cmp_data_ver, .-ftl_cmp_data_ver ++ .align 1 ++ .global FtlFreeSysBlkQueueEmpty ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueEmpty, %function ++FtlFreeSysBlkQueueEmpty: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L524 ++ ldrh r0, [r3, #2522] ++ clz r0, r0 ++ lsrs r0, r0, #5 ++ bx lr ++.L525: ++ .align 2 ++.L524: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty ++ .align 1 ++ .global FtlFreeSysBlkQueueFull ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueFull, %function ++FtlFreeSysBlkQueueFull: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L527 ++ ldrh r0, [r3, #2522] ++ sub r3, r0, #1024 ++ rsbs r0, r3, #0 ++ adcs r0, r0, r3 ++ bx lr ++.L528: ++ .align 2 ++.L527: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull ++ .align 1 ++ .global FtlFreeSysBlkQueueIn ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueIn, %function ++FtlFreeSysBlkQueueIn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ subs r3, r0, #1 ++ uxth r3, r3 ++ movw r2, #65533 ++ mov r6, r0 ++ cmp r3, r2 ++ bhi .L529 ++ ldr r4, .L538 ++ ldrh r3, [r4, #2522] ++ cmp r3, #1024 ++ beq .L529 ++ cbz r1, .L531 ++ ldr r5, .L538+4 ++ ldr r3, [r5, #228] ++ cbnz r3, .L531 ++ bl P2V_block_in_plane ++ mov r7, r0 ++ ldr r0, [r5, #232] ++ lsls r3, r6, #10 ++ movs r2, #1 ++ mov r1, r2 ++ str r3, [r0, #4] ++ bl FlashEraseBlocks ++ ldr r2, [r5, #236] ++ ldrh r3, [r2, r7, lsl #1] ++ adds r3, r3, #1 ++ strh r3, [r2, r7, lsl #1] @ movhi ++ ldr r3, [r5, #240] ++ adds r3, r3, #1 ++ str r3, [r5, #240] ++.L531: ++ ldrh r3, [r4, #2522] ++ adds r3, r3, #1 ++ strh r3, [r4, #2522] @ movhi ++ ldrh r3, [r4, #2520] ++ add r2, r4, r3, lsl #1 ++ adds r3, r3, #1 ++ ubfx r3, r3, #0, #10 ++ strh r6, [r2, #2524] @ movhi ++ strh r3, [r4, #2520] @ movhi ++.L529: ++ pop {r3, r4, r5, r6, r7, pc} ++.L539: ++ .align 2 ++.L538: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn ++ .align 1 ++ .global FtlFreeSysBLkSort ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlFreeSysBLkSort, %function ++FtlFreeSysBLkSort: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L549 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldrh r2, [r3, #2522] ++ cbz r2, .L540 ++ ldr r2, .L549+4 ++ movs r0, #0 ++ ldrh r1, [r3, #2518] ++ mov r6, r0 ++ ldrh r5, [r2, #272] ++ ldrh r2, [r3, #2520] ++ and r5, r5, #31 ++.L542: ++ uxth r4, r0 ++ adds r0, r0, #1 ++ cmp r5, r4 ++ bgt .L543 ++ cbz r6, .L540 ++ strh r1, [r3, #2518] @ movhi ++ strh r2, [r3, #2520] @ movhi ++.L540: ++ pop {r4, r5, r6, pc} ++.L543: ++ add r4, r3, r1, lsl #1 ++ adds r1, r1, #1 ++ ubfx r1, r1, #0, #10 ++ ldrh r6, [r4, #2524] ++ add r4, r3, r2, lsl #1 ++ strh r6, [r4, #2524] @ movhi ++ movs r6, #1 ++ add r2, r2, r6 ++ ubfx r2, r2, #0, #10 ++ b .L542 ++.L550: ++ .align 2 ++.L549: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlFreeSysBLkSort, .-FtlFreeSysBLkSort ++ .align 1 ++ .global FtlFreeSysBlkQueueOut ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueOut, %function ++FtlFreeSysBlkQueueOut: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, lr} ++ ldr r4, .L561 ++ ldr r5, .L561+4 ++ mov r7, r4 ++.L552: ++ ldrh r1, [r4, #2522] ++ cmp r1, #0 ++ beq .L553 ++ ldrh r3, [r4, #2518] ++ subs r1, r1, #1 ++ ldr r9, [r5, #228] ++ strh r1, [r4, #2522] @ movhi ++ add r2, r4, r3, lsl #1 ++ adds r3, r3, #1 ++ ubfx r3, r3, #0, #10 ++ ldrh r6, [r2, #2524] ++ strh r3, [r4, #2518] @ movhi ++ cmp r9, #0 ++ bne .L554 ++ mov r0, r6 ++ bl P2V_block_in_plane ++ mov r8, r0 ++ ldr r0, [r5, #232] ++ lsls r3, r6, #10 ++ str r3, [r0, #4] ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cbz r3, .L555 ++ movs r2, #1 ++ mov r1, r9 ++ bl FlashEraseBlocks ++.L555: ++ movs r2, #1 ++ ldr r0, [r5, #232] ++ mov r1, r2 ++ bl FlashEraseBlocks ++ ldr r2, [r5, #236] ++ ldrh r3, [r2, r8, lsl #1] ++ adds r3, r3, #1 ++ strh r3, [r2, r8, lsl #1] @ movhi ++ ldr r3, [r5, #240] ++ adds r3, r3, #1 ++ str r3, [r5, #240] ++.L554: ++ subs r3, r6, #1 ++ movw r2, #65533 ++ uxth r3, r3 ++ cmp r3, r2 ++ bls .L557 ++ ldrh r2, [r7, #2522] ++ mov r1, r6 ++ ldr r0, .L561+8 ++ bl printk ++ b .L552 ++.L553: ++ ldr r0, .L561+12 ++ bl printk ++.L556: ++ b .L556 ++.L557: ++ mov r0, r6 ++ pop {r3, r4, r5, r6, r7, r8, r9, pc} ++.L562: ++ .align 2 ++.L561: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC4 ++ .word .LC3 ++ .fnend ++ .size FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut ++ .align 1 ++ .global test_node_in_list ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type test_node_in_list, %function ++test_node_in_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L568 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ movw r5, #65535 ++ ldr r2, [r0] ++ ldr r4, [r3, #292] ++ subs r3, r2, r4 ++ asrs r0, r3, #1 ++ ldr r3, .L568+4 ++ muls r3, r0, r3 ++ movs r0, #6 ++ uxth r3, r3 ++.L565: ++ cmp r3, r1 ++ beq .L566 ++ ldrh r3, [r2] ++ cmp r3, r5 ++ beq .L567 ++ mla r2, r0, r3, r4 ++ b .L565 ++.L566: ++ movs r0, #1 ++ pop {r4, r5, pc} ++.L567: ++ movs r0, #0 ++ pop {r4, r5, pc} ++.L569: ++ .align 2 ++.L568: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size test_node_in_list, .-test_node_in_list ++ .align 1 ++ .global insert_data_list ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type insert_data_list, %function ++insert_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r5, .L585 ++ ldrh r3, [r5, #2332] ++ cmp r3, r0 ++ bls .L572 ++ ldr r2, .L585+4 ++ movs r4, #6 ++ muls r4, r0, r4 ++ movw r3, #65535 ++ ldr ip, [r2, #292] ++ mov r7, r2 ++ add r1, ip, r4 ++ strh r3, [r1, #2] @ movhi ++ strh r3, [ip, r4] @ movhi ++ ldr r3, [r2, #296] ++ cbnz r3, .L573 ++ str r1, [r2, #296] ++.L572: ++ movs r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L573: ++ ldrh r6, [r1, #4] ++ lsl r10, r0, #1 ++ ldr r8, [r2, #300] ++ ldrh r2, [r8, r0, lsl #1] ++ cmp r6, #0 ++ beq .L583 ++ muls r6, r2, r6 ++.L574: ++ ldr lr, [r7, #292] ++ ldrh r5, [r5, #2332] ++ sub r2, r3, lr ++ asr r9, r2, #1 ++ ldr r2, .L585+8 ++ str r5, [sp] ++ mul r2, r2, r9 ++ ldr r9, [r7, #236] ++ add r5, r9, r10 ++ uxth r2, r2 ++ str r5, [sp, #4] ++ movs r5, #0 ++.L581: ++ adds r5, r5, #1 ++ ldr r7, [sp] ++ uxth r5, r5 ++ cmp r5, r7 ++ bhi .L572 ++ cmp r0, r2 ++ beq .L572 ++ ldrh r7, [r3, #4] ++ lsl r10, r2, #1 ++ ldrh fp, [r8, r2, lsl #1] ++ cbz r7, .L584 ++ mul r7, r7, fp ++.L576: ++ cmp r6, r7 ++ bne .L577 ++ ldr r7, [sp, #4] ++ ldrh r10, [r9, r10] ++ ldrh r7, [r7] ++ cmp r10, r7 ++ bcc .L579 ++.L578: ++ strh r2, [ip, r4] @ movhi ++ ldr r4, .L585+4 ++ ldrh r2, [r3, #2] ++ strh r2, [r1, #2] @ movhi ++ ldr r2, [r4, #296] ++ cmp r3, r2 ++ ittte ne ++ ldrhne r5, [r3, #2] ++ movne r2, #6 ++ ldrne r1, [r4, #292] ++ strheq r0, [r3, #2] @ movhi ++ iteee eq ++ streq r1, [r4, #296] ++ mulne r2, r2, r5 ++ strhne r0, [r1, r2] @ movhi ++ strhne r0, [r3, #2] @ movhi ++ b .L572 ++.L583: ++ mov r6, #-1 ++ b .L574 ++.L584: ++ mov r7, #-1 ++ b .L576 ++.L577: ++ bcc .L578 ++.L579: ++ ldrh r7, [r3] ++ movw r10, #65535 ++ cmp r7, r10 ++ bne .L580 ++ strh r2, [r1, #2] @ movhi ++ strh r0, [r3] @ movhi ++ ldr r3, .L585+4 ++ str r1, [r3, #304] ++ b .L572 ++.L580: ++ movs r3, #6 ++ mov r2, r7 ++ mla r3, r3, r7, lr ++ b .L581 ++.L586: ++ .align 2 ++.L585: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size insert_data_list, .-insert_data_list ++ .align 1 ++ .global INSERT_DATA_LIST ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type INSERT_DATA_LIST, %function ++INSERT_DATA_LIST: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, lr} ++ .save {r3, lr} ++ bl insert_data_list ++ ldr r2, .L588 ++ ldrh r3, [r2, #308] ++ adds r3, r3, #1 ++ strh r3, [r2, #308] @ movhi ++ pop {r3, pc} ++.L589: ++ .align 2 ++.L588: ++ .word .LANCHOR2 ++ .fnend ++ .size INSERT_DATA_LIST, .-INSERT_DATA_LIST ++ .align 1 ++ .global insert_free_list ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type insert_free_list, %function ++insert_free_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ movw r4, #65535 ++ cmp r0, r4 ++ beq .L591 ++ ldr r2, .L597 ++ movs r1, #6 ++ mul r7, r1, r0 ++ ldr ip, [r2, #292] ++ mov r5, r2 ++ add r6, ip, r7 ++ strh r4, [r6, #2] @ movhi ++ strh r4, [ip, r7] @ movhi ++ ldr r3, [r2, #312] ++ cbnz r3, .L592 ++ str r6, [r2, #312] ++.L591: ++ movs r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L592: ++ ldr lr, [r2, #292] ++ ldr r8, [r2, #236] ++ sub r2, r3, lr ++ asr r10, r2, #1 ++ ldr r2, .L597+4 ++ ldrh r9, [r8, r0, lsl #1] ++ mul r2, r2, r10 ++ mov r10, r4 ++ uxth r2, r2 ++.L595: ++ ldrh r4, [r8, r2, lsl #1] ++ cmp r4, r9 ++ bcs .L593 ++ ldrh r4, [r3] ++ cmp r4, r10 ++ bne .L594 ++ strh r2, [r6, #2] @ movhi ++ strh r0, [r3] @ movhi ++ b .L591 ++.L594: ++ mla r3, r1, r4, lr ++ mov r2, r4 ++ b .L595 ++.L593: ++ ldrh r1, [r3, #2] ++ strh r1, [r6, #2] @ movhi ++ strh r2, [ip, r7] @ movhi ++ ldr r2, [r5, #312] ++ cmp r3, r2 ++ ittte ne ++ ldrhne r4, [r3, #2] ++ movne r2, #6 ++ ldrne r1, [r5, #292] ++ strheq r0, [r3, #2] @ movhi ++ iteee eq ++ streq r6, [r5, #312] ++ mulne r2, r2, r4 ++ strhne r0, [r1, r2] @ movhi ++ strhne r0, [r3, #2] @ movhi ++ b .L591 ++.L598: ++ .align 2 ++.L597: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size insert_free_list, .-insert_free_list ++ .align 1 ++ .global INSERT_FREE_LIST ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type INSERT_FREE_LIST, %function ++INSERT_FREE_LIST: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, lr} ++ .save {r3, lr} ++ bl insert_free_list ++ ldr r2, .L600 ++ ldrh r3, [r2, #316] ++ adds r3, r3, #1 ++ strh r3, [r2, #316] @ movhi ++ pop {r3, pc} ++.L601: ++ .align 2 ++.L600: ++ .word .LANCHOR2 ++ .fnend ++ .size INSERT_FREE_LIST, .-INSERT_FREE_LIST ++ .align 1 ++ .global List_remove_node ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type List_remove_node, %function ++List_remove_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ movs r4, #6 ++ ldr r7, .L607 ++ muls r1, r4, r1 ++ movw r6, #65535 ++ ldr r3, [r0] ++ ldr r2, [r7, #292] ++ adds r5, r2, r1 ++ cmp r5, r3 ++ ldrh r3, [r2, r1] ++ bne .L603 ++ cmp r3, r6 ++ iteet ne ++ mlane r3, r4, r3, r2 ++ moveq r3, #0 ++ streq r3, [r0] ++ strne r3, [r0] ++ it ne ++ strhne r6, [r3, #2] @ movhi ++.L605: ++ movw r3, #65535 ++ movs r0, #0 ++ strh r3, [r2, r1] @ movhi ++ strh r3, [r5, #2] @ movhi ++ pop {r4, r5, r6, r7, pc} ++.L603: ++ cmp r3, r6 ++ ldrh r0, [r5, #2] ++ bne .L606 ++ cmp r0, r3 ++ beq .L605 ++ muls r4, r0, r4 ++ strh r3, [r2, r4] @ movhi ++ b .L605 ++.L606: ++ mla r3, r4, r3, r2 ++ strh r0, [r3, #2] @ movhi ++ ldrh r3, [r5, #2] ++ ldrh r6, [r2, r1] ++ ldr r0, [r7, #292] ++ muls r3, r4, r3 ++ strh r6, [r0, r3] @ movhi ++ b .L605 ++.L608: ++ .align 2 ++.L607: ++ .word .LANCHOR2 ++ .fnend ++ .size List_remove_node, .-List_remove_node ++ .align 1 ++ .global List_pop_index_node ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type List_pop_index_node, %function ++List_pop_index_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r3, [r0] ++ cbz r3, .L615 ++ ldr r2, .L616 ++ movw r5, #65535 ++ movs r6, #6 ++ ldr r2, [r2, #292] ++.L611: ++ cbnz r1, .L612 ++.L614: ++ ldr r4, .L616+4 ++ subs r3, r3, r2 ++ asrs r3, r3, #1 ++ muls r4, r3, r4 ++ uxth r1, r4 ++ bl List_remove_node ++ uxth r0, r4 ++ pop {r4, r5, r6, pc} ++.L612: ++ ldrh r4, [r3] ++ cmp r4, r5 ++ beq .L614 ++ subs r1, r1, #1 ++ mla r3, r6, r4, r2 ++ uxth r1, r1 ++ b .L611 ++.L615: ++ movw r0, #65535 ++ pop {r4, r5, r6, pc} ++.L617: ++ .align 2 ++.L616: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size List_pop_index_node, .-List_pop_index_node ++ .align 1 ++ .global List_get_gc_head_node ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type List_get_gc_head_node, %function ++List_get_gc_head_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L624 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r3, [r2, #296] ++ cbz r3, .L623 ++ ldr r1, [r2, #292] ++ movs r4, #6 ++ movw r2, #65535 ++.L620: ++ cbz r0, .L621 ++ ldrh r3, [r3] ++ cmp r3, r2 ++ bne .L622 ++.L623: ++ movw r0, #65535 ++ pop {r4, pc} ++.L622: ++ subs r0, r0, #1 ++ mla r3, r4, r3, r1 ++ uxth r0, r0 ++ b .L620 ++.L621: ++ ldr r0, .L624+4 ++ subs r3, r3, r1 ++ asrs r3, r3, #1 ++ muls r3, r0, r3 ++ uxth r0, r3 ++ pop {r4, pc} ++.L625: ++ .align 2 ++.L624: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size List_get_gc_head_node, .-List_get_gc_head_node ++ .align 1 ++ .global List_update_data_list ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type List_update_data_list, %function ++List_update_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r5, r0 ++ ldr r4, .L633 ++ ldrh r3, [r4, #320] ++ cmp r3, r0 ++ beq .L627 ++ ldrh r3, [r4, #368] ++ cmp r3, r0 ++ beq .L627 ++ ldrh r3, [r4, #416] ++ cmp r3, r0 ++ beq .L627 ++ movs r3, #6 ++ ldr r1, [r4, #292] ++ muls r3, r0, r3 ++ ldr r2, [r4, #296] ++ adds r0, r1, r3 ++ cmp r0, r2 ++ beq .L627 ++ ldrh r2, [r0, #4] ++ ldr r7, [r4, #300] ++ ldrh r6, [r7, r5, lsl #1] ++ cbz r2, .L631 ++ muls r2, r6, r2 ++.L628: ++ ldrh r6, [r0, #2] ++ movw r0, #65535 ++ cmp r6, r0 ++ bne .L629 ++ ldrh r3, [r1, r3] ++ cmp r3, r6 ++ beq .L627 ++.L629: ++ movs r0, #6 ++ ldr r3, .L633+4 ++ muls r0, r6, r0 ++ asrs r6, r0, #1 ++ add r1, r1, r0 ++ muls r3, r6, r3 ++ ldrh r6, [r7, r3, lsl #1] ++ ldrh r3, [r1, #4] ++ cbz r3, .L632 ++ muls r3, r6, r3 ++.L630: ++ cmp r2, r3 ++ bcs .L627 ++ mov r1, r5 ++ ldr r0, .L633+8 ++ bl List_remove_node ++ ldrh r3, [r4, #308] ++ mov r0, r5 ++ subs r3, r3, #1 ++ strh r3, [r4, #308] @ movhi ++ bl INSERT_DATA_LIST ++.L627: ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, pc} ++.L631: ++ mov r2, #-1 ++ b .L628 ++.L632: ++ mov r3, #-1 ++ b .L630 ++.L634: ++ .align 2 ++.L633: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .word .LANCHOR2+296 ++ .fnend ++ .size List_update_data_list, .-List_update_data_list ++ .align 1 ++ .global ftl_map_blk_alloc_new_blk ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_map_blk_alloc_new_blk, %function ++ftl_map_blk_alloc_new_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r4, r0 ++ ldrh r1, [r0, #10] ++ movs r3, #0 ++ ldr r2, [r0, #12] ++.L636: ++ uxth r5, r3 ++ cmp r5, r1 ++ bcs .L639 ++ mov r7, r2 ++ adds r3, r3, #1 ++ ldrh r6, [r7] ++ adds r2, r2, #2 ++ cmp r6, #0 ++ bne .L636 ++ bl FtlFreeSysBlkQueueOut ++ subs r3, r0, #1 ++ movw r2, #65533 ++ uxth r3, r3 ++ mov r1, r0 ++ strh r0, [r7] @ movhi ++ cmp r3, r2 ++ bls .L637 ++ ldr r3, .L642 ++ ldr r0, .L642+4 ++ ldrh r2, [r3, #2522] ++ bl printk ++.L638: ++ b .L638 ++.L637: ++ ldr r3, [r4, #28] ++ strh r6, [r4, #2] @ movhi ++ strh r5, [r4] @ movhi ++ adds r3, r3, #1 ++ str r3, [r4, #28] ++ ldrh r3, [r4, #8] ++ adds r3, r3, #1 ++ strh r3, [r4, #8] @ movhi ++.L639: ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, pc} ++.L643: ++ .align 2 ++.L642: ++ .word .LANCHOR0 ++ .word .LC5 ++ .fnend ++ .size ftl_map_blk_alloc_new_blk, .-ftl_map_blk_alloc_new_blk ++ .align 1 ++ .global select_l2p_ram_region ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type select_l2p_ram_region, %function ++select_l2p_ram_region: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ movs r1, #0 ++ ldr r3, .L654 ++ movs r4, #12 ++ movw r5, #65535 ++ ldr r7, .L654+4 ++ ldrh r2, [r3, #2430] ++ ldr r3, [r7, #464] ++.L645: ++ uxth r0, r1 ++ cmp r0, r2 ++ bcc .L647 ++ mov r0, r2 ++ movs r1, #0 ++ mov r6, #-2147483648 ++ mov ip, #12 ++.L648: ++ uxth r5, r1 ++ cmp r5, r2 ++ bcc .L650 ++ cmp r0, r2 ++ bcc .L646 ++ ldrh r7, [r7, #468] ++ mov r0, r2 ++ movs r1, #0 ++ mov r4, #-1 ++.L651: ++ uxth r5, r1 ++ cmp r5, r2 ++ bcs .L646 ++ ldr r6, [r3, #4] ++ cmp r4, r6 ++ bls .L652 ++ ldrh ip, [r3] ++ cmp ip, r7 ++ itt ne ++ movne r4, r6 ++ movne r0, r5 ++.L652: ++ adds r1, r1, #1 ++ adds r3, r3, #12 ++ b .L651 ++.L647: ++ adds r1, r1, #1 ++ mla r6, r4, r1, r3 ++ ldrh r6, [r6, #-12] ++ cmp r6, r5 ++ bne .L645 ++.L646: ++ pop {r4, r5, r6, r7, pc} ++.L650: ++ mla r4, ip, r1, r3 ++ ldr r4, [r4, #4] ++ cmp r4, #0 ++ blt .L649 ++ cmp r6, r4 ++ itt hi ++ movhi r6, r4 ++ movhi r0, r5 ++.L649: ++ adds r1, r1, #1 ++ b .L648 ++.L655: ++ .align 2 ++.L654: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size select_l2p_ram_region, .-select_l2p_ram_region ++ .align 1 ++ .global FtlUpdateVaildLpn ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlUpdateVaildLpn, %function ++FtlUpdateVaildLpn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r1, .L662 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ mov r3, r1 ++ ldrh r2, [r1, #470] ++ cmp r2, #4 ++ bhi .L657 ++ cbnz r0, .L657 ++ adds r2, r2, #1 ++ strh r2, [r1, #470] @ movhi ++ pop {r4, r5, pc} ++.L657: ++ ldr r1, .L662+4 ++ movs r2, #0 ++ strh r2, [r3, #470] @ movhi ++ movw r5, #65535 ++ str r2, [r3, #472] ++ ldrh r1, [r1, #2332] ++ ldr r2, [r3, #300] ++ add r1, r2, r1, lsl #1 ++.L658: ++ cmp r2, r1 ++ bne .L660 ++ pop {r4, r5, pc} ++.L660: ++ ldrh r4, [r2], #2 ++ cmp r4, r5 ++ ittt ne ++ ldrne r0, [r3, #472] ++ addne r0, r0, r4 ++ strne r0, [r3, #472] ++ b .L658 ++.L663: ++ .align 2 ++.L662: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlUpdateVaildLpn, .-FtlUpdateVaildLpn ++ .align 1 ++ .global ftl_set_blk_mode ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_set_blk_mode, %function ++ftl_set_blk_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r0 ++ cbz r1, .L665 ++ b ftl_set_blk_mode.part.9 ++.L665: ++ ldr r2, .L666 ++ lsrs r0, r0, #5 ++ and r3, r3, #31 ++ ldr r1, [r2, #32] ++ movs r2, #1 ++ lsl r3, r2, r3 ++ ldr r2, [r1, r0, lsl #2] ++ bic r2, r2, r3 ++ str r2, [r1, r0, lsl #2] ++ bx lr ++.L667: ++ .align 2 ++.L666: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_set_blk_mode, .-ftl_set_blk_mode ++ .align 1 ++ .global ftl_get_blk_mode ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_get_blk_mode, %function ++ftl_get_blk_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L669 ++ lsrs r2, r0, #5 ++ and r0, r0, #31 ++ ldr r3, [r3, #32] ++ ldr r3, [r3, r2, lsl #2] ++ lsr r0, r3, r0 ++ and r0, r0, #1 ++ bx lr ++.L670: ++ .align 2 ++.L669: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_get_blk_mode, .-ftl_get_blk_mode ++ .align 1 ++ .global ftl_sb_update_avl_pages ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_sb_update_avl_pages, %function ++ftl_sb_update_avl_pages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movs r3, #0 ++ push {r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ strh r3, [r0, #4] @ movhi ++ add r4, r0, r2, lsl #1 ++ movw r7, #65535 ++ ldr r3, .L678 ++ adds r4, r4, #14 ++ ldrh r5, [r3, #2324] ++.L672: ++ cmp r2, r5 ++ bcc .L674 ++ ldrh r3, [r3, #2390] ++ add r4, r0, #16 ++ movw r6, #65535 ++ subs r3, r3, #1 ++ subs r1, r3, r1 ++ movs r3, #0 ++ uxth r1, r1 ++.L675: ++ uxth r2, r3 ++ cmp r5, r2 ++ bhi .L677 ++ pop {r4, r5, r6, r7, pc} ++.L674: ++ ldrh r6, [r4, #2]! ++ adds r2, r2, #1 ++ uxth r2, r2 ++ cmp r6, r7 ++ ittt ne ++ ldrhne r6, [r0, #4] ++ addne r6, r6, #1 ++ strhne r6, [r0, #4] @ movhi ++ b .L672 ++.L677: ++ ldrh r2, [r4], #2 ++ adds r3, r3, #1 ++ cmp r2, r6 ++ ittt ne ++ ldrhne r2, [r0, #4] ++ addne r2, r2, r1 ++ strhne r2, [r0, #4] @ movhi ++ b .L675 ++.L679: ++ .align 2 ++.L678: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages ++ .align 1 ++ .global make_superblock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type make_superblock, %function ++make_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, r0 ++ ldr r6, .L692 ++ add r7, r0, #16 ++ movw r9, #65535 ++ movs r5, #0 ++ strh r5, [r0, #4] @ movhi ++ ldrh r8, [r6, #2324] ++ addw r10, r6, #2350 ++ strb r5, [r0, #7] ++.L681: ++ uxth r3, r5 ++ cmp r8, r3 ++ bhi .L683 ++ ldrb r3, [r4, #7] @ zero_extendqisi2 ++ ldrh r2, [r6, #2390] ++ smulbb r3, r3, r2 ++ strh r3, [r4, #4] @ movhi ++ movs r3, #0 ++ strb r3, [r4, #9] ++ ldr r3, [r6, #2248] ++ cbz r3, .L684 ++ ldr r3, .L692+4 ++ ldrh r2, [r4] ++ ldr r3, [r3, #236] ++ ldrh r3, [r3, r2, lsl #1] ++ cmp r3, #79 ++ itt ls ++ movls r3, #1 ++ strbls r3, [r4, #9] ++.L684: ++ ldrb r3, [r6, #36] @ zero_extendqisi2 ++ cbz r3, .L685 ++ movs r3, #1 ++ strb r3, [r4, #9] ++.L685: ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L683: ++ ldrh r1, [r4] ++ ldrb r0, [r10, r5] @ zero_extendqisi2 ++ bl V2P_block ++ strh r9, [r7] @ movhi ++ mov fp, r0 ++ bl FtlBbmIsBadBlock ++ cbnz r0, .L682 ++ strh fp, [r7] @ movhi ++ ldrb r3, [r4, #7] @ zero_extendqisi2 ++ adds r3, r3, #1 ++ strb r3, [r4, #7] ++.L682: ++ adds r5, r5, #1 ++ adds r7, r7, #2 ++ b .L681 ++.L693: ++ .align 2 ++.L692: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size make_superblock, .-make_superblock ++ .align 1 ++ .global update_multiplier_value ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type update_multiplier_value, %function ++update_multiplier_value: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, lr} ++ movs r5, #0 ++ ldr r6, .L700 ++ mov r7, r0 ++ mov r4, r5 ++ ldrh r8, [r6, #2324] ++ addw r6, r6, #2350 ++ ldrh r9, [r6, #40] ++.L695: ++ uxth r3, r5 ++ cmp r8, r3 ++ bhi .L697 ++ cbz r4, .L699 ++ mov r1, r4 ++ mov r0, #32768 ++ bl __aeabi_idiv ++.L698: ++ ldr r3, .L700+4 ++ movs r2, #6 ++ ldr r3, [r3, #292] ++ mla r7, r2, r7, r3 ++ strh r0, [r7, #4] @ movhi ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, pc} ++.L697: ++ mov r1, r7 ++ ldrb r0, [r6, r5] @ zero_extendqisi2 ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ cbnz r0, .L696 ++ add r4, r4, r9 ++ uxth r4, r4 ++.L696: ++ adds r5, r5, #1 ++ b .L695 ++.L699: ++ mov r0, r4 ++ b .L698 ++.L701: ++ .align 2 ++.L700: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size update_multiplier_value, .-update_multiplier_value ++ .align 1 ++ .global GetFreeBlockMinEraseCount ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type GetFreeBlockMinEraseCount, %function ++GetFreeBlockMinEraseCount: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L705 ++ ldr r0, [r2, #312] ++ cbz r0, .L703 ++ ldr r3, [r2, #292] ++ subs r0, r0, r3 ++ ldr r3, .L705+4 ++ asrs r0, r0, #1 ++ muls r0, r3, r0 ++ ldr r3, [r2, #236] ++ uxth r0, r0 ++ ldrh r0, [r3, r0, lsl #1] ++.L703: ++ bx lr ++.L706: ++ .align 2 ++.L705: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount ++ .align 1 ++ .global GetFreeBlockMaxEraseCount ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type GetFreeBlockMaxEraseCount, %function ++GetFreeBlockMaxEraseCount: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r1, .L715 ++ push {r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ ldr r3, [r1, #312] ++ cbz r3, .L713 ++ ldrh r2, [r1, #316] ++ movs r6, #6 ++ ldr r4, [r1, #292] ++ movw r7, #65535 ++ rsb r2, r2, r2, lsl #3 ++ subs r3, r3, r4 ++ asrs r3, r3, #1 ++ asrs r2, r2, #3 ++ cmp r0, r2 ++ it gt ++ uxthgt r0, r2 ++ ldr r2, .L715+4 ++ muls r3, r2, r3 ++ movs r2, #0 ++ uxth r3, r3 ++.L710: ++ uxth r5, r2 ++ cmp r0, r5 ++ bls .L712 ++ mul r5, r6, r3 ++ adds r2, r2, #1 ++ ldrh r5, [r4, r5] ++ cmp r5, r7 ++ bne .L714 ++.L712: ++ ldr r2, [r1, #236] ++ ldrh r0, [r2, r3, lsl #1] ++ pop {r4, r5, r6, r7, pc} ++.L714: ++ mov r3, r5 ++ b .L710 ++.L713: ++ mov r0, r3 ++ pop {r4, r5, r6, r7, pc} ++.L716: ++ .align 2 ++.L715: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount ++ .align 1 ++ .global FtlPrintInfo2buf ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlPrintInfo2buf, %function ++FtlPrintInfo2buf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r0 ++ ldr r4, .L729 ++ add r5, r7, #12 ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r1, .L729+4 ++ bl strcpy ++ ldr r2, [r4, #124] ++ mov r0, r5 ++ ldr r1, .L729+8 ++ bl sprintf ++ add r5, r5, r0 ++ ldr r2, [r4, #2408] ++ mov r0, r5 ++ ldr r1, .L729+12 ++ bl sprintf ++ ldr r3, .L729+16 ++ add r5, r5, r0 ++ ldr r3, [r3, #500] ++ cmp r3, #1 ++ beq .L718 ++ subs r0, r5, r7 ++.L717: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L730: ++ .align 2 ++.L729: ++ .word .LANCHOR0 ++ .word .LC6 ++ .word .LC7 ++ .word .LC8 ++ .word .LANCHOR1 ++.L718: ++ add r3, sp, #28 ++ add r2, sp, #24 ++ add r1, sp, #20 ++ add r0, sp, #16 ++ bl NandcGetTimeCfg ++ ldr r3, [sp, #28] ++ mov r0, r5 ++ ldr r2, [sp, #16] ++ ldr r1, .L731 ++ str r3, [sp, #4] ++ ldr r3, [sp, #24] ++ str r3, [sp] ++ ldr r3, [sp, #20] ++ bl sprintf ++ adds r6, r5, r0 ++ ldr r1, .L731+4 ++ ldr r5, .L731+8 ++ mov r0, r6 ++ adds r6, r6, #10 ++ bl strcpy ++ ldr r2, [r4, #2452] ++ mov r0, r6 ++ ldr r1, .L731+12 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #472] ++ ldr r1, .L731+16 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #476] ++ ldr r1, .L731+20 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #480] ++ ldr r1, .L731+24 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #484] ++ ldr r1, .L731+28 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #488] ++ ldr r1, .L731+32 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #492] ++ ldr r1, .L731+36 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #496] ++ ldr r1, .L731+40 ++ mov r0, r6 ++ bl sprintf ++ ldr r2, [r5, #500] ++ add r6, r6, r0 ++ ldr r1, .L731+44 ++ mov r0, r6 ++ lsrs r2, r2, #11 ++ bl sprintf ++ ldr r2, [r5, #504] ++ add r6, r6, r0 ++ ldr r1, .L731+48 ++ mov r0, r6 ++ lsrs r2, r2, #11 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #508] ++ ldr r1, .L731+52 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #512] ++ ldr r1, .L731+56 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ bl FtlBbtCalcTotleCnt ++ ldrh r2, [r4, #2462] ++ mov r3, r0 ++ ldr r1, .L731+60 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #316] ++ ldr r1, .L731+64 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #516] ++ ldr r1, .L731+68 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #520] ++ ldr r1, .L731+72 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #524] ++ ldr r1, .L731+76 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #240] ++ ldr r1, .L731+80 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #528] ++ ldr r1, .L731+84 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r5, #532] ++ ldr r1, .L731+88 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #274] ++ ldr r1, .L731+92 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #272] ++ ldr r1, .L731+96 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r4, #2432] ++ ldr r1, .L731+100 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r4, #2424] ++ ldr r1, .L731+104 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r4, #2320] ++ ldr r1, .L731+108 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #2522] ++ ldr r1, .L731+112 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #2332] ++ ldr r1, .L731+116 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #536] ++ ldr r1, .L731+120 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r4, #2336] ++ ldr r1, .L731+124 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #540] ++ ldr r1, .L731+128 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #2456] ++ ldr r1, .L731+132 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #322] ++ ldr r1, .L731+136 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r5, #326] @ zero_extendqisi2 ++ ldr r1, .L731+140 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #320] ++ ldr r1, .L731+144 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r5, #328] @ zero_extendqisi2 ++ ldr r1, .L731+148 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #324] ++ ldr r1, .L731+152 ++ mov r0, r6 ++ bl sprintf ++ ldr r3, [r5, #300] ++ add r6, r6, r0 ++ ldrh r2, [r5, #320] ++ mov r0, r6 ++ ldr r1, .L731+156 ++ ldrh r2, [r3, r2, lsl #1] ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #370] ++ ldr r1, .L731+160 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r5, #374] @ zero_extendqisi2 ++ ldr r1, .L731+164 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #368] ++ ldr r1, .L731+168 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r5, #376] @ zero_extendqisi2 ++ ldr r1, .L731+172 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #372] ++ ldr r1, .L731+176 ++ mov r0, r6 ++ bl sprintf ++ ldr r3, [r5, #300] ++ add r6, r6, r0 ++ ldrh r2, [r5, #368] ++ mov r0, r6 ++ ldr r1, .L731+180 ++ ldrh r2, [r3, r2, lsl #1] ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #418] ++ ldr r1, .L731+184 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r5, #422] @ zero_extendqisi2 ++ ldr r1, .L731+188 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #416] ++ ldr r1, .L731+192 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r5, #424] @ zero_extendqisi2 ++ ldr r1, .L731+196 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #420] ++ ldr r1, .L731+200 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #558] ++ ldr r1, .L731+204 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r5, #562] @ zero_extendqisi2 ++ ldr r1, .L731+208 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #556] ++ ldr r1, .L731+212 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r5, #564] @ zero_extendqisi2 ++ ldr r1, .L731+216 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #560] ++ ldr r1, .L731+220 ++ mov r0, r6 ++ bl sprintf ++ ldr r3, [r5, #680] ++ add r6, r6, r0 ++ ldr r1, [r5, #1116] ++ mov r0, r6 ++ ldr r2, [r4, #2248] ++ str r3, [sp, #4] ++ ldr r3, [r5, #688] ++ orr r2, r2, r1, lsl #8 ++ ldr r1, .L731+224 ++ str r3, [sp] ++ ldr r3, [r5, #684] ++ bl sprintf ++ adds r4, r6, r0 ++ ldr r2, [r5, #676] ++ ldr r1, .L731+228 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldr r2, [r5, #700] ++ ldr r1, .L731+232 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r2, [r5, #1120] ++ ldr r1, .L731+236 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r2, [r5, #1122] ++ b .L732 ++.L733: ++ .align 2 ++.L731: ++ .word .LC9 ++ .word .LC10 ++ .word .LANCHOR2 ++ .word .LC11 ++ .word .LC12 ++ .word .LC13 ++ .word .LC14 ++ .word .LC15 ++ .word .LC16 ++ .word .LC17 ++ .word .LC18 ++ .word .LC19 ++ .word .LC20 ++ .word .LC21 ++ .word .LC22 ++ .word .LC23 ++ .word .LC24 ++ .word .LC25 ++ .word .LC26 ++ .word .LC27 ++ .word .LC28 ++ .word .LC29 ++ .word .LC30 ++ .word .LC31 ++ .word .LC32 ++ .word .LC33 ++ .word .LC34 ++ .word .LC35 ++ .word .LC36 ++ .word .LC37 ++ .word .LC38 ++ .word .LC39 ++ .word .LC40 ++ .word .LC41 ++ .word .LC42 ++ .word .LC43 ++ .word .LC44 ++ .word .LC45 ++ .word .LC46 ++ .word .LC47 ++ .word .LC48 ++ .word .LC49 ++ .word .LC50 ++ .word .LC51 ++ .word .LC52 ++ .word .LC53 ++ .word .LC54 ++ .word .LC55 ++ .word .LC56 ++ .word .LC57 ++ .word .LC58 ++ .word .LC59 ++ .word .LC60 ++ .word .LC61 ++ .word .LC62 ++ .word .LC63 ++ .word .LC64 ++ .word .LC65 ++ .word .LC66 ++ .word .LC67 ++.L732: ++ ldr r1, .L734 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldr r2, [r5, #1124] ++ ldr r1, .L734+4 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r2, [r5, #1128] ++ ldr r1, .L734+8 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ bl GetFreeBlockMinEraseCount ++ ldr r1, .L734+12 ++ mov r2, r0 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r0, [r5, #316] ++ bl GetFreeBlockMaxEraseCount ++ ldr r1, .L734+16 ++ mov r2, r0 ++ mov r0, r4 ++ bl sprintf ++ ldrh r3, [r5, #556] ++ movw r2, #65535 ++ add r4, r4, r0 ++ cmp r3, r2 ++ beq .L720 ++ ldr r2, [r5, #300] ++ mov r0, r4 ++ ldr r1, .L734+20 ++ ldrh r2, [r2, r3, lsl #1] ++ bl sprintf ++ add r4, r4, r0 ++.L720: ++ movs r0, #0 ++ ldr r9, .L734+28 ++ bl List_get_gc_head_node ++ uxth r3, r0 ++ movs r6, #0 ++ movw fp, #65535 ++ mov r10, #6 ++.L722: ++ cmp r3, fp ++ beq .L721 ++ ldr r2, [r5, #236] ++ mul r8, r10, r3 ++ mov r0, r4 ++ mov r1, r9 ++ ldrh r2, [r2, r3, lsl #1] ++ str r2, [sp, #8] ++ ldr r2, [r5, #292] ++ add r2, r2, r8 ++ ldrh r2, [r2, #4] ++ str r2, [sp, #4] ++ ldr r2, [r5, #300] ++ ldrh r2, [r2, r3, lsl #1] ++ str r2, [sp] ++ mov r2, r6 ++ bl sprintf ++ adds r6, r6, #1 ++ ldr r3, [r5, #292] ++ cmp r6, #16 ++ add r4, r4, r0 ++ ldrh r3, [r3, r8] ++ bne .L722 ++.L721: ++ ldr r2, [r5, #292] ++ movs r6, #0 ++ ldr r3, [r5, #312] ++ movw r9, #65535 ++ ldr fp, .L734+32 ++ mov r10, #6 ++ subs r3, r3, r2 ++ asrs r2, r3, #1 ++ ldr r3, .L734+24 ++ muls r3, r2, r3 ++ uxth r3, r3 ++.L724: ++ cmp r3, r9 ++ beq .L723 ++ ldr r2, [r5, #236] ++ mul r8, r10, r3 ++ mov r0, r4 ++ mov r1, fp ++ ldrh r2, [r2, r3, lsl #1] ++ str r2, [sp, #4] ++ ldr r2, [r5, #292] ++ add r2, r2, r8 ++ ldrh r2, [r2, #4] ++ str r2, [sp] ++ mov r2, r6 ++ adds r6, r6, #1 ++ bl sprintf ++ cmp r6, #4 ++ add r4, r4, r0 ++ beq .L723 ++ ldr r3, [r5, #292] ++ ldrh r3, [r3, r8] ++ b .L724 ++.L723: ++ subs r0, r4, r7 ++ b .L717 ++.L735: ++ .align 2 ++.L734: ++ .word .LC68 ++ .word .LC69 ++ .word .LC70 ++ .word .LC71 ++ .word .LC72 ++ .word .LC73 ++ .word -1431655765 ++ .word .LC74 ++ .word .LC75 ++ .fnend ++ .size FtlPrintInfo2buf, .-FtlPrintInfo2buf ++ .align 1 ++ .global ftl_proc_ftl_read ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_proc_ftl_read, %function ++ftl_proc_ftl_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ mov r5, r0 ++ ldr r2, .L737 ++ ldr r1, .L737+4 ++ bl sprintf ++ adds r4, r5, r0 ++ mov r0, r4 ++ bl FtlPrintInfo2buf ++ add r0, r0, r4 ++ subs r0, r0, r5 ++ pop {r3, r4, r5, pc} ++.L738: ++ .align 2 ++.L737: ++ .word .LC76 ++ .word .LC77 ++ .fnend ++ .size ftl_proc_ftl_read, .-ftl_proc_ftl_read ++ .align 1 ++ .global GetSwlReplaceBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type GetSwlReplaceBlock, %function ++GetSwlReplaceBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, .L765 ++ ldr r2, [r4, #524] ++ ldr r3, [r4, #532] ++ cmp r2, r3 ++ bcs .L740 ++ ldr r5, .L765+4 ++ movs r3, #0 ++ ldr r0, [r4, #236] ++ str r3, [r4, #516] ++ ldrh r1, [r5, #2332] ++.L741: ++ cmp r3, r1 ++ bcc .L742 ++ ldr r6, [r4, #516] ++ mov r0, r6 ++ bl __aeabi_uidiv ++ str r0, [r4, #524] ++ ldr r0, [r4, #520] ++ ldrh r1, [r5, #2382] ++ subs r0, r6, r0 ++ bl __aeabi_uidiv ++ str r0, [r4, #516] ++.L743: ++ ldr r6, [r4, #532] ++ ldr r7, [r4, #524] ++ add r3, r6, #256 ++ cmp r3, r7 ++ bls .L748 ++ ldr r2, [r4, #528] ++ add r3, r6, #768 ++ cmp r3, r2 ++ bls .L748 ++ ldr r3, .L765+4 ++ ldr r3, [r3, #2248] ++ cbnz r3, .L749 ++.L751: ++ movw r5, #65535 ++.L750: ++ mov r0, r5 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L742: ++ ldrh r2, [r0, r3, lsl #1] ++ adds r3, r3, #1 ++ ldr r6, [r4, #516] ++ add r2, r2, r6 ++ str r2, [r4, #516] ++ b .L741 ++.L740: ++ ldr r3, [r4, #528] ++ cmp r2, r3 ++ bls .L743 ++ ldr r0, .L765+4 ++ adds r3, r3, #1 ++ str r3, [r4, #528] ++ movs r3, #0 ++.L745: ++ ldrh r2, [r0, #2332] ++ cmp r3, r2 ++ bcs .L743 ++ ldr r1, [r4, #236] ++ ldrh r2, [r1, r3, lsl #1] ++ adds r2, r2, #1 ++ strh r2, [r1, r3, lsl #1] @ movhi ++ adds r3, r3, #1 ++ b .L745 ++.L749: ++ cmp r6, #40 ++ bhi .L751 ++.L748: ++ ldrh r0, [r4, #316] ++ add r0, r0, r0, lsl #1 ++ ubfx r0, r0, #2, #16 ++ bl GetFreeBlockMaxEraseCount ++ add r3, r6, #64 ++ mov r9, r0 ++ cmp r0, r3 ++ bcs .L752 ++ cmp r6, #40 ++ bhi .L751 ++.L752: ++ ldr r3, [r4, #296] ++ cmp r3, #0 ++ beq .L751 ++ ldr r2, .L765+4 ++ movw r1, #65535 ++ ldr lr, [r4, #292] ++ movs r0, #0 ++ ldr r8, [r4, #236] ++ mov r10, r1 ++ ldrh r2, [r2, #2332] ++ mov fp, #6 ++ str r2, [sp, #20] ++ mov r2, r1 ++.L753: ++ ldrh ip, [r3] ++ cmp ip, r10 ++ bne .L756 ++ mov r5, r2 ++.L755: ++ movw r3, #65535 ++ cmp r5, r3 ++ beq .L751 ++ ldrh r10, [r8, r5, lsl #1] ++ lsl fp, r5, #1 ++ cmp r6, r10 ++ bcs .L757 ++ bl GetFreeBlockMinEraseCount ++ cmp r6, r0 ++ it cc ++ strcc r1, [r4, #532] ++.L757: ++ cmp r7, r10 ++ bls .L751 ++ add r3, r10, #128 ++ cmp r9, r3 ++ ble .L751 ++ add r3, r10, #256 ++ cmp r7, r3 ++ bhi .L758 ++ ldr r3, [r4, #528] ++ add r10, r10, #768 ++ cmp r10, r3 ++ bcs .L751 ++.L758: ++ str r9, [sp, #8] ++ mov r2, r7 ++ ldrh r3, [r8, fp] ++ mov r1, r5 ++ ldr r0, .L765+8 ++ str r3, [sp, #4] ++ ldr r3, [r4, #300] ++ ldrh r3, [r3, fp] ++ str r3, [sp] ++ ldr r3, [r4, #528] ++ bl printk ++ movs r3, #1 ++ str r3, [r4, #1132] ++ b .L750 ++.L756: ++ adds r0, r0, #1 ++ ldr r5, [sp, #20] ++ uxth r0, r0 ++ cmp r0, r5 ++ bhi .L751 ++ ldrh r5, [r3, #4] ++ cbz r5, .L754 ++ ldr r5, .L765+12 ++ sub r3, r3, lr ++ asrs r3, r3, #1 ++ muls r3, r5, r3 ++ uxth r5, r3 ++ ldrh r3, [r8, r5, lsl #1] ++ cmp r6, r3 ++ bcs .L755 ++ cmp r1, r3 ++ itt hi ++ movhi r1, r3 ++ movhi r2, r5 ++.L754: ++ mla r3, fp, ip, lr ++ b .L753 ++.L766: ++ .align 2 ++.L765: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC78 ++ .word -1431655765 ++ .fnend ++ .size GetSwlReplaceBlock, .-GetSwlReplaceBlock ++ .align 1 ++ .global free_data_superblock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type free_data_superblock, %function ++free_data_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movw r2, #65535 ++ push {r3, lr} ++ .save {r3, lr} ++ cmp r0, r2 ++ beq .L768 ++ ldr r2, .L769 ++ movs r1, #0 ++ ldr r2, [r2, #300] ++ strh r1, [r2, r0, lsl #1] @ movhi ++ bl INSERT_FREE_LIST ++.L768: ++ movs r0, #0 ++ pop {r3, pc} ++.L770: ++ .align 2 ++.L769: ++ .word .LANCHOR2 ++ .fnend ++ .size free_data_superblock, .-free_data_superblock ++ .align 1 ++ .global FtlGcBufInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcBufInit, %function ++FtlGcBufInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L780 ++ mov ip, #1 ++ ldr r0, .L780+4 ++ movs r3, #0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r7, #12 ++ mov r5, r2 ++ mov lr, #36 ++ mov r1, r0 ++ str r3, [r2, #1136] ++.L772: ++ ldrh r4, [r0, #2324] ++ uxth r8, r3 ++ adds r6, r3, #1 ++ cmp r8, r4 ++ bcc .L775 ++ ldr r7, .L780 ++ mov lr, #12 ++ movs r6, #0 ++.L776: ++ ldr r3, [r2, #1156] ++ cmp r4, r3 ++ bcc .L779 ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L775: ++ uxth r3, r3 ++ ldr r9, [r2, #1140] ++ mul r8, r7, r3 ++ add r4, r9, r8 ++ str ip, [r4, #8] ++ ldrh r4, [r0, #2400] ++ muls r4, r3, r4 ++ it mi ++ addmi r4, r4, #3 ++ bic r10, r4, #3 ++ ldr r4, [r5, #1144] ++ add r4, r4, r10 ++ str r4, [r9, r8] ++ ldrh r4, [r1, #2402] ++ muls r4, r3, r4 ++ it mi ++ addmi r4, r4, #3 ++ ldr r10, [r2, #1140] ++ bic fp, r4, #3 ++ ldr r4, [r5, #1148] ++ add r9, r10, r8 ++ add r4, r4, fp ++ str r4, [r9, #4] ++ ldr r4, [r2, #1152] ++ mla r3, lr, r3, r4 ++ ldr r4, [r10, r8] ++ str r4, [r3, #8] ++ ldr r4, [r9, #4] ++ str r4, [r3, #12] ++ mov r3, r6 ++ b .L772 ++.L779: ++ mul ip, lr, r4 ++ ldr r0, [r2, #1140] ++ ldr r5, [r2, #1144] ++ add r3, r0, ip ++ str r6, [r3, #8] ++ ldrh r3, [r1, #2400] ++ muls r3, r4, r3 ++ it mi ++ addmi r3, r3, #3 ++ bic r3, r3, #3 ++ add r3, r3, r5 ++ str r3, [r0, ip] ++ ldr r3, [r2, #1140] ++ ldr r0, [r7, #1148] ++ add ip, ip, r3 ++ ldrh r3, [r1, #2402] ++ muls r3, r4, r3 ++ it mi ++ addmi r3, r3, #3 ++ bic r3, r3, #3 ++ adds r4, r4, #1 ++ add r3, r3, r0 ++ uxth r4, r4 ++ str r3, [ip, #4] ++ b .L776 ++.L781: ++ .align 2 ++.L780: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGcBufInit, .-FtlGcBufInit ++ .align 1 ++ .global FtlGcBufFree ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcBufFree, %function ++FtlGcBufFree: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L789 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ movs r5, #0 ++ mov r10, #36 ++ mov lr, #12 ++ mov r8, r5 ++ ldr ip, [r3, #1156] ++ ldr r6, [r3, #1140] ++.L783: ++ uxth r3, r5 ++ cmp r1, r3 ++ bls .L782 ++ mla r4, r10, r3, r0 ++ movs r2, #0 ++.L784: ++ uxth r3, r2 ++ cmp ip, r3 ++ bls .L785 ++ mul r3, lr, r3 ++ ldr r7, [r4, #8] ++ adds r2, r2, #1 ++ add r9, r6, r3 ++ ldr r3, [r6, r3] ++ cmp r3, r7 ++ bne .L784 ++ str r8, [r9, #8] ++.L785: ++ adds r5, r5, #1 ++ b .L783 ++.L782: ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L790: ++ .align 2 ++.L789: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcBufFree, .-FtlGcBufFree ++ .align 1 ++ .global FtlGcBufAlloc ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcBufAlloc, %function ++FtlGcBufAlloc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L798 ++ mov ip, #12 ++ push {r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ movs r4, #0 ++ mov lr, #1 ++ mov r8, #36 ++ ldr r5, [r3, #1156] ++ ldr r6, [r3, #1140] ++.L792: ++ uxth r2, r4 ++ cmp r1, r2 ++ bhi .L796 ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L796: ++ mov r9, #0 ++.L793: ++ uxth r3, r9 ++ cmp r5, r3 ++ bls .L794 ++ mla r3, ip, r3, r6 ++ add r9, r9, #1 ++ ldr r7, [r3, #8] ++ cmp r7, #0 ++ bne .L793 ++ mla r2, r8, r2, r0 ++ ldr r7, [r3] ++ str lr, [r3, #8] ++ str r7, [r2, #8] ++ ldr r3, [r3, #4] ++ str r3, [r2, #12] ++.L794: ++ adds r4, r4, #1 ++ b .L792 ++.L799: ++ .align 2 ++.L798: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcBufAlloc, .-FtlGcBufAlloc ++ .align 1 ++ .global IsBlkInGcList ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type IsBlkInGcList, %function ++IsBlkInGcList: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L805 ++ ldr r3, [r2, #1160] ++ ldrh r2, [r2, #1164] ++ add r2, r3, r2, lsl #1 ++.L801: ++ cmp r3, r2 ++ bne .L803 ++ movs r0, #0 ++ bx lr ++.L803: ++ ldrh r1, [r3], #2 ++ cmp r1, r0 ++ bne .L801 ++ movs r0, #1 ++ bx lr ++.L806: ++ .align 2 ++.L805: ++ .word .LANCHOR2 ++ .fnend ++ .size IsBlkInGcList, .-IsBlkInGcList ++ .align 1 ++ .global FtlGcUpdatePage ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcUpdatePage, %function ++FtlGcUpdatePage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r5, r0 ++ ubfx r0, r0, #10, #16 ++ mov r6, r1 ++ mov r7, r2 ++ movs r4, #0 ++ bl P2V_block_in_plane ++ ldr r3, .L811 ++ ldrh r1, [r3, #1164] ++ ldr r2, [r3, #1160] ++.L808: ++ uxth ip, r4 ++ cmp ip, r1 ++ bcc .L810 ++ bne .L809 ++ strh r0, [r2, ip, lsl #1] @ movhi ++ ldrh r0, [r3, #1164] ++ adds r0, r0, #1 ++ strh r0, [r3, #1164] @ movhi ++ b .L809 ++.L810: ++ adds r4, r4, #1 ++ add ip, r2, r4, lsl #1 ++ ldrh ip, [ip, #-2] ++ cmp ip, r0 ++ bne .L808 ++.L809: ++ ldrh r2, [r3, #1172] ++ movs r0, #12 ++ muls r0, r2, r0 ++ ldr r2, [r3, #1168] ++ adds r1, r2, r0 ++ str r6, [r1, #4] ++ str r7, [r1, #8] ++ str r5, [r2, r0] ++ ldrh r2, [r3, #1172] ++ adds r2, r2, #1 ++ strh r2, [r3, #1172] @ movhi ++ pop {r3, r4, r5, r6, r7, pc} ++.L812: ++ .align 2 ++.L811: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcUpdatePage, .-FtlGcUpdatePage ++ .align 1 ++ .global FtlGcRefreshOpenBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcRefreshOpenBlock, %function ++FtlGcRefreshOpenBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ mov r5, r0 ++ ldr r4, .L820 ++ ldrh r3, [r4, #1174] ++ cmp r3, r0 ++ beq .L815 ++ ldrh r3, [r4, #1176] ++ cmp r3, r0 ++ beq .L815 ++ ldrh r3, [r4, #1178] ++ cmp r3, r0 ++ beq .L815 ++ ldrh r3, [r4, #1180] ++ cmp r3, r0 ++ beq .L815 ++ mov r1, r0 ++ ldr r0, .L820+4 ++ bl printk ++ ldrh r2, [r4, #1174] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L817 ++ strh r5, [r4, #1174] @ movhi ++.L815: ++ movs r0, #0 ++ pop {r3, r4, r5, pc} ++.L817: ++ ldrh r2, [r4, #1176] ++ cmp r2, r3 ++ bne .L818 ++ strh r5, [r4, #1176] @ movhi ++ b .L815 ++.L818: ++ ldrh r2, [r4, #1178] ++ cmp r2, r3 ++ bne .L819 ++ strh r5, [r4, #1178] @ movhi ++ b .L815 ++.L819: ++ ldrh r2, [r4, #1180] ++ cmp r2, r3 ++ it eq ++ strheq r5, [r4, #1180] @ movhi ++ b .L815 ++.L821: ++ .align 2 ++.L820: ++ .word .LANCHOR2 ++ .word .LC79 ++ .fnend ++ .size FtlGcRefreshOpenBlock, .-FtlGcRefreshOpenBlock ++ .align 1 ++ .global FtlGcRefreshBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcRefreshBlock, %function ++FtlGcRefreshBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ mov r5, r0 ++ ldr r4, .L832 ++ ldrh r3, [r4, #1174] ++ cmp r3, r0 ++ beq .L830 ++ ldrh r3, [r4, #1176] ++ cmp r3, r0 ++ beq .L830 ++ ldrh r3, [r4, #1178] ++ cmp r3, r0 ++ beq .L830 ++ ldrh r3, [r4, #1180] ++ cmp r3, r0 ++ beq .L830 ++ mov r1, r0 ++ ldr r0, .L832+4 ++ bl printk ++ ldrh r2, [r4, #1174] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L824 ++ strh r5, [r4, #1174] @ movhi ++.L830: ++ movs r0, #0 ++ pop {r3, r4, r5, pc} ++.L824: ++ ldrh r2, [r4, #1176] ++ cmp r2, r3 ++ bne .L825 ++ strh r5, [r4, #1176] @ movhi ++ b .L830 ++.L825: ++ ldrh r2, [r4, #1178] ++ cmp r2, r3 ++ bne .L826 ++ strh r5, [r4, #1178] @ movhi ++ b .L830 ++.L826: ++ ldrh r2, [r4, #1180] ++ cmp r2, r3 ++ bne .L831 ++ strh r5, [r4, #1180] @ movhi ++ b .L830 ++.L831: ++ mov r0, #-1 ++ pop {r3, r4, r5, pc} ++.L833: ++ .align 2 ++.L832: ++ .word .LANCHOR2 ++ .word .LC79 ++ .fnend ++ .size FtlGcRefreshBlock, .-FtlGcRefreshBlock ++ .align 1 ++ .global FtlGcMarkBadPhyBlk ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcMarkBadPhyBlk, %function ++FtlGcMarkBadPhyBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ ldr r4, .L842 ++ bl P2V_block_in_plane ++ mov r2, r5 ++ mov r6, r0 ++ ldrh r1, [r4, #1182] ++ ldr r0, .L842+4 ++ bl printk ++ mov r0, r6 ++ bl FtlGcRefreshBlock ++ ldr r3, .L842+8 ++ ldr r2, [r3, #2248] ++ mov r3, r4 ++ cbz r2, .L835 ++ ldr r1, [r4, #236] ++ ldrh r2, [r1, r6, lsl #1] ++ cmp r2, #39 ++ itt hi ++ subhi r2, r2, #40 ++ strhhi r2, [r1, r6, lsl #1] @ movhi ++.L835: ++ ldrh r2, [r3, #1182] ++ movs r1, #0 ++ ldr r4, .L842+12 ++.L836: ++ uxth r0, r1 ++ cmp r2, r0 ++ bhi .L838 ++ cmp r2, #15 ++ itttt ls ++ addls r1, r2, #1 ++ strhls r1, [r3, #1182] @ movhi ++ addls r3, r3, r2, lsl #1 ++ strhls r5, [r3, #1184] @ movhi ++ b .L837 ++.L838: ++ adds r1, r1, #1 ++ add r0, r4, r1, lsl #1 ++ ldrh r0, [r0, #-2] ++ cmp r0, r5 ++ bne .L836 ++.L837: ++ movs r0, #0 ++ pop {r4, r5, r6, pc} ++.L843: ++ .align 2 ++.L842: ++ .word .LANCHOR2 ++ .word .LC80 ++ .word .LANCHOR0 ++ .word .LANCHOR2+1184 ++ .fnend ++ .size FtlGcMarkBadPhyBlk, .-FtlGcMarkBadPhyBlk ++ .align 1 ++ .global FtlGcReFreshBadBlk ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcReFreshBadBlk, %function ++FtlGcReFreshBadBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, .L850 ++ ldrh r3, [r4, #1182] ++ cbz r3, .L845 ++ ldrh r1, [r4, #1174] ++ movw r2, #65535 ++ cmp r1, r2 ++ bne .L845 ++ ldrh r2, [r4, #1218] ++ cmp r2, r3 ++ itt cs ++ movcs r3, #0 ++ strhcs r3, [r4, #1218] @ movhi ++ ldrh r3, [r4, #1218] ++ add r3, r4, r3, lsl #1 ++ ldrh r0, [r3, #1184] ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ ldrh r3, [r4, #1218] ++ adds r3, r3, #1 ++ strh r3, [r4, #1218] @ movhi ++.L845: ++ movs r0, #0 ++ pop {r4, pc} ++.L851: ++ .align 2 ++.L850: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcReFreshBadBlk, .-FtlGcReFreshBadBlk ++ .align 1 ++ .global ftl_memset ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_memset, %function ++ftl_memset: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b memset ++ .fnend ++ .size ftl_memset, .-ftl_memset ++ .align 1 ++ .global BuildFlashLsbPageTable ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type BuildFlashLsbPageTable, %function ++BuildFlashLsbPageTable: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ mov r4, r1 ++ cbnz r0, .L854 ++ ldr r3, .L909 ++.L855: ++ strh r0, [r3, r0, lsl #1] @ movhi ++ adds r0, r0, #1 ++ cmp r0, #512 ++ bne .L855 ++.L861: ++ movs r1, #255 ++ mov r2, #2048 ++ ldr r0, .L909+4 ++ uxth r4, r4 ++ bl ftl_memset ++ ldr r1, .L909 ++ movs r3, #0 ++ ldr r0, .L909+8 ++.L856: ++ uxth r2, r3 ++ cmp r4, r2 ++ bhi .L889 ++ pop {r3, r4, r5, pc} ++.L854: ++ cmp r0, #1 ++ bne .L857 ++ ldr r1, .L909 ++ movs r3, #0 ++.L860: ++ cmp r3, #3 ++ uxth r2, r3 ++ bls .L858 ++ tst r2, #1 ++ ite ne ++ movne r0, #3 ++ moveq r0, #2 ++ rsb r2, r0, r2, lsl #1 ++ uxth r2, r2 ++.L858: ++ strh r2, [r1, r3, lsl #1] @ movhi ++ adds r3, r3, #1 ++ cmp r3, #512 ++ bne .L860 ++ b .L861 ++.L857: ++ cmp r0, #2 ++ bne .L862 ++ ldr r1, .L909 ++ movs r2, #0 ++.L864: ++ uxth r3, r2 ++ cmp r2, #1 ++ ittt hi ++ lslhi r3, r3, #1 ++ addhi r3, r3, #-1 ++ uxthhi r3, r3 ++ strh r3, [r1, r2, lsl #1] @ movhi ++ adds r2, r2, #1 ++ cmp r2, #512 ++ bne .L864 ++ b .L861 ++.L862: ++ cmp r0, #3 ++ bne .L865 ++ ldr r1, .L909 ++ movs r3, #0 ++.L868: ++ cmp r3, #5 ++ uxth r2, r3 ++ bls .L866 ++ tst r2, #1 ++ ite ne ++ movne r0, #5 ++ moveq r0, #4 ++ rsb r2, r0, r2, lsl #1 ++ uxth r2, r2 ++.L866: ++ strh r2, [r1, r3, lsl #1] @ movhi ++ adds r3, r3, #1 ++ cmp r3, #512 ++ bne .L868 ++ b .L861 ++.L865: ++ cmp r0, #4 ++ mov r3, #0 ++ bne .L869 ++ ldr r2, .L909+12 ++ strh r3, [r2, #156] @ movhi ++ movs r3, #1 ++ strh r3, [r2, #158] @ movhi ++ movs r3, #2 ++ strh r3, [r2, #160] @ movhi ++ movs r3, #3 ++ strh r3, [r2, #162] @ movhi ++ movs r3, #5 ++ strh r3, [r2, #166] @ movhi ++ movs r3, #7 ++ strh r3, [r2, #168] @ movhi ++ movs r3, #8 ++ strh r0, [r2, #164] @ movhi ++ strh r3, [r2, #170]! @ movhi ++.L871: ++ tst r3, #1 ++ ite ne ++ movne r1, #7 ++ moveq r1, #6 ++ rsb r1, r1, r3, lsl #1 ++ adds r3, r3, #1 ++ uxth r3, r3 ++ strh r1, [r2, #2]! @ movhi ++ cmp r3, #512 ++ bne .L871 ++ b .L861 ++.L869: ++ cmp r0, #5 ++ bne .L872 ++ ldr r2, .L909+12 ++ add r1, r2, #156 ++.L873: ++ strh r3, [r1, r3, lsl #1] @ movhi ++ adds r3, r3, #1 ++ cmp r3, #16 ++ bne .L873 ++ adds r2, r2, #186 ++.L874: ++ strh r3, [r2, #2]! @ movhi ++ adds r3, r3, #2 ++ uxth r3, r3 ++ cmp r3, #1008 ++ bne .L874 ++ b .L861 ++.L872: ++ cmp r0, #6 ++ bne .L875 ++ ldr r0, .L909 ++ mov r1, r3 ++.L878: ++ cmp r1, #5 ++ uxth r2, r1 ++ bls .L876 ++ tst r2, #1 ++ ite ne ++ movne r2, #12 ++ moveq r2, #10 ++ subs r2, r3, r2 ++ uxth r2, r2 ++.L876: ++ strh r2, [r0, r1, lsl #1] @ movhi ++ adds r1, r1, #1 ++ cmp r1, #512 ++ add r3, r3, #3 ++ uxth r3, r3 ++ bne .L878 ++ b .L861 ++.L875: ++ cmp r0, #9 ++ bne .L879 ++ ldr r2, .L909+12 ++ movw r1, #1021 ++ strh r3, [r2, #156] @ movhi ++ movs r3, #1 ++ strh r3, [r2, #158] @ movhi ++ mov r3, r2 ++ movs r2, #2 ++ strh r2, [r3, #160]! @ movhi ++ movs r2, #3 ++.L880: ++ strh r2, [r3, #2]! @ movhi ++ adds r2, r2, #2 ++ uxth r2, r2 ++ cmp r2, r1 ++ bne .L880 ++ b .L861 ++.L879: ++ cmp r0, #10 ++ bne .L881 ++ ldr r2, .L909+12 ++ add r1, r2, #156 ++.L882: ++ strh r3, [r1, r3, lsl #1] @ movhi ++ adds r3, r3, #1 ++ cmp r3, #63 ++ bne .L882 ++ add r2, r2, #280 ++ movw r1, #961 ++.L883: ++ strh r3, [r2, #2]! @ movhi ++ adds r3, r3, #2 ++ uxth r3, r3 ++ cmp r3, r1 ++ bne .L883 ++ b .L861 ++.L881: ++ cmp r0, #11 ++ bne .L884 ++ ldr r2, .L909+12 ++ movs r3, #0 ++ add r1, r2, #156 ++.L885: ++ strh r3, [r1, r3, lsl #1] @ movhi ++ adds r3, r3, #1 ++ cmp r3, #8 ++ bne .L885 ++ adds r2, r2, #170 ++.L887: ++ tst r3, #1 ++ ite ne ++ movne r1, #7 ++ moveq r1, #6 ++ rsb r1, r1, r3, lsl #1 ++ adds r3, r3, #1 ++ uxth r3, r3 ++ strh r1, [r2, #2]! @ movhi ++ cmp r3, #512 ++ bne .L887 ++ b .L861 ++.L884: ++ cmp r0, #12 ++ bne .L861 ++ ldr r3, .L909+12 ++ movs r2, #0 ++ strh r2, [r3, #156] @ movhi ++ movs r2, #1 ++ strh r2, [r3, #158] @ movhi ++ movs r2, #2 ++ strh r2, [r3, #160] @ movhi ++ movs r2, #3 ++ strh r2, [r3, #162]! @ movhi ++ movs r2, #4 ++.L888: ++ subs r1, r2, #1 ++ add r1, r1, r2, lsr #1 ++ adds r2, r2, #1 ++ uxth r2, r2 ++ strh r1, [r3, #2]! @ movhi ++ cmp r2, #512 ++ bne .L888 ++ b .L861 ++.L889: ++ ldrh r2, [r1, r3, lsl #1] ++ adds r3, r3, #1 ++ add r5, r0, r2, lsl #1 ++ strh r2, [r5, #1220] @ movhi ++ b .L856 ++.L910: ++ .align 2 ++.L909: ++ .word .LANCHOR0+156 ++ .word .LANCHOR2+1220 ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size BuildFlashLsbPageTable, .-BuildFlashLsbPageTable ++ .align 1 ++ .global FlashDieInfoInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashDieInfoInit, %function ++FlashDieInfoInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L925 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ movs r7, #0 ++ ldr r4, .L925+4 ++ ldr r6, .L925+8 ++ ldrh r0, [r3, #478] ++ addw r10, r4, #2072 ++ strb r7, [r4, #2234] ++ mov r9, r10 ++ strb r7, [r6, #3268] ++ bl FlashBlockAlignInit ++ movs r2, #8 ++ mov r1, r7 ++ addw r0, r4, #2236 ++ bl ftl_memset ++ movs r2, #32 ++ mov r1, r7 ++ addw r0, r4, #1180 ++ bl ftl_memset ++ movs r2, #128 ++ mov r1, r7 ++ addw r0, r4, #2104 ++ bl ftl_memset ++ ldr r5, [r4, #48] ++ add r8, r5, #1 ++.L913: ++ ldrb r2, [r5] @ zero_extendqisi2 ++ add r1, r10, r7, lsl #3 ++ mov r0, r8 ++ bl FlashMemCmp8 ++ cbnz r0, .L912 ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ add r2, r4, r3, lsl #2 ++ str r0, [r2, #1180] ++ adds r2, r3, #1 ++ add r3, r3, r4 ++ strb r2, [r4, #2234] ++ strb r7, [r3, #2236] ++.L912: ++ adds r7, r7, #1 ++ cmp r7, #4 ++ bne .L913 ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ strb r3, [r6, #3268] ++ ldrb r3, [r5, #8] @ zero_extendqisi2 ++ cmp r3, #2 ++ beq .L914 ++.L918: ++ ldrh r2, [r5, #14] ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ smulbb r3, r3, r2 ++ ldrb r2, [r5, #13] @ zero_extendqisi2 ++ smulbb r3, r3, r2 ++ strh r3, [r6, #3270] @ movhi ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L914: ++ ldr r10, [r4, #40] ++ movs r7, #0 ++.L917: ++ ldrb r2, [r5] @ zero_extendqisi2 ++ add r1, r9, r7, lsl #3 ++ mov r0, r8 ++ bl FlashMemCmp8 ++ cbnz r0, .L915 ++ ldrh r3, [r5, #14] ++ ldrb r2, [r4, #2234] @ zero_extendqisi2 ++ and r1, r3, #65280 ++ ldrb r3, [r5, #13] @ zero_extendqisi2 ++ mul r3, r10, r3 ++ muls r3, r1, r3 ++ add r1, r4, r2, lsl #2 ++ str r3, [r1, #1180] ++ ldrb r0, [r5, #23] @ zero_extendqisi2 ++ cbz r0, .L916 ++ lsls r3, r3, #1 ++ str r3, [r1, #1180] ++.L916: ++ adds r3, r2, #1 ++ add r2, r2, r4 ++ strb r3, [r4, #2234] ++ strb r7, [r2, #2236] ++.L915: ++ adds r7, r7, #1 ++ cmp r7, #4 ++ bne .L917 ++ b .L918 ++.L926: ++ .align 2 ++.L925: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FlashDieInfoInit, .-FlashDieInfoInit ++ .align 1 ++ .global ftl_read_flash_info ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_read_flash_info, %function ++ftl_read_flash_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ movs r2, #11 ++ movs r1, #0 ++ mov r4, r0 ++ movs r5, #1 ++ bl ftl_memset ++ ldr r3, .L930 ++ ldr r2, [r3, #48] ++ ldr r1, [r3, #40] ++ ldrb r2, [r2, #9] @ zero_extendqisi2 ++ smulbb r2, r2, r1 ++ strh r2, [r4, #4] @ unaligned ++ ldrb r2, [r3, #2316] @ zero_extendqisi2 ++ strb r2, [r4, #7] ++ ldr r2, [r3, #2432] ++ str r2, [r4] @ unaligned ++ ldr r2, [r3, #48] ++ addw r3, r3, #2236 ++ ldrb r0, [r3, #-2] @ zero_extendqisi2 ++ ldrb r1, [r2, #9] @ zero_extendqisi2 ++ strb r1, [r4, #6] ++ movs r1, #32 ++ strb r1, [r4, #8] ++ ldrb r2, [r2, #7] @ zero_extendqisi2 ++ strb r2, [r4, #9] ++ movs r2, #0 ++ strb r2, [r4, #10] ++.L928: ++ uxtb r1, r2 ++ cmp r0, r1 ++ bhi .L929 ++ pop {r4, r5, r6, pc} ++.L929: ++ ldrb r1, [r2, r3] @ zero_extendqisi2 ++ adds r2, r2, #1 ++ ldrb r6, [r4, #10] @ zero_extendqisi2 ++ lsl r1, r5, r1 ++ orrs r1, r1, r6 ++ strb r1, [r4, #10] ++ b .L928 ++.L931: ++ .align 2 ++.L930: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_read_flash_info, .-ftl_read_flash_info ++ .align 1 ++ .global FtlMemInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlMemInit, %function ++FtlMemInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, lr} ++ movw r3, #65535 ++ ldr r4, .L1034 ++ movs r6, #0 ++ mov r0, #1024 ++ movs r7, #12 ++ ldr r5, .L1034+4 ++ mov r8, #36 ++ str r3, [r4, #3284] ++ strh r3, [r4, #1174] @ movhi ++ strh r3, [r4, #1176] @ movhi ++ strh r3, [r4, #1178] @ movhi ++ strh r3, [r4, #1180] @ movhi ++ movs r3, #32 ++ strh r3, [r4, #1120] @ movhi ++ movs r3, #128 ++ strh r3, [r4, #1122] @ movhi ++ strh r6, [r4, #3272] @ movhi ++ str r6, [r4, #3276] ++ str r6, [r4, #1116] ++ str r6, [r4, #508] ++ str r6, [r4, #512] ++ str r6, [r4, #496] ++ str r6, [r4, #484] ++ str r6, [r4, #480] ++ str r6, [r4, #488] ++ str r6, [r4, #492] ++ str r6, [r4, #476] ++ str r6, [r4, #516] ++ str r6, [r4, #520] ++ str r6, [r4, #240] ++ str r6, [r4, #528] ++ str r6, [r4, #532] ++ str r6, [r4, #3280] ++ str r6, [r4, #1132] ++ str r6, [r4, #3288] ++ str r6, [r4, #1124] ++ str r6, [r4, #3292] ++ strh r6, [r4, #1128] @ movhi ++ strh r6, [r4, #1182] @ movhi ++ strh r6, [r4, #3296] @ movhi ++ strh r6, [r4, #1218] @ movhi ++ ldrh r1, [r5, #2396] ++ bl __aeabi_idiv ++ ldrh r3, [r5, #2324] ++ str r0, [r4, #3300] ++ str r6, [r5, #2444] ++ lsls r3, r3, #2 ++ cmp r0, r3 ++ ldrh r0, [r5, #2394] ++ it hi ++ strhi r3, [r4, #3300] ++ lsls r0, r0, #1 ++ bl ftl_malloc ++ str r0, [r4, #1160] ++ ldrh r0, [r5, #2394] ++ muls r0, r7, r0 ++ bl ftl_malloc ++ ldrh r6, [r5, #2324] ++ str r0, [r4, #1168] ++ mul r6, r8, r6 ++ lsl r9, r6, #3 ++ mov r0, r9 ++ bl ftl_malloc ++ str r0, [r4, #3304] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3308] ++ mov r0, r9 ++ bl ftl_malloc ++ str r0, [r4, #3312] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #232] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #1152] ++ ldr r0, [r4, #3300] ++ mul r0, r8, r0 ++ bl ftl_malloc ++ ldrh r3, [r5, #2324] ++ ldrh r6, [r5, #2400] ++ str r0, [r5, #2448] ++ lsls r3, r3, #1 ++ mov r0, r6 ++ adds r3, r3, #1 ++ str r3, [r4, #1156] ++ bl ftl_malloc ++ str r0, [r4, #3316] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3320] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3324] ++ ldr r0, [r4, #1156] ++ muls r0, r6, r0 ++ bl ftl_malloc ++ str r0, [r4, #1144] ++ ldr r0, [r4, #3300] ++ muls r0, r6, r0 ++ bl ftl_malloc ++ str r0, [r4, #3328] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3332] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3336] ++ ldr r0, [r4, #1156] ++ muls r0, r7, r0 ++ bl ftl_malloc ++ ldrh r3, [r5, #2402] ++ ldrh r6, [r5, #2324] ++ str r0, [r4, #1140] ++ muls r6, r3, r6 ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3340] ++ lsls r0, r6, #3 ++ bl ftl_malloc ++ ldrh r3, [r5, #2402] ++ str r0, [r4, #3344] ++ ldr r0, [r4, #1156] ++ muls r0, r3, r0 ++ bl ftl_malloc ++ ldrh r3, [r5, #2402] ++ str r0, [r4, #1148] ++ ldr r0, [r4, #3300] ++ muls r0, r3, r0 ++ bl ftl_malloc ++ str r0, [r4, #3348] ++ ldrh r0, [r5, #2334] ++ lsls r0, r0, #1 ++ uxth r0, r0 ++ strh r0, [r4, #3352] @ movhi ++ bl ftl_malloc ++ ldrh r3, [r4, #3352] ++ str r0, [r4, #3356] ++ ldr r0, .L1034+8 ++ addw r3, r3, #547 ++ lsrs r3, r3, #9 ++ and r0, r0, r3, lsl #9 ++ strh r3, [r4, #3352] @ movhi ++ bl ftl_malloc ++ ldrh r6, [r5, #2334] ++ str r0, [r4, #3360] ++ adds r0, r0, #32 ++ str r0, [r4, #236] ++ lsls r6, r6, #1 ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3364] ++ mov r0, r6 ++ bl ftl_malloc ++ ldr r6, [r5, #2420] ++ str r0, [r4, #300] ++ lsls r6, r6, #1 ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3368] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3372] ++ ldrh r0, [r5, #2334] ++ lsrs r0, r0, #3 ++ adds r0, r0, #4 ++ bl ftl_malloc ++ str r0, [r5, #32] ++ ldrh r0, [r5, #2412] ++ lsls r0, r0, #1 ++ bl ftl_malloc ++ str r0, [r5, #2440] ++ ldrh r0, [r5, #2412] ++ lsls r0, r0, #1 ++ bl ftl_malloc ++ str r0, [r4, #3376] ++ ldrh r0, [r5, #2412] ++ lsls r0, r0, #2 ++ bl ftl_malloc ++ str r0, [r4, #3380] ++ ldrh r0, [r5, #2414] ++ lsls r0, r0, #2 ++ bl ftl_malloc ++ ldrh r2, [r5, #2414] ++ movs r1, #0 ++ str r0, [r4, #3384] ++ lsls r2, r2, #2 ++ bl ftl_memset ++ ldrh r6, [r5, #2428] ++ lsls r6, r6, #2 ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3388] ++ mov r0, r6 ++ bl ftl_malloc ++ str r0, [r4, #3392] ++ ldr r0, [r5, #2420] ++ ldr r6, .L1034+12 ++ lsls r0, r0, #2 ++ bl ftl_malloc ++ str r0, [r4, #3396] ++ ldrh r0, [r5, #2430] ++ muls r0, r7, r0 ++ bl ftl_malloc ++ ldrh r3, [r5, #2430] ++ str r0, [r4, #464] ++ ldrh r0, [r5, #2400] ++ muls r0, r3, r0 ++ bl ftl_malloc ++ ldrh r3, [r5, #2334] ++ str r0, [r4, #3400] ++ movs r0, #6 ++ muls r0, r3, r0 ++ bl ftl_malloc ++ str r0, [r4, #292] ++ ldrh r0, [r5, #2388] ++ ldrh r3, [r5, #2346] ++ adds r0, r0, #31 ++ asrs r0, r0, #5 ++ strh r0, [r4, #3404] @ movhi ++ muls r0, r3, r0 ++ lsls r0, r0, #2 ++ bl ftl_malloc ++ ldrh r2, [r4, #3404] ++ movs r3, #1 ++ ldrh r7, [r5, #2346] ++ str r0, [r5, #2484] ++ lsls r2, r2, #2 ++ mov r1, r2 ++.L934: ++ cmp r3, r7 ++ bcc .L935 ++ ldr r2, .L1034+16 ++ movs r1, #0 ++ add r3, r2, r3, lsl #2 ++ adds r2, r2, #56 ++ adds r3, r3, #24 ++.L936: ++ cmp r2, r3 ++ bne .L937 ++ ldr r3, [r4, #3368] ++ cbnz r3, .L938 ++.L940: ++ ldr r1, .L1034+20 ++ ldr r0, .L1034+24 ++ bl printk ++ mov r0, #-1 ++ pop {r3, r4, r5, r6, r7, r8, r9, pc} ++.L935: ++ ldr r0, [r5, #2484] ++ adds r3, r3, #1 ++ add r0, r0, r1 ++ add r1, r1, r2 ++ str r0, [r6, #4]! ++ b .L934 ++.L937: ++ str r1, [r3, #4]! ++ b .L936 ++.L1035: ++ .align 2 ++.L1034: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word 33553920 ++ .word .LANCHOR0+2484 ++ .word .LANCHOR0+2456 ++ .word .LANCHOR3 ++ .word .LC81 ++.L938: ++ ldr r3, [r4, #3372] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3388] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3396] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #464] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3400] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #292] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r5, #2484] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #300] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #1160] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #1168] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3304] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3312] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #232] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #1152] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3308] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3316] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3320] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3324] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #1144] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3332] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3336] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #1140] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3340] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3344] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #1148] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #236] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, [r4, #3356] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, .L1036 ++ ldr r3, [r3, #2440] ++ cmp r3, #0 ++ beq .L940 ++ ldr r3, .L1036+4 ++ ldr r2, [r3, #3376] ++ cmp r2, #0 ++ beq .L940 ++ ldr r2, [r3, #3380] ++ cmp r2, #0 ++ beq .L940 ++ ldr r3, [r3, #3384] ++ cmp r3, #0 ++ beq .L940 ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, pc} ++.L1037: ++ .align 2 ++.L1036: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlMemInit, .-FtlMemInit ++ .align 1 ++ .global FtlBbt2Bitmap ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlBbt2Bitmap, %function ++FtlBbt2Bitmap: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r5, r1 ++ ldr r3, .L1043 ++ mov r4, r0 ++ movs r1, #0 ++ mov r0, r5 ++ movs r7, #1 ++ ldrh r2, [r3, #3404] ++ lsls r2, r2, #2 ++ bl ftl_memset ++ ldr r0, .L1043+4 ++ subs r2, r4, #2 ++ movw ip, #65535 ++ addw r4, r4, #1022 ++.L1040: ++ ldrh r3, [r2, #2]! ++ cmp r3, ip ++ beq .L1038 ++ lsrs r6, r3, #5 ++ and r3, r3, #31 ++ lsl r3, r7, r3 ++ cmp r2, r4 ++ ldr r1, [r5, r6, lsl #2] ++ orr r3, r3, r1 ++ str r3, [r5, r6, lsl #2] ++ ldrh r3, [r0, #2462] ++ add r3, r3, #1 ++ strh r3, [r0, #2462] @ movhi ++ bne .L1040 ++.L1038: ++ pop {r3, r4, r5, r6, r7, pc} ++.L1044: ++ .align 2 ++.L1043: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlBbt2Bitmap, .-FtlBbt2Bitmap ++ .align 1 ++ .global FtlBbtMemInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlBbtMemInit, %function ++FtlBbtMemInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r0, .L1046 ++ movw r3, #65535 ++ movs r2, #16 ++ movs r1, #255 ++ strh r3, [r0, #2456] @ movhi ++ movs r3, #0 ++ strh r3, [r0, #2462] @ movhi ++ addw r0, r0, #2468 ++ b ftl_memset ++.L1047: ++ .align 2 ++.L1046: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlBbtMemInit, .-FtlBbtMemInit ++ .align 1 ++ .global FtlFreeSysBlkQueueInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueInit, %function ++FtlFreeSysBlkQueueInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1049 ++ mov r2, #2048 ++ push {r4, lr} ++ .save {r4, lr} ++ movs r4, #0 ++ mov r1, r4 ++ strh r0, [r3, #2516] @ movhi ++ addw r0, r3, #2524 ++ strh r4, [r3, #2518] @ movhi ++ strh r4, [r3, #2520] @ movhi ++ strh r4, [r3, #2522] @ movhi ++ bl ftl_memset ++ mov r0, r4 ++ pop {r4, pc} ++.L1050: ++ .align 2 ++.L1049: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit ++ .align 1 ++ .global ftl_free_no_use_map_blk ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_free_no_use_map_blk, %function ++ftl_free_no_use_map_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r1, #0 ++ ldrh r2, [r0, #10] ++ mov r4, r0 ++ ldr r5, [r0, #20] ++ ldr r7, [r0, #12] ++ ldr r6, [r0, #24] ++ lsls r2, r2, #1 ++ mov r0, r5 ++ bl ftl_memset ++ movs r3, #0 ++.L1052: ++ ldrh r1, [r4, #6] ++ uxth r2, r3 ++ cmp r1, r2 ++ bhi .L1056 ++ ldr r3, .L1071 ++ movs r6, #0 ++ mov r9, r6 ++ mov fp, r6 ++ ldrh r2, [r3, #2392] ++ ldrh r3, [r4] ++ strh r2, [r5, r3, lsl #1] @ movhi ++ ldrh r10, [r5] ++.L1057: ++ ldrh r3, [r4, #10] ++ uxth r1, r6 ++ cmp r3, r1 ++ bhi .L1061 ++ mov r0, r9 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1056: ++ uxth r2, r3 ++ ldr r1, [r6, r2, lsl #2] ++ movs r2, #0 ++ ubfx r1, r1, #10, #16 ++.L1053: ++ ldrh ip, [r4, #10] ++ uxth r0, r2 ++ cmp ip, r0 ++ bhi .L1055 ++ adds r3, r3, #1 ++ b .L1052 ++.L1055: ++ uxth r0, r2 ++ ldrh ip, [r7, r0, lsl #1] ++ cmp ip, r1 ++ bne .L1054 ++ cbz r1, .L1054 ++ ldrh ip, [r5, r0, lsl #1] ++ add ip, ip, #1 ++ strh ip, [r5, r0, lsl #1] @ movhi ++.L1054: ++ adds r2, r2, #1 ++ b .L1053 ++.L1061: ++ uxth r2, r6 ++ ldrh r3, [r5, r2, lsl #1] ++ lsl r8, r2, #1 ++ cmp r10, r3 ++ bls .L1058 ++ ldrh r0, [r7, r2, lsl #1] ++ add r8, r8, r7 ++ cbnz r0, .L1059 ++.L1060: ++ adds r6, r6, #1 ++ b .L1057 ++.L1058: ++ cmp r3, #0 ++ bne .L1060 ++ ldrh r0, [r7, r2, lsl #1] ++ add r8, r8, r7 ++ cmp r0, #0 ++ beq .L1060 ++.L1062: ++ movs r1, #1 ++ bl FtlFreeSysBlkQueueIn ++ strh fp, [r8] @ movhi ++ ldrh r3, [r4, #8] ++ subs r3, r3, #1 ++ strh r3, [r4, #8] @ movhi ++ b .L1060 ++.L1059: ++ mov r9, r1 ++ mov r10, r3 ++ cmp r3, #0 ++ beq .L1062 ++ b .L1060 ++.L1072: ++ .align 2 ++.L1071: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk ++ .align 1 ++ .global FtlL2PDataInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlL2PDataInit, %function ++FtlL2PDataInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ movs r1, #0 ++ ldr r4, .L1076 ++ movs r7, #12 ++ ldr r5, .L1076+4 ++ ldr r2, [r4, #2420] ++ ldr r0, [r5, #3372] ++ lsls r2, r2, #1 ++ bl ftl_memset ++ ldrh r3, [r4, #2400] ++ movs r1, #255 ++ ldrh r2, [r4, #2430] ++ ldr r0, [r5, #3400] ++ muls r2, r3, r2 ++ bl ftl_memset ++ movs r2, #0 ++ mov r3, r5 ++ movw r1, #65535 ++ mov ip, r2 ++.L1074: ++ ldrh r5, [r4, #2430] ++ uxth r0, r2 ++ adds r6, r2, #1 ++ cmp r5, r0 ++ bhi .L1075 ++ ldr r2, [r4, #2420] ++ strh r1, [r3, #3410] @ movhi ++ strh r1, [r3, #3408] @ movhi ++ strh r2, [r3, #3418] @ movhi ++ movw r2, #61634 ++ strh r2, [r3, #3412] @ movhi ++ ldrh r2, [r3, #3452] ++ strh r2, [r3, #3416] @ movhi ++ ldrh r2, [r4, #2428] ++ strh r2, [r3, #3414] @ movhi ++ ldr r2, [r3, #3368] ++ str r2, [r3, #3420] ++ ldr r2, [r3, #3396] ++ str r2, [r3, #3424] ++ ldr r2, [r3, #3372] ++ str r2, [r3, #3428] ++ ldr r2, [r3, #3388] ++ str r2, [r3, #3432] ++ pop {r3, r4, r5, r6, r7, pc} ++.L1075: ++ uxth r2, r2 ++ ldr r0, [r3, #464] ++ mul r5, r7, r2 ++ add lr, r0, r5 ++ str ip, [lr, #4] ++ strh r1, [r0, r5] @ movhi ++ ldr r0, [r3, #464] ++ add r0, r0, r5 ++ ldrh r5, [r4, #2400] ++ muls r2, r5, r2 ++ ldr r5, [r3, #3400] ++ bic r2, r2, #3 ++ add r2, r2, r5 ++ str r2, [r0, #8] ++ mov r2, r6 ++ b .L1074 ++.L1077: ++ .align 2 ++.L1076: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlL2PDataInit, .-FtlL2PDataInit ++ .align 1 ++ .global FtlVariablesInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlVariablesInit, %function ++FtlVariablesInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ movw r3, #65535 ++ ldr r6, .L1079 ++ movs r4, #0 ++ mov r1, r4 ++ ldr r5, .L1079+4 ++ ldrh r2, [r6, #2412] ++ ldr r0, [r6, #2440] ++ strh r3, [r5, #3460] @ movhi ++ mov r3, #-1 ++ str r3, [r5, #3472] ++ lsls r2, r2, #1 ++ str r4, [r5, #3456] ++ str r4, [r5, #3464] ++ str r4, [r5, #3468] ++ str r4, [r6, #2248] ++ strh r4, [r6, #2438] @ movhi ++ bl ftl_memset ++ ldrh r2, [r6, #2334] ++ mov r1, r4 ++ ldr r0, [r5, #236] ++ lsls r2, r2, #1 ++ bl ftl_memset ++ ldrh r2, [r6, #2334] ++ mov r1, r4 ++ ldr r0, [r5, #3356] ++ lsls r2, r2, #1 ++ bl ftl_memset ++ mov r1, r4 ++ movs r2, #48 ++ add r0, r5, #244 ++ bl ftl_memset ++ mov r2, #512 ++ mov r1, r4 ++ add r0, r5, #604 ++ bl ftl_memset ++ bl FtlGcBufInit ++ bl FtlL2PDataInit ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L1080: ++ .align 2 ++.L1079: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlVariablesInit, .-FtlVariablesInit ++ .align 1 ++ .global SupperBlkListInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type SupperBlkListInit, %function ++SupperBlkListInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r5, #0 ++ ldr r6, .L1091 ++ movs r2, #6 ++ mov r9, r5 ++ mov r10, r5 ++ ldr r4, .L1091+4 ++ movw fp, #65535 ++ ldrh r3, [r6, #2334] ++ mov r8, r6 ++ .pad #20 ++ sub sp, sp, #20 ++ movs r1, #0 ++ ldr r0, [r4, #292] ++ muls r2, r3, r2 ++ bl ftl_memset ++ str r5, [r4, #312] ++ str r5, [r4, #296] ++ str r5, [r4, #304] ++ strh r5, [r4, #308] @ movhi ++ strh r5, [r4, #316] @ movhi ++ strh r5, [r4, #3272] @ movhi ++.L1082: ++ ldrh r3, [r8, #2332] ++ sxth r7, r5 ++ cmp r7, r3 ++ bge .L1089 ++ ldrh r3, [r8, #2390] ++ uxth r1, r5 ++ ldrh r2, [r8, #2324] ++ str r1, [sp, #4] ++ str r3, [sp] ++ movs r3, #0 ++ mov r6, r3 ++ b .L1090 ++.L1084: ++ add r0, r8, r1 ++ ldr r1, [sp, #4] ++ ldrb r0, [r0, #2350] @ zero_extendqisi2 ++ str r3, [sp, #12] ++ str r2, [sp, #8] ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ ldr r2, [sp, #8] ++ ldr r3, [sp, #12] ++ cbnz r0, .L1083 ++ ldr r1, [sp] ++ add r6, r6, r1 ++ sxth r6, r6 ++.L1083: ++ adds r3, r3, #1 ++.L1090: ++ sxth r1, r3 ++ cmp r1, r2 ++ blt .L1084 ++ lsls r2, r7, #1 ++ cbz r6, .L1085 ++ mov r1, r6 ++ str r2, [sp] ++ mov r0, #32768 ++ bl __aeabi_idiv ++ ldr r2, [sp] ++ sxth r6, r0 ++.L1086: ++ ldr r3, [r4, #292] ++ add r2, r2, r7 ++ add r3, r3, r2, lsl #1 ++ strh r6, [r3, #4] @ movhi ++ ldrh r3, [r4, #320] ++ cmp r7, r3 ++ beq .L1087 ++ ldrh r3, [r4, #368] ++ cmp r7, r3 ++ beq .L1087 ++ ldrh r3, [r4, #416] ++ cmp r7, r3 ++ beq .L1087 ++ ldr r3, [r4, #300] ++ uxth r0, r5 ++ ldrh r3, [r3, r7, lsl #1] ++ cbnz r3, .L1088 ++ add r9, r9, #1 ++ uxth r9, r9 ++ bl INSERT_FREE_LIST ++.L1087: ++ adds r5, r5, #1 ++ b .L1082 ++.L1085: ++ ldr r3, [r4, #300] ++ strh fp, [r3, r7, lsl #1] @ movhi ++ b .L1086 ++.L1088: ++ add r10, r10, #1 ++ uxth r10, r10 ++ bl INSERT_DATA_LIST ++ b .L1087 ++.L1089: ++ movs r0, #0 ++ strh r10, [r4, #308] @ movhi ++ strh r9, [r4, #316] @ movhi ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1092: ++ .align 2 ++.L1091: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size SupperBlkListInit, .-SupperBlkListInit ++ .align 1 ++ .global FtlGcPageVarInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcPageVarInit, %function ++FtlGcPageVarInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ movs r1, #255 ++ ldr r5, .L1094 ++ movs r3, #0 ++ ldr r4, .L1094+4 ++ ldrh r2, [r5, #2394] ++ ldr r0, [r4, #1160] ++ strh r3, [r4, #1164] @ movhi ++ lsls r2, r2, #1 ++ strh r3, [r4, #1172] @ movhi ++ bl ftl_memset ++ ldrh r3, [r5, #2394] ++ movs r2, #12 ++ ldr r0, [r4, #1168] ++ movs r1, #255 ++ muls r2, r3, r2 ++ bl ftl_memset ++ pop {r3, r4, r5, lr} ++ b FtlGcBufInit ++.L1095: ++ .align 2 ++.L1094: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcPageVarInit, .-FtlGcPageVarInit ++ .align 1 ++ .global ftl_memcpy ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_memcpy, %function ++ftl_memcpy: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b memcpy ++ .fnend ++ .size ftl_memcpy, .-ftl_memcpy ++ .align 1 ++ .global FlashReadIdbData ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadIdbData, %function ++FlashReadIdbData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, lr} ++ .save {r3, lr} ++ mov r2, #2048 ++ ldr r1, .L1098 ++ bl ftl_memcpy ++ movs r0, #0 ++ pop {r3, pc} ++.L1099: ++ .align 2 ++.L1098: ++ .word .LANCHOR2+3476 ++ .fnend ++ .size FlashReadIdbData, .-FlashReadIdbData ++ .align 1 ++ .global FlashLoadPhyInfoInRam ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashLoadPhyInfoInRam, %function ++FlashLoadPhyInfoInRam: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ movs r4, #0 ++ ldr r6, .L1108 ++ ldr r8, .L1108+16 ++.L1103: ++ ldrb r2, [r6, #-1] @ zero_extendqisi2 ++ mov r1, r8 ++ mov r0, r6 ++ lsls r7, r4, #5 ++ bl FlashMemCmp8 ++ mov r5, r0 ++ cbnz r0, .L1101 ++ ldr r4, .L1108+4 ++ mov r1, r0 ++ add r6, r4, #504 ++ addw r3, r4, #3256 ++ add r6, r6, r7 ++ add r7, r7, r4 ++ ldrb r2, [r7, #526] @ zero_extendqisi2 ++ mov r0, r3 ++.L1102: ++ lsls r7, r1, #5 ++ ldrb r7, [r7, r3] @ zero_extendqisi2 ++ cmp r7, r2 ++ beq .L1105 ++ adds r1, r1, #1 ++ cmp r1, #4 ++ bne .L1102 ++.L1105: ++ add r1, r0, r1, lsl #5 ++ movs r2, #32 ++ ldr r0, .L1108+8 ++ bl ftl_memcpy ++ movs r2, #32 ++ mov r1, r6 ++ ldr r0, .L1108+12 ++ bl ftl_memcpy ++ ldrh r0, [r4, #478] ++ bl FlashBlockAlignInit ++ b .L1100 ++.L1101: ++ adds r4, r4, #1 ++ adds r6, r6, #32 ++ cmp r4, #86 ++ bne .L1103 ++ mov r5, #-1 ++.L1100: ++ mov r0, r5 ++ pop {r4, r5, r6, r7, r8, pc} ++.L1109: ++ .align 2 ++.L1108: ++ .word .LANCHOR1+505 ++ .word .LANCHOR1 ++ .word .LANCHOR0+52 ++ .word .LANCHOR1+468 ++ .word .LANCHOR0+2072 ++ .fnend ++ .size FlashLoadPhyInfoInRam, .-FlashLoadPhyInfoInRam ++ .align 1 ++ .global NandcCopy1KB ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcCopy1KB, %function ++NandcCopy1KB: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r1, #1 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r2 ++ add r2, r0, #4096 ++ add r5, r0, #512 ++ add r0, r2, r4, lsl #9 ++ ldr r6, [sp, #16] ++ bne .L1111 ++ cbz r3, .L1112 ++ mov r2, #1024 ++ mov r1, r3 ++ bl ftl_memcpy ++.L1112: ++ cbz r6, .L1110 ++ lsrs r4, r4, #1 ++ ldr r3, [r6] @ unaligned ++ add r4, r4, r4, lsl #1 ++ lsls r4, r4, #2 ++ str r3, [r5, r4, lsl #2] ++ pop {r4, r5, r6, pc} ++.L1111: ++ cbz r3, .L1115 ++ mov r1, r0 ++ mov r2, #1024 ++ mov r0, r3 ++ bl ftl_memcpy ++.L1115: ++ cbz r6, .L1110 ++ lsrs r4, r4, #1 ++ add r4, r4, r4, lsl #1 ++ lsls r4, r4, #2 ++ ldr r3, [r5, r4, lsl #2] ++ strb r3, [r6] ++ lsrs r2, r3, #8 ++ strb r2, [r6, #1] ++ lsrs r2, r3, #16 ++ lsrs r3, r3, #24 ++ strb r2, [r6, #2] ++ strb r3, [r6, #3] ++.L1110: ++ pop {r4, r5, r6, pc} ++ .fnend ++ .size NandcCopy1KB, .-NandcCopy1KB ++ .align 1 ++ .global ftl_memcpy32 ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_memcpy32, %function ++ftl_memcpy32: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movs r3, #0 ++ push {r4, lr} ++ .save {r4, lr} ++.L1127: ++ cmp r3, r2 ++ bne .L1128 ++ pop {r4, pc} ++.L1128: ++ ldr r4, [r1, r3, lsl #2] ++ str r4, [r0, r3, lsl #2] ++ adds r3, r3, #1 ++ b .L1127 ++ .fnend ++ .size ftl_memcpy32, .-ftl_memcpy32 ++ .align 1 ++ .global ftl_memcmp ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_memcmp, %function ++ftl_memcmp: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b memcmp ++ .fnend ++ .size ftl_memcmp, .-ftl_memcmp ++ .align 1 ++ .global timer_get_time ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type timer_get_time, %function ++timer_get_time: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1131 ++ ldr r0, [r3] ++ b jiffies_to_msecs ++.L1132: ++ .align 2 ++.L1131: ++ .word jiffies ++ .fnend ++ .size timer_get_time, .-timer_get_time ++ .align 1 ++ .global FlashSramLoadStore ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashSramLoadStore, %function ++FlashSramLoadStore: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ push {r4, r5} ++ .save {r4, r5} ++ ldr r4, .L1136 ++ ldr r4, [r4, #1180] ++ add r4, r4, #4096 ++ add r4, r4, r1 ++ cbnz r2, .L1134 ++ mov r2, r3 ++ mov r1, r4 ++.L1135: ++ pop {r4, r5} ++ b ftl_memcpy ++.L1134: ++ mov r1, r0 ++ mov r2, r3 ++ mov r0, r4 ++ b .L1135 ++.L1137: ++ .align 2 ++.L1136: ++ .word .LANCHOR4 ++ .fnend ++ .size FlashSramLoadStore, .-FlashSramLoadStore ++ .align 1 ++ .global FlashCs123Init ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashCs123Init, %function ++FlashCs123Init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FlashCs123Init, .-FlashCs123Init ++ .align 1 ++ .global ftl_dma32_malloc ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_dma32_malloc, %function ++ftl_dma32_malloc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r0, #8192 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ mov r4, r0 ++ ble .L1140 ++ pop {r3, r4, r5, lr} ++ b ftl_malloc ++.L1140: ++ ldr r5, .L1142 ++ adds r4, r4, #63 ++ bic r4, r4, #63 ++ ldr r3, [r5, #1184] ++ cmp r4, r3 ++ ble .L1141 ++ mov r0, #16384 ++ bl ftl_malloc ++ mov r3, #16384 ++ str r0, [r5, #1188] ++ str r3, [r5, #1184] ++.L1141: ++ ldr r3, [r5, #1184] ++ ldr r0, [r5, #1188] ++ subs r3, r3, r4 ++ add r4, r4, r0 ++ str r3, [r5, #1184] ++ str r4, [r5, #1188] ++ pop {r3, r4, r5, pc} ++.L1143: ++ .align 2 ++.L1142: ++ .word .LANCHOR4 ++ .fnend ++ .size ftl_dma32_malloc, .-ftl_dma32_malloc ++ .align 1 ++ .global rk_nand_suspend ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_nand_suspend, %function ++rk_nand_suspend: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_flash_suspend ++ .fnend ++ .size rk_nand_suspend, .-rk_nand_suspend ++ .align 1 ++ .global rk_nand_resume ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_nand_resume, %function ++rk_nand_resume: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_flash_resume ++ .fnend ++ .size rk_nand_resume, .-rk_nand_resume ++ .align 1 ++ .global rk_ftl_get_capacity ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_get_capacity, %function ++rk_ftl_get_capacity: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1147 ++ ldr r0, [r3, #2432] ++ bx lr ++.L1148: ++ .align 2 ++.L1147: ++ .word .LANCHOR0 ++ .fnend ++ .size rk_ftl_get_capacity, .-rk_ftl_get_capacity ++ .align 1 ++ .global rk_nandc_get_irq_status ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_nandc_get_irq_status, %function ++rk_nandc_get_irq_status: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r0, [r0, #372] ++ bx lr ++ .fnend ++ .size rk_nandc_get_irq_status, .-rk_nandc_get_irq_status ++ .align 1 ++ .global rknand_proc_ftlread ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rknand_proc_ftlread, %function ++rknand_proc_ftlread: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_proc_ftl_read ++ .fnend ++ .size rknand_proc_ftlread, .-rknand_proc_ftlread ++ .align 1 ++ .global ReadFlashInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ReadFlashInfo, %function ++ReadFlashInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_read_flash_info ++ .fnend ++ .size ReadFlashInfo, .-ReadFlashInfo ++ .align 1 ++ .global rknand_print_hex ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rknand_print_hex, %function ++rknand_print_hex: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r5, #0 ++ ldr r7, .L1161 ++ mov r10, r0 ++ mov r6, r1 ++ mov r8, r2 ++ ldr fp, .L1161+4 ++ mov r9, r3 ++ mov r4, r5 ++.L1153: ++ cmp r4, r9 ++ bne .L1159 ++ ldr r1, .L1161+4 ++ ldr r0, .L1161+8 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b printk ++.L1159: ++ cbnz r5, .L1154 ++ mov r3, r4 ++ mov r2, r6 ++ mov r1, r10 ++ ldr r0, .L1161+12 ++ bl printk ++.L1154: ++ cmp r8, #4 ++ bne .L1155 ++ ldr r1, [r6, r4, lsl #2] ++.L1160: ++ mov r0, r7 ++ adds r5, r5, #1 ++ bl printk ++ cmp r5, #15 ++ bls .L1158 ++ movs r5, #0 ++ mov r1, fp ++ ldr r0, .L1161+8 ++ bl printk ++.L1158: ++ adds r4, r4, #1 ++ b .L1153 ++.L1155: ++ cmp r8, #2 ++ ite eq ++ ldrsheq r1, [r6, r4, lsl #1] ++ ldrbne r1, [r6, r4] @ zero_extendqisi2 ++ b .L1160 ++.L1162: ++ .align 2 ++.L1161: ++ .word .LC83 ++ .word .LC84 ++ .word .LC77 ++ .word .LC82 ++ .fnend ++ .size rknand_print_hex, .-rknand_print_hex ++ .align 1 ++ .global HynixGetReadRetryDefault ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type HynixGetReadRetryDefault, %function ++HynixGetReadRetryDefault: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r3, #172 ++ ldr r7, .L1279 ++ cmp r0, #2 ++ mov r1, #173 ++ mov r2, #174 ++ .pad #60 ++ sub sp, sp, #60 ++ mov r4, r0 ++ strb r3, [r7, #1220] ++ mov r3, #175 ++ strb r0, [r7, #1216] ++ strb r1, [r7, #1221] ++ strb r2, [r7, #1222] ++ strb r3, [r7, #1223] ++ bne .L1164 ++ movs r3, #167 ++ movs r5, #7 ++ strb r3, [r7, #1220] ++ movs r2, #247 ++ ldr r3, .L1279+4 ++ strb r2, [r3, #3401] ++.L1229: ++ movs r6, #4 ++ b .L1165 ++.L1164: ++ cmp r0, #3 ++ bne .L1166 ++ movs r3, #176 ++ strb r3, [r7, #1220] ++ movs r3, #177 ++ strb r3, [r7, #1221] ++ movs r3, #178 ++ strb r3, [r7, #1222] ++ movs r3, #179 ++ strb r3, [r7, #1223] ++ movs r3, #180 ++ strb r3, [r7, #1224] ++ movs r3, #181 ++ strb r3, [r7, #1225] ++ movs r3, #182 ++ strb r3, [r7, #1226] ++ movs r3, #183 ++.L1274: ++ movs r5, #8 ++ strb r3, [r7, #1227] ++ mov r6, r5 ++.L1165: ++ subs r3, r4, #1 ++ cmp r3, #1 ++ bhi .L1171 ++ ldr fp, .L1279+12 ++ mov r10, #0 ++ ldr r2, .L1279+8 ++.L1172: ++ ldrb r1, [r7, #2234] @ zero_extendqisi2 ++ uxtb r3, r10 ++ cmp r1, r3 ++ bhi .L1178 ++.L1179: ++ ldr r3, .L1279 ++ strb r6, [r3, #1217] ++ strb r5, [r3, #1218] ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1166: ++ cmp r0, #4 ++ bne .L1167 ++ movs r0, #204 ++ strb r1, [r7, #1225] ++ strb r0, [r7, #1220] ++ movs r0, #191 ++ strb r0, [r7, #1221] ++ movs r0, #170 ++ strb r0, [r7, #1222] ++ movs r0, #171 ++ strb r0, [r7, #1223] ++ movs r0, #205 ++ strb r0, [r7, #1224] ++ strb r2, [r7, #1226] ++ b .L1274 ++.L1167: ++ cmp r0, #5 ++ bne .L1168 ++ movs r3, #56 ++ movs r5, #8 ++ strb r3, [r7, #1220] ++ movs r3, #57 ++ strb r3, [r7, #1221] ++ movs r3, #58 ++ strb r3, [r7, #1222] ++ movs r3, #59 ++ strb r3, [r7, #1223] ++ b .L1229 ++.L1168: ++ cmp r0, #6 ++ bne .L1169 ++ movs r3, #14 ++ movs r5, #12 ++ strb r3, [r7, #1220] ++ movs r3, #15 ++ strb r3, [r7, #1221] ++ movs r3, #16 ++ strb r3, [r7, #1222] ++ movs r3, #17 ++ strb r3, [r7, #1223] ++ b .L1229 ++.L1169: ++ cmp r0, #7 ++ bne .L1170 ++ movs r3, #176 ++ movs r5, #12 ++ strb r3, [r7, #1220] ++ movs r3, #177 ++ strb r3, [r7, #1221] ++ movs r3, #178 ++ strb r3, [r7, #1222] ++ movs r3, #179 ++ strb r3, [r7, #1223] ++ movs r3, #180 ++ strb r3, [r7, #1224] ++ movs r3, #181 ++ strb r3, [r7, #1225] ++ movs r3, #182 ++ strb r3, [r7, #1226] ++ movs r3, #183 ++ strb r3, [r7, #1227] ++ movs r3, #212 ++ strb r3, [r7, #1228] ++ movs r3, #213 ++ strb r3, [r7, #1229] ++ movs r6, #10 ++ b .L1165 ++.L1170: ++ cmp r0, #8 ++ mov r5, #7 ++ bne .L1229 ++ movs r3, #6 ++ strb r5, [r7, #1221] ++ strb r3, [r7, #1220] ++ movs r3, #9 ++ strb r3, [r7, #1223] ++ movs r3, #10 ++ strb r0, [r7, #1222] ++ movs r5, #50 ++ strb r3, [r7, #1224] ++ movs r6, #5 ++ b .L1165 ++.L1178: ++ add r3, r3, r7 ++ mov r8, #0 ++ ldrb r3, [r3, #2236] @ zero_extendqisi2 ++ ldr r1, [r7, r3, lsl #3] ++ add r4, fp, r3, lsl #6 ++ add r3, r7, r3, lsl #3 ++ ldrb r9, [r3, #4] @ zero_extendqisi2 ++ adds r4, r4, #20 ++ add r9, r1, r9, lsl #8 ++ movs r1, #55 ++ addw r3, r9, #2056 ++.L1173: ++ add r0, fp, r8 ++ str r1, [r3] ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ str r2, [sp, #8] ++ str r1, [sp, #4] ++ str r0, [r9, #2052] ++ movs r0, #80 ++ str r3, [sp] ++ bl ndelay ++ ldr r0, [r9, #2048] ++ ldr r3, [sp] ++ ldr r1, [sp, #4] ++ strb r0, [r4, r8] ++ add r8, r8, #1 ++ uxtb r0, r8 ++ ldr r2, [sp, #8] ++ cmp r6, r0 ++ bhi .L1173 ++ mov r0, r4 ++ movs r1, #0 ++.L1176: ++ movs r3, #1 ++ add lr, r2, r1 ++.L1175: ++ ldrb ip, [lr, r3, lsl #2] @ zero_extendqisi2 ++ ldrb r8, [r0] @ zero_extendqisi2 ++ add ip, ip, r8 ++ strb ip, [r0, r3, lsl #3] ++ adds r3, r3, #1 ++ cmp r3, #7 ++ bne .L1175 ++ adds r1, r1, #1 ++ adds r0, r0, #1 ++ cmp r1, #4 ++ bne .L1176 ++ movs r3, #0 ++ add r10, r10, #1 ++ strb r3, [r4, #16] ++ strb r3, [r4, #24] ++ strb r3, [r4, #32] ++ strb r3, [r4, #40] ++ strb r3, [r4, #48] ++ strb r3, [r4, #41] ++ strb r3, [r4, #49] ++ b .L1172 ++.L1171: ++ subs r3, r4, #3 ++ cmp r3, #5 ++ bhi .L1179 ++ smulbb r3, r6, r5 ++ ldr r8, .L1279 ++ asrs r2, r3, #1 ++ lsls r3, r3, #4 ++ str r3, [sp, #48] ++ lsls r3, r2, #2 ++ str r2, [sp, #8] ++ str r3, [sp, #44] ++ lsls r3, r2, #1 ++ str r3, [sp, #28] ++ movs r3, #0 ++ str r3, [sp, #24] ++.L1180: ++ ldrb r3, [sp, #24] @ zero_extendqisi2 ++ str r3, [sp, #12] ++ ldr r2, [sp, #12] ++ ldrb r3, [r8, #2234] @ zero_extendqisi2 ++ cmp r3, r2 ++ bls .L1179 ++ ldr r3, [sp, #12] ++ add r3, r8, r3 ++ ldrb r10, [r3, #2236] @ zero_extendqisi2 ++ ldr fp, [r8, r10, lsl #3] ++ mov r0, r10 ++ add r3, r8, r10, lsl #3 ++ ldrb r9, [r3, #4] @ zero_extendqisi2 ++ movs r3, #255 ++ add r7, fp, r9, lsl #8 ++ str r3, [r7, #2056] ++ bl NandcWaitFlashReady ++ cmp r4, #7 ++ bne .L1181 ++ ldr r3, .L1279+12 ++ movs r0, #160 ++ mla r0, r0, r10, r3 ++ add r3, r0, #28 ++.L1275: ++ str r3, [sp, #16] ++ cmp r4, #4 ++ add r3, fp, r9, lsl #8 ++ mov r2, #54 ++ str r2, [r3, #2056] ++ bne .L1184 ++ movs r2, #255 ++ str r2, [r3, #2052] ++ movs r2, #64 ++ str r2, [r3, #2048] ++ movs r2, #204 ++.L1276: ++ str r2, [r3, #2052] ++ movs r2, #77 ++ b .L1277 ++.L1181: ++ cmp r4, #8 ++ beq .L1183 ++ ldr r0, .L1279+12 ++ add r0, r0, r10, lsl #6 ++ add r3, r0, #20 ++ b .L1275 ++.L1280: ++ .align 2 ++.L1279: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .word .LANCHOR1+3384 ++ .word .LANCHOR0+1216 ++.L1184: ++ subs r2, r4, #5 ++ cmp r2, #1 ++ bhi .L1186 ++ ldrb r2, [r8, #1220] @ zero_extendqisi2 ++ str r2, [r3, #2052] ++ movs r2, #82 ++.L1277: ++ str r2, [r3, #2048] ++.L1185: ++ add r3, fp, r9, lsl #8 ++ movs r2, #22 ++ cmp r4, #6 ++ str r2, [r3, #2056] ++ mov r2, #23 ++ str r2, [r3, #2056] ++ mov r2, #4 ++ str r2, [r3, #2056] ++ mov r2, #25 ++ str r2, [r3, #2056] ++ mov r2, #0 ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ it eq ++ moveq r2, #31 ++ str r2, [r3, #2052] ++ movs r2, #2 ++ str r2, [r3, #2052] ++ movs r2, #0 ++ str r2, [r3, #2052] ++.L1228: ++ add r3, fp, r9, lsl #8 ++ movs r2, #48 ++ mov r0, r10 ++ str r2, [r3, #2056] ++ bl NandcWaitFlashReady ++ subs r3, r4, #5 ++ cmp r3, #1 ++ str r3, [sp, #32] ++ bls .L1231 ++ cmp r4, #8 ++ beq .L1231 ++ cmp r4, #7 ++ ite eq ++ moveq r2, #32 ++ movne r2, #2 ++.L1189: ++ ldr r3, .L1281 ++ subs r2, r2, #1 ++ add r7, fp, r9, lsl #8 ++ ldr r3, [r3, #1192] ++ str r7, [sp, #4] ++ subs r1, r3, #1 ++ uxtab r2, r3, r2 ++ mov r0, r1 ++.L1190: ++ ldr r7, [sp, #4] ++ ldr r7, [r7, #2048] ++ strb r7, [r0, #1]! ++ cmp r0, r2 ++ bne .L1190 ++ cmp r4, #8 ++ bne .L1191 ++ movs r2, #0 ++.L1193: ++ ldrb r0, [r3, r2, lsl #2] @ zero_extendqisi2 ++ uxtb r1, r2 ++ cmp r0, #50 ++ beq .L1192 ++ add r0, r3, r2, lsl #2 ++ ldrb r0, [r0, #1] @ zero_extendqisi2 ++ cmp r0, #5 ++ beq .L1192 ++ adds r2, r2, #1 ++ cmp r2, #8 ++ bne .L1193 ++.L1194: ++ movs r1, #0 ++ ldr r0, .L1281+4 ++ bl printk ++.L1196: ++ b .L1196 ++.L1186: ++ cmp r4, #7 ++ bne .L1185 ++ movs r2, #174 ++ str r2, [r3, #2052] ++ movs r2, #0 ++ str r2, [r3, #2048] ++ movs r2, #176 ++ b .L1276 ++.L1231: ++ movs r2, #16 ++ b .L1189 ++.L1192: ++ cmp r1, #6 ++ bhi .L1194 ++.L1195: ++ ldr r3, .L1281 ++ ldr r3, [r3, #1192] ++ str r3, [sp] ++.L1205: ++ ldr r2, [sp] ++ ldr r0, [sp, #48] ++ subs r1, r3, r2 ++ cmp r1, r0 ++ blt .L1206 ++ ldr r3, .L1281 ++ ldr r1, [r3, #1192] ++ ldr r3, [sp, #28] ++ adds r0, r1, r3 ++ movs r3, #8 ++.L1208: ++ mov ip, r0 ++ movs r7, #0 ++.L1207: ++ ldr r2, [sp, #8] ++ adds r7, r7, #1 ++ ldrh lr, [ip] ++ cmp r2, r7 ++ mvn lr, lr ++ strh lr, [ip], #2 @ movhi ++ bgt .L1207 ++ ldr r2, [sp, #44] ++ subs r3, r3, #1 ++ add r0, r0, r2 ++ bne .L1208 ++ str r3, [sp, #20] ++.L1214: ++ movs r7, #0 ++ mov r0, r7 ++.L1213: ++ movs r2, #1 ++ mov ip, r1 ++ lsls r2, r2, r0 ++ mov lr, #0 ++ str r2, [sp, #36] ++ movs r2, #16 ++ str r2, [sp, #40] ++.L1211: ++ ldrh r2, [ip] ++ str r2, [sp, #52] ++ ldr r2, [sp, #36] ++ mov r3, r2 ++ ldr r2, [sp, #52] ++ bics r3, r3, r2 ++ ldr r2, [sp, #28] ++ it eq ++ addeq lr, lr, #1 ++ add ip, ip, r2 ++ ldr r2, [sp, #40] ++ subs r2, r2, #1 ++ str r2, [sp, #40] ++ bne .L1211 ++ cmp lr, #8 ++ add r0, r0, #1 ++ ittt hi ++ ldrhi r2, [sp, #36] ++ orrhi r7, r7, r2 ++ uxthhi r7, r7 ++ cmp r0, #16 ++ bne .L1213 ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #8] ++ strh r7, [r1], #2 @ movhi ++ adds r3, r3, #1 ++ cmp r2, r3 ++ str r3, [sp, #20] ++ bgt .L1214 ++ ldr r3, .L1281 ++ ldr r1, [r3, #1192] ++ movs r3, #0 ++ subs r0, r1, #4 ++ add r7, r1, #28 ++.L1217: ++ ldr ip, [r0, #4]! ++ cmp ip, #0 ++ bne .L1216 ++ adds r3, r3, #1 ++.L1216: ++ cmp r7, r0 ++ bne .L1217 ++ cmp r3, #7 ++ ble .L1218 ++ ldr r0, .L1281+8 ++ mov r3, #1024 ++ movs r2, #1 ++ bl rknand_print_hex ++ movs r1, #0 ++ ldr r0, .L1281+4 ++ bl printk ++.L1219: ++ b .L1219 ++.L1191: ++ cmp r4, #7 ++ bne .L1197 ++ movs r2, #0 ++.L1199: ++ ldrb r0, [r3, r2, lsl #2] @ zero_extendqisi2 ++ uxtb r1, r2 ++ cmp r0, #12 ++ beq .L1198 ++ add r0, r3, r2, lsl #2 ++ ldrb r0, [r0, #1] @ zero_extendqisi2 ++ cmp r0, #10 ++ beq .L1198 ++ adds r2, r2, #1 ++ cmp r2, #8 ++ bne .L1199 ++.L1200: ++ movs r1, #0 ++ ldr r0, .L1281+4 ++ bl printk ++.L1201: ++ b .L1201 ++.L1198: ++ cmp r1, #6 ++ bls .L1195 ++ b .L1200 ++.L1197: ++ cmp r4, #6 ++ bne .L1195 ++ adds r3, r3, #7 ++.L1202: ++ ldrb r2, [r1, #1]! @ zero_extendqisi2 ++ cmp r2, #12 ++ beq .L1195 ++ ldrb r2, [r1, #8] @ zero_extendqisi2 ++ cmp r2, #4 ++ beq .L1195 ++ cmp r1, r3 ++ bne .L1202 ++ movs r1, #0 ++ ldr r0, .L1281+4 ++ bl printk ++.L1204: ++ b .L1204 ++.L1206: ++ ldr r1, [sp, #4] ++ ldr r1, [r1, #2048] ++ strb r1, [r3], #1 ++ b .L1205 ++.L1218: ++ cmp r4, #6 ++ beq .L1233 ++ cmp r4, #7 ++ beq .L1234 ++ cmp r4, #8 ++ ite eq ++ moveq r7, #5 ++ movne r7, #8 ++.L1220: ++ subs r3, r6, #1 ++ ldr r0, [sp, #16] ++ uxtb r3, r3 ++ mov ip, #0 ++ adds r3, r3, #1 ++ mov r2, r3 ++.L1221: ++ ldr r1, [sp] ++ str r0, [sp, #16] ++.L1222: ++ ldr r3, [sp, #16] ++ ldrb lr, [r1], #1 @ zero_extendqisi2 ++ strb lr, [r3], #1 ++ str r3, [sp, #16] ++ ldr r3, [sp] ++ sub lr, r1, r3 ++ uxtb lr, lr ++ cmp r6, lr ++ bhi .L1222 ++ ldr r1, [sp] ++ add ip, ip, #1 ++ cmp r5, ip ++ add r0, r0, r7 ++ add r1, r1, r2 ++ str r1, [sp] ++ bgt .L1221 ++ add r9, fp, r9, lsl #8 ++ movs r3, #255 ++ mov r0, r10 ++ str r3, [r9, #2056] ++ bl NandcWaitFlashReady ++ ldr r3, [sp, #32] ++ cmp r3, #1 ++ bhi .L1224 ++ movs r3, #54 ++ ldr r2, [sp, #4] ++ str r3, [r9, #2056] ++ mov r1, #-1 ++ ldrb r3, [r8, #1220] @ zero_extendqisi2 ++ ldr r0, [sp, #12] ++ str r3, [r2, #2052] ++ movs r3, #0 ++ str r3, [r2, #2048] ++ movs r3, #22 ++ str r3, [r9, #2056] ++ bl FlashReadCmd ++.L1225: ++ mov r0, r10 ++ bl NandcWaitFlashReady ++ ldr r3, [sp, #24] ++ adds r3, r3, #1 ++ str r3, [sp, #24] ++ b .L1180 ++.L1233: ++ movs r7, #4 ++ b .L1220 ++.L1234: ++ movs r7, #10 ++ b .L1220 ++.L1224: ++ cmp r4, #8 ++ ite eq ++ moveq r3, #190 ++ movne r3, #56 ++ str r3, [r9, #2056] ++ b .L1225 ++.L1183: ++ movs r3, #120 ++ movs r2, #23 ++ str r3, [r7, #2056] ++ movs r3, #0 ++ str r3, [r7, #2052] ++ movs r1, #25 ++ str r3, [r7, #2052] ++ str r3, [r7, #2052] ++ str r2, [r7, #2056] ++ movs r2, #4 ++ str r2, [r7, #2056] ++ str r1, [r7, #2056] ++ movs r1, #218 ++ str r1, [r7, #2056] ++ movs r1, #21 ++ str r3, [r7, #2056] ++ str r3, [r7, #2052] ++ str r3, [r7, #2052] ++ str r1, [r7, #2052] ++ str r2, [r7, #2052] ++ str r3, [r7, #2052] ++ ldr r3, .L1281+12 ++ str r3, [sp, #16] ++ b .L1228 ++.L1282: ++ .align 2 ++.L1281: ++ .word .LANCHOR4 ++ .word .LC85 ++ .word .LC86 ++ .word .LANCHOR0+1244 ++ .fnend ++ .size HynixGetReadRetryDefault, .-HynixGetReadRetryDefault ++ .align 1 ++ .global FlashGetReadRetryDefault ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashGetReadRetryDefault, %function ++FlashGetReadRetryDefault: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r0 ++ cmp r0, #0 ++ beq .L1283 ++ subs r2, r0, #1 ++ cmp r2, #7 ++ bhi .L1285 ++ b HynixGetReadRetryDefault ++.L1285: ++ cmp r0, #49 ++ bne .L1286 ++ ldr r0, .L1306 ++ movs r2, #64 ++ ldr r1, .L1306+4 ++ strb r3, [r0, #1216] ++ movs r3, #4 ++ strb r3, [r0, #1217] ++ movs r3, #15 ++ strb r3, [r0, #1218] ++.L1304: ++ addw r0, r0, #1220 ++ b ftl_memcpy ++.L1286: ++ cmp r0, #33 ++ beq .L1287 ++ sub r2, r0, #65 ++ cmp r2, #1 ++ bhi .L1288 ++.L1287: ++ ldr r0, .L1306 ++ strb r3, [r0, #1216] ++ movs r3, #4 ++.L1305: ++ strb r3, [r0, #1217] ++ movs r3, #7 ++ strb r3, [r0, #1218] ++ movs r2, #45 ++ ldr r1, .L1306+8 ++ b .L1304 ++.L1288: ++ cmp r0, #34 ++ beq .L1289 ++ cmp r0, #67 ++ bne .L1290 ++.L1289: ++ ldr r0, .L1306 ++ strb r3, [r0, #1216] ++ movs r3, #5 ++ b .L1305 ++.L1290: ++ cmp r0, #35 ++ beq .L1291 ++ cmp r0, #68 ++ bne .L1283 ++.L1291: ++ ldr r0, .L1306 ++ movs r2, #95 ++ ldr r1, .L1306+12 ++ strb r3, [r0, #1216] ++ movs r3, #5 ++ strb r3, [r0, #1217] ++ movs r3, #17 ++ strb r3, [r0, #1218] ++ b .L1304 ++.L1283: ++ bx lr ++.L1307: ++ .align 2 ++.L1306: ++ .word .LANCHOR0 ++ .word .LANCHOR1+404 ++ .word .LANCHOR1+256 ++ .word .LANCHOR1+301 ++ .fnend ++ .size FlashGetReadRetryDefault, .-FlashGetReadRetryDefault ++ .align 1 ++ .global NandcXferComp ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcXferComp, %function ++NandcXferComp: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ ldr r5, .L1347 ++ ldr r3, [r5, #2264] ++ ldr r4, [r5, r0, lsl #3] ++ cmp r3, #3 ++ bls .L1339 ++ ldr r3, [r4, #16] ++ lsls r6, r3, #29 ++ bpl .L1339 ++ ldr r6, [r4, #16] ++ ldr r3, [r4, #8] ++ ubfx r6, r6, #1, #1 ++ str r3, [sp] ++ cmp r6, #0 ++ beq .L1310 ++ ldr r7, .L1347+4 ++ movs r6, #0 ++ ldr r8, .L1347+12 ++.L1311: ++ ldr r2, [r4, #28] ++ ldr r3, [sp] ++ ubfx r2, r2, #16, #5 ++ ubfx r3, r3, #22, #6 ++ cmp r2, r3 ++ bge .L1319 ++ ldr r3, [r5, #2264] ++ cmp r3, #5 ++ bhi .L1312 ++.L1315: ++ adds r6, r6, #1 ++ bics r3, r6, #-16777216 ++ bne .L1314 ++ ldr r2, [r4, #28] ++ mov r1, r6 ++ ldr r3, [sp] ++ mov r0, r7 ++ ubfx r2, r2, #16, #5 ++ ubfx r3, r3, #22, #6 ++ bl printk ++ mov r3, #512 ++ movs r2, #4 ++ mov r1, r4 ++ mov r0, r8 ++ bl rknand_print_hex ++.L1314: ++ movs r1, #5 ++ movs r0, #1 ++ bl usleep_range ++ b .L1311 ++.L1312: ++ ldr r3, [r4] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ lsls r0, r3, #18 ++ bpl .L1315 ++ ldr r3, [sp, #4] ++ lsls r1, r3, #14 ++ bpl .L1315 ++.L1319: ++ ldr r3, [r5, #2300] ++ cbz r3, .L1320 ++ ldr r1, [sp] ++ movs r2, #0 ++ ldr r0, [r5, #2292] ++ ubfx r1, r1, #22, #5 ++ lsls r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ movs r2, #0 ++ ldr r0, [r5, #2296] ++ ubfx r1, r1, #22, #5 ++ lsls r1, r1, #7 ++ bl rknand_dma_unmap_single ++.L1320: ++ movs r3, #0 ++ str r3, [r5, #2300] ++.L1308: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1310: ++ ldr r7, .L1347+8 ++ ldr r8, .L1347+12 ++.L1321: ++ ldr r3, [sp] ++ lsls r2, r3, #11 ++ bpl .L1323 ++ ldr r3, [r5, #2308] ++ cbz r3, .L1324 ++ mov r0, r4 ++ bl NandcSendDumpDataStart ++.L1324: ++ ldr r3, [r5, #2300] ++ cbz r3, .L1325 ++ ldr r1, [sp] ++ movs r2, #1 ++ ldr r0, [r5, #2292] ++ ubfx r1, r1, #22, #5 ++ lsls r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ movs r2, #1 ++ ldr r0, [r5, #2296] ++ ubfx r1, r1, #22, #5 ++ lsls r1, r1, #7 ++ bl rknand_dma_unmap_single ++.L1325: ++ ldr r3, [r5, #2308] ++ cmp r3, #0 ++ beq .L1320 ++ mov r0, r4 ++ bl NandcSendDumpDataDone ++ b .L1320 ++.L1323: ++ ldr r3, [r4, #8] ++ adds r6, r6, #1 ++ str r3, [sp] ++ bics r3, r6, #-16777216 ++ bne .L1322 ++ ldr r2, [sp] ++ mov r1, r6 ++ ldr r3, [r4, #28] ++ mov r0, r7 ++ ubfx r3, r3, #16, #5 ++ bl printk ++ mov r3, #512 ++ movs r2, #4 ++ mov r1, r4 ++ mov r0, r8 ++ bl rknand_print_hex ++.L1322: ++ movs r1, #5 ++ movs r0, #1 ++ bl usleep_range ++ b .L1321 ++.L1339: ++ ldr r3, [r4, #8] ++ str r3, [sp] ++ ldr r3, [sp] ++ lsls r3, r3, #11 ++ bpl .L1339 ++ b .L1308 ++.L1348: ++ .align 2 ++.L1347: ++ .word .LANCHOR0 ++ .word .LC87 ++ .word .LC89 ++ .word .LC88 ++ .fnend ++ .size NandcXferComp, .-NandcXferComp ++ .align 1 ++ .global NandcXferData ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type NandcXferData, %function ++NandcXferData: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r3 ++ ldr r3, .L1385 ++ tst r8, #63 ++ .pad #92 ++ sub sp, sp, #92 ++ mov r7, r0 ++ mov r5, r1 ++ mov r10, r2 ++ ldr fp, [sp, #128] ++ mov r9, r3 ++ ldr r6, [r3, r0, lsl #3] ++ bne .L1350 ++ cmp fp, #0 ++ bne .L1351 ++ movs r2, #64 ++ movs r1, #255 ++ add r0, sp, #24 ++ bl ftl_memset ++ add fp, sp, #24 ++.L1351: ++ mov r1, r5 ++ mov r0, r7 ++ stm sp, {r8, fp} ++ movs r3, #0 ++ mov r2, r10 ++ bl NandcXferStart ++ mov r1, r5 ++ mov r0, r7 ++ bl NandcXferComp ++ cmp r5, #0 ++ bne .L1375 ++ ldr r3, [r9, #2312] ++ lsr r0, r10, #1 ++ mov r2, r5 ++ cmp r3, #25 ++ mov r3, r5 ++ ite cc ++ movcc r4, #64 ++ movcs r4, #128 ++.L1354: ++ cmp r2, r0 ++ add fp, fp, #4 ++ add r7, r4, r3 ++ bcc .L1355 ++ movs r2, #0 ++ lsr r0, r10, #2 ++ ldr r1, [r9, #2312] ++ ldr r4, [r9, #2264] ++ mov r9, r2 ++.L1356: ++ cmp r2, r0 ++ bcs .L1352 ++ cbnz r1, .L1362 ++.L1352: ++ movs r3, #0 ++ str r3, [r6, #16] ++.L1363: ++ ldr r3, .L1385 ++ ldr r3, [r3, #2264] ++ cmp r3, #5 ++ bls .L1349 ++ cbnz r5, .L1349 ++ ldr r3, [r6] ++ and r2, r3, #139264 ++ cmp r2, #139264 ++ ittt eq ++ moveq r9, #-1 ++ orreq r3, r3, #131072 ++ streq r3, [r6] ++.L1349: ++ mov r0, r9 ++ add sp, sp, #92 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1355: ++ ldr r1, [r9, #2280] ++ bic r3, r3, #3 ++ adds r2, r2, #1 ++ ldr r3, [r1, r3] ++ strb r3, [fp, #-4] ++ lsrs r1, r3, #8 ++ strb r1, [fp, #-3] ++ lsrs r1, r3, #16 ++ lsrs r3, r3, #24 ++ strb r1, [fp, #-2] ++ strb r3, [fp, #-1] ++ mov r3, r7 ++ b .L1354 ++.L1362: ++ add r3, r2, #8 ++ ldr r3, [r6, r3, lsl #2] ++ str r3, [sp, #20] ++ ldr r3, [sp, #20] ++ lsls r7, r3, #29 ++ bmi .L1378 ++ ldr r3, [sp, #20] ++ ubfx r3, r3, #15, #1 ++ cmp r3, #0 ++ bne .L1378 ++ cmp r4, #5 ++ bls .L1358 ++ ldr r7, [sp, #20] ++ ldr r3, [sp, #20] ++ ubfx r7, r7, #3, #5 ++ ubfx lr, r3, #27, #1 ++ ldr r3, [sp, #20] ++ ldr ip, [sp, #20] ++ orr r7, r7, lr, lsl #5 ++ ubfx r3, r3, #16, #5 ++ ubfx ip, ip, #29, #1 ++ orr r3, r3, ip, lsl #5 ++ cmp r7, r3 ++ ldr r3, [sp, #20] ++ itete hi ++ ldrhi r7, [sp, #20] ++ ldrls r7, [sp, #20] ++ ubfxhi r3, r3, #3, #5 ++ ubfxls r3, r3, #16, #5 ++ ite hi ++ ubfxhi r7, r7, #27, #1 ++ ubfxls r7, r7, #29, #1 ++.L1384: ++ orr r3, r3, r7, lsl #5 ++.L1360: ++ cmp r9, r3 ++ it cc ++ movcc r9, r3 ++.L1357: ++ adds r2, r2, #1 ++ b .L1356 ++.L1358: ++ cmp r4, #3 ++ bls .L1360 ++ ldr r7, [sp, #20] ++ ldr r3, [sp, #20] ++ ubfx r7, r7, #3, #5 ++ ubfx lr, r3, #28, #1 ++ ldr r3, [sp, #20] ++ ldr ip, [sp, #20] ++ orr r7, r7, lr, lsl #5 ++ ubfx r3, r3, #16, #5 ++ ubfx ip, ip, #30, #1 ++ orr r3, r3, ip, lsl #5 ++ cmp r7, r3 ++ ldr r3, [sp, #20] ++ itete hi ++ ldrhi r7, [sp, #20] ++ ldrls r7, [sp, #20] ++ ubfxhi r3, r3, #3, #5 ++ ubfxls r3, r3, #16, #5 ++ ite hi ++ ubfxhi r7, r7, #28, #1 ++ ubfxls r7, r7, #30, #1 ++ b .L1384 ++.L1378: ++ mov r9, #-1 ++ b .L1357 ++.L1375: ++ mov r9, #0 ++ b .L1352 ++.L1350: ++ cmp r1, #1 ++ bne .L1364 ++ cmp fp, #0 ++ mov r4, fp ++ mov r9, #0 ++ ite ne ++ movne r3, #4 ++ moveq r3, #0 ++ str r3, [sp, #8] ++.L1365: ++ cmp r9, r10 ++ bcc .L1367 ++ mov r9, #0 ++ b .L1363 ++.L1367: ++ and fp, r9, #3 ++ cmp r8, #0 ++ beq .L1380 ++ add r3, r8, r9, lsl #9 ++.L1366: ++ str r4, [sp] ++ mov r2, fp ++ movs r1, #1 ++ mov r0, r6 ++ bl NandcCopy1KB ++ movs r3, #0 ++ movs r2, #2 ++ str r3, [sp, #4] ++ movs r1, #1 ++ str r3, [sp] ++ mov r0, r7 ++ mov r3, fp ++ add r9, r9, #2 ++ bl NandcXferStart ++ movs r1, #1 ++ mov r0, r7 ++ bl NandcXferComp ++ ldr r3, [sp, #8] ++ add r4, r4, r3 ++ b .L1365 ++.L1380: ++ mov r3, r8 ++ b .L1366 ++.L1364: ++ movs r4, #0 ++ movs r2, #2 ++ mov r3, r4 ++ str r4, [sp, #4] ++ str r4, [sp] ++ mov r1, r4 ++ bl NandcXferStart ++ mov r9, r4 ++ cmp fp, r4 ++ ite ne ++ movne r3, #4 ++ moveq r3, r4 ++ str r3, [sp, #12] ++ str r8, [sp, #8] ++.L1368: ++ cmp r4, r10 ++ bcs .L1363 ++ mov r1, r5 ++ mov r0, r7 ++ bl NandcXferComp ++ adds r4, r4, #2 ++ ldr r3, [r6, #32] ++ cmp r10, r4 ++ str r3, [sp, #20] ++ bls .L1369 ++ movs r3, #0 ++ movs r2, #2 ++ str r3, [sp, #4] ++ movs r1, #0 ++ str r3, [sp] ++ mov r0, r7 ++ and r3, r4, #3 ++ bl NandcXferStart ++.L1369: ++ ldr r3, [sp, #20] ++ lsls r3, r3, #29 ++ bmi .L1381 ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #20] ++ ubfx r3, r3, #3, #5 ++ ubfx r2, r2, #27, #1 ++ orr r3, r3, r2, lsl #5 ++ cmp r9, r3 ++ it cc ++ movcc r9, r3 ++.L1370: ++ cmp r8, #0 ++ sub r2, r4, #2 ++ ldr r3, [sp, #8] ++ and r2, r2, #3 ++ str fp, [sp] ++ it eq ++ moveq r3, #0 ++ movs r1, #0 ++ mov r0, r6 ++ bl NandcCopy1KB ++ ldr r3, [sp, #8] ++ add r3, r3, #1024 ++ str r3, [sp, #8] ++ ldr r3, [sp, #12] ++ add fp, fp, r3 ++ b .L1368 ++.L1381: ++ mov r9, #-1 ++ b .L1370 ++.L1386: ++ .align 2 ++.L1385: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcXferData, .-NandcXferData ++ .align 1 ++ .global FlashReadRawPage ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadRawPage, %function ++FlashReadRawPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r8, r3 ++ ldr r3, .L1389 ++ mov r6, r1 ++ mov r7, r2 ++ mov r4, r0 ++ ldrb r5, [r3, #477] @ zero_extendqisi2 ++ cbnz r0, .L1388 ++ ldr r1, .L1389+4 ++ ldrb r3, [r1, #37] @ zero_extendqisi2 ++ ldr r0, [r1, #40] ++ muls r0, r3, r0 ++ cmp r0, r6 ++ it hi ++ movhi r5, #4 ++.L1388: ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r1, r6 ++ mov r0, r4 ++ bl FlashReadCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r3, r7 ++ mov r2, r5 ++ str r8, [sp] ++ movs r1, #0 ++ mov r0, r4 ++ bl NandcXferData ++ mov r1, r0 ++ mov r0, r4 ++ bl NandcFlashDeCs ++ mov r0, r1 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1390: ++ .align 2 ++.L1389: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadRawPage, .-FlashReadRawPage ++ .align 1 ++ .global FlashDdrTunningRead ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashDdrTunningRead, %function ++FlashDdrTunningRead: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r3 ++ ldr r4, .L1416 ++ .pad #20 ++ sub sp, sp, #20 ++ mov fp, r2 ++ stm sp, {r0, r1} ++ ldr r3, [r4, #88] ++ ldr r3, [r3, #304] ++ str r3, [sp, #12] ++ ldr r3, [r4, #2264] ++ cmp r3, #8 ++ ldr r3, [sp, #56] ++ ite cc ++ movcc r10, #6 ++ movcs r10, #12 ++ cmp r3, #0 ++ beq .L1405 ++ movs r0, #1 ++ bl FlashSetInterfaceMode ++ movs r0, #1 ++ bl NandcSetMode ++ ldr r0, [sp] ++ bl FlashReset ++ mov r3, r7 ++ mov r2, fp ++ ldm sp, {r0, r1} ++ bl FlashReadRawPage ++ mov r5, r0 ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl NandcSetMode ++ adds r3, r5, #1 ++ bne .L1394 ++.L1403: ++ mov r5, #-1 ++.L1391: ++ mov r0, r5 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1394: ++ mov r2, r5 ++ ldr r1, [sp, #4] ++ ldr r0, .L1416+4 ++ bl printk ++ cmp r5, #9 ++ bhi .L1396 ++ ldr r3, [sp] ++ ldr r3, [r4, r3, lsl #3] ++ ldr r2, [r3, #3840] ++ ldr r2, [r3] ++ orr r2, r2, #131072 ++ str r2, [r3] ++.L1396: ++ ldr r2, .L1416+8 ++ ldr r3, [r2, #1196] ++ adds r3, r3, #1 ++ cmp r3, #2048 ++ str r3, [r2, #1196] ++ bcc .L1391 ++ movs r7, #0 ++ mov fp, r7 ++ str r7, [r2, #1196] ++.L1393: ++ mov r9, #0 ++ mov r8, #-1 ++ mov r6, r9 ++ mov r4, r9 ++ str r9, [sp, #8] ++.L1401: ++ uxtb r0, r10 ++ bl NandcSetDdrPara ++ mov r3, r7 ++ mov r2, fp ++ ldm sp, {r0, r1} ++ bl FlashReadRawPage ++ adds r3, r5, #1 ++ cmp r0, r3 ++ bhi .L1397 ++ cmp r0, #2 ++ bhi .L1407 ++ adds r4, r4, #1 ++ cmp r4, #9 ++ bls .L1407 ++ mov r3, r6 ++ mov r5, r0 ++ sub r6, r10, r4 ++ mov r8, #0 ++.L1399: ++ ldr r2, [sp, #8] ++ cmp r4, r2 ++ it ls ++ movls r6, r3 ++.L1400: ++ cbz r6, .L1402 ++ mov r1, r6 ++ ldr r0, .L1416+12 ++ bl printk ++ uxtb r0, r6 ++ bl NandcSetDdrPara ++.L1402: ++ cmp r8, #0 ++ beq .L1391 ++ ldm sp, {r1, r2} ++ ldr r0, .L1416+16 ++ bl printk ++ ldr r3, [sp, #56] ++ cmp r3, #0 ++ beq .L1403 ++ ldr r3, [sp, #12] ++ ubfx r0, r3, #8, #8 ++ bl NandcSetDdrPara ++ b .L1391 ++.L1405: ++ mov r5, #1024 ++ b .L1393 ++.L1397: ++ ldr r3, [sp, #8] ++ cmp r4, r3 ++ bls .L1408 ++ cmp r4, #7 ++ sub r6, r9, r4 ++ bhi .L1400 ++ str r4, [sp, #8] ++.L1408: ++ movs r4, #0 ++ b .L1398 ++.L1407: ++ mov r8, #0 ++ mov r9, r10 ++ mov r5, r0 ++ mov r7, r8 ++ mov fp, r8 ++.L1398: ++ add r10, r10, #2 ++ cmp r10, #69 ++ bls .L1401 ++ mov r3, r6 ++ mov r6, r9 ++ b .L1399 ++.L1417: ++ .align 2 ++.L1416: ++ .word .LANCHOR0 ++ .word .LC90 ++ .word .LANCHOR4 ++ .word .LC91 ++ .word .LC92 ++ .fnend ++ .size FlashDdrTunningRead, .-FlashDdrTunningRead ++ .align 1 ++ .global FlashReadPage ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadPage, %function ++FlashReadPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r7, r2 ++ mov r5, r0 ++ mov r6, r1 ++ mov r8, r3 ++ bl FlashReadRawPage ++ adds r2, r0, #1 ++ mov r4, r0 ++ bne .L1419 ++ ldr r9, .L1437+4 ++ ldrb fp, [r9, #44] @ zero_extendqisi2 ++ mov r10, r9 ++ cmp fp, #0 ++ bne .L1420 ++.L1422: ++ ldrb r3, [r10, #2256] @ zero_extendqisi2 ++ cbz r3, .L1419 ++ ldr r3, [r10, #88] ++ mov r1, r6 ++ mov r2, r7 ++ mov r0, r5 ++ ldr r9, [r3, #304] ++ movs r3, #1 ++ str r3, [sp] ++ mov r3, r8 ++ bl FlashDdrTunningRead ++ adds r1, r0, #1 ++ mov r4, r0 ++ beq .L1423 ++ ldrb r3, [r10, #2316] @ zero_extendqisi2 ++ cmp r0, r3, lsr #1 ++ bls .L1419 ++.L1423: ++ ubfx r0, r9, #8, #8 ++ bl NandcSetDdrPara ++ b .L1419 ++.L1420: ++ movs r3, #0 ++ mov r2, r7 ++ strb r3, [r9, #44] ++ mov r1, r6 ++ mov r3, r8 ++ mov r0, r5 ++ bl FlashReadRawPage ++ adds r3, r0, #1 ++ strb fp, [r9, #44] ++ beq .L1422 ++ mov r4, r0 ++.L1419: ++ ldr r9, .L1437+8 ++ ldr r10, [r9, #1200] ++ cmp r10, #0 ++ beq .L1418 ++ adds r2, r4, #1 ++ bne .L1418 ++ mov r3, r8 ++ mov r2, r7 ++ mov r1, r6 ++ mov r0, r5 ++ blx r10 ++ mov r3, r6 ++ mov r4, r0 ++ mov r1, r0 ++ mov r2, r5 ++ ldr r0, .L1437 ++ bl printk ++ adds r3, r4, #1 ++ bne .L1418 ++ ldr r3, .L1437+4 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cbz r3, .L1418 ++ mov r0, r5 ++ bl flash_enter_slc_mode ++ ldr r4, [r9, #1200] ++ mov r3, r8 ++ mov r2, r7 ++ mov r1, r6 ++ mov r0, r5 ++ blx r4 ++ mov r4, r0 ++ mov r0, r5 ++ bl flash_exit_slc_mode ++.L1418: ++ mov r0, r4 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1438: ++ .align 2 ++.L1437: ++ .word .LC93 ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .fnend ++ .size FlashReadPage, .-FlashReadPage ++ .align 1 ++ .global FlashDdrParaScan ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashDdrParaScan, %function ++FlashDdrParaScan: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r6, r0 ++ ldr r4, .L1450 ++ movs r5, #0 ++ mov r7, r1 ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl NandcSetMode ++ mov r3, r5 ++ mov r2, r5 ++ mov r1, r7 ++ str r5, [sp] ++ mov r0, r6 ++ bl FlashDdrTunningRead ++ mov r3, r5 ++ mov r8, r0 ++ mov r2, r5 ++ mov r1, r7 ++ mov r0, r6 ++ bl FlashReadRawPage ++ adds r0, r0, #1 ++ beq .L1440 ++ cmp r8, #-1 ++ bne .L1441 ++.L1440: ++ ldrb r3, [r4, #2233] @ zero_extendqisi2 ++ lsls r3, r3, #31 ++ bpl .L1441 ++ movs r0, #1 ++ bl FlashSetInterfaceMode ++ movs r0, #1 ++ bl NandcSetMode ++ movs r3, #0 ++.L1449: ++ movs r0, #0 ++ strb r3, [r4, #2256] ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1441: ++ movs r3, #1 ++ b .L1449 ++.L1451: ++ .align 2 ++.L1450: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashDdrParaScan, .-FlashDdrParaScan ++ .align 1 ++ .global FlashLoadPhyInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashLoadPhyInfo, %function ++FlashLoadPhyInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r3, #60 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r6, .L1466 ++ movs r5, #0 ++ mov r8, #4 ++ strb r3, [sp, #12] ++ movs r3, #40 ++ strb r3, [sp, #13] ++ movs r3, #24 ++ strb r3, [sp, #14] ++ movs r3, #16 ++ ldr r4, .L1466+4 ++ mov r7, #-1 ++ strb r3, [sp, #15] ++ mov r0, r5 ++ ldr r3, [r6, #40] ++ ldr r10, .L1466+24 ++ str r5, [r4, #1208] ++ str r3, [sp, #4] ++ ldr r3, [r4, #1192] ++ str r3, [r4, #1204] ++ bl flash_enter_slc_mode ++.L1453: ++ add fp, r5, #1 ++ mov r9, #0 ++.L1455: ++ add r3, sp, #12 ++ ldrb r0, [r3, r9] @ zero_extendqisi2 ++ bl FlashBchSel ++ movs r3, #0 ++ ldr r2, [r4, #1192] ++ mov r1, r5 ++ mov r0, r3 ++ bl FlashReadRawPage ++ adds r0, r0, #1 ++ bne .L1454 ++ movs r3, #0 ++ ldr r2, [r4, #1192] ++ mov r1, fp ++ mov r0, r3 ++ bl FlashReadRawPage ++ adds r0, r0, #1 ++ bne .L1454 ++ add r9, r9, #1 ++ cmp r9, #4 ++ bne .L1455 ++.L1456: ++ ldr r3, [sp, #4] ++ subs r8, r8, #1 ++ add r5, r5, r3 ++ bne .L1453 ++ mov r0, r8 ++ b .L1465 ++.L1457: ++ movw r1, #2036 ++ add r0, r9, #12 ++ bl js_hash ++ ldr r3, [r9, #8] ++ cmp r3, r0 ++ bne .L1463 ++ movs r2, #32 ++ add r1, r9, #160 ++ ldr r0, .L1466+8 ++ bl ftl_memcpy ++ ldr r1, [r4, #1204] ++ movs r2, #32 ++ ldr r0, .L1466+12 ++ adds r1, r1, #192 ++ bl ftl_memcpy ++ ldr r1, [r4, #1204] ++ mov r2, #852 ++ ldr r0, .L1466+16 ++ adds r1, r1, #224 ++ bl ftl_memcpy ++ ldrh r0, [r10, #478] ++ bl FlashBlockAlignInit ++ ldr r7, [r4, #1204] ++ mov r0, r5 ++ str r5, [r4, #1208] ++ ldr r1, [r6, #40] ++ ldr r3, [r7, #1076] ++ strb r3, [r6, #2256] ++ bl __aeabi_uidiv ++ adds r0, r0, #1 ++ cmp r0, #1 ++ itet ls ++ movls r3, #2 ++ strhi r0, [r4, #1212] ++ strls r3, [r4, #1212] ++ ldrh r3, [r7, #14] ++ movs r7, #0 ++ strb r3, [r4, #1216] ++ b .L1456 ++.L1463: ++ mov r7, #-1 ++ b .L1456 ++.L1454: ++ ldr r9, [r4, #1204] ++ ldr r2, .L1466+20 ++ ldr r3, [r9] ++ cmp r3, r2 ++ bne .L1456 ++ cmp r7, #0 ++ bne .L1457 ++ ldr r1, [r6, #40] ++ mov r0, r5 ++ bl __aeabi_uidiv ++ adds r0, r0, #1 ++ str r0, [r4, #1212] ++ mov r0, r7 ++.L1465: ++ bl flash_exit_slc_mode ++ mov r0, r7 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1467: ++ .align 2 ++.L1466: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LANCHOR1+468 ++ .word .LANCHOR0+52 ++ .word .LANCHOR0+1216 ++ .word 1312902724 ++ .word .LANCHOR1 ++ .fnend ++ .size FlashLoadPhyInfo, .-FlashLoadPhyInfo ++ .align 1 ++ .global ToshibaReadRetrial ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ToshibaReadRetrial, %function ++ToshibaReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r0 ++ ldr r4, .L1495 ++ .pad #28 ++ sub sp, sp, #28 ++ mov fp, r3 ++ str r1, [sp, #12] ++ str r2, [sp, #8] ++ bl NandcWaitFlashReady ++ add r3, r4, r8, lsl #3 ++ ldr r6, [r4, r8, lsl #3] ++ ldrb r1, [r3, #4] @ zero_extendqisi2 ++ ldrb r3, [r4, #84] @ zero_extendqisi2 ++ add r7, r1, #8 ++ subs r3, r3, #67 ++ add r7, r6, r7, lsl #8 ++ cmp r3, #1 ++ lsl r3, r1, #8 ++ str r3, [sp, #16] ++ bls .L1485 ++ ldrb r5, [r4, #2256] @ zero_extendqisi2 ++ cbz r5, .L1470 ++ movs r5, #1 ++ movs r0, #0 ++ bl NandcSetDdrMode ++.L1470: ++ lsls r3, r1, #8 ++ movs r2, #92 ++ adds r3, r6, r3 ++ str r2, [r3, #2056] ++ movs r2, #197 ++ str r2, [r3, #2056] ++.L1469: ++ mov r3, #-1 ++ mov r9, #1 ++ str r3, [sp, #4] ++ lsls r3, r1, #8 ++ str r3, [sp, #20] ++.L1471: ++ ldr r3, .L1495+4 ++ ldrb r3, [r3, #1217] @ zero_extendqisi2 ++ adds r3, r3, #1 ++ cmp r9, r3 ++ bcc .L1480 ++ ldr r10, [sp, #4] ++.L1479: ++ ldrb r2, [r4, #84] @ zero_extendqisi2 ++ movs r1, #0 ++ mov r0, r7 ++ subs r2, r2, #67 ++ cmp r2, #1 ++ bhi .L1481 ++ bl SandiskSetRRPara ++.L1482: ++ ldr r3, [sp, #16] ++ movs r2, #255 ++ add r6, r6, r3 ++ str r2, [r6, #2056] ++ ldrb r2, [r4, #2316] @ zero_extendqisi2 ++ add r2, r2, r2, lsl #1 ++ cmp r10, r2, asr #2 ++ bcc .L1483 ++ cmp r10, #-1 ++ it ne ++ movne r10, #256 ++.L1483: ++ mov r0, r8 ++ bl NandcWaitFlashReady ++ cbz r5, .L1468 ++ movs r0, #4 ++ bl NandcSetDdrMode ++.L1468: ++ mov r0, r10 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1485: ++ movs r5, #0 ++ b .L1469 ++.L1480: ++ ldrb r3, [r4, #84] @ zero_extendqisi2 ++ mov r0, r7 ++ uxtb r1, r9 ++ subs r3, r3, #67 ++ cmp r3, #1 ++ bhi .L1472 ++ bl SandiskSetRRPara ++.L1473: ++ ldrb r3, [r4, #84] @ zero_extendqisi2 ++ cmp r3, #34 ++ bne .L1474 ++ ldr r3, .L1495+4 ++ ldrb r3, [r3, #1217] @ zero_extendqisi2 ++ subs r3, r3, #3 ++ cmp r9, r3 ++ itttt eq ++ ldreq r3, [sp, #20] ++ moveq r2, #179 ++ addeq r3, r6, r3 ++ streq r2, [r3, #2056] ++.L1474: ++ ldr r3, [sp, #16] ++ movs r2, #38 ++ adds r3, r6, r3 ++ str r2, [r3, #2056] ++ movs r2, #93 ++ str r2, [r3, #2056] ++ cbz r5, .L1475 ++ movs r0, #4 ++ bl NandcSetDdrMode ++ mov r3, fp ++ ldr r2, [sp, #8] ++ ldr r1, [sp, #12] ++ mov r0, r8 ++ bl FlashReadRawPage ++ mov r10, r0 ++ movs r0, #0 ++ bl NandcSetDdrMode ++.L1476: ++ cmp r10, #-1 ++ beq .L1477 ++ ldrb r2, [r4, #2316] @ zero_extendqisi2 ++ ldr r3, [sp, #4] ++ add r2, r2, r2, lsl #1 ++ cmp r3, #-1 ++ it eq ++ moveq r3, r10 ++ str r3, [sp, #4] ++ cmp r10, r2, asr #2 ++ bcc .L1479 ++ mov fp, #0 ++ str fp, [sp, #8] ++.L1477: ++ add r9, r9, #1 ++ b .L1471 ++.L1472: ++ bl ToshibaSetRRPara ++ b .L1473 ++.L1475: ++ mov r3, fp ++ ldr r2, [sp, #8] ++ ldr r1, [sp, #12] ++ mov r0, r8 ++ bl FlashReadRawPage ++ mov r10, r0 ++ b .L1476 ++.L1481: ++ bl ToshibaSetRRPara ++ b .L1482 ++.L1496: ++ .align 2 ++.L1495: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .fnend ++ .size ToshibaReadRetrial, .-ToshibaReadRetrial ++ .align 1 ++ .global SamsungReadRetrial ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type SamsungReadRetrial, %function ++SamsungReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r0 ++ ldr r5, .L1510 ++ mov r9, r3 ++ mov fp, r1 ++ mov r10, r2 ++ bl NandcWaitFlashReady ++ movs r7, #1 ++ mov r4, #-1 ++ add r3, r5, r8, lsl #3 ++ ldrb r6, [r3, #4] @ zero_extendqisi2 ++ add r3, r6, #8 ++ ldr r6, [r5, r8, lsl #3] ++ add r6, r6, r3, lsl #8 ++.L1498: ++ ldr r3, .L1510+4 ++ ldrb r3, [r3, #1217] @ zero_extendqisi2 ++ adds r3, r3, #1 ++ cmp r7, r3 ++ bcc .L1502 ++.L1501: ++ movs r1, #0 ++ mov r0, r6 ++ bl SamsungSetRRPara ++ ldrb r3, [r5, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L1497 ++ adds r3, r4, #1 ++ it ne ++ movne r4, #256 ++.L1497: ++ mov r0, r4 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1502: ++ uxtb r1, r7 ++ mov r0, r6 ++ bl SamsungSetRRPara ++ mov r2, r10 ++ mov r3, r9 ++ mov r1, fp ++ mov r0, r8 ++ bl FlashReadRawPage ++ adds r2, r0, #1 ++ beq .L1499 ++ ldrb r3, [r5, #2316] @ zero_extendqisi2 ++ cmp r4, #-1 ++ it eq ++ moveq r4, r0 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L1505 ++ mov r9, #0 ++ mov r10, r9 ++.L1499: ++ adds r7, r7, #1 ++ b .L1498 ++.L1505: ++ mov r4, r0 ++ b .L1501 ++.L1511: ++ .align 2 ++.L1510: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .fnend ++ .size SamsungReadRetrial, .-SamsungReadRetrial ++ .align 1 ++ .global MicronReadRetrial ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type MicronReadRetrial, %function ++MicronReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r3 ++ ldr r3, .L1536 ++ mov r10, r2 ++ .pad #36 ++ sub sp, sp, #36 ++ mov r5, r0 ++ str r1, [sp, #24] ++ ldrb r2, [r3, #2316] @ zero_extendqisi2 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1513 ++ add r2, r2, r2, lsl #1 ++ asr fp, r2, #2 ++.L1514: ++ movs r3, #0 ++ str r3, [sp, #8] ++ ldr r3, .L1536 ++ add r3, r3, r5, lsl #3 ++ str r3, [sp, #28] ++.L1524: ++ mov r0, r5 ++ mov r9, #0 ++ bl NandcWaitFlashReady ++ ldr r3, .L1536 ++ mov r4, #-1 ++ ldr r3, [r3, r5, lsl #3] ++ str r3, [sp, #16] ++ ldr r3, [sp, #28] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ str r3, [sp, #20] ++ ldr r2, [sp, #20] ++ ldr r3, [sp, #16] ++ add r6, r3, r2, lsl #8 ++.L1515: ++ ldr r3, .L1536+4 ++ ldrb r3, [r3, #1217] @ zero_extendqisi2 ++ cmp r9, r3 ++ bcc .L1519 ++.L1518: ++ ldr r3, [sp, #16] ++ movs r0, #200 ++ ldr r2, [sp, #20] ++ movs r6, #0 ++ add r8, r3, r2, lsl #8 ++ movs r3, #239 ++ str r3, [r8, #2056] ++ movs r3, #137 ++ str r3, [r8, #2052] ++ bl ndelay ++ cmp r4, fp ++ str r6, [r8, #2048] ++ str r6, [r8, #2048] ++ str r6, [r8, #2048] ++ str r6, [r8, #2048] ++ bcc .L1520 ++ adds r1, r4, #1 ++ mov r3, r9 ++ it ne ++ movne r4, #256 ++ ldr r2, [sp, #24] ++ str r4, [sp] ++ mov r1, r9 ++ ldr r0, .L1536+8 ++ bl printk ++ ldr r3, [sp, #8] ++ cmp r3, #0 ++ bne .L1522 ++ ldr r3, .L1536 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1512 ++ adds r2, r4, #1 ++ bne .L1512 ++ movs r1, #3 ++ mov r0, r5 ++ bl micron_auto_read_calibration_config ++ movs r3, #1 ++ str r3, [sp, #8] ++ b .L1524 ++.L1513: ++ ldr r3, .L1536+12 ++ smull r2, r3, r2, r3 ++ mov fp, r3 ++ b .L1514 ++.L1519: ++ movs r3, #239 ++ movs r0, #200 ++ str r3, [r6, #2056] ++ movs r3, #137 ++ str r3, [r6, #2052] ++ mov r8, #0 ++ bl ndelay ++ add r3, r9, #1 ++ mov r2, r10 ++ str r3, [r6, #2048] ++ mov r0, r5 ++ str r8, [r6, #2048] ++ str r3, [sp, #12] ++ mov r3, r7 ++ str r8, [r6, #2048] ++ ldr r1, [sp, #24] ++ str r8, [r6, #2048] ++ bl FlashReadRawPage ++ adds r3, r0, #1 ++ beq .L1516 ++ cmp r4, #-1 ++ it eq ++ moveq r4, r0 ++ cmp r0, fp ++ bcc .L1526 ++ mov r7, r8 ++ mov r10, r8 ++.L1516: ++ ldr r9, [sp, #12] ++ b .L1515 ++.L1526: ++ mov r4, r0 ++ mov r7, r8 ++ mov r10, r8 ++ b .L1518 ++.L1522: ++ mov r1, r6 ++ mov r0, r5 ++ bl micron_auto_read_calibration_config ++ adds r3, r4, #1 ++ it ne ++ movne r4, #256 ++.L1512: ++ mov r0, r4 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1520: ++ ldr r3, [sp, #8] ++ cmp r3, #0 ++ beq .L1512 ++ mov r1, r6 ++ mov r0, r5 ++ bl micron_auto_read_calibration_config ++ mov r4, #256 ++ b .L1512 ++.L1537: ++ .align 2 ++.L1536: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC94 ++ .word 1431655766 ++ .fnend ++ .size MicronReadRetrial, .-MicronReadRetrial ++ .align 1 ++ .global HynixReadRetrial ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type HynixReadRetrial, %function ++HynixReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r9, r3 ++ ldr r5, .L1555 ++ mov r8, #0 ++ mov r6, #-1 ++ mov fp, r2 ++ mov r7, r0 ++ str r1, [sp, #4] ++ ldr r3, [r5, #48] ++ adds r2, r5, r0 ++ ldrb r4, [r2, #1228] @ zero_extendqisi2 ++ ldrb r10, [r5, #1218] @ zero_extendqisi2 ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ subs r3, r3, #7 ++ cmp r3, #1 ++ it ls ++ ldrbls r4, [r2, #1236] @ zero_extendqisi2 ++ bl NandcWaitFlashReady ++.L1540: ++ cmp r8, r10 ++ bcc .L1545 ++.L1544: ++ ldr r3, [r5, #48] ++ add r7, r7, r5 ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ subs r3, r3, #7 ++ cmp r3, #1 ++ ldrb r3, [r5, #2316] @ zero_extendqisi2 ++ ite ls ++ strbls r4, [r7, #1236] ++ strbhi r4, [r7, #1228] ++ add r3, r3, r3, lsl #1 ++ cmp r6, r3, asr #2 ++ bcc .L1538 ++ adds r3, r6, #1 ++ it ne ++ movne r6, #256 ++.L1538: ++ mov r0, r6 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1545: ++ adds r4, r4, #1 ++ ldr r2, .L1555+4 ++ uxtb r4, r4 ++ ldrb r1, [r5, #1217] @ zero_extendqisi2 ++ mov r0, r7 ++ cmp r10, r4 ++ it ls ++ movls r4, #0 ++ mov r3, r4 ++ bl HynixSetRRPara ++ mov r2, fp ++ mov r3, r9 ++ ldr r1, [sp, #4] ++ mov r0, r7 ++ bl FlashReadRawPage ++ adds r2, r0, #1 ++ beq .L1542 ++ ldrb r3, [r5, #2316] @ zero_extendqisi2 ++ cmp r6, #-1 ++ it eq ++ moveq r6, r0 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L1549 ++ mov r9, #0 ++ mov fp, r9 ++.L1542: ++ add r8, r8, #1 ++ b .L1540 ++.L1549: ++ mov r6, r0 ++ b .L1544 ++.L1556: ++ .align 2 ++.L1555: ++ .word .LANCHOR0 ++ .word .LANCHOR0+1220 ++ .fnend ++ .size HynixReadRetrial, .-HynixReadRetrial ++ .align 1 ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type samsung_read_retrial, %function ++samsung_read_retrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ mov r10, r0 ++ mov fp, r2 ++ mov r9, r3 ++ str r1, [sp, #12] ++ bl NandcWaitFlashReady ++ ldr r3, .L1582 ++ ldr r2, [r3, r10, lsl #3] ++ str r3, [sp, #20] ++ str r2, [sp, #8] ++ add r2, r3, r10, lsl #3 ++ ldrb r6, [r2, #4] @ zero_extendqisi2 ++ ldrb r2, [r3, #2232] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L1558 ++ ldr r3, [sp, #8] ++ lsl r8, r6, #8 ++ mov r4, #-1 ++ movs r7, #1 ++ add r5, r3, r8 ++ addw r3, r5, #2056 ++ str r3, [sp, #16] ++.L1562: ++ ldr r3, [sp, #16] ++ movs r6, #0 ++ ldr r1, [sp, #12] ++ mov r0, r10 ++ mov r2, r3 ++ movs r3, #239 ++ str r3, [r2] ++ movs r3, #141 ++ str r3, [r5, #2052] ++ mov r2, fp ++ ldr r3, .L1582+4 ++ ldrsb r3, [r7, r3] ++ str r3, [r5, #2048] ++ mov r3, r9 ++ str r6, [r5, #2048] ++ str r6, [r5, #2048] ++ str r6, [r5, #2048] ++ bl FlashReadRawPage ++ adds r1, r0, #1 ++ beq .L1559 ++ ldr r3, [sp, #20] ++ cmp r4, #-1 ++ it eq ++ moveq r4, r0 ++ ldrb r3, [r3, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L1570 ++ mov r9, r6 ++ mov fp, r6 ++.L1559: ++ adds r7, r7, #1 ++ cmp r7, #26 ++ bne .L1562 ++.L1561: ++ ldr r3, [sp, #8] ++ add r3, r3, r8 ++ mov r8, r3 ++ movs r3, #239 ++ str r3, [r8, #2056] ++ movs r3, #141 ++.L1581: ++ str r3, [r5, #2052] ++ movs r3, #0 ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ ldr r3, .L1582 ++ ldrb r3, [r3, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L1568 ++ adds r3, r4, #1 ++ ldr r2, [sp, #12] ++ it ne ++ movne r4, #256 ++ mov r3, r7 ++ str r4, [sp] ++ mov r1, r7 ++ ldr r0, .L1582+8 ++ bl printk ++.L1568: ++ mov r0, r10 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1570: ++ mov r4, r0 ++ b .L1561 ++.L1558: ++ ldr r3, [sp, #8] ++ lsls r6, r6, #8 ++ ldr r8, .L1582+12 ++ mov r4, #-1 ++ movs r7, #1 ++ adds r5, r3, r6 ++ addw r3, r5, #2056 ++ str r3, [sp, #16] ++.L1567: ++ ldr r3, [sp, #16] ++ mov r0, r10 ++ ldr r1, [sp, #12] ++ mov r2, r3 ++ movs r3, #239 ++ str r3, [r2] ++ movs r3, #137 ++ str r3, [r5, #2052] ++ mov r2, fp ++ ldrb r3, [r8, #4] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ ldrb r3, [r8, #5] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ ldrb r3, [r8, #6] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ ldrb r3, [r8, #7] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ mov r3, r9 ++ bl FlashReadRawPage ++ adds r2, r0, #1 ++ beq .L1564 ++ ldr r3, .L1582 ++ cmp r4, #-1 ++ it eq ++ moveq r4, r0 ++ ldrb r3, [r3, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L1571 ++ mov r9, #0 ++ mov fp, r9 ++.L1564: ++ adds r7, r7, #1 ++ add r8, r8, #4 ++ cmp r7, #26 ++ bne .L1567 ++.L1566: ++ ldr r3, [sp, #8] ++ add r3, r3, r6 ++ mov r6, r3 ++ movs r3, #239 ++ str r3, [r6, #2056] ++ movs r3, #137 ++ b .L1581 ++.L1571: ++ mov r4, r0 ++ b .L1566 ++.L1583: ++ .align 2 ++.L1582: ++ .word .LANCHOR0 ++ .word .LANCHOR3+11 ++ .word .LC95 ++ .word .LANCHOR3+37 ++ .fnend ++ .size samsung_read_retrial, .-samsung_read_retrial ++ .align 1 ++ .global FlashProgPage ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashProgPage, %function ++FlashProgPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r8, r3 ++ ldr r3, .L1587 ++ mov r5, r1 ++ mov r7, r2 ++ mov r4, r0 ++ ldrb r6, [r3, #477] @ zero_extendqisi2 ++ cbnz r0, .L1585 ++ ldr r1, .L1587+4 ++ ldrb r3, [r1, #37] @ zero_extendqisi2 ++ ldr r0, [r1, #40] ++ muls r0, r3, r0 ++ cmp r0, r5 ++ bls .L1585 ++ ldrb r3, [r1, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ it ne ++ movne r6, #4 ++.L1585: ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashProgFirstCmd ++ mov r3, r7 ++ mov r2, r6 ++ str r8, [sp] ++ movs r1, #1 ++ mov r0, r4 ++ bl NandcXferData ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashProgSecondCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashReadStatus ++ mov r1, r0 ++ mov r0, r4 ++ bl NandcFlashDeCs ++ and r0, r1, #1 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1588: ++ .align 2 ++.L1587: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgPage, .-FlashProgPage ++ .align 1 ++ .global FlashSavePhyInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashSavePhyInfo, %function ++FlashSavePhyInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r4, .L1602 ++ ldr r5, .L1602+4 ++ ldr r3, [r4, #1192] ++ ldrb r0, [r4, #1218] @ zero_extendqisi2 ++ ldr r8, .L1602+12 ++ str r3, [r4, #1204] ++ bl FlashBchSel ++ mov r2, #2048 ++ movs r1, #0 ++ ldr r0, [r4, #1192] ++ bl ftl_memset ++ ldr r3, [r4, #1204] ++ movs r2, #32 ++ addw r1, r5, #2072 ++ str r8, [r3] ++ ldr r0, [r4, #1204] ++ ldrb r3, [r5, #2234] @ zero_extendqisi2 ++ adds r0, r0, #16 ++ strh r3, [r0, #-4] @ movhi ++ ldrb r3, [r5, #37] @ zero_extendqisi2 ++ strh r3, [r0, #-2] @ movhi ++ ldrb r3, [r5, #2256] @ zero_extendqisi2 ++ str r3, [r0, #1060] ++ bl ftl_memcpy ++ ldr r0, [r4, #1204] ++ movs r2, #8 ++ addw r1, r5, #2236 ++ adds r0, r0, #80 ++ bl ftl_memcpy ++ ldr r0, [r4, #1204] ++ movs r2, #32 ++ addw r1, r5, #1180 ++ adds r0, r0, #96 ++ bl ftl_memcpy ++ ldr r0, [r4, #1204] ++ movs r2, #32 ++ ldr r1, .L1602+8 ++ adds r0, r0, #160 ++ bl ftl_memcpy ++ ldr r0, [r4, #1204] ++ movs r2, #32 ++ add r1, r5, #52 ++ adds r0, r0, #192 ++ bl ftl_memcpy ++ ldr r0, [r4, #1204] ++ mov r2, #852 ++ add r1, r5, #1216 ++ adds r0, r0, #224 ++ bl ftl_memcpy ++ ldr r6, [r4, #1204] ++ movw r1, #2036 ++ add r0, r6, #12 ++ bl js_hash ++ mov r3, #1592 ++ str r0, [r6, #8] ++ str r3, [r6, #4] ++ movs r6, #0 ++ ldr r3, [r4, #1220] ++ mov r7, r6 ++ movs r0, #0 ++ str r3, [r4, #1204] ++ bl flash_enter_slc_mode ++.L1595: ++ ldr r1, [r5, #40] ++ movs r2, #0 ++ mov r0, r2 ++ muls r1, r7, r1 ++ bl FlashEraseBlock ++ ldrb r9, [r5, #152] @ zero_extendqisi2 ++ cmp r9, #0 ++ beq .L1590 ++ mov r9, #0 ++.L1591: ++ ldr r1, [r5, #40] ++ movs r3, #0 ++ ldr r2, [r4, #1192] ++ mov r0, r3 ++ mla r1, r1, r7, r9 ++ add r9, r9, #1 ++ bl FlashProgPage ++ cmp r9, #10 ++ bne .L1591 ++.L1592: ++ ldr r1, [r5, #40] ++ movs r3, #0 ++ ldr r2, [r4, #1220] ++ mov r0, r3 ++ add r10, r7, #1 ++ muls r1, r7, r1 ++ bl FlashReadRawPage ++ adds r0, r0, #1 ++ beq .L1593 ++ ldr r9, [r4, #1204] ++ ldr r3, [r9] ++ cmp r3, r8 ++ bne .L1593 ++ movw r1, #2036 ++ add r0, r9, #12 ++ bl js_hash ++ ldr r3, [r9, #8] ++ cmp r3, r0 ++ bne .L1593 ++ ldr r3, [r5, #40] ++ cmp r6, #1 ++ str r10, [r4, #1212] ++ mul r7, r7, r3 ++ str r7, [r4, #1208] ++ beq .L1596 ++ movs r6, #1 ++.L1593: ++ mov r7, r10 ++ cmp r7, #4 ++ bne .L1595 ++.L1594: ++ movs r0, #0 ++ bl flash_exit_slc_mode ++ clz r0, r6 ++ lsrs r0, r0, #5 ++ negs r0, r0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1590: ++ ldr r1, [r5, #40] ++ mov r3, r9 ++ ldr r2, [r4, #1192] ++ mov r0, r9 ++ muls r1, r7, r1 ++ bl FlashProgPage ++ ldr r1, [r5, #40] ++ mov r3, r9 ++ ldr r2, [r4, #1192] ++ mov r0, r9 ++ muls r1, r7, r1 ++ adds r1, r1, #1 ++ bl FlashProgPage ++ b .L1592 ++.L1596: ++ movs r6, #2 ++ b .L1594 ++.L1603: ++ .align 2 ++.L1602: ++ .word .LANCHOR4 ++ .word .LANCHOR0 ++ .word .LANCHOR1+468 ++ .word 1312902724 ++ .fnend ++ .size FlashSavePhyInfo, .-FlashSavePhyInfo ++ .align 1 ++ .global FlashReadIdbDataRaw ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadIdbDataRaw, %function ++FlashReadIdbDataRaw: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r3, #60 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r4, .L1622 ++ mov r10, r0 ++ strb r3, [sp, #12] ++ movs r3, #40 ++ strb r3, [sp, #13] ++ movs r3, #24 ++ strb r3, [sp, #14] ++ movs r3, #16 ++ strb r3, [sp, #15] ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ str r3, [sp, #4] ++ ldr r3, [r4, #2252] ++ cbz r3, .L1605 ++ movs r0, #0 ++ bl flash_enter_slc_mode ++.L1605: ++ ldr r6, .L1622+4 ++ mov r8, #-1 ++ movs r5, #2 ++ mov r2, #2048 ++ movs r1, #0 ++ mov r0, r10 ++ bl ftl_memset ++.L1606: ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ cmp r5, r3 ++ bcc .L1611 ++.L1610: ++ ldr r0, [sp, #4] ++ bl FlashBchSel ++ ldr r3, [r4, #2252] ++ cbz r3, .L1604 ++ movs r0, #0 ++ bl flash_exit_slc_mode ++.L1604: ++ mov r0, r8 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1611: ++ movs r7, #0 ++ add fp, sp, #12 ++.L1608: ++ ldrb r9, [r7, fp] @ zero_extendqisi2 ++ mov r0, r9 ++ bl FlashBchSel ++ ldr r1, [r4, #40] ++ movs r3, #0 ++ ldr r2, [r6, #1192] ++ mov r0, r3 ++ muls r1, r5, r1 ++ bl FlashReadRawPage ++ adds r0, r0, #1 ++ bne .L1607 ++ adds r7, r7, #1 ++ cmp r7, #4 ++ bne .L1608 ++.L1609: ++ adds r5, r5, #1 ++ b .L1606 ++.L1614: ++ mov r8, #0 ++ b .L1610 ++.L1607: ++ ldr r3, [r6, #1192] ++ ldr r2, .L1622+8 ++ ldr r3, [r3] ++ cmp r3, r2 ++ bne .L1609 ++ mov r1, r9 ++ ldr r0, .L1622+12 ++ bl printk ++ mov r2, #2048 ++ ldr r1, [r6, #1192] ++ mov r0, r10 ++ bl ftl_memcpy ++ ldr r3, [r6, #1192] ++ ldr r3, [r3, #512] ++ strb r3, [r4, #37] ++ ldr r3, [r6, #1212] ++ cmp r5, r3 ++ bcs .L1614 ++ str r5, [r6, #1212] ++ mov r8, #0 ++ bl FlashSavePhyInfo ++ b .L1609 ++.L1623: ++ .align 2 ++.L1622: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word -52655045 ++ .word .LC96 ++ .fnend ++ .size FlashReadIdbDataRaw, .-FlashReadIdbDataRaw ++ .align 1 ++ .global FlashInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashInit, %function ++FlashInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r0 ++ ldr r5, .L1740 ++ .pad #28 ++ sub sp, sp, #28 ++ mov r0, #32768 ++ movs r6, #0 ++ bl ftl_malloc ++ str r0, [r5, #1192] ++ mov r0, #32768 ++ bl ftl_malloc ++ str r0, [r5, #1220] ++ mov r0, #4096 ++ ldr r4, .L1740+4 ++ mov r8, r6 ++ bl ftl_dma32_malloc ++ str r0, [r5, #1224] ++ mov r0, #32768 ++ bl ftl_malloc ++ ldr fp, .L1740+40 ++ str r0, [r5, #1228] ++ mov r0, #4096 ++ bl ftl_dma32_malloc ++ movs r3, #50 ++ str r0, [r5, #1232] ++ strb r3, [r4, #37] ++ mov r0, r7 ++ strb r3, [r5, #1216] ++ addw r7, r4, #2072 ++ movs r3, #128 ++ str r6, [r5, #1212] ++ str r3, [r4, #40] ++ movs r3, #60 ++ strb r6, [r4, #2256] ++ str r6, [r5, #1196] ++ strb r6, [r4, #36] ++ strb r6, [r5, #1236] ++ strb r3, [r5, #1218] ++ bl NandcInit ++.L1630: ++ ldr r3, [r4, r6, lsl #3] ++ uxtb r9, r6 ++ add r2, r4, r6, lsl #3 ++ mov r0, r9 ++ ldrb r10, [r2, #4] @ zero_extendqisi2 ++ str r3, [sp, #20] ++ bl FlashReset ++ mov r0, r9 ++ bl NandcFlashCs ++ ldr r3, [sp, #20] ++ movs r0, #200 ++ add r10, r3, r10, lsl #8 ++ movs r3, #144 ++ str r3, [r10, #2056] ++ str r8, [r10, #2052] ++ bl ndelay ++ ldr r2, [r10, #2048] ++ uxtb r2, r2 ++ strb r2, [r7] ++ cmp r2, #44 ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #1] ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #2] ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #3] ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #4] ++ ldr r1, [r10, #2048] ++ strb r1, [r7, #5] ++ bne .L1625 ++ movs r2, #239 ++ movs r0, #200 ++ str r2, [r10, #2056] ++ movs r2, #1 ++ str r2, [r10, #2052] ++ bl ndelay ++ movs r2, #4 ++ str r2, [r10, #2048] ++ str r8, [r10, #2048] ++ str r8, [r10, #2048] ++ str r8, [r10, #2048] ++.L1625: ++ mov r0, r9 ++ bl NandcFlashDeCs ++ ldrb r2, [r7] @ zero_extendqisi2 ++ subs r3, r2, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L1626 ++ ldrb r1, [r7, #5] @ zero_extendqisi2 ++ mov r0, fp ++ ldrb r3, [r7, #1] @ zero_extendqisi2 ++ str r1, [sp, #12] ++ ldrb r1, [r7, #4] @ zero_extendqisi2 ++ str r1, [sp, #8] ++ ldrb r1, [r7, #3] @ zero_extendqisi2 ++ str r1, [sp, #4] ++ ldrb r1, [r7, #2] @ zero_extendqisi2 ++ str r1, [sp] ++ adds r1, r6, #1 ++ bl printk ++.L1626: ++ cbnz r6, .L1627 ++ ldrb r3, [r4, #2072] @ zero_extendqisi2 ++ subs r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L1681 ++ ldrb r3, [r4, #2073] @ zero_extendqisi2 ++ cmp r3, #255 ++ beq .L1681 ++.L1627: ++ ldrb r3, [r7] @ zero_extendqisi2 ++ adds r6, r6, #1 ++ adds r7, r7, #8 ++ cmp r3, #181 ++ itt eq ++ moveq r3, #44 ++ strbeq r3, [r7, #-8] ++ cmp r6, #4 ++ bne .L1630 ++ ldrb r3, [r4, #2072] @ zero_extendqisi2 ++ cmp r3, #173 ++ beq .L1631 ++ ldr r0, [r4, #2260] ++ bl NandcSetDdrMode ++.L1631: ++ mov r2, #852 ++ movs r1, #0 ++ ldr r0, .L1740+8 ++ bl ftl_memset ++ ldr r6, .L1740+12 ++ ldr r3, .L1740+16 ++ ldr r1, [r4, #2268] ++ add r2, r3, #468 ++ cmp r1, r6 ++ str r2, [r4, #48] ++ mov r2, #0 ++ strb r2, [r4, #44] ++ bne .L1632 ++ ldrb r2, [r3, #487] @ zero_extendqisi2 ++ cmp r2, #50 ++ itt ne ++ movne r2, #1 ++ strne r2, [r4, #2252] ++.L1632: ++ ldrb r2, [r4, #2073] @ zero_extendqisi2 ++ cmp r2, #161 ++ beq .L1633 ++ cmp r2, #241 ++ beq .L1633 ++ cmp r2, #218 ++ beq .L1633 ++ and r0, r2, #253 ++ cmp r0, #209 ++ beq .L1633 ++ cmp r2, #220 ++ bne .L1634 ++ ldrb r0, [r4, #2075] @ zero_extendqisi2 ++ cmp r0, #149 ++ bne .L1634 ++.L1633: ++ movs r7, #16 ++ movs r0, #1 ++ strb r7, [r4, #37] ++ strb r7, [r5, #1218] ++ ldrb r7, [r4, #2072] @ zero_extendqisi2 ++ strb r0, [r4, #36] ++ strb r2, [r3, #3414] ++ cmp r7, #152 ++ strb r7, [r3, #3413] ++ bne .L1636 ++ ldrsb r7, [r4, #2076] ++ cmp r7, #0 ++ blt .L1637 ++ movs r0, #24 ++ strb r0, [r5, #1218] ++.L1636: ++ cmp r1, r6 ++ beq .L1639 ++ movw r0, #2049 ++ cmp r1, r0 ++ bne .L1640 ++.L1639: ++ movs r1, #16 ++ strb r1, [r5, #1218] ++.L1640: ++ cmp r2, #218 ++ bne .L1641 ++ mov r1, #2048 ++.L1734: ++ strh r1, [r3, #3426] @ movhi ++ strb r2, [r3, #3414] ++.L1642: ++ movs r2, #32 ++ ldr r1, .L1740+20 ++ ldr r0, .L1740+24 ++ bl ftl_memcpy ++ ldr r1, .L1740+28 ++ movs r2, #32 ++ sub r0, r1, #2944 ++ bl ftl_memcpy ++.L1634: ++ ldrb r3, [r4, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1645 ++ bl FlashLoadPhyInfoInRam ++ cbnz r0, .L1647 ++ ldr r3, [r4, #48] ++ ldrh r3, [r3, #16] ++ lsrs r3, r3, #8 ++ lsls r7, r3, #31 ++ and r0, r3, #7 ++ strb r0, [r4, #2233] ++ bmi .L1647 ++ movs r3, #1 ++ strb r3, [r4, #2256] ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl NandcSetMode ++.L1647: ++ ldr r3, [r4, #48] ++ ldrb r3, [r3, #26] @ zero_extendqisi2 ++ strb r3, [r4, #152] ++ bl FlashLoadPhyInfo ++ cmp r0, #0 ++ beq .L1645 ++ ldr r3, [r4, #2260] ++ cmp r3, #0 ++ beq .L1650 ++ movs r0, #1 ++ bl FlashSetInterfaceMode ++ movs r0, #1 ++.L1735: ++ bl NandcSetMode ++ bl FlashLoadPhyInfo ++ cmp r0, #0 ++ beq .L1645 ++ movs r0, #1 ++ bl FlashSetInterfaceMode ++ movs r0, #1 ++ bl NandcSetMode ++ ldr r3, [r4, #48] ++ ldr r0, .L1740+32 ++ ldrh r1, [r3, #14] ++ bl printk ++ bl FlashLoadPhyInfoInRam ++ adds r1, r0, #1 ++ beq .L1624 ++ bl FlashDieInfoInit ++ ldr r3, [r4, #48] ++ ldrb r0, [r3, #19] @ zero_extendqisi2 ++ bl FlashGetReadRetryDefault ++ ldr r3, [r4, #48] ++ ldr r2, .L1740+36 ++ ldrb r1, [r3, #9] @ zero_extendqisi2 ++ ldrh r2, [r2, #3270] ++ addw r2, r2, #4095 ++ cmp r1, r2, asr #12 ++ blt .L1652 ++ ldrh r2, [r3, #14] ++ adds r2, r2, #255 ++ cmp r1, r2, asr #8 ++ bge .L1653 ++ b .L1741 ++.L1742: ++ .align 2 ++.L1740: ++ .word .LANCHOR4 ++ .word .LANCHOR0 ++ .word .LANCHOR0+1216 ++ .word 1446522928 ++ .word .LANCHOR1 ++ .word .LANCHOR1+3288 ++ .word .LANCHOR0+52 ++ .word .LANCHOR1+3412 ++ .word .LC98 ++ .word .LANCHOR2 ++ .word .LC97 ++.L1741: ++.L1652: ++ ldrh r2, [r3, #14] ++ bic r2, r2, #255 ++ strh r2, [r3, #14] @ movhi ++.L1653: ++ ldrb r3, [r4, #2233] @ zero_extendqisi2 ++ tst r3, #6 ++ beq .L1654 ++ bl FlashSavePhyInfo ++ movs r0, #0 ++ bl flash_enter_slc_mode ++ ldr r1, [r5, #1208] ++ movs r0, #0 ++ bl FlashDdrParaScan ++ movs r0, #0 ++ bl flash_exit_slc_mode ++.L1654: ++ bl FlashSavePhyInfo ++.L1645: ++ ldr r7, [r4, #48] ++ mov r8, #0 ++ str r8, [r5, #1200] ++ ldrb r3, [r7, #26] @ zero_extendqisi2 ++ ldrb r1, [r7, #12] @ zero_extendqisi2 ++ ldrh r0, [r7, #10] ++ strb r3, [r4, #152] ++ ldrh r3, [r7, #16] ++ ubfx r2, r3, #7, #1 ++ strb r2, [r4, #44] ++ ubfx r2, r3, #3, #1 ++ strb r2, [r5, #1237] ++ ubfx r2, r3, #4, #1 ++ ubfx r3, r3, #8, #3 ++ strb r2, [r4, #2244] ++ strb r3, [r4, #2233] ++ bl __aeabi_idiv ++ mov r1, r0 ++ ldrb r0, [r7, #18] @ zero_extendqisi2 ++ bl BuildFlashLsbPageTable ++ bl FlashDieInfoInit ++ ldr r3, [r4, #48] ++ ldrh r2, [r3, #16] ++ lsls r2, r2, #25 ++ bpl .L1656 ++ ldrb r0, [r3, #19] @ zero_extendqisi2 ++ ldrb r3, [r4, #1217] @ zero_extendqisi2 ++ strb r0, [r4, #84] ++ strb r3, [r4, #85] ++ ldrb r3, [r4, #1218] @ zero_extendqisi2 ++ strb r3, [r5, #1217] ++ subs r3, r0, #1 ++ cmp r3, #7 ++ bhi .L1657 ++ ldr r3, .L1743 ++ str r3, [r5, #1200] ++ subs r3, r0, #5 ++ cmp r3, #1 ++ bls .L1658 ++ cmp r0, #8 ++ bne .L1659 ++.L1658: ++ movs r3, #1 ++ str r3, [r4, #2308] ++.L1659: ++ cmp r0, #7 ++ ldr r3, .L1743+4 ++ beq .L1660 ++ sub r2, r3, #8 ++ cmp r0, #8 ++ it ne ++ movne r3, r2 ++.L1660: ++ subs r1, r3, #1 ++ movs r2, #0 ++ adds r3, r3, #31 ++.L1662: ++ ldrsb r7, [r1, #1]! ++ cbnz r7, .L1661 ++ adds r2, r2, #1 ++.L1661: ++ cmp r3, r1 ++ bne .L1662 ++ cmp r2, #27 ++ bls .L1656 ++ bl FlashGetReadRetryDefault ++ bl FlashSavePhyInfo ++.L1656: ++ ldr r3, [r4, #2268] ++ cmp r3, r6 ++ bne .L1674 ++ ldrb r2, [r4, #152] @ zero_extendqisi2 ++ cbz r2, .L1674 ++ ldr r2, [r4, #48] ++ movs r1, #0 ++ strb r1, [r2, #18] ++.L1674: ++ ldrb r2, [r4, #2072] @ zero_extendqisi2 ++ cmp r2, #44 ++ bne .L1675 ++ ldrb r2, [r4, #2256] @ zero_extendqisi2 ++ cbz r2, .L1675 ++ cmp r3, r6 ++ bne .L1676 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cbnz r3, .L1675 ++.L1676: ++ movs r3, #0 ++ movs r0, #1 ++ strb r3, [r4, #2256] ++ bl FlashSetInterfaceMode ++ movs r0, #1 ++ bl NandcSetMode ++.L1675: ++ ldrb r3, [r4, #2233] @ zero_extendqisi2 ++ tst r3, #6 ++ beq .L1677 ++ ldrb r2, [r4, #2256] @ zero_extendqisi2 ++ cbnz r2, .L1678 ++ lsls r3, r3, #31 ++ bmi .L1677 ++.L1678: ++ movs r0, #0 ++ bl flash_enter_slc_mode ++ ldr r1, [r5, #1208] ++ movs r0, #0 ++ bl FlashDdrParaScan ++ movs r0, #0 ++ bl flash_exit_slc_mode ++.L1677: ++ ldr r3, [r4, #48] ++ movs r6, #16 ++ ldrb r0, [r3, #20] @ zero_extendqisi2 ++ bl FlashBchSel ++ ldr r0, .L1743+8 ++ bl FlashReadIdbDataRaw ++ ldr r0, .L1743+12 ++ strb r6, [r4, #37] ++ bl FlashTimingCfg ++ ldr r5, [r4, #48] ++ ldrb r2, [r4, #2073] @ zero_extendqisi2 ++ ldrb r3, [r5, #12] @ zero_extendqisi2 ++ ldrh r7, [r5, #14] ++ strh r3, [r4, #132] @ movhi ++ ldrb r3, [r5, #7] @ zero_extendqisi2 ++ str r3, [r4, #128] ++ lsl r3, r2, r6 ++ orr r3, r3, r2, lsl #8 ++ ldrb r2, [r4, #2072] @ zero_extendqisi2 ++ orrs r3, r3, r2 ++ ldrb r2, [r4, #2075] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #24 ++ str r3, [r4, #124] ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ strh r3, [r4, #134] @ movhi ++ ldrb r3, [r5, #13] @ zero_extendqisi2 ++ strh r7, [r4, #138] @ movhi ++ strh r3, [r4, #136] @ movhi ++ ldrh r3, [r5, #10] ++ strh r3, [r4, #140] @ movhi ++ ldrb r1, [r5, #12] @ zero_extendqisi2 ++ ldrh r0, [r5, #10] ++ bl __aeabi_idiv ++ strh r0, [r4, #142] @ movhi ++ ldrb r2, [r5, #9] @ zero_extendqisi2 ++ strh r2, [r4, #144] @ movhi ++ ldrh r1, [r5, #10] ++ ldrb r3, [r5, #9] @ zero_extendqisi2 ++ smulbb r3, r3, r1 ++ mov r1, #512 ++ strh r1, [r4, #148] @ movhi ++ ldrb r1, [r4, #37] @ zero_extendqisi2 ++ uxth r3, r3 ++ strh r1, [r4, #150] @ movhi ++ ldrb r1, [r4, #36] @ zero_extendqisi2 ++ strh r3, [r4, #146] @ movhi ++ cmp r1, #1 ++ bne .L1679 ++ lsls r3, r3, #1 ++ lsrs r1, r7, #1 ++ lsls r2, r2, #1 ++ strb r6, [r4, #37] ++ strh r3, [r4, #146] @ movhi ++ movs r3, #8 ++ strh r1, [r4, #138] @ movhi ++ strh r2, [r4, #144] @ movhi ++ strh r3, [r4, #150] @ movhi ++.L1679: ++ ldrb r0, [r5, #20] @ zero_extendqisi2 ++ bl FlashBchSel ++ bl ftl_flash_suspend ++ movs r0, #0 ++.L1624: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1641: ++ cmp r2, #220 ++ bne .L1643 ++ mov r1, #4096 ++ b .L1734 ++.L1643: ++ cmp r2, #211 ++ itttt eq ++ moveq r2, #4096 ++ strheq r2, [r3, #3426] @ movhi ++ moveq r2, #2 ++ strbeq r2, [r3, #3425] ++ b .L1642 ++.L1650: ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #2233] @ zero_extendqisi2 ++ b .L1735 ++.L1657: ++ sub r3, r0, #17 ++ cmp r3, #2 ++ bhi .L1664 ++ ldr r3, .L1743+16 ++ cmp r0, #19 ++ str r3, [r5, #1200] ++ beq .L1665 ++.L1739: ++ movs r3, #7 ++ b .L1737 ++.L1665: ++ movs r3, #15 ++.L1737: ++ strb r3, [r5, #1217] ++ b .L1656 ++.L1664: ++ cmp r0, #33 ++ beq .L1666 ++ sub r3, r0, #65 ++ cmp r3, #1 ++ bhi .L1667 ++.L1666: ++ ldr r3, .L1743+20 ++ str r3, [r5, #1200] ++ movs r3, #4 ++ strb r3, [r4, #85] ++ b .L1739 ++.L1667: ++ sub r3, r0, #67 ++ uxtb r3, r3 ++ cmp r3, #1 ++ bls .L1668 ++ sub r2, r0, #34 ++ cmp r2, #1 ++ bhi .L1669 ++.L1668: ++ ldr r2, .L1743+20 ++ cmp r0, #35 ++ str r2, [r5, #1200] ++ beq .L1670 ++ cmp r0, #68 ++ beq .L1670 ++ movs r2, #7 ++.L1736: ++ cmp r3, #1 ++ strb r2, [r5, #1217] ++ ite ls ++ movls r3, #4 ++ movhi r3, #5 ++ strb r3, [r4, #85] ++ b .L1656 ++.L1670: ++ movs r2, #17 ++ b .L1736 ++.L1669: ++ cmp r0, #49 ++ bne .L1673 ++ ldr r3, .L1743+24 ++ str r3, [r5, #1200] ++ b .L1656 ++.L1673: ++ cmp r0, #50 ++ ittt eq ++ ldreq r3, .L1743+28 ++ streq r8, [r4, #2252] ++ streq r3, [r5, #1200] ++ b .L1656 ++.L1681: ++ mvn r0, #1 ++ b .L1624 ++.L1637: ++ strb r0, [r5, #1236] ++ b .L1636 ++.L1744: ++ .align 2 ++.L1743: ++ .word HynixReadRetrial ++ .word .LANCHOR0+1244 ++ .word .LANCHOR2+3476 ++ .word 150000 ++ .word MicronReadRetrial ++ .word ToshibaReadRetrial ++ .word SamsungReadRetrial ++ .word samsung_read_retrial ++ .fnend ++ .size FlashInit, .-FlashInit ++ .align 1 ++ .global FlashPageProgMsbFFData ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashPageProgMsbFFData, %function ++FlashPageProgMsbFFData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r6, r0 ++ ldr r5, .L1765 ++ mov r7, r1 ++ mov r4, r2 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cbz r3, .L1746 ++ ldr r3, [r5, #2252] ++ cbnz r3, .L1745 ++.L1746: ++ ldr r3, [r5, #48] ++ ldrb r2, [r3, #19] @ zero_extendqisi2 ++ subs r3, r2, #5 ++ uxtb r3, r3 ++ cmp r3, #30 ++ bhi .L1747 ++ ldr r1, .L1765+4 ++ lsr r3, r1, r3 ++ lsls r3, r3, #31 ++ bmi .L1748 ++.L1752: ++ cmp r2, #68 ++ bne .L1745 ++.L1748: ++ ldr r9, .L1765+8 ++ movw r10, #65535 ++ ldr r8, .L1765+12 ++.L1750: ++ ldr r3, [r5, #48] ++ ldrh r3, [r3, #10] ++ cmp r3, r4 ++ bhi .L1751 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1751: ++ add r3, r9, r4, lsl #1 ++ ldrh r3, [r3, #1220] ++ cmp r3, r10 ++ bne .L1745 ++ mov r2, #32768 ++ movs r1, #255 ++ ldr r0, [r8, #1220] ++ bl ftl_memset ++ ldr r3, [r8, #1220] ++ adds r1, r4, r7 ++ mov r0, r6 ++ adds r4, r4, #1 ++ uxth r4, r4 ++ mov r2, r3 ++ bl FlashProgPage ++ b .L1750 ++.L1747: ++ cmp r2, #50 ++ bne .L1752 ++ b .L1748 ++.L1745: ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1766: ++ .align 2 ++.L1765: ++ .word .LANCHOR0 ++ .word 1073758215 ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .fnend ++ .size FlashPageProgMsbFFData, .-FlashPageProgMsbFFData ++ .align 1 ++ .global FlashReadSlc2KPages ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadSlc2KPages, %function ++FlashReadSlc2KPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1824 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, r0 ++ ldr r7, .L1824+4 ++ mov r8, #0 ++ .pad #28 ++ sub sp, sp, #28 ++ ldrb fp, [r3, #477] @ zero_extendqisi2 ++ str r1, [sp, #8] ++ str r2, [sp, #12] ++.L1768: ++ ldr r3, [sp, #8] ++ cmp r8, r3 ++ bne .L1792 ++ movs r0, #0 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1792: ++ ldr r3, [sp, #8] ++ add r2, sp, #20 ++ ldr r1, [sp, #12] ++ mov r0, r4 ++ sub r3, r3, r8 ++ uxtb r3, r3 ++ str r3, [sp] ++ add r3, sp, #16 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r7, #2234] @ zero_extendqisi2 ++ ldr r3, [sp, #16] ++ cmp r2, r3 ++ bhi .L1769 ++ mov r3, #-1 ++ str r3, [r4] ++.L1770: ++ add r8, r8, #1 ++ adds r4, r4, #36 ++ b .L1768 ++.L1769: ++ add r3, r3, r7 ++ mov r9, #0 ++ ldrb r5, [r3, #2236] @ zero_extendqisi2 ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ bl NandcFlashCs ++.L1771: ++ ldr r1, [sp, #20] ++ mov r0, r5 ++ bl FlashReadCmd ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #12] ++ mov r2, fp ++ movs r1, #0 ++ mov r0, r5 ++ str r3, [sp] ++ ldr r3, [r4, #8] ++ bl NandcXferData ++ ldr r3, .L1824+8 ++ mov r6, r0 ++ ldrb r3, [r3, #1236] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1772 ++.L1775: ++ adds r0, r6, #1 ++ beq .L1773 ++.L1774: ++ cmp r9, #0 ++ beq .L1777 ++.L1776: ++ mov r6, #256 ++.L1777: ++ mov r9, #0 ++.L1778: ++ ldr r3, [r7, #40] ++ mov r0, r5 ++ ldr r1, [sp, #20] ++ add r1, r1, r3 ++ bl FlashReadCmd ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #8] ++ cbz r3, .L1779 ++ add r3, r3, #2048 ++.L1779: ++ ldr r2, [r4, #12] ++ cbz r2, .L1780 ++ adds r2, r2, #8 ++.L1780: ++ str r2, [sp] ++ movs r1, #0 ++ mov r2, fp ++ mov r0, r5 ++ bl NandcXferData ++ ldr r3, .L1824+8 ++ mov r10, r0 ++ ldrb r2, [r3, #1236] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L1781 ++.L1784: ++ cmp r10, #-1 ++ beq .L1782 ++.L1783: ++ cmp r9, #0 ++ beq .L1786 ++.L1785: ++ mov r10, #256 ++.L1786: ++ mov r0, r5 ++ bl NandcFlashDeCs ++ ldrb r3, [r7, #2316] @ zero_extendqisi2 ++ cmp r6, r10 ++ it cc ++ movcc r6, r10 ++ add r3, r3, r3, lsl #1 ++ cmp r6, r3, asr #2 ++ bhi .L1787 ++ movs r3, #0 ++.L1823: ++ str r3, [r4] ++ ldr r3, [r4, #12] ++ cbz r3, .L1788 ++ ldr r2, [r3, #12] ++ adds r2, r2, #1 ++ bne .L1788 ++ ldr r2, [r3, #8] ++ adds r1, r2, #1 ++ bne .L1788 ++ ldr r3, [r3] ++ adds r3, r3, #1 ++ it ne ++ strne r2, [r4] ++.L1788: ++ ldr r3, [r4] ++ adds r2, r3, #1 ++ bne .L1770 ++ ldr r1, [r4, #4] ++ ldrb r2, [r7, #2316] @ zero_extendqisi2 ++ ldr r0, .L1824+12 ++ bl printk ++ ldr r1, [r4, #8] ++ cbz r1, .L1790 ++ movs r3, #8 ++ movs r2, #4 ++ ldr r0, .L1824+16 ++ bl rknand_print_hex ++.L1790: ++ ldr r1, [r4, #12] ++ cmp r1, #0 ++ beq .L1770 ++ movs r3, #4 ++ ldr r0, .L1824+20 ++ mov r2, r3 ++ bl rknand_print_hex ++ b .L1770 ++.L1772: ++ mov r0, r5 ++ bl flash_read_ecc ++ cmp r0, #5 ++ bls .L1775 ++ mov r6, #256 ++ b .L1774 ++.L1773: ++ cmp r9, #10 ++ beq .L1776 ++ add r9, r9, #1 ++ b .L1771 ++.L1781: ++ mov r0, r5 ++ bl flash_read_ecc ++ cmp r0, #5 ++ bls .L1784 ++ mov r10, #256 ++ b .L1783 ++.L1782: ++ cmp r9, #10 ++ beq .L1785 ++ add r9, r9, #1 ++ b .L1778 ++.L1787: ++ mov r3, #256 ++ b .L1823 ++.L1825: ++ .align 2 ++.L1824: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC99 ++ .word .LC100 ++ .word .LC101 ++ .fnend ++ .size FlashReadSlc2KPages, .-FlashReadSlc2KPages ++ .align 1 ++ .global FlashReadPages ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadPages, %function ++FlashReadPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #52 ++ sub sp, sp, #52 ++ ldr r4, .L1917 ++ mov r9, r0 ++ str r1, [sp, #32] ++ ldrb r3, [r4, #36] @ zero_extendqisi2 ++ str r2, [sp, #20] ++ cbnz r3, .L1827 ++ ldr r2, .L1917+4 ++ mov r8, r3 ++ ldr r10, .L1917+12 ++ str r3, [sp, #12] ++ ldrb r2, [r2, #477] @ zero_extendqisi2 ++ str r2, [sp, #28] ++ ldrb r2, [r4, #44] @ zero_extendqisi2 ++ str r2, [sp, #36] ++.L1828: ++ ldr r3, [sp, #12] ++ ldr r2, [sp, #32] ++ cmp r3, r2 ++ bcc .L1866 ++ movs r0, #0 ++ b .L1826 ++.L1827: ++ bl FlashReadSlc2KPages ++.L1826: ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1866: ++ ldr r2, [sp, #12] ++ movs r3, #36 ++ ldr r1, [sp, #20] ++ muls r3, r2, r3 ++ add r7, r9, r3 ++ str r3, [sp, #16] ++ ldr r3, [r7, #4] ++ mov r0, r7 ++ str r3, [sp, #24] ++ ldr r3, [sp, #32] ++ subs r3, r3, r2 ++ add r2, sp, #44 ++ uxtb r3, r3 ++ str r3, [sp] ++ add r3, sp, #40 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r4, #2234] @ zero_extendqisi2 ++ mov r6, r0 ++ ldr r3, [sp, #40] ++ cmp r2, r3 ++ bhi .L1830 ++ ldr r2, [sp, #16] ++ mov r3, #-1 ++ str r3, [r9, r2] ++.L1831: ++ ldr r3, [sp, #12] ++ adds r3, r3, #1 ++ str r3, [sp, #12] ++ b .L1828 ++.L1830: ++ add r3, r3, r4 ++ ldrb r5, [r3, #2236] @ zero_extendqisi2 ++ ldrb r3, [r10, #1237] @ zero_extendqisi2 ++ mov r0, r5 ++ cmp r3, #0 ++ it eq ++ moveq r6, #0 ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #48] ++ ldrb r2, [r3, #19] @ zero_extendqisi2 ++ subs r3, r2, #1 ++ cmp r3, #7 ++ bhi .L1833 ++ subs r2, r2, #7 ++ adds r1, r4, r5 ++ cmp r2, #1 ++ add r2, r4, r5 ++ ldrb r3, [r1, #1228] @ zero_extendqisi2 ++ ldrb r2, [r2, #2068] @ zero_extendqisi2 ++ it ls ++ ldrbls r3, [r1, #1236] @ zero_extendqisi2 ++ cmp r2, r3 ++ beq .L1833 ++ ldr r2, .L1917+8 ++ mov r0, r5 ++ ldrb r1, [r4, #1217] @ zero_extendqisi2 ++ bl HynixSetRRPara ++.L1833: ++ mov r0, r5 ++ bl NandcFlashCs ++ ldr r3, [sp, #20] ++ cmp r3, #1 ++ beq .L1835 ++ ldr r3, [sp, #24] ++ cmp r3, #0 ++ bge .L1836 ++.L1835: ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cbz r3, .L1836 ++ mov r0, r5 ++ bl flash_enter_slc_mode ++.L1843: ++ ldr r1, [sp, #44] ++ adds r0, r1, #1 ++ bne .L1838 ++ cmp r5, #255 ++ beq .L1868 ++.L1838: ++ cbz r6, .L1840 ++ ldr r2, [r4, #40] ++ mov r0, r5 ++ add r2, r2, r1 ++ bl FlashReadDpCmd ++.L1841: ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ cbz r6, .L1839 ++ ldr r1, [sp, #44] ++ mov r0, r5 ++ bl FlashReadDpDataOutCmd ++.L1839: ++ ldr r3, [r7, #12] ++ movs r1, #0 ++ ldr r2, [sp, #28] ++ mov r0, r5 ++ str r3, [sp] ++ ldr r3, [r7, #8] ++ bl NandcXferData ++ ldrb r3, [r4, #44] @ zero_extendqisi2 ++ mov fp, r0 ++ cbz r3, .L1842 ++ cmp r0, #-1 ++ bne .L1842 ++ mov r3, #0 ++ movs r6, #0 ++ strb r3, [r4, #44] ++ b .L1843 ++.L1836: ++ mov r0, r5 ++ bl flash_exit_slc_mode ++ b .L1843 ++.L1840: ++ mov r0, r5 ++ bl FlashReadCmd ++ b .L1841 ++.L1868: ++ movs r6, #0 ++ b .L1839 ++.L1842: ++ cbz r6, .L1844 ++ ldr r3, [r4, #40] ++ mov r0, r5 ++ ldr r1, [sp, #44] ++ add r1, r1, r3 ++ bl FlashReadDpDataOutCmd ++ ldr r3, [sp, #16] ++ movs r1, #0 ++ mov r0, r5 ++ adds r3, r3, #36 ++ add r3, r3, r9 ++ ldr r2, [r3, #12] ++ str r2, [sp] ++ ldr r2, [sp, #28] ++ ldr r3, [r3, #8] ++ bl NandcXferData ++ cmp r0, #-1 ++ mov r8, r0 ++ it eq ++ moveq r6, #0 ++.L1844: ++ mov r0, r5 ++ bl NandcFlashDeCs ++ ldrb r3, [sp, #36] @ zero_extendqisi2 ++ cmp fp, #-1 ++ strb r3, [r4, #44] ++ bne .L1845 ++ ldrb r3, [r4, #2256] @ zero_extendqisi2 ++ cbnz r3, .L1846 ++.L1850: ++ ldr r6, [r10, #1200] ++ cmp r6, #0 ++ bne .L1847 ++ ldr r3, [r7, #12] ++ mov r0, r5 ++ ldr r2, [r7, #8] ++ ldr r1, [sp, #44] ++ bl FlashReadRawPage ++ b .L1916 ++.L1846: ++ ldr r3, [r4, #88] ++ mov r0, r5 ++ ldr r1, [sp, #44] ++ ldr r6, [r3, #304] ++ movs r3, #1 ++ str r3, [sp] ++ ldr r3, [r7, #12] ++ ldr r2, [r7, #8] ++ bl FlashDdrTunningRead ++ cmp r0, #-1 ++ mov fp, r0 ++ beq .L1849 ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ cmp r0, r3, lsr #1 ++ bls .L1869 ++.L1849: ++ ubfx r0, r6, #8, #8 ++ bl NandcSetDdrPara ++ cmp fp, #-1 ++ beq .L1850 ++.L1869: ++ movs r6, #0 ++.L1845: ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp fp, r3, asr #2 ++ bls .L1858 ++ ldr r3, [r10, #1200] ++ cmp r3, #0 ++ bne .L1858 ++ mov fp, #256 ++ b .L1853 ++.L1918: ++ .align 2 ++.L1917: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .word .LANCHOR0+1220 ++ .word .LANCHOR4 ++.L1847: ++ ldr r3, [r7, #12] ++ mov r0, r5 ++ ldr r2, [r7, #8] ++ ldr r1, [sp, #44] ++ blx r6 ++ cmp r0, #-1 ++ mov fp, r0 ++ bne .L1851 ++ ldr r3, [r4, #48] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ subs r3, r3, #1 ++ cmp r3, #7 ++ bhi .L1852 ++ movs r3, #0 ++ ldr r2, .L1919 ++ ldrb r1, [r4, #1217] @ zero_extendqisi2 ++ mov r0, r5 ++ bl HynixSetRRPara ++.L1852: ++ ldr r3, [r7, #12] ++ mov r0, r5 ++ ldr r2, [r7, #8] ++ ldr r1, [sp, #44] ++ bl FlashReadRawPage ++ ldrb r2, [r4, #2316] @ zero_extendqisi2 ++ mov fp, r0 ++ mov r3, r0 ++ ldr r1, [r7, #4] ++ ldr r0, .L1919+4 ++ bl printk ++ cmp fp, #-1 ++ bne .L1851 ++ ldrb r6, [r4, #152] @ zero_extendqisi2 ++ cbz r6, .L1853 ++ ldr r3, [sp, #20] ++ mov r0, r5 ++ cmp r3, #1 ++ beq .L1854 ++ ldr r3, [sp, #24] ++ cmp r3, #0 ++ bge .L1855 ++.L1854: ++ bl flash_enter_slc_mode ++.L1856: ++ ldr r6, [r10, #1200] ++ mov r0, r5 ++ ldr r3, [r7, #12] ++ ldr r2, [r7, #8] ++ ldr r1, [sp, #44] ++ blx r6 ++.L1916: ++ cmp r0, #-1 ++ mov fp, r0 ++ mov r6, #0 ++ bne .L1858 ++.L1853: ++ ldr r3, [sp, #16] ++ str fp, [r9, r3] ++.L1859: ++ ldr r3, [sp, #16] ++ ldr r3, [r9, r3] ++ adds r2, r3, #1 ++ bne .L1861 ++ ldr r1, [r7, #4] ++ ldrb r2, [r4, #2316] @ zero_extendqisi2 ++ ldr r0, .L1919+8 ++ bl printk ++ ldr r1, [r7, #12] ++ cbz r1, .L1861 ++ movs r3, #4 ++ ldr r0, .L1919+12 ++ mov r2, r3 ++ bl rknand_print_hex ++.L1861: ++ cbz r6, .L1863 ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r8, r3, asr #2 ++ bls .L1864 ++ ldr r3, [r10, #1200] ++ cmp r3, #0 ++ it eq ++ moveq r8, #256 ++.L1864: ++ ldr r3, [sp, #16] ++ cmp r8, #-1 ++ add r3, r3, #36 ++ str r8, [r9, r3] ++ beq .L1863 ++ cmp r8, #256 ++ itt ne ++ movne r2, #0 ++ strne r2, [r9, r3] ++.L1863: ++ ldr r3, [sp, #12] ++ add r3, r3, r6 ++ str r3, [sp, #12] ++ ldr r3, [sp, #20] ++ cmp r3, #1 ++ beq .L1865 ++ ldr r3, [sp, #24] ++ cmp r3, #0 ++ bge .L1831 ++.L1865: ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1831 ++ mov r0, r5 ++ bl flash_exit_slc_mode ++ b .L1831 ++.L1855: ++ bl flash_exit_slc_mode ++ b .L1856 ++.L1851: ++ movs r6, #0 ++.L1858: ++ cmp fp, #256 ++ beq .L1853 ++ ldr r2, [sp, #16] ++ movs r3, #0 ++ str r3, [r9, r2] ++ b .L1859 ++.L1920: ++ .align 2 ++.L1919: ++ .word .LANCHOR0+1220 ++ .word .LC102 ++ .word .LC99 ++ .word .LC101 ++ .fnend ++ .size FlashReadPages, .-FlashReadPages ++ .align 1 ++ .global FlashLoadFactorBbt ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashLoadFactorBbt, %function ++FlashLoadFactorBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r2, #16 ++ ldr r7, .L1932 ++ .pad #60 ++ sub sp, sp, #60 ++ movs r1, #0 ++ mov fp, #-1 ++ ldr r4, .L1932+4 ++ movs r5, #0 ++ ldrh r3, [r7, #136] ++ mov r10, r5 ++ ldrh r6, [r7, #138] ++ mov r8, r7 ++ addw r0, r4, #1238 ++ mov r9, r4 ++ smulbb r6, r6, r3 ++ bl ftl_memset ++ ldr r3, [r4, #1224] ++ uxth r6, r6 ++ str r5, [sp, #28] ++ str r3, [sp, #32] ++ add r3, r6, fp ++ uxth r3, r3 ++ str r3, [sp, #8] ++.L1922: ++ ldrb r3, [r8, #2234] @ zero_extendqisi2 ++ uxtb r7, r5 ++ cmp r3, r7 ++ bhi .L1928 ++ mov r0, fp ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1928: ++ ldr r4, [sp, #8] ++ mul r3, r7, r6 ++ sub r2, r6, #12 ++ str r2, [sp, #4] ++.L1923: ++ ldr r2, [sp, #4] ++ cmp r4, r2 ++ ble .L1925 ++ adds r2, r4, r3 ++ add r0, sp, #20 ++ lsls r2, r2, #10 ++ str r3, [sp, #12] ++ str r2, [sp, #24] ++ movs r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [sp, #20] ++ ldr r3, [sp, #12] ++ adds r2, r2, #1 ++ beq .L1924 ++ ldr r2, [r9, #1224] ++ ldrh r1, [r2] ++ movw r2, #61664 ++ cmp r1, r2 ++ bne .L1924 ++ add r10, r10, #1 ++ mov r1, r7 ++ uxth r10, r10 ++ add r7, r9, r7, lsl #1 ++ ldr r0, .L1932+8 ++ mov r2, r4 ++ bl printk ++ strh r4, [r7, #1238] @ movhi ++.L1925: ++ ldrb r3, [r8, #2234] @ zero_extendqisi2 ++ adds r5, r5, #1 ++ cmp r3, r10 ++ it eq ++ moveq fp, #0 ++ b .L1922 ++.L1924: ++ subs r4, r4, #1 ++ uxth r4, r4 ++ b .L1923 ++.L1933: ++ .align 2 ++.L1932: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC103 ++ .fnend ++ .size FlashLoadFactorBbt, .-FlashLoadFactorBbt ++ .align 1 ++ .global FlashProgSlc2KPages ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashProgSlc2KPages, %function ++FlashProgSlc2KPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1961 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r1 ++ ldr r8, .L1961+20 ++ .pad #60 ++ sub sp, sp, #60 ++ mov r9, r2 ++ mov r4, r0 ++ ldrb fp, [r3, #477] @ zero_extendqisi2 ++ mov r6, r0 ++ movs r7, #0 ++.L1935: ++ cmp r7, r10 ++ bne .L1941 ++ ldr r8, .L1961+24 ++ mov r10, #0 ++ ldr fp, .L1961+28 ++.L1942: ++ cmp r7, r10 ++ bne .L1949 ++ movs r0, #0 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1941: ++ sub r3, r10, r7 ++ add r2, sp, #12 ++ uxtb r3, r3 ++ mov r1, r9 ++ mov r0, r6 ++ str r3, [sp] ++ add r3, sp, #16 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r8, #2234] @ zero_extendqisi2 ++ ldr r3, [sp, #16] ++ cmp r2, r3 ++ bhi .L1936 ++ mov r3, #-1 ++ str r3, [r6] ++.L1937: ++ adds r7, r7, #1 ++ adds r6, r6, #36 ++ b .L1935 ++.L1936: ++ add r3, r3, r8 ++ ldrb r5, [r3, #2236] @ zero_extendqisi2 ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ bl NandcFlashCs ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashProgFirstCmd ++ ldr r3, [r6, #12] ++ mov r2, fp ++ movs r1, #1 ++ mov r0, r5 ++ str r3, [sp] ++ ldr r3, [r6, #8] ++ bl NandcXferData ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashProgSecondCmd ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashReadStatus ++ sbfx r0, r0, #0, #1 ++ ldr r1, [sp, #12] ++ str r0, [r6] ++ mov r0, r5 ++ ldr r3, [r8, #40] ++ add r1, r1, r3 ++ bl FlashProgFirstCmd ++ ldr r3, [r6, #8] ++ cbz r3, .L1938 ++ add r3, r3, #2048 ++.L1938: ++ ldr r2, [r6, #12] ++ cbz r2, .L1939 ++ adds r2, r2, #8 ++.L1939: ++ str r2, [sp] ++ movs r1, #1 ++ mov r2, fp ++ mov r0, r5 ++ bl NandcXferData ++ ldr r3, [r8, #40] ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ add r1, r1, r3 ++ bl FlashProgSecondCmd ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashReadStatus ++ lsls r2, r0, #31 ++ mov r0, r5 ++ itt mi ++ movmi r3, #-1 ++ strmi r3, [r6] ++ bl NandcFlashDeCs ++ b .L1937 ++.L1949: ++ ldr r3, [r4] ++ adds r3, r3, #1 ++ bne .L1943 ++ ldr r1, [r4, #4] ++ ldr r0, .L1961+4 ++ bl printk ++.L1944: ++ add r10, r10, #1 ++ adds r4, r4, #36 ++ b .L1942 ++.L1943: ++ sub r3, r7, r10 ++ add r2, sp, #12 ++ uxtb r3, r3 ++ mov r1, r9 ++ mov r0, r4 ++ str r3, [sp] ++ add r3, sp, #16 ++ bl LogAddr2PhyAddr ++ ldr r2, [r8, #1228] ++ movs r3, #0 ++ mov r6, r4 ++ add r5, sp, #20 ++ str r3, [r2] ++ ldr r2, [r8, #1232] ++ str r3, [r2] ++ ldmia r6!, {r0, r1, r2, r3} ++ stmia r5!, {r0, r1, r2, r3} ++ ldmia r6!, {r0, r1, r2, r3} ++ stmia r5!, {r0, r1, r2, r3} ++ mov r2, r9 ++ ldr r3, [r6] ++ movs r1, #1 ++ add r0, sp, #20 ++ str r3, [r5] ++ ldr r3, [r8, #1228] ++ str r3, [sp, #28] ++ ldr r3, [r8, #1232] ++ str r3, [sp, #32] ++ bl FlashReadPages ++ ldr r5, [sp, #20] ++ adds r3, r5, #1 ++ bne .L1945 ++ ldr r1, [r4, #4] ++ ldr r0, .L1961+8 ++ bl printk ++ str r5, [r4] ++.L1945: ++ ldr r5, [sp, #20] ++ cmp r5, #256 ++ bne .L1946 ++ ldr r1, [r4, #4] ++ ldr r0, .L1961+12 ++ bl printk ++ str r5, [r4] ++.L1946: ++ ldr r3, [r4, #12] ++ cbz r3, .L1947 ++ ldr r2, [r3] ++ ldr r3, [r8, #1232] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L1947 ++ ldr r1, [r4, #4] ++ ldr r0, .L1961+16 ++ bl printk ++ mov r3, #-1 ++ str r3, [r4] ++.L1947: ++ ldr r3, [r4, #8] ++ cmp r3, #0 ++ beq .L1944 ++ ldr r2, [r3] ++ ldr r3, [r8, #1228] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L1944 ++ ldr r1, [r4, #4] ++ mov r0, fp ++ bl printk ++ mov r3, #-1 ++ str r3, [r4] ++ b .L1944 ++.L1962: ++ .align 2 ++.L1961: ++ .word .LANCHOR1 ++ .word .LC104 ++ .word .LC105 ++ .word .LC106 ++ .word .LC107 ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC108 ++ .fnend ++ .size FlashProgSlc2KPages, .-FlashProgSlc2KPages ++ .align 1 ++ .global FtlLoadFactoryBbt ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlLoadFactoryBbt, %function ++FtlLoadFactoryBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ movs r6, #0 ++ ldr r3, .L1973 ++ ldr r7, .L1973+4 ++ ldr r5, .L1973+8 ++ ldr r2, [r3, #3316] ++ ldr r9, [r3, #3340] ++ subw r8, r7, #2466 ++ mov r10, r8 ++ add fp, r5, #1256 ++ str r2, [r5, #1264] ++ str r9, [r5, #1268] ++.L1964: ++ ldrh r3, [r8, #2346] ++ cmp r6, r3 ++ bcc .L1969 ++ movs r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1969: ++ ldrh r4, [r8, #2388] ++ movw r3, #65535 ++ strh r3, [r7, #2]! @ movhi ++ movw r3, #61664 ++ subs r4, r4, #1 ++ uxth r4, r4 ++.L1965: ++ ldrh r2, [r10, #2388] ++ sub r1, r2, #16 ++ cmp r4, r1 ++ ble .L1967 ++ mla r2, r6, r2, r4 ++ str r3, [sp, #4] ++ mov r0, fp ++ lsls r2, r2, #10 ++ str r2, [r5, #1260] ++ movs r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [r5, #1256] ++ ldr r3, [sp, #4] ++ adds r2, r2, #1 ++ beq .L1966 ++ ldrh r2, [r9] ++ cmp r2, r3 ++ bne .L1966 ++ strh r4, [r7] @ movhi ++.L1967: ++ adds r6, r6, #1 ++ b .L1964 ++.L1966: ++ subs r4, r4, #1 ++ uxth r4, r4 ++ b .L1965 ++.L1974: ++ .align 2 ++.L1973: ++ .word .LANCHOR2 ++ .word .LANCHOR0+2466 ++ .word .LANCHOR4 ++ .fnend ++ .size FtlLoadFactoryBbt, .-FtlLoadFactoryBbt ++ .align 1 ++ .global FtlGetLastWrittenPage ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGetLastWrittenPage, %function ++FtlGetLastWrittenPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 104 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1986 ++ cmp r1, #1 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ lsl r8, r0, #10 ++ .pad #104 ++ sub sp, sp, #104 ++ mov r2, r1 ++ mov r7, r1 ++ it eq ++ ldrheq r5, [r3, #2392] ++ mov r6, #0 ++ it ne ++ ldrhne r5, [r3, #2390] ++ add r3, sp, #40 ++ str r3, [sp, #16] ++ movs r1, #1 ++ add r0, sp, #4 ++ str r6, [sp, #12] ++ subs r5, r5, #1 ++ sxth r5, r5 ++ orr r3, r5, r8 ++ str r3, [sp, #8] ++ bl FlashReadPages ++ ldr r3, [sp, #40] ++ adds r3, r3, #1 ++ bne .L1978 ++.L1979: ++ cmp r6, r5 ++ ble .L1982 ++.L1978: ++ mov r0, r5 ++ add sp, sp, #104 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1982: ++ adds r3, r6, r5 ++ mov r2, r7 ++ add r3, r3, r3, lsr #31 ++ movs r1, #1 ++ add r0, sp, #4 ++ asrs r4, r3, #1 ++ sxth r3, r4 ++ orr r3, r3, r8 ++ str r3, [sp, #8] ++ bl FlashReadPages ++ ldr r3, [sp, #40] ++ adds r3, r3, #1 ++ bne .L1980 ++ ldr r3, [sp, #44] ++ adds r3, r3, #1 ++ bne .L1980 ++ ldr r3, [sp, #4] ++ adds r3, r3, #1 ++ beq .L1980 ++ subs r4, r4, #1 ++ sxth r5, r4 ++ b .L1979 ++.L1980: ++ adds r4, r4, #1 ++ sxth r6, r4 ++ b .L1979 ++.L1987: ++ .align 2 ++.L1986: ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGetLastWrittenPage, .-FtlGetLastWrittenPage ++ .align 1 ++ .global FtlLoadBbt ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlLoadBbt, %function ++FtlLoadBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ movw r10, #61649 ++ ldr r8, .L2016+16 ++ ldr r5, .L2016 ++ ldr r3, [r8, #3316] ++ ldr r7, [r8, #3340] ++ ldr r4, .L2016+4 ++ add r9, r5, #1256 ++ str r3, [r5, #1264] ++ str r7, [r5, #1268] ++ bl FtlBbtMemInit ++ ldrh r6, [r4, #2388] ++ subs r6, r6, #1 ++ uxth r6, r6 ++.L1989: ++ ldrh r3, [r4, #2388] ++ subs r3, r3, #48 ++ cmp r6, r3 ++ ble .L1992 ++ lsls r3, r6, #10 ++ movs r2, #1 ++ mov r1, r2 ++ mov r0, r9 ++ str r3, [r5, #1260] ++ bl FlashReadPages ++ ldr r3, [r5, #1256] ++ adds r3, r3, #1 ++ bne .L1990 ++ ldr r3, [r5, #1260] ++ movs r2, #1 ++ mov r1, r2 ++ mov r0, r9 ++ adds r3, r3, #1 ++ str r3, [r5, #1260] ++ bl FlashReadPages ++.L1990: ++ ldr r3, [r5, #1256] ++ adds r3, r3, #1 ++ beq .L1991 ++ ldrh r3, [r7] ++ cmp r3, r10 ++ bne .L1991 ++ ldr r3, [r7, #4] ++ strh r6, [r4, #2456] @ movhi ++ str r3, [r4, #2464] ++ ldrh r3, [r7, #8] ++ strh r3, [r4, #2460] @ movhi ++.L1992: ++ ldrh r3, [r4, #2456] ++ movw r2, #65535 ++ cmp r3, r2 ++ beq .L2006 ++ ldrh r3, [r4, #2460] ++ cmp r3, r2 ++ beq .L1996 ++ lsls r3, r3, #10 ++ movs r2, #1 ++ mov r1, r2 ++ ldr r0, .L2016+8 ++ str r3, [r5, #1260] ++ bl FlashReadPages ++ ldr r3, [r5, #1256] ++ adds r3, r3, #1 ++ beq .L1996 ++ ldrh r2, [r7] ++ movw r3, #61649 ++ cmp r2, r3 ++ bne .L1996 ++ ldr r3, [r7, #4] ++ ldr r2, [r4, #2464] ++ cmp r3, r2 ++ bls .L1996 ++ ldrh r2, [r4, #2460] ++ str r3, [r4, #2464] ++ ldrh r3, [r7, #8] ++ strh r2, [r4, #2456] @ movhi ++ strh r3, [r4, #2460] @ movhi ++.L1996: ++ ldr r9, .L2016+8 ++ movs r1, #1 ++ ldrh r0, [r4, #2456] ++ movw r10, #61649 ++ bl FtlGetLastWrittenPage ++ sxth r6, r0 ++ adds r0, r0, #1 ++ strh r0, [r4, #2458] @ movhi ++.L1998: ++ cmp r6, #0 ++ blt .L2003 ++ ldrh r3, [r4, #2456] ++ movs r2, #1 ++ mov r1, r2 ++ mov r0, r9 ++ orr r3, r6, r3, lsl #10 ++ str r3, [r5, #1260] ++ ldr r3, [r8, #3316] ++ str r3, [r5, #1264] ++ bl FlashReadPages ++ ldr r3, [r5, #1256] ++ adds r3, r3, #1 ++ beq .L1999 ++ ldrh r3, [r7] ++ cmp r3, r10 ++ bne .L1999 ++.L2003: ++ ldrh r3, [r7, #10] ++ ldrh r0, [r7, #12] ++ strh r3, [r4, #2462] @ movhi ++ movw r3, #65535 ++ cmp r0, r3 ++ bne .L2000 ++.L2001: ++ ldr r7, .L2016+12 ++ movs r6, #0 ++.L2004: ++ ldrh r3, [r4, #2346] ++ cmp r6, r3 ++ bcc .L2005 ++ movs r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1991: ++ subs r6, r6, #1 ++ uxth r6, r6 ++ b .L1989 ++.L1999: ++ subs r6, r6, #1 ++ sxth r6, r6 ++ b .L1998 ++.L2000: ++ ldr r2, [r4, #2320] ++ cmp r0, r2 ++ beq .L2001 ++ ldrh r3, [r4, #2334] ++ lsrs r3, r3, #2 ++ cmp r2, r3 ++ bcs .L2001 ++ cmp r0, r3 ++ bcs .L2001 ++ bl FtlSysBlkNumInit ++ b .L2001 ++.L2005: ++ ldrh r2, [r8, #3404] ++ ldr r1, [r5, #1264] ++ ldr r0, [r7, #4]! ++ lsls r2, r2, #2 ++ mla r1, r6, r2, r1 ++ adds r6, r6, #1 ++ bl ftl_memcpy ++ b .L2004 ++.L2006: ++ mov r0, #-1 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2017: ++ .align 2 ++.L2016: ++ .word .LANCHOR4 ++ .word .LANCHOR0 ++ .word .LANCHOR4+1256 ++ .word .LANCHOR0+2480 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlLoadBbt, .-FtlLoadBbt ++ .align 1 ++ .global FtlScanSysBlk ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlScanSysBlk, %function ++FtlScanSysBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r6, #0 ++ ldr r5, .L2098 ++ mov r1, r6 ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, .L2098+4 ++ ldr r2, [r5, #2420] ++ mov fp, r5 ++ strh r6, [r5, #2438] @ movhi ++ ldr r0, [r4, #3396] ++ strh r6, [r4, #3452] @ movhi ++ lsls r2, r2, #2 ++ bl ftl_memset ++ ldr r2, [r5, #2420] ++ mov r1, r6 ++ ldr r0, [r4, #3368] ++ lsls r2, r2, #1 ++ bl ftl_memset ++ ldrh r2, [r5, #2412] ++ mov r1, r6 ++ ldr r0, [r4, #3380] ++ lsls r2, r2, #2 ++ bl ftl_memset ++ ldrh r2, [r5, #2412] ++ mov r1, r6 ++ ldr r0, [r5, #2440] ++ mov r6, r5 ++ lsls r2, r2, #1 ++ bl ftl_memset ++ movs r2, #16 ++ movs r1, #255 ++ add r0, r4, #540 ++ bl ftl_memset ++ ldrh r3, [r5, #2332] ++ str r3, [sp, #4] ++.L2019: ++ ldrh r3, [r6, #2334] ++ ldr r2, [sp, #4] ++ cmp r3, r2 ++ bls .L2060 ++ ldr r2, [r4, #1148] ++ movs r7, #0 ++ ldrh r8, [r6, #2324] ++ mov r10, #36 ++ ldr r9, [r4, #3304] ++ str r2, [sp, #8] ++ ldr r3, [r4, #1144] ++ ldrh r2, [r6, #2402] ++ str r7, [sp] ++ b .L2061 ++.L2022: ++ str r3, [sp, #16] ++ ldr r3, .L2098+8 ++ ldr r1, [sp, #4] ++ str r2, [sp, #20] ++ ldrb r0, [r3, r7] @ zero_extendqisi2 ++ bl V2P_block ++ str r0, [sp, #12] ++ bl FtlBbmIsBadBlock ++ ldr r3, [sp, #16] ++ ldr r2, [sp, #20] ++ cbnz r0, .L2020 ++ ldr r1, [sp] ++ mla r0, r10, r1, r9 ++ ldr r1, [sp, #12] ++ lsls r1, r1, #10 ++ str r3, [r0, #8] ++ str r1, [r0, #4] ++ ldr r1, [sp] ++ muls r1, r2, r1 ++ it mi ++ addmi r1, r1, #3 ++ bic ip, r1, #3 ++ ldr r1, [sp, #8] ++ add r1, r1, ip ++ str r1, [r0, #12] ++ ldr r1, [sp] ++ adds r1, r1, #1 ++ uxth r1, r1 ++ str r1, [sp] ++.L2020: ++ adds r7, r7, #1 ++.L2061: ++ uxth r1, r7 ++ cmp r8, r1 ++ bhi .L2022 ++ ldr r3, [sp] ++ cbnz r3, .L2023 ++.L2059: ++ ldr r3, [sp, #4] ++ adds r3, r3, #1 ++ uxth r3, r3 ++ str r3, [sp, #4] ++ b .L2019 ++.L2023: ++ movs r2, #1 ++ ldr r1, [sp] ++ mov r0, r9 ++ bl FlashReadPages ++ movs r3, #0 ++.L2096: ++ str r3, [sp, #8] ++ ldr r2, [sp] ++ ldrh r3, [sp, #8] ++ cmp r2, r3 ++ bls .L2059 ++ ldr r3, [sp, #8] ++ movs r2, #36 ++ mul r9, r2, r3 ++ ldr r3, [r4, #3304] ++ add r2, r3, r9 ++ ldr r3, [r3, r9] ++ ldr r7, [r2, #4] ++ ldr r8, [r2, #12] ++ adds r3, r3, #1 ++ ubfx r7, r7, #10, #16 ++ bne .L2027 ++ mov r10, #16 ++.L2029: ++ ldr r0, [r4, #3304] ++ movs r2, #1 ++ mov r1, r2 ++ add r0, r0, r9 ++ ldr r3, [r0, #4] ++ adds r3, r3, #1 ++ str r3, [r0, #4] ++ bl FlashReadPages ++ ldrh r3, [r8] ++ movw r2, #65535 ++ cmp r3, r2 ++ ldr r3, [r4, #3304] ++ bne .L2026 ++ mov r2, #-1 ++ str r2, [r3, r9] ++ ldr r3, [r4, #3304] ++ ldr r3, [r3, r9] ++ cmp r3, r2 ++ beq .L2028 ++.L2027: ++ ldr r2, [r4, #508] ++ ldr r3, [r8, #4] ++ adds r1, r2, #1 ++ beq .L2030 ++ cmp r2, r3 ++ bhi .L2031 ++.L2030: ++ adds r2, r3, #1 ++ itt ne ++ addne r2, r3, #1 ++ strne r2, [r4, #508] ++.L2031: ++ ldrh r2, [r8] ++ movw r1, #61604 ++ cmp r2, r1 ++ beq .L2033 ++ bhi .L2034 ++ movw r3, #61574 ++ cmp r2, r3 ++ beq .L2035 ++.L2032: ++ ldr r3, [sp, #8] ++ adds r3, r3, #1 ++ b .L2096 ++.L2026: ++ ldr r3, [r3, r9] ++ adds r3, r3, #1 ++ bne .L2027 ++ add r10, r10, #-1 ++ uxth r10, r10 ++ cmp r10, #0 ++ bne .L2029 ++.L2028: ++ ldrb r1, [r6, #152] @ zero_extendqisi2 ++ cbnz r1, .L2097 ++.L2057: ++ mov r0, r7 ++ bl FtlFreeSysBlkQueueIn ++ b .L2032 ++.L2034: ++ movw r3, #61634 ++ cmp r2, r3 ++ beq .L2036 ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L2032 ++.L2097: ++ movs r1, #0 ++ b .L2057 ++.L2036: ++ ldr r1, [r5, #2420] ++ ldrh r0, [r4, #3452] ++ ldr r9, [r4, #3396] ++ uxth ip, r1 ++ add r3, ip, #-1 ++ sub ip, ip, r0 ++ add ip, ip, #-1 ++ sxth r3, r3 ++ sxth ip, ip ++.L2038: ++ cmp r3, ip ++ bgt .L2044 ++ cmp r3, #0 ++ bge .L2074 ++ b .L2032 ++.L2044: ++ ldr r2, [r8, #4] ++ lsl r10, r3, #2 ++ mov lr, r2 ++ ldr r2, [r9, r3, lsl #2] ++ cmp lr, r2 ++ bls .L2039 ++ ldr r2, [r9] ++ cbnz r2, .L2040 ++ cmp r1, r0 ++ itt ne ++ addne r0, r0, #1 ++ strhne r0, [r4, #3452] @ movhi ++.L2040: ++ uxth ip, r3 ++ movs r2, #0 ++.L2041: ++ uxth r0, r2 ++ sxth r1, r2 ++ cmp r0, ip ++ bcc .L2042 ++ ldr r2, [r4, #3396] ++ cmp r3, #0 ++ ldr r1, [r8, #4] ++ str r1, [r2, r10] ++ ldr r2, [r4, #3368] ++ strh r7, [r2, r3, lsl #1] @ movhi ++ blt .L2032 ++ ldrh r0, [r4, #3452] ++ ldr r2, [r5, #2420] ++ subs r2, r2, r0 ++ subs r2, r2, #1 ++ sxth r2, r2 ++ cmp r3, r2 ++ bgt .L2032 ++.L2074: ++ ldr r2, [r4, #3396] ++ adds r0, r0, #1 ++ ldr r1, [r8, #4] ++ strh r0, [r4, #3452] @ movhi ++ str r1, [r2, r3, lsl #2] ++ ldr r2, [r4, #3368] ++.L2094: ++ strh r7, [r2, r3, lsl #1] @ movhi ++ b .L2032 ++.L2042: ++ ldr r0, [r4, #3396] ++ adds r2, r2, #1 ++ add lr, r0, r1, lsl #2 ++ ldr lr, [lr, #4] ++ str lr, [r0, r1, lsl #2] ++ ldr r0, [r4, #3368] ++ add lr, r0, r1, lsl #1 ++ ldrh lr, [lr, #2] ++ strh lr, [r0, r1, lsl #1] @ movhi ++ b .L2041 ++.L2039: ++ subs r3, r3, #1 ++ sxth r3, r3 ++ b .L2038 ++.L2099: ++ .align 2 ++.L2098: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+2350 ++.L2035: ++ ldrh lr, [r5, #2412] ++ ldrh r0, [r5, #2438] ++ ldr r9, [r4, #3380] ++ add ip, lr, #-1 ++ sxth r3, ip ++ sub ip, ip, r0 ++.L2047: ++ cmp r3, ip ++ ble .L2052 ++ ldr r2, [r8, #4] ++ lsl r10, r3, #2 ++ ldr r1, [r9, r3, lsl #2] ++ cmp r2, r1 ++ bls .L2048 ++ ldr r2, [r9] ++ cbnz r2, .L2049 ++ cmp lr, r0 ++ itt ne ++ addne r0, r0, #1 ++ strhne r0, [r6, #2438] @ movhi ++.L2049: ++ uxth ip, r3 ++ movs r2, #0 ++.L2050: ++ uxth r0, r2 ++ sxth r1, r2 ++ cmp r0, ip ++ bcc .L2051 ++ ldr r2, [r4, #3380] ++ ldr r1, [r8, #4] ++ str r1, [r2, r10] ++ ldr r2, [r6, #2440] ++ strh r7, [r2, r3, lsl #1] @ movhi ++.L2052: ++ cmp r3, #0 ++ blt .L2032 ++ ldrh r2, [r6, #2412] ++ ldrh r1, [r6, #2438] ++ subs r2, r2, #1 ++ subs r2, r2, r1 ++ sxth r2, r2 ++ cmp r3, r2 ++ bgt .L2032 ++ adds r1, r1, #1 ++ ldr r2, [r4, #3380] ++ strh r1, [r6, #2438] @ movhi ++ ldr r1, [r8, #4] ++ str r1, [r2, r3, lsl #2] ++ ldr r2, [r6, #2440] ++ b .L2094 ++.L2051: ++ ldr r0, [r4, #3380] ++ adds r2, r2, #1 ++ add lr, r0, r1, lsl #2 ++ ldr lr, [lr, #4] ++ str lr, [r0, r1, lsl #2] ++ ldr r0, [r6, #2440] ++ add lr, r0, r1, lsl #1 ++ ldrh lr, [lr, #2] ++ strh lr, [r0, r1, lsl #1] @ movhi ++ b .L2050 ++.L2048: ++ subs r3, r3, #1 ++ sxth r3, r3 ++ b .L2047 ++.L2033: ++ ldrh r1, [r4, #540] ++ movw r2, #65535 ++ cmp r1, r2 ++ bne .L2054 ++ strh r7, [r4, #540] @ movhi ++.L2095: ++ str r3, [r4, #548] ++ b .L2032 ++.L2054: ++ ldrh r0, [r4, #544] ++ cmp r0, r2 ++ beq .L2055 ++ movs r1, #1 ++ bl FtlFreeSysBlkQueueIn ++.L2055: ++ ldr r2, [r4, #548] ++ ldr r3, [r8, #4] ++ cmp r2, r3 ++ bcs .L2056 ++ ldrh r3, [r4, #540] ++ strh r7, [r4, #540] @ movhi ++ strh r3, [r4, #544] @ movhi ++ ldr r3, [r8, #4] ++ b .L2095 ++.L2056: ++ strh r7, [r4, #544] @ movhi ++ b .L2032 ++.L2060: ++ ldr r1, [r4, #3368] ++ ldrh r3, [r1] ++ cbz r3, .L2062 ++.L2065: ++ ldr r1, [r5, #2440] ++ ldrh r2, [r1] ++ cbz r2, .L2063 ++.L2085: ++ movs r0, #0 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2062: ++ ldrh r2, [r4, #3452] ++ cmp r2, #0 ++ beq .L2065 ++ ldr r0, [r6, #2420] ++.L2066: ++ sxth r2, r3 ++ cmp r2, r0 ++ bcs .L2065 ++ ldrh r6, [r1, r2, lsl #1] ++ adds r3, r3, #1 ++ cmp r6, #0 ++ beq .L2066 ++ mov r3, r2 ++ movs r7, #0 ++.L2067: ++ ldr r1, [fp, #2420] ++ cmp r3, r1 ++ bcs .L2065 ++ ldr r1, [r4, #3368] ++ subs r0, r3, r2 ++ ldrh r6, [r1, r3, lsl #1] ++ strh r6, [r1, r0, lsl #1] @ movhi ++ ldr r1, [r4, #3396] ++ ldr r6, [r1, r3, lsl #2] ++ str r6, [r1, r0, lsl #2] ++ ldr r1, [r4, #3368] ++ strh r7, [r1, r3, lsl #1] @ movhi ++ adds r3, r3, #1 ++ sxth r3, r3 ++ b .L2067 ++.L2063: ++ ldrh r3, [r5, #2438] ++ cmp r3, #0 ++ beq .L2085 ++ ldrh r0, [r5, #2412] ++.L2070: ++ sxth r3, r2 ++ cmp r3, r0 ++ mov r5, r3 ++ bge .L2085 ++ ldrh r6, [r1, r3, lsl #1] ++ adds r2, r2, #1 ++ cmp r6, #0 ++ beq .L2070 ++ movs r0, #0 ++.L2071: ++ ldrh r2, [fp, #2412] ++ cmp r3, r2 ++ bge .L2085 ++ ldr r2, [fp, #2440] ++ subs r1, r3, r5 ++ ldrh r6, [r2, r3, lsl #1] ++ strh r6, [r2, r1, lsl #1] @ movhi ++ ldr r2, [r4, #3380] ++ ldr r6, [r2, r3, lsl #2] ++ str r6, [r2, r1, lsl #2] ++ ldr r2, [fp, #2440] ++ strh r0, [r2, r3, lsl #1] @ movhi ++ adds r3, r3, #1 ++ sxth r3, r3 ++ b .L2071 ++ .fnend ++ .size FtlScanSysBlk, .-FtlScanSysBlk ++ .align 1 ++ .global FtlLoadSysInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlLoadSysInfo, %function ++FtlLoadSysInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r1, #0 ++ ldr r4, .L2128 ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r5, .L2128+4 ++ ldr r3, [r4, #3316] ++ ldr r6, .L2128+8 ++ ldrh r2, [r5, #2332] ++ ldr r0, [r4, #300] ++ str r3, [r6, #1264] ++ ldr r3, [r4, #3340] ++ lsls r2, r2, #1 ++ str r3, [r6, #1268] ++ bl ftl_memset ++ ldrh r0, [r4, #540] ++ movw r3, #65535 ++ cmp r0, r3 ++ bne .L2101 ++.L2112: ++ mov r0, #-1 ++.L2100: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2101: ++ movs r1, #1 ++ ldr fp, .L2128+36 ++ bl FtlGetLastWrittenPage ++ ldrsh r9, [r4, #540] ++ add r10, r6, #1256 ++ sxth r7, r0 ++ adds r0, r0, #1 ++ strh r0, [r4, #542] @ movhi ++.L2103: ++ cmp r7, #0 ++ blt .L2111 ++ orr r3, r7, r9, lsl #10 ++ movs r2, #1 ++ mov r1, r2 ++ str r3, [r6, #1260] ++ mov r0, r10 ++ ldr r3, [r4, #3316] ++ str r3, [r6, #1264] ++ bl FlashReadPages ++ ldrb r3, [r5, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2104 ++ ldr r8, [r6, #1268] ++ ldr r3, [r8, #12] ++ str r3, [sp, #28] ++ cbz r3, .L2104 ++ ldr r2, [r6, #1264] ++ ldrh r1, [r5, #2400] ++ mov r0, r2 ++ str r2, [sp, #24] ++ bl js_hash ++ ldr r3, [sp, #28] ++ cmp r3, r0 ++ beq .L2104 ++ cbnz r7, .L2105 ++ ldrh r1, [r4, #544] ++ ldr r2, [sp, #24] ++ cmp r9, r1 ++ beq .L2105 ++ ldr r2, [r2] ++ mov r0, fp ++ str r3, [sp, #12] ++ ldrh r1, [r4, #540] ++ str r2, [sp, #16] ++ ldr r3, [r8, #8] ++ ldr r2, [r6, #1256] ++ str r3, [sp, #8] ++ ldr r3, [r8, #4] ++ str r3, [sp, #4] ++ ldr r3, [r8] ++ str r3, [sp] ++ ldr r3, [r6, #1260] ++ bl printk ++ ldrsh r9, [r4, #544] ++ ldrh r7, [r5, #2392] ++.L2107: ++ subs r7, r7, #1 ++ sxth r7, r7 ++ b .L2103 ++.L2105: ++ mov r3, #-1 ++ str r3, [r6, #1256] ++.L2104: ++ ldr r3, [r6, #1256] ++ adds r3, r3, #1 ++ beq .L2107 ++ ldr r3, [r4, #3316] ++ ldr r2, .L2128+12 ++ ldr r3, [r3] ++ cmp r3, r2 ++ bne .L2107 ++ ldr r3, [r4, #3340] ++ ldrh r2, [r3] ++ movw r3, #61604 ++ cmp r2, r3 ++ bne .L2107 ++.L2111: ++ movs r2, #48 ++ ldr r1, [r6, #1264] ++ ldr r0, .L2128+16 ++ bl ftl_memcpy ++ ldrh r2, [r5, #2332] ++ ldr r1, [r6, #1264] ++ ldr r0, [r4, #300] ++ lsls r2, r2, #1 ++ adds r1, r1, #48 ++ bl ftl_memcpy ++ ldrh r1, [r5, #2332] ++ ldr r3, [r6, #1264] ++ ldr r0, [r5, #32] ++ lsrs r2, r1, #3 ++ lsls r1, r1, #1 ++ adds r1, r1, #51 ++ adds r2, r2, #4 ++ bic r1, r1, #3 ++ add r1, r1, r3 ++ bl ftl_memcpy ++ ldrh r3, [r5, #2436] ++ cbz r3, .L2109 ++ ldrh r1, [r5, #2332] ++ ldrh r2, [r5, #2428] ++ ldr r0, [r4, #3392] ++ lsrs r3, r1, #3 ++ lsls r2, r2, #2 ++ add r3, r3, r1, lsl #1 ++ ldr r1, [r6, #1264] ++ adds r3, r3, #52 ++ ubfx r3, r3, #2, #14 ++ add r1, r1, r3, lsl #2 ++ bl ftl_memcpy ++.L2109: ++ ldr r2, [r4, #244] ++ ldr r3, .L2128+12 ++ cmp r2, r3 ++ bne .L2112 ++ ldrb r1, [r4, #254] @ zero_extendqisi2 ++ ldrh r3, [r5, #2346] ++ ldrh r2, [r4, #252] ++ cmp r1, r3 ++ strh r2, [r4, #546] @ movhi ++ bne .L2112 ++ ldrh r3, [r5, #2390] ++ ldrh r1, [r5, #2396] ++ ldr r0, [r5, #2336] ++ str r2, [r6, #1292] ++ muls r3, r2, r3 ++ str r3, [r5, #2452] ++ muls r3, r1, r3 ++ ldrh r1, [r5, #2324] ++ str r3, [r5, #2432] ++ ldrh r3, [r5, #2462] ++ subs r0, r0, r3 ++ subs r0, r0, r2 ++ bl __aeabi_uidiv ++ ldrh r3, [r4, #260] ++ strh r0, [r4, #536] @ movhi ++ ldrh r1, [r4, #258] ++ lsrs r2, r3, #6 ++ and r3, r3, #63 ++ strb r3, [r4, #326] ++ strh r2, [r4, #322] @ movhi ++ ldrh r2, [r4, #262] ++ ldrb r3, [r4, #255] @ zero_extendqisi2 ++ strh r1, [r4, #320] @ movhi ++ strh r2, [r4, #368] @ movhi ++ ldrh r2, [r4, #264] ++ strb r3, [r4, #328] ++ movw r3, #65535 ++ strh r3, [r4, #556] @ movhi ++ movs r3, #0 ++ strh r3, [r4, #558] @ movhi ++ lsrs r0, r2, #6 ++ and r2, r2, #63 ++ strb r2, [r4, #374] ++ ldrb r2, [r4, #256] @ zero_extendqisi2 ++ strh r0, [r4, #370] @ movhi ++ strb r3, [r4, #562] ++ strb r2, [r4, #376] ++ ldrh r2, [r4, #266] ++ strb r3, [r4, #564] ++ strh r2, [r4, #416] @ movhi ++ ldrh r2, [r4, #268] ++ lsrs r0, r2, #6 ++ and r2, r2, #63 ++ strb r2, [r4, #422] ++ ldrb r2, [r4, #257] @ zero_extendqisi2 ++ strh r0, [r4, #418] @ movhi ++ strb r2, [r4, #424] ++ str r3, [r4, #496] ++ ldr r2, [r4, #276] ++ str r3, [r4, #484] ++ str r3, [r4, #476] ++ str r3, [r4, #492] ++ str r2, [r4, #516] ++ str r3, [r4, #520] ++ ldr r2, [r4, #508] ++ str r3, [r4, #528] ++ str r3, [r4, #488] ++ ldr r3, [r4, #284] ++ cmp r3, r2 ++ ldr r2, [r4, #512] ++ it hi ++ strhi r3, [r4, #508] ++ ldr r3, [r4, #280] ++ cmp r3, r2 ++ it hi ++ strhi r3, [r4, #512] ++ movw r3, #65535 ++ cmp r1, r3 ++ beq .L2115 ++ ldr r0, .L2128+20 ++ bl make_superblock ++.L2115: ++ ldrh r2, [r4, #368] ++ movw r3, #65535 ++ cmp r2, r3 ++ beq .L2116 ++ ldr r0, .L2128+24 ++ bl make_superblock ++.L2116: ++ ldrh r2, [r4, #416] ++ movw r3, #65535 ++ cmp r2, r3 ++ beq .L2117 ++ ldr r0, .L2128+28 ++ bl make_superblock ++.L2117: ++ ldrh r2, [r4, #556] ++ movw r3, #65535 ++ cmp r2, r3 ++ beq .L2118 ++ ldr r0, .L2128+32 ++ bl make_superblock ++.L2118: ++ movs r0, #0 ++ b .L2100 ++.L2129: ++ .align 2 ++.L2128: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word 1179929683 ++ .word .LANCHOR2+244 ++ .word .LANCHOR2+320 ++ .word .LANCHOR2+368 ++ .word .LANCHOR2+416 ++ .word .LANCHOR2+556 ++ .word .LC109 ++ .fnend ++ .size FtlLoadSysInfo, .-FtlLoadSysInfo ++ .align 1 ++ .global FtlDumpBlockInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlDumpBlockInfo, %function ++FtlDumpBlockInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 72 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ ubfx r0, r0, #10, #16 ++ ldr r4, .L2144 ++ .pad #100 ++ sub sp, sp, #100 ++ mov r9, r1 ++ ldr r7, .L2144+4 ++ bl P2V_block_in_plane ++ ldr r1, .L2144+8 ++ mov r6, r0 ++ ldr r0, .L2144+12 ++ ldrh r8, [r4, #2390] ++ bl printk ++ ldr r3, [r7, #300] ++ mov r1, r6 ++ ldr r0, .L2144+16 ++ ldrh r2, [r3, r6, lsl #1] ++ bl printk ++ add r0, sp, #96 ++ strh r6, [r0, #-48]! @ movhi ++ bl make_superblock ++ ldrb r5, [r4, #152] @ zero_extendqisi2 ++ str r7, [sp, #44] ++ cbz r5, .L2131 ++ cmp r9, #0 ++ bne .L2142 ++ mov r0, r6 ++ bl ftl_get_blk_mode ++ cmp r0, #1 ++ mov r5, r0 ++ bne .L2131 ++ ldrh r8, [r4, #2392] ++.L2131: ++ ldr r9, .L2144 ++ mov r2, r8 ++ ldrh r3, [r4, #2390] ++ mov r1, r5 ++ ldr r0, .L2144+20 ++ mov r10, #36 ++ bl printk ++ movs r3, #0 ++ str r3, [sp, #28] ++.L2132: ++ ldr r3, .L2144+4 ++ add ip, sp, #62 ++ ldrh fp, [r9, #2324] ++ movw lr, #65535 ++ ldrh r7, [r9, #2402] ++ ldr r2, [r3, #1144] ++ ldr r0, [r3, #3304] ++ ldr r3, [r3, #1148] ++ str r2, [sp, #32] ++ ldrh r2, [r9, #2400] ++ str r3, [sp, #40] ++ str r2, [sp, #36] ++ movs r2, #0 ++ mov r4, r2 ++.L2133: ++ uxth r3, r2 ++ cmp fp, r3 ++ bhi .L2137 ++ ldr fp, .L2144+24 ++ movs r7, #0 ++ mov r2, r5 ++ mov r1, r4 ++ bl FlashReadPages ++.L2138: ++ uxth r3, r7 ++ cmp r4, r3 ++ bhi .L2139 ++ ldr r6, [sp, #28] ++ adds r6, r6, #1 ++ uxth r3, r6 ++ cmp r8, r3 ++ str r3, [sp, #28] ++ bne .L2132 ++.L2140: ++ movs r0, #0 ++ add sp, sp, #100 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2142: ++ movs r5, #0 ++ b .L2131 ++.L2137: ++ ldrh r3, [ip, #2]! ++ cmp r3, lr ++ beq .L2134 ++ ldr r6, [sp, #28] ++ mla r1, r10, r4, r0 ++ orr r3, r6, r3, lsl #10 ++ ldr r6, [sp, #32] ++ str r3, [r1, #4] ++ ldr r3, [sp, #36] ++ muls r3, r4, r3 ++ it mi ++ addmi r3, r3, #3 ++ bic r3, r3, #3 ++ add r3, r3, r6 ++ ldr r6, [sp, #40] ++ str r3, [r1, #8] ++ mov r3, r7 ++ muls r3, r4, r3 ++ add r4, r4, #1 ++ it mi ++ addmi r3, r3, #3 ++ uxth r4, r4 ++ bic r3, r3, #3 ++ add r3, r3, r6 ++ str r3, [r1, #12] ++.L2134: ++ adds r2, r2, #1 ++ b .L2133 ++.L2139: ++ ldr r3, [sp, #44] ++ mul r0, r10, r7 ++ ldrh r1, [sp, #48] ++ adds r7, r7, #1 ++ ldr ip, [r3, #3304] ++ add r2, ip, r0 ++ ldr lr, [r2, #8] ++ ldr r3, [r2, #12] ++ ldr r6, [lr, #4] ++ str r6, [sp, #20] ++ ldr r6, [lr] ++ str r6, [sp, #16] ++ ldr r6, [r3, #12] ++ str r6, [sp, #12] ++ ldr r6, [r3, #8] ++ str r6, [sp, #8] ++ ldr r6, [r3, #4] ++ str r6, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r3, [r2, #4] ++ ldr r2, [ip, r0] ++ mov r0, fp ++ bl printk ++ b .L2138 ++.L2145: ++ .align 2 ++.L2144: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR3+141 ++ .word .LC110 ++ .word .LC111 ++ .word .LC112 ++ .word .LC113 ++ .fnend ++ .size FtlDumpBlockInfo, .-FtlDumpBlockInfo ++ .align 1 ++ .global FtlScanAllBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlScanAllBlock, %function ++FtlScanAllBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movs r7, #0 ++ ldr r5, .L2158 ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r1, .L2158+4 ++ ldr r0, .L2158+8 ++ bl printk ++.L2147: ++ ldr r3, .L2158+12 ++ uxth r0, r7 ++ ldrh r3, [r3, #2334] ++ cmp r3, r0 ++ bhi .L2157 ++ movs r0, #0 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2157: ++ add r4, sp, #80 ++ movw r10, #65535 ++ strh r0, [r4, #-48]! @ movhi ++ mov fp, #36 ++ bl ftl_get_blk_mode ++ ldr r2, [r5, #300] ++ uxth r1, r7 ++ mov r3, r0 ++ ldr r0, .L2158+16 ++ ldrh r2, [r2, r1, lsl #1] ++ bl printk ++ mov r0, r4 ++ bl make_superblock ++ ldr r3, .L2158+12 ++ movs r2, #0 ++ ldr r0, [r5, #3304] ++ add r8, sp, #46 ++ ldr r9, [r5, #1148] ++ mov r4, r2 ++ ldrh ip, [r3, #2324] ++ ldr r3, [r5, #1144] ++ str r3, [sp, #24] ++ ldr r3, .L2158+12 ++ ldrh r3, [r3, #2400] ++ str r3, [sp, #28] ++ ldr r3, .L2158+12 ++ ldrh lr, [r3, #2402] ++.L2148: ++ uxth r3, r2 ++ cmp ip, r3 ++ bhi .L2152 ++ ldr r10, .L2158+20 ++ mov r8, #0 ++ mov r9, #36 ++ movs r2, #0 ++ mov r1, r4 ++ bl FlashReadPages ++.L2153: ++ uxth r3, r8 ++ cmp r4, r3 ++ bhi .L2154 ++ ldr r10, .L2158+24 ++ mov r8, #0 ++ mov r9, #36 ++ movs r2, #1 ++ mov r1, r4 ++ ldr r0, [r5, #3304] ++ bl FlashReadPages ++.L2155: ++ uxth r3, r8 ++ cmp r4, r3 ++ bhi .L2156 ++ adds r7, r7, #1 ++ b .L2147 ++.L2152: ++ ldrh r3, [r8, #2]! ++ cmp r3, r10 ++ beq .L2149 ++ mla r1, fp, r4, r0 ++ ldr r6, [sp, #24] ++ lsls r3, r3, #10 ++ str r3, [r1, #4] ++ ldr r3, [sp, #28] ++ muls r3, r4, r3 ++ it mi ++ addmi r3, r3, #3 ++ bic r3, r3, #3 ++ add r3, r3, r6 ++ str r3, [r1, #8] ++ mov r3, lr ++ muls r3, r4, r3 ++ add r4, r4, #1 ++ it mi ++ addmi r3, r3, #3 ++ uxth r4, r4 ++ bic r3, r3, #3 ++ add r3, r3, r9 ++ str r3, [r1, #12] ++.L2149: ++ adds r2, r2, #1 ++ b .L2148 ++.L2154: ++ mul r2, r9, r8 ++ ldr r0, [r5, #3304] ++ ldrh r1, [sp, #32] ++ add r8, r8, #1 ++ add lr, r0, r2 ++ ldr fp, [lr, #8] ++ ldr r3, [lr, #12] ++ ldr r6, [fp, #4] ++ str r6, [sp, #20] ++ ldr r6, [fp] ++ str r6, [sp, #16] ++ ldr r6, [r3, #12] ++ str r6, [sp, #12] ++ ldr r6, [r3, #8] ++ str r6, [sp, #8] ++ ldr r6, [r3, #4] ++ str r6, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r2, [r0, r2] ++ mov r0, r10 ++ ldr r3, [lr, #4] ++ bl printk ++ b .L2153 ++.L2156: ++ mul r2, r9, r8 ++ ldr r0, [r5, #3304] ++ ldrh r1, [sp, #32] ++ add r8, r8, #1 ++ add lr, r0, r2 ++ ldr fp, [lr, #8] ++ ldr r3, [lr, #12] ++ ldr r6, [fp, #4] ++ str r6, [sp, #20] ++ ldr r6, [fp] ++ str r6, [sp, #16] ++ ldr r6, [r3, #12] ++ str r6, [sp, #12] ++ ldr r6, [r3, #8] ++ str r6, [sp, #8] ++ ldr r6, [r3, #4] ++ str r6, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r2, [r0, r2] ++ mov r0, r10 ++ ldr r3, [lr, #4] ++ bl printk ++ b .L2155 ++.L2159: ++ .align 2 ++.L2158: ++ .word .LANCHOR2 ++ .word .LANCHOR3+158 ++ .word .LC110 ++ .word .LANCHOR0 ++ .word .LC114 ++ .word .LC115 ++ .word .LC116 ++ .fnend ++ .size FtlScanAllBlock, .-FtlScanAllBlock ++ .align 1 ++ .global ftl_scan_all_ppa ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_scan_all_ppa, %function ++ftl_scan_all_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r5, .L2176 ++ ldr r6, .L2176+4 ++ ldrh r4, [r5, #2388] ++ subs r4, r4, #16 ++ lsl r10, r4, #10 ++.L2161: ++ ldrh r3, [r5, #2388] ++ cmp r4, r3 ++ blt .L2169 ++ ldr r1, .L2176+8 ++ ldr r0, .L2176+12 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b printk ++.L2169: ++ uxth r8, r4 ++ mov r0, r8 ++ bl ftl_get_blk_mode ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cbz r3, .L2162 ++ ldrh r3, [r5, #2332] ++ cmp r4, r3 ++ bge .L2163 ++ ldrh r3, [r5, #2404] ++ cmp r4, r3 ++ blt .L2163 ++.L2162: ++ cmp r0, #1 ++ bne .L2164 ++.L2163: ++ ldrh r7, [r5, #2392] ++ mov r9, #-2147483648 ++.L2165: ++ mov r3, r9 ++ mov r2, r7 ++ mov r1, r4 ++ ldr r0, .L2176+16 ++ bl printk ++ mov r0, r8 ++ bl FtlBbmIsBadBlock ++ cbz r0, .L2166 ++ mov r3, r9 ++ mov r2, r7 ++ mov r1, r4 ++ ldr r0, .L2176+20 ++ bl printk ++.L2166: ++ ldr fp, .L2176+32 ++ mov r8, #0 ++.L2167: ++ cmp r8, r7 ++ bne .L2168 ++ adds r4, r4, #1 ++ add r10, r10, #1024 ++ b .L2161 ++.L2164: ++ ldrh r7, [r5, #2390] ++ mov r9, #0 ++ b .L2165 ++.L2168: ++ add r3, r9, r10 ++ movs r2, #0 ++ add r3, r3, r8 ++ movs r1, #1 ++ str r3, [r6, #1260] ++ add r8, r8, #1 ++ ldr r3, [fp, #3316] ++ ldr r0, .L2176+24 ++ str r2, [r6, #1256] ++ str r3, [r6, #1264] ++ ldr r3, [fp, #3340] ++ str r3, [r6, #1268] ++ bl FlashReadPages ++ ldr r2, [r6, #1264] ++ ldr r3, [r6, #1268] ++ ldr r0, .L2176+28 ++ ldr r1, [r2, #4] ++ str r1, [sp, #16] ++ ldr r2, [r2] ++ ldr r1, [r6, #1260] ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r2, [r6, #1256] ++ ldr r3, [r3] ++ bl printk ++ b .L2167 ++.L2177: ++ .align 2 ++.L2176: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LANCHOR3+174 ++ .word .LC120 ++ .word .LC117 ++ .word .LC118 ++ .word .LANCHOR4+1256 ++ .word .LC119 ++ .word .LANCHOR2 ++ .fnend ++ .size ftl_scan_all_ppa, .-ftl_scan_all_ppa ++ .align 1 ++ .global FlashProgPages ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashProgPages, %function ++FlashProgPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 64 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #76 ++ sub sp, sp, #76 ++ ldr r5, .L2230 ++ mov r4, r0 ++ mov r9, r2 ++ str r1, [sp, #8] ++ ldr r6, [r5, #48] ++ ldrb r7, [r5, #36] @ zero_extendqisi2 ++ str r3, [sp, #20] ++ ldrb r6, [r6, #19] @ zero_extendqisi2 ++ str r6, [sp, #16] ++ cbnz r7, .L2179 ++ ldr r3, .L2230+4 ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ str r3, [sp, #12] ++.L2180: ++ ldr r3, [sp, #8] ++ cmp r7, r3 ++ bcc .L2193 ++ ldr r7, .L2230+8 ++ movs r6, #0 ++.L2194: ++ ldrb r3, [r5, #2234] @ zero_extendqisi2 ++ cmp r6, r3 ++ bcc .L2196 ++ ldr r3, [sp, #20] ++ cmp r3, #0 ++ bne .L2197 ++.L2205: ++ movs r0, #0 ++ b .L2178 ++.L2179: ++ bl FlashProgSlc2KPages ++.L2178: ++ add sp, sp, #76 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2193: ++ movs r3, #36 ++ add r2, sp, #28 ++ mul r8, r3, r7 ++ ldr r3, [sp, #8] ++ mov r1, r9 ++ subs r3, r3, r7 ++ uxtb r3, r3 ++ add fp, r4, r8 ++ mov r0, fp ++ str r3, [sp] ++ add r3, sp, #32 ++ bl LogAddr2PhyAddr ++ ldrb r3, [r5, #2234] @ zero_extendqisi2 ++ mov r10, r0 ++ ldr r0, [sp, #32] ++ cmp r3, r0 ++ bhi .L2182 ++ mov r3, #-1 ++ str r3, [r4, r8] ++.L2183: ++ adds r7, r7, #1 ++ b .L2180 ++.L2182: ++ ldrb r3, [r5, #2244] @ zero_extendqisi2 ++ cmp r3, #0 ++ add r3, r5, r0, lsl #4 ++ it eq ++ moveq r10, #0 ++ ldr r3, [r3, #2112] ++ cbz r3, .L2185 ++ uxtb r0, r0 ++ bl FlashWaitCmdDone ++.L2185: ++ ldr r3, [sp, #32] ++ movs r1, #0 ++ add r2, r5, r3, lsl #4 ++ str r1, [r2, #2116] ++ ldr r1, [sp, #28] ++ str fp, [r2, #2112] ++ str r1, [r2, #2108] ++ cmp r10, #0 ++ beq .L2186 ++ add r1, r8, #36 ++ add r1, r1, r4 ++ str r1, [r2, #2116] ++.L2186: ++ adds r2, r5, r3 ++ add r3, r5, r3, lsl #4 ++ ldrb r6, [r2, #2236] @ zero_extendqisi2 ++ strb r6, [r3, #2104] ++ mov r0, r6 ++ ldrb r3, [r5, #2234] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L2187 ++ bl NandcWaitFlashReady ++.L2188: ++ ldr r3, [sp, #16] ++ subs r3, r3, #1 ++ cmp r3, #7 ++ bhi .L2189 ++ adds r3, r5, r6 ++ ldrb r3, [r3, #2068] @ zero_extendqisi2 ++ cbz r3, .L2189 ++ movs r3, #0 ++ ldr r2, .L2230+12 ++ ldrb r1, [r5, #1217] @ zero_extendqisi2 ++ mov r0, r6 ++ bl HynixSetRRPara ++.L2189: ++ mov r0, r6 ++ bl NandcFlashCs ++ cmp r9, #1 ++ mov r0, r6 ++ bne .L2190 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2190 ++ bl flash_enter_slc_mode ++.L2191: ++ ldr r1, [sp, #28] ++ mov r0, r6 ++ bl FlashProgFirstCmd ++ ldr r3, [fp, #12] ++ movs r1, #1 ++ ldr r2, [sp, #12] ++ mov r0, r6 ++ str r3, [sp] ++ ldr r3, [fp, #8] ++ bl NandcXferData ++ cmp r10, #0 ++ beq .L2192 ++ ldr r1, [sp, #28] ++ mov r0, r6 ++ bl FlashProgDpFirstCmd ++ ldr r3, [sp, #32] ++ mov r0, r6 ++ ldr r1, [sp, #28] ++ add r8, r8, #36 ++ add r8, r8, r4 ++ add r3, r5, r3, lsl #2 ++ ldr r2, [r3, #1180] ++ adds r2, r2, #0 ++ it ne ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ ldr r3, [r5, #40] ++ mov r0, r6 ++ ldr r1, [sp, #28] ++ add r1, r1, r3 ++ bl FlashProgDpSecondCmd ++ ldr r3, [r8, #12] ++ movs r1, #1 ++ ldr r2, [sp, #12] ++ mov r0, r6 ++ str r3, [sp] ++ ldr r3, [r8, #8] ++ bl NandcXferData ++.L2192: ++ ldr r1, [sp, #28] ++ mov r0, r6 ++ bl FlashProgSecondCmd ++ mov r0, r6 ++ add r7, r7, r10 ++ bl NandcFlashDeCs ++ b .L2183 ++.L2187: ++ bl NandcFlashCs ++ ldr r3, [sp, #32] ++ mov r0, r6 ++ ldr r1, [sp, #28] ++ add r3, r5, r3, lsl #2 ++ ldr r2, [r3, #1180] ++ adds r2, r2, #0 ++ it ne ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ mov r0, r6 ++ bl NandcFlashDeCs ++ b .L2188 ++.L2190: ++ bl flash_exit_slc_mode ++ b .L2191 ++.L2196: ++ uxtb r0, r6 ++ bl FlashWaitCmdDone ++ cmp r9, #1 ++ bne .L2195 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cbz r3, .L2195 ++ lsls r3, r6, #4 ++ ldrb r0, [r7, r3] @ zero_extendqisi2 ++ bl flash_exit_slc_mode ++.L2195: ++ adds r6, r6, #1 ++ b .L2194 ++.L2197: ++ ldr r7, .L2230+16 ++ mov r8, #0 ++ ldr r10, .L2230+32 ++.L2198: ++ ldr r3, [sp, #8] ++ cmp r8, r3 ++ beq .L2205 ++ ldr r3, [r4] ++ adds r3, r3, #1 ++ bne .L2199 ++ ldr r1, [r4, #4] ++ ldr r0, .L2230+20 ++ bl printk ++.L2200: ++ add r8, r8, #1 ++ adds r4, r4, #36 ++ b .L2198 ++.L2199: ++ ldr r3, [sp, #8] ++ add r2, sp, #28 ++ mov r1, r9 ++ mov r0, r4 ++ mov r6, r4 ++ sub r3, r3, r8 ++ uxtb r3, r3 ++ str r3, [sp] ++ add r3, sp, #32 ++ bl LogAddr2PhyAddr ++ ldr r2, [r7, #1228] ++ movs r3, #0 ++ add r5, sp, #36 ++ str r3, [r2] ++ ldr r2, [r7, #1232] ++ str r3, [r2] ++ ldmia r6!, {r0, r1, r2, r3} ++ stmia r5!, {r0, r1, r2, r3} ++ ldmia r6!, {r0, r1, r2, r3} ++ stmia r5!, {r0, r1, r2, r3} ++ mov r2, r9 ++ ldr r3, [r6] ++ movs r1, #1 ++ add r0, sp, #36 ++ str r3, [r5] ++ ldr r3, [r7, #1228] ++ str r3, [sp, #44] ++ ldr r3, [r7, #1232] ++ str r3, [sp, #48] ++ bl FlashReadPages ++ ldr r5, [sp, #36] ++ adds r3, r5, #1 ++ bne .L2201 ++ ldr r1, [r4, #4] ++ ldr r0, .L2230+24 ++ bl printk ++ str r5, [r4] ++.L2201: ++ ldr r3, [r4, #12] ++ cbz r3, .L2202 ++ ldr r2, [r3] ++ ldr r3, [r7, #1232] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L2202 ++ ldr r1, [r4, #4] ++ ldr r0, .L2230+28 ++ bl printk ++ mov r3, #-1 ++ str r3, [r4] ++.L2202: ++ ldr r3, [r4, #8] ++ cmp r3, #0 ++ beq .L2200 ++ ldr r2, [r3] ++ ldr r3, [r7, #1228] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L2200 ++ ldr r1, [r4, #4] ++ mov r0, r10 ++ bl printk ++ mov r3, #-1 ++ str r3, [r4] ++ b .L2200 ++.L2231: ++ .align 2 ++.L2230: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .word .LANCHOR0+2104 ++ .word .LANCHOR0+1220 ++ .word .LANCHOR4 ++ .word .LC104 ++ .word .LC105 ++ .word .LC107 ++ .word .LC108 ++ .fnend ++ .size FlashProgPages, .-FlashProgPages ++ .align 1 ++ .global FlashTestBlk ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashTestBlk, %function ++FlashTestBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 104 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ mov r4, r0 ++ ldr r5, .L2235 ++ .pad #108 ++ sub sp, sp, #108 ++ ldr r3, [r5, #1212] ++ cmp r0, r3 ++ bcc .L2234 ++ ldr r3, [r5, #1220] ++ add r0, sp, #40 ++ movs r2, #32 ++ movs r1, #165 ++ str r0, [sp, #16] ++ lsls r4, r4, #10 ++ str r3, [sp, #12] ++ bl ftl_memset ++ movs r2, #8 ++ movs r1, #90 ++ ldr r0, [r5, #1220] ++ bl ftl_memset ++ movs r2, #1 ++ add r0, sp, #4 ++ mov r1, r2 ++ str r4, [sp, #8] ++ bl FlashEraseBlocks ++ movs r3, #1 ++ add r0, sp, #4 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldr r4, [sp, #4] ++ movs r2, #1 ++ movs r1, #0 ++ add r0, sp, #4 ++ adds r4, r4, #0 ++ it ne ++ movne r4, #1 ++ negs r4, r4 ++ bl FlashEraseBlocks ++.L2232: ++ mov r0, r4 ++ add sp, sp, #108 ++ @ sp needed ++ pop {r4, r5, pc} ++.L2234: ++ movs r4, #0 ++ b .L2232 ++.L2236: ++ .align 2 ++.L2235: ++ .word .LANCHOR4 ++ .fnend ++ .size FlashTestBlk, .-FlashTestBlk ++ .align 1 ++ .global FlashMakeFactorBbt ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashMakeFactorBbt, %function ++FlashMakeFactorBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r4, .L2293 ++ ldr r0, .L2293+4 ++ ldr r3, [r4, #1224] ++ ldr r5, .L2293 ++ str r3, [sp, #24] ++ ldr r3, .L2293+8 ++ ldrh r1, [r3, #136] ++ ldrh r6, [r3, #138] ++ smulbb r6, r6, r1 ++ ldr r1, [r3, #48] ++ ldrb r2, [r1, #24] @ zero_extendqisi2 ++ uxth r6, r6 ++ movs r1, #1 ++ str r2, [sp, #28] ++ ldrh r2, [r3, #40] ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ str r2, [sp, #20] ++ cmp r3, #1 ++ itttt eq ++ moveq r3, r2 ++ lsleq r3, r3, #1 ++ uxtheq r3, r3 ++ streq r3, [sp, #20] ++ bl printk ++ ldr r0, [r4, #1224] ++ mov r2, #4096 ++ movs r1, #0 ++ ldr r4, .L2293+8 ++ bl ftl_memset ++ lsrs r3, r6, #4 ++ str r3, [sp, #32] ++ movs r3, #0 ++ str r3, [sp, #12] ++.L2239: ++ ldrb r8, [sp, #12] @ zero_extendqisi2 ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ cmp r3, r8 ++ bhi .L2266 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2266: ++ add r3, r5, r8, lsl #1 ++ ldrh r7, [r3, #1238] ++ cmp r7, #0 ++ bne .L2240 ++ ldrh r2, [r4, #144] ++ mov r1, r7 ++ ldr r0, [r5, #1192] ++ add fp, r4, r8, lsl #2 ++ mov r9, r7 ++ mov r10, r7 ++ lsls r2, r2, #9 ++ bl ftl_memset ++ add r3, r4, r8 ++ str r7, [sp, #4] ++ ldrb r3, [r3, #2236] @ zero_extendqisi2 ++ str r3, [sp, #8] ++.L2241: ++ ldrh r3, [sp, #4] ++ cmp r3, r6 ++ str r3, [sp, #16] ++ bcc .L2252 ++.L2251: ++ mov r2, r9 ++ mov r1, r8 ++ ldr r0, .L2293+12 ++ bl printk ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ ldr r2, [sp, #32] ++ muls r3, r2, r3 ++ cmp r9, r3 ++ blt .L2253 ++ ldrh r2, [r4, #144] ++ movs r1, #0 ++ ldr r0, [r5, #1192] ++ lsls r2, r2, #9 ++ bl ftl_memset ++.L2253: ++ cmp r8, #0 ++ bne .L2255 ++ ldrh fp, [r5, #1212] ++ mov r10, #1 ++ ldr r9, .L2293+20 ++.L2256: ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ cmp r3, fp ++ bhi .L2258 ++ subs r3, r6, #1 ++ sub r9, r6, #50 ++ uxth r10, r3 ++ mov fp, #1 ++.L2259: ++ cmp r10, r9 ++ bgt .L2261 ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ ldr r2, [r5, #1212] ++ subs r3, r3, r2 ++ cmp r7, r3 ++ bcc .L2255 ++ ldrh r2, [r4, #144] ++ movs r1, #0 ++ ldr r0, [r5, #1192] ++ lsls r2, r2, #9 ++ bl ftl_memset ++.L2255: ++ ldrb r9, [sp, #12] @ zero_extendqisi2 ++ subs r7, r6, #1 ++ ldr fp, .L2293+24 ++ uxth r7, r7 ++ add r10, r5, r8, lsl #1 ++ mul r9, r6, r9 ++.L2263: ++ mov r1, r8 ++ mov r2, r7 ++ mov r0, fp ++ bl printk ++ ldr r1, [r5, #1192] ++.L2264: ++ lsrs r2, r7, #5 ++ and r3, r7, #31 ++ ldr r2, [r1, r2, lsl #2] ++ lsr r3, r2, r3 ++ ands r3, r3, #1 ++ bne .L2265 ++ ldr r1, [sp, #24] ++ movw r2, #61664 ++ strh r7, [r10, #1238] @ movhi ++ add r0, sp, #44 ++ strh r2, [r1] @ movhi ++ movs r2, #1 ++ strh r7, [r1, #2] @ movhi ++ strh r3, [r1, #8] @ movhi ++ mov r1, r2 ++ ldr r3, [r5, #1192] ++ str r3, [sp, #52] ++ ldr r3, [r5, #1224] ++ str r3, [sp, #56] ++ add r3, r7, r9 ++ lsls r3, r3, #10 ++ str r3, [sp, #48] ++ bl FlashEraseBlocks ++ movs r3, #1 ++ add r0, sp, #44 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldr r3, [sp, #44] ++ cmp r3, #0 ++ beq .L2240 ++ subs r7, r7, #1 ++ uxth r7, r7 ++ b .L2263 ++.L2252: ++ movs r3, #255 ++ strb r3, [sp, #42] ++ strb r3, [sp, #43] ++ ldr r3, [sp, #28] ++ lsls r1, r3, #31 ++ bpl .L2243 ++ ldr r3, [fp, #1180] ++ add r2, sp, #42 ++ ldr r0, [sp, #8] ++ add r3, r3, r10 ++ mov r1, r3 ++ str r3, [sp, #36] ++ bl FlashReadSpare ++ ldrb r2, [r4, #36] @ zero_extendqisi2 ++ ldr r3, [sp, #36] ++ cmp r2, #1 ++ bne .L2243 ++ ldr r1, [r4, #40] ++ add r2, sp, #43 ++ ldr r0, [sp, #8] ++ add r1, r1, r3 ++ bl FlashReadSpare ++ ldrb r3, [sp, #42] @ zero_extendqisi2 ++ ldrb r2, [sp, #43] @ zero_extendqisi2 ++ ands r3, r3, r2 ++ strb r3, [sp, #42] ++.L2243: ++ ldr r3, [sp, #28] ++ lsls r2, r3, #30 ++ bpl .L2245 ++ ldr r3, [r4, #48] ++ add r2, sp, #43 ++ ldr r0, [sp, #8] ++ ldrh r1, [r3, #10] ++ ldr r3, [fp, #1180] ++ subs r1, r1, #1 ++ add r1, r1, r3 ++ add r1, r1, r10 ++ bl FlashReadSpare ++.L2245: ++ ldr r3, [r4, #48] ++ ldrb r2, [r3, #7] @ zero_extendqisi2 ++ cmp r2, #1 ++ beq .L2246 ++ cmp r2, #8 ++ beq .L2246 ++ ldrb r3, [r3, #18] @ zero_extendqisi2 ++ cmp r3, #12 ++ bne .L2247 ++.L2246: ++ ldrb r3, [sp, #42] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2268 ++ ldrb r0, [sp, #43] @ zero_extendqisi2 ++ clz r0, r0 ++ lsrs r0, r0, #5 ++.L2248: ++ ldr r3, [sp, #28] ++ lsls r3, r3, #29 ++ bpl .L2249 ++ ldr r1, [fp, #1180] ++ ldr r0, [sp, #8] ++ add r1, r1, r10 ++ bl SandiskProgTestBadBlock ++.L2249: ++ cbz r0, .L2250 ++ ldr r2, [sp, #4] ++ mov r1, r8 ++ ldr r0, .L2293+16 ++ add r9, r9, #1 ++ bl printk ++ ldr r3, [sp, #16] ++ uxth r9, r9 ++ ldr r1, [r5, #1192] ++ and r2, r3, #31 ++ lsrs r0, r3, #5 ++ movs r3, #1 ++ lsl r2, r3, r2 ++ ldr r3, [r1, r0, lsl #2] ++ orrs r3, r3, r2 ++ ldr r2, [sp, #32] ++ str r3, [r1, r0, lsl #2] ++ ldrb r3, [r4, #2234] @ zero_extendqisi2 ++ muls r3, r2, r3 ++ cmp r9, r3 ++ bgt .L2251 ++.L2250: ++ ldr r3, [sp, #4] ++ adds r3, r3, #1 ++ str r3, [sp, #4] ++ ldr r3, [sp, #20] ++ add r10, r10, r3 ++ b .L2241 ++.L2247: ++ ldrb r3, [sp, #42] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L2268 ++ ldrb r0, [sp, #43] @ zero_extendqisi2 ++ subs r0, r0, #255 ++ it ne ++ movne r0, #1 ++ b .L2248 ++.L2268: ++ movs r0, #1 ++ b .L2248 ++.L2258: ++ mov r0, fp ++ bl FlashTestBlk ++ cbz r0, .L2257 ++ mov r1, fp ++ mov r0, r9 ++ bl printk ++ ldr r1, [r5, #1192] ++ lsr r0, fp, #5 ++ and r3, fp, #31 ++ lsl r2, r10, r3 ++ adds r7, r7, #1 ++ ldr r3, [r1, r0, lsl #2] ++ uxth r7, r7 ++ orrs r3, r3, r2 ++ str r3, [r1, r0, lsl #2] ++.L2257: ++ add fp, fp, #1 ++ uxth fp, fp ++ b .L2256 ++.L2261: ++ mov r0, r10 ++ bl FlashTestBlk ++ cbz r0, .L2260 ++ mov r1, r10 ++ ldr r0, .L2293+20 ++ bl printk ++ ldr r0, [r5, #1192] ++ lsr ip, r10, #5 ++ and r2, r10, #31 ++ lsl r1, fp, r2 ++ ldr r2, [r0, ip, lsl #2] ++ orrs r2, r2, r1 ++ str r2, [r0, ip, lsl #2] ++.L2260: ++ add r3, r10, #-1 ++ uxth r10, r3 ++ b .L2259 ++.L2265: ++ subs r7, r7, #1 ++ uxth r7, r7 ++ b .L2264 ++.L2240: ++ ldr r3, [sp, #12] ++ adds r3, r3, #1 ++ str r3, [sp, #12] ++ b .L2239 ++.L2294: ++ .align 2 ++.L2293: ++ .word .LANCHOR4 ++ .word .LC121 ++ .word .LANCHOR0 ++ .word .LC123 ++ .word .LC122 ++ .word .LC124 ++ .word .LC125 ++ .fnend ++ .size FlashMakeFactorBbt, .-FlashMakeFactorBbt ++ .align 1 ++ .global FtlLowFormatEraseBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlLowFormatEraseBlock, %function ++FtlLowFormatEraseBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2342 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ str r0, [sp, #8] ++ mov r10, r3 ++ ldr r6, [r3, #228] ++ str r1, [sp, #4] ++ cmp r6, #0 ++ bne .L2324 ++ ldr r5, .L2342+4 ++ mov r7, r6 ++ mov r4, r6 ++ mov r9, #36 ++ mov fp, r10 ++ str r0, [r10, #3292] ++ ldrb r3, [r5, #2244] @ zero_extendqisi2 ++ str r3, [sp, #16] ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ str r3, [sp, #12] ++.L2297: ++ ldrh r0, [r5, #2324] ++ uxth r1, r6 ++ cmp r0, r1 ++ bhi .L2302 ++ cmp r7, #0 ++ beq .L2295 ++ ldr r3, [sp, #12] ++ mov r8, #0 ++ mov r2, r7 ++ ldr r0, [r10, #232] ++ strb r8, [r5, #2244] ++ mov r9, #36 ++ adds r6, r3, #0 ++ it ne ++ movne r6, #1 ++ mov r1, r6 ++ bl FlashEraseBlocks ++ ldrb r3, [sp, #16] @ zero_extendqisi2 ++ strb r3, [r5, #2244] ++.L2304: ++ uxth r2, r8 ++ cmp r7, r2 ++ bhi .L2306 ++ ldr r3, [sp, #4] ++ cmp r3, #0 ++ bne .L2307 ++ uxth r6, r6 ++ mov fp, #6 ++ movs r3, #1 ++ str r3, [sp, #12] ++.L2308: ++ ldr r7, .L2342 ++ mov r9, #0 ++.L2318: ++ ldr r10, .L2342+4 ++ mov r8, #0 ++ mov r5, r8 ++.L2309: ++ ldrh r1, [r10, #2324] ++ uxth r3, r8 ++ cmp r1, r3 ++ bhi .L2313 ++ cbz r5, .L2295 ++ movs r3, #1 ++ mov r8, #0 ++ mov r2, r6 ++ mov r1, r5 ++ ldr r0, [r7, #232] ++ strb r8, [r10, #2244] ++ bl FlashProgPages ++ ldrb r3, [sp, #16] @ zero_extendqisi2 ++ strb r3, [r10, #2244] ++ mov r10, #36 ++.L2315: ++ uxth r3, r8 ++ cmp r5, r3 ++ bhi .L2317 ++ add r9, r9, fp ++ ldr r3, [sp, #12] ++ uxth r9, r9 ++ cmp r3, r9 ++ bhi .L2318 ++ mov r8, #0 ++ mov r9, #36 ++.L2319: ++ uxth r3, r8 ++ cmp r5, r3 ++ bhi .L2321 ++ ldr r3, [sp, #8] ++ cmp r3, #63 ++ bls .L2322 ++ ldr r3, [sp, #4] ++ cbz r3, .L2295 ++.L2322: ++ mov r2, r5 ++ mov r1, r6 ++ ldr r0, [r7, #232] ++ bl FlashEraseBlocks ++.L2295: ++ mov r0, r4 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2302: ++ uxth r1, r6 ++ ldr r0, [r10, #232] ++ movs r3, #0 ++ mul ip, r9, r1 ++ str r3, [r0, ip] ++ adds r0, r5, r1 ++ ldrb r0, [r0, #2350] @ zero_extendqisi2 ++ ldr r1, [sp, #8] ++ bl V2P_block ++ ldr r3, [sp, #4] ++ mov r8, r0 ++ cbz r3, .L2298 ++ bl IsBlkInVendorPart ++ cbnz r0, .L2299 ++.L2298: ++ mov r0, r8 ++ bl FtlBbmIsBadBlock ++ cbnz r0, .L2300 ++ ldr r1, [r10, #232] ++ mla ip, r9, r7, r1 ++ lsl r1, r8, #10 ++ str r0, [ip, #8] ++ str r1, [ip, #4] ++ ldr r0, [fp, #3344] ++ ldrh r1, [r5, #2402] ++ muls r1, r7, r1 ++ add r7, r7, #1 ++ it mi ++ addmi r1, r1, #3 ++ uxth r7, r7 ++ bic r1, r1, #3 ++ add r1, r1, r0 ++ str r1, [ip, #12] ++.L2299: ++ adds r6, r6, #1 ++ b .L2297 ++.L2300: ++ adds r4, r4, #1 ++ uxth r4, r4 ++ b .L2299 ++.L2306: ++ mul r2, r9, r8 ++ ldr r1, [r10, #232] ++ add ip, r1, r2 ++ ldr r2, [r1, r2] ++ adds r2, r2, #1 ++ bne .L2305 ++ ldr r0, [ip, #4] ++ adds r4, r4, #1 ++ uxth r4, r4 ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++.L2305: ++ add r8, r8, #1 ++ b .L2304 ++.L2307: ++ ldrh r3, [r5, #2392] ++ str r3, [sp, #12] ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cbnz r3, .L2325 ++ ldr r3, [sp, #12] ++ movs r6, #1 ++ lsr fp, r3, #2 ++ b .L2308 ++.L2325: ++ movs r6, #1 ++ mov fp, r6 ++ b .L2308 ++.L2313: ++ uxth r3, r8 ++ movs r2, #36 ++ ldr r0, [r7, #232] ++ mul r1, r2, r3 ++ add r3, r3, r10 ++ movs r2, #0 ++ str r2, [r0, r1] ++ ldr r1, [sp, #8] ++ ldrb r0, [r3, #2350] @ zero_extendqisi2 ++ bl V2P_block ++ ldr r3, [sp, #4] ++ str r0, [sp, #20] ++ cbz r3, .L2310 ++ bl IsBlkInVendorPart ++ cbnz r0, .L2311 ++.L2310: ++ ldr r0, [sp, #20] ++ bl FtlBbmIsBadBlock ++ cbnz r0, .L2311 ++ ldr r1, [r7, #232] ++ movs r3, #36 ++ ldr r0, [r7, #3336] ++ mla r1, r3, r5, r1 ++ ldr r3, [sp, #20] ++ add r3, r9, r3, lsl #10 ++ str r3, [r1, #4] ++ ldr r3, [r7, #3332] ++ str r3, [r1, #8] ++ ldrh r3, [r10, #2402] ++ muls r3, r5, r3 ++ add r5, r5, #1 ++ it mi ++ addmi r3, r3, #3 ++ uxth r5, r5 ++ bic r3, r3, #3 ++ add r3, r3, r0 ++ str r3, [r1, #12] ++.L2311: ++ add r8, r8, #1 ++ b .L2309 ++.L2317: ++ mul r3, r10, r8 ++ ldr r2, [r7, #232] ++ adds r1, r2, r3 ++ ldr r3, [r2, r3] ++ cbz r3, .L2316 ++ ldr r0, [r1, #4] ++ adds r4, r4, #1 ++ uxth r4, r4 ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++.L2316: ++ add r8, r8, #1 ++ b .L2315 ++.L2321: ++ ldr r3, [sp, #4] ++ cbz r3, .L2320 ++ mul r3, r9, r8 ++ ldr r2, [r7, #232] ++ adds r1, r2, r3 ++ ldr r3, [r2, r3] ++ cbnz r3, .L2320 ++ ldr r0, [r1, #4] ++ movs r1, #1 ++ ubfx r0, r0, #10, #16 ++ bl FtlFreeSysBlkQueueIn ++.L2320: ++ add r8, r8, #1 ++ b .L2319 ++.L2324: ++ movs r4, #0 ++ b .L2295 ++.L2343: ++ .align 2 ++.L2342: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock ++ .align 1 ++ .global FtlBbmTblFlush ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlBbmTblFlush, %function ++FtlBbmTblFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r7, .L2358 ++ ldr r6, [r7, #228] ++ cmp r6, #0 ++ bne .L2346 ++ ldr r4, .L2358+4 ++ mov r1, r6 ++ ldr r0, [r7, #3316] ++ ldr r5, .L2358+8 ++ ldr r3, [r7, #3340] ++ add r8, r4, #2480 ++ ldrh r2, [r4, #2400] ++ str r0, [r5, #1264] ++ str r3, [r5, #1268] ++ bl ftl_memset ++.L2347: ++ ldrh r3, [r4, #2346] ++ cmp r6, r3 ++ blt .L2348 ++ ldr r6, [r5, #1268] ++ movs r2, #16 ++ movs r1, #255 ++ ldr fp, .L2358+24 ++ mov r8, #0 ++ mov r0, r6 ++ mov r9, r8 ++ bl ftl_memset ++ movw r3, #61649 ++ strh r3, [r6] @ movhi ++ ldr r3, [r4, #2464] ++ str r3, [r6, #4] ++ ldrh r3, [r4, #2456] ++ strh r3, [r6, #2] @ movhi ++ ldrh r3, [r4, #2460] ++ strh r3, [r6, #8] @ movhi ++ ldrh r3, [r4, #2462] ++ strh r3, [r6, #10] @ movhi ++ ldr r3, [r4, #2320] ++ strh r3, [r6, #12] @ movhi ++.L2349: ++ ldr r3, [r7, #3316] ++ mov r10, #0 ++ ldrh r2, [r4, #2458] ++ ldrh r1, [r4, #2456] ++ str r3, [r5, #1264] ++ ldr r3, [r7, #3340] ++ str r10, [r5, #1256] ++ str r3, [r5, #1268] ++ orr r3, r2, r1, lsl #10 ++ ldrh r0, [r6, #10] ++ str r3, [r5, #1260] ++ ldrh r3, [r4, #2460] ++ str r0, [sp] ++ ldr r0, .L2358+12 ++ bl printk ++ ldrh r3, [r4, #2392] ++ ldrh r2, [r4, #2458] ++ subs r3, r3, #1 ++ cmp r2, r3 ++ blt .L2350 ++ ldr r3, [r4, #2464] ++ ldrh r2, [r4, #2456] ++ ldr r0, [r7, #232] ++ adds r3, r3, #1 ++ strh r10, [r4, #2458] @ movhi ++ str r3, [r4, #2464] ++ str r3, [r6, #4] ++ ldrh r3, [r4, #2460] ++ strh r2, [r6, #8] @ movhi ++ strh r2, [r4, #2460] @ movhi ++ movs r2, #1 ++ strh r3, [r4, #2456] @ movhi ++ mov r1, r2 ++ lsls r3, r3, #10 ++ str r3, [r5, #1260] ++ str r3, [r0, #4] ++ bl FlashEraseBlocks ++.L2350: ++ movs r3, #1 ++ mov r0, fp ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldrh r3, [r4, #2458] ++ adds r3, r3, #1 ++ strh r3, [r4, #2458] @ movhi ++ ldr r3, [r5, #1256] ++ adds r2, r3, #1 ++ bne .L2351 ++ add r8, r8, #1 ++ ldr r1, [r5, #1260] ++ uxth r8, r8 ++ ldr r0, .L2358+16 ++ bl printk ++ cmp r8, #3 ++ bls .L2349 ++ mov r2, r8 ++ ldr r1, [r5, #1260] ++ ldr r0, .L2358+20 ++ bl printk ++ movs r3, #1 ++ str r3, [r7, #228] ++.L2346: ++ movs r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2348: ++ ldrh r2, [r7, #3404] ++ ldr r3, [r5, #1264] ++ ldr r1, [r8, #4]! ++ mul r0, r6, r2 ++ lsls r2, r2, #2 ++ adds r6, r6, #1 ++ add r0, r3, r0, lsl #2 ++ bl ftl_memcpy ++ b .L2347 ++.L2354: ++ mov r9, #1 ++ b .L2349 ++.L2351: ++ add r9, r9, #1 ++ cmp r9, #1 ++ ble .L2354 ++ cmp r3, #256 ++ bne .L2346 ++ b .L2349 ++.L2359: ++ .align 2 ++.L2358: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC126 ++ .word .LC127 ++ .word .LC128 ++ .word .LANCHOR4+1256 ++ .fnend ++ .size FtlBbmTblFlush, .-FtlBbmTblFlush ++ .align 1 ++ .global allocate_data_superblock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type allocate_data_superblock, %function ++allocate_data_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r5, r0 ++ ldr r4, .L2409 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r3, [r4, #228] ++ cmp r3, #0 ++ bne .L2361 ++.L2362: ++ ldr r3, .L2409+4 ++ ldr r7, .L2409+8 ++ ldrb r2, [r5, #8] @ zero_extendqisi2 ++ cmp r5, r3 ++ bne .L2363 ++ ldrh ip, [r4, #316] ++ ldr r3, [r4, #1132] ++ lsr r6, ip, #1 ++ mul r0, r3, ip ++ adds r1, r6, #1 ++ add r1, r1, r0, lsr #2 ++ ldr r0, [r7, #2248] ++ uxth r1, r1 ++ cbz r0, .L2364 ++ ldr r0, [r4, #532] ++ cmp r0, #39 ++ bhi .L2364 ++ cmp r0, #2 ++ bls .L2391 ++ tst ip, #1 ++ beq .L2387 ++ cmp r3, #0 ++ beq .L2391 ++.L2387: ++ mov r1, r6 ++ b .L2364 ++.L2363: ++ cmp r2, #1 ++ bne .L2391 ++ ldrh r3, [r7, #2344] ++ cmp r3, #1 ++ beq .L2391 ++ ldrb r3, [r7, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2391 ++ ldrh r3, [r4, #316] ++ ldr r0, [r7, #2248] ++ lsrs r1, r3, #3 ++ cbz r0, .L2364 ++ ldr r0, [r4, #532] ++ cmp r0, #1 ++ bhi .L2364 ++ rsb r3, r3, r3, lsl #3 ++ ubfx r1, r3, #3, #16 ++.L2364: ++ cbz r1, .L2365 ++ subs r1, r1, #1 ++ uxth r1, r1 ++.L2365: ++ ldr r0, .L2409+12 ++ bl List_pop_index_node ++ ldrh r3, [r4, #316] ++ uxth r9, r0 ++ subs r3, r3, #1 ++ strh r3, [r4, #316] @ movhi ++ ldrh r3, [r7, #2332] ++ cmp r3, r9 ++ bls .L2362 ++ ldr r3, [r4, #300] ++ movw fp, #65535 ++ mov r6, r9 ++ ldrh r8, [r3, r9, lsl #1] ++ cmp r8, #0 ++ bne .L2362 ++ strh r9, [r5] @ movhi ++ mov r0, r5 ++ bl make_superblock ++ ldrb r3, [r5, #7] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2367 ++ ldr r0, [r4, #232] ++ movs r2, #36 ++ ldrh r1, [r7, #2324] ++ add r10, r5, #16 ++ mov ip, r10 ++ mov lr, r8 ++ mov r3, r0 ++ str r2, [sp, #8] ++ mla r1, r2, r1, r0 ++ str r1, [sp, #4] ++.L2368: ++ ldr r2, [sp, #4] ++ cmp r2, r3 ++ bne .L2370 ++ ldr r3, [r7, #2248] ++ cbz r3, .L2371 ++ ldr r3, .L2409+16 ++ cmp r5, r3 ++ bne .L2371 ++ ldr r3, [r4, #236] ++ ldrh r3, [r3, r6, lsl #1] ++ cmp r3, #40 ++ itt hi ++ movhi r3, #0 ++ strbhi r3, [r4, #328] ++.L2371: ++ ldrb r3, [r5, #8] @ zero_extendqisi2 ++ ldr r2, [r4, #236] ++ cmp r3, #0 ++ bne .L2372 ++ ldrh r3, [r2, r6, lsl #1] ++ cmp r3, #0 ++ beq .L2373 ++ ldrh r1, [r7, #2382] ++ add r3, r3, r1 ++.L2407: ++ strh r3, [r2, r6, lsl #1] @ movhi ++ movs r1, #0 ++ ldr r3, [r4, #516] ++ mov r0, r9 ++ adds r3, r3, #1 ++ str r3, [r4, #516] ++ bl ftl_set_blk_mode ++.L2375: ++ ldr r3, [r4, #236] ++ ldr r2, [r4, #528] ++ ldrh r0, [r7, #2382] ++ ldrh r3, [r3, r6, lsl #1] ++ ldrh r1, [r7, #2332] ++ cmp r3, r2 ++ ldr r2, [r4, #516] ++ it hi ++ strhi r3, [r4, #528] ++ ldr r3, [r4, #520] ++ mla r0, r2, r0, r3 ++ bl __aeabi_uidiv ++ ldr r2, [r4, #3360] ++ ldr r1, [r4, #232] ++ str r0, [r4, #524] ++ ldr r3, [r2, #16] ++ adds r3, r3, #1 ++ str r3, [r2, #16] ++ movs r2, #36 ++ mla r2, r2, r8, r1 ++ adds r3, r1, #4 ++ adds r2, r2, #40 ++.L2377: ++ adds r3, r3, #36 ++ cmp r2, r3 ++ bne .L2378 ++ ldrb r3, [r7, #152] @ zero_extendqisi2 ++ cbz r3, .L2379 ++ ldrb r3, [r5, #8] @ zero_extendqisi2 ++ mov r2, r8 ++ ldr r0, [r4, #232] ++ cmp r3, #1 ++ ite eq ++ moveq r1, #0 ++ movne r1, #1 ++ bl FlashEraseBlocks ++.L2379: ++ ldrb r1, [r5, #8] @ zero_extendqisi2 ++ mov r2, r8 ++ ldr r0, [r4, #232] ++ mov fp, #0 ++ bl FlashEraseBlocks ++ mov r3, fp ++ movs r1, #36 ++.L2381: ++ uxth r2, fp ++ cmp r8, r2 ++ bhi .L2383 ++ cmp r3, #0 ++ ble .L2384 ++ mov r0, r9 ++ bl update_multiplier_value ++ bl FtlBbmTblFlush ++.L2384: ++ ldrb r2, [r5, #7] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L2385 ++ ldr r3, [r4, #300] ++ movw r2, #65535 ++ strh r2, [r3, r6, lsl #1] @ movhi ++ b .L2362 ++.L2391: ++ movs r1, #0 ++ b .L2365 ++.L2367: ++ ldr r3, [r4, #300] ++ strh fp, [r3, r9, lsl #1] @ movhi ++ b .L2362 ++.L2370: ++ str lr, [r3, #8] ++ str lr, [r3, #12] ++ ldrh r1, [ip], #2 ++ cmp r1, fp ++ beq .L2369 ++ ldr r2, [sp, #8] ++ lsls r1, r1, #10 ++ mla r2, r2, r8, r0 ++ add r8, r8, #1 ++ uxth r8, r8 ++ str r1, [r2, #4] ++.L2369: ++ adds r3, r3, #36 ++ b .L2368 ++.L2373: ++ movs r3, #2 ++ b .L2407 ++.L2372: ++ ldrh r3, [r2, r6, lsl #1] ++ mov r0, r9 ++ adds r3, r3, #1 ++ strh r3, [r2, r6, lsl #1] @ movhi ++ ldr r3, [r4, #520] ++ adds r3, r3, #1 ++ str r3, [r4, #520] ++ bl ftl_set_blk_mode.part.9 ++ b .L2375 ++.L2378: ++ ldr r1, [r3, #-36] ++ bic r1, r1, #1020 ++ bic r1, r1, #3 ++ str r1, [r3, #-36] ++ b .L2377 ++.L2383: ++ mul r2, r1, fp ++ ldr r0, [r4, #232] ++ add ip, r0, r2 ++ ldr r2, [r0, r2] ++ adds r0, r2, #1 ++ bne .L2382 ++ ldr r0, [ip, #4] ++ adds r3, r3, #1 ++ str r1, [sp, #12] ++ str r2, [sp, #8] ++ ubfx r0, r0, #10, #16 ++ str r3, [sp, #4] ++ bl FtlBbmMapBadBlock ++ ldr r2, [sp, #8] ++ ldr r1, [sp, #12] ++ ldr r3, [sp, #4] ++ strh r2, [r10] @ movhi ++ ldrb r2, [r5, #7] @ zero_extendqisi2 ++ subs r2, r2, #1 ++ strb r2, [r5, #7] ++.L2382: ++ add fp, fp, #1 ++ add r10, r10, #2 ++ b .L2381 ++.L2385: ++ ldrh r3, [r7, #2390] ++ strh r9, [r5] @ movhi ++ smulbb r3, r3, r2 ++ movs r2, #0 ++ strh r2, [r5, #2] @ movhi ++ strb r2, [r5, #6] ++ ldr r2, [r4, #508] ++ uxth r3, r3 ++ strh r3, [r5, #4] @ movhi ++ str r2, [r5, #12] ++ adds r2, r2, #1 ++ str r2, [r4, #508] ++ ldr r2, [r4, #300] ++ ldrh r1, [r5] ++ strh r3, [r2, r1, lsl #1] @ movhi ++.L2361: ++ movs r0, #0 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2410: ++ .align 2 ++.L2409: ++ .word .LANCHOR2 ++ .word .LANCHOR2+416 ++ .word .LANCHOR0 ++ .word .LANCHOR2+312 ++ .word .LANCHOR2+320 ++ .fnend ++ .size allocate_data_superblock, .-allocate_data_superblock ++ .align 1 ++ .global FtlGcFreeBadSuperBlk ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcFreeBadSuperBlk, %function ++FtlGcFreeBadSuperBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r9, r0 ++ ldr r4, .L2423 ++ ldrh r3, [r4, #1182] ++ cbz r3, .L2412 ++ ldr r8, .L2423+8 ++ movs r6, #0 ++ add r10, r4, #1184 ++.L2413: ++ ldrh r2, [r8, #2324] ++ uxth r3, r6 ++ cmp r2, r3 ++ bhi .L2419 ++ bl FtlGcReFreshBadBlk ++.L2412: ++ movs r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2419: ++ uxtah r3, r8, r6 ++ mov r1, r9 ++ movs r7, #0 ++ ldrb r0, [r3, #2350] @ zero_extendqisi2 ++ bl V2P_block ++ ldr r2, .L2423+4 ++ mov fp, r0 ++.L2414: ++ ldrh r3, [r4, #1182] ++ uxth r5, r7 ++ cmp r3, r5 ++ bhi .L2418 ++ adds r6, r6, #1 ++ b .L2413 ++.L2418: ++ uxth r3, r7 ++ add r1, r4, r3, lsl #1 ++ ldrh r1, [r1, #1184] ++ cmp r1, fp ++ bne .L2415 ++ mov r1, fp ++ mov r0, r2 ++ str r3, [sp, #4] ++ str r2, [sp] ++ bl printk ++ mov r0, fp ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ ldr r3, [sp, #4] ++ ldrh r1, [r4, #1182] ++ ldr r2, [sp] ++ add r3, r10, r3, lsl #1 ++.L2416: ++ cmp r5, r1 ++ bcc .L2417 ++ subs r1, r1, #1 ++ strh r1, [r4, #1182] @ movhi ++.L2415: ++ adds r7, r7, #1 ++ b .L2414 ++.L2417: ++ ldrh r0, [r3, #2]! ++ adds r5, r5, #1 ++ uxth r5, r5 ++ strh r0, [r3, #-2] @ movhi ++ b .L2416 ++.L2424: ++ .align 2 ++.L2423: ++ .word .LANCHOR2 ++ .word .LC129 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk ++ .align 1 ++ .global update_vpc_list ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type update_vpc_list, %function ++update_vpc_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L2433 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ mov r4, r0 ++ mov r5, r2 ++ ldr r3, [r2, #300] ++ ldrh r3, [r3, r0, lsl #1] ++ cbnz r3, .L2426 ++ ldrh r1, [r2, #556] ++ cmp r1, r0 ++ bne .L2427 ++ movw r3, #65535 ++ strh r3, [r2, #556] @ movhi ++.L2428: ++ mov r1, r4 ++ ldr r0, .L2433+4 ++ bl List_remove_node ++ ldrh r3, [r5, #308] ++ mov r0, r4 ++ subs r3, r3, #1 ++ strh r3, [r5, #308] @ movhi ++ bl free_data_superblock ++ mov r0, r4 ++ bl FtlGcFreeBadSuperBlk ++ movs r3, #1 ++ b .L2425 ++.L2427: ++ ldrh r1, [r2, #320] ++ cmp r1, r0 ++ beq .L2425 ++ ldrh r1, [r2, #368] ++ cmp r1, r0 ++ beq .L2425 ++ ldrh r2, [r2, #416] ++ cmp r2, r0 ++ bne .L2428 ++.L2425: ++ mov r0, r3 ++ pop {r3, r4, r5, pc} ++.L2426: ++ bl List_update_data_list ++ movs r3, #0 ++ b .L2425 ++.L2434: ++ .align 2 ++.L2433: ++ .word .LANCHOR2 ++ .word .LANCHOR2+296 ++ .fnend ++ .size update_vpc_list, .-update_vpc_list ++ .align 1 ++ .global decrement_vpc_count ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type decrement_vpc_count, %function ++decrement_vpc_count: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ movw r3, #65535 ++ cmp r0, r3 ++ mov r4, r0 ++ ldr r5, .L2445 ++ beq .L2436 ++ ldr r3, [r5, #300] ++ ldrh r2, [r3, r0, lsl #1] ++ cbnz r2, .L2437 ++ mov r1, r0 ++ ldr r0, .L2445+4 ++ bl printk ++ ldr r3, [r5, #300] ++ movs r2, #32 ++ mov r1, r4 ++ add r0, r5, #312 ++ strh r2, [r3, r4, lsl #1] @ movhi ++ bl test_node_in_list ++ cbz r0, .L2438 ++ mov r1, r4 ++ add r0, r5, #312 ++ bl List_remove_node ++ ldrh r3, [r5, #316] ++ mov r0, r4 ++ subs r3, r3, #1 ++ strh r3, [r5, #316] @ movhi ++ bl INSERT_DATA_LIST ++ ldr r3, [r5, #300] ++ mov r1, r4 ++ ldr r0, .L2445+8 ++ ldrh r2, [r3, r4, lsl #1] ++ bl printk ++.L2438: ++ mov r0, r4 ++ bl FtlGcRefreshBlock ++.L2441: ++ movs r0, #0 ++ pop {r3, r4, r5, pc} ++.L2437: ++ subs r2, r2, #1 ++ strh r2, [r3, r0, lsl #1] @ movhi ++.L2436: ++ ldrh r0, [r5, #3460] ++ movw r3, #65535 ++ cmp r0, r3 ++ bne .L2440 ++ strh r4, [r5, #3460] @ movhi ++ b .L2441 ++.L2440: ++ cmp r4, r0 ++ beq .L2441 ++ bl update_vpc_list ++ adds r0, r0, #0 ++ strh r4, [r5, #3460] @ movhi ++ it ne ++ movne r0, #1 ++ pop {r3, r4, r5, pc} ++.L2446: ++ .align 2 ++.L2445: ++ .word .LANCHOR2 ++ .word .LC130 ++ .word .LC131 ++ .fnend ++ .size decrement_vpc_count, .-decrement_vpc_count ++ .align 1 ++ .global FtlSlcSuperblockCheck ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlSlcSuperblockCheck, %function ++FtlSlcSuperblockCheck: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r4, r0 ++ ldrh r3, [r0, #4] ++ cmp r3, #0 ++ beq .L2447 ++ ldrh r3, [r0] ++ movw r6, #65535 ++ cmp r3, r6 ++ beq .L2447 ++ ldrb r3, [r0, #6] @ zero_extendqisi2 ++ ldr r5, .L2458 ++ ldr r7, .L2458+4 ++ adds r3, r3, #8 ++ ldrh r3, [r0, r3, lsl #1] ++.L2451: ++ cmp r3, r6 ++ beq .L2453 ++ ldrb r2, [r4, #8] @ zero_extendqisi2 ++ cmp r2, #1 ++ bne .L2454 ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cbnz r3, .L2454 ++ ldrh r3, [r4, #2] ++ add r3, r7, r3, lsl #1 ++ ldrh r3, [r3, #1220] ++ cmp r3, r6 ++ bne .L2454 ++ ldrh r3, [r4, #4] ++ ldrh r0, [r4] ++ subs r3, r3, #1 ++ strh r3, [r4, #4] @ movhi ++ bl decrement_vpc_count ++ ldrh r2, [r4, #4] ++ cbnz r2, .L2453 ++ ldrh r3, [r4, #2] ++ strb r2, [r4, #6] ++ adds r3, r3, #1 ++ strh r3, [r4, #2] @ movhi ++ pop {r3, r4, r5, r6, r7, pc} ++.L2453: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ ldrh r2, [r5, #2324] ++ adds r3, r3, #1 ++ uxtb r3, r3 ++ cmp r2, r3 ++ strb r3, [r4, #6] ++ bne .L2452 ++ ldrh r3, [r4, #2] ++ adds r3, r3, #1 ++ strh r3, [r4, #2] @ movhi ++ movs r3, #0 ++ strb r3, [r4, #6] ++.L2452: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ adds r3, r3, #8 ++ ldrh r3, [r4, r3, lsl #1] ++ b .L2451 ++.L2454: ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cbz r3, .L2447 ++ cmp r2, #1 ++ bne .L2447 ++ ldrh r2, [r4, #2] ++ ldrh r3, [r5, #2392] ++ cmp r2, r3 ++ bcc .L2447 ++ ldr r3, .L2458+4 ++ ldrh r1, [r4] ++ ldrh r0, [r4, #4] ++ ldr r2, [r3, #300] ++ ldrh r3, [r2, r1, lsl #1] ++ subs r3, r3, r0 ++ strh r3, [r2, r1, lsl #1] @ movhi ++ movs r3, #0 ++ ldrh r2, [r5, #2390] ++ strh r3, [r4, #4] @ movhi ++ strb r3, [r4, #6] ++ strh r2, [r4, #2] @ movhi ++.L2447: ++ pop {r3, r4, r5, r6, r7, pc} ++.L2459: ++ .align 2 ++.L2458: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlSlcSuperblockCheck, .-FtlSlcSuperblockCheck ++ .align 1 ++ .global get_new_active_ppa ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type get_new_active_ppa, %function ++get_new_active_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movs r3, #0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ strb r3, [r0, #10] ++ mov r4, r0 ++ movw r7, #65535 ++ ldrb r3, [r0, #6] @ zero_extendqisi2 ++ ldr r5, .L2475 ++ ldr r6, .L2475+4 ++ adds r3, r3, #8 ++ ldrh r2, [r0, r3, lsl #1] ++.L2461: ++ cmp r2, r7 ++ beq .L2462 ++ ldrb r3, [r4, #8] @ zero_extendqisi2 ++ ldrh r1, [r4, #2] ++ cmp r3, #1 ++ ldrh r3, [r4, #4] ++ bne .L2464 ++ ldrb r0, [r5, #152] @ zero_extendqisi2 ++ cbnz r0, .L2464 ++ add r0, r6, r1, lsl #1 ++ ldrh r0, [r0, #1220] ++ cmp r0, r7 ++ bne .L2464 ++ subs r3, r3, #1 ++ ldrh r0, [r4] ++ strh r3, [r4, #4] @ movhi ++ bl decrement_vpc_count ++.L2462: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ ldrh r2, [r5, #2324] ++ adds r3, r3, #1 ++ uxtb r3, r3 ++ cmp r2, r3 ++ strb r3, [r4, #6] ++ bne .L2463 ++ ldrh r3, [r4, #2] ++ adds r3, r3, #1 ++ strh r3, [r4, #2] @ movhi ++ movs r3, #0 ++ strb r3, [r4, #6] ++.L2463: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ adds r3, r3, #8 ++ ldrh r2, [r4, r3, lsl #1] ++ b .L2461 ++.L2464: ++ ldr r8, .L2475+4 ++ orr r6, r1, r2, lsl #10 ++ movw r7, #65535 ++ subs r3, r3, #1 ++ strh r3, [r4, #4] @ movhi ++.L2465: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ ldrh r1, [r5, #2324] ++.L2467: ++ adds r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, r1 ++ itttt eq ++ ldrheq r3, [r4, #2] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #2] @ movhi ++ moveq r3, #0 ++ add r2, r3, #8 ++ ldrh r2, [r4, r2, lsl #1] ++ cmp r2, r7 ++ beq .L2467 ++ strb r3, [r4, #6] ++ ldrb r3, [r4, #8] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L2460 ++ ldrb r2, [r5, #152] @ zero_extendqisi2 ++ ldrh r3, [r4, #2] ++ cbnz r2, .L2469 ++ add r3, r8, r3, lsl #1 ++ ldrh r3, [r3, #1220] ++ cmp r3, r7 ++ bne .L2460 ++ ldrh r3, [r4, #4] ++ cbz r3, .L2460 ++ subs r3, r3, #1 ++ ldrh r0, [r4] ++ strh r3, [r4, #4] @ movhi ++ bl decrement_vpc_count ++ b .L2465 ++.L2469: ++ ldrh r2, [r5, #2392] ++ cmp r3, r2 ++ bcc .L2460 ++ ldr r3, .L2475+4 ++ ldrh r1, [r4] ++ ldrh r0, [r4, #4] ++ ldr r2, [r3, #300] ++ ldrh r3, [r2, r1, lsl #1] ++ subs r3, r3, r0 ++ strh r3, [r2, r1, lsl #1] @ movhi ++ movs r3, #0 ++ ldrh r2, [r5, #2390] ++ strh r3, [r4, #4] @ movhi ++ strb r3, [r4, #6] ++ strh r2, [r4, #2] @ movhi ++.L2460: ++ mov r0, r6 ++ pop {r4, r5, r6, r7, r8, pc} ++.L2476: ++ .align 2 ++.L2475: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size get_new_active_ppa, .-get_new_active_ppa ++ .align 1 ++ .global FtlVpcTblFlush ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlVpcTblFlush, %function ++FtlVpcTblFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ ldr r4, .L2500 ++ ldr r3, [r4, #228] ++ cmp r3, #0 ++ bne .L2479 ++ ldr r5, .L2500+4 ++ movs r1, #255 ++ ldr r2, [r4, #3316] ++ ldr r7, [r4, #3340] ++ ldr r6, .L2500+8 ++ str r2, [r5, #1264] ++ ldrh r2, [r4, #540] ++ str r7, [r5, #1268] ++ str r3, [r7, #12] ++ strh r2, [r7, #2] @ movhi ++ movw r2, #61604 ++ strh r2, [r7] @ movhi ++ ldr r2, [r4, #548] ++ str r3, [r7, #8] ++ ldr r3, .L2500+12 ++ str r2, [r7, #4] ++ ldrh r2, [r4, #322] ++ str r3, [r4, #244] ++ ldr r3, .L2500+16 ++ str r3, [r4, #248] ++ ldrh r3, [r4, #546] ++ strh r3, [r4, #252] @ movhi ++ ldrh r3, [r6, #2346] ++ strb r3, [r4, #254] ++ ldrh r3, [r4, #320] ++ strh r3, [r4, #258] @ movhi ++ ldrb r3, [r4, #326] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #6 ++ ldrh r2, [r4, #370] ++ strh r3, [r4, #260] @ movhi ++ ldrb r3, [r4, #328] @ zero_extendqisi2 ++ strb r3, [r4, #255] ++ ldrh r3, [r4, #368] ++ strh r3, [r4, #262] @ movhi ++ ldrb r3, [r4, #374] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #6 ++ strh r3, [r4, #264] @ movhi ++ ldrb r3, [r4, #376] @ zero_extendqisi2 ++ strb r3, [r4, #256] ++ ldrh r3, [r4, #416] ++ strh r3, [r4, #266] @ movhi ++ ldrh r2, [r4, #418] ++ ldrb r3, [r4, #422] @ zero_extendqisi2 ++ ldr r0, [r5, #1264] ++ orr r3, r3, r2, lsl #6 ++ ldrh r2, [r6, #2400] ++ strh r3, [r4, #268] @ movhi ++ ldrb r3, [r4, #424] @ zero_extendqisi2 ++ strb r3, [r4, #257] ++ ldr r3, [r4, #516] ++ str r3, [r4, #276] ++ ldr r3, [r4, #508] ++ str r3, [r4, #284] ++ ldr r3, [r4, #512] ++ str r3, [r4, #280] ++ ldrh r3, [r4, #1174] ++ strh r3, [r4, #288] @ movhi ++ ldrh r3, [r4, #1176] ++ strh r3, [r4, #290] @ movhi ++ bl ftl_memset ++ movs r2, #48 ++ add r1, r4, #244 ++ ldr r0, [r5, #1264] ++ bl ftl_memcpy ++ ldrh r2, [r6, #2332] ++ ldr r0, [r5, #1264] ++ ldr r1, [r4, #300] ++ lsls r2, r2, #1 ++ adds r0, r0, #48 ++ bl ftl_memcpy ++ ldrh r0, [r6, #2332] ++ ldr r3, [r5, #1264] ++ ldr r1, [r6, #32] ++ lsrs r2, r0, #3 ++ lsls r0, r0, #1 ++ adds r0, r0, #51 ++ adds r2, r2, #4 ++ bic r0, r0, #3 ++ add r0, r0, r3 ++ bl ftl_memcpy ++ ldrh r3, [r6, #2436] ++ cbz r3, .L2480 ++ ldrh r0, [r6, #2332] ++ ldrh r2, [r6, #2428] ++ ldr r1, [r4, #3388] ++ lsrs r3, r0, #3 ++ lsls r2, r2, #2 ++ add r3, r3, r0, lsl #1 ++ ldr r0, [r5, #1264] ++ adds r3, r3, #52 ++ ubfx r3, r3, #2, #14 ++ add r0, r0, r3, lsl #2 ++ bl ftl_memcpy ++.L2480: ++ ldr fp, .L2500+24 ++ mov r8, #0 ++ movw r9, #65535 ++ mov r10, r8 ++ movs r0, #0 ++ bl FtlUpdateVaildLpn ++.L2481: ++ ldr r3, [r4, #3316] ++ ldrh r1, [r4, #542] ++ ldrh r2, [r4, #540] ++ str r3, [r5, #1264] ++ ldr r3, [r4, #3340] ++ str r3, [r5, #1268] ++ orr r3, r1, r2, lsl #10 ++ str r3, [r5, #1260] ++ ldrh r3, [r6, #2392] ++ subs r3, r3, #1 ++ cmp r1, r3 ++ blt .L2482 ++ ldrh r9, [r4, #544] ++ strh r10, [r4, #542] @ movhi ++ strh r2, [r4, #544] @ movhi ++ bl FtlFreeSysBlkQueueOut ++ ldr r3, [r4, #508] ++ strh r0, [r4, #540] @ movhi ++ adds r2, r3, #1 ++ str r3, [r4, #548] ++ str r2, [r4, #508] ++ lsls r2, r0, #10 ++ str r2, [r5, #1260] ++ str r3, [r7, #4] ++ strh r0, [r7, #2] @ movhi ++.L2482: ++ ldrb r3, [r6, #36] @ zero_extendqisi2 ++ cbz r3, .L2483 ++ ldrh r1, [r6, #2400] ++ ldr r0, [r4, #3316] ++ bl js_hash ++ str r0, [r7, #12] ++.L2483: ++ movs r3, #1 ++ mov r0, fp ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldrh r3, [r4, #542] ++ ldr r2, [r5, #1256] ++ adds r3, r3, #1 ++ uxth r3, r3 ++ adds r1, r2, #1 ++ strh r3, [r4, #542] @ movhi ++ bne .L2484 ++ cmp r3, #1 ++ add r8, r8, #1 ++ it eq ++ ldrheq r3, [r6, #2392] ++ uxth r8, r8 ++ itt eq ++ addeq r3, r3, #-1 ++ strheq r3, [r4, #542] @ movhi ++ cmp r8, #3 ++ bls .L2481 ++ mov r2, r8 ++ ldr r1, [r5, #1260] ++ ldr r0, .L2500+20 ++ bl printk ++ movs r3, #1 ++ str r3, [r4, #228] ++.L2479: ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2484: ++ cmp r3, #1 ++ beq .L2481 ++ cmp r2, #256 ++ beq .L2481 ++ movw r3, #65535 ++ cmp r9, r3 ++ beq .L2479 ++ movs r1, #1 ++ mov r0, r9 ++ bl FtlFreeSysBlkQueueIn ++ b .L2479 ++.L2501: ++ .align 2 ++.L2500: ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .word .LANCHOR0 ++ .word 1179929683 ++ .word 1342177379 ++ .word .LC132 ++ .word .LANCHOR4+1256 ++ .fnend ++ .size FtlVpcTblFlush, .-FtlVpcTblFlush ++ .align 1 ++ .global FtlSuperblockPowerLostFix ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlSuperblockPowerLostFix, %function ++FtlSuperblockPowerLostFix: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r4, r0 ++ ldr r5, .L2517 ++ .pad #40 ++ sub sp, sp, #40 ++ ldr r10, [r5, #228] ++ cmp r10, #0 ++ bne .L2502 ++ ldr r3, .L2517+4 ++ ldrb r2, [r3, #152] @ zero_extendqisi2 ++ mov r8, r3 ++ cmp r2, #0 ++ beq .L2513 ++ ldrb r3, [r0, #8] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L2513 ++ ldrh r7, [r0, #4] ++ mov r10, r3 ++.L2504: ++ mov r3, #-1 ++ ldr r6, [r5, #3340] ++ str r3, [sp, #20] ++ mov r9, #0 ++ ldr r3, [r5, #3316] ++ movw r2, #61589 ++ str r6, [sp, #16] ++ str r3, [sp, #12] ++ mvn r3, #2 ++ str r3, [r6, #8] ++ mvn r3, #1 ++ str r3, [r6, #12] ++ ldrh r3, [r4] ++ strh r9, [r6] @ movhi ++ strh r3, [r6, #2] @ movhi ++ ldr r3, [r5, #3316] ++ str r2, [r3] ++ add r2, r2, #304087040 ++ ldr r3, [r5, #3316] ++ add r2, r2, #1269760 ++ addw r2, r2, #1507 ++ str r2, [r3, #4] ++.L2505: ++ adds r7, r7, #-1 ++ bcc .L2508 ++ ldrh r3, [r4, #4] ++ cbnz r3, .L2506 ++.L2508: ++ ldr r2, [r5, #300] ++ ldrh r1, [r4] ++ ldrh r0, [r4, #4] ++ ldrh r3, [r2, r1, lsl #1] ++ subs r3, r3, r0 ++ strh r3, [r2, r1, lsl #1] @ movhi ++ ldrh r3, [r8, #2390] ++ strh r3, [r4, #2] @ movhi ++ movs r3, #0 ++ strb r3, [r4, #6] ++ strh r3, [r4, #4] @ movhi ++.L2502: ++ add sp, sp, #40 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2513: ++ movs r7, #12 ++ b .L2504 ++.L2506: ++ mov r0, r4 ++ bl get_new_active_ppa ++ str r0, [sp, #8] ++ adds r0, r0, #1 ++ beq .L2508 ++ ldr r3, [r5, #512] ++ movs r1, #1 ++ add r0, sp, #4 ++ str r3, [r6, #4] ++ adds r3, r3, #1 ++ adds r2, r3, #1 ++ mov r2, r10 ++ it eq ++ moveq r3, r9 ++ str r3, [r5, #512] ++ movs r3, #0 ++ bl FlashProgPages ++ ldrh r0, [r4] ++ bl decrement_vpc_count ++ b .L2505 ++.L2518: ++ .align 2 ++.L2517: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlSuperblockPowerLostFix, .-FtlSuperblockPowerLostFix ++ .align 1 ++ .global ftl_map_blk_gc ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_map_blk_gc, %function ++ftl_map_blk_gc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, r0 ++ ldr r5, [r0, #12] ++ ldr r10, [r0, #24] ++ bl ftl_free_no_use_map_blk ++ ldrh r3, [r4, #10] ++ ldrh r2, [r4, #8] ++ subs r3, r3, #4 ++ cmp r2, r3 ++ blt .L2520 ++ uxth r0, r0 ++ ldrh r9, [r5, r0, lsl #1] ++ cmp r9, #0 ++ beq .L2520 ++ ldr r3, [r4, #32] ++ cbnz r3, .L2520 ++ movs r2, #1 ++ str r2, [r4, #32] ++ strh r3, [r5, r0, lsl #1] @ movhi ++ ldrh r3, [r4, #8] ++ ldrh r2, [r4, #2] ++ subs r3, r3, #1 ++ strh r3, [r4, #8] @ movhi ++ ldr r3, .L2531 ++ ldrh r3, [r3, #2392] ++ cmp r2, r3 ++ bcc .L2521 ++ mov r0, r4 ++ bl ftl_map_blk_alloc_new_blk ++.L2521: ++ ldr r5, .L2531+4 ++ movs r6, #0 ++ ldr fp, .L2531+16 ++.L2522: ++ ldrh r2, [r4, #6] ++ uxth r3, r6 ++ cmp r2, r3 ++ bhi .L2527 ++ movs r1, #1 ++ mov r0, r9 ++ bl FtlFreeSysBlkQueueIn ++ movs r3, #0 ++ str r3, [r4, #32] ++.L2520: ++ ldr r3, .L2531 ++ ldrh r2, [r4, #2] ++ ldrh r3, [r3, #2392] ++ cmp r2, r3 ++ bcc .L2525 ++ mov r0, r4 ++ bl ftl_map_blk_alloc_new_blk ++ b .L2525 ++.L2527: ++ uxth r7, r6 ++ add r2, r10, r7, lsl #2 ++ str r2, [sp] ++ ldr r2, [r10, r7, lsl #2] ++ cmp r9, r2, lsr #10 ++ bne .L2523 ++ ldr r2, [fp, #3320] ++ ldr r8, [fp, #3340] ++ ldr r0, .L2531+8 ++ str r2, [r5, #1264] ++ str r8, [r5, #1268] ++ ldr r2, [r10, r7, lsl #2] ++ str r3, [sp, #4] ++ str r2, [r5, #1260] ++ movs r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [r5, #1256] ++ ldr r3, [sp, #4] ++ adds r2, r2, #1 ++ bne .L2524 ++.L2526: ++ ldr r2, [sp] ++ movs r3, #0 ++ ldr r0, .L2531+12 ++ str r3, [r2] ++ ldrh r2, [r8, #8] ++ ldr r1, [r5, #1260] ++ bl printk ++ movs r3, #1 ++ str r3, [fp, #228] ++.L2525: ++ movs r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2524: ++ ldrh r2, [r8, #8] ++ cmp r2, r3 ++ bne .L2526 ++ ldrh r2, [r8] ++ ldrh r3, [r4, #4] ++ cmp r2, r3 ++ bne .L2526 ++ ldr r2, [r5, #1264] ++ mov r1, r7 ++ mov r0, r4 ++ bl FtlMapWritePage ++.L2523: ++ adds r6, r6, #1 ++ b .L2522 ++.L2532: ++ .align 2 ++.L2531: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LANCHOR4+1256 ++ .word .LC133 ++ .word .LANCHOR2 ++ .fnend ++ .size ftl_map_blk_gc, .-ftl_map_blk_gc ++ .align 1 ++ .global Ftl_write_map_blk_to_last_page ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type Ftl_write_map_blk_to_last_page, %function ++Ftl_write_map_blk_to_last_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, r0 ++ ldr r6, .L2543 ++ ldr r5, [r6, #228] ++ cbnz r5, .L2534 ++ ldrh r3, [r0] ++ movw r2, #65535 ++ ldr r7, [r0, #12] ++ cmp r3, r2 ++ bne .L2535 ++ ldrh r3, [r0, #8] ++ adds r3, r3, #1 ++ strh r3, [r0, #8] @ movhi ++ bl FtlFreeSysBlkQueueOut ++ strh r0, [r7] @ movhi ++ ldr r3, [r4, #28] ++ strh r5, [r4, #2] @ movhi ++ strh r5, [r4] @ movhi ++ adds r3, r3, #1 ++ str r3, [r4, #28] ++.L2534: ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2535: ++ ldrh r10, [r7, r3, lsl #1] ++ movs r1, #255 ++ ldrh r3, [r0, #2] ++ ldr r8, .L2543+8 ++ ldr r7, [r6, #3340] ++ ldr fp, [r0, #24] ++ orr r3, r3, r10, lsl #10 ++ ldr r9, .L2543+12 ++ str r7, [r8, #1268] ++ str r3, [r8, #1260] ++ ldr r3, [r6, #3316] ++ str r3, [r8, #1264] ++ ldr r3, [r0, #28] ++ str r3, [r7, #4] ++ movw r3, #64245 ++ strh r3, [r7, #8] @ movhi ++ ldrh r3, [r0, #4] ++ strh r10, [r7, #2] @ movhi ++ strh r3, [r7] @ movhi ++ ldrh r2, [r9, #2392] ++ ldr r0, [r6, #3316] ++ lsls r2, r2, #3 ++ bl ftl_memset ++ mov r3, r5 ++ mov r2, r5 ++.L2536: ++ ldrh r0, [r4, #6] ++ uxth r1, r3 ++ cmp r0, r1 ++ bhi .L2538 ++ ldrb r3, [r9, #36] @ zero_extendqisi2 ++ cbz r3, .L2539 ++ ldrh r1, [r9, #2400] ++ ldr r0, [r8, #1264] ++ bl js_hash ++ str r0, [r7, #12] ++.L2539: ++ movs r2, #1 ++ movs r3, #0 ++ mov r1, r2 ++ ldr r0, .L2543+4 ++ bl FlashProgPages ++ ldrh r3, [r4, #2] ++ mov r0, r4 ++ adds r3, r3, #1 ++ strh r3, [r4, #2] @ movhi ++ bl ftl_map_blk_gc ++ b .L2534 ++.L2538: ++ uxth r0, r3 ++ ldr r1, [fp, r0, lsl #2] ++ cmp r10, r1, lsr #10 ++ bne .L2537 ++ ldr r1, [r6, #3316] ++ adds r2, r2, #1 ++ uxth r2, r2 ++ str r0, [r1, r2, lsl #3] ++ ldr r1, [r6, #3316] ++ ldr r0, [fp, r0, lsl #2] ++ add r1, r1, r2, lsl #3 ++ str r0, [r1, #4] ++.L2537: ++ adds r3, r3, #1 ++ b .L2536 ++.L2544: ++ .align 2 ++.L2543: ++ .word .LANCHOR2 ++ .word .LANCHOR4+1256 ++ .word .LANCHOR4 ++ .word .LANCHOR0 ++ .fnend ++ .size Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page ++ .align 1 ++ .global FtlMapWritePage ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlMapWritePage, %function ++FtlMapWritePage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, r0 ++ ldr r8, .L2569+20 ++ mov fp, r1 ++ movs r6, #0 ++ ldr r7, .L2569 ++ mov r9, r8 ++ str r2, [sp] ++.L2546: ++ ldr r3, [r8, #492] ++ adds r3, r3, #1 ++ str r3, [r8, #492] ++ ldrh r3, [r7, #2392] ++ ldrh r2, [r4, #2] ++ subs r3, r3, #1 ++ cmp r2, r3 ++ bge .L2547 ++ ldrh r2, [r4] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L2548 ++.L2547: ++ mov r0, r4 ++ bl Ftl_write_map_blk_to_last_page ++.L2548: ++ ldr r1, [r9, #228] ++ cmp r1, #0 ++ bne .L2564 ++ ldrh r2, [r4] ++ ldr r3, [r4, #12] ++ ldr r5, .L2569+4 ++ ldr r0, [r9, #3340] ++ ldrh r10, [r3, r2, lsl #1] ++ movs r2, #16 ++ ldrh r3, [r4, #2] ++ str r0, [r5, #1268] ++ orr r3, r3, r10, lsl #10 ++ str r3, [r5, #1260] ++ ldr r3, [sp] ++ str r3, [r5, #1264] ++ bl ftl_memset ++ ldr r3, [r5, #1268] ++ ldr r2, [r4, #28] ++ strh fp, [r3, #8] @ movhi ++ str r2, [r3, #4] ++ ldrh r2, [r4, #4] ++ str r3, [sp, #4] ++ strh r10, [r3, #2] @ movhi ++ strh r2, [r3] @ movhi ++ ldrb r2, [r7, #36] @ zero_extendqisi2 ++ cbz r2, .L2550 ++ ldrh r1, [r7, #2400] ++ ldr r0, [r5, #1264] ++ bl js_hash ++ ldr r3, [sp, #4] ++ str r0, [r3, #12] ++.L2550: ++ movs r3, #1 ++ ldr r0, .L2569+8 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldrh r3, [r4, #2] ++ adds r3, r3, #1 ++ uxth r3, r3 ++ strh r3, [r4, #2] @ movhi ++ ldr r2, [r5, #1256] ++ adds r1, r2, #1 ++ bne .L2551 ++ ldr r1, [r5, #1260] ++ adds r6, r6, #1 ++ ldr r0, .L2569+12 ++ uxth r6, r6 ++ bl printk ++ ldrh r3, [r4, #2] ++ cmp r3, #2 ++ ittt ls ++ ldrhls r3, [r7, #2392] ++ addls r3, r3, #-1 ++ strhls r3, [r4, #2] @ movhi ++ cmp r6, #3 ++ bls .L2546 ++ ldr r3, .L2569+4 ++ mov r2, r6 ++ ldr r0, .L2569+16 ++ ldr r1, [r3, #1260] ++ bl printk ++ movs r3, #1 ++ str r3, [r9, #228] ++.L2564: ++ movs r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2551: ++ cbz r2, .L2554 ++ cmp r3, #1 ++ strh r10, [r4, #40] @ movhi ++ bne .L2555 ++.L2556: ++ movs r3, #0 ++ str r3, [r4, #36] ++ b .L2546 ++.L2555: ++ cmp r2, #256 ++.L2568: ++ beq .L2556 ++ ldr r3, [r4, #36] ++ cmp r3, #0 ++ bne .L2556 ++ ldr r3, .L2569+4 ++ ldr r2, [r3, #1260] ++ ldr r3, [r4, #24] ++ str r2, [r3, fp, lsl #2] ++ b .L2564 ++.L2554: ++ cmp r3, #1 ++ b .L2568 ++.L2570: ++ .align 2 ++.L2569: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LANCHOR4+1256 ++ .word .LC134 ++ .word .LC135 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlMapWritePage, .-FtlMapWritePage ++ .align 1 ++ .global flush_l2p_region ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type flush_l2p_region, %function ++flush_l2p_region: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ movs r4, #12 ++ ldr r5, .L2572 ++ muls r4, r0, r4 ++ ldr r3, [r5, #464] ++ add r0, r5, #3408 ++ adds r2, r3, r4 ++ ldrh r1, [r3, r4] ++ ldr r2, [r2, #8] ++ bl FtlMapWritePage ++ ldr r3, [r5, #464] ++ movs r0, #0 ++ add r4, r4, r3 ++ ldr r3, [r4, #4] ++ bic r3, r3, #-2147483648 ++ str r3, [r4, #4] ++ pop {r3, r4, r5, pc} ++.L2573: ++ .align 2 ++.L2572: ++ .word .LANCHOR2 ++ .fnend ++ .size flush_l2p_region, .-flush_l2p_region ++ .align 1 ++ .global FtlMapTblRecovery ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlMapTblRecovery, %function ++FtlMapTblRecovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 32 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r3, [r0, #24] ++ mov r4, r0 ++ movs r1, #0 ++ movs r7, #0 ++ ldr fp, .L2615+8 ++ str r3, [sp, #4] ++ ldr r3, [r0, #12] ++ ldr r5, .L2615 ++ ldr r6, .L2615+4 ++ str r3, [sp, #8] ++ ldr r3, [r0, #16] ++ str r3, [sp, #20] ++ ldrh r3, [r0, #6] ++ str r3, [sp, #12] ++ ldrh r3, [r0, #8] ++ ldr r0, [sp, #4] ++ str r3, [sp, #16] ++ ldr r3, [sp, #12] ++ lsls r2, r3, #2 ++ bl ftl_memset ++ ldr r2, [fp, #3316] ++ ldr r8, [fp, #3340] ++ str r7, [r4, #32] ++ str r2, [r5, #1264] ++ movw r2, #65535 ++ str r8, [r5, #1268] ++ strh r2, [r4] @ movhi ++ strh r2, [r4, #2] @ movhi ++ movs r2, #1 ++ str r7, [r4, #28] ++ str r2, [r4, #36] ++.L2575: ++ ldr r3, [sp, #16] ++ sxth r10, r7 ++ cmp r10, r3 ++ bge .L2594 ++ ldr r3, [sp, #16] ++ lsl r9, r10, #1 ++ subs r2, r3, #1 ++ cmp r10, r2 ++ bne .L2576 ++ ldr r3, [sp, #8] ++ movs r1, #1 ++ ldr fp, .L2615+12 ++ ldrh r0, [r3, r10, lsl #1] ++ add r9, r9, r3 ++ bl FtlGetLastWrittenPage ++ ldr r2, [sp, #20] ++ sxth r3, r0 ++ adds r0, r0, #1 ++ strh r7, [r4] @ movhi ++ strh r0, [r4, #2] @ movhi ++ sub r7, fp, #1256 ++ ldr r2, [r2, r10, lsl #2] ++ mov r10, #0 ++ adds r3, r3, #1 ++ str r3, [sp, #8] ++ str r2, [r4, #28] ++.L2577: ++ ldr r3, [sp, #8] ++ sxth r2, r10 ++ cmp r2, r3 ++ blt .L2580 ++.L2594: ++ mov r0, r4 ++ bl ftl_free_no_use_map_blk ++ ldrh r2, [r4, #2] ++ ldrh r3, [r6, #2392] ++ cmp r2, r3 ++ bne .L2582 ++ mov r0, r4 ++ bl ftl_map_blk_alloc_new_blk ++.L2582: ++ mov r0, r4 ++ bl ftl_map_blk_gc ++ mov r0, r4 ++ bl ftl_map_blk_gc ++ movs r0, #0 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2580: ++ ldrh r1, [r9] ++ mov r0, fp ++ orr r2, r2, r1, lsl #10 ++ str r2, [r5, #1260] ++ movs r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldrb r2, [r6, #36] @ zero_extendqisi2 ++ cbz r2, .L2578 ++ ldr r2, [r5, #1268] ++ ldr r2, [r2, #12] ++ str r2, [sp, #16] ++ cbz r2, .L2578 ++ ldrh r1, [r6, #2400] ++ ldr r0, [r5, #1264] ++ bl js_hash ++ ldr r2, [sp, #16] ++ cmp r2, r0 ++ itt ne ++ movne r2, #-1 ++ strne r2, [r5, #1256] ++.L2578: ++ ldr r2, [r7, #1256] ++ adds r2, r2, #1 ++ beq .L2579 ++ ldrh r2, [r8, #8] ++ ldr r3, [sp, #12] ++ cmp r3, r2 ++ bls .L2579 ++ ldrh r1, [r4, #4] ++ ldrh r0, [r8] ++ cmp r0, r1 ++ ittt eq ++ ldreq r1, [r7, #1260] ++ ldreq r3, [sp, #4] ++ streq r1, [r3, r2, lsl #2] ++.L2579: ++ add r10, r10, #1 ++ b .L2577 ++.L2576: ++ ldr r3, .L2615+8 ++ ldr r0, .L2615+12 ++ ldr r2, [r3, #3316] ++ ldr r3, [sp, #8] ++ str r2, [r5, #1264] ++ add r3, r3, r9 ++ ldrh r2, [r6, #2392] ++ str r3, [sp, #24] ++ ldr r3, [sp, #8] ++ subs r2, r2, #1 ++ ldrh r1, [r3, r10, lsl #1] ++ orr r2, r2, r1, lsl #10 ++ str r2, [r5, #1260] ++ movs r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [r5, #1256] ++ adds r2, r2, #1 ++ beq .L2596 ++ ldrh r1, [r8] ++ ldrh r2, [r4, #4] ++ cmp r1, r2 ++ bne .L2596 ++ ldrh r1, [r8, #8] ++ movw r2, #64245 ++ cmp r1, r2 ++ beq .L2584 ++.L2596: ++ ldr r9, .L2615 ++ mov r10, #0 ++.L2585: ++ ldrh r1, [r6, #2392] ++ sxth r2, r10 ++ cmp r2, r1 ++ bge .L2592 ++ ldr r3, [sp, #24] ++ ldr r0, .L2615+12 ++ ldrh r1, [r3] ++ orr r2, r2, r1, lsl #10 ++ str r2, [r9, #1260] ++ movs r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldrb r2, [r6, #36] @ zero_extendqisi2 ++ cbz r2, .L2589 ++ ldr r2, [r9, #1268] ++ ldr r2, [r2, #12] ++ str r2, [sp, #28] ++ cbz r2, .L2589 ++ ldrh r1, [r6, #2400] ++ ldr r0, [r9, #1264] ++ bl js_hash ++ ldr r2, [sp, #28] ++ cmp r2, r0 ++ itt ne ++ movne r2, #-1 ++ strne r2, [r9, #1256] ++.L2589: ++ ldr r2, [r9, #1256] ++ adds r2, r2, #1 ++ beq .L2590 ++ ldrh r2, [r8, #8] ++ ldr r3, [sp, #12] ++ cmp r3, r2 ++ bls .L2590 ++ ldrh r1, [r4, #4] ++ ldrh r0, [r8] ++ cmp r0, r1 ++ ittt eq ++ ldreq r1, [r9, #1260] ++ ldreq r3, [sp, #4] ++ streq r1, [r3, r2, lsl #2] ++.L2590: ++ add r10, r10, #1 ++ b .L2585 ++.L2584: ++ movs r0, #0 ++ mov lr, #4 ++.L2586: ++ ldrh r1, [r6, #2392] ++ sxth r2, r0 ++ subs r1, r1, #1 ++ cmp r2, r1 ++ blt .L2588 ++.L2592: ++ adds r7, r7, #1 ++ b .L2575 ++.L2588: ++ ldr ip, [fp, #3316] ++ ldr r3, [sp, #12] ++ ldr r1, [ip, r2, lsl #3] ++ uxth r9, r1 ++ cmp r3, r9 ++ bls .L2587 ++ add r2, lr, r2, lsl #3 ++ ldr r3, [sp, #4] ++ ldr r2, [ip, r2] ++ str r2, [r3, r9, lsl #2] ++.L2587: ++ adds r0, r0, #1 ++ b .L2586 ++.L2616: ++ .align 2 ++.L2615: ++ .word .LANCHOR4 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR4+1256 ++ .fnend ++ .size FtlMapTblRecovery, .-FtlMapTblRecovery ++ .align 1 ++ .global FtlLoadVonderInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlLoadVonderInfo, %function ++FtlLoadVonderInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, lr} ++ .save {r3, lr} ++ ldr r3, .L2618 ++ ldr r0, .L2618+4 ++ ldrh r2, [r3, #2412] ++ add r0, r0, #1296 ++ strh r2, [r0, #10] @ movhi ++ movw r2, #61574 ++ strh r2, [r0, #4] @ movhi ++ ldrh r2, [r3, #2438] ++ strh r2, [r0, #8] @ movhi ++ ldrh r2, [r3, #2414] ++ ldr r3, [r3, #2440] ++ strh r2, [r0, #6] @ movhi ++ str r3, [r0, #12] ++ ldr r3, .L2618+8 ++ ldr r2, [r3, #3380] ++ str r2, [r0, #16] ++ ldr r2, [r3, #3376] ++ ldr r3, [r3, #3384] ++ str r2, [r0, #20] ++ str r3, [r0, #24] ++ bl FtlMapTblRecovery ++ movs r0, #0 ++ pop {r3, pc} ++.L2619: ++ .align 2 ++.L2618: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlLoadVonderInfo, .-FtlLoadVonderInfo ++ .align 1 ++ .global FtlLoadMapInfo ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlLoadMapInfo, %function ++FtlLoadMapInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, lr} ++ .save {r3, lr} ++ bl FtlL2PDataInit ++ ldr r0, .L2621 ++ bl FtlMapTblRecovery ++ movs r0, #0 ++ pop {r3, pc} ++.L2622: ++ .align 2 ++.L2621: ++ .word .LANCHOR2+3408 ++ .fnend ++ .size FtlLoadMapInfo, .-FtlLoadMapInfo ++ .align 1 ++ .global FtlVendorPartWrite ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlVendorPartWrite, %function ++FtlVendorPartWrite: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2635 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r2 ++ mov r5, r1 ++ adds r1, r0, r1 ++ .pad #60 ++ sub sp, sp, #60 ++ mov r7, r0 ++ ldrh r2, [r3, #2386] ++ str r3, [sp] ++ cmp r1, r2 ++ bhi .L2631 ++ ldrh r6, [r3, #2398] ++ mov r9, #0 ++ ldr r8, .L2635+8 ++ lsr r6, r0, r6 ++ lsl fp, r6, #2 ++.L2625: ++ cbnz r5, .L2630 ++.L2623: ++ mov r0, r9 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2630: ++ ldr r3, [r8, #3384] ++ mov r0, r7 ++ ldr r2, [r3, fp] ++ ldr r3, [sp] ++ str r2, [sp, #12] ++ ldrh r3, [r3, #2396] ++ mov r1, r3 ++ str r3, [sp, #8] ++ bl __aeabi_uidivmod ++ ldr r3, [sp, #8] ++ ldr r2, [sp, #12] ++ str r1, [sp, #4] ++ subs r4, r3, r1 ++ uxth r4, r4 ++ cmp r5, r4 ++ it cc ++ uxthcc r4, r5 ++ cbz r2, .L2627 ++ cmp r4, r3 ++ beq .L2627 ++ ldr r3, [r8, #3324] ++ add r0, sp, #20 ++ str r2, [sp, #24] ++ movs r2, #1 ++ mov r1, r2 ++ str r3, [sp, #28] ++ movs r3, #0 ++ str r3, [sp, #32] ++ bl FlashReadPages ++.L2628: ++ lsls r3, r4, #9 ++ ldr r0, [r8, #3324] ++ mov r1, r10 ++ mov r2, r3 ++ str r3, [sp, #8] ++ ldr r3, [sp, #4] ++ subs r5, r5, r4 ++ add r7, r7, r4 ++ add fp, fp, #4 ++ add r0, r0, r3, lsl #9 ++ bl ftl_memcpy ++ mov r1, r6 ++ ldr r2, [r8, #3324] ++ ldr r0, .L2635+4 ++ adds r6, r6, #1 ++ bl FtlMapWritePage ++ ldr r3, [sp, #8] ++ adds r0, r0, #1 ++ it eq ++ moveq r9, #-1 ++ add r10, r10, r3 ++ b .L2625 ++.L2627: ++ ldr r3, [sp] ++ movs r1, #0 ++ ldr r0, [r8, #3324] ++ ldrh r2, [r3, #2400] ++ bl ftl_memset ++ b .L2628 ++.L2631: ++ mov r9, #-1 ++ b .L2623 ++.L2636: ++ .align 2 ++.L2635: ++ .word .LANCHOR0 ++ .word .LANCHOR4+1296 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlVendorPartWrite, .-FtlVendorPartWrite ++ .align 1 ++ .global Ftl_save_ext_data ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type Ftl_save_ext_data, %function ++Ftl_save_ext_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L2639 ++ ldr r3, .L2639+4 ++ ldr r1, [r2, #604] ++ cmp r1, r3 ++ bne .L2637 ++ ldr r3, .L2639+8 ++ movs r1, #1 ++ movs r0, #0 ++ str r3, [r2, #608] ++ ldr r3, [r2, #500] ++ str r3, [r2, #692] ++ ldr r3, [r2, #504] ++ str r3, [r2, #696] ++ ldr r3, [r2, #496] ++ str r3, [r2, #612] ++ ldr r3, [r2, #484] ++ str r3, [r2, #616] ++ ldr r3, [r2, #476] ++ str r3, [r2, #620] ++ ldr r3, [r2, #492] ++ str r3, [r2, #624] ++ ldr r3, [r2, #520] ++ str r3, [r2, #632] ++ ldr r3, [r2, #240] ++ add r2, r2, #604 ++ str r3, [r2, #32] ++ ldr r3, [r2, #-124] ++ str r3, [r2, #36] ++ ldr r3, [r2, #-116] ++ str r3, [r2, #40] ++ ldr r3, [r2, #-76] ++ str r3, [r2, #44] ++ ldr r3, [r2, #-72] ++ str r3, [r2, #48] ++ ldr r3, [r2, #512] ++ str r3, [r2, #60] ++ ldr r3, [r2, #2672] ++ str r3, [r2, #64] ++ b FtlVendorPartWrite ++.L2637: ++ bx lr ++.L2640: ++ .align 2 ++.L2639: ++ .word .LANCHOR2 ++ .word 1179929683 ++ .word 1342177379 ++ .fnend ++ .size Ftl_save_ext_data, .-Ftl_save_ext_data ++ .align 1 ++ .global FtlEctTblFlush ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlEctTblFlush, %function ++FtlEctTblFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2648 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r2, [r3, #2248] ++ ldr r3, .L2648+4 ++ cmp r2, #0 ++ beq .L2646 ++ ldr r2, [r3, #532] ++ cmp r2, #39 ++ ite hi ++ movhi r2, #32 ++ movls r2, #4 ++.L2642: ++ ldr r4, .L2648+8 ++ ldrh r1, [r4, #1340] ++ cmp r1, #31 ++ ittt ls ++ addls r1, r1, #1 ++ movls r2, #1 ++ strhls r1, [r4, #1340] @ movhi ++ cbnz r0, .L2644 ++ ldr r1, [r3, #3360] ++ ldr r0, [r1, #20] ++ ldr r1, [r1, #16] ++ add r2, r2, r0 ++ cmp r1, r2 ++ bcc .L2645 ++.L2644: ++ ldr r2, [r3, #3360] ++ movs r0, #64 ++ ldr r1, [r2, #16] ++ str r1, [r2, #20] ++ ldr r1, .L2648+12 ++ str r1, [r2] ++ ldrh r1, [r3, #3352] ++ ldr r2, [r3, #3360] ++ lsls r3, r1, #9 ++ str r3, [r2, #12] ++ ldr r3, [r2, #8] ++ adds r3, r3, #1 ++ str r3, [r2, #8] ++ movs r3, #0 ++ str r3, [r2, #4] ++ bl FtlVendorPartWrite ++ bl Ftl_save_ext_data ++.L2645: ++ movs r0, #0 ++ pop {r4, pc} ++.L2646: ++ movs r2, #32 ++ b .L2642 ++.L2649: ++ .align 2 ++.L2648: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .word 1112818501 ++ .fnend ++ .size FtlEctTblFlush, .-FtlEctTblFlush ++ .align 1 ++ .global FtlVendorPartRead ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlVendorPartRead, %function ++FtlVendorPartRead: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2660 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r9, r2 ++ mov r6, r1 ++ adds r1, r0, r1 ++ .pad #60 ++ sub sp, sp, #60 ++ mov r7, r0 ++ ldrh r2, [r3, #2386] ++ str r3, [sp, #8] ++ cmp r1, r2 ++ bhi .L2659 ++ ldrh r5, [r3, #2398] ++ mov r8, #0 ++ ldr r10, .L2660+16 ++ lsr r5, r0, r5 ++ lsl fp, r5, #2 ++.L2652: ++ cbnz r6, .L2658 ++.L2650: ++ mov r0, r8 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2658: ++ ldr r3, [r10, #3384] ++ mov r0, r7 ++ ldr r3, [r3, fp] ++ str r3, [sp, #12] ++ ldr r3, [sp, #8] ++ ldrh r4, [r3, #2396] ++ mov r1, r4 ++ bl __aeabi_uidivmod ++ subs r4, r4, r1 ++ ldr r3, [sp, #12] ++ uxth r4, r4 ++ str r1, [sp, #4] ++ cmp r6, r4 ++ it cc ++ uxthcc r4, r6 ++ lsls r2, r4, #9 ++ str r2, [sp, #12] ++ cbz r3, .L2654 ++ ldr r2, [r10, #3324] ++ add r0, sp, #20 ++ str r3, [sp, #24] ++ str r3, [sp, #12] ++ str r2, [sp, #28] ++ movs r2, #0 ++ str r2, [sp, #32] ++ movs r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r3, .L2660+4 ++ ldr r2, [sp, #20] ++ adds r2, r2, #1 ++ ldr r2, [r3, #1256] ++ it eq ++ moveq r8, #-1 ++ ldr r3, [sp, #12] ++ cmp r2, #256 ++ bne .L2656 ++ mov r2, r3 ++ mov r1, r5 ++ ldr r0, .L2660+8 ++ bl printk ++ ldr r2, [r10, #3324] ++ mov r1, r5 ++ ldr r0, .L2660+12 ++ bl FtlMapWritePage ++.L2656: ++ ldr r1, [r10, #3324] ++ lsls r2, r4, #9 ++ ldr r3, [sp, #4] ++ mov r0, r9 ++ add r1, r1, r3, lsl #9 ++ bl ftl_memcpy ++.L2657: ++ adds r5, r5, #1 ++ subs r6, r6, r4 ++ add r7, r7, r4 ++ add r9, r9, r4, lsl #9 ++ add fp, fp, #4 ++ b .L2652 ++.L2654: ++ lsls r2, r4, #9 ++ mov r1, r3 ++ mov r0, r9 ++ bl ftl_memset ++ b .L2657 ++.L2659: ++ mov r8, #-1 ++ b .L2650 ++.L2661: ++ .align 2 ++.L2660: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC136 ++ .word .LANCHOR4+1296 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlVendorPartRead, .-FtlVendorPartRead ++ .align 1 ++ .global FtlLoadEctTbl ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlLoadEctTbl, %function ++FtlLoadEctTbl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ movs r0, #64 ++ ldr r4, .L2664 ++ ldr r2, [r4, #3360] ++ ldrh r1, [r4, #3352] ++ bl FtlVendorPartRead ++ ldr r3, [r4, #3360] ++ ldr r2, [r3] ++ ldr r3, .L2664+4 ++ cmp r2, r3 ++ beq .L2663 ++ ldr r1, .L2664+8 ++ ldr r0, .L2664+12 ++ bl printk ++ ldrh r2, [r4, #3352] ++ movs r1, #0 ++ ldr r0, [r4, #3360] ++ lsls r2, r2, #9 ++ bl ftl_memset ++.L2663: ++ movs r0, #0 ++ pop {r4, pc} ++.L2665: ++ .align 2 ++.L2664: ++ .word .LANCHOR2 ++ .word 1112818501 ++ .word .LC137 ++ .word .LC77 ++ .fnend ++ .size FtlLoadEctTbl, .-FtlLoadEctTbl ++ .align 1 ++ .global Ftl_load_ext_data ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type Ftl_load_ext_data, %function ++Ftl_load_ext_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ movs r1, #1 ++ ldr r4, .L2671 ++ movs r0, #0 ++ ldr r5, .L2671+4 ++ add r2, r4, #604 ++ bl FtlVendorPartRead ++ ldr r3, [r4, #604] ++ cmp r3, r5 ++ beq .L2667 ++ mov r2, #512 ++ movs r1, #0 ++ add r0, r4, #604 ++ bl ftl_memset ++ str r5, [r4, #604] ++.L2667: ++ ldr r3, [r4, #604] ++ cmp r3, r5 ++ bne .L2668 ++ ldr r3, [r4, #692] ++ str r3, [r4, #500] ++ ldr r3, [r4, #696] ++ str r3, [r4, #504] ++ ldr r3, [r4, #612] ++ str r3, [r4, #496] ++ ldr r3, [r4, #616] ++ str r3, [r4, #484] ++ ldr r3, [r4, #620] ++ str r3, [r4, #476] ++ ldr r3, [r4, #624] ++ str r3, [r4, #492] ++ ldr r3, [r4, #632] ++ str r3, [r4, #520] ++ ldr r3, [r4, #636] ++ str r3, [r4, #240] ++ ldr r3, [r4, #640] ++ str r3, [r4, #480] ++ ldr r3, [r4, #644] ++ str r3, [r4, #488] ++ ldr r3, [r4, #648] ++ str r3, [r4, #528] ++ ldr r3, [r4, #652] ++ str r3, [r4, #532] ++ ldr r3, [r4, #664] ++ str r3, [r4, #1116] ++.L2668: ++ ldr r1, [r4, #672] ++ movs r3, #0 ++ ldr r2, .L2671+8 ++ str r3, [r4, #3276] ++ ldr r5, .L2671+12 ++ cmp r1, r2 ++ bne .L2669 ++ ldrb r2, [r5, #152] @ zero_extendqisi2 ++ cbz r2, .L2670 ++ str r3, [r4, #672] ++ bl Ftl_save_ext_data ++.L2669: ++ ldrh r2, [r5, #2382] ++ ldr r3, [r4, #520] ++ ldr r0, [r4, #516] ++ ldrh r1, [r5, #2332] ++ mla r0, r0, r2, r3 ++ bl __aeabi_uidiv ++ str r0, [r4, #524] ++ pop {r3, r4, r5, pc} ++.L2670: ++ movs r3, #1 ++ ldr r1, .L2671+16 ++ ldr r0, .L2671+20 ++ str r3, [r5, #2248] ++ bl printk ++ b .L2669 ++.L2672: ++ .align 2 ++.L2671: ++ .word .LANCHOR2 ++ .word 1179929683 ++ .word 305432421 ++ .word .LANCHOR0 ++ .word .LC138 ++ .word .LC77 ++ .fnend ++ .size Ftl_load_ext_data, .-Ftl_load_ext_data ++ .align 1 ++ .global FtlMapBlkWriteDumpData ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlMapBlkWriteDumpData, %function ++FtlMapBlkWriteDumpData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r6, r0 ++ ldr r3, [r0, #36] ++ cbz r3, .L2673 ++ ldr r2, .L2679 ++ movs r3, #0 ++ str r3, [r0, #36] ++ ldrh r5, [r0, #6] ++ ldr r3, [r2, #228] ++ ldr r1, [r0, #24] ++ cbnz r3, .L2673 ++ ldr r4, .L2679+4 ++ subs r5, r5, #1 ++ ldr r0, [r2, #3320] ++ uxth r5, r5 ++ ldr r2, [r2, #3340] ++ str r0, [r4, #1264] ++ str r2, [r4, #1268] ++ ldr r2, [r1, r5, lsl #2] ++ str r2, [r4, #1260] ++ cbz r2, .L2677 ++ movs r2, #1 ++ add r0, r4, #1256 ++ mov r1, r2 ++ bl FlashReadPages ++.L2678: ++ ldr r2, [r4, #1264] ++ mov r1, r5 ++ mov r0, r6 ++ pop {r4, r5, r6, lr} ++ b FtlMapWritePage ++.L2677: ++ ldr r3, .L2679+8 ++ movs r1, #255 ++ ldrh r2, [r3, #2400] ++ bl ftl_memset ++ b .L2678 ++.L2673: ++ pop {r4, r5, r6, pc} ++.L2680: ++ .align 2 ++.L2679: ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData ++ .align 1 ++ .global FlashReadFacBbtData ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashReadFacBbtData, %function ++FlashReadFacBbtData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r8, r2 ++ ldr r2, .L2693 ++ .pad #40 ++ sub sp, sp, #40 ++ mov r5, r0 ++ mov r9, r1 ++ ldr r7, .L2693+4 ++ ldrh r3, [r2, #138] ++ ldrh r2, [r2, #136] ++ smulbb r3, r3, r2 ++ ldr r2, [r7, #1192] ++ uxth r3, r3 ++ str r2, [sp, #12] ++ ldr r2, [r7, #1224] ++ subs r6, r3, #1 ++ mul r10, r1, r3 ++ uxth r6, r6 ++ sub r4, r3, #16 ++ str r2, [sp, #16] ++.L2682: ++ cmp r6, r4 ++ bgt .L2688 ++ mov r0, #-1 ++ b .L2681 ++.L2688: ++ add r3, r6, r10 ++ movs r2, #1 ++ lsls r3, r3, #10 ++ mov r1, r2 ++ add r0, sp, #4 ++ str r3, [sp, #8] ++ bl FlashReadPages ++ ldr r3, [sp, #4] ++ adds r3, r3, #1 ++ beq .L2683 ++ ldr r3, [r7, #1224] ++ ldrh r2, [r3] ++ movw r3, #61664 ++ cmp r2, r3 ++ bne .L2683 ++ cbz r5, .L2689 ++ cmp r9, #0 ++ bne .L2685 ++ mov r1, r9 ++ movs r4, #1 ++.L2686: ++ ldr r0, [r7, #1212] ++ uxth r3, r1 ++ adds r1, r1, #1 ++ cmp r3, r0 ++ bcc .L2687 ++.L2685: ++ mov r2, r8 ++ ldr r1, [r7, #1192] ++ mov r0, r5 ++ bl ftl_memcpy ++ movs r3, #4 ++ ldr r0, .L2693+8 ++ mov r2, r3 ++ mov r1, r5 ++ bl rknand_print_hex ++ movs r0, #0 ++.L2681: ++ add sp, sp, #40 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2687: ++ ldr r0, [r7, #1192] ++ lsrs r6, r3, #5 ++ and r3, r3, #31 ++ lsl r3, r4, r3 ++ ldr r2, [r0, r6, lsl #2] ++ orrs r3, r3, r2 ++ str r3, [r0, r6, lsl #2] ++ b .L2686 ++.L2683: ++ subs r6, r6, #1 ++ uxth r6, r6 ++ b .L2682 ++.L2689: ++ mov r0, r5 ++ b .L2681 ++.L2694: ++ .align 2 ++.L2693: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC139 ++ .fnend ++ .size FlashReadFacBbtData, .-FlashReadFacBbtData ++ .align 1 ++ .global FlashGetBadBlockList ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashGetBadBlockList, %function ++FlashGetBadBlockList: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2705 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, r0 ++ ldr r6, .L2705+4 ++ ldr r3, [r3, #48] ++ ldr r0, [r6, #1220] ++ ldrb r4, [r3, #13] @ zero_extendqisi2 ++ ldrh r3, [r3, #14] ++ smulbb r4, r4, r3 ++ uxth r4, r4 ++ adds r2, r4, #7 ++ asrs r2, r2, #3 ++ bl FlashReadFacBbtData ++ adds r0, r0, #1 ++ mov ip, r6 ++ bne .L2696 ++.L2700: ++ movs r3, #0 ++.L2697: ++ movw r2, #65535 ++ movs r0, #0 ++ strh r2, [r5, r3, lsl #1] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L2696: ++ movs r2, #0 ++ lsr lr, r4, #4 ++ mov r3, r2 ++ subs r4, r4, #1 ++ mov r8, #1 ++.L2698: ++ uxth r1, r2 ++ cmp r1, r4 ++ bge .L2697 ++ ldr r6, [ip, #1220] ++ lsrs r7, r1, #5 ++ and r0, r1, #31 ++ lsl r0, r8, r0 ++ adds r2, r2, #1 ++ ldr r6, [r6, r7, lsl #2] ++ tst r0, r6 ++ ittt ne ++ addne r0, r3, #1 ++ strhne r1, [r5, r3, lsl #1] @ movhi ++ uxthne r3, r0 ++ cmp r3, lr ++ bcc .L2698 ++ b .L2700 ++.L2706: ++ .align 2 ++.L2705: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .fnend ++ .size FlashGetBadBlockList, .-FlashGetBadBlockList ++ .align 1 ++ .global FtlMakeBbt ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlMakeBbt, %function ++FtlMakeBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r6, .L2728 ++ ldr r7, [r6, #228] ++ cmp r7, #0 ++ bne .L2708 ++ ldr r9, .L2728+8 ++ ldr r8, .L2728+12 ++ bl FtlBbtMemInit ++ subw r10, r9, #2484 ++ sub fp, r9, #18 ++ mov r4, r10 ++ bl FtlLoadFactoryBbt ++.L2709: ++ ldrh r3, [r10, #2346] ++ cmp r7, r3 ++ bcc .L2715 ++ movs r5, #0 ++.L2716: ++ ldrh r3, [r4, #2404] ++ uxth r0, r5 ++ adds r5, r5, #1 ++ cmp r3, r0 ++ bhi .L2717 ++ ldrh r5, [r4, #2468] ++ movw r7, #65535 ++ subs r5, r5, #1 ++ uxth r5, r5 ++.L2718: ++ ldrh r3, [r4, #2468] ++ subs r3, r3, #48 ++ cmp r5, r3 ++ ble .L2722 ++ mov r0, r5 ++ bl FtlBbmIsBadBlock ++ cmp r0, #1 ++ beq .L2719 ++ mov r0, r5 ++ bl FlashTestBlk ++ cmp r0, #0 ++ beq .L2720 ++ mov r0, r5 ++ bl FtlBbmMapBadBlock ++.L2719: ++ subs r5, r5, #1 ++ uxth r5, r5 ++ b .L2718 ++.L2715: ++ ldr r3, [r6, #3340] ++ movw r2, #65535 ++ ldr r0, [r6, #3316] ++ str r3, [sp] ++ str r3, [r8, #1268] ++ ldrh r3, [fp, #2]! ++ str r0, [r8, #1264] ++ cmp r3, r2 ++ beq .L2710 ++ ldrh r5, [r10, #2388] ++ movs r2, #1 ++ mov r1, r2 ++ ldr r0, .L2728+4 ++ mla r5, r7, r5, r3 ++ lsls r3, r5, #10 ++ str r3, [r8, #1260] ++ bl FlashReadPages ++ ldrh r2, [r10, #2388] ++ ldr r1, [r8, #1264] ++ ldr r0, [r9] ++ adds r2, r2, #7 ++ asrs r2, r2, #3 ++ bl ftl_memcpy ++.L2711: ++ uxth r0, r5 ++ adds r7, r7, #1 ++ add r9, r9, #4 ++ bl FtlBbmMapBadBlock ++ b .L2709 ++.L2710: ++ mov r1, r7 ++ bl FlashGetBadBlockList ++ ldr r1, [r9] ++ ldr r0, [r8, #1264] ++ bl FtlBbt2Bitmap ++ ldrh r3, [r10, #2388] ++.L2727: ++ subs r3, r3, #1 ++ uxth r3, r3 ++ str r3, [sp, #4] ++.L2712: ++ ldr r3, [sp, #4] ++ ldrh r0, [r4, #2388] ++ smlabb r0, r0, r7, r3 ++ uxth r0, r0 ++ bl FtlBbmIsBadBlock ++ cmp r0, #1 ++ beq .L2713 ++ ldrh r3, [sp, #4] ++ movs r2, #16 ++ movs r1, #0 ++ ldr r0, [r6, #3340] ++ strh r3, [fp] @ movhi ++ bl ftl_memset ++ ldr r2, [sp] ++ movw r3, #61664 ++ strh r3, [r2] @ movhi ++ movs r3, #0 ++ str r3, [r2, #4] ++ ldrh r3, [fp] ++ ldrh r5, [r4, #2388] ++ strh r3, [r2, #2] @ movhi ++ ldrh r3, [fp] ++ ldrh r2, [r6, #3404] ++ ldr r1, [r9] ++ ldr r0, [r8, #1264] ++ mla r5, r7, r5, r3 ++ lsls r2, r2, #2 ++ lsls r3, r5, #10 ++ str r3, [r8, #1260] ++ bl ftl_memcpy ++ movs r2, #1 ++ ldr r0, .L2728+4 ++ mov r1, r2 ++ bl FlashEraseBlocks ++ movs r3, #1 ++ ldr r0, .L2728+4 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldr r3, [r8, #1256] ++ adds r3, r3, #1 ++ bne .L2711 ++ uxth r0, r5 ++ bl FtlBbmMapBadBlock ++ b .L2712 ++.L2713: ++ ldr r3, [sp, #4] ++ b .L2727 ++.L2717: ++ bl FtlBbmMapBadBlock ++ b .L2716 ++.L2720: ++ ldrh r3, [r4, #2456] ++ cmp r3, r7 ++ bne .L2721 ++ strh r5, [r4, #2456] @ movhi ++ b .L2719 ++.L2721: ++ strh r5, [r4, #2460] @ movhi ++.L2722: ++ ldrh r3, [r4, #2456] ++ movs r5, #0 ++ ldr r0, [r6, #232] ++ movs r2, #2 ++ str r5, [r4, #2464] ++ movs r1, #1 ++ strh r5, [r4, #2458] @ movhi ++ lsls r3, r3, #10 ++ str r3, [r0, #4] ++ ldrh r3, [r4, #2460] ++ lsls r3, r3, #10 ++ str r3, [r0, #40] ++ bl FlashEraseBlocks ++ ldrh r0, [r4, #2456] ++ bl FtlBbmMapBadBlock ++ ldrh r0, [r4, #2460] ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ ldr r3, [r4, #2464] ++ ldrh r2, [r4, #2460] ++ strh r5, [r4, #2458] @ movhi ++ adds r3, r3, #1 ++ str r3, [r4, #2464] ++ ldrh r3, [r4, #2456] ++ strh r2, [r4, #2456] @ movhi ++ strh r3, [r4, #2460] @ movhi ++ bl FtlBbmTblFlush ++.L2708: ++ movs r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2729: ++ .align 2 ++.L2728: ++ .word .LANCHOR2 ++ .word .LANCHOR4+1256 ++ .word .LANCHOR0+2484 ++ .word .LANCHOR4 ++ .fnend ++ .size FtlMakeBbt, .-FtlMakeBbt ++ .align 1 ++ .global log2phys ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type log2phys, %function ++log2phys: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2745 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ str r2, [sp, #8] ++ mov fp, r1 ++ mov r8, r3 ++ ldr r2, [r3, #2452] ++ str r0, [sp] ++ cmp r0, r2 ++ bcs .L2731 ++ ldrh r3, [r3, #2398] ++ movs r5, #12 ++ ldr r4, .L2745+4 ++ adds r3, r3, #7 ++ str r3, [sp, #4] ++ movs r3, #0 ++ ldr r2, [sp, #4] ++ ldr r7, [r4, #464] ++ lsr r6, r0, r2 ++ ldrh r2, [r8, #2430] ++ uxth r10, r6 ++.L2732: ++ uxth r9, r3 ++ cmp r9, r2 ++ bcc .L2737 ++ bl select_l2p_ram_region ++ muls r5, r0, r5 ++ movw r2, #65535 ++ mov r9, r0 ++ ldrh r1, [r7, r5] ++ adds r3, r7, r5 ++ cmp r1, r2 ++ beq .L2738 ++ ldr r3, [r3, #4] ++ cmp r3, #0 ++ bge .L2738 ++ bl flush_l2p_region ++.L2738: ++ ldr r3, [r4, #3388] ++ uxth r6, r6 ++ ldr r3, [r3, r6, lsl #2] ++ cmp r3, #0 ++ bne .L2739 ++ ldr r2, [r4, #464] ++ movs r1, #255 ++ str r3, [sp, #12] ++ adds r0, r2, r5 ++ ldrh r2, [r8, #2400] ++ ldr r0, [r0, #8] ++ bl ftl_memset ++ ldr r2, [r4, #464] ++ ldr r3, [sp, #12] ++ strh r10, [r2, r5] @ movhi ++ ldr r2, [r4, #464] ++ add r5, r5, r2 ++ str r3, [r5, #4] ++ b .L2734 ++.L2731: ++ ldr r3, [sp, #8] ++ mov r0, #-1 ++ cbnz r3, .L2730 ++ str r0, [fp] ++.L2730: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2737: ++ adds r3, r3, #1 ++ mla r1, r5, r3, r7 ++ ldrh r1, [r1, #-12] ++ cmp r1, r10 ++ bne .L2732 ++.L2734: ++ ldr r2, [sp, #4] ++ movs r3, #1 ++ ldr r0, [sp, #8] ++ ldr r1, .L2745+4 ++ lsls r3, r3, r2 ++ ldr r2, [sp] ++ subs r3, r3, #1 ++ ands r3, r3, r2 ++ movs r2, #12 ++ uxth r3, r3 ++ cbnz r0, .L2735 ++ ldr r0, [r1, #464] ++ mla r2, r2, r9, r0 ++ ldr r2, [r2, #8] ++ ldr r3, [r2, r3, lsl #2] ++ str r3, [fp] ++.L2736: ++ ldr r2, [r1, #464] ++ movs r3, #12 ++ mla r9, r3, r9, r2 ++ ldr r3, [r9, #4] ++ adds r2, r3, #1 ++ beq .L2743 ++ adds r3, r3, #1 ++ str r3, [r9, #4] ++.L2743: ++ movs r0, #0 ++ b .L2730 ++.L2735: ++ mul r2, r2, r9 ++ ldr r0, [r4, #464] ++ ldr r5, [fp] ++ add r0, r0, r2 ++ ldr r0, [r0, #8] ++ str r5, [r0, r3, lsl #2] ++ ldr r3, [r4, #464] ++ strh r10, [r4, #468] @ movhi ++ add r2, r2, r3 ++ ldr r3, [r2, #4] ++ orr r3, r3, #-2147483648 ++ str r3, [r2, #4] ++ b .L2736 ++.L2739: ++ ldr r2, [r4, #464] ++ ldr r7, .L2745+8 ++ str r3, [sp, #12] ++ add r2, r2, r5 ++ ldr r2, [r2, #8] ++ add r0, r7, #1256 ++ str r3, [r7, #1260] ++ str r2, [r7, #1264] ++ ldr r2, [r4, #3340] ++ str r2, [r7, #1268] ++ movs r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [r7, #1268] ++ ldr r3, [sp, #12] ++ ldrh r2, [r2, #8] ++ cmp r2, r10 ++ beq .L2740 ++ mov r2, r3 ++ mov r1, r6 ++ ldr r0, .L2745+12 ++ bl printk ++ movs r3, #4 ++ ldr r1, [r7, #1268] ++ mov r2, r3 ++ ldr r0, .L2745+16 ++ bl rknand_print_hex ++ ldrh r3, [r8, #2428] ++ movs r2, #4 ++ ldr r1, [r4, #3388] ++ ldr r0, .L2745+20 ++ bl rknand_print_hex ++ movs r3, #1 ++ str r3, [r4, #228] ++.L2741: ++ ldr r3, .L2745+4 ++ movs r1, #0 ++ ldr r3, [r3, #464] ++ adds r2, r3, r5 ++ str r1, [r2, #4] ++ strh r10, [r3, r5] @ movhi ++ b .L2734 ++.L2740: ++ ldr r2, [r7, #1256] ++ cmp r2, #256 ++ bne .L2741 ++ mov r2, r3 ++ mov r1, r6 ++ ldr r0, .L2745+24 ++ bl printk ++ ldr r3, [r4, #464] ++ mov r1, r6 ++ ldr r0, .L2745+28 ++ add r3, r3, r5 ++ ldr r2, [r3, #8] ++ bl FtlMapWritePage ++ b .L2741 ++.L2746: ++ .align 2 ++.L2745: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .word .LC140 ++ .word .LC101 ++ .word .LC141 ++ .word .LC142 ++ .word .LANCHOR2+3408 ++ .fnend ++ .size log2phys, .-log2phys ++ .align 1 ++ .global FtlWriteDumpData ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlWriteDumpData, %function ++FtlWriteDumpData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #40 ++ sub sp, sp, #40 ++ ldr r4, .L2765 ++ ldr r3, [r4, #228] ++ cmp r3, #0 ++ bne .L2747 ++ ldrh r2, [r4, #324] ++ cmp r2, #0 ++ beq .L2749 ++ ldrb r3, [r4, #328] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2749 ++ ldr r7, .L2765+4 ++ ldrb r1, [r4, #327] @ zero_extendqisi2 ++ ldrh r3, [r7, #2390] ++ muls r3, r1, r3 ++ cmp r2, r3 ++ beq .L2749 ++ ldrb r9, [r4, #330] @ zero_extendqisi2 ++ cmp r9, #0 ++ bne .L2747 ++ ldr r6, [r7, #2452] ++ mov r2, r9 ++ mov r1, sp ++ ldrh r8, [r7, #2324] ++ subs r6, r6, #1 ++ mov r0, r6 ++ bl log2phys ++ ldr r3, [sp] ++ ldr r5, [r4, #3340] ++ ldr r0, [r4, #3316] ++ str r3, [sp, #8] ++ adds r3, r3, #1 ++ str r6, [sp, #20] ++ str r0, [sp, #12] ++ str r5, [sp, #16] ++ str r9, [r5, #4] ++ beq .L2751 ++ mov r2, r9 ++ movs r1, #1 ++ add r0, sp, #4 ++ bl FlashReadPages ++.L2752: ++ ldr r9, .L2765+8 ++ movs r7, #0 ++ lsl r8, r8, #2 ++ mov r10, r7 ++ movw r3, #61589 ++ strh r3, [r5] @ movhi ++.L2753: ++ cmp r8, r7 ++ bne .L2757 ++.L2754: ++ movs r3, #1 ++.L2764: ++ strb r3, [r4, #330] ++.L2747: ++ add sp, sp, #40 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2751: ++ ldrh r2, [r7, #2400] ++ movs r1, #255 ++ bl ftl_memset ++ b .L2752 ++.L2757: ++ ldrh r3, [r4, #324] ++ cmp r3, #0 ++ beq .L2754 ++ ldr r3, [sp, #8] ++ mov r0, r9 ++ str r6, [r5, #8] ++ adds r7, r7, #1 ++ str r3, [r5, #12] ++ ldrh r3, [r4, #320] ++ strh r3, [r5, #2] @ movhi ++ bl get_new_active_ppa ++ ldr r3, [r4, #512] ++ movs r1, #1 ++ str r0, [sp, #8] ++ add r0, sp, #4 ++ str r3, [r5, #4] ++ adds r3, r3, #1 ++ adds r2, r3, #1 ++ it eq ++ moveq r3, r10 ++ str r3, [r4, #512] ++ movs r3, #0 ++ mov r2, r3 ++ bl FlashProgPages ++ ldrh r0, [r4, #320] ++ bl decrement_vpc_count ++ b .L2753 ++.L2749: ++ movs r3, #0 ++ b .L2764 ++.L2766: ++ .align 2 ++.L2765: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2+320 ++ .fnend ++ .size FtlWriteDumpData, .-FtlWriteDumpData ++ .align 1 ++ .global l2p_flush ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type l2p_flush, %function ++l2p_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ movs r4, #0 ++ ldr r5, .L2771 ++ movs r7, #12 ++ ldr r6, .L2771+4 ++ bl FtlWriteDumpData ++.L2768: ++ ldrh r3, [r5, #2430] ++ uxth r0, r4 ++ cmp r3, r0 ++ bhi .L2770 ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, pc} ++.L2770: ++ ldr r2, [r6, #464] ++ uxth r3, r4 ++ mla r3, r7, r3, r2 ++ ldr r3, [r3, #4] ++ cmp r3, #0 ++ bge .L2769 ++ bl flush_l2p_region ++.L2769: ++ adds r4, r4, #1 ++ b .L2768 ++.L2772: ++ .align 2 ++.L2771: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size l2p_flush, .-l2p_flush ++ .align 1 ++ .global allocate_new_data_superblock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type allocate_new_data_superblock, %function ++allocate_new_data_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r6, r0 ++ ldr r4, .L2799 ++ ldr r3, [r4, #228] ++ cbnz r3, .L2774 ++ ldrh r5, [r0] ++ movw r3, #65535 ++ cmp r5, r3 ++ beq .L2775 ++ ldr r3, [r4, #300] ++ mov r0, r5 ++ ldrh r3, [r3, r5, lsl #1] ++ cbz r3, .L2776 ++ bl INSERT_DATA_LIST ++.L2775: ++ ldr r2, .L2799+4 ++ movs r3, #0 ++ strb r3, [r6, #8] ++ cmp r6, r2 ++ beq .L2777 ++ ldr r3, .L2799+8 ++ ldrh r1, [r3, #2344] ++ cmp r1, #1 ++ beq .L2777 ++ ldrb r0, [r3, #152] @ zero_extendqisi2 ++ cbz r0, .L2778 ++.L2777: ++ movs r3, #1 ++ strb r3, [r6, #8] ++.L2779: ++ ldrh r0, [r4, #3460] ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L2784 ++ cmp r5, r0 ++ bne .L2785 ++ ldr r3, [r4, #300] ++ ldrh r3, [r3, r0, lsl #1] ++ cbz r3, .L2786 ++.L2785: ++ bl update_vpc_list ++.L2786: ++ movw r3, #65535 ++ strh r3, [r4, #3460] @ movhi ++.L2784: ++ mov r0, r6 ++ bl allocate_data_superblock ++ bl l2p_flush ++ movs r0, #0 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L2774: ++ movs r0, #0 ++ pop {r4, r5, r6, pc} ++.L2776: ++ bl INSERT_FREE_LIST ++ b .L2775 ++.L2778: ++ subs r2, r2, #48 ++ cmp r6, r2 ++ bne .L2779 ++ cmp r1, #3 ++ beq .L2781 ++ ldr r2, [r4, #1116] ++ cmp r2, #1 ++ bne .L2782 ++.L2781: ++ movs r2, #1 ++ strb r2, [r4, #328] ++.L2782: ++ ldr r3, [r3, #2248] ++ cmp r3, #0 ++ beq .L2779 ++ ldr r3, [r4, #532] ++ cmp r3, #39 ++ itt ls ++ movls r3, #1 ++ strbls r3, [r4, #328] ++ b .L2779 ++.L2800: ++ .align 2 ++.L2799: ++ .word .LANCHOR2 ++ .word .LANCHOR2+368 ++ .word .LANCHOR0 ++ .fnend ++ .size allocate_new_data_superblock, .-allocate_new_data_superblock ++ .align 1 ++ .global FtlCheckVpc ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlCheckVpc, %function ++FtlCheckVpc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ movs r4, #0 ++ ldr r5, .L2821 ++ ldr r6, .L2821+4 ++ ldr r1, .L2821+8 ++ mov r8, r5 ++ ldr r0, .L2821+12 ++ bl printk ++ mov r2, #8192 ++ movs r1, #0 ++ ldr r0, .L2821+4 ++ bl memset ++.L2802: ++ ldr r3, [r5, #2452] ++ cmp r4, r3 ++ bcc .L2804 ++ ldr r5, .L2821+16 ++ movs r4, #0 ++ ldr r9, .L2821+4 ++ mov r7, r4 ++ ldr r10, .L2821+28 ++.L2805: ++ ldrh r2, [r8, #2332] ++ uxth r3, r4 ++ cmp r2, r3 ++ bhi .L2807 ++ ldr r4, [r5, #312] ++ cbz r4, .L2808 ++ ldr r3, [r5, #292] ++ movs r6, #0 ++ ldrh r8, [r5, #316] ++ mov fp, #6 ++ ldr r9, .L2821+4 ++ subs r4, r4, r3 ++ ldr r3, .L2821+20 ++ asrs r4, r4, #1 ++ ldr r10, .L2821+32 ++ muls r4, r3, r4 ++ uxth r4, r4 ++.L2809: ++ uxth r3, r6 ++ cmp r8, r3 ++ bls .L2808 ++ ldr r3, [r5, #300] ++ ldrh r2, [r3, r4, lsl #1] ++ cbz r2, .L2810 ++ movs r7, #1 ++ ldrh r3, [r9, r4, lsl #1] ++ mov r1, r4 ++ mov r0, r10 ++ bl printk ++.L2810: ++ mul r4, fp, r4 ++ ldr r3, [r5, #292] ++ adds r6, r6, #1 ++ ldrh r4, [r3, r4] ++ movw r3, #65535 ++ cmp r4, r3 ++ bne .L2809 ++.L2808: ++ mov r1, r7 ++ ldr r0, .L2821+24 ++ bl printk ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2804: ++ movs r2, #0 ++ add r1, sp, #4 ++ mov r0, r4 ++ bl log2phys ++ ldr r0, [sp, #4] ++ adds r3, r0, #1 ++ beq .L2803 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r6, r0, lsl #1] ++ adds r3, r3, #1 ++ strh r3, [r6, r0, lsl #1] @ movhi ++.L2803: ++ adds r4, r4, #1 ++ b .L2802 ++.L2807: ++ ldr r3, [r5, #300] ++ uxth r6, r4 ++ ldrh r2, [r3, r6, lsl #1] ++ ldrh r3, [r9, r6, lsl #1] ++ cmp r2, r3 ++ beq .L2806 ++ mov r1, r6 ++ mov r0, r10 ++ bl printk ++ ldr r3, [r5, #300] ++ movw r2, #65535 ++ ldrh r3, [r3, r6, lsl #1] ++ cmp r3, r2 ++ beq .L2806 ++ ldrh r2, [r9, r6, lsl #1] ++ cmp r2, r3 ++ it hi ++ movhi r7, #1 ++.L2806: ++ adds r4, r4, #1 ++ b .L2805 ++.L2822: ++ .align 2 ++.L2821: ++ .word .LANCHOR0 ++ .word check_valid_page_count_table ++ .word .LANCHOR3+191 ++ .word .LC110 ++ .word .LANCHOR2 ++ .word -1431655765 ++ .word .LC145 ++ .word .LC143 ++ .word .LC144 ++ .fnend ++ .size FtlCheckVpc, .-FtlCheckVpc ++ .align 1 ++ .global Ftlscanalldata ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type Ftlscanalldata, %function ++Ftlscanalldata: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ movs r5, #0 ++ ldr r4, .L2837 ++ .pad #32 ++ sub sp, sp, #32 ++ movs r1, #0 ++ ldr r7, .L2837+4 ++ add r8, r4, #1256 ++ ldr r0, .L2837+8 ++ bl printk ++.L2824: ++ ldr r3, [r7, #2452] ++ cmp r5, r3 ++ bcc .L2830 ++ add sp, sp, #32 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L2830: ++ movs r2, #0 ++ add r1, sp, #28 ++ mov r0, r5 ++ bl log2phys ++ ubfx r3, r5, #0, #11 ++ cbnz r3, .L2825 ++ ldr r2, [sp, #28] ++ mov r1, r5 ++ ldr r0, .L2837+12 ++ bl printk ++.L2825: ++ ldr r3, [sp, #28] ++ adds r2, r3, #1 ++ beq .L2827 ++ str r3, [r4, #1260] ++ movs r1, #1 ++ ldr r3, .L2837+16 ++ mov r0, r8 ++ str r5, [r4, #1272] ++ ldr r2, [r3, #3316] ++ ldr r6, [r3, #3340] ++ str r2, [r4, #1264] ++ movs r2, #0 ++ str r6, [r4, #1268] ++ str r2, [r4, #1256] ++ bl FlashReadPages ++ ldr r3, [r4, #1256] ++ cmp r3, #256 ++ beq .L2828 ++ adds r3, r3, #1 ++ beq .L2828 ++ ldr r3, [r6, #8] ++ cmp r5, r3 ++ beq .L2827 ++.L2828: ++ ldr r2, [r4, #1264] ++ ldr r3, [r4, #1268] ++ ldr r0, .L2837+20 ++ ldr r1, [r2, #4] ++ str r1, [sp, #16] ++ mov r1, r5 ++ ldr r2, [r2] ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r2, [r4, #1260] ++ ldr r3, [r3] ++ bl printk ++.L2827: ++ adds r5, r5, #1 ++ b .L2824 ++.L2838: ++ .align 2 ++.L2837: ++ .word .LANCHOR4 ++ .word .LANCHOR0 ++ .word .LC146 ++ .word .LC147 ++ .word .LANCHOR2 ++ .word .LC148 ++ .fnend ++ .size Ftlscanalldata, .-Ftlscanalldata ++ .align 1 ++ .global FtlReUsePrevPpa ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlReUsePrevPpa, %function ++FtlReUsePrevPpa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ .pad #12 ++ mov r6, r0 ++ ldr r5, .L2848 ++ ubfx r0, r1, #10, #16 ++ str r1, [sp, #4] ++ bl P2V_block_in_plane ++ ldr r2, [r5, #300] ++ ldrh r3, [r2, r0, lsl #1] ++ cbnz r3, .L2840 ++ ldr r4, [r5, #312] ++ cbz r4, .L2841 ++ ldr r1, [r5, #292] ++ mov ip, #6 ++ ldr r2, .L2848+4 ++ movw lr, #65535 ++ ldrh r7, [r5, #316] ++ subs r4, r4, r1 ++ asrs r4, r4, #1 ++ muls r4, r2, r4 ++ uxth r4, r4 ++.L2842: ++ uxth r2, r3 ++ cmp r7, r2 ++ bls .L2841 ++ cmp r4, r0 ++ bne .L2843 ++ mov r1, r4 ++ ldr r0, .L2848+8 ++ bl List_remove_node ++ ldrh r3, [r5, #316] ++ mov r0, r4 ++ subs r3, r3, #1 ++ strh r3, [r5, #316] @ movhi ++ bl INSERT_DATA_LIST ++ ldr r2, [r5, #300] ++ ldrh r3, [r2, r4, lsl #1] ++ adds r3, r3, #1 ++ strh r3, [r2, r4, lsl #1] @ movhi ++.L2841: ++ movs r2, #1 ++ add r1, sp, #4 ++ mov r0, r6 ++ bl log2phys ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, pc} ++.L2843: ++ mul r4, ip, r4 ++ adds r3, r3, #1 ++ ldrh r4, [r1, r4] ++ cmp r4, lr ++ bne .L2842 ++ b .L2841 ++.L2840: ++ adds r3, r3, #1 ++ strh r3, [r2, r0, lsl #1] @ movhi ++ b .L2841 ++.L2849: ++ .align 2 ++.L2848: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .word .LANCHOR2+312 ++ .fnend ++ .size FtlReUsePrevPpa, .-FtlReUsePrevPpa ++ .align 1 ++ .global FtlRecoverySuperblock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlRecoverySuperblock, %function ++FtlRecoverySuperblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r2, #65535 ++ ldrh r3, [r0] ++ .pad #60 ++ sub sp, sp, #60 ++ mov r4, r0 ++ cmp r3, r2 ++ beq .L2999 ++ ldrh r3, [r0, #2] ++ ldr r6, .L3009 ++ str r3, [sp, #8] ++ ldr r1, [sp, #8] ++ ldrh r3, [r6, #2390] ++ cmp r3, r1 ++ mov r3, #0 ++ bne .L2853 ++ strh r3, [r0, #4] @ movhi ++.L3007: ++ strb r3, [r4, #6] ++.L2999: ++ movs r0, #0 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2853: ++ ldrh r0, [r0, #16] ++.L2854: ++ cmp r0, r2 ++ add r3, r3, #1 ++ beq .L2855 ++ ldrb r1, [r4, #8] @ zero_extendqisi2 ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ cmp r1, #1 ++ str r3, [sp, #20] ++ bne .L2856 ++ bl FtlGetLastWrittenPage ++ adds r7, r0, #1 ++ mov r5, r0 ++ beq .L2857 ++ ldrb r3, [r6, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2931 ++ add r3, r6, r0, lsl #1 ++ ldrh r7, [r3, #156] ++.L2858: ++ ldr r3, .L3009+4 ++ movs r2, #0 ++ ldrh ip, [r6, #2324] ++ movw r9, #65535 ++ mov r10, #36 ++ mov fp, r2 ++ ldr r0, [r3, #3304] ++ ldr r8, [r3, #1148] ++ ldrh r3, [r6, #2402] ++ mov r6, r2 ++ str r3, [sp, #4] ++ add r3, r4, #16 ++ mov lr, r3 ++ str r3, [sp, #16] ++.L2859: ++ uxth r3, r2 ++ cmp ip, r3 ++ bhi .L2862 ++ ldrb r3, [r4, #8] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L2932 ++ ldr r3, .L3009 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ adds r3, r3, #0 ++ it ne ++ movne r3, #1 ++.L3000: ++ str r3, [sp, #24] ++ mov r1, r6 ++ ldr r2, [sp, #24] ++ mov r9, #0 ++ bl FlashReadPages ++ ldr r3, .L3009+4 ++ ldr r2, [r3, #512] ++ mov r8, r3 ++ mov fp, r3 ++ add r10, r2, #-1 ++ movw r2, #65535 ++ str r2, [sp, #12] ++.L2864: ++ uxth r3, r9 ++ cmp r6, r3 ++ bhi .L2869 ++ bne .L2867 ++ ldr r3, [r8, #3304] ++ adds r5, r5, #1 ++ uxth fp, r5 ++ ldr r0, [r3, #4] ++.L3001: ++ ubfx r0, r0, #10, #16 ++ bl P2V_plane ++ ldrb r2, [r4, #8] @ zero_extendqisi2 ++ str r0, [sp, #4] ++ ldr r3, .L3009 ++ cmp r2, #1 ++ bne .L2871 ++ ldrb r1, [r3, #152] @ zero_extendqisi2 ++ cbnz r1, .L2871 ++ add r5, r3, fp, lsl #1 ++ ldrh fp, [r5, #156] ++.L2871: ++ ldrh r3, [r3, #2390] ++ cmp r3, fp ++ itttt eq ++ moveq r3, #0 ++ strheq fp, [r4, #2] @ movhi ++ strbeq r3, [r4, #6] ++ strheq r3, [r4, #4] @ movhi ++ ldrh r3, [sp, #20] ++ str r3, [sp, #28] ++ ldr r3, [sp, #8] ++ cmp fp, r3 ++ bne .L2873 ++ ldr r3, [sp, #4] ++ ldr r1, [sp, #28] ++ cmp r3, r1 ++ bne .L2873 ++ mov r2, r3 ++.L3008: ++ mov r1, fp ++ mov r0, r4 ++ bl ftl_sb_update_avl_pages ++ b .L2999 ++.L2855: ++ uxth r1, r3 ++ adds r1, r1, #8 ++ ldrh r0, [r4, r1, lsl #1] ++ b .L2854 ++.L2856: ++ movs r1, #0 ++ bl FtlGetLastWrittenPage ++ mov r5, r0 ++ adds r0, r0, #1 ++ beq .L2857 ++.L2931: ++ mov r7, r5 ++ b .L2858 ++.L2857: ++ movs r3, #0 ++ strh r3, [r4, #2] @ movhi ++ b .L3007 ++.L2862: ++ ldrh r3, [lr], #2 ++ cmp r3, r9 ++ beq .L2860 ++ mla r1, r10, r6, r0 ++ orr r3, r7, r3, lsl #10 ++ str r3, [r1, #4] ++ ldr r3, [sp, #4] ++ muls r3, r6, r3 ++ add r6, r6, #1 ++ it mi ++ addmi r3, r3, #3 ++ uxth r6, r6 ++ bic r3, r3, #3 ++ add r3, r3, r8 ++ str fp, [r1, #8] ++ str r3, [r1, #12] ++.L2860: ++ adds r2, r2, #1 ++ b .L2859 ++.L2932: ++ movs r3, #0 ++ b .L3000 ++.L2869: ++ movs r3, #36 ++ ldr r1, [fp, #3304] ++ mul r3, r3, r9 ++ adds r2, r1, r3 ++ ldr r3, [r1, r3] ++ cbnz r3, .L2865 ++ ldr r2, [r2, #12] ++ ldr r3, [r2, #4] ++ adds r1, r3, #1 ++ beq .L2866 ++ ldr r1, [fp, #512] ++ mov r0, r3 ++ bl ftl_cmp_data_ver ++ cbz r0, .L2866 ++ adds r3, r3, #1 ++ str r3, [fp, #512] ++.L2866: ++ ldr r3, [r2] ++ adds r3, r3, #1 ++ bne .L2868 ++.L2867: ++ ldr r3, [r8, #3304] ++ uxth r9, r9 ++ movs r2, #36 ++ uxth fp, r5 ++ mla r9, r2, r9, r3 ++ ldr r0, [r9, #4] ++ b .L3001 ++.L2865: ++ ldr r1, [r2, #4] ++ ldr r0, .L3009+8 ++ bl printk ++ uxth r3, r7 ++ ldr r2, .L3009+12 ++ str r3, [sp, #12] ++ ldrh r3, [r4] ++ strh r3, [r2, #1342] @ movhi ++.L2868: ++ add r9, r9, #1 ++ b .L2864 ++.L2873: ++ ldr r1, [sp, #12] ++ movw r3, #65535 ++ cmp r1, r3 ++ bne .L2874 ++ cmp r2, #0 ++ bne .L2875 ++.L2874: ++ uxth r3, r7 ++ uxth r7, r7 ++ str r3, [sp, #20] ++ mov r9, #-1 ++ ldr r3, [r8, #3472] ++ adds r3, r3, #1 ++ it eq ++ streq r10, [r8, #3472] ++ ldr r3, [r8, #3472] ++ mov r8, r9 ++ str r3, [sp, #32] ++ ldr r3, [sp, #8] ++ adds r3, r3, #7 ++ cmp r7, r3 ++ ldr r7, .L3009+4 ++ itett gt ++ ldrgt r3, [sp, #20] ++ ldrle r5, [sp, #8] ++ subgt r5, r3, #7 ++ uxthgt r5, r5 ++.L2878: ++ ldr r3, [sp, #20] ++ cmp r5, r3 ++ bhi .L2891 ++ ldr r3, .L3009 ++ movw lr, #65535 ++ ldr r0, [r7, #3304] ++ mov ip, #36 ++ ldrh r3, [r3, #2324] ++ str r3, [sp, #36] ++ ldr r3, [sp, #16] ++ str r3, [sp, #12] ++ movs r3, #0 ++ mov r6, r3 ++ b .L2892 ++.L2880: ++ ldr r1, [sp, #12] ++ ldrh r2, [r1], #2 ++ cmp r2, lr ++ str r1, [sp, #12] ++ beq .L2879 ++ mla r1, ip, r6, r0 ++ adds r6, r6, #1 ++ orr r2, r5, r2, lsl #10 ++ uxth r6, r6 ++ str r2, [r1, #4] ++.L2879: ++ adds r3, r3, #1 ++.L2892: ++ ldr r1, [sp, #36] ++ uxth r2, r3 ++ cmp r2, r1 ++ bcc .L2880 ++ mov r1, r6 ++ ldr r2, [sp, #24] ++ bl FlashReadPages ++ ldr r3, .L3009 ++ movs r2, #36 ++ add ip, r7, r5, lsl #1 ++ movw r1, #65535 ++ ldrb r0, [r3, #152] @ zero_extendqisi2 ++ ldr r3, [r7, #3304] ++ mla r6, r2, r6, r3 ++.L2881: ++ cmp r6, r3 ++ bne .L2890 ++ adds r5, r5, #1 ++ uxth r5, r5 ++ b .L2878 ++.L2890: ++ ldr r2, [r3] ++ cbnz r2, .L2882 ++ ldr r2, [r3, #12] ++ ldrh lr, [r2] ++ cmp lr, r1 ++ beq .L2883 ++ ldr r2, [r2, #4] ++ cmp r2, #-1 ++ beq .L2883 ++ cmp r9, #-1 ++ ldr r8, [r7, #3472] ++ str r2, [r7, #3472] ++ bne .L2883 ++ ldrh r2, [ip, #1220] ++ cmp r2, r1 ++ bne .L2884 ++ cbz r0, .L2883 ++.L2884: ++ cmp r10, r8 ++ it ne ++ movne r9, r8 ++.L2883: ++ adds r3, r3, #36 ++ b .L2881 ++.L3010: ++ .align 2 ++.L3009: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC149 ++ .word .LANCHOR4 ++.L2882: ++ ldr r3, .L3011 ++ ldrh r2, [r4] ++ strh r2, [r3, #1342] @ movhi ++ ldrb r3, [r4, #8] @ zero_extendqisi2 ++ cbnz r3, .L2875 ++ ldr r3, .L3011+4 ++ movw r2, #65535 ++ add r5, r3, r5, lsl #1 ++ ldrh r1, [r5, #1220] ++ cmp r1, r2 ++ bne .L2886 ++ cmp r9, #-1 ++ beq .L2887 ++ str r9, [r3, #3472] ++.L2875: ++ ldr r6, [sp, #8] ++ movs r2, #1 ++ ldr r5, .L3011+4 ++ ldr r3, .L3011 ++ strh r2, [r3, #1344] @ movhi ++.L2893: ++ ldr r3, .L3011+8 ++ movw r8, #65535 ++ ldr r0, [r5, #3304] ++ mov r9, #36 ++ movs r2, #0 ++ ldrh ip, [r3, #2324] ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ str r2, [sp, #12] ++ mov r1, r3 ++ ldr r3, [sp, #16] ++ str r3, [sp, #20] ++.L2894: ++ uxth r3, r2 ++ cmp ip, r3 ++ bhi .L2897 ++ ldr r2, [sp, #24] ++ ldr r1, [sp, #12] ++ bl FlashReadPages ++ movs r3, #0 ++.L3006: ++ str r3, [sp, #20] ++ ldr r2, [sp, #12] ++ ldrh r3, [sp, #20] ++ cmp r2, r3 ++ bhi .L2925 ++ ldrb r3, [r4, #8] @ zero_extendqisi2 ++ adds r6, r6, #1 ++ uxth r6, r6 ++ ldr r2, .L3011+8 ++ cmp r3, #1 ++ bne .L2926 ++ ldrb r3, [r2, #152] @ zero_extendqisi2 ++ cbz r3, .L2926 ++ ldrh r3, [r2, #2392] ++ cmp r3, r6 ++ bne .L2926 ++ cmp fp, r6 ++ beq .L2902 ++.L2926: ++ ldrh r3, [r2, #2390] ++ cmp r3, r6 ++ bne .L2893 ++ ldrh r2, [r2, #2324] ++ movw r0, #65535 ++ movs r3, #0 ++ strh r6, [r4, #2] @ movhi ++ strh r3, [r4, #4] @ movhi ++.L2927: ++ uxth r1, r3 ++ cmp r1, r2 ++ bcs .L2999 ++ ldr r1, [sp, #16] ++ ldrh r5, [r1], #2 ++ cmp r5, r0 ++ str r1, [sp, #16] ++ add r1, r3, #1 ++ bne .L3007 ++ mov r3, r1 ++ b .L2927 ++.L2887: ++ ldr r2, [sp, #32] ++ cmp r10, r2 ++ beq .L2888 ++.L3003: ++ str r2, [r3, #3472] ++ b .L2875 ++.L2888: ++ ldr r2, [r3, #3472] ++.L3002: ++ subs r2, r2, #1 ++ b .L3003 ++.L2886: ++ cmp r8, r10 ++ beq .L2889 ++ cmp r8, #-1 ++ beq .L2875 ++ str r8, [r3, #3472] ++ b .L2875 ++.L2889: ++ ldr r2, [r3, #3472] ++ cmp r10, r2 ++ bne .L3002 ++ b .L2875 ++.L2891: ++ mov r3, #-1 ++ str r3, [r7, #3472] ++ b .L2875 ++.L2897: ++ ldr r7, [sp, #20] ++ ldrh r3, [r7], #2 ++ cmp r3, r8 ++ str r7, [sp, #20] ++ beq .L2895 ++ ldr r7, [sp, #12] ++ orr r3, r6, r3, lsl #10 ++ mla r7, r9, r7, r0 ++ str r3, [r7, #4] ++ ldrb lr, [r4, #8] @ zero_extendqisi2 ++ cmp lr, #1 ++ bne .L2896 ++ cbz r1, .L2896 ++ orr r3, r3, #-2147483648 ++ str r3, [r7, #4] ++.L2896: ++ ldr r3, [sp, #12] ++ adds r3, r3, #1 ++ uxth r3, r3 ++ str r3, [sp, #12] ++.L2895: ++ adds r2, r2, #1 ++ b .L2894 ++.L2925: ++ ldr r3, [sp, #20] ++ mov r8, #36 ++ mul r8, r8, r3 ++ ldr r3, [r5, #3304] ++ str r3, [sp, #32] ++ add r9, r3, r8 ++ ldr r7, [r9, #4] ++ ubfx r0, r7, #10, #16 ++ str r7, [sp, #52] ++ bl P2V_plane ++ ldr r3, [sp, #8] ++ cmp r6, r3 ++ bcc .L2899 ++ ldr r3, [sp, #32] ++ bne .L2900 ++ ldr r2, [sp, #28] ++ cmp r2, r0 ++ bhi .L2899 ++.L2900: ++ cmp r6, fp ++ bne .L2901 ++ ldr r2, [sp, #4] ++ cmp r2, r0 ++ beq .L2902 ++.L2901: ++ ldr r3, [r3, r8] ++ adds r3, r3, #1 ++ beq .L2903 ++ ldr r3, [r9, #12] ++ movw r2, #61589 ++ ldrh r1, [r3] ++ cmp r1, r2 ++ beq .L2904 ++ ldrh r0, [r4] ++.L3004: ++ bl decrement_vpc_count ++ b .L2899 ++.L2904: ++ ldr r10, [r3, #4] ++ cmp r10, #-1 ++ beq .L2905 ++ ldr r1, [r5, #512] ++ mov r0, r10 ++ bl ftl_cmp_data_ver ++ cbz r0, .L2905 ++ add r2, r10, #1 ++ str r2, [r5, #512] ++.L2905: ++ ldr r7, [r3, #8] ++ add r1, sp, #48 ++ ldr r3, [r3, #12] ++ movs r2, #0 ++ mov r0, r7 ++ str r3, [sp, #44] ++ bl log2phys ++ ldr r1, [r5, #3472] ++ adds r0, r1, #1 ++ beq .L2906 ++ mov r0, r10 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2906 ++ ldr r3, [sp, #44] ++ adds r2, r3, #1 ++ beq .L2907 ++ ldr r0, [r5, #3304] ++ movs r2, #0 ++ movs r1, #1 ++ add r0, r0, r8 ++ str r3, [r0, #4] ++ ldr r9, [r0, #12] ++ bl FlashReadPages ++ ldr r2, [r5, #3304] ++ ldr r1, [r2, r8] ++ add r3, r2, r8 ++ adds r1, r1, #1 ++ bne .L2908 ++.L2909: ++ mov r3, #-1 ++ str r3, [sp, #44] ++.L2916: ++ ldr r0, [sp, #44] ++ adds r1, r0, #1 ++ beq .L2899 ++.L2930: ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r3, [r5, #300] ++ mov r1, r0 ++ ldrh r3, [r3, r0, lsl #1] ++ cmp r3, #0 ++ bne .L3004 ++ ldr r0, .L3011+12 ++ bl printk ++ b .L2899 ++.L2907: ++ ldr r3, [sp, #52] ++ ldr r2, [sp, #48] ++ cmp r2, r3 ++ bne .L2899 ++ movs r2, #1 ++ add r1, sp, #44 ++ mov r0, r7 ++ bl log2phys ++.L2899: ++ ldr r3, [sp, #20] ++ adds r3, r3, #1 ++ b .L3006 ++.L2908: ++ ldr r1, [r9, #8] ++ cmp r7, r1 ++ bne .L2909 ++ ldr r1, [r9, #4] ++ ldr r0, [r5, #3472] ++ str r1, [sp, #32] ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2909 ++ ldr r1, [sp, #48] ++ ldr r0, [sp, #52] ++ cmp r1, r0 ++ bne .L2911 ++.L2914: ++ ldr r1, [sp, #44] ++ mov r0, r7 ++ bl FtlReUsePrevPpa ++ b .L2909 ++.L2911: ++ ldr r0, [sp, #44] ++ cmp r1, r0 ++ beq .L2909 ++ adds r0, r1, #1 ++ beq .L2912 ++ str r1, [r3, #4] ++ movs r2, #0 ++ movs r1, #1 ++ mov r0, r3 ++ ldr r9, [r3, #12] ++ bl FlashReadPages ++.L2913: ++ ldr r3, [r5, #3304] ++ ldr r3, [r3, r8] ++ adds r3, r3, #1 ++ beq .L2914 ++ ldr r3, [r9, #4] ++ ldr r0, [r5, #3472] ++ mov r1, r3 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2914 ++ mov r1, r3 ++ ldr r0, [sp, #32] ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2909 ++ b .L2914 ++.L2912: ++ str r1, [r2, r8] ++ b .L2913 ++.L3012: ++ .align 2 ++.L3011: ++ .word .LANCHOR4 ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC150 ++.L2906: ++ ldr r3, [sp, #52] ++ ldr r2, [sp, #48] ++ cmp r2, r3 ++ beq .L2916 ++ ldr r3, [sp, #44] ++ adds r0, r3, #1 ++ beq .L2918 ++ ldr r2, .L3013 ++ ubfx r3, r3, #10, #21 ++ ldr r2, [r2, #2340] ++ cmp r3, r2 ++ bcs .L2899 ++.L2918: ++ movs r2, #1 ++ add r1, sp, #52 ++ mov r0, r7 ++ bl log2phys ++ ldr r9, [sp, #48] ++ cmp r9, #-1 ++ beq .L2916 ++ ldr r3, [sp, #44] ++ cmp r9, r3 ++ beq .L2920 ++ ubfx r0, r9, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r5, #320] ++ cmp r3, r0 ++ beq .L2921 ++ ldrh r3, [r5, #368] ++ cmp r3, r0 ++ beq .L2921 ++ ldrh r3, [r5, #416] ++ cmp r3, r0 ++ bne .L2916 ++.L2921: ++ ldr r0, [r5, #3304] ++ movs r2, #0 ++ movs r1, #1 ++ str r9, [r0, #4] ++ ldr r8, [r0, #12] ++ bl FlashReadPages ++ ldr r3, [r5, #3304] ++ ldr r3, [r3] ++ adds r3, r3, #1 ++ beq .L2916 ++ ldr r1, [r8, #4] ++ mov r0, r10 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ bne .L2916 ++ movs r2, #1 ++ add r1, sp, #48 ++ mov r0, r7 ++ bl log2phys ++ b .L2916 ++.L2903: ++ ldrh r3, [r4] ++ mov r1, r7 ++ ldr r2, .L3013+4 ++ ldr r0, .L3013+8 ++ strh r3, [r2, #1342] @ movhi ++ mov r2, r10 ++ bl printk ++ ldr r3, .L3013+4 ++ ldr r3, [r3, #1348] ++ cmp r3, #31 ++ bhi .L2923 ++ ldr r2, .L3013+4 ++ ldr r1, [sp, #52] ++ add r2, r2, r3, lsl #2 ++ adds r3, r3, #1 ++ str r1, [r2, #1352] ++ ldr r2, .L3013+4 ++ str r3, [r2, #1348] ++.L2923: ++ ldrh r0, [r4] ++ bl decrement_vpc_count ++ ldr r3, [r5, #3472] ++ adds r2, r3, #1 ++ bne .L2924 ++.L3005: ++ str r10, [r5, #3472] ++ b .L2899 ++.L2924: ++ cmp r10, r3 ++ bcs .L2899 ++ b .L3005 ++.L2902: ++ ldrb r3, [sp, #4] @ zero_extendqisi2 ++ strh fp, [r4, #2] @ movhi ++ ldr r2, [sp, #4] ++ strb r3, [r4, #6] ++ b .L3008 ++.L2920: ++ mov r0, r9 ++ b .L2930 ++.L3014: ++ .align 2 ++.L3013: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC151 ++ .fnend ++ .size FtlRecoverySuperblock, .-FtlRecoverySuperblock ++ .align 1 ++ .global FtlVpcCheckAndModify ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlVpcCheckAndModify, %function ++FtlVpcCheckAndModify: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ movs r5, #0 ++ ldr r7, .L3026 ++ ldr r1, .L3026+4 ++ ldr r0, .L3026+8 ++ bl printk ++ ldrh r2, [r7, #2334] ++ movs r1, #0 ++ ldr r4, .L3026+12 ++ lsls r2, r2, #1 ++ ldr r0, [r4, #3364] ++ bl ftl_memset ++.L3016: ++ ldr r3, [r7, #2452] ++ cmp r5, r3 ++ bcc .L3018 ++ ldr r10, .L3026+16 ++ mov r8, #0 ++ movw r9, #65535 ++.L3019: ++ ldrh r3, [r7, #2332] ++ uxth r6, r8 ++ cmp r3, r6 ++ bhi .L3022 ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3018: ++ movs r2, #0 ++ add r1, sp, #4 ++ mov r0, r5 ++ bl log2phys ++ ldr r0, [sp, #4] ++ adds r3, r0, #1 ++ beq .L3017 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r2, [r4, #3364] ++ ldrh r3, [r2, r0, lsl #1] ++ adds r3, r3, #1 ++ strh r3, [r2, r0, lsl #1] @ movhi ++.L3017: ++ adds r5, r5, #1 ++ b .L3016 ++.L3022: ++ ldr r3, [r4, #300] ++ uxth r5, r8 ++ ldrh r2, [r3, r5, lsl #1] ++ ldr r3, [r4, #3364] ++ ldrh r3, [r3, r5, lsl #1] ++ cmp r2, r3 ++ beq .L3020 ++ cmp r2, r9 ++ beq .L3020 ++ ldrh r1, [r4, #320] ++ cmp r1, r6 ++ beq .L3020 ++ ldrh r1, [r4, #416] ++ cmp r1, r6 ++ beq .L3020 ++ ldrh r1, [r4, #368] ++ cmp r1, r6 ++ beq .L3020 ++ mov r1, r5 ++ mov r0, r10 ++ bl printk ++ ldr r3, [r4, #300] ++ ldrh r2, [r3, r5, lsl #1] ++ cbnz r2, .L3021 ++ ldr r2, [r4, #3364] ++ ldrh r2, [r2, r5, lsl #1] ++ strh r2, [r3, r5, lsl #1] @ movhi ++.L3020: ++ add r8, r8, #1 ++ b .L3019 ++.L3021: ++ ldr r2, [r4, #3364] ++ mov r0, r6 ++ ldrh r2, [r2, r5, lsl #1] ++ strh r2, [r3, r5, lsl #1] @ movhi ++ bl update_vpc_list ++ b .L3020 ++.L3027: ++ .align 2 ++.L3026: ++ .word .LANCHOR0 ++ .word .LANCHOR3+203 ++ .word .LC110 ++ .word .LANCHOR2 ++ .word .LC152 ++ .fnend ++ .size FtlVpcCheckAndModify, .-FtlVpcCheckAndModify ++ .align 1 ++ .global FtlGcScanTempBlk ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcScanTempBlk, %function ++FtlGcScanTempBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 72 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3078 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #76 ++ sub sp, sp, #76 ++ mov r4, r0 ++ str r1, [sp, #16] ++ ldrh r6, [r3, #3444] ++ movw r3, #65535 ++ cmp r6, r3 ++ beq .L3062 ++ cbnz r6, .L3029 ++.L3030: ++ bl FtlGcPageVarInit ++ b .L3031 ++.L3062: ++ movs r6, #0 ++.L3029: ++ ldr r3, .L3078+4 ++ ldr r2, [sp, #16] ++ ldrh r3, [r3, #2390] ++ cmp r3, r2 ++ beq .L3030 ++.L3031: ++ ldr r5, .L3078+8 ++ mov r3, #-1 ++ str r3, [sp, #12] ++ movs r3, #0 ++ str r3, [sp, #4] ++.L3032: ++ ldrh r1, [r4] ++ movw r3, #65535 ++ movs r2, #0 ++ strb r2, [r4, #8] ++ cmp r1, r3 ++ beq .L3033 ++ ldr r7, .L3078+4 ++.L3059: ++ ldr r3, [r5, #3304] ++ movs r2, #0 ++ ldrh ip, [r7, #2324] ++ add lr, r4, #16 ++ ldr r10, [r5, #1148] ++ mov fp, r2 ++ str r3, [sp, #8] ++ movw r8, #65535 ++ ldr r3, [r5, #1144] ++ mov r9, #36 ++ str r3, [sp, #20] ++ ldrh r3, [r7, #2400] ++ str r3, [sp, #24] ++ ldrh r3, [r7, #2402] ++ str r3, [sp, #28] ++.L3034: ++ uxth r3, r2 ++ cmp ip, r3 ++ bhi .L3038 ++ mov r10, #0 ++ movs r2, #0 ++ mov r1, fp ++ ldr r0, [sp, #8] ++ bl FlashReadPages ++.L3039: ++ uxth r3, r10 ++ cmp fp, r3 ++ bhi .L3057 ++ ldr r3, [sp, #4] ++ adds r6, r6, #1 ++ uxth r6, r6 ++ adds r3, r3, #1 ++ str r3, [sp, #4] ++ ldr r2, [sp, #4] ++ ldr r3, [sp, #16] ++ cmp r3, r2 ++ bls .L3058 ++.L3060: ++ ldrh r3, [r7, #2390] ++ cmp r3, r6 ++ bhi .L3059 ++ movs r2, #0 ++ b .L3033 ++.L3038: ++ ldrh r3, [lr], #2 ++ cmp r3, r8 ++ beq .L3035 ++ ldr r1, [sp, #8] ++ orr r3, r6, r3, lsl #10 ++ mov r0, fp ++ mla r1, r9, fp, r1 ++ str r3, [r1, #4] ++ ldr r3, [sp, #24] ++ muls r3, r0, r3 ++ ldr r0, [sp, #20] ++ it mi ++ addmi r3, r3, #3 ++ bic r3, r3, #3 ++ add r3, r3, r0 ++ mov r0, fp ++ str r3, [r1, #8] ++ ldr r3, [sp, #28] ++ muls r3, r0, r3 ++ it mi ++ addmi r3, r3, #3 ++ bic r3, r3, #3 ++ add r3, r3, r10 ++ str r3, [r1, #12] ++ add r3, fp, #1 ++ uxth fp, r3 ++.L3035: ++ adds r2, r2, #1 ++ b .L3034 ++.L3057: ++ mov r9, #36 ++ ldr r8, [r5, #3304] ++ mul r9, r9, r10 ++ add r3, r8, r9 ++ ldr r2, [r3, #4] ++ str r3, [sp, #20] ++ ubfx r0, r2, #10, #16 ++ str r2, [sp, #8] ++ bl P2V_plane ++ ldr r8, [r8, r9] ++ mov r2, r0 ++ ldr r3, [sp, #20] ++ ldr r3, [r3, #12] ++ cmp r8, #0 ++ bne .L3040 ++ ldrh r0, [r3] ++ movw r1, #65535 ++ cmp r0, r1 ++ bne .L3041 ++.L3044: ++ ldrb r3, [r7, #152] @ zero_extendqisi2 ++ cbz r3, .L3074 ++ movs r3, #1 ++ str r3, [r5, #3468] ++.L3033: ++ ldr r3, .L3078 ++ movw r1, #65535 ++ strh r6, [r4, #2] @ movhi ++ mov r0, r4 ++ strb r2, [r4, #6] ++ strh r1, [r3, #3444] @ movhi ++ mov r1, r6 ++ bl ftl_sb_update_avl_pages ++ b .L3028 ++.L3041: ++ ldr r0, [r3, #8] ++ ldr r1, [r7, #2452] ++ cmp r0, r1 ++ bhi .L3044 ++ ldrb r2, [r7, #36] @ zero_extendqisi2 ++ cbnz r2, .L3047 ++.L3048: ++ ldr r2, [r3, #8] ++ add r10, r10, #1 ++ ldr r1, [sp, #8] ++ ldr r0, [r3, #12] ++ bl FtlGcUpdatePage ++ b .L3039 ++.L3074: ++ ldrh r1, [r4] ++ ldr r2, [r5, #300] ++ strh r3, [r2, r1, lsl #1] @ movhi ++.L3077: ++ ldrh r0, [r4] ++ bl INSERT_FREE_LIST ++ movw r3, #65535 ++ strh r3, [r4] @ movhi ++ strh r3, [r5, #556] @ movhi ++.L3076: ++ bl FtlGcPageVarInit ++ movs r6, #0 ++ b .L3032 ++.L3047: ++ mov r2, r8 ++ add r1, sp, #32 ++ str r3, [sp, #20] ++ bl log2phys ++ ldr r3, [sp, #20] ++ ldr r1, [sp, #32] ++ ldr r2, [r3, #12] ++ cmp r2, r1 ++ bne .L3048 ++ adds r1, r2, #1 ++ beq .L3048 ++ str r2, [sp, #40] ++ movs r1, #1 ++ ldr r2, [r5, #3336] ++ add r0, sp, #36 ++ str r2, [sp, #44] ++ ldr r2, [r5, #3344] ++ str r2, [sp, #48] ++ mov r2, r8 ++ bl FlashReadPages ++ ldrh r2, [r7, #2396] ++ ldr r1, [r5, #3304] ++ ldr r0, [sp, #44] ++ ldr r3, [sp, #20] ++ lsl ip, r2, #7 ++ add r9, r9, r1 ++.L3049: ++ cmp r8, ip ++ beq .L3048 ++ ldr r1, [r9, #8] ++ ldr r2, [r0, r8, lsl #2] ++ ldr r1, [r1, r8, lsl #2] ++ cmp r1, r2 ++ beq .L3050 ++ ldr r2, [sp, #40] ++ ldrh r1, [r4] ++ ldr r0, .L3078+12 ++ bl printk ++ ldrh r2, [r4] ++ movs r1, #0 ++ ldr r3, [r5, #300] ++ strh r1, [r3, r2, lsl #1] @ movhi ++ b .L3077 ++.L3050: ++ add r8, r8, #1 ++ b .L3049 ++.L3040: ++ ldr r2, [sp, #8] ++ ldrh r1, [r4] ++ ldr r0, .L3078+16 ++ bl printk ++ ldr r3, [r7, #2248] ++ ldrh r2, [r4] ++ cbnz r3, .L3053 ++ ldrb r3, [r7, #152] @ zero_extendqisi2 ++ cbz r3, .L3054 ++.L3053: ++ ldr r3, [r5, #236] ++ ldrh r3, [r3, r2, lsl #1] ++ cmp r3, #159 ++ bls .L3055 ++.L3054: ++ ldr r3, [r5, #3304] ++ ldr r3, [r3, r9] ++ adds r3, r3, #1 ++ bne .L3056 ++.L3055: ++ ldr r3, [r5, #3304] ++ add r3, r3, r9 ++ ldr r3, [r3, #4] ++ str r3, [sp, #12] ++.L3056: ++ ldr r3, [r5, #300] ++ movs r1, #0 ++ strh r1, [r3, r2, lsl #1] @ movhi ++ ldrh r0, [r4] ++ bl INSERT_FREE_LIST ++ movw r3, #65535 ++ strh r3, [r4] @ movhi ++ b .L3076 ++.L3058: ++ ldr r2, .L3078 ++ movw r1, #65535 ++ ldrh r3, [r2, #3444] ++ cmp r3, r1 ++ beq .L3060 ++ ldr r1, [sp, #4] ++ add r3, r3, r1 ++ strh r3, [r2, #3444] @ movhi ++ ldrh r3, [r7, #2390] ++ cmp r3, r6 ++ bls .L3060 ++.L3028: ++ ldr r0, [sp, #12] ++ add sp, sp, #76 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3079: ++ .align 2 ++.L3078: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC153 ++ .word .LC154 ++ .fnend ++ .size FtlGcScanTempBlk, .-FtlGcScanTempBlk ++ .align 1 ++ .global FtlReadRefresh ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlReadRefresh, %function ++FtlReadRefresh: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r5, .L3096 ++ ldr r9, [r5, #684] ++ mov r6, r5 ++ cmp r9, #0 ++ beq .L3081 ++ ldr r4, .L3096+4 ++ ldr r1, [r5, #688] ++ ldr r2, [r4, #2452] ++ cmp r1, r2 ++ bcs .L3082 ++ mov r5, #2048 ++.L3087: ++ ldr r0, [r6, #688] ++ ldr r3, [r4, #2452] ++ cmp r0, r3 ++ bcc .L3083 ++.L3086: ++ mov r0, #-1 ++.L3080: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L3083: ++ movs r2, #0 ++ mov r1, sp ++ bl log2phys ++ ldr r2, [sp] ++ ldr r3, [r6, #688] ++ adds r1, r2, #1 ++ add r3, r3, #1 ++ str r3, [r6, #688] ++ beq .L3085 ++ str r2, [sp, #8] ++ add r0, sp, #40 ++ movs r2, #0 ++ movs r1, #1 ++ str r2, [r0, #-36]! ++ str r3, [sp, #20] ++ str r2, [sp, #12] ++ str r2, [sp, #16] ++ bl FlashReadPages ++ ldr r3, [sp, #4] ++ cmp r3, #256 ++ bne .L3086 ++ ldr r0, [sp] ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ b .L3086 ++.L3085: ++ subs r5, r5, #1 ++ bne .L3087 ++ b .L3086 ++.L3082: ++ ldr r3, [r5, #476] ++ movs r0, #0 ++ str r0, [r5, #684] ++ str r0, [r5, #688] ++ str r3, [r5, #680] ++ b .L3080 ++.L3081: ++ ldr r8, [r5, #476] ++ movw r4, #10000 ++ ldr r1, [r5, #528] ++ ldr r7, [r5, #680] ++ add r3, r8, #1048576 ++ cmp r1, r4 ++ ite hi ++ movhi r4, #31 ++ movls r4, #63 ++ cmp r7, r3 ++ bhi .L3091 ++ ldr r3, .L3096+4 ++ lsrs r1, r1, #10 ++ mov r0, #1000 ++ adds r1, r1, #1 ++ ldr r3, [r3, #2452] ++ muls r0, r3, r0 ++ bl __aeabi_uidiv ++ add r0, r0, r7 ++ cmp r8, r0 ++ bhi .L3091 ++ ldrh r3, [r5, #272] ++ ands r0, r4, r3 ++ bne .L3093 ++ ldr r2, [r5, #704] ++ cmp r3, r2 ++ beq .L3080 ++.L3091: ++ ldrh r3, [r6, #272] ++ movs r0, #0 ++ str r0, [r6, #688] ++ str r8, [r6, #680] ++ str r3, [r6, #704] ++ movs r3, #1 ++ str r3, [r6, #684] ++ b .L3080 ++.L3093: ++ mov r0, r9 ++ b .L3080 ++.L3097: ++ .align 2 ++.L3096: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlReadRefresh, .-FtlReadRefresh ++ .align 1 ++ .global FtlGcFreeTempBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcFreeTempBlock, %function ++FtlGcFreeTempBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ ldr r4, .L3136 ++ ldr r6, .L3136+4 ++ ldr r2, [r4, #228] ++ ldrh r1, [r6, #2390] ++ cbz r2, .L3099 ++.L3134: ++ movs r0, #0 ++.L3098: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3099: ++ ldrh r5, [r4, #416] ++ movw r7, #65535 ++ cmp r5, r7 ++ bne .L3101 ++.L3110: ++ ldrh r2, [r4, #416] ++ movw r3, #65535 ++ movs r5, #0 ++ str r5, [r4, #3468] ++ cmp r2, r3 ++ beq .L3134 ++ bl FtlCacheWriteBack ++ ldrb r3, [r4, #423] @ zero_extendqisi2 ++ mov r9, #12 ++ ldrh r0, [r6, #2390] ++ ldr r2, [r4, #300] ++ ldrh r1, [r4, #416] ++ smulbb r3, r3, r0 ++ strh r3, [r2, r1, lsl #1] @ movhi ++ ldr r2, [r4, #496] ++ ldrh r3, [r4, #1172] ++ add r3, r3, r2 ++ str r3, [r4, #496] ++.L3111: ++ ldrh r2, [r4, #1172] ++ uxth r3, r5 ++ cmp r2, r3 ++ bhi .L3115 ++ movw r0, #65535 ++ bl decrement_vpc_count ++ ldrb r3, [r6, #152] @ zero_extendqisi2 ++ cbz r3, .L3116 ++ ldrh r1, [r4, #416] ++ ldr r0, .L3136+8 ++ bl printk ++.L3116: ++ ldrh r0, [r4, #416] ++ ldr r3, [r4, #300] ++ ldrh r3, [r3, r0, lsl #1] ++ cmp r3, #0 ++ beq .L3117 ++ bl INSERT_DATA_LIST ++.L3118: ++ movw r7, #65535 ++ movs r5, #0 ++ strh r7, [r4, #416] @ movhi ++ strh r5, [r4, #1172] @ movhi ++ strh r5, [r4, #1164] @ movhi ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ ldr r3, [r6, #2248] ++ strh r7, [r4, #556] @ movhi ++ cmp r3, #0 ++ beq .L3119 ++ ldr r3, [r4, #532] ++ cmp r3, #39 ++ bhi .L3119 ++ ldrh r3, [r4, #536] ++ ldrh r2, [r4, #316] ++ cmp r2, r3 ++ bcs .L3134 ++ lsls r3, r3, #1 ++.L3135: ++ strh r3, [r4, #1120] @ movhi ++ b .L3134 ++.L3101: ++ cbz r0, .L3104 ++ ldr r3, .L3136+12 ++ ldrh r0, [r3, #3444] ++ cmp r0, r7 ++ beq .L3105 ++.L3106: ++ movs r1, #2 ++.L3104: ++ ldr r0, .L3136+16 ++ bl FtlGcScanTempBlk ++ str r0, [sp, #4] ++ adds r0, r0, #1 ++ beq .L3107 ++ ldr r2, [r4, #236] ++ ldrh r3, [r2, r5, lsl #1] ++ cmp r3, #4 ++ bls .L3108 ++ subs r3, r3, #5 ++ movs r0, #1 ++ strh r3, [r2, r5, lsl #1] @ movhi ++ bl FtlEctTblFlush ++.L3108: ++ ldr r3, [r4, #3468] ++ cbnz r3, .L3109 ++ ldr r3, [r4, #700] ++ ldr r0, [sp, #4] ++ adds r3, r3, #1 ++ ubfx r0, r0, #10, #16 ++ str r3, [r4, #700] ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++.L3109: ++ movs r3, #0 ++ str r3, [r4, #3468] ++.L3121: ++ movs r0, #1 ++ b .L3098 ++.L3105: ++ strh r2, [r3, #3444] @ movhi ++ ldrh r3, [r4, #316] ++ cmp r3, #17 ++ bhi .L3106 ++ b .L3104 ++.L3107: ++ ldr r3, .L3136+12 ++ ldrh r2, [r3, #3444] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3121 ++ b .L3110 ++.L3115: ++ uxth r8, r5 ++ ldr r10, [r4, #1168] ++ ldr r3, [r6, #2452] ++ mul r8, r9, r8 ++ add r7, r10, r8 ++ ldr r0, [r7, #8] ++ cmp r0, r3 ++ bcc .L3112 ++.L3132: ++ ldrh r0, [r4, #416] ++ b .L3133 ++.L3112: ++ movs r2, #0 ++ add r1, sp, #4 ++ bl log2phys ++ ldr r0, [r10, r8] ++ ldr r3, [sp, #4] ++ cmp r0, r3 ++ bne .L3114 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ movs r2, #1 ++ mov r8, r0 ++ adds r1, r7, #4 ++ ldr r0, [r7, #8] ++ bl log2phys ++ mov r0, r8 ++.L3133: ++ bl decrement_vpc_count ++ b .L3113 ++.L3114: ++ ldr r2, [r7, #4] ++ cmp r3, r2 ++ bne .L3132 ++.L3113: ++ adds r5, r5, #1 ++ b .L3111 ++.L3117: ++ bl INSERT_FREE_LIST ++ b .L3118 ++.L3119: ++ ldrh r3, [r4, #536] ++ ldrh r2, [r4, #316] ++ add r1, r3, r3, lsl #1 ++ cmp r2, r1, asr #2 ++ ble .L3134 ++ ldrb r0, [r6, #152] @ zero_extendqisi2 ++ cbz r0, .L3120 ++ subs r3, r3, #2 ++ b .L3135 ++.L3120: ++ movs r3, #20 ++ strh r3, [r4, #1120] @ movhi ++ b .L3098 ++.L3137: ++ .align 2 ++.L3136: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC155 ++ .word .LANCHOR1 ++ .word .LANCHOR2+416 ++ .fnend ++ .size FtlGcFreeTempBlock, .-FtlGcFreeTempBlock ++ .align 1 ++ .global FtlGcPageRecovery ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlGcPageRecovery, %function ++FtlGcPageRecovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ ldr r5, .L3140 ++ ldr r4, .L3140+4 ++ ldrh r1, [r5, #2390] ++ add r0, r4, #416 ++ bl FtlGcScanTempBlk ++ ldrh r2, [r4, #418] ++ ldrh r3, [r5, #2390] ++ cmp r2, r3 ++ bcc .L3138 ++ add r0, r4, #3408 ++ bl FtlMapBlkWriteDumpData ++ movs r0, #0 ++ bl FtlGcFreeTempBlock ++ movs r3, #0 ++ str r3, [r4, #3468] ++.L3138: ++ pop {r3, r4, r5, pc} ++.L3141: ++ .align 2 ++.L3140: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcPageRecovery, .-FtlGcPageRecovery ++ .align 1 ++ .global FtlPowerLostRecovery ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlPowerLostRecovery, %function ++FtlPowerLostRecovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ movs r5, #0 ++ ldr r4, .L3143 ++ ldr r3, .L3143+4 ++ add r6, r4, #320 ++ add r4, r4, #368 ++ mov r0, r6 ++ str r5, [r3, #1348] ++ bl FtlRecoverySuperblock ++ mov r0, r6 ++ bl FtlSlcSuperblockCheck ++ mov r0, r4 ++ bl FtlRecoverySuperblock ++ mov r0, r4 ++ bl FtlSlcSuperblockCheck ++ bl FtlGcPageRecovery ++ movw r0, #65535 ++ bl decrement_vpc_count ++ mov r0, r5 ++ pop {r4, r5, r6, pc} ++.L3144: ++ .align 2 ++.L3143: ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .fnend ++ .size FtlPowerLostRecovery, .-FtlPowerLostRecovery ++ .align 1 ++ .global FtlSysBlkInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlSysBlkInit, %function ++FtlSysBlkInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ movs r3, #0 ++ ldr r5, .L3162 ++ movw r7, #65535 ++ ldr r6, .L3162+4 ++ ldr r4, .L3162+8 ++ ldrh r0, [r5, #2328] ++ strh r3, [r6, #1344] @ movhi ++ strh r7, [r6, #1342] @ movhi ++ bl FtlFreeSysBlkQueueInit ++ bl FtlScanSysBlk ++ ldrh r3, [r4, #540] ++ cmp r3, r7 ++ mov r7, r6 ++ bne .L3146 ++.L3148: ++ mov r6, #-1 ++.L3145: ++ mov r0, r6 ++ pop {r3, r4, r5, r6, r7, pc} ++.L3146: ++ bl FtlLoadSysInfo ++ mov r6, r0 ++ cmp r0, #0 ++ bne .L3148 ++ bl FtlLoadMapInfo ++ bl FtlLoadVonderInfo ++ bl Ftl_load_ext_data ++ bl FtlLoadEctTbl ++ bl FtlFreeSysBLkSort ++ bl SupperBlkListInit ++ bl FtlPowerLostRecovery ++ movs r0, #1 ++ bl FtlUpdateVaildLpn ++ ldrh r1, [r5, #2430] ++ mov r3, r6 ++ ldr r2, [r4, #464] ++ movs r0, #12 ++.L3149: ++ cmp r3, r1 ++ bge .L3154 ++ mla ip, r0, r3, r2 ++ ldr ip, [ip, #4] ++ cmp ip, #0 ++ bge .L3150 ++.L3154: ++ ldrh r2, [r4, #272] ++ cmp r3, r1 ++ add r2, r2, #1 ++ strh r2, [r4, #272] @ movhi ++ bge .L3161 ++.L3151: ++ ldrh r1, [r4, #320] ++ ldr r2, [r4, #300] ++ ldrh r0, [r4, #324] ++ ldrh r3, [r2, r1, lsl #1] ++ subs r3, r3, r0 ++ strh r3, [r2, r1, lsl #1] @ movhi ++ ldrh r3, [r5, #2390] ++ ldr r1, [r4, #300] ++ ldrh r0, [r4, #368] ++ strh r3, [r4, #322] @ movhi ++ movs r3, #0 ++ strb r3, [r4, #326] ++ strh r3, [r4, #324] @ movhi ++ ldrh r7, [r4, #372] ++ ldrh r2, [r1, r0, lsl #1] ++ subs r2, r2, r7 ++ strh r2, [r1, r0, lsl #1] @ movhi ++ strb r3, [r4, #374] ++ strh r3, [r4, #372] @ movhi ++ ldrh r3, [r4, #274] ++ ldrh r2, [r5, #2390] ++ adds r3, r3, #1 ++ strh r2, [r4, #370] @ movhi ++ strh r3, [r4, #274] @ movhi ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ bl FtlVpcTblFlush ++ b .L3155 ++.L3150: ++ adds r3, r3, #1 ++ b .L3149 ++.L3161: ++ ldrh r3, [r7, #1344] ++ cmp r3, #0 ++ bne .L3151 ++.L3155: ++ ldrh r0, [r4, #320] ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L3156 ++ ldrh r3, [r4, #324] ++ cbnz r3, .L3156 ++ ldrh r3, [r4, #372] ++ cbnz r3, .L3156 ++ bl FtlGcRefreshOpenBlock ++ ldrh r0, [r4, #368] ++ bl FtlGcRefreshOpenBlock ++ bl FtlVpcTblFlush ++ ldr r0, .L3162+12 ++ bl allocate_new_data_superblock ++ ldr r0, .L3162+16 ++ bl allocate_new_data_superblock ++.L3156: ++ ldrb r3, [r5, #36] @ zero_extendqisi2 ++ cbnz r3, .L3157 ++ ldrh r3, [r4, #272] ++ lsls r3, r3, #27 ++ bne .L3145 ++.L3157: ++ bl FtlVpcCheckAndModify ++ b .L3145 ++.L3163: ++ .align 2 ++.L3162: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LANCHOR2 ++ .word .LANCHOR2+320 ++ .word .LANCHOR2+368 ++ .fnend ++ .size FtlSysBlkInit, .-FtlSysBlkInit ++ .align 1 ++ .global FtlLowFormat ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlLowFormat, %function ++FtlLowFormat: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ ldr r4, .L3195 ++ ldr r6, [r4, #228] ++ cmp r6, #0 ++ bne .L3166 ++ ldr r5, .L3195+4 ++ mov r1, r6 ++ ldr r0, [r4, #3392] ++ ldrh r2, [r5, #2428] ++ lsls r2, r2, #2 ++ bl ftl_memset ++ ldrh r2, [r5, #2428] ++ mov r1, r6 ++ ldr r0, [r4, #3388] ++ lsls r2, r2, #2 ++ bl ftl_memset ++ ldrh r0, [r5, #2328] ++ str r6, [r4, #508] ++ str r6, [r4, #512] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cbz r0, .L3167 ++ bl FtlMakeBbt ++.L3167: ++ ldr r0, .L3195+8 ++ movs r2, #0 ++.L3168: ++ ldrh r1, [r5, #2396] ++ uxth r3, r2 ++ adds r2, r2, #1 ++ cmp r3, r1, lsl #7 ++ blt .L3169 ++ ldrh r7, [r5, #2332] ++ movs r6, #0 ++.L3170: ++ ldrh r3, [r5, #2334] ++ cmp r3, r7 ++ bhi .L3171 ++ ldrh r1, [r5, #2324] ++ subs r3, r6, #3 ++ cmp r3, r1, lsl #1 ++ blt .L3172 ++ mov r0, r6 ++ movs r6, #0 ++ bl __aeabi_uidiv ++ ldr r3, [r5, #2424] ++ add r0, r0, r3 ++ uxth r0, r0 ++ bl FtlSysBlkNumInit ++ ldrh r0, [r5, #2328] ++ bl FtlFreeSysBlkQueueInit ++ ldrh r7, [r5, #2332] ++.L3173: ++ ldrh r3, [r5, #2334] ++ cmp r3, r7 ++ bhi .L3174 ++.L3172: ++ movs r7, #0 ++ mov r8, r7 ++.L3175: ++ ldrh r3, [r5, #2332] ++ uxth r0, r7 ++ adds r7, r7, #1 ++ cmp r3, r0 ++ bhi .L3176 ++ ldrh r3, [r5, #2334] ++ ldrh r7, [r5, #2324] ++ ldr fp, [r5, #2336] ++ str r3, [r4, #3292] ++ mov r1, r7 ++ mov r0, fp ++ bl __aeabi_uidiv ++ ubfx r9, r0, #5, #16 ++ mov r10, r0 ++ add r3, r9, #36 ++ str r0, [r5, #2452] ++ strh r3, [r4, #536] @ movhi ++ movs r3, #24 ++ muls r3, r7, r3 ++ cmp r8, r3 ++ ble .L3177 ++ mov r1, r7 ++ sub r0, fp, r8 ++ bl __aeabi_uidiv ++ str r0, [r5, #2452] ++ lsrs r0, r0, #5 ++ adds r0, r0, #24 ++ strh r0, [r4, #536] @ movhi ++.L3177: ++ ldr r3, [r5, #2248] ++ cmp r3, #1 ++ bne .L3178 ++ ldrh fp, [r4, #536] ++ mov r1, r7 ++ mov r0, r8 ++ bl __aeabi_uidiv ++ uxtah r0, fp, r0 ++ add fp, fp, r0, asr #2 ++ strh fp, [r4, #536] @ movhi ++.L3178: ++ ldrb r3, [r5, #152] @ zero_extendqisi2 ++ cbz r3, .L3179 ++ ldrh fp, [r4, #536] ++ mov r1, r7 ++ mov r0, r8 ++ bl __aeabi_uidiv ++ uxtah r0, fp, r0 ++ add fp, fp, r0, asr #2 ++ strh fp, [r4, #536] @ movhi ++.L3179: ++ ldrh r3, [r5, #2384] ++ cbz r3, .L3181 ++ ldrh r2, [r4, #536] ++ add r2, r2, r3, lsr #1 ++ strh r2, [r4, #536] @ movhi ++ mul r2, r7, r3 ++ cmp r8, r2 ++ itttt lt ++ addlt r3, r3, #32 ++ strlt r10, [r5, #2452] ++ addlt r3, r3, r9 ++ strhlt r3, [r4, #536] @ movhi ++.L3181: ++ ldrh r2, [r4, #536] ++ ldr r3, [r5, #2452] ++ ldr r9, .L3195+28 ++ subs r3, r3, r2 ++ muls r7, r3, r7 ++ ldrh r3, [r5, #2390] ++ str r7, [r9, #1292] ++ muls r7, r3, r7 ++ ldrh r3, [r5, #2396] ++ str r7, [r5, #2452] ++ muls r7, r3, r7 ++ str r7, [r5, #2432] ++ bl FtlBbmTblFlush ++ ldr r2, [r5, #2340] ++ add r1, r6, r8 ++ ldrh r3, [r5, #2404] ++ add r3, r3, r2, lsr #3 ++ cmp r1, r3 ++ bls .L3183 ++ lsrs r2, r2, #5 ++ ldr r0, .L3195+12 ++ bl printk ++.L3183: ++ ldrh r2, [r5, #2334] ++ movs r1, #0 ++ ldr r0, [r4, #300] ++ movw r7, #65535 ++ lsls r2, r2, #1 ++ bl ftl_memset ++ ldrh r2, [r5, #2332] ++ movs r3, #0 ++ ldr r0, [r5, #32] ++ movs r1, #255 ++ ldr r5, .L3195+16 ++ str r3, [r4, #472] ++ strh r3, [r4, #558] @ movhi ++ lsrs r2, r2, #3 ++ strb r3, [r4, #562] ++ strb r3, [r4, #564] ++ strh r3, [r4, #322] @ movhi ++ strb r3, [r4, #326] ++ strh r3, [r4, #320] @ movhi ++ movs r3, #1 ++ strh r7, [r4, #556] @ movhi ++ strb r3, [r4, #328] ++ bl ftl_memset ++.L3184: ++ mov r0, r5 ++ bl make_superblock ++ ldrb r3, [r4, #327] @ zero_extendqisi2 ++ ldrh r2, [r4, #320] ++ cbnz r3, .L3185 ++ ldr r3, [r4, #300] ++ strh r7, [r3, r2, lsl #1] @ movhi ++ ldrh r3, [r4, #320] ++ adds r3, r3, #1 ++ strh r3, [r4, #320] @ movhi ++ b .L3184 ++.L3169: ++ ldr r6, [r4, #3332] ++ mvns r1, r3 ++ orr r1, r3, r1, lsl #16 ++ str r1, [r6, r3, lsl #2] ++ ldr r1, [r4, #3336] ++ str r0, [r1, r3, lsl #2] ++ b .L3168 ++.L3171: ++ mov r0, r7 ++ movs r1, #1 ++ bl FtlLowFormatEraseBlock ++ adds r7, r7, #1 ++ add r6, r6, r0 ++ uxth r6, r6 ++ uxth r7, r7 ++ b .L3170 ++.L3174: ++ mov r0, r7 ++ movs r1, #1 ++ bl FtlLowFormatEraseBlock ++ adds r7, r7, #1 ++ add r6, r6, r0 ++ uxth r6, r6 ++ uxth r7, r7 ++ b .L3173 ++.L3176: ++ movs r1, #0 ++ bl FtlLowFormatEraseBlock ++ add r8, r8, r0 ++ uxth r8, r8 ++ b .L3175 ++.L3185: ++ ldr r3, [r4, #508] ++ movw r5, #65535 ++ ldrh r1, [r4, #324] ++ ldr r7, .L3195+20 ++ str r3, [r4, #332] ++ adds r3, r3, #1 ++ str r3, [r4, #508] ++ ldr r3, [r4, #300] ++ strh r1, [r3, r2, lsl #1] @ movhi ++ movs r3, #0 ++ strh r3, [r4, #370] @ movhi ++ strb r3, [r4, #374] ++ ldrh r3, [r4, #320] ++ adds r3, r3, #1 ++ strh r3, [r4, #368] @ movhi ++ movs r3, #1 ++ strb r3, [r4, #376] ++.L3186: ++ mov r0, r7 ++ bl make_superblock ++ ldrb r3, [r4, #375] @ zero_extendqisi2 ++ ldrh r2, [r4, #368] ++ cbnz r3, .L3187 ++ ldr r3, [r4, #300] ++ strh r5, [r3, r2, lsl #1] @ movhi ++ ldrh r3, [r4, #368] ++ adds r3, r3, #1 ++ strh r3, [r4, #368] @ movhi ++ b .L3186 ++.L3187: ++ ldr r3, [r4, #508] ++ movw r5, #65535 ++ ldrh r1, [r4, #372] ++ str r3, [r4, #380] ++ adds r3, r3, #1 ++ str r3, [r4, #508] ++ ldr r3, [r4, #300] ++ strh r1, [r3, r2, lsl #1] @ movhi ++ strh r5, [r4, #416] @ movhi ++ bl FtlFreeSysBlkQueueOut ++ movs r3, #0 ++ strh r0, [r4, #540] @ movhi ++ strh r3, [r4, #542] @ movhi ++ ldr r3, [r9, #1292] ++ strh r5, [r4, #544] @ movhi ++ strh r3, [r4, #546] @ movhi ++ ldr r3, [r4, #508] ++ str r3, [r4, #548] ++ adds r3, r3, #1 ++ str r3, [r4, #508] ++ bl FtlVpcTblFlush ++ bl FtlSysBlkInit ++ cbnz r0, .L3166 ++ ldr r3, .L3195+24 ++ movs r2, #1 ++ str r2, [r3, #500] ++.L3166: ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3196: ++ .align 2 ++.L3195: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word 168778952 ++ .word .LC156 ++ .word .LANCHOR2+320 ++ .word .LANCHOR2+368 ++ .word .LANCHOR1 ++ .word .LANCHOR4 ++ .fnend ++ .size FtlLowFormat, .-FtlLowFormat ++ .align 1 ++ .global FtlReInitForSDUpdata ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlReInitForSDUpdata, %function ++FtlReInitForSDUpdata: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ .pad #16 ++ ldr r4, .L3232 ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cbz r3, .L3198 ++.L3200: ++ movs r5, #0 ++.L3197: ++ mov r0, r5 ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, pc} ++.L3198: ++ ldr r6, .L3232+4 ++ ldr r0, [r6, #1180] ++ bl FlashInit ++ mov r5, r0 ++ cmp r0, #0 ++ bne .L3200 ++ bl FlashLoadFactorBbt ++ cbz r0, .L3201 ++ bl FlashMakeFactorBbt ++.L3201: ++ ldr r0, [r6, #1220] ++ bl FlashReadIdbDataRaw ++ cbz r0, .L3202 ++ movs r2, #16 ++ movs r1, #0 ++ mov r0, sp ++ bl FlashReadFacBbtData ++ ldr r1, [sp] ++ movs r3, #0 ++ mov r2, r3 ++ movs r0, #1 ++.L3204: ++ lsl r6, r0, r2 ++ adds r2, r2, #1 ++ tst r6, r1 ++ it ne ++ addne r3, r3, #1 ++ cmp r2, #16 ++ bne .L3204 ++ cmp r3, #6 ++ bhi .L3205 ++.L3229: ++ strb r2, [r4, #37] ++.L3206: ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ strh r3, [r4, #150] @ movhi ++.L3202: ++ ldr r1, .L3232+8 ++ ldr r0, .L3232+12 ++ bl printk ++ ldr r0, .L3232+16 ++ bl FtlConstantsInit ++ bl FtlVariablesInit ++ ldrh r0, [r4, #2328] ++ movs r4, #1 ++ bl FtlFreeSysBlkQueueInit ++.L3210: ++ bl FtlLoadBbt ++ cbz r0, .L3211 ++.L3231: ++ bl FtlLowFormat ++ cmp r4, #3 ++ bls .L3212 ++ mov r5, #-1 ++ b .L3197 ++.L3205: ++ movs r2, #0 ++ movs r0, #1 ++.L3208: ++ lsl r6, r0, r2 ++ adds r2, r2, #1 ++ tst r6, r1 ++ it ne ++ addne r3, r3, #1 ++ cmp r2, #24 ++ bne .L3208 ++ cmp r3, #17 ++ bls .L3229 ++ movs r3, #36 ++ strb r3, [r4, #37] ++ b .L3206 ++.L3212: ++ adds r4, r4, #1 ++ b .L3210 ++.L3211: ++ bl FtlSysBlkInit ++ cmp r0, #0 ++ bne .L3231 ++ ldr r3, .L3232+20 ++ movs r2, #1 ++ str r2, [r3, #500] ++ b .L3197 ++.L3233: ++ .align 2 ++.L3232: ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC76 ++ .word .LC77 ++ .word .LANCHOR0+124 ++ .word .LANCHOR1 ++ .fnend ++ .size FtlReInitForSDUpdata, .-FtlReInitForSDUpdata ++ .align 1 ++ .global Ftl_gc_temp_data_write_back ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type Ftl_gc_temp_data_write_back, %function ++Ftl_gc_temp_data_write_back: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, .L3249 ++ ldr r3, [r4, #228] ++ cbz r3, .L3235 ++.L3238: ++ movs r0, #0 ++ pop {r4, r5, r6, pc} ++.L3235: ++ ldr r3, .L3249+4 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cbz r3, .L3237 ++ ldr r3, [r4, #1136] ++ lsls r3, r3, #31 ++ bpl .L3237 ++ ldrh r3, [r4, #420] ++ cmp r3, #0 ++ bne .L3238 ++.L3237: ++ movs r3, #0 ++ movs r5, #0 ++ movs r6, #36 ++ mov r2, r3 ++ ldr r1, [r4, #1136] ++ ldr r0, [r4, #3308] ++ bl FlashProgPages ++.L3239: ++ ldr r1, [r4, #1136] ++ uxth r3, r5 ++ cmp r3, r1 ++ bcc .L3241 ++ ldr r0, [r4, #3308] ++ bl FtlGcBufFree ++ movs r3, #0 ++ str r3, [r4, #1136] ++ ldrh r3, [r4, #420] ++ cmp r3, #0 ++ bne .L3238 ++ movs r0, #1 ++ bl FtlGcFreeTempBlock ++ b .L3248 ++.L3241: ++ muls r3, r6, r3 ++ ldr r2, [r4, #3308] ++ adds r5, r5, #1 ++ adds r1, r2, r3 ++ ldr r2, [r2, r3] ++ ldr r0, [r1, #12] ++ cmp r2, #-1 ++ bne .L3240 ++ ldrh r0, [r4, #416] ++ movs r5, #0 ++ ldr r1, [r4, #300] ++ strh r5, [r1, r0, lsl #1] @ movhi ++ strh r2, [r4, #416] @ movhi ++ ldr r2, [r4, #700] ++ adds r2, r2, #1 ++ str r2, [r4, #700] ++ ldr r2, [r4, #3308] ++ add r3, r3, r2 ++ ldr r0, [r3, #4] ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ bl FtlGcPageVarInit ++.L3248: ++ movs r0, #1 ++ pop {r4, r5, r6, pc} ++.L3240: ++ ldr r2, [r0, #8] ++ ldr r1, [r1, #4] ++ ldr r0, [r0, #12] ++ bl FtlGcUpdatePage ++ b .L3239 ++.L3250: ++ .align 2 ++.L3249: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size Ftl_gc_temp_data_write_back, .-Ftl_gc_temp_data_write_back ++ .align 1 ++ .global Ftl_get_new_temp_ppa ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type Ftl_get_new_temp_ppa, %function ++Ftl_get_new_temp_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ movw r3, #65535 ++ ldr r4, .L3254 ++ ldrh r2, [r4, #416] ++ cmp r2, r3 ++ beq .L3252 ++ ldrh r3, [r4, #420] ++ cbnz r3, .L3253 ++.L3252: ++ bl FtlCacheWriteBack ++ movs r0, #0 ++ movs r5, #0 ++ bl FtlGcFreeTempBlock ++ ldr r0, .L3254+4 ++ strb r5, [r4, #424] ++ bl allocate_data_superblock ++ strh r5, [r4, #1164] @ movhi ++ strh r5, [r4, #1172] @ movhi ++ bl l2p_flush ++ mov r0, r5 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L3253: ++ ldr r0, .L3254+4 ++ pop {r3, r4, r5, lr} ++ b get_new_active_ppa ++.L3255: ++ .align 2 ++.L3254: ++ .word .LANCHOR2 ++ .word .LANCHOR2+416 ++ .fnend ++ .size Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa ++ .align 1 ++ .global ftl_do_gc ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_do_gc, %function ++ftl_do_gc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 32 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3422 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r0 ++ .pad #44 ++ sub sp, sp, #44 ++ mov r7, r1 ++ mov r6, r3 ++ ldr r0, [r3, #228] ++ cmp r0, #0 ++ bne .L3355 ++ ldr r1, .L3422+4 ++ ldr r4, [r1, #500] ++ cmp r4, #1 ++ bne .L3256 ++ ldr r2, [r3, #3280] ++ cmp r2, #0 ++ bne .L3256 ++ ldrh r0, [r3, #308] ++ cmp r0, #47 ++ bls .L3355 ++ ldrh r1, [r1, #3444] ++ movw r2, #65535 ++ cmp r1, r2 ++ bne .L3258 ++.L3261: ++ ldrh r0, [r6, #1176] ++ movw r2, #65535 ++ cmp r0, r2 ++ bne .L3259 ++.L3260: ++ ldr r3, [r6, #1124] ++ cmp r8, #1 ++ add r3, r3, #1 ++ add r3, r3, r8, lsl #7 ++ str r3, [r6, #1124] ++ bne .L3262 ++ ldr r2, .L3422+8 ++ ldr r1, [r2, #2248] ++ mov r9, r2 ++ cbnz r1, .L3263 ++ ldrb r2, [r2, #152] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3262 ++.L3263: ++ ldr r2, [r6, #532] ++ cmp r2, #39 ++ bhi .L3262 ++ ldr r5, .L3422+12 ++ movw r4, #65535 ++ ldrh r2, [r5, #1480] ++ add r3, r3, r2 ++ str r3, [r6, #1124] ++ bl FtlGcReFreshBadBlk ++ ldrh r3, [r6, #556] ++ cmp r3, r4 ++ bne .L3264 ++ ldrh r2, [r6, #1174] ++ cmp r2, r3 ++ bne .L3352 ++ ldr r3, [r6, #1124] ++ cmp r3, #1024 ++ bhi .L3266 ++ ldrh r3, [r6, #316] ++ cmp r3, #63 ++ bhi .L3352 ++.L3266: ++ ldrh r3, [r6, #1122] ++ movs r2, #0 ++ ldrh r1, [r6, #316] ++ strh r2, [r5, #1480] @ movhi ++ adds r3, r3, #64 ++ cmp r1, r3 ++ bgt .L3352 ++ ldr r3, [r6, #532] ++ str r2, [r6, #1124] ++ cmp r3, #0 ++ bne .L3267 ++ movs r3, #6 ++.L3413: ++ strh r3, [r5, #1480] @ movhi ++.L3268: ++ movs r0, #32 ++ bl List_get_gc_head_node ++ uxth r2, r0 ++ movw r3, #65535 ++ str r3, [sp, #16] ++ cmp r2, r3 ++ beq .L3272 ++ ldrh r4, [r6, #1128] ++ cmp r4, #0 ++ beq .L3270 ++ ldrh ip, [r9, #2392] ++ uxth r10, r0 ++ ldrh r1, [r9, #2324] ++ ldr r2, [r6, #300] ++ mul r1, r1, ip ++ ldrh r0, [r2, r10, lsl #1] ++ str r2, [sp, #12] ++ adds r1, r1, #1 ++ cmp r0, r1 ++ bgt .L3272 ++ add fp, r4, #1 ++ mov r0, r4 ++ uxth fp, fp ++ mov r9, #0 ++ str r9, [r6, #1132] ++ strh fp, [r6, #1128] @ movhi ++ bl List_get_gc_head_node ++ ldr r3, [sp, #16] ++ uxth r4, r0 ++ ldr r2, [sp, #12] ++ cmp r4, r3 ++ beq .L3272 ++ ldrh r3, [r2, r4, lsl #1] ++ mov r1, fp ++ ldrh r2, [r2, r10, lsl #1] ++ ldr r0, .L3422+16 ++ str r2, [sp] ++ mov r2, r4 ++ bl printk ++ ldrh r3, [r6, #1128] ++ cmp r3, #40 ++ bls .L3271 ++ ldr r3, [r6, #300] ++ ldrh r3, [r3, r4, lsl #1] ++ cmp r3, #32 ++ it hi ++ strhhi r9, [r6, #1128] @ movhi ++.L3271: ++ movs r3, #6 ++ strh r3, [r5, #1480] @ movhi ++.L3264: ++ ldrh r2, [r6, #416] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3299 ++.L3354: ++ ldrh r3, [r6, #1174] ++ movw r2, #65535 ++ cmp r3, r2 ++ bne .L3299 ++ cmp r4, r3 ++ bne .L3299 ++ ldrh r3, [r6, #556] ++ cmp r3, r4 ++ beq .L3300 ++.L3305: ++ movw r4, #65535 ++.L3299: ++ ldr r3, .L3422+8 ++ ldr r3, [r3, #2248] ++ cmp r3, #0 ++ ite eq ++ moveq r5, #1 ++ movne r5, #2 ++.L3298: ++ ldrh r3, [r6, #556] ++ movw r2, #65535 ++ cmp r3, r2 ++ bne .L3308 ++ cmp r4, r3 ++ beq .L3309 ++ strh r4, [r6, #556] @ movhi ++.L3310: ++ ldrh r0, [r6, #556] ++ movw r7, #65535 ++ movs r3, #0 ++ strb r3, [r6, #564] ++ cmp r0, r7 ++ beq .L3308 ++ bl IsBlkInGcList ++ cbz r0, .L3313 ++ strh r7, [r6, #556] @ movhi ++.L3313: ++ ldr r3, .L3422+8 ++ ldrb r3, [r3, #152] @ zero_extendqisi2 ++ cbz r3, .L3314 ++ ldrh r0, [r6, #556] ++ bl ftl_get_blk_mode ++ strb r0, [r6, #564] ++.L3314: ++ ldrh r2, [r6, #556] ++ movw r3, #65535 ++ cmp r2, r3 ++ beq .L3308 ++ ldr r0, .L3422+20 ++ bl make_superblock ++ ldr r2, .L3422+12 ++ movs r3, #0 ++ strh r3, [r6, #558] @ movhi ++ strb r3, [r6, #562] ++ strh r3, [r2, #1482] @ movhi ++ ldrh r1, [r6, #556] ++ ldr r3, [r6, #300] ++ ldrh r3, [r3, r1, lsl #1] ++ strh r3, [r2, #1484] @ movhi ++.L3308: ++ ldrh r3, [r6, #556] ++ ldrh r2, [r6, #320] ++ cmp r2, r3 ++ beq .L3315 ++ ldrh r2, [r6, #368] ++ cmp r2, r3 ++ beq .L3315 ++ ldrh r2, [r6, #416] ++ cmp r2, r3 ++ bne .L3316 ++.L3315: ++ movw r3, #65535 ++ strh r3, [r6, #556] @ movhi ++.L3316: ++ ldr r7, .L3422+8 ++.L3349: ++ ldr r9, .L3422 ++ movw r3, #65535 ++ ldrh fp, [r9, #556] ++ mov r6, r9 ++ cmp fp, r3 ++ bne .L3317 ++ movs r3, #0 ++ str r3, [r9, #1132] ++.L3318: ++ ldrh r10, [r6, #1128] ++ mov r0, r10 ++ bl List_get_gc_head_node ++ uxth r2, r0 ++ cmp r2, fp ++ strh r2, [r6, #556] @ movhi ++ bne .L3319 ++ movs r3, #0 ++ movs r0, #8 ++ strh r3, [r6, #1128] @ movhi ++ b .L3256 ++.L3258: ++ ldrh r3, [r3, #416] ++ cmp r3, r2 ++ beq .L3261 ++ mov r0, r4 ++ bl FtlGcFreeTempBlock ++ cmp r0, #0 ++ beq .L3261 ++ mov r0, r4 ++ b .L3256 ++.L3259: ++ ldrh r3, [r6, #1174] ++ cmp r3, r2 ++ bne .L3260 ++ ldrh r1, [r6, #1178] ++ cmp r1, r3 ++ beq .L3260 ++ ldrh r2, [r6, #1180] ++ cmp r2, r3 ++ itttt ne ++ strhne r0, [r6, #1174] @ movhi ++ strhne r1, [r6, #1176] @ movhi ++ strhne r2, [r6, #1178] @ movhi ++ strhne r3, [r6, #1180] @ movhi ++ b .L3260 ++.L3267: ++ cmp r3, #5 ++ bhi .L3268 ++ movs r3, #18 ++ b .L3413 ++.L3270: ++ movs r3, #1 ++ strh r3, [r6, #1128] @ movhi ++.L3272: ++ bl GetSwlReplaceBlock ++ movw r3, #65535 ++ mov r4, r0 ++ cmp r0, r3 ++ bne .L3264 ++ movs r3, #0 ++ strh r3, [r5, #1480] @ movhi ++.L3262: ++ ldrh r3, [r6, #556] ++ movw r4, #65535 ++ cmp r3, r4 ++ beq .L3352 ++ cmp r8, #0 ++ beq .L3353 ++ b .L3264 ++.L3423: ++ .align 2 ++.L3422: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC157 ++ .word .LANCHOR2+556 ++.L3352: ++ ldrh r4, [r6, #416] ++ movw r3, #65535 ++ cmp r4, r3 ++ bne .L3273 ++ ldrh r5, [r6, #1174] ++ cmp r5, r4 ++ bne .L3274 ++ ldrh r3, [r6, #316] ++ ldr r2, [r6, #1124] ++ cmp r3, #24 ++ ite cc ++ movcc r3, #5120 ++ movcs r3, #1024 ++ cmp r2, r3 ++ bls .L3274 ++ ldr r2, .L3424 ++ movs r3, #0 ++ str r3, [r6, #1124] ++ strh r3, [r2, #1480] @ movhi ++ bl GetSwlReplaceBlock ++ cmp r0, r5 ++ mov r4, r0 ++ bne .L3362 ++ ldrh r2, [r6, #316] ++ ldrh r3, [r6, #1122] ++ cmp r2, r3 ++ bcs .L3277 ++ movs r0, #64 ++ bl List_get_gc_head_node ++ uxth r3, r0 ++ cmp r3, r4 ++ beq .L3279 ++ ldr r2, [r6, #3276] ++ ldr r9, .L3424+8 ++ cbnz r2, .L3280 ++ ldrh r2, [r9, #2344] ++ cmp r2, #3 ++ beq .L3280 ++ ldr r2, [r6, #1116] ++ cbnz r2, .L3280 ++ ldr r2, [r9, #2248] ++ cbnz r2, .L3280 ++ ldrb r0, [r9, #152] @ zero_extendqisi2 ++ cmp r0, #0 ++ beq .L3281 ++.L3280: ++ ldr r2, [r6, #300] ++ ldrh r0, [r9, #2344] ++ ldrh r1, [r2, r3, lsl #1] ++ ldrh r3, [r9, #2392] ++ cmp r0, #3 ++ ldrh r2, [r9, #2324] ++ mul r2, r3, r2 ++ ite eq ++ lsreq r3, r3, #1 ++ movne r3, #0 ++ add r3, r3, r2 ++ cmp r1, r3 ++ bgt .L3283 ++ movs r0, #0 ++ bl List_get_gc_head_node ++ ldr r3, [r9, #2452] ++ uxth r5, r0 ++ ldr r2, [r6, #472] ++ add r3, r3, r3, lsl #1 ++ cmp r2, r3, lsr #2 ++ bls .L3284 ++.L3415: ++ movs r3, #128 ++ b .L3414 ++.L3284: ++ movs r3, #160 ++.L3414: ++ strh r3, [r6, #1122] @ movhi ++ movw r3, #65535 ++ cmp r5, r3 ++ beq .L3279 ++.L3276: ++ ldr r3, [r6, #300] ++ mov r4, r5 ++ ldrh r1, [r6, #1120] ++ ldrh r2, [r6, #316] ++ ldrh r3, [r3, r5, lsl #1] ++ str r1, [sp, #4] ++ ldr r1, [r6, #236] ++ ldr r0, .L3424+4 ++ ldrh r1, [r1, r5, lsl #1] ++ str r1, [sp] ++ mov r1, r5 ++ bl printk ++ b .L3279 ++.L3283: ++ movs r3, #128 ++.L3416: ++ strh r3, [r6, #1122] @ movhi ++.L3279: ++ bl FtlGcReFreshBadBlk ++ cmp r8, #0 ++ bne .L3264 ++ movw r3, #65535 ++ cmp r4, r3 ++ bne .L3264 ++.L3353: ++ ldrh r3, [r6, #316] ++ cmp r3, #24 ++ bhi .L3364 ++ ldr r2, .L3424+8 ++ cmp r3, #16 ++ ldrh r5, [r2, #2390] ++ bls .L3289 ++ lsrs r5, r5, #5 ++.L3288: ++ ldrh r2, [r6, #1120] ++ cmp r2, r3 ++ bcs .L3292 ++ ldrh r3, [r6, #416] ++ movw r2, #65535 ++ cmp r3, r2 ++ bne .L3293 ++ ldrh r2, [r6, #1174] ++ cmp r2, r3 ++ bne .L3293 ++ ldr r3, .L3424 ++ ldrh r0, [r3, #1480] ++ cbnz r0, .L3294 ++ ldr r3, .L3424+8 ++ ldr r2, [r6, #472] ++ ldr r3, [r3, #2452] ++ add r3, r3, r3, lsl #1 ++ cmp r2, r3, lsr #2 ++ bcs .L3295 ++.L3294: ++ ldrh r3, [r6, #536] ++ add r3, r3, r3, lsl #1 ++ asrs r3, r3, #2 ++.L3417: ++ strh r3, [r6, #1120] @ movhi ++ movs r3, #0 ++ str r3, [r6, #1132] ++.L3256: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3281: ++ ldr r2, [r6, #300] ++ ldrh r3, [r2, r3, lsl #1] ++ cmp r3, #7 ++ bhi .L3286 ++ bl List_get_gc_head_node ++ uxth r5, r0 ++ b .L3415 ++.L3286: ++ movs r3, #64 ++ b .L3416 ++.L3277: ++ movs r3, #80 ++ b .L3416 ++.L3362: ++ mov r5, r0 ++ b .L3276 ++.L3289: ++ cmp r3, #12 ++ bls .L3290 ++ lsrs r5, r5, #4 ++ b .L3288 ++.L3290: ++ cmp r3, #8 ++ bls .L3288 ++ lsrs r5, r5, #2 ++ b .L3288 ++.L3364: ++ movs r5, #1 ++ b .L3288 ++.L3295: ++ movs r3, #18 ++ b .L3417 ++.L3293: ++ ldrh r3, [r6, #536] ++ add r3, r3, r3, lsl #1 ++ asrs r3, r3, #2 ++ strh r3, [r6, #1120] @ movhi ++.L3292: ++ ldr r3, .L3424+8 ++ ldr r3, [r3, #2248] ++ cbz r3, .L3366 ++ cmp r7, #2 ++ bhi .L3366 ++ adds r5, r5, #1 ++ uxth r5, r5 ++.L3366: ++ movw r4, #65535 ++ b .L3298 ++.L3300: ++ movs r3, #0 ++ ldrh r2, [r6, #316] ++ str r3, [r6, #1132] ++ ldrh r3, [r6, #1120] ++ ldr r4, .L3424 ++ cmp r2, r3 ++ bls .L3301 ++ ldrh r3, [r4, #1480] ++ cbnz r3, .L3302 ++ ldr r3, .L3424+8 ++ ldr r2, [r6, #472] ++ ldr r3, [r3, #2452] ++ add r3, r3, r3, lsl #1 ++ cmp r2, r3, lsr #2 ++ bcs .L3303 ++.L3302: ++ ldrh r3, [r6, #536] ++ add r3, r3, r3, lsl #1 ++ asrs r3, r3, #2 ++.L3418: ++ strh r3, [r6, #1120] @ movhi ++ bl FtlReadRefresh ++ movs r0, #0 ++ bl List_get_gc_head_node ++ ldr r3, [r6, #300] ++ uxth r0, r0 ++ ldrh r3, [r3, r0, lsl #1] ++ cmp r3, #4 ++ bls .L3301 ++.L3420: ++ ldrh r0, [r4, #1480] ++ b .L3256 ++.L3303: ++ movs r3, #18 ++ b .L3418 ++.L3301: ++ ldrh r0, [r4, #1480] ++ cmp r0, #0 ++ bne .L3305 ++ ldrh r5, [r6, #536] ++ add r3, r5, r5, lsl #1 ++ asrs r3, r3, #2 ++ strh r3, [r6, #1120] @ movhi ++ bl List_get_gc_head_node ++ ldr r3, [r6, #300] ++ uxth r0, r0 ++ ldr r1, .L3424+8 ++ ldrh r2, [r3, r0, lsl #1] ++ ldrh r0, [r1, #2392] ++ ldrh r3, [r1, #2324] ++ muls r3, r0, r3 ++ add r3, r3, r3, lsr #31 ++ cmp r2, r3, asr #1 ++ ble .L3306 ++ ldrh r3, [r6, #316] ++ subs r5, r5, #1 ++ cmp r3, r5 ++ blt .L3306 ++ bl FtlReadRefresh ++ b .L3420 ++.L3306: ++ cmp r2, #0 ++ bne .L3305 ++ movw r0, #65535 ++ bl decrement_vpc_count ++ ldrh r0, [r6, #316] ++ adds r0, r0, #1 ++ b .L3256 ++.L3309: ++ ldrh r3, [r6, #1174] ++ cmp r3, r4 ++ beq .L3310 ++ ldr r2, [r6, #300] ++ ldrh r3, [r2, r3, lsl #1] ++ cbnz r3, .L3311 ++ strh r4, [r6, #1174] @ movhi ++.L3311: ++ ldrh r3, [r6, #1174] ++ strh r3, [r6, #556] @ movhi ++ movw r3, #65535 ++ strh r3, [r6, #1174] @ movhi ++ b .L3310 ++.L3319: ++ str r0, [sp, #16] ++ mov r0, r2 ++ str r2, [sp, #12] ++ add r10, r10, #1 ++ bl IsBlkInGcList ++ ldr r2, [sp, #12] ++ ldr r3, [sp, #16] ++ cbz r0, .L3320 ++ strh r10, [r6, #1128] @ movhi ++ b .L3318 ++.L3320: ++ ldrh lr, [r7, #2324] ++ uxth r10, r10 ++ ldrh r1, [r7, #2390] ++ uxth r3, r3 ++ ldr r0, [r6, #300] ++ strh r10, [r6, #1128] @ movhi ++ mul r1, lr, r1 ++ ldrh ip, [r0, r3, lsl #1] ++ add lr, r1, r1, lsr #31 ++ cmp ip, lr, asr #1 ++ bgt .L3322 ++ cmp r10, #48 ++ bls .L3323 ++ cmp ip, #8 ++ bls .L3323 ++ ldrh ip, [r6, #1164] ++ cmp ip, #35 ++ bhi .L3323 ++.L3322: ++ mov ip, #0 ++ strh ip, [r6, #1128] @ movhi ++.L3323: ++ ldrh r3, [r0, r3, lsl #1] ++ cmp r1, r3 ++ bgt .L3324 ++ cmp r4, fp ++ bne .L3324 ++ ldrh r1, [r6, #1128] ++ cmp r1, #3 ++ bhi .L3324 ++ movs r3, #0 ++ strh r4, [r6, #556] @ movhi ++ strh r3, [r6, #1128] @ movhi ++.L3421: ++ ldr r3, .L3424 ++ ldrh r0, [r3, #1480] ++ b .L3256 ++.L3425: ++ .align 2 ++.L3424: ++ .word .LANCHOR4 ++ .word .LC158 ++ .word .LANCHOR0 ++.L3324: ++ cbnz r3, .L3325 ++ movw r0, #65535 ++ bl decrement_vpc_count ++ ldrh r3, [r6, #1128] ++ adds r3, r3, #1 ++ strh r3, [r6, #1128] @ movhi ++ b .L3318 ++.L3325: ++ movs r3, #0 ++ strb r3, [r9, #564] ++ ldrb r3, [r7, #152] @ zero_extendqisi2 ++ cbz r3, .L3326 ++ mov r0, r2 ++ bl ftl_get_blk_mode ++ strb r0, [r9, #564] ++.L3326: ++ ldr r0, .L3426 ++ bl make_superblock ++ ldr r2, .L3426+4 ++ movs r3, #0 ++ ldrh r0, [r9, #556] ++ ldr r1, [r9, #300] ++ strh r3, [r2, #1482] @ movhi ++ ldrh r1, [r1, r0, lsl #1] ++ strh r3, [r9, #558] @ movhi ++ strb r3, [r9, #562] ++ strh r1, [r2, #1484] @ movhi ++.L3317: ++ cmp r8, #1 ++ bne .L3327 ++ bl FtlReadRefresh ++.L3327: ++ movs r3, #1 ++ str r3, [r9, #3280] ++ ldrh r3, [r7, #2390] ++ str r3, [sp, #16] ++ ldrb r3, [r7, #152] @ zero_extendqisi2 ++ cbz r3, .L3328 ++ ldrb r3, [r9, #564] @ zero_extendqisi2 ++ cmp r3, #1 ++ itt eq ++ ldrheq r3, [r7, #2392] ++ streq r3, [sp, #16] ++.L3328: ++ ldrh r3, [r9, #558] ++ ldr r1, [sp, #16] ++ adds r2, r3, r5 ++ cmp r2, r1 ++ itt gt ++ movgt r2, r1 ++ subgt r5, r2, r3 ++ mov r3, #0 ++ it gt ++ uxthgt r5, r5 ++.L3419: ++ str r3, [sp, #20] ++ ldrh r3, [sp, #20] ++ ldr r6, .L3426+8 ++ cmp r5, r3 ++ bls .L3337 ++ ldr r3, [sp, #20] ++ movw fp, #65535 ++ ldrh r10, [r6, #558] ++ mov ip, #36 ++ ldrh r9, [r7, #2324] ++ ldr r0, [r6, #1152] ++ add r10, r10, r3 ++ addw r3, r6, #570 ++ str r3, [sp, #24] ++ movs r3, #0 ++ str r3, [sp, #12] ++ b .L3338 ++.L3332: ++ ldr r1, [sp, #24] ++ ldrh r2, [r1, #2]! ++ cmp r2, fp ++ str r1, [sp, #24] ++ beq .L3331 ++ ldr r1, [sp, #12] ++ orr r2, r10, r2, lsl #10 ++ mla lr, ip, r1, r0 ++ str r2, [lr, #4] ++ mov r2, r1 ++ adds r2, r2, #1 ++ uxth r2, r2 ++ str r2, [sp, #12] ++.L3331: ++ adds r3, r3, #1 ++.L3338: ++ uxth r2, r3 ++ cmp r9, r2 ++ bhi .L3332 ++ ldrb r2, [r6, #564] @ zero_extendqisi2 ++ mov fp, #0 ++ ldr r6, .L3426+8 ++ ldr r1, [sp, #12] ++ bl FlashReadPages ++.L3333: ++ ldr r2, [sp, #12] ++ uxth r3, fp ++ cmp r2, r3 ++ bhi .L3336 ++ ldr r3, [sp, #20] ++ adds r3, r3, #1 ++ b .L3419 ++.L3336: ++ movs r3, #36 ++ ldr r2, [r6, #1152] ++ mul r9, r3, fp ++ add r1, r2, r9 ++ ldr r2, [r2, r9] ++ adds r2, r2, #1 ++ beq .L3334 ++ ldr r10, [r1, #12] ++ movw r2, #61589 ++ ldrh r1, [r10] ++ cmp r1, r2 ++ bne .L3334 ++ movs r2, #0 ++ add r1, sp, #32 ++ ldr r0, [r10, #8] ++ str r3, [sp, #24] ++ bl log2phys ++ ldr r1, [r6, #1152] ++ ldr r2, [sp, #32] ++ ldr r3, [sp, #24] ++ add r1, r1, r9 ++ ldr r0, [r1, #4] ++ bic r2, r2, #-2147483648 ++ cmp r2, r0 ++ bne .L3334 ++ ldr r2, .L3426+4 ++ ldr r0, .L3426+4 ++ ldr r1, [r1, #16] ++ ldrh r2, [r2, #1482] ++ str r3, [sp, #28] ++ adds r2, r2, #1 ++ strh r2, [r0, #1482] @ movhi ++ ldr r0, [r6, #1136] ++ ldr r2, [r6, #3308] ++ mla r2, r3, r0, r2 ++ str r1, [r2, #16] ++ str r2, [sp, #24] ++ bl Ftl_get_new_temp_ppa ++ ldr r2, [sp, #24] ++ ldr r1, [r6, #3308] ++ ldr r3, [sp, #28] ++ str r0, [r2, #4] ++ ldr r2, [r6, #1136] ++ mla r3, r3, r2, r1 ++ ldr r2, [r6, #1152] ++ add r2, r2, r9 ++ ldr r1, [r2, #8] ++ str r1, [r3, #8] ++ movs r1, #1 ++ ldr r2, [r2, #12] ++ str r2, [r3, #12] ++ ldr r3, [sp, #32] ++ str r3, [r10, #12] ++ ldrh r3, [r6, #416] ++ strh r3, [r10, #2] @ movhi ++ ldr r3, [r6, #512] ++ ldr r0, [r6, #1152] ++ str r3, [r10, #4] ++ ldr r3, [r6, #1136] ++ add r0, r0, r9 ++ adds r3, r3, #1 ++ str r3, [r6, #1136] ++ bl FtlGcBufAlloc ++ ldrb r3, [r7, #152] @ zero_extendqisi2 ++ cbnz r3, .L3335 ++ ldrb r2, [r6, #423] @ zero_extendqisi2 ++ ldr r3, [r6, #1136] ++ cmp r2, r3 ++ beq .L3335 ++ ldrh r3, [r6, #420] ++ cbnz r3, .L3334 ++.L3335: ++ bl Ftl_gc_temp_data_write_back ++ cbz r0, .L3334 ++ ldr r3, .L3426+8 ++ movs r2, #0 ++ movw r1, #65535 ++ str r2, [r3, #3280] ++ strh r1, [r3, #556] @ movhi ++ strh r2, [r3, #558] @ movhi ++ b .L3421 ++.L3334: ++ add fp, fp, #1 ++ b .L3333 ++.L3337: ++ ldrh r3, [r6, #558] ++ add r5, r5, r3 ++ ldr r3, [sp, #16] ++ uxth r5, r5 ++ cmp r3, r5 ++ strh r5, [r6, #558] @ movhi ++ bhi .L3339 ++ ldr r3, [r6, #1136] ++ ldr r5, .L3426+4 ++ cbz r3, .L3340 ++ bl Ftl_gc_temp_data_write_back ++ cbz r0, .L3340 ++ movs r3, #0 ++ ldrh r0, [r5, #1480] ++ str r3, [r6, #3280] ++ b .L3256 ++.L3340: ++ ldrh r5, [r5, #1482] ++ cbnz r5, .L3341 ++ ldrh r2, [r6, #556] ++ ldr r3, [r6, #300] ++ ldrh r3, [r3, r2, lsl #1] ++ cbz r3, .L3341 ++.L3342: ++ ldr r3, [r7, #2452] ++ cmp r5, r3 ++ bcs .L3347 ++ movs r2, #0 ++ add r1, sp, #36 ++ mov r0, r5 ++ bl log2phys ++ ldr r0, [sp, #36] ++ adds r3, r0, #1 ++ beq .L3343 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r6, #556] ++ cmp r3, r0 ++ bne .L3343 ++.L3347: ++ ldr r3, [r7, #2452] ++ cmp r5, r3 ++ bcc .L3341 ++ ldrh r2, [r6, #556] ++ movs r1, #0 ++ ldr r3, [r6, #300] ++ strh r1, [r3, r2, lsl #1] @ movhi ++ ldrh r0, [r6, #556] ++ bl update_vpc_list ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ bl FtlVpcTblFlush ++.L3341: ++ movw r3, #65535 ++ strh r3, [r6, #556] @ movhi ++.L3339: ++ ldrh r3, [r6, #316] ++ cmp r3, #2 ++ bhi .L3348 ++ ldrh r5, [r7, #2390] ++ b .L3349 ++.L3343: ++ adds r5, r5, #1 ++ b .L3342 ++.L3348: ++ movs r2, #0 ++ str r2, [r6, #3280] ++ ldr r2, .L3426+4 ++ ldrh r0, [r2, #1480] ++ cmp r0, #0 ++ bne .L3256 ++ adds r0, r3, #1 ++ b .L3256 ++.L3355: ++ movs r0, #0 ++ b .L3256 ++.L3274: ++ cmp r8, #0 ++ bne .L3354 ++ b .L3353 ++.L3273: ++ cmp r8, #0 ++ bne .L3305 ++ b .L3353 ++.L3427: ++ .align 2 ++.L3426: ++ .word .LANCHOR2+556 ++ .word .LANCHOR4 ++ .word .LANCHOR2 ++ .fnend ++ .size ftl_do_gc, .-ftl_do_gc ++ .align 1 ++ .global FtlCacheWriteBack ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlCacheWriteBack, %function ++FtlCacheWriteBack: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r5, .L3470 ++ ldr r9, [r5, #228] ++ cmp r9, #0 ++ bne .L3430 ++ ldr r4, .L3470+4 ++ ldr r1, [r4, #2444] ++ cbz r1, .L3430 ++ ldr r3, .L3470+8 ++ ldr r6, [r3, #1488] ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cbz r3, .L3455 ++ ldrb r8, [r6, #8] @ zero_extendqisi2 ++ add r0, r8, #-1 ++ rsbs r8, r0, #0 ++ adc r8, r8, r0 ++.L3432: ++ movs r7, #0 ++ mov r10, #36 ++ ldrb r3, [r6, #9] @ zero_extendqisi2 ++ mov r2, r8 ++ ldr r0, [r4, #2448] ++ bl FlashProgPages ++.L3433: ++ ldr r3, [r4, #2444] ++ cmp r7, r3 ++ bcc .L3440 ++.L3452: ++ movs r3, #0 ++ str r3, [r4, #2444] ++.L3430: ++ movs r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3455: ++ mov r8, r9 ++ b .L3432 ++.L3440: ++ mul fp, r10, r7 ++ ldr r2, [r4, #2448] ++ add r0, r2, fp ++ ldr r2, [r2, fp] ++ adds r2, r2, #1 ++ bne .L3434 ++ mov r10, #0 ++.L3435: ++ ldr r3, [r4, #2444] ++ cmp r9, r3 ++ bcc .L3450 ++ movw r6, #16386 ++.L3453: ++ ldrh r3, [r5, #1182] ++ cmp r3, #0 ++ beq .L3452 ++ movs r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ subs r6, r6, #1 ++ bne .L3453 ++ b .L3452 ++.L3434: ++ ldr r2, [r0, #4] ++ cmp r8, #0 ++ bne .L3436 ++.L3468: ++ str r2, [sp, #4] ++ add r1, sp, #4 ++ movs r2, #1 ++ ldr r0, [r0, #16] ++ bl log2phys ++ ldr r2, [r4, #2448] ++ add r3, r2, fp ++ ldr r3, [r3, #12] ++ ldr r0, [r3, #12] ++ adds r2, r0, #1 ++ beq .L3438 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r2, [r5, #300] ++ mov fp, r0 ++ ldrh r2, [r2, r0, lsl #1] ++ cbnz r2, .L3439 ++ mov r1, r0 ++ ldr r0, .L3470+12 ++ bl printk ++.L3439: ++ mov r0, fp ++ bl decrement_vpc_count ++.L3438: ++ adds r7, r7, #1 ++ b .L3433 ++.L3436: ++ orr r2, r2, #-2147483648 ++ b .L3468 ++.L3450: ++ movs r7, #36 ++ ldr r3, [r4, #2448] ++ mul r7, r7, r9 ++ mov fp, #1 ++ mov r2, #-1 ++ str r2, [r3, r7] ++.L3441: ++ ldr r2, [r4, #2448] ++ adds r3, r2, r7 ++ ldr r2, [r2, r7] ++ ldr r0, [r3, #4] ++ adds r2, r2, #1 ++ beq .L3445 ++ cmp r8, #0 ++ bne .L3446 ++.L3469: ++ str r0, [sp, #4] ++ movs r2, #1 ++ ldr r0, [r3, #16] ++ add r1, sp, #4 ++ bl log2phys ++ ldr r3, [r4, #2448] ++ add r7, r7, r3 ++ ldr r3, [r7, #12] ++ ldr r0, [r3, #12] ++ adds r3, r0, #1 ++ beq .L3448 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r3, [r5, #300] ++ mov r7, r0 ++ ldrh r2, [r3, r0, lsl #1] ++ cbnz r2, .L3449 ++ mov r1, r0 ++ ldr r0, .L3470+12 ++ bl printk ++.L3449: ++ mov r0, r7 ++ bl decrement_vpc_count ++.L3448: ++ add r9, r9, #1 ++ b .L3435 ++.L3445: ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r6] ++ cmp r3, r0 ++ bne .L3442 ++ ldr r1, [r5, #300] ++ ldrh r0, [r6, #4] ++ ldrh r2, [r1, r3, lsl #1] ++ subs r2, r2, r0 ++ strh r2, [r1, r3, lsl #1] @ movhi ++ ldrh r3, [r4, #2390] ++ strb r10, [r6, #6] ++ strh r10, [r6, #4] @ movhi ++ strh r3, [r6, #2] @ movhi ++.L3442: ++ ldrh r3, [r6, #4] ++ cbnz r3, .L3443 ++ mov r0, r6 ++ bl allocate_new_data_superblock ++.L3443: ++ ldr r3, [r5, #700] ++ adds r3, r3, #1 ++ str r3, [r5, #700] ++ ldr r3, [r4, #2448] ++ add r3, r3, r7 ++ ldr r0, [r3, #4] ++ ubfx r0, r0, #10, #16 ++ bl FtlGcMarkBadPhyBlk ++ mov r0, r6 ++ bl get_new_active_ppa ++ ldr r3, [r4, #2448] ++ mov r2, r0 ++ str r0, [sp, #4] ++ movs r1, #1 ++ adds r0, r3, r7 ++ str r2, [r0, #4] ++ mov r2, r8 ++ ldrb r3, [r6, #9] @ zero_extendqisi2 ++ bl FlashProgPages ++ ldr r3, [r4, #2448] ++ ldr r3, [r3, r7] ++ adds r3, r3, #1 ++ it eq ++ streq fp, [r5, #228] ++ ldr r3, [r5, #228] ++ cmp r3, #0 ++ beq .L3441 ++ b .L3430 ++.L3446: ++ orr r0, r0, #-2147483648 ++ b .L3469 ++.L3471: ++ .align 2 ++.L3470: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR4 ++ .word .LC159 ++ .fnend ++ .size FtlCacheWriteBack, .-FtlCacheWriteBack ++ .align 1 ++ .global FtlSysFlush ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlSysFlush, %function ++FtlSysFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3474 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r3, [r3, #228] ++ cbnz r3, .L3473 ++ ldr r3, .L3474+4 ++ ldr r4, [r3, #500] ++ cmp r4, #1 ++ bne .L3473 ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ mov r0, r4 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L3473: ++ movs r0, #0 ++ pop {r4, pc} ++.L3475: ++ .align 2 ++.L3474: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .fnend ++ .size FtlSysFlush, .-FtlSysFlush ++ .align 1 ++ .global FtlDeInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlDeInit, %function ++FtlDeInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, lr} ++ .save {r3, lr} ++ ldr r3, .L3478 ++ ldr r3, [r3, #500] ++ cmp r3, #1 ++ bne .L3477 ++ bl FtlSysFlush ++.L3477: ++ movs r0, #0 ++ pop {r3, pc} ++.L3479: ++ .align 2 ++.L3478: ++ .word .LANCHOR1 ++ .fnend ++ .size FtlDeInit, .-FtlDeInit ++ .align 1 ++ .global ftl_deinit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_deinit, %function ++ftl_deinit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, lr} ++ .save {r3, lr} ++ bl ftl_flash_de_init ++ bl FtlDeInit ++ pop {r3, lr} ++ b ftl_flash_de_init ++ .fnend ++ .size ftl_deinit, .-ftl_deinit ++ .align 1 ++ .global rk_ftl_de_init ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_de_init, %function ++rk_ftl_de_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, lr} ++ .save {r3, lr} ++ movs r1, #0 ++ ldr r0, .L3482 ++ bl printk ++ pop {r3, lr} ++ b ftl_deinit ++.L3483: ++ .align 2 ++.L3482: ++ .word .LC160 ++ .fnend ++ .size rk_ftl_de_init, .-rk_ftl_de_init ++ .align 1 ++ .global ftl_cache_flush ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_cache_flush, %function ++ftl_cache_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b FtlCacheWriteBack ++ .fnend ++ .size ftl_cache_flush, .-ftl_cache_flush ++ .align 1 ++ .global rk_ftl_cache_write_back ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_cache_write_back, %function ++rk_ftl_cache_write_back: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b FtlCacheWriteBack ++ .fnend ++ .size rk_ftl_cache_write_back, .-rk_ftl_cache_write_back ++ .align 1 ++ .global ftl_discard ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_discard, %function ++ftl_discard: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ .pad #12 ++ mov r6, r0 ++ ldr r7, .L3504 ++ mov r4, r1 ++ ldr r3, [r7, #2432] ++ cmp r3, r0 ++ bls .L3495 ++ cmp r3, r1 ++ bcc .L3495 ++ adds r2, r0, r1 ++ cmp r3, r2 ++ bcc .L3495 ++ cmp r1, #31 ++ bls .L3497 ++ ldr r3, .L3504+4 ++ ldr r2, [r3, #228] ++ mov r8, r3 ++ cbnz r2, .L3497 ++ bl FtlCacheWriteBack ++ ldrh r5, [r7, #2396] ++ mov r0, r6 ++ mov r1, r5 ++ bl __aeabi_uidiv ++ smulbb r3, r0, r5 ++ mov r9, r0 ++ subs r6, r6, r3 ++ uxth r6, r6 ++ cbz r6, .L3488 ++ subs r5, r5, r6 ++ add r9, r0, #1 ++ cmp r5, r4 ++ it cs ++ movcs r5, r4 ++ uxth r5, r5 ++ subs r4, r4, r5 ++.L3488: ++ ldr r5, .L3504+8 ++ mov r3, #-1 ++ str r3, [sp, #4] ++.L3489: ++ ldrh r3, [r7, #2396] ++ cmp r4, r3 ++ bcs .L3491 ++ ldr r3, .L3504+8 ++ ldr r2, [r3, #1492] ++ cmp r2, #32 ++ bls .L3497 ++ movs r2, #0 ++ str r2, [r3, #1492] ++ bl l2p_flush ++ bl FtlVpcTblFlush ++.L3497: ++ movs r0, #0 ++ b .L3486 ++.L3491: ++ movs r2, #0 ++ mov r1, sp ++ mov r0, r9 ++ bl log2phys ++ ldr r3, [sp] ++ adds r3, r3, #1 ++ beq .L3490 ++ ldr r3, [r5, #1492] ++ movs r2, #1 ++ add r1, sp, #4 ++ mov r0, r9 ++ adds r3, r3, #1 ++ str r3, [r5, #1492] ++ ldr r3, [r8, #480] ++ adds r3, r3, #1 ++ str r3, [r8, #480] ++ bl log2phys ++ ldr r0, [sp] ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ bl decrement_vpc_count ++.L3490: ++ ldrh r3, [r7, #2396] ++ add r9, r9, #1 ++ subs r4, r4, r3 ++ b .L3489 ++.L3495: ++ mov r0, #-1 ++.L3486: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L3505: ++ .align 2 ++.L3504: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .fnend ++ .size ftl_discard, .-ftl_discard ++ .align 1 ++ .global FtlDiscard ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlDiscard, %function ++FtlDiscard: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_discard ++ .fnend ++ .size FtlDiscard, .-FtlDiscard ++ .align 1 ++ .global ftl_read ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_read, %function ++ftl_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r9, r3 ++ ldr r3, .L3548 ++ .pad #84 ++ sub sp, sp, #84 ++ mov r5, r1 ++ str r2, [sp, #44] ++ ldr r3, [r3, #500] ++ cmp r3, #1 ++ bne .L3532 ++ cmp r0, #16 ++ bne .L3509 ++ mov r2, r9 ++ ldr r1, [sp, #44] ++ add r0, r5, #256 ++ bl FtlVendorPartRead ++ mov r8, r0 ++.L3507: ++ mov r0, r8 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3509: ++ ldr r2, .L3548+4 ++ ldr r3, [r2, #2432] ++ cmp r1, r3 ++ bcs .L3532 ++ ldr r1, [sp, #44] ++ cmp r1, r3 ++ bhi .L3532 ++ adds r1, r5, r1 ++ cmp r3, r1 ++ str r1, [sp, #48] ++ bcc .L3532 ++ ldrh r4, [r2, #2396] ++ mov r0, r5 ++ mov r1, r4 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #48] ++ mov r1, r4 ++ str r0, [sp, #36] ++ subs r0, r3, #1 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #36] ++ ldr r1, [sp, #44] ++ str r0, [sp, #40] ++ rsb r3, r3, #1 ++ add r3, r3, r0 ++ str r3, [sp, #32] ++ ldr r3, .L3548+8 ++ ldr r2, [r3, #504] ++ add r2, r2, r1 ++ ldr r1, [sp, #32] ++ str r2, [r3, #504] ++ ldr r2, [r3, #476] ++ add r2, r2, r1 ++ mov r1, r0 ++ ldr r0, [sp, #36] ++ str r2, [r3, #476] ++ bl FtlCacheMetchLpa ++ cbz r0, .L3510 ++ bl FtlCacheWriteBack ++.L3510: ++ ldr r6, [sp, #36] ++ movs r3, #0 ++ ldr r4, .L3548+8 ++ mov r7, r3 ++ mov r8, r3 ++ str r3, [sp, #28] ++ str r3, [sp, #52] ++.L3511: ++ ldr r3, [sp, #32] ++ cbnz r3, .L3528 ++ ldr r3, .L3548+8 ++ ldrh r3, [r3, #1182] ++ cmp r3, #0 ++ beq .L3507 ++ movs r1, #1 ++ ldr r0, [sp, #32] ++ bl ftl_do_gc ++ b .L3507 ++.L3528: ++ movs r2, #0 ++ add r1, sp, #76 ++ mov r0, r6 ++ bl log2phys ++ ldr r3, [sp, #76] ++ adds r2, r3, #1 ++ bne .L3512 ++ mov r10, #0 ++.L3513: ++ ldr r3, .L3548+4 ++ ldrh r0, [r3, #2396] ++ cmp r10, r0 ++ bcc .L3515 ++.L3516: ++ ldr r3, [sp, #32] ++ adds r6, r6, #1 ++ subs r3, r3, #1 ++ str r3, [sp, #32] ++ beq .L3520 ++ ldr r3, .L3548+4 ++ ldrh r3, [r3, #2324] ++ cmp r7, r3, lsl #3 ++ bne .L3511 ++.L3520: ++ cmp r7, #0 ++ beq .L3511 ++ movs r2, #0 ++ mov r1, r7 ++ ldr r0, [r4, #3304] ++ mov fp, #0 ++ bl FlashReadPages ++ ldr r3, [sp, #28] ++ lsls r3, r3, #9 ++ str r3, [sp, #68] ++ ldr r3, [sp, #56] ++ lsls r3, r3, #9 ++ str r3, [sp, #60] ++ ldr r3, [sp, #52] ++ lsls r3, r3, #9 ++ str r3, [sp, #64] ++.L3527: ++ mov r10, #36 ++ ldr r3, [r4, #3304] ++ mul r10, r10, fp ++ ldr r1, [sp, #36] ++ add r3, r3, r10 ++ ldr r2, [r3, #16] ++ cmp r1, r2 ++ bne .L3522 ++ ldr r1, [r3, #8] ++ ldr r3, [r4, #3332] ++ cmp r1, r3 ++ bne .L3523 ++ ldr r3, [sp, #60] ++ mov r0, r9 ++ ldr r2, [sp, #64] ++ add r1, r1, r3 ++.L3547: ++ bl ftl_memcpy ++.L3523: ++ ldr r3, [r4, #3304] ++ ldr r2, [r3, r10] ++ add r1, r3, r10 ++ adds r3, r2, #1 ++ itttt eq ++ ldreq r3, [r4, #676] ++ moveq r8, r2 ++ addeq r3, r3, #1 ++ streq r3, [r4, #676] ++ ldr r3, [r1, #12] ++ ldr r2, [r1, #16] ++ ldr r3, [r3, #8] ++ cmp r2, r3 ++ beq .L3525 ++ ldr r3, [r4, #676] ++ adds r3, r3, #1 ++ str r3, [r4, #676] ++ ldr r2, [r1, #8] ++ ldr r3, [r1, #12] ++ ldr r0, [r2, #4] ++ str r0, [sp, #16] ++ ldr r2, [r2] ++ ldr r0, .L3548+12 ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r2, [r1, #4] ++ ldr r3, [r3] ++ ldr r1, [r1, #16] ++ bl printk ++.L3525: ++ ldr r3, [r4, #3304] ++ add r2, r3, r10 ++ ldr r3, [r3, r10] ++ cmp r3, #256 ++ bne .L3526 ++ ldr r0, [r2, #4] ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++.L3526: ++ add fp, fp, #1 ++ cmp r7, fp ++ bne .L3527 ++ movs r7, #0 ++ b .L3511 ++.L3515: ++ mla r0, r0, r6, r10 ++ cmp r5, r0 ++ bhi .L3514 ++ ldr r3, [sp, #48] ++ cmp r3, r0 ++ bls .L3514 ++ subs r0, r0, r5 ++ mov r2, #512 ++ movs r1, #0 ++ add r0, r9, r0, lsl #9 ++ bl ftl_memset ++.L3514: ++ add r10, r10, #1 ++ b .L3513 ++.L3512: ++ ldr r2, [r4, #3304] ++ mov r10, #36 ++ mla r10, r10, r7, r2 ++ str r3, [r10, #4] ++ ldr r3, [sp, #36] ++ cmp r6, r3 ++ bne .L3517 ++ ldr r3, [r4, #3332] ++ mov r0, r5 ++ str r3, [r10, #8] ++ ldr r3, .L3548+4 ++ ldrh fp, [r3, #2396] ++ mov r1, fp ++ bl __aeabi_uidivmod ++ ldr r2, [sp, #44] ++ sub r3, fp, r1 ++ str r1, [sp, #56] ++ cmp r3, r2 ++ it cs ++ movcs r3, r2 ++ cmp r3, fp ++ str r3, [sp, #52] ++ bne .L3518 ++ str r9, [r10, #8] ++.L3518: ++ ldr r3, .L3548+4 ++ ldr r2, [r4, #3344] ++ str r6, [r10, #16] ++ ldrh r3, [r3, #2402] ++ muls r3, r7, r3 ++ adds r7, r7, #1 ++ bic r3, r3, #3 ++ add r3, r3, r2 ++ str r3, [r10, #12] ++ b .L3516 ++.L3517: ++ ldr r3, [sp, #40] ++ cmp r6, r3 ++ bne .L3519 ++ ldr r3, [r4, #3336] ++ ldr r1, [sp, #48] ++ str r3, [r10, #8] ++ ldr r3, .L3548+4 ++ ldrh r2, [r3, #2396] ++ mul r3, r2, r6 ++ subs r1, r1, r3 ++ cmp r2, r1 ++ str r1, [sp, #28] ++ bne .L3518 ++.L3546: ++ subs r3, r3, r5 ++ add r3, r9, r3, lsl #9 ++ str r3, [r10, #8] ++ b .L3518 ++.L3519: ++ ldr r3, .L3548+4 ++ ldrh r3, [r3, #2396] ++ muls r3, r6, r3 ++ b .L3546 ++.L3522: ++ ldr r1, [sp, #40] ++ cmp r1, r2 ++ bne .L3523 ++ ldr r1, [r3, #8] ++ ldr r3, [r4, #3336] ++ cmp r1, r3 ++ bne .L3523 ++ ldr r3, .L3548+4 ++ ldr r2, [sp, #68] ++ ldrh r0, [r3, #2396] ++ ldr r3, [sp, #40] ++ muls r0, r3, r0 ++ subs r0, r0, r5 ++ add r0, r9, r0, lsl #9 ++ b .L3547 ++.L3532: ++ mov r8, #-1 ++ b .L3507 ++.L3549: ++ .align 2 ++.L3548: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC148 ++ .fnend ++ .size ftl_read, .-ftl_read ++ .align 1 ++ .global ftl_vendor_read ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_vendor_read, %function ++ftl_vendor_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ movs r0, #16 ++ b ftl_read ++ .fnend ++ .size ftl_vendor_read, .-ftl_vendor_read ++ .align 1 ++ .global FlashBootVendorRead ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashBootVendorRead, %function ++FlashBootVendorRead: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ bl rknand_device_lock ++ ldr r3, .L3554 ++ ldr r3, [r3, #500] ++ cmp r3, #1 ++ bne .L3553 ++ mov r0, r4 ++ mov r2, r6 ++ mov r1, r5 ++ bl ftl_vendor_read ++ mov r4, r0 ++.L3552: ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L3553: ++ mov r4, #-1 ++ b .L3552 ++.L3555: ++ .align 2 ++.L3554: ++ .word .LANCHOR1 ++ .fnend ++ .size FlashBootVendorRead, .-FlashBootVendorRead ++ .align 1 ++ .global ftl_sys_read ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_sys_read, %function ++ftl_sys_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ add r1, r0, #256 ++ movs r0, #16 ++ b ftl_read ++ .fnend ++ .size ftl_sys_read, .-ftl_sys_read ++ .align 1 ++ .global StorageSysDataLoad ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type StorageSysDataLoad, %function ++StorageSysDataLoad: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ mov r4, r1 ++ mov r5, r0 ++ mov r2, #512 ++ movs r1, #0 ++ mov r0, r4 ++ bl ftl_memset ++ bl rknand_device_lock ++ mov r2, r4 ++ movs r1, #1 ++ mov r0, r5 ++ bl ftl_sys_read ++ mov r4, r0 ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r3, r4, r5, pc} ++ .fnend ++ .size StorageSysDataLoad, .-StorageSysDataLoad ++ .align 1 ++ .global FtlRead ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlRead, %function ++FtlRead: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_read ++ .fnend ++ .size FtlRead, .-FtlRead ++ .align 1 ++ .global FtlInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlInit, %function ++FtlInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r3, #-1 ++ ldr r7, .L3575 ++ ldr r2, .L3575+4 ++ ldr r6, .L3575+8 ++ ldr r4, .L3575+12 ++ ldr r1, .L3575+16 ++ str r3, [r7, #500] ++ movs r3, #0 ++ ldr r0, .L3575+20 ++ str r3, [r2, #1496] ++ str r3, [r4, #228] ++ bl printk ++ add r0, r6, #124 ++ bl FtlConstantsInit ++ bl FtlMemInit ++ bl FtlVariablesInit ++ ldrh r0, [r6, #2328] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cbz r0, .L3560 ++ ldr r1, .L3575+24 ++ ldr r0, .L3575+28 ++.L3574: ++ bl printk ++.L3561: ++ movs r0, #0 ++ pop {r3, r4, r5, r6, r7, pc} ++.L3560: ++ bl FtlSysBlkInit ++ mov r5, r0 ++ cbz r0, .L3562 ++ ldr r1, .L3575+24 ++ ldr r0, .L3575+32 ++ b .L3574 ++.L3562: ++ movs r1, #1 ++ str r1, [r7, #500] ++ bl ftl_do_gc ++ ldrh r7, [r4, #316] ++ cmp r7, #15 ++ bhi .L3563 ++ movw r6, #65535 ++.L3566: ++ ldrh r3, [r4, #556] ++ cmp r3, r6 ++ bne .L3564 ++ ldrh r3, [r4, #1174] ++ cmp r3, r6 ++ bne .L3564 ++ and r0, r5, #63 ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ bl FtlGcRefreshBlock ++.L3564: ++ movs r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ movs r1, #1 ++ movs r0, #0 ++ bl ftl_do_gc ++ ldrh r2, [r4, #316] ++ adds r3, r7, #2 ++ cmp r2, r3 ++ bhi .L3561 ++ adds r5, r5, #1 ++ cmp r5, #4096 ++ bne .L3566 ++ b .L3561 ++.L3563: ++ ldrb r3, [r6, #152] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3561 ++ movs r4, #128 ++.L3568: ++ movs r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ subs r4, r4, #1 ++ bne .L3568 ++ b .L3561 ++.L3576: ++ .align 2 ++.L3575: ++ .word .LANCHOR1 ++ .word .LANCHOR4 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC76 ++ .word .LC77 ++ .word .LANCHOR3+224 ++ .word .LC161 ++ .word .LC162 ++ .fnend ++ .size FtlInit, .-FtlInit ++ .align 1 ++ .global rk_ftl_init ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_init, %function ++rk_ftl_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ mov r0, #2048 ++ ldr r4, .L3581 ++ movs r5, #0 ++ bl ftl_dma32_malloc ++ add r1, r4, #1504 ++ str r0, [r4, #1500] ++ addw r0, r4, #1180 ++ str r5, [r4, #1184] ++ str r5, [r4, #1180] ++ str r5, [r4, #1504] ++ bl rknand_get_reg_addr ++ ldr r3, [r4, #1180] ++ cbz r3, .L3580 ++ bl rk_nandc_irq_init ++ mov r3, #2048 ++ mov r2, r5 ++ mov r1, r5 ++ ldr r0, [r4, #1500] ++ bl FlashSramLoadStore ++ bl rknand_flash_cs_init ++ ldr r0, [r4, #1180] ++ bl FlashInit ++ mov r4, r0 ++ cbnz r0, .L3579 ++ bl FtlInit ++.L3579: ++ mov r1, r4 ++ ldr r0, .L3581+4 ++ bl printk ++.L3577: ++ mov r0, r4 ++ pop {r3, r4, r5, pc} ++.L3580: ++ mov r4, #-1 ++ b .L3577 ++.L3582: ++ .align 2 ++.L3581: ++ .word .LANCHOR4 ++ .word .LC163 ++ .fnend ++ .size rk_ftl_init, .-rk_ftl_init ++ .align 1 ++ .global ftl_fix_nand_power_lost_error ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_fix_nand_power_lost_error, %function ++ftl_fix_nand_power_lost_error: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3597 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #48 ++ sub sp, sp, #48 ++ mov r8, r3 ++ ldrb r2, [r3, #152] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3583 ++ ldr r4, .L3597+4 ++ movw r5, #4097 ++ ldr r7, .L3597+8 ++ ldr r0, .L3597+12 ++ ldr r3, [r4, #300] ++ ldrh r6, [r7, #1342] ++ ldrh r2, [r3, r6, lsl #1] ++ mov r1, r6 ++ bl printk ++ ldrh r0, [r4, #320] ++ lsl r9, r6, #1 ++ bl FtlGcRefreshOpenBlock ++ ldrh r0, [r4, #368] ++ bl FtlGcRefreshOpenBlock ++ add r0, r4, #320 ++ bl allocate_new_data_superblock ++ add r0, r4, #368 ++ bl allocate_new_data_superblock ++.L3585: ++ subs r5, r5, #1 ++ beq .L3589 ++ movs r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ ldr r3, [r4, #300] ++ ldrh r3, [r3, r9] ++ cmp r3, #0 ++ bne .L3585 ++.L3589: ++ ldr r3, [r4, #300] ++ mov r1, r6 ++ ldr r0, .L3597+12 ++ ldrh r2, [r3, r6, lsl #1] ++ bl printk ++ ldr r3, [r4, #300] ++ ldrh r5, [r3, r6, lsl #1] ++ cbnz r5, .L3587 ++ add r0, sp, #48 ++ movw r9, #65535 ++ strh r6, [r0, #-48]! @ movhi ++ mov r10, #36 ++ bl make_superblock ++ ldrh lr, [r8, #2324] ++ add r0, sp, #14 ++ ldr r8, [r4, #232] ++ mov r2, r5 ++ mov ip, r5 ++.L3590: ++ uxth r3, r2 ++ cmp lr, r3 ++ bhi .L3592 ++ ldr r3, [r4, #300] ++ mov r1, r6 ++ ldr r0, .L3597+16 ++ ldrh r2, [r3, r6, lsl #1] ++ bl printk ++ mov r2, r5 ++ movs r1, #0 ++ ldr r0, [r4, #232] ++ bl FlashEraseBlocks ++ mov r2, r5 ++ movs r1, #1 ++ ldr r0, [r4, #232] ++ bl FlashEraseBlocks ++.L3587: ++ movw r3, #65535 ++ strh r3, [r7, #1342] @ movhi ++.L3583: ++ add sp, sp, #48 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3592: ++ ldrh r3, [r0, #2]! ++ cmp r3, r9 ++ beq .L3591 ++ mla r1, r10, r5, r8 ++ adds r5, r5, #1 ++ lsls r3, r3, #10 ++ uxth r5, r5 ++ str r3, [r1, #4] ++ str ip, [r1, #8] ++ str ip, [r1, #12] ++.L3591: ++ adds r2, r2, #1 ++ b .L3590 ++.L3598: ++ .align 2 ++.L3597: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .word .LC164 ++ .word .LC165 ++ .fnend ++ .size ftl_fix_nand_power_lost_error, .-ftl_fix_nand_power_lost_error ++ .align 1 ++ .global rk_ftl_garbage_collect ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_garbage_collect, %function ++rk_ftl_garbage_collect: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_do_gc ++ .fnend ++ .size rk_ftl_garbage_collect, .-rk_ftl_garbage_collect ++ .align 1 ++ .global ftl_write ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_write, %function ++ftl_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r3 ++ ldr r3, .L3672 ++ mov r9, r2 ++ .pad #84 ++ sub sp, sp, #84 ++ mov r7, r1 ++ ldr r2, [r3, #228] ++ cmp r2, #0 ++ bne .L3642 ++ ldr r1, .L3672+4 ++ ldr r1, [r1, #500] ++ cmp r1, #1 ++ bne .L3643 ++ cmp r0, #16 ++ bne .L3602 ++ mov r2, r10 ++ mov r1, r9 ++ add r0, r7, #256 ++ bl FtlVendorPartWrite ++.L3600: ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3602: ++ ldr fp, .L3672+16 ++ str r3, [sp, #4] ++ ldr r2, [fp, #2432] ++ cmp r7, r2 ++ bcs .L3646 ++ cmp r9, r2 ++ bhi .L3646 ++ add r5, r7, r9 ++ cmp r2, r5 ++ bcc .L3646 ++ ldrh r4, [fp, #2396] ++ mov r2, #2048 ++ ldr r6, .L3672+8 ++ mov r0, r7 ++ mov r1, r4 ++ str r2, [r6, #1508] ++ bl __aeabi_uidiv ++ mov r1, r4 ++ str r0, [sp] ++ subs r0, r5, #1 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #4] ++ cmp r9, r4, lsl #1 ++ ldr r2, [sp] ++ ldr r1, [fp, #2444] ++ str r0, [sp, #12] ++ sub r5, r0, r2 ++ ldr r2, [r3, #484] ++ add r8, r5, #1 ++ add r2, r2, r8 ++ str r2, [r3, #484] ++ ldr r2, [r3, #500] ++ add r2, r2, r9 ++ str r2, [r3, #500] ++ ite cs ++ movcs r2, #1 ++ movcc r2, #0 ++ str r2, [sp, #16] ++ cmp r1, #0 ++ beq .L3647 ++ movs r2, #36 ++ muls r2, r1, r2 ++ ldr r1, [fp, #2448] ++ subs r2, r2, #36 ++ add fp, r1, r2 ++ ldr r1, [sp] ++ ldr r2, [fp, #16] ++ cmp r1, r2 ++ bne .L3648 ++ ldr r2, [r3, #488] ++ mov r1, r4 ++ mov r0, r7 ++ adds r2, r2, #1 ++ str r2, [r3, #488] ++ ldr r3, [r6, #1512] ++ adds r3, r3, #1 ++ str r3, [r6, #1512] ++ bl __aeabi_uidivmod ++ subs r4, r4, r1 ++ ldr r0, [fp, #8] ++ cmp r4, r9 ++ mov r3, r1 ++ it cs ++ movcs r4, r9 ++ mov r1, r10 ++ lsl r8, r4, #9 ++ add r0, r0, r3, lsl #9 ++ mov r2, r8 ++ bl ftl_memcpy ++ cbnz r5, .L3606 ++ ldr r3, [r6, #1512] ++ cmp r3, #2 ++ bgt .L3606 ++.L3642: ++ movs r0, #0 ++ b .L3600 ++.L3606: ++ add r3, r10, r8 ++ sub r9, r9, r4 ++ str r3, [sp, #8] ++ add r7, r7, r4 ++ ldr r3, [sp] ++ mov r8, r5 ++ adds r3, r3, #1 ++ str r3, [sp] ++.L3605: ++ movs r3, #0 ++ str r3, [r6, #1512] ++.L3604: ++ ldr r1, [sp, #12] ++ ldr r0, [sp] ++ bl FtlCacheMetchLpa ++ cbz r0, .L3607 ++ bl FtlCacheWriteBack ++.L3607: ++ ldr r5, .L3672+12 ++ ldr fp, .L3672+16 ++ str r5, [r6, #1488] ++ ldr r6, [sp] ++.L3608: ++ ldr r4, .L3672 ++ cmp r8, #0 ++ bne .L3637 ++ ldr r3, [sp, #12] ++ mov r0, r8 ++ ldr r2, [sp] ++ subs r1, r3, r2 ++ bl ftl_do_gc ++ ldrh r3, [r4, #316] ++ cmp r3, #5 ++ bls .L3638 ++ cmp r3, #31 ++ bhi .L3642 ++ ldr r3, .L3672+16 ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3642 ++.L3638: ++ movw r5, #65535 ++ movs r6, #128 ++.L3641: ++ ldrh r3, [r4, #556] ++ cmp r3, r5 ++ bne .L3640 ++ ldrh r3, [r4, #1174] ++ cmp r3, r5 ++ bne .L3640 ++ ldrh r3, [r4, #1176] ++ cmp r3, r5 ++ bne .L3640 ++ and r0, r8, #7 ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ bl FtlGcRefreshBlock ++.L3640: ++ movs r1, #1 ++ strh r6, [r4, #1122] @ movhi ++ mov r0, r1 ++ strh r6, [r4, #1120] @ movhi ++ bl ftl_do_gc ++ movs r1, #1 ++ movs r0, #0 ++ bl ftl_do_gc ++ ldr r3, [r4, #228] ++ cmp r3, #0 ++ bne .L3642 ++ ldrh r3, [r4, #316] ++ cmp r3, #2 ++ bhi .L3642 ++ add r8, r8, #1 ++ cmp r8, #256 ++ bne .L3641 ++ b .L3642 ++.L3648: ++ str r10, [sp, #8] ++ b .L3605 ++.L3647: ++ str r10, [sp, #8] ++ b .L3604 ++.L3637: ++ ldrh r1, [r5, #4] ++ cbnz r1, .L3609 ++ add r2, r4, #320 ++ ldr r10, .L3672+4 ++ cmp r5, r2 ++ bne .L3610 ++ ldrh r5, [r4, #372] ++ cbnz r5, .L3611 ++ add r0, r4, #368 ++ bl allocate_new_data_superblock ++ str r5, [r10, #3448] ++.L3611: ++ ldr r5, .L3672+12 ++ ldr r0, .L3672+12 ++ bl allocate_new_data_superblock ++ ldr r1, [r10, #3448] ++ add r2, r5, #48 ++ cmp r1, #0 ++ it ne ++ movne r5, r2 ++.L3612: ++ ldrh r2, [r5, #4] ++ cbnz r2, .L3613 ++ mov r0, r5 ++ bl allocate_new_data_superblock ++.L3613: ++ ldr r2, .L3672+8 ++ str r5, [r2, #1488] ++.L3609: ++ ldr r1, [fp, #2444] ++ ldr r2, [r4, #3300] ++ ldr r10, .L3672 ++ subs r2, r2, r1 ++ ldrh r1, [r5, #4] ++ cmp r2, r8 ++ it cs ++ movcs r2, r8 ++ cmp r1, r2 ++ mov r3, r1 ++ it cs ++ movcs r3, r2 ++ str r3, [sp, #36] ++ movs r3, #0 ++ str r3, [sp, #20] ++.L3614: ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #36] ++ cmp r3, r2 ++ bne .L3633 ++.L3615: ++ ldr r2, .L3672 ++ ldr r1, [fp, #2444] ++ ldr r3, [sp, #20] ++ ldr r2, [r2, #3300] ++ sub r8, r8, r3 ++ cmp r1, r2 ++ bcs .L3634 ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ bne .L3634 ++ ldrh r2, [r5, #4] ++ cmp r2, #0 ++ beq .L3634 ++.L3636: ++ movs r3, #0 ++ str r3, [sp, #16] ++ b .L3608 ++.L3610: ++ str r1, [r10, #3448] ++ ldrh r1, [r4, #324] ++ cbnz r1, .L3650 ++ mov r0, r5 ++ bl allocate_new_data_superblock ++ b .L3612 ++.L3650: ++ mov r5, r2 ++ b .L3613 ++.L3673: ++ .align 2 ++.L3672: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .word .LANCHOR4 ++ .word .LANCHOR2+320 ++ .word .LANCHOR0 ++.L3633: ++ ldrh r2, [r5, #4] ++ cmp r2, #0 ++ beq .L3615 ++ ldr r3, [sp, #16] ++ cbz r3, .L3616 ++ ldr r3, [sp, #12] ++ cmp r3, r6 ++ bne .L3616 ++ ldr r3, [sp, #20] ++ cbz r3, .L3616 ++ ldrh r1, [fp, #2396] ++ add r2, r7, r9 ++ ldr r3, [sp, #12] ++ mls r2, r1, r3, r2 ++ cmp r1, r2 ++ bne .L3615 ++.L3616: ++ movs r2, #0 ++ add r1, sp, #40 ++ mov r0, r6 ++ movs r4, #36 ++ bl log2phys ++ mov r0, r5 ++ bl get_new_active_ppa ++ ldr r1, [fp, #2444] ++ ldr r2, [fp, #2448] ++ mla ip, r4, r1, r2 ++ ldrh r2, [fp, #2402] ++ str r0, [ip, #4] ++ mul r0, r2, r1 ++ str r6, [ip, #16] ++ bic r3, r0, #3 ++ str r3, [sp, #28] ++ ldr r0, [sp, #28] ++ ldr r3, [r10, #3348] ++ str r3, [sp, #32] ++ add r3, r3, r0 ++ ldrh r0, [fp, #2400] ++ str r3, [ip, #12] ++ str r3, [sp, #4] ++ muls r1, r0, r1 ++ ldr r0, [r10, #3328] ++ bic r1, r1, #3 ++ add r1, r1, r0 ++ mov r0, r3 ++ str r1, [ip, #8] ++ movs r1, #0 ++ bl ftl_memset ++ ldr r3, [sp] ++ cmp r3, r6 ++ beq .L3617 ++ ldr r3, [sp, #12] ++ cmp r3, r6 ++ bne .L3668 ++ ldrh r3, [sp, #12] ++ add r4, r7, r9 ++ ldrh r2, [fp, #2396] ++ smulbb r2, r2, r3 ++ movs r3, #0 ++ str r3, [sp, #24] ++ subs r4, r4, r2 ++ uxth r4, r4 ++ b .L3620 ++.L3617: ++ ldrh r4, [fp, #2396] ++ mov r0, r7 ++ mov r1, r4 ++ bl __aeabi_uidivmod ++ subs r4, r4, r1 ++ str r1, [sp, #24] ++ cmp r4, r9 ++ it cs ++ movcs r4, r9 ++.L3620: ++ ldrh r2, [fp, #2396] ++ cmp r2, r4 ++ bne .L3621 ++ ldr r3, [sp] ++ ldr r2, [fp, #2444] ++ ldr r0, [fp, #2448] ++ cmp r3, r6 ++ itte ne ++ mulne r1, r4, r6 ++ ldrne r3, [sp, #8] ++ ldreq r1, [sp, #8] ++ mov r4, #36 ++ itt ne ++ subne r1, r1, r7 ++ addne r1, r3, r1, lsl #9 ++ ldr r3, [sp, #16] ++ cbz r3, .L3623 ++ mla r2, r4, r2, r0 ++ str r1, [r2, #8] ++.L3624: ++ ldr r3, [sp, #32] ++ movw r2, #61589 ++ ldr r1, [sp, #28] ++ strh r2, [r3, r1] @ movhi ++ ldr r3, [sp, #4] ++ ldr r2, [r10, #512] ++ str r2, [r3, #4] ++ adds r2, r2, #1 ++ adds r3, r2, #1 ++ ldr r3, [sp, #4] ++ it eq ++ moveq r2, #0 ++ str r2, [r10, #512] ++ ldr r2, [sp, #40] ++ str r6, [r3, #8] ++ adds r6, r6, #1 ++ str r2, [r3, #12] ++ ldrh r2, [r5] ++ strh r2, [r3, #2] @ movhi ++ ldr r3, [sp, #20] ++ ldr r2, [fp, #2444] ++ adds r3, r3, #1 ++ adds r2, r2, #1 ++ str r3, [sp, #20] ++ str r2, [fp, #2444] ++ b .L3614 ++.L3623: ++ mla r0, r4, r2, r0 ++ ldrh r2, [fp, #2400] ++.L3671: ++ ldr r0, [r0, #8] ++ b .L3669 ++.L3621: ++ ldr r2, [sp, #40] ++ movs r0, #36 ++ adds r1, r2, #1 ++ beq .L3625 ++ ldr r1, [fp, #2448] ++ str r2, [sp, #48] ++ ldr r2, [fp, #2444] ++ str r6, [sp, #60] ++ mla r2, r0, r2, r1 ++ add r0, sp, #44 ++ ldr r1, [r2, #8] ++ ldr r2, [r2, #12] ++ str r1, [sp, #52] ++ movs r1, #1 ++ str r2, [sp, #56] ++ movs r2, #0 ++ bl FlashReadPages ++ ldr r2, [sp, #44] ++ adds r2, r2, #1 ++ bne .L3626 ++ ldr r2, [r10, #676] ++ adds r2, r2, #1 ++ str r2, [r10, #676] ++.L3628: ++ ldr r3, [sp] ++ lsls r2, r4, #9 ++ cmp r3, r6 ++ bne .L3629 ++ ldr r0, [fp, #2448] ++ movs r4, #36 ++ ldr r1, [fp, #2444] ++ ldr r3, [sp, #24] ++ mla r1, r4, r1, r0 ++ ldr r0, [r1, #8] ++ ldr r1, [sp, #8] ++ add r0, r0, r3, lsl #9 ++.L3669: ++ bl ftl_memcpy ++ b .L3624 ++.L3626: ++ ldr r3, [sp, #4] ++ ldr r2, [r3, #8] ++ cmp r6, r2 ++ beq .L3628 ++ ldr r2, [r10, #676] ++ ldr r0, .L3674 ++ adds r2, r2, #1 ++ str r2, [r10, #676] ++ mov r2, r6 ++ ldr r1, [r3, #8] ++ bl printk ++ b .L3628 ++.L3625: ++ ldr r1, [fp, #2444] ++ ldr r2, [fp, #2448] ++ mla r0, r0, r1, r2 ++ ldrh r2, [fp, #2400] ++ movs r1, #0 ++ ldr r0, [r0, #8] ++ bl ftl_memset ++ b .L3628 ++.L3629: ++ ldrh r1, [fp, #2396] ++ movs r4, #36 ++ ldr r3, [fp, #2448] ++ ldr r0, [fp, #2444] ++ muls r1, r6, r1 ++ mla r0, r4, r0, r3 ++ ldr r3, [sp, #8] ++ subs r1, r1, r7 ++ add r1, r3, r1, lsl #9 ++ b .L3671 ++.L3668: ++ ldr r3, [sp, #16] ++ cbz r3, .L3630 ++ ldr r2, [fp, #2444] ++ ldr r1, [fp, #2448] ++ ldr r3, [sp, #8] ++ mla r4, r4, r2, r1 ++ ldrh r2, [fp, #2396] ++ muls r2, r6, r2 ++ subs r2, r2, r7 ++ add r2, r3, r2, lsl #9 ++ str r2, [r4, #8] ++ b .L3624 ++.L3630: ++ ldrh r1, [fp, #2396] ++ ldr r2, [fp, #2444] ++ ldr r0, [fp, #2448] ++ ldr r3, [sp, #8] ++ muls r1, r6, r1 ++ mla r4, r4, r2, r0 ++ ldrh r2, [fp, #2400] ++ subs r1, r1, r7 ++ add r1, r3, r1, lsl #9 ++ ldr r0, [r4, #8] ++ b .L3669 ++.L3634: ++ bl FtlCacheWriteBack ++ cmp r8, #1 ++ mov r2, #0 ++ str r2, [fp, #2444] ++ bhi .L3608 ++ b .L3636 ++.L3646: ++ mov r0, #-1 ++ b .L3600 ++.L3643: ++ mov r0, r2 ++ b .L3600 ++.L3675: ++ .align 2 ++.L3674: ++ .word .LC166 ++ .fnend ++ .size ftl_write, .-ftl_write ++ .align 1 ++ .global ftl_vendor_write ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_vendor_write, %function ++ftl_vendor_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ movs r0, #16 ++ b ftl_write ++ .fnend ++ .size ftl_vendor_write, .-ftl_vendor_write ++ .align 1 ++ .global FlashBootVendorWrite ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FlashBootVendorWrite, %function ++FlashBootVendorWrite: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ bl rknand_device_lock ++ ldr r3, .L3680 ++ ldr r3, [r3, #500] ++ cmp r3, #1 ++ bne .L3679 ++ mov r0, r4 ++ mov r2, r6 ++ mov r1, r5 ++ bl ftl_vendor_write ++ mov r4, r0 ++.L3678: ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L3679: ++ mov r4, #-1 ++ b .L3678 ++.L3681: ++ .align 2 ++.L3680: ++ .word .LANCHOR1 ++ .fnend ++ .size FlashBootVendorWrite, .-FlashBootVendorWrite ++ .align 1 ++ .global ftl_sys_write ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type ftl_sys_write, %function ++ftl_sys_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ add r1, r0, #256 ++ movs r0, #16 ++ b ftl_write ++ .fnend ++ .size ftl_sys_write, .-ftl_sys_write ++ .align 1 ++ .global StorageSysDataStore ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type StorageSysDataStore, %function ++StorageSysDataStore: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, lr} ++ .save {r3, r4, r5, lr} ++ mov r5, r1 ++ mov r4, r0 ++ bl rknand_device_lock ++ mov r2, r5 ++ movs r1, #1 ++ mov r0, r4 ++ bl ftl_sys_write ++ mov r4, r0 ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r3, r4, r5, pc} ++ .fnend ++ .size StorageSysDataStore, .-StorageSysDataStore ++ .align 1 ++ .global FtlDumpSysBlock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlDumpSysBlock, %function ++FtlDumpSysBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ lsl r9, r0, #10 ++ ldr r5, .L3691 ++ .pad #28 ++ sub sp, sp, #28 ++ mov r7, r0 ++ movs r6, #0 ++ ldr r4, .L3691+4 ++ ldr r3, [r5, #3316] ++ ldr r8, .L3691+12 ++ ldr fp, .L3691+16 ++ add r10, r4, #1256 ++ str r3, [r4, #1264] ++ ldr r3, [r5, #3340] ++ str r3, [r4, #1268] ++.L3685: ++ ldrh r2, [r8, #2392] ++ sxth r3, r6 ++ cmp r3, r2 ++ blt .L3687 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3687: ++ movs r2, #1 ++ orr r3, r3, r9 ++ mov r1, r2 ++ mov r0, r10 ++ str r3, [r4, #1260] ++ bl FlashReadPages ++ ldr r2, [r4, #1264] ++ mov r1, r7 ++ ldr r3, [r4, #1268] ++ mov r0, fp ++ ldr r2, [r2] ++ str r2, [sp, #16] ++ ldr r2, [r3, #12] ++ str r2, [sp, #12] ++ ldr r2, [r3, #8] ++ str r2, [sp, #8] ++ ldr r2, [r3, #4] ++ str r2, [sp, #4] ++ ldr r3, [r3] ++ ldr r2, [r4, #1256] ++ str r3, [sp] ++ ldr r3, [r4, #1260] ++ bl printk ++ ldr r3, [r4, #1268] ++ ldr r3, [r3] ++ adds r3, r3, #1 ++ beq .L3686 ++ mov r3, #768 ++ movs r2, #4 ++ ldr r1, [r5, #3316] ++ ldr r0, .L3691+8 ++ bl rknand_print_hex ++.L3686: ++ adds r6, r6, #1 ++ b .L3685 ++.L3692: ++ .align 2 ++.L3691: ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .word .LC168 ++ .word .LANCHOR0 ++ .word .LC167 ++ .fnend ++ .size FtlDumpSysBlock, .-FtlDumpSysBlock ++ .align 1 ++ .global dump_map_info ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type dump_map_info, %function ++dump_map_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #52 ++ sub sp, sp, #52 ++ ldr r4, .L3708 ++ ldr r5, .L3708+4 ++ ldrh r7, [r4, #2332] ++ addw fp, r4, #2350 ++.L3694: ++ ldrh r3, [r4, #2334] ++ cmp r3, r7 ++ bhi .L3702 ++ ldr r6, .L3708+8 ++ mov r9, #0 ++ ldr fp, .L3708+24 ++ add r10, r6, #1256 ++.L3703: ++ ldrh r3, [r5, #3452] ++ sxth r7, r9 ++ cmp r7, r3 ++ bge .L3706 ++ lsls r7, r7, #1 ++ mov r8, #0 ++ b .L3707 ++.L3697: ++ mov r1, r7 ++ ldrb r0, [fp, r8] @ zero_extendqisi2 ++ str r3, [sp, #44] ++ str r2, [sp, #40] ++ bl V2P_block ++ str r0, [sp, #36] ++ bl FtlBbmIsBadBlock ++ ldr r2, [sp, #40] ++ ldr r3, [sp, #44] ++ cbnz r0, .L3695 ++ ldr r1, [sp, #36] ++ mla r0, r10, r6, r9 ++ lsls r1, r1, #10 ++ str r3, [r0, #8] ++ str r1, [r0, #4] ++ ldr r1, [sp, #32] ++ muls r1, r6, r1 ++ it mi ++ addmi r1, r1, #3 ++ adds r6, r6, #1 ++ bic ip, r1, #3 ++ ldr r1, [sp, #28] ++ uxth r6, r6 ++ add r1, r1, ip ++ str r1, [r0, #12] ++.L3695: ++ add r8, r8, #1 ++.L3704: ++ uxth r1, r8 ++ cmp r2, r1 ++ bhi .L3697 ++ cbnz r6, .L3698 ++.L3701: ++ adds r7, r7, #1 ++ uxth r7, r7 ++ b .L3694 ++.L3698: ++ ldr r10, .L3708+28 ++ mov r0, r9 ++ mov r8, #0 ++ mov r9, #36 ++ movs r2, #1 ++ mov r1, r6 ++ bl FlashReadPages ++.L3699: ++ uxth r3, r8 ++ cmp r6, r3 ++ bls .L3701 ++ ldr r3, [r5, #3304] ++ mla r3, r9, r8, r3 ++ add r8, r8, #1 ++ ldr r1, [r3, #12] ++ ldr r2, [r3, #4] ++ ldr r3, [r3, #8] ++ ldr r0, [r3, #4] ++ str r0, [sp, #16] ++ mov r0, r10 ++ ldr r3, [r3] ++ str r3, [sp, #12] ++ ldr r3, [r1, #12] ++ str r3, [sp, #8] ++ ldr r3, [r1, #8] ++ str r3, [sp, #4] ++ ldr r3, [r1, #4] ++ str r3, [sp] ++ ldr r3, [r1] ++ ubfx r1, r2, #10, #16 ++ bl printk ++ b .L3699 ++.L3702: ++ ldr r1, [r5, #1148] ++ mov r8, #0 ++ ldrh r2, [r4, #2324] ++ mov r6, r8 ++ ldr r9, [r5, #3304] ++ mov r10, #36 ++ str r1, [sp, #28] ++ ldrh r1, [r4, #2402] ++ ldr r3, [r5, #1144] ++ str r1, [sp, #32] ++ b .L3704 ++.L3705: ++ ldr r2, [r5, #3368] ++ mov r0, r10 ++ ldrh r2, [r2, r7] ++ orr r3, r3, r2, lsl #10 ++ movs r2, #1 ++ mov r1, r2 ++ str r3, [r6, #1260] ++ bl FlashReadPages ++ ldr r2, [r6, #1264] ++ ldr r1, [r5, #3368] ++ ldr r3, [r6, #1268] ++ ldr r0, [r2, #4] ++ ldrh r1, [r1, r7] ++ str r0, [sp, #20] ++ mov r0, fp ++ ldr r2, [r2] ++ str r2, [sp, #16] ++ ldr r2, [r3, #12] ++ str r2, [sp, #12] ++ ldr r2, [r3, #8] ++ str r2, [sp, #8] ++ ldr r2, [r3, #4] ++ str r2, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r3, [r6, #1260] ++ ldr r2, [r6, #1256] ++ bl printk ++.L3707: ++ ldrh r2, [r4, #2392] ++ sxth r3, r8 ++ add r8, r8, #1 ++ cmp r3, r2 ++ blt .L3705 ++ add r9, r9, #1 ++ b .L3703 ++.L3706: ++ ldr r3, [r4, #2420] ++ movs r2, #2 ++ ldr r1, [r5, #3368] ++ ldr r0, .L3708+12 ++ bl rknand_print_hex ++ ldrh r3, [r4, #2428] ++ movs r2, #4 ++ ldr r1, [r5, #3388] ++ ldr r0, .L3708+16 ++ bl rknand_print_hex ++ ldrh r3, [r4, #2428] ++ movs r2, #4 ++ ldr r1, [r5, #3392] ++ ldr r0, .L3708+20 ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b rknand_print_hex ++.L3709: ++ .align 2 ++.L3708: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR4 ++ .word .LC170 ++ .word .LC171 ++ .word .LC172 ++ .word .LC113 ++ .word .LC169 ++ .fnend ++ .size dump_map_info, .-dump_map_info ++ .align 1 ++ .global flash_boot_enter_slc_mode ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type flash_boot_enter_slc_mode, %function ++flash_boot_enter_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L3712 ++ ldr r2, [r3, #2268] ++ ldr r3, .L3712+4 ++ cmp r2, r3 ++ bne .L3710 ++ b flash_enter_slc_mode ++.L3710: ++ bx lr ++.L3713: ++ .align 2 ++.L3712: ++ .word .LANCHOR0 ++ .word 1446522928 ++ .fnend ++ .size flash_boot_enter_slc_mode, .-flash_boot_enter_slc_mode ++ .align 1 ++ .global flash_boot_exit_slc_mode ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type flash_boot_exit_slc_mode, %function ++flash_boot_exit_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L3716 ++ ldr r2, [r3, #2268] ++ ldr r3, .L3716+4 ++ cmp r2, r3 ++ bne .L3714 ++ b flash_exit_slc_mode ++.L3714: ++ bx lr ++.L3717: ++ .align 2 ++.L3716: ++ .word .LANCHOR0 ++ .word 1446522928 ++ .fnend ++ .size flash_boot_exit_slc_mode, .-flash_boot_exit_slc_mode ++ .align 1 ++ .global write_idblock ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type write_idblock, %function ++write_idblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 112 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r0 ++ ldr r4, .L3766 ++ .pad #124 ++ sub sp, sp, #124 ++ mov r0, #256000 ++ mov r9, r1 ++ mov r5, r2 ++ ldr r3, [r4, #48] ++ ldr r8, [r4, #40] ++ ldrb r6, [r3, #9] @ zero_extendqisi2 ++ bl ftl_malloc ++ str r0, [sp, #8] ++ cmp r0, #0 ++ beq .L3745 ++ addw r7, r7, #511 ++ lsr fp, r7, #9 ++ cmp fp, #8 ++ bls .L3743 ++ cmp fp, #500 ++ bhi .L3745 ++.L3720: ++ ldr r2, [r9] ++ ldr r3, .L3766+4 ++ cmp r2, r3 ++ bne .L3745 ++ smulbb r6, r6, r8 ++ uxth r3, r6 ++ subs r0, r3, #1 ++ mov r1, r3 ++ add r0, r0, fp ++ str r3, [sp, #12] ++ bl __aeabi_uidiv ++ str r0, [sp, #32] ++ add r0, r9, #254976 ++ add r0, r0, #512 ++ movs r3, #0 ++ movw r2, #63871 ++.L3724: ++ ldr r1, [r0, #-4]! ++ cmp r1, #0 ++ bne .L3721 ++ ldr r1, [r9, r3, lsl #2] ++ adds r3, r3, #1 ++ cmp r3, #4096 ++ add r2, r2, #-1 ++ it hi ++ movhi r3, #0 ++ cmp r2, #4096 ++ str r1, [r0, #512] ++ bne .L3724 ++.L3723: ++ movs r3, #5 ++ mov r1, r5 ++ movs r2, #4 ++ ldr r0, .L3766+8 ++ bl rknand_print_hex ++ ldrb r2, [r4, #37] @ zero_extendqisi2 ++ subs r5, r5, #4 ++ ldr r1, [r9, #512] ++ ldr r0, .L3766+12 ++ bl printk ++ ldr r2, .L3766+16 ++ mov r1, fp ++ ldrh r3, [r4, #150] ++ ldr r0, .L3766+20 ++ ldr r2, [r2, #1212] ++ str r2, [sp] ++ mov r2, fp ++ bl printk ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ ldr r2, [r9, #512] ++ ldr r4, .L3766 ++ cmp r2, r3 ++ it hi ++ strhi r3, [r9, #512] ++ lsl r3, fp, #7 ++ str r3, [sp, #40] ++ movs r3, #0 ++ str r3, [sp, #20] ++ str r3, [sp, #16] ++.L3741: ++ ldr r2, [r5, #4] ++ ldrb r3, [r4, #37] @ zero_extendqisi2 ++ cmp r2, r3 ++ bcs .L3726 ++ ldr r3, .L3766+16 ++ ldr r3, [r3, #1212] ++ cmp r2, r3 ++ bcc .L3726 ++ ldr r3, [sp, #32] ++ cmp r3, #1 ++ bls .L3727 ++ ldr r3, [sp, #16] ++ cbz r3, .L3727 ++ ldr r3, [r5] ++ adds r3, r3, #1 ++ cmp r2, r3 ++ beq .L3726 ++.L3727: ++ mov r2, #512 ++ movs r1, #0 ++ ldr r0, [sp, #8] ++ bl memset ++ ldr r6, [r5, #4] ++ mov r2, fp ++ ldr r3, [sp, #12] ++ ldr r7, [r4, #40] ++ ldr r0, .L3766+24 ++ muls r6, r3, r6 ++ ldr r3, [r4, #48] ++ ldrb r10, [r3, #9] @ zero_extendqisi2 ++ mov r1, r6 ++ bl printk ++ movs r0, #0 ++ smulbb r7, r7, r10 ++ bl flash_boot_enter_slc_mode ++ mov r1, r10 ++ mov r0, r6 ++ bl __aeabi_uidiv ++ uxth r7, r7 ++ movs r2, #0 ++ mov r1, r0 ++ mov r0, r2 ++ bl FlashEraseBlock ++ cmp r7, fp ++ bcs .L3746 ++ movs r2, #0 ++ mov r8, #2 ++ adds r1, r6, r7 ++ mov r0, r2 ++ bl FlashEraseBlock ++.L3728: ++ movs r0, #0 ++ bl flash_boot_exit_slc_mode ++ ldr r3, [r4, #48] ++ ldrh r0, [r3, #10] ++ ldrb r1, [r3, #12] @ zero_extendqisi2 ++ lsls r0, r0, #2 ++ mul r0, r8, r0 ++ mov r8, #0 ++ bl __aeabi_idiv ++ mov r1, r7 ++ str r0, [sp, #44] ++ mov r0, r6 ++ bl __aeabi_uidivmod ++ subs r3, r6, r1 ++ str r1, [sp, #28] ++ str r3, [sp, #36] ++ str r9, [sp, #24] ++.L3729: ++ ldr r3, [sp, #44] ++ cmp r3, r8 ++ bhi .L3733 ++ mov r1, r6 ++ movs r3, #0 ++ mov r2, fp ++ ldr r0, .L3766+28 ++ bl printk ++ ldr r6, [r5, #4] ++ mov r2, fp ++ ldr r3, [sp, #12] ++ mov r8, #0 ++ ldr r1, [r4, #40] ++ ldr r0, .L3766+32 ++ muls r6, r3, r6 ++ ldr r3, [r4, #48] ++ ldrb r3, [r3, #9] @ zero_extendqisi2 ++ str r3, [sp, #24] ++ ldrh r3, [sp, #24] ++ smulbb r1, r1, r3 ++ uxth r7, r1 ++ mov r1, r6 ++ bl printk ++ mov r1, r7 ++ mov r0, r6 ++ bl __aeabi_uidivmod ++ subs r3, r6, r1 ++ ldr r10, [sp, #8] ++ str r3, [sp, #44] ++ ldr r3, [sp, #24] ++ str r1, [sp, #28] ++ muls r3, r1, r3 ++ ubfx r3, r3, #2, #2 ++.L3734: ++ cmp r8, fp ++ bcc .L3736 ++ movs r3, #0 ++ mov r1, r6 ++ mov r2, fp ++ ldr r0, .L3766+36 ++ bl printk ++ ldr r0, [sp, #8] ++ mov r3, r9 ++ movs r6, #0 ++.L3739: ++ mov r7, r0 ++ mov r8, r3 ++ ldr r1, [r7] ++ adds r0, r0, #4 ++ ldr r2, [r8] ++ adds r3, r3, #4 ++ cmp r1, r2 ++ beq .L3737 ++ mov r2, #512 ++ movs r1, #0 ++ ldr r0, [sp, #8] ++ bl memset ++ ldr r3, [r8] ++ ldr r1, [sp, #16] ++ ldr r0, .L3766+40 ++ str r3, [sp, #4] ++ ldr r3, [r7] ++ str r3, [sp] ++ mov r3, r6 ++ bic r6, r6, #255 ++ ldr r2, [r5, #4] ++ lsls r6, r6, #2 ++ bl printk ++ mov r3, #256 ++ movs r2, #4 ++ add r1, r9, r6 ++ ldr r0, .L3766+44 ++ bl rknand_print_hex ++ ldr r1, [sp, #8] ++ mov r3, #256 ++ movs r2, #4 ++ ldr r0, .L3766+48 ++ add r1, r1, r6 ++ bl rknand_print_hex ++ movs r0, #0 ++ bl flash_boot_enter_slc_mode ++ ldr r1, [r5, #4] ++ movs r2, #0 ++ ldr r3, [sp, #12] ++ mov r0, r2 ++ muls r1, r3, r1 ++ bl FlashEraseBlock ++ ldr r3, [sp, #32] ++ cmp r3, #1 ++ bls .L3738 ++ ldr r1, [r5, #4] ++ movs r2, #0 ++ ldr r3, [sp, #12] ++ mov r0, r2 ++ mla r1, r1, r3, r3 ++ bl FlashEraseBlock ++.L3738: ++ movs r0, #0 ++ bl flash_boot_exit_slc_mode ++ ldr r1, [r5, #4] ++ ldr r0, .L3766+52 ++ bl printk ++.L3726: ++ ldr r3, [sp, #16] ++ adds r5, r5, #4 ++ adds r3, r3, #1 ++ cmp r3, #5 ++ str r3, [sp, #16] ++ bne .L3741 ++ ldr r0, [sp, #8] ++ bl ftl_free ++ ldr r3, [sp, #20] ++ clz r0, r3 ++ lsrs r0, r0, #5 ++ negs r0, r0 ++.L3718: ++ add sp, sp, #124 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3743: ++ mov fp, #8 ++ b .L3720 ++.L3721: ++ ldr r0, .L3766+56 ++ bl printk ++ b .L3723 ++.L3746: ++ mov r8, #1 ++ b .L3728 ++.L3767: ++ .align 2 ++.L3766: ++ .word .LANCHOR0 ++ .word -52655045 ++ .word .LC174 ++ .word .LC175 ++ .word .LANCHOR4 ++ .word .LC176 ++ .word .LC177 ++ .word .LC178 ++ .word .LC179 ++ .word .LC180 ++ .word .LC181 ++ .word .LC182 ++ .word .LC183 ++ .word .LC184 ++ .word .LC173 ++.L3733: ++ ldr r3, [sp, #28] ++ add r2, r3, r8 ++ lsrs r2, r2, #2 ++ beq .L3730 ++ ldrb r0, [r4, #152] @ zero_extendqisi2 ++ adds r1, r2, #1 ++ add r3, r4, r1, lsl #1 ++ ldrh r3, [r3, #156] ++ cbz r0, .L3731 ++ ldr r0, [r4, #2268] ++ ldr r7, .L3768 ++ cmp r0, r7 ++ it eq ++ moveq r3, r1 ++.L3731: ++ add r3, r3, #1073741824 ++ subs r3, r3, #1 ++ lsls r3, r3, #2 ++ str r3, [sp, #56] ++.L3730: ++ movw r3, #61424 ++ str r3, [sp, #60] ++ add r3, r4, r2, lsl #1 ++ ldrh r7, [r3, #156] ++ ldrb r3, [r4, #152] @ zero_extendqisi2 ++ cbz r3, .L3732 ++ ldr r3, [r4, #2268] ++ ldr r1, .L3768 ++ cmp r3, r1 ++ it eq ++ moveq r7, r2 ++.L3732: ++ ldr r3, [sp, #36] ++ add r8, r8, #4 ++ ldr r2, .L3768+4 ++ uxth r8, r8 ++ mla r3, r7, r10, r3 ++ ldrb r0, [r2, #1218] @ zero_extendqisi2 ++ adds r7, r7, #1 ++ uxth r7, r7 ++ str r3, [sp, #52] ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ str r3, [sp, #48] ++ bl FlashBchSel ++ movs r0, #0 ++ bl flash_boot_enter_slc_mode ++ ldr r2, [r4, #48] ++ ldr r3, [sp, #52] ++ ldrb r1, [r2, #9] @ zero_extendqisi2 ++ mov r0, r3 ++ bl __aeabi_uidiv ++ add r3, sp, #56 ++ ldr r2, [sp, #24] ++ mov r1, r0 ++ movs r0, #0 ++ bl FlashProgPage ++ movs r0, #0 ++ bl flash_boot_exit_slc_mode ++ ldr r0, [sp, #48] ++ bl FlashBchSel ++ mov r1, r10 ++ ldr r0, [sp, #36] ++ bl __aeabi_uidiv ++ mov r2, r7 ++ mov r1, r0 ++ movs r0, #0 ++ bl FlashPageProgMsbFFData ++ ldr r3, [sp, #24] ++ add r3, r3, #2048 ++ str r3, [sp, #24] ++ b .L3729 ++.L3736: ++ rsb r7, r3, #4 ++ ldrb r0, [r4, #152] @ zero_extendqisi2 ++ uxth r2, r7 ++ str r2, [sp, #36] ++ ldr r2, [sp, #28] ++ add r2, r2, r8 ++ lsrs r2, r2, #2 ++ add r1, r4, r2, lsl #1 ++ ldrh r1, [r1, #156] ++ cbz r0, .L3735 ++ ldr r0, [r4, #2268] ++ ldr r7, .L3768 ++ cmp r0, r7 ++ it eq ++ moveq r1, r2 ++.L3735: ++ ldr r2, [sp, #44] ++ add r3, r3, r2 ++ ldr r2, [sp, #24] ++ mla r3, r1, r2, r3 ++ ldr r2, [r4, #48] ++ ldrb r1, [r2, #9] @ zero_extendqisi2 ++ ldr r2, .L3768+4 ++ str r3, [sp, #52] ++ ldrb r3, [r4, #2316] @ zero_extendqisi2 ++ ldrb r0, [r2, #1218] @ zero_extendqisi2 ++ str r1, [sp, #48] ++ mov r7, r3 ++ bl FlashBchSel ++ movs r0, #0 ++ bl flash_boot_enter_slc_mode ++ ldr r3, [sp, #52] ++ ldr r1, [sp, #48] ++ mov r0, r3 ++ bl __aeabi_uidiv ++ movs r3, #0 ++ mov r2, r10 ++ mov r1, r0 ++ mov r0, r3 ++ bl FlashReadPage ++ movs r0, #0 ++ bl flash_boot_exit_slc_mode ++ mov r0, r7 ++ bl FlashBchSel ++ ldr r3, [sp, #36] ++ add r8, r8, r3 ++ add r10, r10, r3, lsl #9 ++ uxth r8, r8 ++ movs r3, #0 ++ b .L3734 ++.L3737: ++ ldr r2, [sp, #40] ++ adds r6, r6, #1 ++ cmp r2, r6 ++ bne .L3739 ++ ldr r3, [sp, #20] ++ adds r3, r3, #1 ++ str r3, [sp, #20] ++ b .L3726 ++.L3745: ++ mov r0, #-1 ++ b .L3718 ++.L3769: ++ .align 2 ++.L3768: ++ .word 1446522928 ++ .word .LANCHOR4 ++ .fnend ++ .size write_idblock, .-write_idblock ++ .align 1 ++ .global write_loader_lba ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type write_loader_lba, %function ++write_loader_lba: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r0, #64 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, r0 ++ .pad #48 ++ sub sp, sp, #48 ++ mov r6, r1 ++ mov r8, r2 ++ ldr r4, .L3793 ++ bne .L3771 ++ ldr r2, [r2] ++ ldr r3, .L3793+4 ++ cmp r2, r3 ++ bne .L3771 ++ movs r3, #1 ++ mov r0, #256000 ++ strb r3, [r4, #1516] ++ bl ftl_malloc ++ mov r2, #256000 ++ movs r1, #0 ++ str r0, [r4, #1520] ++ bl ftl_memset ++ str r5, [r4, #1524] ++.L3771: ++ str r6, [sp] ++ mov r3, r5 ++ ldr r2, [r8] ++ ldr r1, [r4, #1520] ++ ldr r0, .L3793+8 ++ bl printk ++ ldrb r3, [r4, #1516] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3770 ++ sub r0, r5, #64 ++ ldr r7, [r4, #1520] ++ cmp r0, #500 ++ bcs .L3773 ++ rsb r2, r5, #564 ++ mov r1, r8 ++ cmp r2, r6 ++ add r0, r7, r0, lsl #9 ++ it cs ++ movcs r2, r6 ++ lsls r2, r2, #9 ++ bl ftl_memcpy ++.L3774: ++ ldr r3, [r4, #1524] ++ cmp r5, r3 ++ beq .L3783 ++ movs r3, #0 ++ strb r3, [r4, #1516] ++ mov r8, r3 ++ cbz r7, .L3784 ++ mov r0, r7 ++ bl ftl_free ++.L3784: ++ str r8, [r4, #1520] ++ b .L3783 ++.L3773: ++ cmp r5, #564 ++ bcc .L3774 ++ ldr r3, .L3793+12 ++ ldr r0, [r4, #1524] ++ ldr r3, [r3, #48] ++ subs r0, r0, #64 ++ cmp r0, #500 ++ ldrb r3, [r3, #9] @ zero_extendqisi2 ++ it cs ++ movcs r0, #500 ++ cmp r3, #4 ++ beq .L3775 ++ movs r3, #2 ++ str r3, [sp, #8] ++ movs r3, #3 ++ str r3, [sp, #12] ++ movs r3, #4 ++ str r3, [sp, #16] ++ movs r3, #5 ++ str r3, [sp, #20] ++ movs r3, #6 ++ str r3, [sp, #24] ++.L3776: ++ movw r3, #63872 ++.L3782: ++ ldr r2, [r7, r3, lsl #2] ++ cbz r2, .L3780 ++ adds r3, r3, #128 ++ lsls r0, r3, #2 ++.L3781: ++ mov r1, r7 ++ add r2, sp, #8 ++ movs r7, #0 ++ bl write_idblock ++ ldr r0, [r4, #1520] ++ strb r7, [r4, #1516] ++ bl ftl_free ++ str r7, [r4, #1520] ++.L3783: ++ add r5, r5, r6 ++ str r5, [r4, #1524] ++.L3770: ++ add sp, sp, #48 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L3775: ++ movs r2, #0 ++ add r3, sp, #8 ++.L3779: ++ cmp r0, #256 ++ itet hi ++ lslhi r1, r2, #1 ++ strls r2, [r3, r2, lsl #2] ++ strhi r1, [r3, r2, lsl #2] ++ adds r2, r2, #1 ++ cmp r2, #5 ++ bne .L3779 ++ b .L3776 ++.L3780: ++ subs r3, r3, #1 ++ cmp r3, #4096 ++ bne .L3782 ++ lsls r0, r0, #9 ++ b .L3781 ++.L3794: ++ .align 2 ++.L3793: ++ .word .LANCHOR4 ++ .word -52655045 ++ .word .LC185 ++ .word .LANCHOR0 ++ .fnend ++ .size write_loader_lba, .-write_loader_lba ++ .align 1 ++ .global FtlWrite ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type FtlWrite, %function ++FtlWrite: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r7, r3 ++ sub r3, r1, #64 ++ mov r5, r0 ++ cmp r3, #1984 ++ mov r4, r1 ++ mov r6, r2 ++ bcs .L3796 ++ cbnz r0, .L3796 ++ mov r2, r7 ++ mov r1, r6 ++ mov r0, r4 ++ bl write_loader_lba ++.L3796: ++ mov r3, r7 ++ mov r2, r6 ++ mov r1, r4 ++ mov r0, r5 ++ pop {r4, r5, r6, r7, r8, lr} ++ b ftl_write ++ .fnend ++ .size FtlWrite, .-FtlWrite ++ .align 1 ++ .global rknand_sys_storage_ioctl ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rknand_sys_storage_ioctl, %function ++rknand_sys_storage_ioctl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 520 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3856 ++ push {r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ mov r4, r1 ++ .pad #524 ++ sub sp, sp, #524 ++ mov r5, r2 ++ cmp r1, r3 ++ beq .L3799 ++ bhi .L3800 ++ subw r3, r3, #2086 ++ cmp r1, r3 ++ beq .L3801 ++ bhi .L3802 ++ subs r3, r3, #238 ++ cmp r1, r3 ++ beq .L3803 ++ adds r3, r3, #237 ++ cmp r1, r3 ++ beq .L3804 ++.L3834: ++ mvn r4, #21 ++ b .L3797 ++.L3802: ++ ldr r3, .L3856+4 ++ cmp r1, r3 ++ beq .L3805 ++ adds r3, r3, #1 ++ cmp r1, r3 ++ beq .L3806 ++ subs r3, r3, #124 ++ cmp r1, r3 ++ bne .L3834 ++ ldr r0, .L3856+8 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3817 ++ ldr r2, [sp] ++ ldr r3, .L3856+12 ++ cmp r2, r3 ++ bne .L3814 ++ ldr r2, [sp, #4] ++ cmp r2, #512 ++ bhi .L3814 ++ ldr r1, .L3856+16 ++.L3854: ++ add r0, sp, #8 ++ bl memcpy ++ b .L3848 ++.L3800: ++ ldr r6, .L3856+20 ++ cmp r1, r6 ++ beq .L3808 ++ bhi .L3809 ++ ldr r3, .L3856+24 ++ cmp r1, r3 ++ beq .L3799 ++ adds r3, r3, #10 ++ cmp r1, r3 ++ bne .L3834 ++.L3799: ++ ldr r7, .L3856+24 ++ cmp r4, r7 ++ bne .L3824 ++ ldr r0, .L3856+28 ++.L3850: ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3817 ++ ldr r2, [sp] ++ ldr r3, .L3856+32 ++ cmp r2, r3 ++ bne .L3853 ++ ldr r3, .L3856+36 ++ ldr r6, .L3856+40 ++ cmp r4, r3 ++ bne .L3827 ++ ldr r3, [r6, #1528] ++ movs r2, #16 ++ mov r1, sp ++ mov r0, r5 ++ ldr r3, [r3, #20] ++ str r3, [sp, #4] ++ strb r3, [sp, #8] ++ bl rk_copy_to_user ++ cmp r0, #0 ++ bne .L3853 ++.L3818: ++ movs r4, #0 ++.L3797: ++ mov r0, r4 ++ add sp, sp, #524 ++ @ sp needed ++ pop {r4, r5, r6, r7, pc} ++.L3809: ++ ldr r3, .L3856+44 ++ cmp r1, r3 ++ beq .L3808 ++ bcc .L3810 ++ adds r3, r3, #1 ++ cmp r1, r3 ++ bne .L3834 ++.L3810: ++ ldr r0, .L3856+48 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cbnz r0, .L3817 ++ ldr r2, [sp] ++ ldr r3, .L3856+52 ++ cmp r2, r3 ++ bne .L3814 ++ ldr r2, [sp, #4] ++ cmp r2, #504 ++ bhi .L3814 ++ ldr r3, .L3856+56 ++ mov r1, sp ++ adds r2, r2, #8 ++ cmp r4, r3 ++ ldr r4, .L3856+40 ++ bne .L3833 ++ ldr r0, [r4, #2060] ++ bl memcpy ++ ldr r1, [r4, #2060] ++ movs r0, #2 ++ b .L3851 ++.L3804: ++ ldr r0, .L3856+60 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cbz r0, .L3811 ++.L3817: ++ ldr r0, .L3856+64 ++ bl printk ++.L3853: ++ mvn r4, #13 ++ b .L3797 ++.L3811: ++ ldr r2, [sp] ++ ldr r3, .L3856+68 ++ cmp r2, r3 ++ beq .L3812 ++.L3814: ++ mov r4, #-1 ++.L3813: ++ mov r1, r4 ++ ldr r0, .L3856+72 ++ bl printk ++ b .L3797 ++.L3812: ++ ldr r3, [sp, #4] ++ cmp r3, #512 ++ bhi .L3814 ++ ldr r4, .L3856+40 ++ mov r2, #512 ++ mov r0, sp ++ ldr r1, [r4, #1528] ++ bl memcpy ++ ldr r2, [r4, #1532] ++ ldr r3, .L3856+76 ++ cmp r2, r3 ++ beq .L3815 ++ movs r1, #0 ++ movs r2, #128 ++ add r0, sp, #64 ++ str r1, [sp, #8] ++ str r1, [sp, #12] ++ bl memset ++.L3815: ++ mov r2, #256 ++ movs r1, #0 ++ add r0, sp, r2 ++ str r1, [sp, #16] ++ bl memset ++.L3848: ++ mov r2, #520 ++ mov r1, sp ++ mov r0, r5 ++ bl rk_copy_to_user ++ cmp r0, #0 ++ bne .L3853 ++.L3852: ++ movs r4, #0 ++ b .L3813 ++.L3801: ++ ldr r0, .L3856+80 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3817 ++ ldr r2, [sp] ++ ldr r3, .L3856+68 ++ cmp r2, r3 ++ bne .L3814 ++ ldr r3, [sp, #4] ++ cmp r3, #512 ++ bhi .L3814 ++ ldr r2, .L3856+40 ++ ldr r3, .L3856+76 ++ ldr r1, [r2, #1532] ++ cmp r1, r3 ++ bne .L3835 ++ ldr r3, [sp, #12] ++ subs r1, r3, #1 ++ cmp r1, #127 ++ bhi .L3836 ++ ldr r4, [r2, #1528] ++ add r1, sp, #64 ++ str r3, [r4, #12] ++ add r0, r4, #64 ++ ldr r2, [sp, #12] ++ bl memcpy ++ mov r1, r4 ++ movs r0, #1 ++.L3851: ++ bl StorageSysDataStore ++ mov r4, r0 ++ b .L3813 ++.L3806: ++ ldr r0, .L3856+84 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3817 ++ ldr r2, [sp] ++ ldr r3, .L3856+88 ++ cmp r2, r3 ++ bne .L3814 ++ ldr r3, [sp, #4] ++ cmp r3, #512 ++ bhi .L3814 ++ ldr r5, .L3856+40 ++ ldr r3, [r5, #1536] ++ cmp r3, #0 ++ beq .L3818 ++ ldr r3, [r5, #1540] ++ ldr r2, .L3856+92 ++ ldr r1, [r3] ++ cmp r1, r2 ++ beq .L3819 ++ str r2, [r3] ++ mov r2, #504 ++ ldr r3, [r5, #1540] ++ str r2, [r3, #4] ++ movs r2, #0 ++ str r2, [r3, #8] ++ str r2, [r3, #12] ++.L3819: ++ ldr r1, [r5, #1540] ++ movs r4, #0 ++ mov r0, r4 ++ str r4, [r1, #16] ++ bl StorageSysDataStore ++ ldr r3, [r5, #1528] ++ ldr r2, .L3856+68 ++ ldr r1, [r3] ++ cmp r1, r2 ++ beq .L3820 ++ str r2, [r3] ++ mov r2, #504 ++ ldr r3, [r5, #1528] ++ str r2, [r3, #4] ++ str r4, [r3, #8] ++.L3820: ++ ldr r6, [r5, #1528] ++ movs r4, #0 ++ movs r2, #128 ++ mov r1, r4 ++ str r4, [r6, #12] ++ add r0, r6, #64 ++ bl memset ++ mov r1, r6 ++ movs r0, #1 ++ bl StorageSysDataStore ++ str r4, [r5, #1536] ++ str r4, [r5, #1532] ++ b .L3813 ++.L3857: ++ .align 2 ++.L3856: ++ .word 1074031656 ++ .word 1074029694 ++ .word .LC191 ++ .word 1094995539 ++ .word .LANCHOR4+1544 ++ .word 1074034192 ++ .word 1074031666 ++ .word .LC192 ++ .word 1280262987 ++ .word 1074031676 ++ .word .LANCHOR4 ++ .word 1074034194 ++ .word .LC197 ++ .word 1145980246 ++ .word 1074034193 ++ .word .LC186 ++ .word .LC187 ++ .word 1263358532 ++ .word .LC198 ++ .word -1067903959 ++ .word .LC188 ++ .word .LC189 ++ .word 1112753220 ++ .word 1146313043 ++.L3805: ++ ldr r0, .L3858 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3817 ++ ldr r2, [sp] ++ ldr r3, .L3858+4 ++ cmp r2, r3 ++ bne .L3814 ++ ldr r3, [sp, #4] ++ cmp r3, #512 ++ bhi .L3814 ++ ldr r5, .L3858+8 ++ ldr r3, [r5, #1536] ++ cmp r3, #1 ++ beq .L3818 ++ ldr r2, [r5, #1540] ++ ldr r3, .L3858+12 ++ ldr r1, [r2] ++ cmp r1, r3 ++ beq .L3821 ++ str r3, [r2] ++ mov r2, #504 ++ ldr r3, [r5, #1540] ++ str r2, [r3, #4] ++ movs r2, #0 ++ str r2, [r3, #8] ++ str r2, [r3, #12] ++.L3821: ++ ldr r1, [r5, #1540] ++ movs r3, #1 ++ movs r0, #0 ++ str r3, [r1, #16] ++ bl StorageSysDataStore ++ ldr r3, [r5, #1528] ++ ldr r2, .L3858+16 ++ ldr r1, [r3] ++ cmp r1, r2 ++ beq .L3822 ++ str r2, [r3] ++ mov r2, #504 ++ ldr r3, [r5, #1528] ++ str r2, [r3, #4] ++ movs r2, #0 ++ str r2, [r3, #8] ++.L3822: ++ ldr r6, [r5, #1528] ++ movs r4, #0 ++ movs r2, #128 ++ mov r1, r4 ++ str r4, [r6, #12] ++ add r0, r6, #64 ++ bl memset ++ mov r1, r6 ++ movs r0, #1 ++ bl StorageSysDataStore ++ movs r3, #1 ++ str r3, [r5, #1536] ++ b .L3813 ++.L3824: ++ ldr r3, .L3858+20 ++ cmp r4, r3 ++ ite eq ++ ldreq r0, .L3858+24 ++ ldrne r0, .L3858+28 ++ b .L3850 ++.L3827: ++ ldr r3, [r6, #2056] ++ cmp r3, #10 ++ bhi .L3853 ++ ldr r3, [r6, #1528] ++ ldr r1, [sp, #4] ++ ldr r2, [r3, #24] ++ cmp r2, r1 ++ beq .L3828 ++ cbz r2, .L3828 ++ ldr r0, .L3858+32 ++ bl printk ++ ldr r3, [r6, #2056] ++ adds r3, r3, #1 ++ str r3, [r6, #2056] ++ b .L3853 ++.L3828: ++ cmp r4, r7 ++ mov r2, #0 ++ str r2, [r6, #2056] ++ itt ne ++ movne r2, #1 ++ strne r1, [r3, #24] ++ mov r0, #1 ++ it eq ++ streq r2, [r3, #20] ++ mov r1, r3 ++ ite eq ++ streq r2, [r3, #24] ++ strne r2, [r3, #20] ++ bl StorageSysDataStore ++ adds r0, r0, #1 ++ bne .L3852 ++ mvn r4, #1 ++ b .L3813 ++.L3808: ++ ldr r0, .L3858+36 ++ bl printk ++ mov r2, #520 ++ mov r1, r5 ++ mov r0, sp ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3817 ++ ldr r2, [sp] ++ ldr r3, .L3858+40 ++ cmp r2, r3 ++ bne .L3814 ++ ldr r2, [sp, #4] ++ cmp r2, #504 ++ bhi .L3814 ++ ldr r3, .L3858+8 ++ cmp r4, r6 ++ ite eq ++ ldreq r1, [r3, #2060] ++ ldrne r1, [r3, #2064] ++ adds r1, r1, #8 ++ b .L3854 ++.L3833: ++ ldr r0, [r4, #2064] ++ bl memcpy ++ ldr r1, [r4, #2064] ++ movs r0, #3 ++ b .L3851 ++.L3803: ++ bl rknand_dev_flush ++ b .L3852 ++.L3835: ++ mvn r4, #1 ++ b .L3797 ++.L3836: ++ mvn r4, #2 ++ b .L3797 ++.L3859: ++ .align 2 ++.L3858: ++ .word .LC190 ++ .word 1112755781 ++ .word .LANCHOR4 ++ .word 1146313043 ++ .word 1263358532 ++ .word 1074031676 ++ .word .LC193 ++ .word .LC194 ++ .word .LC195 ++ .word .LC196 ++ .word 1145980246 ++ .fnend ++ .size rknand_sys_storage_ioctl, .-rknand_sys_storage_ioctl ++ .align 1 ++ .global rk_ftl_storage_sys_init ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_storage_sys_init, %function ++rk_ftl_storage_sys_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r3, #-1 ++ ldr r4, .L3869 ++ movs r5, #0 ++ mov r2, #512 ++ ldr r1, [r4, #1500] ++ add r0, r4, #1544 ++ str r3, [r4, #1524] ++ strb r5, [r4, #1516] ++ add r3, r1, #512 ++ str r1, [r4, #1540] ++ str r3, [r4, #1528] ++ add r3, r1, #1024 ++ add r1, r1, #1536 ++ str r3, [r4, #2060] ++ str r5, [r4, #1520] ++ str r5, [r4, #2068] ++ str r1, [r4, #2064] ++ bl ftl_memcpy ++ ldr r6, [r4, #1540] ++ str r5, [r4, #1532] ++ str r5, [r4, #2056] ++ ldr r7, [r6, #508] ++ ldr r3, [r6, #16] ++ str r3, [r4, #1536] ++ cbz r7, .L3861 ++ mov r1, #508 ++ mov r0, r6 ++ bl js_hash ++ cmp r7, r0 ++ beq .L3861 ++ str r5, [r6, #16] ++ ldr r0, .L3869+4 ++ str r5, [r4, #1536] ++ bl printk ++.L3861: ++ ldr r3, [r4, #1536] ++ cbz r3, .L3862 ++ ldr r3, .L3869+8 ++ str r3, [r4, #1532] ++.L3862: ++ ldr r1, [r4, #2060] ++ movs r0, #2 ++ bl StorageSysDataLoad ++ ldr r1, [r4, #2064] ++ movs r0, #3 ++ bl StorageSysDataLoad ++ pop {r3, r4, r5, r6, r7, lr} ++ b rknand_sys_storage_init ++.L3870: ++ .align 2 ++.L3869: ++ .word .LANCHOR4 ++ .word .LC199 ++ .word -1067903959 ++ .fnend ++ .size rk_ftl_storage_sys_init, .-rk_ftl_storage_sys_init ++ .align 1 ++ .global StorageSysDataDeInit ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type StorageSysDataDeInit, %function ++StorageSysDataDeInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ movs r0, #0 ++ bx lr ++ .fnend ++ .size StorageSysDataDeInit, .-StorageSysDataDeInit ++ .align 1 ++ .global rk_ftl_vendor_storage_init ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_vendor_storage_init, %function ++rk_ftl_vendor_storage_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r0, #65536 ++ ldr r6, .L3880 ++ bl ftl_malloc ++ str r0, [r6, #2072] ++ cmp r0, #0 ++ beq .L3878 ++ ldr r10, .L3880+4 ++ mov r8, #0 ++ ldr r9, .L3880+8 ++ mov r4, r8 ++ mov r7, r8 ++.L3876: ++ ldr r2, [r6, #2072] ++ movs r1, #128 ++ lsls r0, r7, #7 ++ bl FlashBootVendorRead ++ cmp r0, #0 ++ bne .L3874 ++ ldr r1, [r6, #2072] ++ movw fp, #65532 ++ mov r0, r10 ++ ldr r3, [r1, #4] ++ ldr r2, [r1, fp] ++ ldr r1, [r1] ++ bl printk ++ ldr r5, [r6, #2072] ++ ldr r3, [r5] ++ cmp r3, r9 ++ bne .L3875 ++ ldr r3, [r5, fp] ++ ldr r2, [r5, #4] ++ cmp r3, r2 ++ bne .L3875 ++ cmp r3, r4 ++ itt hi ++ movhi r8, r7 ++ movhi r4, r3 ++.L3875: ++ adds r7, r7, #1 ++ cmp r7, #2 ++ bne .L3876 ++ cbz r4, .L3877 ++ mov r2, r5 ++ movs r1, #128 ++ lsl r0, r8, #7 ++ bl FlashBootVendorRead ++ cbnz r0, .L3874 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3877: ++ mov r2, #65536 ++ mov r1, r4 ++ mov r0, r5 ++ bl memset ++ movs r3, #1 ++ movw r2, #65532 ++ str r3, [r5, #4] ++ mov r0, r4 ++ str r9, [r5] ++ str r3, [r5, r2] ++ movw r3, #64504 ++ strh r4, [r5, #12] @ movhi ++ strh r3, [r5, #14] @ movhi ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3874: ++ ldr r0, [r6, #2072] ++ bl kfree ++ movs r3, #0 ++ mov r0, #-1 ++ str r3, [r6, #2072] ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3878: ++ mvn r0, #11 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3881: ++ .align 2 ++.L3880: ++ .word .LANCHOR4 ++ .word .LC200 ++ .word 1380668996 ++ .fnend ++ .size rk_ftl_vendor_storage_init, .-rk_ftl_vendor_storage_init ++ .align 1 ++ .global rk_ftl_vendor_read ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_vendor_read, %function ++rk_ftl_vendor_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, lr} ++ .save {r3, r4, r5, r6, r7, lr} ++ mov r7, r0 ++ ldr r3, .L3888 ++ mov r0, r1 ++ ldr r5, [r3, #2072] ++ cbz r5, .L3887 ++ ldrh r6, [r5, #10] ++ movs r3, #0 ++.L3884: ++ cmp r3, r6 ++ bcc .L3886 ++.L3887: ++ mov r0, #-1 ++ pop {r3, r4, r5, r6, r7, pc} ++.L3886: ++ add r1, r5, r3, lsl #3 ++ ldrh r4, [r1, #16] ++ cmp r4, r7 ++ bne .L3885 ++ ldrh r4, [r1, #20] ++ ldrh r1, [r1, #18] ++ cmp r4, r2 ++ it cs ++ movcs r4, r2 ++ add r1, r1, #1024 ++ mov r2, r4 ++ add r1, r1, r5 ++ bl memcpy ++ mov r0, r4 ++ pop {r3, r4, r5, r6, r7, pc} ++.L3885: ++ adds r3, r3, #1 ++ b .L3884 ++.L3889: ++ .align 2 ++.L3888: ++ .word .LANCHOR4 ++ .fnend ++ .size rk_ftl_vendor_read, .-rk_ftl_vendor_read ++ .align 1 ++ .global rk_ftl_vendor_write ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_vendor_write, %function ++rk_ftl_vendor_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r2 ++ ldr r2, .L3910 ++ .pad #28 ++ sub sp, sp, #28 ++ mov r3, r1 ++ ldr r4, [r2, #2072] ++ cmp r4, #0 ++ beq .L3905 ++ ldrh r2, [r4, #10] ++ add r6, r8, #63 ++ ldrh r1, [r4, #8] ++ bic r6, r6, #63 ++ movs r7, #0 ++ str r1, [sp, #4] ++.L3892: ++ cmp r7, r2 ++ bcc .L3900 ++ ldrh r1, [r4, #14] ++ cmp r6, r1 ++ bhi .L3905 ++ add r2, r4, r2, lsl #3 ++ uxth r6, r6 ++ strh r0, [r2, #16] @ movhi ++ ldrh r0, [r4, #12] ++ strh r8, [r2, #20] @ movhi ++ strh r0, [r2, #18] @ movhi ++ add r0, r0, r6 ++ subs r6, r1, r6 ++ strh r0, [r4, #12] @ movhi ++ strh r6, [r4, #14] @ movhi ++ mov r1, r3 ++ ldrh r0, [r2, #18] ++ mov r2, r8 ++ add r0, r0, #1024 ++ add r0, r0, r4 ++ bl memcpy ++ ldrh r3, [r4, #10] ++ adds r3, r3, #1 ++ strh r3, [r4, #10] @ movhi ++ b .L3909 ++.L3900: ++ add r5, r4, r7, lsl #3 ++ ldrh r1, [r5, #16] ++ cmp r1, r0 ++ str r1, [sp, #8] ++ bne .L3893 ++ ldrh r1, [r5, #20] ++ add fp, r4, #1024 ++ adds r1, r1, #63 ++ bic r1, r1, #63 ++ cmp r8, r1 ++ str r1, [sp, #12] ++ bls .L3894 ++ ldrh r1, [r4, #14] ++ cmp r6, r1 ++ bhi .L3905 ++ ldrh r10, [r5, #18] ++ subs r2, r2, #1 ++ str r2, [sp, #16] ++.L3895: ++ ldr r2, [sp, #16] ++ adds r5, r5, #8 ++ cmp r7, r2 ++ bcc .L3896 ++ ldrh r2, [sp, #8] ++ add r7, r4, r7, lsl #3 ++ uxth r5, r10 ++ mov r1, r3 ++ strh r8, [r7, #20] @ movhi ++ uxtah r0, fp, r10 ++ strh r2, [r7, #16] @ movhi ++ mov r2, r8 ++ strh r5, [r7, #18] @ movhi ++ bl memcpy ++ uxth r3, r6 ++ ldrh r6, [r4, #14] ++ add r5, r5, r3 ++ subs r6, r6, r3 ++ ldr r3, [sp, #12] ++ strh r5, [r4, #12] @ movhi ++ add r6, r6, r3 ++ strh r6, [r4, #14] @ movhi ++.L3909: ++ ldr r3, [r4, #4] ++ movw r2, #65532 ++ movs r1, #128 ++ adds r3, r3, #1 ++ str r3, [r4, #4] ++ str r3, [r4, r2] ++ mov r2, r4 ++ ldrh r3, [r4, #8] ++ adds r3, r3, #1 ++ uxth r3, r3 ++ cmp r3, #1 ++ it hi ++ movhi r3, #0 ++ strh r3, [r4, #8] @ movhi ++ ldr r3, [sp, #4] ++ lsls r0, r3, #7 ++ bl FlashBootVendorWrite ++ movs r0, #0 ++.L3890: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3896: ++ ldrh r9, [r5, #20] ++ add r0, fp, r10 ++ ldrh r2, [r5, #16] ++ adds r7, r7, #1 ++ ldrh r1, [r5, #18] ++ strh r9, [r5, #12] @ movhi ++ add r9, r9, #63 ++ bic r9, r9, #63 ++ strh r2, [r5, #8] @ movhi ++ strh r10, [r5, #10] @ movhi ++ mov r2, r9 ++ add r1, r1, fp ++ str r3, [sp, #20] ++ add r10, r10, r9 ++ bl memcpy ++ ldr r3, [sp, #20] ++ b .L3895 ++.L3894: ++ ldrh r0, [r5, #18] ++ mov r2, r8 ++ mov r1, r3 ++ add r0, r0, fp ++ bl memcpy ++ strh r8, [r5, #20] @ movhi ++ b .L3909 ++.L3893: ++ adds r7, r7, #1 ++ b .L3892 ++.L3905: ++ mov r0, #-1 ++ b .L3890 ++.L3911: ++ .align 2 ++.L3910: ++ .word .LANCHOR4 ++ .fnend ++ .size rk_ftl_vendor_write, .-rk_ftl_vendor_write ++ .align 1 ++ .global rk_ftl_vendor_storage_ioctl ++ .syntax unified ++ .thumb ++ .thumb_func ++ .fpu softvfp ++ .type rk_ftl_vendor_storage_ioctl, %function ++rk_ftl_vendor_storage_ioctl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r0, #4096 ++ mov r6, r1 ++ mov r5, r2 ++ bl ftl_malloc ++ mov r4, r0 ++ cmp r0, #0 ++ beq .L3920 ++ ldr r3, .L3927 ++ cmp r6, r3 ++ beq .L3915 ++ adds r3, r3, #1 ++ cmp r6, r3 ++ beq .L3916 ++.L3926: ++ mvn r5, #13 ++ b .L3914 ++.L3915: ++ movs r2, #8 ++ mov r1, r5 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3926 ++ ldr r2, [r4] ++ ldr r3, .L3927+4 ++ cmp r2, r3 ++ beq .L3918 ++.L3919: ++ mov r5, #-1 ++.L3914: ++ mov r0, r4 ++ bl kfree ++.L3912: ++ mov r0, r5 ++ pop {r4, r5, r6, pc} ++.L3918: ++ ldrh r2, [r4, #6] ++ add r1, r4, #8 ++ ldrh r0, [r4, #4] ++ bl rk_ftl_vendor_read ++ adds r3, r0, #1 ++ beq .L3919 ++ uxth r2, r0 ++ strh r0, [r4, #6] @ movhi ++ mov r1, r4 ++ adds r2, r2, #8 ++ mov r0, r5 ++ bl rk_copy_to_user ++ cmp r0, #0 ++ bne .L3926 ++.L3922: ++ mov r5, r0 ++ b .L3914 ++.L3916: ++ movs r2, #8 ++ mov r1, r5 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3926 ++ ldr r2, [r4] ++ ldr r3, .L3927+4 ++ cmp r2, r3 ++ bne .L3919 ++ ldrh r2, [r4, #6] ++ movw r3, #4087 ++ cmp r2, r3 ++ bhi .L3919 ++ adds r2, r2, #8 ++ mov r1, r5 ++ mov r0, r4 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L3926 ++ ldrh r2, [r4, #6] ++ add r1, r4, #8 ++ ldrh r0, [r4, #4] ++ bl rk_ftl_vendor_write ++ b .L3922 ++.L3920: ++ mov r5, #-1 ++ b .L3912 ++.L3928: ++ .align 2 ++.L3927: ++ .word 1074034177 ++ .word 1448232273 ++ .fnend ++ .size rk_ftl_vendor_storage_ioctl, .-rk_ftl_vendor_storage_ioctl ++ .global SecureBootUnlockTryCount ++ .global SecureBootCheckOK ++ .global SecureBootEn ++ .global gpVendor1Info ++ .global gpVendor0Info ++ .global g_idb_buffer ++ .global gSnSectorData ++ .global gpDrmKeyInfo ++ .global gpBootConfig ++ .global ftl_dma32_buffer_size ++ .global ftl_dma32_buffer ++ .global gLoaderBootInfo ++ .global RK29_NANDC1_REG_BASE ++ .global RK29_NANDC_REG_BASE ++ .global gc_ink_free_return_value ++ .global check_valid_page_count_table ++ .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_3 ++ .global g_gc_next_blk_2 ++ .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 ++ .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 idb_flash_slc_mode ++ .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_nand_ecc_en ++ .global g_slc2KBNand ++ .global g_maxRetryCount ++ .global g_maxRegNum ++ .global g_retryMode ++ .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 gFlashCurMode ++ .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 IDByte ++ .global read_retry_cur_offset ++ .section .rodata ++ .set .LANCHOR3,. + 0 ++ .type __func__.23812, %object ++ .size __func__.23812, 11 ++__func__.23812: ++ .ascii "FtlMemInit\000" ++ .type samsung_14nm_slc_rr, %object ++ .size samsung_14nm_slc_rr, 26 ++samsung_14nm_slc_rr: ++ .byte 0 ++ .byte 10 ++ .byte -10 ++ .byte 20 ++ .byte -20 ++ .byte 30 ++ .byte -30 ++ .byte 40 ++ .byte -40 ++ .byte 50 ++ .byte -50 ++ .byte 60 ++ .byte -60 ++ .byte -70 ++ .byte -80 ++ .byte -90 ++ .byte -100 ++ .byte -110 ++ .byte -120 ++ .byte -9 ++ .byte 70 ++ .byte 80 ++ .byte 90 ++ .byte -125 ++ .byte -115 ++ .byte 100 ++ .type samsung_14nm_mlc_rr, %object ++ .size samsung_14nm_mlc_rr, 104 ++samsung_14nm_mlc_rr: ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -4 ++ .byte 3 ++ .byte -4 ++ .byte -6 ++ .byte 6 ++ .byte 0 ++ .byte 6 ++ .byte -10 ++ .byte -10 ++ .byte 4 ++ .byte -10 ++ .byte 16 ++ .byte 12 ++ .byte -4 ++ .byte 12 ++ .byte 8 ++ .byte -16 ++ .byte 10 ++ .byte -16 ++ .byte 24 ++ .byte 18 ++ .byte -14 ++ .byte 18 ++ .byte -4 ++ .byte -22 ++ .byte -16 ++ .byte -22 ++ .byte -8 ++ .byte 24 ++ .byte -9 ++ .byte 24 ++ .byte 8 ++ .byte -28 ++ .byte -4 ++ .byte -28 ++ .byte 16 ++ .byte 30 ++ .byte 10 ++ .byte 30 ++ .byte 10 ++ .byte -34 ++ .byte 6 ++ .byte -34 ++ .byte 0 ++ .byte 36 ++ .byte -8 ++ .byte 36 ++ .byte -8 ++ .byte -40 ++ .byte -2 ++ .byte -40 ++ .byte -20 ++ .byte -46 ++ .byte -4 ++ .byte -46 ++ .byte -30 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte -3 ++ .byte -2 ++ .byte -4 ++ .byte -2 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -4 ++ .byte -10 ++ .byte -6 ++ .byte -8 ++ .byte -6 ++ .byte -14 ++ .byte -9 ++ .byte -8 ++ .byte -9 ++ .byte -18 ++ .byte -52 ++ .byte 22 ++ .byte -52 ++ .byte 10 ++ .byte 42 ++ .byte 4 ++ .byte 42 ++ .byte 4 ++ .byte 48 ++ .byte -9 ++ .byte 48 ++ .byte 4 ++ .byte -58 ++ .byte 12 ++ .byte -58 ++ .byte 0 ++ .byte -64 ++ .byte -24 ++ .byte -64 ++ .byte -6 ++ .byte 9 ++ .byte 18 ++ .byte 9 ++ .byte 8 ++ .type __func__.24591, %object ++ .size __func__.24591, 17 ++__func__.24591: ++ .ascii "FtlDumpBlockInfo\000" ++ .type __func__.24610, %object ++ .size __func__.24610, 16 ++__func__.24610: ++ .ascii "FtlScanAllBlock\000" ++ .type __func__.24878, %object ++ .size __func__.24878, 17 ++__func__.24878: ++ .ascii "ftl_scan_all_ppa\000" ++ .type __func__.24559, %object ++ .size __func__.24559, 12 ++__func__.24559: ++ .ascii "FtlCheckVpc\000" ++ .type __func__.24858, %object ++ .size __func__.24858, 21 ++__func__.24858: ++ .ascii "FtlVpcCheckAndModify\000" ++ .type __func__.23885, %object ++ .size __func__.23885, 8 ++__func__.23885: ++ .ascii "FtlInit\000" ++ .data ++ .align 2 ++ .set .LANCHOR1,. + 0 ++ .type random_seed, %object ++ .size random_seed, 256 ++random_seed: ++ .short 22378 ++ .short 1512 ++ .short 25245 ++ .short 17827 ++ .short 25756 ++ .short 19440 ++ .short 9026 ++ .short 10030 ++ .short 29528 ++ .short 20467 ++ .short 29676 ++ .short 24432 ++ .short 31328 ++ .short 6872 ++ .short 13426 ++ .short 13842 ++ .short 8783 ++ .short 1108 ++ .short 782 ++ .short 28837 ++ .short 30729 ++ .short 9505 ++ .short 18676 ++ .short 23085 ++ .short 18730 ++ .short 1085 ++ .short 32609 ++ .short 14697 ++ .short 20858 ++ .short 15170 ++ .short 30365 ++ .short 1607 ++ .short 32298 ++ .short 4995 ++ .short 18905 ++ .short 1976 ++ .short 9592 ++ .short 20204 ++ .short 17443 ++ .short 13615 ++ .short 23330 ++ .short 29369 ++ .short 13947 ++ .short 9398 ++ .short 32398 ++ .short 8984 ++ .short 27600 ++ .short 21785 ++ .short 6019 ++ .short 6311 ++ .short 31598 ++ .short 30210 ++ .short 19327 ++ .short 13896 ++ .short 11347 ++ .short 27545 ++ .short 3107 ++ .short 26575 ++ .short 32270 ++ .short 19852 ++ .short 20601 ++ .short 8349 ++ .short 9290 ++ .short 29819 ++ .short 13579 ++ .short 3661 ++ .short 28676 ++ .short 27331 ++ .short 32574 ++ .short 8693 ++ .short 31253 ++ .short 9081 ++ .short 5399 ++ .short 6842 ++ .short 20087 ++ .short 5537 ++ .short 1274 ++ .short 11617 ++ .short 9530 ++ .short 4866 ++ .short 8035 ++ .short 23219 ++ .short 1178 ++ .short 23272 ++ .short 7383 ++ .short 18944 ++ .short 12488 ++ .short 12871 ++ .short 29340 ++ .short 20532 ++ .short 11022 ++ .short 22514 ++ .short 228 ++ .short 22363 ++ .short 24978 ++ .short 14584 ++ .short 12138 ++ .short 3092 ++ .short 17916 ++ .short 16863 ++ .short 14554 ++ .short 31457 ++ .short 29474 ++ .short 25311 ++ .short 24121 ++ .short 3684 ++ .short 28037 ++ .short 22865 ++ .short 22839 ++ .short 25217 ++ .short 13217 ++ .short 27186 ++ .short 14938 ++ .short 11180 ++ .short 29754 ++ .short 24180 ++ .short 15150 ++ .short 32455 ++ .short 20434 ++ .short 23848 ++ .short 29983 ++ .short 16120 ++ .short 14769 ++ .short 20041 ++ .short 29803 ++ .short 28406 ++ .short 17598 ++ .short 28087 ++ .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 ++ .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 ++ .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 gNandParaInfo, %object ++ .size gNandParaInfo, 32 ++gNandParaInfo: ++ .byte 0 ++ .byte 0 ++ .space 5 ++ .byte 0 ++ .byte 1 ++ .byte 8 ++ .short 128 ++ .byte 2 ++ .byte 1 ++ .short 2048 ++ .short 0 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .type gFtlInitStatus, %object ++ .size gFtlInitStatus, 4 ++gFtlInitStatus: ++ .word -1 ++ .type NandFlashParaTbl, %object ++ .size NandFlashParaTbl, 2752 ++NandFlashParaTbl: ++ .byte 6 ++ .byte 44 ++ .byte 100 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 68 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1064 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 104 ++ .byte 4 ++ .byte 74 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -120 ++ .byte 4 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -88 ++ .byte 5 ++ .byte -53 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 104 ++ .byte 4 ++ .byte 70 ++ .byte -119 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 72 ++ .byte 4 ++ .byte 74 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 84 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -41 ++ .byte -108 ++ .byte 62 ++ .byte -124 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 4096 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 72 ++ .byte 4 ++ .byte 70 ++ .byte -123 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -120 ++ .byte 5 ++ .byte -58 ++ .byte -119 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 104 ++ .byte 0 ++ .byte 39 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 1 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 0 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 86 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 24 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 700 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -124 ++ .byte -59 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -43 ++ .byte -47 ++ .byte -90 ++ .byte 104 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 8 ++ .short 64 ++ .byte 1 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 0 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -36 ++ .byte -112 ++ .byte -90 ++ .byte 84 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 64 ++ .byte 1 ++ .byte 2 ++ .short 1024 ++ .short 279 ++ .byte 0 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 84 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 68 ++ .byte 50 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1048 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1044 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte -60 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -92 ++ .byte 100 ++ .byte 50 ++ .byte -86 ++ .byte 4 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 1024 ++ .byte 2 ++ .byte 1 ++ .short 2192 ++ .short 1479 ++ .byte 10 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -46 ++ .byte 4 ++ .byte 67 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 473 ++ .byte 1 ++ .byte 1 ++ .byte 24 ++ .byte 32 ++ .byte 4 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -38 ++ .byte 116 ++ .byte -61 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 473 ++ .byte 1 ++ .byte 2 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -111 ++ .byte 96 ++ .byte 68 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1046 ++ .short 473 ++ .byte 1 ++ .byte 3 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -38 ++ .byte 116 ++ .byte -60 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2090 ++ .short 473 ++ .byte 1 ++ .byte 4 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -21 ++ .byte 116 ++ .byte 68 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 473 ++ .byte 1 ++ .byte 7 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -43 ++ .byte -108 ++ .byte -38 ++ .byte 116 ++ .byte -60 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 530 ++ .short 473 ++ .byte 1 ++ .byte 3 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -102 ++ .byte 116 ++ .byte 66 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 281 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 4 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte 20 ++ .byte -89 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1060 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte 20 ++ .byte -98 ++ .byte 52 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1056 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -89 ++ .byte 66 ++ .byte 72 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1060 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte 20 ++ .byte -85 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1056 ++ .short 473 ++ .byte 2 ++ .byte 6 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte 58 ++ .byte 20 ++ .byte -85 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2092 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -43 ++ .byte -108 ++ .byte -102 ++ .byte 116 ++ .byte 66 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 273 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte 58 ++ .byte 20 ++ .byte 3 ++ .byte 8 ++ .byte 80 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 388 ++ .byte 2 ++ .byte 2 ++ .short 1362 ++ .short 473 ++ .byte 9 ++ .byte 8 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 100 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte -124 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 104 ++ .byte 36 ++ .byte 74 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 104 ++ .byte 4 ++ .byte 74 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -41 ++ .byte -108 ++ .byte 62 ++ .byte -124 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 104 ++ .byte 4 ++ .byte 70 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte -119 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -95 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte -119 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 59 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 192 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 12 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 1473 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte 58 ++ .byte -123 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 1 ++ .byte 2 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 1505 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -43 ++ .byte -124 ++ .byte 50 ++ .byte 114 ++ .byte 86 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 1 ++ .short 2056 ++ .short 1473 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -108 ++ .byte 50 ++ .byte 118 ++ .byte 86 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2058 ++ .short 1489 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -126 ++ .byte 118 ++ .byte 86 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2062 ++ .short 1489 ++ .byte 1 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 80 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 1497 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte 58 ++ .byte -107 ++ .byte -109 ++ .byte 122 ++ .byte 80 ++ .byte 1 ++ .byte 2 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 1497 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -108 ++ .byte 50 ++ .byte 118 ++ .byte 85 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2050 ++ .short 401 ++ .byte 2 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 1497 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 80 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte 58 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2106 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 81 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1056 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -47 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 1497 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -92 ++ .byte -126 ++ .byte 118 ++ .byte 86 ++ .byte 8 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2082 ++ .short 473 ++ .byte 1 ++ .byte 65 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 80 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 1497 ++ .byte 2 ++ .byte 67 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 80 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 67 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -92 ++ .byte -126 ++ .byte 118 ++ .byte -41 ++ .byte 8 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2090 ++ .short 1241 ++ .byte 1 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 1473 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte 58 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2106 ++ .short 473 ++ .byte 2 ++ .byte 68 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 473 ++ .byte 2 ++ .byte 68 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte 58 ++ .byte -92 ++ .byte -109 ++ .byte 122 ++ .byte 80 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2138 ++ .short 1497 ++ .byte 2 ++ .byte 0 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -126 ++ .byte 118 ++ .byte 86 ++ .byte 8 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2062 ++ .short 473 ++ .byte 1 ++ .byte 0 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -41 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 1497 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte -20 ++ .byte -41 ++ .byte -108 ++ .byte 126 ++ .byte 100 ++ .byte 68 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 473 ++ .byte 2 ++ .byte 49 ++ .byte 60 ++ .byte 36 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -43 ++ .byte 126 ++ .byte 104 ++ .byte 68 ++ .byte 0 ++ .byte 2 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 505 ++ .byte 2 ++ .byte 49 ++ .byte 60 ++ .byte 36 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -41 ++ .byte -108 ++ .byte 122 ++ .byte 84 ++ .byte 67 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2076 ++ .short 409 ++ .byte 2 ++ .byte 0 ++ .byte 40 ++ .byte 36 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -43 ++ .byte 122 ++ .byte 88 ++ .byte 67 ++ .byte 0 ++ .byte 2 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2076 ++ .short 441 ++ .byte 2 ++ .byte 0 ++ .byte 40 ++ .byte 36 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -43 ++ .byte -108 ++ .byte 118 ++ .byte 84 ++ .byte 67 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 1038 ++ .short 281 ++ .byte 2 ++ .byte 0 ++ .byte 24 ++ .byte 36 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -41 ++ .byte 20 ++ .byte 118 ++ .byte 84 ++ .byte -62 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2076 ++ .short 1169 ++ .byte 2 ++ .byte 0 ++ .byte 24 ++ .byte 40 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -108 ++ .byte -61 ++ .byte -92 ++ .byte -54 ++ .byte 0 ++ .byte 1 ++ .byte 32 ++ .short 792 ++ .byte 2 ++ .byte 1 ++ .short 688 ++ .short 1217 ++ .byte 11 ++ .byte 50 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 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 ++ .space 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 ++ .space 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 ++ .space 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 ++ .space 14 ++ .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 ++ .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 ++ .short 64 ++ .byte 1 ++ .byte 1 ++ .short 1024 ++ .short 256 ++ .byte 0 ++ .byte 0 ++ .byte 16 ++ .byte 40 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .type ftl_gc_temp_block_bops_scan_page_addr, %object ++ .size ftl_gc_temp_block_bops_scan_page_addr, 2 ++ftl_gc_temp_block_bops_scan_page_addr: ++ .short -1 ++ .space 2 ++ .type power_up_flag, %object ++ .size power_up_flag, 4 ++power_up_flag: ++ .word 1 ++ .bss ++ .align 2 ++ .set .LANCHOR0,. + 0 ++ .set .LANCHOR2,. + 4344 ++ .set .LANCHOR4,. + 8688 ++ .type gNandChipMap, %object ++ .size gNandChipMap, 32 ++gNandChipMap: ++ .space 32 ++ .type p_blk_mode_table, %object ++ .size p_blk_mode_table, 4 ++p_blk_mode_table: ++ .space 4 ++ .type g_slc2KBNand, %object ++ .size g_slc2KBNand, 1 ++g_slc2KBNand: ++ .space 1 ++ .type gNandIDBResBlkNum, %object ++ .size gNandIDBResBlkNum, 1 ++gNandIDBResBlkNum: ++ .space 1 ++ .space 2 ++ .type gBlockPageAlignSize, %object ++ .size gBlockPageAlignSize, 4 ++gBlockPageAlignSize: ++ .space 4 ++ .type gNandRandomizer, %object ++ .size gNandRandomizer, 1 ++gNandRandomizer: ++ .space 1 ++ .space 3 ++ .type gpNandParaInfo, %object ++ .size gpNandParaInfo, 4 ++gpNandParaInfo: ++ .space 4 ++ .type gNandOptPara, %object ++ .size gNandOptPara, 32 ++gNandOptPara: ++ .space 32 ++ .type g_retryMode, %object ++ .size g_retryMode, 1 ++g_retryMode: ++ .space 1 ++ .type g_maxRegNum, %object ++ .size g_maxRegNum, 1 ++g_maxRegNum: ++ .space 1 ++ .space 2 ++ .type gpNandc, %object ++ .size gpNandc, 4 ++gpNandc: ++ .space 4 ++ .type NANDC_FMCTL, %object ++ .size NANDC_FMCTL, 4 ++NANDC_FMCTL: ++ .space 4 ++ .type NANDC_FMWAIT, %object ++ .size NANDC_FMWAIT, 4 ++NANDC_FMWAIT: ++ .space 4 ++ .type NANDC_FLCTL, %object ++ .size NANDC_FLCTL, 4 ++NANDC_FLCTL: ++ .space 4 ++ .type NANDC_BCHCTL, %object ++ .size NANDC_BCHCTL, 4 ++NANDC_BCHCTL: ++ .space 4 ++ .type NANDC_DLL_CTL_REG0, %object ++ .size NANDC_DLL_CTL_REG0, 4 ++NANDC_DLL_CTL_REG0: ++ .space 4 ++ .type NANDC_DLL_CTL_REG1, %object ++ .size NANDC_DLL_CTL_REG1, 4 ++NANDC_DLL_CTL_REG1: ++ .space 4 ++ .type NANDC_RANDMZ_CFG, %object ++ .size NANDC_RANDMZ_CFG, 4 ++NANDC_RANDMZ_CFG: ++ .space 4 ++ .type NANDC_FMWAIT_SYN, %object ++ .size NANDC_FMWAIT_SYN, 4 ++NANDC_FMWAIT_SYN: ++ .space 4 ++ .type gNandPhyInfo, %object ++ .size gNandPhyInfo, 28 ++gNandPhyInfo: ++ .space 28 ++ .type gFlashSlcMode, %object ++ .size gFlashSlcMode, 1 ++gFlashSlcMode: ++ .space 1 ++ .space 3 ++ .type slcPageToMlcPageTbl, %object ++ .size slcPageToMlcPageTbl, 1024 ++slcPageToMlcPageTbl: ++ .space 1024 ++ .type DieAddrs, %object ++ .size DieAddrs, 32 ++DieAddrs: ++ .space 32 ++ .type FlashWaitBusyScheduleEn, %object ++ .size FlashWaitBusyScheduleEn, 4 ++FlashWaitBusyScheduleEn: ++ .space 4 ++ .type gReadRetryInfo, %object ++ .size gReadRetryInfo, 852 ++gReadRetryInfo: ++ .space 852 ++ .type read_retry_cur_offset, %object ++ .size read_retry_cur_offset, 4 ++read_retry_cur_offset: ++ .space 4 ++ .type IDByte, %object ++ .size IDByte, 32 ++IDByte: ++ .space 32 ++ .type gDieOp, %object ++ .size gDieOp, 128 ++gDieOp: ++ .space 128 ++ .type gFlashCurMode, %object ++ .size gFlashCurMode, 1 ++gFlashCurMode: ++ .space 1 ++ .type gFlashInterfaceMode, %object ++ .size gFlashInterfaceMode, 1 ++gFlashInterfaceMode: ++ .space 1 ++ .type gNandMaxDie, %object ++ .size gNandMaxDie, 1 ++gNandMaxDie: ++ .space 1 ++ .space 1 ++ .type DieCsIndex, %object ++ .size DieCsIndex, 8 ++DieCsIndex: ++ .space 8 ++ .type gMultiPageProgEn, %object ++ .size gMultiPageProgEn, 1 ++gMultiPageProgEn: ++ .space 1 ++ .space 3 ++ .type g_inkDie_check_enable, %object ++ .size g_inkDie_check_enable, 4 ++g_inkDie_check_enable: ++ .space 4 ++ .type idb_flash_slc_mode, %object ++ .size idb_flash_slc_mode, 4 ++idb_flash_slc_mode: ++ .space 4 ++ .type gFlashToggleModeEn, %object ++ .size gFlashToggleModeEn, 1 ++gFlashToggleModeEn: ++ .space 1 ++ .space 3 ++ .type gBootDdrMode, %object ++ .size gBootDdrMode, 4 ++gBootDdrMode: ++ .space 4 ++ .type gNandcVer, %object ++ .size gNandcVer, 4 ++gNandcVer: ++ .space 4 ++ .type g_nandc_version_data, %object ++ .size g_nandc_version_data, 4 ++g_nandc_version_data: ++ .space 4 ++ .type gMasterTempBuf, %object ++ .size gMasterTempBuf, 4 ++gMasterTempBuf: ++ .space 4 ++ .type gMasterInfo, %object ++ .size gMasterInfo, 32 ++gMasterInfo: ++ .space 32 ++ .type gNandcDumpWriteEn, %object ++ .size gNandcDumpWriteEn, 4 ++gNandcDumpWriteEn: ++ .space 4 ++ .type gNandcEccBits, %object ++ .size gNandcEccBits, 4 ++gNandcEccBits: ++ .space 4 ++ .type gNandFlashEccBits, %object ++ .size gNandFlashEccBits, 1 ++gNandFlashEccBits: ++ .space 1 ++ .space 3 ++ .type c_ftl_nand_sys_blks_per_plane, %object ++ .size c_ftl_nand_sys_blks_per_plane, 4 ++c_ftl_nand_sys_blks_per_plane: ++ .space 4 ++ .type c_ftl_nand_planes_num, %object ++ .size c_ftl_nand_planes_num, 2 ++c_ftl_nand_planes_num: ++ .space 2 ++ .space 2 ++ .type c_ftl_nand_max_sys_blks, %object ++ .size c_ftl_nand_max_sys_blks, 4 ++c_ftl_nand_max_sys_blks: ++ .space 4 ++ .type c_ftl_nand_data_blks_per_plane, %object ++ .size c_ftl_nand_data_blks_per_plane, 2 ++c_ftl_nand_data_blks_per_plane: ++ .space 2 ++ .type c_ftl_nand_blk_pre_plane, %object ++ .size c_ftl_nand_blk_pre_plane, 2 ++c_ftl_nand_blk_pre_plane: ++ .space 2 ++ .type c_ftl_nand_max_data_blks, %object ++ .size c_ftl_nand_max_data_blks, 4 ++c_ftl_nand_max_data_blks: ++ .space 4 ++ .type c_ftl_nand_totle_phy_blks, %object ++ .size c_ftl_nand_totle_phy_blks, 4 ++c_ftl_nand_totle_phy_blks: ++ .space 4 ++ .type c_ftl_nand_type, %object ++ .size c_ftl_nand_type, 2 ++c_ftl_nand_type: ++ .space 2 ++ .type c_ftl_nand_die_num, %object ++ .size c_ftl_nand_die_num, 2 ++c_ftl_nand_die_num: ++ .space 2 ++ .type c_ftl_nand_planes_per_die, %object ++ .size c_ftl_nand_planes_per_die, 2 ++c_ftl_nand_planes_per_die: ++ .space 2 ++ .type p_plane_order_table, %object ++ .size p_plane_order_table, 32 ++p_plane_order_table: ++ .space 32 ++ .type c_mlc_erase_count_value, %object ++ .size c_mlc_erase_count_value, 2 ++c_mlc_erase_count_value: ++ .space 2 ++ .type c_ftl_nand_ext_blk_pre_plane, %object ++ .size c_ftl_nand_ext_blk_pre_plane, 2 ++c_ftl_nand_ext_blk_pre_plane: ++ .space 2 ++ .type c_ftl_vendor_part_size, %object ++ .size c_ftl_vendor_part_size, 2 ++c_ftl_vendor_part_size: ++ .space 2 ++ .type c_ftl_nand_blks_per_die, %object ++ .size c_ftl_nand_blks_per_die, 2 ++c_ftl_nand_blks_per_die: ++ .space 2 ++ .type c_ftl_nand_page_pre_blk, %object ++ .size c_ftl_nand_page_pre_blk, 2 ++c_ftl_nand_page_pre_blk: ++ .space 2 ++ .type c_ftl_nand_page_pre_slc_blk, %object ++ .size c_ftl_nand_page_pre_slc_blk, 2 ++c_ftl_nand_page_pre_slc_blk: ++ .space 2 ++ .type c_ftl_nand_page_pre_super_blk, %object ++ .size c_ftl_nand_page_pre_super_blk, 2 ++c_ftl_nand_page_pre_super_blk: ++ .space 2 ++ .type c_ftl_nand_sec_pre_page, %object ++ .size c_ftl_nand_sec_pre_page, 2 ++c_ftl_nand_sec_pre_page: ++ .space 2 ++ .type c_ftl_nand_sec_pre_page_shift, %object ++ .size c_ftl_nand_sec_pre_page_shift, 2 ++c_ftl_nand_sec_pre_page_shift: ++ .space 2 ++ .type c_ftl_nand_byte_pre_page, %object ++ .size c_ftl_nand_byte_pre_page, 2 ++c_ftl_nand_byte_pre_page: ++ .space 2 ++ .type c_ftl_nand_byte_pre_oob, %object ++ .size c_ftl_nand_byte_pre_oob, 2 ++c_ftl_nand_byte_pre_oob: ++ .space 2 ++ .type c_ftl_nand_reserved_blks, %object ++ .size c_ftl_nand_reserved_blks, 2 ++c_ftl_nand_reserved_blks: ++ .space 2 ++ .space 2 ++ .type DeviceCapacity, %object ++ .size DeviceCapacity, 4 ++DeviceCapacity: ++ .space 4 ++ .type c_ftl_nand_max_vendor_blks, %object ++ .size c_ftl_nand_max_vendor_blks, 2 ++c_ftl_nand_max_vendor_blks: ++ .space 2 ++ .type c_ftl_nand_vendor_region_num, %object ++ .size c_ftl_nand_vendor_region_num, 2 ++c_ftl_nand_vendor_region_num: ++ .space 2 ++ .type c_ftl_nand_map_blks_per_plane, %object ++ .size c_ftl_nand_map_blks_per_plane, 2 ++c_ftl_nand_map_blks_per_plane: ++ .space 2 ++ .space 2 ++ .type c_ftl_nand_max_map_blks, %object ++ .size c_ftl_nand_max_map_blks, 4 ++c_ftl_nand_max_map_blks: ++ .space 4 ++ .type c_ftl_nand_init_sys_blks_per_plane, %object ++ .size c_ftl_nand_init_sys_blks_per_plane, 4 ++c_ftl_nand_init_sys_blks_per_plane: ++ .space 4 ++ .type c_ftl_nand_map_region_num, %object ++ .size c_ftl_nand_map_region_num, 2 ++c_ftl_nand_map_region_num: ++ .space 2 ++ .type c_ftl_nand_l2pmap_ram_region_num, %object ++ .size c_ftl_nand_l2pmap_ram_region_num, 2 ++c_ftl_nand_l2pmap_ram_region_num: ++ .space 2 ++ .type g_MaxLbaSector, %object ++ .size g_MaxLbaSector, 4 ++g_MaxLbaSector: ++ .space 4 ++ .type g_page_map_check_enable, %object ++ .size g_page_map_check_enable, 2 ++g_page_map_check_enable: ++ .space 2 ++ .type g_totle_vendor_block, %object ++ .size g_totle_vendor_block, 2 ++g_totle_vendor_block: ++ .space 2 ++ .type p_vendor_block_table, %object ++ .size p_vendor_block_table, 4 ++p_vendor_block_table: ++ .space 4 ++ .type g_wr_page_num, %object ++ .size g_wr_page_num, 4 ++g_wr_page_num: ++ .space 4 ++ .type req_wr_io, %object ++ .size req_wr_io, 4 ++req_wr_io: ++ .space 4 ++ .type g_MaxLpn, %object ++ .size g_MaxLpn, 4 ++g_MaxLpn: ++ .space 4 ++ .type gBbtInfo, %object ++ .size gBbtInfo, 60 ++gBbtInfo: ++ .space 60 ++ .type gSysFreeQueue, %object ++ .size gSysFreeQueue, 2056 ++gSysFreeQueue: ++ .space 2056 ++ .type g_flash_read_only_en, %object ++ .size g_flash_read_only_en, 4 ++g_flash_read_only_en: ++ .space 4 ++ .type req_erase, %object ++ .size req_erase, 4 ++req_erase: ++ .space 4 ++ .type p_erase_count_table, %object ++ .size p_erase_count_table, 4 ++p_erase_count_table: ++ .space 4 ++ .type g_totle_sys_slc_erase_count, %object ++ .size g_totle_sys_slc_erase_count, 4 ++g_totle_sys_slc_erase_count: ++ .space 4 ++ .type g_sys_save_data, %object ++ .size g_sys_save_data, 48 ++g_sys_save_data: ++ .space 48 ++ .type p_data_block_list_table, %object ++ .size p_data_block_list_table, 4 ++p_data_block_list_table: ++ .space 4 ++ .type p_data_block_list_head, %object ++ .size p_data_block_list_head, 4 ++p_data_block_list_head: ++ .space 4 ++ .type p_valid_page_count_table, %object ++ .size p_valid_page_count_table, 4 ++p_valid_page_count_table: ++ .space 4 ++ .type p_data_block_list_tail, %object ++ .size p_data_block_list_tail, 4 ++p_data_block_list_tail: ++ .space 4 ++ .type g_num_data_superblocks, %object ++ .size g_num_data_superblocks, 2 ++g_num_data_superblocks: ++ .space 2 ++ .space 2 ++ .type p_free_data_block_list_head, %object ++ .size p_free_data_block_list_head, 4 ++p_free_data_block_list_head: ++ .space 4 ++ .type g_num_free_superblocks, %object ++ .size g_num_free_superblocks, 2 ++g_num_free_superblocks: ++ .space 2 ++ .space 2 ++ .type g_active_superblock, %object ++ .size g_active_superblock, 48 ++g_active_superblock: ++ .space 48 ++ .type g_buffer_superblock, %object ++ .size g_buffer_superblock, 48 ++g_buffer_superblock: ++ .space 48 ++ .type g_gc_temp_superblock, %object ++ .size g_gc_temp_superblock, 48 ++g_gc_temp_superblock: ++ .space 48 ++ .type p_l2p_ram_map, %object ++ .size p_l2p_ram_map, 4 ++p_l2p_ram_map: ++ .space 4 ++ .type g_l2p_last_update_region_id, %object ++ .size g_l2p_last_update_region_id, 2 ++g_l2p_last_update_region_id: ++ .space 2 ++ .type FtlUpdateVaildLpnCount, %object ++ .size FtlUpdateVaildLpnCount, 2 ++FtlUpdateVaildLpnCount: ++ .space 2 ++ .type g_VaildLpn, %object ++ .size g_VaildLpn, 4 ++g_VaildLpn: ++ .space 4 ++ .type g_totle_read_page_count, %object ++ .size g_totle_read_page_count, 4 ++g_totle_read_page_count: ++ .space 4 ++ .type g_totle_discard_page_count, %object ++ .size g_totle_discard_page_count, 4 ++g_totle_discard_page_count: ++ .space 4 ++ .type g_totle_write_page_count, %object ++ .size g_totle_write_page_count, 4 ++g_totle_write_page_count: ++ .space 4 ++ .type g_totle_cache_write_count, %object ++ .size g_totle_cache_write_count, 4 ++g_totle_cache_write_count: ++ .space 4 ++ .type g_totle_l2p_write_count, %object ++ .size g_totle_l2p_write_count, 4 ++g_totle_l2p_write_count: ++ .space 4 ++ .type g_totle_gc_page_count, %object ++ .size g_totle_gc_page_count, 4 ++g_totle_gc_page_count: ++ .space 4 ++ .type g_totle_write_sector, %object ++ .size g_totle_write_sector, 4 ++g_totle_write_sector: ++ .space 4 ++ .type g_totle_read_sector, %object ++ .size g_totle_read_sector, 4 ++g_totle_read_sector: ++ .space 4 ++ .type g_GlobalSysVersion, %object ++ .size g_GlobalSysVersion, 4 ++g_GlobalSysVersion: ++ .space 4 ++ .type g_GlobalDataVersion, %object ++ .size g_GlobalDataVersion, 4 ++g_GlobalDataVersion: ++ .space 4 ++ .type g_totle_mlc_erase_count, %object ++ .size g_totle_mlc_erase_count, 4 ++g_totle_mlc_erase_count: ++ .space 4 ++ .type g_totle_slc_erase_count, %object ++ .size g_totle_slc_erase_count, 4 ++g_totle_slc_erase_count: ++ .space 4 ++ .type g_totle_avg_erase_count, %object ++ .size g_totle_avg_erase_count, 4 ++g_totle_avg_erase_count: ++ .space 4 ++ .type g_max_erase_count, %object ++ .size g_max_erase_count, 4 ++g_max_erase_count: ++ .space 4 ++ .type g_min_erase_count, %object ++ .size g_min_erase_count, 4 ++g_min_erase_count: ++ .space 4 ++ .type c_ftl_nand_data_op_blks_per_plane, %object ++ .size c_ftl_nand_data_op_blks_per_plane, 2 ++c_ftl_nand_data_op_blks_per_plane: ++ .space 2 ++ .space 2 ++ .type gSysInfo, %object ++ .size gSysInfo, 16 ++gSysInfo: ++ .space 16 ++ .type g_gc_superblock, %object ++ .size g_gc_superblock, 48 ++g_gc_superblock: ++ .space 48 ++ .type g_sys_ext_data, %object ++ .size g_sys_ext_data, 512 ++g_sys_ext_data: ++ .space 512 ++ .type g_all_blk_used_slc_mode, %object ++ .size g_all_blk_used_slc_mode, 4 ++g_all_blk_used_slc_mode: ++ .space 4 ++ .type g_gc_free_blk_threshold, %object ++ .size g_gc_free_blk_threshold, 2 ++g_gc_free_blk_threshold: ++ .space 2 ++ .type g_gc_merge_free_blk_threshold, %object ++ .size g_gc_merge_free_blk_threshold, 2 ++g_gc_merge_free_blk_threshold: ++ .space 2 ++ .type g_gc_skip_write_count, %object ++ .size g_gc_skip_write_count, 4 ++g_gc_skip_write_count: ++ .space 4 ++ .type g_gc_blk_index, %object ++ .size g_gc_blk_index, 2 ++g_gc_blk_index: ++ .space 2 ++ .space 2 ++ .type g_in_swl_replace, %object ++ .size g_in_swl_replace, 4 ++g_in_swl_replace: ++ .space 4 ++ .type g_gc_num_req, %object ++ .size g_gc_num_req, 4 ++g_gc_num_req: ++ .space 4 ++ .type gp_gc_page_buf_info, %object ++ .size gp_gc_page_buf_info, 4 ++gp_gc_page_buf_info: ++ .space 4 ++ .type p_gc_data_buf, %object ++ .size p_gc_data_buf, 4 ++p_gc_data_buf: ++ .space 4 ++ .type p_gc_spare_buf, %object ++ .size p_gc_spare_buf, 4 ++p_gc_spare_buf: ++ .space 4 ++ .type req_gc, %object ++ .size req_gc, 4 ++req_gc: ++ .space 4 ++ .type c_gc_page_buf_num, %object ++ .size c_gc_page_buf_num, 4 ++c_gc_page_buf_num: ++ .space 4 ++ .type p_gc_blk_tbl, %object ++ .size p_gc_blk_tbl, 4 ++p_gc_blk_tbl: ++ .space 4 ++ .type g_gc_blk_num, %object ++ .size g_gc_blk_num, 2 ++g_gc_blk_num: ++ .space 2 ++ .space 2 ++ .type p_gc_page_info, %object ++ .size p_gc_page_info, 4 ++p_gc_page_info: ++ .space 4 ++ .type g_gc_page_offset, %object ++ .size g_gc_page_offset, 2 ++g_gc_page_offset: ++ .space 2 ++ .type g_gc_next_blk, %object ++ .size g_gc_next_blk, 2 ++g_gc_next_blk: ++ .space 2 ++ .type g_gc_next_blk_1, %object ++ .size g_gc_next_blk_1, 2 ++g_gc_next_blk_1: ++ .space 2 ++ .type g_gc_next_blk_2, %object ++ .size g_gc_next_blk_2, 2 ++g_gc_next_blk_2: ++ .space 2 ++ .type g_gc_next_blk_3, %object ++ .size g_gc_next_blk_3, 2 ++g_gc_next_blk_3: ++ .space 2 ++ .type g_gc_bad_block_temp_num, %object ++ .size g_gc_bad_block_temp_num, 2 ++g_gc_bad_block_temp_num: ++ .space 2 ++ .type g_gc_bad_block_temp_tbl, %object ++ .size g_gc_bad_block_temp_tbl, 34 ++g_gc_bad_block_temp_tbl: ++ .space 34 ++ .type g_gc_bad_block_gc_index, %object ++ .size g_gc_bad_block_gc_index, 2 ++g_gc_bad_block_gc_index: ++ .space 2 ++ .type mlcPageToSlcPageTbl, %object ++ .size mlcPageToSlcPageTbl, 2048 ++mlcPageToSlcPageTbl: ++ .space 2048 ++ .type gNandMaxChip, %object ++ .size gNandMaxChip, 1 ++gNandMaxChip: ++ .space 1 ++ .space 1 ++ .type gTotleBlock, %object ++ .size gTotleBlock, 2 ++gTotleBlock: ++ .space 2 ++ .type g_free_slc_blk_num, %object ++ .size g_free_slc_blk_num, 2 ++g_free_slc_blk_num: ++ .space 2 ++ .space 2 ++ .type g_SlcPartLbaEndSector, %object ++ .size g_SlcPartLbaEndSector, 4 ++g_SlcPartLbaEndSector: ++ .space 4 ++ .type g_in_gc_progress, %object ++ .size g_in_gc_progress, 4 ++g_in_gc_progress: ++ .space 4 ++ .type g_gc_head_data_block, %object ++ .size g_gc_head_data_block, 4 ++g_gc_head_data_block: ++ .space 4 ++ .type g_gc_head_data_block_count, %object ++ .size g_gc_head_data_block_count, 4 ++g_gc_head_data_block_count: ++ .space 4 ++ .type g_cur_erase_blk, %object ++ .size g_cur_erase_blk, 4 ++g_cur_erase_blk: ++ .space 4 ++ .type g_gc_refresh_block_temp_num, %object ++ .size g_gc_refresh_block_temp_num, 2 ++g_gc_refresh_block_temp_num: ++ .space 2 ++ .space 2 ++ .type c_wr_page_buf_num, %object ++ .size c_wr_page_buf_num, 4 ++c_wr_page_buf_num: ++ .space 4 ++ .type req_read, %object ++ .size req_read, 4 ++req_read: ++ .space 4 ++ .type req_gc_dst, %object ++ .size req_gc_dst, 4 ++req_gc_dst: ++ .space 4 ++ .type req_prgm, %object ++ .size req_prgm, 4 ++req_prgm: ++ .space 4 ++ .type p_sys_data_buf, %object ++ .size p_sys_data_buf, 4 ++p_sys_data_buf: ++ .space 4 ++ .type p_sys_data_buf_1, %object ++ .size p_sys_data_buf_1, 4 ++p_sys_data_buf_1: ++ .space 4 ++ .type p_vendor_data_buf, %object ++ .size p_vendor_data_buf, 4 ++p_vendor_data_buf: ++ .space 4 ++ .type p_wr_io_data_buf, %object ++ .size p_wr_io_data_buf, 4 ++p_wr_io_data_buf: ++ .space 4 ++ .type p_io_data_buf_0, %object ++ .size p_io_data_buf_0, 4 ++p_io_data_buf_0: ++ .space 4 ++ .type p_io_data_buf_1, %object ++ .size p_io_data_buf_1, 4 ++p_io_data_buf_1: ++ .space 4 ++ .type p_sys_spare_buf, %object ++ .size p_sys_spare_buf, 4 ++p_sys_spare_buf: ++ .space 4 ++ .type p_io_spare_buf, %object ++ .size p_io_spare_buf, 4 ++p_io_spare_buf: ++ .space 4 ++ .type p_wr_io_spare_buf, %object ++ .size p_wr_io_spare_buf, 4 ++p_wr_io_spare_buf: ++ .space 4 ++ .type g_ect_tbl_info_size, %object ++ .size g_ect_tbl_info_size, 2 ++g_ect_tbl_info_size: ++ .space 2 ++ .space 2 ++ .type p_swl_mul_table, %object ++ .size p_swl_mul_table, 4 ++p_swl_mul_table: ++ .space 4 ++ .type gp_ect_tbl_info, %object ++ .size gp_ect_tbl_info, 4 ++gp_ect_tbl_info: ++ .space 4 ++ .type p_valid_page_count_check_table, %object ++ .size p_valid_page_count_check_table, 4 ++p_valid_page_count_check_table: ++ .space 4 ++ .type p_map_block_table, %object ++ .size p_map_block_table, 4 ++p_map_block_table: ++ .space 4 ++ .type p_map_block_valid_page_count, %object ++ .size p_map_block_valid_page_count, 4 ++p_map_block_valid_page_count: ++ .space 4 ++ .type p_vendor_block_valid_page_count, %object ++ .size p_vendor_block_valid_page_count, 4 ++p_vendor_block_valid_page_count: ++ .space 4 ++ .type p_vendor_block_ver_table, %object ++ .size p_vendor_block_ver_table, 4 ++p_vendor_block_ver_table: ++ .space 4 ++ .type p_vendor_region_ppn_table, %object ++ .size p_vendor_region_ppn_table, 4 ++p_vendor_region_ppn_table: ++ .space 4 ++ .type p_map_region_ppn_table, %object ++ .size p_map_region_ppn_table, 4 ++p_map_region_ppn_table: ++ .space 4 ++ .type p_map_region_ppn_check_table, %object ++ .size p_map_region_ppn_check_table, 4 ++p_map_region_ppn_check_table: ++ .space 4 ++ .type p_map_block_ver_table, %object ++ .size p_map_block_ver_table, 4 ++p_map_block_ver_table: ++ .space 4 ++ .type p_l2p_map_buf, %object ++ .size p_l2p_map_buf, 4 ++p_l2p_map_buf: ++ .space 4 ++ .type c_ftl_nand_bbm_buf_size, %object ++ .size c_ftl_nand_bbm_buf_size, 2 ++c_ftl_nand_bbm_buf_size: ++ .space 2 ++ .space 2 ++ .type gL2pMapInfo, %object ++ .size gL2pMapInfo, 44 ++gL2pMapInfo: ++ .space 44 ++ .type g_totle_map_block, %object ++ .size g_totle_map_block, 2 ++g_totle_map_block: ++ .space 2 ++ .space 2 ++ .type g_req_cache, %object ++ .size g_req_cache, 4 ++g_req_cache: ++ .space 4 ++ .type g_tmp_data_superblock_id, %object ++ .size g_tmp_data_superblock_id, 2 ++g_tmp_data_superblock_id: ++ .space 2 ++ .space 2 ++ .type g_totle_swl_count, %object ++ .size g_totle_swl_count, 4 ++g_totle_swl_count: ++ .space 4 ++ .type ftl_gc_temp_power_lost_recovery_flag, %object ++ .size ftl_gc_temp_power_lost_recovery_flag, 4 ++ftl_gc_temp_power_lost_recovery_flag: ++ .space 4 ++ .type g_recovery_page_min_ver, %object ++ .size g_recovery_page_min_ver, 4 ++g_recovery_page_min_ver: ++ .space 4 ++ .type gNandIDataBuf, %object ++ .size gNandIDataBuf, 2048 ++gNandIDataBuf: ++ .space 2048 ++ .type RK29_NANDC_REG_BASE, %object ++ .size RK29_NANDC_REG_BASE, 4 ++RK29_NANDC_REG_BASE: ++ .space 4 ++ .type ftl_dma32_buffer_size, %object ++ .size ftl_dma32_buffer_size, 4 ++ftl_dma32_buffer_size: ++ .space 4 ++ .type ftl_dma32_buffer, %object ++ .size ftl_dma32_buffer, 4 ++ftl_dma32_buffer: ++ .space 4 ++ .type gFlashPageBuffer0, %object ++ .size gFlashPageBuffer0, 4 ++gFlashPageBuffer0: ++ .space 4 ++ .type FlashDdrTunningReadCount, %object ++ .size FlashDdrTunningReadCount, 4 ++FlashDdrTunningReadCount: ++ .space 4 ++ .type gpReadRetrial, %object ++ .size gpReadRetrial, 4 ++gpReadRetrial: ++ .space 4 ++ .type gpFlashSaveInfo, %object ++ .size gpFlashSaveInfo, 4 ++gpFlashSaveInfo: ++ .space 4 ++ .type gNandFlashInfoBlockAddr, %object ++ .size gNandFlashInfoBlockAddr, 4 ++gNandFlashInfoBlockAddr: ++ .space 4 ++ .type gNandFlashIdbBlockAddr, %object ++ .size gNandFlashIdbBlockAddr, 4 ++gNandFlashIdbBlockAddr: ++ .space 4 ++ .type gNandIDBResBlkNumSaveInFlash, %object ++ .size gNandIDBResBlkNumSaveInFlash, 1 ++gNandIDBResBlkNumSaveInFlash: ++ .space 1 ++ .type g_maxRetryCount, %object ++ .size g_maxRetryCount, 1 ++g_maxRetryCount: ++ .space 1 ++ .type gNandFlashIDBEccBits, %object ++ .size gNandFlashIDBEccBits, 1 ++gNandFlashIDBEccBits: ++ .space 1 ++ .space 1 ++ .type gFlashPageBuffer1, %object ++ .size gFlashPageBuffer1, 4 ++gFlashPageBuffer1: ++ .space 4 ++ .type gFlashSpareBuffer, %object ++ .size gFlashSpareBuffer, 4 ++gFlashSpareBuffer: ++ .space 4 ++ .type gFlashProgCheckBuffer, %object ++ .size gFlashProgCheckBuffer, 4 ++gFlashProgCheckBuffer: ++ .space 4 ++ .type gFlashProgCheckSpareBuffer, %object ++ .size gFlashProgCheckSpareBuffer, 4 ++gFlashProgCheckSpareBuffer: ++ .space 4 ++ .type g_nand_ecc_en, %object ++ .size g_nand_ecc_en, 1 ++g_nand_ecc_en: ++ .space 1 ++ .type gMultiPageReadEn, %object ++ .size gMultiPageReadEn, 1 ++gMultiPageReadEn: ++ .space 1 ++ .type FbbtBlk, %object ++ .size FbbtBlk, 16 ++FbbtBlk: ++ .space 16 ++ .space 2 ++ .type req_sys, %object ++ .size req_sys, 36 ++req_sys: ++ .space 36 ++ .type g_MaxLbn, %object ++ .size g_MaxLbn, 4 ++g_MaxLbn: ++ .space 4 ++ .type gVendorBlkInfo, %object ++ .size gVendorBlkInfo, 44 ++gVendorBlkInfo: ++ .space 44 ++ .type g_ect_tbl_power_up_flush, %object ++ .size g_ect_tbl_power_up_flush, 2 ++g_ect_tbl_power_up_flush: ++ .space 2 ++ .type g_power_lost_ecc_error_blk, %object ++ .size g_power_lost_ecc_error_blk, 2 ++g_power_lost_ecc_error_blk: ++ .space 2 ++ .type g_power_lost_recovery_flag, %object ++ .size g_power_lost_recovery_flag, 2 ++g_power_lost_recovery_flag: ++ .space 2 ++ .space 2 ++ .type g_recovery_page_num, %object ++ .size g_recovery_page_num, 4 ++g_recovery_page_num: ++ .space 4 ++ .type g_recovery_ppa_tbl, %object ++ .size g_recovery_ppa_tbl, 128 ++g_recovery_ppa_tbl: ++ .space 128 ++ .type gc_ink_free_return_value, %object ++ .size gc_ink_free_return_value, 2 ++gc_ink_free_return_value: ++ .space 2 ++ .type g_gc_cur_blk_valid_pages, %object ++ .size g_gc_cur_blk_valid_pages, 2 ++g_gc_cur_blk_valid_pages: ++ .space 2 ++ .type g_gc_cur_blk_max_valid_pages, %object ++ .size g_gc_cur_blk_max_valid_pages, 2 ++g_gc_cur_blk_max_valid_pages: ++ .space 2 ++ .space 2 ++ .type gp_last_act_superblock, %object ++ .size gp_last_act_superblock, 4 ++gp_last_act_superblock: ++ .space 4 ++ .type gc_discard_updated, %object ++ .size gc_discard_updated, 4 ++gc_discard_updated: ++ .space 4 ++ .type g_LowFormat, %object ++ .size g_LowFormat, 4 ++g_LowFormat: ++ .space 4 ++ .type gLoaderBootInfo, %object ++ .size gLoaderBootInfo, 4 ++gLoaderBootInfo: ++ .space 4 ++ .type RK29_NANDC1_REG_BASE, %object ++ .size RK29_NANDC1_REG_BASE, 4 ++RK29_NANDC1_REG_BASE: ++ .space 4 ++ .type g_ftl_nand_free_count, %object ++ .size g_ftl_nand_free_count, 4 ++g_ftl_nand_free_count: ++ .space 4 ++ .type last_cache_match_count, %object ++ .size last_cache_match_count, 4 ++last_cache_match_count: ++ .space 4 ++ .type idb_write_enable, %object ++ .size idb_write_enable, 1 ++idb_write_enable: ++ .space 1 ++ .space 3 ++ .type idb_buf, %object ++ .size idb_buf, 4 ++idb_buf: ++ .space 4 ++ .type idb_last_lba, %object ++ .size idb_last_lba, 4 ++idb_last_lba: ++ .space 4 ++ .type gpDrmKeyInfo, %object ++ .size gpDrmKeyInfo, 4 ++gpDrmKeyInfo: ++ .space 4 ++ .type SecureBootCheckOK, %object ++ .size SecureBootCheckOK, 4 ++SecureBootCheckOK: ++ .space 4 ++ .type SecureBootEn, %object ++ .size SecureBootEn, 4 ++SecureBootEn: ++ .space 4 ++ .type gpBootConfig, %object ++ .size gpBootConfig, 4 ++gpBootConfig: ++ .space 4 ++ .type gSnSectorData, %object ++ .size gSnSectorData, 512 ++gSnSectorData: ++ .space 512 ++ .type SecureBootUnlockTryCount, %object ++ .size SecureBootUnlockTryCount, 4 ++SecureBootUnlockTryCount: ++ .space 4 ++ .type gpVendor0Info, %object ++ .size gpVendor0Info, 4 ++gpVendor0Info: ++ .space 4 ++ .type gpVendor1Info, %object ++ .size gpVendor1Info, 4 ++gpVendor1Info: ++ .space 4 ++ .type g_idb_buffer, %object ++ .size g_idb_buffer, 4 ++g_idb_buffer: ++ .space 4 ++ .type g_vendor, %object ++ .size g_vendor, 4 ++g_vendor: ++ .space 4 ++ .type check_valid_page_count_table, %object ++ .size check_valid_page_count_table, 8192 ++check_valid_page_count_table: ++ .space 8192 ++ .type g_gc_refresh_block_temp_tbl, %object ++ .size g_gc_refresh_block_temp_tbl, 34 ++g_gc_refresh_block_temp_tbl: ++ .space 34 ++ .space 2 ++ .type gToggleModeClkDiv, %object ++ .size gToggleModeClkDiv, 4 ++gToggleModeClkDiv: ++ .space 4 ++ .type gpNandc1, %object ++ .size gpNandc1, 4 ++gpNandc1: ++ .space 4 ++ .type gNandFlashResEndPageAddr, %object ++ .size gNandFlashResEndPageAddr, 4 ++gNandFlashResEndPageAddr: ++ .space 4 ++ .type gNandFlashInfoBlockEcc, %object ++ .size gNandFlashInfoBlockEcc, 1 ++gNandFlashInfoBlockEcc: ++ .space 1 ++ .type gFlashOnfiModeEn, %object ++ .size gFlashOnfiModeEn, 1 ++gFlashOnfiModeEn: ++ .space 1 ++ .type gFlashSdrModeEn, %object ++ .size gFlashSdrModeEn, 1 ++gFlashSdrModeEn: ++ .space 1 ++ .section .rodata.str1.1,"aMS",%progbits,1 ++.LC1: ++ .ascii "FlashEraseBlocks pageAddr error %x\012\000" ++.LC2: ++ .ascii "phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\012" ++ .ascii "\000" ++.LC3: ++ .ascii "FtlFreeSysBlkQueueOut free count = %d\012\000" ++.LC4: ++ .ascii "FtlFreeSysBlkQueueOut = %x, free count = %d, error\012" ++ .ascii "\000" ++.LC5: ++ .ascii "FtlFreeSysBlkQueueOut = %x, free count = %d\012\000" ++.LC6: ++ .ascii "FLASH INFO:\012\000" ++.LC7: ++ .ascii "FLASH ID: %x\012\000" ++.LC8: ++ .ascii "Device Capacity: %d MB\012\000" ++.LC9: ++ .ascii "FMWAIT: %x %x %x %x\012\000" ++.LC10: ++ .ascii "FTL INFO:\012\000" ++.LC11: ++ .ascii "g_MaxLpn = 0x%x\012\000" ++.LC12: ++ .ascii "g_VaildLpn = 0x%x\012\000" ++.LC13: ++ .ascii "read_page_count = 0x%x\012\000" ++.LC14: ++ .ascii "discard_page_count = 0x%x\012\000" ++.LC15: ++ .ascii "write_page_count = 0x%x\012\000" ++.LC16: ++ .ascii "cache_write_count = 0x%x\012\000" ++.LC17: ++ .ascii "l2p_write_count = 0x%x\012\000" ++.LC18: ++ .ascii "gc_page_count = 0x%x\012\000" ++.LC19: ++ .ascii "totle_write = %d MB\012\000" ++.LC20: ++ .ascii "totle_read = %d MB\012\000" ++.LC21: ++ .ascii "GSV = 0x%x\012\000" ++.LC22: ++ .ascii "GDV = 0x%x\012\000" ++.LC23: ++ .ascii "bad blk num = %d %d\012\000" ++.LC24: ++ .ascii "free_superblocks = 0x%x\012\000" ++.LC25: ++ .ascii "mlc_EC = 0x%x\012\000" ++.LC26: ++ .ascii "slc_EC = 0x%x\012\000" ++.LC27: ++ .ascii "avg_EC = 0x%x\012\000" ++.LC28: ++ .ascii "sys_EC = 0x%x\012\000" ++.LC29: ++ .ascii "max_EC = 0x%x\012\000" ++.LC30: ++ .ascii "min_EC = 0x%x\012\000" ++.LC31: ++ .ascii "PLT = 0x%x\012\000" ++.LC32: ++ .ascii "POT = 0x%x\012\000" ++.LC33: ++ .ascii "MaxSector = 0x%x\012\000" ++.LC34: ++ .ascii "init_sys_blks_pp = 0x%x\012\000" ++.LC35: ++ .ascii "sys_blks_pp = 0x%x\012\000" ++.LC36: ++ .ascii "free sysblock = 0x%x\012\000" ++.LC37: ++ .ascii "data_blks_pp = 0x%x\012\000" ++.LC38: ++ .ascii "data_op_blks_pp = 0x%x\012\000" ++.LC39: ++ .ascii "max_data_blks = 0x%x\012\000" ++.LC40: ++ .ascii "Sys.id = 0x%x\012\000" ++.LC41: ++ .ascii "Bbt.id = 0x%x\012\000" ++.LC42: ++ .ascii "ACT.page = 0x%x\012\000" ++.LC43: ++ .ascii "ACT.plane = 0x%x\012\000" ++.LC44: ++ .ascii "ACT.id = 0x%x\012\000" ++.LC45: ++ .ascii "ACT.mode = 0x%x\012\000" ++.LC46: ++ .ascii "ACT.a_pages = 0x%x\012\000" ++.LC47: ++ .ascii "ACT VPC = 0x%x\012\000" ++.LC48: ++ .ascii "BUF.page = 0x%x\012\000" ++.LC49: ++ .ascii "BUF.plane = 0x%x\012\000" ++.LC50: ++ .ascii "BUF.id = 0x%x\012\000" ++.LC51: ++ .ascii "BUF.mode = 0x%x\012\000" ++.LC52: ++ .ascii "BUF.a_pages = 0x%x\012\000" ++.LC53: ++ .ascii "BUF VPC = 0x%x\012\000" ++.LC54: ++ .ascii "TMP.page = 0x%x\012\000" ++.LC55: ++ .ascii "TMP.plane = 0x%x\012\000" ++.LC56: ++ .ascii "TMP.id = 0x%x\012\000" ++.LC57: ++ .ascii "TMP.mode = 0x%x\012\000" ++.LC58: ++ .ascii "TMP.a_pages = 0x%x\012\000" ++.LC59: ++ .ascii "GC.page = 0x%x\012\000" ++.LC60: ++ .ascii "GC.plane = 0x%x\012\000" ++.LC61: ++ .ascii "GC.id = 0x%x\012\000" ++.LC62: ++ .ascii "GC.mode = 0x%x\012\000" ++.LC63: ++ .ascii "GC.a_pages = 0x%x\012\000" ++.LC64: ++ .ascii "WR_CHK = 0x%x %x %x %x\012\000" ++.LC65: ++ .ascii "Read Err = 0x%x\012\000" ++.LC66: ++ .ascii "Prog Err = 0x%x\012\000" ++.LC67: ++ .ascii "gc_free_blk_th= 0x%x\012\000" ++.LC68: ++ .ascii "gc_merge_free_blk_th= 0x%x\012\000" ++.LC69: ++ .ascii "gc_skip_write_count= 0x%x\012\000" ++.LC70: ++ .ascii "gc_blk_index= 0x%x\012\000" ++.LC71: ++ .ascii "free min EC= 0x%x\012\000" ++.LC72: ++ .ascii "free max EC= 0x%x\012\000" ++.LC73: ++ .ascii "GC__SB VPC = 0x%x\012\000" ++.LC74: ++ .ascii "%d. [0x%x]=0x%x 0x%x 0x%x\012\000" ++.LC75: ++ .ascii "free %d. [0x%x] 0x%x 0x%x\012\000" ++.LC76: ++ .ascii "FTL version: 5.0.63 20210616\000" ++.LC77: ++ .ascii "%s\012\000" ++.LC78: ++ .ascii "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x" ++ .ascii "\012\000" ++.LC79: ++ .ascii "FtlGcRefreshBlock 0x%x\012\000" ++.LC80: ++ .ascii "FtlGcMarkBadPhyBlk %d 0x%x\012\000" ++.LC81: ++ .ascii "%s error allocating memory. return -1\012\000" ++.LC82: ++ .ascii "%s %p:0x%x:\000" ++.LC83: ++ .ascii "%x \000" ++.LC84: ++ .ascii "\000" ++.LC85: ++ .ascii "otp error! %d\000" ++.LC86: ++ .ascii "rr\000" ++.LC87: ++ .ascii "%d statReg->V6.mtrans_cnt=%d flReg.V6.page_num=%d\012" ++ .ascii "\000" ++.LC88: ++ .ascii "nandc:\000" ++.LC89: ++ .ascii "%d flReg.d32=%x %x\012\000" ++.LC90: ++ .ascii "sdr read ok %x ecc=%d\012\000" ++.LC91: ++ .ascii "sync para %d\012\000" ++.LC92: ++ .ascii "TOG mode Read error %x %x\012\000" ++.LC93: ++ .ascii "read retry status %x %x %x\012\000" ++.LC94: ++ .ascii "micron RR %d row=%x,count %d,status=%d\012\000" ++.LC95: ++ .ascii "samsung RR %d row=%x,count %d,status=%d\012\000" ++.LC96: ++ .ascii "ECC:%d\012\000" ++.LC97: ++ .ascii "No.%d FLASH ID:%x %x %x %x %x %x\012\000" ++.LC98: ++ .ascii "FlashLoadPhyInfo fail %x!!\012\000" ++.LC99: ++ .ascii "Read pageadd=%x ecc=%x err=%x\012\000" ++.LC100: ++ .ascii "data:\000" ++.LC101: ++ .ascii "spare:\000" ++.LC102: ++ .ascii "ReadRetry pageadd=%x ecc=%x err=%x\012\000" ++.LC103: ++ .ascii "FLFB:%d %d\012\000" ++.LC104: ++ .ascii "prog error: = %x\012\000" ++.LC105: ++ .ascii "prog read error: = %x\012\000" ++.LC106: ++ .ascii "prog read REFRESH: = %x\012\000" ++.LC107: ++ .ascii "prog read s error: = %x %x %x\012\000" ++.LC108: ++ .ascii "prog read d error: = %x %x %x\012\000" ++.LC109: ++ .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data= %x\012" ++ .ascii "\000" ++.LC110: ++ .ascii "...%s enter...\012\000" ++.LC111: ++ .ascii "superBlkID = %x vpc=%x\012\000" ++.LC112: ++ .ascii "flashmode = %x pagenum = %x %x\012\000" ++.LC113: ++ .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC114: ++ .ascii "blk = %x vpc=%x mode = %x\012\000" ++.LC115: ++ .ascii "mlc id = %x,%x addr= %x,spare= %x %x %x %x data=%x " ++ .ascii "%x\012\000" ++.LC116: ++ .ascii "slc id = %x,%x addr= %x,spare= %x %x %x %x data=%x " ++ .ascii "%x\012\000" ++.LC117: ++ .ascii "ftl_scan_all_ppa blk %x page %x flag: %x\012\000" ++.LC118: ++ .ascii "ftl_scan_all_ppa blk %x page %x flag: %x .........." ++ .ascii "..... is bad block\012\000" ++.LC119: ++ .ascii "addr= %x, status= %d,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC120: ++ .ascii "%s finished\012\000" ++.LC121: ++ .ascii "FlashMakeFactorBbt %d\012\000" ++.LC122: ++ .ascii "bad block:%d %d\012\000" ++.LC123: ++ .ascii "FMFB:%d %d\012\000" ++.LC124: ++ .ascii "E:bad block:%d\012\000" ++.LC125: ++ .ascii "FMFB:Save %d %d\012\000" ++.LC126: ++ .ascii "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\012\000" ++.LC127: ++ .ascii "FtlBbmTblFlush error:%x\012\000" ++.LC128: ++ .ascii "FtlBbmTblFlush error = %x error count = %d\012\000" ++.LC129: ++ .ascii "FtlGcFreeBadSuperBlk 0x%x\012\000" ++.LC130: ++ .ascii "decrement_vpc_count %x = %d\012\000" ++.LC131: ++ .ascii "decrement_vpc_count %x = %d in free list\012\000" ++.LC132: ++ .ascii "FtlVpcTblFlush error = %x error count = %d\012\000" ++.LC133: ++ .ascii "page map lost: %x %x\012\000" ++.LC134: ++ .ascii "FtlMapWritePage error = %x\012\000" ++.LC135: ++ .ascii "FtlMapWritePage error = %x error count = %d\012\000" ++.LC136: ++ .ascii "FtlVendorPartRead refresh = %x phyAddr = %x\012\000" ++.LC137: ++ .ascii "no ect\000" ++.LC138: ++ .ascii "slc mode\000" ++.LC139: ++ .ascii "BBT:\000" ++.LC140: ++ .ascii "region_id = %x phyAddr = %x\012\000" ++.LC141: ++ .ascii "map_ppn:\000" ++.LC142: ++ .ascii "load_l2p_region refresh = %x phyAddr = %x\012\000" ++.LC143: ++ .ascii "FtlCheckVpc2 %x = %x %x\012\000" ++.LC144: ++ .ascii "free blk vpc error %x = %x %x\012\000" ++.LC145: ++ .ascii "error_flag %x\012\000" ++.LC146: ++ .ascii "Ftlscanalldata = %x\012\000" ++.LC147: ++ .ascii "scan lpa = %x ppa= %x\012\000" ++.LC148: ++ .ascii "lba = %x,addr= %x,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC149: ++ .ascii "RSB refresh addr %x\012\000" ++.LC150: ++ .ascii "spuer block %x vpn is 0\012 \000" ++.LC151: ++ .ascii "g_recovery_ppa %x ver %x\012 \000" ++.LC152: ++ .ascii "FtlCheckVpc %x = %x %x\012\000" ++.LC153: ++ .ascii "FtlGcScanTempBlk Error ID %x %x!!!!!!! \012\000" ++.LC154: ++ .ascii "FtlGcScanTempBlkError ID %x %x!!!!!!!\012\000" ++.LC155: ++ .ascii "GC des block %x done\012\000" ++.LC156: ++ .ascii "too many bad block = %d %d\012\000" ++.LC157: ++ .ascii "%d GC datablk = %x vpc %x %x\012\000" ++.LC158: ++ .ascii "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\012\000" ++.LC159: ++ .ascii "Ftlwrite decrement_vpc_count %x = %d\012\000" ++.LC160: ++ .ascii "rk_ftl_de_init %x\012\000" ++.LC161: ++ .ascii "...%s: no bad block mapping table, format device\012" ++ .ascii "\000" ++.LC162: ++ .ascii "...%s FtlSysBlkInit error ,format device!\012\000" ++.LC163: ++ .ascii "FtlInit %x\012\000" ++.LC164: ++ .ascii "fix power lost blk = %x vpc=%x\012\000" ++.LC165: ++ .ascii "erase power lost blk = %x vpc=%x\012\000" ++.LC166: ++ .ascii "FtlWrite: lpa error:%x %x\012\000" ++.LC167: ++ .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data = %x\012" ++ .ascii "\000" ++.LC168: ++ .ascii ":\000" ++.LC169: ++ .ascii "phyBlk = %x,addr= %x,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC170: ++ .ascii "Mblk:\000" ++.LC171: ++ .ascii "L2P:\000" ++.LC172: ++ .ascii "L2PC:\000" ++.LC173: ++ .ascii "write_idblock fix data %x %x\012\000" ++.LC174: ++ .ascii "idblk:\000" ++.LC175: ++ .ascii "idb reverse %x %x\012\000" ++.LC176: ++ .ascii "write_idblock totle_sec %x %x %x %x\012\000" ++.LC177: ++ .ascii "IDBlockWriteData %x %x\012\000" ++.LC178: ++ .ascii "IDBlockWriteData %x %x ret= %x\012\000" ++.LC179: ++ .ascii "IdBlockReadData %x %x\012\000" ++.LC180: ++ .ascii "IdBlockReadData %x %x ret= %x\012\000" ++.LC181: ++ .ascii "write and check error:%d idb=%x,offset=%x,r=%x,w=%x" ++ .ascii "\012\000" ++.LC182: ++ .ascii "write\000" ++.LC183: ++ .ascii "read\000" ++.LC184: ++ .ascii "write_idblock error %d\012\000" ++.LC185: ++ .ascii "wl_lba %p %x %x %x\012\000" ++.LC186: ++ .ascii "RKNAND_GET_DRM_KEY\012\000" ++.LC187: ++ .ascii "rk_copy_from_user error\012\000" ++.LC188: ++ .ascii "RKNAND_STORE_DRM_KEY\012\000" ++.LC189: ++ .ascii "RKNAND_DIASBLE_SECURE_BOOT\012\000" ++.LC190: ++ .ascii "RKNAND_ENASBLE_SECURE_BOOT\012\000" ++.LC191: ++ .ascii "RKNAND_GET_SN_SECTOR\012\000" ++.LC192: ++ .ascii "RKNAND_LOADER_UNLOCK\012\000" ++.LC193: ++ .ascii "RKNAND_LOADER_STATUS\012\000" ++.LC194: ++ .ascii "RKNAND_LOADER_LOCK\012\000" ++.LC195: ++ .ascii "LockKey not match %d\012\000" ++.LC196: ++ .ascii "RKNAND_GET_VENDOR_SECTOR\012\000" ++.LC197: ++ .ascii "RKNAND_STORE_VENDOR_SECTOR\012\000" ++.LC198: ++ .ascii "return ret = %lx\012\000" ++.LC199: ++ .ascii "secureBootEn check error\012\000" ++.LC200: ++ .ascii "\0013vendor storage %x,%x,%x\012\000" +diff --git a/drivers/rk_nand/rk_ftl_arm_v8.S b/drivers/rk_nand/rk_ftl_arm_v8.S +new file mode 100644 +index 00000000000..537155f1fcd +--- /dev/null ++++ b/drivers/rk_nand/rk_ftl_arm_v8.S +@@ -0,0 +1,27968 @@ ++/* ++ * 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: 2021-07-16 ++ */ ++ .file "rk_ftl_arm_v8.S" ++ .text ++ .align 2 ++ .type flash_read_ecc, %function ++flash_read_ecc: ++ stp x29, x30, [sp, -32]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x2, x1, x0 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ ldr x0, [x1, x0] ++ ldrb w19, [x2, 8] ++ add x19, x0, x19, lsl 8 ++ mov w0, 122 ++ str w0, [x19, 2056] ++ mov x0, 400 ++ bl __const_udelay ++ ldr w1, [x19, 2048] ++ ldr w0, [x19, 2048] ++ and w1, w1, 15 ++ and w0, w0, 15 ++ cmp w1, w0 ++ csel w1, w1, w0, cs ++ ldr w0, [x19, 2048] ++ ldr w2, [x19, 2048] ++ and w0, w0, 15 ++ ldr x19, [sp, 16] ++ and w2, w2, 15 ++ cmp w0, w2 ++ csel w0, w0, w2, cs ++ cmp w0, w1 ++ csel w0, w0, w1, cs ++ ldp x29, x30, [sp], 32 ++ ret ++ .size flash_read_ecc, .-flash_read_ecc ++ .align 2 ++ .type ftl_set_blk_mode.part.9, %function ++ftl_set_blk_mode.part.9: ++ and w0, w0, 65535 ++ adrp x2, .LANCHOR0+64 ++ ubfx x1, x0, 5, 11 ++ ldr x3, [x2, #:lo12:.LANCHOR0+64] ++ lsl x1, x1, 2 ++ mov w2, 1 ++ lsl w2, w2, w0 ++ ldr w0, [x3, x1] ++ orr w0, w0, w2 ++ str w0, [x3, x1] ++ ret ++ .size ftl_set_blk_mode.part.9, .-ftl_set_blk_mode.part.9 ++ .align 2 ++ .global FlashMemCmp8 ++ .type FlashMemCmp8, %function ++FlashMemCmp8: ++ adrp x3, .LANCHOR0+72 ++ ldrb w3, [x3, #:lo12:.LANCHOR0+72] ++ cbz w3, .L9 ++ ldrb w4, [x0, 1] ++ ldrb w3, [x1, 1] ++ cmp w4, w3 ++ beq .L10 ++.L9: ++ mov x3, 0 ++.L7: ++ mov w4, w3 ++ cmp w3, w2 ++ bcc .L8 ++.L10: ++ mov w0, 0 ++ ret ++.L8: ++ ldrb w5, [x0, x3] ++ add x3, x3, 1 ++ add x6, x1, x3 ++ ldrb w6, [x6, -1] ++ cmp w6, w5 ++ beq .L7 ++ add w0, w4, 1 ++ ret ++ .size FlashMemCmp8, .-FlashMemCmp8 ++ .align 2 ++ .global FlashRsvdBlkChk ++ .type FlashRsvdBlkChk, %function ++FlashRsvdBlkChk: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ and w0, w0, 255 ++ ldrb w3, [x2, 73] ++ ldr w2, [x2, 76] ++ mul w2, w3, w2 ++ cmp w2, w1 ++ bls .L14 ++ cmp w0, 0 ++ cset w0, ne ++ ret ++.L14: ++ mov w0, 1 ++ ret ++ .size FlashRsvdBlkChk, .-FlashRsvdBlkChk ++ .align 2 ++ .global FlashGetRandomizer ++ .type FlashGetRandomizer, %function ++FlashGetRandomizer: ++ and x3, x1, 127 ++ adrp x2, .LANCHOR1 ++ add x2, x2, :lo12:.LANCHOR1 ++ ldrh w4, [x2, x3, lsl 1] ++ adrp x2, .LANCHOR0+80 ++ ldrb w2, [x2, #:lo12:.LANCHOR0+80] ++ cbz w2, .L23 ++ stp x29, x30, [sp, -16]! ++ and w0, w0, 255 ++ add x29, sp, 0 ++ bl FlashRsvdBlkChk ++ cmp w0, 0 ++ orr w1, w4, -1073741824 ++ csel w4, w1, w4, ne ++ mov w0, w4 ++ ldp x29, x30, [sp], 16 ++ ret ++.L23: ++ mov w0, w4 ++ ret ++ .size FlashGetRandomizer, .-FlashGetRandomizer ++ .align 2 ++ .global FlashSetRandomizer ++ .type FlashSetRandomizer, %function ++FlashSetRandomizer: ++ and x2, x1, 127 ++ and w6, w0, 255 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ ldrh w5, [x0, x2, lsl 1] ++ adrp x0, .LANCHOR0 ++ add x2, x0, :lo12:.LANCHOR0 ++ mov x4, x0 ++ ldrb w2, [x2, 80] ++ cbz w2, .L34 ++ stp x29, x30, [sp, -16]! ++ mov w0, w6 ++ add x29, sp, 0 ++ bl FlashRsvdBlkChk ++ cmp w0, 0 ++ sbfiz x6, x6, 4, 32 ++ add x0, x4, :lo12:.LANCHOR0 ++ orr w1, w5, -1073741824 ++ csel w5, w1, w5, ne ++ ldr x0, [x0, x6] ++ str w5, [x0, 336] ++ ldp x29, x30, [sp], 16 ++ ret ++.L34: ++ add x0, x0, :lo12:.LANCHOR0 ++ sbfiz x6, x6, 4, 32 ++ ldr x0, [x0, x6] ++ str w5, [x0, 336] ++ ret ++ .size FlashSetRandomizer, .-FlashSetRandomizer ++ .align 2 ++ .global FlashBlockAlignInit ++ .type FlashBlockAlignInit, %function ++FlashBlockAlignInit: ++ and w0, w0, 65535 ++ adrp x1, .LANCHOR0 ++ cmp w0, 512 ++ add x1, x1, :lo12:.LANCHOR0 ++ bls .L38 ++ mov w0, 1024 ++.L42: ++ str w0, [x1, 76] ++ ret ++.L38: ++ cmp w0, 256 ++ bls .L40 ++ mov w0, 512 ++ b .L42 ++.L40: ++ cmp w0, 128 ++ bls .L42 ++ mov w0, 256 ++ b .L42 ++ .size FlashBlockAlignInit, .-FlashBlockAlignInit ++ .align 2 ++ .global FlashReadCmd ++ .type FlashReadCmd, %function ++FlashReadCmd: ++ and w0, w0, 255 ++ adrp x3, .LANCHOR0 ++ sbfiz x2, x0, 4, 32 ++ add x3, x3, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ add x4, x3, x2 ++ add x29, sp, 0 ++ ldr x2, [x3, x2] ++ ldr x3, [x3, 88] ++ ldrb w4, [x4, 8] ++ ldrb w3, [x3, 7] ++ cmp w3, 1 ++ bne .L44 ++ sxtw x3, w4 ++ mov w5, 38 ++ add x3, x3, 8 ++ add x3, x2, x3, lsl 8 ++ str w5, [x3, 8] ++.L44: ++ ubfiz x4, x4, 8, 8 ++ and w3, w1, 255 ++ add x2, x2, x4 ++ str wzr, [x2, 2056] ++ str wzr, [x2, 2052] ++ str wzr, [x2, 2052] ++ str w3, [x2, 2052] ++ lsr w3, w1, 8 ++ str w3, [x2, 2052] ++ lsr w3, w1, 16 ++ str w3, [x2, 2052] ++ mov w3, 48 ++ str w3, [x2, 2056] ++ bl FlashSetRandomizer ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FlashReadCmd, .-FlashReadCmd ++ .align 2 ++ .global FlashReadDpDataOutCmd ++ .type FlashReadDpDataOutCmd, %function ++FlashReadDpDataOutCmd: ++ and w0, w0, 255 ++ adrp x3, .LANCHOR0 ++ sbfiz x2, x0, 4, 32 ++ add x3, x3, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ add x4, x3, x2 ++ and w5, w1, 255 ++ add x29, sp, 0 ++ ldr x6, [x3, x2] ++ ldrb w2, [x3, 112] ++ lsr w3, w1, 16 ++ cmp w2, 1 ++ ldrb w2, [x4, 8] ++ lsr w4, w1, 8 ++ add x2, x6, x2, lsl 8 ++ bne .L47 ++ 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] ++.L50: ++ mov w3, 224 ++ str w3, [x2, 2056] ++ bl FlashSetRandomizer ++ ldp x29, x30, [sp], 16 ++ ret ++.L47: ++ 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] ++ b .L50 ++ .size FlashReadDpDataOutCmd, .-FlashReadDpDataOutCmd ++ .align 2 ++ .global FlashProgFirstCmd ++ .type FlashProgFirstCmd, %function ++FlashProgFirstCmd: ++ and w0, w0, 255 ++ adrp x4, .LANCHOR0 ++ sbfiz x5, x0, 4, 32 ++ add x4, x4, :lo12:.LANCHOR0 ++ add x2, x4, x5 ++ stp x29, x30, [sp, -16]! ++ lsr w3, w1, 16 ++ add x29, sp, 0 ++ ldr x4, [x4, x5] ++ ldrb w2, [x2, 8] ++ add x2, x4, x2, lsl 8 ++ mov w4, 128 ++ str w4, [x2, 2056] ++ and w4, w1, 255 ++ 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 FlashProgFirstCmd, .-FlashProgFirstCmd ++ .align 2 ++ .global FlashEraseCmd ++ .type FlashEraseCmd, %function ++FlashEraseCmd: ++ ubfiz x0, x0, 4, 8 ++ adrp x3, .LANCHOR0 ++ add x3, x3, :lo12:.LANCHOR0 ++ add x5, x3, x0 ++ ldr x4, [x3, x0] ++ ldrb w0, [x5, 8] ++ cbz w2, .L54 ++ 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, 76] ++ add w1, w1, w2 ++.L54: ++ 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: ++ and w0, w0, 255 ++ adrp x4, .LANCHOR0 ++ sbfiz x5, x0, 4, 32 ++ add x4, x4, :lo12:.LANCHOR0 ++ add x2, x4, x5 ++ stp x29, x30, [sp, -16]! ++ lsr w3, w1, 16 ++ add x29, sp, 0 ++ ldrb w6, [x4, 107] ++ ldrb w2, [x2, 8] ++ ldr x4, [x4, x5] ++ 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: ++ stp x29, x30, [sp, -32]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ add x2, x1, x0 ++ stp x19, x20, [sp, 16] ++ ldr x20, [x1, x0] ++ mov x0, 36284 ++ ldrb w19, [x2, 8] ++ movk x0, 0x6, lsl 16 ++ bl __const_udelay ++ add x19, x19, 8 ++ mov w0, 16 ++ add x19, x20, x19, lsl 8 ++ str w0, [x19, 8] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashProgSecondCmd, .-FlashProgSecondCmd ++ .align 2 ++ .global FlashProgDpFirstCmd ++ .type FlashProgDpFirstCmd, %function ++FlashProgDpFirstCmd: ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x3, x1, x0 ++ ldr x2, [x1, x0] ++ ldrb w0, [x3, 8] ++ ldrb w1, [x1, 106] ++ add x0, x0, 8 ++ add x0, x2, x0, lsl 8 ++ str w1, [x0, 8] ++ ret ++ .size FlashProgDpFirstCmd, .-FlashProgDpFirstCmd ++ .align 2 ++ .global FlashReadStatus ++ .type FlashReadStatus, %function ++FlashReadStatus: ++ stp x29, x30, [sp, -32]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ add x2, x1, x0 ++ str x19, [sp, 16] ++ ldr x0, [x1, x0] ++ ldrb w19, [x2, 8] ++ add x19, x0, x19, lsl 8 ++ mov w0, 112 ++ str w0, [x19, 2056] ++ mov x0, 400 ++ bl __const_udelay ++ ldr w0, [x19, 2048] ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashReadStatus, .-FlashReadStatus ++ .align 2 ++ .global js_hash ++ .type js_hash, %function ++js_hash: ++ mov x4, x0 ++ mov w0, 42982 ++ mov x3, 0 ++ movk w0, 0x47c6, lsl 16 ++.L66: ++ cmp w1, w3 ++ bhi .L67 ++ ret ++.L67: ++ lsr w2, w0, 2 ++ ldrb w5, [x4, x3] ++ add w2, w2, w0, lsl 5 ++ add x3, x3, 1 ++ add w2, w2, w5 ++ eor w0, w0, w2 ++ b .L66 ++ .size js_hash, .-js_hash ++ .align 2 ++ .global FlashLoadIdbInfo ++ .type FlashLoadIdbInfo, %function ++FlashLoadIdbInfo: ++ mov w0, 0 ++ ret ++ .size FlashLoadIdbInfo, .-FlashLoadIdbInfo ++ .align 2 ++ .global FlashPrintInfo ++ .type FlashPrintInfo, %function ++FlashPrintInfo: ++ ret ++ .size FlashPrintInfo, .-FlashPrintInfo ++ .align 2 ++ .global ToshibaSetRRPara ++ .type ToshibaSetRRPara, %function ++ToshibaSetRRPara: ++ stp x29, x30, [sp, -80]! ++ and w1, w1, 255 ++ add w2, w1, 1 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov x21, x0 ++ mov w0, 5 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ adrp x22, .LANCHOR0 ++ umull x2, w2, w0 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ stp x19, x20, [sp, 16] ++ add x25, x0, 256 ++ add x24, x0, 352 ++ add x25, x25, x2 ++ add x24, x24, x2 ++ add x22, x22, :lo12:.LANCHOR0 ++ mov x19, x0 ++ add x23, x0, w1, sxtw ++ mov x20, 0 ++ mov w26, 85 ++.L71: ++ ldrb w0, [x22, 129] ++ cmp w0, w20 ++ bhi .L75 ++ 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 ++.L75: ++ add x0, x19, 352 ++ str w26, [x21, 8] ++ ldrsb w0, [x20, x0] ++ str w0, [x21, 4] ++ mov x0, 1000 ++ bl __const_udelay ++ ldrb w0, [x22, 128] ++ cmp w0, 34 ++ bne .L72 ++ ldrsb w0, [x24, x20] ++.L77: ++ add x20, x20, 1 ++ str w0, [x21] ++ b .L71 ++.L72: ++ cmp w0, 35 ++ bne .L74 ++ ldrsb w0, [x25, x20] ++ b .L77 ++.L74: ++ ldrsb w0, [x23, 400] ++ b .L77 ++ .size ToshibaSetRRPara, .-ToshibaSetRRPara ++ .align 2 ++ .global SamsungSetRRPara ++ .type SamsungSetRRPara, %function ++SamsungSetRRPara: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov x22, x0 ++ ubfiz x21, x1, 2, 8 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ add x21, x21, 4 ++ add x0, x0, 408 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ add x21, x0, x21 ++ adrp x23, .LANCHOR0 ++ mov x19, x0 ++ add x23, x23, :lo12:.LANCHOR0 ++ mov x20, 0 ++ mov w24, 161 ++.L79: ++ ldrb w0, [x23, 129] ++ cmp w0, w20 ++ bhi .L80 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L80: ++ str w24, [x22, 8] ++ str wzr, [x22] ++ ldrsb w0, [x20, x19] ++ str w0, [x22] ++ ldrsb w0, [x21, x20] ++ add x20, x20, 1 ++ str w0, [x22] ++ mov x0, 1500 ++ bl __const_udelay ++ b .L79 ++ .size SamsungSetRRPara, .-SamsungSetRRPara ++ .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, 136] ++ ldr w2, [x1] ++ str w2, [x0, 144] ++ ldr w2, [x1, 4] ++ str w2, [x0, 148] ++ ldr w2, [x1, 8] ++ str w2, [x0, 152] ++ ldr w2, [x1, 12] ++ str w2, [x0, 156] ++ ldr w2, [x1, 304] ++ str w2, [x0, 160] ++ ldr w2, [x1, 308] ++ str w2, [x0, 164] ++ ldr w2, [x1, 336] ++ ldr w1, [x1, 344] ++ stp w2, w1, [x0, 168] ++ ret ++ .size ftl_flash_suspend, .-ftl_flash_suspend ++ .align 2 ++ .global LogAddr2PhyAddr ++ .type LogAddr2PhyAddr, %function ++LogAddr2PhyAddr: ++ adrp x6, .LANCHOR0 ++ add x7, x6, :lo12:.LANCHOR0 ++ and w4, w4, 255 ++ ldrh w9, [x7, 188] ++ ldrh w5, [x7, 190] ++ ldrh w8, [x7, 76] ++ ldrb w7, [x7, 72] ++ cmp w7, 1 ++ ldr w7, [x0, 4] ++ mul w5, w5, w9 ++ ubfx x11, x7, 10, 16 ++ and w9, w5, 65535 ++ ubfiz w5, w8, 1, 15 ++ and w7, w7, 1023 ++ csel w8, w5, w8, eq ++ cmp w1, 1 ++ udiv w5, w11, w9 ++ and w10, w5, 65535 ++ msub w5, w5, w9, w11 ++ and w5, w5, 65535 ++ bne .L85 ++ add x1, x6, :lo12:.LANCHOR0 ++ ldrb w9, [x1, 204] ++ cbnz w9, .L85 ++ add x1, x1, 208 ++ ldrh w7, [x1, w7, sxtw 1] ++.L85: ++ add x6, x6, :lo12:.LANCHOR0 ++ uxtw x1, w10 ++ add x6, x6, 1232 ++ cmp w4, 1 ++ ldr w1, [x6, x1, lsl 2] ++ madd w5, w5, w8, w1 ++ add w5, w5, w7 ++ str w5, [x2] ++ str w10, [x3] ++ bls .L87 ++ ldr w1, [x0, 4] ++ ldr w0, [x0, 60] ++ add w1, w1, 1024 ++ cmp w1, w0 ++ cset w0, eq ++ ret ++.L87: ++ mov w0, 0 ++ ret ++ .size LogAddr2PhyAddr, .-LogAddr2PhyAddr ++ .align 2 ++ .global FlashReadStatusEN ++ .type FlashReadStatusEN, %function ++FlashReadStatusEN: ++ stp x29, x30, [sp, -32]! ++ ubfiz x0, x0, 4, 8 ++ adrp x4, .LANCHOR0 ++ add x3, x4, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ add x5, x3, x0 ++ ldr x20, [x3, x0] ++ ldr x0, [x3, 88] ++ ldrb w19, [x5, 8] ++ ldrb w0, [x0, 8] ++ cmp w0, 2 ++ bne .L89 ++ and w2, w2, 255 ++ add x3, x3, 96 ++ cbnz w2, .L90 ++ ldrb w2, [x3, 13] ++.L100: ++ add x0, x19, 8 ++ add x4, x4, :lo12:.LANCHOR0 ++ add x0, x20, x0, lsl 8 ++ str w2, [x0, 8] ++ ldrb w4, [x4, 111] ++ cbz w4, .L94 ++ add x3, x19, 8 ++ mov w2, 0 ++ add x3, x20, x3, lsl 8 ++.L93: ++ cmp w2, w4 ++ bcc .L95 ++.L94: ++ add x19, x19, 8 ++ mov x0, 400 ++ lsl x19, x19, 8 ++ bl __const_udelay ++ ldr w0, [x20, x19] ++ ldp x19, x20, [sp, 16] ++ and w0, w0, 255 ++ ldp x29, x30, [sp], 32 ++ ret ++.L90: ++ ldrb w2, [x3, 14] ++ b .L100 ++.L95: ++ lsl w0, w2, 3 ++ add w2, w2, 1 ++ lsr w0, w1, w0 ++ and w0, w0, 255 ++ str w0, [x3, 4] ++ b .L93 ++.L89: ++ add x0, x19, 8 ++ mov w1, 112 ++ add x0, x20, x0, lsl 8 ++ str w1, [x0, 8] ++ b .L94 ++ .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] ++ and w19, w0, 255 ++ str x21, [sp, 32] ++ mov w20, w1 ++ and w21, w2, 255 ++.L102: ++ mov w1, w20 ++ mov w2, w21 ++ mov w0, w19 ++ bl FlashReadStatusEN ++ mov w1, w0 ++ cmp w0, 255 ++ beq .L102 ++ tbnz x1, 6, .L101 ++ mov x1, 3 ++ mov x0, 1 ++ bl usleep_range ++ b .L102 ++.L101: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FlashWaitReadyEN, .-FlashWaitReadyEN ++ .align 2 ++ .global FlashScheduleEnSet ++ .type FlashScheduleEnSet, %function ++FlashScheduleEnSet: ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ ldr w2, [x1, 1264] ++ str w0, [x1, 1264] ++ mov w0, w2 ++ ret ++ .size FlashScheduleEnSet, .-FlashScheduleEnSet ++ .align 2 ++ .global FlashGetPageSize ++ .type FlashGetPageSize, %function ++FlashGetPageSize: ++ adrp x0, .LANCHOR0+88 ++ ldr x0, [x0, #:lo12:.LANCHOR0+88] ++ 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: ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ 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+136 ++ and w0, w0, 255 ++ lsl w2, w0, 8 ++ ldr x1, [x1, #:lo12:.LANCHOR0+136] ++ orr w0, w2, w0, lsl 16 ++ orr w0, w0, 1 ++ str w0, [x1, 304] ++ ret ++ .size NandcSetDdrPara, .-NandcSetDdrPara ++ .align 2 ++ .global NandcSetDdrDiv ++ .type NandcSetDdrDiv, %function ++NandcSetDdrDiv: ++ adrp x1, .LANCHOR0+136 ++ and w0, w0, 255 ++ mov w2, 16640 ++ orr w0, w0, w2 ++ ldr x1, [x1, #:lo12:.LANCHOR0+136] ++ str w0, [x1, 344] ++ ret ++ .size NandcSetDdrDiv, .-NandcSetDdrDiv ++ .align 2 ++ .global NandcSetDdrMode ++ .type NandcSetDdrMode, %function ++NandcSetDdrMode: ++ adrp x1, .LANCHOR0+136 ++ cmp w0, 0 ++ ldr x2, [x1, #:lo12:.LANCHOR0+136] ++ 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+136 ++ and w0, w0, 255 ++ tst w0, 6 ++ ldr x2, [x1, #:lo12:.LANCHOR0+136] ++ ldr w1, [x2] ++ beq .L118 ++ orr w1, w1, 24576 ++ tst x0, 4 ++ and w1, w1, -32769 ++ mov w0, 8322 ++ orr w1, w1, 196608 ++ str w0, [x2, 344] ++ mov w0, 4099 ++ orr w3, w1, 32768 ++ movk w0, 0x10, lsl 16 ++ str w0, [x2, 304] ++ csel w1, w3, w1, ne ++ mov w0, 38 ++ str w0, [x2, 308] ++ mov w0, 39 ++ str w0, [x2, 308] ++.L120: ++ mov w0, 0 ++ str w1, [x2] ++ ret ++.L118: ++ and w1, w1, -8193 ++ b .L120 ++ .size NandcSetMode, .-NandcSetMode ++ .align 2 ++ .global NandcFlashCs ++ .type NandcFlashCs, %function ++NandcFlashCs: ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ 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: ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ 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 HynixSetRRPara ++ .type HynixSetRRPara, %function ++HynixSetRRPara: ++ stp x29, x30, [sp, -96]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ and w23, w0, 255 ++ add x0, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ str x27, [sp, 80] ++ and w27, w1, 255 ++ stp x25, x26, [sp, 64] ++ mov x21, x2 ++ and w22, w3, 255 ++ ldr x1, [x0, 88] ++ ldrb w1, [x1, 19] ++ cmp w1, 6 ++ bne .L126 ++ ubfiz x19, x23, 6, 8 ++ add x0, x0, 1272 ++ add x19, x19, 20 ++ add x19, x19, w22, uxtw 2 ++.L133: ++ add x19, x0, x19 ++.L127: ++ sxtw x26, w23 ++ add x0, x20, :lo12:.LANCHOR0 ++ lsl x1, x26, 4 ++ and x27, x27, 255 ++ add x2, x0, x1 ++ mov x25, 0 ++ ldr x24, [x0, x1] ++ mov w0, w23 ++ ldrb w5, [x2, 8] ++ bl NandcFlashCs ++ ubfiz x5, x5, 8, 8 ++ add x24, x24, x5 ++ mov w0, 54 ++ str w0, [x24, 2056] ++.L130: ++ cmp x25, x27 ++ bne .L131 ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w0, 22 ++ add x20, x20, x26 ++ str w0, [x24, 2056] ++ mov w0, w23 ++ bl NandcFlashDeCs ++ strb w22, [x20, 2128] ++ 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 ++.L126: ++ cmp w1, 7 ++ bne .L128 ++ mov w19, 160 ++ mov x1, 28 ++ add x0, x0, 1272 ++ umaddl x1, w19, w23, x1 ++ mov w19, 10 ++ umaddl x19, w22, w19, x1 ++ b .L133 ++.L128: ++ cmp w1, 8 ++ bne .L129 ++ add x0, x0, 1300 ++ add w19, w22, w22, lsl 2 ++ add x19, x0, w19, sxtw ++ b .L127 ++.L129: ++ and x19, x22, 255 ++ add x19, x19, 2 ++ add x19, x19, w23, uxtw 3 ++ add x19, x0, x19, lsl 3 ++ add x19, x19, 1276 ++ b .L127 ++.L131: ++ ldrb w0, [x21, x25] ++ str w0, [x24, 2052] ++ mov x0, 1000 ++ bl __const_udelay ++ ldrsb w0, [x19, x25] ++ add x25, x25, 1 ++ str w0, [x24, 2048] ++ b .L130 ++ .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 ++ add x19, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ ldr x0, [x19, 88] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 7 ++ bhi .L134 ++ add x21, x19, 2132 ++ add x22, x19, 1276 ++ mov x20, 0 ++.L137: ++ lsl x1, x20, 3 ++ and w0, w20, 255 ++ ldrb w1, [x1, x21] ++ cmp w1, 173 ++ bne .L136 ++ ldrb w1, [x19, 1273] ++ mov w3, 0 ++ mov x2, x22 ++ bl HynixSetRRPara ++.L136: ++ add x20, x20, 1 ++ cmp x20, 4 ++ bne .L137 ++.L134: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FlashSetReadRetryDefault, .-FlashSetReadRetryDefault ++ .align 2 ++ .global FlashWaitCmdDone ++ .type FlashWaitCmdDone, %function ++FlashWaitCmdDone: ++ and x5, x0, 255 ++ mov x0, 24 ++ stp x29, x30, [sp, -32]! ++ adrp x4, .LANCHOR0 ++ add x4, x4, :lo12:.LANCHOR0 ++ mul x0, x5, x0 ++ add x29, sp, 0 ++ add x1, x4, 2164 ++ stp x19, x20, [sp, 16] ++ add x19, x1, x0 ++ ldr x2, [x19, 8] ++ cbz x2, .L143 ++ ldrb w20, [x1, x0] ++ mov w0, w20 ++ bl NandcFlashCs ++ add x4, x4, 1232 ++ ldr w1, [x19, 4] ++ ldr w0, [x4, x5, lsl 2] ++ cmp w0, 0 ++ mov w0, w20 ++ cset w2, ne ++ bl FlashWaitReadyEN ++ mov w2, w0 ++ mov w0, w20 ++ bl NandcFlashDeCs ++ sbfx x0, x2, 0, 1 ++ ldr x1, [x19, 8] ++ str w0, [x1] ++ str xzr, [x19, 8] ++ ldr x1, [x19, 16] ++ cbz x1, .L143 ++ str w0, [x1] ++ str xzr, [x19, 16] ++.L143: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashWaitCmdDone, .-FlashWaitCmdDone ++ .align 2 ++ .global NandcDelayns ++ .type NandcDelayns, %function ++NandcDelayns: ++ stp x29, x30, [sp, -16]! ++ uxtw x0, w0 ++ add x29, sp, 0 ++ bl __ndelay ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size NandcDelayns, .-NandcDelayns ++ .align 2 ++ .global NandcWaitFlashReadyNoDelay ++ .type NandcWaitFlashReadyNoDelay, %function ++NandcWaitFlashReadyNoDelay: ++ stp x29, x30, [sp, -48]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, 34464 ++ movk w19, 0x1, lsl 16 ++ ldr x20, [x1, x0] ++.L153: ++ ldr w0, [x20] ++ str w0, [x29, 40] ++ ldr w0, [x29, 40] ++ tbnz x0, 9, .L154 ++ mov x0, 50 ++ bl __const_udelay ++ subs w19, w19, #1 ++ bne .L153 ++ mov w0, -1 ++.L151: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L154: ++ mov w0, 0 ++ b .L151 ++ .size NandcWaitFlashReadyNoDelay, .-NandcWaitFlashReadyNoDelay ++ .align 2 ++ .global NandcWaitFlashReady ++ .type NandcWaitFlashReady, %function ++NandcWaitFlashReady: ++ stp x29, x30, [sp, -48]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, 34464 ++ movk w19, 0x1, lsl 16 ++ ldr x20, [x1, x0] ++ mov x0, 650 ++ bl __const_udelay ++.L159: ++ ldr w0, [x20] ++ str w0, [x29, 40] ++ ldr w0, [x29, 40] ++ tbnz x0, 9, .L160 ++ mov x1, 2 ++ mov x0, 1 ++ bl usleep_range ++ subs w19, w19, #1 ++ bne .L159 ++ mov w0, -1 ++.L157: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L160: ++ mov w0, 0 ++ b .L157 ++ .size NandcWaitFlashReady, .-NandcWaitFlashReady ++ .align 2 ++ .global FlashReset ++ .type FlashReset, %function ++FlashReset: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ and w19, w0, 255 ++ sbfiz x1, x19, 4, 32 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ add x2, x0, x1 ++ ldr x5, [x0, x1] ++ mov w0, w19 ++ ldrb w4, [x2, 8] ++ bl NandcFlashCs ++ add x4, x4, 8 ++ add x4, x5, x4, lsl 8 ++ mov w0, 255 ++ str w0, [x4, 8] ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashDeCs ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashReset, .-FlashReset ++ .align 2 ++ .global flash_enter_slc_mode ++ .type flash_enter_slc_mode, %function ++flash_enter_slc_mode: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x4, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ str x23, [sp, 48] ++ and w22, w0, 255 ++ ldrb w0, [x4, 204] ++ cbz w0, .L165 ++ mov w0, w22 ++ bl NandcFlashCs ++ sxtw x0, w22 ++ lsl x1, x0, 4 ++ add x0, x4, x0, lsl 3 ++ add x2, x4, x1 ++ ldrb w0, [x0, 2132] ++ ldr x23, [x4, x1] ++ ldrb w19, [x2, 8] ++ cmp w0, 44 ++ bne .L167 ++ ubfiz x20, x19, 8, 8 ++ mov w0, 239 ++ add x20, x23, x20 ++ str w0, [x20, 2056] ++ mov w0, 145 ++ str w0, [x20, 2052] ++ mov x0, 250 ++ bl __const_udelay ++ str wzr, [x20, 2048] ++ mov w0, 1 ++ str w0, [x20, 2048] ++ str wzr, [x20, 2048] ++ mov x0, 500 ++ str wzr, [x20, 2048] ++ bl __const_udelay ++.L167: ++ add x19, x19, 8 ++ mov w0, w22 ++ add x19, x23, x19, lsl 8 ++ bl NandcWaitFlashReadyNoDelay ++ mov w0, 218 ++ add x21, x21, :lo12:.LANCHOR0 ++ str w0, [x19, 8] ++ mov w0, w22 ++ bl NandcWaitFlashReady ++ mov w0, 2 ++ strb w0, [x21, 2356] ++.L165: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ 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: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x4, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ str x23, [sp, 48] ++ and w22, w0, 255 ++ ldrb w0, [x4, 204] ++ cbz w0, .L172 ++ mov w0, w22 ++ bl NandcFlashCs ++ sxtw x0, w22 ++ lsl x1, x0, 4 ++ add x0, x4, x0, lsl 3 ++ add x2, x4, x1 ++ ldrb w0, [x0, 2132] ++ ldr x23, [x4, x1] ++ ldrb w19, [x2, 8] ++ cmp w0, 44 ++ bne .L174 ++ ubfiz x20, x19, 8, 8 ++ mov w0, 239 ++ add x20, x23, x20 ++ str w0, [x20, 2056] ++ mov w0, 145 ++ str w0, [x20, 2052] ++ mov x0, 250 ++ bl __const_udelay ++ mov w0, 2 ++ str w0, [x20, 2048] ++ mov w0, 1 ++ str w0, [x20, 2048] ++ str wzr, [x20, 2048] ++ mov x0, 500 ++ str wzr, [x20, 2048] ++ bl __const_udelay ++.L174: ++ add x19, x19, 8 ++ mov w0, w22 ++ add x19, x23, x19, lsl 8 ++ bl NandcWaitFlashReadyNoDelay ++ add x21, x21, :lo12:.LANCHOR0 ++ mov w0, 223 ++ str w0, [x19, 8] ++ mov w0, w22 ++ bl NandcWaitFlashReady ++ strb wzr, [x21, 2356] ++.L172: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size flash_exit_slc_mode, .-flash_exit_slc_mode ++ .align 2 ++ .global FlashEraseBlock ++ .type FlashEraseBlock, %function ++FlashEraseBlock: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 255 ++ mov w20, w1 ++ str x21, [sp, 32] ++ mov w0, w19 ++ mov w21, w2 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashCs ++ mov w2, w21 ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashEraseCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashReadStatus ++ mov w2, w0 ++ mov w0, w19 ++ bl NandcFlashDeCs ++ and w0, w2, 1 ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FlashEraseBlock, .-FlashEraseBlock ++ .align 2 ++ .global FlashSetInterfaceMode ++ .type FlashSetInterfaceMode, %function ++FlashSetInterfaceMode: ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ add x6, x1, 8 ++ add x3, x1, 2132 ++ mov x5, 0 ++ add x29, sp, 0 ++ ldrb w2, [x1, 2357] ++ mov w12, 69 ++ mov w8, 239 ++ mov w9, 128 ++ and w11, w2, 4 ++ and w7, w2, 1 ++ mov w10, 1 ++ mov w13, 35 ++ mov w14, 32 ++ mov w15, 5 ++ mov w16, 44 ++.L191: ++ ldrb w2, [x5, x3] ++ ldrb w4, [x6] ++ cmp w2, 152 ++ ccmp w2, w12, 4, ne ++ beq .L182 ++ cmp w2, 173 ++ ccmp w2, w16, 4, ne ++ bne .L183 ++.L182: ++ cmp w0, 1 ++ ldr x1, [x6, -8] ++ bne .L184 ++ cbz w7, .L183 ++ ubfiz x4, x4, 8, 8 ++ cmp w2, 173 ++ add x1, x1, x4 ++ str w8, [x1, 2056] ++ bne .L185 ++ str w0, [x1, 2052] ++.L203: ++ str wzr, [x1, 2048] ++ b .L189 ++.L185: ++ cmp w2, 44 ++ bne .L187 ++ str w0, [x1, 2052] ++ str w15, [x1, 2048] ++.L189: ++ str wzr, [x1, 2048] ++ str wzr, [x1, 2048] ++ str wzr, [x1, 2048] ++.L183: ++ add x5, x5, 8 ++ add x6, x6, 16 ++ cmp x5, 32 ++ bne .L191 ++ mov w0, 0 ++ bl NandcWaitFlashReady ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L187: ++ str w9, [x1, 2052] ++ str w0, [x1, 2048] ++ b .L189 ++.L184: ++ cbz w11, .L183 ++ ubfiz x4, x4, 8, 8 ++ cmp w2, 173 ++ add x1, x1, x4 ++ str w8, [x1, 2056] ++ bne .L188 ++ str w10, [x1, 2052] ++ str w14, [x1, 2048] ++ b .L189 ++.L188: ++ cmp w2, 44 ++ bne .L190 ++ str w10, [x1, 2052] ++ str w13, [x1, 2048] ++ b .L189 ++.L190: ++ str w9, [x1, 2052] ++ b .L203 ++ .size FlashSetInterfaceMode, .-FlashSetInterfaceMode ++ .align 2 ++ .global FlashReadSpare ++ .type FlashReadSpare, %function ++FlashReadSpare: ++ stp x29, x30, [sp, -32]! ++ and w0, w0, 255 ++ sbfiz x5, x0, 4, 32 ++ adrp x4, .LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x2 ++ adrp x2, .LANCHOR1+481 ++ add x4, x4, :lo12:.LANCHOR0 ++ ldrb w3, [x2, #:lo12:.LANCHOR1+481] ++ add x2, x4, x5 ++ ldrb w19, [x2, 8] ++ lsl w3, w3, 9 ++ ldr x2, [x4, x5] ++ add x19, x2, x19, lsl 8 ++ and w2, w1, 255 ++ str wzr, [x19, 2056] ++ str w3, [x19, 2052] ++ lsr w3, w3, 8 ++ str w3, [x19, 2052] ++ str w2, [x19, 2052] ++ lsr w2, w1, 8 ++ str w2, [x19, 2052] ++ lsr w1, w1, 16 ++ str w1, [x19, 2052] ++ mov w1, 48 ++ str w1, [x19, 2056] ++ bl NandcWaitFlashReady ++ ldr w0, [x19, 2048] ++ strb w0, [x20] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashReadSpare, .-FlashReadSpare ++ .align 2 ++ .global SandiskProgTestBadBlock ++ .type SandiskProgTestBadBlock, %function ++SandiskProgTestBadBlock: ++ stp x29, x30, [sp, -32]! ++ and w0, w0, 255 ++ sbfiz x3, x0, 4, 32 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ add x4, x2, x3 ++ str x19, [sp, 16] ++ ldr x2, [x2, x3] ++ ldrb w19, [x4, 8] ++ add x19, x2, x19, 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 x0, 400 ++ bl __const_udelay ++ 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 ++ and w19, w1, 255 ++ str w0, [x20, 8] ++ mov w0, 17 ++ str w0, [x20, 4] ++ mov x0, 1000 ++ bl __const_udelay ++ add w1, w19, 1 ++ mov w0, 5 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ umull x1, w1, w0 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ add x3, x0, 256 ++ add x0, x0, 352 ++ add x3, x3, x1 ++ add x0, x0, x1 ++ mov x1, 0 ++.L209: ++ ldrb w4, [x2, 129] ++ cmp w4, w1 ++ bhi .L212 ++ mov w0, 0 ++ bl NandcWaitFlashReady ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L212: ++ ldrb w4, [x2, 128] ++ cmp w4, 67 ++ bne .L210 ++ ldrsb w4, [x0, x1] ++.L214: ++ add x1, x1, 1 ++ str w4, [x20] ++ b .L209 ++.L210: ++ ldrsb w4, [x3, x1] ++ b .L214 ++ .size SandiskSetRRPara, .-SandiskSetRRPara ++ .align 2 ++ .global micron_auto_read_calibration_config ++ .type micron_auto_read_calibration_config, %function ++micron_auto_read_calibration_config: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 255 ++ mov w20, w1 ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ sbfiz x0, x19, 4, 32 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ add x1, x2, x0 ++ ldr x0, [x2, x0] ++ ldrb w19, [x1, 8] ++ add x19, x0, x19, lsl 8 ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 150 ++ str w0, [x19, 2052] ++ mov x0, 1000 ++ bl __const_udelay ++ str w20, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size micron_auto_read_calibration_config, .-micron_auto_read_calibration_config ++ .align 2 ++ .global FlashEraseSLc2KBlocks ++ .type FlashEraseSLc2KBlocks, %function ++FlashEraseSLc2KBlocks: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w23, 56 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ umaddl x23, w1, w23, x0 ++ add x21, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ and w22, w1, 255 ++ mov x20, x0 ++ add x24, x21, 2164 ++.L218: ++ cmp x20, x23 ++ bne .L223 ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 80 ++ ret ++.L223: ++ mov w1, 0 ++ mov w4, w22 ++ add x3, x29, 76 ++ add x2, x29, 72 ++ mov x0, x20 ++ bl LogAddr2PhyAddr ++ ldrb w1, [x21, 2358] ++ ldr w0, [x29, 76] ++ cmp w1, w0 ++ bhi .L219 ++ mov w0, -1 ++ str w0, [x20] ++.L220: ++ sub w22, w22, #1 ++ add x20, x20, 56 ++ and w22, w22, 255 ++ b .L218 ++.L219: ++ uxtw x0, w0 ++ add x1, x21, x0 ++ ldrb w19, [x1, 2360] ++ mov x1, 24 ++ mul x0, x0, x1 ++ strb w19, [x24, x0] ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashCs ++ ldr w1, [x29, 72] ++ mov w2, 0 ++ mov w0, w19 ++ bl FlashEraseCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ ldr w1, [x29, 72] ++ mov w0, w19 ++ bl FlashReadStatus ++ sbfx x0, x0, 0, 1 ++ str w0, [x20] ++ mov w2, 0 ++ ldr w1, [x29, 72] ++ ldr w0, [x21, 76] ++ add w1, w1, w0 ++ mov w0, w19 ++ bl FlashEraseCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ ldr w1, [x29, 72] ++ mov w0, w19 ++ bl FlashReadStatus ++ tbz x0, 0, .L221 ++ mov w0, -1 ++ str w0, [x20] ++.L221: ++ ldr w0, [x20] ++ cmn w0, #1 ++ bne .L222 ++ ldr w1, [x29, 72] ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++.L222: ++ mov w0, w19 ++ bl NandcFlashDeCs ++ b .L220 ++ .size FlashEraseSLc2KBlocks, .-FlashEraseSLc2KBlocks ++ .align 2 ++ .global FlashEraseBlocks ++ .type FlashEraseBlocks, %function ++FlashEraseBlocks: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ add x21, x19, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ mov w24, w2 ++ stp x27, x28, [sp, 80] ++ mov w27, w1 ++ stp x25, x26, [sp, 64] ++ ldrb w1, [x21, 72] ++ cbnz w1, .L229 ++ mov x20, x0 ++ add x26, x21, 2164 ++ mov w22, 0 ++ mov w28, 56 ++.L230: ++ cmp w22, w24 ++ bcc .L239 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov x21, 0 ++ add x22, x19, 2164 ++ mov x23, 24 ++.L240: ++ ldrb w0, [x19, 2358] ++ cmp w0, w21 ++ bhi .L242 ++ ldr w0, [x19, 2372] ++ cbnz w0, .L243 ++.L244: ++ mov w0, 0 ++ b .L228 ++.L229: ++ mov w1, w2 ++ bl FlashEraseSLc2KBlocks ++.L228: ++ 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 ++.L239: ++ umull x12, w22, w28 ++ mov w1, 0 ++ sub w4, w24, w22 ++ add x3, x29, 108 ++ add x23, x20, x12 ++ add x2, x29, 104 ++ mov x0, x23 ++ bl LogAddr2PhyAddr ++ mov w25, w0 ++ ldrb w1, [x21, 2358] ++ ldr w0, [x29, 108] ++ cmp w1, w0 ++ bhi .L232 ++ mov w0, -1 ++ str w0, [x20, x12] ++.L233: ++ add w22, w22, 1 ++ b .L230 ++.L232: ++ ldrb w1, [x21, 2368] ++ mov x2, 24 ++ cmp w1, 0 ++ uxtw x1, w0 ++ csel w25, w25, wzr, ne ++ madd x1, x1, x2, x26 ++ ldr x1, [x1, 8] ++ cbz x1, .L235 ++ bl FlashWaitCmdDone ++.L235: ++ ldp w2, w1, [x29, 104] ++ mov x0, 24 ++ madd x0, x1, x0, x26 ++ str w2, [x0, 4] ++ stp x23, xzr, [x0, 8] ++ cbz w25, .L236 ++ add w2, w22, 1 ++ umaddl x2, w2, w28, x20 ++ str x2, [x0, 16] ++.L236: ++ add x0, x21, x1 ++ ldrb w23, [x0, 2360] ++ mov x0, 24 ++ mul x1, x1, x0 ++ mov w0, w23 ++ strb w23, [x26, x1] ++ bl NandcFlashCs ++ cmp w27, 1 ++ bne .L237 ++ ldrb w0, [x21, 204] ++ cbz w0, .L237 ++ mov w0, w23 ++ bl flash_enter_slc_mode ++.L238: ++ ldr w1, [x29, 108] ++ add x0, x21, 1232 ++ add w22, w22, w25 ++ ldr w0, [x0, x1, lsl 2] ++ ldr w1, [x29, 104] ++ cmp w0, 0 ++ mov w0, w23 ++ cset w2, ne ++ bl FlashWaitReadyEN ++ ldr w1, [x29, 104] ++ mov w2, w25 ++ mov w0, w23 ++ bl FlashEraseCmd ++ mov w0, w23 ++ bl NandcFlashDeCs ++ b .L233 ++.L237: ++ mov w0, w23 ++ bl flash_exit_slc_mode ++ b .L238 ++.L242: ++ mov w0, w21 ++ bl FlashWaitCmdDone ++ cmp w27, 1 ++ bne .L241 ++ ldrb w0, [x19, 204] ++ cbz w0, .L241 ++ mul x0, x21, x23 ++ ldrb w0, [x0, x22] ++ bl flash_exit_slc_mode ++.L241: ++ add x21, x21, 1 ++ b .L240 ++.L243: ++ ldrb w0, [x19, 2132] ++ cmp w0, 69 ++ bne .L244 ++ mov w1, 56 ++ mov x0, x20 ++ umaddl x24, w24, w1, x20 ++.L245: ++ cmp x24, x0 ++ beq .L244 ++ str wzr, [x0], 56 ++ b .L245 ++ .size FlashEraseBlocks, .-FlashEraseBlocks ++ .align 2 ++ .global FlashReadDpCmd ++ .type FlashReadDpCmd, %function ++FlashReadDpCmd: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ adrp x0, .LANCHOR0 ++ add x4, x0, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ mov w21, w1 ++ stp x19, x20, [sp, 16] ++ sbfiz x1, x22, 4, 32 ++ and w24, w2, 255 ++ lsr w23, w2, 8 ++ lsr w20, w2, 16 ++ ldr x2, [x4, 88] ++ add x3, x4, x1 ++ ldr x5, [x4, x1] ++ ldrb w1, [x4, 112] ++ and w7, w21, 255 ++ lsr w6, w21, 8 ++ cmp w1, 1 ++ ldrb w19, [x3, 8] ++ lsr w1, w21, 16 ++ ldrb w2, [x2, 7] ++ bne .L261 ++ cmp w2, 1 ++ bne .L262 ++ sxtw x3, w19 ++ mov w2, 38 ++ add x3, x3, 8 ++ add x3, x5, x3, lsl 8 ++ str w2, [x3, 8] ++.L262: ++ add x0, x0, :lo12:.LANCHOR0 ++ add x19, x5, x19, lsl 8 ++ add x0, x0, 96 ++ ldrb w2, [x0, 8] ++ str w2, [x19, 2056] ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w7, [x19, 2052] ++ str w6, [x19, 2052] ++ ldrb w0, [x0, 9] ++ str w1, [x19, 2052] ++ str w0, [x19, 2056] ++ mov w0, w22 ++ bl NandcWaitFlashReady ++ str wzr, [x19, 2056] ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++.L266: ++ str w24, [x19, 2052] ++ mov w0, 48 ++ str w23, [x19, 2052] ++ mov w1, w21 ++ str w20, [x19, 2052] ++ str w0, [x19, 2056] ++ mov w0, w22 ++ bl FlashSetRandomizer ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L261: ++ cmp w2, 1 ++ bne .L264 ++ sxtw x3, w19 ++ mov w2, 38 ++ add x3, x3, 8 ++ add x3, x5, x3, lsl 8 ++ str w2, [x3, 8] ++.L264: ++ add x0, x0, :lo12:.LANCHOR0 ++ add x19, x5, x19, lsl 8 ++ add x0, x0, 96 ++ ldrb w2, [x0, 8] ++ str w2, [x19, 2056] ++ str w7, [x19, 2052] ++ str w6, [x19, 2052] ++ ldrb w0, [x0, 9] ++ str w1, [x19, 2052] ++ str w0, [x19, 2056] ++ b .L266 ++ .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 ++ stp x19, x20, [sp, 16] ++ bl NandcWaitFlashReady ++ bl FlashSetReadRetryDefault ++ adrp x19, .LANCHOR0 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr w0, [x0, 2376] ++ cbz w0, .L268 ++ mov w0, 0 ++ bl flash_enter_slc_mode ++.L269: ++ add x20, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x20, 2380] ++ cbz w0, .L270 ++ ldrb w0, [x20, 2357] ++ tbz x0, 0, .L270 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++ strb wzr, [x20, 2380] ++.L270: ++ ldr x0, [x19, #:lo12:.LANCHOR0] ++ str wzr, [x0, 336] ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L268: ++ mov w0, 0 ++ bl flash_exit_slc_mode ++ b .L269 ++ .size ftl_flash_de_init, .-ftl_flash_de_init ++ .align 2 ++ .global NandcRandmzSel ++ .type NandcRandmzSel, %function ++NandcRandmzSel: ++ ubfiz x0, x0, 4, 8 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ 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 w1, 16960 ++ movk w1, 0xf, lsl 16 ++ sdiv w0, w0, w1 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ cmp w0, 250 ++ ble .L280 ++ ldr x0, [x1, 136] ++ mov w1, 8354 ++.L288: ++ str w1, [x0, 4] ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L280: ++ cmp w0, 220 ++ ble .L282 ++ ldr x0, [x1, 136] ++.L289: ++ mov w1, 8322 ++ b .L288 ++.L282: ++ cmp w0, 185 ++ ble .L283 ++ ldr x0, [x1, 136] ++ mov w1, 4226 ++ b .L288 ++.L283: ++ cmp w0, 160 ++ ldr x0, [x1, 136] ++ ble .L284 ++ mov w1, 4194 ++ b .L288 ++.L284: ++ cmp w19, 35 ++ bhi .L285 ++ mov w1, 4193 ++ b .L288 ++.L285: ++ cmp w19, 99 ++ bhi .L289 ++ mov w1, 4225 ++ b .L288 ++ .size NandcTimeCfg, .-NandcTimeCfg ++ .align 2 ++ .global FlashTimingCfg ++ .type FlashTimingCfg, %function ++FlashTimingCfg: ++ stp x29, x30, [sp, -16]! ++ mov w1, -4193 ++ add w2, w0, w1 ++ mov w3, -4225 ++ add x29, sp, 0 ++ add w1, w0, w3 ++ cmp w2, 1 ++ ccmp w1, 1, 0, hi ++ bls .L291 ++ mov w1, 8322 ++ cmp w0, w1 ++ bne .L292 ++.L291: ++ adrp x1, .LANCHOR0+136 ++ ldr x1, [x1, #:lo12:.LANCHOR0+136] ++ str w0, [x1, 4] ++.L292: ++ adrp x0, .LANCHOR1+493 ++ ldrb w0, [x0, #:lo12:.LANCHOR1+493] ++ 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 ++ str x19, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x1, x19, :lo12:.LANCHOR0 ++ str x0, [x19, #:lo12:.LANCHOR0] ++ str w2, [x1, 24] ++ mov w2, 2 ++ str wzr, [x1, 8] ++ str w2, [x1, 40] ++ mov w2, 3 ++ str x0, [x1, 16] ++ str x0, [x1, 32] ++ str x0, [x1, 48] ++ str x0, [x1, 136] ++ str w2, [x1, 56] ++ ldr w2, [x0] ++ ubfx x3, x2, 13, 1 ++ str w3, [x1, 2384] ++ ldr w3, [x0, 352] ++ and w2, w2, 245760 ++ orr w2, w2, 256 ++ ubfx x3, x3, 16, 4 ++ str w3, [x1, 2388] ++ ldr w3, [x0, 352] ++ str w3, [x1, 2392] ++ cmp w3, 2049 ++ bne .L295 ++ mov w3, 8 ++ str w3, [x1, 2388] ++.L295: ++ add x19, x19, :lo12:.LANCHOR0 ++ str w2, [x0] ++ ldr x0, [x19, 136] ++ str wzr, [x0, 336] ++ mov w0, 40 ++ bl NandcTimeCfg ++ ldr x0, [x19, 136] ++ 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, 2448] ++ str x0, [x19, 2400] ++ str x0, [x19, 2408] ++ add x0, x0, 32768 ++ str wzr, [x19, 2456] ++ str x0, [x19, 2416] ++ ldr x19, [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, 136] ++ ldr w5, [x5, 4] ++ str w5, [x0] ++ ldr x0, [x4, 136] ++ ldr w0, [x0] ++ str w0, [x1] ++ ldr x0, [x4, 136] ++ ldr w0, [x0, 304] ++ str w0, [x2] ++ ldr x0, [x4, 136] ++ ldr w1, [x0, 308] ++ ldr w0, [x0, 344] ++ and w1, w1, 255 ++ orr w0, w1, w0, lsl 16 ++ str w0, [x3] ++ ret ++ .size NandcGetTimeCfg, .-NandcGetTimeCfg ++ .align 2 ++ .global NandcBchSel ++ .type NandcBchSel, %function ++NandcBchSel: ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ and w0, w0, 255 ++ mov w3, 1 ++ cmp w0, 16 ++ ldr x2, [x1, 136] ++ str w0, [x1, 2460] ++ mov w1, 4096 ++ str w3, [x2, 8] ++ bne .L299 ++.L302: ++ and w1, w1, -17 ++.L300: ++ orr w1, w1, 1 ++ str w1, [x2, 12] ++ ret ++.L299: ++ cmp w0, 24 ++ bne .L301 ++ orr w1, w1, 16 ++ b .L300 ++.L301: ++ orr w1, w1, 262144 ++ cmp w0, 40 ++ orr w1, w1, 16 ++ bne .L300 ++ b .L302 ++ .size NandcBchSel, .-NandcBchSel ++ .align 2 ++ .global FlashBchSel ++ .type FlashBchSel, %function ++FlashBchSel: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR0+2464 ++ and w0, w0, 255 ++ add x29, sp, 0 ++ strb w0, [x1, #:lo12:.LANCHOR0+2464] ++ 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]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ add x0, x20, :lo12:.LANCHOR0 ++ str x21, [sp, 32] ++ add x19, x0, 2132 ++ mov x21, 0 ++ ldr x1, [x0, 136] ++ ldr w2, [x0, 144] ++ str w2, [x1] ++ ldr w2, [x0, 148] ++ ldr x1, [x0, 136] ++ str w2, [x1, 4] ++ ldr w2, [x0, 152] ++ ldr x1, [x0, 136] ++ str w2, [x1, 8] ++ ldr w2, [x0, 156] ++ str w2, [x1, 12] ++ ldr w2, [x0, 160] ++ str w2, [x1, 304] ++ ldr w2, [x0, 164] ++ str w2, [x1, 308] ++ ldr w2, [x0, 168] ++ str w2, [x1, 336] ++ ldr w2, [x0, 172] ++ str w2, [x1, 344] ++.L310: ++ lsl x0, x21, 3 ++ ldrb w0, [x0, x19] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 253 ++ bhi .L309 ++ mov w0, w21 ++ bl FlashReset ++.L309: ++ add x21, x21, 1 ++ cmp x21, 4 ++ bne .L310 ++ add x19, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x19, 2380] ++ cbz w0, .L311 ++ mov w0, 1 ++ bl NandcSetMode ++ ldrb w0, [x19, 2357] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x19, 2357] ++ bl NandcSetMode ++ ldr w0, [x19, 160] ++ lsr w0, w0, 8 ++ bl NandcSetDdrPara ++.L311: ++ add x20, x20, :lo12:.LANCHOR0 ++ ldr x0, [x20, 88] ++ ldrb w0, [x0, 20] ++ bl FlashBchSel ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ 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 rk_nandc_flash_ready ++ .type rk_nandc_flash_ready, %function ++rk_nandc_flash_ready: ++ ldr w1, [x0, 368] ++ orr w1, w1, 2 ++ str w1, [x0, 368] ++ ldr w1, [x0, 364] ++ and w1, w1, -3 ++ str w1, [x0, 364] ++ ret ++ .size rk_nandc_flash_ready, .-rk_nandc_flash_ready ++ .align 2 ++ .global NandcIqrWaitFlashReady ++ .type NandcIqrWaitFlashReady, %function ++NandcIqrWaitFlashReady: ++ ret ++ .size NandcIqrWaitFlashReady, .-NandcIqrWaitFlashReady ++ .align 2 ++ .global rk_nandc_flash_xfer_completed ++ .type rk_nandc_flash_xfer_completed, %function ++rk_nandc_flash_xfer_completed: ++ ldr w1, [x0, 368] ++ orr w1, w1, 1 ++ str w1, [x0, 368] ++ ldr w1, [x0, 364] ++ and w1, w1, -2 ++ str w1, [x0, 364] ++ ret ++ .size rk_nandc_flash_xfer_completed, .-rk_nandc_flash_xfer_completed ++ .align 2 ++ .global NandcSendDumpDataStart ++ .type NandcSendDumpDataStart, %function ++NandcSendDumpDataStart: ++ sub sp, sp, #16 ++ ldr w2, [x0, 16] ++ mov w1, 1066 ++ movk w1, 0x2020, lsl 16 ++ str w2, [sp, 8] ++ ldr w2, [sp, 8] ++ and w2, w2, -5 ++ str w2, [sp, 8] ++ ldr w2, [sp, 8] ++ str w2, [x0, 16] ++ str w1, [x0, 8] ++ orr w1, w1, 4 ++ str w1, [x0, 8] ++ add sp, sp, 16 ++ ret ++ .size NandcSendDumpDataStart, .-NandcSendDumpDataStart ++ .align 2 ++ .global NandcSendDumpDataDone ++ .type NandcSendDumpDataDone, %function ++NandcSendDumpDataDone: ++ sub sp, sp, #16 ++.L324: ++ ldr w1, [x0, 8] ++ str w1, [sp, 8] ++ ldr w1, [sp, 8] ++ tbz x1, 20, .L324 ++ 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 x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ and w24, w1, 255 ++ add x1, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ str x25, [sp, 64] ++ add x6, x1, x0 ++ ubfiz w20, w24, 1, 1 ++ ldr x21, [x1, x0] ++ orr w20, w20, 8 ++ ldrb w0, [x6, 8] ++ mov w6, 16 ++ ldr w23, [x21, 12] ++ bfi w23, w6, 8, 8 ++ and w23, w23, -9 ++ bfi w23, w0, 5, 3 ++ mov w0, 1 ++ bfi w20, w0, 5, 2 ++ ldr w0, [x1, 2388] ++ orr w20, w20, 536870912 ++ orr w20, w20, 1024 ++ cmp w0, 3 ++ bfi w20, w3, 4, 1 ++ bls .L329 ++ ldr w0, [x21, 16] ++ cmp x5, 0 ++ str w0, [x29, 88] ++ ccmp x4, 0, 0, eq ++ ldr w0, [x29, 88] ++ and w0, w0, -5 ++ str w0, [x29, 88] ++ beq .L330 ++ and w2, w2, 255 ++ cbnz w24, .L331 ++.L339: ++ add w2, w2, 1 ++ asr w2, w2, 1 ++ bfi w20, w2, 22, 6 ++ cbz x4, .L332 ++ mov x0, x4 ++.L333: ++ add x19, x19, :lo12:.LANCHOR0 ++ ubfx x25, x20, 22, 5 ++ mov x22, x4 ++ mov w2, w24 ++ ldr x1, [x19, 2416] ++ str x1, [x19, 2432] ++ lsl w1, w25, 10 ++ str x0, [x19, 2424] ++ bl rknand_dma_map_single ++ str w0, [x19, 2440] ++ lsl w1, w25, 7 ++ ldr x0, [x19, 2432] ++ mov w2, w24 ++ bl rknand_dma_map_single ++ str w0, [x19, 2444] ++ mov w0, 1 ++ str w0, [x19, 2448] ++ ldr w0, [x19, 2440] ++ mov w1, 16 ++ str w0, [x21, 20] ++ tst x22, 3 ++ ldr w0, [x19, 2444] ++ 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] ++ bne .L340 ++ ldr w0, [x29, 88] ++ mov w1, 2 ++ bfi w0, w1, 3, 3 ++ str w0, [x29, 88] ++.L340: ++ ldr w0, [x29, 88] ++ cmp w24, 0 ++ 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] ++.L330: ++ ldr w0, [x29, 88] ++ str w0, [x21, 16] ++.L329: ++ str w23, [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 ++.L331: ++ ldr w0, [x1, 2460] ++ mov w6, 64 ++ lsr w9, w2, 1 ++ mov x8, x5 ++ cmp w0, 25 ++ mov w0, 128 ++ csel w6, w6, w0, cc ++ mov w7, 0 ++ mov w3, 0 ++ mov w10, -1 ++.L335: ++ cmp w3, w9 ++ bcs .L339 ++ lsr w0, w7, 2 ++ cbz x5, .L336 ++ ldr x11, [x1, 2416] ++ lsl w0, w0, 2 ++ ldr w12, [x8], 4 ++ str w12, [x11, x0] ++.L337: ++ add w3, w3, 1 ++ add w7, w7, w6 ++ b .L335 ++.L336: ++ ldr x11, [x1, 2416] ++ lsl w0, w0, 2 ++ str w10, [x11, x0] ++ b .L337 ++.L332: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 2408] ++ b .L333 ++ .size NandcXferStart, .-NandcXferStart ++ .align 2 ++ .global Ftl_log2 ++ .type Ftl_log2, %function ++Ftl_log2: ++ mov w2, 1 ++ mov w1, 0 ++.L347: ++ cmp w2, w0 ++ bls .L348 ++ sub w0, w1, #1 ++ ret ++.L348: ++ add w1, w1, 1 ++ lsl w2, w2, 1 ++ and w1, w1, 65535 ++ b .L347 ++ .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: ++ and w0, w0, 65535 ++ mov w1, 24 ++ cmp w0, 24 ++ csel w0, w0, w1, cs ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ and w0, w0, 65535 ++ ldrh w2, [x1, 2472] ++ ldrh w3, [x1, 2482] ++ str w0, [x1, 2468] ++ mul w2, w2, w0 ++ sub w0, w3, w0 ++ strh w0, [x1, 2480] ++ ldr w0, [x1, 2488] ++ str w2, [x1, 2476] ++ sub w2, w0, w2 ++ mov w0, 0 ++ str w2, [x1, 2484] ++ ret ++ .size FtlSysBlkNumInit, .-FtlSysBlkNumInit ++ .align 2 ++ .global FtlConstantsInit ++ .type FtlConstantsInit, %function ++FtlConstantsInit: ++ mov x7, x0 ++ stp x29, x30, [sp, -16]! ++ adrp x5, .LANCHOR0 ++ add x1, x5, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ ldrh w9, [x0, 8] ++ add x1, x1, 2504 ++ ldrh w2, [x0, 10] ++ mov x3, 0 ++ ldrh w0, [x0, 12] ++ ldrh w4, [x7, 14] ++ strh w9, [x1, -12] ++ strh w2, [x1, -10] ++ strh w0, [x1, -8] ++ strh w4, [x1, -22] ++.L352: ++ strb w3, [x3, x1] ++ add x3, x3, 1 ++ cmp x3, 32 ++ bne .L352 ++ ldrh w3, [x7, 20] ++ ldrb w1, [x7, 15] ++ cmp w3, w1 ++ bcs .L353 ++ and w11, w0, 255 ++ add x8, x5, :lo12:.LANCHOR0 ++ mul w13, w0, w2 ++ ubfiz w12, w11, 1, 7 ++ add x8, x8, 2504 ++ mov w3, 0 ++.L354: ++ cmp w3, w0 ++ bcs .L356 ++ and w1, w3, 255 ++ mov w6, w3 ++ mov w10, 0 ++ b .L357 ++.L355: ++ add w14, w13, w6 ++ strb w1, [x8, w6, uxtw] ++ add w15, w11, w1 ++ add w1, w12, w1 ++ add w10, w10, 1 ++ and w1, w1, 255 ++ add w6, w6, w0 ++ strb w15, [x8, x14] ++.L357: ++ cmp w10, w2 ++ bcc .L355 ++ add w3, w3, 1 ++ b .L354 ++.L356: ++ add x1, x5, :lo12:.LANCHOR0 ++ ubfiz w2, w2, 1, 15 ++ lsr w4, w4, 1 ++ strh w2, [x1, 2494] ++ strh w4, [x1, 2482] ++.L353: ++ add x1, x5, :lo12:.LANCHOR0 ++ mov w2, 5 ++ cmp w9, 1 ++ strh w2, [x1, 2536] ++ strh wzr, [x1, 2538] ++ bne .L358 ++ strh w9, [x1, 2536] ++.L358: ++ add x1, x5, :lo12:.LANCHOR0 ++ mov w2, 4352 ++ ldrb w11, [x1, 72] ++ strh w2, [x1, 2540] ++ cbz w11, .L359 ++ mov w2, 384 ++ strh w2, [x1, 2540] ++.L359: ++ add x4, x5, :lo12:.LANCHOR0 ++ ldrh w10, [x7, 16] ++ ldrh w8, [x7, 20] ++ ldrh w9, [x7, 18] ++ ldrh w6, [x4, 2494] ++ ldrh w3, [x4, 2482] ++ strh w10, [x4, 2544] ++ strh w9, [x4, 2546] ++ mul w6, w0, w6 ++ strh w8, [x4, 2550] ++ mul w0, w0, w3 ++ and w6, w6, 65535 ++ strh w0, [x4, 2542] ++ strh w6, [x4, 2472] ++ mul w0, w6, w10 ++ strh w0, [x4, 2548] ++ mov w0, w8 ++ bl Ftl_log2 ++ and w2, w0, 65535 ++ strh w0, [x4, 2552] ++ ubfiz w0, w8, 9, 7 ++ strh w0, [x4, 2554] ++ ubfx w0, w0, 8, 8 ++ strh w0, [x4, 2556] ++ cmp w3, 1024 ++ ldrh w0, [x7, 26] ++ strh w0, [x4, 2558] ++ mul w0, w6, w3 ++ str w0, [x4, 2488] ++ bls .L360 ++ and w0, w3, 255 ++ strh w0, [x4, 2538] ++.L360: ++ add x1, x5, :lo12:.LANCHOR0 ++ ldrh w0, [x1, 2538] ++ sub w0, w3, w0 ++ mul w0, w0, w6 ++ mul w0, w0, w8 ++ mul w8, w9, w8 ++ mul w0, w0, w10 ++ asr w0, w0, 11 ++ str w0, [x1, 2560] ++ ldrh w0, [x1, 2540] ++ lsl w0, w0, 3 ++ sdiv w0, w0, w8 ++ and w0, w0, 65535 ++ cmp w0, 4 ++ bls .L361 ++.L377: ++ strh w0, [x1, 2564] ++ cbz w11, .L363 ++ add x0, x5, :lo12:.LANCHOR0 ++ mov w1, 640 ++ strh w1, [x0, 2540] ++.L363: ++ add x1, x5, :lo12:.LANCHOR0 ++ lsl w3, w3, 6 ++ cmp w6, 1 ++ ldrh w0, [x1, 2540] ++ asr w0, w0, w2 ++ add w2, w2, 9 ++ add w0, w0, 2 ++ strh w0, [x1, 2566] ++ asr w3, w3, w2 ++ strh w3, [x1, 2568] ++ and w3, w3, 65535 ++ mul w0, w6, w3 ++ add w3, w3, 8 ++ str w0, [x1, 2572] ++ ldrh w0, [x1, 2564] ++ udiv w0, w0, w6 ++ add w3, w0, w3 ++ beq .L364 ++.L378: ++ add x4, x5, :lo12:.LANCHOR0 ++ str w3, [x1, 2468] ++ ldrh w0, [x4, 2468] ++ bl FtlSysBlkNumInit ++ ldr w0, [x4, 2468] ++ str w0, [x4, 2576] ++ ldr w0, [x4, 2484] ++ ldrh w1, [x4, 2544] ++ ldrh w3, [x4, 2550] ++ lsl w0, w0, 2 ++ ldrh w2, [x4, 2564] ++ ldrb w7, [x4, 204] ++ str wzr, [x4, 2584] ++ mul w0, w0, w1 ++ ldrh w1, [x4, 2552] ++ add w1, w1, 9 ++ lsr w0, w0, w1 ++ mov w1, 2048 ++ add w0, w0, 2 ++ sdiv w1, w1, w3 ++ and w0, w0, 65535 ++ strh w0, [x4, 2580] ++ strh w1, [x4, 2582] ++ add w1, w2, 3 ++ strh w1, [x4, 2564] ++ ldr w1, [x4, 2572] ++ add w6, w1, 3 ++ str w6, [x4, 2572] ++ cbz w7, .L366 ++ add w1, w1, 5 ++ add w2, w2, 4 ++ strh w2, [x4, 2564] ++.L379: ++ str w1, [x4, 2572] ++.L367: ++ add x5, x5, :lo12:.LANCHOR0 ++ ldrh w1, [x5, 2480] ++ strh wzr, [x5, 2588] ++ lsl w2, w1, 1 ++ lsr w1, w1, 3 ++ add w2, w2, 48 ++ add w1, w1, 4 ++ add w0, w2, w0, lsl 2 ++ add w0, w0, w1 ++ cmp w0, w3, lsl 9 ++ bcs .L368 ++ mov w0, 1 ++ strh w0, [x5, 2588] ++.L368: ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L361: ++ mov w0, 4 ++ b .L377 ++.L364: ++ add w3, w3, 4 ++ b .L378 ++.L366: ++ cmp w6, 7 ++ bhi .L367 ++ mov w1, 8 ++ b .L379 ++ .size FtlConstantsInit, .-FtlConstantsInit ++ .align 2 ++ .global IsBlkInVendorPart ++ .type IsBlkInVendorPart, %function ++IsBlkInVendorPart: ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ and w0, w0, 65535 ++ ldrh w2, [x1, 2590] ++ cbz w2, .L384 ++ ldrh w2, [x1, 2564] ++ ldr x3, [x1, 2592] ++ mov x1, 0 ++.L382: ++ cmp w2, w1, uxth ++ bhi .L383 ++.L384: ++ mov w0, 0 ++ ret ++.L383: ++ add x1, x1, 1 ++ add x4, x3, x1, lsl 1 ++ ldrh w4, [x4, -2] ++ cmp w4, w0 ++ bne .L382 ++ mov w0, 1 ++ ret ++ .size IsBlkInVendorPart, .-IsBlkInVendorPart ++ .align 2 ++ .global FtlCacheMetchLpa ++ .type FtlCacheMetchLpa, %function ++FtlCacheMetchLpa: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ ldr w4, [x2, 2600] ++ cbz w4, .L391 ++ mov x5, 24 ++ mov w6, 56 ++ ldr x2, [x2, 2608] ++ nop // between mem op and mult-accumulate ++ umaddl x4, w4, w6, x5 ++ add x3, x2, 24 ++ add x2, x2, x4 ++.L388: ++ cmp x3, x2 ++ bne .L390 ++.L391: ++ mov w0, 0 ++ ret ++.L390: ++ ldr w4, [x3] ++ cmp w4, w0 ++ bcc .L389 ++ cmp w4, w1 ++ bls .L392 ++.L389: ++ add x3, x3, 56 ++ b .L388 ++.L392: ++ mov w0, 1 ++ ret ++ .size FtlCacheMetchLpa, .-FtlCacheMetchLpa ++ .align 2 ++ .global FtlGetCap ++ .type FtlGetCap, %function ++FtlGetCap: ++ adrp x0, .LANCHOR0+2584 ++ ldr w0, [x0, #:lo12:.LANCHOR0+2584] ++ ret ++ .size FtlGetCap, .-FtlGetCap ++ .align 2 ++ .global FtlGetCapacity ++ .type FtlGetCapacity, %function ++FtlGetCapacity: ++ adrp x0, .LANCHOR0+2584 ++ ldr w0, [x0, #:lo12:.LANCHOR0+2584] ++ ret ++ .size FtlGetCapacity, .-FtlGetCapacity ++ .align 2 ++ .global ftl_get_density ++ .type ftl_get_density, %function ++ftl_get_density: ++ adrp x0, .LANCHOR0+2584 ++ ldr w0, [x0, #:lo12:.LANCHOR0+2584] ++ ret ++ .size ftl_get_density, .-ftl_get_density ++ .align 2 ++ .global FtlGetLpn ++ .type FtlGetLpn, %function ++FtlGetLpn: ++ adrp x0, .LANCHOR0+2616 ++ ldr w0, [x0, #:lo12:.LANCHOR0+2616] ++ ret ++ .size FtlGetLpn, .-FtlGetLpn ++ .align 2 ++ .global FtlBbmMapBadBlock ++ .type FtlBbmMapBadBlock, %function ++FtlBbmMapBadBlock: ++ stp x29, x30, [sp, -32]! ++ and w1, w0, 65535 ++ mov w4, 1 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ add x19, x19, 2624 ++ ldrh w0, [x19, -82] ++ udiv w3, w1, w0 ++ and w2, w3, 65535 ++ msub w3, w3, w0, w1 ++ add x0, x19, w2, uxth 3 ++ and w3, w3, 65535 ++ ldr x0, [x0, 32] ++ ubfx x5, x3, 5, 11 ++ lsl x5, x5, 2 ++ lsl w4, w4, w3 ++ ldr w6, [x0, x5] ++ orr w4, w4, w6 ++ str w4, [x0, x5] ++ adrp x0, .LC1 ++ add x0, x0, :lo12:.LC1 ++ 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, .LANCHOR0 ++ add x3, x2, :lo12:.LANCHOR0 ++ and w0, w0, 65535 ++ ldrh w1, [x3, 2542] ++ udiv w2, w0, w1 ++ msub w0, w2, w1, w0 ++ add x2, x3, w2, uxth 3 ++ and w0, w0, 65535 ++ ldr x1, [x2, 2656] ++ 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 FtlBbtCalcTotleCnt ++ .type FtlBbtCalcTotleCnt, %function ++FtlBbtCalcTotleCnt: ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w4, 0 ++ mov w5, 0 ++ ldrh w6, [x0, 2542] ++ ldrh w0, [x0, 2494] ++ mul w6, w6, w0 ++ cmp w4, w6 ++ blt .L411 ++ mov w0, w5 ++ ret ++.L411: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++.L404: ++ mov w0, w4 ++ bl FtlBbmIsBadBlock ++ cbz w0, .L403 ++ add w5, w5, 1 ++ and w5, w5, 65535 ++.L403: ++ add w4, w4, 1 ++ and w4, w4, 65535 ++ cmp w4, w6 ++ blt .L404 ++ mov w0, w5 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt ++ .align 2 ++ .global V2P_block ++ .type V2P_block, %function ++V2P_block: ++ adrp x4, .LANCHOR0 ++ add x4, x4, :lo12:.LANCHOR0 ++ and w0, w0, 65535 ++ and w1, w1, 65535 ++ ldrh w2, [x4, 2496] ++ ldrh w4, [x4, 2542] ++ udiv w3, w0, w2 ++ msub w0, w3, w2, w0 ++ madd w2, w2, w1, w0 ++ madd w0, w3, w4, w2 ++ ret ++ .size V2P_block, .-V2P_block ++ .align 2 ++ .global P2V_plane ++ .type P2V_plane, %function ++P2V_plane: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ and w3, w0, 65535 ++ ldrh w1, [x2, 2496] ++ ldrh w2, [x2, 2542] ++ udiv w0, w3, w1 ++ udiv w2, w3, w2 ++ msub w0, w0, w1, w3 ++ madd w0, w1, w2, 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 x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ and w3, w0, 65535 ++ ldrh w2, [x1, 2542] ++ ldrh w1, [x1, 2496] ++ udiv w0, w3, w2 ++ msub w0, w0, w2, w3 ++ and w0, w0, 65535 ++ 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 .L416 ++ sub w1, w0, w1 ++ cmp w1, w2 ++ cset w0, ls ++ ret ++.L416: ++ sub w1, w1, w0 ++ cmp w1, w2 ++ cset w0, hi ++ ret ++ .size ftl_cmp_data_ver, .-ftl_cmp_data_ver ++ .align 2 ++ .global FtlFreeSysBlkQueueEmpty ++ .type FtlFreeSysBlkQueueEmpty, %function ++FtlFreeSysBlkQueueEmpty: ++ adrp x0, .LANCHOR0+2726 ++ ldrh w0, [x0, #:lo12:.LANCHOR0+2726] ++ cmp w0, 0 ++ cset w0, eq ++ ret ++ .size FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty ++ .align 2 ++ .global FtlFreeSysBlkQueueFull ++ .type FtlFreeSysBlkQueueFull, %function ++FtlFreeSysBlkQueueFull: ++ adrp x0, .LANCHOR0+2726 ++ ldrh w0, [x0, #:lo12:.LANCHOR0+2726] ++ cmp w0, 1024 ++ cset w0, eq ++ ret ++ .size FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull ++ .align 2 ++ .global FtlFreeSysBlkQueueIn ++ .type FtlFreeSysBlkQueueIn, %function ++FtlFreeSysBlkQueueIn: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w21, w0, 65535 ++ stp x19, x20, [sp, 16] ++ sub w2, w21, #1 ++ mov w0, 65533 ++ cmp w0, w2, uxth ++ bcc .L420 ++ adrp x0, .LANCHOR0 ++ add x2, x0, :lo12:.LANCHOR0 ++ mov x19, x0 ++ ldrh w2, [x2, 2726] ++ cmp w2, 1024 ++ beq .L420 ++ and w1, w1, 65535 ++ cbz w1, .L422 ++ adrp x20, .LANCHOR2 ++ add x20, x20, :lo12:.LANCHOR2 ++ ldr w0, [x20, 424] ++ cbnz w0, .L422 ++ mov w0, w21 ++ bl P2V_block_in_plane ++ and w22, w0, 65535 ++ ldr x0, [x20, 432] ++ lsl w1, w21, 10 ++ mov w2, 1 ++ str w1, [x0, 4] ++ mov w1, w2 ++ ldr x0, [x20, 432] ++ bl FlashEraseBlocks ++ ldr x2, [x20, 440] ++ ubfiz x0, x22, 1, 16 ++ ldrh w1, [x2, x0] ++ add w1, w1, 1 ++ strh w1, [x2, x0] ++ ldr w0, [x20, 448] ++ add w0, w0, 1 ++ str w0, [x20, 448] ++.L422: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 2720 ++ ldrh w1, [x0, 6] ++ add w1, w1, 1 ++ strh w1, [x0, 6] ++ ldrh w1, [x0, 4] ++ add x2, x0, w1, sxtw 1 ++ add w1, w1, 1 ++ and w1, w1, 1023 ++ strh w1, [x0, 4] ++ strh w21, [x2, 8] ++.L420: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn ++ .align 2 ++ .global FtlFreeSysBLkSort ++ .type FtlFreeSysBLkSort, %function ++FtlFreeSysBLkSort: ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ add x1, x1, 2720 ++ ldrh w2, [x1, 6] ++ cbz w2, .L430 ++ adrp x2, .LANCHOR2+484 ++ ldrh w3, [x1, 2] ++ mov w6, 0 ++ mov w4, 0 ++ ldrh w5, [x2, #:lo12:.LANCHOR2+484] ++ ldrh w2, [x1, 4] ++ and w5, w5, 31 ++.L432: ++ cmp w5, w4 ++ bgt .L433 ++ cbz w6, .L430 ++ add x0, x0, :lo12:.LANCHOR0 ++ strh w3, [x0, 2722] ++ strh w2, [x0, 2724] ++.L430: ++ ret ++.L433: ++ add x6, x1, w3, sxtw 1 ++ add w4, w4, 1 ++ add w3, w3, 1 ++ and w4, w4, 65535 ++ and w3, w3, 1023 ++ ldrh w7, [x6, 8] ++ add x6, x1, w2, sxtw 1 ++ strh w7, [x6, 8] ++ mov w6, 1 ++ add w2, w2, w6 ++ and w2, w2, 1023 ++ b .L432 ++ .size FtlFreeSysBLkSort, .-FtlFreeSysBLkSort ++ .align 2 ++ .global FtlFreeSysBlkQueueOut ++ .type FtlFreeSysBlkQueueOut, %function ++FtlFreeSysBlkQueueOut: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ add x20, x21, 2720 ++ stp x23, x24, [sp, 48] ++ mov x22, x20 ++.L440: ++ ldrh w1, [x20, 6] ++ cbz w1, .L441 ++ ldrh w0, [x20, 2] ++ adrp x19, .LANCHOR2 ++ add x4, x19, :lo12:.LANCHOR2 ++ sub w1, w1, #1 ++ strh w1, [x20, 6] ++ add x2, x20, w0, sxtw 1 ++ add w0, w0, 1 ++ and w0, w0, 1023 ++ strh w0, [x20, 2] ++ ldr w0, [x4, 424] ++ ldrh w23, [x2, 8] ++ cbnz w0, .L442 ++ mov w0, w23 ++ bl P2V_block_in_plane ++ and w24, w0, 65535 ++ ldr x0, [x4, 432] ++ lsl w1, w23, 10 ++ str w1, [x0, 4] ++ ldrb w0, [x21, 204] ++ cbz w0, .L443 ++ ldr x0, [x4, 432] ++ mov w2, 1 ++ mov w1, 0 ++ bl FlashEraseBlocks ++.L443: ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w2, 1 ++ mov w1, w2 ++ ldr x0, [x19, 432] ++ bl FlashEraseBlocks ++ ldr x2, [x19, 440] ++ ubfiz x0, x24, 1, 16 ++ ldrh w1, [x2, x0] ++ add w1, w1, 1 ++ strh w1, [x2, x0] ++ ldr w0, [x19, 448] ++ add w0, w0, 1 ++ str w0, [x19, 448] ++.L442: ++ sub w0, w23, #1 ++ mov w1, 65533 ++ cmp w1, w0, uxth ++ bcs .L445 ++ ldrh w2, [x22, 6] ++ mov w1, w23 ++ adrp x0, .LC3 ++ add x0, x0, :lo12:.LC3 ++ bl printk ++ b .L440 ++.L441: ++ adrp x0, .LC2 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC2 ++ bl printk ++.L444: ++ b .L444 ++.L445: ++ mov w0, w23 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut ++ .align 2 ++ .global test_node_in_list ++ .type test_node_in_list, %function ++test_node_in_list: ++ ldr x2, [x0] ++ adrp x0, .LANCHOR2+504 ++ mov x4, -6148914691236517206 ++ and w1, w1, 65535 ++ ldr x3, [x0, #:lo12:.LANCHOR2+504] ++ movk x4, 0xaaab, lsl 0 ++ mov w5, 65535 ++ sub x0, x2, x3 ++ asr x0, x0, 1 ++ mul x0, x0, x4 ++ mov w4, 6 ++ and w0, w0, 65535 ++.L452: ++ cmp w0, w1 ++ beq .L453 ++ ldrh w0, [x2] ++ cmp w0, w5 ++ beq .L454 ++ umaddl x2, w0, w4, x3 ++ b .L452 ++.L453: ++ mov w0, 1 ++ ret ++.L454: ++ mov w0, 0 ++ ret ++ .size test_node_in_list, .-test_node_in_list ++ .align 2 ++ .global insert_data_list ++ .type insert_data_list, %function ++insert_data_list: ++ adrp x9, .LANCHOR0 ++ add x9, x9, :lo12:.LANCHOR0 ++ and w0, w0, 65535 ++ ldrh w1, [x9, 2480] ++ cmp w1, w0 ++ bls .L471 ++ adrp x2, .LANCHOR2 ++ add x4, x2, :lo12:.LANCHOR2 ++ mov w5, 6 ++ mov w1, -1 ++ mov x3, x2 ++ ldr x12, [x4, 504] ++ umull x11, w0, w5 ++ add x6, x12, x11 ++ strh w1, [x6, 2] ++ strh w1, [x12, x11] ++ ldr x1, [x4, 512] ++ cbnz x1, .L458 ++ str x6, [x4, 512] ++.L471: ++ mov w0, 0 ++ ret ++.L458: ++ stp x29, x30, [sp, -16]! ++ ubfiz x8, x0, 1, 16 ++ mov x15, -6148914691236517206 ++ mov w10, -1 ++ add x29, sp, 0 ++ ldr x14, [x4, 520] ++ movk x15, 0xaaab, lsl 0 ++ ldrh w2, [x6, 4] ++ mov w30, 65535 ++ ldr x13, [x4, 504] ++ cmp w2, 0 ++ ldrh w18, [x9, 2480] ++ ldrh w7, [x14, x8] ++ mul w7, w7, w2 ++ sub x2, x1, x13 ++ asr x2, x2, 1 ++ csel w7, w7, w10, ne ++ mul x2, x2, x15 ++ ldr x15, [x4, 440] ++ mov w4, 0 ++ add x9, x15, x8 ++ and w2, w2, 65535 ++ mov w8, w5 ++.L466: ++ add w4, w4, 1 ++ and w4, w4, 65535 ++ cmp w4, w18 ++ bhi .L457 ++ cmp w0, w2 ++ beq .L457 ++ ubfiz x16, x2, 1, 16 ++ ldrh w17, [x1, 4] ++ cmp w17, 0 ++ ldrh w5, [x14, x16] ++ mul w5, w5, w17 ++ csel w5, w5, w10, ne ++ cmp w7, w5 ++ bne .L462 ++ ldrh w16, [x15, x16] ++ ldrh w5, [x9] ++ cmp w16, w5 ++ bcc .L464 ++.L463: ++ strh w2, [x12, x11] ++ ldrh w2, [x1, 2] ++ strh w2, [x6, 2] ++ add x2, x3, :lo12:.LANCHOR2 ++ ldr x3, [x2, 512] ++ cmp x1, x3 ++ bne .L467 ++ strh w0, [x1, 2] ++ str x6, [x2, 512] ++ b .L457 ++.L462: ++ bcc .L463 ++.L464: ++ ldrh w5, [x1] ++ cmp w5, w30 ++ bne .L465 ++ strh w2, [x6, 2] ++ add x2, x3, :lo12:.LANCHOR2 ++ strh w0, [x1] ++ str x6, [x2, 528] ++.L457: ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L465: ++ umaddl x1, w5, w8, x13 ++ mov w2, w5 ++ b .L466 ++.L467: ++ ldrh w3, [x1, 2] ++ mov w4, 6 ++ ldr x2, [x2, 504] ++ umull x3, w3, w4 ++ strh w0, [x2, x3] ++ strh w0, [x1, 2] ++ b .L457 ++ .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, 536] ++ add w1, w1, 1 ++ strh w1, [x0, 536] ++ 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: ++ and w0, w0, 65535 ++ mov w7, 65535 ++ cmp w0, w7 ++ beq .L476 ++ adrp x2, .LANCHOR2 ++ add x5, x2, :lo12:.LANCHOR2 ++ mov w6, 6 ++ mov w1, -1 ++ mov x3, x2 ++ ldr x9, [x5, 504] ++ umull x8, w0, w6 ++ add x4, x9, x8 ++ strh w1, [x4, 2] ++ strh w1, [x9, x8] ++ ldr x1, [x5, 544] ++ cbnz x1, .L477 ++ str x4, [x5, 544] ++.L476: ++ mov w0, 0 ++ ret ++.L477: ++ ldr x11, [x5, 440] ++ ubfiz x2, x0, 1, 16 ++ ldr x10, [x5, 504] ++ mov x5, -6148914691236517206 ++ movk x5, 0xaaab, lsl 0 ++ ldrh w12, [x11, x2] ++ sub x2, x1, x10 ++ asr x2, x2, 1 ++ mul x2, x2, x5 ++ and w2, w2, 65535 ++.L480: ++ ubfiz x5, x2, 1, 16 ++ ldrh w5, [x11, x5] ++ cmp w5, w12 ++ bcs .L478 ++ ldrh w5, [x1] ++ cmp w5, w7 ++ bne .L479 ++ strh w2, [x4, 2] ++ strh w0, [x1] ++ b .L476 ++.L479: ++ umaddl x1, w5, w6, x10 ++ mov w2, w5 ++ b .L480 ++.L478: ++ ldrh w5, [x1, 2] ++ strh w5, [x4, 2] ++ strh w2, [x9, x8] ++ add x2, x3, :lo12:.LANCHOR2 ++ ldr x3, [x2, 544] ++ cmp x1, x3 ++ bne .L481 ++ strh w0, [x1, 2] ++ str x4, [x2, 544] ++ b .L476 ++.L481: ++ ldrh w3, [x1, 2] ++ mov w4, 6 ++ ldr x2, [x2, 504] ++ umull x3, w3, w4 ++ strh w0, [x2, x3] ++ strh w0, [x1, 2] ++ b .L476 ++ .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, 552] ++ add w1, w1, 1 ++ strh w1, [x0, 552] ++ 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: ++ and w1, w1, 65535 ++ adrp x6, .LANCHOR2 ++ add x6, x6, :lo12:.LANCHOR2 ++ mov w4, 6 ++ ldr x2, [x0] ++ mov w7, 65535 ++ umull x1, w1, w4 ++ ldr x3, [x6, 504] ++ add x5, x3, x1 ++ cmp x5, x2 ++ ldrh w2, [x3, x1] ++ bne .L485 ++ cmp w2, w7 ++ bne .L486 ++ str xzr, [x0] ++.L487: ++ mov w0, -1 ++ strh w0, [x3, x1] ++ strh w0, [x5, 2] ++ mov w0, 0 ++ ret ++.L486: ++ umaddl x2, w2, w4, x3 ++ str x2, [x0] ++ mov w0, -1 ++ strh w0, [x2, 2] ++ b .L487 ++.L485: ++ cmp w2, w7 ++ ldrh w0, [x5, 2] ++ bne .L488 ++ cmp w0, w2 ++ beq .L487 ++ umull x2, w0, w4 ++ mov w0, -1 ++ strh w0, [x3, x2] ++ b .L487 ++.L488: ++ umaddl x2, w2, w4, x3 ++ strh w0, [x2, 2] ++ ldrh w2, [x5, 2] ++ ldr x0, [x6, 504] ++ ldrh w7, [x3, x1] ++ umull x2, w2, w4 ++ strh w7, [x0, x2] ++ b .L487 ++ .size List_remove_node, .-List_remove_node ++ .align 2 ++ .global List_pop_index_node ++ .type List_pop_index_node, %function ++List_pop_index_node: ++ ldr x2, [x0] ++ cbz x2, .L495 ++ stp x29, x30, [sp, -16]! ++ adrp x3, .LANCHOR2+504 ++ and w1, w1, 65535 ++ mov w4, 65535 ++ add x29, sp, 0 ++ ldr x8, [x3, #:lo12:.LANCHOR2+504] ++ mov w5, 6 ++.L491: ++ cbnz w1, .L492 ++.L494: ++ sub x8, x2, x8 ++ mov x2, -6148914691236517206 ++ asr x8, x8, 1 ++ movk x2, 0xaaab, lsl 0 ++ mul x8, x8, x2 ++ and w8, w8, 65535 ++ mov w1, w8 ++ bl List_remove_node ++ mov w0, w8 ++ ldp x29, x30, [sp], 16 ++ ret ++.L492: ++ ldrh w3, [x2] ++ cmp w3, w4 ++ beq .L494 ++ sub w1, w1, #1 ++ umaddl x2, w3, w5, x8 ++ and w1, w1, 65535 ++ b .L491 ++.L495: ++ mov w0, 65535 ++ 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: ++ and w2, w0, 65535 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldr x1, [x0, 512] ++ cbz x1, .L505 ++ ldr x3, [x0, 504] ++ mov w4, 6 ++ mov w0, 65535 ++.L502: ++ cbz w2, .L503 ++ ldrh w1, [x1] ++ cmp w1, w0 ++ bne .L504 ++ ret ++.L504: ++ sub w2, w2, #1 ++ umaddl x1, w1, w4, x3 ++ and w2, w2, 65535 ++ b .L502 ++.L505: ++ mov w0, 65535 ++ ret ++.L503: ++ sub x0, x1, x3 ++ mov x1, -6148914691236517206 ++ asr x0, x0, 1 ++ movk x1, 0xaaab, lsl 0 ++ mul x0, x0, x1 ++ and w0, w0, 65535 ++ 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: ++ adrp x8, .LANCHOR2 ++ add x1, x8, :lo12:.LANCHOR2 ++ and w9, w0, 65535 ++ ldrh w0, [x1, 560] ++ cmp w0, w9 ++ beq .L514 ++ ldrh w0, [x1, 608] ++ cmp w0, w9 ++ beq .L514 ++ ldrh w0, [x1, 656] ++ cmp w0, w9 ++ beq .L514 ++ mov w4, 6 ++ ldp x3, x2, [x1, 504] ++ umull x4, w9, w4 ++ add x0, x3, x4 ++ cmp x0, x2 ++ beq .L514 ++ ldr x5, [x1, 520] ++ ubfiz x1, x9, 1, 16 ++ ldrh w2, [x5, x1] ++ ldrh w1, [x0, 4] ++ ldrh w0, [x0, 2] ++ cmp w1, 0 ++ mul w2, w2, w1 ++ mov w1, 65535 ++ csinv w2, w2, wzr, ne ++ cmp w0, w1 ++ bne .L509 ++ ldrh w1, [x3, x4] ++ cmp w1, w0 ++ beq .L514 ++.L509: ++ mov w1, 6 ++ mov x4, -6148914691236517206 ++ movk x4, 0xaaab, lsl 0 ++ umull x0, w0, w1 ++ asr x1, x0, 1 ++ add x0, x3, x0 ++ mul x1, x1, x4 ++ ldrh w3, [x0, 4] ++ cmp w3, 0 ++ ldrh w1, [x5, x1, lsl 1] ++ mul w0, w1, w3 ++ csinv w0, w0, wzr, ne ++ cmp w2, w0 ++ bcs .L514 ++ add x8, x8, :lo12:.LANCHOR2 ++ stp x29, x30, [sp, -16]! ++ mov w1, w9 ++ add x0, x8, 512 ++ add x29, sp, 0 ++ bl List_remove_node ++ ldrh w0, [x8, 536] ++ sub w0, w0, #1 ++ strh w0, [x8, 536] ++ mov w0, w9 ++ bl INSERT_DATA_LIST ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L514: ++ mov w0, 0 ++ ret ++ .size List_update_data_list, .-List_update_data_list ++ .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] ++ mov w20, 0 ++ str x21, [sp, 32] ++ ldrh w2, [x0, 10] ++ ldr x1, [x0, 16] ++.L518: ++ cmp w20, w2 ++ beq .L522 ++ mov x21, x1 ++ ldrh w3, [x1], 2 ++ cbnz w3, .L519 ++ mov x19, x0 ++ bl FtlFreeSysBlkQueueOut ++ and w1, w0, 65535 ++ strh w0, [x21] ++ sub w2, w1, #1 ++ mov w0, 65533 ++ cmp w0, w2, uxth ++ bcs .L520 ++ adrp x0, .LANCHOR0+2726 ++ ldrh w2, [x0, #:lo12:.LANCHOR0+2726] ++ adrp x0, .LC4 ++ add x0, x0, :lo12:.LC4 ++ bl printk ++.L521: ++ b .L521 ++.L520: ++ ldr w0, [x19, 48] ++ strh wzr, [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] ++.L522: ++ mov w0, 0 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L519: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L518 ++ .size ftl_map_blk_alloc_new_blk, .-ftl_map_blk_alloc_new_blk ++ .align 2 ++ .global select_l2p_ram_region ++ .type select_l2p_ram_region, %function ++select_l2p_ram_region: ++ adrp x0, .LANCHOR0+2582 ++ mov x4, 0 ++ mov w5, 65535 ++ ldrh w2, [x0, #:lo12:.LANCHOR0+2582] ++ adrp x0, .LANCHOR2 ++ add x1, x0, :lo12:.LANCHOR2 ++ mov x3, x0 ++ ldr x1, [x1, 704] ++.L526: ++ and w0, w4, 65535 ++ cmp w0, w2 ++ bcc .L528 ++ add x5, x1, 4 ++ mov w0, w2 ++ mov w7, -2147483648 ++ mov w4, 0 ++.L529: ++ cmp w4, w2 ++ bne .L531 ++ cmp w0, w2 ++ bcc .L527 ++ add x0, x3, :lo12:.LANCHOR2 ++ mov w4, -1 ++ mov w3, 0 ++ ldrh w5, [x0, 712] ++ mov w0, w2 ++.L532: ++ cmp w3, w2 ++ beq .L527 ++ ldr w7, [x1, 4] ++ cmp w4, w7 ++ bls .L533 ++ ldrh w6, [x1] ++ cmp w6, w5 ++ csel w4, w4, w7, eq ++ csel w0, w0, w3, eq ++.L533: ++ add w3, w3, 1 ++ add x1, x1, 16 ++ and w3, w3, 65535 ++ b .L532 ++.L528: ++ add x4, x4, 1 ++ add x6, x1, x4, lsl 4 ++ ldrh w6, [x6, -16] ++ cmp w6, w5 ++ bne .L526 ++.L527: ++ ret ++.L531: ++ ldr w6, [x5] ++ tbnz w6, #31, .L530 ++ cmp w7, w6 ++ bls .L530 ++ mov w7, w6 ++ mov w0, w4 ++.L530: ++ add w4, w4, 1 ++ add x5, x5, 16 ++ and w4, w4, 65535 ++ b .L529 ++ .size select_l2p_ram_region, .-select_l2p_ram_region ++ .align 2 ++ .global FtlUpdateVaildLpn ++ .type FtlUpdateVaildLpn, %function ++FtlUpdateVaildLpn: ++ adrp x1, .LANCHOR2 ++ add x3, x1, :lo12:.LANCHOR2 ++ ldrh w2, [x3, 714] ++ cmp w2, 4 ++ bhi .L536 ++ cbnz w0, .L536 ++ add w2, w2, 1 ++ strh w2, [x3, 714] ++ ret ++.L536: ++ add x0, x1, :lo12:.LANCHOR2 ++ adrp x1, .LANCHOR0+2480 ++ mov w6, 65535 ++ ldrh w4, [x1, #:lo12:.LANCHOR0+2480] ++ mov x1, 0 ++ ldr x5, [x0, 520] ++ strh wzr, [x0, 714] ++ str wzr, [x0, 716] ++.L537: ++ cmp w4, w1, uxth ++ bhi .L539 ++ ret ++.L539: ++ ldrh w3, [x5, x1, lsl 1] ++ cmp w3, w6 ++ beq .L538 ++ ldr w2, [x0, 716] ++ add w2, w2, w3 ++ str w2, [x0, 716] ++.L538: ++ add x1, x1, 1 ++ b .L537 ++ .size FtlUpdateVaildLpn, .-FtlUpdateVaildLpn ++ .align 2 ++ .global ftl_set_blk_mode ++ .type ftl_set_blk_mode, %function ++ftl_set_blk_mode: ++ and w0, w0, 65535 ++ cbz w1, .L542 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl ftl_set_blk_mode.part.9 ++ ldp x29, x30, [sp], 16 ++ ret ++.L542: ++ adrp x1, .LANCHOR0+64 ++ ubfx x2, x0, 5, 11 ++ lsl x2, x2, 2 ++ ldr x3, [x1, #:lo12:.LANCHOR0+64] ++ mov w1, 1 ++ lsl w0, w1, w0 ++ ldr w1, [x3, x2] ++ bic w0, w1, w0 ++ str w0, [x3, x2] ++ 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: ++ and w1, w0, 65535 ++ adrp x0, .LANCHOR0+64 ++ ldr x0, [x0, #:lo12:.LANCHOR0+64] ++ ubfx x2, x1, 5, 11 ++ ldr w0, [x0, x2, lsl 2] ++ lsr w0, w0, w1 ++ and w0, w0, 1 ++ ret ++ .size ftl_get_blk_mode, .-ftl_get_blk_mode ++ .align 2 ++ .global ftl_sb_update_avl_pages ++ .type ftl_sb_update_avl_pages, %function ++ftl_sb_update_avl_pages: ++ and w6, w1, 65535 ++ adrp x4, .LANCHOR0 ++ add x1, x4, :lo12:.LANCHOR0 ++ and w2, w2, 65535 ++ strh wzr, [x0, 4] ++ ldrh w3, [x1, 2472] ++ mov w1, 65535 ++.L550: ++ cmp w3, w2, uxth ++ bhi .L552 ++ add x4, x4, :lo12:.LANCHOR0 ++ ubfiz x3, x3, 1, 16 ++ add x3, x3, 16 ++ add x2, x0, 16 ++ add x3, x0, x3 ++ mov w5, 65535 ++ ldrh w1, [x4, 2544] ++ sub w1, w1, #1 ++ and w1, w1, 65535 ++ sub w1, w1, w6 ++.L553: ++ cmp x2, x3 ++ bne .L555 ++ ret ++.L552: ++ add x5, x0, w2, sxtw 1 ++ ldrh w5, [x5, 16] ++ cmp w5, w1 ++ beq .L551 ++ ldrh w5, [x0, 4] ++ add w5, w5, 1 ++ strh w5, [x0, 4] ++.L551: ++ add w2, w2, 1 ++ b .L550 ++.L555: ++ ldrh w4, [x2] ++ cmp w4, w5 ++ beq .L554 ++ ldrh w4, [x0, 4] ++ add w4, w1, w4 ++ strh w4, [x0, 4] ++.L554: ++ add x2, x2, 2 ++ b .L553 ++ .size ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages ++ .align 2 ++ .global make_superblock ++ .type make_superblock, %function ++make_superblock: ++ mov x5, x0 ++ strh wzr, [x0, 4] ++ strb wzr, [x0, 7] ++ adrp x6, .LANCHOR0 ++ add x0, x6, :lo12:.LANCHOR0 ++ mov x7, 0 ++ add x8, x5, 16 ++ add x9, x0, 2504 ++ mov w11, -1 ++ ldrh w10, [x0, 2472] ++ cmp w10, w7, uxth ++ bhi .L576 ++ add x1, x6, :lo12:.LANCHOR0 ++ ldrb w0, [x5, 7] ++ strb wzr, [x5, 9] ++ ldrh w2, [x1, 2544] ++ mul w0, w0, w2 ++ strh w0, [x5, 4] ++ ldr w0, [x1, 2372] ++ cbz w0, .L572 ++ adrp x0, .LANCHOR2+440 ++ ldrh w1, [x5] ++ ldr x0, [x0, #:lo12:.LANCHOR2+440] ++ ldrh w0, [x0, x1, lsl 1] ++ cmp w0, 79 ++ bhi .L572 ++ mov w0, 1 ++ strb w0, [x5, 9] ++.L572: ++ add x6, x6, :lo12:.LANCHOR0 ++ ldrb w0, [x6, 72] ++ cbz w0, .L575 ++ mov w0, 1 ++ strb w0, [x5, 9] ++.L575: ++ mov w0, 0 ++ ret ++.L576: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++.L559: ++ ldrh w1, [x5] ++ ldrb w0, [x9, x7] ++ bl V2P_block ++ mov w4, w0 ++ strh w11, [x8] ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L558 ++ strh w4, [x8] ++ ldrb w0, [x5, 7] ++ add w0, w0, 1 ++ strb w0, [x5, 7] ++.L558: ++ add x7, x7, 1 ++ add x8, x8, 2 ++ cmp w10, w7, uxth ++ bhi .L559 ++ add x1, x6, :lo12:.LANCHOR0 ++ ldrb w0, [x5, 7] ++ strb wzr, [x5, 9] ++ ldrh w2, [x1, 2544] ++ mul w0, w0, w2 ++ strh w0, [x5, 4] ++ ldr w0, [x1, 2372] ++ cbz w0, .L560 ++ adrp x0, .LANCHOR2+440 ++ ldrh w1, [x5] ++ ldr x0, [x0, #:lo12:.LANCHOR2+440] ++ ldrh w0, [x0, x1, lsl 1] ++ cmp w0, 79 ++ bhi .L560 ++ mov w0, 1 ++ strb w0, [x5, 9] ++.L560: ++ add x6, x6, :lo12:.LANCHOR0 ++ ldrb w0, [x6, 72] ++ cbz w0, .L561 ++ mov w0, 1 ++ strb w0, [x5, 9] ++.L561: ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size make_superblock, .-make_superblock ++ .align 2 ++ .global update_multiplier_value ++ .type update_multiplier_value, %function ++update_multiplier_value: ++ and w7, w0, 65535 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov x8, 0 ++ mov w6, 0 ++ add x5, x0, 2504 ++ ldrh w9, [x0, 2472] ++ ldrh w10, [x0, 2544] ++ cmp w9, w8, uxth ++ bhi .L589 ++ cbz w6, .L587 ++ mov w0, 32768 ++ sdiv w6, w0, w6 ++.L588: ++ adrp x0, .LANCHOR2+504 ++ mov w1, 6 ++ ldr x0, [x0, #:lo12:.LANCHOR2+504] ++ umaddl x7, w7, w1, x0 ++ mov w0, 0 ++ strh w6, [x7, 4] ++ ret ++.L582: ++ mov w6, 0 ++ b .L581 ++.L587: ++ mov w6, 0 ++ b .L588 ++.L589: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++.L580: ++ ldrb w0, [x5, x8] ++ mov w1, w7 ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L579 ++ add w6, w6, w10 ++ and w6, w6, 65535 ++.L579: ++ add x8, x8, 1 ++ cmp w9, w8, uxth ++ bhi .L580 ++ cbz w6, .L582 ++ mov w0, 32768 ++ sdiv w6, w0, w6 ++.L581: ++ adrp x0, .LANCHOR2+504 ++ mov w1, 6 ++ ldr x0, [x0, #:lo12:.LANCHOR2+504] ++ umaddl x7, w7, w1, x0 ++ mov w0, 0 ++ strh w6, [x7, 4] ++ ldp x29, x30, [sp], 16 ++ ret ++ .size update_multiplier_value, .-update_multiplier_value ++ .align 2 ++ .global GetFreeBlockMinEraseCount ++ .type GetFreeBlockMinEraseCount, %function ++GetFreeBlockMinEraseCount: ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ ldr x0, [x1, 544] ++ cbz x0, .L592 ++ ldr x2, [x1, 504] ++ ldr x1, [x1, 440] ++ sub x0, x0, x2 ++ mov x2, -6148914691236517206 ++ asr x0, x0, 1 ++ movk x2, 0xaaab, lsl 0 ++ mul x0, x0, x2 ++ and x0, x0, 65535 ++ ldrh w0, [x1, x0, lsl 1] ++ ret ++.L592: ++ mov w0, 0 ++ ret ++ .size GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount ++ .align 2 ++ .global GetFreeBlockMaxEraseCount ++ .type GetFreeBlockMaxEraseCount, %function ++GetFreeBlockMaxEraseCount: ++ adrp x2, .LANCHOR2 ++ add x4, x2, :lo12:.LANCHOR2 ++ and w0, w0, 65535 ++ ldr x1, [x4, 544] ++ cbz x1, .L600 ++ ldrh w3, [x4, 552] ++ mov w5, 7 ++ ldr x4, [x4, 504] ++ mov w6, 6 ++ mov w7, 65535 ++ sub x1, x1, x4 ++ mul w3, w3, w5 ++ asr x1, x1, 1 ++ asr w3, w3, 3 ++ cmp w0, w3 ++ csel w0, w3, w0, gt ++ mov x3, -6148914691236517206 ++ movk x3, 0xaaab, lsl 0 ++ mul x1, x1, x3 ++ mov w3, 0 ++ and w1, w1, 65535 ++.L596: ++ cmp w0, w3 ++ beq .L599 ++ umull x5, w1, w6 ++ ldrh w5, [x4, x5] ++ cmp w5, w7 ++ bne .L597 ++.L599: ++ add x2, x2, :lo12:.LANCHOR2 ++ ubfiz x1, x1, 1, 16 ++ ldr x0, [x2, 440] ++ ldrh w0, [x0, x1] ++ ret ++.L597: ++ add w3, w3, 1 ++ mov w1, w5 ++ and w3, w3, 65535 ++ b .L596 ++.L600: ++ mov w0, 0 ++ ret ++ .size GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount ++ .align 2 ++ .global FtlPrintInfo2buf ++ .type FtlPrintInfo2buf, %function ++FtlPrintInfo2buf: ++ stp x29, x30, [sp, -112]! ++ adrp x1, .LC5 ++ add x1, x1, :lo12:.LC5 ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ adrp x24, .LANCHOR0 ++ add x24, x24, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ add x20, x0, 12 ++ stp x25, x26, [sp, 64] ++ mov x22, x0 ++ str x27, [sp, 80] ++ bl strcpy ++ ldr w2, [x24, 176] ++ mov x0, x20 ++ adrp x1, .LC6 ++ add x1, x1, :lo12:.LC6 ++ bl sprintf ++ add x20, x20, w0, sxtw ++ ldr w2, [x24, 2560] ++ mov x0, x20 ++ adrp x1, .LC7 ++ add x1, x1, :lo12:.LC7 ++ bl sprintf ++ add x20, x20, w0, sxtw ++ adrp x0, .LANCHOR1+504 ++ ldr w0, [x0, #:lo12:.LANCHOR1+504] ++ cmp w0, 1 ++ beq .L602 ++ sub w0, w20, w22 ++.L601: ++ 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 ++.L602: ++ add x3, x29, 108 ++ add x2, x29, 104 ++ add x1, x29, 100 ++ add x0, x29, 96 ++ bl NandcGetTimeCfg ++ adrp x25, .LANCHOR2 ++ ldp w4, w5, [x29, 104] ++ adrp x1, .LC8 ++ ldp w2, w3, [x29, 96] ++ add x1, x1, :lo12:.LC8 ++ mov x0, x20 ++ add x23, x25, :lo12:.LANCHOR2 ++ bl sprintf ++ add x21, x20, w0, sxtw ++ mov x0, x21 ++ adrp x1, .LC9 ++ add x1, x1, :lo12:.LC9 ++ bl strcpy ++ ldr w2, [x24, 2616] ++ add x21, x21, 10 ++ mov x0, x21 ++ adrp x1, .LC10 ++ add x1, x1, :lo12:.LC10 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 716] ++ mov x0, x21 ++ adrp x1, .LC11 ++ add x1, x1, :lo12:.LC11 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 720] ++ mov x0, x21 ++ adrp x1, .LC12 ++ add x1, x1, :lo12:.LC12 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 724] ++ mov x0, x21 ++ adrp x1, .LC13 ++ add x1, x1, :lo12:.LC13 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 728] ++ mov x0, x21 ++ adrp x1, .LC14 ++ add x1, x1, :lo12:.LC14 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 732] ++ mov x0, x21 ++ adrp x1, .LC15 ++ add x1, x1, :lo12:.LC15 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 736] ++ mov x0, x21 ++ adrp x1, .LC16 ++ add x1, x1, :lo12:.LC16 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 740] ++ mov x0, x21 ++ adrp x1, .LC17 ++ add x1, x1, :lo12:.LC17 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 744] ++ mov x0, x21 ++ adrp x1, .LC18 ++ add x1, x1, :lo12:.LC18 ++ lsr w2, w2, 11 ++ bl sprintf ++ ldr w2, [x23, 748] ++ add x21, x21, w0, sxtw ++ mov x0, x21 ++ adrp x1, .LC19 ++ add x1, x1, :lo12:.LC19 ++ lsr w2, w2, 11 ++ bl sprintf ++ ldr w2, [x23, 752] ++ add x21, x21, w0, sxtw ++ mov x0, x21 ++ adrp x1, .LC20 ++ add x1, x1, :lo12:.LC20 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 756] ++ adrp x1, .LC21 ++ add x1, x1, :lo12:.LC21 ++ mov x0, x21 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ bl FtlBbtCalcTotleCnt ++ and w3, w0, 65535 ++ ldrh w2, [x24, 2630] ++ mov x0, x21 ++ adrp x1, .LC22 ++ add x1, x1, :lo12:.LC22 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 552] ++ mov x0, x21 ++ adrp x1, .LC23 ++ add x1, x1, :lo12:.LC23 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 760] ++ mov x0, x21 ++ adrp x1, .LC24 ++ add x1, x1, :lo12:.LC24 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 764] ++ mov x0, x21 ++ adrp x1, .LC25 ++ add x1, x1, :lo12:.LC25 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 768] ++ mov x0, x21 ++ adrp x1, .LC26 ++ add x1, x1, :lo12:.LC26 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 448] ++ mov x0, x21 ++ adrp x1, .LC27 ++ add x1, x1, :lo12:.LC27 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 772] ++ mov x0, x21 ++ adrp x1, .LC28 ++ add x1, x1, :lo12:.LC28 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x23, 776] ++ mov x0, x21 ++ adrp x1, .LC29 ++ add x1, x1, :lo12:.LC29 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 486] ++ mov x0, x21 ++ adrp x1, .LC30 ++ add x1, x1, :lo12:.LC30 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 484] ++ mov x0, x21 ++ adrp x1, .LC31 ++ add x1, x1, :lo12:.LC31 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x24, 2584] ++ mov x0, x21 ++ adrp x1, .LC32 ++ add x1, x1, :lo12:.LC32 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x24, 2576] ++ mov x0, x21 ++ adrp x1, .LC33 ++ add x1, x1, :lo12:.LC33 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x24, 2468] ++ mov x0, x21 ++ adrp x1, .LC34 ++ add x1, x1, :lo12:.LC34 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x24, 2726] ++ mov x0, x21 ++ adrp x1, .LC35 ++ add x1, x1, :lo12:.LC35 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x24, 2480] ++ mov x0, x21 ++ adrp x1, .LC36 ++ add x1, x1, :lo12:.LC36 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 780] ++ mov x0, x21 ++ adrp x1, .LC37 ++ add x1, x1, :lo12:.LC37 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x24, 2484] ++ mov x0, x21 ++ adrp x1, .LC38 ++ add x1, x1, :lo12:.LC38 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 784] ++ mov x0, x21 ++ adrp x1, .LC39 ++ add x1, x1, :lo12:.LC39 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x24, 2624] ++ mov x0, x21 ++ adrp x1, .LC40 ++ add x1, x1, :lo12:.LC40 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 562] ++ mov x0, x21 ++ adrp x1, .LC41 ++ add x1, x1, :lo12:.LC41 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x23, 566] ++ mov x0, x21 ++ adrp x1, .LC42 ++ add x1, x1, :lo12:.LC42 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 560] ++ mov x0, x21 ++ adrp x1, .LC43 ++ add x1, x1, :lo12:.LC43 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x23, 568] ++ mov x0, x21 ++ adrp x1, .LC44 ++ add x1, x1, :lo12:.LC44 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 564] ++ mov x0, x21 ++ adrp x1, .LC45 ++ add x1, x1, :lo12:.LC45 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w1, [x23, 560] ++ ldr x0, [x23, 520] ++ ldrh w2, [x0, x1, lsl 1] ++ mov x0, x21 ++ adrp x1, .LC46 ++ add x1, x1, :lo12:.LC46 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 610] ++ mov x0, x21 ++ adrp x1, .LC47 ++ add x1, x1, :lo12:.LC47 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x23, 614] ++ mov x0, x21 ++ adrp x1, .LC48 ++ add x1, x1, :lo12:.LC48 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 608] ++ mov x0, x21 ++ adrp x1, .LC49 ++ add x1, x1, :lo12:.LC49 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x23, 616] ++ mov x0, x21 ++ adrp x1, .LC50 ++ add x1, x1, :lo12:.LC50 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 612] ++ mov x0, x21 ++ adrp x1, .LC51 ++ add x1, x1, :lo12:.LC51 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w1, [x23, 608] ++ ldr x0, [x23, 520] ++ ldrh w2, [x0, x1, lsl 1] ++ mov x0, x21 ++ adrp x1, .LC52 ++ add x1, x1, :lo12:.LC52 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 658] ++ mov x0, x21 ++ adrp x1, .LC53 ++ add x1, x1, :lo12:.LC53 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x23, 662] ++ mov x0, x21 ++ adrp x1, .LC54 ++ add x1, x1, :lo12:.LC54 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 656] ++ mov x0, x21 ++ adrp x1, .LC55 ++ add x1, x1, :lo12:.LC55 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x23, 664] ++ mov x0, x21 ++ adrp x1, .LC56 ++ add x1, x1, :lo12:.LC56 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 660] ++ mov x0, x21 ++ adrp x1, .LC57 ++ add x1, x1, :lo12:.LC57 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 802] ++ mov x0, x21 ++ adrp x1, .LC58 ++ add x1, x1, :lo12:.LC58 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x23, 806] ++ mov x0, x21 ++ adrp x1, .LC59 ++ add x1, x1, :lo12:.LC59 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 800] ++ mov x0, x21 ++ adrp x1, .LC60 ++ add x1, x1, :lo12:.LC60 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x23, 808] ++ mov x0, x21 ++ adrp x1, .LC61 ++ add x1, x1, :lo12:.LC61 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x23, 804] ++ mov x0, x21 ++ adrp x1, .LC62 ++ add x1, x1, :lo12:.LC62 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w5, [x23, 924] ++ adrp x1, .LC63 ++ ldr w3, [x23, 928] ++ add x1, x1, :lo12:.LC63 ++ ldr w4, [x23, 932] ++ ldr w0, [x24, 2372] ++ ldr w2, [x23, 1360] ++ orr w2, w0, w2, lsl 8 ++ mov x0, x21 ++ bl sprintf ++ add x19, x21, w0, sxtw ++ ldr w2, [x23, 920] ++ mov x0, x19 ++ adrp x1, .LC64 ++ add x1, x1, :lo12:.LC64 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr w2, [x23, 944] ++ mov x0, x19 ++ adrp x1, .LC65 ++ add x1, x1, :lo12:.LC65 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x23, 1364] ++ mov x0, x19 ++ adrp x1, .LC66 ++ add x1, x1, :lo12:.LC66 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x23, 1366] ++ mov x0, x19 ++ adrp x1, .LC67 ++ add x1, x1, :lo12:.LC67 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr w2, [x23, 1368] ++ mov x0, x19 ++ adrp x1, .LC68 ++ add x1, x1, :lo12:.LC68 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x23, 1372] ++ adrp x1, .LC69 ++ add x1, x1, :lo12:.LC69 ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ bl GetFreeBlockMinEraseCount ++ and w2, w0, 65535 ++ adrp x1, .LC70 ++ mov x0, x19 ++ add x1, x1, :lo12:.LC70 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w0, [x23, 552] ++ bl GetFreeBlockMaxEraseCount ++ and w2, w0, 65535 ++ adrp x1, .LC71 ++ mov x0, x19 ++ add x1, x1, :lo12:.LC71 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w0, [x23, 800] ++ mov w1, 65535 ++ cmp w0, w1 ++ beq .L604 ++ ldr x1, [x23, 520] ++ ubfiz x0, x0, 1, 16 ++ ldrh w2, [x1, x0] ++ mov x0, x19 ++ adrp x1, .LC72 ++ add x1, x1, :lo12:.LC72 ++ bl sprintf ++ add x19, x19, w0, sxtw ++.L604: ++ mov w0, 0 ++ adrp x23, .LC73 ++ bl List_get_gc_head_node ++ add x21, x25, :lo12:.LANCHOR2 ++ and w3, w0, 65535 ++ add x23, x23, :lo12:.LC73 ++ mov w20, 0 ++ mov w27, 65535 ++ mov w26, 6 ++.L606: ++ cmp w3, w27 ++ beq .L605 ++ umull x24, w3, w26 ++ ldr x0, [x21, 504] ++ ldr x4, [x21, 440] ++ ubfiz x1, x3, 1, 16 ++ ldr x2, [x21, 520] ++ add x0, x0, x24 ++ ldrh w6, [x4, x1] ++ ldrh w5, [x0, 4] ++ mov x0, x19 ++ ldrh w4, [x2, x1] ++ mov w2, w20 ++ mov x1, x23 ++ add w20, w20, 1 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 504] ++ cmp w20, 16 ++ ldrh w3, [x0, x24] ++ bne .L606 ++.L605: ++ add x25, x25, :lo12:.LANCHOR2 ++ adrp x21, .LC74 ++ add x21, x21, :lo12:.LC74 ++ mov w20, 0 ++ mov w24, 65535 ++ mov w26, 6 ++ ldr x0, [x25, 504] ++ ldr x3, [x25, 544] ++ sub x3, x3, x0 ++ mov x0, -6148914691236517206 ++ asr x3, x3, 1 ++ movk x0, 0xaaab, lsl 0 ++ mul x3, x3, x0 ++ and w3, w3, 65535 ++.L608: ++ cmp w3, w24 ++ beq .L607 ++ umull x23, w3, w26 ++ ldr x0, [x25, 504] ++ ldr x2, [x25, 440] ++ ubfiz x1, x3, 1, 16 ++ add x0, x0, x23 ++ ldrh w5, [x2, x1] ++ mov w2, w20 ++ ldrh w4, [x0, 4] ++ mov x1, x21 ++ mov x0, x19 ++ add w20, w20, 1 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ cmp w20, 4 ++ beq .L607 ++ ldr x0, [x25, 504] ++ ldrh w3, [x0, x23] ++ b .L608 ++.L607: ++ sub w0, w19, w22 ++ b .L601 ++ .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 x2, .LC75 ++ adrp x1, .LC76 ++ add x2, x2, :lo12:.LC75 ++ add x29, sp, 0 ++ add x1, x1, :lo12:.LC76 ++ stp x19, x20, [sp, 16] ++ mov x20, x0 ++ bl sprintf ++ add x19, x20, w0, sxtw ++ mov x0, x19 ++ bl FtlPrintInfo2buf ++ add x0, x19, w0, 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, -32]! ++ adrp x8, .LANCHOR2 ++ add x0, x8, :lo12:.LANCHOR2 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ ldr w2, [x0, 768] ++ ldr w1, [x0, 776] ++ cmp w2, w1 ++ bcs .L617 ++ adrp x1, .LANCHOR0 ++ add x2, x1, :lo12:.LANCHOR0 ++ ldr x5, [x0, 440] ++ str wzr, [x0, 760] ++ ldrh w3, [x2, 2480] ++ mov x2, 0 ++.L618: ++ cmp w3, w2 ++ bhi .L619 ++ add x2, x8, :lo12:.LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR0 ++ ldr w0, [x2, 760] ++ ldrh w1, [x1, 2536] ++ udiv w3, w0, w3 ++ str w3, [x2, 768] ++ ldr w3, [x2, 764] ++ sub w0, w0, w3 ++ udiv w0, w0, w1 ++ str w0, [x2, 760] ++.L620: ++ add x1, x8, :lo12:.LANCHOR2 ++ ldr w9, [x1, 776] ++ ldr w10, [x1, 768] ++ add w0, w9, 256 ++ cmp w0, w10 ++ bls .L625 ++ ldr w1, [x1, 772] ++ add w0, w9, 768 ++ cmp w0, w1 ++ bls .L625 ++ adrp x0, .LANCHOR0+2372 ++ ldr w0, [x0, #:lo12:.LANCHOR0+2372] ++ cbnz w0, .L626 ++.L628: ++ mov w20, 65535 ++.L627: ++ mov w0, w20 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L619: ++ ldrh w4, [x5, x2, lsl 1] ++ add x2, x2, 1 ++ ldr w6, [x0, 760] ++ add w4, w4, w6 ++ str w4, [x0, 760] ++ b .L618 ++.L617: ++ ldr w1, [x0, 772] ++ cmp w2, w1 ++ bls .L620 ++ add w1, w1, 1 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ str w1, [x0, 772] ++ mov w1, 0 ++.L622: ++ ldrh w3, [x2, 2480] ++ cmp w1, w3 ++ bcs .L620 ++ ldr x5, [x0, 440] ++ ubfiz x4, x1, 1, 32 ++ add w1, w1, 1 ++ ldrh w3, [x5, x4] ++ add w3, w3, 1 ++ strh w3, [x5, x4] ++ b .L622 ++.L626: ++ cmp w9, 40 ++ bhi .L628 ++.L625: ++ add x0, x8, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 552] ++ add w0, w0, w0, lsl 1 ++ lsr w0, w0, 2 ++ bl GetFreeBlockMaxEraseCount ++ and w6, w0, 65535 ++ add w0, w9, 64 ++ cmp w6, w0 ++ bcs .L629 ++ cmp w9, 40 ++ bhi .L628 ++.L629: ++ add x1, x8, :lo12:.LANCHOR2 ++ ldr x0, [x1, 512] ++ cbz x0, .L628 ++ adrp x2, .LANCHOR0+2480 ++ mov w4, 65535 ++ mov x13, -6148914691236517206 ++ mov w11, w4 ++ ldrh w12, [x2, #:lo12:.LANCHOR0+2480] ++ mov w2, w4 ++ ldr x5, [x1, 440] ++ movk x13, 0xaaab, lsl 0 ++ ldr x7, [x1, 504] ++ mov w14, 6 ++ mov w1, 0 ++.L630: ++ ldrh w3, [x0] ++ cmp w3, w11 ++ bne .L633 ++ mov w20, w2 ++.L632: ++ mov w0, 65535 ++ cmp w20, w0 ++ beq .L628 ++ ubfiz x7, x20, 1, 32 ++ ldrh w3, [x5, x7] ++ cmp w9, w3 ++ bcs .L634 ++ bl GetFreeBlockMinEraseCount ++ cmp w9, w0, uxth ++ bcs .L634 ++ add x0, x8, :lo12:.LANCHOR2 ++ str w4, [x0, 776] ++.L634: ++ cmp w10, w3 ++ bls .L628 ++ add w0, w3, 128 ++ cmp w6, w0 ++ ble .L628 ++ add w0, w3, 256 ++ cmp w10, w0 ++ bhi .L635 ++ add x0, x8, :lo12:.LANCHOR2 ++ add w3, w3, 768 ++ ldr w0, [x0, 772] ++ cmp w3, w0 ++ bcs .L628 ++.L635: ++ add x19, x8, :lo12:.LANCHOR2 ++ ldrh w5, [x5, x7] ++ mov w2, w10 ++ mov w1, w20 ++ ldr x0, [x19, 520] ++ ldr w3, [x19, 772] ++ ldrh w4, [x0, x7] ++ adrp x0, .LC77 ++ add x0, x0, :lo12:.LC77 ++ bl printk ++ mov w0, 1 ++ str w0, [x19, 1376] ++ b .L627 ++.L633: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ cmp w1, w12 ++ bhi .L628 ++ ldrh w15, [x0, 4] ++ cbz w15, .L631 ++ sub x0, x0, x7 ++ asr x0, x0, 1 ++ mul x0, x0, x13 ++ and w20, w0, 65535 ++ and x0, x0, 65535 ++ ldrh w0, [x5, x0, lsl 1] ++ cmp w9, w0 ++ bcs .L632 ++ cmp w4, w0 ++ bls .L631 ++ mov w4, w0 ++ mov w2, w20 ++.L631: ++ umaddl x0, w3, w14, x7 ++ b .L630 ++ .size GetSwlReplaceBlock, .-GetSwlReplaceBlock ++ .align 2 ++ .global free_data_superblock ++ .type free_data_superblock, %function ++free_data_superblock: ++ and w0, w0, 65535 ++ mov w1, 65535 ++ cmp w0, w1 ++ beq .L646 ++ stp x29, x30, [sp, -16]! ++ adrp x2, .LANCHOR2+520 ++ ubfiz x1, x0, 1, 16 ++ add x29, sp, 0 ++ ldr x2, [x2, #:lo12:.LANCHOR2+520] ++ strh wzr, [x2, x1] ++ bl INSERT_FREE_LIST ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L646: ++ mov w0, 0 ++ ret ++ .size free_data_superblock, .-free_data_superblock ++ .align 2 ++ .global FtlGcBufInit ++ .type FtlGcBufInit, %function ++FtlGcBufInit: ++ adrp x0, .LANCHOR2 ++ add x1, x0, :lo12:.LANCHOR2 ++ adrp x3, .LANCHOR0 ++ mov x7, x0 ++ add x9, x3, :lo12:.LANCHOR0 ++ mov w8, 0 ++ mov w10, 24 ++ mov w11, 1 ++ mov w4, 4 ++ mov w12, 56 ++ str wzr, [x1, 1380] ++.L650: ++ ldrh w0, [x9, 2472] ++ cmp w8, w0 ++ bcc .L651 ++ add x3, x3, :lo12:.LANCHOR0 ++ add x1, x7, :lo12:.LANCHOR2 ++ mov w6, 4 ++ mov w7, 24 ++.L652: ++ ldr w2, [x1, 1416] ++ cmp w0, w2 ++ bcc .L653 ++ ret ++.L651: ++ umull x2, w8, w10 ++ ldr x5, [x1, 1384] ++ ldr x6, [x1, 1392] ++ add x0, x5, x2 ++ str w11, [x0, 16] ++ ldrh w0, [x9, 2554] ++ mul w0, w0, w8 ++ sdiv w0, w0, w4 ++ add x0, x6, w0, sxtw 2 ++ str x0, [x5, x2] ++ ldrh w0, [x9, 2556] ++ ldr x6, [x1, 1384] ++ ldr x13, [x1, 1400] ++ add x5, x6, x2 ++ mul w0, w0, w8 ++ sdiv w0, w0, w4 ++ add x0, x13, w0, sxtw 2 ++ str x0, [x5, 8] ++ ldr x0, [x1, 1408] ++ ldr x2, [x6, x2] ++ nop // between mem op and mult-accumulate ++ umaddl x0, w8, w12, x0 ++ add w8, w8, 1 ++ and w8, w8, 65535 ++ str x2, [x0, 8] ++ ldr x2, [x5, 8] ++ str x2, [x0, 16] ++ b .L650 ++.L653: ++ umull x5, w0, w7 ++ ldr x4, [x1, 1384] ++ ldr x8, [x1, 1392] ++ add x2, x4, x5 ++ str wzr, [x2, 16] ++ ldrh w2, [x3, 2554] ++ mul w2, w2, w0 ++ sdiv w2, w2, w6 ++ add x2, x8, w2, sxtw 2 ++ str x2, [x4, x5] ++ ldrh w2, [x3, 2556] ++ ldr x4, [x1, 1384] ++ add x4, x4, x5 ++ ldr x5, [x1, 1400] ++ mul w2, w2, w0 ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ sdiv w2, w2, w6 ++ add x2, x5, w2, sxtw 2 ++ str x2, [x4, 8] ++ b .L652 ++ .size FtlGcBufInit, .-FtlGcBufInit ++ .align 2 ++ .global FtlGcBufFree ++ .type FtlGcBufFree, %function ++FtlGcBufFree: ++ adrp x2, .LANCHOR2 ++ add x2, x2, :lo12:.LANCHOR2 ++ mov w3, 0 ++ mov w7, 56 ++ mov w9, 24 ++ ldr w8, [x2, 1416] ++ ldr x4, [x2, 1384] ++.L655: ++ cmp w3, w1 ++ bcs .L654 ++ umaddl x6, w3, w7, x0 ++ mov w2, 0 ++ b .L660 ++.L656: ++ add w2, w2, 1 ++ and w2, w2, 65535 ++.L660: ++ cmp w2, w8 ++ bcs .L657 ++ umull x5, w2, w9 ++ add x10, x4, x5 ++ ldr x11, [x4, x5] ++ ldr x5, [x6, 8] ++ cmp x11, x5 ++ bne .L656 ++ str wzr, [x10, 16] ++.L657: ++ add w3, w3, 1 ++ and w3, w3, 65535 ++ b .L655 ++.L654: ++ ret ++ .size FtlGcBufFree, .-FtlGcBufFree ++ .align 2 ++ .global FtlGcBufAlloc ++ .type FtlGcBufAlloc, %function ++FtlGcBufAlloc: ++ adrp x2, .LANCHOR2 ++ add x2, x2, :lo12:.LANCHOR2 ++ mov w3, 0 ++ mov w7, 24 ++ mov w8, 1 ++ mov w9, 56 ++ ldr w5, [x2, 1416] ++ ldr x6, [x2, 1384] ++.L662: ++ cmp w3, w1 ++ bcs .L661 ++ mov w2, 0 ++ b .L667 ++.L663: ++ add w2, w2, 1 ++ and w2, w2, 65535 ++.L667: ++ cmp w2, w5 ++ bcs .L664 ++ umaddl x4, w2, w7, x6 ++ ldr w10, [x4, 16] ++ cbnz w10, .L663 ++ umaddl x2, w3, w9, x0 ++ ldr x10, [x4] ++ str w8, [x4, 16] ++ str x10, [x2, 8] ++ ldr x4, [x4, 8] ++ str x4, [x2, 16] ++.L664: ++ add w3, w3, 1 ++ and w3, w3, 65535 ++ b .L662 ++.L661: ++ ret ++ .size FtlGcBufAlloc, .-FtlGcBufAlloc ++ .align 2 ++ .global IsBlkInGcList ++ .type IsBlkInGcList, %function ++IsBlkInGcList: ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ and w0, w0, 65535 ++ ldrh w2, [x1, 1420] ++ ldr x3, [x1, 1424] ++ mov x1, 0 ++.L669: ++ cmp w2, w1, uxth ++ bhi .L671 ++ mov w0, 0 ++ ret ++.L671: ++ add x1, x1, 1 ++ add x4, x3, x1, lsl 1 ++ ldrh w4, [x4, -2] ++ cmp w4, w0 ++ bne .L669 ++ mov w0, 1 ++ ret ++ .size IsBlkInGcList, .-IsBlkInGcList ++ .align 2 ++ .global FtlGcUpdatePage ++ .type FtlGcUpdatePage, %function ++FtlGcUpdatePage: ++ mov w5, w0 ++ mov w8, w1 ++ mov w7, w2 ++ stp x29, x30, [sp, -16]! ++ lsr w0, w0, 10 ++ add x29, sp, 0 ++ bl P2V_block_in_plane ++ and w9, w0, 65535 ++ adrp x3, .LANCHOR2 ++ add x4, x3, :lo12:.LANCHOR2 ++ ldrh w1, [x4, 1420] ++ ldr x6, [x4, 1424] ++ mov x4, 0 ++.L674: ++ and w2, w4, 65535 ++ cmp w2, w1 ++ bcc .L676 ++ bne .L675 ++ and x4, x4, 65535 ++ strh w0, [x6, x4, lsl 1] ++ add x4, x3, :lo12:.LANCHOR2 ++ ldrh w0, [x4, 1420] ++ add w0, w0, 1 ++ strh w0, [x4, 1420] ++ b .L675 ++.L676: ++ add x4, x4, 1 ++ add x2, x6, x4, lsl 1 ++ ldrh w2, [x2, -2] ++ cmp w2, w9 ++ bne .L674 ++.L675: ++ add x0, x3, :lo12:.LANCHOR2 ++ mov w1, 12 ++ ldrh w3, [x0, 1432] ++ ldr x4, [x0, 1440] ++ umull x3, w3, w1 ++ add x4, x4, x3 ++ str w8, [x4, 4] ++ ldr x1, [x0, 1440] ++ add x4, x1, x3 ++ str w7, [x4, 8] ++ str w5, [x1, x3] ++ ldrh w1, [x0, 1432] ++ add w1, w1, 1 ++ strh w1, [x0, 1432] ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FtlGcUpdatePage, .-FtlGcUpdatePage ++ .align 2 ++ .global FtlGcRefreshOpenBlock ++ .type FtlGcRefreshOpenBlock, %function ++FtlGcRefreshOpenBlock: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ and w20, w0, 65535 ++ ldrh w0, [x19, 1448] ++ cmp w0, w20 ++ beq .L680 ++ ldrh w0, [x19, 1450] ++ cmp w0, w20 ++ beq .L680 ++ ldrh w0, [x19, 1452] ++ cmp w0, w20 ++ beq .L680 ++ ldrh w0, [x19, 1454] ++ cmp w0, w20 ++ beq .L680 ++ mov w1, w20 ++ adrp x0, .LC78 ++ add x0, x0, :lo12:.LC78 ++ bl printk ++ ldrh w1, [x19, 1448] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L682 ++ strh w20, [x19, 1448] ++.L680: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L682: ++ ldrh w1, [x19, 1450] ++ cmp w1, w0 ++ bne .L683 ++ strh w20, [x19, 1450] ++ b .L680 ++.L683: ++ ldrh w1, [x19, 1452] ++ cmp w1, w0 ++ bne .L684 ++ strh w20, [x19, 1452] ++ b .L680 ++.L684: ++ ldrh w1, [x19, 1454] ++ cmp w1, w0 ++ bne .L680 ++ strh w20, [x19, 1454] ++ b .L680 ++ .size FtlGcRefreshOpenBlock, .-FtlGcRefreshOpenBlock ++ .align 2 ++ .global FtlGcRefreshBlock ++ .type FtlGcRefreshBlock, %function ++FtlGcRefreshBlock: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ and w20, w0, 65535 ++ str x21, [sp, 32] ++ ldrh w0, [x19, 1448] ++ cmp w0, w20 ++ beq .L693 ++ ldrh w0, [x19, 1450] ++ cmp w0, w20 ++ beq .L693 ++ ldrh w0, [x19, 1452] ++ cmp w0, w20 ++ beq .L693 ++ ldrh w0, [x19, 1454] ++ mov w21, 0 ++ cmp w0, w20 ++ beq .L686 ++ mov w1, w20 ++ adrp x0, .LC78 ++ add x0, x0, :lo12:.LC78 ++ bl printk ++ ldrh w1, [x19, 1448] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L688 ++ strh w20, [x19, 1448] ++.L686: ++ mov w0, w21 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L688: ++ ldrh w1, [x19, 1450] ++ cmp w1, w0 ++ bne .L689 ++ strh w20, [x19, 1450] ++ b .L686 ++.L689: ++ ldrh w1, [x19, 1452] ++ cmp w1, w0 ++ bne .L690 ++ strh w20, [x19, 1452] ++ b .L686 ++.L690: ++ ldrh w1, [x19, 1454] ++ cmp w1, w0 ++ bne .L695 ++ strh w20, [x19, 1454] ++ b .L686 ++.L693: ++ mov w21, 0 ++ b .L686 ++.L695: ++ mov w21, -1 ++ b .L686 ++ .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] ++ adrp x19, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ add x22, x19, :lo12:.LANCHOR2 ++ and w20, w0, 65535 ++ str x23, [sp, 48] ++ mov w0, w20 ++ bl P2V_block_in_plane ++ ldrh w1, [x22, 1456] ++ mov w2, w20 ++ and w21, w0, 65535 ++ adrp x0, .LC79 ++ add x0, x0, :lo12:.LC79 ++ bl printk ++ mov w0, w21 ++ bl FtlGcRefreshBlock ++ adrp x0, .LANCHOR0+2372 ++ ldr w0, [x0, #:lo12:.LANCHOR0+2372] ++ cbz w0, .L698 ++ ldr x2, [x22, 440] ++ ubfiz x0, x21, 1, 16 ++ ldrh w1, [x2, x0] ++ cmp w1, 39 ++ bls .L698 ++ sub w1, w1, #40 ++ strh w1, [x2, x0] ++.L698: ++ add x2, x19, :lo12:.LANCHOR2 ++ mov x1, 0 ++ add x2, x2, 1464 ++ ldrh w0, [x2, -8] ++.L699: ++ cmp w0, w1, uxth ++ bhi .L701 ++ cmp w0, 15 ++ bhi .L700 ++ add x19, x19, :lo12:.LANCHOR2 ++ add w1, w0, 1 ++ add x19, x19, 1464 ++ strh w1, [x19, -8] ++ strh w20, [x19, w0, sxtw 1] ++ b .L700 ++.L701: ++ add x1, x1, 1 ++ add x3, x2, x1, lsl 1 ++ ldrh w3, [x3, -2] ++ cmp w3, w20 ++ bne .L699 ++.L700: ++ 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, 1456] ++ cbz w1, .L707 ++ ldrh w3, [x0, 1448] ++ mov w2, 65535 ++ cmp w3, w2 ++ bne .L707 ++ ldrh w2, [x0, 1498] ++ cmp w2, w1 ++ bcc .L708 ++ strh wzr, [x0, 1498] ++.L708: ++ add x19, x19, :lo12:.LANCHOR2 ++ add x0, x19, 1464 ++ ldrh w1, [x19, 1498] ++ ldrh w0, [x0, x1, lsl 1] ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ ldrh w0, [x19, 1498] ++ add w0, w0, 1 ++ strh w0, [x19, 1498] ++.L707: ++ mov w0, 0 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FtlGcReFreshBadBlk, .-FtlGcReFreshBadBlk ++ .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 BuildFlashLsbPageTable ++ .type BuildFlashLsbPageTable, %function ++BuildFlashLsbPageTable: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w20, w1 ++ cbnz w0, .L716 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x1, x1, 208 ++ mov x0, 0 ++.L717: ++ strh w0, [x1, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 512 ++ bne .L717 ++.L723: ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ add x19, x19, 1500 ++ mov w1, 255 ++ mov w2, 2048 ++ mov x0, x19 ++ bl ftl_memset ++ and w20, w20, 65535 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ add x0, x0, 208 ++ mov x1, 0 ++.L718: ++ cmp w20, w1, uxth ++ bhi .L751 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L716: ++ cmp w0, 1 ++ bne .L719 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ add x2, x2, 208 ++ mov x1, 0 ++.L722: ++ and w0, w1, 65535 ++ cmp x1, 3 ++ bls .L720 ++ ubfiz w3, w0, 1, 15 ++ and w0, w0, 1 ++ add w0, w0, 2 ++ sub w0, w3, w0 ++ and w0, w0, 65535 ++.L720: ++ strh w0, [x2, x1, lsl 1] ++ add x1, x1, 1 ++ cmp x1, 512 ++ bne .L722 ++ b .L723 ++.L719: ++ cmp w0, 2 ++ bne .L724 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ add x2, x2, 208 ++ mov w1, 65535 ++ mov x0, 0 ++.L726: ++ cmp x0, 2 ++ and w3, w0, 65535 ++ csel w3, w3, w1, cc ++ strh w3, [x2, x0, lsl 1] ++ add w1, w1, 2 ++ add x0, x0, 1 ++ and w1, w1, 65535 ++ cmp x0, 512 ++ bne .L726 ++ b .L723 ++.L724: ++ cmp w0, 3 ++ bne .L727 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ add x2, x2, 208 ++ mov x1, 0 ++.L730: ++ and w0, w1, 65535 ++ cmp x1, 5 ++ bls .L728 ++ ubfiz w3, w0, 1, 15 ++ and w0, w0, 1 ++ add w0, w0, 4 ++ sub w0, w3, w0 ++ and w0, w0, 65535 ++.L728: ++ strh w0, [x2, x1, lsl 1] ++ add x1, x1, 1 ++ cmp x1, 512 ++ bne .L730 ++ b .L723 ++.L727: ++ cmp w0, 4 ++ bne .L731 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ mov w3, 1 ++ add x1, x1, 224 ++ strh w0, [x1, -8] ++ mov w0, 5 ++ strh w3, [x1, -14] ++ mov w3, 2 ++ strh w0, [x1, -6] ++ mov w0, 7 ++ strh w3, [x1, -12] ++ mov w3, 3 ++ strh w0, [x1, -4] ++ mov w0, 8 ++ strh wzr, [x1, -16] ++ strh w0, [x1, -2] ++ mov w0, 8 ++ strh w3, [x1, -10] ++.L733: ++ and w3, w0, 1 ++ ubfiz w2, w0, 1, 15 ++ add w3, w3, 6 ++ add w0, w0, 1 ++ sub w2, w2, w3 ++ strh w2, [x1], 2 ++ and w0, w0, 65535 ++ cmp w0, 512 ++ bne .L733 ++ b .L723 ++.L731: ++ cmp w0, 5 ++ bne .L734 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x2, x1, 208 ++ mov x0, 0 ++.L735: ++ strh w0, [x2, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 16 ++ bne .L735 ++ add x1, x1, 240 ++.L736: ++ strh w0, [x1], 2 ++ add w0, w0, 2 ++ and w0, w0, 65535 ++ cmp w0, 1008 ++ bne .L736 ++ b .L723 ++.L734: ++ cmp w0, 6 ++ bne .L737 ++ adrp x3, .LANCHOR0 ++ add x3, x3, :lo12:.LANCHOR0 ++ add x3, x3, 208 ++ mov w1, 0 ++ mov x2, 0 ++ mov w4, 12 ++ mov w5, 10 ++.L740: ++ and w0, w2, 65535 ++ cmp x2, 5 ++ bls .L738 ++ tst x0, 1 ++ csel w0, w4, w5, ne ++ sub w0, w1, w0 ++ and w0, w0, 65535 ++.L738: ++ strh w0, [x3, x2, lsl 1] ++ add w1, w1, 3 ++ and w1, w1, 65535 ++ add x2, x2, 1 ++ cmp w1, 1536 ++ bne .L740 ++ b .L723 ++.L737: ++ cmp w0, 9 ++ bne .L741 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w2, 1 ++ add x0, x0, 214 ++ mov w1, 3 ++ strh w2, [x0, -4] ++ mov w2, 2 ++ strh wzr, [x0, -6] ++ strh w2, [x0, -2] ++.L742: ++ strh w1, [x0], 2 ++ add w1, w1, 2 ++ and w1, w1, 65535 ++ cmp w1, 1021 ++ bne .L742 ++ b .L723 ++.L741: ++ cmp w0, 10 ++ bne .L743 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x2, x1, 208 ++ mov x0, 0 ++.L744: ++ strh w0, [x2, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 63 ++ bne .L744 ++ add x1, x1, 334 ++.L745: ++ strh w0, [x1], 2 ++ add w0, w0, 2 ++ and w0, w0, 65535 ++ cmp w0, 961 ++ bne .L745 ++ b .L723 ++.L743: ++ cmp w0, 11 ++ bne .L746 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x2, x1, 208 ++ mov x0, 0 ++.L747: ++ strh w0, [x2, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 8 ++ bne .L747 ++ add x1, x1, 224 ++.L749: ++ and w3, w0, 1 ++ ubfiz w2, w0, 1, 15 ++ add w3, w3, 6 ++ add w0, w0, 1 ++ sub w2, w2, w3 ++ strh w2, [x1], 2 ++ and w0, w0, 65535 ++ cmp w0, 512 ++ bne .L749 ++ b .L723 ++.L746: ++ cmp w0, 12 ++ bne .L723 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w2, 1 ++ add x0, x0, 216 ++ mov w1, 4 ++ strh w2, [x0, -6] ++ mov w2, 2 ++ strh wzr, [x0, -8] ++ strh w2, [x0, -4] ++ mov w2, 3 ++ strh w2, [x0, -2] ++.L750: ++ sub w2, w1, #1 ++ add w2, w2, w1, lsr 1 ++ add w1, w1, 1 ++ strh w2, [x0], 2 ++ and w1, w1, 65535 ++ cmp w1, 512 ++ bne .L750 ++ b .L723 ++.L751: ++ ldrh w2, [x0, x1, lsl 1] ++ add x1, x1, 1 ++ strh w2, [x19, w2, sxtw 1] ++ b .L718 ++ .size BuildFlashLsbPageTable, .-BuildFlashLsbPageTable ++ .align 2 ++ .global FlashDieInfoInit ++ .type FlashDieInfoInit, %function ++FlashDieInfoInit: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x0, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ adrp x22, .LANCHOR0 ++ add x19, x22, :lo12:.LANCHOR0 ++ add x20, x19, 1232 ++ strb wzr, [x0, 3548] ++ adrp x0, .LANCHOR1+482 ++ strb wzr, [x19, 2358] ++ ldrh w0, [x0, #:lo12:.LANCHOR1+482] ++ bl FlashBlockAlignInit ++ mov w2, 8 ++ mov w1, 0 ++ add x0, x19, 2360 ++ bl ftl_memset ++ mov w2, 32 ++ mov w1, 0 ++ mov x0, x20 ++ bl ftl_memset ++ mov w2, 192 ++ mov w1, 0 ++ add x0, x19, 2164 ++ bl ftl_memset ++ ldr x7, [x19, 88] ++ add x11, x19, 2132 ++ mov x8, 0 ++ add x12, x7, 1 ++.L775: ++ ldrb w2, [x7] ++ add x1, x11, x8, lsl 3 ++ mov x0, x12 ++ bl FlashMemCmp8 ++ cbnz w0, .L774 ++ ldrb w0, [x19, 2358] ++ add w1, w0, 1 ++ strb w1, [x19, 2358] ++ str wzr, [x20, x0, lsl 2] ++ add x0, x19, x0 ++ strb w8, [x0, 2360] ++.L774: ++ add x8, x8, 1 ++ cmp x8, 4 ++ bne .L775 ++ add x8, x22, :lo12:.LANCHOR0 ++ add x0, x21, :lo12:.LANCHOR2 ++ ldrb w1, [x8, 2358] ++ strb w1, [x0, 3548] ++ ldrb w0, [x7, 8] ++ cmp w0, 2 ++ beq .L776 ++.L780: ++ add x9, x22, :lo12:.LANCHOR0 ++ ldrh w1, [x7, 14] ++ add x10, x21, :lo12:.LANCHOR2 ++ ldp x19, x20, [sp, 16] ++ ldrb w0, [x9, 2358] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ mul w0, w0, w1 ++ ldrb w1, [x7, 13] ++ mul w0, w0, w1 ++ strh w0, [x10, 3550] ++ ret ++.L776: ++ ldr w14, [x8, 76] ++ add x15, x8, 2132 ++ add x13, x8, 1232 ++ mov x11, 0 ++.L779: ++ ldrb w2, [x7] ++ add x1, x15, x11, lsl 3 ++ mov x0, x12 ++ bl FlashMemCmp8 ++ cbnz w0, .L777 ++ ldrb w1, [x7, 13] ++ ldrh w0, [x7, 14] ++ ldrb w2, [x8, 2358] ++ and w0, w0, 65280 ++ mul w1, w1, w14 ++ mul w0, w0, w1 ++ sxtw x1, w2 ++ str w0, [x13, x1, lsl 2] ++ ldrb w3, [x7, 23] ++ cbz w3, .L778 ++ lsl w0, w0, 1 ++ str w0, [x13, x1, lsl 2] ++.L778: ++ add x1, x8, x1 ++ add w2, w2, 1 ++ strb w2, [x8, 2358] ++ strb w11, [x1, 2360] ++.L777: ++ add x11, x11, 1 ++ cmp x11, 4 ++ bne .L779 ++ b .L780 ++ .size FlashDieInfoInit, .-FlashDieInfoInit ++ .align 2 ++ .global ftl_read_flash_info ++ .type ftl_read_flash_info, %function ++ftl_read_flash_info: ++ stp x29, x30, [sp, -32]! ++ mov w2, 11 ++ mov w1, 0 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ mov x19, x0 ++ bl ftl_memset ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w4, 1 ++ ldr x1, [x0, 88] ++ ldrb w2, [x1, 9] ++ ldr w1, [x0, 76] ++ mul w1, w1, w2 ++ mov x2, 0 ++ strh w1, [x19, 4] ++ ldrb w1, [x0, 2464] ++ strb w1, [x19, 7] ++ ldr w1, [x0, 2584] ++ str w1, [x19] ++ ldr x1, [x0, 88] ++ ldrb w3, [x0, 2358] ++ ldrb w1, [x1, 9] ++ strb w1, [x19, 6] ++ mov w1, 32 ++ strb w1, [x19, 8] ++ ldr x1, [x0, 88] ++ add x0, x0, 2360 ++ ldrb w1, [x1, 7] ++ strb w1, [x19, 9] ++ strb wzr, [x19, 10] ++.L789: ++ cmp w3, w2, uxtb ++ bhi .L790 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L790: ++ ldrb w1, [x2, x0] ++ add x2, x2, 1 ++ ldrb w5, [x19, 10] ++ lsl w1, w4, w1 ++ orr w1, w1, w5 ++ strb w1, [x19, 10] ++ b .L789 ++ .size ftl_read_flash_info, .-ftl_read_flash_info ++ .align 2 ++ .global FtlMemInit ++ .type FtlMemInit, %function ++FtlMemInit: ++ stp x29, x30, [sp, -80]! ++ mov w1, 65535 ++ mov w2, 1024 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x0, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ add x3, x0, 512 ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ add x4, x0, 512 ++ strh wzr, [x0, 3552] ++ add x5, x0, 3328 ++ str wzr, [x0, 448] ++ adrp x22, .LANCHOR0 ++ stp wzr, wzr, [x3, 208] ++ stp wzr, wzr, [x3, 216] ++ str wzr, [x0, 736] ++ str wzr, [x0, 740] ++ stp wzr, wzr, [x4, 240] ++ stp wzr, wzr, [x4, 248] ++ str wzr, [x0, 772] ++ str wzr, [x0, 776] ++ str wzr, [x0, 1360] ++ str wzr, [x0, 1368] ++ str wzr, [x0, 1376] ++ stp w1, wzr, [x5, 236] ++ mov w1, -1 ++ stp wzr, wzr, [x5, 228] ++ str wzr, [x0, 3572] ++ strh w1, [x0, 1448] ++ strh w1, [x0, 1450] ++ strh w1, [x0, 1452] ++ strh w1, [x0, 1454] ++ mov w1, 32 ++ strh w1, [x0, 1364] ++ mov w1, 128 ++ strh w1, [x0, 1366] ++ add x1, x22, :lo12:.LANCHOR0 ++ strh wzr, [x0, 1372] ++ strh wzr, [x0, 1456] ++ ldrh w3, [x1, 2550] ++ ldrh w1, [x1, 2472] ++ strh wzr, [x0, 3576] ++ strh wzr, [x0, 1498] ++ sdiv w2, w2, w3 ++ lsl w1, w1, 2 ++ str w2, [x0, 3580] ++ cmp w2, w1 ++ bls .L793 ++ str w1, [x0, 3580] ++.L793: ++ add x20, x22, :lo12:.LANCHOR0 ++ add x19, x21, :lo12:.LANCHOR2 ++ mov w24, 56 ++ ldrh w0, [x20, 2548] ++ str wzr, [x20, 2600] ++ lsl w0, w0, 1 ++ bl ftl_malloc ++ ldrh w1, [x20, 2548] ++ str x0, [x19, 1424] ++ mov w0, 12 ++ mul w0, w1, w0 ++ bl ftl_malloc ++ ldrh w23, [x20, 2472] ++ str x0, [x19, 1440] ++ mul w23, w23, w24 ++ lsl w25, w23, 3 ++ mov w0, w25 ++ bl ftl_malloc ++ str x0, [x19, 3584] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3592] ++ mov w0, w25 ++ bl ftl_malloc ++ str x0, [x19, 3600] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 432] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 1408] ++ ldr w0, [x19, 3580] ++ mul w0, w0, w24 ++ bl ftl_malloc ++ str x0, [x20, 2608] ++ ldrh w0, [x20, 2472] ++ ldrh w23, [x20, 2554] ++ lsl w0, w0, 1 ++ add w0, w0, 1 ++ str w0, [x19, 1416] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3608] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3616] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3624] ++ ldr w0, [x19, 1416] ++ mul w0, w23, w0 ++ bl ftl_malloc ++ str x0, [x19, 1392] ++ ldr w0, [x19, 3580] ++ mul w0, w23, w0 ++ bl ftl_malloc ++ str x0, [x19, 3632] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3640] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3648] ++ ldr w1, [x19, 1416] ++ mov w0, 24 ++ mul w0, w1, w0 ++ bl ftl_malloc ++ ldrh w23, [x20, 2556] ++ str x0, [x19, 1384] ++ ldrh w0, [x20, 2472] ++ mul w23, w23, w0 ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3656] ++ lsl w0, w23, 3 ++ bl ftl_malloc ++ str x0, [x19, 3664] ++ ldrh w1, [x20, 2556] ++ ldr w0, [x19, 1416] ++ mul w0, w1, w0 ++ bl ftl_malloc ++ str x0, [x19, 1400] ++ ldrh w1, [x20, 2556] ++ ldr w0, [x19, 3580] ++ mul w0, w1, w0 ++ bl ftl_malloc ++ str x0, [x19, 3672] ++ ldrh w0, [x20, 2482] ++ ubfiz w0, w0, 1, 15 ++ strh w0, [x19, 3680] ++ and w0, w0, 65534 ++ bl ftl_malloc ++ str x0, [x19, 3688] ++ ldrh w0, [x19, 3680] ++ add x0, x0, 547 ++ lsr x0, x0, 9 ++ strh w0, [x19, 3680] ++ lsl w0, w0, 9 ++ bl ftl_malloc ++ ldrh w23, [x20, 2482] ++ str x0, [x19, 3696] ++ add x0, x0, 32 ++ str x0, [x19, 440] ++ lsl w23, w23, 1 ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3704] ++ mov w0, w23 ++ bl ftl_malloc ++ ldr w23, [x20, 2572] ++ str x0, [x19, 520] ++ lsl w23, w23, 1 ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3712] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3720] ++ ldrh w0, [x20, 2482] ++ lsr w0, w0, 3 ++ add w0, w0, 4 ++ bl ftl_malloc ++ str x0, [x20, 64] ++ ldrh w0, [x20, 2564] ++ lsl w0, w0, 1 ++ bl ftl_malloc ++ str x0, [x20, 2592] ++ ldrh w0, [x20, 2564] ++ lsl w0, w0, 1 ++ bl ftl_malloc ++ str x0, [x19, 3728] ++ ldrh w0, [x20, 2564] ++ lsl w0, w0, 2 ++ bl ftl_malloc ++ str x0, [x19, 3736] ++ ldrh w0, [x20, 2566] ++ lsl w0, w0, 2 ++ bl ftl_malloc ++ ldrh w2, [x20, 2566] ++ mov w1, 0 ++ str x0, [x19, 3744] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldrh w23, [x20, 2580] ++ lsl w23, w23, 2 ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3752] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 3760] ++ ldr w0, [x20, 2572] ++ lsl w0, w0, 2 ++ bl ftl_malloc ++ str x0, [x19, 3768] ++ ldrh w0, [x20, 2582] ++ lsl w0, w0, 4 ++ bl ftl_malloc ++ ldrh w1, [x20, 2582] ++ str x0, [x19, 704] ++ ldrh w0, [x20, 2554] ++ mul w0, w1, w0 ++ bl ftl_malloc ++ str x0, [x19, 3776] ++ ldrh w1, [x20, 2482] ++ mov w0, 6 ++ mul w0, w1, w0 ++ bl ftl_malloc ++ str x0, [x19, 504] ++ ldrh w0, [x20, 2542] ++ ldrh w1, [x20, 2494] ++ add w0, w0, 31 ++ asr w0, w0, 5 ++ strh w0, [x19, 3784] ++ mul w0, w1, w0 ++ lsl w0, w0, 2 ++ bl ftl_malloc ++ ldrh w3, [x19, 3784] ++ add x4, x20, 2664 ++ ldrh w5, [x20, 2494] ++ mov w1, w3 ++ str x0, [x20, 2656] ++ mov x0, 1 ++.L794: ++ cmp w0, w5 ++ bcc .L795 ++ mov w1, 8 ++ add x3, x22, :lo12:.LANCHOR0 ++ sub w1, w1, w0 ++ add x3, x3, 2624 ++ add x1, x1, 1 ++ mov x2, 0 ++.L796: ++ add x2, x2, 1 ++ cmp x2, x1 ++ bne .L797 ++ add x0, x21, :lo12:.LANCHOR2 ++ ldr x1, [x0, 3712] ++ cbnz x1, .L798 ++.L800: ++ adrp x1, .LANCHOR3 ++ adrp x0, .LC80 ++ add x1, x1, :lo12:.LANCHOR3 ++ add x0, x0, :lo12:.LC80 ++ bl printk ++ mov w0, -1 ++.L792: ++ 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 ++.L795: ++ ldr x2, [x20, 2656] ++ add w0, w0, 1 ++ add x2, x2, w1, uxtw 2 ++ add w1, w1, w3 ++ str x2, [x4], 8 ++ b .L794 ++.L797: ++ add x4, x0, x2 ++ add x4, x3, x4, lsl 3 ++ str xzr, [x4, 24] ++ b .L796 ++.L798: ++ ldr x1, [x0, 3720] ++ cbz x1, .L800 ++ ldr x1, [x0, 3752] ++ cbz x1, .L800 ++ ldr x1, [x0, 3768] ++ cbz x1, .L800 ++ ldr x1, [x0, 704] ++ cbz x1, .L800 ++ ldr x1, [x0, 3776] ++ cbz x1, .L800 ++ ldr x1, [x0, 504] ++ cbz x1, .L800 ++ add x22, x22, :lo12:.LANCHOR0 ++ ldr x1, [x22, 2656] ++ cbz x1, .L800 ++ ldr x0, [x0, 520] ++ cbz x0, .L800 ++ add x0, x21, :lo12:.LANCHOR2 ++ ldr x1, [x0, 1424] ++ cbz x1, .L800 ++ ldr x1, [x0, 1440] ++ cbz x1, .L800 ++ ldr x1, [x0, 3584] ++ cbz x1, .L800 ++ ldr x1, [x0, 3600] ++ cbz x1, .L800 ++ ldr x1, [x0, 432] ++ cbz x1, .L800 ++ ldr x1, [x0, 1408] ++ cbz x1, .L800 ++ ldr x1, [x0, 3592] ++ cbz x1, .L800 ++ ldr x1, [x0, 3608] ++ cbz x1, .L800 ++ ldr x1, [x0, 3616] ++ cbz x1, .L800 ++ ldr x0, [x0, 3624] ++ cbz x0, .L800 ++ add x0, x21, :lo12:.LANCHOR2 ++ ldr x1, [x0, 1392] ++ cbz x1, .L800 ++ ldr x1, [x0, 3640] ++ cbz x1, .L800 ++ ldr x1, [x0, 3648] ++ cbz x1, .L800 ++ ldr x1, [x0, 1384] ++ cbz x1, .L800 ++ ldr x1, [x0, 3656] ++ cbz x1, .L800 ++ ldr x1, [x0, 3664] ++ cbz x1, .L800 ++ ldr x1, [x0, 1400] ++ cbz x1, .L800 ++ ldr x1, [x0, 440] ++ cbz x1, .L800 ++ ldr x0, [x0, 3688] ++ cbz x0, .L800 ++ adrp x0, .LANCHOR0+2592 ++ ldr x0, [x0, #:lo12:.LANCHOR0+2592] ++ cbz x0, .L800 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldr x1, [x0, 3728] ++ cbz x1, .L800 ++ ldr x1, [x0, 3736] ++ cbz x1, .L800 ++ ldr x0, [x0, 3744] ++ cbz x0, .L800 ++ mov w0, 0 ++ b .L792 ++ .size FtlMemInit, .-FtlMemInit ++ .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+3784 ++ mov x19, x1 ++ mov w1, 0 ++ ldrh w2, [x0, #:lo12:.LANCHOR2+3784] ++ mov x0, x19 ++ lsl w2, w2, 2 ++ bl ftl_memset ++ adrp x3, .LANCHOR0 ++ add x3, x3, :lo12:.LANCHOR0 ++ mov x1, 0 ++ mov w6, 65535 ++ mov w5, 1 ++.L897: ++ ldrh w0, [x20, x1] ++ cmp w0, w6 ++ beq .L895 ++ ubfx x2, x0, 5, 11 ++ lsl w0, w5, w0 ++ lsl x2, x2, 2 ++ add x1, x1, 2 ++ cmp x1, 1024 ++ ldr w4, [x19, x2] ++ orr w0, w4, w0 ++ str w0, [x19, x2] ++ ldrh w0, [x3, 2630] ++ add w0, w0, 1 ++ strh w0, [x3, 2630] ++ bne .L897 ++.L895: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FtlBbt2Bitmap, .-FtlBbt2Bitmap ++ .align 2 ++ .global FtlBbtMemInit ++ .type FtlBbtMemInit, %function ++FtlBbtMemInit: ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w1, -1 ++ add x29, sp, 0 ++ mov w2, 16 ++ add x0, x0, 2636 ++ 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 FtlFreeSysBlkQueueInit ++ .type FtlFreeSysBlkQueueInit, %function ++FtlFreeSysBlkQueueInit: ++ stp x29, x30, [sp, -16]! ++ adrp x3, .LANCHOR0 ++ add x3, x3, :lo12:.LANCHOR0 ++ mov w2, 2048 ++ add x29, sp, 0 ++ mov w1, 0 ++ strh w0, [x3, 2720] ++ add x0, x3, 2728 ++ strh wzr, [x3, 2722] ++ strh wzr, [x3, 2724] ++ strh wzr, [x3, 2726] ++ bl ftl_memset ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit ++ .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, -80]! ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ ldrh w2, [x0, 10] ++ ldp x21, x20, [x0, 32] ++ ldr x22, [x0, 16] ++ lsl w2, w2, 1 ++ mov x0, x21 ++ bl ftl_memset ++ mov w0, 0 ++.L906: ++ ldrh w1, [x19, 6] ++ cmp w1, w0 ++ bhi .L910 ++ adrp x0, .LANCHOR0+2546 ++ mov w23, 0 ++ mov w20, 0 ++ ldrh w1, [x0, #:lo12:.LANCHOR0+2546] ++ ldrh w0, [x19] ++ strh w1, [x21, x0, lsl 1] ++ ldrh w24, [x21] ++.L911: ++ ldrh w0, [x19, 10] ++ cmp w0, w20 ++ bhi .L915 ++ mov w0, w23 ++ 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 ++.L910: ++ ubfiz x1, x0, 2, 16 ++ ldr w2, [x20, x1] ++ mov w1, 0 ++ ubfx x2, x2, 10, 16 ++.L907: ++ ldrh w3, [x19, 10] ++ cmp w3, w1 ++ bhi .L909 ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ b .L906 ++.L909: ++ ubfiz x3, x1, 1, 16 ++ ldrh w4, [x22, x3] ++ cmp w4, w2 ++ bne .L908 ++ cbz w2, .L908 ++ ldrh w4, [x21, x3] ++ add w4, w4, 1 ++ strh w4, [x21, x3] ++.L908: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L907 ++.L915: ++ ubfiz x0, x20, 1, 16 ++ ldrh w1, [x21, x0] ++ cmp w24, w1 ++ bls .L912 ++ add x25, x22, x0 ++ ldrh w0, [x22, x0] ++ cbnz w0, .L913 ++.L914: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L911 ++.L912: ++ cbnz w1, .L914 ++ add x25, x22, x0 ++ ldrh w0, [x22, x0] ++ cbz w0, .L914 ++.L916: ++ mov w1, 1 ++ bl FtlFreeSysBlkQueueIn ++ strh wzr, [x25] ++ ldrh w0, [x19, 8] ++ sub w0, w0, #1 ++ strh w0, [x19, 8] ++ b .L914 ++.L917: ++ mov w24, 0 ++ b .L916 ++.L913: ++ mov w23, w20 ++ cbz w1, .L917 ++ mov w24, w1 ++ b .L914 ++ .size ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk ++ .align 2 ++ .global FtlL2PDataInit ++ .type FtlL2PDataInit, %function ++FtlL2PDataInit: ++ stp x29, x30, [sp, -48]! ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ str x21, [sp, 32] ++ add x21, x19, :lo12:.LANCHOR2 ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ ldr x0, [x21, 3720] ++ ldr w2, [x20, 2572] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldrh w0, [x20, 2582] ++ mov w1, 255 ++ ldrh w2, [x20, 2554] ++ mul w2, w2, w0 ++ ldr x0, [x21, 3776] ++ bl ftl_memset ++ mov x0, x21 ++ mov w1, 0 ++ mov w5, -1 ++.L927: ++ ldrh w2, [x20, 2582] ++ cmp w2, w1 ++ bhi .L928 ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w2, -1 ++ add x1, x0, 3792 ++ strh w2, [x0, 3794] ++ strh w2, [x0, 3792] ++ ldr w2, [x20, 2572] ++ strh w2, [x0, 3802] ++ mov w2, -3902 ++ strh w2, [x0, 3796] ++ ldrh w2, [x0, 3856] ++ strh w2, [x0, 3800] ++ ldrh w2, [x20, 2580] ++ strh w2, [x0, 3798] ++ ldr x2, [x0, 3712] ++ str x2, [x0, 3808] ++ ldr x2, [x0, 3768] ++ str x2, [x0, 3816] ++ ldr x2, [x0, 3720] ++ str x2, [x0, 3824] ++ ldr x0, [x0, 3752] ++ str x0, [x1, 40] ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L928: ++ ldr x3, [x0, 704] ++ ubfiz x2, x1, 4, 16 ++ add x3, x3, x2 ++ str wzr, [x3, 4] ++ ldr x3, [x0, 704] ++ strh w5, [x3, x2] ++ ldr x3, [x0, 704] ++ ldr x4, [x0, 3776] ++ add x3, x3, x2 ++ ldrh w2, [x20, 2554] ++ mul w2, w2, w1 ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ sxtw x2, w2 ++ and x2, x2, -4 ++ add x2, x4, x2 ++ str x2, [x3, 8] ++ b .L927 ++ .size FtlL2PDataInit, .-FtlL2PDataInit ++ .align 2 ++ .global FtlVariablesInit ++ .type FtlVariablesInit, %function ++FtlVariablesInit: ++ stp x29, x30, [sp, -32]! ++ mov w0, -1 ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ strh w0, [x19, 3872] ++ mov w0, -1 ++ str w0, [x19, 3884] ++ ldr x0, [x20, 2592] ++ ldrh w2, [x20, 2564] ++ strh wzr, [x20, 2590] ++ str xzr, [x19, 3864] ++ lsl w2, w2, 1 ++ str wzr, [x19, 3876] ++ str wzr, [x19, 3880] ++ str wzr, [x20, 2372] ++ bl ftl_memset ++ ldr x0, [x19, 440] ++ mov w1, 0 ++ ldrh w2, [x20, 2482] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldr x0, [x19, 3688] ++ mov w1, 0 ++ ldrh w2, [x20, 2482] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ mov w2, 48 ++ mov w1, 0 ++ add x0, x19, 456 ++ bl ftl_memset ++ mov w2, 512 ++ mov w1, 0 ++ add x0, x19, 848 ++ bl ftl_memset ++ bl FtlGcBufInit ++ bl FtlL2PDataInit ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FtlVariablesInit, .-FtlVariablesInit ++ .align 2 ++ .global SupperBlkListInit ++ .type SupperBlkListInit, %function ++SupperBlkListInit: ++ stp x29, x30, [sp, -64]! ++ mov w0, 6 ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x19, x20, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ add x24, x21, 2504 ++ ldrh w2, [x21, 2482] ++ mov w22, 0 ++ mov w23, 0 ++ mul w2, w2, w0 ++ ldr x0, [x19, 504] ++ bl ftl_memset ++ strh wzr, [x19, 536] ++ strh wzr, [x19, 552] ++ strh wzr, [x19, 3552] ++ str xzr, [x19, 512] ++ str xzr, [x19, 528] ++ str xzr, [x19, 544] ++ mov w19, 0 ++.L933: ++ ldrh w0, [x21, 2480] ++ cmp w19, w0 ++ bge .L940 ++ ldrh w8, [x21, 2472] ++ mov w5, 0 ++ ldrh w7, [x21, 2544] ++ mov w6, 0 ++ b .L941 ++.L935: ++ ldrb w0, [x24, w6, sxtw] ++ mov w1, w19 ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L934 ++ add w5, w7, w5 ++ sxth w5, w5 ++.L934: ++ add w6, w6, 1 ++ sxth w6, w6 ++.L941: ++ cmp w6, w8 ++ blt .L935 ++ cbz w5, .L936 ++ mov w0, 32768 ++ sdiv w5, w0, w5 ++ sxth w5, w5 ++.L937: ++ add x0, x20, :lo12:.LANCHOR2 ++ mov w1, 6 ++ ldr x2, [x0, 504] ++ smaddl x1, w19, w1, x2 ++ strh w5, [x1, 4] ++ ldrh w1, [x0, 560] ++ cmp w19, w1 ++ beq .L938 ++ ldrh w1, [x0, 608] ++ cmp w19, w1 ++ beq .L938 ++ ldrh w1, [x0, 656] ++ cmp w19, w1 ++ beq .L938 ++ ldr x0, [x0, 520] ++ ldrh w0, [x0, w19, sxtw 1] ++ cbnz w0, .L939 ++ add w22, w22, 1 ++ mov w0, w19 ++ and w22, w22, 65535 ++ bl INSERT_FREE_LIST ++.L938: ++ add w19, w19, 1 ++ sxth w19, w19 ++ b .L933 ++.L936: ++ add x0, x20, :lo12:.LANCHOR2 ++ mov w1, -1 ++ ldr x0, [x0, 520] ++ strh w1, [x0, w19, sxtw 1] ++ b .L937 ++.L939: ++ add w23, w23, 1 ++ mov w0, w19 ++ and w23, w23, 65535 ++ bl INSERT_DATA_LIST ++ b .L938 ++.L940: ++ add x20, x20, :lo12:.LANCHOR2 ++ mov w0, 0 ++ strh w23, [x20, 536] ++ strh w22, [x20, 552] ++ ldp x23, x24, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size SupperBlkListInit, .-SupperBlkListInit ++ .align 2 ++ .global FtlGcPageVarInit ++ .type FtlGcPageVarInit, %function ++FtlGcPageVarInit: ++ stp x29, x30, [sp, -32]! ++ mov w1, 255 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ ldr x0, [x19, 1424] ++ ldrh w2, [x20, 2548] ++ strh wzr, [x19, 1420] ++ strh wzr, [x19, 1432] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldrh w2, [x20, 2548] ++ mov w0, 12 ++ mov w1, 255 ++ mul w2, w2, w0 ++ ldr x0, [x19, 1440] ++ bl ftl_memset ++ bl FtlGcBufInit ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FtlGcPageVarInit, .-FtlGcPageVarInit ++ .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 FlashReadIdbData ++ .type FlashReadIdbData, %function ++FlashReadIdbData: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ mov w2, 2048 ++ add x29, sp, 0 ++ add x1, x1, 3888 ++ 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, -48]! ++ adrp x0, .LANCHOR0 ++ add x10, x0, :lo12:.LANCHOR0 ++ mov x7, x0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR1 ++ add x8, x19, :lo12:.LANCHOR1 ++ add x10, x10, 2132 ++ add x8, x8, 513 ++ mov x9, 0 ++ str x21, [sp, 32] ++.L952: ++ ldrb w2, [x8, -1] ++ mov w11, w9 ++ lsl x21, x9, 5 ++ mov x1, x10 ++ mov x0, x8 ++ bl FlashMemCmp8 ++ mov w20, w0 ++ cbnz w0, .L950 ++ add x2, x19, :lo12:.LANCHOR1 ++ ubfiz x11, x11, 5, 32 ++ add x0, x2, 512 ++ add x1, x2, 3264 ++ add x21, x0, x21 ++ add x0, x0, x11 ++ ldrb w3, [x0, 22] ++ mov x0, 0 ++.L951: ++ lsl x4, x0, 5 ++ mov w2, w0 ++ ldrb w4, [x4, x1] ++ cmp w4, w3 ++ beq .L954 ++ add x0, x0, 1 ++ cmp x0, 4 ++ bne .L951 ++ mov w2, w0 ++.L954: ++ add x19, x19, :lo12:.LANCHOR1 ++ add x0, x7, :lo12:.LANCHOR0 ++ add x3, x19, 3264 ++ ubfiz x1, x2, 5, 32 ++ add x19, x19, 472 ++ add x1, x3, x1 ++ mov w2, 32 ++ add x0, x0, 96 ++ bl ftl_memcpy ++ mov w2, 32 ++ mov x1, x21 ++ mov x0, x19 ++ bl ftl_memcpy ++ ldrh w0, [x19, 10] ++ bl FlashBlockAlignInit ++ b .L949 ++.L950: ++ add x9, x9, 1 ++ add x8, x8, 32 ++ cmp x9, 86 ++ bne .L952 ++ mov w20, -1 ++.L949: ++ mov w0, w20 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FlashLoadPhyInfoInRam, .-FlashLoadPhyInfoInRam ++ .align 2 ++ .global NandcCopy1KB ++ .type NandcCopy1KB, %function ++NandcCopy1KB: ++ stp x29, x30, [sp, -48]! ++ and w1, w1, 255 ++ cmp w1, 1 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w2, 255 ++ str x21, [sp, 32] ++ add x2, x0, 4096 ++ add x21, x0, 512 ++ ubfiz x0, x19, 9, 8 ++ mov x20, x4 ++ add x0, x2, x0 ++ bne .L959 ++ cbz x3, .L960 ++ mov w2, 1024 ++ mov x1, x3 ++ bl ftl_memcpy ++.L960: ++ cbz x20, .L958 ++ lsr w19, w19, 1 ++ mov w1, 48 ++ ldr w0, [x20] ++ mul w19, w19, w1 ++ and x19, x19, 8176 ++ str w0, [x21, x19] ++.L958: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L959: ++ cbz x3, .L963 ++ mov x1, x0 ++ mov w2, 1024 ++ mov x0, x3 ++ bl ftl_memcpy ++.L963: ++ cbz x20, .L958 ++ lsr w19, w19, 1 ++ mov w0, 48 ++ mul w19, w19, w0 ++ and x19, x19, 8176 ++ ldr w0, [x21, x19] ++ 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] ++ b .L958 ++ .size NandcCopy1KB, .-NandcCopy1KB ++ .align 2 ++ .global ftl_memcpy32 ++ .type ftl_memcpy32, %function ++ftl_memcpy32: ++ mov x3, 0 ++.L976: ++ cmp w2, w3 ++ bhi .L977 ++ ret ++.L977: ++ ldr w4, [x1, x3, lsl 2] ++ str w4, [x0, x3, lsl 2] ++ add x3, x3, 1 ++ b .L976 ++ .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 timer_get_time ++ .type timer_get_time, %function ++timer_get_time: ++ stp x29, x30, [sp, -16]! ++ adrp x0, jiffies ++ add x29, sp, 0 ++ ldr x0, [x0, #:lo12:jiffies] ++ bl jiffies_to_msecs ++ ldp x29, x30, [sp], 16 ++ ret ++ .size timer_get_time, .-timer_get_time ++ .align 2 ++ .global FlashSramLoadStore ++ .type FlashSramLoadStore, %function ++FlashSramLoadStore: ++ stp x29, x30, [sp, -16]! ++ adrp x4, .LANCHOR4+1584 ++ uxtw x5, w1 ++ add x29, sp, 0 ++ ldr x4, [x4, #:lo12:.LANCHOR4+1584] ++ add x4, x4, 4096 ++ cbnz w2, .L983 ++ mov w2, w3 ++ add x1, x4, x5 ++.L986: ++ bl ftl_memcpy ++ ldp x29, x30, [sp], 16 ++ ret ++.L983: ++ mov x1, x0 ++ mov w2, w3 ++ add x0, x4, x5 ++ b .L986 ++ .size FlashSramLoadStore, .-FlashSramLoadStore ++ .align 2 ++ .global FlashCs123Init ++ .type FlashCs123Init, %function ++FlashCs123Init: ++ ret ++ .size FlashCs123Init, .-FlashCs123Init ++ .align 2 ++ .global ftl_dma32_malloc ++ .type ftl_dma32_malloc, %function ++ftl_dma32_malloc: ++ stp x29, x30, [sp, -48]! ++ cmp w0, 8192 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ str x21, [sp, 32] ++ ble .L989 ++ bl ftl_malloc ++.L988: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L989: ++ adrp x1, .LANCHOR4 ++ add x21, x1, :lo12:.LANCHOR4 ++ add w19, w0, 63 ++ mov x20, x1 ++ and w19, w19, -64 ++ ldr w0, [x21, 1592] ++ cmp w19, w0 ++ ble .L991 ++ mov w0, 16384 ++ bl ftl_malloc ++ str x0, [x21, 1600] ++ mov w0, 16384 ++ str w0, [x21, 1592] ++.L991: ++ add x1, x20, :lo12:.LANCHOR4 ++ ldr w0, [x1, 1592] ++ sub w0, w0, w19 ++ str w0, [x1, 1592] ++ ldr x0, [x1, 1600] ++ add x19, x0, w19, sxtw ++ str x19, [x1, 1600] ++ b .L988 ++ .size ftl_dma32_malloc, .-ftl_dma32_malloc ++ .align 2 ++ .global rk_nand_suspend ++ .type rk_nand_suspend, %function ++rk_nand_suspend: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl ftl_flash_suspend ++ 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: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl ftl_flash_resume ++ 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, .LANCHOR0+2584 ++ ldr w0, [x0, #:lo12:.LANCHOR0+2584] ++ 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: ++ ldr w0, [x0, 372] ++ 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: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl ftl_proc_ftl_read ++ ldp x29, x30, [sp], 16 ++ ret ++ .size rknand_proc_ftlread, .-rknand_proc_ftlread ++ .align 2 ++ .global ReadFlashInfo ++ .type ReadFlashInfo, %function ++ReadFlashInfo: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl ftl_read_flash_info ++ 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 x21, x22, [sp, 32] ++ adrp x21, .LC82 ++ stp x23, x24, [sp, 48] ++ mov x22, x1 ++ stp x25, x26, [sp, 64] ++ adrp x23, .LC81 ++ mov x26, x0 ++ mov w24, w2 ++ uxtw x25, w3 ++ add x23, x23, :lo12:.LC81 ++ add x21, x21, :lo12:.LC82 ++ stp x19, x20, [sp, 16] ++ str x27, [sp, 80] ++ mov x19, 0 ++ mov w20, 0 ++ adrp x27, .LC83 ++.L1004: ++ cmp x25, x19 ++ bne .L1010 ++ adrp x1, .LC83 ++ adrp x0, .LC76 ++ add x1, x1, :lo12:.LC83 ++ add x0, x0, :lo12:.LC76 ++ 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 ++.L1010: ++ cbnz w20, .L1005 ++ mov w3, w19 ++ mov x2, x22 ++ mov x1, x26 ++ mov x0, x23 ++ bl printk ++.L1005: ++ cmp w24, 4 ++ bne .L1006 ++ ldr w1, [x22, x19, lsl 2] ++.L1012: ++ mov x0, x21 ++ add w20, w20, 1 ++ bl printk ++ cmp w20, 15 ++ bls .L1009 ++ mov w20, 0 ++ add x1, x27, :lo12:.LC83 ++ adrp x0, .LC76 ++ add x0, x0, :lo12:.LC76 ++ bl printk ++.L1009: ++ add x19, x19, 1 ++ b .L1004 ++.L1006: ++ cmp w24, 2 ++ bne .L1008 ++ ldrsh w1, [x22, x19, lsl 1] ++ b .L1012 ++.L1008: ++ ldrb w1, [x22, x19] ++ b .L1012 ++ .size rknand_print_hex, .-rknand_print_hex ++ .align 2 ++ .global HynixGetReadRetryDefault ++ .type HynixGetReadRetryDefault, %function ++HynixGetReadRetryDefault: ++ stp x29, x30, [sp, -128]! ++ mov w3, -83 ++ mov w2, -82 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x1, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ mov w20, w0 ++ add x0, x1, 1272 ++ stp x23, x24, [sp, 48] ++ cmp w20, 2 ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ strb w20, [x1, 1272] ++ mov w1, -84 ++ strb w3, [x0, 5] ++ strb w1, [x0, 4] ++ mov w1, -81 ++ strb w2, [x0, 6] ++ strb w1, [x0, 7] ++ bne .L1014 ++ mov w1, -89 ++ strb w1, [x0, 4] ++ adrp x0, .LANCHOR1+3409 ++ mov w1, -9 ++ strb w1, [x0, #:lo12:.LANCHOR1+3409] ++.L1079: ++ mov w27, 7 ++ b .L1123 ++.L1014: ++ cmp w20, 3 ++ bne .L1016 ++ mov w1, -80 ++ strb w1, [x0, 4] ++ mov w1, -79 ++ strb w1, [x0, 5] ++ mov w1, -78 ++ strb w1, [x0, 6] ++ mov w1, -77 ++ strb w1, [x0, 7] ++ mov w1, -76 ++ strb w1, [x0, 8] ++ mov w1, -75 ++ strb w1, [x0, 9] ++ mov w1, -74 ++ strb w1, [x0, 10] ++ mov w1, -73 ++.L1122: ++ mov w27, 8 ++ mov w28, w27 ++ strb w1, [x0, 11] ++.L1015: ++ sub w0, w20, #1 ++ cmp w0, 1 ++ bhi .L1021 ++ add x25, x21, :lo12:.LANCHOR0 ++ adrp x24, .LANCHOR1 ++ add x24, x24, :lo12:.LANCHOR1 ++ add x26, x25, 1272 ++ add x24, x24, 3392 ++ mov w23, 0 ++.L1022: ++ ldrb w0, [x25, 2358] ++ cmp w0, w23 ++ bhi .L1028 ++.L1029: ++ add x21, x21, :lo12:.LANCHOR0 ++ ldp x19, x20, [sp, 16] ++ strb w28, [x21, 1273] ++ strb w27, [x21, 1274] ++ ldp x23, x24, [sp, 48] ++ ldp x21, x22, [sp, 32] ++ ldp x25, x26, [sp, 64] ++ ldp x27, x28, [sp, 80] ++ ldp x29, x30, [sp], 128 ++ ret ++.L1016: ++ cmp w20, 4 ++ bne .L1017 ++ mov w4, -52 ++ strb w4, [x0, 4] ++ mov w4, -65 ++ strb w4, [x0, 5] ++ mov w4, -86 ++ strb w4, [x0, 6] ++ mov w4, -85 ++ strb w3, [x0, 9] ++ strb w4, [x0, 7] ++ mov w4, -51 ++ strb w2, [x0, 10] ++ strb w4, [x0, 8] ++ b .L1122 ++.L1017: ++ cmp w20, 5 ++ bne .L1018 ++ mov w1, 56 ++ strb w1, [x0, 4] ++ mov w1, 57 ++ strb w1, [x0, 5] ++ mov w1, 58 ++ mov w27, 8 ++ strb w1, [x0, 6] ++ mov w1, 59 ++ strb w1, [x0, 7] ++.L1123: ++ mov w28, 4 ++ b .L1015 ++.L1018: ++ cmp w20, 6 ++ bne .L1019 ++ mov w1, 14 ++ strb w1, [x0, 4] ++ mov w1, 15 ++ strb w1, [x0, 5] ++ mov w1, 16 ++ mov w27, 12 ++ strb w1, [x0, 6] ++ mov w1, 17 ++ strb w1, [x0, 7] ++ b .L1123 ++.L1019: ++ cmp w20, 7 ++ bne .L1020 ++ mov w1, -80 ++ strb w1, [x0, 4] ++ mov w1, -79 ++ strb w1, [x0, 5] ++ mov w1, -78 ++ strb w1, [x0, 6] ++ mov w1, -77 ++ strb w1, [x0, 7] ++ mov w1, -76 ++ strb w1, [x0, 8] ++ mov w1, -75 ++ strb w1, [x0, 9] ++ mov w1, -74 ++ strb w1, [x0, 10] ++ mov w1, -73 ++ strb w1, [x0, 11] ++ mov w1, -44 ++ mov w27, 12 ++ strb w1, [x0, 12] ++ mov w28, 10 ++ mov w1, -43 ++ strb w1, [x0, 13] ++ b .L1015 ++.L1020: ++ cmp w20, 8 ++ bne .L1079 ++ mov w1, 6 ++ strb w1, [x0, 4] ++ mov w1, 7 ++ strb w1, [x0, 5] ++ mov w1, 9 ++ strb w20, [x0, 6] ++ strb w1, [x0, 7] ++ mov w27, 50 ++ mov w1, 10 ++ mov w28, 5 ++ strb w1, [x0, 8] ++ b .L1015 ++.L1028: ++ add x0, x25, w23, sxtw ++ mov x20, 0 ++ ldrb w0, [x0, 2360] ++ ubfiz x19, x0, 6, 8 ++ sbfiz x0, x0, 4, 32 ++ add x1, x25, x0 ++ add x19, x19, 20 ++ add x19, x26, x19 ++ ldr x0, [x25, x0] ++ ldrb w22, [x1, 8] ++ mov w1, 55 ++ add x22, x0, x22, lsl 8 ++.L1023: ++ add x0, x26, x20 ++ str w1, [x22, 2056] ++ str w1, [x29, 124] ++ ldrb w0, [x0, 4] ++ str w0, [x22, 2052] ++ mov x0, 400 ++ bl __const_udelay ++ ldr w0, [x22, 2048] ++ strb w0, [x19, x20] ++ add x20, x20, 1 ++ cmp w28, w20, uxtb ++ ldr w1, [x29, 124] ++ bhi .L1023 ++ mov x0, 0 ++.L1026: ++ add x1, x0, 4 ++ add x4, x0, 28 ++ add w5, w0, 8 ++ add x1, x24, x1 ++ add x4, x24, x4 ++.L1025: ++ ldrb w6, [x19, x0] ++ ldrb w7, [x1], 4 ++ add w6, w6, w7 ++ strb w6, [x19, w5, sxtw] ++ cmp x4, x1 ++ add w5, w5, 8 ++ bne .L1025 ++ add x0, x0, 1 ++ cmp x0, 4 ++ bne .L1026 ++ add w23, w23, 1 ++ strb wzr, [x19, 16] ++ strb wzr, [x19, 24] ++ and w23, w23, 255 ++ strb wzr, [x19, 32] ++ strb wzr, [x19, 40] ++ strb wzr, [x19, 48] ++ strb wzr, [x19, 41] ++ strb wzr, [x19, 49] ++ b .L1022 ++.L1021: ++ sub w0, w20, #3 ++ cmp w0, 5 ++ bhi .L1029 ++ mul w26, w28, w27 ++ sub w25, w28, #1 ++ and x25, x25, 255 ++ add x22, x21, :lo12:.LANCHOR0 ++ mov w23, 0 ++ lsl w0, w26, 4 ++ asr w24, w26, 1 ++ str w0, [x29, 120] ++ sub w26, w20, #5 ++ lsl w0, w24, 1 ++ str w0, [x29, 124] ++ add x0, x25, 1 ++ str x0, [x29, 112] ++.L1030: ++ ldrb w0, [x22, 2358] ++ cmp w0, w23 ++ bls .L1029 ++ add x0, x22, w23, sxtw ++ ldrb w25, [x0, 2360] ++ sbfiz x0, x25, 4, 32 ++ add x1, x22, x0 ++ ldr x0, [x22, x0] ++ ldrb w19, [x1, 8] ++ add x19, x0, x19, lsl 8 ++ mov w0, 255 ++ str w0, [x19, 2056] ++ mov w0, w25 ++ bl NandcWaitFlashReady ++ cmp w20, 7 ++ bne .L1031 ++ mov x1, 28 ++ mov w0, 160 ++ add x4, x22, 1272 ++ umaddl x0, w0, w25, x1 ++ add x4, x4, x0 ++.L1032: ++ mov w0, 54 ++ str w0, [x19, 2056] ++ cmp w20, 4 ++ bne .L1034 ++ mov w0, 255 ++ str w0, [x19, 2052] ++ mov w0, 64 ++ str w0, [x19, 2048] ++ mov w0, 204 ++.L1124: ++ str w0, [x19, 2052] ++ mov w0, 77 ++ b .L1125 ++.L1031: ++ cmp w20, 8 ++ beq .L1033 ++ ubfiz x4, x25, 6, 8 ++ add x4, x22, x4 ++ add x4, x4, 1292 ++ b .L1032 ++.L1034: ++ cmp w26, 1 ++ bhi .L1036 ++ ldrb w0, [x22, 1276] ++ str w0, [x19, 2052] ++ mov w0, 82 ++.L1125: ++ str w0, [x19, 2048] ++.L1035: ++ 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] ++ str wzr, [x19, 2056] ++ cmp w20, 6 ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ bne .L1037 ++ mov w0, 31 ++ str w0, [x19, 2052] ++.L1038: ++ mov w0, 2 ++ str w0, [x19, 2052] ++ str wzr, [x19, 2052] ++.L1078: ++ mov w0, 48 ++ str w0, [x19, 2056] ++ str x4, [x29, 104] ++ mov w0, w25 ++ bl NandcWaitFlashReady ++ cmp w26, 1 ++ ldr x4, [x29, 104] ++ ccmp w20, 8, 4, hi ++ beq .L1080 ++ cmp w20, 7 ++ mov w0, 2 ++ mov w6, 32 ++ csel w6, w6, w0, eq ++.L1039: ++ adrp x1, .LANCHOR4 ++ add x0, x1, :lo12:.LANCHOR4 ++ mov x7, 0 ++ ldr x0, [x0, 1608] ++.L1040: ++ ldr w8, [x19, 2048] ++ strb w8, [x0, x7] ++ add x7, x7, 1 ++ cmp w6, w7, uxtb ++ bhi .L1040 ++ cmp w20, 8 ++ bne .L1041 ++ mov w6, 0 ++.L1043: ++ ldrb w7, [x0] ++ cmp w7, 50 ++ beq .L1042 ++ ldrb w7, [x0, 1] ++ cmp w7, 5 ++ beq .L1042 ++ add w6, w6, 1 ++ add x0, x0, 4 ++ and w6, w6, 255 ++ cmp w6, 8 ++ bne .L1043 ++.L1044: ++ adrp x0, .LC84 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC84 ++ bl printk ++.L1046: ++ b .L1046 ++.L1036: ++ cmp w20, 7 ++ bne .L1035 ++ mov w0, 174 ++ str w0, [x19, 2052] ++ str wzr, [x19, 2048] ++ mov w0, 176 ++ b .L1124 ++.L1037: ++ str wzr, [x19, 2052] ++ b .L1038 ++.L1080: ++ mov w6, 16 ++ b .L1039 ++.L1042: ++ cmp w6, 6 ++ bhi .L1044 ++.L1045: ++ add x0, x1, :lo12:.LANCHOR4 ++ ldr x8, [x0, 1608] ++ mov x0, 0 ++.L1055: ++ ldr w2, [x29, 120] ++ cmp w2, w0 ++ bgt .L1056 ++ add x0, x1, :lo12:.LANCHOR4 ++ mov w9, w24 ++ mov w7, 8 ++ ldr x10, [x0, 1608] ++.L1058: ++ mov w0, 0 ++.L1057: ++ add w6, w0, w9 ++ add w0, w0, 1 ++ sbfiz x6, x6, 1, 32 ++ cmp w24, w0 ++ ldrh w11, [x10, x6] ++ mvn w11, w11 ++ strh w11, [x10, x6] ++ bgt .L1057 ++ ldr w0, [x29, 124] ++ subs w7, w7, #1 ++ add w9, w9, w0 ++ bne .L1058 ++ mov x7, 0 ++ mov w14, 1 ++.L1064: ++ mov w6, 0 ++ mov w9, 0 ++.L1063: ++ mov w12, w7 ++ lsl w13, w14, w9 ++ mov w0, 16 ++ mov w11, 0 ++.L1061: ++ ldrh w15, [x10, w12, sxtw 1] ++ add w12, w12, w24 ++ bics wzr, w13, w15 ++ cinc w11, w11, eq ++ subs w0, w0, #1 ++ bne .L1061 ++ cmp w11, 8 ++ bls .L1062 ++ orr w6, w6, w13 ++ and w6, w6, 65535 ++.L1062: ++ add w9, w9, 1 ++ cmp w9, 16 ++ bne .L1063 ++ strh w6, [x10, x7, lsl 1] ++ add x7, x7, 1 ++ cmp w24, w7 ++ bgt .L1064 ++ add x1, x1, :lo12:.LANCHOR4 ++ mov x6, 0 ++ mov w7, 0 ++ ldr x1, [x1, 1608] ++.L1067: ++ ldr w9, [x1, x6] ++ add x6, x6, 4 ++ cmp w9, 0 ++ cinc w7, w7, eq ++ cmp x6, 32 ++ bne .L1067 ++ cmp w7, 7 ++ ble .L1068 ++ mov w3, 1024 ++ mov w2, 1 ++ adrp x0, .LC85 ++ add x0, x0, :lo12:.LC85 ++ bl rknand_print_hex ++ adrp x0, .LC84 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC84 ++ bl printk ++.L1069: ++ b .L1069 ++.L1041: ++ cmp w20, 7 ++ bne .L1047 ++ mov w6, 0 ++.L1049: ++ ldrb w7, [x0] ++ cmp w7, 12 ++ beq .L1048 ++ ldrb w7, [x0, 1] ++ cmp w7, 10 ++ beq .L1048 ++ add w6, w6, 1 ++ add x0, x0, 4 ++ and w6, w6, 255 ++ cmp w6, 8 ++ bne .L1049 ++.L1050: ++ adrp x0, .LC84 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC84 ++ bl printk ++.L1051: ++ b .L1051 ++.L1048: ++ cmp w6, 6 ++ bls .L1045 ++ b .L1050 ++.L1047: ++ cmp w20, 6 ++ bne .L1045 ++ mov x6, 0 ++.L1052: ++ ldrb w7, [x0, x6] ++ cmp w7, 12 ++ beq .L1045 ++ add x7, x0, x6 ++ ldrb w7, [x7, 8] ++ cmp w7, 4 ++ beq .L1045 ++ add x6, x6, 1 ++ cmp x6, 8 ++ bne .L1052 ++ adrp x0, .LC84 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC84 ++ bl printk ++.L1054: ++ b .L1054 ++.L1056: ++ ldr w6, [x19, 2048] ++ strb w6, [x8, x0] ++ add x0, x0, 1 ++ b .L1055 ++.L1068: ++ cmp w20, 6 ++ beq .L1082 ++ cmp w20, 7 ++ beq .L1083 ++ cmp w20, 8 ++ mov w1, 8 ++ mov w6, 5 ++ csel w6, w6, w1, eq ++.L1070: ++ mov w7, 0 ++.L1071: ++ mov x1, 0 ++.L1072: ++ add w9, w0, w1 ++ ldrb w10, [x8, x1] ++ add x1, x1, 1 ++ cmp w28, w1, uxtb ++ strb w10, [x4, w9, sxtw] ++ bhi .L1072 ++ ldr x1, [x29, 112] ++ add w7, w7, 1 ++ add w0, w0, w6 ++ cmp w27, w7 ++ add x8, x8, x1 ++ bgt .L1071 ++ mov w0, 255 ++ str w0, [x19, 2056] ++ mov w0, w25 ++ bl NandcWaitFlashReady ++ cmp w26, 1 ++ bhi .L1074 ++ mov w0, 54 ++ str w0, [x19, 2056] ++ adrp x0, .LANCHOR0+1276 ++ mov w1, -1 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+1276] ++ str w0, [x19, 2052] ++ str wzr, [x19, 2048] ++ mov w0, 22 ++ str w0, [x19, 2056] ++ mov w0, w23 ++ bl FlashReadCmd ++.L1075: ++ add w23, w23, 1 ++ mov w0, w25 ++ and w23, w23, 255 ++ bl NandcWaitFlashReady ++ b .L1030 ++.L1082: ++ mov w6, 4 ++ b .L1070 ++.L1083: ++ mov w6, 10 ++ b .L1070 ++.L1074: ++ cmp w20, 8 ++ bne .L1076 ++ mov w0, 190 ++.L1126: ++ str w0, [x19, 2056] ++ b .L1075 ++.L1076: ++ mov w0, 56 ++ b .L1126 ++.L1033: ++ mov w0, 120 ++ str w0, [x19, 2056] ++ str wzr, [x19, 2052] ++ mov w0, 23 ++ str wzr, [x19, 2052] ++ mov w1, 25 ++ str wzr, [x19, 2052] ++ add x4, x22, 1300 ++ str w0, [x19, 2056] ++ mov w0, 4 ++ str w0, [x19, 2056] ++ str w1, [x19, 2056] ++ mov w1, 218 ++ str w1, [x19, 2056] ++ mov w1, 21 ++ str wzr, [x19, 2056] ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w1, [x19, 2052] ++ str w0, [x19, 2052] ++ str wzr, [x19, 2052] ++ b .L1078 ++ .size HynixGetReadRetryDefault, .-HynixGetReadRetryDefault ++ .align 2 ++ .global FlashGetReadRetryDefault ++ .type FlashGetReadRetryDefault, %function ++FlashGetReadRetryDefault: ++ cbz w0, .L1140 ++ stp x29, x30, [sp, -16]! ++ sub w2, w0, #1 ++ mov w1, w0 ++ cmp w2, 7 ++ add x29, sp, 0 ++ bhi .L1129 ++ bl HynixGetReadRetryDefault ++.L1127: ++ ldp x29, x30, [sp], 16 ++ ret ++.L1129: ++ cmp w0, 49 ++ bne .L1130 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w2, 64 ++ strb w1, [x0, 1272] ++ mov w1, 4 ++ strb w1, [x0, 1273] ++ mov w1, 15 ++ strb w1, [x0, 1274] ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 408 ++.L1143: ++ add x0, x0, 1276 ++ bl ftl_memcpy ++ b .L1127 ++.L1130: ++ sub w0, w0, #65 ++ cmp w1, 33 ++ ccmp w0, 1, 0, ne ++ bhi .L1131 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ strb w1, [x0, 1272] ++ mov w1, 4 ++.L1144: ++ strb w1, [x0, 1273] ++ mov w1, 7 ++ strb w1, [x0, 1274] ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ mov w2, 45 ++ add x1, x1, 352 ++ b .L1143 ++.L1131: ++ cmp w1, 34 ++ mov w0, 67 ++ ccmp w1, w0, 4, ne ++ bne .L1132 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ strb w1, [x0, 1272] ++ mov w1, 5 ++ b .L1144 ++.L1132: ++ cmp w1, 35 ++ mov w0, 68 ++ ccmp w1, w0, 4, ne ++ bne .L1127 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w2, 95 ++ strb w1, [x0, 1272] ++ mov w1, 5 ++ strb w1, [x0, 1273] ++ mov w1, 17 ++ strb w1, [x0, 1274] ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 256 ++ b .L1143 ++.L1140: ++ ret ++ .size FlashGetReadRetryDefault, .-FlashGetReadRetryDefault ++ .align 2 ++ .global NandcXferComp ++ .type NandcXferComp, %function ++NandcXferComp: ++ stp x29, x30, [sp, -80]! ++ ubfiz x0, x0, 4, 8 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ add x1, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ ldr x19, [x1, x0] ++ ldr w0, [x1, 2388] ++ cmp w0, 3 ++ bls .L1176 ++ ldr w0, [x19, 16] ++ tbz x0, 2, .L1176 ++ ldr w0, [x19, 16] ++ tbz x0, 1, .L1147 ++ adrp x22, .LC86 ++ adrp x23, .LC87 ++ ldr w0, [x19, 8] ++ mov x24, x1 ++ add x22, x22, :lo12:.LC86 ++ add x23, x23, :lo12:.LC87 ++ mov w21, 0 ++ str w0, [x29, 64] ++.L1148: ++ ldr w1, [x19, 28] ++ ldr w0, [x29, 64] ++ ubfx x1, x1, 16, 5 ++ ubfx x0, x0, 22, 6 ++ cmp w1, w0 ++ bge .L1156 ++ ldr w0, [x24, 2388] ++ cmp w0, 5 ++ bhi .L1149 ++.L1152: ++ add w21, w21, 1 ++ tst x21, 16777215 ++ bne .L1151 ++ 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 w3, 512 ++ mov w2, 4 ++ mov x1, x19 ++ mov x0, x23 ++ bl rknand_print_hex ++.L1151: ++ mov x1, 5 ++ mov x0, 1 ++ bl usleep_range ++ b .L1148 ++.L1149: ++ ldr w0, [x19] ++ str w0, [x29, 72] ++ ldr w0, [x29, 72] ++ tbz x0, 13, .L1152 ++ ldr w0, [x29, 72] ++ tbz x0, 17, .L1152 ++.L1156: ++ add x19, x20, :lo12:.LANCHOR0 ++ add x19, x19, 2408 ++ ldr w0, [x19, 40] ++ cbz w0, .L1157 ++ ldr w0, [x19, 32] ++ mov w2, 0 ++ ldr w1, [x29, 64] ++ 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 ++.L1157: ++ add x20, x20, :lo12:.LANCHOR0 ++ str wzr, [x20, 2448] ++.L1145: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 80 ++ ret ++.L1147: ++ adrp x22, .LC88 ++ adrp x23, .LC87 ++ ldr w0, [x19, 8] ++ add x22, x22, :lo12:.LC88 ++ add x23, x23, :lo12:.LC87 ++ mov w21, 0 ++ str w0, [x29, 64] ++.L1158: ++ ldr w0, [x29, 64] ++ tbz x0, 20, .L1160 ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr w0, [x0, 2456] ++ cbz w0, .L1161 ++ mov x0, x19 ++ bl NandcSendDumpDataStart ++.L1161: ++ add x21, x20, :lo12:.LANCHOR0 ++ add x21, x21, 2408 ++ ldr w0, [x21, 40] ++ cbz w0, .L1162 ++ ldr w0, [x21, 32] ++ mov w2, 1 ++ ldr w1, [x29, 64] ++ 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 ++.L1162: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr w0, [x0, 2456] ++ cbz w0, .L1157 ++ mov x0, x19 ++ bl NandcSendDumpDataDone ++ b .L1157 ++.L1160: ++ ldr w0, [x19, 8] ++ add w21, w21, 1 ++ str w0, [x29, 64] ++ tst x21, 16777215 ++ bne .L1159 ++ ldr w2, [x29, 64] ++ mov w1, w21 ++ ldr w3, [x19, 28] ++ mov x0, x22 ++ ubfx x3, x3, 16, 5 ++ bl printk ++ mov w3, 512 ++ mov w2, 4 ++ mov x1, x19 ++ mov x0, x23 ++ bl rknand_print_hex ++.L1159: ++ mov x1, 5 ++ mov x0, 1 ++ bl usleep_range ++ b .L1158 ++.L1176: ++ ldr w0, [x19, 8] ++ str w0, [x29, 64] ++ ldr w0, [x29, 64] ++ tbz x0, 20, .L1176 ++ b .L1145 ++ .size NandcXferComp, .-NandcXferComp ++ .align 2 ++ .global NandcXferData ++ .type NandcXferData, %function ++NandcXferData: ++ stp x29, x30, [sp, -192]! ++ tst x3, 63 ++ add x29, sp, 0 ++ stp x25, x26, [sp, 64] ++ and w25, w0, 255 ++ stp x21, x22, [sp, 32] ++ sbfiz x0, x25, 4, 32 ++ stp x19, x20, [sp, 16] ++ and w21, w1, 255 ++ adrp x19, .LANCHOR0 ++ add x1, x19, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ mov x26, x3 ++ stp x27, x28, [sp, 80] ++ and w24, w2, 255 ++ mov x22, x4 ++ ldr x20, [x1, x0] ++ bne .L1186 ++ cbnz x4, .L1187 ++ add x22, x29, 128 ++ mov w2, 64 ++ mov w1, 255 ++ add x0, x29, 128 ++ bl ftl_memset ++.L1187: ++ mov x5, x22 ++ mov x4, x26 ++ mov w2, w24 ++ mov w3, 0 ++ mov w1, w21 ++ mov w0, w25 ++ bl NandcXferStart ++ mov w1, w21 ++ mov w0, w25 ++ bl NandcXferComp ++ cbnz w21, .L1211 ++ add x1, x19, :lo12:.LANCHOR0 ++ ubfx x2, x24, 1, 7 ++ add x2, x22, x2, lsl 2 ++ mov w3, 64 ++ ldr w0, [x1, 2460] ++ cmp w0, 25 ++ mov w0, 128 ++ csel w3, w3, w0, cc ++ mov w0, 0 ++.L1190: ++ add w4, w3, w0 ++ cmp x22, x2 ++ bne .L1191 ++ add x0, x19, :lo12:.LANCHOR0 ++ lsr w24, w24, 2 ++ mov w2, 0 ++ mov w23, 0 ++ ldr w3, [x0, 2388] ++ ldr w4, [x0, 2460] ++.L1192: ++ cmp w2, w24 ++ bcs .L1188 ++ cbnz w4, .L1198 ++.L1188: ++ str wzr, [x20, 16] ++.L1199: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldr w0, [x19, 2388] ++ cmp w0, 5 ++ bls .L1185 ++ cbnz w21, .L1185 ++ ldr w0, [x20] ++ mov w1, 8192 ++ movk w1, 0x2, lsl 16 ++ and w1, w0, w1 ++ cmp w1, 139264 ++ bne .L1185 ++ orr w0, w0, 131072 ++ mov w23, -1 ++ str w0, [x20] ++.L1185: ++ mov w0, w23 ++ 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 ++.L1191: ++ ldr x5, [x1, 2416] ++ and x0, x0, 4294967292 ++ add x22, x22, 4 ++ ldr w0, [x5, x0] ++ strb w0, [x22, -4] ++ lsr w5, w0, 8 ++ strb w5, [x22, -3] ++ lsr w5, w0, 16 ++ strb w5, [x22, -2] ++ lsr w0, w0, 24 ++ strb w0, [x22, -1] ++ mov w0, w4 ++ b .L1190 ++.L1198: ++ uxtw x0, w2 ++ add x0, x0, 8 ++ ldr w0, [x20, x0, lsl 2] ++ str w0, [x29, 120] ++ ldr w0, [x29, 120] ++ tbnz x0, 2, .L1214 ++ ldr w0, [x29, 120] ++ tbnz x0, 15, .L1214 ++ cmp w3, 5 ++ bls .L1194 ++ ldr w1, [x29, 120] ++ ubfx x6, x1, 3, 5 ++ ldr w1, [x29, 120] ++ ldr w0, [x29, 120] ++ ubfx x1, x1, 27, 1 ++ ubfx x5, x0, 16, 5 ++ ldr w0, [x29, 120] ++ orr w1, w6, w1, lsl 5 ++ ubfx x0, x0, 29, 1 ++ orr w0, w5, w0, lsl 5 ++ cmp w1, w0 ++ ldr w0, [x29, 120] ++ bls .L1195 ++ ubfx x1, x0, 3, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 27, 1 ++.L1220: ++ orr w0, w1, w0, lsl 5 ++.L1196: ++ cmp w23, w0 ++ csel w23, w23, w0, cs ++.L1193: ++ add w2, w2, 1 ++ b .L1192 ++.L1195: ++ ubfx x1, x0, 16, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 29, 1 ++ b .L1220 ++.L1194: ++ cmp w3, 3 ++ bls .L1215 ++ ldr w1, [x29, 120] ++ ubfx x6, x1, 3, 5 ++ ldr w1, [x29, 120] ++ ldr w0, [x29, 120] ++ ubfx x1, x1, 28, 1 ++ ubfx x5, x0, 16, 5 ++ ldr w0, [x29, 120] ++ orr w1, w6, w1, lsl 5 ++ ubfx x0, x0, 30, 1 ++ orr w0, w5, w0, lsl 5 ++ cmp w1, w0 ++ ldr w0, [x29, 120] ++ bls .L1197 ++ ubfx x1, x0, 3, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 28, 1 ++ b .L1220 ++.L1197: ++ ubfx x1, x0, 16, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 30, 1 ++ b .L1220 ++.L1215: ++ mov w0, 0 ++ b .L1196 ++.L1214: ++ mov w23, -1 ++ b .L1193 ++.L1211: ++ mov w23, 0 ++ b .L1188 ++.L1186: ++ cmp w21, 1 ++ bne .L1200 ++ cmp x4, 0 ++ mov w27, 2 ++ csel w27, w27, wzr, ne ++ mov w28, 0 ++ lsl w27, w27, 1 ++ mov w23, 0 ++.L1201: ++ cmp w23, w24 ++ bcc .L1203 ++ mov w23, 0 ++ b .L1199 ++.L1203: ++ and w6, w23, 3 ++ cbz x26, .L1216 ++ lsl w3, w23, 9 ++ add x3, x26, x3 ++.L1202: ++ add x4, x22, w28, uxtw ++ mov w2, w6 ++ mov x0, x20 ++ str w6, [x29, 108] ++ mov w1, 1 ++ bl NandcCopy1KB ++ ldr w6, [x29, 108] ++ mov x5, 0 ++ mov x4, 0 ++ mov w2, 2 ++ mov w3, w6 ++ mov w0, w25 ++ mov w1, 1 ++ add w23, w23, 2 ++ bl NandcXferStart ++ add w28, w28, w27 ++ mov w1, 1 ++ mov w0, w25 ++ bl NandcXferComp ++ b .L1201 ++.L1216: ++ mov x3, 0 ++ b .L1202 ++.L1200: ++ mov w0, w25 ++ mov x5, 0 ++ mov x4, 0 ++ mov w3, 0 ++ mov w2, 2 ++ mov w1, 0 ++ bl NandcXferStart ++ mov w27, 2 ++ cmp x22, 0 ++ mov w28, 0 ++ csel w27, w27, wzr, ne ++ mov w23, 0 ++ lsl w0, w27, 1 ++ mov w27, 0 ++ str w0, [x29, 108] ++.L1204: ++ cmp w24, w27 ++ bls .L1199 ++ mov w0, w25 ++ mov w1, w21 ++ bl NandcXferComp ++ ldr w0, [x20, 32] ++ add w7, w27, 2 ++ str w0, [x29, 120] ++ cmp w24, w7 ++ bls .L1205 ++ and w3, w7, 3 ++ str w7, [x29, 104] ++ mov x5, 0 ++ mov x4, 0 ++ mov w2, 2 ++ mov w1, 0 ++ mov w0, w25 ++ bl NandcXferStart ++ ldr w7, [x29, 104] ++.L1205: ++ ldr w0, [x29, 120] ++ tbnz x0, 2, .L1217 ++ ldr w0, [x29, 120] ++ ubfx x1, x0, 3, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 27, 1 ++ orr w0, w1, w0, lsl 5 ++ cmp w23, w0 ++ csel w23, w23, w0, cs ++.L1206: ++ and w2, w27, 3 ++ cbz x26, .L1218 ++ lsl w3, w27, 9 ++ add x3, x26, x3 ++.L1207: ++ add x4, x22, w28, uxtw ++ mov x0, x20 ++ str w7, [x29, 104] ++ mov w1, 0 ++ bl NandcCopy1KB ++ ldp w7, w0, [x29, 104] ++ add w28, w28, w0 ++ mov w27, w7 ++ b .L1204 ++.L1217: ++ mov w23, -1 ++ b .L1206 ++.L1218: ++ mov x3, 0 ++ b .L1207 ++ .size NandcXferData, .-NandcXferData ++ .align 2 ++ .global FlashReadRawPage ++ .type FlashReadRawPage, %function ++FlashReadRawPage: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ ands w19, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov w21, w1 ++ str x23, [sp, 48] ++ adrp x1, .LANCHOR1+481 ++ mov x22, x2 ++ mov x23, x3 ++ ldrb w20, [x1, #:lo12:.LANCHOR1+481] ++ bne .L1222 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrb w5, [x0, 73] ++ ldr w0, [x0, 76] ++ mul w0, w5, w0 ++ cmp w0, w21 ++ mov w0, 4 ++ csel w20, w20, w0, ls ++.L1222: ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashCs ++ mov w1, w21 ++ mov w0, w19 ++ bl FlashReadCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w2, w20 ++ mov x4, x23 ++ mov x3, x22 ++ mov w1, 0 ++ mov w0, w19 ++ bl NandcXferData ++ mov w2, w0 ++ mov w0, w19 ++ bl NandcFlashDeCs ++ mov w0, w2 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size FlashReadRawPage, .-FlashReadRawPage ++ .align 2 ++ .global FlashDdrTunningRead ++ .type FlashDdrTunningRead, %function ++FlashDdrTunningRead: ++ stp x29, x30, [sp, -112]! ++ 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] ++ and w23, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov w25, w1 ++ stp x27, x28, [sp, 80] ++ mov w22, 6 ++ mov x24, x2 ++ mov x28, x3 ++ ldr x0, [x19, 136] ++ mov w26, w4 ++ ldr w0, [x0, 304] ++ str w0, [x29, 108] ++ ldr w0, [x19, 2388] ++ cmp w0, 8 ++ mov w0, 12 ++ csel w22, w22, w0, cc ++ cbz w4, .L1238 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++ mov w0, w23 ++ bl FlashReset ++ mov x3, x28 ++ mov x2, x24 ++ mov w1, w25 ++ mov w0, w23 ++ bl FlashReadRawPage ++ mov w20, w0 ++ ldrb w0, [x19, 2357] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x19, 2357] ++ bl NandcSetMode ++ cmn w20, #1 ++ bne .L1227 ++.L1236: ++ mov w20, -1 ++.L1224: ++ 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 ++.L1227: ++ mov w2, w20 ++ mov w1, w25 ++ adrp x0, .LC89 ++ add x0, x0, :lo12:.LC89 ++ bl printk ++ cmp w20, 9 ++ bhi .L1229 ++ sbfiz x0, x23, 4, 32 ++ ldr x0, [x19, x0] ++ ldr w1, [x0, 3840] ++ ldr w1, [x0] ++ orr w1, w1, 131072 ++ str w1, [x0] ++.L1229: ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldr w1, [x0, 1616] ++ add w1, w1, 1 ++ str w1, [x0, 1616] ++ cmp w1, 2047 ++ bls .L1224 ++ mov x28, 0 ++ mov x24, 0 ++ str wzr, [x0, 1616] ++.L1226: ++ mov w5, 0 ++ mov w21, 0 ++ mov w6, 0 ++ mov w19, 0 ++ mov w27, -1 ++.L1234: ++ stp w5, w6, [x29, 100] ++ mov w0, w22 ++ bl NandcSetDdrPara ++ mov w1, w25 ++ mov x3, x28 ++ mov x2, x24 ++ mov w0, w23 ++ bl FlashReadRawPage ++ add w1, w20, 1 ++ cmp w0, w1 ++ ldp w5, w6, [x29, 100] ++ bhi .L1230 ++ cmp w0, 2 ++ bhi .L1240 ++ add w19, w19, 1 ++ cmp w19, 9 ++ bls .L1240 ++ mov w1, w21 ++ mov w20, w0 ++ sub w21, w22, w19 ++ mov w27, 0 ++.L1232: ++ cmp w19, w6 ++ csel w21, w21, w1, hi ++.L1233: ++ cbz w21, .L1235 ++ mov w1, w21 ++ adrp x0, .LC90 ++ add x0, x0, :lo12:.LC90 ++ bl printk ++ mov w0, w21 ++ bl NandcSetDdrPara ++.L1235: ++ cbz w27, .L1224 ++ adrp x0, .LC91 ++ mov w2, w25 ++ mov w1, w23 ++ add x0, x0, :lo12:.LC91 ++ bl printk ++ cbz w26, .L1236 ++ ldr w1, [x29, 108] ++ lsr w0, w1, 8 ++ bl NandcSetDdrPara ++ b .L1224 ++.L1238: ++ mov w20, 1024 ++ b .L1226 ++.L1230: ++ cmp w19, w6 ++ bls .L1241 ++ sub w21, w5, w19 ++ cmp w19, 7 ++ bhi .L1233 ++ mov w6, w19 ++.L1241: ++ mov w19, 0 ++ b .L1231 ++.L1240: ++ mov w5, w22 ++ mov w20, w0 ++ mov w27, 0 ++ mov x28, 0 ++ mov x24, 0 ++.L1231: ++ add w22, w22, 2 ++ cmp w22, 69 ++ bls .L1234 ++ mov w1, w21 ++ mov w21, w5 ++ b .L1232 ++ .size FlashDdrTunningRead, .-FlashDdrTunningRead ++ .align 2 ++ .global FlashReadPage ++ .type FlashReadPage, %function ++FlashReadPage: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ stp x23, x24, [sp, 48] ++ mov w0, w20 ++ stp x21, x22, [sp, 32] ++ mov x23, x2 ++ stp x25, x26, [sp, 64] ++ mov w22, w1 ++ mov x24, x3 ++ bl FlashReadRawPage ++ mov w19, w0 ++ cmn w0, #1 ++ bne .L1251 ++ adrp x21, .LANCHOR0 ++ add x25, x21, :lo12:.LANCHOR0 ++ ldrb w26, [x25, 80] ++ cbnz w26, .L1252 ++.L1254: ++ add x21, x21, :lo12:.LANCHOR0 ++ ldrb w0, [x21, 2380] ++ cbz w0, .L1251 ++ ldr x0, [x21, 136] ++ mov w4, 1 ++ mov x3, x24 ++ mov x2, x23 ++ mov w1, w22 ++ ldr w25, [x0, 304] ++ mov w0, w20 ++ bl FlashDdrTunningRead ++ mov w19, w0 ++ cmn w0, #1 ++ beq .L1255 ++ ldrb w0, [x21, 2464] ++ cmp w19, w0, lsr 1 ++ bls .L1251 ++.L1255: ++ lsr w0, w25, 8 ++ bl NandcSetDdrPara ++ b .L1251 ++.L1252: ++ strb wzr, [x25, 80] ++ mov x3, x24 ++ mov x2, x23 ++ mov w1, w22 ++ mov w0, w20 ++ bl FlashReadRawPage ++ strb w26, [x25, 80] ++ cmn w0, #1 ++ beq .L1254 ++ mov w19, w0 ++.L1251: ++ adrp x21, .LANCHOR4 ++ add x21, x21, :lo12:.LANCHOR4 ++ ldr x4, [x21, 1624] ++ cbz x4, .L1250 ++ cmn w19, #1 ++ bne .L1250 ++ mov x3, x24 ++ mov x2, x23 ++ mov w1, w22 ++ mov w0, w20 ++ blr x4 ++ mov w19, w0 ++ mov w1, w0 ++ mov w3, w22 ++ mov w2, w20 ++ adrp x0, .LC92 ++ add x0, x0, :lo12:.LC92 ++ bl printk ++ cmn w19, #1 ++ bne .L1250 ++ adrp x0, .LANCHOR0+204 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+204] ++ cbz w0, .L1250 ++ mov w0, w20 ++ bl flash_enter_slc_mode ++ ldr x4, [x21, 1624] ++ mov x3, x24 ++ mov x2, x23 ++ mov w1, w22 ++ mov w0, w20 ++ blr x4 ++ mov w19, w0 ++ mov w0, w20 ++ bl flash_exit_slc_mode ++.L1250: ++ 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], 80 ++ 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, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ add x22, x19, :lo12:.LANCHOR0 ++ and w20, w0, 255 ++ mov w21, w1 ++ ldrb w0, [x22, 2357] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x22, 2357] ++ bl NandcSetMode ++ mov w4, 0 ++ mov x3, 0 ++ mov x2, 0 ++ mov w1, w21 ++ mov w0, w20 ++ bl FlashDdrTunningRead ++ mov x3, 0 ++ mov w22, w0 ++ mov x2, 0 ++ mov w1, w21 ++ mov w0, w20 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ beq .L1271 ++ cmn w22, #1 ++ bne .L1272 ++.L1271: ++ add x20, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x20, 2357] ++ tbz x0, 0, .L1272 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++ strb wzr, [x20, 2380] ++.L1273: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L1272: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w0, 1 ++ strb w0, [x19, 2380] ++ b .L1273 ++ .size FlashDdrParaScan, .-FlashDdrParaScan ++ .align 2 ++ .global FlashLoadPhyInfo ++ .type FlashLoadPhyInfo, %function ++FlashLoadPhyInfo: ++ stp x29, x30, [sp, -128]! ++ mov w0, 60 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR4 ++ strb w0, [x29, 120] ++ mov w0, 40 ++ strb w0, [x29, 121] ++ mov w0, 24 ++ strb w0, [x29, 122] ++ mov w0, 16 ++ strb w0, [x29, 123] ++ add x0, x20, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ adrp x22, .LANCHOR1 ++ stp x27, x28, [sp, 80] ++ add x22, x22, :lo12:.LANCHOR1 ++ stp x25, x26, [sp, 64] ++ mov w27, 20036 ++ mov w19, 0 ++ mov w24, 4 ++ ldr w0, [x0, 76] ++ mov w23, -1 ++ str w0, [x29, 108] ++ add x0, x21, :lo12:.LANCHOR4 ++ movk w27, 0x4e41, lsl 16 ++ add x22, x22, 472 ++ ldr x1, [x0, 1608] ++ str x1, [x0, 1632] ++ str wzr, [x0, 1640] ++ mov w0, 0 ++ bl flash_enter_slc_mode ++.L1282: ++ add w28, w19, 1 ++ add x25, x21, :lo12:.LANCHOR4 ++ mov x26, 0 ++.L1284: ++ add x0, x29, 120 ++ ldrb w0, [x0, x26] ++ bl FlashBchSel ++ ldr x2, [x25, 1608] ++ mov x3, 0 ++ mov w1, w19 ++ mov w0, 0 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ bne .L1283 ++ ldr x2, [x25, 1608] ++ mov x3, 0 ++ mov w1, w28 ++ mov w0, 0 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ bne .L1283 ++ add x26, x26, 1 ++ cmp x26, 4 ++ bne .L1284 ++.L1285: ++ ldr w0, [x29, 108] ++ subs w24, w24, #1 ++ add w19, w19, w0 ++ bne .L1282 ++ b .L1290 ++.L1286: ++ mov w1, 2036 ++ add x0, x6, 12 ++ bl js_hash ++ ldr w1, [x6, 8] ++ cmp w1, w0 ++ bne .L1292 ++ add x1, x6, 160 ++ mov w2, 32 ++ mov x0, x22 ++ bl ftl_memcpy ++ ldr x1, [x25, 1632] ++ add x23, x20, :lo12:.LANCHOR0 ++ mov w2, 32 ++ add x0, x23, 96 ++ add x1, x1, 192 ++ bl ftl_memcpy ++ ldr x1, [x25, 1632] ++ mov w2, 852 ++ add x0, x23, 1272 ++ add x1, x1, 224 ++ bl ftl_memcpy ++ ldrh w0, [x22, 10] ++ bl FlashBlockAlignInit ++ str w19, [x25, 1640] ++ ldr x1, [x25, 1632] ++ ldr w0, [x1, 1076] ++ strb w0, [x23, 2380] ++ ldr w0, [x23, 76] ++ udiv w0, w19, w0 ++ add w0, w0, 1 ++ cmp w0, 1 ++ bls .L1288 ++.L1295: ++ str w0, [x25, 1644] ++ add x0, x21, :lo12:.LANCHOR4 ++ ldrh w1, [x1, 14] ++ mov w23, 0 ++ strb w1, [x0, 1648] ++ b .L1285 ++.L1288: ++ mov w0, 2 ++ b .L1295 ++.L1292: ++ mov w23, -1 ++ b .L1285 ++.L1283: ++ add x25, x21, :lo12:.LANCHOR4 ++ ldr x6, [x25, 1632] ++ ldr w0, [x6] ++ cmp w0, w27 ++ bne .L1285 ++ cbnz w23, .L1286 ++ add x20, x20, :lo12:.LANCHOR0 ++ ldr w0, [x20, 76] ++ udiv w19, w19, w0 ++ add w19, w19, 1 ++ str w19, [x25, 1644] ++.L1290: ++ mov w0, 0 ++ bl flash_exit_slc_mode ++ mov w0, w23 ++ 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 FlashLoadPhyInfo, .-FlashLoadPhyInfo ++ .align 2 ++ .global ToshibaReadRetrial ++ .type ToshibaReadRetrial, %function ++ToshibaReadRetrial: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ stp x19, x20, [sp, 16] ++ mov w0, w22 ++ stp x27, x28, [sp, 80] ++ mov x27, x3 ++ stp x23, x24, [sp, 48] ++ adrp x19, .LANCHOR0 ++ str x2, [x29, 112] ++ str w1, [x29, 120] ++ stp x25, x26, [sp, 64] ++ bl NandcWaitFlashReady ++ add x1, x19, :lo12:.LANCHOR0 ++ sbfiz x0, x22, 4, 32 ++ add x2, x1, x0 ++ ldr x23, [x1, x0] ++ ldrb w0, [x1, 128] ++ ldrb w28, [x2, 8] ++ sub w0, w0, #67 ++ str w28, [x29, 124] ++ add x20, x28, 8 ++ and w0, w0, 255 ++ add x20, x23, x20, lsl 8 ++ cmp w0, 1 ++ bls .L1313 ++ ldrb w0, [x1, 2380] ++ cbz w0, .L1314 ++ mov w24, 1 ++ mov w0, 0 ++ bl NandcSetDdrMode ++.L1298: ++ add x0, x23, x28, lsl 8 ++ mov w1, 92 ++ str w1, [x0, 2056] ++ mov w1, 197 ++ str w1, [x0, 2056] ++.L1297: ++ ldrsw x0, [x29, 124] ++ mov w21, 1 ++ mov w25, -1 ++ add x0, x0, 8 ++ add x0, x23, x0, lsl 8 ++ str x0, [x29, 104] ++.L1299: ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldrb w0, [x0, 1649] ++ add w0, w0, 1 ++ cmp w21, w0 ++ bcc .L1308 ++ mov w26, w25 ++.L1307: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w1, 0 ++ ldrb w0, [x0, 128] ++ sub w0, w0, #67 ++ and w0, w0, 255 ++ cmp w0, 1 ++ mov x0, x20 ++ bhi .L1309 ++ bl SandiskSetRRPara ++.L1310: ++ ldrsw x0, [x29, 124] ++ add x19, x19, :lo12:.LANCHOR0 ++ add x0, x0, 8 ++ add x23, x23, x0, lsl 8 ++ mov w0, 255 ++ str w0, [x23, 8] ++ ldrb w0, [x19, 2464] ++ add w0, w0, w0, lsl 1 ++ cmp w26, w0, lsr 2 ++ bcc .L1311 ++ cmn w26, #1 ++ mov w0, 256 ++ csel w26, w26, w0, eq ++.L1311: ++ mov w0, w22 ++ bl NandcWaitFlashReady ++ cbz w24, .L1296 ++ mov w0, 4 ++ bl NandcSetDdrMode ++.L1296: ++ 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 ++.L1314: ++ mov w24, 0 ++ b .L1298 ++.L1313: ++ mov w24, 0 ++ b .L1297 ++.L1308: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w1, w21 ++ ldrb w0, [x0, 128] ++ sub w0, w0, #67 ++ and w0, w0, 255 ++ cmp w0, 1 ++ mov x0, x20 ++ bhi .L1300 ++ bl SandiskSetRRPara ++.L1301: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 128] ++ cmp w0, 34 ++ bne .L1302 ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldrb w0, [x0, 1649] ++ sub w0, w0, #3 ++ cmp w21, w0 ++ bne .L1302 ++ ldr x1, [x29, 104] ++ mov w0, 179 ++ str w0, [x1, 8] ++.L1302: ++ add x0, x23, x28, lsl 8 ++ mov w1, 38 ++ str w1, [x0, 2056] ++ mov w1, 93 ++ str w1, [x0, 2056] ++ cbz w24, .L1303 ++ mov w0, 4 ++ bl NandcSetDdrMode ++ ldr w1, [x29, 120] ++ mov x3, x27 ++ ldr x2, [x29, 112] ++ mov w0, w22 ++ bl FlashReadRawPage ++ mov w26, w0 ++ mov w0, 0 ++ bl NandcSetDdrMode ++.L1304: ++ cmn w26, #1 ++ beq .L1305 ++ add x0, x19, :lo12:.LANCHOR0 ++ cmn w25, #1 ++ csel w25, w25, w26, ne ++ ldrb w0, [x0, 2464] ++ add w0, w0, w0, lsl 1 ++ cmp w26, w0, lsr 2 ++ bcc .L1307 ++ mov x27, 0 ++ str xzr, [x29, 112] ++.L1305: ++ add w21, w21, 1 ++ b .L1299 ++.L1300: ++ bl ToshibaSetRRPara ++ b .L1301 ++.L1303: ++ ldr w1, [x29, 120] ++ mov x3, x27 ++ ldr x2, [x29, 112] ++ mov w0, w22 ++ bl FlashReadRawPage ++ mov w26, w0 ++ b .L1304 ++.L1309: ++ bl ToshibaSetRRPara ++ b .L1310 ++ .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] ++ and w22, w0, 255 ++ stp x19, x20, [sp, 16] ++ mov w0, w22 ++ stp x23, x24, [sp, 48] ++ mov x23, x2 ++ stp x25, x26, [sp, 64] ++ mov x24, x3 ++ stp x27, x28, [sp, 80] ++ mov w25, w1 ++ bl NandcWaitFlashReady ++ adrp x20, .LANCHOR0 ++ sbfiz x1, x22, 4, 32 ++ add x0, x20, :lo12:.LANCHOR0 ++ add x2, x0, x1 ++ adrp x28, .LANCHOR4 ++ mov x26, x0 ++ add x28, x28, :lo12:.LANCHOR4 ++ ldr x1, [x0, x1] ++ mov w27, 1 ++ ldrb w21, [x2, 8] ++ mov w19, -1 ++ add x21, x21, 8 ++ add x21, x1, x21, lsl 8 ++.L1325: ++ ldrb w0, [x28, 1649] ++ add w0, w0, 1 ++ cmp w27, w0 ++ bcc .L1329 ++.L1328: ++ add x20, x20, :lo12:.LANCHOR0 ++ mov x0, x21 ++ mov w1, 0 ++ bl SamsungSetRRPara ++ ldrb w0, [x20, 2464] ++ add w0, w0, w0, lsl 1 ++ cmp w19, w0, lsr 2 ++ bcc .L1324 ++ cmn w19, #1 ++ mov w0, 256 ++ csel w19, w19, w0, eq ++.L1324: ++ 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 ++.L1329: ++ mov w1, w27 ++ mov x0, x21 ++ bl SamsungSetRRPara ++ mov x3, x24 ++ mov x2, x23 ++ mov w1, w25 ++ mov w0, w22 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ beq .L1326 ++ ldrb w1, [x26, 2464] ++ cmn w19, #1 ++ csel w19, w19, w0, ne ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L1331 ++ mov x24, 0 ++ mov x23, 0 ++.L1326: ++ add w27, w27, 1 ++ b .L1325 ++.L1331: ++ mov w19, w0 ++ b .L1328 ++ .size SamsungReadRetrial, .-SamsungReadRetrial ++ .align 2 ++ .global MicronReadRetrial ++ .type MicronReadRetrial, %function ++MicronReadRetrial: ++ stp x29, x30, [sp, -160]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ adrp x0, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ str w1, [x29, 156] ++ add x1, x0, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ mov x23, x2 ++ stp x25, x26, [sp, 64] ++ mov x24, x3 ++ stp x27, x28, [sp, 80] ++ ldrb w19, [x1, 2464] ++ ldrb w1, [x1, 204] ++ cbnz w1, .L1339 ++ add w19, w19, w19, lsl 1 ++ asr w19, w19, 2 ++.L1340: ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w22, 0 ++ str x0, [x29, 144] ++ mov w27, 239 ++ add x0, x0, w20, sxtw 4 ++ mov w28, 137 ++ str x0, [x29, 136] ++.L1350: ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ ldr x0, [x29, 136] ++ adrp x7, .LANCHOR4 ++ add x7, x7, :lo12:.LANCHOR4 ++ mov w21, 0 ++ mov w25, -1 ++ ldrb w4, [x0, 8] ++ ldr x8, [x0] ++ add x26, x8, x4, lsl 8 ++.L1341: ++ ldrb w0, [x7, 1649] ++ cmp w21, w0 ++ bcc .L1345 ++.L1344: ++ add x4, x8, x4, lsl 8 ++ mov x0, 1000 ++ str x4, [x29, 128] ++ str w27, [x4, 2056] ++ str w28, [x4, 2052] ++ bl __const_udelay ++ ldr x4, [x29, 128] ++ cmp w25, w19 ++ str wzr, [x4, 2048] ++ str wzr, [x4, 2048] ++ str wzr, [x4, 2048] ++ str wzr, [x4, 2048] ++ bcc .L1346 ++ cmn w25, #1 ++ mov w0, 256 ++ csel w25, w25, w0, eq ++.L1346: ++ cmp w25, 256 ++ ccmn w25, #1, 4, ne ++ bne .L1347 ++ ldr w2, [x29, 156] ++ adrp x0, .LC93 ++ mov w4, w25 ++ mov w3, w21 ++ mov w1, w21 ++ add x0, x0, :lo12:.LC93 ++ bl printk ++ cbnz w22, .L1348 ++ ldr x0, [x29, 144] ++ ldrb w0, [x0, 204] ++ cbz w0, .L1338 ++ cmn w25, #1 ++ bne .L1338 ++ mov w1, 3 ++ mov w0, w20 ++ mov w22, 1 ++ bl micron_auto_read_calibration_config ++ b .L1350 ++.L1339: ++ mov w1, 3 ++ sdiv w19, w19, w1 ++ b .L1340 ++.L1345: ++ str w27, [x26, 2056] ++ mov x0, 1000 ++ str w28, [x26, 2052] ++ stp x4, x7, [x29, 104] ++ str x8, [x29, 120] ++ bl __const_udelay ++ add w9, w21, 1 ++ str w9, [x26, 2048] ++ str wzr, [x26, 2048] ++ mov x3, x24 ++ ldr w1, [x29, 156] ++ mov x2, x23 ++ str wzr, [x26, 2048] ++ mov w0, w20 ++ str wzr, [x26, 2048] ++ str w9, [x29, 128] ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldr w9, [x29, 128] ++ ldp x4, x7, [x29, 104] ++ ldr x8, [x29, 120] ++ beq .L1342 ++ cmn w25, #1 ++ csel w25, w25, w0, ne ++ cmp w0, w19 ++ bcc .L1352 ++ mov x24, 0 ++ mov x23, 0 ++.L1342: ++ mov w21, w9 ++ b .L1341 ++.L1352: ++ mov w25, w0 ++ mov x24, 0 ++ mov x23, 0 ++ b .L1344 ++.L1348: ++ mov w0, w20 ++ mov w1, 0 ++ bl micron_auto_read_calibration_config ++ cmn w25, #1 ++ mov w0, 256 ++ csel w25, w25, w0, eq ++.L1338: ++ 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], 160 ++ ret ++.L1347: ++ cbz w22, .L1338 ++ mov w1, 0 ++ mov w0, w20 ++ mov w25, 256 ++ bl micron_auto_read_calibration_config ++ b .L1338 ++ .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 ++ stp x27, x28, [sp, 80] ++ and x27, x0, 255 ++ add x0, x21, :lo12:.LANCHOR0 ++ stp x25, x26, [sp, 64] ++ stp x23, x24, [sp, 48] ++ mov x24, x2 ++ stp x19, x20, [sp, 16] ++ add x2, x0, 1272 ++ mov w26, w1 ++ add x1, x2, x27 ++ ldrb w23, [x0, 1274] ++ mov x22, x27 ++ ldr x0, [x0, 88] ++ mov x25, x3 ++ ldrb w19, [x1, 12] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #7 ++ and w0, w0, 255 ++ cmp w0, 1 ++ bhi .L1364 ++ ldrb w19, [x1, 20] ++.L1364: ++ mov w0, w22 ++ bl NandcWaitFlashReady ++ add x4, x21, :lo12:.LANCHOR0 ++ mov w28, 0 ++ add x5, x4, 1276 ++ mov w20, -1 ++.L1365: ++ cmp w28, w23 ++ bcc .L1370 ++.L1369: ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr x1, [x0, 88] ++ add x0, x0, 1272 ++ add x0, x0, x27 ++ ldrb w1, [x1, 19] ++ sub w1, w1, #7 ++ and w1, w1, 255 ++ cmp w1, 1 ++ bhi .L1371 ++ strb w19, [x0, 20] ++.L1372: ++ add x21, x21, :lo12:.LANCHOR0 ++ ldrb w0, [x21, 2464] ++ add w0, w0, w0, lsl 1 ++ cmp w20, w0, lsr 2 ++ bcc .L1363 ++ cmn w20, #1 ++ mov w0, 256 ++ csel w20, w20, w0, eq ++.L1363: ++ 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 ++.L1370: ++ add w19, w19, 1 ++ ldrb w1, [x4, 1273] ++ and w19, w19, 255 ++ mov x2, x5 ++ cmp w23, w19 ++ stp x5, x4, [x29, 96] ++ csel w19, w19, wzr, hi ++ mov w0, w22 ++ mov w3, w19 ++ bl HynixSetRRPara ++ mov x3, x25 ++ mov x2, x24 ++ mov w1, w26 ++ mov w0, w22 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldp x5, x4, [x29, 96] ++ beq .L1367 ++ ldrb w1, [x4, 2464] ++ cmn w20, #1 ++ csel w20, w20, w0, ne ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L1374 ++ mov x25, 0 ++ mov x24, 0 ++.L1367: ++ add w28, w28, 1 ++ b .L1365 ++.L1374: ++ mov w20, w0 ++ b .L1369 ++.L1371: ++ strb w19, [x0, 12] ++ b .L1372 ++ .size HynixReadRetrial, .-HynixReadRetrial ++ .align 2 ++ .type samsung_read_retrial, %function ++samsung_read_retrial: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ and w23, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov x24, x2 ++ stp x25, x26, [sp, 64] ++ mov w0, w23 ++ stp x19, x20, [sp, 16] ++ mov w26, w1 ++ mov x25, x3 ++ stp x27, x28, [sp, 80] ++ bl NandcWaitFlashReady ++ adrp x22, .LANCHOR0 ++ add x0, x22, :lo12:.LANCHOR0 ++ sbfiz x1, x23, 4, 32 ++ add x3, x0, x1 ++ adrp x21, .LANCHOR3 ++ ldrb w2, [x0, 2356] ++ ldr x1, [x0, x1] ++ ldrb w19, [x3, 8] ++ cbnz w2, .L1382 ++ add x21, x21, :lo12:.LANCHOR3 ++ add x19, x1, x19, lsl 8 ++ add x21, x21, 16 ++ mov x27, x0 ++ mov x4, 0 ++ mov w20, -1 ++ mov w6, 239 ++ mov w5, 141 ++.L1386: ++ str w6, [x19, 2056] ++ add x0, x21, x4 ++ str w5, [x19, 2052] ++ add w28, w4, 1 ++ stp w6, w5, [x29, 96] ++ mov x3, x25 ++ ldrsb w0, [x0, 1] ++ mov x2, x24 ++ str w0, [x19, 2048] ++ mov w1, w26 ++ str wzr, [x19, 2048] ++ mov w0, w23 ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str x4, [x29, 104] ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldp w6, w5, [x29, 96] ++ ldr x4, [x29, 104] ++ beq .L1383 ++ ldrb w1, [x27, 2464] ++ cmn w20, #1 ++ csel w20, w20, w0, ne ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L1394 ++ mov x25, 0 ++ mov x24, 0 ++.L1383: ++ add x4, x4, 1 ++ cmp x4, 25 ++ bne .L1386 ++ mov w28, 26 ++.L1385: ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 141 ++.L1410: ++ str w0, [x19, 2052] ++ add x22, x22, :lo12:.LANCHOR0 ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ ldrb w0, [x22, 2464] ++ add w0, w0, w0, lsl 1 ++ cmp w20, w0, lsr 2 ++ bcc .L1392 ++ cmn w20, #1 ++ mov w0, 256 ++ csel w20, w20, w0, eq ++.L1392: ++ cmp w20, 256 ++ ccmn w20, #1, 4, ne ++ bne .L1393 ++ adrp x0, .LC94 ++ mov w4, w20 ++ mov w3, w28 ++ mov w2, w26 ++ mov w1, w28 ++ add x0, x0, :lo12:.LC94 ++ bl printk ++.L1393: ++ mov w0, w23 ++ bl NandcWaitFlashReady ++ 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 ++.L1394: ++ mov w20, w0 ++ b .L1385 ++.L1382: ++ add x21, x21, :lo12:.LANCHOR3 ++ add x19, x1, x19, lsl 8 ++ add x21, x21, 52 ++ mov x27, x0 ++ mov w20, -1 ++ mov w28, 1 ++ mov w5, 239 ++ mov w4, 137 ++.L1391: ++ str w5, [x19, 2056] ++ mov x3, x25 ++ str w4, [x19, 2052] ++ mov x2, x24 ++ stp w5, w4, [x29, 100] ++ mov w1, w26 ++ ldrb w0, [x21] ++ str w0, [x19, 2048] ++ ldrb w0, [x21, 1] ++ str w0, [x19, 2048] ++ ldrb w0, [x21, 2] ++ str w0, [x19, 2048] ++ ldrb w0, [x21, 3] ++ str w0, [x19, 2048] ++ mov w0, w23 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldp w5, w4, [x29, 100] ++ beq .L1388 ++ ldrb w1, [x27, 2464] ++ cmn w20, #1 ++ csel w20, w20, w0, ne ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L1395 ++ mov x25, 0 ++ mov x24, 0 ++.L1388: ++ add w28, w28, 1 ++ add x21, x21, 4 ++ cmp w28, 26 ++ bne .L1391 ++.L1390: ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 137 ++ b .L1410 ++.L1395: ++ mov w20, w0 ++ b .L1390 ++ .size samsung_read_retrial, .-samsung_read_retrial ++ .align 2 ++ .global FlashProgPage ++ .type FlashProgPage, %function ++FlashProgPage: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w20, w1 ++ stp x21, x22, [sp, 32] ++ adrp x1, .LANCHOR1+481 ++ str x23, [sp, 48] ++ mov x22, x2 ++ ldrb w21, [x1, #:lo12:.LANCHOR1+481] ++ ands w19, w0, 255 ++ mov x23, x3 ++ bne .L1412 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 73] ++ ldr w2, [x0, 76] ++ mul w1, w1, w2 ++ cmp w1, w20 ++ bls .L1412 ++ ldrb w0, [x0, 72] ++ cmp w0, 0 ++ mov w0, 4 ++ csel w21, w21, w0, eq ++.L1412: ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashCs ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashProgFirstCmd ++ mov x4, x23 ++ mov x3, x22 ++ mov w2, w21 ++ mov w1, 1 ++ mov w0, w19 ++ bl NandcXferData ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashProgSecondCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashReadStatus ++ mov w2, w0 ++ mov w0, w19 ++ bl NandcFlashDeCs ++ and w0, w2, 1 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size FlashProgPage, .-FlashProgPage ++ .align 2 ++ .global FlashSavePhyInfo ++ .type FlashSavePhyInfo, %function ++FlashSavePhyInfo: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR4 ++ add x20, x20, :lo12:.LANCHOR4 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ mov w23, 20036 ++ movk w23, 0x4e41, lsl 16 ++ adrp x19, .LANCHOR0 ++ ldr x0, [x20, 1608] ++ add x19, x19, :lo12:.LANCHOR0 ++ str x0, [x20, 1632] ++ mov w22, 0 ++ ldrb w0, [x20, 1650] ++ mov w21, 0 ++ bl FlashBchSel ++ ldr x0, [x20, 1608] ++ mov w2, 2048 ++ mov w1, 0 ++ bl ftl_memset ++ ldr x0, [x20, 1632] ++ mov w2, 32 ++ str w23, [x0] ++ ldr x0, [x20, 1632] ++ ldrb w1, [x19, 2358] ++ add x0, x0, 16 ++ strh w1, [x0, -4] ++ ldrb w1, [x19, 73] ++ strh w1, [x0, -2] ++ ldrb w1, [x19, 2380] ++ str w1, [x0, 1060] ++ add x1, x19, 2132 ++ bl ftl_memcpy ++ ldr x0, [x20, 1632] ++ mov w2, 8 ++ add x1, x19, 2360 ++ add x0, x0, 80 ++ bl ftl_memcpy ++ ldr x0, [x20, 1632] ++ mov w2, 32 ++ add x1, x19, 1232 ++ add x0, x0, 96 ++ bl ftl_memcpy ++ ldr x0, [x20, 1632] ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ mov w2, 32 ++ add x1, x1, 472 ++ add x0, x0, 160 ++ bl ftl_memcpy ++ ldr x0, [x20, 1632] ++ mov w2, 32 ++ add x1, x19, 96 ++ add x0, x0, 192 ++ bl ftl_memcpy ++ ldr x0, [x20, 1632] ++ mov w2, 852 ++ add x1, x19, 1272 ++ add x0, x0, 224 ++ bl ftl_memcpy ++ ldr x6, [x20, 1632] ++ mov w1, 2036 ++ add x0, x6, 12 ++ bl js_hash ++ str w0, [x6, 8] ++ mov w0, 1592 ++ str w0, [x6, 4] ++ ldr x0, [x20, 1656] ++ str x0, [x20, 1632] ++ mov w0, 0 ++ bl flash_enter_slc_mode ++.L1421: ++ ldr w1, [x19, 76] ++ mov w2, 0 ++ mov w0, 0 ++ mul w1, w21, w1 ++ bl FlashEraseBlock ++ ldrb w0, [x19, 204] ++ cbz w0, .L1416 ++ mov w24, 0 ++.L1417: ++ ldr w1, [x19, 76] ++ mov x3, 0 ++ ldr x2, [x20, 1608] ++ mov w0, 0 ++ madd w1, w21, w1, w24 ++ add w24, w24, 1 ++ bl FlashProgPage ++ cmp w24, 10 ++ bne .L1417 ++.L1418: ++ ldr w1, [x19, 76] ++ mov x3, 0 ++ ldr x2, [x20, 1656] ++ mov w0, 0 ++ mul w1, w21, w1 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ add w7, w21, 1 ++ beq .L1419 ++ ldr x6, [x20, 1632] ++ ldr w0, [x6] ++ cmp w0, w23 ++ bne .L1419 ++ mov w1, 2036 ++ add x0, x6, 12 ++ bl js_hash ++ ldr w1, [x6, 8] ++ cmp w1, w0 ++ bne .L1419 ++ ldr w0, [x19, 76] ++ cmp w22, 1 ++ str w7, [x20, 1644] ++ mul w21, w0, w21 ++ str w21, [x20, 1640] ++ beq .L1422 ++ mov w22, 1 ++.L1419: ++ mov w21, w7 ++ cmp w7, 4 ++ bne .L1421 ++.L1420: ++ mov w0, 0 ++ bl flash_exit_slc_mode ++ cmp w22, 0 ++ csetm w0, eq ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L1416: ++ ldr w1, [x19, 76] ++ mov x3, 0 ++ ldr x2, [x20, 1608] ++ mov w0, 0 ++ mul w1, w21, w1 ++ bl FlashProgPage ++ ldr w1, [x19, 76] ++ mov x3, 0 ++ ldr x2, [x20, 1608] ++ mov w0, 0 ++ mul w1, w21, w1 ++ add w1, w1, 1 ++ bl FlashProgPage ++ b .L1418 ++.L1422: ++ mov w22, 2 ++ b .L1420 ++ .size FlashSavePhyInfo, .-FlashSavePhyInfo ++ .align 2 ++ .global FlashReadIdbDataRaw ++ .type FlashReadIdbDataRaw, %function ++FlashReadIdbDataRaw: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x25, x26, [sp, 64] ++ mov x25, x0 ++ mov w0, 60 ++ stp x19, x20, [sp, 16] ++ strb w0, [x29, 120] ++ mov w0, 40 ++ strb w0, [x29, 121] ++ mov w0, 24 ++ strb w0, [x29, 122] ++ mov w0, 16 ++ adrp x20, .LANCHOR0 ++ strb w0, [x29, 123] ++ add x0, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x27, x28, [sp, 80] ++ ldrb w26, [x0, 2464] ++ ldr w0, [x0, 2376] ++ cbz w0, .L1430 ++ mov w0, 0 ++ bl flash_enter_slc_mode ++.L1430: ++ adrp x19, .LANCHOR4 ++ mov w28, 35899 ++ add x24, x20, :lo12:.LANCHOR0 ++ add x27, x29, 120 ++ add x19, x19, :lo12:.LANCHOR4 ++ mov w23, -1 ++ mov w21, 2 ++ movk w28, 0xfcdc, lsl 16 ++ mov w2, 2048 ++ mov w1, 0 ++ mov x0, x25 ++ bl ftl_memset ++.L1431: ++ ldrb w0, [x24, 73] ++ cmp w21, w0 ++ bcc .L1436 ++.L1435: ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w0, w26 ++ bl FlashBchSel ++ ldr w0, [x20, 2376] ++ cbz w0, .L1429 ++ mov w0, 0 ++ bl flash_exit_slc_mode ++.L1429: ++ mov w0, w23 ++ 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 ++.L1436: ++ mov x22, 0 ++.L1433: ++ ldrb w4, [x22, x27] ++ str w4, [x29, 108] ++ mov w0, w4 ++ bl FlashBchSel ++ ldr w1, [x24, 76] ++ mov x3, 0 ++ ldr x2, [x19, 1608] ++ mov w0, 0 ++ mul w1, w21, w1 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldr w4, [x29, 108] ++ bne .L1432 ++ add x22, x22, 1 ++ cmp x22, 4 ++ bne .L1433 ++.L1434: ++ add w21, w21, 1 ++ b .L1431 ++.L1439: ++ mov w23, 0 ++ b .L1435 ++.L1432: ++ ldr x0, [x19, 1608] ++ ldr w0, [x0] ++ cmp w0, w28 ++ bne .L1434 ++ mov w1, w4 ++ adrp x0, .LC95 ++ add x0, x0, :lo12:.LC95 ++ bl printk ++ ldr x1, [x19, 1608] ++ mov w2, 2048 ++ mov x0, x25 ++ bl ftl_memcpy ++ ldr x0, [x19, 1608] ++ ldr w0, [x0, 512] ++ strb w0, [x24, 73] ++ ldr w0, [x19, 1644] ++ cmp w21, w0 ++ bcs .L1439 ++ mov w23, 0 ++ str w21, [x19, 1644] ++ bl FlashSavePhyInfo ++ b .L1434 ++ .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] ++ adrp x19, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR4 ++ add x20, x23, :lo12:.LANCHOR4 ++ stp x21, x22, [sp, 32] ++ stp x27, x28, [sp, 80] ++ mov x21, x0 ++ stp x25, x26, [sp, 64] ++ mov w0, 32768 ++ bl ftl_malloc ++ str x0, [x20, 1608] ++ mov w0, 32768 ++ bl ftl_malloc ++ str x0, [x20, 1656] ++ mov w0, 4096 ++ bl ftl_dma32_malloc ++ add x22, x19, :lo12:.LANCHOR0 ++ str x0, [x20, 1664] ++ mov w0, 32768 ++ bl ftl_malloc ++ str x0, [x20, 1672] ++ mov w0, 4096 ++ bl ftl_dma32_malloc ++ str x0, [x20, 1680] ++ mov w0, 50 ++ strb w0, [x20, 1648] ++ adrp x25, .LC96 ++ strb w0, [x22, 73] ++ mov w0, 128 ++ strb wzr, [x20, 1688] ++ add x25, x25, :lo12:.LC96 ++ str wzr, [x20, 1616] ++ mov w24, 0 ++ str wzr, [x20, 1644] ++ mov w28, 144 ++ str w0, [x22, 76] ++ mov w0, 60 ++ strb w0, [x20, 1650] ++ add x20, x22, 2132 ++ mov x27, x20 ++ strb wzr, [x22, 2380] ++ strb wzr, [x22, 72] ++ mov x0, x21 ++ bl NandcInit ++.L1454: ++ ldrb w1, [x22, 8] ++ and w26, w24, 255 ++ str w1, [x29, 108] ++ mov w0, w26 ++ ldr x21, [x22] ++ bl FlashReset ++ mov w0, w26 ++ bl NandcFlashCs ++ ldr w1, [x29, 108] ++ mov x0, 1000 ++ ubfiz x1, x1, 8, 8 ++ add x21, x21, x1 ++ str w28, [x21, 2056] ++ str wzr, [x21, 2052] ++ bl __const_udelay ++ ldr w0, [x21, 2048] ++ and w0, w0, 255 ++ strb w0, [x20] ++ cmp w0, 44 ++ ldr w1, [x21, 2048] ++ strb w1, [x20, 1] ++ ldr w1, [x21, 2048] ++ strb w1, [x20, 2] ++ ldr w1, [x21, 2048] ++ strb w1, [x20, 3] ++ ldr w1, [x21, 2048] ++ strb w1, [x20, 4] ++ ldr w1, [x21, 2048] ++ strb w1, [x20, 5] ++ bne .L1449 ++ mov w0, 239 ++ str w0, [x21, 2056] ++ mov w0, 1 ++ str w0, [x21, 2052] ++ mov x0, 1000 ++ bl __const_udelay ++ mov w0, 4 ++ str w0, [x21, 2048] ++ str wzr, [x21, 2048] ++ str wzr, [x21, 2048] ++ str wzr, [x21, 2048] ++.L1449: ++ mov w0, w26 ++ bl NandcFlashDeCs ++ ldrb w2, [x20] ++ sub w0, w2, #1 ++ and w0, w0, 255 ++ cmp w0, 253 ++ bhi .L1450 ++ ldrb w7, [x20, 5] ++ add w1, w24, 1 ++ ldrb w6, [x20, 4] ++ mov x0, x25 ++ ldrb w5, [x20, 3] ++ ldrb w4, [x20, 2] ++ ldrb w3, [x20, 1] ++ bl printk ++.L1450: ++ cbnz w24, .L1451 ++ ldrb w0, [x27] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 253 ++ bhi .L1502 ++ ldrb w0, [x27, 1] ++ cmp w0, 255 ++ beq .L1502 ++.L1451: ++ ldrb w0, [x20] ++ cmp w0, 181 ++ bne .L1453 ++ mov w0, 44 ++ strb w0, [x20] ++.L1453: ++ add w24, w24, 1 ++ add x22, x22, 16 ++ add x20, x20, 8 ++ cmp w24, 4 ++ bne .L1454 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 2132] ++ cmp w1, 173 ++ beq .L1455 ++ ldr w0, [x0, 2384] ++ bl NandcSetDdrMode ++.L1455: ++ add x20, x19, :lo12:.LANCHOR0 ++ mov w2, 852 ++ mov w1, 0 ++ add x0, x20, 1272 ++ bl ftl_memset ++ adrp x0, .LANCHOR1 ++ add x1, x0, :lo12:.LANCHOR1 ++ add x1, x1, 472 ++ ldr w4, [x20, 2392] ++ strb wzr, [x20, 80] ++ mov w2, 12336 ++ str x1, [x20, 88] ++ movk w2, 0x5638, lsl 16 ++ cmp w4, w2 ++ bne .L1456 ++ ldrb w1, [x1, 19] ++ cmp w1, 50 ++ beq .L1456 ++ mov w1, 1 ++ str w1, [x20, 2376] ++.L1456: ++ add x1, x19, :lo12:.LANCHOR0 ++ ldrb w2, [x1, 2133] ++ add w1, w2, 95 ++ and w3, w1, 255 ++ mov x1, 1 ++ cmp w3, 57 ++ bhi .L1457 ++ movk x1, 0x205, lsl 48 ++ lsr x1, x1, x3 ++ mvn x1, x1 ++.L1457: ++ and w1, w1, 1 ++ cmp w2, 241 ++ eor w1, w1, 1 ++ cset w3, eq ++ orr w1, w3, w1 ++ cbnz w1, .L1458 ++ cmp w2, 220 ++ bne .L1459 ++ add x1, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x1, 2135] ++ cmp w1, 149 ++ bne .L1459 ++.L1458: ++ add x1, x19, :lo12:.LANCHOR0 ++ add x3, x23, :lo12:.LANCHOR4 ++ mov w6, 16 ++ mov w5, 1 ++ add x7, x1, 2132 ++ strb w6, [x1, 73] ++ strb w5, [x1, 72] ++ strb w6, [x3, 1650] ++ ldrb w6, [x1, 2132] ++ add x1, x0, :lo12:.LANCHOR1 ++ cmp w6, 152 ++ strb w6, [x1, 3425] ++ strb w2, [x1, 3426] ++ bne .L1461 ++ ldrsb w1, [x7, 4] ++ tbnz w1, #31, .L1462 ++ mov w1, 24 ++ strb w1, [x3, 1650] ++.L1461: ++ cmp w4, 2049 ++ mov w1, 12336 ++ movk w1, 0x5638, lsl 16 ++ ccmp w4, w1, 4, ne ++ bne .L1464 ++ add x1, x23, :lo12:.LANCHOR4 ++ mov w3, 16 ++ strb w3, [x1, 1650] ++.L1464: ++ cmp w2, 218 ++ bne .L1465 ++ add x1, x0, :lo12:.LANCHOR1 ++ mov w2, 2048 ++ strh w2, [x1, 3438] ++ mov w2, -38 ++.L1548: ++ strb w2, [x1, 3426] ++.L1466: ++ add x20, x0, :lo12:.LANCHOR1 ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w2, 32 ++ add x1, x20, 3296 ++ add x0, x0, 96 ++ bl ftl_memcpy ++ mov w2, 32 ++ add x1, x20, 3424 ++ add x0, x20, 472 ++ bl ftl_memcpy ++.L1459: ++ add x20, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x20, 72] ++ cbnz w0, .L1469 ++ bl FlashLoadPhyInfoInRam ++ cbnz w0, .L1471 ++ ldr x0, [x20, 88] ++ ldrb w1, [x0, 17] ++ and w0, w1, 7 ++ strb w0, [x20, 2357] ++ tbnz x1, 0, .L1471 ++ mov w1, 1 ++ strb w1, [x20, 2380] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x20, 2357] ++ bl NandcSetMode ++.L1471: ++ add x20, x19, :lo12:.LANCHOR0 ++ ldr x0, [x20, 88] ++ ldrb w0, [x0, 26] ++ strb w0, [x20, 204] ++ bl FlashLoadPhyInfo ++ cbz w0, .L1469 ++ ldr w0, [x20, 2384] ++ cbz w0, .L1474 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++.L1543: ++ bl NandcSetMode ++ bl FlashLoadPhyInfo ++ cbz w0, .L1469 ++ add x20, x19, :lo12:.LANCHOR0 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++ ldr x0, [x20, 88] ++ ldrh w1, [x0, 14] ++ adrp x0, .LC97 ++ add x0, x0, :lo12:.LC97 ++ bl printk ++ bl FlashLoadPhyInfoInRam ++ cmn w0, #1 ++ beq .L1448 ++ bl FlashDieInfoInit ++ ldr x0, [x20, 88] ++ ldrb w0, [x0, 19] ++ bl FlashGetReadRetryDefault ++ ldr x0, [x20, 88] ++ adrp x1, .LANCHOR2+3550 ++ ldrh w1, [x1, #:lo12:.LANCHOR2+3550] ++ ldrb w2, [x0, 9] ++ add w1, w1, 4095 ++ cmp w2, w1, lsr 12 ++ blt .L1476 ++ ldrh w1, [x0, 14] ++ add w1, w1, 255 ++ cmp w2, w1, lsr 8 ++ bge .L1477 ++.L1476: ++ ldrh w1, [x0, 14] ++ and w1, w1, -256 ++ strh w1, [x0, 14] ++.L1477: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 2357] ++ tst w0, 6 ++ beq .L1478 ++ bl FlashSavePhyInfo ++ mov w0, 0 ++ bl flash_enter_slc_mode ++ add x0, x23, :lo12:.LANCHOR4 ++ ldr w1, [x0, 1640] ++ mov w0, 0 ++ bl FlashDdrParaScan ++ mov w0, 0 ++ bl flash_exit_slc_mode ++.L1478: ++ bl FlashSavePhyInfo ++.L1469: ++ add x21, x19, :lo12:.LANCHOR0 ++ add x20, x23, :lo12:.LANCHOR4 ++ ldr x2, [x21, 88] ++ str xzr, [x20, 1624] ++ ldrb w0, [x2, 26] ++ strb w0, [x21, 204] ++ ldrh w0, [x2, 16] ++ ubfx x1, x0, 7, 1 ++ strb w1, [x21, 80] ++ ubfx x1, x0, 3, 1 ++ strb w1, [x20, 1689] ++ ubfx x1, x0, 4, 1 ++ ubfx x0, x0, 8, 3 ++ strb w1, [x21, 2368] ++ strb w0, [x21, 2357] ++ ldrh w1, [x2, 10] ++ ldrb w0, [x2, 12] ++ sdiv w1, w1, w0 ++ ldrb w0, [x2, 18] ++ bl BuildFlashLsbPageTable ++ bl FlashDieInfoInit ++ ldr x0, [x21, 88] ++ ldrh w1, [x0, 16] ++ tbz x1, 6, .L1480 ++ ldrb w0, [x0, 19] ++ ldrb w1, [x21, 1274] ++ ldrb w2, [x21, 1273] ++ strb w1, [x20, 1649] ++ sub w1, w0, #1 ++ strb w0, [x21, 128] ++ and w1, w1, 255 ++ strb w2, [x21, 129] ++ cmp w1, 7 ++ bhi .L1481 ++ adrp x1, HynixReadRetrial ++ add x1, x1, :lo12:HynixReadRetrial ++ str x1, [x20, 1624] ++ sub w1, w0, #5 ++ and w1, w1, 255 ++ cmp w1, 1 ++ ccmp w0, 8, 4, hi ++ bne .L1482 ++ mov w1, 1 ++ str w1, [x21, 2456] ++.L1482: ++ add x1, x19, :lo12:.LANCHOR0 ++ cmp w0, 7 ++ beq .L1544 ++ cmp w0, 8 ++ bne .L1505 ++.L1544: ++ add x1, x1, 1300 ++.L1483: ++ mov x2, 0 ++ mov w3, 0 ++.L1485: ++ ldrsb w4, [x1, x2] ++ add x2, x2, 1 ++ cmp w4, 0 ++ cinc w3, w3, eq ++ cmp x2, 32 ++ bne .L1485 ++ cmp w3, 27 ++ bls .L1480 ++ bl FlashGetReadRetryDefault ++ bl FlashSavePhyInfo ++.L1480: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w2, 12336 ++ movk w2, 0x5638, lsl 16 ++ ldr w1, [x0, 2392] ++ cmp w1, w2 ++ bne .L1495 ++ ldrb w2, [x0, 204] ++ cbz w2, .L1495 ++ ldr x0, [x0, 88] ++ strb wzr, [x0, 18] ++.L1495: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w2, [x0, 2132] ++ cmp w2, 44 ++ bne .L1496 ++ ldrb w2, [x0, 2380] ++ cbz w2, .L1496 ++ mov w2, 12336 ++ movk w2, 0x5638, lsl 16 ++ cmp w1, w2 ++ bne .L1497 ++ ldrb w0, [x0, 204] ++ cbnz w0, .L1496 ++.L1497: ++ add x0, x19, :lo12:.LANCHOR0 ++ strb wzr, [x0, 2380] ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++.L1496: ++ add x1, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x1, 2357] ++ tst w0, 6 ++ beq .L1498 ++ ldrb w1, [x1, 2380] ++ cbnz w1, .L1499 ++ tbnz x0, 0, .L1498 ++.L1499: ++ add x23, x23, :lo12:.LANCHOR4 ++ mov w0, 0 ++ bl flash_enter_slc_mode ++ mov w0, 0 ++ ldr w1, [x23, 1640] ++ bl FlashDdrParaScan ++ mov w0, 0 ++ bl flash_exit_slc_mode ++.L1498: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w20, 16 ++ ldr x0, [x19, 88] ++ ldrb w0, [x0, 20] ++ bl FlashBchSel ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x0, x0, 3888 ++ bl FlashReadIdbDataRaw ++ mov w0, 18928 ++ strb w20, [x19, 73] ++ movk w0, 0x2, lsl 16 ++ bl FlashTimingCfg ++ ldr x1, [x19, 88] ++ ldrb w3, [x19, 2133] ++ ldrb w4, [x19, 2132] ++ ldrb w2, [x1, 12] ++ strh w2, [x19, 184] ++ ldrb w2, [x1, 7] ++ str w2, [x19, 180] ++ ldrb w2, [x19, 2135] ++ orr w2, w4, w2, lsl 24 ++ lsl w4, w3, w20 ++ orr w3, w4, w3, lsl 8 ++ ldrh w4, [x1, 14] ++ orr w2, w2, w3 ++ str w2, [x19, 176] ++ ldrb w2, [x19, 2358] ++ strh w2, [x19, 186] ++ ldrb w2, [x1, 13] ++ strh w2, [x19, 188] ++ strh w4, [x19, 190] ++ ldrh w2, [x1, 10] ++ strh w2, [x19, 192] ++ ldrb w3, [x1, 12] ++ ldrh w2, [x1, 10] ++ sdiv w2, w2, w3 ++ strh w2, [x19, 194] ++ ldrb w3, [x1, 9] ++ strh w3, [x19, 196] ++ ldrh w5, [x1, 10] ++ ldrb w2, [x1, 9] ++ mul w2, w2, w5 ++ mov w5, 512 ++ strh w5, [x19, 200] ++ ldrb w5, [x19, 73] ++ and w2, w2, 65535 ++ strh w5, [x19, 202] ++ strh w2, [x19, 198] ++ ldrb w5, [x19, 72] ++ cmp w5, 1 ++ bne .L1500 ++ ubfiz w2, w2, 1, 15 ++ lsr w4, w4, 1 ++ ubfiz w3, w3, 1, 15 ++ strh w2, [x19, 198] ++ strb w20, [x19, 73] ++ mov w2, 8 ++ strh w4, [x19, 190] ++ strh w3, [x19, 196] ++ strh w2, [x19, 202] ++.L1500: ++ ldrb w0, [x1, 20] ++ bl FlashBchSel ++ bl ftl_flash_suspend ++ mov w0, 0 ++.L1448: ++ 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 ++.L1465: ++ cmp w2, 220 ++ bne .L1467 ++ add x1, x0, :lo12:.LANCHOR1 ++ mov w2, 4096 ++ strh w2, [x1, 3438] ++ mov w2, -36 ++ b .L1548 ++.L1467: ++ cmp w2, 211 ++ bne .L1466 ++ add x1, x0, :lo12:.LANCHOR1 ++ mov w2, 4096 ++ strh w2, [x1, 3438] ++ mov w2, 2 ++ strb w2, [x1, 3437] ++ b .L1466 ++.L1474: ++ ldrb w0, [x20, 2357] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x20, 2357] ++ b .L1543 ++.L1505: ++ add x1, x1, 1292 ++ b .L1483 ++.L1481: ++ sub w1, w0, #17 ++ and w1, w1, 255 ++ cmp w1, 2 ++ bhi .L1487 ++ adrp x1, MicronReadRetrial ++ add x1, x1, :lo12:MicronReadRetrial ++ str x1, [x20, 1624] ++ cmp w0, 19 ++ beq .L1488 ++.L1549: ++ mov w0, 7 ++ b .L1546 ++.L1488: ++ mov w0, 15 ++.L1546: ++ strb w0, [x20, 1649] ++ b .L1480 ++.L1487: ++ sub w1, w0, #65 ++ cmp w0, 33 ++ and w1, w1, 255 ++ ccmp w1, 1, 0, ne ++ bhi .L1489 ++ adrp x0, ToshibaReadRetrial ++ add x0, x0, :lo12:ToshibaReadRetrial ++ str x0, [x20, 1624] ++ mov w0, 4 ++ strb w0, [x21, 129] ++ b .L1549 ++.L1489: ++ sub w2, w0, #34 ++ sub w1, w0, #67 ++ and w2, w2, 255 ++ and w1, w1, 255 ++ cmp w2, 1 ++ ccmp w1, 1, 0, hi ++ bhi .L1490 ++ adrp x2, ToshibaReadRetrial ++ add x2, x2, :lo12:ToshibaReadRetrial ++ str x2, [x20, 1624] ++ cmp w0, 35 ++ mov w2, 68 ++ ccmp w0, w2, 4, ne ++ beq .L1491 ++ mov w0, 7 ++.L1545: ++ strb w0, [x20, 1649] ++ cmp w1, 1 ++ add x0, x19, :lo12:.LANCHOR0 ++ bhi .L1493 ++ mov w1, 4 ++.L1547: ++ strb w1, [x0, 129] ++ b .L1480 ++.L1491: ++ mov w0, 17 ++ b .L1545 ++.L1493: ++ mov w1, 5 ++ b .L1547 ++.L1490: ++ cmp w0, 49 ++ bne .L1494 ++ adrp x0, SamsungReadRetrial ++ add x0, x0, :lo12:SamsungReadRetrial ++ str x0, [x20, 1624] ++ b .L1480 ++.L1494: ++ cmp w0, 50 ++ bne .L1480 ++ adrp x0, samsung_read_retrial ++ str wzr, [x21, 2376] ++ add x0, x0, :lo12:samsung_read_retrial ++ str x0, [x20, 1624] ++ b .L1480 ++.L1502: ++ mov w0, -2 ++ b .L1448 ++.L1462: ++ strb w5, [x3, 1688] ++ b .L1461 ++ .size FlashInit, .-FlashInit ++ .align 2 ++ .global FlashPageProgMsbFFData ++ .type FlashPageProgMsbFFData, %function ++FlashPageProgMsbFFData: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ and w23, w0, 255 ++ add x0, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ and w19, w2, 65535 ++ ldrb w2, [x0, 204] ++ cbz w2, .L1551 ++ ldr w0, [x0, 2376] ++ cbnz w0, .L1550 ++.L1551: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr x0, [x0, 88] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #5 ++ and w3, w0, 255 ++ cmp w3, 63 ++ bhi .L1550 ++ mov x2, 16391 ++ movk x2, 0x4000, lsl 16 ++ movk x2, 0x2000, lsl 32 ++ movk x2, 0x8000, lsl 48 ++ lsr x0, x2, x3 ++ tbz x0, 0, .L1550 ++ adrp x21, .LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR2 ++ adrp x22, .LANCHOR4 ++ mov w24, w1 ++ add x21, x21, 1500 ++ add x22, x22, :lo12:.LANCHOR4 ++.L1553: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr x0, [x0, 88] ++ ldrh w0, [x0, 10] ++ cmp w0, w19 ++ bhi .L1554 ++.L1550: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L1554: ++ ldrh w1, [x21, w19, sxtw 1] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L1550 ++ ldr x0, [x22, 1656] ++ mov w2, 32768 ++ mov w1, 255 ++ bl ftl_memset ++ ldr x3, [x22, 1656] ++ add w1, w19, w24 ++ add w19, w19, 1 ++ mov w0, w23 ++ and w19, w19, 65535 ++ mov x2, x3 ++ bl FlashProgPage ++ b .L1553 ++ .size FlashPageProgMsbFFData, .-FlashPageProgMsbFFData ++ .align 2 ++ .global FlashReadSlc2KPages ++ .type FlashReadSlc2KPages, %function ++FlashReadSlc2KPages: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ mov w0, 56 ++ stp x21, x22, [sp, 32] ++ str w2, [x29, 104] ++ adrp x2, .LANCHOR1+481 ++ stp x23, x24, [sp, 48] ++ nop // between mem op and mult-accumulate ++ umaddl x0, w1, w0, x19 ++ stp x25, x26, [sp, 64] ++ and w22, w1, 255 ++ adrp x25, .LANCHOR0 ++ ldrb w2, [x2, #:lo12:.LANCHOR1+481] ++ add x23, x25, :lo12:.LANCHOR0 ++ stp x27, x28, [sp, 80] ++ str x0, [x29, 96] ++ str w2, [x29, 108] ++.L1560: ++ ldr x0, [x29, 96] ++ cmp x19, x0 ++ bne .L1580 ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L1580: ++ ldr w1, [x29, 104] ++ add x2, x29, 124 ++ mov w4, w22 ++ add x3, x29, 120 ++ mov x0, x19 ++ bl LogAddr2PhyAddr ++ add x1, x25, :lo12:.LANCHOR0 ++ ldr w0, [x29, 120] ++ ldrb w2, [x1, 2358] ++ cmp w2, w0 ++ bhi .L1561 ++ mov w0, -1 ++ str w0, [x19] ++.L1562: ++ sub w22, w22, #1 ++ add x19, x19, 56 ++ and w22, w22, 255 ++ b .L1560 ++.L1561: ++ add x0, x1, w0, uxtw ++ adrp x21, .LANCHOR4 ++ add x27, x21, :lo12:.LANCHOR4 ++ mov w24, 0 ++ mov w28, 256 ++ ldrb w20, [x0, 2360] ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ mov w0, w20 ++ bl NandcFlashCs ++.L1563: ++ ldr w1, [x29, 124] ++ mov w0, w20 ++ bl FlashReadCmd ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ ldrb w2, [x29, 108] ++ mov w1, 0 ++ ldp x3, x4, [x19, 8] ++ mov w0, w20 ++ bl NandcXferData ++ mov w26, w0 ++ ldrb w0, [x27, 1688] ++ cbz w0, .L1564 ++ mov w0, w20 ++ bl flash_read_ecc ++ cmp w0, 5 ++ csel w26, w26, w28, ls ++.L1564: ++ cmp w24, 9 ++ ccmn w26, #1, 0, ls ++ bne .L1565 ++ add w24, w24, 1 ++ b .L1563 ++.L1565: ++ cmp w24, 0 ++ mov w27, 256 ++ add x21, x21, :lo12:.LANCHOR4 ++ csel w26, w26, w27, eq ++ mov w24, 0 ++.L1567: ++ ldr w0, [x23, 76] ++ ldr w1, [x29, 124] ++ add w1, w1, w0 ++ mov w0, w20 ++ bl FlashReadCmd ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ ldr x0, [x19, 8] ++ mov w1, 0 ++ ldrb w2, [x29, 108] ++ cmp x0, 0 ++ add x3, x0, 2048 ++ ldr x0, [x19, 16] ++ csel x3, x3, xzr, ne ++ cmp x0, 0 ++ add x4, x0, 8 ++ csel x4, x4, xzr, ne ++ mov w0, w20 ++ bl NandcXferData ++ mov w28, w0 ++ ldrb w0, [x21, 1688] ++ cbz w0, .L1570 ++ mov w0, w20 ++ bl flash_read_ecc ++ cmp w0, 5 ++ csel w28, w28, w27, ls ++.L1570: ++ cmp w24, 9 ++ ccmn w28, #1, 0, ls ++ bne .L1571 ++ add w24, w24, 1 ++ b .L1567 ++.L1571: ++ cmp w24, 0 ++ mov w2, 256 ++ mov w0, w20 ++ csel w28, w28, w2, eq ++ bl NandcFlashDeCs ++ ldrb w0, [x23, 2464] ++ cmp w26, w28 ++ csel w5, w26, w28, cs ++ add w0, w0, w0, lsl 1 ++ cmp w5, w0, lsr 2 ++ bls .L1573 ++ cmn w5, #1 ++ csel w5, w5, w2, eq ++.L1573: ++ cmp w5, 256 ++ ldr x0, [x19, 16] ++ ccmn w5, #1, 4, ne ++ csel w5, w5, wzr, eq ++ str w5, [x19] ++ cbz x0, .L1576 ++ ldr w1, [x0, 12] ++ cmn w1, #1 ++ bne .L1576 ++ ldr w1, [x0, 8] ++ cmn w1, #1 ++ bne .L1576 ++ ldr w0, [x0] ++ cmn w0, #1 ++ beq .L1576 ++ str w1, [x19] ++.L1576: ++ ldr w3, [x19] ++ cmn w3, #1 ++ bne .L1562 ++ ldr w1, [x19, 4] ++ adrp x0, .LC98 ++ ldrb w2, [x23, 2464] ++ add x0, x0, :lo12:.LC98 ++ bl printk ++ ldr x1, [x19, 8] ++ cbz x1, .L1578 ++ adrp x0, .LC99 ++ mov w3, 8 ++ mov w2, 4 ++ add x0, x0, :lo12:.LC99 ++ bl rknand_print_hex ++.L1578: ++ ldr x1, [x19, 16] ++ cbz x1, .L1562 ++ mov w3, 4 ++ adrp x0, .LC100 ++ mov w2, w3 ++ add x0, x0, :lo12:.LC100 ++ bl rknand_print_hex ++ b .L1562 ++ .size FlashReadSlc2KPages, .-FlashReadSlc2KPages ++ .align 2 ++ .global FlashReadPages ++ .type FlashReadPages, %function ++FlashReadPages: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ add x3, x22, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ stp w2, w1, [x29, 104] ++ ldrb w4, [x3, 72] ++ cbnz w4, .L1609 ++ mov x25, x0 ++ adrp x0, .LANCHOR1+481 ++ mov w24, 0 ++ mov w23, 0 ++ ldrb w0, [x0, #:lo12:.LANCHOR1+481] ++ str w0, [x29, 120] ++ ldrb w0, [x3, 80] ++ str w0, [x29, 100] ++ adrp x0, .LANCHOR4 ++ add x27, x0, :lo12:.LANCHOR4 ++.L1610: ++ ldr w0, [x29, 108] ++ cmp w23, w0 ++ bcc .L1644 ++ mov w0, 0 ++ b .L1608 ++.L1609: ++ bl FlashReadSlc2KPages ++.L1608: ++ 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 ++.L1644: ++ mov w26, 56 ++ ldr w1, [x29, 104] ++ add x2, x29, 140 ++ add x3, x29, 136 ++ umull x0, w23, w26 ++ add x26, x22, :lo12:.LANCHOR0 ++ str x0, [x29, 112] ++ add x21, x25, x0 ++ ldr w0, [x29, 108] ++ sub w4, w0, w23 ++ mov x0, x21 ++ ldr w28, [x21, 4] ++ bl LogAddr2PhyAddr ++ ldrb w2, [x26, 2358] ++ mov w20, w0 ++ ldr w0, [x29, 136] ++ cmp w2, w0 ++ bhi .L1612 ++ ldr x1, [x29, 112] ++ mov w0, -1 ++ str w0, [x25, x1] ++.L1613: ++ add w23, w23, 1 ++ b .L1610 ++.L1612: ++ add x0, x26, w0, uxtw ++ ldrb w19, [x0, 2360] ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldrb w0, [x0, 1689] ++ cmp w0, 0 ++ mov w0, w19 ++ csel w20, w20, wzr, ne ++ bl NandcWaitFlashReady ++ ldr x0, [x26, 88] ++ ldrb w0, [x0, 19] ++ sub w2, w0, #1 ++ and w2, w2, 255 ++ cmp w2, 7 ++ bhi .L1615 ++ add x1, x26, 1272 ++ sxtw x2, w19 ++ add x1, x1, x2 ++ sub w0, w0, #7 ++ and w0, w0, 255 ++ cmp w0, 1 ++ ldrb w3, [x1, 12] ++ bhi .L1616 ++ ldrb w3, [x1, 20] ++.L1616: ++ add x0, x22, :lo12:.LANCHOR0 ++ add x2, x0, x2 ++ ldrb w1, [x2, 2128] ++ cmp w1, w3 ++ beq .L1615 ++ ldrb w1, [x0, 1273] ++ add x2, x0, 1276 ++ mov w0, w19 ++ bl HynixSetRRPara ++.L1615: ++ mov w0, w19 ++ bl NandcFlashCs ++ ldr w0, [x29, 104] ++ cmp w0, 1 ++ cset w0, eq ++ orr w0, w0, w28, lsr 31 ++ str w0, [x29, 124] ++ cbz w0, .L1617 ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 204] ++ cbz w0, .L1617 ++ mov w0, w19 ++ bl flash_enter_slc_mode ++.L1618: ++ add x28, x22, :lo12:.LANCHOR0 ++.L1624: ++ ldr w1, [x29, 140] ++ cmn w1, #1 ++ bne .L1619 ++ cmp w19, 255 ++ beq .L1646 ++.L1619: ++ cbz w20, .L1621 ++ ldr w2, [x28, 76] ++ mov w0, w19 ++ add w2, w1, w2 ++ bl FlashReadDpCmd ++.L1622: ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ cbz w20, .L1620 ++ ldr w1, [x29, 140] ++ mov w0, w19 ++ bl FlashReadDpDataOutCmd ++.L1620: ++ ldrb w2, [x29, 120] ++ mov w1, 0 ++ ldp x3, x4, [x21, 8] ++ mov w0, w19 ++ bl NandcXferData ++ mov w26, w0 ++ ldrb w0, [x28, 80] ++ cbz w0, .L1623 ++ cmn w26, #1 ++ bne .L1623 ++ strb wzr, [x28, 80] ++ mov w20, 0 ++ b .L1624 ++.L1617: ++ mov w0, w19 ++ bl flash_exit_slc_mode ++ b .L1618 ++.L1621: ++ mov w0, w19 ++ bl FlashReadCmd ++ b .L1622 ++.L1646: ++ mov w20, 0 ++ b .L1620 ++.L1623: ++ cbz w20, .L1625 ++ add x0, x22, :lo12:.LANCHOR0 ++ ldr w1, [x29, 140] ++ ldr w0, [x0, 76] ++ add w1, w1, w0 ++ mov w0, w19 ++ bl FlashReadDpDataOutCmd ++ add w0, w23, 1 ++ mov w1, 56 ++ ldrb w2, [x29, 120] ++ nop // between mem op and mult-accumulate ++ umaddl x0, w0, w1, x25 ++ mov w1, 0 ++ ldp x3, x4, [x0, 8] ++ mov w0, w19 ++ bl NandcXferData ++ cmn w0, #1 ++ mov w24, w0 ++ csel w20, w20, wzr, ne ++.L1625: ++ add x28, x22, :lo12:.LANCHOR0 ++ mov w0, w19 ++ bl NandcFlashDeCs ++ ldrb w0, [x29, 100] ++ cmn w26, #1 ++ strb w0, [x28, 80] ++ bne .L1626 ++ ldrb w0, [x28, 2380] ++ cbnz w0, .L1627 ++.L1631: ++ ldr x4, [x27, 1624] ++ cbnz x4, .L1628 ++ ldr w1, [x29, 140] ++ mov w0, w19 ++ ldp x2, x3, [x21, 8] ++ bl FlashReadRawPage ++ b .L1683 ++.L1627: ++ ldr x0, [x28, 136] ++ mov w4, 1 ++ ldr w1, [x29, 140] ++ ldp x2, x3, [x21, 8] ++ ldr w20, [x0, 304] ++ mov w0, w19 ++ bl FlashDdrTunningRead ++ mov w26, w0 ++ cmn w0, #1 ++ beq .L1630 ++ ldrb w0, [x28, 2464] ++ cmp w26, w0, lsr 1 ++ bls .L1647 ++.L1630: ++ lsr w0, w20, 8 ++ bl NandcSetDdrPara ++ cmn w26, #1 ++ beq .L1631 ++.L1647: ++ mov w20, 0 ++.L1626: ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 2464] ++ add w0, w0, w0, lsl 1 ++ cmp w26, w0, lsr 2 ++ bls .L1632 ++ ldr x0, [x27, 1624] ++ cmp x0, 0 ++ mov w0, 256 ++ csel w26, w26, w0, ne ++.L1632: ++ ldr x0, [x29, 112] ++ cmp w26, 256 ++ ccmn w26, #1, 4, ne ++ csel w3, w26, wzr, eq ++ cmn w3, #1 ++ str w3, [x25, x0] ++ bne .L1639 ++ add x0, x22, :lo12:.LANCHOR0 ++ ldr w1, [x21, 4] ++ ldrb w2, [x0, 2464] ++ adrp x0, .LC98 ++ add x0, x0, :lo12:.LC98 ++ bl printk ++ ldr x1, [x21, 16] ++ cbz x1, .L1639 ++ mov w3, 4 ++ adrp x0, .LC100 ++ mov w2, w3 ++ add x0, x0, :lo12:.LC100 ++ bl rknand_print_hex ++.L1639: ++ cbz w20, .L1641 ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 2464] ++ add w0, w0, w0, lsl 1 ++ cmp w24, w0, lsr 2 ++ bls .L1642 ++ ldr x0, [x27, 1624] ++ cmp x0, 0 ++ mov w0, 256 ++ csel w24, w24, w0, ne ++.L1642: ++ add w0, w23, 1 ++ mov w1, 56 ++ cmp w24, 256 ++ ccmn w24, #1, 4, ne ++ umull x0, w0, w1 ++ csel w1, w24, wzr, eq ++ str w1, [x25, x0] ++.L1641: ++ ldr w0, [x29, 124] ++ add w23, w23, w20 ++ cbz w0, .L1613 ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 204] ++ cbz w0, .L1613 ++ mov w0, w19 ++ bl flash_exit_slc_mode ++ b .L1613 ++.L1628: ++ ldr w1, [x29, 140] ++ mov w0, w19 ++ ldp x2, x3, [x21, 8] ++ mov w20, 0 ++ blr x4 ++ mov w26, w0 ++ cmn w0, #1 ++ bne .L1632 ++ add x1, x22, :lo12:.LANCHOR0 ++ ldr x0, [x1, 88] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 7 ++ bhi .L1633 ++ add x2, x1, 1276 ++ ldrb w1, [x1, 1273] ++ mov w3, 0 ++ mov w0, w19 ++ bl HynixSetRRPara ++.L1633: ++ ldp x2, x3, [x21, 8] ++ add x20, x22, :lo12:.LANCHOR0 ++ ldr w1, [x29, 140] ++ mov w0, w19 ++ bl FlashReadRawPage ++ mov w26, w0 ++ ldrb w2, [x20, 2464] ++ mov w3, w0 ++ ldr w1, [x21, 4] ++ adrp x0, .LC101 ++ add x0, x0, :lo12:.LC101 ++ bl printk ++ cmn w26, #1 ++ bne .L1650 ++ ldrb w0, [x20, 204] ++ cbz w0, .L1650 ++ ldr w0, [x29, 124] ++ cbz w0, .L1634 ++ mov w0, w19 ++ bl flash_enter_slc_mode ++.L1635: ++ ldr w1, [x29, 140] ++ mov w0, w19 ++ ldp x2, x3, [x21, 8] ++ ldr x4, [x27, 1624] ++ blr x4 ++.L1683: ++ mov w26, w0 ++.L1650: ++ mov w20, 0 ++ b .L1632 ++.L1634: ++ mov w0, w19 ++ bl flash_exit_slc_mode ++ b .L1635 ++ .size FlashReadPages, .-FlashReadPages ++ .align 2 ++ .global FlashLoadFactorBbt ++ .type FlashLoadFactorBbt, %function ++FlashLoadFactorBbt: ++ stp x29, x30, [sp, -176]! ++ mov w2, 16 ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ add x0, x22, :lo12:.LANCHOR0 ++ stp x25, x26, [sp, 64] ++ stp x19, x20, [sp, 16] ++ add x0, x0, 176 ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR4 ++ stp x27, x28, [sp, 80] ++ add x19, x23, :lo12:.LANCHOR4 ++ mov w26, -1 ++ mov w27, 0 ++ ldrh w21, [x0, 14] ++ ldrh w0, [x0, 12] ++ mul w21, w21, w0 ++ add x0, x19, 1696 ++ bl ftl_memset ++ and w21, w21, 65535 ++ ldr x0, [x19, 1664] ++ add w25, w21, w26 ++ stp xzr, x0, [x29, 128] ++ and w25, w25, 65535 ++ sub w0, w21, #12 ++ mov w19, 0 ++ str w0, [x29, 108] ++.L1685: ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 2358] ++ cmp w0, w19 ++ bhi .L1691 ++ 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], 176 ++ ret ++.L1691: ++ mul w28, w21, w19 ++ mov w20, w25 ++ add x24, x23, :lo12:.LANCHOR4 ++ mov w3, 61664 ++.L1686: ++ ldr w0, [x29, 108] ++ cmp w20, w0 ++ ble .L1688 ++ add w0, w20, w28 ++ mov w2, 1 ++ lsl w0, w0, 10 ++ str w3, [x29, 104] ++ str w0, [x29, 124] ++ mov w1, w2 ++ add x0, x29, 120 ++ bl FlashReadPages ++ ldr w0, [x29, 120] ++ ldr w3, [x29, 104] ++ cmn w0, #1 ++ beq .L1687 ++ ldr x0, [x24, 1664] ++ ldrh w0, [x0] ++ cmp w0, w3 ++ bne .L1687 ++ add x24, x24, 1696 ++ add w27, w27, 1 ++ and w27, w27, 65535 ++ mov w2, w20 ++ mov w1, w19 ++ adrp x0, .LC102 ++ add x0, x0, :lo12:.LC102 ++ bl printk ++ strh w20, [x24, w19, sxtw 1] ++.L1688: ++ add x0, x22, :lo12:.LANCHOR0 ++ add w19, w19, 1 ++ and w19, w19, 255 ++ ldrb w0, [x0, 2358] ++ cmp w0, w27 ++ csel w26, w26, wzr, ne ++ b .L1685 ++.L1687: ++ sub w20, w20, #1 ++ and w20, w20, 65535 ++ b .L1686 ++ .size FlashLoadFactorBbt, .-FlashLoadFactorBbt ++ .align 2 ++ .global FlashProgSlc2KPages ++ .type FlashProgSlc2KPages, %function ++FlashProgSlc2KPages: ++ stp x29, x30, [sp, -176]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w24, 56 ++ stp x25, x26, [sp, 64] ++ mov w25, w2 ++ adrp x2, .LANCHOR1+481 ++ stp x21, x22, [sp, 32] ++ nop // between mem op and mult-accumulate ++ umaddl x24, w1, w24, x0 ++ and w22, w1, 255 ++ ldrb w26, [x2, #:lo12:.LANCHOR1+481] ++ mov w23, w22 ++ stp x27, x28, [sp, 80] ++ mov x21, x0 ++ stp x19, x20, [sp, 16] ++ adrp x27, .LANCHOR0 ++ mov x19, x0 ++ add x28, x27, :lo12:.LANCHOR0 ++.L1697: ++ cmp x21, x24 ++ bne .L1703 ++ adrp x23, .LANCHOR4 ++ add x24, x23, :lo12:.LANCHOR4 ++.L1704: ++ cmp x19, x21 ++ bne .L1711 ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L1703: ++ mov w1, w25 ++ mov w4, w23 ++ add x3, x29, 116 ++ add x2, x29, 112 ++ mov x0, x21 ++ bl LogAddr2PhyAddr ++ add x5, x27, :lo12:.LANCHOR0 ++ ldr w0, [x29, 116] ++ ldrb w1, [x5, 2358] ++ cmp w1, w0 ++ bhi .L1698 ++ mov w0, -1 ++ str w0, [x21] ++.L1699: ++ sub w23, w23, #1 ++ add x21, x21, 56 ++ and w23, w23, 255 ++ b .L1697 ++.L1698: ++ add x0, x5, w0, uxtw ++ str x5, [x29, 104] ++ ldrb w20, [x0, 2360] ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ mov w0, w20 ++ bl NandcFlashCs ++ ldr w1, [x29, 112] ++ mov w0, w20 ++ bl FlashProgFirstCmd ++ ldp x3, x4, [x21, 8] ++ mov w2, w26 ++ mov w1, 1 ++ mov w0, w20 ++ bl NandcXferData ++ ldr w1, [x29, 112] ++ mov w0, w20 ++ bl FlashProgSecondCmd ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ ldr w1, [x29, 112] ++ mov w0, w20 ++ bl FlashReadStatus ++ sbfx x0, x0, 0, 1 ++ ldr x5, [x29, 104] ++ str w0, [x21] ++ ldr w1, [x29, 112] ++ ldr w0, [x5, 76] ++ add w1, w1, w0 ++ mov w0, w20 ++ bl FlashProgFirstCmd ++ ldr x0, [x21, 8] ++ mov w2, w26 ++ mov w1, 1 ++ cmp x0, 0 ++ add x3, x0, 2048 ++ ldr x0, [x21, 16] ++ csel x3, x3, xzr, ne ++ cmp x0, 0 ++ add x4, x0, 8 ++ csel x4, x4, xzr, ne ++ mov w0, w20 ++ bl NandcXferData ++ ldr w0, [x28, 76] ++ ldr w1, [x29, 112] ++ add w1, w1, w0 ++ mov w0, w20 ++ bl FlashProgSecondCmd ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ ldr w1, [x29, 112] ++ mov w0, w20 ++ bl FlashReadStatus ++ tbz x0, 0, .L1702 ++ mov w0, -1 ++ str w0, [x21] ++.L1702: ++ mov w0, w20 ++ bl NandcFlashDeCs ++ b .L1699 ++.L1711: ++ ldr w0, [x19] ++ cmn w0, #1 ++ bne .L1705 ++ ldr w1, [x19, 4] ++ adrp x0, .LC103 ++ add x0, x0, :lo12:.LC103 ++ bl printk ++.L1706: ++ sub w22, w22, #1 ++ add x19, x19, 56 ++ and w22, w22, 255 ++ b .L1704 ++.L1705: ++ add x20, x23, :lo12:.LANCHOR4 ++ mov w4, w22 ++ add x3, x29, 116 ++ add x2, x29, 112 ++ mov w1, w25 ++ mov x0, x19 ++ bl LogAddr2PhyAddr ++ ldr x0, [x20, 1672] ++ mov x2, 56 ++ mov x1, x19 ++ str wzr, [x0] ++ ldr x0, [x20, 1680] ++ str wzr, [x0] ++ add x0, x29, 120 ++ bl memcpy ++ ldr x0, [x20, 1672] ++ mov w2, w25 ++ str x0, [x29, 128] ++ mov w1, 1 ++ ldr x0, [x20, 1680] ++ str x0, [x29, 136] ++ add x0, x29, 120 ++ bl FlashReadPages ++ ldr w20, [x29, 120] ++ cmn w20, #1 ++ bne .L1707 ++ ldr w1, [x19, 4] ++ adrp x0, .LC104 ++ add x0, x0, :lo12:.LC104 ++ bl printk ++ str w20, [x19] ++.L1707: ++ ldr w20, [x29, 120] ++ cmp w20, 256 ++ bne .L1708 ++ ldr w1, [x19, 4] ++ adrp x0, .LC105 ++ add x0, x0, :lo12:.LC105 ++ bl printk ++ str w20, [x19] ++.L1708: ++ ldr x0, [x19, 16] ++ cbz x0, .L1709 ++ ldr w2, [x0] ++ ldr x0, [x24, 1680] ++ ldr w3, [x0] ++ cmp w2, w3 ++ beq .L1709 ++ ldr w1, [x19, 4] ++ adrp x0, .LC106 ++ add x0, x0, :lo12:.LC106 ++ bl printk ++ mov w0, -1 ++ str w0, [x19] ++.L1709: ++ ldr x0, [x19, 8] ++ cbz x0, .L1706 ++ ldr w2, [x0] ++ ldr x0, [x24, 1672] ++ ldr w3, [x0] ++ cmp w2, w3 ++ beq .L1706 ++ ldr w1, [x19, 4] ++ adrp x0, .LC107 ++ add x0, x0, :lo12:.LC107 ++ bl printk ++ mov w0, -1 ++ str w0, [x19] ++ b .L1706 ++ .size FlashProgSlc2KPages, .-FlashProgSlc2KPages ++ .align 2 ++ .global FtlLoadFactoryBbt ++ .type FtlLoadFactoryBbt, %function ++FtlLoadFactoryBbt: ++ stp x29, x30, [sp, -96]! ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w23, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR4 ++ stp x21, x22, [sp, 32] ++ add x20, x20, :lo12:.LANCHOR4 ++ stp x25, x26, [sp, 64] ++ add x20, x20, 1712 ++ str x27, [sp, 80] ++ mov x26, x20 ++ mov w27, 61664 ++ ldr x1, [x0, 3608] ++ ldr x25, [x0, 3656] ++ adrp x0, .LANCHOR0 ++ add x21, x0, :lo12:.LANCHOR0 ++ mov x24, x0 ++ add x21, x21, 2636 ++ stp x1, x25, [x20, 8] ++.L1725: ++ add x0, x24, :lo12:.LANCHOR0 ++ ldrh w1, [x0, 2494] ++ cmp w23, w1 ++ bcc .L1730 ++ 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 ++.L1730: ++ ldrh w19, [x0, 2542] ++ mov x22, x0 ++ mov w1, -1 ++ strh w1, [x21] ++ sub w19, w19, #1 ++ and w19, w19, 65535 ++.L1726: ++ ldrh w0, [x22, 2542] ++ sub w1, w0, #16 ++ cmp w19, w1 ++ ble .L1728 ++ madd w0, w0, w23, w19 ++ mov w2, 1 ++ mov w1, w2 ++ lsl w0, w0, 10 ++ str w0, [x26, 4] ++ mov x0, x20 ++ bl FlashReadPages ++ ldr w0, [x26] ++ cmn w0, #1 ++ beq .L1727 ++ ldrh w0, [x25] ++ cmp w0, w27 ++ bne .L1727 ++ strh w19, [x21] ++.L1728: ++ add w23, w23, 1 ++ add x21, x21, 2 ++ b .L1725 ++.L1727: ++ sub w19, w19, #1 ++ and w19, w19, 65535 ++ b .L1726 ++ .size FtlLoadFactoryBbt, .-FtlLoadFactoryBbt ++ .align 2 ++ .global FtlGetLastWrittenPage ++ .type FtlGetLastWrittenPage, %function ++FtlGetLastWrittenPage: ++ stp x29, x30, [sp, -192]! ++ cmp w1, 1 ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w23, w1 ++ stp x19, x20, [sp, 16] ++ adrp x1, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ add x1, x1, :lo12:.LANCHOR0 ++ bne .L1736 ++ ldrh w19, [x1, 2546] ++.L1737: ++ sub w19, w19, #1 ++ lsl w21, w0, 10 ++ sxth w19, w19 ++ add x1, x29, 128 ++ orr w0, w19, w21 ++ stp xzr, x1, [x29, 80] ++ str w0, [x29, 76] ++ mov w2, w23 ++ mov w1, 1 ++ add x0, x29, 72 ++ bl FlashReadPages ++ ldr w0, [x29, 128] ++ cmn w0, #1 ++ bne .L1738 ++ mov w22, 0 ++ mov w24, 2 ++.L1739: ++ cmp w22, w19 ++ ble .L1742 ++.L1738: ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 192 ++ ret ++.L1736: ++ ldrh w19, [x1, 2544] ++ b .L1737 ++.L1742: ++ add w20, w22, w19 ++ mov w2, w23 ++ mov w1, 1 ++ sdiv w20, w20, w24 ++ sxth w0, w20 ++ orr w0, w0, w21 ++ str w0, [x29, 76] ++ add x0, x29, 72 ++ bl FlashReadPages ++ ldr w0, [x29, 128] ++ cmn w0, #1 ++ bne .L1740 ++ ldr w0, [x29, 132] ++ cmn w0, #1 ++ bne .L1740 ++ ldr w0, [x29, 72] ++ cmn w0, #1 ++ beq .L1740 ++ sub w19, w20, #1 ++ sxth w19, w19 ++ b .L1739 ++.L1740: ++ add w20, w20, 1 ++ sxth w22, w20 ++ b .L1739 ++ .size FtlGetLastWrittenPage, .-FtlGetLastWrittenPage ++ .align 2 ++ .global FtlLoadBbt ++ .type FtlLoadBbt, %function ++FtlLoadBbt: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ adrp x24, .LANCHOR2 ++ add x0, x24, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ stp x25, x26, [sp, 64] ++ adrp x23, .LANCHOR4 ++ stp x21, x22, [sp, 32] ++ add x20, x23, :lo12:.LANCHOR4 ++ add x20, x20, 1712 ++ adrp x19, .LANCHOR0 ++ ldr x1, [x0, 3608] ++ add x25, x19, :lo12:.LANCHOR0 ++ ldr x22, [x0, 3656] ++ mov w26, 61649 ++ stp x1, x22, [x20, 8] ++ bl FtlBbtMemInit ++ ldrh w21, [x25, 2542] ++ sub w21, w21, #1 ++ and w21, w21, 65535 ++.L1748: ++ ldrh w0, [x25, 2542] ++ sub w0, w0, #48 ++ cmp w21, w0 ++ ble .L1751 ++ lsl w0, w21, 10 ++ mov w2, 1 ++ str w0, [x20, 4] ++ mov w1, w2 ++ mov x0, x20 ++ bl FlashReadPages ++ ldr w0, [x20] ++ cmn w0, #1 ++ bne .L1749 ++ ldr w0, [x20, 4] ++ mov w2, 1 ++ mov w1, w2 ++ add w0, w0, 1 ++ str w0, [x20, 4] ++ mov x0, x20 ++ bl FlashReadPages ++.L1749: ++ ldr w0, [x20] ++ cmn w0, #1 ++ beq .L1750 ++ ldrh w0, [x22] ++ cmp w0, w26 ++ bne .L1750 ++ add x1, x19, :lo12:.LANCHOR0 ++ add x0, x1, 2624 ++ strh w21, [x1, 2624] ++ ldr w1, [x22, 4] ++ str w1, [x0, 8] ++ ldrh w1, [x22, 8] ++ strh w1, [x0, 4] ++.L1751: ++ add x21, x19, :lo12:.LANCHOR0 ++ mov w0, 65535 ++ ldrh w1, [x21, 2624] ++ cmp w1, w0 ++ beq .L1765 ++ ldrh w1, [x21, 2628] ++ cmp w1, w0 ++ beq .L1755 ++ add x25, x23, :lo12:.LANCHOR4 ++ lsl w1, w1, 10 ++ add x0, x25, 1712 ++ mov w2, 1 ++ str w1, [x0, 4] ++ mov w1, w2 ++ bl FlashReadPages ++ ldr w0, [x25, 1712] ++ cmn w0, #1 ++ beq .L1755 ++ ldrh w1, [x22] ++ mov w0, 61649 ++ cmp w1, w0 ++ bne .L1755 ++ ldr w1, [x21, 2632] ++ ldr w0, [x22, 4] ++ cmp w0, w1 ++ bls .L1755 ++ str w0, [x21, 2632] ++ ldrh w1, [x21, 2628] ++ ldrh w0, [x22, 8] ++ strh w1, [x21, 2624] ++ strh w0, [x21, 2628] ++.L1755: ++ add x25, x19, :lo12:.LANCHOR0 ++ add x21, x23, :lo12:.LANCHOR4 ++ add x21, x21, 1712 ++ add x26, x24, :lo12:.LANCHOR2 ++ mov w1, 1 ++ ldrh w0, [x25, 2624] ++ bl FtlGetLastWrittenPage ++ sxth w20, w0 ++ add w0, w0, 1 ++ strh w0, [x25, 2626] ++.L1757: ++ tbnz w20, #31, .L1762 ++ ldrh w0, [x25, 2624] ++ mov w2, 1 ++ mov w1, w2 ++ orr w0, w20, w0, lsl 10 ++ str w0, [x21, 4] ++ ldr x0, [x26, 3608] ++ str x0, [x21, 8] ++ mov x0, x21 ++ bl FlashReadPages ++ ldr w0, [x21] ++ cmn w0, #1 ++ beq .L1758 ++ ldrh w1, [x22] ++ mov w0, 61649 ++ cmp w1, w0 ++ bne .L1758 ++.L1762: ++ add x1, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x22, 10] ++ mov w2, 65535 ++ strh w0, [x1, 2630] ++ ldrh w0, [x22, 12] ++ cmp w0, w2 ++ bne .L1759 ++.L1760: ++ add x19, x19, :lo12:.LANCHOR0 ++ add x24, x24, :lo12:.LANCHOR2 ++ add x21, x19, 2656 ++ add x23, x23, :lo12:.LANCHOR4 ++ mov w20, 0 ++.L1763: ++ ldrh w0, [x19, 2494] ++ cmp w20, w0 ++ bcc .L1764 ++ mov w0, 0 ++.L1747: ++ 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 ++.L1750: ++ sub w21, w21, #1 ++ and w21, w21, 65535 ++ b .L1748 ++.L1758: ++ sub w20, w20, #1 ++ sxth w20, w20 ++ b .L1757 ++.L1759: ++ ldr w2, [x1, 2468] ++ cmp w0, w2 ++ beq .L1760 ++ ldrh w1, [x1, 2482] ++ lsr w1, w1, 2 ++ cmp w2, w1 ++ bcs .L1760 ++ cmp w0, w1 ++ bcs .L1760 ++ bl FtlSysBlkNumInit ++ b .L1760 ++.L1764: ++ ldrh w2, [x24, 3784] ++ ldr x0, [x23, 1720] ++ mul w1, w2, w20 ++ lsl w2, w2, 2 ++ add w20, w20, 1 ++ add x1, x0, x1, lsl 2 ++ ldr x0, [x21], 8 ++ bl ftl_memcpy ++ b .L1763 ++.L1765: ++ mov w0, -1 ++ b .L1747 ++ .size FtlLoadBbt, .-FtlLoadBbt ++ .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] ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR2 ++ add x19, x22, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR0 ++ add x20, x23, :lo12:.LANCHOR0 ++ stp x25, x26, [sp, 64] ++ mov w25, 56 ++ ldr x0, [x19, 3768] ++ ldr w2, [x20, 2572] ++ stp x27, x28, [sp, 80] ++ strh wzr, [x19, 3856] ++ lsl w2, w2, 2 ++ strh wzr, [x20, 2590] ++ bl ftl_memset ++ ldr x0, [x19, 3712] ++ mov w1, 0 ++ ldr w2, [x20, 2572] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldr x0, [x19, 3736] ++ mov w1, 0 ++ ldrh w2, [x20, 2564] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldr x0, [x20, 2592] ++ mov w1, 0 ++ ldrh w2, [x20, 2564] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ mov w2, 16 ++ mov w1, 255 ++ add x0, x19, 784 ++ bl ftl_memset ++ ldrh w24, [x20, 2480] ++ add x0, x20, 2504 ++ str x0, [x29, 112] ++.L1777: ++ ldrh w0, [x20, 2482] ++ cmp w0, w24 ++ bls .L1816 ++ ldrh w9, [x20, 2472] ++ mov x6, 0 ++ ldrh w8, [x20, 2556] ++ mov w21, 0 ++ add x5, x22, :lo12:.LANCHOR2 ++ mov w7, 4 ++ b .L1817 ++.L1779: ++ ldr x0, [x29, 112] ++ mov w1, w24 ++ ldrb w0, [x0, x6] ++ bl V2P_block ++ and w4, w0, 65535 ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L1778 ++ umull x2, w21, w25 ++ ldr x0, [x5, 3584] ++ lsl w4, w4, 10 ++ add x0, x0, x2 ++ str w4, [x0, 4] ++ ldr x1, [x5, 3584] ++ ldr x0, [x5, 1392] ++ add x1, x1, x2 ++ ldr x2, [x5, 1400] ++ str x0, [x1, 8] ++ mul w0, w21, w8 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ sdiv w0, w0, w7 ++ add x0, x2, w0, sxtw 2 ++ str x0, [x1, 16] ++.L1778: ++ add x6, x6, 1 ++.L1817: ++ cmp w9, w6, uxth ++ bhi .L1779 ++ cbnz w21, .L1780 ++.L1815: ++ add w24, w24, 1 ++ and w24, w24, 65535 ++ b .L1777 ++.L1780: ++ add x19, x22, :lo12:.LANCHOR2 ++ mov w2, 1 ++ mov w1, w21 ++ add x27, x19, 784 ++ mov x26, 0 ++ ldr x0, [x19, 3584] ++ bl FlashReadPages ++ umull x0, w21, w25 ++ str x0, [x29, 120] ++.L1814: ++ ldr x0, [x19, 3584] ++ add x1, x0, x26 ++ ldr w0, [x0, x26] ++ ldr w28, [x1, 4] ++ cmn w0, #1 ++ ldr x21, [x1, 16] ++ ubfx x28, x28, 10, 16 ++ bne .L1783 ++ mov w6, 16 ++ mov w7, 65535 ++.L1785: ++ ldr x0, [x19, 3584] ++ mov w2, 1 ++ stp w7, w6, [x29, 104] ++ add x0, x0, x26 ++ ldr w1, [x0, 4] ++ add w1, w1, 1 ++ str w1, [x0, 4] ++ mov w1, w2 ++ ldr x0, [x19, 3584] ++ add x0, x0, x26 ++ bl FlashReadPages ++ ldp w7, w6, [x29, 104] ++ ldrh w0, [x21] ++ cmp w0, w7 ++ ldr x0, [x19, 3584] ++ bne .L1782 ++ mov w1, -1 ++ str w1, [x0, x26] ++ ldr x0, [x19, 3584] ++ ldr w0, [x0, x26] ++ cmp w0, w1 ++ beq .L1851 ++.L1783: ++ ldr w0, [x19, 752] ++ ldr w10, [x21, 4] ++ cmn w0, #1 ++ beq .L1786 ++ cmp w0, w10 ++ bhi .L1787 ++.L1786: ++ cmn w10, #1 ++ beq .L1787 ++ add w0, w10, 1 ++ str w0, [x19, 752] ++.L1787: ++ ldrh w0, [x21] ++ mov w1, 61604 ++ cmp w0, w1 ++ beq .L1789 ++ bhi .L1790 ++ mov w1, 61574 ++ cmp w0, w1 ++ beq .L1791 ++.L1788: ++ ldr x0, [x29, 120] ++ add x26, x26, 56 ++ cmp x26, x0 ++ bne .L1814 ++ b .L1815 ++.L1782: ++ ldr w0, [x0, x26] ++ cmn w0, #1 ++ bne .L1783 ++ sub w6, w6, #1 ++ ands w6, w6, 65535 ++ bne .L1785 ++.L1851: ++ mov w1, 0 ++ mov w0, w28 ++ bl FtlFreeSysBlkQueueIn ++ b .L1788 ++.L1790: ++ mov w1, 61634 ++ cmp w0, w1 ++ beq .L1792 ++ mov w1, 65535 ++ cmp w0, w1 ++ beq .L1851 ++ b .L1788 ++.L1792: ++ ldr w6, [x20, 2572] ++ ldrh w1, [x19, 3856] ++ and w2, w6, 65535 ++ ldr x7, [x19, 3768] ++ sub w0, w2, #1 ++ sub w2, w2, w1 ++ sub w2, w2, #1 ++ sxth x0, w0 ++ sxth w2, w2 ++.L1794: ++ cmp w0, w2 ++ bgt .L1800 ++ tbz w0, #31, .L1832 ++ b .L1788 ++.L1800: ++ sxtw x8, w0 ++ lsl x9, x8, 2 ++ ldr w11, [x7, x9] ++ cmp w10, w11 ++ bls .L1795 ++ ldr w2, [x7] ++ cbnz w2, .L1796 ++ cmp w6, w1 ++ beq .L1796 ++ add w1, w1, 1 ++ strh w1, [x19, 3856] ++.L1796: ++ mov w1, 0 ++.L1797: ++ cmp w1, w0 ++ bne .L1798 ++ ldr x1, [x19, 3768] ++ ldr w2, [x21, 4] ++ str w2, [x1, x9] ++ ldr x1, [x19, 3712] ++ strh w28, [x1, x8, lsl 1] ++ tbnz w0, #31, .L1788 ++ ldrh w1, [x19, 3856] ++ ldr w2, [x20, 2572] ++ sub w2, w2, w1 ++ sub w2, w2, #1 ++ cmp w0, w2, sxth ++ bgt .L1788 ++.L1832: ++ add w1, w1, 1 ++ strh w1, [x19, 3856] ++ ldr x1, [x19, 3768] ++ ldr w2, [x21, 4] ++ str w2, [x1, x0, lsl 2] ++ ldr x1, [x19, 3712] ++.L1850: ++ strh w28, [x1, x0, lsl 1] ++ b .L1788 ++.L1798: ++ ldr x7, [x19, 3768] ++ sxtw x2, w1 ++ lsl x6, x2, 2 ++ lsl x2, x2, 1 ++ add x10, x7, x6 ++ add w1, w1, 1 ++ sxth w1, w1 ++ ldr w10, [x10, 4] ++ str w10, [x7, x6] ++ ldr x6, [x19, 3712] ++ add x7, x6, x2 ++ ldrh w7, [x7, 2] ++ strh w7, [x6, x2] ++ b .L1797 ++.L1795: ++ sub w0, w0, #1 ++ sxth x0, w0 ++ b .L1794 ++.L1791: ++ ldrh w6, [x20, 2564] ++ ldrh w1, [x20, 2590] ++ sub w2, w6, #1 ++ ldr x7, [x19, 3736] ++ sxth x0, w2 ++ sub w2, w2, w1 ++.L1803: ++ cmp w0, w2 ++ ble .L1808 ++ sxtw x8, w0 ++ lsl x9, x8, 2 ++ ldr w11, [x7, x9] ++ cmp w10, w11 ++ bls .L1804 ++ ldr w2, [x7] ++ cbnz w2, .L1805 ++ cmp w6, w1 ++ beq .L1805 ++ add w1, w1, 1 ++ strh w1, [x20, 2590] ++.L1805: ++ mov w1, 0 ++.L1806: ++ cmp w1, w0 ++ bne .L1807 ++ ldr x1, [x19, 3736] ++ ldr w2, [x21, 4] ++ str w2, [x1, x9] ++ ldr x1, [x20, 2592] ++ strh w28, [x1, x8, lsl 1] ++.L1808: ++ tbnz w0, #31, .L1788 ++ ldrh w1, [x20, 2564] ++ ldrh w2, [x20, 2590] ++ sub w1, w1, #1 ++ sub w1, w1, w2 ++ cmp w0, w1, sxth ++ bgt .L1788 ++ ldr x1, [x19, 3736] ++ add w2, w2, 1 ++ strh w2, [x20, 2590] ++ ldr w2, [x21, 4] ++ str w2, [x1, x0, lsl 2] ++ ldr x1, [x20, 2592] ++ b .L1850 ++.L1807: ++ ldr x7, [x19, 3736] ++ sxtw x2, w1 ++ lsl x6, x2, 2 ++ lsl x2, x2, 1 ++ add x10, x7, x6 ++ add w1, w1, 1 ++ sxth w1, w1 ++ ldr w10, [x10, 4] ++ str w10, [x7, x6] ++ ldr x6, [x20, 2592] ++ add x7, x6, x2 ++ ldrh w7, [x7, 2] ++ strh w7, [x6, x2] ++ b .L1806 ++.L1804: ++ sub w0, w0, #1 ++ sxth x0, w0 ++ b .L1803 ++.L1789: ++ ldrh w0, [x27] ++ mov w1, 65535 ++ cmp w0, w1 ++ bne .L1810 ++ strh w28, [x27] ++ str w10, [x27, 8] ++ b .L1788 ++.L1810: ++ ldrh w0, [x27, 4] ++ cmp w0, w1 ++ beq .L1811 ++ mov w1, 1 ++ bl FtlFreeSysBlkQueueIn ++.L1811: ++ ldr w0, [x21, 4] ++ ldr w1, [x27, 8] ++ cmp w1, w0 ++ bcs .L1812 ++ ldrh w0, [x27] ++ strh w0, [x27, 4] ++ strh w28, [x27] ++ ldr w0, [x21, 4] ++ str w0, [x27, 8] ++ b .L1788 ++.L1812: ++ strh w28, [x27, 4] ++ b .L1788 ++.L1816: ++ add x0, x22, :lo12:.LANCHOR2 ++ ldr x1, [x0, 3712] ++ ldrh w2, [x1] ++ cbz w2, .L1818 ++.L1821: ++ add x0, x23, :lo12:.LANCHOR0 ++ ldr x1, [x0, 2592] ++ ldrh w2, [x1] ++ cbz w2, .L1819 ++.L1837: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L1818: ++ ldrh w0, [x0, 3856] ++ cbz w0, .L1821 ++ ldr w2, [x20, 2572] ++ mov w0, 0 ++.L1822: ++ cmp w0, w2 ++ bcs .L1821 ++ ldrh w3, [x1, w0, sxtw 1] ++ cbz w3, .L1823 ++ mov w1, w0 ++ add x7, x23, :lo12:.LANCHOR0 ++ add x3, x22, :lo12:.LANCHOR2 ++.L1824: ++ ldr w2, [x7, 2572] ++ cmp w1, w2 ++ bcs .L1821 ++ ldr x5, [x3, 3712] ++ sxtw x6, w1 ++ lsl x4, x6, 1 ++ sub w2, w1, w0 ++ sxtw x2, w2 ++ add w1, w1, 1 ++ sxth w1, w1 ++ ldrh w8, [x5, x4] ++ strh w8, [x5, x2, lsl 1] ++ ldr x5, [x3, 3768] ++ ldr w6, [x5, x6, lsl 2] ++ str w6, [x5, x2, lsl 2] ++ ldr x2, [x3, 3712] ++ strh wzr, [x2, x4] ++ b .L1824 ++.L1823: ++ add w0, w0, 1 ++ sxth w0, w0 ++ b .L1822 ++.L1819: ++ ldrh w2, [x0, 2590] ++ cbz w2, .L1837 ++ ldrh w2, [x0, 2564] ++ mov w0, 0 ++.L1827: ++ mov w5, w0 ++ cmp w0, w2 ++ bge .L1837 ++ ldrh w3, [x1, w0, sxtw 1] ++ cbz w3, .L1828 ++ add x23, x23, :lo12:.LANCHOR0 ++ add x22, x22, :lo12:.LANCHOR2 ++.L1829: ++ ldrh w1, [x23, 2564] ++ cmp w0, w1 ++ bge .L1837 ++ ldr x3, [x23, 2592] ++ sxtw x4, w0 ++ lsl x2, x4, 1 ++ sub w1, w0, w5 ++ sxtw x1, w1 ++ add w0, w0, 1 ++ sxth w0, w0 ++ ldrh w6, [x3, x2] ++ strh w6, [x3, x1, lsl 1] ++ ldr x3, [x22, 3736] ++ ldr w4, [x3, x4, lsl 2] ++ str w4, [x3, x1, lsl 2] ++ ldr x1, [x23, 2592] ++ strh wzr, [x1, x2] ++ b .L1829 ++.L1828: ++ add w0, w0, 1 ++ sxth w0, w0 ++ b .L1827 ++ .size FtlScanSysBlk, .-FtlScanSysBlk ++ .align 2 ++ .global FtlLoadSysInfo ++ .type FtlLoadSysInfo, %function ++FtlLoadSysInfo: ++ sub sp, sp, #112 ++ mov w1, 0 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x20, .LANCHOR0 ++ stp x23, x24, [sp, 64] ++ adrp x23, .LANCHOR4 ++ stp x21, x22, [sp, 48] ++ add x19, x23, :lo12:.LANCHOR4 ++ adrp x21, .LANCHOR2 ++ add x24, x21, :lo12:.LANCHOR2 ++ add x19, x19, 1712 ++ stp x25, x26, [sp, 80] ++ stp x27, x28, [sp, 96] ++ ldr x0, [x24, 3608] ++ str x0, [x19, 8] ++ ldr x0, [x24, 3656] ++ str x0, [x19, 16] ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrh w2, [x0, 2480] ++ ldr x0, [x24, 520] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldrh w0, [x24, 784] ++ mov w1, 65535 ++ cmp w0, w1 ++ bne .L1853 ++.L1864: ++ mov w0, -1 ++.L1852: ++ 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, 112 ++ ret ++.L1853: ++ add x25, x24, 784 ++ mov w1, 1 ++ bl FtlGetLastWrittenPage ++ ldrsh w28, [x24, 784] ++ mov w26, 19539 ++ sxth w22, w0 ++ movk w26, 0x4654, lsl 16 ++ add w0, w0, 1 ++ strh w0, [x25, 2] ++.L1855: ++ tbnz w22, #31, .L1863 ++ orr w0, w22, w28, lsl 10 ++ add x27, x20, :lo12:.LANCHOR0 ++ str w0, [x19, 4] ++ mov w2, 1 ++ ldr x0, [x24, 3608] ++ mov w1, w2 ++ str x0, [x19, 8] ++ mov x0, x19 ++ bl FlashReadPages ++ ldrb w0, [x27, 72] ++ cbz w0, .L1856 ++ ldr x8, [x19, 16] ++ ldr w7, [x8, 12] ++ cbz w7, .L1856 ++ ldr x6, [x19, 8] ++ ldrh w1, [x27, 2554] ++ mov x0, x6 ++ bl js_hash ++ cmp w7, w0 ++ beq .L1856 ++ cbnz w22, .L1857 ++ ldrh w0, [x25, 4] ++ cmp w28, w0 ++ beq .L1857 ++ ldr w0, [x6] ++ ldrh w1, [x25] ++ str w0, [sp] ++ adrp x0, .LC108 ++ add x0, x0, :lo12:.LC108 ++ ldp w4, w5, [x8] ++ ldr w6, [x8, 8] ++ ldp w2, w3, [x19] ++ bl printk ++ ldrsh w28, [x25, 4] ++ ldrh w22, [x27, 2546] ++.L1859: ++ sub w22, w22, #1 ++ sxth w22, w22 ++ b .L1855 ++.L1857: ++ mov w0, -1 ++ str w0, [x19] ++.L1856: ++ ldr w0, [x19] ++ cmn w0, #1 ++ beq .L1859 ++ ldr x0, [x24, 3608] ++ ldr w0, [x0] ++ cmp w0, w26 ++ bne .L1859 ++ ldr x0, [x24, 3656] ++ ldrh w1, [x0] ++ mov w0, 61604 ++ cmp w1, w0 ++ bne .L1859 ++.L1863: ++ add x19, x23, :lo12:.LANCHOR4 ++ add x24, x21, :lo12:.LANCHOR2 ++ add x19, x19, 1712 ++ add x22, x20, :lo12:.LANCHOR0 ++ mov w2, 48 ++ add x0, x24, 456 ++ ldr x1, [x19, 8] ++ bl ftl_memcpy ++ ldr x0, [x24, 520] ++ ldrh w2, [x22, 2480] ++ ldr x1, [x19, 8] ++ lsl w2, w2, 1 ++ add x1, x1, 48 ++ bl ftl_memcpy ++ ldrh w1, [x22, 2480] ++ ldr x0, [x19, 8] ++ lsr w2, w1, 3 ++ ubfiz x1, x1, 1, 16 ++ add x1, x1, 51 ++ add w2, w2, 4 ++ and x1, x1, -4 ++ add x1, x0, x1 ++ ldr x0, [x22, 64] ++ bl ftl_memcpy ++ ldrh w0, [x22, 2588] ++ cbz w0, .L1861 ++ ldrh w1, [x22, 2480] ++ ldrh w2, [x22, 2580] ++ lsr w0, w1, 3 ++ add w1, w0, w1, lsl 1 ++ ldr x0, [x19, 8] ++ add w1, w1, 52 ++ lsl w2, w2, 2 ++ and x1, x1, 65532 ++ add x1, x0, x1 ++ ldr x0, [x24, 3760] ++ bl ftl_memcpy ++.L1861: ++ add x0, x21, :lo12:.LANCHOR2 ++ mov w1, 19539 ++ movk w1, 0x4654, lsl 16 ++ ldr w2, [x0, 456] ++ cmp w2, w1 ++ bne .L1864 ++ add x1, x20, :lo12:.LANCHOR0 ++ ldrh w4, [x0, 464] ++ ldrb w5, [x0, 466] ++ strh w4, [x0, 790] ++ ldrh w2, [x1, 2494] ++ cmp w5, w2 ++ bne .L1864 ++ ldrh w2, [x1, 2544] ++ add x23, x23, :lo12:.LANCHOR4 ++ ldrh w5, [x1, 2550] ++ add x3, x0, 512 ++ strh wzr, [x0, 802] ++ str w4, [x23, 1768] ++ mul w2, w2, w4 ++ strb wzr, [x0, 806] ++ str w2, [x1, 2616] ++ strb wzr, [x0, 808] ++ mul w2, w5, w2 ++ ldrh w5, [x1, 2630] ++ str w2, [x1, 2584] ++ ldr w2, [x1, 2484] ++ ldrh w1, [x1, 2472] ++ sub w2, w2, w5 ++ sub w2, w2, w4 ++ ldrh w4, [x0, 470] ++ strh w4, [x0, 560] ++ udiv w1, w2, w1 ++ ldrh w2, [x0, 472] ++ lsr w5, w2, 6 ++ and w2, w2, 63 ++ strb w2, [x0, 566] ++ ldrb w2, [x0, 467] ++ strb w2, [x0, 568] ++ mov w2, -1 ++ strh w2, [x0, 800] ++ ldrh w2, [x0, 474] ++ strh w2, [x0, 608] ++ ldrh w2, [x0, 476] ++ strh w5, [x0, 562] ++ strh w1, [x0, 780] ++ lsr w5, w2, 6 ++ and w2, w2, 63 ++ strb w2, [x0, 614] ++ ldrb w2, [x0, 468] ++ strb w2, [x0, 616] ++ ldrh w2, [x0, 478] ++ strh w2, [x0, 656] ++ ldrh w2, [x0, 480] ++ strh w5, [x0, 610] ++ lsr w5, w2, 6 ++ and w2, w2, 63 ++ strh w5, [x0, 658] ++ strb w2, [x0, 662] ++ ldrb w2, [x0, 469] ++ strb w2, [x0, 664] ++ str wzr, [x0, 720] ++ ldr w1, [x0, 488] ++ ldr w2, [x0, 752] ++ stp wzr, wzr, [x3, 216] ++ stp wzr, wzr, [x3, 224] ++ str w1, [x0, 760] ++ str wzr, [x0, 764] ++ ldr w1, [x0, 496] ++ str wzr, [x0, 772] ++ cmp w1, w2 ++ bls .L1865 ++ str w1, [x0, 752] ++.L1865: ++ add x0, x21, :lo12:.LANCHOR2 ++ ldr w1, [x0, 492] ++ ldr w2, [x0, 756] ++ cmp w1, w2 ++ bls .L1866 ++ str w1, [x0, 756] ++.L1866: ++ mov w0, 65535 ++ cmp w4, w0 ++ beq .L1867 ++ add x0, x21, :lo12:.LANCHOR2 ++ add x0, x0, 560 ++ bl make_superblock ++.L1867: ++ add x1, x21, :lo12:.LANCHOR2 ++ add x0, x1, 608 ++ ldrh w2, [x1, 608] ++ mov w1, 65535 ++ cmp w2, w1 ++ beq .L1868 ++ bl make_superblock ++.L1868: ++ add x1, x21, :lo12:.LANCHOR2 ++ add x0, x1, 656 ++ ldrh w2, [x1, 656] ++ mov w1, 65535 ++ cmp w2, w1 ++ beq .L1869 ++ bl make_superblock ++.L1869: ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w1, 65535 ++ add x0, x21, 800 ++ ldrh w2, [x21, 800] ++ cmp w2, w1 ++ beq .L1870 ++ bl make_superblock ++.L1870: ++ mov w0, 0 ++ b .L1852 ++ .size FtlLoadSysInfo, .-FtlLoadSysInfo ++ .align 2 ++ .global FtlDumpBlockInfo ++ .type FtlDumpBlockInfo, %function ++FtlDumpBlockInfo: ++ sub sp, sp, #160 ++ lsr w0, w0, 10 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x19, .LANCHOR2 ++ stp x23, x24, [sp, 64] ++ adrp x23, .LANCHOR0 ++ add x20, x23, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 48] ++ stp x25, x26, [sp, 80] ++ and w24, w1, 255 ++ stp x27, x28, [sp, 96] ++ bl P2V_block_in_plane ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ and w22, w0, 65535 ++ add x1, x1, 152 ++ ldrh w26, [x20, 2544] ++ adrp x0, .LC109 ++ add x0, x0, :lo12:.LC109 ++ bl printk ++ add x1, x19, :lo12:.LANCHOR2 ++ ubfiz x0, x22, 1, 16 ++ add x25, x29, 144 ++ ldr x1, [x1, 520] ++ ldrh w2, [x1, x0] ++ mov w1, w22 ++ adrp x0, .LC110 ++ add x0, x0, :lo12:.LC110 ++ bl printk ++ strh w22, [x25, -48]! ++ mov x0, x25 ++ bl make_superblock ++ ldrb w0, [x20, 204] ++ cbz w0, .L1891 ++ cbnz w24, .L1891 ++ mov w0, w22 ++ bl ftl_get_blk_mode ++ mov w22, w0 ++ cmp w0, 1 ++ bne .L1882 ++ ldrh w26, [x20, 2546] ++.L1882: ++ add x0, x23, :lo12:.LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w21, 0 ++ mov w27, 56 ++ mov w2, w26 ++ mov w1, w22 ++ ldrh w3, [x0, 2544] ++ adrp x0, .LC111 ++ add x0, x0, :lo12:.LC111 ++ bl printk ++.L1883: ++ add x0, x23, :lo12:.LANCHOR0 ++ add x5, x25, 16 ++ mov w20, 0 ++ mov w10, 65535 ++ mov w6, 4 ++ ldrh w7, [x0, 2472] ++ ldrh w8, [x0, 2554] ++ ldrh w9, [x0, 2556] ++ mov w0, 0 ++.L1884: ++ cmp w0, w7 ++ bne .L1886 ++ ldr x0, [x19, 3584] ++ mov w1, w20 ++ adrp x28, .LC112 ++ mov w2, w22 ++ umull x20, w20, w27 ++ mov x24, 0 ++ add x28, x28, :lo12:.LC112 ++ bl FlashReadPages ++.L1887: ++ cmp x24, x20 ++ bne .L1888 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ cmp w26, w21 ++ bne .L1883 ++.L1889: ++ ldp x19, x20, [sp, 32] ++ mov w0, 0 ++ 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, 160 ++ ret ++.L1891: ++ mov w22, 0 ++ b .L1882 ++.L1886: ++ ldrh w1, [x5] ++ cmp w1, w10 ++ beq .L1885 ++ umull x4, w20, w27 ++ ldr x3, [x19, 3584] ++ orr w1, w21, w1, lsl 10 ++ add x3, x3, x4 ++ str w1, [x3, 4] ++ mul w1, w20, w8 ++ ldr x2, [x19, 3584] ++ ldr x3, [x19, 1392] ++ sdiv w1, w1, w6 ++ add x2, x2, x4 ++ add x1, x3, w1, sxtw 2 ++ str x1, [x2, 8] ++ mul w1, w20, w9 ++ ldr x3, [x19, 1400] ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ sdiv w1, w1, w6 ++ add x1, x3, w1, sxtw 2 ++ str x1, [x2, 16] ++.L1885: ++ add w0, w0, 1 ++ add x5, x5, 2 ++ and w0, w0, 65535 ++ b .L1884 ++.L1888: ++ ldr x8, [x19, 3584] ++ ldrh w1, [x29, 96] ++ add x2, x8, x24 ++ ldp x3, x0, [x2, 8] ++ ldr w4, [x3, 4] ++ str w4, [sp, 8] ++ ldr w3, [x3] ++ str w3, [sp] ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x28 ++ ldr w3, [x2, 4] ++ ldr w2, [x8, x24] ++ add x24, x24, 56 ++ bl printk ++ b .L1887 ++ .size FtlDumpBlockInfo, .-FtlDumpBlockInfo ++ .align 2 ++ .global FtlScanAllBlock ++ .type FtlScanAllBlock, %function ++FtlScanAllBlock: ++ sub sp, sp, #144 ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC109 ++ add x1, x1, 176 ++ add x0, x0, :lo12:.LC109 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x21, x22, [sp, 48] ++ adrp x22, .LANCHOR0 ++ stp x23, x24, [sp, 64] ++ add x22, x22, :lo12:.LANCHOR0 ++ adrp x24, .LANCHOR2 ++ add x21, x24, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 32] ++ mov w20, 0 ++ stp x25, x26, [sp, 80] ++ bl printk ++.L1895: ++ ldrh w0, [x22, 2482] ++ cmp w0, w20 ++ bhi .L1903 ++ ldp x19, x20, [sp, 32] ++ mov w0, 0 ++ ldp x21, x22, [sp, 48] ++ ldp x23, x24, [sp, 64] ++ ldp x25, x26, [sp, 80] ++ ldp x29, x30, [sp, 16] ++ add sp, sp, 144 ++ ret ++.L1903: ++ add x19, x29, 128 ++ mov w0, w20 ++ strh w20, [x19, -48]! ++ bl ftl_get_blk_mode ++ add x2, x24, :lo12:.LANCHOR2 ++ ubfiz x1, x20, 1, 16 ++ mov w3, w0 ++ adrp x0, .LC113 ++ add x0, x0, :lo12:.LC113 ++ ldr x2, [x2, 520] ++ ldrh w2, [x2, x1] ++ mov w1, w20 ++ bl printk ++ mov x0, x19 ++ bl make_superblock ++ ldrh w7, [x22, 2472] ++ add x0, x19, 16 ++ ldrh w8, [x22, 2554] ++ mov w19, 0 ++ ldrh w9, [x22, 2556] ++ mov w1, 0 ++ mov w10, 65535 ++ mov w11, 56 ++ mov w5, 4 ++.L1896: ++ cmp w1, w7 ++ bne .L1898 ++ ldr x0, [x21, 3584] ++ mov w25, 56 ++ adrp x26, .LC114 ++ mov w2, 0 ++ mov w1, w19 ++ umull x25, w19, w25 ++ mov x23, 0 ++ add x26, x26, :lo12:.LC114 ++ bl FlashReadPages ++.L1899: ++ cmp x23, x25 ++ bne .L1900 ++ ldr x0, [x21, 3584] ++ mov w1, w19 ++ adrp x25, .LC115 ++ mov w2, 1 ++ mov x19, 0 ++ add x25, x25, :lo12:.LC115 ++ bl FlashReadPages ++.L1901: ++ cmp x23, x19 ++ bne .L1902 ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L1895 ++.L1898: ++ ldrh w2, [x0] ++ cmp w2, w10 ++ beq .L1897 ++ umull x6, w19, w11 ++ ldr x4, [x21, 3584] ++ lsl w2, w2, 10 ++ add x4, x4, x6 ++ str w2, [x4, 4] ++ mul w2, w19, w8 ++ ldr x3, [x21, 3584] ++ ldr x4, [x21, 1392] ++ sdiv w2, w2, w5 ++ add x3, x3, x6 ++ add x2, x4, w2, sxtw 2 ++ str x2, [x3, 8] ++ mul w2, w19, w9 ++ ldr x4, [x21, 1400] ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ sdiv w2, w2, w5 ++ add x2, x4, w2, sxtw 2 ++ str x2, [x3, 16] ++.L1897: ++ add w1, w1, 1 ++ add x0, x0, 2 ++ and w1, w1, 65535 ++ b .L1896 ++.L1900: ++ ldr x8, [x21, 3584] ++ ldrh w1, [x29, 80] ++ add x2, x8, x23 ++ ldp x3, x0, [x2, 8] ++ ldr w4, [x3, 4] ++ str w4, [sp, 8] ++ ldr w3, [x3] ++ str w3, [sp] ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x26 ++ ldr w3, [x2, 4] ++ ldr w2, [x8, x23] ++ add x23, x23, 56 ++ bl printk ++ b .L1899 ++.L1902: ++ ldr x8, [x21, 3584] ++ ldrh w1, [x29, 80] ++ add x2, x8, x19 ++ ldp x3, x0, [x2, 8] ++ ldr w4, [x3, 4] ++ str w4, [sp, 8] ++ ldr w3, [x3] ++ str w3, [sp] ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x25 ++ ldr w3, [x2, 4] ++ ldr w2, [x8, x19] ++ add x19, x19, 56 ++ bl printk ++ b .L1901 ++ .size FtlScanAllBlock, .-FtlScanAllBlock ++ .align 2 ++ .global ftl_scan_all_ppa ++ .type ftl_scan_all_ppa, %function ++ftl_scan_all_ppa: ++ sub sp, sp, #96 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ stp x25, x26, [sp, 80] ++ adrp x19, .LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR4 ++ add x19, x19, 1712 ++ stp x21, x22, [sp, 48] ++ ldrh w26, [x20, 2542] ++ stp x23, x24, [sp, 64] ++ sub w26, w26, #16 ++ lsl w25, w26, 10 ++.L1906: ++ ldrh w0, [x20, 2542] ++ cmp w26, w0 ++ blt .L1914 ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ add x1, x1, 192 ++ adrp x0, .LC119 ++ add x0, x0, :lo12:.LC119 ++ bl printk ++ ldp x19, x20, [sp, 32] ++ ldp x21, x22, [sp, 48] ++ ldp x23, x24, [sp, 64] ++ ldp x25, x26, [sp, 80] ++ ldp x29, x30, [sp, 16] ++ add sp, sp, 96 ++ ret ++.L1914: ++ and w21, w26, 65535 ++ mov w0, w21 ++ bl ftl_get_blk_mode ++ ldrb w1, [x20, 204] ++ cbz w1, .L1907 ++ ldrh w1, [x20, 2480] ++ cmp w26, w1 ++ bge .L1908 ++ ldrh w1, [x20, 2558] ++ cmp w26, w1 ++ blt .L1908 ++.L1907: ++ cmp w0, 1 ++ bne .L1909 ++.L1908: ++ ldrh w23, [x20, 2546] ++ mov w24, -2147483648 ++.L1910: ++ mov w3, w24 ++ mov w2, w23 ++ mov w1, w26 ++ adrp x0, .LC116 ++ add x0, x0, :lo12:.LC116 ++ bl printk ++ mov w0, w21 ++ bl FtlBbmIsBadBlock ++ cbz w0, .L1911 ++ adrp x0, .LC117 ++ mov w3, w24 ++ mov w2, w23 ++ mov w1, w26 ++ add x0, x0, :lo12:.LC117 ++ bl printk ++.L1911: ++ adrp x22, .LANCHOR2 ++ add x22, x22, :lo12:.LANCHOR2 ++ mov w21, 0 ++.L1912: ++ cmp w21, w23 ++ bne .L1913 ++ add w26, w26, 1 ++ add w25, w25, 1024 ++ b .L1906 ++.L1909: ++ ldrh w23, [x20, 2544] ++ mov w24, 0 ++ b .L1910 ++.L1913: ++ add w0, w24, w25 ++ mov w2, 0 ++ add w0, w0, w21 ++ stp wzr, w0, [x19] ++ ldr x0, [x22, 3608] ++ mov w1, 1 ++ str x0, [x19, 8] ++ add w21, w21, 1 ++ ldr x0, [x22, 3656] ++ str x0, [x19, 16] ++ mov x0, x19 ++ bl FlashReadPages ++ ldp x1, x0, [x19, 8] ++ ldr w2, [x1, 4] ++ str w2, [sp] ++ ldp w3, w4, [x0] ++ ldp w5, w6, [x0, 8] ++ adrp x0, .LC118 ++ ldr w7, [x1] ++ add x0, x0, :lo12:.LC118 ++ ldp w2, w1, [x19] ++ bl printk ++ b .L1912 ++ .size ftl_scan_all_ppa, .-ftl_scan_all_ppa ++ .align 2 ++ .global FlashProgPages ++ .type FlashProgPages, %function ++FlashProgPages: ++ stp x29, x30, [sp, -176]! ++ adrp x4, .LANCHOR0 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ add x21, x4, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ str x4, [x29, 96] ++ ldr x5, [x21, 88] ++ ldrb w6, [x21, 72] ++ str w3, [x29, 108] ++ ldrb w5, [x5, 19] ++ cbnz w6, .L1923 ++ mov x19, x0 ++ adrp x0, .LANCHOR1+481 ++ mov w25, w1 ++ mov w23, w2 ++ add x27, x21, 2164 ++ ldrb w28, [x0, #:lo12:.LANCHOR1+481] ++ mov w22, 0 ++ sub w0, w5, #1 ++ str w0, [x29, 104] ++.L1924: ++ cmp w22, w25 ++ bcc .L1937 ++ ldr x0, [x29, 96] ++ mov x20, 0 ++ mov x24, 24 ++ add x21, x0, :lo12:.LANCHOR0 ++ add x22, x21, 2164 ++.L1938: ++ ldrb w0, [x21, 2358] ++ cmp w0, w20 ++ bhi .L1940 ++ ldr w0, [x29, 108] ++ cbnz w0, .L1941 ++.L1949: ++ mov w0, 0 ++ b .L1922 ++.L1923: ++ bl FlashProgSlc2KPages ++.L1922: ++ 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 ++.L1937: ++ mov w12, 56 ++ mov w1, w23 ++ sub w4, w25, w22 ++ add x3, x29, 116 ++ umull x12, w22, w12 ++ add x2, x29, 112 ++ add x26, x19, x12 ++ mov x0, x26 ++ bl LogAddr2PhyAddr ++ mov w24, w0 ++ ldrb w1, [x21, 2358] ++ ldr w0, [x29, 116] ++ cmp w1, w0 ++ bhi .L1926 ++ mov w0, -1 ++ str w0, [x19, x12] ++.L1927: ++ add w22, w22, 1 ++ b .L1924 ++.L1926: ++ ldrb w1, [x21, 2368] ++ mov x2, 24 ++ cmp w1, 0 ++ uxtw x1, w0 ++ csel w24, w24, wzr, ne ++ madd x1, x1, x2, x27 ++ ldr x1, [x1, 8] ++ cbz x1, .L1929 ++ bl FlashWaitCmdDone ++.L1929: ++ ldp w2, w1, [x29, 112] ++ mov x0, 24 ++ madd x0, x1, x0, x27 ++ str w2, [x0, 4] ++ stp x26, xzr, [x0, 8] ++ cbz w24, .L1930 ++ add w2, w22, 1 ++ mov w3, 56 ++ umaddl x2, w2, w3, x19 ++ str x2, [x0, 16] ++.L1930: ++ add x0, x21, x1 ++ ldrb w20, [x0, 2360] ++ mov x0, 24 ++ mul x1, x1, x0 ++ ldrb w0, [x21, 2358] ++ cmp w0, 1 ++ mov w0, w20 ++ strb w20, [x27, x1] ++ bne .L1931 ++ bl NandcWaitFlashReady ++.L1932: ++ ldr w0, [x29, 104] ++ cmp w0, 7 ++ bhi .L1933 ++ add x0, x21, w20, sxtw ++ ldrb w0, [x0, 2128] ++ cbz w0, .L1933 ++ ldrb w1, [x21, 1273] ++ mov w3, 0 ++ add x2, x21, 1276 ++ mov w0, w20 ++ bl HynixSetRRPara ++.L1933: ++ mov w0, w20 ++ bl NandcFlashCs ++ cmp w23, 1 ++ bne .L1934 ++ ldrb w0, [x21, 204] ++ cbz w0, .L1934 ++ mov w0, w20 ++ bl flash_enter_slc_mode ++.L1935: ++ ldr w1, [x29, 112] ++ mov w0, w20 ++ bl FlashProgFirstCmd ++ ldp x3, x4, [x26, 8] ++ mov w2, w28 ++ mov w1, 1 ++ mov w0, w20 ++ bl NandcXferData ++ cbz w24, .L1936 ++ ldr w1, [x29, 112] ++ mov w0, w20 ++ bl FlashProgDpFirstCmd ++ ldr w1, [x29, 116] ++ add x0, x21, 1232 ++ ldr w0, [x0, x1, lsl 2] ++ ldr w1, [x29, 112] ++ cmp w0, 0 ++ mov w0, w20 ++ cset w2, ne ++ bl FlashWaitReadyEN ++ ldr w0, [x21, 76] ++ ldr w1, [x29, 112] ++ add w1, w1, w0 ++ mov w0, w20 ++ bl FlashProgDpSecondCmd ++ add w0, w22, 1 ++ mov w1, 56 ++ mov w2, w28 ++ umaddl x0, w0, w1, x19 ++ mov w1, 1 ++ ldp x3, x4, [x0, 8] ++ mov w0, w20 ++ bl NandcXferData ++.L1936: ++ ldr w1, [x29, 112] ++ mov w0, w20 ++ add w22, w22, w24 ++ bl FlashProgSecondCmd ++ mov w0, w20 ++ bl NandcFlashDeCs ++ b .L1927 ++.L1931: ++ bl NandcFlashCs ++ ldr w1, [x29, 116] ++ add x0, x21, 1232 ++ ldr w0, [x0, x1, lsl 2] ++ ldr w1, [x29, 112] ++ cmp w0, 0 ++ mov w0, w20 ++ cset w2, ne ++ bl FlashWaitReadyEN ++ mov w0, w20 ++ bl NandcFlashDeCs ++ b .L1932 ++.L1934: ++ mov w0, w20 ++ bl flash_exit_slc_mode ++ b .L1935 ++.L1940: ++ mov w0, w20 ++ bl FlashWaitCmdDone ++ cmp w23, 1 ++ bne .L1939 ++ ldrb w0, [x21, 204] ++ cbz w0, .L1939 ++ mul x0, x20, x24 ++ ldrb w0, [x0, x22] ++ bl flash_exit_slc_mode ++.L1939: ++ add x20, x20, 1 ++ b .L1938 ++.L1941: ++ mov w0, 56 ++ and w20, w25, 255 ++ adrp x22, .LANCHOR4 ++ add x24, x22, :lo12:.LANCHOR4 ++ umaddl x25, w25, w0, x19 ++.L1942: ++ cmp x25, x19 ++ beq .L1949 ++ ldr w0, [x19] ++ cmn w0, #1 ++ bne .L1943 ++ ldr w1, [x19, 4] ++ adrp x0, .LC103 ++ add x0, x0, :lo12:.LC103 ++ bl printk ++.L1944: ++ sub w20, w20, #1 ++ add x19, x19, 56 ++ and w20, w20, 255 ++ b .L1942 ++.L1943: ++ add x21, x22, :lo12:.LANCHOR4 ++ mov w4, w20 ++ add x3, x29, 116 ++ add x2, x29, 112 ++ mov w1, w23 ++ mov x0, x19 ++ bl LogAddr2PhyAddr ++ ldr x0, [x21, 1672] ++ mov x2, 56 ++ mov x1, x19 ++ str wzr, [x0] ++ ldr x0, [x21, 1680] ++ str wzr, [x0] ++ add x0, x29, 120 ++ bl memcpy ++ ldr x0, [x21, 1672] ++ mov w2, w23 ++ str x0, [x29, 128] ++ mov w1, 1 ++ ldr x0, [x21, 1680] ++ str x0, [x29, 136] ++ add x0, x29, 120 ++ bl FlashReadPages ++ ldr w21, [x29, 120] ++ cmn w21, #1 ++ bne .L1945 ++ ldr w1, [x19, 4] ++ adrp x0, .LC104 ++ add x0, x0, :lo12:.LC104 ++ bl printk ++ str w21, [x19] ++.L1945: ++ ldr x0, [x19, 16] ++ cbz x0, .L1946 ++ ldr w2, [x0] ++ ldr x0, [x24, 1680] ++ ldr w3, [x0] ++ cmp w2, w3 ++ beq .L1946 ++ ldr w1, [x19, 4] ++ adrp x0, .LC106 ++ add x0, x0, :lo12:.LC106 ++ bl printk ++ mov w0, -1 ++ str w0, [x19] ++.L1946: ++ ldr x0, [x19, 8] ++ cbz x0, .L1944 ++ ldr w2, [x0] ++ ldr x0, [x24, 1672] ++ ldr w3, [x0] ++ cmp w2, w3 ++ beq .L1944 ++ ldr w1, [x19, 4] ++ adrp x0, .LC107 ++ add x0, x0, :lo12:.LC107 ++ bl printk ++ mov w0, -1 ++ str w0, [x19] ++ b .L1944 ++ .size FlashProgPages, .-FlashProgPages ++ .align 2 ++ .type FlashTestBlk.part.18, %function ++FlashTestBlk.part.18: ++ stp x29, x30, [sp, -160]! ++ mov w2, 32 ++ mov w1, 165 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR4 ++ and w20, w0, 65535 ++ lsl w20, w20, 10 ++ ldr x0, [x19, 1656] ++ str x0, [x29, 48] ++ add x0, x29, 96 ++ str x0, [x29, 56] ++ bl ftl_memset ++ ldr x0, [x19, 1656] ++ mov w2, 8 ++ mov w1, 90 ++ bl ftl_memset ++ str w20, [x29, 44] ++ mov w2, 1 ++ add x0, x29, 40 ++ mov w1, w2 ++ bl FlashEraseBlocks ++ mov w3, 1 ++ add x0, x29, 40 ++ mov w2, w3 ++ mov w1, w3 ++ bl FlashProgPages ++ ldr w0, [x29, 40] ++ mov w2, 1 ++ mov w1, 0 ++ cmp w0, 0 ++ 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.18, .-FlashTestBlk.part.18 ++ .align 2 ++ .global FlashTestBlk ++ .type FlashTestBlk, %function ++FlashTestBlk: ++ adrp x1, .LANCHOR4+1644 ++ and w0, w0, 65535 ++ ldr w1, [x1, #:lo12:.LANCHOR4+1644] ++ cmp w0, w1 ++ bcc .L1979 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl FlashTestBlk.part.18 ++ ldp x29, x30, [sp], 16 ++ ret ++.L1979: ++ mov w0, 0 ++ ret ++ .size FlashTestBlk, .-FlashTestBlk ++ .align 2 ++ .global FlashMakeFactorBbt ++ .type FlashMakeFactorBbt, %function ++FlashMakeFactorBbt: ++ stp x29, x30, [sp, -240]! ++ adrp x1, .LANCHOR0 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR4 ++ add x0, x21, :lo12:.LANCHOR4 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ mov w19, 0 ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr x0, [x0, 1664] ++ stp x0, x1, [x29, 152] ++ add x0, x1, :lo12:.LANCHOR0 ++ ldrh w2, [x0, 188] ++ ldrh w22, [x0, 190] ++ mul w22, w22, w2 ++ ldr x2, [x0, 88] ++ and w22, w22, 65535 ++ ldrb w2, [x2, 24] ++ str w2, [x29, 128] ++ ldrh w2, [x0, 76] ++ ldrb w0, [x0, 72] ++ uxtw x1, w2 ++ cmp w0, 1 ++ ubfiz w2, w2, 1, 15 ++ csel w0, w2, w1, eq ++ mov w1, 1 ++ str w0, [x29, 168] ++ adrp x0, .LC120 ++ add x0, x0, :lo12:.LC120 ++ bl printk ++ add x0, x21, :lo12:.LANCHOR4 ++ mov w2, 4096 ++ mov w1, 0 ++ ldr x0, [x0, 1664] ++ bl ftl_memset ++ lsr w0, w22, 4 ++ str w0, [x29, 148] ++ sub w0, w22, #1 ++ and w0, w0, 65535 ++ str w0, [x29, 144] ++ adrp x0, .LC123 ++ add x0, x0, :lo12:.LC123 ++ str x0, [x29, 104] ++.L1986: ++ ldr x0, [x29, 160] ++ add x20, x0, :lo12:.LANCHOR0 ++ ldrb w0, [x20, 2358] ++ cmp w0, w19 ++ bhi .L2013 ++ 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 ++.L2013: ++ add x0, x21, :lo12:.LANCHOR4 ++ sxtw x24, w19 ++ add x1, x0, 1696 ++ ldrh w1, [x1, x24, lsl 1] ++ str w1, [x29, 172] ++ cbnz w1, .L1987 ++ ldr x0, [x0, 1608] ++ add x28, x20, 1232 ++ ldrh w2, [x20, 196] ++ mov w23, 0 ++ mov w25, 0 ++ mov w26, 0 ++ lsl w2, w2, 9 ++ bl ftl_memset ++ add x0, x20, x24 ++ ldrb w27, [x0, 2360] ++ ldr w0, [x29, 128] ++ and w0, w0, 1 ++ str w0, [x29, 100] ++.L1988: ++ and w0, w26, 65535 ++ str w0, [x29, 112] ++ cmp w0, w22 ++ bcc .L1999 ++.L1998: ++ mov w2, w23 ++ mov w1, w19 ++ adrp x0, .LC122 ++ add x0, x0, :lo12:.LC122 ++ bl printk ++ ldr x0, [x29, 160] ++ ldr w2, [x29, 148] ++ add x1, x0, :lo12:.LANCHOR0 ++ ldrb w0, [x1, 2358] ++ mul w0, w0, w2 ++ cmp w23, w0 ++ blt .L2000 ++ add x0, x21, :lo12:.LANCHOR4 ++ ldrh w2, [x1, 196] ++ mov w1, 0 ++ ldr x0, [x0, 1608] ++ lsl w2, w2, 9 ++ bl ftl_memset ++.L2000: ++ cbnz w19, .L2002 ++ add x20, x21, :lo12:.LANCHOR4 ++ ldr x0, [x29, 160] ++ mov w23, 1 ++ add x25, x0, :lo12:.LANCHOR0 ++ ldrh w26, [x20, 1644] ++.L2003: ++ ldrb w0, [x25, 73] ++ cmp w0, w26 ++ bhi .L2005 ++ ldr w26, [x29, 144] ++ sub w25, w22, #50 ++ add x20, x21, :lo12:.LANCHOR4 ++ mov w23, 1 ++.L2006: ++ cmp w26, w25 ++ bgt .L2008 ++ ldr x0, [x29, 160] ++ add x3, x21, :lo12:.LANCHOR4 ++ add x1, x0, :lo12:.LANCHOR0 ++ ldr w2, [x3, 1644] ++ ldrb w0, [x1, 73] ++ sub w0, w0, w2 ++ ldr w2, [x29, 172] ++ cmp w2, w0 ++ bcc .L2002 ++ ldr x0, [x3, 1608] ++ ldrh w2, [x1, 196] ++ mov w1, 0 ++ lsl w2, w2, 9 ++ bl ftl_memset ++.L2002: ++ add x27, x21, :lo12:.LANCHOR4 ++ mul w25, w19, w22 ++ ldr w26, [x29, 144] ++ adrp x23, .LC124 ++ add x20, x27, 1696 ++ add x23, x23, :lo12:.LC124 ++.L2010: ++ mov w1, w19 ++ mov w2, w26 ++ mov x0, x23 ++ bl printk ++ ldr x1, [x27, 1608] ++.L2011: ++ ubfx x0, x26, 5, 11 ++ ldr w0, [x1, x0, lsl 2] ++ lsr w0, w0, w26 ++ tbnz x0, 0, .L2012 ++ ldr x1, [x29, 152] ++ mov w0, -3872 ++ strh w26, [x20, x24, lsl 1] ++ mov w2, 1 ++ strh w0, [x1] ++ strh w26, [x1, 2] ++ strh wzr, [x1, 8] ++ mov w1, w2 ++ ldr x0, [x27, 1608] ++ str x0, [x29, 192] ++ ldr x0, [x27, 1664] ++ str x0, [x29, 200] ++ add w0, w26, w25 ++ lsl w0, w0, 10 ++ str w0, [x29, 188] ++ add x0, x29, 184 ++ bl FlashEraseBlocks ++ mov w3, 1 ++ add x0, x29, 184 ++ mov w2, w3 ++ mov w1, w3 ++ bl FlashProgPages ++ ldr w0, [x29, 184] ++ cbz w0, .L1987 ++ sub w26, w26, #1 ++ and w26, w26, 65535 ++ b .L2010 ++.L1999: ++ mov w0, -1 ++ strb w0, [x29, 182] ++ strb w0, [x29, 183] ++ ldr w0, [x29, 100] ++ cbz w0, .L1990 ++ ldr w3, [x28, x24, lsl 2] ++ mov w0, w27 ++ add x2, x29, 182 ++ add w3, w25, w3 ++ str w3, [x29, 96] ++ mov w1, w3 ++ bl FlashReadSpare ++ ldrb w0, [x20, 72] ++ ldr w3, [x29, 96] ++ cmp w0, 1 ++ bne .L1990 ++ ldr w1, [x20, 76] ++ mov w0, w27 ++ add x2, x29, 183 ++ add w1, w3, w1 ++ bl FlashReadSpare ++ ldrb w0, [x29, 182] ++ ldrb w1, [x29, 183] ++ and w0, w0, w1 ++ strb w0, [x29, 182] ++.L1990: ++ ldr x0, [x29, 128] ++ tbz x0, 1, .L1992 ++ ldr x0, [x20, 88] ++ add x2, x29, 183 ++ ldrh w1, [x0, 10] ++ ldr w0, [x28, x24, lsl 2] ++ sub w1, w1, #1 ++ add w0, w25, w0 ++ add w1, w1, w0 ++ mov w0, w27 ++ bl FlashReadSpare ++.L1992: ++ ldr x1, [x20, 88] ++ ldrb w0, [x1, 7] ++ cmp w0, 1 ++ ccmp w0, 8, 4, ne ++ ldrb w0, [x29, 182] ++ beq .L1993 ++ ldrb w1, [x1, 18] ++ cmp w1, 12 ++ bne .L1994 ++.L1993: ++ cbz w0, .L2015 ++ ldrb w0, [x29, 183] ++ cmp w0, 0 ++ cset w0, eq ++.L1995: ++ ldr x1, [x29, 128] ++ tbz x1, 2, .L1996 ++ ldr w1, [x28, x24, lsl 2] ++ mov w0, w27 ++ add w1, w25, w1 ++ bl SandiskProgTestBadBlock ++.L1996: ++ cbz w0, .L1997 ++ mov w2, w26 ++ mov w1, w19 ++ adrp x0, .LC121 ++ add x0, x0, :lo12:.LC121 ++ bl printk ++ add w23, w23, 1 ++ add x1, x21, :lo12:.LANCHOR4 ++ ldr x0, [x29, 112] ++ ldrb w2, [x29, 112] ++ and w23, w23, 65535 ++ ldr x3, [x1, 1608] ++ ubfx x0, x0, 5, 11 ++ lsl x0, x0, 2 ++ mov w1, 1 ++ lsl w2, w1, w2 ++ ldr w1, [x3, x0] ++ orr w1, w1, w2 ++ str w1, [x3, x0] ++ ldr w1, [x29, 148] ++ ldrb w0, [x20, 2358] ++ mul w0, w0, w1 ++ cmp w23, w0 ++ bgt .L1998 ++.L1997: ++ ldr w0, [x29, 168] ++ add w26, w26, 1 ++ add w25, w25, w0 ++ b .L1988 ++.L1994: ++ cmp w0, 255 ++ bne .L2015 ++ ldrb w0, [x29, 183] ++ cmp w0, 255 ++ cset w0, ne ++ b .L1995 ++.L2015: ++ mov w0, 1 ++ b .L1995 ++.L2005: ++ mov w0, w26 ++ bl FlashTestBlk ++ cbz w0, .L2004 ++ ldr x0, [x29, 104] ++ mov w1, w26 ++ bl printk ++ ldr x3, [x20, 1608] ++ ubfx x0, x26, 5, 11 ++ lsl x0, x0, 2 ++ lsl w1, w23, w26 ++ ldr w2, [x3, x0] ++ orr w1, w2, w1 ++ str w1, [x3, x0] ++ ldr w0, [x29, 172] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ str w0, [x29, 172] ++.L2004: ++ add w26, w26, 1 ++ and w26, w26, 65535 ++ b .L2003 ++.L2008: ++ mov w0, w26 ++ bl FlashTestBlk ++ cbz w0, .L2007 ++ ldr x0, [x29, 104] ++ mov w1, w26 ++ bl printk ++ ldr x3, [x20, 1608] ++ ubfx x0, x26, 5, 11 ++ lsl x0, x0, 2 ++ lsl w1, w23, w26 ++ ldr w2, [x3, x0] ++ orr w1, w2, w1 ++ str w1, [x3, x0] ++.L2007: ++ sub w26, w26, #1 ++ and w26, w26, 65535 ++ b .L2006 ++.L2012: ++ sub w26, w26, #1 ++ and w26, w26, 65535 ++ b .L2011 ++.L1987: ++ add w19, w19, 1 ++ and w19, w19, 255 ++ b .L1986 ++ .size FlashMakeFactorBbt, .-FlashMakeFactorBbt ++ .align 2 ++ .global FtlLowFormatEraseBlock ++ .type FtlLowFormatEraseBlock, %function ++FtlLowFormatEraseBlock: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR2 ++ add x5, x22, :lo12:.LANCHOR2 ++ stp x25, x26, [sp, 64] ++ stp x19, x20, [sp, 16] ++ and w26, w0, 65535 ++ stp x23, x24, [sp, 48] ++ stp x27, x28, [sp, 80] ++ ldr w0, [x5, 424] ++ cbnz w0, .L2058 ++ adrp x20, .LANCHOR0 ++ add x24, x20, :lo12:.LANCHOR0 ++ and w25, w1, 255 ++ add x9, x24, 2504 ++ mov w6, 0 ++ mov w21, 0 ++ ldrb w8, [x24, 204] ++ mov w19, 0 ++ ldrb w0, [x24, 2368] ++ mov w7, 56 ++ mov w10, 4 ++ str w26, [x5, 3572] ++ str w0, [x29, 132] ++.L2037: ++ ldrh w0, [x24, 2472] ++ cmp w0, w6 ++ bhi .L2041 ++ cbz w21, .L2035 ++ add x27, x22, :lo12:.LANCHOR2 ++ cmp w8, 0 ++ cset w23, ne ++ strb wzr, [x24, 2368] ++ mov w2, w21 ++ mov w1, w23 ++ ldr x0, [x27, 432] ++ bl FlashEraseBlocks ++ ldrb w0, [x29, 132] ++ strb w0, [x24, 2368] ++ mov x24, 0 ++ mov w0, 56 ++ umull x21, w21, w0 ++.L2044: ++ ldr x0, [x27, 432] ++ add x1, x0, x24 ++ ldr w0, [x0, x24] ++ cmn w0, #1 ++ bne .L2043 ++ ldr w0, [x1, 4] ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++.L2043: ++ add x24, x24, 56 ++ cmp x21, x24 ++ bne .L2044 ++ cbnz w25, .L2045 ++ and w23, w23, 65535 ++ mov w0, 1 ++ mov w28, 6 ++ str w0, [x29, 136] ++.L2046: ++ add x20, x20, :lo12:.LANCHOR0 ++ add x27, x22, :lo12:.LANCHOR2 ++ add x0, x20, 2504 ++ mov w24, 0 ++ str x0, [x29, 120] ++.L2054: ++ mov w5, 0 ++ mov w21, 0 ++ mov w6, 56 ++ mov w7, 4 ++.L2047: ++ ldrh w0, [x20, 2472] ++ cmp w0, w5 ++ bhi .L2050 ++ cbz w21, .L2035 ++ ldr x0, [x27, 432] ++ mov w2, w23 ++ mov w1, w21 ++ strb wzr, [x20, 2368] ++ mov w3, 1 ++ bl FlashProgPages ++ mov w1, 56 ++ ldrb w0, [x29, 132] ++ strb w0, [x20, 2368] ++ mov x2, 0 ++ umull x1, w21, w1 ++.L2053: ++ ldr x0, [x27, 432] ++ add x3, x0, x2 ++ ldr w0, [x0, x2] ++ cbz w0, .L2052 ++ ldr w0, [x3, 4] ++ add w19, w19, 1 ++ stp x2, x1, [x29, 104] ++ and w19, w19, 65535 ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++ ldp x2, x1, [x29, 104] ++.L2052: ++ add x2, x2, 56 ++ cmp x1, x2 ++ bne .L2053 ++ add w24, w24, w28 ++ ldr w0, [x29, 136] ++ and w24, w24, 65535 ++ cmp w0, w24 ++ bhi .L2054 ++ add x24, x22, :lo12:.LANCHOR2 ++ mov x20, 0 ++.L2056: ++ cbz w25, .L2055 ++ ldr x0, [x24, 432] ++ add x1, x0, x20 ++ ldr w0, [x0, x20] ++ cbnz w0, .L2055 ++ ldr w0, [x1, 4] ++ mov w1, 1 ++ str x2, [x29, 136] ++ lsr w0, w0, 10 ++ bl FtlFreeSysBlkQueueIn ++ ldr x2, [x29, 136] ++.L2055: ++ add x20, x20, 56 ++ cmp x20, x2 ++ bne .L2056 ++ cmp w26, 63 ++ ccmp w25, 0, 0, hi ++ beq .L2035 ++ add x22, x22, :lo12:.LANCHOR2 ++ mov w2, w21 ++ mov w1, w23 ++ ldr x0, [x22, 432] ++ bl FlashEraseBlocks ++.L2035: ++ 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 ++.L2041: ++ umull x0, w6, w7 ++ ldr x1, [x5, 432] ++ str wzr, [x1, x0] ++ mov w1, w26 ++ ldrb w0, [x9, w6, sxtw] ++ bl V2P_block ++ and w11, w0, 65535 ++ mov w12, w11 ++ cbz w25, .L2038 ++ bl IsBlkInVendorPart ++ cbnz w0, .L2039 ++.L2038: ++ mov w0, w12 ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L2040 ++ umull x2, w21, w7 ++ ldr x0, [x5, 432] ++ lsl w11, w11, 10 ++ add x0, x0, x2 ++ str w11, [x0, 4] ++ ldrh w0, [x24, 2556] ++ ldr x1, [x5, 432] ++ add x1, x1, x2 ++ ldr x2, [x5, 3664] ++ mul w0, w0, w21 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ sdiv w0, w0, w10 ++ add x0, x2, w0, sxtw 2 ++ stp xzr, x0, [x1, 8] ++.L2039: ++ add w6, w6, 1 ++ and w6, w6, 65535 ++ b .L2037 ++.L2040: ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L2039 ++.L2045: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrh w1, [x0, 2546] ++ ldrb w0, [x0, 204] ++ str w1, [x29, 136] ++ cbnz w0, .L2059 ++ uxtw x0, w1 ++ mov w23, 1 ++ lsr w28, w0, 2 ++ b .L2046 ++.L2059: ++ mov w23, 1 ++ mov w28, w23 ++ b .L2046 ++.L2050: ++ umull x0, w5, w6 ++ ldr x1, [x27, 432] ++ str wzr, [x1, x0] ++ mov w1, w26 ++ ldr x0, [x29, 120] ++ ldrb w0, [x0, w5, sxtw] ++ bl V2P_block ++ and w8, w0, 65535 ++ mov w9, w8 ++ cbz w25, .L2048 ++ bl IsBlkInVendorPart ++ cbnz w0, .L2049 ++.L2048: ++ mov w0, w9 ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L2049 ++ umull x2, w21, w6 ++ ldr x0, [x27, 432] ++ add w8, w24, w8, lsl 10 ++ add x0, x0, x2 ++ str w8, [x0, 4] ++ ldr x1, [x27, 432] ++ ldr x0, [x27, 3640] ++ add x1, x1, x2 ++ ldr x2, [x27, 3648] ++ str x0, [x1, 8] ++ ldrh w0, [x20, 2556] ++ mul w0, w0, w21 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ sdiv w0, w0, w7 ++ add x0, x2, w0, sxtw 2 ++ str x0, [x1, 16] ++.L2049: ++ add w5, w5, 1 ++ and w5, w5, 65535 ++ b .L2047 ++.L2058: ++ mov w19, 0 ++ b .L2035 ++ .size FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock ++ .align 2 ++ .global FtlBbmTblFlush ++ .type FtlBbmTblFlush, %function ++FtlBbmTblFlush: ++ stp x29, x30, [sp, -96]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR2 ++ add x19, x22, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr w0, [x19, 424] ++ cbnz w0, .L2082 ++ adrp x20, .LANCHOR4 ++ adrp x23, .LANCHOR0 ++ add x25, x20, :lo12:.LANCHOR4 ++ add x21, x23, :lo12:.LANCHOR0 ++ ldr x2, [x19, 3656] ++ mov w1, 0 ++ ldr x0, [x19, 3608] ++ add x26, x21, 2656 ++ str x2, [x25, 1728] ++ mov w24, 0 ++ ldrh w2, [x21, 2554] ++ str x0, [x25, 1720] ++ bl ftl_memset ++.L2083: ++ ldrh w0, [x21, 2494] ++ cmp w24, w0 ++ blt .L2084 ++ add x20, x20, :lo12:.LANCHOR4 ++ add x19, x21, 2624 ++ mov w2, 16 ++ mov w1, 255 ++ adrp x26, .LC125 ++ add x23, x23, :lo12:.LANCHOR0 ++ ldr x28, [x20, 1728] ++ add x26, x26, :lo12:.LC125 ++ mov w24, 0 ++ mov x0, x28 ++ bl ftl_memset ++ mov w0, -3887 ++ strh w0, [x28] ++ ldr w0, [x19, 8] ++ str w0, [x28, 4] ++ ldrh w0, [x21, 2624] ++ strh w0, [x28, 2] ++ ldrh w0, [x19, 4] ++ strh w0, [x28, 8] ++ ldrh w0, [x19, 6] ++ strh w0, [x28, 10] ++ ldr w0, [x21, 2468] ++ mov w21, 0 ++ strh w0, [x28, 12] ++.L2085: ++ add x25, x22, :lo12:.LANCHOR2 ++ ldrh w1, [x19] ++ ldrh w2, [x19, 2] ++ ldrh w3, [x19, 4] ++ ldr x0, [x25, 3608] ++ str x0, [x20, 1720] ++ ldr x0, [x25, 3656] ++ str x0, [x20, 1728] ++ orr w0, w2, w1, lsl 10 ++ str wzr, [x20, 1712] ++ ldrh w4, [x28, 10] ++ str w0, [x20, 1716] ++ mov x0, x26 ++ bl printk ++ ldrh w0, [x23, 2546] ++ ldrh w1, [x19, 2] ++ sub w0, w0, #1 ++ cmp w1, w0 ++ blt .L2086 ++ ldr w0, [x19, 8] ++ mov w2, 1 ++ ldrh w1, [x19] ++ add w0, w0, 1 ++ str w0, [x19, 8] ++ str w0, [x28, 4] ++ strh w1, [x28, 8] ++ ldrh w0, [x19, 4] ++ strh w1, [x19, 4] ++ ldr x1, [x25, 432] ++ strh w0, [x19] ++ lsl w0, w0, 10 ++ str w0, [x20, 1716] ++ strh wzr, [x19, 2] ++ str w0, [x1, 4] ++ mov w1, w2 ++ ldr x0, [x25, 432] ++ bl FlashEraseBlocks ++.L2086: ++ add x25, x20, 1712 ++ mov w3, 1 ++ mov x0, x25 ++ mov w2, w3 ++ mov w1, w3 ++ bl FlashProgPages ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++ ldr w0, [x20, 1712] ++ cmn w0, #1 ++ bne .L2087 ++ ldr w1, [x20, 1716] ++ add w21, w21, 1 ++ adrp x0, .LC126 ++ and w21, w21, 65535 ++ add x0, x0, :lo12:.LC126 ++ bl printk ++ cmp w21, 3 ++ bls .L2085 ++ ldr w1, [x20, 1716] ++ add x22, x22, :lo12:.LANCHOR2 ++ mov w2, w21 ++ adrp x0, .LC127 ++ add x0, x0, :lo12:.LC127 ++ bl printk ++ mov w0, 1 ++ str w0, [x22, 424] ++.L2082: ++ 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 ++.L2084: ++ ldrh w2, [x19, 3784] ++ ldr x1, [x26], 8 ++ ldr x0, [x25, 1720] ++ mul w3, w2, w24 ++ lsl w2, w2, 2 ++ add w24, w24, 1 ++ add x0, x0, w3, sxtw 2 ++ bl ftl_memcpy ++ b .L2083 ++.L2090: ++ mov w24, 1 ++ b .L2085 ++.L2087: ++ add w24, w24, 1 ++ cmp w24, 1 ++ ble .L2090 ++ cmp w0, 256 ++ bne .L2082 ++ b .L2085 ++ .size FtlBbmTblFlush, .-FtlBbmTblFlush ++ .align 2 ++ .global allocate_data_superblock ++ .type allocate_data_superblock, %function ++allocate_data_superblock: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR2 ++ add x19, x22, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr w1, [x19, 424] ++ cbnz w1, .L2096 ++ adrp x23, .LANCHOR0 ++ mov x20, x0 ++ add x24, x19, 656 ++ add x21, x23, :lo12:.LANCHOR0 ++.L2097: ++ cmp x20, x24 ++ bne .L2098 ++ ldrh w2, [x19, 552] ++ ldr w3, [x19, 1376] ++ lsr w0, w2, 1 ++ add w4, w0, 1 ++ mul w1, w2, w3 ++ add w1, w4, w1, lsr 2 ++ ldr w4, [x21, 2372] ++ and w1, w1, 65535 ++ cbz w4, .L2099 ++ ldr w4, [x19, 776] ++ cmp w4, 39 ++ bhi .L2099 ++ cmp w4, 2 ++ bls .L2126 ++ tbz x2, 0, .L2122 ++ cbz w3, .L2126 ++.L2122: ++ mov w1, w0 ++ b .L2099 ++.L2098: ++ ldrb w0, [x20, 8] ++ cmp w0, 1 ++ bne .L2126 ++ ldrh w0, [x21, 2492] ++ cmp w0, 1 ++ beq .L2126 ++ ldrb w0, [x21, 204] ++ cbnz w0, .L2126 ++ ldr w2, [x21, 2372] ++ ldrh w0, [x19, 552] ++ lsr w1, w0, 3 ++ cbz w2, .L2099 ++ ldr w2, [x19, 776] ++ cmp w2, 1 ++ bhi .L2099 ++ mov w1, 7 ++ mul w1, w0, w1 ++ lsr w1, w1, 3 ++.L2099: ++ cbz w1, .L2100 ++ sub w1, w1, #1 ++ and w1, w1, 65535 ++.L2100: ++ ldrb w2, [x20, 8] ++ add x0, x19, 544 ++ bl List_pop_index_node ++ and w27, w0, 65535 ++ ldrh w0, [x19, 552] ++ sub w0, w0, #1 ++ strh w0, [x19, 552] ++ ldrh w0, [x21, 2480] ++ cmp w0, w27 ++ bls .L2097 ++ ldr x0, [x19, 520] ++ ubfiz x26, x27, 1, 16 ++ ldrh w25, [x0, x26] ++ cbnz w25, .L2097 ++ strh w27, [x20] ++ mov x0, x20 ++ bl make_superblock ++ ldrb w0, [x20, 7] ++ cbz w0, .L2143 ++ add x28, x20, 16 ++ ldrh w5, [x21, 2472] ++ mov x3, x28 ++ mov x0, 0 ++ mov x4, 56 ++ mov w6, 65535 ++.L2103: ++ cmp w5, w0, uxth ++ bhi .L2105 ++ ldr w0, [x21, 2372] ++ cbz w0, .L2106 ++ add x0, x19, 560 ++ cmp x20, x0 ++ bne .L2106 ++ ldr x0, [x19, 440] ++ ldrh w0, [x0, x26] ++ cmp w0, 40 ++ bls .L2106 ++ strb wzr, [x20, 8] ++.L2106: ++ ldrb w0, [x20, 8] ++ ldr x1, [x19, 440] ++ cbnz w0, .L2107 ++ ldrh w0, [x1, x26] ++ cbz w0, .L2108 ++ ldrh w2, [x21, 2536] ++ add w0, w0, w2 ++.L2144: ++ strh w0, [x1, x26] ++ mov w1, 0 ++ ldr w0, [x19, 760] ++ add w0, w0, 1 ++ str w0, [x19, 760] ++ mov w0, w27 ++ bl ftl_set_blk_mode ++.L2110: ++ ldr x0, [x19, 440] ++ ldr w1, [x19, 772] ++ ldrh w0, [x0, x26] ++ cmp w0, w1 ++ bls .L2111 ++ str w0, [x19, 772] ++.L2111: ++ ldr w2, [x19, 760] ++ ldr w1, [x19, 764] ++ ldrh w0, [x21, 2536] ++ madd w0, w0, w2, w1 ++ ldrh w1, [x21, 2480] ++ mov w2, 56 ++ umull x2, w25, w2 ++ udiv w0, w0, w1 ++ ldr x1, [x19, 3696] ++ str w0, [x19, 768] ++ ldr w0, [x1, 16] ++ add w0, w0, 1 ++ str w0, [x1, 16] ++ mov x0, 0 ++.L2112: ++ cmp x2, x0 ++ bne .L2113 ++ ldrb w0, [x21, 204] ++ cbz w0, .L2114 ++ ldrb w0, [x20, 8] ++ mov w2, w25 ++ cmp w0, 1 ++ bne .L2115 ++ mov w1, 0 ++.L2145: ++ ldr x0, [x19, 432] ++ bl FlashEraseBlocks ++.L2114: ++ ldrb w1, [x20, 8] ++ mov w2, w25 ++ ldr x0, [x19, 432] ++ bl FlashEraseBlocks ++ mov x1, 0 ++ mov w2, 0 ++ mov x4, 56 ++.L2116: ++ cmp w25, w1, uxth ++ bhi .L2118 ++ cmp w2, 0 ++ ble .L2119 ++ mov w0, w27 ++ bl update_multiplier_value ++ bl FtlBbmTblFlush ++.L2119: ++ ldrb w0, [x20, 7] ++ cbnz w0, .L2120 ++.L2143: ++ ldr x0, [x19, 520] ++ mov w1, -1 ++ strh w1, [x0, x26] ++ b .L2097 ++.L2126: ++ mov w1, 0 ++ b .L2100 ++.L2105: ++ ldr x1, [x19, 432] ++ madd x2, x0, x4, x1 ++ stp xzr, xzr, [x2, 8] ++ ldrh w2, [x3] ++ cmp w2, w6 ++ beq .L2104 ++ umull x7, w25, w4 ++ add w25, w25, 1 ++ and w25, w25, 65535 ++ lsl w2, w2, 10 ++ add x1, x1, x7 ++ str w2, [x1, 4] ++.L2104: ++ add x0, x0, 1 ++ add x3, x3, 2 ++ b .L2103 ++.L2108: ++ mov w0, 2 ++ b .L2144 ++.L2107: ++ ldrh w0, [x1, x26] ++ add w0, w0, 1 ++ strh w0, [x1, x26] ++ ldr w0, [x19, 764] ++ add w0, w0, 1 ++ str w0, [x19, 764] ++ mov w0, w27 ++ bl ftl_set_blk_mode.part.9 ++ b .L2110 ++.L2113: ++ ldr x1, [x19, 432] ++ add x1, x1, x0 ++ add x0, x0, 56 ++ ldr w3, [x1, 4] ++ and w3, w3, -1024 ++ str w3, [x1, 4] ++ b .L2112 ++.L2115: ++ mov w1, 1 ++ b .L2145 ++.L2118: ++ mul x0, x1, x4 ++ ldr x3, [x19, 432] ++ add x5, x3, x0 ++ ldr w3, [x3, x0] ++ cmn w3, #1 ++ bne .L2117 ++ add w2, w2, 1 ++ ldr w0, [x5, 4] ++ stp x4, x1, [x29, 104] ++ stp w3, w2, [x29, 120] ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++ ldp w3, w2, [x29, 120] ++ strh w3, [x28] ++ ldp x4, x1, [x29, 104] ++ ldrb w0, [x20, 7] ++ sub w0, w0, #1 ++ strb w0, [x20, 7] ++.L2117: ++ add x1, x1, 1 ++ add x28, x28, 2 ++ b .L2116 ++.L2120: ++ add x23, x23, :lo12:.LANCHOR0 ++ add x22, x22, :lo12:.LANCHOR2 ++ strh wzr, [x20, 2] ++ strb wzr, [x20, 6] ++ ldrh w1, [x23, 2544] ++ strh w27, [x20] ++ mul w0, w0, w1 ++ ldr w1, [x22, 752] ++ str w1, [x20, 12] ++ and w0, w0, 65535 ++ add w1, w1, 1 ++ strh w0, [x20, 4] ++ str w1, [x22, 752] ++ ldr x1, [x22, 520] ++ ldrh w2, [x20] ++ strh w0, [x1, x2, lsl 1] ++.L2096: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 allocate_data_superblock, .-allocate_data_superblock ++ .align 2 ++ .global FtlGcFreeBadSuperBlk ++ .type FtlGcFreeBadSuperBlk, %function ++FtlGcFreeBadSuperBlk: ++ stp x29, x30, [sp, -96]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x20, x20, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ and w23, w0, 65535 ++ stp x21, x22, [sp, 32] ++ stp x25, x26, [sp, 64] ++ ldrh w0, [x20, 1456] ++ str x27, [sp, 80] ++ cbz w0, .L2147 ++ adrp x22, .LANCHOR0 ++ add x24, x20, 1464 ++ add x22, x22, :lo12:.LANCHOR0 ++ mov w21, 0 ++.L2148: ++ ldrh w0, [x22, 2472] ++ cmp w0, w21 ++ bhi .L2154 ++ bl FtlGcReFreshBadBlk ++.L2147: ++ 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 ++.L2154: ++ add x0, x22, 2504 ++ mov w1, w23 ++ adrp x26, .LC128 ++ add x26, x26, :lo12:.LC128 ++ mov w19, 0 ++ ldrb w0, [x0, w21, sxtw] ++ bl V2P_block ++ and w25, w0, 65535 ++.L2149: ++ ldrh w0, [x20, 1456] ++ cmp w0, w19 ++ bhi .L2153 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ b .L2148 ++.L2153: ++ ldrh w0, [x24, w19, sxtw 1] ++ add w27, w19, 1 ++ cmp w0, w25 ++ bne .L2150 ++ mov w1, w25 ++ mov x0, x26 ++ bl printk ++ mov w0, w25 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ ldrh w0, [x20, 1456] ++ mov w1, w27 ++.L2151: ++ cmp w19, w0 ++ bcc .L2152 ++ sub w0, w0, #1 ++ strh w0, [x20, 1456] ++.L2150: ++ and w19, w27, 65535 ++ b .L2149 ++.L2152: ++ sub w2, w1, #1 ++ ldrh w3, [x24, w1, sxtw 1] ++ add w19, w19, 1 ++ add w1, w1, 1 ++ and w19, w19, 65535 ++ strh w3, [x24, w2, sxtw 1] ++ b .L2151 ++ .size FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk ++ .align 2 ++ .global update_vpc_list ++ .type update_vpc_list, %function ++update_vpc_list: ++ and w13, w0, 65535 ++ adrp x8, .LANCHOR2 ++ add x0, x8, :lo12:.LANCHOR2 ++ stp x29, x30, [sp, -16]! ++ ubfiz x1, x13, 1, 16 ++ add x29, sp, 0 ++ ldr x2, [x0, 520] ++ ldrh w1, [x2, x1] ++ cbnz w1, .L2160 ++ ldrh w1, [x0, 800] ++ cmp w1, w13 ++ bne .L2161 ++ mov w1, -1 ++ strh w1, [x0, 800] ++.L2162: ++ add x8, x8, :lo12:.LANCHOR2 ++ mov w1, w13 ++ add x0, x8, 512 ++ bl List_remove_node ++ ldrh w0, [x8, 536] ++ sub w0, w0, #1 ++ strh w0, [x8, 536] ++ mov w0, w13 ++ bl free_data_superblock ++ mov w0, w13 ++ bl FtlGcFreeBadSuperBlk ++ mov w0, 1 ++.L2159: ++ ldp x29, x30, [sp], 16 ++ ret ++.L2161: ++ ldrh w1, [x0, 560] ++ cmp w1, w13 ++ beq .L2166 ++ ldrh w1, [x0, 608] ++ cmp w1, w13 ++ beq .L2166 ++ ldrh w0, [x0, 656] ++ cmp w0, w13 ++ bne .L2162 ++.L2166: ++ mov w0, 0 ++ b .L2159 ++.L2160: ++ mov w0, w13 ++ bl List_update_data_list ++ b .L2166 ++ .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]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 65535 ++ stp x21, x22, [sp, 32] ++ mov w0, 65535 ++ adrp x20, .LANCHOR2 ++ cmp w19, w0 ++ beq .L2169 ++ add x21, x20, :lo12:.LANCHOR2 ++ ubfiz x22, x19, 1, 16 ++ ldr x1, [x21, 520] ++ ldrh w0, [x1, x22] ++ cbnz w0, .L2170 ++ mov w1, w19 ++ mov w2, 0 ++ adrp x0, .LC129 ++ add x0, x0, :lo12:.LC129 ++ bl printk ++ ldr x0, [x21, 520] ++ add x6, x21, 544 ++ mov w1, 32 ++ strh w1, [x0, x22] ++ mov w1, w19 ++ mov x0, x6 ++ bl test_node_in_list ++ cbz w0, .L2171 ++ mov w1, w19 ++ mov x0, x6 ++ bl List_remove_node ++ ldrh w0, [x21, 552] ++ sub w0, w0, #1 ++ strh w0, [x21, 552] ++ mov w0, w19 ++ bl INSERT_DATA_LIST ++ ldr x0, [x21, 520] ++ mov w1, w19 ++ ldrh w2, [x0, x22] ++ adrp x0, .LC130 ++ add x0, x0, :lo12:.LC130 ++ bl printk ++.L2171: ++ mov w0, w19 ++ bl FtlGcRefreshBlock ++.L2174: ++ mov w0, 0 ++ b .L2168 ++.L2170: ++ sub w0, w0, #1 ++ strh w0, [x1, x22] ++.L2169: ++ add x20, x20, :lo12:.LANCHOR2 ++ mov w1, 65535 ++ ldrh w0, [x20, 3872] ++ cmp w0, w1 ++ bne .L2173 ++ strh w19, [x20, 3872] ++ b .L2174 ++.L2173: ++ cmp w19, w0 ++ beq .L2174 ++ bl update_vpc_list ++ cmp w0, 0 ++ cset w0, ne ++ strh w19, [x20, 3872] ++.L2168: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size decrement_vpc_count, .-decrement_vpc_count ++ .align 2 ++ .global FtlSlcSuperblockCheck ++ .type FtlSlcSuperblockCheck, %function ++FtlSlcSuperblockCheck: ++ ldrh w1, [x0, 4] ++ cbz w1, .L2191 ++ ldrh w2, [x0] ++ mov w1, 65535 ++ cmp w2, w1 ++ beq .L2191 ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR2 ++ adrp x20, .LANCHOR0 ++ ldrb w0, [x0, 6] ++ add x22, x20, :lo12:.LANCHOR0 ++ add x21, x21, 1500 ++ add x0, x0, 8 ++ ldrh w1, [x19, x0, lsl 1] ++.L2183: ++ mov w0, 65535 ++ cmp w1, w0 ++ beq .L2185 ++ ldrb w1, [x19, 8] ++ cmp w1, 1 ++ bne .L2186 ++ ldrb w2, [x22, 204] ++ cbnz w2, .L2186 ++ ldrh w2, [x19, 2] ++ ldrh w2, [x21, x2, lsl 1] ++ cmp w2, w0 ++ bne .L2186 ++ ldrh w0, [x19, 4] ++ sub w0, w0, #1 ++ strh w0, [x19, 4] ++ ldrh w0, [x19] ++ bl decrement_vpc_count ++ ldrh w0, [x19, 4] ++ cbnz w0, .L2185 ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++.L2194: ++ strh w0, [x19, 2] ++ strb wzr, [x19, 6] ++.L2179: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2185: ++ ldrb w0, [x19, 6] ++ ldrh w1, [x22, 2472] ++ add w0, w0, 1 ++ and w0, w0, 255 ++ strb w0, [x19, 6] ++ cmp w1, w0 ++ bne .L2184 ++ ldrh w0, [x19, 2] ++ strb wzr, [x19, 6] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++.L2184: ++ ldrb w0, [x19, 6] ++ add x0, x0, 8 ++ ldrh w1, [x19, x0, lsl 1] ++ b .L2183 ++.L2186: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w2, [x0, 204] ++ cbz w2, .L2179 ++ cmp w1, 1 ++ bne .L2179 ++ ldrh w2, [x19, 2] ++ ldrh w1, [x0, 2546] ++ cmp w2, w1 ++ bcc .L2179 ++ ldrh w1, [x19] ++ adrp x2, .LANCHOR2+520 ++ ldrh w4, [x19, 4] ++ ldr x3, [x2, #:lo12:.LANCHOR2+520] ++ lsl x1, x1, 1 ++ ldrh w2, [x3, x1] ++ sub w2, w2, w4 ++ strh w2, [x3, x1] ++ strh wzr, [x19, 4] ++ ldrh w0, [x0, 2544] ++ b .L2194 ++.L2191: ++ 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, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ str x23, [sp, 48] ++ add x21, x21, :lo12:.LANCHOR2 ++ strb wzr, [x0, 10] ++ adrp x20, .LANCHOR0 ++ ldrb w0, [x0, 6] ++ add x21, x21, 1500 ++ add x23, x20, :lo12:.LANCHOR0 ++ add x0, x0, 8 ++ ldrh w0, [x19, x0, lsl 1] ++.L2196: ++ mov w2, 65535 ++ cmp w0, w2 ++ beq .L2197 ++ ldrb w1, [x19, 8] ++ ldrh w22, [x19, 2] ++ cmp w1, 1 ++ ldrh w1, [x19, 4] ++ bne .L2199 ++ ldrb w3, [x23, 204] ++ cbnz w3, .L2199 ++ ldrh w3, [x21, w22, sxtw 1] ++ cmp w3, w2 ++ bne .L2199 ++ ldrh w0, [x19] ++ sub w1, w1, #1 ++ strh w1, [x19, 4] ++ bl decrement_vpc_count ++.L2197: ++ ldrb w0, [x19, 6] ++ ldrh w1, [x23, 2472] ++ add w0, w0, 1 ++ and w0, w0, 255 ++ strb w0, [x19, 6] ++ cmp w1, w0 ++ bne .L2198 ++ ldrh w0, [x19, 2] ++ strb wzr, [x19, 6] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++.L2198: ++ ldrb w0, [x19, 6] ++ add x0, x0, 8 ++ ldrh w0, [x19, x0, lsl 1] ++ b .L2196 ++.L2199: ++ adrp x21, .LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR2 ++ orr w22, w22, w0, lsl 10 ++ add x20, x20, :lo12:.LANCHOR0 ++ add x21, x21, 1500 ++ sub w1, w1, #1 ++ strh w1, [x19, 4] ++.L2200: ++ ldrb w0, [x19, 6] ++ mov w1, 65535 ++ ldrh w3, [x20, 2472] ++.L2202: ++ add w0, w0, 1 ++ and w0, w0, 255 ++ cmp w0, w3 ++ bne .L2201 ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++ mov w0, 0 ++.L2201: ++ add x2, x19, w0, sxtw 1 ++ ldrh w2, [x2, 16] ++ cmp w2, w1 ++ beq .L2202 ++ strb w0, [x19, 6] ++ ldrb w0, [x19, 8] ++ cmp w0, 1 ++ bne .L2195 ++ ldrb w2, [x20, 204] ++ ldrh w0, [x19, 2] ++ cbnz w2, .L2204 ++ ldrh w0, [x21, w0, sxtw 1] ++ cmp w0, w1 ++ bne .L2195 ++ ldrh w0, [x19, 4] ++ cbz w0, .L2195 ++ sub w0, w0, #1 ++ strh w0, [x19, 4] ++ ldrh w0, [x19] ++ bl decrement_vpc_count ++ b .L2200 ++.L2204: ++ ldrh w1, [x20, 2546] ++ cmp w0, w1 ++ bcc .L2195 ++ ldrh w0, [x19] ++ adrp x1, .LANCHOR2+520 ++ ldrh w3, [x19, 4] ++ ldr x2, [x1, #:lo12:.LANCHOR2+520] ++ lsl x0, x0, 1 ++ ldrh w1, [x2, x0] ++ sub w1, w1, w3 ++ strh w1, [x2, x0] ++ strh wzr, [x19, 4] ++ ldrh w0, [x20, 2544] ++ strh w0, [x19, 2] ++ strb wzr, [x19, 6] ++.L2195: ++ mov w0, w22 ++ ldr x23, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size get_new_active_ppa, .-get_new_active_ppa ++ .align 2 ++ .global FtlVpcTblFlush ++ .type FtlVpcTblFlush, %function ++FtlVpcTblFlush: ++ stp x29, x30, [sp, -96]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR2 ++ add x19, x23, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr w0, [x19, 424] ++ cbnz w0, .L2213 ++ ldr x21, [x19, 3656] ++ adrp x24, .LANCHOR4 ++ add x22, x24, :lo12:.LANCHOR4 ++ ldr x0, [x19, 3608] ++ ldrh w1, [x19, 784] ++ add x20, x19, 456 ++ adrp x26, .LANCHOR0 ++ add x25, x26, :lo12:.LANCHOR0 ++ str x0, [x22, 1720] ++ add x22, x22, 1712 ++ str x21, [x22, 16] ++ strh w1, [x21, 2] ++ mov w1, -3932 ++ strh w1, [x21] ++ str wzr, [x21, 12] ++ ldr w1, [x19, 792] ++ stp w1, wzr, [x21, 4] ++ mov w1, 19539 ++ movk w1, 0x4654, lsl 16 ++ str w1, [x19, 456] ++ mov w1, 99 ++ ldrb w2, [x19, 566] ++ movk w1, 0x5000, lsl 16 ++ str w1, [x20, 4] ++ ldrh w1, [x19, 560] ++ strh w1, [x20, 14] ++ ldrh w1, [x19, 562] ++ ldrh w0, [x19, 790] ++ strh w0, [x20, 8] ++ orr w1, w2, w1, lsl 6 ++ strh w1, [x20, 16] ++ ldrh w1, [x19, 608] ++ strh w1, [x20, 18] ++ ldrb w2, [x19, 614] ++ ldrh w1, [x19, 610] ++ ldrh w0, [x25, 2494] ++ strb w0, [x20, 10] ++ ldrb w0, [x19, 568] ++ orr w1, w2, w1, lsl 6 ++ strb w0, [x20, 11] ++ ldrb w0, [x19, 616] ++ strb w0, [x20, 12] ++ strh w1, [x20, 20] ++ ldrh w1, [x19, 656] ++ strh w1, [x20, 22] ++ ldrb w0, [x19, 664] ++ strb w0, [x20, 13] ++ ldr w0, [x19, 760] ++ str w0, [x20, 32] ++ ldr w0, [x19, 752] ++ ldrb w2, [x19, 662] ++ str w0, [x20, 40] ++ ldrh w1, [x19, 658] ++ ldr w0, [x19, 756] ++ str w0, [x20, 36] ++ ldrh w0, [x19, 1448] ++ orr w1, w2, w1, lsl 6 ++ strh w0, [x20, 44] ++ ldrh w0, [x19, 1450] ++ strh w0, [x20, 46] ++ ldrh w2, [x25, 2554] ++ ldr x0, [x22, 8] ++ strh w1, [x20, 24] ++ mov w1, 255 ++ bl ftl_memset ++ ldr x0, [x22, 8] ++ mov x1, x20 ++ mov w2, 48 ++ mov x20, x26 ++ bl ftl_memcpy ++ ldr x1, [x19, 520] ++ ldrh w2, [x25, 2480] ++ ldr x0, [x22, 8] ++ lsl w2, w2, 1 ++ add x0, x0, 48 ++ bl ftl_memcpy ++ ldrh w0, [x25, 2480] ++ ldr x3, [x22, 8] ++ ldr x1, [x25, 64] ++ lsr w2, w0, 3 ++ ubfiz x0, x0, 1, 16 ++ add x0, x0, 51 ++ add w2, w2, 4 ++ and x0, x0, -4 ++ add x0, x3, x0 ++ bl ftl_memcpy ++ ldrh w0, [x25, 2588] ++ cbz w0, .L2214 ++ ldrh w0, [x25, 2480] ++ ldr x3, [x22, 8] ++ ldrh w2, [x25, 2580] ++ lsr w1, w0, 3 ++ add w0, w1, w0, lsl 1 ++ ldr x1, [x19, 3752] ++ add w0, w0, 52 ++ lsl w2, w2, 2 ++ and x0, x0, 65532 ++ add x0, x3, x0 ++ bl ftl_memcpy ++.L2214: ++ add x27, x23, :lo12:.LANCHOR2 ++ add x26, x24, :lo12:.LANCHOR4 ++ add x19, x27, 784 ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w22, 0 ++ mov w25, 65535 ++ mov w0, 0 ++ bl FtlUpdateVaildLpn ++.L2215: ++ ldrh w2, [x19, 2] ++ ldrh w1, [x19] ++ ldr x0, [x27, 3608] ++ str x0, [x26, 1720] ++ ldr x0, [x27, 3656] ++ str x0, [x26, 1728] ++ orr w0, w2, w1, lsl 10 ++ str w0, [x26, 1716] ++ ldrh w0, [x20, 2546] ++ sub w0, w0, #1 ++ cmp w2, w0 ++ blt .L2216 ++ ldrh w25, [x19, 4] ++ strh wzr, [x19, 2] ++ strh w1, [x19, 4] ++ bl FtlFreeSysBlkQueueOut ++ ldr w1, [x27, 752] ++ str w1, [x19, 8] ++ add w2, w1, 1 ++ str w2, [x27, 752] ++ ubfiz w2, w0, 10, 16 ++ str w2, [x26, 1716] ++ strh w0, [x19] ++ strh w0, [x21, 2] ++ str w1, [x21, 4] ++.L2216: ++ ldrb w0, [x20, 72] ++ cbz w0, .L2217 ++ ldrh w1, [x20, 2554] ++ ldr x0, [x27, 3608] ++ bl js_hash ++ str w0, [x21, 12] ++.L2217: ++ mov w3, 1 ++ add x0, x26, 1712 ++ mov w1, w3 ++ mov w2, w3 ++ bl FlashProgPages ++ ldrh w0, [x19, 2] ++ ldr w1, [x26, 1712] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ strh w0, [x19, 2] ++ cmn w1, #1 ++ bne .L2218 ++ cmp w0, 1 ++ bne .L2219 ++ ldrh w0, [x20, 2546] ++ sub w0, w0, #1 ++ strh w0, [x19, 2] ++.L2219: ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ cmp w22, 3 ++ bls .L2215 ++ add x24, x24, :lo12:.LANCHOR4 ++ add x23, x23, :lo12:.LANCHOR2 ++ mov w2, w22 ++ adrp x0, .LC131 ++ add x0, x0, :lo12:.LC131 ++ ldr w1, [x24, 1716] ++ bl printk ++ mov w0, 1 ++ str w0, [x23, 424] ++.L2213: ++ 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 ++.L2218: ++ cmp w0, 1 ++ beq .L2215 ++ cmp w1, 256 ++ beq .L2215 ++ mov w0, 65535 ++ cmp w25, w0 ++ beq .L2213 ++ mov w1, 1 ++ mov w0, w25 ++ bl FtlFreeSysBlkQueueIn ++ b .L2213 ++ .size FtlVpcTblFlush, .-FtlVpcTblFlush ++ .align 2 ++ .global FtlSuperblockPowerLostFix ++ .type FtlSuperblockPowerLostFix, %function ++FtlSuperblockPowerLostFix: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x1, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ ldr w25, [x1, 424] ++ cbnz w25, .L2235 ++ adrp x22, .LANCHOR0 ++ add x1, x22, :lo12:.LANCHOR0 ++ ldrb w1, [x1, 204] ++ cbz w1, .L2246 ++ ldrb w1, [x0, 8] ++ cmp w1, 1 ++ bne .L2246 ++ ldrh w24, [x0, 4] ++ mov w25, w1 ++.L2237: ++ mov x19, x0 ++ mov w0, -1 ++ str w0, [x29, 112] ++ add x0, x21, :lo12:.LANCHOR2 ++ mov w2, 61589 ++ mov x20, x0 ++ ldr x23, [x0, 3656] ++ ldr x1, [x0, 3608] ++ stp x1, x23, [x29, 96] ++ mov w1, -3 ++ str w1, [x23, 8] ++ mov w1, -2 ++ str w1, [x23, 12] ++ ldrh w1, [x19] ++ strh w1, [x23, 2] ++ strh wzr, [x23] ++ ldr x1, [x0, 3608] ++ str w2, [x1] ++ mov w2, 22136 ++ movk w2, 0x1234, lsl 16 ++ ldr x1, [x0, 3608] ++ str w2, [x1, 4] ++.L2238: ++ sub w24, w24, #1 ++ cmn w24, #1 ++ beq .L2241 ++ ldrh w0, [x19, 4] ++ cbnz w0, .L2239 ++.L2241: ++ add x21, x21, :lo12:.LANCHOR2 ++ ldrh w0, [x19] ++ ldrh w3, [x19, 4] ++ add x22, x22, :lo12:.LANCHOR0 ++ ldr x2, [x21, 520] ++ lsl x0, x0, 1 ++ ldrh w1, [x2, x0] ++ sub w1, w1, w3 ++ strh w1, [x2, x0] ++ strb wzr, [x19, 6] ++ ldrh w0, [x22, 2544] ++ strh w0, [x19, 2] ++ strh wzr, [x19, 4] ++.L2235: ++ 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 ++.L2246: ++ mov w24, 12 ++ b .L2237 ++.L2239: ++ mov x0, x19 ++ bl get_new_active_ppa ++ str w0, [x29, 92] ++ cmn w0, #1 ++ beq .L2241 ++ ldr w0, [x20, 756] ++ mov w3, 0 ++ str w0, [x23, 4] ++ mov w2, w25 ++ add w0, w0, 1 ++ mov w1, 1 ++ cmn w0, #1 ++ csel w0, w0, wzr, ne ++ str w0, [x20, 756] ++ add x0, x29, 88 ++ bl FlashProgPages ++ ldrh w0, [x19] ++ bl decrement_vpc_count ++ b .L2238 ++ .size FtlSuperblockPowerLostFix, .-FtlSuperblockPowerLostFix ++ .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] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr x20, [x0, 16] ++ ldr x26, [x0, 40] ++ bl ftl_free_no_use_map_blk ++ ldrh w1, [x19, 10] ++ ldrh w2, [x19, 8] ++ sub w1, w1, #4 ++ cmp w2, w1 ++ blt .L2252 ++ ubfiz x0, x0, 1, 16 ++ ldrh w25, [x20, x0] ++ cbz w25, .L2252 ++ ldr w1, [x19, 52] ++ cbnz w1, .L2252 ++ mov w1, 1 ++ str w1, [x19, 52] ++ strh wzr, [x20, x0] ++ ldrh w0, [x19, 8] ++ ldrh w1, [x19, 2] ++ sub w0, w0, #1 ++ strh w0, [x19, 8] ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 2546] ++ cmp w1, w0 ++ bcc .L2253 ++ mov x0, x19 ++ bl ftl_map_blk_alloc_new_blk ++.L2253: ++ adrp x23, .LANCHOR4 ++ add x21, x23, :lo12:.LANCHOR4 ++ adrp x24, .LANCHOR2 ++ add x21, x21, 1712 ++ add x28, x24, :lo12:.LANCHOR2 ++ mov w20, 0 ++.L2254: ++ ldrh w0, [x19, 6] ++ cmp w0, w20 ++ bhi .L2259 ++ mov w1, 1 ++ mov w0, w25 ++ bl FtlFreeSysBlkQueueIn ++ str wzr, [x19, 52] ++.L2252: ++ add x22, x22, :lo12:.LANCHOR0 ++ ldrh w1, [x19, 2] ++ ldrh w0, [x22, 2546] ++ cmp w1, w0 ++ bcc .L2257 ++ mov x0, x19 ++ bl ftl_map_blk_alloc_new_blk ++ b .L2257 ++.L2259: ++ ubfiz x0, x20, 2, 16 ++ add x3, x26, x0 ++ ldr w1, [x26, x0] ++ cmp w25, w1, lsr 10 ++ bne .L2255 ++ ldr x1, [x28, 3616] ++ mov w2, 1 ++ ldr x27, [x28, 3656] ++ stp x1, x27, [x21, 8] ++ mov w1, w2 ++ str x3, [x29, 104] ++ ldr w0, [x26, x0] ++ str w0, [x21, 4] ++ mov x0, x21 ++ bl FlashReadPages ++ ldr w0, [x21] ++ ldr x3, [x29, 104] ++ cmn w0, #1 ++ bne .L2256 ++.L2258: ++ add x23, x23, :lo12:.LANCHOR4 ++ str wzr, [x3] ++ add x24, x24, :lo12:.LANCHOR2 ++ adrp x0, .LC132 ++ ldrh w2, [x27, 8] ++ add x0, x0, :lo12:.LC132 ++ ldr w1, [x23, 1716] ++ bl printk ++ mov w0, 1 ++ str w0, [x24, 424] ++.L2257: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L2256: ++ ldrh w0, [x27, 8] ++ cmp w0, w20 ++ bne .L2258 ++ ldrh w1, [x27] ++ ldrh w0, [x19, 4] ++ cmp w1, w0 ++ bne .L2258 ++ ldr x2, [x21, 8] ++ mov w1, w20 ++ mov x0, x19 ++ bl FtlMapWritePage ++.L2255: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L2254 ++ .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, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x20, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ ldr w1, [x20, 424] ++ cbnz w1, .L2265 ++ mov x19, x0 ++ ldrh w0, [x0] ++ mov w1, 65535 ++ cmp w0, w1 ++ ldr x21, [x19, 16] ++ bne .L2266 ++ ldrh w0, [x19, 8] ++ add w0, w0, 1 ++ strh w0, [x19, 8] ++ bl FtlFreeSysBlkQueueOut ++ strh w0, [x21] ++ strh wzr, [x19, 2] ++ ldr w0, [x19, 48] ++ strh wzr, [x19] ++ add w0, w0, 1 ++ str w0, [x19, 48] ++.L2265: ++ 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 ++.L2266: ++ ubfiz x0, x0, 1, 16 ++ ldrh w1, [x19, 2] ++ ldr x23, [x20, 3656] ++ adrp x22, .LANCHOR0 ++ ldr x25, [x19, 40] ++ ldrh w24, [x21, x0] ++ adrp x21, .LANCHOR4 ++ add x0, x21, :lo12:.LANCHOR4 ++ orr w1, w1, w24, lsl 10 ++ str w1, [x0, 1716] ++ ldr x1, [x20, 3608] ++ str x1, [x0, 1720] ++ str x23, [x0, 1728] ++ mov w1, 255 ++ ldr w0, [x19, 48] ++ str w0, [x23, 4] ++ mov w0, -1291 ++ strh w0, [x23, 8] ++ ldrh w0, [x19, 4] ++ strh w0, [x23] ++ add x0, x22, :lo12:.LANCHOR0 ++ strh w24, [x23, 2] ++ ldrh w2, [x0, 2546] ++ ldr x0, [x20, 3608] ++ lsl w2, w2, 3 ++ bl ftl_memset ++ mov w1, 0 ++ mov w0, 0 ++.L2267: ++ ldrh w2, [x19, 6] ++ cmp w2, w0 ++ bhi .L2269 ++ add x22, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x22, 72] ++ cbz w0, .L2270 ++ add x0, x21, :lo12:.LANCHOR4 ++ ldrh w1, [x22, 2554] ++ ldr x0, [x0, 1720] ++ bl js_hash ++ str w0, [x23, 12] ++.L2270: ++ add x21, x21, :lo12:.LANCHOR4 ++ mov w2, 1 ++ mov w3, 0 ++ mov w1, w2 ++ add x0, x21, 1712 ++ bl FlashProgPages ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++ mov x0, x19 ++ bl ftl_map_blk_gc ++ b .L2265 ++.L2269: ++ ubfiz x2, x0, 2, 16 ++ ldr w3, [x25, x2] ++ cmp w24, w3, lsr 10 ++ bne .L2268 ++ add w1, w1, 1 ++ ldr x4, [x20, 3608] ++ and w1, w1, 65535 ++ ubfiz x3, x1, 3, 16 ++ str w0, [x4, x3] ++ ldr w4, [x25, x2] ++ ldr x2, [x20, 3608] ++ add x2, x2, x3 ++ str w4, [x2, 4] ++.L2268: ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ b .L2267 ++ .size Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page ++ .align 2 ++ .global FtlMapWritePage ++ .type FtlMapWritePage, %function ++FtlMapWritePage: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR2 ++ stp x25, x26, [sp, 64] ++ adrp x25, .LANCHOR4 ++ add x24, x25, :lo12:.LANCHOR4 ++ stp x21, x22, [sp, 32] ++ stp x27, x28, [sp, 80] ++ mov x22, x25 ++ stp x19, x20, [sp, 16] ++ mov w27, w1 ++ mov x19, x0 ++ mov x28, x2 ++ add x24, x24, 1712 ++ mov w21, 0 ++.L2276: ++ add x1, x23, :lo12:.LANCHOR2 ++ adrp x20, .LANCHOR0 ++ ldr w0, [x1, 736] ++ add w0, w0, 1 ++ str w0, [x1, 736] ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrh w1, [x19, 2] ++ ldrh w0, [x0, 2546] ++ sub w0, w0, #1 ++ cmp w1, w0 ++ bge .L2277 ++ ldrh w1, [x19] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2278 ++.L2277: ++ mov x0, x19 ++ bl Ftl_write_map_blk_to_last_page ++.L2278: ++ add x1, x23, :lo12:.LANCHOR2 ++ ldr w0, [x1, 424] ++ cbnz w0, .L2291 ++ ldrh w2, [x19] ++ add x3, x25, :lo12:.LANCHOR4 ++ ldr x0, [x19, 16] ++ add x3, x3, 1712 ++ ldrh w26, [x0, x2, lsl 1] ++ mov w2, 16 ++ ldrh w0, [x19, 2] ++ str x28, [x3, 8] ++ orr w0, w0, w26, lsl 10 ++ str w0, [x3, 4] ++ ldr x0, [x1, 3656] ++ mov w1, 0 ++ str x0, [x3, 16] ++ str x3, [x29, 104] ++ bl ftl_memset ++ ldr x3, [x29, 104] ++ ldr w0, [x19, 48] ++ ldr x6, [x3, 16] ++ strh w27, [x6, 8] ++ str w0, [x6, 4] ++ ldrh w0, [x19, 4] ++ strh w0, [x6] ++ add x0, x20, :lo12:.LANCHOR0 ++ strh w26, [x6, 2] ++ ldrb w1, [x0, 72] ++ cbz w1, .L2280 ++ ldrh w1, [x0, 2554] ++ ldr x0, [x3, 8] ++ bl js_hash ++ str w0, [x6, 12] ++.L2280: ++ mov w3, 1 ++ mov x0, x24 ++ mov w1, w3 ++ mov w2, w3 ++ bl FlashProgPages ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ strh w0, [x19, 2] ++ ldr w1, [x24] ++ cmn w1, #1 ++ bne .L2281 ++ ldr w1, [x24, 4] ++ adrp x0, .LC133 ++ add x0, x0, :lo12:.LC133 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ bl printk ++ ldrh w0, [x19, 2] ++ cmp w0, 2 ++ bhi .L2282 ++ add x20, x20, :lo12:.LANCHOR0 ++ ldrh w0, [x20, 2546] ++ sub w0, w0, #1 ++ strh w0, [x19, 2] ++.L2282: ++ cmp w21, 3 ++ bls .L2276 ++ add x22, x22, :lo12:.LANCHOR4 ++ add x23, x23, :lo12:.LANCHOR2 ++ mov w2, w21 ++ adrp x0, .LC134 ++ add x0, x0, :lo12:.LC134 ++ ldr w1, [x22, 1716] ++ bl printk ++ mov w0, 1 ++ str w0, [x23, 424] ++.L2291: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L2281: ++ cbz w1, .L2284 ++ strh w26, [x19, 60] ++ cmp w0, 1 ++ bne .L2285 ++.L2286: ++ str wzr, [x19, 56] ++ b .L2276 ++.L2285: ++ cmp w1, 256 ++.L2299: ++ beq .L2286 ++ ldr w0, [x19, 56] ++ cbnz w0, .L2286 ++ add x22, x22, :lo12:.LANCHOR4 ++ ldr x0, [x19, 40] ++ ldr w1, [x22, 1716] ++ str w1, [x0, w27, uxtw 2] ++ b .L2291 ++.L2284: ++ cmp w0, 1 ++ b .L2299 ++ .size FtlMapWritePage, .-FtlMapWritePage ++ .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 x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ ubfiz x20, x0, 4, 16 ++ ldr x0, [x19, 704] ++ add x1, x0, x20 ++ ldr x2, [x1, 8] ++ ldrh w1, [x0, x20] ++ add x0, x19, 3792 ++ bl FtlMapWritePage ++ ldr x0, [x19, 704] ++ add x0, x0, x20 ++ ldr w1, [x0, 4] ++ and w1, w1, 2147483647 ++ str w1, [x0, 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 FtlMapTblRecovery ++ .type FtlMapTblRecovery, %function ++FtlMapTblRecovery: ++ stp x29, x30, [sp, -144]! ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, 0 ++ stp x25, x26, [sp, 64] ++ stp x21, x22, [sp, 32] ++ mov x22, x0 ++ stp x23, x24, [sp, 48] ++ stp x27, x28, [sp, 80] ++ ldrh w24, [x0, 6] ++ ldr x21, [x0, 40] ++ ldr x23, [x0, 16] ++ ldr x0, [x0, 24] ++ lsl w2, w24, 2 ++ str x0, [x29, 128] ++ ldrh w0, [x22, 8] ++ str w0, [x29, 140] ++ mov x0, x21 ++ bl ftl_memset ++ stp wzr, wzr, [x22, 48] ++ adrp x0, .LANCHOR2 ++ add x2, x0, :lo12:.LANCHOR2 ++ adrp x1, .LANCHOR4 ++ add x4, x1, :lo12:.LANCHOR4 ++ stp x0, x1, [x29, 104] ++ add x4, x4, 1712 ++ ldr w0, [x29, 140] ++ ldr x5, [x2, 3608] ++ ldr x20, [x2, 3656] ++ sub w0, w0, #1 ++ str x5, [x4, 8] ++ mov w2, -1 ++ str x20, [x4, 16] ++ mov x25, x4 ++ str w0, [x29, 136] ++ adrp x0, .LANCHOR0 ++ add x26, x0, :lo12:.LANCHOR0 ++ strh w2, [x22] ++ strh w2, [x22, 2] ++ mov w2, 1 ++ str w2, [x22, 56] ++.L2303: ++ ldr w0, [x29, 140] ++ cmp w19, w0 ++ bge .L2322 ++ ldr w0, [x29, 136] ++ sxtw x27, w19 ++ cmp w19, w0 ++ bne .L2304 ++ lsl x0, x27, 1 ++ mov w1, 1 ++ add x25, x23, x0 ++ mov w26, 0 ++ ldrh w0, [x23, x0] ++ bl FtlGetLastWrittenPage ++ sxth w23, w0 ++ add w0, w0, 1 ++ strh w0, [x22, 2] ++ ldr x0, [x29, 128] ++ add w23, w23, 1 ++ strh w19, [x22] ++ ldr w0, [x0, x27, lsl 2] ++ str w0, [x22, 48] ++ ldr x0, [x29, 112] ++ add x19, x0, :lo12:.LANCHOR4 ++ adrp x0, .LANCHOR0 ++ add x19, x19, 1712 ++ add x27, x0, :lo12:.LANCHOR0 ++.L2305: ++ cmp w26, w23 ++ blt .L2308 ++.L2322: ++ mov x0, x22 ++ bl ftl_free_no_use_map_blk ++ adrp x0, .LANCHOR0 ++ add x21, x0, :lo12:.LANCHOR0 ++ ldrh w1, [x22, 2] ++ ldrh w0, [x21, 2546] ++ cmp w1, w0 ++ bne .L2310 ++ mov x0, x22 ++ bl ftl_map_blk_alloc_new_blk ++.L2310: ++ mov x0, x22 ++ bl ftl_map_blk_gc ++ mov x0, x22 ++ 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], 144 ++ ret ++.L2308: ++ ldrh w0, [x25] ++ mov w2, 1 ++ mov w1, w2 ++ orr w0, w26, w0, lsl 10 ++ str w0, [x19, 4] ++ mov x0, x19 ++ bl FlashReadPages ++ ldrb w0, [x27, 72] ++ cbz w0, .L2306 ++ ldr x0, [x19, 16] ++ ldr w6, [x0, 12] ++ cbz w6, .L2306 ++ ldrh w1, [x27, 2554] ++ ldr x0, [x19, 8] ++ bl js_hash ++ cmp w6, w0 ++ beq .L2306 ++ mov w0, -1 ++ str w0, [x19] ++.L2306: ++ ldr w0, [x19] ++ cmn w0, #1 ++ beq .L2307 ++ ldrh w0, [x20, 8] ++ cmp w24, w0 ++ bls .L2307 ++ ldrh w2, [x20] ++ ldrh w1, [x22, 4] ++ cmp w2, w1 ++ bne .L2307 ++ ubfiz x0, x0, 2, 16 ++ ldr w1, [x19, 4] ++ str w1, [x21, x0] ++.L2307: ++ add w26, w26, 1 ++ sxth w26, w26 ++ b .L2305 ++.L2304: ++ ldr x0, [x29, 104] ++ mov w2, 1 ++ add x28, x0, :lo12:.LANCHOR2 ++ ldr x0, [x28, 3608] ++ str x0, [x25, 8] ++ lsl x0, x27, 1 ++ add x1, x23, x0 ++ str x1, [x29, 120] ++ ldrh w1, [x26, 2546] ++ ldrh w0, [x23, x0] ++ sub w1, w1, #1 ++ orr w0, w1, w0, lsl 10 ++ mov w1, w2 ++ str w0, [x25, 4] ++ mov x0, x25 ++ bl FlashReadPages ++ ldr w0, [x25] ++ cmn w0, #1 ++ beq .L2324 ++ ldrh w1, [x20] ++ ldrh w0, [x22, 4] ++ cmp w1, w0 ++ bne .L2324 ++ ldrh w1, [x20, 8] ++ mov w0, 64245 ++ cmp w1, w0 ++ beq .L2312 ++.L2324: ++ mov w27, 0 ++ mov w28, -1 ++.L2313: ++ ldrh w0, [x26, 2546] ++ cmp w27, w0 ++ bge .L2320 ++ ldr x0, [x29, 120] ++ mov w2, 1 ++ mov w1, w2 ++ ldrh w0, [x0] ++ orr w0, w27, w0, lsl 10 ++ str w0, [x25, 4] ++ mov x0, x25 ++ bl FlashReadPages ++ ldrb w0, [x26, 72] ++ cbz w0, .L2317 ++ ldr x0, [x25, 16] ++ ldr w7, [x0, 12] ++ cbz w7, .L2317 ++ ldrh w1, [x26, 2554] ++ ldr x0, [x25, 8] ++ bl js_hash ++ cmp w7, w0 ++ beq .L2317 ++ str w28, [x25] ++.L2317: ++ ldr w0, [x25] ++ cmn w0, #1 ++ beq .L2318 ++ ldrh w0, [x20, 8] ++ cmp w24, w0 ++ bls .L2318 ++ ldrh w2, [x20] ++ ldrh w1, [x22, 4] ++ cmp w2, w1 ++ bne .L2318 ++ ubfiz x0, x0, 2, 16 ++ ldr w1, [x25, 4] ++ str w1, [x21, x0] ++.L2318: ++ add w5, w27, 1 ++ sxth w27, w5 ++ b .L2313 ++.L2312: ++ mov w0, 0 ++.L2314: ++ ldrh w1, [x26, 2546] ++ sub w1, w1, #1 ++ cmp w0, w1 ++ blt .L2316 ++.L2320: ++ add w19, w19, 1 ++ sxth w19, w19 ++ b .L2303 ++.L2316: ++ ldr x2, [x28, 3608] ++ sbfiz x5, x0, 3, 32 ++ ldrh w1, [x2, x5] ++ cmp w24, w1 ++ bls .L2315 ++ add x2, x2, x5 ++ ubfiz x1, x1, 2, 16 ++ ldr w2, [x2, 4] ++ str w2, [x21, x1] ++.L2315: ++ add w0, w0, 1 ++ sxth w0, w0 ++ b .L2314 ++ .size FtlMapTblRecovery, .-FtlMapTblRecovery ++ .align 2 ++ .global FtlLoadVonderInfo ++ .type FtlLoadVonderInfo, %function ++FtlLoadVonderInfo: ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x0, x0, 1776 ++ add x29, sp, 0 ++ ldrh w2, [x1, 2564] ++ strh w2, [x0, 10] ++ mov w2, -3962 ++ strh w2, [x0, 4] ++ ldrh w2, [x1, 2590] ++ strh w2, [x0, 8] ++ ldrh w2, [x1, 2566] ++ ldr x1, [x1, 2592] ++ str x1, [x0, 16] ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ strh w2, [x0, 6] ++ ldr x2, [x1, 3736] ++ str x2, [x0, 24] ++ ldr x2, [x1, 3728] ++ ldr x1, [x1, 3744] ++ stp x2, x1, [x0, 32] ++ bl FtlMapTblRecovery ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FtlLoadVonderInfo, .-FtlLoadVonderInfo ++ .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, 3792 ++ bl FtlMapTblRecovery ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FtlLoadMapInfo, .-FtlLoadMapInfo ++ .align 2 ++ .global FtlVendorPartWrite ++ .type FtlVendorPartWrite, %function ++FtlVendorPartWrite: ++ stp x29, x30, [sp, -176]! ++ add x29, sp, 0 ++ stp x27, x28, [sp, 80] ++ mov w28, w0 ++ stp x23, x24, [sp, 48] ++ mov x27, x2 ++ adrp x23, .LANCHOR0 ++ add w2, w0, w1 ++ add x0, x23, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x19, x20, [sp, 16] ++ mov w21, w1 ++ stp x25, x26, [sp, 64] ++ ldrh w1, [x0, 2540] ++ cmp w2, w1 ++ bhi .L2356 ++ ldrh w22, [x0, 2552] ++ adrp x25, .LANCHOR2 ++ add x25, x25, :lo12:.LANCHOR2 ++ mov w24, 0 ++ mov x26, x25 ++ lsr w22, w28, w22 ++.L2350: ++ cbnz w21, .L2355 ++.L2348: ++ 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], 176 ++ ret ++.L2355: ++ ldr x0, [x25, 3744] ++ ldr w2, [x0, w22, uxtw 2] ++ add x0, x23, :lo12:.LANCHOR0 ++ ldrh w1, [x0, 2550] ++ and w0, w21, 65535 ++ udiv w20, w28, w1 ++ msub w20, w20, w1, w28 ++ sub w19, w1, w20 ++ and w19, w19, 65535 ++ cmp w21, w19 ++ csel w19, w0, w19, cc ++ cbz w2, .L2352 ++ cmp w19, w1 ++ beq .L2352 ++ ldr x0, [x26, 3624] ++ str w2, [x29, 124] ++ mov w2, 1 ++ stp x0, xzr, [x29, 128] ++ mov w1, w2 ++ add x0, x29, 120 ++ bl FlashReadPages ++.L2353: ++ lsl w3, w19, 9 ++ ldr x0, [x26, 3624] ++ lsl w20, w20, 9 ++ mov w2, w3 ++ asr w20, w20, 2 ++ mov x1, x27 ++ str w3, [x29, 108] ++ add x0, x0, w20, sxtw 2 ++ bl ftl_memcpy ++ sub w21, w21, w19 ++ ldr x2, [x26, 3624] ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ mov w1, w22 ++ add x0, x0, 1776 ++ add w28, w28, w19 ++ add w22, w22, 1 ++ bl FtlMapWritePage ++ cmn w0, #1 ++ ldr w3, [x29, 108] ++ csinv w24, w24, wzr, ne ++ add x27, x27, w3, sxtw ++ b .L2350 ++.L2352: ++ add x0, x23, :lo12:.LANCHOR0 ++ mov w1, 0 ++ ldrh w2, [x0, 2554] ++ ldr x0, [x26, 3624] ++ bl ftl_memset ++ b .L2353 ++.L2356: ++ mov w24, -1 ++ b .L2348 ++ .size FtlVendorPartWrite, .-FtlVendorPartWrite ++ .align 2 ++ .global Ftl_save_ext_data ++ .type Ftl_save_ext_data, %function ++Ftl_save_ext_data: ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ mov w1, 19539 ++ movk w1, 0x4654, lsl 16 ++ ldr w3, [x0, 848] ++ cmp w3, w1 ++ bne .L2364 ++ stp x29, x30, [sp, -16]! ++ add x2, x0, 848 ++ mov w1, 99 ++ add x29, sp, 0 ++ movk w1, 0x5000, lsl 16 ++ str w1, [x2, 4] ++ ldr w1, [x0, 744] ++ str w1, [x2, 88] ++ ldr w1, [x0, 748] ++ str w1, [x2, 92] ++ ldr w1, [x0, 740] ++ str w1, [x2, 8] ++ ldr w1, [x0, 728] ++ str w1, [x2, 12] ++ ldr w1, [x0, 720] ++ str w1, [x2, 16] ++ ldr w1, [x0, 736] ++ str w1, [x2, 20] ++ ldr w1, [x0, 764] ++ str w1, [x2, 28] ++ ldr w1, [x0, 448] ++ str w1, [x2, 32] ++ ldr w1, [x0, 724] ++ str w1, [x2, 36] ++ ldr w1, [x0, 732] ++ str w1, [x2, 40] ++ ldr w1, [x0, 772] ++ str w1, [x2, 44] ++ ldr w1, [x0, 776] ++ str w1, [x2, 48] ++ ldr w1, [x0, 1360] ++ ldr w0, [x0, 3556] ++ stp w1, w0, [x2, 60] ++ mov w1, 1 ++ mov w0, 0 ++ bl FtlVendorPartWrite ++ ldp x29, x30, [sp], 16 ++ ret ++.L2364: ++ ret ++ .size Ftl_save_ext_data, .-Ftl_save_ext_data ++ .align 2 ++ .global FtlEctTblFlush ++ .type FtlEctTblFlush, %function ++FtlEctTblFlush: ++ adrp x1, .LANCHOR0+2372 ++ ldr w2, [x1, #:lo12:.LANCHOR0+2372] ++ adrp x1, .LANCHOR2 ++ cbz w2, .L2372 ++ add x2, x1, :lo12:.LANCHOR2 ++ mov w3, 4 ++ ldr w2, [x2, 776] ++ cmp w2, 39 ++ mov w2, 32 ++ csel w2, w2, w3, hi ++.L2368: ++ adrp x3, .LANCHOR4 ++ add x3, x3, :lo12:.LANCHOR4 ++ ldrh w4, [x3, 1840] ++ cmp w4, 31 ++ bhi .L2369 ++ add w4, w4, 1 ++ mov w2, 1 ++ strh w4, [x3, 1840] ++.L2369: ++ cbnz w0, .L2370 ++ add x0, x1, :lo12:.LANCHOR2 ++ ldr x0, [x0, 3696] ++ ldr w3, [x0, 20] ++ ldr w0, [x0, 16] ++ add w2, w2, w3 ++ cmp w0, w2 ++ bcc .L2375 ++.L2370: ++ add x0, x1, :lo12:.LANCHOR2 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ ldr x1, [x0, 3696] ++ ldr w2, [x1, 16] ++ str w2, [x1, 20] ++ mov w2, 17221 ++ movk w2, 0x4254, lsl 16 ++ str w2, [x1] ++ ldr x2, [x0, 3696] ++ ldrh w1, [x0, 3680] ++ lsl w3, w1, 9 ++ str wzr, [x2, 4] ++ str w3, [x2, 12] ++ ldr w3, [x2, 8] ++ add w3, w3, 1 ++ str w3, [x2, 8] ++ ldr x2, [x0, 3696] ++ mov w0, 64 ++ bl FtlVendorPartWrite ++ bl Ftl_save_ext_data ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L2372: ++ mov w2, 32 ++ b .L2368 ++.L2375: ++ mov w0, 0 ++ ret ++ .size FtlEctTblFlush, .-FtlEctTblFlush ++ .align 2 ++ .global FtlVendorPartRead ++ .type FtlVendorPartRead, %function ++FtlVendorPartRead: ++ stp x29, x30, [sp, -176]! ++ add w3, w0, w1 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov w22, w1 ++ stp x23, x24, [sp, 48] ++ adrp x1, .LANCHOR0 ++ mov w23, w0 ++ add x0, x1, :lo12:.LANCHOR0 ++ stp x25, x26, [sp, 64] ++ mov x25, x2 ++ stp x19, x20, [sp, 16] ++ stp x27, x28, [sp, 80] ++ str x1, [x29, 104] ++ ldrh w2, [x0, 2540] ++ cmp w3, w2 ++ bhi .L2386 ++ ldrh w21, [x0, 2552] ++ adrp x26, .LANCHOR2 ++ add x26, x26, :lo12:.LANCHOR2 ++ mov w24, 0 ++ mov x27, x26 ++ lsr w21, w23, w21 ++.L2379: ++ cbnz w22, .L2385 ++.L2377: ++ 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], 176 ++ ret ++.L2385: ++ ldr x0, [x26, 3744] ++ ldr w4, [x0, w21, uxtw 2] ++ ldr x0, [x29, 104] ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrh w19, [x0, 2550] ++ and w0, w22, 65535 ++ udiv w20, w23, w19 ++ msub w20, w20, w19, w23 ++ sub w19, w19, w20 ++ and w19, w19, 65535 ++ cmp w22, w19 ++ csel w19, w0, w19, cc ++ lsl w28, w19, 9 ++ cbz w4, .L2381 ++ ldr x0, [x27, 3624] ++ mov w2, 1 ++ str w4, [x29, 96] ++ mov w1, w2 ++ str w4, [x29, 124] ++ stp x0, xzr, [x29, 128] ++ add x0, x29, 120 ++ bl FlashReadPages ++ adrp x3, .LANCHOR4 ++ add x3, x3, :lo12:.LANCHOR4 ++ ldr w0, [x29, 120] ++ ldr w4, [x29, 96] ++ cmn w0, #1 ++ ldr w0, [x3, 1712] ++ csinv w24, w24, wzr, ne ++ cmp w0, 256 ++ bne .L2383 ++ mov w2, w4 ++ mov w1, w21 ++ str x3, [x29, 96] ++ adrp x0, .LC135 ++ add x0, x0, :lo12:.LC135 ++ bl printk ++ ldr x3, [x29, 96] ++ mov w1, w21 ++ ldr x2, [x27, 3624] ++ add x0, x3, 1776 ++ bl FtlMapWritePage ++.L2383: ++ ldr x1, [x27, 3624] ++ lsl w20, w20, 9 ++ asr w20, w20, 2 ++ mov w2, w28 ++ mov x0, x25 ++ add x1, x1, w20, sxtw 2 ++ bl ftl_memcpy ++.L2384: ++ add w21, w21, 1 ++ sub w22, w22, w19 ++ add w23, w23, w19 ++ add x25, x25, w28, sxtw ++ b .L2379 ++.L2381: ++ mov w2, w28 ++ mov w1, 0 ++ mov x0, x25 ++ bl ftl_memset ++ b .L2384 ++.L2386: ++ mov w24, -1 ++ b .L2377 ++ .size FtlVendorPartRead, .-FtlVendorPartRead ++ .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, 3680] ++ ldr x2, [x19, 3696] ++ bl FtlVendorPartRead ++ ldr x0, [x19, 3696] ++ ldr w1, [x0] ++ mov w0, 17221 ++ movk w0, 0x4254, lsl 16 ++ cmp w1, w0 ++ beq .L2389 ++ adrp x1, .LC136 ++ adrp x0, .LC76 ++ add x1, x1, :lo12:.LC136 ++ add x0, x0, :lo12:.LC76 ++ bl printk ++ ldr x0, [x19, 3696] ++ mov w1, 0 ++ ldrh w2, [x19, 3680] ++ lsl w2, w2, 9 ++ bl ftl_memset ++.L2389: ++ mov w0, 0 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FtlLoadEctTbl, .-FtlLoadEctTbl ++ .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 ++ add x20, x19, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ add x22, x20, 848 ++ mov w21, 19539 ++ mov x2, x22 ++ bl FtlVendorPartRead ++ ldr w0, [x20, 848] ++ movk w21, 0x4654, lsl 16 ++ cmp w0, w21 ++ beq .L2392 ++ mov w2, 512 ++ mov w1, 0 ++ mov x0, x22 ++ bl ftl_memset ++ str w21, [x20, 848] ++.L2392: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w2, 19539 ++ movk w2, 0x4654, lsl 16 ++ ldr w3, [x0, 848] ++ cmp w3, w2 ++ bne .L2393 ++ ldr w2, [x0, 936] ++ str w2, [x0, 744] ++ ldr w2, [x0, 940] ++ str w2, [x0, 748] ++ ldr w2, [x0, 856] ++ str w2, [x0, 740] ++ ldr w2, [x0, 860] ++ str w2, [x0, 728] ++ ldr w2, [x0, 864] ++ str w2, [x0, 720] ++ ldr w2, [x0, 868] ++ str w2, [x0, 736] ++ ldr w2, [x0, 876] ++ str w2, [x0, 764] ++ ldr w2, [x0, 880] ++ str w2, [x0, 448] ++ ldr w2, [x0, 884] ++ str w2, [x0, 724] ++ ldr w2, [x0, 888] ++ str w2, [x0, 732] ++ ldr w2, [x0, 892] ++ ldr w1, [x0, 908] ++ str w2, [x0, 772] ++ ldr w2, [x0, 896] ++ str w1, [x0, 1360] ++ str w2, [x0, 776] ++.L2393: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, 34661 ++ movk w1, 0x1234, lsl 16 ++ adrp x20, .LANCHOR0 ++ add x0, x0, 848 ++ ldr w2, [x0, 68] ++ str wzr, [x0, 2708] ++ cmp w2, w1 ++ bne .L2394 ++ add x1, x20, :lo12:.LANCHOR0 ++ ldrb w2, [x1, 204] ++ cbz w2, .L2395 ++ str wzr, [x0, 68] ++ bl Ftl_save_ext_data ++.L2394: ++ add x19, x19, :lo12:.LANCHOR2 ++ add x20, x20, :lo12:.LANCHOR0 ++ ldp x21, x22, [sp, 32] ++ ldr w1, [x19, 764] ++ ldrh w0, [x20, 2536] ++ ldr w2, [x19, 760] ++ madd w0, w0, w2, w1 ++ ldrh w1, [x20, 2480] ++ udiv w0, w0, w1 ++ str w0, [x19, 768] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2395: ++ mov w0, 1 ++ str w0, [x1, 2372] ++ adrp x1, .LC137 ++ adrp x0, .LC76 ++ add x1, x1, :lo12:.LC137 ++ add x0, x0, :lo12:.LC76 ++ bl printk ++ b .L2394 ++ .size Ftl_load_ext_data, .-Ftl_load_ext_data ++ .align 2 ++ .global FtlMapBlkWriteDumpData ++ .type FtlMapBlkWriteDumpData, %function ++FtlMapBlkWriteDumpData: ++ ldr w1, [x0, 56] ++ cbz w1, .L2404 ++ stp x29, x30, [sp, -48]! ++ adrp x2, .LANCHOR2 ++ add x2, x2, :lo12:.LANCHOR2 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ str x21, [sp, 32] ++ str wzr, [x0, 56] ++ ldr w1, [x2, 424] ++ ldrh w19, [x0, 6] ++ ldr x4, [x0, 40] ++ cbnz w1, .L2397 ++ adrp x1, .LANCHOR4 ++ add x3, x1, :lo12:.LANCHOR4 ++ sub w19, w19, #1 ++ mov x21, x0 ++ and w19, w19, 65535 ++ ldr x0, [x2, 3616] ++ ldr x2, [x2, 3656] ++ mov x20, x1 ++ str x2, [x3, 1728] ++ ubfiz x2, x19, 2, 16 ++ str x0, [x3, 1720] ++ add x3, x3, 1712 ++ ldr w2, [x4, x2] ++ str w2, [x3, 4] ++ cbz w2, .L2401 ++ mov w2, 1 ++ mov x0, x3 ++ mov w1, w2 ++ bl FlashReadPages ++.L2402: ++ add x1, x20, :lo12:.LANCHOR4 ++ mov x0, x21 ++ ldr x2, [x1, 1720] ++ mov w1, w19 ++ bl FtlMapWritePage ++.L2397: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2401: ++ adrp x1, .LANCHOR0+2554 ++ ldrh w2, [x1, #:lo12:.LANCHOR0+2554] ++ mov w1, 255 ++ bl ftl_memset ++ b .L2402 ++.L2404: ++ ret ++ .size FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData ++ .align 2 ++ .type FlashReadFacBbtData.part.17, %function ++FlashReadFacBbtData.part.17: ++ stp x29, x30, [sp, -32]! ++ adrp x3, .LANCHOR4 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ mov x19, x0 ++ cbnz w1, .L2408 ++ add x5, x3, :lo12:.LANCHOR4 ++ mov w0, 0 ++ mov w7, 1 ++.L2409: ++ ldr w1, [x5, 1644] ++ cmp w0, w1 ++ bcc .L2410 ++.L2408: ++ add x3, x3, :lo12:.LANCHOR4 ++ mov x0, x19 ++ ldr x1, [x3, 1608] ++ bl ftl_memcpy ++ mov w3, 4 ++ mov x1, x19 ++ mov w2, w3 ++ adrp x0, .LC138 ++ add x0, x0, :lo12:.LC138 ++ bl rknand_print_hex ++ mov w0, 0 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2410: ++ ubfx x1, x0, 5, 11 ++ ldr x6, [x5, 1608] ++ lsl x1, x1, 2 ++ lsl w8, w7, w0 ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ ldr w4, [x6, x1] ++ orr w4, w4, w8 ++ str w4, [x6, x1] ++ b .L2409 ++ .size FlashReadFacBbtData.part.17, .-FlashReadFacBbtData.part.17 ++ .align 2 ++ .global FlashReadFacBbtData ++ .type FlashReadFacBbtData, %function ++FlashReadFacBbtData: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w23, w1 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ add x1, x1, 176 ++ stp x21, x22, [sp, 32] ++ mov x22, x0 ++ stp x25, x26, [sp, 64] ++ mov w25, w2 ++ mov w26, 61664 ++ ldrh w0, [x1, 14] ++ ldrh w1, [x1, 12] ++ mul w0, w0, w1 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ and w0, w0, 65535 ++ mov x21, x1 ++ sub w20, w0, #1 ++ sub w19, w0, #16 ++ ldr x2, [x1, 1608] ++ and w20, w20, 65535 ++ mul w24, w0, w23 ++ str x2, [x29, 96] ++ ldr x2, [x1, 1664] ++ str x2, [x29, 104] ++.L2414: ++ cmp w20, w19 ++ bgt .L2417 ++ mov w0, -1 ++ b .L2413 ++.L2417: ++ add w0, w20, w24 ++ mov w2, 1 ++ lsl w0, w0, 10 ++ mov w1, w2 ++ str w0, [x29, 92] ++ add x0, x29, 88 ++ bl FlashReadPages ++ ldr w0, [x29, 88] ++ cmn w0, #1 ++ beq .L2415 ++ ldr x0, [x21, 1664] ++ ldrh w0, [x0] ++ cmp w0, w26 ++ bne .L2415 ++ cbz x22, .L2418 ++ mov w2, w25 ++ mov w1, w23 ++ mov x0, x22 ++ bl FlashReadFacBbtData.part.17 ++.L2413: ++ 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 ++.L2415: ++ sub w20, w20, #1 ++ and w20, w20, 65535 ++ b .L2414 ++.L2418: ++ mov w0, 0 ++ b .L2413 ++ .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+88 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR4 ++ add x20, x20, :lo12:.LANCHOR4 ++ ldr x0, [x0, #:lo12:.LANCHOR0+88] ++ ldrb w2, [x0, 13] ++ ldrh w19, [x0, 14] ++ ldr x0, [x20, 1656] ++ mul w19, w19, w2 ++ and w19, w19, 65535 ++ add w2, w19, 7 ++ lsr w2, w2, 3 ++ bl FlashReadFacBbtData ++ cmn w0, #1 ++ bne .L2424 ++.L2428: ++ mov w0, 0 ++.L2425: ++ ubfiz x0, x0, 1, 16 ++ mov w1, -1 ++ strh w1, [x21, x0] ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2424: ++ lsr w4, w19, 4 ++ sub w19, w19, #1 ++ mov w1, 0 ++ mov w0, 0 ++ mov w5, 1 ++.L2426: ++ cmp w1, w19 ++ bge .L2425 ++ ldr x6, [x20, 1656] ++ ubfx x3, x1, 5, 11 ++ lsl w2, w5, w1 ++ ldr w3, [x6, x3, lsl 2] ++ tst w2, w3 ++ beq .L2427 ++ add w2, w0, 1 ++ ubfiz x0, x0, 1, 16 ++ strh w1, [x21, x0] ++ and w0, w2, 65535 ++.L2427: ++ cmp w0, w4 ++ bcs .L2428 ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L2426 ++ .size FlashGetBadBlockList, .-FlashGetBadBlockList ++ .align 2 ++ .global FtlMakeBbt ++ .type FtlMakeBbt, %function ++FtlMakeBbt: ++ stp x29, x30, [sp, -112]! ++ adrp x0, .LANCHOR2 ++ add x1, x0, :lo12:.LANCHOR2 ++ 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] ++ str x0, [x29, 104] ++ ldr w23, [x1, 424] ++ cbnz w23, .L2435 ++ bl FtlBbtMemInit ++ adrp x20, .LANCHOR0 ++ bl FtlLoadFactoryBbt ++ add x22, x20, :lo12:.LANCHOR0 ++ adrp x0, .LANCHOR4 ++ add x24, x0, :lo12:.LANCHOR4 ++ add x26, x22, 2656 ++ add x24, x24, 1712 ++ add x22, x22, 2636 ++.L2436: ++ add x19, x20, :lo12:.LANCHOR0 ++ ldrh w0, [x19, 2494] ++ cmp w23, w0 ++ bcc .L2442 ++ mov w21, 0 ++.L2443: ++ ldrh w0, [x19, 2558] ++ cmp w0, w21 ++ bhi .L2444 ++ add x19, x19, 2624 ++ ldrh w21, [x19, 12] ++ mov w22, 65535 ++ sub w21, w21, #1 ++ and w21, w21, 65535 ++.L2445: ++ ldrh w0, [x19, 12] ++ sub w0, w0, #48 ++ cmp w21, w0 ++ ble .L2449 ++ mov w0, w21 ++ bl FtlBbmIsBadBlock ++ cmp w0, 1 ++ beq .L2446 ++ mov w0, w21 ++ bl FlashTestBlk ++ cbz w0, .L2447 ++ mov w0, w21 ++ bl FtlBbmMapBadBlock ++.L2446: ++ sub w21, w21, #1 ++ and w21, w21, 65535 ++ b .L2445 ++.L2442: ++ ldr x0, [x29, 104] ++ adrp x1, .LANCHOR4 ++ add x21, x1, :lo12:.LANCHOR4 ++ ldrh w1, [x22] ++ add x25, x0, :lo12:.LANCHOR2 ++ add x21, x21, 1712 ++ mov w2, 65535 ++ cmp w1, w2 ++ ldr x0, [x25, 3608] ++ ldr x27, [x25, 3656] ++ stp x0, x27, [x21, 8] ++ beq .L2437 ++ ldrh w4, [x19, 2542] ++ mov w2, 1 ++ madd w28, w4, w23, w1 ++ mov w1, w2 ++ lsl w0, w28, 10 ++ str w0, [x21, 4] ++ mov x0, x21 ++ bl FlashReadPages ++ ldr x1, [x21, 8] ++ ldr x0, [x26] ++ ldrh w2, [x19, 2542] ++ add w2, w2, 7 ++ lsr w2, w2, 3 ++ bl ftl_memcpy ++.L2438: ++ mov w0, w28 ++ add w23, w23, 1 ++ bl FtlBbmMapBadBlock ++ add x26, x26, 8 ++ add x22, x22, 2 ++ b .L2436 ++.L2437: ++ mov w1, w23 ++ bl FlashGetBadBlockList ++ ldr x0, [x21, 8] ++ ldr x1, [x26] ++ bl FtlBbt2Bitmap ++ ldrh w21, [x19, 2542] ++.L2440: ++ sub w21, w21, #1 ++ and w21, w21, 65535 ++.L2439: ++ ldrh w0, [x19, 2542] ++ madd w0, w23, w0, w21 ++ bl FtlBbmIsBadBlock ++ cmp w0, 1 ++ beq .L2440 ++ ldr x0, [x25, 3656] ++ mov w2, 16 ++ strh w21, [x22] ++ mov w1, 0 ++ bl ftl_memset ++ str wzr, [x27, 4] ++ mov w0, -3872 ++ strh w0, [x27] ++ ldrh w0, [x22] ++ strh w0, [x27, 2] ++ ldrh w4, [x19, 2542] ++ ldrh w0, [x22] ++ ldr x1, [x26] ++ ldrh w2, [x25, 3784] ++ madd w28, w4, w23, w0 ++ lsl w2, w2, 2 ++ lsl w0, w28, 10 ++ str w0, [x24, 4] ++ ldr x0, [x24, 8] ++ bl ftl_memcpy ++ mov w2, 1 ++ mov x0, x24 ++ mov w1, w2 ++ bl FlashEraseBlocks ++ mov w3, 1 ++ mov x0, x24 ++ mov w2, w3 ++ mov w1, w3 ++ bl FlashProgPages ++ ldr w0, [x24] ++ cmn w0, #1 ++ bne .L2438 ++ mov w0, w28 ++ bl FtlBbmMapBadBlock ++ b .L2439 ++.L2444: ++ mov w0, w21 ++ add w21, w21, 1 ++ bl FtlBbmMapBadBlock ++ and w21, w21, 65535 ++ b .L2443 ++.L2447: ++ ldrh w0, [x19] ++ cmp w0, w22 ++ bne .L2448 ++ strh w21, [x19] ++ b .L2446 ++.L2448: ++ strh w21, [x19, 4] ++.L2449: ++ ldr x0, [x29, 104] ++ add x20, x20, :lo12:.LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldrh w1, [x20, 2624] ++ str wzr, [x20, 2632] ++ ldr x2, [x0, 432] ++ lsl w1, w1, 10 ++ strh wzr, [x20, 2626] ++ str w1, [x2, 4] ++ mov w2, 2 ++ ldr x0, [x0, 432] ++ ldrh w1, [x20, 2628] ++ lsl w1, w1, 10 ++ str w1, [x0, 60] ++ mov w1, 1 ++ bl FlashEraseBlocks ++ ldrh w0, [x20, 2624] ++ bl FtlBbmMapBadBlock ++ ldrh w0, [x20, 2628] ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ strh wzr, [x20, 2626] ++ ldr w0, [x20, 2632] ++ ldrh w1, [x20, 2628] ++ add w0, w0, 1 ++ str w0, [x20, 2632] ++ ldrh w0, [x20, 2624] ++ strh w0, [x20, 2628] ++ strh w1, [x20, 2624] ++ bl FtlBbmTblFlush ++.L2435: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 FtlMakeBbt, .-FtlMakeBbt ++ .align 2 ++ .global log2phys ++ .type log2phys, %function ++log2phys: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ add x3, x22, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr w4, [x3, 2616] ++ cmp w0, w4 ++ bcs .L2456 ++ ldrh w27, [x3, 2552] ++ mov w25, w0 ++ adrp x20, .LANCHOR2 ++ str x1, [x29, 120] ++ add w27, w27, 7 ++ ldrh w1, [x3, 2582] ++ str w2, [x29, 116] ++ lsr w24, w0, w27 ++ add x0, x20, :lo12:.LANCHOR2 ++ and w23, w24, 65535 ++ ldr x8, [x0, 704] ++ mov x0, 0 ++.L2457: ++ and x19, x0, 65535 ++ cmp w19, w1 ++ bcc .L2462 ++ bl select_l2p_ram_region ++ and x19, x0, 65535 ++ ubfiz x21, x19, 4, 16 ++ mov w2, 65535 ++ add x1, x8, x21 ++ ldrh w3, [x8, x21] ++ cmp w3, w2 ++ beq .L2463 ++ ldr w1, [x1, 4] ++ tbz w1, #31, .L2463 ++ bl flush_l2p_region ++.L2463: ++ add x28, x20, :lo12:.LANCHOR2 ++ ubfiz x0, x23, 2, 16 ++ ldr x1, [x28, 3752] ++ ldr w3, [x1, x0] ++ cbnz w3, .L2464 ++ ldr x0, [x28, 704] ++ add x22, x22, :lo12:.LANCHOR0 ++ mov w1, 255 ++ add x0, x0, x21 ++ ldrh w2, [x22, 2554] ++ ldr x0, [x0, 8] ++ bl ftl_memset ++ ldr x0, [x28, 704] ++ strh w23, [x0, x21] ++ ldr x0, [x28, 704] ++ add x21, x0, x21 ++ str wzr, [x21, 4] ++ b .L2459 ++.L2456: ++ mov w0, -1 ++ cbnz w2, .L2455 ++ str w0, [x1] ++.L2455: ++ 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 ++.L2462: ++ add x0, x0, 1 ++ add x2, x8, x0, lsl 4 ++ ldrh w2, [x2, -16] ++ cmp w2, w23 ++ bne .L2457 ++.L2459: ++ mov x0, 1 ++ lsl x27, x0, x27 ++ ldr w0, [x29, 116] ++ sub w27, w27, #1 ++ and w25, w27, w25 ++ and x25, x25, 65535 ++ cbnz w0, .L2460 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr x1, [x29, 120] ++ ldr x0, [x0, 704] ++ add x0, x0, x19, lsl 4 ++ ldr x0, [x0, 8] ++ ldr w0, [x0, x25, lsl 2] ++ str w0, [x1] ++.L2461: ++ add x20, x20, :lo12:.LANCHOR2 ++ ldr x0, [x20, 704] ++ add x19, x0, x19, lsl 4 ++ ldr w0, [x19, 4] ++ cmn w0, #1 ++ beq .L2468 ++ add w0, w0, 1 ++ str w0, [x19, 4] ++.L2468: ++ mov w0, 0 ++ b .L2455 ++.L2460: ++ add x2, x20, :lo12:.LANCHOR2 ++ ldr x1, [x29, 120] ++ lsl x0, x19, 4 ++ ldr x3, [x2, 704] ++ ldr w4, [x1] ++ mov x1, x0 ++ add x0, x3, x0 ++ ldr x0, [x0, 8] ++ str w4, [x0, x25, lsl 2] ++ strh w23, [x2, 712] ++ ldr x0, [x2, 704] ++ add x0, x0, x1 ++ ldr w1, [x0, 4] ++ orr w1, w1, -2147483648 ++ str w1, [x0, 4] ++ b .L2461 ++.L2464: ++ ldr x0, [x28, 704] ++ adrp x6, .LANCHOR4 ++ add x6, x6, :lo12:.LANCHOR4 ++ mov w2, 1 ++ add x0, x0, x21 ++ add x26, x6, 1712 ++ str x6, [x29, 104] ++ mov w1, w2 ++ str w3, [x6, 1716] ++ ldr x0, [x0, 8] ++ str x0, [x6, 1720] ++ ldr x0, [x28, 3656] ++ str x0, [x6, 1728] ++ mov x0, x26 ++ str w3, [x29, 112] ++ bl FlashReadPages ++ ldr x0, [x26, 16] ++ ldr w3, [x29, 112] ++ ldr x6, [x29, 104] ++ ldrh w0, [x0, 8] ++ cmp w0, w23 ++ beq .L2465 ++ mov w2, w3 ++ and w1, w24, 65535 ++ adrp x0, .LC139 ++ add x0, x0, :lo12:.LC139 ++ bl printk ++ add x22, x22, :lo12:.LANCHOR0 ++ ldr x1, [x26, 16] ++ mov w3, 4 ++ adrp x0, .LC100 ++ mov w2, w3 ++ add x0, x0, :lo12:.LC100 ++ bl rknand_print_hex ++ ldrh w3, [x22, 2580] ++ mov w2, 4 ++ ldr x1, [x28, 3752] ++ adrp x0, .LC140 ++ add x0, x0, :lo12:.LC140 ++ bl rknand_print_hex ++ mov w0, 1 ++ str w0, [x28, 424] ++.L2466: ++ add x1, x20, :lo12:.LANCHOR2 ++ ldr x0, [x1, 704] ++ add x0, x0, x21 ++ str wzr, [x0, 4] ++ ldr x0, [x1, 704] ++ strh w23, [x0, x21] ++ b .L2459 ++.L2465: ++ ldr w0, [x6, 1712] ++ cmp w0, 256 ++ bne .L2466 ++ and w24, w24, 65535 ++ mov w2, w3 ++ mov w1, w24 ++ adrp x0, .LC141 ++ add x0, x0, :lo12:.LC141 ++ bl printk ++ ldr x0, [x28, 704] ++ mov w1, w24 ++ add x0, x0, x21 ++ ldr x2, [x0, 8] ++ add x0, x28, 3792 ++ bl FtlMapWritePage ++ b .L2466 ++ .size log2phys, .-log2phys ++ .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 ++ stp x23, x24, [sp, 48] ++ add x23, x19, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ str x25, [sp, 64] ++ ldr w0, [x23, 424] ++ cbnz w0, .L2471 ++ ldrh w2, [x23, 564] ++ cbz w2, .L2473 ++ ldrb w1, [x23, 568] ++ cbnz w1, .L2473 ++ adrp x21, .LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR0 ++ ldrb w1, [x23, 567] ++ ldrh w3, [x21, 2544] ++ mul w1, w1, w3 ++ cmp w2, w1 ++ beq .L2473 ++ ldrb w0, [x23, 570] ++ cbnz w0, .L2471 ++ ldr w22, [x21, 2616] ++ add x1, x29, 84 ++ ldrh w24, [x21, 2472] ++ mov w2, 0 ++ sub w22, w22, #1 ++ mov w0, w22 ++ bl log2phys ++ ldr x20, [x23, 3656] ++ ldr w0, [x29, 84] ++ ldr x1, [x23, 3608] ++ str w0, [x29, 92] ++ cmn w0, #1 ++ stp x1, x20, [x29, 96] ++ str w22, [x29, 112] ++ str wzr, [x20, 4] ++ beq .L2475 ++ mov w2, 0 ++ mov w1, 1 ++ add x0, x29, 88 ++ bl FlashReadPages ++.L2476: ++ add x25, x19, :lo12:.LANCHOR2 ++ lsl w24, w24, 2 ++ add x21, x25, 560 ++ mov w0, -3947 ++ mov w23, 0 ++ strh w0, [x20] ++.L2477: ++ cmp w24, w23 ++ bne .L2481 ++.L2478: ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w0, 1 ++ strb w0, [x19, 570] ++.L2471: ++ 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 ++.L2475: ++ ldrh w2, [x21, 2554] ++ mov w1, 255 ++ ldr x0, [x23, 3608] ++ bl ftl_memset ++ b .L2476 ++.L2481: ++ ldrh w0, [x21, 4] ++ cbz w0, .L2478 ++ ldr w0, [x29, 92] ++ add w23, w23, 1 ++ stp w22, w0, [x20, 8] ++ ldrh w0, [x21] ++ strh w0, [x20, 2] ++ mov x0, x21 ++ bl get_new_active_ppa ++ str w0, [x29, 92] ++ ldr w0, [x25, 756] ++ mov w3, 0 ++ str w0, [x20, 4] ++ mov w2, 0 ++ add w0, w0, 1 ++ mov w1, 1 ++ cmn w0, #1 ++ csel w0, w0, wzr, ne ++ str w0, [x25, 756] ++ add x0, x29, 88 ++ bl FlashProgPages ++ ldrh w0, [x21] ++ bl decrement_vpc_count ++ b .L2477 ++.L2473: ++ add x19, x19, :lo12:.LANCHOR2 ++ strb wzr, [x19, 570] ++ b .L2471 ++ .size FtlWriteDumpData, .-FtlWriteDumpData ++ .align 2 ++ .global l2p_flush ++ .type l2p_flush, %function ++l2p_flush: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ str x21, [sp, 32] ++ add x20, x20, :lo12:.LANCHOR0 ++ adrp x21, .LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w19, 0 ++ bl FtlWriteDumpData ++.L2490: ++ ldrh w0, [x20, 2582] ++ cmp w0, w19 ++ bhi .L2492 ++ mov w0, 0 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2492: ++ ldr x1, [x21, 704] ++ ubfiz x0, x19, 4, 16 ++ add x0, x1, x0 ++ ldr w0, [x0, 4] ++ tbz w0, #31, .L2491 ++ mov w0, w19 ++ bl flush_l2p_region ++.L2491: ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L2490 ++ .size l2p_flush, .-l2p_flush ++ .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 ++ str x21, [sp, 32] ++ ldr w1, [x2, 424] ++ cbnz w1, .L2495 ++ ldrh w20, [x0] ++ mov x21, x0 ++ mov w0, 65535 ++ cmp w20, w0 ++ beq .L2496 ++ ldr x0, [x2, 520] ++ ubfiz x1, x20, 1, 16 ++ ldrh w0, [x0, x1] ++ cbz w0, .L2497 ++ mov w0, w20 ++ bl INSERT_DATA_LIST ++.L2496: ++ add x2, x19, :lo12:.LANCHOR2 ++ strb wzr, [x21, 8] ++ add x0, x2, 608 ++ cmp x21, x0 ++ beq .L2498 ++ adrp x1, .LANCHOR0 ++ add x4, x1, :lo12:.LANCHOR0 ++ ldrh w3, [x4, 2492] ++ cmp w3, 1 ++ beq .L2498 ++ ldrb w0, [x4, 204] ++ cbz w0, .L2499 ++.L2498: ++ mov w0, 1 ++ strb w0, [x21, 8] ++.L2500: ++ add x2, x19, :lo12:.LANCHOR2 ++ mov w1, 65535 ++ ldrh w0, [x2, 3872] ++ cmp w0, w1 ++ beq .L2505 ++ cmp w20, w0 ++ bne .L2506 ++ ldr x2, [x2, 520] ++ ubfiz x1, x0, 1, 16 ++ ldrh w1, [x2, x1] ++ cbz w1, .L2507 ++.L2506: ++ bl update_vpc_list ++.L2507: ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w0, -1 ++ strh w0, [x19, 3872] ++.L2505: ++ mov x0, x21 ++ bl allocate_data_superblock ++ bl l2p_flush ++ mov w0, 0 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L2495: ++ mov w0, 0 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2497: ++ mov w0, w20 ++ bl INSERT_FREE_LIST ++ b .L2496 ++.L2499: ++ add x0, x2, 560 ++ cmp x21, x0 ++ bne .L2500 ++ cmp w3, 3 ++ beq .L2502 ++ ldr w0, [x2, 1360] ++ cmp w0, 1 ++ bne .L2503 ++.L2502: ++ add x2, x19, :lo12:.LANCHOR2 ++ mov w0, 1 ++ strb w0, [x2, 568] ++.L2503: ++ add x1, x1, :lo12:.LANCHOR0 ++ ldr w0, [x1, 2372] ++ cbz w0, .L2500 ++ add x1, x19, :lo12:.LANCHOR2 ++ ldr w0, [x1, 776] ++ cmp w0, 39 ++ bhi .L2500 ++ mov w0, 1 ++ strb w0, [x1, 568] ++ b .L2500 ++ .size allocate_new_data_superblock, .-allocate_new_data_superblock ++ .align 2 ++ .global FtlCheckVpc ++ .type FtlCheckVpc, %function ++FtlCheckVpc: ++ stp x29, x30, [sp, -112]! ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC109 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ add x23, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ mov w22, 0 ++ add x1, x1, 216 ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ add x0, x0, :lo12:.LC109 ++ adrp x21, check_valid_page_count_table ++ bl printk ++ add x20, x21, :lo12:check_valid_page_count_table ++ mov x2, 8192 ++ mov w1, 0 ++ mov x0, x20 ++ bl memset ++.L2522: ++ ldr w0, [x23, 2616] ++ cmp w22, w0 ++ bcc .L2524 ++ add x22, x19, :lo12:.LANCHOR0 ++ adrp x23, .LC142 ++ adrp x19, .LANCHOR2 ++ add x26, x21, :lo12:check_valid_page_count_table ++ add x25, x19, :lo12:.LANCHOR2 ++ add x23, x23, :lo12:.LC142 ++ mov w24, 0 ++ mov w20, 0 ++.L2525: ++ ldrh w0, [x22, 2480] ++ cmp w0, w20 ++ bhi .L2527 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr x19, [x0, 544] ++ cbz x19, .L2528 ++ ldr x1, [x0, 504] ++ adrp x23, .LC143 ++ ldrh w25, [x0, 552] ++ mov x20, x0 ++ sub x19, x19, x1 ++ mov x1, -6148914691236517206 ++ asr x19, x19, 1 ++ movk x1, 0xaaab, lsl 0 ++ add x21, x21, :lo12:check_valid_page_count_table ++ add x23, x23, :lo12:.LC143 ++ mov w22, 0 ++ mov w26, 6 ++ mul x19, x19, x1 ++ and w19, w19, 65535 ++.L2529: ++ cmp w22, w25 ++ bne .L2531 ++.L2528: ++ mov w1, w24 ++ adrp x0, .LC144 ++ add x0, x0, :lo12:.LC144 ++ bl printk ++ 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 ++.L2524: ++ mov w2, 0 ++ add x1, x29, 108 ++ mov w0, w22 ++ bl log2phys ++ ldr w0, [x29, 108] ++ cmn w0, #1 ++ beq .L2523 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ and x0, x0, 65535 ++ ldrh w1, [x20, x0, lsl 1] ++ add w1, w1, 1 ++ strh w1, [x20, x0, lsl 1] ++.L2523: ++ add w22, w22, 1 ++ b .L2522 ++.L2527: ++ ldr x0, [x25, 520] ++ ubfiz x28, x20, 1, 16 ++ sxtw x27, w20 ++ ldrh w2, [x0, x28] ++ ldrh w3, [x26, x27, lsl 1] ++ cmp w2, w3 ++ beq .L2526 ++ mov w1, w20 ++ mov x0, x23 ++ bl printk ++ ldr x0, [x25, 520] ++ mov w1, 65535 ++ ldrh w0, [x0, x28] ++ cmp w0, w1 ++ beq .L2526 ++ ldrh w1, [x26, x27, lsl 1] ++ cmp w1, w0 ++ csinc w24, w24, wzr, ls ++.L2526: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L2525 ++.L2531: ++ ldr x1, [x20, 520] ++ ubfiz x0, x19, 1, 16 ++ ldrh w2, [x1, x0] ++ cbz w2, .L2530 ++ ldrh w3, [x21, w19, sxtw 1] ++ mov w24, 1 ++ mov w1, w19 ++ mov x0, x23 ++ bl printk ++.L2530: ++ ldr x0, [x20, 504] ++ umull x19, w19, w26 ++ ldrh w19, [x0, x19] ++ mov w0, 65535 ++ cmp w19, w0 ++ beq .L2528 ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ b .L2529 ++ .size FtlCheckVpc, .-FtlCheckVpc ++ .align 2 ++ .global Ftlscanalldata ++ .type Ftlscanalldata, %function ++Ftlscanalldata: ++ sub sp, sp, #96 ++ adrp x0, .LC145 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC145 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ mov w19, 0 ++ stp x21, x22, [sp, 48] ++ adrp x22, .LANCHOR4 ++ add x20, x22, :lo12:.LANCHOR4 ++ adrp x21, .LANCHOR0 ++ add x20, x20, 1712 ++ add x21, x21, :lo12:.LANCHOR0 ++ str x23, [sp, 64] ++ bl printk ++.L2543: ++ ldr w0, [x21, 2616] ++ cmp w19, w0 ++ bcc .L2549 ++ ldp x19, x20, [sp, 32] ++ ldp x21, x22, [sp, 48] ++ ldp x29, x30, [sp, 16] ++ ldr x23, [sp, 64] ++ add sp, sp, 96 ++ ret ++.L2549: ++ mov w2, 0 ++ add x1, x29, 76 ++ mov w0, w19 ++ bl log2phys ++ tst x19, 2047 ++ bne .L2544 ++ ldr w2, [x29, 76] ++ adrp x0, .LC146 ++ mov w1, w19 ++ add x0, x0, :lo12:.LC146 ++ bl printk ++.L2544: ++ ldr w0, [x29, 76] ++ cmn w0, #1 ++ beq .L2546 ++ stp wzr, w0, [x20] ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ mov w2, 0 ++ str w19, [x20, 24] ++ ldr x1, [x0, 3608] ++ ldr x23, [x0, 3656] ++ mov x0, x20 ++ stp x1, x23, [x20, 8] ++ mov w1, 1 ++ bl FlashReadPages ++ ldr w0, [x20] ++ cmp w0, 256 ++ ccmn w0, #1, 4, ne ++ beq .L2547 ++ ldr w0, [x23, 8] ++ cmp w19, w0 ++ beq .L2546 ++.L2547: ++ add x0, x22, :lo12:.LANCHOR4 ++ ldr x2, [x0, 1720] ++ ldr x1, [x0, 1728] ++ ldr w3, [x2, 4] ++ str w3, [sp] ++ ldp w3, w4, [x1] ++ ldp w5, w6, [x1, 8] ++ mov w1, w19 ++ ldr w7, [x2] ++ ldr w2, [x0, 1716] ++ adrp x0, .LC147 ++ add x0, x0, :lo12:.LC147 ++ bl printk ++.L2546: ++ add w19, w19, 1 ++ b .L2543 ++ .size Ftlscanalldata, .-Ftlscanalldata ++ .align 2 ++ .global FtlReUsePrevPpa ++ .type FtlReUsePrevPpa, %function ++FtlReUsePrevPpa: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ str x21, [sp, 32] ++ lsr w0, w1, 10 ++ str w1, [x29, 60] ++ bl P2V_block_in_plane ++ adrp x20, .LANCHOR2 ++ add x2, x20, :lo12:.LANCHOR2 ++ and w0, w0, 65535 ++ ubfiz x21, x0, 1, 16 ++ ldr x3, [x2, 520] ++ ldrh w1, [x3, x21] ++ cbnz w1, .L2552 ++ ldr x8, [x2, 544] ++ cbz x8, .L2553 ++ ldrh w3, [x2, 552] ++ mov x4, -6148914691236517206 ++ ldr x2, [x2, 504] ++ movk x4, 0xaaab, lsl 0 ++ mov w5, 65535 ++ sub x8, x8, x2 ++ asr x8, x8, 1 ++ mul x8, x8, x4 ++ mov w4, 6 ++ and w8, w8, 65535 ++.L2554: ++ cmp w1, w3 ++ beq .L2553 ++ cmp w8, w0 ++ bne .L2555 ++ add x20, x20, :lo12:.LANCHOR2 ++ mov w1, w8 ++ add x0, x20, 544 ++ bl List_remove_node ++ ldrh w0, [x20, 552] ++ sub w0, w0, #1 ++ strh w0, [x20, 552] ++ mov w0, w8 ++ bl INSERT_DATA_LIST ++ ldr x1, [x20, 520] ++ ldrh w0, [x1, x21] ++ add w0, w0, 1 ++ strh w0, [x1, x21] ++.L2553: ++ add x1, x29, 60 ++ mov w2, 1 ++ mov w0, w19 ++ bl log2phys ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2555: ++ umull x8, w8, w4 ++ ldrh w8, [x2, x8] ++ cmp w8, w5 ++ beq .L2553 ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L2554 ++.L2552: ++ add w1, w1, 1 ++ strh w1, [x3, x21] ++ b .L2553 ++ .size FtlReUsePrevPpa, .-FtlReUsePrevPpa ++ .align 2 ++ .global FtlRecoverySuperblock ++ .type FtlRecoverySuperblock, %function ++FtlRecoverySuperblock: ++ stp x29, x30, [sp, -192]! ++ mov w2, 65535 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldrh w0, [x0] ++ cmp w0, w2 ++ beq .L2707 ++ adrp x23, .LANCHOR0 ++ add x0, x23, :lo12:.LANCHOR0 ++ ldrh w28, [x20, 2] ++ ldrh w0, [x0, 2544] ++ cmp w0, w28 ++ bne .L2564 ++ strh wzr, [x20, 4] ++.L2714: ++ strb wzr, [x20, 6] ++.L2707: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L2564: ++ ldrh w0, [x20, 16] ++ mov w1, 0 ++.L2565: ++ cmp w0, w2 ++ beq .L2566 ++ ldrb w1, [x20, 6] ++ str w1, [x29, 152] ++ ldrb w1, [x20, 8] ++ cmp w1, 1 ++ bne .L2567 ++ bl FtlGetLastWrittenPage ++ mov w21, w0 ++ cmn w0, #1 ++ beq .L2568 ++ add x0, x23, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 204] ++ cbnz w1, .L2640 ++ add x0, x0, 208 ++ ldrh w24, [x0, w21, sxtw 1] ++.L2569: ++ add x0, x23, :lo12:.LANCHOR0 ++ add x1, x20, 16 ++ mov x4, x1 ++ str x1, [x29, 168] ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ ldrh w8, [x0, 2556] ++ mov w26, 0 ++ ldrh w0, [x0, 2472] ++ mov w9, 65535 ++ mov w10, 56 ++ mov w11, 4 ++ add x0, x0, 8 ++ add x0, x20, x0, lsl 1 ++.L2570: ++ cmp x4, x0 ++ bne .L2572 ++ ldrb w0, [x20, 8] ++ cmp w0, 1 ++ bne .L2641 ++ add x0, x23, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 204] ++ cmp w0, 0 ++ cset w0, ne ++ str w0, [x29, 164] ++.L2573: ++ adrp x19, .LANCHOR2 ++ add x25, x19, :lo12:.LANCHOR2 ++ ldr w2, [x29, 164] ++ mov w1, w26 ++ mov x27, 0 ++ ldr x0, [x25, 3584] ++ bl FlashReadPages ++ ldr w22, [x25, 756] ++ adrp x0, .LC148 ++ add x0, x0, :lo12:.LC148 ++ sub w22, w22, #1 ++ str x0, [x29, 144] ++ mov w5, 65535 ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ str x0, [x29, 136] ++.L2574: ++ and w0, w27, 65535 ++ cmp w26, w0 ++ bhi .L2579 ++ bne .L2577 ++ add x0, x19, :lo12:.LANCHOR2 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ ldr x0, [x0, 3584] ++ ldr w0, [x0, 4] ++.L2709: ++ lsr w0, w0, 10 ++ bl P2V_plane ++ ldrb w1, [x20, 8] ++ and w27, w0, 65535 ++ cmp w1, 1 ++ bne .L2581 ++ add x0, x23, :lo12:.LANCHOR0 ++ ldrb w2, [x0, 204] ++ cbnz w2, .L2581 ++ add x0, x0, 208 ++ ldrh w21, [x0, w21, sxtw 1] ++.L2581: ++ add x0, x23, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 2544] ++ cmp w0, w21 ++ bne .L2582 ++ strh w21, [x20, 2] ++ strb wzr, [x20, 6] ++ strh wzr, [x20, 4] ++.L2582: ++ ldrh w0, [x29, 152] ++ cmp w21, w28 ++ str w0, [x29, 144] ++ ccmp w27, w0, 0, eq ++ bne .L2583 ++.L2715: ++ mov w2, w27 ++ mov w1, w21 ++ mov x0, x20 ++ bl ftl_sb_update_avl_pages ++ b .L2707 ++.L2566: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ add x0, x20, w1, sxtw 1 ++ ldrh w0, [x0, 16] ++ b .L2565 ++.L2567: ++ mov w1, 0 ++ bl FtlGetLastWrittenPage ++ mov w21, w0 ++ cmn w0, #1 ++ beq .L2568 ++.L2640: ++ mov w24, w21 ++ b .L2569 ++.L2568: ++ strh wzr, [x20, 2] ++ b .L2714 ++.L2572: ++ ldrh w2, [x4] ++ cmp w2, w9 ++ beq .L2571 ++ umull x7, w26, w10 ++ ldr x6, [x1, 3584] ++ orr w2, w24, w2, lsl 10 ++ add w3, w26, 1 ++ add x6, x6, x7 ++ str w2, [x6, 4] ++ mul w2, w26, w8 ++ and w26, w3, 65535 ++ ldr x5, [x1, 3584] ++ ldr x6, [x1, 1400] ++ sdiv w2, w2, w11 ++ add x5, x5, x7 ++ add x2, x6, w2, sxtw 2 ++ stp xzr, x2, [x5, 8] ++.L2571: ++ add x4, x4, 2 ++ b .L2570 ++.L2641: ++ str wzr, [x29, 164] ++ b .L2573 ++.L2579: ++ mov x0, 56 ++ ldr x4, [x25, 3584] ++ mul x0, x27, x0 ++ add x1, x4, x0 ++ ldr w0, [x4, x0] ++ cbnz w0, .L2575 ++ ldr x6, [x1, 16] ++ ldr w4, [x6, 4] ++ cmn w4, #1 ++ beq .L2576 ++ ldr w1, [x25, 756] ++ mov w0, w4 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2576 ++ add w4, w4, 1 ++ str w4, [x25, 756] ++.L2576: ++ ldr w0, [x6] ++ cmn w0, #1 ++ bne .L2578 ++.L2577: ++ add x0, x19, :lo12:.LANCHOR2 ++ and x27, x27, 65535 ++ mov x1, 56 ++ and w21, w21, 65535 ++ ldr x0, [x0, 3584] ++ madd x27, x27, x1, x0 ++ ldr w0, [x27, 4] ++ b .L2709 ++.L2575: ++ ldr w1, [x1, 4] ++ ldr x0, [x29, 144] ++ bl printk ++ ldr x1, [x29, 136] ++ and w5, w24, 65535 ++ ldrh w0, [x20] ++ strh w0, [x1, 1842] ++.L2578: ++ add x27, x27, 1 ++ b .L2574 ++.L2583: ++ mov w0, 65535 ++ cmp w5, w0 ++ bne .L2584 ++ cbnz w1, .L2585 ++.L2584: ++ add x0, x19, :lo12:.LANCHOR2 ++ and w6, w24, 65535 ++ ldr w1, [x0, 3884] ++ cmn w1, #1 ++ bne .L2586 ++ str w22, [x0, 3884] ++.L2586: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr w7, [x0, 3884] ++ add w0, w28, 7 ++ cmp w0, w24, uxth ++ bge .L2642 ++ sub w24, w6, #7 ++ and w24, w24, 65535 ++.L2587: ++ add x4, x19, :lo12:.LANCHOR2 ++ mov w3, -1 ++ add x8, x4, 1500 ++ mov w26, w3 ++ mov w5, 65535 ++.L2588: ++ cmp w24, w6 ++ bhi .L2601 ++ add x0, x23, :lo12:.LANCHOR0 ++ mov w25, 0 ++ mov w10, 56 ++ ldr x1, [x29, 168] ++ ldrh w0, [x0, 2472] ++ add x0, x0, 8 ++ add x0, x20, x0, lsl 1 ++ b .L2602 ++.L2642: ++ mov w24, w28 ++ b .L2587 ++.L2590: ++ ldrh w2, [x1] ++ cmp w2, w5 ++ beq .L2589 ++ ldr x9, [x4, 3584] ++ orr w2, w24, w2, lsl 10 ++ umaddl x9, w25, w10, x9 ++ add w25, w25, 1 ++ and w25, w25, 65535 ++ str w2, [x9, 4] ++.L2589: ++ add x1, x1, 2 ++.L2602: ++ cmp x0, x1 ++ bne .L2590 ++ ldr w2, [x29, 164] ++ mov w1, w25 ++ ldr x0, [x4, 3584] ++ str x8, [x29, 104] ++ str w5, [x29, 112] ++ str w7, [x29, 120] ++ str w6, [x29, 128] ++ str w3, [x29, 136] ++ str x4, [x29, 152] ++ bl FlashReadPages ++ ldr x4, [x29, 152] ++ add x0, x23, :lo12:.LANCHOR0 ++ mov w1, 56 ++ ldr w5, [x29, 112] ++ ldr w7, [x29, 120] ++ sxtw x9, w24 ++ ldrb w2, [x0, 204] ++ ldr x0, [x4, 3584] ++ ldr w6, [x29, 128] ++ ldr w3, [x29, 136] ++ ldr x8, [x29, 104] ++ nop // between mem op and mult-accumulate ++ umaddl x25, w25, w1, x0 ++.L2591: ++ cmp x25, x0 ++ bne .L2600 ++ add w24, w24, 1 ++ and w24, w24, 65535 ++ b .L2588 ++.L2600: ++ ldr w1, [x0] ++ cbnz w1, .L2592 ++ ldr x1, [x0, 16] ++ ldrh w10, [x1] ++ cmp w10, w5 ++ beq .L2593 ++ ldr w1, [x1, 4] ++ cmn w1, #1 ++ beq .L2593 ++ ldr w26, [x4, 3884] ++ cmn w3, #1 ++ str w1, [x4, 3884] ++ bne .L2593 ++ ldrh w1, [x8, x9, lsl 1] ++ cmp w1, w5 ++ bne .L2594 ++ cbz w2, .L2593 ++.L2594: ++ cmp w22, w26 ++ csel w3, w3, w26, eq ++.L2593: ++ add x0, x0, 56 ++ b .L2591 ++.L2592: ++ adrp x0, .LANCHOR4+1842 ++ ldrh w1, [x20] ++ strh w1, [x0, #:lo12:.LANCHOR4+1842] ++ ldrb w0, [x20, 8] ++ cbnz w0, .L2585 ++ add x0, x19, :lo12:.LANCHOR2 ++ add x1, x0, 1500 ++ ldrh w2, [x1, w24, sxtw 1] ++ mov w1, 65535 ++ cmp w2, w1 ++ bne .L2596 ++ cmn w3, #1 ++ beq .L2597 ++ str w3, [x0, 3884] ++.L2585: ++ adrp x0, .LANCHOR4 ++ add x1, x0, :lo12:.LANCHOR4 ++ mov w24, w28 ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w2, 1 ++ str x0, [x29, 120] ++ strh w2, [x1, 1844] ++.L2603: ++ add x0, x23, :lo12:.LANCHOR0 ++ ldr x1, [x29, 168] ++ mov w25, 0 ++ mov w7, 65535 ++ ldrb w6, [x0, 204] ++ ldrh w0, [x0, 2472] ++ add x0, x0, 8 ++ add x0, x20, x0, lsl 1 ++.L2604: ++ cmp x0, x1 ++ bne .L2607 ++ ldr w2, [x29, 164] ++ mov w1, w25 ++ ldr x0, [x19, 3584] ++ bl FlashReadPages ++ mov w0, 56 ++ umull x0, w25, w0 ++ mov x25, 0 ++ str x0, [x29, 128] ++ ldr x0, [x29, 120] ++ add x0, x0, :lo12:.LANCHOR4 ++ str x0, [x29, 152] ++ adrp x0, .LC150 ++ add x0, x0, :lo12:.LC150 ++ str x0, [x29, 112] ++ ldr x0, [x29, 152] ++ add x0, x0, 1856 ++ str x0, [x29, 104] ++.L2608: ++ ldr x0, [x29, 128] ++ cmp x0, x25 ++ bne .L2633 ++ ldrb w0, [x20, 8] ++ add w24, w24, 1 ++ and w24, w24, 65535 ++ cmp w0, 1 ++ bne .L2634 ++ add x0, x23, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 204] ++ cbz w1, .L2634 ++ ldrh w0, [x0, 2546] ++ cmp w0, w24 ++ bne .L2634 ++ cmp w21, w24 ++ beq .L2610 ++.L2634: ++ add x0, x23, :lo12:.LANCHOR0 ++ ldrh w1, [x0, 2544] ++ cmp w1, w24 ++ bne .L2603 ++ ldrh w1, [x0, 2472] ++ mov w2, 65535 ++ strh w24, [x20, 2] ++ mov w0, 0 ++ strh wzr, [x20, 4] ++.L2635: ++ cmp w0, w1 ++ beq .L2707 ++ ldr x4, [x29, 168] ++ ldrh w3, [x4], 2 ++ str x4, [x29, 168] ++ cmp w3, w2 ++ beq .L2636 ++ strb w0, [x20, 6] ++ b .L2707 ++.L2597: ++ cmp w22, w7 ++ beq .L2598 ++ str w7, [x0, 3884] ++ b .L2585 ++.L2598: ++ ldr w1, [x0, 3884] ++.L2716: ++ sub w1, w1, #1 ++.L2710: ++ str w1, [x0, 3884] ++ b .L2585 ++.L2596: ++ cmp w26, w22 ++ beq .L2599 ++ cmn w26, #1 ++ beq .L2585 ++ str w26, [x0, 3884] ++ b .L2585 ++.L2599: ++ ldr w1, [x0, 3884] ++ cmp w22, w1 ++ bne .L2716 ++ b .L2585 ++.L2601: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, -1 ++ b .L2710 ++.L2607: ++ ldrh w3, [x1] ++ cmp w3, w7 ++ beq .L2605 ++ mov w2, 56 ++ ldr x4, [x19, 3584] ++ orr w3, w24, w3, lsl 10 ++ umull x5, w25, w2 ++ add x4, x4, x5 ++ str w3, [x4, 4] ++ ldrb w2, [x20, 8] ++ cmp w2, 1 ++ bne .L2606 ++ cbz w6, .L2606 ++ ldr x2, [x19, 3584] ++ add x2, x2, x5 ++ ldr w3, [x2, 4] ++ orr w3, w3, -2147483648 ++ str w3, [x2, 4] ++.L2606: ++ add w25, w25, 1 ++ and w25, w25, 65535 ++.L2605: ++ add x1, x1, 2 ++ b .L2604 ++.L2633: ++ ldr x4, [x19, 3584] ++ add x4, x4, x25 ++ ldr w5, [x4, 4] ++ str w5, [x29, 188] ++ lsr w0, w5, 10 ++ bl P2V_plane ++ and w0, w0, 65535 ++ cmp w24, w28 ++ bcc .L2609 ++ ldr w1, [x29, 144] ++ ccmp w1, w0, 0, eq ++ bhi .L2609 ++ cmp w24, w21 ++ ccmp w27, w0, 0, eq ++ beq .L2610 ++ ldr w0, [x4] ++ cmn w0, #1 ++ beq .L2611 ++ ldr x3, [x4, 16] ++ mov w0, 61589 ++ ldrh w1, [x3] ++ cmp w1, w0 ++ beq .L2612 ++ ldrh w0, [x20] ++.L2712: ++ bl decrement_vpc_count ++ b .L2609 ++.L2612: ++ ldr w22, [x3, 4] ++ cmn w22, #1 ++ beq .L2613 ++ ldr w1, [x19, 756] ++ mov w0, w22 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2613 ++ add w0, w22, 1 ++ str w0, [x19, 756] ++.L2613: ++ ldp w26, w0, [x3, 8] ++ add x1, x29, 184 ++ str w0, [x29, 180] ++ mov w2, 0 ++ mov w0, w26 ++ bl log2phys ++ ldr w1, [x19, 3884] ++ ldr w3, [x29, 180] ++ cmn w1, #1 ++ beq .L2614 ++ mov w0, w22 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2614 ++ cmn w3, #1 ++ beq .L2615 ++ ldr x0, [x19, 3584] ++ mov w2, 0 ++ mov w1, 1 ++ add x0, x0, x25 ++ ldr x4, [x0, 16] ++ str w3, [x0, 4] ++ str x4, [x29, 136] ++ ldr x0, [x19, 3584] ++ add x0, x0, x25 ++ bl FlashReadPages ++ ldr x0, [x19, 3584] ++ ldr x4, [x29, 136] ++ add x3, x0, x25 ++ ldr w0, [x0, x25] ++ cmn w0, #1 ++ bne .L2616 ++.L2617: ++ mov w0, -1 ++ str w0, [x29, 180] ++.L2624: ++ ldr w4, [x29, 180] ++ cmn w4, #1 ++ beq .L2609 ++.L2639: ++ lsr w0, w4, 10 ++ bl P2V_block_in_plane ++ ldr x3, [x19, 520] ++ and w1, w0, 65535 ++ ubfiz x2, x1, 1, 16 ++ ldrh w2, [x3, x2] ++ cbnz w2, .L2712 ++ adrp x0, .LC149 ++ add x0, x0, :lo12:.LC149 ++ bl printk ++ b .L2609 ++.L2615: ++ ldp w1, w0, [x29, 184] ++ cmp w1, w0 ++ bne .L2609 ++ mov w2, 1 ++ add x1, x29, 180 ++ mov w0, w26 ++ bl log2phys ++.L2609: ++ add x25, x25, 56 ++ b .L2608 ++.L2616: ++ ldr w0, [x4, 8] ++ cmp w26, w0 ++ bne .L2617 ++ ldr w0, [x4, 4] ++ str w0, [x29, 136] ++ str x4, [x29, 96] ++ uxtw x1, w0 ++ ldr w0, [x19, 3884] ++ bl ftl_cmp_data_ver ++ cbz w0, .L2617 ++ ldp w0, w1, [x29, 184] ++ ldr x4, [x29, 96] ++ cmp w0, w1 ++ ldr w1, [x29, 180] ++ bne .L2619 ++.L2711: ++ mov w0, w26 ++ bl FtlReUsePrevPpa ++ b .L2617 ++.L2619: ++ cmp w0, w1 ++ beq .L2617 ++ cmn w0, #1 ++ beq .L2620 ++ ldr x4, [x3, 16] ++ mov w2, 0 ++ str w0, [x3, 4] ++ mov w1, 1 ++ str x4, [x29, 96] ++ ldr x0, [x19, 3584] ++ add x0, x0, x25 ++ bl FlashReadPages ++ ldr x4, [x29, 96] ++.L2621: ++ ldr x0, [x19, 3584] ++ ldr w0, [x0, x25] ++ cmn w0, #1 ++ beq .L2622 ++ ldr w3, [x4, 4] ++ ldr w0, [x19, 3884] ++ mov w1, w3 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2622 ++ ldr w0, [x29, 136] ++ mov w1, w3 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2617 ++.L2622: ++ ldr w1, [x29, 180] ++ b .L2711 ++.L2620: ++ str w0, [x3] ++ b .L2621 ++.L2614: ++ ldp w1, w0, [x29, 184] ++ cmp w1, w0 ++ beq .L2624 ++ cmn w3, #1 ++ beq .L2626 ++ add x0, x23, :lo12:.LANCHOR0 ++ ubfx x3, x3, 10, 21 ++ ldr w0, [x0, 2488] ++ cmp w3, w0 ++ bcs .L2609 ++.L2626: ++ mov w2, 1 ++ add x1, x29, 188 ++ mov w0, w26 ++ bl log2phys ++ ldr w4, [x29, 184] ++ cmn w4, #1 ++ beq .L2624 ++ ldr w0, [x29, 180] ++ cmp w4, w0 ++ beq .L2639 ++ lsr w0, w4, 10 ++ bl P2V_block_in_plane ++ ldrh w1, [x19, 560] ++ and w0, w0, 65535 ++ cmp w1, w0 ++ beq .L2629 ++ ldrh w1, [x19, 608] ++ cmp w1, w0 ++ beq .L2629 ++ ldrh w1, [x19, 656] ++ cmp w1, w0 ++ bne .L2624 ++.L2629: ++ ldr x0, [x19, 3584] ++ mov w2, 0 ++ mov w1, 1 ++ str w4, [x0, 4] ++ ldr x3, [x0, 16] ++ ldr x0, [x19, 3584] ++ str x3, [x29, 136] ++ bl FlashReadPages ++ ldr x0, [x19, 3584] ++ ldr w0, [x0] ++ cmn w0, #1 ++ beq .L2624 ++ ldr x3, [x29, 136] ++ mov w0, w22 ++ ldr w1, [x3, 4] ++ bl ftl_cmp_data_ver ++ cbnz w0, .L2624 ++ mov w2, 1 ++ add x1, x29, 184 ++ mov w0, w26 ++ bl log2phys ++ b .L2624 ++.L2611: ++ ldr x1, [x29, 152] ++ mov w2, w22 ++ ldrh w0, [x20] ++ strh w0, [x1, 1842] ++ mov w1, w5 ++ ldr x0, [x29, 112] ++ bl printk ++ ldr x0, [x29, 152] ++ ldr w0, [x0, 1848] ++ cmp w0, 31 ++ bhi .L2631 ++ ldr x2, [x29, 104] ++ ldr w1, [x29, 188] ++ str w1, [x2, w0, uxtw 2] ++ add w0, w0, 1 ++ ldr x1, [x29, 152] ++ str w0, [x1, 1848] ++.L2631: ++ ldrh w0, [x20] ++ bl decrement_vpc_count ++ ldr w0, [x19, 3884] ++ cmn w0, #1 ++ bne .L2632 ++.L2713: ++ str w22, [x19, 3884] ++ b .L2609 ++.L2632: ++ cmp w22, w0 ++ bcs .L2609 ++ b .L2713 ++.L2636: ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ b .L2635 ++.L2610: ++ strb w27, [x20, 6] ++ strh w21, [x20, 2] ++ b .L2715 ++ .size FtlRecoverySuperblock, .-FtlRecoverySuperblock ++ .align 2 ++ .global FtlVpcCheckAndModify ++ .type FtlVpcCheckAndModify, %function ++FtlVpcCheckAndModify: ++ stp x29, x30, [sp, -80]! ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC109 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ stp x23, x24, [sp, 48] ++ add x23, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x22, x21, :lo12:.LANCHOR0 ++ add x1, x1, 232 ++ add x0, x0, :lo12:.LC109 ++ bl printk ++ ldr x0, [x23, 3704] ++ mov w1, 0 ++ ldrh w2, [x22, 2482] ++ mov w19, 0 ++ lsl w2, w2, 1 ++ bl ftl_memset ++.L2718: ++ ldr w0, [x22, 2616] ++ cmp w19, w0 ++ bcc .L2720 ++ adrp x22, .LC151 ++ add x23, x21, :lo12:.LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR2 ++ add x22, x22, :lo12:.LC151 ++ mov w19, 0 ++ mov w24, 65535 ++.L2721: ++ ldrh w0, [x23, 2480] ++ cmp w0, w19 ++ bhi .L2724 ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 80 ++ ret ++.L2720: ++ mov w2, 0 ++ add x1, x29, 76 ++ mov w0, w19 ++ bl log2phys ++ ldr w0, [x29, 76] ++ cmn w0, #1 ++ beq .L2719 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ ldr x2, [x23, 3704] ++ ubfiz x0, x0, 1, 16 ++ ldrh w1, [x2, x0] ++ add w1, w1, 1 ++ strh w1, [x2, x0] ++.L2719: ++ add w19, w19, 1 ++ b .L2718 ++.L2724: ++ ldr x0, [x20, 520] ++ ubfiz x21, x19, 1, 16 ++ ldrh w2, [x0, x21] ++ ldr x0, [x20, 3704] ++ ldrh w3, [x0, x21] ++ cmp w2, w3 ++ beq .L2722 ++ cmp w2, w24 ++ beq .L2722 ++ ldrh w0, [x20, 560] ++ cmp w0, w19 ++ beq .L2722 ++ ldrh w0, [x20, 656] ++ cmp w0, w19 ++ beq .L2722 ++ ldrh w0, [x20, 608] ++ cmp w0, w19 ++ beq .L2722 ++ mov w1, w19 ++ mov x0, x22 ++ bl printk ++ ldr x0, [x20, 520] ++ ldrh w1, [x0, x21] ++ cbnz w1, .L2723 ++ ldr x1, [x20, 3704] ++ ldrh w1, [x1, x21] ++ strh w1, [x0, x21] ++.L2722: ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L2721 ++.L2723: ++ ldr x1, [x20, 3704] ++ ldrh w1, [x1, x21] ++ strh w1, [x0, x21] ++ mov w0, w19 ++ bl update_vpc_list ++ b .L2722 ++ .size FtlVpcCheckAndModify, .-FtlVpcCheckAndModify ++ .align 2 ++ .global FtlGcScanTempBlk ++ .type FtlGcScanTempBlk, %function ++FtlGcScanTempBlk: ++ stp x29, x30, [sp, -208]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ adrp x0, .LANCHOR1 ++ stp x21, x22, [sp, 32] ++ str w1, [x29, 132] ++ add x1, x0, :lo12:.LANCHOR1 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ str x0, [x29, 120] ++ ldrh w28, [x1, 3456] ++ mov w1, 65535 ++ cmp w28, w1 ++ beq .L2760 ++ cbnz w28, .L2730 ++.L2731: ++ bl FtlGcPageVarInit ++ b .L2732 ++.L2760: ++ mov w28, 0 ++.L2730: ++ adrp x0, .LANCHOR0+2544 ++ ldr w1, [x29, 132] ++ ldrh w0, [x0, #:lo12:.LANCHOR0+2544] ++ cmp w0, w1 ++ beq .L2731 ++.L2732: ++ adrp x25, .LANCHOR2 ++ mov x21, x25 ++ add x26, x25, :lo12:.LANCHOR2 ++ mov w0, -1 ++ mov w24, 0 ++ str w0, [x29, 136] ++.L2733: ++ ldrh w0, [x19] ++ mov w23, 65535 ++ strb wzr, [x19, 8] ++ cmp w0, w23 ++ beq .L2761 ++.L2757: ++ adrp x20, .LANCHOR0 ++ add x0, x20, :lo12:.LANCHOR0 ++ add x2, x19, 16 ++ add x4, x25, :lo12:.LANCHOR2 ++ mov w22, 0 ++ mov w10, 56 ++ ldrh w8, [x0, 2554] ++ mov w7, 4 ++ ldrh w9, [x0, 2556] ++ ldrh w0, [x0, 2472] ++ add x0, x0, 8 ++ add x0, x19, x0, lsl 1 ++.L2735: ++ cmp x2, x0 ++ bne .L2737 ++ add x0, x25, :lo12:.LANCHOR2 ++ mov w1, w22 ++ mov w2, 0 ++ add x27, x20, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3584] ++ bl FlashReadPages ++ mov w0, 56 ++ umull x0, w22, w0 ++ mov x22, 0 ++ str x0, [x29, 112] ++.L2738: ++ ldr x0, [x29, 112] ++ cmp x0, x22 ++ bne .L2755 ++ ldr w0, [x29, 132] ++ add w3, w28, 1 ++ add w24, w24, 1 ++ and w28, w3, 65535 ++ cmp w0, w24 ++ bls .L2756 ++.L2758: ++ add x20, x20, :lo12:.LANCHOR0 ++ ldrh w0, [x20, 2544] ++ cmp w0, w28 ++ bhi .L2757 ++.L2761: ++ mov w2, 0 ++ b .L2734 ++.L2737: ++ ldrh w1, [x2] ++ cmp w1, w23 ++ beq .L2736 ++ umull x11, w22, w10 ++ ldr x6, [x4, 3584] ++ orr w1, w28, w1, lsl 10 ++ add x6, x6, x11 ++ str w1, [x6, 4] ++ mul w1, w22, w8 ++ ldr x5, [x4, 3584] ++ ldr x6, [x4, 1392] ++ sdiv w1, w1, w7 ++ add x5, x5, x11 ++ add x1, x6, w1, sxtw 2 ++ str x1, [x5, 8] ++ mul w1, w22, w9 ++ ldr x6, [x4, 1400] ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ sdiv w1, w1, w7 ++ add x1, x6, w1, sxtw 2 ++ str x1, [x5, 16] ++.L2736: ++ add x2, x2, 2 ++ b .L2735 ++.L2755: ++ ldr x5, [x26, 3584] ++ add x4, x5, x22 ++ ldr w0, [x4, 4] ++ str w0, [x29, 140] ++ uxtw x1, w0 ++ lsr w0, w1, 10 ++ bl P2V_plane ++ and w2, w0, 65535 ++ ldr w0, [x5, x22] ++ ldr x4, [x4, 16] ++ cbnz w0, .L2739 ++ ldrh w0, [x4] ++ cmp w0, w23 ++ bne .L2740 ++.L2743: ++ add x20, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x20, 204] ++ cbz w0, .L2777 ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w0, 1 ++ str w0, [x21, 3880] ++.L2734: ++ ldr x0, [x29, 120] ++ mov w1, -1 ++ strh w28, [x19, 2] ++ add x0, x0, :lo12:.LANCHOR1 ++ strb w2, [x19, 6] ++ strh w1, [x0, 3456] ++ mov w1, w28 ++ mov x0, x19 ++ bl ftl_sb_update_avl_pages ++ b .L2729 ++.L2740: ++ ldr w0, [x4, 8] ++ ldr w1, [x27, 2616] ++ cmp w0, w1 ++ bhi .L2743 ++ ldrb w1, [x27, 72] ++ cbnz w1, .L2746 ++.L2747: ++ ldp w2, w0, [x4, 8] ++ add x22, x22, 56 ++ ldr w1, [x29, 140] ++ bl FtlGcUpdatePage ++ b .L2738 ++.L2746: ++ add x1, x29, 148 ++ str x4, [x29, 104] ++ mov w2, 0 ++ bl log2phys ++ ldr x4, [x29, 104] ++ ldr w1, [x29, 148] ++ ldr w0, [x4, 12] ++ cmp w0, w1 ++ bne .L2747 ++ cmn w0, #1 ++ beq .L2747 ++ str w0, [x29, 156] ++ mov w2, 0 ++ ldr x0, [x26, 3648] ++ mov w1, 1 ++ str x0, [x29, 160] ++ ldr x0, [x26, 3664] ++ str x0, [x29, 168] ++ add x0, x29, 152 ++ bl FlashReadPages ++ ldrh w1, [x27, 2550] ++ mov x0, 0 ++ ldr x2, [x26, 3584] ++ ldr x4, [x29, 104] ++ ldr x5, [x29, 160] ++ ubfiz x1, x1, 9, 16 ++ add x2, x2, x22 ++.L2748: ++ cmp x0, x1 ++ beq .L2747 ++ ldr x6, [x2, 8] ++ ldr w7, [x6, x0] ++ add x0, x0, 4 ++ add x6, x5, x0 ++ ldr w6, [x6, -4] ++ cmp w7, w6 ++ beq .L2748 ++ ldrh w1, [x19] ++ adrp x0, .LC152 ++ ldr w2, [x29, 156] ++ add x0, x0, :lo12:.LC152 ++ bl printk ++.L2777: ++ add x13, x21, :lo12:.LANCHOR2 ++ ldrh w1, [x19] ++ ldr x0, [x13, 520] ++ strh wzr, [x0, x1, lsl 1] ++ ldrh w0, [x19] ++ bl INSERT_FREE_LIST ++ mov w0, -1 ++ strh w0, [x19] ++ strh w0, [x13, 800] ++.L2776: ++ bl FtlGcPageVarInit ++ mov w28, 0 ++ b .L2733 ++.L2739: ++ ldrh w1, [x19] ++ add x20, x20, :lo12:.LANCHOR0 ++ ldr w2, [x29, 140] ++ adrp x0, .LC153 ++ add x0, x0, :lo12:.LC153 ++ bl printk ++ ldr w1, [x20, 2372] ++ ldrh w0, [x19] ++ cbnz w1, .L2751 ++ ldrb w1, [x20, 204] ++ cbz w1, .L2752 ++.L2751: ++ add x2, x21, :lo12:.LANCHOR2 ++ ubfiz x1, x0, 1, 16 ++ ldr x2, [x2, 440] ++ ldrh w1, [x2, x1] ++ cmp w1, 159 ++ bls .L2753 ++.L2752: ++ add x1, x21, :lo12:.LANCHOR2 ++ ldr x1, [x1, 3584] ++ ldr w1, [x1, x22] ++ cmn w1, #1 ++ bne .L2754 ++.L2753: ++ add x1, x21, :lo12:.LANCHOR2 ++ ldr x1, [x1, 3584] ++ add x22, x1, x22 ++ ldr w1, [x22, 4] ++ str w1, [x29, 136] ++.L2754: ++ add x1, x21, :lo12:.LANCHOR2 ++ ubfiz x0, x0, 1, 16 ++ ldr x1, [x1, 520] ++ strh wzr, [x1, x0] ++ ldrh w0, [x19] ++ bl INSERT_FREE_LIST ++ mov w0, -1 ++ strh w0, [x19] ++ b .L2776 ++.L2756: ++ ldr x0, [x29, 120] ++ add x1, x0, :lo12:.LANCHOR1 ++ ldrh w0, [x1, 3456] ++ cmp w0, w23 ++ beq .L2758 ++ add w0, w0, w24 ++ strh w0, [x1, 3456] ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 2544] ++ cmp w0, w28 ++ bls .L2758 ++.L2729: ++ ldr w0, [x29, 136] ++ 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 FtlGcScanTempBlk, .-FtlGcScanTempBlk ++ .align 2 ++ .global FtlReadRefresh ++ .type FtlReadRefresh, %function ++FtlReadRefresh: ++ adrp x1, .LANCHOR2 ++ add x0, x1, :lo12:.LANCHOR2 ++ add x2, x0, 848 ++ ldr w3, [x2, 80] ++ cbz w3, .L2779 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ ldr w4, [x2, 84] ++ ldr w3, [x1, 2616] ++ cmp w4, w3 ++ bcs .L2780 ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ mov x20, x1 ++ stp x21, x22, [sp, 32] ++ mov w21, 2048 ++.L2785: ++ add x22, x19, 848 ++ ldr w1, [x20, 2616] ++ ldr w0, [x22, 84] ++ cmp w0, w1 ++ bcc .L2781 ++.L2784: ++ ldp x19, x20, [sp, 16] ++ mov w0, -1 ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 112 ++ ret ++.L2781: ++ add x1, x29, 52 ++ mov w2, 0 ++ bl log2phys ++ ldr w0, [x22, 84] ++ ldr w1, [x29, 52] ++ add w0, w0, 1 ++ str w0, [x22, 84] ++ cmn w1, #1 ++ beq .L2783 ++ str w0, [x29, 80] ++ add x0, x29, 112 ++ str w1, [x29, 60] ++ mov w2, 0 ++ stp xzr, xzr, [x29, 64] ++ mov w1, 1 ++ str wzr, [x0, -56]! ++ bl FlashReadPages ++ ldr w0, [x29, 56] ++ cmp w0, 256 ++ bne .L2784 ++ ldr w0, [x29, 52] ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ b .L2784 ++.L2783: ++ subs w21, w21, #1 ++ bne .L2785 ++ b .L2784 ++.L2780: ++ ldr w0, [x0, 720] ++ stp w0, wzr, [x2, 76] ++ str wzr, [x2, 84] ++.L2792: ++ mov w0, 0 ++ ret ++.L2779: ++ ldr w4, [x0, 772] ++ mov w3, 10000 ++ ldr w5, [x0, 720] ++ mov w6, 31 ++ cmp w4, w3 ++ ldr w7, [x2, 76] ++ mov w3, 63 ++ csel w6, w6, w3, hi ++ add w3, w5, 1048576 ++ cmp w7, w3 ++ bhi .L2789 ++ adrp x3, .LANCHOR0+2616 ++ mov w8, 1000 ++ lsr w4, w4, 10 ++ ldr w3, [x3, #:lo12:.LANCHOR0+2616] ++ add w4, w4, 1 ++ mul w3, w3, w8 ++ udiv w3, w3, w4 ++ add w3, w3, w7 ++ cmp w5, w3 ++ bhi .L2789 ++ ldrh w0, [x0, 484] ++ tst w6, w0 ++ bne .L2792 ++ ldr w2, [x2, 100] ++ cmp w0, w2 ++ beq .L2792 ++.L2789: ++ add x0, x1, :lo12:.LANCHOR2 ++ add x1, x0, 848 ++ ldrh w0, [x0, 484] ++ str w0, [x1, 100] ++ str w5, [x1, 76] ++ mov w0, 1 ++ str wzr, [x1, 84] ++ str w0, [x1, 80] ++ b .L2792 ++ .size FtlReadRefresh, .-FtlReadRefresh ++ .align 2 ++ .global FtlGcFreeTempBlock ++ .type FtlGcFreeTempBlock, %function ++FtlGcFreeTempBlock: ++ stp x29, x30, [sp, -112]! ++ 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] ++ adrp x21, .LANCHOR0 ++ stp x25, x26, [sp, 64] ++ add x1, x21, :lo12:.LANCHOR0 ++ str x27, [sp, 80] ++ ldr w3, [x2, 424] ++ ldrh w1, [x1, 2544] ++ cbz w3, .L2799 ++.L2836: ++ mov w0, 0 ++.L2798: ++ 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 ++.L2799: ++ ldrh w20, [x2, 656] ++ mov w3, 65535 ++ cmp w20, w3 ++ bne .L2801 ++.L2810: ++ add x20, x19, :lo12:.LANCHOR2 ++ mov w0, 65535 ++ add x22, x20, 656 ++ ldrh w1, [x20, 656] ++ str wzr, [x20, 3880] ++ cmp w1, w0 ++ beq .L2836 ++ add x23, x21, :lo12:.LANCHOR0 ++ bl FtlCacheWriteBack ++ ldrb w0, [x22, 7] ++ mov w26, 12 ++ ldr x1, [x20, 520] ++ mov w22, 0 ++ ldrh w3, [x23, 2544] ++ ldrh w2, [x20, 656] ++ mul w0, w0, w3 ++ strh w0, [x1, x2, lsl 1] ++ ldr w1, [x20, 740] ++ ldrh w0, [x20, 1432] ++ add w0, w0, w1 ++ str w0, [x20, 740] ++.L2811: ++ ldrh w0, [x20, 1432] ++ cmp w0, w22 ++ bhi .L2815 ++ mov w0, -1 ++ bl decrement_vpc_count ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 204] ++ cbz w0, .L2816 ++ ldrh w1, [x20, 656] ++ adrp x0, .LC154 ++ add x0, x0, :lo12:.LC154 ++ bl printk ++.L2816: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x1, 656] ++ ldr x1, [x1, 520] ++ ubfiz x2, x0, 1, 16 ++ ldrh w1, [x1, x2] ++ cbz w1, .L2817 ++ bl INSERT_DATA_LIST ++.L2818: ++ add x20, x19, :lo12:.LANCHOR2 ++ mov w22, -1 ++ strh wzr, [x20, 1432] ++ strh w22, [x20, 656] ++ strh wzr, [x20, 1420] ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ strh w22, [x20, 800] ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr w0, [x0, 2372] ++ cbz w0, .L2819 ++ ldr w0, [x20, 776] ++ cmp w0, 39 ++ bhi .L2819 ++ ldrh w0, [x20, 780] ++ ldrh w1, [x20, 552] ++ cmp w1, w0 ++ bcs .L2836 ++ ubfiz w0, w0, 1, 15 ++ strh w0, [x20, 1364] ++ b .L2836 ++.L2801: ++ cbz w0, .L2804 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ ldrh w4, [x0, 3456] ++ cmp w4, w3 ++ beq .L2805 ++.L2806: ++ mov w1, 2 ++.L2804: ++ add x22, x19, :lo12:.LANCHOR2 ++ add x0, x22, 656 ++ bl FtlGcScanTempBlk ++ str w0, [x29, 108] ++ cmn w0, #1 ++ beq .L2807 ++ ldr x1, [x22, 440] ++ ubfiz x20, x20, 1, 16 ++ ldrh w0, [x1, x20] ++ cmp w0, 4 ++ bls .L2808 ++ sub w0, w0, #5 ++ strh w0, [x1, x20] ++ mov w0, 1 ++ bl FtlEctTblFlush ++.L2808: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr w1, [x0, 3880] ++ cbnz w1, .L2809 ++ ldr w1, [x0, 944] ++ add w1, w1, 1 ++ str w1, [x0, 944] ++ ldr w0, [x29, 108] ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++.L2809: ++ add x19, x19, :lo12:.LANCHOR2 ++ str wzr, [x19, 3880] ++.L2821: ++ mov w0, 1 ++ b .L2798 ++.L2805: ++ strh wzr, [x0, 3456] ++ ldrh w0, [x2, 552] ++ cmp w0, 17 ++ bhi .L2806 ++ b .L2804 ++.L2807: ++ adrp x0, .LANCHOR1+3456 ++ ldrh w1, [x0, #:lo12:.LANCHOR1+3456] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2821 ++ b .L2810 ++.L2815: ++ umull x25, w22, w26 ++ ldr x27, [x20, 1440] ++ ldr w1, [x23, 2616] ++ add x24, x27, x25 ++ ldr w0, [x24, 8] ++ cmp w0, w1 ++ bcc .L2812 ++.L2833: ++ ldrh w0, [x20, 656] ++ b .L2834 ++.L2812: ++ add x1, x29, 108 ++ mov w2, 0 ++ bl log2phys ++ ldr w0, [x27, x25] ++ ldr w1, [x29, 108] ++ cmp w0, w1 ++ bne .L2814 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ mov w25, w0 ++ ldr w0, [x24, 8] ++ mov w2, 1 ++ add x1, x24, 4 ++ bl log2phys ++ mov w0, w25 ++.L2834: ++ bl decrement_vpc_count ++ b .L2813 ++.L2814: ++ ldr w0, [x24, 4] ++ cmp w1, w0 ++ bne .L2833 ++.L2813: ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ b .L2811 ++.L2817: ++ bl INSERT_FREE_LIST ++ b .L2818 ++.L2819: ++ add x19, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x19, 780] ++ ldrh w1, [x19, 552] ++ add w2, w0, w0, lsl 1 ++ cmp w1, w2, lsr 2 ++ ble .L2836 ++ add x21, x21, :lo12:.LANCHOR0 ++ ldrb w1, [x21, 204] ++ cbz w1, .L2820 ++ sub w0, w0, #2 ++.L2835: ++ strh w0, [x19, 1364] ++ b .L2836 ++.L2820: ++ mov w0, 20 ++ b .L2835 ++ .size FtlGcFreeTempBlock, .-FtlGcFreeTempBlock ++ .align 2 ++ .global FtlGcPageRecovery ++ .type FtlGcPageRecovery, %function ++FtlGcPageRecovery: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ str x21, [sp, 32] ++ add x21, x19, 656 ++ ldrh w1, [x20, 2544] ++ mov x0, x21 ++ bl FtlGcScanTempBlk ++ ldrh w1, [x19, 658] ++ ldrh w0, [x20, 2544] ++ cmp w1, w0 ++ bcc .L2837 ++ add x0, x19, 3792 ++ bl FtlMapBlkWriteDumpData ++ mov w0, 0 ++ bl FtlGcFreeTempBlock ++ str wzr, [x19, 3880] ++.L2837: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FtlGcPageRecovery, .-FtlGcPageRecovery ++ .align 2 ++ .global FtlPowerLostRecovery ++ .type FtlPowerLostRecovery, %function ++FtlPowerLostRecovery: ++ stp x29, x30, [sp, -32]! ++ adrp x0, .LANCHOR4+1848 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ str wzr, [x0, #:lo12:.LANCHOR4+1848] ++ add x20, x19, 560 ++ add x19, x19, 608 ++ 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 FtlSysBlkInit ++ .type FtlSysBlkInit, %function ++FtlSysBlkInit: ++ stp x29, x30, [sp, -64]! ++ mov w1, -1 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ add x24, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR4 ++ add x0, x21, :lo12:.LANCHOR4 ++ adrp x19, .LANCHOR2 ++ add x23, x19, :lo12:.LANCHOR2 ++ strh w1, [x0, 1842] ++ strh wzr, [x0, 1844] ++ ldrh w0, [x24, 2476] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlScanSysBlk ++ ldrh w1, [x23, 784] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2843 ++.L2845: ++ mov w22, -1 ++.L2842: ++ mov w0, w22 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2843: ++ bl FtlLoadSysInfo ++ mov w22, w0 ++ cbnz w0, .L2845 ++ bl FtlLoadMapInfo ++ bl FtlLoadVonderInfo ++ bl Ftl_load_ext_data ++ bl FtlLoadEctTbl ++ bl FtlFreeSysBLkSort ++ bl SupperBlkListInit ++ bl FtlPowerLostRecovery ++ mov w0, 1 ++ bl FtlUpdateVaildLpn ++ ldr x1, [x23, 704] ++ mov w0, 0 ++ ldrh w3, [x24, 2582] ++ add x1, x1, 4 ++.L2846: ++ cmp w0, w3 ++ bge .L2851 ++ ldr w2, [x1], 16 ++ tbz w2, #31, .L2847 ++.L2851: ++ add x1, x19, :lo12:.LANCHOR2 ++ cmp w0, w3 ++ ldrh w2, [x1, 484] ++ add w2, w2, 1 ++ strh w2, [x1, 484] ++ bge .L2858 ++.L2848: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrh w2, [x0, 560] ++ ldr x4, [x0, 520] ++ ldrh w5, [x0, 564] ++ lsl x2, x2, 1 ++ ldrh w3, [x4, x2] ++ sub w3, w3, w5 ++ strh w3, [x4, x2] ++ add x4, x20, :lo12:.LANCHOR0 ++ strb wzr, [x0, 566] ++ ldr x5, [x0, 520] ++ strh wzr, [x0, 564] ++ ldrh w2, [x4, 2544] ++ strh w2, [x0, 562] ++ ldrh w2, [x0, 608] ++ ldrh w6, [x0, 612] ++ lsl x2, x2, 1 ++ ldrh w3, [x5, x2] ++ sub w3, w3, w6 ++ strh w3, [x5, x2] ++ strb wzr, [x0, 614] ++ ldrh w1, [x0, 486] ++ ldrh w2, [x4, 2544] ++ add w1, w1, 1 ++ strh w2, [x0, 610] ++ strh w1, [x0, 486] ++ strh wzr, [x0, 612] ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ bl FtlVpcTblFlush ++ b .L2852 ++.L2847: ++ add w0, w0, 1 ++ b .L2846 ++.L2858: ++ add x21, x21, :lo12:.LANCHOR4 ++ ldrh w0, [x21, 1844] ++ cbnz w0, .L2848 ++.L2852: ++ add x21, x19, :lo12:.LANCHOR2 ++ mov w1, 65535 ++ add x24, x21, 560 ++ ldrh w0, [x21, 560] ++ cmp w0, w1 ++ beq .L2853 ++ ldrh w1, [x21, 564] ++ cbnz w1, .L2853 ++ ldrh w1, [x21, 612] ++ add x23, x21, 608 ++ cbnz w1, .L2853 ++ bl FtlGcRefreshOpenBlock ++ ldrh w0, [x21, 608] ++ bl FtlGcRefreshOpenBlock ++ bl FtlVpcTblFlush ++ mov x0, x24 ++ bl allocate_new_data_superblock ++ mov x0, x23 ++ bl allocate_new_data_superblock ++.L2853: ++ add x20, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x20, 72] ++ cbnz w0, .L2854 ++ add x19, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x19, 484] ++ tst x0, 31 ++ bne .L2842 ++.L2854: ++ bl FtlVpcCheckAndModify ++ b .L2842 ++ .size FtlSysBlkInit, .-FtlSysBlkInit ++ .align 2 ++ .global FtlLowFormat ++ .type FtlLowFormat, %function ++FtlLowFormat: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ add x21, x19, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ ldr w0, [x21, 424] ++ cbnz w0, .L2862 ++ adrp x20, .LANCHOR0 ++ add x22, x20, :lo12:.LANCHOR0 ++ ldr x0, [x21, 3760] ++ mov w1, 0 ++ ldrh w2, [x22, 2580] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldr x0, [x21, 3752] ++ mov w1, 0 ++ ldrh w2, [x22, 2580] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldrh w0, [x22, 2476] ++ str wzr, [x21, 752] ++ str wzr, [x21, 756] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cbz w0, .L2863 ++ bl FtlMakeBbt ++.L2863: ++ mov w5, 23752 ++ add x2, x20, :lo12:.LANCHOR0 ++ add x3, x19, :lo12:.LANCHOR2 ++ mov w0, 0 ++ movk w5, 0xa0f, lsl 16 ++.L2864: ++ ldrh w1, [x2, 2550] ++ cmp w0, w1, lsl 7 ++ blt .L2865 ++ ldrh w22, [x2, 2480] ++ add x23, x20, :lo12:.LANCHOR0 ++ mov w21, 0 ++.L2866: ++ ldrh w0, [x23, 2482] ++ cmp w0, w22 ++ bhi .L2867 ++ ldrh w0, [x23, 2472] ++ sub w1, w21, #3 ++ cmp w1, w0, lsl 1 ++ blt .L2868 ++ udiv w0, w21, w0 ++ ldr w21, [x23, 2576] ++ add w0, w0, w21 ++ bl FtlSysBlkNumInit ++ ldrh w0, [x23, 2476] ++ mov w21, 0 ++ bl FtlFreeSysBlkQueueInit ++ ldrh w22, [x23, 2480] ++ add x23, x20, :lo12:.LANCHOR0 ++.L2869: ++ ldrh w0, [x23, 2482] ++ cmp w0, w22 ++ bhi .L2870 ++.L2868: ++ add x23, x20, :lo12:.LANCHOR0 ++ mov w22, 0 ++ mov w24, 0 ++.L2871: ++ ldrh w0, [x23, 2480] ++ cmp w0, w24 ++ bhi .L2872 ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x23, 2482] ++ ldr w2, [x23, 2484] ++ str w0, [x1, 3572] ++ ldrh w0, [x23, 2472] ++ udiv w4, w2, w0 ++ ubfx x3, x4, 5, 16 ++ str w4, [x23, 2616] ++ add w5, w3, 36 ++ strh w5, [x1, 780] ++ mov w5, 24 ++ mul w5, w0, w5 ++ cmp w22, w5 ++ ble .L2873 ++ sub w2, w2, w22 ++ udiv w2, w2, w0 ++ str w2, [x23, 2616] ++ lsr w2, w2, 5 ++ add w2, w2, 24 ++ strh w2, [x1, 780] ++.L2873: ++ add x1, x20, :lo12:.LANCHOR0 ++ ldr w1, [x1, 2372] ++ cmp w1, 1 ++ bne .L2874 ++ udiv w2, w22, w0 ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w5, [x1, 780] ++ add w2, w2, w5 ++ add w2, w5, w2, asr 2 ++ strh w2, [x1, 780] ++.L2874: ++ add x1, x20, :lo12:.LANCHOR0 ++ ldrb w1, [x1, 204] ++ cbz w1, .L2875 ++ udiv w2, w22, w0 ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w5, [x1, 780] ++ add w2, w2, w5 ++ add w2, w5, w2, asr 2 ++ strh w2, [x1, 780] ++.L2875: ++ add x6, x20, :lo12:.LANCHOR0 ++ ldrh w1, [x6, 2538] ++ cbz w1, .L2877 ++ add x2, x19, :lo12:.LANCHOR2 ++ ldrh w5, [x2, 780] ++ add w5, w5, w1, lsr 1 ++ strh w5, [x2, 780] ++ mul w5, w1, w0 ++ cmp w22, w5 ++ bge .L2877 ++ add w1, w1, 32 ++ str w4, [x6, 2616] ++ add w1, w3, w1 ++ strh w1, [x2, 780] ++.L2877: ++ add x24, x20, :lo12:.LANCHOR0 ++ add x1, x19, :lo12:.LANCHOR2 ++ adrp x23, .LANCHOR4 ++ ldrh w2, [x1, 780] ++ ldr w1, [x24, 2616] ++ sub w1, w1, w2 ++ mul w0, w1, w0 ++ add x1, x23, :lo12:.LANCHOR4 ++ str w0, [x1, 1768] ++ ldrh w1, [x24, 2544] ++ mul w0, w1, w0 ++ ldrh w1, [x24, 2550] ++ str w0, [x24, 2616] ++ mul w0, w1, w0 ++ str w0, [x24, 2584] ++ bl FtlBbmTblFlush ++ ldrh w0, [x24, 2558] ++ add w1, w21, w22 ++ ldr w2, [x24, 2488] ++ add w0, w0, w2, lsr 3 ++ cmp w1, w0 ++ bls .L2879 ++ adrp x0, .LC155 ++ lsr w2, w2, 5 ++ add x0, x0, :lo12:.LC155 ++ bl printk ++.L2879: ++ add x22, x20, :lo12:.LANCHOR0 ++ add x20, x19, :lo12:.LANCHOR2 ++ add x21, x20, 560 ++ mov w1, 0 ++ mov w24, -1 ++ ldr x0, [x20, 520] ++ ldrh w2, [x22, 2482] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ mov w0, 1 ++ strb w0, [x21, 8] ++ ldr x0, [x22, 64] ++ mov w1, 255 ++ ldrh w2, [x22, 2480] ++ strh w24, [x20, 800] ++ strh wzr, [x20, 802] ++ strb wzr, [x20, 806] ++ lsr w2, w2, 3 ++ strb wzr, [x20, 808] ++ strh wzr, [x21, 2] ++ strb wzr, [x21, 6] ++ strh wzr, [x20, 560] ++ str wzr, [x20, 716] ++ bl ftl_memset ++.L2880: ++ mov x0, x21 ++ bl make_superblock ++ ldrb w1, [x21, 7] ++ ldrh w0, [x21] ++ cbnz w1, .L2881 ++ ldr x1, [x20, 520] ++ ubfiz x0, x0, 1, 16 ++ strh w24, [x1, x0] ++ ldrh w0, [x21] ++ add w0, w0, 1 ++ strh w0, [x21] ++ b .L2880 ++.L2865: ++ ldr x6, [x3, 3640] ++ ubfiz x4, x0, 2, 16 ++ mvn w1, w0 ++ orr w1, w0, w1, lsl 16 ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ str w1, [x6, x4] ++ ldr x1, [x3, 3648] ++ str w5, [x1, x4] ++ b .L2864 ++.L2867: ++ mov w0, w22 ++ mov w1, 1 ++ add w22, w22, 1 ++ bl FtlLowFormatEraseBlock ++ add w21, w21, w0 ++ and w22, w22, 65535 ++ and w21, w21, 65535 ++ b .L2866 ++.L2870: ++ mov w0, w22 ++ mov w1, 1 ++ add w22, w22, 1 ++ bl FtlLowFormatEraseBlock ++ add w21, w21, w0 ++ and w22, w22, 65535 ++ and w21, w21, 65535 ++ b .L2869 ++.L2872: ++ mov w0, w24 ++ mov w1, 0 ++ add w24, w24, 1 ++ bl FtlLowFormatEraseBlock ++ add w22, w22, w0 ++ and w24, w24, 65535 ++ and w22, w22, 65535 ++ b .L2871 ++.L2881: ++ ldr w1, [x20, 752] ++ ubfiz x0, x0, 1, 16 ++ str w1, [x21, 12] ++ add x19, x19, :lo12:.LANCHOR2 ++ add w1, w1, 1 ++ str w1, [x20, 752] ++ ldr x1, [x20, 520] ++ mov w13, -1 ++ ldrh w2, [x21, 4] ++ strh w2, [x1, x0] ++ add x0, x20, 608 ++ mov x12, x0 ++ strh wzr, [x20, 610] ++ ldrh w1, [x21] ++ strb wzr, [x20, 614] ++ add w1, w1, 1 ++ strh w1, [x20, 608] ++ mov w1, 1 ++ strb w1, [x20, 616] ++.L2882: ++ mov x0, x12 ++ bl make_superblock ++ ldrb w1, [x12, 7] ++ ldrh w0, [x12] ++ cbnz w1, .L2883 ++ ldr x1, [x19, 520] ++ ubfiz x0, x0, 1, 16 ++ strh w13, [x1, x0] ++ ldrh w0, [x12] ++ add w0, w0, 1 ++ strh w0, [x12] ++ b .L2882 ++.L2883: ++ ldr w1, [x19, 752] ++ ubfiz x0, x0, 1, 16 ++ str w1, [x12, 12] ++ add x23, x23, :lo12:.LANCHOR4 ++ add w1, w1, 1 ++ str w1, [x19, 752] ++ ldr x1, [x19, 520] ++ mov w20, -1 ++ ldrh w2, [x12, 4] ++ strh w2, [x1, x0] ++ strh w20, [x19, 656] ++ bl FtlFreeSysBlkQueueOut ++ strh w0, [x19, 784] ++ ldr w0, [x23, 1768] ++ strh w0, [x19, 790] ++ ldr w0, [x19, 752] ++ str w0, [x19, 792] ++ add w0, w0, 1 ++ strh wzr, [x19, 786] ++ strh w20, [x19, 788] ++ str w0, [x19, 752] ++ bl FtlVpcTblFlush ++ bl FtlSysBlkInit ++ cbnz w0, .L2862 ++ adrp x0, .LANCHOR1+504 ++ mov w1, 1 ++ str w1, [x0, #:lo12:.LANCHOR1+504] ++.L2862: ++ 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 FtlLowFormat, .-FtlLowFormat ++ .align 2 ++ .global FtlReInitForSDUpdata ++ .type FtlReInitForSDUpdata, %function ++FtlReInitForSDUpdata: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x0, x19, :lo12:.LANCHOR0 ++ str x21, [sp, 32] ++ ldrb w0, [x0, 204] ++ cbz w0, .L2893 ++.L2895: ++ mov w21, 0 ++.L2892: ++ mov w0, w21 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2893: ++ adrp x20, .LANCHOR4 ++ add x0, x20, :lo12:.LANCHOR4 ++ ldr x0, [x0, 1584] ++ bl FlashInit ++ mov w21, w0 ++ cbnz w0, .L2895 ++ bl FlashLoadFactorBbt ++ cbz w0, .L2896 ++ bl FlashMakeFactorBbt ++.L2896: ++ add x20, x20, :lo12:.LANCHOR4 ++ ldr x0, [x20, 1656] ++ bl FlashReadIdbDataRaw ++ cbz w0, .L2897 ++ mov w2, 16 ++ mov w1, 0 ++ add x0, x29, 48 ++ bl FlashReadFacBbtData ++ ldr w2, [x29, 48] ++ mov w0, 0 ++ mov w1, 0 ++ mov w4, 1 ++.L2899: ++ lsl w3, w4, w1 ++ add w1, w1, 1 ++ tst w3, w2 ++ cinc w0, w0, ne ++ cmp w1, 16 ++ bne .L2899 ++ cmp w0, 6 ++ bhi .L2900 ++ add x0, x19, :lo12:.LANCHOR0 ++.L2923: ++ strb w1, [x0, 73] ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 73] ++ strh w1, [x0, 202] ++.L2897: ++ adrp x1, .LC75 ++ add x1, x1, :lo12:.LC75 ++ add x19, x19, :lo12:.LANCHOR0 ++ adrp x0, .LC76 ++ add x0, x0, :lo12:.LC76 ++ bl printk ++ add x0, x19, 176 ++ bl FtlConstantsInit ++ bl FtlVariablesInit ++ ldrh w0, [x19, 2476] ++ mov w19, 1 ++ bl FtlFreeSysBlkQueueInit ++.L2905: ++ bl FtlLoadBbt ++ cbz w0, .L2906 ++.L2925: ++ bl FtlLowFormat ++ cmp w19, 3 ++ bls .L2907 ++ mov w21, -1 ++ b .L2892 ++.L2900: ++ mov w1, 0 ++ mov w4, 1 ++.L2903: ++ lsl w3, w4, w1 ++ add w1, w1, 1 ++ tst w3, w2 ++ cinc w0, w0, ne ++ cmp w1, 24 ++ bne .L2903 ++ cmp w0, 17 ++ add x0, x19, :lo12:.LANCHOR0 ++ bls .L2923 ++ mov w1, 36 ++ b .L2923 ++.L2907: ++ add w19, w19, 1 ++ b .L2905 ++.L2906: ++ bl FtlSysBlkInit ++ cbnz w0, .L2925 ++ adrp x0, .LANCHOR1+504 ++ mov w1, 1 ++ str w1, [x0, #:lo12:.LANCHOR1+504] ++ b .L2892 ++ .size FtlReInitForSDUpdata, .-FtlReInitForSDUpdata ++ .align 2 ++ .global Ftl_gc_temp_data_write_back ++ .type Ftl_gc_temp_data_write_back, %function ++Ftl_gc_temp_data_write_back: ++ adrp x12, .LANCHOR2 ++ add x0, x12, :lo12:.LANCHOR2 ++ ldr w1, [x0, 424] ++ cbz w1, .L2927 ++.L2941: ++ mov w0, 0 ++ ret ++.L2930: ++ mov w0, 0 ++.L2926: ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2927: ++ adrp x1, .LANCHOR0+204 ++ ldrb w1, [x1, #:lo12:.LANCHOR0+204] ++ cbz w1, .L2929 ++ ldr w1, [x0, 1380] ++ tbz x1, 0, .L2929 ++ ldrh w0, [x0, 660] ++ cbnz w0, .L2941 ++.L2929: ++ stp x29, x30, [sp, -32]! ++ mov w3, 0 ++ mov w2, 0 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ add x19, x12, :lo12:.LANCHOR2 ++ ldr w1, [x19, 1380] ++ ldr x0, [x19, 3592] ++ bl FlashProgPages ++ mov w10, 0 ++ mov w11, 56 ++.L2931: ++ ldr w1, [x19, 1380] ++ cmp w10, w1 ++ bcc .L2933 ++ ldr x0, [x19, 3592] ++ bl FtlGcBufFree ++ str wzr, [x19, 1380] ++ ldrh w0, [x19, 660] ++ cbnz w0, .L2930 ++ mov w0, 1 ++ bl FtlGcFreeTempBlock ++ b .L2943 ++.L2933: ++ umull x1, w10, w11 ++ ldr x2, [x19, 3592] ++ add x3, x2, x1 ++ ldr w2, [x2, x1] ++ ldr x0, [x3, 16] ++ cmn w2, #1 ++ bne .L2932 ++ ldrh w3, [x19, 656] ++ ldr x0, [x19, 520] ++ strh wzr, [x0, x3, lsl 1] ++ strh w2, [x19, 656] ++ ldr w0, [x19, 944] ++ add w0, w0, 1 ++ str w0, [x19, 944] ++ ldr x0, [x19, 3592] ++ add x0, x0, x1 ++ ldr w0, [x0, 4] ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ bl FtlGcPageVarInit ++.L2943: ++ mov w0, 1 ++ b .L2926 ++.L2932: ++ ldp w2, w0, [x0, 8] ++ ldr w1, [x3, 4] ++ bl FtlGcUpdatePage ++ add w10, w10, 1 ++ and w10, w10, 65535 ++ b .L2931 ++ .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 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x0, x19, :lo12:.LANCHOR2 ++ add x1, x0, 656 ++ ldrh w2, [x0, 656] ++ mov w0, 65535 ++ cmp w2, w0 ++ beq .L2945 ++ ldrh w0, [x1, 4] ++ cbnz w0, .L2946 ++.L2945: ++ bl FtlCacheWriteBack ++ add x20, x19, :lo12:.LANCHOR2 ++ mov w0, 0 ++ bl FtlGcFreeTempBlock ++ add x0, x20, 656 ++ strb wzr, [x0, 8] ++ bl allocate_data_superblock ++ strh wzr, [x20, 1420] ++ strh wzr, [x20, 1432] ++ bl l2p_flush ++ mov w0, 0 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L2946: ++ add x0, x19, :lo12:.LANCHOR2 ++ add x0, x0, 656 ++ bl get_new_active_ppa ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa ++ .align 2 ++ .global ftl_do_gc ++ .type ftl_do_gc, %function ++ftl_do_gc: ++ stp x29, x30, [sp, -160]! ++ 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] ++ stp x27, x28, [sp, 80] ++ ldr w3, [x2, 424] ++ cbnz w3, .L3047 ++ adrp x3, .LANCHOR1 ++ add x3, x3, :lo12:.LANCHOR1 ++ ldr w20, [x3, 504] ++ cmp w20, 1 ++ bne .L3047 ++ ldr w4, [x2, 3560] ++ cbnz w4, .L3047 ++ ldrh w4, [x2, 536] ++ cmp w4, 47 ++ bls .L3047 ++ mov w22, w1 ++ ldrh w1, [x3, 3456] ++ mov w23, w0 ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2950 ++.L2953: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w2, 65535 ++ ldrh w4, [x0, 1450] ++ cmp w4, w2 ++ bne .L2951 ++.L2952: ++ add x1, x19, :lo12:.LANCHOR2 ++ cmp w23, 1 ++ ldr w0, [x1, 1368] ++ add w0, w0, 1 ++ add w0, w0, w23, lsl 7 ++ str w0, [x1, 1368] ++ bne .L2954 ++ adrp x2, .LANCHOR0 ++ add x1, x2, :lo12:.LANCHOR0 ++ mov x25, x2 ++ ldr w3, [x1, 2372] ++ cbnz w3, .L2955 ++ ldrb w1, [x1, 204] ++ cbz w1, .L2954 ++.L2955: ++ add x24, x19, :lo12:.LANCHOR2 ++ ldr w1, [x24, 776] ++ cmp w1, 39 ++ bhi .L2954 ++ adrp x21, .LANCHOR4 ++ add x1, x21, :lo12:.LANCHOR4 ++ mov w20, 65535 ++ ldrh w1, [x1, 1984] ++ add w0, w1, w0 ++ str w0, [x24, 1368] ++ bl FtlGcReFreshBadBlk ++ ldrh w0, [x24, 800] ++ cmp w0, w20 ++ bne .L2956 ++ ldrh w1, [x24, 1448] ++ cmp w1, w0 ++ bne .L3043 ++ ldr w0, [x24, 1368] ++ cmp w0, 1024 ++ bhi .L2958 ++ ldrh w0, [x24, 552] ++ cmp w0, 63 ++ bhi .L3043 ++.L2958: ++ add x0, x19, :lo12:.LANCHOR2 ++ add x1, x21, :lo12:.LANCHOR4 ++ ldrh w2, [x0, 1366] ++ ldrh w3, [x0, 552] ++ strh wzr, [x1, 1984] ++ add w2, w2, 64 ++ cmp w3, w2 ++ bgt .L3043 ++ str wzr, [x0, 1368] ++ ldr w0, [x0, 776] ++ cbnz w0, .L2959 ++ mov w0, 6 ++.L3096: ++ strh w0, [x1, 1984] ++.L2960: ++ mov w0, 32 ++ bl List_get_gc_head_node ++ and w5, w0, 65535 ++ mov w8, 65535 ++ cmp w5, w8 ++ beq .L2964 ++ add x24, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x24, 1372] ++ cbz w0, .L2962 ++ add x2, x25, :lo12:.LANCHOR0 ++ ldr x7, [x24, 520] ++ ubfiz x5, x5, 1, 16 ++ ldrh w1, [x2, 2546] ++ ldrh w2, [x2, 2472] ++ ldrh w3, [x7, x5] ++ mul w1, w1, w2 ++ add w1, w1, 1 ++ cmp w3, w1 ++ bgt .L2964 ++ add w6, w0, 1 ++ str wzr, [x24, 1376] ++ and w6, w6, 65535 ++ strh w6, [x24, 1372] ++ bl List_get_gc_head_node ++ and w20, w0, 65535 ++ cmp w20, w8 ++ beq .L2964 ++ ubfiz x25, x20, 1, 16 ++ ldrh w4, [x7, x5] ++ mov w2, w20 ++ mov w1, w6 ++ adrp x0, .LC156 ++ add x0, x0, :lo12:.LC156 ++ ldrh w3, [x7, x25] ++ bl printk ++ ldrh w0, [x24, 1372] ++ cmp w0, 40 ++ bls .L2963 ++ ldr x0, [x24, 520] ++ ldrh w0, [x0, x25] ++ cmp w0, 32 ++ bls .L2963 ++ strh wzr, [x24, 1372] ++.L2963: ++ add x21, x21, :lo12:.LANCHOR4 ++ mov w0, 6 ++ strh w0, [x21, 1984] ++.L2956: ++ cmp w23, 0 ++ mov w1, 65535 ++ add x0, x19, :lo12:.LANCHOR2 ++ ccmp w20, w1, 0, eq ++ bne .L2978 ++ ldrh w2, [x0, 552] ++ cmp w2, 24 ++ bhi .L3055 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ cmp w2, 16 ++ ldrh w21, [x0, 2544] ++ bls .L2980 ++ lsr w21, w21, 5 ++.L2979: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x1, 1364] ++ cmp w0, w2 ++ bcs .L2983 ++ ldrh w0, [x1, 656] ++ mov w2, 65535 ++ cmp w0, w2 ++ bne .L2984 ++ ldrh w2, [x1, 1448] ++ cmp w2, w0 ++ bne .L2984 ++ adrp x0, .LANCHOR4+1984 ++ ldrh w0, [x0, #:lo12:.LANCHOR4+1984] ++ cbnz w0, .L2985 ++ adrp x2, .LANCHOR0+2616 ++ ldr w3, [x1, 716] ++ ldr w2, [x2, #:lo12:.LANCHOR0+2616] ++ add w2, w2, w2, lsl 1 ++ cmp w3, w2, lsr 2 ++ bcs .L2986 ++.L2985: ++ add x2, x19, :lo12:.LANCHOR2 ++ ldrh w1, [x2, 780] ++ add w1, w1, w1, lsl 1 ++ asr w1, w1, 2 ++ strh w1, [x2, 1364] ++.L2987: ++ add x19, x19, :lo12:.LANCHOR2 ++ str wzr, [x19, 1376] ++.L2948: ++ 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 ++.L2950: ++ ldrh w1, [x2, 656] ++ cmp w1, w0 ++ beq .L2953 ++ mov w0, w20 ++ bl FtlGcFreeTempBlock ++ cbz w0, .L2953 ++ mov w0, w20 ++ b .L2948 ++.L2951: ++ ldrh w1, [x0, 1448] ++ cmp w1, w2 ++ bne .L2952 ++ ldrh w3, [x0, 1452] ++ cmp w3, w1 ++ beq .L2952 ++ ldrh w2, [x0, 1454] ++ cmp w2, w1 ++ beq .L2952 ++ mov w1, -1 ++ strh w4, [x0, 1448] ++ strh w3, [x0, 1450] ++ strh w2, [x0, 1452] ++ strh w1, [x0, 1454] ++ b .L2952 ++.L2959: ++ cmp w0, 5 ++ bhi .L2960 ++ mov w0, 18 ++ b .L3096 ++.L2962: ++ mov w0, 1 ++ strh w0, [x24, 1372] ++.L2964: ++ bl GetSwlReplaceBlock ++ and w20, w0, 65535 ++ mov w0, 65535 ++ cmp w20, w0 ++ bne .L2956 ++ add x21, x21, :lo12:.LANCHOR4 ++ strh wzr, [x21, 1984] ++.L2954: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w20, 65535 ++ ldrh w0, [x0, 800] ++ cmp w0, w20 ++ bne .L2956 ++.L3043: ++ add x24, x19, :lo12:.LANCHOR2 ++ mov w0, 65535 ++ ldrh w20, [x24, 656] ++ cmp w20, w0 ++ bne .L3050 ++ ldrh w25, [x24, 1448] ++ cmp w25, w20 ++ bne .L2956 ++ ldrh w0, [x24, 552] ++ mov w1, 1024 ++ cmp w0, 24 ++ mov w0, 5120 ++ csel w0, w0, w1, cc ++ ldr w1, [x24, 1368] ++ cmp w1, w0 ++ bls .L2956 ++ adrp x0, .LANCHOR4+1984 ++ str wzr, [x24, 1368] ++ strh wzr, [x0, #:lo12:.LANCHOR4+1984] ++ bl GetSwlReplaceBlock ++ and w20, w0, 65535 ++ cmp w20, w25 ++ bne .L3053 ++ ldrh w1, [x24, 552] ++ ldrh w0, [x24, 1366] ++ cmp w1, w0 ++ bcs .L2967 ++ mov w0, 64 ++ bl List_get_gc_head_node ++ and x0, x0, 65535 ++ cmp w0, w20 ++ beq .L2969 ++ ldr w1, [x24, 3556] ++ adrp x5, .LANCHOR0 ++ cbnz w1, .L2970 ++ add x1, x5, :lo12:.LANCHOR0 ++ ldrh w2, [x1, 2492] ++ cmp w2, 3 ++ beq .L2970 ++ ldr w2, [x24, 1360] ++ cbnz w2, .L2970 ++ ldr w2, [x1, 2372] ++ cbnz w2, .L2970 ++ ldrb w1, [x1, 204] ++ cbz w1, .L2971 ++.L2970: ++ add x1, x19, :lo12:.LANCHOR2 ++ add x2, x5, :lo12:.LANCHOR0 ++ ldr x1, [x1, 520] ++ ldrh w3, [x1, x0, lsl 1] ++ ldrh w0, [x2, 2546] ++ ldrh w1, [x2, 2472] ++ ldrh w2, [x2, 2492] ++ cmp w2, 3 ++ mul w1, w1, w0 ++ lsr w0, w0, 1 ++ csel w0, w0, wzr, eq ++ add w0, w0, w1 ++ cmp w3, w0 ++ bgt .L2973 ++ mov w0, 0 ++ bl List_get_gc_head_node ++ add x5, x5, :lo12:.LANCHOR0 ++ add x1, x19, :lo12:.LANCHOR2 ++ and w21, w0, 65535 ++ ldr w0, [x5, 2616] ++ ldr w2, [x1, 716] ++ add w0, w0, w0, lsl 1 ++ cmp w2, w0, lsr 2 ++ bls .L2974 ++ mov w0, 128 ++.L3097: ++ strh w0, [x1, 1366] ++.L2975: ++ mov w0, 65535 ++ cmp w21, w0 ++ beq .L2969 ++.L2966: ++ add x0, x19, :lo12:.LANCHOR2 ++ ubfiz x1, x21, 1, 32 ++ mov w20, w21 ++ ldr x3, [x0, 440] ++ ldr x2, [x0, 520] ++ ldrh w5, [x0, 1364] ++ ldrh w4, [x3, x1] ++ ldrh w3, [x2, x1] ++ mov w1, w21 ++ ldrh w2, [x0, 552] ++ adrp x0, .LC157 ++ add x0, x0, :lo12:.LC157 ++ bl printk ++ b .L2969 ++.L2974: ++ mov w0, 160 ++ b .L3097 ++.L2973: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, 128 ++.L3098: ++ strh w1, [x0, 1366] ++.L2969: ++ bl FtlGcReFreshBadBlk ++ b .L2956 ++.L2971: ++ ldr x1, [x24, 520] ++ ldrh w0, [x1, x0, lsl 1] ++ cmp w0, 7 ++ bhi .L2976 ++ mov w0, 0 ++ bl List_get_gc_head_node ++ and w21, w0, 65535 ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, 128 ++ strh w1, [x0, 1366] ++ b .L2975 ++.L2976: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, 64 ++ b .L3098 ++.L2967: ++ mov w0, 80 ++ strh w0, [x24, 1366] ++ b .L2969 ++.L3053: ++ mov w21, w20 ++ b .L2966 ++.L3050: ++ mov w20, w0 ++ b .L2956 ++.L2980: ++ cmp w2, 12 ++ bls .L2981 ++ lsr w21, w21, 4 ++ b .L2979 ++.L2981: ++ cmp w2, 8 ++ bls .L2979 ++ lsr w21, w21, 2 ++ b .L2979 ++.L3055: ++ mov w21, 1 ++ b .L2979 ++.L2986: ++ mov w2, 18 ++ strh w2, [x1, 1364] ++ b .L2987 ++.L2984: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x1, 780] ++ add w0, w0, w0, lsl 1 ++ asr w0, w0, 2 ++ strh w0, [x1, 1364] ++.L2983: ++ adrp x0, .LANCHOR0+2372 ++ ldr w0, [x0, #:lo12:.LANCHOR0+2372] ++ cbz w0, .L3057 ++ cmp w22, 2 ++ bhi .L3057 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++.L3057: ++ mov w20, 65535 ++ b .L2989 ++.L2978: ++ ldrh w2, [x0, 656] ++ cmp w2, w1 ++ bne .L2990 ++ ldrh w1, [x0, 1448] ++ cmp w1, w2 ++ bne .L2990 ++ cmp w20, w1 ++ bne .L2990 ++ ldrh w1, [x0, 800] ++ cmp w1, w20 ++ bne .L2990 ++ ldrh w2, [x0, 552] ++ adrp x21, .LANCHOR4 ++ ldrh w1, [x0, 1364] ++ str wzr, [x0, 1376] ++ cmp w2, w1 ++ bls .L2992 ++ add x1, x21, :lo12:.LANCHOR4 ++ ldrh w1, [x1, 1984] ++ cbnz w1, .L2993 ++ adrp x1, .LANCHOR0+2616 ++ ldr w2, [x0, 716] ++ ldr w1, [x1, #:lo12:.LANCHOR0+2616] ++ add w1, w1, w1, lsl 1 ++ cmp w2, w1, lsr 2 ++ bcs .L2994 ++.L2993: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x1, 780] ++ add w0, w0, w0, lsl 1 ++ asr w0, w0, 2 ++ strh w0, [x1, 1364] ++.L2995: ++ bl FtlReadRefresh ++ mov w0, 0 ++ bl List_get_gc_head_node ++ add x1, x19, :lo12:.LANCHOR2 ++ ubfiz x0, x0, 1, 16 ++ ldr x1, [x1, 520] ++ ldrh w0, [x1, x0] ++ cmp w0, 4 ++ bls .L2992 ++.L3099: ++ add x21, x21, :lo12:.LANCHOR4 ++ b .L3100 ++.L2994: ++ mov w1, 18 ++ strh w1, [x0, 1364] ++ b .L2995 ++.L2992: ++ add x21, x21, :lo12:.LANCHOR4 ++ ldrh w0, [x21, 1984] ++ cbnz w0, .L2990 ++ add x6, x19, :lo12:.LANCHOR2 ++ ldrh w5, [x6, 780] ++ add w0, w5, w5, lsl 1 ++ asr w0, w0, 2 ++ strh w0, [x6, 1364] ++ mov w0, 0 ++ bl List_get_gc_head_node ++ ldr x1, [x6, 520] ++ ubfiz x0, x0, 1, 16 ++ ldrh w2, [x1, x0] ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ ldrh w0, [x1, 2546] ++ ldrh w1, [x1, 2472] ++ mul w0, w0, w1 ++ mov w1, 2 ++ sdiv w0, w0, w1 ++ cmp w2, w0 ++ ble .L2997 ++ ldrh w0, [x6, 552] ++ sub w5, w5, #1 ++ cmp w0, w5 ++ blt .L2997 ++ bl FtlReadRefresh ++.L3100: ++ ldrh w0, [x21, 1984] ++ b .L2948 ++.L2997: ++ cbnz w2, .L2990 ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w0, -1 ++ bl decrement_vpc_count ++ ldrh w0, [x19, 552] ++ add w0, w0, 1 ++ b .L2948 ++.L2990: ++ adrp x0, .LANCHOR0+2372 ++ ldr w0, [x0, #:lo12:.LANCHOR0+2372] ++ cmp w0, 0 ++ cset w21, ne ++ add w21, w21, 1 ++.L2989: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w2, 65535 ++ ldrh w1, [x0, 800] ++ cmp w1, w2 ++ bne .L2999 ++ cmp w20, w1 ++ beq .L3000 ++ strh w20, [x0, 800] ++.L3001: ++ add x5, x19, :lo12:.LANCHOR2 ++ mov w1, 65535 ++ ldrh w0, [x5, 800] ++ strb wzr, [x5, 808] ++ cmp w0, w1 ++ beq .L2999 ++ bl IsBlkInGcList ++ cbz w0, .L3004 ++ mov w0, -1 ++ strh w0, [x5, 800] ++.L3004: ++ adrp x0, .LANCHOR0+204 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+204] ++ cbz w0, .L3005 ++ add x0, x19, :lo12:.LANCHOR2 ++ add x3, x0, 800 ++ ldrh w0, [x0, 800] ++ bl ftl_get_blk_mode ++ strb w0, [x3, 8] ++.L3005: ++ add x12, x19, :lo12:.LANCHOR2 ++ mov w0, 65535 ++ add x13, x12, 800 ++ ldrh w1, [x12, 800] ++ cmp w1, w0 ++ beq .L2999 ++ mov x0, x13 ++ bl make_superblock ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldrh w2, [x12, 800] ++ ldr x1, [x12, 520] ++ strh wzr, [x12, 802] ++ strb wzr, [x12, 806] ++ strh wzr, [x0, 1986] ++ ldrh w1, [x1, x2, lsl 1] ++ strh w1, [x0, 1988] ++.L2999: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrh w1, [x0, 800] ++ ldrh w2, [x0, 560] ++ cmp w2, w1 ++ beq .L3006 ++ ldrh w2, [x0, 608] ++ cmp w2, w1 ++ beq .L3006 ++ ldrh w0, [x0, 656] ++ cmp w0, w1 ++ bne .L3040 ++.L3006: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, -1 ++ strh w1, [x0, 800] ++.L3040: ++ add x22, x19, :lo12:.LANCHOR2 ++ mov w0, 65535 ++ ldrh w24, [x22, 800] ++ cmp w24, w0 ++ bne .L3008 ++ adrp x25, .LANCHOR0 ++ add x26, x25, :lo12:.LANCHOR0 ++ mov w27, 2 ++ str wzr, [x22, 1376] ++.L3009: ++ ldrh w5, [x22, 1372] ++ mov w0, w5 ++ bl List_get_gc_head_node ++ and w6, w0, 65535 ++ strh w6, [x22, 800] ++ cmp w6, w24 ++ bne .L3010 ++ strh wzr, [x22, 1372] ++ mov w0, 8 ++ b .L2948 ++.L3000: ++ ldrh w1, [x0, 1448] ++ cmp w1, w20 ++ beq .L3001 ++ ldr x2, [x0, 520] ++ ubfiz x1, x1, 1, 16 ++ ldrh w1, [x2, x1] ++ cbnz w1, .L3002 ++ mov w1, -1 ++ strh w1, [x0, 1448] ++.L3002: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrh w1, [x0, 1448] ++ strh w1, [x0, 800] ++ mov w1, -1 ++ strh w1, [x0, 1448] ++ b .L3001 ++.L3010: ++ mov w0, w6 ++ bl IsBlkInGcList ++ add w5, w5, 1 ++ cbz w0, .L3011 ++ strh w5, [x22, 1372] ++ b .L3009 ++.L3011: ++ ldrh w4, [x26, 2472] ++ ubfiz x1, x6, 1, 16 ++ ldrh w0, [x26, 2544] ++ and w5, w5, 65535 ++ ldr x2, [x22, 520] ++ strh w5, [x22, 1372] ++ mul w0, w0, w4 ++ ldrh w3, [x2, x1] ++ sdiv w4, w0, w27 ++ cmp w3, w4 ++ bgt .L3013 ++ cmp w5, 48 ++ bls .L3014 ++ cmp w3, 8 ++ bls .L3014 ++ ldrh w3, [x22, 1420] ++ cmp w3, 35 ++ bhi .L3014 ++.L3013: ++ strh wzr, [x22, 1372] ++.L3014: ++ ldrh w1, [x2, x1] ++ cmp w0, w1 ++ bgt .L3015 ++ cmp w20, w24 ++ bne .L3015 ++ ldrh w0, [x22, 1372] ++ cmp w0, 3 ++ bhi .L3015 ++ mov w0, -1 ++ strh w0, [x22, 800] ++ adrp x0, .LANCHOR4+1984 ++ strh wzr, [x22, 1372] ++ ldrh w0, [x0, #:lo12:.LANCHOR4+1984] ++ b .L2948 ++.L3015: ++ cbnz w1, .L3016 ++ mov w0, -1 ++ bl decrement_vpc_count ++ ldrh w0, [x22, 1372] ++ add w0, w0, 1 ++ strh w0, [x22, 1372] ++ b .L3009 ++.L3016: ++ add x25, x25, :lo12:.LANCHOR0 ++ add x3, x19, :lo12:.LANCHOR2 ++ add x3, x3, 800 ++ ldrb w0, [x25, 204] ++ strb wzr, [x3, 8] ++ cbz w0, .L3017 ++ mov w0, w6 ++ bl ftl_get_blk_mode ++ strb w0, [x3, 8] ++.L3017: ++ add x13, x19, :lo12:.LANCHOR2 ++ add x12, x13, 800 ++ mov x0, x12 ++ bl make_superblock ++ ldrh w2, [x13, 800] ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldr x1, [x13, 520] ++ strh wzr, [x0, 1986] ++ ldrh w1, [x1, x2, lsl 1] ++ strh w1, [x0, 1988] ++ strh wzr, [x13, 802] ++ strb wzr, [x13, 806] ++.L3008: ++ cmp w23, 1 ++ bne .L3018 ++ bl FtlReadRefresh ++.L3018: ++ add x1, x19, :lo12:.LANCHOR2 ++ mov w0, 1 ++ adrp x22, .LANCHOR0 ++ str w0, [x1, 3560] ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w2, [x0, 204] ++ ldrh w24, [x0, 2544] ++ cbz w2, .L3019 ++ ldrb w1, [x1, 808] ++ cmp w1, 1 ++ bne .L3019 ++ ldrh w24, [x0, 2546] ++.L3019: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 802] ++ add w1, w0, w21 ++ cmp w1, w24 ++ ble .L3020 ++ sub w21, w24, w0 ++ and w21, w21, 65535 ++.L3020: ++ adrp x0, .LANCHOR4 ++ mov w25, 0 ++ add x0, x0, :lo12:.LANCHOR4 ++ str x0, [x29, 136] ++.L3021: ++ cmp w21, w25, uxth ++ bls .L3028 ++ add x0, x22, :lo12:.LANCHOR0 ++ mov w6, 0 ++ mov w2, 0 ++ mov w8, 65535 ++ mov w7, 56 ++ ldrh w9, [x0, 2472] ++ add x0, x19, :lo12:.LANCHOR2 ++ add x3, x0, 816 ++ ldrh w4, [x0, 802] ++ add w4, w4, w25 ++ b .L3029 ++.L3023: ++ ldrh w1, [x3] ++ cmp w1, w8 ++ beq .L3022 ++ ldr x5, [x0, 1408] ++ orr w1, w4, w1, lsl 10 ++ umaddl x5, w6, w7, x5 ++ add w6, w6, 1 ++ and w6, w6, 65535 ++ str w1, [x5, 4] ++.L3022: ++ add w2, w2, 1 ++ add x3, x3, 2 ++ and w2, w2, 65535 ++.L3029: ++ cmp w2, w9 ++ bne .L3023 ++ add x26, x19, :lo12:.LANCHOR2 ++ mov w1, w6 ++ str w6, [x29, 128] ++ add x27, x26, 656 ++ mov x28, 0 ++ ldrb w2, [x26, 808] ++ ldr x0, [x26, 1408] ++ bl FlashReadPages ++ ldr w6, [x29, 128] ++ mov w0, 56 ++ umull x0, w6, w0 ++ str x0, [x29, 128] ++.L3024: ++ ldr x0, [x29, 128] ++ cmp x0, x28 ++ bne .L3027 ++ add w25, w25, 1 ++ b .L3021 ++.L3027: ++ ldr x0, [x26, 1408] ++ add x1, x0, x28 ++ ldr w0, [x0, x28] ++ cmn w0, #1 ++ beq .L3025 ++ ldr x5, [x1, 16] ++ mov w0, 61589 ++ ldrh w1, [x5] ++ cmp w1, w0 ++ bne .L3025 ++ ldr w0, [x5, 8] ++ mov w2, 0 ++ add x1, x29, 152 ++ str x5, [x29, 120] ++ bl log2phys ++ ldr x0, [x26, 1408] ++ ldr w1, [x29, 152] ++ add x0, x0, x28 ++ ldr x5, [x29, 120] ++ and w1, w1, 2147483647 ++ ldr w2, [x0, 4] ++ cmp w1, w2 ++ bne .L3025 ++ ldr x1, [x29, 136] ++ ldr x2, [x29, 136] ++ ldr x6, [x26, 3592] ++ ldr w0, [x0, 24] ++ ldrh w1, [x1, 1986] ++ str x5, [x29, 104] ++ add w1, w1, 1 ++ strh w1, [x2, 1986] ++ ldr w1, [x26, 1380] ++ mov w2, 56 ++ str w2, [x29, 116] ++ nop // between mem op and mult-accumulate ++ umaddl x1, w1, w2, x6 ++ str x1, [x29, 120] ++ str w0, [x1, 24] ++ bl Ftl_get_new_temp_ppa ++ ldr x1, [x29, 120] ++ ldr w2, [x29, 116] ++ ldr x5, [x29, 104] ++ str w0, [x1, 4] ++ ldr w0, [x26, 1380] ++ ldr x1, [x26, 3592] ++ umaddl x0, w0, w2, x1 ++ ldr x1, [x26, 1408] ++ add x1, x1, x28 ++ ldr x2, [x1, 8] ++ str x2, [x0, 8] ++ ldr x1, [x1, 16] ++ str x1, [x0, 16] ++ ldr w0, [x29, 152] ++ mov w1, 1 ++ str w0, [x5, 12] ++ ldrh w0, [x27] ++ strh w0, [x5, 2] ++ ldr w0, [x26, 756] ++ str w0, [x5, 4] ++ ldr w0, [x26, 1380] ++ add w0, w0, 1 ++ str w0, [x26, 1380] ++ ldr x0, [x26, 1408] ++ add x0, x0, x28 ++ bl FtlGcBufAlloc ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 204] ++ cbnz w0, .L3026 ++ ldrb w1, [x27, 7] ++ ldr w0, [x26, 1380] ++ cmp w1, w0 ++ beq .L3026 ++ ldrh w0, [x27, 4] ++ cbnz w0, .L3025 ++.L3026: ++ bl Ftl_gc_temp_data_write_back ++ cbz w0, .L3025 ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w0, -1 ++ strh w0, [x19, 800] ++ adrp x0, .LANCHOR4 ++ add x26, x0, :lo12:.LANCHOR4 ++ strh wzr, [x19, 802] ++ str wzr, [x19, 3560] ++ ldrh w0, [x26, 1984] ++ b .L2948 ++.L3025: ++ add x28, x28, 56 ++ b .L3024 ++.L3028: ++ add x25, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x25, 802] ++ add w21, w21, w0 ++ and w21, w21, 65535 ++ strh w21, [x25, 802] ++ cmp w24, w21 ++ bhi .L3030 ++ ldr w0, [x25, 1380] ++ adrp x21, .LANCHOR4 ++ cbz w0, .L3031 ++ bl Ftl_gc_temp_data_write_back ++ cbz w0, .L3031 ++ str wzr, [x25, 3560] ++ b .L3099 ++.L3031: ++ add x21, x21, :lo12:.LANCHOR4 ++ ldrh w0, [x21, 1986] ++ cbnz w0, .L3032 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrh w2, [x0, 800] ++ ldr x1, [x0, 520] ++ ldrh w1, [x1, x2, lsl 1] ++ cbz w1, .L3032 ++ add x25, x22, :lo12:.LANCHOR0 ++ mov x24, x0 ++ mov w21, 0 ++.L3033: ++ ldr w0, [x25, 2616] ++ cmp w21, w0 ++ bcs .L3038 ++ mov w2, 0 ++ add x1, x29, 156 ++ mov w0, w21 ++ bl log2phys ++ ldr w0, [x29, 156] ++ cmn w0, #1 ++ beq .L3034 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ ldrh w1, [x24, 800] ++ cmp w1, w0, uxth ++ bne .L3034 ++.L3038: ++ add x0, x22, :lo12:.LANCHOR0 ++ ldr w0, [x0, 2616] ++ cmp w21, w0 ++ bcc .L3032 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrh w2, [x0, 800] ++ ldr x1, [x0, 520] ++ strh wzr, [x1, x2, lsl 1] ++ ldrh w0, [x0, 800] ++ bl update_vpc_list ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ bl FtlVpcTblFlush ++.L3032: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, -1 ++ strh w1, [x0, 800] ++.L3030: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x1, 552] ++ cmp w0, 2 ++ bhi .L3039 ++ add x22, x22, :lo12:.LANCHOR0 ++ ldrh w21, [x22, 2544] ++ b .L3040 ++.L3034: ++ add w21, w21, 1 ++ b .L3033 ++.L3039: ++ str wzr, [x1, 3560] ++ adrp x1, .LANCHOR4+1984 ++ ldrh w1, [x1, #:lo12:.LANCHOR4+1984] ++ cmp w1, 0 ++ csinc w0, w1, w0, ne ++ b .L2948 ++.L3047: ++ mov w0, 0 ++ b .L2948 ++ .size ftl_do_gc, .-ftl_do_gc ++ .align 2 ++ .global FtlCacheWriteBack ++ .type FtlCacheWriteBack, %function ++FtlCacheWriteBack: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR2 ++ add x0, x23, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr w24, [x0, 424] ++ cbnz w24, .L3103 ++ adrp x22, .LANCHOR0 ++ add x0, x22, :lo12:.LANCHOR0 ++ ldr w1, [x0, 2600] ++ cbz w1, .L3103 ++ ldrb w0, [x0, 204] ++ adrp x2, .LANCHOR4+1992 ++ ldr x19, [x2, #:lo12:.LANCHOR4+1992] ++ cbz w0, .L3128 ++ ldrb w0, [x19, 8] ++ cmp w0, 1 ++ cset w25, eq ++.L3105: ++ add x20, x22, :lo12:.LANCHOR0 ++ ldrb w3, [x19, 9] ++ adrp x26, .LC158 ++ mov w2, w25 ++ mov w21, 0 ++ mov w27, 56 ++ ldr x0, [x20, 2608] ++ add x26, x26, :lo12:.LC158 ++ bl FlashProgPages ++.L3106: ++ ldr w0, [x20, 2600] ++ cmp w21, w0 ++ bcc .L3113 ++.L3125: ++ add x22, x22, :lo12:.LANCHOR0 ++ str wzr, [x22, 2600] ++.L3103: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L3128: ++ mov w25, 0 ++ b .L3105 ++.L3113: ++ umull x28, w21, w27 ++ ldr x0, [x20, 2608] ++ add x3, x0, x28 ++ ldr w0, [x0, x28] ++ cmn w0, #1 ++ bne .L3107 ++ add x21, x22, :lo12:.LANCHOR0 ++ add x26, x23, :lo12:.LANCHOR2 ++.L3108: ++ ldr w0, [x21, 2600] ++ cmp w24, w0 ++ bcc .L3123 ++ add x23, x23, :lo12:.LANCHOR2 ++ mov w19, 16386 ++.L3126: ++ ldrh w0, [x23, 1456] ++ cbz w0, .L3125 ++ mov w1, 1 ++ mov w0, w1 ++ bl ftl_do_gc ++ subs w19, w19, #1 ++ bne .L3126 ++ b .L3125 ++.L3107: ++ ldr w0, [x3, 4] ++ cbnz w25, .L3109 ++.L3142: ++ str w0, [x29, 108] ++ mov w2, 1 ++ ldr w0, [x3, 24] ++ add x1, x29, 108 ++ bl log2phys ++ ldr x0, [x20, 2608] ++ add x0, x0, x28 ++ ldr x0, [x0, 16] ++ ldr w0, [x0, 12] ++ cmn w0, #1 ++ beq .L3111 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ and w1, w0, 65535 ++ add x0, x23, :lo12:.LANCHOR2 ++ ubfiz x2, x1, 1, 16 ++ mov w28, w1 ++ ldr x0, [x0, 520] ++ ldrh w0, [x0, x2] ++ cbnz w0, .L3112 ++ mov w2, 0 ++ mov x0, x26 ++ bl printk ++.L3112: ++ mov w0, w28 ++ bl decrement_vpc_count ++.L3111: ++ add w21, w21, 1 ++ b .L3106 ++.L3109: ++ orr w0, w0, -2147483648 ++ b .L3142 ++.L3123: ++ mov w20, 56 ++ ldr x0, [x21, 2608] ++ mov w1, -1 ++ mov w27, 1 ++ umull x20, w24, w20 ++ str w1, [x0, x20] ++.L3114: ++ ldr x0, [x21, 2608] ++ add x3, x0, x20 ++ ldr w0, [x0, x20] ++ cmn w0, #1 ++ ldr w0, [x3, 4] ++ beq .L3118 ++ cbnz w25, .L3119 ++.L3143: ++ str w0, [x29, 108] ++ mov w2, 1 ++ ldr w0, [x3, 24] ++ add x1, x29, 108 ++ bl log2phys ++ ldr x0, [x21, 2608] ++ add x20, x0, x20 ++ ldr x0, [x20, 16] ++ ldr w0, [x0, 12] ++ cmn w0, #1 ++ beq .L3121 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ ldr x2, [x26, 520] ++ and w1, w0, 65535 ++ ubfiz x0, x1, 1, 16 ++ mov w20, w1 ++ ldrh w0, [x2, x0] ++ cbnz w0, .L3122 ++ adrp x0, .LC158 ++ mov w2, 0 ++ add x0, x0, :lo12:.LC158 ++ bl printk ++.L3122: ++ mov w0, w20 ++ bl decrement_vpc_count ++.L3121: ++ add w24, w24, 1 ++ b .L3108 ++.L3118: ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ ldrh w1, [x19] ++ cmp w1, w0, uxth ++ bne .L3115 ++ ldr x2, [x26, 520] ++ ubfiz x1, x1, 1, 16 ++ ldrh w3, [x19, 4] ++ ldrh w0, [x2, x1] ++ sub w0, w0, w3 ++ strh w0, [x2, x1] ++ strb wzr, [x19, 6] ++ ldrh w0, [x21, 2544] ++ strh w0, [x19, 2] ++ strh wzr, [x19, 4] ++.L3115: ++ ldrh w0, [x19, 4] ++ cbnz w0, .L3116 ++ mov x0, x19 ++ bl allocate_new_data_superblock ++.L3116: ++ ldr w0, [x26, 944] ++ add w0, w0, 1 ++ str w0, [x26, 944] ++ ldr x0, [x21, 2608] ++ add x0, x0, x20 ++ ldr w0, [x0, 4] ++ lsr w0, w0, 10 ++ bl FtlGcMarkBadPhyBlk ++ mov x0, x19 ++ bl get_new_active_ppa ++ ldr x1, [x21, 2608] ++ mov w2, w25 ++ str w0, [x29, 108] ++ add x1, x1, x20 ++ str w0, [x1, 4] ++ mov w1, 1 ++ ldrb w3, [x19, 9] ++ ldr x0, [x21, 2608] ++ add x0, x0, x20 ++ bl FlashProgPages ++ ldr x0, [x21, 2608] ++ ldr w0, [x0, x20] ++ cmn w0, #1 ++ bne .L3117 ++ str w27, [x26, 424] ++.L3117: ++ ldr w0, [x26, 424] ++ cbz w0, .L3114 ++ b .L3103 ++.L3119: ++ orr w0, w0, -2147483648 ++ b .L3143 ++ .size FtlCacheWriteBack, .-FtlCacheWriteBack ++ .align 2 ++ .global FtlSysFlush ++ .type FtlSysFlush, %function ++FtlSysFlush: ++ adrp x0, .LANCHOR2+424 ++ ldr w0, [x0, #:lo12:.LANCHOR2+424] ++ cbnz w0, .L3147 ++ stp x29, x30, [sp, -32]! ++ adrp x0, .LANCHOR1+504 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ ldr w19, [x0, #:lo12:.LANCHOR1+504] ++ cmp w19, 1 ++ bne .L3145 ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ mov w0, w19 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L3145: ++ mov w0, 0 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L3147: ++ mov w0, 0 ++ ret ++ .size FtlSysFlush, .-FtlSysFlush ++ .align 2 ++ .global FtlDeInit ++ .type FtlDeInit, %function ++FtlDeInit: ++ adrp x0, .LANCHOR1+504 ++ ldr w0, [x0, #:lo12:.LANCHOR1+504] ++ cmp w0, 1 ++ bne .L3153 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl FtlSysFlush ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L3153: ++ mov w0, 0 ++ 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 rk_ftl_de_init ++ .type rk_ftl_de_init, %function ++rk_ftl_de_init: ++ stp x29, x30, [sp, -16]! ++ mov w1, 0 ++ adrp x0, .LC159 ++ add x0, x0, :lo12:.LC159 ++ add x29, sp, 0 ++ bl printk ++ bl ftl_deinit ++ ldp x29, x30, [sp], 16 ++ ret ++ .size rk_ftl_de_init, .-rk_ftl_de_init ++ .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 rk_ftl_cache_write_back ++ .type rk_ftl_cache_write_back, %function ++rk_ftl_cache_write_back: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl FtlCacheWriteBack ++ ldp x29, x30, [sp], 16 ++ ret ++ .size rk_ftl_cache_write_back, .-rk_ftl_cache_write_back ++ .align 2 ++ .global ftl_discard ++ .type ftl_discard, %function ++ftl_discard: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w20, w0 ++ stp x21, x22, [sp, 32] ++ adrp x0, .LANCHOR0 ++ add x21, x0, :lo12:.LANCHOR0 ++ str x23, [sp, 48] ++ mov w19, w1 ++ ldr w1, [x21, 2584] ++ cmp w1, w20 ++ bls .L3173 ++ cmp w1, w19 ++ bcc .L3173 ++ mov x23, x0 ++ add w0, w20, w19 ++ cmp w1, w0 ++ bcc .L3173 ++ cmp w19, 31 ++ bls .L3175 ++ adrp x22, .LANCHOR2 ++ add x0, x22, :lo12:.LANCHOR2 ++ ldr w0, [x0, 424] ++ cbnz w0, .L3175 ++ bl FtlCacheWriteBack ++ ldrh w0, [x21, 2550] ++ udiv w21, w20, w0 ++ msub w20, w0, w21, w20 ++ ands w20, w20, 65535 ++ beq .L3166 ++ sub w20, w0, w20 ++ add w21, w21, 1 ++ cmp w20, w19 ++ csel w20, w20, w19, ls ++ sub w19, w19, w20, uxth ++.L3166: ++ add x20, x23, :lo12:.LANCHOR0 ++ adrp x23, .LANCHOR4 ++ add x23, x23, :lo12:.LANCHOR4 ++ mov w0, -1 ++ str w0, [x29, 76] ++.L3167: ++ ldrh w0, [x20, 2550] ++ cmp w19, w0 ++ bcs .L3169 ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldr w1, [x0, 2000] ++ cmp w1, 32 ++ bls .L3175 ++ str wzr, [x0, 2000] ++ bl l2p_flush ++ bl FtlVpcTblFlush ++.L3175: ++ mov w0, 0 ++ b .L3164 ++.L3169: ++ mov w2, 0 ++ add x1, x29, 72 ++ mov w0, w21 ++ bl log2phys ++ ldr w0, [x29, 72] ++ cmn w0, #1 ++ beq .L3168 ++ add x1, x22, :lo12:.LANCHOR2 ++ ldr w0, [x23, 2000] ++ mov w2, 1 ++ add w0, w0, 1 ++ str w0, [x23, 2000] ++ ldr w0, [x1, 724] ++ add w0, w0, 1 ++ str w0, [x1, 724] ++ add x1, x29, 76 ++ mov w0, w21 ++ bl log2phys ++ ldr w0, [x29, 72] ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ bl decrement_vpc_count ++.L3168: ++ ldrh w0, [x20, 2550] ++ add w21, w21, 1 ++ sub w19, w19, w0 ++ b .L3167 ++.L3173: ++ mov w0, -1 ++.L3164: ++ 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 FtlDiscard ++ .type FtlDiscard, %function ++FtlDiscard: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl ftl_discard ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FtlDiscard, .-FtlDiscard ++ .align 2 ++ .global ftl_read ++ .type ftl_read, %function ++ftl_read: ++ sub sp, sp, #208 ++ adrp x4, .LANCHOR1+504 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ stp x21, x22, [sp, 48] ++ ldr w20, [x4, #:lo12:.LANCHOR1+504] ++ stp x23, x24, [sp, 64] ++ stp x25, x26, [sp, 80] ++ cmp w20, 1 ++ stp x27, x28, [sp, 96] ++ bne .L3210 ++ mov x23, x3 ++ mov w24, w2 ++ mov w19, w1 ++ cmp w0, 16 ++ bne .L3187 ++ mov x2, x3 ++ mov w1, w24 ++ add w0, w19, 256 ++ bl FtlVendorPartRead ++ mov w25, w0 ++.L3185: ++ mov w0, w25 ++ 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, 208 ++ ret ++.L3187: ++ adrp x21, .LANCHOR0 ++ add x1, x21, :lo12:.LANCHOR0 ++ ldr w0, [x1, 2584] ++ cmp w19, w0 ++ bcs .L3210 ++ cmp w2, w0 ++ bhi .L3210 ++ add w2, w19, w2 ++ str w2, [x29, 148] ++ cmp w0, w2 ++ bcc .L3210 ++ ldrh w0, [x1, 2550] ++ sub w26, w2, #1 ++ adrp x7, .LANCHOR2 ++ udiv w27, w19, w0 ++ udiv w26, w26, w0 ++ sub w20, w20, w27 ++ add w0, w20, w26 ++ str w0, [x29, 172] ++ add x0, x7, :lo12:.LANCHOR2 ++ ldr w2, [x29, 172] ++ ldr w1, [x0, 748] ++ add w1, w1, w24 ++ str w1, [x0, 748] ++ ldr w1, [x0, 720] ++ add w1, w1, w2 ++ str w1, [x0, 720] ++ mov w1, w26 ++ mov w0, w27 ++ bl FtlCacheMetchLpa ++ str x7, [x29, 160] ++ cbz w0, .L3188 ++ bl FtlCacheWriteBack ++.L3188: ++ mov w22, w27 ++ adrp x0, .LC147 ++ mov w28, 0 ++ add x0, x0, :lo12:.LC147 ++ mov w25, 0 ++ str x0, [x29, 104] ++ str wzr, [x29, 156] ++ str wzr, [x29, 168] ++.L3189: ++ ldr w0, [x29, 172] ++ cbnz w0, .L3206 ++ ldr x0, [x29, 160] ++ add x0, x0, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 1456] ++ cbz w0, .L3185 ++ mov w1, 1 ++ mov w0, 0 ++ bl ftl_do_gc ++ b .L3185 ++.L3206: ++ mov w2, 0 ++ add x1, x29, 188 ++ mov w0, w22 ++ bl log2phys ++ ldr w4, [x29, 188] ++ cmn w4, #1 ++ bne .L3190 ++ add x5, x21, :lo12:.LANCHOR0 ++ mov w20, 0 ++.L3191: ++ ldrh w0, [x5, 2550] ++ cmp w20, w0 ++ bcc .L3193 ++.L3194: ++ ldr w0, [x29, 172] ++ add w22, w22, 1 ++ subs w0, w0, #1 ++ str w0, [x29, 172] ++ beq .L3198 ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 2472] ++ cmp w28, w0, lsl 3 ++ bne .L3189 ++.L3198: ++ cbz w28, .L3189 ++ ldr x0, [x29, 160] ++ mov w1, w28 ++ mov w2, 0 ++ add x8, x0, :lo12:.LANCHOR2 ++ mov x20, x8 ++ ldr x0, [x8, 3584] ++ bl FlashReadPages ++ ldr w0, [x29, 156] ++ lsl w0, w0, 9 ++ str w0, [x29, 132] ++ ldr w0, [x29, 152] ++ lsl w0, w0, 9 ++ str x0, [x29, 136] ++ ldr w0, [x29, 168] ++ lsl w0, w0, 9 ++ str w0, [x29, 144] ++ mov w0, 56 ++ umull x0, w28, w0 ++ mov x28, 0 ++ str x0, [x29, 120] ++ add x0, x21, :lo12:.LANCHOR0 ++ str x0, [x29, 112] ++.L3205: ++ ldr x0, [x20, 3584] ++ add x0, x0, x28 ++ ldr w1, [x0, 24] ++ cmp w27, w1 ++ bne .L3200 ++ ldr x1, [x0, 8] ++ ldr x0, [x20, 3640] ++ cmp x1, x0 ++ bne .L3201 ++ ldr x0, [x29, 136] ++ ldr w2, [x29, 144] ++ add x1, x1, x0 ++ mov x0, x23 ++.L3226: ++ bl ftl_memcpy ++.L3201: ++ ldr x1, [x20, 3584] ++ add x0, x1, x28 ++ ldr w2, [x1, x28] ++ cmn w2, #1 ++ bne .L3202 ++ ldr w1, [x20, 920] ++ mov w25, w2 ++ add w1, w1, 1 ++ str w1, [x20, 920] ++.L3202: ++ ldr x1, [x0, 16] ++ ldr w2, [x0, 24] ++ ldr w1, [x1, 8] ++ cmp w2, w1 ++ beq .L3203 ++ ldr w1, [x20, 920] ++ add w1, w1, 1 ++ str w1, [x20, 920] ++ ldp x2, x1, [x0, 8] ++ ldr w3, [x2, 4] ++ str w3, [sp] ++ ldp w3, w4, [x1] ++ ldp w5, w6, [x1, 8] ++ ldr w7, [x2] ++ ldr w1, [x0, 24] ++ ldr w2, [x0, 4] ++ ldr x0, [x29, 104] ++ bl printk ++.L3203: ++ ldr x0, [x20, 3584] ++ add x1, x0, x28 ++ ldr w0, [x0, x28] ++ cmp w0, 256 ++ bne .L3204 ++ ldr w0, [x1, 4] ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++.L3204: ++ ldr x0, [x29, 120] ++ add x28, x28, 56 ++ cmp x0, x28 ++ bne .L3205 ++ mov w28, 0 ++ b .L3189 ++.L3193: ++ madd w0, w22, w0, w20 ++ cmp w19, w0 ++ bhi .L3192 ++ ldr w1, [x29, 148] ++ cmp w1, w0 ++ bls .L3192 ++ sub w0, w0, w19 ++ str x5, [x29, 136] ++ lsl w0, w0, 9 ++ mov w2, 512 ++ mov w1, 0 ++ add x0, x23, x0 ++ bl ftl_memset ++ ldr x5, [x29, 136] ++.L3192: ++ add w20, w20, 1 ++ b .L3191 ++.L3190: ++ mov w0, 56 ++ cmp w22, w27 ++ umull x1, w28, w0 ++ ldr x0, [x29, 160] ++ add x0, x0, :lo12:.LANCHOR2 ++ ldr x2, [x0, 3584] ++ add x2, x2, x1 ++ str w4, [x2, 4] ++ ldr x2, [x0, 3584] ++ add x2, x2, x1 ++ bne .L3195 ++ ldr x0, [x0, 3640] ++ str x0, [x2, 8] ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 2550] ++ udiv w4, w19, w0 ++ msub w3, w4, w0, w19 ++ str w3, [x29, 152] ++ sub w4, w0, w3 ++ cmp w24, w4 ++ csel w3, w24, w4, ls ++ str w3, [x29, 168] ++ cmp w3, w0 ++ bne .L3196 ++ str x23, [x2, 8] ++.L3196: ++ ldr x0, [x29, 160] ++ add x2, x0, :lo12:.LANCHOR2 ++ ldr x0, [x2, 3584] ++ ldr x2, [x2, 3664] ++ add x1, x0, x1 ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 2556] ++ str w22, [x1, 24] ++ mul w0, w0, w28 ++ add w28, w28, 1 ++ and x0, x0, 4294967292 ++ add x0, x2, x0 ++ str x0, [x1, 16] ++ b .L3194 ++.L3195: ++ cmp w22, w26 ++ bne .L3197 ++ ldr x0, [x0, 3648] ++ str x0, [x2, 8] ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr w3, [x29, 148] ++ ldrh w4, [x0, 2550] ++ mul w0, w22, w4 ++ sub w3, w3, w0 ++ str w3, [x29, 156] ++ cmp w4, w3 ++ bne .L3196 ++.L3225: ++ sub w0, w0, w19 ++ lsl w0, w0, 9 ++ add x0, x23, x0 ++ str x0, [x2, 8] ++ b .L3196 ++.L3197: ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 2550] ++ mul w0, w0, w22 ++ b .L3225 ++.L3200: ++ cmp w26, w1 ++ bne .L3201 ++ ldr x1, [x0, 8] ++ ldr x0, [x20, 3648] ++ cmp x1, x0 ++ bne .L3201 ++ ldr x0, [x29, 112] ++ ldr w2, [x29, 132] ++ ldrh w0, [x0, 2550] ++ mul w0, w0, w26 ++ sub w0, w0, w19 ++ lsl w0, w0, 9 ++ add x0, x23, x0 ++ b .L3226 ++.L3210: ++ mov w25, -1 ++ b .L3185 ++ .size ftl_read, .-ftl_read ++ .align 2 ++ .global ftl_vendor_read ++ .type ftl_vendor_read, %function ++ftl_vendor_read: ++ stp x29, x30, [sp, -16]! ++ mov x3, x2 ++ mov w2, w1 ++ mov w1, w0 ++ add x29, sp, 0 ++ mov w0, 16 ++ bl ftl_read ++ ldp x29, x30, [sp], 16 ++ ret ++ .size ftl_vendor_read, .-ftl_vendor_read ++ .align 2 ++ .global FlashBootVendorRead ++ .type FlashBootVendorRead, %function ++FlashBootVendorRead: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ str x21, [sp, 32] ++ mov w20, w1 ++ mov x21, x2 ++ bl rknand_device_lock ++ adrp x0, .LANCHOR1+504 ++ ldr w0, [x0, #:lo12:.LANCHOR1+504] ++ cmp w0, 1 ++ bne .L3231 ++ mov w0, w19 ++ mov x2, x21 ++ mov w1, w20 ++ bl ftl_vendor_read ++ mov w19, w0 ++.L3230: ++ bl rknand_device_unlock ++ ldr x21, [sp, 32] ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L3231: ++ mov w19, -1 ++ b .L3230 ++ .size FlashBootVendorRead, .-FlashBootVendorRead ++ .align 2 ++ .global ftl_sys_read ++ .type ftl_sys_read, %function ++ftl_sys_read: ++ stp x29, x30, [sp, -16]! ++ mov x3, x2 ++ mov w2, w1 ++ add w1, w0, 256 ++ add x29, sp, 0 ++ mov w0, 16 ++ bl ftl_read ++ ldp x29, x30, [sp], 16 ++ ret ++ .size ftl_sys_read, .-ftl_sys_read ++ .align 2 ++ .global StorageSysDataLoad ++ .type StorageSysDataLoad, %function ++StorageSysDataLoad: ++ stp x29, x30, [sp, -32]! ++ mov w2, 512 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x1 ++ mov w1, 0 ++ mov w20, w0 ++ mov x0, x19 ++ bl ftl_memset ++ bl rknand_device_lock ++ mov x2, x19 ++ mov w1, 1 ++ mov w0, w20 ++ bl ftl_sys_read ++ mov w19, w0 ++ bl rknand_device_unlock ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size StorageSysDataLoad, .-StorageSysDataLoad ++ .align 2 ++ .global FtlRead ++ .type FtlRead, %function ++FtlRead: ++ stp x29, x30, [sp, -16]! ++ and w0, w0, 255 ++ add x29, sp, 0 ++ bl ftl_read ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FtlRead, .-FtlRead ++ .align 2 ++ .global FtlInit ++ .type FtlInit, %function ++FtlInit: ++ stp x29, x30, [sp, -48]! ++ mov w0, -1 ++ adrp x1, .LC75 ++ add x1, x1, :lo12:.LC75 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR1 ++ add x21, x21, :lo12:.LANCHOR1 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ str w0, [x21, 504] ++ adrp x0, .LANCHOR4+2004 ++ str wzr, [x19, 424] ++ str wzr, [x0, #:lo12:.LANCHOR4+2004] ++ adrp x0, .LC76 ++ add x0, x0, :lo12:.LC76 ++ bl printk ++ add x0, x20, 176 ++ bl FtlConstantsInit ++ bl FtlMemInit ++ bl FtlVariablesInit ++ ldrh w0, [x20, 2476] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cbz w0, .L3240 ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC160 ++ add x1, x1, 256 ++ add x0, x0, :lo12:.LC160 ++.L3255: ++ bl printk ++.L3241: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L3240: ++ bl FtlSysBlkInit ++ cbz w0, .L3242 ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC161 ++ add x1, x1, 256 ++ add x0, x0, :lo12:.LC161 ++ b .L3255 ++.L3242: ++ mov w1, 1 ++ str w1, [x21, 504] ++ bl ftl_do_gc ++ ldrh w0, [x19, 552] ++ cmp w0, 15 ++ bhi .L3243 ++ add w21, w0, 2 ++ mov w20, 0 ++ mov w22, 65535 ++.L3246: ++ ldrh w0, [x19, 800] ++ cmp w0, w22 ++ bne .L3244 ++ ldrh w0, [x19, 1448] ++ cmp w0, w22 ++ bne .L3244 ++ and w0, w20, 63 ++ bl List_get_gc_head_node ++ bl FtlGcRefreshBlock ++.L3244: ++ mov w1, 1 ++ mov w0, w1 ++ bl ftl_do_gc ++ mov w1, 1 ++ mov w0, 0 ++ bl ftl_do_gc ++ ldrh w0, [x19, 552] ++ cmp w0, w21 ++ bhi .L3241 ++ add w20, w20, 1 ++ cmp w20, 4096 ++ bne .L3246 ++ b .L3241 ++.L3243: ++ ldrb w0, [x20, 204] ++ cbz w0, .L3241 ++ mov w19, 128 ++.L3248: ++ mov w1, 1 ++ mov w0, w1 ++ bl ftl_do_gc ++ subs w19, w19, #1 ++ bne .L3248 ++ b .L3241 ++ .size FtlInit, .-FtlInit ++ .align 2 ++ .global rk_ftl_init ++ .type rk_ftl_init, %function ++rk_ftl_init: ++ stp x29, x30, [sp, -32]! ++ mov w0, 2048 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR4 ++ bl ftl_dma32_malloc ++ add x1, x19, 2016 ++ str x0, [x19, 2008] ++ add x0, x19, 1584 ++ str xzr, [x19, 1584] ++ str wzr, [x19, 1592] ++ str xzr, [x19, 2016] ++ bl rknand_get_reg_addr ++ ldr x0, [x19, 1584] ++ cbz x0, .L3261 ++ bl rk_nandc_irq_init ++ ldr x0, [x19, 2008] ++ mov w3, 2048 ++ mov w2, 0 ++ mov w1, 0 ++ bl FlashSramLoadStore ++ bl rknand_flash_cs_init ++ ldr x0, [x19, 1584] ++ bl FlashInit ++ mov w20, w0 ++ cbnz w0, .L3258 ++ bl FtlInit ++.L3258: ++ adrp x0, .LC162 ++ mov w1, w20 ++ add x0, x0, :lo12:.LC162 ++ bl printk ++.L3256: ++ mov w0, w20 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L3261: ++ mov w20, -1 ++ b .L3256 ++ .size rk_ftl_init, .-rk_ftl_init ++ .align 2 ++ .global ftl_fix_nand_power_lost_error ++ .type ftl_fix_nand_power_lost_error, %function ++ftl_fix_nand_power_lost_error: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x25, x26, [sp, 64] ++ adrp x25, .LANCHOR0 ++ add x0, x25, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ str x27, [sp, 80] ++ ldrb w0, [x0, 204] ++ cbz w0, .L3263 ++ adrp x21, .LANCHOR4 ++ add x0, x21, :lo12:.LANCHOR4 ++ adrp x20, .LANCHOR2 ++ add x19, x20, :lo12:.LANCHOR2 ++ adrp x24, .LC163 ++ add x27, x19, 560 ++ ldrh w22, [x0, 1842] ++ add x26, x19, 608 ++ ldr x0, [x19, 520] ++ mov w1, w22 ++ ubfiz x23, x22, 1, 16 ++ ldrh w2, [x0, x23] ++ add x0, x24, :lo12:.LC163 ++ bl printk ++ ldrh w0, [x19, 560] ++ bl FtlGcRefreshOpenBlock ++ ldrh w0, [x19, 608] ++ bl FtlGcRefreshOpenBlock ++ mov x0, x27 ++ bl allocate_new_data_superblock ++ mov x0, x26 ++ mov x26, x24 ++ mov w27, 4097 ++ bl allocate_new_data_superblock ++.L3265: ++ subs w27, w27, #1 ++ beq .L3269 ++ mov w1, 1 ++ mov w0, w1 ++ bl ftl_do_gc ++ ldr x0, [x19, 520] ++ ldrh w0, [x0, x23] ++ cbnz w0, .L3265 ++.L3269: ++ add x24, x20, :lo12:.LANCHOR2 ++ mov w1, w22 ++ ldr x0, [x24, 520] ++ ldrh w2, [x0, x23] ++ add x0, x26, :lo12:.LC163 ++ bl printk ++ ldr x0, [x24, 520] ++ ldrh w19, [x0, x23] ++ cbnz w19, .L3267 ++ add x12, x29, 144 ++ add x25, x25, :lo12:.LANCHOR0 ++ strh w22, [x12, -48]! ++ mov x0, x12 ++ bl make_superblock ++ ldrh w5, [x25, 2472] ++ add x12, x12, 16 ++ mov w0, 0 ++ mov w6, 65535 ++ mov w7, 56 ++.L3270: ++ cmp w0, w5 ++ bne .L3272 ++ add x20, x20, :lo12:.LANCHOR2 ++ mov w1, w22 ++ ldr x0, [x20, 520] ++ ldrh w2, [x0, x23] ++ adrp x0, .LC164 ++ add x0, x0, :lo12:.LC164 ++ bl printk ++ ldr x0, [x20, 432] ++ mov w2, w19 ++ mov w1, 0 ++ bl FlashEraseBlocks ++ ldr x0, [x20, 432] ++ mov w2, w19 ++ mov w1, 1 ++ bl FlashEraseBlocks ++.L3267: ++ add x21, x21, :lo12:.LANCHOR4 ++ mov w0, -1 ++ strh w0, [x21, 1842] ++.L3263: ++ 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], 144 ++ ret ++.L3272: ++ ldrh w2, [x12] ++ cmp w2, w6 ++ beq .L3271 ++ umull x4, w19, w7 ++ ldr x3, [x24, 432] ++ lsl w2, w2, 10 ++ add w19, w19, 1 ++ add x3, x3, x4 ++ and w19, w19, 65535 ++ str w2, [x3, 4] ++ ldr x1, [x24, 432] ++ add x1, x1, x4 ++ stp xzr, xzr, [x1, 8] ++.L3271: ++ add w0, w0, 1 ++ add x12, x12, 2 ++ and w0, w0, 65535 ++ b .L3270 ++ .size ftl_fix_nand_power_lost_error, .-ftl_fix_nand_power_lost_error ++ .align 2 ++ .global rk_ftl_garbage_collect ++ .type rk_ftl_garbage_collect, %function ++rk_ftl_garbage_collect: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl ftl_do_gc ++ ldp x29, x30, [sp], 16 ++ ret ++ .size rk_ftl_garbage_collect, .-rk_ftl_garbage_collect ++ .align 2 ++ .global ftl_write ++ .type ftl_write, %function ++ftl_write: ++ stp x29, x30, [sp, -272]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov w22, w1 ++ adrp x1, .LANCHOR2 ++ add x4, x1, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ mov w24, w2 ++ stp x19, x20, [sp, 16] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ str x1, [x29, 168] ++ ldr w2, [x4, 424] ++ cbnz w2, .L3322 ++ adrp x1, .LANCHOR1 ++ add x2, x1, :lo12:.LANCHOR1 ++ str x1, [x29, 160] ++ ldr w2, [x2, 504] ++ cmp w2, 1 ++ bne .L3322 ++ mov x23, x3 ++ cmp w0, 16 ++ bne .L3282 ++ mov x2, x3 ++ mov w1, w24 ++ add w0, w22, 256 ++ bl FtlVendorPartWrite ++.L3280: ++ 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 ++.L3282: ++ adrp x20, .LANCHOR0 ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr w1, [x0, 2584] ++ cmp w22, w1 ++ bcs .L3325 ++ cmp w24, w1 ++ bhi .L3325 ++ add w2, w22, w24 ++ cmp w1, w2 ++ bcc .L3325 ++ adrp x3, .LANCHOR4 ++ add x25, x3, :lo12:.LANCHOR4 ++ mov w1, 2048 ++ sub w2, w2, #1 ++ str x3, [x29, 152] ++ str w1, [x25, 2024] ++ ldrh w1, [x0, 2550] ++ cmp w24, w1, lsl 1 ++ udiv w2, w2, w1 ++ udiv w27, w22, w1 ++ str w2, [x29, 196] ++ sub w28, w2, w27 ++ ldr w2, [x4, 728] ++ add w26, w28, 1 ++ add w2, w2, w26 ++ str w2, [x4, 728] ++ ldr w2, [x4, 744] ++ add w2, w2, w24 ++ str w2, [x4, 744] ++ cset w2, cs ++ str w2, [x29, 204] ++ ldr w2, [x0, 2600] ++ cbz w2, .L3284 ++ ldr x0, [x0, 2608] ++ sub w2, w2, #1 ++ mov w3, 56 ++ umaddl x2, w2, w3, x0 ++ ldr w0, [x2, 24] ++ cmp w27, w0 ++ bne .L3285 ++ ldr w0, [x4, 732] ++ ldr x3, [x2, 8] ++ add w0, w0, 1 ++ str w0, [x4, 732] ++ ldr w0, [x25, 2028] ++ add w0, w0, 1 ++ str w0, [x25, 2028] ++ msub w0, w27, w1, w22 ++ sub w1, w1, w0 ++ cmp w24, w1 ++ lsl w0, w0, 9 ++ csel w19, w24, w1, ls ++ add x0, x3, x0 ++ lsl w21, w19, 9 ++ mov x1, x23 ++ mov w2, w21 ++ bl ftl_memcpy ++ cbnz w28, .L3286 ++ ldr w0, [x25, 2028] ++ cmp w0, 2 ++ bgt .L3286 ++.L3322: ++ mov w0, 0 ++ b .L3280 ++.L3286: ++ sub w24, w24, w19 ++ add w22, w22, w19 ++ add x23, x23, x21 ++ add w27, w27, 1 ++ mov w26, w28 ++.L3285: ++ ldr x0, [x29, 152] ++ add x0, x0, :lo12:.LANCHOR4 ++ str wzr, [x0, 2028] ++.L3284: ++ ldr w1, [x29, 196] ++ mov w0, w27 ++ bl FtlCacheMetchLpa ++ cbz w0, .L3287 ++ bl FtlCacheWriteBack ++.L3287: ++ ldr x1, [x29, 168] ++ mov w19, w27 ++ ldr x0, [x29, 152] ++ add x25, x1, :lo12:.LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x1, x25, 560 ++ mov x21, x1 ++ str x1, [x29, 128] ++ str x1, [x29, 176] ++ str x1, [x0, 1992] ++.L3288: ++ cbnz w26, .L3316 ++ ldr w0, [x29, 196] ++ sub w1, w0, w27 ++ mov w0, 0 ++ bl ftl_do_gc ++ ldr x0, [x29, 168] ++ add x0, x0, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 552] ++ cmp w0, 5 ++ bls .L3317 ++ cmp w0, 31 ++ bhi .L3322 ++ add x20, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x20, 72] ++ cbnz w0, .L3322 ++.L3317: ++ ldr x0, [x29, 168] ++ mov w20, 65535 ++ mov w21, 128 ++ add x19, x0, :lo12:.LANCHOR2 ++.L3320: ++ ldrh w0, [x19, 800] ++ cmp w0, w20 ++ bne .L3319 ++ ldrh w0, [x19, 1448] ++ cmp w0, w20 ++ bne .L3319 ++ ldrh w0, [x19, 1450] ++ cmp w0, w20 ++ bne .L3319 ++ and w0, w26, 7 ++ bl List_get_gc_head_node ++ bl FtlGcRefreshBlock ++.L3319: ++ mov w1, 1 ++ strh w21, [x19, 1366] ++ mov w0, w1 ++ strh w21, [x19, 1364] ++ bl ftl_do_gc ++ mov w1, 1 ++ mov w0, 0 ++ bl ftl_do_gc ++ ldr w0, [x19, 424] ++ cbnz w0, .L3322 ++ ldrh w0, [x19, 552] ++ cmp w0, 2 ++ bhi .L3322 ++ add w26, w26, 1 ++ cmp w26, 256 ++ bne .L3320 ++ b .L3322 ++.L3316: ++ ldrh w0, [x21, 4] ++ cbnz w0, .L3289 ++ ldr x0, [x29, 128] ++ cmp x21, x0 ++ bne .L3290 ++ add x0, x25, 608 ++ ldrh w1, [x0, 4] ++ cbnz w1, .L3291 ++ bl allocate_new_data_superblock ++ ldr x0, [x29, 160] ++ add x0, x0, :lo12:.LANCHOR1 ++ str wzr, [x0, 3460] ++.L3291: ++ ldr x0, [x29, 176] ++ add x21, x25, 608 ++ bl allocate_new_data_superblock ++ ldr x0, [x29, 160] ++ add x0, x0, :lo12:.LANCHOR1 ++ ldr w0, [x0, 3460] ++ cmp w0, 0 ++ ldr x0, [x29, 176] ++ csel x21, x21, x0, ne ++.L3292: ++ ldrh w0, [x21, 4] ++ cbnz w0, .L3293 ++ mov x0, x21 ++ bl allocate_new_data_superblock ++.L3293: ++ ldr x0, [x29, 152] ++ add x0, x0, :lo12:.LANCHOR4 ++ str x21, [x0, 1992] ++.L3289: ++ add x1, x20, :lo12:.LANCHOR0 ++ ldr w0, [x25, 3580] ++ str wzr, [x29, 200] ++ ldr w1, [x1, 2600] ++ sub w0, w0, w1 ++ ldrh w1, [x21, 4] ++ cmp w0, w26 ++ csel w0, w0, w26, ls ++ cmp w1, w0 ++ csel w0, w1, w0, ls ++ str w0, [x29, 124] ++ ldr w0, [x29, 204] ++ and w0, w0, 1 ++ str w0, [x29, 120] ++ adrp x0, .LC165 ++ add x0, x0, :lo12:.LC165 ++ str x0, [x29, 112] ++.L3294: ++ ldr w1, [x29, 124] ++ ldr w0, [x29, 200] ++ cmp w0, w1 ++ bne .L3312 ++.L3295: ++ ldr w0, [x29, 200] ++ sub w26, w26, w0 ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr w1, [x0, 2600] ++ ldr w0, [x25, 3580] ++ cmp w1, w0 ++ bcs .L3313 ++ ldr w0, [x29, 204] ++ cbnz w0, .L3313 ++ ldrh w0, [x21, 4] ++ cbz w0, .L3313 ++.L3315: ++ str wzr, [x29, 204] ++ b .L3288 ++.L3290: ++ ldr x0, [x29, 160] ++ add x0, x0, :lo12:.LANCHOR1 ++ str wzr, [x0, 3460] ++ ldr x0, [x29, 128] ++ ldrh w0, [x0, 4] ++ cbnz w0, .L3329 ++ mov x0, x21 ++ bl allocate_new_data_superblock ++ b .L3292 ++.L3329: ++ ldr x21, [x29, 176] ++ b .L3293 ++.L3312: ++ ldrh w0, [x21, 4] ++ cbz w0, .L3295 ++ ldr w0, [x29, 196] ++ cmp w0, w19 ++ ldr w0, [x29, 120] ++ cset w4, eq ++ tst w4, w0 ++ beq .L3296 ++ ldr w0, [x29, 200] ++ cbz w0, .L3296 ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrh w1, [x0, 2550] ++ add w0, w22, w24 ++ msub w0, w19, w1, w0 ++ cmp w1, w0 ++ bne .L3295 ++.L3296: ++ add x1, x29, 212 ++ mov w2, 0 ++ str w4, [x29, 108] ++ mov w0, w19 ++ bl log2phys ++ mov x0, x21 ++ bl get_new_active_ppa ++ add x3, x20, :lo12:.LANCHOR0 ++ mov w5, 56 ++ str x3, [x29, 184] ++ str w5, [x29, 192] ++ ldr w6, [x3, 2600] ++ ldr x1, [x3, 2608] ++ umull x2, w6, w5 ++ add x1, x1, x2 ++ str w0, [x1, 4] ++ ldr x0, [x3, 2608] ++ add x0, x0, x2 ++ ldrh w2, [x3, 2556] ++ str w19, [x0, 24] ++ mul w1, w6, w2 ++ and x1, x1, 4294967292 ++ str x1, [x29, 144] ++ ldr x1, [x25, 3672] ++ ldr x4, [x29, 144] ++ str x1, [x29, 136] ++ add x28, x1, x4 ++ ldrh w1, [x3, 2554] ++ str x28, [x0, 16] ++ mul w1, w1, w6 ++ ldr x6, [x25, 3632] ++ and x1, x1, 4294967292 ++ add x1, x6, x1 ++ str x1, [x0, 8] ++ mov w1, 0 ++ mov x0, x28 ++ bl ftl_memset ++ cmp w27, w19 ++ ldr w4, [x29, 108] ++ cset w0, eq ++ ldr w5, [x29, 192] ++ orr w4, w4, w0 ++ ldr x3, [x29, 184] ++ cbz w4, .L3297 ++ bne .L3298 ++ ldrh w2, [x3, 2550] ++ udiv w0, w22, w2 ++ msub w0, w0, w2, w22 ++ str w0, [x29, 192] ++ sub w2, w2, w0 ++ cmp w2, w24 ++ csel w0, w2, w24, ls ++ str w0, [x29, 184] ++.L3299: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr w2, [x29, 184] ++ ldrh w1, [x0, 2550] ++ cmp w1, w2 ++ bne .L3300 ++ cmp w27, w19 ++ beq .L3330 ++ mul w1, w19, w2 ++ sub w1, w1, w22 ++ lsl w1, w1, 9 ++ add x1, x23, x1 ++.L3301: ++ ldr w0, [x29, 204] ++ add x2, x20, :lo12:.LANCHOR0 ++ cbz w0, .L3302 ++ ldr w0, [x2, 2600] ++ mov w3, 56 ++ ldr x2, [x2, 2608] ++ umaddl x0, w0, w3, x2 ++.L3348: ++ str x1, [x0, 8] ++.L3303: ++ ldp x1, x2, [x29, 136] ++ mov w0, -3947 ++ strh w0, [x1, x2] ++ add x1, x20, :lo12:.LANCHOR0 ++ ldr w0, [x25, 756] ++ stp w0, w19, [x28, 4] ++ add w19, w19, 1 ++ add w0, w0, 1 ++ cmn w0, #1 ++ csel w0, w0, wzr, ne ++ str w0, [x25, 756] ++ ldr w0, [x29, 212] ++ str w0, [x28, 12] ++ ldrh w0, [x21] ++ strh w0, [x28, 2] ++ ldr w0, [x1, 2600] ++ add w0, w0, 1 ++ str w0, [x1, 2600] ++ ldr w0, [x29, 200] ++ add w0, w0, 1 ++ str w0, [x29, 200] ++ b .L3294 ++.L3298: ++ ldrh w0, [x3, 2550] ++ add w2, w22, w24 ++ str wzr, [x29, 192] ++ msub w2, w19, w0, w2 ++ and w0, w2, 65535 ++ str w0, [x29, 184] ++ b .L3299 ++.L3330: ++ mov x1, x23 ++ b .L3301 ++.L3302: ++ ldr w0, [x2, 2600] ++ mov w4, 56 ++ ldr x3, [x2, 2608] ++ ldrh w2, [x2, 2554] ++ nop // between mem op and mult-accumulate ++ umaddl x0, w0, w4, x3 ++.L3349: ++ ldr x0, [x0, 8] ++ b .L3351 ++.L3300: ++ ldr w1, [x29, 212] ++ mov w2, 56 ++ cmn w1, #1 ++ beq .L3304 ++ str w1, [x29, 220] ++ ldr w1, [x0, 2600] ++ ldr x0, [x0, 2608] ++ str w19, [x29, 240] ++ nop // between mem op and mult-accumulate ++ umaddl x0, w1, w2, x0 ++ mov w2, 0 ++ ldp x1, x0, [x0, 8] ++ stp x1, x0, [x29, 224] ++ mov w1, 1 ++ add x0, x29, 216 ++ bl FlashReadPages ++ ldr w0, [x29, 216] ++ cmn w0, #1 ++ bne .L3305 ++ ldr w0, [x25, 920] ++ add w0, w0, 1 ++ str w0, [x25, 920] ++.L3307: ++ ldr w0, [x29, 184] ++ cmp w27, w19 ++ lsl w2, w0, 9 ++ bne .L3308 ++ add x0, x20, :lo12:.LANCHOR0 ++ mov w3, 56 ++ ldr w1, [x0, 2600] ++ ldr x0, [x0, 2608] ++ umaddl x1, w1, w3, x0 ++ ldr w0, [x29, 192] ++ lsl w0, w0, 9 ++ ldr x3, [x1, 8] ++ mov x1, x23 ++ add x0, x3, x0 ++.L3351: ++ bl ftl_memcpy ++ b .L3303 ++.L3305: ++ ldr w0, [x28, 8] ++ cmp w19, w0 ++ beq .L3307 ++ ldr w0, [x25, 920] ++ mov w2, w19 ++ add w0, w0, 1 ++ str w0, [x25, 920] ++ ldr x0, [x29, 112] ++ ldr w1, [x28, 8] ++ bl printk ++ b .L3307 ++.L3304: ++ ldr x1, [x0, 2608] ++ ldr w3, [x0, 2600] ++ umaddl x3, w3, w2, x1 ++ ldrh w2, [x0, 2554] ++ mov w1, 0 ++ ldr x0, [x3, 8] ++ bl ftl_memset ++ b .L3307 ++.L3308: ++ add x3, x20, :lo12:.LANCHOR0 ++ mov w4, 56 ++ ldrh w1, [x3, 2550] ++ ldr w0, [x3, 2600] ++ ldr x3, [x3, 2608] ++ mul w1, w1, w19 ++ umaddl x0, w0, w4, x3 ++ sub w1, w1, w22 ++ lsl w1, w1, 9 ++.L3350: ++ add x1, x23, x1 ++ b .L3349 ++.L3297: ++ ldr w0, [x29, 204] ++ ldrh w1, [x3, 2550] ++ cbz w0, .L3309 ++ mul w1, w1, w19 ++ ldr w0, [x3, 2600] ++ ldr x2, [x3, 2608] ++ sub w1, w1, w22 ++ lsl w1, w1, 9 ++ add x1, x23, x1 ++ umaddl x0, w0, w5, x2 ++ b .L3348 ++.L3309: ++ ldr x2, [x3, 2608] ++ mul w1, w1, w19 ++ ldr w0, [x3, 2600] ++ sub w1, w1, w22 ++ lsl w1, w1, 9 ++ umaddl x0, w0, w5, x2 ++ ldrh w2, [x3, 2554] ++ b .L3350 ++.L3313: ++ bl FtlCacheWriteBack ++ add x0, x20, :lo12:.LANCHOR0 ++ cmp w26, 1 ++ str wzr, [x0, 2600] ++ bhi .L3288 ++ b .L3315 ++.L3325: ++ mov w0, -1 ++ b .L3280 ++ .size ftl_write, .-ftl_write ++ .align 2 ++ .global ftl_vendor_write ++ .type ftl_vendor_write, %function ++ftl_vendor_write: ++ stp x29, x30, [sp, -16]! ++ mov x3, x2 ++ mov w2, w1 ++ mov w1, w0 ++ add x29, sp, 0 ++ mov w0, 16 ++ bl ftl_write ++ ldp x29, x30, [sp], 16 ++ ret ++ .size ftl_vendor_write, .-ftl_vendor_write ++ .align 2 ++ .global FlashBootVendorWrite ++ .type FlashBootVendorWrite, %function ++FlashBootVendorWrite: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ str x21, [sp, 32] ++ mov w20, w1 ++ mov x21, x2 ++ bl rknand_device_lock ++ adrp x0, .LANCHOR1+504 ++ ldr w0, [x0, #:lo12:.LANCHOR1+504] ++ cmp w0, 1 ++ bne .L3356 ++ mov w0, w19 ++ mov x2, x21 ++ mov w1, w20 ++ bl ftl_vendor_write ++ mov w19, w0 ++.L3355: ++ bl rknand_device_unlock ++ ldr x21, [sp, 32] ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L3356: ++ mov w19, -1 ++ b .L3355 ++ .size FlashBootVendorWrite, .-FlashBootVendorWrite ++ .align 2 ++ .global ftl_sys_write ++ .type ftl_sys_write, %function ++ftl_sys_write: ++ stp x29, x30, [sp, -16]! ++ mov x3, x2 ++ mov w2, w1 ++ add w1, w0, 256 ++ add x29, sp, 0 ++ mov w0, 16 ++ bl ftl_write ++ ldp x29, x30, [sp], 16 ++ ret ++ .size ftl_sys_write, .-ftl_sys_write ++ .align 2 ++ .global StorageSysDataStore ++ .type StorageSysDataStore, %function ++StorageSysDataStore: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x1 ++ mov w19, w0 ++ bl rknand_device_lock ++ mov x2, x20 ++ mov w1, 1 ++ mov w0, w19 ++ bl ftl_sys_write ++ mov w19, w0 ++ bl rknand_device_unlock ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size StorageSysDataStore, .-StorageSysDataStore ++ .align 2 ++ .global FtlDumpSysBlock ++ .type FtlDumpSysBlock, %function ++FtlDumpSysBlock: ++ sub sp, sp, #96 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x19, .LANCHOR4 ++ stp x21, x22, [sp, 48] ++ add x19, x19, :lo12:.LANCHOR4 ++ stp x23, x24, [sp, 64] ++ adrp x21, .LANCHOR2 ++ and w24, w0, 65535 ++ add x0, x21, :lo12:.LANCHOR2 ++ str x25, [sp, 80] ++ add x19, x19, 1712 ++ adrp x22, .LANCHOR0 ++ adrp x23, .LC166 ++ ldr x1, [x0, 3608] ++ add x22, x22, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3656] ++ add x23, x23, :lo12:.LC166 ++ lsl w25, w24, 10 ++ mov w20, 0 ++ stp x1, x0, [x19, 8] ++.L3363: ++ ldrh w0, [x22, 2546] ++ cmp w20, w0 ++ blt .L3365 ++ ldp x19, x20, [sp, 32] ++ ldp x21, x22, [sp, 48] ++ ldp x23, x24, [sp, 64] ++ ldp x29, x30, [sp, 16] ++ ldr x25, [sp, 80] ++ add sp, sp, 96 ++ ret ++.L3365: ++ orr w0, w20, w25 ++ mov w2, 1 ++ str w0, [x19, 4] ++ mov w1, w2 ++ mov x0, x19 ++ bl FlashReadPages ++ ldp x1, x0, [x19, 8] ++ ldr w1, [x1] ++ str w1, [sp] ++ mov w1, w24 ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x23 ++ ldp w2, w3, [x19] ++ bl printk ++ ldr x0, [x19, 16] ++ ldr w0, [x0] ++ cmn w0, #1 ++ beq .L3364 ++ add x0, x21, :lo12:.LANCHOR2 ++ mov w3, 768 ++ mov w2, 4 ++ ldr x1, [x0, 3608] ++ adrp x0, .LC167 ++ add x0, x0, :lo12:.LC167 ++ bl rknand_print_hex ++.L3364: ++ add w20, w20, 1 ++ sxth w20, w20 ++ b .L3363 ++ .size FtlDumpSysBlock, .-FtlDumpSysBlock ++ .align 2 ++ .global dump_map_info ++ .type dump_map_info, %function ++dump_map_info: ++ sub sp, sp, #112 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x19, .LANCHOR0 ++ add x20, x19, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 64] ++ stp x21, x22, [sp, 48] ++ adrp x23, .LANCHOR2 ++ stp x25, x26, [sp, 80] ++ mov x21, x19 ++ stp x27, x28, [sp, 96] ++ add x24, x20, 2504 ++ add x26, x23, :lo12:.LANCHOR2 ++ ldrh w22, [x20, 2480] ++.L3371: ++ ldrh w0, [x20, 2482] ++ cmp w0, w22 ++ bhi .L3377 ++ adrp x19, .LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR4 ++ add x19, x19, 1712 ++ mov w22, 0 ++ adrp x26, .LANCHOR2 ++.L3378: ++ add x20, x26, :lo12:.LANCHOR2 ++ ldrh w0, [x20, 3856] ++ cmp w22, w0 ++ bge .L3381 ++ adrp x23, .LC112 ++ sbfiz x24, x22, 1, 32 ++ mov w20, 0 ++ add x23, x23, :lo12:.LC112 ++ b .L3382 ++.L3373: ++ ldrb w0, [x24, x5] ++ mov w1, w22 ++ bl V2P_block ++ and w4, w0, 65535 ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L3372 ++ umull x2, w19, w7 ++ ldr x0, [x26, 3584] ++ lsl w4, w4, 10 ++ add x0, x0, x2 ++ str w4, [x0, 4] ++ ldr x1, [x26, 3584] ++ ldr x0, [x26, 1392] ++ add x1, x1, x2 ++ ldr x2, [x26, 1400] ++ str x0, [x1, 8] ++ mul w0, w19, w8 ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ sdiv w0, w0, w6 ++ add x0, x2, w0, sxtw 2 ++ str x0, [x1, 16] ++.L3372: ++ add x5, x5, 1 ++.L3379: ++ cmp w9, w5, uxth ++ bhi .L3373 ++ cbnz w19, .L3374 ++.L3376: ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ b .L3371 ++.L3374: ++ ldr x0, [x26, 3584] ++ mov w1, w19 ++ mov w2, 1 ++ adrp x27, .LC168 ++ add x28, x23, :lo12:.LANCHOR2 ++ add x27, x27, :lo12:.LC168 ++ mov x25, 0 ++ bl FlashReadPages ++ mov w0, 56 ++ umull x19, w19, w0 ++.L3375: ++ ldr x0, [x28, 3584] ++ add x0, x0, x25 ++ add x25, x25, 56 ++ ldr x1, [x0, 16] ++ ldr w2, [x0, 4] ++ ldr x0, [x0, 8] ++ ldr w3, [x0, 4] ++ str w3, [sp] ++ ldr w7, [x0] ++ mov x0, x27 ++ ldp w3, w4, [x1] ++ ldp w5, w6, [x1, 8] ++ ubfx x1, x2, 10, 16 ++ bl printk ++ cmp x25, x19 ++ beq .L3376 ++ b .L3375 ++.L3377: ++ ldrh w9, [x20, 2472] ++ mov x5, 0 ++ ldrh w8, [x20, 2556] ++ mov w19, 0 ++ mov w7, 56 ++ mov w6, 4 ++ b .L3379 ++.L3380: ++ add x25, x26, :lo12:.LANCHOR2 ++ mov w2, 1 ++ mov w1, w2 ++ ldr x0, [x25, 3712] ++ ldrh w0, [x0, x24] ++ orr w0, w20, w0, lsl 10 ++ str w0, [x19, 4] ++ mov x0, x19 ++ bl FlashReadPages ++ ldp x2, x0, [x19, 8] ++ add w20, w20, 1 ++ ldr x1, [x25, 3712] ++ sxth w20, w20 ++ ldr w3, [x2, 4] ++ ldrh w1, [x1, x24] ++ str w3, [sp, 8] ++ ldr w2, [x2] ++ str w2, [sp] ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x23 ++ ldp w2, w3, [x19] ++ bl printk ++.L3382: ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 2546] ++ cmp w20, w0 ++ blt .L3380 ++ add w22, w22, 1 ++ sxth w22, w22 ++ b .L3378 ++.L3381: ++ add x21, x21, :lo12:.LANCHOR0 ++ ldr x1, [x20, 3712] ++ mov w2, 2 ++ adrp x0, .LC169 ++ add x0, x0, :lo12:.LC169 ++ ldr w3, [x21, 2572] ++ bl rknand_print_hex ++ ldrh w3, [x21, 2580] ++ mov w2, 4 ++ ldr x1, [x20, 3752] ++ adrp x0, .LC170 ++ add x0, x0, :lo12:.LC170 ++ bl rknand_print_hex ++ ldrh w3, [x21, 2580] ++ mov w2, 4 ++ ldr x1, [x20, 3760] ++ adrp x0, .LC171 ++ add x0, x0, :lo12:.LC171 ++ bl rknand_print_hex ++ 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, 112 ++ ret ++ .size dump_map_info, .-dump_map_info ++ .align 2 ++ .global flash_boot_enter_slc_mode ++ .type flash_boot_enter_slc_mode, %function ++flash_boot_enter_slc_mode: ++ adrp x1, .LANCHOR0+2392 ++ ldr w2, [x1, #:lo12:.LANCHOR0+2392] ++ mov w1, 12336 ++ movk w1, 0x5638, lsl 16 ++ cmp w2, w1 ++ bne .L3388 ++ stp x29, x30, [sp, -16]! ++ and w0, w0, 255 ++ add x29, sp, 0 ++ bl flash_enter_slc_mode ++ ldp x29, x30, [sp], 16 ++ ret ++.L3388: ++ ret ++ .size flash_boot_enter_slc_mode, .-flash_boot_enter_slc_mode ++ .align 2 ++ .global flash_boot_exit_slc_mode ++ .type flash_boot_exit_slc_mode, %function ++flash_boot_exit_slc_mode: ++ adrp x1, .LANCHOR0+2392 ++ ldr w2, [x1, #:lo12:.LANCHOR0+2392] ++ mov w1, 12336 ++ movk w1, 0x5638, lsl 16 ++ cmp w2, w1 ++ bne .L3394 ++ stp x29, x30, [sp, -16]! ++ and w0, w0, 255 ++ add x29, sp, 0 ++ bl flash_exit_slc_mode ++ ldp x29, x30, [sp], 16 ++ ret ++.L3394: ++ ret ++ .size flash_boot_exit_slc_mode, .-flash_boot_exit_slc_mode ++ .align 2 ++ .global write_idblock ++ .type write_idblock, %function ++write_idblock: ++ stp x29, x30, [sp, -240]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ adrp x24, .LANCHOR0 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ add x0, x24, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x25, x26, [sp, 64] ++ mov x22, x1 ++ stp x27, x28, [sp, 80] ++ mov x23, x2 ++ ldr x1, [x0, 88] ++ ldr w20, [x0, 76] ++ mov w0, 59392 ++ movk w0, 0x3, lsl 16 ++ ldrb w21, [x1, 9] ++ bl ftl_malloc ++ cbz x0, .L3421 ++ add w19, w19, 511 ++ mov x26, x0 ++ lsr w19, w19, 9 ++ cmp w19, 8 ++ bls .L3422 ++ mov w0, -1 ++ cmp w19, 500 ++ bhi .L3397 ++.L3399: ++ ldr w2, [x22] ++ mov w1, 35899 ++ movk w1, 0xfcdc, lsl 16 ++ mov w0, -1 ++ cmp w2, w1 ++ bne .L3397 ++ mul w21, w21, w20 ++ add x3, x22, 253952 ++ add x3, x3, 1532 ++ mov w2, 63871 ++ and w21, w21, 65535 ++ mov w4, 4097 ++ add w0, w21, w0 ++ add w0, w0, w19 ++ udiv w0, w0, w21 ++ str w0, [x29, 168] ++ mov w0, 0 ++.L3403: ++ ldr w1, [x3] ++ cbnz w1, .L3400 ++ ldr w1, [x22, w0, uxtw 2] ++ add w0, w0, 1 ++ str w1, [x3, 512] ++ cmp w0, w4 ++ sub w2, w2, #1 ++ csel w0, w0, wzr, cc ++ sub x3, x3, #4 ++ cmp w2, 4096 ++ bne .L3403 ++.L3402: ++ add x20, x24, :lo12:.LANCHOR0 ++ mov w3, 5 ++ mov w2, 4 ++ mov x1, x23 ++ adrp x0, .LC173 ++ add x0, x0, :lo12:.LC173 ++ bl rknand_print_hex ++ adrp x25, .LANCHOR4 ++ ldrb w2, [x20, 73] ++ adrp x0, .LC174 ++ ldr w1, [x22, 512] ++ add x0, x0, :lo12:.LC174 ++ bl printk ++ add x0, x25, :lo12:.LANCHOR4 ++ ldrh w3, [x20, 202] ++ mov w1, w19 ++ mov w2, w19 ++ ldr w4, [x0, 1644] ++ adrp x0, .LC175 ++ add x0, x0, :lo12:.LC175 ++ bl printk ++ str x25, [x29, 160] ++ ldrb w0, [x20, 73] ++ ldr w1, [x22, 512] ++ cmp w1, w0 ++ bls .L3404 ++ str w0, [x22, 512] ++.L3404: ++ lsl w0, w19, 7 ++ add x28, x24, :lo12:.LANCHOR0 ++ str w0, [x29, 140] ++ mov x20, 0 ++ add x0, x28, 208 ++ str wzr, [x29, 172] ++ str x0, [x29, 152] ++.L3420: ++ ldr w1, [x23, x20, lsl 2] ++ ldrb w0, [x28, 73] ++ str w20, [x29, 136] ++ cmp w1, w0 ++ bcs .L3405 ++ ldr x0, [x29, 160] ++ add x0, x0, :lo12:.LANCHOR4 ++ ldr w0, [x0, 1644] ++ cmp w1, w0 ++ bcc .L3405 ++ ldr w0, [x29, 168] ++ cmp w20, 0 ++ ccmp w0, 1, 0, ne ++ bls .L3406 ++ sub w0, w20, #1 ++ ldr w0, [x23, x0, lsl 2] ++ add w0, w0, 1 ++ cmp w1, w0 ++ beq .L3405 ++.L3406: ++ mov x2, 512 ++ mov w1, 0 ++ mov x0, x26 ++ bl memset ++ ldr w24, [x23, x20, lsl 2] ++ mov w2, w19 ++ ldr x0, [x28, 88] ++ ldr w25, [x28, 76] ++ mul w24, w21, w24 ++ ldrb w27, [x0, 9] ++ adrp x0, .LC176 ++ mov w1, w24 ++ add x0, x0, :lo12:.LC176 ++ bl printk ++ mov w0, 0 ++ bl flash_boot_enter_slc_mode ++ mul w25, w25, w27 ++ udiv w1, w24, w27 ++ mov w2, 0 ++ and w25, w25, 65535 ++ mov w0, 0 ++ bl FlashEraseBlock ++ cmp w25, w19 ++ bcs .L3425 ++ add w1, w24, w25 ++ mov w2, 0 ++ mov w0, 0 ++ bl FlashEraseBlock ++ mov w1, 2 ++.L3407: ++ mov w0, 0 ++ str w1, [x29, 144] ++ bl flash_boot_exit_slc_mode ++ ldr x0, [x28, 88] ++ mov w5, 0 ++ ldr w1, [x29, 144] ++ mov w10, 1073741823 ++ udiv w8, w24, w25 ++ ldrh w4, [x0, 10] ++ ldrb w0, [x0, 12] ++ msub w8, w8, w25, w24 ++ mov x25, x22 ++ lsl w4, w4, 2 ++ mul w4, w4, w1 ++ sdiv w4, w4, w0 ++ sub w0, w24, w8 ++ str w0, [x29, 144] ++.L3408: ++ cmp w4, w5 ++ bhi .L3412 ++ mov w1, w24 ++ mov w3, 0 ++ mov w2, w19 ++ adrp x0, .LC177 ++ add x0, x0, :lo12:.LC177 ++ bl printk ++ ldr x0, [x28, 88] ++ mov w2, w19 ++ ldr w25, [x28, 76] ++ ldr w24, [x23, x20, lsl 2] ++ ldrb w5, [x0, 9] ++ adrp x0, .LC178 ++ str w5, [x29, 144] ++ add x0, x0, :lo12:.LC178 ++ mul w24, w21, w24 ++ mul w25, w25, w5 ++ mov w1, w24 ++ bl printk ++ and w25, w25, 65535 ++ ldr w5, [x29, 144] ++ ldr x1, [x29, 160] ++ mov x7, x26 ++ mov w4, 0 ++ mov w9, 4 ++ udiv w27, w24, w25 ++ add x10, x1, :lo12:.LANCHOR4 ++ msub w27, w27, w25, w24 ++ sub w8, w24, w27 ++ mul w0, w27, w5 ++ ubfx x0, x0, 2, 2 ++.L3413: ++ cmp w4, w19 ++ bcc .L3415 ++ mov w1, w24 ++ mov w3, 0 ++ mov w2, w19 ++ adrp x0, .LC179 ++ add x0, x0, :lo12:.LC179 ++ bl printk ++ mov x1, x26 ++ mov x0, x22 ++ mov x24, 0 ++.L3416: ++ ldr w2, [x29, 140] ++ cmp w24, w2 ++ bcc .L3418 ++ ldr w0, [x29, 172] ++ add w0, w0, 1 ++ str w0, [x29, 172] ++ b .L3405 ++.L3422: ++ mov w19, 8 ++ b .L3399 ++.L3400: ++ adrp x0, .LC172 ++ add x0, x0, :lo12:.LC172 ++ bl printk ++ b .L3402 ++.L3425: ++ mov w1, 1 ++ b .L3407 ++.L3412: ++ add w1, w8, w5 ++ lsr w1, w1, 2 ++ cbz w1, .L3409 ++ ldr x0, [x29, 152] ++ add w2, w1, 1 ++ ldrb w3, [x28, 204] ++ ldrh w0, [x0, w2, sxtw 1] ++ cbz w3, .L3410 ++ ldr w3, [x28, 2392] ++ mov w6, 12336 ++ movk w6, 0x5638, lsl 16 ++ cmp w3, w6 ++ csel w0, w0, w2, ne ++.L3410: ++ add w0, w0, w10 ++ lsl w0, w0, 2 ++ str w0, [x29, 176] ++.L3409: ++ mov w0, 61424 ++ str w0, [x29, 180] ++ ldr x0, [x29, 152] ++ ldrh w7, [x0, w1, sxtw 1] ++ ldrb w0, [x28, 204] ++ cbz w0, .L3411 ++ ldr w0, [x28, 2392] ++ mov w2, 12336 ++ movk w2, 0x5638, lsl 16 ++ cmp w0, w2 ++ csel w7, w7, w1, ne ++.L3411: ++ ldr w0, [x29, 144] ++ ldrb w11, [x28, 2464] ++ stp w10, w5, [x29, 104] ++ stp w8, w4, [x29, 112] ++ madd w1, w27, w7, w0 ++ ldr x0, [x29, 160] ++ stp w7, w1, [x29, 120] ++ add x0, x0, :lo12:.LANCHOR4 ++ str w11, [x29, 128] ++ ldrb w0, [x0, 1650] ++ bl FlashBchSel ++ mov w0, 0 ++ bl flash_boot_enter_slc_mode ++ ldr x0, [x28, 88] ++ mov x2, x25 ++ ldr w1, [x29, 124] ++ add x3, x29, 176 ++ add x25, x25, 2048 ++ ldrb w0, [x0, 9] ++ udiv w1, w1, w0 ++ mov w0, 0 ++ bl FlashProgPage ++ mov w0, 0 ++ bl flash_boot_exit_slc_mode ++ ldr w11, [x29, 128] ++ mov w0, w11 ++ bl FlashBchSel ++ ldr w0, [x29, 144] ++ ldr w7, [x29, 120] ++ add w2, w7, 1 ++ udiv w1, w0, w27 ++ mov w0, 0 ++ bl FlashPageProgMsbFFData ++ ldp w10, w5, [x29, 104] ++ ldp w8, w4, [x29, 112] ++ add w5, w5, 4 ++ and w5, w5, 65535 ++ b .L3408 ++.L3415: ++ add w2, w27, w4 ++ ldr x1, [x29, 152] ++ ldrb w3, [x28, 204] ++ lsr w2, w2, 2 ++ sub w25, w9, w0 ++ and w25, w25, 65535 ++ ldrh w1, [x1, w2, sxtw 1] ++ cbz w3, .L3414 ++ ldr w3, [x28, 2392] ++ mov w6, 12336 ++ movk w6, 0x5638, lsl 16 ++ cmp w3, w6 ++ csel w1, w1, w2, ne ++.L3414: ++ add w0, w0, w8 ++ ldrb w11, [x28, 2464] ++ stp w9, w4, [x29, 100] ++ stp w8, w5, [x29, 108] ++ madd w1, w5, w1, w0 ++ ldr x0, [x28, 88] ++ str x10, [x29, 128] ++ str w11, [x29, 124] ++ str x7, [x29, 144] ++ ldrb w12, [x0, 9] ++ ldrb w0, [x10, 1650] ++ stp w1, w12, [x29, 116] ++ bl FlashBchSel ++ mov w0, 0 ++ bl flash_boot_enter_slc_mode ++ ldp w1, w12, [x29, 116] ++ mov x3, 0 ++ ldr x7, [x29, 144] ++ mov w0, 0 ++ udiv w1, w1, w12 ++ mov x2, x7 ++ bl FlashReadPage ++ mov w0, 0 ++ bl flash_boot_exit_slc_mode ++ ldr w11, [x29, 124] ++ mov w0, w11 ++ bl FlashBchSel ++ ldp w9, w4, [x29, 100] ++ ubfiz x0, x25, 9, 16 ++ ldr x7, [x29, 144] ++ add w4, w25, w4 ++ ldr x10, [x29, 128] ++ add x7, x7, x0 ++ and w4, w4, 65535 ++ ldp w8, w5, [x29, 108] ++ mov w0, 0 ++ b .L3413 ++.L3418: ++ mov x25, x1 ++ mov x27, x0 ++ add x2, x24, 1 ++ add x1, x1, 4 ++ add x0, x0, 4 ++ ldr w4, [x25] ++ ldr w3, [x27] ++ cmp w4, w3 ++ beq .L3426 ++ mov x2, 512 ++ mov w1, 0 ++ mov x0, x26 ++ bl memset ++ ldr w4, [x25] ++ mov w3, w24 ++ ldr w5, [x27] ++ and x24, x24, -256 ++ ldr w2, [x23, x20, lsl 2] ++ lsl x24, x24, 2 ++ ldr w1, [x29, 136] ++ adrp x0, .LC180 ++ add x0, x0, :lo12:.LC180 ++ bl printk ++ mov w3, 256 ++ mov w2, 4 ++ add x1, x22, x24 ++ adrp x0, .LC181 ++ add x0, x0, :lo12:.LC181 ++ bl rknand_print_hex ++ add x1, x26, x24 ++ mov w3, 256 ++ mov w2, 4 ++ adrp x0, .LC182 ++ add x0, x0, :lo12:.LC182 ++ bl rknand_print_hex ++ mov w0, 0 ++ bl flash_boot_enter_slc_mode ++ ldr w1, [x23, x20, lsl 2] ++ mov w2, 0 ++ mov w0, 0 ++ mul w1, w21, w1 ++ bl FlashEraseBlock ++ ldr w0, [x29, 168] ++ cmp w0, 1 ++ bls .L3417 ++ ldr w1, [x23, x20, lsl 2] ++ mov w2, 0 ++ mov w0, 0 ++ madd w1, w1, w21, w21 ++ bl FlashEraseBlock ++.L3417: ++ mov w0, 0 ++ bl flash_boot_exit_slc_mode ++ ldr w1, [x23, x20, lsl 2] ++ adrp x0, .LC183 ++ add x0, x0, :lo12:.LC183 ++ bl printk ++.L3405: ++ add x20, x20, 1 ++ cmp x20, 5 ++ bne .L3420 ++ mov x0, x26 ++ bl ftl_free ++ ldr w0, [x29, 172] ++ cmp w0, 0 ++ csetm w0, eq ++.L3397: ++ 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 ++.L3426: ++ mov x24, x2 ++ b .L3416 ++.L3421: ++ mov w0, -1 ++ b .L3397 ++ .size write_idblock, .-write_idblock ++ .align 2 ++ .global write_loader_lba ++ .type write_loader_lba, %function ++write_loader_lba: ++ stp x29, x30, [sp, -112]! ++ cmp w0, 64 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ stp x21, x22, [sp, 32] ++ adrp x20, .LANCHOR4 ++ stp x23, x24, [sp, 48] ++ mov w21, w1 ++ mov x24, x2 ++ bne .L3447 ++ ldr w1, [x2] ++ mov w0, 35899 ++ movk w0, 0xfcdc, lsl 16 ++ cmp w1, w0 ++ bne .L3447 ++ add x22, x20, :lo12:.LANCHOR4 ++ mov w0, 1 ++ strb w0, [x22, 2032] ++ mov w0, 59392 ++ movk w0, 0x3, lsl 16 ++ bl ftl_malloc ++ mov w2, 59392 ++ mov w1, 0 ++ movk w2, 0x3, lsl 16 ++ str x0, [x22, 2040] ++ bl ftl_memset ++ str w19, [x22, 2048] ++.L3447: ++ add x23, x20, :lo12:.LANCHOR4 ++ ldr w2, [x24] ++ mov w4, w21 ++ mov w3, w19 ++ adrp x0, .LC184 ++ add x0, x0, :lo12:.LC184 ++ ldr x1, [x23, 2040] ++ bl printk ++ ldrb w0, [x23, 2032] ++ cbz w0, .L3446 ++ sub w0, w19, #64 ++ ldr x22, [x23, 2040] ++ cmp w0, 499 ++ bhi .L3449 ++ mov w2, 564 ++ sub w2, w2, w19 ++ cmp w21, w2 ++ ubfiz x0, x0, 9, 25 ++ csel w2, w21, w2, ls ++ mov x1, x24 ++ lsl w2, w2, 9 ++ add x0, x22, x0 ++ bl ftl_memcpy ++.L3450: ++ add x0, x20, :lo12:.LANCHOR4 ++ ldr w1, [x0, 2048] ++ cmp w19, w1 ++ beq .L3459 ++ strb wzr, [x0, 2032] ++ cbz x22, .L3460 ++ mov x0, x22 ++ bl ftl_free ++.L3460: ++ add x0, x20, :lo12:.LANCHOR4 ++ str xzr, [x0, 2040] ++ b .L3459 ++.L3449: ++ cmp w19, 563 ++ bls .L3450 ++ ldr w0, [x23, 2048] ++ mov w1, 500 ++ sub w0, w0, #64 ++ cmp w0, 500 ++ csel w0, w0, w1, ls ++ adrp x1, .LANCHOR0+88 ++ ldr x1, [x1, #:lo12:.LANCHOR0+88] ++ ldrb w1, [x1, 9] ++ cmp w1, 4 ++ beq .L3451 ++ mov w1, 2 ++ str w1, [x29, 72] ++ mov w1, 3 ++ str w1, [x29, 76] ++ mov w1, 4 ++ str w1, [x29, 80] ++ mov w1, 5 ++ str w1, [x29, 84] ++ mov w1, 6 ++ str w1, [x29, 88] ++.L3452: ++ add x2, x22, 253952 ++ mov w1, 63872 ++ add x2, x2, 1536 ++.L3458: ++ ldr w3, [x2] ++ cbz w3, .L3456 ++ add w0, w1, 128 ++ lsl w0, w0, 2 ++.L3457: ++ mov x1, x22 ++ add x22, x20, :lo12:.LANCHOR4 ++ add x2, x29, 72 ++ bl write_idblock ++ ldr x0, [x22, 2040] ++ strb wzr, [x22, 2032] ++ bl ftl_free ++ str xzr, [x22, 2040] ++.L3459: ++ add x20, x20, :lo12:.LANCHOR4 ++ add w19, w19, w21 ++ str w19, [x20, 2048] ++.L3446: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 112 ++ ret ++.L3451: ++ add x2, x29, 72 ++ mov x1, 0 ++.L3455: ++ cmp w0, 256 ++ bls .L3453 ++ lsl w3, w1, 1 ++ str w3, [x2, x1, lsl 2] ++.L3454: ++ add x1, x1, 1 ++ cmp x1, 5 ++ bne .L3455 ++ b .L3452 ++.L3453: ++ str w1, [x2, x1, lsl 2] ++ b .L3454 ++.L3456: ++ sub w1, w1, #1 ++ sub x2, x2, #4 ++ cmp w1, 4096 ++ bne .L3458 ++ lsl w0, w0, 9 ++ b .L3457 ++ .size write_loader_lba, .-write_loader_lba ++ .align 2 ++ .global FtlWrite ++ .type FtlWrite, %function ++FtlWrite: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ stp x21, x22, [sp, 32] ++ sub w0, w1, #64 ++ mov w19, w1 ++ mov w21, w2 ++ mov x22, x3 ++ cmp w0, 1983 ++ bhi .L3471 ++ cbnz w20, .L3471 ++ mov x2, x3 ++ mov w1, w21 ++ mov w0, w19 ++ bl write_loader_lba ++.L3471: ++ mov x3, x22 ++ mov w2, w21 ++ mov w1, w19 ++ mov w0, w20 ++ bl ftl_write ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FtlWrite, .-FtlWrite ++ .align 2 ++ .global rknand_sys_storage_ioctl ++ .type rknand_sys_storage_ioctl, %function ++rknand_sys_storage_ioctl: ++ sub sp, sp, #560 ++ mov w0, 27688 ++ movk w0, 0x4004, lsl 16 ++ cmp w1, w0 ++ stp x29, x30, [sp] ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w1 ++ mov x20, x2 ++ beq .L3475 ++ bhi .L3476 ++ mov w0, 25602 ++ movk w0, 0x4004, lsl 16 ++ cmp w1, w0 ++ beq .L3477 ++ bhi .L3478 ++ mov w0, 25364 ++ movk w0, 0x4004, lsl 16 ++ cmp w1, w0 ++ beq .L3479 ++ add w0, w0, 237 ++ cmp w1, w0 ++ beq .L3480 ++.L3510: ++ mov x19, -22 ++ b .L3473 ++.L3478: ++ mov w0, 25726 ++ movk w0, 0x4004, lsl 16 ++ cmp w1, w0 ++ beq .L3481 ++ add w0, w0, 1 ++ cmp w1, w0 ++ beq .L3482 ++ mov w0, 25603 ++ movk w0, 0x4004, lsl 16 ++ cmp w1, w0 ++ bne .L3510 ++ adrp x0, .LC190 ++ add x0, x0, :lo12:.LC190 ++ bl printk ++ mov x2, 520 ++ mov x1, x20 ++ add x0, x29, 40 ++ bl rk_copy_from_user ++ cbnz x0, .L3493 ++ ldr w1, [x29, 40] ++ mov w0, 20051 ++ movk w0, 0x4144, lsl 16 ++ cmp w1, w0 ++ bne .L3490 ++ ldr w2, [x29, 44] ++ cmp w2, 512 ++ bhi .L3490 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ uxtw x2, w2 ++ add x1, x1, 2080 ++ add x0, x29, 48 ++.L3531: ++ bl memcpy ++ b .L3525 ++.L3476: ++ mov w0, 30224 ++ movk w0, 0x4004, lsl 16 ++ cmp w1, w0 ++ beq .L3484 ++ bhi .L3485 ++ mov w0, 27698 ++ movk w0, 0x4004, lsl 16 ++ cmp w1, w0 ++ beq .L3475 ++ add w0, w0, 10 ++ cmp w1, w0 ++ bne .L3510 ++.L3475: ++ mov w0, 27698 ++ movk w0, 0x4004, lsl 16 ++ cmp w19, w0 ++ bne .L3500 ++ adrp x0, .LC191 ++ add x0, x0, :lo12:.LC191 ++.L3527: ++ bl printk ++ mov x2, 520 ++ mov x1, x20 ++ add x0, x29, 40 ++ bl rk_copy_from_user ++ cbnz x0, .L3493 ++ ldr w1, [x29, 40] ++ mov w0, 17227 ++ movk w0, 0x4c4f, lsl 16 ++ cmp w1, w0 ++ bne .L3530 ++ mov w0, 27708 ++ movk w0, 0x4004, lsl 16 ++ cmp w19, w0 ++ adrp x0, .LANCHOR4 ++ bne .L3503 ++ add x0, x0, :lo12:.LANCHOR4 ++ mov x2, 16 ++ add x1, x29, 40 ++ ldr x0, [x0, 2056] ++ ldr w0, [x0, 20] ++ strb w0, [x29, 48] ++ str w0, [x29, 44] ++ mov x0, x20 ++ bl rk_copy_to_user ++ cbnz x0, .L3530 ++.L3494: ++ mov x19, 0 ++.L3473: ++ mov x0, x19 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp] ++ add sp, sp, 560 ++ ret ++.L3485: ++ mov w0, 30226 ++ movk w0, 0x4004, lsl 16 ++ cmp w1, w0 ++ beq .L3484 ++ bcc .L3486 ++ add w0, w0, 1 ++ cmp w1, w0 ++ bne .L3510 ++.L3486: ++ adrp x0, .LC196 ++ add x0, x0, :lo12:.LC196 ++ bl printk ++ mov x2, 520 ++ mov x1, x20 ++ add x0, x29, 40 ++ bl rk_copy_from_user ++ cbnz x0, .L3493 ++ ldr w1, [x29, 40] ++ mov w0, 17750 ++ movk w0, 0x444e, lsl 16 ++ cmp w1, w0 ++ bne .L3490 ++ ldr w2, [x29, 44] ++ cmp w2, 504 ++ bhi .L3490 ++ mov w0, 30225 ++ add w2, w2, 8 ++ movk w0, 0x4004, lsl 16 ++ add x1, x29, 40 ++ cmp w19, w0 ++ adrp x19, .LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR4 ++ bne .L3509 ++ ldr x0, [x19, 2600] ++ bl memcpy ++ mov w0, 2 ++ ldr x1, [x19, 2600] ++ b .L3529 ++.L3480: ++ adrp x0, .LC185 ++ add x0, x0, :lo12:.LC185 ++ bl printk ++ mov x2, 520 ++ mov x1, x20 ++ add x0, x29, 40 ++ bl rk_copy_from_user ++ cbz x0, .L3487 ++.L3493: ++ adrp x0, .LC186 ++ add x0, x0, :lo12:.LC186 ++ bl printk ++.L3530: ++ mov x19, -14 ++ b .L3473 ++.L3487: ++ ldr w1, [x29, 40] ++ mov w0, 21060 ++ movk w0, 0x4b4d, lsl 16 ++ cmp w1, w0 ++ beq .L3488 ++.L3490: ++ mov x19, -1 ++.L3489: ++ mov x1, x19 ++ adrp x0, .LC197 ++ add x0, x0, :lo12:.LC197 ++ bl printk ++ b .L3473 ++.L3488: ++ ldr w0, [x29, 44] ++ cmp w0, 512 ++ bhi .L3490 ++ adrp x19, .LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR4 ++ mov x2, 512 ++ add x0, x29, 40 ++ ldr x1, [x19, 2056] ++ bl memcpy ++ ldr w1, [x19, 2064] ++ mov w0, 5161 ++ movk w0, 0xc059, lsl 16 ++ cmp w1, w0 ++ beq .L3491 ++ mov x2, 128 ++ mov w1, 0 ++ add x0, x29, 104 ++ stp wzr, wzr, [x29, 48] ++ bl memset ++.L3491: ++ add x0, x29, 40 ++ mov x2, 256 ++ mov w1, 0 ++ add x0, x0, x2 ++ str wzr, [x29, 56] ++ bl memset ++.L3525: ++ mov x2, 520 ++ add x1, x29, 40 ++ mov x0, x20 ++ bl rk_copy_to_user ++ cbnz x0, .L3530 ++.L3528: ++ mov x19, 0 ++ b .L3489 ++.L3477: ++ adrp x0, .LC187 ++ add x0, x0, :lo12:.LC187 ++ bl printk ++ mov x2, 520 ++ mov x1, x20 ++ add x0, x29, 40 ++ bl rk_copy_from_user ++ cbnz x0, .L3493 ++ ldr w1, [x29, 40] ++ mov w0, 21060 ++ movk w0, 0x4b4d, lsl 16 ++ cmp w1, w0 ++ bne .L3490 ++ ldr w0, [x29, 44] ++ cmp w0, 512 ++ bhi .L3490 ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ mov w1, 5161 ++ movk w1, 0xc059, lsl 16 ++ ldr w2, [x0, 2064] ++ cmp w2, w1 ++ bne .L3511 ++ ldr w1, [x29, 52] ++ mov x19, -3 ++ sub w2, w1, #1 ++ cmp w2, 127 ++ bhi .L3473 ++ ldr x19, [x0, 2056] ++ add x0, x19, 64 ++ str w1, [x19, 12] ++ add x1, x29, 104 ++ ldr w2, [x29, 52] ++ bl memcpy ++ mov x1, x19 ++ mov w0, 1 ++.L3529: ++ bl StorageSysDataStore ++ uxtw x19, w0 ++ b .L3489 ++.L3482: ++ adrp x0, .LC188 ++ add x0, x0, :lo12:.LC188 ++ bl printk ++ mov x2, 520 ++ mov x1, x20 ++ add x0, x29, 40 ++ bl rk_copy_from_user ++ cbnz x0, .L3493 ++ ldr w1, [x29, 40] ++ mov w0, 17476 ++ movk w0, 0x4253, lsl 16 ++ cmp w1, w0 ++ bne .L3490 ++ ldr w0, [x29, 44] ++ cmp w0, 512 ++ bhi .L3490 ++ adrp x19, .LANCHOR4 ++ add x0, x19, :lo12:.LANCHOR4 ++ ldr w0, [x0, 2068] ++ cbz w0, .L3494 ++ add x0, x19, :lo12:.LANCHOR4 ++ mov w2, 22867 ++ movk w2, 0x4453, lsl 16 ++ ldr x1, [x0, 2072] ++ ldr w3, [x1] ++ cmp w3, w2 ++ beq .L3495 ++ str w2, [x1] ++ mov w2, 504 ++ ldr x1, [x0, 2072] ++ str w2, [x1, 4] ++ ldr x0, [x0, 2072] ++ stp wzr, wzr, [x0, 8] ++.L3495: ++ add x20, x19, :lo12:.LANCHOR4 ++ mov w0, 0 ++ ldr x1, [x20, 2072] ++ str wzr, [x1, 16] ++ bl StorageSysDataStore ++ ldr x0, [x20, 2056] ++ mov w1, 21060 ++ movk w1, 0x4b4d, lsl 16 ++ ldr w2, [x0] ++ cmp w2, w1 ++ beq .L3496 ++ str w1, [x0] ++ mov w1, 504 ++ ldr x0, [x20, 2056] ++ str w1, [x0, 4] ++ ldr x0, [x20, 2056] ++ str wzr, [x0, 8] ++.L3496: ++ add x19, x19, :lo12:.LANCHOR4 ++ mov x2, 128 ++ mov w1, 0 ++ ldr x20, [x19, 2056] ++ add x0, x20, 64 ++ str wzr, [x20, 12] ++ bl memset ++ mov x1, x20 ++ mov w0, 1 ++ bl StorageSysDataStore ++ str wzr, [x19, 2064] ++ str wzr, [x19, 2068] ++ b .L3528 ++.L3481: ++ adrp x0, .LC189 ++ add x0, x0, :lo12:.LC189 ++ bl printk ++ mov x2, 520 ++ mov x1, x20 ++ add x0, x29, 40 ++ bl rk_copy_from_user ++ cbnz x0, .L3493 ++ ldr w1, [x29, 40] ++ mov w0, 20037 ++ movk w0, 0x4253, lsl 16 ++ cmp w1, w0 ++ bne .L3490 ++ ldr w0, [x29, 44] ++ cmp w0, 512 ++ bhi .L3490 ++ adrp x19, .LANCHOR4 ++ add x0, x19, :lo12:.LANCHOR4 ++ ldr w1, [x0, 2068] ++ cmp w1, 1 ++ beq .L3494 ++ ldr x1, [x0, 2072] ++ mov w0, 22867 ++ movk w0, 0x4453, lsl 16 ++ ldr w2, [x1] ++ cmp w2, w0 ++ beq .L3497 ++ str w0, [x1] ++ add x0, x19, :lo12:.LANCHOR4 ++ mov w2, 504 ++ ldr x1, [x0, 2072] ++ str w2, [x1, 4] ++ ldr x0, [x0, 2072] ++ stp wzr, wzr, [x0, 8] ++.L3497: ++ add x20, x19, :lo12:.LANCHOR4 ++ mov w0, 1 ++ ldr x1, [x20, 2072] ++ str w0, [x1, 16] ++ mov w0, 0 ++ bl StorageSysDataStore ++ ldr x0, [x20, 2056] ++ mov w1, 21060 ++ movk w1, 0x4b4d, lsl 16 ++ ldr w2, [x0] ++ cmp w2, w1 ++ beq .L3498 ++ str w1, [x0] ++ mov w1, 504 ++ ldr x0, [x20, 2056] ++ str w1, [x0, 4] ++ ldr x0, [x20, 2056] ++ str wzr, [x0, 8] ++.L3498: ++ add x19, x19, :lo12:.LANCHOR4 ++ mov x2, 128 ++ mov w1, 0 ++ ldr x20, [x19, 2056] ++ add x0, x20, 64 ++ str wzr, [x20, 12] ++ bl memset ++ mov x1, x20 ++ mov w0, 1 ++ bl StorageSysDataStore ++ mov w0, 1 ++ str w0, [x19, 2068] ++ b .L3528 ++.L3500: ++ mov w0, 27708 ++ movk w0, 0x4004, lsl 16 ++ cmp w19, w0 ++ bne .L3502 ++ adrp x0, .LC192 ++ add x0, x0, :lo12:.LC192 ++ b .L3527 ++.L3502: ++ adrp x0, .LC193 ++ add x0, x0, :lo12:.LC193 ++ b .L3527 ++.L3503: ++ add x20, x0, :lo12:.LANCHOR4 ++ ldr w1, [x20, 2592] ++ cmp w1, 10 ++ bhi .L3530 ++ ldr x1, [x20, 2056] ++ ldr w2, [x29, 44] ++ ldr w3, [x1, 24] ++ cmp w3, w2 ++ beq .L3504 ++ cbz w3, .L3504 ++ mov w1, w2 ++ adrp x0, .LC194 ++ add x0, x0, :lo12:.LC194 ++ bl printk ++ ldr w0, [x20, 2592] ++ add w0, w0, 1 ++ str w0, [x20, 2592] ++ b .L3530 ++.L3504: ++ add x0, x0, :lo12:.LANCHOR4 ++ str wzr, [x0, 2592] ++ mov w0, 27698 ++ movk w0, 0x4004, lsl 16 ++ cmp w19, w0 ++ bne .L3505 ++ stp wzr, wzr, [x1, 20] ++.L3506: ++ mov w0, 1 ++ bl StorageSysDataStore ++ cmn w0, #1 ++ bne .L3528 ++ mov x19, -2 ++ b .L3489 ++.L3505: ++ mov w0, 1 ++ stp w0, w2, [x1, 20] ++ b .L3506 ++.L3484: ++ adrp x0, .LC195 ++ add x0, x0, :lo12:.LC195 ++ bl printk ++ mov x2, 520 ++ mov x1, x20 ++ add x0, x29, 40 ++ bl rk_copy_from_user ++ cbnz x0, .L3493 ++ ldr w1, [x29, 40] ++ mov w0, 17750 ++ movk w0, 0x444e, lsl 16 ++ cmp w1, w0 ++ bne .L3490 ++ ldr w2, [x29, 44] ++ cmp w2, 504 ++ bhi .L3490 ++ mov w0, 30224 ++ adrp x1, .LANCHOR4 ++ movk w0, 0x4004, lsl 16 ++ uxtw x2, w2 ++ cmp w19, w0 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x0, x29, 48 ++ bne .L3507 ++ ldr x1, [x1, 2600] ++.L3532: ++ add x1, x1, 8 ++ b .L3531 ++.L3507: ++ ldr x1, [x1, 2608] ++ b .L3532 ++.L3509: ++ ldr x0, [x19, 2608] ++ bl memcpy ++ mov w0, 3 ++ ldr x1, [x19, 2608] ++ b .L3529 ++.L3479: ++ bl rknand_dev_flush ++ b .L3528 ++.L3511: ++ mov x19, -2 ++ b .L3473 ++ .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, -32]! ++ mov w0, -1 ++ mov w2, 512 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR4 ++ add x19, x20, :lo12:.LANCHOR4 ++ ldr x1, [x19, 2008] ++ str w0, [x19, 2048] ++ add x0, x1, 512 ++ str x0, [x19, 2056] ++ add x0, x1, 1024 ++ str x1, [x19, 2072] ++ str x0, [x19, 2600] ++ add x1, x1, 1536 ++ strb wzr, [x19, 2032] ++ add x0, x19, 2080 ++ str xzr, [x19, 2040] ++ str xzr, [x19, 2616] ++ str x1, [x19, 2608] ++ bl ftl_memcpy ++ ldr x6, [x19, 2072] ++ str wzr, [x19, 2064] ++ str wzr, [x19, 2592] ++ ldr w7, [x6, 508] ++ ldr w0, [x6, 16] ++ str w0, [x19, 2068] ++ cbz w7, .L3534 ++ mov w1, 508 ++ mov x0, x6 ++ bl js_hash ++ cmp w7, w0 ++ beq .L3534 ++ str wzr, [x6, 16] ++ adrp x0, .LC198 ++ str wzr, [x19, 2068] ++ add x0, x0, :lo12:.LC198 ++ bl printk ++.L3534: ++ add x0, x20, :lo12:.LANCHOR4 ++ ldr w1, [x0, 2068] ++ cbz w1, .L3535 ++ mov w1, 5161 ++ movk w1, 0xc059, lsl 16 ++ str w1, [x0, 2064] ++.L3535: ++ add x20, x20, :lo12:.LANCHOR4 ++ mov w0, 2 ++ ldr x1, [x20, 2600] ++ bl StorageSysDataLoad ++ ldr x1, [x20, 2608] ++ mov w0, 3 ++ bl StorageSysDataLoad ++ bl rknand_sys_storage_init ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ 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, -80]! ++ mov w0, 65536 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR4 ++ add x20, x19, :lo12:.LANCHOR4 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ bl ftl_malloc ++ str x0, [x20, 2624] ++ cbz x0, .L3550 ++ adrp x24, .LC199 ++ mov w26, 22084 ++ mov x22, x19 ++ add x24, x24, :lo12:.LC199 ++ mov w25, 0 ++ mov w23, 0 ++ mov w21, 0 ++ movk w26, 0x524b, lsl 16 ++.L3548: ++ ldr x2, [x20, 2624] ++ mov w1, 128 ++ lsl w0, w21, 7 ++ bl FlashBootVendorRead ++ cbnz w0, .L3546 ++ ldr x0, [x20, 2624] ++ add x1, x0, 61440 ++ ldr w3, [x0, 4] ++ ldr w2, [x1, 4092] ++ ldr w1, [x0] ++ mov x0, x24 ++ bl printk ++ ldr x19, [x20, 2624] ++ ldr w0, [x19] ++ cmp w0, w26 ++ bne .L3547 ++ add x0, x19, 61440 ++ ldr w1, [x19, 4] ++ ldr w0, [x0, 4092] ++ cmp w0, w1 ++ bne .L3547 ++ cmp w0, w23 ++ bls .L3547 ++ mov w25, w21 ++ mov w23, w0 ++.L3547: ++ add w21, w21, 1 ++ cmp w21, 2 ++ bne .L3548 ++ cbz w23, .L3549 ++ mov x2, x19 ++ mov w1, 128 ++ lsl w0, w25, 7 ++ bl FlashBootVendorRead ++ cbnz w0, .L3546 ++.L3544: ++ 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 ++.L3549: ++ mov w1, 0 ++ mov x2, 65536 ++ mov x0, x19 ++ bl memset ++ mov w1, 22084 ++ mov w0, 1 ++ movk w1, 0x524b, lsl 16 ++ stp w1, w0, [x19] ++ add x1, x19, 61440 ++ str w0, [x1, 4092] ++ mov w0, -1032 ++ strh w0, [x19, 14] ++ mov w0, 0 ++ b .L3544 ++.L3546: ++ add x22, x22, :lo12:.LANCHOR4 ++ ldr x0, [x22, 2624] ++ bl kfree ++ str xzr, [x22, 2624] ++ mov w0, -1 ++ b .L3544 ++.L3550: ++ mov w0, -12 ++ b .L3544 ++ .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, .LANCHOR4+2624 ++ ldr x4, [x3, #:lo12:.LANCHOR4+2624] ++ cbz x4, .L3558 ++ ldrh w6, [x4, 10] ++ add x5, x4, 16 ++ mov w3, 0 ++.L3555: ++ cmp w3, w6 ++ bcc .L3557 ++.L3558: ++ mov w0, -1 ++ ret ++.L3557: ++ ldrh w7, [x5], 8 ++ cmp w7, w0 ++ bne .L3556 ++ stp x29, x30, [sp, -32]! ++ add x3, x4, w3, uxtw 3 ++ mov x0, x1 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ ldrh w19, [x3, 20] ++ ldrh w1, [x3, 18] ++ cmp w19, w2 ++ csel w19, w19, w2, ls ++ add x1, x1, 1024 ++ uxtw x2, w19 ++ add x1, x4, x1 ++ bl memcpy ++ mov w0, w19 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L3556: ++ add w3, w3, 1 ++ b .L3555 ++ .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]! ++ adrp x3, .LANCHOR4+2624 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ ldr x19, [x3, #:lo12:.LANCHOR4+2624] ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ cbz x19, .L3578 ++ add w4, w2, 63 ++ ldrh w3, [x19, 10] ++ ldrh w24, [x19, 8] ++ mov x28, x1 ++ mov w26, w2 ++ and w22, w4, -64 ++ add x1, x19, 16 ++ mov w20, 0 ++.L3565: ++ cmp w20, w3 ++ bcc .L3573 ++ ldrh w1, [x19, 14] ++ cmp w22, w1 ++ bhi .L3578 ++ add x3, x19, w3, uxth 3 ++ strh w0, [x3, 16] ++ and w0, w22, 65535 ++ ldrh w2, [x19, 12] ++ strh w2, [x3, 18] ++ strh w26, [x3, 20] ++ add w2, w2, w0 ++ sub w0, w1, w0 ++ strh w2, [x19, 12] ++ strh w0, [x19, 14] ++ uxtw x2, w26 ++ mov x1, x28 ++ 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] ++ b .L3580 ++.L3573: ++ ldrh w6, [x1], 8 ++ cmp w6, w0 ++ bne .L3566 ++ uxtw x23, w20 ++ add x5, x19, 1024 ++ add x21, x19, x23, lsl 3 ++ ldrh w25, [x21, 20] ++ add w25, w25, 63 ++ and w25, w25, -64 ++ cmp w26, w25 ++ bls .L3567 ++ ldrh w0, [x19, 14] ++ cmp w22, w0 ++ bhi .L3578 ++ add x23, x23, 2 ++ ldrh w21, [x21, 18] ++ add x23, x19, x23, lsl 3 ++ sub w3, w3, #1 ++.L3568: ++ cmp w20, w3 ++ bcc .L3569 ++ add x20, x19, w20, uxtw 3 ++ and w21, w21, 65535 ++ add x0, x5, w21, uxth ++ uxtw x2, w26 ++ mov x1, x28 ++ strh w21, [x20, 18] ++ strh w6, [x20, 16] ++ strh w26, [x20, 20] ++ bl memcpy ++ ldrh w0, [x19, 14] ++ and w4, w22, 65535 ++ add w21, w21, w4 ++ strh w21, [x19, 12] ++ sub w0, w0, w4 ++ add w25, w0, w25 ++ strh w25, [x19, 14] ++.L3580: ++ 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 ++ and w0, w0, 65535 ++ cmp w0, 1 ++ csel w0, w0, wzr, ls ++ strh w0, [x19, 8] ++ lsl w0, w24, 7 ++ bl FlashBootVendorWrite ++ mov w0, 0 ++.L3563: ++ 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 ++.L3569: ++ add w20, w20, 1 ++ stp w3, w6, [x29, 96] ++ add x0, x19, w20, uxtw 3 ++ str x5, [x29, 104] ++ add x23, x23, 8 ++ ldrh w1, [x0, 16] ++ strh w1, [x23, -8] ++ ldrh w1, [x0, 20] ++ strh w1, [x23, -4] ++ strh w21, [x23, -6] ++ ldrh w27, [x0, 20] ++ ldrh w1, [x0, 18] ++ add x0, x5, w21, uxtw ++ add w27, w27, 63 ++ and w27, w27, -64 ++ add x1, x5, x1 ++ and x2, x27, 131008 ++ bl memcpy ++ add w21, w21, w27 ++ ldr x5, [x29, 104] ++ ldp w3, w6, [x29, 96] ++ b .L3568 ++.L3567: ++ ldrh w0, [x21, 18] ++ uxtw x2, w26 ++ mov x1, x28 ++ add x0, x5, x0 ++ bl memcpy ++ strh w26, [x21, 20] ++ b .L3580 ++.L3566: ++ add w20, w20, 1 ++ b .L3565 ++.L3578: ++ mov w0, -1 ++ b .L3563 ++ .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]! ++ mov w0, 4096 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x2 ++ str x21, [sp, 32] ++ mov w21, w1 ++ bl ftl_malloc ++ cbz x0, .L3589 ++ mov w1, 30209 ++ mov x19, x0 ++ movk w1, 0x4004, lsl 16 ++ cmp w21, w1 ++ beq .L3584 ++ add w1, w1, 1 ++ cmp w21, w1 ++ beq .L3585 ++.L3595: ++ mov x20, -14 ++ b .L3583 ++.L3584: ++ mov x2, 8 ++ mov x1, x20 ++ bl rk_copy_from_user ++ cbnz x0, .L3595 ++ ldr w1, [x19] ++ mov w0, 17745 ++ movk w0, 0x5652, lsl 16 ++ cmp w1, w0 ++ beq .L3587 ++.L3588: ++ mov x20, -1 ++.L3583: ++ mov x0, x19 ++ bl kfree ++.L3581: ++ mov x0, x20 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L3587: ++ ldrh w2, [x19, 6] ++ add x1, x19, 8 ++ ldrh w0, [x19, 4] ++ bl rk_ftl_vendor_read ++ cmn w0, #1 ++ beq .L3588 ++ strh w0, [x19, 6] ++ and x0, x0, 65535 ++ add x2, x0, 8 ++ mov x1, x19 ++ mov x0, x20 ++ bl rk_copy_to_user ++ cbnz x0, .L3595 ++ mov x20, 0 ++ b .L3583 ++.L3585: ++ mov x2, 8 ++ mov x1, x20 ++ bl rk_copy_from_user ++ cbnz x0, .L3595 ++ ldr w1, [x19] ++ mov w0, 17745 ++ movk w0, 0x5652, lsl 16 ++ cmp w1, w0 ++ bne .L3588 ++ ldrh w2, [x19, 6] ++ cmp w2, 4087 ++ bhi .L3588 ++ add w2, w2, 8 ++ mov x1, x20 ++ sxtw x2, w2 ++ mov x0, x19 ++ bl rk_copy_from_user ++ cbnz x0, .L3595 ++ ldrh w2, [x19, 6] ++ add x1, x19, 8 ++ ldrh w0, [x19, 4] ++ bl rk_ftl_vendor_write ++ sxtw x20, w0 ++ b .L3583 ++.L3589: ++ mov x20, -1 ++ b .L3581 ++ .size rk_ftl_vendor_storage_ioctl, .-rk_ftl_vendor_storage_ioctl ++ .global SecureBootUnlockTryCount ++ .global SecureBootCheckOK ++ .global SecureBootEn ++ .global gpVendor1Info ++ .global gpVendor0Info ++ .global g_idb_buffer ++ .global gSnSectorData ++ .global gpDrmKeyInfo ++ .global gpBootConfig ++ .global ftl_dma32_buffer_size ++ .global ftl_dma32_buffer ++ .global gLoaderBootInfo ++ .global RK29_NANDC1_REG_BASE ++ .global RK29_NANDC_REG_BASE ++ .global gc_ink_free_return_value ++ .global check_valid_page_count_table ++ .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_3 ++ .global g_gc_next_blk_2 ++ .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 ++ .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 idb_flash_slc_mode ++ .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_nand_ecc_en ++ .global g_slc2KBNand ++ .global g_maxRetryCount ++ .global g_maxRegNum ++ .global g_retryMode ++ .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 gFlashCurMode ++ .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 IDByte ++ .global read_retry_cur_offset ++ .section .rodata ++ .align 3 ++ .set .LANCHOR3,. + 0 ++ .type __func__.27063, %object ++ .size __func__.27063, 11 ++__func__.27063: ++ .string "FtlMemInit" ++ .zero 5 ++ .type samsung_14nm_slc_rr, %object ++ .size samsung_14nm_slc_rr, 26 ++samsung_14nm_slc_rr: ++ .byte 0 ++ .byte 10 ++ .byte -10 ++ .byte 20 ++ .byte -20 ++ .byte 30 ++ .byte -30 ++ .byte 40 ++ .byte -40 ++ .byte 50 ++ .byte -50 ++ .byte 60 ++ .byte -60 ++ .byte -70 ++ .byte -80 ++ .byte -90 ++ .byte -100 ++ .byte -110 ++ .byte -120 ++ .byte -9 ++ .byte 70 ++ .byte 80 ++ .byte 90 ++ .byte -125 ++ .byte -115 ++ .byte 100 ++ .zero 6 ++ .type samsung_14nm_mlc_rr, %object ++ .size samsung_14nm_mlc_rr, 104 ++samsung_14nm_mlc_rr: ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -4 ++ .byte 3 ++ .byte -4 ++ .byte -6 ++ .byte 6 ++ .byte 0 ++ .byte 6 ++ .byte -10 ++ .byte -10 ++ .byte 4 ++ .byte -10 ++ .byte 16 ++ .byte 12 ++ .byte -4 ++ .byte 12 ++ .byte 8 ++ .byte -16 ++ .byte 10 ++ .byte -16 ++ .byte 24 ++ .byte 18 ++ .byte -14 ++ .byte 18 ++ .byte -4 ++ .byte -22 ++ .byte -16 ++ .byte -22 ++ .byte -8 ++ .byte 24 ++ .byte -9 ++ .byte 24 ++ .byte 8 ++ .byte -28 ++ .byte -4 ++ .byte -28 ++ .byte 16 ++ .byte 30 ++ .byte 10 ++ .byte 30 ++ .byte 10 ++ .byte -34 ++ .byte 6 ++ .byte -34 ++ .byte 0 ++ .byte 36 ++ .byte -8 ++ .byte 36 ++ .byte -8 ++ .byte -40 ++ .byte -2 ++ .byte -40 ++ .byte -20 ++ .byte -46 ++ .byte -4 ++ .byte -46 ++ .byte -30 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte -3 ++ .byte -2 ++ .byte -4 ++ .byte -2 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -4 ++ .byte -10 ++ .byte -6 ++ .byte -8 ++ .byte -6 ++ .byte -14 ++ .byte -9 ++ .byte -8 ++ .byte -9 ++ .byte -18 ++ .byte -52 ++ .byte 22 ++ .byte -52 ++ .byte 10 ++ .byte 42 ++ .byte 4 ++ .byte 42 ++ .byte 4 ++ .byte 48 ++ .byte -9 ++ .byte 48 ++ .byte 4 ++ .byte -58 ++ .byte 12 ++ .byte -58 ++ .byte 0 ++ .byte -64 ++ .byte -24 ++ .byte -64 ++ .byte -6 ++ .byte 9 ++ .byte 18 ++ .byte 9 ++ .byte 8 ++ .type __func__.27842, %object ++ .size __func__.27842, 17 ++__func__.27842: ++ .string "FtlDumpBlockInfo" ++ .zero 7 ++ .type __func__.27861, %object ++ .size __func__.27861, 16 ++__func__.27861: ++ .string "FtlScanAllBlock" ++ .type __func__.28129, %object ++ .size __func__.28129, 17 ++__func__.28129: ++ .string "ftl_scan_all_ppa" ++ .zero 7 ++ .type __func__.27810, %object ++ .size __func__.27810, 12 ++__func__.27810: ++ .string "FtlCheckVpc" ++ .zero 4 ++ .type __func__.28109, %object ++ .size __func__.28109, 21 ++__func__.28109: ++ .string "FtlVpcCheckAndModify" ++ .zero 3 ++ .type __func__.27136, %object ++ .size __func__.27136, 8 ++__func__.27136: ++ .string "FtlInit" ++ .data ++ .align 3 ++ .set .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 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 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 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 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 gFtlInitStatus, %object ++ .size gFtlInitStatus, 4 ++gFtlInitStatus: ++ .word -1 ++ .zero 4 ++ .type NandFlashParaTbl, %object ++ .size NandFlashParaTbl, 2752 ++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 -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .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 68 ++ .byte 50 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 1048 ++ .hword 1479 ++ .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 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .zero 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .zero 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte -60 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .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 -124 ++ .byte 68 ++ .byte 52 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .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 -124 ++ .byte 100 ++ .byte 60 ++ .byte -87 ++ .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 6 ++ .byte 44 ++ .byte -92 ++ .byte 100 ++ .byte 50 ++ .byte -86 ++ .byte 4 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 1024 ++ .byte 2 ++ .byte 1 ++ .hword 2192 ++ .hword 1479 ++ .byte 10 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .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 -83 ++ .byte 58 ++ .byte 20 ++ .byte 3 ++ .byte 8 ++ .byte 80 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .hword 388 ++ .byte 2 ++ .byte 2 ++ .hword 1362 ++ .hword 473 ++ .byte 9 ++ .byte 8 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .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 5 ++ .byte -119 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -95 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 1024 ++ .hword 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .zero 4 ++ .byte 5 ++ .byte -119 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 2 ++ .hword 1024 ++ .hword 455 ++ .byte 4 ++ .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 59 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .hword 192 ++ .byte 2 ++ .byte 2 ++ .hword 2048 ++ .hword 279 ++ .byte 12 ++ .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 -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -47 ++ .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 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 5 ++ .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 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -108 ++ .byte -61 ++ .byte -92 ++ .byte -54 ++ .byte 0 ++ .byte 1 ++ .byte 32 ++ .hword 792 ++ .byte 2 ++ .byte 1 ++ .hword 688 ++ .hword 1217 ++ .byte 11 ++ .byte 50 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .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 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 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 ++ .set .LANCHOR0,. + 0 ++ .set .LANCHOR2,. + 4352 ++ .set .LANCHOR4,. + 8704 ++ .type gNandChipMap, %object ++ .size gNandChipMap, 64 ++gNandChipMap: ++ .zero 64 ++ .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 gpNandParaInfo, %object ++ .size gpNandParaInfo, 8 ++gpNandParaInfo: ++ .zero 8 ++ .type gNandOptPara, %object ++ .size gNandOptPara, 32 ++gNandOptPara: ++ .zero 32 ++ .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 6 ++ .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 gFlashSlcMode, %object ++ .size gFlashSlcMode, 1 ++gFlashSlcMode: ++ .zero 1 ++ .zero 3 ++ .type slcPageToMlcPageTbl, %object ++ .size slcPageToMlcPageTbl, 1024 ++slcPageToMlcPageTbl: ++ .zero 1024 ++ .type DieAddrs, %object ++ .size DieAddrs, 32 ++DieAddrs: ++ .zero 32 ++ .type FlashWaitBusyScheduleEn, %object ++ .size FlashWaitBusyScheduleEn, 4 ++FlashWaitBusyScheduleEn: ++ .zero 4 ++ .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 IDByte, %object ++ .size IDByte, 32 ++IDByte: ++ .zero 32 ++ .type gDieOp, %object ++ .size gDieOp, 192 ++gDieOp: ++ .zero 192 ++ .type gFlashCurMode, %object ++ .size gFlashCurMode, 1 ++gFlashCurMode: ++ .zero 1 ++ .type gFlashInterfaceMode, %object ++ .size gFlashInterfaceMode, 1 ++gFlashInterfaceMode: ++ .zero 1 ++ .type gNandMaxDie, %object ++ .size gNandMaxDie, 1 ++gNandMaxDie: ++ .zero 1 ++ .zero 1 ++ .type DieCsIndex, %object ++ .size DieCsIndex, 8 ++DieCsIndex: ++ .zero 8 ++ .type gMultiPageProgEn, %object ++ .size gMultiPageProgEn, 1 ++gMultiPageProgEn: ++ .zero 1 ++ .zero 3 ++ .type g_inkDie_check_enable, %object ++ .size g_inkDie_check_enable, 4 ++g_inkDie_check_enable: ++ .zero 4 ++ .type idb_flash_slc_mode, %object ++ .size idb_flash_slc_mode, 4 ++idb_flash_slc_mode: ++ .zero 4 ++ .type gFlashToggleModeEn, %object ++ .size gFlashToggleModeEn, 1 ++gFlashToggleModeEn: ++ .zero 1 ++ .zero 3 ++ .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 gNandFlashEccBits, %object ++ .size gNandFlashEccBits, 1 ++gNandFlashEccBits: ++ .zero 1 ++ .zero 3 ++ .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 6 ++ .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_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 ++ .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_MaxLbaSector, %object ++ .size g_MaxLbaSector, 4 ++g_MaxLbaSector: ++ .zero 4 ++ .type g_page_map_check_enable, %object ++ .size g_page_map_check_enable, 2 ++g_page_map_check_enable: ++ .zero 2 ++ .type g_totle_vendor_block, %object ++ .size g_totle_vendor_block, 2 ++g_totle_vendor_block: ++ .zero 2 ++ .type p_vendor_block_table, %object ++ .size p_vendor_block_table, 8 ++p_vendor_block_table: ++ .zero 8 ++ .type g_wr_page_num, %object ++ .size g_wr_page_num, 4 ++g_wr_page_num: ++ .zero 4 ++ .zero 4 ++ .type req_wr_io, %object ++ .size req_wr_io, 8 ++req_wr_io: ++ .zero 8 ++ .type g_MaxLpn, %object ++ .size g_MaxLpn, 4 ++g_MaxLpn: ++ .zero 4 ++ .zero 4 ++ .type gBbtInfo, %object ++ .size gBbtInfo, 96 ++gBbtInfo: ++ .zero 96 ++ .type gSysFreeQueue, %object ++ .size gSysFreeQueue, 2056 ++gSysFreeQueue: ++ .zero 2056 ++ .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_erase, %object ++ .size req_erase, 8 ++req_erase: ++ .zero 8 ++ .type p_erase_count_table, %object ++ .size p_erase_count_table, 8 ++p_erase_count_table: ++ .zero 8 ++ .type g_totle_sys_slc_erase_count, %object ++ .size g_totle_sys_slc_erase_count, 4 ++g_totle_sys_slc_erase_count: ++ .zero 4 ++ .zero 4 ++ .type g_sys_save_data, %object ++ .size g_sys_save_data, 48 ++g_sys_save_data: ++ .zero 48 ++ .type p_data_block_list_table, %object ++ .size p_data_block_list_table, 8 ++p_data_block_list_table: ++ .zero 8 ++ .type p_data_block_list_head, %object ++ .size p_data_block_list_head, 8 ++p_data_block_list_head: ++ .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_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 p_l2p_ram_map, %object ++ .size p_l2p_ram_map, 8 ++p_l2p_ram_map: ++ .zero 8 ++ .type g_l2p_last_update_region_id, %object ++ .size g_l2p_last_update_region_id, 2 ++g_l2p_last_update_region_id: ++ .zero 2 ++ .type FtlUpdateVaildLpnCount, %object ++ .size FtlUpdateVaildLpnCount, 2 ++FtlUpdateVaildLpnCount: ++ .zero 2 ++ .type g_VaildLpn, %object ++ .size g_VaildLpn, 4 ++g_VaildLpn: ++ .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_discard_page_count, %object ++ .size g_totle_discard_page_count, 4 ++g_totle_discard_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_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_gc_page_count, %object ++ .size g_totle_gc_page_count, 4 ++g_totle_gc_page_count: ++ .zero 4 ++ .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_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_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_avg_erase_count, %object ++ .size g_totle_avg_erase_count, 4 ++g_totle_avg_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 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 gSysInfo, %object ++ .size gSysInfo, 16 ++gSysInfo: ++ .zero 16 ++ .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_all_blk_used_slc_mode, %object ++ .size g_all_blk_used_slc_mode, 4 ++g_all_blk_used_slc_mode: ++ .zero 4 ++ .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_skip_write_count, %object ++ .size g_gc_skip_write_count, 4 ++g_gc_skip_write_count: ++ .zero 4 ++ .type g_gc_blk_index, %object ++ .size g_gc_blk_index, 2 ++g_gc_blk_index: ++ .zero 2 ++ .zero 2 ++ .type g_in_swl_replace, %object ++ .size g_in_swl_replace, 4 ++g_in_swl_replace: ++ .zero 4 ++ .type g_gc_num_req, %object ++ .size g_gc_num_req, 4 ++g_gc_num_req: ++ .zero 4 ++ .type gp_gc_page_buf_info, %object ++ .size gp_gc_page_buf_info, 8 ++gp_gc_page_buf_info: ++ .zero 8 ++ .type p_gc_data_buf, %object ++ .size p_gc_data_buf, 8 ++p_gc_data_buf: ++ .zero 8 ++ .type p_gc_spare_buf, %object ++ .size p_gc_spare_buf, 8 ++p_gc_spare_buf: ++ .zero 8 ++ .type req_gc, %object ++ .size req_gc, 8 ++req_gc: ++ .zero 8 ++ .type c_gc_page_buf_num, %object ++ .size c_gc_page_buf_num, 4 ++c_gc_page_buf_num: ++ .zero 4 ++ .type g_gc_blk_num, %object ++ .size g_gc_blk_num, 2 ++g_gc_blk_num: ++ .zero 2 ++ .zero 2 ++ .type p_gc_blk_tbl, %object ++ .size p_gc_blk_tbl, 8 ++p_gc_blk_tbl: ++ .zero 8 ++ .type g_gc_page_offset, %object ++ .size g_gc_page_offset, 2 ++g_gc_page_offset: ++ .zero 2 ++ .zero 6 ++ .type p_gc_page_info, %object ++ .size p_gc_page_info, 8 ++p_gc_page_info: ++ .zero 8 ++ .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_next_blk_2, %object ++ .size g_gc_next_blk_2, 2 ++g_gc_next_blk_2: ++ .zero 2 ++ .type g_gc_next_blk_3, %object ++ .size g_gc_next_blk_3, 2 ++g_gc_next_blk_3: ++ .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 ++ .zero 6 ++ .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_gc_bad_block_gc_index, %object ++ .size g_gc_bad_block_gc_index, 2 ++g_gc_bad_block_gc_index: ++ .zero 2 ++ .type mlcPageToSlcPageTbl, %object ++ .size mlcPageToSlcPageTbl, 2048 ++mlcPageToSlcPageTbl: ++ .zero 2048 ++ .type gNandMaxChip, %object ++ .size gNandMaxChip, 1 ++gNandMaxChip: ++ .zero 1 ++ .zero 1 ++ .type gTotleBlock, %object ++ .size gTotleBlock, 2 ++gTotleBlock: ++ .zero 2 ++ .type g_free_slc_blk_num, %object ++ .size g_free_slc_blk_num, 2 ++g_free_slc_blk_num: ++ .zero 2 ++ .zero 2 ++ .type g_SlcPartLbaEndSector, %object ++ .size g_SlcPartLbaEndSector, 4 ++g_SlcPartLbaEndSector: ++ .zero 4 ++ .type g_in_gc_progress, %object ++ .size g_in_gc_progress, 4 ++g_in_gc_progress: ++ .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_cur_erase_blk, %object ++ .size g_cur_erase_blk, 4 ++g_cur_erase_blk: ++ .zero 4 ++ .type g_gc_refresh_block_temp_num, %object ++ .size g_gc_refresh_block_temp_num, 2 ++g_gc_refresh_block_temp_num: ++ .zero 2 ++ .zero 2 ++ .type c_wr_page_buf_num, %object ++ .size c_wr_page_buf_num, 4 ++c_wr_page_buf_num: ++ .zero 4 ++ .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 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_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 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_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_valid_page_count_check_table, %object ++ .size p_valid_page_count_check_table, 8 ++p_valid_page_count_check_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_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_map_buf, %object ++ .size p_l2p_map_buf, 8 ++p_l2p_map_buf: ++ .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 gL2pMapInfo, %object ++ .size gL2pMapInfo, 64 ++gL2pMapInfo: ++ .zero 64 ++ .type g_totle_map_block, %object ++ .size g_totle_map_block, 2 ++g_totle_map_block: ++ .zero 2 ++ .zero 6 ++ .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 gNandIDataBuf, %object ++ .size gNandIDataBuf, 2048 ++gNandIDataBuf: ++ .zero 2048 ++ .type RK29_NANDC_REG_BASE, %object ++ .size RK29_NANDC_REG_BASE, 8 ++RK29_NANDC_REG_BASE: ++ .zero 8 ++ .type ftl_dma32_buffer_size, %object ++ .size ftl_dma32_buffer_size, 4 ++ftl_dma32_buffer_size: ++ .zero 4 ++ .zero 4 ++ .type ftl_dma32_buffer, %object ++ .size ftl_dma32_buffer, 8 ++ftl_dma32_buffer: ++ .zero 8 ++ .type gFlashPageBuffer0, %object ++ .size gFlashPageBuffer0, 8 ++gFlashPageBuffer0: ++ .zero 8 ++ .type FlashDdrTunningReadCount, %object ++ .size FlashDdrTunningReadCount, 4 ++FlashDdrTunningReadCount: ++ .zero 4 ++ .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 gNandFlashIdbBlockAddr, %object ++ .size gNandFlashIdbBlockAddr, 4 ++gNandFlashIdbBlockAddr: ++ .zero 4 ++ .type gNandIDBResBlkNumSaveInFlash, %object ++ .size gNandIDBResBlkNumSaveInFlash, 1 ++gNandIDBResBlkNumSaveInFlash: ++ .zero 1 ++ .type g_maxRetryCount, %object ++ .size g_maxRetryCount, 1 ++g_maxRetryCount: ++ .zero 1 ++ .type gNandFlashIDBEccBits, %object ++ .size gNandFlashIDBEccBits, 1 ++gNandFlashIDBEccBits: ++ .zero 1 ++ .zero 5 ++ .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 g_nand_ecc_en, %object ++ .size g_nand_ecc_en, 1 ++g_nand_ecc_en: ++ .zero 1 ++ .type gMultiPageReadEn, %object ++ .size gMultiPageReadEn, 1 ++gMultiPageReadEn: ++ .zero 1 ++ .zero 6 ++ .type FbbtBlk, %object ++ .size FbbtBlk, 16 ++FbbtBlk: ++ .zero 16 ++ .type req_sys, %object ++ .size req_sys, 56 ++req_sys: ++ .zero 56 ++ .type g_MaxLbn, %object ++ .size g_MaxLbn, 4 ++g_MaxLbn: ++ .zero 4 ++ .zero 4 ++ .type gVendorBlkInfo, %object ++ .size gVendorBlkInfo, 64 ++gVendorBlkInfo: ++ .zero 64 ++ .type g_ect_tbl_power_up_flush, %object ++ .size g_ect_tbl_power_up_flush, 2 ++g_ect_tbl_power_up_flush: ++ .zero 2 ++ .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_LowFormat, %object ++ .size g_LowFormat, 4 ++g_LowFormat: ++ .zero 4 ++ .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 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 idb_write_enable, %object ++ .size idb_write_enable, 1 ++idb_write_enable: ++ .zero 1 ++ .zero 7 ++ .type idb_buf, %object ++ .size idb_buf, 8 ++idb_buf: ++ .zero 8 ++ .type idb_last_lba, %object ++ .size idb_last_lba, 4 ++idb_last_lba: ++ .zero 4 ++ .zero 4 ++ .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_idb_buffer, %object ++ .size g_idb_buffer, 8 ++g_idb_buffer: ++ .zero 8 ++ .type g_vendor, %object ++ .size g_vendor, 8 ++g_vendor: ++ .zero 8 ++ .type check_valid_page_count_table, %object ++ .size check_valid_page_count_table, 8192 ++check_valid_page_count_table: ++ .zero 8192 ++ .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 ++ .section .rodata.str1.1,"aMS",@progbits,1 ++.LC0: ++ .string "FlashEraseBlocks pageAddr error %x\n" ++.LC1: ++ .string "phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\n" ++.LC2: ++ .string "FtlFreeSysBlkQueueOut free count = %d\n" ++.LC3: ++ .string "FtlFreeSysBlkQueueOut = %x, free count = %d, error\n" ++.LC4: ++ .string "FtlFreeSysBlkQueueOut = %x, free count = %d\n" ++.LC5: ++ .string "FLASH INFO:\n" ++.LC6: ++ .string "FLASH ID: %x\n" ++.LC7: ++ .string "Device Capacity: %d MB\n" ++.LC8: ++ .string "FMWAIT: %x %x %x %x\n" ++.LC9: ++ .string "FTL INFO:\n" ++.LC10: ++ .string "g_MaxLpn = 0x%x\n" ++.LC11: ++ .string "g_VaildLpn = 0x%x\n" ++.LC12: ++ .string "read_page_count = 0x%x\n" ++.LC13: ++ .string "discard_page_count = 0x%x\n" ++.LC14: ++ .string "write_page_count = 0x%x\n" ++.LC15: ++ .string "cache_write_count = 0x%x\n" ++.LC16: ++ .string "l2p_write_count = 0x%x\n" ++.LC17: ++ .string "gc_page_count = 0x%x\n" ++.LC18: ++ .string "totle_write = %d MB\n" ++.LC19: ++ .string "totle_read = %d MB\n" ++.LC20: ++ .string "GSV = 0x%x\n" ++.LC21: ++ .string "GDV = 0x%x\n" ++.LC22: ++ .string "bad blk num = %d %d\n" ++.LC23: ++ .string "free_superblocks = 0x%x\n" ++.LC24: ++ .string "mlc_EC = 0x%x\n" ++.LC25: ++ .string "slc_EC = 0x%x\n" ++.LC26: ++ .string "avg_EC = 0x%x\n" ++.LC27: ++ .string "sys_EC = 0x%x\n" ++.LC28: ++ .string "max_EC = 0x%x\n" ++.LC29: ++ .string "min_EC = 0x%x\n" ++.LC30: ++ .string "PLT = 0x%x\n" ++.LC31: ++ .string "POT = 0x%x\n" ++.LC32: ++ .string "MaxSector = 0x%x\n" ++.LC33: ++ .string "init_sys_blks_pp = 0x%x\n" ++.LC34: ++ .string "sys_blks_pp = 0x%x\n" ++.LC35: ++ .string "free sysblock = 0x%x\n" ++.LC36: ++ .string "data_blks_pp = 0x%x\n" ++.LC37: ++ .string "data_op_blks_pp = 0x%x\n" ++.LC38: ++ .string "max_data_blks = 0x%x\n" ++.LC39: ++ .string "Sys.id = 0x%x\n" ++.LC40: ++ .string "Bbt.id = 0x%x\n" ++.LC41: ++ .string "ACT.page = 0x%x\n" ++.LC42: ++ .string "ACT.plane = 0x%x\n" ++.LC43: ++ .string "ACT.id = 0x%x\n" ++.LC44: ++ .string "ACT.mode = 0x%x\n" ++.LC45: ++ .string "ACT.a_pages = 0x%x\n" ++.LC46: ++ .string "ACT VPC = 0x%x\n" ++.LC47: ++ .string "BUF.page = 0x%x\n" ++.LC48: ++ .string "BUF.plane = 0x%x\n" ++.LC49: ++ .string "BUF.id = 0x%x\n" ++.LC50: ++ .string "BUF.mode = 0x%x\n" ++.LC51: ++ .string "BUF.a_pages = 0x%x\n" ++.LC52: ++ .string "BUF VPC = 0x%x\n" ++.LC53: ++ .string "TMP.page = 0x%x\n" ++.LC54: ++ .string "TMP.plane = 0x%x\n" ++.LC55: ++ .string "TMP.id = 0x%x\n" ++.LC56: ++ .string "TMP.mode = 0x%x\n" ++.LC57: ++ .string "TMP.a_pages = 0x%x\n" ++.LC58: ++ .string "GC.page = 0x%x\n" ++.LC59: ++ .string "GC.plane = 0x%x\n" ++.LC60: ++ .string "GC.id = 0x%x\n" ++.LC61: ++ .string "GC.mode = 0x%x\n" ++.LC62: ++ .string "GC.a_pages = 0x%x\n" ++.LC63: ++ .string "WR_CHK = 0x%x %x %x %x\n" ++.LC64: ++ .string "Read Err = 0x%x\n" ++.LC65: ++ .string "Prog Err = 0x%x\n" ++.LC66: ++ .string "gc_free_blk_th= 0x%x\n" ++.LC67: ++ .string "gc_merge_free_blk_th= 0x%x\n" ++.LC68: ++ .string "gc_skip_write_count= 0x%x\n" ++.LC69: ++ .string "gc_blk_index= 0x%x\n" ++.LC70: ++ .string "free min EC= 0x%x\n" ++.LC71: ++ .string "free max EC= 0x%x\n" ++.LC72: ++ .string "GC__SB VPC = 0x%x\n" ++.LC73: ++ .string "%d. [0x%x]=0x%x 0x%x 0x%x\n" ++.LC74: ++ .string "free %d. [0x%x] 0x%x 0x%x\n" ++.LC75: ++ .string "FTL version: 5.0.63 20210616" ++.LC76: ++ .string "%s\n" ++.LC77: ++ .string "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x\n" ++.LC78: ++ .string "FtlGcRefreshBlock 0x%x\n" ++.LC79: ++ .string "FtlGcMarkBadPhyBlk %d 0x%x\n" ++.LC80: ++ .string "%s error allocating memory. return -1\n" ++.LC81: ++ .string "%s %p:0x%x:" ++.LC82: ++ .string "%x " ++.LC83: ++ .string "" ++.LC84: ++ .string "otp error! %d" ++.LC85: ++ .string "rr" ++.LC86: ++ .string "%d statReg->V6.mtrans_cnt=%d flReg.V6.page_num=%d\n" ++.LC87: ++ .string "nandc:" ++.LC88: ++ .string "%d flReg.d32=%x %x\n" ++.LC89: ++ .string "sdr read ok %x ecc=%d\n" ++.LC90: ++ .string "sync para %d\n" ++.LC91: ++ .string "TOG mode Read error %x %x\n" ++.LC92: ++ .string "read retry status %x %x %x\n" ++.LC93: ++ .string "micron RR %d row=%x,count %d,status=%d\n" ++.LC94: ++ .string "samsung RR %d row=%x,count %d,status=%d\n" ++.LC95: ++ .string "ECC:%d\n" ++.LC96: ++ .string "No.%d FLASH ID:%x %x %x %x %x %x\n" ++.LC97: ++ .string "FlashLoadPhyInfo fail %x!!\n" ++.LC98: ++ .string "Read pageadd=%x ecc=%x err=%x\n" ++.LC99: ++ .string "data:" ++.LC100: ++ .string "spare:" ++.LC101: ++ .string "ReadRetry pageadd=%x ecc=%x err=%x\n" ++.LC102: ++ .string "FLFB:%d %d\n" ++.LC103: ++ .string "prog error: = %x\n" ++.LC104: ++ .string "prog read error: = %x\n" ++.LC105: ++ .string "prog read REFRESH: = %x\n" ++.LC106: ++ .string "prog read s error: = %x %x %x\n" ++.LC107: ++ .string "prog read d error: = %x %x %x\n" ++.LC108: ++ .string "id = %x,%x addr= %x,spare= %x %x %x %x data= %x\n" ++.LC109: ++ .string "...%s enter...\n" ++.LC110: ++ .string "superBlkID = %x vpc=%x\n" ++.LC111: ++ .string "flashmode = %x pagenum = %x %x\n" ++.LC112: ++ .string "id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC113: ++ .string "blk = %x vpc=%x mode = %x\n" ++.LC114: ++ .string "mlc id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC115: ++ .string "slc id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC116: ++ .string "ftl_scan_all_ppa blk %x page %x flag: %x\n" ++.LC117: ++ .string "ftl_scan_all_ppa blk %x page %x flag: %x ............... is bad block\n" ++.LC118: ++ .string "addr= %x, status= %d,spare= %x %x %x %x data=%x %x\n" ++.LC119: ++ .string "%s finished\n" ++.LC120: ++ .string "FlashMakeFactorBbt %d\n" ++.LC121: ++ .string "bad block:%d %d\n" ++.LC122: ++ .string "FMFB:%d %d\n" ++.LC123: ++ .string "E:bad block:%d\n" ++.LC124: ++ .string "FMFB:Save %d %d\n" ++.LC125: ++ .string "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\n" ++.LC126: ++ .string "FtlBbmTblFlush error:%x\n" ++.LC127: ++ .string "FtlBbmTblFlush error = %x error count = %d\n" ++.LC128: ++ .string "FtlGcFreeBadSuperBlk 0x%x\n" ++.LC129: ++ .string "decrement_vpc_count %x = %d\n" ++.LC130: ++ .string "decrement_vpc_count %x = %d in free list\n" ++.LC131: ++ .string "FtlVpcTblFlush error = %x error count = %d\n" ++.LC132: ++ .string "page map lost: %x %x\n" ++.LC133: ++ .string "FtlMapWritePage error = %x\n" ++.LC134: ++ .string "FtlMapWritePage error = %x error count = %d\n" ++.LC135: ++ .string "FtlVendorPartRead refresh = %x phyAddr = %x\n" ++.LC136: ++ .string "no ect" ++.LC137: ++ .string "slc mode" ++.LC138: ++ .string "BBT:" ++.LC139: ++ .string "region_id = %x phyAddr = %x\n" ++.LC140: ++ .string "map_ppn:" ++.LC141: ++ .string "load_l2p_region refresh = %x phyAddr = %x\n" ++.LC142: ++ .string "FtlCheckVpc2 %x = %x %x\n" ++.LC143: ++ .string "free blk vpc error %x = %x %x\n" ++.LC144: ++ .string "error_flag %x\n" ++.LC145: ++ .string "Ftlscanalldata = %x\n" ++.LC146: ++ .string "scan lpa = %x ppa= %x\n" ++.LC147: ++ .string "lba = %x,addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC148: ++ .string "RSB refresh addr %x\n" ++.LC149: ++ .string "spuer block %x vpn is 0\n " ++.LC150: ++ .string "g_recovery_ppa %x ver %x\n " ++.LC151: ++ .string "FtlCheckVpc %x = %x %x\n" ++.LC152: ++ .string "FtlGcScanTempBlk Error ID %x %x!!!!!!! \n" ++.LC153: ++ .string "FtlGcScanTempBlkError ID %x %x!!!!!!!\n" ++.LC154: ++ .string "GC des block %x done\n" ++.LC155: ++ .string "too many bad block = %d %d\n" ++.LC156: ++ .string "%d GC datablk = %x vpc %x %x\n" ++.LC157: ++ .string "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\n" ++.LC158: ++ .string "Ftlwrite decrement_vpc_count %x = %d\n" ++.LC159: ++ .string "rk_ftl_de_init %x\n" ++.LC160: ++ .string "...%s: no bad block mapping table, format device\n" ++.LC161: ++ .string "...%s FtlSysBlkInit error ,format device!\n" ++.LC162: ++ .string "FtlInit %x\n" ++.LC163: ++ .string "fix power lost blk = %x vpc=%x\n" ++.LC164: ++ .string "erase power lost blk = %x vpc=%x\n" ++.LC165: ++ .string "FtlWrite: lpa error:%x %x\n" ++.LC166: ++ .string "id = %x,%x addr= %x,spare= %x %x %x %x data = %x\n" ++.LC167: ++ .string ":" ++.LC168: ++ .string "phyBlk = %x,addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC169: ++ .string "Mblk:" ++.LC170: ++ .string "L2P:" ++.LC171: ++ .string "L2PC:" ++.LC172: ++ .string "write_idblock fix data %x %x\n" ++.LC173: ++ .string "idblk:" ++.LC174: ++ .string "idb reverse %x %x\n" ++.LC175: ++ .string "write_idblock totle_sec %x %x %x %x\n" ++.LC176: ++ .string "IDBlockWriteData %x %x\n" ++.LC177: ++ .string "IDBlockWriteData %x %x ret= %x\n" ++.LC178: ++ .string "IdBlockReadData %x %x\n" ++.LC179: ++ .string "IdBlockReadData %x %x ret= %x\n" ++.LC180: ++ .string "write and check error:%d idb=%x,offset=%x,r=%x,w=%x\n" ++.LC181: ++ .string "write" ++.LC182: ++ .string "read" ++.LC183: ++ .string "write_idblock error %d\n" ++.LC184: ++ .string "wl_lba %p %x %x %x\n" ++.LC185: ++ .string "RKNAND_GET_DRM_KEY\n" ++.LC186: ++ .string "rk_copy_from_user error\n" ++.LC187: ++ .string "RKNAND_STORE_DRM_KEY\n" ++.LC188: ++ .string "RKNAND_DIASBLE_SECURE_BOOT\n" ++.LC189: ++ .string "RKNAND_ENASBLE_SECURE_BOOT\n" ++.LC190: ++ .string "RKNAND_GET_SN_SECTOR\n" ++.LC191: ++ .string "RKNAND_LOADER_UNLOCK\n" ++.LC192: ++ .string "RKNAND_LOADER_STATUS\n" ++.LC193: ++ .string "RKNAND_LOADER_LOCK\n" ++.LC194: ++ .string "LockKey not match %d\n" ++.LC195: ++ .string "RKNAND_GET_VENDOR_SECTOR\n" ++.LC196: ++ .string "RKNAND_STORE_VENDOR_SECTOR\n" ++.LC197: ++ .string "return ret = %lx\n" ++.LC198: ++ .string "secureBootEn check error\n" ++.LC199: ++ .string "\0013vendor storage %x,%x,%x\n" +diff --git a/drivers/rk_nand/rk_ftlv5_arm32.S b/drivers/rk_nand/rk_ftlv5_arm32.S +new file mode 100644 +index 00000000000..035bf726401 +--- /dev/null ++++ b/drivers/rk_nand/rk_ftlv5_arm32.S +@@ -0,0 +1,27612 @@ ++/* ++ * Copyright (c) 2016-2018, 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: 2021-07-26 ++ * function: rk ftl v5 for rockchip soc base on arm v7 to support MLC NAND. ++ */ ++ .arch armv7-a ++ .eabi_attribute 20, 1 ++ .eabi_attribute 21, 1 ++ .eabi_attribute 23, 3 ++ .eabi_attribute 24, 1 ++ .eabi_attribute 25, 1 ++ .eabi_attribute 26, 2 ++ .eabi_attribute 30, 4 ++ .eabi_attribute 34, 1 ++ .eabi_attribute 18, 2 ++ .file "rk_ftlv5_arm_v8.c" ++ .text ++ .align 2 ++ .fpu softvfp ++ .type ndelay, %function ++ndelay: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L2 ++ add r0, r0, #996 ++ add r0, r0, #3 ++ umull r0, r1, r0, r3 ++ ldr r3, .L2+4 ++ ldr r3, [r3, #8] ++ lsr r0, r1, #6 ++ bx r3 @ indirect register sibling call ++.L3: ++ .align 2 ++.L2: ++ .word 274877907 ++ .word arm_delay_ops ++ .fnend ++ .size ndelay, .-ndelay ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_read_ecc, %function ++flash_read_ecc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L6 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ mov r0, #80 ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r4, r4, r3, lsl #8 ++ mov r3, #122 ++ str r3, [r4, #2056] ++ bl ndelay ++ ldr r3, [r4, #2048] ++ ldr r0, [r4, #2048] ++ and r3, r3, #15 ++ and r0, r0, #15 ++ cmp r0, r3 ++ movcc r0, r3 ++ ldr r3, [r4, #2048] ++ and r3, r3, #15 ++ cmp r3, r0 ++ movcc r3, r0 ++ ldr r0, [r4, #2048] ++ and r0, r0, #15 ++ cmp r0, r3 ++ movcc r0, r3 ++ pop {r4, pc} ++.L7: ++ .align 2 ++.L6: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_read_ecc, .-flash_read_ecc ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_set_blk_mode.part.17, %function ++ftl_set_blk_mode.part.17: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L9 ++ lsr r1, r0, #5 ++ mov ip, #1 ++ and r0, r0, #31 ++ ldr r2, [r3, #32] ++ ldr r3, [r2, r1, lsl #2] ++ orr r0, r3, ip, lsl r0 ++ str r0, [r2, r1, lsl #2] ++ bx lr ++.L10: ++ .align 2 ++.L9: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_set_blk_mode.part.17, .-ftl_set_blk_mode.part.17 ++ .align 2 ++ .global FlashMemCmp8 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashMemCmp8, %function ++FlashMemCmp8: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L25 ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L20 ++ ldrb r3, [r1, #1] @ zero_extendqisi2 ++ ldrb ip, [r0, #1] @ zero_extendqisi2 ++ cmp ip, r3 ++ movne r3, #0 ++ bne .L20 ++.L24: ++ mov r0, #0 ++ bx lr ++.L14: ++ cmp r3, r2 ++ bne .L16 ++ mov r0, #0 ++ ldr pc, [sp], #4 ++.L20: ++ cmp r3, r2 ++ beq .L24 ++ str lr, [sp, #-4]! ++ .save {lr} ++.L16: ++ ldrb lr, [r0, r3] @ zero_extendqisi2 ++ ldrb ip, [r1, r3] @ zero_extendqisi2 ++ add r3, r3, #1 ++ cmp lr, ip ++ beq .L14 ++ mov r0, r3 ++ ldr pc, [sp], #4 ++.L26: ++ .align 2 ++.L25: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashMemCmp8, .-FlashMemCmp8 ++ .align 2 ++ .global FlashRsvdBlkChk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashRsvdBlkChk, %function ++FlashRsvdBlkChk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L28 ++ ldrb ip, [r2, #37] @ zero_extendqisi2 ++ ldr r3, [r2, #40] ++ mul r3, r3, ip ++ cmp r3, r1 ++ movls r2, #0 ++ movhi r2, #1 ++ cmp r0, #0 ++ movne r2, #0 ++ eor r0, r2, #1 ++ bx lr ++.L29: ++ .align 2 ++.L28: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashRsvdBlkChk, .-FlashRsvdBlkChk ++ .align 2 ++ .global FlashGetRandomizer ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashGetRandomizer, %function ++FlashGetRandomizer: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ and r3, r1, #127 ++ ldr r2, .L39 ++ lsl r3, r3, #1 ++ push {r4, lr} ++ .save {r4, lr} ++ ldrh r4, [r2, r3] ++ ldr r3, .L39+4 ++ ldrb r3, [r3, #44] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L30 ++ bl FlashRsvdBlkChk ++ cmp r0, #0 ++ orrne r4, r4, #-1073741824 ++.L30: ++ mov r0, r4 ++ pop {r4, pc} ++.L40: ++ .align 2 ++.L39: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashGetRandomizer, .-FlashGetRandomizer ++ .align 2 ++ .global FlashSetRandomizer ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashSetRandomizer, %function ++FlashSetRandomizer: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L50 ++ and r3, r1, #127 ++ lsl r3, r3, #1 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r6, r0 ++ ldrh r5, [r2, r3] ++ ldr r3, .L50+4 ++ ldrb r2, [r3, #44] @ zero_extendqisi2 ++ mov r4, r3 ++ cmp r2, #0 ++ beq .L42 ++ bl FlashRsvdBlkChk ++ cmp r0, #0 ++ orrne r5, r5, #-1073741824 ++.L42: ++ ldr r3, [r4, r6, lsl #3] ++ str r5, [r3, #336] ++ pop {r4, r5, r6, pc} ++.L51: ++ .align 2 ++.L50: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashSetRandomizer, .-FlashSetRandomizer ++ .align 2 ++ .global FlashBlockAlignInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashBlockAlignInit, %function ++FlashBlockAlignInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r0, #512 ++ ldr r3, .L58 ++ movhi r2, #1024 ++ bhi .L57 ++ cmp r0, #256 ++ movhi r2, #512 ++ bhi .L57 ++ cmp r0, #128 ++ movhi r2, #256 ++ bhi .L57 ++ str r0, [r3, #40] ++ bx lr ++.L57: ++ str r2, [r3, #40] ++ bx lr ++.L59: ++ .align 2 ++.L58: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashBlockAlignInit, .-FlashBlockAlignInit ++ .align 2 ++ .global FlashReadCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadCmd, %function ++FlashReadCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L63 ++ str lr, [sp, #-4]! ++ .save {lr} ++ add r2, ip, r0, lsl #3 ++ ldr r3, [ip, r0, lsl #3] ++ ldr ip, [ip, #48] ++ ldrb r2, [r2, #4] @ zero_extendqisi2 ++ ldrb ip, [ip, #7] @ zero_extendqisi2 ++ lsl r2, r2, #8 ++ cmp ip, #1 ++ addeq ip, r3, r2 ++ moveq lr, #38 ++ add r3, r3, r2 ++ mov r2, #0 ++ streq lr, [ip, #2056] ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ uxtb r2, r1 ++ str r2, [r3, #2052] ++ lsr r2, r1, #8 ++ str r2, [r3, #2052] ++ lsr r2, r1, #16 ++ str r2, [r3, #2052] ++ mov r2, #48 ++ str r2, [r3, #2056] ++ ldr lr, [sp], #4 ++ b FlashSetRandomizer ++.L64: ++ .align 2 ++.L63: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadCmd, .-FlashReadCmd ++ .align 2 ++ .global FlashReadDpDataOutCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadDpDataOutCmd, %function ++FlashReadDpDataOutCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L70 ++ push {r4, lr} ++ .save {r4, lr} ++ uxtb r4, r1 ++ lsr lr, r1, #8 ++ add r2, ip, r0, lsl #3 ++ ldr r3, [ip, r0, lsl #3] ++ ldrb ip, [ip, #68] @ zero_extendqisi2 ++ ldrb r2, [r2, #4] @ zero_extendqisi2 ++ cmp ip, #1 ++ lsr ip, r1, #16 ++ lsl r2, r2, #8 ++ add r3, r3, r2 ++ bne .L66 ++ mov r2, #6 ++ str r2, [r3, #2056] ++ mov r2, #0 ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ str r4, [r3, #2052] ++ str lr, [r3, #2052] ++ str ip, [r3, #2052] ++.L69: ++ mov r2, #224 ++ str r2, [r3, #2056] ++ pop {r4, lr} ++ b FlashSetRandomizer ++.L66: ++ mov r2, #0 ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ str r4, [r3, #2052] ++ str lr, [r3, #2052] ++ str ip, [r3, #2052] ++ mov ip, #5 ++ str ip, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ b .L69 ++.L71: ++ .align 2 ++.L70: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadDpDataOutCmd, .-FlashReadDpDataOutCmd ++ .align 2 ++ .global FlashProgFirstCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgFirstCmd, %function ++FlashProgFirstCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L74 ++ lsr r2, r1, #16 ++ str lr, [sp, #-4]! ++ .save {lr} ++ ldr r3, [ip, r0, lsl #3] ++ add ip, ip, r0, lsl #3 ++ ldrb ip, [ip, #4] @ zero_extendqisi2 ++ add r3, r3, ip, lsl #8 ++ mov ip, #128 ++ str ip, [r3, #2056] ++ mov ip, #0 ++ str ip, [r3, #2052] ++ str ip, [r3, #2052] ++ uxtb ip, r1 ++ str ip, [r3, #2052] ++ lsr ip, r1, #8 ++ str ip, [r3, #2052] ++ str r2, [r3, #2052] ++ ldr lr, [sp], #4 ++ b FlashSetRandomizer ++.L75: ++ .align 2 ++.L74: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgFirstCmd, .-FlashProgFirstCmd ++ .align 2 ++ .global FlashEraseCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashEraseCmd, %function ++FlashEraseCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L82 ++ cmp r2, #0 ++ str lr, [sp, #-4]! ++ .save {lr} ++ ldr r3, [ip, r0, lsl #3] ++ add r0, ip, r0, lsl #3 ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ lsl r0, r0, #8 ++ beq .L77 ++ add r2, r3, r0 ++ mov lr, #96 ++ str lr, [r2, #2056] ++ uxtb lr, r1 ++ str lr, [r2, #2052] ++ lsr lr, r1, #8 ++ str lr, [r2, #2052] ++ lsr lr, r1, #16 ++ str lr, [r2, #2052] ++ ldr r2, [ip, #40] ++ add r1, r1, r2 ++.L77: ++ add r3, r3, r0 ++ mov r2, #96 ++ str r2, [r3, #2056] ++ uxtb r2, r1 ++ str r2, [r3, #2052] ++ lsr r2, r1, #8 ++ lsr r1, r1, #16 ++ str r2, [r3, #2052] ++ mov r2, #208 ++ str r1, [r3, #2052] ++ str r2, [r3, #2056] ++ ldr pc, [sp], #4 ++.L83: ++ .align 2 ++.L82: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashEraseCmd, .-FlashEraseCmd ++ .align 2 ++ .global FlashProgDpSecondCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgDpSecondCmd, %function ++FlashProgDpSecondCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ lsr r2, r1, #16 ++ ldr lr, .L86 ++ ldr r3, [lr, r0, lsl #3] ++ add ip, lr, r0, lsl #3 ++ ldrb r4, [ip, #4] @ zero_extendqisi2 ++ ldrb ip, [lr, #63] @ zero_extendqisi2 ++ add r3, r3, r4, lsl #8 ++ str ip, [r3, #2056] ++ mov ip, #0 ++ str ip, [r3, #2052] ++ str ip, [r3, #2052] ++ uxtb ip, r1 ++ str ip, [r3, #2052] ++ lsr ip, r1, #8 ++ str ip, [r3, #2052] ++ str r2, [r3, #2052] ++ pop {r4, lr} ++ b FlashSetRandomizer ++.L87: ++ .align 2 ++.L86: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgDpSecondCmd, .-FlashProgDpSecondCmd ++ .align 2 ++ .global FlashProgSecondCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgSecondCmd, %function ++FlashProgSecondCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L90 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ ldr r0, .L90+4 ++ ldrb r5, [r3, #4] @ zero_extendqisi2 ++ ldr r3, .L90+8 ++ add r4, r4, r5, lsl #8 ++ ldr r3, [r3, #4] ++ blx r3 ++ mov r3, #16 ++ str r3, [r4, #2056] ++ pop {r4, r5, r6, pc} ++.L91: ++ .align 2 ++.L90: ++ .word .LANCHOR0 ++ .word 64424500 ++ .word arm_delay_ops ++ .fnend ++ .size FlashProgSecondCmd, .-FlashProgSecondCmd ++ .align 2 ++ .global FlashProgDpFirstCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgDpFirstCmd, %function ++FlashProgDpFirstCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L93 ++ ldr r3, [r2, r0, lsl #3] ++ add r0, r2, r0, lsl #3 ++ ldrb r2, [r2, #62] @ zero_extendqisi2 ++ ldrb r1, [r0, #4] @ zero_extendqisi2 ++ add r3, r3, r1, lsl #8 ++ str r2, [r3, #2056] ++ bx lr ++.L94: ++ .align 2 ++.L93: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgDpFirstCmd, .-FlashProgDpFirstCmd ++ .align 2 ++ .global FlashReadStatus ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadStatus, %function ++FlashReadStatus: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L97 ++ mov r2, #112 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r5, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ mov r0, #80 ++ ldrb r4, [r3, #4] @ zero_extendqisi2 ++ add r3, r5, r4, lsl #8 ++ add r4, r4, #8 ++ str r2, [r3, #2056] ++ bl ndelay ++ ldr r0, [r5, r4, lsl #8] ++ pop {r4, r5, r6, pc} ++.L98: ++ .align 2 ++.L97: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadStatus, .-FlashReadStatus ++ .align 2 ++ .global js_hash ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type js_hash, %function ++js_hash: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L102 ++ add r1, r0, r1 ++.L100: ++ cmp r0, r1 ++ bne .L101 ++ mov r0, r3 ++ bx lr ++.L101: ++ lsr r2, r3, #2 ++ ldrb ip, [r0], #1 @ zero_extendqisi2 ++ add r2, r2, r3, lsl #5 ++ add r2, r2, ip ++ eor r3, r3, r2 ++ b .L100 ++.L103: ++ .align 2 ++.L102: ++ .word 1204201446 ++ .fnend ++ .size js_hash, .-js_hash ++ .align 2 ++ .global FlashLoadIdbInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashLoadIdbInfo, %function ++FlashLoadIdbInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r0, #0 ++ bx lr ++ .fnend ++ .size FlashLoadIdbInfo, .-FlashLoadIdbInfo ++ .align 2 ++ .global BuildFlashLsbPageTable ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type BuildFlashLsbPageTable, %function ++BuildFlashLsbPageTable: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r0, #0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r1 ++ bne .L106 ++ ldr r3, .L162 ++.L107: ++ lsl r2, r0, #1 ++ strh r0, [r2, r3] @ movhi ++ add r0, r0, #1 ++ cmp r0, #512 ++ bne .L107 ++.L113: ++ mov r2, #2048 ++ mov r1, #255 ++ ldr r0, .L162+4 ++ uxth r4, r4 ++ bl ftl_memset ++ ldr r2, .L162 ++ mov r3, #0 ++ add r0, r2, #1024 ++.L108: ++ uxth r1, r3 ++ cmp r4, r1 ++ bhi .L141 ++ pop {r4, pc} ++.L106: ++ cmp r0, #1 ++ bne .L109 ++ ldr r1, .L162 ++ mov r3, #0 ++.L112: ++ cmp r3, #3 ++ uxth r2, r3 ++ bls .L110 ++ tst r2, #1 ++ movne r0, #3 ++ moveq r0, #2 ++ rsb r2, r0, r2, lsl #1 ++ uxth r2, r2 ++.L110: ++ lsl r0, r3, #1 ++ add r3, r3, #1 ++ cmp r3, #512 ++ strh r2, [r0, r1] @ movhi ++ bne .L112 ++ b .L113 ++.L109: ++ cmp r0, #2 ++ bne .L114 ++ ldr r1, .L162 ++ mov r2, #0 ++.L116: ++ uxth r3, r2 ++ cmp r2, #1 ++ lsl r0, r2, #1 ++ add r2, r2, #1 ++ lslhi r3, r3, #1 ++ subhi r3, r3, #1 ++ uxthhi r3, r3 ++ cmp r2, #512 ++ strh r3, [r0, r1] @ movhi ++ bne .L116 ++ b .L113 ++.L114: ++ cmp r0, #3 ++ bne .L117 ++ ldr r1, .L162 ++ mov r3, #0 ++.L120: ++ cmp r3, #5 ++ uxth r2, r3 ++ bls .L118 ++ tst r2, #1 ++ movne r0, #5 ++ moveq r0, #4 ++ rsb r2, r0, r2, lsl #1 ++ uxth r2, r2 ++.L118: ++ lsl r0, r3, #1 ++ add r3, r3, #1 ++ cmp r3, #512 ++ strh r2, [r0, r1] @ movhi ++ bne .L120 ++ b .L113 ++.L117: ++ cmp r0, #4 ++ mov r3, #0 ++ bne .L121 ++ ldr r2, .L162+8 ++ strh r3, [r2, #84] @ movhi ++ mov r3, #1 ++ strh r3, [r2, #86] @ movhi ++ mov r3, #2 ++ strh r3, [r2, #88] @ movhi ++ mov r3, #3 ++ strh r3, [r2, #90] @ movhi ++ mov r3, #5 ++ strh r3, [r2, #94] @ movhi ++ mov r3, #7 ++ strh r3, [r2, #96] @ movhi ++ mov r3, #8 ++ strh r0, [r2, #92] @ movhi ++ strh r3, [r2, #98]! @ movhi ++.L123: ++ tst r3, #1 ++ movne r1, #7 ++ moveq r1, #6 ++ rsb r1, r1, r3, lsl #1 ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r1, [r2, #2]! @ movhi ++ cmp r3, #512 ++ bne .L123 ++ b .L113 ++.L121: ++ cmp r0, #5 ++ bne .L124 ++ ldr r2, .L162+8 ++ add r1, r2, #84 ++.L125: ++ lsl r0, r3, #1 ++ strh r3, [r0, r1] @ movhi ++ add r3, r3, #1 ++ cmp r3, #16 ++ bne .L125 ++ add r2, r2, #114 ++.L126: ++ strh r3, [r2, #2]! @ movhi ++ add r3, r3, #2 ++ uxth r3, r3 ++ cmp r3, #1008 ++ bne .L126 ++ b .L113 ++.L124: ++ cmp r0, #6 ++ bne .L127 ++ ldr r0, .L162 ++ mov r1, r3 ++.L130: ++ cmp r1, #5 ++ uxth r2, r1 ++ bls .L128 ++ tst r2, #1 ++ movne r2, #12 ++ moveq r2, #10 ++ sub r2, r3, r2 ++ uxth r2, r2 ++.L128: ++ lsl ip, r1, #1 ++ add r1, r1, #1 ++ cmp r1, #512 ++ add r3, r3, #3 ++ strh r2, [ip, r0] @ movhi ++ uxth r3, r3 ++ bne .L130 ++ b .L113 ++.L127: ++ cmp r0, #9 ++ bne .L131 ++ ldr r2, .L162+8 ++ movw r1, #1021 ++ strh r3, [r2, #84] @ movhi ++ mov r3, #1 ++ strh r3, [r2, #86] @ movhi ++ mov r3, r2 ++ mov r2, #2 ++ strh r2, [r3, #88]! @ movhi ++ mov r2, #3 ++.L132: ++ strh r2, [r3, #2]! @ movhi ++ add r2, r2, #2 ++ uxth r2, r2 ++ cmp r2, r1 ++ bne .L132 ++ b .L113 ++.L131: ++ cmp r0, #10 ++ bne .L133 ++ ldr r2, .L162+8 ++ add r1, r2, #84 ++.L134: ++ lsl r0, r3, #1 ++ strh r3, [r0, r1] @ movhi ++ add r3, r3, #1 ++ cmp r3, #63 ++ bne .L134 ++ add r2, r2, #208 ++ movw r1, #961 ++.L135: ++ strh r3, [r2, #2]! @ movhi ++ add r3, r3, #2 ++ uxth r3, r3 ++ cmp r3, r1 ++ bne .L135 ++ b .L113 ++.L133: ++ cmp r0, #11 ++ bne .L136 ++ ldr r2, .L162+8 ++ mov r3, #0 ++ add r1, r2, #84 ++.L137: ++ lsl r0, r3, #1 ++ strh r3, [r0, r1] @ movhi ++ add r3, r3, #1 ++ cmp r3, #8 ++ bne .L137 ++ add r2, r2, #98 ++.L139: ++ tst r3, #1 ++ movne r1, #7 ++ moveq r1, #6 ++ rsb r1, r1, r3, lsl #1 ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r1, [r2, #2]! @ movhi ++ cmp r3, #512 ++ bne .L139 ++ b .L113 ++.L136: ++ cmp r0, #12 ++ bne .L113 ++ ldr r3, .L162+8 ++ mov r2, #0 ++ strh r2, [r3, #84] @ movhi ++ mov r2, #1 ++ strh r2, [r3, #86] @ movhi ++ mov r2, #2 ++ strh r2, [r3, #88] @ movhi ++ mov r2, #3 ++ strh r2, [r3, #90]! @ movhi ++ mov r2, #4 ++.L140: ++ sub r1, r2, #1 ++ add r1, r1, r2, lsr #1 ++ add r2, r2, #1 ++ uxth r2, r2 ++ strh r1, [r3, #2]! @ movhi ++ cmp r2, #512 ++ bne .L140 ++ b .L113 ++.L141: ++ lsl r1, r3, #1 ++ add r3, r3, #1 ++ ldrh r1, [r1, r2] ++ lsl ip, r1, #1 ++ strh r1, [r0, ip] @ movhi ++ b .L108 ++.L163: ++ .align 2 ++.L162: ++ .word .LANCHOR0+84 ++ .word .LANCHOR0+1108 ++ .word .LANCHOR0 ++ .fnend ++ .size BuildFlashLsbPageTable, .-BuildFlashLsbPageTable ++ .align 2 ++ .global FlashPrintInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashPrintInfo, %function ++FlashPrintInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FlashPrintInfo, .-FlashPrintInfo ++ .align 2 ++ .global ToshibaSetRRPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ToshibaSetRRPara, %function ++ToshibaSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ add r8, r1, r1, lsl #2 ++ ldr r7, .L173 ++ mov r6, r0 ++ mov r5, #0 ++ add r7, r1, r7 ++.L166: ++ ldr r3, .L173+4 ++ ldrb r3, [r3] @ zero_extendqisi2 ++ cmp r5, r3 ++ bcc .L170 ++ pop {r4, r5, r6, r7, r8, pc} ++.L170: ++ ldr r4, .L173+8 ++ mov r3, #85 ++ str r3, [r6, #8] ++ mov r0, #200 ++ ldrsb r3, [r5, r4] ++ str r3, [r6, #4] ++ bl ndelay ++ ldr r3, .L173+12 ++ ldrb r3, [r3] @ zero_extendqisi2 ++ cmp r3, #34 ++ addeq r3, r5, r8 ++ addeq r4, r4, r3 ++ ldrsbeq r3, [r4, #5] ++ beq .L172 ++ cmp r3, #35 ++ addeq r3, r5, r8 ++ ldrsbne r3, [r7] ++ addeq r4, r4, r3 ++ ldrsbeq r3, [r4, #50] ++.L172: ++ str r3, [r6] ++ add r5, r5, #1 ++ b .L166 ++.L174: ++ .align 2 ++.L173: ++ .word .LANCHOR1+396 ++ .word g_maxRegNum ++ .word .LANCHOR1+256 ++ .word g_retryMode ++ .fnend ++ .size ToshibaSetRRPara, .-ToshibaSetRRPara ++ .align 2 ++ .global SamsungSetRRPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SamsungSetRRPara, %function ++SamsungSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L179 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r4, #0 ++ ldr r8, .L179+4 ++ mov r6, r0 ++ mov r7, r3 ++ mov r9, #161 ++ add r1, r3, r1, lsl #2 ++ mov r10, r4 ++ add r5, r1, #3 ++.L176: ++ ldrb r3, [r8] @ zero_extendqisi2 ++ cmp r4, r3 ++ bcc .L177 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L177: ++ str r9, [r6, #8] ++ mov r0, #300 ++ str r10, [r6] ++ ldrsb r3, [r7, r4] ++ add r4, r4, #1 ++ str r3, [r6] ++ ldrsb r3, [r5, #1]! ++ str r3, [r6] ++ bl ndelay ++ b .L176 ++.L180: ++ .align 2 ++.L179: ++ .word .LANCHOR1+404 ++ .word g_maxRegNum ++ .fnend ++ .size SamsungSetRRPara, .-SamsungSetRRPara ++ .align 2 ++ .global FlashDieInfoInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashDieInfoInit, %function ++FlashDieInfoInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L196 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r6, #0 ++ ldr r4, .L196+4 ++ ldrh r0, [r3, #10] ++ strb r6, [r4, #3156] ++ strb r6, [r4, #3157] ++ bl FlashBlockAlignInit ++ mov r2, #8 ++ mov r1, r6 ++ ldr r0, .L196+8 ++ bl ftl_memset ++ mov r2, #32 ++ mov r1, r6 ++ add r0, r4, #3168 ++ ldr r9, .L196+12 ++ bl ftl_memset ++ mov r2, #128 ++ mov r1, r6 ++ add r0, r4, #3200 ++ mov r8, r9 ++ bl ftl_memset ++ ldr r5, [r4, #48] ++ add r7, r5, #1 ++.L183: ++ ldrb r2, [r5] @ zero_extendqisi2 ++ add r1, r9, r6, lsl #3 ++ mov r0, r7 ++ bl FlashMemCmp8 ++ cmp r0, #0 ++ bne .L182 ++ ldrb r3, [r4, #3156] @ zero_extendqisi2 ++ add r2, r4, r3, lsl #2 ++ str r0, [r2, #3168] ++ add r2, r3, #1 ++ add r3, r4, r3 ++ strb r2, [r4, #3156] ++ strb r6, [r3, #3160] ++.L182: ++ add r6, r6, #1 ++ cmp r6, #4 ++ bne .L183 ++ ldrb r3, [r4, #3156] @ zero_extendqisi2 ++ strb r3, [r4, #3157] ++ ldrb r3, [r5, #8] @ zero_extendqisi2 ++ cmp r3, #2 ++ beq .L184 ++.L188: ++ ldrh r2, [r5, #14] ++ ldrb r3, [r4, #3156] @ zero_extendqisi2 ++ smulbb r3, r3, r2 ++ ldrb r2, [r5, #13] @ zero_extendqisi2 ++ smulbb r3, r3, r2 ++ ldr r2, .L196+16 ++ strh r3, [r2] @ movhi ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L184: ++ ldr r9, [r4, #40] ++ mov r6, #0 ++.L187: ++ ldrb r2, [r5] @ zero_extendqisi2 ++ add r1, r8, r6, lsl #3 ++ mov r0, r7 ++ bl FlashMemCmp8 ++ cmp r0, #0 ++ bne .L185 ++ ldrh r3, [r5, #14] ++ ldrb r2, [r4, #3156] @ zero_extendqisi2 ++ and r1, r3, #65280 ++ ldrb r3, [r5, #13] @ zero_extendqisi2 ++ mul r3, r9, r3 ++ mul r3, r3, r1 ++ add r1, r4, r2, lsl #2 ++ str r3, [r1, #3168] ++ ldrb r0, [r5, #23] @ zero_extendqisi2 ++ cmp r0, #0 ++ lslne r3, r3, #1 ++ strne r3, [r1, #3168] ++ add r3, r2, #1 ++ add r2, r4, r2 ++ strb r3, [r4, #3156] ++ strb r6, [r2, #3160] ++.L185: ++ add r6, r6, #1 ++ cmp r6, #4 ++ bne .L187 ++ b .L188 ++.L197: ++ .align 2 ++.L196: ++ .word .LANCHOR1+468 ++ .word .LANCHOR0 ++ .word .LANCHOR0+3160 ++ .word IDByte ++ .word .LANCHOR0+3328 ++ .fnend ++ .size FlashDieInfoInit, .-FlashDieInfoInit ++ .align 2 ++ .global FlashReadIdbData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadIdbData, %function ++FlashReadIdbData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r2, #2048 ++ ldr r1, .L200 ++ bl ftl_memcpy ++ mov r0, #0 ++ pop {r4, pc} ++.L201: ++ .align 2 ++.L200: ++ .word .LANCHOR0+3332 ++ .fnend ++ .size FlashReadIdbData, .-FlashReadIdbData ++ .align 2 ++ .global FlashLoadPhyInfoInRam ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashLoadPhyInfoInRam, %function ++FlashLoadPhyInfoInRam: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r4, #0 ++ ldr r5, .L211 ++ ldr r9, .L211+4 ++ add r6, r5, #500 ++.L205: ++ lsl r8, r4, #5 ++ ldrb r2, [r6, r4, lsl #5] @ zero_extendqisi2 ++ mov r1, r9 ++ add r0, r8, #1 ++ add r0, r6, r0 ++ bl FlashMemCmp8 ++ subs r7, r0, #0 ++ bne .L203 ++ add r5, r5, r8 ++ ldr r2, .L211+8 ++ ldrb r0, [r5, #522] @ zero_extendqisi2 ++ add r6, r6, r8 ++ mov r3, r7 ++ mov r1, r2 ++.L204: ++ ldrb ip, [r2, r3, lsl #5] @ zero_extendqisi2 ++ cmp ip, r0 ++ beq .L207 ++ add r3, r3, #1 ++ cmp r3, #4 ++ bne .L204 ++.L207: ++ ldr r4, .L211+12 ++ add r1, r1, r3, lsl #5 ++ mov r2, #32 ++ ldr r0, .L211+16 ++ bl ftl_memcpy ++ mov r2, #32 ++ mov r1, r6 ++ mov r0, r4 ++ bl ftl_memcpy ++ ldrh r0, [r4, #10] ++ bl FlashBlockAlignInit ++ b .L202 ++.L203: ++ add r4, r4, #1 ++ cmp r4, #86 ++ bne .L205 ++ mvn r7, #0 ++.L202: ++ mov r0, r7 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L212: ++ .align 2 ++.L211: ++ .word .LANCHOR1 ++ .word IDByte ++ .word .LANCHOR1+3252 ++ .word .LANCHOR1+468 ++ .word .LANCHOR0+52 ++ .fnend ++ .size FlashLoadPhyInfoInRam, .-FlashLoadPhyInfoInRam ++ .align 2 ++ .global ftl_flash_suspend ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_flash_suspend, %function ++ftl_flash_suspend: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L214 ++ ldr r2, [r3, #-2804] ++ ldr r1, [r2] ++ str r1, [r3, #-2800] ++ ldr r1, [r2, #4] ++ str r1, [r3, #-2796] ++ ldr r1, [r2, #8] ++ str r1, [r3, #-2792] ++ ldr r1, [r2, #12] ++ str r1, [r3, #-2788] ++ ldr r1, [r2, #304] ++ str r1, [r3, #-2784] ++ ldr r1, [r2, #308] ++ str r1, [r3, #-2780] ++ ldr r1, [r2, #336] ++ ldr r2, [r2, #344] ++ str r1, [r3, #-2776] ++ str r2, [r3, #-2772] ++ bx lr ++.L215: ++ .align 2 ++.L214: ++ .word .LANCHOR2 ++ .fnend ++ .size ftl_flash_suspend, .-ftl_flash_suspend ++ .global __aeabi_uidiv ++ .global __aeabi_uidivmod ++ .align 2 ++ .global LogAddr2PhyAddr ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type LogAddr2PhyAddr, %function ++LogAddr2PhyAddr: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r9, r2 ++ ldr r2, .L222 ++ mov fp, r3 ++ mov r10, r1 ++ mov r7, r0 ++ ldr r5, .L222+4 ++ ldrh r3, [r2, #14] ++ ldrh r2, [r2, #12] ++ ldrh r6, [r5, #40] ++ ldr r4, [r0, #4] ++ smulbb r3, r3, r2 ++ ldrb r2, [r5, #36] @ zero_extendqisi2 ++ uxth r3, r3 ++ cmp r2, #1 ++ lsleq r6, r6, #1 ++ ubfx r2, r4, #10, #16 ++ mov r1, r3 ++ str r3, [sp, #4] ++ mov r0, r2 ++ uxtheq r6, r6 ++ str r2, [sp] ++ bl __aeabi_uidiv ++ ldr r3, [sp, #4] ++ uxth r8, r0 ++ ldr r2, [sp] ++ mov r1, r3 ++ mov r0, r2 ++ bl __aeabi_uidivmod ++ cmp r10, #1 ++ uxth r1, r1 ++ ubfx r0, r4, #0, #10 ++ bne .L218 ++ ldr r3, .L222+8 ++ ldrb r3, [r3, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ addeq r0, r5, r0, lsl #1 ++ ldrheq r0, [r0, #84] ++.L218: ++ add r5, r5, r8, lsl #2 ++ ldr r3, [r5, #3168] ++ mla r6, r6, r1, r3 ++ ldrb r3, [sp, #48] @ zero_extendqisi2 ++ cmp r3, #1 ++ add r0, r6, r0 ++ str r0, [r9] ++ movls r0, #0 ++ str r8, [fp] ++ ldrhi r0, [r7, #4] ++ ldrhi r3, [r7, #40] ++ addhi r0, r0, #1024 ++ subhi r0, r0, r3 ++ clzhi r0, r0 ++ lsrhi r0, r0, #5 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L223: ++ .align 2 ++.L222: ++ .word .LANCHOR2-2768 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size LogAddr2PhyAddr, .-LogAddr2PhyAddr ++ .align 2 ++ .global FlashReadStatusEN ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadStatusEN, %function ++FlashReadStatusEN: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L237 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r0, r3, r0, lsl #3 ++ ldrb r5, [r0, #4] @ zero_extendqisi2 ++ ldr r0, [r3, #48] ++ ldrb r0, [r0, #8] @ zero_extendqisi2 ++ cmp r0, #2 ++ mov r0, r3 ++ lsl r3, r5, #8 ++ movne r2, #112 ++ add r5, r5, #8 ++ addne r3, r4, r3 ++ strne r2, [r3, #2056] ++ bne .L230 ++ cmp r2, #0 ++ add r3, r4, r3 ++ ldrbne r2, [r0, #66] @ zero_extendqisi2 ++ ldrbeq r2, [r0, #65] @ zero_extendqisi2 ++ str r2, [r3, #2056] ++ ldrb r0, [r0, #67] @ zero_extendqisi2 ++ cmp r0, #0 ++ movne r2, #0 ++ addne ip, r4, r5, lsl #8 ++ bne .L229 ++.L230: ++ mov r0, #80 ++ bl ndelay ++ ldr r0, [r4, r5, lsl #8] ++ uxtb r0, r0 ++ pop {r4, r5, r6, pc} ++.L231: ++ lsl r3, r2, #3 ++ add r2, r2, #1 ++ lsr r3, r1, r3 ++ uxtb r3, r3 ++ str r3, [ip, #4] ++.L229: ++ cmp r2, r0 ++ bcc .L231 ++ b .L230 ++.L238: ++ .align 2 ++.L237: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadStatusEN, .-FlashReadStatusEN ++ .align 2 ++ .global FlashWaitReadyEN ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashWaitReadyEN, %function ++FlashWaitReadyEN: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++.L240: ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashReadStatusEN ++ cmp r0, #255 ++ beq .L240 ++ tst r0, #64 ++ popne {r4, r5, r6, pc} ++ mov r1, #3 ++ mov r0, #1 ++ bl rk_usleep_range ++ b .L240 ++ .fnend ++ .size FlashWaitReadyEN, .-FlashWaitReadyEN ++ .align 2 ++ .global ftl_read_flash_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_read_flash_info, %function ++ftl_read_flash_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r2, #11 ++ mov r1, #0 ++ mov r4, r0 ++ bl ftl_memset ++ ldr r2, .L250 ++ mov ip, #1 ++ ldr r0, .L250+4 ++ ldr r3, [r2, #48] ++ ldr r1, [r2, #40] ++ ldrb r3, [r3, #9] @ zero_extendqisi2 ++ smulbb r3, r3, r1 ++ strh r3, [r4, #4] @ unaligned ++ ldr r3, .L250+8 ++ ldrb r1, [r3, #-2739] @ zero_extendqisi2 ++ ldr r3, [r3, #-2736] ++ strb r1, [r4, #7] ++ str r3, [r4] @ unaligned ++ ldr r3, [r2, #48] ++ ldrb r1, [r3, #9] @ zero_extendqisi2 ++ strb r1, [r4, #6] ++ mov r1, #32 ++ strb r1, [r4, #8] ++ ldrb r1, [r2, #3156] @ zero_extendqisi2 ++ ldrb r3, [r3, #7] @ zero_extendqisi2 ++ strb r3, [r4, #9] ++ mov r3, #0 ++ strb r3, [r4, #10] ++.L247: ++ uxtb r2, r3 ++ cmp r1, r2 ++ bhi .L248 ++ pop {r4, pc} ++.L248: ++ ldrb lr, [r3, r0] @ zero_extendqisi2 ++ add r3, r3, #1 ++ ldrb r2, [r4, #10] @ zero_extendqisi2 ++ orr r2, r2, ip, lsl lr ++ strb r2, [r4, #10] ++ b .L247 ++.L251: ++ .align 2 ++.L250: ++ .word .LANCHOR0 ++ .word .LANCHOR0+3160 ++ .word .LANCHOR2 ++ .fnend ++ .size ftl_read_flash_info, .-ftl_read_flash_info ++ .align 2 ++ .global FlashScheduleEnSet ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashScheduleEnSet, %function ++FlashScheduleEnSet: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L253 ++ ldr r2, [r3, #-2732] ++ str r0, [r3, #-2732] ++ mov r0, r2 ++ bx lr ++.L254: ++ .align 2 ++.L253: ++ .word .LANCHOR2 ++ .fnend ++ .size FlashScheduleEnSet, .-FlashScheduleEnSet ++ .align 2 ++ .global FlashGetPageSize ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashGetPageSize, %function ++FlashGetPageSize: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L256 ++ ldr r3, [r3, #48] ++ ldrb r0, [r3, #9] @ zero_extendqisi2 ++ bx lr ++.L257: ++ .align 2 ++.L256: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashGetPageSize, .-FlashGetPageSize ++ .align 2 ++ .global NandcReadDontCaseBusyEn ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcReadDontCaseBusyEn, %function ++NandcReadDontCaseBusyEn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size NandcReadDontCaseBusyEn, .-NandcReadDontCaseBusyEn ++ .align 2 ++ .global NandcGetChipIf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcGetChipIf, %function ++NandcGetChipIf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L260 ++ add r3, r2, r0, lsl #3 ++ ldr r0, [r2, r0, lsl #3] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r3, r3, #8 ++ add r0, r0, r3, lsl #8 ++ bx lr ++.L261: ++ .align 2 ++.L260: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcGetChipIf, .-NandcGetChipIf ++ .align 2 ++ .global NandcSetDdrPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSetDdrPara, %function ++NandcSetDdrPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L263 ++ ldr r2, [r3, #-2804] ++ lsl r3, r0, #8 ++ orr r0, r3, r0, lsl #16 ++ orr r0, r0, #1 ++ str r0, [r2, #304] ++ bx lr ++.L264: ++ .align 2 ++.L263: ++ .word .LANCHOR2 ++ .fnend ++ .size NandcSetDdrPara, .-NandcSetDdrPara ++ .align 2 ++ .global NandcSetDdrDiv ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSetDdrDiv, %function ++NandcSetDdrDiv: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L266 ++ orr r0, r0, #16640 ++ ldr r3, [r3, #-2804] ++ str r0, [r3, #344] ++ bx lr ++.L267: ++ .align 2 ++.L266: ++ .word .LANCHOR2 ++ .fnend ++ .size NandcSetDdrDiv, .-NandcSetDdrDiv ++ .align 2 ++ .global NandcSetDdrMode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSetDdrMode, %function ++NandcSetDdrMode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L271 ++ cmp r0, #0 ++ ldr r2, [r3, #-2804] ++ ldr r3, [r2] ++ bfieq r3, r0, #13, #1 ++ orrne r3, r3, #253952 ++ str r3, [r2] ++ bx lr ++.L272: ++ .align 2 ++.L271: ++ .word .LANCHOR2 ++ .fnend ++ .size NandcSetDdrMode, .-NandcSetDdrMode ++ .align 2 ++ .global NandcSetMode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSetMode, %function ++NandcSetMode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L280 ++ ands r1, r0, #6 ++ ldr r2, [r3, #-2804] ++ ldr r3, [r2] ++ bfieq r3, r1, #13, #1 ++ beq .L276 ++ movw r1, #8322 ++ orr r3, r3, #24576 ++ str r1, [r2, #344] ++ bfc r3, #15, #1 ++ ldr r1, .L280+4 ++ orr r3, r3, #196608 ++ tst r0, #4 ++ orrne r3, r3, #32768 ++ str r1, [r2, #304] ++ mov r1, #38 ++ str r1, [r2, #308] ++ mov r1, #39 ++ str r1, [r2, #308] ++.L276: ++ str r3, [r2] ++ mov r0, #0 ++ bx lr ++.L281: ++ .align 2 ++.L280: ++ .word .LANCHOR2 ++ .word 1052675 ++ .fnend ++ .size NandcSetMode, .-NandcSetMode ++ .align 2 ++ .global NandcFlashCs ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcFlashCs, %function ++NandcFlashCs: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L283 ++ mov r2, #1 ++ ldr r1, [r3, r0, lsl #3] ++ add r0, r3, r0, lsl #3 ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ ldr r3, [r1] ++ lsl r2, r2, r0 ++ bfi r3, r2, #0, #8 ++ str r3, [r1] ++ bx lr ++.L284: ++ .align 2 ++.L283: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcFlashCs, .-NandcFlashCs ++ .align 2 ++ .global NandcFlashDeCs ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcFlashDeCs, %function ++NandcFlashDeCs: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L286 ++ ldr r2, [r3, r0, lsl #3] ++ ldr r3, [r2] ++ bfc r3, #0, #8 ++ bfc r3, #17, #1 ++ str r3, [r2] ++ bx lr ++.L287: ++ .align 2 ++.L286: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcFlashDeCs, .-NandcFlashDeCs ++ .align 2 ++ .global HynixSetRRPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type HynixSetRRPara, %function ++HynixSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r8, r3 ++ ldr r3, .L297 ++ mov r7, r2 ++ mov r5, r0 ++ mov r6, r1 ++ ldr r4, .L297+4 ++ ldr r2, [r3, #48] ++ ldrb r2, [r2, #19] @ zero_extendqisi2 ++ cmp r2, #6 ++ bne .L289 ++ mov r2, #20 ++ sub r4, r4, #8 ++ add r2, r2, r0, lsl #6 ++ add r2, r2, r8, lsl #2 ++.L296: ++ add r4, r4, r2 ++.L290: ++ ldr r9, [r3, r5, lsl #3] ++ add r3, r3, r5, lsl #3 ++ mov r0, r5 ++ ldrb fp, [r3, #4] @ zero_extendqisi2 ++ sub r6, r6, #1 ++ bl NandcFlashCs ++ mov r3, #54 ++ sub r4, r4, #1 ++ lsl fp, fp, #8 ++ add r10, r9, fp ++ str r3, [r10, #2056] ++ sub r3, r7, #1 ++ add r7, r7, r6 ++.L293: ++ cmp r3, r7 ++ bne .L294 ++ mov r3, #22 ++ add r9, r9, fp ++ str r3, [r9, #2056] ++ mov r0, r5 ++ bl NandcFlashDeCs ++ ldr r3, .L297+8 ++ add r5, r3, r5 ++ strb r8, [r5, #-1876] ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L289: ++ cmp r2, #7 ++ bne .L291 ++ mov r2, #160 ++ mov r1, #28 ++ smlabb r1, r2, r0, r1 ++ mov r2, #10 ++ sub r4, r4, #8 ++ smlabb r2, r2, r8, r1 ++ b .L296 ++.L291: ++ cmp r2, #8 ++ addeq r4, r4, #20 ++ addeq r2, r8, r8, lsl #2 ++ beq .L296 ++ add r2, r8, #2 ++ add r2, r2, r0, lsl #3 ++ add r4, r4, r2, lsl #3 ++ sub r4, r4, #4 ++ b .L290 ++.L294: ++ ldrb r2, [r3, #1]! @ zero_extendqisi2 ++ mov r0, #200 ++ str r2, [r10, #2052] ++ str r3, [sp, #4] ++ bl ndelay ++ ldrsb r2, [r4, #1]! ++ ldr r3, [sp, #4] ++ str r2, [r10, #2048] ++ b .L293 ++.L298: ++ .align 2 ++.L297: ++ .word .LANCHOR0 ++ .word .LANCHOR2-2720 ++ .word .LANCHOR2 ++ .fnend ++ .size HynixSetRRPara, .-HynixSetRRPara ++ .align 2 ++ .global FlashSetReadRetryDefault ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashSetReadRetryDefault, %function ++FlashSetReadRetryDefault: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L309 ++ ldr r3, [r3, #48] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ cmp r3, #7 ++ bxhi lr ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, #0 ++ ldr r6, .L309+4 ++ sub r5, r6, #2720 ++ sub r5, r5, #4 ++.L302: ++ ldr r3, .L309+8 ++ uxtb r0, r4 ++ ldrb r3, [r3, r4, lsl #3] @ zero_extendqisi2 ++ cmp r3, #173 ++ bne .L301 ++ mov r3, #0 ++ mov r2, r5 ++ ldrb r1, [r6, #-2727] @ zero_extendqisi2 ++ bl HynixSetRRPara ++.L301: ++ add r4, r4, #1 ++ cmp r4, #4 ++ bne .L302 ++ pop {r4, r5, r6, pc} ++.L310: ++ .align 2 ++.L309: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word IDByte ++ .fnend ++ .size FlashSetReadRetryDefault, .-FlashSetReadRetryDefault ++ .align 2 ++ .global FlashWaitCmdDone ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashWaitCmdDone, %function ++FlashWaitCmdDone: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r5, .L319 ++ add r4, r5, r0, lsl #4 ++ ldr r3, [r4, #3208] ++ cmp r3, #0 ++ beq .L313 ++ ldrb r7, [r4, #3200] @ zero_extendqisi2 ++ mov r6, r0 ++ add r5, r5, r6, lsl #2 ++ mov r0, r7 ++ bl NandcFlashCs ++ ldr r2, [r5, #3168] ++ mov r0, r7 ++ ldr r1, [r4, #3204] ++ adds r2, r2, #0 ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ mov r1, r0 ++ mov r0, r7 ++ bl NandcFlashDeCs ++ ldr r3, [r4, #3208] ++ sbfx r0, r1, #0, #1 ++ str r0, [r3] ++ mov r3, #0 ++ ldr r2, [r4, #3212] ++ str r3, [r4, #3208] ++ cmp r2, r3 ++ strne r0, [r2] ++ strne r3, [r4, #3212] ++.L313: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L320: ++ .align 2 ++.L319: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashWaitCmdDone, .-FlashWaitCmdDone ++ .align 2 ++ .global NandcDelayns ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcDelayns, %function ++NandcDelayns: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl ndelay ++ mov r0, #0 ++ pop {r4, pc} ++ .fnend ++ .size NandcDelayns, .-NandcDelayns ++ .align 2 ++ .global NandcWaitFlashReadyNoDelay ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcWaitFlashReadyNoDelay, %function ++NandcWaitFlashReadyNoDelay: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L329 ++ push {r0, r1, r2, r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #12 ++ ldr r4, .L329+4 ++ ldr r5, [r3, r0, lsl #3] ++.L325: ++ ldr r3, [r5] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #512 ++ bne .L326 ++ mov r0, #10 ++ bl ndelay ++ subs r4, r4, #1 ++ bne .L325 ++ mvn r0, #0 ++.L323: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, pc} ++.L326: ++ mov r0, #0 ++ b .L323 ++.L330: ++ .align 2 ++.L329: ++ .word .LANCHOR0 ++ .word 100000 ++ .fnend ++ .size NandcWaitFlashReadyNoDelay, .-NandcWaitFlashReadyNoDelay ++ .align 2 ++ .global NandcWaitFlashReady ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcWaitFlashReady, %function ++NandcWaitFlashReady: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #12 ++ ldr r3, .L337 ++ ldr r4, .L337+4 ++ ldr r5, [r3, r0, lsl #3] ++ mov r0, #130 ++ bl ndelay ++.L333: ++ ldr r3, [r5] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #512 ++ bne .L334 ++ mov r1, #2 ++ mov r0, #1 ++ bl rk_usleep_range ++ subs r4, r4, #1 ++ bne .L333 ++ mvn r0, #0 ++.L331: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, pc} ++.L334: ++ mov r0, #0 ++ b .L331 ++.L338: ++ .align 2 ++.L337: ++ .word .LANCHOR0 ++ .word 100000 ++ .fnend ++ .size NandcWaitFlashReady, .-NandcWaitFlashReady ++ .align 2 ++ .global FlashReset ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReset, %function ++FlashReset: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L341 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ ldr r5, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ ldrb r6, [r3, #4] @ zero_extendqisi2 ++ bl NandcFlashCs ++ mov r3, #255 ++ mov r0, r4 ++ add r5, r5, r6, lsl #8 ++ str r3, [r5, #2056] ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ pop {r4, r5, r6, lr} ++ b NandcFlashDeCs ++.L342: ++ .align 2 ++.L341: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReset, .-FlashReset ++ .align 2 ++ .global flash_enter_slc_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_enter_slc_mode, %function ++flash_enter_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r6, .L350 ++ ldrb r3, [r6, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ popeq {r4, r5, r6, r7, r8, pc} ++ mov r5, r0 ++ bl NandcFlashCs ++ ldr r3, .L350+4 ++ ldr r7, [r3, r5, lsl #3] ++ add r3, r3, r5, lsl #3 ++ ldrb r8, [r3, #4] @ zero_extendqisi2 ++ ldr r3, .L350+8 ++ ldrb r3, [r3, r5, lsl #3] @ zero_extendqisi2 ++ lsl r8, r8, #8 ++ cmp r3, #44 ++ bne .L345 ++ add r4, r7, r8 ++ mov r3, #239 ++ str r3, [r4, #2056] ++ mov r3, #145 ++ str r3, [r4, #2052] ++ mov r0, #50 ++ bl ndelay ++ mov r3, #0 ++ mov r2, #1 ++ str r3, [r4, #2048] ++ mov r0, #100 ++ str r2, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ bl ndelay ++.L345: ++ mov r0, r5 ++ add r7, r7, r8 ++ bl NandcWaitFlashReadyNoDelay ++ mov r3, #218 ++ mov r0, r5 ++ str r3, [r7, #2056] ++ bl NandcWaitFlashReady ++ mov r3, #2 ++ strb r3, [r6, #-1872] ++ pop {r4, r5, r6, r7, r8, pc} ++.L351: ++ .align 2 ++.L350: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word IDByte ++ .fnend ++ .size flash_enter_slc_mode, .-flash_enter_slc_mode ++ .align 2 ++ .global flash_exit_slc_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_exit_slc_mode, %function ++flash_exit_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r6, .L359 ++ ldrb r3, [r6, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ popeq {r4, r5, r6, r7, r8, pc} ++ mov r5, r0 ++ bl NandcFlashCs ++ ldr r3, .L359+4 ++ ldr r7, [r3, r5, lsl #3] ++ add r3, r3, r5, lsl #3 ++ ldrb r8, [r3, #4] @ zero_extendqisi2 ++ ldr r3, .L359+8 ++ ldrb r3, [r3, r5, lsl #3] @ zero_extendqisi2 ++ lsl r8, r8, #8 ++ cmp r3, #44 ++ bne .L354 ++ add r4, r7, r8 ++ mov r3, #239 ++ str r3, [r4, #2056] ++ mov r3, #145 ++ str r3, [r4, #2052] ++ mov r0, #50 ++ bl ndelay ++ mov r3, #2 ++ mov r0, #100 ++ str r3, [r4, #2048] ++ mov r3, #1 ++ str r3, [r4, #2048] ++ mov r3, #0 ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ bl ndelay ++.L354: ++ mov r0, r5 ++ add r7, r7, r8 ++ bl NandcWaitFlashReadyNoDelay ++ mov r3, #223 ++ mov r0, r5 ++ str r3, [r7, #2056] ++ bl NandcWaitFlashReady ++ mov r3, #0 ++ strb r3, [r6, #-1872] ++ pop {r4, r5, r6, r7, r8, pc} ++.L360: ++ .align 2 ++.L359: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word IDByte ++ .fnend ++ .size flash_exit_slc_mode, .-flash_exit_slc_mode ++ .align 2 ++ .global FlashEraseBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashEraseBlock, %function ++FlashEraseBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashEraseCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashReadStatus ++ mov r1, r0 ++ mov r0, r4 ++ bl NandcFlashDeCs ++ and r0, r1, #1 ++ pop {r4, r5, r6, pc} ++ .fnend ++ .size FlashEraseBlock, .-FlashEraseBlock ++ .align 2 ++ .global FlashSetInterfaceMode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashSetInterfaceMode, %function ++FlashSetInterfaceMode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L386 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov lr, #0 ++ ldr r4, .L386+4 ++ mov r5, #239 ++ mov r6, #128 ++ mov r7, #1 ++ ldrb r3, [r3, #-1871] @ zero_extendqisi2 ++ mov r9, #35 ++ mov r8, r4 ++ mov r10, #32 ++ and r2, r3, #4 ++ and r3, r3, #1 ++ str r2, [sp, #4] ++ mov r2, lr ++ str r3, [sp] ++.L373: ++ ldr r1, .L386+8 ++ add r3, r4, lr ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ ldrb ip, [lr, r1] @ zero_extendqisi2 ++ cmp ip, #69 ++ cmpne ip, #152 ++ beq .L364 ++ cmp ip, #44 ++ cmpne ip, #173 ++ bne .L365 ++.L364: ++ cmp r0, #1 ++ ldr r1, [r8, lr] ++ bne .L366 ++ ldr fp, [sp] ++ cmp fp, #0 ++ beq .L365 ++ lsl r3, r3, #8 ++ cmp ip, #173 ++ add fp, r1, r3 ++ str r5, [fp, #2056] ++ streq r0, [fp, #2052] ++ beq .L385 ++ cmp ip, #44 ++ moveq ip, #5 ++ streq r0, [fp, #2052] ++ strne r6, [fp, #2052] ++ streq ip, [fp, #2048] ++ strne r0, [fp, #2048] ++.L371: ++ add r3, r1, r3 ++ str r2, [r3, #2048] ++ str r2, [r3, #2048] ++ str r2, [r3, #2048] ++.L365: ++ add lr, lr, #8 ++ cmp lr, #32 ++ bne .L373 ++ mov r0, #0 ++ bl NandcWaitFlashReady ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L366: ++ ldr fp, [sp, #4] ++ cmp fp, #0 ++ beq .L365 ++ lsl r3, r3, #8 ++ cmp ip, #173 ++ add fp, r1, r3 ++ str r5, [fp, #2056] ++ streq r7, [fp, #2052] ++ streq r10, [fp, #2048] ++ beq .L371 ++ cmp ip, #44 ++ streq r7, [fp, #2052] ++ streq r9, [fp, #2048] ++ beq .L371 ++ str r6, [fp, #2052] ++.L385: ++ str r2, [fp, #2048] ++ b .L371 ++.L387: ++ .align 2 ++.L386: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word IDByte ++ .fnend ++ .size FlashSetInterfaceMode, .-FlashSetInterfaceMode ++ .align 2 ++ .global FlashReadSpare ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadSpare, %function ++FlashReadSpare: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L390 ++ ldr r3, .L390+4 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r2 ++ ldr r4, [ip, r0, lsl #3] ++ add ip, ip, r0, lsl #3 ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ ldrb r2, [ip, #4] @ zero_extendqisi2 ++ lsl r3, r3, #9 ++ add r4, r4, r2, lsl #8 ++ mov r2, #0 ++ str r2, [r4, #2056] ++ str r3, [r4, #2052] ++ lsr r3, r3, #8 ++ str r3, [r4, #2052] ++ uxtb r3, r1 ++ str r3, [r4, #2052] ++ lsr r3, r1, #8 ++ lsr r1, r1, #16 ++ str r3, [r4, #2052] ++ mov r3, #48 ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #2048] ++ strb r3, [r5] ++ pop {r4, r5, r6, pc} ++.L391: ++ .align 2 ++.L390: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .fnend ++ .size FlashReadSpare, .-FlashReadSpare ++ .align 2 ++ .global SandiskProgTestBadBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SandiskProgTestBadBlock, %function ++SandiskProgTestBadBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L394 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, [r3, r0, lsl #3] ++ add r3, r3, r0, lsl #3 ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r4, r4, r3, lsl #8 ++ mov r3, #162 ++ str r3, [r4, #2056] ++ mov r3, #128 ++ str r3, [r4, #2056] ++ mov r3, #0 ++ str r3, [r4, #2052] ++ str r3, [r4, #2052] ++ uxtb r3, r1 ++ str r3, [r4, #2052] ++ lsr r3, r1, #8 ++ lsr r1, r1, #16 ++ str r3, [r4, #2052] ++ mov r3, #16 ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl NandcWaitFlashReady ++ mov r3, #112 ++ mov r0, #80 ++ str r3, [r4, #2056] ++ bl ndelay ++ ldr r0, [r4, #2048] ++ and r0, r0, #1 ++ pop {r4, pc} ++.L395: ++ .align 2 ++.L394: ++ .word .LANCHOR0 ++ .fnend ++ .size SandiskProgTestBadBlock, .-SandiskProgTestBadBlock ++ .align 2 ++ .global SandiskSetRRPara ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SandiskSetRRPara, %function ++SandiskSetRRPara: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov r3, #239 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ str r3, [r0, #8] ++ mov r3, #17 ++ mov r5, r0 ++ mov r4, r1 ++ str r3, [r0, #4] ++ mov r0, #200 ++ bl ndelay ++ ldr r1, .L403 ++ add r4, r4, r4, lsl #2 ++ ldr r0, .L403+4 ++ mov r2, #0 ++ ldr ip, .L403+8 ++ sub lr, r1, #45 ++.L397: ++ ldrb r3, [r0] @ zero_extendqisi2 ++ cmp r2, r3 ++ bcc .L400 ++ mov r0, #0 ++ pop {r4, r5, r6, lr} ++ b NandcWaitFlashReady ++.L400: ++ ldrb r3, [ip] @ zero_extendqisi2 ++ cmp r3, #67 ++ add r3, r2, r4 ++ addeq r3, lr, r3 ++ addne r3, r1, r3 ++ ldrsb r3, [r3, #5] ++ add r2, r2, #1 ++ str r3, [r5] ++ b .L397 ++.L404: ++ .align 2 ++.L403: ++ .word .LANCHOR1+301 ++ .word g_maxRegNum ++ .word g_retryMode ++ .fnend ++ .size SandiskSetRRPara, .-SandiskSetRRPara ++ .align 2 ++ .global micron_auto_read_calibration_config ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type micron_auto_read_calibration_config, %function ++micron_auto_read_calibration_config: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ mov r6, r1 ++ bl NandcWaitFlashReady ++ ldr r0, .L407 ++ ldr r4, [r0, r5, lsl #3] ++ add r0, r0, r5, lsl #3 ++ ldrb r3, [r0, #4] @ zero_extendqisi2 ++ mov r0, #200 ++ add r4, r4, r3, lsl #8 ++ mov r3, #239 ++ str r3, [r4, #2056] ++ mov r3, #150 ++ str r3, [r4, #2052] ++ bl ndelay ++ mov r3, #0 ++ str r6, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ pop {r4, r5, r6, pc} ++.L408: ++ .align 2 ++.L407: ++ .word .LANCHOR0 ++ .fnend ++ .size micron_auto_read_calibration_config, .-micron_auto_read_calibration_config ++ .align 2 ++ .global FlashEraseSLc2KBlocks ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashEraseSLc2KBlocks, %function ++FlashEraseSLc2KBlocks: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #16 ++ mov r5, #0 ++ ldr r8, .L420 ++ mov r6, r0 ++ mov r9, r1 ++ mov r7, r5 ++ ldr r10, .L420+4 ++.L410: ++ cmp r7, r9 ++ bne .L415 ++ mov r0, #0 ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L415: ++ sub r3, r9, r7 ++ add r2, sp, #8 ++ uxtb r3, r3 ++ mov r1, #0 ++ add r0, r6, r5 ++ str r3, [sp] ++ add r3, sp, #12 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r8, #3156] @ zero_extendqisi2 ++ ldr r3, [sp, #12] ++ cmp r2, r3 ++ mvnls r3, #0 ++ strls r3, [r6, r5] ++ bls .L412 ++ add r2, r8, r3 ++ add r3, r8, r3, lsl #4 ++ ldrb r4, [r2, #3160] @ zero_extendqisi2 ++ strb r4, [r3, #3200] ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r2, #0 ++ ldr r1, [sp, #8] ++ mov r0, r4 ++ bl FlashEraseCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ ldr r1, [sp, #8] ++ bl FlashReadStatus ++ sbfx r0, r0, #0, #1 ++ ldr r1, [sp, #8] ++ str r0, [r6, r5] ++ mov r2, #0 ++ ldr r3, [r8, #40] ++ mov r0, r4 ++ add r1, r1, r3 ++ bl FlashEraseCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ ldr r1, [sp, #8] ++ bl FlashReadStatus ++ tst r0, #1 ++ mvnne r3, #0 ++ strne r3, [r6, r5] ++ ldr r3, [r6, r5] ++ cmn r3, #1 ++ bne .L414 ++ ldr r1, [sp, #8] ++ mov r0, r10 ++ bl rk_printk ++.L414: ++ mov r0, r4 ++ bl NandcFlashDeCs ++.L412: ++ add r7, r7, #1 ++ add r5, r5, #36 ++ b .L410 ++.L421: ++ .align 2 ++.L420: ++ .word .LANCHOR0 ++ .word .LC1 ++ .fnend ++ .size FlashEraseSLc2KBlocks, .-FlashEraseSLc2KBlocks ++ .align 2 ++ .global FlashEraseBlocks ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashEraseBlocks, %function ++FlashEraseBlocks: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r2 ++ ldr r4, .L455 ++ .pad #20 ++ sub sp, sp, #20 ++ ldrb r5, [r4, #36] @ zero_extendqisi2 ++ cmp r5, #0 ++ moveq r9, r0 ++ moveq r10, r1 ++ beq .L424 ++ mov r1, r2 ++ bl FlashEraseSLc2KBlocks ++.L422: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L433: ++ mov r3, #36 ++ add r2, sp, #8 ++ mul r6, r3, r5 ++ sub r3, r8, r5 ++ uxtb r3, r3 ++ mov r1, #0 ++ str r3, [sp] ++ add r3, sp, #12 ++ add fp, r9, r6 ++ mov r0, fp ++ bl LogAddr2PhyAddr ++ ldrb r3, [r4, #3156] @ zero_extendqisi2 ++ mov r7, r0 ++ ldr r0, [sp, #12] ++ cmp r3, r0 ++ mvnls r3, #0 ++ strls r3, [r9, r6] ++ bls .L427 ++ ldr r3, .L455+4 ++ ldrb r3, [r3, #-1870] @ zero_extendqisi2 ++ cmp r3, #0 ++ add r3, r4, r0, lsl #4 ++ moveq r7, #0 ++ ldr r3, [r3, #3208] ++ cmp r3, #0 ++ beq .L429 ++ uxtb r0, r0 ++ bl FlashWaitCmdDone ++.L429: ++ ldr r2, [sp, #12] ++ cmp r7, #0 ++ addne r6, r6, #36 ++ mov r0, #0 ++ addne r6, r9, r6 ++ lsl r3, r2, #4 ++ add r2, r4, r2 ++ add r1, r4, r3 ++ add r3, r4, r3 ++ str r0, [r1, #3212] ++ ldr r0, [sp, #8] ++ strne r6, [r1, #3212] ++ ldrb r6, [r2, #3160] @ zero_extendqisi2 ++ str r0, [r1, #3204] ++ str fp, [r1, #3208] ++ mov r0, r6 ++ strb r6, [r3, #3200] ++ bl NandcFlashCs ++ cmp r10, #1 ++ mov r0, r6 ++ bne .L431 ++ ldr r3, .L455+4 ++ ldrb r3, [r3, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L431 ++ bl flash_enter_slc_mode ++.L432: ++ ldr r3, [sp, #12] ++ mov r0, r6 ++ ldr r1, [sp, #8] ++ add r5, r5, r7 ++ add r3, r4, r3, lsl #2 ++ ldr r2, [r3, #3168] ++ adds r2, r2, #0 ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ mov r2, r7 ++ ldr r1, [sp, #8] ++ mov r0, r6 ++ bl FlashEraseCmd ++ mov r0, r6 ++ bl NandcFlashDeCs ++.L427: ++ add r5, r5, #1 ++.L424: ++ cmp r5, r8 ++ bcc .L433 ++ ldr r6, .L455+4 ++ mov r5, #0 ++ ldr r7, .L455+8 ++.L434: ++ ldrb r3, [r4, #3156] @ zero_extendqisi2 ++ cmp r5, r3 ++ bcc .L436 ++ ldr r3, .L455+4 ++ ldr r3, [r3, #-1868] ++ cmp r3, #0 ++ bne .L437 ++.L438: ++ mov r0, #0 ++ b .L422 ++.L431: ++ bl flash_exit_slc_mode ++ b .L432 ++.L436: ++ uxtb r0, r5 ++ bl FlashWaitCmdDone ++ cmp r10, #1 ++ bne .L435 ++ ldrb r3, [r6, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L435 ++ ldrb r0, [r7, r5, lsl #4] @ zero_extendqisi2 ++ bl flash_exit_slc_mode ++.L435: ++ add r5, r5, #1 ++ b .L434 ++.L437: ++ ldr r3, .L455+12 ++ ldrb r3, [r3] @ zero_extendqisi2 ++ cmp r3, #69 ++ moveq r3, #0 ++ moveq r2, #36 ++ moveq r1, r3 ++ bne .L438 ++.L439: ++ cmp r3, r8 ++ beq .L438 ++ mul r0, r2, r3 ++ add r3, r3, #1 ++ str r1, [r9, r0] ++ b .L439 ++.L456: ++ .align 2 ++.L455: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+3200 ++ .word IDByte ++ .fnend ++ .size FlashEraseBlocks, .-FlashEraseBlocks ++ .align 2 ++ .global HynixGetReadRetryDefault ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type HynixGetReadRetryDefault, %function ++HynixGetReadRetryDefault: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L574 ++ mvn r2, #83 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, r0 ++ cmp r4, #2 ++ mvn r1, #81 ++ .pad #52 ++ sub sp, sp, #52 ++ strb r0, [r3, #-2728] ++ mvn r0, #82 ++ strb r2, [r3, #-2724] ++ mvn r2, #80 ++ strb r0, [r3, #-2723] ++ strb r1, [r3, #-2722] ++ strb r2, [r3, #-2721] ++ bne .L458 ++ mvn r2, #88 ++ mov r5, #7 ++ strb r2, [r3, #-2724] ++ mvn r2, #8 ++ ldr r3, .L574+4 ++ strb r2, [r3, #3397] ++.L523: ++ mov r6, #4 ++ b .L459 ++.L458: ++ cmp r4, #3 ++ bne .L460 ++ mvn r2, #79 ++ strb r2, [r3, #-2724] ++ mvn r2, #78 ++ strb r2, [r3, #-2723] ++ mvn r2, #77 ++ strb r2, [r3, #-2722] ++ mvn r2, #76 ++ strb r2, [r3, #-2721] ++ mvn r2, #75 ++ strb r2, [r3, #-2720] ++ mvn r2, #74 ++ strb r2, [r3, #-2719] ++ mvn r2, #73 ++ strb r2, [r3, #-2718] ++ mvn r2, #72 ++.L568: ++ mov r5, #8 ++ strb r2, [r3, #-2717] ++ mov r6, r5 ++.L459: ++ sub r3, r4, #1 ++ cmp r3, #1 ++ movls r9, #0 ++ ldrls r10, .L574+8 ++ bls .L466 ++ sub r3, r4, #3 ++ cmp r3, #5 ++ bhi .L473 ++ smulbb r3, r6, r5 ++ asr r2, r3, #1 ++ lsl r3, r3, #4 ++ str r3, [sp, #44] ++ lsl r3, r2, #2 ++ str r2, [sp, #4] ++ str r3, [sp, #36] ++ lsl r3, r2, #1 ++ str r3, [sp, #24] ++ mov r3, #0 ++.L573: ++ str r3, [sp, #20] ++ ldrb r3, [sp, #20] @ zero_extendqisi2 ++ str r3, [sp, #8] ++ ldr r3, .L574+12 ++ ldr r2, [sp, #8] ++ ldrb r3, [r3, #3156] @ zero_extendqisi2 ++ cmp r3, r2 ++ bls .L473 ++ ldr r2, [sp, #8] ++ ldr r3, .L574+12 ++ add r3, r3, r2 ++ ldrb r9, [r3, #3160] @ zero_extendqisi2 ++ ldr r3, .L574+12 ++ mov r0, r9 ++ ldr fp, [r3, r9, lsl #3] ++ add r3, r3, r9, lsl #3 ++ ldrb r10, [r3, #4] @ zero_extendqisi2 ++ mov r3, #255 ++ add r7, fp, r10, lsl #8 ++ str r3, [r7, #2056] ++ bl NandcWaitFlashReady ++ cmp r4, #7 ++ bne .L475 ++ ldr r3, .L574+16 ++ mov r0, #160 ++ mla r0, r0, r9, r3 ++ add r3, r0, #20 ++.L569: ++ str r3, [sp, #16] ++ cmp r4, #4 ++ add r3, fp, r10, lsl #8 ++ mov r2, #54 ++ str r2, [r3, #2056] ++ bne .L478 ++ mov r2, #255 ++ str r2, [r3, #2052] ++ mov r2, #64 ++ str r2, [r3, #2048] ++ mov r2, #204 ++.L570: ++ str r2, [r3, #2052] ++ mov r2, #77 ++ b .L571 ++.L460: ++ cmp r4, #4 ++ bne .L461 ++ mvn ip, #51 ++ strb r0, [r3, #-2719] ++ strb ip, [r3, #-2724] ++ mvn ip, #64 ++ strb ip, [r3, #-2723] ++ mvn ip, #85 ++ strb ip, [r3, #-2722] ++ mvn ip, #84 ++ strb ip, [r3, #-2721] ++ mvn ip, #50 ++ strb ip, [r3, #-2720] ++ strb r1, [r3, #-2718] ++ b .L568 ++.L461: ++ cmp r4, #5 ++ bne .L462 ++ mov r2, #56 ++ mov r5, #8 ++ strb r2, [r3, #-2724] ++ mov r2, #57 ++ strb r2, [r3, #-2723] ++ mov r2, #58 ++ strb r2, [r3, #-2722] ++ mov r2, #59 ++ strb r2, [r3, #-2721] ++ b .L523 ++.L462: ++ cmp r4, #6 ++ bne .L463 ++ mov r2, #14 ++ mov r5, #12 ++ strb r2, [r3, #-2724] ++ mov r2, #15 ++ strb r2, [r3, #-2723] ++ mov r2, #16 ++ strb r2, [r3, #-2722] ++ mov r2, #17 ++ strb r2, [r3, #-2721] ++ b .L523 ++.L463: ++ cmp r4, #7 ++ bne .L464 ++ mvn r2, #79 ++ mov r5, #12 ++ strb r2, [r3, #-2724] ++ mvn r2, #78 ++ strb r2, [r3, #-2723] ++ mvn r2, #77 ++ strb r2, [r3, #-2722] ++ mvn r2, #76 ++ strb r2, [r3, #-2721] ++ mvn r2, #75 ++ strb r2, [r3, #-2720] ++ mvn r2, #74 ++ strb r2, [r3, #-2719] ++ mvn r2, #73 ++ strb r2, [r3, #-2718] ++ mvn r2, #72 ++ strb r2, [r3, #-2717] ++ mvn r2, #43 ++ strb r2, [r3, #-2716] ++ mvn r2, #42 ++ strb r2, [r3, #-2715] ++ mov r6, #10 ++ b .L459 ++.L464: ++ cmp r4, #8 ++ mov r5, #7 ++ bne .L523 ++ mov r2, #6 ++ strb r5, [r3, #-2723] ++ strb r2, [r3, #-2724] ++ mov r2, #9 ++ strb r2, [r3, #-2721] ++ mov r2, #10 ++ strb r4, [r3, #-2722] ++ mov r5, #50 ++ strb r2, [r3, #-2720] ++ mov r6, #5 ++ b .L459 ++.L472: ++ add r2, r3, r2 ++ ldr r4, .L574+8 ++ ldrb r2, [r2, #3160] @ zero_extendqisi2 ++ mov r7, #0 ++ mov fp, #55 ++ ldr r8, [r3, r2, lsl #3] ++ add r3, r3, r2, lsl #3 ++ add r4, r4, r2, lsl #6 ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ add r4, r4, #20 ++ add r8, r8, r3, lsl #8 ++.L467: ++ add r3, r10, r7 ++ str fp, [r8, #2056] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ mov r0, #80 ++ str r3, [r8, #2052] ++ bl ndelay ++ ldr r3, [r8, #2048] ++ strb r3, [r4, r7] ++ add r7, r7, #1 ++ uxtb r3, r7 ++ cmp r6, r3 ++ bhi .L467 ++ ldr lr, .L574+20 ++ mov r1, r4 ++ mov r2, #0 ++.L470: ++ mov r3, #1 ++ add ip, lr, r2 ++.L469: ++ ldrb r0, [ip, r3, lsl #2] @ zero_extendqisi2 ++ ldrb r7, [r1] @ zero_extendqisi2 ++ add r0, r0, r7 ++ strb r0, [r1, r3, lsl #3] ++ add r3, r3, #1 ++ cmp r3, #7 ++ bne .L469 ++ add r2, r2, #1 ++ add r1, r1, #1 ++ cmp r2, #4 ++ bne .L470 ++ add r9, r9, #1 ++ mov r3, #0 ++ strb r3, [r4, #16] ++ strb r3, [r4, #24] ++ strb r3, [r4, #32] ++ strb r3, [r4, #40] ++ strb r3, [r4, #48] ++ strb r3, [r4, #41] ++ strb r3, [r4, #49] ++.L466: ++ ldr r3, .L574+12 ++ uxtb r2, r9 ++ ldrb r1, [r3, #3156] @ zero_extendqisi2 ++ cmp r1, r2 ++ bhi .L472 ++.L473: ++ ldr r3, .L574 ++ strb r6, [r3, #-2727] ++ strb r5, [r3, #-2726] ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L475: ++ cmp r4, #8 ++ beq .L477 ++ ldr r3, .L574+16 ++ add r0, r3, r9, lsl #6 ++ add r3, r0, #12 ++ b .L569 ++.L478: ++ sub r2, r4, #5 ++ cmp r2, #1 ++ bhi .L480 ++ ldr r2, .L574 ++ ldrb r2, [r2, #-2724] @ zero_extendqisi2 ++ str r2, [r3, #2052] ++ mov r2, #82 ++.L571: ++ str r2, [r3, #2048] ++.L479: ++ add r3, fp, r10, lsl #8 ++ mov r2, #22 ++ cmp r4, #6 ++ str r2, [r3, #2056] ++ mov r2, #23 ++ str r2, [r3, #2056] ++ mov r2, #4 ++ str r2, [r3, #2056] ++ mov r2, #25 ++ str r2, [r3, #2056] ++ mov r2, #0 ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ moveq r2, #31 ++ str r2, [r3, #2052] ++ mov r2, #2 ++ str r2, [r3, #2052] ++ mov r2, #0 ++ str r2, [r3, #2052] ++.L522: ++ add r3, fp, r10, lsl #8 ++ mov r2, #48 ++ mov r0, r9 ++ str r2, [r3, #2056] ++ bl NandcWaitFlashReady ++ sub r3, r4, #5 ++ cmp r4, #8 ++ cmpne r3, #1 ++ str r3, [sp, #40] ++ movls r2, #16 ++ bls .L483 ++ cmp r4, #7 ++ moveq r2, #32 ++ movne r2, #2 ++.L483: ++ ldr r3, .L574 ++ sub r2, r2, #1 ++ add ip, fp, r10, lsl #8 ++ ldr r3, [r3, #-1864] ++ str ip, [sp] ++ sub r1, r3, #1 ++ uxtab r2, r3, r2 ++ mov r0, r1 ++.L484: ++ ldr ip, [sp] ++ ldr ip, [ip, #2048] ++ strb ip, [r0, #1]! ++ cmp r2, r0 ++ bne .L484 ++ cmp r4, #8 ++ bne .L485 ++ mov r2, #0 ++.L487: ++ ldrb r0, [r3, r2, lsl #2] @ zero_extendqisi2 ++ uxtb r1, r2 ++ cmp r0, #50 ++ beq .L486 ++ add r0, r3, r2, lsl #2 ++ ldrb r0, [r0, #1] @ zero_extendqisi2 ++ cmp r0, #5 ++ beq .L486 ++ add r2, r2, #1 ++ cmp r2, #8 ++ bne .L487 ++.L488: ++ mov r1, #0 ++ ldr r0, .L574+24 ++ bl rk_printk ++.L490: ++ b .L490 ++.L480: ++ cmp r4, #7 ++ bne .L479 ++ mov r2, #174 ++ str r2, [r3, #2052] ++ mov r2, #0 ++ str r2, [r3, #2048] ++ mov r2, #176 ++ b .L570 ++.L486: ++ cmp r1, #6 ++ bhi .L488 ++.L489: ++ ldr r1, .L574 ++ ldr r2, [r1, #-1864] ++ mov r3, r2 ++.L499: ++ ldr ip, [sp, #44] ++ sub r0, r3, r2 ++ cmp r0, ip ++ blt .L500 ++ ldr r3, [sp, #24] ++ ldr r1, [r1, #-1864] ++ add r0, r1, r3 ++ mov r3, #8 ++.L502: ++ mov lr, r0 ++ mov ip, #0 ++.L501: ++ ldrh r7, [lr] ++ add ip, ip, #1 ++ mvn r7, r7 ++ strh r7, [lr], #2 @ movhi ++ ldr r7, [sp, #4] ++ cmp r7, ip ++ bgt .L501 ++ ldr ip, [sp, #36] ++ subs r3, r3, #1 ++ add r0, r0, ip ++ bne .L502 ++ str r3, [sp, #12] ++.L508: ++ mov ip, #0 ++ mov r0, ip ++.L507: ++ mov lr, #1 ++ mov r7, #0 ++ lsl lr, lr, r0 ++ mov r3, #16 ++ str r3, [sp, #32] ++ str lr, [sp, #28] ++ mov lr, r1 ++.L505: ++ ldrh r8, [lr] ++ mov r3, r8 ++ ldr r8, [sp, #28] ++ bics r3, r8, r3 ++ ldr r3, [sp, #24] ++ addeq r7, r7, #1 ++ add lr, lr, r3 ++ ldr r3, [sp, #32] ++ subs r3, r3, #1 ++ str r3, [sp, #32] ++ bne .L505 ++ cmp r7, #8 ++ add r0, r0, #1 ++ ldrhi r3, [sp, #28] ++ orrhi ip, ip, r3 ++ uxthhi ip, ip ++ cmp r0, #16 ++ bne .L507 ++ ldr r3, [sp, #12] ++ strh ip, [r1], #2 @ movhi ++ add r3, r3, #1 ++ str r3, [sp, #12] ++ ldr r0, [sp, #12] ++ ldr r3, [sp, #4] ++ cmp r3, r0 ++ bgt .L508 ++ ldr r3, .L574 ++ ldr r1, [r3, #-1864] ++ mov r3, #0 ++ sub r0, r1, #4 ++ add ip, r1, #28 ++.L511: ++ ldr lr, [r0, #4]! ++ cmp lr, #0 ++ addeq r3, r3, #1 ++ cmp ip, r0 ++ bne .L511 ++ cmp r3, #7 ++ ble .L512 ++ ldr r0, .L574+28 ++ mov r3, #1024 ++ mov r2, #1 ++ bl rknand_print_hex ++ mov r1, #0 ++ ldr r0, .L574+24 ++ bl rk_printk ++.L513: ++ b .L513 ++.L485: ++ cmp r4, #7 ++ bne .L491 ++ mov r2, #0 ++.L493: ++ ldrb r0, [r3, r2, lsl #2] @ zero_extendqisi2 ++ uxtb r1, r2 ++ cmp r0, #12 ++ beq .L492 ++ add r0, r3, r2, lsl #2 ++ ldrb r0, [r0, #1] @ zero_extendqisi2 ++ cmp r0, #10 ++ beq .L492 ++ add r2, r2, #1 ++ cmp r2, #8 ++ bne .L493 ++.L494: ++ mov r1, #0 ++ ldr r0, .L574+24 ++ bl rk_printk ++.L495: ++ b .L495 ++.L492: ++ cmp r1, #6 ++ bls .L489 ++ b .L494 ++.L491: ++ cmp r4, #6 ++ bne .L489 ++ add r3, r3, #7 ++.L496: ++ ldrb r2, [r1, #1]! @ zero_extendqisi2 ++ cmp r2, #12 ++ beq .L489 ++ ldrb r2, [r1, #8] @ zero_extendqisi2 ++ cmp r2, #4 ++ beq .L489 ++ cmp r3, r1 ++ bne .L496 ++ mov r1, #0 ++ ldr r0, .L574+24 ++ bl rk_printk ++.L498: ++ b .L498 ++.L500: ++ ldr r0, [sp] ++ ldr r0, [r0, #2048] ++ strb r0, [r3], #1 ++ b .L499 ++.L512: ++ cmp r4, #6 ++ moveq ip, #4 ++ beq .L514 ++ cmp r4, #7 ++ moveq ip, #10 ++ beq .L514 ++ cmp r4, #8 ++ moveq ip, #5 ++ movne ip, #8 ++.L514: ++ sub r3, r6, #1 ++ ldr r0, [sp, #16] ++ uxtb r3, r3 ++ mov lr, #0 ++ add r3, r3, #1 ++.L515: ++ mov r8, r0 ++ mov r1, r2 ++.L516: ++ ldrb r7, [r1], #1 @ zero_extendqisi2 ++ strb r7, [r8], #1 ++ sub r7, r1, r2 ++ uxtb r7, r7 ++ cmp r6, r7 ++ bhi .L516 ++ add lr, lr, #1 ++ add r2, r2, r3 ++ cmp r5, lr ++ add r0, r0, ip ++ bgt .L515 ++ add r10, fp, r10, lsl #8 ++ mov r3, #255 ++ mov r0, r9 ++ str r3, [r10, #2056] ++ bl NandcWaitFlashReady ++ ldr r3, [sp, #40] ++ cmp r3, #1 ++ bhi .L518 ++ mov r3, #54 ++ ldr r2, [sp] ++ str r3, [r10, #2056] ++ mvn r1, #0 ++ ldr r3, .L574 ++ ldr r0, [sp, #8] ++ ldrb r3, [r3, #-2724] @ zero_extendqisi2 ++ str r3, [r2, #2052] ++ mov r3, #0 ++ str r3, [r2, #2048] ++ mov r3, #22 ++ str r3, [r10, #2056] ++ bl FlashReadCmd ++.L519: ++ mov r0, r9 ++ bl NandcWaitFlashReady ++ ldr r3, [sp, #20] ++ add r3, r3, #1 ++ b .L573 ++.L518: ++ cmp r4, #8 ++ moveq r3, #190 ++ movne r3, #56 ++ str r3, [r10, #2056] ++ b .L519 ++.L477: ++ mov r3, #120 ++ mov r2, #23 ++ str r3, [r7, #2056] ++ mov r3, #0 ++ str r3, [r7, #2052] ++ mov r1, #25 ++ str r3, [r7, #2052] ++ str r3, [r7, #2052] ++ str r2, [r7, #2056] ++ mov r2, #4 ++ str r2, [r7, #2056] ++ str r1, [r7, #2056] ++ mov r1, #218 ++ str r1, [r7, #2056] ++ mov r1, #21 ++ str r3, [r7, #2056] ++ str r3, [r7, #2052] ++ str r3, [r7, #2052] ++ str r1, [r7, #2052] ++ str r2, [r7, #2052] ++ str r3, [r7, #2052] ++ ldr r3, .L574+32 ++ str r3, [sp, #16] ++ b .L522 ++.L575: ++ .align 2 ++.L574: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .word .LANCHOR2-2728 ++ .word .LANCHOR0 ++ .word .LANCHOR2-2720 ++ .word .LANCHOR1+3380 ++ .word .LC2 ++ .word .LC3 ++ .word .LANCHOR2-2700 ++ .fnend ++ .size HynixGetReadRetryDefault, .-HynixGetReadRetryDefault ++ .align 2 ++ .global FlashGetReadRetryDefault ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashGetReadRetryDefault, %function ++FlashGetReadRetryDefault: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ subs r3, r0, #0 ++ bxeq lr ++ sub r2, r3, #1 ++ cmp r2, #7 ++ bhi .L578 ++ b HynixGetReadRetryDefault ++.L578: ++ cmp r3, #49 ++ bne .L579 ++ ldr r0, .L590 ++ mov r2, #64 ++ ldr r1, .L590+4 ++ strb r3, [r0, #-2728] ++ mov r3, #4 ++ strb r3, [r0, #-2727] ++ mov r3, #15 ++ strb r3, [r0, #-2726] ++.L588: ++ sub r0, r0, #2720 ++ sub r0, r0, #4 ++ b ftl_memcpy ++.L579: ++ sub r2, r3, #65 ++ cmp r3, #33 ++ cmpne r2, #1 ++ bhi .L580 ++ ldr r0, .L590 ++ strb r3, [r0, #-2728] ++ mov r3, #4 ++.L589: ++ strb r3, [r0, #-2727] ++ mov r3, #7 ++ strb r3, [r0, #-2726] ++ mov r2, #45 ++ ldr r1, .L590+8 ++ b .L588 ++.L580: ++ cmp r3, #67 ++ cmpne r3, #34 ++ ldreq r0, .L590 ++ strbeq r3, [r0, #-2728] ++ moveq r3, #5 ++ beq .L589 ++.L581: ++ cmp r3, #68 ++ cmpne r3, #35 ++ bxne lr ++ ldr r0, .L590 ++ mov r2, #95 ++ ldr r1, .L590+12 ++ strb r3, [r0, #-2728] ++ mov r3, #5 ++ strb r3, [r0, #-2727] ++ mov r3, #17 ++ strb r3, [r0, #-2726] ++ b .L588 ++.L591: ++ .align 2 ++.L590: ++ .word .LANCHOR2 ++ .word .LANCHOR1+404 ++ .word .LANCHOR1+256 ++ .word .LANCHOR1+301 ++ .fnend ++ .size FlashGetReadRetryDefault, .-FlashGetReadRetryDefault ++ .align 2 ++ .global FlashReadDpCmd ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadDpCmd, %function ++FlashReadDpCmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r7, r0 ++ ldr r0, .L598 ++ mov r8, r1 ++ uxtb r10, r2 ++ lsr r9, r2, #8 ++ lsr r6, r2, #16 ++ uxtb lr, r8 ++ ldr r2, [r0, #48] ++ lsr ip, r8, #8 ++ add r1, r0, r7, lsl #3 ++ ldr r3, [r0, r7, lsl #3] ++ ldrb r4, [r1, #4] @ zero_extendqisi2 ++ ldrb r1, [r0, #68] @ zero_extendqisi2 ++ ldrb r2, [r2, #7] @ zero_extendqisi2 ++ cmp r1, #1 ++ lsl r4, r4, #8 ++ lsr r1, r8, #16 ++ bne .L593 ++ cmp r2, #1 ++ addeq r2, r3, r4 ++ moveq r5, #38 ++ add r4, r3, r4 ++ streq r5, [r2, #2056] ++ ldrb r3, [r0, #61] @ zero_extendqisi2 ++ mov r5, #0 ++ ldrb r2, [r0, #60] @ zero_extendqisi2 ++ mov r0, r7 ++ str r2, [r4, #2056] ++ str r5, [r4, #2052] ++ str r5, [r4, #2052] ++ str lr, [r4, #2052] ++ str ip, [r4, #2052] ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl NandcWaitFlashReady ++ mov r3, #48 ++ str r5, [r4, #2056] ++ str r5, [r4, #2052] ++ str r5, [r4, #2052] ++ str r10, [r4, #2052] ++ str r9, [r4, #2052] ++ str r6, [r4, #2052] ++ str r3, [r4, #2056] ++.L595: ++ mov r1, r8 ++ mov r0, r7 ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ b FlashSetRandomizer ++.L593: ++ cmp r2, #1 ++ addeq r2, r3, r4 ++ moveq r5, #38 ++ streq r5, [r2, #2056] ++ add r3, r3, r4 ++ ldrb r2, [r0, #60] @ zero_extendqisi2 ++ str r2, [r3, #2056] ++ ldrb r2, [r0, #61] @ zero_extendqisi2 ++ str lr, [r3, #2052] ++ str ip, [r3, #2052] ++ str r1, [r3, #2052] ++ str r2, [r3, #2056] ++ mov r2, #48 ++ str r10, [r3, #2052] ++ str r9, [r3, #2052] ++ str r6, [r3, #2052] ++ str r2, [r3, #2056] ++ b .L595 ++.L599: ++ .align 2 ++.L598: ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadDpCmd, .-FlashReadDpCmd ++ .align 2 ++ .global ftl_flash_de_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_flash_de_init, %function ++ftl_flash_de_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r0, #0 ++ ldr r4, .L611 ++ bl NandcWaitFlashReady ++ bl FlashSetReadRetryDefault ++ ldr r0, [r4, #-1860] ++ cmp r0, #0 ++ beq .L601 ++ mov r0, #0 ++ bl flash_enter_slc_mode ++.L602: ++ ldrb r3, [r4, #-1856] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L603 ++ ldrb r3, [r4, #-1871] @ zero_extendqisi2 ++ tst r3, #1 ++ beq .L603 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++ mov r3, #0 ++ strb r3, [r4, #-1856] ++.L603: ++ ldr r3, .L611+4 ++ mov r0, #0 ++ ldr r3, [r3] ++ str r0, [r3, #336] ++ pop {r4, pc} ++.L601: ++ bl flash_exit_slc_mode ++ b .L602 ++.L612: ++ .align 2 ++.L611: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_flash_de_init, .-ftl_flash_de_init ++ .align 2 ++ .global NandcRandmzSel ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcRandmzSel, %function ++NandcRandmzSel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L614 ++ ldr r3, [r3, r0, lsl #3] ++ str r1, [r3, #336] ++ bx lr ++.L615: ++ .align 2 ++.L614: ++ .word .LANCHOR0 ++ .fnend ++ .size NandcRandmzSel, .-NandcRandmzSel ++ .global __aeabi_idiv ++ .align 2 ++ .global NandcTimeCfg ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcTimeCfg, %function ++NandcTimeCfg: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r0 ++ mov r0, #0 ++ bl rknand_get_clk_rate ++ ldr r1, .L627 ++ bl __aeabi_idiv ++ ldr r3, .L627+4 ++ cmp r0, #250 ++ movwgt r2, #8354 ++ ldr r3, [r3, #-2804] ++ bgt .L625 ++ cmp r0, #220 ++ ble .L619 ++.L626: ++ movw r2, #8322 ++ b .L625 ++.L619: ++ cmp r0, #185 ++ movwgt r2, #4226 ++ bgt .L625 ++ cmp r0, #160 ++ movwgt r2, #4194 ++ bgt .L625 ++ cmp r4, #35 ++ movwls r2, #4193 ++ bls .L625 ++ cmp r4, #99 ++ movwls r2, #4225 ++ bhi .L626 ++.L625: ++ str r2, [r3, #4] ++ pop {r4, pc} ++.L628: ++ .align 2 ++.L627: ++ .word 1000000 ++ .word .LANCHOR2 ++ .fnend ++ .size NandcTimeCfg, .-NandcTimeCfg ++ .align 2 ++ .global FlashTimingCfg ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashTimingCfg, %function ++FlashTimingCfg: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ sub r3, r0, #4160 ++ sub r3, r3, #33 ++ bic r3, r3, #32 ++ cmp r3, #1 ++ bls .L630 ++ movw r3, #8322 ++ cmp r0, r3 ++ bne .L631 ++.L630: ++ ldr r3, .L632 ++ ldr r3, [r3, #-2804] ++ str r0, [r3, #4] ++.L631: ++ ldr r3, .L632+4 ++ ldrb r0, [r3, #489] @ zero_extendqisi2 ++ b NandcTimeCfg ++.L633: ++ .align 2 ++.L632: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .fnend ++ .size FlashTimingCfg, .-FlashTimingCfg ++ .align 2 ++ .global NandcInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcInit, %function ++NandcInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L637 ++ mov r1, #1 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r2, #0 ++ ldr r4, .L637+4 ++ mov r5, #0 ++ str r1, [r3, #12] ++ mov r1, #2 ++ str r1, [r3, #20] ++ mov r1, #3 ++ stm r3, {r0, r2} ++ str r0, [r4, #-2804] ++ str r0, [r3, #8] ++ str r0, [r3, #16] ++ str r1, [r3, #28] ++ str r0, [r3, #24] ++ ldr r3, [r0] ++ and r3, r3, #253952 ++ ubfx r1, r3, #13, #1 ++ bfi r3, r2, #13, #1 ++ ldr r2, [r0, #352] ++ orr r3, r3, #256 ++ str r1, [r4, #-1852] ++ movw r1, #2049 ++ ubfx r2, r2, #16, #4 ++ str r2, [r4, #-1848] ++ ldr r2, [r0, #352] ++ cmp r2, r1 ++ str r2, [r4, #-1844] ++ moveq r2, #8 ++ streq r2, [r4, #-1848] ++ str r3, [r0] ++ mov r0, #40 ++ ldr r3, [r4, #-2804] ++ str r5, [r3, #336] ++ bl NandcTimeCfg ++ ldr r3, [r4, #-2804] ++ movw r2, #8322 ++ mov r0, #36864 ++ str r2, [r3, #344] ++ ldr r2, .L637+8 ++ str r2, [r3, #304] ++ bl ftl_dma32_malloc ++ str r0, [r4, #-1840] ++ str r0, [r4, #-1836] ++ add r0, r0, #32768 ++ str r0, [r4, #-1832] ++ str r5, [r4, #-1812] ++ str r5, [r4, #-1804] ++ pop {r4, r5, r6, pc} ++.L638: ++ .align 2 ++.L637: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word 1579009 ++ .fnend ++ .size NandcInit, .-NandcInit ++ .align 2 ++ .global NandcGetTimeCfg ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcGetTimeCfg, %function ++NandcGetTimeCfg: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L641 ++ str lr, [sp, #-4]! ++ .save {lr} ++ ldr lr, [ip, #-2804] ++ ldr lr, [lr, #4] ++ str lr, [r0] ++ ldr r0, [ip, #-2804] ++ ldr r0, [r0] ++ str r0, [r1] ++ ldr r1, [ip, #-2804] ++ ldr r1, [r1, #304] ++ str r1, [r2] ++ ldr r1, [ip, #-2804] ++ ldr r2, [r1, #308] ++ ldr r1, [r1, #344] ++ uxtb r2, r2 ++ orr r2, r2, r1, lsl #16 ++ str r2, [r3] ++ ldr pc, [sp], #4 ++.L642: ++ .align 2 ++.L641: ++ .word .LANCHOR2 ++ .fnend ++ .size NandcGetTimeCfg, .-NandcGetTimeCfg ++ .align 2 ++ .global NandcBchSel ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcBchSel, %function ++NandcBchSel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L651 ++ mov ip, #1 ++ mov r1, #0 ++ ldr r2, [r3, #-2804] ++ str r0, [r3, #-1800] ++ mov r3, r1 ++ str ip, [r2, #8] ++ mov ip, #16 ++ cmp r0, ip ++ bfi r3, ip, #8, #8 ++ bfi r3, r1, #18, #1 ++ bne .L644 ++.L647: ++ bfc r3, #4, #1 ++.L645: ++ orr r3, r3, #1 ++ str r3, [r2, #12] ++ bx lr ++.L644: ++ cmp r0, #24 ++ orreq r3, r3, #16 ++ beq .L645 ++ cmp r0, #40 ++ orr r3, r3, #262144 ++ orr r3, r3, #16 ++ bne .L645 ++ b .L647 ++.L652: ++ .align 2 ++.L651: ++ .word .LANCHOR2 ++ .fnend ++ .size NandcBchSel, .-NandcBchSel ++ .align 2 ++ .global FlashBchSel ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashBchSel, %function ++FlashBchSel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L654 ++ strb r0, [r3, #-2739] ++ b NandcBchSel ++.L655: ++ .align 2 ++.L654: ++ .word .LANCHOR2 ++ .fnend ++ .size FlashBchSel, .-FlashBchSel ++ .align 2 ++ .global ftl_flash_resume ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_flash_resume, %function ++ftl_flash_resume: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L665 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, #0 ++ ldr r6, .L665+4 ++ mov r4, r3 ++ ldr r2, [r3, #-2804] ++ ldr r1, [r3, #-2800] ++ str r1, [r2] ++ ldr r1, [r3, #-2796] ++ ldr r2, [r3, #-2804] ++ str r1, [r2, #4] ++ ldr r1, [r3, #-2792] ++ str r1, [r2, #8] ++ ldr r1, [r3, #-2788] ++ str r1, [r2, #12] ++ ldr r1, [r3, #-2784] ++ str r1, [r2, #304] ++ ldr r1, [r3, #-2780] ++ str r1, [r2, #308] ++ ldr r1, [r3, #-2776] ++ str r1, [r2, #336] ++ ldr r1, [r3, #-2772] ++ str r1, [r2, #344] ++.L658: ++ ldrb r3, [r6, r5, lsl #3] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L657 ++ uxtb r0, r5 ++ bl FlashReset ++.L657: ++ add r5, r5, #1 ++ cmp r5, #4 ++ bne .L658 ++ ldrb r3, [r4, #-1856] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L659 ++ mov r0, #1 ++ bl NandcSetMode ++ ldrb r0, [r4, #-1871] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #-1871] @ zero_extendqisi2 ++ bl NandcSetMode ++ ldrb r0, [r4, #-2783] @ zero_extendqisi2 ++ bl NandcSetDdrPara ++.L659: ++ ldr r3, .L665+8 ++ pop {r4, r5, r6, lr} ++ ldr r3, [r3, #48] ++ ldrb r0, [r3, #20] @ zero_extendqisi2 ++ b FlashBchSel ++.L666: ++ .align 2 ++.L665: ++ .word .LANCHOR2 ++ .word IDByte ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_flash_resume, .-ftl_flash_resume ++ .align 2 ++ .global ftl_nandc_get_irq_status ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_nandc_get_irq_status, %function ++ftl_nandc_get_irq_status: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r0, [r0, #372] ++ bx lr ++ .fnend ++ .size ftl_nandc_get_irq_status, .-ftl_nandc_get_irq_status ++ .align 2 ++ .global NandcIqrWaitFlashReady ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcIqrWaitFlashReady, %function ++NandcIqrWaitFlashReady: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size NandcIqrWaitFlashReady, .-NandcIqrWaitFlashReady ++ .align 2 ++ .global NandcSendDumpDataStart ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSendDumpDataStart, %function ++NandcSendDumpDataStart: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, [r0, #16] ++ .pad #8 ++ sub sp, sp, #8 ++ ldr r3, .L671 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ bfc r2, #2, #1 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ str r2, [r0, #16] ++ str r3, [r0, #8] ++ orr r3, r3, #4 ++ str r3, [r0, #8] ++ add sp, sp, #8 ++ @ sp needed ++ bx lr ++.L672: ++ .align 2 ++.L671: ++ .word 538969130 ++ .fnend ++ .size NandcSendDumpDataStart, .-NandcSendDumpDataStart ++ .align 2 ++ .global NandcSendDumpDataDone ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcSendDumpDataDone, %function ++NandcSendDumpDataDone: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ .pad #8 ++ sub sp, sp, #8 ++.L674: ++ ldr r3, [r0, #8] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #1048576 ++ beq .L674 ++ add sp, sp, #8 ++ @ sp needed ++ bx lr ++ .fnend ++ .size NandcSendDumpDataDone, .-NandcSendDumpDataDone ++ .align 2 ++ .global NandcXferStart ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcXferStart, %function ++NandcXferStart: ++ .fnstart ++ @ args = 8, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L696 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, #0 ++ ldr r5, .L696+4 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r6, [ip, r0, lsl #3] ++ add ip, ip, r0, lsl #3 ++ ldr r8, [sp, #56] ++ ldrb r0, [ip, #4] @ zero_extendqisi2 ++ mov ip, #16 ++ ldr r7, [r6, #12] ++ bfi r7, ip, #8, #8 ++ bfi r7, r4, #3, #1 ++ bfi r4, r1, #1, #1 ++ bfi r7, r0, #5, #3 ++ orr r4, r4, #8 ++ mov r0, #1 ++ bfi r4, r0, #5, #2 ++ lsr r3, r3, r0 ++ orr r4, r4, #536870912 ++ orr r4, r4, #1024 ++ bfi r4, r3, #4, #1 ++ ldr r3, [r5, #-1848] ++ cmp r3, #3 ++ bls .L679 ++ ldr r3, [r6, #16] ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfc r3, #2, #1 ++ str r3, [sp, #12] ++ ldr r3, [sp, #60] ++ cmp r8, #0 ++ cmpeq r3, #0 ++ beq .L680 ++ cmp r1, #0 ++ bne .L681 ++.L689: ++ add r2, r2, #1 ++ cmp r8, #0 ++ asr r2, r2, #1 ++ movne r0, r8 ++ bfi r4, r2, #22, #6 ++ ldreq r0, [r5, #-1836] ++.L683: ++ ldr r3, [r5, #-1832] ++ ubfx r10, r4, #22, #5 ++ mov r9, r1 ++ mov r2, r1 ++ lsl r1, r10, #10 ++ str r0, [r5, #-1828] ++ str r3, [r5, #-1824] ++ bl rknand_dma_map_single ++ mov r2, r9 ++ str r0, [r5, #-1820] ++ lsl r1, r10, #7 ++ ldr r0, [r5, #-1824] ++ bl rknand_dma_map_single ++ mov r3, #1 ++ str r0, [r5, #-1816] ++ str r3, [r5, #-1812] ++ mov r2, #16 ++ ldr r3, [r5, #-1820] ++ tst r8, #3 ++ clz r1, r9 ++ lsr r1, r1, #5 ++ str r3, [r6, #20] ++ ldr r3, [r5, #-1816] ++ str r3, [r6, #24] ++ mov r3, #0 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfi r3, r2, #9, #5 ++ moveq r2, #2 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ orr r3, r3, #448 ++ str r3, [sp, #12] ++ ldreq r3, [sp, #12] ++ bfieq r3, r2, #3, #3 ++ streq r3, [sp, #12] ++ ldr r3, [sp, #12] ++ orr r3, r3, #4 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfi r3, r1, #1, #1 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ orr r3, r3, #1 ++ str r3, [sp, #12] ++.L680: ++ ldr r3, [sp, #12] ++ str r3, [r6, #16] ++.L679: ++ str r7, [r6, #12] ++ str r4, [r6, #8] ++ orr r4, r4, #4 ++ str r4, [r6, #8] ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L681: ++ ldr r3, [r5, #-1800] ++ lsr r10, r2, #1 ++ ldr ip, [sp, #60] ++ cmp r3, #25 ++ movcc r3, #64 ++ movcs r3, #128 ++ str r3, [sp, #4] ++ mov r3, #0 ++ mov r0, r3 ++.L685: ++ cmp r0, r10 ++ bcs .L689 ++ ldr lr, [sp, #60] ++ add r0, r0, #1 ++ cmp lr, #0 ++ bic lr, r3, #3 ++ ldrne fp, [ip], #4 @ unaligned ++ mvneq r9, #0 ++ ldrne r9, [r5, #-1832] ++ ldreq fp, [r5, #-1832] ++ strne fp, [r9, lr] ++ streq r9, [fp, lr] ++ ldr lr, [sp, #4] ++ add r3, r3, lr ++ b .L685 ++.L697: ++ .align 2 ++.L696: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size NandcXferStart, .-NandcXferStart ++ .align 2 ++ .global NandcXferComp ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcXferComp, %function ++NandcXferComp: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ ldr r3, .L738 ++ ldr r5, .L738+4 ++ ldr r4, [r3, r0, lsl #3] ++ ldr r3, [r5, #-1848] ++ cmp r3, #3 ++ bls .L729 ++ ldr r3, [r4, #16] ++ tst r3, #4 ++ beq .L729 ++ ldr r6, [r4, #16] ++ ldr r3, [r4, #8] ++ ubfx r6, r6, #1, #1 ++ cmp r6, #0 ++ str r3, [sp] ++ beq .L700 ++ ldr r7, .L738+8 ++ mov r6, #0 ++ ldr r8, .L738+12 ++.L701: ++ ldr r2, [r4, #28] ++ ldr r3, [sp] ++ ubfx r2, r2, #16, #5 ++ ubfx r3, r3, #22, #6 ++ cmp r2, r3 ++ bge .L709 ++ ldr r3, [r5, #-1848] ++ cmp r3, #5 ++ bhi .L702 ++.L705: ++ add r6, r6, #1 ++ bics r3, r6, #-16777216 ++ bne .L704 ++ ldr r2, [r4, #28] ++ mov r1, r6 ++ ldr r3, [sp] ++ mov r0, r7 ++ ubfx r2, r2, #16, #5 ++ ubfx r3, r3, #22, #6 ++ bl rk_printk ++ mov r3, #512 ++ mov r2, #4 ++ mov r1, r4 ++ mov r0, r8 ++ bl rknand_print_hex ++.L704: ++ mov r1, #5 ++ mov r0, #1 ++ bl rk_usleep_range ++ b .L701 ++.L702: ++ ldr r3, [r4] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #8192 ++ beq .L705 ++ ldr r3, [sp, #4] ++ tst r3, #131072 ++ beq .L705 ++.L709: ++ ldr r3, [r5, #-1812] ++ cmp r3, #0 ++ beq .L710 ++ ldr r1, [sp] ++ mov r2, #0 ++ ldr r0, [r5, #-1820] ++ ubfx r1, r1, #22, #5 ++ lsl r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ mov r2, #0 ++ ldr r0, [r5, #-1816] ++ ubfx r1, r1, #22, #5 ++ lsl r1, r1, #7 ++ bl rknand_dma_unmap_single ++.L710: ++ mov r3, #0 ++ str r3, [r5, #-1812] ++.L698: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L700: ++ ldr r7, .L738+16 ++ ldr r8, .L738+12 ++.L711: ++ ldr r3, [sp] ++ tst r3, #1048576 ++ beq .L713 ++ ldr r3, [r5, #-1804] ++ cmp r3, #0 ++ beq .L714 ++ mov r0, r4 ++ bl NandcSendDumpDataStart ++.L714: ++ ldr r3, [r5, #-1812] ++ cmp r3, #0 ++ beq .L715 ++ ldr r1, [sp] ++ mov r2, #1 ++ ldr r0, [r5, #-1820] ++ ubfx r1, r1, #22, #5 ++ lsl r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ mov r2, #1 ++ ldr r0, [r5, #-1816] ++ ubfx r1, r1, #22, #5 ++ lsl r1, r1, #7 ++ bl rknand_dma_unmap_single ++.L715: ++ ldr r3, [r5, #-1804] ++ cmp r3, #0 ++ beq .L710 ++ mov r0, r4 ++ bl NandcSendDumpDataDone ++ b .L710 ++.L713: ++ ldr r3, [r4, #8] ++ add r6, r6, #1 ++ str r3, [sp] ++ bics r3, r6, #-16777216 ++ bne .L712 ++ ldr r2, [sp] ++ mov r1, r6 ++ ldr r3, [r4, #28] ++ mov r0, r7 ++ ubfx r3, r3, #16, #5 ++ bl rk_printk ++ mov r3, #512 ++ mov r2, #4 ++ mov r1, r4 ++ mov r0, r8 ++ bl rknand_print_hex ++.L712: ++ mov r1, #5 ++ mov r0, #1 ++ bl rk_usleep_range ++ b .L711 ++.L729: ++ ldr r3, [r4, #8] ++ str r3, [sp] ++ ldr r3, [sp] ++ tst r3, #1048576 ++ beq .L729 ++ b .L698 ++.L739: ++ .align 2 ++.L738: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC4 ++ .word .LC5 ++ .word .LC6 ++ .fnend ++ .size NandcXferComp, .-NandcXferComp ++ .align 2 ++ .global NandcCopy1KB ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcCopy1KB, %function ++NandcCopy1KB: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r1, #1 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r2 ++ add r2, r0, #4096 ++ add r6, r0, #512 ++ add r0, r2, r4, lsl #9 ++ ldr r5, [sp, #16] ++ bne .L741 ++ cmp r3, #0 ++ beq .L742 ++ mov r2, #1024 ++ mov r1, r3 ++ bl ftl_memcpy ++.L742: ++ cmp r5, #0 ++ lsrne r4, r4, #1 ++ ldrne r3, [r5] @ unaligned ++ addne r4, r4, r4, lsl #1 ++ strne r3, [r6, r4, lsl #4] ++ pop {r4, r5, r6, pc} ++.L741: ++ cmp r3, #0 ++ beq .L745 ++ mov r1, r0 ++ mov r2, #1024 ++ mov r0, r3 ++ bl ftl_memcpy ++.L745: ++ cmp r5, #0 ++ popeq {r4, r5, r6, pc} ++ lsr r4, r4, #1 ++ add r4, r4, r4, lsl #1 ++ ldr r3, [r6, r4, lsl #4] ++ strb r3, [r5] ++ lsr r2, r3, #8 ++ strb r2, [r5, #1] ++ lsr r2, r3, #16 ++ lsr r3, r3, #24 ++ strb r2, [r5, #2] ++ strb r3, [r5, #3] ++ pop {r4, r5, r6, pc} ++ .fnend ++ .size NandcCopy1KB, .-NandcCopy1KB ++ .align 2 ++ .global NandcXferData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type NandcXferData, %function ++NandcXferData: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r3 ++ ldr r3, .L797 ++ tst r8, #63 ++ .pad #92 ++ sub sp, sp, #92 ++ mov r7, r0 ++ mov r5, r1 ++ str r2, [sp, #8] ++ ldr r4, [sp, #128] ++ ldr r6, [r3, r0, lsl #3] ++ bne .L758 ++ cmp r4, #0 ++ bne .L759 ++ mov r2, #64 ++ mov r1, #255 ++ add r0, sp, #24 ++ bl ftl_memset ++ add r4, sp, #24 ++.L759: ++ mov r3, #0 ++ ldr r2, [sp, #8] ++ mov r1, r5 ++ mov r0, r7 ++ str r4, [sp, #4] ++ str r8, [sp] ++ bl NandcXferStart ++ mov r1, r5 ++ mov r0, r7 ++ bl NandcXferComp ++ cmp r5, #0 ++ movne r9, #0 ++ bne .L760 ++ ldr r3, .L797+4 ++ mov r1, r5 ++ ldr r2, [r3, #-1800] ++ cmp r2, #25 ++ ldr r2, [sp, #8] ++ movcc lr, #64 ++ movcs lr, #128 ++ lsr r0, r2, #1 ++ mov r2, r5 ++.L762: ++ cmp r1, r0 ++ add r4, r4, #4 ++ add ip, lr, r2 ++ bcc .L763 ++ ldr r2, [sp, #8] ++ ldr r0, [r3, #-1800] ++ ldr r1, [r3, #-1848] ++ lsr ip, r2, #2 ++ mov r2, #0 ++ mov r9, r2 ++.L764: ++ cmp r2, ip ++ bcs .L760 ++ cmp r0, #0 ++ bne .L770 ++.L760: ++ mov r3, #0 ++ str r3, [r6, #16] ++.L771: ++ ldr r3, .L797+4 ++ ldr r3, [r3, #-1848] ++ cmp r3, #5 ++ movls r3, #0 ++ movhi r3, #1 ++ cmp r5, #0 ++ movne r3, #0 ++ cmp r3, #0 ++ beq .L757 ++ ldr r3, [r6] ++ and r2, r3, #139264 ++ cmp r2, #139264 ++ mvneq r9, #0 ++ orreq r3, r3, #131072 ++ streq r3, [r6] ++.L757: ++ mov r0, r9 ++ add sp, sp, #92 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L763: ++ ldr r7, [r3, #-1832] ++ bic r2, r2, #3 ++ add r1, r1, #1 ++ ldr r2, [r7, r2] ++ strb r2, [r4, #-4] ++ lsr r7, r2, #8 ++ strb r7, [r4, #-3] ++ lsr r7, r2, #16 ++ lsr r2, r2, #24 ++ strb r7, [r4, #-2] ++ strb r2, [r4, #-1] ++ mov r2, ip ++ b .L762 ++.L770: ++ add r3, r2, #8 ++ ldr r3, [r6, r3, lsl #2] ++ str r3, [sp, #20] ++ ldr r3, [sp, #20] ++ tst r3, #4 ++ bne .L786 ++ ldr r3, [sp, #20] ++ ubfx r3, r3, #15, #1 ++ cmp r3, #0 ++ bne .L786 ++ cmp r1, #5 ++ bls .L766 ++ ldr lr, [sp, #20] ++ ldr r7, [sp, #20] ++ ldr r3, [sp, #20] ++ ldr r4, [sp, #20] ++ ubfx lr, lr, #3, #5 ++ ubfx r7, r7, #27, #1 ++ ubfx r3, r3, #16, #5 ++ orr lr, lr, r7, lsl #5 ++ ubfx r4, r4, #29, #1 ++ orr r3, r3, r4, lsl #5 ++ cmp lr, r3 ++ ldr r3, [sp, #20] ++ ldrhi lr, [sp, #20] ++ ldrls lr, [sp, #20] ++ ubfxhi r3, r3, #3, #5 ++ ubfxls r3, r3, #16, #5 ++ ubfxhi lr, lr, #27, #1 ++ ubfxls lr, lr, #29, #1 ++.L796: ++ orr r3, r3, lr, lsl #5 ++.L768: ++ cmp r9, r3 ++ movcc r9, r3 ++.L765: ++ add r2, r2, #1 ++ b .L764 ++.L766: ++ cmp r1, #3 ++ bls .L768 ++ ldr lr, [sp, #20] ++ ldr r7, [sp, #20] ++ ldr r3, [sp, #20] ++ ldr r4, [sp, #20] ++ ubfx lr, lr, #3, #5 ++ ubfx r7, r7, #28, #1 ++ ubfx r3, r3, #16, #5 ++ orr lr, lr, r7, lsl #5 ++ ubfx r4, r4, #30, #1 ++ orr r3, r3, r4, lsl #5 ++ cmp lr, r3 ++ ldr r3, [sp, #20] ++ ldrhi lr, [sp, #20] ++ ldrls lr, [sp, #20] ++ ubfxhi r3, r3, #3, #5 ++ ubfxls r3, r3, #16, #5 ++ ubfxhi lr, lr, #28, #1 ++ ubfxls lr, lr, #30, #1 ++ b .L796 ++.L786: ++ mvn r9, #0 ++ b .L765 ++.L758: ++ cmp r1, #1 ++ bne .L772 ++ mov r9, #0 ++ cmp r4, #0 ++ mov r10, r9 ++ movne r3, #4 ++ moveq r3, #0 ++ str r3, [sp, #12] ++.L773: ++ ldr r3, [sp, #8] ++ cmp r9, r3 ++ movcs r9, #0 ++ bcs .L771 ++.L775: ++ cmp r8, #0 ++ and fp, r9, #3 ++ addne r3, r8, r9, lsl #9 ++ moveq r3, r8 ++ str r4, [sp] ++ mov r2, fp ++ mov r1, #1 ++ mov r0, r6 ++ bl NandcCopy1KB ++ mov r3, fp ++ mov r2, #2 ++ mov r1, #1 ++ mov r0, r7 ++ str r10, [sp, #4] ++ add r9, r9, #2 ++ str r10, [sp] ++ bl NandcXferStart ++ mov r1, #1 ++ mov r0, r7 ++ bl NandcXferComp ++ ldr r3, [sp, #12] ++ add r4, r4, r3 ++ b .L773 ++.L772: ++ mov r10, #0 ++ mov r2, #2 ++ mov r3, r10 ++ str r10, [sp, #4] ++ str r10, [sp] ++ mov r1, r10 ++ bl NandcXferStart ++ mov fp, r8 ++ cmp r4, r10 ++ mov r9, r10 ++ movne r3, #4 ++ moveq r3, r10 ++ str r3, [sp, #12] ++.L776: ++ ldr r3, [sp, #8] ++ cmp r10, r3 ++ bcs .L771 ++ mov r1, r5 ++ mov r0, r7 ++ bl NandcXferComp ++ ldr r3, [r6, #32] ++ add r10, r10, #2 ++ str r3, [sp, #20] ++ ldr r3, [sp, #8] ++ cmp r3, r10 ++ bls .L777 ++ mov r3, #0 ++ mov r2, #2 ++ str r3, [sp, #4] ++ mov r1, #0 ++ str r3, [sp] ++ mov r0, r7 ++ and r3, r10, #3 ++ bl NandcXferStart ++.L777: ++ ldr r3, [sp, #20] ++ tst r3, #4 ++ mvnne r9, #0 ++ bne .L778 ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #20] ++ ubfx r3, r3, #3, #5 ++ ubfx r2, r2, #27, #1 ++ orr r3, r3, r2, lsl #5 ++ cmp r9, r3 ++ movcc r9, r3 ++.L778: ++ cmp r8, #0 ++ sub r2, r10, #2 ++ movne r3, fp ++ str r4, [sp] ++ moveq r3, #0 ++ and r2, r2, #3 ++ mov r1, #0 ++ mov r0, r6 ++ bl NandcCopy1KB ++ ldr r3, [sp, #12] ++ add fp, fp, #1024 ++ add r4, r4, r3 ++ b .L776 ++.L798: ++ .align 2 ++.L797: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size NandcXferData, .-NandcXferData ++ .align 2 ++ .global FlashReadRawPage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadRawPage, %function ++FlashReadRawPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r8, r3 ++ ldr r3, .L802 ++ subs r4, r0, #0 ++ mov r6, r1 ++ mov r7, r2 ++ ldrb r5, [r3, #477] @ zero_extendqisi2 ++ bne .L800 ++ ldr r1, .L802+4 ++ ldrb r3, [r1, #37] @ zero_extendqisi2 ++ ldr r0, [r1, #40] ++ mul r0, r0, r3 ++ cmp r0, r6 ++ movhi r5, #4 ++.L800: ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r1, r6 ++ mov r0, r4 ++ bl FlashReadCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r3, r7 ++ mov r2, r5 ++ str r8, [sp] ++ mov r1, #0 ++ mov r0, r4 ++ bl NandcXferData ++ mov r1, r0 ++ mov r0, r4 ++ bl NandcFlashDeCs ++ mov r0, r1 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L803: ++ .align 2 ++.L802: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashReadRawPage, .-FlashReadRawPage ++ .align 2 ++ .global FlashDdrTunningRead ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashDdrTunningRead, %function ++FlashDdrTunningRead: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r3 ++ ldr r4, .L830 ++ .pad #20 ++ sub sp, sp, #20 ++ mov fp, r2 ++ stm sp, {r0, r1} ++ ldr r3, [r4, #-2804] ++ ldr r3, [r3, #304] ++ str r3, [sp, #12] ++ ldr r3, [r4, #-1848] ++ cmp r3, #8 ++ ldr r3, [sp, #56] ++ movcc r10, #6 ++ movcs r10, #12 ++ cmp r3, #0 ++ moveq r5, #1024 ++ beq .L806 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++ ldr r0, [sp] ++ bl FlashReset ++ mov r3, r7 ++ mov r2, fp ++ ldm sp, {r0, r1} ++ bl FlashReadRawPage ++ mov r5, r0 ++ ldrb r0, [r4, #-1871] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #-1871] @ zero_extendqisi2 ++ bl NandcSetMode ++ cmn r5, #1 ++ bne .L807 ++.L816: ++ mvn r5, #0 ++.L804: ++ mov r0, r5 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L807: ++ mov r2, r5 ++ ldr r1, [sp, #4] ++ ldr r0, .L830+4 ++ bl rk_printk ++ cmp r5, #9 ++ bhi .L809 ++ ldr r2, [sp] ++ ldr r3, .L830+8 ++ ldr r3, [r3, r2, lsl #3] ++ ldr r2, [r3, #3840] ++ ldr r2, [r3] ++ orr r2, r2, #131072 ++ str r2, [r3] ++.L809: ++ ldr r3, [r4, #-1796] ++ add r3, r3, #1 ++ cmp r3, #2048 ++ str r3, [r4, #-1796] ++ movcs r7, #0 ++ strcs r7, [r4, #-1796] ++ movcs fp, r7 ++ bcc .L804 ++.L806: ++ mov r9, #0 ++ mvn r8, #0 ++ mov r6, r9 ++ mov r4, r9 ++ str r9, [sp, #8] ++.L814: ++ uxtb r0, r10 ++ bl NandcSetDdrPara ++ mov r3, r7 ++ mov r2, fp ++ ldm sp, {r0, r1} ++ bl FlashReadRawPage ++ add r3, r5, #1 ++ cmp r0, r3 ++ bhi .L810 ++ cmp r0, #2 ++ bhi .L820 ++ add r4, r4, #1 ++ cmp r4, #9 ++ bls .L820 ++ mov r3, r6 ++ mov r5, r0 ++ sub r6, r10, r4 ++ mov r8, #0 ++.L812: ++ ldr r2, [sp, #8] ++ cmp r4, r2 ++ movls r6, r3 ++.L813: ++ cmp r6, #0 ++ beq .L815 ++ mov r1, r6 ++ ldr r0, .L830+12 ++ bl rk_printk ++ uxtb r0, r6 ++ bl NandcSetDdrPara ++.L815: ++ cmn r8, #1 ++ bne .L804 ++ ldm sp, {r1, r2} ++ ldr r0, .L830+16 ++ bl rk_printk ++ ldr r3, [sp, #56] ++ cmp r3, #0 ++ beq .L816 ++ ldr r3, [sp, #12] ++ ubfx r0, r3, #8, #8 ++ bl NandcSetDdrPara ++ b .L804 ++.L810: ++ ldr r3, [sp, #8] ++ cmp r4, r3 ++ bls .L821 ++ cmp r4, #7 ++ sub r6, r9, r4 ++ bhi .L813 ++ str r4, [sp, #8] ++.L821: ++ mov r4, #0 ++ b .L811 ++.L820: ++ mov r8, #0 ++ mov r9, r10 ++ mov r5, r0 ++ mov r7, r8 ++ mov fp, r8 ++.L811: ++ add r10, r10, #2 ++ cmp r10, #69 ++ bls .L814 ++ mov r3, r6 ++ mov r6, r9 ++ b .L812 ++.L831: ++ .align 2 ++.L830: ++ .word .LANCHOR2 ++ .word .LC7 ++ .word .LANCHOR0 ++ .word .LC8 ++ .word .LC9 ++ .fnend ++ .size FlashDdrTunningRead, .-FlashDdrTunningRead ++ .align 2 ++ .global FlashReadPage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadPage, %function ++FlashReadPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r5, r0 ++ mov r7, r1 ++ mov r8, r2 ++ mov r9, r3 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ mov r4, r0 ++ ldr r6, .L852 ++ bne .L833 ++ ldr r10, .L852+4 ++ ldrb fp, [r10, #44] @ zero_extendqisi2 ++ cmp fp, #0 ++ bne .L834 ++.L836: ++ ldrb r3, [r6, #-1856] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L833 ++ ldr r3, [r6, #-2804] ++ mov r2, r8 ++ mov r1, r7 ++ mov r0, r5 ++ ldr r10, [r3, #304] ++ mov r3, #1 ++ str r3, [sp] ++ mov r3, r9 ++ bl FlashDdrTunningRead ++ cmn r0, #1 ++ mov r4, r0 ++ beq .L837 ++ ldrb r3, [r6, #-2739] @ zero_extendqisi2 ++ cmp r0, r3, lsr #1 ++ bls .L833 ++.L837: ++ ubfx r0, r10, #8, #8 ++ bl NandcSetDdrPara ++ b .L833 ++.L834: ++ mov r3, #0 ++ mov r2, r8 ++ strb r3, [r10, #44] ++ mov r1, r7 ++ mov r3, r9 ++ mov r0, r5 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ strb fp, [r10, #44] ++ movne r4, r0 ++ beq .L836 ++.L833: ++ ldr r10, [r6, #-1792] ++ adds r3, r10, #0 ++ movne r3, #1 ++ cmn r4, #1 ++ movne r3, #0 ++ cmp r3, #0 ++ beq .L832 ++ mov r3, r9 ++ mov r2, r8 ++ mov r1, r7 ++ mov r0, r5 ++ blx r10 ++ mov r3, r7 ++ mov r4, r0 ++ mov r1, r0 ++ mov r2, r5 ++ ldr r0, .L852+8 ++ bl rk_printk ++ cmn r4, #1 ++ bne .L832 ++ ldrb r3, [r6, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L832 ++ mov r0, r5 ++ bl flash_enter_slc_mode ++ ldr r4, [r6, #-1792] ++ mov r3, r9 ++ mov r2, r8 ++ mov r1, r7 ++ mov r0, r5 ++ blx r4 ++ mov r4, r0 ++ mov r0, r5 ++ bl flash_exit_slc_mode ++.L832: ++ mov r0, r4 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L853: ++ .align 2 ++.L852: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC10 ++ .fnend ++ .size FlashReadPage, .-FlashReadPage ++ .align 2 ++ .global FlashDdrParaScan ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashDdrParaScan, %function ++FlashDdrParaScan: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r6, r0 ++ ldr r5, .L864 ++ mov r4, #0 ++ mov r7, r1 ++ ldrb r0, [r5, #-1871] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r5, #-1871] @ zero_extendqisi2 ++ bl NandcSetMode ++ mov r3, r4 ++ mov r2, r4 ++ mov r1, r7 ++ str r4, [sp] ++ mov r0, r6 ++ bl FlashDdrTunningRead ++ mov r3, r4 ++ mov r8, r0 ++ mov r2, r4 ++ mov r1, r7 ++ mov r0, r6 ++ bl FlashReadRawPage ++ cmn r8, #1 ++ cmnne r0, #1 ++ mov r3, r5 ++ bne .L855 ++ ldrb r2, [r5, #-1871] @ zero_extendqisi2 ++ tst r2, #1 ++ beq .L855 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++ strb r4, [r5, #-1856] ++.L856: ++ mov r0, #0 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L855: ++ mov r2, #1 ++ strb r2, [r3, #-1856] ++ b .L856 ++.L865: ++ .align 2 ++.L864: ++ .word .LANCHOR2 ++ .fnend ++ .size FlashDdrParaScan, .-FlashDdrParaScan ++ .align 2 ++ .global FlashLoadPhyInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashLoadPhyInfo, %function ++FlashLoadPhyInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r3, #60 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r10, .L881 ++ mov r5, #0 ++ mov r7, #4 ++ strb r3, [sp, #12] ++ mov r3, #40 ++ strb r3, [sp, #13] ++ mov r3, #24 ++ strb r3, [sp, #14] ++ mov r3, #16 ++ ldr r4, .L881+4 ++ mvn r6, #0 ++ strb r3, [sp, #15] ++ mov r0, r5 ++ ldr r3, [r10, #40] ++ sub r9, r4, #2720 ++ str r5, [r4, #-1784] ++ sub r9, r9, #8 ++ str r3, [sp, #4] ++ ldr r3, [r4, #-1864] ++ str r3, [r4, #-1788] ++ bl flash_enter_slc_mode ++.L867: ++ add fp, r5, #1 ++ mov r8, #0 ++.L869: ++ add r3, sp, #12 ++ ldrb r0, [r3, r8] @ zero_extendqisi2 ++ bl FlashBchSel ++ mov r3, #0 ++ ldr r2, [r4, #-1864] ++ mov r1, r5 ++ mov r0, r3 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ bne .L868 ++ mov r3, #0 ++ ldr r2, [r4, #-1864] ++ mov r1, fp ++ mov r0, r3 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ bne .L868 ++ add r8, r8, #1 ++ cmp r8, #4 ++ bne .L869 ++.L870: ++ ldr r3, [sp, #4] ++ subs r7, r7, #1 ++ add r5, r5, r3 ++ bne .L867 ++ mov r0, r7 ++ b .L880 ++.L871: ++ movw r1, #2036 ++ add r0, r8, #12 ++ bl js_hash ++ ldr r3, [r8, #8] ++ cmp r3, r0 ++ mvnne r6, #0 ++ bne .L870 ++ ldr r6, .L881+8 ++ mov r2, #32 ++ add r1, r8, #160 ++ mov r0, r6 ++ bl ftl_memcpy ++ ldr r1, [r4, #-1788] ++ mov r2, #32 ++ ldr r0, .L881+12 ++ add r1, r1, #192 ++ bl ftl_memcpy ++ ldr r1, [r4, #-1788] ++ mov r2, #852 ++ mov r0, r9 ++ add r1, r1, #224 ++ bl ftl_memcpy ++ ldrh r0, [r6, #10] ++ bl FlashBlockAlignInit ++ ldr r6, [r4, #-1788] ++ mov r0, r5 ++ str r5, [r4, #-1784] ++ ldr r1, [r10, #40] ++ ldr r3, [r6, #1076] ++ strb r3, [r4, #-1856] ++ bl __aeabi_uidiv ++ add r0, r0, #1 ++ cmp r0, #1 ++ movls r3, #2 ++ strhi r0, [r4, #-1780] ++ strls r3, [r4, #-1780] ++ ldrh r3, [r6, #14] ++ mov r6, #0 ++ strb r3, [r4, #-1776] ++ b .L870 ++.L868: ++ ldr r8, [r4, #-1788] ++ ldr r2, .L881+16 ++ ldr r3, [r8] ++ cmp r3, r2 ++ bne .L870 ++ cmp r6, #0 ++ bne .L871 ++ ldr r1, [r10, #40] ++ mov r0, r5 ++ bl __aeabi_uidiv ++ add r0, r0, #1 ++ str r0, [r4, #-1780] ++ mov r0, r6 ++.L880: ++ bl flash_exit_slc_mode ++ mov r0, r6 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L882: ++ .align 2 ++.L881: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR1+468 ++ .word .LANCHOR0+52 ++ .word 1312902724 ++ .fnend ++ .size FlashLoadPhyInfo, .-FlashLoadPhyInfo ++ .align 2 ++ .global ToshibaReadRetrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ToshibaReadRetrial, %function ++ToshibaReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ mov r7, r0 ++ str r2, [sp, #8] ++ mov r10, r3 ++ str r1, [sp, #20] ++ bl NandcWaitFlashReady ++ ldr r3, .L911 ++ ldr r2, .L911+4 ++ ldr r5, [r3, r7, lsl #3] ++ add r3, r3, r7, lsl #3 ++ str r2, [sp, #12] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ str r3, [sp, #4] ++ add r6, r3, #8 ++ ldrb r3, [r2] @ zero_extendqisi2 ++ add r6, r5, r6, lsl #8 ++ sub r3, r3, #67 ++ cmp r3, #1 ++ ldr r3, [sp, #4] ++ movls r4, #0 ++ lsl r3, r3, #8 ++ str r3, [sp, #16] ++ bls .L884 ++ ldr r3, .L911+8 ++ ldrb r4, [r3, #-1856] @ zero_extendqisi2 ++ cmp r4, #0 ++ beq .L885 ++ mov r4, #1 ++ mov r0, #0 ++ bl NandcSetDdrMode ++.L885: ++ ldr r3, [sp, #16] ++ mov r2, #92 ++ add r3, r5, r3 ++ str r2, [r3, #2056] ++ mov r2, #197 ++ str r2, [r3, #2056] ++.L884: ++ mov r8, #1 ++ mvn r9, #0 ++.L886: ++ ldr r3, .L911+12 ++ ldrb r3, [r3] @ zero_extendqisi2 ++ add r3, r3, #1 ++ cmp r8, r3 ++ bcc .L895 ++ mov fp, r9 ++.L894: ++ ldr r3, [sp, #12] ++ mov r1, #0 ++ mov r0, r6 ++ ldrb r2, [r3] @ zero_extendqisi2 ++ sub r2, r2, #67 ++ cmp r2, #1 ++ bhi .L896 ++ bl SandiskSetRRPara ++.L897: ++ ldr r3, [sp, #16] ++ mov r2, #255 ++ add r5, r5, r3 ++ str r2, [r5, #2056] ++ ldr r2, .L911+8 ++ ldrb r2, [r2, #-2739] @ zero_extendqisi2 ++ add r2, r2, r2, lsl #1 ++ cmp fp, r2, asr #2 ++ bcc .L898 ++ cmn fp, #1 ++ movne fp, #256 ++.L898: ++ mov r0, r7 ++ bl NandcWaitFlashReady ++ cmp r4, #0 ++ beq .L883 ++ mov r0, #4 ++ bl NandcSetDdrMode ++.L883: ++ mov r0, fp ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L895: ++ ldr r3, [sp, #12] ++ mov r0, r6 ++ uxtb r1, r8 ++ ldrb r3, [r3] @ zero_extendqisi2 ++ sub r3, r3, #67 ++ cmp r3, #1 ++ bhi .L887 ++ bl SandiskSetRRPara ++.L888: ++ ldr r3, [sp, #12] ++ ldrb r3, [r3] @ zero_extendqisi2 ++ cmp r3, #34 ++ bne .L889 ++ ldr r3, .L911+12 ++ ldrb r3, [r3] @ zero_extendqisi2 ++ sub r3, r3, #3 ++ cmp r8, r3 ++ ldreq r3, [sp, #4] ++ moveq r2, #179 ++ addeq r3, r5, r3, lsl #8 ++ streq r2, [r3, #2056] ++.L889: ++ ldr r3, [sp, #16] ++ mov r2, #38 ++ cmp r4, #0 ++ add r3, r5, r3 ++ str r2, [r3, #2056] ++ mov r2, #93 ++ str r2, [r3, #2056] ++ beq .L890 ++ mov r0, #4 ++ bl NandcSetDdrMode ++ mov r3, r10 ++ ldr r2, [sp, #8] ++ ldr r1, [sp, #20] ++ mov r0, r7 ++ bl FlashReadRawPage ++ mov fp, r0 ++ mov r0, #0 ++ bl NandcSetDdrMode ++.L891: ++ cmn fp, #1 ++ beq .L892 ++ ldr r3, .L911+8 ++ cmn r9, #1 ++ moveq r9, fp ++ ldrb r2, [r3, #-2739] @ zero_extendqisi2 ++ add r2, r2, r2, lsl #1 ++ cmp fp, r2, asr #2 ++ bcc .L894 ++ mov r10, #0 ++ str r10, [sp, #8] ++.L892: ++ add r8, r8, #1 ++ b .L886 ++.L887: ++ bl ToshibaSetRRPara ++ b .L888 ++.L890: ++ mov r3, r10 ++ ldr r2, [sp, #8] ++ ldr r1, [sp, #20] ++ mov r0, r7 ++ bl FlashReadRawPage ++ mov fp, r0 ++ b .L891 ++.L896: ++ bl ToshibaSetRRPara ++ b .L897 ++.L912: ++ .align 2 ++.L911: ++ .word .LANCHOR0 ++ .word g_retryMode ++ .word .LANCHOR2 ++ .word g_maxRetryCount ++ .fnend ++ .size ToshibaReadRetrial, .-ToshibaReadRetrial ++ .align 2 ++ .global SamsungReadRetrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SamsungReadRetrial, %function ++SamsungReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r0 ++ mov r9, r2 ++ mov r8, r3 ++ mov r10, r1 ++ mov r6, #1 ++ bl NandcWaitFlashReady ++ ldr r2, .L927 ++ mvn r4, #0 ++ ldr fp, .L927+4 ++ add r3, r2, r7, lsl #3 ++ ldrb r5, [r3, #4] @ zero_extendqisi2 ++ add r3, r5, #8 ++ ldr r5, [r2, r7, lsl #3] ++ add r5, r5, r3, lsl #8 ++.L914: ++ ldr r3, .L927+8 ++ ldrb r3, [r3] @ zero_extendqisi2 ++ add r3, r3, #1 ++ cmp r6, r3 ++ bcc .L918 ++.L917: ++ mov r1, #0 ++ mov r0, r5 ++ bl SamsungSetRRPara ++ ldr r3, .L927+4 ++ ldrb r3, [r3, #-2739] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L913 ++ cmn r4, #1 ++ movne r4, #256 ++.L913: ++ mov r0, r4 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L918: ++ uxtb r1, r6 ++ mov r0, r5 ++ bl SamsungSetRRPara ++ mov r3, r8 ++ mov r2, r9 ++ mov r1, r10 ++ mov r0, r7 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L915 ++ ldrb r3, [fp, #-2739] @ zero_extendqisi2 ++ cmn r4, #1 ++ moveq r4, r0 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L921 ++ mov r8, #0 ++ mov r9, r8 ++.L915: ++ add r6, r6, #1 ++ b .L914 ++.L921: ++ mov r4, r0 ++ b .L917 ++.L928: ++ .align 2 ++.L927: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word g_maxRetryCount ++ .fnend ++ .size SamsungReadRetrial, .-SamsungReadRetrial ++ .align 2 ++ .global MicronReadRetrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type MicronReadRetrial, %function ++MicronReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++.L931: ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r3 ++ ldr r3, .L954 ++ mov fp, r2 ++ .pad #36 ++ sub sp, sp, #36 ++ mov r6, r0 ++ str r1, [sp, #20] ++ ldrb r2, [r3, #-2739] @ zero_extendqisi2 ++ ldrb r3, [r3, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrne r5, .L954+4 ++ addeq r2, r2, r2, lsl #1 ++ asreq r5, r2, #2 ++ smullne r2, r3, r2, r5 ++ movne r5, r3 ++ mov r3, #0 ++ str r3, [sp, #8] ++ ldr r3, .L954+8 ++ add r3, r3, r0, lsl #3 ++ str r3, [sp, #28] ++.L941: ++ mov r0, r6 ++ mov r10, #0 ++ bl NandcWaitFlashReady ++ ldr r3, .L954+8 ++ mvn r4, #0 ++ ldr r3, [r3, r6, lsl #3] ++ str r3, [sp, #12] ++ ldr r3, [sp, #28] ++ ldrb r3, [r3, #4] @ zero_extendqisi2 ++ str r3, [sp, #16] ++ ldr r2, [sp, #16] ++ ldr r3, [sp, #12] ++ add r7, r3, r2, lsl #8 ++.L932: ++ ldr r3, .L954+12 ++ ldrb r3, [r3] @ zero_extendqisi2 ++ cmp r10, r3 ++ bcc .L936 ++.L935: ++ ldr r3, [sp, #12] ++ mov r0, #200 ++ ldr r2, [sp, #16] ++ add r7, r3, r2, lsl #8 ++ mov r3, #239 ++ str r3, [r7, #2056] ++ mov r3, #137 ++ str r3, [r7, #2052] ++ bl ndelay ++ cmp r4, r5 ++ mov r3, #0 ++ str r3, [r7, #2048] ++ str r3, [r7, #2048] ++ str r3, [r7, #2048] ++ str r3, [r7, #2048] ++ bcc .L937 ++ cmn r4, #1 ++ movne r4, #256 ++.L937: ++ cmn r4, #1 ++ movne r7, #0 ++ moveq r7, #1 ++ cmp r4, #256 ++ movne r1, r7 ++ orreq r1, r7, #1 ++ cmp r1, #0 ++ beq .L938 ++ mov r3, r10 ++ str r4, [sp] ++ ldr r2, [sp, #20] ++ mov r1, r10 ++ ldr r0, .L954+16 ++ bl rk_printk ++ ldr r3, [sp, #8] ++ cmp r3, #0 ++ bne .L939 ++ ldr r3, .L954 ++ ldrb r3, [r3, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ moveq r7, #0 ++ andne r7, r7, #1 ++ cmp r7, #0 ++ beq .L929 ++ mov r1, #3 ++ mov r0, r6 ++ bl micron_auto_read_calibration_config ++ mov r3, #1 ++ str r3, [sp, #8] ++ b .L941 ++.L936: ++ mov r3, #239 ++ mov r0, #200 ++ str r3, [r7, #2056] ++ mov r3, #137 ++ str r3, [r7, #2052] ++ mov r9, #0 ++ bl ndelay ++ add r3, r10, #1 ++ mov r2, fp ++ str r3, [r7, #2048] ++ mov r0, r6 ++ str r9, [r7, #2048] ++ str r3, [sp, #24] ++ mov r3, r8 ++ str r9, [r7, #2048] ++ ldr r1, [sp, #20] ++ str r9, [r7, #2048] ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L933 ++ cmn r4, #1 ++ moveq r4, r0 ++ cmp r0, r5 ++ bcc .L943 ++ mov r8, r9 ++ mov fp, r9 ++.L933: ++ ldr r10, [sp, #24] ++ b .L932 ++.L943: ++ mov r4, r0 ++ mov r8, r9 ++ mov fp, r9 ++ b .L935 ++.L939: ++ mov r1, #0 ++ mov r0, r6 ++ bl micron_auto_read_calibration_config ++ cmn r4, #1 ++ movne r4, #256 ++.L929: ++ mov r0, r4 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L938: ++ ldr r3, [sp, #8] ++ cmp r3, #0 ++ beq .L929 ++ mov r0, r6 ++ mov r4, #256 ++ bl micron_auto_read_calibration_config ++ b .L929 ++.L955: ++ .align 2 ++.L954: ++ .word .LANCHOR2 ++ .word 1431655766 ++ .word .LANCHOR0 ++ .word g_maxRetryCount ++ .word .LC11 ++ .fnend ++ .size MicronReadRetrial, .-MicronReadRetrial ++ .align 2 ++ .global HynixReadRetrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type HynixReadRetrial, %function ++HynixReadRetrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r9, r3 ++ str r1, [sp] ++ mov r8, #0 ++ mvn r6, #0 ++ mov fp, r2 ++ ldr r1, .L974 ++ mov r5, r0 ++ ldr r7, .L974+4 ++ ldr r3, [r1, #48] ++ add r2, r7, r0 ++ ldrb r10, [r7, #-2726] @ zero_extendqisi2 ++ ldrb r4, [r2, #-2716] @ zero_extendqisi2 ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ str r1, [sp, #4] ++ sub r3, r3, #7 ++ cmp r3, #1 ++ ldrbls r4, [r2, #-2708] @ zero_extendqisi2 ++ bl NandcWaitFlashReady ++.L958: ++ cmp r8, r10 ++ bcc .L963 ++.L962: ++ ldr r3, [sp, #4] ++ add r5, r7, r5 ++ ldr r3, [r3, #48] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r3, r3, #7 ++ cmp r3, #1 ++ ldrb r3, [r7, #-2739] @ zero_extendqisi2 ++ strbls r4, [r5, #-2708] ++ strbhi r4, [r5, #-2716] ++ add r3, r3, r3, lsl #1 ++ cmp r6, r3, asr #2 ++ bcc .L956 ++ cmn r6, #1 ++ movne r6, #256 ++.L956: ++ mov r0, r6 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L963: ++ add r4, r4, #1 ++ ldr r2, .L974+8 ++ uxtb r4, r4 ++ ldrb r1, [r7, #-2727] @ zero_extendqisi2 ++ mov r0, r5 ++ cmp r10, r4 ++ movls r4, #0 ++ mov r3, r4 ++ bl HynixSetRRPara ++ mov r3, r9 ++ mov r2, fp ++ ldr r1, [sp] ++ mov r0, r5 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L960 ++ ldrb r3, [r7, #-2739] @ zero_extendqisi2 ++ cmn r6, #1 ++ moveq r6, r0 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L967 ++ mov r9, #0 ++ mov fp, r9 ++.L960: ++ add r8, r8, #1 ++ b .L958 ++.L967: ++ mov r6, r0 ++ b .L962 ++.L975: ++ .align 2 ++.L974: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR2-2724 ++ .fnend ++ .size HynixReadRetrial, .-HynixReadRetrial ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type samsung_read_retrial, %function ++samsung_read_retrial: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ mov r10, r0 ++ mov fp, r2 ++ mov r9, r3 ++ str r1, [sp, #16] ++ bl NandcWaitFlashReady ++ ldr r3, .L1006 ++ ldr r2, [r3, r10, lsl #3] ++ add r3, r3, r10, lsl #3 ++ ldrb r6, [r3, #4] @ zero_extendqisi2 ++ ldr r3, .L1006+4 ++ str r2, [sp, #12] ++ ldrb r2, [r3, #-1872] @ zero_extendqisi2 ++ str r3, [sp, #20] ++ cmp r2, #0 ++ bne .L977 ++ ldr r3, [sp, #12] ++ lsl r8, r6, #8 ++ mvn r4, #0 ++ mov r7, #1 ++ add r5, r3, r8 ++.L981: ++ mov r3, #239 ++ mov r6, #0 ++ str r3, [r5, #2056] ++ mov r3, #141 ++ str r3, [r5, #2052] ++ mov r2, fp ++ ldr r3, .L1006+8 ++ mov r0, r10 ++ ldr r1, [sp, #16] ++ ldrsb r3, [r7, r3] ++ str r3, [r5, #2048] ++ mov r3, r9 ++ str r6, [r5, #2048] ++ str r6, [r5, #2048] ++ str r6, [r5, #2048] ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L978 ++ ldr r3, [sp, #20] ++ cmn r4, #1 ++ moveq r4, r0 ++ ldrb r3, [r3, #-2739] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L989 ++ mov r9, r6 ++ mov fp, r6 ++.L978: ++ add r7, r7, #1 ++ cmp r7, #26 ++ bne .L981 ++.L980: ++ ldr r3, [sp, #12] ++ add r8, r3, r8 ++ mov r3, #239 ++ str r3, [r8, #2056] ++ mov r3, #141 ++.L1005: ++ str r3, [r5, #2052] ++ mov r3, #0 ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ ldr r3, .L1006+4 ++ ldrb r3, [r3, #-2739] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L987 ++ cmn r4, #1 ++ movne r4, #256 ++.L987: ++ cmn r4, #1 ++ cmpne r4, #256 ++ bne .L988 ++ str r4, [sp] ++ mov r3, r7 ++ ldr r2, [sp, #16] ++ mov r1, r7 ++ ldr r0, .L1006+12 ++ bl rk_printk ++.L988: ++ mov r0, r10 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L989: ++ mov r4, r0 ++ b .L980 ++.L977: ++ ldr r3, [sp, #12] ++ lsl r6, r6, #8 ++ ldr r8, .L1006+16 ++ mvn r4, #0 ++ mov r7, #1 ++ add r5, r3, r6 ++.L986: ++ mov r3, #239 ++ mov r2, fp ++ str r3, [r5, #2056] ++ mov r3, #137 ++ str r3, [r5, #2052] ++ mov r0, r10 ++ ldrb r3, [r8, #4] @ zero_extendqisi2 ++ ldr r1, [sp, #16] ++ str r3, [r5, #2048] ++ ldrb r3, [r8, #5] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ ldrb r3, [r8, #6] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ ldrb r3, [r8, #7] @ zero_extendqisi2 ++ str r3, [r5, #2048] ++ mov r3, r9 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L983 ++ ldr r3, .L1006+4 ++ cmn r4, #1 ++ moveq r4, r0 ++ ldrb r3, [r3, #-2739] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L990 ++ mov r9, #0 ++ mov fp, r9 ++.L983: ++ add r7, r7, #1 ++ add r8, r8, #4 ++ cmp r7, #26 ++ bne .L986 ++.L985: ++ ldr r3, [sp, #12] ++ add r6, r3, r6 ++ mov r3, #239 ++ str r3, [r6, #2056] ++ mov r3, #137 ++ b .L1005 ++.L990: ++ mov r4, r0 ++ b .L985 ++.L1007: ++ .align 2 ++.L1006: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR3 ++ .word .LC12 ++ .word .LANCHOR3+26 ++ .fnend ++ .size samsung_read_retrial, .-samsung_read_retrial ++ .align 2 ++ .global FlashProgPage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgPage, %function ++FlashProgPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r8, r3 ++ ldr r3, .L1012 ++ subs r4, r0, #0 ++ mov r5, r1 ++ mov r7, r2 ++ ldrb r6, [r3, #477] @ zero_extendqisi2 ++ bne .L1009 ++ ldr r1, .L1012+4 ++ ldrb r3, [r1, #37] @ zero_extendqisi2 ++ ldr r0, [r1, #40] ++ mul r0, r0, r3 ++ cmp r0, r5 ++ bls .L1009 ++ ldrb r3, [r1, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ movne r6, #4 ++.L1009: ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r0, r4 ++ bl NandcFlashCs ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashProgFirstCmd ++ mov r3, r7 ++ mov r2, r6 ++ str r8, [sp] ++ mov r1, #1 ++ mov r0, r4 ++ bl NandcXferData ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashProgSecondCmd ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ mov r1, r5 ++ mov r0, r4 ++ bl FlashReadStatus ++ mov r1, r0 ++ mov r0, r4 ++ bl NandcFlashDeCs ++ and r0, r1, #1 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1013: ++ .align 2 ++.L1012: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .fnend ++ .size FlashProgPage, .-FlashProgPage ++ .align 2 ++ .global FlashSavePhyInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashSavePhyInfo, %function ++FlashSavePhyInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r4, .L1028 ++ ldr r5, .L1028+4 ++ ldr r3, [r4, #-1864] ++ ldrb r0, [r4, #-1775] @ zero_extendqisi2 ++ ldr r8, .L1028+8 ++ str r3, [r4, #-1788] ++ bl FlashBchSel ++ mov r2, #2048 ++ mov r1, #0 ++ ldr r0, [r4, #-1864] ++ bl ftl_memset ++ ldr r3, [r4, #-1788] ++ mov r2, #32 ++ ldr r1, .L1028+12 ++ str r8, [r3] ++ ldr r0, [r4, #-1788] ++ ldrb r3, [r5, #3156] @ zero_extendqisi2 ++ add r0, r0, #16 ++ strh r3, [r0, #-4] @ movhi ++ ldrb r3, [r5, #37] @ zero_extendqisi2 ++ strh r3, [r0, #-2] @ movhi ++ ldrb r3, [r4, #-1856] @ zero_extendqisi2 ++ str r3, [r0, #1060] ++ bl ftl_memcpy ++ ldr r0, [r4, #-1788] ++ mov r2, #8 ++ ldr r1, .L1028+16 ++ add r0, r0, #80 ++ bl ftl_memcpy ++ ldr r0, [r4, #-1788] ++ mov r2, #32 ++ add r1, r5, #3168 ++ add r0, r0, #96 ++ bl ftl_memcpy ++ ldr r0, [r4, #-1788] ++ mov r2, #32 ++ ldr r1, .L1028+20 ++ add r0, r0, #160 ++ bl ftl_memcpy ++ ldr r0, [r4, #-1788] ++ mov r2, #32 ++ add r1, r5, #52 ++ add r0, r0, #192 ++ bl ftl_memcpy ++ ldr r0, [r4, #-1788] ++ sub r1, r4, #2720 ++ mov r2, #852 ++ sub r1, r1, #8 ++ add r0, r0, #224 ++ bl ftl_memcpy ++ ldr r6, [r4, #-1788] ++ movw r1, #2036 ++ add r0, r6, #12 ++ bl js_hash ++ movw r3, #1592 ++ str r0, [r6, #8] ++ str r3, [r6, #4] ++ mov r6, #0 ++ ldr r3, [r4, #-1772] ++ mov r7, r6 ++ mov r0, #0 ++ str r3, [r4, #-1788] ++ bl flash_enter_slc_mode ++.L1020: ++ ldr r1, [r5, #40] ++ mov r2, #0 ++ mov r0, r2 ++ mul r1, r1, r7 ++ bl FlashEraseBlock ++ ldrb r9, [r4, #-2740] @ zero_extendqisi2 ++ cmp r9, #0 ++ beq .L1015 ++ mov r9, #0 ++.L1016: ++ ldr r1, [r5, #40] ++ mov r3, #0 ++ ldr r2, [r4, #-1864] ++ mov r0, r3 ++ mla r1, r1, r7, r9 ++ add r9, r9, #1 ++ bl FlashProgPage ++ cmp r9, #10 ++ bne .L1016 ++.L1017: ++ ldr r1, [r5, #40] ++ mov r3, #0 ++ ldr r2, [r4, #-1772] ++ mov r0, r3 ++ add r10, r7, #1 ++ mul r1, r1, r7 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ beq .L1018 ++ ldr r9, [r4, #-1788] ++ ldr r3, [r9] ++ cmp r3, r8 ++ bne .L1018 ++ movw r1, #2036 ++ add r0, r9, #12 ++ bl js_hash ++ ldr r3, [r9, #8] ++ cmp r3, r0 ++ bne .L1018 ++ ldr r3, [r5, #40] ++ cmp r6, #1 ++ str r10, [r4, #-1780] ++ mul r7, r7, r3 ++ str r7, [r4, #-1784] ++ beq .L1021 ++ mov r6, #1 ++.L1018: ++ cmp r10, #4 ++ mov r7, r10 ++ bne .L1020 ++.L1019: ++ mov r0, #0 ++ bl flash_exit_slc_mode ++ clz r0, r6 ++ lsr r0, r0, #5 ++ rsb r0, r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1015: ++ ldr r1, [r5, #40] ++ mov r3, r9 ++ ldr r2, [r4, #-1864] ++ mov r0, r9 ++ mul r1, r1, r7 ++ bl FlashProgPage ++ ldr r1, [r5, #40] ++ mov r3, r9 ++ ldr r2, [r4, #-1864] ++ mov r0, r9 ++ mul r1, r1, r7 ++ add r1, r1, #1 ++ bl FlashProgPage ++ b .L1017 ++.L1021: ++ mov r6, #2 ++ b .L1019 ++.L1029: ++ .align 2 ++.L1028: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word 1312902724 ++ .word IDByte ++ .word .LANCHOR0+3160 ++ .word .LANCHOR1+468 ++ .fnend ++ .size FlashSavePhyInfo, .-FlashSavePhyInfo ++ .align 2 ++ .global FlashReadIdbDataRaw ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadIdbDataRaw, %function ++FlashReadIdbDataRaw: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r3, #60 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r4, .L1049 ++ mov r9, r0 ++ strb r3, [sp, #12] ++ mov r3, #40 ++ strb r3, [sp, #13] ++ mov r3, #24 ++ strb r3, [sp, #14] ++ mov r3, #16 ++ strb r3, [sp, #15] ++ ldrb r3, [r4, #-2739] @ zero_extendqisi2 ++ str r3, [sp, #4] ++ ldr r3, [r4, #-1860] ++ cmp r3, #0 ++ beq .L1031 ++ mov r0, #0 ++ bl flash_enter_slc_mode ++.L1031: ++ ldr fp, .L1049+4 ++ mvn r7, #0 ++ mov r5, #2 ++ mov r2, #2048 ++ mov r1, #0 ++ mov r0, r9 ++ mov r10, fp ++ bl ftl_memset ++.L1032: ++ ldrb r3, [fp, #37] @ zero_extendqisi2 ++ cmp r5, r3 ++ bcc .L1037 ++.L1036: ++ ldr r0, [sp, #4] ++ bl FlashBchSel ++ ldr r3, [r4, #-1860] ++ cmp r3, #0 ++ beq .L1030 ++ mov r0, #0 ++ bl flash_exit_slc_mode ++.L1030: ++ mov r0, r7 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1037: ++ mov r6, #0 ++.L1034: ++ add r3, sp, #12 ++ ldrb r8, [r3, r6] @ zero_extendqisi2 ++ mov r0, r8 ++ bl FlashBchSel ++ ldr r1, [r10, #40] ++ mov r3, #0 ++ ldr r2, [r4, #-1864] ++ mov r0, r3 ++ mul r1, r1, r5 ++ bl FlashReadRawPage ++ cmn r0, #1 ++ bne .L1033 ++ add r6, r6, #1 ++ cmp r6, #4 ++ bne .L1034 ++.L1035: ++ add r5, r5, #1 ++ b .L1032 ++.L1040: ++ mov r7, #0 ++ b .L1036 ++.L1033: ++ ldr r3, [r4, #-1864] ++ ldr r2, .L1049+8 ++ ldr r3, [r3] ++ cmp r3, r2 ++ bne .L1035 ++ mov r1, r8 ++ ldr r0, .L1049+12 ++ bl rk_printk ++ mov r2, #2048 ++ ldr r1, [r4, #-1864] ++ mov r0, r9 ++ bl ftl_memcpy ++ ldr r3, [r4, #-1864] ++ ldr r3, [r3, #512] ++ strb r3, [r10, #37] ++ ldr r3, [r4, #-1780] ++ cmp r5, r3 ++ bcs .L1040 ++ str r5, [r4, #-1780] ++ mov r7, #0 ++ bl FlashSavePhyInfo ++ b .L1035 ++.L1050: ++ .align 2 ++.L1049: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word -52655045 ++ .word .LC13 ++ .fnend ++ .size FlashReadIdbDataRaw, .-FlashReadIdbDataRaw ++ .align 2 ++ .global FlashInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashInit, %function ++FlashInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r6, r0 ++ ldr r4, .L1149 ++ .pad #28 ++ sub sp, sp, #28 ++ mov r0, #32768 ++ mov r7, #0 ++ bl ftl_dma32_malloc ++ str r0, [r4, #-1864] ++ mov r0, #32768 ++ bl ftl_dma32_malloc ++ str r0, [r4, #-1772] ++ mov r0, #4096 ++ bl ftl_dma32_malloc ++ str r0, [r4, #-1768] ++ mov r0, #32768 ++ bl ftl_dma32_malloc ++ str r0, [r4, #-1764] ++ mov r0, #4096 ++ bl ftl_dma32_malloc ++ ldr r5, .L1149+4 ++ mov r3, #50 ++ str r0, [r4, #-1760] ++ mov r0, r6 ++ ldr r6, .L1149+8 ++ mov r9, r7 ++ strb r3, [r5, #37] ++ strb r3, [r4, #-1776] ++ mov r3, #128 ++ mov r8, r6 ++ str r3, [r5, #40] ++ mov r3, #60 ++ str r7, [r4, #-1780] ++ strb r7, [r4, #-1856] ++ str r7, [r4, #-1796] ++ strb r7, [r5, #36] ++ strb r7, [r4, #-1756] ++ strb r3, [r4, #-1775] ++ bl NandcInit ++.L1057: ++ add r2, r5, r7, lsl #3 ++ uxtb r10, r7 ++ ldr fp, [r5, r7, lsl #3] ++ ldrb r2, [r2, #4] @ zero_extendqisi2 ++ mov r0, r10 ++ str r2, [sp, #20] ++ bl FlashReset ++ mov r0, r10 ++ bl NandcFlashCs ++ ldr r2, [sp, #20] ++ mov r3, #144 ++ mov r0, #200 ++ add fp, fp, r2, lsl #8 ++ str r3, [fp, #2056] ++ str r9, [fp, #2052] ++ bl ndelay ++ ldr r2, [fp, #2048] ++ uxtb r2, r2 ++ strb r2, [r6] ++ cmp r2, #44 ++ ldr r1, [fp, #2048] ++ strb r1, [r6, #1] ++ ldr r1, [fp, #2048] ++ strb r1, [r6, #2] ++ ldr r1, [fp, #2048] ++ strb r1, [r6, #3] ++ ldr r1, [fp, #2048] ++ strb r1, [r6, #4] ++ ldr r1, [fp, #2048] ++ strb r1, [r6, #5] ++ bne .L1052 ++ mov r2, #239 ++ mov r0, #200 ++ str r2, [fp, #2056] ++ mov r2, #1 ++ str r2, [fp, #2052] ++ bl ndelay ++ mov r2, #4 ++ str r2, [fp, #2048] ++ str r9, [fp, #2048] ++ str r9, [fp, #2048] ++ str r9, [fp, #2048] ++.L1052: ++ mov r0, r10 ++ bl NandcFlashDeCs ++ ldrb r2, [r6] @ zero_extendqisi2 ++ sub r3, r2, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L1053 ++ ldrb r1, [r6, #5] @ zero_extendqisi2 ++ ldrb r3, [r6, #1] @ zero_extendqisi2 ++ ldr r0, .L1149+12 ++ str r1, [sp, #12] ++ ldrb r1, [r6, #4] @ zero_extendqisi2 ++ str r1, [sp, #8] ++ ldrb r1, [r6, #3] @ zero_extendqisi2 ++ str r1, [sp, #4] ++ ldrb r1, [r6, #2] @ zero_extendqisi2 ++ str r1, [sp] ++ add r1, r7, #1 ++ bl rk_printk ++.L1053: ++ cmp r7, #0 ++ bne .L1054 ++ ldrb r3, [r8] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L1104 ++ ldrb r3, [r8, #1] @ zero_extendqisi2 ++ cmp r3, #255 ++ beq .L1104 ++ bl FlashCs123Init ++.L1054: ++ ldrb r3, [r6] @ zero_extendqisi2 ++ add r7, r7, #1 ++ add r6, r6, #8 ++ cmp r3, #181 ++ moveq r3, #44 ++ strbeq r3, [r6, #-8] ++ cmp r7, #4 ++ bne .L1057 ++ ldrb r3, [r8] @ zero_extendqisi2 ++ cmp r3, #173 ++ beq .L1058 ++ ldr r0, [r4, #-1852] ++ bl NandcSetDdrMode ++.L1058: ++ mov r2, #852 ++ mov r1, #0 ++ ldr r0, .L1149+16 ++ bl ftl_memset ++ ldr r7, .L1149+20 ++ ldr r2, .L1149+24 ++ ldr r0, [r4, #-1844] ++ ldr r6, .L1149+28 ++ add r3, r2, #468 ++ cmp r0, r7 ++ str r3, [r5, #48] ++ mov r3, #0 ++ strb r3, [r5, #44] ++ bne .L1059 ++ ldrb r3, [r2, #487] @ zero_extendqisi2 ++ cmp r3, #50 ++ movne r3, #1 ++ strne r3, [r4, #-1860] ++.L1059: ++ ldrb r3, [r8, #1] @ zero_extendqisi2 ++ cmp r3, #241 ++ cmpne r3, #161 ++ and ip, r3, #253 ++ moveq r1, #1 ++ movne r1, #0 ++ cmp r3, #218 ++ orreq r1, r1, #1 ++ cmp ip, #209 ++ orreq r1, r1, #1 ++ cmp r1, #0 ++ bne .L1060 ++ cmp r3, #220 ++ bne .L1061 ++ ldrb r1, [r8, #3] @ zero_extendqisi2 ++ cmp r1, #149 ++ bne .L1061 ++.L1060: ++ mov ip, #16 ++ mov r1, #1 ++ strb ip, [r5, #37] ++ strb ip, [r4, #-1775] ++ ldrb ip, [r8] @ zero_extendqisi2 ++ strb r1, [r5, #36] ++ strb r3, [r2, #3410] ++ cmp ip, #152 ++ strb ip, [r2, #3409] ++ bne .L1063 ++ ldrsb ip, [r8, #4] ++ cmp ip, #0 ++ movge r1, #24 ++ strblt r1, [r4, #-1756] ++ strbge r1, [r4, #-1775] ++.L1063: ++ movw r1, #2049 ++ cmp r0, r1 ++ cmpne r0, r7 ++ moveq r1, #16 ++ strbeq r1, [r4, #-1775] ++ cmp r3, #218 ++ bne .L1067 ++ ldr r3, .L1149+32 ++ mov r1, #2048 ++ strh r1, [r3, #14] @ movhi ++ mvn r3, #37 ++.L1143: ++ strb r3, [r2, #3410] ++.L1068: ++ mov r2, #32 ++ ldr r1, .L1149+36 ++ ldr r0, .L1149+40 ++ bl ftl_memcpy ++ mov r2, #32 ++ ldr r1, .L1149+32 ++ ldr r0, .L1149+44 ++ bl ftl_memcpy ++.L1061: ++ ldrb r3, [r5, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1071 ++ bl FlashLoadPhyInfoInRam ++ cmp r0, #0 ++ bne .L1073 ++ ldr r3, [r5, #48] ++ ldrh r3, [r3, #16] ++ lsr r3, r3, #8 ++ tst r3, #1 ++ and r0, r3, #7 ++ strb r0, [r4, #-1871] ++ bne .L1073 ++ mov r3, #1 ++ strb r3, [r4, #-1856] ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #-1871] @ zero_extendqisi2 ++ bl NandcSetMode ++.L1073: ++ ldr r3, [r5, #48] ++ ldrb r3, [r3, #26] @ zero_extendqisi2 ++ strb r3, [r4, #-2740] ++ bl FlashLoadPhyInfo ++ cmp r0, #0 ++ beq .L1071 ++ ldr r3, [r4, #-1852] ++ cmp r3, #0 ++ beq .L1076 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++.L1144: ++ bl NandcSetMode ++ bl FlashLoadPhyInfo ++ cmp r0, #0 ++ beq .L1071 ++ mov r0, #1 ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++ ldr r3, [r5, #48] ++ ldr r0, .L1149+48 ++ ldrh r1, [r3, #14] ++ bl rk_printk ++ bl FlashLoadPhyInfoInRam ++ cmn r0, #1 ++ beq .L1051 ++ bl FlashDieInfoInit ++ ldr r3, [r5, #48] ++ ldrb r0, [r3, #19] @ zero_extendqisi2 ++ bl FlashGetReadRetryDefault ++ ldr r3, .L1149+52 ++ ldr r2, [r5, #48] ++ ldrh r3, [r3] ++ ldrb r1, [r2, #9] @ zero_extendqisi2 ++ add r3, r3, #4080 ++ add r3, r3, #15 ++ cmp r1, r3, asr #12 ++ ldrh r3, [r2, #14] ++ blt .L1078 ++ add r0, r3, #255 ++ cmp r1, r0, asr #8 ++ bge .L1079 ++.L1078: ++ bic r3, r3, #255 ++ strh r3, [r2, #14] @ movhi ++.L1079: ++ ldrb r3, [r4, #-1871] @ zero_extendqisi2 ++ tst r3, #6 ++ beq .L1080 ++ bl FlashSavePhyInfo ++ mov r0, #0 ++ bl flash_enter_slc_mode ++ ldr r1, [r4, #-1784] ++ mov r0, #0 ++ bl FlashDdrParaScan ++ mov r0, #0 ++ bl flash_exit_slc_mode ++.L1080: ++ bl FlashSavePhyInfo ++.L1071: ++ ldr r9, [r5, #48] ++ ldrb r3, [r9, #26] @ zero_extendqisi2 ++ ldrb r1, [r9, #12] @ zero_extendqisi2 ++ ldrh r0, [r9, #10] ++ strb r3, [r4, #-2740] ++ ldrh r3, [r9, #16] ++ ubfx r2, r3, #7, #1 ++ strb r2, [r5, #44] ++ ubfx r2, r3, #3, #1 ++ strb r2, [r4, #-1755] ++ ubfx r2, r3, #4, #1 ++ ubfx r3, r3, #8, #3 ++ strb r2, [r4, #-1870] ++ strb r3, [r4, #-1871] ++ mov r3, #0 ++ str r3, [r4, #-1792] ++ bl __aeabi_idiv ++ mov r1, r0 ++ ldrb r0, [r9, #18] @ zero_extendqisi2 ++ bl BuildFlashLsbPageTable ++ bl FlashDieInfoInit ++ ldr r3, [r5, #48] ++ ldrh r2, [r3, #16] ++ tst r2, #64 ++ beq .L1082 ++ ldrb r0, [r3, #19] @ zero_extendqisi2 ++ ldr r3, .L1149+56 ++ ldr r2, .L1149+60 ++ ldrb r1, [r4, #-2726] @ zero_extendqisi2 ++ strb r0, [r3] ++ ldrb r3, [r4, #-2727] @ zero_extendqisi2 ++ mov ip, r2 ++ strb r3, [r2] ++ ldr r3, .L1149+64 ++ strb r1, [r3] ++ sub r1, r0, #1 ++ cmp r1, #7 ++ bhi .L1083 ++ ldr r3, .L1149+68 ++ str r3, [r4, #-1792] ++ sub r3, r0, #5 ++ cmp r0, #8 ++ cmpne r3, #1 ++ movls r3, #1 ++ strls r3, [r4, #-1804] ++ cmp r0, #7 ++ beq .L1105 ++ cmp r0, #8 ++ addne r6, r6, #12 ++ bne .L1085 ++.L1105: ++ add r6, r6, #20 ++.L1085: ++ sub r2, r6, #1 ++ mov r3, #0 ++ add r6, r6, #31 ++.L1087: ++ ldrsb r1, [r2, #1]! ++ cmp r1, #0 ++ addeq r3, r3, #1 ++ cmp r6, r2 ++ bne .L1087 ++ cmp r3, #27 ++ bls .L1082 ++ bl FlashGetReadRetryDefault ++ bl FlashSavePhyInfo ++.L1082: ++ ldr r3, [r4, #-1844] ++ cmp r3, r7 ++ bne .L1097 ++ ldrb r2, [r4, #-2740] @ zero_extendqisi2 ++ cmp r2, #0 ++ ldrne r2, [r5, #48] ++ movne r1, #0 ++ strbne r1, [r2, #18] ++.L1097: ++ ldrb r2, [r8] @ zero_extendqisi2 ++ cmp r2, #44 ++ bne .L1098 ++ ldrb r2, [r4, #-1856] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L1098 ++ cmp r3, r7 ++ bne .L1099 ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1098 ++.L1099: ++ mov r3, #0 ++ mov r0, #1 ++ strb r3, [r4, #-1856] ++ bl FlashSetInterfaceMode ++ mov r0, #1 ++ bl NandcSetMode ++.L1098: ++ ldrb r3, [r4, #-1871] @ zero_extendqisi2 ++ tst r3, #6 ++ beq .L1100 ++ ldrb r2, [r4, #-1856] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L1101 ++ tst r3, #1 ++ bne .L1100 ++.L1101: ++ mov r0, #0 ++ bl flash_enter_slc_mode ++ ldr r1, [r4, #-1784] ++ mov r0, #0 ++ bl FlashDdrParaScan ++ mov r0, #0 ++ bl flash_exit_slc_mode ++.L1100: ++ ldr r3, [r5, #48] ++ mov r9, #16 ++ ldr r6, .L1149+72 ++ ldrb r0, [r3, #20] @ zero_extendqisi2 ++ bl FlashBchSel ++ ldr r0, .L1149+76 ++ bl FlashReadIdbDataRaw ++ ldr r0, .L1149+80 ++ strb r9, [r5, #37] ++ bl FlashTimingCfg ++ ldr r7, [r5, #48] ++ ldrb r2, [r8, #1] @ zero_extendqisi2 ++ ldrb r3, [r7, #12] @ zero_extendqisi2 ++ strh r3, [r6, #8] @ movhi ++ ldrb r3, [r7, #7] @ zero_extendqisi2 ++ str r3, [r4, #-2764] ++ lsl r3, r2, r9 ++ orr r3, r3, r2, lsl #8 ++ ldrb r2, [r8] @ zero_extendqisi2 ++ orr r3, r3, r2 ++ ldrb r2, [r8, #3] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #24 ++ str r3, [r4, #-2768] ++ ldrb r3, [r5, #3156] @ zero_extendqisi2 ++ ldrh r4, [r7, #14] ++ strh r3, [r6, #10] @ movhi ++ ldrb r3, [r7, #13] @ zero_extendqisi2 ++ strh r4, [r6, #14] @ movhi ++ strh r3, [r6, #12] @ movhi ++ ldrh r3, [r7, #10] ++ strh r3, [r6, #16] @ movhi ++ ldrb r1, [r7, #12] @ zero_extendqisi2 ++ ldrh r0, [r7, #10] ++ bl __aeabi_idiv ++ strh r0, [r6, #18] @ movhi ++ ldrb r2, [r7, #9] @ zero_extendqisi2 ++ strh r2, [r6, #20] @ movhi ++ ldrh r1, [r7, #10] ++ ldrb r3, [r7, #9] @ zero_extendqisi2 ++ smulbb r3, r3, r1 ++ mov r1, #512 ++ strh r1, [r6, #24] @ movhi ++ ldrb r1, [r5, #37] @ zero_extendqisi2 ++ uxth r3, r3 ++ strh r1, [r6, #26] @ movhi ++ ldrb r1, [r5, #36] @ zero_extendqisi2 ++ strh r3, [r6, #22] @ movhi ++ cmp r1, #1 ++ bne .L1102 ++ lsl r3, r3, #1 ++ lsr r4, r4, #1 ++ lsl r2, r2, #1 ++ strb r9, [r5, #37] ++ strh r3, [r6, #22] @ movhi ++ mov r3, #8 ++ strh r4, [r6, #14] @ movhi ++ strh r2, [r6, #20] @ movhi ++ strh r3, [r6, #26] @ movhi ++.L1102: ++ ldrb r0, [r7, #20] @ zero_extendqisi2 ++ bl FlashBchSel ++ bl ftl_flash_suspend ++ mov r0, #0 ++.L1051: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1067: ++ cmp r3, #220 ++ ldreq r3, .L1149+32 ++ moveq r1, #4096 ++ strheq r1, [r3, #14] @ movhi ++ mvneq r3, #35 ++ beq .L1143 ++.L1069: ++ cmp r3, #211 ++ ldreq r3, .L1149+32 ++ moveq r1, #4096 ++ strheq r1, [r3, #14] @ movhi ++ moveq r3, #2 ++ strbeq r3, [r2, #3421] ++ b .L1068 ++.L1076: ++ ldrb r0, [r4, #-1871] @ zero_extendqisi2 ++ bl FlashSetInterfaceMode ++ ldrb r0, [r4, #-1871] @ zero_extendqisi2 ++ b .L1144 ++.L1083: ++ sub r1, r0, #17 ++ cmp r1, #2 ++ bhi .L1089 ++ ldr r2, .L1149+84 ++ cmp r0, #19 ++ str r2, [r4, #-1792] ++ moveq r2, #15 ++ beq .L1146 ++.L1148: ++ mov r2, #7 ++.L1146: ++ strb r2, [r3] ++ b .L1082 ++.L1089: ++ sub r1, r0, #65 ++ cmp r0, #33 ++ cmpne r1, #1 ++ ldrls r1, .L1149+88 ++ strls r1, [r4, #-1792] ++ movls r1, #4 ++ strbls r1, [r2] ++ bls .L1148 ++.L1091: ++ sub r2, r0, #67 ++ sub r1, r0, #34 ++ uxtb r2, r2 ++ cmp r2, #1 ++ cmphi r1, #1 ++ movls r1, #1 ++ movhi r1, #0 ++ bhi .L1092 ++ ldr r1, .L1149+88 ++ cmp r0, #68 ++ cmpne r0, #35 ++ str r1, [r4, #-1792] ++ movne r1, #7 ++ moveq r1, #17 ++ cmp r2, #1 ++ strb r1, [r3] ++ movls r3, #4 ++ movhi r3, #5 ++ strb r3, [ip] ++ b .L1082 ++.L1092: ++ cmp r0, #49 ++ ldreq r3, .L1149+92 ++ streq r3, [r4, #-1792] ++ beq .L1082 ++ cmp r0, #50 ++ ldreq r3, .L1149+96 ++ streq r1, [r4, #-1860] ++ streq r3, [r4, #-1792] ++ b .L1082 ++.L1104: ++ mvn r0, #1 ++ b .L1051 ++.L1150: ++ .align 2 ++.L1149: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word IDByte ++ .word .LC14 ++ .word .LANCHOR2-2728 ++ .word 1446522928 ++ .word .LANCHOR1 ++ .word .LANCHOR2-2720 ++ .word .LANCHOR1+3408 ++ .word .LANCHOR1+3284 ++ .word .LANCHOR0+52 ++ .word .LANCHOR1+468 ++ .word .LC15 ++ .word .LANCHOR0+3328 ++ .word g_retryMode ++ .word g_maxRegNum ++ .word g_maxRetryCount ++ .word HynixReadRetrial ++ .word .LANCHOR2-2768 ++ .word .LANCHOR0+3332 ++ .word 150000 ++ .word MicronReadRetrial ++ .word ToshibaReadRetrial ++ .word SamsungReadRetrial ++ .word samsung_read_retrial ++ .fnend ++ .size FlashInit, .-FlashInit ++ .align 2 ++ .global FlashPageProgMsbFFData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashPageProgMsbFFData, %function ++FlashPageProgMsbFFData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r6, r0 ++ ldr r5, .L1167 ++ mov r7, r1 ++ mov r4, r2 ++ ldrb r3, [r5, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1152 ++ ldr r3, [r5, #-1860] ++ cmp r3, #0 ++ popne {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1152: ++ ldr r2, .L1167+4 ++ ldr r3, [r2, #48] ++ mov r8, r2 ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r1, r3, #5 ++ cmp r3, #50 ++ cmpne r1, #2 ++ bls .L1153 ++ sub r2, r3, #19 ++ and r2, r2, #239 ++ cmp r2, #0 ++ cmpne r3, #68 ++ popne {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1153: ++ ldr r9, .L1167+8 ++ movw r10, #65535 ++.L1155: ++ ldr r3, [r8, #48] ++ ldrh r3, [r3, #10] ++ cmp r3, r4 ++ bhi .L1156 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1156: ++ lsl r3, r4, #1 ++ ldrh r3, [r9, r3] ++ cmp r3, r10 ++ popne {r4, r5, r6, r7, r8, r9, r10, pc} ++ mov r2, #32768 ++ mov r1, #255 ++ ldr r0, [r5, #-1772] ++ bl ftl_memset ++ ldr r3, [r5, #-1772] ++ add r1, r4, r7 ++ mov r0, r6 ++ add r4, r4, #1 ++ uxth r4, r4 ++ mov r2, r3 ++ bl FlashProgPage ++ b .L1155 ++.L1168: ++ .align 2 ++.L1167: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR0+1108 ++ .fnend ++ .size FlashPageProgMsbFFData, .-FlashPageProgMsbFFData ++ .align 2 ++ .global FlashReadSlc2KPages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadSlc2KPages, %function ++FlashReadSlc2KPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1218 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, r0 ++ ldr r10, .L1218+4 ++ mov r8, #0 ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r9, .L1218+8 ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ str r1, [sp, #16] ++ str r2, [sp, #20] ++ str r3, [sp, #12] ++.L1170: ++ ldr r3, [sp, #16] ++ cmp r8, r3 ++ bne .L1190 ++ mov r0, #0 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1190: ++ ldr r3, [sp, #16] ++ add r2, sp, #28 ++ ldr r1, [sp, #20] ++ mov r0, r4 ++ sub r3, r3, r8 ++ uxtb r3, r3 ++ str r3, [sp] ++ add r3, sp, #24 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r10, #3156] @ zero_extendqisi2 ++ ldr r3, [sp, #24] ++ cmp r2, r3 ++ mvnls r3, #0 ++ strls r3, [r4] ++ bls .L1172 ++ add r3, r10, r3 ++ mov r7, #0 ++ ldrb r6, [r3, #3160] @ zero_extendqisi2 ++ mov r0, r6 ++ bl NandcWaitFlashReady ++ mov r0, r6 ++ bl NandcFlashCs ++.L1173: ++ ldr r1, [sp, #28] ++ mov r0, r6 ++ bl FlashReadCmd ++ mov r0, r6 ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #12] ++ mov r1, #0 ++ ldr r2, [sp, #12] ++ mov r0, r6 ++ str r3, [sp] ++ ldr r3, [r4, #8] ++ bl NandcXferData ++ ldrb r3, [r9, #-1756] @ zero_extendqisi2 ++ mov r5, r0 ++ cmp r3, #0 ++ beq .L1174 ++ mov r0, r6 ++ bl flash_read_ecc ++ cmp r0, #5 ++ movhi r5, #256 ++.L1174: ++ cmp r7, #9 ++ cmnls r5, #1 ++ moveq r3, #1 ++ movne r3, #0 ++ addeq r7, r7, #1 ++ beq .L1173 ++.L1175: ++ cmp r7, #0 ++ mov r7, r3 ++ movne r5, #256 ++.L1177: ++ ldr r3, [r10, #40] ++ mov r0, r6 ++ ldr r1, [sp, #28] ++ add r1, r1, r3 ++ bl FlashReadCmd ++ mov r0, r6 ++ bl NandcWaitFlashReady ++ ldr r3, [r4, #8] ++ mov r1, #0 ++ ldr r2, [r4, #12] ++ mov r0, r6 ++ cmp r3, #0 ++ addne r3, r3, #2048 ++ cmp r2, #0 ++ addne r2, r2, #8 ++ str r2, [sp] ++ ldr r2, [sp, #12] ++ bl NandcXferData ++ ldrb r2, [r9, #-1756] @ zero_extendqisi2 ++ mov fp, r0 ++ cmp r2, #0 ++ beq .L1180 ++ mov r0, r6 ++ bl flash_read_ecc ++ cmp r0, #5 ++ movhi fp, #256 ++.L1180: ++ cmp r7, #9 ++ cmnls fp, #1 ++ addeq r7, r7, #1 ++ beq .L1177 ++.L1181: ++ cmp r7, #0 ++ mov r0, r6 ++ movne fp, #256 ++ bl NandcFlashDeCs ++ ldrb r3, [r9, #-2739] @ zero_extendqisi2 ++ cmp r5, fp ++ movcc r5, fp ++ add r3, r3, r3, lsl #1 ++ cmp r5, r3, asr #2 ++ bls .L1183 ++ cmn r5, #1 ++ movne r5, #256 ++.L1183: ++ cmp r5, #256 ++ cmnne r5, #1 ++ movne r3, #0 ++ streq r5, [r4] ++ strne r3, [r4] ++ ldr r3, [r4, #12] ++ cmp r3, #0 ++ beq .L1186 ++ ldr r2, [r3, #12] ++ cmn r2, #1 ++ bne .L1186 ++ ldr r2, [r3, #8] ++ cmn r2, #1 ++ bne .L1186 ++ ldr r3, [r3] ++ cmn r3, #1 ++ strne r2, [r4] ++.L1186: ++ ldr r3, [r4] ++ cmn r3, #1 ++ bne .L1172 ++ ldr r1, [r4, #4] ++ ldrb r2, [r9, #-2739] @ zero_extendqisi2 ++ ldr r0, .L1218+12 ++ bl rk_printk ++ ldr r1, [r4, #8] ++ cmp r1, #0 ++ beq .L1188 ++ mov r3, #8 ++ mov r2, #4 ++ ldr r0, .L1218+16 ++ bl rknand_print_hex ++.L1188: ++ ldr r1, [r4, #12] ++ cmp r1, #0 ++ beq .L1172 ++ mov r3, #4 ++ ldr r0, .L1218+20 ++ mov r2, r3 ++ bl rknand_print_hex ++.L1172: ++ add r8, r8, #1 ++ add r4, r4, #36 ++ b .L1170 ++.L1219: ++ .align 2 ++.L1218: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC16 ++ .word .LC17 ++ .word .LC18 ++ .fnend ++ .size FlashReadSlc2KPages, .-FlashReadSlc2KPages ++ .align 2 ++ .global FlashReadPages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadPages, %function ++FlashReadPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #52 ++ sub sp, sp, #52 ++ ldr r9, .L1291 ++ str r1, [sp, #24] ++ ldrb r10, [r9, #36] @ zero_extendqisi2 ++ str r2, [sp, #28] ++ cmp r10, #0 ++ bne .L1221 ++ ldr r3, .L1291+4 ++ mov fp, r0 ++ ldr r6, .L1291+8 ++ str r10, [sp, #8] ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ str r3, [sp, #20] ++ ldrb r3, [r9, #44] @ zero_extendqisi2 ++ str r3, [sp, #36] ++.L1222: ++ ldr r3, [sp, #8] ++ ldr r2, [sp, #24] ++ cmp r3, r2 ++ bcc .L1255 ++ mov r0, #0 ++ b .L1220 ++.L1221: ++ bl FlashReadSlc2KPages ++.L1220: ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1255: ++ ldr r2, [sp, #8] ++ mov r3, #36 ++ ldr r1, [sp, #28] ++ mul r3, r3, r2 ++ add r8, fp, r3 ++ str r3, [sp, #12] ++ ldr r3, [sp, #24] ++ mov r0, r8 ++ ldr r7, [r8, #4] ++ sub r3, r3, r2 ++ add r2, sp, #44 ++ uxtb r3, r3 ++ str r3, [sp] ++ add r3, sp, #40 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r9, #3156] @ zero_extendqisi2 ++ mov r5, r0 ++ ldr r3, [sp, #40] ++ cmp r2, r3 ++ ldrls r2, [sp, #12] ++ mvnls r3, #0 ++ strls r3, [fp, r2] ++ bls .L1225 ++ add r3, r9, r3 ++ ldrb r4, [r3, #3160] @ zero_extendqisi2 ++ ldrb r3, [r6, #-1755] @ zero_extendqisi2 ++ mov r0, r4 ++ cmp r3, #0 ++ moveq r5, #0 ++ bl NandcWaitFlashReady ++ ldr r3, [r9, #48] ++ ldrb r2, [r3, #19] @ zero_extendqisi2 ++ sub r3, r2, #1 ++ cmp r3, #7 ++ bhi .L1227 ++ sub r2, r2, #7 ++ add r1, r6, r4 ++ cmp r2, #1 ++ add r2, r6, r4 ++ ldrb r3, [r1, #-2716] @ zero_extendqisi2 ++ ldrb r2, [r2, #-1876] @ zero_extendqisi2 ++ ldrbls r3, [r1, #-2708] @ zero_extendqisi2 ++ cmp r2, r3 ++ beq .L1227 ++ ldr r2, .L1291+12 ++ mov r0, r4 ++ ldrb r1, [r6, #-2727] @ zero_extendqisi2 ++ bl HynixSetRRPara ++.L1227: ++ mov r0, r4 ++ lsr r7, r7, #31 ++ bl NandcFlashCs ++ ldr r3, [sp, #28] ++ mov r0, r4 ++ cmp r3, #1 ++ orreq r7, r7, #1 ++ cmp r7, #0 ++ str r7, [sp, #16] ++ beq .L1229 ++ ldrb r3, [r6, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1229 ++ bl flash_enter_slc_mode ++.L1235: ++ ldr r1, [sp, #44] ++ cmn r1, #1 ++ cmpeq r4, #255 ++ moveq r3, #0 ++ movne r3, #1 ++ moveq r5, r3 ++ beq .L1231 ++ cmp r5, #0 ++ beq .L1232 ++ ldr r2, [r9, #40] ++ mov r0, r4 ++ add r2, r1, r2 ++ bl FlashReadDpCmd ++.L1233: ++ mov r0, r4 ++ bl NandcWaitFlashReady ++ cmp r5, #0 ++ beq .L1231 ++ ldr r1, [sp, #44] ++ mov r0, r4 ++ bl FlashReadDpDataOutCmd ++.L1231: ++ ldr r3, [r8, #12] ++ mov r1, #0 ++ ldr r2, [sp, #20] ++ mov r0, r4 ++ str r3, [sp] ++ ldr r3, [r8, #8] ++ bl NandcXferData ++ ldrb r3, [r9, #44] @ zero_extendqisi2 ++ mov r7, r0 ++ adds r2, r3, #0 ++ movne r2, #1 ++ cmn r0, #1 ++ movne r2, #0 ++ cmp r2, #0 ++ str r2, [sp, #32] ++ beq .L1234 ++ mov r3, #0 ++ mov r5, #0 ++ strb r3, [r9, #44] ++ b .L1235 ++.L1229: ++ bl flash_exit_slc_mode ++ b .L1235 ++.L1232: ++ mov r0, r4 ++ bl FlashReadCmd ++ b .L1233 ++.L1234: ++ cmp r5, #0 ++ beq .L1236 ++ ldr r3, [r9, #40] ++ mov r0, r4 ++ ldr r1, [sp, #44] ++ add r1, r1, r3 ++ bl FlashReadDpDataOutCmd ++ ldr r3, [sp, #12] ++ mov r0, r4 ++ ldr r1, [sp, #32] ++ add r3, r3, #36 ++ add r3, fp, r3 ++ ldr r2, [r3, #12] ++ str r2, [sp] ++ ldr r2, [sp, #20] ++ ldr r3, [r3, #8] ++ bl NandcXferData ++ cmn r0, #1 ++ mov r10, r0 ++ moveq r5, #0 ++.L1236: ++ mov r0, r4 ++ bl NandcFlashDeCs ++ ldrb r3, [sp, #36] @ zero_extendqisi2 ++ cmn r7, #1 ++ strb r3, [r9, #44] ++ bne .L1237 ++ ldrb r3, [r6, #-1856] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1238 ++.L1242: ++ ldr r5, [r6, #-1792] ++ cmp r5, #0 ++ bne .L1239 ++ ldr r3, [r8, #12] ++ mov r0, r4 ++ ldr r2, [r8, #8] ++ ldr r1, [sp, #44] ++ bl FlashReadRawPage ++ mov r7, r0 ++.L1243: ++ cmp r7, #256 ++ cmnne r7, #1 ++ ldreq r3, [sp, #12] ++ movne r3, #0 ++ ldrne r2, [sp, #12] ++ streq r7, [fp, r3] ++ strne r3, [fp, r2] ++ ldr r3, [sp, #12] ++ ldr r3, [fp, r3] ++ cmn r3, #1 ++ bne .L1250 ++ ldr r1, [r8, #4] ++ ldrb r2, [r6, #-2739] @ zero_extendqisi2 ++ ldr r0, .L1291+16 ++ bl rk_printk ++ ldr r1, [r8, #12] ++ cmp r1, #0 ++ beq .L1250 ++ mov r3, #4 ++ ldr r0, .L1291+20 ++ mov r2, r3 ++ bl rknand_print_hex ++.L1250: ++ cmp r5, #0 ++ beq .L1252 ++ ldrb r3, [r6, #-2739] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r10, r3, asr #2 ++ bls .L1253 ++ ldr r3, [r6, #-1792] ++ cmp r3, #0 ++ moveq r10, #256 ++.L1253: ++ ldr r3, [sp, #12] ++ cmp r10, #256 ++ cmnne r10, #1 ++ movne r2, #0 ++ add r3, r3, #36 ++ streq r10, [fp, r3] ++ strne r2, [fp, r3] ++.L1252: ++ ldr r3, [sp, #8] ++ add r3, r3, r5 ++ str r3, [sp, #8] ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ beq .L1225 ++ ldrb r3, [r6, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1225 ++ mov r0, r4 ++ bl flash_exit_slc_mode ++.L1225: ++ ldr r3, [sp, #8] ++ add r3, r3, #1 ++ str r3, [sp, #8] ++ b .L1222 ++.L1238: ++ ldr r3, [r6, #-2804] ++ mov r0, r4 ++ ldr r1, [sp, #44] ++ ldr r5, [r3, #304] ++ mov r3, #1 ++ str r3, [sp] ++ ldr r3, [r8, #12] ++ ldr r2, [r8, #8] ++ bl FlashDdrTunningRead ++ cmn r0, #1 ++ mov r7, r0 ++ beq .L1241 ++ ldrb r3, [r6, #-2739] @ zero_extendqisi2 ++ cmp r0, r3, lsr #1 ++ bls .L1258 ++.L1241: ++ ubfx r0, r5, #8, #8 ++ bl NandcSetDdrPara ++ cmn r7, #1 ++ beq .L1242 ++.L1258: ++ mov r5, #0 ++.L1237: ++ ldrb r3, [r6, #-2739] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r7, r3, asr #2 ++ bls .L1243 ++ ldr r3, [r6, #-1792] ++ cmp r3, #0 ++ moveq r7, #256 ++ b .L1243 ++.L1239: ++ ldr r3, [r8, #12] ++ mov r0, r4 ++ ldr r2, [r8, #8] ++ ldr r1, [sp, #44] ++ blx r5 ++ cmn r0, #1 ++ mov r7, r0 ++ bne .L1260 ++ ldr r3, [r9, #48] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ cmp r3, #7 ++ bhi .L1244 ++ mov r3, #0 ++ ldr r2, .L1291+12 ++ ldrb r1, [r6, #-2727] @ zero_extendqisi2 ++ mov r0, r4 ++ bl HynixSetRRPara ++.L1244: ++ ldr r3, [r8, #12] ++ mov r0, r4 ++ ldr r2, [r8, #8] ++ ldr r1, [sp, #44] ++ bl FlashReadRawPage ++ ldrb r2, [r6, #-2739] @ zero_extendqisi2 ++ mov r7, r0 ++ mov r3, r0 ++ ldr r1, [r8, #4] ++ ldr r0, .L1291+24 ++ bl rk_printk ++ cmn r7, #1 ++ bne .L1260 ++ ldrb r5, [r6, #-2740] @ zero_extendqisi2 ++ cmp r5, #0 ++ beq .L1243 ++ ldr r3, [sp, #16] ++ mov r0, r4 ++ cmp r3, #0 ++ beq .L1245 ++ bl flash_enter_slc_mode ++.L1246: ++ ldr r5, [r6, #-1792] ++ mov r0, r4 ++ ldr r3, [r8, #12] ++ ldr r2, [r8, #8] ++ ldr r1, [sp, #44] ++ blx r5 ++ mov r7, r0 ++.L1260: ++ mov r5, #0 ++ b .L1243 ++.L1245: ++ bl flash_exit_slc_mode ++ b .L1246 ++.L1292: ++ .align 2 ++.L1291: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .word .LANCHOR2 ++ .word .LANCHOR2-2724 ++ .word .LC16 ++ .word .LC18 ++ .word .LC19 ++ .fnend ++ .size FlashReadPages, .-FlashReadPages ++ .align 2 ++ .global FlashLoadFactorBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashLoadFactorBbt, %function ++FlashLoadFactorBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r2, #16 ++ ldr r8, .L1305 ++ .pad #60 ++ sub sp, sp, #60 ++ mov r1, #0 ++ mov r5, #0 ++ ldr fp, .L1305+4 ++ mov r9, r5 ++ sub r3, r8, #2768 ++ sub r4, r8, #1744 ++ ldrh r6, [r3, #14] ++ sub r0, r4, #10 ++ ldrh r3, [r3, #12] ++ mvn r10, #0 ++ smulbb r6, r6, r3 ++ bl ftl_memset ++ uxth r6, r6 ++ ldr r3, [r8, #-1768] ++ str r5, [sp, #28] ++ str r4, [sp, #8] ++ str r3, [sp, #32] ++.L1294: ++ ldrb r3, [fp, #3156] @ zero_extendqisi2 ++ uxtb r7, r5 ++ cmp r3, r7 ++ bhi .L1300 ++ mov r0, r10 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1300: ++ sub r4, r6, #1 ++ mul r3, r7, r6 ++ uxth r4, r4 ++ sub r2, r6, #12 ++ str r2, [sp, #4] ++.L1295: ++ ldr r2, [sp, #4] ++ cmp r4, r2 ++ ble .L1297 ++ add r2, r4, r3 ++ add r0, sp, #20 ++ lsl r2, r2, #10 ++ str r3, [sp, #12] ++ str r2, [sp, #24] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [sp, #20] ++ ldr r3, [sp, #12] ++ cmn r2, #1 ++ beq .L1296 ++ ldr r2, [r8, #-1768] ++ ldrh r1, [r2] ++ movw r2, #61664 ++ cmp r1, r2 ++ bne .L1296 ++ mov r1, r7 ++ mov r2, r4 ++ ldr r0, .L1305+8 ++ add r9, r9, #1 ++ bl rk_printk ++ ldr r3, [sp, #8] ++ uxth r9, r9 ++ add r7, r3, r7, lsl #1 ++ strh r4, [r7, #-10] @ movhi ++.L1297: ++ ldr r3, .L1305+4 ++ add r5, r5, #1 ++ ldrb r3, [r3, #3156] @ zero_extendqisi2 ++ cmp r3, r9 ++ moveq r10, #0 ++ b .L1294 ++.L1296: ++ sub r4, r4, #1 ++ uxth r4, r4 ++ b .L1295 ++.L1306: ++ .align 2 ++.L1305: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC20 ++ .fnend ++ .size FlashLoadFactorBbt, .-FlashLoadFactorBbt ++ .align 2 ++ .global FlashReadFacBbtData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashReadFacBbtData, %function ++FlashReadFacBbtData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r8, r2 ++ ldr r5, .L1320 ++ .pad #40 ++ sub sp, sp, #40 ++ mov r6, r0 ++ mov r9, r1 ++ sub r2, r5, #2768 ++ ldrh r3, [r2, #14] ++ ldrh r2, [r2, #12] ++ smulbb r3, r3, r2 ++ ldr r2, [r5, #-1864] ++ uxth r3, r3 ++ str r2, [sp, #12] ++ ldr r2, [r5, #-1768] ++ sub r7, r3, #1 ++ mul r10, r1, r3 ++ uxth r7, r7 ++ sub r4, r3, #16 ++ str r2, [sp, #16] ++.L1308: ++ cmp r7, r4 ++ mvnle r0, #0 ++ ble .L1307 ++.L1314: ++ add r3, r7, r10 ++ mov r2, #1 ++ lsl r3, r3, #10 ++ mov r1, r2 ++ add r0, sp, #4 ++ str r3, [sp, #8] ++ bl FlashReadPages ++ ldr r3, [sp, #4] ++ cmn r3, #1 ++ beq .L1309 ++ ldr r3, [r5, #-1768] ++ ldrh r2, [r3] ++ movw r3, #61664 ++ cmp r2, r3 ++ bne .L1309 ++ cmp r6, #0 ++ moveq r0, r6 ++ beq .L1307 ++ cmp r9, #0 ++ moveq r1, r9 ++ moveq lr, #1 ++ beq .L1312 ++.L1311: ++ mov r2, r8 ++ ldr r1, [r5, #-1864] ++ mov r0, r6 ++ bl ftl_memcpy ++ mov r3, #4 ++ ldr r0, .L1320+4 ++ mov r2, r3 ++ mov r1, r6 ++ bl rknand_print_hex ++ mov r0, #0 ++.L1307: ++ add sp, sp, #40 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1313: ++ ldr r0, [r5, #-1864] ++ lsr ip, r3, #5 ++ and r3, r3, #31 ++ ldr r2, [r0, ip, lsl #2] ++ orr r3, r2, lr, lsl r3 ++ str r3, [r0, ip, lsl #2] ++.L1312: ++ ldr r0, [r5, #-1780] ++ uxth r3, r1 ++ add r1, r1, #1 ++ cmp r3, r0 ++ bcc .L1313 ++ b .L1311 ++.L1309: ++ sub r7, r7, #1 ++ uxth r7, r7 ++ b .L1308 ++.L1321: ++ .align 2 ++.L1320: ++ .word .LANCHOR2 ++ .word .LC21 ++ .fnend ++ .size FlashReadFacBbtData, .-FlashReadFacBbtData ++ .align 2 ++ .global FlashGetBadBlockList ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashGetBadBlockList, %function ++FlashGetBadBlockList: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1333 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, r0 ++ ldr r6, .L1333+4 ++ ldr r3, [r3, #48] ++ ldr r0, [r6, #-1772] ++ ldrb r4, [r3, #13] @ zero_extendqisi2 ++ ldrh r3, [r3, #14] ++ smulbb r4, r4, r3 ++ uxth r4, r4 ++ add r2, r4, #7 ++ asr r2, r2, #3 ++ bl FlashReadFacBbtData ++ cmn r0, #1 ++ bne .L1323 ++.L1327: ++ mov r3, #0 ++.L1324: ++ lsl r3, r3, #1 ++ mvn r2, #0 ++ mov r0, #0 ++ strh r2, [r5, r3] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L1323: ++ mov r2, #0 ++ lsr lr, r4, #4 ++ mov r3, r2 ++ sub r4, r4, #1 ++ mov r7, #1 ++.L1325: ++ uxth r1, r2 ++ cmp r1, r4 ++ bge .L1324 ++ ldr r8, [r6, #-1772] ++ lsr ip, r1, #5 ++ and r0, r1, #31 ++ add r2, r2, #1 ++ ldr ip, [r8, ip, lsl #2] ++ ands r0, ip, r7, lsl r0 ++ addne r0, r3, #1 ++ lslne r3, r3, #1 ++ strhne r1, [r5, r3] @ movhi ++ uxthne r3, r0 ++ cmp r3, lr ++ bcc .L1325 ++ b .L1327 ++.L1334: ++ .align 2 ++.L1333: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size FlashGetBadBlockList, .-FlashGetBadBlockList ++ .align 2 ++ .global FlashProgSlc2KPages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgSlc2KPages, %function ++FlashProgSlc2KPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1363 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r1 ++ ldr r9, .L1363+4 ++ .pad #60 ++ sub sp, sp, #60 ++ mov r8, r2 ++ mov r4, r0 ++ ldrb fp, [r3, #477] @ zero_extendqisi2 ++ mov r6, r0 ++ mov r7, #0 ++.L1336: ++ cmp r7, r10 ++ bne .L1342 ++ ldr r5, .L1363+8 ++ mov r6, #0 ++ ldr r9, .L1363+12 ++.L1343: ++ cmp r7, r6 ++ bne .L1350 ++ mov r0, #0 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1342: ++ sub r3, r10, r7 ++ add r2, sp, #12 ++ uxtb r3, r3 ++ mov r1, r8 ++ mov r0, r6 ++ str r3, [sp] ++ add r3, sp, #16 ++ bl LogAddr2PhyAddr ++ ldrb r2, [r9, #3156] @ zero_extendqisi2 ++ ldr r3, [sp, #16] ++ cmp r2, r3 ++ mvnls r3, #0 ++ strls r3, [r6] ++ bls .L1338 ++ add r3, r9, r3 ++ ldrb r5, [r3, #3160] @ zero_extendqisi2 ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ bl NandcFlashCs ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashProgFirstCmd ++ ldr r3, [r6, #12] ++ mov r2, fp ++ mov r1, #1 ++ mov r0, r5 ++ str r3, [sp] ++ ldr r3, [r6, #8] ++ bl NandcXferData ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashProgSecondCmd ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashReadStatus ++ sbfx r0, r0, #0, #1 ++ ldr r1, [sp, #12] ++ str r0, [r6] ++ mov r0, r5 ++ ldr r3, [r9, #40] ++ add r1, r1, r3 ++ bl FlashProgFirstCmd ++ ldr r3, [r6, #8] ++ mov r1, #1 ++ ldr r2, [r6, #12] ++ mov r0, r5 ++ cmp r3, #0 ++ addne r3, r3, #2048 ++ cmp r2, #0 ++ addne r2, r2, #8 ++ str r2, [sp] ++ mov r2, fp ++ bl NandcXferData ++ ldr r3, [r9, #40] ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ add r1, r1, r3 ++ bl FlashProgSecondCmd ++ mov r0, r5 ++ bl NandcWaitFlashReady ++ mov r0, r5 ++ ldr r1, [sp, #12] ++ bl FlashReadStatus ++ tst r0, #1 ++ mov r0, r5 ++ mvnne r3, #0 ++ strne r3, [r6] ++ bl NandcFlashDeCs ++.L1338: ++ add r7, r7, #1 ++ add r6, r6, #36 ++ b .L1336 ++.L1350: ++ ldr r3, [r4] ++ cmn r3, #1 ++ bne .L1344 ++ ldr r1, [r4, #4] ++ ldr r0, .L1363+16 ++ bl rk_printk ++.L1345: ++ add r6, r6, #1 ++ add r4, r4, #36 ++ b .L1343 ++.L1344: ++ sub r3, r7, r6 ++ add r2, sp, #12 ++ uxtb r3, r3 ++ mov r1, r8 ++ mov r0, r4 ++ str r3, [sp] ++ add r3, sp, #16 ++ bl LogAddr2PhyAddr ++ ldr r2, [r5, #-1764] ++ mov r3, #0 ++ mov lr, r4 ++ add ip, sp, #20 ++ str r3, [r2] ++ ldr r2, [r5, #-1760] ++ str r3, [r2] ++ ldmia lr!, {r0, r1, r2, r3} ++ stmia ip!, {r0, r1, r2, r3} ++ ldmia lr!, {r0, r1, r2, r3} ++ stmia ip!, {r0, r1, r2, r3} ++ mov r2, r8 ++ ldr r3, [lr] ++ mov r1, #1 ++ add r0, sp, #20 ++ str r3, [ip] ++ ldr r3, [r5, #-1764] ++ str r3, [sp, #28] ++ ldr r3, [r5, #-1760] ++ str r3, [sp, #32] ++ bl FlashReadPages ++ ldr r10, [sp, #20] ++ cmn r10, #1 ++ bne .L1346 ++ ldr r1, [r4, #4] ++ ldr r0, .L1363+20 ++ bl rk_printk ++ str r10, [r4] ++.L1346: ++ ldr r10, [sp, #20] ++ cmp r10, #256 ++ bne .L1347 ++ ldr r1, [r4, #4] ++ ldr r0, .L1363+24 ++ bl rk_printk ++ str r10, [r4] ++.L1347: ++ ldr r3, [r4, #12] ++ cmp r3, #0 ++ beq .L1348 ++ ldr r2, [r3] ++ ldr r3, [r5, #-1760] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L1348 ++ ldr r1, [r4, #4] ++ ldr r0, .L1363+28 ++ bl rk_printk ++ mvn r3, #0 ++ str r3, [r4] ++.L1348: ++ ldr r3, [r4, #8] ++ cmp r3, #0 ++ beq .L1345 ++ ldr r2, [r3] ++ ldr r3, [r5, #-1764] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L1345 ++ ldr r1, [r4, #4] ++ mov r0, r9 ++ bl rk_printk ++ mvn r3, #0 ++ str r3, [r4] ++ b .L1345 ++.L1364: ++ .align 2 ++.L1363: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC26 ++ .word .LC22 ++ .word .LC23 ++ .word .LC24 ++ .word .LC25 ++ .fnend ++ .size FlashProgSlc2KPages, .-FlashProgSlc2KPages ++ .align 2 ++ .global FlashProgPages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashProgPages, %function ++FlashProgPages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 64 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #76 ++ sub sp, sp, #76 ++ ldr r6, .L1418 ++ str r1, [sp, #8] ++ ldr ip, [r6, #48] ++ ldrb r8, [r6, #36] @ zero_extendqisi2 ++ str r3, [sp, #20] ++ ldrb ip, [ip, #19] @ zero_extendqisi2 ++ cmp r8, #0 ++ str ip, [sp, #16] ++ bne .L1366 ++ ldr r3, .L1418+4 ++ mov r4, r0 ++ mov r9, r2 ++ ldrb r3, [r3, #477] @ zero_extendqisi2 ++ str r3, [sp, #12] ++.L1367: ++ ldr r3, [sp, #8] ++ cmp r8, r3 ++ bcc .L1380 ++ ldr r7, .L1418+8 ++ mov r5, #0 ++ ldr r8, .L1418+12 ++.L1381: ++ ldrb r3, [r6, #3156] @ zero_extendqisi2 ++ cmp r5, r3 ++ bcc .L1383 ++ ldr r3, [sp, #20] ++ cmp r3, #0 ++ bne .L1384 ++.L1392: ++ mov r0, #0 ++ b .L1365 ++.L1366: ++ bl FlashProgSlc2KPages ++.L1365: ++ add sp, sp, #76 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1380: ++ ldr r3, [sp, #8] ++ mov r7, #36 ++ mul r7, r7, r8 ++ add r2, sp, #28 ++ mov r1, r9 ++ sub r3, r3, r8 ++ uxtb r3, r3 ++ add fp, r4, r7 ++ str r3, [sp] ++ mov r0, fp ++ add r3, sp, #32 ++ bl LogAddr2PhyAddr ++ ldrb r3, [r6, #3156] @ zero_extendqisi2 ++ mov r10, r0 ++ ldr r0, [sp, #32] ++ cmp r3, r0 ++ mvnls r3, #0 ++ strls r3, [r4, r7] ++ bls .L1370 ++ ldr r3, .L1418+8 ++ ldrb r3, [r3, #-1870] @ zero_extendqisi2 ++ cmp r3, #0 ++ add r3, r6, r0, lsl #4 ++ moveq r10, #0 ++ ldr r3, [r3, #3208] ++ cmp r3, #0 ++ beq .L1372 ++ uxtb r0, r0 ++ bl FlashWaitCmdDone ++.L1372: ++ ldr r3, [sp, #32] ++ mov r1, #0 ++ cmp r10, #0 ++ add r2, r6, r3, lsl #4 ++ str r1, [r2, #3212] ++ ldr r1, [sp, #28] ++ str fp, [r2, #3208] ++ str r1, [r2, #3204] ++ addne r1, r7, #36 ++ addne r1, r4, r1 ++ strne r1, [r2, #3212] ++ add r2, r6, r3 ++ ldrb r5, [r2, #3160] @ zero_extendqisi2 ++ add r3, r6, r3, lsl #4 ++ strb r5, [r3, #3200] ++ mov r0, r5 ++ ldrb r3, [r6, #3156] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L1374 ++ bl NandcWaitFlashReady ++.L1375: ++ ldr r3, [sp, #16] ++ sub r3, r3, #1 ++ cmp r3, #7 ++ bhi .L1376 ++ ldr r1, .L1418+8 ++ add r3, r1, r5 ++ ldrb r3, [r3, #-1876] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1376 ++ mov r3, #0 ++ ldr r2, .L1418+16 ++ ldrb r1, [r1, #-2727] @ zero_extendqisi2 ++ mov r0, r5 ++ bl HynixSetRRPara ++.L1376: ++ mov r0, r5 ++ bl NandcFlashCs ++ cmp r9, #1 ++ mov r0, r5 ++ bne .L1377 ++ ldr r3, .L1418+8 ++ ldrb r3, [r3, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1377 ++ bl flash_enter_slc_mode ++.L1378: ++ ldr r1, [sp, #28] ++ mov r0, r5 ++ bl FlashProgFirstCmd ++ ldr r3, [fp, #12] ++ mov r1, #1 ++ ldr r2, [sp, #12] ++ mov r0, r5 ++ str r3, [sp] ++ ldr r3, [fp, #8] ++ bl NandcXferData ++ cmp r10, #0 ++ beq .L1379 ++ ldr r1, [sp, #28] ++ mov r0, r5 ++ bl FlashProgDpFirstCmd ++ ldr r3, [sp, #32] ++ mov r0, r5 ++ ldr r1, [sp, #28] ++ add r7, r7, #36 ++ add r7, r4, r7 ++ add r3, r6, r3, lsl #2 ++ ldr r2, [r3, #3168] ++ adds r2, r2, #0 ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ ldr r3, [r6, #40] ++ mov r0, r5 ++ ldr r1, [sp, #28] ++ add r1, r1, r3 ++ bl FlashProgDpSecondCmd ++ ldr r3, [r7, #12] ++ mov r1, #1 ++ ldr r2, [sp, #12] ++ mov r0, r5 ++ str r3, [sp] ++ ldr r3, [r7, #8] ++ bl NandcXferData ++.L1379: ++ ldr r1, [sp, #28] ++ mov r0, r5 ++ add r8, r8, r10 ++ bl FlashProgSecondCmd ++ mov r0, r5 ++ bl NandcFlashDeCs ++.L1370: ++ add r8, r8, #1 ++ b .L1367 ++.L1374: ++ bl NandcFlashCs ++ ldr r3, [sp, #32] ++ mov r0, r5 ++ ldr r1, [sp, #28] ++ add r3, r6, r3, lsl #2 ++ ldr r2, [r3, #3168] ++ adds r2, r2, #0 ++ movne r2, #1 ++ bl FlashWaitReadyEN ++ mov r0, r5 ++ bl NandcFlashDeCs ++ b .L1375 ++.L1377: ++ bl flash_exit_slc_mode ++ b .L1378 ++.L1383: ++ uxtb r0, r5 ++ bl FlashWaitCmdDone ++ cmp r9, #1 ++ bne .L1382 ++ ldrb r3, [r7, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1382 ++ ldrb r0, [r8, r5, lsl #4] @ zero_extendqisi2 ++ bl flash_exit_slc_mode ++.L1382: ++ add r5, r5, #1 ++ b .L1381 ++.L1384: ++ ldr r5, .L1418+8 ++ mov r6, #0 ++ ldr r7, .L1418+20 ++.L1385: ++ ldr r3, [sp, #8] ++ cmp r6, r3 ++ beq .L1392 ++ ldr r3, [r4] ++ cmn r3, #1 ++ bne .L1386 ++ ldr r1, [r4, #4] ++ ldr r0, .L1418+24 ++ bl rk_printk ++.L1387: ++ add r6, r6, #1 ++ add r4, r4, #36 ++ b .L1385 ++.L1386: ++ ldr r3, [sp, #8] ++ add r2, sp, #28 ++ mov r1, r9 ++ mov r0, r4 ++ sub r3, r3, r6 ++ uxtb r3, r3 ++ str r3, [sp] ++ add r3, sp, #32 ++ bl LogAddr2PhyAddr ++ ldr r2, [r5, #-1764] ++ mov r3, #0 ++ mov lr, r4 ++ add ip, sp, #36 ++ str r3, [r2] ++ ldr r2, [r5, #-1760] ++ str r3, [r2] ++ ldmia lr!, {r0, r1, r2, r3} ++ stmia ip!, {r0, r1, r2, r3} ++ ldmia lr!, {r0, r1, r2, r3} ++ stmia ip!, {r0, r1, r2, r3} ++ mov r2, r9 ++ ldr r3, [lr] ++ mov r1, #1 ++ add r0, sp, #36 ++ str r3, [ip] ++ ldr r3, [r5, #-1764] ++ str r3, [sp, #44] ++ ldr r3, [r5, #-1760] ++ str r3, [sp, #48] ++ bl FlashReadPages ++ ldr r8, [sp, #36] ++ cmn r8, #1 ++ bne .L1388 ++ ldr r1, [r4, #4] ++ ldr r0, .L1418+28 ++ bl rk_printk ++ str r8, [r4] ++.L1388: ++ ldr r3, [r4, #12] ++ cmp r3, #0 ++ beq .L1389 ++ ldr r2, [r3] ++ ldr r3, [r5, #-1760] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L1389 ++ ldr r1, [r4, #4] ++ ldr r0, .L1418+32 ++ bl rk_printk ++ mvn r3, #0 ++ str r3, [r4] ++.L1389: ++ ldr r3, [r4, #8] ++ cmp r3, #0 ++ beq .L1387 ++ ldr r2, [r3] ++ ldr r3, [r5, #-1764] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L1387 ++ ldr r1, [r4, #4] ++ mov r0, r7 ++ bl rk_printk ++ mvn r3, #0 ++ str r3, [r4] ++ b .L1387 ++.L1419: ++ .align 2 ++.L1418: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .word .LANCHOR2 ++ .word .LANCHOR0+3200 ++ .word .LANCHOR2-2724 ++ .word .LC26 ++ .word .LC22 ++ .word .LC23 ++ .word .LC25 ++ .fnend ++ .size FlashProgPages, .-FlashProgPages ++ .align 2 ++ .global FlashTestBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashTestBlk, %function ++FlashTestBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 104 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #108 ++ sub sp, sp, #108 ++ ldr r5, .L1424 ++ ldr r3, [r5, #-1780] ++ cmp r0, r3 ++ movcc r4, #0 ++ bcc .L1420 ++ ldr r3, [r5, #-1772] ++ mov r4, r0 ++ mov r2, #32 ++ add r0, sp, #40 ++ mov r1, #165 ++ str r0, [sp, #16] ++ str r3, [sp, #12] ++ bl ftl_memset ++ mov r2, #8 ++ mov r1, #90 ++ ldr r0, [r5, #-1772] ++ bl ftl_memset ++ lsl r0, r4, #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r0, [sp, #8] ++ add r0, sp, #4 ++ bl FlashEraseBlocks ++ mov r3, #1 ++ add r0, sp, #4 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldr r4, [sp, #4] ++ mov r2, #1 ++ mov r1, #0 ++ add r0, sp, #4 ++ adds r4, r4, #0 ++ movne r4, #1 ++ rsb r4, r4, #0 ++ bl FlashEraseBlocks ++.L1420: ++ mov r0, r4 ++ add sp, sp, #108 ++ @ sp needed ++ pop {r4, r5, pc} ++.L1425: ++ .align 2 ++.L1424: ++ .word .LANCHOR2 ++ .fnend ++ .size FlashTestBlk, .-FlashTestBlk ++ .align 2 ++ .global FlashMakeFactorBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashMakeFactorBbt, %function ++FlashMakeFactorBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1477 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r0, .L1477+4 ++ sub r1, r3, #2768 ++ mov r4, r3 ++ ldr r2, [r3, #-1768] ++ str r2, [sp, #20] ++ ldrh r2, [r1, #14] ++ ldrh r1, [r1, #12] ++ smulbb r2, r2, r1 ++ uxth r2, r2 ++ str r2, [sp] ++ ldr r2, .L1477+8 ++ ldr r1, [r2, #48] ++ ldrb r1, [r1, #24] @ zero_extendqisi2 ++ str r1, [sp, #24] ++ ldrh r1, [r2, #40] ++ ldrb r2, [r2, #36] @ zero_extendqisi2 ++ str r1, [sp, #16] ++ cmp r2, #1 ++ moveq r3, r1 ++ mov r1, #1 ++ lsleq r3, r3, #1 ++ uxtheq r3, r3 ++ streq r3, [sp, #16] ++ bl rk_printk ++ ldr r0, [r4, #-1768] ++ mov r2, #4096 ++ mov r1, #0 ++ ldr r4, .L1477 ++ bl ftl_memset ++ ldr r3, [sp] ++ lsr r3, r3, #4 ++ str r3, [sp, #28] ++ mov r3, #0 ++ str r3, [sp, #8] ++ sub r3, r4, #1744 ++ sub r3, r3, #10 ++ str r3, [sp, #32] ++.L1428: ++ ldr r5, .L1477+8 ++ ldrb r7, [sp, #8] @ zero_extendqisi2 ++ ldrb r3, [r5, #3156] @ zero_extendqisi2 ++ cmp r3, r7 ++ bhi .L1455 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1455: ++ ldr r2, [sp, #32] ++ lsl r3, r7, #1 ++ ldrh r6, [r2, r3] ++ cmp r6, #0 ++ bne .L1429 ++ ldr r3, .L1477+12 ++ mov r1, r6 ++ ldr r0, [r4, #-1864] ++ add fp, r5, r7, lsl #2 ++ mov r8, r6 ++ ldrh r2, [r3, #20] ++ mov r9, r6 ++ lsl r2, r2, #9 ++ bl ftl_memset ++ add r3, r5, r7 ++ str r6, [sp, #4] ++ ldrb r10, [r3, #3160] @ zero_extendqisi2 ++.L1430: ++ ldrh r3, [sp, #4] ++ ldr r2, [sp] ++ str r3, [sp, #12] ++ cmp r3, r2 ++ bcc .L1441 ++.L1440: ++ ldr r5, .L1477+8 ++ mov r2, r8 ++ mov r1, r7 ++ ldr r0, .L1477+16 ++ bl rk_printk ++ ldrb r3, [r5, #3156] @ zero_extendqisi2 ++ ldr r2, [sp, #28] ++ mul r3, r2, r3 ++ cmp r8, r3 ++ mov r8, r5 ++ blt .L1442 ++ ldr r3, .L1477+12 ++ mov r1, #0 ++ ldr r0, [r4, #-1864] ++ ldrh r2, [r3, #20] ++ lsl r2, r2, #9 ++ bl ftl_memset ++.L1442: ++ cmp r7, #0 ++ bne .L1444 ++ sub r3, r4, #1776 ++ ldr r9, .L1477+20 ++ sub r3, r3, #4 ++ ldrh fp, [r3] ++ mov r10, #1 ++.L1445: ++ ldrb r3, [r8, #37] @ zero_extendqisi2 ++ cmp r3, fp ++ bhi .L1447 ++ ldr r3, [sp] ++ mov r10, #1 ++ ldr r9, .L1477+20 ++ sub fp, r3, #1 ++ sub r8, r3, #50 ++ uxth fp, fp ++.L1448: ++ cmp fp, r8 ++ bgt .L1450 ++ ldrb r3, [r5, #37] @ zero_extendqisi2 ++ ldr r2, [r4, #-1780] ++ sub r3, r3, r2 ++ cmp r6, r3 ++ bcc .L1444 ++ ldr r3, .L1477+12 ++ mov r1, #0 ++ ldr r0, [r4, #-1864] ++ ldrh r2, [r3, #20] ++ lsl r2, r2, #9 ++ bl ftl_memset ++.L1444: ++ ldr r3, [sp] ++ ldrb r6, [sp, #8] @ zero_extendqisi2 ++ ldr r8, .L1477+24 ++ sub r5, r3, #1 ++ ldr r10, .L1477+28 ++ ldr r9, .L1477+32 ++ uxth r5, r5 ++ mul r6, r3, r6 ++ add r8, r8, r7, lsl #1 ++.L1452: ++ mov r1, r7 ++ mov r2, r5 ++ mov r0, r10 ++ bl rk_printk ++ ldr r1, [r4, #-1864] ++.L1453: ++ lsr r2, r5, #5 ++ and r3, r5, #31 ++ ldr r2, [r1, r2, lsl #2] ++ lsr r3, r2, r3 ++ ands r3, r3, #1 ++ bne .L1454 ++ ldr r2, [sp, #20] ++ add r0, sp, #44 ++ strh r5, [r8] @ movhi ++ strh r9, [r2] @ movhi ++ strh r5, [r2, #2] @ movhi ++ strh r3, [r2, #8] @ movhi ++ mov r2, #1 ++ ldr r3, [r4, #-1864] ++ mov r1, r2 ++ str r3, [sp, #52] ++ ldr r3, [r4, #-1768] ++ str r3, [sp, #56] ++ add r3, r5, r6 ++ lsl r3, r3, #10 ++ str r3, [sp, #48] ++ bl FlashEraseBlocks ++ mov r3, #1 ++ add r0, sp, #44 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldr r3, [sp, #44] ++ cmp r3, #0 ++ beq .L1429 ++ sub r5, r5, #1 ++ uxth r5, r5 ++ b .L1452 ++.L1441: ++ mvn r3, #0 ++ strb r3, [sp, #42] ++ strb r3, [sp, #43] ++ ldr r3, [sp, #24] ++ tst r3, #1 ++ beq .L1432 ++ ldr r3, [fp, #3168] ++ add r2, sp, #42 ++ mov r0, r10 ++ add r3, r9, r3 ++ mov r1, r3 ++ str r3, [sp, #36] ++ bl FlashReadSpare ++ ldrb r2, [r5, #36] @ zero_extendqisi2 ++ ldr r3, [sp, #36] ++ cmp r2, #1 ++ bne .L1432 ++ ldr r1, [r5, #40] ++ add r2, sp, #43 ++ mov r0, r10 ++ add r1, r3, r1 ++ bl FlashReadSpare ++ ldrb r3, [sp, #42] @ zero_extendqisi2 ++ ldrb r2, [sp, #43] @ zero_extendqisi2 ++ and r3, r3, r2 ++ strb r3, [sp, #42] ++.L1432: ++ ldr r3, [sp, #24] ++ tst r3, #2 ++ beq .L1434 ++ ldr r3, [r5, #48] ++ add r2, sp, #43 ++ mov r0, r10 ++ ldrh r1, [r3, #10] ++ ldr r3, [fp, #3168] ++ sub r1, r1, #1 ++ add r1, r1, r3 ++ add r1, r1, r9 ++ bl FlashReadSpare ++.L1434: ++ ldr r2, [r5, #48] ++ ldrb r3, [r2, #7] @ zero_extendqisi2 ++ cmp r3, #8 ++ cmpne r3, #1 ++ ldrb r3, [sp, #42] @ zero_extendqisi2 ++ beq .L1435 ++ ldrb r2, [r2, #18] @ zero_extendqisi2 ++ cmp r2, #12 ++ bne .L1436 ++.L1435: ++ cmp r3, #0 ++ ldrbne r0, [sp, #43] @ zero_extendqisi2 ++ clzne r0, r0 ++ lsrne r0, r0, #5 ++ bne .L1437 ++.L1457: ++ mov r0, #1 ++ b .L1437 ++.L1436: ++ cmp r3, #255 ++ bne .L1457 ++ ldrb r0, [sp, #43] @ zero_extendqisi2 ++ subs r0, r0, #255 ++ movne r0, #1 ++.L1437: ++ ldr r3, [sp, #24] ++ tst r3, #4 ++ beq .L1438 ++ ldr r1, [fp, #3168] ++ mov r0, r10 ++ add r1, r9, r1 ++ bl SandiskProgTestBadBlock ++.L1438: ++ cmp r0, #0 ++ beq .L1439 ++ ldr r2, [sp, #4] ++ mov r1, r7 ++ ldr r0, .L1477+36 ++ add r8, r8, #1 ++ bl rk_printk ++ ldr r3, [sp, #12] ++ mov ip, #1 ++ ldr r2, [r4, #-1864] ++ uxth r8, r8 ++ and r0, r3, #31 ++ lsr r1, r3, #5 ++ ldr r3, [r2, r1, lsl #2] ++ orr r3, r3, ip, lsl r0 ++ str r3, [r2, r1, lsl #2] ++ ldr r2, [sp, #28] ++ ldrb r3, [r5, #3156] @ zero_extendqisi2 ++ mul r3, r2, r3 ++ cmp r8, r3 ++ bgt .L1440 ++.L1439: ++ ldr r3, [sp, #4] ++ add r3, r3, #1 ++ str r3, [sp, #4] ++ ldr r3, [sp, #16] ++ add r9, r9, r3 ++ b .L1430 ++.L1447: ++ mov r0, fp ++ bl FlashTestBlk ++ cmp r0, #0 ++ beq .L1446 ++ mov r1, fp ++ mov r0, r9 ++ bl rk_printk ++ ldr r1, [r4, #-1864] ++ lsr r0, fp, #5 ++ add r6, r6, #1 ++ and r3, fp, #31 ++ uxth r6, r6 ++ ldr r2, [r1, r0, lsl #2] ++ orr r3, r2, r10, lsl r3 ++ str r3, [r1, r0, lsl #2] ++.L1446: ++ add fp, fp, #1 ++ uxth fp, fp ++ b .L1445 ++.L1450: ++ mov r0, fp ++ bl FlashTestBlk ++ cmp r0, #0 ++ beq .L1449 ++ mov r1, fp ++ mov r0, r9 ++ bl rk_printk ++ ldr r1, [r4, #-1864] ++ lsr r0, fp, #5 ++ and r3, fp, #31 ++ ldr r2, [r1, r0, lsl #2] ++ orr r3, r2, r10, lsl r3 ++ str r3, [r1, r0, lsl #2] ++.L1449: ++ sub fp, fp, #1 ++ uxth fp, fp ++ b .L1448 ++.L1454: ++ sub r5, r5, #1 ++ uxth r5, r5 ++ b .L1453 ++.L1429: ++ ldr r3, [sp, #8] ++ add r3, r3, #1 ++ str r3, [sp, #8] ++ b .L1428 ++.L1478: ++ .align 2 ++.L1477: ++ .word .LANCHOR2 ++ .word .LC27 ++ .word .LANCHOR0 ++ .word .LANCHOR2-2768 ++ .word .LC29 ++ .word .LC30 ++ .word .LANCHOR2-1754 ++ .word .LC31 ++ .word -3872 ++ .word .LC28 ++ .fnend ++ .size FlashMakeFactorBbt, .-FlashMakeFactorBbt ++ .align 2 ++ .global Ftl_log2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_log2, %function ++Ftl_log2: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r1, #0 ++ mov r2, #1 ++.L1480: ++ cmp r2, r0 ++ uxth r3, r1 ++ add r1, r1, #1 ++ bls .L1481 ++ sub r0, r3, #1 ++ uxth r0, r0 ++ bx lr ++.L1481: ++ lsl r2, r2, #1 ++ b .L1480 ++ .fnend ++ .size Ftl_log2, .-Ftl_log2 ++ .align 2 ++ .global FtlPrintInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlPrintInfo, %function ++FtlPrintInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FtlPrintInfo, .-FtlPrintInfo ++ .align 2 ++ .global FtlSysBlkNumInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSysBlkNumInit, %function ++FtlSysBlkNumInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1484 ++ cmp r0, #24 ++ movcc r0, #24 ++ sub r2, r3, #1728 ++ sub ip, r3, #1712 ++ ldrh r2, [r2, #-4] ++ ldrh r1, [ip, #-10] ++ str r0, [r3, #-1736] ++ mul r2, r0, r2 ++ sub r0, r1, r0 ++ ldr r1, [r3, #-1716] ++ strh r0, [ip, #-12] @ movhi ++ mov r0, #0 ++ str r2, [r3, #-1728] ++ sub r2, r1, r2 ++ str r2, [r3, #-1720] ++ bx lr ++.L1485: ++ .align 2 ++.L1484: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlSysBlkNumInit, .-FtlSysBlkNumInit ++ .align 2 ++ .global FtlConstantsInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlConstantsInit, %function ++FtlConstantsInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr ip, .L1514 ++ mov r9, r0 ++ ldrh r4, [r0, #14] ++ ldrh r5, [r0, #8] ++ mov r2, ip ++ ldrh r1, [r0, #10] ++ ldrh r3, [r0, #12] ++ mov r0, #0 ++ strh r4, [ip, #-10] @ movhi ++ str ip, [sp, #4] ++ add ip, ip, #6 ++ strh r5, [r2], #16 @ movhi ++ strh r1, [r2, #-14] @ movhi ++ strh r3, [r2, #-12] @ movhi ++ str r2, [sp, #8] ++.L1487: ++ strb r0, [r0, ip] ++ add r0, r0, #1 ++ cmp r0, #32 ++ bne .L1487 ++ ldrh ip, [r9, #14] ++ ldrh r0, [r9, #20] ++ cmp r0, ip, lsr #8 ++ bcs .L1488 ++ uxtb r8, r3 ++ ldr r7, .L1514+4 ++ lsl r0, r8, #1 ++ uxtb r0, r0 ++ str r0, [sp, #12] ++ sub r0, r1, #1 ++ mul r0, r3, r0 ++ str r0, [sp, #20] ++ mov r0, #0 ++.L1489: ++ cmp r0, r3 ++ bcs .L1491 ++ ldr r2, [sp, #20] ++ sub fp, r0, r3 ++ uxtb ip, r0 ++ add fp, r7, fp ++ add lr, r0, r2 ++ add r2, r7, lr ++ mov lr, #0 ++ str r2, [sp, #16] ++ mov r6, lr ++ b .L1492 ++.L1490: ++ ldr r2, [sp, #16] ++ add r10, r8, ip ++ strb ip, [fp, lr] ++ add r6, r6, #1 ++ strb r10, [r2, lr] ++ ldr r2, [sp, #12] ++ add ip, r2, ip ++ uxtb ip, ip ++.L1492: ++ cmp r6, r1 ++ add lr, lr, r3 ++ bcc .L1490 ++ add r0, r0, #1 ++ b .L1489 ++.L1491: ++ ldr r2, [sp, #8] ++ lsl r1, r1, #1 ++ lsr r4, r4, #1 ++ strh r1, [r2, #-14] @ movhi ++ ldr r2, [sp, #4] ++ strh r4, [r2, #-10] @ movhi ++.L1488: ++ ldr r2, [sp, #8] ++ cmp r5, #1 ++ ldr r1, .L1514+8 ++ mov r0, #5 ++ ldrh r10, [r9, #16] ++ ldrh r7, [r2, #-14] ++ strh r0, [r1, #-10] @ movhi ++ mov r0, #0 ++ strheq r5, [r1, #-10] @ movhi ++ ldr r5, .L1514+12 ++ smulbb r7, r7, r3 ++ strh r0, [r1, #-8] @ movhi ++ mov r0, #4352 ++ sub r2, r5, #1728 ++ strh r0, [r1, #-6] @ movhi ++ uxth r7, r7 ++ ldr r0, .L1514+16 ++ sub r6, r5, #1664 ++ strh r7, [r2, #-4] @ movhi ++ sub r8, r5, #1648 ++ ldr r2, [sp, #4] ++ ldrb fp, [r0, #36] @ zero_extendqisi2 ++ strh r10, [r6, #-2] @ movhi ++ ldrh r4, [r2, #-10] ++ cmp fp, #0 ++ ldrh r2, [r9, #20] ++ movne r0, #384 ++ strhne r0, [r1, #-6] @ movhi ++ smulbb r3, r3, r4 ++ ldrh r1, [r9, #18] ++ mov r0, r2 ++ strh r2, [r8, #-12] @ movhi ++ str r2, [sp, #8] ++ strh r3, [r6, #-4] @ movhi ++ smulbb r3, r7, r10 ++ strh r1, [r6] @ movhi ++ str r1, [sp, #12] ++ strh r3, [r8, #-14] @ movhi ++ bl Ftl_log2 ++ ldr r2, [sp, #8] ++ mov r3, r0 ++ strh r0, [r8, #-10] @ movhi ++ cmp r4, #1024 ++ ldr r1, [sp, #12] ++ str r3, [sp, #8] ++ lsl r0, r2, #9 ++ uxth r0, r0 ++ mul r1, r2, r1 ++ strh r0, [r8, #-8] @ movhi ++ lsr r0, r0, #8 ++ strh r0, [r8, #-6] @ movhi ++ ldrh r0, [r9, #26] ++ ldr r9, .L1514+20 ++ strh r0, [r8, #-4] @ movhi ++ mul r0, r4, r7 ++ str r0, [r5, #-1716] ++ uxtbhi r0, r4 ++ strhhi r0, [r6, #-8] @ movhi ++ ldrh r0, [r6, #-8] ++ sub r0, r4, r0 ++ lsl r4, r4, #6 ++ mul r0, r7, r0 ++ mul r0, r2, r0 ++ mul r10, r10, r0 ++ ldrh r0, [r6, #-6] ++ asr r10, r10, #11 ++ lsl r0, r0, #3 ++ str r10, [r5, #-1648] ++ bl __aeabi_idiv ++ uxth r0, r0 ++ ldr r3, [sp, #8] ++ mov r1, r7 ++ cmp r0, #4 ++ movls r2, #4 ++ strhhi r0, [r9, #-12] @ movhi ++ strhls r2, [r9, #-12] @ movhi ++ cmp fp, #0 ++ movne r2, #640 ++ ldrh r0, [r9, #-12] ++ strhne r2, [r6, #-6] @ movhi ++ ldrh r2, [r6, #-6] ++ asr r2, r2, r3 ++ add r3, r3, #9 ++ asr r4, r4, r3 ++ add r2, r2, #2 ++ strh r4, [r9, #-8] @ movhi ++ uxth r4, r4 ++ strh r2, [r9, #-10] @ movhi ++ mul r3, r4, r7 ++ add r4, r4, #8 ++ str r3, [r5, #-1636] ++ bl __aeabi_uidiv ++ uxtah r0, r4, r0 ++ cmp r7, #1 ++ sub r3, r5, #1728 ++ ldr r7, .L1514+24 ++ addeq r0, r0, #4 ++ sub r3, r3, #8 ++ str r0, [r5, #-1736] ++ ldrh r0, [r3] ++ bl FtlSysBlkNumInit ++ ldr r4, [r5, #-1720] ++ mov r0, #2048 ++ ldr r3, [r5, #-1736] ++ str r3, [r5, #-1632] ++ lsl r3, r4, #2 ++ ldrh r4, [r6, #-2] ++ ldrh r6, [r8, #-12] ++ mul r4, r4, r3 ++ ldrh r3, [r8, #-10] ++ mov r1, r6 ++ add r3, r3, #9 ++ lsr r4, r4, r3 ++ add r4, r4, #2 ++ uxth r4, r4 ++ strh r4, [r7, #-12] @ movhi ++ bl __aeabi_idiv ++ ldrh r2, [r9, #-12] ++ mov r3, #0 ++ strh r0, [r7, #-10] @ movhi ++ str r3, [r5, #-2736] ++ ldrb r0, [r5, #-2740] @ zero_extendqisi2 ++ add r3, r2, #3 ++ strh r3, [r9, #-12] @ movhi ++ ldr r3, [r5, #-1636] ++ cmp r0, #0 ++ addne r2, r2, #4 ++ add r1, r3, #3 ++ strhne r2, [r9, #-12] @ movhi ++ str r1, [r5, #-1636] ++ addne r3, r3, #5 ++ bne .L1513 ++ cmp r1, #7 ++ bhi .L1502 ++ mov r3, #8 ++.L1513: ++ str r3, [r5, #-1636] ++.L1502: ++ mov r3, #0 ++ mov r0, #0 ++ strh r3, [r7, #-8] @ movhi ++ ldr r3, [sp, #4] ++ ldrh r2, [r3, #-12] ++ lsr r3, r2, #3 ++ add r3, r3, r2, lsl #1 ++ add r3, r3, #52 ++ add r4, r3, r4, lsl #2 ++ cmp r4, r6, lsl #9 ++ movcc r3, #1 ++ strhcc r3, [r7, #-8] @ movhi ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1515: ++ .align 2 ++.L1514: ++ .word .LANCHOR2-1712 ++ .word .LANCHOR2-1706 ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2-1632 ++ .word .LANCHOR2-1616 ++ .fnend ++ .size FtlConstantsInit, .-FtlConstantsInit ++ .align 2 ++ .global FtlMemInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMemInit, %function ++FtlMemInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #65535 ++ ldr r4, .L1619 ++ mvn r2, #0 ++ mov r5, #0 ++ mov r0, #1024 ++ mov r8, #12 ++ mov r10, #36 ++ str r3, [r4, #-1552] ++ sub r3, r4, #1536 ++ strh r2, [r3] @ movhi ++ sub r3, r4, #1520 ++ strh r2, [r3, #-14] @ movhi ++ sub r6, r4, #1648 ++ strh r2, [r3, #-12] @ movhi ++ sub r7, r4, #1616 ++ strh r2, [r3, #-10] @ movhi ++ mov r2, #32 ++ strh r2, [r3, #-8] @ movhi ++ mov r2, #128 ++ strh r2, [r3, #-6] @ movhi ++ sub r9, r4, #1728 ++ strh r5, [r3, #-4] @ movhi ++ strh r5, [r3, #-2] @ movhi ++ strh r5, [r3] @ movhi ++ sub r3, r4, #1504 ++ strh r5, [r7, #-6] @ movhi ++ str r5, [r4, #-1620] ++ str r5, [r4, #-1616] ++ str r5, [r4, #-1612] ++ str r5, [r4, #-1608] ++ str r5, [r4, #-1604] ++ str r5, [r4, #-1600] ++ str r5, [r4, #-1596] ++ str r5, [r4, #-1592] ++ str r5, [r4, #-1588] ++ str r5, [r4, #-1584] ++ str r5, [r4, #-1580] ++ str r5, [r4, #-1576] ++ str r5, [r4, #-1572] ++ str r5, [r4, #-1568] ++ str r5, [r4, #-1564] ++ str r5, [r4, #-1560] ++ str r5, [r4, #-1556] ++ str r5, [r4, #-1548] ++ str r5, [r4, #-1544] ++ str r5, [r4, #-1540] ++ strh r5, [r3, #-14] @ movhi ++ ldrh r1, [r6, #-12] ++ bl __aeabi_idiv ++ ldrh r3, [r9, #-4] ++ str r0, [r4, #-1516] ++ str r5, [r4, #-1512] ++ lsl r3, r3, #2 ++ cmp r0, r3 ++ ldrh r0, [r6, #-14] ++ strhi r3, [r4, #-1516] ++ lsl r0, r0, #1 ++ bl ftl_malloc ++ str r0, [r4, #-1508] ++ ldrh r0, [r6, #-14] ++ mul r0, r8, r0 ++ bl ftl_malloc ++ ldrh r5, [r9, #-4] ++ str r0, [r4, #-1504] ++ mul r5, r10, r5 ++ lsl fp, r5, #3 ++ mov r0, fp ++ bl ftl_malloc ++ str r0, [r4, #-1500] ++ mov r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1496] ++ mov r0, fp ++ bl ftl_malloc ++ str r0, [r4, #-1492] ++ mov r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1488] ++ mov r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1484] ++ ldr r0, [r4, #-1516] ++ mul r0, r10, r0 ++ bl ftl_malloc ++ ldrh r3, [r9, #-4] ++ ldrh r5, [r6, #-8] ++ str r0, [r4, #-1480] ++ lsl r3, r3, #1 ++ mov r0, r5 ++ add r3, r3, #1 ++ str r3, [r4, #-1476] ++ bl ftl_malloc ++ str r0, [r4, #-1472] ++ mov r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1468] ++ mov r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1464] ++ ldr r0, [r4, #-1476] ++ mul r0, r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1460] ++ ldr r0, [r4, #-1516] ++ mul r0, r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1456] ++ mov r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1452] ++ mov r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1448] ++ ldr r0, [r4, #-1476] ++ mul r0, r8, r0 ++ bl ftl_malloc ++ ldrh r3, [r6, #-6] ++ ldrh r5, [r9, #-4] ++ str r0, [r4, #-1444] ++ mul r5, r5, r3 ++ mov r0, r5 ++ bl ftl_malloc ++ str r0, [r4, #-1440] ++ lsl r0, r5, #3 ++ ldr r5, .L1619+4 ++ bl ftl_malloc ++ ldrh r3, [r6, #-6] ++ str r0, [r4, #-1436] ++ add r9, r5, #288 ++ ldr r0, [r4, #-1476] ++ mul r0, r0, r3 ++ bl ftl_malloc ++ ldrh r3, [r6, #-6] ++ str r0, [r4, #-1432] ++ ldr r0, [r4, #-1516] ++ mul r0, r0, r3 ++ bl ftl_malloc ++ str r0, [r4, #-1428] ++ ldrh r0, [r5, #-10] ++ lsl r0, r0, #1 ++ uxth r0, r0 ++ strh r0, [r9] @ movhi ++ bl ftl_malloc ++ str r0, [r4, #-1420] ++ ldrh r0, [r9] ++ ldr r3, .L1619+8 ++ add r0, r0, #544 ++ add r0, r0, #3 ++ lsr r0, r0, #9 ++ strh r0, [r9] @ movhi ++ and r0, r3, r0, lsl #9 ++ bl ftl_malloc ++ ldrh r9, [r5, #-10] ++ str r0, [r4, #-1416] ++ add r0, r0, #32 ++ str r0, [r4, #-1412] ++ lsl r9, r9, #1 ++ mov r0, r9 ++ bl ftl_malloc ++ str r0, [r4, #-1408] ++ mov r0, r9 ++ bl ftl_malloc ++ ldr r9, [r4, #-1636] ++ str r0, [r4, #-1404] ++ lsl r9, r9, #1 ++ mov r0, r9 ++ bl ftl_malloc ++ str r0, [r4, #-1400] ++ mov r0, r9 ++ bl ftl_malloc ++ str r0, [r4, #-1396] ++ ldrh r0, [r5, #-10] ++ lsr r0, r0, #3 ++ add r0, r0, #4 ++ bl ftl_malloc ++ ldr r3, .L1619+12 ++ str r0, [r3, #32] ++ ldrh r0, [r5, #68] ++ lsl r0, r0, #1 ++ bl ftl_malloc ++ str r0, [r4, #-1392] ++ ldrh r0, [r5, #68] ++ lsl r0, r0, #1 ++ bl ftl_malloc ++ str r0, [r4, #-1388] ++ ldrh r0, [r5, #68] ++ lsl r0, r0, #2 ++ bl ftl_malloc ++ str r0, [r4, #-1384] ++ ldrh r0, [r5, #70] ++ lsl r0, r0, #2 ++ bl ftl_malloc ++ ldrh r2, [r5, #70] ++ mov r1, #0 ++ str r0, [r4, #-1380] ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldrh r9, [r7, #-12] ++ lsl r9, r9, #2 ++ mov r0, r9 ++ bl ftl_malloc ++ str r0, [r4, #-1376] ++ mov r0, r9 ++ bl ftl_malloc ++ str r0, [r4, #-1372] ++ ldr r0, [r4, #-1636] ++ lsl r0, r0, #2 ++ bl ftl_malloc ++ str r0, [r4, #-1368] ++ ldrh r0, [r7, #-10] ++ mul r0, r8, r0 ++ bl ftl_malloc ++ ldrh r3, [r7, #-10] ++ add r7, r5, #16 ++ str r0, [r4, #-1364] ++ ldrh r0, [r6, #-8] ++ add r6, r5, #368 ++ mul r0, r0, r3 ++ bl ftl_malloc ++ ldrh r3, [r5, #-10] ++ str r0, [r4, #-1360] ++ mov r0, #6 ++ mul r0, r0, r3 ++ bl ftl_malloc ++ str r0, [r4, #-1356] ++ ldrh r0, [r5, #44] ++ ldrh r3, [r5, #2] ++ add r0, r0, #31 ++ asr r0, r0, #5 ++ strh r0, [r6, #-8] @ movhi ++ mul r0, r0, r3 ++ lsl r0, r0, #2 ++ bl ftl_malloc ++ ldrh r2, [r6, #-8] ++ mov r3, #1 ++ ldrh ip, [r5, #2] ++ add r5, r5, #392 ++ str r0, [r4, #-1320] ++ lsl r2, r2, #2 ++ mov r1, r2 ++.L1518: ++ cmp r3, ip ++ bcc .L1519 ++ add r3, r6, r3, lsl #2 ++ mov r2, #0 ++ add r6, r6, #52 ++ add r3, r3, #20 ++.L1520: ++ cmp r6, r3 ++ bne .L1521 ++ ldr r3, [r4, #-1400] ++ cmp r3, #0 ++ bne .L1522 ++.L1524: ++ ldr r1, .L1619+16 ++ ldr r0, .L1619+20 ++ bl rk_printk ++ mvn r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1519: ++ ldr r0, [r4, #-1320] ++ add r3, r3, #1 ++ add r0, r0, r1 ++ add r1, r1, r2 ++ str r0, [r5, #4]! ++ b .L1518 ++.L1521: ++ str r2, [r3, #4]! ++ b .L1520 ++.L1522: ++ ldr r3, [r4, #-1396] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1376] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1368] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1364] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1360] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1356] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1320] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1404] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1508] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1504] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1500] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1492] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1488] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1484] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1496] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1472] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1468] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1464] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1460] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1452] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1448] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1444] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1440] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1436] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1432] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1412] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1420] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, [r4, #-1392] ++ cmp r3, #0 ++ beq .L1524 ++ ldr r3, .L1619 ++ ldr r2, [r3, #-1388] ++ cmp r2, #0 ++ beq .L1524 ++ ldr r2, [r3, #-1384] ++ cmp r2, #0 ++ beq .L1524 ++ ldr r3, [r3, #-1380] ++ cmp r3, #0 ++ beq .L1524 ++ mov r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1620: ++ .align 2 ++.L1619: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1712 ++ .word 33553920 ++ .word .LANCHOR0 ++ .word .LANCHOR3+130 ++ .word .LC32 ++ .fnend ++ .size FtlMemInit, .-FtlMemInit ++ .align 2 ++ .global IsBlkInVendorPart ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type IsBlkInVendorPart, %function ++IsBlkInVendorPart: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L1628 ++ sub r3, r2, #1280 ++ ldrh r3, [r3, #-8] ++ cmp r3, #0 ++ beq .L1627 ++ ldr r3, [r2, #-1392] ++ sub r2, r2, #1632 ++ ldrh r2, [r2, #-12] ++ add r2, r3, r2, lsl #1 ++.L1623: ++ cmp r3, r2 ++ bne .L1624 ++.L1627: ++ mov r0, #0 ++ bx lr ++.L1624: ++ ldrh r1, [r3], #2 ++ cmp r0, r1 ++ bne .L1623 ++ mov r0, #1 ++ bx lr ++.L1629: ++ .align 2 ++.L1628: ++ .word .LANCHOR2 ++ .fnend ++ .size IsBlkInVendorPart, .-IsBlkInVendorPart ++ .align 2 ++ .global FtlCacheMetchLpa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlCacheMetchLpa, %function ++FtlCacheMetchLpa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L1640 ++ ldr r3, [r2, #-1512] ++ cmp r3, #0 ++ beq .L1633 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ mov r5, #36 ++ ldr r4, [r2, #-1480] ++ mov r2, #0 ++.L1632: ++ mla ip, r5, r2, r4 ++ ldr lr, [ip, #16] ++ cmp lr, r1 ++ movhi ip, #0 ++ movls ip, #1 ++ cmp lr, r0 ++ movcc ip, #0 ++ cmp ip, #0 ++ bne .L1634 ++ add r2, r2, #1 ++ cmp r3, r2 ++ bne .L1632 ++ mov r0, ip ++ pop {r4, r5, pc} ++.L1633: ++ mov r0, r3 ++ bx lr ++.L1634: ++ mov r0, #1 ++ pop {r4, r5, pc} ++.L1641: ++ .align 2 ++.L1640: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlCacheMetchLpa, .-FtlCacheMetchLpa ++ .align 2 ++ .global FtlGetCap ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGetCap, %function ++FtlGetCap: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1643 ++ ldr r0, [r3, #-2736] ++ bx lr ++.L1644: ++ .align 2 ++.L1643: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGetCap, .-FtlGetCap ++ .align 2 ++ .global FtlGetCapacity ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGetCapacity, %function ++FtlGetCapacity: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1646 ++ ldr r0, [r3, #-2736] ++ bx lr ++.L1647: ++ .align 2 ++.L1646: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGetCapacity, .-FtlGetCapacity ++ .align 2 ++ .global ftl_get_density ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_get_density, %function ++ftl_get_density: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1649 ++ ldr r0, [r3, #-2736] ++ bx lr ++.L1650: ++ .align 2 ++.L1649: ++ .word .LANCHOR2 ++ .fnend ++ .size ftl_get_density, .-ftl_get_density ++ .align 2 ++ .global FtlGetLpn ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGetLpn, %function ++FtlGetLpn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1652 ++ ldr r0, [r3, #-1284] ++ bx lr ++.L1653: ++ .align 2 ++.L1652: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGetLpn, .-FtlGetLpn ++ .align 2 ++ .global FtlBbmMapBadBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbmMapBadBlock, %function ++FtlBbmMapBadBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ .pad #12 ++ mov r5, r0 ++ ldr r4, .L1656 ++ sub r3, r4, #1664 ++ ldrh r7, [r3, #-4] ++ mov r1, r7 ++ bl __aeabi_uidiv ++ uxth r6, r0 ++ mov r1, r7 ++ mov r0, r5 ++ bl __aeabi_uidivmod ++ add r2, r4, r6, lsl #2 ++ uxth r3, r1 ++ ldr r2, [r2, #-1320] ++ lsr r1, r3, #5 ++ and ip, r3, #31 ++ mov lr, #1 ++ ldr r0, [r2, r1, lsl #2] ++ orr r0, r0, lr, lsl ip ++ str r0, [r2, r1, lsl #2] ++ mov r2, r6 ++ str r0, [sp] ++ mov r1, r5 ++ ldr r0, .L1656+4 ++ bl rk_printk ++ sub r3, r4, #1344 ++ mov r0, #0 ++ ldrh r2, [r3, #2] ++ add r2, r2, #1 ++ strh r2, [r3, #2] @ movhi ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, pc} ++.L1657: ++ .align 2 ++.L1656: ++ .word .LANCHOR2 ++ .word .LC33 ++ .fnend ++ .size FtlBbmMapBadBlock, .-FtlBbmMapBadBlock ++ .align 2 ++ .global FtlBbmIsBadBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbmIsBadBlock, %function ++FtlBbmIsBadBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r7, r0 ++ ldr r5, .L1660 ++ sub r3, r5, #1664 ++ ldrh r6, [r3, #-4] ++ mov r1, r6 ++ bl __aeabi_uidivmod ++ mov r0, r7 ++ uxth r4, r1 ++ mov r1, r6 ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ lsr r2, r4, #5 ++ add r5, r5, r0, lsl #2 ++ and r4, r4, #31 ++ ldr r3, [r5, #-1320] ++ ldr r0, [r3, r2, lsl #2] ++ lsr r0, r0, r4 ++ and r0, r0, #1 ++ pop {r4, r5, r6, r7, r8, pc} ++.L1661: ++ .align 2 ++.L1660: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlBbmIsBadBlock, .-FtlBbmIsBadBlock ++ .align 2 ++ .global FtlBbtInfoPrint ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbtInfoPrint, %function ++FtlBbtInfoPrint: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FtlBbtInfoPrint, .-FtlBbtInfoPrint ++ .align 2 ++ .global FtlBbt2Bitmap ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbt2Bitmap, %function ++FtlBbt2Bitmap: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r6, r1 ++ ldr r5, .L1669 ++ mov r4, r0 ++ mov r1, #0 ++ mov r0, r6 ++ ldrh r2, [r5, #-8] ++ sub r5, r5, #4 ++ lsl r2, r2, #2 ++ bl ftl_memset ++ add r0, r4, #1020 ++ sub r2, r4, #2 ++ add r0, r0, #2 ++ movw r4, #65535 ++ mov lr, #1 ++.L1665: ++ ldrh r3, [r2, #2]! ++ cmp r3, r4 ++ popeq {r4, r5, r6, pc} ++ lsr ip, r3, #5 ++ and r3, r3, #31 ++ cmp r2, r0 ++ ldr r1, [r6, ip, lsl #2] ++ orr r3, r1, lr, lsl r3 ++ str r3, [r6, ip, lsl #2] ++ ldrh r3, [r5, #6] ++ add r3, r3, #1 ++ strh r3, [r5, #6] @ movhi ++ bne .L1665 ++ pop {r4, r5, r6, pc} ++.L1670: ++ .align 2 ++.L1669: ++ .word .LANCHOR2-1344 ++ .fnend ++ .size FtlBbt2Bitmap, .-FtlBbt2Bitmap ++ .align 2 ++ .global FtlBbmTblFlush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbmTblFlush, %function ++FtlBbmTblFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ ldr r4, .L1686 ++ ldr r6, [r4, #-1280] ++ cmp r6, #0 ++ bne .L1673 ++ ldr r0, [r4, #-1472] ++ sub r7, r4, #1648 ++ ldr r3, [r4, #-1440] ++ sub r5, r4, #1344 ++ ldrh r2, [r7, #-8] ++ add r7, r7, #324 ++ mov r1, r6 ++ str r0, [r4, #-1268] ++ str r3, [r4, #-1264] ++ bl ftl_memset ++.L1674: ++ ldr r3, .L1686+4 ++ ldrh r3, [r3] ++ cmp r6, r3 ++ blt .L1675 ++ ldr r6, [r4, #-1264] ++ mov r2, #16 ++ mov r1, #255 ++ ldr r9, .L1686+8 ++ mov r7, #0 ++ mov r0, r6 ++ mov r8, r7 ++ bl ftl_memset ++ ldr r3, .L1686+12 ++ strh r3, [r6] @ movhi ++ ldr r3, [r4, #-1340] ++ str r3, [r6, #4] ++ ldrh r3, [r5, #-4] ++ strh r3, [r6, #2] @ movhi ++ ldrh r3, [r5], #-4 ++ strh r3, [r6, #8] @ movhi ++ ldrh r3, [r5, #6] ++ strh r3, [r6, #10] @ movhi ++ ldr r3, [r4, #-1736] ++ strh r3, [r6, #12] @ movhi ++.L1676: ++ ldr r3, [r4, #-1472] ++ mov r10, #0 ++ ldrh r2, [r5, #2] ++ ldrh r1, [r5] ++ str r3, [r4, #-1268] ++ ldr r3, [r4, #-1440] ++ str r10, [r4, #-1276] ++ str r3, [r4, #-1264] ++ orr r3, r2, r1, lsl #10 ++ ldrh r0, [r6, #10] ++ str r3, [r4, #-1272] ++ ldrh r3, [r5, #4] ++ str r0, [sp] ++ mov r0, r9 ++ bl rk_printk ++ ldr r3, .L1686+16 ++ ldrh r2, [r5, #2] ++ ldrh r3, [r3] ++ sub r3, r3, #1 ++ cmp r2, r3 ++ blt .L1677 ++ ldr r3, [r4, #-1340] ++ ldrh r2, [r5] ++ ldr r0, [r4, #-1488] ++ add r3, r3, #1 ++ strh r10, [r5, #2] @ movhi ++ str r3, [r4, #-1340] ++ str r3, [r6, #4] ++ ldrh r3, [r5, #4] ++ strh r2, [r6, #8] @ movhi ++ strh r2, [r5, #4] @ movhi ++ mov r2, #1 ++ strh r3, [r5] @ movhi ++ mov r1, r2 ++ lsl r3, r3, #10 ++ str r3, [r4, #-1272] ++ str r3, [r0, #4] ++ bl FlashEraseBlocks ++.L1677: ++ mov r3, #1 ++ ldr r0, .L1686+20 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldrh r3, [r5, #2] ++ add r3, r3, #1 ++ strh r3, [r5, #2] @ movhi ++ ldr r3, [r4, #-1276] ++ cmn r3, #1 ++ bne .L1678 ++ add r7, r7, #1 ++ ldr r1, [r4, #-1272] ++ uxth r7, r7 ++ ldr r0, .L1686+24 ++ bl rk_printk ++ cmp r7, #3 ++ bls .L1676 ++ mov r2, r7 ++ ldr r1, [r4, #-1272] ++ ldr r0, .L1686+28 ++ bl rk_printk ++ mov r3, #1 ++ str r3, [r4, #-1280] ++.L1673: ++ mov r0, #0 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1675: ++ ldrh r2, [r5, #-8] ++ ldr r3, [r4, #-1268] ++ ldr r1, [r7, #4]! ++ mul r0, r6, r2 ++ lsl r2, r2, #2 ++ add r6, r6, #1 ++ add r0, r3, r0, lsl #2 ++ bl ftl_memcpy ++ b .L1674 ++.L1681: ++ mov r8, #1 ++ b .L1676 ++.L1678: ++ add r8, r8, #1 ++ cmp r8, #1 ++ ble .L1681 ++ cmp r3, #256 ++ bne .L1673 ++ b .L1676 ++.L1687: ++ .align 2 ++.L1686: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1710 ++ .word .LC34 ++ .word -3887 ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2-1276 ++ .word .LC35 ++ .word .LC36 ++ .fnend ++ .size FtlBbmTblFlush, .-FtlBbmTblFlush ++ .align 2 ++ .global FtlLoadFactoryBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadFactoryBbt, %function ++FtlLoadFactoryBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r8, #0 ++ ldr r5, .L1699 ++ ldr r3, [r5, #-1472] ++ sub r7, r5, #1328 ++ ldr r10, [r5, #-1440] ++ sub r9, r5, #1264 ++ sub r7, r7, #10 ++ sub r9, r9, #12 ++ str r3, [r5, #-1268] ++ str r10, [r5, #-1264] ++.L1689: ++ ldr r6, .L1699+4 ++ ldrh r3, [r6] ++ cmp r8, r3 ++ bcc .L1694 ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1694: ++ ldrh r4, [r6, #42] ++ mvn r3, #0 ++ add r6, r6, #46 ++ strh r3, [r7, #2]! @ movhi ++ add r4, r4, r3 ++ uxth r4, r4 ++.L1690: ++ ldrh r3, [r6, #-4] ++ sub r2, r3, #16 ++ cmp r4, r2 ++ ble .L1692 ++ mla r3, r8, r3, r4 ++ mov r2, #1 ++ mov r1, r2 ++ mov r0, r9 ++ lsl r3, r3, #10 ++ str r3, [r5, #-1272] ++ bl FlashReadPages ++ ldr r3, [r5, #-1276] ++ cmn r3, #1 ++ beq .L1691 ++ ldrh r2, [r10] ++ movw r3, #61664 ++ cmp r2, r3 ++ bne .L1691 ++ strh r4, [r7] @ movhi ++.L1692: ++ add r8, r8, #1 ++ b .L1689 ++.L1691: ++ sub r4, r4, #1 ++ uxth r4, r4 ++ b .L1690 ++.L1700: ++ .align 2 ++.L1699: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1710 ++ .fnend ++ .size FtlLoadFactoryBbt, .-FtlLoadFactoryBbt ++ .align 2 ++ .global FtlBbtMemInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbtMemInit, %function ++FtlBbtMemInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r0, .L1702 ++ mvn r2, #0 ++ mov r1, #255 ++ strh r2, [r0, #-4] @ movhi ++ mov r2, #0 ++ strh r2, [r0, #2] @ movhi ++ mov r2, #16 ++ add r0, r0, #8 ++ b ftl_memset ++.L1703: ++ .align 2 ++.L1702: ++ .word .LANCHOR2-1344 ++ .fnend ++ .size FtlBbtMemInit, .-FtlBbtMemInit ++ .align 2 ++ .global FtlBbtCalcTotleCnt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlBbtCalcTotleCnt, %function ++FtlBbtCalcTotleCnt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1712 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, #0 ++ mov r4, r5 ++ ldrh r2, [r3, #-4] ++ ldrh r6, [r3, #-46] ++ mul r6, r6, r2 ++.L1705: ++ uxth r0, r5 ++ cmp r0, r6 ++ blt .L1707 ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L1707: ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ add r5, r5, #1 ++ addne r4, r4, #1 ++ uxthne r4, r4 ++ b .L1705 ++.L1713: ++ .align 2 ++.L1712: ++ .word .LANCHOR2-1664 ++ .fnend ++ .size FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt ++ .align 2 ++ .global FtlMakeBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMakeBbt, %function ++FtlMakeBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L1735 ++ ldr r7, [r4, #-1280] ++ cmp r7, #0 ++ bne .L1715 ++ ldr r10, .L1735+4 ++ sub fp, r4, #1264 ++ sub r8, r4, #1344 ++ sub fp, fp, #12 ++ bl FtlBbtMemInit ++ sub r9, r10, #18 ++ bl FtlLoadFactoryBbt ++.L1716: ++ ldr r5, .L1735+8 ++ ldrh r3, [r5] ++ cmp r7, r3 ++ bcc .L1722 ++ mov r5, #0 ++.L1723: ++ ldr r3, .L1735+12 ++ uxth r0, r5 ++ add r5, r5, #1 ++ ldrh r3, [r3] ++ cmp r3, r0 ++ bhi .L1724 ++ sub r6, r8, #4 ++ ldrh r5, [r6, #12] ++ movw r7, #65535 ++ sub r5, r5, #1 ++ uxth r5, r5 ++.L1725: ++ ldrh r3, [r6, #12] ++ sub r3, r3, #48 ++ cmp r5, r3 ++ ble .L1729 ++ mov r0, r5 ++ bl FtlBbmIsBadBlock ++ cmp r0, #1 ++ beq .L1726 ++ mov r0, r5 ++ bl FlashTestBlk ++ cmp r0, #0 ++ beq .L1727 ++ mov r0, r5 ++ bl FtlBbmMapBadBlock ++.L1726: ++ sub r5, r5, #1 ++ uxth r5, r5 ++ b .L1725 ++.L1722: ++ ldr r3, [r4, #-1440] ++ movw r2, #65535 ++ ldr r0, [r4, #-1472] ++ str r3, [sp, #4] ++ str r3, [r4, #-1264] ++ ldrh r3, [r9, #2]! ++ str r0, [r4, #-1268] ++ cmp r3, r2 ++ beq .L1717 ++ ldrh r6, [r5, #42] ++ mov r2, #1 ++ mov r1, r2 ++ mov r0, fp ++ mla r6, r7, r6, r3 ++ lsl r3, r6, #10 ++ str r3, [r4, #-1272] ++ bl FlashReadPages ++ ldrh r2, [r5, #42] ++ ldr r1, [r4, #-1268] ++ ldr r0, [r10] ++ add r2, r2, #7 ++ asr r2, r2, #3 ++ bl ftl_memcpy ++.L1718: ++ uxth r0, r6 ++ add r7, r7, #1 ++ add r10, r10, #4 ++ bl FtlBbmMapBadBlock ++ b .L1716 ++.L1717: ++ mov r1, r7 ++ bl FlashGetBadBlockList ++ ldr r1, [r10] ++ ldr r0, [r4, #-1268] ++ bl FtlBbt2Bitmap ++ ldrh r5, [r5, #42] ++.L1720: ++ sub r5, r5, #1 ++ uxth r5, r5 ++.L1719: ++ ldr r3, .L1735+16 ++ ldrh r0, [r3, #-4] ++ smlabb r0, r0, r7, r5 ++ uxth r0, r0 ++ bl FtlBbmIsBadBlock ++ cmp r0, #1 ++ beq .L1720 ++ mov r2, #16 ++ mov r1, #0 ++ strh r5, [r9] @ movhi ++ ldr r0, [r4, #-1440] ++ bl ftl_memset ++ ldr r3, [sp, #4] ++ movw r2, 61664 @ movhi ++ strh r2, [r3] @ movhi ++ mov r3, #0 ++ ldr r2, [sp, #4] ++ str r3, [r2, #4] ++ ldrh r3, [r9] ++ strh r3, [r2, #2] @ movhi ++ ldr r3, .L1735+16 ++ ldrh r2, [r8, #-8] ++ ldr r1, [r10] ++ ldrh r6, [r3, #-4] ++ ldrh r3, [r9] ++ lsl r2, r2, #2 ++ ldr r0, [r4, #-1268] ++ mla r6, r7, r6, r3 ++ lsl r3, r6, #10 ++ str r3, [r4, #-1272] ++ bl ftl_memcpy ++ mov r2, #1 ++ mov r0, fp ++ mov r1, r2 ++ bl FlashEraseBlocks ++ mov r3, #1 ++ mov r0, fp ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldr r3, [r4, #-1276] ++ cmn r3, #1 ++ bne .L1718 ++ uxth r0, r6 ++ bl FtlBbmMapBadBlock ++ b .L1719 ++.L1724: ++ bl FtlBbmMapBadBlock ++ b .L1723 ++.L1727: ++ ldrh r3, [r6] ++ cmp r3, r7 ++ strheq r5, [r6] @ movhi ++ beq .L1726 ++.L1728: ++ strh r5, [r6, #4] @ movhi ++.L1729: ++ ldrh r3, [r8, #-4] ++ sub r5, r8, #4 ++ ldr r0, [r4, #-1488] ++ mov r6, #0 ++ str r6, [r4, #-1340] ++ mov r2, #2 ++ mov r1, #1 ++ strh r6, [r8, #-2] @ movhi ++ lsl r3, r3, #10 ++ str r3, [r0, #4] ++ ldrh r3, [r5, #4] ++ lsl r3, r3, #10 ++ str r3, [r0, #40] ++ bl FlashEraseBlocks ++ ldrh r0, [r8, #-4] ++ bl FtlBbmMapBadBlock ++ ldrh r0, [r5, #4] ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ ldr r3, [r4, #-1340] ++ ldrh r2, [r5, #4] ++ strh r6, [r8, #-2] @ movhi ++ add r3, r3, #1 ++ str r3, [r4, #-1340] ++ ldrh r3, [r8, #-4] ++ strh r2, [r8, #-4] @ movhi ++ strh r3, [r5, #4] @ movhi ++ bl FtlBbmTblFlush ++.L1715: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1736: ++ .align 2 ++.L1735: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1320 ++ .word .LANCHOR2-1710 ++ .word .LANCHOR2-1652 ++ .word .LANCHOR2-1664 ++ .fnend ++ .size FtlMakeBbt, .-FtlMakeBbt ++ .align 2 ++ .global V2P_block ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type V2P_block, %function ++V2P_block: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, r1 ++ ldr r4, .L1739 ++ mov r7, r0 ++ sub r3, r4, #1696 ++ sub r4, r4, #1664 ++ ldrh r6, [r3, #-12] ++ mov r1, r6 ++ bl __aeabi_uidiv ++ ldrh r4, [r4, #-4] ++ smulbb r5, r6, r5 ++ mov r1, r6 ++ smulbb r4, r4, r0 ++ mov r0, r7 ++ bl __aeabi_uidivmod ++ add r0, r5, r1 ++ add r0, r4, r0 ++ uxth r0, r0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L1740: ++ .align 2 ++.L1739: ++ .word .LANCHOR2 ++ .fnend ++ .size V2P_block, .-V2P_block ++ .align 2 ++ .global P2V_plane ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type P2V_plane, %function ++P2V_plane: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1743 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r6, r0 ++ sub r2, r3, #1696 ++ sub r3, r3, #1664 ++ ldrh r5, [r2, #-12] ++ ldrh r1, [r3, #-4] ++ bl __aeabi_uidiv ++ mov r1, r5 ++ smulbb r4, r0, r5 ++ mov r0, r6 ++ bl __aeabi_uidivmod ++ add r1, r4, r1 ++ uxth r0, r1 ++ pop {r4, r5, r6, pc} ++.L1744: ++ .align 2 ++.L1743: ++ .word .LANCHOR2 ++ .fnend ++ .size P2V_plane, .-P2V_plane ++ .align 2 ++ .global P2V_block_in_plane ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type P2V_block_in_plane, %function ++P2V_block_in_plane: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, .L1747 ++ sub r3, r4, #1664 ++ sub r4, r4, #1696 ++ ldrh r1, [r3, #-4] ++ bl __aeabi_uidivmod ++ uxth r0, r1 ++ ldrh r1, [r4, #-12] ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ pop {r4, pc} ++.L1748: ++ .align 2 ++.L1747: ++ .word .LANCHOR2 ++ .fnend ++ .size P2V_block_in_plane, .-P2V_block_in_plane ++ .align 2 ++ .global ftl_cmp_data_ver ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_cmp_data_ver, %function ++ftl_cmp_data_ver: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r0, r1 ++ bls .L1750 ++ sub r0, r0, r1 ++ cmp r0, #-2147483648 ++ movhi r0, #0 ++ movls r0, #1 ++ bx lr ++.L1750: ++ sub r0, r1, r0 ++ cmp r0, #-2147483648 ++ movls r0, #0 ++ movhi r0, #1 ++ bx lr ++ .fnend ++ .size ftl_cmp_data_ver, .-ftl_cmp_data_ver ++ .align 2 ++ .global FtlGetLastWrittenPage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGetLastWrittenPage, %function ++FtlGetLastWrittenPage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 104 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1764 ++ cmp r1, #1 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ lsl r8, r0, #10 ++ .pad #104 ++ sub sp, sp, #104 ++ mov r2, r1 ++ mov r7, r1 ++ ldrheq r5, [r3] ++ mov r6, #0 ++ ldrhne r5, [r3, #-2] ++ add r3, sp, #40 ++ str r3, [sp, #16] ++ mov r1, #1 ++ add r0, sp, #4 ++ str r6, [sp, #12] ++ sub r5, r5, #1 ++ sxth r5, r5 ++ orr r3, r5, r8 ++ str r3, [sp, #8] ++ bl FlashReadPages ++ ldr r3, [sp, #40] ++ cmn r3, #1 ++ bne .L1755 ++.L1756: ++ cmp r6, r5 ++ ble .L1759 ++.L1755: ++ mov r0, r5 ++ add sp, sp, #104 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1759: ++ add r3, r6, r5 ++ mov r2, r7 ++ add r3, r3, r3, lsr #31 ++ mov r1, #1 ++ add r0, sp, #4 ++ asr r4, r3, #1 ++ sxth r3, r4 ++ orr r3, r3, r8 ++ str r3, [sp, #8] ++ bl FlashReadPages ++ ldr r3, [sp, #40] ++ cmn r3, #1 ++ bne .L1757 ++ ldr r3, [sp, #44] ++ cmn r3, #1 ++ bne .L1757 ++ ldr r3, [sp, #4] ++ cmn r3, #1 ++ subne r4, r4, #1 ++ sxthne r5, r4 ++ bne .L1756 ++.L1757: ++ add r4, r4, #1 ++ sxth r6, r4 ++ b .L1756 ++.L1765: ++ .align 2 ++.L1764: ++ .word .LANCHOR2-1664 ++ .fnend ++ .size FtlGetLastWrittenPage, .-FtlGetLastWrittenPage ++ .align 2 ++ .global FtlLoadBbt ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadBbt, %function ++FtlLoadBbt: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r4, .L1798 ++ ldr r3, [r4, #-1472] ++ sub r7, r4, #1664 ++ ldr r6, [r4, #-1440] ++ sub r8, r4, #1264 ++ sub r8, r8, #12 ++ str r3, [r4, #-1268] ++ str r6, [r4, #-1264] ++ bl FtlBbtMemInit ++ ldrh r5, [r7, #-4] ++ sub r5, r5, #1 ++ uxth r5, r5 ++.L1767: ++ ldrh r3, [r7, #-4] ++ sub r3, r3, #48 ++ cmp r5, r3 ++ ble .L1770 ++ lsl r3, r5, #10 ++ mov r2, #1 ++ mov r1, r2 ++ mov r0, r8 ++ str r3, [r4, #-1272] ++ bl FlashReadPages ++ ldr r3, [r4, #-1276] ++ cmn r3, #1 ++ bne .L1768 ++ ldr r3, [r4, #-1272] ++ mov r2, #1 ++ mov r1, r2 ++ mov r0, r8 ++ add r3, r3, #1 ++ str r3, [r4, #-1272] ++ bl FlashReadPages ++.L1768: ++ ldr r3, [r4, #-1276] ++ cmn r3, #1 ++ beq .L1769 ++ ldrh r2, [r6] ++ movw r3, #61649 ++ cmp r2, r3 ++ bne .L1769 ++ ldr r2, [r6, #4] ++ ldr r3, .L1798+4 ++ str r2, [r4, #-1340] ++ ldrh r2, [r6, #8] ++ strh r5, [r3, #-4] @ movhi ++ strh r2, [r3] @ movhi ++.L1770: ++ ldr r5, .L1798+4 ++ movw r2, #65535 ++ ldrh r3, [r5, #-4] ++ sub r7, r5, #4 ++ cmp r3, r2 ++ beq .L1784 ++ ldrh r3, [r7, #4] ++ cmp r3, r2 ++ beq .L1774 ++ lsl r3, r3, #10 ++ mov r2, #1 ++ mov r1, r2 ++ add r0, r5, #68 ++ str r3, [r4, #-1272] ++ bl FlashReadPages ++ ldr r3, [r4, #-1276] ++ cmn r3, #1 ++ beq .L1774 ++ ldrh r2, [r6] ++ movw r3, #61649 ++ cmp r2, r3 ++ bne .L1774 ++ ldr r3, [r6, #4] ++ ldr r2, [r4, #-1340] ++ cmp r3, r2 ++ ldrhhi r2, [r7, #4] ++ strhi r3, [r4, #-1340] ++ ldrhhi r3, [r6, #8] ++ strhhi r2, [r5, #-4] @ movhi ++ strhhi r3, [r7, #4] @ movhi ++.L1774: ++ ldr r8, .L1798+8 ++ mov r1, #1 ++ ldrh r0, [r5, #-4] ++ bl FtlGetLastWrittenPage ++ sxth r7, r0 ++ add r0, r0, #1 ++ strh r0, [r5, #-2] @ movhi ++.L1776: ++ cmp r7, #0 ++ blt .L1781 ++ ldrh r3, [r5, #-4] ++ mov r2, #1 ++ mov r1, r2 ++ mov r0, r8 ++ orr r3, r7, r3, lsl #10 ++ str r3, [r4, #-1272] ++ ldr r3, [r4, #-1472] ++ str r3, [r4, #-1268] ++ bl FlashReadPages ++ ldr r3, [r4, #-1276] ++ cmn r3, #1 ++ beq .L1777 ++ ldrh r2, [r6] ++ movw r3, #61649 ++ cmp r2, r3 ++ bne .L1777 ++.L1781: ++ ldrh r3, [r6, #10] ++ ldrh r0, [r6, #12] ++ strh r3, [r5, #2] @ movhi ++ movw r3, #65535 ++ cmp r0, r3 ++ bne .L1778 ++.L1779: ++ add r7, r5, #20 ++ mov r6, #0 ++.L1782: ++ ldr r3, .L1798+12 ++ ldrh r3, [r3] ++ cmp r6, r3 ++ bcc .L1783 ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L1769: ++ sub r5, r5, #1 ++ uxth r5, r5 ++ b .L1767 ++.L1777: ++ sub r7, r7, #1 ++ sxth r7, r7 ++ b .L1776 ++.L1778: ++ ldr r2, [r4, #-1736] ++ cmp r0, r2 ++ beq .L1779 ++ ldr r3, .L1798+16 ++ ldrh r3, [r3, #-10] ++ lsr r3, r3, #2 ++ cmp r2, r3 ++ cmpcc r0, r3 ++ bcs .L1779 ++ bl FtlSysBlkNumInit ++ b .L1779 ++.L1783: ++ ldrh r2, [r5, #-8] ++ ldr r1, [r4, #-1268] ++ ldr r0, [r7, #4]! ++ lsl r2, r2, #2 ++ mla r1, r6, r2, r1 ++ add r6, r6, #1 ++ bl ftl_memcpy ++ b .L1782 ++.L1784: ++ mvn r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L1799: ++ .align 2 ++.L1798: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1344 ++ .word .LANCHOR2-1276 ++ .word .LANCHOR2-1710 ++ .word .LANCHOR2-1712 ++ .fnend ++ .size FtlLoadBbt, .-FtlLoadBbt ++ .align 2 ++ .global FtlFreeSysBlkQueueInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueInit, %function ++FtlFreeSysBlkQueueInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1802 ++ mov r2, #2048 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, #0 ++ mov r1, r4 ++ strh r0, [r3, #-8] @ movhi ++ mov r0, r3 ++ strh r4, [r3, #-6] @ movhi ++ strh r4, [r3, #-4] @ movhi ++ strh r4, [r3, #-2] @ movhi ++ bl ftl_memset ++ mov r0, r4 ++ pop {r4, pc} ++.L1803: ++ .align 2 ++.L1802: ++ .word .LANCHOR2-1232 ++ .fnend ++ .size FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit ++ .align 2 ++ .global FtlFreeSysBlkQueueEmpty ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueEmpty, %function ++FtlFreeSysBlkQueueEmpty: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1805 ++ ldrh r0, [r3, #6] ++ clz r0, r0 ++ lsr r0, r0, #5 ++ bx lr ++.L1806: ++ .align 2 ++.L1805: ++ .word .LANCHOR2-1240 ++ .fnend ++ .size FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty ++ .align 2 ++ .global FtlFreeSysBlkQueueFull ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueFull, %function ++FtlFreeSysBlkQueueFull: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1808 ++ ldrh r0, [r3, #6] ++ sub r0, r0, #1024 ++ clz r0, r0 ++ lsr r0, r0, #5 ++ bx lr ++.L1809: ++ .align 2 ++.L1808: ++ .word .LANCHOR2-1240 ++ .fnend ++ .size FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull ++ .align 2 ++ .global FtlFreeSysBlkQueueIn ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueIn, %function ++FtlFreeSysBlkQueueIn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ sub r3, r0, #1 ++ movw r2, #65533 ++ uxth r3, r3 ++ cmp r3, r2 ++ bxhi lr ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r5, .L1823 ++ sub r3, r5, #1232 ++ ldrh r2, [r3, #-2] ++ mov r4, r3 ++ cmp r2, #1024 ++ popeq {r4, r5, r6, r7, r8, pc} ++ cmp r1, #0 ++ mov r6, r0 ++ beq .L1812 ++ ldr r3, [r5, #-1280] ++ cmp r3, #0 ++ bne .L1812 ++ bl P2V_block_in_plane ++ mov r7, r0 ++ ldr r0, [r5, #-1488] ++ lsl r3, r6, #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [r0, #4] ++ bl FlashEraseBlocks ++ ldr r2, [r5, #-1412] ++ lsl r0, r7, #1 ++ ldrh r3, [r2, r0] ++ add r3, r3, #1 ++ strh r3, [r2, r0] @ movhi ++ ldr r3, [r5, #-1572] ++ add r3, r3, #1 ++ str r3, [r5, #-1572] ++.L1812: ++ ldrh r2, [r4, #-2] ++ sub r3, r4, #8 ++ add r2, r2, #1 ++ strh r2, [r4, #-2] @ movhi ++ ldrh r2, [r4, #-4] ++ add r1, r3, r2, lsl #1 ++ add r2, r2, #1 ++ ubfx r2, r2, #0, #10 ++ strh r6, [r1, #8] @ movhi ++ strh r2, [r4, #-4] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L1824: ++ .align 2 ++.L1823: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn ++ .align 2 ++ .global FtlLowFormatEraseBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLowFormatEraseBlock, %function ++FtlLowFormatEraseBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1870 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r2, [r3, #-1280] ++ cmp r2, #0 ++ movne r4, #0 ++ bne .L1825 ++ mov r10, r3 ++ ldrb r3, [r3, #-1870] @ zero_extendqisi2 ++ ldrb r8, [r10, #-2740] @ zero_extendqisi2 ++ mov r7, r1 ++ mov fp, r2 ++ mov r5, r2 ++ mov r4, r2 ++ mov r9, #36 ++ str r0, [sp, #4] ++ str r3, [sp, #16] ++ str r0, [r10, #-1540] ++.L1827: ++ ldr r1, .L1870+4 ++ ldrh r0, [r1] ++ uxth r1, fp ++ cmp r0, r1 ++ bhi .L1831 ++ cmp r5, #0 ++ beq .L1825 ++ adds r8, r8, #0 ++ mov r6, #0 ++ movne r8, #1 ++ mov r2, r5 ++ mov r1, r8 ++ ldr r0, [r10, #-1488] ++ strb r6, [r10, #-1870] ++ mov r9, #36 ++ bl FlashEraseBlocks ++ ldrb r3, [sp, #16] @ zero_extendqisi2 ++ strb r3, [r10, #-1870] ++.L1833: ++ uxth r2, r6 ++ cmp r5, r2 ++ bhi .L1835 ++ cmp r7, #0 ++ bne .L1836 ++ uxth r8, r8 ++ mov r3, #6 ++ str r3, [sp, #12] ++ mov r3, #1 ++ str r3, [sp, #8] ++.L1837: ++ ldr r5, .L1870 ++ mov fp, #0 ++.L1846: ++ mov r10, #0 ++ mov r6, r10 ++.L1838: ++ ldr r3, .L1870+8 ++ ldrh r1, [r3, #-4] ++ uxth r3, r10 ++ cmp r1, r3 ++ bhi .L1841 ++ cmp r6, #0 ++ beq .L1825 ++ mov r3, #1 ++ mov r2, r8 ++ mov r9, #0 ++ mov r1, r6 ++ ldr r0, [r5, #-1488] ++ strb r9, [r5, #-1870] ++ bl FlashProgPages ++ ldrb r3, [sp, #16] @ zero_extendqisi2 ++ mov r2, #36 ++ strb r3, [r5, #-1870] ++.L1843: ++ uxth r3, r9 ++ cmp r6, r3 ++ bhi .L1845 ++ ldr r3, [sp, #12] ++ add fp, fp, r3 ++ ldr r3, [sp, #8] ++ uxth fp, fp ++ cmp r3, fp ++ bhi .L1846 ++ mov r9, #0 ++ mov fp, #36 ++.L1847: ++ uxth r3, r9 ++ cmp r6, r3 ++ bhi .L1849 ++ ldr r3, [sp, #4] ++ adds r7, r7, #0 ++ movne r7, #1 ++ cmp r3, #63 ++ movhi r10, r7 ++ orrls r10, r7, #1 ++ cmp r10, #0 ++ beq .L1825 ++ mov r2, r6 ++ mov r1, r8 ++ ldr r0, [r5, #-1488] ++ bl FlashEraseBlocks ++.L1825: ++ mov r0, r4 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1831: ++ uxth r1, fp ++ ldr ip, [r10, #-1488] ++ mov r3, #0 ++ mul r0, r9, r1 ++ str r3, [ip, r0] ++ add r0, r10, r1 ++ ldrb r0, [r0, #-1706] @ zero_extendqisi2 ++ ldr r1, [sp, #4] ++ bl V2P_block ++ cmp r7, #0 ++ mov r6, r0 ++ beq .L1828 ++ bl IsBlkInVendorPart ++ cmp r0, #0 ++ bne .L1829 ++.L1828: ++ mov r0, r6 ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ addne r4, r4, #1 ++ uxthne r4, r4 ++ bne .L1829 ++ ldr r1, .L1870+12 ++ lsl r6, r6, #10 ++ ldr ip, [r10, #-1488] ++ ldrh r1, [r1] ++ mla ip, r9, r5, ip ++ mul r1, r5, r1 ++ add r5, r5, #1 ++ uxth r5, r5 ++ str r0, [ip, #8] ++ str r6, [ip, #4] ++ add r0, r1, #3 ++ cmp r1, #0 ++ movlt r1, r0 ++ ldr r0, [r10, #-1436] ++ bic r1, r1, #3 ++ add r1, r0, r1 ++ str r1, [ip, #12] ++.L1829: ++ add fp, fp, #1 ++ b .L1827 ++.L1835: ++ mul r2, r9, r6 ++ ldr r1, [r10, #-1488] ++ add ip, r1, r2 ++ ldr r2, [r1, r2] ++ cmn r2, #1 ++ bne .L1834 ++ ldr r0, [ip, #4] ++ add r4, r4, #1 ++ uxth r4, r4 ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++.L1834: ++ add r6, r6, #1 ++ b .L1833 ++.L1836: ++ ldr r2, .L1870+16 ++ ldrh r3, [r2] ++ str r3, [sp, #8] ++ ldrb r3, [r10, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldreq r3, [sp, #8] ++ movne r8, #1 ++ moveq r8, #1 ++ strne r8, [sp, #12] ++ lsreq r3, r3, #2 ++ streq r3, [sp, #12] ++ b .L1837 ++.L1841: ++ uxth r3, r10 ++ mov r2, #36 ++ ldr r0, [r5, #-1488] ++ mul r1, r2, r3 ++ mov r2, #0 ++ add r3, r5, r3 ++ str r2, [r0, r1] ++ ldr r1, [sp, #4] ++ ldrb r0, [r3, #-1706] @ zero_extendqisi2 ++ bl V2P_block ++ cmp r7, #0 ++ mov r9, r0 ++ beq .L1839 ++ bl IsBlkInVendorPart ++ cmp r0, #0 ++ bne .L1840 ++.L1839: ++ mov r0, r9 ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ bne .L1840 ++ ldr r1, [r5, #-1488] ++ mov r3, #36 ++ add r9, fp, r9, lsl #10 ++ mla r1, r3, r6, r1 ++ ldr r3, [r5, #-1452] ++ str r3, [r1, #8] ++ ldr r3, .L1870+20 ++ str r9, [r1, #4] ++ ldrh r3, [r3, #-6] ++ mul r3, r6, r3 ++ add r6, r6, #1 ++ uxth r6, r6 ++ add r0, r3, #3 ++ cmp r3, #0 ++ movlt r3, r0 ++ ldr r0, [r5, #-1448] ++ bic r3, r3, #3 ++ add r3, r0, r3 ++ str r3, [r1, #12] ++.L1840: ++ add r10, r10, #1 ++ b .L1838 ++.L1845: ++ mul r3, r2, r9 ++ ldr r1, [r5, #-1488] ++ add ip, r1, r3 ++ ldr r3, [r1, r3] ++ cmp r3, #0 ++ beq .L1844 ++ ldr r0, [ip, #4] ++ add r4, r4, #1 ++ str r2, [sp, #20] ++ uxth r4, r4 ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++ ldr r2, [sp, #20] ++.L1844: ++ add r9, r9, #1 ++ b .L1843 ++.L1849: ++ cmp r7, #0 ++ beq .L1848 ++ mul r3, fp, r9 ++ ldr r2, [r5, #-1488] ++ add r1, r2, r3 ++ ldr r3, [r2, r3] ++ cmp r3, #0 ++ bne .L1848 ++ ldr r0, [r1, #4] ++ mov r1, #1 ++ ubfx r0, r0, #10, #16 ++ bl FtlFreeSysBlkQueueIn ++.L1848: ++ add r9, r9, #1 ++ b .L1847 ++.L1871: ++ .align 2 ++.L1870: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1732 ++ .word .LANCHOR2-1728 ++ .word .LANCHOR2-1654 ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2-1648 ++ .fnend ++ .size FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock ++ .align 2 ++ .global FtlFreeSysBLkSort ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBLkSort, %function ++FtlFreeSysBLkSort: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1885 ++ ldrh r2, [r3, #6] ++ cmp r2, #0 ++ bxeq lr ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ add lr, r3, #8 ++ add r2, lr, #2048 ++ ldrh ip, [r3, #2] ++ mov r4, #0 ++ ldrh r5, [r2, #28] ++ mov r0, r4 ++ ldrh r2, [r3, #4] ++ and r5, r5, #31 ++.L1874: ++ uxth r1, r4 ++ add r4, r4, #1 ++ cmp r5, r1 ++ bgt .L1875 ++ cmp r0, #0 ++ strhne ip, [lr, #-6] @ movhi ++ strhne r2, [lr, #-4] @ movhi ++ pop {r4, r5, pc} ++.L1875: ++ add r1, r3, ip, lsl #1 ++ add ip, ip, #1 ++ ubfx ip, ip, #0, #10 ++ ldrh r0, [r1, #8] ++ add r1, r3, r2, lsl #1 ++ strh r0, [r1, #8] @ movhi ++ mov r0, #1 ++ add r2, r2, r0 ++ ubfx r2, r2, #0, #10 ++ b .L1874 ++.L1886: ++ .align 2 ++.L1885: ++ .word .LANCHOR2-1240 ++ .fnend ++ .size FtlFreeSysBLkSort, .-FtlFreeSysBLkSort ++ .align 2 ++ .global FtlFreeSysBlkQueueOut ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlFreeSysBlkQueueOut, %function ++FtlFreeSysBlkQueueOut: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r4, .L1898 ++ sub r6, r4, #1232 ++ sub r7, r6, #8 ++.L1888: ++ ldrh r1, [r6, #-2] ++ sub r2, r6, #8 ++ cmp r1, #0 ++ beq .L1889 ++ ldrh r3, [r6, #-6] ++ sub r1, r1, #1 ++ ldr r9, [r4, #-1280] ++ strh r1, [r6, #-2] @ movhi ++ add r0, r2, r3, lsl #1 ++ cmp r9, #0 ++ add r3, r3, #1 ++ ubfx r3, r3, #0, #10 ++ ldrh r5, [r0, #8] ++ strh r3, [r6, #-6] @ movhi ++ bne .L1890 ++ mov r0, r5 ++ bl P2V_block_in_plane ++ mov r8, r0 ++ ldr r0, [r4, #-1488] ++ lsl r3, r5, #10 ++ str r3, [r0, #4] ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1891 ++ mov r2, #1 ++ mov r1, r9 ++ bl FlashEraseBlocks ++.L1891: ++ mov r2, #1 ++ ldr r0, [r4, #-1488] ++ mov r1, r2 ++ bl FlashEraseBlocks ++ ldr r2, [r4, #-1412] ++ lsl r0, r8, #1 ++ ldrh r3, [r2, r0] ++ add r3, r3, #1 ++ strh r3, [r2, r0] @ movhi ++ ldr r3, [r4, #-1572] ++ add r3, r3, #1 ++ str r3, [r4, #-1572] ++.L1890: ++ sub r3, r5, #1 ++ movw r2, #65533 ++ uxth r3, r3 ++ cmp r3, r2 ++ bls .L1893 ++ ldrh r2, [r7, #6] ++ mov r1, r5 ++ ldr r0, .L1898+4 ++ bl rk_printk ++ b .L1888 ++.L1889: ++ ldr r0, .L1898+8 ++ bl rk_printk ++.L1892: ++ b .L1892 ++.L1893: ++ mov r0, r5 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1899: ++ .align 2 ++.L1898: ++ .word .LANCHOR2 ++ .word .LC38 ++ .word .LC37 ++ .fnend ++ .size FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut ++ .align 2 ++ .global test_node_in_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type test_node_in_list, %function ++test_node_in_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1906 ++ str lr, [sp, #-4]! ++ .save {lr} ++ movw lr, #65535 ++ ldr r2, [r0] ++ ldr ip, [r3, #-1356] ++ sub r3, r2, ip ++ asr r0, r3, #1 ++ ldr r3, .L1906+4 ++ mul r3, r3, r0 ++ mov r0, #6 ++ uxth r3, r3 ++.L1902: ++ cmp r3, r1 ++ beq .L1903 ++ ldrh r3, [r2] ++ cmp r3, lr ++ beq .L1904 ++ mla r2, r0, r3, ip ++ b .L1902 ++.L1903: ++ mov r0, #1 ++ ldr pc, [sp], #4 ++.L1904: ++ mov r0, #0 ++ ldr pc, [sp], #4 ++.L1907: ++ .align 2 ++.L1906: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size test_node_in_list, .-test_node_in_list ++ .align 2 ++ .global insert_data_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type insert_data_list, %function ++insert_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r2, .L1924 ++ sub r4, r2, #1712 ++ ldrh r3, [r4, #-12] ++ cmp r3, r0 ++ bls .L1910 ++ mov lr, #6 ++ ldr r6, [r2, #-1356] ++ mul lr, lr, r0 ++ mvn ip, #0 ++ add r1, r6, lr ++ strh ip, [r1, #2] @ movhi ++ strh ip, [r6, lr] @ movhi ++ ldr r3, [r2, #864] ++ cmp r3, #0 ++ streq r1, [r2, #864] ++ beq .L1910 ++ ldr r8, [r2, #-1404] ++ lsl r10, r0, #1 ++ mov r5, r2 ++ ldrh r2, [r1, #4] ++ ldrh r4, [r4, #-12] ++ ldrh r7, [r8, r10] ++ cmp r2, #0 ++ str r4, [sp] ++ mulne ip, r2, r7 ++ ldr r7, [r5, #-1356] ++ sub r2, r3, r7 ++ asr r9, r2, #1 ++ ldr r2, .L1924+4 ++ mul r2, r2, r9 ++ ldr r9, [r5, #-1412] ++ add r4, r9, r10 ++ uxth r2, r2 ++ str r4, [sp, #4] ++ mov r4, #0 ++.L1919: ++ ldr r5, [sp] ++ add r4, r4, #1 ++ uxth r4, r4 ++ cmp r4, r5 ++ movls r5, #0 ++ movhi r5, #1 ++ cmp r0, r2 ++ orreq r5, r5, #1 ++ cmp r5, #0 ++ bne .L1910 ++ lsl r10, r2, #1 ++ ldrh r5, [r3, #4] ++ ldrh fp, [r8, r10] ++ cmp r5, #0 ++ mvneq r5, #0 ++ mulne r5, r5, fp ++ cmp ip, r5 ++ bne .L1915 ++ ldr r5, [sp, #4] ++ ldrh r10, [r9, r10] ++ ldrh r5, [r5] ++ cmp r10, r5 ++ bcc .L1917 ++.L1916: ++ strh r2, [r6, lr] @ movhi ++ ldr ip, .L1924 ++ ldrh r2, [r3, #2] ++ strh r2, [r1, #2] @ movhi ++ ldr r2, [ip, #864] ++ cmp r3, r2 ++ ldrhne lr, [r3, #2] ++ movne r2, #6 ++ ldrne r1, [ip, #-1356] ++ strheq r0, [r3, #2] @ movhi ++ streq r1, [ip, #864] ++ mulne r2, r2, lr ++ strhne r0, [r1, r2] @ movhi ++ strhne r0, [r3, #2] @ movhi ++ b .L1910 ++.L1915: ++ bcc .L1916 ++.L1917: ++ ldrh r5, [r3] ++ movw r10, #65535 ++ cmp r5, r10 ++ bne .L1918 ++ strh r2, [r1, #2] @ movhi ++ strh r0, [r3] @ movhi ++ ldr r3, .L1924 ++ str r1, [r3, #868] ++.L1910: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1918: ++ mov r3, #6 ++ mov r2, r5 ++ mla r3, r3, r5, r7 ++ b .L1919 ++.L1925: ++ .align 2 ++.L1924: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size insert_data_list, .-insert_data_list ++ .align 2 ++ .global INSERT_DATA_LIST ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type INSERT_DATA_LIST, %function ++INSERT_DATA_LIST: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl insert_data_list ++ ldr r2, .L1928 ++ ldrh r3, [r2] ++ add r3, r3, #1 ++ strh r3, [r2] @ movhi ++ pop {r4, pc} ++.L1929: ++ .align 2 ++.L1928: ++ .word .LANCHOR2+872 ++ .fnend ++ .size INSERT_DATA_LIST, .-INSERT_DATA_LIST ++ .align 2 ++ .global insert_free_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type insert_free_list, %function ++insert_free_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ movw r4, #65535 ++ cmp r0, r4 ++ beq .L1931 ++ ldr r2, .L1938 ++ mov r1, #6 ++ mul r5, r1, r0 ++ mvn r3, #0 ++ ldr r6, [r2, #-1356] ++ mov ip, r2 ++ add lr, r6, r5 ++ strh r3, [lr, #2] @ movhi ++ strh r3, [r6, r5] @ movhi ++ ldr r3, [r2, #876] ++ cmp r3, #0 ++ streq lr, [r2, #876] ++ beq .L1931 ++ ldr r8, [r2, #-1412] ++ lsl r2, r0, #1 ++ ldr r7, [ip, #-1356] ++ ldrh r9, [r8, r2] ++ sub r2, r3, r7 ++ asr r10, r2, #1 ++ ldr r2, .L1938+4 ++ mul r2, r2, r10 ++ mov r10, r1 ++ uxth r2, r2 ++.L1935: ++ lsl r1, r2, #1 ++ ldrh r1, [r8, r1] ++ cmp r1, r9 ++ bcs .L1933 ++ ldrh r1, [r3] ++ cmp r1, r4 ++ bne .L1934 ++ strh r2, [lr, #2] @ movhi ++ strh r0, [r3] @ movhi ++.L1931: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1934: ++ mla r3, r10, r1, r7 ++ mov r2, r1 ++ b .L1935 ++.L1933: ++ ldrh r1, [r3, #2] ++ strh r1, [lr, #2] @ movhi ++ strh r2, [r6, r5] @ movhi ++ ldr r2, [ip, #876] ++ cmp r3, r2 ++ ldrhne lr, [r3, #2] ++ movne r2, #6 ++ ldrne r1, [ip, #-1356] ++ strheq r0, [r3, #2] @ movhi ++ streq lr, [ip, #876] ++ mulne r2, r2, lr ++ strhne r0, [r1, r2] @ movhi ++ strhne r0, [r3, #2] @ movhi ++ b .L1931 ++.L1939: ++ .align 2 ++.L1938: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size insert_free_list, .-insert_free_list ++ .align 2 ++ .global INSERT_FREE_LIST ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type INSERT_FREE_LIST, %function ++INSERT_FREE_LIST: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl insert_free_list ++ ldr r2, .L1942 ++ ldrh r3, [r2] ++ add r3, r3, #1 ++ strh r3, [r2] @ movhi ++ pop {r4, pc} ++.L1943: ++ .align 2 ++.L1942: ++ .word .LANCHOR2+880 ++ .fnend ++ .size INSERT_FREE_LIST, .-INSERT_FREE_LIST ++ .align 2 ++ .global List_remove_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type List_remove_node, %function ++List_remove_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ mov ip, #6 ++ ldr r4, .L1950 ++ mul r1, ip, r1 ++ movw r5, #65535 ++ ldr r3, [r0] ++ ldr r2, [r4, #-1356] ++ add lr, r2, r1 ++ cmp lr, r3 ++ ldrh r3, [r2, r1] ++ bne .L1945 ++ cmp r3, r5 ++ mlane r3, ip, r3, r2 ++ moveq r3, #0 ++ streq r3, [r0] ++ strne r3, [r0] ++ mvnne r0, #0 ++ strhne r0, [r3, #2] @ movhi ++.L1947: ++ mvn r3, #0 ++ mov r0, #0 ++ strh r3, [r2, r1] @ movhi ++ strh r3, [lr, #2] @ movhi ++ pop {r4, r5, pc} ++.L1945: ++ cmp r3, r5 ++ ldrh r0, [lr, #2] ++ bne .L1948 ++ cmp r0, r3 ++ mulne r3, ip, r0 ++ mvnne r0, #0 ++ strhne r0, [r2, r3] @ movhi ++ b .L1947 ++.L1948: ++ mla r3, ip, r3, r2 ++ strh r0, [r3, #2] @ movhi ++ ldrh r3, [lr, #2] ++ ldrh r5, [r2, r1] ++ ldr r0, [r4, #-1356] ++ mul r3, ip, r3 ++ strh r5, [r0, r3] @ movhi ++ b .L1947 ++.L1951: ++ .align 2 ++.L1950: ++ .word .LANCHOR2 ++ .fnend ++ .size List_remove_node, .-List_remove_node ++ .align 2 ++ .global List_pop_index_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type List_pop_index_node, %function ++List_pop_index_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, [r0] ++ cmp r3, #0 ++ beq .L1958 ++ ldr r2, .L1963 ++ push {r4, lr} ++ .save {r4, lr} ++ movw lr, #65535 ++ mov r4, #6 ++ ldr r2, [r2, #-1356] ++.L1954: ++ cmp r1, #0 ++ bne .L1955 ++.L1957: ++ ldr r4, .L1963+4 ++ sub r3, r3, r2 ++ asr r3, r3, #1 ++ mul r4, r4, r3 ++ uxth r1, r4 ++ bl List_remove_node ++ uxth r0, r4 ++ pop {r4, pc} ++.L1955: ++ ldrh ip, [r3] ++ cmp ip, lr ++ beq .L1957 ++ sub r1, r1, #1 ++ mla r3, r4, ip, r2 ++ uxth r1, r1 ++ b .L1954 ++.L1958: ++ movw r0, #65535 ++ bx lr ++.L1964: ++ .align 2 ++.L1963: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size List_pop_index_node, .-List_pop_index_node ++ .align 2 ++ .global List_get_gc_head_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type List_get_gc_head_node, %function ++List_get_gc_head_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L1971 ++ ldr r3, [r2, #864] ++ cmp r3, #0 ++ ldrne r1, [r2, #-1356] ++ movne ip, #6 ++ movwne r2, #65535 ++ bne .L1967 ++.L1970: ++ movw r0, #65535 ++ bx lr ++.L1969: ++ sub r0, r0, #1 ++ mla r3, ip, r3, r1 ++ uxth r0, r0 ++.L1967: ++ cmp r0, #0 ++ beq .L1968 ++ ldrh r3, [r3] ++ cmp r3, r2 ++ bne .L1969 ++ b .L1970 ++.L1968: ++ ldr r0, .L1971+4 ++ sub r3, r3, r1 ++ asr r3, r3, #1 ++ mul r3, r0, r3 ++ uxth r0, r3 ++ bx lr ++.L1972: ++ .align 2 ++.L1971: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size List_get_gc_head_node, .-List_get_gc_head_node ++ .align 2 ++ .global List_update_data_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type List_update_data_list, %function ++List_update_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1984 ++ add r2, r3, #884 ++ ldrh r2, [r2] ++ cmp r2, r0 ++ beq .L1981 ++ add r2, r3, #932 ++ ldrh r2, [r2] ++ cmp r2, r0 ++ beq .L1981 ++ add r2, r3, #980 ++ ldrh r2, [r2] ++ cmp r2, r0 ++ beq .L1981 ++ push {r4, lr} ++ .save {r4, lr} ++ mov lr, #6 ++ mul lr, lr, r0 ++ ldr r1, [r3, #-1356] ++ ldr r2, [r3, #864] ++ add ip, r1, lr ++ cmp ip, r2 ++ beq .L1974 ++ ldr r4, [r3, #-1404] ++ lsl r3, r0, #1 ++ ldrh r2, [ip, #4] ++ ldrh r3, [r4, r3] ++ cmp r2, #0 ++ mvneq r2, #0 ++ mulne r2, r2, r3 ++ ldrh r3, [ip, #2] ++ movw ip, #65535 ++ cmp r3, ip ++ bne .L1976 ++ ldrh ip, [r1, lr] ++ cmp ip, r3 ++ beq .L1974 ++.L1976: ++ mov ip, #6 ++ mul ip, ip, r3 ++ ldr r3, .L1984+4 ++ asr lr, ip, #1 ++ add r1, r1, ip ++ mul r3, r3, lr ++ lsl r3, r3, #1 ++ ldrh lr, [r4, r3] ++ ldrh r3, [r1, #4] ++ cmp r3, #0 ++ mulne r3, r3, lr ++ mvneq r3, #0 ++ cmp r2, r3 ++ bcs .L1974 ++ mov r4, r0 ++ mov r1, r0 ++ ldr r0, .L1984+8 ++ bl List_remove_node ++ ldr r2, .L1984+12 ++ mov r0, r4 ++ ldrh r3, [r2] ++ sub r3, r3, #1 ++ strh r3, [r2] @ movhi ++ bl INSERT_DATA_LIST ++.L1974: ++ mov r0, #0 ++ pop {r4, pc} ++.L1981: ++ mov r0, #0 ++ bx lr ++.L1985: ++ .align 2 ++.L1984: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .word .LANCHOR2+864 ++ .word .LANCHOR2+872 ++ .fnend ++ .size List_update_data_list, .-List_update_data_list ++ .align 2 ++ .global ftl_free_no_use_map_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_free_no_use_map_blk, %function ++ftl_free_no_use_map_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r1, #0 ++ ldrh r2, [r0, #10] ++ mov r4, r0 ++ ldr r5, [r0, #20] ++ ldr r7, [r0, #12] ++ ldr r6, [r0, #24] ++ lsl r2, r2, #1 ++ mov r0, r5 ++ bl ftl_memset ++ mov r2, #0 ++.L1987: ++ ldrh r1, [r4, #6] ++ uxth r3, r2 ++ cmp r1, r3 ++ bhi .L1991 ++ ldr r3, .L2007 ++ mov r6, #0 ++ mov r8, r6 ++ mov r10, r6 ++ ldrh r2, [r3] ++ ldrh r3, [r4] ++ lsl r3, r3, #1 ++ strh r2, [r5, r3] @ movhi ++ ldrh r9, [r5] ++.L1992: ++ ldrh r3, [r4, #10] ++ uxth r1, r6 ++ cmp r3, r1 ++ bhi .L1996 ++ mov r0, r8 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1991: ++ uxth r3, r2 ++ mov r1, #0 ++ ldr r0, [r6, r3, lsl #2] ++ ubfx r0, r0, #10, #16 ++.L1988: ++ ldrh ip, [r4, #10] ++ uxth r3, r1 ++ cmp ip, r3 ++ addls r2, r2, #1 ++ bls .L1987 ++.L1990: ++ uxth r3, r1 ++ add r1, r1, #1 ++ lsl r3, r3, #1 ++ ldrh ip, [r7, r3] ++ adds lr, ip, #0 ++ movne lr, #1 ++ cmp r0, ip ++ movne lr, #0 ++ cmp lr, #0 ++ ldrhne ip, [r5, r3] ++ addne ip, ip, #1 ++ strhne ip, [r5, r3] @ movhi ++ b .L1988 ++.L1996: ++ uxth r3, r6 ++ lsl r3, r3, #1 ++ ldrh r2, [r5, r3] ++ cmp r9, r2 ++ bls .L1993 ++ ldrh r0, [r7, r3] ++ add fp, r7, r3 ++ cmp r0, #0 ++ bne .L1994 ++.L1995: ++ add r6, r6, #1 ++ b .L1992 ++.L1993: ++ cmp r2, #0 ++ bne .L1995 ++ ldrh r0, [r7, r3] ++ add fp, r7, r3 ++ cmp r0, #0 ++ beq .L1995 ++.L1997: ++ mov r1, #1 ++ bl FtlFreeSysBlkQueueIn ++ strh r10, [fp] @ movhi ++ ldrh r3, [r4, #8] ++ sub r3, r3, #1 ++ strh r3, [r4, #8] @ movhi ++ b .L1995 ++.L1994: ++ subs r9, r2, #0 ++ mov r8, r1 ++ beq .L1997 ++ b .L1995 ++.L2008: ++ .align 2 ++.L2007: ++ .word .LANCHOR2-1664 ++ .fnend ++ .size ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk ++ .align 2 ++ .global ftl_map_blk_alloc_new_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_map_blk_alloc_new_blk, %function ++ftl_map_blk_alloc_new_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r3, #0 ++ ldrh r1, [r0, #10] ++ ldr r2, [r0, #12] ++.L2010: ++ uxth r5, r3 ++ cmp r5, r1 ++ bcs .L2013 ++ mov r7, r2 ++ add r3, r3, #1 ++ ldrh r6, [r7] ++ add r2, r2, #2 ++ cmp r6, #0 ++ bne .L2010 ++ mov r4, r0 ++ bl FtlFreeSysBlkQueueOut ++ sub r3, r0, #1 ++ movw r2, #65533 ++ uxth r3, r3 ++ mov r1, r0 ++ strh r0, [r7] @ movhi ++ cmp r3, r2 ++ bls .L2011 ++ ldr r3, .L2017 ++ ldr r0, .L2017+4 ++ ldrh r2, [r3, #6] ++ bl rk_printk ++.L2012: ++ b .L2012 ++.L2011: ++ ldr r3, [r4, #28] ++ strh r6, [r4, #2] @ movhi ++ strh r5, [r4] @ movhi ++ add r3, r3, #1 ++ str r3, [r4, #28] ++ ldrh r3, [r4, #8] ++ add r3, r3, #1 ++ strh r3, [r4, #8] @ movhi ++.L2013: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L2018: ++ .align 2 ++.L2017: ++ .word .LANCHOR2-1240 ++ .word .LC39 ++ .fnend ++ .size ftl_map_blk_alloc_new_blk, .-ftl_map_blk_alloc_new_blk ++ .align 2 ++ .global FtlMapWritePage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMapWritePage, %function ++FtlMapWritePage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, r0 ++ ldr r5, .L2038 ++ mov r8, r1 ++ mov r10, r2 ++ mov r6, #0 ++ sub r9, r5, #1664 ++ mov fp, r9 ++.L2020: ++ ldr r3, [r5, #-1588] ++ add r3, r3, #1 ++ str r3, [r5, #-1588] ++ ldrh r3, [r9] ++ ldrh r2, [r4, #2] ++ sub r3, r3, #1 ++ cmp r2, r3 ++ bge .L2021 ++ ldrh r2, [r4] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L2022 ++.L2021: ++ mov r0, r4 ++ bl Ftl_write_map_blk_to_last_page ++.L2022: ++ ldr r1, [r5, #-1280] ++ cmp r1, #0 ++ bne .L2023 ++ ldrh r3, [r4] ++ ldr r2, [r4, #12] ++ ldr r0, [r5, #-1440] ++ lsl r3, r3, #1 ++ ldrh r7, [r2, r3] ++ mov r2, #16 ++ ldrh r3, [r4, #2] ++ str r10, [r5, #-1268] ++ str r0, [r5, #-1264] ++ orr r3, r3, r7, lsl #10 ++ str r3, [r5, #-1272] ++ bl ftl_memset ++ ldr r3, [r5, #-1264] ++ ldr r2, [r4, #28] ++ strh r8, [r3, #8] @ movhi ++ str r2, [r3, #4] ++ ldrh r2, [r4, #4] ++ str r3, [sp, #4] ++ strh r7, [r3, #2] @ movhi ++ strh r2, [r3] @ movhi ++ ldr r2, .L2038+4 ++ ldrb r2, [r2, #36] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L2024 ++ ldr r2, .L2038+8 ++ ldr r0, [r5, #-1268] ++ ldrh r1, [r2] ++ bl js_hash ++ ldr r3, [sp, #4] ++ str r0, [r3, #12] ++.L2024: ++ mov r3, #1 ++ ldr r0, .L2038+12 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldrh r3, [r4, #2] ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r3, [r4, #2] @ movhi ++ ldr r2, [r5, #-1276] ++ cmn r2, #1 ++ bne .L2025 ++ ldr r1, [r5, #-1272] ++ add r6, r6, #1 ++ ldr r0, .L2038+16 ++ uxth r6, r6 ++ bl rk_printk ++ ldrh r3, [r4, #2] ++ cmp r3, #2 ++ ldrhls r3, [fp] ++ subls r3, r3, #1 ++ strhls r3, [r4, #2] @ movhi ++ cmp r6, #3 ++ bls .L2020 ++ mov r2, r6 ++ ldr r1, [r5, #-1272] ++ ldr r0, .L2038+20 ++ bl rk_printk ++ mov r3, #1 ++ str r3, [r5, #-1280] ++.L2023: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2025: ++ cmp r2, #0 ++ strhne r7, [r4, #40] @ movhi ++ cmp r3, #1 ++ cmpne r2, #256 ++ beq .L2029 ++ ldr r3, [r4, #36] ++ cmp r3, #0 ++ beq .L2030 ++.L2029: ++ mov r3, #0 ++ str r3, [r4, #36] ++ b .L2020 ++.L2030: ++ ldr r2, [r5, #-1272] ++ ldr r3, [r4, #24] ++ str r2, [r3, r8, lsl #2] ++ b .L2023 ++.L2039: ++ .align 2 ++.L2038: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2-1656 ++ .word .LANCHOR2-1276 ++ .word .LC40 ++ .word .LC41 ++ .fnend ++ .size FtlMapWritePage, .-FtlMapWritePage ++ .align 2 ++ .global ftl_map_blk_gc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_map_blk_gc, %function ++ftl_map_blk_gc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, r0 ++ ldr r5, [r0, #12] ++ ldr r10, [r0, #24] ++ bl ftl_free_no_use_map_blk ++ ldrh r3, [r4, #10] ++ ldrh r2, [r4, #8] ++ sub r3, r3, #4 ++ cmp r2, r3 ++ blt .L2041 ++ uxth r0, r0 ++ lsl r0, r0, #1 ++ ldrh r9, [r5, r0] ++ cmp r9, #0 ++ beq .L2041 ++ ldr r3, [r4, #32] ++ cmp r3, #0 ++ bne .L2041 ++ mov r2, #1 ++ str r2, [r4, #32] ++ strh r3, [r5, r0] @ movhi ++ ldrh r3, [r4, #8] ++ ldrh r2, [r4, #2] ++ sub r3, r3, #1 ++ strh r3, [r4, #8] @ movhi ++ ldr r3, .L2053 ++ ldrh r3, [r3] ++ cmp r2, r3 ++ bcc .L2042 ++ mov r0, r4 ++ bl ftl_map_blk_alloc_new_blk ++.L2042: ++ ldr r5, .L2053+4 ++ mov r6, #0 ++ sub fp, r5, #1264 ++ sub fp, fp, #12 ++.L2043: ++ ldrh r2, [r4, #6] ++ uxth r3, r6 ++ cmp r2, r3 ++ bhi .L2048 ++ mov r1, #1 ++ mov r0, r9 ++ bl FtlFreeSysBlkQueueIn ++ mov r3, #0 ++ str r3, [r4, #32] ++.L2041: ++ ldr r3, .L2053 ++ ldrh r2, [r4, #2] ++ ldrh r3, [r3] ++ cmp r2, r3 ++ bcc .L2046 ++ mov r0, r4 ++ bl ftl_map_blk_alloc_new_blk ++ b .L2046 ++.L2048: ++ uxth r7, r6 ++ add r2, r10, r7, lsl #2 ++ str r2, [sp] ++ ldr r2, [r10, r7, lsl #2] ++ cmp r9, r2, lsr #10 ++ bne .L2044 ++ ldr r2, [r5, #-1468] ++ mov r0, fp ++ ldr r8, [r5, #-1440] ++ str r3, [sp, #4] ++ str r2, [r5, #-1268] ++ str r8, [r5, #-1264] ++ ldr r2, [r10, r7, lsl #2] ++ str r2, [r5, #-1272] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [r5, #-1276] ++ ldr r3, [sp, #4] ++ cmn r2, #1 ++ bne .L2045 ++.L2047: ++ ldr r2, [sp] ++ mov r3, #0 ++ ldr r0, .L2053+8 ++ str r3, [r2] ++ ldrh r2, [r8, #8] ++ ldr r1, [r5, #-1272] ++ bl rk_printk ++ mov r3, #1 ++ str r3, [r5, #-1280] ++.L2046: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2045: ++ ldrh r2, [r8, #8] ++ cmp r2, r3 ++ bne .L2047 ++ ldrh r2, [r8] ++ ldrh r3, [r4, #4] ++ cmp r2, r3 ++ bne .L2047 ++ ldr r2, [r5, #-1268] ++ mov r1, r7 ++ mov r0, r4 ++ bl FtlMapWritePage ++.L2044: ++ add r6, r6, #1 ++ b .L2043 ++.L2054: ++ .align 2 ++.L2053: ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2 ++ .word .LC42 ++ .fnend ++ .size ftl_map_blk_gc, .-ftl_map_blk_gc ++ .align 2 ++ .global Ftl_write_map_blk_to_last_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_write_map_blk_to_last_page, %function ++Ftl_write_map_blk_to_last_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r5, .L2066 ++ ldr r6, [r5, #-1280] ++ cmp r6, #0 ++ bne .L2056 ++ ldrh r3, [r0] ++ movw r2, #65535 ++ mov r4, r0 ++ ldr r7, [r0, #12] ++ cmp r3, r2 ++ bne .L2057 ++ ldrh r3, [r0, #8] ++ add r3, r3, #1 ++ strh r3, [r0, #8] @ movhi ++ bl FtlFreeSysBlkQueueOut ++ strh r0, [r7] @ movhi ++ ldr r3, [r4, #28] ++ strh r6, [r4, #2] @ movhi ++ strh r6, [r4] @ movhi ++ add r3, r3, #1 ++ str r3, [r4, #28] ++.L2056: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2057: ++ lsl r3, r3, #1 ++ ldr r8, [r0, #24] ++ mov r1, #255 ++ ldrh r9, [r7, r3] ++ ldrh r3, [r0, #2] ++ ldr r7, [r5, #-1440] ++ orr r3, r3, r9, lsl #10 ++ str r7, [r5, #-1264] ++ str r3, [r5, #-1272] ++ ldr r3, [r5, #-1472] ++ str r3, [r5, #-1268] ++ ldr r3, [r0, #28] ++ str r3, [r7, #4] ++ ldr r3, .L2066+4 ++ strh r3, [r7, #8] @ movhi ++ ldrh r3, [r0, #4] ++ strh r9, [r7, #2] @ movhi ++ strh r3, [r7] @ movhi ++ sub r3, r5, #1664 ++ ldrh r2, [r3] ++ ldr r0, [r5, #-1472] ++ lsl r2, r2, #3 ++ bl ftl_memset ++ mov r2, r6 ++ mov r3, r6 ++.L2058: ++ ldrh r0, [r4, #6] ++ uxth r1, r2 ++ cmp r0, r1 ++ bhi .L2060 ++ ldr r3, .L2066+8 ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2061 ++ ldr r3, .L2066+12 ++ ldr r0, [r5, #-1268] ++ ldrh r1, [r3, #-8] ++ bl js_hash ++ str r0, [r7, #12] ++.L2061: ++ mov r2, #1 ++ mov r3, #0 ++ mov r1, r2 ++ ldr r0, .L2066+16 ++ bl FlashProgPages ++ ldrh r3, [r4, #2] ++ mov r0, r4 ++ add r3, r3, #1 ++ strh r3, [r4, #2] @ movhi ++ bl ftl_map_blk_gc ++ b .L2056 ++.L2060: ++ uxth r1, r2 ++ ldr r0, [r8, r1, lsl #2] ++ cmp r9, r0, lsr #10 ++ bne .L2059 ++ ldr r0, [r5, #-1472] ++ add r3, r3, #1 ++ uxth r3, r3 ++ str r1, [r0, r3, lsl #3] ++ ldr r0, [r8, r1, lsl #2] ++ ldr r1, [r5, #-1472] ++ add r1, r1, r3, lsl #3 ++ str r0, [r1, #4] ++.L2059: ++ add r2, r2, #1 ++ b .L2058 ++.L2067: ++ .align 2 ++.L2066: ++ .word .LANCHOR2 ++ .word -1291 ++ .word .LANCHOR0 ++ .word .LANCHOR2-1648 ++ .word .LANCHOR2-1276 ++ .fnend ++ .size Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page ++ .align 2 ++ .global flush_l2p_region ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flush_l2p_region, %function ++flush_l2p_region: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, #12 ++ ldr r5, .L2070 ++ mul r4, r4, r0 ++ ldr r3, [r5, #-1364] ++ add r0, r5, #1024 ++ add r0, r0, #4 ++ add r2, r3, r4 ++ ldrh r1, [r3, r4] ++ ldr r2, [r2, #8] ++ bl FtlMapWritePage ++ ldr r3, [r5, #-1364] ++ mov r0, #0 ++ add r4, r3, r4 ++ ldr r3, [r4, #4] ++ bic r3, r3, #-2147483648 ++ str r3, [r4, #4] ++ pop {r4, r5, r6, pc} ++.L2071: ++ .align 2 ++.L2070: ++ .word .LANCHOR2 ++ .fnend ++ .size flush_l2p_region, .-flush_l2p_region ++ .align 2 ++ .global select_l2p_ram_region ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type select_l2p_ram_region, %function ++select_l2p_ram_region: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2083 ++ mov r1, #0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov ip, #12 ++ movw lr, #65535 ++ sub r2, r3, #1616 ++ ldrh r2, [r2, #-10] ++ ldr r3, [r3, #-1364] ++.L2073: ++ uxth r0, r1 ++ cmp r0, r2 ++ bcc .L2075 ++ mov r0, r2 ++ mov r1, #0 ++ mov ip, #-2147483648 ++ mov r5, #12 ++.L2076: ++ uxth r4, r1 ++ cmp r4, r2 ++ bcc .L2078 ++ cmp r0, r2 ++ popcc {r4, r5, r6, pc} ++ ldr r1, .L2083+4 ++ mov r0, r2 ++ mvn ip, #0 ++ ldrh r5, [r1] ++ mov r1, #0 ++.L2079: ++ uxth lr, r1 ++ cmp lr, r2 ++ bcc .L2081 ++ pop {r4, r5, r6, pc} ++.L2075: ++ add r1, r1, #1 ++ mla r4, ip, r1, r3 ++ ldrh r4, [r4, #-12] ++ cmp r4, lr ++ bne .L2073 ++ pop {r4, r5, r6, pc} ++.L2078: ++ mla lr, r5, r1, r3 ++ add r1, r1, #1 ++ ldr lr, [lr, #4] ++ cmp ip, lr ++ movls r6, #0 ++ movhi r6, #1 ++ cmp lr, #0 ++ movlt r6, #0 ++ cmp r6, #0 ++ movne ip, lr ++ movne r0, r4 ++ b .L2076 ++.L2081: ++ ldr r4, [r3, #4] ++ cmp ip, r4 ++ bls .L2080 ++ ldrh r6, [r3] ++ cmp r6, r5 ++ movne ip, r4 ++ movne r0, lr ++.L2080: ++ add r1, r1, #1 ++ add r3, r3, #12 ++ b .L2079 ++.L2084: ++ .align 2 ++.L2083: ++ .word .LANCHOR2 ++ .word .LANCHOR2+1072 ++ .fnend ++ .size select_l2p_ram_region, .-select_l2p_ram_region ++ .align 2 ++ .global log2phys ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type log2phys, %function ++log2phys: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r4, .L2101 ++ ldr r3, [r4, #-1284] ++ cmp r0, r3 ++ bcs .L2086 ++ sub fp, r4, #1648 ++ mov r9, r0 ++ ldrh r0, [fp, #-10] ++ mov r10, r1 ++ str r2, [sp, #8] ++ mov r5, #12 ++ ldr r2, [r4, #-1364] ++ add r3, r0, #7 ++ str fp, [sp, #4] ++ lsr r6, r9, r3 ++ str r3, [sp] ++ sub r3, r4, #1616 ++ uxth r8, r6 ++ ldrh r1, [r3, #-10] ++ mov r3, #0 ++.L2087: ++ uxth r7, r3 ++ cmp r7, r1 ++ bcc .L2092 ++ str r2, [sp, #12] ++ bl select_l2p_ram_region ++ mul r5, r5, r0 ++ ldr r2, [sp, #12] ++ mov r7, r0 ++ ldrh r1, [r2, r5] ++ add r3, r2, r5 ++ movw r2, #65535 ++ cmp r1, r2 ++ beq .L2093 ++ ldr r3, [r3, #4] ++ cmp r3, #0 ++ bge .L2093 ++ bl flush_l2p_region ++.L2093: ++ ldr r3, [r4, #-1376] ++ uxth r6, r6 ++ ldr fp, [r3, r6, lsl #2] ++ cmp fp, #0 ++ bne .L2094 ++ ldr r0, [r4, #-1364] ++ mov r1, #255 ++ ldr r3, [sp, #4] ++ add r0, r0, r5 ++ ldrh r2, [r3, #-8] ++ ldr r0, [r0, #8] ++ bl ftl_memset ++ ldr r2, [r4, #-1364] ++ strh r8, [r2, r5] @ movhi ++ ldr r2, [r4, #-1364] ++ add r5, r2, r5 ++ str fp, [r5, #4] ++ b .L2089 ++.L2086: ++ cmp r2, #0 ++ mvn r0, #0 ++ streq r0, [r1] ++.L2085: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2092: ++ add r3, r3, #1 ++ mla r0, r5, r3, r2 ++ ldrh r0, [r0, #-12] ++ cmp r0, r8 ++ bne .L2087 ++.L2089: ++ ldr r3, [sp] ++ mvn r0, #0 ++ bic r9, r9, r0, lsl r3 ++ ldr r3, [sp, #8] ++ uxth r9, r9 ++ cmp r3, #0 ++ mov r3, #12 ++ bne .L2090 ++ ldr r2, [r4, #-1364] ++ mla r3, r3, r7, r2 ++ ldr r3, [r3, #8] ++ ldr r3, [r3, r9, lsl #2] ++ str r3, [r10] ++.L2091: ++ ldr r2, [r4, #-1364] ++ mov r3, #12 ++ mov r0, #0 ++ mla r7, r3, r7, r2 ++ ldr r3, [r7, #4] ++ cmn r3, #1 ++ addne r3, r3, #1 ++ strne r3, [r7, #4] ++ b .L2085 ++.L2090: ++ mul r3, r3, r7 ++ ldr r2, [r4, #-1364] ++ ldr r1, [r10] ++ add r2, r2, r3 ++ ldr r2, [r2, #8] ++ str r1, [r2, r9, lsl #2] ++ ldr r2, [r4, #-1364] ++ add r3, r2, r3 ++ ldr r2, [r3, #4] ++ orr r2, r2, #-2147483648 ++ str r2, [r3, #4] ++ ldr r3, .L2101+4 ++ strh r8, [r3] @ movhi ++ b .L2091 ++.L2094: ++ ldr r2, [r4, #-1364] ++ ldr r0, .L2101+8 ++ str fp, [r4, #-1272] ++ add r2, r2, r5 ++ ldr r2, [r2, #8] ++ str r2, [r4, #-1268] ++ ldr r2, [r4, #-1440] ++ str r2, [r4, #-1264] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldr r2, [r4, #-1264] ++ ldrh r2, [r2, #8] ++ cmp r2, r8 ++ beq .L2095 ++ mov r2, fp ++ mov r1, r6 ++ ldr r0, .L2101+12 ++ bl rk_printk ++ mov r3, #4 ++ ldr r1, [r4, #-1264] ++ mov r2, r3 ++ ldr r0, .L2101+16 ++ bl rknand_print_hex ++ ldr r3, .L2101+20 ++ mov r2, #4 ++ ldr r1, [r4, #-1376] ++ ldr r0, .L2101+24 ++ ldrh r3, [r3, #-12] ++ bl rknand_print_hex ++ mov r3, #1 ++ str r3, [r4, #-1280] ++.L2096: ++ ldr r3, [r4, #-1364] ++ mov r1, #0 ++ add r2, r3, r5 ++ str r1, [r2, #4] ++ strh r8, [r3, r5] @ movhi ++ b .L2089 ++.L2095: ++ ldr r2, [r4, #-1276] ++ cmp r2, #256 ++ bne .L2096 ++ mov r2, fp ++ mov r1, r6 ++ ldr r0, .L2101+28 ++ bl rk_printk ++ ldr r3, [r4, #-1364] ++ mov r1, r6 ++ ldr r0, .L2101+32 ++ add r3, r3, r5 ++ ldr r2, [r3, #8] ++ bl FtlMapWritePage ++ b .L2096 ++.L2102: ++ .align 2 ++.L2101: ++ .word .LANCHOR2 ++ .word .LANCHOR2+1072 ++ .word .LANCHOR2-1276 ++ .word .LC43 ++ .word .LC18 ++ .word .LANCHOR2-1616 ++ .word .LC44 ++ .word .LC45 ++ .word .LANCHOR2+1028 ++ .fnend ++ .size log2phys, .-log2phys ++ .align 2 ++ .global FtlVendorPartWrite ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVendorPartWrite, %function ++FtlVendorPartWrite: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r2 ++ ldr r4, .L2113 ++ add r2, r0, r1 ++ .pad #60 ++ sub sp, sp, #60 ++ ldrh r3, [r4, #-6] ++ cmp r2, r3 ++ mvnhi r8, #0 ++ bhi .L2103 ++ add r4, r4, #1664 ++ mov r9, r0 ++ sub r3, r4, #1648 ++ mov r6, r1 ++ ldrh r7, [r3, #-10] ++ mov r8, #0 ++ str r3, [sp, #4] ++ lsr r7, r0, r7 ++ lsl fp, r7, #2 ++.L2105: ++ cmp r6, #0 ++ bne .L2110 ++.L2103: ++ mov r0, r8 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2110: ++ ldr r3, [r4, #-1380] ++ mov r0, r9 ++ ldr r2, [r3, fp] ++ ldr r3, [sp, #4] ++ str r2, [sp, #12] ++ ldrh r3, [r3, #-12] ++ mov r1, r3 ++ str r3, [sp, #8] ++ bl __aeabi_uidivmod ++ ldr r3, [sp, #8] ++ ldr r2, [sp, #12] ++ str r1, [sp] ++ sub r5, r3, r1 ++ uxth r5, r5 ++ cmp r6, r5 ++ uxthcc r5, r6 ++ cmp r2, #0 ++ cmpne r5, r3 ++ movne r1, #1 ++ moveq r1, #0 ++ beq .L2107 ++ ldr r3, [r4, #-1464] ++ add r0, sp, #20 ++ str r2, [sp, #24] ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [sp, #28] ++ mov r3, #0 ++ str r3, [sp, #32] ++ bl FlashReadPages ++.L2108: ++ lsl r3, r5, #9 ++ ldr r0, [r4, #-1464] ++ mov r1, r10 ++ mov r2, r3 ++ str r3, [sp, #8] ++ ldr r3, [sp] ++ sub r6, r6, r5 ++ add r9, r9, r5 ++ add fp, fp, #4 ++ add r0, r0, r3, lsl #9 ++ bl ftl_memcpy ++ mov r1, r7 ++ ldr r2, [r4, #-1464] ++ ldr r0, .L2113+4 ++ add r7, r7, #1 ++ bl FtlMapWritePage ++ ldr r3, [sp, #8] ++ cmn r0, #1 ++ mvneq r8, #0 ++ add r10, r10, r3 ++ b .L2105 ++.L2107: ++ ldr r3, [sp, #4] ++ ldr r0, [r4, #-1464] ++ ldrh r2, [r3, #-8] ++ bl ftl_memset ++ b .L2108 ++.L2114: ++ .align 2 ++.L2113: ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2+1076 ++ .fnend ++ .size FtlVendorPartWrite, .-FtlVendorPartWrite ++ .align 2 ++ .global FtlVendorPartRead ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVendorPartRead, %function ++FtlVendorPartRead: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r2 ++ ldr r5, .L2126 ++ add r2, r0, r1 ++ .pad #60 ++ sub sp, sp, #60 ++ ldrh r3, [r5, #-6] ++ cmp r2, r3 ++ mvnhi r8, #0 ++ bhi .L2115 ++ add r5, r5, #1664 ++ mov r9, r0 ++ sub r3, r5, #1648 ++ mov r7, r1 ++ ldrh r6, [r3, #-10] ++ mov r8, #0 ++ str r3, [sp, #8] ++ lsr r6, r0, r6 ++ lsl fp, r6, #2 ++.L2117: ++ cmp r7, #0 ++ bne .L2123 ++.L2115: ++ mov r0, r8 ++ add sp, sp, #60 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2123: ++ ldr r3, [r5, #-1380] ++ mov r0, r9 ++ ldr r3, [r3, fp] ++ str r3, [sp, #12] ++ ldr r3, [sp, #8] ++ ldrh r4, [r3, #-12] ++ mov r1, r4 ++ bl __aeabi_uidivmod ++ sub r4, r4, r1 ++ ldr r3, [sp, #12] ++ uxth r4, r4 ++ str r1, [sp, #4] ++ cmp r7, r4 ++ uxthcc r4, r7 ++ cmp r3, #0 ++ lsl r2, r4, #9 ++ str r2, [sp, #12] ++ beq .L2119 ++ ldr r2, [r5, #-1464] ++ add r0, sp, #20 ++ str r3, [sp, #24] ++ str r3, [sp, #12] ++ mov r3, #0 ++ str r2, [sp, #28] ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [sp, #32] ++ bl FlashReadPages ++ ldr r2, [sp, #20] ++ ldr r3, [sp, #12] ++ cmn r2, #1 ++ ldr r2, [r5, #-1276] ++ mvneq r8, #0 ++ cmp r2, #256 ++ bne .L2121 ++ mov r2, r3 ++ mov r1, r6 ++ ldr r0, .L2126+4 ++ bl rk_printk ++ ldr r2, [r5, #-1464] ++ mov r1, r6 ++ ldr r0, .L2126+8 ++ bl FtlMapWritePage ++.L2121: ++ ldr r1, [r5, #-1464] ++ lsl r2, r4, #9 ++ ldr r3, [sp, #4] ++ mov r0, r10 ++ add r1, r1, r3, lsl #9 ++ bl ftl_memcpy ++.L2122: ++ add r6, r6, #1 ++ sub r7, r7, r4 ++ add r9, r9, r4 ++ add r10, r10, r4, lsl #9 ++ add fp, fp, #4 ++ b .L2117 ++.L2119: ++ lsl r2, r4, #9 ++ mov r1, r3 ++ mov r0, r10 ++ bl ftl_memset ++ b .L2122 ++.L2127: ++ .align 2 ++.L2126: ++ .word .LANCHOR2-1664 ++ .word .LC46 ++ .word .LANCHOR2+1076 ++ .fnend ++ .size FtlVendorPartRead, .-FtlVendorPartRead ++ .align 2 ++ .global FtlUpdateVaildLpn ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlUpdateVaildLpn, %function ++FtlUpdateVaildLpn: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2137 ++ add r1, r3, #1120 ++ ldrh r2, [r1] ++ cmp r2, #4 ++ cmpls r0, #0 ++ bne .L2129 ++ add r2, r2, #1 ++ strh r2, [r1] @ movhi ++ bx lr ++.L2129: ++ mov r2, #0 ++ str lr, [sp, #-4]! ++ .save {lr} ++ strh r2, [r1] @ movhi ++ sub r1, r3, #1712 ++ movw lr, #65535 ++ str r2, [r3, #1124] ++ ldrh r1, [r1, #-12] ++ ldr r2, [r3, #-1404] ++ add r1, r2, r1, lsl #1 ++.L2130: ++ cmp r2, r1 ++ bne .L2132 ++ ldr pc, [sp], #4 ++.L2132: ++ ldrh ip, [r2], #2 ++ cmp ip, lr ++ ldrne r0, [r3, #1124] ++ addne r0, r0, ip ++ strne r0, [r3, #1124] ++ b .L2130 ++.L2138: ++ .align 2 ++.L2137: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlUpdateVaildLpn, .-FtlUpdateVaildLpn ++ .align 2 ++ .global FtlMapBlkWriteDumpData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMapBlkWriteDumpData, %function ++FtlMapBlkWriteDumpData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, [r0, #36] ++ cmp r3, #0 ++ bxeq lr ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r2, #0 ++ ldr r4, .L2149 ++ str r2, [r0, #36] ++ ldr r2, [r4, #-1280] ++ ldrh r5, [r0, #6] ++ ldr r3, [r0, #24] ++ cmp r2, #0 ++ popne {r4, r5, r6, pc} ++ mov r6, r0 ++ ldr r2, [r4, #-1440] ++ ldr r0, [r4, #-1468] ++ sub r5, r5, #1 ++ uxth r5, r5 ++ str r2, [r4, #-1264] ++ str r0, [r4, #-1268] ++ ldr r3, [r3, r5, lsl #2] ++ cmp r3, #0 ++ str r3, [r4, #-1272] ++ beq .L2143 ++ mov r2, #1 ++ ldr r0, .L2149+4 ++ mov r1, r2 ++ bl FlashReadPages ++.L2144: ++ ldr r2, [r4, #-1268] ++ mov r1, r5 ++ mov r0, r6 ++ pop {r4, r5, r6, lr} ++ b FtlMapWritePage ++.L2143: ++ sub r3, r4, #1648 ++ mov r1, #255 ++ ldrh r2, [r3, #-8] ++ bl ftl_memset ++ b .L2144 ++.L2150: ++ .align 2 ++.L2149: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1276 ++ .fnend ++ .size FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData ++ .align 2 ++ .global FtlVpcTblFlush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVpcTblFlush, %function ++FtlVpcTblFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L2169 ++ ldr r3, [r4, #-1280] ++ cmp r3, #0 ++ bne .L2153 ++ ldr r2, [r4, #-1472] ++ add r7, r4, #816 ++ ldr r6, [r4, #-1440] ++ sub r9, r4, #1648 ++ ldr r5, .L2169+4 ++ mov r1, #255 ++ str r2, [r4, #-1268] ++ movw r2, #1128 ++ ldrh r2, [r4, r2] ++ str r6, [r4, #-1264] ++ str r3, [r6, #12] ++ strh r2, [r6, #2] @ movhi ++ ldr r2, .L2169+8 ++ ldr r8, .L2169+12 ++ strh r2, [r6] @ movhi ++ ldr r2, [r4, #1136] ++ stmib r6, {r2, r3} ++ ldr r3, .L2169+16 ++ str r3, [r4, #816] ++ ldr r3, .L2169+20 ++ str r3, [r4, #820] ++ ldrh r3, [r5, #6] ++ strh r3, [r7, #8] @ movhi ++ sub r3, r4, #1696 ++ ldrh r3, [r3, #-14] ++ strb r3, [r4, #826] ++ add r3, r4, #884 ++ ldrh r2, [r3] ++ strh r2, [r7, #14] @ movhi ++ ldrh r2, [r3, #2] ++ ldrb r3, [r4, #890] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #6 ++ strh r3, [r7, #16] @ movhi ++ ldrb r3, [r4, #892] @ zero_extendqisi2 ++ strb r3, [r4, #827] ++ add r3, r4, #932 ++ ldrh r2, [r3] ++ strh r2, [r7, #18] @ movhi ++ ldrh r2, [r3, #2] ++ ldrb r3, [r4, #938] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #6 ++ strh r3, [r7, #20] @ movhi ++ ldrb r3, [r4, #940] @ zero_extendqisi2 ++ strb r3, [r4, #828] ++ add r3, r4, #980 ++ ldrh r2, [r3] ++ strh r2, [r7, #22] @ movhi ++ ldrh r2, [r3, #2] ++ ldrb r3, [r4, #986] @ zero_extendqisi2 ++ ldr r0, [r4, #-1268] ++ orr r3, r3, r2, lsl #6 ++ ldrh r2, [r9, #-8] ++ strh r3, [r7, #24] @ movhi ++ ldrb r3, [r4, #988] @ zero_extendqisi2 ++ strb r3, [r4, #829] ++ ldr r3, [r4, #-1580] ++ str r3, [r4, #848] ++ ldr r3, [r4, #-1612] ++ str r3, [r4, #856] ++ ldr r3, [r4, #-1608] ++ str r3, [r4, #852] ++ sub r3, r4, #1536 ++ ldrh r3, [r3] ++ strh r3, [r7, #44] @ movhi ++ sub r3, r4, #1520 ++ ldrh r3, [r3, #-14] ++ strh r3, [r7, #46] @ movhi ++ bl ftl_memset ++ mov r1, r7 ++ mov r2, #48 ++ sub r7, r4, #1712 ++ ldr r0, [r4, #-1268] ++ bl ftl_memcpy ++ ldrh r2, [r7, #-12] ++ ldr r0, [r4, #-1268] ++ ldr r1, [r4, #-1404] ++ lsl r2, r2, #1 ++ add r0, r0, #48 ++ bl ftl_memcpy ++ ldrh r0, [r7, #-12] ++ ldr r3, [r4, #-1268] ++ ldr r1, [r8, #32] ++ lsr r2, r0, #3 ++ lsl r0, r0, #1 ++ add r0, r0, #51 ++ add r2, r2, #4 ++ bic r0, r0, #3 ++ add r0, r3, r0 ++ bl ftl_memcpy ++ sub r3, r4, #1616 ++ str r9, [sp, #4] ++ ldrh r2, [r3, #-8] ++ cmp r2, #0 ++ beq .L2154 ++ ldrh r0, [r7, #-12] ++ ldrh r2, [r3, #-12] ++ ldr r1, [r4, #-1376] ++ lsr r3, r0, #3 ++ lsl r2, r2, #2 ++ add r3, r3, r0, lsl #1 ++ ldr r0, [r4, #-1268] ++ add r3, r3, #52 ++ ubfx r3, r3, #2, #14 ++ add r0, r0, r3, lsl #2 ++ bl ftl_memcpy ++.L2154: ++ ldr r10, .L2169+24 ++ mov r7, #0 ++ movw r9, #65535 ++ mov r0, #0 ++ bl FtlUpdateVaildLpn ++ mov fp, r10 ++.L2155: ++ ldr r3, [r4, #-1472] ++ ldrh r1, [r5, #2] ++ ldrh r2, [r5] ++ str r3, [r4, #-1268] ++ ldr r3, [r4, #-1440] ++ str r3, [r4, #-1264] ++ orr r3, r1, r2, lsl #10 ++ str r3, [r4, #-1272] ++ ldrh r3, [r10] ++ sub r3, r3, #1 ++ cmp r1, r3 ++ blt .L2156 ++ mov r3, #0 ++ ldrh r9, [r5, #4] ++ strh r3, [r5, #2] @ movhi ++ strh r2, [r5, #4] @ movhi ++ bl FtlFreeSysBlkQueueOut ++ ldr r3, [r4, #-1612] ++ strh r0, [r5] @ movhi ++ add r2, r3, #1 ++ str r3, [r4, #1136] ++ str r2, [r4, #-1612] ++ lsl r2, r0, #10 ++ str r2, [r4, #-1272] ++ str r3, [r6, #4] ++ strh r0, [r6, #2] @ movhi ++.L2156: ++ ldrb r3, [r8, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2157 ++ ldr r3, [sp, #4] ++ ldr r0, [r4, #-1472] ++ ldrh r1, [r3, #-8] ++ bl js_hash ++ str r0, [r6, #12] ++.L2157: ++ mov r3, #1 ++ ldr r0, .L2169+28 ++ mov r2, r3 ++ mov r1, r3 ++ bl FlashProgPages ++ ldrh r3, [r5, #2] ++ ldr r2, [r4, #-1276] ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmn r2, #1 ++ strh r3, [r5, #2] @ movhi ++ bne .L2158 ++ cmp r3, #1 ++ add r7, r7, #1 ++ ldrheq r3, [fp] ++ uxth r7, r7 ++ subeq r3, r3, #1 ++ strheq r3, [r5, #2] @ movhi ++ cmp r7, #3 ++ bls .L2155 ++ mov r2, r7 ++ ldr r1, [r4, #-1272] ++ ldr r0, .L2169+32 ++ bl rk_printk ++ mov r3, #1 ++ str r3, [r4, #-1280] ++.L2153: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2158: ++ cmp r3, #1 ++ cmpne r2, #256 ++ beq .L2155 ++ movw r3, #65535 ++ cmp r9, r3 ++ beq .L2153 ++ mov r1, #1 ++ mov r0, r9 ++ bl FtlFreeSysBlkQueueIn ++ b .L2153 ++.L2170: ++ .align 2 ++.L2169: ++ .word .LANCHOR2 ++ .word .LANCHOR2+1128 ++ .word -3932 ++ .word .LANCHOR0 ++ .word 1179929683 ++ .word 1342177379 ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2-1276 ++ .word .LC47 ++ .fnend ++ .size FtlVpcTblFlush, .-FtlVpcTblFlush ++ .align 2 ++ .global FtlScanSysBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlScanSysBlk, %function ++FtlScanSysBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r5, #0 ++ ldr r4, .L2250 ++ movw r3, #1144 ++ mov r1, r5 ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r2, [r4, #-1636] ++ sub r7, r4, #1280 ++ ldr r0, [r4, #-1368] ++ sub r6, r4, #1632 ++ strh r5, [r4, r3] @ movhi ++ strh r5, [r7, #-8] @ movhi ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldr r2, [r4, #-1636] ++ mov r1, r5 ++ ldr r0, [r4, #-1400] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldrh r2, [r6, #-12] ++ mov r1, r5 ++ ldr r0, [r4, #-1384] ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldrh r2, [r6, #-12] ++ mov r1, r5 ++ ldr r0, [r4, #-1392] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ mov r2, #16 ++ mov r1, #255 ++ ldr r0, .L2250+4 ++ bl ftl_memset ++ sub r3, r4, #1712 ++ str r7, [sp, #8] ++ ldrh r3, [r3, #-12] ++ str r6, [sp, #12] ++ str r3, [sp] ++ sub r3, r4, #1696 ++ sub r3, r3, #10 ++ str r3, [sp, #16] ++.L2172: ++ ldr r2, .L2250+8 ++ ldr r1, [sp] ++ ldrh r3, [r2] ++ cmp r3, r1 ++ bls .L2212 ++ mov r5, #0 ++ ldrh r3, [r2, #-10] ++ ldr r6, [r4, #-1500] ++ mov r7, r5 ++ ldr fp, [r4, #-1460] ++ mov r8, #36 ++ ldr r10, [r4, #-1432] ++ ldrh r9, [r2, #68] ++ b .L2213 ++.L2174: ++ str r3, [sp, #20] ++ ldr r3, [sp, #16] ++ ldr r1, [sp] ++ ldrb r0, [r3, r5] @ zero_extendqisi2 ++ bl V2P_block ++ str r0, [sp, #4] ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ ldr r3, [sp, #20] ++ bne .L2173 ++ ldr r2, [sp, #4] ++ mla r1, r8, r7, r6 ++ lsl r2, r2, #10 ++ stmib r1, {r2, fp} ++ mul r2, r9, r7 ++ add r7, r7, #1 ++ uxth r7, r7 ++ add r0, r2, #3 ++ cmp r2, #0 ++ movlt r2, r0 ++ bic r2, r2, #3 ++ add r2, r10, r2 ++ str r2, [r1, #12] ++.L2173: ++ add r5, r5, #1 ++.L2213: ++ uxth r2, r5 ++ cmp r3, r2 ++ bhi .L2174 ++ cmp r7, #0 ++ bne .L2175 ++.L2211: ++ ldr r3, [sp] ++ add r3, r3, #1 ++ uxth r3, r3 ++ str r3, [sp] ++ b .L2172 ++.L2175: ++ ldr r8, .L2250+4 ++ mov r2, #1 ++ mov r1, r7 ++ mov r0, r6 ++ bl FlashReadPages ++ add r9, r8, #16 ++ mov r3, #0 ++ str r3, [sp, #4] ++.L2176: ++ ldrh r3, [sp, #4] ++ cmp r7, r3 ++ bls .L2211 ++ ldr r3, [sp, #4] ++ mov r10, #36 ++ mul r10, r10, r3 ++ ldr r3, [r4, #-1500] ++ add r2, r3, r10 ++ ldr r3, [r3, r10] ++ ldr r5, [r2, #4] ++ ldr r6, [r2, #12] ++ cmn r3, #1 ++ ubfx r5, r5, #10, #16 ++ bne .L2179 ++ mov fp, #16 ++ movw r3, #65535 ++.L2181: ++ ldr r0, [r4, #-1500] ++ str r3, [sp, #20] ++ add r0, r0, r10 ++ ldr r2, [r0, #4] ++ add r2, r2, #1 ++ str r2, [r0, #4] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldrh r2, [r6] ++ ldr r3, [sp, #20] ++ cmp r2, r3 ++ bne .L2178 ++ ldr r3, [r4, #-1500] ++ mvn r2, #0 ++ str r2, [r3, r10] ++ ldr r3, [r4, #-1500] ++ ldr r3, [r3, r10] ++ cmp r3, r2 ++ beq .L2180 ++.L2179: ++ ldr r2, [r4, #-1612] ++ ldr r3, [r6, #4] ++ cmn r2, #1 ++ beq .L2182 ++ cmp r2, r3 ++ bhi .L2183 ++.L2182: ++ cmn r3, #1 ++ addne r2, r3, #1 ++ strne r2, [r4, #-1612] ++.L2183: ++ ldrh r2, [r6] ++ movw r1, #61604 ++ cmp r2, r1 ++ beq .L2185 ++ bhi .L2186 ++ movw r3, #61574 ++ cmp r2, r3 ++ beq .L2187 ++.L2184: ++ ldr r3, [sp, #4] ++ add r3, r3, #1 ++ str r3, [sp, #4] ++ b .L2176 ++.L2178: ++ ldr r2, [r4, #-1500] ++ ldr r2, [r2, r10] ++ cmn r2, #1 ++ bne .L2179 ++ sub fp, fp, #1 ++ uxth fp, fp ++ cmp fp, #0 ++ bne .L2181 ++.L2180: ++ ldrb r1, [r4, #-2740] @ zero_extendqisi2 ++ cmp r1, #0 ++ bne .L2249 ++.L2209: ++ mov r0, r5 ++ bl FtlFreeSysBlkQueueIn ++ b .L2184 ++.L2186: ++ movw r3, #61634 ++ cmp r2, r3 ++ beq .L2188 ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L2184 ++.L2249: ++ mov r1, #0 ++ b .L2209 ++.L2188: ++ ldr r0, [r4, #-1636] ++ ldrh r2, [r9] ++ ldr ip, [r4, #-1368] ++ uxth r1, r0 ++ sub r3, r1, #1 ++ sub r1, r1, r2 ++ sub r1, r1, #1 ++ sxth r3, r3 ++ sxth r1, r1 ++.L2190: ++ cmp r3, r1 ++ bgt .L2196 ++ cmp r3, #0 ++ bge .L2226 ++ b .L2184 ++.L2196: ++ ldr fp, [r6, #4] ++ lsl lr, r3, #2 ++ ldr r10, [ip, r3, lsl #2] ++ cmp fp, r10 ++ bls .L2191 ++ ldr r1, [ip] ++ cmp r1, #0 ++ bne .L2192 ++ cmp r0, r2 ++ addne r2, r2, #1 ++ strhne r2, [r9] @ movhi ++.L2192: ++ uxth ip, r3 ++ mov r1, #0 ++.L2193: ++ uxth r0, r1 ++ sxth r2, r1 ++ cmp r0, ip ++ bcc .L2194 ++ ldr r1, [r6, #4] ++ cmp r3, #0 ++ ldr r2, [r4, #-1368] ++ str r1, [r2, lr] ++ lsl r2, r3, #1 ++ ldr r1, [r4, #-1400] ++ strh r5, [r1, r2] @ movhi ++ blt .L2184 ++ ldrh r2, [r9] ++ ldr r1, [r4, #-1636] ++ sub r1, r1, r2 ++ sub r1, r1, #1 ++ sxth r1, r1 ++ cmp r3, r1 ++ bgt .L2184 ++.L2226: ++ add r2, r2, #1 ++ ldr r1, [r6, #4] ++ strh r2, [r9] @ movhi ++ ldr r2, [r4, #-1368] ++ str r1, [r2, r3, lsl #2] ++ lsl r3, r3, #1 ++ ldr r2, [r4, #-1400] ++.L2247: ++ strh r5, [r2, r3] @ movhi ++ b .L2184 ++.L2194: ++ ldr r0, [r4, #-1368] ++ add r1, r1, #1 ++ add r10, r0, r2, lsl #2 ++ ldr r10, [r10, #4] ++ str r10, [r0, r2, lsl #2] ++ lsl r2, r2, #1 ++ ldr r0, [r4, #-1400] ++ add r10, r0, r2 ++ ldrh r10, [r10, #2] ++ strh r10, [r0, r2] @ movhi ++ b .L2193 ++.L2191: ++ sub r3, r3, #1 ++ sxth r3, r3 ++ b .L2190 ++.L2187: ++ ldr r3, [sp, #12] ++ ldr r1, [sp, #8] ++ ldr ip, [r4, #-1384] ++ ldrh r2, [r3, #-12] ++ ldrh r1, [r1, #-8] ++ sub r0, r2, #1 ++ sxth r3, r0 ++ sub r0, r0, r1 ++.L2199: ++ cmp r3, r0 ++ ble .L2204 ++ ldr fp, [r6, #4] ++ lsl lr, r3, #2 ++ ldr r10, [ip, r3, lsl #2] ++ cmp fp, r10 ++ bls .L2200 ++ sub r2, r2, r1 ++ ldr r0, [ip] ++ clz r2, r2 ++ uxth ip, r3 ++ lsr r2, r2, #5 ++ cmp r0, #0 ++ orrne r2, r2, #1 ++ cmp r2, #0 ++ ldreq r2, .L2250+12 ++ addeq r1, r1, #1 ++ strheq r1, [r2] @ movhi ++ mov r1, #0 ++.L2202: ++ uxth r0, r1 ++ sxth r2, r1 ++ cmp r0, ip ++ bcc .L2203 ++ ldr r1, [r6, #4] ++ ldr r2, [r4, #-1384] ++ str r1, [r2, lr] ++ lsl r2, r3, #1 ++ ldr r1, [r4, #-1392] ++ strh r5, [r1, r2] @ movhi ++.L2204: ++ cmp r3, #0 ++ blt .L2184 ++ ldr r2, [sp, #8] ++ ldrh r1, [r2, #-8] ++ ldr r2, .L2250+16 ++ ldrh r2, [r2] ++ sub r2, r2, #1 ++ sub r2, r2, r1 ++ sxth r2, r2 ++ cmp r3, r2 ++ bgt .L2184 ++ ldr r2, [sp, #8] ++ add r1, r1, #1 ++ strh r1, [r2, #-8] @ movhi ++ ldr r2, [r4, #-1384] ++ ldr r1, [r6, #4] ++ str r1, [r2, r3, lsl #2] ++ lsl r3, r3, #1 ++ ldr r2, [r4, #-1392] ++ b .L2247 ++.L2203: ++ ldr r0, [r4, #-1384] ++ add r1, r1, #1 ++ add r10, r0, r2, lsl #2 ++ ldr r10, [r10, #4] ++ str r10, [r0, r2, lsl #2] ++ lsl r2, r2, #1 ++ ldr r0, [r4, #-1392] ++ add r10, r0, r2 ++ ldrh r10, [r10, #2] ++ strh r10, [r0, r2] @ movhi ++ b .L2202 ++.L2200: ++ sub r3, r3, #1 ++ sxth r3, r3 ++ b .L2199 ++.L2185: ++ ldrh r1, [r8] ++ movw r2, #65535 ++ cmp r1, r2 ++ strheq r5, [r8] @ movhi ++ beq .L2248 ++ ldrh r0, [r8, #4] ++ cmp r0, r2 ++ beq .L2207 ++ mov r1, #1 ++ bl FtlFreeSysBlkQueueIn ++.L2207: ++ ldr r3, [r6, #4] ++ ldr r2, [r4, #1136] ++ cmp r2, r3 ++ strhcs r5, [r8, #4] @ movhi ++ bcs .L2184 ++ ldrh r3, [r8] ++ strh r5, [r8] @ movhi ++ strh r3, [r8, #4] @ movhi ++ ldr r3, [r6, #4] ++.L2248: ++ str r3, [r4, #1136] ++ b .L2184 ++.L2212: ++ ldr r1, [r4, #-1400] ++ ldrh r3, [r1] ++ cmp r3, #0 ++ beq .L2214 ++.L2217: ++ ldr r1, [r4, #-1392] ++ ldrh r2, [r1] ++ cmp r2, #0 ++ beq .L2215 ++.L2237: ++ mov r0, #0 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2214: ++ movw r2, #1144 ++ ldrh r2, [r4, r2] ++ cmp r2, #0 ++ ldrne r0, [r4, #-1636] ++ beq .L2217 ++.L2218: ++ sxth r2, r3 ++ cmp r2, r0 ++ bcs .L2217 ++ lsl ip, r2, #1 ++ add r3, r3, #1 ++ ldrh ip, [r1, ip] ++ cmp ip, #0 ++ beq .L2218 ++ mov r3, r2 ++ mov lr, #0 ++.L2219: ++ ldr r1, [r4, #-1636] ++ cmp r3, r1 ++ bcs .L2217 ++ ldr r0, [r4, #-1400] ++ lsl r1, r3, #1 ++ sub ip, r3, r2 ++ lsl r5, ip, #1 ++ ldrh r6, [r0, r1] ++ strh r6, [r0, r5] @ movhi ++ ldr r0, [r4, #-1368] ++ ldr r5, [r0, r3, lsl #2] ++ add r3, r3, #1 ++ sxth r3, r3 ++ str r5, [r0, ip, lsl #2] ++ ldr r0, [r4, #-1400] ++ strh lr, [r0, r1] @ movhi ++ b .L2219 ++.L2215: ++ ldr r3, .L2250+20 ++ ldrh r0, [r3, #-8] ++ cmp r0, #0 ++ subne r3, r3, #352 ++ ldrhne r0, [r3, #-12] ++ beq .L2237 ++.L2222: ++ sxth r3, r2 ++ cmp r3, r0 ++ mov lr, r3 ++ bge .L2237 ++ lsl ip, r3, #1 ++ add r2, r2, #1 ++ ldrh ip, [r1, ip] ++ cmp ip, #0 ++ beq .L2222 ++ mov ip, #0 ++.L2223: ++ ldr r2, [sp, #12] ++ ldrh r2, [r2, #-12] ++ cmp r3, r2 ++ bge .L2237 ++ ldr r1, [r4, #-1392] ++ lsl r2, r3, #1 ++ sub r0, r3, lr ++ lsl r5, r0, #1 ++ ldrh r6, [r1, r2] ++ strh r6, [r1, r5] @ movhi ++ ldr r1, [r4, #-1384] ++ ldr r5, [r1, r3, lsl #2] ++ add r3, r3, #1 ++ sxth r3, r3 ++ str r5, [r1, r0, lsl #2] ++ ldr r1, [r4, #-1392] ++ strh ip, [r1, r2] @ movhi ++ b .L2223 ++.L2251: ++ .align 2 ++.L2250: ++ .word .LANCHOR2 ++ .word .LANCHOR2+1128 ++ .word .LANCHOR2-1722 ++ .word .LANCHOR2-1288 ++ .word .LANCHOR2-1644 ++ .word .LANCHOR2-1280 ++ .fnend ++ .size FtlScanSysBlk, .-FtlScanSysBlk ++ .align 2 ++ .global FtlLoadEctTbl ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadEctTbl, %function ++FtlLoadEctTbl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r0, #64 ++ ldr r4, .L2255 ++ sub r5, r4, #1424 ++ ldr r2, [r4, #-1416] ++ ldrh r1, [r5] ++ bl FtlVendorPartRead ++ ldr r3, [r4, #-1416] ++ ldr r2, [r3] ++ ldr r3, .L2255+4 ++ cmp r2, r3 ++ beq .L2253 ++ ldr r1, .L2255+8 ++ ldr r0, .L2255+12 ++ bl rk_printk ++ ldrh r2, [r5] ++ mov r1, #0 ++ ldr r0, [r4, #-1416] ++ lsl r2, r2, #9 ++ bl ftl_memset ++.L2253: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L2256: ++ .align 2 ++.L2255: ++ .word .LANCHOR2 ++ .word 1112818501 ++ .word .LC48 ++ .word .LC49 ++ .fnend ++ .size FtlLoadEctTbl, .-FtlLoadEctTbl ++ .align 2 ++ .global ftl_set_blk_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_set_blk_mode, %function ++ftl_set_blk_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r1, #0 ++ mov r3, r0 ++ beq .L2258 ++ b ftl_set_blk_mode.part.17 ++.L2258: ++ ldr r2, .L2259 ++ lsr r0, r0, #5 ++ and r3, r3, #31 ++ mov ip, #1 ++ ldr r1, [r2, #32] ++ ldr r2, [r1, r0, lsl #2] ++ bic r3, r2, ip, lsl r3 ++ str r3, [r1, r0, lsl #2] ++ bx lr ++.L2260: ++ .align 2 ++.L2259: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_set_blk_mode, .-ftl_set_blk_mode ++ .align 2 ++ .global ftl_get_blk_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_get_blk_mode, %function ++ftl_get_blk_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L2262 ++ lsr r2, r0, #5 ++ and r0, r0, #31 ++ ldr r3, [r3, #32] ++ ldr r3, [r3, r2, lsl #2] ++ lsr r0, r3, r0 ++ and r0, r0, #1 ++ bx lr ++.L2263: ++ .align 2 ++.L2262: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_get_blk_mode, .-ftl_get_blk_mode ++ .align 2 ++ .global FtlCheckVpc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlCheckVpc, %function ++FtlCheckVpc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, #0 ++ ldr r6, .L2285 ++ ldr r7, .L2285+4 ++ ldr r1, .L2285+8 ++ mov r5, r6 ++ ldr r0, .L2285+12 ++ bl rk_printk ++ mov r2, #8192 ++ mov r1, #0 ++ ldr r0, .L2285+4 ++ bl memset ++.L2265: ++ ldr r3, [r6, #-1284] ++ cmp r4, r3 ++ bcc .L2267 ++ ldr r8, .L2285+4 ++ mov r4, #0 ++ ldr r9, .L2285+16 ++ mov r6, r4 ++.L2268: ++ ldr r3, .L2285+20 ++ ldrh r2, [r3] ++ uxth r3, r4 ++ cmp r2, r3 ++ bhi .L2270 ++ ldr r4, [r5, #876] ++ cmp r4, #0 ++ beq .L2271 ++ ldr r3, .L2285+24 ++ mov r7, #0 ++ ldr r9, .L2285+4 ++ mov fp, #6 ++ ldr r10, .L2285+28 ++ ldrh r8, [r3] ++ ldr r3, [r5, #-1356] ++ sub r4, r4, r3 ++ ldr r3, .L2285+32 ++ asr r4, r4, #1 ++ mul r4, r3, r4 ++ uxth r4, r4 ++.L2272: ++ uxth r3, r7 ++ cmp r8, r3 ++ bls .L2271 ++ ldr r2, [r5, #-1404] ++ lsl r3, r4, #1 ++ ldrh r2, [r2, r3] ++ cmp r2, #0 ++ beq .L2273 ++ mov r6, #1 ++ ldrh r3, [r9, r3] ++ mov r1, r4 ++ mov r0, r10 ++ bl rk_printk ++.L2273: ++ mul r4, fp, r4 ++ ldr r3, [r5, #-1356] ++ add r7, r7, #1 ++ ldrh r4, [r3, r4] ++ movw r3, #65535 ++ cmp r4, r3 ++ bne .L2272 ++.L2271: ++ mov r1, r6 ++ ldr r0, .L2285+36 ++ bl rk_printk ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2267: ++ mov r2, #0 ++ add r1, sp, #4 ++ mov r0, r4 ++ bl log2phys ++ ldr r0, [sp, #4] ++ cmn r0, #1 ++ beq .L2266 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ lsl r0, r0, #1 ++ ldrh r3, [r7, r0] ++ add r3, r3, #1 ++ strh r3, [r7, r0] @ movhi ++.L2266: ++ add r4, r4, #1 ++ b .L2265 ++.L2270: ++ uxth r1, r4 ++ ldr r3, [r5, #-1404] ++ lsl r7, r1, #1 ++ ldrh r2, [r3, r7] ++ ldrh r3, [r8, r7] ++ cmp r2, r3 ++ beq .L2269 ++ mov r0, r9 ++ bl rk_printk ++ ldr r3, [r5, #-1404] ++ movw r2, #65535 ++ ldrh r3, [r3, r7] ++ cmp r3, r2 ++ beq .L2269 ++ ldrh r2, [r8, r7] ++ cmp r2, r3 ++ movhi r6, #1 ++.L2269: ++ add r4, r4, #1 ++ b .L2268 ++.L2286: ++ .align 2 ++.L2285: ++ .word .LANCHOR2 ++ .word check_valid_page_count_table ++ .word .LANCHOR3+141 ++ .word .LC50 ++ .word .LC51 ++ .word .LANCHOR2-1724 ++ .word .LANCHOR2+880 ++ .word .LC52 ++ .word -1431655765 ++ .word .LC53 ++ .fnend ++ .size FtlCheckVpc, .-FtlCheckVpc ++ .align 2 ++ .global FtlDumpSysBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlDumpSysBlock, %function ++FtlDumpSysBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ lsl r8, r0, #10 ++ ldr r4, .L2295 ++ .pad #28 ++ sub sp, sp, #28 ++ mov r7, r0 ++ mov r5, #0 ++ ldr r3, [r4, #-1472] ++ sub r6, r4, #1264 ++ sub r9, r4, #1664 ++ sub r6, r6, #12 ++ str r3, [r4, #-1268] ++ ldr r3, [r4, #-1440] ++ str r3, [r4, #-1264] ++.L2288: ++ ldrh r2, [r9] ++ sxth r3, r5 ++ cmp r3, r2 ++ blt .L2290 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L2290: ++ mov r2, #1 ++ orr r3, r3, r8 ++ mov r1, r2 ++ mov r0, r6 ++ str r3, [r4, #-1272] ++ bl FlashReadPages ++ ldr r2, [r4, #-1268] ++ mov r1, r7 ++ ldr r3, [r4, #-1264] ++ ldr r0, .L2295+4 ++ ldr r2, [r2] ++ str r2, [sp, #16] ++ ldr r2, [r3, #12] ++ str r2, [sp, #12] ++ ldr r2, [r3, #8] ++ str r2, [sp, #8] ++ ldr r2, [r3, #4] ++ str r2, [sp, #4] ++ ldr r3, [r3] ++ ldr r2, [r4, #-1276] ++ str r3, [sp] ++ ldr r3, [r4, #-1272] ++ bl rk_printk ++ ldr r3, [r4, #-1264] ++ ldr r3, [r3] ++ cmn r3, #1 ++ beq .L2289 ++ mov r3, #768 ++ mov r2, #4 ++ ldr r1, [r4, #-1472] ++ ldr r0, .L2295+8 ++ bl rknand_print_hex ++.L2289: ++ add r5, r5, #1 ++ b .L2288 ++.L2296: ++ .align 2 ++.L2295: ++ .word .LANCHOR2 ++ .word .LC54 ++ .word .LC55 ++ .fnend ++ .size FtlDumpSysBlock, .-FtlDumpSysBlock ++ .align 2 ++ .global Ftlscanalldata ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftlscanalldata, %function ++Ftlscanalldata: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, #0 ++ ldr r6, .L2306 ++ .pad #32 ++ sub sp, sp, #32 ++ mov r1, #0 ++ ldr r8, .L2306+4 ++ mov r4, r6 ++ ldr r0, .L2306+8 ++ bl rk_printk ++.L2298: ++ ldr r3, [r6, #-1284] ++ cmp r5, r3 ++ bcc .L2304 ++ add sp, sp, #32 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L2304: ++ mov r2, #0 ++ add r1, sp, #28 ++ mov r0, r5 ++ bl log2phys ++ ubfx r3, r5, #0, #11 ++ cmp r3, #0 ++ bne .L2299 ++ ldr r2, [sp, #28] ++ mov r1, r5 ++ mov r0, r8 ++ bl rk_printk ++.L2299: ++ ldr r3, [sp, #28] ++ cmn r3, #1 ++ beq .L2301 ++ str r3, [r4, #-1272] ++ mov r2, #0 ++ ldr r3, [r4, #-1472] ++ mov r1, #1 ++ ldr r7, [r4, #-1440] ++ ldr r0, .L2306+12 ++ str r3, [r4, #-1268] ++ str r5, [r4, #-1260] ++ str r7, [r4, #-1264] ++ str r2, [r4, #-1276] ++ bl FlashReadPages ++ ldr r3, [r4, #-1276] ++ cmn r3, #1 ++ cmpne r3, #256 ++ beq .L2302 ++ ldr r3, [r7, #8] ++ cmp r5, r3 ++ beq .L2301 ++.L2302: ++ ldr r2, [r4, #-1268] ++ ldr r3, [r4, #-1264] ++ ldr r0, .L2306+16 ++ ldr r1, [r2, #4] ++ str r1, [sp, #16] ++ mov r1, r5 ++ ldr r2, [r2] ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r3, [r3] ++ ldr r2, [r4, #-1272] ++ bl rk_printk ++.L2301: ++ add r5, r5, #1 ++ b .L2298 ++.L2307: ++ .align 2 ++.L2306: ++ .word .LANCHOR2 ++ .word .LC57 ++ .word .LC56 ++ .word .LANCHOR2-1276 ++ .word .LC58 ++ .fnend ++ .size Ftlscanalldata, .-Ftlscanalldata ++ .align 2 ++ .global dump_map_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type dump_map_info, %function ++dump_map_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r8, .L2323 ++ ldrh r6, [r8, #-12] ++ add fp, r8, #6 ++.L2309: ++ ldrh r3, [r8, #-10] ++ ldr r1, .L2323+4 ++ cmp r3, r6 ++ mov r4, r1 ++ bhi .L2316 ++ sub r8, r1, #1264 ++ mov r7, #0 ++ sub r8, r8, #12 ++.L2317: ++ ldr r3, .L2323+8 ++ sxth r5, r7 ++ ldrh r3, [r3] ++ cmp r5, r3 ++ bge .L2320 ++ lsl r5, r5, #1 ++ mov r6, #0 ++ ldr r9, .L2323+12 ++ b .L2321 ++.L2311: ++ mov r1, r6 ++ ldrb r0, [fp, r7] @ zero_extendqisi2 ++ str r3, [sp, #36] ++ str r2, [sp, #32] ++ bl V2P_block ++ str r0, [sp, #28] ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ ldr r2, [sp, #32] ++ ldr r3, [sp, #36] ++ bne .L2310 ++ mov r1, #36 ++ mla r0, r1, r5, r9 ++ ldr r1, [sp, #28] ++ lsl r1, r1, #10 ++ stmib r0, {r1, r3} ++ ldr r1, [sp, #24] ++ mul r1, r1, r5 ++ add r5, r5, #1 ++ uxth r5, r5 ++ add ip, r1, #3 ++ cmp r1, #0 ++ movlt r1, ip ++ bic r1, r1, #3 ++ add r1, r10, r1 ++ str r1, [r0, #12] ++.L2310: ++ add r7, r7, #1 ++.L2318: ++ uxth r1, r7 ++ cmp r2, r1 ++ bhi .L2311 ++ cmp r5, #0 ++ bne .L2312 ++.L2315: ++ add r6, r6, #1 ++ uxth r6, r6 ++ b .L2309 ++.L2312: ++ ldr r10, .L2323+16 ++ mov r0, r9 ++ mov r7, #0 ++ mov r9, #36 ++ mov r2, #1 ++ mov r1, r5 ++ bl FlashReadPages ++.L2313: ++ uxth r3, r7 ++ cmp r5, r3 ++ bls .L2315 ++ ldr r3, [r4, #-1500] ++ mla r3, r9, r7, r3 ++ add r7, r7, #1 ++ ldr r1, [r3, #12] ++ ldr r2, [r3, #4] ++ ldr r3, [r3, #8] ++ ldr r0, [r3, #4] ++ str r0, [sp, #16] ++ mov r0, r10 ++ ldr r3, [r3] ++ str r3, [sp, #12] ++ ldr r3, [r1, #12] ++ str r3, [sp, #8] ++ ldr r3, [r1, #8] ++ str r3, [sp, #4] ++ ldr r3, [r1, #4] ++ str r3, [sp] ++ ldr r3, [r1] ++ ubfx r1, r2, #10, #16 ++ bl rk_printk ++ b .L2313 ++.L2316: ++ sub r0, r1, #1728 ++ ldr r9, [r1, #-1500] ++ ldr r3, [r1, #-1460] ++ mov r7, #0 ++ ldr r10, [r1, #-1432] ++ mov r5, r7 ++ ldrh r1, [r0, #74] ++ ldrh r2, [r0, #-4] ++ str r1, [sp, #24] ++ b .L2318 ++.L2319: ++ ldr r2, [r4, #-1400] ++ mov r0, r8 ++ ldrh r2, [r2, r5] ++ orr r3, r3, r2, lsl #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [r4, #-1272] ++ bl FlashReadPages ++ ldr r2, [r4, #-1268] ++ ldr r1, [r4, #-1400] ++ ldr r3, [r4, #-1264] ++ ldr r0, [r2, #4] ++ ldrh r1, [r1, r5] ++ str r0, [sp, #20] ++ ldr r2, [r2] ++ ldr r0, .L2323+20 ++ str r2, [sp, #16] ++ ldr r2, [r3, #12] ++ str r2, [sp, #12] ++ ldr r2, [r3, #8] ++ str r2, [sp, #8] ++ ldr r2, [r3, #4] ++ str r2, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r3, [r4, #-1272] ++ ldr r2, [r4, #-1276] ++ bl rk_printk ++.L2321: ++ ldrh r2, [r9] ++ sxth r3, r6 ++ add r6, r6, #1 ++ cmp r3, r2 ++ blt .L2319 ++ add r7, r7, #1 ++ b .L2317 ++.L2320: ++ ldr r5, .L2323+24 ++ mov r2, #2 ++ ldr r3, [r4, #-1636] ++ ldr r1, [r4, #-1400] ++ ldr r0, .L2323+28 ++ bl rknand_print_hex ++ ldrh r3, [r5, #-12] ++ mov r2, #4 ++ ldr r1, [r4, #-1376] ++ ldr r0, .L2323+32 ++ bl rknand_print_hex ++ ldrh r3, [r5, #-12] ++ mov r2, #4 ++ ldr r1, [r4, #-1372] ++ ldr r0, .L2323+36 ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b rknand_print_hex ++.L2324: ++ .align 2 ++.L2323: ++ .word .LANCHOR2-1712 ++ .word .LANCHOR2 ++ .word .LANCHOR2+1144 ++ .word .LANCHOR2-1664 ++ .word .LC59 ++ .word .LC60 ++ .word .LANCHOR2-1616 ++ .word .LC61 ++ .word .LC62 ++ .word .LC63 ++ .fnend ++ .size dump_map_info, .-dump_map_info ++ .align 2 ++ .global FtlMapTblRecovery ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlMapTblRecovery, %function ++FtlMapTblRecovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 32 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r3, [r0, #24] ++ mov r4, r0 ++ mov r1, #0 ++ mov r6, #0 ++ ldrh fp, [r0, #6] ++ str r3, [sp, #4] ++ ldr r3, [r0, #16] ++ ldr r5, .L2367 ++ ldr r10, [r0, #12] ++ lsl r2, fp, #2 ++ str r3, [sp, #12] ++ ldrh r3, [r0, #8] ++ mov r8, r5 ++ ldr r0, [sp, #4] ++ str r3, [sp, #8] ++ bl ftl_memset ++ ldr r3, [r5, #-1472] ++ ldr r7, [r5, #-1440] ++ str r6, [r4, #32] ++ str r3, [r5, #-1268] ++ mvn r3, #0 ++ str r7, [r5, #-1264] ++ strh r3, [r4] @ movhi ++ strh r3, [r4, #2] @ movhi ++ mov r3, #1 ++ str r3, [r4, #36] ++ sub r3, r5, #1664 ++ add r3, r3, #388 ++ str r6, [r4, #28] ++ str r3, [sp, #20] ++.L2326: ++ ldr r2, [sp, #8] ++ sxth r3, r6 ++ cmp r3, r2 ++ bge .L2345 ++ ldr r2, [sp, #8] ++ sub r2, r2, #1 ++ cmp r3, r2 ++ lsl r2, r3, #1 ++ bne .L2327 ++ ldrh r0, [r10, r2] ++ mov r1, #1 ++ str r3, [sp, #16] ++ add r3, r10, r2 ++ str r3, [sp, #8] ++ mov r8, #0 ++ bl FtlGetLastWrittenPage ++ ldr r2, [sp, #12] ++ sxth r9, r0 ++ ldr r3, [sp, #16] ++ add r0, r0, #1 ++ strh r6, [r4] @ movhi ++ ldr r10, .L2367+4 ++ ldr r6, .L2367+8 ++ strh r0, [r4, #2] @ movhi ++ ldr r3, [r2, r3, lsl #2] ++ str r3, [r4, #28] ++.L2328: ++ sxth r2, r8 ++ add r1, r9, #1 ++ cmp r2, r1 ++ blt .L2331 ++.L2345: ++ mov r0, r4 ++ bl ftl_free_no_use_map_blk ++ ldr r3, .L2367+12 ++ ldrh r2, [r4, #2] ++ ldrh r3, [r3] ++ cmp r2, r3 ++ bne .L2333 ++ mov r0, r4 ++ bl ftl_map_blk_alloc_new_blk ++.L2333: ++ mov r0, r4 ++ bl ftl_map_blk_gc ++ mov r0, r4 ++ bl ftl_map_blk_gc ++ mov r0, #0 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2331: ++ ldr r3, [sp, #8] ++ mov r0, r6 ++ ldrh r1, [r3] ++ orr r2, r2, r1, lsl #10 ++ str r2, [r5, #-1272] ++ mov r2, #1 ++ mov r1, r2 ++ bl FlashReadPages ++ ldrb r2, [r10, #36] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L2329 ++ ldr r2, [r5, #-1264] ++ ldr r2, [r2, #12] ++ cmp r2, #0 ++ str r2, [sp, #12] ++ beq .L2329 ++ sub r1, r6, #380 ++ ldr r0, [r5, #-1268] ++ ldrh r1, [r1] ++ bl js_hash ++ ldr r2, [sp, #12] ++ cmp r2, r0 ++ mvnne r2, #0 ++ strne r2, [r5, #-1276] ++.L2329: ++ ldr r1, .L2367 ++ ldr r2, [r1, #-1276] ++ cmn r2, #1 ++ beq .L2330 ++ ldrh r2, [r7, #8] ++ cmp fp, r2 ++ bls .L2330 ++ ldrh ip, [r7] ++ ldrh r0, [r4, #4] ++ cmp ip, r0 ++ ldreq r1, [r1, #-1272] ++ ldreq r3, [sp, #4] ++ streq r1, [r3, r2, lsl #2] ++.L2330: ++ add r8, r8, #1 ++ b .L2328 ++.L2327: ++ ldr r3, [r5, #-1472] ++ ldr r0, [sp, #20] ++ str r3, [r5, #-1268] ++ add r3, r10, r2 ++ str r3, [sp, #16] ++ ldr r3, .L2367+12 ++ ldrh r2, [r10, r2] ++ ldrh r3, [r3] ++ sub r3, r3, #1 ++ orr r3, r3, r2, lsl #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [r5, #-1272] ++ bl FlashReadPages ++ ldr r3, [r5, #-1276] ++ cmn r3, #1 ++ beq .L2347 ++ ldrh r2, [r7] ++ ldrh r3, [r4, #4] ++ cmp r2, r3 ++ bne .L2347 ++ ldrh r2, [r7, #8] ++ movw r3, #64245 ++ cmp r2, r3 ++ beq .L2335 ++.L2347: ++ mov r9, #0 ++.L2336: ++ ldr r2, .L2367+12 ++ sxth r3, r9 ++ ldrh r2, [r2] ++ cmp r3, r2 ++ bge .L2343 ++ ldr r2, [sp, #16] ++ ldrh r2, [r2] ++ orr r3, r3, r2, lsl #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [r8, #-1272] ++ ldr r3, .L2367+8 ++ mov r0, r3 ++ str r3, [sp, #28] ++ bl FlashReadPages ++ ldr r2, .L2367+4 ++ ldrb r2, [r2, #36] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L2340 ++ ldr r2, [r8, #-1264] ++ ldr r2, [r2, #12] ++ cmp r2, #0 ++ str r2, [sp, #24] ++ beq .L2340 ++ ldr r3, [sp, #28] ++ ldr r0, [r8, #-1268] ++ sub r3, r3, #380 ++ ldrh r1, [r3] ++ bl js_hash ++ ldr r2, [sp, #24] ++ cmp r2, r0 ++ mvnne r3, #0 ++ strne r3, [r8, #-1276] ++.L2340: ++ ldr r3, [r8, #-1276] ++ cmn r3, #1 ++ beq .L2341 ++ ldrh r3, [r7, #8] ++ cmp fp, r3 ++ bls .L2341 ++ ldrh r1, [r7] ++ ldrh r2, [r4, #4] ++ cmp r1, r2 ++ ldreq r2, [r8, #-1272] ++ ldreq r1, [sp, #4] ++ streq r2, [r1, r3, lsl #2] ++.L2341: ++ add r9, r9, #1 ++ b .L2336 ++.L2335: ++ mov r1, #0 ++ mov ip, #4 ++.L2337: ++ ldr r2, .L2367+12 ++ sxth r3, r1 ++ ldrh r2, [r2] ++ sub r2, r2, #1 ++ cmp r3, r2 ++ blt .L2339 ++.L2343: ++ add r6, r6, #1 ++ b .L2326 ++.L2339: ++ ldr r0, [r8, #-1472] ++ add r1, r1, #1 ++ ldr r2, [r0, r3, lsl #3] ++ uxth lr, r2 ++ cmp fp, lr ++ addhi r3, ip, r3, lsl #3 ++ movhi r2, lr ++ ldrhi r3, [r0, r3] ++ ldrhi r0, [sp, #4] ++ strhi r3, [r0, r2, lsl #2] ++ b .L2337 ++.L2368: ++ .align 2 ++.L2367: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2-1276 ++ .word .LANCHOR2-1664 ++ .fnend ++ .size FtlMapTblRecovery, .-FtlMapTblRecovery ++ .align 2 ++ .global FtlLoadVonderInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadVonderInfo, %function ++FtlLoadVonderInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2371 ++ push {r4, lr} ++ .save {r4, lr} ++ sub r2, r3, #1632 ++ add r0, r3, #1072 ++ ldrh r1, [r2, #-12] ++ add r0, r0, #4 ++ ldrh r2, [r2, #-10] ++ strh r1, [r0, #10] @ movhi ++ strh r2, [r0, #6] @ movhi ++ ldr r2, [r3, #-1392] ++ ldr r1, .L2371+4 ++ str r2, [r3, #1088] ++ ldr r2, [r3, #-1384] ++ strh r1, [r0, #4] @ movhi ++ sub r1, r3, #1280 ++ ldrh r1, [r1, #-8] ++ str r2, [r3, #1092] ++ ldr r2, [r3, #-1388] ++ strh r1, [r0, #8] @ movhi ++ str r2, [r3, #1096] ++ ldr r2, [r3, #-1380] ++ str r2, [r3, #1100] ++ bl FtlMapTblRecovery ++ mov r0, #0 ++ pop {r4, pc} ++.L2372: ++ .align 2 ++.L2371: ++ .word .LANCHOR2 ++ .word -3962 ++ .fnend ++ .size FtlLoadVonderInfo, .-FtlLoadVonderInfo ++ .align 2 ++ .global FtlL2PDataInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlL2PDataInit, %function ++FtlL2PDataInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r1, #0 ++ ldr r4, .L2377 ++ ldr r2, [r4, #-1636] ++ sub r6, r4, #1648 ++ sub r5, r4, #1616 ++ ldr r0, [r4, #-1396] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldrh r3, [r6, #-8] ++ mov r1, #255 ++ ldrh r2, [r5, #-10] ++ ldr r0, [r4, #-1360] ++ mul r2, r2, r3 ++ bl ftl_memset ++ mov r2, #0 ++ mov r3, r4 ++ mov r0, r6 ++ mov r1, r5 ++ mov r4, #12 ++ mov r5, r2 ++ mvn r6, #0 ++.L2374: ++ ldrh r7, [r1, #-10] ++ uxth ip, r2 ++ add lr, r2, #1 ++ cmp r7, ip ++ bhi .L2375 ++ ldr r2, .L2377+4 ++ mvn r0, #0 ++ movw ip, #1028 ++ ldrh r1, [r1, #-12] ++ strh r0, [r3, ip] @ movhi ++ strh r0, [r2, #2] @ movhi ++ ldr r0, [r3, #-1636] ++ strh r1, [r2, #6] @ movhi ++ strh r0, [r2, #10] @ movhi ++ ldr r0, .L2377+8 ++ strh r0, [r2, #4] @ movhi ++ movw r0, #1144 ++ ldrh r0, [r3, r0] ++ strh r0, [r2, #8] @ movhi ++ ldr r2, [r3, #-1400] ++ str r2, [r3, #1040] ++ ldr r2, [r3, #-1368] ++ str r2, [r3, #1044] ++ ldr r2, [r3, #-1396] ++ str r2, [r3, #1048] ++ ldr r2, [r3, #-1376] ++ str r2, [r3, #1052] ++ pop {r4, r5, r6, r7, r8, pc} ++.L2375: ++ uxth r2, r2 ++ ldr ip, [r3, #-1364] ++ mul r7, r4, r2 ++ add r8, ip, r7 ++ str r5, [r8, #4] ++ strh r6, [ip, r7] @ movhi ++ ldr ip, [r3, #-1364] ++ add ip, ip, r7 ++ ldrh r7, [r0, #-8] ++ mul r2, r2, r7 ++ ldr r7, [r3, #-1360] ++ bic r2, r2, #3 ++ add r2, r7, r2 ++ str r2, [ip, #8] ++ mov r2, lr ++ b .L2374 ++.L2378: ++ .align 2 ++.L2377: ++ .word .LANCHOR2 ++ .word .LANCHOR2+1028 ++ .word -3902 ++ .fnend ++ .size FtlL2PDataInit, .-FtlL2PDataInit ++ .align 2 ++ .global FtlLoadMapInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadMapInfo, %function ++FtlLoadMapInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl FtlL2PDataInit ++ ldr r0, .L2381 ++ bl FtlMapTblRecovery ++ mov r0, #0 ++ pop {r4, pc} ++.L2382: ++ .align 2 ++.L2381: ++ .word .LANCHOR2+1028 ++ .fnend ++ .size FtlLoadMapInfo, .-FtlLoadMapInfo ++ .align 2 ++ .global ftl_sb_update_avl_pages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_sb_update_avl_pages, %function ++ftl_sb_update_avl_pages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov r3, #0 ++ push {r4, lr} ++ .save {r4, lr} ++ strh r3, [r0, #4] @ movhi ++ movw r4, #65535 ++ ldr r3, .L2391 ++ ldrh lr, [r3, #-4] ++ add r3, r0, r2, lsl #1 ++ add r3, r3, #14 ++.L2384: ++ cmp r2, lr ++ bcc .L2386 ++ ldr r3, .L2391+4 ++ add ip, r0, #16 ++ movw r4, #65535 ++ ldrh r3, [r3, #-2] ++ sub r3, r3, #1 ++ sub r1, r3, r1 ++ mov r3, #0 ++ uxth r1, r1 ++.L2387: ++ uxth r2, r3 ++ cmp lr, r2 ++ bhi .L2389 ++ pop {r4, pc} ++.L2386: ++ ldrh ip, [r3, #2]! ++ add r2, r2, #1 ++ uxth r2, r2 ++ cmp ip, r4 ++ ldrhne ip, [r0, #4] ++ addne ip, ip, #1 ++ strhne ip, [r0, #4] @ movhi ++ b .L2384 ++.L2389: ++ ldrh r2, [ip], #2 ++ add r3, r3, #1 ++ cmp r2, r4 ++ ldrhne r2, [r0, #4] ++ addne r2, r1, r2 ++ strhne r2, [r0, #4] @ movhi ++ b .L2387 ++.L2392: ++ .align 2 ++.L2391: ++ .word .LANCHOR2-1728 ++ .word .LANCHOR2-1664 ++ .fnend ++ .size ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages ++ .align 2 ++ .global FtlReUsePrevPpa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlReUsePrevPpa, %function ++FtlReUsePrevPpa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ .pad #12 ++ mov r5, r0 ++ ldr r6, .L2403 ++ ubfx r0, r1, #10, #16 ++ str r1, [sp, #4] ++ bl P2V_block_in_plane ++ ldr r2, [r6, #-1404] ++ lsl r7, r0, #1 ++ ldrh r3, [r2, r7] ++ cmp r3, #0 ++ bne .L2394 ++ ldr r4, [r6, #876] ++ cmp r4, #0 ++ beq .L2395 ++ ldr r2, [r6, #-1356] ++ add r8, r6, #880 ++ ldr ip, .L2403+4 ++ mov lr, #6 ++ ldrh r1, [r8] ++ movw r9, #65535 ++ sub r4, r4, r2 ++ asr r4, r4, #1 ++ mul r4, ip, r4 ++ uxth r4, r4 ++.L2396: ++ uxth ip, r3 ++ cmp r1, ip ++ bls .L2395 ++ cmp r4, r0 ++ bne .L2397 ++ mov r1, r4 ++ ldr r0, .L2403+8 ++ bl List_remove_node ++ ldrh r3, [r8] ++ mov r0, r4 ++ sub r3, r3, #1 ++ strh r3, [r8] @ movhi ++ bl INSERT_DATA_LIST ++ ldr r2, [r6, #-1404] ++ ldrh r3, [r2, r7] ++.L2394: ++ add r3, r3, #1 ++ strh r3, [r2, r7] @ movhi ++ b .L2395 ++.L2397: ++ mul r4, lr, r4 ++ add r3, r3, #1 ++ ldrh r4, [r2, r4] ++ cmp r4, r9 ++ bne .L2396 ++.L2395: ++ mov r2, #1 ++ add r1, sp, #4 ++ mov r0, r5 ++ bl log2phys ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L2404: ++ .align 2 ++.L2403: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .word .LANCHOR2+876 ++ .fnend ++ .size FtlReUsePrevPpa, .-FtlReUsePrevPpa ++ .align 2 ++ .global make_superblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type make_superblock, %function ++make_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2418 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r4, r0 ++ add r7, r0, #16 ++ mvn r9, #0 ++ add r6, r3, #22 ++ mov r5, #0 ++ ldrh r8, [r3, #-4] ++ strh r5, [r0, #4] @ movhi ++ strb r5, [r0, #7] ++.L2406: ++ uxth r3, r5 ++ cmp r8, r3 ++ bhi .L2408 ++ ldr r2, .L2418+4 ++ ldrb r3, [r4, #7] @ zero_extendqisi2 ++ sub r1, r2, #1664 ++ ldrh r1, [r1, #-2] ++ smulbb r3, r3, r1 ++ strh r3, [r4, #4] @ movhi ++ mov r3, #0 ++ strb r3, [r4, #9] ++ ldr r3, [r2, #-1868] ++ cmp r3, #0 ++ beq .L2409 ++ ldrh r3, [r4] ++ ldr r2, [r2, #-1412] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #79 ++ movls r3, #1 ++ strbls r3, [r4, #9] ++.L2409: ++ ldr r3, .L2418+8 ++ mov r0, #0 ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ movne r3, #1 ++ strbne r3, [r4, #9] ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2408: ++ ldrb r0, [r6, r5] @ zero_extendqisi2 ++ add r7, r7, #2 ++ ldrh r1, [r4] ++ add r5, r5, #1 ++ bl V2P_block ++ strh r9, [r7, #-2] @ movhi ++ mov r10, r0 ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ strheq r10, [r7, #-2] @ movhi ++ ldrbeq r3, [r4, #7] @ zero_extendqisi2 ++ addeq r3, r3, #1 ++ strbeq r3, [r4, #7] ++ b .L2406 ++.L2419: ++ .align 2 ++.L2418: ++ .word .LANCHOR2-1728 ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size make_superblock, .-make_superblock ++ .align 2 ++ .global FtlLoadSysInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLoadSysInfo, %function ++FtlLoadSysInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r1, #0 ++ ldr r4, .L2449 ++ .pad #36 ++ sub sp, sp, #36 ++ movw r8, #1128 ++ ldr r3, [r4, #-1472] ++ sub r6, r4, #1712 ++ ldrh r2, [r6, #-12] ++ ldr r0, [r4, #-1404] ++ str r3, [r4, #-1268] ++ ldr r3, [r4, #-1440] ++ lsl r2, r2, #1 ++ str r3, [r4, #-1264] ++ bl ftl_memset ++ ldrh r0, [r4, r8] ++ movw r3, #65535 ++ cmp r0, r3 ++ bne .L2421 ++.L2432: ++ mvn r0, #0 ++.L2420: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2421: ++ mov r1, #1 ++ ldr r7, .L2449+4 ++ bl FtlGetLastWrittenPage ++ ldrsh r10, [r4, r8] ++ sub r8, r4, #1264 ++ sub r8, r8, #12 ++ sxth r5, r0 ++ add r0, r0, #1 ++ strh r0, [r7, #2] @ movhi ++.L2423: ++ cmp r5, #0 ++ ldr fp, .L2449+8 ++ blt .L2431 ++ orr r3, r5, r10, lsl #10 ++ mov r2, #1 ++ mov r1, r2 ++ str r3, [r4, #-1272] ++ mov r0, r8 ++ ldr r3, [r4, #-1472] ++ str r3, [r4, #-1268] ++ bl FlashReadPages ++ ldrb r3, [fp, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2424 ++ ldr r9, [r4, #-1264] ++ ldr r3, [r9, #12] ++ cmp r3, #0 ++ str r3, [sp, #28] ++ beq .L2424 ++ ldr r2, [r4, #-1268] ++ sub r1, r8, #380 ++ ldrh r1, [r1] ++ mov r0, r2 ++ str r2, [sp, #24] ++ bl js_hash ++ ldr r3, [sp, #28] ++ cmp r3, r0 ++ beq .L2424 ++ cmp r5, #0 ++ bne .L2425 ++ ldrh r1, [r7, #4] ++ ldr r2, [sp, #24] ++ cmp r10, r1 ++ beq .L2425 ++ ldr r2, [r2] ++ str r3, [sp, #12] ++ ldrh r1, [r7] ++ str r2, [sp, #16] ++ ldr r3, [r9, #8] ++ ldr r2, [r4, #-1276] ++ ldr r0, .L2449+12 ++ str r3, [sp, #8] ++ ldr r3, [r9, #4] ++ str r3, [sp, #4] ++ ldr r3, [r9] ++ str r3, [sp] ++ ldr r3, [r4, #-1272] ++ bl rk_printk ++ sub r3, r8, #388 ++ ldrsh r10, [r7, #4] ++ ldrh r5, [r3] ++.L2427: ++ sub r5, r5, #1 ++ sxth r5, r5 ++ b .L2423 ++.L2425: ++ mvn r3, #0 ++ str r3, [r4, #-1276] ++.L2424: ++ ldr r3, [r4, #-1276] ++ cmn r3, #1 ++ beq .L2427 ++ ldr r3, [r4, #-1472] ++ ldr r2, .L2449+16 ++ ldr r3, [r3] ++ cmp r3, r2 ++ bne .L2427 ++ ldr r3, [r4, #-1440] ++ ldrh r2, [r3] ++ movw r3, #61604 ++ cmp r2, r3 ++ bne .L2427 ++.L2431: ++ mov r2, #48 ++ ldr r1, [r4, #-1268] ++ ldr r0, .L2449+20 ++ bl ftl_memcpy ++ ldrh r2, [r6, #-12] ++ ldr r1, [r4, #-1268] ++ ldr r0, [r4, #-1404] ++ lsl r2, r2, #1 ++ add r1, r1, #48 ++ bl ftl_memcpy ++ ldrh r1, [r6, #-12] ++ ldr r3, [r4, #-1268] ++ ldr r0, [fp, #32] ++ lsr r2, r1, #3 ++ lsl r1, r1, #1 ++ add r1, r1, #51 ++ add r2, r2, #4 ++ bic r1, r1, #3 ++ add r1, r3, r1 ++ bl ftl_memcpy ++ ldr r3, .L2449+24 ++ ldrh r2, [r3, #-8] ++ cmp r2, #0 ++ beq .L2429 ++ ldrh r1, [r6, #-12] ++ ldrh r2, [r3, #-12] ++ ldr r0, [r4, #-1372] ++ lsr r3, r1, #3 ++ lsl r2, r2, #2 ++ add r3, r3, r1, lsl #1 ++ ldr r1, [r4, #-1268] ++ add r3, r3, #52 ++ ubfx r3, r3, #2, #14 ++ add r1, r1, r3, lsl #2 ++ bl ftl_memcpy ++.L2429: ++ ldr r2, [r4, #816] ++ ldr r3, .L2449+16 ++ cmp r2, r3 ++ bne .L2432 ++ ldr r5, .L2449+20 ++ ldrb r1, [r4, #826] @ zero_extendqisi2 ++ sub r3, r5, #2512 ++ ldrh r2, [r5, #8] ++ ldrh r3, [r3, #-14] ++ strh r2, [r7, #6] @ movhi ++ cmp r1, r3 ++ bne .L2432 ++ sub r1, r5, #2480 ++ sub r0, r5, #2464 ++ ldrh r3, [r1, #-2] ++ add r1, r1, #316 ++ ldrh r0, [r0, #-12] ++ add r6, r5, #336 ++ str r2, [r4, #1148] ++ mul r3, r2, r3 ++ str r3, [r4, #-1284] ++ mul r3, r3, r0 ++ ldr r0, [r4, #-1720] ++ str r3, [r4, #-2736] ++ ldrh r3, [r1, #6] ++ sub r0, r0, r3 ++ sub r3, r5, #2544 ++ ldrh r1, [r3, #-4] ++ sub r0, r0, r2 ++ bl __aeabi_uidiv ++ ldrh r3, [r5, #16] ++ mov r2, r5 ++ ldrh ip, [r5, #14] ++ strh r0, [r6] @ movhi ++ lsr r1, r3, #6 ++ and r3, r3, #63 ++ strb r3, [r4, #890] ++ ldrb r3, [r4, #827] @ zero_extendqisi2 ++ strh ip, [r2, #68]! @ movhi ++ strh r1, [r2, #2] @ movhi ++ mvn r1, #0 ++ strb r3, [r4, #892] ++ movw r3, #1156 ++ strh r1, [r4, r3] @ movhi ++ add r2, r5, #340 ++ ldrh r1, [r5, #18] ++ mov r3, #0 ++ strh r3, [r2, #2] @ movhi ++ mov r2, r5 ++ strb r3, [r4, #1162] ++ strh r1, [r2, #116]! @ movhi ++ ldrh r1, [r5, #20] ++ strb r3, [r4, #1164] ++ lsr r0, r1, #6 ++ and r1, r1, #63 ++ strb r1, [r4, #938] ++ ldrb r1, [r4, #828] @ zero_extendqisi2 ++ strh r0, [r2, #2] @ movhi ++ ldrh r0, [r5, #22] ++ strb r1, [r4, #940] ++ mov r1, r5 ++ strh r0, [r1, #164]! @ movhi ++ mov r6, r1 ++ ldrh r0, [r5, #24] ++ mov r5, r2 ++ lsr lr, r0, #6 ++ and r0, r0, #63 ++ strb r0, [r4, #986] ++ ldrb r0, [r4, #829] @ zero_extendqisi2 ++ strh lr, [r1, #2] @ movhi ++ strb r0, [r4, #988] ++ str r3, [r4, #-1604] ++ ldr r0, [r4, #848] ++ str r3, [r4, #-1600] ++ str r3, [r4, #-1584] ++ str r3, [r4, #-1588] ++ str r0, [r4, #-1580] ++ str r3, [r4, #-1576] ++ ldr r0, [r4, #-1612] ++ str r3, [r4, #-1568] ++ str r3, [r4, #-1592] ++ ldr r3, [r4, #856] ++ ldr r2, [r4, #-1608] ++ cmp r3, r0 ++ strhi r3, [r4, #-1612] ++ ldr r3, [r4, #852] ++ cmp r3, r2 ++ strhi r3, [r4, #-1608] ++ movw r3, #65535 ++ cmp ip, r3 ++ beq .L2435 ++ ldr r0, .L2449+28 ++ bl make_superblock ++.L2435: ++ ldrh r2, [r5] ++ movw r3, #65535 ++ cmp r2, r3 ++ beq .L2436 ++ ldr r0, .L2449+32 ++ bl make_superblock ++.L2436: ++ ldrh r2, [r6] ++ movw r3, #65535 ++ cmp r2, r3 ++ beq .L2437 ++ ldr r0, .L2449+36 ++ bl make_superblock ++.L2437: ++ movw r3, #1156 ++ ldrh r2, [r4, r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ beq .L2438 ++ ldr r0, .L2449+40 ++ bl make_superblock ++.L2438: ++ mov r0, #0 ++ b .L2420 ++.L2450: ++ .align 2 ++.L2449: ++ .word .LANCHOR2 ++ .word .LANCHOR2+1128 ++ .word .LANCHOR0 ++ .word .LC64 ++ .word 1179929683 ++ .word .LANCHOR2+816 ++ .word .LANCHOR2-1616 ++ .word .LANCHOR2+884 ++ .word .LANCHOR2+932 ++ .word .LANCHOR2+980 ++ .word .LANCHOR2+1156 ++ .fnend ++ .size FtlLoadSysInfo, .-FtlLoadSysInfo ++ .align 2 ++ .global FtlDumpBlockInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlDumpBlockInfo, %function ++FtlDumpBlockInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 72 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ ubfx r0, r0, #10, #16 ++ ldr r7, .L2463 ++ .pad #100 ++ sub sp, sp, #100 ++ mov r8, r1 ++ bl P2V_block_in_plane ++ sub r5, r7, #1664 ++ mov r6, r0 ++ ldr r1, .L2463+4 ++ ldr r0, .L2463+8 ++ ldrh r9, [r5, #-2] ++ bl rk_printk ++ ldr r2, [r7, #-1404] ++ lsl r3, r6, #1 ++ mov r1, r6 ++ ldr r0, .L2463+12 ++ ldrh r2, [r2, r3] ++ bl rk_printk ++ add r0, sp, #96 ++ strh r6, [r0, #-48]! @ movhi ++ bl make_superblock ++ ldrb r4, [r7, #-2740] @ zero_extendqisi2 ++ str r7, [sp, #44] ++ adds r3, r4, #0 ++ movne r3, #1 ++ cmp r8, #0 ++ movne r3, #0 ++ cmp r3, #0 ++ moveq r4, r3 ++ beq .L2452 ++ mov r0, r6 ++ bl ftl_get_blk_mode ++ cmp r0, #1 ++ mov r4, r0 ++ ldrheq r9, [r5] ++.L2452: ++ ldr r7, .L2463 ++ mov r6, #0 ++ mov r10, #36 ++ ldrh r3, [r5, #-2] ++ mov r2, r9 ++ mov r1, r4 ++ ldr r0, .L2463+16 ++ bl rk_printk ++.L2453: ++ ldr r3, .L2463+20 ++ add ip, sp, #62 ++ ldr r0, [r7, #-1500] ++ movw lr, #65535 ++ ldrh r3, [r3, #-4] ++ str r3, [sp, #28] ++ ldr r3, [r7, #-1460] ++ str r3, [sp, #32] ++ ldr r3, .L2463+24 ++ ldrh r2, [r3, #-8] ++ ldrh fp, [r3, #-6] ++ str r2, [sp, #36] ++ ldr r2, [r7, #-1432] ++ str r2, [sp, #40] ++ mov r2, #0 ++ mov r5, r2 ++.L2454: ++ ldr r1, [sp, #28] ++ uxth r3, r2 ++ cmp r1, r3 ++ bhi .L2456 ++ mov r8, #0 ++ mov r2, r4 ++ mov r1, r5 ++ bl FlashReadPages ++.L2457: ++ uxth r3, r8 ++ cmp r5, r3 ++ bhi .L2458 ++ add r6, r6, #1 ++ uxth r6, r6 ++ cmp r9, r6 ++ bne .L2453 ++.L2459: ++ mov r0, #0 ++ add sp, sp, #100 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2456: ++ ldrh r3, [ip, #2]! ++ cmp r3, lr ++ beq .L2455 ++ mla r1, r10, r5, r0 ++ orr r3, r6, r3, lsl #10 ++ str r3, [r1, #4] ++ ldr r3, [sp, #36] ++ mul r3, r3, r5 ++ add r8, r3, #3 ++ cmp r3, #0 ++ movlt r3, r8 ++ ldr r8, [sp, #32] ++ bic r3, r3, #3 ++ add r3, r8, r3 ++ str r3, [r1, #8] ++ mul r3, fp, r5 ++ add r5, r5, #1 ++ uxth r5, r5 ++ add r8, r3, #3 ++ cmp r3, #0 ++ movlt r3, r8 ++ ldr r8, [sp, #40] ++ bic r3, r3, #3 ++ add r3, r8, r3 ++ str r3, [r1, #12] ++.L2455: ++ add r2, r2, #1 ++ b .L2454 ++.L2458: ++ ldr r3, [sp, #44] ++ mul r0, r10, r8 ++ ldrh r1, [sp, #48] ++ add r8, r8, #1 ++ ldr ip, [r3, #-1500] ++ add r2, ip, r0 ++ ldr lr, [r2, #8] ++ ldr r3, [r2, #12] ++ ldr fp, [lr, #4] ++ str fp, [sp, #20] ++ ldr lr, [lr] ++ str lr, [sp, #16] ++ ldr lr, [r3, #12] ++ str lr, [sp, #12] ++ ldr lr, [r3, #8] ++ str lr, [sp, #8] ++ ldr lr, [r3, #4] ++ str lr, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r3, [r2, #4] ++ ldr r2, [ip, r0] ++ ldr r0, .L2463+28 ++ bl rk_printk ++ b .L2457 ++.L2464: ++ .align 2 ++.L2463: ++ .word .LANCHOR2 ++ .word .LANCHOR3+153 ++ .word .LC50 ++ .word .LC65 ++ .word .LC66 ++ .word .LANCHOR2-1728 ++ .word .LANCHOR2-1648 ++ .word .LC60 ++ .fnend ++ .size FtlDumpBlockInfo, .-FtlDumpBlockInfo ++ .align 2 ++ .global FtlScanAllBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlScanAllBlock, %function ++FtlScanAllBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r6, #0 ++ ldr r5, .L2476 ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r1, .L2476+4 ++ ldr r0, .L2476+8 ++ bl rk_printk ++.L2466: ++ ldr r3, .L2476+12 ++ uxth r0, r6 ++ ldrh r3, [r3, #-10] ++ cmp r3, r0 ++ bhi .L2474 ++ mov r0, #0 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2474: ++ add r4, sp, #80 ++ movw r9, #65535 ++ strh r0, [r4, #-48]! @ movhi ++ mov r10, #36 ++ bl ftl_get_blk_mode ++ uxth r1, r6 ++ ldr ip, [r5, #-1404] ++ mov r3, r0 ++ ldr r0, .L2476+16 ++ lsl r2, r1, #1 ++ ldrh r2, [ip, r2] ++ bl rk_printk ++ mov r0, r4 ++ bl make_superblock ++ ldr r3, .L2476+20 ++ add ip, sp, #46 ++ ldr r0, [r5, #-1500] ++ ldr r7, [r5, #-1432] ++ ldrh r2, [r3, #-4] ++ ldrh lr, [r3, #72] ++ ldrh r8, [r3, #74] ++ str r2, [sp, #24] ++ ldr r2, [r5, #-1460] ++ str r2, [sp, #28] ++ mov r2, #0 ++ mov r4, r2 ++.L2467: ++ ldr r1, [sp, #24] ++ uxth r3, r2 ++ cmp r1, r3 ++ bhi .L2469 ++ ldr r9, .L2476+24 ++ mov r7, #0 ++ mov r8, #36 ++ mov r2, #0 ++ mov r1, r4 ++ bl FlashReadPages ++.L2470: ++ uxth r3, r7 ++ cmp r4, r3 ++ bhi .L2471 ++ ldr r9, .L2476+28 ++ mov r7, #0 ++ mov r8, #36 ++ mov r2, #1 ++ mov r1, r4 ++ ldr r0, [r5, #-1500] ++ bl FlashReadPages ++.L2472: ++ uxth r3, r7 ++ cmp r4, r3 ++ bhi .L2473 ++ add r6, r6, #1 ++ b .L2466 ++.L2469: ++ ldrh r3, [ip, #2]! ++ cmp r3, r9 ++ beq .L2468 ++ mla r1, r10, r4, r0 ++ lsl r3, r3, #10 ++ str r3, [r1, #4] ++ mul r3, lr, r4 ++ add fp, r3, #3 ++ cmp r3, #0 ++ movlt r3, fp ++ ldr fp, [sp, #28] ++ bic r3, r3, #3 ++ add r3, fp, r3 ++ str r3, [r1, #8] ++ mul r3, r8, r4 ++ add r4, r4, #1 ++ uxth r4, r4 ++ add fp, r3, #3 ++ cmp r3, #0 ++ movlt r3, fp ++ bic r3, r3, #3 ++ add r3, r7, r3 ++ str r3, [r1, #12] ++.L2468: ++ add r2, r2, #1 ++ b .L2467 ++.L2471: ++ mul r0, r8, r7 ++ ldr ip, [r5, #-1500] ++ ldrh r1, [sp, #32] ++ add r7, r7, #1 ++ add r2, ip, r0 ++ ldr lr, [r2, #8] ++ ldr r3, [r2, #12] ++ ldr r10, [lr, #4] ++ str r10, [sp, #20] ++ ldr lr, [lr] ++ str lr, [sp, #16] ++ ldr lr, [r3, #12] ++ str lr, [sp, #12] ++ ldr lr, [r3, #8] ++ str lr, [sp, #8] ++ ldr lr, [r3, #4] ++ str lr, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r3, [r2, #4] ++ ldr r2, [ip, r0] ++ mov r0, r9 ++ bl rk_printk ++ b .L2470 ++.L2473: ++ mul r0, r8, r7 ++ ldr ip, [r5, #-1500] ++ ldrh r1, [sp, #32] ++ add r7, r7, #1 ++ add r2, ip, r0 ++ ldr lr, [r2, #8] ++ ldr r3, [r2, #12] ++ ldr r10, [lr, #4] ++ str r10, [sp, #20] ++ ldr lr, [lr] ++ str lr, [sp, #16] ++ ldr lr, [r3, #12] ++ str lr, [sp, #12] ++ ldr lr, [r3, #8] ++ str lr, [sp, #8] ++ ldr lr, [r3, #4] ++ str lr, [sp, #4] ++ ldr r3, [r3] ++ str r3, [sp] ++ ldr r3, [r2, #4] ++ ldr r2, [ip, r0] ++ mov r0, r9 ++ bl rk_printk ++ b .L2472 ++.L2477: ++ .align 2 ++.L2476: ++ .word .LANCHOR2 ++ .word .LANCHOR3+170 ++ .word .LC50 ++ .word .LANCHOR2-1712 ++ .word .LC67 ++ .word .LANCHOR2-1728 ++ .word .LC68 ++ .word .LC69 ++ .fnend ++ .size FtlScanAllBlock, .-FtlScanAllBlock ++ .align 2 ++ .global SupperBlkListInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type SupperBlkListInit, %function ++SupperBlkListInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r2, #6 ++ ldr r4, .L2489 ++ mov r5, #0 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r1, #0 ++ mov r8, r5 ++ mov r9, r5 ++ sub r6, r4, #1712 ++ ldr r0, [r4, #-1356] ++ ldrh r3, [r6, #-10] ++ mul r2, r2, r3 ++ bl ftl_memset ++ add r2, r4, #880 ++ add r3, r4, #872 ++ strh r5, [r2] @ movhi ++ sub r2, r4, #1616 ++ str r5, [r4, #876] ++ str r5, [r4, #864] ++ str r5, [r4, #868] ++ strh r5, [r3] @ movhi ++ strh r5, [r2, #-6] @ movhi ++ str r6, [sp] ++ str r3, [sp, #4] ++.L2479: ++ ldr r3, [sp] ++ sxth r7, r5 ++ ldrh r3, [r3, #-12] ++ cmp r7, r3 ++ bge .L2486 ++ ldr r3, .L2489+4 ++ mov r10, #0 ++ mov r6, r10 ++ uxth fp, r5 ++ ldrh r2, [r3] ++ add r3, r3, #4 ++ ldrh r3, [r3, #62] ++ b .L2487 ++.L2481: ++ add r0, r4, r1 ++ mov r1, fp ++ ldrb r0, [r0, #-1706] @ zero_extendqisi2 ++ add r10, r10, #1 ++ str r3, [sp, #12] ++ str r2, [sp, #8] ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ ldr r3, [sp, #12] ++ cmp r0, #0 ++ ldr r2, [sp, #8] ++ addeq r6, r3, r6 ++ sxtheq r6, r6 ++.L2487: ++ sxth r1, r10 ++ cmp r1, r2 ++ blt .L2481 ++ cmp r6, #0 ++ lsl r10, r7, #1 ++ ldreq r3, [r4, #-1404] ++ mvneq r2, #0 ++ strheq r2, [r3, r10] @ movhi ++ beq .L2483 ++ mov r1, r6 ++ mov r0, #32768 ++ bl __aeabi_idiv ++ sxth r6, r0 ++.L2483: ++ ldr r2, [r4, #-1356] ++ add r3, r10, r7 ++ add r3, r2, r3, lsl #1 ++ strh r6, [r3, #4] @ movhi ++ ldr r3, .L2489+8 ++ ldrh r3, [r3] ++ cmp r7, r3 ++ beq .L2484 ++ ldr r3, .L2489+12 ++ ldrh r3, [r3] ++ cmp r7, r3 ++ beq .L2484 ++ ldr r3, .L2489+16 ++ ldrh r3, [r3] ++ cmp r7, r3 ++ beq .L2484 ++ ldr r3, [r4, #-1404] ++ uxth r0, r5 ++ ldrh r3, [r3, r10] ++ cmp r3, #0 ++ bne .L2485 ++ add r8, r8, #1 ++ uxth r8, r8 ++ bl INSERT_FREE_LIST ++.L2484: ++ add r5, r5, #1 ++ b .L2479 ++.L2485: ++ add r9, r9, #1 ++ uxth r9, r9 ++ bl INSERT_DATA_LIST ++ b .L2484 ++.L2486: ++ ldr r3, [sp, #4] ++ mov r0, #0 ++ strh r9, [r3] @ movhi ++ ldr r3, .L2489+20 ++ strh r8, [r3] @ movhi ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2490: ++ .align 2 ++.L2489: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1732 ++ .word .LANCHOR2+884 ++ .word .LANCHOR2+932 ++ .word .LANCHOR2+980 ++ .word .LANCHOR2+880 ++ .fnend ++ .size SupperBlkListInit, .-SupperBlkListInit ++ .align 2 ++ .global Ftl_save_ext_data ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_save_ext_data, %function ++Ftl_save_ext_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L2493 ++ ldr r2, .L2493+4 ++ ldr r1, [r3, #1204] ++ cmp r1, r2 ++ bxne lr ++ ldr r2, .L2493+8 ++ mov r1, #1 ++ mov r0, #0 ++ str r2, [r3, #1208] ++ ldr r2, [r3, #1716] ++ str r2, [r3, #1292] ++ ldr r2, [r3, #1720] ++ str r2, [r3, #1296] ++ ldr r2, [r3, #-1604] ++ str r2, [r3, #1212] ++ ldr r2, [r3, #-1600] ++ str r2, [r3, #1216] ++ ldr r2, [r3, #-1584] ++ str r2, [r3, #1220] ++ ldr r2, [r3, #-1588] ++ str r2, [r3, #1224] ++ ldr r2, [r3, #-1576] ++ str r2, [r3, #1232] ++ ldr r2, [r3, #-1572] ++ str r2, [r3, #1236] ++ ldr r2, [r3, #-1596] ++ str r2, [r3, #1240] ++ ldr r2, [r3, #-1592] ++ str r2, [r3, #1244] ++ ldr r2, [r3, #-1568] ++ str r2, [r3, #1248] ++ ldr r2, [r3, #-1564] ++ str r2, [r3, #1252] ++ ldr r2, [r3, #-1616] ++ str r2, [r3, #1264] ++ ldr r2, [r3, #-1620] ++ str r2, [r3, #1268] ++ ldr r2, .L2493+12 ++ b FtlVendorPartWrite ++.L2494: ++ .align 2 ++.L2493: ++ .word .LANCHOR2 ++ .word 1179929683 ++ .word 1342177379 ++ .word .LANCHOR2+1204 ++ .fnend ++ .size Ftl_save_ext_data, .-Ftl_save_ext_data ++ .align 2 ++ .global FtlEctTblFlush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlEctTblFlush, %function ++FtlEctTblFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2505 ++ ldr r2, [r3, #-1868] ++ cmp r2, #0 ++ moveq r2, #32 ++ beq .L2496 ++ ldr r2, [r3, #-1564] ++ cmp r2, #39 ++ movhi r2, #32 ++ movls r2, #4 ++.L2496: ++ movw ip, #1724 ++ ldrh r1, [r3, ip] ++ cmp r1, #31 ++ addls r1, r1, #1 ++ movls r2, #1 ++ strhls r1, [r3, ip] @ movhi ++ cmp r0, #0 ++ bne .L2498 ++ ldr r1, [r3, #-1416] ++ ldr r0, [r1, #20] ++ ldr r1, [r1, #16] ++ add r2, r2, r0 ++ cmp r1, r2 ++ bcc .L2503 ++.L2498: ++ push {r4, lr} ++ .save {r4, lr} ++ mov r0, #64 ++ ldr r2, [r3, #-1416] ++ ldr r1, [r2, #16] ++ str r1, [r2, #20] ++ ldr r1, .L2505+4 ++ str r1, [r2] ++ ldr r2, [r3, #-1416] ++ ldr r3, .L2505+8 ++ ldrh r1, [r3] ++ lsl r3, r1, #9 ++ str r3, [r2, #12] ++ ldr r3, [r2, #8] ++ add r3, r3, #1 ++ str r3, [r2, #8] ++ mov r3, #0 ++ str r3, [r2, #4] ++ bl FtlVendorPartWrite ++ bl Ftl_save_ext_data ++ mov r0, #0 ++ pop {r4, pc} ++.L2503: ++ mov r0, #0 ++ bx lr ++.L2506: ++ .align 2 ++.L2505: ++ .word .LANCHOR2 ++ .word 1112818501 ++ .word .LANCHOR2-1424 ++ .fnend ++ .size FtlEctTblFlush, .-FtlEctTblFlush ++ .align 2 ++ .global Ftl_load_ext_data ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_load_ext_data, %function ++Ftl_load_ext_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r1, #1 ++ ldr r4, .L2513 ++ mov r0, #0 ++ ldr r2, .L2513+4 ++ bl FtlVendorPartRead ++ ldr r5, .L2513+8 ++ ldr r3, [r4, #1204] ++ cmp r3, r5 ++ beq .L2508 ++ mov r2, #512 ++ mov r1, #0 ++ ldr r0, .L2513+4 ++ bl ftl_memset ++ str r5, [r4, #1204] ++.L2508: ++ ldr r3, [r4, #1204] ++ cmp r3, r5 ++ bne .L2509 ++ ldr r3, [r4, #1292] ++ str r3, [r4, #1716] ++ ldr r3, [r4, #1296] ++ str r3, [r4, #1720] ++ ldr r3, [r4, #1212] ++ str r3, [r4, #-1604] ++ ldr r3, [r4, #1216] ++ str r3, [r4, #-1600] ++ ldr r3, [r4, #1220] ++ str r3, [r4, #-1584] ++ ldr r3, [r4, #1224] ++ str r3, [r4, #-1588] ++ ldr r3, [r4, #1232] ++ str r3, [r4, #-1576] ++ ldr r3, [r4, #1236] ++ str r3, [r4, #-1572] ++ ldr r3, [r4, #1240] ++ str r3, [r4, #-1596] ++ ldr r3, [r4, #1244] ++ str r3, [r4, #-1592] ++ ldr r3, [r4, #1248] ++ str r3, [r4, #-1568] ++ ldr r3, [r4, #1252] ++ str r3, [r4, #-1564] ++ ldr r3, [r4, #1264] ++ str r3, [r4, #-1616] ++.L2509: ++ ldr r1, [r4, #1272] ++ mov r3, #0 ++ ldr r2, .L2513+12 ++ str r3, [r4, #-1620] ++ cmp r1, r2 ++ bne .L2510 ++ ldrb r2, [r4, #-2740] @ zero_extendqisi2 ++ cmp r2, r3 ++ beq .L2511 ++ str r3, [r4, #1272] ++ bl Ftl_save_ext_data ++.L2510: ++ ldr r3, .L2513+16 ++ ldr ip, [r4, #-1580] ++ ldr r2, [r4, #-1576] ++ ldrh r0, [r3, #-10] ++ ldrh r1, [r3, #-60] ++ mla r0, ip, r0, r2 ++ bl __aeabi_uidiv ++ str r0, [r4, #1728] ++ pop {r4, r5, r6, pc} ++.L2511: ++ mov r3, #1 ++ ldr r1, .L2513+20 ++ ldr r0, .L2513+24 ++ str r3, [r4, #-1868] ++ bl rk_printk ++ b .L2510 ++.L2514: ++ .align 2 ++.L2513: ++ .word .LANCHOR2 ++ .word .LANCHOR2+1204 ++ .word 1179929683 ++ .word 305432421 ++ .word .LANCHOR2-1664 ++ .word .LC70 ++ .word .LC49 ++ .fnend ++ .size Ftl_load_ext_data, .-Ftl_load_ext_data ++ .align 2 ++ .global ftl_scan_all_ppa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_scan_all_ppa, %function ++ftl_scan_all_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r6, .L2532 ++ ldrh r4, [r6, #-4] ++ add r3, r6, #388 ++ str r3, [sp, #28] ++ sub r4, r4, #16 ++ lsl r10, r4, #10 ++.L2516: ++ ldrh r3, [r6, #-4] ++ ldr r1, .L2532+4 ++ cmp r4, r3 ++ mov r5, r1 ++ blt .L2524 ++ ldr r1, .L2532+8 ++ ldr r0, .L2532+12 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b rk_printk ++.L2524: ++ uxth r8, r4 ++ mov r0, r8 ++ bl ftl_get_blk_mode ++ ldrb r3, [r1, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2517 ++ ldr r3, .L2532+16 ++ ldrh r3, [r3] ++ cmp r4, r3 ++ bge .L2518 ++ ldr r3, .L2532+20 ++ ldrh r3, [r3] ++ cmp r4, r3 ++ blt .L2518 ++.L2517: ++ cmp r0, #1 ++ ldrhne r7, [r6, #-2] ++ movne r9, #0 ++ bne .L2520 ++.L2518: ++ ldrh r7, [r6] ++ mov r9, #-2147483648 ++.L2520: ++ mov r3, r9 ++ mov r2, r7 ++ mov r1, r4 ++ ldr r0, .L2532+24 ++ bl rk_printk ++ mov r0, r8 ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ beq .L2521 ++ mov r3, r9 ++ mov r2, r7 ++ mov r1, r4 ++ ldr r0, .L2532+28 ++ bl rk_printk ++.L2521: ++ ldr fp, .L2532+32 ++ mov r8, #0 ++.L2522: ++ cmp r8, r7 ++ addeq r4, r4, #1 ++ addeq r10, r10, #1024 ++ beq .L2516 ++.L2523: ++ add r3, r9, r10 ++ mov r2, #0 ++ add r3, r3, r8 ++ mov r1, #1 ++ str r3, [r5, #-1272] ++ add r8, r8, #1 ++ ldr r3, [r5, #-1472] ++ ldr r0, [sp, #28] ++ str r2, [r5, #-1276] ++ str r3, [r5, #-1268] ++ ldr r3, [r5, #-1440] ++ str r3, [r5, #-1264] ++ bl FlashReadPages ++ ldr r2, [r5, #-1268] ++ mov r0, fp ++ ldr r3, [r5, #-1264] ++ ldr r1, [r2, #4] ++ str r1, [sp, #16] ++ ldr r2, [r2] ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r3, [r3] ++ ldr r2, [r5, #-1276] ++ ldr r1, [r5, #-1272] ++ bl rk_printk ++ b .L2522 ++.L2533: ++ .align 2 ++.L2532: ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2 ++ .word .LANCHOR3+186 ++ .word .LC74 ++ .word .LANCHOR2-1724 ++ .word .LANCHOR2-1652 ++ .word .LC71 ++ .word .LC72 ++ .word .LC73 ++ .fnend ++ .size ftl_scan_all_ppa, .-ftl_scan_all_ppa ++ .align 2 ++ .global update_multiplier_value ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type update_multiplier_value, %function ++update_multiplier_value: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2541 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r5, #0 ++ mov r7, r0 ++ mov r4, r5 ++ add r6, r3, #22 ++ ldrh r8, [r3, #-4] ++ ldrh r9, [r3, #62] ++.L2535: ++ uxth r3, r5 ++ cmp r8, r3 ++ bhi .L2537 ++ cmp r4, #0 ++ moveq r0, r4 ++ beq .L2538 ++ mov r1, r4 ++ mov r0, #32768 ++ bl __aeabi_idiv ++.L2538: ++ ldr r3, .L2541+4 ++ mov r2, #6 ++ ldr r3, [r3, #-1356] ++ mla r7, r2, r7, r3 ++ strh r0, [r7, #4] @ movhi ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2537: ++ mov r1, r7 ++ ldrb r0, [r6, r5] @ zero_extendqisi2 ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ cmp r0, #0 ++ add r5, r5, #1 ++ addeq r4, r4, r9 ++ uxtheq r4, r4 ++ b .L2535 ++.L2542: ++ .align 2 ++.L2541: ++ .word .LANCHOR2-1728 ++ .word .LANCHOR2 ++ .fnend ++ .size update_multiplier_value, .-update_multiplier_value ++ .align 2 ++ .global GetFreeBlockMinEraseCount ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type GetFreeBlockMinEraseCount, %function ++GetFreeBlockMinEraseCount: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L2546 ++ ldr r0, [r2, #876] ++ cmp r0, #0 ++ bxeq lr ++ ldr r3, [r2, #-1356] ++ sub r0, r0, r3 ++ ldr r3, .L2546+4 ++ asr r0, r0, #1 ++ mul r0, r3, r0 ++ ldr r3, [r2, #-1412] ++ uxth r0, r0 ++ lsl r0, r0, #1 ++ ldrh r0, [r3, r0] ++ bx lr ++.L2547: ++ .align 2 ++.L2546: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount ++ .align 2 ++ .global GetFreeBlockMaxEraseCount ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type GetFreeBlockMaxEraseCount, %function ++GetFreeBlockMaxEraseCount: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r1, .L2560 ++ ldr r3, [r1, #876] ++ cmp r3, #0 ++ beq .L2554 ++ add r2, r1, #880 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ ldrh r2, [r2] ++ mov r4, #6 ++ movw r5, #65535 ++ ldr ip, [r1, #-1356] ++ rsb r2, r2, r2, lsl #3 ++ sub r3, r3, ip ++ asr r2, r2, #3 ++ asr r3, r3, #1 ++ cmp r0, r2 ++ uxthgt r0, r2 ++ ldr r2, .L2560+4 ++ mul r3, r2, r3 ++ mov r2, #0 ++ uxth r3, r3 ++.L2551: ++ uxth lr, r2 ++ cmp r0, lr ++ bls .L2553 ++ mul lr, r4, r3 ++ add r2, r2, #1 ++ ldrh lr, [ip, lr] ++ cmp lr, r5 ++ bne .L2555 ++.L2553: ++ ldr r2, [r1, #-1412] ++ lsl r3, r3, #1 ++ ldrh r0, [r2, r3] ++ pop {r4, r5, pc} ++.L2555: ++ mov r3, lr ++ b .L2551 ++.L2554: ++ mov r0, r3 ++ bx lr ++.L2561: ++ .align 2 ++.L2560: ++ .word .LANCHOR2 ++ .word -1431655765 ++ .fnend ++ .size GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount ++ .align 2 ++ .global FtlPrintInfo2buf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlPrintInfo2buf, %function ++FtlPrintInfo2buf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r0 ++ ldr r7, .L2575 ++ add r5, r8, #12 ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r1, .L2575+4 ++ bl strcpy ++ ldr r2, [r7, #-2768] ++ mov r0, r5 ++ ldr r1, .L2575+8 ++ bl sprintf ++ add r5, r5, r0 ++ ldr r2, [r7, #-1648] ++ mov r0, r5 ++ ldr r1, .L2575+12 ++ bl sprintf ++ ldr r3, .L2575+16 ++ add r5, r5, r0 ++ ldr r3, [r3, #3440] ++ cmp r3, #1 ++ subne r0, r5, r8 ++ bne .L2562 ++ add r3, sp, #28 ++ add r2, sp, #24 ++ add r1, sp, #20 ++ add r0, sp, #16 ++ bl NandcGetTimeCfg ++ ldr r3, [sp, #28] ++ mov r0, r5 ++ ldr r2, [sp, #16] ++ sub r4, r7, #1344 ++ ldr r1, .L2575+20 ++ add r9, r7, #880 ++ str r3, [sp, #4] ++ ldr r3, [sp, #24] ++ str r3, [sp] ++ ldr r3, [sp, #20] ++ bl sprintf ++ add r6, r5, r0 ++ ldr r1, .L2575+24 ++ mov r0, r6 ++ add r6, r6, #10 ++ bl strcpy ++ ldr r2, [r7, #-1284] ++ mov r0, r6 ++ ldr r1, .L2575+28 ++ add r5, r7, #816 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #1124] ++ ldr r1, .L2575+32 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1584] ++ ldr r1, .L2575+36 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1596] ++ ldr r1, .L2575+40 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1600] ++ ldr r1, .L2575+44 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1592] ++ ldr r1, .L2575+48 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1588] ++ ldr r1, .L2575+52 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1604] ++ ldr r1, .L2575+56 ++ mov r0, r6 ++ bl sprintf ++ ldr r2, [r7, #1716] ++ add r6, r6, r0 ++ ldr r1, .L2575+60 ++ mov r0, r6 ++ lsr r2, r2, #11 ++ bl sprintf ++ ldr r2, [r7, #1720] ++ add r6, r6, r0 ++ ldr r1, .L2575+64 ++ mov r0, r6 ++ lsr r2, r2, #11 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1612] ++ ldr r1, .L2575+68 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1608] ++ ldr r1, .L2575+72 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ bl FtlBbtCalcTotleCnt ++ ldrh r2, [r4, #2] ++ mov r3, r0 ++ ldr r1, .L2575+76 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r9] ++ ldr r1, .L2575+80 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1580] ++ ldr r1, .L2575+84 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1576] ++ ldr r1, .L2575+88 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #1728] ++ ldr r1, .L2575+92 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1572] ++ ldr r1, .L2575+96 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1568] ++ ldr r1, .L2575+100 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1564] ++ ldr r1, .L2575+104 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #30] ++ ldr r1, .L2575+108 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r5, #28] ++ ldr r1, .L2575+112 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-2736] ++ ldr r1, .L2575+116 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1632] ++ ldr r1, .L2575+120 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1736] ++ ldr r1, .L2575+124 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #110] ++ ldr r1, .L2575+128 ++ mov r0, r6 ++ bl sprintf ++ sub r3, r7, #1712 ++ add r6, r6, r0 ++ ldrh r2, [r3, #-12] ++ mov r0, r6 ++ ldr r1, .L2575+132 ++ movw r5, #1156 ++ bl sprintf ++ add r3, r7, #1152 ++ add r6, r6, r0 ++ ldrh r2, [r3] ++ mov r0, r6 ++ ldr r1, .L2575+136 ++ bl sprintf ++ add r6, r6, r0 ++ ldr r2, [r7, #-1720] ++ ldr r1, .L2575+140 ++ mov r0, r6 ++ bl sprintf ++ movw r3, #1128 ++ add r6, r6, r0 ++ ldrh r2, [r7, r3] ++ mov r0, r6 ++ ldr r1, .L2575+144 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #-4] ++ ldr r1, .L2575+148 ++ mov r0, r6 ++ bl sprintf ++ add r4, r7, #884 ++ add r6, r6, r0 ++ ldrh r2, [r4, #2] ++ mov r0, r6 ++ ldr r1, .L2575+152 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #890] @ zero_extendqisi2 ++ ldr r1, .L2575+156 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4] ++ ldr r1, .L2575+160 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #892] @ zero_extendqisi2 ++ ldr r1, .L2575+164 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #4] ++ ldr r1, .L2575+168 ++ mov r0, r6 ++ bl sprintf ++ ldrh r3, [r4] ++ add r6, r6, r0 ++ ldr r2, [r7, #-1404] ++ mov r0, r6 ++ ldr r1, .L2575+172 ++ add r4, r7, #932 ++ lsl r3, r3, #1 ++ ldrh r2, [r2, r3] ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #2] ++ ldr r1, .L2575+176 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #938] @ zero_extendqisi2 ++ ldr r1, .L2575+180 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4] ++ ldr r1, .L2575+184 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #940] @ zero_extendqisi2 ++ ldr r1, .L2575+188 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #4] ++ ldr r1, .L2575+192 ++ mov r0, r6 ++ bl sprintf ++ ldrh r3, [r4] ++ add r6, r6, r0 ++ ldr r2, [r7, #-1404] ++ mov r0, r6 ++ ldr r1, .L2575+196 ++ add r4, r7, #980 ++ lsl r3, r3, #1 ++ ldrh r2, [r2, r3] ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #2] ++ ldr r1, .L2575+200 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #986] @ zero_extendqisi2 ++ ldr r1, .L2575+204 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4] ++ ldr r1, .L2575+208 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #988] @ zero_extendqisi2 ++ ldr r1, .L2575+212 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #4] ++ ldr r1, .L2575+216 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #178] ++ ldr r1, .L2575+220 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #1162] @ zero_extendqisi2 ++ ldr r1, .L2575+224 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r7, r5] ++ ldr r1, .L2575+228 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrb r2, [r7, #1164] @ zero_extendqisi2 ++ ldr r1, .L2575+232 ++ mov r0, r6 ++ bl sprintf ++ add r6, r6, r0 ++ ldrh r2, [r4, #180] ++ ldr r1, .L2575+236 ++ mov r0, r6 ++ bl sprintf ++ ldr r3, [r7, #1280] ++ add r6, r6, r0 ++ ldr r1, [r7, #-1616] ++ mov r0, r6 ++ ldr r2, [r7, #-1868] ++ str r3, [sp, #4] ++ ldr r3, [r7, #1288] ++ orr r2, r2, r1, lsl #8 ++ ldr r1, .L2575+240 ++ str r3, [sp] ++ ldr r3, [r7, #1284] ++ bl sprintf ++ add r4, r6, r0 ++ ldr r2, [r7, #1276] ++ ldr r1, .L2575+244 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldr r2, [r7, #1300] ++ ldr r1, .L2575+248 ++ mov r0, r4 ++ bl sprintf ++ sub r6, r7, #1520 ++ add r4, r4, r0 ++ ldrh r2, [r6, #-8] ++ mov r0, r4 ++ ldr r1, .L2575+252 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r2, [r6, #-6] ++ ldr r1, .L2575+256 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldr r2, [r7, #-1544] ++ ldr r1, .L2575+260 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r2, [r6, #-4] ++ ldr r1, .L2575+264 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ bl GetFreeBlockMinEraseCount ++ ldr r1, .L2575+268 ++ mov r2, r0 ++ mov r0, r4 ++ bl sprintf ++ add r4, r4, r0 ++ ldrh r0, [r9] ++ bl GetFreeBlockMaxEraseCount ++ ldr r1, .L2575+272 ++ mov r2, r0 ++ mov r0, r4 ++ bl sprintf ++ ldrh r3, [r7, r5] ++ movw r2, #65535 ++ add r4, r4, r0 ++ cmp r3, r2 ++ beq .L2565 ++ ldr r2, [r7, #-1404] ++ lsl r3, r3, #1 ++ mov r0, r4 ++ ldr r1, .L2575+276 ++ ldrh r2, [r2, r3] ++ bl sprintf ++ add r4, r4, r0 ++.L2565: ++ mov r0, #0 ++ ldr r9, .L2575+280 ++ bl List_get_gc_head_node ++ uxth r3, r0 ++ mov r5, #0 ++ movw fp, #65535 ++ mov r10, #6 ++.L2567: ++ cmp r3, fp ++ beq .L2566 ++ ldr r2, [r7, #-1412] ++ lsl r1, r3, #1 ++ mul r6, r10, r3 ++ mov r0, r4 ++ ldrh r2, [r2, r1] ++ str r2, [sp, #8] ++ ldr r2, [r7, #-1356] ++ add r2, r2, r6 ++ ldrh r2, [r2, #4] ++ str r2, [sp, #4] ++ ldr r2, [r7, #-1404] ++ ldrh r2, [r2, r1] ++ mov r1, r9 ++ str r2, [sp] ++ mov r2, r5 ++ bl sprintf ++ add r5, r5, #1 ++ ldr r3, [r7, #-1356] ++ cmp r5, #16 ++ add r4, r4, r0 ++ ldrh r3, [r3, r6] ++ bne .L2567 ++.L2566: ++ ldr r2, [r7, #-1356] ++ mov r5, #0 ++ ldr r3, [r7, #876] ++ movw r9, #65535 ++ ldr fp, .L2575+284 ++ mov r10, #6 ++ sub r3, r3, r2 ++ ldr r2, .L2575+288 ++ asr r3, r3, #1 ++ mul r3, r2, r3 ++ uxth r3, r3 ++.L2569: ++ cmp r3, r9 ++ beq .L2568 ++ ldr r1, [r7, #-1412] ++ lsl r2, r3, #1 ++ mul r6, r10, r3 ++ mov r0, r4 ++ ldrh r2, [r1, r2] ++ mov r1, fp ++ str r2, [sp, #4] ++ ldr r2, [r7, #-1356] ++ add r2, r2, r6 ++ ldrh r2, [r2, #4] ++ str r2, [sp] ++ mov r2, r5 ++ add r5, r5, #1 ++ bl sprintf ++ cmp r5, #4 ++ add r4, r4, r0 ++ ldrne r3, [r7, #-1356] ++ ldrhne r3, [r3, r6] ++ bne .L2569 ++.L2568: ++ sub r0, r4, r8 ++.L2562: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2576: ++ .align 2 ++.L2575: ++ .word .LANCHOR2 ++ .word .LC75 ++ .word .LC76 ++ .word .LC77 ++ .word .LANCHOR1 ++ .word .LC78 ++ .word .LC79 ++ .word .LC80 ++ .word .LC81 ++ .word .LC82 ++ .word .LC83 ++ .word .LC84 ++ .word .LC85 ++ .word .LC86 ++ .word .LC87 ++ .word .LC88 ++ .word .LC89 ++ .word .LC90 ++ .word .LC91 ++ .word .LC92 ++ .word .LC93 ++ .word .LC94 ++ .word .LC95 ++ .word .LC96 ++ .word .LC97 ++ .word .LC98 ++ .word .LC99 ++ .word .LC100 ++ .word .LC101 ++ .word .LC102 ++ .word .LC103 ++ .word .LC104 ++ .word .LC105 ++ .word .LC106 ++ .word .LC107 ++ .word .LC108 ++ .word .LC109 ++ .word .LC110 ++ .word .LC111 ++ .word .LC112 ++ .word .LC113 ++ .word .LC114 ++ .word .LC115 ++ .word .LC116 ++ .word .LC117 ++ .word .LC118 ++ .word .LC119 ++ .word .LC120 ++ .word .LC121 ++ .word .LC122 ++ .word .LC123 ++ .word .LC124 ++ .word .LC125 ++ .word .LC126 ++ .word .LC127 ++ .word .LC128 ++ .word .LC129 ++ .word .LC130 ++ .word .LC131 ++ .word .LC132 ++ .word .LC133 ++ .word .LC134 ++ .word .LC135 ++ .word .LC136 ++ .word .LC137 ++ .word .LC138 ++ .word .LC139 ++ .word .LC140 ++ .word .LC141 ++ .word .LC142 ++ .word .LC143 ++ .word .LC144 ++ .word -1431655765 ++ .fnend ++ .size FtlPrintInfo2buf, .-FtlPrintInfo2buf ++ .align 2 ++ .global ftl_proc_ftl_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_proc_ftl_read, %function ++ftl_proc_ftl_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ ldr r2, .L2579 ++ ldr r1, .L2579+4 ++ bl sprintf ++ add r4, r5, r0 ++ mov r0, r4 ++ bl FtlPrintInfo2buf ++ add r0, r4, r0 ++ sub r0, r0, r5 ++ pop {r4, r5, r6, pc} ++.L2580: ++ .align 2 ++.L2579: ++ .word .LC145 ++ .word .LC49 ++ .fnend ++ .size ftl_proc_ftl_read, .-ftl_proc_ftl_read ++ .align 2 ++ .global GetSwlReplaceBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type GetSwlReplaceBlock, %function ++GetSwlReplaceBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, .L2609 ++ ldr r2, [r4, #1728] ++ ldr r3, [r4, #-1564] ++ cmp r2, r3 ++ bcs .L2582 ++ sub r2, r4, #1712 ++ mov r3, #0 ++ ldrh r1, [r2, #-12] ++ ldr r2, [r4, #-1412] ++ str r3, [r4, #-1580] ++ sub r2, r2, #2 ++.L2583: ++ cmp r3, r1 ++ bcc .L2584 ++ ldr r5, [r4, #-1580] ++ mov r0, r5 ++ bl __aeabi_uidiv ++ ldr r3, .L2609+4 ++ str r0, [r4, #1728] ++ ldr r0, [r4, #-1576] ++ ldrh r1, [r3, #-10] ++ sub r0, r5, r0 ++ bl __aeabi_uidiv ++ str r0, [r4, #-1580] ++.L2585: ++ ldr r5, [r4, #-1564] ++ ldr r8, [r4, #1728] ++ add r3, r5, #256 ++ cmp r3, r8 ++ bls .L2590 ++ ldr r2, [r4, #-1568] ++ add r3, r5, #768 ++ cmp r3, r2 ++ bls .L2590 ++ ldr r2, [r4, #-1868] ++ cmp r5, #40 ++ movls r3, #0 ++ movhi r3, #1 ++ cmp r2, #0 ++ orreq r3, r3, #1 ++ cmp r3, #0 ++ beq .L2590 ++.L2592: ++ movw r6, #65535 ++.L2591: ++ mov r0, r6 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2584: ++ ldrh r0, [r2, #2]! ++ add r3, r3, #1 ++ ldr ip, [r4, #-1580] ++ add r0, r0, ip ++ str r0, [r4, #-1580] ++ b .L2583 ++.L2582: ++ ldr r3, [r4, #-1568] ++ cmp r2, r3 ++ addhi r3, r3, #1 ++ strhi r3, [r4, #-1568] ++ movhi r3, #0 ++ bls .L2585 ++.L2587: ++ ldr r2, .L2609+8 ++ ldrh r2, [r2] ++ cmp r3, r2 ++ bcs .L2585 ++ ldr r0, [r4, #-1412] ++ lsl r1, r3, #1 ++ add r3, r3, #1 ++ ldrh r2, [r0, r1] ++ add r2, r2, #1 ++ strh r2, [r0, r1] @ movhi ++ b .L2587 ++.L2590: ++ ldr r6, .L2609+12 ++ ldrh r0, [r6] ++ add r0, r0, r0, lsl #1 ++ ubfx r0, r0, #2, #16 ++ bl GetFreeBlockMaxEraseCount ++ add r1, r5, #64 ++ mov r10, r0 ++ cmp r0, r1 ++ movcs r1, #0 ++ movcc r1, #1 ++ cmp r5, #40 ++ movls r1, #0 ++ cmp r1, #0 ++ bne .L2592 ++ ldr r3, [r4, #864] ++ cmp r3, #0 ++ beq .L2592 ++ sub r6, r6, #2592 ++ ldr ip, [r4, #-1356] ++ ldrh r2, [r6, #-12] ++ movw r7, #65535 ++ ldr r9, [r4, #-1412] ++ mov fp, #6 ++ ldr lr, .L2609+16 ++ str r2, [sp, #20] ++ mov r2, r7 ++.L2593: ++ ldrh r0, [r3] ++ movw r6, #65535 ++ cmp r0, r6 ++ bne .L2596 ++ mov r6, r2 ++.L2595: ++ movw r3, #65535 ++ cmp r6, r3 ++ beq .L2592 ++ lsl fp, r6, #1 ++ ldrh r1, [r9, fp] ++ cmp r5, r1 ++ bcs .L2597 ++ bl GetFreeBlockMinEraseCount ++ cmp r5, r0 ++ strcc r7, [r4, #-1564] ++.L2597: ++ cmp r8, r1 ++ bls .L2592 ++ add r3, r1, #128 ++ cmp r10, r3 ++ ble .L2592 ++ add r3, r1, #256 ++ cmp r8, r3 ++ bhi .L2598 ++ ldr r3, [r4, #-1568] ++ add r1, r1, #768 ++ cmp r1, r3 ++ bcs .L2592 ++.L2598: ++ str r10, [sp, #8] ++ mov r2, r8 ++ ldrh r3, [r9, fp] ++ mov r1, r6 ++ ldr r0, .L2609+20 ++ str r3, [sp, #4] ++ ldr r3, [r4, #-1404] ++ ldrh r3, [r3, fp] ++ str r3, [sp] ++ ldr r3, [r4, #-1568] ++ bl rk_printk ++ mov r3, #1 ++ str r3, [r4, #-1556] ++ b .L2591 ++.L2596: ++ add r1, r1, #1 ++ ldr r6, [sp, #20] ++ uxth r1, r1 ++ cmp r1, r6 ++ bhi .L2592 ++ ldrh r6, [r3, #4] ++ cmp r6, #0 ++ beq .L2594 ++ sub r3, r3, ip ++ asr r3, r3, #1 ++ mul r3, lr, r3 ++ uxth r6, r3 ++ lsl r3, r6, #1 ++ ldrh r3, [r9, r3] ++ cmp r5, r3 ++ bcs .L2595 ++ cmp r7, r3 ++ movhi r7, r3 ++ movhi r2, r6 ++.L2594: ++ mla r3, fp, r0, ip ++ b .L2593 ++.L2610: ++ .align 2 ++.L2609: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2-1724 ++ .word .LANCHOR2+880 ++ .word -1431655765 ++ .word .LC146 ++ .fnend ++ .size GetSwlReplaceBlock, .-GetSwlReplaceBlock ++ .align 2 ++ .global free_data_superblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type free_data_superblock, %function ++free_data_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L2614 ++ ldr r2, .L2617 ++ lsl r3, r0, #1 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r1, #0 ++ ldr r2, [r2, #-1404] ++ strh r1, [r2, r3] @ movhi ++ bl INSERT_FREE_LIST ++ mov r0, #0 ++ pop {r4, pc} ++.L2614: ++ mov r0, #0 ++ bx lr ++.L2618: ++ .align 2 ++.L2617: ++ .word .LANCHOR2 ++ .fnend ++ .size free_data_superblock, .-free_data_superblock ++ .align 2 ++ .global allocate_data_superblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type allocate_data_superblock, %function ++allocate_data_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r4, .L2669 ++ ldr r3, [r4, #-1280] ++ cmp r3, #0 ++ bne .L2620 ++ mov r5, r0 ++.L2621: ++ ldr r3, .L2669+4 ++ ldrb r2, [r5, #8] @ zero_extendqisi2 ++ cmp r5, r3 ++ sub r7, r3, #100 ++ sub r10, r7, #2592 ++ bne .L2622 ++ ldrh r3, [r7] ++ ldr ip, [r4, #-1556] ++ lsr r0, r3, #1 ++ mul lr, ip, r3 ++ add r1, r0, #1 ++ add r1, r1, lr, lsr #2 ++ ldr lr, [r4, #-1868] ++ uxth r1, r1 ++ cmp lr, #0 ++ beq .L2623 ++ ldr lr, [r4, #-1564] ++ cmp lr, #39 ++ bhi .L2623 ++ cmp lr, #2 ++ bls .L2649 ++ cmp ip, #0 ++ movne r3, #0 ++ andeq r3, r3, #1 ++ cmp r3, #0 ++ moveq r1, r0 ++ beq .L2623 ++.L2649: ++ mov r1, #0 ++ b .L2624 ++.L2622: ++ cmp r2, #1 ++ bne .L2649 ++ ldrh r3, [r10] ++ cmp r3, #1 ++ beq .L2649 ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2649 ++ ldr r0, [r4, #-1868] ++ ldrh r3, [r7] ++ cmp r0, #0 ++ lsr r1, r3, #3 ++ beq .L2623 ++ ldr r0, [r4, #-1564] ++ cmp r0, #1 ++ rsbls r3, r3, r3, lsl #3 ++ ubfxls r1, r3, #3, #16 ++.L2623: ++ cmp r1, #0 ++ subne r1, r1, #1 ++ uxthne r1, r1 ++.L2624: ++ ldr r0, .L2669+8 ++ bl List_pop_index_node ++ ldrh r3, [r7] ++ uxth r8, r0 ++ sub r3, r3, #1 ++ strh r3, [r7] @ movhi ++ ldrh r3, [r10, #-12] ++ cmp r3, r8 ++ bls .L2621 ++ ldr r3, [r4, #-1404] ++ lsl r6, r8, #1 ++ ldrh r7, [r3, r6] ++ cmp r7, #0 ++ bne .L2621 ++ strh r8, [r5] @ movhi ++ mov r0, r5 ++ bl make_superblock ++ ldrb r3, [r5, #7] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2666 ++ ldr r2, .L2669+12 ++ add r9, r5, #16 ++ ldr r0, [r4, #-1488] ++ mov ip, r9 ++ mov lr, r7 ++ ldrh r1, [r2] ++ mov r2, #36 ++ mov r3, r0 ++ mla r1, r2, r1, r0 ++ str r1, [sp, #4] ++.L2627: ++ ldr r1, [sp, #4] ++ cmp r1, r3 ++ bne .L2629 ++ ldr r3, [r4, #-1868] ++ ldr r2, .L2669+16 ++ adds r3, r3, #0 ++ movne r3, #1 ++ cmp r5, r2 ++ movne r3, #0 ++ cmp r3, #0 ++ beq .L2630 ++ ldr r3, [r4, #-1412] ++ ldrh r3, [r3, r6] ++ cmp r3, #40 ++ movhi r3, #0 ++ strbhi r3, [r4, #892] ++.L2630: ++ ldrb r3, [r5, #8] @ zero_extendqisi2 ++ ldr r2, [r4, #-1412] ++ ldr fp, .L2669+20 ++ cmp r3, #0 ++ ldrh r3, [r2, r6] ++ bne .L2631 ++ cmp r3, #0 ++ mov r0, r8 ++ ldrhne r1, [fp, #-10] ++ moveq r3, #2 ++ addne r3, r3, r1 ++ mov r1, #0 ++ strh r3, [r2, r6] @ movhi ++ ldr r3, [r4, #-1580] ++ add r3, r3, #1 ++ str r3, [r4, #-1580] ++ bl ftl_set_blk_mode ++.L2634: ++ ldr r3, [r4, #-1412] ++ ldr r2, [r4, #-1568] ++ ldr r0, [r4, #-1580] ++ ldrh r3, [r3, r6] ++ ldrh r1, [r10, #-12] ++ cmp r3, r2 ++ ldrh r2, [fp, #-10] ++ strhi r3, [r4, #-1568] ++ ldr r3, [r4, #-1576] ++ mla r0, r0, r2, r3 ++ bl __aeabi_uidiv ++ ldr r2, [r4, #-1416] ++ ldr r1, [r4, #-1488] ++ str r0, [r4, #1728] ++ ldr r3, [r2, #16] ++ add r3, r3, #1 ++ str r3, [r2, #16] ++ mov r2, #36 ++ mla r2, r2, r7, r1 ++ add r3, r1, #4 ++ add r2, r2, #40 ++.L2636: ++ add r3, r3, #36 ++ cmp r2, r3 ++ bne .L2637 ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2638 ++ ldrb r3, [r5, #8] @ zero_extendqisi2 ++ mov r2, r7 ++ ldr r0, [r4, #-1488] ++ cmp r3, #1 ++ moveq r1, #0 ++ movne r1, #1 ++ bl FlashEraseBlocks ++.L2638: ++ ldrb r1, [r5, #8] @ zero_extendqisi2 ++ mov r2, r7 ++ ldr r0, [r4, #-1488] ++ mov r10, #0 ++ bl FlashEraseBlocks ++ mov r3, r10 ++ mov r1, #36 ++.L2640: ++ uxth r2, r10 ++ cmp r7, r2 ++ bhi .L2642 ++ cmp r3, #0 ++ ble .L2643 ++ mov r0, r8 ++ bl update_multiplier_value ++ bl FtlBbmTblFlush ++.L2643: ++ ldrb r2, [r5, #7] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L2644 ++.L2666: ++ ldr r3, [r4, #-1404] ++ mvn r2, #0 ++ strh r2, [r3, r6] @ movhi ++ b .L2621 ++.L2629: ++ str lr, [r3, #8] ++ movw fp, #65535 ++ str lr, [r3, #12] ++ add r3, r3, #36 ++ ldrh r1, [ip], #2 ++ cmp r1, fp ++ mlane fp, r2, r7, r0 ++ lslne r1, r1, #10 ++ addne r7, r7, #1 ++ uxthne r7, r7 ++ strne r1, [fp, #4] ++ b .L2627 ++.L2631: ++ add r3, r3, #1 ++ mov r0, r8 ++ strh r3, [r2, r6] @ movhi ++ ldr r3, [r4, #-1576] ++ add r3, r3, #1 ++ str r3, [r4, #-1576] ++ bl ftl_set_blk_mode.part.17 ++ b .L2634 ++.L2637: ++ ldr r1, [r3, #-36] ++ bic r1, r1, #1020 ++ bic r1, r1, #3 ++ str r1, [r3, #-36] ++ b .L2636 ++.L2642: ++ mul r2, r1, r10 ++ ldr r0, [r4, #-1488] ++ add ip, r0, r2 ++ ldr r2, [r0, r2] ++ cmn r2, #1 ++ bne .L2641 ++ ldr r0, [ip, #4] ++ add r3, r3, #1 ++ str r1, [sp, #12] ++ str r2, [sp, #8] ++ ubfx r0, r0, #10, #16 ++ str r3, [sp, #4] ++ bl FtlBbmMapBadBlock ++ ldr r2, [sp, #8] ++ ldr r1, [sp, #12] ++ ldr r3, [sp, #4] ++ strh r2, [r9] @ movhi ++ ldrb r2, [r5, #7] @ zero_extendqisi2 ++ sub r2, r2, #1 ++ strb r2, [r5, #7] ++.L2641: ++ add r10, r10, #1 ++ add r9, r9, #2 ++ b .L2640 ++.L2644: ++ ldrh r3, [fp, #-2] ++ strh r8, [r5] @ movhi ++ smulbb r3, r3, r2 ++ mov r2, #0 ++ strh r2, [r5, #2] @ movhi ++ strb r2, [r5, #6] ++ ldr r2, [r4, #-1612] ++ uxth r3, r3 ++ ldr r1, [r4, #-1404] ++ strh r3, [r5, #4] @ movhi ++ str r2, [r5, #12] ++ add r2, r2, #1 ++ str r2, [r4, #-1612] ++ ldrh r2, [r5] ++ lsl r2, r2, #1 ++ strh r3, [r1, r2] @ movhi ++.L2620: ++ mov r0, #0 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2670: ++ .align 2 ++.L2669: ++ .word .LANCHOR2 ++ .word .LANCHOR2+980 ++ .word .LANCHOR2+876 ++ .word .LANCHOR2-1732 ++ .word .LANCHOR2+884 ++ .word .LANCHOR2-1664 ++ .fnend ++ .size allocate_data_superblock, .-allocate_data_superblock ++ .align 2 ++ .global FtlGcBufInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcBufInit, %function ++FtlGcBufInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L2677 ++ mov ip, #12 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov lr, #1 ++ mov r4, #36 ++ mov r3, #0 ++ str r3, [r2, #1732] ++.L2672: ++ ldr r8, .L2677+4 ++ uxth r5, r3 ++ add r0, r3, #1 ++ ldrh r1, [r8] ++ cmp r5, r1 ++ bcc .L2673 ++ mov ip, #12 ++ mov lr, #0 ++.L2674: ++ ldr r3, [r2, #-1476] ++ cmp r1, r3 ++ bcc .L2675 ++ pop {r4, r5, r6, r7, r8, pc} ++.L2673: ++ uxth r3, r3 ++ ldr r6, [r2, #-1444] ++ mul r5, ip, r3 ++ add r1, r6, r5 ++ str lr, [r1, #8] ++ ldrh r1, [r8, #76] ++ mul r1, r3, r1 ++ add r7, r1, #3 ++ cmp r1, #0 ++ movlt r1, r7 ++ ldr r7, [r2, #-1460] ++ bic r1, r1, #3 ++ add r1, r7, r1 ++ str r1, [r6, r5] ++ ldrh r1, [r8, #78] ++ ldr r7, [r2, #-1444] ++ mul r1, r3, r1 ++ add r6, r7, r5 ++ add r8, r1, #3 ++ cmp r1, #0 ++ movlt r1, r8 ++ ldr r8, [r2, #-1432] ++ bic r1, r1, #3 ++ add r1, r8, r1 ++ str r1, [r6, #4] ++ ldr r1, [r2, #-1484] ++ mla r3, r4, r3, r1 ++ ldr r1, [r7, r5] ++ str r1, [r3, #8] ++ ldr r1, [r6, #4] ++ str r1, [r3, #12] ++ mov r3, r0 ++ b .L2672 ++.L2675: ++ mul r4, ip, r1 ++ ldr r6, [r2, #-1444] ++ ldr r5, .L2677+8 ++ add r3, r6, r4 ++ str lr, [r3, #8] ++ ldrh r3, [r5] ++ mul r3, r1, r3 ++ add r0, r3, #3 ++ cmp r3, #0 ++ movlt r3, r0 ++ ldr r0, [r2, #-1460] ++ bic r3, r3, #3 ++ add r3, r0, r3 ++ str r3, [r6, r4] ++ ldrh r3, [r5, #2] ++ ldr r0, [r2, #-1444] ++ mul r3, r1, r3 ++ add r0, r0, r4 ++ add r1, r1, #1 ++ uxth r1, r1 ++ add r4, r3, #3 ++ cmp r3, #0 ++ movlt r3, r4 ++ ldr r4, [r2, #-1432] ++ bic r3, r3, #3 ++ add r3, r4, r3 ++ str r3, [r0, #4] ++ b .L2674 ++.L2678: ++ .align 2 ++.L2677: ++ .word .LANCHOR2 ++ .word .LANCHOR2-1732 ++ .word .LANCHOR2-1656 ++ .fnend ++ .size FtlGcBufInit, .-FtlGcBufInit ++ .align 2 ++ .global FtlVariablesInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVariablesInit, %function ++FtlVariablesInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mvn r3, #0 ++ ldr r4, .L2681 ++ movw r2, #1740 ++ mov r5, #0 ++ mov r1, r5 ++ strh r3, [r4, r2] @ movhi ++ sub r6, r4, #1712 ++ str r3, [r4, #1752] ++ sub r3, r4, #1280 ++ strh r5, [r3, #-8] @ movhi ++ sub r3, r4, #1632 ++ ldrh r2, [r3, #-12] ++ ldr r0, [r4, #-1392] ++ str r5, [r4, #1736] ++ str r5, [r4, #1744] ++ lsl r2, r2, #1 ++ str r5, [r4, #1748] ++ str r5, [r4, #-1868] ++ bl ftl_memset ++ ldrh r2, [r6, #-10] ++ mov r1, r5 ++ ldr r0, [r4, #-1412] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldrh r2, [r6, #-10] ++ mov r1, r5 ++ ldr r0, [r4, #-1420] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ mov r1, r5 ++ mov r2, #48 ++ add r0, r4, #816 ++ bl ftl_memset ++ add r0, r4, #1200 ++ mov r2, #512 ++ mov r1, r5 ++ add r0, r0, #4 ++ bl ftl_memset ++ bl FtlGcBufInit ++ bl FtlL2PDataInit ++ mov r0, r5 ++ pop {r4, r5, r6, pc} ++.L2682: ++ .align 2 ++.L2681: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlVariablesInit, .-FtlVariablesInit ++ .align 2 ++ .global FtlGcBufFree ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcBufFree, %function ++FtlGcBufFree: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2691 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov lr, #0 ++ mov r5, #36 ++ mov r7, #12 ++ mov r8, lr ++ ldr r6, [r3, #-1476] ++ ldr r4, [r3, #-1444] ++.L2684: ++ uxth r3, lr ++ cmp r1, r3 ++ popls {r4, r5, r6, r7, r8, r9, r10, pc} ++ mla ip, r5, r3, r0 ++ mov r2, #0 ++.L2685: ++ uxth r3, r2 ++ cmp r6, r3 ++ bls .L2686 ++ mul r3, r7, r3 ++ add r2, r2, #1 ++ ldr r10, [r4, r3] ++ add r9, r4, r3 ++ ldr r3, [ip, #8] ++ cmp r10, r3 ++ bne .L2685 ++ str r8, [r9, #8] ++.L2686: ++ add lr, lr, #1 ++ b .L2684 ++.L2692: ++ .align 2 ++.L2691: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcBufFree, .-FtlGcBufFree ++ .align 2 ++ .global FtlGcBufAlloc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcBufAlloc, %function ++FtlGcBufAlloc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2701 ++ mov ip, #0 ++ push {r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ mov r6, #12 ++ mov r7, #1 ++ mov r8, #36 ++ ldr r4, [r3, #-1476] ++ ldr r5, [r3, #-1444] ++.L2694: ++ uxth r2, ip ++ cmp r1, r2 ++ bhi .L2698 ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L2698: ++ mov lr, #0 ++.L2695: ++ uxth r3, lr ++ cmp r4, r3 ++ bls .L2696 ++ mla r3, r6, r3, r5 ++ add lr, lr, #1 ++ ldr r9, [r3, #8] ++ cmp r9, #0 ++ bne .L2695 ++ mla r2, r8, r2, r0 ++ ldr lr, [r3] ++ str r7, [r3, #8] ++ str lr, [r2, #8] ++ ldr r3, [r3, #4] ++ str r3, [r2, #12] ++.L2696: ++ add ip, ip, #1 ++ b .L2694 ++.L2702: ++ .align 2 ++.L2701: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcBufAlloc, .-FtlGcBufAlloc ++ .align 2 ++ .global IsBlkInGcList ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type IsBlkInGcList, %function ++IsBlkInGcList: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L2708 ++ movw r1, #1756 ++ ldr r3, [r2, #-1508] ++ ldrh r2, [r2, r1] ++ add r2, r3, r2, lsl #1 ++.L2704: ++ cmp r3, r2 ++ bne .L2706 ++ mov r0, #0 ++ bx lr ++.L2706: ++ ldrh r1, [r3], #2 ++ cmp r1, r0 ++ bne .L2704 ++ mov r0, #1 ++ bx lr ++.L2709: ++ .align 2 ++.L2708: ++ .word .LANCHOR2 ++ .fnend ++ .size IsBlkInGcList, .-IsBlkInGcList ++ .align 2 ++ .global FtlGcUpdatePage ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcUpdatePage, %function ++FtlGcUpdatePage: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, r0 ++ ubfx r0, r0, #10, #16 ++ mov r5, r1 ++ mov r6, r2 ++ bl P2V_block_in_plane ++ ldr r3, .L2715 ++ movw r2, #1756 ++ mov ip, #0 ++ ldrh lr, [r3, r2] ++ ldr r2, [r3, #-1508] ++ sub r1, r2, #2 ++.L2711: ++ uxth r7, ip ++ cmp r7, lr ++ bcc .L2713 ++ bne .L2712 ++ lsl ip, r7, #1 ++ strh r0, [r2, ip] @ movhi ++ movw r2, #1756 ++ ldrh r0, [r3, r2] ++ add r0, r0, #1 ++ strh r0, [r3, r2] @ movhi ++ b .L2712 ++.L2713: ++ ldrh r7, [r1, #2]! ++ add ip, ip, #1 ++ cmp r7, r0 ++ bne .L2711 ++.L2712: ++ movw ip, #1758 ++ mov r0, #12 ++ ldrh r2, [r3, ip] ++ mul r0, r0, r2 ++ ldr r2, [r3, #-1504] ++ add r1, r2, r0 ++ stmib r1, {r5, r6} ++ str r4, [r2, r0] ++ ldrh r2, [r3, ip] ++ add r2, r2, #1 ++ strh r2, [r3, ip] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L2716: ++ .align 2 ++.L2715: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcUpdatePage, .-FtlGcUpdatePage ++ .align 2 ++ .global FtlGcPageVarInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcPageVarInit, %function ++FtlGcPageVarInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r3, #0 ++ ldr r4, .L2719 ++ movw r2, #1756 ++ mov r1, #255 ++ strh r3, [r4, r2] @ movhi ++ sub r5, r4, #1648 ++ movw r2, #1758 ++ ldr r0, [r4, #-1508] ++ strh r3, [r4, r2] @ movhi ++ ldrh r2, [r5, #-14] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldrh r3, [r5, #-14] ++ mov r2, #12 ++ ldr r0, [r4, #-1504] ++ mov r1, #255 ++ mul r2, r2, r3 ++ bl ftl_memset ++ pop {r4, r5, r6, lr} ++ b FtlGcBufInit ++.L2720: ++ .align 2 ++.L2719: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcPageVarInit, .-FtlGcPageVarInit ++ .align 2 ++ .global FtlGcScanTempBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcScanTempBlk, %function ++FtlGcScanTempBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 64 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L2770 ++ movw r3, #3444 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #68 ++ sub sp, sp, #68 ++ mov r5, r0 ++ str r1, [sp, #8] ++ ldrh r6, [r2, r3] ++ movw r3, #65535 ++ cmp r6, r3 ++ beq .L2753 ++ cmp r6, #0 ++ bne .L2722 ++.L2723: ++ bl FtlGcPageVarInit ++ b .L2724 ++.L2753: ++ mov r6, #0 ++.L2722: ++ ldr r3, .L2770+4 ++ ldr r2, [sp, #8] ++ ldrh r3, [r3, #-2] ++ cmp r3, r2 ++ beq .L2723 ++.L2724: ++ ldr r4, .L2770+8 ++ mov r2, #0 ++ mvn r3, #0 ++ stm sp, {r2, r3} ++.L2725: ++ ldrh r1, [r5] ++ movw r3, #65535 ++ mov r2, #0 ++ strb r2, [r5, #8] ++ cmp r1, r3 ++ beq .L2726 ++.L2750: ++ ldr r3, .L2770+12 ++ add ip, r5, #16 ++ ldr r0, [r4, #-1500] ++ movw r8, #65535 ++ ldr fp, [r4, #-1432] ++ mov r9, #36 ++ ldrh r2, [r3, #-4] ++ ldrh lr, [r3, #74] ++ str r2, [sp, #12] ++ ldr r2, [r4, #-1460] ++ str r2, [sp, #16] ++ ldrh r2, [r3, #72] ++ str r2, [sp, #20] ++ mov r2, #0 ++ mov r7, r2 ++.L2727: ++ ldr r1, [sp, #12] ++ uxth r3, r2 ++ cmp r1, r3 ++ bhi .L2729 ++ mov r10, #0 ++ mov r2, #0 ++ mov r1, r7 ++ bl FlashReadPages ++.L2730: ++ uxth r3, r10 ++ cmp r7, r3 ++ bhi .L2748 ++ ldr r3, [sp] ++ add r6, r6, #1 ++ uxth r6, r6 ++ add r3, r3, #1 ++ str r3, [sp] ++ ldr r2, [sp] ++ ldr r3, [sp, #8] ++ cmp r3, r2 ++ ldr r2, .L2770+4 ++ bls .L2749 ++.L2751: ++ ldrh r3, [r2, #-2] ++ cmp r3, r6 ++ bhi .L2750 ++ mov r2, #0 ++ b .L2726 ++.L2729: ++ ldrh r3, [ip], #2 ++ cmp r3, r8 ++ beq .L2728 ++ mla r1, r9, r7, r0 ++ orr r3, r6, r3, lsl #10 ++ str r3, [r1, #4] ++ ldr r3, [sp, #20] ++ mul r3, r3, r7 ++ add r10, r3, #3 ++ cmp r3, #0 ++ movlt r3, r10 ++ ldr r10, [sp, #16] ++ bic r3, r3, #3 ++ add r3, r10, r3 ++ str r3, [r1, #8] ++ mul r3, lr, r7 ++ add r7, r7, #1 ++ uxth r7, r7 ++ add r10, r3, #3 ++ cmp r3, #0 ++ movlt r3, r10 ++ bic r3, r3, #3 ++ add r3, fp, r3 ++ str r3, [r1, #12] ++.L2728: ++ add r2, r2, #1 ++ b .L2727 ++.L2748: ++ mov r9, #36 ++ ldr r8, [r4, #-1500] ++ mul r9, r9, r10 ++ add r3, r8, r9 ++ ldr fp, [r3, #4] ++ str r3, [sp, #12] ++ ubfx r0, fp, #10, #16 ++ bl P2V_plane ++ ldr r8, [r8, r9] ++ mov r2, r0 ++ ldr r3, [sp, #12] ++ cmp r8, #0 ++ ldr r3, [r3, #12] ++ bne .L2731 ++ ldrh r0, [r3] ++ movw r1, #65535 ++ cmp r0, r1 ++ bne .L2732 ++.L2735: ++ ldrb r1, [r4, #-2740] @ zero_extendqisi2 ++ cmp r1, #0 ++ beq .L2765 ++ mov r3, #1 ++ str r3, [r4, #1748] ++.L2726: ++ ldr r1, .L2770 ++ mvn r0, #0 ++ movw r3, #3444 ++ strh r6, [r5, #2] @ movhi ++ strb r2, [r5, #6] ++ strh r0, [r1, r3] @ movhi ++ mov r1, r6 ++ mov r0, r5 ++ bl ftl_sb_update_avl_pages ++ b .L2721 ++.L2732: ++ ldr r0, [r3, #8] ++ ldr r1, [r4, #-1284] ++ cmp r0, r1 ++ bhi .L2735 ++ ldr r2, .L2770+16 ++ ldrb r2, [r2, #36] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L2738 ++.L2739: ++ ldr r2, [r3, #8] ++ mov r1, fp ++ ldr r0, [r3, #12] ++ add r10, r10, #1 ++ bl FtlGcUpdatePage ++ b .L2730 ++.L2765: ++ ldrh r3, [r5] ++ ldr r2, [r4, #-1404] ++ lsl r3, r3, #1 ++.L2769: ++ strh r1, [r2, r3] @ movhi ++ ldrh r0, [r5] ++ bl INSERT_FREE_LIST ++ ldr r2, .L2770+20 ++ mvn r3, #0 ++ strh r3, [r5] @ movhi ++ strh r3, [r2] @ movhi ++.L2768: ++ bl FtlGcPageVarInit ++ mov r6, #0 ++ b .L2725 ++.L2738: ++ mov r2, r8 ++ add r1, sp, #24 ++ str r3, [sp, #12] ++ bl log2phys ++ ldr r3, [sp, #12] ++ ldr r1, [sp, #24] ++ ldr r2, [r3, #12] ++ cmn r1, #1 ++ sub r0, r2, r1 ++ clz r0, r0 ++ lsr r0, r0, #5 ++ moveq r0, #0 ++ cmp r0, #0 ++ beq .L2739 ++ str r2, [sp, #32] ++ mov r1, #1 ++ ldr r2, [r4, #-1448] ++ add r0, sp, #28 ++ str r2, [sp, #36] ++ ldr r2, [r4, #-1436] ++ str r2, [sp, #40] ++ mov r2, r8 ++ bl FlashReadPages ++ ldr r2, .L2770+24 ++ ldr r1, [r4, #-1500] ++ ldr r3, [sp, #12] ++ ldrh r2, [r2] ++ add r9, r1, r9 ++ ldr r1, [sp, #36] ++ lsl r2, r2, #7 ++.L2740: ++ cmp r8, r2 ++ beq .L2739 ++ ldr r0, [r9, #8] ++ ldr ip, [r0, r8, lsl #2] ++ ldr r0, [r1, r8, lsl #2] ++ cmp ip, r0 ++ beq .L2741 ++ ldr r2, [sp, #32] ++ ldrh r1, [r5] ++ ldr r0, .L2770+28 ++ bl rk_printk ++ ldrh r3, [r5] ++ mov r1, #0 ++ ldr r2, [r4, #-1404] ++ lsl r3, r3, #1 ++ b .L2769 ++.L2741: ++ add r8, r8, #1 ++ b .L2740 ++.L2731: ++ mov r2, fp ++ ldrh r1, [r5] ++ ldr r0, .L2770+32 ++ bl rk_printk ++ ldr r3, [r4, #-1868] ++ cmp r3, #0 ++ ldrh r3, [r5] ++ bne .L2744 ++ ldrb r2, [r4, #-2740] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L2745 ++.L2744: ++ ldr r1, [r4, #-1412] ++ lsl r2, r3, #1 ++ ldrh r2, [r1, r2] ++ cmp r2, #159 ++ bls .L2746 ++.L2745: ++ ldr r2, [r4, #-1500] ++ ldr r2, [r2, r9] ++ cmn r2, #1 ++ bne .L2747 ++.L2746: ++ ldr r2, [r4, #-1500] ++ add r9, r2, r9 ++ ldr r2, [r9, #4] ++ str r2, [sp, #4] ++.L2747: ++ ldr r2, [r4, #-1404] ++ lsl r3, r3, #1 ++ mov r1, #0 ++ strh r1, [r2, r3] @ movhi ++ ldrh r0, [r5] ++ bl INSERT_FREE_LIST ++ mvn r3, #0 ++ strh r3, [r5] @ movhi ++ b .L2768 ++.L2749: ++ ldr r1, .L2770+36 ++ movw r0, #65535 ++ ldrh r3, [r1] ++ cmp r3, r0 ++ beq .L2751 ++ ldr r0, [sp] ++ add r3, r3, r0 ++ strh r3, [r1] @ movhi ++ ldrh r3, [r2, #-2] ++ cmp r3, r6 ++ bls .L2751 ++.L2721: ++ ldr r0, [sp, #4] ++ add sp, sp, #68 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2771: ++ .align 2 ++.L2770: ++ .word .LANCHOR1 ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2 ++ .word .LANCHOR2-1728 ++ .word .LANCHOR0 ++ .word .LANCHOR2+1156 ++ .word .LANCHOR2-1660 ++ .word .LC147 ++ .word .LC148 ++ .word .LANCHOR1+3444 ++ .fnend ++ .size FtlGcScanTempBlk, .-FtlGcScanTempBlk ++ .align 2 ++ .global FtlGcRefreshOpenBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcRefreshOpenBlock, %function ++FtlGcRefreshOpenBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r6, .L2780 ++ ldrh r3, [r6] ++ cmp r3, r0 ++ beq .L2774 ++ add r5, r6, #16 ++ ldrh r3, [r5, #-14] ++ cmp r3, r0 ++ beq .L2774 ++ ldrh r3, [r5, #-12] ++ cmp r3, r0 ++ beq .L2774 ++ ldrh r3, [r5, #-10] ++ cmp r3, r0 ++ beq .L2774 ++ mov r4, r0 ++ mov r1, r0 ++ ldr r0, .L2780+4 ++ bl rk_printk ++ ldrh r2, [r6] ++ movw r3, #65535 ++ cmp r2, r3 ++ strheq r4, [r6] @ movhi ++ beq .L2774 ++ ldrh r2, [r5, #-14] ++ cmp r2, r3 ++ strheq r4, [r5, #-14] @ movhi ++ beq .L2774 ++ ldrh r2, [r5, #-12] ++ cmp r2, r3 ++ strheq r4, [r5, #-12] @ movhi ++ beq .L2774 ++ ldrh r2, [r5, #-10] ++ cmp r2, r3 ++ strheq r4, [r5, #-10] @ movhi ++.L2774: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L2781: ++ .align 2 ++.L2780: ++ .word .LANCHOR2-1536 ++ .word .LC149 ++ .fnend ++ .size FtlGcRefreshOpenBlock, .-FtlGcRefreshOpenBlock ++ .align 2 ++ .global FtlGcRefreshBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcRefreshBlock, %function ++FtlGcRefreshBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r6, .L2793 ++ ldrh r3, [r6] ++ cmp r3, r0 ++ beq .L2790 ++ add r5, r6, #16 ++ ldrh r3, [r5, #-14] ++ cmp r3, r0 ++ beq .L2790 ++ ldrh r3, [r5, #-12] ++ cmp r3, r0 ++ beq .L2790 ++ ldrh r3, [r5, #-10] ++ cmp r3, r0 ++ beq .L2790 ++ mov r4, r0 ++ mov r1, r0 ++ ldr r0, .L2793+4 ++ bl rk_printk ++ ldrh r2, [r6] ++ movw r3, #65535 ++ cmp r2, r3 ++ strheq r4, [r6] @ movhi ++ beq .L2790 ++ ldrh r2, [r5, #-14] ++ cmp r2, r3 ++ strheq r4, [r5, #-14] @ movhi ++ beq .L2790 ++ ldrh r2, [r5, #-12] ++ cmp r2, r3 ++ strheq r4, [r5, #-12] @ movhi ++ beq .L2790 ++ ldrh r2, [r5, #-10] ++ cmp r2, r3 ++ bne .L2791 ++ strh r4, [r5, #-10] @ movhi ++.L2790: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L2791: ++ mvn r0, #0 ++ pop {r4, r5, r6, pc} ++.L2794: ++ .align 2 ++.L2793: ++ .word .LANCHOR2-1536 ++ .word .LC149 ++ .fnend ++ .size FtlGcRefreshBlock, .-FtlGcRefreshBlock ++ .align 2 ++ .global FtlGcMarkBadPhyBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcMarkBadPhyBlk, %function ++FtlGcMarkBadPhyBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, r0 ++ ldr r6, .L2804 ++ bl P2V_block_in_plane ++ sub r7, r6, #1520 ++ mov r4, r0 ++ mov r2, r5 ++ ldrh r1, [r7, #-2] ++ ldr r0, .L2804+4 ++ bl rk_printk ++ mov r0, r4 ++ bl FtlGcRefreshBlock ++ ldr r3, [r6, #-1868] ++ cmp r3, #0 ++ beq .L2796 ++ ldr r2, [r6, #-1412] ++ lsl r4, r4, #1 ++ ldrh r3, [r2, r4] ++ cmp r3, #39 ++ subhi r3, r3, #40 ++ strhhi r3, [r2, r4] @ movhi ++.L2796: ++ ldrh r3, [r7, #-2] ++ mov r2, #0 ++ ldr r0, .L2804+8 ++.L2797: ++ uxth r1, r2 ++ cmp r3, r1 ++ bhi .L2799 ++ cmp r3, #15 ++ addls r2, r3, #1 ++ lslls r3, r3, #1 ++ strhls r2, [r7, #-2] @ movhi ++ ldrls r2, .L2804+8 ++ strhls r5, [r2, r3] @ movhi ++ b .L2798 ++.L2799: ++ add r2, r2, #1 ++ add r1, r0, r2, lsl #1 ++ ldrh r1, [r1, #-2] ++ cmp r1, r5 ++ bne .L2797 ++.L2798: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L2805: ++ .align 2 ++.L2804: ++ .word .LANCHOR2 ++ .word .LC150 ++ .word .LANCHOR2+1760 ++ .fnend ++ .size FtlGcMarkBadPhyBlk, .-FtlGcMarkBadPhyBlk ++ .align 2 ++ .global FtlGcReFreshBadBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcReFreshBadBlk, %function ++FtlGcReFreshBadBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, .L2813 ++ ldrh r3, [r4, #-2] ++ cmp r3, #0 ++ beq .L2807 ++ ldrh r1, [r4, #-16] ++ movw r2, #65535 ++ cmp r1, r2 ++ bne .L2807 ++ add r4, r4, #16 ++ ldrh r2, [r4, #-14] ++ cmp r2, r3 ++ ldr r2, .L2813+4 ++ movcs r3, #0 ++ strhcs r3, [r4, #-14] @ movhi ++ ldrh r3, [r4, #-14] ++ lsl r3, r3, #1 ++ ldrh r0, [r2, r3] ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ ldrh r3, [r4, #-14] ++ add r3, r3, #1 ++ strh r3, [r4, #-14] @ movhi ++.L2807: ++ mov r0, #0 ++ pop {r4, pc} ++.L2814: ++ .align 2 ++.L2813: ++ .word .LANCHOR2-1520 ++ .word .LANCHOR2+1760 ++ .fnend ++ .size FtlGcReFreshBadBlk, .-FtlGcReFreshBadBlk ++ .align 2 ++ .global FtlGcFreeBadSuperBlk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcFreeBadSuperBlk, %function ++FtlGcFreeBadSuperBlk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L2828 ++ ldrh r3, [r4, #-2] ++ cmp r3, #0 ++ beq .L2816 ++ add r9, r4, #1520 ++ mov r7, #0 ++ add fp, r9, #1760 ++ str r0, [sp] ++.L2817: ++ ldr r3, .L2828+4 ++ ldrh r2, [r3, #-4] ++ uxth r3, r7 ++ cmp r2, r3 ++ bhi .L2823 ++ bl FtlGcReFreshBadBlk ++.L2816: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2823: ++ uxtah r3, r9, r7 ++ ldr r1, [sp] ++ mov r8, #0 ++ ldrb r0, [r3, #-1706] @ zero_extendqisi2 ++ bl V2P_block ++ ldr r2, .L2828+8 ++ mov r10, r0 ++.L2818: ++ ldrh r1, [r4, #-2] ++ uxth r5, r8 ++ cmp r1, r5 ++ addls r7, r7, #1 ++ bls .L2817 ++.L2822: ++ uxth r6, r8 ++ lsl r1, r6, #1 ++ ldrh r1, [fp, r1] ++ cmp r1, r10 ++ bne .L2819 ++ mov r1, r10 ++ mov r0, r2 ++ str r2, [sp, #4] ++ add r6, fp, r6, lsl #1 ++ bl rk_printk ++ mov r0, r10 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ ldrh r1, [r4, #-2] ++ ldr r2, [sp, #4] ++.L2820: ++ cmp r5, r1 ++ bcc .L2821 ++ sub r1, r1, #1 ++ strh r1, [r4, #-2] @ movhi ++.L2819: ++ add r8, r8, #1 ++ b .L2818 ++.L2821: ++ ldrh r0, [r6, #2]! ++ add r5, r5, #1 ++ uxth r5, r5 ++ strh r0, [r6, #-2] @ movhi ++ b .L2820 ++.L2829: ++ .align 2 ++.L2828: ++ .word .LANCHOR2-1520 ++ .word .LANCHOR2-1728 ++ .word .LC151 ++ .fnend ++ .size FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk ++ .align 2 ++ .global update_vpc_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type update_vpc_list, %function ++update_vpc_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L2839 ++ lsl r3, r0, #1 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r1, [r2, #-1404] ++ ldrh r3, [r1, r3] ++ cmp r3, #0 ++ bne .L2831 ++ movw r1, #1156 ++ mov r4, r0 ++ ldrh r0, [r2, r1] ++ cmp r0, r4 ++ mvneq r3, #0 ++ strheq r3, [r2, r1] @ movhi ++ beq .L2833 ++ add r1, r2, #884 ++ ldrh r1, [r1] ++ cmp r1, r4 ++ beq .L2830 ++ add r1, r2, #932 ++ ldrh r1, [r1] ++ cmp r1, r4 ++ beq .L2830 ++ add r2, r2, #980 ++ ldrh r2, [r2] ++ cmp r2, r4 ++ beq .L2830 ++.L2833: ++ mov r1, r4 ++ ldr r0, .L2839+4 ++ bl List_remove_node ++ ldr r2, .L2839+8 ++ mov r0, r4 ++ ldrh r3, [r2] ++ sub r3, r3, #1 ++ strh r3, [r2] @ movhi ++ bl free_data_superblock ++ mov r0, r4 ++ bl FtlGcFreeBadSuperBlk ++ mov r3, #1 ++.L2830: ++ mov r0, r3 ++ pop {r4, pc} ++.L2831: ++ bl List_update_data_list ++ mov r3, #0 ++ b .L2830 ++.L2840: ++ .align 2 ++.L2839: ++ .word .LANCHOR2 ++ .word .LANCHOR2+864 ++ .word .LANCHOR2+872 ++ .fnend ++ .size update_vpc_list, .-update_vpc_list ++ .align 2 ++ .global decrement_vpc_count ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type decrement_vpc_count, %function ++decrement_vpc_count: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movw r3, #65535 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ cmp r0, r3 ++ mov r4, r0 ++ ldr r5, .L2852 ++ beq .L2842 ++ ldr r3, [r5, #-1404] ++ lsl r6, r0, #1 ++ ldrh r2, [r3, r6] ++ cmp r2, #0 ++ subne r2, r2, #1 ++ strhne r2, [r3, r6] @ movhi ++ bne .L2842 ++ mov r1, r0 ++ ldr r0, .L2852+4 ++ bl rk_printk ++ ldr r3, [r5, #-1404] ++ mov r2, #32 ++ mov r1, r4 ++ add r0, r5, #876 ++ strh r2, [r3, r6] @ movhi ++ bl test_node_in_list ++ cmp r0, #0 ++ beq .L2844 ++ mov r1, r4 ++ add r0, r5, #876 ++ bl List_remove_node ++ add r2, r5, #880 ++ mov r0, r4 ++ ldrh r3, [r2] ++ sub r3, r3, #1 ++ strh r3, [r2] @ movhi ++ bl INSERT_DATA_LIST ++ ldr r3, [r5, #-1404] ++ mov r1, r4 ++ ldr r0, .L2852+8 ++ ldrh r2, [r3, r6] ++ bl rk_printk ++.L2844: ++ mov r0, r4 ++ bl FtlGcRefreshBlock ++.L2847: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L2842: ++ movw r6, #1740 ++ movw r3, #65535 ++ ldrh r0, [r5, r6] ++ cmp r0, r3 ++ strheq r4, [r5, r6] @ movhi ++ beq .L2847 ++ cmp r4, r0 ++ beq .L2847 ++ bl update_vpc_list ++ adds r0, r0, #0 ++ strh r4, [r5, r6] @ movhi ++ movne r0, #1 ++ pop {r4, r5, r6, pc} ++.L2853: ++ .align 2 ++.L2852: ++ .word .LANCHOR2 ++ .word .LC152 ++ .word .LC153 ++ .fnend ++ .size decrement_vpc_count, .-decrement_vpc_count ++ .align 2 ++ .global FtlRecoverySuperblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlRecoverySuperblock, %function ++FtlRecoverySuperblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldrh r2, [r0] ++ movw r1, #65535 ++ cmp r2, r1 ++ beq .L2999 ++ ldr r2, .L3011 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #52 ++ sub sp, sp, #52 ++ ldrh r3, [r0, #2] ++ mov fp, r0 ++ ldrh r2, [r2, #-2] ++ str r3, [sp, #8] ++ cmp r2, r3 ++ mov r2, #0 ++ strheq r2, [r0, #4] @ movhi ++ strbeq r2, [r0, #6] ++ ldrhne r0, [r0, #16] ++ bne .L2858 ++.L2997: ++ mov r0, #0 ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2859: ++ uxth r0, r2 ++ add r0, fp, r0, lsl #1 ++ ldrh r0, [r0, #16] ++.L2858: ++ cmp r0, r1 ++ add r2, r2, #1 ++ beq .L2859 ++ ldrb r1, [fp, #8] @ zero_extendqisi2 ++ ldrb r3, [fp, #6] @ zero_extendqisi2 ++ cmp r1, #1 ++ str r3, [sp, #12] ++ bne .L2860 ++ bl FtlGetLastWrittenPage ++ cmn r0, #1 ++ mov r4, r0 ++ beq .L2861 ++ ldr r3, .L3011+4 ++ ldrb r3, [r3, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2932 ++ ldr r3, .L3011+8 ++ add r3, r3, r0, lsl #1 ++ ldrh r5, [r3, #84] ++.L2862: ++ ldr r3, .L3011+4 ++ mov r9, #36 ++ sub r2, r3, #1728 ++ ldr r0, [r3, #-1500] ++ ldrh r2, [r2, #-4] ++ sub r3, r3, #1648 ++ ldr lr, [r3, #216] ++ ldrh r7, [r3, #-6] ++ add r3, fp, #16 ++ str r2, [sp] ++ mov r2, #0 ++ mov ip, r3 ++ mov r6, r2 ++ mov r10, r2 ++ str r3, [sp, #20] ++.L2863: ++ ldr r1, [sp] ++ uxth r3, r2 ++ cmp r1, r3 ++ bhi .L2865 ++ ldrb r3, [fp, #8] @ zero_extendqisi2 ++ ldr r8, .L3011+4 ++ cmp r3, #1 ++ movne r3, #0 ++ bne .L3002 ++ ldrb r3, [r8, #-2740] @ zero_extendqisi2 ++ adds r3, r3, #0 ++ movne r3, #1 ++.L3002: ++ str r3, [sp, #24] ++ mov r1, r6 ++ ldr r2, [sp, #24] ++ mov r7, #0 ++ ldr r10, .L3011+4 ++ movw r9, #65535 ++ bl FlashReadPages ++ ldr r3, [r8, #-1608] ++ str r3, [sp, #16] ++.L2867: ++ uxth r3, r7 ++ cmp r6, r3 ++ bhi .L2872 ++ bne .L2870 ++ add r4, r4, #1 ++ uxth r3, r4 ++ str r3, [sp] ++ ldr r3, [r8, #-1500] ++ ldr r0, [r3, #4] ++.L3003: ++ ubfx r0, r0, #10, #16 ++ bl P2V_plane ++ ldrb r3, [fp, #8] @ zero_extendqisi2 ++ str r0, [sp, #4] ++ cmp r3, #1 ++ bne .L2874 ++ ldrb r2, [r8, #-2740] @ zero_extendqisi2 ++ cmp r2, #0 ++ ldreq r2, [sp] ++ ldreq r4, .L3011+8 ++ addeq r4, r4, r2, lsl #1 ++ ldrheq r2, [r4, #84] ++ streq r2, [sp] ++.L2874: ++ ldr r2, .L3011 ++ ldr r1, [sp] ++ ldrh r2, [r2, #-2] ++ cmp r2, r1 ++ ldmib sp, {r0, r1} ++ ldrheq r2, [sp] ++ strheq r2, [fp, #2] @ movhi ++ moveq r2, #0 ++ strbeq r2, [fp, #6] ++ strheq r2, [fp, #4] @ movhi ++ ldrh r2, [sp, #12] ++ str r2, [sp, #28] ++ ldr ip, [sp, #28] ++ ldr r2, [sp] ++ cmp r2, r1 ++ cmpeq r0, ip ++ moveq r2, r0 ++ beq .L3010 ++ ldr r2, [sp, #16] ++ sub r10, r2, #1 ++ movw r2, #65535 ++ subs r9, r9, r2 ++ movne r9, #1 ++ cmp r3, #0 ++ orreq r9, r9, #1 ++ cmp r9, #0 ++ beq .L2878 ++ ldr r3, [r8, #1752] ++ uxth r9, r5 ++ uxth r5, r5 ++ ldr r6, .L3011+4 ++ cmn r3, #1 ++ streq r10, [r8, #1752] ++ ldr r3, [r8, #1752] ++ mvn r8, #0 ++ mov r7, r8 ++ str r3, [sp, #12] ++ ldr r3, [sp, #8] ++ add r3, r3, #7 ++ cmp r5, r3 ++ subgt r4, r9, #7 ++ ldrle r4, [sp, #8] ++ uxthgt r4, r4 ++.L2881: ++ cmp r4, r9 ++ bhi .L2894 ++ ldr r3, .L3011+12 ++ mov ip, #36 ++ ldr r0, [r6, #-1500] ++ ldr r1, [sp, #20] ++ ldrh r3, [r3] ++ str r3, [sp, #16] ++ mov r3, #0 ++ mov r5, r3 ++ b .L2895 ++.L2860: ++ mov r1, #0 ++ bl FtlGetLastWrittenPage ++ cmn r0, #1 ++ mov r4, r0 ++ beq .L2861 ++.L2932: ++ mov r5, r4 ++ b .L2862 ++.L2861: ++ mov r3, #0 ++ strh r3, [fp, #2] @ movhi ++.L3009: ++ strb r3, [fp, #6] ++ b .L2997 ++.L2865: ++ ldrh r3, [ip], #2 ++ movw r1, #65535 ++ cmp r3, r1 ++ beq .L2864 ++ mla r1, r9, r6, r0 ++ orr r3, r5, r3, lsl #10 ++ stmib r1, {r3, r10} ++ mul r3, r7, r6 ++ add r6, r6, #1 ++ uxth r6, r6 ++ add r8, r3, #3 ++ cmp r3, #0 ++ movlt r3, r8 ++ bic r3, r3, #3 ++ add r3, lr, r3 ++ str r3, [r1, #12] ++.L2864: ++ add r2, r2, #1 ++ b .L2863 ++.L2872: ++ mov r3, #36 ++ ldr r1, [r10, #-1500] ++ mul r3, r3, r7 ++ add r2, r1, r3 ++ ldr r3, [r1, r3] ++ cmp r3, #0 ++ bne .L2868 ++ ldr r2, [r2, #12] ++ ldr r3, [r2, #4] ++ cmn r3, #1 ++ beq .L2869 ++ ldr r1, [r10, #-1608] ++ mov r0, r3 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ addne r3, r3, #1 ++ strne r3, [r10, #-1608] ++.L2869: ++ ldr r3, [r2] ++ cmn r3, #1 ++ bne .L2871 ++.L2870: ++ uxth r3, r4 ++ uxth r7, r7 ++ str r3, [sp] ++ mov r2, #36 ++ ldr r3, [r8, #-1500] ++ mla r7, r2, r7, r3 ++ ldr r0, [r7, #4] ++ b .L3003 ++.L2868: ++ ldr r1, [r2, #4] ++ uxth r9, r5 ++ ldr r0, .L3011+16 ++ bl rk_printk ++ ldrh r3, [fp] ++ ldr r2, .L3011+20 ++ strh r3, [r2] @ movhi ++.L2871: ++ add r7, r7, #1 ++ b .L2867 ++.L2883: ++ ldrh r2, [r1], #2 ++ movw lr, #65535 ++ add r3, r3, #1 ++ cmp r2, lr ++ mlane lr, ip, r5, r0 ++ addne r5, r5, #1 ++ orrne r2, r4, r2, lsl #10 ++ uxthne r5, r5 ++ strne r2, [lr, #4] ++.L2895: ++ ldr lr, [sp, #16] ++ uxth r2, r3 ++ cmp r2, lr ++ bcc .L2883 ++ mov r1, r5 ++ ldr r2, [sp, #24] ++ bl FlashReadPages ++ ldr r3, [r6, #-1500] ++ mov r2, #36 ++ ldrb ip, [r6, #-2740] @ zero_extendqisi2 ++ movw r1, #65535 ++ mla r5, r2, r5, r3 ++ ldr r2, .L3011+24 ++ add r2, r2, r4, lsl #1 ++.L2884: ++ cmp r5, r3 ++ addeq r4, r4, #1 ++ uxtheq r4, r4 ++ beq .L2881 ++.L2893: ++ ldr r0, [r3] ++ cmp r0, #0 ++ bne .L2885 ++ ldr r0, [r3, #12] ++ ldrh lr, [r0] ++ cmp lr, r1 ++ beq .L2886 ++ ldr r0, [r0, #4] ++ cmn r0, #1 ++ beq .L2886 ++ cmn r8, #1 ++ ldr r7, [r6, #1752] ++ str r0, [r6, #1752] ++ bne .L2886 ++ ldrh r0, [r2] ++ cmp r0, r1 ++ bne .L2887 ++ cmp ip, #0 ++ beq .L2886 ++.L2887: ++ cmp r10, r7 ++ movne r8, r7 ++.L2886: ++ add r3, r3, #36 ++ b .L2884 ++.L2885: ++ ldrh r1, [fp] ++ movw r2, #1794 ++ ldr r3, .L3011+4 ++ strh r1, [r3, r2] @ movhi ++ ldrb r2, [fp, #8] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L2878 ++ ldr r2, .L3011+24 ++ lsl r4, r4, #1 ++ ldrh r1, [r2, r4] ++ movw r2, #65535 ++ cmp r1, r2 ++ bne .L2889 ++ cmn r8, #1 ++ strne r8, [r3, #1752] ++ bne .L2878 ++ ldr r2, [sp, #12] ++ cmp r10, r2 ++ beq .L2891 ++.L3005: ++ str r2, [r3, #1752] ++ b .L2878 ++.L2891: ++ ldr r2, [r3, #1752] ++.L3004: ++ sub r2, r2, #1 ++ b .L3005 ++.L2889: ++ cmp r7, r10 ++ beq .L2892 ++ cmn r7, #1 ++ strne r7, [r3, #1752] ++.L2878: ++ ldr r9, [sp, #8] ++ mov r2, #1 ++ ldr r4, .L3011+4 ++ movw r3, #1796 ++ strh r2, [r4, r3] @ movhi ++.L2896: ++ ldr r3, .L3011+28 ++ movw r6, #65535 ++ ldr r0, [r4, #-1500] ++ mov r7, #36 ++ ldrb r5, [r4, #-2740] @ zero_extendqisi2 ++ mov r2, #0 ++ ldrh lr, [r3, #-4] ++ ldr r1, [sp, #20] ++ str r2, [sp, #12] ++.L2897: ++ uxth r3, r2 ++ cmp lr, r3 ++ bhi .L2900 ++ ldr r2, [sp, #24] ++ ldr r1, [sp, #12] ++ bl FlashReadPages ++ mov r3, #0 ++.L3008: ++ str r3, [sp, #16] ++ ldr r2, [sp, #12] ++ ldrh r3, [sp, #16] ++ cmp r2, r3 ++ bhi .L2926 ++ ldrb r3, [fp, #8] @ zero_extendqisi2 ++ add r9, r9, #1 ++ uxth r9, r9 ++ cmp r3, #1 ++ ldr r3, .L3011 ++ bne .L2927 ++ ldrb r2, [r4, #-2740] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L2927 ++ ldrh r2, [r3] ++ ldr r1, [sp] ++ cmp r2, r9 ++ cmpeq r1, r9 ++ beq .L2903 ++.L2927: ++ ldrh r3, [r3, #-2] ++ cmp r3, r9 ++ bne .L2896 ++ ldr r2, .L3011+28 ++ movw r0, #65535 ++ mov r3, #0 ++ strh r9, [fp, #2] @ movhi ++ strh r3, [fp, #4] @ movhi ++ ldrh r2, [r2, #-4] ++.L2928: ++ uxth r1, r3 ++ cmp r1, r2 ++ bcs .L2997 ++ ldr r1, [sp, #20] ++ ldrh ip, [r1], #2 ++ cmp ip, r0 ++ str r1, [sp, #20] ++ add r1, r3, #1 ++ bne .L3009 ++ mov r3, r1 ++ b .L2928 ++.L2892: ++ ldr r2, [r3, #1752] ++ cmp r10, r2 ++ bne .L3004 ++ b .L2878 ++.L2894: ++ mvn r3, #0 ++ str r3, [r6, #1752] ++ b .L2878 ++.L2900: ++ ldrh r3, [r1], #2 ++ cmp r3, r6 ++ beq .L2898 ++ ldr ip, [sp, #12] ++ orr r3, r9, r3, lsl #10 ++ mla ip, r7, ip, r0 ++ str r3, [ip, #4] ++ ldrb r8, [fp, #8] @ zero_extendqisi2 ++ cmp r8, #1 ++ bne .L2899 ++ cmp r5, #0 ++ orrne r3, r3, #-2147483648 ++ strne r3, [ip, #4] ++.L2899: ++ ldr r3, [sp, #12] ++ add r3, r3, #1 ++ uxth r3, r3 ++ str r3, [sp, #12] ++.L2898: ++ add r2, r2, #1 ++ b .L2897 ++.L2926: ++ ldr r3, [sp, #16] ++ mov r6, #36 ++ ldr r8, [r4, #-1500] ++ mul r6, r6, r3 ++ add r7, r8, r6 ++ ldr r5, [r7, #4] ++ ubfx r0, r5, #10, #16 ++ str r5, [sp, #44] ++ bl P2V_plane ++ ldr r3, [sp, #8] ++ cmp r9, r3 ++ bcc .L2902 ++ ldr r2, [sp, #28] ++ moveq r3, #1 ++ movne r3, #0 ++ cmp r2, r0 ++ movls r3, #0 ++ andhi r3, r3, #1 ++ cmp r3, #0 ++ bne .L2902 ++ ldr r3, [sp] ++ ldr r2, [sp, #4] ++ cmp r9, r3 ++ cmpeq r2, r0 ++ beq .L2903 ++ ldr r3, [r8, r6] ++ cmn r3, #1 ++ beq .L2904 ++ ldr r3, [r7, #12] ++ movw r2, #61589 ++ ldrh r1, [r3] ++ cmp r1, r2 ++ ldrhne r0, [fp] ++ bne .L3006 ++ ldr r10, [r3, #4] ++ cmn r10, #1 ++ beq .L2906 ++ ldr r1, [r4, #-1608] ++ mov r0, r10 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ addne r2, r10, #1 ++ strne r2, [r4, #-1608] ++.L2906: ++ ldr r5, [r3, #8] ++ add r1, sp, #40 ++ ldr r3, [r3, #12] ++ mov r2, #0 ++ mov r0, r5 ++ str r3, [sp, #36] ++ bl log2phys ++ ldr r1, [r4, #1752] ++ cmn r1, #1 ++ beq .L2907 ++ mov r0, r10 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2907 ++ ldr r3, [sp, #36] ++ cmn r3, #1 ++ beq .L2908 ++ ldr r0, [r4, #-1500] ++ mov r2, #0 ++ mov r1, #1 ++ add r0, r0, r6 ++ str r3, [r0, #4] ++ ldr r7, [r0, #12] ++ bl FlashReadPages ++ ldr r2, [r4, #-1500] ++ ldr r1, [r2, r6] ++ add r3, r2, r6 ++ cmn r1, #1 ++ bne .L2909 ++.L2910: ++ mvn r3, #0 ++ str r3, [sp, #36] ++.L2917: ++ ldr r8, [sp, #36] ++ cmn r8, #1 ++ beq .L2902 ++.L2931: ++ ubfx r0, r8, #10, #16 ++ bl P2V_block_in_plane ++ ldr r2, [r4, #-1404] ++ lsl r3, r0, #1 ++ mov r1, r0 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L2923 ++.L3006: ++ bl decrement_vpc_count ++ b .L2902 ++.L2908: ++ ldr r3, [sp, #44] ++ ldr r2, [sp, #40] ++ cmp r2, r3 ++ bne .L2902 ++ mov r2, #1 ++ add r1, sp, #36 ++ mov r0, r5 ++ bl log2phys ++.L2902: ++ ldr r3, [sp, #16] ++ add r3, r3, #1 ++ b .L3008 ++.L2909: ++ ldr r1, [r7, #8] ++ cmp r5, r1 ++ bne .L2910 ++ ldr r8, [r7, #4] ++ ldr r0, [r4, #1752] ++ mov r1, r8 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2910 ++ ldr r1, [sp, #40] ++ ldr r0, [sp, #44] ++ cmp r1, r0 ++ bne .L2912 ++.L2915: ++ ldr r1, [sp, #36] ++ mov r0, r5 ++ bl FtlReUsePrevPpa ++ b .L2910 ++.L2912: ++ ldr r0, [sp, #36] ++ cmp r1, r0 ++ beq .L2910 ++ cmn r1, #1 ++ streq r1, [r2, r6] ++ beq .L2914 ++ str r1, [r3, #4] ++ mov r2, #0 ++ mov r1, #1 ++ mov r0, r3 ++ ldr r7, [r3, #12] ++ bl FlashReadPages ++.L2914: ++ ldr r3, [r4, #-1500] ++ ldr r3, [r3, r6] ++ cmn r3, #1 ++ beq .L2915 ++ ldr r3, [r7, #4] ++ ldr r0, [r4, #1752] ++ mov r1, r3 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2915 ++ mov r1, r3 ++ mov r0, r8 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ beq .L2910 ++ b .L2915 ++.L2907: ++ ldr r3, [sp, #44] ++ ldr r2, [sp, #40] ++ cmp r2, r3 ++ beq .L2917 ++ ldr r3, [sp, #36] ++ cmn r3, #1 ++ beq .L2919 ++ ldr r2, [r4, #-1716] ++ ubfx r3, r3, #10, #21 ++ cmp r3, r2 ++ bcs .L2902 ++.L2919: ++ mov r2, #1 ++ add r1, sp, #44 ++ mov r0, r5 ++ bl log2phys ++ ldr r8, [sp, #40] ++ cmn r8, #1 ++ beq .L2917 ++ ldr r3, [sp, #36] ++ cmp r8, r3 ++ beq .L2931 ++ ldr r6, .L3011+32 ++ ubfx r0, r8, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r6] ++ sub r6, r6, #884 ++ cmp r3, r0 ++ beq .L2922 ++ add r3, r6, #932 ++ ldrh r3, [r3] ++ cmp r3, r0 ++ beq .L2922 ++ add r3, r6, #980 ++ ldrh r3, [r3] ++ cmp r3, r0 ++ bne .L2917 ++.L2922: ++ ldr r0, [r6, #-1500] ++ mov r2, #0 ++ mov r1, #1 ++ str r8, [r0, #4] ++ ldr r7, [r0, #12] ++ bl FlashReadPages ++ ldr r3, [r6, #-1500] ++ ldr r3, [r3] ++ cmn r3, #1 ++ beq .L2917 ++ ldr r1, [r7, #4] ++ mov r0, r10 ++ bl ftl_cmp_data_ver ++ cmp r0, #0 ++ bne .L2917 ++ mov r2, #1 ++ add r1, sp, #40 ++ mov r0, r5 ++ bl log2phys ++ b .L2917 ++.L2923: ++ ldr r0, .L3011+36 ++ bl rk_printk ++ b .L2902 ++.L2904: ++ ldrh r3, [fp] ++ mov r1, r5 ++ ldr r2, .L3011+20 ++ ldr r0, .L3011+40 ++ strh r3, [r2] @ movhi ++ mov r2, r10 ++ bl rk_printk ++ ldr r3, [r4, #1800] ++ cmp r3, #31 ++ ldrls r1, [sp, #44] ++ addls r2, r4, r3, lsl #2 ++ addls r3, r3, #1 ++ strls r3, [r4, #1800] ++ strls r1, [r2, #1804] ++ ldrh r0, [fp] ++ bl decrement_vpc_count ++ ldr r3, [r4, #1752] ++ cmn r3, #1 ++ bne .L2925 ++.L3007: ++ str r10, [r4, #1752] ++ b .L2902 ++.L2925: ++ cmp r10, r3 ++ bcs .L2902 ++ b .L3007 ++.L2903: ++ ldrb r3, [sp, #4] @ zero_extendqisi2 ++ ldr r2, [sp, #4] ++ strb r3, [fp, #6] ++ ldrh r3, [sp] ++ strh r3, [fp, #2] @ movhi ++.L3010: ++ ldr r1, [sp] ++ mov r0, fp ++ bl ftl_sb_update_avl_pages ++ b .L2997 ++.L2999: ++ mov r0, #0 ++ bx lr ++.L3012: ++ .align 2 ++.L3011: ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR2-1732 ++ .word .LC154 ++ .word .LANCHOR2+1794 ++ .word .LANCHOR0+1108 ++ .word .LANCHOR2-1728 ++ .word .LANCHOR2+884 ++ .word .LC155 ++ .word .LC156 ++ .fnend ++ .size FtlRecoverySuperblock, .-FtlRecoverySuperblock ++ .align 2 ++ .global FtlSlcSuperblockCheck ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSlcSuperblockCheck, %function ++FtlSlcSuperblockCheck: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldrh r3, [r0, #4] ++ cmp r3, #0 ++ bxeq lr ++ ldrh r2, [r0] ++ movw r3, #65535 ++ cmp r2, r3 ++ bxeq lr ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ ldrb r3, [r0, #6] @ zero_extendqisi2 ++ ldr r5, .L3028 ++ ldr r6, .L3028+4 ++ add r3, r0, r3, lsl #1 ++ ldrh r3, [r3, #16] ++.L3017: ++ movw r1, #65535 ++ cmp r3, r1 ++ beq .L3019 ++ ldrb r2, [r4, #8] @ zero_extendqisi2 ++ cmp r2, #1 ++ bne .L3020 ++ ldrb r3, [r5, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3020 ++ ldrh r3, [r4, #2] ++ lsl r3, r3, #1 ++ ldrh r3, [r6, r3] ++ cmp r3, r1 ++ bne .L3020 ++ ldrh r3, [r4, #4] ++ ldrh r0, [r4] ++ sub r3, r3, #1 ++ strh r3, [r4, #4] @ movhi ++ bl decrement_vpc_count ++ ldrh r2, [r4, #4] ++ cmp r2, #0 ++ bne .L3019 ++ ldrh r3, [r4, #2] ++ strb r2, [r4, #6] ++ add r3, r3, #1 ++ strh r3, [r4, #2] @ movhi ++ pop {r4, r5, r6, pc} ++.L3019: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ ldr r2, .L3028+8 ++ add r3, r3, #1 ++ ldrh r2, [r2] ++ uxtb r3, r3 ++ strb r3, [r4, #6] ++ cmp r2, r3 ++ ldrheq r3, [r4, #2] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #2] @ movhi ++ moveq r3, #0 ++ strbeq r3, [r4, #6] ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ add r3, r4, r3, lsl #1 ++ ldrh r3, [r3, #16] ++ b .L3017 ++.L3020: ++ ldrb r3, [r5, #-2740] @ zero_extendqisi2 ++ adds r3, r3, #0 ++ movne r3, #1 ++ cmp r2, #1 ++ movne r3, #0 ++ cmp r3, #0 ++ popeq {r4, r5, r6, pc} ++ ldr r1, .L3028+12 ++ ldrh r2, [r4, #2] ++ ldrh r3, [r1] ++ cmp r2, r3 ++ popcc {r4, r5, r6, pc} ++ ldrh r3, [r4] ++ ldr r0, [r5, #-1404] ++ ldrh ip, [r4, #4] ++ lsl r3, r3, #1 ++ ldrh r2, [r0, r3] ++ sub r2, r2, ip ++ strh r2, [r0, r3] @ movhi ++ mov r3, #0 ++ ldrh r2, [r1, #-2] ++ strh r3, [r4, #4] @ movhi ++ strb r3, [r4, #6] ++ strh r2, [r4, #2] @ movhi ++ pop {r4, r5, r6, pc} ++.L3029: ++ .align 2 ++.L3028: ++ .word .LANCHOR2 ++ .word .LANCHOR0+1108 ++ .word .LANCHOR2-1732 ++ .word .LANCHOR2-1664 ++ .fnend ++ .size FtlSlcSuperblockCheck, .-FtlSlcSuperblockCheck ++ .align 2 ++ .global get_new_active_ppa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type get_new_active_ppa, %function ++get_new_active_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov r3, #0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ strb r3, [r0, #10] ++ mov r4, r0 ++ ldrb r3, [r0, #6] @ zero_extendqisi2 ++ ldr r6, .L3046 ++ ldr r8, .L3046+4 ++ add r3, r0, r3, lsl #1 ++ add r7, r6, #1728 ++ ldrh r2, [r3, #16] ++.L3031: ++ movw r1, #65535 ++ cmp r2, r1 ++ beq .L3032 ++ ldrb r3, [r4, #8] @ zero_extendqisi2 ++ ldrh r5, [r4, #2] ++ cmp r3, #1 ++ ldrh r3, [r4, #4] ++ bne .L3034 ++ ldrb r0, [r7, #-2740] @ zero_extendqisi2 ++ cmp r0, #0 ++ bne .L3034 ++ lsl r0, r5, #1 ++ ldrh r0, [r8, r0] ++ cmp r0, r1 ++ bne .L3034 ++ sub r3, r3, #1 ++ ldrh r0, [r4] ++ strh r3, [r4, #4] @ movhi ++ bl decrement_vpc_count ++.L3032: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ ldrh r2, [r6, #-4] ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r2, r3 ++ strb r3, [r4, #6] ++ ldrheq r3, [r4, #2] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #2] @ movhi ++ moveq r3, #0 ++ strbeq r3, [r4, #6] ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ add r3, r4, r3, lsl #1 ++ ldrh r2, [r3, #16] ++ b .L3031 ++.L3034: ++ ldr r7, .L3046+8 ++ orr r5, r5, r2, lsl #10 ++ ldr r8, .L3046+4 ++ sub r3, r3, #1 ++ strh r3, [r4, #4] @ movhi ++.L3035: ++ ldrb r3, [r4, #6] @ zero_extendqisi2 ++ movw r2, #65535 ++ ldrh r0, [r6, #-4] ++.L3037: ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, r0 ++ ldrheq r3, [r4, #2] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #2] @ movhi ++ moveq r3, #0 ++ add r1, r4, r3, lsl #1 ++ ldrh r1, [r1, #16] ++ cmp r1, r2 ++ beq .L3037 ++ strb r3, [r4, #6] ++ ldrb r3, [r4, #8] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L3030 ++ ldrb r3, [r7, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrh r3, [r4, #2] ++ bne .L3039 ++ lsl r3, r3, #1 ++ ldrh r3, [r8, r3] ++ cmp r3, r2 ++ bne .L3030 ++ ldrh r3, [r4, #4] ++ cmp r3, #0 ++ beq .L3030 ++ sub r3, r3, #1 ++ ldrh r0, [r4] ++ strh r3, [r4, #4] @ movhi ++ bl decrement_vpc_count ++ b .L3035 ++.L3039: ++ ldr r1, .L3046+12 ++ ldrh r2, [r1] ++ cmp r3, r2 ++ bcc .L3030 ++ ldrh r3, [r4] ++ ldr r0, [r7, #-1404] ++ ldrh ip, [r4, #4] ++ lsl r3, r3, #1 ++ ldrh r2, [r0, r3] ++ sub r2, r2, ip ++ strh r2, [r0, r3] @ movhi ++ mov r3, #0 ++ ldrh r2, [r1, #-2] ++ strh r3, [r4, #4] @ movhi ++ strb r3, [r4, #6] ++ strh r2, [r4, #2] @ movhi ++.L3030: ++ mov r0, r5 ++ pop {r4, r5, r6, r7, r8, pc} ++.L3047: ++ .align 2 ++.L3046: ++ .word .LANCHOR2-1728 ++ .word .LANCHOR0+1108 ++ .word .LANCHOR2 ++ .word .LANCHOR2-1664 ++ .fnend ++ .size get_new_active_ppa, .-get_new_active_ppa ++ .align 2 ++ .global FtlWriteDumpData ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlWriteDumpData, %function ++FtlWriteDumpData: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r4, .L3067 ++ ldr r3, [r4, #-1280] ++ cmp r3, #0 ++ bne .L3048 ++ add r6, r4, #884 ++ ldrh r2, [r6, #4] ++ cmp r2, #0 ++ beq .L3050 ++ ldrb r3, [r4, #892] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3050 ++ sub r3, r4, #1664 ++ ldrb r1, [r4, #891] @ zero_extendqisi2 ++ ldrh r3, [r3, #-2] ++ mul r3, r3, r1 ++ cmp r2, r3 ++ beq .L3050 ++ ldrb r8, [r4, #894] @ zero_extendqisi2 ++ cmp r8, #0 ++ bne .L3048 ++ ldr r7, [r4, #-1284] ++ sub r3, r4, #1728 ++ mov r2, r8 ++ mov r1, sp ++ ldrh r9, [r3, #-4] ++ sub r7, r7, #1 ++ mov r0, r7 ++ bl log2phys ++ ldr r3, [sp] ++ ldr r5, [r4, #-1440] ++ ldr r0, [r4, #-1472] ++ cmn r3, #1 ++ str r3, [sp, #8] ++ str r7, [sp, #20] ++ str r0, [sp, #12] ++ str r5, [sp, #16] ++ str r8, [r5, #4] ++ beq .L3052 ++ mov r2, r8 ++ mov r1, #1 ++ add r0, sp, #4 ++ bl FlashReadPages ++.L3053: ++ ldr r10, .L3067+4 ++ mov r8, #0 ++ ldr r3, .L3067+8 ++ lsl r9, r9, #2 ++ mov fp, r8 ++ strh r3, [r5] @ movhi ++.L3054: ++ cmp r9, r8 ++ bne .L3058 ++.L3055: ++ mov r3, #1 ++.L3066: ++ strb r3, [r4, #894] ++.L3048: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3052: ++ sub r3, r4, #1648 ++ mov r1, #255 ++ ldrh r2, [r3, #-8] ++ bl ftl_memset ++ b .L3053 ++.L3058: ++ ldrh r3, [r6, #4] ++ cmp r3, #0 ++ beq .L3055 ++ ldr r3, [sp, #8] ++ mov r0, r10 ++ str r7, [r5, #8] ++ add r8, r8, #1 ++ str r3, [r5, #12] ++ ldrh r3, [r6] ++ strh r3, [r5, #2] @ movhi ++ bl get_new_active_ppa ++ ldr r3, [r4, #-1608] ++ mov r1, #1 ++ str r0, [sp, #8] ++ add r0, sp, #4 ++ str r3, [r5, #4] ++ add r3, r3, #1 ++ cmn r3, #1 ++ moveq r3, fp ++ str r3, [r4, #-1608] ++ mov r3, #0 ++ mov r2, r3 ++ bl FlashProgPages ++ ldrh r0, [r6] ++ bl decrement_vpc_count ++ b .L3054 ++.L3050: ++ mov r3, #0 ++ b .L3066 ++.L3068: ++ .align 2 ++.L3067: ++ .word .LANCHOR2 ++ .word .LANCHOR2+884 ++ .word -3947 ++ .fnend ++ .size FtlWriteDumpData, .-FtlWriteDumpData ++ .align 2 ++ .global l2p_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type l2p_flush, %function ++l2p_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, #0 ++ ldr r5, .L3074 ++ mov r7, #12 ++ bl FtlWriteDumpData ++ sub r6, r5, #1616 ++.L3070: ++ ldrh r3, [r6, #-10] ++ uxth r0, r4 ++ cmp r3, r0 ++ bhi .L3072 ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L3072: ++ ldr r2, [r5, #-1364] ++ uxth r3, r4 ++ mla r3, r7, r3, r2 ++ ldr r3, [r3, #4] ++ cmp r3, #0 ++ bge .L3071 ++ bl flush_l2p_region ++.L3071: ++ add r4, r4, #1 ++ b .L3070 ++.L3075: ++ .align 2 ++.L3074: ++ .word .LANCHOR2 ++ .fnend ++ .size l2p_flush, .-l2p_flush ++ .align 2 ++ .global FtlSuperblockPowerLostFix ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSuperblockPowerLostFix, %function ++FtlSuperblockPowerLostFix: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r5, .L3092 ++ ldr r9, [r5, #-1280] ++ cmp r9, #0 ++ bne .L3076 ++ ldrb r3, [r5, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3087 ++ ldrb r3, [r0, #8] @ zero_extendqisi2 ++ cmp r3, #1 ++ ldrheq r7, [r0, #4] ++ moveq r9, r3 ++ beq .L3078 ++.L3087: ++ mov r7, #12 ++.L3078: ++ mvn r3, #0 ++ ldr r6, [r5, #-1440] ++ str r3, [sp, #20] ++ mov r8, #0 ++ ldr r3, [r5, #-1472] ++ movw r2, #61589 ++ str r6, [sp, #16] ++ mov r4, r0 ++ str r3, [sp, #12] ++ mvn r3, #2 ++ str r3, [r6, #8] ++ mvn r3, #1 ++ str r3, [r6, #12] ++ ldrh r3, [r0] ++ strh r8, [r6] @ movhi ++ strh r3, [r6, #2] @ movhi ++ ldr r3, [r5, #-1472] ++ str r2, [r3] ++ ldr r2, .L3092+4 ++ ldr r3, [r5, #-1472] ++ str r2, [r3, #4] ++.L3079: ++ subs r7, r7, #1 ++ bcc .L3082 ++ ldrh r3, [r4, #4] ++ cmp r3, #0 ++ bne .L3080 ++.L3082: ++ ldrh r3, [r4] ++ ldr r1, [r5, #-1404] ++ ldrh r0, [r4, #4] ++ lsl r3, r3, #1 ++ ldrh r2, [r1, r3] ++ sub r2, r2, r0 ++ strh r2, [r1, r3] @ movhi ++ ldr r3, .L3092+8 ++ ldrh r3, [r3, #-2] ++ strh r3, [r4, #2] @ movhi ++ mov r3, #0 ++ strb r3, [r4, #6] ++ strh r3, [r4, #4] @ movhi ++.L3076: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L3080: ++ mov r0, r4 ++ bl get_new_active_ppa ++ cmn r0, #1 ++ str r0, [sp, #8] ++ beq .L3082 ++ ldr r3, [r5, #-1608] ++ mov r2, r9 ++ mov r1, #1 ++ add r0, sp, #4 ++ str r3, [r6, #4] ++ add r3, r3, #1 ++ cmn r3, #1 ++ moveq r3, r8 ++ str r3, [r5, #-1608] ++ mov r3, #0 ++ bl FlashProgPages ++ ldrh r0, [r4] ++ bl decrement_vpc_count ++ b .L3079 ++.L3093: ++ .align 2 ++.L3092: ++ .word .LANCHOR2 ++ .word 305419896 ++ .word .LANCHOR2-1664 ++ .fnend ++ .size FtlSuperblockPowerLostFix, .-FtlSuperblockPowerLostFix ++ .align 2 ++ .global FtlVpcCheckAndModify ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlVpcCheckAndModify, %function ++FtlVpcCheckAndModify: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r5, #0 ++ ldr r4, .L3109 ++ ldr r1, .L3109+4 ++ ldr r0, .L3109+8 ++ sub r7, r4, #1712 ++ bl rk_printk ++ ldrh r2, [r7, #-10] ++ mov r1, #0 ++ ldr r0, [r4, #-1408] ++ lsl r2, r2, #1 ++ bl ftl_memset ++.L3095: ++ ldr r3, [r4, #-1284] ++ cmp r5, r3 ++ bcc .L3097 ++ ldr r9, .L3109+12 ++ mov r8, #0 ++ add r10, r9, #96 ++ add fp, r9, #48 ++.L3098: ++ ldrh r3, [r7, #-12] ++ uxth r6, r8 ++ cmp r3, r6 ++ bhi .L3101 ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3097: ++ mov r2, #0 ++ add r1, sp, #4 ++ mov r0, r5 ++ bl log2phys ++ ldr r0, [sp, #4] ++ cmn r0, #1 ++ beq .L3096 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r2, [r4, #-1408] ++ lsl r0, r0, #1 ++ ldrh r3, [r2, r0] ++ add r3, r3, #1 ++ strh r3, [r2, r0] @ movhi ++.L3096: ++ add r5, r5, #1 ++ b .L3095 ++.L3101: ++ uxth r1, r8 ++ ldr r3, [r4, #-1404] ++ movw r0, #65535 ++ lsl r5, r1, #1 ++ ldrh r2, [r3, r5] ++ ldr r3, [r4, #-1408] ++ ldrh r3, [r3, r5] ++ cmp r2, r0 ++ cmpne r2, r3 ++ beq .L3099 ++ ldrh r0, [r9] ++ cmp r0, r6 ++ beq .L3099 ++ ldrh r0, [r10] ++ cmp r0, r6 ++ beq .L3099 ++ ldrh r0, [fp] ++ cmp r0, r6 ++ beq .L3099 ++ ldr r0, .L3109+16 ++ bl rk_printk ++ ldr r3, [r4, #-1404] ++ ldrh r2, [r3, r5] ++ cmp r2, #0 ++ ldr r2, [r4, #-1408] ++ ldrh r2, [r2, r5] ++ strh r2, [r3, r5] @ movhi ++ bne .L3100 ++.L3099: ++ add r8, r8, #1 ++ b .L3098 ++.L3100: ++ mov r0, r6 ++ bl update_vpc_list ++ b .L3099 ++.L3110: ++ .align 2 ++.L3109: ++ .word .LANCHOR2 ++ .word .LANCHOR3+203 ++ .word .LC50 ++ .word .LANCHOR2+884 ++ .word .LC157 ++ .fnend ++ .size FtlVpcCheckAndModify, .-FtlVpcCheckAndModify ++ .align 2 ++ .global allocate_new_data_superblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type allocate_new_data_superblock, %function ++allocate_new_data_superblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, .L3138 ++ ldr r3, [r4, #-1280] ++ cmp r3, #0 ++ bne .L3112 ++ ldrh r6, [r0] ++ movw r3, #65535 ++ mov r5, r0 ++ cmp r6, r3 ++ beq .L3113 ++ ldr r2, [r4, #-1404] ++ lsl r3, r6, #1 ++ mov r0, r6 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L3114 ++ bl INSERT_DATA_LIST ++.L3113: ++ mov r3, #0 ++ strb r3, [r5, #8] ++ ldr r3, .L3138+4 ++ cmp r5, r3 ++ beq .L3115 ++ ldr r2, .L3138+8 ++ ldrh r2, [r2] ++ cmp r2, #1 ++ beq .L3115 ++ ldrb r1, [r4, #-2740] @ zero_extendqisi2 ++ cmp r1, #0 ++ beq .L3116 ++.L3115: ++ mov r3, #1 ++ strb r3, [r5, #8] ++.L3117: ++ movw r3, #1740 ++ ldrh r0, [r4, r3] ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L3122 ++ cmp r6, r0 ++ bne .L3123 ++ ldr r2, [r4, #-1404] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L3124 ++.L3123: ++ bl update_vpc_list ++.L3124: ++ mvn r2, #0 ++ movw r3, #1740 ++ strh r2, [r4, r3] @ movhi ++.L3122: ++ mov r0, r5 ++ bl allocate_data_superblock ++ bl l2p_flush ++ mov r0, #0 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L3112: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L3114: ++ bl INSERT_FREE_LIST ++ b .L3113 ++.L3116: ++ sub r3, r3, #48 ++ cmp r5, r3 ++ bne .L3117 ++ cmp r2, #3 ++ beq .L3119 ++ ldr r3, [r4, #-1616] ++ cmp r3, #1 ++ bne .L3120 ++.L3119: ++ mov r3, #1 ++ strb r3, [r4, #892] ++.L3120: ++ ldr r3, [r4, #-1868] ++ cmp r3, #0 ++ beq .L3117 ++ ldr r3, [r4, #-1564] ++ cmp r3, #39 ++ movls r3, #1 ++ strbls r3, [r4, #892] ++ b .L3117 ++.L3139: ++ .align 2 ++.L3138: ++ .word .LANCHOR2 ++ .word .LANCHOR2+932 ++ .word .LANCHOR2-1712 ++ .fnend ++ .size allocate_new_data_superblock, .-allocate_new_data_superblock ++ .align 2 ++ .global FtlReadRefresh ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlReadRefresh, %function ++FtlReadRefresh: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #40 ++ sub sp, sp, #40 ++ ldr r5, .L3157 ++ ldr r9, [r5, #1284] ++ mov r6, r5 ++ cmp r9, #0 ++ beq .L3141 ++ ldr r2, [r5, #1288] ++ ldr r3, [r5, #-1284] ++ cmp r2, r3 ++ bcs .L3142 ++ mov r4, #2048 ++.L3147: ++ ldr r0, [r6, #1288] ++ ldr r3, [r6, #-1284] ++ cmp r0, r3 ++ bcc .L3143 ++.L3146: ++ mvn r0, #0 ++.L3140: ++ add sp, sp, #40 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3143: ++ mov r2, #0 ++ mov r1, sp ++ bl log2phys ++ ldr r2, [sp] ++ ldr r3, [r6, #1288] ++ cmn r2, #1 ++ add r3, r3, #1 ++ str r3, [r6, #1288] ++ beq .L3145 ++ str r2, [sp, #8] ++ add r0, sp, #40 ++ mov r2, #0 ++ mov r1, #1 ++ str r2, [r0, #-36]! ++ str r3, [sp, #20] ++ str r2, [sp, #12] ++ str r2, [sp, #16] ++ bl FlashReadPages ++ ldr r3, [sp, #4] ++ cmp r3, #256 ++ bne .L3146 ++ ldr r0, [sp] ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ b .L3146 ++.L3145: ++ subs r4, r4, #1 ++ bne .L3147 ++ b .L3146 ++.L3142: ++ ldr r3, [r5, #-1584] ++ mov r0, #0 ++ str r0, [r5, #1284] ++ str r0, [r5, #1288] ++ str r3, [r5, #1280] ++ b .L3140 ++.L3141: ++ ldr r1, [r5, #-1568] ++ movw r4, #10000 ++ ldr r8, [r5, #-1584] ++ add r10, r5, #816 ++ ldr r7, [r5, #1280] ++ cmp r1, r4 ++ add r3, r8, #1048576 ++ movhi r4, #31 ++ movls r4, #63 ++ cmp r7, r3 ++ bhi .L3151 ++ ldr r3, [r5, #-1284] ++ lsr r1, r1, #10 ++ mov r0, #1000 ++ add r1, r1, #1 ++ mul r0, r0, r3 ++ bl __aeabi_uidiv ++ add r0, r0, r7 ++ cmp r8, r0 ++ bhi .L3151 ++ ldrh r3, [r10, #28] ++ ands r0, r4, r3 ++ movne r0, r9 ++ bne .L3140 ++ ldr r2, [r5, #1304] ++ cmp r3, r2 ++ beq .L3140 ++.L3151: ++ ldrh r3, [r10, #28] ++ mov r0, #0 ++ str r0, [r6, #1288] ++ str r8, [r6, #1280] ++ str r3, [r6, #1304] ++ mov r3, #1 ++ str r3, [r6, #1284] ++ b .L3140 ++.L3158: ++ .align 2 ++.L3157: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlReadRefresh, .-FtlReadRefresh ++ .align 2 ++ .global ftl_do_gc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_do_gc, %function ++ftl_do_gc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 32 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3323 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov lr, r0 ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r0, [r3, #-1280] ++ cmp r0, #0 ++ bne .L3255 ++ ldr ip, .L3323+4 ++ ldr r4, [ip, #3440] ++ cmp r4, #1 ++ bne .L3159 ++ ldr r2, [r3, #-1560] ++ cmp r2, #0 ++ bne .L3159 ++ add r0, r3, #872 ++ ldrh r0, [r0] ++ cmp r0, #47 ++ bls .L3255 ++ movw r2, #3444 ++ mov r8, r1 ++ ldrh r1, [ip, r2] ++ movw r2, #65535 ++ mov r5, r3 ++ str lr, [sp, #24] ++ cmp r1, r2 ++ bne .L3161 ++.L3164: ++ ldr r6, .L3323+8 ++ movw r1, #65535 ++ ldrh ip, [r6, #-14] ++ cmp ip, r1 ++ bne .L3162 ++.L3163: ++ ldr r3, [r5, #-1544] ++ ldr r2, [sp, #24] ++ add r3, r3, #1 ++ cmp r2, #1 ++ add r3, r3, r2, lsl #7 ++ str r3, [r5, #-1544] ++ bne .L3165 ++ ldr r2, [r5, #-1868] ++ cmp r2, #0 ++ bne .L3166 ++ ldrb r2, [r5, #-2740] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3165 ++.L3166: ++ ldr r2, [r5, #-1564] ++ cmp r2, #39 ++ bhi .L3165 ++ movw r2, #1932 ++ movw r4, #65535 ++ ldrh r2, [r5, r2] ++ add r3, r2, r3 ++ str r3, [r5, #-1544] ++ bl FtlGcReFreshBadBlk ++ movw r3, #1156 ++ ldrh r2, [r5, r3] ++ cmp r2, r4 ++ bne .L3167 ++ ldr r3, .L3323+12 ++ ldrh r1, [r3] ++ cmp r1, r2 ++ bne .L3254 ++ ldr r2, [r5, #-1544] ++ add r3, r3, #2416 ++ cmp r2, #1024 ++ bhi .L3169 ++ ldrh r2, [r3] ++ cmp r2, #63 ++ bhi .L3254 ++.L3169: ++ ldrh r0, [r3] ++ movw r2, #1932 ++ ldrh r3, [r6, #-6] ++ mov r1, #0 ++ strh r1, [r5, r2] @ movhi ++ add r3, r3, #64 ++ cmp r0, r3 ++ bgt .L3254 ++ ldr r3, [r5, #-1564] ++ str r1, [r5, #-1544] ++ cmp r3, r1 ++ moveq r3, #6 ++ beq .L3315 ++ cmp r3, #5 ++ bhi .L3171 ++ mov r3, #18 ++.L3315: ++ strh r3, [r5, r2] @ movhi ++.L3171: ++ mov r0, #32 ++ movw r10, #65535 ++ bl List_get_gc_head_node ++ uxth r3, r0 ++ cmp r3, r10 ++ beq .L3175 ++ ldrh r0, [r6, #-4] ++ cmp r0, #0 ++ beq .L3173 ++ ldr r2, .L3323+16 ++ lsl r7, r3, #1 ++ ldr r1, [r5, #-1404] ++ ldrh lr, [r2], #-64 ++ ldrh ip, [r1, r7] ++ str r1, [sp, #12] ++ ldrh r3, [r2, #-4] ++ mul r3, r3, lr ++ add r3, r3, #1 ++ cmp ip, r3 ++ bgt .L3175 ++ add fp, r0, #1 ++ mov r9, #0 ++ uxth fp, fp ++ str r9, [r5, #-1556] ++ strh fp, [r6, #-4] @ movhi ++ bl List_get_gc_head_node ++ uxth r4, r0 ++ ldr r1, [sp, #12] ++ cmp r4, r10 ++ beq .L3175 ++ lsl r10, r4, #1 ++ mov r2, r4 ++ ldr r0, .L3323+20 ++ ldrh r3, [r1, r10] ++ ldrh r1, [r1, r7] ++ str r1, [sp] ++ mov r1, fp ++ bl rk_printk ++ ldrh r3, [r6, #-4] ++ cmp r3, #40 ++ bls .L3174 ++ ldr r3, [r5, #-1404] ++ ldrh r3, [r3, r10] ++ cmp r3, #32 ++ strhhi r9, [r6, #-4] @ movhi ++.L3174: ++ mov r2, #6 ++ movw r3, #1932 ++ strh r2, [r5, r3] @ movhi ++.L3167: ++ movw r0, #65535 ++ ldr r3, [sp, #24] ++ sub r2, r4, r0 ++ clz r2, r2 ++ lsr r2, r2, #5 ++ cmp r3, #0 ++ movne r1, #0 ++ andeq r1, r2, #1 ++ cmp r1, #0 ++ beq .L3189 ++ ldr r3, .L3323+24 ++ ldrh r2, [r3] ++ cmp r2, #24 ++ movhi r9, #1 ++ bhi .L3190 ++ cmp r2, #16 ++ sub r3, r3, #2544 ++ ldrhhi r3, [r3, #-2] ++ lsrhi r9, r3, #5 ++ bhi .L3190 ++ cmp r2, #12 ++ ldrhhi r3, [r3, #-2] ++ lsrhi r9, r3, #4 ++ bhi .L3190 ++ cmp r2, #8 ++ ldrhhi r3, [r3, #-2] ++ ldrhls r9, [r3, #-2] ++ lsrhi r9, r3, #2 ++.L3190: ++ ldrh r3, [r6, #-8] ++ cmp r3, r2 ++ bcs .L3194 ++ ldr r3, .L3323+28 ++ movw r2, #65535 ++ ldrh r3, [r3] ++ cmp r3, r2 ++ bne .L3195 ++ ldr r2, .L3323+12 ++ ldrh r2, [r2] ++ cmp r2, r3 ++ bne .L3195 ++ movw r3, #1932 ++ ldrh r0, [r5, r3] ++ cmp r0, #0 ++ bne .L3196 ++ ldr r3, [r5, #-1284] ++ ldr r2, [r5, #1124] ++ add r3, r3, r3, lsl #1 ++ cmp r2, r3, lsr #2 ++ movcs r3, #18 ++ bcs .L3319 ++.L3196: ++ ldr r3, .L3323+32 ++ ldrh r3, [r3] ++ add r3, r3, r3, lsl #1 ++ asr r3, r3, #2 ++.L3319: ++ strh r3, [r6, #-8] @ movhi ++ mov r3, #0 ++ str r3, [r5, #-1556] ++.L3159: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3161: ++ add r3, r3, #980 ++ ldrh r3, [r3] ++ cmp r3, r2 ++ beq .L3164 ++ mov r0, r4 ++ bl FtlGcFreeTempBlock ++ cmp r0, #0 ++ beq .L3164 ++ mov r0, r4 ++ b .L3159 ++.L3162: ++ mov r3, r6 ++ ldrh r2, [r3, #-16]! ++ cmp r2, r1 ++ bne .L3163 ++ ldrh r0, [r6, #-12] ++ cmp r0, r2 ++ beq .L3163 ++ ldrh r1, [r6, #-10] ++ cmp r1, r2 ++ strhne ip, [r3] @ movhi ++ mvnne r3, #0 ++ strhne r0, [r6, #-14] @ movhi ++ strhne r1, [r6, #-12] @ movhi ++ strhne r3, [r6, #-10] @ movhi ++ b .L3163 ++.L3173: ++ mov r3, #1 ++ strh r3, [r6, #-4] @ movhi ++.L3175: ++ bl GetSwlReplaceBlock ++ movw r3, #65535 ++ mov r4, r0 ++ cmp r0, r3 ++ bne .L3167 ++ mov r2, #0 ++ movw r3, #1932 ++ strh r2, [r5, r3] @ movhi ++.L3165: ++ movw r3, #1156 ++ movw r4, #65535 ++ ldrh r3, [r5, r3] ++ cmp r3, r4 ++ bne .L3167 ++.L3254: ++ ldr r7, .L3323+28 ++ movw r3, #65535 ++ ldrh r4, [r7] ++ cmp r4, r3 ++ movne r4, r3 ++ bne .L3167 ++ ldr r3, .L3323+12 ++ ldrh r9, [r3] ++ cmp r9, r4 ++ bne .L3167 ++ ldrh r3, [r7, #-100]! ++ ldr r2, [r5, #-1544] ++ cmp r3, #24 ++ movcc r3, #5120 ++ movcs r3, #1024 ++ cmp r2, r3 ++ bls .L3167 ++ mov r3, #0 ++ movw r2, #1932 ++ str r3, [r5, #-1544] ++ strh r3, [r5, r2] @ movhi ++ bl GetSwlReplaceBlock ++ cmp r0, r9 ++ mov r4, r0 ++ movne r9, r0 ++ bne .L3177 ++ ldrh r2, [r7] ++ ldrh r3, [r6, #-6] ++ cmp r2, r3 ++ bcs .L3178 ++ mov r0, #64 ++ bl List_get_gc_head_node ++ uxth r3, r0 ++ cmp r3, r4 ++ beq .L3180 ++ ldr r3, [r5, #-1620] ++ ldr r1, .L3323+36 ++ cmp r3, #0 ++ uxth r3, r0 ++ bne .L3181 ++ ldrh r2, [r1] ++ cmp r2, #3 ++ beq .L3181 ++ ldr r2, [r5, #-1616] ++ cmp r2, #0 ++ bne .L3181 ++ ldr r2, [r5, #-1868] ++ cmp r2, #0 ++ bne .L3181 ++ ldrb r0, [r5, #-2740] @ zero_extendqisi2 ++ cmp r0, #0 ++ beq .L3182 ++.L3181: ++ ldr r2, [r5, #-1404] ++ lsl r3, r3, #1 ++ ldrh r1, [r1] ++ ldrh r0, [r2, r3] ++ ldr r2, .L3323+16 ++ cmp r1, #3 ++ ldrh r3, [r2], #-64 ++ ldrh r2, [r2, #-4] ++ mul r2, r3, r2 ++ lsreq r3, r3, #1 ++ movne r3, #0 ++ add r3, r3, r2 ++ cmp r0, r3 ++ bgt .L3184 ++ mov r0, #0 ++ bl List_get_gc_head_node ++ ldr r3, [r5, #-1284] ++ uxth r9, r0 ++ ldr r2, [r5, #1124] ++ add r3, r3, r3, lsl #1 ++ cmp r2, r3, lsr #2 ++ movls r3, #160 ++ bls .L3316 ++.L3317: ++ mov r3, #128 ++.L3316: ++ strh r3, [r6, #-6] @ movhi ++ movw r3, #65535 ++ cmp r9, r3 ++ beq .L3180 ++.L3177: ++ ldr r3, [r5, #-1404] ++ lsl r1, r9, #1 ++ ldrh r0, [r6, #-8] ++ mov r4, r9 ++ ldrh r2, [r7] ++ ldrh r3, [r3, r1] ++ str r0, [sp, #4] ++ ldr r0, [r5, #-1412] ++ ldrh r1, [r0, r1] ++ ldr r0, .L3323+40 ++ str r1, [sp] ++ mov r1, r9 ++ bl rk_printk ++ b .L3180 ++.L3184: ++ mov r3, #128 ++.L3318: ++ strh r3, [r6, #-6] @ movhi ++.L3180: ++ bl FtlGcReFreshBadBlk ++ b .L3167 ++.L3182: ++ ldr r2, [r5, #-1404] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #7 ++ bhi .L3187 ++ bl List_get_gc_head_node ++ uxth r9, r0 ++ b .L3317 ++.L3187: ++ mov r3, #64 ++ b .L3318 ++.L3178: ++ mov r3, #80 ++ b .L3318 ++.L3195: ++ ldr r3, .L3323+32 ++ ldrh r3, [r3] ++ add r3, r3, r3, lsl #1 ++ asr r3, r3, #2 ++ strh r3, [r6, #-8] @ movhi ++.L3194: ++ ldr r3, [r5, #-1868] ++ movw r4, #65535 ++ adds r3, r3, #0 ++ movne r3, #1 ++ cmp r8, #2 ++ movhi r3, #0 ++ cmp r3, #0 ++ addne r3, r9, #1 ++ uxthne r9, r3 ++.L3200: ++ movw r3, #1156 ++ ldrh r2, [r5, r3] ++ movw r1, #65535 ++ cmp r2, r1 ++ bne .L3210 ++ cmp r4, r2 ++ strhne r4, [r5, r3] @ movhi ++ bne .L3212 ++ ldr r3, .L3323+12 ++ ldrh r2, [r3] ++ cmp r2, r4 ++ beq .L3212 ++ ldr r1, [r5, #-1404] ++ lsl r2, r2, #1 ++ ldrh r2, [r1, r2] ++ cmp r2, #0 ++ mvneq r2, #0 ++ strheq r2, [r3] @ movhi ++ movw r2, #1156 ++ ldrh r1, [r3] ++ strh r1, [r5, r2] @ movhi ++ mvn r2, #0 ++ strh r2, [r3] @ movhi ++.L3212: ++ movw r6, #1156 ++ mov r3, #0 ++ ldrh r0, [r5, r6] ++ strb r3, [r5, #1164] ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L3210 ++ bl IsBlkInGcList ++ cmp r0, #0 ++ mvnne r3, #0 ++ strhne r3, [r5, r6] @ movhi ++ ldrb r3, [r5, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3216 ++ movw r3, #1156 ++ ldrh r0, [r5, r3] ++ bl ftl_get_blk_mode ++ strb r0, [r5, #1164] ++.L3216: ++ movw r7, #1156 ++ movw r3, #65535 ++ ldrh r2, [r5, r7] ++ ldr r6, .L3323+44 ++ cmp r2, r3 ++ beq .L3210 ++ mov r0, r6 ++ bl make_superblock ++ mov r3, #0 ++ movw r2, #1934 ++ strh r3, [r6, #2] @ movhi ++ add r6, r6, #780 ++ strh r3, [r5, r2] @ movhi ++ strb r3, [r5, #1162] ++ ldrh r3, [r5, r7] ++ ldr r2, [r5, #-1404] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ strh r3, [r6] @ movhi ++.L3210: ++ ldr r2, .L3323+48 ++ movw r3, #1156 ++ ldrh r3, [r5, r3] ++ ldrh r1, [r2] ++ cmp r1, r3 ++ beq .L3217 ++ ldrh r1, [r2, #48] ++ cmp r1, r3 ++ beq .L3217 ++ ldrh r2, [r2, #96] ++ cmp r2, r3 ++ bne .L3218 ++.L3217: ++ mvn r2, #0 ++ movw r3, #1156 ++ strh r2, [r5, r3] @ movhi ++.L3218: ++ ldr r5, .L3323 ++ mov r10, r5 ++.L3251: ++ ldr r8, .L3323+44 ++ movw r3, #65535 ++ ldrh r2, [r8] ++ cmp r2, r3 ++ bne .L3219 ++ ldr fp, .L3323+8 ++ mov r3, #0 ++ str r3, [r5, #-1556] ++.L3220: ++ ldr r6, .L3323+52 ++ ldrh r7, [r6] ++ mov r0, r7 ++ bl List_get_gc_head_node ++ ldr r1, .L3323+44 ++ uxth r2, r0 ++ strh r2, [r1] @ movhi ++ movw r1, #65535 ++ cmp r2, r1 ++ bne .L3221 ++ mov r3, #0 ++ mov r0, #8 ++ strh r3, [r6] @ movhi ++ b .L3159 ++.L3189: ++ ldr r3, .L3323+28 ++ ldrh r8, [r3] ++ cmp r8, r0 ++ bne .L3201 ++ ldr r0, .L3323+12 ++ ldrh r0, [r0] ++ cmp r0, r8 ++ movne r2, #0 ++ andeq r2, r2, #1 ++ cmp r2, #0 ++ beq .L3201 ++ movw r2, #1156 ++ ldrh r2, [r5, r2] ++ cmp r2, r8 ++ beq .L3202 ++.L3207: ++ mov r4, r8 ++.L3201: ++ ldr r3, [r5, #-1868] ++ cmp r3, #0 ++ moveq r9, #1 ++ movne r9, #2 ++ b .L3200 ++.L3202: ++ mov r4, r3 ++ ldrh r3, [r6, #-8] ++ ldrh r2, [r4, #-100]! ++ str r1, [r5, #-1556] ++ cmp r2, r3 ++ bls .L3203 ++ movw r3, #1932 ++ ldrh r3, [r5, r3] ++ cmp r3, #0 ++ bne .L3204 ++ ldr r3, [r5, #-1284] ++ ldr r2, [r5, #1124] ++ add r3, r3, r3, lsl #1 ++ cmp r2, r3, lsr #2 ++ movcs r3, #18 ++ bcs .L3320 ++.L3204: ++ ldr r3, .L3323+32 ++ ldrh r3, [r3] ++ add r3, r3, r3, lsl #1 ++ asr r3, r3, #2 ++.L3320: ++ strh r3, [r6, #-8] @ movhi ++ bl FtlReadRefresh ++ mov r0, #0 ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ ldr r3, [r5, #-1404] ++ lsl r0, r0, #1 ++ ldrh r3, [r3, r0] ++ cmp r3, #4 ++ bls .L3203 ++.L3322: ++ movw r3, #1932 ++ ldrh r0, [r5, r3] ++ b .L3159 ++.L3203: ++ movw r7, #1932 ++ ldrh r0, [r5, r7] ++ cmp r0, #0 ++ bne .L3207 ++ ldr r10, .L3323+32 ++ ldrh r9, [r10] ++ add r3, r9, r9, lsl #1 ++ asr r3, r3, #2 ++ strh r3, [r6, #-8] @ movhi ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ ldr r3, [r5, #-1404] ++ lsl r0, r0, #1 ++ ldrh r2, [r3, r0] ++ sub r3, r10, #2816 ++ sub r10, r10, #2880 ++ ldrh r1, [r3] ++ ldrh r3, [r10, #-4] ++ mul r3, r3, r1 ++ add r3, r3, r3, lsr #31 ++ cmp r2, r3, asr #1 ++ ble .L3208 ++ ldrh r3, [r4] ++ sub r9, r9, #1 ++ cmp r3, r9 ++ blt .L3208 ++ bl FtlReadRefresh ++ ldrh r0, [r5, r7] ++ b .L3159 ++.L3208: ++ cmp r2, #0 ++ bne .L3207 ++ movw r0, #65535 ++ bl decrement_vpc_count ++ ldrh r0, [r4] ++ add r0, r0, #1 ++ b .L3159 ++.L3221: ++ str r0, [sp, #16] ++ mov r0, r2 ++ str r2, [sp, #12] ++ add r7, r7, #1 ++ bl IsBlkInGcList ++ cmp r0, #0 ++ ldr r2, [sp, #12] ++ ldr r3, [sp, #16] ++ strhne r7, [r6] @ movhi ++ bne .L3220 ++ ldr lr, .L3323+16 ++ uxth r3, r3 ++ ldr r0, [r10, #-1404] ++ uxth r7, r7 ++ lsl r1, r3, #1 ++ ldrh r3, [r6, #-142] ++ ldrh lr, [lr, #-68] ++ strh r7, [r6] @ movhi ++ ldrh ip, [r0, r1] ++ mul r3, lr, r3 ++ add lr, r3, r3, lsr #31 ++ cmp ip, lr, asr #1 ++ bgt .L3224 ++ cmp r7, #48 ++ cmphi ip, #8 ++ bls .L3225 ++ add r6, r6, #3280 ++ ldrh ip, [r6] ++ cmp ip, #35 ++ bhi .L3225 ++.L3224: ++ mov ip, #0 ++ strh ip, [fp, #-4] @ movhi ++.L3225: ++ ldrh r1, [r0, r1] ++ movw r0, #65535 ++ cmp r3, r1 ++ cmple r4, r0 ++ bne .L3226 ++ ldrh r0, [fp, #-4] ++ cmp r0, #3 ++ bhi .L3226 ++ movw r2, #1156 ++ mvn r1, #0 ++ strh r1, [r10, r2] @ movhi ++ movw r3, #1932 ++ mov r2, #0 ++ ldrh r0, [r10, r3] ++ strh r2, [fp, #-4] @ movhi ++ b .L3159 ++.L3226: ++ cmp r1, #0 ++ bne .L3227 ++ movw r0, #65535 ++ bl decrement_vpc_count ++ ldrh r3, [fp, #-4] ++ add r3, r3, #1 ++ strh r3, [fp, #-4] @ movhi ++ b .L3220 ++.L3227: ++ mov r3, #0 ++ strb r3, [r10, #1164] ++ ldrb r3, [r10, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3228 ++ mov r0, r2 ++ bl ftl_get_blk_mode ++ strb r0, [r10, #1164] ++.L3228: ++ ldr r0, .L3323+44 ++ bl make_superblock ++ ldrh r2, [r8] ++ mov r3, #0 ++ ldr r1, .L3323+56 ++ ldr r0, [r10, #-1404] ++ lsl r2, r2, #1 ++ strh r3, [r1] @ movhi ++ ldrh r2, [r0, r2] ++ strh r3, [r8, #2] @ movhi ++ strb r3, [r10, #1162] ++ strh r2, [r1, #2] @ movhi ++.L3219: ++ ldr r3, [sp, #24] ++ cmp r3, #1 ++ bne .L3229 ++ bl FtlReadRefresh ++.L3229: ++ mov r3, #1 ++ str r3, [r10, #-1560] ++ ldr r3, .L3323+16 ++ ldrh r2, [r3, #-2] ++ str r2, [sp, #12] ++ ldrb r2, [r10, #-2740] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3230 ++ ldrb r2, [r10, #1164] @ zero_extendqisi2 ++ cmp r2, #1 ++ ldrheq r3, [r3] ++ streq r3, [sp, #12] ++.L3230: ++ ldrh r3, [r8, #2] ++ ldr r1, [sp, #12] ++ ldr r6, .L3323+44 ++ add r2, r3, r9 ++ cmp r2, r1 ++ movgt r2, r1 ++ subgt r3, r2, r3 ++ uxthgt r9, r3 ++ mov r3, #0 ++ str r3, [sp, #20] ++.L3232: ++ ldrh r3, [sp, #20] ++ cmp r9, r3 ++ bls .L3239 ++ ldr r3, .L3323+60 ++ add ip, r6, #14 ++ ldrh r1, [r6, #2] ++ mov lr, #36 ++ ldr r0, [r5, #-1484] ++ ldrh r8, [r3] ++ ldr r3, [sp, #20] ++ add r1, r1, r3 ++ mov r3, #0 ++ mov fp, r3 ++ b .L3240 ++.L3234: ++ ldrh r2, [ip, #2]! ++ movw r7, #65535 ++ add r3, r3, #1 ++ cmp r2, r7 ++ mlane r7, lr, fp, r0 ++ addne fp, fp, #1 ++ orrne r2, r1, r2, lsl #10 ++ uxthne fp, fp ++ strne r2, [r7, #4] ++.L3240: ++ uxth r2, r3 ++ cmp r8, r2 ++ bhi .L3234 ++ ldrb r2, [r5, #1164] @ zero_extendqisi2 ++ mov r1, fp ++ bl FlashReadPages ++ mov r3, #0 ++.L3321: ++ str r3, [sp, #16] ++ ldrh r3, [sp, #16] ++ cmp fp, r3 ++ ldrls r3, [sp, #20] ++ addls r3, r3, #1 ++ strls r3, [sp, #20] ++ bls .L3232 ++.L3238: ++ ldr r2, [sp, #16] ++ mov r3, #36 ++ mul r7, r3, r2 ++ ldr r3, [r5, #-1484] ++ add r2, r3, r7 ++ ldr r3, [r3, r7] ++ cmn r3, #1 ++ beq .L3236 ++ ldr r8, [r2, #12] ++ movw r3, #61589 ++ ldrh r2, [r8] ++ cmp r2, r3 ++ bne .L3236 ++ mov r2, #0 ++ add r1, sp, #32 ++ ldr r0, [r8, #8] ++ bl log2phys ++ ldr r2, [r5, #-1484] ++ ldr r3, [sp, #32] ++ add r2, r2, r7 ++ ldr r1, [r2, #4] ++ bic r3, r3, #-2147483648 ++ cmp r3, r1 ++ bne .L3236 ++ ldr r3, .L3323+56 ++ mov r0, #36 ++ ldr r1, .L3323+56 ++ ldr r2, [r2, #16] ++ ldrh r3, [r3] ++ add r3, r3, #1 ++ strh r3, [r1] @ movhi ++ ldr r1, [r5, #1732] ++ ldr r3, [r5, #-1496] ++ mla r3, r0, r1, r3 ++ str r2, [r3, #16] ++ str r3, [sp, #28] ++ bl Ftl_get_new_temp_ppa ++ ldr r3, [sp, #28] ++ mov r1, #36 ++ ldr r2, [r5, #-1496] ++ str r0, [r3, #4] ++ ldr r3, [r5, #1732] ++ mla r2, r1, r3, r2 ++ ldr r3, [r5, #-1484] ++ add r3, r3, r7 ++ ldr r1, [r3, #8] ++ str r1, [r2, #8] ++ mov r1, #1 ++ ldr r3, [r3, #12] ++ str r3, [r2, #12] ++ ldr r3, [sp, #32] ++ str r3, [r8, #12] ++ ldr r3, .L3323+28 ++ ldrh r3, [r3] ++ strh r3, [r8, #2] @ movhi ++ ldr r3, [r5, #-1608] ++ ldr r0, [r5, #-1484] ++ str r3, [r8, #4] ++ ldr r3, [r5, #1732] ++ add r0, r0, r7 ++ add r3, r3, #1 ++ str r3, [r5, #1732] ++ bl FtlGcBufAlloc ++ ldrb r3, [r5, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3237 ++ ldrb r2, [r5, #987] @ zero_extendqisi2 ++ ldr r3, [r5, #1732] ++ cmp r2, r3 ++ beq .L3237 ++ ldr r3, .L3323+28 ++ ldrh r3, [r3, #4] ++ cmp r3, #0 ++ bne .L3236 ++.L3237: ++ bl Ftl_gc_temp_data_write_back ++ cmp r0, #0 ++ beq .L3236 ++ ldr r3, .L3323 ++ mvn r0, #0 ++ movw r1, #1156 ++ mov r2, #0 ++ strh r0, [r3, r1] @ movhi ++ ldr r1, .L3323+44 ++ str r2, [r3, #-1560] ++ strh r2, [r1, #2] @ movhi ++ movw r2, #1932 ++ ldrh r0, [r3, r2] ++ b .L3159 ++.L3236: ++ ldr r3, [sp, #16] ++ add r3, r3, #1 ++ b .L3321 ++.L3239: ++ ldrh r3, [r6, #2] ++ ldr r2, [sp, #12] ++ add r3, r9, r3 ++ uxth r3, r3 ++ cmp r2, r3 ++ strh r3, [r6, #2] @ movhi ++ bhi .L3241 ++ ldr r3, [r5, #1732] ++ cmp r3, #0 ++ beq .L3242 ++ bl Ftl_gc_temp_data_write_back ++ cmp r0, #0 ++ movne r3, #0 ++ strne r3, [r5, #-1560] ++ bne .L3322 ++.L3242: ++ ldr r3, .L3323+56 ++ ldrh r7, [r3] ++ cmp r7, #0 ++ bne .L3243 ++ ldrh r3, [r6] ++ ldr r2, [r5, #-1404] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L3243 ++.L3244: ++ ldr r3, [r5, #-1284] ++ cmp r7, r3 ++ bcs .L3249 ++ mov r2, #0 ++ add r1, sp, #36 ++ mov r0, r7 ++ bl log2phys ++ ldr r0, [sp, #36] ++ cmn r0, #1 ++ beq .L3245 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r6] ++ cmp r3, r0 ++ bne .L3245 ++.L3249: ++ ldr r3, [r5, #-1284] ++ cmp r7, r3 ++ bcc .L3243 ++ ldrh r3, [r6] ++ mov r1, #0 ++ ldr r2, [r5, #-1404] ++ lsl r3, r3, #1 ++ strh r1, [r2, r3] @ movhi ++ ldrh r0, [r6] ++ bl update_vpc_list ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ bl FtlVpcTblFlush ++.L3243: ++ mvn r3, #0 ++ strh r3, [r6] @ movhi ++.L3241: ++ ldr r3, .L3323+24 ++ ldrh r3, [r3] ++ cmp r3, #2 ++ bhi .L3250 ++ ldr r3, .L3323+64 ++ ldrh r9, [r3] ++ b .L3251 ++.L3245: ++ add r7, r7, #1 ++ b .L3244 ++.L3250: ++ mov r2, #0 ++ str r2, [r5, #-1560] ++ movw r2, #1932 ++ ldrh r0, [r5, r2] ++ cmp r0, #0 ++ addeq r0, r3, #1 ++ b .L3159 ++.L3255: ++ mov r0, #0 ++ b .L3159 ++.L3324: ++ .align 2 ++.L3323: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .word .LANCHOR2-1520 ++ .word .LANCHOR2-1536 ++ .word .LANCHOR2-1664 ++ .word .LC158 ++ .word .LANCHOR2+880 ++ .word .LANCHOR2+980 ++ .word .LANCHOR2+1152 ++ .word .LANCHOR2-1712 ++ .word .LC159 ++ .word .LANCHOR2+1156 ++ .word .LANCHOR2+884 ++ .word .LANCHOR2-1524 ++ .word .LANCHOR2+1934 ++ .word .LANCHOR2-1732 ++ .word .LANCHOR2-1666 ++ .fnend ++ .size ftl_do_gc, .-ftl_do_gc ++ .align 2 ++ .global FtlCacheWriteBack ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlCacheWriteBack, %function ++FtlCacheWriteBack: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L3368 ++ ldr r8, [r4, #-1280] ++ cmp r8, #0 ++ bne .L3327 ++ ldr r1, [r4, #-1512] ++ cmp r1, #0 ++ beq .L3327 ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ mov r6, #0 ++ ldr r5, [r4, #1940] ++ mov r9, #36 ++ ldr r10, .L3368+4 ++ cmp r3, #0 ++ ldr r0, [r4, #-1480] ++ ldrbne r7, [r5, #8] @ zero_extendqisi2 ++ moveq r7, r8 ++ ldrb r3, [r5, #9] @ zero_extendqisi2 ++ subne r7, r7, #1 ++ clzne r7, r7 ++ lsrne r7, r7, #5 ++ mov r2, r7 ++ bl FlashProgPages ++.L3330: ++ ldr r3, [r4, #-1512] ++ cmp r6, r3 ++ bcc .L3337 ++.L3349: ++ mov r3, #0 ++ str r3, [r4, #-1512] ++.L3327: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3337: ++ mul fp, r9, r6 ++ ldr r3, [r4, #-1480] ++ add r0, r3, fp ++ ldr r3, [r3, fp] ++ cmn r3, #1 ++ bne .L3331 ++ ldr r10, .L3368+4 ++.L3332: ++ ldr r3, [r4, #-1512] ++ cmp r8, r3 ++ bcc .L3347 ++ movw r5, #16386 ++.L3350: ++ ldr r3, .L3368+8 ++ ldrh r3, [r3] ++ cmp r3, #0 ++ beq .L3349 ++ mov r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ subs r5, r5, #1 ++ bne .L3350 ++ b .L3349 ++.L3331: ++ ldr r3, [r0, #4] ++ cmp r7, #0 ++ mov r2, #1 ++ add r1, sp, #4 ++ ldr r0, [r0, #16] ++ orrne r3, r3, #-2147483648 ++ str r3, [sp, #4] ++ bl log2phys ++ ldr r3, [r4, #-1480] ++ add fp, r3, fp ++ ldr r3, [fp, #12] ++ ldr r0, [r3, #12] ++ cmn r0, #1 ++ beq .L3335 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r2, [r4, #-1404] ++ lsl r3, r0, #1 ++ mov fp, r0 ++ ldrh r2, [r2, r3] ++ cmp r2, #0 ++ bne .L3336 ++ mov r1, r0 ++ mov r0, r10 ++ bl rk_printk ++.L3336: ++ mov r0, fp ++ bl decrement_vpc_count ++.L3335: ++ add r6, r6, #1 ++ b .L3330 ++.L3347: ++ mov r6, #36 ++ ldr r3, [r4, #-1480] ++ mul r6, r6, r8 ++ mov r9, #0 ++ mov fp, #1 ++ mvn r2, #0 ++ str r2, [r3, r6] ++.L3338: ++ ldr r2, [r4, #-1480] ++ add r3, r2, r6 ++ ldr r2, [r2, r6] ++ ldr r0, [r3, #4] ++ cmn r2, #1 ++ beq .L3342 ++ cmp r7, #0 ++ mov r2, #1 ++ orrne r0, r0, #-2147483648 ++ add r1, sp, #4 ++ str r0, [sp, #4] ++ ldr r0, [r3, #16] ++ bl log2phys ++ ldr r3, [r4, #-1480] ++ add r6, r3, r6 ++ ldr r3, [r6, #12] ++ ldr r0, [r3, #12] ++ cmn r0, #1 ++ beq .L3345 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldr r2, [r4, #-1404] ++ lsl r3, r0, #1 ++ mov r6, r0 ++ ldrh r2, [r2, r3] ++ cmp r2, #0 ++ bne .L3346 ++ mov r1, r0 ++ mov r0, r10 ++ bl rk_printk ++.L3346: ++ mov r0, r6 ++ bl decrement_vpc_count ++.L3345: ++ add r8, r8, #1 ++ b .L3332 ++.L3342: ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ ldrh r3, [r5] ++ cmp r3, r0 ++ bne .L3339 ++ ldr r1, [r4, #-1404] ++ lsl r3, r3, #1 ++ ldrh r0, [r5, #4] ++ ldrh r2, [r1, r3] ++ sub r2, r2, r0 ++ strh r2, [r1, r3] @ movhi ++ ldr r3, .L3368+12 ++ strb r9, [r5, #6] ++ strh r9, [r5, #4] @ movhi ++ ldrh r3, [r3] ++ strh r3, [r5, #2] @ movhi ++.L3339: ++ ldrh r3, [r5, #4] ++ cmp r3, #0 ++ bne .L3340 ++ mov r0, r5 ++ bl allocate_new_data_superblock ++.L3340: ++ ldr r3, [r4, #1300] ++ add r3, r3, #1 ++ str r3, [r4, #1300] ++ ldr r3, [r4, #-1480] ++ add r3, r3, r6 ++ ldr r0, [r3, #4] ++ ubfx r0, r0, #10, #16 ++ bl FtlGcMarkBadPhyBlk ++ mov r0, r5 ++ bl get_new_active_ppa ++ ldr r3, [r4, #-1480] ++ mov r2, r0 ++ str r0, [sp, #4] ++ mov r1, #1 ++ add r0, r3, r6 ++ str r2, [r0, #4] ++ mov r2, r7 ++ ldrb r3, [r5, #9] @ zero_extendqisi2 ++ bl FlashProgPages ++ ldr r3, [r4, #-1480] ++ ldr r3, [r3, r6] ++ cmn r3, #1 ++ streq fp, [r4, #-1280] ++ ldr r3, [r4, #-1280] ++ cmp r3, #0 ++ beq .L3338 ++ b .L3327 ++.L3369: ++ .align 2 ++.L3368: ++ .word .LANCHOR2 ++ .word .LC160 ++ .word .LANCHOR2-1522 ++ .word .LANCHOR2-1666 ++ .fnend ++ .size FtlCacheWriteBack, .-FtlCacheWriteBack ++ .align 2 ++ .global FtlSysFlush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSysFlush, %function ++FtlSysFlush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3376 ++ ldr r3, [r3, #-1280] ++ cmp r3, #0 ++ bne .L3373 ++ ldr r3, .L3376+4 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, [r3, #3440] ++ cmp r4, #1 ++ bne .L3371 ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ mov r0, r4 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L3371: ++ mov r0, #0 ++ pop {r4, pc} ++.L3373: ++ mov r0, #0 ++ bx lr ++.L3377: ++ .align 2 ++.L3376: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .fnend ++ .size FtlSysFlush, .-FtlSysFlush ++ .align 2 ++ .global FtlDeInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlDeInit, %function ++FtlDeInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3384 ++ ldr r3, [r3, #3440] ++ cmp r3, #1 ++ bne .L3381 ++ push {r4, lr} ++ .save {r4, lr} ++ bl FtlSysFlush ++ mov r0, #0 ++ pop {r4, pc} ++.L3381: ++ mov r0, #0 ++ bx lr ++.L3385: ++ .align 2 ++.L3384: ++ .word .LANCHOR1 ++ .fnend ++ .size FtlDeInit, .-FtlDeInit ++ .align 2 ++ .global ftl_deinit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_deinit, %function ++ftl_deinit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl ftl_flash_de_init ++ bl FtlDeInit ++ pop {r4, lr} ++ b ftl_flash_de_init ++ .fnend ++ .size ftl_deinit, .-ftl_deinit ++ .align 2 ++ .global ftl_cache_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_cache_flush, %function ++ftl_cache_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b FtlCacheWriteBack ++ .fnend ++ .size ftl_cache_flush, .-ftl_cache_flush ++ .align 2 ++ .global ftl_discard ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_discard, %function ++ftl_discard: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ .pad #12 ++ ldr r4, .L3406 ++ ldr r3, [r4, #-2736] ++ cmp r3, r1 ++ cmpcs r3, r0 ++ bls .L3398 ++ add r2, r0, r1 ++ mov r7, r0 ++ cmp r3, r2 ++ mov r5, r1 ++ bcc .L3398 ++ cmp r1, #31 ++ bhi .L3391 ++.L3392: ++ mov r0, #0 ++.L3389: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L3391: ++ ldr r3, [r4, #-1280] ++ cmp r3, #0 ++ bne .L3392 ++ sub r9, r4, #1648 ++ bl FtlCacheWriteBack ++ ldrh r6, [r9, #-12] ++ mov r0, r7 ++ mov r1, r6 ++ bl __aeabi_uidiv ++ smulbb r3, r0, r6 ++ mov r8, r0 ++ sub r7, r7, r3 ++ uxth r7, r7 ++ cmp r7, #0 ++ beq .L3393 ++ sub r6, r6, r7 ++ add r8, r0, #1 ++ cmp r6, r5 ++ movcs r6, r5 ++ uxth r6, r6 ++ sub r5, r5, r6 ++.L3393: ++ mvn r3, #0 ++ str r3, [sp, #4] ++.L3394: ++ ldrh r3, [r9, #-12] ++ cmp r5, r3 ++ bcs .L3396 ++ ldr r3, [r4, #1944] ++ cmp r3, #32 ++ bls .L3392 ++ mov r5, #0 ++ str r5, [r4, #1944] ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ b .L3392 ++.L3396: ++ mov r2, #0 ++ mov r1, sp ++ mov r0, r8 ++ bl log2phys ++ ldr r3, [sp] ++ cmn r3, #1 ++ beq .L3395 ++ ldr r3, [r4, #1944] ++ mov r2, #1 ++ add r1, sp, #4 ++ mov r0, r8 ++ add r3, r3, #1 ++ str r3, [r4, #1944] ++ ldr r3, [r4, #-1596] ++ add r3, r3, #1 ++ str r3, [r4, #-1596] ++ bl log2phys ++ ldr r0, [sp] ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ bl decrement_vpc_count ++.L3395: ++ ldrh r3, [r9, #-12] ++ add r8, r8, #1 ++ sub r5, r5, r3 ++ b .L3394 ++.L3398: ++ mvn r0, #0 ++ b .L3389 ++.L3407: ++ .align 2 ++.L3406: ++ .word .LANCHOR2 ++ .fnend ++ .size ftl_discard, .-ftl_discard ++ .align 2 ++ .global FtlGcFreeTempBlock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcFreeTempBlock, %function ++FtlGcFreeTempBlock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L3447 ++ ldr ip, [r4, #-1280] ++ sub r7, r4, #1664 ++ ldrh r1, [r7, #-2] ++ cmp ip, #0 ++ beq .L3409 ++.L3445: ++ mov r0, #0 ++.L3408: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3409: ++ add r5, r4, #980 ++ movw lr, #65535 ++ ldrh r6, [r5] ++ cmp r6, lr ++ bne .L3411 ++.L3420: ++ ldrh r2, [r5] ++ movw r3, #65535 ++ mov r6, #0 ++ str r6, [r4, #1748] ++ cmp r2, r3 ++ beq .L3445 ++ bl FtlCacheWriteBack ++ ldrb r2, [r4, #987] @ zero_extendqisi2 ++ mov r10, #12 ++ ldrh r0, [r7, #-2] ++ ldrh r3, [r5] ++ ldr r1, [r4, #-1404] ++ ldr r9, .L3447+4 ++ smulbb r2, r2, r0 ++ lsl r3, r3, #1 ++ strh r2, [r1, r3] @ movhi ++ movw r3, #1758 ++ ldr r2, [r4, #-1604] ++ ldrh r3, [r4, r3] ++ add r3, r3, r2 ++ str r3, [r4, #-1604] ++.L3421: ++ ldrh r2, [r9] ++ uxth r3, r6 ++ cmp r2, r3 ++ bhi .L3425 ++ movw r0, #65535 ++ bl decrement_vpc_count ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3426 ++ ldrh r1, [r5] ++ ldr r0, .L3447+8 ++ bl rk_printk ++.L3426: ++ ldrh r0, [r5] ++ ldr r2, [r4, #-1404] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L3427 ++ bl INSERT_DATA_LIST ++.L3428: ++ mvn r6, #0 ++ movw r3, #1758 ++ strh r6, [r5] @ movhi ++ mov r5, #0 ++ strh r5, [r4, r3] @ movhi ++ movw r3, #1756 ++ strh r5, [r4, r3] @ movhi ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ movw r3, #1156 ++ strh r6, [r4, r3] @ movhi ++ ldr r3, [r4, #-1868] ++ cmp r3, r5 ++ ldr r3, .L3447+12 ++ add r2, r3, #272 ++ ldrh r2, [r2] ++ beq .L3429 ++ ldr r1, [r4, #-1564] ++ cmp r1, #39 ++ bhi .L3429 ++ ldrh r1, [r3] ++ cmp r1, r2 ++ subcc r3, r3, #2400 ++ lslcc r2, r2, #1 ++ bcs .L3445 ++.L3446: ++ strh r2, [r3, #-8] @ movhi ++ b .L3445 ++.L3411: ++ cmp r0, #0 ++ beq .L3414 ++ ldr r2, .L3447+16 ++ movw r3, #3444 ++ ldrh r0, [r2, r3] ++ cmp r0, lr ++ beq .L3415 ++.L3416: ++ mov r1, #2 ++.L3414: ++ ldr r0, .L3447+20 ++ bl FtlGcScanTempBlk ++ cmn r0, #1 ++ str r0, [sp, #4] ++ beq .L3417 ++ ldr r2, [r4, #-1412] ++ lsl r6, r6, #1 ++ ldrh r3, [r2, r6] ++ cmp r3, #4 ++ bls .L3418 ++ sub r3, r3, #5 ++ mov r0, #1 ++ strh r3, [r2, r6] @ movhi ++ bl FtlEctTblFlush ++.L3418: ++ ldr r3, [r4, #1748] ++ cmp r3, #0 ++ bne .L3419 ++ ldr r3, [r4, #1300] ++ ldr r0, [sp, #4] ++ add r3, r3, #1 ++ ubfx r0, r0, #10, #16 ++ str r3, [r4, #1300] ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++.L3419: ++ mov r3, #0 ++ str r3, [r4, #1748] ++.L3431: ++ mov r0, #1 ++ b .L3408 ++.L3415: ++ strh ip, [r2, r3] @ movhi ++ add r3, r4, #880 ++ ldrh r3, [r3] ++ cmp r3, #17 ++ bhi .L3416 ++ b .L3414 ++.L3417: ++ ldr r2, .L3447+16 ++ movw r3, #3444 ++ ldrh r2, [r2, r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3431 ++ b .L3420 ++.L3425: ++ uxth r8, r6 ++ ldr fp, [r4, #-1504] ++ ldr r3, [r4, #-1284] ++ mul r8, r10, r8 ++ add r7, fp, r8 ++ ldr r0, [r7, #8] ++ cmp r0, r3 ++ bcc .L3422 ++.L3443: ++ ldrh r0, [r5] ++ b .L3444 ++.L3422: ++ mov r2, #0 ++ add r1, sp, #4 ++ bl log2phys ++ ldr r0, [fp, r8] ++ ldr r3, [sp, #4] ++ cmp r0, r3 ++ bne .L3424 ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ mov r2, #1 ++ mov r8, r0 ++ add r1, r7, #4 ++ ldr r0, [r7, #8] ++ bl log2phys ++ mov r0, r8 ++.L3444: ++ bl decrement_vpc_count ++ b .L3423 ++.L3424: ++ ldr r2, [r7, #4] ++ cmp r3, r2 ++ bne .L3443 ++.L3423: ++ add r6, r6, #1 ++ b .L3421 ++.L3427: ++ bl INSERT_FREE_LIST ++ b .L3428 ++.L3429: ++ ldrh r3, [r3] ++ add r1, r2, r2, lsl #1 ++ cmp r3, r1, asr #2 ++ ble .L3445 ++ ldrb r0, [r4, #-2740] @ zero_extendqisi2 ++ ldr r3, .L3447+24 ++ cmp r0, #0 ++ moveq r2, #20 ++ strheq r2, [r3, #-8] @ movhi ++ beq .L3408 ++ sub r2, r2, #2 ++ b .L3446 ++.L3448: ++ .align 2 ++.L3447: ++ .word .LANCHOR2 ++ .word .LANCHOR2+1758 ++ .word .LC161 ++ .word .LANCHOR2+880 ++ .word .LANCHOR1 ++ .word .LANCHOR2+980 ++ .word .LANCHOR2-1520 ++ .fnend ++ .size FtlGcFreeTempBlock, .-FtlGcFreeTempBlock ++ .align 2 ++ .global FtlGcPageRecovery ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlGcPageRecovery, %function ++FtlGcPageRecovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, .L3452 ++ sub r5, r4, #1664 ++ add r6, r4, #980 ++ ldrh r1, [r5, #-2] ++ mov r0, r6 ++ bl FtlGcScanTempBlk ++ ldrh r2, [r6, #2] ++ ldrh r3, [r5, #-2] ++ cmp r2, r3 ++ popcc {r4, r5, r6, pc} ++ add r0, r6, #48 ++ bl FtlMapBlkWriteDumpData ++ mov r0, #0 ++ bl FtlGcFreeTempBlock ++ mov r3, #0 ++ str r3, [r4, #1748] ++ pop {r4, r5, r6, pc} ++.L3453: ++ .align 2 ++.L3452: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlGcPageRecovery, .-FtlGcPageRecovery ++ .align 2 ++ .global FtlPowerLostRecovery ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlPowerLostRecovery, %function ++FtlPowerLostRecovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, #0 ++ ldr r4, .L3456 ++ add r6, r4, #884 ++ str r5, [r4, #1800] ++ mov r0, r6 ++ add r4, r4, #932 ++ bl FtlRecoverySuperblock ++ mov r0, r6 ++ bl FtlSlcSuperblockCheck ++ mov r0, r4 ++ bl FtlRecoverySuperblock ++ mov r0, r4 ++ bl FtlSlcSuperblockCheck ++ bl FtlGcPageRecovery ++ movw r0, #65535 ++ bl decrement_vpc_count ++ mov r0, r5 ++ pop {r4, r5, r6, pc} ++.L3457: ++ .align 2 ++.L3456: ++ .word .LANCHOR2 ++ .fnend ++ .size FtlPowerLostRecovery, .-FtlPowerLostRecovery ++ .align 2 ++ .global FtlSysBlkInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlSysBlkInit, %function ++FtlSysBlkInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r2, #0 ++ ldr r4, .L3476 ++ movw r3, #1796 ++ strh r2, [r4, r3] @ movhi ++ mvn r2, #0 ++ movw r3, #1794 ++ strh r2, [r4, r3] @ movhi ++ sub r3, r4, #1728 ++ ldrh r0, [r3] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlScanSysBlk ++ movw r3, #1128 ++ ldrh r2, [r4, r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3459 ++.L3461: ++ mvn r7, #0 ++.L3458: ++ mov r0, r7 ++ pop {r4, r5, r6, r7, r8, pc} ++.L3459: ++ bl FtlLoadSysInfo ++ subs r7, r0, #0 ++ bne .L3461 ++ bl FtlLoadMapInfo ++ bl FtlLoadVonderInfo ++ bl Ftl_load_ext_data ++ bl FtlLoadEctTbl ++ bl FtlFreeSysBLkSort ++ bl SupperBlkListInit ++ bl FtlPowerLostRecovery ++ mov r0, #1 ++ bl FtlUpdateVaildLpn ++ ldr r2, [r4, #-1364] ++ sub r3, r4, #1616 ++ ldrh r1, [r3, #-10] ++ mov r0, #12 ++ mov r3, r7 ++.L3462: ++ cmp r3, r1 ++ bge .L3467 ++ mla ip, r0, r3, r2 ++ ldr ip, [ip, #4] ++ cmp ip, #0 ++ bge .L3463 ++.L3467: ++ ldr r5, .L3476+4 ++ cmp r3, r1 ++ ldrh r2, [r5, #28] ++ add r6, r5, #68 ++ add r2, r2, #1 ++ strh r2, [r5, #28] @ movhi ++ bge .L3474 ++.L3464: ++ ldrh r3, [r6] ++ ldr r1, [r4, #-1404] ++ ldrh r0, [r6, #4] ++ ldr ip, .L3476+8 ++ lsl r3, r3, #1 ++ ldrh r2, [r1, r3] ++ sub r2, r2, r0 ++ strh r2, [r1, r3] @ movhi ++ mov r2, #0 ++ ldrh r3, [ip, #-2] ++ ldr lr, [r4, #-1404] ++ strb r2, [r4, #890] ++ strh r3, [r6, #2] @ movhi ++ ldr r3, .L3476+12 ++ strh r2, [r6, #4] @ movhi ++ ldrh r1, [r3] ++ ldrh r8, [r3, #4] ++ lsl r1, r1, #1 ++ ldrh r0, [lr, r1] ++ sub r0, r0, r8 ++ strh r0, [lr, r1] @ movhi ++ ldrh r1, [ip, #-2] ++ strh r2, [r3, #4] @ movhi ++ strb r2, [r4, #938] ++ strh r1, [r3, #2] @ movhi ++ ldrh r3, [r5, #30] ++ add r3, r3, #1 ++ strh r3, [r5, #30] @ movhi ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ bl FtlVpcTblFlush ++ b .L3468 ++.L3463: ++ add r3, r3, #1 ++ b .L3462 ++.L3474: ++ movw r3, #1796 ++ ldrh r3, [r4, r3] ++ cmp r3, #0 ++ bne .L3464 ++.L3468: ++ ldrh r0, [r6] ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L3469 ++ ldrh r3, [r6, #4] ++ cmp r3, #0 ++ bne .L3469 ++ ldr r4, .L3476+12 ++ ldrh r3, [r4, #4] ++ cmp r3, #0 ++ bne .L3469 ++ bl FtlGcRefreshOpenBlock ++ ldrh r0, [r4] ++ bl FtlGcRefreshOpenBlock ++ bl FtlVpcTblFlush ++ sub r0, r4, #48 ++ bl allocate_new_data_superblock ++ mov r0, r4 ++ bl allocate_new_data_superblock ++.L3469: ++ ldr r3, .L3476+16 ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3470 ++ ldrh r3, [r5, #28] ++ tst r3, #31 ++ bne .L3458 ++.L3470: ++ bl FtlVpcCheckAndModify ++ b .L3458 ++.L3477: ++ .align 2 ++.L3476: ++ .word .LANCHOR2 ++ .word .LANCHOR2+816 ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2+932 ++ .word .LANCHOR0 ++ .fnend ++ .size FtlSysBlkInit, .-FtlSysBlkInit ++ .align 2 ++ .global FtlLowFormat ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlLowFormat, %function ++FtlLowFormat: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L3510 ++ ldr r5, [r4, #-1280] ++ cmp r5, #0 ++ bne .L3480 ++ sub r6, r4, #1616 ++ mov r1, r5 ++ ldrh r2, [r6, #-12] ++ ldr r0, [r4, #-1372] ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldrh r2, [r6, #-12] ++ mov r1, r5 ++ ldr r0, [r4, #-1376] ++ lsl r2, r2, #2 ++ bl ftl_memset ++ sub r3, r4, #1728 ++ str r5, [r4, #-1612] ++ ldrh r0, [r3] ++ str r5, [r4, #-1608] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cmp r0, #0 ++ beq .L3481 ++ bl FtlMakeBbt ++.L3481: ++ ldr r0, .L3510+4 ++ mov r2, #0 ++.L3482: ++ ldr r7, .L3510+8 ++ uxth r3, r2 ++ add r2, r2, #1 ++ ldrh r1, [r7] ++ cmp r3, r1, lsl #7 ++ blt .L3483 ++ sub r7, r7, #52 ++ ldrh r6, [r7, #-12] ++ mov r5, #0 ++.L3484: ++ ldrh r3, [r7, #-10] ++ cmp r3, r6 ++ bhi .L3485 ++ ldr r10, .L3510+12 ++ sub r3, r5, #3 ++ ldrh r1, [r10, #-4] ++ cmp r3, r1, lsl #1 ++ blt .L3486 ++ mov r0, r5 ++ mov r5, #0 ++ bl __aeabi_uidiv ++ ldr r3, [r4, #-1632] ++ add r0, r0, r3 ++ uxth r0, r0 ++ bl FtlSysBlkNumInit ++ sub r3, r4, #1728 ++ ldrh r0, [r3] ++ bl FtlFreeSysBlkQueueInit ++ ldrh r6, [r7, #-12] ++.L3487: ++ ldrh r3, [r7, #-10] ++ cmp r3, r6 ++ bhi .L3488 ++.L3486: ++ mov r6, #0 ++ mov r8, r6 ++.L3489: ++ ldrh r3, [r7, #-12] ++ uxth r0, r6 ++ add r6, r6, #1 ++ cmp r3, r0 ++ bhi .L3490 ++ ldrh r3, [r7, #-10] ++ ldr r2, [r4, #-1720] ++ ldrh r6, [r10, #-4] ++ str r3, [r4, #-1540] ++ mov r0, r2 ++ str r2, [sp, #4] ++ mov r1, r6 ++ bl __aeabi_uidiv ++ ldr r3, .L3510+16 ++ ubfx r10, r0, #5, #16 ++ add r1, r10, #36 ++ mov fp, r0 ++ str r0, [r4, #-1284] ++ strh r1, [r3] @ movhi ++ mov r1, #24 ++ mul r1, r1, r6 ++ mov r9, r3 ++ cmp r8, r1 ++ ble .L3491 ++ ldr r2, [sp, #4] ++ mov r1, r6 ++ sub r0, r2, r8 ++ bl __aeabi_uidiv ++ str r0, [r4, #-1284] ++ lsr r0, r0, #5 ++ add r0, r0, #24 ++ strh r0, [r9] @ movhi ++.L3491: ++ ldr r2, [r4, #-1868] ++ cmp r2, #1 ++ bne .L3492 ++ ldrh r2, [r9] ++ mov r1, r6 ++ mov r0, r8 ++ str r2, [sp, #4] ++ bl __aeabi_uidiv ++ ldr r2, [sp, #4] ++ uxtah r0, r2, r0 ++ add r2, r2, r0, asr #2 ++ strh r2, [r9] @ movhi ++.L3492: ++ ldrb r2, [r4, #-2740] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3493 ++ ldrh r2, [r9] ++ mov r1, r6 ++ mov r0, r8 ++ str r2, [sp, #4] ++ bl __aeabi_uidiv ++ ldr r2, [sp, #4] ++ uxtah r0, r2, r0 ++ add r2, r2, r0, asr #2 ++ strh r2, [r9] @ movhi ++.L3493: ++ ldr r1, .L3510+20 ++ ldrh r2, [r1, #-8] ++ cmp r2, #0 ++ beq .L3495 ++ ldrh r0, [r9] ++ add r0, r0, r2, lsr #1 ++ strh r0, [r9] @ movhi ++ mul r0, r6, r2 ++ cmp r8, r0 ++ addlt r2, r2, #32 ++ strlt fp, [r4, #-1284] ++ addlt r2, r10, r2 ++ strhlt r2, [r9] @ movhi ++.L3495: ++ ldrh r2, [r9] ++ ldr r3, [r4, #-1284] ++ sub r3, r3, r2 ++ mul r6, r6, r3 ++ ldrh r3, [r1, #-2] ++ str r6, [r4, #1148] ++ mul r6, r6, r3 ++ ldr r3, .L3510+24 ++ ldrh r3, [r3, #-12] ++ str r6, [r4, #-1284] ++ mul r6, r6, r3 ++ str r6, [r4, #-2736] ++ bl FtlBbmTblFlush ++ ldr r3, .L3510+24 ++ add r1, r5, r8 ++ ldr r2, [r4, #-1716] ++ ldrh r3, [r3, #-4] ++ add r3, r3, r2, lsr #3 ++ cmp r1, r3 ++ bls .L3497 ++ lsr r2, r2, #5 ++ ldr r0, .L3510+28 ++ bl rk_printk ++.L3497: ++ ldrh r2, [r7, #-10] ++ mov r1, #0 ++ ldr r5, .L3510+32 ++ mvn r6, #0 ++ ldr r0, [r4, #-1404] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ mov r3, #0 ++ movw r2, #1156 ++ strh r3, [r5, #2] @ movhi ++ sub r5, r5, #272 ++ str r3, [r4, #1124] ++ mov r1, #255 ++ strh r6, [r4, r2] @ movhi ++ strb r3, [r4, #1162] ++ ldrh r2, [r7, #-12] ++ mov r7, r5 ++ strb r3, [r4, #1164] ++ strh r3, [r5, #2] @ movhi ++ strb r3, [r4, #890] ++ strh r3, [r5] @ movhi ++ mov r3, #1 ++ strb r3, [r4, #892] ++ lsr r2, r2, #3 ++ ldr r3, .L3510+36 ++ ldr r0, [r3, #32] ++ bl ftl_memset ++.L3498: ++ mov r0, r7 ++ bl make_superblock ++ ldrb r3, [r4, #891] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrh r3, [r5] ++ bne .L3499 ++ ldr r2, [r4, #-1404] ++ lsl r3, r3, #1 ++ strh r6, [r2, r3] @ movhi ++ ldrh r3, [r5] ++ add r3, r3, #1 ++ strh r3, [r5] @ movhi ++ b .L3498 ++.L3483: ++ ldr ip, [r4, #-1452] ++ mvn r1, r3 ++ orr r1, r3, r1, lsl #16 ++ str r1, [ip, r3, lsl #2] ++ ldr r1, [r4, #-1448] ++ str r0, [r1, r3, lsl #2] ++ b .L3482 ++.L3485: ++ mov r0, r6 ++ mov r1, #1 ++ bl FtlLowFormatEraseBlock ++ add r6, r6, #1 ++ add r5, r5, r0 ++ uxth r5, r5 ++ uxth r6, r6 ++ b .L3484 ++.L3488: ++ mov r0, r6 ++ mov r1, #1 ++ bl FtlLowFormatEraseBlock ++ add r6, r6, #1 ++ add r5, r5, r0 ++ uxth r5, r5 ++ uxth r6, r6 ++ b .L3487 ++.L3490: ++ mov r1, #0 ++ bl FtlLowFormatEraseBlock ++ add r8, r8, r0 ++ uxth r8, r8 ++ b .L3489 ++.L3499: ++ ldr r2, [r4, #-1612] ++ lsl r3, r3, #1 ++ ldrh r1, [r5, #4] ++ mvn r6, #0 ++ str r2, [r4, #896] ++ add r2, r2, #1 ++ str r2, [r4, #-1612] ++ ldr r2, [r4, #-1404] ++ strh r1, [r2, r3] @ movhi ++ mov r2, #0 ++ ldr r3, .L3510+40 ++ strb r2, [r4, #938] ++ strh r2, [r3, #2] @ movhi ++ mov r7, r3 ++ ldrh r2, [r5] ++ mov r5, r3 ++ add r2, r2, #1 ++ strh r2, [r3] @ movhi ++ mov r2, #1 ++ strb r2, [r4, #940] ++.L3500: ++ mov r0, r7 ++ bl make_superblock ++ ldrb r3, [r4, #939] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrh r3, [r5] ++ bne .L3501 ++ ldr r2, [r4, #-1404] ++ lsl r3, r3, #1 ++ strh r6, [r2, r3] @ movhi ++ ldrh r3, [r5] ++ add r3, r3, #1 ++ strh r3, [r5] @ movhi ++ b .L3500 ++.L3501: ++ ldr r2, [r4, #-1612] ++ lsl r3, r3, #1 ++ ldrh r1, [r5, #4] ++ mvn r6, #0 ++ ldr r5, .L3510+44 ++ str r2, [r4, #944] ++ add r2, r2, #1 ++ str r2, [r4, #-1612] ++ ldr r2, [r4, #-1404] ++ strh r1, [r2, r3] @ movhi ++ strh r6, [r5], #148 @ movhi ++ bl FtlFreeSysBlkQueueOut ++ movw r3, #1128 ++ strh r6, [r5, #4] @ movhi ++ strh r0, [r4, r3] @ movhi ++ mov r3, #0 ++ strh r3, [r5, #2] @ movhi ++ ldr r3, [r4, #1148] ++ strh r3, [r5, #6] @ movhi ++ ldr r3, [r4, #-1612] ++ str r3, [r4, #1136] ++ add r3, r3, #1 ++ str r3, [r4, #-1612] ++ bl FtlVpcTblFlush ++ bl FtlSysBlkInit ++ cmp r0, #0 ++ ldreq r3, .L3510+48 ++ moveq r2, #1 ++ streq r2, [r3, #3440] ++.L3480: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3511: ++ .align 2 ++.L3510: ++ .word .LANCHOR2 ++ .word 168778952 ++ .word .LANCHOR2-1660 ++ .word .LANCHOR2-1728 ++ .word .LANCHOR2+1152 ++ .word .LANCHOR2-1664 ++ .word .LANCHOR2-1648 ++ .word .LC162 ++ .word .LANCHOR2+1156 ++ .word .LANCHOR0 ++ .word .LANCHOR2+932 ++ .word .LANCHOR2+980 ++ .word .LANCHOR1 ++ .fnend ++ .size FtlLowFormat, .-FtlLowFormat ++ .align 2 ++ .global FtlReInitForSDUpdata ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlReInitForSDUpdata, %function ++FtlReInitForSDUpdata: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r4, .L3548 ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3513 ++.L3515: ++ mov r5, #0 ++.L3512: ++ mov r0, r5 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, pc} ++.L3513: ++ ldr r3, .L3548+4 ++ ldr r0, [r3] ++ bl FlashInit ++ subs r5, r0, #0 ++ bne .L3515 ++ bl FlashLoadFactorBbt ++ cmp r0, #0 ++ beq .L3516 ++ bl FlashMakeFactorBbt ++.L3516: ++ ldr r0, [r4, #-1772] ++ bl FlashReadIdbDataRaw ++ cmp r0, #0 ++ beq .L3517 ++ mov r2, #16 ++ mov r1, #0 ++ mov r0, sp ++ bl FlashReadFacBbtData ++ ldr r1, [sp] ++ mov r3, #0 ++ mov r2, r3 ++ mov r0, #1 ++.L3519: ++ ands ip, r1, r0, lsl r2 ++ add r2, r2, #1 ++ addne r3, r3, #1 ++ cmp r2, #16 ++ bne .L3519 ++ cmp r3, #6 ++ ldrls r3, .L3548+8 ++ bls .L3545 ++ mov r2, #0 ++ mov r0, #1 ++.L3523: ++ ands ip, r1, r0, lsl r2 ++ add r2, r2, #1 ++ addne r3, r3, #1 ++ cmp r2, #24 ++ bne .L3523 ++ cmp r3, #17 ++ ldr r3, .L3548+8 ++ movhi r2, #36 ++.L3545: ++ strb r2, [r3, #37] ++ ldr r3, .L3548+8 ++ ldrb r2, [r3, #37] @ zero_extendqisi2 ++ ldr r3, .L3548+12 ++ strh r2, [r3, #26] @ movhi ++.L3517: ++ ldr r1, .L3548+16 ++ ldr r0, .L3548+20 ++ bl rk_printk ++ ldr r0, .L3548+12 ++ bl FtlConstantsInit ++ bl FtlVariablesInit ++ ldr r0, [r4, #-1728] ++ mov r4, #1 ++ uxth r0, r0 ++ bl FtlFreeSysBlkQueueInit ++.L3525: ++ bl FtlLoadBbt ++ cmp r0, #0 ++ beq .L3526 ++.L3547: ++ bl FtlLowFormat ++ cmp r4, #3 ++ mvnhi r5, #0 ++ bhi .L3512 ++.L3527: ++ add r4, r4, #1 ++ b .L3525 ++.L3526: ++ bl FtlSysBlkInit ++ cmp r0, #0 ++ bne .L3547 ++ ldr r3, .L3548+24 ++ mov r2, #1 ++ str r2, [r3, #3440] ++ b .L3512 ++.L3549: ++ .align 2 ++.L3548: ++ .word .LANCHOR2 ++ .word RK29_NANDC_REG_BASE ++ .word .LANCHOR0 ++ .word .LANCHOR2-2768 ++ .word .LC145 ++ .word .LC49 ++ .word .LANCHOR1 ++ .fnend ++ .size FtlReInitForSDUpdata, .-FtlReInitForSDUpdata ++ .align 2 ++ .global Ftl_gc_temp_data_write_back ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_gc_temp_data_write_back, %function ++Ftl_gc_temp_data_write_back: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, .L3566 ++ ldr r3, [r4, #-1280] ++ cmp r3, #0 ++ beq .L3551 ++.L3554: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L3551: ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3553 ++ ldr r3, [r4, #1732] ++ tst r3, #1 ++ beq .L3553 ++ add r3, r4, #980 ++ ldrh r3, [r3, #4] ++ cmp r3, #0 ++ bne .L3554 ++.L3553: ++ mov r3, #0 ++ mov r5, #0 ++ mov r6, #36 ++ mov r2, r3 ++ ldr r1, [r4, #1732] ++ ldr r0, [r4, #-1496] ++ bl FlashProgPages ++.L3555: ++ ldr r1, [r4, #1732] ++ uxth r3, r5 ++ cmp r3, r1 ++ bcc .L3557 ++ ldr r0, [r4, #-1496] ++ bl FtlGcBufFree ++ mov r3, #0 ++ str r3, [r4, #1732] ++ ldr r3, .L3566+4 ++ ldrh r3, [r3, #4] ++ cmp r3, #0 ++ bne .L3554 ++ mov r0, #1 ++ bl FtlGcFreeTempBlock ++ b .L3565 ++.L3557: ++ mul r3, r6, r3 ++ ldr r2, [r4, #-1496] ++ add r5, r5, #1 ++ ldr ip, [r2, r3] ++ add r1, r2, r3 ++ ldr r0, [r1, #12] ++ cmn ip, #1 ++ bne .L3556 ++ ldr r1, .L3566+4 ++ mov lr, #0 ++ ldr r0, [r4, #-1404] ++ ldrh r2, [r1] ++ lsl r2, r2, #1 ++ strh lr, [r0, r2] @ movhi ++ ldr r2, [r4, #1300] ++ strh ip, [r1] @ movhi ++ add r2, r2, #1 ++ str r2, [r4, #1300] ++ ldr r2, [r4, #-1496] ++ add r3, r2, r3 ++ ldr r0, [r3, #4] ++ ubfx r0, r0, #10, #16 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ bl FtlGcPageVarInit ++.L3565: ++ mov r0, #1 ++ pop {r4, r5, r6, pc} ++.L3556: ++ ldr r2, [r0, #8] ++ ldr r1, [r1, #4] ++ ldr r0, [r0, #12] ++ bl FtlGcUpdatePage ++ b .L3555 ++.L3567: ++ .align 2 ++.L3566: ++ .word .LANCHOR2 ++ .word .LANCHOR2+980 ++ .fnend ++ .size Ftl_gc_temp_data_write_back, .-Ftl_gc_temp_data_write_back ++ .align 2 ++ .global Ftl_get_new_temp_ppa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type Ftl_get_new_temp_ppa, %function ++Ftl_get_new_temp_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3575 ++ movw r2, #65535 ++ ldrh r1, [r3] ++ cmp r1, r2 ++ beq .L3569 ++ ldrh r3, [r3, #4] ++ cmp r3, #0 ++ ldrne r0, .L3575 ++ bne .L3574 ++.L3569: ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, #0 ++ ldr r5, .L3575+4 ++ bl FtlCacheWriteBack ++ mov r0, #0 ++ bl FtlGcFreeTempBlock ++ add r0, r5, #980 ++ strb r4, [r5, #988] ++ bl allocate_data_superblock ++ movw r3, #1756 ++ strh r4, [r5, r3] @ movhi ++ movw r3, #1758 ++ strh r4, [r5, r3] @ movhi ++ bl l2p_flush ++ mov r0, r4 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++ pop {r4, r5, r6, lr} ++ ldr r0, .L3575 ++.L3574: ++ b get_new_active_ppa ++.L3576: ++ .align 2 ++.L3575: ++ .word .LANCHOR2+980 ++ .word .LANCHOR2 ++ .fnend ++ .size Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa ++ .align 2 ++ .global ftl_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_read, %function ++ftl_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 56 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L3621 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #84 ++ sub sp, sp, #84 ++ ldr ip, [ip, #3440] ++ cmp ip, #1 ++ bne .L3601 ++ cmp r0, #16 ++ mov r8, r3 ++ str r2, [sp, #28] ++ mov r5, r1 ++ bne .L3579 ++ mov r2, r3 ++ ldr r1, [sp, #28] ++ add r0, r5, #256 ++ bl FtlVendorPartRead ++ mov r10, r0 ++.L3577: ++ mov r0, r10 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3579: ++ ldr r4, .L3621+4 ++ ldr r2, [sp, #28] ++ ldr r3, [r4, #-2736] ++ cmp r2, r3 ++ cmpls r1, r3 ++ bcs .L3601 ++ add r2, r1, r2 ++ cmp r3, r2 ++ str r2, [sp, #44] ++ bcc .L3601 ++ sub r3, r4, #1648 ++ mov r0, r5 ++ ldrh r6, [r3, #-12] ++ mov r1, r6 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #44] ++ mov r1, r6 ++ str r0, [sp, #36] ++ sub r0, r3, #1 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #36] ++ mov r1, r0 ++ ldr r2, [sp, #28] ++ str r0, [sp, #40] ++ rsb r3, r3, #1 ++ add r3, r3, r0 ++ ldr r0, [sp, #36] ++ str r3, [sp, #32] ++ ldr r3, [r4, #1720] ++ add r3, r3, r2 ++ ldr r2, [sp, #32] ++ str r3, [r4, #1720] ++ ldr r3, [r4, #-1584] ++ add r3, r3, r2 ++ str r3, [r4, #-1584] ++ bl FtlCacheMetchLpa ++ cmp r0, #0 ++ beq .L3580 ++ bl FtlCacheWriteBack ++.L3580: ++ ldr r6, [sp, #36] ++ mov r3, #0 ++ ldr r4, .L3621+4 ++ mov r7, r3 ++ mov r10, r3 ++ str r3, [sp, #52] ++ str r3, [sp, #48] ++.L3581: ++ ldr r3, [sp, #32] ++ cmp r3, #0 ++ bne .L3598 ++ ldr r3, .L3621+8 ++ ldrh r3, [r3, #-2] ++ cmp r3, #0 ++ beq .L3577 ++ mov r1, #1 ++ ldr r0, [sp, #32] ++ bl ftl_do_gc ++ b .L3577 ++.L3598: ++ mov r2, #0 ++ add r1, sp, #76 ++ mov r0, r6 ++ bl log2phys ++ ldr r3, [sp, #76] ++ cmn r3, #1 ++ moveq r9, #0 ++ beq .L3583 ++ ldr r2, [r4, #-1500] ++ mov r9, #36 ++ mla r9, r9, r7, r2 ++ str r3, [r9, #4] ++ ldr r3, [sp, #36] ++ cmp r6, r3 ++ bne .L3587 ++ ldr r3, [r4, #-1452] ++ mov r0, r5 ++ str r3, [r9, #8] ++ ldr r3, .L3621+12 ++ ldrh fp, [r3, #-12] ++ mov r1, fp ++ bl __aeabi_uidivmod ++ ldr r2, [sp, #28] ++ sub r3, fp, r1 ++ str r1, [sp, #56] ++ cmp r2, r3 ++ movcc r3, r2 ++ cmp r3, fp ++ str r3, [sp, #48] ++ streq r8, [r9, #8] ++.L3588: ++ ldr r3, .L3621+12 ++ ldr r2, [r4, #-1436] ++ str r6, [r9, #16] ++ ldrh r3, [r3, #-6] ++ mul r3, r7, r3 ++ add r7, r7, #1 ++ bic r3, r3, #3 ++ add r3, r2, r3 ++ str r3, [r9, #12] ++ b .L3586 ++.L3585: ++ mla r0, r0, r6, r9 ++ ldr r2, [sp, #44] ++ cmp r5, r0 ++ movls r3, #1 ++ movhi r3, #0 ++ cmp r2, r0 ++ movls r3, #0 ++ cmp r3, #0 ++ beq .L3584 ++ sub r0, r0, r5 ++ mov r2, #512 ++ mov r1, #0 ++ add r0, r8, r0, lsl #9 ++ bl ftl_memset ++.L3584: ++ add r9, r9, #1 ++.L3583: ++ ldr r3, .L3621+16 ++ ldrh r0, [r3] ++ cmp r9, r0 ++ bcc .L3585 ++.L3586: ++ ldr r3, [sp, #32] ++ add r6, r6, #1 ++ subs r3, r3, #1 ++ str r3, [sp, #32] ++ beq .L3590 ++ ldr r3, .L3621+20 ++ ldrh r3, [r3] ++ cmp r7, r3, lsl #3 ++ bne .L3581 ++.L3590: ++ cmp r7, #0 ++ beq .L3581 ++ mov r2, #0 ++ mov r1, r7 ++ ldr r0, [r4, #-1500] ++ mov fp, #0 ++ bl FlashReadPages ++ ldr r3, [sp, #52] ++ lsl r3, r3, #9 ++ str r3, [sp, #68] ++ ldr r3, [sp, #56] ++ lsl r3, r3, #9 ++ str r3, [sp, #60] ++ ldr r3, [sp, #48] ++ lsl r3, r3, #9 ++ str r3, [sp, #64] ++.L3597: ++ mov r9, #36 ++ ldr r3, [r4, #-1500] ++ mul r9, r9, fp ++ ldr r1, [sp, #36] ++ add r3, r3, r9 ++ ldr r2, [r3, #16] ++ cmp r1, r2 ++ bne .L3592 ++ ldr r1, [r3, #8] ++ ldr r3, [r4, #-1452] ++ cmp r1, r3 ++ bne .L3593 ++ ldr r3, [sp, #60] ++ mov r0, r8 ++ ldr r2, [sp, #64] ++ add r1, r1, r3 ++.L3620: ++ bl ftl_memcpy ++.L3593: ++ ldr r3, [r4, #-1500] ++ ldr r2, [r3, r9] ++ add r1, r3, r9 ++ cmn r2, #1 ++ ldreq r3, [r4, #1276] ++ moveq r10, r2 ++ addeq r3, r3, #1 ++ streq r3, [r4, #1276] ++ ldr r3, [r1, #12] ++ ldr r2, [r1, #16] ++ ldr r3, [r3, #8] ++ cmp r2, r3 ++ beq .L3595 ++ ldr r3, [r4, #1276] ++ add r3, r3, #1 ++ str r3, [r4, #1276] ++ ldr r2, [r1, #8] ++ ldr r3, [r1, #12] ++ ldr r0, [r2, #4] ++ str r0, [sp, #16] ++ ldr r2, [r2] ++ ldr r0, .L3621+24 ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r2, [r1, #4] ++ ldr r3, [r3] ++ ldr r1, [r1, #16] ++ bl rk_printk ++.L3595: ++ ldr r3, [r4, #-1500] ++ add r2, r3, r9 ++ ldr r3, [r3, r9] ++ cmp r3, #256 ++ bne .L3596 ++ ldr r0, [r2, #4] ++ ubfx r0, r0, #10, #16 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++.L3596: ++ add fp, fp, #1 ++ cmp r7, fp ++ bne .L3597 ++ mov r7, #0 ++ b .L3581 ++.L3587: ++ ldr r3, [sp, #40] ++ cmp r6, r3 ++ bne .L3589 ++ ldr r3, [r4, #-1448] ++ ldr r1, [sp, #44] ++ str r3, [r9, #8] ++ ldr r3, .L3621+12 ++ ldrh r2, [r3, #-12] ++ mul r3, r2, r6 ++ sub r1, r1, r3 ++ cmp r2, r1 ++ str r1, [sp, #52] ++ bne .L3588 ++.L3619: ++ sub r3, r3, r5 ++ add r3, r8, r3, lsl #9 ++ str r3, [r9, #8] ++ b .L3588 ++.L3589: ++ ldr r3, .L3621+12 ++ ldrh r3, [r3, #-12] ++ mul r3, r6, r3 ++ b .L3619 ++.L3592: ++ ldr r1, [sp, #40] ++ cmp r1, r2 ++ bne .L3593 ++ ldr r1, [r3, #8] ++ ldr r3, [r4, #-1448] ++ cmp r1, r3 ++ bne .L3593 ++ ldr r3, .L3621+16 ++ ldr r2, [sp, #68] ++ ldrh r0, [r3] ++ ldr r3, [sp, #40] ++ mul r0, r3, r0 ++ sub r0, r0, r5 ++ add r0, r8, r0, lsl #9 ++ b .L3620 ++.L3601: ++ mvn r10, #0 ++ b .L3577 ++.L3622: ++ .align 2 ++.L3621: ++ .word .LANCHOR1 ++ .word .LANCHOR2 ++ .word .LANCHOR2-1520 ++ .word .LANCHOR2-1648 ++ .word .LANCHOR2-1660 ++ .word .LANCHOR2-1732 ++ .word .LC58 ++ .fnend ++ .size ftl_read, .-ftl_read ++ .align 2 ++ .global ftl_vendor_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_vendor_read, %function ++ftl_vendor_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ mov r0, #16 ++ b ftl_read ++ .fnend ++ .size ftl_vendor_read, .-ftl_vendor_read ++ .align 2 ++ .global ftl_sys_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_sys_read, %function ++ftl_sys_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ add r1, r0, #256 ++ mov r0, #16 ++ b ftl_read ++ .fnend ++ .size ftl_sys_read, .-ftl_sys_read ++ .align 2 ++ .global FtlInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlInit, %function ++FtlInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mvn r3, #0 ++ ldr r6, .L3642 ++ ldr r4, .L3642+4 ++ ldr r1, .L3642+8 ++ str r3, [r6, #3440] ++ mov r3, #0 ++ ldr r0, .L3642+12 ++ str r3, [r4, #1948] ++ str r3, [r4, #-1280] ++ bl rk_printk ++ sub r0, r4, #2768 ++ bl FtlConstantsInit ++ bl FtlMemInit ++ bl FtlVariablesInit ++ sub r3, r4, #1728 ++ ldrh r0, [r3] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cmp r0, #0 ++ beq .L3626 ++ ldr r1, .L3642+16 ++ ldr r0, .L3642+20 ++.L3641: ++ bl rk_printk ++.L3627: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L3626: ++ bl FtlSysBlkInit ++ subs r5, r0, #0 ++ ldrne r1, .L3642+16 ++ ldrne r0, .L3642+24 ++ bne .L3641 ++.L3628: ++ mov r1, #1 ++ str r1, [r6, #3440] ++ bl ftl_do_gc ++ add r3, r4, #880 ++ ldrh r7, [r3] ++ mov r6, r3 ++ cmp r7, #15 ++ bhi .L3629 ++ add r8, r3, #276 ++ sub r4, r4, #1536 ++.L3632: ++ ldrh r3, [r8] ++ movw r2, #65535 ++ cmp r3, r2 ++ bne .L3630 ++ ldrh r2, [r4] ++ cmp r2, r3 ++ bne .L3630 ++ and r0, r5, #63 ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ bl FtlGcRefreshBlock ++.L3630: ++ mov r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ mov r1, #1 ++ mov r0, #0 ++ bl ftl_do_gc ++ ldrh r2, [r6] ++ add r3, r7, #2 ++ cmp r2, r3 ++ bhi .L3627 ++ add r5, r5, #1 ++ cmp r5, #4096 ++ bne .L3632 ++ b .L3627 ++.L3629: ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3627 ++ mov r4, #128 ++.L3634: ++ mov r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ subs r4, r4, #1 ++ bne .L3634 ++ b .L3627 ++.L3643: ++ .align 2 ++.L3642: ++ .word .LANCHOR1 ++ .word .LANCHOR2 ++ .word .LC145 ++ .word .LC49 ++ .word .LANCHOR3+224 ++ .word .LC163 ++ .word .LC164 ++ .fnend ++ .size FtlInit, .-FtlInit ++ .align 2 ++ .global ftl_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_write, %function ++ftl_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov fp, r3 ++ ldr r4, .L3712 ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r3, [r4, #-1280] ++ cmp r3, #0 ++ bne .L3685 ++ mov r9, r2 ++ ldr r2, .L3712+4 ++ ldr r2, [r2, #3440] ++ cmp r2, #1 ++ movne r0, r3 ++ bne .L3644 ++ cmp r0, #16 ++ mov r7, r1 ++ bne .L3646 ++ mov r2, fp ++ mov r1, r9 ++ add r0, r7, #256 ++ bl FtlVendorPartWrite ++.L3644: ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3646: ++ ldr r3, [r4, #-2736] ++ cmp r9, r3 ++ cmpls r1, r3 ++ bcs .L3688 ++ add r6, r1, r9 ++ cmp r3, r6 ++ bcc .L3688 ++ mov r3, #2048 ++ mov r0, r7 ++ str r3, [r4, #1952] ++ sub r3, r4, #1648 ++ ldrh r5, [r3, #-12] ++ mov r1, r5 ++ bl __aeabi_uidiv ++ mov r1, r5 ++ str r0, [sp] ++ sub r0, r6, #1 ++ bl __aeabi_uidiv ++ ldr r2, [sp] ++ cmp r9, r5, lsl #1 ++ ldr r3, [r4, #-1600] ++ str r0, [sp, #24] ++ sub r6, r0, r2 ++ ldr r2, [r4, #-1512] ++ add r8, r6, #1 ++ add r3, r3, r8 ++ str r3, [r4, #-1600] ++ ldr r3, [r4, #1716] ++ add r3, r3, r9 ++ str r3, [r4, #1716] ++ movcs r3, #1 ++ movcc r3, #0 ++ cmp r2, #0 ++ str r3, [sp, #16] ++ beq .L3689 ++ mov r3, #36 ++ mul r3, r3, r2 ++ ldr r2, [r4, #-1480] ++ sub r3, r3, #36 ++ add r10, r2, r3 ++ ldr r3, [sp] ++ ldr r2, [r10, #16] ++ cmp r3, r2 ++ strne fp, [sp, #12] ++ bne .L3649 ++ ldr r2, [r4, #-1592] ++ mov r1, r5 ++ mov r0, r7 ++ add r2, r2, #1 ++ str r2, [r4, #-1592] ++ ldr r2, [r4, #1956] ++ add r2, r2, #1 ++ str r2, [r4, #1956] ++ bl __aeabi_uidivmod ++ sub r5, r5, r1 ++ ldr r3, [r10, #8] ++ cmp r9, r5 ++ mov r0, r1 ++ movcc r5, r9 ++ mov r1, fp ++ lsl r8, r5, #9 ++ add r0, r3, r0, lsl #9 ++ mov r2, r8 ++ bl ftl_memcpy ++ cmp r6, #0 ++ bne .L3650 ++ ldr r3, [r4, #1956] ++ cmp r3, #2 ++ bgt .L3650 ++.L3685: ++ mov r0, #0 ++ b .L3644 ++.L3650: ++ add r3, fp, r8 ++ sub r9, r9, r5 ++ str r3, [sp, #12] ++ add r7, r7, r5 ++ ldr r3, [sp] ++ mov r8, r6 ++ add r3, r3, #1 ++ str r3, [sp] ++.L3649: ++ mov r3, #0 ++ str r3, [r4, #1956] ++.L3648: ++ ldr r1, [sp, #24] ++ ldr r0, [sp] ++ bl FtlCacheMetchLpa ++ cmp r0, #0 ++ beq .L3651 ++ bl FtlCacheWriteBack ++.L3651: ++ ldr r5, .L3712+8 ++ ldr r6, [sp] ++ sub r10, r5, #884 ++ str r5, [r4, #1940] ++ sub r3, r10, #1648 ++ str r3, [sp, #4] ++.L3652: ++ cmp r8, #0 ++ bne .L3680 ++ ldr r3, [sp, #24] ++ mov r0, r8 ++ ldr r2, [sp] ++ sub r1, r3, r2 ++ bl ftl_do_gc ++ ldr r2, .L3712+12 ++ ldrh r3, [r2] ++ mov r6, r2 ++ cmp r3, #5 ++ bls .L3681 ++ cmp r3, #31 ++ bhi .L3685 ++ ldr r3, .L3712+16 ++ ldrb r3, [r3, #36] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3685 ++.L3681: ++ ldr r5, .L3712 ++ ldr r7, .L3712+20 ++ sub r4, r5, #1520 ++.L3684: ++ ldrh r2, [r7] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3683 ++ ldr r3, .L3712+24 ++ ldrh r3, [r3] ++ cmp r3, r2 ++ bne .L3683 ++ ldrh r2, [r4, #-14] ++ cmp r2, r3 ++ bne .L3683 ++ and r0, r8, #7 ++ bl List_get_gc_head_node ++ uxth r0, r0 ++ bl FtlGcRefreshBlock ++.L3683: ++ mov r1, #1 ++ mov r3, #128 ++ mov r0, r1 ++ strh r3, [r4, #-6] @ movhi ++ strh r3, [r4, #-8] @ movhi ++ bl ftl_do_gc ++ mov r1, #1 ++ mov r0, #0 ++ bl ftl_do_gc ++ ldr r3, [r5, #-1280] ++ cmp r3, #0 ++ bne .L3685 ++ ldrh r3, [r6] ++ cmp r3, #2 ++ bhi .L3685 ++ add r8, r8, #1 ++ cmp r8, #256 ++ bne .L3684 ++ b .L3685 ++.L3689: ++ str fp, [sp, #12] ++ b .L3648 ++.L3680: ++ ldrh r1, [r5, #4] ++ cmp r1, #0 ++ bne .L3653 ++ ldr r2, .L3712+8 ++ ldr r4, .L3712+4 ++ cmp r5, r2 ++ bne .L3654 ++ add r0, r5, #48 ++ ldrh fp, [r0, #4] ++ cmp fp, #0 ++ bne .L3655 ++ bl allocate_new_data_superblock ++ str fp, [r4, #3448] ++.L3655: ++ ldr r0, .L3712+8 ++ bl allocate_new_data_superblock ++ ldr r5, .L3712+8 ++ ldr r2, [r4, #3448] ++ add r0, r5, #48 ++ cmp r2, #0 ++ movne r5, r0 ++.L3656: ++ ldrh r2, [r5, #4] ++ cmp r2, #0 ++ bne .L3657 ++ mov r0, r5 ++ bl allocate_new_data_superblock ++.L3657: ++ str r5, [r10, #1940] ++.L3653: ++ ldr r1, [r10, #-1512] ++ ldr r2, [r10, #-1516] ++ sub r2, r2, r1 ++ ldrh r1, [r5, #4] ++ cmp r2, r8 ++ movcs r2, r8 ++ cmp r1, r2 ++ movcc r3, r1 ++ movcs r3, r2 ++ str r3, [sp, #36] ++ mov r3, #0 ++.L3710: ++ str r3, [sp, #20] ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #36] ++ cmp r3, r2 ++ bne .L3676 ++.L3659: ++ ldr r3, [sp, #20] ++ ldr r2, [r10, #-1512] ++ ldr r1, [r10, #-1516] ++ sub r8, r8, r3 ++ ldr r3, [sp, #16] ++ cmp r2, r1 ++ orrcs r3, r3, #1 ++ cmp r3, #0 ++ bne .L3677 ++ ldrh r2, [r5, #4] ++ cmp r2, #0 ++ beq .L3677 ++.L3679: ++ mov r3, #0 ++ str r3, [sp, #16] ++ b .L3652 ++.L3654: ++ str r1, [r4, #3448] ++ ldrh r1, [r2, #4] ++ cmp r1, #0 ++ movne r5, r2 ++ bne .L3657 ++ mov r0, r5 ++ bl allocate_new_data_superblock ++ b .L3656 ++.L3676: ++ ldrh r2, [r5, #4] ++ cmp r2, #0 ++ beq .L3659 ++ ldr r3, [sp, #24] ++ sub r4, r3, r6 ++ ldr r3, [sp, #16] ++ clz r4, r4 ++ lsr r4, r4, #5 ++ and r2, r4, r3 ++ ldr r3, [sp, #20] ++ cmp r3, #0 ++ moveq r2, #0 ++ andne r2, r2, #1 ++ cmp r2, #0 ++ beq .L3660 ++ ldr r2, .L3712+28 ++ ldrh r1, [r2] ++ add r2, r7, r9 ++ mls r2, r1, r6, r2 ++ cmp r1, r2 ++ bne .L3659 ++.L3660: ++ mov r2, #0 ++ add r1, sp, #40 ++ mov r0, r6 ++ mov fp, #36 ++ bl log2phys ++ mov r0, r5 ++ bl get_new_active_ppa ++ ldr r1, [r10, #-1512] ++ ldr ip, [r10, #-1480] ++ ldr r3, [sp, #4] ++ mla ip, fp, r1, ip ++ ldrh r2, [r3, #-6] ++ str r0, [ip, #4] ++ mul r0, r2, r1 ++ str r6, [ip, #16] ++ bic r3, r0, #3 ++ str r3, [sp, #28] ++ ldr r0, [sp, #28] ++ ldr r3, [r10, #-1428] ++ str r3, [sp, #32] ++ add r3, r3, r0 ++ str r3, [sp, #8] ++ str r3, [ip, #12] ++ ldr r3, [sp, #4] ++ ldrh r0, [r3, #-8] ++ mul r1, r1, r0 ++ ldr r0, [r10, #-1456] ++ bic r1, r1, #3 ++ add r1, r0, r1 ++ ldr r0, [sp, #8] ++ str r1, [ip, #8] ++ mov r1, #0 ++ bl ftl_memset ++ ldr r3, [sp] ++ cmp r3, r6 ++ orreq r4, r4, #1 ++ cmp r4, #0 ++ beq .L3661 ++ cmp r3, r6 ++ bne .L3662 ++ ldr r3, [sp, #4] ++ mov r0, r7 ++ ldrh r4, [r3, #-12] ++ mov r1, r4 ++ bl __aeabi_uidivmod ++ sub r4, r4, r1 ++ mov fp, r1 ++ cmp r4, r9 ++ movcs r4, r9 ++.L3663: ++ ldr r3, [sp, #4] ++ ldrh r2, [r3, #-12] ++ cmp r2, r4 ++ bne .L3664 ++ ldr r3, [sp] ++ cmp r3, r6 ++ mulne r1, r4, r6 ++ ldrne r3, [sp, #12] ++ ldreq r1, [sp, #12] ++ subne r1, r1, r7 ++ addne r1, r3, r1, lsl #9 ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ beq .L3666 ++ ldr r2, [r10, #-1512] ++ mov ip, #36 ++ ldr r0, [r10, #-1480] ++ mla r2, ip, r2, r0 ++ str r1, [r2, #8] ++.L3667: ++ ldr r2, .L3712+32 ++ ldr r3, [sp, #32] ++ ldr r1, [sp, #28] ++ strh r2, [r3, r1] @ movhi ++ ldr r3, [sp, #8] ++ ldr r2, [r10, #-1608] ++ str r2, [r3, #4] ++ add r2, r2, #1 ++ cmn r2, #1 ++ ldr r3, [sp, #8] ++ moveq r2, #0 ++ str r2, [r10, #-1608] ++ ldr r2, [sp, #40] ++ str r6, [r3, #8] ++ add r6, r6, #1 ++ str r2, [r3, #12] ++ ldrh r2, [r5] ++ strh r2, [r3, #2] @ movhi ++ ldr r2, [r10, #-1512] ++ ldr r3, [sp, #20] ++ add r2, r2, #1 ++ str r2, [r10, #-1512] ++ add r3, r3, #1 ++ b .L3710 ++.L3662: ++ ldr r3, [sp, #4] ++ add r4, r7, r9 ++ mov fp, #0 ++ ldrh r2, [r3, #-12] ++ smulbb r2, r2, r6 ++ sub r4, r4, r2 ++ uxth r4, r4 ++ b .L3663 ++.L3666: ++ ldr r2, [r10, #-1480] ++ mov ip, #36 ++ ldr r0, [r10, #-1512] ++ ldr r3, [sp, #4] ++ mla r0, ip, r0, r2 ++ ldrh r2, [r3, #-8] ++.L3711: ++ ldr r0, [r0, #8] ++ b .L3708 ++.L3664: ++ ldr r2, [sp, #40] ++ cmn r2, #1 ++ beq .L3668 ++ ldr r1, [r10, #-1480] ++ mov r0, #36 ++ str r2, [sp, #48] ++ ldr r2, [r10, #-1512] ++ str r6, [sp, #60] ++ mla r2, r0, r2, r1 ++ add r0, sp, #44 ++ ldr r1, [r2, #8] ++ ldr r2, [r2, #12] ++ str r1, [sp, #52] ++ mov r1, #1 ++ str r2, [sp, #56] ++ mov r2, #0 ++ bl FlashReadPages ++ ldr r2, [sp, #44] ++ cmn r2, #1 ++ ldreq r2, [r10, #1276] ++ addeq r2, r2, #1 ++ streq r2, [r10, #1276] ++ beq .L3671 ++ ldr r3, [sp, #8] ++ ldr r2, [r3, #8] ++ cmp r6, r2 ++ beq .L3671 ++ ldr r2, [r10, #1276] ++ ldr r0, .L3712+36 ++ add r2, r2, #1 ++ str r2, [r10, #1276] ++ mov r2, r6 ++ ldr r1, [r3, #8] ++ bl rk_printk ++.L3671: ++ ldr r3, [sp] ++ lsl r2, r4, #9 ++ cmp r3, r6 ++ bne .L3672 ++ ldr r0, [r10, #-1480] ++ mov ip, #36 ++ ldr r1, [r10, #-1512] ++ mla r1, ip, r1, r0 ++ ldr r0, [r1, #8] ++ ldr r1, [sp, #12] ++ add r0, r0, fp, lsl #9 ++.L3708: ++ bl ftl_memcpy ++ b .L3667 ++.L3668: ++ ldr r2, [r10, #-1480] ++ mov r1, #36 ++ ldr r0, [r10, #-1512] ++ ldr r3, [sp, #4] ++ mla r0, r1, r0, r2 ++ ldrh r2, [r3, #-8] ++ mov r1, #0 ++ ldr r0, [r0, #8] ++ bl ftl_memset ++ b .L3671 ++.L3672: ++ ldr r1, .L3712+28 ++ mov lr, #36 ++ ldr r0, [r10, #-1512] ++ ldr ip, [r10, #-1480] ++ ldrh r1, [r1] ++ ldr r3, [sp, #12] ++ mla r0, lr, r0, ip ++ mul r1, r6, r1 ++ sub r1, r1, r7 ++ add r1, r3, r1, lsl #9 ++ b .L3711 ++.L3661: ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ beq .L3673 ++ ldr r2, [r10, #-1512] ++ ldr r1, [r10, #-1480] ++ ldr r3, [sp, #4] ++ mla fp, fp, r2, r1 ++ ldrh r2, [r3, #-12] ++ ldr r3, [sp, #12] ++ mul r2, r6, r2 ++ sub r2, r2, r7 ++ add r2, r3, r2, lsl #9 ++ str r2, [fp, #8] ++ b .L3667 ++.L3673: ++ ldr r3, [sp, #4] ++ ldr r2, [r10, #-1512] ++ ldr r0, [r10, #-1480] ++ ldrh r1, [r3, #-12] ++ mla fp, fp, r2, r0 ++ ldrh r2, [r3, #-8] ++ ldr r3, [sp, #12] ++ mul r1, r6, r1 ++ ldr r0, [fp, #8] ++ sub r1, r1, r7 ++ add r1, r3, r1, lsl #9 ++ b .L3708 ++.L3677: ++ bl FtlCacheWriteBack ++ cmp r8, #1 ++ mov r2, #0 ++ str r2, [r10, #-1512] ++ bhi .L3652 ++ b .L3679 ++.L3688: ++ mvn r0, #0 ++ b .L3644 ++.L3713: ++ .align 2 ++.L3712: ++ .word .LANCHOR2 ++ .word .LANCHOR1 ++ .word .LANCHOR2+884 ++ .word .LANCHOR2+880 ++ .word .LANCHOR0 ++ .word .LANCHOR2+1156 ++ .word .LANCHOR2-1536 ++ .word .LANCHOR2-1660 ++ .word -3947 ++ .word .LC165 ++ .fnend ++ .size ftl_write, .-ftl_write ++ .align 2 ++ .global ftl_vendor_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_vendor_write, %function ++ftl_vendor_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ mov r0, #16 ++ b ftl_write ++ .fnend ++ .size ftl_vendor_write, .-ftl_vendor_write ++ .align 2 ++ .global ftl_sys_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_sys_write, %function ++ftl_sys_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ add r1, r0, #256 ++ mov r0, #16 ++ b ftl_write ++ .fnend ++ .size ftl_sys_write, .-ftl_sys_write ++ .align 2 ++ .global ftl_fix_nand_power_lost_error ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_fix_nand_power_lost_error, %function ++ftl_fix_nand_power_lost_error: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #48 ++ sub sp, sp, #48 ++ ldr r4, .L3731 ++ ldrb r3, [r4, #-2740] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3716 ++ movw r3, #1794 ++ add r8, r4, #884 ++ ldrh r6, [r4, r3] ++ add r5, r4, #932 ++ ldr r3, [r4, #-1404] ++ ldr r0, .L3731+4 ++ mov r1, r6 ++ lsl r7, r6, #1 ++ ldrh r2, [r3, r7] ++ bl rk_printk ++ ldrh r0, [r8] ++ bl FtlGcRefreshOpenBlock ++ ldrh r0, [r5] ++ bl FtlGcRefreshOpenBlock ++ mov r0, r8 ++ bl allocate_new_data_superblock ++ mov r0, r5 ++ movw r5, #4097 ++ bl allocate_new_data_superblock ++.L3718: ++ subs r5, r5, #1 ++ beq .L3722 ++ mov r1, #1 ++ mov r0, r1 ++ bl ftl_do_gc ++ ldr r3, [r4, #-1404] ++ ldrh r3, [r3, r7] ++ cmp r3, #0 ++ bne .L3718 ++.L3722: ++ ldr r3, [r4, #-1404] ++ mov r1, r6 ++ ldr r0, .L3731+4 ++ ldrh r2, [r3, r7] ++ bl rk_printk ++ ldr r3, [r4, #-1404] ++ ldrh r5, [r3, r7] ++ cmp r5, #0 ++ bne .L3720 ++ add r0, sp, #48 ++ movw r9, #65535 ++ strh r6, [r0, #-48]! @ movhi ++ mov r10, #36 ++ bl make_superblock ++ ldr r3, .L3731+8 ++ add r0, sp, #14 ++ ldr r8, [r4, #-1488] ++ mov r2, r5 ++ mov ip, r5 ++ ldrh lr, [r3, #-4] ++.L3723: ++ uxth r3, r2 ++ cmp lr, r3 ++ bhi .L3725 ++ ldr r3, [r4, #-1404] ++ mov r1, r6 ++ ldr r0, .L3731+12 ++ ldrh r2, [r3, r7] ++ bl rk_printk ++ mov r2, r5 ++ mov r1, #0 ++ ldr r0, [r4, #-1488] ++ bl FlashEraseBlocks ++ mov r2, r5 ++ mov r1, #1 ++ ldr r0, [r4, #-1488] ++ bl FlashEraseBlocks ++.L3720: ++ mvn r2, #0 ++ movw r3, #1794 ++ strh r2, [r4, r3] @ movhi ++.L3716: ++ add sp, sp, #48 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3725: ++ ldrh r3, [r0, #2]! ++ add r2, r2, #1 ++ cmp r3, r9 ++ mlane r1, r10, r5, r8 ++ lslne r3, r3, #10 ++ addne r5, r5, #1 ++ uxthne r5, r5 ++ stmibne r1, {r3, ip} ++ strne ip, [r1, #12] ++ b .L3723 ++.L3732: ++ .align 2 ++.L3731: ++ .word .LANCHOR2 ++ .word .LC166 ++ .word .LANCHOR2-1728 ++ .word .LC167 ++ .fnend ++ .size ftl_fix_nand_power_lost_error, .-ftl_fix_nand_power_lost_error ++ .global gc_ink_free_return_value ++ .global check_valid_page_count_table ++ .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_3 ++ .global g_gc_next_blk_2 ++ .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 ++ .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 idb_flash_slc_mode ++ .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_nand_ecc_en ++ .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 gFlashCurMode ++ .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 ++ .set .LANCHOR3,. + 0 ++ .type samsung_14nm_slc_rr, %object ++ .size samsung_14nm_slc_rr, 26 ++samsung_14nm_slc_rr: ++ .byte 0 ++ .byte 10 ++ .byte -10 ++ .byte 20 ++ .byte -20 ++ .byte 30 ++ .byte -30 ++ .byte 40 ++ .byte -40 ++ .byte 50 ++ .byte -50 ++ .byte 60 ++ .byte -60 ++ .byte -70 ++ .byte -80 ++ .byte -90 ++ .byte -100 ++ .byte -110 ++ .byte -120 ++ .byte -9 ++ .byte 70 ++ .byte 80 ++ .byte 90 ++ .byte -125 ++ .byte -115 ++ .byte 100 ++ .type samsung_14nm_mlc_rr, %object ++ .size samsung_14nm_mlc_rr, 104 ++samsung_14nm_mlc_rr: ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -4 ++ .byte 3 ++ .byte -4 ++ .byte -6 ++ .byte 6 ++ .byte 0 ++ .byte 6 ++ .byte -10 ++ .byte -10 ++ .byte 4 ++ .byte -10 ++ .byte 16 ++ .byte 12 ++ .byte -4 ++ .byte 12 ++ .byte 8 ++ .byte -16 ++ .byte 10 ++ .byte -16 ++ .byte 24 ++ .byte 18 ++ .byte -14 ++ .byte 18 ++ .byte -4 ++ .byte -22 ++ .byte -16 ++ .byte -22 ++ .byte -8 ++ .byte 24 ++ .byte -9 ++ .byte 24 ++ .byte 8 ++ .byte -28 ++ .byte -4 ++ .byte -28 ++ .byte 16 ++ .byte 30 ++ .byte 10 ++ .byte 30 ++ .byte 10 ++ .byte -34 ++ .byte 6 ++ .byte -34 ++ .byte 0 ++ .byte 36 ++ .byte -8 ++ .byte 36 ++ .byte -8 ++ .byte -40 ++ .byte -2 ++ .byte -40 ++ .byte -20 ++ .byte -46 ++ .byte -4 ++ .byte -46 ++ .byte -30 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte -3 ++ .byte -2 ++ .byte -4 ++ .byte -2 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -4 ++ .byte -10 ++ .byte -6 ++ .byte -8 ++ .byte -6 ++ .byte -14 ++ .byte -9 ++ .byte -8 ++ .byte -9 ++ .byte -18 ++ .byte -52 ++ .byte 22 ++ .byte -52 ++ .byte 10 ++ .byte 42 ++ .byte 4 ++ .byte 42 ++ .byte 4 ++ .byte 48 ++ .byte -9 ++ .byte 48 ++ .byte 4 ++ .byte -58 ++ .byte 12 ++ .byte -58 ++ .byte 0 ++ .byte -64 ++ .byte -24 ++ .byte -64 ++ .byte -6 ++ .byte 9 ++ .byte 18 ++ .byte 9 ++ .byte 8 ++ .type __func__.23800, %object ++ .size __func__.23800, 11 ++__func__.23800: ++ .ascii "FtlMemInit\000" ++ .type __func__.24547, %object ++ .size __func__.24547, 12 ++__func__.24547: ++ .ascii "FtlCheckVpc\000" ++ .type __func__.24579, %object ++ .size __func__.24579, 17 ++__func__.24579: ++ .ascii "FtlDumpBlockInfo\000" ++ .type __func__.24598, %object ++ .size __func__.24598, 16 ++__func__.24598: ++ .ascii "FtlScanAllBlock\000" ++ .type __func__.24866, %object ++ .size __func__.24866, 17 ++__func__.24866: ++ .ascii "ftl_scan_all_ppa\000" ++ .type __func__.24846, %object ++ .size __func__.24846, 21 ++__func__.24846: ++ .ascii "FtlVpcCheckAndModify\000" ++ .type __func__.23873, %object ++ .size __func__.23873, 8 ++__func__.23873: ++ .ascii "FtlInit\000" ++ .data ++ .align 2 ++ .set .LANCHOR1,. + 0 ++ .type random_seed, %object ++ .size random_seed, 256 ++random_seed: ++ .short 22378 ++ .short 1512 ++ .short 25245 ++ .short 17827 ++ .short 25756 ++ .short 19440 ++ .short 9026 ++ .short 10030 ++ .short 29528 ++ .short 20467 ++ .short 29676 ++ .short 24432 ++ .short 31328 ++ .short 6872 ++ .short 13426 ++ .short 13842 ++ .short 8783 ++ .short 1108 ++ .short 782 ++ .short 28837 ++ .short 30729 ++ .short 9505 ++ .short 18676 ++ .short 23085 ++ .short 18730 ++ .short 1085 ++ .short 32609 ++ .short 14697 ++ .short 20858 ++ .short 15170 ++ .short 30365 ++ .short 1607 ++ .short 32298 ++ .short 4995 ++ .short 18905 ++ .short 1976 ++ .short 9592 ++ .short 20204 ++ .short 17443 ++ .short 13615 ++ .short 23330 ++ .short 29369 ++ .short 13947 ++ .short 9398 ++ .short 32398 ++ .short 8984 ++ .short 27600 ++ .short 21785 ++ .short 6019 ++ .short 6311 ++ .short 31598 ++ .short 30210 ++ .short 19327 ++ .short 13896 ++ .short 11347 ++ .short 27545 ++ .short 3107 ++ .short 26575 ++ .short 32270 ++ .short 19852 ++ .short 20601 ++ .short 8349 ++ .short 9290 ++ .short 29819 ++ .short 13579 ++ .short 3661 ++ .short 28676 ++ .short 27331 ++ .short 32574 ++ .short 8693 ++ .short 31253 ++ .short 9081 ++ .short 5399 ++ .short 6842 ++ .short 20087 ++ .short 5537 ++ .short 1274 ++ .short 11617 ++ .short 9530 ++ .short 4866 ++ .short 8035 ++ .short 23219 ++ .short 1178 ++ .short 23272 ++ .short 7383 ++ .short 18944 ++ .short 12488 ++ .short 12871 ++ .short 29340 ++ .short 20532 ++ .short 11022 ++ .short 22514 ++ .short 228 ++ .short 22363 ++ .short 24978 ++ .short 14584 ++ .short 12138 ++ .short 3092 ++ .short 17916 ++ .short 16863 ++ .short 14554 ++ .short 31457 ++ .short 29474 ++ .short 25311 ++ .short 24121 ++ .short 3684 ++ .short 28037 ++ .short 22865 ++ .short 22839 ++ .short 25217 ++ .short 13217 ++ .short 27186 ++ .short 14938 ++ .short 11180 ++ .short 29754 ++ .short 24180 ++ .short 15150 ++ .short 32455 ++ .short 20434 ++ .short 23848 ++ .short 29983 ++ .short 16120 ++ .short 14769 ++ .short 20041 ++ .short 29803 ++ .short 28406 ++ .short 17598 ++ .short 28087 ++ .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 ++ .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 ++ .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 gNandParaInfo, %object ++ .size gNandParaInfo, 32 ++gNandParaInfo: ++ .byte 0 ++ .byte 0 ++ .space 5 ++ .byte 0 ++ .byte 1 ++ .byte 8 ++ .short 128 ++ .byte 2 ++ .byte 1 ++ .short 2048 ++ .short 0 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .type NandFlashParaTbl, %object ++ .size NandFlashParaTbl, 2752 ++NandFlashParaTbl: ++ .byte 6 ++ .byte 44 ++ .byte 100 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 68 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1064 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 104 ++ .byte 4 ++ .byte 74 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -120 ++ .byte 4 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -88 ++ .byte 5 ++ .byte -53 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 104 ++ .byte 4 ++ .byte 70 ++ .byte -119 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 72 ++ .byte 4 ++ .byte 74 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 84 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -41 ++ .byte -108 ++ .byte 62 ++ .byte -124 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 4096 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 72 ++ .byte 4 ++ .byte 70 ++ .byte -123 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -120 ++ .byte 5 ++ .byte -58 ++ .byte -119 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte 104 ++ .byte 0 ++ .byte 39 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 1 ++ .byte 2 ++ .short 2048 ++ .short 287 ++ .byte 0 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 86 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 24 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 700 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -124 ++ .byte -59 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -43 ++ .byte -47 ++ .byte -90 ++ .byte 104 ++ .byte 0 ++ .byte 4 ++ .byte 2 ++ .byte 8 ++ .short 64 ++ .byte 1 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 0 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -36 ++ .byte -112 ++ .byte -90 ++ .byte 84 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 8 ++ .short 64 ++ .byte 1 ++ .byte 2 ++ .short 1024 ++ .short 279 ++ .byte 0 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 84 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 68 ++ .byte 50 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1048 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1044 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte -60 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 44 ++ .byte -92 ++ .byte 100 ++ .byte 50 ++ .byte -86 ++ .byte 4 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 1024 ++ .byte 2 ++ .byte 1 ++ .short 2192 ++ .short 1479 ++ .byte 10 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -46 ++ .byte 4 ++ .byte 67 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 473 ++ .byte 1 ++ .byte 1 ++ .byte 24 ++ .byte 32 ++ .byte 4 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -38 ++ .byte 116 ++ .byte -61 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 473 ++ .byte 1 ++ .byte 2 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -111 ++ .byte 96 ++ .byte 68 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1046 ++ .short 473 ++ .byte 1 ++ .byte 3 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -38 ++ .byte 116 ++ .byte -60 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2090 ++ .short 473 ++ .byte 1 ++ .byte 4 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -21 ++ .byte 116 ++ .byte 68 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 473 ++ .byte 1 ++ .byte 7 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -43 ++ .byte -108 ++ .byte -38 ++ .byte 116 ++ .byte -60 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 530 ++ .short 473 ++ .byte 1 ++ .byte 3 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -102 ++ .byte 116 ++ .byte 66 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 281 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 4 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte 20 ++ .byte -89 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1060 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte 20 ++ .byte -98 ++ .byte 52 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1056 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -89 ++ .byte 66 ++ .byte 72 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1060 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte 20 ++ .byte -85 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1056 ++ .short 473 ++ .byte 2 ++ .byte 6 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte 58 ++ .byte 20 ++ .byte -85 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2092 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte -43 ++ .byte -108 ++ .byte -102 ++ .byte 116 ++ .byte 66 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 273 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -83 ++ .byte 58 ++ .byte 20 ++ .byte 3 ++ .byte 8 ++ .byte 80 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 388 ++ .byte 2 ++ .byte 2 ++ .short 1362 ++ .short 473 ++ .byte 9 ++ .byte 8 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 100 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte -124 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 104 ++ .byte 36 ++ .byte 74 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 104 ++ .byte 4 ++ .byte 74 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -41 ++ .byte -108 ++ .byte 62 ++ .byte -124 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte 104 ++ .byte 4 ++ .byte 70 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 8 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte -119 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -95 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte -119 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 59 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 192 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 279 ++ .byte 12 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 1473 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte 58 ++ .byte -123 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 1 ++ .byte 2 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 1505 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -43 ++ .byte -124 ++ .byte 50 ++ .byte 114 ++ .byte 86 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 1 ++ .short 2056 ++ .short 1473 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -108 ++ .byte 50 ++ .byte 118 ++ .byte 86 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2058 ++ .short 1489 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -126 ++ .byte 118 ++ .byte 86 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2062 ++ .short 1489 ++ .byte 1 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 80 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 1497 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte 58 ++ .byte -107 ++ .byte -109 ++ .byte 122 ++ .byte 80 ++ .byte 1 ++ .byte 2 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 1497 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -108 ++ .byte 50 ++ .byte 118 ++ .byte 85 ++ .byte 1 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2050 ++ .short 401 ++ .byte 2 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 1497 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 80 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte 58 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2106 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 81 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1056 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -47 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 1497 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 1497 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -92 ++ .byte -126 ++ .byte 118 ++ .byte 86 ++ .byte 8 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2082 ++ .short 473 ++ .byte 1 ++ .byte 65 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 80 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 1497 ++ .byte 2 ++ .byte 67 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 80 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 1473 ++ .byte 2 ++ .byte 67 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -92 ++ .byte -126 ++ .byte 118 ++ .byte -41 ++ .byte 8 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2090 ++ .short 1241 ++ .byte 1 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 1473 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte 58 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2106 ++ .short 473 ++ .byte 2 ++ .byte 68 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 81 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 473 ++ .byte 2 ++ .byte 68 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte 58 ++ .byte -92 ++ .byte -109 ++ .byte 122 ++ .byte 80 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2138 ++ .short 1497 ++ .byte 2 ++ .byte 0 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -126 ++ .byte 118 ++ .byte 86 ++ .byte 8 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2062 ++ .short 473 ++ .byte 1 ++ .byte 0 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte 69 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -41 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 1497 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 5 ++ .byte -20 ++ .byte -41 ++ .byte -108 ++ .byte 126 ++ .byte 100 ++ .byte 68 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 473 ++ .byte 2 ++ .byte 49 ++ .byte 60 ++ .byte 36 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -43 ++ .byte 126 ++ .byte 104 ++ .byte 68 ++ .byte 0 ++ .byte 2 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2048 ++ .short 505 ++ .byte 2 ++ .byte 49 ++ .byte 60 ++ .byte 36 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -41 ++ .byte -108 ++ .byte 122 ++ .byte 84 ++ .byte 67 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2076 ++ .short 409 ++ .byte 2 ++ .byte 0 ++ .byte 40 ++ .byte 36 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -43 ++ .byte 122 ++ .byte 88 ++ .byte 67 ++ .byte 0 ++ .byte 2 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2076 ++ .short 441 ++ .byte 2 ++ .byte 0 ++ .byte 40 ++ .byte 36 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -43 ++ .byte -108 ++ .byte 118 ++ .byte 84 ++ .byte 67 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 1038 ++ .short 281 ++ .byte 2 ++ .byte 0 ++ .byte 24 ++ .byte 36 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -41 ++ .byte 20 ++ .byte 118 ++ .byte 84 ++ .byte -62 ++ .byte 0 ++ .byte 1 ++ .byte 16 ++ .short 128 ++ .byte 2 ++ .byte 2 ++ .short 2076 ++ .short 1169 ++ .byte 2 ++ .byte 0 ++ .byte 24 ++ .byte 40 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -108 ++ .byte -61 ++ .byte -92 ++ .byte -54 ++ .byte 0 ++ .byte 1 ++ .byte 32 ++ .short 792 ++ .byte 2 ++ .byte 1 ++ .short 688 ++ .short 1217 ++ .byte 11 ++ .byte 50 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .space 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 ++ .space 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 ++ .space 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 ++ .space 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 ++ .space 14 ++ .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 ++ .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 ++ .short 64 ++ .byte 1 ++ .byte 1 ++ .short 1024 ++ .short 256 ++ .byte 0 ++ .byte 0 ++ .byte 16 ++ .byte 40 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .space 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: ++ .short -1 ++ .space 2 ++ .type power_up_flag, %object ++ .size power_up_flag, 4 ++power_up_flag: ++ .word 1 ++ .bss ++ .align 2 ++ .set .LANCHOR0,. + 0 ++ .set .LANCHOR2,. + 8184 ++ .type gNandChipMap, %object ++ .size gNandChipMap, 32 ++gNandChipMap: ++ .space 32 ++ .type p_blk_mode_table, %object ++ .size p_blk_mode_table, 4 ++p_blk_mode_table: ++ .space 4 ++ .type g_slc2KBNand, %object ++ .size g_slc2KBNand, 1 ++g_slc2KBNand: ++ .space 1 ++ .type gNandIDBResBlkNum, %object ++ .size gNandIDBResBlkNum, 1 ++gNandIDBResBlkNum: ++ .space 1 ++ .space 2 ++ .type gBlockPageAlignSize, %object ++ .size gBlockPageAlignSize, 4 ++gBlockPageAlignSize: ++ .space 4 ++ .type gNandRandomizer, %object ++ .size gNandRandomizer, 1 ++gNandRandomizer: ++ .space 1 ++ .space 3 ++ .type gpNandParaInfo, %object ++ .size gpNandParaInfo, 4 ++gpNandParaInfo: ++ .space 4 ++ .type gNandOptPara, %object ++ .size gNandOptPara, 32 ++gNandOptPara: ++ .space 32 ++ .type slcPageToMlcPageTbl, %object ++ .size slcPageToMlcPageTbl, 1024 ++slcPageToMlcPageTbl: ++ .space 1024 ++ .type mlcPageToSlcPageTbl, %object ++ .size mlcPageToSlcPageTbl, 2048 ++mlcPageToSlcPageTbl: ++ .space 2048 ++ .type gNandMaxDie, %object ++ .size gNandMaxDie, 1 ++gNandMaxDie: ++ .space 1 ++ .type gNandMaxChip, %object ++ .size gNandMaxChip, 1 ++gNandMaxChip: ++ .space 1 ++ .space 2 ++ .type DieCsIndex, %object ++ .size DieCsIndex, 8 ++DieCsIndex: ++ .space 8 ++ .type DieAddrs, %object ++ .size DieAddrs, 32 ++DieAddrs: ++ .space 32 ++ .type gDieOp, %object ++ .size gDieOp, 128 ++gDieOp: ++ .space 128 ++ .type gTotleBlock, %object ++ .size gTotleBlock, 2 ++gTotleBlock: ++ .space 2 ++ .space 2 ++ .type gNandIDataBuf, %object ++ .size gNandIDataBuf, 2048 ++gNandIDataBuf: ++ .space 2048 ++ .type gpNandc, %object ++ .size gpNandc, 4 ++gpNandc: ++ .space 4 ++ .type NANDC_FMCTL, %object ++ .size NANDC_FMCTL, 4 ++NANDC_FMCTL: ++ .space 4 ++ .type NANDC_FMWAIT, %object ++ .size NANDC_FMWAIT, 4 ++NANDC_FMWAIT: ++ .space 4 ++ .type NANDC_FLCTL, %object ++ .size NANDC_FLCTL, 4 ++NANDC_FLCTL: ++ .space 4 ++ .type NANDC_BCHCTL, %object ++ .size NANDC_BCHCTL, 4 ++NANDC_BCHCTL: ++ .space 4 ++ .type NANDC_DLL_CTL_REG0, %object ++ .size NANDC_DLL_CTL_REG0, 4 ++NANDC_DLL_CTL_REG0: ++ .space 4 ++ .type NANDC_DLL_CTL_REG1, %object ++ .size NANDC_DLL_CTL_REG1, 4 ++NANDC_DLL_CTL_REG1: ++ .space 4 ++ .type NANDC_RANDMZ_CFG, %object ++ .size NANDC_RANDMZ_CFG, 4 ++NANDC_RANDMZ_CFG: ++ .space 4 ++ .type NANDC_FMWAIT_SYN, %object ++ .size NANDC_FMWAIT_SYN, 4 ++NANDC_FMWAIT_SYN: ++ .space 4 ++ .type gNandPhyInfo, %object ++ .size gNandPhyInfo, 28 ++gNandPhyInfo: ++ .space 28 ++ .type gFlashSlcMode, %object ++ .size gFlashSlcMode, 1 ++gFlashSlcMode: ++ .space 1 ++ .type gNandFlashEccBits, %object ++ .size gNandFlashEccBits, 1 ++gNandFlashEccBits: ++ .space 1 ++ .space 2 ++ .type g_MaxLbaSector, %object ++ .size g_MaxLbaSector, 4 ++g_MaxLbaSector: ++ .space 4 ++ .type FlashWaitBusyScheduleEn, %object ++ .size FlashWaitBusyScheduleEn, 4 ++FlashWaitBusyScheduleEn: ++ .space 4 ++ .type gReadRetryInfo, %object ++ .size gReadRetryInfo, 852 ++gReadRetryInfo: ++ .space 852 ++ .type read_retry_cur_offset, %object ++ .size read_retry_cur_offset, 4 ++read_retry_cur_offset: ++ .space 4 ++ .type gFlashCurMode, %object ++ .size gFlashCurMode, 1 ++gFlashCurMode: ++ .space 1 ++ .type gFlashInterfaceMode, %object ++ .size gFlashInterfaceMode, 1 ++gFlashInterfaceMode: ++ .space 1 ++ .type gMultiPageProgEn, %object ++ .size gMultiPageProgEn, 1 ++gMultiPageProgEn: ++ .space 1 ++ .space 1 ++ .type g_inkDie_check_enable, %object ++ .size g_inkDie_check_enable, 4 ++g_inkDie_check_enable: ++ .space 4 ++ .type gFlashPageBuffer0, %object ++ .size gFlashPageBuffer0, 4 ++gFlashPageBuffer0: ++ .space 4 ++ .type idb_flash_slc_mode, %object ++ .size idb_flash_slc_mode, 4 ++idb_flash_slc_mode: ++ .space 4 ++ .type gFlashToggleModeEn, %object ++ .size gFlashToggleModeEn, 1 ++gFlashToggleModeEn: ++ .space 1 ++ .space 3 ++ .type gBootDdrMode, %object ++ .size gBootDdrMode, 4 ++gBootDdrMode: ++ .space 4 ++ .type gNandcVer, %object ++ .size gNandcVer, 4 ++gNandcVer: ++ .space 4 ++ .type g_nandc_version_data, %object ++ .size g_nandc_version_data, 4 ++g_nandc_version_data: ++ .space 4 ++ .type gMasterTempBuf, %object ++ .size gMasterTempBuf, 4 ++gMasterTempBuf: ++ .space 4 ++ .type gMasterInfo, %object ++ .size gMasterInfo, 32 ++gMasterInfo: ++ .space 32 ++ .type gNandcDumpWriteEn, %object ++ .size gNandcDumpWriteEn, 4 ++gNandcDumpWriteEn: ++ .space 4 ++ .type gNandcEccBits, %object ++ .size gNandcEccBits, 4 ++gNandcEccBits: ++ .space 4 ++ .type FlashDdrTunningReadCount, %object ++ .size FlashDdrTunningReadCount, 4 ++FlashDdrTunningReadCount: ++ .space 4 ++ .type gpReadRetrial, %object ++ .size gpReadRetrial, 4 ++gpReadRetrial: ++ .space 4 ++ .type gpFlashSaveInfo, %object ++ .size gpFlashSaveInfo, 4 ++gpFlashSaveInfo: ++ .space 4 ++ .type gNandFlashInfoBlockAddr, %object ++ .size gNandFlashInfoBlockAddr, 4 ++gNandFlashInfoBlockAddr: ++ .space 4 ++ .type gNandFlashIdbBlockAddr, %object ++ .size gNandFlashIdbBlockAddr, 4 ++gNandFlashIdbBlockAddr: ++ .space 4 ++ .type gNandIDBResBlkNumSaveInFlash, %object ++ .size gNandIDBResBlkNumSaveInFlash, 1 ++gNandIDBResBlkNumSaveInFlash: ++ .space 1 ++ .type gNandFlashIDBEccBits, %object ++ .size gNandFlashIDBEccBits, 1 ++gNandFlashIDBEccBits: ++ .space 1 ++ .space 2 ++ .type gFlashPageBuffer1, %object ++ .size gFlashPageBuffer1, 4 ++gFlashPageBuffer1: ++ .space 4 ++ .type gFlashSpareBuffer, %object ++ .size gFlashSpareBuffer, 4 ++gFlashSpareBuffer: ++ .space 4 ++ .type gFlashProgCheckBuffer, %object ++ .size gFlashProgCheckBuffer, 4 ++gFlashProgCheckBuffer: ++ .space 4 ++ .type gFlashProgCheckSpareBuffer, %object ++ .size gFlashProgCheckSpareBuffer, 4 ++gFlashProgCheckSpareBuffer: ++ .space 4 ++ .type g_nand_ecc_en, %object ++ .size g_nand_ecc_en, 1 ++g_nand_ecc_en: ++ .space 1 ++ .type gMultiPageReadEn, %object ++ .size gMultiPageReadEn, 1 ++gMultiPageReadEn: ++ .space 1 ++ .type FbbtBlk, %object ++ .size FbbtBlk, 16 ++FbbtBlk: ++ .space 16 ++ .space 2 ++ .type c_ftl_nand_sys_blks_per_plane, %object ++ .size c_ftl_nand_sys_blks_per_plane, 4 ++c_ftl_nand_sys_blks_per_plane: ++ .space 4 ++ .type c_ftl_nand_planes_num, %object ++ .size c_ftl_nand_planes_num, 2 ++c_ftl_nand_planes_num: ++ .space 2 ++ .space 2 ++ .type c_ftl_nand_max_sys_blks, %object ++ .size c_ftl_nand_max_sys_blks, 4 ++c_ftl_nand_max_sys_blks: ++ .space 4 ++ .type c_ftl_nand_data_blks_per_plane, %object ++ .size c_ftl_nand_data_blks_per_plane, 2 ++c_ftl_nand_data_blks_per_plane: ++ .space 2 ++ .type c_ftl_nand_blk_pre_plane, %object ++ .size c_ftl_nand_blk_pre_plane, 2 ++c_ftl_nand_blk_pre_plane: ++ .space 2 ++ .type c_ftl_nand_max_data_blks, %object ++ .size c_ftl_nand_max_data_blks, 4 ++c_ftl_nand_max_data_blks: ++ .space 4 ++ .type c_ftl_nand_totle_phy_blks, %object ++ .size c_ftl_nand_totle_phy_blks, 4 ++c_ftl_nand_totle_phy_blks: ++ .space 4 ++ .type c_ftl_nand_type, %object ++ .size c_ftl_nand_type, 2 ++c_ftl_nand_type: ++ .space 2 ++ .type c_ftl_nand_die_num, %object ++ .size c_ftl_nand_die_num, 2 ++c_ftl_nand_die_num: ++ .space 2 ++ .type c_ftl_nand_planes_per_die, %object ++ .size c_ftl_nand_planes_per_die, 2 ++c_ftl_nand_planes_per_die: ++ .space 2 ++ .type p_plane_order_table, %object ++ .size p_plane_order_table, 32 ++p_plane_order_table: ++ .space 32 ++ .type c_mlc_erase_count_value, %object ++ .size c_mlc_erase_count_value, 2 ++c_mlc_erase_count_value: ++ .space 2 ++ .type c_ftl_nand_ext_blk_pre_plane, %object ++ .size c_ftl_nand_ext_blk_pre_plane, 2 ++c_ftl_nand_ext_blk_pre_plane: ++ .space 2 ++ .type c_ftl_vendor_part_size, %object ++ .size c_ftl_vendor_part_size, 2 ++c_ftl_vendor_part_size: ++ .space 2 ++ .type c_ftl_nand_blks_per_die, %object ++ .size c_ftl_nand_blks_per_die, 2 ++c_ftl_nand_blks_per_die: ++ .space 2 ++ .type c_ftl_nand_page_pre_blk, %object ++ .size c_ftl_nand_page_pre_blk, 2 ++c_ftl_nand_page_pre_blk: ++ .space 2 ++ .type c_ftl_nand_page_pre_slc_blk, %object ++ .size c_ftl_nand_page_pre_slc_blk, 2 ++c_ftl_nand_page_pre_slc_blk: ++ .space 2 ++ .type c_ftl_nand_page_pre_super_blk, %object ++ .size c_ftl_nand_page_pre_super_blk, 2 ++c_ftl_nand_page_pre_super_blk: ++ .space 2 ++ .type c_ftl_nand_sec_pre_page, %object ++ .size c_ftl_nand_sec_pre_page, 2 ++c_ftl_nand_sec_pre_page: ++ .space 2 ++ .type c_ftl_nand_sec_pre_page_shift, %object ++ .size c_ftl_nand_sec_pre_page_shift, 2 ++c_ftl_nand_sec_pre_page_shift: ++ .space 2 ++ .type c_ftl_nand_byte_pre_page, %object ++ .size c_ftl_nand_byte_pre_page, 2 ++c_ftl_nand_byte_pre_page: ++ .space 2 ++ .type c_ftl_nand_byte_pre_oob, %object ++ .size c_ftl_nand_byte_pre_oob, 2 ++c_ftl_nand_byte_pre_oob: ++ .space 2 ++ .type c_ftl_nand_reserved_blks, %object ++ .size c_ftl_nand_reserved_blks, 2 ++c_ftl_nand_reserved_blks: ++ .space 2 ++ .space 2 ++ .type DeviceCapacity, %object ++ .size DeviceCapacity, 4 ++DeviceCapacity: ++ .space 4 ++ .type c_ftl_nand_max_vendor_blks, %object ++ .size c_ftl_nand_max_vendor_blks, 2 ++c_ftl_nand_max_vendor_blks: ++ .space 2 ++ .type c_ftl_nand_vendor_region_num, %object ++ .size c_ftl_nand_vendor_region_num, 2 ++c_ftl_nand_vendor_region_num: ++ .space 2 ++ .type c_ftl_nand_map_blks_per_plane, %object ++ .size c_ftl_nand_map_blks_per_plane, 2 ++c_ftl_nand_map_blks_per_plane: ++ .space 2 ++ .space 2 ++ .type c_ftl_nand_max_map_blks, %object ++ .size c_ftl_nand_max_map_blks, 4 ++c_ftl_nand_max_map_blks: ++ .space 4 ++ .type c_ftl_nand_init_sys_blks_per_plane, %object ++ .size c_ftl_nand_init_sys_blks_per_plane, 4 ++c_ftl_nand_init_sys_blks_per_plane: ++ .space 4 ++ .type c_ftl_nand_map_region_num, %object ++ .size c_ftl_nand_map_region_num, 2 ++c_ftl_nand_map_region_num: ++ .space 2 ++ .type c_ftl_nand_l2pmap_ram_region_num, %object ++ .size c_ftl_nand_l2pmap_ram_region_num, 2 ++c_ftl_nand_l2pmap_ram_region_num: ++ .space 2 ++ .type g_page_map_check_enable, %object ++ .size g_page_map_check_enable, 2 ++g_page_map_check_enable: ++ .space 2 ++ .type g_free_slc_blk_num, %object ++ .size g_free_slc_blk_num, 2 ++g_free_slc_blk_num: ++ .space 2 ++ .type g_SlcPartLbaEndSector, %object ++ .size g_SlcPartLbaEndSector, 4 ++g_SlcPartLbaEndSector: ++ .space 4 ++ .type g_all_blk_used_slc_mode, %object ++ .size g_all_blk_used_slc_mode, 4 ++g_all_blk_used_slc_mode: ++ .space 4 ++ .type g_GlobalSysVersion, %object ++ .size g_GlobalSysVersion, 4 ++g_GlobalSysVersion: ++ .space 4 ++ .type g_GlobalDataVersion, %object ++ .size g_GlobalDataVersion, 4 ++g_GlobalDataVersion: ++ .space 4 ++ .type g_totle_gc_page_count, %object ++ .size g_totle_gc_page_count, 4 ++g_totle_gc_page_count: ++ .space 4 ++ .type g_totle_write_page_count, %object ++ .size g_totle_write_page_count, 4 ++g_totle_write_page_count: ++ .space 4 ++ .type g_totle_discard_page_count, %object ++ .size g_totle_discard_page_count, 4 ++g_totle_discard_page_count: ++ .space 4 ++ .type g_totle_cache_write_count, %object ++ .size g_totle_cache_write_count, 4 ++g_totle_cache_write_count: ++ .space 4 ++ .type g_totle_l2p_write_count, %object ++ .size g_totle_l2p_write_count, 4 ++g_totle_l2p_write_count: ++ .space 4 ++ .type g_totle_read_page_count, %object ++ .size g_totle_read_page_count, 4 ++g_totle_read_page_count: ++ .space 4 ++ .type g_totle_mlc_erase_count, %object ++ .size g_totle_mlc_erase_count, 4 ++g_totle_mlc_erase_count: ++ .space 4 ++ .type g_totle_slc_erase_count, %object ++ .size g_totle_slc_erase_count, 4 ++g_totle_slc_erase_count: ++ .space 4 ++ .type g_totle_sys_slc_erase_count, %object ++ .size g_totle_sys_slc_erase_count, 4 ++g_totle_sys_slc_erase_count: ++ .space 4 ++ .type g_max_erase_count, %object ++ .size g_max_erase_count, 4 ++g_max_erase_count: ++ .space 4 ++ .type g_min_erase_count, %object ++ .size g_min_erase_count, 4 ++g_min_erase_count: ++ .space 4 ++ .type g_in_gc_progress, %object ++ .size g_in_gc_progress, 4 ++g_in_gc_progress: ++ .space 4 ++ .type g_in_swl_replace, %object ++ .size g_in_swl_replace, 4 ++g_in_swl_replace: ++ .space 4 ++ .type g_gc_head_data_block, %object ++ .size g_gc_head_data_block, 4 ++g_gc_head_data_block: ++ .space 4 ++ .type g_gc_head_data_block_count, %object ++ .size g_gc_head_data_block_count, 4 ++g_gc_head_data_block_count: ++ .space 4 ++ .type g_gc_skip_write_count, %object ++ .size g_gc_skip_write_count, 4 ++g_gc_skip_write_count: ++ .space 4 ++ .type g_cur_erase_blk, %object ++ .size g_cur_erase_blk, 4 ++g_cur_erase_blk: ++ .space 4 ++ .type g_gc_next_blk, %object ++ .size g_gc_next_blk, 2 ++g_gc_next_blk: ++ .space 2 ++ .type g_gc_next_blk_1, %object ++ .size g_gc_next_blk_1, 2 ++g_gc_next_blk_1: ++ .space 2 ++ .type g_gc_next_blk_2, %object ++ .size g_gc_next_blk_2, 2 ++g_gc_next_blk_2: ++ .space 2 ++ .type g_gc_next_blk_3, %object ++ .size g_gc_next_blk_3, 2 ++g_gc_next_blk_3: ++ .space 2 ++ .type g_gc_free_blk_threshold, %object ++ .size g_gc_free_blk_threshold, 2 ++g_gc_free_blk_threshold: ++ .space 2 ++ .type g_gc_merge_free_blk_threshold, %object ++ .size g_gc_merge_free_blk_threshold, 2 ++g_gc_merge_free_blk_threshold: ++ .space 2 ++ .type g_gc_blk_index, %object ++ .size g_gc_blk_index, 2 ++g_gc_blk_index: ++ .space 2 ++ .type g_gc_bad_block_temp_num, %object ++ .size g_gc_bad_block_temp_num, 2 ++g_gc_bad_block_temp_num: ++ .space 2 ++ .type g_gc_refresh_block_temp_num, %object ++ .size g_gc_refresh_block_temp_num, 2 ++g_gc_refresh_block_temp_num: ++ .space 2 ++ .type g_gc_bad_block_gc_index, %object ++ .size g_gc_bad_block_gc_index, 2 ++g_gc_bad_block_gc_index: ++ .space 2 ++ .type c_wr_page_buf_num, %object ++ .size c_wr_page_buf_num, 4 ++c_wr_page_buf_num: ++ .space 4 ++ .type g_wr_page_num, %object ++ .size g_wr_page_num, 4 ++g_wr_page_num: ++ .space 4 ++ .type p_gc_blk_tbl, %object ++ .size p_gc_blk_tbl, 4 ++p_gc_blk_tbl: ++ .space 4 ++ .type p_gc_page_info, %object ++ .size p_gc_page_info, 4 ++p_gc_page_info: ++ .space 4 ++ .type req_read, %object ++ .size req_read, 4 ++req_read: ++ .space 4 ++ .type req_gc_dst, %object ++ .size req_gc_dst, 4 ++req_gc_dst: ++ .space 4 ++ .type req_prgm, %object ++ .size req_prgm, 4 ++req_prgm: ++ .space 4 ++ .type req_erase, %object ++ .size req_erase, 4 ++req_erase: ++ .space 4 ++ .type req_gc, %object ++ .size req_gc, 4 ++req_gc: ++ .space 4 ++ .type req_wr_io, %object ++ .size req_wr_io, 4 ++req_wr_io: ++ .space 4 ++ .type c_gc_page_buf_num, %object ++ .size c_gc_page_buf_num, 4 ++c_gc_page_buf_num: ++ .space 4 ++ .type p_sys_data_buf, %object ++ .size p_sys_data_buf, 4 ++p_sys_data_buf: ++ .space 4 ++ .type p_sys_data_buf_1, %object ++ .size p_sys_data_buf_1, 4 ++p_sys_data_buf_1: ++ .space 4 ++ .type p_vendor_data_buf, %object ++ .size p_vendor_data_buf, 4 ++p_vendor_data_buf: ++ .space 4 ++ .type p_gc_data_buf, %object ++ .size p_gc_data_buf, 4 ++p_gc_data_buf: ++ .space 4 ++ .type p_wr_io_data_buf, %object ++ .size p_wr_io_data_buf, 4 ++p_wr_io_data_buf: ++ .space 4 ++ .type p_io_data_buf_0, %object ++ .size p_io_data_buf_0, 4 ++p_io_data_buf_0: ++ .space 4 ++ .type p_io_data_buf_1, %object ++ .size p_io_data_buf_1, 4 ++p_io_data_buf_1: ++ .space 4 ++ .type gp_gc_page_buf_info, %object ++ .size gp_gc_page_buf_info, 4 ++gp_gc_page_buf_info: ++ .space 4 ++ .type p_sys_spare_buf, %object ++ .size p_sys_spare_buf, 4 ++p_sys_spare_buf: ++ .space 4 ++ .type p_io_spare_buf, %object ++ .size p_io_spare_buf, 4 ++p_io_spare_buf: ++ .space 4 ++ .type p_gc_spare_buf, %object ++ .size p_gc_spare_buf, 4 ++p_gc_spare_buf: ++ .space 4 ++ .type p_wr_io_spare_buf, %object ++ .size p_wr_io_spare_buf, 4 ++p_wr_io_spare_buf: ++ .space 4 ++ .type g_ect_tbl_info_size, %object ++ .size g_ect_tbl_info_size, 2 ++g_ect_tbl_info_size: ++ .space 2 ++ .space 2 ++ .type p_swl_mul_table, %object ++ .size p_swl_mul_table, 4 ++p_swl_mul_table: ++ .space 4 ++ .type gp_ect_tbl_info, %object ++ .size gp_ect_tbl_info, 4 ++gp_ect_tbl_info: ++ .space 4 ++ .type p_erase_count_table, %object ++ .size p_erase_count_table, 4 ++p_erase_count_table: ++ .space 4 ++ .type p_valid_page_count_check_table, %object ++ .size p_valid_page_count_check_table, 4 ++p_valid_page_count_check_table: ++ .space 4 ++ .type p_valid_page_count_table, %object ++ .size p_valid_page_count_table, 4 ++p_valid_page_count_table: ++ .space 4 ++ .type p_map_block_table, %object ++ .size p_map_block_table, 4 ++p_map_block_table: ++ .space 4 ++ .type p_map_block_valid_page_count, %object ++ .size p_map_block_valid_page_count, 4 ++p_map_block_valid_page_count: ++ .space 4 ++ .type p_vendor_block_table, %object ++ .size p_vendor_block_table, 4 ++p_vendor_block_table: ++ .space 4 ++ .type p_vendor_block_valid_page_count, %object ++ .size p_vendor_block_valid_page_count, 4 ++p_vendor_block_valid_page_count: ++ .space 4 ++ .type p_vendor_block_ver_table, %object ++ .size p_vendor_block_ver_table, 4 ++p_vendor_block_ver_table: ++ .space 4 ++ .type p_vendor_region_ppn_table, %object ++ .size p_vendor_region_ppn_table, 4 ++p_vendor_region_ppn_table: ++ .space 4 ++ .type p_map_region_ppn_table, %object ++ .size p_map_region_ppn_table, 4 ++p_map_region_ppn_table: ++ .space 4 ++ .type p_map_region_ppn_check_table, %object ++ .size p_map_region_ppn_check_table, 4 ++p_map_region_ppn_check_table: ++ .space 4 ++ .type p_map_block_ver_table, %object ++ .size p_map_block_ver_table, 4 ++p_map_block_ver_table: ++ .space 4 ++ .type p_l2p_ram_map, %object ++ .size p_l2p_ram_map, 4 ++p_l2p_ram_map: ++ .space 4 ++ .type p_l2p_map_buf, %object ++ .size p_l2p_map_buf, 4 ++p_l2p_map_buf: ++ .space 4 ++ .type p_data_block_list_table, %object ++ .size p_data_block_list_table, 4 ++p_data_block_list_table: ++ .space 4 ++ .type c_ftl_nand_bbm_buf_size, %object ++ .size c_ftl_nand_bbm_buf_size, 2 ++c_ftl_nand_bbm_buf_size: ++ .space 2 ++ .space 2 ++ .type gBbtInfo, %object ++ .size gBbtInfo, 60 ++gBbtInfo: ++ .space 60 ++ .type g_totle_vendor_block, %object ++ .size g_totle_vendor_block, 2 ++g_totle_vendor_block: ++ .space 2 ++ .space 2 ++ .type g_MaxLpn, %object ++ .size g_MaxLpn, 4 ++g_MaxLpn: ++ .space 4 ++ .type g_flash_read_only_en, %object ++ .size g_flash_read_only_en, 4 ++g_flash_read_only_en: ++ .space 4 ++ .type req_sys, %object ++ .size req_sys, 36 ++req_sys: ++ .space 36 ++ .type gSysFreeQueue, %object ++ .size gSysFreeQueue, 2056 ++gSysFreeQueue: ++ .space 2056 ++ .type g_sys_save_data, %object ++ .size g_sys_save_data, 48 ++g_sys_save_data: ++ .space 48 ++ .type p_data_block_list_head, %object ++ .size p_data_block_list_head, 4 ++p_data_block_list_head: ++ .space 4 ++ .type p_data_block_list_tail, %object ++ .size p_data_block_list_tail, 4 ++p_data_block_list_tail: ++ .space 4 ++ .type g_num_data_superblocks, %object ++ .size g_num_data_superblocks, 2 ++g_num_data_superblocks: ++ .space 2 ++ .space 2 ++ .type p_free_data_block_list_head, %object ++ .size p_free_data_block_list_head, 4 ++p_free_data_block_list_head: ++ .space 4 ++ .type g_num_free_superblocks, %object ++ .size g_num_free_superblocks, 2 ++g_num_free_superblocks: ++ .space 2 ++ .space 2 ++ .type g_active_superblock, %object ++ .size g_active_superblock, 48 ++g_active_superblock: ++ .space 48 ++ .type g_buffer_superblock, %object ++ .size g_buffer_superblock, 48 ++g_buffer_superblock: ++ .space 48 ++ .type g_gc_temp_superblock, %object ++ .size g_gc_temp_superblock, 48 ++g_gc_temp_superblock: ++ .space 48 ++ .type gL2pMapInfo, %object ++ .size gL2pMapInfo, 44 ++gL2pMapInfo: ++ .space 44 ++ .type g_l2p_last_update_region_id, %object ++ .size g_l2p_last_update_region_id, 2 ++g_l2p_last_update_region_id: ++ .space 2 ++ .space 2 ++ .type gVendorBlkInfo, %object ++ .size gVendorBlkInfo, 44 ++gVendorBlkInfo: ++ .space 44 ++ .type FtlUpdateVaildLpnCount, %object ++ .size FtlUpdateVaildLpnCount, 2 ++FtlUpdateVaildLpnCount: ++ .space 2 ++ .space 2 ++ .type g_VaildLpn, %object ++ .size g_VaildLpn, 4 ++g_VaildLpn: ++ .space 4 ++ .type gSysInfo, %object ++ .size gSysInfo, 16 ++gSysInfo: ++ .space 16 ++ .type g_totle_map_block, %object ++ .size g_totle_map_block, 2 ++g_totle_map_block: ++ .space 2 ++ .space 2 ++ .type g_MaxLbn, %object ++ .size g_MaxLbn, 4 ++g_MaxLbn: ++ .space 4 ++ .type c_ftl_nand_data_op_blks_per_plane, %object ++ .size c_ftl_nand_data_op_blks_per_plane, 2 ++c_ftl_nand_data_op_blks_per_plane: ++ .space 2 ++ .space 2 ++ .type g_gc_superblock, %object ++ .size g_gc_superblock, 48 ++g_gc_superblock: ++ .space 48 ++ .type g_sys_ext_data, %object ++ .size g_sys_ext_data, 512 ++g_sys_ext_data: ++ .space 512 ++ .type g_totle_write_sector, %object ++ .size g_totle_write_sector, 4 ++g_totle_write_sector: ++ .space 4 ++ .type g_totle_read_sector, %object ++ .size g_totle_read_sector, 4 ++g_totle_read_sector: ++ .space 4 ++ .type g_ect_tbl_power_up_flush, %object ++ .size g_ect_tbl_power_up_flush, 2 ++g_ect_tbl_power_up_flush: ++ .space 2 ++ .space 2 ++ .type g_totle_avg_erase_count, %object ++ .size g_totle_avg_erase_count, 4 ++g_totle_avg_erase_count: ++ .space 4 ++ .type g_gc_num_req, %object ++ .size g_gc_num_req, 4 ++g_gc_num_req: ++ .space 4 ++ .type g_req_cache, %object ++ .size g_req_cache, 4 ++g_req_cache: ++ .space 4 ++ .type g_tmp_data_superblock_id, %object ++ .size g_tmp_data_superblock_id, 2 ++g_tmp_data_superblock_id: ++ .space 2 ++ .space 2 ++ .type g_totle_swl_count, %object ++ .size g_totle_swl_count, 4 ++g_totle_swl_count: ++ .space 4 ++ .type ftl_gc_temp_power_lost_recovery_flag, %object ++ .size ftl_gc_temp_power_lost_recovery_flag, 4 ++ftl_gc_temp_power_lost_recovery_flag: ++ .space 4 ++ .type g_recovery_page_min_ver, %object ++ .size g_recovery_page_min_ver, 4 ++g_recovery_page_min_ver: ++ .space 4 ++ .type g_gc_blk_num, %object ++ .size g_gc_blk_num, 2 ++g_gc_blk_num: ++ .space 2 ++ .type g_gc_page_offset, %object ++ .size g_gc_page_offset, 2 ++g_gc_page_offset: ++ .space 2 ++ .type g_gc_bad_block_temp_tbl, %object ++ .size g_gc_bad_block_temp_tbl, 34 ++g_gc_bad_block_temp_tbl: ++ .space 34 ++ .type g_power_lost_ecc_error_blk, %object ++ .size g_power_lost_ecc_error_blk, 2 ++g_power_lost_ecc_error_blk: ++ .space 2 ++ .type g_power_lost_recovery_flag, %object ++ .size g_power_lost_recovery_flag, 2 ++g_power_lost_recovery_flag: ++ .space 2 ++ .space 2 ++ .type g_recovery_page_num, %object ++ .size g_recovery_page_num, 4 ++g_recovery_page_num: ++ .space 4 ++ .type g_recovery_ppa_tbl, %object ++ .size g_recovery_ppa_tbl, 128 ++g_recovery_ppa_tbl: ++ .space 128 ++ .type gc_ink_free_return_value, %object ++ .size gc_ink_free_return_value, 2 ++gc_ink_free_return_value: ++ .space 2 ++ .type g_gc_cur_blk_valid_pages, %object ++ .size g_gc_cur_blk_valid_pages, 2 ++g_gc_cur_blk_valid_pages: ++ .space 2 ++ .type g_gc_cur_blk_max_valid_pages, %object ++ .size g_gc_cur_blk_max_valid_pages, 2 ++g_gc_cur_blk_max_valid_pages: ++ .space 2 ++ .space 2 ++ .type gp_last_act_superblock, %object ++ .size gp_last_act_superblock, 4 ++gp_last_act_superblock: ++ .space 4 ++ .type gc_discard_updated, %object ++ .size gc_discard_updated, 4 ++gc_discard_updated: ++ .space 4 ++ .type g_LowFormat, %object ++ .size g_LowFormat, 4 ++g_LowFormat: ++ .space 4 ++ .type g_ftl_nand_free_count, %object ++ .size g_ftl_nand_free_count, 4 ++g_ftl_nand_free_count: ++ .space 4 ++ .type last_cache_match_count, %object ++ .size last_cache_match_count, 4 ++last_cache_match_count: ++ .space 4 ++ .type check_valid_page_count_table, %object ++ .size check_valid_page_count_table, 8192 ++check_valid_page_count_table: ++ .space 8192 ++ .type g_gc_refresh_block_temp_tbl, %object ++ .size g_gc_refresh_block_temp_tbl, 34 ++g_gc_refresh_block_temp_tbl: ++ .space 34 ++ .space 2 ++ .type gToggleModeClkDiv, %object ++ .size gToggleModeClkDiv, 4 ++gToggleModeClkDiv: ++ .space 4 ++ .type gpNandc1, %object ++ .size gpNandc1, 4 ++gpNandc1: ++ .space 4 ++ .type gNandFlashResEndPageAddr, %object ++ .size gNandFlashResEndPageAddr, 4 ++gNandFlashResEndPageAddr: ++ .space 4 ++ .type gNandFlashInfoBlockEcc, %object ++ .size gNandFlashInfoBlockEcc, 1 ++gNandFlashInfoBlockEcc: ++ .space 1 ++ .type gFlashOnfiModeEn, %object ++ .size gFlashOnfiModeEn, 1 ++gFlashOnfiModeEn: ++ .space 1 ++ .type gFlashSdrModeEn, %object ++ .size gFlashSdrModeEn, 1 ++gFlashSdrModeEn: ++ .space 1 ++ .section .rodata.str1.1,"aMS",%progbits,1 ++.LC1: ++ .ascii "FlashEraseBlocks pageAddr error %x\012\000" ++.LC2: ++ .ascii "otp error! %d\000" ++.LC3: ++ .ascii "rr\000" ++.LC4: ++ .ascii "%d statReg->V6.mtrans_cnt=%d flReg.V6.page_num=%d\012" ++ .ascii "\000" ++.LC5: ++ .ascii "nandc:\000" ++.LC6: ++ .ascii "%d flReg.d32=%x %x\012\000" ++.LC7: ++ .ascii "sdr read ok %x ecc=%d\012\000" ++.LC8: ++ .ascii "sync para %d\012\000" ++.LC9: ++ .ascii "TOG mode Read error %x %x\012\000" ++.LC10: ++ .ascii "read retry status %x %x %x\012\000" ++.LC11: ++ .ascii "micron RR %d row=%x,count %d,status=%d\012\000" ++.LC12: ++ .ascii "samsung RR %d row=%x,count %d,status=%d\012\000" ++.LC13: ++ .ascii "ECC:%d\012\000" ++.LC14: ++ .ascii "No.%d FLASH ID:%x %x %x %x %x %x\012\000" ++.LC15: ++ .ascii "FlashLoadPhyInfo fail %x!!\012\000" ++.LC16: ++ .ascii "Read pageadd=%x ecc=%x err=%x\012\000" ++.LC17: ++ .ascii "data:\000" ++.LC18: ++ .ascii "spare:\000" ++.LC19: ++ .ascii "ReadRetry pageadd=%x ecc=%x err=%x\012\000" ++.LC20: ++ .ascii "FLFB:%d %d\012\000" ++.LC21: ++ .ascii "BBT:\000" ++.LC22: ++ .ascii "prog error: = %x\012\000" ++.LC23: ++ .ascii "prog read error: = %x\012\000" ++.LC24: ++ .ascii "prog read REFRESH: = %x\012\000" ++.LC25: ++ .ascii "prog read s error: = %x %x %x\012\000" ++.LC26: ++ .ascii "prog read d error: = %x %x %x\012\000" ++.LC27: ++ .ascii "FlashMakeFactorBbt %d\012\000" ++.LC28: ++ .ascii "bad block:%d %d\012\000" ++.LC29: ++ .ascii "FMFB:%d %d\012\000" ++.LC30: ++ .ascii "E:bad block:%d\012\000" ++.LC31: ++ .ascii "FMFB:Save %d %d\012\000" ++.LC32: ++ .ascii "%s error allocating memory. return -1\012\000" ++.LC33: ++ .ascii "phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\012" ++ .ascii "\000" ++.LC34: ++ .ascii "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\012\000" ++.LC35: ++ .ascii "FtlBbmTblFlush error:%x\012\000" ++.LC36: ++ .ascii "FtlBbmTblFlush error = %x error count = %d\012\000" ++.LC37: ++ .ascii "FtlFreeSysBlkQueueOut free count = %d\012\000" ++.LC38: ++ .ascii "FtlFreeSysBlkQueueOut = %x, free count = %d, error\012" ++ .ascii "\000" ++.LC39: ++ .ascii "FtlFreeSysBlkQueueOut = %x, free count = %d\012\000" ++.LC40: ++ .ascii "FtlMapWritePage error = %x\012\000" ++.LC41: ++ .ascii "FtlMapWritePage error = %x error count = %d\012\000" ++.LC42: ++ .ascii "page map lost: %x %x\012\000" ++.LC43: ++ .ascii "region_id = %x phyAddr = %x\012\000" ++.LC44: ++ .ascii "map_ppn:\000" ++.LC45: ++ .ascii "load_l2p_region refresh = %x phyAddr = %x\012\000" ++.LC46: ++ .ascii "FtlVendorPartRead refresh = %x phyAddr = %x\012\000" ++.LC47: ++ .ascii "FtlVpcTblFlush error = %x error count = %d\012\000" ++.LC48: ++ .ascii "no ect\000" ++.LC49: ++ .ascii "%s\012\000" ++.LC50: ++ .ascii "...%s enter...\012\000" ++.LC51: ++ .ascii "FtlCheckVpc2 %x = %x %x\012\000" ++.LC52: ++ .ascii "free blk vpc error %x = %x %x\012\000" ++.LC53: ++ .ascii "error_flag %x\012\000" ++.LC54: ++ .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data = %x\012" ++ .ascii "\000" ++.LC55: ++ .ascii ":\000" ++.LC56: ++ .ascii "Ftlscanalldata = %x\012\000" ++.LC57: ++ .ascii "scan lpa = %x ppa= %x\012\000" ++.LC58: ++ .ascii "lba = %x,addr= %x,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC59: ++ .ascii "phyBlk = %x,addr= %x,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC60: ++ .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC61: ++ .ascii "Mblk:\000" ++.LC62: ++ .ascii "L2P:\000" ++.LC63: ++ .ascii "L2PC:\000" ++.LC64: ++ .ascii "id = %x,%x addr= %x,spare= %x %x %x %x data= %x\012" ++ .ascii "\000" ++.LC65: ++ .ascii "superBlkID = %x vpc=%x\012\000" ++.LC66: ++ .ascii "flashmode = %x pagenum = %x %x\012\000" ++.LC67: ++ .ascii "blk = %x vpc=%x mode = %x\012\000" ++.LC68: ++ .ascii "mlc id = %x,%x addr= %x,spare= %x %x %x %x data=%x " ++ .ascii "%x\012\000" ++.LC69: ++ .ascii "slc id = %x,%x addr= %x,spare= %x %x %x %x data=%x " ++ .ascii "%x\012\000" ++.LC70: ++ .ascii "slc mode\000" ++.LC71: ++ .ascii "ftl_scan_all_ppa blk %x page %x flag: %x\012\000" ++.LC72: ++ .ascii "ftl_scan_all_ppa blk %x page %x flag: %x .........." ++ .ascii "..... is bad block\012\000" ++.LC73: ++ .ascii "addr= %x, status= %d,spare= %x %x %x %x data=%x %x\012" ++ .ascii "\000" ++.LC74: ++ .ascii "%s finished\012\000" ++.LC75: ++ .ascii "FLASH INFO:\012\000" ++.LC76: ++ .ascii "FLASH ID: %x\012\000" ++.LC77: ++ .ascii "Device Capacity: %d MB\012\000" ++.LC78: ++ .ascii "FMWAIT: %x %x %x %x\012\000" ++.LC79: ++ .ascii "FTL INFO:\012\000" ++.LC80: ++ .ascii "g_MaxLpn = 0x%x\012\000" ++.LC81: ++ .ascii "g_VaildLpn = 0x%x\012\000" ++.LC82: ++ .ascii "read_page_count = 0x%x\012\000" ++.LC83: ++ .ascii "discard_page_count = 0x%x\012\000" ++.LC84: ++ .ascii "write_page_count = 0x%x\012\000" ++.LC85: ++ .ascii "cache_write_count = 0x%x\012\000" ++.LC86: ++ .ascii "l2p_write_count = 0x%x\012\000" ++.LC87: ++ .ascii "gc_page_count = 0x%x\012\000" ++.LC88: ++ .ascii "totle_write = %d MB\012\000" ++.LC89: ++ .ascii "totle_read = %d MB\012\000" ++.LC90: ++ .ascii "GSV = 0x%x\012\000" ++.LC91: ++ .ascii "GDV = 0x%x\012\000" ++.LC92: ++ .ascii "bad blk num = %d %d\012\000" ++.LC93: ++ .ascii "free_superblocks = 0x%x\012\000" ++.LC94: ++ .ascii "mlc_EC = 0x%x\012\000" ++.LC95: ++ .ascii "slc_EC = 0x%x\012\000" ++.LC96: ++ .ascii "avg_EC = 0x%x\012\000" ++.LC97: ++ .ascii "sys_EC = 0x%x\012\000" ++.LC98: ++ .ascii "max_EC = 0x%x\012\000" ++.LC99: ++ .ascii "min_EC = 0x%x\012\000" ++.LC100: ++ .ascii "PLT = 0x%x\012\000" ++.LC101: ++ .ascii "POT = 0x%x\012\000" ++.LC102: ++ .ascii "MaxSector = 0x%x\012\000" ++.LC103: ++ .ascii "init_sys_blks_pp = 0x%x\012\000" ++.LC104: ++ .ascii "sys_blks_pp = 0x%x\012\000" ++.LC105: ++ .ascii "free sysblock = 0x%x\012\000" ++.LC106: ++ .ascii "data_blks_pp = 0x%x\012\000" ++.LC107: ++ .ascii "data_op_blks_pp = 0x%x\012\000" ++.LC108: ++ .ascii "max_data_blks = 0x%x\012\000" ++.LC109: ++ .ascii "Sys.id = 0x%x\012\000" ++.LC110: ++ .ascii "Bbt.id = 0x%x\012\000" ++.LC111: ++ .ascii "ACT.page = 0x%x\012\000" ++.LC112: ++ .ascii "ACT.plane = 0x%x\012\000" ++.LC113: ++ .ascii "ACT.id = 0x%x\012\000" ++.LC114: ++ .ascii "ACT.mode = 0x%x\012\000" ++.LC115: ++ .ascii "ACT.a_pages = 0x%x\012\000" ++.LC116: ++ .ascii "ACT VPC = 0x%x\012\000" ++.LC117: ++ .ascii "BUF.page = 0x%x\012\000" ++.LC118: ++ .ascii "BUF.plane = 0x%x\012\000" ++.LC119: ++ .ascii "BUF.id = 0x%x\012\000" ++.LC120: ++ .ascii "BUF.mode = 0x%x\012\000" ++.LC121: ++ .ascii "BUF.a_pages = 0x%x\012\000" ++.LC122: ++ .ascii "BUF VPC = 0x%x\012\000" ++.LC123: ++ .ascii "TMP.page = 0x%x\012\000" ++.LC124: ++ .ascii "TMP.plane = 0x%x\012\000" ++.LC125: ++ .ascii "TMP.id = 0x%x\012\000" ++.LC126: ++ .ascii "TMP.mode = 0x%x\012\000" ++.LC127: ++ .ascii "TMP.a_pages = 0x%x\012\000" ++.LC128: ++ .ascii "GC.page = 0x%x\012\000" ++.LC129: ++ .ascii "GC.plane = 0x%x\012\000" ++.LC130: ++ .ascii "GC.id = 0x%x\012\000" ++.LC131: ++ .ascii "GC.mode = 0x%x\012\000" ++.LC132: ++ .ascii "GC.a_pages = 0x%x\012\000" ++.LC133: ++ .ascii "WR_CHK = 0x%x %x %x %x\012\000" ++.LC134: ++ .ascii "Read Err = 0x%x\012\000" ++.LC135: ++ .ascii "Prog Err = 0x%x\012\000" ++.LC136: ++ .ascii "gc_free_blk_th= 0x%x\012\000" ++.LC137: ++ .ascii "gc_merge_free_blk_th= 0x%x\012\000" ++.LC138: ++ .ascii "gc_skip_write_count= 0x%x\012\000" ++.LC139: ++ .ascii "gc_blk_index= 0x%x\012\000" ++.LC140: ++ .ascii "free min EC= 0x%x\012\000" ++.LC141: ++ .ascii "free max EC= 0x%x\012\000" ++.LC142: ++ .ascii "GC__SB VPC = 0x%x\012\000" ++.LC143: ++ .ascii "%d. [0x%x]=0x%x 0x%x 0x%x\012\000" ++.LC144: ++ .ascii "free %d. [0x%x] 0x%x 0x%x\012\000" ++.LC145: ++ .ascii "FTL version: 5.0.63 20210616\000" ++.LC146: ++ .ascii "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x" ++ .ascii "\012\000" ++.LC147: ++ .ascii "FtlGcScanTempBlk Error ID %x %x!!!!!!! \012\000" ++.LC148: ++ .ascii "FtlGcScanTempBlkError ID %x %x!!!!!!!\012\000" ++.LC149: ++ .ascii "FtlGcRefreshBlock 0x%x\012\000" ++.LC150: ++ .ascii "FtlGcMarkBadPhyBlk %d 0x%x\012\000" ++.LC151: ++ .ascii "FtlGcFreeBadSuperBlk 0x%x\012\000" ++.LC152: ++ .ascii "decrement_vpc_count %x = %d\012\000" ++.LC153: ++ .ascii "decrement_vpc_count %x = %d in free list\012\000" ++.LC154: ++ .ascii "RSB refresh addr %x\012\000" ++.LC155: ++ .ascii "spuer block %x vpn is 0\012 \000" ++.LC156: ++ .ascii "g_recovery_ppa %x ver %x\012 \000" ++.LC157: ++ .ascii "FtlCheckVpc %x = %x %x\012\000" ++.LC158: ++ .ascii "%d GC datablk = %x vpc %x %x\012\000" ++.LC159: ++ .ascii "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\012\000" ++.LC160: ++ .ascii "Ftlwrite decrement_vpc_count %x = %d\012\000" ++.LC161: ++ .ascii "GC des block %x done\012\000" ++.LC162: ++ .ascii "too many bad block = %d %d\012\000" ++.LC163: ++ .ascii "...%s: no bad block mapping table, format device\012" ++ .ascii "\000" ++.LC164: ++ .ascii "...%s FtlSysBlkInit error ,format device!\012\000" ++.LC165: ++ .ascii "FtlWrite: lpa error:%x %x\012\000" ++.LC166: ++ .ascii "fix power lost blk = %x vpc=%x\012\000" ++.LC167: ++ .ascii "erase power lost blk = %x vpc=%x\012\000" +diff --git a/drivers/rk_nand/rk_ftlv5_arm64.S b/drivers/rk_nand/rk_ftlv5_arm64.S +new file mode 100644 +index 00000000000..260a57d855b +--- /dev/null ++++ b/drivers/rk_nand/rk_ftlv5_arm64.S +@@ -0,0 +1,25632 @@ ++/* ++ * 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: 2021-07-16 ++ * function: rk ftl v5 for rockchip soc base on arm v8 to support MLC NAND. ++ */ ++ .file "rk_ftlv5_arm64.S" ++ .text ++ .align 2 ++ .type flash_read_ecc, %function ++flash_read_ecc: ++ stp x29, x30, [sp, -32]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x2, x1, x0 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ ldr x0, [x1, x0] ++ ldrb w19, [x2, 8] ++ add x19, x0, x19, lsl 8 ++ mov w0, 122 ++ str w0, [x19, 2056] ++ mov x0, 400 ++ bl __const_udelay ++ ldr w1, [x19, 2048] ++ ldr w0, [x19, 2048] ++ and w1, w1, 15 ++ and w0, w0, 15 ++ cmp w1, w0 ++ csel w1, w1, w0, cs ++ ldr w0, [x19, 2048] ++ ldr w2, [x19, 2048] ++ and w0, w0, 15 ++ ldr x19, [sp, 16] ++ and w2, w2, 15 ++ cmp w0, w2 ++ csel w0, w0, w2, cs ++ cmp w0, w1 ++ csel w0, w0, w1, cs ++ ldp x29, x30, [sp], 32 ++ ret ++ .size flash_read_ecc, .-flash_read_ecc ++ .align 2 ++ .type FlashReadFacBbtData.part.6, %function ++FlashReadFacBbtData.part.6: ++ stp x29, x30, [sp, -32]! ++ adrp x3, .LANCHOR0 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ mov x19, x0 ++ cbnz w1, .L4 ++ add x5, x3, :lo12:.LANCHOR0 ++ mov w0, 0 ++ mov w7, 1 ++.L5: ++ ldr w1, [x5, 72] ++ cmp w0, w1 ++ bcc .L6 ++.L4: ++ add x3, x3, :lo12:.LANCHOR0 ++ mov x0, x19 ++ ldr x1, [x3, 64] ++ bl ftl_memcpy ++ mov w3, 4 ++ mov x1, x19 ++ mov w2, w3 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl rknand_print_hex ++ mov w0, 0 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L6: ++ ubfx x1, x0, 5, 11 ++ ldr x6, [x5, 64] ++ lsl x1, x1, 2 ++ lsl w8, w7, w0 ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ ldr w4, [x6, x1] ++ orr w4, w4, w8 ++ str w4, [x6, x1] ++ b .L5 ++ .size FlashReadFacBbtData.part.6, .-FlashReadFacBbtData.part.6 ++ .align 2 ++ .type ftl_set_blk_mode.part.17, %function ++ftl_set_blk_mode.part.17: ++ and w0, w0, 65535 ++ adrp x2, .LANCHOR0+80 ++ ubfx x1, x0, 5, 11 ++ ldr x3, [x2, #:lo12:.LANCHOR0+80] ++ lsl x1, x1, 2 ++ mov w2, 1 ++ lsl w2, w2, w0 ++ ldr w0, [x3, x1] ++ orr w0, w0, w2 ++ str w0, [x3, x1] ++ ret ++ .size ftl_set_blk_mode.part.17, .-ftl_set_blk_mode.part.17 ++ .align 2 ++ .global FlashMemCmp8 ++ .type FlashMemCmp8, %function ++FlashMemCmp8: ++ adrp x3, .LANCHOR0+88 ++ ldrb w3, [x3, #:lo12:.LANCHOR0+88] ++ cbz w3, .L15 ++ ldrb w4, [x0, 1] ++ ldrb w3, [x1, 1] ++ cmp w4, w3 ++ beq .L16 ++.L15: ++ mov x3, 0 ++.L13: ++ mov w4, w3 ++ cmp w3, w2 ++ bcc .L14 ++.L16: ++ mov w0, 0 ++ ret ++.L14: ++ ldrb w5, [x0, x3] ++ add x3, x3, 1 ++ add x6, x1, x3 ++ ldrb w6, [x6, -1] ++ cmp w6, w5 ++ beq .L13 ++ add w0, w4, 1 ++ ret ++ .size FlashMemCmp8, .-FlashMemCmp8 ++ .align 2 ++ .global FlashRsvdBlkChk ++ .type FlashRsvdBlkChk, %function ++FlashRsvdBlkChk: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ and w0, w0, 255 ++ ldrb w3, [x2, 89] ++ ldr w2, [x2, 92] ++ mul w2, w3, w2 ++ cmp w2, w1 ++ bls .L20 ++ cmp w0, 0 ++ cset w0, ne ++ ret ++.L20: ++ mov w0, 1 ++ ret ++ .size FlashRsvdBlkChk, .-FlashRsvdBlkChk ++ .align 2 ++ .global FlashGetRandomizer ++ .type FlashGetRandomizer, %function ++FlashGetRandomizer: ++ and x3, x1, 127 ++ adrp x2, .LANCHOR1 ++ add x2, x2, :lo12:.LANCHOR1 ++ ldrh w4, [x2, x3, lsl 1] ++ adrp x2, .LANCHOR0+96 ++ ldrb w2, [x2, #:lo12:.LANCHOR0+96] ++ cbz w2, .L29 ++ stp x29, x30, [sp, -16]! ++ and w0, w0, 255 ++ add x29, sp, 0 ++ bl FlashRsvdBlkChk ++ cmp w0, 0 ++ orr w1, w4, -1073741824 ++ csel w4, w1, w4, ne ++ mov w0, w4 ++ ldp x29, x30, [sp], 16 ++ ret ++.L29: ++ mov w0, w4 ++ ret ++ .size FlashGetRandomizer, .-FlashGetRandomizer ++ .align 2 ++ .global FlashSetRandomizer ++ .type FlashSetRandomizer, %function ++FlashSetRandomizer: ++ and x2, x1, 127 ++ and w6, w0, 255 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ ldrh w5, [x0, x2, lsl 1] ++ adrp x0, .LANCHOR0 ++ add x2, x0, :lo12:.LANCHOR0 ++ mov x4, x0 ++ ldrb w2, [x2, 96] ++ cbz w2, .L40 ++ stp x29, x30, [sp, -16]! ++ mov w0, w6 ++ add x29, sp, 0 ++ bl FlashRsvdBlkChk ++ cmp w0, 0 ++ sbfiz x6, x6, 4, 32 ++ add x0, x4, :lo12:.LANCHOR0 ++ orr w1, w5, -1073741824 ++ csel w5, w1, w5, ne ++ ldr x0, [x0, x6] ++ str w5, [x0, 336] ++ ldp x29, x30, [sp], 16 ++ ret ++.L40: ++ add x0, x0, :lo12:.LANCHOR0 ++ sbfiz x6, x6, 4, 32 ++ ldr x0, [x0, x6] ++ str w5, [x0, 336] ++ ret ++ .size FlashSetRandomizer, .-FlashSetRandomizer ++ .align 2 ++ .global FlashBlockAlignInit ++ .type FlashBlockAlignInit, %function ++FlashBlockAlignInit: ++ and w0, w0, 65535 ++ adrp x1, .LANCHOR0 ++ cmp w0, 512 ++ add x1, x1, :lo12:.LANCHOR0 ++ bls .L44 ++ mov w0, 1024 ++.L48: ++ str w0, [x1, 92] ++ ret ++.L44: ++ cmp w0, 256 ++ bls .L46 ++ mov w0, 512 ++ b .L48 ++.L46: ++ cmp w0, 128 ++ bls .L48 ++ mov w0, 256 ++ b .L48 ++ .size FlashBlockAlignInit, .-FlashBlockAlignInit ++ .align 2 ++ .global FlashReadCmd ++ .type FlashReadCmd, %function ++FlashReadCmd: ++ and w0, w0, 255 ++ adrp x3, .LANCHOR0 ++ sbfiz x2, x0, 4, 32 ++ add x3, x3, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ add x4, x3, x2 ++ add x29, sp, 0 ++ ldr x2, [x3, x2] ++ ldr x3, [x3, 104] ++ ldrb w4, [x4, 8] ++ ldrb w3, [x3, 7] ++ cmp w3, 1 ++ bne .L50 ++ sxtw x3, w4 ++ mov w5, 38 ++ add x3, x3, 8 ++ add x3, x2, x3, lsl 8 ++ str w5, [x3, 8] ++.L50: ++ ubfiz x4, x4, 8, 8 ++ and w3, w1, 255 ++ add x2, x2, x4 ++ str wzr, [x2, 2056] ++ str wzr, [x2, 2052] ++ str wzr, [x2, 2052] ++ str w3, [x2, 2052] ++ lsr w3, w1, 8 ++ str w3, [x2, 2052] ++ lsr w3, w1, 16 ++ str w3, [x2, 2052] ++ mov w3, 48 ++ str w3, [x2, 2056] ++ bl FlashSetRandomizer ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FlashReadCmd, .-FlashReadCmd ++ .align 2 ++ .global FlashReadDpDataOutCmd ++ .type FlashReadDpDataOutCmd, %function ++FlashReadDpDataOutCmd: ++ and w0, w0, 255 ++ adrp x3, .LANCHOR0 ++ sbfiz x2, x0, 4, 32 ++ add x3, x3, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ add x4, x3, x2 ++ and w5, w1, 255 ++ add x29, sp, 0 ++ ldr x6, [x3, x2] ++ ldrb w2, [x3, 128] ++ lsr w3, w1, 16 ++ cmp w2, 1 ++ ldrb w2, [x4, 8] ++ lsr w4, w1, 8 ++ add x2, x6, x2, lsl 8 ++ bne .L53 ++ 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] ++.L56: ++ mov w3, 224 ++ str w3, [x2, 2056] ++ bl FlashSetRandomizer ++ ldp x29, x30, [sp], 16 ++ ret ++.L53: ++ 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] ++ b .L56 ++ .size FlashReadDpDataOutCmd, .-FlashReadDpDataOutCmd ++ .align 2 ++ .global FlashProgFirstCmd ++ .type FlashProgFirstCmd, %function ++FlashProgFirstCmd: ++ and w0, w0, 255 ++ adrp x4, .LANCHOR0 ++ sbfiz x5, x0, 4, 32 ++ add x4, x4, :lo12:.LANCHOR0 ++ add x2, x4, x5 ++ stp x29, x30, [sp, -16]! ++ lsr w3, w1, 16 ++ add x29, sp, 0 ++ ldr x4, [x4, x5] ++ ldrb w2, [x2, 8] ++ add x2, x4, x2, lsl 8 ++ mov w4, 128 ++ str w4, [x2, 2056] ++ and w4, w1, 255 ++ 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 FlashProgFirstCmd, .-FlashProgFirstCmd ++ .align 2 ++ .global FlashEraseCmd ++ .type FlashEraseCmd, %function ++FlashEraseCmd: ++ ubfiz x0, x0, 4, 8 ++ adrp x3, .LANCHOR0 ++ add x3, x3, :lo12:.LANCHOR0 ++ add x5, x3, x0 ++ ldr x4, [x3, x0] ++ ldrb w0, [x5, 8] ++ cbz w2, .L60 ++ 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, 92] ++ add w1, w1, w2 ++.L60: ++ 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: ++ and w0, w0, 255 ++ adrp x4, .LANCHOR0 ++ sbfiz x5, x0, 4, 32 ++ add x4, x4, :lo12:.LANCHOR0 ++ add x2, x4, x5 ++ stp x29, x30, [sp, -16]! ++ lsr w3, w1, 16 ++ add x29, sp, 0 ++ ldrb w6, [x4, 123] ++ ldrb w2, [x2, 8] ++ ldr x4, [x4, x5] ++ 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: ++ stp x29, x30, [sp, -32]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ add x2, x1, x0 ++ stp x19, x20, [sp, 16] ++ ldr x20, [x1, x0] ++ mov x0, 36284 ++ ldrb w19, [x2, 8] ++ movk x0, 0x6, lsl 16 ++ bl __const_udelay ++ add x19, x19, 8 ++ mov w0, 16 ++ add x19, x20, x19, lsl 8 ++ str w0, [x19, 8] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashProgSecondCmd, .-FlashProgSecondCmd ++ .align 2 ++ .global FlashProgDpFirstCmd ++ .type FlashProgDpFirstCmd, %function ++FlashProgDpFirstCmd: ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x3, x1, x0 ++ ldr x2, [x1, x0] ++ ldrb w0, [x3, 8] ++ ldrb w1, [x1, 122] ++ add x0, x0, 8 ++ add x0, x2, x0, lsl 8 ++ str w1, [x0, 8] ++ ret ++ .size FlashProgDpFirstCmd, .-FlashProgDpFirstCmd ++ .align 2 ++ .global FlashReadStatus ++ .type FlashReadStatus, %function ++FlashReadStatus: ++ stp x29, x30, [sp, -32]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ add x2, x1, x0 ++ str x19, [sp, 16] ++ ldr x0, [x1, x0] ++ ldrb w19, [x2, 8] ++ add x19, x0, x19, lsl 8 ++ mov w0, 112 ++ str w0, [x19, 2056] ++ mov x0, 400 ++ bl __const_udelay ++ ldr w0, [x19, 2048] ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashReadStatus, .-FlashReadStatus ++ .align 2 ++ .global js_hash ++ .type js_hash, %function ++js_hash: ++ mov x4, x0 ++ mov w0, 42982 ++ mov x3, 0 ++ movk w0, 0x47c6, lsl 16 ++.L72: ++ cmp w1, w3 ++ bhi .L73 ++ ret ++.L73: ++ lsr w2, w0, 2 ++ ldrb w5, [x4, x3] ++ add w2, w2, w0, lsl 5 ++ add x3, x3, 1 ++ add w2, w2, w5 ++ eor w0, w0, w2 ++ b .L72 ++ .size js_hash, .-js_hash ++ .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]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w1 ++ str x21, [sp, 32] ++ adrp x1, .LANCHOR0 ++ cbnz w0, .L76 ++ add x2, x1, :lo12:.LANCHOR0 ++ mov x0, 0 ++ add x2, x2, 144 ++.L77: ++ strh w0, [x2, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 512 ++ bne .L77 ++.L83: ++ add x20, x1, :lo12:.LANCHOR0 ++ mov w2, 2048 ++ add x21, x20, 1168 ++ mov w1, 255 ++ mov x0, x21 ++ bl ftl_memset ++ and w19, w19, 65535 ++ add x1, x20, 144 ++ mov x2, 0 ++.L78: ++ cmp w19, w2, uxth ++ bhi .L111 ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L76: ++ cmp w0, 1 ++ bne .L79 ++ add x3, x1, :lo12:.LANCHOR0 ++ mov x2, 0 ++ add x3, x3, 144 ++.L82: ++ and w0, w2, 65535 ++ cmp x2, 3 ++ bls .L80 ++ ubfiz w4, w0, 1, 15 ++ and w0, w0, 1 ++ add w0, w0, 2 ++ sub w0, w4, w0 ++ and w0, w0, 65535 ++.L80: ++ strh w0, [x3, x2, lsl 1] ++ add x2, x2, 1 ++ cmp x2, 512 ++ bne .L82 ++ b .L83 ++.L79: ++ cmp w0, 2 ++ bne .L84 ++ add x3, x1, :lo12:.LANCHOR0 ++ mov w2, 65535 ++ add x3, x3, 144 ++ mov x0, 0 ++.L86: ++ cmp x0, 2 ++ and w4, w0, 65535 ++ csel w4, w4, w2, cc ++ strh w4, [x3, x0, lsl 1] ++ add w2, w2, 2 ++ add x0, x0, 1 ++ and w2, w2, 65535 ++ cmp x0, 512 ++ bne .L86 ++ b .L83 ++.L84: ++ cmp w0, 3 ++ bne .L87 ++ add x3, x1, :lo12:.LANCHOR0 ++ mov x2, 0 ++ add x3, x3, 144 ++.L90: ++ and w0, w2, 65535 ++ cmp x2, 5 ++ bls .L88 ++ ubfiz w4, w0, 1, 15 ++ and w0, w0, 1 ++ add w0, w0, 4 ++ sub w0, w4, w0 ++ and w0, w0, 65535 ++.L88: ++ strh w0, [x3, x2, lsl 1] ++ add x2, x2, 1 ++ cmp x2, 512 ++ bne .L90 ++ b .L83 ++.L87: ++ cmp w0, 4 ++ bne .L91 ++ add x3, x1, :lo12:.LANCHOR0 ++ mov w4, 1 ++ add x3, x3, 160 ++ strh w0, [x3, -8] ++ mov w0, 5 ++ strh w4, [x3, -14] ++ mov w4, 2 ++ strh w0, [x3, -6] ++ mov w0, 7 ++ strh w4, [x3, -12] ++ mov w4, 3 ++ strh w0, [x3, -4] ++ mov w0, 8 ++ strh wzr, [x3, -16] ++ strh w0, [x3, -2] ++ mov w0, 8 ++ strh w4, [x3, -10] ++.L93: ++ and w4, w0, 1 ++ ubfiz w2, w0, 1, 15 ++ add w4, w4, 6 ++ add w0, w0, 1 ++ sub w2, w2, w4 ++ strh w2, [x3], 2 ++ and w0, w0, 65535 ++ cmp w0, 512 ++ bne .L93 ++ b .L83 ++.L91: ++ cmp w0, 5 ++ bne .L94 ++ add x2, x1, :lo12:.LANCHOR0 ++ mov x0, 0 ++ add x3, x2, 144 ++.L95: ++ strh w0, [x3, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 16 ++ bne .L95 ++ add x2, x2, 176 ++.L96: ++ strh w0, [x2], 2 ++ add w0, w0, 2 ++ and w0, w0, 65535 ++ cmp w0, 1008 ++ bne .L96 ++ b .L83 ++.L94: ++ cmp w0, 6 ++ bne .L97 ++ add x4, x1, :lo12:.LANCHOR0 ++ mov w2, 0 ++ add x4, x4, 144 ++ mov x3, 0 ++ mov w5, 12 ++ mov w6, 10 ++.L100: ++ and w0, w3, 65535 ++ cmp x3, 5 ++ bls .L98 ++ tst x0, 1 ++ csel w0, w5, w6, ne ++ sub w0, w2, w0 ++ and w0, w0, 65535 ++.L98: ++ strh w0, [x4, x3, lsl 1] ++ add w2, w2, 3 ++ and w2, w2, 65535 ++ add x3, x3, 1 ++ cmp w2, 1536 ++ bne .L100 ++ b .L83 ++.L97: ++ cmp w0, 9 ++ bne .L101 ++ add x0, x1, :lo12:.LANCHOR0 ++ mov w3, 1 ++ add x2, x0, 150 ++ strh w3, [x0, 146] ++ mov w3, 2 ++ strh wzr, [x0, 144] ++ strh w3, [x0, 148] ++ mov w0, 3 ++.L102: ++ strh w0, [x2], 2 ++ add w0, w0, 2 ++ and w0, w0, 65535 ++ cmp w0, 1021 ++ bne .L102 ++ b .L83 ++.L101: ++ cmp w0, 10 ++ bne .L103 ++ add x2, x1, :lo12:.LANCHOR0 ++ mov x0, 0 ++ add x3, x2, 144 ++.L104: ++ strh w0, [x3, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 63 ++ bne .L104 ++ add x2, x2, 270 ++.L105: ++ strh w0, [x2], 2 ++ add w0, w0, 2 ++ and w0, w0, 65535 ++ cmp w0, 961 ++ bne .L105 ++ b .L83 ++.L103: ++ cmp w0, 11 ++ bne .L106 ++ add x2, x1, :lo12:.LANCHOR0 ++ mov x0, 0 ++ add x3, x2, 144 ++.L107: ++ strh w0, [x3, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 8 ++ bne .L107 ++ add x2, x2, 160 ++.L109: ++ and w4, w0, 1 ++ ubfiz w3, w0, 1, 15 ++ add w4, w4, 6 ++ add w0, w0, 1 ++ sub w3, w3, w4 ++ strh w3, [x2], 2 ++ and w0, w0, 65535 ++ cmp w0, 512 ++ bne .L109 ++ b .L83 ++.L106: ++ cmp w0, 12 ++ bne .L83 ++ add x0, x1, :lo12:.LANCHOR0 ++ mov w3, 1 ++ add x2, x0, 152 ++ strh w3, [x0, 146] ++ mov w3, 2 ++ strh wzr, [x0, 144] ++ strh w3, [x0, 148] ++ mov w3, 3 ++ strh w3, [x0, 150] ++ mov w0, 4 ++.L110: ++ sub w3, w0, #1 ++ add w3, w3, w0, lsr 1 ++ add w0, w0, 1 ++ strh w3, [x2], 2 ++ and w0, w0, 65535 ++ cmp w0, 512 ++ bne .L110 ++ b .L83 ++.L111: ++ ldrh w0, [x1, x2, lsl 1] ++ add x2, x2, 1 ++ strh w0, [x21, w0, sxtw 1] ++ b .L78 ++ .size BuildFlashLsbPageTable, .-BuildFlashLsbPageTable ++ .align 2 ++ .global FlashPrintInfo ++ .type FlashPrintInfo, %function ++FlashPrintInfo: ++ ret ++ .size FlashPrintInfo, .-FlashPrintInfo ++ .align 2 ++ .global ToshibaSetRRPara ++ .type ToshibaSetRRPara, %function ++ToshibaSetRRPara: ++ stp x29, x30, [sp, -80]! ++ and w1, w1, 255 ++ add w2, w1, 1 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov x21, x0 ++ mov w0, 5 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ adrp x23, g_maxRegNum ++ umull x2, w2, w0 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ stp x19, x20, [sp, 16] ++ add x25, x0, 256 ++ add x24, x0, 352 ++ add x25, x25, x2 ++ add x24, x24, x2 ++ add x23, x23, :lo12:g_maxRegNum ++ mov x19, x0 ++ add x22, x0, w1, sxtw ++ mov x20, 0 ++ mov w26, 85 ++.L135: ++ ldrb w0, [x23] ++ cmp w0, w20 ++ bhi .L139 ++ 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 ++.L139: ++ add x0, x19, 352 ++ str w26, [x21, 8] ++ ldrsb w0, [x20, x0] ++ str w0, [x21, 4] ++ mov x0, 1000 ++ bl __const_udelay ++ adrp x0, g_retryMode ++ ldrb w0, [x0, #:lo12:g_retryMode] ++ cmp w0, 34 ++ bne .L136 ++ ldrsb w0, [x24, x20] ++.L141: ++ add x20, x20, 1 ++ str w0, [x21] ++ b .L135 ++.L136: ++ cmp w0, 35 ++ bne .L138 ++ ldrsb w0, [x25, x20] ++ b .L141 ++.L138: ++ ldrsb w0, [x22, 400] ++ b .L141 ++ .size ToshibaSetRRPara, .-ToshibaSetRRPara ++ .align 2 ++ .global SamsungSetRRPara ++ .type SamsungSetRRPara, %function ++SamsungSetRRPara: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov x22, x0 ++ ubfiz x21, x1, 2, 8 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ add x21, x21, 4 ++ add x0, x0, 408 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ add x21, x0, x21 ++ adrp x23, g_maxRegNum ++ mov x19, x0 ++ add x23, x23, :lo12:g_maxRegNum ++ mov x20, 0 ++ mov w24, 161 ++.L143: ++ ldrb w0, [x23] ++ cmp w0, w20 ++ bhi .L144 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L144: ++ str w24, [x22, 8] ++ str wzr, [x22] ++ ldrsb w0, [x20, x19] ++ str w0, [x22] ++ ldrsb w0, [x21, x20] ++ add x20, x20, 1 ++ str w0, [x22] ++ mov x0, 1500 ++ bl __const_udelay ++ b .L143 ++ .size SamsungSetRRPara, .-SamsungSetRRPara ++ .align 2 ++ .global FlashDieInfoInit ++ .type FlashDieInfoInit, %function ++FlashDieInfoInit: ++ stp x29, x30, [sp, -48]! ++ adrp x0, .LANCHOR1+482 ++ add x29, sp, 0 ++ ldrh w0, [x0, #:lo12:.LANCHOR1+482] ++ stp x19, x20, [sp, 16] ++ str x21, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x19, x21, :lo12:.LANCHOR0 ++ add x20, x19, 3228 ++ strb wzr, [x19, 3216] ++ strb wzr, [x19, 3217] ++ bl FlashBlockAlignInit ++ mov w2, 8 ++ mov w1, 0 ++ add x0, x19, 3220 ++ bl ftl_memset ++ mov w2, 32 ++ mov w1, 0 ++ mov x0, x20 ++ bl ftl_memset ++ mov w2, 192 ++ mov w1, 0 ++ add x0, x19, 3260 ++ bl ftl_memset ++ ldr x7, [x19, 104] ++ adrp x0, IDByte ++ add x13, x19, 3072 ++ add x11, x0, :lo12:IDByte ++ mov x10, x0 ++ add x12, x7, 1 ++ mov x8, 0 ++.L148: ++ ldrb w2, [x7] ++ add x1, x11, x8, lsl 3 ++ mov x0, x12 ++ bl FlashMemCmp8 ++ cbnz w0, .L147 ++ ldrb w0, [x19, 3216] ++ add w1, w0, 1 ++ strb w1, [x19, 3216] ++ str wzr, [x20, x0, lsl 2] ++ add x0, x13, x0 ++ strb w8, [x0, 148] ++.L147: ++ add x8, x8, 1 ++ cmp x8, 4 ++ bne .L148 ++ add x8, x21, :lo12:.LANCHOR0 ++ ldrb w0, [x8, 3216] ++ strb w0, [x8, 3217] ++ ldrb w0, [x7, 8] ++ cmp w0, 2 ++ beq .L149 ++.L153: ++ add x9, x21, :lo12:.LANCHOR0 ++ ldrh w1, [x7, 14] ++ ldp x19, x20, [sp, 16] ++ ldrb w0, [x9, 3216] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ mul w0, w0, w1 ++ ldrb w1, [x7, 13] ++ mul w0, w0, w1 ++ strh w0, [x9, 3452] ++ ret ++.L149: ++ ldr w14, [x8, 92] ++ add x10, x10, :lo12:IDByte ++ add x13, x8, 3228 ++ add x15, x8, 3072 ++ mov x11, 0 ++.L152: ++ ldrb w2, [x7] ++ add x1, x10, x11, lsl 3 ++ mov x0, x12 ++ bl FlashMemCmp8 ++ cbnz w0, .L150 ++ ldrb w1, [x7, 13] ++ ldrh w0, [x7, 14] ++ ldrb w2, [x8, 3216] ++ and w0, w0, 65280 ++ mul w1, w1, w14 ++ mul w0, w0, w1 ++ sxtw x1, w2 ++ str w0, [x13, x1, lsl 2] ++ ldrb w3, [x7, 23] ++ cbz w3, .L151 ++ lsl w0, w0, 1 ++ str w0, [x13, x1, lsl 2] ++.L151: ++ add x1, x15, x1 ++ add w2, w2, 1 ++ strb w2, [x8, 3216] ++ strb w11, [x1, 148] ++.L150: ++ add x11, x11, 1 ++ cmp x11, 4 ++ bne .L152 ++ b .L153 ++ .size FlashDieInfoInit, .-FlashDieInfoInit ++ .align 2 ++ .global FlashReadIdbData ++ .type FlashReadIdbData, %function ++FlashReadIdbData: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ mov w2, 2048 ++ add x29, sp, 0 ++ add x1, x1, 3456 ++ 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, -48]! ++ adrp x9, IDByte ++ add x9, x9, :lo12:IDByte ++ mov x8, 0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR1 ++ add x7, x19, :lo12:.LANCHOR1 ++ str x21, [sp, 32] ++ add x7, x7, 505 ++.L166: ++ ldrb w2, [x7, -1] ++ mov w10, w8 ++ lsl x21, x8, 5 ++ mov x1, x9 ++ mov x0, x7 ++ bl FlashMemCmp8 ++ mov w20, w0 ++ cbnz w0, .L164 ++ add x2, x19, :lo12:.LANCHOR1 ++ ubfiz x10, x10, 5, 32 ++ add x0, x2, 504 ++ add x1, x2, 3256 ++ add x21, x0, x21 ++ add x0, x0, x10 ++ ldrb w3, [x0, 22] ++ mov x0, 0 ++.L165: ++ lsl x4, x0, 5 ++ mov w2, w0 ++ ldrb w4, [x4, x1] ++ cmp w4, w3 ++ beq .L168 ++ add x0, x0, 1 ++ cmp x0, 4 ++ bne .L165 ++ mov w2, w0 ++.L168: ++ add x19, x19, :lo12:.LANCHOR1 ++ ubfiz x1, x2, 5, 32 ++ add x0, x19, 3256 ++ add x19, x19, 472 ++ add x1, x0, x1 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w2, 32 ++ add x0, x0, 112 ++ bl ftl_memcpy ++ mov w2, 32 ++ mov x1, x21 ++ mov x0, x19 ++ bl ftl_memcpy ++ ldrh w0, [x19, 10] ++ bl FlashBlockAlignInit ++ b .L163 ++.L164: ++ add x8, x8, 1 ++ add x7, x7, 32 ++ cmp x8, 86 ++ bne .L166 ++ mov w20, -1 ++.L163: ++ mov w0, w20 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FlashLoadPhyInfoInRam, .-FlashLoadPhyInfoInRam ++ .align 2 ++ .global ftl_flash_suspend ++ .type ftl_flash_suspend, %function ++ftl_flash_suspend: ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldr x1, [x0, 1152] ++ ldr w2, [x1] ++ str w2, [x0, 1160] ++ ldr w2, [x1, 4] ++ str w2, [x0, 1164] ++ ldr w2, [x1, 8] ++ str w2, [x0, 1168] ++ ldr w2, [x1, 12] ++ str w2, [x0, 1172] ++ ldr w2, [x1, 304] ++ str w2, [x0, 1176] ++ ldr w2, [x1, 308] ++ str w2, [x0, 1180] ++ ldr w2, [x1, 336] ++ ldr w1, [x1, 344] ++ str w2, [x0, 1184] ++ str w1, [x0, 1188] ++ ret ++ .size ftl_flash_suspend, .-ftl_flash_suspend ++ .align 2 ++ .global LogAddr2PhyAddr ++ .type LogAddr2PhyAddr, %function ++LogAddr2PhyAddr: ++ adrp x7, .LANCHOR2 ++ add x6, x7, :lo12:.LANCHOR2 ++ mov x9, x7 ++ ldr w7, [x0, 4] ++ and w4, w4, 255 ++ ldrh w10, [x6, 1204] ++ ldrh w5, [x6, 1206] ++ adrp x6, .LANCHOR0 ++ ubfx x12, x7, 10, 16 ++ and w7, w7, 1023 ++ mul w5, w5, w10 ++ and w10, w5, 65535 ++ add x5, x6, :lo12:.LANCHOR0 ++ ldrh w8, [x5, 92] ++ ldrb w11, [x5, 88] ++ ubfiz w5, w8, 1, 15 ++ cmp w11, 1 ++ csel w8, w5, w8, eq ++ cmp w1, 1 ++ udiv w5, w12, w10 ++ and w11, w5, 65535 ++ msub w5, w5, w10, w12 ++ and w5, w5, 65535 ++ bne .L175 ++ add x1, x9, :lo12:.LANCHOR2 ++ ldrb w1, [x1, 1220] ++ cbnz w1, .L175 ++ add x1, x6, :lo12:.LANCHOR0 ++ add x1, x1, 144 ++ ldrh w7, [x1, w7, sxtw 1] ++.L175: ++ add x6, x6, :lo12:.LANCHOR0 ++ uxtw x1, w11 ++ add x6, x6, 3228 ++ cmp w4, 1 ++ ldr w1, [x6, x1, lsl 2] ++ madd w5, w5, w8, w1 ++ add w5, w5, w7 ++ str w5, [x2] ++ str w11, [x3] ++ bls .L177 ++ ldr w1, [x0, 4] ++ ldr w0, [x0, 60] ++ add w1, w1, 1024 ++ cmp w1, w0 ++ cset w0, eq ++ ret ++.L177: ++ mov w0, 0 ++ ret ++ .size LogAddr2PhyAddr, .-LogAddr2PhyAddr ++ .align 2 ++ .global FlashReadStatusEN ++ .type FlashReadStatusEN, %function ++FlashReadStatusEN: ++ stp x29, x30, [sp, -32]! ++ ubfiz x0, x0, 4, 8 ++ adrp x4, .LANCHOR0 ++ add x3, x4, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ add x5, x3, x0 ++ ldr x20, [x3, x0] ++ ldr x0, [x3, 104] ++ ldrb w19, [x5, 8] ++ ldrb w0, [x0, 8] ++ cmp w0, 2 ++ bne .L179 ++ and w2, w2, 255 ++ add x3, x3, 112 ++ cbnz w2, .L180 ++ ldrb w2, [x3, 13] ++.L190: ++ add x0, x19, 8 ++ add x4, x4, :lo12:.LANCHOR0 ++ add x0, x20, x0, lsl 8 ++ str w2, [x0, 8] ++ ldrb w4, [x4, 127] ++ cbz w4, .L184 ++ add x3, x19, 8 ++ mov w2, 0 ++ add x3, x20, x3, lsl 8 ++.L183: ++ cmp w2, w4 ++ bcc .L185 ++.L184: ++ add x19, x19, 8 ++ mov x0, 400 ++ lsl x19, x19, 8 ++ bl __const_udelay ++ ldr w0, [x20, x19] ++ ldp x19, x20, [sp, 16] ++ and w0, w0, 255 ++ ldp x29, x30, [sp], 32 ++ ret ++.L180: ++ ldrb w2, [x3, 14] ++ b .L190 ++.L185: ++ lsl w0, w2, 3 ++ add w2, w2, 1 ++ lsr w0, w1, w0 ++ and w0, w0, 255 ++ str w0, [x3, 4] ++ b .L183 ++.L179: ++ add x0, x19, 8 ++ mov w1, 112 ++ add x0, x20, x0, lsl 8 ++ str w1, [x0, 8] ++ b .L184 ++ .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] ++ and w19, w0, 255 ++ str x21, [sp, 32] ++ mov w20, w1 ++ and w21, w2, 255 ++.L192: ++ mov w1, w20 ++ mov w2, w21 ++ mov w0, w19 ++ bl FlashReadStatusEN ++ mov w1, w0 ++ cmp w0, 255 ++ beq .L192 ++ tbnz x1, 6, .L191 ++ mov x1, 3 ++ mov x0, 1 ++ bl usleep_range ++ b .L192 ++.L191: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FlashWaitReadyEN, .-FlashWaitReadyEN ++ .align 2 ++ .global ftl_read_flash_info ++ .type ftl_read_flash_info, %function ++ftl_read_flash_info: ++ stp x29, x30, [sp, -32]! ++ mov w2, 11 ++ mov w1, 0 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ mov x19, x0 ++ bl ftl_memset ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w4, 1 ++ ldr x1, [x0, 104] ++ ldrb w2, [x1, 9] ++ ldr w1, [x0, 92] ++ mul w1, w1, w2 ++ strh w1, [x19, 4] ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ ldrb w2, [x1, 1221] ++ ldr w1, [x1, 1224] ++ strb w2, [x19, 7] ++ mov x2, 0 ++ str w1, [x19] ++ ldr x1, [x0, 104] ++ ldrb w3, [x0, 3216] ++ ldrb w1, [x1, 9] ++ strb w1, [x19, 6] ++ mov w1, 32 ++ strb w1, [x19, 8] ++ ldr x1, [x0, 104] ++ add x0, x0, 3220 ++ ldrb w1, [x1, 7] ++ strb w1, [x19, 9] ++ strb wzr, [x19, 10] ++.L199: ++ cmp w3, w2, uxtb ++ bhi .L200 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L200: ++ ldrb w1, [x2, x0] ++ add x2, x2, 1 ++ ldrb w5, [x19, 10] ++ lsl w1, w4, w1 ++ orr w1, w1, w5 ++ strb w1, [x19, 10] ++ b .L199 ++ .size ftl_read_flash_info, .-ftl_read_flash_info ++ .align 2 ++ .global FlashScheduleEnSet ++ .type FlashScheduleEnSet, %function ++FlashScheduleEnSet: ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ ldr w2, [x1, 1228] ++ str w0, [x1, 1228] ++ mov w0, w2 ++ ret ++ .size FlashScheduleEnSet, .-FlashScheduleEnSet ++ .align 2 ++ .global FlashGetPageSize ++ .type FlashGetPageSize, %function ++FlashGetPageSize: ++ adrp x0, .LANCHOR0+104 ++ ldr x0, [x0, #:lo12:.LANCHOR0+104] ++ 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: ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ 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, .LANCHOR2+1152 ++ and w0, w0, 255 ++ lsl w2, w0, 8 ++ ldr x1, [x1, #:lo12:.LANCHOR2+1152] ++ orr w0, w2, w0, lsl 16 ++ orr w0, w0, 1 ++ str w0, [x1, 304] ++ ret ++ .size NandcSetDdrPara, .-NandcSetDdrPara ++ .align 2 ++ .global NandcSetDdrDiv ++ .type NandcSetDdrDiv, %function ++NandcSetDdrDiv: ++ adrp x1, .LANCHOR2+1152 ++ and w0, w0, 255 ++ mov w2, 16640 ++ orr w0, w0, w2 ++ ldr x1, [x1, #:lo12:.LANCHOR2+1152] ++ str w0, [x1, 344] ++ ret ++ .size NandcSetDdrDiv, .-NandcSetDdrDiv ++ .align 2 ++ .global NandcSetDdrMode ++ .type NandcSetDdrMode, %function ++NandcSetDdrMode: ++ adrp x1, .LANCHOR2+1152 ++ cmp w0, 0 ++ ldr x2, [x1, #:lo12:.LANCHOR2+1152] ++ 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, .LANCHOR2+1152 ++ and w0, w0, 255 ++ tst w0, 6 ++ ldr x2, [x1, #:lo12:.LANCHOR2+1152] ++ ldr w1, [x2] ++ beq .L212 ++ orr w1, w1, 24576 ++ tst x0, 4 ++ and w1, w1, -32769 ++ mov w0, 8322 ++ orr w1, w1, 196608 ++ str w0, [x2, 344] ++ mov w0, 4099 ++ orr w3, w1, 32768 ++ movk w0, 0x10, lsl 16 ++ str w0, [x2, 304] ++ csel w1, w3, w1, ne ++ mov w0, 38 ++ str w0, [x2, 308] ++ mov w0, 39 ++ str w0, [x2, 308] ++.L214: ++ mov w0, 0 ++ str w1, [x2] ++ ret ++.L212: ++ and w1, w1, -8193 ++ b .L214 ++ .size NandcSetMode, .-NandcSetMode ++ .align 2 ++ .global NandcFlashCs ++ .type NandcFlashCs, %function ++NandcFlashCs: ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ 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: ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ 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 HynixSetRRPara ++ .type HynixSetRRPara, %function ++HynixSetRRPara: ++ stp x29, x30, [sp, -96]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ and w23, w0, 255 ++ str x27, [sp, 80] ++ adrp x0, .LANCHOR0 ++ and w27, w1, 255 ++ add x1, x0, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ mov x20, x2 ++ stp x21, x22, [sp, 32] ++ mov x2, x0 ++ stp x25, x26, [sp, 64] ++ adrp x21, .LANCHOR2 ++ and w22, w3, 255 ++ add x19, x21, :lo12:.LANCHOR2 ++ ldr x1, [x1, 104] ++ ldrb w1, [x1, 19] ++ cmp w1, 6 ++ bne .L220 ++ ubfiz x0, x23, 6, 8 ++ add x19, x19, 1232 ++ add x0, x0, 20 ++ add x0, x0, w22, uxtw 2 ++.L227: ++ add x19, x19, x0 ++.L221: ++ sxtw x25, w23 ++ add x0, x2, :lo12:.LANCHOR0 ++ lsl x1, x25, 4 ++ and x27, x27, 255 ++ add x2, x0, x1 ++ mov x26, 0 ++ ldr x24, [x0, x1] ++ mov w0, w23 ++ ldrb w5, [x2, 8] ++ bl NandcFlashCs ++ ubfiz x5, x5, 8, 8 ++ add x24, x24, x5 ++ mov w0, 54 ++ str w0, [x24, 2056] ++.L224: ++ cmp x26, x27 ++ bne .L225 ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w0, 22 ++ add x21, x21, x25 ++ str w0, [x24, 2056] ++ mov w0, w23 ++ bl NandcFlashDeCs ++ strb w22, [x21, 2088] ++ 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 ++.L220: ++ cmp w1, 7 ++ bne .L222 ++ mov w0, 160 ++ mov x1, 28 ++ add x19, x19, 1232 ++ umaddl x1, w0, w23, x1 ++ mov w0, 10 ++ umaddl x0, w22, w0, x1 ++ b .L227 ++.L222: ++ cmp w1, 8 ++ bne .L223 ++ add x0, x19, 1260 ++ add w19, w22, w22, lsl 2 ++ add x19, x0, w19, sxtw ++ b .L221 ++.L223: ++ and x0, x22, 255 ++ add x0, x0, 2 ++ add x0, x0, w23, uxtw 3 ++ add x19, x19, x0, lsl 3 ++ add x19, x19, 1236 ++ b .L221 ++.L225: ++ ldrb w0, [x20, x26] ++ str w0, [x24, 2052] ++ mov x0, 1000 ++ bl __const_udelay ++ ldrsb w0, [x19, x26] ++ add x26, x26, 1 ++ str w0, [x24, 2048] ++ b .L224 ++ .size HynixSetRRPara, .-HynixSetRRPara ++ .align 2 ++ .global FlashSetReadRetryDefault ++ .type FlashSetReadRetryDefault, %function ++FlashSetReadRetryDefault: ++ adrp x0, .LANCHOR0+104 ++ ldr x0, [x0, #:lo12:.LANCHOR0+104] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 7 ++ bhi .L235 ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x20, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ adrp x21, IDByte ++ add x22, x20, 1236 ++ add x21, x21, :lo12:IDByte ++ mov x19, 0 ++.L231: ++ lsl x1, x19, 3 ++ and w0, w19, 255 ++ ldrb w1, [x1, x21] ++ cmp w1, 173 ++ bne .L230 ++ ldrb w1, [x20, 1233] ++ mov w3, 0 ++ mov x2, x22 ++ bl HynixSetRRPara ++.L230: ++ add x19, x19, 1 ++ cmp x19, 4 ++ bne .L231 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L235: ++ ret ++ .size FlashSetReadRetryDefault, .-FlashSetReadRetryDefault ++ .align 2 ++ .global FlashWaitCmdDone ++ .type FlashWaitCmdDone, %function ++FlashWaitCmdDone: ++ and x5, x0, 255 ++ mov x0, 24 ++ stp x29, x30, [sp, -32]! ++ adrp x4, .LANCHOR0 ++ add x4, x4, :lo12:.LANCHOR0 ++ mul x0, x5, x0 ++ add x29, sp, 0 ++ add x1, x4, 3260 ++ stp x19, x20, [sp, 16] ++ add x19, x1, x0 ++ ldr x2, [x19, 8] ++ cbz x2, .L240 ++ ldrb w20, [x1, x0] ++ mov w0, w20 ++ bl NandcFlashCs ++ add x4, x4, 3228 ++ ldr w1, [x19, 4] ++ ldr w0, [x4, x5, lsl 2] ++ cmp w0, 0 ++ mov w0, w20 ++ cset w2, ne ++ bl FlashWaitReadyEN ++ mov w2, w0 ++ mov w0, w20 ++ bl NandcFlashDeCs ++ sbfx x0, x2, 0, 1 ++ ldr x1, [x19, 8] ++ str w0, [x1] ++ str xzr, [x19, 8] ++ ldr x1, [x19, 16] ++ cbz x1, .L240 ++ str w0, [x1] ++ str xzr, [x19, 16] ++.L240: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashWaitCmdDone, .-FlashWaitCmdDone ++ .align 2 ++ .global NandcDelayns ++ .type NandcDelayns, %function ++NandcDelayns: ++ stp x29, x30, [sp, -16]! ++ uxtw x0, w0 ++ add x29, sp, 0 ++ bl __ndelay ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size NandcDelayns, .-NandcDelayns ++ .align 2 ++ .global NandcWaitFlashReadyNoDelay ++ .type NandcWaitFlashReadyNoDelay, %function ++NandcWaitFlashReadyNoDelay: ++ stp x29, x30, [sp, -48]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, 34464 ++ movk w19, 0x1, lsl 16 ++ ldr x20, [x1, x0] ++.L250: ++ ldr w0, [x20] ++ str w0, [x29, 40] ++ ldr w0, [x29, 40] ++ tbnz x0, 9, .L251 ++ mov x0, 50 ++ bl __const_udelay ++ subs w19, w19, #1 ++ bne .L250 ++ mov w0, -1 ++.L248: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L251: ++ mov w0, 0 ++ b .L248 ++ .size NandcWaitFlashReadyNoDelay, .-NandcWaitFlashReadyNoDelay ++ .align 2 ++ .global NandcWaitFlashReady ++ .type NandcWaitFlashReady, %function ++NandcWaitFlashReady: ++ stp x29, x30, [sp, -48]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, 34464 ++ movk w19, 0x1, lsl 16 ++ ldr x20, [x1, x0] ++ mov x0, 650 ++ bl __const_udelay ++.L256: ++ ldr w0, [x20] ++ str w0, [x29, 40] ++ ldr w0, [x29, 40] ++ tbnz x0, 9, .L257 ++ mov x1, 2 ++ mov x0, 1 ++ bl usleep_range ++ subs w19, w19, #1 ++ bne .L256 ++ mov w0, -1 ++.L254: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L257: ++ mov w0, 0 ++ b .L254 ++ .size NandcWaitFlashReady, .-NandcWaitFlashReady ++ .align 2 ++ .global FlashReset ++ .type FlashReset, %function ++FlashReset: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ and w19, w0, 255 ++ sbfiz x1, x19, 4, 32 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ add x2, x0, x1 ++ ldr x5, [x0, x1] ++ mov w0, w19 ++ ldrb w4, [x2, 8] ++ bl NandcFlashCs ++ add x4, x4, 8 ++ add x4, x5, x4, lsl 8 ++ mov w0, 255 ++ str w0, [x4, 8] ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashDeCs ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashReset, .-FlashReset ++ .align 2 ++ .global flash_enter_slc_mode ++ .type flash_enter_slc_mode, %function ++flash_enter_slc_mode: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ adrp x21, .LANCHOR2 ++ add x0, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ str x23, [sp, 48] ++ ldrb w0, [x0, 1220] ++ cbz w0, .L262 ++ mov w0, w22 ++ bl NandcFlashCs ++ sxtw x0, w22 ++ adrp x1, .LANCHOR0 ++ lsl x2, x0, 4 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x3, x1, x2 ++ lsl x0, x0, 3 ++ ldr x23, [x1, x2] ++ adrp x1, IDByte ++ add x1, x1, :lo12:IDByte ++ ldrb w19, [x3, 8] ++ ldrb w0, [x1, x0] ++ cmp w0, 44 ++ bne .L264 ++ ubfiz x20, x19, 8, 8 ++ mov w0, 239 ++ add x20, x23, x20 ++ str w0, [x20, 2056] ++ mov w0, 145 ++ str w0, [x20, 2052] ++ mov x0, 250 ++ bl __const_udelay ++ str wzr, [x20, 2048] ++ mov w0, 1 ++ str w0, [x20, 2048] ++ str wzr, [x20, 2048] ++ mov x0, 500 ++ str wzr, [x20, 2048] ++ bl __const_udelay ++.L264: ++ add x19, x19, 8 ++ mov w0, w22 ++ add x19, x23, x19, lsl 8 ++ bl NandcWaitFlashReadyNoDelay ++ mov w0, 218 ++ add x21, x21, :lo12:.LANCHOR2 ++ str w0, [x19, 8] ++ mov w0, w22 ++ bl NandcWaitFlashReady ++ mov w0, 2 ++ strb w0, [x21, 2092] ++.L262: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ 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: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ adrp x21, .LANCHOR2 ++ add x0, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ str x23, [sp, 48] ++ ldrb w0, [x0, 1220] ++ cbz w0, .L269 ++ mov w0, w22 ++ bl NandcFlashCs ++ sxtw x0, w22 ++ adrp x1, .LANCHOR0 ++ lsl x2, x0, 4 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x3, x1, x2 ++ lsl x0, x0, 3 ++ ldr x23, [x1, x2] ++ adrp x1, IDByte ++ add x1, x1, :lo12:IDByte ++ ldrb w19, [x3, 8] ++ ldrb w0, [x1, x0] ++ cmp w0, 44 ++ bne .L271 ++ ubfiz x20, x19, 8, 8 ++ mov w0, 239 ++ add x20, x23, x20 ++ str w0, [x20, 2056] ++ mov w0, 145 ++ str w0, [x20, 2052] ++ mov x0, 250 ++ bl __const_udelay ++ mov w0, 2 ++ str w0, [x20, 2048] ++ mov w0, 1 ++ str w0, [x20, 2048] ++ str wzr, [x20, 2048] ++ mov x0, 500 ++ str wzr, [x20, 2048] ++ bl __const_udelay ++.L271: ++ add x19, x19, 8 ++ mov w0, w22 ++ add x19, x23, x19, lsl 8 ++ bl NandcWaitFlashReadyNoDelay ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w0, 223 ++ str w0, [x19, 8] ++ mov w0, w22 ++ bl NandcWaitFlashReady ++ strb wzr, [x21, 2092] ++.L269: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size flash_exit_slc_mode, .-flash_exit_slc_mode ++ .align 2 ++ .global FlashEraseBlock ++ .type FlashEraseBlock, %function ++FlashEraseBlock: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 255 ++ mov w20, w1 ++ str x21, [sp, 32] ++ mov w0, w19 ++ mov w21, w2 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashCs ++ mov w2, w21 ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashEraseCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashReadStatus ++ mov w2, w0 ++ mov w0, w19 ++ bl NandcFlashDeCs ++ and w0, w2, 1 ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FlashEraseBlock, .-FlashEraseBlock ++ .align 2 ++ .global FlashSetInterfaceMode ++ .type FlashSetInterfaceMode, %function ++FlashSetInterfaceMode: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR2+2093 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ ldrb w1, [x1, #:lo12:.LANCHOR2+2093] ++ adrp x7, IDByte ++ add x2, x2, 8 ++ add x7, x7, :lo12:IDByte ++ and w11, w1, 4 ++ and w6, w1, 1 ++ mov x5, 0 ++ mov w12, 69 ++ mov w8, 239 ++ mov w9, 128 ++ mov w10, 1 ++ mov w13, 35 ++ mov w14, 32 ++ mov w15, 5 ++ mov w16, 44 ++.L288: ++ ldrb w3, [x5, x7] ++ ldrb w4, [x2] ++ cmp w3, 152 ++ ccmp w3, w12, 4, ne ++ beq .L279 ++ cmp w3, 173 ++ ccmp w3, w16, 4, ne ++ bne .L280 ++.L279: ++ cmp w0, 1 ++ ldr x1, [x2, -8] ++ bne .L281 ++ cbz w6, .L280 ++ ubfiz x4, x4, 8, 8 ++ cmp w3, 173 ++ add x1, x1, x4 ++ str w8, [x1, 2056] ++ bne .L282 ++ str w0, [x1, 2052] ++.L300: ++ str wzr, [x1, 2048] ++ b .L286 ++.L282: ++ cmp w3, 44 ++ bne .L284 ++ str w0, [x1, 2052] ++ str w15, [x1, 2048] ++.L286: ++ str wzr, [x1, 2048] ++ str wzr, [x1, 2048] ++ str wzr, [x1, 2048] ++.L280: ++ add x5, x5, 8 ++ add x2, x2, 16 ++ cmp x5, 32 ++ bne .L288 ++ mov w0, 0 ++ bl NandcWaitFlashReady ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L284: ++ str w9, [x1, 2052] ++ str w0, [x1, 2048] ++ b .L286 ++.L281: ++ cbz w11, .L280 ++ ubfiz x4, x4, 8, 8 ++ cmp w3, 173 ++ add x1, x1, x4 ++ str w8, [x1, 2056] ++ bne .L285 ++ str w10, [x1, 2052] ++ str w14, [x1, 2048] ++ b .L286 ++.L285: ++ cmp w3, 44 ++ bne .L287 ++ str w10, [x1, 2052] ++ str w13, [x1, 2048] ++ b .L286 ++.L287: ++ str w9, [x1, 2052] ++ b .L300 ++ .size FlashSetInterfaceMode, .-FlashSetInterfaceMode ++ .align 2 ++ .global FlashReadSpare ++ .type FlashReadSpare, %function ++FlashReadSpare: ++ stp x29, x30, [sp, -32]! ++ and w0, w0, 255 ++ sbfiz x5, x0, 4, 32 ++ adrp x4, .LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x2 ++ adrp x2, .LANCHOR1+481 ++ add x4, x4, :lo12:.LANCHOR0 ++ ldrb w3, [x2, #:lo12:.LANCHOR1+481] ++ add x2, x4, x5 ++ ldrb w19, [x2, 8] ++ lsl w3, w3, 9 ++ ldr x2, [x4, x5] ++ add x19, x2, x19, lsl 8 ++ and w2, w1, 255 ++ str wzr, [x19, 2056] ++ str w3, [x19, 2052] ++ lsr w3, w3, 8 ++ str w3, [x19, 2052] ++ str w2, [x19, 2052] ++ lsr w2, w1, 8 ++ str w2, [x19, 2052] ++ lsr w1, w1, 16 ++ str w1, [x19, 2052] ++ mov w1, 48 ++ str w1, [x19, 2056] ++ bl NandcWaitFlashReady ++ ldr w0, [x19, 2048] ++ strb w0, [x20] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FlashReadSpare, .-FlashReadSpare ++ .align 2 ++ .global SandiskProgTestBadBlock ++ .type SandiskProgTestBadBlock, %function ++SandiskProgTestBadBlock: ++ stp x29, x30, [sp, -32]! ++ and w0, w0, 255 ++ sbfiz x3, x0, 4, 32 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ add x4, x2, x3 ++ str x19, [sp, 16] ++ ldr x2, [x2, x3] ++ ldrb w19, [x4, 8] ++ add x19, x2, x19, 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 x0, 400 ++ bl __const_udelay ++ 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 ++ and w19, w1, 255 ++ str w0, [x20, 8] ++ mov w0, 17 ++ str w0, [x20, 4] ++ mov x0, 1000 ++ bl __const_udelay ++ add w1, w19, 1 ++ mov w0, 5 ++ adrp x2, g_maxRegNum ++ adrp x4, g_retryMode ++ add x2, x2, :lo12:g_maxRegNum ++ add x4, x4, :lo12:g_retryMode ++ umull x1, w1, w0 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ add x3, x0, 256 ++ add x0, x0, 352 ++ add x3, x3, x1 ++ add x0, x0, x1 ++ mov x1, 0 ++.L306: ++ ldrb w5, [x2] ++ cmp w5, w1 ++ bhi .L309 ++ mov w0, 0 ++ bl NandcWaitFlashReady ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L309: ++ ldrb w5, [x4] ++ cmp w5, 67 ++ bne .L307 ++ ldrsb w5, [x0, x1] ++.L311: ++ add x1, x1, 1 ++ str w5, [x20] ++ b .L306 ++.L307: ++ ldrsb w5, [x3, x1] ++ b .L311 ++ .size SandiskSetRRPara, .-SandiskSetRRPara ++ .align 2 ++ .global micron_auto_read_calibration_config ++ .type micron_auto_read_calibration_config, %function ++micron_auto_read_calibration_config: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 255 ++ mov w20, w1 ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ sbfiz x0, x19, 4, 32 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ add x1, x2, x0 ++ ldr x0, [x2, x0] ++ ldrb w19, [x1, 8] ++ add x19, x0, x19, lsl 8 ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 150 ++ str w0, [x19, 2052] ++ mov x0, 1000 ++ bl __const_udelay ++ str w20, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size micron_auto_read_calibration_config, .-micron_auto_read_calibration_config ++ .align 2 ++ .global FlashEraseSLc2KBlocks ++ .type FlashEraseSLc2KBlocks, %function ++FlashEraseSLc2KBlocks: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w23, 56 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ umaddl x23, w1, w23, x0 ++ add x21, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ and w22, w1, 255 ++ mov x20, x0 ++ add x24, x21, 3072 ++.L315: ++ cmp x20, x23 ++ bne .L320 ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 80 ++ ret ++.L320: ++ mov w1, 0 ++ mov w4, w22 ++ add x3, x29, 76 ++ add x2, x29, 72 ++ mov x0, x20 ++ bl LogAddr2PhyAddr ++ ldrb w1, [x21, 3216] ++ ldr w0, [x29, 76] ++ cmp w1, w0 ++ bhi .L316 ++ mov w0, -1 ++ str w0, [x20] ++.L317: ++ sub w22, w22, #1 ++ add x20, x20, 56 ++ and w22, w22, 255 ++ b .L315 ++.L316: ++ uxtw x0, w0 ++ mov x2, 24 ++ add x1, x24, x0 ++ mul x0, x0, x2 ++ ldrb w19, [x1, 148] ++ add x1, x21, 3260 ++ strb w19, [x1, x0] ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashCs ++ ldr w1, [x29, 72] ++ mov w2, 0 ++ mov w0, w19 ++ bl FlashEraseCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ ldr w1, [x29, 72] ++ mov w0, w19 ++ bl FlashReadStatus ++ sbfx x0, x0, 0, 1 ++ str w0, [x20] ++ mov w2, 0 ++ ldr w1, [x29, 72] ++ ldr w0, [x21, 92] ++ add w1, w1, w0 ++ mov w0, w19 ++ bl FlashEraseCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ ldr w1, [x29, 72] ++ mov w0, w19 ++ bl FlashReadStatus ++ tbz x0, 0, .L318 ++ mov w0, -1 ++ str w0, [x20] ++.L318: ++ ldr w0, [x20] ++ cmn w0, #1 ++ bne .L319 ++ ldr w1, [x29, 72] ++ adrp x0, .LC1 ++ add x0, x0, :lo12:.LC1 ++ bl printk ++.L319: ++ mov w0, w19 ++ bl NandcFlashDeCs ++ b .L317 ++ .size FlashEraseSLc2KBlocks, .-FlashEraseSLc2KBlocks ++ .align 2 ++ .global FlashEraseBlocks ++ .type FlashEraseBlocks, %function ++FlashEraseBlocks: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ stp x25, x26, [sp, 64] ++ mov w25, w1 ++ add x1, x19, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ stp x21, x22, [sp, 32] ++ mov w23, w2 ++ str x27, [sp, 80] ++ ldrb w1, [x1, 88] ++ cbnz w1, .L326 ++ adrp x26, .LANCHOR2 ++ mov x20, x0 ++ add x27, x26, :lo12:.LANCHOR2 ++ mov w21, 0 ++.L327: ++ cmp w21, w23 ++ bcc .L336 ++ add x19, x19, :lo12:.LANCHOR0 ++ adrp x22, .LANCHOR2 ++ add x24, x19, 3260 ++ add x22, x22, :lo12:.LANCHOR2 ++ mov x21, 0 ++ mov x26, 24 ++.L337: ++ ldrb w0, [x19, 3216] ++ cmp w0, w21 ++ bhi .L339 ++ adrp x0, .LANCHOR2+2096 ++ ldr w0, [x0, #:lo12:.LANCHOR2+2096] ++ cbnz w0, .L340 ++.L341: ++ mov w0, 0 ++ b .L325 ++.L326: ++ mov w1, w2 ++ bl FlashEraseSLc2KBlocks ++.L325: ++ 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 ++.L336: ++ mov w13, 56 ++ add x2, x29, 104 ++ mov w1, 0 ++ sub w4, w23, w21 ++ umull x13, w21, w13 ++ add x3, x29, 108 ++ add x22, x20, x13 ++ mov x0, x22 ++ bl LogAddr2PhyAddr ++ mov w24, w0 ++ add x1, x19, :lo12:.LANCHOR0 ++ ldr w0, [x29, 108] ++ ldrb w2, [x1, 3216] ++ cmp w2, w0 ++ bhi .L329 ++ mov w0, -1 ++ str w0, [x20, x13] ++.L330: ++ add w21, w21, 1 ++ b .L327 ++.L329: ++ add x2, x26, :lo12:.LANCHOR2 ++ mov x3, 24 ++ ldrb w2, [x2, 2094] ++ cmp w2, 0 ++ add x2, x1, 3260 ++ uxtw x1, w0 ++ csel w24, w24, wzr, ne ++ madd x1, x1, x3, x2 ++ ldr x1, [x1, 8] ++ cbz x1, .L332 ++ bl FlashWaitCmdDone ++.L332: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr w1, [x29, 108] ++ add x2, x0, 3260 ++ mov x0, 24 ++ madd x0, x1, x0, x2 ++ ldr w2, [x29, 104] ++ str w2, [x0, 4] ++ stp x22, xzr, [x0, 8] ++ cbz w24, .L333 ++ add w2, w21, 1 ++ mov w3, 56 ++ umaddl x2, w2, w3, x20 ++ str x2, [x0, 16] ++.L333: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x2, x0, x1 ++ add x0, x0, 3260 ++ ldrb w22, [x2, 3220] ++ mov x2, 24 ++ mul x1, x1, x2 ++ strb w22, [x0, x1] ++ mov w0, w22 ++ bl NandcFlashCs ++ cmp w25, 1 ++ bne .L334 ++ ldrb w0, [x27, 1220] ++ cbz w0, .L334 ++ mov w0, w22 ++ bl flash_enter_slc_mode ++.L335: ++ ldr w1, [x29, 108] ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 3228 ++ add w21, w21, w24 ++ ldr w0, [x0, x1, lsl 2] ++ ldr w1, [x29, 104] ++ cmp w0, 0 ++ mov w0, w22 ++ cset w2, ne ++ bl FlashWaitReadyEN ++ ldr w1, [x29, 104] ++ mov w2, w24 ++ mov w0, w22 ++ bl FlashEraseCmd ++ mov w0, w22 ++ bl NandcFlashDeCs ++ b .L330 ++.L334: ++ mov w0, w22 ++ bl flash_exit_slc_mode ++ b .L335 ++.L339: ++ mov w0, w21 ++ bl FlashWaitCmdDone ++ cmp w25, 1 ++ bne .L338 ++ ldrb w0, [x22, 1220] ++ cbz w0, .L338 ++ mul x0, x21, x26 ++ ldrb w0, [x0, x24] ++ bl flash_exit_slc_mode ++.L338: ++ add x21, x21, 1 ++ b .L337 ++.L340: ++ adrp x0, IDByte ++ ldrb w0, [x0, #:lo12:IDByte] ++ cmp w0, 69 ++ bne .L341 ++ mov w0, 56 ++ umaddl x23, w23, w0, x20 ++.L342: ++ cmp x23, x20 ++ beq .L341 ++ str wzr, [x20], 56 ++ b .L342 ++ .size FlashEraseBlocks, .-FlashEraseBlocks ++ .align 2 ++ .global HynixGetReadRetryDefault ++ .type HynixGetReadRetryDefault, %function ++HynixGetReadRetryDefault: ++ stp x29, x30, [sp, -128]! ++ mov w3, -83 ++ mov w2, -82 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x1, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ mov w20, w0 ++ add x0, x1, 1232 ++ stp x23, x24, [sp, 48] ++ cmp w20, 2 ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ strb w20, [x1, 1232] ++ mov w1, -84 ++ strb w3, [x0, 5] ++ strb w1, [x0, 4] ++ mov w1, -81 ++ strb w2, [x0, 6] ++ strb w1, [x0, 7] ++ bne .L358 ++ mov w1, -89 ++ strb w1, [x0, 4] ++ adrp x0, .LANCHOR1+3401 ++ mov w1, -9 ++ strb w1, [x0, #:lo12:.LANCHOR1+3401] ++.L423: ++ mov w27, 7 ++ b .L467 ++.L358: ++ cmp w20, 3 ++ bne .L360 ++ mov w1, -80 ++ strb w1, [x0, 4] ++ mov w1, -79 ++ strb w1, [x0, 5] ++ mov w1, -78 ++ strb w1, [x0, 6] ++ mov w1, -77 ++ strb w1, [x0, 7] ++ mov w1, -76 ++ strb w1, [x0, 8] ++ mov w1, -75 ++ strb w1, [x0, 9] ++ mov w1, -74 ++ strb w1, [x0, 10] ++ mov w1, -73 ++.L466: ++ mov w27, 8 ++ mov w28, w27 ++ strb w1, [x0, 11] ++.L359: ++ sub w0, w20, #1 ++ cmp w0, 1 ++ bhi .L365 ++ adrp x25, .LANCHOR0 ++ adrp x26, .LANCHOR1 ++ add x25, x25, :lo12:.LANCHOR0 ++ add x26, x26, :lo12:.LANCHOR1 ++ add x3, x25, 3072 ++ add x26, x26, 3384 ++ mov w24, 0 ++.L366: ++ ldrb w0, [x25, 3216] ++ cmp w0, w24 ++ bhi .L372 ++.L373: ++ add x21, x21, :lo12:.LANCHOR2 ++ ldp x19, x20, [sp, 16] ++ strb w28, [x21, 1233] ++ strb w27, [x21, 1234] ++ ldp x23, x24, [sp, 48] ++ ldp x21, x22, [sp, 32] ++ ldp x25, x26, [sp, 64] ++ ldp x27, x28, [sp, 80] ++ ldp x29, x30, [sp], 128 ++ ret ++.L360: ++ cmp w20, 4 ++ bne .L361 ++ mov w4, -52 ++ strb w4, [x0, 4] ++ mov w4, -65 ++ strb w4, [x0, 5] ++ mov w4, -86 ++ strb w4, [x0, 6] ++ mov w4, -85 ++ strb w3, [x0, 9] ++ strb w4, [x0, 7] ++ mov w4, -51 ++ strb w2, [x0, 10] ++ strb w4, [x0, 8] ++ b .L466 ++.L361: ++ cmp w20, 5 ++ bne .L362 ++ mov w1, 56 ++ strb w1, [x0, 4] ++ mov w1, 57 ++ strb w1, [x0, 5] ++ mov w1, 58 ++ mov w27, 8 ++ strb w1, [x0, 6] ++ mov w1, 59 ++ strb w1, [x0, 7] ++.L467: ++ mov w28, 4 ++ b .L359 ++.L362: ++ cmp w20, 6 ++ bne .L363 ++ mov w1, 14 ++ strb w1, [x0, 4] ++ mov w1, 15 ++ strb w1, [x0, 5] ++ mov w1, 16 ++ mov w27, 12 ++ strb w1, [x0, 6] ++ mov w1, 17 ++ strb w1, [x0, 7] ++ b .L467 ++.L363: ++ cmp w20, 7 ++ bne .L364 ++ mov w1, -80 ++ strb w1, [x0, 4] ++ mov w1, -79 ++ strb w1, [x0, 5] ++ mov w1, -78 ++ strb w1, [x0, 6] ++ mov w1, -77 ++ strb w1, [x0, 7] ++ mov w1, -76 ++ strb w1, [x0, 8] ++ mov w1, -75 ++ strb w1, [x0, 9] ++ mov w1, -74 ++ strb w1, [x0, 10] ++ mov w1, -73 ++ strb w1, [x0, 11] ++ mov w1, -44 ++ mov w27, 12 ++ strb w1, [x0, 12] ++ mov w28, 10 ++ mov w1, -43 ++ strb w1, [x0, 13] ++ b .L359 ++.L364: ++ cmp w20, 8 ++ bne .L423 ++ mov w1, 6 ++ strb w1, [x0, 4] ++ mov w1, 7 ++ strb w1, [x0, 5] ++ mov w1, 9 ++ strb w20, [x0, 6] ++ strb w1, [x0, 7] ++ mov w27, 50 ++ mov w1, 10 ++ mov w28, 5 ++ strb w1, [x0, 8] ++ b .L359 ++.L372: ++ add x0, x3, w24, sxtw ++ mov x22, 0 ++ ldrb w1, [x0, 148] ++ add x0, x21, :lo12:.LANCHOR2 ++ add x0, x0, 1232 ++ mov x20, x0 ++ ubfiz x19, x1, 6, 8 ++ sbfiz x1, x1, 4, 32 ++ add x2, x25, x1 ++ add x19, x19, 20 ++ add x19, x0, x19 ++ ldr x1, [x25, x1] ++ ldrb w23, [x2, 8] ++ add x23, x1, x23, lsl 8 ++ mov w1, 55 ++.L367: ++ add x0, x20, x22 ++ str w1, [x23, 2056] ++ str x3, [x29, 112] ++ str w1, [x29, 124] ++ ldrb w0, [x0, 4] ++ str w0, [x23, 2052] ++ mov x0, 400 ++ bl __const_udelay ++ ldr w0, [x23, 2048] ++ strb w0, [x19, x22] ++ add x22, x22, 1 ++ cmp w28, w22, uxtb ++ ldr w1, [x29, 124] ++ ldr x3, [x29, 112] ++ bhi .L367 ++ mov x0, 0 ++.L370: ++ add x1, x0, 4 ++ add x2, x0, 28 ++ add w5, w0, 8 ++ add x1, x26, x1 ++ add x2, x26, x2 ++.L369: ++ ldrb w6, [x19, x0] ++ ldrb w7, [x1], 4 ++ add w6, w6, w7 ++ strb w6, [x19, w5, sxtw] ++ cmp x2, x1 ++ add w5, w5, 8 ++ bne .L369 ++ add x0, x0, 1 ++ cmp x0, 4 ++ bne .L370 ++ add w24, w24, 1 ++ strb wzr, [x19, 16] ++ strb wzr, [x19, 24] ++ and w24, w24, 255 ++ strb wzr, [x19, 32] ++ strb wzr, [x19, 40] ++ strb wzr, [x19, 48] ++ strb wzr, [x19, 41] ++ strb wzr, [x19, 49] ++ b .L366 ++.L365: ++ sub w0, w20, #3 ++ cmp w0, 5 ++ bhi .L373 ++ mul w26, w28, w27 ++ sub w25, w28, #1 ++ adrp x24, .LANCHOR0 ++ and x25, x25, 255 ++ mov w22, 0 ++ lsl w0, w26, 4 ++ asr w23, w26, 1 ++ str w0, [x29, 112] ++ add x26, x24, :lo12:.LANCHOR0 ++ lsl w0, w23, 1 ++ str w0, [x29, 124] ++ add x0, x25, 1 ++ str x0, [x29, 104] ++.L374: ++ ldrb w0, [x26, 3216] ++ cmp w0, w22 ++ bls .L373 ++ add x0, x26, w22, sxtw ++ ldrb w25, [x0, 3220] ++ sbfiz x0, x25, 4, 32 ++ add x1, x26, x0 ++ ldr x0, [x26, x0] ++ ldrb w19, [x1, 8] ++ add x19, x0, x19, lsl 8 ++ mov w0, 255 ++ str w0, [x19, 2056] ++ mov w0, w25 ++ bl NandcWaitFlashReady ++ cmp w20, 7 ++ sub w6, w20, #5 ++ bne .L375 ++ mov x1, 28 ++ mov w0, 160 ++ add x2, x21, :lo12:.LANCHOR2 ++ umaddl x0, w0, w25, x1 ++ add x2, x2, 1232 ++ add x2, x2, x0 ++.L376: ++ mov w0, 54 ++ str w0, [x19, 2056] ++ cmp w20, 4 ++ bne .L378 ++ mov w0, 255 ++ str w0, [x19, 2052] ++ mov w0, 64 ++ str w0, [x19, 2048] ++ mov w0, 204 ++.L468: ++ str w0, [x19, 2052] ++ mov w0, 77 ++ b .L469 ++.L375: ++ cmp w20, 8 ++ beq .L377 ++ add x2, x21, :lo12:.LANCHOR2 ++ ubfiz x0, x25, 6, 8 ++ add x2, x2, x0 ++ add x2, x2, 1252 ++ b .L376 ++.L378: ++ cmp w6, 1 ++ bhi .L380 ++ add x0, x21, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 1236] ++ str w0, [x19, 2052] ++ mov w0, 82 ++.L469: ++ str w0, [x19, 2048] ++.L379: ++ 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] ++ str wzr, [x19, 2056] ++ cmp w20, 6 ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ bne .L381 ++ mov w0, 31 ++ str w0, [x19, 2052] ++.L382: ++ mov w0, 2 ++ str w0, [x19, 2052] ++ str wzr, [x19, 2052] ++.L422: ++ mov w0, 48 ++ str w0, [x19, 2056] ++ str x2, [x29, 96] ++ mov w0, w25 ++ str w6, [x29, 120] ++ bl NandcWaitFlashReady ++ ldr w6, [x29, 120] ++ ldr x2, [x29, 96] ++ cmp w6, 1 ++ ccmp w20, 8, 4, hi ++ beq .L424 ++ cmp w20, 7 ++ mov w0, 2 ++ mov w1, 32 ++ csel w1, w1, w0, eq ++.L383: ++ add x0, x24, :lo12:.LANCHOR0 ++ mov x7, 0 ++ ldr x0, [x0, 64] ++.L384: ++ ldr w8, [x19, 2048] ++ strb w8, [x0, x7] ++ add x7, x7, 1 ++ cmp w1, w7, uxtb ++ bhi .L384 ++ cmp w20, 8 ++ bne .L385 ++ mov w1, 0 ++.L387: ++ ldrb w7, [x0] ++ cmp w7, 50 ++ beq .L386 ++ ldrb w7, [x0, 1] ++ cmp w7, 5 ++ beq .L386 ++ add w1, w1, 1 ++ add x0, x0, 4 ++ and w1, w1, 255 ++ cmp w1, 8 ++ bne .L387 ++.L388: ++ adrp x0, .LC2 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC2 ++ bl printk ++.L390: ++ b .L390 ++.L380: ++ cmp w20, 7 ++ bne .L379 ++ mov w0, 174 ++ str w0, [x19, 2052] ++ str wzr, [x19, 2048] ++ mov w0, 176 ++ b .L468 ++.L381: ++ str wzr, [x19, 2052] ++ b .L382 ++.L424: ++ mov w1, 16 ++ b .L383 ++.L386: ++ cmp w1, 6 ++ bhi .L388 ++.L389: ++ add x0, x24, :lo12:.LANCHOR0 ++ ldr x7, [x0, 64] ++ mov x0, 0 ++.L399: ++ ldr w1, [x29, 112] ++ cmp w1, w0 ++ bgt .L400 ++ add x0, x24, :lo12:.LANCHOR0 ++ mov w9, w23 ++ mov w8, 8 ++ ldr x11, [x0, 64] ++.L402: ++ mov w0, 0 ++.L401: ++ add w1, w0, w9 ++ add w0, w0, 1 ++ sbfiz x1, x1, 1, 32 ++ cmp w23, w0 ++ ldrh w10, [x11, x1] ++ mvn w10, w10 ++ strh w10, [x11, x1] ++ bgt .L401 ++ ldr w0, [x29, 124] ++ subs w8, w8, #1 ++ add w9, w9, w0 ++ bne .L402 ++ mov x1, 0 ++ mov w14, 1 ++.L408: ++ mov w0, 0 ++ mov w8, 0 ++.L407: ++ mov w10, w1 ++ lsl w13, w14, w8 ++ mov w12, 16 ++ mov w9, 0 ++.L405: ++ ldrh w15, [x11, w10, sxtw 1] ++ add w10, w10, w23 ++ bics wzr, w13, w15 ++ cinc w9, w9, eq ++ subs w12, w12, #1 ++ bne .L405 ++ cmp w9, 8 ++ bls .L406 ++ orr w0, w0, w13 ++ and w0, w0, 65535 ++.L406: ++ add w8, w8, 1 ++ cmp w8, 16 ++ bne .L407 ++ strh w0, [x11, x1, lsl 1] ++ add x1, x1, 1 ++ cmp w23, w1 ++ bgt .L408 ++ add x0, x24, :lo12:.LANCHOR0 ++ mov w8, 0 ++ ldr x1, [x0, 64] ++ mov x0, 0 ++.L411: ++ ldr w9, [x1, x0] ++ add x0, x0, 4 ++ cmp w9, 0 ++ cinc w8, w8, eq ++ cmp x0, 32 ++ bne .L411 ++ cmp w8, 7 ++ ble .L412 ++ mov w3, 1024 ++ mov w2, 1 ++ adrp x0, .LC3 ++ add x0, x0, :lo12:.LC3 ++ bl rknand_print_hex ++ adrp x0, .LC2 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC2 ++ bl printk ++.L413: ++ b .L413 ++.L385: ++ cmp w20, 7 ++ bne .L391 ++ mov w1, 0 ++.L393: ++ ldrb w7, [x0] ++ cmp w7, 12 ++ beq .L392 ++ ldrb w7, [x0, 1] ++ cmp w7, 10 ++ beq .L392 ++ add w1, w1, 1 ++ add x0, x0, 4 ++ and w1, w1, 255 ++ cmp w1, 8 ++ bne .L393 ++.L394: ++ adrp x0, .LC2 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC2 ++ bl printk ++.L395: ++ b .L395 ++.L392: ++ cmp w1, 6 ++ bls .L389 ++ b .L394 ++.L391: ++ cmp w20, 6 ++ bne .L389 ++ mov x1, 0 ++.L396: ++ ldrb w7, [x0, x1] ++ cmp w7, 12 ++ beq .L389 ++ add x7, x0, x1 ++ ldrb w7, [x7, 8] ++ cmp w7, 4 ++ beq .L389 ++ add x1, x1, 1 ++ cmp x1, 8 ++ bne .L396 ++ adrp x0, .LC2 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC2 ++ bl printk ++.L398: ++ b .L398 ++.L400: ++ ldr w1, [x19, 2048] ++ strb w1, [x7, x0] ++ add x0, x0, 1 ++ b .L399 ++.L412: ++ cmp w20, 6 ++ beq .L426 ++ cmp w20, 7 ++ beq .L427 ++ cmp w20, 8 ++ mov w0, 8 ++ mov w1, 5 ++ csel w1, w1, w0, eq ++.L414: ++ mov w8, 0 ++.L415: ++ mov x0, 0 ++.L416: ++ add w9, w12, w0 ++ ldrb w10, [x7, x0] ++ add x0, x0, 1 ++ cmp w28, w0, uxtb ++ strb w10, [x2, w9, sxtw] ++ bhi .L416 ++ ldr x0, [x29, 104] ++ add w8, w8, 1 ++ add w12, w12, w1 ++ cmp w27, w8 ++ add x7, x7, x0 ++ bgt .L415 ++ mov w0, 255 ++ str w0, [x19, 2056] ++ str w6, [x29, 96] ++ mov w0, w25 ++ bl NandcWaitFlashReady ++ ldr w6, [x29, 96] ++ cmp w6, 1 ++ bhi .L418 ++ mov w0, 54 ++ str w0, [x19, 2056] ++ adrp x0, .LANCHOR2+1236 ++ mov w1, -1 ++ ldrb w0, [x0, #:lo12:.LANCHOR2+1236] ++ str w0, [x19, 2052] ++ str wzr, [x19, 2048] ++ mov w0, 22 ++ str w0, [x19, 2056] ++ mov w0, w22 ++ bl FlashReadCmd ++.L419: ++ add w22, w22, 1 ++ mov w0, w25 ++ and w22, w22, 255 ++ bl NandcWaitFlashReady ++ b .L374 ++.L426: ++ mov w1, 4 ++ b .L414 ++.L427: ++ mov w1, 10 ++ b .L414 ++.L418: ++ cmp w20, 8 ++ bne .L420 ++ mov w0, 190 ++.L470: ++ str w0, [x19, 2056] ++ b .L419 ++.L420: ++ mov w0, 56 ++ b .L470 ++.L377: ++ mov w0, 120 ++ str w0, [x19, 2056] ++ str wzr, [x19, 2052] ++ mov w0, 23 ++ str wzr, [x19, 2052] ++ mov w1, 25 ++ str wzr, [x19, 2052] ++ add x2, x21, :lo12:.LANCHOR2 ++ str w0, [x19, 2056] ++ mov w0, 4 ++ str w0, [x19, 2056] ++ add x2, x2, 1260 ++ str w1, [x19, 2056] ++ mov w1, 218 ++ str w1, [x19, 2056] ++ mov w1, 21 ++ str wzr, [x19, 2056] ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w1, [x19, 2052] ++ str w0, [x19, 2052] ++ str wzr, [x19, 2052] ++ b .L422 ++ .size HynixGetReadRetryDefault, .-HynixGetReadRetryDefault ++ .align 2 ++ .global FlashGetReadRetryDefault ++ .type FlashGetReadRetryDefault, %function ++FlashGetReadRetryDefault: ++ cbz w0, .L484 ++ stp x29, x30, [sp, -16]! ++ sub w2, w0, #1 ++ mov w1, w0 ++ cmp w2, 7 ++ add x29, sp, 0 ++ bhi .L473 ++ bl HynixGetReadRetryDefault ++.L471: ++ ldp x29, x30, [sp], 16 ++ ret ++.L473: ++ cmp w0, 49 ++ bne .L474 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ mov w2, 64 ++ strb w1, [x0, 1232] ++ mov w1, 4 ++ strb w1, [x0, 1233] ++ mov w1, 15 ++ strb w1, [x0, 1234] ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 408 ++.L487: ++ add x0, x0, 1236 ++ bl ftl_memcpy ++ b .L471 ++.L474: ++ sub w0, w0, #65 ++ cmp w1, 33 ++ ccmp w0, 1, 0, ne ++ bhi .L475 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ strb w1, [x0, 1232] ++ mov w1, 4 ++.L488: ++ strb w1, [x0, 1233] ++ mov w1, 7 ++ strb w1, [x0, 1234] ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ mov w2, 45 ++ add x1, x1, 352 ++ b .L487 ++.L475: ++ cmp w1, 34 ++ mov w0, 67 ++ ccmp w1, w0, 4, ne ++ bne .L476 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ strb w1, [x0, 1232] ++ mov w1, 5 ++ b .L488 ++.L476: ++ cmp w1, 35 ++ mov w0, 68 ++ ccmp w1, w0, 4, ne ++ bne .L471 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ mov w2, 95 ++ strb w1, [x0, 1232] ++ mov w1, 5 ++ strb w1, [x0, 1233] ++ mov w1, 17 ++ strb w1, [x0, 1234] ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 256 ++ b .L487 ++.L484: ++ ret ++ .size FlashGetReadRetryDefault, .-FlashGetReadRetryDefault ++ .align 2 ++ .global FlashReadDpCmd ++ .type FlashReadDpCmd, %function ++FlashReadDpCmd: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ adrp x0, .LANCHOR0 ++ add x4, x0, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ mov w21, w1 ++ stp x19, x20, [sp, 16] ++ sbfiz x1, x22, 4, 32 ++ and w24, w2, 255 ++ lsr w23, w2, 8 ++ lsr w20, w2, 16 ++ ldr x2, [x4, 104] ++ add x3, x4, x1 ++ ldr x5, [x4, x1] ++ ldrb w1, [x4, 128] ++ and w7, w21, 255 ++ lsr w6, w21, 8 ++ cmp w1, 1 ++ ldrb w19, [x3, 8] ++ lsr w1, w21, 16 ++ ldrb w2, [x2, 7] ++ bne .L490 ++ cmp w2, 1 ++ bne .L491 ++ sxtw x3, w19 ++ mov w2, 38 ++ add x3, x3, 8 ++ add x3, x5, x3, lsl 8 ++ str w2, [x3, 8] ++.L491: ++ add x0, x0, :lo12:.LANCHOR0 ++ add x19, x5, x19, lsl 8 ++ add x0, x0, 112 ++ ldrb w2, [x0, 8] ++ str w2, [x19, 2056] ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w7, [x19, 2052] ++ str w6, [x19, 2052] ++ ldrb w0, [x0, 9] ++ str w1, [x19, 2052] ++ str w0, [x19, 2056] ++ mov w0, w22 ++ bl NandcWaitFlashReady ++ str wzr, [x19, 2056] ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++.L495: ++ str w24, [x19, 2052] ++ mov w0, 48 ++ str w23, [x19, 2052] ++ mov w1, w21 ++ str w20, [x19, 2052] ++ str w0, [x19, 2056] ++ mov w0, w22 ++ bl FlashSetRandomizer ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L490: ++ cmp w2, 1 ++ bne .L493 ++ sxtw x3, w19 ++ mov w2, 38 ++ add x3, x3, 8 ++ add x3, x5, x3, lsl 8 ++ str w2, [x3, 8] ++.L493: ++ add x0, x0, :lo12:.LANCHOR0 ++ add x19, x5, x19, lsl 8 ++ add x0, x0, 112 ++ ldrb w2, [x0, 8] ++ str w2, [x19, 2056] ++ str w7, [x19, 2052] ++ str w6, [x19, 2052] ++ ldrb w0, [x0, 9] ++ str w1, [x19, 2052] ++ str w0, [x19, 2056] ++ b .L495 ++ .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] ++ bl NandcWaitFlashReady ++ bl FlashSetReadRetryDefault ++ adrp x19, .LANCHOR2 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr w0, [x0, 2100] ++ cbz w0, .L497 ++ mov w0, 0 ++ bl flash_enter_slc_mode ++.L498: ++ add x19, x19, :lo12:.LANCHOR2 ++ ldrb w0, [x19, 2104] ++ cbz w0, .L499 ++ ldrb w0, [x19, 2093] ++ tbz x0, 0, .L499 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++ strb wzr, [x19, 2104] ++.L499: ++ adrp x0, .LANCHOR0 ++ ldr x0, [x0, #:lo12:.LANCHOR0] ++ str wzr, [x0, 336] ++ mov w0, 0 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L497: ++ mov w0, 0 ++ bl flash_exit_slc_mode ++ b .L498 ++ .size ftl_flash_de_init, .-ftl_flash_de_init ++ .align 2 ++ .global NandcRandmzSel ++ .type NandcRandmzSel, %function ++NandcRandmzSel: ++ ubfiz x0, x0, 4, 8 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ 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 w1, 16960 ++ movk w1, 0xf, lsl 16 ++ sdiv w0, w0, w1 ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ cmp w0, 250 ++ ble .L509 ++ ldr x0, [x1, 1152] ++ mov w1, 8354 ++.L517: ++ str w1, [x0, 4] ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L509: ++ cmp w0, 220 ++ ble .L511 ++ ldr x0, [x1, 1152] ++.L518: ++ mov w1, 8322 ++ b .L517 ++.L511: ++ cmp w0, 185 ++ ble .L512 ++ ldr x0, [x1, 1152] ++ mov w1, 4226 ++ b .L517 ++.L512: ++ cmp w0, 160 ++ ldr x0, [x1, 1152] ++ ble .L513 ++ mov w1, 4194 ++ b .L517 ++.L513: ++ cmp w19, 35 ++ bhi .L514 ++ mov w1, 4193 ++ b .L517 ++.L514: ++ cmp w19, 99 ++ bhi .L518 ++ mov w1, 4225 ++ b .L517 ++ .size NandcTimeCfg, .-NandcTimeCfg ++ .align 2 ++ .global FlashTimingCfg ++ .type FlashTimingCfg, %function ++FlashTimingCfg: ++ stp x29, x30, [sp, -16]! ++ mov w1, -4193 ++ add w2, w0, w1 ++ mov w3, -4225 ++ add x29, sp, 0 ++ add w1, w0, w3 ++ cmp w2, 1 ++ ccmp w1, 1, 0, hi ++ bls .L520 ++ mov w1, 8322 ++ cmp w0, w1 ++ bne .L521 ++.L520: ++ adrp x1, .LANCHOR2+1152 ++ ldr x1, [x1, #:lo12:.LANCHOR2+1152] ++ str w0, [x1, 4] ++.L521: ++ adrp x0, .LANCHOR1+493 ++ ldrb w0, [x0, #:lo12:.LANCHOR1+493] ++ bl NandcTimeCfg ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FlashTimingCfg, .-FlashTimingCfg ++ .align 2 ++ .global NandcInit ++ .type NandcInit, %function ++NandcInit: ++ stp x29, x30, [sp, -32]! ++ adrp x2, .LANCHOR0 ++ add x1, x2, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ adrp x19, .LANCHOR2 ++ str x0, [x2, #:lo12:.LANCHOR0] ++ mov w2, 1 ++ str w2, [x1, 24] ++ mov w2, 2 ++ str w2, [x1, 40] ++ mov w2, 3 ++ str w2, [x1, 56] ++ add x2, x19, :lo12:.LANCHOR2 ++ str wzr, [x1, 8] ++ str x0, [x1, 16] ++ str x0, [x1, 32] ++ str x0, [x1, 48] ++ str x0, [x2, 1152] ++ ldr w1, [x0] ++ ubfx x3, x1, 13, 1 ++ str w3, [x2, 2108] ++ ldr w3, [x0, 352] ++ and w1, w1, 245760 ++ orr w1, w1, 256 ++ ubfx x3, x3, 16, 4 ++ str w3, [x2, 2112] ++ ldr w3, [x0, 352] ++ str w3, [x2, 2116] ++ cmp w3, 2049 ++ bne .L524 ++ mov w3, 8 ++ str w3, [x2, 2112] ++.L524: ++ add x19, x19, :lo12:.LANCHOR2 ++ str w1, [x0] ++ ldr x0, [x19, 1152] ++ str wzr, [x0, 336] ++ mov w0, 40 ++ bl NandcTimeCfg ++ ldr x0, [x19, 1152] ++ mov w1, 8322 ++ str w1, [x0, 344] ++ mov w1, 6145 ++ movk w1, 0x18, lsl 16 ++ str w1, [x0, 304] ++ mov w0, 36864 ++ bl ftl_dma32_malloc ++ str wzr, [x19, 2168] ++ str x0, [x19, 2120] ++ str x0, [x19, 2128] ++ add x0, x0, 32768 ++ str wzr, [x19, 2176] ++ str x0, [x19, 2136] ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size NandcInit, .-NandcInit ++ .align 2 ++ .global NandcGetTimeCfg ++ .type NandcGetTimeCfg, %function ++NandcGetTimeCfg: ++ adrp x4, .LANCHOR2 ++ add x4, x4, :lo12:.LANCHOR2 ++ ldr x5, [x4, 1152] ++ ldr w5, [x5, 4] ++ str w5, [x0] ++ ldr x0, [x4, 1152] ++ ldr w0, [x0] ++ str w0, [x1] ++ ldr x0, [x4, 1152] ++ ldr w0, [x0, 304] ++ str w0, [x2] ++ ldr x0, [x4, 1152] ++ ldr w1, [x0, 308] ++ ldr w0, [x0, 344] ++ and w1, w1, 255 ++ orr w0, w1, w0, lsl 16 ++ str w0, [x3] ++ ret ++ .size NandcGetTimeCfg, .-NandcGetTimeCfg ++ .align 2 ++ .global NandcBchSel ++ .type NandcBchSel, %function ++NandcBchSel: ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ and w0, w0, 255 ++ mov w3, 1 ++ cmp w0, 16 ++ ldr x2, [x1, 1152] ++ str w0, [x1, 2180] ++ mov w1, 4096 ++ str w3, [x2, 8] ++ bne .L528 ++.L531: ++ and w1, w1, -17 ++.L529: ++ orr w1, w1, 1 ++ str w1, [x2, 12] ++ ret ++.L528: ++ cmp w0, 24 ++ bne .L530 ++ orr w1, w1, 16 ++ b .L529 ++.L530: ++ orr w1, w1, 262144 ++ cmp w0, 40 ++ orr w1, w1, 16 ++ bne .L529 ++ b .L531 ++ .size NandcBchSel, .-NandcBchSel ++ .align 2 ++ .global FlashBchSel ++ .type FlashBchSel, %function ++FlashBchSel: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR2+1221 ++ and w0, w0, 255 ++ add x29, sp, 0 ++ strb w0, [x1, #:lo12:.LANCHOR2+1221] ++ 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]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x0, x19, :lo12:.LANCHOR2 ++ str x21, [sp, 32] ++ adrp x21, IDByte ++ add x21, x21, :lo12:IDByte ++ mov x20, 0 ++ ldr x1, [x0, 1152] ++ ldr w2, [x0, 1160] ++ str w2, [x1] ++ ldr w2, [x0, 1164] ++ ldr x1, [x0, 1152] ++ str w2, [x1, 4] ++ ldr w2, [x0, 1168] ++ ldr x1, [x0, 1152] ++ str w2, [x1, 8] ++ ldr w2, [x0, 1172] ++ str w2, [x1, 12] ++ ldr w2, [x0, 1176] ++ str w2, [x1, 304] ++ ldr w2, [x0, 1180] ++ str w2, [x1, 308] ++ ldr w2, [x0, 1184] ++ str w2, [x1, 336] ++ ldr w0, [x0, 1188] ++ str w0, [x1, 344] ++.L539: ++ lsl x0, x20, 3 ++ ldrb w0, [x0, x21] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 253 ++ bhi .L538 ++ mov w0, w20 ++ bl FlashReset ++.L538: ++ add x20, x20, 1 ++ cmp x20, 4 ++ bne .L539 ++ add x19, x19, :lo12:.LANCHOR2 ++ ldrb w0, [x19, 2104] ++ cbz w0, .L540 ++ mov w0, 1 ++ bl NandcSetMode ++ ldrb w0, [x19, 2093] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x19, 2093] ++ bl NandcSetMode ++ ldr w0, [x19, 1176] ++ lsr w0, w0, 8 ++ bl NandcSetDdrPara ++.L540: ++ adrp x0, .LANCHOR0+104 ++ ldr x0, [x0, #:lo12:.LANCHOR0+104] ++ ldrb w0, [x0, 20] ++ bl FlashBchSel ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ 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: ++ ret ++ .size NandcIqrWaitFlashReady, .-NandcIqrWaitFlashReady ++ .align 2 ++ .global NandcSendDumpDataStart ++ .type NandcSendDumpDataStart, %function ++NandcSendDumpDataStart: ++ sub sp, sp, #16 ++ ldr w2, [x0, 16] ++ mov w1, 1066 ++ movk w1, 0x2020, lsl 16 ++ str w2, [sp, 8] ++ ldr w2, [sp, 8] ++ and w2, w2, -5 ++ str w2, [sp, 8] ++ ldr w2, [sp, 8] ++ str w2, [x0, 16] ++ str w1, [x0, 8] ++ orr w1, w1, 4 ++ str w1, [x0, 8] ++ add sp, sp, 16 ++ ret ++ .size NandcSendDumpDataStart, .-NandcSendDumpDataStart ++ .align 2 ++ .global NandcSendDumpDataDone ++ .type NandcSendDumpDataDone, %function ++NandcSendDumpDataDone: ++ sub sp, sp, #16 ++.L551: ++ ldr w1, [x0, 8] ++ str w1, [sp, 8] ++ ldr w1, [sp, 8] ++ tbz x1, 20, .L551 ++ 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 x23, x24, [sp, 48] ++ and w24, w1, 255 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ add x6, x1, x0 ++ stp x21, x22, [sp, 32] ++ ubfiz w20, w24, 1, 1 ++ str x25, [sp, 64] ++ orr w20, w20, 8 ++ adrp x19, .LANCHOR2 ++ ldr x21, [x1, x0] ++ mov w1, 16 ++ ldrb w0, [x6, 8] ++ ldr w23, [x21, 12] ++ bfi w23, w1, 8, 8 ++ and w23, w23, -9 ++ bfi w23, 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 w1, [x0, 2112] ++ bfi w20, w3, 4, 1 ++ cmp w1, 3 ++ bls .L556 ++ ldr w1, [x21, 16] ++ cmp x5, 0 ++ str w1, [x29, 88] ++ ccmp x4, 0, 0, eq ++ ldr w1, [x29, 88] ++ and w1, w1, -5 ++ str w1, [x29, 88] ++ beq .L557 ++ and w2, w2, 255 ++ cbnz w24, .L558 ++.L566: ++ add w2, w2, 1 ++ asr w2, w2, 1 ++ bfi w20, w2, 22, 6 ++ cbz x4, .L559 ++ mov x0, x4 ++.L560: ++ add x19, x19, :lo12:.LANCHOR2 ++ ubfx x25, x20, 22, 5 ++ mov x22, x4 ++ mov w2, w24 ++ ldr x1, [x19, 2136] ++ str x1, [x19, 2152] ++ lsl w1, w25, 10 ++ str x0, [x19, 2144] ++ bl rknand_dma_map_single ++ str w0, [x19, 2160] ++ lsl w1, w25, 7 ++ ldr x0, [x19, 2152] ++ mov w2, w24 ++ bl rknand_dma_map_single ++ str w0, [x19, 2164] ++ mov w0, 1 ++ str w0, [x19, 2168] ++ ldr w0, [x19, 2160] ++ mov w1, 16 ++ str w0, [x21, 20] ++ tst x22, 3 ++ ldr w0, [x19, 2164] ++ 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] ++ bne .L567 ++ ldr w0, [x29, 88] ++ mov w1, 2 ++ bfi w0, w1, 3, 3 ++ str w0, [x29, 88] ++.L567: ++ ldr w0, [x29, 88] ++ cmp w24, 0 ++ 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] ++.L557: ++ ldr w0, [x29, 88] ++ str w0, [x21, 16] ++.L556: ++ str w23, [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 ++.L558: ++ ldr w1, [x0, 2180] ++ mov w6, 64 ++ lsr w9, w2, 1 ++ mov x8, x5 ++ cmp w1, 25 ++ mov w1, 128 ++ csel w6, w6, w1, cc ++ mov w7, 0 ++ mov w3, 0 ++ mov w10, -1 ++.L562: ++ cmp w3, w9 ++ bcs .L566 ++ lsr w1, w7, 2 ++ cbz x5, .L563 ++ ldr x11, [x0, 2136] ++ lsl w1, w1, 2 ++ ldr w12, [x8], 4 ++ str w12, [x11, x1] ++.L564: ++ add w3, w3, 1 ++ add w7, w7, w6 ++ b .L562 ++.L563: ++ ldr x11, [x0, 2136] ++ lsl w1, w1, 2 ++ str w10, [x11, x1] ++ b .L564 ++.L559: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr x0, [x0, 2128] ++ b .L560 ++ .size NandcXferStart, .-NandcXferStart ++ .align 2 ++ .global NandcXferComp ++ .type NandcXferComp, %function ++NandcXferComp: ++ stp x29, x30, [sp, -80]! ++ ubfiz x0, x0, 4, 8 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ ldr x19, [x1, x0] ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr w1, [x0, 2112] ++ cmp w1, 3 ++ bls .L604 ++ ldr w1, [x19, 16] ++ tbz x1, 2, .L604 ++ ldr w1, [x19, 16] ++ tbz x1, 1, .L575 ++ adrp x22, .LC4 ++ adrp x23, .LC5 ++ ldr w1, [x19, 8] ++ mov x24, x0 ++ add x22, x22, :lo12:.LC4 ++ add x23, x23, :lo12:.LC5 ++ mov w21, 0 ++ str w1, [x29, 64] ++.L576: ++ ldr w1, [x19, 28] ++ ldr w0, [x29, 64] ++ ubfx x1, x1, 16, 5 ++ ubfx x0, x0, 22, 6 ++ cmp w1, w0 ++ bge .L584 ++ ldr w0, [x24, 2112] ++ cmp w0, 5 ++ bhi .L577 ++.L580: ++ add w21, w21, 1 ++ tst x21, 16777215 ++ bne .L579 ++ 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 w3, 512 ++ mov w2, 4 ++ mov x1, x19 ++ mov x0, x23 ++ bl rknand_print_hex ++.L579: ++ mov x1, 5 ++ mov x0, 1 ++ bl usleep_range ++ b .L576 ++.L577: ++ ldr w0, [x19] ++ str w0, [x29, 72] ++ ldr w0, [x29, 72] ++ tbz x0, 13, .L580 ++ ldr w0, [x29, 72] ++ tbz x0, 17, .L580 ++.L584: ++ add x19, x20, :lo12:.LANCHOR2 ++ add x19, x19, 2128 ++ ldr w0, [x19, 40] ++ cbz w0, .L585 ++ ldr w0, [x19, 32] ++ mov w2, 0 ++ ldr w1, [x29, 64] ++ 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 ++.L585: ++ add x20, x20, :lo12:.LANCHOR2 ++ str wzr, [x20, 2168] ++.L573: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 80 ++ ret ++.L575: ++ adrp x22, .LC6 ++ adrp x23, .LC5 ++ ldr w0, [x19, 8] ++ add x22, x22, :lo12:.LC6 ++ add x23, x23, :lo12:.LC5 ++ mov w21, 0 ++ str w0, [x29, 64] ++.L586: ++ ldr w0, [x29, 64] ++ tbz x0, 20, .L588 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr w0, [x0, 2176] ++ cbz w0, .L589 ++ mov x0, x19 ++ bl NandcSendDumpDataStart ++.L589: ++ add x21, x20, :lo12:.LANCHOR2 ++ add x21, x21, 2128 ++ ldr w0, [x21, 40] ++ cbz w0, .L590 ++ ldr w0, [x21, 32] ++ mov w2, 1 ++ ldr w1, [x29, 64] ++ 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 ++.L590: ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr w0, [x0, 2176] ++ cbz w0, .L585 ++ mov x0, x19 ++ bl NandcSendDumpDataDone ++ b .L585 ++.L588: ++ ldr w0, [x19, 8] ++ add w21, w21, 1 ++ str w0, [x29, 64] ++ tst x21, 16777215 ++ bne .L587 ++ ldr w2, [x29, 64] ++ mov w1, w21 ++ ldr w3, [x19, 28] ++ mov x0, x22 ++ ubfx x3, x3, 16, 5 ++ bl printk ++ mov w3, 512 ++ mov w2, 4 ++ mov x1, x19 ++ mov x0, x23 ++ bl rknand_print_hex ++.L587: ++ mov x1, 5 ++ mov x0, 1 ++ bl usleep_range ++ b .L586 ++.L604: ++ ldr w0, [x19, 8] ++ str w0, [x29, 64] ++ ldr w0, [x29, 64] ++ tbz x0, 20, .L604 ++ b .L573 ++ .size NandcXferComp, .-NandcXferComp ++ .align 2 ++ .global NandcCopy1KB ++ .type NandcCopy1KB, %function ++NandcCopy1KB: ++ stp x29, x30, [sp, -48]! ++ and w1, w1, 255 ++ cmp w1, 1 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w2, 255 ++ str x21, [sp, 32] ++ add x2, x0, 4096 ++ add x21, x0, 512 ++ ubfiz x0, x19, 9, 8 ++ mov x20, x4 ++ add x0, x2, x0 ++ bne .L614 ++ cbz x3, .L615 ++ mov w2, 1024 ++ mov x1, x3 ++ bl ftl_memcpy ++.L615: ++ cbz x20, .L613 ++ lsr w19, w19, 1 ++ mov w1, 48 ++ ldr w0, [x20] ++ mul w19, w19, w1 ++ and x19, x19, 8176 ++ str w0, [x21, x19] ++.L613: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L614: ++ cbz x3, .L618 ++ mov x1, x0 ++ mov w2, 1024 ++ mov x0, x3 ++ bl ftl_memcpy ++.L618: ++ cbz x20, .L613 ++ lsr w19, w19, 1 ++ mov w0, 48 ++ mul w19, w19, w0 ++ and x19, x19, 8176 ++ ldr w0, [x21, x19] ++ 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] ++ b .L613 ++ .size NandcCopy1KB, .-NandcCopy1KB ++ .align 2 ++ .global NandcXferData ++ .type NandcXferData, %function ++NandcXferData: ++ stp x29, x30, [sp, -192]! ++ tst x3, 63 ++ add x29, sp, 0 ++ stp x25, x26, [sp, 64] ++ and w25, w0, 255 ++ stp x19, x20, [sp, 16] ++ adrp x0, .LANCHOR0 ++ and w20, w1, 255 ++ add x0, x0, :lo12:.LANCHOR0 ++ sbfiz x1, x25, 4, 32 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ mov x26, x3 ++ stp x27, x28, [sp, 80] ++ and w24, w2, 255 ++ mov x21, x4 ++ ldr x19, [x0, x1] ++ bne .L631 ++ cbnz x4, .L632 ++ add x21, x29, 128 ++ mov w2, 64 ++ mov w1, 255 ++ add x0, x29, 128 ++ bl ftl_memset ++.L632: ++ mov x5, x21 ++ mov x4, x26 ++ mov w2, w24 ++ mov w3, 0 ++ mov w1, w20 ++ mov w0, w25 ++ bl NandcXferStart ++ mov w1, w20 ++ mov w0, w25 ++ bl NandcXferComp ++ cbnz w20, .L656 ++ adrp x0, .LANCHOR2 ++ add x2, x0, :lo12:.LANCHOR2 ++ ubfx x3, x24, 1, 7 ++ mov w4, 64 ++ add x3, x21, x3, lsl 2 ++ ldr w1, [x2, 2180] ++ cmp w1, 25 ++ mov w1, 128 ++ csel w4, w4, w1, cc ++ mov w1, 0 ++.L635: ++ add w5, w4, w1 ++ cmp x21, x3 ++ bne .L636 ++ add x0, x0, :lo12:.LANCHOR2 ++ lsr w24, w24, 2 ++ mov w2, 0 ++ mov w22, 0 ++ ldr w4, [x0, 2112] ++ ldr w3, [x0, 2180] ++.L637: ++ cmp w2, w24 ++ bcs .L633 ++ cbnz w3, .L643 ++.L633: ++ str wzr, [x19, 16] ++.L644: ++ adrp x0, .LANCHOR2+2112 ++ ldr w0, [x0, #:lo12:.LANCHOR2+2112] ++ cmp w0, 5 ++ bls .L630 ++ cbnz w20, .L630 ++ ldr w0, [x19] ++ mov w1, 8192 ++ movk w1, 0x2, lsl 16 ++ and w1, w0, w1 ++ cmp w1, 139264 ++ bne .L630 ++ orr w0, w0, 131072 ++ mov w22, -1 ++ str w0, [x19] ++.L630: ++ 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], 192 ++ ret ++.L636: ++ ldr x6, [x2, 2136] ++ 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 .L635 ++.L643: ++ uxtw x0, w2 ++ add x0, x0, 8 ++ ldr w0, [x19, x0, lsl 2] ++ str w0, [x29, 120] ++ ldr w0, [x29, 120] ++ tbnz x0, 2, .L659 ++ ldr w0, [x29, 120] ++ tbnz x0, 15, .L659 ++ cmp w4, 5 ++ bls .L639 ++ ldr w1, [x29, 120] ++ ubfx x6, x1, 3, 5 ++ ldr w1, [x29, 120] ++ ldr w0, [x29, 120] ++ ubfx x1, x1, 27, 1 ++ ubfx x5, x0, 16, 5 ++ ldr w0, [x29, 120] ++ orr w1, w6, w1, lsl 5 ++ ubfx x0, x0, 29, 1 ++ orr w0, w5, w0, lsl 5 ++ cmp w1, w0 ++ ldr w0, [x29, 120] ++ bls .L640 ++ ubfx x1, x0, 3, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 27, 1 ++.L665: ++ orr w0, w1, w0, lsl 5 ++.L641: ++ cmp w22, w0 ++ csel w22, w22, w0, cs ++.L638: ++ add w2, w2, 1 ++ b .L637 ++.L640: ++ ubfx x1, x0, 16, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 29, 1 ++ b .L665 ++.L639: ++ cmp w4, 3 ++ bls .L660 ++ ldr w1, [x29, 120] ++ ubfx x6, x1, 3, 5 ++ ldr w1, [x29, 120] ++ ldr w0, [x29, 120] ++ ubfx x1, x1, 28, 1 ++ ubfx x5, x0, 16, 5 ++ ldr w0, [x29, 120] ++ orr w1, w6, w1, lsl 5 ++ ubfx x0, x0, 30, 1 ++ orr w0, w5, w0, lsl 5 ++ cmp w1, w0 ++ ldr w0, [x29, 120] ++ bls .L642 ++ ubfx x1, x0, 3, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 28, 1 ++ b .L665 ++.L642: ++ ubfx x1, x0, 16, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 30, 1 ++ b .L665 ++.L660: ++ mov w0, 0 ++ b .L641 ++.L659: ++ mov w22, -1 ++ b .L638 ++.L656: ++ mov w22, 0 ++ b .L633 ++.L631: ++ cmp w20, 1 ++ bne .L645 ++ cmp x4, 0 ++ mov w23, 2 ++ csel w23, w23, wzr, ne ++ mov w27, 0 ++ lsl w23, w23, 1 ++ mov w22, 0 ++.L646: ++ cmp w22, w24 ++ bcc .L648 ++ mov w22, 0 ++ b .L644 ++.L648: ++ and w28, w22, 3 ++ cbz x26, .L661 ++ lsl w3, w22, 9 ++ add x3, x26, x3 ++.L647: ++ add x4, x21, w27, uxtw ++ mov w2, w28 ++ mov w1, 1 ++ mov x0, x19 ++ bl NandcCopy1KB ++ add w22, w22, 2 ++ mov w3, w28 ++ mov x5, 0 ++ mov x4, 0 ++ mov w2, 2 ++ mov w1, 1 ++ mov w0, w25 ++ bl NandcXferStart ++ add w27, w27, w23 ++ mov w1, 1 ++ mov w0, w25 ++ bl NandcXferComp ++ b .L646 ++.L661: ++ mov x3, 0 ++ b .L647 ++.L645: ++ mov w0, w25 ++ mov x5, 0 ++ mov x4, 0 ++ mov w3, 0 ++ mov w2, 2 ++ mov w1, 0 ++ bl NandcXferStart ++ mov w27, 2 ++ cmp x21, 0 ++ mov w28, 0 ++ csel w27, w27, wzr, ne ++ mov w23, 0 ++ lsl w0, w27, 1 ++ mov w22, 0 ++ str w0, [x29, 108] ++.L649: ++ cmp w24, w23 ++ bls .L644 ++ mov w0, w25 ++ mov w1, w20 ++ bl NandcXferComp ++ add w27, w23, 2 ++ ldr w0, [x19, 32] ++ cmp w24, w27 ++ str w0, [x29, 120] ++ bls .L650 ++ mov x5, 0 ++ mov x4, 0 ++ and w3, w27, 3 ++ mov w2, 2 ++ mov w1, 0 ++ mov w0, w25 ++ bl NandcXferStart ++.L650: ++ ldr w0, [x29, 120] ++ tbnz x0, 2, .L662 ++ ldr w0, [x29, 120] ++ ubfx x1, x0, 3, 5 ++ ldr w0, [x29, 120] ++ ubfx x0, x0, 27, 1 ++ orr w0, w1, w0, lsl 5 ++ cmp w22, w0 ++ csel w22, w22, w0, cs ++.L651: ++ and w2, w23, 3 ++ cbz x26, .L663 ++ lsl w3, w23, 9 ++ add x3, x26, x3 ++.L652: ++ add x4, x21, w28, uxtw ++ mov x0, x19 ++ mov w1, 0 ++ bl NandcCopy1KB ++ ldr w0, [x29, 108] ++ mov w23, w27 ++ add w28, w28, w0 ++ b .L649 ++.L662: ++ mov w22, -1 ++ b .L651 ++.L663: ++ mov x3, 0 ++ b .L652 ++ .size NandcXferData, .-NandcXferData ++ .align 2 ++ .global FlashReadRawPage ++ .type FlashReadRawPage, %function ++FlashReadRawPage: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ ands w19, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov w21, w1 ++ str x23, [sp, 48] ++ adrp x1, .LANCHOR1+481 ++ mov x22, x2 ++ mov x23, x3 ++ ldrb w20, [x1, #:lo12:.LANCHOR1+481] ++ bne .L667 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrb w5, [x0, 89] ++ ldr w0, [x0, 92] ++ mul w0, w5, w0 ++ cmp w0, w21 ++ mov w0, 4 ++ csel w20, w20, w0, ls ++.L667: ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashCs ++ mov w1, w21 ++ mov w0, w19 ++ bl FlashReadCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w2, w20 ++ mov x4, x23 ++ mov x3, x22 ++ mov w1, 0 ++ mov w0, w19 ++ bl NandcXferData ++ mov w2, w0 ++ mov w0, w19 ++ bl NandcFlashDeCs ++ mov w0, w2 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size FlashReadRawPage, .-FlashReadRawPage ++ .align 2 ++ .global FlashDdrTunningRead ++ .type FlashDdrTunningRead, %function ++FlashDdrTunningRead: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov w22, 6 ++ stp x23, x24, [sp, 48] ++ and w23, w0, 255 ++ adrp x0, .LANCHOR2 ++ add x21, x0, :lo12:.LANCHOR2 ++ stp x25, x26, [sp, 64] ++ mov w26, w1 ++ stp x19, x20, [sp, 16] ++ mov x24, x2 ++ stp x27, x28, [sp, 80] ++ mov x19, x0 ++ mov x25, x3 ++ mov w0, 12 ++ ldr x1, [x21, 1152] ++ mov w27, w4 ++ ldr w1, [x1, 304] ++ str w1, [x29, 108] ++ ldr w1, [x21, 2112] ++ cmp w1, 8 ++ csel w22, w22, w0, cc ++ cbz w4, .L683 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++ mov w0, w23 ++ bl FlashReset ++ mov x3, x25 ++ mov x2, x24 ++ mov w1, w26 ++ mov w0, w23 ++ bl FlashReadRawPage ++ mov w20, w0 ++ ldrb w0, [x21, 2093] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x21, 2093] ++ bl NandcSetMode ++ cmn w20, #1 ++ bne .L672 ++.L681: ++ mov w20, -1 ++.L669: ++ 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 ++.L672: ++ mov w2, w20 ++ mov w1, w26 ++ adrp x0, .LC7 ++ add x0, x0, :lo12:.LC7 ++ bl printk ++ cmp w20, 9 ++ bhi .L674 ++ sbfiz x0, x23, 4, 32 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ ldr x0, [x1, x0] ++ ldr w1, [x0, 3840] ++ ldr w1, [x0] ++ orr w1, w1, 131072 ++ str w1, [x0] ++.L674: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr w1, [x0, 2184] ++ add w1, w1, 1 ++ str w1, [x0, 2184] ++ cmp w1, 2047 ++ bls .L669 ++ mov x25, 0 ++ mov x24, 0 ++ str wzr, [x0, 2184] ++.L671: ++ mov w5, 0 ++ mov w21, 0 ++ mov w6, 0 ++ mov w19, 0 ++ mov w28, -1 ++.L679: ++ stp w5, w6, [x29, 100] ++ mov w0, w22 ++ bl NandcSetDdrPara ++ mov w1, w26 ++ mov x3, x25 ++ mov x2, x24 ++ mov w0, w23 ++ bl FlashReadRawPage ++ add w1, w20, 1 ++ cmp w0, w1 ++ ldp w5, w6, [x29, 100] ++ bhi .L675 ++ cmp w0, 2 ++ bhi .L685 ++ add w19, w19, 1 ++ cmp w19, 9 ++ bls .L685 ++ mov w1, w21 ++ mov w20, w0 ++ sub w21, w22, w19 ++ mov w28, 0 ++.L677: ++ cmp w19, w6 ++ csel w21, w21, w1, hi ++.L678: ++ cbz w21, .L680 ++ mov w1, w21 ++ adrp x0, .LC8 ++ add x0, x0, :lo12:.LC8 ++ bl printk ++ mov w0, w21 ++ bl NandcSetDdrPara ++.L680: ++ cbz w28, .L669 ++ adrp x0, .LC9 ++ mov w2, w26 ++ mov w1, w23 ++ add x0, x0, :lo12:.LC9 ++ bl printk ++ cbz w27, .L681 ++ ldr w1, [x29, 108] ++ lsr w0, w1, 8 ++ bl NandcSetDdrPara ++ b .L669 ++.L683: ++ mov w20, 1024 ++ b .L671 ++.L675: ++ cmp w19, w6 ++ bls .L686 ++ sub w21, w5, w19 ++ cmp w19, 7 ++ bhi .L678 ++ mov w6, w19 ++.L686: ++ mov w19, 0 ++ b .L676 ++.L685: ++ mov w5, w22 ++ mov w20, w0 ++ mov w28, 0 ++ mov x25, 0 ++ mov x24, 0 ++.L676: ++ add w22, w22, 2 ++ cmp w22, 69 ++ bls .L679 ++ mov w1, w21 ++ mov w21, w5 ++ b .L677 ++ .size FlashDdrTunningRead, .-FlashDdrTunningRead ++ .align 2 ++ .global FlashReadPage ++ .type FlashReadPage, %function ++FlashReadPage: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov w0, w20 ++ stp x23, x24, [sp, 48] ++ mov w22, w1 ++ stp x25, x26, [sp, 64] ++ mov x24, x2 ++ mov x25, x3 ++ adrp x21, .LANCHOR2 ++ bl FlashReadRawPage ++ mov w19, w0 ++ cmn w0, #1 ++ bne .L696 ++ adrp x23, .LANCHOR0 ++ add x23, x23, :lo12:.LANCHOR0 ++ ldrb w26, [x23, 96] ++ cbnz w26, .L697 ++.L699: ++ add x23, x21, :lo12:.LANCHOR2 ++ ldrb w0, [x23, 2104] ++ cbz w0, .L696 ++ ldr x0, [x23, 1152] ++ mov w4, 1 ++ mov x3, x25 ++ mov x2, x24 ++ mov w1, w22 ++ ldr w26, [x0, 304] ++ mov w0, w20 ++ bl FlashDdrTunningRead ++ mov w19, w0 ++ cmn w0, #1 ++ beq .L700 ++ ldrb w0, [x23, 1221] ++ cmp w19, w0, lsr 1 ++ bls .L696 ++.L700: ++ lsr w0, w26, 8 ++ bl NandcSetDdrPara ++ b .L696 ++.L697: ++ strb wzr, [x23, 96] ++ mov x3, x25 ++ mov x2, x24 ++ mov w1, w22 ++ mov w0, w20 ++ bl FlashReadRawPage ++ strb w26, [x23, 96] ++ cmn w0, #1 ++ beq .L699 ++ mov w19, w0 ++.L696: ++ add x21, x21, :lo12:.LANCHOR2 ++ ldr x4, [x21, 2192] ++ cbz x4, .L695 ++ cmn w19, #1 ++ bne .L695 ++ mov x3, x25 ++ mov x2, x24 ++ mov w1, w22 ++ mov w0, w20 ++ blr x4 ++ mov w19, w0 ++ mov w1, w0 ++ mov w3, w22 ++ mov w2, w20 ++ adrp x0, .LC10 ++ add x0, x0, :lo12:.LC10 ++ bl printk ++ cmn w19, #1 ++ bne .L695 ++ ldrb w0, [x21, 1220] ++ cbz w0, .L695 ++ mov w0, w20 ++ bl flash_enter_slc_mode ++ ldr x4, [x21, 2192] ++ mov x3, x25 ++ mov x2, x24 ++ mov w1, w22 ++ mov w0, w20 ++ blr x4 ++ mov w19, w0 ++ mov w0, w20 ++ bl flash_exit_slc_mode ++.L695: ++ 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], 80 ++ 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 ++ stp x21, x22, [sp, 32] ++ add x22, x19, :lo12:.LANCHOR2 ++ and w20, w0, 255 ++ mov w21, w1 ++ ldrb w0, [x22, 2093] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x22, 2093] ++ bl NandcSetMode ++ mov w4, 0 ++ mov x3, 0 ++ mov x2, 0 ++ mov w1, w21 ++ mov w0, w20 ++ bl FlashDdrTunningRead ++ mov x3, 0 ++ mov w22, w0 ++ mov x2, 0 ++ mov w1, w21 ++ mov w0, w20 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ beq .L716 ++ cmn w22, #1 ++ bne .L717 ++.L716: ++ add x20, x19, :lo12:.LANCHOR2 ++ ldrb w0, [x20, 2093] ++ tbz x0, 0, .L717 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++ strb wzr, [x20, 2104] ++.L718: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L717: ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w0, 1 ++ strb w0, [x19, 2104] ++ b .L718 ++ .size FlashDdrParaScan, .-FlashDdrParaScan ++ .align 2 ++ .global FlashLoadPhyInfo ++ .type FlashLoadPhyInfo, %function ++FlashLoadPhyInfo: ++ stp x29, x30, [sp, -128]! ++ mov w0, 60 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x1, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ strb w0, [x29, 120] ++ mov w0, 40 ++ stp x23, x24, [sp, 48] ++ adrp x22, .LANCHOR2 ++ stp x27, x28, [sp, 80] ++ adrp x21, .LANCHOR1 ++ stp x25, x26, [sp, 64] ++ mov w27, 20036 ++ strb w0, [x29, 121] ++ mov w0, 24 ++ strb w0, [x29, 122] ++ mov w0, 16 ++ strb w0, [x29, 123] ++ add x21, x21, :lo12:.LANCHOR1 ++ ldr w0, [x1, 92] ++ mov w20, 0 ++ ldr x1, [x1, 64] ++ mov w24, 4 ++ str w0, [x29, 108] ++ add x0, x22, :lo12:.LANCHOR2 ++ mov w23, -1 ++ movk w27, 0x4e41, lsl 16 ++ add x21, x21, 472 ++ str x1, [x0, 2200] ++ str wzr, [x0, 2208] ++ mov w0, 0 ++ bl flash_enter_slc_mode ++.L727: ++ add w28, w20, 1 ++ add x25, x19, :lo12:.LANCHOR0 ++ mov x26, 0 ++.L729: ++ add x0, x29, 120 ++ ldrb w0, [x0, x26] ++ bl FlashBchSel ++ ldr x2, [x25, 64] ++ mov x3, 0 ++ mov w1, w20 ++ mov w0, 0 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ bne .L728 ++ ldr x2, [x25, 64] ++ mov x3, 0 ++ mov w1, w28 ++ mov w0, 0 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ bne .L728 ++ add x26, x26, 1 ++ cmp x26, 4 ++ bne .L729 ++.L730: ++ ldr w0, [x29, 108] ++ subs w24, w24, #1 ++ add w20, w20, w0 ++ bne .L727 ++ b .L735 ++.L731: ++ mov w1, 2036 ++ add x0, x6, 12 ++ bl js_hash ++ ldr w1, [x6, 8] ++ cmp w1, w0 ++ bne .L737 ++ add x1, x6, 160 ++ mov w2, 32 ++ mov x0, x21 ++ bl ftl_memcpy ++ ldr x1, [x25, 2200] ++ add x23, x19, :lo12:.LANCHOR0 ++ mov w2, 32 ++ add x0, x23, 112 ++ add x1, x1, 192 ++ bl ftl_memcpy ++ ldr x1, [x25, 2200] ++ mov w2, 852 ++ add x0, x25, 1232 ++ add x1, x1, 224 ++ bl ftl_memcpy ++ ldrh w0, [x21, 10] ++ bl FlashBlockAlignInit ++ str w20, [x25, 2208] ++ ldr x1, [x25, 2200] ++ ldr w0, [x1, 1076] ++ strb w0, [x25, 2104] ++ ldr w0, [x23, 92] ++ udiv w0, w20, w0 ++ add w0, w0, 1 ++ cmp w0, 1 ++ bls .L733 ++.L740: ++ str w0, [x23, 72] ++ add x0, x22, :lo12:.LANCHOR2 ++ ldrh w1, [x1, 14] ++ mov w23, 0 ++ strb w1, [x0, 2212] ++ b .L730 ++.L733: ++ mov w0, 2 ++ b .L740 ++.L737: ++ mov w23, -1 ++ b .L730 ++.L728: ++ add x25, x22, :lo12:.LANCHOR2 ++ ldr x6, [x25, 2200] ++ ldr w0, [x6] ++ cmp w0, w27 ++ bne .L730 ++ cbnz w23, .L731 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldr w0, [x19, 92] ++ udiv w20, w20, w0 ++ add w20, w20, 1 ++ str w20, [x19, 72] ++.L735: ++ mov w0, 0 ++ bl flash_exit_slc_mode ++ mov w0, w23 ++ 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 FlashLoadPhyInfo, .-FlashLoadPhyInfo ++ .align 2 ++ .global ToshibaReadRetrial ++ .type ToshibaReadRetrial, %function ++ToshibaReadRetrial: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w21, w0, 255 ++ stp x25, x26, [sp, 64] ++ mov w0, w21 ++ stp x19, x20, [sp, 16] ++ mov x25, x2 ++ stp x27, x28, [sp, 80] ++ mov x26, x3 ++ str w1, [x29, 120] ++ stp x23, x24, [sp, 48] ++ bl NandcWaitFlashReady ++ sbfiz x1, x21, 4, 32 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ add x2, x0, x1 ++ ldr x22, [x0, x1] ++ adrp x1, g_retryMode ++ ldrb w27, [x2, 8] ++ ldrb w0, [x1, #:lo12:g_retryMode] ++ str x1, [x29, 112] ++ add x19, x27, 8 ++ sub w0, w0, #67 ++ str w27, [x29, 124] ++ and w0, w0, 255 ++ add x19, x22, x19, lsl 8 ++ cmp w0, 1 ++ bls .L758 ++ adrp x0, .LANCHOR2+2104 ++ ldrb w0, [x0, #:lo12:.LANCHOR2+2104] ++ cbz w0, .L759 ++ mov w23, 1 ++ mov w0, 0 ++ bl NandcSetDdrMode ++.L743: ++ add x0, x22, x27, lsl 8 ++ mov w1, 92 ++ str w1, [x0, 2056] ++ mov w1, 197 ++ str w1, [x0, 2056] ++.L742: ++ ldrsw x0, [x29, 124] ++ mov w20, 1 ++ mov w24, -1 ++ add x0, x0, 8 ++ add x0, x22, x0, lsl 8 ++ str x0, [x29, 104] ++.L744: ++ adrp x0, g_maxRetryCount ++ ldrb w0, [x0, #:lo12:g_maxRetryCount] ++ add w0, w0, 1 ++ cmp w20, w0 ++ bcc .L753 ++ mov w28, w24 ++.L752: ++ ldr x0, [x29, 112] ++ mov w1, 0 ++ ldrb w0, [x0, #:lo12:g_retryMode] ++ sub w0, w0, #67 ++ and w0, w0, 255 ++ cmp w0, 1 ++ mov x0, x19 ++ bhi .L754 ++ bl SandiskSetRRPara ++.L755: ++ ldrsw x0, [x29, 124] ++ add x0, x0, 8 ++ add x22, x22, x0, lsl 8 ++ mov w0, 255 ++ str w0, [x22, 8] ++ adrp x0, .LANCHOR2+1221 ++ ldrb w0, [x0, #:lo12:.LANCHOR2+1221] ++ add w0, w0, w0, lsl 1 ++ cmp w28, w0, lsr 2 ++ bcc .L756 ++ cmn w28, #1 ++ mov w0, 256 ++ csel w28, w28, w0, eq ++.L756: ++ mov w0, w21 ++ bl NandcWaitFlashReady ++ cbz w23, .L741 ++ mov w0, 4 ++ bl NandcSetDdrMode ++.L741: ++ 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], 128 ++ ret ++.L759: ++ mov w23, 0 ++ b .L743 ++.L758: ++ mov w23, 0 ++ b .L742 ++.L753: ++ ldr x0, [x29, 112] ++ mov w1, w20 ++ ldrb w0, [x0, #:lo12:g_retryMode] ++ sub w0, w0, #67 ++ and w0, w0, 255 ++ cmp w0, 1 ++ mov x0, x19 ++ bhi .L745 ++ bl SandiskSetRRPara ++.L746: ++ ldr x0, [x29, 112] ++ ldrb w0, [x0, #:lo12:g_retryMode] ++ cmp w0, 34 ++ bne .L747 ++ adrp x0, g_maxRetryCount ++ ldrb w0, [x0, #:lo12:g_maxRetryCount] ++ sub w0, w0, #3 ++ cmp w20, w0 ++ bne .L747 ++ ldr x1, [x29, 104] ++ mov w0, 179 ++ str w0, [x1, 8] ++.L747: ++ add x0, x22, x27, lsl 8 ++ mov w1, 38 ++ str w1, [x0, 2056] ++ mov w1, 93 ++ str w1, [x0, 2056] ++ cbz w23, .L748 ++ mov w0, 4 ++ bl NandcSetDdrMode ++ ldr w1, [x29, 120] ++ mov x3, x26 ++ mov x2, x25 ++ mov w0, w21 ++ bl FlashReadRawPage ++ mov w28, w0 ++ mov w0, 0 ++ bl NandcSetDdrMode ++.L749: ++ cmn w28, #1 ++ beq .L750 ++ adrp x0, .LANCHOR2+1221 ++ cmn w24, #1 ++ csel w24, w24, w28, ne ++ ldrb w0, [x0, #:lo12:.LANCHOR2+1221] ++ add w0, w0, w0, lsl 1 ++ cmp w28, w0, lsr 2 ++ bcc .L752 ++ mov x26, 0 ++ mov x25, 0 ++.L750: ++ add w20, w20, 1 ++ b .L744 ++.L745: ++ bl ToshibaSetRRPara ++ b .L746 ++.L748: ++ ldr w1, [x29, 120] ++ mov x3, x26 ++ mov x2, x25 ++ mov w0, w21 ++ bl FlashReadRawPage ++ mov w28, w0 ++ b .L749 ++.L754: ++ bl ToshibaSetRRPara ++ b .L755 ++ .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] ++ and w22, w0, 255 ++ stp x19, x20, [sp, 16] ++ mov w0, w22 ++ stp x23, x24, [sp, 48] ++ mov w23, w1 ++ stp x25, x26, [sp, 64] ++ mov x24, x2 ++ str x27, [sp, 80] ++ mov x25, x3 ++ bl NandcWaitFlashReady ++ adrp x26, g_maxRetryCount ++ sbfiz x1, x22, 4, 32 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ adrp x27, .LANCHOR2 ++ add x2, x0, x1 ++ add x26, x26, :lo12:g_maxRetryCount ++ add x27, x27, :lo12:.LANCHOR2 ++ mov w21, 1 ++ ldr x0, [x0, x1] ++ mov w19, -1 ++ ldrb w20, [x2, 8] ++ add x20, x20, 8 ++ add x20, x0, x20, lsl 8 ++.L770: ++ ldrb w0, [x26] ++ add w0, w0, 1 ++ cmp w21, w0 ++ bcc .L774 ++.L773: ++ mov x0, x20 ++ mov w1, 0 ++ bl SamsungSetRRPara ++ adrp x0, .LANCHOR2+1221 ++ ldrb w0, [x0, #:lo12:.LANCHOR2+1221] ++ add w0, w0, w0, lsl 1 ++ cmp w19, w0, lsr 2 ++ bcc .L769 ++ cmn w19, #1 ++ mov w0, 256 ++ csel w19, w19, w0, eq ++.L769: ++ 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 ++.L774: ++ mov w1, w21 ++ mov x0, x20 ++ bl SamsungSetRRPara ++ mov x3, x25 ++ mov x2, x24 ++ mov w1, w23 ++ mov w0, w22 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ beq .L771 ++ ldrb w1, [x27, 1221] ++ cmn w19, #1 ++ csel w19, w19, w0, ne ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L776 ++ mov x25, 0 ++ mov x24, 0 ++.L771: ++ add w21, w21, 1 ++ b .L770 ++.L776: ++ mov w19, w0 ++ b .L773 ++ .size SamsungReadRetrial, .-SamsungReadRetrial ++ .align 2 ++ .global MicronReadRetrial ++ .type MicronReadRetrial, %function ++MicronReadRetrial: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ adrp x0, .LANCHOR2 ++ stp x23, x24, [sp, 48] ++ str w1, [x29, 140] ++ add x1, x0, :lo12:.LANCHOR2 ++ stp x25, x26, [sp, 64] ++ mov x24, x2 ++ stp x21, x22, [sp, 32] ++ mov x25, x3 ++ stp x27, x28, [sp, 80] ++ str x0, [x29, 128] ++ ldrb w19, [x1, 1221] ++ ldrb w1, [x1, 1220] ++ cbnz w1, .L784 ++ add w19, w19, w19, lsl 1 ++ asr w19, w19, 2 ++.L785: ++ adrp x21, .LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR0 ++ add x21, x21, w20, sxtw 4 ++ mov w23, 0 ++ mov w28, 137 ++.L795: ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ ldrb w4, [x21, 8] ++ adrp x7, g_maxRetryCount ++ ldr x8, [x21] ++ add x7, x7, :lo12:g_maxRetryCount ++ mov w22, 0 ++ mov w26, -1 ++ add x27, x8, x4, lsl 8 ++.L786: ++ ldrb w0, [x7] ++ cmp w22, w0 ++ bcc .L790 ++.L789: ++ add x4, x8, x4, lsl 8 ++ mov w0, 239 ++ str x4, [x29, 120] ++ str w0, [x4, 2056] ++ mov x0, 1000 ++ str w28, [x4, 2052] ++ bl __const_udelay ++ ldr x4, [x29, 120] ++ cmp w26, w19 ++ str wzr, [x4, 2048] ++ str wzr, [x4, 2048] ++ str wzr, [x4, 2048] ++ str wzr, [x4, 2048] ++ bcc .L791 ++ cmn w26, #1 ++ mov w0, 256 ++ csel w26, w26, w0, eq ++.L791: ++ cmp w26, 256 ++ ccmn w26, #1, 4, ne ++ bne .L792 ++ ldr w2, [x29, 140] ++ adrp x0, .LC11 ++ mov w4, w26 ++ mov w3, w22 ++ mov w1, w22 ++ add x0, x0, :lo12:.LC11 ++ bl printk ++ cbnz w23, .L793 ++ ldr x0, [x29, 128] ++ add x0, x0, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 1220] ++ cbz w0, .L783 ++ cmn w26, #1 ++ bne .L783 ++ mov w1, 3 ++ mov w0, w20 ++ mov w23, 1 ++ bl micron_auto_read_calibration_config ++ b .L795 ++.L784: ++ mov w0, 3 ++ sdiv w19, w19, w0 ++ b .L785 ++.L790: ++ mov w0, 239 ++ str w0, [x27, 2056] ++ str w28, [x27, 2052] ++ mov x0, 1000 ++ stp x4, x7, [x29, 96] ++ str x8, [x29, 112] ++ bl __const_udelay ++ add w9, w22, 1 ++ str w9, [x27, 2048] ++ str wzr, [x27, 2048] ++ mov x3, x25 ++ ldr w1, [x29, 140] ++ mov x2, x24 ++ str wzr, [x27, 2048] ++ mov w0, w20 ++ str wzr, [x27, 2048] ++ str w9, [x29, 120] ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldr w9, [x29, 120] ++ ldp x4, x7, [x29, 96] ++ ldr x8, [x29, 112] ++ beq .L787 ++ cmn w26, #1 ++ csel w26, w26, w0, ne ++ cmp w0, w19 ++ bcc .L797 ++ mov x25, 0 ++ mov x24, 0 ++.L787: ++ mov w22, w9 ++ b .L786 ++.L797: ++ mov w26, w0 ++ mov x25, 0 ++ mov x24, 0 ++ b .L789 ++.L793: ++ mov w0, w20 ++ mov w1, 0 ++ bl micron_auto_read_calibration_config ++ cmn w26, #1 ++ mov w0, 256 ++ csel w26, w26, w0, eq ++.L783: ++ 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], 144 ++ ret ++.L792: ++ cbz w23, .L783 ++ mov w1, 0 ++ mov w0, w20 ++ mov w26, 256 ++ bl micron_auto_read_calibration_config ++ b .L783 ++ .size MicronReadRetrial, .-MicronReadRetrial ++ .align 2 ++ .global HynixReadRetrial ++ .type HynixReadRetrial, %function ++HynixReadRetrial: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ stp x27, x28, [sp, 80] ++ and x28, x0, 255 ++ add x0, x21, :lo12:.LANCHOR2 ++ stp x25, x26, [sp, 64] ++ add x0, x0, 1232 ++ stp x23, x24, [sp, 48] ++ stp x19, x20, [sp, 16] ++ mov w27, w1 ++ adrp x22, .LANCHOR0 ++ add x1, x0, x28 ++ ldrb w24, [x0, 2] ++ add x0, x22, :lo12:.LANCHOR0 ++ mov x23, x28 ++ mov x25, x2 ++ mov x26, x3 ++ ldrb w19, [x1, 12] ++ ldr x0, [x0, 104] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #7 ++ and w0, w0, 255 ++ cmp w0, 1 ++ bhi .L809 ++ ldrb w19, [x1, 20] ++.L809: ++ mov w0, w23 ++ bl NandcWaitFlashReady ++ add x5, x21, :lo12:.LANCHOR2 ++ mov w4, 0 ++ add x6, x5, 1236 ++ mov w20, -1 ++.L810: ++ cmp w4, w24 ++ bcc .L815 ++.L814: ++ add x22, x22, :lo12:.LANCHOR0 ++ ldr x0, [x22, 104] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #7 ++ and w0, w0, 255 ++ cmp w0, 1 ++ add x0, x21, :lo12:.LANCHOR2 ++ add x0, x0, x28 ++ bhi .L816 ++ strb w19, [x0, 1252] ++.L817: ++ add x21, x21, :lo12:.LANCHOR2 ++ ldrb w0, [x21, 1221] ++ add w0, w0, w0, lsl 1 ++ cmp w20, w0, lsr 2 ++ bcc .L808 ++ cmn w20, #1 ++ mov w0, 256 ++ csel w20, w20, w0, eq ++.L808: ++ 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], 128 ++ ret ++.L815: ++ add w19, w19, 1 ++ ldrb w1, [x5, 1233] ++ and w19, w19, 255 ++ mov x2, x6 ++ cmp w24, w19 ++ str w4, [x29, 108] ++ csel w19, w19, wzr, hi ++ stp x6, x5, [x29, 112] ++ mov w3, w19 ++ mov w0, w23 ++ bl HynixSetRRPara ++ mov x3, x26 ++ mov x2, x25 ++ mov w1, w27 ++ mov w0, w23 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldr w4, [x29, 108] ++ ldp x6, x5, [x29, 112] ++ beq .L812 ++ ldrb w1, [x5, 1221] ++ cmn w20, #1 ++ csel w20, w20, w0, ne ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L819 ++ mov x26, 0 ++ mov x25, 0 ++.L812: ++ add w4, w4, 1 ++ b .L810 ++.L819: ++ mov w20, w0 ++ b .L814 ++.L816: ++ strb w19, [x0, 1244] ++ b .L817 ++ .size HynixReadRetrial, .-HynixReadRetrial ++ .align 2 ++ .type samsung_read_retrial, %function ++samsung_read_retrial: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ and w23, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov x24, x2 ++ stp x25, x26, [sp, 64] ++ mov w0, w23 ++ stp x19, x20, [sp, 16] ++ mov w26, w1 ++ mov x25, x3 ++ stp x27, x28, [sp, 80] ++ bl NandcWaitFlashReady ++ adrp x22, .LANCHOR2 ++ sbfiz x1, x23, 4, 32 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ adrp x21, .LANCHOR3 ++ add x3, x0, x1 ++ ldr x1, [x0, x1] ++ add x0, x22, :lo12:.LANCHOR2 ++ ldrb w19, [x3, 8] ++ ldrb w2, [x0, 2092] ++ cbnz w2, .L827 ++ add x19, x1, x19, lsl 8 ++ add x21, x21, :lo12:.LANCHOR3 ++ mov x27, x0 ++ mov x4, 0 ++ mov w20, -1 ++ mov w6, 239 ++ mov w5, 141 ++.L831: ++ str w6, [x19, 2056] ++ add x0, x21, x4 ++ str w5, [x19, 2052] ++ add w28, w4, 1 ++ stp w6, w5, [x29, 96] ++ mov x3, x25 ++ ldrsb w0, [x0, 1] ++ mov x2, x24 ++ str w0, [x19, 2048] ++ mov w1, w26 ++ str wzr, [x19, 2048] ++ mov w0, w23 ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str x4, [x29, 104] ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldp w6, w5, [x29, 96] ++ ldr x4, [x29, 104] ++ beq .L828 ++ ldrb w1, [x27, 1221] ++ cmn w20, #1 ++ csel w20, w20, w0, ne ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L839 ++ mov x25, 0 ++ mov x24, 0 ++.L828: ++ add x4, x4, 1 ++ cmp x4, 25 ++ bne .L831 ++ mov w28, 26 ++.L830: ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 141 ++.L855: ++ str w0, [x19, 2052] ++ add x22, x22, :lo12:.LANCHOR2 ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ ldrb w0, [x22, 1221] ++ add w0, w0, w0, lsl 1 ++ cmp w20, w0, lsr 2 ++ bcc .L837 ++ cmn w20, #1 ++ mov w0, 256 ++ csel w20, w20, w0, eq ++.L837: ++ cmp w20, 256 ++ ccmn w20, #1, 4, ne ++ bne .L838 ++ adrp x0, .LC12 ++ mov w4, w20 ++ mov w3, w28 ++ mov w2, w26 ++ mov w1, w28 ++ add x0, x0, :lo12:.LC12 ++ bl printk ++.L838: ++ mov w0, w23 ++ bl NandcWaitFlashReady ++ 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 ++.L839: ++ mov w20, w0 ++ b .L830 ++.L827: ++ add x21, x21, :lo12:.LANCHOR3 ++ add x19, x1, x19, lsl 8 ++ add x21, x21, 36 ++ mov x27, x0 ++ mov w20, -1 ++ mov w28, 1 ++ mov w5, 239 ++ mov w4, 137 ++.L836: ++ str w5, [x19, 2056] ++ mov x3, x25 ++ str w4, [x19, 2052] ++ mov x2, x24 ++ stp w5, w4, [x29, 100] ++ mov w1, w26 ++ ldrb w0, [x21] ++ str w0, [x19, 2048] ++ ldrb w0, [x21, 1] ++ str w0, [x19, 2048] ++ ldrb w0, [x21, 2] ++ str w0, [x19, 2048] ++ ldrb w0, [x21, 3] ++ str w0, [x19, 2048] ++ mov w0, w23 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldp w5, w4, [x29, 100] ++ beq .L833 ++ ldrb w1, [x27, 1221] ++ cmn w20, #1 ++ csel w20, w20, w0, ne ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L840 ++ mov x25, 0 ++ mov x24, 0 ++.L833: ++ add w28, w28, 1 ++ add x21, x21, 4 ++ cmp w28, 26 ++ bne .L836 ++.L835: ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 137 ++ b .L855 ++.L840: ++ mov w20, w0 ++ b .L835 ++ .size samsung_read_retrial, .-samsung_read_retrial ++ .align 2 ++ .global FlashProgPage ++ .type FlashProgPage, %function ++FlashProgPage: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w20, w1 ++ stp x21, x22, [sp, 32] ++ adrp x1, .LANCHOR1+481 ++ str x23, [sp, 48] ++ mov x22, x2 ++ ldrb w21, [x1, #:lo12:.LANCHOR1+481] ++ ands w19, w0, 255 ++ mov x23, x3 ++ bne .L857 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 89] ++ ldr w2, [x0, 92] ++ mul w1, w1, w2 ++ cmp w1, w20 ++ bls .L857 ++ ldrb w0, [x0, 88] ++ cmp w0, 0 ++ mov w0, 4 ++ csel w21, w21, w0, eq ++.L857: ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashCs ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashProgFirstCmd ++ mov x4, x23 ++ mov x3, x22 ++ mov w2, w21 ++ mov w1, 1 ++ mov w0, w19 ++ bl NandcXferData ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashProgSecondCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w1, w20 ++ mov w0, w19 ++ bl FlashReadStatus ++ mov w2, w0 ++ mov w0, w19 ++ bl NandcFlashDeCs ++ and w0, w2, 1 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size FlashProgPage, .-FlashProgPage ++ .align 2 ++ .global FlashSavePhyInfo ++ .type FlashSavePhyInfo, %function ++FlashSavePhyInfo: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ adrp x20, .LANCHOR2 ++ add x20, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ mov w23, 20036 ++ ldr x0, [x19, 64] ++ movk w23, 0x4e41, lsl 16 ++ str x0, [x20, 2200] ++ mov w22, 0 ++ ldrb w0, [x20, 2213] ++ mov w21, 0 ++ bl FlashBchSel ++ ldr x0, [x19, 64] ++ mov w2, 2048 ++ mov w1, 0 ++ bl ftl_memset ++ ldr x0, [x20, 2200] ++ mov w2, 32 ++ str w23, [x0] ++ ldr x0, [x20, 2200] ++ ldrb w1, [x19, 3216] ++ add x0, x0, 16 ++ strh w1, [x0, -4] ++ ldrb w1, [x19, 89] ++ strh w1, [x0, -2] ++ ldrb w1, [x20, 2104] ++ str w1, [x0, 1060] ++ adrp x1, IDByte ++ add x1, x1, :lo12:IDByte ++ bl ftl_memcpy ++ ldr x0, [x20, 2200] ++ mov w2, 8 ++ add x1, x19, 3220 ++ add x0, x0, 80 ++ bl ftl_memcpy ++ ldr x0, [x20, 2200] ++ mov w2, 32 ++ add x1, x19, 3228 ++ add x0, x0, 96 ++ bl ftl_memcpy ++ ldr x0, [x20, 2200] ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ mov w2, 32 ++ add x1, x1, 472 ++ add x0, x0, 160 ++ bl ftl_memcpy ++ ldr x0, [x20, 2200] ++ mov w2, 32 ++ add x1, x19, 112 ++ add x0, x0, 192 ++ bl ftl_memcpy ++ ldr x0, [x20, 2200] ++ mov w2, 852 ++ add x1, x20, 1232 ++ add x0, x0, 224 ++ bl ftl_memcpy ++ ldr x6, [x20, 2200] ++ mov w1, 2036 ++ add x0, x6, 12 ++ bl js_hash ++ str w0, [x6, 8] ++ mov w0, 1592 ++ str w0, [x6, 4] ++ ldr x0, [x20, 2216] ++ str x0, [x20, 2200] ++ mov w0, 0 ++ bl flash_enter_slc_mode ++.L866: ++ ldr w1, [x19, 92] ++ mov w2, 0 ++ mov w0, 0 ++ mul w1, w21, w1 ++ bl FlashEraseBlock ++ ldrb w0, [x20, 1220] ++ cbz w0, .L861 ++ mov w24, 0 ++.L862: ++ ldr w1, [x19, 92] ++ mov x3, 0 ++ ldr x2, [x19, 64] ++ mov w0, 0 ++ madd w1, w21, w1, w24 ++ add w24, w24, 1 ++ bl FlashProgPage ++ cmp w24, 10 ++ bne .L862 ++.L863: ++ ldr w1, [x19, 92] ++ mov x3, 0 ++ ldr x2, [x20, 2216] ++ mov w0, 0 ++ mul w1, w21, w1 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ add w7, w21, 1 ++ beq .L864 ++ ldr x6, [x20, 2200] ++ ldr w0, [x6] ++ cmp w0, w23 ++ bne .L864 ++ mov w1, 2036 ++ add x0, x6, 12 ++ bl js_hash ++ ldr w1, [x6, 8] ++ cmp w1, w0 ++ bne .L864 ++ ldr w0, [x19, 92] ++ cmp w22, 1 ++ str w7, [x19, 72] ++ mul w21, w0, w21 ++ str w21, [x20, 2208] ++ beq .L867 ++ mov w22, 1 ++.L864: ++ mov w21, w7 ++ cmp w7, 4 ++ bne .L866 ++.L865: ++ mov w0, 0 ++ bl flash_exit_slc_mode ++ cmp w22, 0 ++ csetm w0, eq ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L861: ++ ldr w1, [x19, 92] ++ mov x3, 0 ++ ldr x2, [x19, 64] ++ mov w0, 0 ++ mul w1, w21, w1 ++ bl FlashProgPage ++ ldr w1, [x19, 92] ++ mov x3, 0 ++ ldr x2, [x19, 64] ++ mov w0, 0 ++ mul w1, w21, w1 ++ add w1, w1, 1 ++ bl FlashProgPage ++ b .L863 ++.L867: ++ mov w22, 2 ++ b .L865 ++ .size FlashSavePhyInfo, .-FlashSavePhyInfo ++ .align 2 ++ .global FlashReadIdbDataRaw ++ .type FlashReadIdbDataRaw, %function ++FlashReadIdbDataRaw: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x25, x26, [sp, 64] ++ mov x25, x0 ++ mov w0, 60 ++ stp x21, x22, [sp, 32] ++ strb w0, [x29, 120] ++ mov w0, 40 ++ strb w0, [x29, 121] ++ mov w0, 24 ++ strb w0, [x29, 122] ++ mov w0, 16 ++ adrp x21, .LANCHOR2 ++ strb w0, [x29, 123] ++ add x0, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x27, x28, [sp, 80] ++ ldrb w26, [x0, 1221] ++ ldr w0, [x0, 2100] ++ cbz w0, .L875 ++ mov w0, 0 ++ bl flash_enter_slc_mode ++.L875: ++ adrp x22, .LANCHOR0 ++ add x22, x22, :lo12:.LANCHOR0 ++ mov w28, 35899 ++ add x27, x29, 120 ++ mov x19, x22 ++ mov w24, -1 ++ mov w20, 2 ++ movk w28, 0xfcdc, lsl 16 ++ mov w2, 2048 ++ mov w1, 0 ++ mov x0, x25 ++ bl ftl_memset ++.L876: ++ ldrb w0, [x22, 89] ++ cmp w20, w0 ++ bcc .L881 ++.L880: ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w0, w26 ++ bl FlashBchSel ++ ldr w0, [x21, 2100] ++ cbz w0, .L874 ++ mov w0, 0 ++ bl flash_exit_slc_mode ++.L874: ++ 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], 128 ++ ret ++.L881: ++ mov x23, 0 ++.L878: ++ ldrb w4, [x23, x27] ++ str w4, [x29, 108] ++ mov w0, w4 ++ bl FlashBchSel ++ ldr w1, [x19, 92] ++ mov x3, 0 ++ ldr x2, [x19, 64] ++ mov w0, 0 ++ mul w1, w20, w1 ++ bl FlashReadRawPage ++ cmn w0, #1 ++ ldr w4, [x29, 108] ++ bne .L877 ++ add x23, x23, 1 ++ cmp x23, 4 ++ bne .L878 ++.L879: ++ add w20, w20, 1 ++ b .L876 ++.L884: ++ mov w24, 0 ++ b .L880 ++.L877: ++ ldr x0, [x19, 64] ++ ldr w0, [x0] ++ cmp w0, w28 ++ bne .L879 ++ mov w1, w4 ++ adrp x0, .LC13 ++ add x0, x0, :lo12:.LC13 ++ bl printk ++ ldr x1, [x19, 64] ++ mov w2, 2048 ++ mov x0, x25 ++ bl ftl_memcpy ++ ldr x0, [x19, 64] ++ ldr w0, [x0, 512] ++ strb w0, [x19, 89] ++ ldr w0, [x19, 72] ++ cmp w20, w0 ++ bcs .L884 ++ mov w24, 0 ++ str w20, [x19, 72] ++ bl FlashSavePhyInfo ++ b .L879 ++ .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] ++ adrp x20, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ add x23, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ adrp x19, .LANCHOR2 ++ add x21, x19, :lo12:.LANCHOR2 ++ mov x22, x0 ++ stp x25, x26, [sp, 64] ++ mov w0, 32768 ++ stp x27, x28, [sp, 80] ++ bl ftl_dma32_malloc ++ str x0, [x23, 64] ++ mov w0, 32768 ++ bl ftl_dma32_malloc ++ str x0, [x21, 2216] ++ mov w0, 4096 ++ bl ftl_dma32_malloc ++ str x0, [x21, 2224] ++ mov w0, 32768 ++ bl ftl_dma32_malloc ++ str x0, [x21, 2232] ++ mov w0, 4096 ++ bl ftl_dma32_malloc ++ str x0, [x21, 2240] ++ mov w0, 50 ++ strb w0, [x21, 2212] ++ adrp x25, .LC14 ++ strb w0, [x23, 89] ++ mov w0, 128 ++ str w0, [x23, 92] ++ mov w0, 60 ++ strb wzr, [x21, 2104] ++ add x25, x25, :lo12:.LC14 ++ strb w0, [x21, 2213] ++ mov x0, x22 ++ strb wzr, [x21, 2248] ++ adrp x22, IDByte ++ str wzr, [x21, 2184] ++ add x21, x22, :lo12:IDByte ++ mov w24, 0 ++ mov w28, 239 ++ strb wzr, [x23, 88] ++ str wzr, [x23, 72] ++ bl NandcInit ++.L899: ++ ldrb w2, [x23, 8] ++ and w26, w24, 255 ++ str w2, [x29, 108] ++ mov w0, w26 ++ ldr x27, [x23] ++ bl FlashReset ++ mov w0, w26 ++ bl NandcFlashCs ++ ldr w2, [x29, 108] ++ mov w0, 144 ++ ubfiz x2, x2, 8, 8 ++ add x27, x27, x2 ++ str w0, [x27, 2056] ++ mov x0, 1000 ++ str wzr, [x27, 2052] ++ bl __const_udelay ++ ldr w0, [x27, 2048] ++ and w0, w0, 255 ++ strb w0, [x21] ++ cmp w0, 44 ++ ldr w2, [x27, 2048] ++ strb w2, [x21, 1] ++ ldr w2, [x27, 2048] ++ strb w2, [x21, 2] ++ ldr w2, [x27, 2048] ++ strb w2, [x21, 3] ++ ldr w2, [x27, 2048] ++ strb w2, [x21, 4] ++ ldr w2, [x27, 2048] ++ strb w2, [x21, 5] ++ bne .L894 ++ str w28, [x27, 2056] ++ mov w0, 1 ++ str w0, [x27, 2052] ++ mov x0, 1000 ++ bl __const_udelay ++ mov w0, 4 ++ str w0, [x27, 2048] ++ str wzr, [x27, 2048] ++ str wzr, [x27, 2048] ++ str wzr, [x27, 2048] ++.L894: ++ mov w0, w26 ++ bl NandcFlashDeCs ++ ldrb w2, [x21] ++ sub w0, w2, #1 ++ and w0, w0, 255 ++ cmp w0, 253 ++ bhi .L895 ++ ldrb w7, [x21, 5] ++ add w1, w24, 1 ++ ldrb w6, [x21, 4] ++ mov x0, x25 ++ ldrb w5, [x21, 3] ++ ldrb w4, [x21, 2] ++ ldrb w3, [x21, 1] ++ bl printk ++.L895: ++ cbnz w24, .L896 ++ ldrb w0, [x22, #:lo12:IDByte] ++ add x1, x22, :lo12:IDByte ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 253 ++ bhi .L947 ++ ldrb w0, [x1, 1] ++ cmp w0, 255 ++ beq .L947 ++ bl FlashCs123Init ++.L896: ++ ldrb w0, [x21] ++ cmp w0, 181 ++ bne .L898 ++ mov w0, 44 ++ strb w0, [x21] ++.L898: ++ add w24, w24, 1 ++ add x23, x23, 16 ++ add x21, x21, 8 ++ cmp w24, 4 ++ bne .L899 ++ ldrb w0, [x22, #:lo12:IDByte] ++ cmp w0, 173 ++ beq .L900 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr w0, [x0, 2108] ++ bl NandcSetDdrMode ++.L900: ++ add x21, x19, :lo12:.LANCHOR2 ++ mov w2, 852 ++ mov w1, 0 ++ add x0, x21, 1232 ++ bl ftl_memset ++ add x2, x20, :lo12:.LANCHOR0 ++ adrp x0, .LANCHOR1 ++ add x1, x0, :lo12:.LANCHOR1 ++ ldr w4, [x21, 2116] ++ add x1, x1, 472 ++ strb wzr, [x2, 96] ++ str x1, [x2, 104] ++ mov w2, 12336 ++ movk w2, 0x5638, lsl 16 ++ cmp w4, w2 ++ bne .L901 ++ ldrb w1, [x1, 19] ++ cmp w1, 50 ++ beq .L901 ++ mov w1, 1 ++ str w1, [x21, 2100] ++.L901: ++ add x1, x22, :lo12:IDByte ++ ldrb w2, [x1, 1] ++ add w1, w2, 95 ++ and w3, w1, 255 ++ mov x1, 1 ++ cmp w3, 57 ++ bhi .L902 ++ movk x1, 0x205, lsl 48 ++ lsr x1, x1, x3 ++ mvn x1, x1 ++.L902: ++ and w1, w1, 1 ++ cmp w2, 241 ++ eor w1, w1, 1 ++ cset w3, eq ++ orr w1, w3, w1 ++ cbnz w1, .L903 ++ cmp w2, 220 ++ bne .L904 ++ add x1, x22, :lo12:IDByte ++ ldrb w1, [x1, 3] ++ cmp w1, 149 ++ bne .L904 ++.L903: ++ add x1, x20, :lo12:.LANCHOR0 ++ add x3, x19, :lo12:.LANCHOR2 ++ mov w6, 16 ++ mov w5, 1 ++ add x7, x22, :lo12:IDByte ++ strb w6, [x1, 89] ++ strb w5, [x1, 88] ++ add x1, x0, :lo12:.LANCHOR1 ++ strb w6, [x3, 2213] ++ ldrb w6, [x22, #:lo12:IDByte] ++ strb w6, [x1, 3417] ++ strb w2, [x1, 3418] ++ cmp w6, 152 ++ bne .L906 ++ ldrsb w1, [x7, 4] ++ tbnz w1, #31, .L907 ++ mov w1, 24 ++ strb w1, [x3, 2213] ++.L906: ++ cmp w4, 2049 ++ mov w1, 12336 ++ movk w1, 0x5638, lsl 16 ++ ccmp w4, w1, 4, ne ++ bne .L909 ++ add x1, x19, :lo12:.LANCHOR2 ++ mov w3, 16 ++ strb w3, [x1, 2213] ++.L909: ++ cmp w2, 218 ++ bne .L910 ++ add x1, x0, :lo12:.LANCHOR1 ++ mov w2, 2048 ++ strh w2, [x1, 3430] ++ mov w2, -38 ++.L993: ++ strb w2, [x1, 3418] ++.L911: ++ add x21, x0, :lo12:.LANCHOR1 ++ add x0, x20, :lo12:.LANCHOR0 ++ mov w2, 32 ++ add x1, x21, 3288 ++ add x0, x0, 112 ++ bl ftl_memcpy ++ mov w2, 32 ++ add x1, x21, 3416 ++ add x0, x21, 472 ++ bl ftl_memcpy ++.L904: ++ add x21, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x21, 88] ++ cbnz w0, .L914 ++ bl FlashLoadPhyInfoInRam ++ cbnz w0, .L916 ++ ldr x0, [x21, 104] ++ add x21, x19, :lo12:.LANCHOR2 ++ ldrb w1, [x0, 17] ++ and w0, w1, 7 ++ strb w0, [x21, 2093] ++ tbnz x1, 0, .L916 ++ mov w1, 1 ++ strb w1, [x21, 2104] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x21, 2093] ++ bl NandcSetMode ++.L916: ++ add x0, x20, :lo12:.LANCHOR0 ++ add x21, x19, :lo12:.LANCHOR2 ++ ldr x0, [x0, 104] ++ ldrb w0, [x0, 26] ++ strb w0, [x21, 1220] ++ bl FlashLoadPhyInfo ++ cbz w0, .L914 ++ ldr w0, [x21, 2108] ++ cbz w0, .L919 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++.L988: ++ bl NandcSetMode ++ bl FlashLoadPhyInfo ++ cbz w0, .L914 ++ add x21, x20, :lo12:.LANCHOR0 ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++ ldr x0, [x21, 104] ++ ldrh w1, [x0, 14] ++ adrp x0, .LC15 ++ add x0, x0, :lo12:.LC15 ++ bl printk ++ bl FlashLoadPhyInfoInRam ++ cmn w0, #1 ++ beq .L893 ++ bl FlashDieInfoInit ++ ldr x0, [x21, 104] ++ ldrb w0, [x0, 19] ++ bl FlashGetReadRetryDefault ++ ldr x0, [x21, 104] ++ ldrh w1, [x21, 3452] ++ add w1, w1, 4095 ++ ldrb w2, [x0, 9] ++ cmp w2, w1, lsr 12 ++ blt .L921 ++ ldrh w1, [x0, 14] ++ add w1, w1, 255 ++ cmp w2, w1, lsr 8 ++ bge .L922 ++.L921: ++ ldrh w1, [x0, 14] ++ and w1, w1, -256 ++ strh w1, [x0, 14] ++.L922: ++ add x21, x19, :lo12:.LANCHOR2 ++ ldrb w0, [x21, 2093] ++ tst w0, 6 ++ beq .L923 ++ bl FlashSavePhyInfo ++ mov w0, 0 ++ bl flash_enter_slc_mode ++ ldr w1, [x21, 2208] ++ mov w0, 0 ++ bl FlashDdrParaScan ++ mov w0, 0 ++ bl flash_exit_slc_mode ++.L923: ++ bl FlashSavePhyInfo ++.L914: ++ add x23, x20, :lo12:.LANCHOR0 ++ add x21, x19, :lo12:.LANCHOR2 ++ ldr x2, [x23, 104] ++ str xzr, [x21, 2192] ++ ldrb w0, [x2, 26] ++ strb w0, [x21, 1220] ++ ldrh w0, [x2, 16] ++ ubfx x1, x0, 7, 1 ++ strb w1, [x23, 96] ++ ubfx x1, x0, 3, 1 ++ strb w1, [x21, 2249] ++ ubfx x1, x0, 4, 1 ++ ubfx x0, x0, 8, 3 ++ strb w1, [x21, 2094] ++ strb w0, [x21, 2093] ++ ldrh w1, [x2, 10] ++ ldrb w0, [x2, 12] ++ sdiv w1, w1, w0 ++ ldrb w0, [x2, 18] ++ bl BuildFlashLsbPageTable ++ bl FlashDieInfoInit ++ ldr x0, [x23, 104] ++ ldrh w1, [x0, 16] ++ tbz x1, 6, .L925 ++ adrp x1, g_retryMode ++ ldrb w0, [x0, 19] ++ adrp x2, g_maxRegNum ++ ldrb w3, [x21, 1234] ++ strb w0, [x1, #:lo12:g_retryMode] ++ mov x4, x2 ++ ldrb w1, [x21, 1233] ++ strb w1, [x2, #:lo12:g_maxRegNum] ++ adrp x1, g_maxRetryCount ++ strb w3, [x1, #:lo12:g_maxRetryCount] ++ sub w3, w0, #1 ++ and w3, w3, 255 ++ cmp w3, 7 ++ bhi .L926 ++ adrp x1, HynixReadRetrial ++ add x1, x1, :lo12:HynixReadRetrial ++ str x1, [x21, 2192] ++ sub w1, w0, #5 ++ and w1, w1, 255 ++ cmp w1, 1 ++ ccmp w0, 8, 4, hi ++ bne .L927 ++ mov w1, 1 ++ str w1, [x21, 2176] ++.L927: ++ add x1, x19, :lo12:.LANCHOR2 ++ cmp w0, 7 ++ beq .L989 ++ cmp w0, 8 ++ bne .L950 ++.L989: ++ add x1, x1, 1260 ++.L928: ++ mov x2, 0 ++ mov w3, 0 ++.L930: ++ ldrsb w4, [x1, x2] ++ add x2, x2, 1 ++ cmp w4, 0 ++ cinc w3, w3, eq ++ cmp x2, 32 ++ bne .L930 ++ cmp w3, 27 ++ bls .L925 ++ bl FlashGetReadRetryDefault ++ bl FlashSavePhyInfo ++.L925: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w2, 12336 ++ movk w2, 0x5638, lsl 16 ++ ldr w1, [x0, 2116] ++ cmp w1, w2 ++ bne .L940 ++ ldrb w0, [x0, 1220] ++ cbz w0, .L940 ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr x0, [x0, 104] ++ strb wzr, [x0, 18] ++.L940: ++ ldrb w0, [x22, #:lo12:IDByte] ++ cmp w0, 44 ++ bne .L941 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrb w2, [x0, 2104] ++ cbz w2, .L941 ++ mov w2, 12336 ++ movk w2, 0x5638, lsl 16 ++ cmp w1, w2 ++ bne .L942 ++ ldrb w0, [x0, 1220] ++ cbnz w0, .L941 ++.L942: ++ add x0, x19, :lo12:.LANCHOR2 ++ strb wzr, [x0, 2104] ++ mov w0, 1 ++ bl FlashSetInterfaceMode ++ mov w0, 1 ++ bl NandcSetMode ++.L941: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrb w0, [x1, 2093] ++ tst w0, 6 ++ beq .L943 ++ ldrb w1, [x1, 2104] ++ cbnz w1, .L944 ++ tbnz x0, 0, .L943 ++.L944: ++ mov w0, 0 ++ bl flash_enter_slc_mode ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr w1, [x0, 2208] ++ mov w0, 0 ++ bl FlashDdrParaScan ++ mov w0, 0 ++ bl flash_exit_slc_mode ++.L943: ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w21, 16 ++ add x19, x19, :lo12:.LANCHOR2 ++ ldr x0, [x20, 104] ++ ldrb w0, [x0, 20] ++ bl FlashBchSel ++ add x0, x20, 3456 ++ bl FlashReadIdbDataRaw ++ mov w0, 18928 ++ strb w21, [x20, 89] ++ movk w0, 0x2, lsl 16 ++ bl FlashTimingCfg ++ ldr x1, [x20, 104] ++ ldrb w4, [x22, #:lo12:IDByte] ++ ldrb w2, [x1, 12] ++ strh w2, [x19, 1200] ++ ldrb w2, [x1, 7] ++ str w2, [x19, 1196] ++ add x2, x22, :lo12:IDByte ++ ldrb w3, [x2, 1] ++ ldrb w2, [x2, 3] ++ orr w2, w4, w2, lsl 24 ++ lsl w4, w3, w21 ++ orr w3, w4, w3, lsl 8 ++ ldrh w4, [x1, 14] ++ orr w2, w2, w3 ++ str w2, [x19, 1192] ++ ldrb w2, [x20, 3216] ++ strh w2, [x19, 1202] ++ ldrb w2, [x1, 13] ++ strh w2, [x19, 1204] ++ strh w4, [x19, 1206] ++ ldrh w2, [x1, 10] ++ strh w2, [x19, 1208] ++ ldrb w3, [x1, 12] ++ ldrh w2, [x1, 10] ++ sdiv w2, w2, w3 ++ strh w2, [x19, 1210] ++ ldrb w3, [x1, 9] ++ strh w3, [x19, 1212] ++ ldrh w5, [x1, 10] ++ ldrb w2, [x1, 9] ++ mul w2, w2, w5 ++ mov w5, 512 ++ strh w5, [x19, 1216] ++ ldrb w5, [x20, 89] ++ and w2, w2, 65535 ++ strh w5, [x19, 1218] ++ strh w2, [x19, 1214] ++ ldrb w5, [x20, 88] ++ cmp w5, 1 ++ bne .L945 ++ ubfiz w2, w2, 1, 15 ++ lsr w4, w4, 1 ++ ubfiz w3, w3, 1, 15 ++ strh w2, [x19, 1214] ++ strb w21, [x20, 89] ++ mov w2, 8 ++ strh w4, [x19, 1206] ++ strh w3, [x19, 1212] ++ strh w2, [x19, 1218] ++.L945: ++ ldrb w0, [x1, 20] ++ bl FlashBchSel ++ bl ftl_flash_suspend ++ mov w0, 0 ++.L893: ++ 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 ++.L910: ++ cmp w2, 220 ++ bne .L912 ++ add x1, x0, :lo12:.LANCHOR1 ++ mov w2, 4096 ++ strh w2, [x1, 3430] ++ mov w2, -36 ++ b .L993 ++.L912: ++ cmp w2, 211 ++ bne .L911 ++ add x1, x0, :lo12:.LANCHOR1 ++ mov w2, 4096 ++ strh w2, [x1, 3430] ++ mov w2, 2 ++ strb w2, [x1, 3429] ++ b .L911 ++.L919: ++ ldrb w0, [x21, 2093] ++ bl FlashSetInterfaceMode ++ ldrb w0, [x21, 2093] ++ b .L988 ++.L950: ++ add x1, x1, 1252 ++ b .L928 ++.L926: ++ sub w3, w0, #17 ++ and w3, w3, 255 ++ cmp w3, 2 ++ bhi .L932 ++ adrp x2, MicronReadRetrial ++ add x2, x2, :lo12:MicronReadRetrial ++ str x2, [x21, 2192] ++ cmp w0, 19 ++ beq .L933 ++.L994: ++ mov w0, 7 ++ b .L991 ++.L933: ++ mov w0, 15 ++.L991: ++ strb w0, [x1, #:lo12:g_maxRetryCount] ++ b .L925 ++.L932: ++ sub w3, w0, #65 ++ cmp w0, 33 ++ and w3, w3, 255 ++ ccmp w3, 1, 0, ne ++ bhi .L934 ++ adrp x0, ToshibaReadRetrial ++ add x0, x0, :lo12:ToshibaReadRetrial ++ str x0, [x21, 2192] ++ mov w0, 4 ++ strb w0, [x2, #:lo12:g_maxRegNum] ++ b .L994 ++.L934: ++ sub w3, w0, #34 ++ sub w2, w0, #67 ++ and w3, w3, 255 ++ and w2, w2, 255 ++ cmp w3, 1 ++ ccmp w2, 1, 0, hi ++ bhi .L935 ++ adrp x3, ToshibaReadRetrial ++ add x3, x3, :lo12:ToshibaReadRetrial ++ str x3, [x21, 2192] ++ cmp w0, 35 ++ mov w3, 68 ++ ccmp w0, w3, 4, ne ++ beq .L936 ++ mov w0, 7 ++.L990: ++ strb w0, [x1, #:lo12:g_maxRetryCount] ++ cmp w2, 1 ++ bhi .L938 ++ mov w0, 4 ++.L992: ++ strb w0, [x4, #:lo12:g_maxRegNum] ++ b .L925 ++.L936: ++ mov w0, 17 ++ b .L990 ++.L938: ++ mov w0, 5 ++ b .L992 ++.L935: ++ cmp w0, 49 ++ bne .L939 ++ adrp x0, SamsungReadRetrial ++ add x0, x0, :lo12:SamsungReadRetrial ++ str x0, [x21, 2192] ++ b .L925 ++.L939: ++ cmp w0, 50 ++ bne .L925 ++ adrp x0, samsung_read_retrial ++ str wzr, [x21, 2100] ++ add x0, x0, :lo12:samsung_read_retrial ++ str x0, [x21, 2192] ++ b .L925 ++.L947: ++ mov w0, -2 ++ b .L893 ++.L907: ++ strb w5, [x3, 2248] ++ b .L906 ++ .size FlashInit, .-FlashInit ++ .align 2 ++ .global FlashPageProgMsbFFData ++ .type FlashPageProgMsbFFData, %function ++FlashPageProgMsbFFData: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ adrp x21, .LANCHOR2 ++ add x0, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ and w19, w2, 65535 ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ ldrb w2, [x0, 1220] ++ cbz w2, .L996 ++ ldr w0, [x0, 2100] ++ cbnz w0, .L995 ++.L996: ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ ldr x0, [x20, 104] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #5 ++ and w3, w0, 255 ++ cmp w3, 63 ++ bhi .L995 ++ mov x2, 16391 ++ movk x2, 0x4000, lsl 16 ++ movk x2, 0x2000, lsl 32 ++ movk x2, 0x8000, lsl 48 ++ lsr x0, x2, x3 ++ tbz x0, 0, .L995 ++ mov w23, w1 ++ add x24, x20, 1168 ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w25, 65535 ++.L998: ++ ldr x0, [x20, 104] ++ ldrh w0, [x0, 10] ++ cmp w0, w19 ++ bhi .L999 ++.L995: ++ 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 ++.L999: ++ ldrh w0, [x24, w19, sxtw 1] ++ cmp w0, w25 ++ bne .L995 ++ ldr x0, [x21, 2216] ++ mov w2, 32768 ++ mov w1, 255 ++ bl ftl_memset ++ ldr x3, [x21, 2216] ++ add w1, w19, w23 ++ add w19, w19, 1 ++ mov w0, w22 ++ and w19, w19, 65535 ++ mov x2, x3 ++ bl FlashProgPage ++ b .L998 ++ .size FlashPageProgMsbFFData, .-FlashPageProgMsbFFData ++ .align 2 ++ .global FlashReadSlc2KPages ++ .type FlashReadSlc2KPages, %function ++FlashReadSlc2KPages: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ mov w0, 56 ++ stp x21, x22, [sp, 32] ++ str w2, [x29, 120] ++ adrp x2, .LANCHOR1+481 ++ umaddl x0, w1, w0, x19 ++ stp x25, x26, [sp, 64] ++ str x0, [x29, 112] ++ and w22, w1, 255 ++ adrp x0, .LANCHOR0 ++ ldrb w2, [x2, #:lo12:.LANCHOR1+481] ++ add x26, x0, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ add x0, x26, 3072 ++ stp x27, x28, [sp, 80] ++ str x0, [x29, 96] ++ str w2, [x29, 124] ++.L1005: ++ ldr x0, [x29, 112] ++ cmp x19, x0 ++ bne .L1025 ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L1025: ++ ldr w1, [x29, 120] ++ mov w4, w22 ++ add x3, x29, 136 ++ add x2, x29, 140 ++ mov x0, x19 ++ bl LogAddr2PhyAddr ++ ldrb w1, [x26, 3216] ++ ldr w0, [x29, 136] ++ cmp w1, w0 ++ bhi .L1006 ++ mov w0, -1 ++ str w0, [x19] ++.L1007: ++ sub w22, w22, #1 ++ add x19, x19, 56 ++ and w22, w22, 255 ++ b .L1005 ++.L1006: ++ ldr x1, [x29, 96] ++ adrp x21, .LANCHOR2 ++ mov w25, 0 ++ add x23, x21, :lo12:.LANCHOR2 ++ mov w28, 256 ++ add x0, x1, w0, uxtw ++ ldrb w20, [x0, 148] ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ mov w0, w20 ++ bl NandcFlashCs ++.L1008: ++ ldr w1, [x29, 140] ++ mov w0, w20 ++ bl FlashReadCmd ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ ldrb w2, [x29, 124] ++ mov w1, 0 ++ ldp x3, x4, [x19, 8] ++ mov w0, w20 ++ bl NandcXferData ++ mov w24, w0 ++ ldrb w0, [x23, 2248] ++ cbz w0, .L1009 ++ mov w0, w20 ++ bl flash_read_ecc ++ cmp w0, 5 ++ csel w24, w24, w28, ls ++.L1009: ++ cmp w25, 9 ++ ccmn w24, #1, 0, ls ++ bne .L1010 ++ add w25, w25, 1 ++ b .L1008 ++.L1010: ++ cmp w25, 0 ++ adrp x0, .LANCHOR0 ++ mov w23, 256 ++ csel w24, w24, w23, eq ++ add x28, x0, :lo12:.LANCHOR0 ++ mov w25, 0 ++ add x0, x21, :lo12:.LANCHOR2 ++ str x0, [x29, 104] ++.L1012: ++ ldr w0, [x28, 92] ++ ldr w1, [x29, 140] ++ add w1, w1, w0 ++ mov w0, w20 ++ bl FlashReadCmd ++ mov w0, w20 ++ bl NandcWaitFlashReady ++ ldr x0, [x19, 8] ++ mov w1, 0 ++ ldrb w2, [x29, 124] ++ cmp x0, 0 ++ add x3, x0, 2048 ++ ldr x0, [x19, 16] ++ csel x3, x3, xzr, ne ++ cmp x0, 0 ++ add x4, x0, 8 ++ csel x4, x4, xzr, ne ++ mov w0, w20 ++ bl NandcXferData ++ mov w27, w0 ++ ldr x0, [x29, 104] ++ ldrb w0, [x0, 2248] ++ cbz w0, .L1015 ++ mov w0, w20 ++ bl flash_read_ecc ++ cmp w0, 5 ++ csel w27, w27, w23, ls ++.L1015: ++ cmp w25, 9 ++ ccmn w27, #1, 0, ls ++ bne .L1016 ++ add w25, w25, 1 ++ b .L1012 ++.L1016: ++ cmp w25, 0 ++ mov w2, 256 ++ mov w0, w20 ++ csel w27, w27, w2, eq ++ bl NandcFlashDeCs ++ add x0, x21, :lo12:.LANCHOR2 ++ cmp w24, w27 ++ csel w5, w24, w27, cs ++ ldrb w0, [x0, 1221] ++ add w0, w0, w0, lsl 1 ++ cmp w5, w0, lsr 2 ++ bls .L1018 ++ cmn w5, #1 ++ csel w5, w5, w2, eq ++.L1018: ++ cmp w5, 256 ++ ldr x0, [x19, 16] ++ ccmn w5, #1, 4, ne ++ csel w5, w5, wzr, eq ++ str w5, [x19] ++ cbz x0, .L1021 ++ ldr w1, [x0, 12] ++ cmn w1, #1 ++ bne .L1021 ++ ldr w1, [x0, 8] ++ cmn w1, #1 ++ bne .L1021 ++ ldr w0, [x0] ++ cmn w0, #1 ++ beq .L1021 ++ str w1, [x19] ++.L1021: ++ ldr w3, [x19] ++ cmn w3, #1 ++ bne .L1007 ++ add x21, x21, :lo12:.LANCHOR2 ++ ldr w1, [x19, 4] ++ adrp x0, .LC16 ++ add x0, x0, :lo12:.LC16 ++ ldrb w2, [x21, 1221] ++ bl printk ++ ldr x1, [x19, 8] ++ cbz x1, .L1023 ++ adrp x0, .LC17 ++ mov w3, 8 ++ mov w2, 4 ++ add x0, x0, :lo12:.LC17 ++ bl rknand_print_hex ++.L1023: ++ ldr x1, [x19, 16] ++ cbz x1, .L1007 ++ mov w3, 4 ++ adrp x0, .LC18 ++ mov w2, w3 ++ add x0, x0, :lo12:.LC18 ++ bl rknand_print_hex ++ b .L1007 ++ .size FlashReadSlc2KPages, .-FlashReadSlc2KPages ++ .align 2 ++ .global FlashReadPages ++ .type FlashReadPages, %function ++FlashReadPages: ++ stp x29, x30, [sp, -160]! ++ add x29, sp, 0 ++ stp x25, x26, [sp, 64] ++ adrp x25, .LANCHOR0 ++ add x3, x25, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x27, x28, [sp, 80] ++ stp w2, w1, [x29, 120] ++ ldrb w4, [x3, 88] ++ cbnz w4, .L1054 ++ mov x26, x0 ++ adrp x0, .LANCHOR1+481 ++ mov w24, 0 ++ mov w23, 0 ++ ldrb w0, [x0, #:lo12:.LANCHOR1+481] ++ str w0, [x29, 136] ++ ldrb w0, [x3, 96] ++ str w0, [x29, 108] ++ adrp x0, .LANCHOR2 ++ add x20, x0, :lo12:.LANCHOR2 ++ add x0, x20, 1236 ++ str x0, [x29, 112] ++.L1055: ++ ldr w0, [x29, 124] ++ cmp w23, w0 ++ bcc .L1089 ++ mov w0, 0 ++ b .L1053 ++.L1054: ++ bl FlashReadSlc2KPages ++.L1053: ++ 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 ++.L1089: ++ mov w27, 56 ++ ldr w1, [x29, 120] ++ add x2, x29, 156 ++ add x3, x29, 152 ++ umull x0, w23, w27 ++ add x27, x25, :lo12:.LANCHOR0 ++ str x0, [x29, 128] ++ add x22, x26, x0 ++ ldr w0, [x29, 124] ++ sub w4, w0, w23 ++ mov x0, x22 ++ ldr w28, [x22, 4] ++ bl LogAddr2PhyAddr ++ ldrb w2, [x27, 3216] ++ mov w21, w0 ++ ldr w0, [x29, 152] ++ cmp w2, w0 ++ bhi .L1057 ++ ldr x1, [x29, 128] ++ mov w0, -1 ++ str w0, [x26, x1] ++.L1058: ++ add w23, w23, 1 ++ b .L1055 ++.L1057: ++ add x0, x27, w0, uxtw ++ ldrb w19, [x0, 3220] ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 2249] ++ cmp w0, 0 ++ mov w0, w19 ++ csel w21, w21, wzr, ne ++ bl NandcWaitFlashReady ++ ldr x0, [x27, 104] ++ ldrb w1, [x0, 19] ++ sub w0, w1, #1 ++ and w0, w0, 255 ++ cmp w0, 7 ++ bhi .L1060 ++ add x0, x20, 1232 ++ sxtw x2, w19 ++ add x0, x0, x2 ++ sub w1, w1, #7 ++ and w1, w1, 255 ++ cmp w1, 1 ++ ldrb w3, [x0, 12] ++ bhi .L1061 ++ ldrb w3, [x0, 20] ++.L1061: ++ add x2, x20, x2 ++ ldrb w0, [x2, 2088] ++ cmp w0, w3 ++ beq .L1060 ++ ldrb w1, [x20, 1233] ++ mov w0, w19 ++ ldr x2, [x29, 112] ++ bl HynixSetRRPara ++.L1060: ++ mov w0, w19 ++ bl NandcFlashCs ++ ldr w0, [x29, 120] ++ cmp w0, 1 ++ cset w0, eq ++ orr w0, w0, w28, lsr 31 ++ str w0, [x29, 140] ++ cbz w0, .L1062 ++ ldrb w0, [x20, 1220] ++ cbz w0, .L1062 ++ mov w0, w19 ++ bl flash_enter_slc_mode ++.L1063: ++ add x28, x25, :lo12:.LANCHOR0 ++.L1069: ++ ldr w1, [x29, 156] ++ cmn w1, #1 ++ bne .L1064 ++ cmp w19, 255 ++ beq .L1091 ++.L1064: ++ cbz w21, .L1066 ++ ldr w2, [x28, 92] ++ mov w0, w19 ++ add w2, w1, w2 ++ bl FlashReadDpCmd ++.L1067: ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ cbz w21, .L1065 ++ ldr w1, [x29, 156] ++ mov w0, w19 ++ bl FlashReadDpDataOutCmd ++.L1065: ++ ldrb w2, [x29, 136] ++ mov w1, 0 ++ ldp x3, x4, [x22, 8] ++ mov w0, w19 ++ bl NandcXferData ++ mov w27, w0 ++ ldrb w0, [x28, 96] ++ cbz w0, .L1068 ++ cmn w27, #1 ++ bne .L1068 ++ strb wzr, [x28, 96] ++ mov w21, 0 ++ b .L1069 ++.L1062: ++ mov w0, w19 ++ bl flash_exit_slc_mode ++ b .L1063 ++.L1066: ++ mov w0, w19 ++ bl FlashReadCmd ++ b .L1067 ++.L1091: ++ mov w21, 0 ++ b .L1065 ++.L1068: ++ cbz w21, .L1070 ++ add x0, x25, :lo12:.LANCHOR0 ++ ldr w1, [x29, 156] ++ ldr w0, [x0, 92] ++ add w1, w1, w0 ++ mov w0, w19 ++ bl FlashReadDpDataOutCmd ++ add w0, w23, 1 ++ mov w1, 56 ++ ldrb w2, [x29, 136] ++ nop // between mem op and mult-accumulate ++ umaddl x0, w0, w1, x26 ++ mov w1, 0 ++ ldp x3, x4, [x0, 8] ++ mov w0, w19 ++ bl NandcXferData ++ cmn w0, #1 ++ mov w24, w0 ++ csel w21, w21, wzr, ne ++.L1070: ++ mov w0, w19 ++ bl NandcFlashDeCs ++ add x0, x25, :lo12:.LANCHOR0 ++ ldrb w1, [x29, 108] ++ cmn w27, #1 ++ strb w1, [x0, 96] ++ bne .L1071 ++ ldrb w0, [x20, 2104] ++ cbnz w0, .L1072 ++.L1076: ++ ldr x4, [x20, 2192] ++ cbnz x4, .L1073 ++ ldr w1, [x29, 156] ++ mov w0, w19 ++ ldp x2, x3, [x22, 8] ++ bl FlashReadRawPage ++ b .L1128 ++.L1072: ++ ldr x0, [x20, 1152] ++ mov w4, 1 ++ ldr w1, [x29, 156] ++ ldp x2, x3, [x22, 8] ++ ldr w21, [x0, 304] ++ mov w0, w19 ++ bl FlashDdrTunningRead ++ mov w27, w0 ++ cmn w0, #1 ++ beq .L1075 ++ ldrb w0, [x20, 1221] ++ cmp w27, w0, lsr 1 ++ bls .L1092 ++.L1075: ++ lsr w0, w21, 8 ++ bl NandcSetDdrPara ++ cmn w27, #1 ++ beq .L1076 ++.L1092: ++ mov w21, 0 ++.L1071: ++ ldrb w0, [x20, 1221] ++ add w0, w0, w0, lsl 1 ++ cmp w27, w0, lsr 2 ++ bls .L1077 ++ ldr x0, [x20, 2192] ++ cmp x0, 0 ++ mov w0, 256 ++ csel w27, w27, w0, ne ++.L1077: ++ ldr x0, [x29, 128] ++ cmp w27, 256 ++ ccmn w27, #1, 4, ne ++ csel w3, w27, wzr, eq ++ cmn w3, #1 ++ str w3, [x26, x0] ++ bne .L1084 ++ ldr w1, [x22, 4] ++ adrp x0, .LC16 ++ ldrb w2, [x20, 1221] ++ add x0, x0, :lo12:.LC16 ++ bl printk ++ ldr x1, [x22, 16] ++ cbz x1, .L1084 ++ mov w3, 4 ++ adrp x0, .LC18 ++ mov w2, w3 ++ add x0, x0, :lo12:.LC18 ++ bl rknand_print_hex ++.L1084: ++ cbz w21, .L1086 ++ ldrb w0, [x20, 1221] ++ add w0, w0, w0, lsl 1 ++ cmp w24, w0, lsr 2 ++ bls .L1087 ++ ldr x0, [x20, 2192] ++ cmp x0, 0 ++ mov w0, 256 ++ csel w24, w24, w0, ne ++.L1087: ++ add w0, w23, 1 ++ mov w1, 56 ++ cmp w24, 256 ++ ccmn w24, #1, 4, ne ++ umull x0, w0, w1 ++ csel w1, w24, wzr, eq ++ str w1, [x26, x0] ++.L1086: ++ ldr w0, [x29, 140] ++ add w23, w23, w21 ++ cbz w0, .L1058 ++ ldrb w0, [x20, 1220] ++ cbz w0, .L1058 ++ mov w0, w19 ++ bl flash_exit_slc_mode ++ b .L1058 ++.L1073: ++ ldr w1, [x29, 156] ++ mov w0, w19 ++ ldp x2, x3, [x22, 8] ++ mov w21, 0 ++ blr x4 ++ mov w27, w0 ++ cmn w0, #1 ++ bne .L1077 ++ add x0, x25, :lo12:.LANCHOR0 ++ ldr x0, [x0, 104] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 7 ++ bhi .L1078 ++ ldrb w1, [x20, 1233] ++ mov w3, 0 ++ ldr x2, [x29, 112] ++ mov w0, w19 ++ bl HynixSetRRPara ++.L1078: ++ ldp x2, x3, [x22, 8] ++ mov w0, w19 ++ ldr w1, [x29, 156] ++ bl FlashReadRawPage ++ mov w27, w0 ++ ldrb w2, [x20, 1221] ++ mov w3, w0 ++ ldr w1, [x22, 4] ++ adrp x0, .LC19 ++ add x0, x0, :lo12:.LC19 ++ bl printk ++ cmn w27, #1 ++ bne .L1095 ++ ldrb w0, [x20, 1220] ++ cbz w0, .L1095 ++ ldr w0, [x29, 140] ++ cbz w0, .L1079 ++ mov w0, w19 ++ bl flash_enter_slc_mode ++.L1080: ++ ldr w1, [x29, 156] ++ mov w0, w19 ++ ldr x4, [x20, 2192] ++ ldp x2, x3, [x22, 8] ++ blr x4 ++.L1128: ++ mov w27, w0 ++.L1095: ++ mov w21, 0 ++ b .L1077 ++.L1079: ++ mov w0, w19 ++ bl flash_exit_slc_mode ++ b .L1080 ++ .size FlashReadPages, .-FlashReadPages ++ .align 2 ++ .global FlashLoadFactorBbt ++ .type FlashLoadFactorBbt, %function ++FlashLoadFactorBbt: ++ stp x29, x30, [sp, -176]! ++ mov w2, 16 ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR2 ++ add x19, x23, :lo12:.LANCHOR2 ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ mov w26, -1 ++ stp x21, x22, [sp, 32] ++ mov w27, 0 ++ ldrh w0, [x19, 1204] ++ ldrh w21, [x19, 1206] ++ mul w21, w21, w0 ++ add x0, x19, 2256 ++ bl ftl_memset ++ and w21, w21, 65535 ++ ldr x0, [x19, 2224] ++ add w25, w21, w26 ++ stp xzr, x0, [x29, 128] ++ and w25, w25, 65535 ++ sub w0, w21, #12 ++ mov w19, 0 ++ str w0, [x29, 108] ++.L1130: ++ adrp x22, .LANCHOR0 ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 3216] ++ cmp w0, w19 ++ bhi .L1136 ++ 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], 176 ++ ret ++.L1136: ++ mul w28, w21, w19 ++ mov w20, w25 ++ add x24, x23, :lo12:.LANCHOR2 ++ mov w3, 61664 ++.L1131: ++ ldr w0, [x29, 108] ++ cmp w20, w0 ++ ble .L1133 ++ add w0, w20, w28 ++ mov w2, 1 ++ lsl w0, w0, 10 ++ str w3, [x29, 104] ++ str w0, [x29, 124] ++ mov w1, w2 ++ add x0, x29, 120 ++ bl FlashReadPages ++ ldr w0, [x29, 120] ++ ldr w3, [x29, 104] ++ cmn w0, #1 ++ beq .L1132 ++ ldr x0, [x24, 2224] ++ ldrh w0, [x0] ++ cmp w0, w3 ++ bne .L1132 ++ add x24, x24, w19, sxtw 1 ++ add w27, w27, 1 ++ and w27, w27, 65535 ++ mov w2, w20 ++ mov w1, w19 ++ adrp x0, .LC20 ++ add x0, x0, :lo12:.LC20 ++ bl printk ++ strh w20, [x24, 2256] ++.L1133: ++ add x22, x22, :lo12:.LANCHOR0 ++ add w19, w19, 1 ++ and w19, w19, 255 ++ ldrb w0, [x22, 3216] ++ cmp w0, w27 ++ csel w26, w26, wzr, ne ++ b .L1130 ++.L1132: ++ sub w20, w20, #1 ++ and w20, w20, 65535 ++ b .L1131 ++ .size FlashLoadFactorBbt, .-FlashLoadFactorBbt ++ .align 2 ++ .global FlashReadFacBbtData ++ .type FlashReadFacBbtData, %function ++FlashReadFacBbtData: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w23, w1 ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ mov x22, x0 ++ stp x25, x26, [sp, 64] ++ mov w25, w2 ++ mov x21, x1 ++ mov w26, 61664 ++ ldrh w2, [x1, 1204] ++ ldrh w0, [x1, 1206] ++ mul w0, w0, w2 ++ adrp x2, .LANCHOR0+64 ++ and w0, w0, 65535 ++ ldr x2, [x2, #:lo12:.LANCHOR0+64] ++ sub w20, w0, #1 ++ str x2, [x29, 96] ++ and w20, w20, 65535 ++ ldr x2, [x1, 2224] ++ mul w24, w0, w23 ++ sub w19, w0, #16 ++ str x2, [x29, 104] ++.L1142: ++ cmp w20, w19 ++ bgt .L1145 ++ mov w0, -1 ++ b .L1141 ++.L1145: ++ add w0, w20, w24 ++ mov w2, 1 ++ lsl w0, w0, 10 ++ mov w1, w2 ++ str w0, [x29, 92] ++ add x0, x29, 88 ++ bl FlashReadPages ++ ldr w0, [x29, 88] ++ cmn w0, #1 ++ beq .L1143 ++ ldr x0, [x21, 2224] ++ ldrh w0, [x0] ++ cmp w0, w26 ++ bne .L1143 ++ cbz x22, .L1146 ++ mov w2, w25 ++ mov w1, w23 ++ mov x0, x22 ++ bl FlashReadFacBbtData.part.6 ++.L1141: ++ 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 ++.L1143: ++ sub w20, w20, #1 ++ and w20, w20, 65535 ++ b .L1142 ++.L1146: ++ mov w0, 0 ++ b .L1141 ++ .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+104 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x20, x20, :lo12:.LANCHOR2 ++ ldr x0, [x0, #:lo12:.LANCHOR0+104] ++ ldrb w2, [x0, 13] ++ ldrh w19, [x0, 14] ++ ldr x0, [x20, 2216] ++ mul w19, w19, w2 ++ and w19, w19, 65535 ++ add w2, w19, 7 ++ lsr w2, w2, 3 ++ bl FlashReadFacBbtData ++ cmn w0, #1 ++ bne .L1152 ++.L1156: ++ mov w0, 0 ++.L1153: ++ ubfiz x0, x0, 1, 16 ++ mov w1, -1 ++ strh w1, [x21, x0] ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L1152: ++ lsr w4, w19, 4 ++ sub w19, w19, #1 ++ mov w1, 0 ++ mov w0, 0 ++ mov w5, 1 ++.L1154: ++ cmp w1, w19 ++ bge .L1153 ++ ldr x6, [x20, 2216] ++ ubfx x3, x1, 5, 11 ++ lsl w2, w5, w1 ++ ldr w3, [x6, x3, lsl 2] ++ tst w2, w3 ++ beq .L1155 ++ add w2, w0, 1 ++ ubfiz x0, x0, 1, 16 ++ strh w1, [x21, x0] ++ and w0, w2, 65535 ++.L1155: ++ cmp w0, w4 ++ bcs .L1156 ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L1154 ++ .size FlashGetBadBlockList, .-FlashGetBadBlockList ++ .align 2 ++ .global FlashProgSlc2KPages ++ .type FlashProgSlc2KPages, %function ++FlashProgSlc2KPages: ++ stp x29, x30, [sp, -176]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w24, w2 ++ adrp x2, .LANCHOR1+481 ++ stp x21, x22, [sp, 32] ++ stp x25, x26, [sp, 64] ++ and w21, w1, 255 ++ mov w23, 56 ++ ldrb w26, [x2, #:lo12:.LANCHOR1+481] ++ stp x27, x28, [sp, 80] ++ mov w22, w21 ++ adrp x27, .LANCHOR0 ++ add x25, x27, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ mov x28, x0 ++ umaddl x23, w1, w23, x0 ++ mov x20, x0 ++ add x0, x25, 3072 ++ str x0, [x29, 104] ++.L1163: ++ cmp x20, x23 ++ bne .L1169 ++ adrp x22, .LANCHOR2 ++ add x23, x22, :lo12:.LANCHOR2 ++.L1170: ++ cmp x28, x20 ++ bne .L1177 ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L1169: ++ mov w1, w24 ++ mov w4, w22 ++ add x3, x29, 116 ++ add x2, x29, 112 ++ mov x0, x20 ++ bl LogAddr2PhyAddr ++ ldrb w1, [x25, 3216] ++ ldr w0, [x29, 116] ++ cmp w1, w0 ++ bhi .L1164 ++ mov w0, -1 ++ str w0, [x20] ++.L1165: ++ sub w22, w22, #1 ++ add x20, x20, 56 ++ and w22, w22, 255 ++ b .L1163 ++.L1164: ++ ldr x1, [x29, 104] ++ add x0, x1, w0, uxtw ++ ldrb w19, [x0, 148] ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ mov w0, w19 ++ bl NandcFlashCs ++ ldr w1, [x29, 112] ++ mov w0, w19 ++ bl FlashProgFirstCmd ++ ldp x3, x4, [x20, 8] ++ mov w2, w26 ++ mov w1, 1 ++ mov w0, w19 ++ bl NandcXferData ++ ldr w1, [x29, 112] ++ mov w0, w19 ++ bl FlashProgSecondCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ ldr w1, [x29, 112] ++ mov w0, w19 ++ bl FlashReadStatus ++ sbfx x0, x0, 0, 1 ++ str w0, [x20] ++ ldr w1, [x29, 112] ++ ldr w0, [x25, 92] ++ add w1, w1, w0 ++ mov w0, w19 ++ bl FlashProgFirstCmd ++ ldr x0, [x20, 8] ++ mov w2, w26 ++ mov w1, 1 ++ cmp x0, 0 ++ add x3, x0, 2048 ++ ldr x0, [x20, 16] ++ csel x3, x3, xzr, ne ++ cmp x0, 0 ++ add x4, x0, 8 ++ csel x4, x4, xzr, ne ++ mov w0, w19 ++ bl NandcXferData ++ add x0, x27, :lo12:.LANCHOR0 ++ ldr w1, [x29, 112] ++ ldr w0, [x0, 92] ++ add w1, w1, w0 ++ mov w0, w19 ++ bl FlashProgSecondCmd ++ mov w0, w19 ++ bl NandcWaitFlashReady ++ ldr w1, [x29, 112] ++ mov w0, w19 ++ bl FlashReadStatus ++ tbz x0, 0, .L1168 ++ mov w0, -1 ++ str w0, [x20] ++.L1168: ++ mov w0, w19 ++ bl NandcFlashDeCs ++ b .L1165 ++.L1177: ++ ldr w0, [x28] ++ cmn w0, #1 ++ bne .L1171 ++ ldr w1, [x28, 4] ++ adrp x0, .LC21 ++ add x0, x0, :lo12:.LC21 ++ bl printk ++.L1172: ++ sub w21, w21, #1 ++ add x28, x28, 56 ++ and w21, w21, 255 ++ b .L1170 ++.L1171: ++ add x19, x22, :lo12:.LANCHOR2 ++ mov w4, w21 ++ add x3, x29, 116 ++ add x2, x29, 112 ++ mov w1, w24 ++ mov x0, x28 ++ bl LogAddr2PhyAddr ++ ldr x0, [x19, 2232] ++ mov x2, 56 ++ mov x1, x28 ++ str wzr, [x0] ++ ldr x0, [x19, 2240] ++ str wzr, [x0] ++ add x0, x29, 120 ++ bl memcpy ++ ldr x0, [x19, 2232] ++ mov w2, w24 ++ str x0, [x29, 128] ++ mov w1, 1 ++ ldr x0, [x19, 2240] ++ str x0, [x29, 136] ++ add x0, x29, 120 ++ bl FlashReadPages ++ ldr w19, [x29, 120] ++ cmn w19, #1 ++ bne .L1173 ++ ldr w1, [x28, 4] ++ adrp x0, .LC22 ++ add x0, x0, :lo12:.LC22 ++ bl printk ++ str w19, [x28] ++.L1173: ++ ldr w19, [x29, 120] ++ cmp w19, 256 ++ bne .L1174 ++ ldr w1, [x28, 4] ++ adrp x0, .LC23 ++ add x0, x0, :lo12:.LC23 ++ bl printk ++ str w19, [x28] ++.L1174: ++ ldr x0, [x28, 16] ++ cbz x0, .L1175 ++ ldr w2, [x0] ++ ldr x0, [x23, 2240] ++ ldr w3, [x0] ++ cmp w2, w3 ++ beq .L1175 ++ ldr w1, [x28, 4] ++ adrp x0, .LC24 ++ add x0, x0, :lo12:.LC24 ++ bl printk ++ mov w0, -1 ++ str w0, [x28] ++.L1175: ++ ldr x0, [x28, 8] ++ cbz x0, .L1172 ++ ldr w2, [x0] ++ ldr x0, [x23, 2232] ++ ldr w3, [x0] ++ cmp w2, w3 ++ beq .L1172 ++ ldr w1, [x28, 4] ++ adrp x0, .LC25 ++ add x0, x0, :lo12:.LC25 ++ bl printk ++ mov w0, -1 ++ str w0, [x28] ++ b .L1172 ++ .size FlashProgSlc2KPages, .-FlashProgSlc2KPages ++ .align 2 ++ .global FlashProgPages ++ .type FlashProgPages, %function ++FlashProgPages: ++ stp x29, x30, [sp, -192]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x4, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr x5, [x4, 104] ++ ldrb w4, [x4, 88] ++ ldrb w5, [x5, 19] ++ stp w3, w5, [x29, 116] ++ cbnz w4, .L1191 ++ mov x19, x0 ++ adrp x0, .LANCHOR1+481 ++ adrp x28, .LANCHOR2 ++ mov w25, w1 ++ ldrb w0, [x0, #:lo12:.LANCHOR1+481] ++ add x26, x28, :lo12:.LANCHOR2 ++ mov w23, w2 ++ str w0, [x29, 124] ++ mov w22, 0 ++ add x0, x26, 1236 ++ str x0, [x29, 104] ++.L1192: ++ cmp w22, w25 ++ bcc .L1205 ++ add x21, x21, :lo12:.LANCHOR0 ++ adrp x22, .LANCHOR2 ++ add x24, x21, 3260 ++ add x22, x22, :lo12:.LANCHOR2 ++ mov x20, 0 ++ mov x26, 24 ++.L1206: ++ ldrb w0, [x21, 3216] ++ cmp w0, w20 ++ bhi .L1208 ++ ldr w0, [x29, 116] ++ cbnz w0, .L1209 ++.L1217: ++ mov w0, 0 ++ b .L1190 ++.L1191: ++ bl FlashProgSlc2KPages ++.L1190: ++ 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 ++.L1205: ++ mov w13, 56 ++ add x2, x29, 128 ++ mov w1, w23 ++ sub w4, w25, w22 ++ umull x13, w22, w13 ++ add x3, x29, 132 ++ add x27, x19, x13 ++ mov x0, x27 ++ bl LogAddr2PhyAddr ++ mov w24, w0 ++ add x1, x21, :lo12:.LANCHOR0 ++ ldr w0, [x29, 132] ++ ldrb w2, [x1, 3216] ++ cmp w2, w0 ++ bhi .L1194 ++ mov w0, -1 ++ str w0, [x19, x13] ++.L1195: ++ add w22, w22, 1 ++ b .L1192 ++.L1194: ++ add x2, x28, :lo12:.LANCHOR2 ++ mov x3, 24 ++ ldrb w2, [x2, 2094] ++ cmp w2, 0 ++ add x2, x1, 3260 ++ uxtw x1, w0 ++ csel w24, w24, wzr, ne ++ madd x1, x1, x3, x2 ++ ldr x1, [x1, 8] ++ cbz x1, .L1197 ++ bl FlashWaitCmdDone ++.L1197: ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr w1, [x29, 132] ++ add x2, x0, 3260 ++ mov x0, 24 ++ madd x0, x1, x0, x2 ++ ldr w2, [x29, 128] ++ str w2, [x0, 4] ++ stp x27, xzr, [x0, 8] ++ cbz w24, .L1198 ++ add w2, w22, 1 ++ mov w3, 56 ++ umaddl x2, w2, w3, x19 ++ str x2, [x0, 16] ++.L1198: ++ add x4, x21, :lo12:.LANCHOR0 ++ mov x2, 24 ++ add x0, x4, x1 ++ mul x1, x1, x2 ++ ldrb w20, [x0, 3220] ++ add x0, x4, 3260 ++ strb w20, [x0, x1] ++ ldrb w0, [x4, 3216] ++ cmp w0, 1 ++ mov w0, w20 ++ bne .L1199 ++ bl NandcWaitFlashReady ++.L1200: ++ ldr w0, [x29, 120] ++ sub w0, w0, #1 ++ cmp w0, 7 ++ bhi .L1201 ++ add x0, x26, w20, sxtw ++ ldrb w0, [x0, 2088] ++ cbz w0, .L1201 ++ ldrb w1, [x26, 1233] ++ mov w3, 0 ++ ldr x2, [x29, 104] ++ mov w0, w20 ++ bl HynixSetRRPara ++.L1201: ++ mov w0, w20 ++ bl NandcFlashCs ++ cmp w23, 1 ++ bne .L1202 ++ ldrb w0, [x26, 1220] ++ cbz w0, .L1202 ++ mov w0, w20 ++ bl flash_enter_slc_mode ++.L1203: ++ ldr w1, [x29, 128] ++ mov w0, w20 ++ bl FlashProgFirstCmd ++ ldrb w2, [x29, 124] ++ mov w1, 1 ++ ldp x3, x4, [x27, 8] ++ mov w0, w20 ++ bl NandcXferData ++ cbz w24, .L1204 ++ ldr w1, [x29, 128] ++ mov w0, w20 ++ add x27, x21, :lo12:.LANCHOR0 ++ bl FlashProgDpFirstCmd ++ ldr w1, [x29, 132] ++ add x0, x27, 3228 ++ ldr w0, [x0, x1, lsl 2] ++ ldr w1, [x29, 128] ++ cmp w0, 0 ++ mov w0, w20 ++ cset w2, ne ++ bl FlashWaitReadyEN ++ ldr w0, [x27, 92] ++ ldr w1, [x29, 128] ++ add w1, w1, w0 ++ mov w0, w20 ++ bl FlashProgDpSecondCmd ++ add w0, w22, 1 ++ mov w1, 56 ++ ldrb w2, [x29, 124] ++ nop // between mem op and mult-accumulate ++ umaddl x0, w0, w1, x19 ++ mov w1, 1 ++ ldp x3, x4, [x0, 8] ++ mov w0, w20 ++ bl NandcXferData ++.L1204: ++ ldr w1, [x29, 128] ++ mov w0, w20 ++ add w22, w22, w24 ++ bl FlashProgSecondCmd ++ mov w0, w20 ++ bl NandcFlashDeCs ++ b .L1195 ++.L1199: ++ bl NandcFlashCs ++ add x4, x4, 3228 ++ ldp w1, w0, [x29, 128] ++ ldr w0, [x4, x0, lsl 2] ++ cmp w0, 0 ++ mov w0, w20 ++ cset w2, ne ++ bl FlashWaitReadyEN ++ mov w0, w20 ++ bl NandcFlashDeCs ++ b .L1200 ++.L1202: ++ mov w0, w20 ++ bl flash_exit_slc_mode ++ b .L1203 ++.L1208: ++ mov w0, w20 ++ bl FlashWaitCmdDone ++ cmp w23, 1 ++ bne .L1207 ++ ldrb w0, [x22, 1220] ++ cbz w0, .L1207 ++ mul x0, x20, x26 ++ ldrb w0, [x0, x24] ++ bl flash_exit_slc_mode ++.L1207: ++ add x20, x20, 1 ++ b .L1206 ++.L1209: ++ mov w0, 56 ++ and w20, w25, 255 ++ adrp x22, .LANCHOR2 ++ add x24, x22, :lo12:.LANCHOR2 ++ umaddl x25, w25, w0, x19 ++.L1210: ++ cmp x25, x19 ++ beq .L1217 ++ ldr w0, [x19] ++ cmn w0, #1 ++ bne .L1211 ++ ldr w1, [x19, 4] ++ adrp x0, .LC21 ++ add x0, x0, :lo12:.LC21 ++ bl printk ++.L1212: ++ sub w20, w20, #1 ++ add x19, x19, 56 ++ and w20, w20, 255 ++ b .L1210 ++.L1211: ++ add x21, x22, :lo12:.LANCHOR2 ++ mov w4, w20 ++ add x3, x29, 132 ++ add x2, x29, 128 ++ mov w1, w23 ++ mov x0, x19 ++ bl LogAddr2PhyAddr ++ ldr x0, [x21, 2232] ++ mov x2, 56 ++ mov x1, x19 ++ str wzr, [x0] ++ ldr x0, [x21, 2240] ++ str wzr, [x0] ++ add x0, x29, 136 ++ bl memcpy ++ ldr x0, [x21, 2232] ++ mov w2, w23 ++ str x0, [x29, 144] ++ mov w1, 1 ++ ldr x0, [x21, 2240] ++ str x0, [x29, 152] ++ add x0, x29, 136 ++ bl FlashReadPages ++ ldr w21, [x29, 136] ++ cmn w21, #1 ++ bne .L1213 ++ ldr w1, [x19, 4] ++ adrp x0, .LC22 ++ add x0, x0, :lo12:.LC22 ++ bl printk ++ str w21, [x19] ++.L1213: ++ ldr x0, [x19, 16] ++ cbz x0, .L1214 ++ ldr w2, [x0] ++ ldr x0, [x24, 2240] ++ ldr w3, [x0] ++ cmp w2, w3 ++ beq .L1214 ++ ldr w1, [x19, 4] ++ adrp x0, .LC24 ++ add x0, x0, :lo12:.LC24 ++ bl printk ++ mov w0, -1 ++ str w0, [x19] ++.L1214: ++ ldr x0, [x19, 8] ++ cbz x0, .L1212 ++ ldr w2, [x0] ++ ldr x0, [x24, 2232] ++ ldr w3, [x0] ++ cmp w2, w3 ++ beq .L1212 ++ ldr w1, [x19, 4] ++ adrp x0, .LC25 ++ add x0, x0, :lo12:.LC25 ++ bl printk ++ mov w0, -1 ++ str w0, [x19] ++ b .L1212 ++ .size FlashProgPages, .-FlashProgPages ++ .align 2 ++ .type FlashTestBlk.part.7, %function ++FlashTestBlk.part.7: ++ stp x29, x30, [sp, -160]! ++ mov w2, 32 ++ mov w1, 165 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ and w20, w0, 65535 ++ lsl w20, w20, 10 ++ ldr x0, [x19, 2216] ++ str x0, [x29, 48] ++ add x0, x29, 96 ++ str x0, [x29, 56] ++ bl ftl_memset ++ ldr x0, [x19, 2216] ++ mov w2, 8 ++ mov w1, 90 ++ bl ftl_memset ++ str w20, [x29, 44] ++ mov w2, 1 ++ add x0, x29, 40 ++ mov w1, w2 ++ bl FlashEraseBlocks ++ mov w3, 1 ++ add x0, x29, 40 ++ mov w2, w3 ++ mov w1, w3 ++ bl FlashProgPages ++ ldr w0, [x29, 40] ++ mov w2, 1 ++ mov w1, 0 ++ cmp w0, 0 ++ 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: ++ adrp x1, .LANCHOR0+72 ++ and w0, w0, 65535 ++ ldr w1, [x1, #:lo12:.LANCHOR0+72] ++ cmp w0, w1 ++ bcc .L1247 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl FlashTestBlk.part.7 ++ ldp x29, x30, [sp], 16 ++ ret ++.L1247: ++ mov w0, 0 ++ ret ++ .size FlashTestBlk, .-FlashTestBlk ++ .align 2 ++ .global FlashMakeFactorBbt ++ .type FlashMakeFactorBbt, %function ++FlashMakeFactorBbt: ++ stp x29, x30, [sp, -240]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR2 ++ add x0, x22, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ add x0, x0, 1192 ++ stp x25, x26, [sp, 64] ++ adrp x20, .LANCHOR0 ++ stp x27, x28, [sp, 80] ++ mov w19, 0 ++ ldr x1, [x0, 1032] ++ ldrh w21, [x0, 14] ++ ldrh w0, [x0, 12] ++ str x1, [x29, 136] ++ mul w21, w21, w0 ++ add x0, x20, :lo12:.LANCHOR0 ++ and w21, w21, 65535 ++ ldr x1, [x0, 104] ++ ldrh w2, [x0, 92] ++ ldrb w0, [x0, 88] ++ ldrb w1, [x1, 24] ++ cmp w0, 1 ++ str w1, [x29, 112] ++ mov x1, x2 ++ ubfiz w2, w2, 1, 15 ++ csel w0, w2, w1, eq ++ mov w1, 1 ++ str w0, [x29, 168] ++ adrp x0, .LC26 ++ add x0, x0, :lo12:.LC26 ++ bl printk ++ add x0, x22, :lo12:.LANCHOR2 ++ mov w2, 4096 ++ mov w1, 0 ++ ldr x0, [x0, 2224] ++ bl ftl_memset ++ lsr w0, w21, 4 ++ str w0, [x29, 132] ++ sub w0, w21, #1 ++ and w0, w0, 65535 ++ str w0, [x29, 128] ++ adrp x0, .LC29 ++ add x0, x0, :lo12:.LC29 ++ str x0, [x29, 104] ++.L1254: ++ add x28, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x28, 3216] ++ cmp w0, w19 ++ bhi .L1281 ++ 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 ++.L1281: ++ add x0, x22, :lo12:.LANCHOR2 ++ sxtw x24, w19 ++ add x1, x0, x24, lsl 1 ++ ldrh w1, [x1, 2256] ++ str w1, [x29, 172] ++ cbnz w1, .L1255 ++ ldrh w2, [x0, 1212] ++ mov x26, x28 ++ ldr x0, [x28, 64] ++ mov w23, 0 ++ mov w25, 0 ++ lsl w2, w2, 9 ++ bl ftl_memset ++ add x0, x28, x24 ++ add x28, x28, 3228 ++ ldrb w27, [x0, 3220] ++ ldr w0, [x29, 112] ++ and w0, w0, 1 ++ stp w0, wzr, [x29, 160] ++.L1256: ++ ldrh w0, [x29, 164] ++ str w0, [x29, 144] ++ cmp w0, w21 ++ bcc .L1267 ++.L1266: ++ mov w1, w19 ++ mov w2, w23 ++ adrp x0, .LC28 ++ add x0, x0, :lo12:.LC28 ++ bl printk ++ add x3, x20, :lo12:.LANCHOR0 ++ ldr w1, [x29, 132] ++ ldrb w0, [x3, 3216] ++ mul w0, w0, w1 ++ cmp w23, w0 ++ blt .L1268 ++ add x0, x22, :lo12:.LANCHOR2 ++ mov w1, 0 ++ ldrh w2, [x0, 1212] ++ ldr x0, [x3, 64] ++ lsl w2, w2, 9 ++ bl ftl_memset ++.L1268: ++ cbnz w19, .L1270 ++ add x26, x20, :lo12:.LANCHOR0 ++ mov w23, 1 ++ ldrh w25, [x26, 72] ++.L1271: ++ ldrb w0, [x26, 89] ++ cmp w0, w25 ++ bhi .L1273 ++ ldr w27, [x29, 128] ++ sub w26, w21, #50 ++ add x23, x20, :lo12:.LANCHOR0 ++ mov w25, 1 ++.L1274: ++ cmp w27, w26 ++ bgt .L1276 ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr w2, [x0, 72] ++ ldrb w1, [x0, 89] ++ sub w1, w1, w2 ++ ldr w2, [x29, 172] ++ cmp w2, w1 ++ bcc .L1270 ++ add x1, x22, :lo12:.LANCHOR2 ++ ldr x0, [x0, 64] ++ ldrh w2, [x1, 1212] ++ mov w1, 0 ++ lsl w2, w2, 9 ++ bl ftl_memset ++.L1270: ++ add x28, x22, :lo12:.LANCHOR2 ++ mul w25, w19, w21 ++ add x0, x28, 2048 ++ ldr w26, [x29, 128] ++ adrp x23, .LC30 ++ add x27, x20, :lo12:.LANCHOR0 ++ add x23, x23, :lo12:.LC30 ++ add x24, x0, x24, lsl 1 ++.L1278: ++ mov w1, w19 ++ mov w2, w26 ++ mov x0, x23 ++ bl printk ++ ldr x1, [x27, 64] ++.L1279: ++ ubfx x0, x26, 5, 11 ++ ldr w0, [x1, x0, lsl 2] ++ lsr w0, w0, w26 ++ tbnz x0, 0, .L1280 ++ ldr x1, [x29, 136] ++ mov w0, -3872 ++ strh w26, [x24, 208] ++ mov w2, 1 ++ strh w0, [x1] ++ strh w26, [x1, 2] ++ strh wzr, [x1, 8] ++ mov w1, w2 ++ ldr x0, [x27, 64] ++ str x0, [x29, 192] ++ ldr x0, [x28, 2224] ++ str x0, [x29, 200] ++ add w0, w26, w25 ++ lsl w0, w0, 10 ++ str w0, [x29, 188] ++ add x0, x29, 184 ++ bl FlashEraseBlocks ++ mov w3, 1 ++ add x0, x29, 184 ++ mov w2, w3 ++ mov w1, w3 ++ bl FlashProgPages ++ ldr w0, [x29, 184] ++ cbz w0, .L1255 ++ sub w26, w26, #1 ++ and w26, w26, 65535 ++ b .L1278 ++.L1267: ++ mov w0, -1 ++ strb w0, [x29, 182] ++ strb w0, [x29, 183] ++ ldr w0, [x29, 160] ++ cbz w0, .L1258 ++ ldr w4, [x28, x24, lsl 2] ++ mov w0, w27 ++ add x2, x29, 182 ++ add w4, w25, w4 ++ str w4, [x29, 100] ++ mov w1, w4 ++ bl FlashReadSpare ++ ldrb w0, [x26, 88] ++ ldr w4, [x29, 100] ++ cmp w0, 1 ++ bne .L1258 ++ ldr w1, [x26, 92] ++ mov w0, w27 ++ add x2, x29, 183 ++ add w1, w4, w1 ++ bl FlashReadSpare ++ ldrb w0, [x29, 182] ++ ldrb w1, [x29, 183] ++ and w0, w0, w1 ++ strb w0, [x29, 182] ++.L1258: ++ ldr x0, [x29, 112] ++ tbz x0, 1, .L1260 ++ ldr x0, [x26, 104] ++ add x2, x29, 183 ++ ldrh w1, [x0, 10] ++ ldr w0, [x28, x24, lsl 2] ++ sub w1, w1, #1 ++ add w0, w25, w0 ++ add w1, w1, w0 ++ mov w0, w27 ++ bl FlashReadSpare ++.L1260: ++ ldr x1, [x26, 104] ++ ldrb w0, [x1, 7] ++ cmp w0, 1 ++ ccmp w0, 8, 4, ne ++ ldrb w0, [x29, 182] ++ beq .L1261 ++ ldrb w1, [x1, 18] ++ cmp w1, 12 ++ bne .L1262 ++.L1261: ++ cbz w0, .L1283 ++ ldrb w0, [x29, 183] ++ cmp w0, 0 ++ cset w0, eq ++.L1263: ++ ldr x1, [x29, 112] ++ tbz x1, 2, .L1264 ++ ldr w1, [x28, x24, lsl 2] ++ mov w0, w27 ++ add w1, w25, w1 ++ bl SandiskProgTestBadBlock ++.L1264: ++ cbz w0, .L1265 ++ ldr w2, [x29, 164] ++ mov w1, w19 ++ adrp x0, .LC27 ++ add x0, x0, :lo12:.LC27 ++ add w23, w23, 1 ++ and w23, w23, 65535 ++ bl printk ++ ldr x0, [x29, 144] ++ mov w1, 1 ++ ldr x4, [x26, 64] ++ ldrb w2, [x29, 144] ++ ubfx x0, x0, 5, 11 ++ lsl x0, x0, 2 ++ lsl w2, w1, w2 ++ ldr w1, [x4, x0] ++ orr w1, w1, w2 ++ str w1, [x4, x0] ++ ldr w1, [x29, 132] ++ ldrb w0, [x26, 3216] ++ mul w0, w0, w1 ++ cmp w23, w0 ++ bgt .L1266 ++.L1265: ++ ldr w0, [x29, 164] ++ add w0, w0, 1 ++ str w0, [x29, 164] ++ ldr w0, [x29, 168] ++ add w25, w25, w0 ++ b .L1256 ++.L1262: ++ cmp w0, 255 ++ bne .L1283 ++ ldrb w0, [x29, 183] ++ cmp w0, 255 ++ cset w0, ne ++ b .L1263 ++.L1283: ++ mov w0, 1 ++ b .L1263 ++.L1273: ++ mov w0, w25 ++ bl FlashTestBlk ++ cbz w0, .L1272 ++ ldr x0, [x29, 104] ++ mov w1, w25 ++ bl printk ++ ldr x3, [x26, 64] ++ ubfx x0, x25, 5, 11 ++ lsl x0, x0, 2 ++ lsl w1, w23, w25 ++ ldr w2, [x3, x0] ++ orr w1, w2, w1 ++ str w1, [x3, x0] ++ ldr w0, [x29, 172] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ str w0, [x29, 172] ++.L1272: ++ add w25, w25, 1 ++ and w25, w25, 65535 ++ b .L1271 ++.L1276: ++ mov w0, w27 ++ bl FlashTestBlk ++ cbz w0, .L1275 ++ ldr x0, [x29, 104] ++ mov w1, w27 ++ bl printk ++ ldr x3, [x23, 64] ++ ubfx x0, x27, 5, 11 ++ lsl x0, x0, 2 ++ lsl w1, w25, w27 ++ ldr w2, [x3, x0] ++ orr w1, w2, w1 ++ str w1, [x3, x0] ++.L1275: ++ sub w27, w27, #1 ++ and w27, w27, 65535 ++ b .L1274 ++.L1280: ++ sub w26, w26, #1 ++ and w26, w26, 65535 ++ b .L1279 ++.L1255: ++ add w19, w19, 1 ++ and w19, w19, 255 ++ b .L1254 ++ .size FlashMakeFactorBbt, .-FlashMakeFactorBbt ++ .align 2 ++ .global Ftl_log2 ++ .type Ftl_log2, %function ++Ftl_log2: ++ mov w2, 1 ++ mov w1, 0 ++.L1304: ++ cmp w2, w0 ++ bls .L1305 ++ sub w0, w1, #1 ++ ret ++.L1305: ++ add w1, w1, 1 ++ lsl w2, w2, 1 ++ and w1, w1, 65535 ++ b .L1304 ++ .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: ++ and w0, w0, 65535 ++ mov w1, 24 ++ cmp w0, 24 ++ csel w0, w0, w1, cs ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ and w0, w0, 65535 ++ ldrh w2, [x1, 2276] ++ ldrh w3, [x1, 2286] ++ str w0, [x1, 2272] ++ mul w2, w2, w0 ++ sub w0, w3, w0 ++ strh w0, [x1, 2284] ++ ldr w0, [x1, 2292] ++ str w2, [x1, 2280] ++ sub w2, w0, w2 ++ mov w0, 0 ++ str w2, [x1, 2288] ++ ret ++ .size FtlSysBlkNumInit, .-FtlSysBlkNumInit ++ .align 2 ++ .global FtlConstantsInit ++ .type FtlConstantsInit, %function ++FtlConstantsInit: ++ mov x7, x0 ++ stp x29, x30, [sp, -16]! ++ adrp x5, .LANCHOR2 ++ add x1, x5, :lo12:.LANCHOR2 ++ add x29, sp, 0 ++ ldrh w9, [x0, 8] ++ add x1, x1, 2304 ++ ldrh w2, [x0, 10] ++ mov x3, 0 ++ ldrh w0, [x0, 12] ++ ldrh w4, [x7, 14] ++ strh w9, [x1, -8] ++ strh w2, [x1, -6] ++ strh w0, [x1, -4] ++ strh w4, [x1, -18] ++.L1309: ++ strb w3, [x3, x1] ++ add x3, x3, 1 ++ cmp x3, 32 ++ bne .L1309 ++ ldrh w3, [x7, 20] ++ ldrb w1, [x7, 15] ++ cmp w3, w1 ++ bcs .L1310 ++ and w11, w0, 255 ++ add x8, x5, :lo12:.LANCHOR2 ++ mul w13, w0, w2 ++ ubfiz w12, w11, 1, 7 ++ add x8, x8, 2304 ++ mov w3, 0 ++.L1311: ++ cmp w3, w0 ++ bcs .L1313 ++ and w1, w3, 255 ++ mov w6, w3 ++ mov w10, 0 ++ b .L1314 ++.L1312: ++ add w14, w13, w6 ++ strb w1, [x8, w6, uxtw] ++ add w15, w11, w1 ++ add w1, w12, w1 ++ add w10, w10, 1 ++ and w1, w1, 255 ++ add w6, w6, w0 ++ strb w15, [x8, x14] ++.L1314: ++ cmp w10, w2 ++ bcc .L1312 ++ add w3, w3, 1 ++ b .L1311 ++.L1313: ++ add x1, x5, :lo12:.LANCHOR2 ++ ubfiz w2, w2, 1, 15 ++ lsr w4, w4, 1 ++ strh w2, [x1, 2298] ++ strh w4, [x1, 2286] ++.L1310: ++ add x1, x5, :lo12:.LANCHOR2 ++ mov w2, 5 ++ cmp w9, 1 ++ strh w2, [x1, 2336] ++ strh wzr, [x1, 2338] ++ bne .L1315 ++ strh w9, [x1, 2336] ++.L1315: ++ add x1, x5, :lo12:.LANCHOR2 ++ mov w2, 4352 ++ strh w2, [x1, 2340] ++ adrp x2, .LANCHOR0+88 ++ ldrb w11, [x2, #:lo12:.LANCHOR0+88] ++ cbz w11, .L1316 ++ mov w2, 384 ++ strh w2, [x1, 2340] ++.L1316: ++ add x4, x5, :lo12:.LANCHOR2 ++ ldrh w10, [x7, 16] ++ ldrh w8, [x7, 20] ++ ldrh w9, [x7, 18] ++ ldrh w6, [x4, 2298] ++ ldrh w3, [x4, 2286] ++ strh w10, [x4, 2344] ++ strh w9, [x4, 2346] ++ mul w6, w0, w6 ++ strh w8, [x4, 2350] ++ mul w0, w0, w3 ++ and w6, w6, 65535 ++ strh w0, [x4, 2342] ++ strh w6, [x4, 2276] ++ mul w0, w6, w10 ++ strh w0, [x4, 2348] ++ mov w0, w8 ++ bl Ftl_log2 ++ and w2, w0, 65535 ++ strh w0, [x4, 2352] ++ ubfiz w0, w8, 9, 7 ++ strh w0, [x4, 2354] ++ ubfx w0, w0, 8, 8 ++ strh w0, [x4, 2356] ++ cmp w3, 1024 ++ ldrh w0, [x7, 26] ++ strh w0, [x4, 2358] ++ mul w0, w6, w3 ++ str w0, [x4, 2292] ++ bls .L1317 ++ and w0, w3, 255 ++ strh w0, [x4, 2338] ++.L1317: ++ add x1, x5, :lo12:.LANCHOR2 ++ ldrh w0, [x1, 2338] ++ sub w0, w3, w0 ++ mul w0, w0, w6 ++ mul w0, w0, w8 ++ mul w8, w9, w8 ++ mul w0, w0, w10 ++ asr w0, w0, 11 ++ str w0, [x1, 2360] ++ ldrh w0, [x1, 2340] ++ lsl w0, w0, 3 ++ sdiv w0, w0, w8 ++ and w0, w0, 65535 ++ cmp w0, 4 ++ bls .L1318 ++.L1334: ++ strh w0, [x1, 2364] ++ cbz w11, .L1320 ++ add x0, x5, :lo12:.LANCHOR2 ++ mov w1, 640 ++ strh w1, [x0, 2340] ++.L1320: ++ add x1, x5, :lo12:.LANCHOR2 ++ lsl w3, w3, 6 ++ cmp w6, 1 ++ ldrh w0, [x1, 2340] ++ asr w0, w0, w2 ++ add w2, w2, 9 ++ add w0, w0, 2 ++ strh w0, [x1, 2366] ++ asr w3, w3, w2 ++ strh w3, [x1, 2368] ++ and w3, w3, 65535 ++ mul w0, w6, w3 ++ add w3, w3, 8 ++ str w0, [x1, 2372] ++ ldrh w0, [x1, 2364] ++ udiv w0, w0, w6 ++ add w3, w0, w3 ++ beq .L1321 ++.L1335: ++ add x4, x5, :lo12:.LANCHOR2 ++ str w3, [x1, 2272] ++ ldrh w0, [x4, 2272] ++ bl FtlSysBlkNumInit ++ ldr w0, [x4, 2272] ++ str w0, [x4, 2376] ++ ldr w0, [x4, 2288] ++ ldrh w1, [x4, 2344] ++ ldrh w3, [x4, 2350] ++ lsl w0, w0, 2 ++ ldrh w2, [x4, 2364] ++ ldrb w7, [x4, 1220] ++ str wzr, [x4, 1224] ++ mul w0, w0, w1 ++ ldrh w1, [x4, 2352] ++ add w1, w1, 9 ++ lsr w0, w0, w1 ++ mov w1, 2048 ++ add w0, w0, 2 ++ sdiv w1, w1, w3 ++ and w0, w0, 65535 ++ strh w0, [x4, 2380] ++ strh w1, [x4, 2382] ++ add w1, w2, 3 ++ strh w1, [x4, 2364] ++ ldr w1, [x4, 2372] ++ add w6, w1, 3 ++ str w6, [x4, 2372] ++ cbz w7, .L1323 ++ add w1, w1, 5 ++ add w2, w2, 4 ++ strh w2, [x4, 2364] ++.L1336: ++ str w1, [x4, 2372] ++.L1324: ++ add x5, x5, :lo12:.LANCHOR2 ++ ldrh w1, [x5, 2284] ++ strh wzr, [x5, 2384] ++ lsl w2, w1, 1 ++ lsr w1, w1, 3 ++ add w2, w2, 48 ++ add w1, w1, 4 ++ add w0, w2, w0, lsl 2 ++ add w0, w0, w1 ++ cmp w0, w3, lsl 9 ++ bcs .L1325 ++ mov w0, 1 ++ strh w0, [x5, 2384] ++.L1325: ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L1318: ++ mov w0, 4 ++ b .L1334 ++.L1321: ++ add w3, w3, 4 ++ b .L1335 ++.L1323: ++ cmp w6, 7 ++ bhi .L1324 ++ mov w1, 8 ++ b .L1336 ++ .size FtlConstantsInit, .-FtlConstantsInit ++ .align 2 ++ .global FtlMemInit ++ .type FtlMemInit, %function ++FtlMemInit: ++ stp x29, x30, [sp, -64]! ++ mov w1, 65535 ++ mov w2, 1024 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x0, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ add x3, x0, 2304 ++ str x23, [sp, 48] ++ add x4, x0, 2304 ++ add x5, x0, 2304 ++ strh wzr, [x0, 2386] ++ add x6, x0, 2304 ++ stp wzr, wzr, [x3, 84] ++ add x7, x0, 2304 ++ stp wzr, wzr, [x3, 92] ++ stp wzr, wzr, [x4, 100] ++ stp wzr, wzr, [x4, 108] ++ stp wzr, wzr, [x5, 116] ++ stp wzr, wzr, [x5, 124] ++ stp wzr, wzr, [x6, 132] ++ stp wzr, wzr, [x6, 140] ++ stp wzr, w1, [x7, 148] ++ mov w1, -1 ++ stp wzr, wzr, [x7, 156] ++ strh w1, [x0, 2472] ++ strh w1, [x0, 2474] ++ str wzr, [x0, 2468] ++ strh w1, [x0, 2476] ++ strh w1, [x0, 2478] ++ mov w1, 32 ++ strh w1, [x0, 2480] ++ mov w1, 128 ++ strh w1, [x0, 2482] ++ ldrh w1, [x0, 2350] ++ strh wzr, [x0, 2484] ++ strh wzr, [x0, 2486] ++ strh wzr, [x0, 2488] ++ sdiv w2, w2, w1 ++ ldrh w1, [x0, 2276] ++ strh wzr, [x0, 2490] ++ lsl w1, w1, 2 ++ str w2, [x0, 2492] ++ cmp w2, w1 ++ bls .L1338 ++ str w1, [x0, 2492] ++.L1338: ++ add x19, x20, :lo12:.LANCHOR2 ++ mov w22, 56 ++ ldrh w0, [x19, 2348] ++ str wzr, [x19, 2496] ++ lsl w0, w0, 1 ++ bl ftl_malloc ++ ldrh w1, [x19, 2348] ++ str x0, [x19, 2504] ++ mov w0, 12 ++ mul w0, w1, w0 ++ bl ftl_malloc ++ ldrh w21, [x19, 2276] ++ str x0, [x19, 2512] ++ mul w21, w21, w22 ++ lsl w23, w21, 3 ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 2520] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2528] ++ mov w0, w23 ++ bl ftl_malloc ++ str x0, [x19, 2536] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2544] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2552] ++ ldr w0, [x19, 2492] ++ mul w0, w0, w22 ++ bl ftl_malloc ++ str x0, [x19, 2560] ++ ldrh w0, [x19, 2276] ++ ldrh w21, [x19, 2354] ++ lsl w0, w0, 1 ++ add w0, w0, 1 ++ str w0, [x19, 2568] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2576] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2584] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2592] ++ ldr w0, [x19, 2568] ++ mul w0, w21, w0 ++ bl ftl_malloc ++ str x0, [x19, 2600] ++ ldr w0, [x19, 2492] ++ mul w0, w21, w0 ++ bl ftl_malloc ++ str x0, [x19, 2608] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2616] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2624] ++ ldr w1, [x19, 2568] ++ mov w0, 24 ++ mul w0, w1, w0 ++ bl ftl_malloc ++ ldrh w21, [x19, 2356] ++ str x0, [x19, 2632] ++ ldrh w0, [x19, 2276] ++ mul w21, w21, w0 ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2640] ++ lsl w0, w21, 3 ++ bl ftl_malloc ++ str x0, [x19, 2648] ++ ldrh w1, [x19, 2356] ++ ldr w0, [x19, 2568] ++ mul w0, w1, w0 ++ bl ftl_malloc ++ str x0, [x19, 2656] ++ ldrh w1, [x19, 2356] ++ ldr w0, [x19, 2492] ++ mul w0, w1, w0 ++ bl ftl_malloc ++ str x0, [x19, 2664] ++ ldrh w0, [x19, 2286] ++ ubfiz w0, w0, 1, 15 ++ strh w0, [x19, 2672] ++ and w0, w0, 65534 ++ bl ftl_malloc ++ str x0, [x19, 2680] ++ ldrh w0, [x19, 2672] ++ add x0, x0, 547 ++ lsr x0, x0, 9 ++ strh w0, [x19, 2672] ++ lsl w0, w0, 9 ++ bl ftl_malloc ++ ldrh w21, [x19, 2286] ++ str x0, [x19, 2688] ++ add x0, x0, 32 ++ str x0, [x19, 2696] ++ lsl w21, w21, 1 ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2704] ++ mov w0, w21 ++ bl ftl_malloc ++ ldr w21, [x19, 2372] ++ str x0, [x19, 2712] ++ lsl w21, w21, 1 ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2720] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2728] ++ ldrh w0, [x19, 2286] ++ lsr w0, w0, 3 ++ add w0, w0, 4 ++ bl ftl_malloc ++ adrp x1, .LANCHOR0+80 ++ str x0, [x1, #:lo12:.LANCHOR0+80] ++ ldrh w0, [x19, 2364] ++ lsl w0, w0, 1 ++ bl ftl_malloc ++ str x0, [x19, 2736] ++ ldrh w0, [x19, 2364] ++ lsl w0, w0, 1 ++ bl ftl_malloc ++ str x0, [x19, 2744] ++ ldrh w0, [x19, 2364] ++ lsl w0, w0, 2 ++ bl ftl_malloc ++ str x0, [x19, 2752] ++ ldrh w0, [x19, 2366] ++ lsl w0, w0, 2 ++ bl ftl_malloc ++ ldrh w2, [x19, 2366] ++ mov w1, 0 ++ str x0, [x19, 2760] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldrh w21, [x19, 2380] ++ lsl w21, w21, 2 ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2768] ++ mov w0, w21 ++ bl ftl_malloc ++ str x0, [x19, 2776] ++ ldr w0, [x19, 2372] ++ lsl w0, w0, 2 ++ bl ftl_malloc ++ str x0, [x19, 2784] ++ ldrh w0, [x19, 2382] ++ lsl w0, w0, 4 ++ bl ftl_malloc ++ ldrh w1, [x19, 2382] ++ str x0, [x19, 2792] ++ ldrh w0, [x19, 2354] ++ mul w0, w1, w0 ++ bl ftl_malloc ++ str x0, [x19, 2800] ++ ldrh w1, [x19, 2286] ++ mov w0, 6 ++ mul w0, w1, w0 ++ bl ftl_malloc ++ str x0, [x19, 2808] ++ ldrh w0, [x19, 2342] ++ ldrh w1, [x19, 2298] ++ add w0, w0, 31 ++ asr w0, w0, 5 ++ strh w0, [x19, 2816] ++ mul w0, w1, w0 ++ lsl w0, w0, 2 ++ bl ftl_malloc ++ ldrh w3, [x19, 2816] ++ add x4, x19, 2864 ++ ldrh w5, [x19, 2298] ++ mov w1, w3 ++ str x0, [x19, 2856] ++ mov x0, 1 ++.L1339: ++ cmp w0, w5 ++ bcc .L1340 ++ mov w1, 8 ++ add x3, x20, :lo12:.LANCHOR2 ++ sub w1, w1, w0 ++ add x3, x3, 2824 ++ add x1, x1, 1 ++ mov x2, 0 ++.L1341: ++ add x2, x2, 1 ++ cmp x2, x1 ++ bne .L1342 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr x1, [x0, 2720] ++ cbnz x1, .L1343 ++.L1345: ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ add x1, x1, 136 ++ adrp x0, .LC31 ++ add x0, x0, :lo12:.LC31 ++ bl printk ++ mov w0, -1 ++.L1337: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L1340: ++ ldr x2, [x19, 2856] ++ add w0, w0, 1 ++ add x2, x2, w1, uxtw 2 ++ add w1, w1, w3 ++ str x2, [x4], 8 ++ b .L1339 ++.L1342: ++ add x4, x0, x2 ++ add x4, x3, x4, lsl 3 ++ str xzr, [x4, 24] ++ b .L1341 ++.L1343: ++ ldr x1, [x0, 2728] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2768] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2784] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2792] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2800] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2808] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2856] ++ cbz x1, .L1345 ++ ldr x0, [x0, 2712] ++ cbz x0, .L1345 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr x1, [x0, 2504] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2512] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2520] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2536] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2544] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2552] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2528] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2576] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2584] ++ cbz x1, .L1345 ++ ldr x0, [x0, 2592] ++ cbz x0, .L1345 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr x1, [x0, 2600] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2616] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2624] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2632] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2640] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2648] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2656] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2696] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2680] ++ cbz x1, .L1345 ++ ldr x0, [x0, 2736] ++ cbz x0, .L1345 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldr x1, [x0, 2744] ++ cbz x1, .L1345 ++ ldr x1, [x0, 2752] ++ cbz x1, .L1345 ++ ldr x0, [x0, 2760] ++ cbz x0, .L1345 ++ mov w0, 0 ++ b .L1337 ++ .size FtlMemInit, .-FtlMemInit ++ .align 2 ++ .global IsBlkInVendorPart ++ .type IsBlkInVendorPart, %function ++IsBlkInVendorPart: ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ and w0, w0, 65535 ++ ldrh w2, [x1, 2920] ++ cbz w2, .L1444 ++ ldrh w2, [x1, 2364] ++ ldr x3, [x1, 2736] ++ mov x1, 0 ++.L1442: ++ cmp w2, w1, uxth ++ bhi .L1443 ++.L1444: ++ mov w0, 0 ++ ret ++.L1443: ++ add x1, x1, 1 ++ add x4, x3, x1, lsl 1 ++ ldrh w4, [x4, -2] ++ cmp w4, w0 ++ bne .L1442 ++ mov w0, 1 ++ ret ++ .size IsBlkInVendorPart, .-IsBlkInVendorPart ++ .align 2 ++ .global FtlCacheMetchLpa ++ .type FtlCacheMetchLpa, %function ++FtlCacheMetchLpa: ++ adrp x2, .LANCHOR2 ++ add x2, x2, :lo12:.LANCHOR2 ++ ldr w4, [x2, 2496] ++ cbz w4, .L1451 ++ mov x5, 24 ++ mov w6, 56 ++ ldr x2, [x2, 2560] ++ nop // between mem op and mult-accumulate ++ umaddl x4, w4, w6, x5 ++ add x3, x2, 24 ++ add x2, x2, x4 ++.L1448: ++ cmp x3, x2 ++ bne .L1450 ++.L1451: ++ mov w0, 0 ++ ret ++.L1450: ++ ldr w4, [x3] ++ cmp w4, w0 ++ bcc .L1449 ++ cmp w4, w1 ++ bls .L1452 ++.L1449: ++ add x3, x3, 56 ++ b .L1448 ++.L1452: ++ mov w0, 1 ++ ret ++ .size FtlCacheMetchLpa, .-FtlCacheMetchLpa ++ .align 2 ++ .global FtlGetCap ++ .type FtlGetCap, %function ++FtlGetCap: ++ adrp x0, .LANCHOR2+1224 ++ ldr w0, [x0, #:lo12:.LANCHOR2+1224] ++ ret ++ .size FtlGetCap, .-FtlGetCap ++ .align 2 ++ .global FtlGetCapacity ++ .type FtlGetCapacity, %function ++FtlGetCapacity: ++ adrp x0, .LANCHOR2+1224 ++ ldr w0, [x0, #:lo12:.LANCHOR2+1224] ++ ret ++ .size FtlGetCapacity, .-FtlGetCapacity ++ .align 2 ++ .global ftl_get_density ++ .type ftl_get_density, %function ++ftl_get_density: ++ adrp x0, .LANCHOR2+1224 ++ ldr w0, [x0, #:lo12:.LANCHOR2+1224] ++ ret ++ .size ftl_get_density, .-ftl_get_density ++ .align 2 ++ .global FtlGetLpn ++ .type FtlGetLpn, %function ++FtlGetLpn: ++ adrp x0, .LANCHOR2+2924 ++ ldr w0, [x0, #:lo12:.LANCHOR2+2924] ++ ret ++ .size FtlGetLpn, .-FtlGetLpn ++ .align 2 ++ .global FtlBbmMapBadBlock ++ .type FtlBbmMapBadBlock, %function ++FtlBbmMapBadBlock: ++ stp x29, x30, [sp, -32]! ++ and w1, w0, 65535 ++ mov w4, 1 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x19, 2342] ++ add x19, x19, 2824 ++ udiv w3, w1, w0 ++ and w2, w3, 65535 ++ msub w3, w3, w0, w1 ++ add x0, x19, w2, uxth 3 ++ and w3, w3, 65535 ++ ldr x0, [x0, 32] ++ ubfx x5, x3, 5, 11 ++ lsl x5, x5, 2 ++ lsl w4, w4, w3 ++ ldr w6, [x0, x5] ++ orr w4, w4, w6 ++ str w4, [x0, x5] ++ adrp x0, .LC32 ++ add x0, x0, :lo12:.LC32 ++ 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 ++ add x3, x2, :lo12:.LANCHOR2 ++ and w0, w0, 65535 ++ ldrh w1, [x3, 2342] ++ udiv w2, w0, w1 ++ msub w0, w2, w1, w0 ++ add x2, x3, w2, uxth 3 ++ and w0, w0, 65535 ++ ldr x1, [x2, 2856] ++ 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, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ mov x20, x1 ++ str x21, [sp, 32] ++ mov w1, 0 ++ mov x21, x0 ++ mov x0, x20 ++ ldrh w2, [x19, 2816] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ mov x1, 0 ++ mov w5, 65535 ++ mov w4, 1 ++.L1463: ++ ldrh w0, [x21, x1] ++ cmp w0, w5 ++ beq .L1461 ++ ubfx x2, x0, 5, 11 ++ lsl w0, w4, w0 ++ lsl x2, x2, 2 ++ add x1, x1, 2 ++ cmp x1, 1024 ++ ldr w3, [x20, x2] ++ orr w0, w3, w0 ++ str w0, [x20, x2] ++ ldrh w0, [x19, 2830] ++ add w0, w0, 1 ++ strh w0, [x19, 2830] ++ bne .L1463 ++.L1461: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ 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] ++ stp x25, x26, [sp, 64] ++ adrp x25, .LANCHOR2 ++ add x19, x25, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ ldr w0, [x19, 2928] ++ cbnz w0, .L1469 ++ ldr x2, [x19, 2640] ++ mov w1, 0 ++ ldr x0, [x19, 2576] ++ add x21, x19, 2856 ++ str x2, [x19, 2952] ++ mov w20, 0 ++ ldrh w2, [x19, 2354] ++ str x0, [x19, 2944] ++ bl ftl_memset ++.L1470: ++ ldrh w0, [x19, 2298] ++ add x1, x19, 2936 ++ cmp w20, w0 ++ blt .L1471 ++ ldr x26, [x1, 16] ++ mov w2, 16 ++ mov w1, 255 ++ adrp x23, .LC33 ++ mov x0, x26 ++ bl ftl_memset ++ mov w0, -3887 ++ add x25, x25, :lo12:.LANCHOR2 ++ strh w0, [x26] ++ add x0, x19, 2824 ++ add x23, x23, :lo12:.LC33 ++ mov w21, 0 ++ ldr w1, [x19, 2832] ++ mov w22, 0 ++ str w1, [x26, 4] ++ adrp x24, .LC34 ++ ldrh w1, [x19, 2824] ++ strh w1, [x26, 2] ++ ldrh w1, [x19, 2828] ++ strh w1, [x26, 8] ++ ldrh w1, [x19, 2830] ++ strh w1, [x26, 10] ++ ldr w1, [x19, 2272] ++ mov x19, x0 ++ strh w1, [x26, 12] ++.L1472: ++ ldr x0, [x25, 2576] ++ str x0, [x25, 2944] ++ ldr x0, [x25, 2640] ++ str x0, [x25, 2952] ++ ldrh w1, [x19] ++ ldrh w2, [x19, 2] ++ ldrh w3, [x19, 4] ++ ldrh w4, [x26, 10] ++ orr w0, w2, w1, lsl 10 ++ str wzr, [x25, 2936] ++ str w0, [x25, 2940] ++ mov x0, x23 ++ bl printk ++ ldrh w0, [x25, 2346] ++ ldrh w1, [x19, 2] ++ sub w0, w0, #1 ++ cmp w1, w0 ++ blt .L1473 ++ ldr w0, [x19, 8] ++ mov w2, 1 ++ ldrh w1, [x19] ++ add w0, w0, 1 ++ str w0, [x19, 8] ++ str w0, [x26, 4] ++ strh w1, [x26, 8] ++ ldrh w0, [x19, 4] ++ strh w1, [x19, 4] ++ ldr x1, [x25, 2544] ++ strh w0, [x19] ++ lsl w0, w0, 10 ++ str w0, [x25, 2940] ++ strh wzr, [x19, 2] ++ str w0, [x1, 4] ++ mov w1, w2 ++ ldr x0, [x25, 2544] ++ bl FlashEraseBlocks ++.L1473: ++ add x20, x25, 2936 ++ mov w3, 1 ++ mov x0, x20 ++ mov w2, w3 ++ mov w1, w3 ++ bl FlashProgPages ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++ ldr w0, [x25, 2936] ++ cmn w0, #1 ++ bne .L1474 ++ ldr w1, [x25, 2940] ++ add w21, w21, 1 ++ add x0, x24, :lo12:.LC34 ++ and w21, w21, 65535 ++ bl printk ++ cmp w21, 3 ++ bls .L1472 ++ ldr w1, [x25, 2940] ++ mov w2, w21 ++ adrp x0, .LC35 ++ add x0, x0, :lo12:.LC35 ++ bl printk ++ mov w0, 1 ++ str w0, [x25, 2928] ++.L1469: ++ 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 ++.L1471: ++ ldrh w2, [x19, 2816] ++ ldr x0, [x1, 8] ++ ldr x1, [x21], 8 ++ mul w3, w2, w20 ++ lsl w2, w2, 2 ++ add w20, w20, 1 ++ add x0, x0, w3, sxtw 2 ++ bl ftl_memcpy ++ b .L1470 ++.L1477: ++ mov w22, 1 ++ b .L1472 ++.L1474: ++ add w22, w22, 1 ++ cmp w22, 1 ++ ble .L1477 ++ cmp w0, 256 ++ bne .L1469 ++ b .L1472 ++ .size FtlBbmTblFlush, .-FtlBbmTblFlush ++ .align 2 ++ .global FtlLoadFactoryBbt ++ .type FtlLoadFactoryBbt, %function ++FtlLoadFactoryBbt: ++ stp x29, x30, [sp, -80]! ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ add x22, x0, 2836 ++ stp x25, x26, [sp, 64] ++ mov w21, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x23, x24, [sp, 48] ++ add x23, x0, 2936 ++ mov x25, x23 ++ mov w26, 61664 ++ ldr x1, [x0, 2576] ++ ldr x24, [x0, 2640] ++ stp x1, x24, [x23, 8] ++.L1483: ++ ldrh w0, [x19, 2298] ++ cmp w21, w0 ++ bcc .L1488 ++ 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 ++.L1488: ++ ldrh w20, [x19, 2342] ++ mov w0, -1 ++ strh w0, [x22] ++.L1485: ++ ldrh w0, [x19, 2342] ++ sub w20, w20, #1 ++ and w20, w20, 65535 ++ sub w1, w0, #16 ++ cmp w20, w1 ++ ble .L1486 ++ madd w0, w0, w21, w20 ++ mov w2, 1 ++ mov w1, w2 ++ lsl w0, w0, 10 ++ str w0, [x25, 4] ++ mov x0, x23 ++ bl FlashReadPages ++ ldr w0, [x25] ++ cmn w0, #1 ++ beq .L1485 ++ ldrh w0, [x24] ++ cmp w0, w26 ++ bne .L1485 ++ strh w20, [x22] ++.L1486: ++ add w21, w21, 1 ++ add x22, x22, 2 ++ b .L1483 ++ .size FtlLoadFactoryBbt, .-FtlLoadFactoryBbt ++ .align 2 ++ .global FtlBbtMemInit ++ .type FtlBbtMemInit, %function ++FtlBbtMemInit: ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ mov w1, -1 ++ add x29, sp, 0 ++ mov w2, 16 ++ add x0, x0, 2836 ++ 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: ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ mov w4, 0 ++ mov w5, 0 ++ ldrh w6, [x0, 2342] ++ ldrh w0, [x0, 2298] ++ mul w6, w6, w0 ++ cmp w4, w6 ++ blt .L1505 ++ mov w0, w5 ++ ret ++.L1505: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++.L1498: ++ mov w0, w4 ++ bl FtlBbmIsBadBlock ++ cbz w0, .L1497 ++ add w5, w5, 1 ++ and w5, w5, 65535 ++.L1497: ++ add w4, w4, 1 ++ and w4, w4, 65535 ++ cmp w4, w6 ++ blt .L1498 ++ mov w0, w5 ++ ldp x29, x30, [sp], 16 ++ 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] ++ ldr w24, [x20, 2928] ++ cbnz w24, .L1507 ++ mov x21, x19 ++ add x26, x20, 2856 ++ add x25, x20, 2836 ++ mov x19, x20 ++ add x20, x20, 2936 ++ mov w28, -3872 ++ bl FtlBbtMemInit ++ bl FtlLoadFactoryBbt ++.L1508: ++ ldrh w0, [x19, 2298] ++ cmp w24, w0 ++ bcc .L1514 ++ add x20, x21, :lo12:.LANCHOR2 ++ mov w19, 0 ++.L1515: ++ ldrh w0, [x20, 2358] ++ cmp w0, w19 ++ bhi .L1516 ++ add x20, x20, 2824 ++ ldrh w19, [x20, 12] ++ mov w22, 65535 ++ sub w19, w19, #1 ++ and w19, w19, 65535 ++.L1517: ++ ldrh w0, [x20, 12] ++ sub w0, w0, #48 ++ cmp w19, w0 ++ ble .L1521 ++ mov w0, w19 ++ bl FtlBbmIsBadBlock ++ cmp w0, 1 ++ beq .L1518 ++ mov w0, w19 ++ bl FlashTestBlk ++ cbz w0, .L1519 ++ mov w0, w19 ++ bl FtlBbmMapBadBlock ++.L1518: ++ sub w19, w19, #1 ++ and w19, w19, 65535 ++ b .L1517 ++.L1514: ++ ldr x0, [x19, 2576] ++ mov w2, 65535 ++ ldr x27, [x19, 2640] ++ ldrh w1, [x25] ++ stp x0, x27, [x20, 8] ++ cmp w1, w2 ++ beq .L1509 ++ ldrh w23, [x19, 2342] ++ mov w2, 1 ++ madd w23, w23, w24, w1 ++ mov w1, w2 ++ lsl w0, w23, 10 ++ str w0, [x20, 4] ++ mov x0, x20 ++ bl FlashReadPages ++ ldr x1, [x20, 8] ++ ldr x0, [x26] ++ ldrh w2, [x19, 2342] ++ add w2, w2, 7 ++ lsr w2, w2, 3 ++ bl ftl_memcpy ++.L1510: ++ mov w0, w23 ++ add w24, w24, 1 ++ bl FtlBbmMapBadBlock ++ add x26, x26, 8 ++ add x25, x25, 2 ++ b .L1508 ++.L1509: ++ mov w1, w24 ++ bl FlashGetBadBlockList ++ ldr x0, [x20, 8] ++ ldr x1, [x26] ++ bl FtlBbt2Bitmap ++ ldrh w22, [x19, 2342] ++.L1512: ++ sub w22, w22, #1 ++ and w22, w22, 65535 ++.L1511: ++ ldrh w0, [x19, 2342] ++ madd w0, w24, w0, w22 ++ bl FtlBbmIsBadBlock ++ cmp w0, 1 ++ beq .L1512 ++ ldr x0, [x19, 2640] ++ mov w2, 16 ++ strh w22, [x25] ++ mov w1, 0 ++ bl ftl_memset ++ strh w28, [x27] ++ str wzr, [x27, 4] ++ ldrh w23, [x19, 2342] ++ ldrh w0, [x25] ++ strh w0, [x27, 2] ++ ldrh w2, [x19, 2816] ++ ldrh w0, [x25] ++ ldr x1, [x26] ++ lsl w2, w2, 2 ++ madd w23, w23, w24, w0 ++ lsl w0, w23, 10 ++ str w0, [x20, 4] ++ ldr x0, [x20, 8] ++ bl ftl_memcpy ++ mov w2, 1 ++ mov x0, x20 ++ mov w1, w2 ++ bl FlashEraseBlocks ++ mov w3, 1 ++ mov x0, x20 ++ mov w2, w3 ++ mov w1, w3 ++ bl FlashProgPages ++ ldr w0, [x20] ++ cmn w0, #1 ++ bne .L1510 ++ mov w0, w23 ++ bl FtlBbmMapBadBlock ++ b .L1511 ++.L1516: ++ mov w0, w19 ++ add w19, w19, 1 ++ bl FtlBbmMapBadBlock ++ and w19, w19, 65535 ++ b .L1515 ++.L1519: ++ ldrh w0, [x20] ++ cmp w0, w22 ++ bne .L1520 ++ strh w19, [x20] ++ b .L1518 ++.L1520: ++ strh w19, [x20, 4] ++.L1521: ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w2, 2 ++ ldr x1, [x21, 2544] ++ ldrh w0, [x21, 2824] ++ str wzr, [x21, 2832] ++ strh wzr, [x21, 2826] ++ lsl w0, w0, 10 ++ str w0, [x1, 4] ++ ldr x0, [x21, 2544] ++ ldrh w1, [x21, 2828] ++ lsl w1, w1, 10 ++ str w1, [x0, 60] ++ mov w1, 1 ++ bl FlashEraseBlocks ++ ldrh w0, [x21, 2824] ++ bl FtlBbmMapBadBlock ++ ldrh w0, [x21, 2828] ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ strh wzr, [x21, 2826] ++ ldr w0, [x21, 2832] ++ ldrh w1, [x21, 2828] ++ add w0, w0, 1 ++ str w0, [x21, 2832] ++ ldrh w0, [x21, 2824] ++ strh w0, [x21, 2828] ++ strh w1, [x21, 2824] ++ bl FtlBbmTblFlush ++.L1507: ++ 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 x4, .LANCHOR2 ++ add x4, x4, :lo12:.LANCHOR2 ++ and w0, w0, 65535 ++ and w1, w1, 65535 ++ ldrh w2, [x4, 2300] ++ ldrh w4, [x4, 2342] ++ udiv w3, w0, w2 ++ msub w0, w3, w2, w0 ++ madd w2, w2, w1, w0 ++ madd w0, w3, w4, w2 ++ ret ++ .size V2P_block, .-V2P_block ++ .align 2 ++ .global P2V_plane ++ .type P2V_plane, %function ++P2V_plane: ++ adrp x2, .LANCHOR2 ++ add x2, x2, :lo12:.LANCHOR2 ++ and w3, w0, 65535 ++ ldrh w1, [x2, 2300] ++ ldrh w2, [x2, 2342] ++ udiv w0, w3, w1 ++ udiv w2, w3, w2 ++ msub w0, w0, w1, w3 ++ madd w0, w1, w2, 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 x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ and w3, w0, 65535 ++ ldrh w2, [x1, 2342] ++ ldrh w1, [x1, 2300] ++ udiv w0, w3, w2 ++ msub w0, w0, w2, w3 ++ and w0, w0, 65535 ++ 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 .L1531 ++ sub w1, w0, w1 ++ cmp w1, w2 ++ cset w0, ls ++ ret ++.L1531: ++ sub w1, w1, w0 ++ cmp w1, w2 ++ cset w0, hi ++ ret ++ .size ftl_cmp_data_ver, .-ftl_cmp_data_ver ++ .align 2 ++ .global FtlGetLastWrittenPage ++ .type FtlGetLastWrittenPage, %function ++FtlGetLastWrittenPage: ++ stp x29, x30, [sp, -192]! ++ cmp w1, 1 ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w23, w1 ++ stp x19, x20, [sp, 16] ++ adrp x1, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ add x1, x1, :lo12:.LANCHOR2 ++ bne .L1534 ++ ldrh w19, [x1, 2346] ++.L1535: ++ sub w19, w19, #1 ++ lsl w21, w0, 10 ++ sxth w19, w19 ++ add x1, x29, 128 ++ orr w0, w19, w21 ++ stp xzr, x1, [x29, 80] ++ str w0, [x29, 76] ++ mov w2, w23 ++ mov w1, 1 ++ add x0, x29, 72 ++ bl FlashReadPages ++ ldr w0, [x29, 128] ++ cmn w0, #1 ++ bne .L1536 ++ mov w22, 0 ++ mov w24, 2 ++.L1537: ++ cmp w22, w19 ++ ble .L1540 ++.L1536: ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 192 ++ ret ++.L1534: ++ ldrh w19, [x1, 2344] ++ b .L1535 ++.L1540: ++ add w20, w22, w19 ++ mov w2, w23 ++ mov w1, 1 ++ sdiv w20, w20, w24 ++ sxth w0, w20 ++ orr w0, w0, w21 ++ str w0, [x29, 76] ++ add x0, x29, 72 ++ bl FlashReadPages ++ ldr w0, [x29, 128] ++ cmn w0, #1 ++ bne .L1538 ++ ldr w0, [x29, 132] ++ cmn w0, #1 ++ bne .L1538 ++ ldr w0, [x29, 72] ++ cmn w0, #1 ++ beq .L1538 ++ sub w19, w20, #1 ++ sxth w19, w19 ++ b .L1537 ++.L1538: ++ add w20, w20, 1 ++ sxth w22, w20 ++ b .L1537 ++ .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 ++ stp x21, x22, [sp, 32] ++ add x21, x23, 2936 ++ mov w24, 61649 ++ ldr x0, [x23, 2576] ++ ldr x22, [x23, 2640] ++ stp x0, x22, [x21, 8] ++ bl FtlBbtMemInit ++ ldrh w20, [x23, 2342] ++ sub w20, w20, #1 ++ and w20, w20, 65535 ++.L1546: ++ ldrh w0, [x23, 2342] ++ sub w0, w0, #48 ++ cmp w20, w0 ++ ble .L1549 ++ lsl w0, w20, 10 ++ mov w2, 1 ++ str w0, [x21, 4] ++ mov w1, w2 ++ mov x0, x21 ++ bl FlashReadPages ++ ldr w0, [x21] ++ cmn w0, #1 ++ bne .L1547 ++ ldr w0, [x21, 4] ++ mov w2, 1 ++ mov w1, w2 ++ add w0, w0, 1 ++ str w0, [x21, 4] ++ mov x0, x21 ++ bl FlashReadPages ++.L1547: ++ ldr w0, [x21] ++ cmn w0, #1 ++ beq .L1548 ++ ldrh w0, [x22] ++ cmp w0, w24 ++ bne .L1548 ++ ldr w1, [x22, 4] ++ str w1, [x23, 2832] ++ strh w20, [x23, 2824] ++ ldrh w1, [x22, 8] ++ strh w1, [x23, 2828] ++.L1549: ++ add x21, x19, :lo12:.LANCHOR2 ++ mov w0, 65535 ++ ldrh w1, [x21, 2824] ++ cmp w1, w0 ++ beq .L1563 ++ ldrh w1, [x21, 2828] ++ cmp w1, w0 ++ beq .L1553 ++ add x0, x21, 2936 ++ lsl w1, w1, 10 ++ mov w2, 1 ++ str w1, [x0, 4] ++ mov w1, w2 ++ bl FlashReadPages ++ ldr w0, [x21, 2936] ++ cmn w0, #1 ++ beq .L1553 ++ ldrh w1, [x22] ++ mov w0, 61649 ++ cmp w1, w0 ++ bne .L1553 ++ ldr w1, [x21, 2832] ++ ldr w0, [x22, 4] ++ cmp w0, w1 ++ bls .L1553 ++ str w0, [x21, 2832] ++ ldrh w1, [x21, 2828] ++ ldrh w0, [x22, 8] ++ strh w1, [x21, 2824] ++ strh w0, [x21, 2828] ++.L1553: ++ add x20, x19, :lo12:.LANCHOR2 ++ mov w1, 1 ++ add x23, x20, 2936 ++ mov w24, 61649 ++ ldrh w0, [x20, 2824] ++ bl FtlGetLastWrittenPage ++ sxth w21, w0 ++ add w0, w0, 1 ++ strh w0, [x20, 2826] ++.L1555: ++ tbnz w21, #31, .L1560 ++ ldrh w0, [x20, 2824] ++ mov w2, 1 ++ mov w1, w2 ++ orr w0, w21, w0, lsl 10 ++ str w0, [x23, 4] ++ ldr x0, [x20, 2576] ++ str x0, [x23, 8] ++ mov x0, x23 ++ bl FlashReadPages ++ ldr w0, [x23] ++ cmn w0, #1 ++ beq .L1556 ++ ldrh w0, [x22] ++ cmp w0, w24 ++ bne .L1556 ++.L1560: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x22, 10] ++ mov w2, 65535 ++ strh w0, [x1, 2830] ++ ldrh w0, [x22, 12] ++ cmp w0, w2 ++ bne .L1557 ++.L1558: ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w20, 0 ++ add x21, x19, 2856 ++.L1561: ++ ldrh w0, [x19, 2298] ++ cmp w20, w0 ++ bcc .L1562 ++ mov w0, 0 ++.L1545: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L1548: ++ sub w20, w20, #1 ++ and w20, w20, 65535 ++ b .L1546 ++.L1556: ++ sub w21, w21, #1 ++ sxth w21, w21 ++ b .L1555 ++.L1557: ++ ldr w2, [x1, 2272] ++ cmp w0, w2 ++ beq .L1558 ++ ldrh w1, [x1, 2286] ++ lsr w1, w1, 2 ++ cmp w2, w1 ++ bcs .L1558 ++ cmp w0, w1 ++ bcs .L1558 ++ bl FtlSysBlkNumInit ++ b .L1558 ++.L1562: ++ ldrh w2, [x19, 2816] ++ ldr x0, [x19, 2944] ++ mul w1, w2, w20 ++ lsl w2, w2, 2 ++ add w20, w20, 1 ++ add x1, x0, x1, lsl 2 ++ ldr x0, [x21], 8 ++ bl ftl_memcpy ++ b .L1561 ++.L1563: ++ mov w0, -1 ++ b .L1545 ++ .size FtlLoadBbt, .-FtlLoadBbt ++ .align 2 ++ .global FtlFreeSysBlkQueueInit ++ .type FtlFreeSysBlkQueueInit, %function ++FtlFreeSysBlkQueueInit: ++ stp x29, x30, [sp, -16]! ++ adrp x3, .LANCHOR2 ++ add x3, x3, :lo12:.LANCHOR2 ++ mov w2, 2048 ++ add x29, sp, 0 ++ mov w1, 0 ++ strh w0, [x3, 2992] ++ add x0, x3, 3000 ++ strh wzr, [x3, 2994] ++ strh wzr, [x3, 2996] ++ strh wzr, [x3, 2998] ++ 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+2998 ++ ldrh w0, [x0, #:lo12:.LANCHOR2+2998] ++ cmp w0, 0 ++ cset w0, eq ++ ret ++ .size FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty ++ .align 2 ++ .global FtlFreeSysBlkQueueFull ++ .type FtlFreeSysBlkQueueFull, %function ++FtlFreeSysBlkQueueFull: ++ adrp x0, .LANCHOR2+2998 ++ ldrh w0, [x0, #:lo12:.LANCHOR2+2998] ++ cmp w0, 1024 ++ cset w0, eq ++ ret ++ .size FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull ++ .align 2 ++ .global FtlFreeSysBlkQueueIn ++ .type FtlFreeSysBlkQueueIn, %function ++FtlFreeSysBlkQueueIn: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w21, w0, 65535 ++ stp x19, x20, [sp, 16] ++ sub w2, w21, #1 ++ mov w0, 65533 ++ cmp w0, w2, uxth ++ bcc .L1578 ++ adrp x0, .LANCHOR2 ++ add x20, x0, :lo12:.LANCHOR2 ++ mov x19, x0 ++ ldrh w2, [x20, 2998] ++ cmp w2, 1024 ++ beq .L1578 ++ and w1, w1, 65535 ++ cbz w1, .L1580 ++ ldr w0, [x20, 2928] ++ cbnz w0, .L1580 ++ mov w0, w21 ++ bl P2V_block_in_plane ++ and w22, w0, 65535 ++ ldr x0, [x20, 2544] ++ lsl w1, w21, 10 ++ mov w2, 1 ++ str w1, [x0, 4] ++ mov w1, w2 ++ ldr x0, [x20, 2544] ++ bl FlashEraseBlocks ++ ldr x2, [x20, 2696] ++ ubfiz x0, x22, 1, 16 ++ ldrh w1, [x2, x0] ++ add w1, w1, 1 ++ strh w1, [x2, x0] ++ ldr w0, [x20, 2436] ++ add w0, w0, 1 ++ str w0, [x20, 2436] ++.L1580: ++ add x0, x19, :lo12:.LANCHOR2 ++ add x0, x0, 2992 ++ ldrh w1, [x0, 6] ++ add w1, w1, 1 ++ strh w1, [x0, 6] ++ ldrh w1, [x0, 4] ++ add x2, x0, w1, sxtw 1 ++ add w1, w1, 1 ++ and w1, w1, 1023 ++ strh w1, [x0, 4] ++ strh w21, [x2, 8] ++.L1578: ++ 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, -144]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ add x21, x20, :lo12:.LANCHOR2 ++ stp x25, x26, [sp, 64] ++ and w25, w0, 65535 ++ stp x23, x24, [sp, 48] ++ stp x27, x28, [sp, 80] ++ ldr w0, [x21, 2928] ++ cbnz w0, .L1611 ++ ldrb w8, [x21, 1220] ++ and w24, w1, 255 ++ ldrb w0, [x21, 2094] ++ add x9, x21, 2304 ++ mov w5, 0 ++ mov w23, 0 ++ mov w19, 0 ++ mov w7, 56 ++ mov w10, 4 ++ str w25, [x21, 2468] ++ str w0, [x29, 132] ++.L1590: ++ ldrh w0, [x21, 2276] ++ cmp w0, w5 ++ bhi .L1594 ++ cbz w23, .L1588 ++ ldr x0, [x21, 2544] ++ cmp w8, 0 ++ cset w22, ne ++ strb wzr, [x21, 2094] ++ mov w2, w23 ++ mov w1, w22 ++ add x26, x20, :lo12:.LANCHOR2 ++ bl FlashEraseBlocks ++ ldrb w0, [x29, 132] ++ strb w0, [x21, 2094] ++ mov w21, 56 ++ umull x21, w23, w21 ++ mov x23, 0 ++.L1597: ++ ldr x0, [x26, 2544] ++ add x1, x0, x23 ++ ldr w0, [x0, x23] ++ cmn w0, #1 ++ bne .L1596 ++ ldr w0, [x1, 4] ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++.L1596: ++ add x23, x23, 56 ++ cmp x21, x23 ++ bne .L1597 ++ cbnz w24, .L1598 ++ and w22, w22, 65535 ++ mov w0, 1 ++ mov w27, 6 ++ str w0, [x29, 136] ++.L1599: ++ add x26, x20, :lo12:.LANCHOR2 ++ mov w23, 0 ++ add x0, x26, 2304 ++ mov w28, 56 ++ str x0, [x29, 120] ++.L1607: ++ mov w5, 0 ++ mov w21, 0 ++ mov w7, 4 ++.L1600: ++ ldrh w0, [x26, 2276] ++ cmp w0, w5 ++ bhi .L1603 ++ cbz w21, .L1588 ++ ldr x0, [x26, 2544] ++ mov w2, w22 ++ mov w1, w21 ++ strb wzr, [x26, 2094] ++ mov w3, 1 ++ bl FlashProgPages ++ umull x1, w21, w28 ++ ldrb w0, [x29, 132] ++ strb w0, [x26, 2094] ++ mov x2, 0 ++.L1606: ++ ldr x0, [x26, 2544] ++ add x3, x0, x2 ++ ldr w0, [x0, x2] ++ cbz w0, .L1605 ++ ldr w0, [x3, 4] ++ add w19, w19, 1 ++ stp x2, x1, [x29, 104] ++ and w19, w19, 65535 ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++ ldp x2, x1, [x29, 104] ++.L1605: ++ add x2, x2, 56 ++ cmp x1, x2 ++ bne .L1606 ++ add w23, w23, w27 ++ ldr w0, [x29, 136] ++ and w23, w23, 65535 ++ cmp w0, w23 ++ bhi .L1607 ++ add x26, x20, :lo12:.LANCHOR2 ++ mov x23, 0 ++.L1609: ++ cbz w24, .L1608 ++ ldr x0, [x26, 2544] ++ add x1, x0, x23 ++ ldr w0, [x0, x23] ++ cbnz w0, .L1608 ++ ldr w0, [x1, 4] ++ mov w1, 1 ++ str x2, [x29, 136] ++ lsr w0, w0, 10 ++ bl FtlFreeSysBlkQueueIn ++ ldr x2, [x29, 136] ++.L1608: ++ add x23, x23, 56 ++ cmp x23, x2 ++ bne .L1609 ++ cmp w25, 63 ++ ccmp w24, 0, 0, hi ++ beq .L1588 ++ add x20, x20, :lo12:.LANCHOR2 ++ mov w2, w21 ++ mov w1, w22 ++ ldr x0, [x20, 2544] ++ bl FlashEraseBlocks ++.L1588: ++ 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 ++.L1594: ++ umull x0, w5, w7 ++ ldr x1, [x21, 2544] ++ str wzr, [x1, x0] ++ mov w1, w25 ++ ldrb w0, [x9, w5, sxtw] ++ bl V2P_block ++ and w6, w0, 65535 ++ mov w11, w6 ++ cbz w24, .L1591 ++ bl IsBlkInVendorPart ++ cbnz w0, .L1592 ++.L1591: ++ mov w0, w11 ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L1593 ++ umull x2, w23, w7 ++ ldr x0, [x21, 2544] ++ lsl w6, w6, 10 ++ add x0, x0, x2 ++ str w6, [x0, 4] ++ ldrh w0, [x21, 2356] ++ ldr x1, [x21, 2544] ++ add x1, x1, x2 ++ ldr x2, [x21, 2648] ++ mul w0, w0, w23 ++ add w23, w23, 1 ++ and w23, w23, 65535 ++ sdiv w0, w0, w10 ++ add x0, x2, w0, sxtw 2 ++ stp xzr, x0, [x1, 8] ++.L1592: ++ add w5, w5, 1 ++ and w5, w5, 65535 ++ b .L1590 ++.L1593: ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L1592 ++.L1598: ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrh w1, [x0, 2346] ++ ldrb w0, [x0, 1220] ++ str w1, [x29, 136] ++ cbnz w0, .L1612 ++ uxtw x0, w1 ++ mov w22, 1 ++ lsr w27, w0, 2 ++ b .L1599 ++.L1612: ++ mov w22, 1 ++ mov w27, w22 ++ b .L1599 ++.L1603: ++ umull x0, w5, w28 ++ ldr x1, [x26, 2544] ++ str wzr, [x1, x0] ++ mov w1, w25 ++ ldr x0, [x29, 120] ++ ldrb w0, [x0, w5, sxtw] ++ bl V2P_block ++ and w6, w0, 65535 ++ mov w8, w6 ++ cbz w24, .L1601 ++ bl IsBlkInVendorPart ++ cbnz w0, .L1602 ++.L1601: ++ mov w0, w8 ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L1602 ++ umull x2, w21, w28 ++ ldr x0, [x26, 2544] ++ add w6, w23, w6, lsl 10 ++ add x0, x0, x2 ++ str w6, [x0, 4] ++ ldr x1, [x26, 2544] ++ ldr x0, [x26, 2616] ++ add x1, x1, x2 ++ ldr x2, [x26, 2624] ++ str x0, [x1, 8] ++ ldrh w0, [x26, 2356] ++ mul w0, w0, w21 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ sdiv w0, w0, w7 ++ add x0, x2, w0, sxtw 2 ++ str x0, [x1, 16] ++.L1602: ++ add w5, w5, 1 ++ and w5, w5, 65535 ++ b .L1600 ++.L1611: ++ mov w19, 0 ++ b .L1588 ++ .size FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock ++ .align 2 ++ .global FtlFreeSysBLkSort ++ .type FtlFreeSysBLkSort, %function ++FtlFreeSysBLkSort: ++ adrp x0, .LANCHOR2 ++ add x1, x0, :lo12:.LANCHOR2 ++ add x1, x1, 2992 ++ ldrh w2, [x1, 6] ++ cbz w2, .L1633 ++ adrp x2, .LANCHOR4+724 ++ ldrh w3, [x1, 2] ++ mov w6, 0 ++ mov w4, 0 ++ ldrh w5, [x2, #:lo12:.LANCHOR4+724] ++ ldrh w2, [x1, 4] ++ and w5, w5, 31 ++.L1635: ++ cmp w5, w4 ++ bgt .L1636 ++ cbz w6, .L1633 ++ add x0, x0, :lo12:.LANCHOR2 ++ strh w3, [x0, 2994] ++ strh w2, [x0, 2996] ++.L1633: ++ ret ++.L1636: ++ add x6, x1, w3, sxtw 1 ++ add w4, w4, 1 ++ add w3, w3, 1 ++ and w4, w4, 65535 ++ and w3, w3, 1023 ++ ldrh w7, [x6, 8] ++ add x6, x1, w2, sxtw 1 ++ strh w7, [x6, 8] ++ mov w6, 1 ++ add w2, w2, w6 ++ and w2, w2, 1023 ++ b .L1635 ++ .size FtlFreeSysBLkSort, .-FtlFreeSysBLkSort ++ .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 ++ add x19, x19, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ str x23, [sp, 48] ++ mov x21, x19 ++ add x23, x19, 2992 ++.L1643: ++ ldrh w2, [x19, 2998] ++ add x1, x19, 2992 ++ cbz w2, .L1644 ++ ldrh w0, [x19, 2994] ++ sub w2, w2, #1 ++ strh w2, [x19, 2998] ++ add x3, x1, w0, sxtw 1 ++ add w0, w0, 1 ++ and w0, w0, 1023 ++ strh w0, [x19, 2994] ++ ldr w0, [x19, 2928] ++ ldrh w20, [x3, 8] ++ cbnz w0, .L1645 ++ mov w0, w20 ++ bl P2V_block_in_plane ++ and w22, w0, 65535 ++ ldr x0, [x19, 2544] ++ lsl w1, w20, 10 ++ str w1, [x0, 4] ++ ldrb w0, [x19, 1220] ++ cbz w0, .L1646 ++ ldr x0, [x19, 2544] ++ mov w2, 1 ++ mov w1, 0 ++ bl FlashEraseBlocks ++.L1646: ++ ldr x0, [x21, 2544] ++ mov w2, 1 ++ mov w1, w2 ++ bl FlashEraseBlocks ++ ldr x2, [x21, 2696] ++ ubfiz x0, x22, 1, 16 ++ ldrh w1, [x2, x0] ++ add w1, w1, 1 ++ strh w1, [x2, x0] ++ ldr w0, [x21, 2436] ++ add w0, w0, 1 ++ str w0, [x21, 2436] ++.L1645: ++ sub w0, w20, #1 ++ mov w1, 65533 ++ cmp w1, w0, uxth ++ bcs .L1648 ++ ldrh w2, [x23, 6] ++ mov w1, w20 ++ adrp x0, .LC37 ++ add x0, x0, :lo12:.LC37 ++ bl printk ++ b .L1643 ++.L1644: ++ adrp x0, .LC36 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC36 ++ bl printk ++.L1647: ++ b .L1647 ++.L1648: ++ mov w0, w20 ++ ldr x23, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut ++ .align 2 ++ .global test_node_in_list ++ .type test_node_in_list, %function ++test_node_in_list: ++ ldr x2, [x0] ++ adrp x0, .LANCHOR2+2808 ++ mov x4, -6148914691236517206 ++ and w1, w1, 65535 ++ ldr x3, [x0, #:lo12:.LANCHOR2+2808] ++ movk x4, 0xaaab, lsl 0 ++ mov w5, 65535 ++ sub x0, x2, x3 ++ asr x0, x0, 1 ++ mul x0, x0, x4 ++ mov w4, 6 ++ and w0, w0, 65535 ++.L1655: ++ cmp w0, w1 ++ beq .L1656 ++ ldrh w0, [x2] ++ cmp w0, w5 ++ beq .L1657 ++ umaddl x2, w0, w4, x3 ++ b .L1655 ++.L1656: ++ mov w0, 1 ++ ret ++.L1657: ++ mov w0, 0 ++ ret ++ .size test_node_in_list, .-test_node_in_list ++ .align 2 ++ .global insert_data_list ++ .type insert_data_list, %function ++insert_data_list: ++ adrp x11, .LANCHOR2 ++ add x3, x11, :lo12:.LANCHOR2 ++ and w0, w0, 65535 ++ ldrh w1, [x3, 2284] ++ cmp w1, w0 ++ bls .L1674 ++ mov w8, 6 ++ ldr x13, [x3, 2808] ++ mov w1, -1 ++ adrp x2, .LANCHOR4 ++ umull x12, w0, w8 ++ add x4, x2, :lo12:.LANCHOR4 ++ mov x5, x2 ++ add x6, x13, x12 ++ strh w1, [x6, 2] ++ strh w1, [x13, x12] ++ ldr x1, [x4, 744] ++ cbnz x1, .L1661 ++ str x6, [x4, 744] ++.L1674: ++ mov w0, 0 ++ ret ++.L1661: ++ stp x29, x30, [sp, -32]! ++ ubfiz x9, x0, 1, 16 ++ mov w10, -1 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ mov w19, 65535 ++ ldr x15, [x3, 2712] ++ ldrh w2, [x6, 4] ++ ldr x14, [x3, 2808] ++ cmp w2, 0 ++ ldr x16, [x3, 2696] ++ ldrh w7, [x15, x9] ++ sub x4, x1, x14 ++ asr x4, x4, 1 ++ add x9, x16, x9 ++ ldrh w30, [x3, 2284] ++ mov w3, 0 ++ mul w7, w7, w2 ++ mov x2, -6148914691236517206 ++ movk x2, 0xaaab, lsl 0 ++ csel w7, w7, w10, ne ++ mul x4, x4, x2 ++ and w2, w4, 65535 ++.L1669: ++ add w3, w3, 1 ++ and w3, w3, 65535 ++ cmp w3, w30 ++ bhi .L1660 ++ cmp w0, w2 ++ beq .L1660 ++ ubfiz x17, x2, 1, 16 ++ ldrh w18, [x1, 4] ++ cmp w18, 0 ++ ldrh w4, [x15, x17] ++ mul w4, w4, w18 ++ csel w4, w4, w10, ne ++ cmp w7, w4 ++ bne .L1665 ++ ldrh w17, [x16, x17] ++ ldrh w4, [x9] ++ cmp w17, w4 ++ bcc .L1667 ++.L1666: ++ strh w2, [x13, x12] ++ ldrh w2, [x1, 2] ++ strh w2, [x6, 2] ++ add x2, x5, :lo12:.LANCHOR4 ++ ldr x3, [x2, 744] ++ cmp x1, x3 ++ bne .L1670 ++ strh w0, [x1, 2] ++ str x6, [x2, 744] ++ b .L1660 ++.L1665: ++ bcc .L1666 ++.L1667: ++ ldrh w4, [x1] ++ cmp w4, w19 ++ bne .L1668 ++ strh w2, [x6, 2] ++ add x2, x5, :lo12:.LANCHOR4 ++ strh w0, [x1] ++ str x6, [x2, 752] ++.L1660: ++ mov w0, 0 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L1668: ++ umaddl x1, w4, w8, x14 ++ mov w2, w4 ++ b .L1669 ++.L1670: ++ ldrh w2, [x1, 2] ++ add x3, x11, :lo12:.LANCHOR2 ++ mov w4, 6 ++ ldr x3, [x3, 2808] ++ umull x2, w2, w4 ++ strh w0, [x3, x2] ++ strh w0, [x1, 2] ++ b .L1660 ++ .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, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldrh w1, [x0, 760] ++ add w1, w1, 1 ++ strh w1, [x0, 760] ++ 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: ++ and w0, w0, 65535 ++ mov w7, 65535 ++ cmp w0, w7 ++ beq .L1679 ++ adrp x3, .LANCHOR2 ++ add x10, x3, :lo12:.LANCHOR2 ++ mov w6, 6 ++ mov w1, -1 ++ adrp x2, .LANCHOR4 ++ add x11, x2, :lo12:.LANCHOR4 ++ ldr x9, [x10, 2808] ++ umull x8, w0, w6 ++ mov x4, x3 ++ mov x3, x2 ++ add x5, x9, x8 ++ strh w1, [x5, 2] ++ strh w1, [x9, x8] ++ ldr x1, [x11, 768] ++ cbnz x1, .L1680 ++ str x5, [x11, 768] ++.L1679: ++ mov w0, 0 ++ ret ++.L1680: ++ ldr x12, [x10, 2696] ++ ubfiz x2, x0, 1, 16 ++ ldr x11, [x10, 2808] ++ mov x10, -6148914691236517206 ++ movk x10, 0xaaab, lsl 0 ++ ldrh w13, [x12, x2] ++ sub x2, x1, x11 ++ asr x2, x2, 1 ++ mul x2, x2, x10 ++ and w2, w2, 65535 ++.L1683: ++ ubfiz x10, x2, 1, 16 ++ ldrh w10, [x12, x10] ++ cmp w10, w13 ++ bcs .L1681 ++ ldrh w10, [x1] ++ cmp w10, w7 ++ bne .L1682 ++ strh w2, [x5, 2] ++ strh w0, [x1] ++ b .L1679 ++.L1682: ++ umaddl x1, w10, w6, x11 ++ mov w2, w10 ++ b .L1683 ++.L1681: ++ ldrh w6, [x1, 2] ++ strh w6, [x5, 2] ++ strh w2, [x9, x8] ++ add x2, x3, :lo12:.LANCHOR4 ++ ldr x3, [x2, 768] ++ cmp x1, x3 ++ bne .L1684 ++ strh w0, [x1, 2] ++ str x5, [x2, 768] ++ b .L1679 ++.L1684: ++ ldrh w2, [x1, 2] ++ add x3, x4, :lo12:.LANCHOR2 ++ mov w4, 6 ++ ldr x3, [x3, 2808] ++ umull x2, w2, w4 ++ strh w0, [x3, x2] ++ strh w0, [x1, 2] ++ b .L1679 ++ .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, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldrh w1, [x0, 776] ++ add w1, w1, 1 ++ strh w1, [x0, 776] ++ 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: ++ and w1, w1, 65535 ++ adrp x6, .LANCHOR2 ++ add x6, x6, :lo12:.LANCHOR2 ++ mov w4, 6 ++ ldr x2, [x0] ++ mov w7, 65535 ++ umull x1, w1, w4 ++ ldr x3, [x6, 2808] ++ add x5, x3, x1 ++ cmp x5, x2 ++ ldrh w2, [x3, x1] ++ bne .L1688 ++ cmp w2, w7 ++ bne .L1689 ++ str xzr, [x0] ++.L1690: ++ mov w0, -1 ++ strh w0, [x3, x1] ++ strh w0, [x5, 2] ++ mov w0, 0 ++ ret ++.L1689: ++ umaddl x2, w2, w4, x3 ++ str x2, [x0] ++ mov w0, -1 ++ strh w0, [x2, 2] ++ b .L1690 ++.L1688: ++ cmp w2, w7 ++ ldrh w0, [x5, 2] ++ bne .L1691 ++ cmp w0, w2 ++ beq .L1690 ++ umull x2, w0, w4 ++ mov w0, -1 ++ strh w0, [x3, x2] ++ b .L1690 ++.L1691: ++ umaddl x2, w2, w4, x3 ++ strh w0, [x2, 2] ++ ldrh w2, [x5, 2] ++ ldr x0, [x6, 2808] ++ ldrh w7, [x3, x1] ++ umull x2, w2, w4 ++ strh w7, [x0, x2] ++ b .L1690 ++ .size List_remove_node, .-List_remove_node ++ .align 2 ++ .global List_pop_index_node ++ .type List_pop_index_node, %function ++List_pop_index_node: ++ ldr x2, [x0] ++ cbz x2, .L1698 ++ stp x29, x30, [sp, -16]! ++ adrp x3, .LANCHOR2+2808 ++ and w1, w1, 65535 ++ mov w4, 65535 ++ add x29, sp, 0 ++ ldr x8, [x3, #:lo12:.LANCHOR2+2808] ++ mov w5, 6 ++.L1694: ++ cbnz w1, .L1695 ++.L1697: ++ sub x8, x2, x8 ++ mov x2, -6148914691236517206 ++ asr x8, x8, 1 ++ movk x2, 0xaaab, lsl 0 ++ mul x8, x8, x2 ++ and w8, w8, 65535 ++ mov w1, w8 ++ bl List_remove_node ++ mov w0, w8 ++ ldp x29, x30, [sp], 16 ++ ret ++.L1695: ++ ldrh w3, [x2] ++ cmp w3, w4 ++ beq .L1697 ++ sub w1, w1, #1 ++ umaddl x2, w3, w5, x8 ++ and w1, w1, 65535 ++ b .L1694 ++.L1698: ++ mov w0, 65535 ++ 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: ++ and w2, w0, 65535 ++ adrp x0, .LANCHOR4+744 ++ ldr x1, [x0, #:lo12:.LANCHOR4+744] ++ cbz x1, .L1708 ++ adrp x0, .LANCHOR2+2808 ++ mov w4, 6 ++ ldr x3, [x0, #:lo12:.LANCHOR2+2808] ++ mov w0, 65535 ++.L1705: ++ cbz w2, .L1706 ++ ldrh w1, [x1] ++ cmp w1, w0 ++ bne .L1707 ++ ret ++.L1707: ++ sub w2, w2, #1 ++ umaddl x1, w1, w4, x3 ++ and w2, w2, 65535 ++ b .L1705 ++.L1708: ++ mov w0, 65535 ++ ret ++.L1706: ++ sub x0, x1, x3 ++ mov x1, -6148914691236517206 ++ asr x0, x0, 1 ++ movk x1, 0xaaab, lsl 0 ++ mul x0, x0, x1 ++ and w0, w0, 65535 ++ 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: ++ adrp x8, .LANCHOR4 ++ add x2, x8, :lo12:.LANCHOR4 ++ and w9, w0, 65535 ++ ldrh w0, [x2, 784] ++ cmp w0, w9 ++ beq .L1717 ++ ldrh w0, [x2, 832] ++ cmp w0, w9 ++ beq .L1717 ++ ldrh w0, [x2, 880] ++ cmp w0, w9 ++ beq .L1717 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ mov w1, 6 ++ ldr x2, [x2, 744] ++ umull x1, w9, w1 ++ ldr x3, [x0, 2808] ++ add x4, x3, x1 ++ cmp x4, x2 ++ beq .L1717 ++ ldr x5, [x0, 2712] ++ ubfiz x0, x9, 1, 16 ++ ldrh w2, [x5, x0] ++ ldrh w0, [x4, 4] ++ cmp w0, 0 ++ mul w2, w2, w0 ++ ldrh w0, [x4, 2] ++ mov w4, 65535 ++ csinv w2, w2, wzr, ne ++ cmp w0, w4 ++ bne .L1712 ++ ldrh w1, [x3, x1] ++ cmp w1, w0 ++ beq .L1717 ++.L1712: ++ mov w1, 6 ++ mov x4, -6148914691236517206 ++ movk x4, 0xaaab, lsl 0 ++ umull x0, w0, w1 ++ asr x1, x0, 1 ++ add x0, x3, x0 ++ mul x1, x1, x4 ++ ldrh w3, [x0, 4] ++ cmp w3, 0 ++ ldrh w1, [x5, x1, lsl 1] ++ mul w0, w1, w3 ++ csinv w0, w0, wzr, ne ++ cmp w2, w0 ++ bcs .L1717 ++ add x8, x8, :lo12:.LANCHOR4 ++ stp x29, x30, [sp, -16]! ++ mov w1, w9 ++ add x0, x8, 744 ++ add x29, sp, 0 ++ bl List_remove_node ++ ldrh w0, [x8, 760] ++ sub w0, w0, #1 ++ strh w0, [x8, 760] ++ mov w0, w9 ++ bl INSERT_DATA_LIST ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L1717: ++ mov w0, 0 ++ 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, -80]! ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ ldrh w2, [x0, 10] ++ ldp x21, x20, [x0, 32] ++ ldr x22, [x0, 16] ++ lsl w2, w2, 1 ++ mov x0, x21 ++ bl ftl_memset ++ mov w0, 0 ++.L1721: ++ ldrh w1, [x19, 6] ++ cmp w1, w0 ++ bhi .L1725 ++ adrp x0, .LANCHOR2+2346 ++ mov w23, 0 ++ mov w20, 0 ++ ldrh w1, [x0, #:lo12:.LANCHOR2+2346] ++ ldrh w0, [x19] ++ strh w1, [x21, x0, lsl 1] ++ ldrh w24, [x21] ++.L1726: ++ ldrh w0, [x19, 10] ++ cmp w0, w20 ++ bhi .L1730 ++ mov w0, w23 ++ 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 ++.L1725: ++ ubfiz x1, x0, 2, 16 ++ ldr w2, [x20, x1] ++ mov w1, 0 ++ ubfx x2, x2, 10, 16 ++.L1722: ++ ldrh w3, [x19, 10] ++ cmp w3, w1 ++ bhi .L1724 ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ b .L1721 ++.L1724: ++ ubfiz x3, x1, 1, 16 ++ ldrh w4, [x22, x3] ++ cmp w4, w2 ++ bne .L1723 ++ cbz w2, .L1723 ++ ldrh w4, [x21, x3] ++ add w4, w4, 1 ++ strh w4, [x21, x3] ++.L1723: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L1722 ++.L1730: ++ ubfiz x0, x20, 1, 16 ++ ldrh w1, [x21, x0] ++ cmp w24, w1 ++ bls .L1727 ++ add x25, x22, x0 ++ ldrh w0, [x22, x0] ++ cbnz w0, .L1728 ++.L1729: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L1726 ++.L1727: ++ cbnz w1, .L1729 ++ add x25, x22, x0 ++ ldrh w0, [x22, x0] ++ cbz w0, .L1729 ++.L1731: ++ mov w1, 1 ++ bl FtlFreeSysBlkQueueIn ++ strh wzr, [x25] ++ ldrh w0, [x19, 8] ++ sub w0, w0, #1 ++ strh w0, [x19, 8] ++ b .L1729 ++.L1732: ++ mov w24, 0 ++ b .L1731 ++.L1728: ++ mov w23, w20 ++ cbz w1, .L1732 ++ mov w24, w1 ++ b .L1729 ++ .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] ++ mov w20, 0 ++ str x21, [sp, 32] ++ ldrh w2, [x0, 10] ++ ldr x1, [x0, 16] ++.L1742: ++ cmp w20, w2 ++ beq .L1746 ++ mov x21, x1 ++ ldrh w3, [x1], 2 ++ cbnz w3, .L1743 ++ mov x19, x0 ++ bl FtlFreeSysBlkQueueOut ++ and w1, w0, 65535 ++ strh w0, [x21] ++ sub w2, w1, #1 ++ mov w0, 65533 ++ cmp w0, w2, uxth ++ bcs .L1744 ++ adrp x0, .LANCHOR2+2998 ++ ldrh w2, [x0, #:lo12:.LANCHOR2+2998] ++ adrp x0, .LC38 ++ add x0, x0, :lo12:.LC38 ++ bl printk ++.L1745: ++ b .L1745 ++.L1744: ++ ldr w0, [x19, 48] ++ strh wzr, [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] ++.L1746: ++ mov w0, 0 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L1743: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L1742 ++ .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] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ mov w22, 0 ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR2 ++ stp x25, x26, [sp, 64] ++ adrp x24, .LANCHOR0 ++ stp x27, x28, [sp, 80] ++ mov w26, w1 ++ mov x27, x2 ++ mov x21, x23 ++ add x20, x23, :lo12:.LANCHOR2 ++ add x24, x24, :lo12:.LANCHOR0 ++.L1750: ++ add x0, x23, :lo12:.LANCHOR2 ++ ldr w1, [x0, 2420] ++ add w1, w1, 1 ++ str w1, [x0, 2420] ++ ldrh w0, [x0, 2346] ++ ldrh w1, [x19, 2] ++ sub w0, w0, #1 ++ cmp w1, w0 ++ bge .L1751 ++ ldrh w1, [x19] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L1752 ++.L1751: ++ mov x0, x19 ++ bl Ftl_write_map_blk_to_last_page ++.L1752: ++ ldr w0, [x20, 2928] ++ cbnz w0, .L1765 ++ ldrh w1, [x19] ++ mov w2, 16 ++ ldr x0, [x19, 16] ++ ldrh w25, [x0, x1, lsl 1] ++ mov w1, 0 ++ ldrh w0, [x19, 2] ++ str x27, [x20, 2944] ++ orr w0, w0, w25, lsl 10 ++ str w0, [x20, 2940] ++ ldr x0, [x20, 2640] ++ str x0, [x20, 2952] ++ bl ftl_memset ++ ldr x6, [x20, 2952] ++ ldr w0, [x19, 48] ++ str w0, [x6, 4] ++ strh w26, [x6, 8] ++ ldrh w0, [x19, 4] ++ strh w0, [x6] ++ strh w25, [x6, 2] ++ ldrb w0, [x24, 88] ++ cbz w0, .L1754 ++ ldr x0, [x20, 2944] ++ ldrh w1, [x20, 2354] ++ bl js_hash ++ str w0, [x6, 12] ++.L1754: ++ add x28, x20, 2936 ++ mov w3, 1 ++ mov x0, x28 ++ mov w1, w3 ++ mov w2, w3 ++ bl FlashProgPages ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ strh w0, [x19, 2] ++ ldr w1, [x20, 2936] ++ cmn w1, #1 ++ bne .L1755 ++ ldr w1, [x20, 2940] ++ adrp x0, .LC39 ++ add x0, x0, :lo12:.LC39 ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ bl printk ++ ldrh w0, [x19, 2] ++ cmp w0, 2 ++ bhi .L1756 ++ ldrh w0, [x20, 2346] ++ sub w0, w0, #1 ++ strh w0, [x19, 2] ++.L1756: ++ cmp w22, 3 ++ bls .L1750 ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w2, w22 ++ adrp x0, .LC40 ++ add x0, x0, :lo12:.LC40 ++ ldr w1, [x21, 2940] ++ bl printk ++ mov w0, 1 ++ str w0, [x21, 2928] ++.L1765: ++ 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 ++.L1755: ++ cbz w1, .L1758 ++ strh w25, [x19, 60] ++ cmp w0, 1 ++ bne .L1759 ++.L1760: ++ str wzr, [x19, 56] ++ b .L1750 ++.L1759: ++ cmp w1, 256 ++.L1773: ++ beq .L1760 ++ ldr w0, [x19, 56] ++ cbnz w0, .L1760 ++ add x21, x21, :lo12:.LANCHOR2 ++ ldr x0, [x19, 40] ++ ldr w1, [x21, 2940] ++ str w1, [x0, w26, uxtw 2] ++ b .L1765 ++.L1758: ++ cmp w0, 1 ++ b .L1773 ++ .size FtlMapWritePage, .-FtlMapWritePage ++ .align 2 ++ .global ftl_map_blk_gc ++ .type ftl_map_blk_gc, %function ++ftl_map_blk_gc: ++ stp x29, x30, [sp, -96]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ adrp x20, .LANCHOR2 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ str x27, [sp, 80] ++ ldr x21, [x0, 16] ++ ldr x25, [x0, 40] ++ bl ftl_free_no_use_map_blk ++ ldrh w1, [x19, 10] ++ ldrh w2, [x19, 8] ++ sub w1, w1, #4 ++ cmp w2, w1 ++ blt .L1775 ++ ubfiz x0, x0, 1, 16 ++ ldrh w24, [x21, x0] ++ cbz w24, .L1775 ++ ldr w1, [x19, 52] ++ cbnz w1, .L1775 ++ mov w1, 1 ++ str w1, [x19, 52] ++ strh wzr, [x21, x0] ++ ldrh w0, [x19, 8] ++ ldrh w1, [x19, 2] ++ sub w0, w0, #1 ++ strh w0, [x19, 8] ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 2346] ++ cmp w1, w0 ++ bcc .L1776 ++ mov x0, x19 ++ bl ftl_map_blk_alloc_new_blk ++.L1776: ++ add x26, x20, :lo12:.LANCHOR2 ++ mov w21, 0 ++ add x22, x26, 2936 ++.L1777: ++ ldrh w0, [x19, 6] ++ cmp w0, w21 ++ bhi .L1782 ++ mov w1, 1 ++ mov w0, w24 ++ bl FtlFreeSysBlkQueueIn ++ str wzr, [x19, 52] ++.L1775: ++ add x20, x20, :lo12:.LANCHOR2 ++ ldrh w1, [x19, 2] ++ ldrh w0, [x20, 2346] ++ cmp w1, w0 ++ bcc .L1780 ++ mov x0, x19 ++ bl ftl_map_blk_alloc_new_blk ++ b .L1780 ++.L1782: ++ ubfiz x0, x21, 2, 16 ++ add x27, x25, x0 ++ ldr w1, [x25, x0] ++ cmp w24, w1, lsr 10 ++ bne .L1778 ++ ldr x1, [x26, 2584] ++ mov w2, 1 ++ ldr x23, [x26, 2640] ++ stp x1, x23, [x22, 8] ++ mov w1, w2 ++ ldr w0, [x25, x0] ++ str w0, [x22, 4] ++ mov x0, x22 ++ bl FlashReadPages ++ ldr w0, [x22] ++ cmn w0, #1 ++ bne .L1779 ++.L1781: ++ add x20, x20, :lo12:.LANCHOR2 ++ str wzr, [x27] ++ adrp x0, .LC41 ++ add x0, x0, :lo12:.LC41 ++ ldrh w2, [x23, 8] ++ ldr w1, [x20, 2940] ++ bl printk ++ mov w0, 1 ++ str w0, [x20, 2928] ++.L1780: ++ 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 ++.L1779: ++ ldrh w0, [x23, 8] ++ cmp w0, w21 ++ bne .L1781 ++ ldrh w1, [x23] ++ ldrh w0, [x19, 4] ++ cmp w1, w0 ++ bne .L1781 ++ ldr x2, [x22, 8] ++ mov w1, w21 ++ mov x0, x19 ++ bl FtlMapWritePage ++.L1778: ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ b .L1777 ++ .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 x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x20, x21, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ ldr w1, [x20, 2928] ++ cbnz w1, .L1788 ++ mov x19, x0 ++ ldrh w0, [x0] ++ mov w1, 65535 ++ cmp w0, w1 ++ ldr x22, [x19, 16] ++ bne .L1789 ++ ldrh w0, [x19, 8] ++ add w0, w0, 1 ++ strh w0, [x19, 8] ++ bl FtlFreeSysBlkQueueOut ++ strh w0, [x22] ++ strh wzr, [x19, 2] ++ ldr w0, [x19, 48] ++ strh wzr, [x19] ++ add w0, w0, 1 ++ str w0, [x19, 48] ++.L1788: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L1789: ++ ubfiz x0, x0, 1, 16 ++ ldrh w1, [x19, 2] ++ ldr x24, [x19, 40] ++ ldrh w23, [x22, x0] ++ ldr x22, [x20, 2640] ++ ldr w0, [x19, 48] ++ orr w1, w1, w23, lsl 10 ++ str w1, [x20, 2940] ++ ldr x1, [x20, 2576] ++ str x1, [x20, 2944] ++ str x22, [x20, 2952] ++ mov w1, 255 ++ str w0, [x22, 4] ++ mov w0, -1291 ++ strh w0, [x22, 8] ++ ldrh w0, [x19, 4] ++ strh w0, [x22] ++ strh w23, [x22, 2] ++ ldrh w2, [x20, 2346] ++ ldr x0, [x20, 2576] ++ lsl w2, w2, 3 ++ bl ftl_memset ++ mov w1, 0 ++ mov w0, 0 ++.L1790: ++ ldrh w2, [x19, 6] ++ cmp w2, w0 ++ bhi .L1792 ++ adrp x0, .LANCHOR0+88 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+88] ++ cbz w0, .L1793 ++ add x0, x21, :lo12:.LANCHOR2 ++ ldrh w1, [x0, 2354] ++ ldr x0, [x0, 2944] ++ bl js_hash ++ str w0, [x22, 12] ++.L1793: ++ add x0, x21, :lo12:.LANCHOR2 ++ mov w2, 1 ++ mov w3, 0 ++ mov w1, w2 ++ add x0, x0, 2936 ++ bl FlashProgPages ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++ mov x0, x19 ++ bl ftl_map_blk_gc ++ b .L1788 ++.L1792: ++ ubfiz x2, x0, 2, 16 ++ ldr w3, [x24, x2] ++ cmp w23, w3, lsr 10 ++ bne .L1791 ++ add w1, w1, 1 ++ ldr x4, [x20, 2576] ++ and w1, w1, 65535 ++ ubfiz x3, x1, 3, 16 ++ str w0, [x4, x3] ++ ldr w4, [x24, x2] ++ ldr x2, [x20, 2576] ++ add x2, x2, x3 ++ str w4, [x2, 4] ++.L1791: ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ b .L1790 ++ .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 x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ ubfiz x20, x0, 4, 16 ++ ldr x0, [x19, 2792] ++ add x1, x0, x20 ++ ldr x2, [x1, 8] ++ ldrh w1, [x0, x20] ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x0, x0, 928 ++ bl FtlMapWritePage ++ ldr x0, [x19, 2792] ++ add x0, x0, x20 ++ ldr w1, [x0, 4] ++ and w1, w1, 2147483647 ++ str w1, [x0, 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 ++ add x0, x0, :lo12:.LANCHOR2 ++ mov x3, 0 ++ mov w4, 65535 ++ ldrh w2, [x0, 2382] ++ ldr x1, [x0, 2792] ++.L1801: ++ and w0, w3, 65535 ++ cmp w0, w2 ++ bcc .L1803 ++ add x4, x1, 4 ++ mov w0, w2 ++ mov w6, -2147483648 ++ mov w3, 0 ++.L1804: ++ cmp w3, w2 ++ bne .L1806 ++ cmp w0, w2 ++ bcc .L1802 ++ adrp x0, .LANCHOR4+992 ++ mov w4, -1 ++ mov w3, 0 ++ ldrh w5, [x0, #:lo12:.LANCHOR4+992] ++ mov w0, w2 ++.L1807: ++ cmp w3, w2 ++ beq .L1802 ++ ldr w7, [x1, 4] ++ cmp w4, w7 ++ bls .L1808 ++ ldrh w6, [x1] ++ cmp w6, w5 ++ csel w4, w4, w7, eq ++ csel w0, w0, w3, eq ++.L1808: ++ add w3, w3, 1 ++ add x1, x1, 16 ++ and w3, w3, 65535 ++ b .L1807 ++.L1803: ++ add x3, x3, 1 ++ add x5, x1, x3, lsl 4 ++ ldrh w5, [x5, -16] ++ cmp w5, w4 ++ bne .L1801 ++.L1802: ++ ret ++.L1806: ++ ldr w5, [x4] ++ tbnz w5, #31, .L1805 ++ cmp w6, w5 ++ bls .L1805 ++ mov w6, w5 ++ mov w0, w3 ++.L1805: ++ add w3, w3, 1 ++ add x4, x4, 16 ++ and w3, w3, 65535 ++ b .L1804 ++ .size select_l2p_ram_region, .-select_l2p_ram_region ++ .align 2 ++ .global log2phys ++ .type log2phys, %function ++log2phys: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x3, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr w4, [x3, 2924] ++ cmp w0, w4 ++ bcs .L1811 ++ mov w25, w0 ++ ldrh w0, [x3, 2352] ++ mov x23, x1 ++ ldr x8, [x3, 2792] ++ add w27, w0, 7 ++ ldrh w1, [x3, 2382] ++ mov x0, 0 ++ str w2, [x29, 108] ++ lsr w28, w25, w27 ++ and w22, w28, 65535 ++.L1812: ++ and x20, x0, 65535 ++ cmp w20, w1 ++ bcc .L1817 ++ bl select_l2p_ram_region ++ and x20, x0, 65535 ++ ubfiz x26, x20, 4, 16 ++ mov w2, 65535 ++ add x1, x8, x26 ++ ldrh w3, [x8, x26] ++ cmp w3, w2 ++ beq .L1818 ++ ldr w1, [x1, 4] ++ tbz w1, #31, .L1818 ++ bl flush_l2p_region ++.L1818: ++ add x19, x21, :lo12:.LANCHOR2 ++ ubfiz x0, x22, 2, 16 ++ ldr x1, [x19, 2768] ++ ldr w3, [x1, x0] ++ cbnz w3, .L1819 ++ ldr x0, [x19, 2792] ++ mov w1, 255 ++ ldrh w2, [x19, 2354] ++ add x0, x0, x26 ++ ldr x0, [x0, 8] ++ bl ftl_memset ++ ldr x0, [x19, 2792] ++ strh w22, [x0, x26] ++ ldr x0, [x19, 2792] ++ add x26, x0, x26 ++ str wzr, [x26, 4] ++ b .L1814 ++.L1811: ++ mov w0, -1 ++ cbnz w2, .L1810 ++ str w0, [x1] ++.L1810: ++ 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 ++.L1817: ++ add x0, x0, 1 ++ add x2, x8, x0, lsl 4 ++ ldrh w2, [x2, -16] ++ cmp w2, w22 ++ bne .L1812 ++.L1814: ++ ldr w1, [x29, 108] ++ mov x0, 1 ++ lsl x0, x0, x27 ++ sub w0, w0, #1 ++ and w0, w0, w25 ++ and x0, x0, 65535 ++ cbnz w1, .L1815 ++ add x1, x21, :lo12:.LANCHOR2 ++ ldr x1, [x1, 2792] ++ add x1, x1, x20, lsl 4 ++ ldr x1, [x1, 8] ++ ldr w0, [x1, x0, lsl 2] ++ str w0, [x23] ++.L1816: ++ add x21, x21, :lo12:.LANCHOR2 ++ ldr x0, [x21, 2792] ++ add x20, x0, x20, lsl 4 ++ ldr w0, [x20, 4] ++ cmn w0, #1 ++ beq .L1823 ++ add w0, w0, 1 ++ str w0, [x20, 4] ++.L1823: ++ mov w0, 0 ++ b .L1810 ++.L1815: ++ add x3, x21, :lo12:.LANCHOR2 ++ lsl x1, x20, 4 ++ ldr w4, [x23] ++ ldr x2, [x3, 2792] ++ add x2, x2, x1 ++ ldr x2, [x2, 8] ++ str w4, [x2, x0, lsl 2] ++ ldr x0, [x3, 2792] ++ add x0, x0, x1 ++ ldr w1, [x0, 4] ++ orr w1, w1, -2147483648 ++ str w1, [x0, 4] ++ adrp x0, .LANCHOR4+992 ++ strh w22, [x0, #:lo12:.LANCHOR4+992] ++ b .L1816 ++.L1819: ++ ldr x0, [x19, 2792] ++ add x24, x19, 2936 ++ mov w2, 1 ++ str w3, [x19, 2940] ++ add x0, x0, x26 ++ str w3, [x29, 104] ++ mov w1, w2 ++ ldr x0, [x0, 8] ++ str x0, [x19, 2944] ++ ldr x0, [x19, 2640] ++ str x0, [x19, 2952] ++ mov x0, x24 ++ bl FlashReadPages ++ ldr x0, [x19, 2952] ++ ldr w3, [x29, 104] ++ ldrh w0, [x0, 8] ++ cmp w0, w22 ++ beq .L1820 ++ mov w2, w3 ++ and w1, w28, 65535 ++ adrp x0, .LC42 ++ add x0, x0, :lo12:.LC42 ++ bl printk ++ ldr x1, [x19, 2952] ++ mov w3, 4 ++ adrp x0, .LC18 ++ mov w2, w3 ++ add x0, x0, :lo12:.LC18 ++ bl rknand_print_hex ++ ldrh w3, [x19, 2380] ++ mov w2, 4 ++ ldr x1, [x19, 2768] ++ adrp x0, .LC43 ++ add x0, x0, :lo12:.LC43 ++ bl rknand_print_hex ++ mov w0, 1 ++ str w0, [x19, 2928] ++.L1821: ++ add x1, x21, :lo12:.LANCHOR2 ++ ldr x0, [x1, 2792] ++ add x0, x0, x26 ++ str wzr, [x0, 4] ++ ldr x0, [x1, 2792] ++ strh w22, [x0, x26] ++ b .L1814 ++.L1820: ++ ldr w0, [x19, 2936] ++ cmp w0, 256 ++ bne .L1821 ++ and w28, w28, 65535 ++ mov w2, w3 ++ mov w1, w28 ++ adrp x0, .LC44 ++ add x0, x0, :lo12:.LC44 ++ bl printk ++ ldr x0, [x19, 2792] ++ mov w1, w28 ++ add x0, x0, x26 ++ ldr x2, [x0, 8] ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x0, x0, 928 ++ bl FtlMapWritePage ++ b .L1821 ++ .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 x23, x24, [sp, 48] ++ mov w22, w1 ++ mov w24, w0 ++ add w1, w0, w1 ++ stp x25, x26, [sp, 64] ++ ldrh w0, [x19, 2340] ++ stp x27, x28, [sp, 80] ++ cmp w1, w0 ++ bhi .L1834 ++ ldrh w23, [x19, 2352] ++ adrp x27, .LANCHOR4 ++ add x27, x27, :lo12:.LANCHOR4 ++ mov x25, x2 ++ add x27, x27, 1000 ++ mov w26, 0 ++ lsr w23, w24, w23 ++.L1828: ++ cbnz w22, .L1833 ++.L1826: ++ 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], 160 ++ ret ++.L1833: ++ ldrh w1, [x19, 2350] ++ ldr x0, [x19, 2760] ++ udiv w21, w24, w1 ++ ldr w2, [x0, w23, uxtw 2] ++ and w0, w22, 65535 ++ msub w21, w21, w1, w24 ++ sub w20, w1, w21 ++ and w20, w20, 65535 ++ cmp w22, w20 ++ csel w20, w0, w20, cc ++ cbz w2, .L1830 ++ cmp w20, w1 ++ beq .L1830 ++ ldr x0, [x19, 2592] ++ str w2, [x29, 108] ++ mov w2, 1 ++ stp x0, xzr, [x29, 112] ++ mov w1, w2 ++ add x0, x29, 104 ++ bl FlashReadPages ++.L1831: ++ ldr x0, [x19, 2592] ++ lsl w21, w21, 9 ++ lsl w28, w20, 9 ++ asr w21, w21, 2 ++ mov x1, x25 ++ mov w2, w28 ++ add x0, x0, w21, sxtw 2 ++ bl ftl_memcpy ++ ldr x2, [x19, 2592] ++ mov w1, w23 ++ mov x0, x27 ++ sub w22, w22, w20 ++ add w24, w24, w20 ++ add x25, x25, w28, sxtw ++ add w23, w23, 1 ++ bl FtlMapWritePage ++ cmn w0, #1 ++ csinv w26, w26, wzr, ne ++ b .L1828 ++.L1830: ++ ldrh w2, [x19, 2354] ++ mov w1, 0 ++ ldr x0, [x19, 2592] ++ bl ftl_memset ++ b .L1831 ++.L1834: ++ mov w26, -1 ++ b .L1826 ++ .size FtlVendorPartWrite, .-FtlVendorPartWrite ++ .align 2 ++ .global FtlVendorPartRead ++ .type FtlVendorPartRead, %function ++FtlVendorPartRead: ++ stp x29, x30, [sp, -176]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ stp x21, x22, [sp, 32] ++ mov w24, w0 ++ mov w23, w1 ++ stp x25, x26, [sp, 64] ++ add w1, w0, w1 ++ stp x27, x28, [sp, 80] ++ ldrh w0, [x19, 2340] ++ cmp w1, w0 ++ bhi .L1848 ++ ldrh w22, [x19, 2352] ++ adrp x25, .LANCHOR4 ++ add x25, x25, :lo12:.LANCHOR4 ++ mov x27, x2 ++ add x25, x25, 1000 ++ mov w26, 0 ++ lsr w22, w24, w22 ++.L1841: ++ cbnz w23, .L1847 ++.L1839: ++ 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], 176 ++ ret ++.L1847: ++ ldrh w20, [x19, 2350] ++ ldr x0, [x19, 2760] ++ udiv w21, w24, w20 ++ ldr w3, [x0, w22, uxtw 2] ++ and w0, w23, 65535 ++ msub w21, w21, w20, w24 ++ sub w20, w20, w21 ++ and w20, w20, 65535 ++ cmp w23, w20 ++ csel w20, w0, w20, cc ++ lsl w28, w20, 9 ++ cbz w3, .L1843 ++ ldr x0, [x19, 2592] ++ mov w2, 1 ++ str w3, [x29, 108] ++ mov w1, w2 ++ str w3, [x29, 124] ++ stp x0, xzr, [x29, 128] ++ add x0, x29, 120 ++ bl FlashReadPages ++ ldr w0, [x29, 120] ++ ldr w3, [x29, 108] ++ cmn w0, #1 ++ ldr w0, [x19, 2936] ++ csinv w26, w26, wzr, ne ++ cmp w0, 256 ++ bne .L1845 ++ mov w2, w3 ++ mov w1, w22 ++ adrp x0, .LC45 ++ add x0, x0, :lo12:.LC45 ++ bl printk ++ ldr x2, [x19, 2592] ++ mov w1, w22 ++ mov x0, x25 ++ bl FtlMapWritePage ++.L1845: ++ ldr x1, [x19, 2592] ++ lsl w21, w21, 9 ++ asr w21, w21, 2 ++ mov w2, w28 ++ mov x0, x27 ++ add x1, x1, w21, sxtw 2 ++ bl ftl_memcpy ++.L1846: ++ add w22, w22, 1 ++ sub w23, w23, w20 ++ add w24, w24, w20 ++ add x27, x27, w28, sxtw ++ b .L1841 ++.L1843: ++ mov w2, w28 ++ mov w1, 0 ++ mov x0, x27 ++ bl ftl_memset ++ b .L1846 ++.L1848: ++ mov w26, -1 ++ b .L1839 ++ .size FtlVendorPartRead, .-FtlVendorPartRead ++ .align 2 ++ .global FtlUpdateVaildLpn ++ .type FtlUpdateVaildLpn, %function ++FtlUpdateVaildLpn: ++ adrp x1, .LANCHOR4 ++ add x3, x1, :lo12:.LANCHOR4 ++ ldrh w2, [x3, 1064] ++ cmp w2, 4 ++ bhi .L1851 ++ cbnz w0, .L1851 ++ add w2, w2, 1 ++ strh w2, [x3, 1064] ++ ret ++.L1851: ++ add x0, x1, :lo12:.LANCHOR4 ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ mov w6, 65535 ++ strh wzr, [x0, 1064] ++ ldrh w4, [x1, 2284] ++ ldr x5, [x1, 2712] ++ mov x1, 0 ++ str wzr, [x0, 1068] ++.L1852: ++ cmp w4, w1, uxth ++ bhi .L1854 ++ ret ++.L1854: ++ ldrh w3, [x5, x1, lsl 1] ++ cmp w3, w6 ++ beq .L1853 ++ ldr w2, [x0, 1068] ++ add w2, w2, w3 ++ str w2, [x0, 1068] ++.L1853: ++ add x1, x1, 1 ++ b .L1852 ++ .size FtlUpdateVaildLpn, .-FtlUpdateVaildLpn ++ .align 2 ++ .global FtlMapBlkWriteDumpData ++ .type FtlMapBlkWriteDumpData, %function ++FtlMapBlkWriteDumpData: ++ ldr w1, [x0, 56] ++ cbz w1, .L1863 ++ stp x29, x30, [sp, -48]! ++ adrp x2, .LANCHOR2 ++ add x1, x2, :lo12:.LANCHOR2 ++ add x29, sp, 0 ++ str x21, [sp, 32] ++ mov x21, x2 ++ stp x19, x20, [sp, 16] ++ str wzr, [x0, 56] ++ ldr w3, [x1, 2928] ++ ldrh w19, [x0, 6] ++ ldr x4, [x0, 40] ++ cbnz w3, .L1856 ++ mov x20, x0 ++ add x0, x1, 2936 ++ sub w19, w19, #1 ++ ldr x2, [x1, 2640] ++ and w19, w19, 65535 ++ ldr x3, [x1, 2584] ++ stp x3, x2, [x0, 8] ++ ubfiz x2, x19, 2, 16 ++ ldr w2, [x4, x2] ++ str w2, [x0, 4] ++ cbz w2, .L1860 ++ mov w2, 1 ++ mov w1, w2 ++ bl FlashReadPages ++.L1861: ++ add x0, x21, :lo12:.LANCHOR2 ++ mov w1, w19 ++ ldr x2, [x0, 2944] ++ mov x0, x20 ++ bl FtlMapWritePage ++.L1856: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L1860: ++ ldrh w2, [x1, 2354] ++ mov x0, x3 ++ mov w1, 255 ++ bl ftl_memset ++ b .L1861 ++.L1863: ++ ret ++ .size FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData ++ .align 2 ++ .global FtlVpcTblFlush ++ .type FtlVpcTblFlush, %function ++FtlVpcTblFlush: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR2 ++ add x19, x22, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ ldr w0, [x19, 2928] ++ cbnz w0, .L1868 ++ ldr x0, [x19, 2576] ++ adrp x25, .LANCHOR4 ++ str x0, [x19, 2944] ++ add x0, x25, :lo12:.LANCHOR4 ++ ldr x21, [x19, 2640] ++ add x20, x0, 696 ++ str x21, [x19, 2952] ++ adrp x23, .LANCHOR0 ++ ldrh w2, [x0, 1072] ++ strh w2, [x21, 2] ++ mov w2, -3932 ++ strh w2, [x21] ++ str wzr, [x21, 12] ++ ldr w2, [x0, 1080] ++ stp w2, wzr, [x21, 4] ++ mov w2, 19539 ++ movk w2, 0x4654, lsl 16 ++ str w2, [x0, 696] ++ mov w2, 99 ++ ldrb w3, [x0, 790] ++ movk w2, 0x5000, lsl 16 ++ str w2, [x20, 4] ++ ldrh w2, [x0, 784] ++ strh w2, [x20, 14] ++ ldrh w2, [x0, 786] ++ ldrh w1, [x0, 1078] ++ strh w1, [x20, 8] ++ orr w2, w3, w2, lsl 6 ++ ldrh w1, [x19, 2298] ++ strb w1, [x20, 10] ++ strh w2, [x20, 16] ++ ldrb w1, [x0, 792] ++ ldrh w2, [x0, 832] ++ ldrb w3, [x0, 838] ++ strb w1, [x20, 11] ++ strh w2, [x20, 18] ++ ldrb w1, [x0, 840] ++ ldrh w2, [x0, 834] ++ strb w1, [x20, 12] ++ add x1, x0, 880 ++ ldrh w0, [x0, 880] ++ orr w2, w3, w2, lsl 6 ++ strh w2, [x20, 20] ++ strh w0, [x20, 22] ++ ldrb w2, [x1, 6] ++ ldrh w0, [x1, 2] ++ orr w0, w2, w0, lsl 6 ++ strh w0, [x20, 24] ++ ldrb w0, [x1, 8] ++ mov w1, 255 ++ strb w0, [x20, 13] ++ ldr w0, [x19, 2428] ++ str w0, [x20, 32] ++ ldr w0, [x19, 2396] ++ str w0, [x20, 40] ++ ldr w0, [x19, 2400] ++ str w0, [x20, 36] ++ ldrh w0, [x19, 2472] ++ strh w0, [x20, 44] ++ ldrh w0, [x19, 2474] ++ strh w0, [x20, 46] ++ ldrh w2, [x19, 2354] ++ ldr x0, [x19, 2944] ++ bl ftl_memset ++ ldr x0, [x19, 2944] ++ mov x1, x20 ++ mov w2, 48 ++ mov x20, x25 ++ bl ftl_memcpy ++ ldr x1, [x19, 2712] ++ ldrh w2, [x19, 2284] ++ ldr x0, [x19, 2944] ++ lsl w2, w2, 1 ++ add x0, x0, 48 ++ bl ftl_memcpy ++ add x1, x23, :lo12:.LANCHOR0 ++ ldrh w0, [x19, 2284] ++ ldr x3, [x19, 2944] ++ ldr x1, [x1, 80] ++ lsr w2, w0, 3 ++ ubfiz x0, x0, 1, 16 ++ add w2, w2, 4 ++ add x0, x0, 51 ++ and x0, x0, -4 ++ add x0, x3, x0 ++ bl ftl_memcpy ++ ldrh w0, [x19, 2384] ++ cbz w0, .L1869 ++ ldrh w0, [x19, 2284] ++ ldr x3, [x19, 2944] ++ ldrh w2, [x19, 2380] ++ lsr w1, w0, 3 ++ add w0, w1, w0, lsl 1 ++ ldr x1, [x19, 2768] ++ add w0, w0, 52 ++ lsl w2, w2, 2 ++ and x0, x0, 65532 ++ add x0, x3, x0 ++ bl ftl_memcpy ++.L1869: ++ add x19, x20, :lo12:.LANCHOR4 ++ add x26, x22, :lo12:.LANCHOR2 ++ add x19, x19, 1072 ++ add x23, x23, :lo12:.LANCHOR0 ++ mov w24, 0 ++ mov w25, 65535 ++ mov w0, 0 ++ bl FtlUpdateVaildLpn ++.L1870: ++ ldrh w2, [x19, 2] ++ ldrh w1, [x19] ++ ldr x0, [x26, 2576] ++ str x0, [x26, 2944] ++ ldr x0, [x26, 2640] ++ str x0, [x26, 2952] ++ orr w0, w2, w1, lsl 10 ++ str w0, [x26, 2940] ++ ldrh w0, [x26, 2346] ++ sub w0, w0, #1 ++ cmp w2, w0 ++ blt .L1871 ++ ldrh w25, [x19, 4] ++ strh wzr, [x19, 2] ++ strh w1, [x19, 4] ++ bl FtlFreeSysBlkQueueOut ++ ldr w1, [x26, 2396] ++ str w1, [x19, 8] ++ add w2, w1, 1 ++ str w2, [x26, 2396] ++ ubfiz w2, w0, 10, 16 ++ str w2, [x26, 2940] ++ strh w0, [x19] ++ strh w0, [x21, 2] ++ str w1, [x21, 4] ++.L1871: ++ ldrb w0, [x23, 88] ++ cbz w0, .L1872 ++ ldrh w1, [x26, 2354] ++ ldr x0, [x26, 2576] ++ bl js_hash ++ str w0, [x21, 12] ++.L1872: ++ mov w3, 1 ++ add x0, x26, 2936 ++ mov w1, w3 ++ mov w2, w3 ++ bl FlashProgPages ++ ldrh w0, [x19, 2] ++ ldr w1, [x26, 2936] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ strh w0, [x19, 2] ++ cmn w1, #1 ++ bne .L1873 ++ cmp w0, 1 ++ bne .L1874 ++ ldrh w0, [x26, 2346] ++ sub w0, w0, #1 ++ strh w0, [x19, 2] ++.L1874: ++ add w24, w24, 1 ++ and w24, w24, 65535 ++ cmp w24, 3 ++ bls .L1870 ++ add x22, x22, :lo12:.LANCHOR2 ++ mov w2, w24 ++ adrp x0, .LC46 ++ add x0, x0, :lo12:.LC46 ++ ldr w1, [x22, 2940] ++ bl printk ++ mov w0, 1 ++ str w0, [x22, 2928] ++.L1868: ++ 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 ++.L1873: ++ cmp w0, 1 ++ beq .L1870 ++ cmp w1, 256 ++ beq .L1870 ++ mov w0, 65535 ++ cmp w25, w0 ++ beq .L1868 ++ mov w1, 1 ++ mov w0, w25 ++ bl FtlFreeSysBlkQueueIn ++ b .L1868 ++ .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] ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x19, x21, :lo12:.LANCHOR2 ++ adrp x22, .LANCHOR4 ++ add x20, x22, :lo12:.LANCHOR4 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ mov w25, 56 ++ ldr x0, [x19, 2784] ++ ldr w2, [x19, 2372] ++ stp x27, x28, [sp, 80] ++ strh wzr, [x20, 1088] ++ lsl w2, w2, 2 ++ strh wzr, [x19, 2920] ++ bl ftl_memset ++ ldr x0, [x19, 2720] ++ mov w1, 0 ++ ldr w2, [x19, 2372] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldr x0, [x19, 2752] ++ mov w1, 0 ++ ldrh w2, [x19, 2364] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldr x0, [x19, 2736] ++ mov w1, 0 ++ ldrh w2, [x19, 2364] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ mov w2, 16 ++ mov w1, 255 ++ add x0, x20, 1072 ++ bl ftl_memset ++ ldrh w23, [x19, 2284] ++ add x0, x19, 2304 ++ str x0, [x29, 112] ++.L1891: ++ ldrh w0, [x19, 2286] ++ cmp w0, w23 ++ bls .L1930 ++ ldrh w8, [x19, 2276] ++ mov x5, 0 ++ ldrh w7, [x19, 2356] ++ mov w20, 0 ++ mov w6, 4 ++ b .L1931 ++.L1893: ++ ldr x0, [x29, 112] ++ mov w1, w23 ++ ldrb w0, [x0, x5] ++ bl V2P_block ++ and w4, w0, 65535 ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L1892 ++ umull x2, w20, w25 ++ ldr x0, [x19, 2520] ++ lsl w4, w4, 10 ++ add x0, x0, x2 ++ str w4, [x0, 4] ++ ldr x1, [x19, 2520] ++ ldr x0, [x19, 2600] ++ add x1, x1, x2 ++ ldr x2, [x19, 2656] ++ str x0, [x1, 8] ++ mul w0, w20, w7 ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ sdiv w0, w0, w6 ++ add x0, x2, w0, sxtw 2 ++ str x0, [x1, 16] ++.L1892: ++ add x5, x5, 1 ++.L1931: ++ cmp w8, w5, uxth ++ bhi .L1893 ++ cbnz w20, .L1894 ++.L1929: ++ add w23, w23, 1 ++ and w23, w23, 65535 ++ b .L1891 ++.L1894: ++ ldr x0, [x19, 2520] ++ mov w2, 1 ++ mov w1, w20 ++ add x24, x22, :lo12:.LANCHOR4 ++ add x27, x24, 1072 ++ mov x26, 0 ++ bl FlashReadPages ++ umull x0, w20, w25 ++ str x0, [x29, 120] ++.L1928: ++ ldr x0, [x19, 2520] ++ add x1, x0, x26 ++ ldr w0, [x0, x26] ++ ldr w28, [x1, 4] ++ cmn w0, #1 ++ ldr x20, [x1, 16] ++ ubfx x28, x28, 10, 16 ++ bne .L1897 ++ mov w6, 16 ++ mov w7, 65535 ++.L1899: ++ ldr x0, [x19, 2520] ++ mov w2, 1 ++ stp w7, w6, [x29, 104] ++ add x0, x0, x26 ++ ldr w1, [x0, 4] ++ add w1, w1, 1 ++ str w1, [x0, 4] ++ mov w1, w2 ++ ldr x0, [x19, 2520] ++ add x0, x0, x26 ++ bl FlashReadPages ++ ldp w7, w6, [x29, 104] ++ ldrh w0, [x20] ++ cmp w0, w7 ++ ldr x0, [x19, 2520] ++ bne .L1896 ++ mov w1, -1 ++ str w1, [x0, x26] ++ ldr x0, [x19, 2520] ++ ldr w0, [x0, x26] ++ cmp w0, w1 ++ beq .L1965 ++.L1897: ++ ldr w0, [x19, 2396] ++ ldr w10, [x20, 4] ++ cmn w0, #1 ++ beq .L1900 ++ cmp w0, w10 ++ bhi .L1901 ++.L1900: ++ cmn w10, #1 ++ beq .L1901 ++ add w0, w10, 1 ++ str w0, [x19, 2396] ++.L1901: ++ ldrh w0, [x20] ++ mov w1, 61604 ++ cmp w0, w1 ++ beq .L1903 ++ bhi .L1904 ++ mov w1, 61574 ++ cmp w0, w1 ++ beq .L1905 ++.L1902: ++ ldr x0, [x29, 120] ++ add x26, x26, 56 ++ cmp x26, x0 ++ bne .L1928 ++ b .L1929 ++.L1896: ++ ldr w0, [x0, x26] ++ cmn w0, #1 ++ bne .L1897 ++ sub w6, w6, #1 ++ ands w6, w6, 65535 ++ bne .L1899 ++.L1965: ++ mov w1, 0 ++ mov w0, w28 ++ bl FtlFreeSysBlkQueueIn ++ b .L1902 ++.L1904: ++ mov w1, 61634 ++ cmp w0, w1 ++ beq .L1906 ++ mov w1, 65535 ++ cmp w0, w1 ++ beq .L1965 ++ b .L1902 ++.L1906: ++ ldr w6, [x19, 2372] ++ ldrh w1, [x24, 1088] ++ and w2, w6, 65535 ++ ldr x7, [x19, 2784] ++ sub w0, w2, #1 ++ sub w2, w2, w1 ++ sub w2, w2, #1 ++ sxth x0, w0 ++ sxth w2, w2 ++.L1908: ++ cmp w0, w2 ++ bgt .L1914 ++ tbz w0, #31, .L1946 ++ b .L1902 ++.L1914: ++ sxtw x8, w0 ++ lsl x9, x8, 2 ++ ldr w11, [x7, x9] ++ cmp w10, w11 ++ bls .L1909 ++ ldr w2, [x7] ++ cbnz w2, .L1910 ++ cmp w6, w1 ++ beq .L1910 ++ add w1, w1, 1 ++ strh w1, [x24, 1088] ++.L1910: ++ mov w1, 0 ++.L1911: ++ cmp w1, w0 ++ bne .L1912 ++ ldr x1, [x19, 2784] ++ ldr w2, [x20, 4] ++ str w2, [x1, x9] ++ ldr x1, [x19, 2720] ++ strh w28, [x1, x8, lsl 1] ++ tbnz w0, #31, .L1902 ++ ldrh w1, [x24, 1088] ++ ldr w2, [x19, 2372] ++ sub w2, w2, w1 ++ sub w2, w2, #1 ++ cmp w0, w2, sxth ++ bgt .L1902 ++.L1946: ++ add w1, w1, 1 ++ strh w1, [x24, 1088] ++ ldr x1, [x19, 2784] ++ ldr w2, [x20, 4] ++ str w2, [x1, x0, lsl 2] ++ ldr x1, [x19, 2720] ++.L1964: ++ strh w28, [x1, x0, lsl 1] ++ b .L1902 ++.L1912: ++ ldr x7, [x19, 2784] ++ sxtw x2, w1 ++ lsl x6, x2, 2 ++ lsl x2, x2, 1 ++ add x10, x7, x6 ++ add w1, w1, 1 ++ sxth w1, w1 ++ ldr w10, [x10, 4] ++ str w10, [x7, x6] ++ ldr x6, [x19, 2720] ++ add x7, x6, x2 ++ ldrh w7, [x7, 2] ++ strh w7, [x6, x2] ++ b .L1911 ++.L1909: ++ sub w0, w0, #1 ++ sxth x0, w0 ++ b .L1908 ++.L1905: ++ ldrh w6, [x19, 2364] ++ ldrh w1, [x19, 2920] ++ sub w2, w6, #1 ++ ldr x7, [x19, 2752] ++ sxth x0, w2 ++ sub w2, w2, w1 ++.L1917: ++ cmp w0, w2 ++ ble .L1922 ++ sxtw x8, w0 ++ lsl x9, x8, 2 ++ ldr w11, [x7, x9] ++ cmp w10, w11 ++ bls .L1918 ++ ldr w2, [x7] ++ cbnz w2, .L1919 ++ cmp w6, w1 ++ beq .L1919 ++ add w1, w1, 1 ++ strh w1, [x19, 2920] ++.L1919: ++ mov w1, 0 ++.L1920: ++ cmp w1, w0 ++ bne .L1921 ++ ldr x1, [x19, 2752] ++ ldr w2, [x20, 4] ++ str w2, [x1, x9] ++ ldr x1, [x19, 2736] ++ strh w28, [x1, x8, lsl 1] ++.L1922: ++ tbnz w0, #31, .L1902 ++ ldrh w1, [x19, 2364] ++ ldrh w2, [x19, 2920] ++ sub w1, w1, #1 ++ sub w1, w1, w2 ++ cmp w0, w1, sxth ++ bgt .L1902 ++ ldr x1, [x19, 2752] ++ add w2, w2, 1 ++ strh w2, [x19, 2920] ++ ldr w2, [x20, 4] ++ str w2, [x1, x0, lsl 2] ++ ldr x1, [x19, 2736] ++ b .L1964 ++.L1921: ++ ldr x7, [x19, 2752] ++ sxtw x2, w1 ++ lsl x6, x2, 2 ++ lsl x2, x2, 1 ++ add x10, x7, x6 ++ add w1, w1, 1 ++ sxth w1, w1 ++ ldr w10, [x10, 4] ++ str w10, [x7, x6] ++ ldr x6, [x19, 2736] ++ add x7, x6, x2 ++ ldrh w7, [x7, 2] ++ strh w7, [x6, x2] ++ b .L1920 ++.L1918: ++ sub w0, w0, #1 ++ sxth x0, w0 ++ b .L1917 ++.L1903: ++ ldrh w0, [x27] ++ mov w1, 65535 ++ cmp w0, w1 ++ bne .L1924 ++ strh w28, [x27] ++ str w10, [x27, 8] ++ b .L1902 ++.L1924: ++ ldrh w0, [x27, 4] ++ cmp w0, w1 ++ beq .L1925 ++ mov w1, 1 ++ bl FtlFreeSysBlkQueueIn ++.L1925: ++ ldr w0, [x20, 4] ++ ldr w1, [x27, 8] ++ cmp w1, w0 ++ bcs .L1926 ++ ldrh w0, [x27] ++ strh w0, [x27, 4] ++ strh w28, [x27] ++ ldr w0, [x20, 4] ++ str w0, [x27, 8] ++ b .L1902 ++.L1926: ++ strh w28, [x27, 4] ++ b .L1902 ++.L1930: ++ ldr x1, [x19, 2720] ++ ldrh w0, [x1] ++ cbz w0, .L1932 ++.L1935: ++ add x0, x21, :lo12:.LANCHOR2 ++ ldr x1, [x0, 2736] ++ ldrh w2, [x1] ++ cbz w2, .L1933 ++.L1951: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L1932: ++ add x22, x22, :lo12:.LANCHOR4 ++ ldrh w0, [x22, 1088] ++ cbz w0, .L1935 ++ ldr w2, [x19, 2372] ++ mov w0, 0 ++.L1936: ++ cmp w0, w2 ++ bcs .L1935 ++ ldrh w3, [x1, w0, sxtw 1] ++ cbz w3, .L1937 ++ mov w1, w0 ++ add x2, x21, :lo12:.LANCHOR2 ++.L1938: ++ ldr w3, [x2, 2372] ++ cmp w1, w3 ++ bcs .L1935 ++ ldr x5, [x2, 2720] ++ sxtw x6, w1 ++ lsl x4, x6, 1 ++ sub w3, w1, w0 ++ sxtw x3, w3 ++ add w1, w1, 1 ++ sxth w1, w1 ++ ldrh w7, [x5, x4] ++ strh w7, [x5, x3, lsl 1] ++ ldr x5, [x2, 2784] ++ ldr w6, [x5, x6, lsl 2] ++ str w6, [x5, x3, lsl 2] ++ ldr x3, [x2, 2720] ++ strh wzr, [x3, x4] ++ b .L1938 ++.L1937: ++ add w0, w0, 1 ++ sxth w0, w0 ++ b .L1936 ++.L1933: ++ ldrh w2, [x0, 2920] ++ cbz w2, .L1951 ++ ldrh w2, [x0, 2364] ++ mov w0, 0 ++.L1941: ++ mov w5, w0 ++ cmp w0, w2 ++ bge .L1951 ++ ldrh w3, [x1, w0, sxtw 1] ++ cbz w3, .L1942 ++ add x21, x21, :lo12:.LANCHOR2 ++.L1943: ++ ldrh w1, [x21, 2364] ++ cmp w0, w1 ++ bge .L1951 ++ ldr x3, [x21, 2736] ++ sxtw x4, w0 ++ lsl x2, x4, 1 ++ sub w1, w0, w5 ++ sxtw x1, w1 ++ add w0, w0, 1 ++ sxth w0, w0 ++ ldrh w6, [x3, x2] ++ strh w6, [x3, x1, lsl 1] ++ ldr x3, [x21, 2752] ++ ldr w4, [x3, x4, lsl 2] ++ str w4, [x3, x1, lsl 2] ++ ldr x1, [x21, 2736] ++ strh wzr, [x1, x2] ++ b .L1943 ++.L1942: ++ add w0, w0, 1 ++ sxth w0, w0 ++ b .L1941 ++ .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, 2672] ++ ldr x2, [x19, 2688] ++ bl FtlVendorPartRead ++ ldr x0, [x19, 2688] ++ ldr w1, [x0] ++ mov w0, 17221 ++ movk w0, 0x4254, lsl 16 ++ cmp w1, w0 ++ beq .L1967 ++ adrp x1, .LC47 ++ adrp x0, .LC48 ++ add x1, x1, :lo12:.LC47 ++ add x0, x0, :lo12:.LC48 ++ bl printk ++ ldr x0, [x19, 2688] ++ mov w1, 0 ++ ldrh w2, [x19, 2672] ++ lsl w2, w2, 9 ++ bl ftl_memset ++.L1967: ++ 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: ++ and w0, w0, 65535 ++ cbz w1, .L1970 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl ftl_set_blk_mode.part.17 ++ ldp x29, x30, [sp], 16 ++ ret ++.L1970: ++ adrp x1, .LANCHOR0+80 ++ ubfx x2, x0, 5, 11 ++ lsl x2, x2, 2 ++ ldr x3, [x1, #:lo12:.LANCHOR0+80] ++ mov w1, 1 ++ lsl w0, w1, w0 ++ ldr w1, [x3, x2] ++ bic w0, w1, w0 ++ str w0, [x3, x2] ++ 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: ++ and w1, w0, 65535 ++ adrp x0, .LANCHOR0+80 ++ ldr x0, [x0, #:lo12:.LANCHOR0+80] ++ ubfx x2, x1, 5, 11 ++ ldr w0, [x0, x2, lsl 2] ++ lsr w0, w0, w1 ++ and w0, w0, 1 ++ ret ++ .size ftl_get_blk_mode, .-ftl_get_blk_mode ++ .align 2 ++ .global FtlCheckVpc ++ .type FtlCheckVpc, %function ++FtlCheckVpc: ++ stp x29, x30, [sp, -112]! ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC49 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ stp x23, x24, [sp, 48] ++ add x23, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ mov w22, 0 ++ add x1, x1, 152 ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ add x0, x0, :lo12:.LC49 ++ adrp x21, check_valid_page_count_table ++ bl printk ++ add x19, x21, :lo12:check_valid_page_count_table ++ mov x2, 8192 ++ mov w1, 0 ++ mov x0, x19 ++ bl memset ++.L1978: ++ ldr w0, [x23, 2924] ++ cmp w22, w0 ++ bcc .L1980 ++ adrp x24, .LC50 ++ add x22, x20, :lo12:.LANCHOR2 ++ add x25, x21, :lo12:check_valid_page_count_table ++ add x24, x24, :lo12:.LC50 ++ mov w23, 0 ++ mov w19, 0 ++ mov w28, 65535 ++.L1981: ++ ldrh w0, [x22, 2284] ++ cmp w0, w19 ++ bhi .L1983 ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldr x19, [x0, 768] ++ cbz x19, .L1984 ++ ldrh w25, [x0, 776] ++ adrp x24, .LC51 ++ ldr x0, [x22, 2808] ++ add x20, x20, :lo12:.LANCHOR2 ++ add x21, x21, :lo12:check_valid_page_count_table ++ add x24, x24, :lo12:.LC51 ++ sub x19, x19, x0 ++ mov x0, -6148914691236517206 ++ asr x19, x19, 1 ++ movk x0, 0xaaab, lsl 0 ++ mov w26, 6 ++ mov w22, 0 ++ mul x19, x19, x0 ++ and w19, w19, 65535 ++.L1985: ++ cmp w22, w25 ++ bne .L1987 ++.L1984: ++ mov w1, w23 ++ adrp x0, .LC52 ++ add x0, x0, :lo12:.LC52 ++ bl printk ++ 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 ++.L1980: ++ mov w2, 0 ++ add x1, x29, 108 ++ mov w0, w22 ++ bl log2phys ++ ldr w0, [x29, 108] ++ cmn w0, #1 ++ beq .L1979 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ and x0, x0, 65535 ++ ldrh w1, [x19, x0, lsl 1] ++ add w1, w1, 1 ++ strh w1, [x19, x0, lsl 1] ++.L1979: ++ add w22, w22, 1 ++ b .L1978 ++.L1983: ++ ldr x0, [x22, 2712] ++ ubfiz x27, x19, 1, 16 ++ sxtw x26, w19 ++ ldrh w2, [x0, x27] ++ ldrh w3, [x25, x26, lsl 1] ++ cmp w2, w3 ++ beq .L1982 ++ mov w1, w19 ++ mov x0, x24 ++ bl printk ++ ldr x0, [x22, 2712] ++ ldrh w0, [x0, x27] ++ cmp w0, w28 ++ beq .L1982 ++ ldrh w1, [x25, x26, lsl 1] ++ cmp w1, w0 ++ csinc w23, w23, wzr, ls ++.L1982: ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L1981 ++.L1987: ++ ldr x1, [x20, 2712] ++ ubfiz x0, x19, 1, 16 ++ ldrh w2, [x1, x0] ++ cbz w2, .L1986 ++ ldrh w3, [x21, w19, sxtw 1] ++ mov w23, 1 ++ mov w1, w19 ++ mov x0, x24 ++ bl printk ++.L1986: ++ ldr x0, [x20, 2808] ++ umull x19, w19, w26 ++ ldrh w19, [x0, x19] ++ mov w0, 65535 ++ cmp w19, w0 ++ beq .L1984 ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ b .L1985 ++ .size FtlCheckVpc, .-FtlCheckVpc ++ .align 2 ++ .global FtlDumpSysBlock ++ .type FtlDumpSysBlock, %function ++FtlDumpSysBlock: ++ sub sp, sp, #80 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x23, x24, [sp, 64] ++ and w23, w0, 65535 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 32] ++ add x19, x0, 2936 ++ stp x21, x22, [sp, 48] ++ lsl w24, w23, 10 ++ adrp x22, .LC53 ++ mov x21, x0 ++ ldr x1, [x0, 2576] ++ add x22, x22, :lo12:.LC53 ++ str x1, [x19, 8] ++ mov w20, 0 ++ ldr x1, [x0, 2640] ++ str x1, [x19, 16] ++.L1999: ++ ldrh w0, [x21, 2346] ++ cmp w20, w0 ++ blt .L2001 ++ ldp x19, x20, [sp, 32] ++ ldp x21, x22, [sp, 48] ++ ldp x23, x24, [sp, 64] ++ ldp x29, x30, [sp, 16] ++ add sp, sp, 80 ++ ret ++.L2001: ++ orr w0, w20, w24 ++ mov w2, 1 ++ str w0, [x19, 4] ++ mov w1, w2 ++ mov x0, x19 ++ bl FlashReadPages ++ ldp x1, x0, [x19, 8] ++ ldr w1, [x1] ++ str w1, [sp] ++ mov w1, w23 ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x22 ++ ldp w2, w3, [x19] ++ bl printk ++ ldr x0, [x19, 16] ++ ldr w0, [x0] ++ cmn w0, #1 ++ beq .L2000 ++ ldr x1, [x21, 2576] ++ adrp x0, .LC54 ++ mov w3, 768 ++ mov w2, 4 ++ add x0, x0, :lo12:.LC54 ++ bl rknand_print_hex ++.L2000: ++ add w20, w20, 1 ++ sxth w20, w20 ++ b .L1999 ++ .size FtlDumpSysBlock, .-FtlDumpSysBlock ++ .align 2 ++ .global Ftlscanalldata ++ .type Ftlscanalldata, %function ++Ftlscanalldata: ++ sub sp, sp, #96 ++ adrp x0, .LC55 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC55 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x21, x22, [sp, 48] ++ adrp x22, .LANCHOR2 ++ add x21, x22, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 32] ++ str x23, [sp, 64] ++ mov w20, 0 ++ add x19, x21, 2936 ++ bl printk ++.L2007: ++ add x0, x22, :lo12:.LANCHOR2 ++ ldr w0, [x0, 2924] ++ cmp w20, w0 ++ bcc .L2013 ++ ldp x19, x20, [sp, 32] ++ ldp x21, x22, [sp, 48] ++ ldp x29, x30, [sp, 16] ++ ldr x23, [sp, 64] ++ add sp, sp, 96 ++ ret ++.L2013: ++ mov w2, 0 ++ add x1, x29, 76 ++ mov w0, w20 ++ bl log2phys ++ tst x20, 2047 ++ bne .L2008 ++ ldr w2, [x29, 76] ++ adrp x0, .LC56 ++ mov w1, w20 ++ add x0, x0, :lo12:.LC56 ++ bl printk ++.L2008: ++ ldr w0, [x29, 76] ++ cmn w0, #1 ++ beq .L2010 ++ ldr x23, [x21, 2640] ++ mov w2, 0 ++ stp wzr, w0, [x19] ++ mov w1, 1 ++ ldr x0, [x21, 2576] ++ str x0, [x19, 8] ++ mov x0, x19 ++ str x23, [x19, 16] ++ str w20, [x19, 24] ++ bl FlashReadPages ++ ldr w0, [x19] ++ cmp w0, 256 ++ ccmn w0, #1, 4, ne ++ beq .L2011 ++ ldr w0, [x23, 8] ++ cmp w20, w0 ++ beq .L2010 ++.L2011: ++ ldp x1, x0, [x19, 8] ++ ldr w2, [x1, 4] ++ str w2, [sp] ++ ldp w3, w4, [x0] ++ ldp w5, w6, [x0, 8] ++ adrp x0, .LC57 ++ ldr w7, [x1] ++ add x0, x0, :lo12:.LC57 ++ ldr w2, [x19, 4] ++ mov w1, w20 ++ bl printk ++.L2010: ++ add w20, w20, 1 ++ b .L2007 ++ .size Ftlscanalldata, .-Ftlscanalldata ++ .align 2 ++ .global dump_map_info ++ .type dump_map_info, %function ++dump_map_info: ++ sub sp, sp, #96 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x19, .LANCHOR2 ++ add x0, x19, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 64] ++ stp x21, x22, [sp, 48] ++ add x24, x0, 2304 ++ stp x25, x26, [sp, 80] ++ mov x21, x19 ++ mov x19, x0 ++ mov w23, 56 ++ ldrh w22, [x0, 2284] ++.L2016: ++ ldrh w0, [x19, 2286] ++ cmp w0, w22 ++ bhi .L2022 ++ add x25, x21, :lo12:.LANCHOR2 ++ adrp x26, .LANCHOR4 ++ add x24, x25, 2936 ++ add x26, x26, :lo12:.LANCHOR4 ++ mov w20, 0 ++.L2023: ++ ldrh w0, [x26, 1088] ++ cmp w20, w0 ++ bge .L2026 ++ adrp x0, .LC59 ++ sbfiz x22, x20, 1, 32 ++ mov w19, 0 ++ add x23, x0, :lo12:.LC59 ++ b .L2027 ++.L2018: ++ ldrb w0, [x24, x5] ++ mov w1, w22 ++ bl V2P_block ++ and w4, w0, 65535 ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L2017 ++ umull x2, w20, w23 ++ ldr x0, [x19, 2520] ++ lsl w4, w4, 10 ++ add x0, x0, x2 ++ str w4, [x0, 4] ++ ldr x1, [x19, 2520] ++ ldr x0, [x19, 2600] ++ add x1, x1, x2 ++ ldr x2, [x19, 2656] ++ str x0, [x1, 8] ++ mul w0, w20, w7 ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ sdiv w0, w0, w6 ++ add x0, x2, w0, sxtw 2 ++ str x0, [x1, 16] ++.L2017: ++ add x5, x5, 1 ++.L2024: ++ cmp w8, w5, uxth ++ bhi .L2018 ++ cbnz w20, .L2019 ++.L2021: ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ b .L2016 ++.L2019: ++ ldr x0, [x19, 2520] ++ mov w1, w20 ++ adrp x26, .LC58 ++ mov w2, 1 ++ umull x20, w20, w23 ++ mov x25, 0 ++ add x26, x26, :lo12:.LC58 ++ bl FlashReadPages ++.L2020: ++ ldr x0, [x19, 2520] ++ add x0, x0, x25 ++ add x25, x25, 56 ++ ldr x1, [x0, 16] ++ ldr w2, [x0, 4] ++ ldr x0, [x0, 8] ++ ldr w3, [x0, 4] ++ str w3, [sp] ++ ldr w7, [x0] ++ mov x0, x26 ++ ldp w3, w4, [x1] ++ ldp w5, w6, [x1, 8] ++ ubfx x1, x2, 10, 16 ++ bl printk ++ cmp x25, x20 ++ beq .L2021 ++ b .L2020 ++.L2022: ++ ldrh w8, [x19, 2276] ++ mov x5, 0 ++ ldrh w7, [x19, 2356] ++ mov w20, 0 ++ mov w6, 4 ++ b .L2024 ++.L2025: ++ ldr x0, [x25, 2720] ++ mov w2, 1 ++ mov w1, w2 ++ ldrh w0, [x0, x22] ++ orr w0, w19, w0, lsl 10 ++ str w0, [x24, 4] ++ mov x0, x24 ++ bl FlashReadPages ++ ldp x2, x0, [x24, 8] ++ add w19, w19, 1 ++ ldr x1, [x25, 2720] ++ sxth w19, w19 ++ ldr w3, [x2, 4] ++ ldrh w1, [x1, x22] ++ str w3, [sp, 8] ++ ldr w2, [x2] ++ str w2, [sp] ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x23 ++ ldp w2, w3, [x24] ++ bl printk ++.L2027: ++ ldrh w0, [x25, 2346] ++ cmp w19, w0 ++ blt .L2025 ++ add w20, w20, 1 ++ sxth w20, w20 ++ b .L2023 ++.L2026: ++ add x21, x21, :lo12:.LANCHOR2 ++ mov w2, 2 ++ adrp x0, .LC60 ++ add x0, x0, :lo12:.LC60 ++ ldr w3, [x21, 2372] ++ ldr x1, [x21, 2720] ++ bl rknand_print_hex ++ ldrh w3, [x21, 2380] ++ mov w2, 4 ++ ldr x1, [x21, 2768] ++ adrp x0, .LC61 ++ add x0, x0, :lo12:.LC61 ++ bl rknand_print_hex ++ ldrh w3, [x21, 2380] ++ mov w2, 4 ++ ldr x1, [x21, 2776] ++ adrp x0, .LC62 ++ add x0, x0, :lo12:.LC62 ++ bl rknand_print_hex ++ ldp x19, x20, [sp, 32] ++ ldp x21, x22, [sp, 48] ++ ldp x23, x24, [sp, 64] ++ ldp x25, x26, [sp, 80] ++ ldp x29, x30, [sp, 16] ++ add sp, sp, 96 ++ ret ++ .size dump_map_info, .-dump_map_info ++ .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] ++ adrp x20, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ mov x22, x0 ++ stp x25, x26, [sp, 64] ++ mov w19, 0 ++ stp x23, x24, [sp, 48] ++ adrp x25, .LANCHOR0 ++ stp x27, x28, [sp, 80] ++ ldrh w24, [x0, 6] ++ ldr x0, [x0, 40] ++ str x0, [x29, 120] ++ ldrh w0, [x22, 8] ++ lsl w2, w24, 2 ++ str w0, [x29, 116] ++ ldr x0, [x29, 120] ++ ldp x23, x27, [x22, 16] ++ bl ftl_memset ++ stp wzr, wzr, [x22, 48] ++ add x4, x20, :lo12:.LANCHOR2 ++ mov w0, -1 ++ mov x26, x4 ++ ldr x1, [x4, 2576] ++ ldr x21, [x4, 2640] ++ str x1, [x4, 2944] ++ str x21, [x4, 2952] ++ strh w0, [x22] ++ strh w0, [x22, 2] ++ mov w0, 1 ++ str w0, [x22, 56] ++ ldr w0, [x29, 116] ++ sub w0, w0, #1 ++ str w0, [x29, 112] ++ add x0, x25, :lo12:.LANCHOR0 ++ str x0, [x29, 96] ++.L2031: ++ ldr w0, [x29, 116] ++ cmp w19, w0 ++ bge .L2050 ++ ldr w0, [x29, 112] ++ sxtw x28, w19 ++ cmp w19, w0 ++ bne .L2032 ++ lsl x0, x28, 1 ++ mov w1, 1 ++ add x25, x23, x0 ++ adrp x26, .LANCHOR0 ++ add x26, x26, :lo12:.LANCHOR0 ++ ldrh w0, [x23, x0] ++ bl FtlGetLastWrittenPage ++ strh w19, [x22] ++ sxth w23, w0 ++ add w0, w0, 1 ++ strh w0, [x22, 2] ++ add w23, w23, 1 ++ ldr w0, [x27, x28, lsl 2] ++ add x27, x20, :lo12:.LANCHOR2 ++ add x19, x27, 2936 ++ mov w28, 0 ++ str w0, [x22, 48] ++.L2033: ++ cmp w28, w23 ++ blt .L2036 ++.L2050: ++ add x20, x20, :lo12:.LANCHOR2 ++ mov x0, x22 ++ bl ftl_free_no_use_map_blk ++ ldrh w1, [x22, 2] ++ ldrh w0, [x20, 2346] ++ cmp w1, w0 ++ bne .L2038 ++ mov x0, x22 ++ bl ftl_map_blk_alloc_new_blk ++.L2038: ++ mov x0, x22 ++ bl ftl_map_blk_gc ++ mov x0, x22 ++ 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 ++.L2036: ++ ldrh w0, [x25] ++ mov w2, 1 ++ mov w1, w2 ++ orr w0, w28, w0, lsl 10 ++ str w0, [x19, 4] ++ mov x0, x19 ++ bl FlashReadPages ++ ldrb w0, [x26, 88] ++ cbz w0, .L2034 ++ ldr x0, [x19, 16] ++ ldr w6, [x0, 12] ++ cbz w6, .L2034 ++ ldrh w1, [x27, 2354] ++ ldr x0, [x19, 8] ++ bl js_hash ++ cmp w6, w0 ++ beq .L2034 ++ mov w0, -1 ++ str w0, [x19] ++.L2034: ++ ldr w0, [x19] ++ cmn w0, #1 ++ beq .L2035 ++ ldrh w0, [x21, 8] ++ cmp w24, w0 ++ bls .L2035 ++ ldrh w2, [x21] ++ ldrh w1, [x22, 4] ++ cmp w2, w1 ++ bne .L2035 ++ ldr x2, [x29, 120] ++ ubfiz x0, x0, 2, 16 ++ ldr w1, [x19, 4] ++ str w1, [x2, x0] ++.L2035: ++ add w28, w28, 1 ++ sxth w28, w28 ++ b .L2033 ++.L2032: ++ add x0, x26, 2936 ++ ldr x1, [x26, 2576] ++ str x1, [x0, 8] ++ lsl x1, x28, 1 ++ add x2, x23, x1 ++ str x2, [x29, 104] ++ ldrh w2, [x26, 2346] ++ ldrh w1, [x23, x1] ++ sub w2, w2, #1 ++ orr w1, w2, w1, lsl 10 ++ mov w2, 1 ++ str w1, [x0, 4] ++ mov w1, w2 ++ bl FlashReadPages ++ ldr w0, [x26, 2936] ++ cmn w0, #1 ++ beq .L2052 ++ ldrh w1, [x21] ++ ldrh w0, [x22, 4] ++ cmp w1, w0 ++ bne .L2052 ++ ldrh w1, [x21, 8] ++ mov w0, 64245 ++ cmp w1, w0 ++ beq .L2040 ++.L2052: ++ add x25, x26, 2936 ++ mov w28, 0 ++.L2041: ++ ldrh w0, [x26, 2346] ++ cmp w28, w0 ++ bge .L2048 ++ ldr x0, [x29, 104] ++ mov w2, 1 ++ mov w1, w2 ++ ldrh w0, [x0] ++ orr w0, w28, w0, lsl 10 ++ str w0, [x25, 4] ++ mov x0, x25 ++ bl FlashReadPages ++ ldr x0, [x29, 96] ++ ldrb w0, [x0, 88] ++ cbz w0, .L2045 ++ ldr x0, [x25, 16] ++ ldr w6, [x0, 12] ++ cbz w6, .L2045 ++ ldrh w1, [x26, 2354] ++ ldr x0, [x25, 8] ++ bl js_hash ++ cmp w6, w0 ++ beq .L2045 ++ mov w0, -1 ++ str w0, [x25] ++.L2045: ++ ldr w0, [x25] ++ cmn w0, #1 ++ beq .L2046 ++ ldrh w0, [x21, 8] ++ cmp w24, w0 ++ bls .L2046 ++ ldrh w2, [x21] ++ ldrh w1, [x22, 4] ++ cmp w2, w1 ++ bne .L2046 ++ ldr x2, [x29, 120] ++ ubfiz x0, x0, 2, 16 ++ ldr w1, [x25, 4] ++ str w1, [x2, x0] ++.L2046: ++ add w5, w28, 1 ++ sxth w28, w5 ++ b .L2041 ++.L2040: ++ mov w0, 0 ++.L2042: ++ ldrh w1, [x26, 2346] ++ sub w1, w1, #1 ++ cmp w0, w1 ++ blt .L2044 ++.L2048: ++ add w19, w19, 1 ++ sxth w19, w19 ++ b .L2031 ++.L2044: ++ ldr x2, [x26, 2576] ++ sbfiz x5, x0, 3, 32 ++ ldrh w1, [x2, x5] ++ cmp w24, w1 ++ bls .L2043 ++ add x2, x2, x5 ++ ldr x3, [x29, 120] ++ ubfiz x1, x1, 2, 16 ++ ldr w2, [x2, 4] ++ str w2, [x3, x1] ++.L2043: ++ add w0, w0, 1 ++ sxth w0, w0 ++ b .L2042 ++ .size FtlMapTblRecovery, .-FtlMapTblRecovery ++ .align 2 ++ .global FtlLoadVonderInfo ++ .type FtlLoadVonderInfo, %function ++FtlLoadVonderInfo: ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x0, x0, 1000 ++ add x29, sp, 0 ++ ldrh w2, [x1, 2364] ++ strh w2, [x0, 10] ++ mov w2, -3962 ++ strh w2, [x0, 4] ++ ldrh w2, [x1, 2920] ++ strh w2, [x0, 8] ++ ldrh w2, [x1, 2366] ++ strh w2, [x0, 6] ++ ldr x2, [x1, 2736] ++ str x2, [x0, 16] ++ ldr x2, [x1, 2752] ++ str x2, [x0, 24] ++ ldr x2, [x1, 2744] ++ ldr x1, [x1, 2760] ++ stp x2, x1, [x0, 32] ++ 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]! ++ adrp x0, .LANCHOR2 ++ mov w1, 0 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ add x19, x0, :lo12:.LANCHOR2 ++ ldr x0, [x19, 2728] ++ ldr w2, [x19, 2372] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldrh w0, [x19, 2382] ++ mov w1, 255 ++ ldrh w2, [x19, 2354] ++ mul w2, w2, w0 ++ ldr x0, [x19, 2800] ++ bl ftl_memset ++ mov x0, x19 ++ mov w1, 0 ++ mov w5, -1 ++.L2075: ++ ldrh w2, [x0, 2382] ++ cmp w2, w1 ++ bhi .L2076 ++ adrp x2, .LANCHOR4 ++ add x2, x2, :lo12:.LANCHOR4 ++ mov w3, -1 ++ add x1, x2, 928 ++ strh w3, [x2, 930] ++ strh w3, [x2, 928] ++ ldr w3, [x0, 2372] ++ strh w3, [x2, 938] ++ mov w3, -3902 ++ strh w3, [x2, 932] ++ ldrh w2, [x2, 1088] ++ strh w2, [x1, 8] ++ ldrh w2, [x0, 2380] ++ strh w2, [x1, 6] ++ ldr x2, [x0, 2720] ++ str x2, [x1, 16] ++ ldr x2, [x0, 2784] ++ str x2, [x1, 24] ++ ldr x2, [x0, 2728] ++ ldr x0, [x0, 2768] ++ stp x2, x0, [x1, 32] ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2076: ++ ldr x3, [x0, 2792] ++ ubfiz x2, x1, 4, 16 ++ add x3, x3, x2 ++ str wzr, [x3, 4] ++ ldr x3, [x0, 2792] ++ strh w5, [x3, x2] ++ ldr x3, [x0, 2792] ++ ldr x4, [x0, 2800] ++ add x3, x3, x2 ++ ldrh w2, [x0, 2354] ++ mul w2, w2, w1 ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ sxtw x2, w2 ++ and x2, x2, -4 ++ add x2, x4, x2 ++ str x2, [x3, 8] ++ b .L2075 ++ .size FtlL2PDataInit, .-FtlL2PDataInit ++ .align 2 ++ .global FtlLoadMapInfo ++ .type FtlLoadMapInfo, %function ++FtlLoadMapInfo: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl FtlL2PDataInit ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x0, x0, 928 ++ 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: ++ and w6, w1, 65535 ++ adrp x4, .LANCHOR2 ++ add x1, x4, :lo12:.LANCHOR2 ++ and w2, w2, 65535 ++ strh wzr, [x0, 4] ++ ldrh w3, [x1, 2276] ++ mov w1, 65535 ++.L2081: ++ cmp w3, w2, uxth ++ bhi .L2083 ++ add x4, x4, :lo12:.LANCHOR2 ++ ubfiz x3, x3, 1, 16 ++ add x3, x3, 16 ++ add x2, x0, 16 ++ add x3, x0, x3 ++ mov w5, 65535 ++ ldrh w1, [x4, 2344] ++ sub w1, w1, #1 ++ and w1, w1, 65535 ++ sub w1, w1, w6 ++.L2084: ++ cmp x2, x3 ++ bne .L2086 ++ ret ++.L2083: ++ add x5, x0, w2, sxtw 1 ++ ldrh w5, [x5, 16] ++ cmp w5, w1 ++ beq .L2082 ++ ldrh w5, [x0, 4] ++ add w5, w5, 1 ++ strh w5, [x0, 4] ++.L2082: ++ add w2, w2, 1 ++ b .L2081 ++.L2086: ++ ldrh w4, [x2] ++ cmp w4, w5 ++ beq .L2085 ++ ldrh w4, [x0, 4] ++ add w4, w1, w4 ++ strh w4, [x0, 4] ++.L2085: ++ add x2, x2, 2 ++ b .L2084 ++ .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 w19, w0 ++ str x21, [sp, 32] ++ lsr w0, w1, 10 ++ str w1, [x29, 60] ++ bl P2V_block_in_plane ++ adrp x2, .LANCHOR2 ++ add x4, x2, :lo12:.LANCHOR2 ++ and w0, w0, 65535 ++ ubfiz x21, x0, 1, 16 ++ ldr x3, [x4, 2712] ++ ldrh w1, [x3, x21] ++ cbnz w1, .L2088 ++ mov x20, x2 ++ adrp x9, .LANCHOR4 ++ add x2, x9, :lo12:.LANCHOR4 ++ ldr x8, [x2, 768] ++ cbz x8, .L2089 ++ ldrh w3, [x2, 776] ++ mov w5, 65535 ++ ldr x2, [x4, 2808] ++ mov x4, -6148914691236517206 ++ movk x4, 0xaaab, lsl 0 ++ sub x8, x8, x2 ++ asr x8, x8, 1 ++ mul x8, x8, x4 ++ mov w4, 6 ++ and w8, w8, 65535 ++.L2090: ++ cmp w1, w3 ++ beq .L2089 ++ cmp w8, w0 ++ bne .L2091 ++ add x9, x9, :lo12:.LANCHOR4 ++ mov w1, w8 ++ add x0, x9, 768 ++ bl List_remove_node ++ ldrh w0, [x9, 776] ++ sub w0, w0, #1 ++ strh w0, [x9, 776] ++ mov w0, w8 ++ bl INSERT_DATA_LIST ++ add x2, x20, :lo12:.LANCHOR2 ++ ldr x1, [x2, 2712] ++ ldrh w0, [x1, x21] ++ add w0, w0, 1 ++ strh w0, [x1, x21] ++.L2089: ++ add x1, x29, 60 ++ mov w2, 1 ++ mov w0, w19 ++ bl log2phys ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2091: ++ umull x8, w8, w4 ++ ldrh w8, [x2, x8] ++ cmp w8, w5 ++ beq .L2089 ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L2090 ++.L2088: ++ add w1, w1, 1 ++ strh w1, [x3, x21] ++ b .L2089 ++ .size FtlReUsePrevPpa, .-FtlReUsePrevPpa ++ .align 2 ++ .global make_superblock ++ .type make_superblock, %function ++make_superblock: ++ mov x5, x0 ++ strh wzr, [x0, 4] ++ strb wzr, [x0, 7] ++ adrp x0, .LANCHOR2 ++ add x1, x0, :lo12:.LANCHOR2 ++ mov x7, 0 ++ add x8, x5, 16 ++ mov x6, x0 ++ add x9, x1, 2304 ++ mov w11, -1 ++ ldrh w10, [x1, 2276] ++ cmp w10, w7, uxth ++ bhi .L2117 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldrb w1, [x5, 7] ++ strb wzr, [x5, 9] ++ ldrh w2, [x0, 2344] ++ mul w1, w1, w2 ++ strh w1, [x5, 4] ++ ldr w1, [x0, 2096] ++ cbz w1, .L2113 ++ ldrh w1, [x5] ++ ldr x0, [x0, 2696] ++ ldrh w0, [x0, x1, lsl 1] ++ cmp w0, 79 ++ bhi .L2113 ++ mov w0, 1 ++ strb w0, [x5, 9] ++.L2113: ++ adrp x0, .LANCHOR0+88 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+88] ++ cbz w0, .L2116 ++ mov w0, 1 ++ strb w0, [x5, 9] ++.L2116: ++ mov w0, 0 ++ ret ++.L2117: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++.L2100: ++ ldrh w1, [x5] ++ ldrb w0, [x9, x7] ++ bl V2P_block ++ mov w4, w0 ++ strh w11, [x8] ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L2099 ++ strh w4, [x8] ++ ldrb w0, [x5, 7] ++ add w0, w0, 1 ++ strb w0, [x5, 7] ++.L2099: ++ add x7, x7, 1 ++ add x8, x8, 2 ++ cmp w10, w7, uxth ++ bhi .L2100 ++ add x0, x6, :lo12:.LANCHOR2 ++ ldrb w1, [x5, 7] ++ strb wzr, [x5, 9] ++ ldrh w2, [x0, 2344] ++ mul w1, w1, w2 ++ strh w1, [x5, 4] ++ ldr w1, [x0, 2096] ++ cbz w1, .L2101 ++ ldrh w1, [x5] ++ ldr x0, [x0, 2696] ++ ldrh w0, [x0, x1, lsl 1] ++ cmp w0, 79 ++ bhi .L2101 ++ mov w0, 1 ++ strb w0, [x5, 9] ++.L2101: ++ adrp x0, .LANCHOR0+88 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+88] ++ cbz w0, .L2102 ++ mov w0, 1 ++ strb w0, [x5, 9] ++.L2102: ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size make_superblock, .-make_superblock ++ .align 2 ++ .global FtlLoadSysInfo ++ .type FtlLoadSysInfo, %function ++FtlLoadSysInfo: ++ sub sp, sp, #112 ++ mov w1, 0 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x23, x24, [sp, 64] ++ stp x21, x22, [sp, 48] ++ adrp x22, .LANCHOR2 ++ add x24, x22, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 32] ++ add x20, x24, 2936 ++ stp x25, x26, [sp, 80] ++ stp x27, x28, [sp, 96] ++ adrp x19, .LANCHOR4 ++ ldr x0, [x24, 2576] ++ add x23, x19, :lo12:.LANCHOR4 ++ str x0, [x20, 8] ++ ldr x0, [x24, 2640] ++ str x0, [x20, 16] ++ ldr x0, [x24, 2712] ++ ldrh w2, [x24, 2284] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldrh w0, [x23, 1072] ++ mov w1, 65535 ++ cmp w0, w1 ++ bne .L2119 ++.L2130: ++ mov w0, -1 ++.L2118: ++ 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, 112 ++ ret ++.L2119: ++ add x25, x23, 1072 ++ mov w1, 1 ++ mov w26, 19539 ++ bl FtlGetLastWrittenPage ++ ldrsh w28, [x23, 1072] ++ sxth w21, w0 ++ adrp x23, .LANCHOR0 ++ add w0, w0, 1 ++ strh w0, [x25, 2] ++ add x25, x23, :lo12:.LANCHOR0 ++ movk w26, 0x4654, lsl 16 ++.L2121: ++ tbnz w21, #31, .L2129 ++ orr w0, w21, w28, lsl 10 ++ str w0, [x20, 4] ++ ldr x0, [x24, 2576] ++ mov w2, 1 ++ str x0, [x20, 8] ++ mov w1, w2 ++ mov x0, x20 ++ bl FlashReadPages ++ ldrb w0, [x25, 88] ++ cbz w0, .L2122 ++ ldr x8, [x20, 16] ++ ldr w7, [x8, 12] ++ cbz w7, .L2122 ++ ldr x6, [x20, 8] ++ ldrh w1, [x24, 2354] ++ mov x0, x6 ++ bl js_hash ++ cmp w7, w0 ++ beq .L2122 ++ cbnz w21, .L2123 ++ add x0, x19, :lo12:.LANCHOR4 ++ add x27, x0, 1072 ++ ldrh w1, [x0, 1076] ++ cmp w28, w1 ++ beq .L2123 ++ ldrh w1, [x0, 1072] ++ ldr w0, [x6] ++ str w0, [sp] ++ adrp x0, .LC63 ++ add x0, x0, :lo12:.LC63 ++ ldp w4, w5, [x8] ++ ldr w6, [x8, 8] ++ ldp w2, w3, [x20] ++ bl printk ++ ldrsh w28, [x27, 4] ++ ldrh w21, [x24, 2346] ++.L2125: ++ sub w21, w21, #1 ++ sxth w21, w21 ++ b .L2121 ++.L2123: ++ mov w0, -1 ++ str w0, [x20] ++.L2122: ++ ldr w0, [x20] ++ cmn w0, #1 ++ beq .L2125 ++ ldr x0, [x24, 2576] ++ ldr w0, [x0] ++ cmp w0, w26 ++ bne .L2125 ++ ldr x0, [x24, 2640] ++ ldrh w1, [x0] ++ mov w0, 61604 ++ cmp w1, w0 ++ bne .L2125 ++.L2129: ++ add x20, x22, :lo12:.LANCHOR2 ++ add x0, x19, :lo12:.LANCHOR4 ++ add x21, x20, 2936 ++ mov w2, 48 ++ add x0, x0, 696 ++ add x23, x23, :lo12:.LANCHOR0 ++ ldr x1, [x21, 8] ++ bl ftl_memcpy ++ ldr x0, [x20, 2712] ++ ldrh w2, [x20, 2284] ++ ldr x1, [x21, 8] ++ lsl w2, w2, 1 ++ add x1, x1, 48 ++ bl ftl_memcpy ++ ldrh w1, [x20, 2284] ++ ldr x0, [x21, 8] ++ lsr w2, w1, 3 ++ ubfiz x1, x1, 1, 16 ++ add x1, x1, 51 ++ add w2, w2, 4 ++ and x1, x1, -4 ++ add x1, x0, x1 ++ ldr x0, [x23, 80] ++ bl ftl_memcpy ++ ldrh w0, [x20, 2384] ++ cbz w0, .L2127 ++ ldrh w1, [x20, 2284] ++ ldrh w2, [x20, 2380] ++ lsr w0, w1, 3 ++ add w1, w0, w1, lsl 1 ++ ldr x0, [x21, 8] ++ add w1, w1, 52 ++ lsl w2, w2, 2 ++ and x1, x1, 65532 ++ add x1, x0, x1 ++ ldr x0, [x20, 2776] ++ bl ftl_memcpy ++.L2127: ++ add x2, x19, :lo12:.LANCHOR4 ++ mov w0, 19539 ++ movk w0, 0x4654, lsl 16 ++ add x1, x2, 696 ++ ldr w3, [x2, 696] ++ cmp w3, w0 ++ bne .L2130 ++ add x0, x22, :lo12:.LANCHOR2 ++ ldrh w4, [x2, 704] ++ ldrb w5, [x2, 706] ++ strh w4, [x2, 1078] ++ ldrh w3, [x0, 2298] ++ cmp w5, w3 ++ bne .L2130 ++ ldrh w3, [x0, 2344] ++ ldrh w5, [x0, 2350] ++ str w4, [x2, 1092] ++ strh wzr, [x2, 1106] ++ mul w3, w3, w4 ++ strb wzr, [x2, 1110] ++ str w3, [x0, 2924] ++ strb wzr, [x2, 1112] ++ mul w3, w5, w3 ++ ldrh w5, [x0, 2830] ++ str w3, [x0, 1224] ++ ldr w3, [x0, 2288] ++ sub w3, w3, w5 ++ ldrh w5, [x2, 710] ++ sub w3, w3, w4 ++ ldrh w4, [x0, 2276] ++ strh w5, [x2, 784] ++ udiv w3, w3, w4 ++ mov w4, -1 ++ strh w4, [x2, 1104] ++ ldrh w4, [x2, 718] ++ strh w4, [x2, 880] ++ strh w3, [x2, 1096] ++ ldrh w3, [x2, 712] ++ lsr w6, w3, 6 ++ and w3, w3, 63 ++ strb w3, [x2, 790] ++ ldrb w3, [x2, 707] ++ strb w3, [x2, 792] ++ ldrh w3, [x2, 714] ++ strh w3, [x2, 832] ++ ldrh w3, [x2, 716] ++ strh w6, [x2, 786] ++ lsr w6, w3, 6 ++ and w3, w3, 63 ++ strb w3, [x2, 838] ++ ldrb w3, [x2, 708] ++ strb w3, [x2, 840] ++ add x3, x2, 880 ++ strh w6, [x2, 834] ++ ldrh w2, [x2, 720] ++ lsr w4, w2, 6 ++ and w2, w2, 63 ++ strh w4, [x3, 2] ++ strb w2, [x3, 6] ++ ldrb w2, [x1, 13] ++ strb w2, [x3, 8] ++ add x3, x0, 2304 ++ ldr w2, [x1, 32] ++ str wzr, [x0, 2404] ++ str wzr, [x0, 2408] ++ ldr w1, [x1, 40] ++ stp wzr, wzr, [x3, 112] ++ stp wzr, w2, [x3, 120] ++ str wzr, [x0, 2432] ++ ldr w2, [x0, 2396] ++ str wzr, [x0, 2440] ++ cmp w1, w2 ++ bls .L2131 ++ str w1, [x0, 2396] ++.L2131: ++ add x0, x19, :lo12:.LANCHOR4 ++ add x22, x22, :lo12:.LANCHOR2 ++ ldr w0, [x0, 732] ++ ldr w1, [x22, 2400] ++ cmp w0, w1 ++ bls .L2132 ++ str w0, [x22, 2400] ++.L2132: ++ mov w0, 65535 ++ cmp w5, w0 ++ beq .L2133 ++ add x0, x19, :lo12:.LANCHOR4 ++ add x0, x0, 784 ++ bl make_superblock ++.L2133: ++ add x1, x19, :lo12:.LANCHOR4 ++ add x0, x1, 832 ++ ldrh w2, [x1, 832] ++ mov w1, 65535 ++ cmp w2, w1 ++ beq .L2134 ++ bl make_superblock ++.L2134: ++ add x1, x19, :lo12:.LANCHOR4 ++ add x0, x1, 880 ++ ldrh w2, [x1, 880] ++ mov w1, 65535 ++ cmp w2, w1 ++ beq .L2135 ++ bl make_superblock ++.L2135: ++ add x19, x19, :lo12:.LANCHOR4 ++ mov w1, 65535 ++ add x0, x19, 1104 ++ ldrh w2, [x19, 1104] ++ cmp w2, w1 ++ beq .L2136 ++ bl make_superblock ++.L2136: ++ mov w0, 0 ++ b .L2118 ++ .size FtlLoadSysInfo, .-FtlLoadSysInfo ++ .align 2 ++ .global FtlDumpBlockInfo ++ .type FtlDumpBlockInfo, %function ++FtlDumpBlockInfo: ++ sub sp, sp, #160 ++ lsr w0, w0, 10 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x19, .LANCHOR2 ++ add x20, x19, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 48] ++ stp x23, x24, [sp, 64] ++ add x23, x29, 144 ++ stp x25, x26, [sp, 80] ++ and w25, w1, 255 ++ str x27, [sp, 96] ++ bl P2V_block_in_plane ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ and w22, w0, 65535 ++ add x1, x1, 168 ++ ldrh w24, [x20, 2344] ++ adrp x0, .LC49 ++ add x0, x0, :lo12:.LC49 ++ bl printk ++ ldr x1, [x20, 2712] ++ ubfiz x0, x22, 1, 16 ++ ldrh w2, [x1, x0] ++ mov w1, w22 ++ adrp x0, .LC64 ++ add x0, x0, :lo12:.LC64 ++ bl printk ++ strh w22, [x23, -48]! ++ mov x0, x23 ++ bl make_superblock ++ ldrb w0, [x20, 1220] ++ cbz w0, .L2157 ++ cbnz w25, .L2157 ++ mov w0, w22 ++ bl ftl_get_blk_mode ++ mov w22, w0 ++ cmp w0, 1 ++ bne .L2148 ++ ldrh w24, [x20, 2346] ++.L2148: ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w21, 0 ++ mov w26, 56 ++ mov w2, w24 ++ mov w1, w22 ++ adrp x0, .LC65 ++ ldrh w3, [x19, 2344] ++ add x0, x0, :lo12:.LC65 ++ bl printk ++.L2149: ++ ldrh w7, [x19, 2276] ++ add x3, x23, 16 ++ ldrh w8, [x19, 2354] ++ mov w20, 0 ++ ldrh w9, [x19, 2356] ++ mov w0, 0 ++ mov w10, 65535 ++ mov w5, 4 ++.L2150: ++ cmp w0, w7 ++ bne .L2152 ++ ldr x0, [x19, 2520] ++ mov w1, w20 ++ adrp x27, .LC59 ++ mov w2, w22 ++ umull x20, w20, w26 ++ mov x25, 0 ++ add x27, x27, :lo12:.LC59 ++ bl FlashReadPages ++.L2153: ++ cmp x25, x20 ++ bne .L2154 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ cmp w24, w21 ++ bne .L2149 ++.L2155: ++ ldp x19, x20, [sp, 32] ++ mov w0, 0 ++ ldp x21, x22, [sp, 48] ++ ldp x23, x24, [sp, 64] ++ ldp x25, x26, [sp, 80] ++ ldp x29, x30, [sp, 16] ++ ldr x27, [sp, 96] ++ add sp, sp, 160 ++ ret ++.L2157: ++ mov w22, 0 ++ b .L2148 ++.L2152: ++ ldrh w1, [x3] ++ cmp w1, w10 ++ beq .L2151 ++ umull x6, w20, w26 ++ ldr x4, [x19, 2520] ++ orr w1, w21, w1, lsl 10 ++ add x4, x4, x6 ++ str w1, [x4, 4] ++ mul w1, w20, w8 ++ ldr x2, [x19, 2520] ++ ldr x4, [x19, 2600] ++ sdiv w1, w1, w5 ++ add x2, x2, x6 ++ add x1, x4, w1, sxtw 2 ++ str x1, [x2, 8] ++ mul w1, w20, w9 ++ ldr x4, [x19, 2656] ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ sdiv w1, w1, w5 ++ add x1, x4, w1, sxtw 2 ++ str x1, [x2, 16] ++.L2151: ++ add w0, w0, 1 ++ add x3, x3, 2 ++ and w0, w0, 65535 ++ b .L2150 ++.L2154: ++ ldr x8, [x19, 2520] ++ ldrh w1, [x29, 96] ++ add x2, x8, x25 ++ ldp x3, x0, [x2, 8] ++ ldr w4, [x3, 4] ++ str w4, [sp, 8] ++ ldr w3, [x3] ++ str w3, [sp] ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x27 ++ ldr w3, [x2, 4] ++ ldr w2, [x8, x25] ++ add x25, x25, 56 ++ bl printk ++ b .L2153 ++ .size FtlDumpBlockInfo, .-FtlDumpBlockInfo ++ .align 2 ++ .global FtlScanAllBlock ++ .type FtlScanAllBlock, %function ++FtlScanAllBlock: ++ sub sp, sp, #144 ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC49 ++ add x1, x1, 192 ++ add x0, x0, :lo12:.LC49 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ mov w20, 0 ++ stp x21, x22, [sp, 48] ++ stp x23, x24, [sp, 64] ++ adrp x23, .LANCHOR2 ++ str x25, [sp, 80] ++ add x21, x23, :lo12:.LANCHOR2 ++ bl printk ++.L2161: ++ add x19, x23, :lo12:.LANCHOR2 ++ ldrh w0, [x19, 2286] ++ cmp w0, w20 ++ bhi .L2169 ++ ldp x19, x20, [sp, 32] ++ mov w0, 0 ++ ldp x21, x22, [sp, 48] ++ ldp x23, x24, [sp, 64] ++ ldp x29, x30, [sp, 16] ++ ldr x25, [sp, 80] ++ add sp, sp, 144 ++ ret ++.L2169: ++ strh w20, [x29, 80] ++ mov w0, w20 ++ bl ftl_get_blk_mode ++ mov w3, w0 ++ ldr x2, [x19, 2712] ++ ubfiz x1, x20, 1, 16 ++ adrp x0, .LC66 ++ add x0, x0, :lo12:.LC66 ++ ldrh w2, [x2, x1] ++ mov w1, w20 ++ bl printk ++ add x0, x29, 80 ++ bl make_superblock ++ add x3, x29, 96 ++ ldrh w7, [x19, 2276] ++ ldrh w8, [x19, 2354] ++ mov w0, 0 ++ ldrh w9, [x19, 2356] ++ mov w10, 65535 ++ mov w19, 0 ++ mov w11, 56 ++ mov w5, 4 ++.L2162: ++ cmp w0, w7 ++ bne .L2164 ++ ldr x0, [x21, 2520] ++ mov w24, 56 ++ adrp x25, .LC67 ++ mov w2, 0 ++ mov w1, w19 ++ umull x24, w19, w24 ++ mov x22, 0 ++ add x25, x25, :lo12:.LC67 ++ bl FlashReadPages ++.L2165: ++ cmp x22, x24 ++ bne .L2166 ++ ldr x0, [x21, 2520] ++ mov w1, w19 ++ adrp x24, .LC68 ++ mov w2, 1 ++ mov x19, 0 ++ add x24, x24, :lo12:.LC68 ++ bl FlashReadPages ++.L2167: ++ cmp x22, x19 ++ bne .L2168 ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L2161 ++.L2164: ++ ldrh w1, [x3] ++ cmp w1, w10 ++ beq .L2163 ++ umull x6, w19, w11 ++ ldr x4, [x21, 2520] ++ lsl w1, w1, 10 ++ add x4, x4, x6 ++ str w1, [x4, 4] ++ mul w1, w19, w8 ++ ldr x2, [x21, 2520] ++ ldr x4, [x21, 2600] ++ sdiv w1, w1, w5 ++ add x2, x2, x6 ++ add x1, x4, w1, sxtw 2 ++ str x1, [x2, 8] ++ mul w1, w19, w9 ++ ldr x4, [x21, 2656] ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ sdiv w1, w1, w5 ++ add x1, x4, w1, sxtw 2 ++ str x1, [x2, 16] ++.L2163: ++ add w0, w0, 1 ++ add x3, x3, 2 ++ and w0, w0, 65535 ++ b .L2162 ++.L2166: ++ ldr x8, [x21, 2520] ++ ldrh w1, [x29, 80] ++ add x2, x8, x22 ++ ldp x3, x0, [x2, 8] ++ ldr w4, [x3, 4] ++ str w4, [sp, 8] ++ ldr w3, [x3] ++ str w3, [sp] ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x25 ++ ldr w3, [x2, 4] ++ ldr w2, [x8, x22] ++ add x22, x22, 56 ++ bl printk ++ b .L2165 ++.L2168: ++ ldr x8, [x21, 2520] ++ ldrh w1, [x29, 80] ++ add x2, x8, x19 ++ ldp x3, x0, [x2, 8] ++ ldr w4, [x3, 4] ++ str w4, [sp, 8] ++ ldr w3, [x3] ++ str w3, [sp] ++ ldp w4, w5, [x0] ++ ldp w6, w7, [x0, 8] ++ mov x0, x24 ++ ldr w3, [x2, 4] ++ ldr w2, [x8, x19] ++ add x19, x19, 56 ++ bl printk ++ b .L2167 ++ .size FtlScanAllBlock, .-FtlScanAllBlock ++ .align 2 ++ .global SupperBlkListInit ++ .type SupperBlkListInit, %function ++SupperBlkListInit: ++ stp x29, x30, [sp, -64]! ++ mov w0, 6 ++ mov w1, 0 ++ 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] ++ adrp x20, .LANCHOR4 ++ add x23, x19, 2304 ++ mov w21, 0 ++ ldrh w2, [x19, 2286] ++ mov w22, 0 ++ mov w24, 0 ++ mul w2, w2, w0 ++ ldr x0, [x19, 2808] ++ bl ftl_memset ++ strh wzr, [x19, 2386] ++ add x0, x20, :lo12:.LANCHOR4 ++ strh wzr, [x0, 760] ++ strh wzr, [x0, 776] ++ str xzr, [x0, 744] ++ str xzr, [x0, 752] ++ str xzr, [x0, 768] ++.L2172: ++ ldrh w0, [x19, 2284] ++ cmp w24, w0 ++ bge .L2179 ++ ldrh w8, [x19, 2276] ++ mov w5, 0 ++ ldrh w7, [x19, 2344] ++ mov w6, 0 ++ b .L2180 ++.L2174: ++ ldrb w0, [x23, w6, sxtw] ++ mov w1, w24 ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L2173 ++ add w5, w7, w5 ++ sxth w5, w5 ++.L2173: ++ add w6, w6, 1 ++ sxth w6, w6 ++.L2180: ++ cmp w6, w8 ++ blt .L2174 ++ cbz w5, .L2175 ++ mov w0, 32768 ++ sdiv w5, w0, w5 ++ sxth w5, w5 ++.L2176: ++ ldr x1, [x19, 2808] ++ mov w0, 6 ++ smaddl x0, w24, w0, x1 ++ strh w5, [x0, 4] ++ add x0, x20, :lo12:.LANCHOR4 ++ ldrh w1, [x0, 784] ++ cmp w24, w1 ++ beq .L2177 ++ ldrh w1, [x0, 832] ++ cmp w24, w1 ++ beq .L2177 ++ ldrh w0, [x0, 880] ++ cmp w24, w0 ++ beq .L2177 ++ ldr x0, [x19, 2712] ++ ldrh w0, [x0, w24, sxtw 1] ++ cbnz w0, .L2178 ++ add w21, w21, 1 ++ mov w0, w24 ++ and w21, w21, 65535 ++ bl INSERT_FREE_LIST ++.L2177: ++ add w24, w24, 1 ++ sxth w24, w24 ++ b .L2172 ++.L2175: ++ ldr x0, [x19, 2712] ++ mov w1, -1 ++ strh w1, [x0, w24, sxtw 1] ++ b .L2176 ++.L2178: ++ add w22, w22, 1 ++ mov w0, w24 ++ and w22, w22, 65535 ++ bl INSERT_DATA_LIST ++ b .L2177 ++.L2179: ++ add x20, x20, :lo12:.LANCHOR4 ++ mov w0, 0 ++ ldp x23, x24, [sp, 48] ++ strh w22, [x20, 760] ++ strh w21, [x20, 776] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size SupperBlkListInit, .-SupperBlkListInit ++ .align 2 ++ .global Ftl_save_ext_data ++ .type Ftl_save_ext_data, %function ++Ftl_save_ext_data: ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ mov w1, 19539 ++ movk w1, 0x4654, lsl 16 ++ ldr w3, [x0, 1152] ++ cmp w3, w1 ++ bne .L2185 ++ stp x29, x30, [sp, -16]! ++ add x2, x0, 1152 ++ mov w1, 99 ++ add x29, sp, 0 ++ movk w1, 0x5000, lsl 16 ++ str w1, [x2, 4] ++ ldr w1, [x0, 1664] ++ ldr w0, [x0, 1668] ++ stp w1, w0, [x2, 88] ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldr w1, [x0, 2404] ++ str w1, [x2, 8] ++ ldr w1, [x0, 2408] ++ str w1, [x2, 12] ++ ldr w1, [x0, 2424] ++ str w1, [x2, 16] ++ ldr w1, [x0, 2420] ++ str w1, [x2, 20] ++ ldr w1, [x0, 2432] ++ str w1, [x2, 28] ++ ldr w1, [x0, 2436] ++ str w1, [x2, 32] ++ ldr w1, [x0, 2412] ++ str w1, [x2, 36] ++ ldr w1, [x0, 2416] ++ str w1, [x2, 40] ++ ldr w1, [x0, 2440] ++ str w1, [x2, 44] ++ ldr w1, [x0, 2444] ++ str w1, [x2, 48] ++ ldr w1, [x0, 2392] ++ ldr w0, [x0, 2388] ++ stp w1, w0, [x2, 60] ++ mov w1, 1 ++ mov w0, 0 ++ bl FtlVendorPartWrite ++ ldp x29, x30, [sp], 16 ++ ret ++.L2185: ++ ret ++ .size Ftl_save_ext_data, .-Ftl_save_ext_data ++ .align 2 ++ .global FtlEctTblFlush ++ .type FtlEctTblFlush, %function ++FtlEctTblFlush: ++ adrp x1, .LANCHOR2 ++ add x2, x1, :lo12:.LANCHOR2 ++ ldr w3, [x2, 2096] ++ cbz w3, .L2193 ++ ldr w2, [x2, 2444] ++ mov w3, 4 ++ cmp w2, 39 ++ mov w2, 32 ++ csel w2, w2, w3, hi ++.L2189: ++ adrp x3, .LANCHOR4 ++ add x3, x3, :lo12:.LANCHOR4 ++ ldrh w4, [x3, 1672] ++ cmp w4, 31 ++ bhi .L2190 ++ add w4, w4, 1 ++ mov w2, 1 ++ strh w4, [x3, 1672] ++.L2190: ++ cbnz w0, .L2191 ++ add x0, x1, :lo12:.LANCHOR2 ++ ldr x0, [x0, 2688] ++ ldr w3, [x0, 20] ++ ldr w0, [x0, 16] ++ add w2, w2, w3 ++ cmp w0, w2 ++ bcc .L2196 ++.L2191: ++ add x0, x1, :lo12:.LANCHOR2 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ ldr x1, [x0, 2688] ++ ldr w2, [x1, 16] ++ str w2, [x1, 20] ++ mov w2, 17221 ++ movk w2, 0x4254, lsl 16 ++ str w2, [x1] ++ ldr x2, [x0, 2688] ++ ldrh w1, [x0, 2672] ++ lsl w3, w1, 9 ++ str wzr, [x2, 4] ++ str w3, [x2, 12] ++ ldr w3, [x2, 8] ++ add w3, w3, 1 ++ str w3, [x2, 8] ++ ldr x2, [x0, 2688] ++ mov w0, 64 ++ bl FtlVendorPartWrite ++ bl Ftl_save_ext_data ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L2193: ++ mov w2, 32 ++ b .L2189 ++.L2196: ++ mov w0, 0 ++ 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, .LANCHOR4 ++ add x20, x19, :lo12:.LANCHOR4 ++ stp x21, x22, [sp, 32] ++ add x22, x20, 1152 ++ mov w21, 19539 ++ mov x2, x22 ++ bl FtlVendorPartRead ++ ldr w0, [x20, 1152] ++ movk w21, 0x4654, lsl 16 ++ cmp w0, w21 ++ beq .L2199 ++ mov w2, 512 ++ mov w1, 0 ++ mov x0, x22 ++ bl ftl_memset ++ str w21, [x20, 1152] ++.L2199: ++ add x1, x19, :lo12:.LANCHOR4 ++ mov w2, 19539 ++ movk w2, 0x4654, lsl 16 ++ add x0, x1, 1152 ++ adrp x20, .LANCHOR2 ++ ldr w3, [x1, 1152] ++ cmp w3, w2 ++ bne .L2200 ++ ldr w2, [x1, 1240] ++ str w2, [x1, 1664] ++ ldr w2, [x1, 1244] ++ str w2, [x1, 1668] ++ add x1, x20, :lo12:.LANCHOR2 ++ ldr w2, [x0, 8] ++ str w2, [x1, 2404] ++ ldr w2, [x0, 12] ++ str w2, [x1, 2408] ++ ldr w2, [x0, 16] ++ str w2, [x1, 2424] ++ ldr w2, [x0, 20] ++ str w2, [x1, 2420] ++ ldr w2, [x0, 28] ++ str w2, [x1, 2432] ++ ldr w2, [x0, 32] ++ str w2, [x1, 2436] ++ ldr w2, [x0, 36] ++ str w2, [x1, 2412] ++ ldr w2, [x0, 40] ++ str w2, [x1, 2416] ++ ldr w2, [x0, 44] ++ str w2, [x1, 2440] ++ ldr w2, [x0, 48] ++ ldr w0, [x0, 60] ++ str w0, [x1, 2392] ++ str w2, [x1, 2444] ++.L2200: ++ add x0, x19, :lo12:.LANCHOR4 ++ add x1, x20, :lo12:.LANCHOR2 ++ mov w2, 34661 ++ add x0, x0, 1152 ++ movk w2, 0x1234, lsl 16 ++ ldr w3, [x0, 68] ++ str wzr, [x1, 2388] ++ cmp w3, w2 ++ bne .L2201 ++ ldrb w2, [x1, 1220] ++ cbz w2, .L2202 ++ str wzr, [x0, 68] ++ bl Ftl_save_ext_data ++.L2201: ++ add x0, x20, :lo12:.LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR4 ++ ldp x21, x22, [sp, 32] ++ ldrh w1, [x0, 2336] ++ ldr w3, [x0, 2428] ++ ldr w2, [x0, 2432] ++ ldrh w0, [x0, 2284] ++ madd w1, w1, w3, w2 ++ udiv w0, w1, w0 ++ str w0, [x19, 1676] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2202: ++ mov w0, 1 ++ str w0, [x1, 2096] ++ adrp x1, .LC69 ++ adrp x0, .LC48 ++ add x1, x1, :lo12:.LC69 ++ add x0, x0, :lo12:.LC48 ++ bl printk ++ b .L2201 ++ .size Ftl_load_ext_data, .-Ftl_load_ext_data ++ .align 2 ++ .global ftl_scan_all_ppa ++ .type ftl_scan_all_ppa, %function ++ftl_scan_all_ppa: ++ sub sp, sp, #112 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 64] ++ stp x25, x26, [sp, 80] ++ add x20, x19, 2936 ++ adrp x26, .LC70 ++ add x26, x26, :lo12:.LC70 ++ ldrh w23, [x19, 2342] ++ stp x21, x22, [sp, 48] ++ sub w23, w23, #16 ++ str x27, [sp, 96] ++ lsl w25, w23, 10 ++.L2205: ++ ldrh w0, [x19, 2342] ++ cmp w23, w0 ++ blt .L2213 ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ add x1, x1, 208 ++ adrp x0, .LC73 ++ add x0, x0, :lo12:.LC73 ++ bl printk ++ ldp x19, x20, [sp, 32] ++ ldp x21, x22, [sp, 48] ++ ldp x23, x24, [sp, 64] ++ ldp x25, x26, [sp, 80] ++ ldp x29, x30, [sp, 16] ++ ldr x27, [sp, 96] ++ add sp, sp, 112 ++ ret ++.L2213: ++ and w22, w23, 65535 ++ mov w0, w22 ++ bl ftl_get_blk_mode ++ ldrb w1, [x19, 1220] ++ cbz w1, .L2206 ++ ldrh w1, [x19, 2284] ++ cmp w23, w1 ++ bge .L2207 ++ ldrh w1, [x19, 2358] ++ cmp w23, w1 ++ blt .L2207 ++.L2206: ++ cmp w0, 1 ++ bne .L2208 ++.L2207: ++ ldrh w24, [x19, 2346] ++ mov w21, -2147483648 ++.L2209: ++ mov w3, w21 ++ mov w2, w24 ++ mov w1, w23 ++ mov x0, x26 ++ bl printk ++ mov w0, w22 ++ bl FtlBbmIsBadBlock ++ cbz w0, .L2210 ++ adrp x0, .LC71 ++ mov w3, w21 ++ mov w2, w24 ++ mov w1, w23 ++ add x0, x0, :lo12:.LC71 ++ bl printk ++.L2210: ++ adrp x27, .LC72 ++ add w21, w21, w25 ++ add x27, x27, :lo12:.LC72 ++ mov w22, 0 ++.L2211: ++ cmp w22, w24 ++ bne .L2212 ++ add w23, w23, 1 ++ add w25, w25, 1024 ++ b .L2205 ++.L2208: ++ ldrh w24, [x19, 2344] ++ mov w21, 0 ++ b .L2209 ++.L2212: ++ add w0, w21, w22 ++ stp wzr, w0, [x20] ++ ldr x0, [x19, 2576] ++ mov w2, 0 ++ str x0, [x20, 8] ++ mov w1, 1 ++ ldr x0, [x19, 2640] ++ add w22, w22, 1 ++ str x0, [x20, 16] ++ mov x0, x20 ++ bl FlashReadPages ++ ldp x1, x0, [x20, 8] ++ ldr w2, [x1, 4] ++ str w2, [sp] ++ ldp w3, w4, [x0] ++ ldp w5, w6, [x0, 8] ++ mov x0, x27 ++ ldr w7, [x1] ++ ldp w2, w1, [x20] ++ bl printk ++ b .L2211 ++ .size ftl_scan_all_ppa, .-ftl_scan_all_ppa ++ .align 2 ++ .global update_multiplier_value ++ .type update_multiplier_value, %function ++update_multiplier_value: ++ and w8, w0, 65535 ++ adrp x0, .LANCHOR2 ++ add x1, x0, :lo12:.LANCHOR2 ++ mov x9, 0 ++ mov w6, 0 ++ mov x5, x0 ++ add x7, x1, 2304 ++ ldrh w10, [x1, 2276] ++ ldrh w11, [x1, 2344] ++ cmp w10, w9, uxth ++ bhi .L2233 ++ cbz w6, .L2231 ++ mov w0, 32768 ++ sdiv w6, w0, w6 ++.L2232: ++ add x0, x5, :lo12:.LANCHOR2 ++ mov w1, 6 ++ ldr x0, [x0, 2808] ++ umaddl x8, w8, w1, x0 ++ mov w0, 0 ++ strh w6, [x8, 4] ++ ret ++.L2226: ++ mov w6, 0 ++ b .L2225 ++.L2231: ++ mov w6, 0 ++ b .L2232 ++.L2233: ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++.L2224: ++ ldrb w0, [x7, x9] ++ mov w1, w8 ++ bl V2P_block ++ bl FtlBbmIsBadBlock ++ cbnz w0, .L2223 ++ add w6, w6, w11 ++ and w6, w6, 65535 ++.L2223: ++ add x9, x9, 1 ++ cmp w10, w9, uxth ++ bhi .L2224 ++ cbz w6, .L2226 ++ mov w0, 32768 ++ sdiv w6, w0, w6 ++.L2225: ++ add x0, x5, :lo12:.LANCHOR2 ++ mov w1, 6 ++ ldr x0, [x0, 2808] ++ umaddl x8, w8, w1, x0 ++ mov w0, 0 ++ strh w6, [x8, 4] ++ ldp x29, x30, [sp], 16 ++ ret ++ .size update_multiplier_value, .-update_multiplier_value ++ .align 2 ++ .global GetFreeBlockMinEraseCount ++ .type GetFreeBlockMinEraseCount, %function ++GetFreeBlockMinEraseCount: ++ adrp x0, .LANCHOR4+768 ++ ldr x0, [x0, #:lo12:.LANCHOR4+768] ++ cbz x0, .L2236 ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ ldr x2, [x1, 2808] ++ ldr x1, [x1, 2696] ++ sub x0, x0, x2 ++ mov x2, -6148914691236517206 ++ asr x0, x0, 1 ++ movk x2, 0xaaab, lsl 0 ++ mul x0, x0, x2 ++ and x0, x0, 65535 ++ ldrh w0, [x1, x0, lsl 1] ++ ret ++.L2236: ++ mov w0, 0 ++ ret ++ .size GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount ++ .align 2 ++ .global GetFreeBlockMaxEraseCount ++ .type GetFreeBlockMaxEraseCount, %function ++GetFreeBlockMaxEraseCount: ++ adrp x2, .LANCHOR4 ++ add x2, x2, :lo12:.LANCHOR4 ++ and w0, w0, 65535 ++ ldr x1, [x2, 768] ++ cbz x1, .L2244 ++ ldrh w2, [x2, 776] ++ mov w3, 7 ++ mov w6, 6 ++ mov w7, 65535 ++ mul w2, w2, w3 ++ asr w2, w2, 3 ++ cmp w0, w2 ++ csel w0, w2, w0, gt ++ adrp x2, .LANCHOR2 ++ add x3, x2, :lo12:.LANCHOR2 ++ ldr x4, [x3, 2808] ++ mov x3, -6148914691236517206 ++ movk x3, 0xaaab, lsl 0 ++ sub x1, x1, x4 ++ asr x1, x1, 1 ++ mul x1, x1, x3 ++ mov w3, 0 ++ and w1, w1, 65535 ++.L2240: ++ cmp w0, w3 ++ beq .L2243 ++ umull x5, w1, w6 ++ ldrh w5, [x4, x5] ++ cmp w5, w7 ++ bne .L2241 ++.L2243: ++ add x2, x2, :lo12:.LANCHOR2 ++ ubfiz x1, x1, 1, 16 ++ ldr x0, [x2, 2696] ++ ldrh w0, [x0, x1] ++ ret ++.L2241: ++ add w3, w3, 1 ++ mov w1, w5 ++ and w3, w3, 65535 ++ b .L2240 ++.L2244: ++ mov w0, 0 ++ ret ++ .size GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount ++ .align 2 ++ .global FtlPrintInfo2buf ++ .type FtlPrintInfo2buf, %function ++FtlPrintInfo2buf: ++ stp x29, x30, [sp, -112]! ++ adrp x1, .LC74 ++ add x1, x1, :lo12:.LC74 ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ add x22, x23, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ mov x24, x0 ++ stp x25, x26, [sp, 64] ++ add x20, x24, 12 ++ stp x27, x28, [sp, 80] ++ bl strcpy ++ ldr w2, [x22, 1192] ++ mov x0, x20 ++ adrp x1, .LC75 ++ add x1, x1, :lo12:.LC75 ++ bl sprintf ++ add x20, x20, w0, sxtw ++ ldr w2, [x22, 2360] ++ mov x0, x20 ++ adrp x1, .LC76 ++ add x1, x1, :lo12:.LC76 ++ bl sprintf ++ add x20, x20, w0, sxtw ++ adrp x0, .LANCHOR1+3448 ++ ldr w0, [x0, #:lo12:.LANCHOR1+3448] ++ cmp w0, 1 ++ beq .L2246 ++ sub w0, w20, w24 ++.L2245: ++ 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 ++.L2246: ++ add x3, x29, 108 ++ add x2, x29, 104 ++ add x1, x29, 100 ++ add x0, x29, 96 ++ bl NandcGetTimeCfg ++ adrp x26, .LANCHOR4 ++ ldp w4, w5, [x29, 104] ++ adrp x1, .LC77 ++ ldp w2, w3, [x29, 96] ++ add x1, x1, :lo12:.LC77 ++ mov x0, x20 ++ add x25, x26, :lo12:.LANCHOR4 ++ bl sprintf ++ add x21, x20, w0, sxtw ++ mov x0, x21 ++ adrp x1, .LC78 ++ add x1, x1, :lo12:.LC78 ++ bl strcpy ++ ldr w2, [x22, 2924] ++ add x21, x21, 10 ++ mov x0, x21 ++ adrp x1, .LC79 ++ add x1, x1, :lo12:.LC79 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x25, 1068] ++ mov x0, x21 ++ adrp x1, .LC80 ++ add x1, x1, :lo12:.LC80 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2424] ++ mov x0, x21 ++ adrp x1, .LC81 ++ add x1, x1, :lo12:.LC81 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2412] ++ mov x0, x21 ++ adrp x1, .LC82 ++ add x1, x1, :lo12:.LC82 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2408] ++ mov x0, x21 ++ adrp x1, .LC83 ++ add x1, x1, :lo12:.LC83 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2416] ++ mov x0, x21 ++ adrp x1, .LC84 ++ add x1, x1, :lo12:.LC84 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2420] ++ mov x0, x21 ++ adrp x1, .LC85 ++ add x1, x1, :lo12:.LC85 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2404] ++ mov x0, x21 ++ adrp x1, .LC86 ++ add x1, x1, :lo12:.LC86 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x25, 1664] ++ mov x0, x21 ++ adrp x1, .LC87 ++ add x1, x1, :lo12:.LC87 ++ lsr w2, w2, 11 ++ bl sprintf ++ ldr w2, [x25, 1668] ++ add x21, x21, w0, sxtw ++ mov x0, x21 ++ adrp x1, .LC88 ++ add x1, x1, :lo12:.LC88 ++ lsr w2, w2, 11 ++ bl sprintf ++ ldr w2, [x22, 2396] ++ add x21, x21, w0, sxtw ++ mov x0, x21 ++ adrp x1, .LC89 ++ add x1, x1, :lo12:.LC89 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2400] ++ adrp x1, .LC90 ++ add x1, x1, :lo12:.LC90 ++ mov x0, x21 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ bl FtlBbtCalcTotleCnt ++ and w3, w0, 65535 ++ ldrh w2, [x22, 2830] ++ mov x0, x21 ++ adrp x1, .LC91 ++ add x1, x1, :lo12:.LC91 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 776] ++ mov x0, x21 ++ adrp x1, .LC92 ++ add x1, x1, :lo12:.LC92 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2428] ++ mov x0, x21 ++ adrp x1, .LC93 ++ add x1, x1, :lo12:.LC93 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2432] ++ mov x0, x21 ++ adrp x1, .LC94 ++ add x1, x1, :lo12:.LC94 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x25, 1676] ++ mov x0, x21 ++ adrp x1, .LC95 ++ add x1, x1, :lo12:.LC95 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2436] ++ mov x0, x21 ++ adrp x1, .LC96 ++ add x1, x1, :lo12:.LC96 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2440] ++ mov x0, x21 ++ adrp x1, .LC97 ++ add x1, x1, :lo12:.LC97 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2444] ++ mov x0, x21 ++ adrp x1, .LC98 ++ add x1, x1, :lo12:.LC98 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 726] ++ mov x0, x21 ++ adrp x1, .LC99 ++ add x1, x1, :lo12:.LC99 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 724] ++ mov x0, x21 ++ adrp x1, .LC100 ++ add x1, x1, :lo12:.LC100 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 1224] ++ mov x0, x21 ++ adrp x1, .LC101 ++ add x1, x1, :lo12:.LC101 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2376] ++ mov x0, x21 ++ adrp x1, .LC102 ++ add x1, x1, :lo12:.LC102 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2272] ++ mov x0, x21 ++ adrp x1, .LC103 ++ add x1, x1, :lo12:.LC103 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x22, 2998] ++ mov x0, x21 ++ adrp x1, .LC104 ++ add x1, x1, :lo12:.LC104 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x22, 2284] ++ mov x0, x21 ++ adrp x1, .LC105 ++ add x1, x1, :lo12:.LC105 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 1096] ++ mov x0, x21 ++ adrp x1, .LC106 ++ add x1, x1, :lo12:.LC106 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w2, [x22, 2288] ++ mov x0, x21 ++ adrp x1, .LC107 ++ add x1, x1, :lo12:.LC107 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 1072] ++ mov x0, x21 ++ adrp x1, .LC108 ++ add x1, x1, :lo12:.LC108 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x22, 2824] ++ mov x0, x21 ++ adrp x1, .LC109 ++ add x1, x1, :lo12:.LC109 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 786] ++ mov x0, x21 ++ adrp x1, .LC110 ++ add x1, x1, :lo12:.LC110 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x25, 790] ++ mov x0, x21 ++ adrp x1, .LC111 ++ add x1, x1, :lo12:.LC111 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 784] ++ mov x0, x21 ++ adrp x1, .LC112 ++ add x1, x1, :lo12:.LC112 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x25, 792] ++ mov x0, x21 ++ adrp x1, .LC113 ++ add x1, x1, :lo12:.LC113 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 788] ++ mov x0, x21 ++ adrp x1, .LC114 ++ add x1, x1, :lo12:.LC114 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w1, [x25, 784] ++ ldr x0, [x22, 2712] ++ ldrh w2, [x0, x1, lsl 1] ++ mov x0, x21 ++ adrp x1, .LC115 ++ add x1, x1, :lo12:.LC115 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 834] ++ mov x0, x21 ++ adrp x1, .LC116 ++ add x1, x1, :lo12:.LC116 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x25, 838] ++ mov x0, x21 ++ adrp x1, .LC117 ++ add x1, x1, :lo12:.LC117 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 832] ++ mov x0, x21 ++ adrp x1, .LC118 ++ add x1, x1, :lo12:.LC118 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x25, 840] ++ mov x0, x21 ++ adrp x1, .LC119 ++ add x1, x1, :lo12:.LC119 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 836] ++ mov x0, x21 ++ adrp x1, .LC120 ++ add x1, x1, :lo12:.LC120 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w1, [x25, 832] ++ ldr x0, [x22, 2712] ++ ldrh w2, [x0, x1, lsl 1] ++ mov x0, x21 ++ adrp x1, .LC121 ++ add x1, x1, :lo12:.LC121 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 882] ++ mov x0, x21 ++ adrp x1, .LC122 ++ add x1, x1, :lo12:.LC122 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x25, 886] ++ mov x0, x21 ++ adrp x1, .LC123 ++ add x1, x1, :lo12:.LC123 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 880] ++ mov x0, x21 ++ adrp x1, .LC124 ++ add x1, x1, :lo12:.LC124 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x25, 888] ++ mov x0, x21 ++ adrp x1, .LC125 ++ add x1, x1, :lo12:.LC125 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 884] ++ mov x0, x21 ++ adrp x1, .LC126 ++ add x1, x1, :lo12:.LC126 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 1106] ++ mov x0, x21 ++ adrp x1, .LC127 ++ add x1, x1, :lo12:.LC127 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x25, 1110] ++ mov x0, x21 ++ adrp x1, .LC128 ++ add x1, x1, :lo12:.LC128 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 1104] ++ mov x0, x21 ++ adrp x1, .LC129 ++ add x1, x1, :lo12:.LC129 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrb w2, [x25, 1112] ++ mov x0, x21 ++ adrp x1, .LC130 ++ add x1, x1, :lo12:.LC130 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldrh w2, [x25, 1108] ++ mov x0, x21 ++ adrp x1, .LC131 ++ add x1, x1, :lo12:.LC131 ++ bl sprintf ++ add x21, x21, w0, sxtw ++ ldr w5, [x25, 1228] ++ adrp x1, .LC132 ++ ldr w3, [x25, 1232] ++ add x1, x1, :lo12:.LC132 ++ ldr w4, [x25, 1236] ++ ldr w0, [x22, 2096] ++ ldr w2, [x22, 2392] ++ orr w2, w0, w2, lsl 8 ++ mov x0, x21 ++ bl sprintf ++ add x19, x21, w0, sxtw ++ ldr w2, [x25, 1224] ++ mov x0, x19 ++ adrp x1, .LC133 ++ add x1, x1, :lo12:.LC133 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr w2, [x25, 1248] ++ mov x0, x19 ++ adrp x1, .LC134 ++ add x1, x1, :lo12:.LC134 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x22, 2480] ++ mov x0, x19 ++ adrp x1, .LC135 ++ add x1, x1, :lo12:.LC135 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x22, 2482] ++ mov x0, x19 ++ adrp x1, .LC136 ++ add x1, x1, :lo12:.LC136 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr w2, [x22, 2464] ++ mov x0, x19 ++ adrp x1, .LC137 ++ add x1, x1, :lo12:.LC137 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x22, 2484] ++ adrp x1, .LC138 ++ add x1, x1, :lo12:.LC138 ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ bl GetFreeBlockMinEraseCount ++ and w2, w0, 65535 ++ adrp x1, .LC139 ++ mov x0, x19 ++ add x1, x1, :lo12:.LC139 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w0, [x25, 776] ++ bl GetFreeBlockMaxEraseCount ++ and w2, w0, 65535 ++ adrp x1, .LC140 ++ mov x0, x19 ++ add x1, x1, :lo12:.LC140 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w0, [x25, 1104] ++ mov w1, 65535 ++ cmp w0, w1 ++ beq .L2248 ++ ldr x1, [x22, 2712] ++ ubfiz x0, x0, 1, 16 ++ ldrh w2, [x1, x0] ++ mov x0, x19 ++ adrp x1, .LC141 ++ add x1, x1, :lo12:.LC141 ++ bl sprintf ++ add x19, x19, w0, sxtw ++.L2248: ++ mov w0, 0 ++ adrp x22, .LC142 ++ bl List_get_gc_head_node ++ add x21, x23, :lo12:.LANCHOR2 ++ and w3, w0, 65535 ++ add x22, x22, :lo12:.LC142 ++ mov w20, 0 ++ mov w28, 65535 ++ mov w27, 6 ++.L2250: ++ cmp w3, w28 ++ beq .L2249 ++ umull x25, w3, w27 ++ ldr x0, [x21, 2808] ++ ldr x4, [x21, 2696] ++ ubfiz x1, x3, 1, 16 ++ ldr x2, [x21, 2712] ++ add x0, x0, x25 ++ ldrh w6, [x4, x1] ++ ldrh w5, [x0, 4] ++ mov x0, x19 ++ ldrh w4, [x2, x1] ++ mov w2, w20 ++ mov x1, x22 ++ add w20, w20, 1 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 2808] ++ cmp w20, 16 ++ ldrh w3, [x0, x25] ++ bne .L2250 ++.L2249: ++ add x26, x26, :lo12:.LANCHOR4 ++ add x23, x23, :lo12:.LANCHOR2 ++ adrp x21, .LC143 ++ add x21, x21, :lo12:.LC143 ++ mov w20, 0 ++ mov w25, 65535 ++ ldr x0, [x23, 2808] ++ ldr x3, [x26, 768] ++ mov w26, 6 ++ sub x3, x3, x0 ++ mov x0, -6148914691236517206 ++ asr x3, x3, 1 ++ movk x0, 0xaaab, lsl 0 ++ mul x3, x3, x0 ++ and w3, w3, 65535 ++.L2252: ++ cmp w3, w25 ++ beq .L2251 ++ umull x22, w3, w26 ++ ldr x0, [x23, 2808] ++ ldr x2, [x23, 2696] ++ ubfiz x1, x3, 1, 16 ++ add x0, x0, x22 ++ ldrh w5, [x2, x1] ++ mov w2, w20 ++ ldrh w4, [x0, 4] ++ mov x1, x21 ++ mov x0, x19 ++ add w20, w20, 1 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ cmp w20, 4 ++ beq .L2251 ++ ldr x0, [x23, 2808] ++ ldrh w3, [x0, x22] ++ b .L2252 ++.L2251: ++ sub w0, w19, w24 ++ b .L2245 ++ .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 x2, .LC144 ++ adrp x1, .LC48 ++ add x2, x2, :lo12:.LC144 ++ add x29, sp, 0 ++ add x1, x1, :lo12:.LC48 ++ stp x19, x20, [sp, 16] ++ mov x20, x0 ++ bl sprintf ++ add x19, x20, w0, sxtw ++ mov x0, x19 ++ bl FtlPrintInfo2buf ++ add x0, x19, w0, 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, -32]! ++ adrp x9, .LANCHOR4 ++ add x0, x9, :lo12:.LANCHOR4 ++ adrp x8, .LANCHOR2 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ ldr w2, [x0, 1676] ++ add x0, x8, :lo12:.LANCHOR2 ++ ldr w1, [x0, 2444] ++ cmp w2, w1 ++ bcs .L2261 ++ ldrh w2, [x0, 2284] ++ mov x1, 0 ++ ldr x4, [x0, 2696] ++ str wzr, [x0, 2428] ++.L2262: ++ cmp w2, w1 ++ bhi .L2263 ++ add x1, x8, :lo12:.LANCHOR2 ++ add x3, x9, :lo12:.LANCHOR4 ++ ldr w0, [x1, 2428] ++ udiv w2, w0, w2 ++ str w2, [x3, 1676] ++ ldr w2, [x1, 2432] ++ sub w0, w0, w2 ++ ldrh w2, [x1, 2336] ++ udiv w0, w0, w2 ++ str w0, [x1, 2428] ++.L2264: ++ add x0, x8, :lo12:.LANCHOR2 ++ add x1, x9, :lo12:.LANCHOR4 ++ ldr w10, [x0, 2444] ++ ldr w11, [x1, 1676] ++ add w1, w10, 256 ++ cmp w1, w11 ++ bls .L2269 ++ ldr w2, [x0, 2440] ++ add w1, w10, 768 ++ cmp w1, w2 ++ bls .L2269 ++ ldr w0, [x0, 2096] ++ cbnz w0, .L2270 ++.L2272: ++ mov w20, 65535 ++.L2271: ++ mov w0, w20 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2263: ++ ldrh w3, [x4, x1, lsl 1] ++ add x1, x1, 1 ++ ldr w5, [x0, 2428] ++ add w3, w3, w5 ++ str w3, [x0, 2428] ++ b .L2262 ++.L2261: ++ ldr w1, [x0, 2440] ++ cmp w2, w1 ++ bls .L2264 ++ add w1, w1, 1 ++ str w1, [x0, 2440] ++ mov w1, 0 ++.L2266: ++ ldrh w2, [x0, 2284] ++ cmp w1, w2 ++ bcs .L2264 ++ ldr x4, [x0, 2696] ++ ubfiz x3, x1, 1, 32 ++ add w1, w1, 1 ++ ldrh w2, [x4, x3] ++ add w2, w2, 1 ++ strh w2, [x4, x3] ++ b .L2266 ++.L2270: ++ cmp w10, 40 ++ bhi .L2272 ++.L2269: ++ add x0, x9, :lo12:.LANCHOR4 ++ ldrh w0, [x0, 776] ++ add w0, w0, w0, lsl 1 ++ lsr w0, w0, 2 ++ bl GetFreeBlockMaxEraseCount ++ and w6, w0, 65535 ++ add w0, w10, 64 ++ cmp w6, w0 ++ bcs .L2273 ++ cmp w10, 40 ++ bhi .L2272 ++.L2273: ++ add x9, x9, :lo12:.LANCHOR4 ++ ldr x0, [x9, 744] ++ cbz x0, .L2272 ++ add x1, x8, :lo12:.LANCHOR2 ++ mov w4, 65535 ++ mov x13, -6148914691236517206 ++ mov w2, w4 ++ mov w9, w4 ++ movk x13, 0xaaab, lsl 0 ++ ldrh w12, [x1, 2284] ++ mov w14, 6 ++ ldr x5, [x1, 2696] ++ ldr x7, [x1, 2808] ++ mov w1, 0 ++.L2274: ++ ldrh w3, [x0] ++ cmp w3, w9 ++ bne .L2277 ++ mov w20, w2 ++.L2276: ++ mov w0, 65535 ++ cmp w20, w0 ++ beq .L2272 ++ ubfiz x7, x20, 1, 32 ++ ldrh w3, [x5, x7] ++ cmp w10, w3 ++ bcs .L2278 ++ bl GetFreeBlockMinEraseCount ++ cmp w10, w0, uxth ++ bcs .L2278 ++ add x0, x8, :lo12:.LANCHOR2 ++ str w4, [x0, 2444] ++.L2278: ++ cmp w11, w3 ++ bls .L2272 ++ add w0, w3, 128 ++ cmp w6, w0 ++ ble .L2272 ++ add w0, w3, 256 ++ cmp w11, w0 ++ bhi .L2279 ++ add x0, x8, :lo12:.LANCHOR2 ++ add w3, w3, 768 ++ ldr w0, [x0, 2440] ++ cmp w3, w0 ++ bcs .L2272 ++.L2279: ++ add x19, x8, :lo12:.LANCHOR2 ++ ldrh w5, [x5, x7] ++ mov w2, w11 ++ mov w1, w20 ++ ldr x0, [x19, 2712] ++ ldr w3, [x19, 2440] ++ ldrh w4, [x0, x7] ++ adrp x0, .LC145 ++ add x0, x0, :lo12:.LC145 ++ bl printk ++ mov w0, 1 ++ str w0, [x19, 2452] ++ b .L2271 ++.L2277: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ cmp w1, w12 ++ bhi .L2272 ++ ldrh w15, [x0, 4] ++ cbz w15, .L2275 ++ sub x0, x0, x7 ++ asr x0, x0, 1 ++ mul x0, x0, x13 ++ and w20, w0, 65535 ++ and x0, x0, 65535 ++ ldrh w0, [x5, x0, lsl 1] ++ cmp w10, w0 ++ bcs .L2276 ++ cmp w4, w0 ++ bls .L2275 ++ mov w4, w0 ++ mov w2, w20 ++.L2275: ++ umaddl x0, w3, w14, x7 ++ b .L2274 ++ .size GetSwlReplaceBlock, .-GetSwlReplaceBlock ++ .align 2 ++ .global free_data_superblock ++ .type free_data_superblock, %function ++free_data_superblock: ++ and w0, w0, 65535 ++ mov w1, 65535 ++ cmp w0, w1 ++ beq .L2290 ++ stp x29, x30, [sp, -16]! ++ adrp x2, .LANCHOR2+2712 ++ ubfiz x1, x0, 1, 16 ++ add x29, sp, 0 ++ ldr x2, [x2, #:lo12:.LANCHOR2+2712] ++ strh wzr, [x2, x1] ++ bl INSERT_FREE_LIST ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L2290: ++ mov w0, 0 ++ 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, -128]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x19, x21, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr w1, [x19, 2928] ++ cbnz w1, .L2294 ++ adrp x23, .LANCHOR4 ++ add x22, x23, :lo12:.LANCHOR4 ++ mov x20, x0 ++ add x24, x22, 768 ++.L2295: ++ add x0, x23, :lo12:.LANCHOR4 ++ add x1, x0, 880 ++ cmp x20, x1 ++ bne .L2296 ++ ldrh w2, [x0, 776] ++ ldr w3, [x19, 2452] ++ lsr w0, w2, 1 ++ add w4, w0, 1 ++ mul w1, w2, w3 ++ add w1, w4, w1, lsr 2 ++ ldr w4, [x19, 2096] ++ and w1, w1, 65535 ++ cbz w4, .L2297 ++ ldr w4, [x19, 2444] ++ cmp w4, 39 ++ bhi .L2297 ++ cmp w4, 2 ++ bls .L2324 ++ tbz x2, 0, .L2320 ++ cbz w3, .L2324 ++.L2320: ++ mov w1, w0 ++ b .L2297 ++.L2296: ++ ldrb w1, [x20, 8] ++ cmp w1, 1 ++ bne .L2324 ++ ldrh w1, [x19, 2296] ++ cmp w1, 1 ++ beq .L2324 ++ ldrb w1, [x19, 1220] ++ cbnz w1, .L2324 ++ ldr w2, [x19, 2096] ++ ldrh w0, [x0, 776] ++ lsr w1, w0, 3 ++ cbz w2, .L2297 ++ ldr w2, [x19, 2444] ++ cmp w2, 1 ++ bhi .L2297 ++ mov w1, 7 ++ mul w1, w0, w1 ++ lsr w1, w1, 3 ++.L2297: ++ cbz w1, .L2298 ++ sub w1, w1, #1 ++ and w1, w1, 65535 ++.L2298: ++ ldrb w2, [x20, 8] ++ mov x0, x24 ++ bl List_pop_index_node ++ and w27, w0, 65535 ++ ldrh w0, [x22, 776] ++ sub w0, w0, #1 ++ strh w0, [x22, 776] ++ ldrh w0, [x19, 2284] ++ cmp w0, w27 ++ bls .L2295 ++ ldr x0, [x19, 2712] ++ ubfiz x26, x27, 1, 16 ++ ldrh w25, [x0, x26] ++ cbnz w25, .L2295 ++ strh w27, [x20] ++ mov x0, x20 ++ bl make_superblock ++ ldrb w0, [x20, 7] ++ cbz w0, .L2341 ++ add x28, x20, 16 ++ ldrh w5, [x19, 2276] ++ mov x3, x28 ++ mov x0, 0 ++ mov x4, 56 ++ mov w6, 65535 ++.L2301: ++ cmp w5, w0, uxth ++ bhi .L2303 ++ ldr w0, [x19, 2096] ++ cbz w0, .L2304 ++ add x0, x22, 784 ++ cmp x20, x0 ++ bne .L2304 ++ ldr x0, [x19, 2696] ++ ldrh w0, [x0, x26] ++ cmp w0, 40 ++ bls .L2304 ++ strb wzr, [x20, 8] ++.L2304: ++ ldrb w0, [x20, 8] ++ ldr x1, [x19, 2696] ++ cbnz w0, .L2305 ++ ldrh w0, [x1, x26] ++ cbz w0, .L2306 ++ ldrh w2, [x19, 2336] ++ add w0, w0, w2 ++.L2342: ++ strh w0, [x1, x26] ++ mov w1, 0 ++ ldr w0, [x19, 2428] ++ add w0, w0, 1 ++ str w0, [x19, 2428] ++ mov w0, w27 ++ bl ftl_set_blk_mode ++.L2308: ++ ldr x0, [x19, 2696] ++ ldr w1, [x19, 2440] ++ ldrh w0, [x0, x26] ++ cmp w0, w1 ++ bls .L2309 ++ str w0, [x19, 2440] ++.L2309: ++ ldr w2, [x19, 2428] ++ ldr w1, [x19, 2432] ++ ldrh w0, [x19, 2336] ++ madd w0, w0, w2, w1 ++ ldrh w1, [x19, 2284] ++ mov w2, 56 ++ umull x2, w25, w2 ++ udiv w0, w0, w1 ++ ldr x1, [x19, 2688] ++ str w0, [x22, 1676] ++ ldr w0, [x1, 16] ++ add w0, w0, 1 ++ str w0, [x1, 16] ++ mov x0, 0 ++.L2310: ++ cmp x2, x0 ++ bne .L2311 ++ ldrb w0, [x19, 1220] ++ cbz w0, .L2312 ++ ldrb w0, [x20, 8] ++ mov w2, w25 ++ cmp w0, 1 ++ bne .L2313 ++ mov w1, 0 ++.L2343: ++ ldr x0, [x19, 2544] ++ bl FlashEraseBlocks ++.L2312: ++ ldrb w1, [x20, 8] ++ mov w2, w25 ++ ldr x0, [x19, 2544] ++ bl FlashEraseBlocks ++ mov x1, 0 ++ mov w2, 0 ++ mov x4, 56 ++.L2314: ++ cmp w25, w1, uxth ++ bhi .L2316 ++ cmp w2, 0 ++ ble .L2317 ++ mov w0, w27 ++ bl update_multiplier_value ++ bl FtlBbmTblFlush ++.L2317: ++ ldrb w0, [x20, 7] ++ cbnz w0, .L2318 ++.L2341: ++ ldr x0, [x19, 2712] ++ mov w1, -1 ++ strh w1, [x0, x26] ++ b .L2295 ++.L2324: ++ mov w1, 0 ++ b .L2298 ++.L2303: ++ ldr x1, [x19, 2544] ++ madd x2, x0, x4, x1 ++ stp xzr, xzr, [x2, 8] ++ ldrh w2, [x3] ++ cmp w2, w6 ++ beq .L2302 ++ umull x7, w25, w4 ++ add w25, w25, 1 ++ and w25, w25, 65535 ++ lsl w2, w2, 10 ++ add x1, x1, x7 ++ str w2, [x1, 4] ++.L2302: ++ add x0, x0, 1 ++ add x3, x3, 2 ++ b .L2301 ++.L2306: ++ mov w0, 2 ++ b .L2342 ++.L2305: ++ ldrh w0, [x1, x26] ++ add w0, w0, 1 ++ strh w0, [x1, x26] ++ ldr w0, [x19, 2432] ++ add w0, w0, 1 ++ str w0, [x19, 2432] ++ mov w0, w27 ++ bl ftl_set_blk_mode.part.17 ++ b .L2308 ++.L2311: ++ ldr x1, [x19, 2544] ++ add x1, x1, x0 ++ add x0, x0, 56 ++ ldr w3, [x1, 4] ++ and w3, w3, -1024 ++ str w3, [x1, 4] ++ b .L2310 ++.L2313: ++ mov w1, 1 ++ b .L2343 ++.L2316: ++ mul x0, x1, x4 ++ ldr x3, [x19, 2544] ++ add x5, x3, x0 ++ ldr w3, [x3, x0] ++ cmn w3, #1 ++ bne .L2315 ++ add w2, w2, 1 ++ ldr w0, [x5, 4] ++ stp x4, x1, [x29, 104] ++ stp w3, w2, [x29, 120] ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++ ldp w3, w2, [x29, 120] ++ strh w3, [x28] ++ ldp x4, x1, [x29, 104] ++ ldrb w0, [x20, 7] ++ sub w0, w0, #1 ++ strb w0, [x20, 7] ++.L2315: ++ add x1, x1, 1 ++ add x28, x28, 2 ++ b .L2314 ++.L2318: ++ add x21, x21, :lo12:.LANCHOR2 ++ strh wzr, [x20, 2] ++ strb wzr, [x20, 6] ++ ldrh w1, [x21, 2344] ++ strh w27, [x20] ++ mul w0, w0, w1 ++ ldr w1, [x21, 2396] ++ str w1, [x20, 12] ++ and w0, w0, 65535 ++ add w1, w1, 1 ++ strh w0, [x20, 4] ++ str w1, [x21, 2396] ++ ldr x1, [x21, 2712] ++ ldrh w2, [x20] ++ strh w0, [x1, x2, lsl 1] ++.L2294: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 allocate_data_superblock, .-allocate_data_superblock ++ .align 2 ++ .global FtlGcBufInit ++ .type FtlGcBufInit, %function ++FtlGcBufInit: ++ adrp x0, .LANCHOR4+1680 ++ mov w2, 0 ++ mov w8, 24 ++ mov w9, 1 ++ str wzr, [x0, #:lo12:.LANCHOR4+1680] ++ adrp x0, .LANCHOR2 ++ add x3, x0, :lo12:.LANCHOR2 ++ mov w5, 4 ++ mov w10, 56 ++.L2345: ++ ldrh w1, [x3, 2276] ++ cmp w2, w1 ++ bcc .L2346 ++ add x0, x0, :lo12:.LANCHOR2 ++ mov w6, 24 ++ mov w5, 4 ++.L2347: ++ ldr w2, [x0, 2568] ++ cmp w1, w2 ++ bcc .L2348 ++ ret ++.L2346: ++ umull x4, w2, w8 ++ ldr x6, [x3, 2632] ++ ldr x7, [x3, 2600] ++ add x1, x6, x4 ++ str w9, [x1, 16] ++ ldrh w1, [x3, 2354] ++ mul w1, w1, w2 ++ sdiv w1, w1, w5 ++ add x1, x7, w1, sxtw 2 ++ str x1, [x6, x4] ++ ldrh w1, [x3, 2356] ++ ldr x7, [x3, 2632] ++ ldr x11, [x3, 2656] ++ add x6, x7, x4 ++ mul w1, w1, w2 ++ sdiv w1, w1, w5 ++ add x1, x11, w1, sxtw 2 ++ str x1, [x6, 8] ++ ldr x1, [x3, 2552] ++ ldr x4, [x7, x4] ++ nop // between mem op and mult-accumulate ++ umaddl x1, w2, w10, x1 ++ add w2, w2, 1 ++ and w2, w2, 65535 ++ str x4, [x1, 8] ++ ldr x4, [x6, 8] ++ str x4, [x1, 16] ++ b .L2345 ++.L2348: ++ umull x4, w1, w6 ++ ldr x3, [x0, 2632] ++ ldr x7, [x0, 2600] ++ add x2, x3, x4 ++ str wzr, [x2, 16] ++ ldrh w2, [x0, 2354] ++ mul w2, w2, w1 ++ sdiv w2, w2, w5 ++ add x2, x7, w2, sxtw 2 ++ str x2, [x3, x4] ++ ldrh w2, [x0, 2356] ++ ldr x3, [x0, 2632] ++ add x3, x3, x4 ++ ldr x4, [x0, 2656] ++ mul w2, w2, w1 ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ sdiv w2, w2, w5 ++ add x2, x4, w2, sxtw 2 ++ str x2, [x3, 8] ++ b .L2347 ++ .size FtlGcBufInit, .-FtlGcBufInit ++ .align 2 ++ .global FtlVariablesInit ++ .type FtlVariablesInit, %function ++FtlVariablesInit: ++ stp x29, x30, [sp, -32]! ++ mov w0, -1 ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR4 ++ add x20, x20, :lo12:.LANCHOR4 ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ strh w0, [x20, 1696] ++ mov w0, -1 ++ str w0, [x20, 1708] ++ ldr x0, [x19, 2736] ++ ldrh w2, [x19, 2364] ++ strh wzr, [x19, 2920] ++ str wzr, [x19, 2096] ++ lsl w2, w2, 1 ++ str xzr, [x20, 1688] ++ str wzr, [x20, 1700] ++ str wzr, [x20, 1704] ++ bl ftl_memset ++ ldr x0, [x19, 2696] ++ mov w1, 0 ++ ldrh w2, [x19, 2286] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldr x0, [x19, 2680] ++ mov w1, 0 ++ ldrh w2, [x19, 2286] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ mov w2, 48 ++ mov w1, 0 ++ add x0, x20, 696 ++ bl ftl_memset ++ mov w2, 512 ++ mov w1, 0 ++ add x0, x20, 1152 ++ bl ftl_memset ++ bl FtlGcBufInit ++ bl FtlL2PDataInit ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size FtlVariablesInit, .-FtlVariablesInit ++ .align 2 ++ .global FtlGcBufFree ++ .type FtlGcBufFree, %function ++FtlGcBufFree: ++ adrp x2, .LANCHOR2 ++ add x2, x2, :lo12:.LANCHOR2 ++ mov w3, 0 ++ mov w7, 56 ++ mov w9, 24 ++ ldr w8, [x2, 2568] ++ ldr x4, [x2, 2632] ++.L2352: ++ cmp w3, w1 ++ bcs .L2351 ++ umaddl x6, w3, w7, x0 ++ mov w2, 0 ++ b .L2357 ++.L2353: ++ add w2, w2, 1 ++ and w2, w2, 65535 ++.L2357: ++ cmp w2, w8 ++ bcs .L2354 ++ umull x5, w2, w9 ++ add x10, x4, x5 ++ ldr x11, [x4, x5] ++ ldr x5, [x6, 8] ++ cmp x11, x5 ++ bne .L2353 ++ str wzr, [x10, 16] ++.L2354: ++ add w3, w3, 1 ++ and w3, w3, 65535 ++ b .L2352 ++.L2351: ++ ret ++ .size FtlGcBufFree, .-FtlGcBufFree ++ .align 2 ++ .global FtlGcBufAlloc ++ .type FtlGcBufAlloc, %function ++FtlGcBufAlloc: ++ adrp x2, .LANCHOR2 ++ add x2, x2, :lo12:.LANCHOR2 ++ mov w3, 0 ++ mov w7, 24 ++ mov w8, 1 ++ mov w9, 56 ++ ldr w5, [x2, 2568] ++ ldr x6, [x2, 2632] ++.L2359: ++ cmp w3, w1 ++ bcs .L2358 ++ mov w2, 0 ++ b .L2364 ++.L2360: ++ add w2, w2, 1 ++ and w2, w2, 65535 ++.L2364: ++ cmp w2, w5 ++ bcs .L2361 ++ umaddl x4, w2, w7, x6 ++ ldr w10, [x4, 16] ++ cbnz w10, .L2360 ++ umaddl x2, w3, w9, x0 ++ ldr x10, [x4] ++ str w8, [x4, 16] ++ str x10, [x2, 8] ++ ldr x4, [x4, 8] ++ str x4, [x2, 16] ++.L2361: ++ add w3, w3, 1 ++ and w3, w3, 65535 ++ b .L2359 ++.L2358: ++ ret ++ .size FtlGcBufAlloc, .-FtlGcBufAlloc ++ .align 2 ++ .global IsBlkInGcList ++ .type IsBlkInGcList, %function ++IsBlkInGcList: ++ adrp x1, .LANCHOR4+1712 ++ and w0, w0, 65535 ++ ldrh w2, [x1, #:lo12:.LANCHOR4+1712] ++ adrp x1, .LANCHOR2+2504 ++ ldr x3, [x1, #:lo12:.LANCHOR2+2504] ++ mov x1, 0 ++.L2366: ++ cmp w2, w1, uxth ++ bhi .L2368 ++ mov w0, 0 ++ ret ++.L2368: ++ add x1, x1, 1 ++ add x4, x3, x1, lsl 1 ++ ldrh w4, [x4, -2] ++ cmp w4, w0 ++ bne .L2366 ++ mov w0, 1 ++ ret ++ .size IsBlkInGcList, .-IsBlkInGcList ++ .align 2 ++ .global FtlGcUpdatePage ++ .type FtlGcUpdatePage, %function ++FtlGcUpdatePage: ++ mov w6, w0 ++ mov w9, w1 ++ mov w8, w2 ++ stp x29, x30, [sp, -16]! ++ lsr w0, w0, 10 ++ add x29, sp, 0 ++ bl P2V_block_in_plane ++ and w10, w0, 65535 ++ adrp x3, .LANCHOR4 ++ adrp x4, .LANCHOR2 ++ add x1, x3, :lo12:.LANCHOR4 ++ add x2, x4, :lo12:.LANCHOR2 ++ mov x5, 0 ++ ldrh w1, [x1, 1712] ++ ldr x7, [x2, 2504] ++.L2371: ++ and w2, w5, 65535 ++ cmp w2, w1 ++ bcc .L2373 ++ bne .L2372 ++ and x5, x5, 65535 ++ strh w0, [x7, x5, lsl 1] ++ add x5, x3, :lo12:.LANCHOR4 ++ ldrh w0, [x5, 1712] ++ add w0, w0, 1 ++ strh w0, [x5, 1712] ++ b .L2372 ++.L2373: ++ add x5, x5, 1 ++ add x2, x7, x5, lsl 1 ++ ldrh w2, [x2, -2] ++ cmp w2, w10 ++ bne .L2371 ++.L2372: ++ add x0, x3, :lo12:.LANCHOR4 ++ add x3, x4, :lo12:.LANCHOR2 ++ mov w1, 12 ++ ldrh w5, [x0, 1714] ++ ldr x4, [x3, 2512] ++ umull x5, w5, w1 ++ add x4, x4, x5 ++ str w9, [x4, 4] ++ ldr x1, [x3, 2512] ++ add x3, x1, x5 ++ str w8, [x3, 8] ++ str w6, [x1, x5] ++ ldrh w1, [x0, 1714] ++ add w1, w1, 1 ++ strh w1, [x0, 1714] ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FtlGcUpdatePage, .-FtlGcUpdatePage ++ .align 2 ++ .global FtlGcPageVarInit ++ .type FtlGcPageVarInit, %function ++FtlGcPageVarInit: ++ stp x29, x30, [sp, -32]! ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ mov w1, 255 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ strh wzr, [x0, 1712] ++ strh wzr, [x0, 1714] ++ ldr x0, [x19, 2504] ++ ldrh w2, [x19, 2348] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldrh w2, [x19, 2348] ++ mov w0, 12 ++ mov w1, 255 ++ mul w2, w2, w0 ++ ldr x0, [x19, 2512] ++ 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, -176]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR1 ++ add x0, x22, :lo12:.LANCHOR1 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ str w1, [x29, 104] ++ ldrh w26, [x0, 3452] ++ mov w0, 65535 ++ cmp w26, w0 ++ beq .L2408 ++ cbnz w26, .L2378 ++.L2379: ++ bl FtlGcPageVarInit ++ b .L2380 ++.L2408: ++ mov w26, 0 ++.L2378: ++ adrp x0, .LANCHOR2+2344 ++ ldr w1, [x29, 104] ++ ldrh w0, [x0, #:lo12:.LANCHOR2+2344] ++ cmp w0, w1 ++ beq .L2379 ++.L2380: ++ adrp x28, .LANCHOR2 ++ add x27, x28, :lo12:.LANCHOR2 ++ mov w0, -1 ++ mov w23, 0 ++ str w0, [x29, 108] ++.L2381: ++ ldrh w1, [x19] ++ mov w0, 65535 ++ strb wzr, [x19, 8] ++ cmp w1, w0 ++ beq .L2409 ++.L2405: ++ add x0, x28, :lo12:.LANCHOR2 ++ add x6, x19, 16 ++ mov w20, 0 ++ mov w11, 65535 ++ mov w12, 56 ++ mov w7, 4 ++ ldrh w9, [x0, 2354] ++ ldrh w10, [x0, 2356] ++ ldrh w0, [x0, 2276] ++ add x0, x0, 8 ++ add x0, x19, x0, lsl 1 ++.L2383: ++ cmp x6, x0 ++ bne .L2385 ++ ldr x0, [x27, 2520] ++ mov w2, 0 ++ mov w1, w20 ++ adrp x24, .LANCHOR0 ++ add x24, x24, :lo12:.LANCHOR0 ++ mov x21, 0 ++ bl FlashReadPages ++ mov w0, 56 ++ umull x0, w20, w0 ++ str x0, [x29, 96] ++.L2386: ++ ldr x0, [x29, 96] ++ cmp x0, x21 ++ bne .L2403 ++ ldr w0, [x29, 104] ++ add w4, w26, 1 ++ add w23, w23, 1 ++ and w26, w4, 65535 ++ cmp w0, w23 ++ bls .L2404 ++.L2406: ++ ldrh w0, [x27, 2344] ++ cmp w0, w26 ++ bhi .L2405 ++.L2409: ++ mov w2, 0 ++ b .L2382 ++.L2385: ++ ldrh w1, [x6] ++ cmp w1, w11 ++ beq .L2384 ++ umull x8, w20, w12 ++ ldr x5, [x27, 2520] ++ orr w1, w26, w1, lsl 10 ++ add x5, x5, x8 ++ str w1, [x5, 4] ++ mul w1, w20, w9 ++ ldr x2, [x27, 2520] ++ ldr x5, [x27, 2600] ++ sdiv w1, w1, w7 ++ add x2, x2, x8 ++ add x1, x5, w1, sxtw 2 ++ str x1, [x2, 8] ++ mul w1, w20, w10 ++ ldr x5, [x27, 2656] ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ sdiv w1, w1, w7 ++ add x1, x5, w1, sxtw 2 ++ str x1, [x2, 16] ++.L2384: ++ add x6, x6, 2 ++ b .L2383 ++.L2403: ++ ldr x6, [x27, 2520] ++ add x5, x6, x21 ++ ldr w25, [x5, 4] ++ lsr w0, w25, 10 ++ bl P2V_plane ++ and w2, w0, 65535 ++ ldr w0, [x6, x21] ++ ldr x20, [x5, 16] ++ cbnz w0, .L2387 ++ ldrh w1, [x20] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2388 ++.L2391: ++ ldrb w0, [x27, 1220] ++ adrp x14, .LANCHOR4 ++ cbz w0, .L2421 ++ add x14, x14, :lo12:.LANCHOR4 ++ mov w0, 1 ++ str w0, [x14, 1704] ++.L2382: ++ add x22, x22, :lo12:.LANCHOR1 ++ strh w26, [x19, 2] ++ strb w2, [x19, 6] ++ mov w0, -1 ++ mov w1, w26 ++ strh w0, [x22, 3452] ++ mov x0, x19 ++ bl ftl_sb_update_avl_pages ++ b .L2377 ++.L2388: ++ ldr w0, [x20, 8] ++ ldr w1, [x27, 2924] ++ cmp w0, w1 ++ bhi .L2391 ++ ldrb w1, [x24, 88] ++ cbnz w1, .L2394 ++.L2395: ++ ldp w2, w0, [x20, 8] ++ mov w1, w25 ++ add x21, x21, 56 ++ bl FtlGcUpdatePage ++ b .L2386 ++.L2421: ++ ldr x0, [x27, 2712] ++ ldrh w1, [x19] ++ strh wzr, [x0, x1, lsl 1] ++ ldrh w0, [x19] ++ bl INSERT_FREE_LIST ++ add x14, x14, :lo12:.LANCHOR4 ++ mov w0, -1 ++ strh w0, [x19] ++ strh w0, [x14, 1104] ++.L2424: ++ bl FtlGcPageVarInit ++ mov w26, 0 ++ b .L2381 ++.L2394: ++ add x1, x29, 116 ++ mov w2, 0 ++ bl log2phys ++ ldr w0, [x20, 12] ++ ldr w1, [x29, 116] ++ cmp w0, w1 ++ bne .L2395 ++ cmn w0, #1 ++ beq .L2395 ++ str w0, [x29, 124] ++ mov w2, 0 ++ ldr x0, [x27, 2624] ++ mov w1, 1 ++ str x0, [x29, 128] ++ ldr x0, [x27, 2648] ++ str x0, [x29, 136] ++ add x0, x29, 120 ++ bl FlashReadPages ++ ldrh w1, [x27, 2350] ++ mov x0, 0 ++ ldr x2, [x27, 2520] ++ ldr x6, [x29, 128] ++ ubfiz x1, x1, 9, 16 ++ add x2, x2, x21 ++.L2396: ++ cmp x0, x1 ++ beq .L2395 ++ ldr x7, [x2, 8] ++ ldr w8, [x7, x0] ++ add x0, x0, 4 ++ add x7, x6, x0 ++ ldr w7, [x7, -4] ++ cmp w8, w7 ++ beq .L2396 ++ ldrh w1, [x19] ++ adrp x0, .LC146 ++ ldr w2, [x29, 124] ++ add x0, x0, :lo12:.LC146 ++ bl printk ++ ldrh w1, [x19] ++ ldr x0, [x27, 2712] ++ strh wzr, [x0, x1, lsl 1] ++ ldrh w0, [x19] ++ bl INSERT_FREE_LIST ++ adrp x1, .LANCHOR4+1104 ++ mov w0, -1 ++ strh w0, [x19] ++ strh w0, [x1, #:lo12:.LANCHOR4+1104] ++ b .L2424 ++.L2387: ++ ldrh w1, [x19] ++ mov w2, w25 ++ adrp x0, .LC147 ++ add x0, x0, :lo12:.LC147 ++ bl printk ++ ldr w1, [x27, 2096] ++ ldrh w0, [x19] ++ cbnz w1, .L2399 ++ ldrb w1, [x27, 1220] ++ cbz w1, .L2400 ++.L2399: ++ ldr x2, [x27, 2696] ++ ubfiz x1, x0, 1, 16 ++ ldrh w1, [x2, x1] ++ cmp w1, 159 ++ bls .L2401 ++.L2400: ++ ldr x1, [x27, 2520] ++ ldr w1, [x1, x21] ++ cmn w1, #1 ++ bne .L2402 ++.L2401: ++ ldr x1, [x27, 2520] ++ add x21, x1, x21 ++ ldr w1, [x21, 4] ++ str w1, [x29, 108] ++.L2402: ++ ldr x1, [x27, 2712] ++ ubfiz x0, x0, 1, 16 ++ strh wzr, [x1, x0] ++ ldrh w0, [x19] ++ bl INSERT_FREE_LIST ++ mov w0, -1 ++ strh w0, [x19] ++ b .L2424 ++.L2404: ++ add x1, x22, :lo12:.LANCHOR1 ++ mov w2, 65535 ++ ldrh w0, [x1, 3452] ++ cmp w0, w2 ++ beq .L2406 ++ add w0, w0, w23 ++ strh w0, [x1, 3452] ++ ldrh w0, [x27, 2344] ++ cmp w0, w26 ++ bls .L2406 ++.L2377: ++ ldr w0, [x29, 108] ++ 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 FtlGcScanTempBlk, .-FtlGcScanTempBlk ++ .align 2 ++ .global FtlGcRefreshOpenBlock ++ .type FtlGcRefreshOpenBlock, %function ++FtlGcRefreshOpenBlock: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ and w20, w0, 65535 ++ ldrh w0, [x19, 2472] ++ cmp w0, w20 ++ beq .L2427 ++ ldrh w0, [x19, 2474] ++ cmp w0, w20 ++ beq .L2427 ++ ldrh w0, [x19, 2476] ++ cmp w0, w20 ++ beq .L2427 ++ ldrh w0, [x19, 2478] ++ cmp w0, w20 ++ beq .L2427 ++ mov w1, w20 ++ adrp x0, .LC148 ++ add x0, x0, :lo12:.LC148 ++ bl printk ++ ldrh w1, [x19, 2472] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2429 ++ strh w20, [x19, 2472] ++.L2427: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2429: ++ ldrh w1, [x19, 2474] ++ cmp w1, w0 ++ bne .L2430 ++ strh w20, [x19, 2474] ++ b .L2427 ++.L2430: ++ ldrh w1, [x19, 2476] ++ cmp w1, w0 ++ bne .L2431 ++ strh w20, [x19, 2476] ++ b .L2427 ++.L2431: ++ ldrh w1, [x19, 2478] ++ cmp w1, w0 ++ bne .L2427 ++ strh w20, [x19, 2478] ++ b .L2427 ++ .size FtlGcRefreshOpenBlock, .-FtlGcRefreshOpenBlock ++ .align 2 ++ .global FtlGcRefreshBlock ++ .type FtlGcRefreshBlock, %function ++FtlGcRefreshBlock: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ add x19, x19, :lo12:.LANCHOR2 ++ and w20, w0, 65535 ++ str x21, [sp, 32] ++ ldrh w0, [x19, 2472] ++ cmp w0, w20 ++ beq .L2440 ++ ldrh w0, [x19, 2474] ++ cmp w0, w20 ++ beq .L2440 ++ ldrh w0, [x19, 2476] ++ cmp w0, w20 ++ beq .L2440 ++ ldrh w0, [x19, 2478] ++ mov w21, 0 ++ cmp w0, w20 ++ beq .L2433 ++ mov w1, w20 ++ adrp x0, .LC148 ++ add x0, x0, :lo12:.LC148 ++ bl printk ++ ldrh w1, [x19, 2472] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2435 ++ strh w20, [x19, 2472] ++.L2433: ++ mov w0, w21 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2435: ++ ldrh w1, [x19, 2474] ++ cmp w1, w0 ++ bne .L2436 ++ strh w20, [x19, 2474] ++ b .L2433 ++.L2436: ++ ldrh w1, [x19, 2476] ++ cmp w1, w0 ++ bne .L2437 ++ strh w20, [x19, 2476] ++ b .L2433 ++.L2437: ++ ldrh w1, [x19, 2478] ++ cmp w1, w0 ++ bne .L2442 ++ strh w20, [x19, 2478] ++ b .L2433 ++.L2440: ++ mov w21, 0 ++ b .L2433 ++.L2442: ++ mov w21, -1 ++ b .L2433 ++ .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] ++ adrp x19, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ add x22, x19, :lo12:.LANCHOR2 ++ and w20, w0, 65535 ++ str x23, [sp, 48] ++ mov w0, w20 ++ bl P2V_block_in_plane ++ ldrh w1, [x22, 2486] ++ mov w2, w20 ++ and w21, w0, 65535 ++ adrp x0, .LC149 ++ add x0, x0, :lo12:.LC149 ++ bl printk ++ mov w0, w21 ++ bl FtlGcRefreshBlock ++ ldr w0, [x22, 2096] ++ cbz w0, .L2445 ++ ldr x2, [x22, 2696] ++ ubfiz x0, x21, 1, 16 ++ ldrh w1, [x2, x0] ++ cmp w1, 39 ++ bls .L2445 ++ sub w1, w1, #40 ++ strh w1, [x2, x0] ++.L2445: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov x2, 0 ++ ldrh w1, [x0, 2486] ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x0, x0, 1720 ++.L2446: ++ cmp w1, w2, uxth ++ bhi .L2448 ++ cmp w1, 15 ++ bhi .L2447 ++ add x19, x19, :lo12:.LANCHOR2 ++ add w0, w1, 1 ++ strh w0, [x19, 2486] ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x0, x0, 1720 ++ strh w20, [x0, w1, sxtw 1] ++ b .L2447 ++.L2448: ++ add x2, x2, 1 ++ add x3, x0, x2, lsl 1 ++ ldrh w3, [x3, -2] ++ cmp w3, w20 ++ bne .L2446 ++.L2447: ++ 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, 2486] ++ cbz w1, .L2454 ++ ldrh w3, [x0, 2472] ++ mov w2, 65535 ++ cmp w3, w2 ++ bne .L2454 ++ ldrh w2, [x0, 2490] ++ cmp w2, w1 ++ bcc .L2455 ++ strh wzr, [x0, 2490] ++.L2455: ++ add x19, x19, :lo12:.LANCHOR2 ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x0, x0, 1720 ++ ldrh w1, [x19, 2490] ++ ldrh w0, [x0, x1, lsl 1] ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ ldrh w0, [x19, 2490] ++ add w0, w0, 1 ++ strh w0, [x19, 2490] ++.L2454: ++ 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 x23, x24, [sp, 48] ++ and w23, w0, 65535 ++ adrp x0, .LANCHOR2 ++ add x1, x0, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ stp x25, x26, [sp, 64] ++ str x27, [sp, 80] ++ ldrh w1, [x1, 2486] ++ cbz w1, .L2461 ++ adrp x22, .LANCHOR4 ++ add x21, x22, :lo12:.LANCHOR4 ++ mov x27, x0 ++ add x21, x21, 1720 ++ mov w20, 0 ++.L2462: ++ add x0, x27, :lo12:.LANCHOR2 ++ ldrh w1, [x0, 2276] ++ cmp w1, w20 ++ bhi .L2468 ++ bl FtlGcReFreshBadBlk ++.L2461: ++ 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 ++.L2468: ++ add x0, x0, 2304 ++ mov w1, w23 ++ mov w19, 0 ++ ldrb w0, [x0, w20, sxtw] ++ bl V2P_block ++ and w24, w0, 65535 ++.L2463: ++ add x25, x27, :lo12:.LANCHOR2 ++ ldrh w0, [x25, 2486] ++ cmp w0, w19 ++ bhi .L2467 ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L2462 ++.L2467: ++ add x0, x22, :lo12:.LANCHOR4 ++ add w26, w19, 1 ++ add x0, x0, 1720 ++ ldrh w0, [x0, w19, sxtw 1] ++ cmp w0, w24 ++ bne .L2464 ++ mov w1, w24 ++ adrp x0, .LC150 ++ add x0, x0, :lo12:.LC150 ++ bl printk ++ mov w0, w24 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ ldrh w0, [x25, 2486] ++ mov w1, w26 ++.L2465: ++ cmp w19, w0 ++ bcc .L2466 ++ add x1, x27, :lo12:.LANCHOR2 ++ sub w0, w0, #1 ++ strh w0, [x1, 2486] ++.L2464: ++ and w19, w26, 65535 ++ b .L2463 ++.L2466: ++ sub w2, w1, #1 ++ ldrh w3, [x21, w1, sxtw 1] ++ add w19, w19, 1 ++ add w1, w1, 1 ++ and w19, w19, 65535 ++ strh w3, [x21, w2, sxtw 1] ++ b .L2465 ++ .size FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk ++ .align 2 ++ .global update_vpc_list ++ .type update_vpc_list, %function ++update_vpc_list: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR2+2712 ++ and w14, w0, 65535 ++ add x29, sp, 0 ++ ldr x1, [x1, #:lo12:.LANCHOR2+2712] ++ ubfiz x0, x14, 1, 16 ++ ldrh w0, [x1, x0] ++ cbnz w0, .L2474 ++ adrp x8, .LANCHOR4 ++ add x0, x8, :lo12:.LANCHOR4 ++ ldrh w1, [x0, 1104] ++ cmp w1, w14 ++ bne .L2475 ++ mov w1, -1 ++ strh w1, [x0, 1104] ++.L2476: ++ add x8, x8, :lo12:.LANCHOR4 ++ mov w1, w14 ++ add x0, x8, 744 ++ bl List_remove_node ++ ldrh w0, [x8, 760] ++ sub w0, w0, #1 ++ strh w0, [x8, 760] ++ mov w0, w14 ++ bl free_data_superblock ++ mov w0, w14 ++ bl FtlGcFreeBadSuperBlk ++ mov w0, 1 ++.L2473: ++ ldp x29, x30, [sp], 16 ++ ret ++.L2475: ++ ldrh w1, [x0, 784] ++ cmp w1, w14 ++ beq .L2480 ++ ldrh w1, [x0, 832] ++ cmp w1, w14 ++ beq .L2480 ++ ldrh w0, [x0, 880] ++ cmp w0, w14 ++ bne .L2476 ++.L2480: ++ mov w0, 0 ++ b .L2473 ++.L2474: ++ mov w0, w14 ++ bl List_update_data_list ++ b .L2480 ++ .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]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 65535 ++ stp x21, x22, [sp, 32] ++ mov w0, 65535 ++ adrp x20, .LANCHOR4 ++ cmp w19, w0 ++ beq .L2483 ++ adrp x21, .LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR2 ++ ubfiz x22, x19, 1, 16 ++ ldr x1, [x21, 2712] ++ ldrh w0, [x1, x22] ++ cbnz w0, .L2484 ++ mov w1, w19 ++ mov w2, 0 ++ adrp x0, .LC151 ++ add x0, x0, :lo12:.LC151 ++ bl printk ++ add x20, x20, :lo12:.LANCHOR4 ++ ldr x0, [x21, 2712] ++ add x6, x20, 768 ++ mov w1, 32 ++ strh w1, [x0, x22] ++ mov w1, w19 ++ mov x0, x6 ++ bl test_node_in_list ++ cbz w0, .L2485 ++ mov w1, w19 ++ mov x0, x6 ++ bl List_remove_node ++ ldrh w0, [x20, 776] ++ sub w0, w0, #1 ++ strh w0, [x20, 776] ++ mov w0, w19 ++ bl INSERT_DATA_LIST ++ ldr x0, [x21, 2712] ++ mov w1, w19 ++ ldrh w2, [x0, x22] ++ adrp x0, .LC152 ++ add x0, x0, :lo12:.LC152 ++ bl printk ++.L2485: ++ mov w0, w19 ++ bl FtlGcRefreshBlock ++.L2488: ++ mov w0, 0 ++ b .L2482 ++.L2484: ++ sub w0, w0, #1 ++ strh w0, [x1, x22] ++.L2483: ++ add x20, x20, :lo12:.LANCHOR4 ++ mov w1, 65535 ++ ldrh w0, [x20, 1696] ++ cmp w0, w1 ++ bne .L2487 ++ strh w19, [x20, 1696] ++ b .L2488 ++.L2487: ++ cmp w19, w0 ++ beq .L2488 ++ bl update_vpc_list ++ cmp w0, 0 ++ cset w0, ne ++ strh w19, [x20, 1696] ++.L2482: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ 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, -176]! ++ mov w2, 65535 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldrh w0, [x0] ++ cmp w0, w2 ++ beq .L2639 ++ ldrh w0, [x19, 2] ++ adrp x20, .LANCHOR2 ++ str w0, [x29, 156] ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr w1, [x29, 156] ++ ldrh w0, [x0, 2344] ++ cmp w0, w1 ++ bne .L2496 ++ strh wzr, [x19, 4] ++.L2646: ++ strb wzr, [x19, 6] ++.L2639: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L2496: ++ ldrh w0, [x19, 16] ++ mov w1, 0 ++.L2497: ++ cmp w0, w2 ++ beq .L2498 ++ ldrb w1, [x19, 6] ++ str w1, [x29, 140] ++ ldrb w1, [x19, 8] ++ cmp w1, 1 ++ bne .L2499 ++ bl FtlGetLastWrittenPage ++ mov w21, w0 ++ cmn w0, #1 ++ beq .L2500 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 1220] ++ cbnz w0, .L2572 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ add x0, x0, 144 ++ ldrh w23, [x0, w21, sxtw 1] ++.L2501: ++ add x0, x20, :lo12:.LANCHOR2 ++ add x1, x19, 16 ++ str x1, [x29, 144] ++ add x3, x19, 16 ++ mov w28, 0 ++ mov w8, 65535 ++ ldrh w1, [x0, 2276] ++ mov w9, 56 ++ ldrh w7, [x0, 2356] ++ mov w10, 4 ++ add x1, x1, 8 ++ add x1, x19, x1, lsl 1 ++.L2502: ++ cmp x3, x1 ++ bne .L2504 ++ ldrb w0, [x19, 8] ++ cmp w0, 1 ++ bne .L2573 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 1220] ++ cmp w0, 0 ++ cset w0, ne ++ str w0, [x29, 152] ++.L2505: ++ add x24, x20, :lo12:.LANCHOR2 ++ ldr w2, [x29, 152] ++ mov w1, w28 ++ adrp x25, .LC153 ++ adrp x26, .LANCHOR4 ++ add x25, x25, :lo12:.LC153 ++ ldr x0, [x24, 2520] ++ add x26, x26, :lo12:.LANCHOR4 ++ mov x27, 0 ++ bl FlashReadPages ++ ldr w22, [x24, 2400] ++ mov w4, 65535 ++ sub w22, w22, #1 ++.L2506: ++ and w0, w27, 65535 ++ cmp w28, w0 ++ bhi .L2511 ++ bne .L2509 ++ add x0, x20, :lo12:.LANCHOR2 ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ ldr x0, [x0, 2520] ++ ldr w0, [x0, 4] ++.L2641: ++ lsr w0, w0, 10 ++ bl P2V_plane ++ ldrb w1, [x19, 8] ++ and w28, w0, 65535 ++ cmp w1, 1 ++ bne .L2513 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 1220] ++ cbnz w0, .L2513 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ add x0, x0, 144 ++ ldrh w21, [x0, w21, sxtw 1] ++.L2513: ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 2344] ++ cmp w0, w21 ++ bne .L2514 ++ strh w21, [x19, 2] ++ strb wzr, [x19, 6] ++ strh wzr, [x19, 4] ++.L2514: ++ ldrh w0, [x29, 140] ++ str w0, [x29, 140] ++ ldr w0, [x29, 156] ++ cmp w21, w0 ++ ldr w0, [x29, 140] ++ ccmp w28, w0, 0, eq ++ bne .L2515 ++.L2647: ++ mov w2, w28 ++ mov w1, w21 ++ mov x0, x19 ++ bl ftl_sb_update_avl_pages ++ b .L2639 ++.L2498: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ add x0, x19, w1, sxtw 1 ++ ldrh w0, [x0, 16] ++ b .L2497 ++.L2499: ++ mov w1, 0 ++ bl FtlGetLastWrittenPage ++ mov w21, w0 ++ cmn w0, #1 ++ beq .L2500 ++.L2572: ++ mov w23, w21 ++ b .L2501 ++.L2500: ++ strh wzr, [x19, 2] ++ b .L2646 ++.L2504: ++ ldrh w2, [x3] ++ cmp w2, w8 ++ beq .L2503 ++ umull x6, w28, w9 ++ ldr x5, [x0, 2520] ++ orr w2, w23, w2, lsl 10 ++ add x5, x5, x6 ++ str w2, [x5, 4] ++ mul w2, w28, w7 ++ add w28, w28, 1 ++ ldr x4, [x0, 2520] ++ and w28, w28, 65535 ++ ldr x5, [x0, 2656] ++ sdiv w2, w2, w10 ++ add x4, x4, x6 ++ add x2, x5, w2, sxtw 2 ++ stp xzr, x2, [x4, 8] ++.L2503: ++ add x3, x3, 2 ++ b .L2502 ++.L2573: ++ str wzr, [x29, 152] ++ b .L2505 ++.L2511: ++ mov x0, 56 ++ ldr x3, [x24, 2520] ++ mul x0, x27, x0 ++ add x1, x3, x0 ++ ldr w0, [x3, x0] ++ cbnz w0, .L2507 ++ ldr x5, [x1, 16] ++ ldr w3, [x5, 4] ++ cmn w3, #1 ++ beq .L2508 ++ ldr w1, [x24, 2400] ++ mov w0, w3 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2508 ++ add w3, w3, 1 ++ str w3, [x24, 2400] ++.L2508: ++ ldr w0, [x5] ++ cmn w0, #1 ++ bne .L2510 ++.L2509: ++ add x0, x20, :lo12:.LANCHOR2 ++ and x27, x27, 65535 ++ mov x1, 56 ++ and w21, w21, 65535 ++ ldr x0, [x0, 2520] ++ madd x27, x27, x1, x0 ++ ldr w0, [x27, 4] ++ b .L2641 ++.L2507: ++ ldr w1, [x1, 4] ++ mov x0, x25 ++ bl printk ++ ldrh w0, [x19] ++ and w4, w23, 65535 ++ strh w0, [x26, 1754] ++.L2510: ++ add x27, x27, 1 ++ b .L2506 ++.L2515: ++ mov w0, 65535 ++ adrp x27, .LANCHOR4 ++ cmp w4, w0 ++ bne .L2516 ++ cbnz w1, .L2517 ++.L2516: ++ add x0, x27, :lo12:.LANCHOR4 ++ and w6, w23, 65535 ++ ldr w1, [x0, 1708] ++ cmn w1, #1 ++ bne .L2518 ++ str w22, [x0, 1708] ++.L2518: ++ add x0, x27, :lo12:.LANCHOR4 ++ ldr w5, [x0, 1708] ++ ldr w0, [x29, 156] ++ add w0, w0, 7 ++ cmp w0, w23, uxth ++ bge .L2574 ++ sub w23, w6, #7 ++ and w23, w23, 65535 ++.L2519: ++ adrp x4, .LANCHOR0 ++ add x4, x4, :lo12:.LANCHOR0 ++ mov w26, -1 ++ add x3, x20, :lo12:.LANCHOR2 ++ mov w25, w26 ++ add x4, x4, 1168 ++.L2520: ++ cmp w23, w6 ++ bhi .L2533 ++ ldrh w0, [x3, 2276] ++ mov w24, 0 ++ mov w9, 65535 ++ mov w8, 56 ++ add x0, x0, 8 ++ ldr x1, [x29, 144] ++ add x0, x19, x0, lsl 1 ++ b .L2534 ++.L2574: ++ ldr w23, [x29, 156] ++ b .L2519 ++.L2522: ++ ldrh w2, [x1] ++ cmp w2, w9 ++ beq .L2521 ++ ldr x7, [x3, 2520] ++ orr w2, w23, w2, lsl 10 ++ umaddl x7, w24, w8, x7 ++ add w24, w24, 1 ++ and w24, w24, 65535 ++ str w2, [x7, 4] ++.L2521: ++ add x1, x1, 2 ++.L2534: ++ cmp x0, x1 ++ bne .L2522 ++ ldr w2, [x29, 152] ++ mov w1, w24 ++ ldr x0, [x3, 2520] ++ str x4, [x29, 104] ++ str w5, [x29, 112] ++ str w6, [x29, 120] ++ str x3, [x29, 128] ++ bl FlashReadPages ++ ldr x3, [x29, 128] ++ mov w1, 56 ++ ldr w5, [x29, 112] ++ add x2, x27, :lo12:.LANCHOR4 ++ ldr w6, [x29, 120] ++ sxtw x9, w23 ++ ldr x4, [x29, 104] ++ ldr x0, [x3, 2520] ++ ldrb w8, [x3, 1220] ++ nop // between mem op and mult-accumulate ++ umaddl x24, w24, w1, x0 ++ mov w1, 65535 ++.L2523: ++ cmp x24, x0 ++ bne .L2532 ++ add w23, w23, 1 ++ and w23, w23, 65535 ++ b .L2520 ++.L2532: ++ ldr w7, [x0] ++ cbnz w7, .L2524 ++ ldr x7, [x0, 16] ++ ldrh w10, [x7] ++ cmp w10, w1 ++ beq .L2525 ++ ldr w7, [x7, 4] ++ cmn w7, #1 ++ beq .L2525 ++ ldr w25, [x2, 1708] ++ cmn w26, #1 ++ str w7, [x2, 1708] ++ bne .L2525 ++ ldrh w7, [x4, x9, lsl 1] ++ cmp w7, w1 ++ bne .L2526 ++ cbz w8, .L2525 ++.L2526: ++ cmp w22, w25 ++ csel w26, w26, w25, eq ++.L2525: ++ add x0, x0, 56 ++ b .L2523 ++.L2524: ++ add x0, x27, :lo12:.LANCHOR4 ++ ldrh w1, [x19] ++ strh w1, [x0, 1754] ++ ldrb w1, [x19, 8] ++ cbnz w1, .L2517 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x1, x1, 1168 ++ ldrh w2, [x1, w23, sxtw 1] ++ mov w1, 65535 ++ cmp w2, w1 ++ bne .L2528 ++ cmn w26, #1 ++ beq .L2529 ++ str w26, [x0, 1708] ++.L2517: ++ add x0, x27, :lo12:.LANCHOR4 ++ ldr w24, [x29, 156] ++ add x20, x20, :lo12:.LANCHOR2 ++ mov w1, 1 ++ strh w1, [x0, 1756] ++.L2535: ++ ldrh w0, [x20, 2276] ++ mov w23, 0 ++ ldrb w6, [x20, 1220] ++ mov w7, 65535 ++ add x0, x0, 8 ++ ldr x1, [x29, 144] ++ add x0, x19, x0, lsl 1 ++.L2536: ++ cmp x0, x1 ++ bne .L2539 ++ ldr w2, [x29, 152] ++ mov w1, w23 ++ ldr x0, [x20, 2520] ++ mov x25, 0 ++ bl FlashReadPages ++ mov w0, 56 ++ umull x0, w23, w0 ++ add x23, x27, :lo12:.LANCHOR4 ++ str x0, [x29, 120] ++ adrp x0, .LC155 ++ add x0, x0, :lo12:.LC155 ++ str x0, [x29, 112] ++ add x0, x23, 1768 ++ str x0, [x29, 104] ++.L2540: ++ ldr x0, [x29, 120] ++ cmp x0, x25 ++ bne .L2565 ++ ldrb w0, [x19, 8] ++ add w24, w24, 1 ++ and w24, w24, 65535 ++ cmp w0, 1 ++ bne .L2566 ++ ldrb w0, [x20, 1220] ++ cbz w0, .L2566 ++ ldrh w0, [x20, 2346] ++ cmp w0, w24 ++ bne .L2566 ++ cmp w21, w24 ++ beq .L2542 ++.L2566: ++ ldrh w0, [x20, 2344] ++ cmp w0, w24 ++ bne .L2535 ++ ldrh w1, [x20, 2276] ++ mov w0, 0 ++ strh w24, [x19, 2] ++ mov w2, 65535 ++ strh wzr, [x19, 4] ++.L2567: ++ cmp w0, w1 ++ beq .L2639 ++ ldr x4, [x29, 144] ++ ldrh w3, [x4], 2 ++ str x4, [x29, 144] ++ cmp w3, w2 ++ beq .L2568 ++ strb w0, [x19, 6] ++ b .L2639 ++.L2529: ++ cmp w22, w5 ++ beq .L2530 ++ str w5, [x0, 1708] ++ b .L2517 ++.L2530: ++ ldr w1, [x0, 1708] ++.L2648: ++ sub w1, w1, #1 ++.L2642: ++ str w1, [x0, 1708] ++ b .L2517 ++.L2528: ++ cmp w25, w22 ++ beq .L2531 ++ cmn w25, #1 ++ beq .L2517 ++ str w25, [x0, 1708] ++ b .L2517 ++.L2531: ++ ldr w1, [x0, 1708] ++ cmp w22, w1 ++ bne .L2648 ++ b .L2517 ++.L2533: ++ add x0, x27, :lo12:.LANCHOR4 ++ mov w1, -1 ++ b .L2642 ++.L2539: ++ ldrh w3, [x1] ++ cmp w3, w7 ++ beq .L2537 ++ mov w2, 56 ++ ldr x4, [x20, 2520] ++ orr w3, w24, w3, lsl 10 ++ umull x5, w23, w2 ++ add x4, x4, x5 ++ str w3, [x4, 4] ++ ldrb w2, [x19, 8] ++ cmp w2, 1 ++ bne .L2538 ++ cbz w6, .L2538 ++ ldr x2, [x20, 2520] ++ add x2, x2, x5 ++ ldr w3, [x2, 4] ++ orr w3, w3, -2147483648 ++ str w3, [x2, 4] ++.L2538: ++ add w23, w23, 1 ++ and w23, w23, 65535 ++.L2537: ++ add x1, x1, 2 ++ b .L2536 ++.L2565: ++ ldr x4, [x20, 2520] ++ add x4, x4, x25 ++ ldr w5, [x4, 4] ++ str w5, [x29, 172] ++ lsr w0, w5, 10 ++ bl P2V_plane ++ and w0, w0, 65535 ++ ldr w1, [x29, 156] ++ cmp w24, w1 ++ bcc .L2541 ++ ldr w1, [x29, 140] ++ ccmp w1, w0, 0, eq ++ bhi .L2541 ++ cmp w24, w21 ++ ccmp w28, w0, 0, eq ++ beq .L2542 ++ ldr w0, [x4] ++ cmn w0, #1 ++ beq .L2543 ++ ldr x3, [x4, 16] ++ mov w0, 61589 ++ ldrh w1, [x3] ++ cmp w1, w0 ++ beq .L2544 ++ ldrh w0, [x19] ++.L2644: ++ bl decrement_vpc_count ++ b .L2541 ++.L2544: ++ ldr w22, [x3, 4] ++ cmn w22, #1 ++ beq .L2545 ++ ldr w1, [x20, 2400] ++ mov w0, w22 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2545 ++ add w0, w22, 1 ++ str w0, [x20, 2400] ++.L2545: ++ ldp w26, w0, [x3, 8] ++ add x1, x29, 168 ++ str w0, [x29, 164] ++ mov w2, 0 ++ mov w0, w26 ++ bl log2phys ++ ldr w1, [x23, 1708] ++ ldr w3, [x29, 164] ++ cmn w1, #1 ++ beq .L2546 ++ mov w0, w22 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2546 ++ cmn w3, #1 ++ beq .L2547 ++ ldr x0, [x20, 2520] ++ mov w2, 0 ++ mov w1, 1 ++ add x0, x0, x25 ++ ldr x4, [x0, 16] ++ str w3, [x0, 4] ++ str x4, [x29, 128] ++ ldr x0, [x20, 2520] ++ add x0, x0, x25 ++ bl FlashReadPages ++ ldr x0, [x20, 2520] ++ ldr x4, [x29, 128] ++ add x3, x0, x25 ++ ldr w0, [x0, x25] ++ cmn w0, #1 ++ bne .L2548 ++.L2549: ++ mov w0, -1 ++ str w0, [x29, 164] ++.L2556: ++ ldr w4, [x29, 164] ++ cmn w4, #1 ++ beq .L2541 ++.L2571: ++ lsr w0, w4, 10 ++ bl P2V_block_in_plane ++ ldr x3, [x20, 2712] ++ and w1, w0, 65535 ++ ubfiz x2, x1, 1, 16 ++ ldrh w2, [x3, x2] ++ cbnz w2, .L2644 ++ adrp x0, .LC154 ++ add x0, x0, :lo12:.LC154 ++ bl printk ++ b .L2541 ++.L2547: ++ ldp w1, w0, [x29, 168] ++ cmp w1, w0 ++ bne .L2541 ++ mov w2, 1 ++ add x1, x29, 164 ++ mov w0, w26 ++ bl log2phys ++.L2541: ++ add x25, x25, 56 ++ b .L2540 ++.L2548: ++ ldr w0, [x4, 8] ++ cmp w26, w0 ++ bne .L2549 ++ ldr w0, [x4, 4] ++ str w0, [x29, 128] ++ str x4, [x29, 96] ++ uxtw x1, w0 ++ ldr w0, [x23, 1708] ++ bl ftl_cmp_data_ver ++ cbz w0, .L2549 ++ ldp w0, w1, [x29, 168] ++ ldr x4, [x29, 96] ++ cmp w0, w1 ++ ldr w1, [x29, 164] ++ bne .L2551 ++.L2643: ++ mov w0, w26 ++ bl FtlReUsePrevPpa ++ b .L2549 ++.L2551: ++ cmp w0, w1 ++ beq .L2549 ++ cmn w0, #1 ++ beq .L2552 ++ ldr x4, [x3, 16] ++ mov w2, 0 ++ str w0, [x3, 4] ++ mov w1, 1 ++ str x4, [x29, 96] ++ ldr x0, [x20, 2520] ++ add x0, x0, x25 ++ bl FlashReadPages ++ ldr x4, [x29, 96] ++.L2553: ++ adrp x0, .LANCHOR2+2520 ++ ldr x0, [x0, #:lo12:.LANCHOR2+2520] ++ ldr w0, [x0, x25] ++ cmn w0, #1 ++ beq .L2554 ++ ldr w3, [x4, 4] ++ ldr w0, [x23, 1708] ++ mov w1, w3 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2554 ++ ldr w0, [x29, 128] ++ mov w1, w3 ++ bl ftl_cmp_data_ver ++ cbz w0, .L2549 ++.L2554: ++ ldr w1, [x29, 164] ++ b .L2643 ++.L2552: ++ str w0, [x3] ++ b .L2553 ++.L2546: ++ ldp w1, w0, [x29, 168] ++ cmp w1, w0 ++ beq .L2556 ++ cmn w3, #1 ++ beq .L2558 ++ ldr w0, [x20, 2292] ++ ubfx x3, x3, 10, 21 ++ cmp w3, w0 ++ bcs .L2541 ++.L2558: ++ mov w2, 1 ++ add x1, x29, 172 ++ mov w0, w26 ++ bl log2phys ++ ldr w4, [x29, 168] ++ cmn w4, #1 ++ beq .L2556 ++ ldr w0, [x29, 164] ++ cmp w4, w0 ++ beq .L2571 ++ lsr w0, w4, 10 ++ bl P2V_block_in_plane ++ ldrh w1, [x23, 784] ++ and w0, w0, 65535 ++ cmp w1, w0 ++ beq .L2561 ++ ldrh w1, [x23, 832] ++ cmp w1, w0 ++ beq .L2561 ++ ldrh w1, [x23, 880] ++ cmp w1, w0 ++ bne .L2556 ++.L2561: ++ ldr x0, [x20, 2520] ++ mov w2, 0 ++ mov w1, 1 ++ str w4, [x0, 4] ++ ldr x3, [x0, 16] ++ ldr x0, [x20, 2520] ++ str x3, [x29, 128] ++ bl FlashReadPages ++ ldr x0, [x20, 2520] ++ ldr w0, [x0] ++ cmn w0, #1 ++ beq .L2556 ++ ldr x3, [x29, 128] ++ mov w0, w22 ++ ldr w1, [x3, 4] ++ bl ftl_cmp_data_ver ++ cbnz w0, .L2556 ++ mov w2, 1 ++ add x1, x29, 168 ++ mov w0, w26 ++ bl log2phys ++ b .L2556 ++.L2543: ++ ldrh w0, [x19] ++ mov w2, w22 ++ strh w0, [x23, 1754] ++ mov w1, w5 ++ ldr x0, [x29, 112] ++ bl printk ++ ldr w0, [x23, 1760] ++ cmp w0, 31 ++ bhi .L2563 ++ ldr x2, [x29, 104] ++ ldr w1, [x29, 172] ++ str w1, [x2, w0, uxtw 2] ++ add w0, w0, 1 ++ str w0, [x23, 1760] ++.L2563: ++ ldrh w0, [x19] ++ bl decrement_vpc_count ++ ldr w0, [x23, 1708] ++ cmn w0, #1 ++ bne .L2564 ++.L2645: ++ str w22, [x23, 1708] ++ b .L2541 ++.L2564: ++ cmp w22, w0 ++ bcs .L2541 ++ b .L2645 ++.L2568: ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ b .L2567 ++.L2542: ++ strb w28, [x19, 6] ++ strh w21, [x19, 2] ++ b .L2647 ++ .size FtlRecoverySuperblock, .-FtlRecoverySuperblock ++ .align 2 ++ .global FtlSlcSuperblockCheck ++ .type FtlSlcSuperblockCheck, %function ++FtlSlcSuperblockCheck: ++ ldrh w1, [x0, 4] ++ cbz w1, .L2661 ++ ldrh w2, [x0] ++ mov w1, 65535 ++ cmp w2, w1 ++ beq .L2661 ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR0 ++ adrp x20, .LANCHOR2 ++ ldrb w0, [x0, 6] ++ add x22, x20, :lo12:.LANCHOR2 ++ add x21, x21, 1168 ++ add x0, x0, 8 ++ ldrh w1, [x19, x0, lsl 1] ++.L2653: ++ mov w0, 65535 ++ cmp w1, w0 ++ beq .L2655 ++ ldrb w1, [x19, 8] ++ cmp w1, 1 ++ bne .L2656 ++ ldrb w2, [x22, 1220] ++ cbnz w2, .L2656 ++ ldrh w2, [x19, 2] ++ ldrh w2, [x21, x2, lsl 1] ++ cmp w2, w0 ++ bne .L2656 ++ ldrh w0, [x19, 4] ++ sub w0, w0, #1 ++ strh w0, [x19, 4] ++ ldrh w0, [x19] ++ bl decrement_vpc_count ++ ldrh w0, [x19, 4] ++ cbnz w0, .L2655 ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++.L2664: ++ strh w0, [x19, 2] ++ strb wzr, [x19, 6] ++.L2649: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2655: ++ ldrb w0, [x19, 6] ++ ldrh w1, [x22, 2276] ++ add w0, w0, 1 ++ and w0, w0, 255 ++ strb w0, [x19, 6] ++ cmp w1, w0 ++ bne .L2654 ++ ldrh w0, [x19, 2] ++ strb wzr, [x19, 6] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++.L2654: ++ ldrb w0, [x19, 6] ++ add x0, x0, 8 ++ ldrh w1, [x19, x0, lsl 1] ++ b .L2653 ++.L2656: ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrb w2, [x0, 1220] ++ cbz w2, .L2649 ++ cmp w1, 1 ++ bne .L2649 ++ ldrh w2, [x19, 2] ++ ldrh w1, [x0, 2346] ++ cmp w2, w1 ++ bcc .L2649 ++ ldrh w1, [x19] ++ ldr x3, [x0, 2712] ++ ldrh w4, [x19, 4] ++ lsl x1, x1, 1 ++ ldrh w2, [x3, x1] ++ sub w2, w2, w4 ++ strh w2, [x3, x1] ++ strh wzr, [x19, 4] ++ ldrh w0, [x0, 2344] ++ b .L2664 ++.L2661: ++ 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, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ str x23, [sp, 48] ++ add x21, x21, :lo12:.LANCHOR0 ++ strb wzr, [x0, 10] ++ adrp x20, .LANCHOR2 ++ ldrb w0, [x0, 6] ++ add x21, x21, 1168 ++ add x23, x20, :lo12:.LANCHOR2 ++ add x0, x0, 8 ++ ldrh w0, [x19, x0, lsl 1] ++.L2666: ++ mov w2, 65535 ++ cmp w0, w2 ++ beq .L2667 ++ ldrb w1, [x19, 8] ++ ldrh w22, [x19, 2] ++ cmp w1, 1 ++ ldrh w1, [x19, 4] ++ bne .L2669 ++ ldrb w3, [x23, 1220] ++ cbnz w3, .L2669 ++ ldrh w3, [x21, w22, sxtw 1] ++ cmp w3, w2 ++ bne .L2669 ++ ldrh w0, [x19] ++ sub w1, w1, #1 ++ strh w1, [x19, 4] ++ bl decrement_vpc_count ++.L2667: ++ ldrb w0, [x19, 6] ++ ldrh w1, [x23, 2276] ++ add w0, w0, 1 ++ and w0, w0, 255 ++ strb w0, [x19, 6] ++ cmp w1, w0 ++ bne .L2668 ++ ldrh w0, [x19, 2] ++ strb wzr, [x19, 6] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++.L2668: ++ ldrb w0, [x19, 6] ++ add x0, x0, 8 ++ ldrh w0, [x19, x0, lsl 1] ++ b .L2666 ++.L2669: ++ adrp x21, .LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR0 ++ orr w22, w22, w0, lsl 10 ++ add x20, x20, :lo12:.LANCHOR2 ++ add x21, x21, 1168 ++ sub w1, w1, #1 ++ strh w1, [x19, 4] ++.L2670: ++ ldrb w0, [x19, 6] ++ mov w1, 65535 ++ ldrh w3, [x20, 2276] ++.L2672: ++ add w0, w0, 1 ++ and w0, w0, 255 ++ cmp w0, w3 ++ bne .L2671 ++ ldrh w0, [x19, 2] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++ mov w0, 0 ++.L2671: ++ add x2, x19, w0, sxtw 1 ++ ldrh w2, [x2, 16] ++ cmp w2, w1 ++ beq .L2672 ++ strb w0, [x19, 6] ++ ldrb w0, [x19, 8] ++ cmp w0, 1 ++ bne .L2665 ++ ldrb w2, [x20, 1220] ++ ldrh w0, [x19, 2] ++ cbnz w2, .L2674 ++ ldrh w0, [x21, w0, sxtw 1] ++ cmp w0, w1 ++ bne .L2665 ++ ldrh w0, [x19, 4] ++ cbz w0, .L2665 ++ sub w0, w0, #1 ++ strh w0, [x19, 4] ++ ldrh w0, [x19] ++ bl decrement_vpc_count ++ b .L2670 ++.L2674: ++ ldrh w1, [x20, 2346] ++ cmp w0, w1 ++ bcc .L2665 ++ ldrh w0, [x19] ++ ldr x2, [x20, 2712] ++ ldrh w3, [x19, 4] ++ lsl x0, x0, 1 ++ ldrh w1, [x2, x0] ++ sub w1, w1, w3 ++ strh w1, [x2, x0] ++ strh wzr, [x19, 4] ++ ldrh w0, [x20, 2344] ++ strh w0, [x19, 2] ++ strb wzr, [x19, 6] ++.L2665: ++ mov w0, w22 ++ ldr x23, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ 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] ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR2 ++ add x20, x22, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ ldr w0, [x20, 2928] ++ cbnz w0, .L2681 ++ adrp x19, .LANCHOR4 ++ add x0, x19, :lo12:.LANCHOR4 ++ add x0, x0, 784 ++ ldrh w2, [x0, 4] ++ cbz w2, .L2683 ++ ldrb w1, [x0, 8] ++ cbnz w1, .L2683 ++ ldrb w1, [x0, 7] ++ ldrh w3, [x20, 2344] ++ mul w1, w1, w3 ++ cmp w2, w1 ++ beq .L2683 ++ ldrb w0, [x0, 10] ++ cbnz w0, .L2681 ++ ldr w23, [x20, 2924] ++ add x1, x29, 84 ++ ldrh w25, [x20, 2276] ++ mov w2, 0 ++ sub w23, w23, #1 ++ mov w0, w23 ++ bl log2phys ++ ldr x21, [x20, 2640] ++ ldr w0, [x29, 84] ++ ldr x1, [x20, 2576] ++ str w0, [x29, 92] ++ cmn w0, #1 ++ stp x1, x21, [x29, 96] ++ str w23, [x29, 112] ++ str wzr, [x21, 4] ++ beq .L2685 ++ mov w2, 0 ++ mov w1, 1 ++ add x0, x29, 88 ++ bl FlashReadPages ++.L2686: ++ add x20, x19, :lo12:.LANCHOR4 ++ lsl w25, w25, 2 ++ add x20, x20, 784 ++ add x22, x22, :lo12:.LANCHOR2 ++ mov w0, -3947 ++ mov w24, 0 ++ strh w0, [x21] ++.L2687: ++ cmp w25, w24 ++ bne .L2691 ++.L2688: ++ add x19, x19, :lo12:.LANCHOR4 ++ mov w0, 1 ++ strb w0, [x19, 794] ++.L2681: ++ 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 ++.L2685: ++ ldrh w2, [x20, 2354] ++ mov w1, 255 ++ ldr x0, [x20, 2576] ++ bl ftl_memset ++ b .L2686 ++.L2691: ++ ldrh w0, [x20, 4] ++ cbz w0, .L2688 ++ ldr w0, [x29, 92] ++ add w24, w24, 1 ++ stp w23, w0, [x21, 8] ++ ldrh w0, [x20] ++ strh w0, [x21, 2] ++ mov x0, x20 ++ bl get_new_active_ppa ++ str w0, [x29, 92] ++ ldr w0, [x22, 2400] ++ mov w3, 0 ++ str w0, [x21, 4] ++ mov w2, 0 ++ add w0, w0, 1 ++ mov w1, 1 ++ cmn w0, #1 ++ csel w0, w0, wzr, ne ++ str w0, [x22, 2400] ++ add x0, x29, 88 ++ bl FlashProgPages ++ ldrh w0, [x20] ++ bl decrement_vpc_count ++ b .L2687 ++.L2683: ++ add x19, x19, :lo12:.LANCHOR4 ++ strb wzr, [x19, 794] ++ b .L2681 ++ .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] ++ adrp x20, .LANCHOR2 ++ add x20, x20, :lo12:.LANCHOR2 ++ mov w19, 0 ++ bl FtlWriteDumpData ++.L2700: ++ ldrh w0, [x20, 2382] ++ cmp w0, w19 ++ bhi .L2702 ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2702: ++ ldr x1, [x20, 2792] ++ ubfiz x0, x19, 4, 16 ++ add x0, x1, x0 ++ ldr w0, [x0, 4] ++ tbz w0, #31, .L2701 ++ mov w0, w19 ++ bl flush_l2p_region ++.L2701: ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L2700 ++ .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] ++ adrp x20, .LANCHOR2 ++ add x1, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ ldr w24, [x1, 2928] ++ cbnz w24, .L2704 ++ ldrb w1, [x1, 1220] ++ cbz w1, .L2715 ++ ldrb w1, [x0, 8] ++ cmp w1, 1 ++ bne .L2715 ++ ldrh w23, [x0, 4] ++ mov w24, w1 ++.L2706: ++ mov x19, x0 ++ mov w0, -1 ++ str w0, [x29, 96] ++ add x0, x20, :lo12:.LANCHOR2 ++ mov w2, 61589 ++ mov x21, x0 ++ ldr x22, [x0, 2640] ++ ldr x1, [x0, 2576] ++ stp x1, x22, [x29, 80] ++ mov w1, -3 ++ str w1, [x22, 8] ++ mov w1, -2 ++ str w1, [x22, 12] ++ ldrh w1, [x19] ++ strh w1, [x22, 2] ++ strh wzr, [x22] ++ ldr x1, [x0, 2576] ++ str w2, [x1] ++ mov w2, 22136 ++ movk w2, 0x1234, lsl 16 ++ ldr x1, [x0, 2576] ++ str w2, [x1, 4] ++.L2707: ++ sub w23, w23, #1 ++ cmn w23, #1 ++ beq .L2710 ++ ldrh w0, [x19, 4] ++ cbnz w0, .L2708 ++.L2710: ++ add x20, x20, :lo12:.LANCHOR2 ++ ldrh w0, [x19] ++ ldrh w3, [x19, 4] ++ ldr x2, [x20, 2712] ++ lsl x0, x0, 1 ++ ldrh w1, [x2, x0] ++ sub w1, w1, w3 ++ strh w1, [x2, x0] ++ strb wzr, [x19, 6] ++ ldrh w0, [x20, 2344] ++ strh w0, [x19, 2] ++ strh wzr, [x19, 4] ++.L2704: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 128 ++ ret ++.L2715: ++ mov w23, 12 ++ b .L2706 ++.L2708: ++ mov x0, x19 ++ bl get_new_active_ppa ++ str w0, [x29, 76] ++ cmn w0, #1 ++ beq .L2710 ++ ldr w0, [x21, 2400] ++ mov w3, 0 ++ str w0, [x22, 4] ++ mov w2, w24 ++ add w0, w0, 1 ++ mov w1, 1 ++ cmn w0, #1 ++ csel w0, w0, wzr, ne ++ str w0, [x21, 2400] ++ add x0, x29, 72 ++ bl FlashProgPages ++ ldrh w0, [x19] ++ bl decrement_vpc_count ++ b .L2707 ++ .size FtlSuperblockPowerLostFix, .-FtlSuperblockPowerLostFix ++ .align 2 ++ .global FtlVpcCheckAndModify ++ .type FtlVpcCheckAndModify, %function ++FtlVpcCheckAndModify: ++ stp x29, x30, [sp, -80]! ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC49 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x19, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ add x1, x1, 232 ++ add x0, x0, :lo12:.LC49 ++ str x23, [sp, 48] ++ bl printk ++ ldr x0, [x19, 2704] ++ mov w21, 0 ++ ldrh w2, [x19, 2286] ++ mov w1, 0 ++ lsl w2, w2, 1 ++ bl ftl_memset ++.L2721: ++ ldr w0, [x19, 2924] ++ cmp w21, w0 ++ bcc .L2723 ++ adrp x22, .LANCHOR4 ++ adrp x23, .LC156 ++ add x20, x20, :lo12:.LANCHOR2 ++ add x22, x22, :lo12:.LANCHOR4 ++ add x23, x23, :lo12:.LC156 ++ mov w19, 0 ++.L2724: ++ ldrh w0, [x20, 2284] ++ cmp w0, w19 ++ bhi .L2727 ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ ldr x23, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 80 ++ ret ++.L2723: ++ mov w2, 0 ++ add x1, x29, 76 ++ mov w0, w21 ++ bl log2phys ++ ldr w0, [x29, 76] ++ cmn w0, #1 ++ beq .L2722 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ ldr x2, [x19, 2704] ++ ubfiz x0, x0, 1, 16 ++ ldrh w1, [x2, x0] ++ add w1, w1, 1 ++ strh w1, [x2, x0] ++.L2722: ++ add w21, w21, 1 ++ b .L2721 ++.L2727: ++ ldr x0, [x20, 2712] ++ ubfiz x21, x19, 1, 16 ++ ldrh w2, [x0, x21] ++ ldr x0, [x20, 2704] ++ ldrh w3, [x0, x21] ++ cmp w2, w3 ++ beq .L2725 ++ mov w0, 65535 ++ cmp w2, w0 ++ beq .L2725 ++ ldrh w0, [x22, 784] ++ cmp w0, w19 ++ beq .L2725 ++ ldrh w0, [x22, 880] ++ cmp w0, w19 ++ beq .L2725 ++ ldrh w0, [x22, 832] ++ cmp w0, w19 ++ beq .L2725 ++ mov w1, w19 ++ mov x0, x23 ++ bl printk ++ ldr x0, [x20, 2712] ++ ldrh w1, [x0, x21] ++ cbnz w1, .L2726 ++ ldr x1, [x20, 2704] ++ ldrh w1, [x1, x21] ++ strh w1, [x0, x21] ++.L2725: ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L2724 ++.L2726: ++ ldr x1, [x20, 2704] ++ ldrh w1, [x1, x21] ++ strh w1, [x0, x21] ++ mov w0, w19 ++ bl update_vpc_list ++ b .L2725 ++ .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 x20, .LANCHOR2 ++ add x2, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ ldr w1, [x2, 2928] ++ cbnz w1, .L2733 ++ ldrh w21, [x0] ++ mov x22, x0 ++ mov w0, 65535 ++ cmp w21, w0 ++ beq .L2734 ++ ldr x0, [x2, 2712] ++ ubfiz x1, x21, 1, 16 ++ ldrh w0, [x0, x1] ++ cbz w0, .L2735 ++ mov w0, w21 ++ bl INSERT_DATA_LIST ++.L2734: ++ adrp x19, .LANCHOR4 ++ strb wzr, [x22, 8] ++ add x1, x19, :lo12:.LANCHOR4 ++ add x0, x1, 832 ++ cmp x22, x0 ++ beq .L2736 ++ add x2, x20, :lo12:.LANCHOR2 ++ ldrh w3, [x2, 2296] ++ cmp w3, 1 ++ beq .L2736 ++ ldrb w0, [x2, 1220] ++ cbz w0, .L2737 ++.L2736: ++ mov w0, 1 ++ strb w0, [x22, 8] ++.L2738: ++ add x0, x19, :lo12:.LANCHOR4 ++ mov w1, 65535 ++ ldrh w0, [x0, 1696] ++ cmp w0, w1 ++ beq .L2743 ++ cmp w21, w0 ++ bne .L2744 ++ add x20, x20, :lo12:.LANCHOR2 ++ ubfiz x1, x0, 1, 16 ++ ldr x2, [x20, 2712] ++ ldrh w1, [x2, x1] ++ cbz w1, .L2745 ++.L2744: ++ bl update_vpc_list ++.L2745: ++ add x19, x19, :lo12:.LANCHOR4 ++ mov w0, -1 ++ strh w0, [x19, 1696] ++.L2743: ++ mov x0, x22 ++ bl allocate_data_superblock ++ bl l2p_flush ++ mov w0, 0 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L2733: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2735: ++ mov w0, w21 ++ bl INSERT_FREE_LIST ++ b .L2734 ++.L2737: ++ add x1, x1, 784 ++ cmp x22, x1 ++ bne .L2738 ++ cmp w3, 3 ++ beq .L2740 ++ ldr w0, [x2, 2392] ++ cmp w0, 1 ++ bne .L2741 ++.L2740: ++ add x1, x19, :lo12:.LANCHOR4 ++ mov w0, 1 ++ strb w0, [x1, 792] ++.L2741: ++ add x1, x20, :lo12:.LANCHOR2 ++ ldr w0, [x1, 2096] ++ cbz w0, .L2738 ++ ldr w0, [x1, 2444] ++ cmp w0, 39 ++ bhi .L2738 ++ add x1, x19, :lo12:.LANCHOR4 ++ mov w0, 1 ++ strb w0, [x1, 792] ++ b .L2738 ++ .size allocate_new_data_superblock, .-allocate_new_data_superblock ++ .align 2 ++ .global FtlReadRefresh ++ .type FtlReadRefresh, %function ++FtlReadRefresh: ++ adrp x0, .LANCHOR4 ++ add x4, x0, :lo12:.LANCHOR4 ++ add x2, x4, 1152 ++ mov x1, x0 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldr w3, [x2, 80] ++ cbz w3, .L2760 ++ ldr w1, [x0, 2924] ++ ldr w3, [x2, 84] ++ cmp w3, w1 ++ bcs .L2761 ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x4 ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ mov w21, 2048 ++.L2766: ++ add x22, x20, 1152 ++ ldr w1, [x19, 2924] ++ ldr w0, [x22, 84] ++ cmp w0, w1 ++ bcc .L2762 ++.L2765: ++ ldp x19, x20, [sp, 16] ++ mov w0, -1 ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 112 ++ ret ++.L2762: ++ add x1, x29, 52 ++ mov w2, 0 ++ bl log2phys ++ ldr w0, [x22, 84] ++ ldr w1, [x29, 52] ++ add w0, w0, 1 ++ str w0, [x22, 84] ++ cmn w1, #1 ++ beq .L2764 ++ str w0, [x29, 80] ++ add x0, x29, 112 ++ str w1, [x29, 60] ++ mov w2, 0 ++ stp xzr, xzr, [x29, 64] ++ mov w1, 1 ++ str wzr, [x0, -56]! ++ bl FlashReadPages ++ ldr w0, [x29, 56] ++ cmp w0, 256 ++ bne .L2765 ++ ldr w0, [x29, 52] ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++ b .L2765 ++.L2764: ++ subs w21, w21, #1 ++ bne .L2766 ++ b .L2765 ++.L2761: ++ ldr w0, [x0, 2424] ++ stp w0, wzr, [x2, 76] ++ str wzr, [x2, 84] ++.L2773: ++ mov w0, 0 ++ ret ++.L2760: ++ ldr w3, [x0, 2440] ++ mov w5, 10000 ++ mov w6, 31 ++ ldr w7, [x2, 76] ++ cmp w3, w5 ++ mov w5, 63 ++ csel w6, w6, w5, hi ++ ldr w5, [x0, 2424] ++ add w8, w5, 1048576 ++ cmp w7, w8 ++ bhi .L2770 ++ ldr w0, [x0, 2924] ++ mov w8, 1000 ++ lsr w3, w3, 10 ++ add w3, w3, 1 ++ mul w0, w0, w8 ++ udiv w0, w0, w3 ++ add w0, w0, w7 ++ cmp w5, w0 ++ bhi .L2770 ++ ldrh w0, [x4, 724] ++ tst w6, w0 ++ bne .L2773 ++ ldr w2, [x2, 100] ++ cmp w0, w2 ++ beq .L2773 ++.L2770: ++ add x0, x1, :lo12:.LANCHOR4 ++ add x1, x0, 1152 ++ ldrh w0, [x0, 724] ++ str w0, [x1, 100] ++ str w5, [x1, 76] ++ mov w0, 1 ++ str wzr, [x1, 84] ++ str w0, [x1, 80] ++ b .L2773 ++ .size FtlReadRefresh, .-FtlReadRefresh ++ .align 2 ++ .global ftl_do_gc ++ .type ftl_do_gc, %function ++ftl_do_gc: ++ stp x29, x30, [sp, -144]! ++ 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 w2, [x3, 2928] ++ cbnz w2, .L2878 ++ adrp x2, .LANCHOR1 ++ add x2, x2, :lo12:.LANCHOR1 ++ ldr w21, [x2, 3448] ++ cmp w21, 1 ++ bne .L2878 ++ ldr w3, [x3, 2448] ++ cbnz w3, .L2878 ++ adrp x20, .LANCHOR4 ++ add x3, x20, :lo12:.LANCHOR4 ++ ldrh w4, [x3, 760] ++ cmp w4, 47 ++ bls .L2878 ++ mov w23, w1 ++ str w0, [x29, 124] ++ ldrh w1, [x2, 3452] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2781 ++.L2784: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w2, 65535 ++ ldrh w4, [x0, 2474] ++ cmp w4, w2 ++ bne .L2782 ++.L2783: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldr w2, [x29, 124] ++ cmp w2, 1 ++ ldr w0, [x1, 2464] ++ add w0, w0, 1 ++ add w0, w0, w2, lsl 7 ++ str w0, [x1, 2464] ++ bne .L2785 ++ ldr w2, [x1, 2096] ++ cbnz w2, .L2786 ++ ldrb w1, [x1, 1220] ++ cbz w1, .L2785 ++.L2786: ++ add x22, x19, :lo12:.LANCHOR2 ++ ldr w1, [x22, 2444] ++ cmp w1, 39 ++ bhi .L2785 ++ add x25, x20, :lo12:.LANCHOR4 ++ mov w21, 65535 ++ ldrh w1, [x25, 1896] ++ add w0, w1, w0 ++ str w0, [x22, 2464] ++ bl FtlGcReFreshBadBlk ++ ldrh w0, [x25, 1104] ++ cmp w0, w21 ++ bne .L2787 ++ ldrh w1, [x22, 2472] ++ cmp w1, w0 ++ bne .L2874 ++ ldr w0, [x22, 2464] ++ cmp w0, 1024 ++ bhi .L2789 ++ ldrh w0, [x25, 776] ++ cmp w0, 63 ++ bhi .L2874 ++.L2789: ++ add x1, x19, :lo12:.LANCHOR2 ++ add x0, x20, :lo12:.LANCHOR4 ++ ldrh w2, [x1, 2482] ++ ldrh w3, [x0, 776] ++ strh wzr, [x0, 1896] ++ add w2, w2, 64 ++ cmp w3, w2 ++ bgt .L2874 ++ str wzr, [x1, 2464] ++ ldr w1, [x1, 2444] ++ cbnz w1, .L2790 ++ mov w1, 6 ++.L2927: ++ strh w1, [x0, 1896] ++.L2791: ++ mov w0, 32 ++ bl List_get_gc_head_node ++ and w5, w0, 65535 ++ mov w8, 65535 ++ cmp w5, w8 ++ beq .L2795 ++ add x22, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x22, 2484] ++ cbz w0, .L2793 ++ ldrh w1, [x22, 2346] ++ ubfiz x5, x5, 1, 16 ++ ldrh w3, [x22, 2276] ++ ldr x7, [x22, 2712] ++ mul w1, w1, w3 ++ ldrh w2, [x7, x5] ++ add w1, w1, 1 ++ cmp w2, w1 ++ bgt .L2795 ++ add w6, w0, 1 ++ str wzr, [x22, 2452] ++ and w6, w6, 65535 ++ strh w6, [x22, 2484] ++ bl List_get_gc_head_node ++ and w21, w0, 65535 ++ cmp w21, w8 ++ beq .L2795 ++ ubfiz x25, x21, 1, 16 ++ ldrh w4, [x7, x5] ++ mov w2, w21 ++ mov w1, w6 ++ adrp x0, .LC157 ++ add x0, x0, :lo12:.LC157 ++ ldrh w3, [x7, x25] ++ bl printk ++ ldrh w0, [x22, 2484] ++ cmp w0, 40 ++ bls .L2794 ++ ldr x0, [x22, 2712] ++ ldrh w0, [x0, x25] ++ cmp w0, 32 ++ bls .L2794 ++ strh wzr, [x22, 2484] ++.L2794: ++ add x0, x20, :lo12:.LANCHOR4 ++ mov w1, 6 ++ strh w1, [x0, 1896] ++.L2787: ++ ldr w1, [x29, 124] ++ mov w0, 65535 ++ cmp w1, 0 ++ ccmp w21, w0, 0, eq ++ bne .L2809 ++ add x0, x20, :lo12:.LANCHOR4 ++ ldrh w0, [x0, 776] ++ cmp w0, 24 ++ bhi .L2886 ++ add x1, x19, :lo12:.LANCHOR2 ++ cmp w0, 16 ++ ldrh w22, [x1, 2344] ++ bls .L2811 ++ lsr w22, w22, 5 ++.L2810: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w2, [x1, 2480] ++ cmp w2, w0 ++ bcs .L2814 ++ add x3, x20, :lo12:.LANCHOR4 ++ mov w2, 65535 ++ ldrh w0, [x3, 880] ++ cmp w0, w2 ++ bne .L2815 ++ ldrh w2, [x1, 2472] ++ cmp w2, w0 ++ bne .L2815 ++ ldrh w0, [x3, 1896] ++ cbnz w0, .L2816 ++ ldr w2, [x1, 2924] ++ ldr w3, [x3, 1068] ++ add w2, w2, w2, lsl 1 ++ cmp w3, w2, lsr 2 ++ bcs .L2817 ++.L2816: ++ add x20, x20, :lo12:.LANCHOR4 ++ add x2, x19, :lo12:.LANCHOR2 ++ ldrh w1, [x20, 1096] ++ add w1, w1, w1, lsl 1 ++ asr w1, w1, 2 ++ strh w1, [x2, 2480] ++.L2818: ++ add x19, x19, :lo12:.LANCHOR2 ++ str wzr, [x19, 2452] ++.L2779: ++ 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 ++.L2781: ++ ldrh w1, [x3, 880] ++ cmp w1, w0 ++ beq .L2784 ++ mov w0, w21 ++ bl FtlGcFreeTempBlock ++ cbz w0, .L2784 ++ mov w0, w21 ++ b .L2779 ++.L2782: ++ ldrh w1, [x0, 2472] ++ cmp w1, w2 ++ bne .L2783 ++ ldrh w3, [x0, 2476] ++ cmp w3, w1 ++ beq .L2783 ++ ldrh w2, [x0, 2478] ++ cmp w2, w1 ++ beq .L2783 ++ mov w1, -1 ++ strh w4, [x0, 2472] ++ strh w3, [x0, 2474] ++ strh w2, [x0, 2476] ++ strh w1, [x0, 2478] ++ b .L2783 ++.L2790: ++ cmp w1, 5 ++ bhi .L2791 ++ mov w1, 18 ++ b .L2927 ++.L2793: ++ mov w0, 1 ++ strh w0, [x22, 2484] ++.L2795: ++ bl GetSwlReplaceBlock ++ and w21, w0, 65535 ++ mov w0, 65535 ++ cmp w21, w0 ++ bne .L2787 ++ add x0, x20, :lo12:.LANCHOR4 ++ strh wzr, [x0, 1896] ++.L2785: ++ add x0, x20, :lo12:.LANCHOR4 ++ mov w21, 65535 ++ ldrh w0, [x0, 1104] ++ cmp w0, w21 ++ bne .L2787 ++.L2874: ++ add x25, x20, :lo12:.LANCHOR4 ++ mov w0, 65535 ++ ldrh w21, [x25, 880] ++ cmp w21, w0 ++ bne .L2881 ++ add x26, x19, :lo12:.LANCHOR2 ++ ldrh w27, [x26, 2472] ++ cmp w27, w21 ++ bne .L2787 ++ ldrh w0, [x25, 776] ++ mov w1, 1024 ++ cmp w0, 24 ++ mov w0, 5120 ++ csel w0, w0, w1, cc ++ ldr w1, [x26, 2464] ++ cmp w1, w0 ++ bls .L2787 ++ strh wzr, [x25, 1896] ++ str wzr, [x26, 2464] ++ bl GetSwlReplaceBlock ++ and w21, w0, 65535 ++ cmp w21, w27 ++ bne .L2884 ++ ldrh w1, [x25, 776] ++ ldrh w0, [x26, 2482] ++ cmp w1, w0 ++ bcs .L2798 ++ mov w0, 64 ++ bl List_get_gc_head_node ++ and x0, x0, 65535 ++ cmp w0, w21 ++ beq .L2800 ++ ldr w1, [x26, 2388] ++ cbnz w1, .L2801 ++ ldrh w1, [x26, 2296] ++ cmp w1, 3 ++ beq .L2801 ++ ldr w1, [x26, 2392] ++ cbnz w1, .L2801 ++ ldr w1, [x26, 2096] ++ cbnz w1, .L2801 ++ ldrb w1, [x26, 1220] ++ cbz w1, .L2802 ++.L2801: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldr x2, [x1, 2712] ++ ldrh w3, [x2, x0, lsl 1] ++ ldrh w0, [x1, 2346] ++ ldrh w2, [x1, 2276] ++ ldrh w1, [x1, 2296] ++ cmp w1, 3 ++ mul w2, w2, w0 ++ lsr w0, w0, 1 ++ csel w0, w0, wzr, eq ++ add w0, w0, w2 ++ cmp w3, w0 ++ bgt .L2804 ++ mov w0, 0 ++ bl List_get_gc_head_node ++ add x1, x19, :lo12:.LANCHOR2 ++ add x2, x20, :lo12:.LANCHOR4 ++ and w22, w0, 65535 ++ ldr w0, [x1, 2924] ++ ldr w2, [x2, 1068] ++ add w0, w0, w0, lsl 1 ++ cmp w2, w0, lsr 2 ++ bls .L2805 ++ mov w0, 128 ++.L2928: ++ strh w0, [x1, 2482] ++.L2806: ++ mov w0, 65535 ++ cmp w22, w0 ++ beq .L2800 ++.L2797: ++ add x1, x19, :lo12:.LANCHOR2 ++ ubfiz x2, x22, 1, 32 ++ add x0, x20, :lo12:.LANCHOR4 ++ mov w21, w22 ++ ldr x4, [x1, 2696] ++ ldr x3, [x1, 2712] ++ ldrh w5, [x1, 2480] ++ mov w1, w22 ++ ldrh w4, [x4, x2] ++ ldrh w3, [x3, x2] ++ ldrh w2, [x0, 776] ++ adrp x0, .LC158 ++ add x0, x0, :lo12:.LC158 ++ bl printk ++ b .L2800 ++.L2805: ++ mov w0, 160 ++ b .L2928 ++.L2804: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, 128 ++.L2929: ++ strh w1, [x0, 2482] ++.L2800: ++ bl FtlGcReFreshBadBlk ++ b .L2787 ++.L2802: ++ ldr x1, [x26, 2712] ++ ldrh w0, [x1, x0, lsl 1] ++ cmp w0, 7 ++ bhi .L2807 ++ mov w0, 0 ++ bl List_get_gc_head_node ++ and w22, w0, 65535 ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, 128 ++ strh w1, [x0, 2482] ++ b .L2806 ++.L2807: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, 64 ++ b .L2929 ++.L2798: ++ mov w0, 80 ++ strh w0, [x26, 2482] ++ b .L2800 ++.L2884: ++ mov w22, w21 ++ b .L2797 ++.L2881: ++ mov w21, w0 ++ b .L2787 ++.L2811: ++ cmp w0, 12 ++ bls .L2812 ++ lsr w22, w22, 4 ++ b .L2810 ++.L2812: ++ cmp w0, 8 ++ bls .L2810 ++ lsr w22, w22, 2 ++ b .L2810 ++.L2886: ++ mov w22, 1 ++ b .L2810 ++.L2817: ++ mov w2, 18 ++ strh w2, [x1, 2480] ++ b .L2818 ++.L2815: ++ add x0, x20, :lo12:.LANCHOR4 ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 1096] ++ add w0, w0, w0, lsl 1 ++ asr w0, w0, 2 ++ strh w0, [x1, 2480] ++.L2814: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr w0, [x0, 2096] ++ cbz w0, .L2888 ++ cmp w23, 2 ++ bhi .L2888 ++ add w22, w22, 1 ++ and w22, w22, 65535 ++.L2888: ++ mov w21, 65535 ++ b .L2820 ++.L2809: ++ add x1, x20, :lo12:.LANCHOR4 ++ ldrh w3, [x1, 880] ++ cmp w3, w0 ++ bne .L2821 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrh w2, [x0, 2472] ++ cmp w2, w3 ++ bne .L2821 ++ cmp w21, w2 ++ bne .L2821 ++ ldrh w2, [x1, 1104] ++ cmp w2, w21 ++ bne .L2821 ++ ldrh w3, [x1, 776] ++ ldrh w2, [x0, 2480] ++ str wzr, [x0, 2452] ++ cmp w3, w2 ++ bls .L2823 ++ ldrh w2, [x1, 1896] ++ cbnz w2, .L2824 ++ ldr w2, [x0, 2924] ++ ldr w1, [x1, 1068] ++ add w2, w2, w2, lsl 1 ++ cmp w1, w2, lsr 2 ++ bcs .L2825 ++.L2824: ++ add x0, x20, :lo12:.LANCHOR4 ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 1096] ++ add w0, w0, w0, lsl 1 ++ asr w0, w0, 2 ++ strh w0, [x1, 2480] ++.L2826: ++ bl FtlReadRefresh ++ mov w0, 0 ++ bl List_get_gc_head_node ++ add x1, x19, :lo12:.LANCHOR2 ++ ubfiz x0, x0, 1, 16 ++ ldr x1, [x1, 2712] ++ ldrh w0, [x1, x0] ++ cmp w0, 4 ++ bls .L2823 ++ add x20, x20, :lo12:.LANCHOR4 ++.L2930: ++ ldrh w0, [x20, 1896] ++ b .L2779 ++.L2825: ++ mov w1, 18 ++ strh w1, [x0, 2480] ++ b .L2826 ++.L2823: ++ add x22, x20, :lo12:.LANCHOR4 ++ ldrh w0, [x22, 1896] ++ cbnz w0, .L2821 ++ ldrh w5, [x22, 1096] ++ add x6, x19, :lo12:.LANCHOR2 ++ add w0, w5, w5, lsl 1 ++ asr w0, w0, 2 ++ strh w0, [x6, 2480] ++ mov w0, 0 ++ bl List_get_gc_head_node ++ ldr x1, [x6, 2712] ++ ubfiz x0, x0, 1, 16 ++ ldrh w2, [x6, 2276] ++ ldrh w1, [x1, x0] ++ ldrh w0, [x6, 2346] ++ mul w0, w0, w2 ++ mov w2, 2 ++ sdiv w0, w0, w2 ++ cmp w1, w0 ++ ble .L2828 ++ ldrh w0, [x22, 776] ++ sub w5, w5, #1 ++ cmp w0, w5 ++ blt .L2828 ++ bl FtlReadRefresh ++ ldrh w0, [x22, 1896] ++ b .L2779 ++.L2828: ++ cbnz w1, .L2821 ++ add x20, x20, :lo12:.LANCHOR4 ++ mov w0, -1 ++ bl decrement_vpc_count ++ ldrh w0, [x20, 776] ++ add w0, w0, 1 ++ b .L2779 ++.L2821: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr w0, [x0, 2096] ++ cmp w0, 0 ++ cset w22, ne ++ add w22, w22, 1 ++.L2820: ++ add x0, x20, :lo12:.LANCHOR4 ++ mov w2, 65535 ++ ldrh w1, [x0, 1104] ++ cmp w1, w2 ++ bne .L2830 ++ cmp w21, w1 ++ beq .L2831 ++ strh w21, [x0, 1104] ++.L2832: ++ add x5, x20, :lo12:.LANCHOR4 ++ mov w1, 65535 ++ ldrh w0, [x5, 1104] ++ strb wzr, [x5, 1112] ++ cmp w0, w1 ++ beq .L2830 ++ bl IsBlkInGcList ++ cbz w0, .L2835 ++ mov w0, -1 ++ strh w0, [x5, 1104] ++.L2835: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 1220] ++ cbz w0, .L2836 ++ add x0, x20, :lo12:.LANCHOR4 ++ add x3, x0, 1104 ++ ldrh w0, [x0, 1104] ++ bl ftl_get_blk_mode ++ strb w0, [x3, 8] ++.L2836: ++ add x12, x20, :lo12:.LANCHOR4 ++ mov w0, 65535 ++ add x13, x12, 1104 ++ ldrh w1, [x12, 1104] ++ cmp w1, w0 ++ beq .L2830 ++ mov x0, x13 ++ bl make_superblock ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrh w1, [x12, 1104] ++ strh wzr, [x12, 1106] ++ strb wzr, [x12, 1110] ++ ldr x0, [x0, 2712] ++ strh wzr, [x12, 1898] ++ ldrh w0, [x0, x1, lsl 1] ++ strh w0, [x12, 1900] ++.L2830: ++ add x0, x20, :lo12:.LANCHOR4 ++ ldrh w1, [x0, 1104] ++ ldrh w2, [x0, 784] ++ cmp w2, w1 ++ beq .L2837 ++ ldrh w2, [x0, 832] ++ cmp w2, w1 ++ beq .L2837 ++ ldrh w0, [x0, 880] ++ cmp w0, w1 ++ bne .L2871 ++.L2837: ++ add x0, x20, :lo12:.LANCHOR4 ++ mov w1, -1 ++ strh w1, [x0, 1104] ++.L2871: ++ add x25, x20, :lo12:.LANCHOR4 ++ mov w0, 65535 ++ ldrh w26, [x25, 1104] ++ cmp w26, w0 ++ bne .L2839 ++ add x23, x19, :lo12:.LANCHOR2 ++ mov w27, 2 ++ str wzr, [x23, 2452] ++.L2840: ++ ldrh w5, [x23, 2484] ++ mov w0, w5 ++ bl List_get_gc_head_node ++ and w6, w0, 65535 ++ strh w6, [x25, 1104] ++ cmp w6, w26 ++ bne .L2841 ++ strh wzr, [x23, 2484] ++ mov w0, 8 ++ b .L2779 ++.L2831: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x1, 2472] ++ cmp w0, w21 ++ beq .L2832 ++ ldr x2, [x1, 2712] ++ ubfiz x0, x0, 1, 16 ++ ldrh w0, [x2, x0] ++ cbnz w0, .L2833 ++ mov w0, -1 ++ strh w0, [x1, 2472] ++.L2833: ++ add x1, x19, :lo12:.LANCHOR2 ++ add x0, x20, :lo12:.LANCHOR4 ++ ldrh w2, [x1, 2472] ++ strh w2, [x0, 1104] ++ mov w0, -1 ++ strh w0, [x1, 2472] ++ b .L2832 ++.L2841: ++ mov w0, w6 ++ bl IsBlkInGcList ++ add w5, w5, 1 ++ cbz w0, .L2842 ++ strh w5, [x23, 2484] ++ b .L2840 ++.L2842: ++ ldrh w4, [x23, 2276] ++ ubfiz x1, x6, 1, 16 ++ ldrh w0, [x23, 2344] ++ and w5, w5, 65535 ++ ldr x2, [x23, 2712] ++ strh w5, [x23, 2484] ++ mul w0, w0, w4 ++ ldrh w3, [x2, x1] ++ sdiv w4, w0, w27 ++ cmp w3, w4 ++ bgt .L2844 ++ cmp w5, 48 ++ bls .L2845 ++ cmp w3, 8 ++ bls .L2845 ++ ldrh w3, [x25, 1712] ++ cmp w3, 35 ++ bhi .L2845 ++.L2844: ++ strh wzr, [x23, 2484] ++.L2845: ++ ldrh w1, [x2, x1] ++ cmp w0, w1 ++ bgt .L2846 ++ cmp w21, w26 ++ bne .L2846 ++ ldrh w0, [x23, 2484] ++ cmp w0, 3 ++ bhi .L2846 ++ add x20, x20, :lo12:.LANCHOR4 ++ mov w0, -1 ++ strh wzr, [x23, 2484] ++ strh w0, [x20, 1104] ++ b .L2930 ++.L2846: ++ cbnz w1, .L2847 ++ mov w0, -1 ++ bl decrement_vpc_count ++ ldrh w0, [x23, 2484] ++ add w0, w0, 1 ++ strh w0, [x23, 2484] ++ b .L2840 ++.L2847: ++ add x0, x19, :lo12:.LANCHOR2 ++ add x3, x20, :lo12:.LANCHOR4 ++ add x3, x3, 1104 ++ ldrb w0, [x0, 1220] ++ strb wzr, [x3, 8] ++ cbz w0, .L2848 ++ mov w0, w6 ++ bl ftl_get_blk_mode ++ strb w0, [x3, 8] ++.L2848: ++ add x12, x20, :lo12:.LANCHOR4 ++ add x13, x12, 1104 ++ mov x0, x13 ++ bl make_superblock ++ ldrh w1, [x12, 1104] ++ add x0, x19, :lo12:.LANCHOR2 ++ strh wzr, [x12, 1898] ++ ldr x0, [x0, 2712] ++ ldrh w0, [x0, x1, lsl 1] ++ strh w0, [x12, 1900] ++ strh wzr, [x12, 1106] ++ strb wzr, [x12, 1110] ++.L2839: ++ ldr w0, [x29, 124] ++ cmp w0, 1 ++ bne .L2849 ++ bl FtlReadRefresh ++.L2849: ++ add x0, x19, :lo12:.LANCHOR2 ++ mov w1, 1 ++ str w1, [x0, 2448] ++ ldrb w1, [x0, 1220] ++ ldrh w25, [x0, 2344] ++ cbz w1, .L2850 ++ add x1, x20, :lo12:.LANCHOR4 ++ ldrb w1, [x1, 1112] ++ cmp w1, 1 ++ bne .L2850 ++ ldrh w25, [x0, 2346] ++.L2850: ++ add x0, x20, :lo12:.LANCHOR4 ++ ldrh w0, [x0, 1106] ++ add w1, w0, w22 ++ cmp w1, w25 ++ ble .L2851 ++ sub w22, w25, w0 ++ and w22, w22, 65535 ++.L2851: ++ add x24, x20, :lo12:.LANCHOR4 ++ mov w26, 0 ++ add x27, x24, 880 ++.L2852: ++ cmp w22, w26, uxth ++ bls .L2859 ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w5, [x24, 1106] ++ add x3, x24, 1120 ++ mov w23, 0 ++ add w5, w5, w26 ++ mov w0, 0 ++ ldrh w9, [x1, 2276] ++ mov w8, 65535 ++ mov w7, 56 ++ b .L2860 ++.L2854: ++ ldrh w2, [x3] ++ cmp w2, w8 ++ beq .L2853 ++ ldr x6, [x1, 2552] ++ orr w2, w5, w2, lsl 10 ++ umaddl x6, w23, w7, x6 ++ add w23, w23, 1 ++ and w23, w23, 65535 ++ str w2, [x6, 4] ++.L2853: ++ add w0, w0, 1 ++ add x3, x3, 2 ++ and w0, w0, 65535 ++.L2860: ++ cmp w0, w9 ++ bne .L2854 ++ add x3, x19, :lo12:.LANCHOR2 ++ ldrb w2, [x24, 1112] ++ mov w1, w23 ++ mov x28, x3 ++ ldr x0, [x3, 2552] ++ bl FlashReadPages ++ mov w0, 56 ++ umull x0, w23, w0 ++ mov x23, 0 ++ str x0, [x29, 112] ++.L2855: ++ ldr x0, [x29, 112] ++ cmp x0, x23 ++ bne .L2858 ++ add w26, w26, 1 ++ b .L2852 ++.L2858: ++ ldr x0, [x28, 2552] ++ add x1, x0, x23 ++ ldr w0, [x0, x23] ++ cmn w0, #1 ++ beq .L2856 ++ ldr x5, [x1, 16] ++ mov w1, 61589 ++ ldrh w0, [x5] ++ cmp w0, w1 ++ bne .L2856 ++ ldr w0, [x5, 8] ++ mov w2, 0 ++ add x1, x29, 136 ++ str x5, [x29, 104] ++ bl log2phys ++ ldr x0, [x28, 2552] ++ ldr w1, [x29, 136] ++ add x0, x0, x23 ++ ldr x5, [x29, 104] ++ and w1, w1, 2147483647 ++ ldr w2, [x0, 4] ++ cmp w1, w2 ++ bne .L2856 ++ ldrh w1, [x24, 1898] ++ mov w2, 56 ++ ldr x7, [x28, 2528] ++ add w1, w1, 1 ++ strh w1, [x24, 1898] ++ ldr w1, [x24, 1680] ++ ldr w0, [x0, 24] ++ str w2, [x29, 120] ++ nop // between mem op and mult-accumulate ++ umaddl x1, w1, w2, x7 ++ stp x5, x1, [x29, 96] ++ str w0, [x1, 24] ++ bl Ftl_get_new_temp_ppa ++ ldp x5, x1, [x29, 96] ++ ldr w2, [x29, 120] ++ str w0, [x1, 4] ++ ldr w0, [x24, 1680] ++ ldr x1, [x28, 2528] ++ umaddl x0, w0, w2, x1 ++ ldr x1, [x28, 2552] ++ add x1, x1, x23 ++ ldr x2, [x1, 8] ++ str x2, [x0, 8] ++ ldr x1, [x1, 16] ++ str x1, [x0, 16] ++ ldr w0, [x29, 136] ++ mov w1, 1 ++ str w0, [x5, 12] ++ ldrh w0, [x27] ++ strh w0, [x5, 2] ++ ldr w0, [x28, 2400] ++ str w0, [x5, 4] ++ ldr w0, [x24, 1680] ++ add w0, w0, 1 ++ str w0, [x24, 1680] ++ ldr x0, [x28, 2552] ++ add x0, x0, x23 ++ bl FtlGcBufAlloc ++ ldrb w0, [x28, 1220] ++ cbnz w0, .L2857 ++ ldrb w1, [x27, 7] ++ ldr w0, [x24, 1680] ++ cmp w1, w0 ++ beq .L2857 ++ ldrh w0, [x27, 4] ++ cbnz w0, .L2856 ++.L2857: ++ bl Ftl_gc_temp_data_write_back ++ cbz w0, .L2856 ++ add x20, x20, :lo12:.LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR2 ++ mov w0, -1 ++ strh wzr, [x20, 1106] ++ strh w0, [x20, 1104] ++ str wzr, [x19, 2448] ++ b .L2930 ++.L2856: ++ add x23, x23, 56 ++ b .L2855 ++.L2859: ++ add x23, x20, :lo12:.LANCHOR4 ++ ldrh w0, [x23, 1106] ++ add w22, w22, w0 ++ and w22, w22, 65535 ++ strh w22, [x23, 1106] ++ cmp w25, w22 ++ bhi .L2861 ++ ldr w0, [x23, 1680] ++ cbz w0, .L2862 ++ bl Ftl_gc_temp_data_write_back ++ cbz w0, .L2862 ++ add x19, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x23, 1896] ++ str wzr, [x19, 2448] ++ b .L2779 ++.L2862: ++ add x0, x20, :lo12:.LANCHOR4 ++ ldrh w1, [x0, 1898] ++ cbnz w1, .L2863 ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w3, [x0, 1104] ++ ldr x2, [x1, 2712] ++ ldrh w2, [x2, x3, lsl 1] ++ cbz w2, .L2863 ++ mov x25, x1 ++ mov x23, x0 ++ mov w22, 0 ++.L2864: ++ ldr w0, [x25, 2924] ++ cmp w22, w0 ++ bcs .L2869 ++ mov w2, 0 ++ add x1, x29, 140 ++ mov w0, w22 ++ bl log2phys ++ ldr w0, [x29, 140] ++ cmn w0, #1 ++ beq .L2865 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ ldrh w1, [x23, 1104] ++ cmp w1, w0, uxth ++ bne .L2865 ++.L2869: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldr w0, [x1, 2924] ++ cmp w22, w0 ++ bcc .L2863 ++ add x0, x20, :lo12:.LANCHOR4 ++ ldr x1, [x1, 2712] ++ ldrh w2, [x0, 1104] ++ strh wzr, [x1, x2, lsl 1] ++ ldrh w0, [x0, 1104] ++ bl update_vpc_list ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ bl FtlVpcTblFlush ++.L2863: ++ add x0, x20, :lo12:.LANCHOR4 ++ mov w1, -1 ++ strh w1, [x0, 1104] ++.L2861: ++ add x0, x20, :lo12:.LANCHOR4 ++ ldrh w1, [x0, 776] ++ cmp w1, 2 ++ bhi .L2870 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrh w22, [x0, 2344] ++ b .L2871 ++.L2865: ++ add w22, w22, 1 ++ b .L2864 ++.L2870: ++ ldrh w0, [x0, 1896] ++ add x19, x19, :lo12:.LANCHOR2 ++ cmp w0, 0 ++ csinc w0, w0, w1, ne ++ str wzr, [x19, 2448] ++ b .L2779 ++.L2878: ++ mov w0, 0 ++ b .L2779 ++ .size ftl_do_gc, .-ftl_do_gc ++ .align 2 ++ .global FtlCacheWriteBack ++ .type FtlCacheWriteBack, %function ++FtlCacheWriteBack: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR2 ++ add x0, x22, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr w24, [x0, 2928] ++ cbnz w24, .L2933 ++ ldr w1, [x0, 2496] ++ cbz w1, .L2933 ++ ldrb w0, [x0, 1220] ++ adrp x23, .LANCHOR4 ++ add x2, x23, :lo12:.LANCHOR4 ++ ldr x20, [x2, 1904] ++ cbz w0, .L2958 ++ ldrb w0, [x20, 8] ++ cmp w0, 1 ++ cset w25, eq ++.L2935: ++ add x19, x22, :lo12:.LANCHOR2 ++ ldrb w3, [x20, 9] ++ adrp x26, .LC159 ++ mov w2, w25 ++ mov w21, 0 ++ mov w27, 56 ++ ldr x0, [x19, 2560] ++ add x26, x26, :lo12:.LC159 ++ bl FlashProgPages ++.L2936: ++ ldr w0, [x19, 2496] ++ cmp w21, w0 ++ bcc .L2943 ++.L2955: ++ add x22, x22, :lo12:.LANCHOR2 ++ str wzr, [x22, 2496] ++.L2933: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L2958: ++ mov w25, 0 ++ b .L2935 ++.L2943: ++ umull x28, w21, w27 ++ ldr x0, [x19, 2560] ++ add x3, x0, x28 ++ ldr w0, [x0, x28] ++ cmn w0, #1 ++ bne .L2937 ++ add x19, x22, :lo12:.LANCHOR2 ++ add x23, x23, :lo12:.LANCHOR4 ++.L2938: ++ ldr w0, [x19, 2496] ++ cmp w24, w0 ++ bcc .L2953 ++ add x20, x22, :lo12:.LANCHOR2 ++ mov w19, 16386 ++.L2956: ++ ldrh w0, [x20, 2486] ++ cbz w0, .L2955 ++ mov w1, 1 ++ mov w0, w1 ++ bl ftl_do_gc ++ subs w19, w19, #1 ++ bne .L2956 ++ b .L2955 ++.L2937: ++ ldr w0, [x3, 4] ++ cbnz w25, .L2939 ++.L2972: ++ str w0, [x29, 108] ++ mov w2, 1 ++ ldr w0, [x3, 24] ++ add x1, x29, 108 ++ bl log2phys ++ ldr x0, [x19, 2560] ++ add x0, x0, x28 ++ ldr x0, [x0, 16] ++ ldr w0, [x0, 12] ++ cmn w0, #1 ++ beq .L2941 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ ldr x2, [x19, 2712] ++ and w1, w0, 65535 ++ ubfiz x0, x1, 1, 16 ++ mov w28, w1 ++ ldrh w0, [x2, x0] ++ cbnz w0, .L2942 ++ mov w2, 0 ++ mov x0, x26 ++ bl printk ++.L2942: ++ mov w0, w28 ++ bl decrement_vpc_count ++.L2941: ++ add w21, w21, 1 ++ b .L2936 ++.L2939: ++ orr w0, w0, -2147483648 ++ b .L2972 ++.L2953: ++ mov w21, 56 ++ ldr x0, [x19, 2560] ++ mov w1, -1 ++ mov w26, 1 ++ umull x21, w24, w21 ++ str w1, [x0, x21] ++.L2944: ++ ldr x0, [x19, 2560] ++ add x3, x0, x21 ++ ldr w0, [x0, x21] ++ cmn w0, #1 ++ ldr w0, [x3, 4] ++ beq .L2948 ++ cbnz w25, .L2949 ++.L2973: ++ str w0, [x29, 108] ++ mov w2, 1 ++ ldr w0, [x3, 24] ++ add x1, x29, 108 ++ bl log2phys ++ ldr x0, [x19, 2560] ++ add x21, x0, x21 ++ ldr x0, [x21, 16] ++ ldr w0, [x0, 12] ++ cmn w0, #1 ++ beq .L2951 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ ldr x2, [x19, 2712] ++ and w1, w0, 65535 ++ ubfiz x0, x1, 1, 16 ++ mov w21, w1 ++ ldrh w0, [x2, x0] ++ cbnz w0, .L2952 ++ adrp x0, .LC159 ++ mov w2, 0 ++ add x0, x0, :lo12:.LC159 ++ bl printk ++.L2952: ++ mov w0, w21 ++ bl decrement_vpc_count ++.L2951: ++ add w24, w24, 1 ++ b .L2938 ++.L2948: ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ ldrh w1, [x20] ++ cmp w1, w0, uxth ++ bne .L2945 ++ ldr x2, [x19, 2712] ++ 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, [x19, 2344] ++ strh w0, [x20, 2] ++ strh wzr, [x20, 4] ++.L2945: ++ ldrh w0, [x20, 4] ++ cbnz w0, .L2946 ++ mov x0, x20 ++ bl allocate_new_data_superblock ++.L2946: ++ ldr w0, [x23, 1248] ++ add w0, w0, 1 ++ str w0, [x23, 1248] ++ ldr x0, [x19, 2560] ++ add x0, x0, x21 ++ ldr w0, [x0, 4] ++ lsr w0, w0, 10 ++ bl FtlGcMarkBadPhyBlk ++ mov x0, x20 ++ bl get_new_active_ppa ++ ldr x1, [x19, 2560] ++ mov w2, w25 ++ str w0, [x29, 108] ++ add x1, x1, x21 ++ str w0, [x1, 4] ++ mov w1, 1 ++ ldrb w3, [x20, 9] ++ ldr x0, [x19, 2560] ++ add x0, x0, x21 ++ bl FlashProgPages ++ ldr x0, [x19, 2560] ++ ldr w0, [x0, x21] ++ cmn w0, #1 ++ bne .L2947 ++ str w26, [x19, 2928] ++.L2947: ++ ldr w0, [x19, 2928] ++ cbz w0, .L2944 ++ b .L2933 ++.L2949: ++ orr w0, w0, -2147483648 ++ b .L2973 ++ .size FtlCacheWriteBack, .-FtlCacheWriteBack ++ .align 2 ++ .global FtlSysFlush ++ .type FtlSysFlush, %function ++FtlSysFlush: ++ adrp x0, .LANCHOR2+2928 ++ ldr w0, [x0, #:lo12:.LANCHOR2+2928] ++ cbnz w0, .L2977 ++ stp x29, x30, [sp, -32]! ++ adrp x0, .LANCHOR1+3448 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ ldr w19, [x0, #:lo12:.LANCHOR1+3448] ++ cmp w19, 1 ++ bne .L2975 ++ bl FtlCacheWriteBack ++ bl l2p_flush ++ mov w0, w19 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L2975: ++ mov w0, 0 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2977: ++ mov w0, 0 ++ ret ++ .size FtlSysFlush, .-FtlSysFlush ++ .align 2 ++ .global FtlDeInit ++ .type FtlDeInit, %function ++FtlDeInit: ++ adrp x0, .LANCHOR1+3448 ++ ldr w0, [x0, #:lo12:.LANCHOR1+3448] ++ cmp w0, 1 ++ bne .L2983 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl FtlSysFlush ++ mov w0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L2983: ++ mov w0, 0 ++ 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, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov w21, w0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x22, x20, :lo12:.LANCHOR2 ++ ldr w0, [x22, 1224] ++ cmp w0, w21 ++ bls .L3000 ++ mov w19, w1 ++ cmp w0, w1 ++ bcc .L3000 ++ add w1, w21, w1 ++ cmp w0, w1 ++ bcc .L3000 ++ cmp w19, 31 ++ bhi .L2992 ++.L3008: ++ mov w0, 0 ++.L2990: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2992: ++ ldr w0, [x22, 2928] ++ cbnz w0, .L3008 ++ bl FtlCacheWriteBack ++ ldrh w0, [x22, 2350] ++ udiv w22, w21, w0 ++ msub w21, w0, w22, w21 ++ ands w21, w21, 65535 ++ beq .L2994 ++ sub w21, w0, w21 ++ add w22, w22, 1 ++ cmp w21, w19 ++ csel w21, w21, w19, ls ++ sub w19, w19, w21, uxth ++.L2994: ++ adrp x21, .LANCHOR4 ++ add x20, x20, :lo12:.LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR4 ++ mov w0, -1 ++ str w0, [x29, 60] ++.L2995: ++ ldrh w0, [x20, 2350] ++ cmp w19, w0 ++ bcs .L2997 ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ ldr w1, [x0, 1912] ++ cmp w1, 32 ++ bls .L3008 ++ str wzr, [x0, 1912] ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ b .L3008 ++.L2997: ++ mov w2, 0 ++ add x1, x29, 56 ++ mov w0, w22 ++ bl log2phys ++ ldr w0, [x29, 56] ++ cmn w0, #1 ++ beq .L2996 ++ ldr w0, [x21, 1912] ++ mov w2, 1 ++ add x1, x29, 60 ++ add w0, w0, 1 ++ str w0, [x21, 1912] ++ ldr w0, [x20, 2412] ++ add w0, w0, 1 ++ str w0, [x20, 2412] ++ mov w0, w22 ++ bl log2phys ++ ldr w0, [x29, 56] ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ bl decrement_vpc_count ++.L2996: ++ ldrh w0, [x20, 2350] ++ add w22, w22, 1 ++ sub w19, w19, w0 ++ b .L2995 ++.L3000: ++ mov w0, -1 ++ b .L2990 ++ .size ftl_discard, .-ftl_discard ++ .align 2 ++ .global FtlGcFreeTempBlock ++ .type FtlGcFreeTempBlock, %function ++FtlGcFreeTempBlock: ++ stp x29, x30, [sp, -112]! ++ 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] ++ str x27, [sp, 80] ++ ldrh w1, [x2, 2344] ++ ldr w2, [x2, 2928] ++ cbz w2, .L3010 ++.L3047: ++ mov w0, 0 ++.L3009: ++ 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 ++.L3010: ++ adrp x20, .LANCHOR4 ++ add x2, x20, :lo12:.LANCHOR4 ++ mov w3, 65535 ++ ldrh w21, [x2, 880] ++ cmp w21, w3 ++ bne .L3012 ++.L3021: ++ add x21, x20, :lo12:.LANCHOR4 ++ mov w0, 65535 ++ add x22, x21, 880 ++ ldrh w1, [x21, 880] ++ str wzr, [x21, 1704] ++ cmp w1, w0 ++ beq .L3047 ++ bl FtlCacheWriteBack ++ mov w23, 0 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrb w1, [x22, 7] ++ ldrh w3, [x21, 880] ++ mov x22, x0 ++ mov w26, 12 ++ ldrh w4, [x0, 2344] ++ ldr x2, [x0, 2712] ++ mul w1, w1, w4 ++ strh w1, [x2, x3, lsl 1] ++ ldr w2, [x0, 2404] ++ ldrh w1, [x21, 1714] ++ add w1, w1, w2 ++ str w1, [x0, 2404] ++.L3022: ++ ldrh w0, [x21, 1714] ++ cmp w0, w23 ++ bhi .L3026 ++ mov w0, -1 ++ bl decrement_vpc_count ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 1220] ++ cbz w0, .L3027 ++ ldrh w1, [x21, 880] ++ adrp x0, .LC160 ++ add x0, x0, :lo12:.LC160 ++ bl printk ++.L3027: ++ add x0, x20, :lo12:.LANCHOR4 ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 880] ++ ldr x1, [x1, 2712] ++ ubfiz x2, x0, 1, 16 ++ ldrh w1, [x1, x2] ++ cbz w1, .L3028 ++ bl INSERT_DATA_LIST ++.L3029: ++ add x21, x20, :lo12:.LANCHOR4 ++ mov w22, -1 ++ strh wzr, [x21, 1714] ++ strh w22, [x21, 880] ++ strh wzr, [x21, 1712] ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ strh w22, [x21, 1104] ++ add x1, x19, :lo12:.LANCHOR2 ++ ldr w0, [x1, 2096] ++ cbz w0, .L3030 ++ ldr w0, [x1, 2444] ++ cmp w0, 39 ++ bhi .L3030 ++ ldrh w0, [x21, 1096] ++ ldrh w2, [x21, 776] ++ cmp w2, w0 ++ bcs .L3047 ++ ubfiz w0, w0, 1, 15 ++ strh w0, [x1, 2480] ++ b .L3047 ++.L3012: ++ cbz w0, .L3015 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ ldrh w4, [x0, 3452] ++ cmp w4, w3 ++ beq .L3016 ++.L3017: ++ mov w1, 2 ++.L3015: ++ add x0, x20, :lo12:.LANCHOR4 ++ add x0, x0, 880 ++ bl FtlGcScanTempBlk ++ str w0, [x29, 108] ++ cmn w0, #1 ++ beq .L3018 ++ add x19, x19, :lo12:.LANCHOR2 ++ ubfiz x21, x21, 1, 16 ++ ldr x1, [x19, 2696] ++ ldrh w0, [x1, x21] ++ cmp w0, 4 ++ bls .L3019 ++ sub w0, w0, #5 ++ strh w0, [x1, x21] ++ mov w0, 1 ++ bl FtlEctTblFlush ++.L3019: ++ add x0, x20, :lo12:.LANCHOR4 ++ ldr w1, [x0, 1704] ++ cbnz w1, .L3020 ++ ldr w1, [x0, 1248] ++ add w1, w1, 1 ++ str w1, [x0, 1248] ++ ldr w0, [x29, 108] ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++.L3020: ++ add x20, x20, :lo12:.LANCHOR4 ++ str wzr, [x20, 1704] ++.L3032: ++ mov w0, 1 ++ b .L3009 ++.L3016: ++ strh wzr, [x0, 3452] ++ ldrh w0, [x2, 776] ++ cmp w0, 17 ++ bhi .L3017 ++ b .L3015 ++.L3018: ++ adrp x0, .LANCHOR1+3452 ++ ldrh w1, [x0, #:lo12:.LANCHOR1+3452] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L3032 ++ b .L3021 ++.L3026: ++ umull x25, w23, w26 ++ ldr x27, [x22, 2512] ++ ldr w1, [x22, 2924] ++ add x24, x27, x25 ++ ldr w0, [x24, 8] ++ cmp w0, w1 ++ bcc .L3023 ++.L3044: ++ ldrh w0, [x21, 880] ++ b .L3045 ++.L3023: ++ add x1, x29, 108 ++ mov w2, 0 ++ bl log2phys ++ ldr w0, [x27, x25] ++ ldr w1, [x29, 108] ++ cmp w0, w1 ++ bne .L3025 ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ mov w25, w0 ++ ldr w0, [x24, 8] ++ mov w2, 1 ++ add x1, x24, 4 ++ bl log2phys ++ mov w0, w25 ++.L3045: ++ bl decrement_vpc_count ++ b .L3024 ++.L3025: ++ ldr w0, [x24, 4] ++ cmp w1, w0 ++ bne .L3044 ++.L3024: ++ add w23, w23, 1 ++ and w23, w23, 65535 ++ b .L3022 ++.L3028: ++ bl INSERT_FREE_LIST ++ b .L3029 ++.L3030: ++ add x20, x20, :lo12:.LANCHOR4 ++ ldrh w0, [x20, 1096] ++ ldrh w1, [x20, 776] ++ add w2, w0, w0, lsl 1 ++ cmp w1, w2, lsr 2 ++ ble .L3047 ++ add x19, x19, :lo12:.LANCHOR2 ++ ldrb w1, [x19, 1220] ++ cbz w1, .L3031 ++ sub w0, w0, #2 ++.L3046: ++ strh w0, [x19, 2480] ++ b .L3047 ++.L3031: ++ mov w0, 20 ++ b .L3046 ++ .size FtlGcFreeTempBlock, .-FtlGcFreeTempBlock ++ .align 2 ++ .global FtlGcPageRecovery ++ .type FtlGcPageRecovery, %function ++FtlGcPageRecovery: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x20, x20, :lo12:.LANCHOR2 ++ adrp x19, .LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR4 ++ str x21, [sp, 32] ++ add x21, x19, 880 ++ ldrh w1, [x20, 2344] ++ mov x0, x21 ++ bl FtlGcScanTempBlk ++ ldrh w1, [x19, 882] ++ ldrh w0, [x20, 2344] ++ cmp w1, w0 ++ bcc .L3048 ++ add x0, x19, 928 ++ bl FtlMapBlkWriteDumpData ++ mov w0, 0 ++ bl FtlGcFreeTempBlock ++ str wzr, [x19, 1704] ++.L3048: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FtlGcPageRecovery, .-FtlGcPageRecovery ++ .align 2 ++ .global FtlPowerLostRecovery ++ .type FtlPowerLostRecovery, %function ++FtlPowerLostRecovery: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR4 ++ add x20, x19, 784 ++ add x19, x19, 832 ++ mov x0, x20 ++ str wzr, [x19, 928] ++ 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 FtlSysBlkInit ++ .type FtlSysBlkInit, %function ++FtlSysBlkInit: ++ stp x29, x30, [sp, -64]! ++ mov w0, -1 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR4 ++ stp x21, x22, [sp, 32] ++ adrp x20, .LANCHOR2 ++ add x21, x19, :lo12:.LANCHOR4 ++ add x22, x20, :lo12:.LANCHOR2 ++ str x23, [sp, 48] ++ strh w0, [x21, 1754] ++ ldrh w0, [x22, 2280] ++ strh wzr, [x21, 1756] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlScanSysBlk ++ ldrh w1, [x21, 1072] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L3054 ++.L3056: ++ mov w21, -1 ++.L3053: ++ mov w0, w21 ++ ldr x23, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L3054: ++ bl FtlLoadSysInfo ++ mov w21, w0 ++ cbnz w0, .L3056 ++ bl FtlLoadMapInfo ++ bl FtlLoadVonderInfo ++ bl Ftl_load_ext_data ++ bl FtlLoadEctTbl ++ bl FtlFreeSysBLkSort ++ bl SupperBlkListInit ++ bl FtlPowerLostRecovery ++ mov w0, 1 ++ bl FtlUpdateVaildLpn ++ ldr x1, [x22, 2792] ++ mov w0, 0 ++ ldrh w3, [x22, 2382] ++ add x1, x1, 4 ++.L3057: ++ cmp w0, w3 ++ bge .L3062 ++ ldr w2, [x1], 16 ++ tbz w2, #31, .L3058 ++.L3062: ++ add x2, x19, :lo12:.LANCHOR4 ++ cmp w0, w3 ++ ldrh w1, [x2, 724] ++ add w1, w1, 1 ++ strh w1, [x2, 724] ++ bge .L3069 ++.L3059: ++ add x0, x19, :lo12:.LANCHOR4 ++ add x1, x20, :lo12:.LANCHOR2 ++ ldrh w3, [x0, 784] ++ ldr x5, [x1, 2712] ++ ldrh w6, [x0, 788] ++ lsl x3, x3, 1 ++ ldrh w4, [x5, x3] ++ sub w4, w4, w6 ++ strh w4, [x5, x3] ++ strb wzr, [x0, 790] ++ ldrh w3, [x1, 2344] ++ strh w3, [x0, 786] ++ ldrh w3, [x0, 832] ++ ldr x5, [x1, 2712] ++ strh wzr, [x0, 788] ++ lsl x3, x3, 1 ++ ldrh w6, [x0, 836] ++ ldrh w4, [x5, x3] ++ sub w4, w4, w6 ++ strh w4, [x5, x3] ++ strb wzr, [x0, 838] ++ ldrh w1, [x1, 2344] ++ strh w1, [x0, 834] ++ ldrh w1, [x0, 726] ++ strh wzr, [x0, 836] ++ add w1, w1, 1 ++ strh w1, [x0, 726] ++ bl l2p_flush ++ bl FtlVpcTblFlush ++ bl FtlVpcTblFlush ++ b .L3063 ++.L3058: ++ add w0, w0, 1 ++ b .L3057 ++.L3069: ++ ldrh w0, [x2, 1756] ++ cbnz w0, .L3059 ++.L3063: ++ add x20, x19, :lo12:.LANCHOR4 ++ mov w1, 65535 ++ add x23, x20, 784 ++ ldrh w0, [x20, 784] ++ cmp w0, w1 ++ beq .L3064 ++ ldrh w1, [x20, 788] ++ cbnz w1, .L3064 ++ ldrh w1, [x20, 836] ++ add x22, x20, 832 ++ cbnz w1, .L3064 ++ bl FtlGcRefreshOpenBlock ++ ldrh w0, [x20, 832] ++ bl FtlGcRefreshOpenBlock ++ bl FtlVpcTblFlush ++ mov x0, x23 ++ bl allocate_new_data_superblock ++ mov x0, x22 ++ bl allocate_new_data_superblock ++.L3064: ++ adrp x0, .LANCHOR0+88 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+88] ++ cbnz w0, .L3065 ++ add x19, x19, :lo12:.LANCHOR4 ++ ldrh w0, [x19, 724] ++ tst x0, 31 ++ bne .L3053 ++.L3065: ++ bl FtlVpcCheckAndModify ++ b .L3053 ++ .size FtlSysBlkInit, .-FtlSysBlkInit ++ .align 2 ++ .global FtlLowFormat ++ .type FtlLowFormat, %function ++FtlLowFormat: ++ stp x29, x30, [sp, -64]! ++ 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] ++ ldr w0, [x20, 2928] ++ cbnz w0, .L3073 ++ ldr x0, [x20, 2776] ++ mov w1, 0 ++ ldrh w2, [x20, 2380] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldr x0, [x20, 2768] ++ mov w1, 0 ++ ldrh w2, [x20, 2380] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldrh w0, [x20, 2280] ++ str wzr, [x20, 2396] ++ str wzr, [x20, 2400] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cbz w0, .L3074 ++ bl FtlMakeBbt ++.L3074: ++ mov w4, 23752 ++ add x1, x19, :lo12:.LANCHOR2 ++ mov w0, 0 ++ movk w4, 0xa0f, lsl 16 ++.L3075: ++ ldrh w2, [x1, 2350] ++ cmp w0, w2, lsl 7 ++ blt .L3076 ++ ldrh w21, [x1, 2284] ++ add x22, x19, :lo12:.LANCHOR2 ++ mov w20, 0 ++.L3077: ++ ldrh w0, [x22, 2286] ++ cmp w0, w21 ++ bhi .L3078 ++ ldrh w0, [x22, 2276] ++ sub w1, w20, #3 ++ cmp w1, w0, lsl 1 ++ blt .L3079 ++ udiv w0, w20, w0 ++ ldr w20, [x22, 2376] ++ add w0, w0, w20 ++ bl FtlSysBlkNumInit ++ ldrh w0, [x22, 2280] ++ mov w20, 0 ++ bl FtlFreeSysBlkQueueInit ++ ldrh w21, [x22, 2284] ++ add x22, x19, :lo12:.LANCHOR2 ++.L3080: ++ ldrh w0, [x22, 2286] ++ cmp w0, w21 ++ bhi .L3081 ++.L3079: ++ add x23, x19, :lo12:.LANCHOR2 ++ mov w22, 0 ++ mov w21, 0 ++.L3082: ++ ldrh w0, [x23, 2284] ++ cmp w0, w21 ++ bhi .L3083 ++ ldrh w0, [x23, 2286] ++ adrp x21, .LANCHOR4 ++ ldr w2, [x23, 2288] ++ add x5, x21, :lo12:.LANCHOR4 ++ str w0, [x23, 2468] ++ ldrh w0, [x23, 2276] ++ udiv w4, w2, w0 ++ ubfx x3, x4, 5, 16 ++ str w4, [x23, 2924] ++ add w1, w3, 36 ++ strh w1, [x5, 1096] ++ mov w1, 24 ++ mul w1, w0, w1 ++ cmp w22, w1 ++ ble .L3084 ++ sub w2, w2, w22 ++ udiv w2, w2, w0 ++ str w2, [x23, 2924] ++ lsr w2, w2, 5 ++ add w2, w2, 24 ++ strh w2, [x5, 1096] ++.L3084: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldr w1, [x1, 2096] ++ cmp w1, 1 ++ bne .L3085 ++ udiv w2, w22, w0 ++ add x1, x21, :lo12:.LANCHOR4 ++ ldrh w5, [x1, 1096] ++ add w2, w2, w5 ++ add w2, w5, w2, asr 2 ++ strh w2, [x1, 1096] ++.L3085: ++ add x1, x19, :lo12:.LANCHOR2 ++ ldrb w1, [x1, 1220] ++ cbz w1, .L3086 ++ udiv w2, w22, w0 ++ add x1, x21, :lo12:.LANCHOR4 ++ ldrh w5, [x1, 1096] ++ add w2, w2, w5 ++ add w2, w5, w2, asr 2 ++ strh w2, [x1, 1096] ++.L3086: ++ add x6, x19, :lo12:.LANCHOR2 ++ ldrh w1, [x6, 2338] ++ cbz w1, .L3088 ++ add x2, x21, :lo12:.LANCHOR4 ++ ldrh w5, [x2, 1096] ++ add w5, w5, w1, lsr 1 ++ strh w5, [x2, 1096] ++ mul w5, w1, w0 ++ cmp w22, w5 ++ bge .L3088 ++ add w1, w1, 32 ++ str w4, [x6, 2924] ++ add w1, w3, w1 ++ strh w1, [x2, 1096] ++.L3088: ++ add x23, x19, :lo12:.LANCHOR2 ++ add x2, x21, :lo12:.LANCHOR4 ++ ldr w1, [x23, 2924] ++ ldrh w3, [x2, 1096] ++ sub w1, w1, w3 ++ mul w0, w1, w0 ++ ldrh w1, [x23, 2344] ++ str w0, [x2, 1092] ++ mul w0, w1, w0 ++ ldrh w1, [x23, 2350] ++ str w0, [x23, 2924] ++ mul w0, w1, w0 ++ str w0, [x23, 1224] ++ bl FtlBbmTblFlush ++ ldrh w0, [x23, 2358] ++ add w1, w20, w22 ++ ldr w2, [x23, 2292] ++ add w0, w0, w2, lsr 3 ++ cmp w1, w0 ++ bls .L3090 ++ adrp x0, .LC161 ++ lsr w2, w2, 5 ++ add x0, x0, :lo12:.LC161 ++ bl printk ++.L3090: ++ add x23, x19, :lo12:.LANCHOR2 ++ add x22, x21, :lo12:.LANCHOR4 ++ add x20, x22, 784 ++ mov w1, 0 ++ mov w24, -1 ++ ldr x0, [x23, 2712] ++ ldrh w2, [x23, 2286] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ mov w0, 1 ++ strb w0, [x20, 8] ++ adrp x0, .LANCHOR0+80 ++ ldrh w2, [x23, 2284] ++ strh w24, [x22, 1104] ++ mov w1, 255 ++ ldr x0, [x0, #:lo12:.LANCHOR0+80] ++ strh wzr, [x22, 1106] ++ lsr w2, w2, 3 ++ strb wzr, [x22, 1110] ++ strb wzr, [x22, 1112] ++ strh wzr, [x20, 2] ++ strb wzr, [x20, 6] ++ strh wzr, [x22, 784] ++ str wzr, [x22, 1068] ++ bl ftl_memset ++.L3091: ++ mov x0, x20 ++ bl make_superblock ++ ldrb w1, [x20, 7] ++ ldrh w0, [x20] ++ cbnz w1, .L3092 ++ ldr x1, [x23, 2712] ++ ubfiz x0, x0, 1, 16 ++ strh w24, [x1, x0] ++ ldrh w0, [x20] ++ add w0, w0, 1 ++ strh w0, [x20] ++ b .L3091 ++.L3076: ++ ldr x5, [x1, 2616] ++ ubfiz x3, x0, 2, 16 ++ mvn w2, w0 ++ orr w2, w0, w2, lsl 16 ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ str w2, [x5, x3] ++ ldr x2, [x1, 2624] ++ str w4, [x2, x3] ++ b .L3075 ++.L3078: ++ mov w0, w21 ++ mov w1, 1 ++ add w21, w21, 1 ++ bl FtlLowFormatEraseBlock ++ add w20, w20, w0 ++ and w21, w21, 65535 ++ and w20, w20, 65535 ++ b .L3077 ++.L3081: ++ mov w0, w21 ++ mov w1, 1 ++ add w21, w21, 1 ++ bl FtlLowFormatEraseBlock ++ add w20, w20, w0 ++ and w21, w21, 65535 ++ and w20, w20, 65535 ++ b .L3080 ++.L3083: ++ mov w0, w21 ++ mov w1, 0 ++ add w21, w21, 1 ++ bl FtlLowFormatEraseBlock ++ add w22, w22, w0 ++ and w21, w21, 65535 ++ and w22, w22, 65535 ++ b .L3082 ++.L3092: ++ add x1, x19, :lo12:.LANCHOR2 ++ ubfiz x0, x0, 1, 16 ++ ldrh w3, [x20, 4] ++ mov x13, x1 ++ mov w14, -1 ++ ldr w2, [x1, 2396] ++ str w2, [x20, 12] ++ add w2, w2, 1 ++ str w2, [x1, 2396] ++ ldr x2, [x1, 2712] ++ strh w3, [x2, x0] ++ add x0, x22, 832 ++ mov x12, x0 ++ strh wzr, [x22, 834] ++ ldrh w2, [x20] ++ add x20, x21, :lo12:.LANCHOR4 ++ strb wzr, [x22, 838] ++ add w2, w2, 1 ++ strh w2, [x22, 832] ++ mov w2, 1 ++ strb w2, [x22, 840] ++.L3093: ++ mov x0, x12 ++ bl make_superblock ++ ldrb w1, [x12, 7] ++ ldrh w0, [x12] ++ cbnz w1, .L3094 ++ ldr x1, [x13, 2712] ++ ubfiz x0, x0, 1, 16 ++ strh w14, [x1, x0] ++ ldrh w0, [x12] ++ add w0, w0, 1 ++ strh w0, [x12] ++ b .L3093 ++.L3094: ++ add x19, x19, :lo12:.LANCHOR2 ++ ubfiz x0, x0, 1, 16 ++ ldrh w2, [x12, 4] ++ mov w21, -1 ++ ldr w1, [x19, 2396] ++ str w1, [x12, 12] ++ add w1, w1, 1 ++ str w1, [x19, 2396] ++ ldr x1, [x19, 2712] ++ strh w2, [x1, x0] ++ strh w21, [x20, 880] ++ bl FtlFreeSysBlkQueueOut ++ strh w0, [x20, 1072] ++ ldr w0, [x20, 1092] ++ strh w0, [x20, 1078] ++ ldr w0, [x19, 2396] ++ str w0, [x20, 1080] ++ add w0, w0, 1 ++ strh wzr, [x20, 1074] ++ strh w21, [x20, 1076] ++ str w0, [x19, 2396] ++ bl FtlVpcTblFlush ++ bl FtlSysBlkInit ++ cbnz w0, .L3073 ++ adrp x0, .LANCHOR1+3448 ++ mov w1, 1 ++ str w1, [x0, #:lo12:.LANCHOR1+3448] ++.L3073: ++ 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 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, .LANCHOR2 ++ add x0, x19, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 1220] ++ cbz w0, .L3104 ++.L3106: ++ mov w20, 0 ++.L3103: ++ mov w0, w20 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L3104: ++ adrp x0, RK29_NANDC_REG_BASE ++ ldr x0, [x0, #:lo12:RK29_NANDC_REG_BASE] ++ bl FlashInit ++ mov w20, w0 ++ cbnz w0, .L3106 ++ bl FlashLoadFactorBbt ++ cbz w0, .L3107 ++ bl FlashMakeFactorBbt ++.L3107: ++ add x0, x19, :lo12:.LANCHOR2 ++ ldr x0, [x0, 2216] ++ bl FlashReadIdbDataRaw ++ cbz w0, .L3108 ++ mov w2, 16 ++ mov w1, 0 ++ add x0, x29, 32 ++ bl FlashReadFacBbtData ++ ldr w2, [x29, 32] ++ mov w0, 0 ++ mov w1, 0 ++ mov w4, 1 ++.L3110: ++ lsl w3, w4, w1 ++ add w1, w1, 1 ++ tst w3, w2 ++ cinc w0, w0, ne ++ cmp w1, 16 ++ bne .L3110 ++ cmp w0, 6 ++ bhi .L3111 ++ adrp x0, .LANCHOR0+89 ++ strb w1, [x0, #:lo12:.LANCHOR0+89] ++.L3112: ++ add x0, x19, :lo12:.LANCHOR2 ++ adrp x1, .LANCHOR0+89 ++ ldrb w1, [x1, #:lo12:.LANCHOR0+89] ++ strh w1, [x0, 1218] ++.L3108: ++ adrp x1, .LC144 ++ add x1, x1, :lo12:.LC144 ++ add x19, x19, :lo12:.LANCHOR2 ++ adrp x0, .LC48 ++ add x0, x0, :lo12:.LC48 ++ bl printk ++ add x0, x19, 1192 ++ bl FtlConstantsInit ++ bl FtlVariablesInit ++ ldrh w0, [x19, 2280] ++ mov w19, 1 ++ bl FtlFreeSysBlkQueueInit ++.L3116: ++ bl FtlLoadBbt ++ cbz w0, .L3117 ++.L3136: ++ bl FtlLowFormat ++ cmp w19, 3 ++ bls .L3118 ++ mov w20, -1 ++ b .L3103 ++.L3111: ++ mov w1, 0 ++ mov w4, 1 ++.L3114: ++ lsl w3, w4, w1 ++ add w1, w1, 1 ++ tst w3, w2 ++ cinc w0, w0, ne ++ cmp w1, 24 ++ bne .L3114 ++ cmp w0, 17 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ bhi .L3115 ++.L3134: ++ strb w1, [x0, 89] ++ b .L3112 ++.L3115: ++ mov w1, 36 ++ b .L3134 ++.L3118: ++ add w19, w19, 1 ++ b .L3116 ++.L3117: ++ bl FtlSysBlkInit ++ cbnz w0, .L3136 ++ adrp x0, .LANCHOR1+3448 ++ mov w1, 1 ++ str w1, [x0, #:lo12:.LANCHOR1+3448] ++ b .L3103 ++ .size FtlReInitForSDUpdata, .-FtlReInitForSDUpdata ++ .align 2 ++ .global Ftl_gc_temp_data_write_back ++ .type Ftl_gc_temp_data_write_back, %function ++Ftl_gc_temp_data_write_back: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ str x21, [sp, 32] ++ adrp x21, .LANCHOR2 ++ add x0, x21, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ ldr w1, [x0, 2928] ++ cbz w1, .L3138 ++.L3141: ++ mov w0, 0 ++.L3137: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L3138: ++ ldrb w0, [x0, 1220] ++ adrp x12, .LANCHOR4 ++ cbz w0, .L3140 ++ add x0, x12, :lo12:.LANCHOR4 ++ ldr w1, [x0, 1680] ++ tbz x1, 0, .L3140 ++ ldrh w0, [x0, 884] ++ cbnz w0, .L3141 ++.L3140: ++ add x11, x21, :lo12:.LANCHOR2 ++ add x19, x12, :lo12:.LANCHOR4 ++ mov w3, 0 ++ mov w2, 0 ++ mov x20, x11 ++ ldr w1, [x19, 1680] ++ ldr x0, [x11, 2528] ++ bl FlashProgPages ++ mov w13, 0 ++ mov w14, 56 ++.L3142: ++ ldr w1, [x19, 1680] ++ cmp w13, w1 ++ bcc .L3144 ++ add x21, x21, :lo12:.LANCHOR2 ++ ldr x0, [x21, 2528] ++ bl FtlGcBufFree ++ str wzr, [x19, 1680] ++ ldrh w0, [x19, 884] ++ cbnz w0, .L3141 ++ mov w0, 1 ++ bl FtlGcFreeTempBlock ++ b .L3152 ++.L3144: ++ umull x1, w13, w14 ++ ldr x2, [x20, 2528] ++ add x3, x2, x1 ++ ldr w2, [x2, x1] ++ ldr x0, [x3, 16] ++ cmn w2, #1 ++ bne .L3143 ++ ldrh w3, [x19, 880] ++ ldr x0, [x20, 2712] ++ strh wzr, [x0, x3, lsl 1] ++ strh w2, [x19, 880] ++ ldr w0, [x19, 1248] ++ add w0, w0, 1 ++ str w0, [x19, 1248] ++ ldr x0, [x20, 2528] ++ add x0, x0, x1 ++ ldr w0, [x0, 4] ++ lsr w0, w0, 10 ++ bl FtlBbmMapBadBlock ++ bl FtlBbmTblFlush ++ bl FtlGcPageVarInit ++.L3152: ++ mov w0, 1 ++ b .L3137 ++.L3143: ++ ldp w2, w0, [x0, 8] ++ ldr w1, [x3, 4] ++ bl FtlGcUpdatePage ++ add w13, w13, 1 ++ and w13, w13, 65535 ++ b .L3142 ++ .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 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR4 ++ add x0, x19, :lo12:.LANCHOR4 ++ add x1, x0, 880 ++ ldrh w2, [x0, 880] ++ mov w0, 65535 ++ cmp w2, w0 ++ beq .L3154 ++ ldrh w0, [x1, 4] ++ cbnz w0, .L3155 ++.L3154: ++ bl FtlCacheWriteBack ++ add x20, x19, :lo12:.LANCHOR4 ++ mov w0, 0 ++ bl FtlGcFreeTempBlock ++ add x0, x20, 880 ++ strb wzr, [x0, 8] ++ bl allocate_data_superblock ++ strh wzr, [x20, 1712] ++ strh wzr, [x20, 1714] ++ bl l2p_flush ++ mov w0, 0 ++ bl FtlEctTblFlush ++ bl FtlVpcTblFlush ++.L3155: ++ add x0, x19, :lo12:.LANCHOR4 ++ add x0, x0, 880 ++ bl get_new_active_ppa ++ ldp x19, x20, [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: ++ sub sp, sp, #208 ++ adrp x4, .LANCHOR1+3448 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x21, x22, [sp, 48] ++ stp x19, x20, [sp, 32] ++ ldr w21, [x4, #:lo12:.LANCHOR1+3448] ++ stp x23, x24, [sp, 64] ++ stp x25, x26, [sp, 80] ++ cmp w21, 1 ++ stp x27, x28, [sp, 96] ++ bne .L3182 ++ mov x23, x3 ++ mov w24, w2 ++ mov w19, w1 ++ cmp w0, 16 ++ bne .L3159 ++ mov x2, x3 ++ mov w1, w24 ++ add w0, w19, 256 ++ bl FtlVendorPartRead ++ mov w25, w0 ++.L3157: ++ mov w0, w25 ++ 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, 208 ++ ret ++.L3159: ++ adrp x20, .LANCHOR2 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr w1, [x0, 1224] ++ cmp w19, w1 ++ bcs .L3182 ++ cmp w2, w1 ++ bhi .L3182 ++ add w2, w19, w2 ++ str w2, [x29, 156] ++ cmp w1, w2 ++ bcc .L3182 ++ ldrh w1, [x0, 2350] ++ sub w26, w2, #1 ++ adrp x7, .LANCHOR4 ++ add x2, x7, :lo12:.LANCHOR4 ++ udiv w27, w19, w1 ++ udiv w26, w26, w1 ++ sub w21, w21, w27 ++ add w1, w21, w26 ++ str w1, [x29, 172] ++ ldr w1, [x2, 1668] ++ add w1, w1, w24 ++ str w1, [x2, 1668] ++ ldr w2, [x29, 172] ++ ldr w1, [x0, 2424] ++ add w1, w1, w2 ++ str w1, [x0, 2424] ++ mov w1, w26 ++ mov w0, w27 ++ bl FtlCacheMetchLpa ++ str x7, [x29, 112] ++ cbz w0, .L3160 ++ bl FtlCacheWriteBack ++.L3160: ++ mov w22, w27 ++ adrp x0, .LC57 ++ mov w28, 0 ++ add x0, x0, :lo12:.LC57 ++ mov w25, 0 ++ str x0, [x29, 104] ++ stp wzr, wzr, [x29, 164] ++.L3161: ++ ldr w0, [x29, 172] ++ cbnz w0, .L3178 ++ add x20, x20, :lo12:.LANCHOR2 ++ ldrh w0, [x20, 2486] ++ cbz w0, .L3157 ++ mov w1, 1 ++ mov w0, 0 ++ bl ftl_do_gc ++ b .L3157 ++.L3178: ++ mov w2, 0 ++ add x1, x29, 188 ++ mov w0, w22 ++ bl log2phys ++ ldr w4, [x29, 188] ++ cmn w4, #1 ++ bne .L3162 ++ add x5, x20, :lo12:.LANCHOR2 ++ mov w21, 0 ++.L3163: ++ ldrh w0, [x5, 2350] ++ cmp w21, w0 ++ bcc .L3165 ++.L3166: ++ ldr w0, [x29, 172] ++ add w22, w22, 1 ++ subs w0, w0, #1 ++ str w0, [x29, 172] ++ beq .L3170 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrh w0, [x0, 2276] ++ cmp w28, w0, lsl 3 ++ bne .L3161 ++.L3170: ++ cbz w28, .L3161 ++ add x8, x20, :lo12:.LANCHOR2 ++ mov w1, w28 ++ mov w2, 0 ++ mov x21, x8 ++ ldr x0, [x8, 2520] ++ bl FlashReadPages ++ ldr w0, [x29, 164] ++ lsl w0, w0, 9 ++ str w0, [x29, 132] ++ ldr w0, [x29, 160] ++ lsl w0, w0, 9 ++ str x0, [x29, 136] ++ ldr w0, [x29, 168] ++ lsl w0, w0, 9 ++ str w0, [x29, 152] ++ mov w0, 56 ++ umull x0, w28, w0 ++ mov x28, 0 ++ str x0, [x29, 120] ++ ldr x0, [x29, 112] ++ add x0, x0, :lo12:.LANCHOR4 ++ str x0, [x29, 144] ++.L3177: ++ ldr x0, [x21, 2520] ++ add x0, x0, x28 ++ ldr w1, [x0, 24] ++ cmp w27, w1 ++ bne .L3172 ++ ldr x1, [x0, 8] ++ ldr x0, [x21, 2616] ++ cmp x1, x0 ++ bne .L3173 ++ ldr x0, [x29, 136] ++ ldr w2, [x29, 152] ++ add x1, x1, x0 ++ mov x0, x23 ++.L3197: ++ bl ftl_memcpy ++.L3173: ++ ldr x1, [x21, 2520] ++ add x0, x1, x28 ++ ldr w2, [x1, x28] ++ cmn w2, #1 ++ bne .L3174 ++ ldr x1, [x29, 144] ++ mov w25, w2 ++ add x3, x1, 1152 ++ ldr w1, [x1, 1224] ++ add w1, w1, 1 ++ str w1, [x3, 72] ++.L3174: ++ ldr x1, [x0, 16] ++ ldr w2, [x0, 24] ++ ldr w1, [x1, 8] ++ cmp w2, w1 ++ beq .L3175 ++ ldr x1, [x29, 144] ++ add x2, x1, 1152 ++ ldr w1, [x1, 1224] ++ add w1, w1, 1 ++ str w1, [x2, 72] ++ ldp x2, x1, [x0, 8] ++ ldr w3, [x2, 4] ++ str w3, [sp] ++ ldp w3, w4, [x1] ++ ldp w5, w6, [x1, 8] ++ ldr w7, [x2] ++ ldr w1, [x0, 24] ++ ldr w2, [x0, 4] ++ ldr x0, [x29, 104] ++ bl printk ++.L3175: ++ ldr x0, [x21, 2520] ++ add x1, x0, x28 ++ ldr w0, [x0, x28] ++ cmp w0, 256 ++ bne .L3176 ++ ldr w0, [x1, 4] ++ lsr w0, w0, 10 ++ bl P2V_block_in_plane ++ bl FtlGcRefreshBlock ++.L3176: ++ ldr x0, [x29, 120] ++ add x28, x28, 56 ++ cmp x0, x28 ++ bne .L3177 ++ mov w28, 0 ++ b .L3161 ++.L3165: ++ madd w0, w22, w0, w21 ++ cmp w19, w0 ++ bhi .L3164 ++ ldr w1, [x29, 156] ++ cmp w1, w0 ++ bls .L3164 ++ sub w0, w0, w19 ++ str x5, [x29, 144] ++ lsl w0, w0, 9 ++ mov w2, 512 ++ mov w1, 0 ++ add x0, x23, x0 ++ bl ftl_memset ++ ldr x5, [x29, 144] ++.L3164: ++ add w21, w21, 1 ++ b .L3163 ++.L3162: ++ add x1, x20, :lo12:.LANCHOR2 ++ mov w0, 56 ++ cmp w22, w27 ++ umull x2, w28, w0 ++ ldr x0, [x1, 2520] ++ add x0, x0, x2 ++ str w4, [x0, 4] ++ ldrh w0, [x1, 2350] ++ bne .L3167 ++ ldr x4, [x1, 2520] ++ ldr x1, [x1, 2616] ++ add x4, x4, x2 ++ str x1, [x4, 8] ++ udiv w1, w19, w0 ++ msub w1, w1, w0, w19 ++ str w1, [x29, 160] ++ sub w1, w0, w1 ++ cmp w24, w1 ++ csel w1, w24, w1, ls ++ str w1, [x29, 168] ++ cmp w1, w0 ++ bne .L3168 ++ str x23, [x4, 8] ++.L3168: ++ add x1, x20, :lo12:.LANCHOR2 ++ ldr x0, [x1, 2520] ++ add x2, x0, x2 ++ ldrh w0, [x1, 2356] ++ ldr x1, [x1, 2648] ++ str w22, [x2, 24] ++ mul w0, w0, w28 ++ add w28, w28, 1 ++ and x0, x0, 4294967292 ++ add x0, x1, x0 ++ str x0, [x2, 16] ++ b .L3166 ++.L3167: ++ cmp w22, w26 ++ bne .L3169 ++ ldr x4, [x1, 2520] ++ ldr x1, [x1, 2624] ++ add x4, x4, x2 ++ ldr w3, [x29, 156] ++ str x1, [x4, 8] ++ mul w1, w22, w0 ++ sub w3, w3, w1 ++ str w3, [x29, 164] ++ cmp w0, w3 ++ bne .L3168 ++ sub w1, w1, w19 ++ lsl w1, w1, 9 ++ add x1, x23, x1 ++ str x1, [x4, 8] ++ b .L3168 ++.L3169: ++ ldr x1, [x1, 2520] ++ mul w0, w0, w22 ++ add x1, x1, x2 ++ sub w0, w0, w19 ++ lsl w0, w0, 9 ++ add x0, x23, x0 ++ str x0, [x1, 8] ++ b .L3168 ++.L3172: ++ cmp w26, w1 ++ bne .L3173 ++ ldr x1, [x0, 8] ++ ldr x0, [x21, 2624] ++ cmp x1, x0 ++ bne .L3173 ++ ldrh w0, [x21, 2350] ++ ldr w2, [x29, 132] ++ mul w0, w0, w26 ++ sub w0, w0, w19 ++ lsl w0, w0, 9 ++ add x0, x23, x0 ++ b .L3197 ++.L3182: ++ mov w25, -1 ++ b .L3157 ++ .size ftl_read, .-ftl_read ++ .align 2 ++ .global ftl_vendor_read ++ .type ftl_vendor_read, %function ++ftl_vendor_read: ++ stp x29, x30, [sp, -16]! ++ mov x3, x2 ++ mov w2, w1 ++ mov w1, w0 ++ add x29, sp, 0 ++ mov w0, 16 ++ bl ftl_read ++ ldp x29, x30, [sp], 16 ++ ret ++ .size ftl_vendor_read, .-ftl_vendor_read ++ .align 2 ++ .global ftl_sys_read ++ .type ftl_sys_read, %function ++ftl_sys_read: ++ stp x29, x30, [sp, -16]! ++ mov x3, x2 ++ mov w2, w1 ++ add w1, w0, 256 ++ add x29, sp, 0 ++ mov w0, 16 ++ bl ftl_read ++ ldp x29, x30, [sp], 16 ++ ret ++ .size ftl_sys_read, .-ftl_sys_read ++ .align 2 ++ .global FtlInit ++ .type FtlInit, %function ++FtlInit: ++ stp x29, x30, [sp, -64]! ++ adrp x1, .LC144 ++ add x1, x1, :lo12:.LC144 ++ mov w0, -1 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR4 ++ stp x21, x22, [sp, 32] ++ add x20, x20, :lo12:.LANCHOR4 ++ adrp x21, .LANCHOR1 ++ adrp x19, .LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR1 ++ add x19, x19, :lo12:.LANCHOR2 ++ str x23, [sp, 48] ++ str wzr, [x20, 1916] ++ str w0, [x21, 3448] ++ adrp x0, .LC48 ++ str wzr, [x19, 2928] ++ add x0, x0, :lo12:.LC48 ++ bl printk ++ add x0, x19, 1192 ++ bl FtlConstantsInit ++ bl FtlMemInit ++ bl FtlVariablesInit ++ ldrh w0, [x19, 2280] ++ bl FtlFreeSysBlkQueueInit ++ bl FtlLoadBbt ++ cbz w0, .L3203 ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC162 ++ add x1, x1, 256 ++ add x0, x0, :lo12:.LC162 ++.L3218: ++ bl printk ++.L3204: ++ mov w0, 0 ++ ldr x23, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L3203: ++ bl FtlSysBlkInit ++ cbz w0, .L3205 ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LC163 ++ add x1, x1, 256 ++ add x0, x0, :lo12:.LC163 ++ b .L3218 ++.L3205: ++ mov w1, 1 ++ str w1, [x21, 3448] ++ bl ftl_do_gc ++ ldrh w0, [x20, 776] ++ cmp w0, 15 ++ bhi .L3206 ++ add w22, w0, 2 ++ mov w21, 0 ++ mov w23, 65535 ++.L3209: ++ ldrh w0, [x20, 1104] ++ cmp w0, w23 ++ bne .L3207 ++ ldrh w0, [x19, 2472] ++ cmp w0, w23 ++ bne .L3207 ++ and w0, w21, 63 ++ bl List_get_gc_head_node ++ bl FtlGcRefreshBlock ++.L3207: ++ mov w1, 1 ++ mov w0, w1 ++ bl ftl_do_gc ++ mov w1, 1 ++ mov w0, 0 ++ bl ftl_do_gc ++ ldrh w0, [x20, 776] ++ cmp w0, w22 ++ bhi .L3204 ++ add w21, w21, 1 ++ cmp w21, 4096 ++ bne .L3209 ++ b .L3204 ++.L3206: ++ ldrb w0, [x19, 1220] ++ cbz w0, .L3204 ++ mov w19, 128 ++.L3211: ++ mov w1, 1 ++ mov w0, w1 ++ bl ftl_do_gc ++ subs w19, w19, #1 ++ bne .L3211 ++ b .L3204 ++ .size FtlInit, .-FtlInit ++ .align 2 ++ .global ftl_write ++ .type ftl_write, %function ++ftl_write: ++ stp x29, x30, [sp, -256]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ stp x25, x26, [sp, 64] ++ mov w25, w2 ++ add x2, x20, :lo12:.LANCHOR2 ++ stp x23, x24, [sp, 48] ++ stp x21, x22, [sp, 32] ++ mov w23, w1 ++ stp x27, x28, [sp, 80] ++ ldr w1, [x2, 2928] ++ cbnz w1, .L3261 ++ adrp x1, .LANCHOR1 ++ mov x24, x3 ++ add x3, x1, :lo12:.LANCHOR1 ++ str x1, [x29, 144] ++ ldr w3, [x3, 3448] ++ cmp w3, 1 ++ bne .L3261 ++ cmp w0, 16 ++ bne .L3221 ++ mov x2, x24 ++ mov w1, w25 ++ add w0, w23, 256 ++ bl FtlVendorPartWrite ++.L3219: ++ 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], 256 ++ ret ++.L3221: ++ ldr w1, [x2, 1224] ++ cmp w23, w1 ++ bcs .L3264 ++ cmp w25, w1 ++ bhi .L3264 ++ add w0, w23, w25 ++ cmp w1, w0 ++ bcc .L3264 ++ adrp x3, .LANCHOR4 ++ add x21, x3, :lo12:.LANCHOR4 ++ mov w1, 2048 ++ sub w0, w0, #1 ++ ldr w4, [x2, 2496] ++ str w1, [x21, 1920] ++ ldrh w1, [x2, 2350] ++ str x3, [x29, 152] ++ cmp w25, w1, lsl 1 ++ udiv w0, w0, w1 ++ udiv w27, w23, w1 ++ str w0, [x29, 172] ++ sub w28, w0, w27 ++ ldr w0, [x2, 2408] ++ add w26, w28, 1 ++ add w0, w0, w26 ++ str w0, [x2, 2408] ++ ldr w0, [x21, 1664] ++ add w0, w0, w25 ++ str w0, [x21, 1664] ++ cset w0, cs ++ str w0, [x29, 188] ++ cbz w4, .L3223 ++ ldr x0, [x2, 2560] ++ sub w4, w4, #1 ++ mov w3, 56 ++ umaddl x4, w4, w3, x0 ++ ldr w0, [x4, 24] ++ cmp w27, w0 ++ bne .L3224 ++ ldr w0, [x2, 2416] ++ ldr x3, [x4, 8] ++ add w0, w0, 1 ++ str w0, [x2, 2416] ++ ldr w0, [x21, 1924] ++ add w0, w0, 1 ++ str w0, [x21, 1924] ++ msub w0, w27, w1, w23 ++ sub w1, w1, w0 ++ cmp w25, w1 ++ lsl w0, w0, 9 ++ csel w19, w25, w1, ls ++ add x0, x3, x0 ++ lsl w22, w19, 9 ++ mov x1, x24 ++ mov w2, w22 ++ bl ftl_memcpy ++ cbnz w28, .L3225 ++ ldr w0, [x21, 1924] ++ cmp w0, 2 ++ bgt .L3225 ++.L3261: ++ mov w0, 0 ++ b .L3219 ++.L3225: ++ sub w25, w25, w19 ++ add w23, w23, w19 ++ add x24, x24, x22 ++ add w27, w27, 1 ++ mov w26, w28 ++.L3224: ++ ldr x0, [x29, 152] ++ add x0, x0, :lo12:.LANCHOR4 ++ str wzr, [x0, 1924] ++.L3223: ++ ldr w1, [x29, 172] ++ mov w0, w27 ++ bl FtlCacheMetchLpa ++ cbz w0, .L3226 ++ bl FtlCacheWriteBack ++.L3226: ++ ldr x0, [x29, 152] ++ mov w21, w27 ++ add x0, x0, :lo12:.LANCHOR4 ++ str x0, [x29, 176] ++ add x1, x0, 784 ++ str x1, [x29, 160] ++ mov x22, x1 ++ str x1, [x29, 120] ++ str x1, [x0, 1904] ++.L3227: ++ cbnz w26, .L3255 ++ ldr w0, [x29, 172] ++ sub w1, w0, w27 ++ mov w0, 0 ++ bl ftl_do_gc ++ ldr x0, [x29, 152] ++ add x0, x0, :lo12:.LANCHOR4 ++ ldrh w0, [x0, 776] ++ cmp w0, 5 ++ bls .L3256 ++ cmp w0, 31 ++ bhi .L3261 ++ adrp x0, .LANCHOR0+88 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+88] ++ cbnz w0, .L3261 ++.L3256: ++ ldr x0, [x29, 152] ++ add x20, x20, :lo12:.LANCHOR2 ++ mov w19, 65535 ++ mov w22, 128 ++ add x21, x0, :lo12:.LANCHOR4 ++.L3259: ++ ldrh w0, [x21, 1104] ++ cmp w0, w19 ++ bne .L3258 ++ ldrh w0, [x20, 2472] ++ cmp w0, w19 ++ bne .L3258 ++ ldrh w0, [x20, 2474] ++ cmp w0, w19 ++ bne .L3258 ++ and w0, w26, 7 ++ bl List_get_gc_head_node ++ bl FtlGcRefreshBlock ++.L3258: ++ mov w1, 1 ++ strh w22, [x20, 2482] ++ mov w0, w1 ++ strh w22, [x20, 2480] ++ bl ftl_do_gc ++ mov w1, 1 ++ mov w0, 0 ++ bl ftl_do_gc ++ ldr w0, [x20, 2928] ++ cbnz w0, .L3261 ++ ldrh w0, [x21, 776] ++ cmp w0, 2 ++ bhi .L3261 ++ add w26, w26, 1 ++ cmp w26, 256 ++ bne .L3259 ++ b .L3261 ++.L3255: ++ ldrh w0, [x22, 4] ++ cbnz w0, .L3228 ++ ldr x0, [x29, 120] ++ cmp x22, x0 ++ bne .L3229 ++ ldr x0, [x29, 176] ++ add x0, x0, 832 ++ ldrh w1, [x0, 4] ++ cbnz w1, .L3230 ++ bl allocate_new_data_superblock ++ ldr x0, [x29, 144] ++ add x0, x0, :lo12:.LANCHOR1 ++ str wzr, [x0, 3456] ++.L3230: ++ ldr x0, [x29, 160] ++ bl allocate_new_data_superblock ++ ldr x0, [x29, 144] ++ ldr x1, [x29, 176] ++ add x0, x0, :lo12:.LANCHOR1 ++ add x22, x1, 832 ++ ldr w0, [x0, 3456] ++ cmp w0, 0 ++ ldr x0, [x29, 160] ++ csel x22, x22, x0, ne ++.L3231: ++ ldrh w0, [x22, 4] ++ cbnz w0, .L3232 ++ mov x0, x22 ++ bl allocate_new_data_superblock ++.L3232: ++ ldr x0, [x29, 176] ++ str x22, [x0, 1904] ++.L3228: ++ add x1, x20, :lo12:.LANCHOR2 ++ str wzr, [x29, 184] ++ ldr w0, [x1, 2492] ++ ldr w1, [x1, 2496] ++ sub w0, w0, w1 ++ ldrh w1, [x22, 4] ++ cmp w0, w26 ++ csel w0, w0, w26, ls ++ cmp w1, w0 ++ csel w0, w1, w0, ls ++ str w0, [x29, 116] ++ ldr w0, [x29, 188] ++ and w0, w0, 1 ++ str w0, [x29, 112] ++ adrp x0, .LC164 ++ add x0, x0, :lo12:.LC164 ++ str x0, [x29, 104] ++.L3233: ++ ldr w1, [x29, 116] ++ ldr w0, [x29, 184] ++ cmp w0, w1 ++ bne .L3251 ++.L3234: ++ ldr w0, [x29, 184] ++ sub w26, w26, w0 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldr w1, [x0, 2496] ++ ldr w0, [x0, 2492] ++ cmp w1, w0 ++ bcs .L3252 ++ ldr w0, [x29, 188] ++ cbnz w0, .L3252 ++ ldrh w0, [x22, 4] ++ cbz w0, .L3252 ++.L3254: ++ str wzr, [x29, 188] ++ b .L3227 ++.L3229: ++ ldr x0, [x29, 144] ++ add x0, x0, :lo12:.LANCHOR1 ++ str wzr, [x0, 3456] ++ ldr x0, [x29, 120] ++ ldrh w0, [x0, 4] ++ cbnz w0, .L3268 ++ mov x0, x22 ++ bl allocate_new_data_superblock ++ b .L3231 ++.L3268: ++ ldr x22, [x29, 160] ++ b .L3232 ++.L3251: ++ ldrh w0, [x22, 4] ++ cbz w0, .L3234 ++ ldr w0, [x29, 172] ++ cmp w0, w21 ++ ldr w0, [x29, 112] ++ cset w3, eq ++ tst w3, w0 ++ beq .L3235 ++ ldr w0, [x29, 184] ++ cbz w0, .L3235 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrh w1, [x0, 2350] ++ add w0, w23, w25 ++ msub w0, w21, w1, w0 ++ cmp w1, w0 ++ bne .L3234 ++.L3235: ++ add x1, x29, 196 ++ add x19, x20, :lo12:.LANCHOR2 ++ mov w2, 0 ++ str w3, [x29, 100] ++ mov w0, w21 ++ bl log2phys ++ mov x0, x22 ++ bl get_new_active_ppa ++ ldr w5, [x19, 2496] ++ mov w4, 56 ++ ldr x1, [x19, 2560] ++ str w4, [x29, 168] ++ umull x2, w5, w4 ++ add x1, x1, x2 ++ str w0, [x1, 4] ++ ldr x0, [x19, 2560] ++ add x0, x0, x2 ++ ldrh w2, [x19, 2356] ++ str w21, [x0, 24] ++ mul w1, w5, w2 ++ and x1, x1, 4294967292 ++ str x1, [x29, 136] ++ ldr x1, [x19, 2664] ++ ldr x3, [x29, 136] ++ str x1, [x29, 128] ++ add x28, x1, x3 ++ ldrh w1, [x19, 2354] ++ str x28, [x0, 16] ++ mul w1, w1, w5 ++ ldr x5, [x19, 2608] ++ and x1, x1, 4294967292 ++ add x1, x5, x1 ++ str x1, [x0, 8] ++ mov w1, 0 ++ mov x0, x28 ++ bl ftl_memset ++ cmp w27, w21 ++ ldr w3, [x29, 100] ++ cset w0, eq ++ ldr w4, [x29, 168] ++ orr w3, w3, w0 ++ cbz w3, .L3236 ++ bne .L3237 ++ ldrh w19, [x19, 2350] ++ udiv w0, w23, w19 ++ msub w0, w0, w19, w23 ++ str w0, [x29, 168] ++ sub w19, w19, w0 ++ cmp w19, w25 ++ csel w19, w19, w25, ls ++.L3238: ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrh w1, [x0, 2350] ++ cmp w1, w19 ++ bne .L3239 ++ cmp w27, w21 ++ beq .L3269 ++ mul w1, w21, w19 ++ sub w1, w1, w23 ++ lsl w1, w1, 9 ++ add x1, x24, x1 ++.L3240: ++ ldr w0, [x29, 188] ++ add x2, x20, :lo12:.LANCHOR2 ++ cbz w0, .L3241 ++ ldr w0, [x2, 2496] ++ mov w3, 56 ++ ldr x2, [x2, 2560] ++ umaddl x0, w0, w3, x2 ++.L3287: ++ str x1, [x0, 8] ++.L3242: ++ ldp x1, x2, [x29, 128] ++ mov w0, -3947 ++ strh w0, [x1, x2] ++ add x1, x20, :lo12:.LANCHOR2 ++ ldr w0, [x1, 2400] ++ stp w0, w21, [x28, 4] ++ add w21, w21, 1 ++ add w0, w0, 1 ++ cmn w0, #1 ++ csel w0, w0, wzr, ne ++ str w0, [x1, 2400] ++ ldr w0, [x29, 196] ++ str w0, [x28, 12] ++ ldrh w0, [x22] ++ strh w0, [x28, 2] ++ ldr w0, [x1, 2496] ++ add w0, w0, 1 ++ str w0, [x1, 2496] ++ ldr w0, [x29, 184] ++ add w0, w0, 1 ++ str w0, [x29, 184] ++ b .L3233 ++.L3237: ++ ldrh w0, [x19, 2350] ++ add w2, w23, w25 ++ str wzr, [x29, 168] ++ msub w19, w21, w0, w2 ++ and w19, w19, 65535 ++ b .L3238 ++.L3269: ++ mov x1, x24 ++ b .L3240 ++.L3241: ++ ldr w0, [x2, 2496] ++ mov w4, 56 ++ ldr x3, [x2, 2560] ++ ldrh w2, [x2, 2354] ++ nop // between mem op and mult-accumulate ++ umaddl x0, w0, w4, x3 ++.L3288: ++ ldr x0, [x0, 8] ++ b .L3290 ++.L3239: ++ ldr w1, [x29, 196] ++ mov w2, 56 ++ cmn w1, #1 ++ beq .L3243 ++ str w1, [x29, 204] ++ ldr w1, [x0, 2496] ++ ldr x0, [x0, 2560] ++ str w21, [x29, 224] ++ nop // between mem op and mult-accumulate ++ umaddl x0, w1, w2, x0 ++ mov w2, 0 ++ ldp x1, x0, [x0, 8] ++ stp x1, x0, [x29, 208] ++ mov w1, 1 ++ add x0, x29, 200 ++ bl FlashReadPages ++ ldr w0, [x29, 200] ++ cmn w0, #1 ++ bne .L3244 ++ ldr x0, [x29, 176] ++ add x1, x0, 1152 ++ ldr w0, [x0, 1224] ++ add w0, w0, 1 ++ str w0, [x1, 72] ++.L3246: ++ cmp w27, w21 ++ lsl w2, w19, 9 ++ bne .L3247 ++ add x0, x20, :lo12:.LANCHOR2 ++ mov w3, 56 ++ ldr w1, [x0, 2496] ++ ldr x0, [x0, 2560] ++ umaddl x1, w1, w3, x0 ++ ldr w0, [x29, 168] ++ lsl w0, w0, 9 ++ ldr x3, [x1, 8] ++ mov x1, x24 ++ add x0, x3, x0 ++.L3290: ++ bl ftl_memcpy ++ b .L3242 ++.L3244: ++ ldr w0, [x28, 8] ++ cmp w21, w0 ++ beq .L3246 ++ ldr x0, [x29, 176] ++ mov w2, w21 ++ add x1, x0, 1152 ++ ldr w0, [x0, 1224] ++ add w0, w0, 1 ++ str w0, [x1, 72] ++ ldr x0, [x29, 104] ++ ldr w1, [x28, 8] ++ bl printk ++ b .L3246 ++.L3243: ++ ldr x1, [x0, 2560] ++ ldr w3, [x0, 2496] ++ umaddl x3, w3, w2, x1 ++ ldrh w2, [x0, 2354] ++ mov w1, 0 ++ ldr x0, [x3, 8] ++ bl ftl_memset ++ b .L3246 ++.L3247: ++ add x3, x20, :lo12:.LANCHOR2 ++ mov w4, 56 ++ ldrh w1, [x3, 2350] ++ ldr w0, [x3, 2496] ++ ldr x3, [x3, 2560] ++ mul w1, w1, w21 ++ umaddl x0, w0, w4, x3 ++ sub w1, w1, w23 ++ lsl w1, w1, 9 ++.L3289: ++ add x1, x24, x1 ++ b .L3288 ++.L3236: ++ ldr w0, [x29, 188] ++ ldrh w1, [x19, 2350] ++ cbz w0, .L3248 ++ mul w1, w1, w21 ++ ldr w0, [x19, 2496] ++ ldr x2, [x19, 2560] ++ sub w1, w1, w23 ++ lsl w1, w1, 9 ++ add x1, x24, x1 ++ umaddl x0, w0, w4, x2 ++ b .L3287 ++.L3248: ++ ldr x2, [x19, 2560] ++ mul w1, w1, w21 ++ ldr w0, [x19, 2496] ++ sub w1, w1, w23 ++ lsl w1, w1, 9 ++ umaddl x0, w0, w4, x2 ++ ldrh w2, [x19, 2354] ++ b .L3289 ++.L3252: ++ bl FtlCacheWriteBack ++ add x0, x20, :lo12:.LANCHOR2 ++ cmp w26, 1 ++ str wzr, [x0, 2496] ++ bhi .L3227 ++ b .L3254 ++.L3264: ++ mov w0, -1 ++ b .L3219 ++ .size ftl_write, .-ftl_write ++ .align 2 ++ .global ftl_vendor_write ++ .type ftl_vendor_write, %function ++ftl_vendor_write: ++ stp x29, x30, [sp, -16]! ++ mov x3, x2 ++ mov w2, w1 ++ mov w1, w0 ++ add x29, sp, 0 ++ mov w0, 16 ++ bl ftl_write ++ ldp x29, x30, [sp], 16 ++ ret ++ .size ftl_vendor_write, .-ftl_vendor_write ++ .align 2 ++ .global ftl_sys_write ++ .type ftl_sys_write, %function ++ftl_sys_write: ++ stp x29, x30, [sp, -16]! ++ mov x3, x2 ++ mov w2, w1 ++ add w1, w0, 256 ++ add x29, sp, 0 ++ mov w0, 16 ++ bl ftl_write ++ ldp x29, x30, [sp], 16 ++ ret ++ .size ftl_sys_write, .-ftl_sys_write ++ .align 2 ++ .global ftl_fix_nand_power_lost_error ++ .type ftl_fix_nand_power_lost_error, %function ++ftl_fix_nand_power_lost_error: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ add x19, x20, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ str x27, [sp, 80] ++ ldrb w0, [x19, 1220] ++ cbz w0, .L3295 ++ mov x24, x20 ++ adrp x21, .LANCHOR4 ++ add x20, x21, :lo12:.LANCHOR4 ++ ldr x0, [x19, 2712] ++ adrp x25, .LC165 ++ add x27, x20, 784 ++ add x26, x20, 832 ++ ldrh w22, [x20, 1754] ++ mov w1, w22 ++ ubfiz x23, x22, 1, 16 ++ ldrh w2, [x0, x23] ++ add x0, x25, :lo12:.LC165 ++ bl printk ++ ldrh w0, [x20, 784] ++ bl FtlGcRefreshOpenBlock ++ ldrh w0, [x20, 832] ++ mov w20, 4097 ++ bl FtlGcRefreshOpenBlock ++ mov x0, x27 ++ bl allocate_new_data_superblock ++ mov x0, x26 ++ bl allocate_new_data_superblock ++.L3297: ++ subs w20, w20, #1 ++ beq .L3301 ++ mov w1, 1 ++ mov w0, w1 ++ bl ftl_do_gc ++ ldr x0, [x19, 2712] ++ ldrh w0, [x0, x23] ++ cbnz w0, .L3297 ++.L3301: ++ add x20, x24, :lo12:.LANCHOR2 ++ mov w1, w22 ++ ldr x0, [x20, 2712] ++ ldrh w2, [x0, x23] ++ add x0, x25, :lo12:.LC165 ++ bl printk ++ ldr x0, [x20, 2712] ++ ldrh w19, [x0, x23] ++ cbnz w19, .L3299 ++ add x12, x29, 144 ++ strh w22, [x12, -48]! ++ mov x0, x12 ++ bl make_superblock ++ ldrh w5, [x20, 2276] ++ add x12, x12, 16 ++ mov w0, 0 ++ mov w6, 65535 ++ mov w7, 56 ++.L3302: ++ cmp w0, w5 ++ bne .L3304 ++ add x24, x24, :lo12:.LANCHOR2 ++ mov w1, w22 ++ ldr x0, [x24, 2712] ++ ldrh w2, [x0, x23] ++ adrp x0, .LC166 ++ add x0, x0, :lo12:.LC166 ++ bl printk ++ ldr x0, [x24, 2544] ++ mov w2, w19 ++ mov w1, 0 ++ bl FlashEraseBlocks ++ ldr x0, [x24, 2544] ++ mov w2, w19 ++ mov w1, 1 ++ bl FlashEraseBlocks ++.L3299: ++ add x21, x21, :lo12:.LANCHOR4 ++ mov w0, -1 ++ strh w0, [x21, 1754] ++.L3295: ++ 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], 144 ++ ret ++.L3304: ++ ldrh w2, [x12] ++ cmp w2, w6 ++ beq .L3303 ++ umull x4, w19, w7 ++ ldr x3, [x20, 2544] ++ lsl w2, w2, 10 ++ add w19, w19, 1 ++ add x3, x3, x4 ++ and w19, w19, 65535 ++ str w2, [x3, 4] ++ ldr x1, [x20, 2544] ++ add x1, x1, x4 ++ stp xzr, xzr, [x1, 8] ++.L3303: ++ add w0, w0, 1 ++ add x12, x12, 2 ++ and w0, w0, 65535 ++ b .L3302 ++ .size ftl_fix_nand_power_lost_error, .-ftl_fix_nand_power_lost_error ++ .global gc_ink_free_return_value ++ .global check_valid_page_count_table ++ .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_3 ++ .global g_gc_next_blk_2 ++ .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 ++ .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 idb_flash_slc_mode ++ .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_nand_ecc_en ++ .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 gFlashCurMode ++ .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 ++ .set .LANCHOR3,. + 0 ++ .type samsung_14nm_slc_rr, %object ++ .size samsung_14nm_slc_rr, 26 ++samsung_14nm_slc_rr: ++ .byte 0 ++ .byte 10 ++ .byte -10 ++ .byte 20 ++ .byte -20 ++ .byte 30 ++ .byte -30 ++ .byte 40 ++ .byte -40 ++ .byte 50 ++ .byte -50 ++ .byte 60 ++ .byte -60 ++ .byte -70 ++ .byte -80 ++ .byte -90 ++ .byte -100 ++ .byte -110 ++ .byte -120 ++ .byte -9 ++ .byte 70 ++ .byte 80 ++ .byte 90 ++ .byte -125 ++ .byte -115 ++ .byte 100 ++ .zero 6 ++ .type samsung_14nm_mlc_rr, %object ++ .size samsung_14nm_mlc_rr, 104 ++samsung_14nm_mlc_rr: ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -4 ++ .byte 3 ++ .byte -4 ++ .byte -6 ++ .byte 6 ++ .byte 0 ++ .byte 6 ++ .byte -10 ++ .byte -10 ++ .byte 4 ++ .byte -10 ++ .byte 16 ++ .byte 12 ++ .byte -4 ++ .byte 12 ++ .byte 8 ++ .byte -16 ++ .byte 10 ++ .byte -16 ++ .byte 24 ++ .byte 18 ++ .byte -14 ++ .byte 18 ++ .byte -4 ++ .byte -22 ++ .byte -16 ++ .byte -22 ++ .byte -8 ++ .byte 24 ++ .byte -9 ++ .byte 24 ++ .byte 8 ++ .byte -28 ++ .byte -4 ++ .byte -28 ++ .byte 16 ++ .byte 30 ++ .byte 10 ++ .byte 30 ++ .byte 10 ++ .byte -34 ++ .byte 6 ++ .byte -34 ++ .byte 0 ++ .byte 36 ++ .byte -8 ++ .byte 36 ++ .byte -8 ++ .byte -40 ++ .byte -2 ++ .byte -40 ++ .byte -20 ++ .byte -46 ++ .byte -4 ++ .byte -46 ++ .byte -30 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte -3 ++ .byte -2 ++ .byte -4 ++ .byte -2 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -4 ++ .byte -10 ++ .byte -6 ++ .byte -8 ++ .byte -6 ++ .byte -14 ++ .byte -9 ++ .byte -8 ++ .byte -9 ++ .byte -18 ++ .byte -52 ++ .byte 22 ++ .byte -52 ++ .byte 10 ++ .byte 42 ++ .byte 4 ++ .byte 42 ++ .byte 4 ++ .byte 48 ++ .byte -9 ++ .byte 48 ++ .byte 4 ++ .byte -58 ++ .byte 12 ++ .byte -58 ++ .byte 0 ++ .byte -64 ++ .byte -24 ++ .byte -64 ++ .byte -6 ++ .byte 9 ++ .byte 18 ++ .byte 9 ++ .byte 8 ++ .type __func__.27051, %object ++ .size __func__.27051, 11 ++__func__.27051: ++ .string "FtlMemInit" ++ .zero 5 ++ .type __func__.27798, %object ++ .size __func__.27798, 12 ++__func__.27798: ++ .string "FtlCheckVpc" ++ .zero 4 ++ .type __func__.27830, %object ++ .size __func__.27830, 17 ++__func__.27830: ++ .string "FtlDumpBlockInfo" ++ .zero 7 ++ .type __func__.27849, %object ++ .size __func__.27849, 16 ++__func__.27849: ++ .string "FtlScanAllBlock" ++ .type __func__.28117, %object ++ .size __func__.28117, 17 ++__func__.28117: ++ .string "ftl_scan_all_ppa" ++ .zero 7 ++ .type __func__.28097, %object ++ .size __func__.28097, 21 ++__func__.28097: ++ .string "FtlVpcCheckAndModify" ++ .zero 3 ++ .type __func__.27124, %object ++ .size __func__.27124, 8 ++__func__.27124: ++ .string "FtlInit" ++ .data ++ .align 3 ++ .set .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 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 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 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 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, 2752 ++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 -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .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 68 ++ .byte 50 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 1048 ++ .hword 1479 ++ .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 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .zero 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .byte 5 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .zero 4 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte -60 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .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 -124 ++ .byte 68 ++ .byte 52 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 1479 ++ .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 -124 ++ .byte 100 ++ .byte 60 ++ .byte -87 ++ .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 6 ++ .byte 44 ++ .byte -92 ++ .byte 100 ++ .byte 50 ++ .byte -86 ++ .byte 4 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 1024 ++ .byte 2 ++ .byte 1 ++ .hword 2192 ++ .hword 1479 ++ .byte 10 ++ .byte 19 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .byte 1 ++ .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 -83 ++ .byte 58 ++ .byte 20 ++ .byte 3 ++ .byte 8 ++ .byte 80 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .hword 388 ++ .byte 2 ++ .byte 2 ++ .hword 1362 ++ .hword 473 ++ .byte 9 ++ .byte 8 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .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 5 ++ .byte -119 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -95 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 1024 ++ .hword 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .zero 4 ++ .byte 5 ++ .byte -119 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 2 ++ .hword 1024 ++ .hword 455 ++ .byte 4 ++ .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 59 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .hword 192 ++ .byte 2 ++ .byte 2 ++ .hword 2048 ++ .hword 279 ++ .byte 12 ++ .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 -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -47 ++ .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 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 5 ++ .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 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -108 ++ .byte -61 ++ .byte -92 ++ .byte -54 ++ .byte 0 ++ .byte 1 ++ .byte 32 ++ .hword 792 ++ .byte 2 ++ .byte 1 ++ .hword 688 ++ .hword 1217 ++ .byte 11 ++ .byte 50 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .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 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 ++ .set .LANCHOR0,. + 0 ++ .set .LANCHOR2,. + 4352 ++ .set .LANCHOR4,. + 8704 ++ .type gNandChipMap, %object ++ .size gNandChipMap, 64 ++gNandChipMap: ++ .zero 64 ++ .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 gpNandParaInfo, %object ++ .size gpNandParaInfo, 8 ++gpNandParaInfo: ++ .zero 8 ++ .type gNandOptPara, %object ++ .size gNandOptPara, 32 ++gNandOptPara: ++ .zero 32 ++ .type slcPageToMlcPageTbl, %object ++ .size slcPageToMlcPageTbl, 1024 ++slcPageToMlcPageTbl: ++ .zero 1024 ++ .type mlcPageToSlcPageTbl, %object ++ .size mlcPageToSlcPageTbl, 2048 ++mlcPageToSlcPageTbl: ++ .zero 2048 ++ .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 gTotleBlock, %object ++ .size gTotleBlock, 2 ++gTotleBlock: ++ .zero 2 ++ .zero 2 ++ .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 gFlashSlcMode, %object ++ .size gFlashSlcMode, 1 ++gFlashSlcMode: ++ .zero 1 ++ .type gNandFlashEccBits, %object ++ .size gNandFlashEccBits, 1 ++gNandFlashEccBits: ++ .zero 1 ++ .zero 2 ++ .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 gFlashCurMode, %object ++ .size gFlashCurMode, 1 ++gFlashCurMode: ++ .zero 1 ++ .type gFlashInterfaceMode, %object ++ .size gFlashInterfaceMode, 1 ++gFlashInterfaceMode: ++ .zero 1 ++ .type gMultiPageProgEn, %object ++ .size gMultiPageProgEn, 1 ++gMultiPageProgEn: ++ .zero 1 ++ .zero 1 ++ .type g_inkDie_check_enable, %object ++ .size g_inkDie_check_enable, 4 ++g_inkDie_check_enable: ++ .zero 4 ++ .type idb_flash_slc_mode, %object ++ .size idb_flash_slc_mode, 4 ++idb_flash_slc_mode: ++ .zero 4 ++ .type gFlashToggleModeEn, %object ++ .size gFlashToggleModeEn, 1 ++gFlashToggleModeEn: ++ .zero 1 ++ .zero 3 ++ .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 ++ .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 FlashDdrTunningReadCount, %object ++ .size FlashDdrTunningReadCount, 4 ++FlashDdrTunningReadCount: ++ .zero 4 ++ .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 g_nand_ecc_en, %object ++ .size g_nand_ecc_en, 1 ++g_nand_ecc_en: ++ .zero 1 ++ .type gMultiPageReadEn, %object ++ .size gMultiPageReadEn, 1 ++gMultiPageReadEn: ++ .zero 1 ++ .zero 6 ++ .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_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 ++ .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_next_blk_2, %object ++ .size g_gc_next_blk_2, 2 ++g_gc_next_blk_2: ++ .zero 2 ++ .type g_gc_next_blk_3, %object ++ .size g_gc_next_blk_3, 2 ++g_gc_next_blk_3: ++ .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 g_sys_save_data, %object ++ .size g_sys_save_data, 48 ++g_sys_save_data: ++ .zero 48 ++ .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, 16 ++gSysInfo: ++ .zero 16 ++ .type g_totle_map_block, %object ++ .size g_totle_map_block, 2 ++g_totle_map_block: ++ .zero 2 ++ .zero 2 ++ .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 6 ++ .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_LowFormat, %object ++ .size g_LowFormat, 4 ++g_LowFormat: ++ .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 check_valid_page_count_table, %object ++ .size check_valid_page_count_table, 8192 ++check_valid_page_count_table: ++ .zero 8192 ++ .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 ++ .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 "samsung RR %d row=%x,count %d,status=%d\n" ++.LC13: ++ .string "ECC:%d\n" ++.LC14: ++ .string "No.%d FLASH ID:%x %x %x %x %x %x\n" ++.LC15: ++ .string "FlashLoadPhyInfo fail %x!!\n" ++.LC16: ++ .string "Read pageadd=%x ecc=%x err=%x\n" ++.LC17: ++ .string "data:" ++.LC18: ++ .string "spare:" ++.LC19: ++ .string "ReadRetry pageadd=%x ecc=%x err=%x\n" ++.LC20: ++ .string "FLFB:%d %d\n" ++.LC21: ++ .string "prog error: = %x\n" ++.LC22: ++ .string "prog read error: = %x\n" ++.LC23: ++ .string "prog read REFRESH: = %x\n" ++.LC24: ++ .string "prog read s error: = %x %x %x\n" ++.LC25: ++ .string "prog read d error: = %x %x %x\n" ++.LC26: ++ .string "FlashMakeFactorBbt %d\n" ++.LC27: ++ .string "bad block:%d %d\n" ++.LC28: ++ .string "FMFB:%d %d\n" ++.LC29: ++ .string "E:bad block:%d\n" ++.LC30: ++ .string "FMFB:Save %d %d\n" ++.LC31: ++ .string "%s error allocating memory. return -1\n" ++.LC32: ++ .string "phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\n" ++.LC33: ++ .string "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\n" ++.LC34: ++ .string "FtlBbmTblFlush error:%x\n" ++.LC35: ++ .string "FtlBbmTblFlush error = %x error count = %d\n" ++.LC36: ++ .string "FtlFreeSysBlkQueueOut free count = %d\n" ++.LC37: ++ .string "FtlFreeSysBlkQueueOut = %x, free count = %d, error\n" ++.LC38: ++ .string "FtlFreeSysBlkQueueOut = %x, free count = %d\n" ++.LC39: ++ .string "FtlMapWritePage error = %x\n" ++.LC40: ++ .string "FtlMapWritePage error = %x error count = %d\n" ++.LC41: ++ .string "page map lost: %x %x\n" ++.LC42: ++ .string "region_id = %x phyAddr = %x\n" ++.LC43: ++ .string "map_ppn:" ++.LC44: ++ .string "load_l2p_region refresh = %x phyAddr = %x\n" ++.LC45: ++ .string "FtlVendorPartRead refresh = %x phyAddr = %x\n" ++.LC46: ++ .string "FtlVpcTblFlush error = %x error count = %d\n" ++.LC47: ++ .string "no ect" ++.LC48: ++ .string "%s\n" ++.LC49: ++ .string "...%s enter...\n" ++.LC50: ++ .string "FtlCheckVpc2 %x = %x %x\n" ++.LC51: ++ .string "free blk vpc error %x = %x %x\n" ++.LC52: ++ .string "error_flag %x\n" ++.LC53: ++ .string "id = %x,%x addr= %x,spare= %x %x %x %x data = %x\n" ++.LC54: ++ .string ":" ++.LC55: ++ .string "Ftlscanalldata = %x\n" ++.LC56: ++ .string "scan lpa = %x ppa= %x\n" ++.LC57: ++ .string "lba = %x,addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC58: ++ .string "phyBlk = %x,addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC59: ++ .string "id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC60: ++ .string "Mblk:" ++.LC61: ++ .string "L2P:" ++.LC62: ++ .string "L2PC:" ++.LC63: ++ .string "id = %x,%x addr= %x,spare= %x %x %x %x data= %x\n" ++.LC64: ++ .string "superBlkID = %x vpc=%x\n" ++.LC65: ++ .string "flashmode = %x pagenum = %x %x\n" ++.LC66: ++ .string "blk = %x vpc=%x mode = %x\n" ++.LC67: ++ .string "mlc id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC68: ++ .string "slc id = %x,%x addr= %x,spare= %x %x %x %x data=%x %x\n" ++.LC69: ++ .string "slc mode" ++.LC70: ++ .string "ftl_scan_all_ppa blk %x page %x flag: %x\n" ++.LC71: ++ .string "ftl_scan_all_ppa blk %x page %x flag: %x ............... is bad block\n" ++.LC72: ++ .string "addr= %x, status= %d,spare= %x %x %x %x data=%x %x\n" ++.LC73: ++ .string "%s finished\n" ++.LC74: ++ .string "FLASH INFO:\n" ++.LC75: ++ .string "FLASH ID: %x\n" ++.LC76: ++ .string "Device Capacity: %d MB\n" ++.LC77: ++ .string "FMWAIT: %x %x %x %x\n" ++.LC78: ++ .string "FTL INFO:\n" ++.LC79: ++ .string "g_MaxLpn = 0x%x\n" ++.LC80: ++ .string "g_VaildLpn = 0x%x\n" ++.LC81: ++ .string "read_page_count = 0x%x\n" ++.LC82: ++ .string "discard_page_count = 0x%x\n" ++.LC83: ++ .string "write_page_count = 0x%x\n" ++.LC84: ++ .string "cache_write_count = 0x%x\n" ++.LC85: ++ .string "l2p_write_count = 0x%x\n" ++.LC86: ++ .string "gc_page_count = 0x%x\n" ++.LC87: ++ .string "totle_write = %d MB\n" ++.LC88: ++ .string "totle_read = %d MB\n" ++.LC89: ++ .string "GSV = 0x%x\n" ++.LC90: ++ .string "GDV = 0x%x\n" ++.LC91: ++ .string "bad blk num = %d %d\n" ++.LC92: ++ .string "free_superblocks = 0x%x\n" ++.LC93: ++ .string "mlc_EC = 0x%x\n" ++.LC94: ++ .string "slc_EC = 0x%x\n" ++.LC95: ++ .string "avg_EC = 0x%x\n" ++.LC96: ++ .string "sys_EC = 0x%x\n" ++.LC97: ++ .string "max_EC = 0x%x\n" ++.LC98: ++ .string "min_EC = 0x%x\n" ++.LC99: ++ .string "PLT = 0x%x\n" ++.LC100: ++ .string "POT = 0x%x\n" ++.LC101: ++ .string "MaxSector = 0x%x\n" ++.LC102: ++ .string "init_sys_blks_pp = 0x%x\n" ++.LC103: ++ .string "sys_blks_pp = 0x%x\n" ++.LC104: ++ .string "free sysblock = 0x%x\n" ++.LC105: ++ .string "data_blks_pp = 0x%x\n" ++.LC106: ++ .string "data_op_blks_pp = 0x%x\n" ++.LC107: ++ .string "max_data_blks = 0x%x\n" ++.LC108: ++ .string "Sys.id = 0x%x\n" ++.LC109: ++ .string "Bbt.id = 0x%x\n" ++.LC110: ++ .string "ACT.page = 0x%x\n" ++.LC111: ++ .string "ACT.plane = 0x%x\n" ++.LC112: ++ .string "ACT.id = 0x%x\n" ++.LC113: ++ .string "ACT.mode = 0x%x\n" ++.LC114: ++ .string "ACT.a_pages = 0x%x\n" ++.LC115: ++ .string "ACT VPC = 0x%x\n" ++.LC116: ++ .string "BUF.page = 0x%x\n" ++.LC117: ++ .string "BUF.plane = 0x%x\n" ++.LC118: ++ .string "BUF.id = 0x%x\n" ++.LC119: ++ .string "BUF.mode = 0x%x\n" ++.LC120: ++ .string "BUF.a_pages = 0x%x\n" ++.LC121: ++ .string "BUF VPC = 0x%x\n" ++.LC122: ++ .string "TMP.page = 0x%x\n" ++.LC123: ++ .string "TMP.plane = 0x%x\n" ++.LC124: ++ .string "TMP.id = 0x%x\n" ++.LC125: ++ .string "TMP.mode = 0x%x\n" ++.LC126: ++ .string "TMP.a_pages = 0x%x\n" ++.LC127: ++ .string "GC.page = 0x%x\n" ++.LC128: ++ .string "GC.plane = 0x%x\n" ++.LC129: ++ .string "GC.id = 0x%x\n" ++.LC130: ++ .string "GC.mode = 0x%x\n" ++.LC131: ++ .string "GC.a_pages = 0x%x\n" ++.LC132: ++ .string "WR_CHK = 0x%x %x %x %x\n" ++.LC133: ++ .string "Read Err = 0x%x\n" ++.LC134: ++ .string "Prog Err = 0x%x\n" ++.LC135: ++ .string "gc_free_blk_th= 0x%x\n" ++.LC136: ++ .string "gc_merge_free_blk_th= 0x%x\n" ++.LC137: ++ .string "gc_skip_write_count= 0x%x\n" ++.LC138: ++ .string "gc_blk_index= 0x%x\n" ++.LC139: ++ .string "free min EC= 0x%x\n" ++.LC140: ++ .string "free max EC= 0x%x\n" ++.LC141: ++ .string "GC__SB VPC = 0x%x\n" ++.LC142: ++ .string "%d. [0x%x]=0x%x 0x%x 0x%x\n" ++.LC143: ++ .string "free %d. [0x%x] 0x%x 0x%x\n" ++.LC144: ++ .string "FTL version: 5.0.63 20210616" ++.LC145: ++ .string "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x\n" ++.LC146: ++ .string "FtlGcScanTempBlk Error ID %x %x!!!!!!! \n" ++.LC147: ++ .string "FtlGcScanTempBlkError ID %x %x!!!!!!!\n" ++.LC148: ++ .string "FtlGcRefreshBlock 0x%x\n" ++.LC149: ++ .string "FtlGcMarkBadPhyBlk %d 0x%x\n" ++.LC150: ++ .string "FtlGcFreeBadSuperBlk 0x%x\n" ++.LC151: ++ .string "decrement_vpc_count %x = %d\n" ++.LC152: ++ .string "decrement_vpc_count %x = %d in free list\n" ++.LC153: ++ .string "RSB refresh addr %x\n" ++.LC154: ++ .string "spuer block %x vpn is 0\n " ++.LC155: ++ .string "g_recovery_ppa %x ver %x\n " ++.LC156: ++ .string "FtlCheckVpc %x = %x %x\n" ++.LC157: ++ .string "%d GC datablk = %x vpc %x %x\n" ++.LC158: ++ .string "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\n" ++.LC159: ++ .string "Ftlwrite decrement_vpc_count %x = %d\n" ++.LC160: ++ .string "GC des block %x done\n" ++.LC161: ++ .string "too many bad block = %d %d\n" ++.LC162: ++ .string "...%s: no bad block mapping table, format device\n" ++.LC163: ++ .string "...%s FtlSysBlkInit error ,format device!\n" ++.LC164: ++ .string "FtlWrite: lpa error:%x %x\n" ++.LC165: ++ .string "fix power lost blk = %x vpc=%x\n" ++.LC166: ++ .string "erase power lost blk = %x vpc=%x\n" +diff --git a/drivers/rk_nand/rk_helpers.S b/drivers/rk_nand/rk_helpers.S +new file mode 100644 +index 00000000000..df2d9a59e22 +--- /dev/null ++++ b/drivers/rk_nand/rk_helpers.S +@@ -0,0 +1,54 @@ ++ .arch armv7-a ++ .eabi_attribute 20, 1 ++ .eabi_attribute 21, 1 ++ .eabi_attribute 23, 3 ++ .eabi_attribute 24, 1 ++ .eabi_attribute 25, 1 ++ .eabi_attribute 26, 2 ++ .eabi_attribute 30, 2 ++ .eabi_attribute 34, 1 ++ .eabi_attribute 18, 2 ++ .file "rk_helpers.c" ++ .text ++ .syntax divided ++ .syntax unified ++ .arm ++ .syntax unified ++ .align 2 ++ .global rk_printk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_printk, %function ++rk_printk: ++ @ args = 4, pretend = 16, frame = 0 ++ @ frame_needed = 1, uses_anonymous_args = 1 ++ mov ip, sp ++ push {r0, r1, r2, r3} ++ push {fp, ip, lr, pc} ++ sub fp, ip, #20 ++ push {lr} ++ bl __gnu_mcount_nc ++ sub sp, fp, #12 ++ ldmfd sp, {fp, sp, pc} ++ .size rk_printk, .-rk_printk ++ .align 2 ++ .global rk_usleep_range ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_usleep_range, %function ++rk_usleep_range: ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 1, uses_anonymous_args = 0 ++ mov ip, sp ++ push {fp, ip, lr, pc} ++ sub fp, ip, #4 ++ push {lr} ++ bl __gnu_mcount_nc ++ mov r2, #2 ++ bl usleep_range_state ++ ldmfd sp, {fp, sp, pc} ++ .size rk_usleep_range, .-rk_usleep_range ++ .ident "GCC: (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0" ++ .section .note.GNU-stack,"",%progbits +diff --git a/drivers/rk_nand/rk_helpers.c b/drivers/rk_nand/rk_helpers.c +new file mode 100644 +index 00000000000..1b7a32ef273 +--- /dev/null ++++ b/drivers/rk_nand/rk_helpers.c +@@ -0,0 +1,26 @@ ++#include ++#include ++#include ++ ++int rk_printk(const char *format, ...) { ++ ++ char buffer[80]; ++ va_list va_args; ++ int ret; ++ ++ va_start(va_args, format); ++ ret = vsnprintf(buffer, sizeof(buffer), format, va_args); ++ va_end(va_args); ++ ++ printk(buffer); ++ ++ return ret; ++ ++} ++ ++void rk_usleep_range(unsigned long min, unsigned long max) { ++ ++// usleep_range(min, max); ++ udelay(min); ++ ++} +diff --git a/drivers/rk_nand/rk_nand_base.c b/drivers/rk_nand/rk_nand_base.c +new file mode 100644 +index 00000000000..9d5e2fb02ba +--- /dev/null ++++ b/drivers/rk_nand/rk_nand_base.c +@@ -0,0 +1,456 @@ ++/* ++ * Copyright (c) 2016, 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#ifdef CONFIG_OF ++#include ++#endif ++#include ++#include ++#include ++#include ++#include ++ ++#include "rk_nand_blk.h" ++#include "rk_ftl_api.h" ++#include "rk_nand_base.h" ++ ++#define RKNAND_VERSION_AND_DATE "rknandbase v1.2 2021-01-07" ++ ++static struct rk_nandc_info g_nandc_info[2]; ++struct device *g_nand_device; ++static char nand_idb_data[2048]; ++static int rk_nand_wait_busy_schedule; ++static int rk_nand_suspend_state; ++static int rk_nand_shutdown_state; ++/*1:flash 2:emmc 4:sdcard0 8:sdcard1*/ ++static int rknand_boot_media = 2; ++static DECLARE_WAIT_QUEUE_HEAD(rk29_nandc_wait); ++static void rk_nand_iqr_timeout_hack(struct timer_list *unused); ++static DEFINE_TIMER(rk_nand_iqr_timeout, rk_nand_iqr_timeout_hack); ++static int nandc0_xfer_completed_flag; ++static int nandc0_ready_completed_flag; ++static int nandc1_xfer_completed_flag; ++static int nandc1_ready_completed_flag; ++static int rk_timer_add; ++ ++void *ftl_malloc(int size) ++{ ++ return kmalloc(size, GFP_KERNEL | GFP_DMA); ++} ++ ++void ftl_free(void *buf) ++{ ++ kfree(buf); ++} ++ ++int rknand_get_clk_rate(int nandc_id) ++{ ++ return g_nandc_info[nandc_id].clk_rate; ++} ++EXPORT_SYMBOL(rknand_get_clk_rate); ++ ++unsigned long rknand_dma_map_single(unsigned long ptr, int size, int dir) ++{ ++ return dma_map_single(g_nand_device, (void *)ptr, size ++ , dir ? DMA_TO_DEVICE : DMA_FROM_DEVICE); ++} ++EXPORT_SYMBOL(rknand_dma_map_single); ++ ++void rknand_dma_unmap_single(unsigned long ptr, int size, int dir) ++{ ++ dma_unmap_single(g_nand_device, (dma_addr_t)ptr, size ++ , dir ? DMA_TO_DEVICE : DMA_FROM_DEVICE); ++} ++EXPORT_SYMBOL(rknand_dma_unmap_single); ++ ++int rknand_flash_cs_init(int id) ++{ ++ return 0; ++} ++EXPORT_SYMBOL(rknand_flash_cs_init); ++ ++int rknand_get_reg_addr(unsigned long *p_nandc0, unsigned long *p_nandc1) ++{ ++ *p_nandc0 = (unsigned long)g_nandc_info[0].reg_base; ++ *p_nandc1 = (unsigned long)g_nandc_info[1].reg_base; ++ return 0; ++} ++EXPORT_SYMBOL(rknand_get_reg_addr); ++ ++int rknand_get_boot_media(void) ++{ ++ return rknand_boot_media; ++} ++EXPORT_SYMBOL(rknand_get_boot_media); ++ ++unsigned long rk_copy_from_user(void *to, const void __user *from, ++ unsigned long n) ++{ ++ return copy_from_user(to, from, n); ++} ++ ++unsigned long rk_copy_to_user(void __user *to, const void *from, ++ unsigned long n) ++{ ++ return copy_to_user(to, from, n); ++} ++ ++static const struct file_operations rknand_sys_storage_fops = { ++ .compat_ioctl = rknand_sys_storage_ioctl, ++ .unlocked_ioctl = rknand_sys_storage_ioctl, ++}; ++ ++static struct miscdevice rknand_sys_storage_dev = { ++ .minor = MISC_DYNAMIC_MINOR, ++ .name = "rknand_sys_storage", ++ .fops = &rknand_sys_storage_fops, ++}; ++ ++int rknand_sys_storage_init(void) ++{ ++ return misc_register(&rknand_sys_storage_dev); ++} ++ ++static const struct file_operations rknand_vendor_storage_fops = { ++ .compat_ioctl = rk_ftl_vendor_storage_ioctl, ++ .unlocked_ioctl = rk_ftl_vendor_storage_ioctl, ++}; ++ ++static struct miscdevice rknand_vender_storage_dev = { ++ .minor = MISC_DYNAMIC_MINOR, ++ .name = "vendor_storage", ++ .fops = &rknand_vendor_storage_fops, ++}; ++ ++int rknand_vendor_storage_init(void) ++{ ++ return misc_register(&rknand_vender_storage_dev); ++} ++ ++int rk_nand_schedule_enable_config(int en) ++{ ++ int tmp = rk_nand_wait_busy_schedule; ++ ++ rk_nand_wait_busy_schedule = en; ++ return tmp; ++} ++ ++static void rk_nand_iqr_timeout_hack(struct timer_list *unused) ++{ ++ del_timer(&rk_nand_iqr_timeout); ++ rk_timer_add = 0; ++ nandc0_xfer_completed_flag = 1; ++ nandc0_ready_completed_flag = 1; ++ nandc1_xfer_completed_flag = 1; ++ nandc1_ready_completed_flag = 1; ++ wake_up(&rk29_nandc_wait); ++} ++ ++static void rk_add_timer(void) ++{ ++ if (rk_timer_add == 0) { ++ rk_timer_add = 1; ++ rk_nand_iqr_timeout.expires = jiffies + HZ / 50; ++ add_timer(&rk_nand_iqr_timeout); ++ } ++} ++ ++static void rk_del_timer(void) ++{ ++ if (rk_timer_add) ++ del_timer(&rk_nand_iqr_timeout); ++ rk_timer_add = 0; ++} ++ ++static irqreturn_t rk_nandc_interrupt(int irq, void *dev_id) ++{ ++ unsigned int irq_status = rk_nandc_get_irq_status(dev_id); ++ ++ if (irq_status & (1 << 0)) { ++ rk_nandc_flash_xfer_completed(dev_id); ++ if (dev_id == g_nandc_info[0].reg_base) ++ nandc0_xfer_completed_flag = 1; ++ else ++ nandc1_xfer_completed_flag = 1; ++ } ++ ++ if (irq_status & (1 << 1)) { ++ rk_nandc_flash_ready(dev_id); ++ if (dev_id == g_nandc_info[0].reg_base) ++ nandc0_ready_completed_flag = 1; ++ else ++ nandc1_ready_completed_flag = 1; ++ } ++ ++ wake_up(&rk29_nandc_wait); ++ return IRQ_HANDLED; ++} ++ ++void rk_nandc_xfer_irq_flag_init(void *nandc_reg) ++{ ++ if (nandc_reg == g_nandc_info[0].reg_base) ++ nandc0_xfer_completed_flag = 0; ++ else ++ nandc1_xfer_completed_flag = 0; ++} ++ ++void rk_nandc_rb_irq_flag_init(void *nandc_reg) ++{ ++ if (nandc_reg == g_nandc_info[0].reg_base) ++ nandc0_ready_completed_flag = 0; ++ else ++ nandc1_ready_completed_flag = 0; ++} ++ ++void wait_for_nandc_xfer_completed(void *nandc_reg) ++{ ++ if (rk_nand_wait_busy_schedule) { ++ rk_add_timer(); ++ if (nandc_reg == g_nandc_info[0].reg_base) ++ wait_event(rk29_nandc_wait, nandc0_xfer_completed_flag); ++ else ++ wait_event(rk29_nandc_wait, nandc1_xfer_completed_flag); ++ rk_del_timer(); ++ } ++ if (nandc_reg == g_nandc_info[0].reg_base) ++ nandc0_xfer_completed_flag = 0; ++ else ++ nandc1_xfer_completed_flag = 0; ++} ++ ++void wait_for_nand_flash_ready(void *nandc_reg) ++{ ++ if (rk_nand_wait_busy_schedule) { ++ rk_add_timer(); ++ if (nandc_reg == g_nandc_info[0].reg_base) ++ wait_event(rk29_nandc_wait ++ , nandc0_ready_completed_flag); ++ else ++ wait_event(rk29_nandc_wait ++ , nandc1_ready_completed_flag); ++ rk_del_timer(); ++ } ++ if (nandc_reg == g_nandc_info[0].reg_base) ++ nandc0_ready_completed_flag = 0; ++ else ++ nandc1_ready_completed_flag = 0; ++} ++ ++static int rk_nandc_irq_config(int id, int mode, void *pfun) ++{ ++ int ret = 0; ++ int irq = g_nandc_info[id].irq; ++ ++ if (mode) ++ ret = request_irq(irq, pfun, 0, "nandc" ++ , g_nandc_info[id].reg_base); ++ else ++ free_irq(irq, NULL); ++ return ret; ++} ++ ++int rk_nandc_irq_init(void) ++{ ++ int ret = 0; ++ ++ rk_timer_add = 0; ++ nandc0_ready_completed_flag = 0; ++ nandc0_xfer_completed_flag = 0; ++ ret = rk_nandc_irq_config(0, 1, rk_nandc_interrupt); ++ ++ if (!g_nandc_info[1].reg_base) { ++ nandc1_ready_completed_flag = 0; ++ nandc1_xfer_completed_flag = 0; ++ rk_nandc_irq_config(1, 1, rk_nandc_interrupt); ++ } ++ return ret; ++} ++ ++int rk_nandc_irq_deinit(void) ++{ ++ rk_nandc_irq_config(0, 0, rk_nandc_interrupt); ++ if (!g_nandc_info[1].reg_base) ++ rk_nandc_irq_config(1, 0, rk_nandc_interrupt); ++ return 0; ++} ++ ++static int rknand_probe(struct platform_device *pdev) ++{ ++ unsigned int id = 0; ++ int irq; ++ struct resource *mem; ++ void __iomem *membase; ++ ++ g_nand_device = &pdev->dev; ++ mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); ++ membase = devm_ioremap_resource(&pdev->dev, mem); ++ if (!membase) { ++ dev_err(&pdev->dev, "no reg resource?\n"); ++ return -1; ++ } ++ ++ #ifdef CONFIG_OF ++ of_property_read_u32(pdev->dev.of_node, "nandc_id", &id); ++ pdev->id = id; ++ #endif ++ ++ if (id == 0) { ++ memcpy(nand_idb_data, membase + 0x1000, 0x800); ++ if (*(int *)(&nand_idb_data[0]) == 0x44535953) { ++ rknand_boot_media = *(int *)(&nand_idb_data[8]); ++ if (rknand_boot_media == 2) /*boot from emmc*/ ++ return -1; ++ } ++ } ++ ++ irq = platform_get_irq(pdev, 0); ++ if (irq < 0) { ++ dev_err(&pdev->dev, "no irq resource?\n"); ++ return irq; ++ } ++ ++ g_nandc_info[id].id = id; ++ g_nandc_info[id].irq = irq; ++ g_nandc_info[id].reg_base = membase; ++ ++ g_nandc_info[id].hclk = devm_clk_get(&pdev->dev, "hclk_nandc"); ++ g_nandc_info[id].clk = devm_clk_get(&pdev->dev, "clk_nandc"); ++ g_nandc_info[id].gclk = devm_clk_get(&pdev->dev, "g_clk_nandc"); ++ ++ if (unlikely(IS_ERR(g_nandc_info[id].hclk))) { ++ dev_err(&pdev->dev, "rknand_probe get hclk error\n"); ++ return PTR_ERR(g_nandc_info[id].hclk); ++ } ++ ++ if (!(IS_ERR(g_nandc_info[id].clk))) { ++ clk_set_rate(g_nandc_info[id].clk, 150 * 1000 * 1000); ++ g_nandc_info[id].clk_rate = clk_get_rate(g_nandc_info[id].clk); ++ clk_prepare_enable(g_nandc_info[id].clk); ++ dev_info(&pdev->dev, ++ "rknand_probe clk rate = %d\n", ++ g_nandc_info[id].clk_rate); ++ } ++ ++ clk_prepare_enable(g_nandc_info[id].hclk); ++ if (!(IS_ERR(g_nandc_info[id].gclk))) ++ clk_prepare_enable(g_nandc_info[id].gclk); ++ ++ pm_runtime_enable(&pdev->dev); ++ pm_runtime_get_sync(&pdev->dev); ++ ++ return dma_set_mask(g_nand_device, DMA_BIT_MASK(32)); ++} ++ ++static int rknand_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ if (rk_nand_suspend_state == 0) { ++ rk_nand_suspend_state = 1; ++ rknand_dev_suspend(); ++ } ++ return 0; ++} ++ ++static int rknand_resume(struct platform_device *pdev) ++{ ++ if (rk_nand_suspend_state == 1) { ++ rk_nand_suspend_state = 0; ++ rknand_dev_resume(); ++ } ++ return 0; ++} ++ ++static void rknand_shutdown(struct platform_device *pdev) ++{ ++ if (rk_nand_shutdown_state == 0) { ++ rk_nand_shutdown_state = 1; ++ rknand_dev_shutdown(); ++ } ++} ++ ++void rknand_dev_cache_flush(void) ++{ ++ rknand_dev_flush(); ++} ++ ++static int rknand_pm_suspend(struct device *dev) ++{ ++ if (rk_nand_suspend_state == 0) { ++ rk_nand_suspend_state = 1; ++ rknand_dev_suspend(); ++ pm_runtime_put(dev); ++ } ++ return 0; ++} ++ ++static int rknand_pm_resume(struct device *dev) ++{ ++ if (rk_nand_suspend_state == 1) { ++ rk_nand_suspend_state = 0; ++ pm_runtime_get_sync(dev); ++ rknand_dev_resume(); ++ } ++ return 0; ++} ++ ++static const struct dev_pm_ops rknand_dev_pm_ops = { ++ SET_SYSTEM_SLEEP_PM_OPS(rknand_pm_suspend, rknand_pm_resume) ++}; ++ ++#ifdef CONFIG_OF ++static const struct of_device_id of_rk_nandc_match[] = { ++ {.compatible = "rockchip,rk-nandc"}, ++ {.compatible = "rockchip,rk-nandc-v9"}, ++ {} ++}; ++#endif ++ ++static struct platform_driver rknand_driver = { ++ .probe = rknand_probe, ++ .suspend = rknand_suspend, ++ .resume = rknand_resume, ++ .shutdown = rknand_shutdown, ++ .driver = { ++ .name = "rknand", ++#ifdef CONFIG_OF ++ .of_match_table = of_rk_nandc_match, ++#endif ++ .pm = &rknand_dev_pm_ops, ++ }, ++}; ++ ++static void __exit rknand_driver_exit(void) ++{ ++ rknand_dev_exit(); ++ platform_driver_unregister(&rknand_driver); ++} ++ ++static int __init rknand_driver_init(void) ++{ ++ int ret = 0; ++ ++ pr_err("%s\n", RKNAND_VERSION_AND_DATE); ++ ret = platform_driver_register(&rknand_driver); ++ if (ret == 0) ++ ret = rknand_dev_init(); ++ return ret; ++} ++ ++module_init(rknand_driver_init); ++module_exit(rknand_driver_exit); ++MODULE_ALIAS("rknand"); ++MODULE_LICENSE("GPL v2"); +diff --git a/drivers/rk_nand/rk_nand_base.h b/drivers/rk_nand/rk_nand_base.h +new file mode 100644 +index 00000000000..023e58d5fc5 +--- /dev/null ++++ b/drivers/rk_nand/rk_nand_base.h +@@ -0,0 +1,46 @@ ++/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ ++ ++/* ++ * Copyright (c) 2018 Fuzhou Rockchip Electronics Co., Ltd ++ */ ++ ++#ifndef __RK_NAND_BASE_H ++#define __RK_NAND_BASE_H ++ ++struct rk_nandc_info { ++ int id; ++ void __iomem *reg_base; ++ int irq; ++ int clk_rate; ++ struct clk *clk; /* flash clk*/ ++ struct clk *hclk; /* nandc clk*/ ++ struct clk *gclk; /* flash clk gate*/ ++}; ++ ++void *ftl_malloc(int size); ++void ftl_free(void *buf); ++char rknand_get_sn(char *pbuf); ++char rknand_get_vendor0(char *pbuf); ++char *rknand_get_idb_data(void); ++int rknand_get_clk_rate(int nandc_id); ++unsigned long rknand_dma_flush_dcache(unsigned long ptr, int size, int dir); ++unsigned long rknand_dma_map_single(unsigned long ptr, int size, int dir); ++void rknand_dma_unmap_single(unsigned long ptr, int size, int dir); ++int rknand_flash_cs_init(int id); ++int rknand_get_reg_addr(unsigned long *p_nandc0, unsigned long *p_nandc1); ++int rknand_get_boot_media(void); ++unsigned long rk_copy_from_user(void *to, const void __user *from, ++ unsigned long n); ++unsigned long rk_copy_to_user(void __user *to, const void *from, ++ unsigned long n); ++int rknand_sys_storage_init(void); ++int rknand_vendor_storage_init(void); ++int rk_nand_schedule_enable_config(int en); ++void rk_nandc_xfer_irq_flag_init(void *nandc_reg); ++void rk_nandc_rb_irq_flag_init(void *nandc_reg); ++void wait_for_nandc_xfer_completed(void *nandc_reg); ++void wait_for_nand_flash_ready(void *nandc_reg); ++int rk_nandc_irq_init(void); ++int rk_nandc_irq_deinit(void); ++void rknand_dev_cache_flush(void); ++#endif +diff --git a/drivers/rk_nand/rk_nand_blk.c b/drivers/rk_nand/rk_nand_blk.c +new file mode 100644 +index 00000000000..5d18f18f4ed +--- /dev/null ++++ b/drivers/rk_nand/rk_nand_blk.c +@@ -0,0 +1,626 @@ ++/* ++ * Copyright (c) 2016, 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. ++ */ ++ ++#define pr_fmt(fmt) "rk_nand: " fmt ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "rk_nand_blk.h" ++#include "rk_ftl_api.h" ++ ++#define PART_READONLY 0x85 ++#define PART_WRITEONLY 0x86 ++#define PART_NO_ACCESS 0x87 ++ ++static unsigned long totle_read_data; ++static unsigned long totle_write_data; ++static unsigned long totle_read_count; ++static unsigned long totle_write_count; ++static int rk_nand_dev_initialised; ++static unsigned long rk_ftl_gc_do; ++static DECLARE_WAIT_QUEUE_HEAD(rknand_thread_wait); ++static unsigned long rk_ftl_gc_jiffies; ++ ++static char *mtd_read_temp_buffer; ++#define MTD_RW_SECTORS (512) ++ ++#define DISABLE_WRITE _IO('V', 0) ++#define ENABLE_WRITE _IO('V', 1) ++#define DISABLE_READ _IO('V', 2) ++#define ENABLE_READ _IO('V', 3) ++static int rknand_proc_show(struct seq_file *m, void *v) ++{ ++ m->count = rknand_proc_ftlread(m->buf); ++ seq_printf(m, "Totle Read %ld KB\n", totle_read_data >> 1); ++ seq_printf(m, "Totle Write %ld KB\n", totle_write_data >> 1); ++ seq_printf(m, "totle_write_count %ld\n", totle_write_count); ++ seq_printf(m, "totle_read_count %ld\n", totle_read_count); ++ return 0; ++} ++ ++static int rknand_proc_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, rknand_proc_show, PDE_DATA(inode)); ++} ++ ++static const struct proc_ops rknand_proc_fops = { ++ .proc_open = rknand_proc_open, ++ .proc_read = seq_read, ++ .proc_lseek = seq_lseek, ++ .proc_release = single_release, ++}; ++ ++static int rknand_create_procfs(void) ++{ ++ struct proc_dir_entry *ent; ++ ++ ent = proc_create_data("rknand", 0444, NULL, &rknand_proc_fops, ++ (void *)0); ++ if (!ent) ++ return -1; ++ ++ return 0; ++} ++ ++static struct mutex g_rk_nand_ops_mutex; ++ ++static void rknand_device_lock_init(void) ++{ ++ mutex_init(&g_rk_nand_ops_mutex); ++} ++ ++void rknand_device_lock(void) ++{ ++ mutex_lock(&g_rk_nand_ops_mutex); ++} ++ ++int rknand_device_trylock(void) ++{ ++ return mutex_trylock(&g_rk_nand_ops_mutex); ++} ++ ++void rknand_device_unlock(void) ++{ ++ mutex_unlock(&g_rk_nand_ops_mutex); ++} ++ ++static int nand_dev_transfer(struct nand_blk_dev *dev, ++ unsigned long start, ++ unsigned long nsector, char *buf, int cmd) ++{ ++ int ret; ++ ++ if (dev->disable_access || ++ ((cmd == WRITE) && dev->readonly) || ++ ((cmd == READ) && dev->writeonly)) { ++ return BLK_STS_IOERR; ++ } ++ ++ start += dev->off_size; ++ ++ switch (cmd) { ++ case READ: ++ totle_read_data += nsector; ++ totle_read_count++; ++ ret = FtlRead(0, start, nsector, buf); ++ if (ret) ++ ret = BLK_STS_IOERR; ++ break; ++ ++ case WRITE: ++ totle_write_data += nsector; ++ totle_write_count++; ++ ret = FtlWrite(0, start, nsector, buf); ++ if (ret) ++ ret = BLK_STS_IOERR; ++ break; ++ ++ default: ++ ret = BLK_STS_IOERR; ++ break; ++ } ++ ++ return ret; ++} ++ ++int req_empty_times = 0; ++ ++static blk_status_t do_blktrans_all_request(struct nand_blk_dev *dev, ++ struct request *req) ++{ ++ unsigned long block, nsect; ++ char *buf = NULL; ++ struct req_iterator rq_iter; ++ struct bio_vec bvec; ++ int ret = BLK_STS_IOERR; ++ unsigned long totle_nsect; ++ unsigned long rq_len = 0; ++ ++ block = blk_rq_pos(req); ++ nsect = blk_rq_cur_bytes(req) >> 9; ++ totle_nsect = (req->__data_len) >> 9; ++ ++ if (blk_rq_pos(req) + blk_rq_cur_sectors(req) > ++ get_capacity(req->rq_disk)) ++ return BLK_STS_IOERR; ++ ++ switch (req_op(req)) { ++ case REQ_OP_FLUSH: ++ rk_ftl_cache_write_back(); ++ return BLK_STS_OK; ++ case REQ_OP_DISCARD: ++ if (FtlDiscard(block + dev->off_size, nsect)) ++ return BLK_STS_IOERR; ++ return BLK_STS_OK; ++ case REQ_OP_READ: ++ buf = mtd_read_temp_buffer; ++ rq_for_each_segment(bvec, req, rq_iter) { ++ buf = (kmap_atomic(bvec.bv_page) + bvec.bv_offset); ++ rq_len = bvec.bv_len; ++ if (rq_len) { ++ ret = nand_dev_transfer(dev, ++ block, ++ rq_len >> 9, ++ buf, REQ_OP_READ); ++ block += rq_len >> 9; ++ } ++ kunmap_atomic(buf); ++ } ++ ++ if (ret) ++ return BLK_STS_IOERR; ++ else ++ return BLK_STS_OK; ++ case REQ_OP_WRITE: ++ rq_for_each_segment(bvec, req, rq_iter) { ++ buf = (kmap_atomic(bvec.bv_page) + bvec.bv_offset); ++ rq_len = bvec.bv_len; ++ if (rq_len) { ++ ret = nand_dev_transfer(dev, ++ block, ++ rq_len >> 9, ++ buf, REQ_OP_WRITE); ++ block += rq_len >> 9; ++ } ++ kunmap_atomic(buf); ++ } ++ if (ret) ++ return BLK_STS_IOERR; ++ else ++ return BLK_STS_OK; ++ ++ default: ++ return BLK_STS_IOERR; ++ } ++} ++ ++static blk_status_t rk_nand_queue_rq(struct blk_mq_hw_ctx *hctx, ++ const struct blk_mq_queue_data *bd) ++{ ++ struct nand_blk_dev *dev; ++ blk_status_t res; ++ ++ dev = hctx->queue->queuedata; ++ if (!dev) { ++ return BLK_STS_IOERR; ++ } ++ ++ rk_ftl_gc_do = 0; ++ ++ blk_mq_start_request(bd->rq); ++ rknand_device_lock(); ++ res = do_blktrans_all_request(dev, bd->rq); ++ rknand_device_unlock(); ++ if (!blk_update_request(bd->rq, res, bd->rq->__data_len)) { ++ __blk_mq_end_request(bd->rq, res); ++ } ++ ++ /* wake up gc thread */ ++ rk_ftl_gc_do = 1; ++ wake_up(&dev->nand_ops->thread_wq); ++ ++ return res; ++} ++ ++static const struct blk_mq_ops rk_nand_mq_ops = { ++ .queue_rq = rk_nand_queue_rq, ++}; ++ ++static int nand_gc_thread(void *arg) ++{ ++ struct nand_blk_ops *nand_ops = arg; ++ int ftl_gc_status = 0; ++ int gc_done_times = 0; ++ ++ rk_ftl_gc_jiffies = HZ / 10; ++ rk_ftl_gc_do = 1; ++ ++ while (!nand_ops->quit) { ++ DECLARE_WAITQUEUE(wait, current); ++ ++ add_wait_queue(&nand_ops->thread_wq, &wait); ++ set_current_state(TASK_INTERRUPTIBLE); ++ ++ pr_info("garbage collection cycle\n"); ++ ++ if (rk_ftl_gc_do) { ++ /* do garbage collect at idle state */ ++ if (rknand_device_trylock()) { ++ pr_info("doing garbage collection\n"); ++ ftl_gc_status = rk_ftl_garbage_collect(1, 0); ++ rknand_device_unlock(); ++ rk_ftl_gc_jiffies = HZ / 50; ++ if (ftl_gc_status == 0) { ++ gc_done_times++; ++ if (gc_done_times > 10) { ++ rk_ftl_gc_jiffies = 10 * HZ; ++ } else ++ rk_ftl_gc_jiffies = 1 * HZ; ++ } else { ++ gc_done_times = 0; ++ } ++ } else { ++ rk_ftl_gc_jiffies = 1 * HZ; ++ } ++ req_empty_times++; ++ if (req_empty_times < 10) ++ rk_ftl_gc_jiffies = HZ / 50; ++ /* cache write back after 100ms */ ++ if (req_empty_times >= 5 && req_empty_times < 7) { ++ rknand_device_lock(); ++ pr_info("cache write back"); ++ rk_ftl_cache_write_back(); ++ rknand_device_unlock(); ++ } ++ } else { ++ req_empty_times = 0; ++ rk_ftl_gc_jiffies = 1 * HZ; ++ } ++ wait_event_timeout(nand_ops->thread_wq, nand_ops->quit, ++ rk_ftl_gc_jiffies); ++ remove_wait_queue(&nand_ops->thread_wq, &wait); ++ continue; ++ } ++ pr_info("nand gc quited\n"); ++ nand_ops->nand_th_quited = 1; ++ complete_and_exit(&nand_ops->thread_exit, 0); ++ return 0; ++} ++ ++static int rknand_open(struct block_device *bdev, fmode_t mode) ++{ ++ return 0; ++} ++ ++static void rknand_release(struct gendisk *disk, fmode_t mode) ++{ ++}; ++ ++static int rknand_ioctl(struct block_device *bdev, fmode_t mode, ++ unsigned int cmd, unsigned long arg) ++{ ++ struct nand_blk_dev *dev = bdev->bd_disk->private_data; ++ ++ switch (cmd) { ++ case ENABLE_WRITE: ++ dev->disable_access = 0; ++ dev->readonly = 0; ++ set_disk_ro(dev->blkcore_priv, 0); ++ return 0; ++ ++ case DISABLE_WRITE: ++ dev->readonly = 1; ++ set_disk_ro(dev->blkcore_priv, 1); ++ return 0; ++ ++ case ENABLE_READ: ++ dev->disable_access = 0; ++ dev->writeonly = 0; ++ return 0; ++ ++ case DISABLE_READ: ++ dev->writeonly = 1; ++ return 0; ++ default: ++ return -ENOTTY; ++ } ++} ++ ++const struct block_device_operations nand_blktrans_ops = { ++ .owner = THIS_MODULE, ++ .open = rknand_open, ++ .release = rknand_release, ++ .ioctl = rknand_ioctl, ++}; ++ ++static struct nand_blk_ops mytr = { ++ .name = "rknand", ++ .major = 31, ++ .minorbits = 0, ++ .owner = THIS_MODULE, ++}; ++ ++static int nand_add_dev(struct nand_blk_ops *nand_ops, struct nand_part *part) ++{ ++ struct nand_blk_dev *dev; ++ struct gendisk *gd; ++ ++ if (part->size == 0) ++ return -1; ++ ++ dev = kzalloc(sizeof(*dev), GFP_KERNEL); ++ if (!dev) ++ return -ENOMEM; ++ ++ gd = blk_mq_alloc_disk(nand_ops->tag_set, NULL); ++ if (!gd) { ++ kfree(dev); ++ return -ENOMEM; ++ } ++ ++ nand_ops->rq = gd->queue; ++ nand_ops->rq->queuedata = dev; ++ ++ blk_queue_max_hw_sectors(nand_ops->rq, MTD_RW_SECTORS); ++ blk_queue_max_segments(nand_ops->rq, MTD_RW_SECTORS); ++ ++ blk_queue_flag_set(QUEUE_FLAG_DISCARD, nand_ops->rq); ++ blk_queue_max_discard_sectors(nand_ops->rq, UINT_MAX >> 9); ++ /* discard_granularity config to one nand page size 32KB */ ++ nand_ops->rq->limits.discard_granularity = 64 << 9; ++ ++ dev->nand_ops = nand_ops; ++ dev->size = part->size; ++ dev->off_size = part->offset; ++ dev->devnum = nand_ops->last_dev_index; ++ list_add_tail(&dev->list, &nand_ops->devs); ++ nand_ops->last_dev_index++; ++ ++ gd->major = nand_ops->major; ++ gd->first_minor = (dev->devnum) << nand_ops->minorbits; ++ gd->minors = 1 << nand_ops->minorbits; ++ ++ gd->fops = &nand_blktrans_ops; ++ ++ gd->flags = GENHD_FL_EXT_DEVT; ++ gd->minors = 255; ++ snprintf(gd->disk_name, ++ sizeof(gd->disk_name), "%s%d", nand_ops->name, dev->devnum); ++ ++ set_capacity(gd, dev->size); ++ ++ gd->private_data = dev; ++ dev->blkcore_priv = gd; ++ ++ if (part->type == PART_NO_ACCESS) ++ dev->disable_access = 1; ++ ++ if (part->type == PART_READONLY) ++ dev->readonly = 1; ++ ++ if (part->type == PART_WRITEONLY) ++ dev->writeonly = 1; ++ ++ if (dev->readonly) ++ set_disk_ro(gd, 1); ++ ++ device_add_disk(g_nand_device, gd, NULL); ++ ++ return 0; ++} ++ ++static int nand_remove_dev(struct nand_blk_dev *dev) ++{ ++ struct gendisk *gd; ++ ++ gd = dev->blkcore_priv; ++ list_del(&dev->list); ++ gd->queue = NULL; ++ del_gendisk(gd); ++ put_disk(gd); ++ kfree(dev); ++ ++ return 0; ++} ++ ++static int nand_blk_register(struct nand_blk_ops *nand_ops) ++{ ++ struct nand_part part; ++ int ret; ++ ++ rk_nand_schedule_enable_config(1); ++ nand_ops->quit = 0; ++ nand_ops->nand_th_quited = 0; ++ ++ mtd_read_temp_buffer = kmalloc(MTD_RW_SECTORS * 512, ++ GFP_KERNEL | GFP_DMA); ++ ++ ret = register_blkdev(nand_ops->major, nand_ops->name); ++ if (ret) ++ return -1; ++ ++ init_completion(&nand_ops->thread_exit); ++ init_waitqueue_head(&nand_ops->thread_wq); ++ rknand_device_lock_init(); ++ ++ /* Create the request queue */ ++// spin_lock_init(&nand_ops->queue_lock); ++// INIT_LIST_HEAD(&nand_ops->rq_list); ++ ++ nand_ops->tag_set = kzalloc(sizeof(*nand_ops->tag_set), GFP_KERNEL); ++ if (!nand_ops->tag_set) ++ goto tag_set_error; ++ ++ ret = ++ blk_mq_alloc_sq_tag_set(nand_ops->tag_set, &rk_nand_mq_ops, 1, ++ BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING); ++ if (ret) ++ goto rq_init_error; ++ ++ INIT_LIST_HEAD(&nand_ops->devs); ++ kthread_run(nand_gc_thread, (void *)nand_ops, "rknand_gc"); ++ ++ nand_ops->last_dev_index = 0; ++ part.offset = 0; ++ part.size = rk_ftl_get_capacity(); ++ part.type = 0; ++ part.name[0] = 0; ++ nand_add_dev(nand_ops, &part); ++ ++ rknand_create_procfs(); ++ rk_ftl_storage_sys_init(); ++ ++ ret = rk_ftl_vendor_storage_init(); ++ if (!ret) { ++ rk_vendor_register(rk_ftl_vendor_read, rk_ftl_vendor_write); ++ rknand_vendor_storage_init(); ++ pr_info("rknand vendor storage init ok !\n"); ++ } else { ++ pr_info("rknand vendor storage init failed !\n"); ++ } ++ ++ return 0; ++ ++ rq_init_error: ++ kfree(nand_ops->tag_set); ++ tag_set_error: ++ unregister_blkdev(nand_ops->major, nand_ops->name); ++ ++ return ret; ++} ++ ++static void nand_blk_unregister(struct nand_blk_ops *nand_ops) ++{ ++ struct list_head *this, *next; ++ ++ if (!rk_nand_dev_initialised) ++ return; ++ nand_ops->quit = 1; ++ wake_up(&nand_ops->thread_wq); ++ wait_for_completion(&nand_ops->thread_exit); ++ list_for_each_safe(this, next, &nand_ops->devs) { ++ struct nand_blk_dev *dev ++ = list_entry(this, struct nand_blk_dev, list); ++ ++ nand_remove_dev(dev); ++ } ++ blk_cleanup_queue(nand_ops->rq); ++ unregister_blkdev(nand_ops->major, nand_ops->name); ++} ++ ++void rknand_dev_flush(void) ++{ ++ if (!rk_nand_dev_initialised) ++ return; ++ rknand_device_lock(); ++ rk_ftl_cache_write_back(); ++ rknand_device_unlock(); ++ pr_info("Nand flash flush ok!\n"); ++} ++ ++int __init rknand_dev_init(void) ++{ ++ int ret; ++ void __iomem *nandc0; ++ void __iomem *nandc1; ++ ++ rknand_get_reg_addr((unsigned long *)&nandc0, (unsigned long *)&nandc1); ++ if (!nandc0) ++ return -1; ++ ++ ret = rk_ftl_init(); ++ if (ret) { ++ pr_err("rk_ftl_init fail\n"); ++ return -1; ++ } ++ ++ ret = nand_blk_register(&mytr); ++ if (ret) { ++ pr_err("nand_blk_register fail\n"); ++ return -1; ++ } ++ ++ rk_nand_dev_initialised = 1; ++ return ret; ++} ++ ++int rknand_dev_exit(void) ++{ ++ if (!rk_nand_dev_initialised) ++ return -1; ++ rk_nand_dev_initialised = 0; ++ if (rknand_device_trylock()) { ++ rk_ftl_cache_write_back(); ++ rknand_device_unlock(); ++ } ++ nand_blk_unregister(&mytr); ++ rk_ftl_de_init(); ++ pr_info("nand_blk_dev_exit:OK\n"); ++ return 0; ++} ++ ++void rknand_dev_suspend(void) ++{ ++ if (!rk_nand_dev_initialised) ++ return; ++ pr_info("rk_nand_suspend\n"); ++ rk_nand_schedule_enable_config(0); ++ rknand_device_lock(); ++ rk_nand_suspend(); ++} ++ ++void rknand_dev_resume(void) ++{ ++ if (!rk_nand_dev_initialised) ++ return; ++ pr_info("rk_nand_resume\n"); ++ rk_nand_resume(); ++ rknand_device_unlock(); ++ rk_nand_schedule_enable_config(1); ++} ++ ++void rknand_dev_shutdown(void) ++{ ++ pr_info("rknand_shutdown...\n"); ++ if (!rk_nand_dev_initialised) ++ return; ++ if (mytr.quit == 0) { ++ mytr.quit = 1; ++ wake_up(&mytr.thread_wq); ++ wait_for_completion(&mytr.thread_exit); ++ rk_ftl_de_init(); ++ } ++ pr_info("rknand_shutdown:OK\n"); ++} +diff --git a/drivers/rk_nand/rk_nand_blk.h b/drivers/rk_nand/rk_nand_blk.h +new file mode 100644 +index 00000000000..6807e401405 +--- /dev/null ++++ b/drivers/rk_nand/rk_nand_blk.h +@@ -0,0 +1,67 @@ ++/* ++ * Copyright (c) 2016, 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. ++ */ ++ ++#ifndef __RKNAND_BLK_H ++#define __RKNAND_BLK_H ++ ++#include ++ ++#define MAX_PART_COUNT 32 ++ ++struct nand_part { ++ unsigned char name[32]; ++ unsigned long offset; ++ unsigned long size; ++ unsigned char type; ++}; ++ ++struct nand_blk_dev { ++ struct nand_blk_ops *nand_ops; ++ struct list_head list; ++ int devnum; ++ unsigned long size; ++ unsigned long off_size; ++ int readonly; ++ int writeonly; ++ int disable_access; ++ void *blkcore_priv; ++}; ++ ++struct nand_blk_ops { ++ char *name; ++ int major; ++ int minorbits; ++ int last_dev_index; ++ struct completion thread_exit; ++ int quit; ++ int nand_th_quited; ++ wait_queue_head_t thread_wq; /* thread wait queue */ ++ struct request_queue *rq; ++// spinlock_t queue_lock; /* queue lock */ ++ ++ /* block-mq */ ++// struct list_head rq_list; ++ struct blk_mq_tag_set *tag_set; ++ ++ struct list_head devs; ++ struct module *owner; ++}; ++ ++extern struct device *g_nand_device; ++void rknand_dev_suspend(void); ++void rknand_dev_resume(void); ++void rknand_dev_shutdown(void); ++void rknand_dev_flush(void); ++int __init rknand_dev_init(void); ++int rknand_dev_exit(void); ++void rknand_device_lock(void); ++int rknand_device_trylock(void); ++void rknand_device_unlock(void); ++int nand_blk_add_whole_disk(void); ++#endif +diff --git a/drivers/rk_nand/rk_zftl_arm32.S b/drivers/rk_nand/rk_zftl_arm32.S +new file mode 100644 +index 00000000000..850a5f04636 +--- /dev/null ++++ b/drivers/rk_nand/rk_zftl_arm32.S +@@ -0,0 +1,37095 @@ ++/* ++ * 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: 2021-07-26 ++ * function: rk ftl v6 for rockchip soc base on arm v7 to support 3D/2D ++ * TLC and MLC. ++ */ ++ .arch armv7-a ++ .eabi_attribute 20, 1 ++ .eabi_attribute 21, 1 ++ .eabi_attribute 23, 3 ++ .eabi_attribute 24, 1 ++ .eabi_attribute 25, 1 ++ .eabi_attribute 26, 2 ++ .eabi_attribute 30, 4 ++ .eabi_attribute 34, 1 ++ .eabi_attribute 18, 2 ++ .file "rk_zftl_arm_v7.c" ++ .syntax unified ++ .text ++ .align 2 ++ .fpu softvfp ++ .type flash_mem_cmp8, %function ++flash_mem_cmp8: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov r3, #0 ++ cmp r3, r2 ++ bne .L10 ++ mov r0, #0 ++ bx lr ++.L2: ++ cmp r3, r2 ++ bne .L5 ++ mov r0, #0 ++ ldr pc, [sp], #4 ++.L10: ++ str lr, [sp, #-4]! ++ .save {lr} ++.L5: ++ ldrb lr, [r0, r3] @ zero_extendqisi2 ++ ldrb ip, [r1, r3] @ zero_extendqisi2 ++ add r3, r3, #1 ++ cmp lr, ip ++ beq .L2 ++ mov r0, r3 ++ ldr pc, [sp], #4 ++ .fnend ++ .size flash_mem_cmp8, .-flash_mem_cmp8 ++ .global __aeabi_uidiv ++ .global __aeabi_uidivmod ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type slc_phy_page_address_calc, %function ++slc_phy_page_address_calc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, r0 ++ ldr r5, .L22 ++ ldrb r3, [r5] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L12 ++ ldrb r3, [r5, #1] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L13 ++.L12: ++ ldrh r6, [r5, #2] ++ mov r0, r4 ++ mov r1, r6 ++ bl __aeabi_uidiv ++ mov r1, r6 ++ mul r7, r6, r0 ++ mov r0, r4 ++ bl __aeabi_uidivmod ++ ldrb r3, [r5, #1] @ zero_extendqisi2 ++ lsl r1, r1, #1 ++ cmp r3, #0 ++ addeq r1, r5, r1 ++ addne r4, r1, r7 ++ ldrheq r4, [r1, #4] ++ addeq r4, r4, r7 ++.L13: ++ mov r0, r4 ++ pop {r4, r5, r6, r7, r8, pc} ++.L23: ++ .align 2 ++.L22: ++ .word .LANCHOR0 ++ .fnend ++ .size slc_phy_page_address_calc, .-slc_phy_page_address_calc ++ .align 2 ++ .global zftl_nandc_get_irq_status ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_nandc_get_irq_status, %function ++zftl_nandc_get_irq_status: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L27 ++ ldrb r3, [r3, #1028] @ zero_extendqisi2 ++ cmp r3, #9 ++ ldreq r0, [r0, #296] ++ ldrne r0, [r0, #372] ++ bx lr ++.L28: ++ .align 2 ++.L27: ++ .word .LANCHOR0 ++ .fnend ++ .size zftl_nandc_get_irq_status, .-zftl_nandc_get_irq_status ++ .section .text.unlikely,"ax",%progbits ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type isxdigit, %function ++isxdigit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bic r3, r0, #32 ++ sub r3, r3, #65 ++ cmp r3, #25 ++ bls .L31 ++ sub r0, r0, #48 ++ cmp r0, #9 ++ movhi r0, #0 ++ movls r0, #1 ++ bx lr ++.L31: ++ mov r0, #1 ++ bx lr ++ .fnend ++ .size isxdigit, .-isxdigit ++ .text ++ .align 2 ++ .global zftl_get_density ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_get_density, %function ++zftl_get_density: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r0, #0 ++ bne .L33 ++ ldr r3, .L36 ++ ldr r0, [r3, #1032] ++ bx lr ++.L33: ++ cmp r0, #4 ++ movcc r0, #8192 ++ movcs r0, #0 ++ bx lr ++.L37: ++ .align 2 ++.L36: ++ .word .LANCHOR0 ++ .fnend ++ .size zftl_get_density, .-zftl_get_density ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type _list_remove_node, %function ++_list_remove_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r5, #6 ++ ldr r6, .L47 ++ mul r5, r5, r1 ++ movw r3, #65535 ++ ldr r8, [r6, #1036] ++ ldrh ip, [r8, r5] ++ add r4, r8, r5 ++ ldrh r1, [r4, #2] ++ cmp ip, r3 ++ ldr r3, [r0] ++ bne .L39 ++ cmp r1, ip ++ bne .L39 ++ cmp r4, r3 ++ popne {r4, r5, r6, r7, r8, r9, r10, pc} ++.L39: ++ mov r9, r2 ++ movw r2, #65535 ++ cmp r1, r2 ++ mov r7, r0 ++ bne .L41 ++ cmp r4, r3 ++ beq .L41 ++ mov r2, #202 ++ ldr r1, .L47+4 ++ ldr r0, .L47+8 ++ bl rk_printk ++ bl dump_stack ++.L41: ++ ldr r3, [r7] ++ movw r2, #65535 ++ cmp r4, r3 ++ ldrh r3, [r8, r5] ++ bne .L42 ++ cmp r3, r2 ++ ldrne r2, [r6, #1036] ++ movne r1, #6 ++ moveq r3, #0 ++ streq r3, [r7] ++ mlane r3, r1, r3, r2 ++ mvnne r2, #0 ++ strne r3, [r7] ++ strhne r2, [r3, #2] @ movhi ++.L44: ++ mvn r3, #0 ++ strh r3, [r8, r5] @ movhi ++ strh r3, [r4, #2] @ movhi ++ ldrh r3, [r9] ++ sub r3, r3, #1 ++ strh r3, [r9] @ movhi ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L42: ++ cmp r3, r2 ++ ldrh r1, [r4, #2] ++ bne .L45 ++ cmp r1, r3 ++ movne r3, #6 ++ ldrne r2, [r6, #1036] ++ mulne r1, r3, r1 ++ mvnne r3, #0 ++ strhne r3, [r2, r1] @ movhi ++ b .L44 ++.L45: ++ ldr r0, [r6, #1036] ++ mov r2, #6 ++ mla r3, r2, r3, r0 ++ strh r1, [r3, #2] @ movhi ++ ldrh r0, [r4, #2] ++ ldrh r1, [r8, r5] ++ ldr r3, [r6, #1036] ++ mul r2, r2, r0 ++ strh r1, [r3, r2] @ movhi ++ b .L44 ++.L48: ++ .align 2 ++.L47: ++ .word .LANCHOR0 ++ .word .LANCHOR1 ++ .word .LC0 ++ .fnend ++ .size _list_remove_node, .-_list_remove_node ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ndelay, %function ++ndelay: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L50 ++ add r0, r0, #996 ++ add r0, r0, #3 ++ umull r0, r1, r0, r3 ++ ldr r3, .L50+4 ++ ldr r3, [r3, #8] ++ lsr r0, r1, #6 ++ bx r3 @ indirect register sibling call ++.L51: ++ .align 2 ++.L50: ++ .word 274877907 ++ .word arm_delay_ops ++ .fnend ++ .size ndelay, .-ndelay ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type hynix_set_rr_para, %function ++hynix_set_rr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L58 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ lsl r9, r0, #8 ++ ldr r3, [r2, #1040] ++ ldr r6, [r2, #1044] ++ ldrb ip, [r3, #113] @ zero_extendqisi2 ++ add r4, r3, #112 ++ ldrb r2, [r3, #112] @ zero_extendqisi2 ++ add r5, r6, r9 ++ add r7, r3, #128 ++ add r8, r3, #127 ++ mul r1, r1, ip ++ cmp r2, #8 ++ movne r2, #160 ++ add r1, r1, #32 ++ smlabbne r1, r2, r0, r1 ++ mov r2, #54 ++ str r2, [r5, #2056] ++ sub r2, ip, #1 ++ add r4, r4, r1 ++ add r7, r7, r2 ++ sub r4, r4, #1 ++.L55: ++ cmp r8, r7 ++ bne .L56 ++ add r6, r6, r9 ++ mov r3, #22 ++ str r3, [r6, #2056] ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L56: ++ ldrb r3, [r8, #1]! @ zero_extendqisi2 ++ mov r0, #120 ++ str r3, [r5, #2052] ++ bl ndelay ++ ldrsb r3, [r4, #1]! ++ str r3, [r5, #2048] ++ b .L55 ++.L59: ++ .align 2 ++.L58: ++ .word .LANCHOR0 ++ .fnend ++ .size hynix_set_rr_para, .-hynix_set_rr_para ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_debug_proc_open, %function ++zftl_debug_proc_open: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r1 ++ bl PDE_DATA ++ mov r2, r0 ++ mov r0, r4 ++ ldr r1, .L62 ++ pop {r4, lr} ++ b single_open ++.L63: ++ .align 2 ++.L62: ++ .word zftl_debug_proc_show ++ .fnend ++ .size zftl_debug_proc_open, .-zftl_debug_proc_open ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_debug_proc_show, %function ++zftl_debug_proc_show: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r0 ++ ldr r2, .L66 ++ ldr r1, .L66+4 ++ bl seq_printf ++ ldr r3, .L66+8 ++ mov r0, r4 ++ ldr r1, .L66+12 ++ ldr r2, [r3] ++ bl seq_printf ++ mov r0, #0 ++ pop {r4, pc} ++.L67: ++ .align 2 ++.L66: ++ .word .LC1 ++ .word .LC2 ++ .word .LANCHOR2 ++ .word .LC3 ++ .fnend ++ .size zftl_debug_proc_show, .-zftl_debug_proc_show ++ .align 2 ++ .global zftl_flash_suspend ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_flash_suspend, %function ++zftl_flash_suspend: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L72 ++ ldrb r2, [r3, #1028] @ zero_extendqisi2 ++ cmp r2, #9 ++ ldr r2, [r3, #1044] ++ ldr r1, [r2] ++ str r1, [r3, #1048] ++ ldr r1, [r2, #4] ++ str r1, [r3, #1052] ++ bne .L69 ++ ldr r1, [r2, #16] ++ str r1, [r3, #1056] ++ ldr r1, [r2, #32] ++ str r1, [r3, #1060] ++ ldr r1, [r2, #80] ++ str r1, [r3, #1064] ++ ldr r1, [r2, #84] ++ str r1, [r3, #1068] ++ ldr r1, [r2, #520] ++ ldr r2, [r2, #8] ++ str r1, [r3, #1072] ++.L71: ++ str r2, [r3, #1076] ++ bx lr ++.L69: ++ ldr r1, [r2, #8] ++ str r1, [r3, #1056] ++ ldr r1, [r2, #12] ++ str r1, [r3, #1060] ++ ldr r1, [r2, #304] ++ str r1, [r3, #1064] ++ ldr r1, [r2, #308] ++ str r1, [r3, #1068] ++ ldr r1, [r2, #336] ++ ldr r2, [r2, #344] ++ str r1, [r3, #1072] ++ b .L71 ++.L73: ++ .align 2 ++.L72: ++ .word .LANCHOR0 ++ .fnend ++ .size zftl_flash_suspend, .-zftl_flash_suspend ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_irq_disable, %function ++nandc_irq_disable: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L77 ++ ldrb r3, [r3, #1028] @ zero_extendqisi2 ++ cmp r3, #9 ++ mov r3, #1 ++ bne .L75 ++ ldr r2, [r0, #292] ++ lsl r1, r3, r1 ++ orr r3, r2, r1 ++ str r3, [r0, #292] ++ ldr r3, [r0, #288] ++ bic r1, r3, r1 ++ str r1, [r0, #288] ++ bx lr ++.L75: ++ ldr r2, [r0, #368] ++ lsl r1, r3, r1 ++ orr r3, r2, r1 ++ str r3, [r0, #368] ++ ldr r3, [r0, #364] ++ bic r1, r3, r1 ++ str r1, [r0, #364] ++ bx lr ++.L78: ++ .align 2 ++.L77: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_irq_disable, .-nandc_irq_disable ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type _insert_free_list, %function ++_insert_free_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L91 ++ movw ip, #1080 ++ ldrh ip, [r3, ip] ++ cmp ip, r1 ++ bxls lr ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, r3 ++ ldrh ip, [r2] ++ add ip, ip, #1 ++ strh ip, [r2] @ movhi ++ mov ip, #6 ++ mul r6, ip, r1 ++ ldr r7, [r3, #1036] ++ mvn r3, #0 ++ add lr, r7, r6 ++ strh r3, [lr, #2] @ movhi ++ strh r3, [r7, r6] @ movhi ++ ldr r3, [r0] ++ cmp r3, #0 ++ bne .L81 ++.L90: ++ str lr, [r0] ++ b .L79 ++.L81: ++ ldr r5, [r4, #1084] ++ add r2, r4, #1088 ++ ldrh r10, [r2] ++ lsl r8, r1, #2 ++ ldr r9, [r4, #1036] ++ movw fp, #65535 ++ ldr r2, [r5, r1, lsl #2] ++ ldrh r8, [r5, r8] ++ str ip, [sp, #4] ++ ubfx r2, r2, #11, #8 ++ smulbb r2, r2, r10 ++ ubfx r8, r8, #0, #11 ++ add r2, r2, r8 ++ uxth r2, r2 ++ str r2, [sp] ++ sub r2, r3, r9 ++ asr r8, r2, #1 ++ ldr r2, .L91+4 ++ mul r2, r2, r8 ++ uxth r2, r2 ++.L84: ++ ldr ip, [r5, r2, lsl #2] ++ lsl r8, r2, #2 ++ ldrh r8, [r5, r8] ++ ubfx ip, ip, #11, #8 ++ smulbb ip, ip, r10 ++ ubfx r8, r8, #0, #11 ++ add ip, ip, r8 ++ ldr r8, [sp] ++ uxth ip, ip ++ cmp r8, ip ++ bls .L82 ++ ldrh ip, [r3] ++ cmp ip, fp ++ bne .L83 ++ strh r2, [lr, #2] @ movhi ++ strh r1, [r3] @ movhi ++.L79: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L83: ++ ldr r3, [sp, #4] ++ mov r2, ip ++ mla r3, r3, ip, r9 ++ b .L84 ++.L82: ++ ldrh ip, [r3, #2] ++ strh ip, [lr, #2] @ movhi ++ strh r2, [r7, r6] @ movhi ++ ldr r2, [r0] ++ cmp r3, r2 ++ strheq r1, [r3, #2] @ movhi ++ beq .L90 ++.L85: ++ ldrh ip, [r3, #2] ++ mov r2, #6 ++ ldr r0, [r4, #1036] ++ mul r2, r2, ip ++ strh r1, [r0, r2] @ movhi ++ strh r1, [r3, #2] @ movhi ++ b .L79 ++.L92: ++ .align 2 ++.L91: ++ .word .LANCHOR0 ++ .word -1431655765 ++ .fnend ++ .size _insert_free_list, .-_insert_free_list ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type _insert_data_list, %function ++_insert_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L116 ++ movw ip, #1080 ++ ldrh ip, [r3, ip] ++ cmp ip, r1 ++ bxls lr ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r5, #6 ++ ldrh ip, [r2] ++ mul r5, r5, r1 ++ mov r4, r3 ++ .pad #28 ++ sub sp, sp, #28 ++ add ip, ip, #1 ++ strh ip, [r2] @ movhi ++ ldr r10, [r3, #1036] ++ mvn r3, #0 ++ add lr, r10, r5 ++ strh r3, [lr, #2] @ movhi ++ strh r3, [r10, r5] @ movhi ++ ldr r3, [r0] ++ cmp r3, #0 ++ bne .L96 ++.L115: ++ str lr, [r0] ++ b .L93 ++.L96: ++ ldr r2, [r4, #1092] ++ add r8, r4, #1088 ++ ldr r9, [r4, #1084] ++ ldrh r8, [r8] ++ str r2, [sp, #4] ++ lsl r2, r1, #1 ++ ldr ip, [sp, #4] ++ ldrh r6, [lr, #4] ++ ldr r7, [r9, r1, lsl #2] ++ ldrh ip, [ip, r2] ++ muls ip, r6, ip ++ str r8, [sp, #8] ++ lsl r2, r1, #2 ++ ldrhne r8, [sp, #8] ++ ubfx r7, r7, #11, #8 ++ ldrh r2, [r9, r2] ++ smulbbne r7, r7, r8 ++ ubfx r2, r2, #0, #11 ++ addne r2, r2, r7 ++ uxtahne ip, ip, r2 ++ ldr r2, [r4, #1036] ++ cmp r6, #0 ++ mvneq ip, #0 ++ str r2, [sp, #12] ++ sub r2, r3, r2 ++ asr r6, r2, #1 ++ ldr r2, .L116+4 ++ mul r2, r2, r6 ++ movw r6, #1080 ++ ldrh r4, [r4, r6] ++ mov r6, #0 ++ uxth r2, r2 ++ str r4, [sp, #16] ++.L103: ++ sub r4, r1, r2 ++ ldr r7, [sp, #16] ++ add r6, r6, #1 ++ clz r4, r4 ++ uxth r6, r6 ++ lsr r4, r4, #5 ++ cmp r6, r7 ++ orrhi r4, r4, #1 ++ cmp r4, #0 ++ bne .L93 ++ ldr r7, [sp, #4] ++ lsl r4, r2, #1 ++ ldrh fp, [r3, #4] ++ ldr r8, [r9, r2, lsl #2] ++ ldrh r4, [r7, r4] ++ lsl r7, r2, #2 ++ muls r4, fp, r4 ++ ldrh r7, [r9, r7] ++ ubfx r8, r8, #11, #8 ++ ubfx r7, r7, #0, #11 ++ str r7, [sp, #20] ++ ldrhne r7, [sp, #8] ++ smulbbne r8, r8, r7 ++ ldrne r7, [sp, #20] ++ addne r7, r7, r8 ++ uxtahne r4, r4, r7 ++ cmp fp, #0 ++ cmpne ip, r4 ++ bls .L101 ++ ldrh r4, [r3] ++ movw r7, #65535 ++ cmp r4, r7 ++ bne .L102 ++ strh r2, [lr, #2] @ movhi ++ strh r1, [r3] @ movhi ++.L93: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L102: ++ ldr r2, [sp, #12] ++ mov r3, #6 ++ mla r3, r3, r4, r2 ++ mov r2, r4 ++ b .L103 ++.L101: ++ ldrh ip, [r3, #2] ++ strh ip, [lr, #2] @ movhi ++ strh r2, [r10, r5] @ movhi ++ ldr r2, [r0] ++ cmp r3, r2 ++ strheq r1, [r3, #2] @ movhi ++ beq .L115 ++.L104: ++ ldrh ip, [r3, #2] ++ ldr r2, .L116 ++ ldr r0, [r2, #1036] ++ mov r2, #6 ++ mul r2, r2, ip ++ strh r1, [r0, r2] @ movhi ++ strh r1, [r3, #2] @ movhi ++ b .L93 ++.L117: ++ .align 2 ++.L116: ++ .word .LANCHOR0 ++ .word -1431655765 ++ .fnend ++ .size _insert_data_list, .-_insert_data_list ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type _list_update_data_list, %function ++_list_update_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r5, .L129 ++ ldr r3, [r5, #1096] ++ ldrh ip, [r3, #16] ++ cmp ip, r1 ++ popeq {r4, r5, r6, r7, r8, r9, r10, pc} ++ ldrh ip, [r3, #48] ++ cmp ip, r1 ++ popeq {r4, r5, r6, r7, r8, r9, r10, pc} ++ ldrh r3, [r3, #80] ++ cmp r3, r1 ++ popeq {r4, r5, r6, r7, r8, r9, r10, pc} ++ mov r8, #6 ++ ldr r10, [r5, #1036] ++ mul r8, r8, r1 ++ ldr r3, [r0] ++ add r9, r10, r8 ++ cmp r9, r3 ++ popeq {r4, r5, r6, r7, r8, r9, r10, pc} ++ ldrh r3, [r9, #2] ++ mov r7, r2 ++ movw r2, #65535 ++ mov r4, r1 ++ mov r6, r0 ++ cmp r3, r2 ++ bne .L122 ++ ldrh r2, [r10, r8] ++ cmp r2, r3 ++ bne .L122 ++ movw r2, #273 ++ ldr r1, .L129+4 ++ ldr r0, .L129+8 ++ bl rk_printk ++ bl dump_stack ++.L122: ++ ldrh r3, [r9, #2] ++ movw r2, #65535 ++ cmp r3, r2 ++ bne .L123 ++ ldrh r2, [r10, r8] ++ cmp r2, r3 ++ popeq {r4, r5, r6, r7, r8, r9, r10, pc} ++.L123: ++ ldr r0, [r5, #1092] ++ lsl r2, r4, #1 ++ ldrh r1, [r9, #4] ++ ldrh r2, [r0, r2] ++ cmp r1, #0 ++ mvneq r1, #0 ++ mulne r1, r1, r2 ++ mov r2, #6 ++ mul r2, r2, r3 ++ ldr r3, .L129+12 ++ asr ip, r2, #1 ++ mul r3, r3, ip ++ lsl r3, r3, #1 ++ ldrh ip, [r0, r3] ++ ldr r0, [r5, #1036] ++ add r2, r0, r2 ++ ldrh r3, [r2, #4] ++ cmp r3, #0 ++ mulne r3, r3, ip ++ mvneq r3, #0 ++ cmp r1, r3 ++ popcs {r4, r5, r6, r7, r8, r9, r10, pc} ++ mov r2, r7 ++ mov r1, r4 ++ mov r0, r6 ++ bl _list_remove_node ++ mov r2, r7 ++ mov r1, r4 ++ mov r0, r6 ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ b _insert_data_list ++.L130: ++ .align 2 ++.L129: ++ .word .LANCHOR0 ++ .word .LANCHOR1+18 ++ .word .LC0 ++ .word -1431655765 ++ .fnend ++ .size _list_update_data_list, .-_list_update_data_list ++ .section .text.unlikely ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_simple_strtoull.constprop.33, %function ++rk_simple_strtoull.constprop.33: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, r0 ++ ldrb r3, [r0] @ zero_extendqisi2 ++ cmp r3, #48 ++ movne r2, r0 ++ movne r5, #10 ++ bne .L132 ++ ldrb r3, [r0, #1] @ zero_extendqisi2 ++ add r2, r0, #1 ++ orr r3, r3, #32 ++ cmp r3, #120 ++ bne .L144 ++ ldrb r0, [r0, #2] @ zero_extendqisi2 ++ bl isxdigit ++ cmp r0, #0 ++ addne r2, r4, #2 ++ movne r5, #16 ++ bne .L132 ++.L144: ++ mov r5, #8 ++.L132: ++ mov r6, #0 ++.L133: ++ mov r7, r2 ++ ldrb r4, [r2], #1 @ zero_extendqisi2 ++ mov r0, r4 ++ bl isxdigit ++ cmp r0, #0 ++ bne .L134 ++.L140: ++ cmp r1, #0 ++ mov r0, r6 ++ strne r7, [r1] ++ pop {r4, r5, r6, r7, r8, pc} ++.L134: ++ sub r0, r4, #48 ++ cmp r0, #9 ++ orrhi r0, r4, #32 ++ subhi r0, r0, #87 ++ cmp r0, r5 ++ bcs .L140 ++ mla r6, r5, r6, r0 ++ b .L133 ++ .fnend ++ .size rk_simple_strtoull.constprop.33, .-rk_simple_strtoull.constprop.33 ++ .text ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_de_cs.constprop.35, %function ++nandc_de_cs.constprop.35: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L148 ++ ldr r2, [r3, #1044] ++ ldr r3, [r2] ++ bfc r3, #0, #8 ++ bfc r3, #17, #1 ++ str r3, [r2] ++ bx lr ++.L149: ++ .align 2 ++.L148: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_de_cs.constprop.35, .-nandc_de_cs.constprop.35 ++ .align 2 ++ .global flash_read_status ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_read_status, %function ++flash_read_status: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov r3, #112 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r0 ++ str r3, [r0, #8] ++ mov r0, #120 ++ bl ndelay ++ ldr r0, [r4] ++ uxtb r0, r0 ++ pop {r4, pc} ++ .fnend ++ .size flash_read_status, .-flash_read_status ++ .align 2 ++ .global toshiba_set_rr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type toshiba_set_rr_para, %function ++toshiba_set_rr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ add r8, r1, r1, lsl #2 ++ ldr r9, .L161 ++ mov r5, r0 ++ mov r6, r1 ++ mov r4, #0 ++ ldr r7, .L161+4 ++ add r10, r9, #41 ++.L153: ++ ldrb r3, [r7, #1101] @ zero_extendqisi2 ++ cmp r4, r3 ++ bcc .L157 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L157: ++ mov r3, #85 ++ mov r0, #200 ++ str r3, [r5, #8] ++ ldrsb r3, [r4, r10] ++ str r3, [r5, #4] ++ bl ndelay ++ ldrb r3, [r7, #1100] @ zero_extendqisi2 ++ cmp r3, #34 ++ addeq r3, r4, r8 ++ addeq r3, r10, r3 ++ beq .L160 ++ cmp r3, #35 ++ addne r3, r9, r6 ++ ldrsbne r3, [r3, #181] ++ bne .L159 ++ ldr r2, .L161+8 ++ add r3, r4, r8 ++ add r3, r2, r3 ++.L160: ++ ldrsb r3, [r3, #5] ++.L159: ++ str r3, [r5] ++ add r4, r4, #1 ++ b .L153 ++.L162: ++ .align 2 ++.L161: ++ .word .LANCHOR1 ++ .word .LANCHOR0 ++ .word .LANCHOR1+86 ++ .fnend ++ .size toshiba_set_rr_para, .-toshiba_set_rr_para ++ .align 2 ++ .global hynix_reconfig_rr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type hynix_reconfig_rr_para, %function ++hynix_reconfig_rr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r5, .L169 ++ ldrb r2, [r5, #1100] @ zero_extendqisi2 ++ sub r2, r2, #1 ++ cmp r2, #7 ++ pophi {r4, r5, r6, pc} ++ ldr r2, [r5, #1040] ++ mov r4, r0 ++ add r2, r2, r0 ++ ldrb r2, [r2, #120] @ zero_extendqisi2 ++ cmp r2, #0 ++ popeq {r4, r5, r6, pc} ++ mov r1, #0 ++ bl hynix_set_rr_para ++ ldr r3, [r5, #1040] ++ mov r2, #0 ++ add r3, r3, r4 ++ strb r2, [r3, #120] ++ pop {r4, r5, r6, pc} ++.L170: ++ .align 2 ++.L169: ++ .word .LANCHOR0 ++ .fnend ++ .size hynix_reconfig_rr_para, .-hynix_reconfig_rr_para ++ .align 2 ++ .global nand_flash_print_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nand_flash_print_info, %function ++nand_flash_print_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, lr} ++ .save {r4, lr} ++ .pad #16 ++ ldr r4, .L290 ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L172 ++ ldr r1, .L290+4 ++ ldr r0, .L290+8 ++ bl rk_printk ++.L172: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L173 ++ ldr r3, .L290+12 ++ ldr r0, [r3, #1104] ++ ldrb ip, [r0, #6] @ zero_extendqisi2 ++ ldrb r3, [r0, #3] @ zero_extendqisi2 ++ ldrb r2, [r0, #2] @ zero_extendqisi2 ++ ldrb r1, [r0, #1] @ zero_extendqisi2 ++ str ip, [sp, #8] ++ ldrb ip, [r0, #5] @ zero_extendqisi2 ++ str ip, [sp, #4] ++ ldrb r0, [r0, #4] @ zero_extendqisi2 ++ str r0, [sp] ++ ldr r0, .L290+16 ++ bl rk_printk ++.L173: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L174 ++ ldr r3, .L290+12 ++ ldr r0, .L290+20 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #8] @ zero_extendqisi2 ++ bl rk_printk ++.L174: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L175 ++ ldr r3, .L290+12 ++ ldr r0, .L290+24 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #9] @ zero_extendqisi2 ++ bl rk_printk ++.L175: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L176 ++ ldr r3, .L290+12 ++ ldr r0, .L290+28 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #10] ++ bl rk_printk ++.L176: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L177 ++ ldr r3, .L290+12 ++ ldr r0, .L290+32 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #12] @ zero_extendqisi2 ++ bl rk_printk ++.L177: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L178 ++ ldr r3, .L290+12 ++ ldr r0, .L290+36 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #13] @ zero_extendqisi2 ++ bl rk_printk ++.L178: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L179 ++ ldr r3, .L290+12 ++ ldr r0, .L290+40 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #14] ++ bl rk_printk ++.L179: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L180 ++ ldr r3, .L290+12 ++ ldr r0, .L290+44 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #23] @ zero_extendqisi2 ++ bl rk_printk ++.L180: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L181 ++ ldr r3, .L290+12 ++ ldr r0, .L290+48 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #18] @ zero_extendqisi2 ++ bl rk_printk ++.L181: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L182 ++ ldr r3, .L290+12 ++ ldr r0, .L290+52 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #19] @ zero_extendqisi2 ++ bl rk_printk ++.L182: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L183 ++ ldr r3, .L290+12 ++ ldr r0, .L290+56 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #20] @ zero_extendqisi2 ++ bl rk_printk ++.L183: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L184 ++ ldr r3, .L290+12 ++ ldr r0, .L290+60 ++ ldrb r1, [r3, #1108] @ zero_extendqisi2 ++ bl rk_printk ++.L184: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L185 ++ ldr r3, .L290+12 ++ ldr r0, .L290+64 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #22] @ zero_extendqisi2 ++ bl rk_printk ++.L185: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L186 ++ ldr r3, .L290+12 ++ ldr r0, .L290+68 ++ ldrb r1, [r3, #1109] @ zero_extendqisi2 ++ bl rk_printk ++.L186: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L187 ++ ldr r3, .L290+12 ++ ldr r0, .L290+72 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ and r1, r1, #1 ++ bl rk_printk ++.L187: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L188 ++ ldr r3, .L290+12 ++ ldr r0, .L290+76 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #1, #1 ++ bl rk_printk ++.L188: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L189 ++ ldr r3, .L290+12 ++ ldr r0, .L290+80 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #2, #1 ++ bl rk_printk ++.L189: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L190 ++ ldr r3, .L290+12 ++ ldr r0, .L290+84 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #3, #1 ++ bl rk_printk ++.L190: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L191 ++ ldr r3, .L290+12 ++ ldr r0, .L290+88 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #4, #1 ++ bl rk_printk ++.L191: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L192 ++ ldr r3, .L290+12 ++ ldr r0, .L290+92 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #5, #1 ++ bl rk_printk ++.L192: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L193 ++ ldr r3, .L290+12 ++ ldr r0, .L290+96 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #6, #1 ++ bl rk_printk ++.L193: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L194 ++ ldr r3, .L290+12 ++ ldr r0, .L290+100 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #7, #1 ++ bl rk_printk ++.L194: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L195 ++ ldr r3, .L290+12 ++ ldr r0, .L290+104 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #8, #1 ++ bl rk_printk ++.L195: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L196 ++ ldr r3, .L290+12 ++ ldr r0, .L290+108 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #9, #1 ++ bl rk_printk ++.L196: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L197 ++ ldr r3, .L290+12 ++ ldr r0, .L290+112 ++ ldr r3, [r3, #1104] ++ ldrh r1, [r3, #16] ++ ubfx r1, r1, #10, #1 ++ bl rk_printk ++.L197: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L198 ++ ldr r3, .L290+12 ++ ldr r0, .L290+116 ++ ldrb r2, [r3, #1110] @ zero_extendqisi2 ++ ldrb r1, [r3] @ zero_extendqisi2 ++ bl rk_printk ++.L198: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L199 ++ ldr r3, .L290+12 ++ ldr r0, .L290+120 ++ ldrb r2, [r3, #1122] @ zero_extendqisi2 ++ ldrb r1, [r3, #1121] @ zero_extendqisi2 ++ bl rk_printk ++.L199: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L200 ++ ldr r3, .L290+12 ++ ldr r0, .L290+124 ++ ldrb r2, [r3, #1120] @ zero_extendqisi2 ++ ldrb r1, [r3, #1119] @ zero_extendqisi2 ++ bl rk_printk ++.L200: ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L171 ++ ldr r3, .L290+12 ++ ldr r0, .L290+128 ++ ldrb r1, [r3, #1143] @ zero_extendqisi2 ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, lr} ++ b rk_printk ++.L171: ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, pc} ++.L291: ++ .align 2 ++.L290: ++ .word .LANCHOR2 ++ .word .LANCHOR1+189 ++ .word .LC4 ++ .word .LANCHOR0 ++ .word .LC5 ++ .word .LC6 ++ .word .LC7 ++ .word .LC8 ++ .word .LC9 ++ .word .LC10 ++ .word .LC11 ++ .word .LC12 ++ .word .LC13 ++ .word .LC14 ++ .word .LC15 ++ .word .LC16 ++ .word .LC17 ++ .word .LC18 ++ .word .LC19 ++ .word .LC20 ++ .word .LC21 ++ .word .LC22 ++ .word .LC23 ++ .word .LC24 ++ .word .LC25 ++ .word .LC26 ++ .word .LC27 ++ .word .LC28 ++ .word .LC29 ++ .word .LC30 ++ .word .LC31 ++ .word .LC32 ++ .word .LC33 ++ .fnend ++ .size nand_flash_print_info, .-nand_flash_print_info ++ .align 2 ++ .global timer_delay_ns ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type timer_delay_ns, %function ++timer_delay_ns: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ndelay ++ .fnend ++ .size timer_delay_ns, .-timer_delay_ns ++ .align 2 ++ .global nandc_set_ddr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_set_ddr_para, %function ++nandc_set_ddr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L296 ++ ldrb r3, [r2, #1028] @ zero_extendqisi2 ++ ldr r2, [r2, #1044] ++ cmp r3, #9 ++ lsl r3, r0, #16 ++ lsl r0, r0, #8 ++ orr r3, r3, r0 ++ orr r3, r3, #3 ++ streq r3, [r2, #80] ++ strne r3, [r2, #304] ++ bx lr ++.L297: ++ .align 2 ++.L296: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_set_ddr_para, .-nandc_set_ddr_para ++ .align 2 ++ .global nandc_get_ddr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_get_ddr_para, %function ++nandc_get_ddr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L302 ++ ldrb r2, [r3, #1028] @ zero_extendqisi2 ++ ldr r3, [r3, #1044] ++ cmp r2, #9 ++ ldreq r0, [r3, #80] ++ ldrne r0, [r3, #304] ++ ubfx r0, r0, #8, #8 ++ bx lr ++.L303: ++ .align 2 ++.L302: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_get_ddr_para, .-nandc_get_ddr_para ++ .align 2 ++ .global nandc_set_if_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_set_if_mode, %function ++nandc_set_if_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r1, .L312 ++ ands ip, r0, #6 ++ ldr r3, [r1, #1044] ++ ldr r2, [r3] ++ bfieq r2, ip, #13, #1 ++ beq .L308 ++ ldrb r1, [r1, #1028] @ zero_extendqisi2 ++ orr r2, r2, #24576 ++ bfc r2, #15, #1 ++ tst r0, #4 ++ orr r2, r2, #196608 ++ movw r0, #8321 ++ orrne r2, r2, #32768 ++ cmp r1, #9 ++ ldr r1, .L312+4 ++ streq r0, [r3, #8] ++ strne r0, [r3, #344] ++ streq r1, [r3, #80] ++ moveq r1, #38 ++ strne r1, [r3, #304] ++ movne r1, #38 ++ streq r1, [r3, #84] ++ moveq r1, #39 ++ strne r1, [r3, #308] ++ movne r1, #39 ++ streq r1, [r3, #84] ++ strne r1, [r3, #308] ++.L308: ++ str r2, [r3] ++ bx lr ++.L313: ++ .align 2 ++.L312: ++ .word .LANCHOR0 ++ .word 1052675 ++ .fnend ++ .size nandc_set_if_mode, .-nandc_set_if_mode ++ .align 2 ++ .global nandc_cs ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_cs, %function ++nandc_cs: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L315 ++ mov r2, #1 ++ lsl r0, r2, r0 ++ ldr r1, [r3, #1044] ++ ldr r3, [r1] ++ bfi r3, r0, #0, #8 ++ str r3, [r1] ++ bx lr ++.L316: ++ .align 2 ++.L315: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_cs, .-nandc_cs ++ .align 2 ++ .global flash_wait_device_ready_raw ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_wait_device_ready_raw, %function ++flash_wait_device_ready_raw: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r6, r0 ++ ldr r4, .L326 ++ mov r5, r1 ++ str r2, [sp, #4] ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ cmp r3, r0 ++ bhi .L318 ++ mov r2, #812 ++ ldr r1, .L326+4 ++ ldr r0, .L326+8 ++ bl rk_printk ++ bl dump_stack ++.L318: ++ add r6, r4, r6 ++ ldr r3, [r4, #1044] ++ ldrb r6, [r6, #1144] @ zero_extendqisi2 ++ lsr r8, r5, #8 ++ lsr r9, r5, #16 ++ lsr r10, r5, #24 ++ mov fp, #120 ++ add r7, r3, r6, lsl #8 ++.L320: ++ mov r0, r6 ++ bl nandc_cs ++ uxtb r2, r5 ++ str fp, [r7, #2056] ++ mov r0, #120 ++ str r2, [r7, #2052] ++ ldrb r2, [r4, #1152] @ zero_extendqisi2 ++ str r8, [r7, #2052] ++ str r9, [r7, #2052] ++ cmp r2, #0 ++ strne r10, [r7, #2052] ++ bl ndelay ++ ldr r0, [r7, #2048] ++ uxtb r0, r0 ++ bl nandc_de_cs.constprop.35 ++ ldr r3, [sp, #4] ++ bics r3, r3, r0 ++ movne r2, #1 ++ moveq r2, #0 ++ cmp r0, #255 ++ orreq r2, r2, #1 ++ cmp r2, #0 ++ bne .L320 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L327: ++ .align 2 ++.L326: ++ .word .LANCHOR0 ++ .word .LANCHOR1+211 ++ .word .LC0 ++ .fnend ++ .size flash_wait_device_ready_raw, .-flash_wait_device_ready_raw ++ .align 2 ++ .global flash_wait_device_ready ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_wait_device_ready, %function ++flash_wait_device_ready: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r3, #1 ++ ldr r5, .L339 ++ tst r0, #50331648 ++ mov r7, r1 ++ ldrb r6, [r5, #1153] @ zero_extendqisi2 ++ rsb r2, r6, #24 ++ lsl r6, r3, r6 ++ lsl r4, r3, r2 ++ sub r6, r6, #1 ++ sub r4, r4, #1 ++ and r6, r6, r0, asr r2 ++ and r4, r4, r0 ++ uxtb r6, r6 ++ bne .L329 ++ ldrb r3, [r5] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L330 ++ ldrb r3, [r5, #1] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L329 ++.L330: ++ ldrh r8, [r5, #2] ++ mov r0, r4 ++ mov r1, r8 ++ bl __aeabi_uidiv ++ mov r1, r8 ++ mul r9, r8, r0 ++ mov r0, r4 ++ bl __aeabi_uidivmod ++ ldrb r3, [r5, #1] @ zero_extendqisi2 ++ lsl r1, r1, #1 ++ cmp r3, #0 ++ addeq r5, r5, r1 ++ addne r4, r1, r9 ++ ldrheq r4, [r5, #4] ++ addeq r4, r4, r9 ++.L329: ++ mov r2, r7 ++ mov r1, r4 ++ mov r0, r6 ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ b flash_wait_device_ready_raw ++.L340: ++ .align 2 ++.L339: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_wait_device_ready, .-flash_wait_device_ready ++ .align 2 ++ .global nandc_de_cs ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_de_cs, %function ++nandc_de_cs: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L342 ++ ldr r2, [r3, #1044] ++ ldr r3, [r2] ++ bfc r3, #0, #8 ++ bfc r3, #17, #1 ++ str r3, [r2] ++ bx lr ++.L343: ++ .align 2 ++.L342: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_de_cs, .-nandc_de_cs ++ .align 2 ++ .global nandc_wait_flash_ready_no_delay ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_wait_flash_ready_no_delay, %function ++nandc_wait_flash_ready_no_delay: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #12 ++ ldr r4, .L350 ++ ldr r5, .L350+4 ++.L346: ++ ldr r3, [r5, #1044] ++ ldr r3, [r3] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #512 ++ bne .L347 ++ mov r0, #10 ++ bl ndelay ++ subs r4, r4, #1 ++ bne .L346 ++ mvn r0, #0 ++.L344: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, pc} ++.L347: ++ mov r0, #0 ++ b .L344 ++.L351: ++ .align 2 ++.L350: ++ .word 100000 ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_wait_flash_ready_no_delay, .-nandc_wait_flash_ready_no_delay ++ .align 2 ++ .global zftl_flash_enter_slc_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_flash_enter_slc_mode, %function ++zftl_flash_enter_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L375 ++ ldrb r2, [r3] @ zero_extendqisi2 ++ cmp r2, #0 ++ bxeq lr ++ cmp r2, #1 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r5, [r3, #1044] ++ bne .L355 ++ ldr r3, .L375+4 ++ ldrb r3, [r3, #33] @ zero_extendqisi2 ++ cmp r3, #0 ++ addne r4, r5, r0, lsl #8 ++ bne .L374 ++ pop {r4, r5, r6, r7, r8, pc} ++.L355: ++ cmp r2, #2 ++ mov r4, r0 ++ bne .L357 ++ add r3, r3, r0 ++ ldrb r2, [r3, #1154] @ zero_extendqisi2 ++ cmp r2, #0 ++ popeq {r4, r5, r6, r7, r8, pc} ++ ldr r6, .L375+4 ++ mov r2, #0 ++ strb r2, [r3, #1154] ++ ldrb r3, [r6, #33] @ zero_extendqisi2 ++ cmp r3, r2 ++ popeq {r4, r5, r6, r7, r8, pc} ++ bl nandc_wait_flash_ready_no_delay ++ ldrb r3, [r6, #33] @ zero_extendqisi2 ++ add r4, r5, r4, lsl #8 ++.L374: ++ str r3, [r4, #2056] ++ pop {r4, r5, r6, r7, r8, pc} ++.L357: ++ cmp r2, #3 ++ popne {r4, r5, r6, r7, r8, pc} ++ add r6, r3, r0 ++ ldrb r3, [r6, #1154] @ zero_extendqisi2 ++ cmp r3, #0 ++ popeq {r4, r5, r6, r7, r8, pc} ++ add r4, r5, r4, lsl #8 ++ mov r7, #0 ++ bl nandc_wait_flash_ready_no_delay ++ mov r3, #239 ++ mov r0, #100 ++ str r3, [r4, #2056] ++ mov r3, #145 ++ str r3, [r4, #2052] ++ strb r7, [r6, #1154] ++ bl ndelay ++ mov r3, #1 ++ str r7, [r4, #2048] ++ mov r0, #150 ++ str r3, [r4, #2048] ++ str r7, [r4, #2048] ++ str r7, [r4, #2048] ++ bl ndelay ++ bl nandc_wait_flash_ready_no_delay ++ mov r3, #218 ++ mov r0, #50 ++ str r3, [r4, #2056] ++ pop {r4, r5, r6, r7, r8, lr} ++ b ndelay ++.L376: ++ .align 2 ++.L375: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size zftl_flash_enter_slc_mode, .-zftl_flash_enter_slc_mode ++ .align 2 ++ .global zftl_flash_exit_slc_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_flash_exit_slc_mode, %function ++zftl_flash_exit_slc_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L402 ++ ldrb r2, [r3] @ zero_extendqisi2 ++ cmp r2, #0 ++ bxeq lr ++ cmp r2, #1 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r7, [r3, #1044] ++ bne .L380 ++ ldr r3, .L402+4 ++ ldrb r3, [r3, #34] @ zero_extendqisi2 ++ cmp r3, #0 ++ addne r4, r7, r0, lsl #8 ++ bne .L401 ++ pop {r4, r5, r6, r7, r8, pc} ++.L380: ++ cmp r2, #2 ++ mov r4, r0 ++ bne .L382 ++ add r3, r3, r0 ++ ldrb r2, [r3, #1154] @ zero_extendqisi2 ++ cmp r2, #0 ++ popne {r4, r5, r6, r7, r8, pc} ++ ldr r5, .L402+4 ++ ldrb r2, [r5, #16] @ zero_extendqisi2 ++ cmp r2, #2 ++ movne r2, #4 ++ strb r2, [r3, #1154] ++ ldrb r3, [r5, #34] @ zero_extendqisi2 ++ cmp r3, #0 ++ popeq {r4, r5, r6, r7, r8, pc} ++ bl nandc_wait_flash_ready_no_delay ++ ldrb r3, [r5, #34] @ zero_extendqisi2 ++ add r4, r7, r4, lsl #8 ++.L401: ++ str r3, [r4, #2056] ++ pop {r4, r5, r6, r7, r8, pc} ++.L382: ++ cmp r2, #3 ++ popne {r4, r5, r6, r7, r8, pc} ++ add r6, r3, r0 ++ ldrb r3, [r6, #1154] @ zero_extendqisi2 ++ cmp r3, #0 ++ popne {r4, r5, r6, r7, r8, pc} ++ ldr r8, .L402+4 ++ lsl r4, r4, #8 ++ bl nandc_wait_flash_ready_no_delay ++ ldrb r3, [r8, #16] @ zero_extendqisi2 ++ add r5, r7, r4 ++ mov r0, #100 ++ add r4, r7, r4 ++ cmp r3, #2 ++ movne r3, #4 ++ strb r3, [r6, #1154] ++ mov r3, #239 ++ str r3, [r5, #2056] ++ mov r3, #145 ++ str r3, [r5, #2052] ++ bl ndelay ++ ldrb r3, [r8, #11] @ zero_extendqisi2 ++ mov r0, #150 ++ cmp r3, #9 ++ mov r3, #1 ++ ldrbne r2, [r6, #1154] @ zero_extendqisi2 ++ streq r3, [r5, #2048] ++ strne r2, [r5, #2048] ++ str r3, [r5, #2048] ++ mov r3, #0 ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ bl ndelay ++ bl nandc_wait_flash_ready_no_delay ++ mov r3, #223 ++ mov r0, #50 ++ str r3, [r4, #2056] ++ pop {r4, r5, r6, r7, r8, lr} ++ b ndelay ++.L403: ++ .align 2 ++.L402: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size zftl_flash_exit_slc_mode, .-zftl_flash_exit_slc_mode ++ .align 2 ++ .global flash_start_page_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_start_page_read, %function ++flash_start_page_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mvn r2, #0 ++ ldr r4, .L419 ++ mov r7, r0 ++ mov r10, r1 ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ rsb r5, r3, #24 ++ lsr r6, r1, r5 ++ bic r6, r6, r2, lsl r3 ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ uxtb r6, r6 ++ cmp r3, r6 ++ bhi .L405 ++ movw r2, #1013 ++ ldr r1, .L419+4 ++ ldr r0, .L419+8 ++ bl rk_printk ++ bl dump_stack ++.L405: ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ cmp r3, r6 ++ popls {r4, r5, r6, r7, r8, r9, r10, pc} ++ add r6, r4, r6 ++ mvn r3, #0 ++ ldrb r9, [r6, #1144] @ zero_extendqisi2 ++ bic r5, r10, r3, lsl r5 ++ ubfx r10, r10, #24, #2 ++ ldr r6, [r4, #1044] ++ mov r0, r9 ++ bl nandc_cs ++ cmp r10, #0 ++ lsl r8, r9, #8 ++ bne .L407 ++ mov r0, r5 ++ bl slc_phy_page_address_calc ++ ldrb r3, [r4] @ zero_extendqisi2 ++ mov r5, r0 ++ cmp r3, #0 ++ beq .L408 ++ mov r0, r9 ++ bl zftl_flash_enter_slc_mode ++.L408: ++ ldr r3, [r4, #1104] ++ ldrb r2, [r3, #7] @ zero_extendqisi2 ++ cmp r2, #1 ++ bne .L410 ++ ldrb r3, [r3, #12] @ zero_extendqisi2 ++ cmp r3, #2 ++ addeq r3, r6, r8 ++ moveq r2, #38 ++ streq r2, [r3, #2056] ++.L410: ++ add r3, r6, r8 ++ mov r2, #0 ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ uxtb r2, r5 ++ str r2, [r3, #2052] ++ lsr r2, r5, #8 ++ str r2, [r3, #2052] ++ lsr r2, r5, #16 ++ str r2, [r3, #2052] ++ ldrb r2, [r4, #1152] @ zero_extendqisi2 ++ cmp r2, #0 ++ lsrne r5, r5, #24 ++ strne r5, [r3, #2052] ++ add r3, r6, r8 ++ str r7, [r3, #2056] ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L407: ++ ldr r3, [r4, #1104] ++ ldrb r3, [r3, #12] @ zero_extendqisi2 ++ cmp r3, #3 ++ bne .L409 ++ ldrb r3, [r4, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L409 ++ ldrb r3, [r4, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ addeq r3, r6, r8 ++ streq r10, [r3, #2056] ++ beq .L408 ++.L409: ++ mov r0, r9 ++ bl zftl_flash_exit_slc_mode ++ b .L408 ++.L420: ++ .align 2 ++.L419: ++ .word .LANCHOR0 ++ .word .LANCHOR1+239 ++ .word .LC0 ++ .fnend ++ .size flash_start_page_read, .-flash_start_page_read ++ .align 2 ++ .global nandc_wait_flash_ready ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_wait_flash_ready, %function ++nandc_wait_flash_ready: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #12 ++ mov r0, #150 ++ ldr r4, .L427 ++ ldr r5, .L427+4 ++ bl ndelay ++.L423: ++ ldr r3, [r5, #1044] ++ ldr r3, [r3] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #512 ++ bne .L424 ++ mov r0, #10 ++ bl ndelay ++ subs r4, r4, #1 ++ bne .L423 ++ mvn r0, #0 ++.L421: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, pc} ++.L424: ++ mov r0, #0 ++ b .L421 ++.L428: ++ .align 2 ++.L427: ++ .word 100000 ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_wait_flash_ready, .-nandc_wait_flash_ready ++ .align 2 ++ .global sandisk_set_rr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sandisk_set_rr_para, %function ++sandisk_set_rr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov r3, #239 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ str r3, [r0, #8] ++ mov r3, #17 ++ mov r5, r0 ++ mov r4, r1 ++ str r3, [r0, #4] ++ mov r0, #200 ++ bl ndelay ++ ldr r0, .L436 ++ add r4, r4, r4, lsl #2 ++ ldr r1, .L436+4 ++ mov r2, #0 ++ sub ip, r0, #45 ++.L430: ++ ldrb r3, [r1, #1101] @ zero_extendqisi2 ++ cmp r2, r3 ++ bcc .L433 ++ pop {r4, r5, r6, lr} ++ b nandc_wait_flash_ready ++.L433: ++ ldrb r3, [r1, #1100] @ zero_extendqisi2 ++ cmp r3, #67 ++ add r3, r2, r4 ++ addeq r3, ip, r3 ++ addne r3, r0, r3 ++ ldrsb r3, [r3, #5] ++ add r2, r2, #1 ++ str r3, [r5] ++ b .L430 ++.L437: ++ .align 2 ++.L436: ++ .word .LANCHOR1+86 ++ .word .LANCHOR0 ++ .fnend ++ .size sandisk_set_rr_para, .-sandisk_set_rr_para ++ .align 2 ++ .global toshiba_3d_set_tlc_rr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type toshiba_3d_set_tlc_rr_para, %function ++toshiba_3d_set_tlc_rr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ add r1, r1, #1 ++ ldr r5, .L440 ++ rsb r1, r1, r1, lsl #3 ++ mov r6, #0 ++ mov r7, #213 ++ mvn r3, #118 ++ add r5, r5, r1 ++ str r7, [r0, #8] ++ str r6, [r0, #4] ++ mov r4, r0 ++ str r3, [r0, #4] ++ movw r3, #261 ++ ldrsb r3, [r5, r3] ++ str r3, [r0] ++ movw r3, #262 ++ ldrsb r3, [r5, r3] ++ str r3, [r0] ++ movw r3, #263 ++ ldrsb r3, [r5, r3] ++ str r3, [r0] ++ add r3, r5, #264 ++ ldrsb r3, [r3] ++ str r3, [r0] ++ bl nandc_wait_flash_ready ++ mvn r3, #117 ++ str r7, [r4, #8] ++ str r6, [r4, #4] ++ str r3, [r4, #4] ++ movw r3, #265 ++ ldrsb r3, [r5, r3] ++ str r3, [r4] ++ movw r3, #266 ++ ldrsb r3, [r5, r3] ++ str r3, [r4] ++ movw r3, #267 ++ ldrsb r3, [r5, r3] ++ str r3, [r4] ++ str r6, [r4] ++ pop {r4, r5, r6, r7, r8, lr} ++ b nandc_wait_flash_ready ++.L441: ++ .align 2 ++.L440: ++ .word .LANCHOR1 ++ .fnend ++ .size toshiba_3d_set_tlc_rr_para, .-toshiba_3d_set_tlc_rr_para ++ .align 2 ++ .global toshiba_3d_set_slc_rr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type toshiba_3d_set_slc_rr_para, %function ++toshiba_3d_set_slc_rr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, #213 ++ mvn r2, #116 ++ str r3, [r0, #8] ++ mov r3, #0 ++ str r3, [r0, #4] ++ str r2, [r0, #4] ++ ldr r2, .L443 ++ add r1, r2, r1 ++ movw r2, #661 ++ ldrsb r2, [r1, r2] ++ str r2, [r0] ++ str r3, [r0] ++ str r3, [r0] ++ str r3, [r0] ++ b nandc_wait_flash_ready ++.L444: ++ .align 2 ++.L443: ++ .word .LANCHOR1 ++ .fnend ++ .size toshiba_3d_set_slc_rr_para, .-toshiba_3d_set_slc_rr_para ++ .align 2 ++ .global toshiba_tlc_set_rr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type toshiba_tlc_set_rr_para, %function ++toshiba_tlc_set_rr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r2, #0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r3, .L449 ++ mov r6, #239 ++ beq .L446 ++ rsb r5, r1, r1, lsl #3 ++ mov r2, #18 ++ str r6, [r0, #8] ++ mov r4, r0 ++ add r5, r3, r5 ++ str r2, [r0, #4] ++ ldrb r3, [r5, #36] @ zero_extendqisi2 ++ str r3, [r0] ++ ldrb r3, [r5, #37] @ zero_extendqisi2 ++ str r3, [r0] ++ ldrb r3, [r5, #38] @ zero_extendqisi2 ++ str r3, [r0] ++ ldrb r3, [r5, #39] @ zero_extendqisi2 ++ str r3, [r0] ++ bl nandc_wait_flash_ready ++ mov r3, #19 ++ str r6, [r4, #8] ++ str r3, [r4, #4] ++ ldrb r3, [r5, #40] @ zero_extendqisi2 ++ str r3, [r4] ++ ldrb r3, [r5, #41] @ zero_extendqisi2 ++ str r3, [r4] ++ ldrb r3, [r5, #42] @ zero_extendqisi2 ++ str r3, [r4] ++ mov r3, #0 ++ str r3, [r4] ++.L447: ++ pop {r4, r5, r6, lr} ++ b nandc_wait_flash_ready ++.L446: ++ mov ip, #20 ++ add r5, r3, r1 ++ str r6, [r0, #8] ++ str ip, [r0, #4] ++ ldrb r3, [r5, #365] @ zero_extendqisi2 ++ str r3, [r0] ++ str r2, [r0] ++ str r2, [r0] ++ str r2, [r0] ++ b .L447 ++.L450: ++ .align 2 ++.L449: ++ .word .LANCHOR2 ++ .fnend ++ .size toshiba_tlc_set_rr_para, .-toshiba_tlc_set_rr_para ++ .align 2 ++ .global ymtc_3d_set_tlc_rr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ymtc_3d_set_tlc_rr_para, %function ++ymtc_3d_set_tlc_rr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ rsb r1, r1, r1, lsl #3 ++ ldr r5, .L453 ++ mov r7, #239 ++ mov r3, #160 ++ mov r6, #0 ++ str r7, [r0, #8] ++ mov r4, r0 ++ add r5, r5, r1 ++ str r3, [r0, #4] ++ movw r3, #671 ++ ldrsb r3, [r5, r3] ++ str r3, [r0] ++ movw r3, #675 ++ ldrsb r3, [r5, r3] ++ str r3, [r0] ++ str r6, [r0] ++ str r6, [r0] ++ bl nandc_wait_flash_ready ++ mov r3, #161 ++ str r7, [r4, #8] ++ str r3, [r4, #4] ++ add r3, r5, #672 ++ ldrsb r3, [r3] ++ str r3, [r4] ++ movw r3, #674 ++ ldrsb r3, [r5, r3] ++ str r3, [r4] ++ add r3, r5, #676 ++ ldrsb r3, [r3] ++ str r3, [r4] ++ str r6, [r4] ++ bl nandc_wait_flash_ready ++ mov r3, #162 ++ str r7, [r4, #8] ++ str r3, [r4, #4] ++ movw r3, #673 ++ ldrsb r3, [r5, r3] ++ str r3, [r4] ++ movw r3, #677 ++ ldrsb r3, [r5, r3] ++ str r3, [r4] ++ str r6, [r4] ++ str r6, [r4] ++ pop {r4, r5, r6, r7, r8, lr} ++ b nandc_wait_flash_ready ++.L454: ++ .align 2 ++.L453: ++ .word .LANCHOR1 ++ .fnend ++ .size ymtc_3d_set_tlc_rr_para, .-ymtc_3d_set_tlc_rr_para ++ .align 2 ++ .global ymtc_3d_set_slc_rr_para ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ymtc_3d_set_slc_rr_para, %function ++ymtc_3d_set_slc_rr_para: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, #239 ++ str r3, [r0, #8] ++ mov r3, #163 ++ str r3, [r0, #4] ++ ldr r3, .L456 ++ add r1, r3, r1 ++ movw r3, #1028 ++ ldrsb r3, [r1, r3] ++ str r3, [r0] ++ mov r3, #0 ++ str r3, [r0] ++ str r3, [r0] ++ str r3, [r0] ++ b nandc_wait_flash_ready ++.L457: ++ .align 2 ++.L456: ++ .word .LANCHOR1 ++ .fnend ++ .size ymtc_3d_set_slc_rr_para, .-ymtc_3d_set_slc_rr_para ++ .align 2 ++ .global flash_start_plane_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_start_plane_read, %function ++flash_start_plane_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r3, #1 ++ ldr r4, .L487 ++ ubfx r9, r0, #24, #2 ++ ldrb r6, [r4, #1153] @ zero_extendqisi2 ++ rsb r2, r6, #24 ++ lsl r6, r3, r6 ++ lsl r5, r3, r2 ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ sub r6, r6, #1 ++ sub r5, r5, #1 ++ and r6, r6, r0, lsr r2 ++ and r7, r5, r0 ++ and r5, r5, r1 ++ uxtb r6, r6 ++ cmp r3, r6 ++ bhi .L459 ++ movw r2, #1148 ++ ldr r1, .L487+4 ++ ldr r0, .L487+8 ++ bl rk_printk ++ bl dump_stack ++.L459: ++ add r6, r4, r6 ++ ldr r8, [r4, #1044] ++ ldrb r6, [r6, #1144] @ zero_extendqisi2 ++ mov r0, r6 ++ bl nandc_cs ++ cmp r9, #0 ++ lsl r10, r6, #8 ++ bne .L460 ++ mov r0, r7 ++ bl slc_phy_page_address_calc ++ mov r7, r0 ++ mov r0, r5 ++ bl slc_phy_page_address_calc ++ ldrb r3, [r4] @ zero_extendqisi2 ++ mov r5, r0 ++ cmp r3, #0 ++ beq .L461 ++ mov r0, r6 ++ bl zftl_flash_enter_slc_mode ++.L461: ++ ldrb r3, [r4, #1127] @ zero_extendqisi2 ++ uxtb ip, r7 ++ lsr r0, r7, #8 ++ lsr r1, r7, #16 ++ cmp r3, #1 ++ bne .L463 ++ ldrb r3, [r4, #1119] @ zero_extendqisi2 ++ add r6, r8, r10 ++ str r3, [r6, #2056] ++ mov r3, #0 ++ str r3, [r6, #2052] ++ str r3, [r6, #2052] ++ ldrb r3, [r4, #1152] @ zero_extendqisi2 ++ str ip, [r6, #2052] ++ str r0, [r6, #2052] ++ cmp r3, #0 ++ ldrb r3, [r4, #1120] @ zero_extendqisi2 ++ lsrne r7, r7, #24 ++ str r1, [r6, #2052] ++ strne r7, [r6, #2052] ++ add r7, r8, r10 ++ str r3, [r7, #2056] ++ bl nandc_wait_flash_ready ++ ldr r3, [r4, #1104] ++ cmp r9, #0 ++ add r2, r8, r10 ++ add r8, r8, r10 ++ ldrb r3, [r3, #12] @ zero_extendqisi2 ++ sub r3, r3, #3 ++ clz r3, r3 ++ lsr r3, r3, #5 ++ moveq r3, #0 ++ cmp r3, #0 ++ mov r3, #0 ++ strne r9, [r7, #2056] ++ str r3, [r2, #2056] ++ str r3, [r6, #2052] ++ str r3, [r6, #2052] ++ uxtb r3, r5 ++ str r3, [r6, #2052] ++ lsr r3, r5, #8 ++ str r3, [r6, #2052] ++ lsr r3, r5, #16 ++ str r3, [r6, #2052] ++ ldrb r3, [r4, #1152] @ zero_extendqisi2 ++ cmp r3, #0 ++ lsrne r5, r5, #24 ++ strne r5, [r6, #2052] ++.L486: ++ mov r3, #48 ++ str r3, [r8, #2056] ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L460: ++ ldr r3, [r4, #1104] ++ ldrb r3, [r3, #12] @ zero_extendqisi2 ++ cmp r3, #3 ++ bne .L462 ++ ldrb r3, [r4, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L462 ++ ldrb r3, [r4, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ addeq r3, r8, r10 ++ streq r9, [r3, #2056] ++ beq .L461 ++.L462: ++ mov r0, r6 ++ bl zftl_flash_exit_slc_mode ++ b .L461 ++.L463: ++ ldr r2, [r4, #1104] ++ ldrb r3, [r2, #7] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L468 ++ ldrb r3, [r2, #12] @ zero_extendqisi2 ++ cmp r3, #2 ++ addeq r3, r8, r10 ++ moveq lr, #38 ++ streq lr, [r3, #2056] ++.L468: ++ ldrb lr, [r4, #1119] @ zero_extendqisi2 ++ add r3, r8, r10 ++ cmp r9, #0 ++ add r8, r8, r10 ++ str lr, [r3, #2056] ++ str ip, [r3, #2052] ++ str r0, [r3, #2052] ++ str r1, [r3, #2052] ++ ldrb r2, [r2, #12] @ zero_extendqisi2 ++ sub r2, r2, #3 ++ clz r2, r2 ++ lsr r2, r2, #5 ++ moveq r2, #0 ++ cmp r2, #0 ++ ldrb r2, [r4, #1120] @ zero_extendqisi2 ++ strne r9, [r3, #2056] ++ str r2, [r8, #2056] ++ uxtb r2, r5 ++ str r2, [r3, #2052] ++ lsr r2, r5, #8 ++ lsr r5, r5, #16 ++ str r2, [r3, #2052] ++ str r5, [r3, #2052] ++ b .L486 ++.L488: ++ .align 2 ++.L487: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1038 ++ .word .LC0 ++ .fnend ++ .size flash_start_plane_read, .-flash_start_plane_read ++ .align 2 ++ .global flash_set_interface_mode ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_set_interface_mode, %function ++flash_set_interface_mode: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r8, r0 ++ ldr r6, .L528 ++ mov r10, #0 ++ ldr r9, .L528+4 ++ mov r7, r6 ++.L502: ++ ldrb r4, [r9, r10, lsl #3] @ zero_extendqisi2 ++ ldr r5, [r6, #1044] ++ cmp r4, #69 ++ beq .L490 ++ add r3, r4, #119 ++ sub r1, r4, #44 ++ uxtb r2, r3 ++ clz r1, r1 ++ lsr r1, r1, #5 ++ cmp r2, #18 ++ ldrls r3, .L528+8 ++ movhi r3, #1 ++ mvnls r3, r3, lsr r2 ++ and r3, r3, #1 ++ eor r3, r3, #1 ++ orrs r3, r1, r3 ++ beq .L492 ++.L490: ++ cmp r8, #1 ++ ldrb r1, [r7, #1192] @ zero_extendqisi2 ++ bne .L493 ++ tst r1, #1 ++ beq .L492 ++ ldr r3, .L528+12 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L494 ++ ldr r0, .L528+16 ++ bl rk_printk ++.L494: ++ lsl r2, r10, #8 ++ cmp r4, #137 ++ cmpne r4, #44 ++ mov r1, #239 ++ add r3, r5, r2 ++ str r1, [r3, #2056] ++ bne .L495 ++.L527: ++ mov r1, #1 ++ str r1, [r3, #2052] ++ mov r1, #5 ++ b .L525 ++.L495: ++ cmp r4, #155 ++ movne r1, #128 ++ strne r1, [r3, #2052] ++ movne r1, #1 ++ beq .L527 ++.L525: ++ str r1, [r3, #2048] ++ add r5, r5, r2 ++ mov r3, #0 ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++.L492: ++ add r10, r10, #1 ++ cmp r10, #4 ++ bne .L502 ++ bl nandc_wait_flash_ready ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L493: ++ tst r1, #4 ++ beq .L492 ++ ldr r3, .L528+12 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L498 ++ ldr r0, .L528+20 ++ bl rk_printk ++.L498: ++ lsl r2, r10, #8 ++ mov r1, #239 ++ cmp r4, #137 ++ cmpne r4, #44 ++ add r3, r5, r2 ++ str r1, [r3, #2056] ++ moveq r1, #1 ++ moveq r1, #1 ++ movne r1, #0 ++ streq r1, [r3, #2052] ++ moveq r1, #35 ++ beq .L525 ++ cmp r4, #155 ++ moveq r1, #1 ++ movne r0, #128 ++ streq r1, [r3, #2052] ++ moveq r1, #37 ++ strne r0, [r3, #2052] ++ b .L525 ++.L529: ++ .align 2 ++.L528: ++ .word .LANCHOR0 ++ .word .LANCHOR0+1160 ++ .word 294913 ++ .word .LANCHOR2 ++ .word .LC34 ++ .word .LC35 ++ .fnend ++ .size flash_set_interface_mode, .-flash_set_interface_mode ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type mt_auto_read_calibration_config, %function ++mt_auto_read_calibration_config: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r1 ++ mov r6, r0 ++ bl nandc_wait_flash_ready ++ ldr r3, .L532 ++ mov r0, #200 ++ ldr r4, [r3, #1044] ++ mov r3, #239 ++ add r4, r4, r6, lsl #8 ++ str r3, [r4, #2056] ++ mov r3, #150 ++ str r3, [r4, #2052] ++ bl ndelay ++ mov r3, #0 ++ str r5, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ pop {r4, r5, r6, pc} ++.L533: ++ .align 2 ++.L532: ++ .word .LANCHOR0 ++ .fnend ++ .size mt_auto_read_calibration_config, .-mt_auto_read_calibration_config ++ .align 2 ++ .global flash_reset ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_reset, %function ++flash_reset: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L535 ++ ldr r3, [r3, #1044] ++ add r0, r3, r0, lsl #8 ++ mov r3, #255 ++ str r3, [r0, #2056] ++ b nandc_wait_flash_ready ++.L536: ++ .align 2 ++.L535: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_reset, .-flash_reset ++ .align 2 ++ .global flash_read_id ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_read_id, %function ++flash_read_id: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ .pad #16 ++ mov r6, r0 ++ ldr r3, .L540 ++ mov r4, r1 ++ ldr r5, [r3, #1044] ++ bl flash_reset ++ mov r0, r6 ++ bl nandc_cs ++ add r5, r5, r6, lsl #8 ++ mov r3, #144 ++ mov r0, #200 ++ str r3, [r5, #2056] ++ mov r3, #0 ++ str r3, [r5, #2052] ++ bl ndelay ++ ldr r3, [r5, #2048] ++ strb r3, [r4] ++ ldr r3, [r5, #2048] ++ strb r3, [r4, #1] ++ ldr r3, [r5, #2048] ++ strb r3, [r4, #2] ++ ldr r3, [r5, #2048] ++ strb r3, [r4, #3] ++ ldr r3, [r5, #2048] ++ strb r3, [r4, #4] ++ ldr r3, [r5, #2048] ++ strb r3, [r4, #5] ++ ldr r3, [r5, #2048] ++ strb r3, [r4, #6] ++ ldr r3, [r5, #2048] ++ strb r3, [r4, #7] ++ bl nandc_de_cs.constprop.35 ++ ldrb r2, [r4] @ zero_extendqisi2 ++ sub r3, r2, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L537 ++ ldrb r1, [r4, #5] @ zero_extendqisi2 ++ ldrb r3, [r4, #1] @ zero_extendqisi2 ++ ldr r0, .L540+4 ++ str r1, [sp, #12] ++ ldrb r1, [r4, #4] @ zero_extendqisi2 ++ str r1, [sp, #8] ++ ldrb r1, [r4, #3] @ zero_extendqisi2 ++ str r1, [sp, #4] ++ ldrb r1, [r4, #2] @ zero_extendqisi2 ++ str r1, [sp] ++ add r1, r6, #1 ++ bl rk_printk ++.L537: ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, pc} ++.L541: ++ .align 2 ++.L540: ++ .word .LANCHOR0 ++ .word .LC36 ++ .fnend ++ .size flash_read_id, .-flash_read_id ++ .align 2 ++ .global flash_read_spare ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_read_spare, %function ++flash_read_spare: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r2 ++ ldr r3, .L544 ++ ldr r2, .L544+4 ++ ldrb r3, [r3, #13] @ zero_extendqisi2 ++ ldr r4, [r2, #1044] ++ mov r2, #0 ++ lsl r3, r3, #9 ++ add r4, r4, r0, lsl #8 ++ str r2, [r4, #2056] ++ str r3, [r4, #2052] ++ lsr r3, r3, #8 ++ str r3, [r4, #2052] ++ uxtb r3, r1 ++ str r3, [r4, #2052] ++ lsr r3, r1, #8 ++ lsr r1, r1, #16 ++ str r3, [r4, #2052] ++ mov r3, #48 ++ str r1, [r4, #2052] ++ str r3, [r4, #2056] ++ bl nandc_wait_flash_ready ++ ldr r3, [r4, #2048] ++ strb r3, [r5] ++ pop {r4, r5, r6, pc} ++.L545: ++ .align 2 ++.L544: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size flash_read_spare, .-flash_read_spare ++ .align 2 ++ .global flash_read_otp_data ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_read_otp_data, %function ++flash_read_otp_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L550 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ mov r9, r0 ++ lsl r9, r9, #8 ++ mov r6, r1 ++ mov r5, r2 ++ ldr r8, [r3, #1044] ++ mov r10, #144 ++ bl nandc_cs ++ mov r3, #239 ++ mov r0, #50 ++ add r4, r8, r9 ++ mov r7, #0 ++ str r3, [r4, #2056] ++ str r10, [r4, #2052] ++ bl ndelay ++ mov r3, #1 ++ str r3, [r4, #2048] ++ str r7, [r4, #2048] ++ str r7, [r4, #2048] ++ str r7, [r4, #2048] ++ bl nandc_wait_flash_ready ++ mov r3, #238 ++ ldr r0, .L550+4 ++ str r3, [r4, #2056] ++ str r10, [r4, #2052] ++ ldr r2, [r4, #2048] ++ ldr r3, [r4, #2048] ++ ldr r1, [r4, #2048] ++ str r1, [sp] ++ mov r1, r6 ++ bl rk_printk ++ bl nandc_wait_flash_ready ++ uxtb r3, r6 ++ str r7, [r4, #2056] ++ str r7, [r4, #2052] ++ str r7, [r4, #2052] ++ str r3, [r4, #2052] ++ lsr r3, r6, #8 ++ lsr r6, r6, #16 ++ str r3, [r4, #2052] ++ mov r3, #48 ++ str r6, [r4, #2052] ++ str r3, [r4, #2056] ++ bl nandc_wait_flash_ready ++ add r3, r5, #16384 ++ mov r2, r5 ++.L547: ++ ldr r1, [r4, #2048] ++ strb r1, [r2], #1 ++ cmp r2, r3 ++ bne .L547 ++ add r8, r8, r9 ++ mov r3, #239 ++ str r3, [r8, #2056] ++ mov r3, #144 ++ str r3, [r4, #2052] ++ mov r0, #50 ++ bl ndelay ++ mov r3, #0 ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ str r3, [r4, #2048] ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ b nandc_de_cs.constprop.35 ++.L551: ++ .align 2 ++.L550: ++ .word .LANCHOR0 ++ .word .LC37 ++ .fnend ++ .size flash_read_otp_data, .-flash_read_otp_data ++ .align 2 ++ .global sandisk_prog_test_bad_block ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sandisk_prog_test_bad_block, %function ++sandisk_prog_test_bad_block: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ lsl r7, r0, #8 ++ ldr r3, .L568 ++ mov r8, r1 ++ ldr r6, .L568+4 ++ ldr r5, [r3, #1044] ++ ldrb r3, [r6, #33] @ zero_extendqisi2 ++ add r4, r5, r7 ++ cmp r3, #0 ++ addne r2, r5, r7 ++ addeq r3, r5, r7 ++ moveq r2, #162 ++ strne r3, [r2, #2056] ++ streq r2, [r3, #2056] ++ mov r3, #128 ++ str r3, [r4, #2056] ++ mov r3, #0 ++ str r3, [r4, #2052] ++ str r3, [r4, #2052] ++ uxtb r3, r1 ++ str r3, [r4, #2052] ++ lsr r3, r1, #8 ++ str r3, [r4, #2052] ++ lsr r3, r1, #16 ++ str r3, [r4, #2052] ++ mov r3, #16 ++ str r3, [r4, #2056] ++ bl nandc_wait_flash_ready ++ mov r3, #112 ++ mov r0, #200 ++ str r3, [r4, #2056] ++ bl ndelay ++ ldr r2, [r4, #2048] ++ cmp r2, #255 ++ ldreq r2, [r4, #2048] ++ ands r4, r2, #5 ++ beq .L556 ++ ldr r3, [r6] ++ tst r3, #4096 ++ beq .L556 ++ mov r1, r8 ++ ldr r0, .L568+8 ++ bl rk_printk ++.L556: ++ ldrb r3, [r6, #34] @ zero_extendqisi2 ++ mov r0, r4 ++ cmp r3, #0 ++ addne r5, r5, r7 ++ strne r3, [r5, #2056] ++ pop {r4, r5, r6, r7, r8, pc} ++.L569: ++ .align 2 ++.L568: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC38 ++ .fnend ++ .size sandisk_prog_test_bad_block, .-sandisk_prog_test_bad_block ++ .align 2 ++ .global nandc_rdy_status ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_rdy_status, %function ++nandc_rdy_status: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L572 ++ .pad #8 ++ sub sp, sp, #8 ++ ldr r3, [r3, #1044] ++ ldr r3, [r3] ++ str r3, [sp, #4] ++ ldr r0, [sp, #4] ++ ubfx r0, r0, #9, #1 ++ add sp, sp, #8 ++ @ sp needed ++ bx lr ++.L573: ++ .align 2 ++.L572: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_rdy_status, .-nandc_rdy_status ++ .align 2 ++ .global nandc_bch_sel ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_bch_sel, %function ++nandc_bch_sel: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ .pad #8 ++ sub sp, sp, #8 ++ mov r3, #0 ++ str r3, [sp, #4] ++ ldr r2, [sp, #4] ++ orr r2, r2, #1 ++ str r2, [sp, #4] ++ ldr r2, .L586 ++ ldrb r1, [r2, #1028] @ zero_extendqisi2 ++ strb r0, [r2, #1193] ++ cmp r1, #9 ++ bne .L575 ++ ldr r2, [r2, #1044] ++ cmp r0, #70 ++ ldr r1, [sp, #4] ++ str r1, [r2, #16] ++ beq .L576 ++ cmp r0, #60 ++ moveq r3, #3 ++ beq .L576 ++ cmp r0, #40 ++ moveq r3, #2 ++ movne r3, #1 ++.L576: ++ mov r1, #0 ++ str r1, [sp] ++ ldr r1, [sp] ++ bfi r1, r3, #25, #3 ++ str r1, [sp] ++ ldr r3, [sp] ++ orr r3, r3, #1 ++ str r3, [sp] ++ ldr r3, [sp] ++ str r3, [r2, #32] ++.L574: ++ add sp, sp, #8 ++ @ sp needed ++ bx lr ++.L575: ++ ldr r1, [r2, #1044] ++ mov ip, #16 ++ ldr r2, [sp, #4] ++ cmp r0, ip ++ str r2, [r1, #8] ++ str r3, [sp] ++ ldr r2, [sp] ++ bfi r2, ip, #8, #8 ++ str r2, [sp] ++ ldr r2, [sp] ++ bfi r2, r3, #18, #1 ++ str r2, [sp] ++ bne .L578 ++.L585: ++ ldr r2, [sp] ++ bfi r2, r3, #4, #1 ++ str r2, [sp] ++ b .L579 ++.L578: ++ cmp r0, #24 ++ ldreq r3, [sp] ++ orreq r3, r3, #16 ++ streq r3, [sp] ++ beq .L579 ++ ldr r2, [sp] ++ cmp r0, #40 ++ orr r2, r2, #262144 ++ str r2, [sp] ++ ldr r2, [sp] ++ orr r2, r2, #16 ++ str r2, [sp] ++ beq .L585 ++.L579: ++ ldr r3, [sp] ++ orr r3, r3, #1 ++ str r3, [sp] ++ ldr r3, [sp] ++ str r3, [r1, #12] ++ b .L574 ++.L587: ++ .align 2 ++.L586: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_bch_sel, .-nandc_bch_sel ++ .align 2 ++ .global zftl_flash_resume ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_flash_resume, %function ++zftl_flash_resume: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r4, .L599 ++ ldrb r3, [r4, #1028] @ zero_extendqisi2 ++ ldr r2, [r4, #1048] ++ cmp r3, #9 ++ ldr r3, [r4, #1044] ++ str r2, [r3] ++ ldr r2, [r4, #1052] ++ ldr r3, [r4, #1044] ++ str r2, [r3, #4] ++ ldr r2, [r4, #1056] ++ bne .L589 ++ str r2, [r3, #16] ++ ldr r2, [r4, #1060] ++ str r2, [r3, #32] ++ ldr r2, [r4, #1064] ++ str r2, [r3, #80] ++ ldr r2, [r4, #1068] ++ str r2, [r3, #84] ++ ldr r2, [r4, #1072] ++ str r2, [r3, #520] ++ ldr r2, [r4, #1076] ++ str r2, [r3, #8] ++.L591: ++ ldr r6, .L599+4 ++ mov r5, #0 ++ mov r8, #2 ++ sub r7, r6, #6 ++.L590: ++ ldrb r3, [r6, r5, lsl #3] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bhi .L592 ++ uxtb r9, r5 ++ mov r0, r9 ++ bl flash_reset ++ strb r8, [r5, r7] ++ mov r0, r9 ++ bl zftl_flash_enter_slc_mode ++.L592: ++ add r5, r5, #1 ++ cmp r5, #4 ++ bne .L590 ++ ldrb r3, [r4, #1143] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L593 ++ mov r0, #1 ++ bl nandc_set_if_mode ++ mov r0, r5 ++ bl flash_set_interface_mode ++ mov r0, r5 ++ bl nandc_set_if_mode ++ ldrb r0, [r4, #1065] @ zero_extendqisi2 ++ bl nandc_set_ddr_para ++.L593: ++ ldr r3, .L599+8 ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldrb r0, [r3, #24] @ zero_extendqisi2 ++ b nandc_bch_sel ++.L589: ++ str r2, [r3, #8] ++ ldr r2, [r4, #1060] ++ str r2, [r3, #12] ++ ldr r2, [r4, #1064] ++ str r2, [r3, #304] ++ ldr r2, [r4, #1068] ++ str r2, [r3, #308] ++ ldr r2, [r4, #1072] ++ str r2, [r3, #336] ++ ldr r2, [r4, #1076] ++ str r2, [r3, #344] ++ b .L591 ++.L600: ++ .align 2 ++.L599: ++ .word .LANCHOR0 ++ .word .LANCHOR0+1160 ++ .word .LANCHOR2 ++ .fnend ++ .size zftl_flash_resume, .-zftl_flash_resume ++ .align 2 ++ .global rk_nandc_flash_ready ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nandc_flash_ready, %function ++rk_nandc_flash_ready: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r1, #1 ++ b nandc_irq_disable ++ .fnend ++ .size rk_nandc_flash_ready, .-rk_nandc_flash_ready ++ .align 2 ++ .global nandc_iqr_wait_flash_ready ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_iqr_wait_flash_ready, %function ++nandc_iqr_wait_flash_ready: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, .L607 ++ ldr r0, [r4, #1044] ++ bl rk_nandc_rb_irq_flag_init ++ ldrb r3, [r4, #1028] @ zero_extendqisi2 ++ ldr r0, [r4, #1044] ++ cmp r3, #9 ++ ldreq r3, [r0, #292] ++ ldrne r3, [r0, #368] ++ orreq r3, r3, #2 ++ orrne r3, r3, #2 ++ streq r3, [r0, #292] ++ strne r3, [r0, #368] ++ ldreq r3, [r0, #288] ++ ldrne r3, [r0, #364] ++ orreq r3, r3, #2 ++ orrne r3, r3, #2 ++ streq r3, [r0, #288] ++ strne r3, [r0, #364] ++ ldr r3, [r0] ++ tst r3, #512 ++ bne .L605 ++ pop {r4, lr} ++ b wait_for_nand_flash_ready ++.L605: ++ mov r1, #1 ++ pop {r4, lr} ++ b nandc_irq_disable ++.L608: ++ .align 2 ++.L607: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_iqr_wait_flash_ready, .-nandc_iqr_wait_flash_ready ++ .align 2 ++ .global flash_erase_duplane_block ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_erase_duplane_block, %function ++flash_erase_duplane_block: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r3 ++ ldr r7, .L634 ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ ldrb r3, [r7, #1109] @ zero_extendqisi2 ++ cmp r3, r0 ++ bhi .L610 ++ movw r2, #695 ++ ldr r1, .L634+4 ++ ldr r0, .L634+8 ++ bl rk_printk ++ bl dump_stack ++.L610: ++ ldrb r3, [r7, #1109] @ zero_extendqisi2 ++ cmp r3, r4 ++ bls .L619 ++ ldr r3, .L634+12 ++ add r4, r7, r4 ++ ldrb r4, [r4, #1144] @ zero_extendqisi2 ++ ldr r9, [r7, #1044] ++ ldr r3, [r3] ++ add r8, r4, #8 ++ tst r3, #16 ++ add r8, r9, r8, lsl #8 ++ beq .L612 ++ mov r3, r10 ++ mov r2, r6 ++ mov r1, r4 ++ ldr r0, .L634+16 ++ bl rk_printk ++.L612: ++ bl nandc_wait_flash_ready ++ mov r0, r4 ++ bl nandc_cs ++ cmp r5, #0 ++ mov r0, r4 ++ bne .L613 ++ bl zftl_flash_enter_slc_mode ++.L614: ++ lsl r4, r4, #8 ++ mov r3, #96 ++ add r5, r9, r4 ++ str r3, [r5, #2056] ++ uxtb r3, r6 ++ str r3, [r5, #2052] ++ lsr r3, r6, #8 ++ str r3, [r5, #2052] ++ lsr r3, r6, #16 ++ str r3, [r5, #2052] ++ ldrb r3, [r7, #1152] @ zero_extendqisi2 ++ cmp r3, #0 ++ lsrne r3, r6, #24 ++ strne r3, [r5, #2052] ++ ldrb r3, [r7, #1194] @ zero_extendqisi2 ++ cmp r3, #0 ++ movne fp, #0 ++ bne .L616 ++ add r3, r9, r4 ++ mov r2, #208 ++ str r2, [r3, #2056] ++ bl nandc_wait_flash_ready ++ mov r0, r8 ++ bl flash_read_status ++ and fp, r0, #5 ++.L616: ++ mov r2, #96 ++ add r3, r9, r4 ++ str r2, [r3, #2056] ++ uxtb r3, r10 ++ add r0, r9, r4 ++ str r3, [r5, #2052] ++ lsr r3, r10, #8 ++ str r3, [r5, #2052] ++ lsr r3, r10, #16 ++ str r3, [r5, #2052] ++ ldrb r3, [r7, #1152] @ zero_extendqisi2 ++ cmp r3, #0 ++ mov r3, #208 ++ lsrne r2, r10, #24 ++ strne r2, [r5, #2052] ++ str r3, [r0, #2056] ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov r0, r8 ++ bl flash_read_status ++ bl nandc_de_cs.constprop.35 ++ and r3, r0, #5 ++ orrs fp, r3, fp ++ beq .L618 ++ mov r2, r0 ++ mov r1, r6 ++ ldr r0, .L634+20 ++ bl rk_printk ++.L618: ++ mov r0, fp ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L613: ++ bl zftl_flash_exit_slc_mode ++ b .L614 ++.L619: ++ mvn r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L635: ++ .align 2 ++.L634: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1061 ++ .word .LC0 ++ .word .LANCHOR2 ++ .word .LC39 ++ .word .LC40 ++ .fnend ++ .size flash_erase_duplane_block, .-flash_erase_duplane_block ++ .align 2 ++ .global flash_erase_block_en ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_erase_block_en, %function ++flash_erase_block_en: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r0 ++ ldr r5, .L655 ++ mov fp, r1 ++ mov r8, r2 ++ ldrb r6, [r5, #1153] @ zero_extendqisi2 ++ rsb r3, r6, #24 ++ mvn r6, #0 ++ bic r6, r2, r6, lsl r3 ++ ldrb r3, [r5, #1109] @ zero_extendqisi2 ++ cmp r3, r0 ++ bhi .L637 ++ movw r2, #757 ++ ldr r1, .L655+4 ++ ldr r0, .L655+8 ++ bl rk_printk ++ bl dump_stack ++.L637: ++ ldrb r3, [r5, #1109] @ zero_extendqisi2 ++ cmp r3, r7 ++ bls .L644 ++ add r3, r5, r7 ++ ldr r9, [r5, #1044] ++ ldrb r4, [r3, #1144] @ zero_extendqisi2 ++ ldr r3, .L655+12 ++ add r10, r4, #8 ++ ldr r3, [r3] ++ add r10, r9, r10, lsl #8 ++ tst r3, #16 ++ beq .L639 ++ mov r3, fp ++ mov r2, r8 ++ mov r1, r4 ++ ldr r0, .L655+16 ++ bl rk_printk ++.L639: ++ bl nandc_wait_flash_ready ++ mov r0, r4 ++ bl nandc_cs ++ cmp fp, #0 ++ mov r0, r4 ++ bne .L640 ++ bl zftl_flash_enter_slc_mode ++.L641: ++ lsl r4, r4, #8 ++ mov r2, #96 ++ add r3, r9, r4 ++ add r4, r9, r4 ++ str r2, [r3, #2056] ++ uxtb r2, r6 ++ str r2, [r3, #2052] ++ lsr r2, r6, #8 ++ str r2, [r3, #2052] ++ lsr r2, r6, #16 ++ str r2, [r3, #2052] ++ ldrb r2, [r5, #1152] @ zero_extendqisi2 ++ cmp r2, #0 ++ lsrne r6, r6, #24 ++ strne r6, [r3, #2052] ++ mov r3, #208 ++ str r3, [r4, #2056] ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov r0, r10 ++ bl flash_read_status ++ bl nandc_de_cs.constprop.35 ++ ands r4, r0, #5 ++ beq .L643 ++ ldrh r1, [r5, #2] ++ mov r0, r8 ++ bl __aeabi_uidiv ++ mov r3, r4 ++ mvn r4, #0 ++ mov r2, r0 ++ mov r1, r7 ++ ldr r0, .L655+20 ++ bl rk_printk ++.L643: ++ mov r0, r4 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L640: ++ bl zftl_flash_exit_slc_mode ++ b .L641 ++.L644: ++ mvn r0, #0 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L656: ++ .align 2 ++.L655: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1087 ++ .word .LC0 ++ .word .LANCHOR2 ++ .word .LC41 ++ .word .LC42 ++ .fnend ++ .size flash_erase_block_en, .-flash_erase_block_en ++ .align 2 ++ .global flash_erase_block ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_erase_block, %function ++flash_erase_block: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r2, r1 ++ mov r1, #0 ++ b flash_erase_block_en ++ .fnend ++ .size flash_erase_block, .-flash_erase_block ++ .align 2 ++ .global flash_erase_all ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_erase_all, %function ++flash_erase_all: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L664 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r5, #0 ++ ldr r7, .L664+4 ++ ldrb r4, [r3, #17] @ zero_extendqisi2 ++ ldrh r3, [r3, #18] ++ mov r8, r7 ++ smulbb r4, r4, r3 ++ uxth r4, r4 ++.L659: ++ ldrb r2, [r7, #1109] @ zero_extendqisi2 ++ uxth r3, r5 ++ cmp r2, r3 ++ bhi .L662 ++ mov r1, #0 ++ ldr r0, .L664+8 ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ b rk_printk ++.L662: ++ uxtah r3, r7, r5 ++ mov r6, #0 ++ ldrb r9, [r3, #1144] @ zero_extendqisi2 ++.L660: ++ uxth r3, r6 ++ cmp r4, r3 ++ addls r5, r5, #1 ++ bls .L659 ++.L661: ++ ldrh r1, [r8, #2] ++ mov r0, r9 ++ mul r1, r6, r1 ++ add r6, r6, #1 ++ bl flash_erase_block ++ b .L660 ++.L665: ++ .align 2 ++.L664: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC43 ++ .fnend ++ .size flash_erase_all, .-flash_erase_all ++ .align 2 ++ .global rk_nandc_flash_xfer_completed ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nandc_flash_xfer_completed, %function ++rk_nandc_flash_xfer_completed: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r1, #0 ++ b nandc_irq_disable ++ .fnend ++ .size rk_nandc_flash_xfer_completed, .-rk_nandc_flash_xfer_completed ++ .align 2 ++ .global nandc_xfer_start ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_xfer_start, %function ++nandc_xfer_start: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #16 ++ mov r5, r0 ++ ldr r4, .L684 ++ mov r0, r2 ++ and r6, r5, #1 ++ add ip, r1, #1 ++ ldrb r2, [r4, #1028] @ zero_extendqisi2 ++ cmp r2, #9 ++ bne .L668 ++ mov r1, #0 ++ mov lr, #1 ++ str r1, [sp, #4] ++ ubfx ip, ip, #1, #6 ++ ldr r2, [sp, #4] ++ bfi r2, r6, #1, #1 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ orr r2, r2, #8 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ bfi r2, lr, #5, #2 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ orr r2, r2, #536870912 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ orr r2, r2, #1024 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ bfi r2, r1, #4, #1 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ bfi r2, ip, #22, #6 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ orr r2, r2, #128 ++ str r2, [sp, #4] ++ ldrb r2, [r4, #1195] @ zero_extendqisi2 ++ cmp r2, r1 ++ beq .L669 ++ ldrb r2, [r4, #1196] @ zero_extendqisi2 ++ cmp r2, r1 ++ ldrne r2, [sp, #4] ++ orrne r2, r2, #512 ++ strne r2, [sp, #4] ++.L669: ++ ldr r1, [sp, #4] ++ mov r2, r5 ++ str r3, [r4, #1208] ++ str r0, [r4, #1204] ++ ubfx r1, r1, #22, #6 ++ lsl r1, r1, #10 ++ bl rknand_dma_map_single ++ ldr r1, [sp, #4] ++ mov r2, r5 ++ str r0, [r4, #1212] ++ clz r5, r5 ++ ldr r0, [r4, #1208] ++ lsr r5, r5, #5 ++ ubfx r1, r1, #22, #6 ++ lsl r1, r1, #2 ++ bl rknand_dma_map_single ++ mov r3, #1 ++ ldr r2, [r4, #1212] ++ str r3, [r4, #1220] ++ mov r1, #16 ++ ldr r3, [r4, #1044] ++ str r0, [r4, #1216] ++ str r2, [r3, #52] ++ str r0, [r3, #56] ++ ldr r2, [r3, #48] ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ bfi r2, r1, #9, #5 ++ mov r1, #2 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ orr r2, r2, #448 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ bfi r2, r1, #3, #3 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ orr r2, r2, #4 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ bfi r2, r5, #1, #1 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ orr r2, r2, #1 ++ str r2, [sp, #8] ++ movw r2, #1228 ++ ldrh r1, [r4, r2] ++ ldr r2, [sp, #8] ++ bfi r2, r1, #16, #11 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ str r2, [r3, #48] ++ ldr r2, [sp, #4] ++ str r2, [r3, #16] ++ ldr r2, [sp, #4] ++ orr r2, r2, #4 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ str r2, [r3, #16] ++.L667: ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L668: ++ ldr r2, [r4, #1044] ++ mov lr, #16 ++ ubfx ip, ip, #1, #6 ++ ldr r2, [r2, #12] ++ str r2, [sp, #12] ++ ldr r2, [sp, #12] ++ bfi r2, lr, #8, #8 ++ str r2, [sp, #12] ++ ldr r2, [sp, #12] ++ bfc r2, #3, #1 ++ str r2, [sp, #12] ++ ldr r2, [sp, #12] ++ bfc r2, #5, #3 ++ str r2, [sp, #12] ++ mov r2, #0 ++ str r2, [sp, #4] ++ cmp r5, r2 ++ ldr lr, [sp, #4] ++ ldreq r3, [r4, #1200] ++ bfi lr, r6, #1, #1 ++ mov r6, #1 ++ str lr, [sp, #4] ++ ldr lr, [sp, #4] ++ orr lr, lr, #8 ++ str lr, [sp, #4] ++ ldr lr, [sp, #4] ++ bfi lr, r6, #5, #2 ++ str lr, [sp, #4] ++ ldr lr, [sp, #4] ++ orr lr, lr, #536870912 ++ str lr, [sp, #4] ++ ldr lr, [sp, #4] ++ orr lr, lr, #1024 ++ str lr, [sp, #4] ++ ldr lr, [sp, #4] ++ bfi lr, r2, #4, #1 ++ str lr, [sp, #4] ++ ldr lr, [sp, #4] ++ bfi lr, ip, #22, #6 ++ str lr, [sp, #4] ++ streq r6, [r3] ++ beq .L675 ++ ldrb ip, [r4, #1193] @ zero_extendqisi2 ++ lsr r1, r1, #1 ++ cmp ip, #25 ++ mov ip, r2 ++ movcc r6, #64 ++ movcs r6, #128 ++.L673: ++ cmp ip, r1 ++ add r7, r3, ip, lsl #2 ++ add lr, r6, r2 ++ blt .L674 ++.L675: ++ ldr r1, [sp, #4] ++ mov r2, r5 ++ ldr r3, [r4, #1200] ++ str r0, [r4, #1204] ++ ubfx r1, r1, #22, #6 ++ lsl r1, r1, #10 ++ str r3, [r4, #1208] ++ bl rknand_dma_map_single ++ ldr r1, [sp, #4] ++ mov r2, r5 ++ str r0, [r4, #1212] ++ clz r5, r5 ++ ldr r0, [r4, #1208] ++ lsr r5, r5, #5 ++ ubfx r1, r1, #22, #6 ++ lsl r1, r1, #7 ++ bl rknand_dma_map_single ++ mov r3, #1 ++ ldr r2, [r4, #1212] ++ str r3, [r4, #1220] ++ mov r1, #16 ++ ldr r3, [r4, #1044] ++ str r0, [r4, #1216] ++ str r2, [r3, #20] ++ mov r2, #0 ++ str r0, [r3, #24] ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ bfi r2, r1, #9, #5 ++ mov r1, #2 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ orr r2, r2, #448 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ bfi r2, r1, #3, #3 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ orr r2, r2, #4 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ bfi r2, r5, #1, #1 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ orr r2, r2, #1 ++ str r2, [sp, #8] ++ ldr r2, [sp, #8] ++ str r2, [r3, #16] ++ ldr r2, [sp, #12] ++ str r2, [r3, #12] ++ ldr r2, [sp, #4] ++ str r2, [r3, #8] ++ ldr r2, [sp, #4] ++ orr r2, r2, #4 ++ str r2, [sp, #4] ++ ldr r2, [sp, #4] ++ str r2, [r3, #8] ++ b .L667 ++.L674: ++ ldr r8, [r7] @ unaligned ++ bic r2, r2, #3 ++ ldr r7, [r4, #1200] ++ add ip, ip, #1 ++ str r8, [r7, r2] ++ mov r2, lr ++ b .L673 ++.L685: ++ .align 2 ++.L684: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_xfer_start, .-nandc_xfer_start ++ .align 2 ++ .global nandc_set_seed ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_set_seed, %function ++nandc_set_seed: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L693 ++ and r0, r0, #127 ++ lsl r0, r0, #1 ++ ldrh r2, [r3, r0] ++ ldr r3, .L693+4 ++ ldrb r1, [r3, #1196] @ zero_extendqisi2 ++ cmp r1, #0 ++ ldrb r1, [r3, #1028] @ zero_extendqisi2 ++ ldr r3, [r3, #1044] ++ orrne r2, r2, #-1073741824 ++ cmp r1, #9 ++ streq r2, [r3, #520] ++ strne r2, [r3, #336] ++ bx lr ++.L694: ++ .align 2 ++.L693: ++ .word .LANCHOR1+1108 ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_set_seed, .-nandc_set_seed ++ .align 2 ++ .global zftl_flash_de_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_flash_de_init, %function ++zftl_flash_de_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, .L715 ++ bl nandc_wait_flash_ready ++ ldrb r3, [r4] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L696 ++ ldrb r0, [r4, #1110] @ zero_extendqisi2 ++ cmp r0, #0 ++ bne .L696 ++ ldrb r3, [r4, #1028] @ zero_extendqisi2 ++ cmp r3, #9 ++ beq .L696 ++ bl zftl_flash_exit_slc_mode ++.L696: ++ mov r0, #0 ++ bl hynix_reconfig_rr_para ++ ldrb r3, [r4, #1143] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L697 ++ ldrb r3, [r4, #1192] @ zero_extendqisi2 ++ tst r3, #1 ++ beq .L697 ++ mov r0, #1 ++ bl flash_set_interface_mode ++ mov r0, #1 ++ bl nandc_set_if_mode ++ mov r3, #0 ++ strb r3, [r4, #1143] ++.L697: ++ ldrb r3, [r4, #1196] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L698 ++ mov r0, #0 ++ strb r0, [r4, #1196] ++ bl nandc_set_seed ++ mov r3, #1 ++ strb r3, [r4, #1196] ++.L698: ++ mov r0, #0 ++ pop {r4, pc} ++.L716: ++ .align 2 ++.L715: ++ .word .LANCHOR0 ++ .fnend ++ .size zftl_flash_de_init, .-zftl_flash_de_init ++ .align 2 ++ .global nandc_randomizer_enable ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_randomizer_enable, %function ++nandc_randomizer_enable: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L718 ++ strb r0, [r3, #1196] ++ bx lr ++.L719: ++ .align 2 ++.L718: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_randomizer_enable, .-nandc_randomizer_enable ++ .align 2 ++ .global nandc_get_chip_if ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_get_chip_if, %function ++nandc_get_chip_if: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L721 ++ add r0, r0, #8 ++ ldr r3, [r3, #1044] ++ add r0, r3, r0, lsl #8 ++ bx lr ++.L722: ++ .align 2 ++.L721: ++ .word .LANCHOR0 ++ .fnend ++ .size nandc_get_chip_if, .-nandc_get_chip_if ++ .align 2 ++ .global buf_reinit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type buf_reinit, %function ++buf_reinit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L726 ++ mov r3, #0 ++ mov r1, r3 ++.L724: ++ uxtb r0, r3 ++ add r3, r3, #1 ++ cmp r3, #32 ++ strb r1, [r2, #2] ++ add ip, r0, #1 ++ strb r0, [r2, #1] ++ strb ip, [r2] ++ add r2, r2, #48 ++ str r1, [r2, #-40] ++ bne .L724 ++ ldr r2, .L726+4 ++ mvn r0, #0 ++ strb r0, [r2, #2720] ++ strb r1, [r2, #2768] ++ strb r3, [r2, #2769] ++ bx lr ++.L727: ++ .align 2 ++.L726: ++ .word .LANCHOR0+1232 ++ .word .LANCHOR0 ++ .fnend ++ .size buf_reinit, .-buf_reinit ++ .align 2 ++ .global buf_add_tail ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type buf_add_tail, %function ++buf_add_tail: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mvn r3, #0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ strb r3, [r1] ++ mov r4, r1 ++ ldrb r3, [r0] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L729 ++ ldrb r3, [r1, #1] @ zero_extendqisi2 ++ mov r5, r0 ++ cmp r3, #255 ++ bne .L730 ++ mov r2, #74 ++ ldr r1, .L736 ++ ldr r0, .L736+4 ++ bl rk_printk ++ bl dump_stack ++.L730: ++ ldrb r3, [r4, #1] @ zero_extendqisi2 ++ strb r3, [r5] ++ pop {r4, r5, r6, pc} ++.L729: ++ ldr r2, .L736+8 ++ mov r1, #48 ++ mov r6, r2 ++.L734: ++ mov r5, r3 ++ mla r3, r1, r3, r2 ++ ldrb r3, [r3, #1232] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L734 ++ ldrb r3, [r4, #1] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L732 ++ mov r2, #81 ++ ldr r1, .L736 ++ ldr r0, .L736+4 ++ bl rk_printk ++ bl dump_stack ++.L732: ++ mov r3, #48 ++ ldrb r2, [r4, #1] @ zero_extendqisi2 ++ mla r3, r3, r5, r6 ++ strb r2, [r3, #1232] ++ pop {r4, r5, r6, pc} ++.L737: ++ .align 2 ++.L736: ++ .word .LANCHOR1+1364 ++ .word .LC0 ++ .word .LANCHOR0 ++ .fnend ++ .size buf_add_tail, .-buf_add_tail ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type queue_read_cmd, %function ++queue_read_cmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r0 ++ ldr r1, [r0, #24] ++ mov r0, #48 ++ bl flash_start_page_read ++ mov r3, #1 ++ mov r1, r4 ++ strb r3, [r4, #42] ++ mov r3, #0 ++ strb r3, [r4, #43] ++ mvn r3, #0 ++ strb r3, [r4] ++ ldr r0, .L740 ++ pop {r4, lr} ++ b buf_add_tail ++.L741: ++ .align 2 ++.L740: ++ .word .LANCHOR0+2770 ++ .fnend ++ .size queue_read_cmd, .-queue_read_cmd ++ .align 2 ++ .global zbuf_free ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zbuf_free, %function ++zbuf_free: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ ldrb r3, [r0, #2] @ zero_extendqisi2 ++ ldr r4, .L752 ++ and r3, r3, #8 ++ cmp r3, #0 ++ strb r3, [r0, #2] ++ beq .L743 ++ ldr r3, [r0, #20] ++ cmn r3, #1 ++ beq .L743 ++ mov r1, r0 ++ add r0, r4, #2768 ++ bl buf_add_tail ++.L744: ++ ldrb r3, [r4, #2769] @ zero_extendqisi2 ++ add r3, r3, #1 ++ strb r3, [r4, #2769] ++ pop {r4, pc} ++.L743: ++ ldrb r3, [r4, #2768] @ zero_extendqisi2 ++ strb r3, [r0] ++ ldrb r3, [r0, #1] @ zero_extendqisi2 ++ strb r3, [r4, #2768] ++ b .L744 ++.L753: ++ .align 2 ++.L752: ++ .word .LANCHOR0 ++ .fnend ++ .size zbuf_free, .-zbuf_free ++ .align 2 ++ .global buf_alloc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type buf_alloc, %function ++buf_alloc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ ldr r4, .L765 ++ ldrb r3, [r4, #2769] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L755 ++.L758: ++ ldrb ip, [r4, #2768] @ zero_extendqisi2 ++ cmp r5, #0 ++ ldr r3, .L765+4 ++ add r0, ip, ip, lsl #1 ++ mov r2, r3 ++ add r0, r3, r0, lsl #4 ++ beq .L756 ++.L757: ++ mov r1, #48 ++ mul r1, r1, ip ++ add r3, r4, r1 ++ add r2, r2, r1 ++ ldrb ip, [r3, #1232] @ zero_extendqisi2 ++ mov r1, #0 ++ strh r1, [r2, #34] @ movhi ++ str r1, [r3, #1240] ++ strb ip, [r4, #2768] ++ ldrb ip, [r4, #2769] @ zero_extendqisi2 ++ strb r1, [r3, #1272] ++ strb r1, [r3, #1273] ++ sub ip, ip, #1 ++ strb ip, [r4, #2769] ++ mov ip, #1 ++ strb ip, [r3, #1234] ++ mvn ip, #0 ++ strb ip, [r3, #1232] ++ str ip, [r3, #1252] ++ pop {r4, r5, r6, pc} ++.L755: ++ mov r2, #121 ++ ldr r1, .L765+8 ++ ldr r0, .L765+12 ++ bl rk_printk ++ bl dump_stack ++ ldrb r3, [r4, #2769] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L758 ++.L760: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L756: ++ ldrb r3, [r4, #2769] @ zero_extendqisi2 ++ cmp r3, #1 ++ bne .L757 ++ b .L760 ++.L766: ++ .align 2 ++.L765: ++ .word .LANCHOR0 ++ .word .LANCHOR0+1232 ++ .word .LANCHOR1+1377 ++ .word .LC0 ++ .fnend ++ .size buf_alloc, .-buf_alloc ++ .align 2 ++ .global buf_remove_buf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type buf_remove_buf, %function ++buf_remove_buf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldrb ip, [r1, #1] @ zero_extendqisi2 ++ ldrb r3, [r0] @ zero_extendqisi2 ++ cmp ip, r3 ++ bne .L768 ++ ldrb r3, [r1] @ zero_extendqisi2 ++ strb r3, [r0] ++ mov r0, #1 ++ bx lr ++.L771: ++ mov r2, r3 ++ mla r3, lr, r3, r0 ++ ldrb r3, [r3, #1232] @ zero_extendqisi2 ++ cmp ip, r3 ++ bne .L770 ++ mla r2, lr, r2, r0 ++ ldrb r3, [r1] @ zero_extendqisi2 ++ mov r0, #1 ++ strb r3, [r2, #1232] ++ mvn r3, #0 ++ strb r3, [r1] ++ ldr pc, [sp], #4 ++.L768: ++ ldr r0, .L776 ++ str lr, [sp, #-4]! ++ .save {lr} ++ mov lr, #48 ++.L770: ++ cmp r3, #255 ++ bne .L771 ++ mov r0, #0 ++ ldr pc, [sp], #4 ++.L777: ++ .align 2 ++.L776: ++ .word .LANCHOR0 ++ .fnend ++ .size buf_remove_buf, .-buf_remove_buf ++ .align 2 ++ .global buf_remove_free ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type buf_remove_free, %function ++buf_remove_free: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ ldr r4, .L784 ++ ldrb r3, [r4, #2769] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L779 ++ mov r2, #172 ++ ldr r1, .L784+4 ++ ldr r0, .L784+8 ++ bl rk_printk ++ bl dump_stack ++.L779: ++ ldrb r3, [r4, #2769] @ zero_extendqisi2 ++ cmp r3, #0 ++ popeq {r4, r5, r6, pc} ++ mov r1, r5 ++ ldr r0, .L784+12 ++ bl buf_remove_buf ++ cmp r0, #1 ++ ldrbeq r3, [r4, #2769] @ zero_extendqisi2 ++ subeq r3, r3, #1 ++ strbeq r3, [r4, #2769] ++ ldrbeq r3, [r5, #2] @ zero_extendqisi2 ++ orreq r3, r3, #1 ++ strbeq r3, [r5, #2] ++ pop {r4, r5, r6, pc} ++.L785: ++ .align 2 ++.L784: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1387 ++ .word .LC0 ++ .word .LANCHOR0+2768 ++ .fnend ++ .size buf_remove_free, .-buf_remove_free ++ .align 2 ++ .global dump_buf_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type dump_buf_info, %function ++dump_buf_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ .pad #24 ++ sub sp, sp, #24 ++ ldr r5, .L790 ++ ldr r0, .L790+4 ++ ldrb r1, [r5, #2770] @ zero_extendqisi2 ++ add r4, r5, #1232 ++ bl rk_printk ++ ldrb r1, [r5, #2771] @ zero_extendqisi2 ++ add r5, r5, #2768 ++ ldr r0, .L790+8 ++ bl rk_printk ++ ldrb r1, [r5, #4] @ zero_extendqisi2 ++ ldr r0, .L790+12 ++ bl rk_printk ++ ldr r6, .L790+16 ++ ldrb r1, [r5, #5] @ zero_extendqisi2 ++ ldr r0, .L790+20 ++ bl rk_printk ++ ldrb r1, [r5] @ zero_extendqisi2 ++ ldr r0, .L790+24 ++ bl rk_printk ++ ldrb r1, [r5, #1] @ zero_extendqisi2 ++ ldr r0, .L790+28 ++ bl rk_printk ++.L787: ++ ldr r0, [r4, #24] ++ add r4, r4, #48 ++ ldrb r3, [r4, #-46] @ zero_extendqisi2 ++ ldrb r2, [r4, #-48] @ zero_extendqisi2 ++ ldrb r1, [r4, #-47] @ zero_extendqisi2 ++ str r0, [sp, #16] ++ ldr r0, [r4, #-28] ++ str r0, [sp, #12] ++ ldr r0, [r4, #-12] ++ str r0, [sp, #8] ++ ldrb r0, [r4, #-6] @ zero_extendqisi2 ++ str r0, [sp, #4] ++ ldrh r0, [r4, #-14] ++ str r0, [sp] ++ mov r0, r6 ++ bl rk_printk ++ cmp r4, r5 ++ bne .L787 ++ add sp, sp, #24 ++ @ sp needed ++ pop {r4, r5, r6, pc} ++.L791: ++ .align 2 ++.L790: ++ .word .LANCHOR0 ++ .word .LC44 ++ .word .LC45 ++ .word .LC46 ++ .word .LC50 ++ .word .LC47 ++ .word .LC48 ++ .word .LC49 ++ .fnend ++ .size dump_buf_info, .-dump_buf_info ++ .align 2 ++ .global flash_check_bad_block ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_check_bad_block, %function ++flash_check_bad_block: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L793 ++ lsr ip, r1, #5 ++ and r1, r1, #31 ++ ldrb r3, [r2, #17] @ zero_extendqisi2 ++ ldrh r2, [r2, #18] ++ smulbb r3, r3, r2 ++ ldr r2, .L793+4 ++ uxth r3, r3 ++ ldr r2, [r2, #1040] ++ add r3, r3, #31 ++ asr r3, r3, #5 ++ add r2, r2, ip, lsl #2 ++ lsl r3, r3, #2 ++ uxth r3, r3 ++ mla r0, r0, r3, r2 ++ ldr r0, [r0, #912] ++ lsr r0, r0, r1 ++ and r0, r0, #1 ++ bx lr ++.L794: ++ .align 2 ++.L793: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .fnend ++ .size flash_check_bad_block, .-flash_check_bad_block ++ .align 2 ++ .global flash_mask_bad_block ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_mask_bad_block, %function ++flash_mask_bad_block: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L797 ++ mov r2, r1 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ mov r6, r1 ++ mov r1, r0 ++ ldrb r4, [r3, #17] @ zero_extendqisi2 ++ ldrh r3, [r3, #18] ++ ldr r0, .L797+4 ++ smulbb r4, r4, r3 ++ bl rk_printk ++ uxth r4, r4 ++ ldr r3, .L797+8 ++ mov r1, #1 ++ add r0, r4, #31 ++ asr r0, r0, #5 ++ ldr r2, [r3, #1040] ++ lsl r0, r0, #2 ++ uxth r0, r0 ++ mul r0, r5, r0 ++ lsr r5, r6, #5 ++ and r6, r6, #31 ++ add r0, r0, #912 ++ add r0, r0, r5, lsl #2 ++ ldr r3, [r2, r0] ++ orr r6, r3, r1, lsl r6 ++ str r6, [r2, r0] ++ pop {r4, r5, r6, pc} ++.L798: ++ .align 2 ++.L797: ++ .word .LANCHOR2 ++ .word .LC51 ++ .word .LANCHOR0 ++ .fnend ++ .size flash_mask_bad_block, .-flash_mask_bad_block ++ .align 2 ++ .global str2hex ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type str2hex, %function ++str2hex: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldrb r3, [r0] @ zero_extendqisi2 ++ cmp r3, #48 ++ bne .L800 ++ ldrb r3, [r0, #1] @ zero_extendqisi2 ++ and r3, r3, #223 ++ cmp r3, #88 ++ addeq r0, r0, #2 ++.L800: ++ ldrb r3, [r0] @ zero_extendqisi2 ++ and r3, r3, #223 ++ cmp r3, #88 ++ addeq r0, r0, #1 ++ sub r3, r0, #1 ++ mov r0, #0 ++.L802: ++ ldrb r2, [r3, #1]! @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L807 ++ bx lr ++.L807: ++ sub r1, r2, #48 ++ uxtb ip, r1 ++ cmp ip, #9 ++ addls r0, r1, r0, lsl #4 ++ bls .L802 ++ sub r1, r2, #97 ++ cmp r1, #5 ++ subls r2, r2, #87 ++ bls .L809 ++ sub r1, r2, #65 ++ cmp r1, #5 ++ bxhi lr ++ sub r2, r2, #55 ++.L809: ++ add r0, r2, r0, lsl #4 ++ b .L802 ++ .fnend ++ .size str2hex, .-str2hex ++ .align 2 ++ .global zftl_proc_debug_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_proc_debug_init, %function ++zftl_proc_debug_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, lr} ++ .save {lr} ++ .pad #12 ++ mov r2, #0 ++ str r2, [sp] ++ mov r1, #292 ++ ldr r3, .L812 ++ ldr r0, .L812+4 ++ bl proc_create_data ++ add sp, sp, #12 ++ @ sp needed ++ ldr pc, [sp], #4 ++.L813: ++ .align 2 ++.L812: ++ .word .LANCHOR1+1404 ++ .word .LC52 ++ .fnend ++ .size zftl_proc_debug_init, .-zftl_proc_debug_init ++ .align 2 ++ .global ftl_print_info_to_buf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_print_info_to_buf, %function ++ftl_print_info_to_buf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ .pad #16 ++ mov r6, r0 ++ ldr r2, .L816 ++ ldr r1, .L816+4 ++ bl sprintf ++ ldr r1, .L816+8 ++ add r4, r6, r0 ++ ldr r5, .L816+12 ++ ldrb r0, [r1, #10] @ zero_extendqisi2 ++ ldrb r3, [r1, #6] @ zero_extendqisi2 ++ ldrb r2, [r1, #5] @ zero_extendqisi2 ++ str r0, [sp, #12] ++ ldrb r0, [r1, #9] @ zero_extendqisi2 ++ str r0, [sp, #8] ++ ldrb r0, [r1, #8] @ zero_extendqisi2 ++ str r0, [sp, #4] ++ mov r0, r4 ++ ldrb r1, [r1, #7] @ zero_extendqisi2 ++ str r1, [sp] ++ ldr r1, .L816+16 ++ bl sprintf ++ ldr r2, [r5, #1032] ++ add r4, r4, r0 ++ ldr r1, .L816+20 ++ mov r0, r4 ++ lsr r2, r2, #11 ++ bl sprintf ++ ldr r2, [r5, #2776] ++ add r4, r4, r0 ++ ldr r1, .L816+24 ++ mov r0, r4 ++ lsr r2, r2, #11 ++ bl sprintf ++ add r4, r4, r0 ++ ldr r1, .L816+28 ++ mov r0, r4 ++ add r4, r4, #10 ++ bl strcpy ++ ldr r2, [r5, #2780] ++ mov r0, r4 ++ ldr r1, .L816+32 ++ bl sprintf ++ add r4, r4, r0 ++ ldr r2, [r5, #1032] ++ ldr r1, .L816+36 ++ mov r0, r4 ++ bl sprintf ++ ldr r3, [r5, #1096] ++ add r4, r4, r0 ++ ldr r1, .L816+40 ++ mov r0, r4 ++ ldr r2, [r3, #524] ++ bl sprintf ++ ldr r3, [r5, #1096] ++ add r4, r4, r0 ++ ldr r1, .L816+44 ++ mov r0, r4 ++ ldr r2, [r3, #528] ++ bl sprintf ++ add r3, r5, #2784 ++ add r4, r4, r0 ++ ldrh r2, [r3] ++ mov r0, r4 ++ ldr r1, .L816+48 ++ bl sprintf ++ movw r3, #2786 ++ add r4, r4, r0 ++ ldrh r2, [r5, r3] ++ mov r0, r4 ++ ldr r1, .L816+52 ++ bl sprintf ++ movw r3, #2788 ++ add r4, r4, r0 ++ ldrh r2, [r5, r3] ++ mov r0, r4 ++ ldr r1, .L816+56 ++ bl sprintf ++ movw r3, #2790 ++ add r4, r4, r0 ++ ldrh r2, [r5, r3] ++ mov r0, r4 ++ ldr r1, .L816+60 ++ bl sprintf ++ movw r3, #2792 ++ add r4, r4, r0 ++ ldrh r2, [r5, r3] ++ mov r0, r4 ++ ldr r1, .L816+64 ++ bl sprintf ++ movw r3, #2794 ++ add r4, r4, r0 ++ ldrh r2, [r5, r3] ++ mov r0, r4 ++ ldr r1, .L816+68 ++ bl sprintf ++ ldrb r1, [r5, #2797] @ zero_extendqisi2 ++ add r4, r4, r0 ++ ldrb r3, [r5, #2796] @ zero_extendqisi2 ++ mov r0, r4 ++ ldrb r2, [r5, #2769] @ zero_extendqisi2 ++ str r1, [sp] ++ ldr r1, .L816+72 ++ bl sprintf ++ ldr r2, [r5, #2800] ++ add r4, r4, r0 ++ ldr r1, .L816+76 ++ mov r0, r4 ++ ldrh r3, [r2, #146] ++ ldrh r2, [r2, #148] ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ ldr r1, .L816+80 ++ mov r0, r4 ++ ldr r2, [r3, #16] ++ ldr r3, [r3, #20] ++ add r2, r3, r2, lsr #11 ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ ldr r1, .L816+84 ++ mov r0, r4 ++ ldr r2, [r3, #24] ++ ldr r3, [r3, #28] ++ add r2, r3, r2, lsr #11 ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ ldr r1, .L816+88 ++ mov r0, r4 ++ ldr r2, [r3, #64] ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ ldr r1, .L816+92 ++ mov r0, r4 ++ ldr r2, [r3, #68] ++ bl sprintf ++ ldr r3, [r5, #1096] ++ add r4, r4, r0 ++ ldr r1, .L816+96 ++ mov r0, r4 ++ ldr r2, [r3, #12] ++ umull r2, r3, r2, r1 ++ ldr r1, .L816+100 ++ lsr r2, r3, #3 ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ ldrb r2, [r5] @ zero_extendqisi2 ++ mov r0, r4 ++ ldrh r1, [r3, #150] ++ str r1, [sp] ++ ldr r1, .L816+104 ++ ldr r3, [r3, #156] ++ bl sprintf ++ ldr r3, [r5, #1096] ++ add r4, r4, r0 ++ ldr r1, .L816+108 ++ mov r0, r4 ++ ldr r2, [r3, #556] ++ bl sprintf ++ ldr r3, [r5, #1096] ++ add r4, r4, r0 ++ ldr r1, .L816+112 ++ mov r0, r4 ++ ldr r2, [r3, #552] ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ ldr r1, .L816+116 ++ mov r0, r4 ++ ldr r2, [r3, #52] ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ ldr r1, .L816+120 ++ mov r0, r4 ++ ldr r2, [r3, #60] ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ ldr r1, .L816+124 ++ mov r0, r4 ++ ldr r2, [r3, #76] ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ ldr r1, .L816+128 ++ mov r0, r4 ++ ldr r2, [r3, #8] ++ bl sprintf ++ ldr r1, [r5, #1096] ++ add r4, r4, r0 ++ mov r0, r4 ++ ldrh r3, [r1, #22] ++ ldrh r2, [r1, #16] ++ ldrb r1, [r1, #25] @ zero_extendqisi2 ++ str r1, [sp] ++ ldr r1, .L816+132 ++ bl sprintf ++ ldr r1, [r5, #1096] ++ add r4, r4, r0 ++ mov r0, r4 ++ ldrh r3, [r1, #54] ++ ldrh r2, [r1, #48] ++ ldrb r1, [r1, #57] @ zero_extendqisi2 ++ str r1, [sp] ++ ldr r1, .L816+136 ++ bl sprintf ++ ldr r1, [r5, #1096] ++ add r4, r4, r0 ++ mov r0, r4 ++ ldrh r3, [r1, #86] ++ ldrh r2, [r1, #80] ++ ldrb r1, [r1, #89] @ zero_extendqisi2 ++ str r1, [sp] ++ ldr r1, .L816+140 ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ mov r0, r4 ++ ldrh r1, [r3, #96] ++ ldrh r2, [r3, #74] ++ str r1, [sp, #8] ++ ldrh r1, [r3, #92] ++ str r1, [sp, #4] ++ ldrh r1, [r3, #88] ++ str r1, [sp] ++ ldr r1, .L816+144 ++ ldr r3, [r3, #84] ++ bl sprintf ++ ldr r3, [r5, #2800] ++ add r4, r4, r0 ++ mov r0, r4 ++ ldrh r1, [r3, #98] ++ ldrh r2, [r3, #72] ++ str r1, [sp, #8] ++ ldrh r1, [r3, #94] ++ str r1, [sp, #4] ++ ldrh r1, [r3, #90] ++ str r1, [sp] ++ ldr r1, .L816+148 ++ ldr r3, [r3, #80] ++ bl sprintf ++ movw r3, #2804 ++ add r4, r4, r0 ++ ldrh r2, [r5, r3] ++ mov r0, r4 ++ ldr r1, .L816+152 ++ bl sprintf ++ ldr r1, [r5, #2812] ++ add r4, r4, r0 ++ movw r3, #2806 ++ movw r2, #2808 ++ ldrh r3, [r5, r3] ++ mov r0, r4 ++ str r1, [sp, #8] ++ add r1, r5, #2816 ++ ldrh r1, [r1] ++ ldrh r2, [r5, r2] ++ str r1, [sp, #4] ++ movw r1, #2818 ++ ldrh r1, [r5, r1] ++ str r1, [sp] ++ ldr r1, .L816+156 ++ bl sprintf ++ ldr r1, [r5, #1096] ++ add r4, r4, r0 ++ movw r0, #590 ++ movw r3, #586 ++ ldrh r0, [r1, r0] ++ add r2, r1, #584 ++ ldrh r3, [r1, r3] ++ add r1, r1, #588 ++ ldrh r2, [r2] ++ str r0, [sp, #4] ++ mov r0, r4 ++ ldrh r1, [r1] ++ str r1, [sp] ++ ldr r1, .L816+160 ++ bl sprintf ++ ldr r2, [r5, #1096] ++ add r4, r4, r0 ++ ldr r1, .L816+164 ++ mov r0, r4 ++ ldr r3, [r2, #548] ++ str r3, [sp, #8] ++ ldr r3, [r5, #2800] ++ ldr r3, [r3, #44] ++ str r3, [sp, #4] ++ ldr r3, [r2, #544] ++ str r3, [sp] ++ ldr r3, [r2, #540] ++ ldr r2, [r2, #536] ++ bl sprintf ++ add r0, r4, r0 ++ sub r0, r0, r6 ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, pc} ++.L817: ++ .align 2 ++.L816: ++ .word .LC1 ++ .word .LC2 ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC53 ++ .word .LC54 ++ .word .LC55 ++ .word .LC56 ++ .word .LC57 ++ .word .LC58 ++ .word .LC59 ++ .word .LC60 ++ .word .LC61 ++ .word .LC62 ++ .word .LC63 ++ .word .LC64 ++ .word .LC65 ++ .word .LC66 ++ .word .LC67 ++ .word .LC68 ++ .word .LC69 ++ .word .LC70 ++ .word .LC71 ++ .word .LC72 ++ .word -858993459 ++ .word .LC73 ++ .word .LC74 ++ .word .LC75 ++ .word .LC76 ++ .word .LC77 ++ .word .LC78 ++ .word .LC79 ++ .word .LC80 ++ .word .LC81 ++ .word .LC82 ++ .word .LC83 ++ .word .LC84 ++ .word .LC85 ++ .word .LC86 ++ .word .LC87 ++ .word .LC88 ++ .word .LC89 ++ .fnend ++ .size ftl_print_info_to_buf, .-ftl_print_info_to_buf ++ .align 2 ++ .global zftl_proc_ftl_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_proc_ftl_read, %function ++zftl_proc_ftl_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b ftl_print_info_to_buf ++ .fnend ++ .size zftl_proc_ftl_read, .-zftl_proc_ftl_read ++ .align 2 ++ .global ftl_gc_write_buf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_gc_write_buf, %function ++ftl_gc_write_buf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r1, r0 ++ ldrb r3, [r0, #2] @ zero_extendqisi2 ++ ldr r4, .L821 ++ orr r3, r3, #2 ++ strb r3, [r0, #2] ++ add r0, r4, #2816 ++ add r0, r0, #4 ++ bl buf_add_tail ++ ldrb r0, [r4, #2796] @ zero_extendqisi2 ++ add r0, r0, #1 ++ uxtb r0, r0 ++ strb r0, [r4, #2796] ++ pop {r4, pc} ++.L822: ++ .align 2 ++.L821: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_gc_write_buf, .-ftl_gc_write_buf ++ .align 2 ++ .global gc_hook ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_hook, %function ++gc_hook: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size gc_hook, .-gc_hook ++ .align 2 ++ .global vpn_check ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type vpn_check, %function ++vpn_check: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size vpn_check, .-vpn_check ++ .align 2 ++ .global ftl_scan_all_data ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_scan_all_data, %function ++ftl_scan_all_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size ftl_scan_all_data, .-ftl_scan_all_data ++ .align 2 ++ .global gc_add_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_add_sblk, %function ++gc_add_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #16 ++ mov r5, r0 ++ ldr r8, .L862 ++ mov r4, r1 ++ mov r9, r2 ++ ldr r7, .L862+4 ++ ldr r3, [r8] ++ tst r3, #256 ++ beq .L827 ++ movw r3, #2818 ++ ldr r2, [r7, #1092] ++ ldrh r3, [r7, r3] ++ str r3, [sp, #12] ++ ldr r3, .L862+8 ++ ldrh r3, [r3, #52] ++ str r3, [sp, #8] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ mov r2, r1 ++ mov r1, r0 ++ str r3, [sp, #4] ++ ldr r3, [r7, #1084] ++ add r3, r3, r0, lsl #2 ++ ldr r0, .L862+12 ++ ldrb r3, [r3, #2] @ zero_extendqisi2 ++ lsr r3, r3, #5 ++ str r3, [sp] ++ mov r3, r9 ++ bl rk_printk ++.L827: ++ movw r3, #1080 ++ ldrh r3, [r7, r3] ++ cmp r3, r5 ++ bhi .L828 ++ movw r2, #543 ++ ldr r1, .L862+16 ++ ldr r0, .L862+20 ++ bl rk_printk ++ bl dump_stack ++.L828: ++ movw r3, #1080 ++ ldrh r3, [r7, r3] ++ cmp r3, r5 ++ bhi .L829 ++ ldr r0, [r8] ++ ands r0, r0, #1024 ++ beq .L826 ++ mov r3, r9 ++ mov r2, r4 ++ mov r1, r5 ++ ldr r0, .L862+24 ++ bl rk_printk ++.L849: ++ mov r0, #0 ++ b .L826 ++.L829: ++ ldr r2, [r7, #1092] ++ lsl r3, r5, #1 ++ ldrh r3, [r2, r3] ++ ldr r2, [r7, #1084] ++ add r2, r2, r5, lsl #2 ++ ldrb r2, [r2, #2] @ zero_extendqisi2 ++ ands r6, r2, #224 ++ bne .L831 ++ cmp r3, #0 ++ beq .L849 ++ movw r2, #553 ++ ldr r1, .L862+16 ++ ldr r0, .L862+20 ++ bl rk_printk ++ bl dump_stack ++ b .L849 ++.L831: ++ movw r1, #2824 ++ ldrh r1, [r7, r1] ++ cmp r1, r5 ++ beq .L849 ++ ldr r1, [r7, #1096] ++ ldrh r0, [r1, #48] ++ cmp r0, r5 ++ beq .L849 ++ ldrh r0, [r1, #16] ++ cmp r0, r5 ++ beq .L849 ++ ldrh r0, [r1, #80] ++ cmp r0, r5 ++ beq .L849 ++ ldr r0, .L862+8 ++ mov ip, #0 ++ ldrh r10, [r0, #52]! ++.L832: ++ cmp ip, r10 ++ bcc .L833 ++ cmp r4, #0 ++ bne .L837 ++ ldr ip, .L862+28 ++ mov r0, r4 ++ ldrh lr, [ip, #-4] ++ cmp r5, lr ++ beq .L826 ++ sub ip, ip, #2 ++.L836: ++ ldrh r6, [r0, ip] ++ cmp r5, r6 ++ bne .L835 ++ ldr r1, [r8] ++ ands r0, r1, #256 ++ beq .L826 ++ stm sp, {r5, lr} ++ lsr r2, r2, #5 ++ mov r1, r5 ++ ldr r0, .L862+32 ++ bl rk_printk ++ b .L849 ++.L833: ++ ldrh lr, [r0, #2]! ++ cmp lr, r5 ++ beq .L849 ++ add ip, ip, #1 ++ b .L832 ++.L835: ++ add r0, r0, #2 ++ cmp r0, #16 ++ bne .L836 ++ add r1, r1, r9, lsl #7 ++ add r6, r1, #136 ++.L838: ++ ldr r1, [r8] ++ tst r1, #256 ++ beq .L839 ++ movw r1, #2818 ++ stm sp, {r3, r10} ++ ldrh r1, [r7, r1] ++ lsr r3, r2, #5 ++ ldr r0, .L862+36 ++ mov r2, r4 ++ str r1, [sp, #8] ++ mov r1, r5 ++ bl rk_printk ++.L839: ++ mov r3, r6 ++ add r1, r6, #128 ++ movw r0, #65535 ++.L842: ++ mov r2, r3 ++ add r3, r3, #2 ++ ldrh ip, [r2] ++ cmp ip, r0 ++ bne .L840 ++ cmp r4, #0 ++ strh r5, [r2] @ movhi ++ ldreq r3, [r7, #1096] ++ ldrne r2, [r7, #1096] ++ addeq r9, r3, r9, lsl #1 ++ ldrhne r3, [r2, #124] ++ ldrheq r3, [r9, #120] ++ addne r3, r3, #1 ++ strhne r3, [r2, #124] @ movhi ++ addeq r3, r3, #1 ++ strheq r3, [r9, #120] @ movhi ++.L861: ++ mov r0, #1 ++.L826: ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L837: ++ add r6, r1, #392 ++ b .L838 ++.L840: ++ cmp r3, r1 ++ bne .L842 ++ b .L861 ++.L863: ++ .align 2 ++.L862: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR0+2824 ++ .word .LC90 ++ .word .LANCHOR1+1448 ++ .word .LC0 ++ .word .LC91 ++ .word .LANCHOR3-3152 ++ .word .LC92 ++ .word .LC93 ++ .fnend ++ .size gc_add_sblk, .-gc_add_sblk ++ .align 2 ++ .global gc_mark_bad_ppa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_mark_bad_ppa, %function ++gc_mark_bad_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L869 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r8, r0 ++ ldr r5, .L869+4 ++ mov r7, #1 ++ sub r2, r3, #3136 ++ ldrh r2, [r2, #-2] ++ ldrb r1, [r3, #-3136] @ zero_extendqisi2 ++ add r5, r5, #4096 ++ lsr r6, r0, r2 ++ ldrb r0, [r5, #-2943] @ zero_extendqisi2 ++ uxth r4, r6 ++ rsb r0, r0, #24 ++ sub r0, r0, r2 ++ lsl r0, r7, r0 ++ sub r0, r0, #1 ++ and r0, r0, r6 ++ bl __aeabi_uidiv ++ uxth r9, r0 ++ mov r3, r8 ++ mov r2, r4 ++ ldr r1, [r5, #916] ++ ldr r0, .L869+8 ++ bl rk_printk ++ mov r1, r7 ++ mov r2, #0 ++ mov r0, r9 ++ bl gc_add_sblk ++ ldr r3, [r5, #916] ++ mov r1, #0 ++ ldr r0, .L869+12 ++ movw ip, #1096 ++.L865: ++ uxth r2, r1 ++ cmp r3, r2 ++ bhi .L867 ++ cmp r3, #5 ++ bhi .L866 ++ add r2, r3, #1 ++ add r3, r3, #1088 ++ str r2, [r5, #916] ++ add r3, r3, #8 ++ ldr r2, .L869+12 ++ lsl r3, r3, #1 ++ strh r4, [r2, r3] @ movhi ++ b .L866 ++.L867: ++ add r2, r2, ip ++ add r1, r1, #1 ++ lsl r2, r2, #1 ++ ldrh r2, [r0, r2] ++ cmp r4, r2 ++ bne .L865 ++.L866: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L870: ++ .align 2 ++.L869: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LC94 ++ .word .LANCHOR0+2824 ++ .fnend ++ .size gc_mark_bad_ppa, .-gc_mark_bad_ppa ++ .align 2 ++ .global gc_get_src_ppa_from_index ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_get_src_ppa_from_index, %function ++gc_get_src_ppa_from_index: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L872 ++ ldr r3, [r3, #-3132] ++ ldr r0, [r3, r0, lsl #2] ++ bx lr ++.L873: ++ .align 2 ++.L872: ++ .word .LANCHOR3 ++ .fnend ++ .size gc_get_src_ppa_from_index, .-gc_get_src_ppa_from_index ++ .align 2 ++ .global gc_write_completed ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_write_completed, %function ++gc_write_completed: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++.L875: ++ ldr r7, .L902 ++ ldrb fp, [r7, #2772] @ zero_extendqisi2 ++ mov r6, r7 ++ cmp fp, #255 ++ bne .L888 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L888: ++ mov r2, #48 ++ add r10, r6, #1232 ++ mul r2, r2, fp ++ str r10, [sp, #4] ++ add r0, r6, r2 ++ add r2, r10, r2 ++ ldrb r1, [r0, #1232] @ zero_extendqisi2 ++ ldrh r8, [r2, #32] ++ strb r1, [r7, #2772] ++ ldr r1, [r0, #1268] ++ cmp r1, #0 ++ beq .L876 ++ ldr r3, .L902+4 ++ mov r2, #1 ++ strh r2, [r3] @ movhi ++ ldr r2, [r0, #1256] ++ add r0, r6, #4096 ++ str r2, [r0, #912] ++ ldr r0, .L902+8 ++ bl rk_printk ++ mov r2, #956 ++ ldr r1, .L902+12 ++ ldr r0, .L902+16 ++ bl rk_printk ++ bl dump_stack ++.L876: ++ ldr r5, .L902+20 ++ ldrb r2, [r5, #-3128] @ zero_extendqisi2 ++ mov r10, r5 ++ cmp r2, #3 ++ bne .L877 ++ ldrb r2, [r7, #1158] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L877 ++ ldr r2, [r7, #1096] ++ ldrb r4, [r2, #89] @ zero_extendqisi2 ++ ldrb r2, [r5, #-3127] @ zero_extendqisi2 ++ cmp r2, r4 ++ movhi r4, #1 ++ bhi .L878 ++ cmp r4, #2 ++ movcs r4, #2 ++.L878: ++ add r4, r4, r4, lsl #1 ++.L879: ++ mov r2, #48 ++ ldr r1, [r5, #-3124] ++ mla r2, r2, fp, r6 ++ ldrb r1, [r1, r8] @ zero_extendqisi2 ++ mov r9, r8 ++ ldrb r2, [r2, #1233] @ zero_extendqisi2 ++ cmp r1, r2 ++ beq .L880 ++ mov r2, #976 ++ ldr r1, .L902+12 ++ ldr r0, .L902+16 ++ bl rk_printk ++ bl dump_stack ++.L880: ++ mov r2, #48 ++ mla r3, r2, fp, r6 ++ ldrb r3, [r3, #1277] @ zero_extendqisi2 ++ cmp r3, #3 ++ beq .L881 ++ ldrb r3, [r5, #-3128] @ zero_extendqisi2 ++ cmp r3, #3 ++ bne .L881 ++ ldrb r3, [r5, #-3120] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L881 ++ ldrb r3, [r7, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L881 ++ ldrb r3, [r7, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L881 ++ ldrb r3, [r5, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L882 ++ ldrb r3, [r5, #-3125] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L881 ++.L882: ++ ldr r2, [r5, #-3124] ++ mov r3, #0 ++ mov r1, #48 ++ movw r0, #1277 ++ mov ip, r3 ++ add r8, r2, r8 ++.L883: ++ uxth r2, r3 ++ cmp r4, r2 ++ bls .L875 ++ ldrb r2, [r8, r3] @ zero_extendqisi2 ++ add r3, r3, #1 ++ mla r2, r1, r2, r6 ++ strb ip, [r2, r0] ++ b .L883 ++.L877: ++ ldrb r2, [r5, #-3126] @ zero_extendqisi2 ++ cmp r2, #0 ++ moveq r4, #1 ++ beq .L879 ++ ldrb r2, [r5, #-3125] @ zero_extendqisi2 ++ cmp r2, #0 ++ moveq r4, #1 ++ movne r4, #2 ++ b .L879 ++.L881: ++ ldr r3, .L902+24 ++ mvn r5, #0 ++ mov r7, #48 ++ movw fp, #1277 ++ strh r8, [r3] @ movhi ++.L884: ++ sub r2, r9, r8 ++ uxth r2, r2 ++ cmp r4, r2 ++ bls .L875 ++ ldr r2, [r10, #-3124] ++ mov r1, #0 ++ ldr r3, [sp, #4] ++ ldrb r0, [r2, r9] @ zero_extendqisi2 ++ strb r5, [r2, r9] ++ add r9, r9, #1 ++ mla r2, r7, r0, r6 ++ add r0, r0, r0, lsl #1 ++ strb r1, [r2, fp] ++ add r0, r3, r0, lsl #4 ++ bl zbuf_free ++ ldrb r2, [r6, #2831] @ zero_extendqisi2 ++ sub r2, r2, #1 ++ strb r2, [r6, #2831] ++ b .L884 ++.L903: ++ .align 2 ++.L902: ++ .word .LANCHOR0 ++ .word .LANCHOR0+5006 ++ .word .LC95 ++ .word .LANCHOR1+1460 ++ .word .LC0 ++ .word .LANCHOR3 ++ .word .LANCHOR0+4928 ++ .fnend ++ .size gc_write_completed, .-gc_write_completed ++ .align 2 ++ .global gc_get_src_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_get_src_blk, %function ++gc_get_src_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r1, .L916 ++ ldr r3, [r1, #1096] ++ ldrh r2, [r3, #124] ++ cmp r2, #0 ++ addne r3, r3, #392 ++ movne r2, #1 ++ bne .L906 ++ ldr r0, .L916+4 ++ ldrb r0, [r0, #-3119] @ zero_extendqisi2 ++ add ip, r3, r0, lsl #1 ++ ldrh ip, [ip, #120] ++ cmp ip, #0 ++ beq .L911 ++ add r3, r3, r0, lsl #7 ++ add r3, r3, #136 ++.L906: ++ push {r4, lr} ++ .save {r4, lr} ++ add ip, r3, #128 ++ movw lr, #65535 ++.L910: ++ mov r4, r3 ++ ldrh r0, [r3], #2 ++ cmp r0, lr ++ beq .L908 ++ cmp r2, #0 ++ mvn r3, #0 ++ strh r3, [r4] @ movhi ++ ldreq r3, .L916+4 ++ ldrne r2, [r1, #1096] ++ ldrbeq r2, [r3, #-3119] @ zero_extendqisi2 ++ ldreq r3, [r1, #1096] ++ ldrhne r3, [r2, #124] ++ addeq r3, r3, r2, lsl #1 ++ subne r3, r3, #1 ++ strhne r3, [r2, #124] @ movhi ++ ldrheq r2, [r3, #120] ++ subeq r2, r2, #1 ++ strheq r2, [r3, #120] @ movhi ++ pop {r4, pc} ++.L908: ++ cmp r3, ip ++ bne .L910 ++ pop {r4, pc} ++.L911: ++ movw r0, #65535 ++ bx lr ++.L917: ++ .align 2 ++.L916: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .fnend ++ .size gc_get_src_blk, .-gc_get_src_blk ++ .align 2 ++ .global gc_free_temp_buf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_free_temp_buf, %function ++gc_free_temp_buf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r5, .L933 ++ ldrb r0, [r5, #2831] @ zero_extendqisi2 ++ cmp r0, #0 ++ popeq {r4, r5, r6, pc} ++ ldrb r3, [r5, #2769] @ zero_extendqisi2 ++ cmp r3, #1 ++ bhi .L925 ++ ldr r2, .L933+4 ++ add r3, r5, #4928 ++ ldrh r4, [r3] ++ movw ip, #1277 ++ sub r3, r2, #3104 ++ mov r6, r2 ++ ldrh r0, [r3, #-14] ++ add r1, r4, #24 ++ ldrb r3, [r2, #-3127] @ zero_extendqisi2 ++ mul r3, r3, r0 ++ cmp r3, r1 ++ movcs r3, r1 ++ ldr r1, [r2, #-3124] ++ mov r2, #48 ++.L920: ++ cmp r4, r3 ++ bcc .L923 ++.L925: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L923: ++ ldrb r0, [r1, r4] @ zero_extendqisi2 ++ cmp r0, #255 ++ beq .L921 ++ mla lr, r2, r0, r5 ++ ldrb lr, [lr, ip] @ zero_extendqisi2 ++ cmp lr, #0 ++ bne .L921 ++ ldr r3, .L933+8 ++ add r0, r0, r0, lsl #1 ++ add r0, r3, r0, lsl #4 ++ bl zbuf_free ++ ldr r3, .L933+12 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L922 ++ ldr r3, [r6, #-3124] ++ mov r1, r4 ++ ldr r0, .L933+16 ++ ldrb r2, [r3, r4] @ zero_extendqisi2 ++ bl rk_printk ++.L922: ++ ldr r3, [r6, #-3124] ++ mvn r2, #0 ++ mov r0, #1 ++ strb r2, [r3, r4] ++ ldrb r3, [r5, #2831] @ zero_extendqisi2 ++ add r3, r3, r2 ++ strb r3, [r5, #2831] ++ pop {r4, r5, r6, pc} ++.L921: ++ add r4, r4, #1 ++ b .L920 ++.L934: ++ .align 2 ++.L933: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR0+1232 ++ .word .LANCHOR2 ++ .word .LC96 ++ .fnend ++ .size gc_free_temp_buf, .-gc_free_temp_buf ++ .align 2 ++ .global get_ink_scaned_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type get_ink_scaned_blk, %function ++get_ink_scaned_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r1, .L938 ++ movw ip, #2108 ++ ldrh r3, [r1, ip] ++ cmp r3, #0 ++ addne r2, r3, #1040 ++ subne r3, r3, #1 ++ addne r2, r2, #11 ++ strhne r3, [r1, ip] @ movhi ++ addne r2, r1, r2, lsl #1 ++ ldrhne r0, [r2, #6] ++ movweq r0, #65535 ++ bx lr ++.L939: ++ .align 2 ++.L938: ++ .word .LANCHOR0+2824 ++ .fnend ++ .size get_ink_scaned_blk, .-get_ink_scaned_blk ++ .align 2 ++ .global print_gc_debug_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type print_gc_debug_info, %function ++print_gc_debug_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, lr} ++ .save {lr} ++ .pad #20 ++ movw ip, #2804 ++ ldr r0, .L942 ++ movw r1, #2824 ++ movw r3, #2102 ++ ldrh ip, [r0, ip] ++ add r2, r0, r1 ++ ldrh r3, [r2, r3] ++ ldrh r1, [r0, r1] ++ ldrh r2, [r2, #2] ++ str ip, [sp, #8] ++ ldrb ip, [r0, #2831] @ zero_extendqisi2 ++ str ip, [sp, #4] ++ ldrb r0, [r0, #2769] @ zero_extendqisi2 ++ str r0, [sp] ++ ldr r0, .L942+4 ++ bl rk_printk ++ add sp, sp, #20 ++ @ sp needed ++ ldr pc, [sp], #4 ++.L943: ++ .align 2 ++.L942: ++ .word .LANCHOR0 ++ .word .LC97 ++ .fnend ++ .size print_gc_debug_info, .-print_gc_debug_info ++ .align 2 ++ .global _list_pop_index_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type _list_pop_index_node, %function ++_list_pop_index_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r5, [r0] ++ cmp r5, #0 ++ beq .L950 ++ ldr r3, .L952 ++ movw ip, #65535 ++ mov lr, #6 ++ ldr r4, [r3, #1036] ++.L946: ++ cmp r1, #0 ++ bne .L947 ++.L949: ++ sub r4, r5, r4 ++ asr r3, r4, #1 ++ ldr r4, .L952+4 ++ mul r4, r4, r3 ++ uxth r1, r4 ++ bl _list_remove_node ++ mvn r3, #0 ++ uxth r0, r4 ++ strh r3, [r5] @ movhi ++ strh r3, [r5, #2] @ movhi ++ pop {r4, r5, r6, pc} ++.L947: ++ ldrh r3, [r5] ++ cmp r3, ip ++ beq .L949 ++ sub r1, r1, #1 ++ mla r5, lr, r3, r4 ++ uxth r1, r1 ++ b .L946 ++.L950: ++ movw r0, #65535 ++ pop {r4, r5, r6, pc} ++.L953: ++ .align 2 ++.L952: ++ .word .LANCHOR0 ++ .word -1431655765 ++ .fnend ++ .size _list_pop_index_node, .-_list_pop_index_node ++ .align 2 ++ .global _list_get_gc_head_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type _list_get_gc_head_node, %function ++_list_get_gc_head_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r0, [r0] ++ cmp r0, #0 ++ beq .L959 ++ ldr r3, .L961 ++ movw r2, #65535 ++ mov ip, #6 ++ ldr r3, [r3, #1036] ++.L956: ++ cmp r1, #0 ++ beq .L957 ++ ldrh r0, [r0] ++ cmp r0, r2 ++ bne .L958 ++ bx lr ++.L958: ++ sub r1, r1, #1 ++ mla r0, ip, r0, r3 ++ uxth r1, r1 ++ b .L956 ++.L959: ++ movw r0, #65535 ++ bx lr ++.L957: ++ sub r0, r0, r3 ++ asr r3, r0, #1 ++ ldr r0, .L961+4 ++ mul r0, r0, r3 ++ uxth r0, r0 ++ bx lr ++.L962: ++ .align 2 ++.L961: ++ .word .LANCHOR0 ++ .word -1431655765 ++ .fnend ++ .size _list_get_gc_head_node, .-_list_get_gc_head_node ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_get_gc_node.part.10, %function ++zftl_get_gc_node.part.10: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r1, r0 ++ ldr r0, .L964 ++ b _list_get_gc_head_node ++.L965: ++ .align 2 ++.L964: ++ .word .LANCHOR3-3116 ++ .fnend ++ .size zftl_get_gc_node.part.10, .-zftl_get_gc_node.part.10 ++ .align 2 ++ .global gc_search_src_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_search_src_blk, %function ++gc_search_src_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 32 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r5, .L1086 ++ str r1, [sp, #24] ++ ldr r1, [r5, #1096] ++ str r0, [sp, #16] ++ str r2, [sp, #12] ++ add r3, r1, r0, lsl #1 ++ ldrh r3, [r3, #120] ++ cmp r3, #0 ++ str r3, [sp, #20] ++ movne r0, r3 ++ bne .L966 ++ ldr r3, .L1086+4 ++ ldrh r2, [r3, #52] ++ cmp r2, #1 ++ ldrls r0, .L1086+8 ++ ldrhls ip, [sp, #20] ++ strhls ip, [r0, #-8] @ movhi ++ strhls ip, [r0, #-6] @ movhi ++ strhls ip, [r0, #-4] @ movhi ++ ldr r0, [sp, #16] ++ cmp r0, #0 ++ bne .L970 ++ ldr r10, .L1086+12 ++ mov r7, r0 ++ ldr fp, .L1086+16 ++ mov r4, r0 ++.L971: ++ ldr r3, [sp, #12] ++ add r8, r3, #1 ++ uxth r3, r7 ++ cmp r3, r8 ++ bge .L976 ++ ldr r3, .L1086+20 ++ mov r0, r3 ++ str r3, [sp, #20] ++ ldrh r9, [r0], #6 ++ mov r1, r9 ++ bl _list_get_gc_head_node ++ add r2, r9, #1 ++ ldr r3, [sp, #20] ++ movw r1, #65535 ++ uxth r2, r2 ++ cmp r0, r1 ++ mov r6, r0 ++ strh r2, [r3] @ movhi ++ beq .L972 ++ ldr r3, [r10] ++ lsl r9, r0, #1 ++ tst r3, #256 ++ beq .L973 ++ ldr r3, [r5, #1092] ++ mov r1, r0 ++ mov r0, fp ++ ldrh r3, [r3, r9] ++ bl rk_printk ++.L973: ++ ldr r3, [r5, #1092] ++ ldrh r2, [r3, r9] ++ ldr r3, .L1086+24 ++ ldrh r3, [r3] ++ cmp r2, r3 ++ bcs .L974 ++ mov r2, #0 ++ mov r0, r6 ++ mov r1, r2 ++ bl gc_add_sblk ++ cmp r0, #0 ++ beq .L975 ++ add r4, r4, #1 ++ ldr r3, [sp, #12] ++ uxth r4, r4 ++ cmp r4, r3 ++ bcc .L975 ++.L976: ++ ldr r3, [sp, #24] ++ tst r3, #2 ++ beq .L978 ++ movw r3, #2794 ++ ldrh r3, [r5, r3] ++ cmp r3, #32 ++ bls .L978 ++ ldr r9, .L1086+28 ++ mov fp, #0 ++ ldr r6, .L1086+32 ++ sub r10, r9, #12 ++.L979: ++ uxth r3, fp ++ cmp r8, r3 ++ ble .L983 ++ ldr r7, .L1086+36 ++ mov r0, r10 ++ ldrh r3, [r7] ++ mov r1, r3 ++ str r3, [sp, #20] ++ bl _list_get_gc_head_node ++ ldr r3, [sp, #20] ++ add r3, r3, #1 ++ strh r3, [r7] @ movhi ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L980 ++ ldr r3, [r5, #1092] ++ lsl r2, r0, #1 ++ ldrh r2, [r3, r2] ++ ldrh r3, [r6] ++ cmp r2, r3 ++ bcs .L980 ++ mov r2, #0 ++ mov r1, r2 ++ bl gc_add_sblk ++ cmp r0, #0 ++ beq .L982 ++ add r4, r4, #1 ++ ldr r3, [sp, #12] ++ uxth r4, r4 ++ cmp r4, r3 ++ bcc .L982 ++.L983: ++ ldr r3, [sp, #12] ++ cmp r4, r3 ++ bcs .L985 ++ ldr r0, .L1086+40 ++ ldrh r1, [r9, #-8] ++ ldrh r2, [r6] ++ sub r3, r0, #3104 ++ ldrh ip, [r3, #-14] ++ ldrb r3, [r0, #-3127] @ zero_extendqisi2 ++ mul r3, r3, ip ++ sub r3, r3, r1, lsr #2 ++ cmp r2, r3 ++ addlt r2, r2, r1, lsr #3 ++ strhlt r2, [r6] @ movhi ++.L978: ++ ldr r3, [sp, #24] ++ tst r3, #1 ++ beq .L986 ++ ldrh r6, [sp, #12] ++ cmp r4, r6 ++ bcs .L986 ++ mov r9, #0 ++ movw r8, #65535 ++.L991: ++ ldr r10, .L1086+44 ++ ldrh r7, [r10] ++ mov r0, r7 ++ add r7, r7, #1 ++ bl zftl_get_gc_node.part.10 ++ cmp r0, r8 ++ strh r7, [r10] @ movhi ++ beq .L987 ++ mov r2, #0 ++ mov r1, r2 ++ bl gc_add_sblk ++ cmp r0, #0 ++ beq .L988 ++ add r4, r4, #1 ++ uxth r4, r4 ++ cmp r6, r4 ++ bhi .L988 ++.L989: ++ ldr r3, .L1086+28 ++ movw r2, #2818 ++ ldrh r1, [r3, #-8] ++.L1085: ++ ldrh r3, [r5, r2] ++ cmp r3, r1, lsr #1 ++ bls .L986 ++ sub r3, r3, r1, lsr #3 ++.L1082: ++ strh r3, [r5, r2] @ movhi ++ b .L986 ++.L974: ++ ldr r3, .L1086+8 ++ mov r2, #0 ++ strh r2, [r3, #-6] @ movhi ++ b .L976 ++.L972: ++ mov r2, #0 ++ strh r2, [r3] @ movhi ++ b .L976 ++.L975: ++ add r7, r7, #1 ++ b .L971 ++.L980: ++ mov r3, #0 ++ strh r3, [r7] @ movhi ++ b .L983 ++.L982: ++ add fp, fp, #1 ++ b .L979 ++.L985: ++ ldrh r3, [r6] ++ ldrh r2, [r9, #-8] ++ cmp r3, r2 ++ subhi r3, r3, r2, lsr #3 ++ strhhi r3, [r6] @ movhi ++ b .L978 ++.L987: ++ mov r3, #0 ++ strh r3, [r10] @ movhi ++.L990: ++ cmp r4, r6 ++ bcs .L989 ++ ldr r1, .L1086+28 ++ movw r2, #2818 ++ ldrh r3, [r5, r2] ++ ldrh r1, [r1, #-8] ++ cmp r3, r1 ++ addcc r3, r3, r1, lsr #3 ++ bcc .L1082 ++.L986: ++ ldr r3, .L1086+12 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L1021 ++ ldr r3, [sp, #12] ++ ldr r2, [sp, #24] ++ ldr r1, [sp, #16] ++ str r3, [sp] ++ mov r3, r4 ++ ldr r0, .L1086+48 ++ bl rk_printk ++.L1021: ++ mov r0, r4 ++.L966: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L988: ++ add r9, r9, #1 ++ uxth r3, r9 ++ cmp r6, r3 ++ bhi .L991 ++ b .L990 ++.L970: ++ ldr r4, .L1086+40 ++ ldrb r7, [r4, #-3127] @ zero_extendqisi2 ++ sub r4, r4, #3104 ++ ldrh r0, [r4, #-14] ++ smulbb r7, r7, r0 ++ ldr r0, [sp, #12] ++ cmp r0, #1 ++ uxth r7, r7 ++ bne .L992 ++ cmp r2, #0 ++ beq .L992 ++ ldrh r0, [r1, #80] ++ movw r1, #65535 ++ cmp r0, r1 ++ movwne r1, #2102 ++ ldrhne r1, [r3, r1] ++ subne r7, r7, r1 ++ mov r1, #8 ++ uxthne r7, r7 ++ str r1, [sp, #12] ++.L992: ++ mov r6, #0 ++ movw r1, #2180 ++ strh r6, [r3, r1] @ movhi ++ ldr r3, [sp, #24] ++ ldr r1, .L1086+28 ++ ands r3, r3, #1 ++ strh r6, [r1, #-6] @ movhi ++ mov r8, r1 ++ str r3, [sp, #28] ++ ldreq r6, [sp, #28] ++ moveq r4, r6 ++ beq .L993 ++ movw r3, #2790 ++ ldrh r1, [r1, #-4] ++ ldrh r3, [r5, r3] ++ cmp r3, r1, lsr #2 ++ bhi .L994 ++ movw r1, #2792 ++ ldrh r1, [r5, r1] ++ cmp r1, r3 ++ movcs r4, r6 ++ bcs .L995 ++.L994: ++ cmp r2, #1 ++ bls .L996 ++.L998: ++ mov r4, #0 ++.L997: ++ ldr r9, .L1086+52 ++ mov r6, #0 ++ mov r8, #64 ++ movw fp, #65535 ++.L1001: ++ ldr r2, .L1086+44 ++ ldrh r3, [r2] ++ str r2, [sp, #36] ++ mov r0, r3 ++ str r3, [sp, #32] ++ bl zftl_get_gc_node.part.10 ++ cmp r0, fp ++ mov r10, r0 ++ ldr r2, [sp, #36] ++ beq .L999 ++ ldr r3, [sp, #32] ++ mov r1, #0 ++ add r3, r3, #1 ++ strh r3, [r2] @ movhi ++ ldr r2, [sp, #16] ++ bl gc_add_sblk ++ cmp r0, #0 ++ beq .L1000 ++ ldr r3, [r5, #1092] ++ lsl r10, r10, #1 ++ add r4, r4, #1 ++ ldr r2, [sp, #12] ++ uxth r4, r4 ++ ldrh r3, [r3, r10] ++ add r6, r6, r3 ++ uxth r6, r6 ++ cmp r7, r6 ++ movcs r3, #0 ++ movcc r3, #1 ++ cmp r4, r2 ++ orrcs r3, r3, #1 ++ cmp r3, #0 ++ bne .L995 ++ ldr r2, .L1086+56 ++ ldrh r3, [r9] ++ ldrh r2, [r2] ++ cmp r3, r2, lsl #1 ++ ble .L1000 ++.L995: ++ movw r3, #2792 ++ ldrh r2, [r5, r3] ++ ldr r3, .L1086+28 ++ ldrh r3, [r3, #-4] ++ cmp r2, r3, lsr #2 ++ bhi .L1022 ++ movw r3, #2790 ++ ldrh r3, [r5, r3] ++ add r3, r3, #8 ++ cmp r2, r3 ++ ble .L993 ++.L1022: ++ cmp r7, r6 ++ bls .L993 ++ ldrh r3, [sp, #16] ++ mov r8, #64 ++ str r3, [sp, #32] ++.L1004: ++ ldr fp, .L1086+20 ++ mov r0, fp ++ ldrh r9, [r0], #6 ++ mov r1, r9 ++ bl _list_get_gc_head_node ++ movw r3, #65535 ++ mov r10, r0 ++ cmp r0, r3 ++ beq .L1002 ++ add r9, r9, #1 ++ ldr r2, [sp, #32] ++ mov r1, #0 ++ strh r9, [fp] @ movhi ++ bl gc_add_sblk ++ cmp r0, #0 ++ beq .L1003 ++ ldr r3, [r5, #1092] ++ lsl r10, r10, #1 ++ add r4, r4, #1 ++ ldr r2, [sp, #12] ++ uxth r4, r4 ++ ldrh r3, [r3, r10] ++ add r6, r6, r3 ++ uxth r6, r6 ++ cmp r7, r6 ++ movcs r3, #0 ++ movcc r3, #1 ++ cmp r4, r2 ++ orrcs r3, r3, #1 ++ cmp r3, #0 ++ beq .L1003 ++.L993: ++ ldr r3, [sp, #24] ++ tst r3, #2 ++ beq .L1005 ++ movw r3, #2794 ++ ldrh r3, [r5, r3] ++ cmp r3, #32 ++ movls r3, #0 ++ movhi r3, #1 ++ cmp r6, r7 ++ movcs r3, #0 ++ cmp r3, #0 ++ beq .L1005 ++ ldr r10, .L1086+40 ++ mov r5, #64 ++ sub fp, r10, #3088 ++ sub r3, fp, #12 ++ str r3, [sp, #32] ++.L1011: ++ ldr r8, .L1086+8 ++ ldr r0, [sp, #32] ++ ldrh r9, [r8, #-4] ++ sub r2, r8, #4 ++ str r2, [sp, #36] ++ mov r1, r9 ++ bl _list_get_gc_head_node ++ movw r3, #65535 ++ ldr r2, [sp, #36] ++ cmp r0, r3 ++ beq .L1006 ++ ldr r3, [sp, #12] ++ add r9, r9, #1 ++ strh r9, [r8, #-4] @ movhi ++ cmp r3, #1 ++ bne .L1007 ++ ldrh r2, [r8, #-14] ++ ldrb r3, [r10, #-3127] @ zero_extendqisi2 ++ smulbb r3, r3, r2 ++ ldrh r2, [fp, #-8] ++ sub r3, r3, r2, lsr #3 ++ ldr r2, .L1086+60 ++ strh r3, [r2] @ movhi ++.L1007: ++ ldr r9, .L1086 ++ lsl r8, r0, #1 ++ ldr r3, [r9, #1092] ++ ldrh r2, [r3, r8] ++ ldr r3, .L1086+60 ++ ldrh r3, [r3] ++ cmp r2, r3 ++ bcs .L1008 ++ ldr r2, [sp, #16] ++ mov r1, #0 ++ bl gc_add_sblk ++ cmp r0, #0 ++ beq .L1009 ++ ldr r3, [sp, #20] ++ add r4, r4, #1 ++ ldr r2, [sp, #12] ++ uxth r4, r4 ++ add r0, r3, #1 ++ uxth r3, r0 ++ str r3, [sp, #20] ++ ldr r3, [r9, #1092] ++ ldrh r3, [r3, r8] ++ add r6, r6, r3 ++ uxth r6, r6 ++ cmp r7, r6 ++ movcs r3, #0 ++ movcc r3, #1 ++ cmp r4, r2 ++ orrcs r3, r3, #1 ++ cmp r3, #0 ++ beq .L1009 ++.L1010: ++ ldr r3, [sp, #12] ++ ldr r0, .L1086+28 ++ ldr r2, .L1086 ++ cmp r4, r3 ++ add lr, r0, #3088 ++ bcc .L1012 ++ ldr r3, [sp, #20] ++ cmp r3, #0 ++ bne .L1013 ++ movw r3, #2794 ++ ldrh r1, [r2, r3] ++ ldrh r3, [r0, #-2] ++ cmp r1, r3 ++ bls .L1013 ++.L1012: ++ ldr r3, .L1086+8 ++ movw ip, #2808 ++ ldrh r0, [r0, #-8] ++ ldrh r1, [r2, ip] ++ ldrh r5, [r3, #-14] ++ ldrb r3, [lr, #-3127] @ zero_extendqisi2 ++ lsr r0, r0, #3 ++ mul r3, r3, r5 ++ sub r3, r3, r0 ++ cmp r1, r3 ++ addlt r1, r1, r0 ++ strhlt r1, [r2, ip] @ movhi ++.L1005: ++ ldr r3, [sp, #28] ++ cmp r3, #0 ++ beq .L986 ++ ldrh r9, [sp, #12] ++ cmp r6, r7 ++ cmpcc r4, r9 ++ bcs .L986 ++ ldr r5, .L1086 ++ mov r8, #64 ++.L1019: ++ ldr fp, .L1086+20 ++ mov r0, fp ++ ldrh r10, [r0], #6 ++ mov r1, r10 ++ bl _list_get_gc_head_node ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L1015 ++ add r10, r10, #1 ++ ldr r2, [r5, #1092] ++ ldr r3, .L1086+64 ++ strh r10, [fp] @ movhi ++ lsl r10, r0, #1 ++ ldrh r1, [r2, r10] ++ ldrh r2, [r3] ++ cmp r1, r2 ++ bcs .L1016 ++ ldrh r2, [fp, #18] ++ ldrh r3, [r3, #-14] ++ cmp r3, r2, lsr #1 ++ bls .L1017 ++.L1016: ++ ldr r2, [sp, #16] ++ mov r1, #0 ++ bl gc_add_sblk ++ cmp r0, #0 ++ beq .L1018 ++ ldr r3, [r5, #1092] ++ add r4, r4, #1 ++ uxth r4, r4 ++ ldrh r3, [r3, r10] ++ add r6, r6, r3 ++ uxth r6, r6 ++ cmp r7, r6 ++ cmpcs r9, r4 ++ bhi .L1018 ++.L1017: ++ ldr r3, .L1086+28 ++ cmp r4, r9 ++ movw r2, #2806 ++ ldrhcc r1, [r3, #-8] ++ bcc .L1085 ++ ldrh r0, [r3, #-8] ++ ldr r3, .L1086+40 ++ ldrh r1, [r5, r2] ++ ldrb r3, [r3, #-3127] @ zero_extendqisi2 ++ mul r3, r0, r3 ++ sub r3, r3, #32 ++ cmp r1, r3 ++ addlt r1, r1, r0, lsr #3 ++ strhlt r1, [r5, r2] @ movhi ++ b .L986 ++.L996: ++ lsr r3, r3, #2 ++ mov r0, #0 ++ strh r3, [r4, #-8] @ movhi ++ bl zftl_get_gc_node.part.10 ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L998 ++ ldr r1, [r5, #1092] ++ lsl r3, r0, #1 ++ ldrh r2, [r8, #-8] ++ ldrh r3, [r1, r3] ++ cmp r3, r2, lsr #2 ++ bcs .L998 ++ mov r3, #1 ++ ldr r2, [sp, #16] ++ mov r1, #0 ++ strh r3, [r4, #-8] @ movhi ++ bl gc_add_sblk ++ adds r4, r0, #0 ++ movne r4, #1 ++ b .L997 ++.L999: ++ mov r3, #0 ++ strh r3, [r2] @ movhi ++ b .L995 ++.L1000: ++ sub r8, r8, #1 ++ uxth r8, r8 ++ cmp r8, #0 ++ bne .L1001 ++ b .L995 ++.L1002: ++ cmp r9, #64 ++ movhi r3, #0 ++ strhhi r3, [fp] @ movhi ++ b .L993 ++.L1003: ++ sub r8, r8, #1 ++ uxth r8, r8 ++ cmp r8, #0 ++ bne .L1004 ++ b .L993 ++.L1008: ++ ldr r3, .L1086+8 ++ mov r2, #0 ++ strh r2, [r3, #-4] @ movhi ++ b .L1010 ++.L1006: ++ mov r3, #0 ++ strh r3, [r2] @ movhi ++ b .L1010 ++.L1009: ++ sub r5, r5, #1 ++ uxth r5, r5 ++ cmp r5, #0 ++ bne .L1011 ++ b .L1010 ++.L1013: ++ ldrh r0, [r0, #-8] ++ movw ip, #2808 ++ ldrb r1, [lr, #-3127] @ zero_extendqisi2 ++ ldrh r3, [r2, ip] ++ mul r1, r0, r1 ++ cmp r3, r1 ++ subgt r3, r3, r0, lsr #3 ++ strhgt r3, [r2, ip] @ movhi ++ b .L986 ++.L1015: ++ cmp r10, #64 ++ movhi r3, #0 ++ strhhi r3, [fp] @ movhi ++ b .L1017 ++.L1018: ++ sub r8, r8, #1 ++ uxth r8, r8 ++ cmp r8, #0 ++ bne .L1019 ++ b .L1017 ++.L1087: ++ .align 2 ++.L1086: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2824 ++ .word .LANCHOR3-3104 ++ .word .LANCHOR2 ++ .word .LC98 ++ .word .LANCHOR3-3110 ++ .word .LANCHOR0+2818 ++ .word .LANCHOR3-3088 ++ .word .LANCHOR0+2816 ++ .word .LANCHOR3-3108 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3112 ++ .word .LC99 ++ .word .LANCHOR0+2792 ++ .word .LANCHOR0+2790 ++ .word .LANCHOR0+2808 ++ .word .LANCHOR0+2806 ++ .fnend ++ .size gc_search_src_blk, .-gc_search_src_blk ++ .align 2 ++ .global zftl_get_gc_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_get_gc_node, %function ++zftl_get_gc_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ cmp r1, #5 ++ mov r3, r0 ++ moveq r1, r0 ++ ldreq r0, .L1092 ++ beq .L1091 ++ cmp r1, #2 ++ movne r1, r3 ++ ldrne r0, .L1092+4 ++ bne .L1091 ++ b zftl_get_gc_node.part.10 ++.L1091: ++ b _list_get_gc_head_node ++.L1093: ++ .align 2 ++.L1092: ++ .word .LANCHOR3-3100 ++ .word .LANCHOR3-3104 ++ .fnend ++ .size zftl_get_gc_node, .-zftl_get_gc_node ++ .align 2 ++ .global zftl_insert_free_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_insert_free_list, %function ++zftl_insert_free_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L1098 ++ mov r1, r0 ++ ldr r3, [r2, #1084] ++ add r3, r3, r0, lsl #2 ++ ldrb r3, [r3, #2] @ zero_extendqisi2 ++ ands r3, r3, #24 ++ addeq r2, r2, #2784 ++ ldreq r0, .L1098+4 ++ beq .L1097 ++ cmp r3, #16 ++ ldr r0, .L1098+8 ++ ldreq r2, .L1098+12 ++ ldrne r2, .L1098+16 ++ subeq r0, r0, #12 ++ subne r0, r0, #8 ++.L1097: ++ b _insert_free_list ++.L1099: ++ .align 2 ++.L1098: ++ .word .LANCHOR0 ++ .word .LANCHOR3-3088 ++ .word .LANCHOR3-3072 ++ .word .LANCHOR0+2786 ++ .word .LANCHOR0+2788 ++ .fnend ++ .size zftl_insert_free_list, .-zftl_insert_free_list ++ .align 2 ++ .global zftl_insert_data_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_insert_data_list, %function ++zftl_insert_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1105 ++ mov r1, r0 ++ ldr r3, [r3, #1084] ++ add r3, r3, r0, lsl #2 ++ ldrb r3, [r3, #2] @ zero_extendqisi2 ++ and r3, r3, #224 ++ cmp r3, #64 ++ bne .L1101 ++ ldr r2, .L1105+4 ++ ldr r0, .L1105+8 ++.L1104: ++ b _insert_data_list ++.L1101: ++ cmp r3, #96 ++ ldreq r2, .L1105+12 ++ ldreq r0, .L1105+16 ++ beq .L1104 ++.L1102: ++ cmp r3, #160 ++ bxne lr ++ ldr r2, .L1105+20 ++ ldr r0, .L1105+24 ++ b .L1104 ++.L1106: ++ .align 2 ++.L1105: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2790 ++ .word .LANCHOR3-3116 ++ .word .LANCHOR0+2792 ++ .word .LANCHOR3-3104 ++ .word .LANCHOR0+2794 ++ .word .LANCHOR3-3100 ++ .fnend ++ .size zftl_insert_data_list, .-zftl_insert_data_list ++ .align 2 ++ .global zftl_gc_get_free_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_gc_get_free_sblk, %function ++zftl_gc_get_free_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #16 ++ movw r2, #65535 ++ ldr r8, .L1126 ++ ldr r3, [r8, #1096] ++ add r3, r3, #588 ++ ldrh r4, [r3] ++ clz r3, r0 ++ lsr r3, r3, #5 ++ cmp r4, r2 ++ moveq r3, #0 ++ cmp r3, #0 ++ beq .L1108 ++ mov r1, r4 ++ ldr r0, .L1126+4 ++ bl rk_printk ++ ldr r3, [r8, #1096] ++ mvn r2, #0 ++ add r3, r3, #588 ++ strh r2, [r3] @ movhi ++.L1109: ++ mov r0, r4 ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1108: ++ movw r3, #2786 ++ mov r7, r1 ++ ldrh r1, [r8, r3] ++ movw r3, #2788 ++ ldrh r3, [r8, r3] ++ mov r6, r0 ++ mov r5, r8 ++ ldr r0, .L1126+8 ++ cmp r1, r3 ++ bcc .L1110 ++ add r2, r8, #2784 ++ ldrh r2, [r2] ++ cmp r3, #0 ++ cmpne r2, r1 ++ bls .L1111 ++.L1110: ++ cmp r6, #0 ++ ldr r2, .L1126+12 ++ rsbne r1, r1, r1, lsl #3 ++ lsreq r1, r3, #2 ++ ubfxne r1, r1, #3, #16 ++ sub r0, r0, #8 ++.L1125: ++ bl _list_pop_index_node ++ uxth r4, r0 ++ movw r3, #65535 ++ cmp r4, r3 ++ bne .L1116 ++ movw r3, #2788 ++ mov r2, r7 ++ ldrh r3, [r5, r3] ++ mov r1, r4 ++ ldr r0, .L1126+16 ++ str r3, [sp, #4] ++ ldr r3, .L1126+20 ++ ldrh r3, [r3] ++ str r3, [sp] ++ ldr r3, .L1126+24 ++ ldr r3, [r3, #-3088] ++ bl rk_printk ++.L1116: ++ cmp r6, #0 ++ beq .L1109 ++ ldr r3, .L1126+28 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L1109 ++ ldr ip, [r5, #1092] ++ lsl r0, r4, #1 ++ ldr r1, [r5, #1084] ++ lsl r3, r4, #2 ++ ldrh r0, [ip, r0] ++ add r2, r1, r3 ++ ldrb r2, [r2, #2] @ zero_extendqisi2 ++ str r0, [sp, #8] ++ ldrh r3, [r1, r3] ++ ldr r0, .L1126+32 ++ ubfx r3, r3, #0, #11 ++ str r3, [sp, #4] ++ ldr r3, [r1, r4, lsl #2] ++ mov r1, r4 ++ ubfx r3, r3, #11, #8 ++ str r3, [sp] ++ ubfx r3, r2, #3, #2 ++ lsr r2, r2, #5 ++ bl rk_printk ++ b .L1109 ++.L1111: ++ cmp r6, #0 ++ ldr r2, .L1126+36 ++ lsrne r1, r1, #3 ++ moveq r1, r6 ++ sub r0, r0, #12 ++ b .L1125 ++.L1127: ++ .align 2 ++.L1126: ++ .word .LANCHOR0 ++ .word .LC100 ++ .word .LANCHOR3-3072 ++ .word .LANCHOR0+2788 ++ .word .LC101 ++ .word .LANCHOR0+2784 ++ .word .LANCHOR3 ++ .word .LANCHOR2 ++ .word .LC102 ++ .word .LANCHOR0+2786 ++ .fnend ++ .size zftl_gc_get_free_sblk, .-zftl_gc_get_free_sblk ++ .align 2 ++ .global zftl_get_free_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_get_free_sblk, %function ++zftl_get_free_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r1, #5 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r7, r1 ++ ldr r5, .L1141 ++ bne .L1129 ++ movw r3, #2786 ++ ldr r0, .L1141+4 ++ ldrh r1, [r5, r3] ++ movw r3, #2788 ++ ldrh ip, [r5, r3] ++ cmp r1, ip ++ bcc .L1130 ++ add r3, r5, #2784 ++ ldrh r3, [r3] ++ cmp ip, #0 ++ cmpne r3, r1 ++ movhi r1, #1 ++ movls r1, #0 ++ ldrls r2, .L1141+8 ++ subls r0, r0, #12 ++ bls .L1140 ++.L1130: ++ ldr r2, .L1141+12 ++ lsr r1, ip, #1 ++ sub r0, r0, #8 ++.L1140: ++ bl _list_pop_index_node ++ uxth r4, r0 ++ movw r3, #65535 ++ cmp r4, r3 ++ bne .L1134 ++ movw r3, #2788 ++ mov r2, r7 ++ ldrh r3, [r5, r3] ++ mov r1, r4 ++ ldr r0, .L1141+16 ++ str r3, [sp, #4] ++ ldr r3, .L1141+20 ++ ldrh r3, [r3] ++ str r3, [sp] ++ ldr r3, .L1141+24 ++ ldr r3, [r3, #-3088] ++ bl rk_printk ++ b .L1134 ++.L1129: ++ ldr r3, [r5, #1096] ++ movw r8, #590 ++ ldrh r4, [r3, r8] ++ movw r3, #65535 ++ cmp r1, #1 ++ cmpne r4, r3 ++ beq .L1133 ++ mov r1, r4 ++ ldr r0, .L1141+28 ++ bl rk_printk ++ ldr r3, [r5, #1096] ++ mvn r2, #0 ++ strh r2, [r3, r8] @ movhi ++.L1134: ++ mov r0, r4 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L1133: ++ add r3, r5, #2784 ++ movw r2, #2788 ++ ldrh r3, [r3] ++ mov r6, r0 ++ ldrh r2, [r5, r2] ++ cmp r3, r2 ++ bcc .L1135 ++ movw r1, #2786 ++ ldrh r1, [r5, r1] ++ cmp r2, #0 ++ cmpne r1, r3 ++ bls .L1136 ++.L1135: ++ bl get_ink_scaned_blk ++ movw r3, #65535 ++ mov r4, r0 ++ cmp r0, r3 ++ bne .L1134 ++ cmp r7, #1 ++ ldr r2, .L1141+12 ++ movweq r3, #2788 ++ ldr r0, .L1141+32 ++ ldrheq r6, [r5, r3] ++ lsreq r6, r6, #1 ++ mov r1, r6 ++ b .L1140 ++.L1136: ++ cmp r7, #1 ++ ldr r2, .L1141+20 ++ lsreq r6, r3, #1 ++ ldr r0, .L1141+36 ++ mov r1, r6 ++ b .L1140 ++.L1142: ++ .align 2 ++.L1141: ++ .word .LANCHOR0 ++ .word .LANCHOR3-3072 ++ .word .LANCHOR0+2786 ++ .word .LANCHOR0+2788 ++ .word .LC101 ++ .word .LANCHOR0+2784 ++ .word .LANCHOR3 ++ .word .LC103 ++ .word .LANCHOR3-3080 ++ .word .LANCHOR3-3088 ++ .fnend ++ .size zftl_get_free_sblk, .-zftl_get_free_sblk ++ .align 2 ++ .global zftl_remove_data_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_remove_data_node, %function ++zftl_remove_data_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1148 ++ mov r1, r0 ++ ldr r3, [r3, #1084] ++ add r3, r3, r0, lsl #2 ++ ldrb r3, [r3, #2] @ zero_extendqisi2 ++ and r3, r3, #224 ++ cmp r3, #64 ++ bne .L1144 ++ ldr r2, .L1148+4 ++ ldr r0, .L1148+8 ++.L1147: ++ b _list_remove_node ++.L1144: ++ cmp r3, #96 ++ ldreq r2, .L1148+12 ++ ldreq r0, .L1148+16 ++ beq .L1147 ++.L1145: ++ cmp r3, #160 ++ bxne lr ++ ldr r2, .L1148+20 ++ ldr r0, .L1148+24 ++ b .L1147 ++.L1149: ++ .align 2 ++.L1148: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2790 ++ .word .LANCHOR3-3116 ++ .word .LANCHOR0+2792 ++ .word .LANCHOR3-3104 ++ .word .LANCHOR0+2794 ++ .word .LANCHOR3-3100 ++ .fnend ++ .size zftl_remove_data_node, .-zftl_remove_data_node ++ .align 2 ++ .global zftl_remove_free_node ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_remove_free_node, %function ++zftl_remove_free_node: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r2, .L1154 ++ mov r1, r0 ++ ldr r3, [r2, #1084] ++ add r3, r3, r0, lsl #2 ++ ldrb r3, [r3, #2] @ zero_extendqisi2 ++ ands r3, r3, #24 ++ addeq r2, r2, #2784 ++ ldreq r0, .L1154+4 ++ beq .L1153 ++ cmp r3, #16 ++ ldr r0, .L1154+8 ++ ldreq r2, .L1154+12 ++ ldrne r2, .L1154+16 ++ subeq r0, r0, #12 ++ subne r0, r0, #8 ++.L1153: ++ b _list_remove_node ++.L1155: ++ .align 2 ++.L1154: ++ .word .LANCHOR0 ++ .word .LANCHOR3-3088 ++ .word .LANCHOR3-3072 ++ .word .LANCHOR0+2786 ++ .word .LANCHOR0+2788 ++ .fnend ++ .size zftl_remove_free_node, .-zftl_remove_free_node ++ .align 2 ++ .global zftl_list_update_data_list ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_list_update_data_list, %function ++zftl_list_update_data_list: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1161 ++ mov r1, r0 ++ ldr r3, [r3, #1084] ++ add r3, r3, r0, lsl #2 ++ ldrb r3, [r3, #2] @ zero_extendqisi2 ++ and r3, r3, #224 ++ cmp r3, #64 ++ bne .L1157 ++ ldr r2, .L1161+4 ++ ldr r0, .L1161+8 ++.L1160: ++ b _list_update_data_list ++.L1157: ++ cmp r3, #96 ++ ldreq r2, .L1161+12 ++ ldreq r0, .L1161+16 ++ beq .L1160 ++.L1158: ++ cmp r3, #160 ++ bxne lr ++ ldr r2, .L1161+20 ++ ldr r0, .L1161+24 ++ b .L1160 ++.L1162: ++ .align 2 ++.L1161: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2790 ++ .word .LANCHOR3-3116 ++ .word .LANCHOR0+2792 ++ .word .LANCHOR3-3104 ++ .word .LANCHOR0+2794 ++ .word .LANCHOR3-3100 ++ .fnend ++ .size zftl_list_update_data_list, .-zftl_list_update_data_list ++ .align 2 ++ .global print_list_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type print_list_info, %function ++print_list_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ mov r4, r0 ++ ldrh r2, [r1] ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r1, [r0] ++ ldr r0, .L1168 ++ bl rk_printk ++ ldr r4, [r4] ++ cmp r4, #0 ++ beq .L1163 ++ ldr r6, .L1168+4 ++ mov r5, #0 ++ ldr r7, .L1168+8 ++ ldr r8, .L1168+12 ++.L1166: ++ ldr r2, [r6, #1036] ++ ldr r9, [r6, #1092] ++ ldr r1, [r6, #1084] ++ sub r2, r4, r2 ++ ldrh r3, [r4] ++ asr r2, r2, #1 ++ mul r2, r7, r2 ++ uxth r2, r2 ++ lsl lr, r2, #1 ++ lsl r0, r2, #2 ++ ldrh lr, [r9, lr] ++ add ip, r1, r0 ++ str lr, [sp, #24] ++ ldrh r0, [r1, r0] ++ ubfx r0, r0, #0, #11 ++ str r0, [sp, #20] ++ mov r0, r8 ++ ldr r1, [r1, r2, lsl #2] ++ ubfx r1, r1, #11, #8 ++ str r1, [sp, #16] ++ ldrb r1, [ip, #2] @ zero_extendqisi2 ++ ubfx r1, r1, #3, #2 ++ str r1, [sp, #12] ++ ldrb r1, [ip, #2] @ zero_extendqisi2 ++ lsr r1, r1, #5 ++ str r1, [sp, #8] ++ ldrh r1, [r4, #4] ++ str r1, [sp, #4] ++ ldrh r1, [r4, #2] ++ str r1, [sp] ++ mov r1, r5 ++ bl rk_printk ++ ldrh r4, [r4] ++ movw r3, #65535 ++ cmp r4, r3 ++ beq .L1163 ++ ldr r3, [r6, #1036] ++ mov r2, #6 ++ add r5, r5, #1 ++ uxth r5, r5 ++ mla r4, r2, r4, r3 ++ ldr r3, .L1168+16 ++ ldrh r3, [r3] ++ cmp r3, r5 ++ bcs .L1166 ++.L1163: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L1169: ++ .align 2 ++.L1168: ++ .word .LC104 ++ .word .LANCHOR0 ++ .word -1431655765 ++ .word .LC105 ++ .word .LANCHOR3-3076 ++ .fnend ++ .size print_list_info, .-print_list_info ++ .align 2 ++ .global dump_all_list_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type dump_all_list_info, %function ++dump_all_list_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ ldr r5, .L1172 ++ ldr r4, .L1172+4 ++ sub r6, r5, #3088 ++ sub r7, r5, #3072 ++ mov r0, r6 ++ sub r5, r5, #3104 ++ add r1, r4, #2784 ++ bl print_list_info ++ add r1, r4, #2784 ++ sub r0, r7, #12 ++ add r1, r1, #2 ++ bl print_list_info ++ add r1, r4, #2784 ++ sub r0, r7, #8 ++ add r1, r1, #4 ++ bl print_list_info ++ add r1, r4, #2784 ++ sub r0, r5, #12 ++ add r1, r1, #6 ++ bl print_list_info ++ add r1, r4, #2784 ++ mov r0, r5 ++ add r1, r1, #8 ++ bl print_list_info ++ add r1, r4, #2784 ++ sub r0, r6, #12 ++ add r1, r1, #10 ++ pop {r4, r5, r6, r7, r8, lr} ++ b print_list_info ++.L1173: ++ .align 2 ++.L1172: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .fnend ++ .size dump_all_list_info, .-dump_all_list_info ++ .align 2 ++ .global ftl_tmp_into_update ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_tmp_into_update, %function ++ftl_tmp_into_update: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1179 ++ ldr r3, [r3, #2800] ++ ldr r2, [r3, #16] ++ cmp r2, #2048 ++ ldrhi r1, [r3, #20] ++ addhi r1, r1, r2, lsr #11 ++ ubfxhi r2, r2, #0, #11 ++ strhi r2, [r3, #16] ++ ldr r2, [r3, #24] ++ strhi r1, [r3, #20] ++ cmp r2, #2048 ++ ldrhi r1, [r3, #28] ++ addhi r1, r1, r2, lsr #11 ++ ubfxhi r2, r2, #0, #11 ++ strhi r2, [r3, #24] ++ ldr r2, [r3, #32] ++ strhi r1, [r3, #28] ++ cmp r2, #1024 ++ ldrhi r1, [r3, #36] ++ addhi r1, r1, r2, lsr #10 ++ ubfxhi r2, r2, #0, #10 ++ strhi r2, [r3, #32] ++ ldr r2, [r3, #40] ++ strhi r1, [r3, #36] ++ cmp r2, #1024 ++ ldrhi r1, [r3, #44] ++ addhi r1, r1, r2, lsr #10 ++ ubfxhi r2, r2, #0, #10 ++ strhi r2, [r3, #40] ++ strhi r1, [r3, #44] ++ bx lr ++.L1180: ++ .align 2 ++.L1179: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_tmp_into_update, .-ftl_tmp_into_update ++ .global __aeabi_idiv ++ .align 2 ++ .global ftl_get_blk_list_in_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_get_blk_list_in_sblk, %function ++ftl_get_blk_list_in_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r5, #0 ++ ldr r9, .L1189 ++ mov r10, r0 ++ mov r6, r1 ++ mov r7, r5 ++ ldr r8, .L1189+4 ++ ldr r3, [r9, #1084] ++ add r3, r3, r0, lsl #2 ++ ldrb r2, [r3, #3] @ zero_extendqisi2 ++ mov r3, r8 ++.L1182: ++ ldrb r1, [r8, #-3127] @ zero_extendqisi2 ++ cmp r7, r1 ++ blt .L1185 ++ add r6, r6, r5, lsl #1 ++ mov r2, r5 ++ mvn r0, #0 ++.L1186: ++ ldrb r1, [r3, #-3127] @ zero_extendqisi2 ++ cmp r2, r1 ++ blt .L1187 ++ mov r0, r5 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1185: ++ asr r1, r2, r7 ++ tst r1, #1 ++ bne .L1183 ++ ldrb r4, [r8, #-3136] @ zero_extendqisi2 ++ mov r0, r7 ++ stm sp, {r2, r3} ++ lsl fp, r5, #1 ++ add r5, r5, #1 ++ mov r1, r4 ++ bl __aeabi_idiv ++ ldr ip, .L1189+8 ++ smulbb r4, r4, r10 ++ ldrb r1, [r9, #1153] @ zero_extendqisi2 ++ ldm sp, {r2, r3} ++ ldrh ip, [ip] ++ rsb r1, r1, #24 ++ sub r1, r1, ip ++ add r0, r4, r0, lsl r1 ++ uxth r0, r0 ++ strh r0, [r6, fp] @ movhi ++ ldrb r1, [r8, #-3136] @ zero_extendqisi2 ++ cmp r1, #1 ++ subhi r1, r1, #1 ++ andhi r1, r1, r7 ++ addhi r0, r0, r1 ++ strhhi r0, [r6, fp] @ movhi ++.L1183: ++ add r7, r7, #1 ++ b .L1182 ++.L1187: ++ strh r0, [r6], #2 @ movhi ++ add r2, r2, #1 ++ b .L1186 ++.L1190: ++ .align 2 ++.L1189: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3138 ++ .fnend ++ .size ftl_get_blk_list_in_sblk, .-ftl_get_blk_list_in_sblk ++ .align 2 ++ .global ftl_erase_phy_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_erase_phy_blk, %function ++ftl_erase_phy_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L1197 ++ ldr r3, .L1197+4 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r6, r1 ++ sub r1, r2, #3136 ++ sub r7, r2, #3072 ++ ldrb r3, [r3, #1153] @ zero_extendqisi2 ++ ldrh r4, [r1, #-2] ++ rsb r3, r3, #24 ++ sub r3, r3, r4 ++ mvn r4, #0 ++ asr r5, r0, r3 ++ bic r4, r0, r4, lsl r3 ++ ldrb r3, [r2, #-3126] @ zero_extendqisi2 ++ sxth r4, r4 ++ uxtb r5, r5 ++ cmp r3, #0 ++ beq .L1192 ++ ldrb r3, [r2, #-3125] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1192 ++ ldrh r2, [r7, #-2] ++ clz r1, r6 ++ lsr r1, r1, #5 ++ mov r0, r5 ++ mul r2, r4, r2 ++ bl flash_erase_block_en ++.L1192: ++ ldrh r2, [r7, #-2] ++ uxtb r1, r6 ++ mov r0, r5 ++ mul r2, r4, r2 ++ pop {r4, r5, r6, r7, r8, lr} ++ b flash_erase_block_en ++.L1198: ++ .align 2 ++.L1197: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_erase_phy_blk, .-ftl_erase_phy_blk ++ .align 2 ++ .global ftl_erase_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_erase_sblk, %function ++ftl_erase_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ lsl fp, r0, #2 ++ ldr r4, .L1224 ++ mov r8, r0 ++ mov r7, r1 ++ mov r6, #0 ++ ldr r9, .L1224+4 ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r3, [r4, #1084] ++ add r3, r3, fp ++ ldrb r3, [r3, #3] @ zero_extendqisi2 ++ str r3, [sp, #4] ++.L1200: ++ ldr r3, .L1224+4 ++ ldrb r3, [r3, #-3072] @ zero_extendqisi2 ++ cmp r6, r3 ++ bge .L1211 ++ ldr r3, .L1224+4 ++ mov r5, #0 ++ ldrb r2, [r3, #-3136] @ zero_extendqisi2 ++ sub r10, r2, #1 ++ mul r3, r2, r8 ++ mul ip, r2, r6 ++ str r3, [sp, #8] ++ ldr r3, .L1224+8 ++ ldrh r3, [r3] ++ str r3, [sp, #12] ++ mov r3, r5 ++ b .L1212 ++.L1202: ++ ldr lr, [sp, #4] ++ add r1, ip, r3 ++ asr r1, lr, r1 ++ tst r1, #1 ++ bne .L1201 ++ ldr r0, [sp, #8] ++ add r1, sp, #80 ++ add lr, r1, r5, lsl #2 ++ and r1, r3, r10 ++ add r5, r5, #1 ++ add r1, r1, r0 ++ ldr r0, [sp, #12] ++ mul r1, r0, r1 ++ str r1, [lr, #-64] ++.L1201: ++ add r3, r3, #1 ++.L1212: ++ cmp r3, r2 ++ blt .L1202 ++ cmp r2, #4 ++ bne .L1203 ++ uxtb r3, r7 ++ mov r10, #0 ++ str r3, [sp, #8] ++ uxtb r3, r6 ++.L1204: ++ cmp r10, r5 ++ bne .L1205 ++.L1206: ++ add r6, r6, #1 ++ b .L1200 ++.L1205: ++ add r2, sp, #16 ++ mov r0, r3 ++ ldr r2, [r2, r10, lsl #2] ++ add r10, r10, #1 ++ ldr r1, [sp, #8] ++ str r3, [sp, #12] ++ bl flash_erase_block_en ++ ldr r3, [sp, #12] ++ b .L1204 ++.L1203: ++ cmp r5, #2 ++ bne .L1207 ++ ldrb r3, [r9, #-3126] @ zero_extendqisi2 ++ uxtb r5, r6 ++ cmp r3, #0 ++ beq .L1208 ++ ldrb r3, [r9, #-3125] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1208 ++ clz r1, r7 ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #16] ++ lsr r1, r1, #5 ++ mov r0, r5 ++ bl flash_erase_duplane_block ++.L1208: ++ ldr r3, [sp, #20] ++ uxtb r1, r7 ++ ldr r2, [sp, #16] ++ mov r0, r5 ++ bl flash_erase_duplane_block ++ b .L1206 ++.L1207: ++ cmp r5, #1 ++ bne .L1206 ++ ldrb r3, [r9, #-3126] @ zero_extendqisi2 ++ uxtb r5, r6 ++ cmp r3, #0 ++ beq .L1210 ++ ldrb r3, [r9, #-3125] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1210 ++ clz r1, r7 ++ ldr r2, [sp, #16] ++ lsr r1, r1, #5 ++ mov r0, r5 ++ bl flash_erase_block_en ++.L1210: ++ ldr r2, [sp, #16] ++ uxtb r1, r7 ++ mov r0, r5 ++ bl flash_erase_block_en ++ b .L1206 ++.L1211: ++ cmp r7, #0 ++ bne .L1213 ++ ldr r2, [r4, #1084] ++ ldrh r3, [r2, fp] ++ add r1, r3, #1 ++ bfi r3, r1, #0, #11 ++ strh r3, [r2, fp] @ movhi ++ ldr r3, [r4, #2800] ++ ldr r2, [r3, #84] ++ ldrh r0, [r3, #96] ++ add r2, r2, #1 ++ str r2, [r3, #84] ++ ldr r2, [r4, #1084] ++ ldrh r2, [r2, fp] ++ ubfx r2, r2, #0, #11 ++ uxth r1, r2 ++ cmp r0, r1 ++ strhlt r2, [r3, #96] @ movhi ++.L1215: ++ mov r0, #0 ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1213: ++ ldr r1, [r4, #1084] ++ ldr r3, [r1, r8, lsl #2] ++ ubfx r2, r3, #11, #8 ++ add r2, r2, #1 ++ bfi r3, r2, #11, #8 ++ str r3, [r1, r8, lsl #2] ++ ldr r3, [r4, #2800] ++ ldr r2, [r3, #80] ++ ldrh r1, [r3, #98] ++ add r2, r2, #1 ++ str r2, [r3, #80] ++ ldr r2, [r4, #1084] ++ ldr r2, [r2, r8, lsl #2] ++ ubfx r2, r2, #11, #8 ++ cmp r1, r2 ++ strhcc r2, [r3, #98] @ movhi ++ b .L1215 ++.L1225: ++ .align 2 ++.L1224: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3074 ++ .fnend ++ .size ftl_erase_sblk, .-ftl_erase_sblk ++ .align 2 ++ .global ftl_alloc_sys_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_alloc_sys_blk, %function ++ftl_alloc_sys_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1236 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r3 ++ ldr r2, [r3, #2800] ++ ldrh r1, [r2, #136] ++ cmp r1, #63 ++ movhi r3, #0 ++ strhhi r3, [r2, #136] @ movhi ++ ldrh r3, [r2, #112] ++ cmp r3, #0 ++ bne .L1228 ++ movw r2, #1359 ++ ldr r1, .L1236+4 ++ ldr r0, .L1236+8 ++ bl rk_printk ++ bl dump_stack ++.L1228: ++ ldr r3, [r4, #2800] ++ movw lr, #65535 ++ mov ip, #0 ++.L1232: ++ ldrh r2, [r3, #136] ++ add r1, r3, r2, lsl #1 ++ add r1, r1, #158 ++.L1229: ++ cmp r2, #63 ++ strhgt ip, [r3, #136] @ movhi ++ bgt .L1232 ++.L1231: ++ ldrh r0, [r1, #2]! ++ cmp r0, lr ++ addeq r2, r2, #1 ++ beq .L1229 ++.L1234: ++ add r1, r3, r2, lsl #1 ++ mvn ip, #0 ++ strh ip, [r1, #160] @ movhi ++ strh r2, [r3, #136] @ movhi ++ ldrh r2, [r3, #112] ++ add r2, r2, ip ++ strh r2, [r3, #112] @ movhi ++ pop {r4, pc} ++.L1237: ++ .align 2 ++.L1236: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1479 ++ .word .LC0 ++ .fnend ++ .size ftl_alloc_sys_blk, .-ftl_alloc_sys_blk ++ .align 2 ++ .global ftl_free_sys_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_free_sys_blk, %function ++ftl_free_sys_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1247 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ mov r4, r3 ++ ldr r2, [r3, #2800] ++ ldrh r1, [r2, #138] ++ cmp r1, #63 ++ movhi r3, #0 ++ strhhi r3, [r2, #138] @ movhi ++ ldrh r3, [r2, #112] ++ cmp r3, #63 ++ bls .L1240 ++ movw r2, #1386 ++ ldr r1, .L1247+4 ++ ldr r0, .L1247+8 ++ bl rk_printk ++ bl dump_stack ++.L1240: ++ ldr r3, [r4, #2800] ++ movw ip, #65535 ++ mov r0, #0 ++.L1244: ++ ldrh r2, [r3, #138] ++ add r1, r3, r2, lsl #1 ++ add r1, r1, #158 ++.L1241: ++ cmp r2, #63 ++ strhgt r0, [r3, #138] @ movhi ++ bgt .L1244 ++.L1243: ++ ldrh lr, [r1, #2]! ++ cmp lr, ip ++ bne .L1242 ++ add r1, r3, r2, lsl #1 ++ strh r5, [r1, #160] @ movhi ++ strh r2, [r3, #138] @ movhi ++ ldrh r2, [r3, #112] ++ add r2, r2, #1 ++ strh r2, [r3, #112] @ movhi ++ pop {r4, r5, r6, pc} ++.L1242: ++ add r2, r2, #1 ++ b .L1241 ++.L1248: ++ .align 2 ++.L1247: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1497 ++ .word .LC0 ++ .fnend ++ .size ftl_free_sys_blk, .-ftl_free_sys_blk ++ .align 2 ++ .global ftl_info_data_recovery ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_info_data_recovery, %function ++ftl_info_data_recovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ movw r3, #65535 ++ ldrh r6, [r0] ++ cmp r6, r3 ++ popeq {r4, r5, r6, r7, r8, pc} ++ ldr r4, .L1259 ++ lsl r8, r6, #2 ++ ldr r5, [r4, #1084] ++ add r7, r5, r8 ++ ldrb r3, [r7, #2] @ zero_extendqisi2 ++ tst r3, #224 ++ popne {r4, r5, r6, r7, r8, pc} ++ ldrb r2, [r0, #4] @ zero_extendqisi2 ++ mov r0, r6 ++ bfi r3, r2, #5, #3 ++ strb r3, [r7, #2] ++ bl zftl_remove_free_node ++ ldrb r3, [r7, #2] @ zero_extendqisi2 ++ ldr r2, [r4, #2800] ++ tst r3, #8 ++ ldrhne r3, [r2, #116] ++ subne r3, r3, #1 ++ strhne r3, [r2, #116] @ movhi ++ bne .L1254 ++ tst r3, #24 ++ ldrheq r3, [r2, #114] ++ ldrhne r3, [r2, #118] ++ subeq r3, r3, #1 ++ subne r3, r3, #1 ++ strheq r3, [r2, #114] @ movhi ++ strhne r3, [r2, #118] @ movhi ++.L1254: ++ ldrb r3, [r7, #2] @ zero_extendqisi2 ++ and r3, r3, #224 ++ cmp r3, #160 ++ bne .L1256 ++ ldr r3, [r5, r6, lsl #2] ++ ubfx r2, r3, #11, #8 ++ add r2, r2, #1 ++ bfi r3, r2, #11, #8 ++ str r3, [r5, r6, lsl #2] ++ ldr r2, [r4, #2800] ++ ldrh r3, [r2, #120] ++ sub r3, r3, #1 ++ strh r3, [r2, #120] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L1256: ++ ldrh r2, [r5, r8] ++ cmp r3, #64 ++ add r1, r2, #1 ++ bfi r2, r1, #0, #11 ++ strh r2, [r5, r8] @ movhi ++ bne .L1257 ++ ldr r2, [r4, #2800] ++ ldrh r3, [r2, #122] ++ sub r3, r3, #1 ++ strh r3, [r2, #122] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L1257: ++ cmp r3, #96 ++ ldreq r2, [r4, #2800] ++ ldrheq r3, [r2, #124] ++ subeq r3, r3, #1 ++ strheq r3, [r2, #124] @ movhi ++ pop {r4, r5, r6, r7, r8, pc} ++.L1260: ++ .align 2 ++.L1259: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_info_data_recovery, .-ftl_info_data_recovery ++ .align 2 ++ .global ftl_get_ppa_from_index ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_get_ppa_from_index, %function ++ftl_get_ppa_from_index: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1266 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, r0 ++ ldr r5, [r3, #1096] ++ ldr r3, .L1266+4 ++ sub r2, r3, #3088 ++ ldrb r3, [r3, #-3127] @ zero_extendqisi2 ++ ldrh r2, [r2, #-8] ++ mul r1, r3, r2 ++ cmp r0, r1 ++ smulbbge r3, r3, r2 ++ addlt r5, r5, #16 ++ addge r5, r5, #48 ++ ldrb r6, [r5, #9] @ zero_extendqisi2 ++ subge r4, r0, r3 ++ uxthge r4, r4 ++ mov r1, r6 ++ mov r0, r4 ++ bl __aeabi_idiv ++ smulbb r6, r0, r6 ++ movw r3, #65535 ++ mov r7, r0 ++ sub r4, r4, r6 ++ uxth r4, r4 ++ add r4, r5, r4, lsl #1 ++ ldrh r4, [r4, #16] ++ cmp r4, r3 ++ bne .L1264 ++ movw r2, #1945 ++ ldr r1, .L1266+8 ++ ldr r0, .L1266+12 ++ bl rk_printk ++ bl dump_stack ++.L1264: ++ ldr r3, .L1266+16 ++ ldrh r0, [r3, #-2] ++ mla r0, r4, r0, r7 ++ pop {r4, r5, r6, r7, r8, pc} ++.L1267: ++ .align 2 ++.L1266: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR1+1514 ++ .word .LC0 ++ .word .LANCHOR3-3072 ++ .fnend ++ .size ftl_get_ppa_from_index, .-ftl_get_ppa_from_index ++ .align 2 ++ .global lpa_hash_get_ppa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type lpa_hash_get_ppa, %function ++lpa_hash_get_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L1276 ++ uxtb r3, r0 ++ lsl r3, r3, #1 ++ sub r1, r2, #3056 ++ ldr ip, [r2, #-2552] ++ sub r1, r1, #14 ++ ldrh r3, [r1, r3] ++ ldr r1, [r2, #-2556] ++ movw r2, #65535 ++ cmp r3, r2 ++ bne .L1275 ++ mvn r0, #0 ++ bx lr ++.L1270: ++ lsl r3, r3, #1 ++ ldrh r3, [ip, r3] ++ cmp r3, r2 ++ bne .L1271 ++ mvn r0, #0 ++ ldr pc, [sp], #4 ++.L1275: ++ str lr, [sp, #-4]! ++ .save {lr} ++.L1271: ++ ldr lr, [r1, r3, lsl #2] ++ cmp r0, lr ++ bne .L1270 ++ mov r0, r3 ++ ldr lr, [sp], #4 ++ b ftl_get_ppa_from_index ++.L1277: ++ .align 2 ++.L1276: ++ .word .LANCHOR3 ++ .fnend ++ .size lpa_hash_get_ppa, .-lpa_hash_get_ppa ++ .align 2 ++ .global ftl_get_new_free_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_get_new_free_page, %function ++ftl_get_new_free_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ movw r3, #65535 ++ ldrh r2, [r0] ++ mov r4, r0 ++ cmp r2, r3 ++ bne .L1279 ++ movw r2, #2088 ++ ldr r1, .L1287 ++ ldr r0, .L1287+4 ++ bl rk_printk ++ bl dump_stack ++.L1279: ++ ldr r3, .L1287+8 ++ ldrh r2, [r4, #2] ++ ldrh r3, [r3, #-8] ++ cmp r2, r3 ++ bne .L1280 ++ movw r2, #2089 ++ ldr r1, .L1287 ++ ldr r0, .L1287+4 ++ bl rk_printk ++ bl dump_stack ++.L1280: ++ ldrh r3, [r4, #6] ++ cmp r3, #0 ++ bne .L1281 ++ movw r2, #2090 ++ ldr r1, .L1287 ++ ldr r0, .L1287+4 ++ bl rk_printk ++ bl dump_stack ++.L1281: ++ ldrb r3, [r4, #5] @ zero_extendqisi2 ++ movw r2, #65535 ++ mov r1, #0 ++ add r3, r4, r3, lsl #1 ++ ldrh r0, [r3, #16] ++ ldr r3, .L1287+12 ++ ldrb ip, [r3, #-3127] @ zero_extendqisi2 ++.L1282: ++ cmp r0, r2 ++ ldrb r3, [r4, #5] @ zero_extendqisi2 ++ beq .L1284 ++ ldr r1, .L1287+16 ++ add r3, r3, #1 ++ uxtb r3, r3 ++ ldrh r2, [r4, #2] ++ ldrh r1, [r1, #-2] ++ cmp ip, r3 ++ strb r3, [r4, #5] ++ addeq r3, r2, #1 ++ strheq r3, [r4, #2] @ movhi ++ moveq r3, #0 ++ strbeq r3, [r4, #5] ++ mul r0, r0, r1 ++ ldrh r1, [r4, #6] ++ sub r1, r1, #1 ++ strh r1, [r4, #6] @ movhi ++ orr r0, r0, r2 ++ ldrh r1, [r4, #10] ++ add r1, r1, #1 ++ strh r1, [r4, #10] @ movhi ++ pop {r4, pc} ++.L1284: ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, ip ++ strb r3, [r4, #5] ++ ldrheq r3, [r4, #2] ++ strbeq r1, [r4, #5] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #2] @ movhi ++ ldrb r3, [r4, #5] @ zero_extendqisi2 ++ add r3, r4, r3, lsl #1 ++ ldrh r0, [r3, #16] ++ b .L1282 ++.L1288: ++ .align 2 ++.L1287: ++ .word .LANCHOR1+1537 ++ .word .LC0 ++ .word .LANCHOR3-3088 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3072 ++ .fnend ++ .size ftl_get_new_free_page, .-ftl_get_new_free_page ++ .align 2 ++ .global ftl_ext_alloc_new_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_ext_alloc_new_blk, %function ++ftl_ext_alloc_new_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ bl ftl_alloc_sys_blk ++ sub r3, r0, #1 ++ movw r2, #65533 ++ uxth r3, r3 ++ mov r4, r0 ++ cmp r3, r2 ++ bls .L1290 ++ movw r2, #2125 ++ ldr r1, .L1292 ++ ldr r0, .L1292+4 ++ bl rk_printk ++ bl dump_stack ++.L1290: ++ ldr r5, .L1292+8 ++ mov r1, #0 ++ mov r0, r4 ++ bl ftl_erase_phy_blk ++ ldr r3, [r5, #2800] ++ ldrh r0, [r3, #130] ++ bl ftl_free_sys_blk ++ ldr r3, [r5, #2800] ++ mov r0, #0 ++ strh r4, [r3, #130] @ movhi ++ strh r0, [r3, #140] @ movhi ++ pop {r4, r5, r6, pc} ++.L1293: ++ .align 2 ++.L1292: ++ .word .LANCHOR1+1559 ++ .word .LC0 ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_ext_alloc_new_blk, .-ftl_ext_alloc_new_blk ++ .align 2 ++ .global ftl_total_vpn_update ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_total_vpn_update, %function ++ftl_total_vpn_update: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r2, .L1308 ++ ldrh r3, [r2, #-4] ++ cmp r3, #4 ++ cmpls r0, #0 ++ bne .L1295 ++ add r3, r3, #1 ++ strh r3, [r2, #-4] @ movhi ++ bx lr ++.L1295: ++ ldr r3, .L1308+4 ++ mov r0, #0 ++ movw ip, #1080 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ strh r0, [r2, #-4] @ movhi ++ movw r6, #65535 ++ ldrh lr, [r3, ip] ++ mov ip, r0 ++ ldr r2, [r3, #1084] ++ ldr r1, [r3, #1092] ++ add lr, r2, lr, lsl #2 ++ sub r1, r1, #2 ++.L1297: ++ cmp r2, lr ++ bne .L1300 ++ ldr r4, [r3, #1096] ++ ldr r3, [r3, #2800] ++ str ip, [r4, #524] ++ str r0, [r4, #528] ++ ldrh r1, [r3, #120] ++ cmp r1, #0 ++ popeq {r4, r5, r6, pc} ++ bl __aeabi_uidiv ++ str r0, [r4, #532] ++ pop {r4, r5, r6, pc} ++.L1300: ++ ldrh r4, [r1, #2]! ++ cmp r4, r6 ++ beq .L1298 ++ ldrb r5, [r2, #2] @ zero_extendqisi2 ++ and r5, r5, #224 ++ cmp r5, #160 ++ addeq r0, r0, r4 ++ addne ip, ip, r4 ++.L1298: ++ add r2, r2, #4 ++ b .L1297 ++.L1309: ++ .align 2 ++.L1308: ++ .word .LANCHOR3-2544 ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_total_vpn_update, .-ftl_total_vpn_update ++ .align 2 ++ .global ftl_debug_info_fill ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_debug_info_fill, %function ++ftl_debug_info_fill: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1317 ++ ldrb r3, [r3, #-2546] @ zero_extendqisi2 ++ cmp r3, #8 ++ bls .L1314 ++ sub r3, r0, #2 ++ cmp r2, #0 ++ clz r3, r3 ++ lsr r3, r3, #5 ++ moveq r3, #0 ++ cmp r3, #0 ++ streq r3, [r1] ++ streq r3, [r1, #4] ++ beq .L1314 ++ ldr r3, .L1317+4 ++ mov r0, r2 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r1 ++ str r3, [r1] ++ mov r1, #1024 ++ bl js_hash ++ str r0, [r4, #4] ++ mov r0, #0 ++ pop {r4, pc} ++.L1314: ++ mov r0, #0 ++ bx lr ++.L1318: ++ .align 2 ++.L1317: ++ .word .LANCHOR3 ++ .word 1212240712 ++ .fnend ++ .size ftl_debug_info_fill, .-ftl_debug_info_fill ++ .align 2 ++ .global ftl_vpn_update ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_vpn_update, %function ++ftl_vpn_update: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r4, r0 ++ bl zftl_list_update_data_list ++ lsl r4, r4, #1 ++ ldr r3, .L1323 ++ ldr r2, [r3, #1092] ++ ldrh r2, [r2, r4] ++ cmp r2, #0 ++ moveq r0, #1 ++ movne r0, #0 ++ streq r0, [r3, #2812] ++ pop {r4, pc} ++.L1324: ++ .align 2 ++.L1323: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_vpn_update, .-ftl_vpn_update ++ .align 2 ++ .global ftl_vpn_decrement ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_vpn_decrement, %function ++ftl_vpn_decrement: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ movw r3, #65535 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ cmp r0, r3 ++ mov r5, r0 ++ beq .L1326 ++ ldr r1, .L1335 ++ lsl r3, r0, #1 ++ ldr r2, [r1, #1092] ++ ldrh r4, [r2, r3] ++ cmp r4, #0 ++ subne r4, r4, #1 ++ strhne r4, [r2, r3] @ movhi ++ bne .L1326 ++ ldr r3, [r1, #1084] ++ mov r2, r4 ++ mov r1, r0 ++ add r3, r3, r0, lsl #2 ++ ldr r0, .L1335+4 ++ ldrb r3, [r3, #2] @ zero_extendqisi2 ++ lsr r3, r3, #5 ++ bl rk_printk ++.L1332: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L1326: ++ ldr r3, .L1335+8 ++ ldrh r0, [r3, #-4] ++ mov r4, r3 ++ cmp r5, r0 ++ beq .L1332 ++ movw r2, #65535 ++ cmp r0, r2 ++ strheq r5, [r3, #-4] @ movhi ++ beq .L1332 ++ bl ftl_vpn_update ++ add r3, r4, #608 ++ adds r0, r0, #0 ++ ldrh r2, [r3] ++ movne r0, #1 ++ add r2, r2, #1 ++ uxth r2, r2 ++ cmp r2, #7 ++ movhi r2, #0 ++ strh r2, [r3] @ movhi ++ ldrh r3, [r3] ++ ldrh r2, [r4, #-4] ++ strh r5, [r4, #-4] @ movhi ++ add r3, r4, r3, lsl #1 ++ strh r2, [r3, #-2] @ movhi ++ pop {r4, r5, r6, pc} ++.L1336: ++ .align 2 ++.L1335: ++ .word .LANCHOR0 ++ .word .LC106 ++ .word .LANCHOR3-3152 ++ .fnend ++ .size ftl_vpn_decrement, .-ftl_vpn_decrement ++ .align 2 ++ .global lpa_hash_update_ppa ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type lpa_hash_update_ppa, %function ++lpa_hash_update_ppa: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1349 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ uxtb r7, r0 ++ movw r8, #65535 ++ sub lr, r3, #3056 ++ lsl r7, r7, #1 ++ sub ip, lr, #14 ++ ldr r6, [r3, #-2556] ++ ldrh ip, [ip, r7] ++ mov r5, r8 ++ ldr r9, [r3, #-2552] ++.L1338: ++ cmp ip, r5 ++ beq .L1342 ++ ldr r4, [r6, ip, lsl #2] ++ add r10, r6, ip, lsl #2 ++ cmp r0, r4 ++ lsl r4, ip, #1 ++ bne .L1339 ++ mvn ip, #0 ++ cmp r8, r5 ++ str ip, [r10] ++ lslne r8, r8, #1 ++ ldr ip, [r3, #-2552] ++ ldrh r5, [ip, r4] ++ subeq ip, lr, #14 ++ strheq r5, [ip, r7] @ movhi ++ strhne r5, [ip, r8] @ movhi ++ mvn r5, #0 ++ ldr ip, [r3, #-2552] ++ strh r5, [ip, r4] @ movhi ++.L1342: ++ ldr ip, [r3, #-2556] ++ cmn r1, #1 ++ str r0, [ip, r2, lsl #2] ++ sub ip, lr, #14 ++ ldrh lr, [ip, r7] ++ ldr r0, [r3, #-2552] ++ strh r2, [ip, r7] @ movhi ++ lsl r2, r2, #1 ++ strh lr, [r0, r2] @ movhi ++ beq .L1344 ++ ldr r0, .L1349+4 ++ ldr r2, .L1349+8 ++ ldrb ip, [r0, #1153] @ zero_extendqisi2 ++ mvn r0, #0 ++ ldrh r2, [r2, #-2] ++ rsb ip, ip, #24 ++ sub ip, ip, r2 ++ lsr r2, r1, r2 ++ ldrb r1, [r3, #-3136] @ zero_extendqisi2 ++ bic r0, r2, r0, lsl ip ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ bl ftl_vpn_decrement ++.L1344: ++ mvn r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1339: ++ mov r8, ip ++ ldrh ip, [r9, r4] ++ b .L1338 ++.L1350: ++ .align 2 ++.L1349: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LANCHOR3-3136 ++ .fnend ++ .size lpa_hash_update_ppa, .-lpa_hash_update_ppa ++ .align 2 ++ .global ftl_mask_bad_block ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_mask_bad_block, %function ++ftl_mask_bad_block: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ mov r3, #1 ++ ldr r7, .L1359 ++ ldr ip, .L1359+4 ++ ldrb r4, [r7, #1153] @ zero_extendqisi2 ++ ldrb r5, [ip, #-3136]! @ zero_extendqisi2 ++ rsb r1, r4, #24 ++ lsl r4, r3, r4 ++ sub r4, r4, #1 ++ and r4, r4, r0, lsr r1 ++ uxtb r4, r4 ++ smulbb r2, r4, r5 ++ uxtb r9, r2 ++ ldrh r2, [ip, #-2] ++ sub r1, r1, r2 ++ lsl r3, r3, r1 ++ mov r1, r5 ++ sub r3, r3, #1 ++ and r0, r3, r0, lsr r2 ++ uxth r10, r0 ++ bl __aeabi_uidiv ++ ldr r3, .L1359+8 ++ cmp r5, #1 ++ subhi r2, r5, #1 ++ mov r6, r0 ++ andhi r2, r2, r10 ++ uxth r8, r0 ++ ldr r3, [r3] ++ addhi r2, r9, r2 ++ uxtbhi r9, r2 ++ tst r3, #16384 ++ beq .L1353 ++ uxth r3, r0 ++ str r10, [sp] ++ mov r2, r9 ++ ldr r0, .L1359+12 ++ mov r1, r4 ++ bl rk_printk ++.L1353: ++ movw r3, #1080 ++ ldrh r3, [r7, r3] ++ cmp r3, r8 ++ bls .L1351 ++ ldr r3, [r7, #1084] ++ uxth r6, r6 ++ add r6, r3, r6, lsl #2 ++ mov r3, #1 ++ ldrb r2, [r6, #3] @ zero_extendqisi2 ++ orr r2, r2, r3, lsl r9 ++ strb r2, [r6, #3] ++.L1351: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1360: ++ .align 2 ++.L1359: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR2 ++ .word .LC107 ++ .fnend ++ .size ftl_mask_bad_block, .-ftl_mask_bad_block ++ .align 2 ++ .global gc_free_bad_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_free_bad_sblk, %function ++gc_free_bad_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r6, .L1382 ++ ldr r3, [r6, #916] ++ cmp r3, #0 ++ beq .L1378 ++ ldr r8, .L1382+4 ++ mov r7, #0 ++ str r0, [sp, #4] ++.L1363: ++ ldrb r2, [r8, #-3127] @ zero_extendqisi2 ++ uxth r3, r7 ++ cmp r2, r3 ++ bhi .L1373 ++.L1378: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1373: ++ ldrb r9, [r8, #-3136] @ zero_extendqisi2 ++ uxth r0, r7 ++ ldr r10, .L1382+8 ++ ldr fp, .L1382+12 ++ mov r1, r9 ++ bl __aeabi_idiv ++ ldrb r3, [r10, #1153] @ zero_extendqisi2 ++ uxth r5, r9 ++ ldrh r2, [sp, #4] ++ cmp r9, #1 ++ ldrh r4, [fp], #2 ++ mov r9, #0 ++ rsb r3, r3, #24 ++ str r10, [sp] ++ ldr r10, .L1382+16 ++ sub r3, r3, r4 ++ smulbb r4, r2, r5 ++ subhi r5, r5, #1 ++ andhi r5, r5, r7 ++ add r4, r4, r0, lsl r3 ++ uxth r4, r4 ++ addhi r4, r4, r5 ++ uxthhi r4, r4 ++.L1365: ++ ldr r1, [r6, #916] ++ uxth r5, r9 ++ mov r3, r5 ++ cmp r1, r5 ++ addls r7, r7, #1 ++ bls .L1363 ++.L1372: ++ add r3, r3, #1088 ++ add r3, r3, #8 ++ lsl r3, r3, #1 ++ ldrh r3, [r10, r3] ++ cmp r3, r4 ++ bne .L1366 ++ mov r1, r4 ++ ldr r0, .L1382+20 ++ bl rk_printk ++ ldrb r3, [r8, #-2542] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1367 ++ ldrb r3, [r8, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1368 ++.L1367: ++ ldr r3, [sp] ++ ldr r2, .L1382+24 ++ ldr r3, [r3, #2800] ++ ldr r3, [r3, #156] ++ cmp r3, r2 ++ beq .L1369 ++.L1368: ++ ldrh r0, [fp, #-2] ++ lsl r0, r4, r0 ++ bl ftl_mask_bad_block ++.L1369: ++ ldr r3, [r6, #916] ++ movw r0, #1097 ++ movw ip, #1096 ++.L1370: ++ cmp r5, r3 ++ bcc .L1371 ++ sub r3, r3, #1 ++ str r3, [r6, #916] ++.L1366: ++ add r9, r9, #1 ++ b .L1365 ++.L1371: ++ add r1, r5, r0 ++ lsl r1, r1, #1 ++ ldrh lr, [r10, r1] ++ add r1, r5, ip ++ lsl r1, r1, #1 ++ add r5, r5, #1 ++ uxth r5, r5 ++ strh lr, [r10, r1] @ movhi ++ b .L1370 ++.L1383: ++ .align 2 ++.L1382: ++ .word .LANCHOR0+4096 ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LANCHOR3-3138 ++ .word .LANCHOR0+2824 ++ .word .LC108 ++ .word 1145785929 ++ .fnend ++ .size gc_free_bad_sblk, .-gc_free_bad_sblk ++ .align 2 ++ .global ftl_free_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_free_sblk, %function ++ftl_free_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ lsl r10, r0, #2 ++ ldr r5, .L1407 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r7, r0 ++ ldr r6, [r5, #1084] ++ add r8, r6, r10 ++ ldrb r4, [r8, #2] @ zero_extendqisi2 ++ tst r4, #8 ++ lsr r3, r4, #5 ++ str r3, [sp, #4] ++ beq .L1385 ++ ldr r1, [r5, #2800] ++ ldrh r3, [r6, r10] ++ ldr fp, [r6, r0, lsl #2] ++ ldrh r2, [r1, #74] ++ ubfx r3, r3, #0, #11 ++ str r3, [sp, #12] ++ ubfx fp, fp, #11, #8 ++ add r2, r3, r2 ++ uxth r3, r2 ++ ldrh r2, [r1, #72] ++ add r1, r5, #1088 ++ ldrh r9, [r1] ++ mov r0, r3 ++ add r2, r2, fp ++ str r3, [sp] ++ uxth r2, r2 ++ mov r1, r9 ++ str r2, [sp, #8] ++ bl __aeabi_uidiv ++ ldr ip, .L1407+4 ++ ldr r2, [sp, #8] ++ ldr r3, [sp, #12] ++ ldrh r1, [ip, #-12] ++ uxtah r0, r2, r0 ++ cmp r0, r1 ++ ble .L1386 ++ movw r2, #2794 ++ ldrh r0, [r5, r2] ++ movw r2, #2786 ++ ldrh r2, [r5, r2] ++ add r0, r0, r2 ++ sub r2, ip, #560 ++ ldrh r1, [r2, #-2] ++ add r1, r1, #8 ++ cmp r0, r1 ++ bge .L1387 ++.L1392: ++ mov r2, #2 ++ bfi r4, r2, #3, #2 ++ b .L1403 ++.L1387: ++ movw r1, #2790 ++ add r0, r5, #2784 ++ ldrh r0, [r0] ++ ldrh r1, [r5, r1] ++ ldrh r2, [r2, #-4] ++ add r1, r1, r0 ++ movw r0, #2792 ++ ldrh r0, [r5, r0] ++ add r2, r2, #8 ++ add r1, r1, r0 ++ cmp r1, r2 ++.L1406: ++ bge .L1392 ++ b .L1404 ++.L1386: ++ ldr r1, [sp] ++ mla r2, r2, r9, r1 ++ ldrh r1, [ip, #-10] ++ cmp r2, r1 ++ ble .L1388 ++ movw r2, #2790 ++ ldrh r1, [r5, r2] ++ add r2, r5, #2784 ++ ldrh r2, [r2] ++ add r1, r1, r2 ++ movw r2, #2792 ++ ldrh r2, [r5, r2] ++ add r1, r1, r2 ++ sub r2, ip, #560 ++ ldrh r0, [r2, #-4] ++ add ip, r0, #8 ++ cmp r1, ip ++ bge .L1390 ++.L1404: ++ bfc r4, #3, #2 ++.L1403: ++ strb r4, [r8, #2] ++.L1388: ++ ldrb r2, [r8, #2] @ zero_extendqisi2 ++ ands r2, r2, #24 ++ bne .L1393 ++ mul r9, r9, fp ++ ldrh r2, [r6, r10] ++ lsr fp, fp, #3 ++ add r9, r9, r9, lsl #1 ++ add r3, r3, r9, asr #2 ++ bfi r2, r3, #0, #11 ++ strh r2, [r6, r10] @ movhi ++ ldr r3, [r6, r7, lsl #2] ++ bfi r3, fp, #11, #8 ++ str r3, [r6, r7, lsl #2] ++.L1394: ++ mov r0, r7 ++ bl zftl_remove_data_node ++ ldr r3, .L1407 ++ mov r0, #0 ++ ldr r2, [r3, #1084] ++ mov r4, r3 ++ add r10, r2, r10 ++ ldrb r2, [r10, #2] @ zero_extendqisi2 ++ bfc r2, #5, #3 ++ strb r2, [r10, #2] ++ lsl r2, r7, #1 ++ ldr r1, [r3, #1092] ++ strh r0, [r1, r2] @ movhi ++ ldr r2, [sp, #4] ++ add r2, r2, #6 ++ and r2, r2, #7 ++ cmp r2, #4 ++ bhi .L1397 ++ mov r0, r7 ++ bl gc_free_bad_sblk ++.L1397: ++ ldrb r3, [r8, #2] @ zero_extendqisi2 ++ tst r3, #8 ++ beq .L1398 ++ ldr r3, [r4, #1096] ++ movw r2, #586 ++ ldrh r1, [r3, r2] ++ cmp r1, r7 ++ bne .L1398 ++ mvn r1, #0 ++ strh r1, [r3, r2] @ movhi ++ movw r2, #590 ++ ldrh r0, [r3, r2] ++ movw r1, #65535 ++ cmp r0, r1 ++ bne .L1398 ++ strh r7, [r3, r2] @ movhi ++ mov r1, r7 ++ ldr r0, .L1407+8 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b rk_printk ++.L1390: ++ movw ip, #2794 ++ movw lr, #2786 ++ ldrh ip, [r5, ip] ++ ldrh lr, [r5, lr] ++ ldrh r2, [r2, #-2] ++ add ip, ip, lr ++ add r2, r2, #8 ++ cmp ip, r2 ++ blt .L1392 ++ add r0, r0, #24 ++ cmp r1, r0 ++ b .L1406 ++.L1393: ++ cmp r2, #16 ++ bne .L1394 ++ mov r0, r3 ++ mov r1, r9 ++ str r3, [sp] ++ bl __aeabi_idiv ++ add r0, r0, r0, lsl #1 ++ ldr r2, [r6, r7, lsl #2] ++ add fp, fp, r0, asr #2 ++ bfi r2, fp, #11, #8 ++ str r2, [r6, r7, lsl #2] ++ ldr r3, [sp] ++ ldrh r2, [r6, r10] ++ asr r3, r3, #5 ++ bfi r2, r3, #0, #11 ++ strh r2, [r6, r10] @ movhi ++ b .L1394 ++.L1385: ++ tst r4, #24 ++ bne .L1394 ++ movw r3, #2788 ++ ldrh r3, [r5, r3] ++ cmp r3, #0 ++ bne .L1394 ++ movw r3, #2786 ++ ldrh r0, [r5, r3] ++ cmp r0, #15 ++ bhi .L1394 ++ movw r3, #2790 ++ add r2, r5, #2784 ++ ldrh r2, [r2] ++ ldrh r3, [r5, r3] ++ ldr ip, .L1407+12 ++ add r3, r3, r2 ++ movw r2, #2792 ++ ldrh r2, [r5, r2] ++ ldrh r1, [ip, #-4] ++ add r3, r3, r2 ++ add r1, r1, #16 ++ cmp r3, r1 ++ ble .L1394 ++ movw r3, #2794 ++ ldrh r2, [r5, r3] ++ ldrh r3, [ip, #-2] ++ add r2, r2, r0 ++ add r3, r3, #8 ++ cmp r2, r3 ++ bge .L1394 ++ mov r3, #2 ++ add r5, r5, #1088 ++ bfi r4, r3, #3, #2 ++ ldrh r1, [r5] ++ strb r4, [r8, #2] ++ ldrh r4, [r6, r10] ++ ubfx r4, r4, #0, #11 ++ mov r0, r4 ++ asr r4, r4, #5 ++ bl __aeabi_idiv ++ ldr r3, [r6, r7, lsl #2] ++ add r0, r0, r0, lsl #1 ++ ubfx r2, r3, #11, #8 ++ add r0, r2, r0, asr #2 ++ bfi r3, r0, #11, #8 ++ str r3, [r6, r7, lsl #2] ++ ldrh r3, [r6, r10] ++ bfi r3, r4, #0, #11 ++ strh r3, [r6, r10] @ movhi ++ b .L1394 ++.L1398: ++ mov r0, r7 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b zftl_insert_free_list ++.L1408: ++ .align 2 ++.L1407: ++ .word .LANCHOR0 ++ .word .LANCHOR3-2528 ++ .word .LC109 ++ .word .LANCHOR3-3088 ++ .fnend ++ .size ftl_free_sblk, .-ftl_free_sblk ++ .align 2 ++ .global gc_free_src_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_free_src_blk, %function ++gc_free_src_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r5, #0 ++ ldr r8, .L1447 ++ ldr r7, .L1447+4 ++ mov r6, r8 ++.L1410: ++ ldrh r2, [r7, #52] ++ uxth r3, r5 ++ cmp r2, r3 ++ bhi .L1424 ++ mov r3, #0 ++ strh r3, [r7, #52] @ movhi ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1424: ++ uxth r3, r5 ++ add r3, r7, r3, lsl #1 ++ ldrh r4, [r3, #54] ++ ldr r3, [r8, #1092] ++ lsl r9, r4, #1 ++ ldrh r2, [r3, r9] ++ cmp r2, #0 ++ beq .L1411 ++ mov r1, r4 ++ ldr r0, .L1447+8 ++ bl rk_printk ++.L1411: ++ ldr r3, [r6, #1092] ++ mov r2, #0 ++ strh r2, [r3, r9] @ movhi ++ ldr r3, [r6, #1092] ++ ldrh r3, [r3, r9] ++ cmp r3, r2 ++ bne .L1412 ++ ldr r3, .L1447+12 ++ ldr r9, [r6, #1084] ++ ldr r3, [r3] ++ add r9, r9, r4, lsl #2 ++ tst r3, #256 ++ beq .L1413 ++ ldrb r2, [r9, #2] @ zero_extendqisi2 ++ mov r1, r4 ++ ldr r0, .L1447+16 ++ lsr r2, r2, #5 ++ bl rk_printk ++.L1413: ++ ldrb r3, [r9, #2] @ zero_extendqisi2 ++ and r2, r3, #224 ++ and r3, r3, #192 ++ cmp r3, #0 ++ cmpne r2, #224 ++ bne .L1414 ++ movw r2, #1363 ++ ldr r1, .L1447+20 ++ ldr r0, .L1447+24 ++ bl rk_printk ++ bl dump_stack ++.L1414: ++ mov r0, r4 ++ bl ftl_free_sblk ++ ldr r3, [r6, #1096] ++ ldrh r1, [r3, #124] ++ cmp r1, #0 ++ beq .L1415 ++ add r0, r3, #392 ++ mov r2, #0 ++.L1417: ++ ldrh ip, [r0], #2 ++ cmp r4, ip ++ bne .L1416 ++ add r2, r2, #196 ++ mvn r0, #0 ++ lsl r2, r2, #1 ++ add r1, r1, r0 ++ strh r0, [r3, r2] @ movhi ++ strh r1, [r3, #124] @ movhi ++.L1415: ++ ldrh r1, [r3, #120] ++ cmp r1, #0 ++ beq .L1418 ++ add r0, r3, #136 ++ mov r2, #0 ++.L1420: ++ ldrh ip, [r0], #2 ++ cmp r4, ip ++ bne .L1419 ++ mvn r0, #0 ++ add r2, r3, r2, lsl #1 ++ add r1, r1, r0 ++ strh r0, [r2, #136] @ movhi ++ strh r1, [r3, #120] @ movhi ++.L1418: ++ ldrh r1, [r3, #122] ++ cmp r1, #0 ++ beq .L1421 ++ add r0, r3, #264 ++ mov r2, #0 ++.L1423: ++ ldrh ip, [r0], #2 ++ cmp r4, ip ++ bne .L1422 ++ add r2, r2, #132 ++ mvn r0, #0 ++ lsl r2, r2, #1 ++ add r1, r1, r0 ++ strh r0, [r3, r2] @ movhi ++ strh r1, [r3, #122] @ movhi ++.L1421: ++ add r5, r5, #1 ++ b .L1410 ++.L1416: ++ add r2, r2, #1 ++ cmp r2, #64 ++ bne .L1417 ++ b .L1415 ++.L1419: ++ add r2, r2, #1 ++ cmp r2, #64 ++ bne .L1420 ++ b .L1418 ++.L1422: ++ add r2, r2, #1 ++ cmp r2, #64 ++ bne .L1423 ++ b .L1421 ++.L1412: ++ mov r1, #1 ++ mov r0, r4 ++ bl gc_add_sblk ++ b .L1421 ++.L1448: ++ .align 2 ++.L1447: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2824 ++ .word .LC110 ++ .word .LANCHOR2 ++ .word .LC111 ++ .word .LANCHOR1+1581 ++ .word .LC0 ++ .fnend ++ .size gc_free_src_blk, .-gc_free_src_blk ++ .align 2 ++ .global print_ftl_debug_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type print_ftl_debug_info, %function ++print_ftl_debug_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ .pad #32 ++ sub sp, sp, #32 ++ ldr r4, .L1451 ++ ldr r1, [r4, #2800] ++ add r3, r4, #2784 ++ ldr r0, [r4, #1096] ++ ldr ip, [r4, #2780] ++ ldrh r2, [r1, #146] ++ ldrh r3, [r3] ++ ldrh r1, [r1, #148] ++ str ip, [sp, #28] ++ ldr ip, [r0, #528] ++ str ip, [sp, #24] ++ ldr r0, [r0, #524] ++ str r0, [sp, #20] ++ movw r0, #2794 ++ ldrh r0, [r4, r0] ++ str r0, [sp, #16] ++ movw r0, #2792 ++ ldrh r0, [r4, r0] ++ str r0, [sp, #12] ++ movw r0, #2790 ++ ldrh r0, [r4, r0] ++ str r0, [sp, #8] ++ movw r0, #2788 ++ ldrh r0, [r4, r0] ++ str r0, [sp, #4] ++ movw r0, #2786 ++ ldrh r0, [r4, r0] ++ str r0, [sp] ++ ldr r0, .L1451+4 ++ bl rk_printk ++ ldr r1, [r4, #2800] ++ ldrb r3, [r4, #2797] @ zero_extendqisi2 ++ ldr r0, .L1451+8 ++ ldr r2, [r1, #64] ++ str r2, [sp, #4] ++ ldr r2, [r1, #8] ++ str r2, [sp] ++ ldr r2, [r1, #28] ++ ldr r1, [r1, #20] ++ bl rk_printk ++ ldr r1, [r4, #2800] ++ ldr r0, .L1451+12 ++ ldr r3, [r1, #16] ++ ldr r2, [r1, #60] ++ ldr r1, [r1, #52] ++ lsr r3, r3, #11 ++ bl rk_printk ++ ldr r2, [r4, #2800] ++ ldrh r0, [r2, #98] ++ ldrh r3, [r2, #88] ++ ldrh r1, [r2, #74] ++ str r0, [sp, #24] ++ ldrh r0, [r2, #94] ++ str r0, [sp, #20] ++ ldrh r0, [r2, #90] ++ str r0, [sp, #16] ++ ldr r0, [r2, #80] ++ str r0, [sp, #12] ++ ldrh r0, [r2, #72] ++ str r0, [sp, #8] ++ ldrh r0, [r2, #96] ++ str r0, [sp, #4] ++ ldrh r0, [r2, #92] ++ str r0, [sp] ++ ldr r0, .L1451+16 ++ ldr r2, [r2, #84] ++ bl rk_printk ++ movw r0, #2804 ++ movw r3, #2818 ++ ldrh r0, [r4, r0] ++ movw r2, #2806 ++ movw r1, #2808 ++ ldrh r3, [r4, r3] ++ ldrh r2, [r4, r2] ++ str r0, [sp, #4] ++ add r0, r4, #2816 ++ ldrh r0, [r0] ++ ldrh r1, [r4, r1] ++ str r0, [sp] ++ ldr r0, .L1451+20 ++ bl rk_printk ++ ldr ip, [r4, #2800] ++ movw r2, #586 ++ ldr r0, [r4, #1096] ++ ldrh lr, [ip, #150] ++ add r3, r0, #588 ++ add r1, r0, #584 ++ ldrh r2, [r0, r2] ++ ldrh r3, [r3] ++ ldrh r1, [r1] ++ str lr, [sp, #8] ++ ldr ip, [ip, #156] ++ str ip, [sp, #4] ++ movw ip, #590 ++ ldrh r0, [r0, ip] ++ str r0, [sp] ++ ldr r0, .L1451+24 ++ bl rk_printk ++ add sp, sp, #32 ++ @ sp needed ++ pop {r4, pc} ++.L1452: ++ .align 2 ++.L1451: ++ .word .LANCHOR0 ++ .word .LC112 ++ .word .LC113 ++ .word .LC114 ++ .word .LC115 ++ .word .LC116 ++ .word .LC117 ++ .fnend ++ .size print_ftl_debug_info, .-print_ftl_debug_info ++ .align 2 ++ .global ftl_write_buf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_write_buf, %function ++ftl_write_buf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ subs r4, r0, #0 ++ bne .L1454 ++ movw r2, #811 ++ ldr r1, .L1464 ++ ldr r0, .L1464+4 ++ bl rk_printk ++ bl dump_stack ++ bl print_ftl_debug_info ++ mvn r0, #0 ++ pop {r4, r5, r6, pc} ++.L1457: ++ mov r1, r4 ++ ldr r0, .L1464+8 ++ bl buf_add_tail ++ ldr r3, [r6, #2800] ++ ldrb r1, [r4, #40] @ zero_extendqisi2 ++ ldrb r0, [r6, #2796] @ zero_extendqisi2 ++ ldr r2, [r3, #16] ++ add r0, r0, #1 ++ add r2, r2, r1 ++ uxtb r0, r0 ++ str r2, [r3, #16] ++ ldr r2, [r3, #32] ++ strb r0, [r6, #2796] ++ add r2, r2, #1 ++ str r2, [r3, #32] ++ pop {r4, r5, r6, pc} ++.L1454: ++ ldr r3, .L1464+12 ++ ldrb r1, [r4, #40] @ zero_extendqisi2 ++ ldrb r2, [r3, #-2546] @ zero_extendqisi2 ++ mov r5, r3 ++ cmp r1, r2 ++ bls .L1459 ++ movw r2, #818 ++ ldr r1, .L1464 ++ ldr r0, .L1464+4 ++ bl rk_printk ++ bl dump_stack ++.L1459: ++ ldrb r3, [r4, #40] @ zero_extendqisi2 ++ ldr r6, .L1464+16 ++ cmp r3, #0 ++ beq .L1456 ++ ldrb r2, [r5, #-2546] @ zero_extendqisi2 ++ cmp r2, r3 ++ bcs .L1457 ++.L1456: ++ mov r0, r4 ++ bl zbuf_free ++ ldrb r0, [r6, #2796] @ zero_extendqisi2 ++ pop {r4, r5, r6, pc} ++.L1465: ++ .align 2 ++.L1464: ++ .word .LANCHOR1+1597 ++ .word .LC0 ++ .word .LANCHOR0+2820 ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_write_buf, .-ftl_write_buf ++ .align 2 ++ .global ftl_write_completed ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_write_completed, %function ++ftl_write_completed: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ mov r10, #0 ++ ldr r8, .L1483 ++ ldr r9, .L1483+4 ++ mov r6, r8 ++.L1467: ++ ldrb r5, [r8, #2773] @ zero_extendqisi2 ++ cmp r5, #255 ++ bne .L1478 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1478: ++ mov r2, #48 ++ ldr r3, .L1483+8 ++ mul r2, r2, r5 ++ add r7, r5, r5, lsl #1 ++ add r7, r3, r7, lsl #4 ++ add r4, r8, r2 ++ ldrb r1, [r4, #1232] @ zero_extendqisi2 ++ strb r1, [r8, #2773] ++ ldr r1, [r4, #1268] ++ cmn r1, #1 ++ bne .L1468 ++ ldr r1, .L1483+12 ++ ldrb r3, [r1, #-2542] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L1469 ++ ldrb r3, [r1, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L1470 ++.L1469: ++ ldr r3, [r6, #2800] ++ ldr r3, [r3, #156] ++ cmp r3, r9 ++ beq .L1471 ++.L1470: ++ mov r10, #48 ++ ldr r3, .L1483+16 ++ mla r10, r10, r5, r6 ++ ldrb r1, [r1, #-3136] @ zero_extendqisi2 ++ ldrh r0, [r3] ++ ldrb r3, [r6, #1153] @ zero_extendqisi2 ++ ldr r2, [r10, #1256] ++ rsb r3, r3, #24 ++ sub r3, r3, r0 ++ lsr r2, r2, r0 ++ mvn r0, #0 ++ bic r0, r2, r0, lsl r3 ++ bl __aeabi_uidiv ++ ldr r3, [r6, #1096] ++ uxth r4, r0 ++ movw r2, #65535 ++ ldr r0, .L1483+20 ++ ldr r1, [r3, #560] ++ cmp r1, r2 ++ mov r1, r4 ++ streq r4, [r3, #560] ++ ldreq r2, [r10, #1256] ++ streq r2, [r3, #564] ++ mov r3, #48 ++ mla r5, r3, r5, r6 ++ ldr r3, [r5, #1256] ++ ldr r2, [r5, #1252] ++ bl rk_printk ++ ldr r3, [r6, #1096] ++ ldr r2, [r3, #556] ++ add r2, r2, #1 ++ str r2, [r3, #556] ++ ldrh r2, [r3, #16] ++ cmp r2, r4 ++ moveq r2, #0 ++ strheq r2, [r3, #22] @ movhi ++ beq .L1471 ++ ldrh r2, [r3, #48] ++ cmp r2, r4 ++ moveq r2, #0 ++ strheq r2, [r3, #54] @ movhi ++.L1471: ++ mov r0, r7 ++ mov r10, #1 ++ bl ftl_write_buf ++ b .L1467 ++.L1468: ++ cmp r10, #1 ++ bne .L1476 ++ ldr r2, [r4, #1256] ++ ldr r1, [r4, #1252] ++ ldr r0, .L1483+24 ++ bl rk_printk ++ mov r0, r7 ++ bl ftl_write_buf ++ b .L1467 ++.L1476: ++ add r3, r3, r2 ++ ldr r1, [r4, #1260] ++ ldrh r2, [r3, #32] ++ ldr r0, [r4, #1252] ++ bl lpa_hash_update_ppa ++ ldrb r3, [r4, #1234] @ zero_extendqisi2 ++ tst r3, #4 ++ bicne r3, r3, #2 ++ strbne r3, [r4, #1234] ++ bne .L1467 ++ mov r0, r7 ++ bl zbuf_free ++ b .L1467 ++.L1484: ++ .align 2 ++.L1483: ++ .word .LANCHOR0 ++ .word 1145785929 ++ .word .LANCHOR0+1232 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3138 ++ .word .LC118 ++ .word .LC119 ++ .fnend ++ .size ftl_write_completed, .-ftl_write_completed ++ .align 2 ++ .global zftl_add_read_buf ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_add_read_buf, %function ++zftl_add_read_buf: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ subs r5, r0, #0 ++ bne .L1486 ++ movw r2, #1151 ++ ldr r1, .L1491 ++ ldr r0, .L1491+4 ++ bl rk_printk ++ bl dump_stack ++ pop {r4, r5, r6, lr} ++ b print_ftl_debug_info ++.L1486: ++ ldr r4, .L1491+8 ++ ldrb r2, [r5, #40] @ zero_extendqisi2 ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ cmp r2, r3 ++ bls .L1488 ++ movw r2, #1158 ++ ldr r1, .L1491 ++ ldr r0, .L1491+4 ++ bl rk_printk ++ bl dump_stack ++.L1488: ++ mov r1, r5 ++ ldr r0, .L1491+12 ++ bl buf_add_tail ++ ldrb r3, [r4, #-2535] @ zero_extendqisi2 ++ add r3, r3, #1 ++ strb r3, [r4, #-2535] ++ pop {r4, r5, r6, pc} ++.L1492: ++ .align 2 ++.L1491: ++ .word .LANCHOR1+1611 ++ .word .LC0 ++ .word .LANCHOR3 ++ .word .LANCHOR3-2536 ++ .fnend ++ .size zftl_add_read_buf, .-zftl_add_read_buf ++ .align 2 ++ .global sblk_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sblk_init, %function ++sblk_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1494 ++ mvn r2, #0 ++ mov r0, #0 ++ strb r2, [r3, #2770] ++ strb r2, [r3, #2773] ++ strb r2, [r3, #2771] ++ strb r2, [r3, #2772] ++ bx lr ++.L1495: ++ .align 2 ++.L1494: ++ .word .LANCHOR0 ++ .fnend ++ .size sblk_init, .-sblk_init ++ .align 2 ++ .global dump_sblk_queue ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type dump_sblk_queue, %function ++dump_sblk_queue: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r5, .L1506 ++ ldr r0, .L1506+4 ++ ldrb r1, [r5, #2770] @ zero_extendqisi2 ++ bl rk_printk ++ ldrb r4, [r5, #2770] @ zero_extendqisi2 ++ cmp r4, #255 ++ popeq {r4, r5, r6, pc} ++ add r4, r4, r4, lsl #1 ++ add r5, r5, #1232 ++ ldr r6, .L1506+8 ++ add r4, r5, r4, lsl #4 ++.L1498: ++ ldr r3, [r4, #24] ++ mov r0, r6 ++ ldrb r2, [r4, #42] @ zero_extendqisi2 ++ ldrb r1, [r4, #1] @ zero_extendqisi2 ++ bl rk_printk ++ ldrb r4, [r4] @ zero_extendqisi2 ++ cmp r4, #255 ++ popeq {r4, r5, r6, pc} ++ add r4, r4, r4, lsl #1 ++ add r4, r5, r4, lsl #4 ++ b .L1498 ++.L1507: ++ .align 2 ++.L1506: ++ .word .LANCHOR0 ++ .word .LC120 ++ .word .LC121 ++ .fnend ++ .size dump_sblk_queue, .-dump_sblk_queue ++ .align 2 ++ .global queue_lun_state ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type queue_lun_state, %function ++queue_lun_state: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr lr, .L1520 ++ ldrb ip, [lr, #2770] @ zero_extendqisi2 ++ cmp ip, #255 ++ beq .L1516 ++ ldrb r3, [lr, #1153] @ zero_extendqisi2 ++ mov r2, #1 ++ mov r8, #48 ++ movw r10, #1274 ++ rsb r6, r3, #24 ++ lsl r3, r2, r3 ++ sub r3, r3, #1 ++ uxth r3, r3 ++ and r4, r3, r0, asr r6 ++ str r4, [sp] ++ ldr r4, .L1520+4 ++ sub r5, r4, #3136 ++ ldrb r4, [r4, #-3136] @ zero_extendqisi2 ++ ldrh r7, [r5, #-2] ++ sub r4, r4, #1 ++ sub r5, r6, r7 ++ uxth r4, r4 ++ lsl r2, r2, r5 ++ and r0, r4, r0, asr r7 ++ sub r2, r2, #1 ++ uxth r2, r2 ++ and r0, r0, r2 ++ str r0, [sp, #4] ++.L1515: ++ mla r0, r8, ip, lr ++ ldr r9, [sp] ++ movw r5, #1256 ++ ldr r5, [r0, r5] ++ and fp, r3, r5, lsr r6 ++ cmp r9, fp ++ bne .L1510 ++ and r5, r4, r5, lsr r7 ++ ldr r9, [sp, #4] ++ ldrb r0, [r0, r10] @ zero_extendqisi2 ++ and r5, r5, r2 ++ cmp r9, r5 ++ bne .L1511 ++ cmp r1, #1 ++ bne .L1508 ++.L1513: ++ sub r5, r0, #7 ++ tst r5, #253 ++ beq .L1510 ++.L1508: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1511: ++ cmp r1, #3 ++ ldrls pc, [pc, r1, asl #2] ++ b .L1510 ++.L1512: ++ .word .L1508 ++ .word .L1513 ++ .word .L1514 ++ .word .L1508 ++.L1514: ++ cmp r0, #11 ++ bne .L1508 ++.L1510: ++ mla ip, r8, ip, lr ++ ldrb ip, [ip, #1232] @ zero_extendqisi2 ++ cmp ip, #255 ++ bne .L1515 ++.L1516: ++ mov r0, #0 ++ b .L1508 ++.L1521: ++ .align 2 ++.L1520: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .fnend ++ .size queue_lun_state, .-queue_lun_state ++ .align 2 ++ .global queue_remove_completed_req ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type queue_remove_completed_req, %function ++queue_remove_completed_req: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1548 ++ mov ip, #0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r7, .L1548+4 ++ mov r0, #48 ++ mvn r4, #0 ++ movw r5, #1275 ++ ldrb r1, [r3, #2771] @ zero_extendqisi2 ++ movw r6, #1233 ++ ldrb r2, [r3, #2770] @ zero_extendqisi2 ++ add r8, r3, #1232 ++ add r9, r7, #1 ++ add r10, r7, #2 ++ str r1, [sp, #8] ++ ldrb r1, [r3, #2773] @ zero_extendqisi2 ++ str r1, [sp, #12] ++ ldrb r1, [r3, #2772] @ zero_extendqisi2 ++ str r1, [sp, #4] ++.L1523: ++ cmp r2, #255 ++ beq .L1524 ++ mla fp, r0, r2, r3 ++ movw lr, #1274 ++ mov r1, r2 ++ ldrb lr, [fp, lr] @ zero_extendqisi2 ++ sub lr, lr, #12 ++ cmp lr, #1 ++ bls .L1525 ++ cmp ip, #0 ++ beq .L1522 ++.L1547: ++ strb r2, [r3, #2770] ++ b .L1522 ++.L1525: ++ mul ip, r0, r1 ++ ldrb r2, [fp, #1232] @ zero_extendqisi2 ++ add lr, r3, ip ++ ldrb fp, [lr, r5] @ zero_extendqisi2 ++ strb r4, [lr, #1232] ++ cmp fp, #1 ++ bne .L1528 ++ add ip, r8, ip ++ ldrh ip, [ip, #34] ++ cmp ip, #0 ++ ldreq ip, [sp, #12] ++ moveq lr, r10 ++ ldrne ip, [sp, #4] ++ movne lr, r9 ++.L1529: ++ cmp ip, #255 ++ bne .L1534 ++ strb r2, [r3, #2770] ++ mov r2, #48 ++ mla r3, r2, r1, r3 ++ ldrb r3, [r3, #1233] @ zero_extendqisi2 ++ strb r3, [lr] ++.L1522: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1528: ++ cmp fp, #0 ++ bne .L1530 ++ ldr ip, [lr, #1252] ++ cmn ip, #1 ++ ldrne ip, [sp, #8] ++ movne lr, r7 ++ bne .L1529 ++.L1530: ++ mov ip, #1 ++ b .L1523 ++.L1534: ++ mov lr, ip ++ mla ip, r0, ip, r3 ++ ldrb ip, [ip, #1232] @ zero_extendqisi2 ++ cmp ip, #255 ++ bne .L1534 ++ mla r1, r0, r1, r3 ++ mla lr, r0, lr, r3 ++ ldrb r1, [r1, r6] @ zero_extendqisi2 ++ strb r1, [lr, #1232] ++ b .L1530 ++.L1524: ++ cmp ip, #0 ++ beq .L1522 ++ mvn r2, #0 ++ b .L1547 ++.L1549: ++ .align 2 ++.L1548: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2771 ++ .fnend ++ .size queue_remove_completed_req, .-queue_remove_completed_req ++ .align 2 ++ .global pm_select_ram_region ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_select_ram_region, %function ++pm_select_ram_region: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r1, .L1561 ++ mov r3, #0 ++ movw r0, #65535 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ add r2, r1, #4 ++.L1552: ++ lsl ip, r3, #3 ++ uxth r4, r3 ++ ldrh ip, [ip, r1] ++ cmp ip, r0 ++ beq .L1551 ++ add r3, r3, #1 ++ cmp r3, #32 ++ bne .L1552 ++ mov r4, r3 ++ mov r1, #0 ++ mov r3, #32768 ++ sub ip, r2, #4 ++.L1554: ++ add r0, ip, r1, lsl #3 ++ uxth lr, r1 ++ ldrh r0, [r0, #2] ++ tst r0, #32768 ++ bne .L1553 ++ cmp r0, r3 ++ movcc r3, r0 ++ movcc r4, lr ++.L1553: ++ add r1, r1, #1 ++ cmp r1, #32 ++ bne .L1554 ++ cmp r4, #32 ++ bne .L1551 ++ ldr r3, .L1561+4 ++ mvn r1, #0 ++ sub r2, r2, #4 ++ ldrb lr, [r3, #-2276] @ zero_extendqisi2 ++ mov r3, #0 ++.L1556: ++ lsl ip, r3, #3 ++ uxth r5, r3 ++ add r0, r2, ip ++ ldrh r0, [r0, #2] ++ cmp r0, r1 ++ bcs .L1555 ++ ldrh ip, [ip, r2] ++ cmp ip, lr ++ movne r1, r0 ++ movne r4, r5 ++.L1555: ++ add r3, r3, #1 ++ cmp r3, #32 ++ bne .L1556 ++ cmp r4, #32 ++ bne .L1551 ++ movw r2, #377 ++ ldr r1, .L1561+8 ++ ldr r0, .L1561+12 ++ bl rk_printk ++ bl dump_stack ++.L1551: ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L1562: ++ .align 2 ++.L1561: ++ .word .LANCHOR3-2532 ++ .word .LANCHOR3 ++ .word .LANCHOR1+1629 ++ .word .LC0 ++ .fnend ++ .size pm_select_ram_region, .-pm_select_ram_region ++ .align 2 ++ .global ftl_memset ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_memset, %function ++ftl_memset: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b memset ++ .fnend ++ .size ftl_memset, .-ftl_memset ++ .align 2 ++ .global flash_lsb_page_tbl_build ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_lsb_page_tbl_build, %function ++flash_lsb_page_tbl_build: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r6, r0 ++ ldr r5, .L1618 ++ mov r0, #1024 ++ ldr r3, [r5, #1104] ++ ldrb r1, [r3, #12] @ zero_extendqisi2 ++ bl __aeabi_idiv ++ cmp r6, #0 ++ uxth r4, r0 ++ bne .L1565 ++ add r5, r5, #4 ++.L1566: ++ lsl r3, r6, #1 ++ strh r6, [r3, r5] @ movhi ++ add r6, r6, #1 ++ cmp r6, #512 ++ bne .L1566 ++.L1572: ++ mov r2, #2048 ++ mov r1, #255 ++ ldr r0, .L1618+4 ++ bl ftl_memset ++ ldr ip, .L1618+8 ++ mov r3, #0 ++ ldr r0, .L1618+4 ++.L1567: ++ lsl r2, r3, #1 ++ add r3, r3, #1 ++ ldrh r2, [r2, ip] ++ lsl r1, r2, #1 ++ strh r2, [r0, r1] @ movhi ++ uxth r2, r3 ++ cmp r2, r4 ++ bcc .L1567 ++ pop {r4, r5, r6, pc} ++.L1565: ++ cmp r6, #1 ++ bne .L1568 ++ mov r3, #0 ++ add r5, r5, #4 ++.L1571: ++ cmp r3, #3 ++ uxth r2, r3 ++ bls .L1569 ++ tst r2, #1 ++ movne r1, #3 ++ moveq r1, #2 ++ rsb r2, r1, r2, lsl #1 ++ uxth r2, r2 ++.L1569: ++ lsl r1, r3, #1 ++ add r3, r3, #1 ++ cmp r3, #512 ++ strh r2, [r1, r5] @ movhi ++ bne .L1571 ++ b .L1572 ++.L1568: ++ cmp r6, #2 ++ bne .L1573 ++ mov r2, #0 ++ add r5, r5, #4 ++.L1575: ++ uxth r3, r2 ++ cmp r2, #1 ++ lsl r1, r2, #1 ++ add r2, r2, #1 ++ lslhi r3, r3, #1 ++ subhi r3, r3, #1 ++ uxthhi r3, r3 ++ cmp r2, #512 ++ strh r3, [r1, r5] @ movhi ++ bne .L1575 ++ b .L1572 ++.L1573: ++ cmp r6, #3 ++ bne .L1576 ++ mov r3, #0 ++ add r5, r5, #4 ++.L1579: ++ cmp r3, #5 ++ uxth r2, r3 ++ bls .L1577 ++ tst r2, #1 ++ movne r1, #5 ++ moveq r1, #4 ++ rsb r2, r1, r2, lsl #1 ++ uxth r2, r2 ++.L1577: ++ lsl r1, r3, #1 ++ add r3, r3, #1 ++ cmp r3, #512 ++ strh r2, [r1, r5] @ movhi ++ bne .L1579 ++ b .L1572 ++.L1576: ++ cmp r6, #4 ++ mov r2, r5 ++ mov r3, #0 ++ bne .L1580 ++ strh r3, [r5, #4] @ movhi ++ mov r3, #1 ++ strh r3, [r5, #6] @ movhi ++ mov r3, #2 ++ strh r3, [r5, #8] @ movhi ++ mov r3, #3 ++ strh r3, [r5, #10] @ movhi ++ mov r3, #5 ++ strh r3, [r5, #14] @ movhi ++ mov r3, #7 ++ strh r3, [r5, #16] @ movhi ++ mov r3, #8 ++ strh r6, [r5, #12] @ movhi ++ strh r3, [r5, #18]! @ movhi ++.L1582: ++ tst r3, #1 ++ movne r2, #7 ++ moveq r2, #6 ++ rsb r2, r2, r3, lsl #1 ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r2, [r5, #2]! @ movhi ++ cmp r3, #512 ++ bne .L1582 ++ b .L1572 ++.L1580: ++ cmp r6, #5 ++ bne .L1583 ++ add r1, r5, #4 ++.L1584: ++ lsl r0, r3, #1 ++ strh r3, [r0, r1] @ movhi ++ add r3, r3, #1 ++ cmp r3, #16 ++ bne .L1584 ++ add r2, r2, #34 ++.L1585: ++ strh r3, [r2, #2]! @ movhi ++ add r3, r3, #2 ++ uxth r3, r3 ++ cmp r3, #1008 ++ bne .L1585 ++ b .L1572 ++.L1583: ++ cmp r6, #8 ++ bne .L1586 ++ add r5, r5, #4 ++.L1587: ++ strh r3, [r3, r5] @ movhi ++ add r3, r3, #2 ++ cmp r3, #1024 ++ bne .L1587 ++ b .L1572 ++.L1586: ++ cmp r6, #9 ++ bne .L1588 ++ strh r3, [r5, #4] @ movhi ++ mov r3, #1 ++ strh r3, [r5, #6] @ movhi ++ mov r3, #2 ++ strh r3, [r5, #8]! @ movhi ++ movw r2, #1021 ++ mov r3, #3 ++.L1589: ++ strh r3, [r5, #2]! @ movhi ++ add r3, r3, #2 ++ uxth r3, r3 ++ cmp r3, r2 ++ bne .L1589 ++ b .L1572 ++.L1588: ++ cmp r6, #10 ++ bne .L1590 ++ add r1, r5, #4 ++.L1591: ++ lsl r0, r3, #1 ++ strh r3, [r0, r1] @ movhi ++ add r3, r3, #1 ++ cmp r3, #63 ++ bne .L1591 ++ add r2, r2, #128 ++ movw r1, #961 ++.L1592: ++ strh r3, [r2, #2]! @ movhi ++ add r3, r3, #2 ++ uxth r3, r3 ++ cmp r3, r1 ++ bne .L1592 ++ b .L1572 ++.L1590: ++ cmp r6, #11 ++ bne .L1593 ++ ldr r1, .L1618+8 ++ mov r3, #0 ++.L1594: ++ lsl r0, r3, #1 ++ strh r3, [r0, r1] @ movhi ++ add r3, r3, #1 ++ cmp r3, #8 ++ bne .L1594 ++ add r2, r2, #18 ++.L1596: ++ tst r3, #1 ++ movne r1, #7 ++ moveq r1, #6 ++ rsb r1, r1, r3, lsl #1 ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r1, [r2, #2]! @ movhi ++ cmp r3, #512 ++ bne .L1596 ++ b .L1572 ++.L1593: ++ cmp r6, #13 ++ bne .L1572 ++ ldr r2, .L1618+12 ++ mov r3, #0 ++.L1597: ++ strh r3, [r2, #2]! @ movhi ++ add r3, r3, #3 ++ uxth r3, r3 ++ cmp r3, #1536 ++ bne .L1597 ++ b .L1572 ++.L1619: ++ .align 2 ++.L1618: ++ .word .LANCHOR0 ++ .word .LANCHOR3-2272 ++ .word .LANCHOR0+4 ++ .word .LANCHOR0+2 ++ .fnend ++ .size flash_lsb_page_tbl_build, .-flash_lsb_page_tbl_build ++ .align 2 ++ .global flash_die_info_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_die_info_init, %function ++flash_die_info_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L1638 ++ ldr r3, [r4] ++ tst r3, #4096 ++ beq .L1621 ++ ldr r1, .L1638+4 ++ ldr r0, .L1638+8 ++ bl rk_printk ++.L1621: ++ ldrh r3, [r4, #30] ++ mov r7, #0 ++ ldr r5, .L1638+12 ++ ldr r9, .L1638+16 ++ ldr r6, .L1638+20 ++ strh r3, [r5, #2] @ movhi ++ ldrb r1, [r4, #16] @ zero_extendqisi2 ++ add r8, r9, #6 ++ ldrh r0, [r4, #14] ++ mov r10, r8 ++ strb r7, [r5, #1109] ++ bl __aeabi_idiv ++ mov r2, #8 ++ strh r0, [r6, #-224] @ movhi ++ mov r1, r7 ++ ldr r0, .L1638+24 ++ bl ftl_memset ++ mov r2, #32 ++ mov r1, r7 ++ sub r0, r6, #220 ++ bl ftl_memset ++.L1623: ++ mov r3, #2 ++ ldrb r2, [r4, #4] @ zero_extendqisi2 ++ strb r3, [r7, r9] ++ add r1, r8, r7, lsl #3 ++ ldr r0, .L1638+28 ++ bl flash_mem_cmp8 ++ cmp r0, #0 ++ ldr fp, .L1638+28 ++ bne .L1622 ++ ldrb r3, [r5, #1109] @ zero_extendqisi2 ++ add r2, r6, r3, lsl #2 ++ str r0, [r2, #-220] ++ uxtb r0, r7 ++ add r2, r3, #1 ++ add r3, r5, r3 ++ strb r2, [r5, #1109] ++ strb r0, [r3, #1144] ++ bl zftl_flash_enter_slc_mode ++.L1622: ++ add r7, r7, #1 ++ cmp r7, #4 ++ bne .L1623 ++ ldrb r3, [r4, #12] @ zero_extendqisi2 ++ cmp r3, #2 ++ beq .L1624 ++.L1628: ++ ldrb r2, [r4, #17] @ zero_extendqisi2 ++ ldrb r3, [r5, #1109] @ zero_extendqisi2 ++ smulbb r3, r3, r2 ++ ldrh r2, [r4, #18] ++ smulbb r3, r3, r2 ++ strh r3, [r6, #-188] @ movhi ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1624: ++ ldrb r3, [r4, #4] @ zero_extendqisi2 ++ mov r7, #0 ++ ldrh r8, [r5, #2] ++ ldrb r9, [r4, #27] @ zero_extendqisi2 ++ str r3, [sp] ++ ldrh r3, [r4, #18] ++ and r3, r3, #65280 ++ mul r3, r8, r3 ++ ldrb r8, [r4, #17] @ zero_extendqisi2 ++ mul r8, r8, r3 ++ lsl r3, r8, #1 ++.L1627: ++ ldr r2, [sp] ++ add r1, r10, r7, lsl #3 ++ mov r0, fp ++ str r3, [sp, #4] ++ bl flash_mem_cmp8 ++ cmp r0, #0 ++ ldr r3, [sp, #4] ++ bne .L1625 ++ ldrb r2, [r5, #1109] @ zero_extendqisi2 ++ cmp r9, #0 ++ moveq r0, r8 ++ movne r0, r3 ++ add r1, r6, r2, lsl #2 ++ str r0, [r1, #-220] ++ add r1, r2, #1 ++ add r2, r5, r2 ++ strb r1, [r5, #1109] ++ strb r7, [r2, #1144] ++.L1625: ++ add r7, r7, #1 ++ cmp r7, #4 ++ bne .L1627 ++ b .L1628 ++.L1639: ++ .align 2 ++.L1638: ++ .word .LANCHOR2 ++ .word .LANCHOR1+1650 ++ .word .LC4 ++ .word .LANCHOR0 ++ .word .LANCHOR0+1154 ++ .word .LANCHOR3 ++ .word .LANCHOR0+1144 ++ .word .LANCHOR2+5 ++ .fnend ++ .size flash_die_info_init, .-flash_die_info_init ++ .align 2 ++ .global lpa_hash_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type lpa_hash_init, %function ++lpa_hash_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r2, #512 ++ ldr r4, .L1642 ++ mov r1, #255 ++ sub r0, r4, #3056 ++ sub r0, r0, #14 ++ bl ftl_memset ++ sub r3, r4, #3088 ++ ldrb r2, [r4, #-3127] @ zero_extendqisi2 ++ ldrh r3, [r3, #-8] ++ mov r1, #255 ++ ldr r0, [r4, #-2552] ++ pop {r4, lr} ++ mul r2, r2, r3 ++ lsl r2, r2, #2 ++ b ftl_memset ++.L1643: ++ .align 2 ++.L1642: ++ .word .LANCHOR3 ++ .fnend ++ .size lpa_hash_init, .-lpa_hash_init ++ .align 2 ++ .global lpa_rebuild_hash ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type lpa_rebuild_hash, %function ++lpa_rebuild_hash: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1656 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L1645 ++ mov r3, #0 ++ mov r2, #239 ++ ldr r1, .L1656+4 ++ ldr r0, .L1656+8 ++ bl rk_printk ++.L1645: ++ ldr r4, .L1656+12 ++ mov r2, #512 ++ mov r1, #255 ++ sub r5, r4, #3056 ++ sub r6, r4, #3088 ++ sub r5, r5, #14 ++ mov r0, r5 ++ bl ftl_memset ++ ldrh r3, [r6, #-8] ++ mov r1, #255 ++ ldrb r2, [r4, #-3127] @ zero_extendqisi2 ++ ldr r0, [r4, #-2552] ++ mul r2, r2, r3 ++ lsl r2, r2, #2 ++ bl ftl_memset ++ mov r1, #0 ++.L1646: ++ ldrh r0, [r6, #-8] ++ uxth ip, r1 ++ ldrb r3, [r4, #-3127] @ zero_extendqisi2 ++ mov r2, ip ++ mul r3, r3, r0 ++ cmp ip, r3, lsl #1 ++ blt .L1648 ++ pop {r4, r5, r6, pc} ++.L1648: ++ ldr r3, [r4, #-2556] ++ ldr r3, [r3, r2, lsl #2] ++ cmn r3, #1 ++ beq .L1647 ++ uxtb r3, r3 ++ lsl r2, r2, #1 ++ lsl r3, r3, #1 ++ ldrh r0, [r5, r3] ++ strh ip, [r5, r3] @ movhi ++ ldr r3, [r4, #-2552] ++ strh r0, [r3, r2] @ movhi ++.L1647: ++ add r1, r1, #1 ++ b .L1646 ++.L1657: ++ .align 2 ++.L1656: ++ .word .LANCHOR2 ++ .word .LANCHOR1+1670 ++ .word .LC122 ++ .word .LANCHOR3 ++ .fnend ++ .size lpa_rebuild_hash, .-lpa_rebuild_hash ++ .align 2 ++ .global zftl_read_flash_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_read_flash_info, %function ++zftl_read_flash_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r2, #11 ++ mov r1, #0 ++ mov r4, r0 ++ bl ftl_memset ++ ldr r2, .L1662 ++ mov ip, #1 ++ ldr r3, .L1662+4 ++ ldrh r0, [r2, #2] ++ ldrb r1, [r3, #13] @ zero_extendqisi2 ++ smulbb r1, r1, r0 ++ ldr r0, .L1662+8 ++ strh r1, [r4, #4] @ unaligned ++ ldrb r1, [r2, #1193] @ zero_extendqisi2 ++ strb r1, [r4, #7] ++ ldr r1, [r2, #1032] ++ str r1, [r4] @ unaligned ++ ldrb r1, [r3, #13] @ zero_extendqisi2 ++ strb r1, [r4, #6] ++ mov r1, #32 ++ ldrb r3, [r3, #11] @ zero_extendqisi2 ++ strb r1, [r4, #8] ++ ldrb r1, [r2, #1109] @ zero_extendqisi2 ++ strb r3, [r4, #9] ++ mov r3, #0 ++ strb r3, [r4, #10] ++.L1659: ++ uxtb r2, r3 ++ cmp r1, r2 ++ bhi .L1660 ++ pop {r4, pc} ++.L1660: ++ ldrb lr, [r3, r0] @ zero_extendqisi2 ++ add r3, r3, #1 ++ ldrb r2, [r4, #10] @ zero_extendqisi2 ++ orr r2, r2, ip, lsl lr ++ strb r2, [r4, #10] ++ b .L1659 ++.L1663: ++ .align 2 ++.L1662: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR0+1144 ++ .fnend ++ .size zftl_read_flash_info, .-zftl_read_flash_info ++ .align 2 ++ .global gc_static_wearleveling ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_static_wearleveling, %function ++gc_static_wearleveling: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r0, .L1779 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r3, [r0, #2800] ++ ldr r3, [r3, #32] ++ cmp r3, #10240 ++ bls .L1665 ++ bl ftl_tmp_into_update ++.L1665: ++ ldr r3, [r0, #1096] ++ ldr r2, [r3, #568] ++ ldr r1, [r3, #12] ++ add ip, r2, #35840 ++ add ip, ip, #160 ++ cmp r1, ip ++ bcs .L1666 ++ ldr lr, [r0, #2800] ++ ldr ip, [r3, #572] ++ ldr lr, [lr, #36] ++ add ip, ip, #256 ++ cmp lr, ip ++ movcc r0, #0 ++ bcc .L1664 ++.L1666: ++ add r2, r2, #860160 ++ add r2, r2, #3840 ++ cmp r1, r2 ++ bhi .L1668 ++ ldr ip, [r0, #2800] ++ ldr r2, [r3, #572] ++ ldr ip, [ip, #36] ++ add r2, r2, #32 ++ cmp ip, r2 ++ movls r7, #0 ++ movls r5, r7 ++ bls .L1669 ++.L1668: ++ ldr r2, [r0, #2800] ++ mov r4, #0 ++ ldr r5, .L1779 ++ movw r10, #65535 ++ ldr r8, .L1779+4 ++ mov r6, r4 ++ ldr r0, [r2, #36] ++ mov fp, r10 ++ str r1, [r3, #568] ++ ldr r9, .L1779+8 ++ str r0, [r3, #572] ++ ldrh r7, [r2, #134] ++ str r4, [sp, #36] ++ str r4, [sp, #32] ++ str r4, [sp, #28] ++ str r4, [sp, #24] ++ str r4, [sp, #16] ++ str r4, [sp, #20] ++.L1670: ++ ldrh r3, [r8] ++ cmp r3, r7 ++ bhi .L1679 ++ ldr r0, [r5, #1096] ++ mov r3, #0 ++ mov r2, #128 ++ mov r1, #255 ++ strh r3, [r0, #122] @ movhi ++ add r0, r0, #264 ++ bl ftl_memset ++ ldr r2, [r5, #1096] ++ movw r3, #586 ++ ldr r8, [r5, #1084] ++ ldrh r1, [r2, r3] ++ ldr r3, .L1779+8 ++ ldr r3, [r3] ++ lsl r9, r1, #2 ++ add r7, r8, r9 ++ tst r3, #1024 ++ beq .L1680 ++ ldr ip, [r5, #1092] ++ lsl r0, r1, #1 ++ ldr r3, [r8, r1, lsl #2] ++ ldrh r2, [r8, r9] ++ ldrh r0, [ip, r0] ++ ubfx r3, r3, #11, #8 ++ ubfx r2, r2, #0, #11 ++ str r0, [sp, #12] ++ ldrb r0, [r7, #3] @ zero_extendqisi2 ++ str r0, [sp, #8] ++ ldrb r0, [r7, #2] @ zero_extendqisi2 ++ lsr r0, r0, #5 ++ str r0, [sp, #4] ++ ldrb r0, [r7, #2] @ zero_extendqisi2 ++ ubfx r0, r0, #3, #2 ++ str r0, [sp] ++ ldr r0, .L1779+12 ++ bl rk_printk ++.L1680: ++ ldrb r3, [r7, #2] @ zero_extendqisi2 ++ and r3, r3, #224 ++ cmp r3, #32 ++ bne .L1681 ++ ldr r3, .L1779 ++ ldr r3, [r3, #2800] ++ add r3, r3, #688 ++ ldrh r3, [r3] ++ cmp r3, #2 ++ ldrhi r3, .L1779+16 ++ movhi r2, #1 ++ strhi r2, [r3, #-184] ++.L1681: ++ ldrb r2, [r7, #2] @ zero_extendqisi2 ++ tst r2, #8 ++ beq .L1682 ++ ldr r5, .L1779 ++ ldr r3, [r5, #2800] ++ ldrh r1, [r3, #96] ++ ldr r3, .L1779+16 ++ ldrh r0, [r3, #-180] ++ ldrh r3, [r8, r9] ++ ubfx r3, r3, #0, #11 ++ add r3, r3, r0, lsr #2 ++ cmp r1, r3 ++ ble .L1682 ++ and r3, r2, #192 ++ cmp r3, #64 ++ bne .L1683 ++ ldr r0, [r5, #1096] ++ movw r3, #586 ++ mov r2, #1 ++ mov r1, #0 ++ ldrh r0, [r0, r3] ++ bl gc_add_sblk ++ ldr r2, .L1779+20 ++ mov r1, #1 ++ movw r3, #2180 ++ strh r1, [r2, r3] @ movhi ++.L1682: ++ ldr r1, .L1779 ++ ldr r3, [r1, #1096] ++ ldr r7, [r1, #1084] ++ add r3, r3, #584 ++ ldrh r5, [r3] ++ ldr r3, .L1779+8 ++ ldr r3, [r3] ++ lsl r2, r5, #2 ++ add r8, r7, r2 ++ tst r3, #1024 ++ beq .L1684 ++ ldr r0, [r1, #1092] ++ lsl r1, r5, #1 ++ ldr r3, [r7, r5, lsl #2] ++ ldrh r2, [r7, r2] ++ ldrh r1, [r0, r1] ++ ubfx r3, r3, #11, #8 ++ ldr r0, .L1779+24 ++ ubfx r2, r2, #0, #11 ++ str r1, [sp, #12] ++ ldrb r1, [r8, #3] @ zero_extendqisi2 ++ str r1, [sp, #8] ++ ldrb r1, [r8, #2] @ zero_extendqisi2 ++ lsr r1, r1, #5 ++ str r1, [sp, #4] ++ ldrb r1, [r8, #2] @ zero_extendqisi2 ++ ubfx r1, r1, #3, #2 ++ str r1, [sp] ++ mov r1, r5 ++ bl rk_printk ++.L1684: ++ ldrb r3, [r8, #2] @ zero_extendqisi2 ++ tst r3, #8 ++ beq .L1685 ++ ldr r8, .L1779 ++ ldr r2, [r8, #2800] ++ ldrh r1, [r2, #98] ++ ldr r2, .L1779+16 ++ ldrh r0, [r2, #-178] ++ ldr r2, [r7, r5, lsl #2] ++ ubfx r2, r2, #11, #8 ++ add r2, r2, r0, lsr #2 ++ cmp r1, r2 ++ ble .L1685 ++ and r2, r3, #192 ++ cmp r2, #64 ++ bne .L1686 ++ ldr r3, [r8, #1096] ++ mov r2, #1 ++ mov r1, #0 ++ add r3, r3, #584 ++ ldrh r0, [r3] ++ bl gc_add_sblk ++ ldr r2, .L1779+20 ++ mov r1, #1 ++ movw r3, #2180 ++ strh r1, [r2, r3] @ movhi ++.L1685: ++ ldr r3, .L1779+8 ++ ldr r3, [r3] ++ tst r3, #1024 ++ beq .L1687 ++ ldr r1, .L1779 ++ lsl ip, r4, #2 ++ ldr r2, [r1, #1084] ++ add r0, r2, ip ++ ldr r3, [r2, r4, lsl #2] ++ ldrh r2, [r2, ip] ++ ldr ip, [r1, #1092] ++ lsl r1, r4, #1 ++ ubfx r3, r3, #11, #8 ++ ubfx r2, r2, #0, #11 ++ ldrh r1, [ip, r1] ++ str r1, [sp, #12] ++ ldrb r1, [r0, #3] @ zero_extendqisi2 ++ str r1, [sp, #8] ++ ldrb r1, [r0, #2] @ zero_extendqisi2 ++ lsr r1, r1, #5 ++ str r1, [sp, #4] ++ ldrb r1, [r0, #2] @ zero_extendqisi2 ++ ldr r0, .L1779+28 ++ ubfx r1, r1, #3, #2 ++ str r1, [sp] ++ mov r1, r4 ++ bl rk_printk ++.L1687: ++ ldr r3, .L1779+8 ++ ldr r3, [r3] ++ tst r3, #1024 ++ beq .L1688 ++ ldr r1, .L1779 ++ lsl ip, r6, #2 ++ ldr r2, [r1, #1084] ++ add r0, r2, ip ++ ldr r3, [r2, r6, lsl #2] ++ ldrh r2, [r2, ip] ++ ldr ip, [r1, #1092] ++ lsl r1, r6, #1 ++ ubfx r3, r3, #11, #8 ++ ubfx r2, r2, #0, #11 ++ ldrh r1, [ip, r1] ++ str r1, [sp, #12] ++ ldrb r1, [r0, #3] @ zero_extendqisi2 ++ str r1, [sp, #8] ++ ldrb r1, [r0, #2] @ zero_extendqisi2 ++ lsr r1, r1, #5 ++ str r1, [sp, #4] ++ ldrb r1, [r0, #2] @ zero_extendqisi2 ++ ldr r0, .L1779+32 ++ ubfx r1, r1, #3, #2 ++ str r1, [sp] ++ mov r1, r6 ++ bl rk_printk ++.L1688: ++ ldr r5, .L1779 ++ ldrh r3, [sp, #16] ++ ldr r1, [sp, #24] ++ ldr r4, [r5, #2800] ++ ldr r0, [sp, #36] ++ strh r3, [r4, #96] @ movhi ++ ldrh r3, [sp, #20] ++ strh r10, [r4, #92] @ movhi ++ strh fp, [r4, #94] @ movhi ++ strh r3, [r4, #98] @ movhi ++ bl __aeabi_uidiv ++ strh r0, [r4, #88] @ movhi ++ mov r6, r0 ++ ldr r1, [sp, #28] ++ ldr r0, [sp, #32] ++ bl __aeabi_uidiv ++ strh r0, [r4, #90] @ movhi ++ ldr r4, .L1779+8 ++ ldr r3, [r4] ++ tst r3, #1024 ++ beq .L1689 ++ uxth r0, r0 ++ uxth r3, r6 ++ ldr r2, [sp, #28] ++ str r0, [sp] ++ ldr r1, [sp, #24] ++ ldr r0, .L1779+36 ++ bl rk_printk ++.L1689: ++ ldr r3, [r4] ++ ldr r4, .L1779+16 ++ tst r3, #1024 ++ beq .L1690 ++ ldrh r3, [r4, #-178] ++ mov r2, fp ++ mov r1, r10 ++ ldr r0, .L1779+40 ++ str r3, [sp, #8] ++ ldrh r3, [r4, #-180] ++ str r3, [sp, #4] ++ ldr r3, [sp, #20] ++ str r3, [sp] ++ ldr r3, [sp, #16] ++ bl rk_printk ++.L1690: ++ ldr r3, [sp, #20] ++ sub r3, r3, fp ++ str r3, [sp, #24] ++ ldr r2, [sp, #24] ++ ldrh r3, [r4, #-178] ++ cmp r2, r3 ++ bgt .L1691 ++ ldr r3, [sp, #16] ++ ldrh r2, [r4, #-180] ++ sub r3, r3, r10 ++ cmp r3, r2 ++ movle r7, #0 ++ movle r5, r7 ++ ble .L1692 ++.L1691: ++ ldr r3, [r5, #1096] ++ mov r7, #0 ++ ldr r4, [r3, #580] ++ ldr r3, [r5, #2800] ++ mov r5, r7 ++ ldrh r9, [r3, #134] ++ uxth r4, r4 ++ ldr r3, .L1779+20 ++ add r3, r3, #2176 ++ add r3, r3, #4 ++ str r3, [sp, #20] ++.L1693: ++ ldr r3, .L1779+4 ++ ldrh r3, [r3] ++ cmp r9, r3 ++ bcc .L1703 ++.L1702: ++ ldr r3, .L1779 ++ ldr r3, [r3, #1096] ++ str r4, [r3, #580] ++.L1692: ++ cmp fp, #0 ++ beq .L1705 ++ ldr r2, .L1779 ++ ldr r4, .L1779+4 ++ ldr r3, [r2, #2800] ++ mov r0, r2 ++ ldrh r3, [r3, #134] ++.L1706: ++ ldrh r2, [r4] ++ cmp r2, r3 ++ bhi .L1708 ++ ldr r3, [r0, #2800] ++ ldrh r2, [r3, #72] ++ add r2, fp, r2 ++ strh r2, [r3, #72] @ movhi ++ ldrh r2, [r3, #98] ++ cmp fp, r2 ++ subcc r2, r2, fp ++ strhcc r2, [r3, #98] @ movhi ++.L1705: ++ cmp r10, #0 ++ beq .L1711 ++ ldr r3, .L1779 ++ ldr r6, .L1779+4 ++ ldr r2, [r3, #2800] ++ mov ip, r3 ++ ldrh r0, [r2, #134] ++.L1712: ++ ldrh r3, [r6] ++ cmp r3, r0 ++ bhi .L1714 ++ ldr r3, [ip, #2800] ++ ldrh r2, [r3, #74] ++ add r2, r10, r2 ++ strh r2, [r3, #74] @ movhi ++ ldrh r2, [r3, #96] ++ cmp r10, r2 ++ subcc r2, r2, r10 ++ strhcc r2, [r3, #96] @ movhi ++.L1711: ++ ldr r4, .L1779+44 ++ mov r1, #0 ++ sub r0, r4, #12 ++ bl _list_get_gc_head_node ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L1669 ++ ldr r2, .L1779 ++ lsl r3, r0, #1 ++ ldr r1, [r2, #1092] ++ ldrh r2, [r4, #-8] ++ ldrh r3, [r1, r3] ++ cmp r3, r2, lsr #1 ++ bhi .L1669 ++ add r5, r5, #1 ++ mov r2, #1 ++ mov r1, #0 ++ bl gc_add_sblk ++.L1669: ++ add r0, r5, r7 ++.L1664: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1679: ++ ldr r0, [r5, #1084] ++ lsl r1, r7, #2 ++ add ip, r0, r1 ++ ldrb r3, [ip, #2] @ zero_extendqisi2 ++ and r2, r3, #224 ++ cmp r2, #224 ++ beq .L1671 ++ tst r3, #8 ++ beq .L1672 ++ ldrh r2, [r0, r1] ++ ldr r3, [r0, r1] ++ ubfx r2, r2, #0, #11 ++ ubfx r3, r3, #11, #8 ++.L1673: ++ ldr lr, [sp, #24] ++ cmp r10, r2 ++ add lr, lr, #1 ++ uxth lr, lr ++ str lr, [sp, #24] ++ ldr lr, [sp, #36] ++ add lr, lr, r2 ++ str lr, [sp, #36] ++ ldrhi r10, [r5, #1096] ++ movwhi lr, #586 ++ strhhi r7, [r10, lr] @ movhi ++ movhi r10, r2 ++.L1717: ++ ldr lr, [sp, #16] ++ cmp lr, r2 ++ movcc lr, r2 ++ movcc r4, r7 ++ str lr, [sp, #16] ++ movw lr, #65535 ++ cmp r3, lr ++ bne .L1675 ++.L1677: ++ cmp r2, #9 ++ cmphi r3, #9 ++ bhi .L1671 ++ ldr r3, [r9] ++ tst r3, #256 ++ beq .L1671 ++ ldr r3, [r0, r1] ++ ldrh r2, [r0, r1] ++ lsl r1, r7, #1 ++ ldr r0, [r5, #1092] ++ ubfx r3, r3, #11, #8 ++ ubfx r2, r2, #0, #11 ++ ldrh r1, [r0, r1] ++ ldr r0, .L1779+48 ++ str r1, [sp, #12] ++ ldrb r1, [ip, #3] @ zero_extendqisi2 ++ str r1, [sp, #8] ++ ldrb r1, [ip, #2] @ zero_extendqisi2 ++ lsr r1, r1, #5 ++ str r1, [sp, #4] ++ ldrb r1, [ip, #2] @ zero_extendqisi2 ++ ubfx r1, r1, #3, #2 ++ str r1, [sp] ++ mov r1, r7 ++ bl rk_printk ++.L1671: ++ add r7, r7, #1 ++ uxth r7, r7 ++ b .L1670 ++.L1672: ++ tst r3, #24 ++ ldrheq r2, [r0, r1] ++ movweq r3, #65535 ++ ldrne r3, [r0, r1] ++ movwne r2, #65535 ++ ubfxeq r2, r2, #0, #11 ++ ubfxne r3, r3, #11, #8 ++ beq .L1673 ++.L1675: ++ ldr lr, [sp, #28] ++ cmp fp, r3 ++ movhi fp, r3 ++ add lr, lr, #1 ++ uxth lr, lr ++ str lr, [sp, #28] ++ ldr lr, [sp, #32] ++ add lr, lr, r3 ++ str lr, [sp, #32] ++ ldrhi lr, [r5, #1096] ++ addhi lr, lr, #584 ++ strhhi r7, [lr] @ movhi ++ ldr lr, [sp, #20] ++ cmp lr, r3 ++ movcc lr, r3 ++ movcc r6, r7 ++ str lr, [sp, #20] ++ b .L1677 ++.L1683: ++ tst r2, #224 ++ bne .L1682 ++ ldr r3, [r5, #1096] ++ movw r8, #590 ++ movw r2, #65535 ++ ldrh r1, [r3, r8] ++ cmp r1, r2 ++ bne .L1682 ++ movw r7, #586 ++ ldrh r0, [r3, r7] ++ add r3, r3, #588 ++ ldrh r3, [r3] ++ cmp r3, r0 ++ beq .L1682 ++ bl zftl_remove_free_node ++ ldr r3, [r5, #1096] ++ ldrh r2, [r3, r7] ++ strh r2, [r3, r8] @ movhi ++ mvn r2, #0 ++ strh r2, [r3, r7] @ movhi ++ b .L1682 ++.L1686: ++ and r3, r3, #248 ++ cmp r3, #16 ++ bne .L1685 ++ ldr r3, [r8, #1096] ++ add r2, r3, #588 ++ ldrh r1, [r2] ++ movw r2, #65535 ++ cmp r1, r2 ++ bne .L1685 ++ add r2, r3, #584 ++ ldrh r0, [r2] ++ movw r2, #590 ++ ldrh r3, [r3, r2] ++ cmp r3, r0 ++ beq .L1685 ++ bl zftl_remove_free_node ++ ldr r3, [r8, #1096] ++ add r2, r3, #588 ++ add r3, r3, #584 ++ ldrh r1, [r3] ++ strh r1, [r2] @ movhi ++ mvn r2, #0 ++ strh r2, [r3] @ movhi ++ b .L1685 ++.L1703: ++ add r4, r4, #1 ++ uxth r4, r4 ++ cmp r3, r4 ++ ldr r3, .L1779 ++ movls r4, #0 ++ lsl r6, r4, #2 ++ ldr r8, [r3, #1084] ++ add r2, r8, r6 ++ ldrb r2, [r2, #2] @ zero_extendqisi2 ++ and ip, r2, #224 ++ and r1, r2, #192 ++ cmp r1, #0 ++ cmpne ip, #224 ++ beq .L1695 ++ ubfx r2, r2, #3, #2 ++ ldr r0, .L1779+16 ++ ands r1, r2, #1 ++ beq .L1696 ++ cmp ip, #160 ++.L1777: ++ bne .L1698 ++ ldrh r2, [r0, #-178] ++ ldr r0, [sp, #24] ++ cmp r0, r2 ++ ble .L1699 ++ ldr r2, [r8, r6] ++ ubfx r2, r2, #11, #8 ++ cmp r2, fp ++ bls .L1700 ++ cmp r1, #0 ++ beq .L1699 ++ ldrh r2, [r8, r6] ++ ubfx r2, r2, #0, #11 ++ cmp r2, r10 ++ bgt .L1699 ++.L1700: ++ mov r2, #1 ++ mov r1, #0 ++ mov r0, r4 ++ str r3, [sp, #28] ++ bl gc_add_sblk ++ ldr r3, [sp, #20] ++ mov r2, #1 ++ add r5, r5, r2 ++ strh r2, [r3] @ movhi ++ ldr r2, .L1779+8 ++ ldr r3, [sp, #28] ++ ldr r2, [r2] ++ tst r2, #1024 ++ beq .L1699 ++ ldr r1, [r3, #1092] ++ lsl r2, r4, #1 ++ ldr r3, [r3, #1084] ++ ldrh r0, [r1, r2] ++ ldr r1, [r8, r6] ++ add r3, r3, r6 ++ ldrb r2, [r3, #2] @ zero_extendqisi2 ++ ldr r3, .L1779+20 ++ ubfx r1, r1, #11, #8 ++ str r1, [sp, #8] ++ ldrh r1, [r8, r6] ++ lsr r2, r2, #5 ++ ubfx r1, r1, #0, #11 ++ str r1, [sp, #4] ++ mov r1, r4 ++ ldrh r3, [r3, #52] ++ str r3, [sp] ++ mov r3, r0 ++ ldr r0, .L1779+52 ++.L1778: ++ bl rk_printk ++.L1699: ++ cmp r7, #4 ++ cmpls r5, #4 ++ bhi .L1702 ++.L1695: ++ add r9, r9, #1 ++ uxth r9, r9 ++ b .L1693 ++.L1696: ++ cmp r2, #2 ++ b .L1777 ++.L1698: ++ ldr r2, [sp, #16] ++ ldrh r0, [r0, #-180] ++ sub r2, r2, r10 ++ cmp r2, r0 ++ ble .L1699 ++ ldrh r2, [r8, r6] ++ add r0, r10, #8 ++ ubfx r2, r2, #0, #11 ++ cmp r2, r0 ++ ble .L1701 ++ cmp r1, #0 ++ beq .L1699 ++ ldr r2, [r8, r6] ++ add r1, fp, #4 ++ ubfx r2, r2, #11, #8 ++ cmp r2, r1 ++ bgt .L1699 ++.L1701: ++ mov r2, #1 ++ mov r1, #0 ++ mov r0, r4 ++ str r3, [sp, #28] ++ bl gc_add_sblk ++ ldr r3, [sp, #20] ++ mov r2, #1 ++ add r7, r7, r2 ++ strh r2, [r3] @ movhi ++ ldr r2, .L1779+8 ++ ldr r3, [sp, #28] ++ ldr r2, [r2] ++ tst r2, #1024 ++ beq .L1699 ++ ldr r1, [r3, #1092] ++ lsl r2, r4, #1 ++ ldr r3, [r3, #1084] ++ ldrh r0, [r1, r2] ++ ldr r1, [r8, r6] ++ add r3, r3, r6 ++ ldrb r2, [r3, #2] @ zero_extendqisi2 ++ ldr r3, .L1779+20 ++ ubfx r1, r1, #11, #8 ++ str r1, [sp, #8] ++ ldrh r1, [r8, r6] ++ lsr r2, r2, #5 ++ ubfx r1, r1, #0, #11 ++ str r1, [sp, #4] ++ mov r1, r4 ++ ldrh r3, [r3, #52] ++ str r3, [sp] ++ mov r3, r0 ++ ldr r0, .L1779+56 ++ b .L1778 ++.L1708: ++ ldr ip, [r0, #1084] ++ lsl lr, r3, #2 ++ ldr r2, [ip, r3, lsl #2] ++ add r6, ip, lr ++ ubfx r1, r2, #11, #8 ++ cmp fp, r1 ++ bhi .L1707 ++ ldrb r6, [r6, #2] @ zero_extendqisi2 ++ tst r6, #24 ++ subne r1, r1, fp ++ bfine r2, r1, #11, #8 ++ strne r2, [ip, lr] ++.L1707: ++ add r3, r3, #1 ++ uxth r3, r3 ++ b .L1706 ++.L1714: ++ ldr r4, [ip, #1084] ++ lsl lr, r0, #2 ++ ldrh r3, [r4, lr] ++ add r1, r4, lr ++ ubfx r2, r3, #0, #11 ++ cmp r2, r10 ++ blt .L1713 ++ ldrb r1, [r1, #2] @ zero_extendqisi2 ++ and r1, r1, #24 ++ cmp r1, #16 ++ subne r2, r2, r10 ++ bfine r3, r2, #0, #11 ++ strhne r3, [r4, lr] @ movhi ++.L1713: ++ add r0, r0, #1 ++ uxth r0, r0 ++ b .L1712 ++.L1780: ++ .align 2 ++.L1779: ++ .word .LANCHOR0 ++ .word .LANCHOR0+1080 ++ .word .LANCHOR2 ++ .word .LC124 ++ .word .LANCHOR3 ++ .word .LANCHOR0+2824 ++ .word .LC125 ++ .word .LC126 ++ .word .LC127 ++ .word .LC128 ++ .word .LC129 ++ .word .LANCHOR3-3088 ++ .word .LC123 ++ .word .LC130 ++ .word .LC131 ++ .fnend ++ .size gc_static_wearleveling, .-gc_static_wearleveling ++ .align 2 ++ .global zftl_sblk_list_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_sblk_list_init, %function ++zftl_sblk_list_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #1080 ++ ldr r4, .L1813 ++ mov r2, #6 ++ mov r1, #0 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r7, .L1813+4 ++ mov r5, #0 ++ ldrh r3, [r4, r3] ++ add r10, r4, #2784 ++ ldr r0, [r4, #1036] ++ sub r8, r7, #3072 ++ sub r9, r7, #3104 ++ mul r2, r2, r3 ++ bl ftl_memset ++ mov r3, #32 ++ ldrh r1, [r9, #-14] ++ strh r3, [r8, #-4] @ movhi ++ movw r3, #2786 ++ strh r5, [r4, r3] @ movhi ++ movw r3, #2788 ++ strh r5, [r4, r3] @ movhi ++ movw r3, #2790 ++ strh r5, [r4, r3] @ movhi ++ movw r3, #2794 ++ strh r5, [r4, r3] @ movhi ++ movw r3, #2792 ++ strh r5, [r4, r3] @ movhi ++ mov r0, #32768 ++ ldrb r3, [r7, #-3127] @ zero_extendqisi2 ++ str r5, [r7, #-3088] ++ str r5, [r7, #-3084] ++ str r5, [r7, #-3080] ++ mul r1, r1, r3 ++ str r5, [r7, #-3104] ++ str r5, [r7, #-3116] ++ str r5, [r7, #-3100] ++ strh r5, [r10] @ movhi ++ bl __aeabi_idiv ++ sxth r3, r0 ++ str r7, [sp, #8] ++ str r10, [sp, #12] ++ str r3, [sp, #4] ++ ldr r3, [r4, #2800] ++ ldrsh r6, [r3, #134] ++ strh r5, [r3, #146] @ movhi ++.L1782: ++ ldr r3, .L1813+8 ++ ldrh r3, [r3] ++ cmp r6, r3 ++ blt .L1799 ++ ldr r2, [sp, #12] ++ ldr r3, [r4, #2800] ++ ldrh r2, [r2] ++ strh r2, [r3, #114] @ movhi ++ movw r2, #2786 ++ ldrh r2, [r4, r2] ++ strh r2, [r3, #118] @ movhi ++ movw r2, #2788 ++ ldrh r2, [r4, r2] ++ strh r2, [r3, #116] @ movhi ++ movw r2, #2790 ++ ldrh r2, [r4, r2] ++ strh r2, [r3, #122] @ movhi ++ movw r2, #2794 ++ ldrh r2, [r4, r2] ++ strh r2, [r3, #120] @ movhi ++ movw r2, #2792 ++ ldrh r2, [r4, r2] ++ strh r2, [r3, #124] @ movhi ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1799: ++ ldr r7, [r4, #1084] ++ add r7, r7, r6, lsl #2 ++ ldrb r3, [r7, #3] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldreq r1, [sp, #4] ++ beq .L1783 ++ ldr r3, [sp, #8] ++ ldr ip, [r4, #2800] ++ ldrh r10, [r9, #-14] ++ ldrb lr, [r3, #-3127] @ zero_extendqisi2 ++ mov r3, #0 ++ mov r1, r3 ++.L1784: ++ cmp r3, lr ++ blt .L1787 ++ cmp r1, #0 ++ beq .L1788 ++ mov r0, #32768 ++ bl __aeabi_idiv ++ add r1, r0, #1 ++ sxth r1, r1 ++.L1783: ++ lsl fp, r6, #1 ++ ldr r0, [r4, #1036] ++ add r2, fp, r6 ++ lsl r2, r2, #1 ++ add ip, r0, r2 ++ strh r1, [ip, #4] @ movhi ++ mvn r1, #0 ++ strh r1, [ip, #2] @ movhi ++ strh r1, [r0, r2] @ movhi ++ ldrb r2, [r7, #2] @ zero_extendqisi2 ++ and r2, r2, #224 ++ cmp r2, #224 ++ cmpne r2, #32 ++ moveq r10, #1 ++ movne r10, #0 ++ beq .L1789 ++ ldr r1, [r4, #1096] ++ ldrh r0, [r1, #16] ++ cmp r6, r0 ++ beq .L1789 ++ ldrh r0, [r1, #48] ++ cmp r6, r0 ++ beq .L1789 ++ ldrh r1, [r1, #80] ++ cmp r6, r1 ++ beq .L1789 ++ cmp r2, #64 ++ bne .L1790 ++ uxth r7, r6 ++ ldr r2, .L1813+12 ++ sub r0, r9, #12 ++ mov r1, r7 ++.L1811: ++ bl _insert_data_list ++ ldr r2, [r4, #1092] ++ ldrh r3, [r2, fp] ++ cmp r3, #7 ++ movls r2, r10 ++ movls r1, #1 ++ movls r0, r7 ++ bls .L1809 ++.L1789: ++ add r6, r6, #1 ++ sxth r6, r6 ++ b .L1782 ++.L1787: ++ ldrb r2, [r7, #3] @ zero_extendqisi2 ++ asr r2, r2, r3 ++ add r3, r3, #1 ++ tst r2, #1 ++ ldrhne r2, [ip, #146] ++ addeq r1, r10, r1 ++ sxtheq r1, r1 ++ addne r2, r2, #1 ++ strhne r2, [ip, #146] @ movhi ++ b .L1784 ++.L1788: ++ ldrb r3, [r7, #2] @ zero_extendqisi2 ++ mvn r0, #0 ++ orr r3, r3, #224 ++ strb r3, [r7, #2] ++ lsl r3, r6, #1 ++ ldr r2, [r4, #1092] ++ strh r0, [r2, r3] @ movhi ++ b .L1783 ++.L1790: ++ cmp r2, #96 ++ uxtheq r7, r6 ++ ldreq r2, .L1813+16 ++ ldreq r0, .L1813+20 ++ moveq r1, r7 ++ beq .L1811 ++.L1791: ++ cmp r2, #160 ++ uxtheq r7, r6 ++ ldreq r2, .L1813+24 ++ ldreq r0, .L1813+28 ++ moveq r1, r7 ++ beq .L1811 ++.L1792: ++ cmp r2, #0 ++ bne .L1789 ++ ldr r2, [r4, #1092] ++ uxth r10, r6 ++ ldrh r2, [r2, fp] ++ cmp r2, #0 ++ beq .L1793 ++ cmp r5, #2 ++ bgt .L1794 ++ mov r1, r6 ++ ldr r0, .L1813+32 ++ bl rk_printk ++ ldrb r3, [r7, #2] @ zero_extendqisi2 ++ add r5, r5, #1 ++ sxth r5, r5 ++ mov r1, #1 ++ mov r0, r10 ++ tst r3, #16 ++ movne r2, #5 ++ moveq r2, #2 ++ bfi r3, r2, #5, #3 ++ mov r2, #0 ++ strb r3, [r7, #2] ++.L1809: ++ bl gc_add_sblk ++ b .L1789 ++.L1794: ++ mov r2, #656 ++ ldr r1, .L1813+36 ++ ldr r0, .L1813+40 ++ bl rk_printk ++ bl dump_stack ++.L1793: ++ ldrb r3, [r7, #2] @ zero_extendqisi2 ++ ands r3, r3, #24 ++ bne .L1797 ++ ldr r2, .L1813+44 ++ mov r1, r10 ++ ldr r0, .L1813+48 ++.L1807: ++ bl _insert_free_list ++ b .L1789 ++.L1797: ++ cmp r3, #16 ++ ldreq r2, .L1813+52 ++ moveq r1, r10 ++ subeq r0, r8, #12 ++ ldrne r2, .L1813+56 ++ movne r1, r10 ++ subne r0, r8, #8 ++ b .L1807 ++.L1814: ++ .align 2 ++.L1813: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR0+1080 ++ .word .LANCHOR0+2790 ++ .word .LANCHOR0+2792 ++ .word .LANCHOR3-3104 ++ .word .LANCHOR0+2794 ++ .word .LANCHOR3-3100 ++ .word .LC132 ++ .word .LANCHOR1+1687 ++ .word .LC0 ++ .word .LANCHOR0+2784 ++ .word .LANCHOR3-3088 ++ .word .LANCHOR0+2786 ++ .word .LANCHOR0+2788 ++ .fnend ++ .size zftl_sblk_list_init, .-zftl_sblk_list_init ++ .align 2 ++ .global pm_free_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_free_sblk, %function ++pm_free_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 272 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #284 ++ sub sp, sp, #284 ++ ldr r5, .L1843 ++ ldrh r3, [r5, #-176] ++ cmp r3, #128 ++ bls .L1816 ++ mov r2, #94 ++ ldr r1, .L1843+4 ++ ldr r0, .L1843+8 ++ bl rk_printk ++ bl dump_stack ++.L1816: ++ ldr r4, .L1843+12 ++ mov r2, #0 ++ ldrh ip, [r5, #-176] ++ movw lr, #65535 ++ ldr r1, [r4, #2800] ++ add r3, r1, #688 ++ add r1, r1, #416 ++ ldrh r0, [r3] ++ mov r3, r2 ++.L1819: ++ ldrh r6, [r1], #2 ++ cmp r6, lr ++ addne r2, r2, #1 ++ uxthne r2, r2 ++ cmp r2, r0 ++ bcs .L1818 ++ cmp r2, ip ++ bcs .L1818 ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmp r3, #128 ++ bne .L1819 ++.L1818: ++ add r3, r3, #1 ++ mov r2, #256 ++ uxth fp, r3 ++ mov r1, #0 ++ add r0, sp, #24 ++ cmp fp, #129 ++ mov r6, #0 ++ moveq fp, #128 ++ bl ftl_memset ++ ldr r7, [r4, #2800] ++ movw r3, #698 ++ ldrb r8, [r4, #1153] @ zero_extendqisi2 ++ ldrb r2, [r5, #-3136] @ zero_extendqisi2 ++ ldrh r3, [r7, r3] ++ add r10, r7, #704 ++ rsb r8, r8, #24 ++ str r3, [sp, #12] ++ ldr r3, .L1843+16 ++ ldrh r9, [r3, #-2] ++ sub r3, r8, r9 ++ mvn r8, #0 ++ mvn r8, r8, lsl r3 ++.L1821: ++ ldr r1, [sp, #12] ++ uxth r3, r6 ++ cmp r1, r3 ++ bhi .L1824 ++ ldr r3, .L1843+20 ++ add r8, sp, #24 ++ ldrb r7, [r5, #-3127] @ zero_extendqisi2 ++ movw r10, #65535 ++ mov r6, #0 ++ ldrh r3, [r3, #-8] ++ str r6, [sp, #12] ++ smulbb r7, r7, r3 ++ uxth r7, r7 ++.L1830: ++ ldr r2, [r4, #2800] ++ add r3, r6, #208 ++ lsl r3, r3, #1 ++ ldrb r1, [r5, #-3136] @ zero_extendqisi2 ++ uxth r9, r6 ++ ldrh r3, [r2, r3] ++ add r0, r2, #692 ++ ldrh r0, [r0] ++ str r2, [sp, #16] ++ str r3, [sp, #20] ++ bl __aeabi_idiv ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #16] ++ cmp r0, r3 ++ ldreq r0, .L1843+24 ++ ldrbeq r1, [r5, #-3127] @ zero_extendqisi2 ++ ldrheq r0, [r0] ++ smulbbeq r1, r1, r0 ++ strheq r1, [r8] @ movhi ++ ldrh r1, [r8] ++ ldrh ip, [r2, #74] ++ cmp r1, #0 ++ cmpne r1, r7 ++ movcc r0, #1 ++ movcs r0, #0 ++ cmp r0, #0 ++ ldr r0, [sp, #12] ++ movne r0, r9 ++ movne r7, r1 ++ str r0, [sp, #16] ++ str r0, [sp, #12] ++ movw r0, #65535 ++ cmp r3, r0 ++ cmpne ip, #2 ++ bls .L1827 ++ ldr ip, [r4, #1084] ++ lsl r0, r3, #2 ++ ldrh r2, [r2, #92] ++ ldrh r0, [ip, r0] ++ add r2, r2, #4 ++ ubfx r0, r0, #0, #11 ++ cmp r0, r2 ++ bgt .L1827 ++ mov r10, r9 ++ str r0, [sp] ++ mov r2, r1 ++ ldr r0, .L1843+28 ++ mov r1, r6 ++ bl rk_printk ++.L1827: ++ ldrh r2, [r8] ++ cmp r2, #0 ++ bne .L1828 ++ ldr r1, [r4, #2800] ++ add r9, r6, #208 ++ lsl r3, r9, #1 ++ movw r0, #65535 ++ ldrh r3, [r1, r3] ++ cmp r3, r0 ++ beq .L1828 ++ ldr r0, .L1843+32 ++ ldr r0, [r0] ++ tst r0, #4096 ++ beq .L1829 ++ add r1, r1, #688 ++ ldr r0, .L1843+36 ++ ldrh r1, [r1] ++ str r1, [sp] ++ mov r1, r6 ++ bl rk_printk ++.L1829: ++ ldr r3, [r4, #2800] ++ lsl r9, r9, #1 ++ ldrh r0, [r3, r9] ++ bl ftl_free_sblk ++ ldr r3, [r4, #2800] ++ mvn r2, #0 ++ strh r2, [r3, r9] @ movhi ++ add r3, r3, #688 ++ ldrh r2, [r3] ++ sub r2, r2, #1 ++ strh r2, [r3] @ movhi ++.L1828: ++ add r6, r6, #1 ++ add r8, r8, #2 ++ uxth r3, r6 ++ cmp fp, r3 ++ bhi .L1830 ++ ldr r3, [sp, #16] ++ movw r0, #65535 ++ cmp r10, r0 ++ movne r3, r10 ++ mov r0, r3 ++ add sp, sp, #284 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1824: ++ ldr r0, [r10], #4 ++ mov r1, r2 ++ str r2, [sp, #16] ++ and r0, r8, r0, lsr r9 ++ bl __aeabi_uidiv ++ ldr r2, [sp, #16] ++ uxth r0, r0 ++ add lr, r7, #416 ++ add r1, sp, #24 ++ mov r3, #0 ++.L1823: ++ ldrh ip, [lr], #2 ++ add r3, r3, #1 ++ uxth r3, r3 ++ add r1, r1, #2 ++ cmp r0, ip ++ ldrheq ip, [r1, #-2] ++ addeq ip, ip, #1 ++ strheq ip, [r1, #-2] @ movhi ++ cmp fp, r3 ++ bne .L1823 ++ add r6, r6, #1 ++ b .L1821 ++.L1844: ++ .align 2 ++.L1843: ++ .word .LANCHOR3 ++ .word .LANCHOR1+1707 ++ .word .LC0 ++ .word .LANCHOR0 ++ .word .LANCHOR3-3136 ++ .word .LANCHOR3-3088 ++ .word .LANCHOR3-3096 ++ .word .LC133 ++ .word .LANCHOR2 ++ .word .LC134 ++ .fnend ++ .size pm_free_sblk, .-pm_free_sblk ++ .align 2 ++ .global ftl_memcpy ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_memcpy, %function ++ftl_memcpy: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b memcpy ++ .fnend ++ .size ftl_memcpy, .-ftl_memcpy ++ .align 2 ++ .global flash_info_data_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_info_data_init, %function ++flash_info_data_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L1852 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L1847 ++ ldr r2, .L1852+4 ++ mov r1, #120 ++ ldr r0, .L1852+8 ++ bl rk_printk ++.L1847: ++ ldr r4, .L1852+12 ++ mov r2, #2048 ++ mov r1, #0 ++ ldr r0, [r4, #1040] ++ bl ftl_memset ++ ldr r3, [r4, #1040] ++ ldr r2, .L1852+16 ++ ldr r1, .L1852+20 ++ str r2, [r3] ++ mov r3, #2032 ++ ldr r0, [r4, #1040] ++ mov r2, #32 ++ str r3, [r0, #8] ++ mov r3, #1 ++ strh r3, [r0, #16] @ movhi ++ add r0, r0, #80 ++ bl ftl_memcpy ++ ldr r0, [r4, #1040] ++ mov r2, #32 ++ ldr r1, .L1852+24 ++ pop {r4, lr} ++ add r0, r0, #48 ++ b ftl_memcpy ++.L1853: ++ .align 2 ++.L1852: ++ .word .LANCHOR2 ++ .word .LANCHOR1+1720 ++ .word .LC135 ++ .word .LANCHOR0 ++ .word 1398362953 ++ .word .LANCHOR0+1111 ++ .word .LANCHOR2+4 ++ .fnend ++ .size flash_info_data_init, .-flash_info_data_init ++ .align 2 ++ .global ftl_memcpy32 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_memcpy32, %function ++ftl_memcpy32: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, #0 ++.L1855: ++ cmp r3, r2 ++ bne .L1856 ++ bx lr ++.L1856: ++ ldr ip, [r1, r3, lsl #2] ++ str ip, [r0, r3, lsl #2] ++ add r3, r3, #1 ++ b .L1855 ++ .fnend ++ .size ftl_memcpy32, .-ftl_memcpy32 ++ .align 2 ++ .global ftl_memcmp ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_memcmp, %function ++ftl_memcmp: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ b memcmp ++ .fnend ++ .size ftl_memcmp, .-ftl_memcmp ++ .align 2 ++ .global timer_get_time ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type timer_get_time, %function ++timer_get_time: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1859 ++ ldr r0, [r3] ++ ldr r3, .L1859+4 ++ ldr r3, [r3, #-168] ++ sub r0, r0, r3 ++ b jiffies_to_msecs ++.L1860: ++ .align 2 ++.L1859: ++ .word jiffies ++ .word .LANCHOR3 ++ .fnend ++ .size timer_get_time, .-timer_get_time ++ .align 2 ++ .global StorageSysDataLoad ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type StorageSysDataLoad, %function ++StorageSysDataLoad: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r1 ++ mov r5, r0 ++ mov r2, #512 ++ mov r1, #0 ++ mov r0, r4 ++ bl ftl_memset ++ bl rknand_device_lock ++ ldr r3, .L1863 ++ mov r2, r4 ++ mov r1, #1 ++ mov r0, r5 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #12] ++ blx r3 ++ mov r4, r0 ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L1864: ++ .align 2 ++.L1863: ++ .word .LANCHOR3 ++ .fnend ++ .size StorageSysDataLoad, .-StorageSysDataLoad ++ .align 2 ++ .global StorageSysDataStore ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type StorageSysDataStore, %function ++StorageSysDataStore: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r1 ++ mov r4, r0 ++ bl rknand_device_lock ++ ldr r3, .L1867 ++ mov r2, r5 ++ mov r1, #1 ++ mov r0, r4 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #16] ++ blx r3 ++ mov r4, r0 ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L1868: ++ .align 2 ++.L1867: ++ .word .LANCHOR3 ++ .fnend ++ .size StorageSysDataStore, .-StorageSysDataStore ++ .align 2 ++ .global FlashBootVendorRead ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashBootVendorRead, %function ++FlashBootVendorRead: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ bl rknand_device_lock ++ ldr r3, .L1871 ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #4] ++ blx r3 ++ mov r4, r0 ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L1872: ++ .align 2 ++.L1871: ++ .word .LANCHOR3 ++ .fnend ++ .size FlashBootVendorRead, .-FlashBootVendorRead ++ .align 2 ++ .global FlashBootVendorWrite ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashBootVendorWrite, %function ++FlashBootVendorWrite: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ mov r5, r1 ++ mov r6, r2 ++ bl rknand_device_lock ++ ldr r3, .L1875 ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #8] ++ blx r3 ++ mov r4, r0 ++ bl rknand_device_unlock ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L1876: ++ .align 2 ++.L1875: ++ .word .LANCHOR3 ++ .fnend ++ .size FlashBootVendorWrite, .-FlashBootVendorWrite ++ .align 2 ++ .global flash_sram_load_store ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_sram_load_store, %function ++flash_sram_load_store: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L1882 ++ cmp r2, #0 ++ moveq r2, r3 ++ ldr ip, [ip, #-156] ++ add ip, ip, #4096 ++ add ip, ip, r1 ++ moveq r1, ip ++ strne lr, [sp, #-4]! ++ .save {lr} ++ movne r1, r0 ++ ldrne lr, [sp], #4 ++ movne r2, r3 ++ movne r0, ip ++.L1881: ++ b ftl_memcpy ++.L1883: ++ .align 2 ++.L1882: ++ .word .LANCHOR3 ++ .fnend ++ .size flash_sram_load_store, .-flash_sram_load_store ++ .align 2 ++ .global FlashCs123Init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FlashCs123Init, %function ++FlashCs123Init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ bx lr ++ .fnend ++ .size FlashCs123Init, .-FlashCs123Init ++ .align 2 ++ .global ftl_dma32_malloc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_dma32_malloc, %function ++ftl_dma32_malloc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r0, #8192 ++ ble .L1886 ++ b ftl_malloc ++.L1886: ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ add r4, r0, #63 ++ ldr r5, .L1890 ++ bic r4, r4, #63 ++ ldr r3, [r5, #-152] ++ cmp r4, r3 ++ ble .L1887 ++ mov r0, #16384 ++ bl ftl_malloc ++ mov r3, #16384 ++ str r0, [r5, #-148] ++ str r3, [r5, #-152] ++.L1887: ++ ldr r3, [r5, #-152] ++ ldr r0, [r5, #-148] ++ sub r3, r3, r4 ++ add r4, r0, r4 ++ str r3, [r5, #-152] ++ str r4, [r5, #-148] ++ pop {r4, r5, r6, pc} ++.L1891: ++ .align 2 ++.L1890: ++ .word .LANCHOR3 ++ .fnend ++ .size ftl_dma32_malloc, .-ftl_dma32_malloc ++ .align 2 ++ .global nandc_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_init, %function ++nandc_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ .pad #16 ++ mov r3, #0 ++ ldr r5, .L1912 ++ mov r6, r0 ++ str r3, [sp, #12] ++ ldr r3, [r5] ++ tst r3, #4096 ++ beq .L1893 ++ mov r2, r0 ++ ldr r1, .L1912+4 ++ ldr r0, .L1912+8 ++ bl rk_printk ++.L1893: ++ ldr r4, .L1912+12 ++ mov r3, #6 ++ ldr r2, [r6, #352] ++ strb r3, [r4, #1028] ++ ldr r3, .L1912+16 ++ str r6, [r4, #1044] ++ cmp r2, r3 ++ ldr r2, [r6, #128] ++ moveq r3, #8 ++ strbeq r3, [r4, #1028] ++ ldr r3, .L1912+20 ++ cmp r2, r3 ++ ldr r2, .L1912+24 ++ moveq r3, #9 ++ strbeq r3, [r4, #1028] ++ ldrb r3, [r4, #1028] @ zero_extendqisi2 ++ cmp r3, #9 ++ bne .L1896 ++ mov r3, #1 ++ mov r1, #2 ++ strb r3, [r4, #1195] ++ ldr r3, [sp, #12] ++ orr r3, r3, #256 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfi r3, r1, #18, #3 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ str r3, [r6] ++ mov r3, #0 ++ ldr r0, [r4, #1044] ++ str r3, [r0, #520] ++ movw r3, #4161 ++ str r3, [r0, #4] ++ movw r3, #8321 ++ str r3, [r0, #8] ++ mov r3, #38 ++ str r2, [r0, #80] ++ str r3, [r0, #84] ++ mov r3, #39 ++ str r3, [r0, #84] ++ ldr r3, [r5] ++ tst r3, #4096 ++ beq .L1898 ++ ldr r1, [r0] ++ ldr r2, [r0, #8] ++ ldr r3, [r0, #80] ++ ldr ip, [r0, #84] ++ ldr r0, [r0, #88] ++.L1911: ++ str r0, [sp, #4] ++ str ip, [sp] ++ ldr r0, .L1912+28 ++ bl rk_printk ++.L1898: ++ mov r3, #1 ++ movw r2, #1228 ++ strb r3, [r4, #1196] ++ mov r3, #0 ++ strh r3, [r4, r2] @ movhi ++ strb r3, [r4, #1193] ++ ldr r3, [r5] ++ tst r3, #4096 ++ beq .L1892 ++ ldrb r1, [r4, #1028] @ zero_extendqisi2 ++ ldr r0, .L1912+32 ++ bl rk_printk ++.L1892: ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, pc} ++.L1896: ++ ldr r3, [sp, #12] ++ mov r0, #1 ++ mov r1, #0 ++ strb r1, [r4, #1195] ++ orr r3, r3, #256 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ bfi r3, r0, #24, #3 ++ mov r0, #2048 ++ str r3, [sp, #12] ++ ldr r3, [sp, #12] ++ str r3, [r6] ++ ldr r3, [r4, #1044] ++ str r1, [r3, #336] ++ movw r1, #4193 ++ str r1, [r3, #4] ++ movw r1, #8321 ++ str r1, [r3, #344] ++ str r2, [r3, #304] ++ mov r2, #38 ++ str r2, [r3, #308] ++ mov r2, #39 ++ str r2, [r3, #308] ++ bl ftl_dma32_malloc ++ ldr r3, [r5] ++ str r0, [r4, #1200] ++ tst r3, #4096 ++ beq .L1898 ++ ldr r0, [r4, #1044] ++ ldr r1, [r0] ++ ldr r2, [r0, #344] ++ ldr r3, [r0, #304] ++ ldr ip, [r0, #308] ++ ldr r0, [r0, #312] ++ b .L1911 ++.L1913: ++ .align 2 ++.L1912: ++ .word .LANCHOR2 ++ .word .LANCHOR1+1741 ++ .word .LC136 ++ .word .LANCHOR0 ++ .word 1446522928 ++ .word 1446588464 ++ .word 1052675 ++ .word .LC137 ++ .word .LC138 ++ .fnend ++ .size nandc_init, .-nandc_init ++ .align 2 ++ .global zbuf_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zbuf_init, %function ++zbuf_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, #0 ++ ldr r4, .L1918 ++ mov r6, r5 ++ ldr r7, .L1918+4 ++.L1915: ++ ldrb r0, [r7, #-2546] @ zero_extendqisi2 ++ uxtb r3, r5 ++ strb r6, [r4, #2] ++ add r5, r5, #1 ++ add r2, r3, #1 ++ strb r3, [r4, #1] ++ strb r2, [r4] ++ add r4, r4, #48 ++ lsl r0, r0, #9 ++ str r6, [r4, #-40] ++ bl ftl_dma32_malloc ++ str r0, [r4, #-44] ++ mov r0, #64 ++ bl ftl_dma32_malloc ++ cmp r5, #32 ++ str r0, [r4, #-36] ++ bne .L1915 ++ ldr r3, .L1918+8 ++ mvn r2, #0 ++ strb r2, [r3, #2720] ++ strb r6, [r3, #2768] ++ strb r5, [r3, #2769] ++ pop {r4, r5, r6, r7, r8, pc} ++.L1919: ++ .align 2 ++.L1918: ++ .word .LANCHOR0+1232 ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .fnend ++ .size zbuf_init, .-zbuf_init ++ .align 2 ++ .global gc_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_init, %function ++gc_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ movw r9, #2824 ++ ldr r6, .L1922 ++ mov r5, #0 ++ movw r2, #2204 ++ mov r1, r5 ++ ldr r4, .L1922+4 ++ add r7, r6, r9 ++ mov r0, r7 ++ sub r8, r4, #3088 ++ strb r5, [r4, #-3119] ++ strb r5, [r4, #-144] ++ str r5, [r4, #-140] ++ strh r5, [r8, #-6] @ movhi ++ bl ftl_memset ++ mvn r3, #0 ++ ldrb r0, [r4, #-3127] @ zero_extendqisi2 ++ strh r3, [r6, r9] @ movhi ++ movw ip, #2806 ++ ldrh r3, [r8, #-8] ++ str r5, [r6, #2832] ++ lsr r2, r3, #1 ++ lsr r1, r3, #2 ++ strh r2, [r7, #34] @ movhi ++ smulbb r2, r0, r3 ++ strh r1, [r7, #32] @ movhi ++ sub r7, r4, #3104 ++ strh r5, [r7, #-8] @ movhi ++ uxth r2, r2 ++ strh r5, [r7, #-6] @ movhi ++ strh r5, [r7, #-4] @ movhi ++ sub lr, r2, #32 ++ strh lr, [r6, ip] @ movhi ++ movw ip, #2808 ++ strh r2, [r6, ip] @ movhi ++ add r2, r6, #2816 ++ strh r3, [r2] @ movhi ++ mov r3, #4 ++ strh r3, [r4, #-136] @ movhi ++ movw r3, #2818 ++ strh r1, [r6, r3] @ movhi ++ ldrh r3, [r7, #-14] ++ mul r0, r0, r3 ++ lsl r0, r0, #2 ++ bl ftl_dma32_malloc ++ ldrh r3, [r7, #-14] ++ str r0, [r4, #-132] ++ ldrb r0, [r4, #-3127] @ zero_extendqisi2 ++ mul r0, r0, r3 ++ lsl r0, r0, #2 ++ bl ftl_dma32_malloc ++ ldrh r3, [r7, #-14] ++ str r0, [r4, #-128] ++ ldrb r0, [r4, #-3127] @ zero_extendqisi2 ++ mul r0, r0, r3 ++ bl ftl_dma32_malloc ++ ldrh r3, [r7, #-14] ++ str r0, [r4, #-3124] ++ ldrb r0, [r4, #-3127] @ zero_extendqisi2 ++ mul r0, r0, r3 ++ lsl r0, r0, #2 ++ bl ftl_dma32_malloc ++ ldrh r3, [r7, #-14] ++ str r0, [r4, #-3132] ++ ldrb r0, [r4, #-3127] @ zero_extendqisi2 ++ mul r0, r0, r3 ++ lsl r0, r0, #2 ++ bl ftl_dma32_malloc ++ ldrh r3, [r8, #-4] ++ movw r2, #2804 ++ str r0, [r4, #-124] ++ lsr r3, r3, #2 ++ strh r3, [r6, r2] @ movhi ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L1923: ++ .align 2 ++.L1922: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .fnend ++ .size gc_init, .-gc_init ++ .align 2 ++ .global rk_ftl_de_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_de_init, %function ++rk_ftl_de_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ mov r1, #0 ++ ldr r0, .L1926 ++ bl rk_printk ++ ldr r3, .L1926+4 ++ pop {r4, lr} ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #40] ++ bx r3 @ indirect register sibling call ++.L1927: ++ .align 2 ++.L1926: ++ .word .LC139 ++ .word .LANCHOR3 ++ .fnend ++ .size rk_ftl_de_init, .-rk_ftl_de_init ++ .align 2 ++ .global rk_ftl_cache_write_back ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_cache_write_back, %function ++rk_ftl_cache_write_back: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1929 ++ mov r0, #0 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #32] ++ bx r3 @ indirect register sibling call ++.L1930: ++ .align 2 ++.L1929: ++ .word .LANCHOR3 ++ .fnend ++ .size rk_ftl_cache_write_back, .-rk_ftl_cache_write_back ++ .align 2 ++ .global rk_nand_suspend ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nand_suspend, %function ++rk_nand_suspend: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1932 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #44] ++ bx r3 @ indirect register sibling call ++.L1933: ++ .align 2 ++.L1932: ++ .word .LANCHOR3 ++ .fnend ++ .size rk_nand_suspend, .-rk_nand_suspend ++ .align 2 ++ .global rk_nand_resume ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nand_resume, %function ++rk_nand_resume: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1935 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #48] ++ bx r3 @ indirect register sibling call ++.L1936: ++ .align 2 ++.L1935: ++ .word .LANCHOR3 ++ .fnend ++ .size rk_nand_resume, .-rk_nand_resume ++ .align 2 ++ .global rk_ftl_get_capacity ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_get_capacity, %function ++rk_ftl_get_capacity: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1938 ++ mov r0, #0 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #36] ++ bx r3 ++.L1939: ++ .align 2 ++.L1938: ++ .word .LANCHOR3 ++ .fnend ++ .size rk_ftl_get_capacity, .-rk_ftl_get_capacity ++ .align 2 ++ .global rk_nandc_get_irq_status ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_nandc_get_irq_status, %function ++rk_nandc_get_irq_status: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1941 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #60] ++ bx r3 ++.L1942: ++ .align 2 ++.L1941: ++ .word .LANCHOR3 ++ .fnend ++ .size rk_nandc_get_irq_status, .-rk_nandc_get_irq_status ++ .align 2 ++ .global rknand_proc_ftlread ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rknand_proc_ftlread, %function ++rknand_proc_ftlread: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1944 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #64] ++ bx r3 ++.L1945: ++ .align 2 ++.L1944: ++ .word .LANCHOR3 ++ .fnend ++ .size rknand_proc_ftlread, .-rknand_proc_ftlread ++ .align 2 ++ .global FtlRead ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlRead, %function ++FtlRead: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L1948 ++ str lr, [sp, #-4]! ++ .save {lr} ++ ldr ip, [ip, #-160] ++ ldr lr, [ip, #20] ++ mov ip, lr ++ ldr lr, [sp], #4 ++ bx ip ++.L1949: ++ .align 2 ++.L1948: ++ .word .LANCHOR3 ++ .fnend ++ .size FtlRead, .-FtlRead ++ .align 2 ++ .global FtlDiscard ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlDiscard, %function ++FtlDiscard: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1951 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #28] ++ bx r3 ++.L1952: ++ .align 2 ++.L1951: ++ .word .LANCHOR3 ++ .fnend ++ .size FtlDiscard, .-FtlDiscard ++ .align 2 ++ .global rk_ftl_garbage_collect ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_garbage_collect, %function ++rk_ftl_garbage_collect: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1954 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #52] ++ bx r3 ++.L1955: ++ .align 2 ++.L1954: ++ .word .LANCHOR3 ++ .fnend ++ .size rk_ftl_garbage_collect, .-rk_ftl_garbage_collect ++ .align 2 ++ .global ReadFlashInfo ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ReadFlashInfo, %function ++ReadFlashInfo: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L1957 ++ ldr r3, [r3, #-160] ++ ldr r3, [r3, #56] ++ bx r3 @ indirect register sibling call ++.L1958: ++ .align 2 ++.L1957: ++ .word .LANCHOR3 ++ .fnend ++ .size ReadFlashInfo, .-ReadFlashInfo ++ .align 2 ++ .global rknand_print_hex ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rknand_print_hex, %function ++rknand_print_hex: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ mov ip, r2 ++ push {r0, r1, r2, r3, r4, lr} ++ .save {lr} ++ .pad #20 ++ mul r3, r3, ip ++ mov r2, #0 ++ str r2, [sp, #12] ++ str ip, [sp] ++ stmib sp, {r1, r3} ++ mov r1, r0 ++ mov r3, #16 ++ ldr r0, .L1961 ++ bl print_hex_dump ++ add sp, sp, #20 ++ @ sp needed ++ ldr pc, [sp], #4 ++.L1962: ++ .align 2 ++.L1961: ++ .word .LC140 ++ .fnend ++ .size rknand_print_hex, .-rknand_print_hex ++ .align 2 ++ .global hynix_get_read_retry_default ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type hynix_get_read_retry_default, %function ++hynix_get_read_retry_default: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r5, r0 ++ ldr r6, .L2074 ++ mvn r3, #83 ++ cmp r5, #2 ++ mvn r2, #81 ++ .pad #52 ++ sub sp, sp, #52 ++ ldr r4, [r6, #1040] ++ strb r0, [r4, #112] ++ mvn r0, #82 ++ strb r3, [r4, #128] ++ mvn r3, #80 ++ add r1, r4, #128 ++ strb r0, [r4, #129] ++ strb r2, [r4, #130] ++ strb r3, [r4, #131] ++ bne .L1964 ++ mvn r3, #88 ++ mov r10, #7 ++ strb r3, [r4, #128] ++ mvn r2, #8 ++ ldr r3, .L2074+4 ++ strb r2, [r3, #407] ++.L2068: ++ mov fp, #4 ++ b .L1965 ++.L1964: ++ cmp r5, #3 ++ bne .L1966 ++ add r2, r4, #127 ++ mov r3, #176 ++.L1967: ++ strb r3, [r2, #1]! ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #184 ++ bne .L1967 ++.L2069: ++ mov r10, #8 ++ mov fp, r10 ++.L1965: ++ sub r3, r5, #1 ++ cmp r3, #1 ++ bhi .L1973 ++ sub r9, fp, #1 ++ mov r8, #0 ++ uxtab r3, r1, r9 ++ str r3, [sp, #4] ++.L1974: ++ ldrb r2, [r6, #1109] @ zero_extendqisi2 ++ uxtb r3, r8 ++ cmp r2, r3 ++ bhi .L1979 ++.L1980: ++ strb fp, [r4, #113] ++ strb r10, [r4, #114] ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L1966: ++ cmp r5, #4 ++ bne .L1968 ++ mvn ip, #51 ++ strb r0, [r4, #133] ++ strb ip, [r4, #128] ++ mvn ip, #64 ++ strb ip, [r4, #129] ++ mvn ip, #85 ++ strb ip, [r4, #130] ++ mvn ip, #84 ++ strb ip, [r4, #131] ++ mvn ip, #50 ++ strb ip, [r4, #132] ++ strb r2, [r4, #134] ++ strb r3, [r4, #135] ++ b .L2069 ++.L1968: ++ cmp r5, #5 ++ bne .L1969 ++ mov r3, #56 ++ mov r10, #8 ++ strb r3, [r4, #128] ++ mov r3, #57 ++ strb r3, [r4, #129] ++ mov r3, #58 ++ strb r3, [r4, #130] ++ mov r3, #59 ++ strb r3, [r4, #131] ++ b .L2068 ++.L1969: ++ cmp r5, #6 ++ bne .L1970 ++ mov r3, #14 ++ mov r10, #12 ++ strb r3, [r4, #128] ++ mov r3, #15 ++ strb r3, [r4, #129] ++ mov r3, #16 ++ strb r3, [r4, #130] ++ mov r3, #17 ++ strb r3, [r4, #131] ++ b .L2068 ++.L1970: ++ cmp r5, #7 ++ bne .L1971 ++ add r2, r4, #127 ++ mov r3, #176 ++.L1972: ++ strb r3, [r2, #1]! ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #184 ++ bne .L1972 ++ mvn r3, #43 ++ mov r10, #12 ++ strb r3, [r4, #136] ++ mvn r3, #42 ++ strb r3, [r4, #137] ++ mov fp, #10 ++ b .L1965 ++.L1971: ++ cmp r5, #8 ++ mov r3, #7 ++ movne r10, r3 ++ bne .L2068 ++ strb r3, [r4, #129] ++ mov r3, #9 ++ mov r2, #6 ++ strb r3, [r4, #131] ++ mov r3, #10 ++ strb r2, [r4, #128] ++ strb r5, [r4, #130] ++ mov r10, #50 ++ strb r3, [r4, #132] ++ mov fp, #5 ++ b .L1965 ++.L1979: ++ add r3, r6, r3 ++ mov r5, #160 ++ ldrb r3, [r3, #1144] @ zero_extendqisi2 ++ add r1, r4, #127 ++ ldr r7, [r6, #1044] ++ mla r5, r5, r3, r4 ++ add r7, r7, r3, lsl #8 ++ mov r3, #55 ++ add r5, r5, #144 ++ sub r9, r5, #1 ++.L1975: ++ str r3, [r7, #2056] ++ mov r0, #200 ++ ldrb r2, [r1, #1]! @ zero_extendqisi2 ++ str r3, [sp, #12] ++ str r2, [r7, #2052] ++ str r1, [sp, #8] ++ bl ndelay ++ ldr r3, [sp, #4] ++ ldr r1, [sp, #8] ++ ldr r2, [r7, #2048] ++ cmp r3, r1 ++ ldr r3, [sp, #12] ++ strb r2, [r9, #1]! ++ bne .L1975 ++ ldr lr, .L2074+8 ++ mov r1, r5 ++ mov r2, #0 ++.L1976: ++ mov r3, #1 ++ add ip, lr, r2 ++.L1977: ++ ldrb r0, [ip, r3, lsl #2] @ zero_extendqisi2 ++ ldrb r7, [r1] @ zero_extendqisi2 ++ add r0, r0, r7 ++ strb r0, [r1, r3, lsl #3] ++ add r3, r3, #1 ++ cmp r3, #7 ++ bne .L1977 ++ add r2, r2, #1 ++ add r1, r1, #1 ++ cmp r2, #4 ++ bne .L1976 ++ mov r3, #0 ++ add r8, r8, #1 ++ strb r3, [r5, #16] ++ strb r3, [r5, #24] ++ strb r3, [r5, #32] ++ strb r3, [r5, #40] ++ strb r3, [r5, #48] ++ strb r3, [r5, #41] ++ strb r3, [r5, #49] ++ b .L1974 ++.L1973: ++ sub r3, r5, #3 ++ cmp r3, #5 ++ bhi .L1980 ++ smulbb r3, fp, r10 ++ asr r2, r3, #1 ++ lsl r3, r3, #4 ++ str r3, [sp, #44] ++ lsl r3, r2, #2 ++ str r2, [sp, #4] ++ str r3, [sp, #36] ++ lsl r3, r2, #1 ++ str r3, [sp, #20] ++ mov r3, #0 ++.L2073: ++ str r3, [sp, #16] ++ ldr r3, .L2074 ++ ldrb r2, [r3, #1109] @ zero_extendqisi2 ++ ldrb r3, [sp, #16] @ zero_extendqisi2 ++ cmp r2, r3 ++ bls .L1980 ++ ldr r2, .L2074 ++ mov r7, #255 ++ add r3, r2, r3 ++ ldrb r8, [r3, #1144] @ zero_extendqisi2 ++ mov r0, r8 ++ bl zftl_flash_exit_slc_mode ++ mov r0, #160 ++ mla r0, r0, r8, r4 ++ add r3, r0, #144 ++ str r3, [sp, #32] ++ ldr r3, .L2074 ++ ldr r9, [r3, #1044] ++ add r6, r9, r8, lsl #8 ++ str r7, [r6, #2056] ++ bl nandc_wait_flash_ready ++ cmp r5, #8 ++ bne .L1982 ++ add r3, r4, #144 ++ mov r2, #23 ++ str r3, [sp, #32] ++ mov r3, #120 ++ str r3, [r6, #2056] ++ mov r3, #0 ++ str r3, [r6, #2052] ++ mov r1, #25 ++ str r3, [r6, #2052] ++ str r3, [r6, #2052] ++ str r2, [r6, #2056] ++ mov r2, #4 ++ str r2, [r6, #2056] ++ str r1, [r6, #2056] ++ mov r1, #218 ++ str r1, [r6, #2056] ++ mov r1, #21 ++ str r3, [r6, #2056] ++ str r3, [r6, #2052] ++ str r3, [r6, #2052] ++ str r1, [r6, #2052] ++ str r2, [r6, #2052] ++ str r3, [r6, #2052] ++.L1983: ++ add r3, r9, r8, lsl #8 ++ mov r2, #48 ++ str r2, [r3, #2056] ++ bl nandc_wait_flash_ready ++ sub r3, r5, #5 ++ cmp r5, #8 ++ cmpne r3, #1 ++ str r3, [sp, #40] ++ movls r2, #16 ++ bls .L1989 ++ cmp r5, #7 ++ movne r2, #2 ++ moveq r2, #32 ++.L1989: ++ ldr r3, .L2074+12 ++ sub r2, r2, #1 ++ add r6, r9, r8, lsl #8 ++ ldr r3, [r3, #-120] ++ sub r1, r3, #1 ++ uxtab r2, r3, r2 ++ mov r0, r1 ++.L1990: ++ ldr ip, [r6, #2048] ++ strb ip, [r0, #1]! ++ cmp r0, r2 ++ bne .L1990 ++ cmp r5, #8 ++ bne .L1991 ++ mov r2, #0 ++.L1993: ++ ldrb r0, [r3, r2, lsl #2] @ zero_extendqisi2 ++ uxtb r1, r2 ++ cmp r0, #50 ++ beq .L1992 ++ add r0, r3, r2, lsl #2 ++ ldrb r0, [r0, #1] @ zero_extendqisi2 ++ cmp r0, #5 ++ beq .L1992 ++ add r2, r2, #1 ++ cmp r2, #8 ++ bne .L1993 ++.L1994: ++ mov r1, #0 ++ ldr r0, .L2074+16 ++ bl rk_printk ++.L1996: ++ b .L1996 ++.L1982: ++ cmp r5, #4 ++ mov r3, #54 ++ str r3, [r6, #2056] ++ bne .L1984 ++ mov r3, #64 ++ str r7, [r6, #2052] ++ str r3, [r6, #2048] ++ mov r3, #204 ++.L2070: ++ str r3, [r6, #2052] ++ mov r3, #77 ++.L2071: ++ str r3, [r6, #2048] ++.L1985: ++ add r3, r9, r8, lsl #8 ++ mov r2, #22 ++ cmp r5, #6 ++ str r2, [r3, #2056] ++ mov r2, #23 ++ str r2, [r3, #2056] ++ mov r2, #4 ++ str r2, [r3, #2056] ++ mov r2, #25 ++ str r2, [r3, #2056] ++ mov r2, #0 ++ str r2, [r3, #2056] ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ moveq r2, #31 ++ str r2, [r3, #2052] ++ mov r2, #2 ++ str r2, [r3, #2052] ++ mov r2, #0 ++ str r2, [r3, #2052] ++ b .L1983 ++.L1984: ++ sub r3, r5, #5 ++ cmp r3, #1 ++ ldrbls r3, [r4, #128] @ zero_extendqisi2 ++ strls r3, [r6, #2052] ++ movls r3, #82 ++ bls .L2071 ++ cmp r5, #7 ++ bne .L1985 ++ mov r3, #174 ++ str r3, [r6, #2052] ++ mov r3, #0 ++ str r3, [r6, #2048] ++ mov r3, #176 ++ b .L2070 ++.L1992: ++ cmp r1, #6 ++ bhi .L1994 ++.L1995: ++ ldr r3, .L2074+12 ++ ldr r2, [r3, #-120] ++ mov r3, r2 ++.L2005: ++ ldr r0, [sp, #44] ++ sub r1, r3, r2 ++ cmp r0, r1 ++ bgt .L2006 ++ ldr r3, .L2074+12 ++ ldr r1, [r3, #-120] ++ ldr r3, [sp, #20] ++ add r0, r1, r3 ++ mov r3, #8 ++.L2008: ++ mov lr, r0 ++ mov ip, #0 ++.L2007: ++ ldrh r7, [lr] ++ add ip, ip, #1 ++ mvn r7, r7 ++ strh r7, [lr], #2 @ movhi ++ ldr r7, [sp, #4] ++ cmp r7, ip ++ bgt .L2007 ++ ldr ip, [sp, #36] ++ subs r3, r3, #1 ++ add r0, r0, ip ++ bne .L2008 ++ str r1, [sp, #8] ++ str r3, [sp, #12] ++.L2009: ++ mov ip, #0 ++ mov r0, ip ++.L2013: ++ mov lr, #1 ++ mov r7, #16 ++ lsl lr, lr, r0 ++ str r7, [sp, #28] ++ mov r7, #0 ++ str lr, [sp, #24] ++ ldr lr, [sp, #8] ++.L2011: ++ ldrh r3, [lr] ++ mov r1, r3 ++ ldr r3, [sp, #24] ++ bics r3, r3, r1 ++ ldr r3, [sp, #20] ++ addeq r7, r7, #1 ++ add lr, lr, r3 ++ ldr r3, [sp, #28] ++ subs r3, r3, #1 ++ str r3, [sp, #28] ++ bne .L2011 ++ cmp r7, #8 ++ add r0, r0, #1 ++ ldrhi r3, [sp, #24] ++ orrhi ip, ip, r3 ++ uxthhi ip, ip ++ cmp r0, #16 ++ bne .L2013 ++ ldr r3, [sp, #8] ++ strh ip, [r3], #2 @ movhi ++ str r3, [sp, #8] ++ ldr r3, [sp, #12] ++ add r3, r3, #1 ++ str r3, [sp, #12] ++ ldr r1, [sp, #12] ++ ldr r3, [sp, #4] ++ cmp r3, r1 ++ bgt .L2009 ++ ldr r3, .L2074+12 ++ ldr r1, [r3, #-120] ++ mov r3, #0 ++ sub r0, r1, #4 ++ add ip, r1, #28 ++.L2016: ++ ldr lr, [r0, #4]! ++ cmp lr, #0 ++ addeq r3, r3, #1 ++ cmp ip, r0 ++ bne .L2016 ++ cmp r3, #7 ++ ble .L2017 ++ ldr r0, .L2074+20 ++ mov r3, #1024 ++ mov r2, #1 ++ bl rknand_print_hex ++ mov r1, #0 ++ ldr r0, .L2074+16 ++ bl rk_printk ++.L2018: ++ b .L2018 ++.L1991: ++ cmp r5, #7 ++ bne .L1997 ++ mov r2, #0 ++.L1999: ++ ldrb r0, [r3, r2, lsl #2] @ zero_extendqisi2 ++ uxtb r1, r2 ++ cmp r0, #12 ++ beq .L1998 ++ add r0, r3, r2, lsl #2 ++ ldrb r0, [r0, #1] @ zero_extendqisi2 ++ cmp r0, #10 ++ beq .L1998 ++ add r2, r2, #1 ++ cmp r2, #8 ++ bne .L1999 ++.L2000: ++ mov r1, #0 ++ ldr r0, .L2074+16 ++ bl rk_printk ++.L2001: ++ b .L2001 ++.L1998: ++ cmp r1, #6 ++ bls .L1995 ++ b .L2000 ++.L1997: ++ cmp r5, #6 ++ bne .L1995 ++ add r3, r3, #7 ++.L2002: ++ ldrb r2, [r1, #1]! @ zero_extendqisi2 ++ cmp r2, #12 ++ beq .L1995 ++ ldrb r2, [r1, #8] @ zero_extendqisi2 ++ cmp r2, #4 ++ beq .L1995 ++ cmp r1, r3 ++ bne .L2002 ++ mov r1, #0 ++ ldr r0, .L2074+16 ++ bl rk_printk ++.L2004: ++ b .L2004 ++.L2006: ++ ldr r1, [r6, #2048] ++ strb r1, [r3], #1 ++ b .L2005 ++.L2017: ++ cmp r5, #6 ++ moveq ip, #4 ++ beq .L2019 ++ cmp r5, #7 ++ moveq ip, #10 ++ beq .L2019 ++ cmp r5, #8 ++ movne ip, #8 ++ moveq ip, #5 ++.L2019: ++ sub r3, fp, #1 ++ ldr r0, [sp, #32] ++ uxtb r3, r3 ++ mov lr, #0 ++ add r3, r3, #1 ++ str r3, [sp, #8] ++.L2020: ++ mov r3, r0 ++ mov r1, r2 ++.L2021: ++ ldrb r7, [r1], #1 @ zero_extendqisi2 ++ strb r7, [r3], #1 ++ sub r7, r1, r2 ++ uxtb r7, r7 ++ cmp fp, r7 ++ bhi .L2021 ++ ldr r3, [sp, #8] ++ add lr, lr, #1 ++ cmp r10, lr ++ add r0, r0, ip ++ add r2, r2, r3 ++ bgt .L2020 ++ add r7, r9, r8, lsl #8 ++ mov r8, #255 ++ str r8, [r7, #2056] ++ bl nandc_wait_flash_ready ++ ldr r3, [sp, #40] ++ cmp r3, #1 ++ bhi .L2023 ++ mov r3, #54 ++ mov r2, #22 ++ str r3, [r7, #2056] ++ ldrb r3, [r4, #128] @ zero_extendqisi2 ++ str r3, [r6, #2052] ++ mov r3, #0 ++ str r3, [r6, #2048] ++ str r2, [r7, #2056] ++ str r3, [r7, #2056] ++ str r3, [r6, #2052] ++ str r3, [r6, #2052] ++ mov r3, #48 ++ str r8, [r6, #2052] ++ str r8, [r6, #2052] ++ str r8, [r6, #2052] ++.L2072: ++ str r3, [r7, #2056] ++ bl nandc_wait_flash_ready ++ ldr r3, [sp, #16] ++ add r3, r3, #1 ++ b .L2073 ++.L2023: ++ cmp r5, #8 ++ moveq r3, #190 ++ movne r3, #56 ++ b .L2072 ++.L2075: ++ .align 2 ++.L2074: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR2+390 ++ .word .LANCHOR3 ++ .word .LC141 ++ .word .LC142 ++ .fnend ++ .size hynix_get_read_retry_default, .-hynix_get_read_retry_default ++ .align 2 ++ .global flash_get_read_retry_tbl ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_get_read_retry_tbl, %function ++flash_get_read_retry_tbl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L2078 ++ ldrb r0, [r3, #23] @ zero_extendqisi2 ++ sub r3, r0, #1 ++ cmp r3, #7 ++ bxhi lr ++ b hynix_get_read_retry_default ++.L2079: ++ .align 2 ++.L2078: ++ .word .LANCHOR2 ++ .fnend ++ .size flash_get_read_retry_tbl, .-flash_get_read_retry_tbl ++ .align 2 ++ .global nandc_xfer_done ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_xfer_done, %function ++nandc_xfer_done: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r1, #0 ++ ldr r4, .L2129 ++ ldr r7, .L2129+4 ++ ldrb r3, [r4, #1028] @ zero_extendqisi2 ++ ldr r6, [r4, #1044] ++ strb r1, [r7, #-116] ++ cmp r3, #9 ++ bne .L2081 ++ ldr r3, [r6, #16] ++ str r3, [sp] ++ ldr r5, [r6, #48] ++ ubfx r5, r5, #1, #1 ++ cmp r5, r1 ++ bne .L2082 ++ ldr r7, .L2129+8 ++ ldr r8, .L2129+12 ++.L2083: ++ ldr r3, [sp] ++ tst r3, #1048576 ++ beq .L2093 ++ ldr r3, [r4, #1220] ++ cmp r3, #0 ++ beq .L2091 ++ ldr r1, [sp] ++ mov r2, #1 ++ ldr r0, [r4, #1212] ++ ubfx r1, r1, #22, #6 ++ lsl r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ mov r2, #1 ++ ubfx r1, r1, #22, #6 ++ b .L2128 ++.L2082: ++ mov r5, r1 ++.L2084: ++ ldr r2, [r6, #64] ++ ldr r3, [sp] ++ ubfx r2, r2, #16, #6 ++ ubfx r3, r3, #22, #6 ++ cmp r2, r3 ++ bge .L2086 ++ ldr r3, [r4, #1044] ++ ldr r3, [r3] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #8192 ++ beq .L2085 ++ ldr r3, [sp, #4] ++ tst r3, #131072 ++ beq .L2085 ++ ldr r1, [sp, #4] ++ ldr r0, .L2129+16 ++ ubfx r1, r1, #17, #1 ++ bl rk_printk ++.L2086: ++ ldr r3, [r4, #1220] ++ cmp r3, #0 ++ beq .L2091 ++ ldr r1, [sp] ++ mov r2, #0 ++ ldr r0, [r4, #1212] ++ ubfx r1, r1, #22, #6 ++ lsl r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ mov r2, #0 ++ ubfx r1, r1, #22, #6 ++.L2128: ++ lsl r1, r1, #2 ++.L2126: ++ ldr r0, [r4, #1216] ++ bl rknand_dma_unmap_single ++.L2091: ++ mov r3, #0 ++ str r3, [r4, #1220] ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L2085: ++ ldr r3, [sp] ++ add r5, r5, #1 ++ ubfx r3, r3, #22, #6 ++ cmp r5, r3, lsl #12 ++ bne .L2087 ++ ldr r2, [r6, #64] ++ mov r1, r5 ++ ldr r3, [sp] ++ ldr r0, .L2129+20 ++ ubfx r2, r2, #16, #5 ++ ubfx r3, r3, #22, #6 ++ bl rk_printk ++ ldr r3, [sp, #4] ++ tst r3, #8192 ++ mov r3, #1 ++ strb r3, [r7, #-116] ++ bne .L2086 ++ ldr r3, .L2129+24 ++ ldr r0, .L2129+28 ++ ldr r3, [r3, #4] ++ blx r3 ++ b .L2086 ++.L2087: ++ mov r1, #10 ++ mov r0, #5 ++ bl rk_usleep_range ++ b .L2084 ++.L2093: ++ ldr r3, [r4, #1044] ++ add r5, r5, #1 ++ ldr r3, [r3, #16] ++ str r3, [sp] ++ bics r3, r5, #-16777216 ++ bne .L2092 ++ ldr r2, [sp] ++ mov r1, r5 ++ ldr r3, [r6, #64] ++ mov r0, r7 ++ ubfx r3, r3, #16, #6 ++ bl rk_printk ++ mov r3, #64 ++ mov r2, #4 ++ ldr r1, [r4, #1044] ++ mov r0, r8 ++ bl rknand_print_hex ++.L2092: ++ mov r1, #10 ++ mov r0, #5 ++ bl rk_usleep_range ++ b .L2083 ++.L2081: ++ ldr r3, [r6, #8] ++ str r3, [sp] ++ ldr r5, [r6, #16] ++ ubfx r5, r5, #1, #1 ++ cmp r5, #0 ++ bne .L2095 ++ ldr r7, .L2129+8 ++ ldr r8, .L2129+12 ++.L2096: ++ ldr r3, [sp] ++ tst r3, #1048576 ++ beq .L2103 ++ ldr r3, [r4, #1220] ++ cmp r3, #0 ++ beq .L2091 ++ ldr r1, [sp] ++ mov r2, #1 ++ ldr r0, [r4, #1212] ++ ubfx r1, r1, #22, #6 ++ lsl r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ mov r2, #1 ++ ubfx r1, r1, #22, #6 ++ b .L2127 ++.L2095: ++ ldr r7, .L2129+20 ++ mov r5, r1 ++ ldr r8, .L2129+12 ++.L2097: ++ ldr r2, [r6, #28] ++ ldr r3, [sp] ++ ubfx r2, r2, #16, #5 ++ ubfx r3, r3, #22, #6 ++ cmp r2, r3 ++ bge .L2099 ++ ldr r3, [r4, #1044] ++ ldr r3, [r3] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #8192 ++ beq .L2098 ++ ldr r3, [sp, #4] ++ tst r3, #131072 ++ beq .L2098 ++ ldr r1, [sp, #4] ++ ldr r0, .L2129+32 ++ bl rk_printk ++.L2099: ++ ldr r3, [r4, #1220] ++ cmp r3, #0 ++ beq .L2091 ++ ldr r1, [sp] ++ mov r2, #0 ++ ldr r0, [r4, #1212] ++ ubfx r1, r1, #22, #6 ++ lsl r1, r1, #10 ++ bl rknand_dma_unmap_single ++ ldr r1, [sp] ++ mov r2, #0 ++ ubfx r1, r1, #22, #6 ++.L2127: ++ lsl r1, r1, #7 ++ b .L2126 ++.L2098: ++ add r5, r5, #1 ++ bics r3, r5, #-16777216 ++ bne .L2100 ++ ldr r2, [r6, #28] ++ mov r1, r5 ++ ldr r3, [sp] ++ mov r0, r7 ++ ubfx r2, r2, #16, #5 ++ ubfx r3, r3, #22, #6 ++ bl rk_printk ++ mov r3, #64 ++ mov r2, #4 ++ ldr r1, [r4, #1044] ++ mov r0, r8 ++ bl rknand_print_hex ++.L2100: ++ mov r1, #10 ++ mov r0, #5 ++ bl rk_usleep_range ++ b .L2097 ++.L2103: ++ ldr r3, [r4, #1044] ++ add r5, r5, #1 ++ ldr r3, [r3, #8] ++ str r3, [sp] ++ bics r3, r5, #-16777216 ++ bne .L2102 ++ ldr r2, [sp] ++ mov r1, r5 ++ ldr r3, [r6, #28] ++ mov r0, r7 ++ ubfx r3, r3, #16, #5 ++ bl rk_printk ++ mov r3, #64 ++ mov r2, #4 ++ ldr r1, [r4, #1044] ++ mov r0, r8 ++ bl rknand_print_hex ++.L2102: ++ mov r1, #10 ++ mov r0, #5 ++ bl rk_usleep_range ++ b .L2096 ++.L2130: ++ .align 2 ++.L2129: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LC145 ++ .word .LC146 ++ .word .LC143 ++ .word .LC144 ++ .word arm_delay_ops ++ .word 644245000 ++ .word .LC147 ++ .fnend ++ .size nandc_xfer_done, .-nandc_xfer_done ++ .align 2 ++ .global nandc_xfer ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nandc_xfer, %function ++nandc_xfer: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r4, r1 ++ ldr r5, [sp, #32] ++ mov r8, r2 ++ mov r6, r3 ++ mov r1, r8 ++ mov r2, r6 ++ mov r0, r4 ++ mov r3, r5 ++ bl nandc_xfer_start ++ mov r0, r4 ++ bl nandc_xfer_done ++ cmp r4, #0 ++ movne r0, #0 ++ bne .L2132 ++ ldr r7, .L2170 ++ ldrb r3, [r7, #1028] @ zero_extendqisi2 ++ cmp r3, #9 ++ bne .L2133 ++ ldr r1, [r7, #1044] ++ lsr r8, r8, #2 ++ mov r2, #1 ++ mov r0, r4 ++.L2134: ++ cmp r4, r8 ++ bcc .L2138 ++ ldr r4, [r1] ++ cmp r2, #0 ++ movne r0, #512 ++ and r3, r4, #139264 ++ cmp r3, #139264 ++ bne .L2140 ++ mov r1, r4 ++ ldr r0, .L2170+4 ++ bl rk_printk ++ ldr r3, [r7, #1044] ++ mvn r0, #0 ++ orr r4, r4, #131072 ++ str r4, [r3] ++.L2140: ++ tst r4, #8192 ++ beq .L2141 ++ ldr r3, .L2170+8 ++ ldrb r3, [r3, #-116] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2141 ++ mov r1, r4 ++ ldr r0, .L2170+12 ++ bl rk_printk ++ ldr r3, [r7, #1044] ++ mov r2, #1 ++ str r2, [r3, #16] ++.L2169: ++ mvn r0, #0 ++.L2132: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L2138: ++ add r3, r4, #84 ++ ldr r3, [r1, r3, lsl #2] ++ str r3, [sp, #4] ++ ldr ip, [sp, #4] ++ ldr r3, [sp, #4] ++ ubfx r3, r3, #26, #1 ++ and r3, r3, ip, lsr #10 ++ and r2, r2, r3 ++ ldr r3, [sp, #4] ++ tst r3, #4 ++ bne .L2152 ++ ldr r3, [sp, #4] ++ tst r3, #262144 ++ bne .L2152 ++ ldr ip, [sp, #4] ++ ldr r3, [sp, #4] ++ ubfx ip, ip, #3, #7 ++ ubfx r3, r3, #19, #7 ++ cmp ip, r3 ++ ldr r3, [sp, #4] ++ ubfxgt r3, r3, #3, #7 ++ ubfxle r3, r3, #19, #7 ++ cmp r0, r3 ++ movcc r0, r3 ++.L2135: ++ add r4, r4, #1 ++ b .L2134 ++.L2152: ++ mvn r0, #0 ++ b .L2135 ++.L2133: ++ ldrb r3, [r7, #1193] @ zero_extendqisi2 ++ lsr r0, r8, #1 ++ mov r2, r5 ++ mov r1, r4 ++ cmp r3, #25 ++ movcc lr, #64 ++ movcs lr, #128 ++.L2143: ++ cmp r1, r0 ++ add ip, lr, r4 ++ add r2, r2, #4 ++ bcc .L2144 ++ ldr r1, [r7, #1044] ++ mov r2, #0 ++ lsr r8, r8, #2 ++ mov r0, r2 ++.L2145: ++ cmp r2, r8 ++ bcc .L2149 ++ mov r3, #0 ++ str r3, [r1, #16] ++ ldr r4, [r1] ++ and r3, r4, #139264 ++ cmp r3, #139264 ++ bne .L2141 ++ mov r1, r4 ++ ldr r0, .L2170+16 ++ bl rk_printk ++ ldr r3, [r7, #1044] ++ orr r4, r4, #131072 ++ str r4, [r3] ++ b .L2169 ++.L2144: ++ ldr r3, [r7, #1200] ++ bic r4, r4, #3 ++ add r1, r1, #1 ++ ldr r3, [r3, r4] ++ strb r3, [r2, #-4] ++ lsr r4, r3, #8 ++ strb r4, [r2, #-3] ++ lsr r4, r3, #16 ++ lsr r3, r3, #24 ++ strb r4, [r2, #-2] ++ mov r4, ip ++ strb r3, [r2, #-1] ++ b .L2143 ++.L2149: ++ add r3, r2, #8 ++ ldr r3, [r1, r3, lsl #2] ++ str r3, [sp, #4] ++ ldr r3, [sp, #4] ++ tst r3, #4 ++ bne .L2155 ++ ldr r3, [sp, #4] ++ tst r3, #32768 ++ bne .L2155 ++ ldr ip, [sp, #4] ++ ldr r4, [sp, #4] ++ ldr r3, [sp, #4] ++ ldr lr, [sp, #4] ++ ubfx ip, ip, #3, #5 ++ ubfx r4, r4, #27, #1 ++ ubfx r3, r3, #16, #5 ++ orr ip, ip, r4, lsl #5 ++ ubfx lr, lr, #29, #1 ++ orr r3, r3, lr, lsl #5 ++ cmp ip, r3 ++ ldr r3, [sp, #4] ++ ldrhi ip, [sp, #4] ++ ldrls ip, [sp, #4] ++ ubfxhi r3, r3, #3, #5 ++ ubfxls r3, r3, #16, #5 ++ ubfxhi ip, ip, #27, #1 ++ ubfxls ip, ip, #29, #1 ++ orr r3, r3, ip, lsl #5 ++ cmp r0, r3 ++ movcc r0, r3 ++.L2146: ++ add r2, r2, #1 ++ b .L2145 ++.L2155: ++ mvn r0, #0 ++ b .L2146 ++.L2141: ++ cmn r0, #1 ++ beq .L2132 ++ ldr r3, [r5] ++ cmn r3, #1 ++ bne .L2132 ++ ldr r3, [r5, #4] ++ cmn r3, #1 ++ bne .L2132 ++ ldr r3, [r6] ++ cmn r3, #1 ++ moveq r0, #512 ++ b .L2132 ++.L2171: ++ .align 2 ++.L2170: ++ .word .LANCHOR0 ++ .word .LC148 ++ .word .LANCHOR3 ++ .word .LC149 ++ .word .LC150 ++ .fnend ++ .size nandc_xfer, .-nandc_xfer ++ .align 2 ++ .global flash_read_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_read_page, %function ++flash_read_page: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r6, r0 ++ ldr r7, .L2188 ++ .pad #20 ++ sub sp, sp, #20 ++ ubfx r9, r1, #24, #2 ++ mov r8, r3 ++ str r2, [sp, #12] ++ lsl r10, r6, #8 ++ ldrb r4, [r7, #1153] @ zero_extendqisi2 ++ ldr r5, [r7, #1044] ++ rsb r0, r4, #24 ++ mvn r4, #0 ++ bic r4, r1, r4, lsl r0 ++ bl nandc_wait_flash_ready ++ mov r0, r6 ++ bl nandc_cs ++ cmp r9, #0 ++ bne .L2173 ++ mov r0, r6 ++ bl zftl_flash_enter_slc_mode ++.L2174: ++ ldr r2, [r7, #1104] ++ ldrb r1, [r2, #7] @ zero_extendqisi2 ++ cmp r1, #1 ++ bne .L2176 ++ ldrb r1, [r2, #12] @ zero_extendqisi2 ++ cmp r1, #2 ++ addeq r1, r5, r10 ++ moveq r0, #38 ++ streq r0, [r1, #2056] ++.L2176: ++ add fp, r5, r10 ++ mov r1, #0 ++ str r1, [fp, #2056] ++ mov r0, #48 ++ str r1, [fp, #2052] ++ str r1, [fp, #2052] ++ uxtb r1, r4 ++ str r1, [fp, #2052] ++ lsr r1, r4, #8 ++ str r1, [fp, #2052] ++ lsr r1, r4, #16 ++ str r1, [fp, #2052] ++ ldrb r1, [r7, #1152] @ zero_extendqisi2 ++ cmp r1, #0 ++ lsrne r1, r4, #24 ++ strne r1, [fp, #2052] ++ add r1, r5, r10 ++ str r0, [r1, #2056] ++ cmp r9, #0 ++ ldrb r2, [r2, #12] @ zero_extendqisi2 ++ sub r2, r2, #3 ++ clz r2, r2 ++ lsr r2, r2, #5 ++ moveq r2, #0 ++ cmp r2, #0 ++ beq .L2178 ++ ldrb r2, [r7, #1158] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L2178 ++ ldrb r3, [r7, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ addeq r4, r4, r4, lsl #1 ++ subeq r0, r4, #1 ++ addeq r0, r0, r9 ++ beq .L2187 ++.L2178: ++ mov r0, r4 ++.L2187: ++ bl nandc_set_seed ++ bl nandc_wait_flash_ready ++ add r3, r5, r10 ++ mov r2, #5 ++ str r2, [r3, #2056] ++ mov r1, #0 ++ mov r2, #224 ++ str r1, [fp, #2052] ++ mov r0, r6 ++ str r1, [fp, #2052] ++ str r2, [r3, #2056] ++ ldr r3, [sp, #12] ++ ldrb r2, [sp, #56] @ zero_extendqisi2 ++ str r8, [sp] ++ bl nandc_xfer ++ bl nandc_de_cs.constprop.35 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2173: ++ ldr r2, [r7, #1104] ++ ldrb r2, [r2, #12] @ zero_extendqisi2 ++ cmp r2, #3 ++ bne .L2175 ++ ldrb r2, [r7, #1158] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L2175 ++ ldrb r2, [r7, #1159] @ zero_extendqisi2 ++ cmp r2, #0 ++ addeq r2, r5, r10 ++ streq r9, [r2, #2056] ++ beq .L2174 ++.L2175: ++ mov r0, r6 ++ bl zftl_flash_exit_slc_mode ++ b .L2174 ++.L2189: ++ .align 2 ++.L2188: ++ .word .LANCHOR0 ++ .fnend ++ .size flash_read_page, .-flash_read_page ++ .align 2 ++ .global micron_read_retrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type micron_read_retrial, %function ++micron_read_retrial: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, .L2219 ++ mov r6, r0 ++ mov r10, r1 ++ mov r9, #0 ++ str r3, [sp, #16] ++ ldrb r3, [r4, #1193] @ zero_extendqisi2 ++ str r2, [sp, #12] ++ add r3, r3, r3, lsl #1 ++ asr r3, r3, #2 ++ str r3, [sp, #8] ++ bl nandc_wait_flash_ready ++ ldr r5, [r4, #1044] ++ add r5, r5, r6, lsl #8 ++.L2191: ++ ldr fp, .L2219+4 ++ mov r0, r6 ++ mov r7, #0 ++ mvn r4, #0 ++ bl zftl_flash_enter_slc_mode ++ mov r0, r6 ++ bl zftl_flash_exit_slc_mode ++.L2192: ++ ldrb r3, [fp, #-108] @ zero_extendqisi2 ++ cmp r7, r3 ++ bcc .L2197 ++.L2196: ++ mov r3, #239 ++ mov r0, #200 ++ str r3, [r5, #2056] ++ mov r3, #137 ++ str r3, [r5, #2052] ++ bl ndelay ++ mov r3, #0 ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ ldr r3, [sp, #8] ++ cmp r4, r3 ++ bcc .L2198 ++ cmn r4, #1 ++ movne r4, #256 ++.L2198: ++ cmn r4, #1 ++ movne r8, #0 ++ moveq r8, #1 ++ cmp r4, #256 ++ movne r1, r8 ++ orreq r1, r8, #1 ++ cmp r1, #0 ++ beq .L2199 ++ mov r1, r6 ++ str r4, [sp] ++ mov r3, r7 ++ mov r2, r10 ++ ldr r0, .L2219+8 ++ bl rk_printk ++ eor r1, r9, #1 ++ ands r1, r8, r1 ++ beq .L2200 ++ mov r1, #3 ++ mov r0, r6 ++ bl mt_auto_read_calibration_config ++ mov r9, #1 ++ b .L2191 ++.L2197: ++ mov r3, #239 ++ mov r0, #200 ++ str r3, [r5, #2056] ++ mov r3, #137 ++ str r3, [r5, #2052] ++ bl ndelay ++ add r3, r7, #1 ++ ldr r2, [sp, #12] ++ str r3, [r5, #2048] ++ mov r1, r10 ++ str r3, [sp, #20] ++ mov r3, #0 ++ str r3, [r5, #2048] ++ mov r0, r6 ++ str r3, [r5, #2048] ++ str r3, [r5, #2048] ++ ldr r3, [sp, #64] ++ str r3, [sp] ++ ldr r3, [sp, #16] ++ bl flash_read_page ++ ldr r3, .L2219+12 ++ mov r8, r0 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L2193 ++ str r0, [sp] ++ mov r3, r4 ++ mov r2, r10 ++ mov r1, r7 ++ ldr r0, .L2219+16 ++ bl rk_printk ++.L2193: ++ cmn r8, #1 ++ beq .L2194 ++ ldr r3, [fp, #-120] ++ cmn r4, #1 ++ moveq r4, r8 ++ str r3, [sp, #12] ++ ldr r3, [fp, #-112] ++ str r3, [sp, #16] ++ ldr r3, [sp, #8] ++ cmp r8, r3 ++ bcc .L2203 ++.L2194: ++ ldr r7, [sp, #20] ++ b .L2192 ++.L2203: ++ mov r4, r8 ++ b .L2196 ++.L2200: ++ cmp r9, #0 ++ beq .L2201 ++ mov r0, r6 ++ bl mt_auto_read_calibration_config ++ cmn r4, #1 ++ movne r4, #256 ++.L2201: ++ bl nandc_wait_flash_ready ++ mov r0, r4 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2199: ++ cmp r9, #0 ++ beq .L2201 ++ mov r0, r6 ++ mov r4, #256 ++ bl mt_auto_read_calibration_config ++ b .L2201 ++.L2220: ++ .align 2 ++.L2219: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LC152 ++ .word .LANCHOR2 ++ .word .LC151 ++ .fnend ++ .size micron_read_retrial, .-micron_read_retrial ++ .align 2 ++ .global toshiba_3d_read_retrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type toshiba_3d_read_retrial, %function ++toshiba_3d_read_retrial: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r7, .L2269 ++ mov r8, r0 ++ ubfx r4, r1, #24, #2 ++ mov r9, r1 ++ str r3, [sp, #20] ++ add r6, r8, #8 ++ str r2, [sp, #16] ++ mov r5, #1 ++ bl nandc_wait_flash_ready ++ ldr r3, [r7, #1044] ++ str r3, [sp, #12] ++ add r6, r3, r6, lsl #8 ++ ldrb r3, [r7, #1100] @ zero_extendqisi2 ++ cmp r3, #36 ++ movne r3, #56 ++ moveq r3, #46 ++ str r3, [sp, #28] ++ movne r3, #10 ++ moveq r3, #26 ++ cmp r4, #0 ++ str r3, [sp, #24] ++ mvn r4, #0 ++ ldr r3, [sp, #12] ++ add fp, r3, r8, lsl #8 ++ bne .L2239 ++.L2230: ++ ldr r3, .L2269 ++ ldrb r3, [r3, #1100] @ zero_extendqisi2 ++ cmp r3, #36 ++ bne .L2224 ++ mov r2, #0 ++ mov r1, r5 ++ mov r0, r6 ++ bl toshiba_tlc_set_rr_para ++ mov r3, #93 ++ str r3, [fp, #2056] ++.L2225: ++ ldr r3, [sp, #72] ++ mov r1, r9 ++ ldr r2, [sp, #16] ++ mov r0, r8 ++ str r3, [sp] ++ ldr r3, [sp, #20] ++ bl flash_read_page ++ ldr r3, .L2269+4 ++ mov r10, r0 ++ ldr r3, [r3] ++ tst r3, #16 ++ beq .L2226 ++ mov r3, r0 ++ mov r2, r9 ++ mov r1, r5 ++ ldr r0, .L2269+8 ++ bl rk_printk ++.L2226: ++ cmn r10, #1 ++ beq .L2227 ++ ldr r3, .L2269+12 ++ cmn r4, #1 ++ moveq r4, r10 ++ ldr r2, [r3, #-120] ++ ldr r3, [r3, #-112] ++ str r2, [sp, #16] ++ str r3, [sp, #20] ++ ldrb r3, [r7, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r10, r3, asr #2 ++ bcc .L2245 ++.L2227: ++ ldr r3, [sp, #24] ++ add r5, r5, #1 ++ cmp r3, r5 ++ bne .L2230 ++.L2229: ++ ldr r3, .L2269 ++ ldrb r3, [r3, #1100] @ zero_extendqisi2 ++ cmp r3, #36 ++ moveq r2, #0 ++ beq .L2268 ++ mov r1, #0 ++ mov r0, r6 ++ bl toshiba_3d_set_slc_rr_para ++.L2232: ++ ldr r3, .L2269 ++ ldrb r3, [r3, #1100] @ zero_extendqisi2 ++ cmp r3, #36 ++ bne .L2241 ++ ldr r3, [sp, #12] ++ mov r2, #85 ++ add r3, r3, r8, lsl #8 ++ str r2, [r3, #2056] ++ mov r2, #0 ++ str r2, [r3, #2052] ++ str r2, [r3, #2048] ++ mov r2, #255 ++ str r2, [r3, #2056] ++.L2241: ++ ldrb r3, [r7, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L2242 ++ cmn r4, #1 ++ movne r4, #256 ++.L2242: ++ cmn r4, #1 ++ cmpne r4, #256 ++ bne .L2243 ++ str r4, [sp] ++ mov r3, r5 ++ mov r2, r9 ++ mov r1, r8 ++ ldr r0, .L2269+16 ++ bl rk_printk ++.L2243: ++ bl nandc_wait_flash_ready ++ mov r0, r4 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2224: ++ uxtb r1, r5 ++ mov r0, r6 ++ bl toshiba_3d_set_slc_rr_para ++ b .L2225 ++.L2245: ++ mov r4, r10 ++ b .L2229 ++.L2239: ++ ldr r3, .L2269 ++ ldrb r3, [r3, #1100] @ zero_extendqisi2 ++ cmp r3, #36 ++ bne .L2233 ++ mov r2, #1 ++ mov r1, r5 ++ mov r0, r6 ++ bl toshiba_tlc_set_rr_para ++ mov r3, #93 ++.L2267: ++ str r3, [fp, #2056] ++ mov r1, r9 ++ ldr r3, [sp, #72] ++ mov r0, r8 ++ ldr r2, [sp, #16] ++ str r3, [sp] ++ ldr r3, [sp, #20] ++ bl flash_read_page ++ ldr r3, .L2269+4 ++ mov r10, r0 ++ ldr r3, [r3] ++ tst r3, #16 ++ beq .L2235 ++ mov r3, r0 ++ mov r2, r9 ++ mov r1, r5 ++ ldr r0, .L2269+20 ++ bl rk_printk ++.L2235: ++ cmn r10, #1 ++ beq .L2236 ++ ldr r3, .L2269+12 ++ cmn r4, #1 ++ moveq r4, r10 ++ ldr r2, [r3, #-120] ++ ldr r3, [r3, #-112] ++ str r2, [sp, #16] ++ str r3, [sp, #20] ++ ldrb r3, [r7, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r10, r3, asr #2 ++ bcc .L2246 ++.L2236: ++ ldr r3, [sp, #28] ++ add r5, r5, #1 ++ cmp r3, r5 ++ bne .L2239 ++.L2238: ++ ldr r3, .L2269 ++ ldrb r3, [r3, #1100] @ zero_extendqisi2 ++ cmp r3, #36 ++ bne .L2240 ++ mov r2, #1 ++.L2268: ++ mov r1, #0 ++ mov r0, r6 ++ bl toshiba_tlc_set_rr_para ++ b .L2232 ++.L2233: ++ uxtb r1, r5 ++ mov r0, r6 ++ bl toshiba_3d_set_tlc_rr_para ++ mov r3, #38 ++ b .L2267 ++.L2246: ++ mov r4, r10 ++ b .L2238 ++.L2240: ++ mov r1, #0 ++ mov r0, r6 ++ bl toshiba_3d_set_tlc_rr_para ++ b .L2232 ++.L2270: ++ .align 2 ++.L2269: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC153 ++ .word .LANCHOR3 ++ .word .LC155 ++ .word .LC154 ++ .fnend ++ .size toshiba_3d_read_retrial, .-toshiba_3d_read_retrial ++ .align 2 ++ .global toshiba_read_retrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type toshiba_read_retrial, %function ++toshiba_read_retrial: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r6, r0 ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r5, .L2303 ++ add r9, r6, #8 ++ str r3, [sp, #20] ++ str r1, [sp, #12] ++ str r2, [sp, #16] ++ bl nandc_wait_flash_ready ++ mov r0, r6 ++ bl zftl_flash_enter_slc_mode ++ mov r0, r6 ++ bl zftl_flash_exit_slc_mode ++ ldrb r3, [r5, #1100] @ zero_extendqisi2 ++ ldr r7, [r5, #1044] ++ sub r3, r3, #67 ++ cmp r3, #1 ++ lsl r3, r6, #8 ++ add r9, r7, r9, lsl #8 ++ str r3, [sp, #24] ++ movls r3, #0 ++ strls r3, [sp, #8] ++ bls .L2272 ++ ldrb r3, [r5, #1143] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2290 ++ mov r0, #1 ++ bl nandc_set_if_mode ++ mov r3, #1 ++.L2290: ++ str r3, [sp, #8] ++ lsl r3, r6, #8 ++ mov r2, #92 ++ add r3, r7, r3 ++ str r2, [r3, #2056] ++ mov r2, #197 ++ str r2, [r3, #2056] ++.L2272: ++ ldr fp, .L2303+4 ++ lsl r3, r6, #8 ++ mov r8, #1 ++ mvn r10, #0 ++ str r3, [sp, #28] ++.L2274: ++ ldrb r3, [fp, #-108] @ zero_extendqisi2 ++ add r3, r3, #1 ++ cmp r8, r3 ++ bcc .L2283 ++ mov r4, r10 ++.L2282: ++ ldrb r3, [r5, #1100] @ zero_extendqisi2 ++ mov r1, #0 ++ mov r0, r9 ++ sub r3, r3, #67 ++ cmp r3, #1 ++ bhi .L2284 ++ bl sandisk_set_rr_para ++.L2285: ++ add r6, r7, r6, lsl #8 ++ mov r3, #255 ++ str r3, [r6, #2056] ++ ldrb r3, [r5, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L2286 ++ cmn r4, #1 ++ movne r4, #256 ++.L2286: ++ cmn r4, #1 ++ cmpne r4, #256 ++ bne .L2287 ++ str r4, [sp] ++ mov r3, r8 ++ ldr r2, [sp, #12] ++ mov r1, r8 ++ ldr r0, .L2303+8 ++ bl rk_printk ++.L2287: ++ bl nandc_wait_flash_ready ++ ldr r3, [sp, #8] ++ cmp r3, #0 ++ beq .L2271 ++ mov r0, #4 ++ bl nandc_set_if_mode ++.L2271: ++ mov r0, r4 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2283: ++ ldrb r3, [r5, #1100] @ zero_extendqisi2 ++ mov r0, r9 ++ uxtb r1, r8 ++ sub r3, r3, #67 ++ cmp r3, #1 ++ bhi .L2275 ++ bl sandisk_set_rr_para ++.L2276: ++ ldrb r3, [r5, #1100] @ zero_extendqisi2 ++ cmp r3, #34 ++ bne .L2277 ++ ldr r3, .L2303+4 ++ ldrb r3, [r3, #-108] @ zero_extendqisi2 ++ sub r3, r3, #3 ++ cmp r8, r3 ++ ldreq r3, [sp, #28] ++ moveq r2, #179 ++ addeq r3, r7, r3 ++ streq r2, [r3, #2056] ++.L2277: ++ ldr r3, [sp, #24] ++ mov r2, #38 ++ add r1, sp, #12 ++ mov r0, r6 ++ add r3, r7, r3 ++ str r2, [r3, #2056] ++ mov r2, #93 ++ str r2, [r3, #2056] ++ ldr r3, [sp, #72] ++ str r3, [sp] ++ ldm r1, {r1, r2, r3} ++ bl flash_read_page ++ cmn r0, #1 ++ mov r4, r0 ++ beq .L2280 ++ ldr r3, [fp, #-120] ++ cmn r10, #1 ++ moveq r10, r0 ++ str r3, [sp, #16] ++ ldr r3, [fp, #-112] ++ str r3, [sp, #20] ++ ldrb r3, [r5, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L2282 ++.L2280: ++ add r8, r8, #1 ++ b .L2274 ++.L2275: ++ bl toshiba_set_rr_para ++ b .L2276 ++.L2284: ++ bl toshiba_set_rr_para ++ b .L2285 ++.L2304: ++ .align 2 ++.L2303: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LC155 ++ .fnend ++ .size toshiba_read_retrial, .-toshiba_read_retrial ++ .align 2 ++ .global ymtc_3d_read_retrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ymtc_3d_read_retrial, %function ++ymtc_3d_read_retrial: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r0 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r8, r1 ++ mov r9, r2 ++ mov r10, r3 ++ bl nandc_wait_flash_ready ++ mov r0, r7 ++ mvn r4, #0 ++ bl zftl_flash_enter_slc_mode ++ mov r0, r7 ++ mov r5, #1 ++ bl zftl_flash_exit_slc_mode ++ ldr r3, .L2334 ++ tst r8, #50331648 ++ add r2, r7, #8 ++ ldr fp, .L2334+4 ++ ldr r6, [r3, #1044] ++ str r3, [sp, #12] ++ add r6, r6, r2, lsl #8 ++ bne .L2315 ++.L2310: ++ uxtb r1, r5 ++ mov r0, r6 ++ bl ymtc_3d_set_slc_rr_para ++ ldr r3, [sp, #56] ++ mov r2, r9 ++ mov r1, r8 ++ mov r0, r7 ++ str r3, [sp] ++ mov r3, r10 ++ bl flash_read_page ++ cmn r0, #1 ++ beq .L2307 ++ ldr r3, [sp, #12] ++ cmn r4, #1 ++ moveq r4, r0 ++ ldr r9, [fp, #-120] ++ ldr r10, [fp, #-112] ++ ldrb r3, [r3, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L2318 ++.L2307: ++ add r5, r5, #1 ++ cmp r5, #10 ++ bne .L2310 ++.L2309: ++ mov r1, #0 ++ mov r0, r6 ++ bl ymtc_3d_set_slc_rr_para ++.L2311: ++ ldr r3, [sp, #12] ++ ldrb r3, [r3, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L2316 ++ cmn r4, #1 ++ movne r4, #256 ++.L2316: ++ cmn r4, #1 ++ cmpne r4, #256 ++ bne .L2317 ++ str r4, [sp] ++ mov r3, r5 ++ mov r2, r8 ++ mov r1, r5 ++ ldr r0, .L2334+8 ++ bl rk_printk ++.L2317: ++ bl nandc_wait_flash_ready ++ mov r0, r4 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2318: ++ mov r4, r0 ++ b .L2309 ++.L2315: ++ uxtb r1, r5 ++ mov r0, r6 ++ bl ymtc_3d_set_tlc_rr_para ++ ldr r3, [sp, #56] ++ mov r2, r9 ++ mov r1, r8 ++ mov r0, r7 ++ str r3, [sp] ++ mov r3, r10 ++ bl flash_read_page ++ cmn r0, #1 ++ beq .L2312 ++ ldr r3, [sp, #12] ++ cmn r4, #1 ++ moveq r4, r0 ++ ldr r9, [fp, #-120] ++ ldr r10, [fp, #-112] ++ ldrb r3, [r3, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L2319 ++.L2312: ++ add r5, r5, #1 ++ cmp r5, #51 ++ bne .L2315 ++.L2314: ++ mov r1, #0 ++ mov r0, r6 ++ bl ymtc_3d_set_tlc_rr_para ++ b .L2311 ++.L2319: ++ mov r4, r0 ++ b .L2314 ++.L2335: ++ .align 2 ++.L2334: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LC156 ++ .fnend ++ .size ymtc_3d_read_retrial, .-ymtc_3d_read_retrial ++ .align 2 ++ .global samsung_read_retrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type samsung_read_retrial, %function ++samsung_read_retrial: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r9, r0 ++ .pad #28 ++ sub sp, sp, #28 ++ mov r7, r1 ++ mov fp, r3 ++ str r2, [sp, #16] ++ bl nandc_wait_flash_ready ++ mov r0, r9 ++ bl zftl_flash_enter_slc_mode ++ mov r0, r9 ++ bl zftl_flash_exit_slc_mode ++ ldr r3, .L2374 ++ tst r7, #50331648 ++ ldr r2, [r3, #1044] ++ str r3, [sp, #20] ++ str r2, [sp, #12] ++ bne .L2337 ++ lsl r10, r9, #8 ++ mvn r4, #0 ++ mov r5, #1 ++ add r6, r2, r10 ++.L2342: ++ mov r3, #239 ++ str r3, [r6, #2056] ++ mov r3, #141 ++ str r3, [r6, #2052] ++ ldr r3, .L2374+4 ++ ldrsb r3, [r5, r3] ++ str r3, [r6, #2048] ++ mov r3, #0 ++ str r3, [r6, #2048] ++ str r3, [r6, #2048] ++ str r3, [r6, #2048] ++ bl nandc_wait_flash_ready ++ ldr r3, [sp, #64] ++ mov r1, r7 ++ ldr r2, [sp, #16] ++ mov r0, r9 ++ str r3, [sp] ++ mov r3, fp ++ bl flash_read_page ++ ldr r3, .L2374+8 ++ mov r8, r0 ++ ldr r3, [r3] ++ tst r3, #16 ++ beq .L2338 ++ mov r3, r0 ++ mov r2, r7 ++ mov r1, r5 ++ ldr r0, .L2374+12 ++ bl rk_printk ++.L2338: ++ cmn r8, #1 ++ beq .L2339 ++ ldr r3, .L2374+16 ++ cmn r4, #1 ++ moveq r4, r8 ++ ldr r2, [r3, #-120] ++ ldr fp, [r3, #-112] ++ ldr r3, [sp, #20] ++ str r2, [sp, #16] ++ ldrb r3, [r3, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r8, r3, asr #2 ++ bcc .L2351 ++.L2339: ++ add r5, r5, #1 ++ cmp r5, #26 ++ bne .L2342 ++.L2341: ++ ldr r3, [sp, #12] ++ add r10, r3, r10 ++ mov r3, #239 ++ str r3, [r10, #2056] ++ mov r3, #141 ++.L2373: ++ str r3, [r6, #2052] ++ mov r3, #0 ++ str r3, [r6, #2048] ++ str r3, [r6, #2048] ++ str r3, [r6, #2048] ++ str r3, [r6, #2048] ++ bl nandc_wait_flash_ready ++ ldr r3, .L2374 ++ ldrb r3, [r3, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L2349 ++ cmn r4, #1 ++ movne r4, #256 ++.L2349: ++ cmn r4, #1 ++ cmpne r4, #256 ++ bne .L2350 ++ str r4, [sp] ++ mov r3, r5 ++ mov r2, r7 ++ mov r1, r5 ++ ldr r0, .L2374+20 ++ bl rk_printk ++.L2350: ++ bl nandc_wait_flash_ready ++ mov r0, r4 ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2351: ++ mov r4, r8 ++ b .L2341 ++.L2337: ++ lsl r3, r9, #8 ++ lsl r2, r9, #8 ++ ldr r8, .L2374+24 ++ str r3, [sp, #20] ++ mvn r4, #0 ++ ldr r3, [sp, #12] ++ mov r5, #1 ++ add r6, r3, r2 ++.L2348: ++ mov r3, #239 ++ str r3, [r6, #2056] ++ mov r3, #137 ++ str r3, [r6, #2052] ++ ldrb r3, [r8, #4] @ zero_extendqisi2 ++ str r3, [r6, #2048] ++ ldrb r3, [r8, #5] @ zero_extendqisi2 ++ str r3, [r6, #2048] ++ ldrb r3, [r8, #6] @ zero_extendqisi2 ++ str r3, [r6, #2048] ++ ldrb r3, [r8, #7] @ zero_extendqisi2 ++ str r3, [r6, #2048] ++ bl nandc_wait_flash_ready ++ ldr r3, [sp, #64] ++ mov r1, r7 ++ ldr r2, [sp, #16] ++ mov r0, r9 ++ str r3, [sp] ++ mov r3, fp ++ bl flash_read_page ++ ldr r3, .L2374+8 ++ mov r10, r0 ++ ldr r3, [r3] ++ tst r3, #16 ++ beq .L2344 ++ mov r3, r0 ++ mov r2, r7 ++ mov r1, r5 ++ ldr r0, .L2374+28 ++ bl rk_printk ++.L2344: ++ cmn r10, #1 ++ beq .L2345 ++ ldr r3, .L2374+16 ++ cmn r4, #1 ++ moveq r4, r10 ++ ldr r2, [r3, #-120] ++ ldr fp, [r3, #-112] ++ ldr r3, .L2374 ++ str r2, [sp, #16] ++ ldrb r3, [r3, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r10, r3, asr #2 ++ bcc .L2352 ++.L2345: ++ add r5, r5, #1 ++ add r8, r8, #4 ++ cmp r5, #26 ++ bne .L2348 ++.L2347: ++ ldr r3, [sp, #12] ++ ldr r2, [sp, #20] ++ add r10, r3, r2 ++ mov r3, #239 ++ str r3, [r10, #2056] ++ mov r3, #137 ++ b .L2373 ++.L2352: ++ mov r4, r10 ++ b .L2347 ++.L2375: ++ .align 2 ++.L2374: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1752 ++ .word .LANCHOR2 ++ .word .LC157 ++ .word .LANCHOR3 ++ .word .LC159 ++ .word .LANCHOR1+1778 ++ .word .LC158 ++ .fnend ++ .size samsung_read_retrial, .-samsung_read_retrial ++ .align 2 ++ .global hynix_read_retrial ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type hynix_read_retrial, %function ++hynix_read_retrial: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r3 ++ ldr fp, .L2395 ++ mov r9, r2 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r6, r0 ++ mov r8, r1 ++ mov r7, #0 ++ ldr r3, [fp, #1040] ++ mvn r4, #0 ++ add r2, r3, r0 ++ ldrb r3, [r3, #114] @ zero_extendqisi2 ++ str r2, [sp, #12] ++ ldrb r5, [r2, #120] @ zero_extendqisi2 ++ str r3, [sp, #8] ++ bl nandc_wait_flash_ready ++ mov r0, r6 ++ bl zftl_flash_enter_slc_mode ++ mov r0, r6 ++ bl zftl_flash_exit_slc_mode ++.L2377: ++ ldr r3, [sp, #8] ++ cmp r7, r3 ++ bcc .L2382 ++.L2381: ++ ldr r3, [sp, #12] ++ strb r5, [r3, #120] ++ ldrb r3, [fp, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r4, r3, asr #2 ++ bcc .L2383 ++ cmn r4, #1 ++ movne r4, #256 ++.L2383: ++ cmn r4, #1 ++ cmpne r4, #256 ++ bne .L2384 ++ str r4, [sp] ++ mov r3, r7 ++ mov r2, r8 ++ mov r1, r7 ++ ldr r0, .L2395+4 ++ bl rk_printk ++.L2384: ++ bl nandc_wait_flash_ready ++ mov r0, r4 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2382: ++ ldr r3, [sp, #8] ++ add r5, r5, #1 ++ uxtb r5, r5 ++ mov r0, r6 ++ cmp r3, r5 ++ movls r5, #0 ++ mov r1, r5 ++ bl hynix_set_rr_para ++ ldr r3, [sp, #56] ++ mov r2, r9 ++ mov r1, r8 ++ mov r0, r6 ++ str r3, [sp] ++ mov r3, r10 ++ bl flash_read_page ++ cmn r0, #1 ++ beq .L2379 ++ ldr r3, .L2395+8 ++ cmn r4, #1 ++ moveq r4, r0 ++ ldr r9, [r3, #-120] ++ ldr r10, [r3, #-112] ++ ldrb r3, [fp, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ bcc .L2385 ++.L2379: ++ add r7, r7, #1 ++ b .L2377 ++.L2385: ++ mov r4, r0 ++ b .L2381 ++.L2396: ++ .align 2 ++.L2395: ++ .word .LANCHOR0 ++ .word .LC160 ++ .word .LANCHOR3 ++ .fnend ++ .size hynix_read_retrial, .-hynix_read_retrial ++ .align 2 ++ .global flash_ddr_tuning_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_ddr_tuning_read, %function ++flash_ddr_tuning_read: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, #0 ++ mov r5, r4 ++ mov r6, #1024 ++ mov r7, #6 ++ mvn r10, #0 ++ .pad #36 ++ sub sp, sp, #36 ++ mov r8, r0 ++ mov fp, r1 ++ str r2, [sp, #16] ++ str r3, [sp, #20] ++ bl nandc_get_ddr_para ++ str r0, [sp, #28] ++ str r4, [sp, #24] ++ str r4, [sp, #12] ++.L2403: ++ uxtb r0, r7 ++ bl nandc_set_ddr_para ++ ldr r3, [sp, #72] ++ mov r1, fp ++ ldr r2, [sp, #16] ++ mov r0, r8 ++ str r3, [sp] ++ ldr r3, [sp, #20] ++ bl flash_read_page ++ ldr r3, .L2424 ++ mov r9, r0 ++ ldr r3, [r3] ++ tst r3, #16 ++ beq .L2398 ++ mov r3, r0 ++ mov r2, fp ++ mov r1, r7 ++ ldr r0, .L2424+4 ++ bl rk_printk ++.L2398: ++ add r3, r6, #1 ++ cmp r9, r3 ++ bhi .L2399 ++ ldr r3, .L2424+8 ++ ldr r3, [r3, #-120] ++ str r3, [sp, #16] ++ ldr r3, .L2424+8 ++ ldr r3, [r3, #-112] ++ str r3, [sp, #20] ++ ldr r3, .L2424+12 ++ ldrb r3, [r3, #1193] @ zero_extendqisi2 ++ cmp r9, r3, lsr #2 ++ bcs .L2409 ++ add r5, r5, #1 ++ cmp r5, #7 ++ bls .L2409 ++ sub r4, r7, r5 ++ mov r6, r9 ++ mov r10, #0 ++.L2401: ++ ldr r2, [sp, #12] ++ ldr r3, [sp, #24] ++ cmp r5, r2 ++ movcc r4, r3 ++.L2402: ++ cmp r4, #0 ++ beq .L2404 ++ ldr r3, .L2424+12 ++ ldrb r2, [r3, #1193] @ zero_extendqisi2 ++ ldr r3, .L2424+16 ++ umull r2, r3, r2, r3 ++ ubfx r3, r3, #1, #8 ++ cmp r3, r6 ++ bls .L2404 ++ mov r1, r4 ++ ldr r0, .L2424+20 ++ bl rk_printk ++ uxtb r0, r4 ++.L2423: ++ bl nandc_set_ddr_para ++ cmn r10, #1 ++ bne .L2397 ++ ldr r4, .L2424+12 ++ ldrb r3, [r4, #1192] @ zero_extendqisi2 ++ mov r5, r4 ++ tst r3, #1 ++ beq .L2397 ++ mov r1, r8 ++ mov r2, fp ++ ldr r0, .L2424+24 ++ bl rk_printk ++ mov r0, r8 ++ bl flash_reset ++ mov r0, #1 ++ bl flash_set_interface_mode ++ mov r0, #1 ++ bl nandc_set_if_mode ++ add r3, r4, r8 ++ mov r2, #2 ++ mov r0, r8 ++ strb r2, [r3, #1154] ++ bl zftl_flash_enter_slc_mode ++ ldr r3, [sp, #72] ++ mov r1, fp ++ ldr r2, [sp, #16] ++ mov r0, r8 ++ str r3, [sp] ++ ldr r3, [sp, #20] ++ bl flash_read_page ++ mov r2, fp ++ mov r3, r0 ++ mov r6, r0 ++ mov r1, r8 ++ ldr r0, .L2424+28 ++ bl rk_printk ++ ldrb r3, [r4, #1193] @ zero_extendqisi2 ++ cmp r6, r3 ++ bhi .L2411 ++ ldr r2, .L2424+8 ++ ldr r3, [r2, #-104] ++ add r3, r3, #1 ++ cmp r3, #100 ++ str r3, [r2, #-104] ++ movhi r3, #0 ++ strbhi r3, [r4, #1143] ++ bhi .L2397 ++.L2407: ++ ldrb r0, [r5, #1192] @ zero_extendqisi2 ++ bl flash_set_interface_mode ++ ldrb r0, [r5, #1192] @ zero_extendqisi2 ++ bl nandc_set_if_mode ++.L2397: ++ mov r0, r6 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2399: ++ ldr r3, [sp, #12] ++ cmp r5, r3 ++ bls .L2410 ++ cmp r5, #7 ++ sub r3, r4, r5 ++ str r3, [sp, #24] ++ bhi .L2402 ++ str r5, [sp, #12] ++.L2410: ++ mov r5, #0 ++ b .L2400 ++.L2409: ++ mov r4, r7 ++ mov r6, r9 ++ mov r10, #0 ++.L2400: ++ add r7, r7, #2 ++ cmp r7, #50 ++ bne .L2403 ++ b .L2401 ++.L2404: ++ ldrb r0, [sp, #28] @ zero_extendqisi2 ++ b .L2423 ++.L2411: ++ mov r6, r10 ++ b .L2407 ++.L2425: ++ .align 2 ++.L2424: ++ .word .LANCHOR2 ++ .word .LC161 ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word -1431655765 ++ .word .LC162 ++ .word .LC163 ++ .word .LC164 ++ .fnend ++ .size flash_ddr_tuning_read, .-flash_ddr_tuning_read ++ .align 2 ++ .global flash_read_page_en ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_read_page_en, %function ++flash_read_page_en: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r8, r3 ++ ldr r5, .L2454 ++ mov r10, r0 ++ mov r4, r1 ++ mov r7, r2 ++ ldr r9, [sp, #48] ++ ldrb r3, [r5, #1109] @ zero_extendqisi2 ++ cmp r3, r0 ++ bhi .L2427 ++ movw r2, #431 ++ ldr r1, .L2454+4 ++ ldr r0, .L2454+8 ++ bl rk_printk ++ bl dump_stack ++.L2427: ++ add r3, r5, r10 ++ ldrb r6, [r3, #1144] @ zero_extendqisi2 ++ ldrb r3, [r5, #1109] @ zero_extendqisi2 ++ cmp r10, r3 ++ bcc .L2428 ++ ldr r2, .L2454+12 ++ ldr r2, [r2] ++ tst r2, #64 ++ bne .L2429 ++.L2453: ++ mvn r0, #0 ++.L2426: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2429: ++ str r3, [sp] ++ mov r2, r10 ++ mov r3, r4 ++ mov r1, r6 ++ ldr r0, .L2454+16 ++ bl rk_printk ++ b .L2453 ++.L2428: ++ tst r4, #50331648 ++ bne .L2431 ++ ldrb r3, [r5] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2432 ++ ldrb r3, [r5, #1] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2431 ++.L2432: ++ ldrh r10, [r5, #2] ++ mov r0, r4 ++ mov r1, r10 ++ bl __aeabi_uidiv ++ mov r1, r10 ++ mul fp, r10, r0 ++ mov r0, r4 ++ bl __aeabi_uidivmod ++ ldrb r3, [r5, #1] @ zero_extendqisi2 ++ lsl r1, r1, #1 ++ cmp r3, #0 ++ addeq r1, r5, r1 ++ addne r4, r1, fp ++ ldrheq r4, [r1, #4] ++ addeq r4, r4, fp ++.L2431: ++ str r9, [sp] ++ mov r3, r8 ++ mov r2, r7 ++ mov r1, r4 ++ mov r0, r6 ++ bl flash_read_page ++ cmn r0, #1 ++ bne .L2426 ++ ldrb r10, [r5, #1196] @ zero_extendqisi2 ++ cmp r10, #0 ++ bne .L2434 ++.L2437: ++ ldr r3, .L2454+20 ++ ldr r10, [r3, #-100] ++ cmp r10, #0 ++ bne .L2435 ++.L2436: ++ ldrb r3, [r5, #1196] @ zero_extendqisi2 ++ mov r2, r4 ++ mov r1, #0 ++ ldr r0, .L2454+24 ++ str r3, [sp] ++ mvn r3, #0 ++ bl rk_printk ++ ldrb r3, [r5, #1143] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2453 ++ str r9, [sp, #48] ++ mov r3, r8 ++ mov r2, r7 ++ mov r1, r4 ++ mov r0, r6 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b flash_ddr_tuning_read ++.L2434: ++ mov r3, #0 ++ str r9, [sp] ++ strb r3, [r5, #1196] ++ mov r2, r7 ++ mov r3, r8 ++ mov r1, r4 ++ mov r0, r6 ++ bl flash_read_page ++ cmn r0, #1 ++ strb r10, [r5, #1196] ++ beq .L2437 ++ b .L2426 ++.L2435: ++ str r9, [sp] ++ mov r3, r8 ++ mov r2, r7 ++ mov r1, r4 ++ mov r0, r6 ++ blx r10 ++ cmn r0, #1 ++ bne .L2426 ++ b .L2436 ++.L2455: ++ .align 2 ++.L2454: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1882 ++ .word .LC0 ++ .word .LANCHOR2 ++ .word .LC165 ++ .word .LANCHOR3 ++ .word .LC166 ++ .fnend ++ .size flash_read_page_en, .-flash_read_page_en ++ .align 2 ++ .global flash_get_last_written_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_get_last_written_page, %function ++flash_get_last_written_page: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r8, r1 ++ ldr r5, .L2467 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r10, r0 ++ mov fp, r2 ++ ldr r1, .L2467+4 ++ mov r9, r3 ++ ldrh r6, [r5, #30] ++ ldrh r4, [r1, #-224] ++ ldr r1, [sp, #56] ++ mul r6, r8, r6 ++ sub r4, r4, #1 ++ sxth r4, r4 ++ str r1, [sp] ++ add r1, r4, r6 ++ bl flash_read_page_en ++ cmp r0, #512 ++ str r5, [sp, #12] ++ moveq r7, #0 ++ beq .L2458 ++.L2457: ++ ldr r3, [sp, #12] ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L2462 ++ ldr r3, [r9] ++ mov r2, r4 ++ mov r1, r8 ++ ldr r0, .L2467+8 ++ bl rk_printk ++.L2462: ++ mov r0, r4 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2461: ++ add r5, r7, r4 ++ ldr r3, [sp, #56] ++ add r5, r5, r5, lsr #31 ++ mov r2, fp ++ mov r0, r10 ++ asr r5, r5, #1 ++ str r3, [sp] ++ mov r3, r9 ++ sxtah r1, r6, r5 ++ bl flash_read_page_en ++ cmp r0, #512 ++ subeq r4, r5, #1 ++ addne r5, r5, #1 ++ sxtheq r4, r4 ++ sxthne r7, r5 ++.L2458: ++ cmp r7, r4 ++ ble .L2461 ++ b .L2457 ++.L2468: ++ .align 2 ++.L2467: ++ .word .LANCHOR2 ++ .word .LANCHOR3 ++ .word .LC167 ++ .fnend ++ .size flash_get_last_written_page, .-flash_get_last_written_page ++ .align 2 ++ .global flash_get_last_written_page_ext ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_get_last_written_page_ext, %function ++flash_get_last_written_page_ext: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L2471 ++ push {r0, r1, r2, lr} ++ .save {lr} ++ .pad #12 ++ ldr lr, .L2471+4 ++ ldrb ip, [ip, #1153] @ zero_extendqisi2 ++ ldrh lr, [lr, #-2] ++ str r3, [sp] ++ mov r3, r2 ++ rsb ip, ip, #24 ++ mov r2, r1 ++ sub ip, ip, lr ++ mvn r1, #0 ++ asr lr, r0, ip ++ bic r1, r0, r1, lsl ip ++ uxtb r0, lr ++ bl flash_get_last_written_page ++ add sp, sp, #12 ++ @ sp needed ++ ldr pc, [sp], #4 ++.L2472: ++ .align 2 ++.L2471: ++ .word .LANCHOR0 ++ .word .LANCHOR3-3136 ++ .fnend ++ .size flash_get_last_written_page_ext, .-flash_get_last_written_page_ext ++ .align 2 ++ .global flash_ddr_para_scan ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_ddr_para_scan, %function ++flash_ddr_para_scan: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ .pad #12 ++ mov r7, r0 ++ ldr r4, .L2480 ++ mov r6, #1 ++ mov r8, r1 ++ mov r9, #4 ++ ldr r5, .L2480+4 ++ ldrb r0, [r4, #1192] @ zero_extendqisi2 ++ strb r6, [r4, #1143] ++ bl flash_set_interface_mode ++ ldrb r0, [r4, #1192] @ zero_extendqisi2 ++ bl nandc_set_if_mode ++ ldr r3, [r5, #-96] ++ mov r1, r8 ++ ldr r2, [r5, #-92] ++ mov r0, r7 ++ str r9, [sp] ++ bl flash_ddr_tuning_read ++ ldr r3, [r5, #-96] ++ mov r1, r8 ++ str r9, [sp] ++ mov r0, r7 ++ ldr r2, [r5, #-92] ++ bl flash_read_page ++ cmn r0, #1 ++ mov r3, r4 ++ bne .L2474 ++ ldrb r2, [r4, #1192] @ zero_extendqisi2 ++ tst r2, #1 ++ beq .L2474 ++ mov r0, r6 ++ bl flash_set_interface_mode ++ mov r0, r6 ++ bl nandc_set_if_mode ++ mov r3, #0 ++ strb r3, [r4, #1143] ++.L2475: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L2474: ++ mov r2, #1 ++ strb r2, [r3, #1143] ++ b .L2475 ++.L2481: ++ .align 2 ++.L2480: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .fnend ++ .size flash_ddr_para_scan, .-flash_ddr_para_scan ++ .align 2 ++ .global flash_prog_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_prog_page, %function ++flash_prog_page: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov fp, r3 ++ ldr r6, .L2494 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r4, r0 ++ mov r7, r1 ++ str r2, [sp, #12] ++ mvn r2, #0 ++ ldrb r3, [r6, #1153] @ zero_extendqisi2 ++ add r8, r0, #8 ++ ldr r5, [r6, #1044] ++ rsb r3, r3, #24 ++ bic r10, r1, r2, lsl r3 ++ add r8, r5, r8, lsl #8 ++ bl nandc_wait_flash_ready ++ mov r0, r4 ++ bl hynix_reconfig_rr_para ++ mov r0, r4 ++ bl nandc_cs ++ tst r7, #50331648 ++ mov r0, r4 ++ bne .L2483 ++ bl zftl_flash_enter_slc_mode ++.L2484: ++ lsl r9, r4, #8 ++ mov r1, #128 ++ mov r0, r10 ++ add r2, r5, r9 ++ add r5, r5, r9 ++ str r1, [r2, #2056] ++ mov r1, #0 ++ str r1, [r2, #2052] ++ str r1, [r2, #2052] ++ uxtb r1, r10 ++ str r1, [r2, #2052] ++ lsr r1, r10, #8 ++ str r1, [r2, #2052] ++ lsr r1, r10, #16 ++ str r1, [r2, #2052] ++ ldrb r1, [r6, #1152] @ zero_extendqisi2 ++ cmp r1, #0 ++ lsrne r1, r10, #24 ++ strne r1, [r2, #2052] ++ bl nandc_set_seed ++ ldr r3, .L2494+4 ++ mov r1, #1 ++ mov r0, r4 ++ ldrb r2, [r3, #13] @ zero_extendqisi2 ++ ldr r3, [sp, #12] ++ str fp, [sp] ++ bl nandc_xfer ++ mov r3, #16 ++ str r3, [r5, #2056] ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov r0, r8 ++ bl flash_read_status ++ bl nandc_de_cs.constprop.35 ++ ands r0, r0, #4 ++ beq .L2482 ++ mov r2, r0 ++ mov r1, r7 ++ ldr r0, .L2494+8 ++ bl rk_printk ++ mvn r0, #0 ++.L2482: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2483: ++ bl zftl_flash_exit_slc_mode ++ b .L2484 ++.L2495: ++ .align 2 ++.L2494: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC168 ++ .fnend ++ .size flash_prog_page, .-flash_prog_page ++ .align 2 ++ .global flash_test_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_test_blk, %function ++flash_test_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ .pad #12 ++ mov r6, r0 ++ ldr r4, .L2507 ++ mov r5, r1 ++ mov r2, #32 ++ mov r1, #165 ++ ldr r0, [r4, #-120] ++ bl ftl_memset ++ mov r2, #8 ++ mov r1, #90 ++ ldr r0, [r4, #-112] ++ bl ftl_memset ++ ldr r3, .L2507+4 ++ mov r0, r6 ++ ldrh r3, [r3, #2] ++ mul r5, r5, r3 ++ mov r1, r5 ++ bl flash_erase_block ++ cmn r0, #1 ++ bne .L2497 ++.L2499: ++ mvn r4, #0 ++.L2498: ++ mov r1, r5 ++ mov r0, r6 ++ bl flash_erase_block ++ mov r0, r4 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, pc} ++.L2497: ++ ldr r7, .L2507+8 ++ mov r1, r5 ++ mov r0, r6 ++ ldrb r3, [r7, #13] @ zero_extendqisi2 ++ str r3, [sp] ++ ldr r3, [r4, #-112] ++ ldr r2, [r4, #-120] ++ bl flash_prog_page ++ cmn r0, #1 ++ beq .L2499 ++ ldrb r3, [r7, #13] @ zero_extendqisi2 ++ mov r1, r5 ++ mov r0, r6 ++ str r3, [sp] ++ ldr r3, [r4, #-112] ++ ldr r2, [r4, #-120] ++ bl flash_read_page_en ++ cmn r0, #1 ++ beq .L2499 ++ ldr r3, [r4, #-120] ++ ldr r2, [r3] ++ ldr r3, .L2507+12 ++ cmp r2, r3 ++ bne .L2499 ++ ldr r3, [r4, #-112] ++ ldr r4, [r3] ++ ldr r3, .L2507+16 ++ subs r4, r4, r3 ++ mvnne r4, #0 ++ b .L2498 ++.L2508: ++ .align 2 ++.L2507: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word -1515870811 ++ .word 1515870810 ++ .fnend ++ .size flash_test_blk, .-flash_test_blk ++ .align 2 ++ .global flash_start_one_pass_page_prog ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_start_one_pass_page_prog, %function ++flash_start_one_pass_page_prog: ++ .fnstart ++ @ args = 12, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ mov r9, r3 ++ ldr r6, .L2519 ++ mov r10, r0 ++ lsl r7, r9, #8 ++ mov r0, r3 ++ ldr r5, [sp, #40] ++ mov r8, r2 ++ ldr r4, [r6, #1044] ++ bl nandc_cs ++ cmp r10, #0 ++ mov r2, #128 ++ addne r3, r4, r7 ++ mov r0, r5 ++ strne r10, [r3, #2056] ++ add r3, r4, r7 ++ str r2, [r3, #2056] ++ mov r2, #0 ++ str r2, [r3, #2052] ++ add r4, r4, r7 ++ str r2, [r3, #2052] ++ uxtb r2, r5 ++ str r2, [r3, #2052] ++ lsr r2, r5, #8 ++ str r2, [r3, #2052] ++ lsr r2, r5, #16 ++ str r2, [r3, #2052] ++ ldrb r2, [r6, #1152] @ zero_extendqisi2 ++ cmp r2, #0 ++ lsrne r2, r5, #24 ++ strne r2, [r3, #2052] ++ bl nandc_set_seed ++ ldr r3, .L2519+4 ++ mov r1, #1 ++ mov r0, r9 ++ ldrb r2, [r3, #13] @ zero_extendqisi2 ++ ldr r3, [sp, #48] ++ str r3, [sp] ++ ldr r3, [sp, #44] ++ bl nandc_xfer ++ str r8, [r4, #2056] ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2520: ++ .align 2 ++.L2519: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .fnend ++ .size flash_start_one_pass_page_prog, .-flash_start_one_pass_page_prog ++ .align 2 ++ .global flash_dual_page_prog ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_dual_page_prog, %function ++flash_dual_page_prog: ++ .fnstart ++ @ args = 12, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r3 ++ ldr r3, .L2534 ++ mov r9, r2 ++ add r2, r0, #8 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r6, .L2534+4 ++ mov r4, r0 ++ ldrb r5, [r3, #1153] @ zero_extendqisi2 ++ mov r7, r1 ++ ldr r8, [r3, #1044] ++ ubfx fp, r1, #24, #2 ++ rsb r3, r5, #24 ++ mvn r5, #0 ++ bic r5, r1, r5, lsl r3 ++ ldr r3, [r6] ++ add r8, r8, r2, lsl #8 ++ tst r3, #16 ++ beq .L2522 ++ ldr r3, [sp, #64] ++ mov r2, fp ++ ldr r0, .L2534+8 ++ bl rk_printk ++.L2522: ++ bl nandc_wait_flash_ready ++ mov r0, r4 ++ bl nandc_cs ++ cmp fp, #0 ++ mov r0, r4 ++ bne .L2523 ++ bl zftl_flash_enter_slc_mode ++.L2524: ++ mov r1, #0 ++ mov r3, r4 ++ mov r2, #16 ++ mov r0, r1 ++ stm sp, {r5, r9, r10} ++ add r5, r5, #1 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [sp, #60] ++ mov r1, #0 ++ mov r2, #16 ++ mov r0, r1 ++ str r5, [sp] ++ str r3, [sp, #8] ++ ldr r3, [sp, #56] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ mov r0, r8 ++ bl flash_read_status ++ bl nandc_de_cs.constprop.35 ++ ands r0, r0, #4 ++ beq .L2521 ++ ldr r3, [r6] ++ tst r3, #4096 ++ beq .L2526 ++ mov r2, r0 ++ mov r1, r7 ++ ldr r0, .L2534+12 ++ bl rk_printk ++.L2526: ++ mvn r0, #0 ++.L2521: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2523: ++ bl zftl_flash_exit_slc_mode ++ b .L2524 ++.L2535: ++ .align 2 ++.L2534: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC169 ++ .word .LC168 ++ .fnend ++ .size flash_dual_page_prog, .-flash_dual_page_prog ++ .align 2 ++ .global ymtc_flash_tlc_page_prog ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ymtc_flash_tlc_page_prog, %function ++ymtc_flash_tlc_page_prog: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #16 ++ mov r10, r3 ++ ldr r3, .L2543 ++ mov r6, #1 ++ mov r5, r0 ++ mov r8, r2 ++ add r2, r0, #8 ++ mov r9, r1 ++ ldrb r4, [r3, #1153] @ zero_extendqisi2 ++ ldr r7, [r3, #1044] ++ rsb r4, r4, #24 ++ lsl r4, r6, r4 ++ add r7, r7, r2, lsl #8 ++ sub r4, r4, #1 ++ and r4, r4, r1 ++ bl nandc_wait_flash_ready ++ mov r0, r5 ++ bl nandc_cs ++ mov r0, r5 ++ bl zftl_flash_exit_slc_mode ++ mov r3, r5 ++ mov r2, #26 ++ mov r1, r6 ++ stm sp, {r4, r8, r10} ++ mov r0, #0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ add r3, r4, r6 ++ mov r2, #26 ++ mov r1, r6 ++ str r3, [sp] ++ mov r0, #0 ++ mov r3, r5 ++ stmib sp, {r8, r10} ++ add r4, r4, #2 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ mov r3, r5 ++ mov r2, #16 ++ mov r1, r6 ++ mov r0, #0 ++ stmib sp, {r8, r10} ++ str r4, [sp] ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov r0, r7 ++ bl flash_read_status ++ bl nandc_de_cs.constprop.35 ++ ands r0, r0, #4 ++ beq .L2536 ++ ldr r3, .L2543+4 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L2538 ++ mov r2, r0 ++ mov r1, r9 ++ ldr r0, .L2543+8 ++ bl rk_printk ++.L2538: ++ mvn r0, #0 ++.L2536: ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2544: ++ .align 2 ++.L2543: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC170 ++ .fnend ++ .size ymtc_flash_tlc_page_prog, .-ymtc_flash_tlc_page_prog ++ .section .text.unlikely ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type fw_flash_page_prog.constprop.29, %function ++fw_flash_page_prog.constprop.29: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ mov r6, r1 ++ ldr r4, .L2551 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r7, r2 ++ ldr r3, [r4, #1104] ++ ldrb r1, [r3, #9] @ zero_extendqisi2 ++ bl __aeabi_uidiv ++ mov r5, r0 ++ ldrb r0, [r4, #1108] @ zero_extendqisi2 ++ ldrb r8, [r4, #1193] @ zero_extendqisi2 ++ bl nandc_bch_sel ++ ldr r3, .L2551+4 ++ ldrb r2, [r3, #11] @ zero_extendqisi2 ++ cmp r2, #9 ++ bne .L2546 ++ ldrb r4, [r4, #1110] @ zero_extendqisi2 ++ cmp r4, #0 ++ bne .L2546 ++ ldrb r3, [r3, #16] @ zero_extendqisi2 ++ cmp r3, #3 ++ bne .L2547 ++ mov r3, r7 ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ bl ymtc_flash_tlc_page_prog ++.L2550: ++ mov r4, r0 ++ mov r0, r8 ++ bl nandc_bch_sel ++ mov r0, r4 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L2547: ++ ldr r9, .L2551+8 ++ mov r2, #16384 ++ mov r1, #255 ++ ldr r0, [r9, #-120] ++ bl ftl_memset ++ ldr r3, [r9, #-120] ++ mov r2, #4 ++ str r2, [sp, #8] ++ mov r1, r5 ++ mov r2, r6 ++ mov r0, r4 ++ str r3, [sp, #4] ++ str r3, [sp] ++ mov r3, r7 ++ bl flash_dual_page_prog ++ b .L2550 ++.L2546: ++ mov r3, #4 ++ mov r2, r6 ++ str r3, [sp] ++ mov r1, r5 ++ mov r3, r7 ++ mov r0, #0 ++ bl flash_prog_page ++ b .L2550 ++.L2552: ++ .align 2 ++.L2551: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR3 ++ .fnend ++ .size fw_flash_page_prog.constprop.29, .-fw_flash_page_prog.constprop.29 ++ .text ++ .align 2 ++ .global flash_start_tlc_page_prog ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_start_tlc_page_prog, %function ++flash_start_tlc_page_prog: ++ .fnstart ++ @ args = 12, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r6, r3 ++ ldr r4, .L2561 ++ add r5, sp, #48 ++ mov fp, r0 ++ mov r7, r1 ++ mov r8, r2 ++ ldm r5, {r5, r9, r10} ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ cmp r3, r6 ++ bhi .L2554 ++ mov r2, #868 ++ ldr r1, .L2561+4 ++ ldr r0, .L2561+8 ++ bl rk_printk ++ bl dump_stack ++.L2554: ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ cmp r3, r6 ++ bls .L2553 ++ add r6, r4, r6 ++ ldr r4, [r4, #1044] ++ ldrb r6, [r6, #1144] @ zero_extendqisi2 ++ mov r0, r6 ++ bl nandc_cs ++ lsl r3, r6, #8 ++ cmp fp, #0 ++ addne r2, r4, r3 ++ add r4, r4, r3 ++ mov r3, #128 ++ strne fp, [r2, #2056] ++ str r7, [r4, #2056] ++ str r3, [r4, #2056] ++ mov r3, #0 ++ str r3, [r4, #2052] ++ str r3, [r4, #2052] ++ uxtb r3, r5 ++ str r3, [r4, #2052] ++ lsr r3, r5, #8 ++ str r3, [r4, #2052] ++ lsr r3, r5, #16 ++ add r5, r5, r5, lsl #1 ++ str r3, [r4, #2052] ++ sub r0, r5, #1 ++ add r0, r0, r7 ++ bl nandc_set_seed ++ ldr r3, .L2561+12 ++ mov r1, #1 ++ mov r0, r6 ++ ldrb r2, [r3, #13] @ zero_extendqisi2 ++ mov r3, r9 ++ str r10, [sp] ++ bl nandc_xfer ++ str r8, [r4, #2056] ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b nandc_de_cs.constprop.35 ++.L2553: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2562: ++ .align 2 ++.L2561: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1901 ++ .word .LC0 ++ .word .LANCHOR2 ++ .fnend ++ .size flash_start_tlc_page_prog, .-flash_start_tlc_page_prog ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type queue_tlc_prog_cmd, %function ++queue_tlc_prog_cmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #16 ++ mov r8, r1 ++ ldr r1, .L2568 ++ mov r7, #1 ++ mov r6, r0 ++ ldr r2, [r0] ++ ldrb r3, [r1, #1153] @ zero_extendqisi2 ++ ldr ip, [r2, #24] ++ rsb r0, r3, #24 ++ lsl r4, r7, r3 ++ ldrb r3, [r1, #1159] @ zero_extendqisi2 ++ lsl r5, r7, r0 ++ sub r4, r4, #1 ++ and r4, r4, ip, lsr r0 ++ cmp r3, #0 ++ sub r5, r5, #1 ++ and r5, r5, ip ++ uxtb r4, r4 ++ beq .L2564 ++ mov r0, r4 ++ bl zftl_flash_exit_slc_mode ++ ldr r3, [r6] ++ mov r1, r7 ++ mov r0, #0 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #26 ++ ldr r3, [r3, #4] ++ str r5, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr r3, [r6, #4] ++ mov r1, r7 ++ mov r0, #0 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #26 ++ ldr r3, [r3, #4] ++ str r3, [sp, #4] ++ add r3, r5, r7 ++ str r3, [sp] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr r3, [r6, #8] ++ add r5, r5, #2 ++ mov r1, r7 ++ mov r0, #0 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #16 ++ ldr r3, [r3, #4] ++ str r5, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++.L2565: ++ cmp r8, #0 ++ beq .L2563 ++ ldr r1, [r6] ++ mov r3, #4 ++ ldr r0, .L2568+4 ++ strb r3, [r1, #42] ++ mov r3, #1 ++ strb r3, [r1, #43] ++ mvn r3, #0 ++ strb r3, [r1] ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, lr} ++ b buf_add_tail ++.L2564: ++ ldr r3, [r2, #12] ++ mov r1, r7 ++ ldrb r0, [r2, #44] @ zero_extendqisi2 ++ str r3, [sp, #8] ++ ldr r3, [r2, #4] ++ mov r2, #26 ++ str r5, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldm r6, {r2, r3} ++ mov r1, #2 ++ ldrb r0, [r2, #44] @ zero_extendqisi2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #26 ++ ldr r3, [r3, #4] ++ str r5, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr r3, [r6, #8] ++ mov r1, #3 ++ ldr r2, [r6] ++ ldrb r0, [r2, #44] @ zero_extendqisi2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #16 ++ ldr r3, [r3, #4] ++ str r5, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ b .L2565 ++.L2563: ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L2569: ++ .align 2 ++.L2568: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2770 ++ .fnend ++ .size queue_tlc_prog_cmd, .-queue_tlc_prog_cmd ++ .align 2 ++ .global sblk_3d_tlc_dump_prog ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sblk_3d_tlc_dump_prog, %function ++sblk_3d_tlc_dump_prog: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r3, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #16 ++ mov r7, #1 ++ ldr r2, .L2574 ++ mov r5, r0 ++ ldr r0, [r0, #24] ++ ldrb r3, [r2, #1153] @ zero_extendqisi2 ++ ldrb r8, [r2, #1159] @ zero_extendqisi2 ++ rsb r1, r3, #24 ++ lsl r4, r7, r3 ++ lsl r6, r7, r1 ++ sub r4, r4, #1 ++ cmp r8, #0 ++ and r4, r4, r0, lsr r1 ++ sub r6, r6, #1 ++ and r6, r6, r0 ++ uxtb r4, r4 ++ beq .L2571 ++ mov r0, r4 ++ bl zftl_flash_exit_slc_mode ++ ldr r3, [r5, #12] ++ mov r2, #26 ++ mov r1, r7 ++ mov r0, #0 ++ str r6, [sp] ++ str r3, [sp, #8] ++ ldr r3, [r5, #4] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr r3, [r5, #12] ++ mov r2, #26 ++ mov r1, r7 ++ mov r0, #0 ++ str r3, [sp, #8] ++ ldr r3, [r5, #4] ++ str r3, [sp, #4] ++ add r3, r6, r7 ++ str r3, [sp] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr r3, [r5, #12] ++ add r6, r6, #2 ++ str r6, [sp] ++ mov r2, #16 ++ mov r1, r7 ++ mov r0, #0 ++ str r3, [sp, #8] ++ ldr r3, [r5, #4] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++.L2572: ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov r1, #64 ++ ldr r0, [r5, #24] ++ add sp, sp, #16 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, lr} ++ b flash_wait_device_ready ++.L2571: ++ ldr r3, [r5, #12] ++ mov r1, r7 ++ mov r2, #26 ++ mov r0, r8 ++ str r6, [sp] ++ str r3, [sp, #8] ++ ldr r3, [r5, #4] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr r3, [r5, #12] ++ mov r2, #26 ++ mov r1, #2 ++ mov r0, r8 ++ str r6, [sp] ++ str r3, [sp, #8] ++ ldr r3, [r5, #4] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr r3, [r5, #12] ++ mov r2, #16 ++ str r6, [sp] ++ mov r1, #3 ++ mov r0, r8 ++ str r3, [sp, #8] ++ ldr r3, [r5, #4] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ b .L2572 ++.L2575: ++ .align 2 ++.L2574: ++ .word .LANCHOR0 ++ .fnend ++ .size sblk_3d_tlc_dump_prog, .-sblk_3d_tlc_dump_prog ++ .align 2 ++ .global flash_start_3d_mlc_page_prog ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_start_3d_mlc_page_prog, %function ++flash_start_3d_mlc_page_prog: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r8, r3 ++ ldr r4, .L2580 ++ mov r7, r0 ++ mov r5, r1 ++ mov r6, r2 ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ cmp r3, r1 ++ bhi .L2577 ++ movw r2, #903 ++ ldr r1, .L2580+4 ++ ldr r0, .L2580+8 ++ bl rk_printk ++ bl dump_stack ++.L2577: ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ cmp r3, r5 ++ bls .L2576 ++ add r5, r4, r5 ++ ldr r4, [r4, #1044] ++ ldrb r5, [r5, #1144] @ zero_extendqisi2 ++ mov r0, r5 ++ add r4, r4, r5, lsl #8 ++ bl nandc_cs ++ mov r3, #128 ++ mov r0, r6 ++ str r3, [r4, #2056] ++ mov r3, #0 ++ str r3, [r4, #2052] ++ str r3, [r4, #2052] ++ uxtb r3, r6 ++ str r3, [r4, #2052] ++ lsr r3, r6, #8 ++ str r3, [r4, #2052] ++ lsr r3, r6, #16 ++ str r3, [r4, #2052] ++ bl nandc_set_seed ++ ldr r3, .L2580+12 ++ mov r1, #1 ++ mov r0, r5 ++ ldrb r2, [r3, #13] @ zero_extendqisi2 ++ ldr r3, [sp, #32] ++ str r3, [sp] ++ mov r3, r8 ++ bl nandc_xfer ++ str r7, [r4, #2056] ++.L2576: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L2581: ++ .align 2 ++.L2580: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1927 ++ .word .LC0 ++ .word .LANCHOR2 ++ .fnend ++ .size flash_start_3d_mlc_page_prog, .-flash_start_3d_mlc_page_prog ++ .align 2 ++ .global sblk_mlc_dump_prog ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sblk_mlc_dump_prog, %function ++sblk_mlc_dump_prog: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2588 ++ push {r0, r1, r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ .pad #8 ++ mov r5, r0 ++ ldr r1, [r0, #24] ++ ldrb r4, [r3, #1153] @ zero_extendqisi2 ++ mov r3, #1 ++ rsb r2, r4, #24 ++ lsl r4, r3, r4 ++ lsl r6, r3, r2 ++ sub r4, r4, #1 ++ sub r6, r6, #1 ++ and r4, r4, r1, lsr r2 ++ and r6, r6, r1 ++ uxtb r4, r4 ++ mov r0, r4 ++ bl zftl_flash_exit_slc_mode ++ ldr r3, .L2588+4 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L2583 ++ ldr r2, [r5, #24] ++ mov r1, r6 ++ ldr r0, .L2588+8 ++ add r3, r2, #1 ++ bl rk_printk ++.L2583: ++ ldr r3, [r5, #12] ++ mov r2, r6 ++ mov r1, r4 ++ mov r0, #16 ++ str r3, [sp] ++ ldr r3, [r5, #4] ++ bl flash_start_3d_mlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr r3, [r5, #12] ++ add r2, r6, #1 ++ mov r1, r4 ++ mov r0, #16 ++ str r3, [sp] ++ ldr r3, [r5, #4] ++ bl flash_start_3d_mlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov r1, #64 ++ ldr r0, [r5, #24] ++ bl flash_wait_device_ready ++ bl nandc_de_cs.constprop.35 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, pc} ++.L2589: ++ .align 2 ++.L2588: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC171 ++ .fnend ++ .size sblk_mlc_dump_prog, .-sblk_mlc_dump_prog ++ .align 2 ++ .global flash_start_page_prog ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_start_page_prog, %function ++flash_start_page_prog: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r2 ++ ldr r5, .L2605 ++ mov fp, r3 ++ mov r8, r1 ++ .pad #20 ++ sub sp, sp, #20 ++ str r0, [sp, #12] ++ ldrb r2, [r5, #1153] @ zero_extendqisi2 ++ rsb r4, r2, #24 ++ lsr r3, r1, r4 ++ mvn r1, #0 ++ bic r3, r3, r1, lsl r2 ++ ldrb r2, [r5, #1109] @ zero_extendqisi2 ++ uxtb r9, r3 ++ cmp r2, r9 ++ bhi .L2591 ++ mov r2, #956 ++ ldr r1, .L2605+4 ++ ldr r0, .L2605+8 ++ bl rk_printk ++ bl dump_stack ++.L2591: ++ ldrb r2, [r5, #1109] @ zero_extendqisi2 ++ cmp r2, r9 ++ bls .L2590 ++ mvn r2, #0 ++ ldr r7, [r5, #1044] ++ bic r4, r8, r2, lsl r4 ++ add r2, r5, r9 ++ ldrb r6, [r2, #1144] @ zero_extendqisi2 ++ bl nandc_rdy_status ++ cmp r0, #0 ++ bne .L2593 ++ ldrb r2, [r5, #1109] @ zero_extendqisi2 ++ cmp r2, #1 ++ bne .L2594 ++ bl nandc_wait_flash_ready ++.L2593: ++ mov r0, r6 ++ bl hynix_reconfig_rr_para ++ mov r0, r6 ++ bl nandc_cs ++ tst r8, #50331648 ++ bne .L2595 ++ mov r0, r4 ++ bl slc_phy_page_address_calc ++ ldrb r3, [r5] @ zero_extendqisi2 ++ mov r4, r0 ++ cmp r3, #0 ++ beq .L2596 ++ mov r0, r6 ++ bl zftl_flash_enter_slc_mode ++.L2596: ++ lsl r8, r6, #8 ++ mov r2, #128 ++ mov r0, r4 ++ add r3, r7, r8 ++ add r7, r7, r8 ++ str r2, [r3, #2056] ++ mov r2, #0 ++ str r2, [r3, #2052] ++ str r2, [r3, #2052] ++ uxtb r2, r4 ++ str r2, [r3, #2052] ++ lsr r2, r4, #8 ++ str r2, [r3, #2052] ++ lsr r2, r4, #16 ++ str r2, [r3, #2052] ++ ldrb r2, [r5, #1152] @ zero_extendqisi2 ++ cmp r2, #0 ++ lsrne r2, r4, #24 ++ strne r2, [r3, #2052] ++ bl nandc_set_seed ++ ldr r3, .L2605+12 ++ mov r1, #1 ++ mov r0, r6 ++ ldrb r2, [r3, #13] @ zero_extendqisi2 ++ mov r3, r10 ++ str fp, [sp] ++ bl nandc_xfer ++ ldr r3, [sp, #12] ++ str r3, [r7, #2056] ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ b nandc_de_cs.constprop.35 ++.L2594: ++ mov r2, #64 ++ mov r1, r4 ++ mov r0, r9 ++ bl flash_wait_device_ready_raw ++ b .L2593 ++.L2595: ++ mov r0, r6 ++ bl zftl_flash_exit_slc_mode ++ b .L2596 ++.L2590: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2606: ++ .align 2 ++.L2605: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1956 ++ .word .LC0 ++ .word .LANCHOR2 ++ .fnend ++ .size flash_start_page_prog, .-flash_start_page_prog ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type queue_prog_cmd, %function ++queue_prog_cmd: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, r0 ++ ldr r3, [r0, #12] ++ ldr r2, [r0, #4] ++ ldr r1, [r0, #24] ++ mov r0, #16 ++ bl flash_start_page_prog ++ ldr r2, .L2616 ++ ldr r0, [r4, #24] ++ ldrb r3, [r2, #2770] @ zero_extendqisi2 ++ cmp r3, #255 ++ beq .L2608 ++ ldrb ip, [r2, #1153] @ zero_extendqisi2 ++ mvn r1, #0 ++ mov r5, #48 ++ movw r8, #1256 ++ movw r6, #1274 ++ rsb r7, ip, #24 ++ mvn r1, r1, lsl ip ++ uxth r1, r1 ++ and r0, r1, r0, asr r7 ++.L2610: ++ mla ip, r5, r3, r2 ++ ldr lr, [ip, r8] ++ and lr, r1, lr, lsr r7 ++ cmp r0, lr ++ bne .L2609 ++ add lr, ip, r6 ++ ldrb ip, [ip, r6] @ zero_extendqisi2 ++ cmp ip, #7 ++ bne .L2609 ++ mov r3, #3 ++ strb r3, [lr] ++.L2608: ++ mov r3, #3 ++ mov r1, r4 ++ strb r3, [r4, #42] ++ mov r3, #1 ++ strb r3, [r4, #43] ++ mvn r3, #0 ++ strb r3, [r4] ++ ldr r0, .L2616+4 ++ pop {r4, r5, r6, r7, r8, lr} ++ b buf_add_tail ++.L2609: ++ mla r3, r5, r3, r2 ++ ldrb r3, [r3, #1232] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L2610 ++ b .L2608 ++.L2617: ++ .align 2 ++.L2616: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2770 ++ .fnend ++ .size queue_prog_cmd, .-queue_prog_cmd ++ .align 2 ++ .global flash_complete_plane_page_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_complete_plane_page_read, %function ++flash_complete_plane_page_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ mov r10, r2 ++ ldr r5, .L2649 ++ mvn r2, #0 ++ mov r6, r0 ++ mov r9, r1 ++ ldrb r3, [r5, #1153] @ zero_extendqisi2 ++ rsb r4, r3, #24 ++ lsr r7, r0, r4 ++ bic r7, r7, r2, lsl r3 ++ ldrb r3, [r5, #1109] @ zero_extendqisi2 ++ uxtb r7, r7 ++ cmp r3, r7 ++ bhi .L2619 ++ movw r2, #1070 ++ ldr r1, .L2649+4 ++ ldr r0, .L2649+8 ++ bl rk_printk ++ bl dump_stack ++.L2619: ++ ldrb r3, [r5, #1109] @ zero_extendqisi2 ++ mvn r0, #0 ++ cmp r3, r7 ++ bls .L2618 ++ add r7, r5, r7 ++ bic r4, r6, r0, lsl r4 ++ ldrb r8, [r7, #1144] @ zero_extendqisi2 ++ ubfx r6, r6, #24, #2 ++ ldr r7, [r5, #1044] ++ mov r0, r8 ++ bl nandc_cs ++ cmp r6, #0 ++ bne .L2621 ++ mov r0, r4 ++ bl slc_phy_page_address_calc ++ mov r4, r0 ++.L2621: ++ ldrb r3, [r5, #1127] @ zero_extendqisi2 ++ uxtb lr, r4 ++ lsr ip, r4, #8 ++ ldrb r0, [r5, #1152] @ zero_extendqisi2 ++ cmp r3, #1 ++ lsl r3, r8, #8 ++ moveq r1, #6 ++ addeq r2, r7, r3 ++ beq .L2648 ++ ldr r2, [r5, #1104] ++ ldrb r2, [r2, #12] @ zero_extendqisi2 ++ cmp r2, #3 ++ add r2, r7, r3 ++ bne .L2625 ++ mov r1, #5 ++.L2648: ++ str r1, [r2, #2056] ++ mov r1, #0 ++ str r1, [r2, #2052] ++ cmp r0, #0 ++ str r1, [r2, #2052] ++ lsr r1, r4, #16 ++ str lr, [r2, #2052] ++ add r3, r7, r3 ++ str ip, [r2, #2052] ++ str r1, [r2, #2052] ++ lsrne r1, r4, #24 ++ strne r1, [r2, #2052] ++.L2644: ++ mov r2, #224 ++ cmp r6, #0 ++ str r2, [r3, #2056] ++ ldr r3, [r5, #1104] ++ ldrb r3, [r3, #12] @ zero_extendqisi2 ++ sub r3, r3, #3 ++ clz r3, r3 ++ lsr r3, r3, #5 ++ moveq r3, #0 ++ cmp r3, #0 ++ beq .L2628 ++ ldrb r3, [r5, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2628 ++ ldrb r3, [r5, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ addeq r4, r4, r4, lsl #1 ++ subeq r6, r6, #1 ++ addeq r0, r4, r6 ++ beq .L2645 ++.L2628: ++ mov r0, r4 ++.L2645: ++ bl nandc_set_seed ++ ldr r3, .L2649+12 ++ mov r1, #0 ++ mov r0, r8 ++ ldrb r2, [r3, #13] @ zero_extendqisi2 ++ mov r3, r9 ++ str r10, [sp] ++ bl nandc_xfer ++ bl nandc_de_cs.constprop.35 ++.L2618: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2625: ++ mov r1, #0 ++ cmp r0, #0 ++ str r1, [r2, #2056] ++ add r3, r7, r3 ++ str r1, [r2, #2052] ++ str r1, [r2, #2052] ++ lsr r1, r4, #16 ++ str lr, [r2, #2052] ++ str ip, [r2, #2052] ++ str r1, [r2, #2052] ++ lsrne r1, r4, #24 ++ strne r1, [r2, #2052] ++ mov r1, #5 ++ str r1, [r3, #2056] ++ mov r1, #0 ++ str r1, [r2, #2052] ++ str r1, [r2, #2052] ++ b .L2644 ++.L2650: ++ .align 2 ++.L2649: ++ .word .LANCHOR0 ++ .word .LANCHOR1+1978 ++ .word .LC0 ++ .word .LANCHOR2 ++ .fnend ++ .size flash_complete_plane_page_read, .-flash_complete_plane_page_read ++ .align 2 ++ .global flash_complete_page_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_complete_page_read, %function ++flash_complete_page_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r3, #1 ++ ldr r4, .L2683 ++ mov fp, r2 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r10, r1 ++ str r0, [sp, #12] ++ ubfx r6, r0, #24, #2 ++ ldrb r7, [r4, #1153] @ zero_extendqisi2 ++ rsb r2, r7, #24 ++ lsl r7, r3, r7 ++ lsl r5, r3, r2 ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ sub r7, r7, #1 ++ sub r5, r5, #1 ++ and r7, r7, r0, lsr r2 ++ and r5, r5, r0 ++ uxtb r7, r7 ++ cmp r3, r7 ++ bhi .L2652 ++ mov r2, #1232 ++ ldr r1, .L2683+4 ++ ldr r0, .L2683+8 ++ bl rk_printk ++ bl dump_stack ++.L2652: ++ add r7, r4, r7 ++ ldrb r9, [r7, #1144] @ zero_extendqisi2 ++ ldr r7, [r4, #1044] ++ mov r0, r9 ++ bl nandc_cs ++ cmp r6, #0 ++ bne .L2653 ++ mov r0, r5 ++ bl slc_phy_page_address_calc ++ mov r5, r0 ++.L2653: ++ ldr r8, .L2683+12 ++ ldrb r3, [r8, #16] @ zero_extendqisi2 ++ cmp r3, #3 ++ bne .L2654 ++ add r7, r7, r9, lsl #8 ++ mov r3, #5 ++ str r3, [r7, #2056] ++ mov r3, #0 ++ str r3, [r7, #2052] ++ str r3, [r7, #2052] ++ uxtb r3, r5 ++ str r3, [r7, #2052] ++ lsr r3, r5, #8 ++ str r3, [r7, #2052] ++ lsr r3, r5, #16 ++ str r3, [r7, #2052] ++ mov r3, #224 ++ str r3, [r7, #2056] ++.L2654: ++ ldr r3, [r4, #1104] ++ cmp r6, #0 ++ ldrb r3, [r3, #12] @ zero_extendqisi2 ++ sub r3, r3, #3 ++ clz r3, r3 ++ lsr r3, r3, #5 ++ moveq r3, #0 ++ cmp r3, #0 ++ beq .L2655 ++ ldrb r3, [r4, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2655 ++ ldrb r3, [r4, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ addeq r3, r5, r5, lsl #1 ++ subeq r0, r6, #1 ++ addeq r0, r0, r3 ++ beq .L2682 ++.L2655: ++ mov r0, r5 ++.L2682: ++ bl nandc_set_seed ++ ldrb r2, [r8, #13] @ zero_extendqisi2 ++ mov r3, r10 ++ str fp, [sp] ++ mov r1, #0 ++ mov r0, r9 ++ bl nandc_xfer ++ cmn r0, #1 ++ bne .L2657 ++ ldrb r7, [r4, #1196] @ zero_extendqisi2 ++ cmp r7, #0 ++ beq .L2658 ++ mov r3, #0 ++ mov r2, r10 ++ strb r3, [r4, #1196] ++ orr r1, r5, r6, lsl #24 ++ ldrb r3, [r8, #13] @ zero_extendqisi2 ++ mov r0, r9 ++ str r3, [sp] ++ mov r3, fp ++ bl flash_read_page ++ cmp r6, #0 ++ strb r7, [r4, #1196] ++ bne .L2659 ++.L2664: ++ ldrb r3, [r4] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2659 ++ ldrb r3, [r4, #1193] @ zero_extendqisi2 ++ add r3, r3, r3, lsl #1 ++ cmp r0, r3, asr #2 ++ blt .L2659 ++ ldrb r3, [r8, #23] @ zero_extendqisi2 ++ sub r3, r3, #4 ++ cmp r3, #4 ++ movls r0, #256 ++.L2651: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2659: ++ cmn r0, #1 ++ bne .L2651 ++.L2665: ++ ldr r3, .L2683+16 ++ ldr r7, [r3, #-100] ++ cmp r7, #0 ++ bne .L2661 ++.L2663: ++ ldrb r3, [r4, #1196] @ zero_extendqisi2 ++ mov r1, #0 ++ ldr r2, [sp, #12] ++ ldr r0, .L2683+20 ++ str r3, [sp] ++ mvn r3, #0 ++ bl rk_printk ++ ldrb r3, [r4, #1143] @ zero_extendqisi2 ++ cmp r3, #0 ++ mvneq r0, #0 ++ beq .L2651 ++ ldrb r3, [r8, #13] @ zero_extendqisi2 ++ mov r2, r10 ++ orr r1, r5, r6, lsl #24 ++ mov r0, r9 ++ str r3, [sp] ++ mov r3, fp ++ bl flash_ddr_tuning_read ++ b .L2651 ++.L2661: ++ ldrb r3, [r8, #13] @ zero_extendqisi2 ++ mov r2, r10 ++ orr r1, r5, r6, lsl #24 ++ mov r0, r9 ++ str r3, [sp] ++ mov r3, fp ++ blx r7 ++ cmn r0, #1 ++ bne .L2651 ++ b .L2663 ++.L2658: ++ cmp r6, #0 ++ beq .L2664 ++ b .L2665 ++.L2657: ++ cmp r6, #0 ++ bne .L2651 ++ b .L2664 ++.L2684: ++ .align 2 ++.L2683: ++ .word .LANCHOR0 ++ .word .LANCHOR1+2009 ++ .word .LC0 ++ .word .LANCHOR2 ++ .word .LANCHOR3 ++ .word .LC172 ++ .fnend ++ .size flash_complete_page_read, .-flash_complete_page_read ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type queue_wait_first_req_completed, %function ++queue_wait_first_req_completed: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r4, .L2779 ++ ldrb r5, [r4, #2770] @ zero_extendqisi2 ++ cmp r5, #255 ++ bne .L2686 ++.L2719: ++ mov r7, #0 ++ b .L2685 ++.L2686: ++ mov r8, #48 ++ mla r2, r8, r5, r4 ++ ldrb r3, [r2, #1274] @ zero_extendqisi2 ++ ldr r7, [r2, #1256] ++ sub r2, r3, #1 ++ cmp r2, #10 ++ ldrls pc, [pc, r2, asl #2] ++ b .L2719 ++.L2689: ++ .word .L2688 ++ .word .L2690 ++ .word .L2691 ++ .word .L2691 ++ .word .L2691 ++ .word .L2691 ++ .word .L2692 ++ .word .L2693 ++ .word .L2694 ++ .word .L2691 ++ .word .L2694 ++.L2688: ++ mla r8, r8, r5, r4 ++ bl nandc_wait_flash_ready ++ ldr r3, [r8, #1240] ++ ldr r1, [r8, #1236] ++ cmp r3, #0 ++ beq .L2695 ++ ldr r2, .L2779+4 ++ ldrb r0, [r8, #1272] @ zero_extendqisi2 ++ ldrb r2, [r2, #-2546] @ zero_extendqisi2 ++ cmp r0, r2 ++ moveq r1, r3 ++.L2695: ++ mov r3, #48 ++ mov r0, r7 ++ mla r4, r3, r5, r4 ++ ldr r2, [r4, #1244] ++ bl flash_complete_page_read ++ str r0, [r4, #1268] ++.L2778: ++ mov r3, #13 ++ strb r3, [r4, #1274] ++ ldrb r3, [r4, #1234] @ zero_extendqisi2 ++ orr r3, r3, #8 ++ strb r3, [r4, #1234] ++ b .L2719 ++.L2690: ++ bl nandc_wait_flash_ready ++ mla r3, r8, r5, r4 ++ ldrb r6, [r3, #1232] @ zero_extendqisi2 ++ ldr r2, [r3, #1240] ++ ldr r9, [r3, #1236] ++ mla r8, r8, r6, r4 ++ cmp r2, #0 ++ ldr r10, [r8, #1236] ++ beq .L2696 ++ ldrb r1, [r3, #1272] @ zero_extendqisi2 ++ ldr r3, .L2779+4 ++ ldrb r3, [r3, #-2546] @ zero_extendqisi2 ++ cmp r1, r3 ++ moveq r9, r2 ++.L2696: ++ mov r3, #48 ++ mla r3, r3, r6, r4 ++ ldr r2, [r3, #1240] ++ cmp r2, #0 ++ beq .L2697 ++ ldrb r1, [r3, #1272] @ zero_extendqisi2 ++ ldr r3, .L2779+4 ++ ldrb r3, [r3, #-2546] @ zero_extendqisi2 ++ cmp r1, r3 ++ moveq r10, r2 ++.L2697: ++ mov r7, #48 ++ mov r1, r9 ++ mla r3, r7, r5, r4 ++ mla r7, r7, r6, r4 ++ ldr r2, [r3, #1244] ++ ldr r0, [r3, #1256] ++ str r3, [sp, #12] ++ bl flash_complete_plane_page_read ++ ldr r2, [r7, #1244] ++ mov r8, r0 ++ mov r1, r10 ++ ldr r0, [r7, #1256] ++ bl flash_complete_plane_page_read ++ cmn r8, #1 ++ mov fp, r0 ++ beq .L2698 ++ ldr r3, [sp, #12] ++ ldr r2, [r3, #1252] ++ cmn r2, #1 ++ beq .L2699 ++ ldr r3, [r3, #1244] ++ ldr r3, [r3, #4] ++ cmp r2, r3 ++ beq .L2699 ++.L2698: ++ mov r7, #48 ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ mla r7, r7, r5, r4 ++ mvn ip, #0 ++ mvn ip, ip, lsl r3 ++ rsb r1, r3, #24 ++ ldr lr, [r7, #1256] ++ mov r2, r9 ++ ldr r3, .L2779+4 ++ ldrb r3, [r3, #-2546] @ zero_extendqisi2 ++ and r0, ip, lr, lsr r1 ++ bic r1, lr, ip, lsl r1 ++ uxtb r0, r0 ++ str r3, [sp] ++ ldr r3, [r7, #1244] ++ bl flash_read_page_en ++ ldr r2, [r7, #1252] ++ mov r8, r0 ++ cmn r2, #1 ++ beq .L2700 ++ ldr r3, [r7, #1244] ++ ldr r1, [r3, #4] ++ cmp r2, r1 ++ beq .L2700 ++ ldr r0, .L2779+8 ++ ldr r0, [r0] ++ tst r0, #64 ++ beq .L2700 ++ str r1, [sp] ++ ldr r0, .L2779+12 ++ ldr r3, [r3] ++ ldr r1, [r7, #1256] ++ bl rk_printk ++.L2700: ++ mov r3, #48 ++ mla r3, r3, r5, r4 ++ ldr r2, [r3, #1252] ++ cmn r2, #1 ++ beq .L2699 ++ ldr r3, [r3, #1244] ++ ldr r3, [r3, #4] ++ cmp r2, r3 ++ beq .L2699 ++ movw r2, #431 ++ ldr r1, .L2779+16 ++ ldr r0, .L2779+20 ++ bl rk_printk ++ bl dump_stack ++.L2699: ++ mov r3, #48 ++ mov r2, #13 ++ mla r5, r3, r5, r4 ++ cmn fp, #1 ++ strb r2, [r5, #1274] ++ ldrb r2, [r5, #1234] @ zero_extendqisi2 ++ str r8, [r5, #1268] ++ orr r2, r2, #8 ++ strb r2, [r5, #1234] ++ beq .L2701 ++ mla r3, r3, r6, r4 ++ ldr r2, [r3, #1252] ++ cmn r2, #1 ++ beq .L2703 ++ ldr r3, [r3, #1244] ++ ldr r3, [r3, #4] ++ cmp r2, r3 ++ beq .L2703 ++.L2701: ++ mov r5, #48 ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ mla r5, r5, r6, r4 ++ mvn ip, #0 ++ mvn ip, ip, lsl r3 ++ rsb r1, r3, #24 ++ ldr lr, [r5, #1256] ++ mov r2, r10 ++ ldr r3, .L2779+4 ++ ldrb r3, [r3, #-2546] @ zero_extendqisi2 ++ and r0, ip, lr, lsr r1 ++ bic r1, lr, ip, lsl r1 ++ uxtb r0, r0 ++ str r3, [sp] ++ ldr r3, [r5, #1244] ++ bl flash_read_page_en ++ ldr r2, [r5, #1252] ++ cmn r2, #1 ++ beq .L2705 ++ ldr r3, [r5, #1244] ++ ldr r1, [r3, #4] ++ cmp r2, r1 ++ beq .L2705 ++ ldr r0, .L2779+8 ++ ldr r0, [r0] ++ tst r0, #64 ++ beq .L2705 ++ str r1, [sp] ++ ldr r0, .L2779+12 ++ ldr r3, [r3] ++ ldr r1, [r5, #1256] ++ bl rk_printk ++.L2705: ++ mov r3, #48 ++ mla r3, r3, r6, r4 ++ ldr r2, [r3, #1252] ++ cmn r2, #1 ++ beq .L2703 ++ ldr r3, [r3, #1244] ++ ldr r3, [r3, #4] ++ cmp r2, r3 ++ beq .L2703 ++ movw r2, #450 ++ ldr r1, .L2779+16 ++ ldr r0, .L2779+20 ++ bl rk_printk ++ bl dump_stack ++.L2703: ++ mov r3, #48 ++ mla r4, r3, r6, r4 ++ str r8, [r4, #1268] ++ b .L2778 ++.L2691: ++ bl nandc_iqr_wait_flash_ready ++ mov r0, r7 ++ mov r1, #64 ++ bl flash_wait_device_ready ++ tst r0, #64 ++ mov r7, r0 ++ beq .L2719 ++ ands r2, r0, #5 ++ mov r3, #48 ++ beq .L2707 ++ mla r4, r3, r5, r4 ++ mov r3, #12 ++ mov r2, r0 ++ ldr r0, .L2779+24 ++ strb r3, [r4, #1274] ++ ldrb r1, [r4, #1233] @ zero_extendqisi2 ++ str r3, [sp] ++ ldr r3, [r4, #1256] ++ bl rk_printk ++.L2777: ++ mvn r3, #0 ++ str r3, [r4, #1268] ++ b .L2685 ++.L2707: ++ mul r3, r3, r5 ++ mov r1, #13 ++ add r7, r4, r3 ++ str r2, [r7, #1268] ++ ldr r2, [r4, #2800] ++ strb r1, [r7, #1274] ++ ldr r1, [r2, #156] ++ ldr r2, .L2779+28 ++ cmp r1, r2 ++ bne .L2719 ++ ldr r2, .L2779+32 ++ add r3, r2, r3 ++ ldrh r3, [r3, #34] ++ cmp r3, #0 ++ bne .L2719 ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ mvn ip, #0 ++ ldr lr, [r7, #1256] ++ ldr r6, .L2779+4 ++ rsb r1, r3, #24 ++ mvn ip, ip, lsl r3 ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ and r0, ip, lr, lsr r1 ++ bic r1, lr, ip, lsl r1 ++ str r3, [sp] ++ uxtb r0, r0 ++ ldr r3, [r6, #-96] ++ ldr r2, [r6, #-92] ++ bl flash_read_page_en ++ cmn r0, #1 ++ mov r3, r0 ++ beq .L2708 ++ ldr r1, [r7, #1244] ++ ldr r2, [r6, #-96] ++ ldr r1, [r1] ++ ldr r2, [r2] ++ cmp r1, r2 ++ beq .L2719 ++.L2708: ++ mov r2, #48 ++ ldr r0, .L2779+36 ++ mla r5, r2, r5, r4 ++ ldrb r2, [r4, #1196] @ zero_extendqisi2 ++ ldrb r1, [r5, #1233] @ zero_extendqisi2 ++ str r2, [sp] ++ ldr r2, [r5, #1256] ++ bl rk_printk ++ mvn r3, #0 ++ str r3, [r5, #1268] ++ b .L2719 ++.L2694: ++ ldrb r1, [r4, #1153] @ zero_extendqisi2 ++ mvn r2, #0 ++ cmp r3, #11 ++ ldr r9, .L2779+32 ++ moveq r3, #10 ++ movne r3, #3 ++ rsb r0, r1, #24 ++ mov lr, r3 ++ mvn r2, r2, lsl r1 ++ add r3, r5, r5, lsl #1 ++ and r1, r2, r7, lsr r0 ++ add r3, r9, r3, lsl #4 ++ uxth r1, r1 ++ mov r6, #48 ++ movw r10, #1256 ++.L2710: ++ ldrb r8, [r3] @ zero_extendqisi2 ++ cmp r8, #255 ++ mvneq r7, #0 ++ beq .L2685 ++.L2717: ++ mla ip, r6, r8, r4 ++ movw fp, #1274 ++ add r3, r8, r8, lsl #1 ++ ldrb fp, [ip, fp] @ zero_extendqisi2 ++ add r3, r9, r3, lsl #4 ++ cmp fp, lr ++ bne .L2710 ++ ldr ip, [ip, r10] ++ and ip, r2, ip, lsr r0 ++ cmp r1, ip ++ bne .L2710 ++ bl nandc_iqr_wait_flash_ready ++ mov r0, r7 ++ mov r1, #64 ++ bl flash_wait_device_ready ++ tst r0, #64 ++ mov r7, r0 ++ bne .L2712 ++.L2776: ++ mov r7, #0 ++ b .L2713 ++.L2712: ++ ands r3, r0, #15 ++ mul r6, r6, r5 ++ beq .L2714 ++ add r6, r4, r6 ++ mov r9, #12 ++ ldrb r1, [r6, #1233] @ zero_extendqisi2 ++ mov r2, r0 ++ str r9, [sp] ++ ldr r0, .L2779+40 ++ ldr r3, [r6, #1256] ++ bl rk_printk ++ mvn r3, #0 ++ strb r9, [r6, #1274] ++ str r3, [r6, #1268] ++.L2713: ++ mov r3, #48 ++ mla r5, r3, r5, r4 ++ mla r8, r3, r8, r4 ++ ldrb r2, [r5, #1274] @ zero_extendqisi2 ++ ldr r3, [r5, #1268] ++ strb r2, [r8, #1274] ++ str r3, [r8, #1268] ++.L2685: ++ mov r0, r7 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2714: ++ add r7, r4, r6 ++ mov r2, #13 ++ str r3, [r7, #1268] ++ ldr r3, [r4, #2800] ++ strb r2, [r7, #1274] ++ ldr r2, [r3, #156] ++ ldr r3, .L2779+28 ++ cmp r2, r3 ++ bne .L2776 ++ add r6, r9, r6 ++ ldrh r3, [r6, #34] ++ cmp r3, #0 ++ bne .L2776 ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ mvn ip, #0 ++ ldr lr, [r7, #1256] ++ ldr r6, .L2779+4 ++ rsb r1, r3, #24 ++ mvn ip, ip, lsl r3 ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ and r0, ip, lr, lsr r1 ++ bic r1, lr, ip, lsl r1 ++ str r3, [sp] ++ uxtb r0, r0 ++ ldr r3, [r6, #-96] ++ ldr r2, [r6, #-92] ++ bl flash_read_page_en ++ cmn r0, #1 ++ mov r3, r0 ++ beq .L2716 ++ ldr r1, [r7, #1244] ++ ldr r2, [r6, #-96] ++ ldr r1, [r1] ++ ldr r2, [r2] ++ cmp r1, r2 ++ beq .L2776 ++.L2716: ++ mov r6, #48 ++ ldrb r2, [r4, #1196] @ zero_extendqisi2 ++ mla r6, r6, r5, r4 ++ ldr r0, .L2779+44 ++ ldrb r1, [r6, #1233] @ zero_extendqisi2 ++ str r2, [sp] ++ ldr r2, [r6, #1256] ++ bl rk_printk ++ mvn r3, #0 ++ str r3, [r6, #1268] ++ b .L2776 ++.L2692: ++ mov r0, r7 ++ mov r1, #32 ++ bl flash_wait_device_ready ++ tst r0, #32 ++ mov r7, r0 ++ beq .L2719 ++ ands r2, r0, #15 ++ mov r3, #48 ++ mla r4, r3, r5, r4 ++ movne r3, #12 ++ strbne r3, [r4, #1274] ++ bne .L2777 ++.L2718: ++ mov r3, #13 ++ str r2, [r4, #1268] ++ strb r3, [r4, #1274] ++ b .L2719 ++.L2693: ++ mov r1, #64 ++ mov r0, r7 ++ bl flash_wait_device_ready ++ tst r0, #64 ++ movne r3, #48 ++ mlane r4, r3, r5, r4 ++ movne r3, #7 ++ strne r0, [r4, #1268] ++ strbne r3, [r4, #1274] ++ b .L2719 ++.L2780: ++ .align 2 ++.L2779: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR2 ++ .word .LC173 ++ .word .LANCHOR1+2034 ++ .word .LC0 ++ .word .LC174 ++ .word 1145785929 ++ .word .LANCHOR0+1232 ++ .word .LC175 ++ .word .LC176 ++ .word .LC177 ++ .fnend ++ .size queue_wait_first_req_completed, .-queue_wait_first_req_completed ++ .align 2 ++ .global sblk_prog_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sblk_prog_page, %function ++sblk_prog_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r4, r0 ++ ldrh r3, [r0, #34] ++ mov r5, r1 ++ cmp r3, #0 ++ beq .L2782 ++ ldr r3, .L2812 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L2782 ++ mov r2, r1 ++ ldr r1, [r0, #24] ++ ldr r0, .L2812+4 ++ bl rk_printk ++.L2782: ++ ldr r8, .L2812+8 ++ mov r6, #0 ++ ldr fp, .L2812+12 ++.L2783: ++ cmp r5, #0 ++ bne .L2794 ++.L2810: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2794: ++ ldrb r9, [r4] @ zero_extendqisi2 ++ ldr r7, [r4, #24] ++.L2784: ++ mov r1, #1 ++ mov r0, r7 ++ bl queue_lun_state ++ cmp r0, #0 ++ bne .L2785 ++ cmp r5, #1 ++ beq .L2786 ++ ldrb r3, [r8, #1194] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2786 ++ ldrb r3, [r8, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2787 ++.L2786: ++ mov r0, r4 ++ bl queue_prog_cmd ++.L2788: ++ subs r5, r5, #1 ++ beq .L2810 ++ ldr r4, .L2812+16 ++ add r9, r9, r9, lsl #1 ++ add r4, r4, r9, lsl #4 ++ b .L2783 ++.L2785: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2784 ++.L2787: ++ ldrb r2, [r8, #1153] @ zero_extendqisi2 ++ mvn r3, #0 ++ rsb r1, r2, #24 ++ mvn r3, r3, lsl r2 ++ ldrb r2, [r4] @ zero_extendqisi2 ++ and r3, r3, r7, lsr r1 ++ cmp r2, #255 ++ uxth r3, r3 ++ bne .L2789 ++ movw r2, #697 ++ ldr r1, .L2812+20 ++ ldr r0, .L2812+24 ++ str r3, [sp, #4] ++ bl rk_printk ++ bl dump_stack ++ ldr r3, [sp, #4] ++.L2789: ++ ldrb r2, [r4] @ zero_extendqisi2 ++ mov r1, #48 ++ mov r10, #1 ++ mla r2, r1, r2, r8 ++ ldrb r1, [r8, #1153] @ zero_extendqisi2 ++ ldr r0, [r2, #1256] ++ rsb r2, r1, #24 ++ lsl r1, r10, r1 ++ sub r1, r1, #1 ++ and r1, r1, r0, lsr r2 ++ uxth r1, r1 ++ cmp r3, r1 ++ bne .L2790 ++ ldr r3, .L2812+28 ++ ldrb lr, [fp, #-3136] @ zero_extendqisi2 ++ ldrh ip, [r3, #-2] ++ sub lr, lr, #1 ++ sub r3, r2, ip ++ lsl r3, r10, r3 ++ lsl r2, r10, ip ++ sub r3, r3, #1 ++ sub r2, r2, #1 ++ and r3, r3, lr ++ uxth r2, r2 ++ uxth r3, r3 ++ and r1, r3, r7, lsr ip ++ and r3, r3, r0, lsr ip ++ and ip, r2, r7 ++ subs r7, r1, r3 ++ and r2, r2, r0 ++ movne r7, #1 ++ cmp ip, r2 ++ movne r7, #0 ++ cmp r7, #0 ++ beq .L2790 ++ cmp r6, lr ++ beq .L2790 ++ ldr r3, [r4, #12] ++ mov r0, #17 ++ ldr r2, [r4, #4] ++ add r6, r6, r10 ++ ldr r1, [r4, #24] ++ bl flash_start_page_prog ++ mov r3, #9 ++ strb r10, [r4, #43] ++ strb r3, [r4, #42] ++ mvn r3, #0 ++ strb r3, [r4] ++ mov r1, r4 ++ ldr r0, .L2812+32 ++ bl buf_add_tail ++ b .L2788 ++.L2790: ++ mov r0, r4 ++ mov r6, #0 ++ bl queue_prog_cmd ++ b .L2788 ++.L2813: ++ .align 2 ++.L2812: ++ .word .LANCHOR2 ++ .word .LC178 ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR0+1232 ++ .word .LANCHOR1+2065 ++ .word .LC0 ++ .word .LANCHOR3-3136 ++ .word .LANCHOR0+2770 ++ .fnend ++ .size sblk_prog_page, .-sblk_prog_page ++ .align 2 ++ .global sblk_wait_write_queue_completed ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sblk_wait_write_queue_completed, %function ++sblk_wait_write_queue_completed: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ ldr r4, .L2818 ++.L2815: ++ ldrb r3, [r4, #2770] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L2816 ++ pop {r4, pc} ++.L2816: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2815 ++.L2819: ++ .align 2 ++.L2818: ++ .word .LANCHOR0 ++ .fnend ++ .size sblk_wait_write_queue_completed, .-sblk_wait_write_queue_completed ++ .align 2 ++ .global ftl_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_flush, %function ++ftl_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ ldr r4, .L2826 ++ ldr r5, .L2826+4 ++ ldrb r1, [r4, #2797] @ zero_extendqisi2 ++ cmp r1, #0 ++ beq .L2821 ++ ldrb r3, [r5, #-88] @ zero_extendqisi2 ++ add r0, r4, #1232 ++ add r3, r3, r3, lsl #1 ++ add r0, r0, r3, lsl #4 ++ bl sblk_prog_page ++.L2821: ++ mvn r3, #0 ++ strb r3, [r5, #-88] ++ mov r3, #0 ++ strb r3, [r4, #2797] ++ bl sblk_wait_write_queue_completed ++ bl ftl_write_completed ++ movw r0, #65535 ++ pop {r4, r5, r6, lr} ++ b ftl_vpn_decrement ++.L2827: ++ .align 2 ++.L2826: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .fnend ++ .size ftl_flush, .-ftl_flush ++ .align 2 ++ .global zftl_cache_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_cache_flush, %function ++zftl_cache_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L2836 ++ ldrb r3, [r3, #2797] @ zero_extendqisi2 ++ cmp r3, #0 ++ bxeq lr ++ push {r4, lr} ++ .save {r4, lr} ++ bl timer_get_time ++ ldr r3, .L2836+4 ++ ldr r3, [r3, #-84] ++ add r3, r3, #100 ++ cmp r0, r3 ++ popls {r4, pc} ++ pop {r4, lr} ++ b ftl_flush ++.L2837: ++ .align 2 ++.L2836: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .fnend ++ .size zftl_cache_flush, .-zftl_cache_flush ++ .align 2 ++ .global ftl_read_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_read_page, %function ++ftl_read_page: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, r0 ++ ldr r8, [sp, #24] ++ mov r5, r1 ++ mov r6, r2 ++ mov r7, r3 ++ bl sblk_wait_write_queue_completed ++ mov r3, r7 ++ str r8, [sp, #24] ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ pop {r4, r5, r6, r7, r8, lr} ++ b flash_read_page_en ++ .fnend ++ .size ftl_read_page, .-ftl_read_page ++ .align 2 ++ .global ftl_read_ppa_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_read_ppa_page, %function ++ftl_read_ppa_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ mov r8, r3 ++ ldr r3, .L2842 ++ mov r5, r0 ++ mvn r4, #0 ++ mov r6, r1 ++ mov r7, r2 ++ ldrb r0, [r3, #1153] @ zero_extendqisi2 ++ rsb r3, r0, #24 ++ mvn r4, r4, lsl r0 ++ and r4, r4, r5, lsr r3 ++ uxtb r4, r4 ++ bl sblk_wait_write_queue_completed ++ mov r3, r7 ++ str r8, [sp] ++ mov r2, r6 ++ mov r1, r5 ++ mov r0, r4 ++ bl flash_read_page_en ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L2843: ++ .align 2 ++.L2842: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_read_ppa_page, .-ftl_read_ppa_page ++ .align 2 ++ .global sblk_read_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sblk_read_page, %function ++sblk_read_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r10, r0 ++ mov r7, r1 ++ mov r4, r0 ++ mov r5, r1 ++.L2845: ++ cmp r5, #0 ++ bne .L2855 ++.L2868: ++ ldr r4, .L2870 ++.L2856: ++ cmp r7, #0 ++ bne .L2858 ++ mov r0, r7 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2855: ++ ldrb r8, [r4] @ zero_extendqisi2 ++ ldr fp, [r4, #24] ++.L2846: ++ mov r1, #0 ++ mov r0, fp ++ bl queue_lun_state ++ cmp r0, #0 ++ bne .L2847 ++ cmp r5, #1 ++ beq .L2852 ++ ldr r3, .L2870+4 ++ ldrb r3, [r3, #-80] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L2849 ++.L2852: ++ mov r0, r4 ++ bl queue_read_cmd ++ b .L2850 ++.L2847: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2846 ++.L2849: ++ ldr r3, .L2870+8 ++ ldrb r2, [r3, #1153] @ zero_extendqisi2 ++ mvn r3, #0 ++ rsb r1, r2, #24 ++ mvn r3, r3, lsl r2 ++ ldrb r2, [r4] @ zero_extendqisi2 ++ and r3, r3, fp, lsr r1 ++ cmp r2, #255 ++ uxth r3, r3 ++ bne .L2851 ++ movw r2, #782 ++ ldr r1, .L2870+12 ++ ldr r0, .L2870+16 ++ str r3, [sp] ++ bl rk_printk ++ bl dump_stack ++ ldr r3, [sp] ++.L2851: ++ ldr r2, .L2870+8 ++ mov r6, #48 ++ ldrb r9, [r4] @ zero_extendqisi2 ++ ldrb ip, [r2, #1153] @ zero_extendqisi2 ++ mla r6, r6, r9, r2 ++ mvn r2, #0 ++ mvn r2, r2, lsl ip ++ rsb r0, ip, #24 ++ ldr r1, [r6, #1256] ++ and r2, r2, r1, lsr r0 ++ uxth r2, r2 ++ cmp r3, r2 ++ bne .L2852 ++ ldr r3, .L2870+20 ++ ldrh r3, [r3] ++ add fp, r3, fp ++ cmp r1, fp ++ bne .L2852 ++ ldr r0, [r4, #24] ++ mvn fp, #0 ++ ldrb r8, [r6, #1232] @ zero_extendqisi2 ++ add r9, r9, r9, lsl #1 ++ add r5, r5, fp ++ bl flash_start_plane_read ++ mov r2, #2 ++ mov r3, #0 ++ strb r2, [r4, #42] ++ mov r1, r4 ++ strb r3, [r4, #43] ++ ldr r0, .L2870+24 ++ strb fp, [r4] ++ str r2, [sp, #4] ++ str r3, [sp] ++ bl buf_add_tail ++ ldr r1, .L2870 ++ ldr r2, [sp, #4] ++ ldr r3, [sp] ++ strb fp, [r6, #1232] ++ strb r2, [r6, #1274] ++ add r1, r1, r9, lsl #4 ++ strb r3, [r6, #1275] ++ ldr r0, .L2870+24 ++ bl buf_add_tail ++.L2850: ++ subs r5, r5, #1 ++ beq .L2868 ++ ldr r4, .L2870 ++ add r8, r8, r8, lsl #1 ++ add r4, r4, r8, lsl #4 ++ b .L2845 ++.L2858: ++ ldrb r3, [r10, #42] @ zero_extendqisi2 ++ cmp r3, #13 ++ bne .L2857 ++ ldrb r3, [r10] @ zero_extendqisi2 ++ sub r7, r7, #1 ++ cmp r3, #255 ++ addne r3, r3, r3, lsl #1 ++ addne r10, r4, r3, lsl #4 ++.L2857: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2856 ++.L2871: ++ .align 2 ++.L2870: ++ .word .LANCHOR0+1232 ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LANCHOR1+2080 ++ .word .LC0 ++ .word .LANCHOR3-3074 ++ .word .LANCHOR0+2770 ++ .fnend ++ .size sblk_read_page, .-sblk_read_page ++ .align 2 ++ .global gc_check_data_one_wl ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_check_data_one_wl, %function ++gc_check_data_one_wl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r5, .L2906 ++ ldr r3, [r5, #2832] ++ ldr r10, [r5, #1096] ++ cmp r3, #0 ++ bne .L2873 ++ mov r0, #1 ++ bl buf_alloc ++ str r0, [r5, #2832] ++.L2873: ++ ldr r4, [r5, #2832] ++ cmp r4, #0 ++ bne .L2874 ++ movw r2, #729 ++ ldr r1, .L2906+4 ++ ldr r0, .L2906+8 ++ bl rk_printk ++ bl dump_stack ++.L2874: ++ ldr r7, .L2906+12 ++ add fp, r10, #96 ++ mov r9, #0 ++.L2875: ++ ldrb r3, [r10, #89] @ zero_extendqisi2 ++ ldr r6, .L2906+16 ++ cmp r9, r3 ++ bge .L2886 ++ mov r8, #1 ++ b .L2887 ++.L2885: ++ ldr r2, .L2906+20 ++ ldrb r1, [r7, #-3128] @ zero_extendqisi2 ++ ldrh r3, [fp] ++ ldrh r2, [r2, #-2] ++ cmp r1, #2 ++ mul r2, r2, r3 ++ beq .L2876 ++ ldrb r3, [r5, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2877 ++.L2876: ++ ldrh r3, [r6, #12] ++ sub r3, r3, #1 ++ add r3, r3, r2 ++ add r3, r3, r8 ++ orr r3, r3, r1, lsl #24 ++.L2905: ++ str r3, [r4, #24] ++ mov r1, #1 ++ mov r0, r4 ++ bl sblk_read_page ++ ldr r2, [r4, #36] ++ cmn r2, #1 ++ beq .L2881 ++ ldr r0, [r7, #-132] ++ ldrh r1, [r6, #18] ++ ldr r3, [r4, #12] ++ ldr ip, [r0, r1, lsl #2] ++ ldr r0, [r3, #4] ++ cmp ip, r0 ++ bne .L2881 ++ ldr r0, [r7, #-128] ++ ldr r3, [r3, #8] ++ ldr r1, [r0, r1, lsl #2] ++ cmp r1, r3 ++ beq .L2882 ++.L2881: ++ ldrh r3, [r6, #18] ++ ldr r1, [r7, #-132] ++ lsl r0, r3, #2 ++ ldr r3, [r1, r3, lsl #2] ++ cmn r3, #1 ++ beq .L2882 ++ ldr r1, .L2906+24 ++ ldr r1, [r1] ++ tst r1, #1024 ++ beq .L2883 ++ ldr r1, [r4, #12] ++ ldr ip, [r1, #12] ++ str ip, [sp, #16] ++ ldr ip, [r1, #8] ++ str ip, [sp, #12] ++ ldr ip, [r1, #4] ++ str ip, [sp, #8] ++ ldr r1, [r1] ++ str r1, [sp, #4] ++ ldr r1, [r7, #-128] ++ ldr r1, [r1, r0] ++ ldr r0, .L2906+28 ++ str r1, [sp] ++ ldr r1, [r4, #24] ++ bl rk_printk ++.L2883: ++ ldrh r3, [r10, #80] ++ mov r1, #0 ++ ldr r2, [r5, #1092] ++ lsl r3, r3, #1 ++ strh r1, [r2, r3] @ movhi ++ ldr r2, [r5, #1096] ++ ldr r3, [r2, #556] ++ add r3, r3, #1 ++ str r3, [r2, #556] ++ ldr r3, [r5, #2800] ++ ldr r2, [r3, #156] ++ ldr r3, .L2906+32 ++ cmp r2, r3 ++ bne .L2890 ++ ldrb r3, [r7, #-2542] @ zero_extendqisi2 ++ cmp r3, r1 ++ bne .L2890 ++ ldrb r3, [r7, #-3126] @ zero_extendqisi2 ++ cmp r3, r1 ++ bne .L2890 ++ ldr r0, [r4, #24] ++ bl ftl_mask_bad_block ++.L2890: ++ mvn r0, #0 ++ b .L2872 ++.L2877: ++ ldrh r3, [r6, #12] ++ cmp r1, #3 ++ addne r3, r3, r2 ++ bne .L2905 ++ ldrb r1, [r5, #1159] @ zero_extendqisi2 ++ cmp r1, #0 ++ addne r3, r3, r3, lsl #1 ++ addeq r3, r3, r2 ++ orreq r3, r3, r8, lsl #24 ++ subne r3, r3, #1 ++ addne r3, r3, r2 ++ addne r3, r3, r8 ++ orrne r3, r3, #50331648 ++ b .L2905 ++.L2882: ++ ldrh r3, [r6, #18] ++ add r8, r8, #1 ++ add r3, r3, #1 ++ strh r3, [r6, #18] @ movhi ++.L2887: ++ ldrh r3, [r6, #16] ++ cmp r8, r3 ++ ble .L2885 ++ add r9, r9, #1 ++ add fp, fp, #2 ++ b .L2875 ++.L2886: ++ ldrh r3, [r6, #12] ++ add r2, r3, #1 ++ strh r2, [r6, #12] @ movhi ++ ldr r2, .L2906+12 ++ ldrb r0, [r2, #-3126] @ zero_extendqisi2 ++ cmp r0, #0 ++ movne r0, #0 ++ addne r3, r3, #2 ++ strhne r3, [r6, #12] @ movhi ++.L2884: ++.L2872: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2907: ++ .align 2 ++.L2906: ++ .word .LANCHOR0 ++ .word .LANCHOR1+2095 ++ .word .LC0 ++ .word .LANCHOR3 ++ .word .LANCHOR0+2824 ++ .word .LANCHOR3-3072 ++ .word .LANCHOR2 ++ .word .LC179 ++ .word 1145785929 ++ .fnend ++ .size gc_check_data_one_wl, .-gc_check_data_one_wl ++ .align 2 ++ .global sblk_tlc_prog_one_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sblk_tlc_prog_one_page, %function ++sblk_tlc_prog_one_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, r0 ++ ldr r3, [r0] ++ ldr r6, [r3, #24] ++.L2909: ++ mov r1, #1 ++ mov r0, r6 ++ bl queue_lun_state ++ subs r5, r0, #0 ++ bne .L2910 ++ mov r0, r4 ++ mov r1, #1 ++ bl queue_tlc_prog_cmd ++ mov r0, r5 ++ pop {r4, r5, r6, pc} ++.L2910: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2909 ++ .fnend ++ .size sblk_tlc_prog_one_page, .-sblk_tlc_prog_one_page ++ .align 2 ++ .global sblk_xlc_prog_pages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sblk_xlc_prog_pages, %function ++sblk_xlc_prog_pages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r5, r0 ++ ldr r3, [r0] ++ .pad #20 ++ sub sp, sp, #20 ++ mov r7, r1 ++ mov fp, r2 ++ ldr r4, [r3, #24] ++.L2913: ++ mov r1, #1 ++ mov r0, r4 ++ bl queue_lun_state ++ subs r10, r0, #0 ++ bne .L2914 ++ cmp fp, #2 ++ bne .L2915 ++ ldr r1, .L2925 ++ ldr lr, [r7] ++ ldrb r3, [r1, #1194] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldreq r4, [lr, #24] ++ beq .L2920 ++ ldrb r3, [r1, #1153] @ zero_extendqisi2 ++ mov r9, #1 ++ ldr r2, [r5] ++ ldr lr, [lr, #24] ++ rsb r0, r3, #24 ++ ldr ip, [r2, #24] ++ lsl r4, r9, r3 ++ ldrb r3, [r1, #1159] @ zero_extendqisi2 ++ lsl r6, r9, r0 ++ sub r4, r4, #1 ++ sub r6, r6, #1 ++ and r4, r4, ip, lsr r0 ++ cmp r3, #0 ++ and r8, ip, r6 ++ uxtb r4, r4 ++ and r6, r6, lr ++ beq .L2917 ++ mov r0, r4 ++ bl zftl_flash_exit_slc_mode ++ ldr r3, [r5] ++ mov r1, r9 ++ mov r0, r10 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #17 ++ ldr r3, [r3, #4] ++ str r8, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r7] ++ mov r1, r9 ++ mov r0, r10 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #26 ++ ldr r3, [r3, #4] ++ str r6, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r5, #4] ++ mov r1, fp ++ mov r0, r10 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #17 ++ ldr r3, [r3, #4] ++ str r3, [sp, #4] ++ add r3, r8, r9 ++ str r3, [sp] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r7, #4] ++ mov r1, fp ++ mov r0, r10 ++ add r8, r8, #2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #26 ++ ldr r3, [r3, #4] ++ str r3, [sp, #4] ++ add r3, r6, r9 ++ str r3, [sp] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r5, #8] ++ mov r1, #3 ++ mov r0, r10 ++ add r6, r6, #2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #17 ++ ldr r3, [r3, #4] ++ str r8, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r7, #8] ++ mov r1, #3 ++ mov r0, r10 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #16 ++ ldr r3, [r3, #4] ++ str r6, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_one_pass_page_prog ++.L2918: ++ ldr r1, [r5] ++ mov r3, #5 ++ ldr r0, .L2925+4 ++ strb r3, [r1, #42] ++ mov r3, #1 ++ strb r3, [r1, #43] ++ mvn r3, #0 ++ strb r3, [r1] ++ bl buf_add_tail ++.L2919: ++ mov r0, #0 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2914: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2913 ++.L2917: ++ ldr r3, [r2, #12] ++ mov r1, r9 ++ ldrb r0, [r2, #44] @ zero_extendqisi2 ++ str r3, [sp, #8] ++ ldr r3, [r2, #4] ++ mov r2, #17 ++ str r8, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r7] ++ mov r1, r9 ++ ldr r2, [r5] ++ ldrb r0, [r2, #44] @ zero_extendqisi2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #26 ++ ldr r3, [r3, #4] ++ str r6, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldm r5, {r2, r3} ++ mov r1, fp ++ ldrb r0, [r2, #44] @ zero_extendqisi2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #17 ++ ldr r3, [r3, #4] ++ str r8, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r7, #4] ++ mov r1, fp ++ ldr r2, [r5] ++ ldrb r0, [r2, #44] @ zero_extendqisi2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #26 ++ ldr r3, [r3, #4] ++ str r6, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r5, #8] ++ mov r1, #3 ++ ldr r2, [r5] ++ ldrb r0, [r2, #44] @ zero_extendqisi2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #17 ++ ldr r3, [r3, #4] ++ str r8, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r7, #8] ++ mov r1, #3 ++ ldr r2, [r5] ++ ldrb r0, [r2, #44] @ zero_extendqisi2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ mov r2, #16 ++ ldr r3, [r3, #4] ++ str r6, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl flash_start_tlc_page_prog ++ b .L2918 ++.L2921: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++.L2920: ++ mov r1, #1 ++ mov r0, r4 ++ bl queue_lun_state ++ subs r6, r0, #0 ++ bne .L2921 ++ mov r1, #1 ++ mov r0, r5 ++ bl queue_tlc_prog_cmd ++ mov r1, r6 ++ mov r0, r7 ++ bl queue_tlc_prog_cmd ++.L2922: ++ mov r1, #1 ++ mov r0, r4 ++ bl queue_lun_state ++ cmp r0, #0 ++ beq .L2919 ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2922 ++.L2915: ++ mov r1, #1 ++ mov r0, r5 ++ bl queue_tlc_prog_cmd ++ b .L2919 ++.L2926: ++ .align 2 ++.L2925: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2770 ++ .fnend ++ .size sblk_xlc_prog_pages, .-sblk_xlc_prog_pages ++ .align 2 ++ .global sblk_3d_mlc_prog_pages ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type sblk_3d_mlc_prog_pages, %function ++sblk_3d_mlc_prog_pages: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ mov r7, r1 ++ ldr r9, .L2933 ++ add r5, r0, #8 ++ mov r8, #1 ++ ldr r10, .L2933+4 ++.L2928: ++ cmp r7, #0 ++ bne .L2931 ++ mov r0, r7 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L2931: ++ ldr r3, [r5, #-8] ++ ldr r4, [r3, #24] ++.L2929: ++ mov r1, #1 ++ mov r0, r4 ++ bl queue_lun_state ++ cmp r0, #0 ++ bne .L2930 ++ ldr r3, [r5, #-8] ++ sub r7, r7, #1 ++ add r5, r5, #8 ++ ldr r1, [r3, #24] ++ ldrb r3, [r9, #1153] @ zero_extendqisi2 ++ rsb r2, r3, #24 ++ lsl r4, r8, r3 ++ lsl r6, r8, r2 ++ sub r4, r4, #1 ++ sub r6, r6, #1 ++ and r4, r4, r1, lsr r2 ++ and r6, r6, r1 ++ uxtb r4, r4 ++ mov r0, r4 ++ bl zftl_flash_exit_slc_mode ++ ldr r3, [r5, #-16] ++ mov r1, r4 ++ mov r0, #16 ++ ldr r2, [r3, #12] ++ str r2, [sp] ++ mov r2, r6 ++ ldr r3, [r3, #4] ++ bl flash_start_3d_mlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr r3, [r5, #-12] ++ mov r1, r4 ++ mov r0, #16 ++ ldr r2, [r3, #12] ++ str r2, [sp] ++ add r2, r6, #1 ++ ldr r3, [r3, #4] ++ bl flash_start_3d_mlc_page_prog ++ bl nandc_de_cs.constprop.35 ++ ldr r1, [r5, #-16] ++ mov r3, #4 ++ mov r0, r10 ++ strb r3, [r1, #42] ++ mvn r3, #0 ++ strb r8, [r1, #43] ++ strb r3, [r1] ++ bl buf_add_tail ++ b .L2928 ++.L2930: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2929 ++.L2934: ++ .align 2 ++.L2933: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2770 ++ .fnend ++ .size sblk_3d_mlc_prog_pages, .-sblk_3d_mlc_prog_pages ++ .align 2 ++ .global flash_prog_page_en ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_prog_page_en, %function ++flash_prog_page_en: ++ .fnstart ++ @ args = 8, pretend = 0, frame = 16 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ mov r10, r3 ++ ldr r4, .L2966 ++ mov r8, r0 ++ mov r5, r1 ++ ldrb r3, [sp, #68] @ zero_extendqisi2 ++ mov fp, r2 ++ ubfx r7, r1, #24, #2 ++ str r3, [sp, #20] ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ cmp r3, r0 ++ bhi .L2936 ++ movw r2, #642 ++ ldr r1, .L2966+4 ++ ldr r0, .L2966+8 ++ bl rk_printk ++ bl dump_stack ++.L2936: ++ ldrb r3, [r4, #1109] @ zero_extendqisi2 ++ cmp r3, r8 ++ mvnls r0, #0 ++ bls .L2935 ++ add r3, r4, r8 ++ cmp r7, #0 ++ ldrb r3, [r3, #1144] @ zero_extendqisi2 ++ str r3, [sp, #12] ++ bne .L2949 ++ ldrb r3, [r4] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2939 ++ ldrb r3, [r4, #1] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2949 ++.L2939: ++ ldrh r7, [r4, #2] ++ mov r0, r5 ++ mov r1, r7 ++ bl __aeabi_uidiv ++ mov r1, r7 ++ mul r6, r7, r0 ++ mov r0, r5 ++ bl __aeabi_uidivmod ++ ldrb r3, [r4, #1] @ zero_extendqisi2 ++ lsl r1, r1, #1 ++ cmp r3, #0 ++ addeq r4, r4, r1 ++ ldrheq r1, [r4, #4] ++ add r6, r1, r6 ++.L2938: ++ ldr r4, .L2966+12 ++ ldr r7, .L2966+16 ++.L2944: ++ ldr r3, [r4] ++ tst r3, #16 ++ beq .L2941 ++ mov r3, r6 ++ mov r2, r5 ++ ldr r1, [sp, #12] ++ ldr r0, .L2966+20 ++ bl rk_printk ++.L2941: ++ ldr r3, [sp, #64] ++ mov r2, fp ++ mov r1, r6 ++ ldr r0, [sp, #12] ++ str r3, [sp] ++ mov r3, r10 ++ bl flash_prog_page ++ ldr r3, [sp, #20] ++ str r0, [sp, #16] ++ cmp r3, #0 ++ beq .L2942 ++ ldr r3, [sp, #64] ++ mov r1, r5 ++ mov r0, r8 ++ str r3, [sp] ++ ldr r3, [r7, #-96] ++ ldr r2, [r7, #-92] ++ bl flash_read_page_en ++ cmn r0, #1 ++ cmpne r0, #512 ++ mov r9, r0 ++ beq .L2943 ++ ldr r3, [r7, #-92] ++ ldr r2, [fp] ++ ldr r3, [r3] ++ cmp r2, r3 ++ bne .L2943 ++ ldr r3, [r7, #-96] ++ ldr r2, [r10] ++ ldr r3, [r3] ++ cmp r2, r3 ++ beq .L2942 ++.L2943: ++ mov r3, #4 ++ mov r1, fp ++ mov r2, r3 ++ ldr r0, .L2966+24 ++ bl rknand_print_hex ++ mov r3, #4 ++ mov r1, r10 ++ mov r2, r3 ++ ldr r0, .L2966+28 ++ bl rknand_print_hex ++ mov r3, #4 ++ ldr r1, [r7, #-96] ++ mov r2, r3 ++ ldr r0, .L2966+32 ++ bl rknand_print_hex ++ mov r3, #4 ++ ldr r1, [r7, #-92] ++ mov r2, r3 ++ ldr r0, .L2966+36 ++ bl rknand_print_hex ++ cmp r9, #512 ++ beq .L2944 ++.L2946: ++ mov r1, r5 ++ ldr r0, .L2966+40 ++ bl rk_printk ++ mvn r4, #0 ++ movw r2, #685 ++ ldr r1, .L2966+4 ++ ldr r0, .L2966+8 ++ bl rk_printk ++ bl dump_stack ++.L2945: ++ mov r0, r4 ++.L2935: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2949: ++ mov r6, r5 ++ b .L2938 ++.L2942: ++ ldr r4, [sp, #16] ++ cmn r4, #1 ++ bne .L2945 ++ b .L2946 ++.L2967: ++ .align 2 ++.L2966: ++ .word .LANCHOR0 ++ .word .LANCHOR1+2116 ++ .word .LC0 ++ .word .LANCHOR2 ++ .word .LANCHOR3 ++ .word .LC180 ++ .word .LC181 ++ .word .LC182 ++ .word .LC183 ++ .word .LC184 ++ .word .LC185 ++ .fnend ++ .size flash_prog_page_en, .-flash_prog_page_en ++ .align 2 ++ .global ftl_prog_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_prog_page, %function ++ftl_prog_page: ++ .fnstart ++ @ args = 4, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ .pad #12 ++ mov r4, r0 ++ mov r7, r3 ++ mov r5, r1 ++ mov r6, r2 ++ bl sblk_wait_write_queue_completed ++ mov r3, #1 ++ mov r0, r4 ++ str r3, [sp, #4] ++ mov r2, r6 ++ ldr r3, [sp, #32] ++ mov r1, r5 ++ str r3, [sp] ++ mov r3, r7 ++ bl flash_prog_page_en ++ cmn r0, #1 ++ mov r4, r0 ++ bne .L2968 ++ ldr r1, .L2971 ++ movw r2, #2678 ++ ldr r0, .L2971+4 ++ bl rk_printk ++ bl dump_stack ++ mov r1, r5 ++ ldr r0, .L2971+8 ++ bl rk_printk ++.L2968: ++ mov r0, r4 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, pc} ++.L2972: ++ .align 2 ++.L2971: ++ .word .LANCHOR1+2135 ++ .word .LC0 ++ .word .LC185 ++ .fnend ++ .size ftl_prog_page, .-ftl_prog_page ++ .align 2 ++ .global ftl_info_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_info_flush, %function ++ftl_info_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r1, #0 ++ ldr r4, .L3010 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r9, r0 ++ mov r8, #0 ++ ldr r6, .L3010+4 ++ ldrb r2, [r4, #-2546] @ zero_extendqisi2 ++ ldr r0, [r4, #-76] ++ ldr r10, .L3010+8 ++ ldr r7, .L3010+12 ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldr r3, [r6, #2800] ++ ldrh r2, [r3, #74] ++ cmp r2, #1 ++ movhi r2, #0 ++ strhhi r2, [r3, #150] @ movhi ++.L2987: ++ ldr r3, .L3010+16 ++ ldr r2, [r6, #2800] ++ ldrb r5, [r4, #-56] @ zero_extendqisi2 ++ ldrh fp, [r3] ++ ldrh r3, [r4, #-54] ++ str r3, [sp, #8] ++ ldr r3, [r2, #4] ++ add r3, r3, #1 ++ str r3, [r2, #4] ++ ldr r3, [r4, #-76] ++ str r9, [r3] ++ ldr r2, [r6, #2800] ++ ldrb r1, [r4, #-2546] @ zero_extendqisi2 ++ ldr r3, [r4, #-76] ++ ldr r2, [r2, #4] ++ ldr r0, [r4, #-52] ++ lsl r1, r1, #9 ++ str r3, [sp, #12] ++ str r2, [r3, #4] ++ bl js_hash ++ ldr r3, [sp, #12] ++ str r0, [r3, #8] ++ ldr r3, [r10] ++ tst r3, #4096 ++ beq .L2975 ++ ldr r3, [r6, #2800] ++ ldrh r2, [r4, #-54] ++ ldrb r1, [r4, #-56] @ zero_extendqisi2 ++ ldr r3, [r3, #4] ++ ldr r0, .L3010+20 ++ bl rk_printk ++.L2975: ++ ldr r3, .L3010+24 ++ ldrh r0, [r4, #-54] ++ ldrh r3, [r3] ++ cmp r3, r0 ++ bhi .L2976 ++ ldr fp, .L3010+28 ++ ldr r5, .L3010+32 ++.L2983: ++ ldrb r3, [r4, #-55] @ zero_extendqisi2 ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #7 ++ strb r3, [r4, #-55] ++ bls .L2977 ++ mov r3, #8 ++.L2982: ++ ldr r2, [r6, #1040] ++ sub r8, r3, #8 ++ uxth r8, r8 ++ add r2, r2, r3 ++ ldrb r1, [r2, #32] @ zero_extendqisi2 ++ add r2, r1, #127 ++ uxtb r2, r2 ++ cmp r2, #125 ++ bhi .L2978 ++ movw r2, #846 ++ mov r1, fp ++ mov r0, r5 ++ bl rk_printk ++ bl dump_stack ++.L2981: ++ strb r8, [r4, #-55] ++ mov r8, #1 ++.L2977: ++ ldr r3, [r6, #1040] ++ ldrb r2, [r4, #-55] @ zero_extendqisi2 ++ add r3, r3, r2 ++ ldrb r3, [r3, #40] @ zero_extendqisi2 ++ cmp r3, #255 ++ strb r3, [r4, #-56] ++ beq .L2983 ++ ldrh r5, [r7, #-2] ++ mov r0, #0 ++ mul r5, r3, r5 ++ mov r1, r5 ++ bl flash_erase_block ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ mov r1, r5 ++ ldr r2, [r4, #-52] ++ mov r0, #0 ++ str r3, [sp] ++ ldr r3, [r4, #-76] ++ bl ftl_prog_page ++ mov r3, #1 ++ add r5, r5, r3 ++ strh r3, [r4, #-54] @ movhi ++.L2984: ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ mov r1, r5 ++ ldr r2, [r4, #-52] ++ mov r0, #0 ++ str r3, [sp] ++ ldr r3, [r4, #-76] ++ bl ftl_prog_page ++ ldrh r3, [r4, #-54] ++ cmn r0, #1 ++ add r3, r3, #1 ++ strh r3, [r4, #-54] @ movhi ++ beq .L2985 ++ ldrb r3, [r4, #-48] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L2986 ++.L2985: ++ mov r3, #0 ++ strb r3, [r4, #-48] ++ b .L2987 ++.L2978: ++ cmp r1, #255 ++ bne .L2981 ++ add r3, r3, #1 ++ cmp r3, #16 ++ bne .L2982 ++ mov r8, #8 ++ b .L2981 ++.L2976: ++ ldr r3, [sp, #8] ++ cmp r0, #0 ++ mla r5, fp, r5, r3 ++ bne .L2984 ++ mov r1, r5 ++ bl flash_erase_block ++ b .L2984 ++.L2986: ++ cmp r8, #1 ++ beq .L2988 ++.L2996: ++ ldrb r3, [r4, #-56] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L2990 ++ movw r2, #890 ++ ldr r1, .L3010+28 ++ ldr r0, .L3010+32 ++ bl rk_printk ++ bl dump_stack ++.L2990: ++ mov r0, #0 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L2988: ++ ldrb r5, [r4, #-55] @ zero_extendqisi2 ++ ldr r8, .L3010+28 ++ ldr r9, .L3010+32 ++ add r5, r5, #1 ++.L2991: ++ cmp r5, #7 ++ bhi .L2996 ++ ldr r3, [r6, #1040] ++ add r3, r3, r5 ++ ldrb r10, [r3, #40] @ zero_extendqisi2 ++ add r3, r10, #127 ++ uxtb r3, r3 ++ cmp r3, #125 ++ bhi .L2992 ++ movw r2, #881 ++ mov r1, r8 ++ mov r0, r9 ++ bl rk_printk ++ bl dump_stack ++.L2993: ++ ldrh r1, [r7, #-2] ++ mov r0, #0 ++ mul r1, r10, r1 ++ bl flash_erase_block ++ b .L2994 ++.L2992: ++ cmp r10, #255 ++ bne .L2993 ++.L2994: ++ add r5, r5, #1 ++ uxth r5, r5 ++ b .L2991 ++.L3011: ++ .align 2 ++.L3010: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR3-3072 ++ .word .LANCHOR3-3074 ++ .word .LC186 ++ .word .LANCHOR3-3096 ++ .word .LANCHOR1+2149 ++ .word .LC0 ++ .fnend ++ .size ftl_info_flush, .-ftl_info_flush ++ .align 2 ++ .global ftl_info_blk_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_info_blk_init, %function ++ftl_info_blk_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r3, #1 ++ ldr r4, .L3043 ++ mov r6, #0 ++ mov r1, r6 ++ mov r2, #16384 ++ ldr r5, .L3043+4 ++ .pad #20 ++ sub sp, sp, #20 ++ strb r3, [r4, #-48] ++ strb r3, [r4, #-46] ++ movw r3, #1080 ++ ldr r0, [r4, #-52] ++ ldrh r3, [r5, r3] ++ strb r6, [r4, #-47] ++ str r0, [r5, #1084] ++ ldr r10, .L3043+8 ++ add r3, r0, r3, lsl #2 ++ ldr r9, .L3043+12 ++ str r3, [r5, #2800] ++ bl ftl_memset ++ mov r1, r6 ++ mov r2, #16384 ++ ldr r0, [r4, #-44] ++ bl ftl_memset ++ ldr r3, [r5, #1040] ++ strb r6, [r4, #-55] ++ strh r6, [r4, #-54] @ movhi ++ mov r6, #7 ++ ldrb r3, [r3, #40] @ zero_extendqisi2 ++ strb r3, [r4, #-56] ++.L3014: ++ ldr r3, [r5, #1040] ++ sxth r8, r6 ++ add r3, r3, r6 ++ ldrb r7, [r3, #40] @ zero_extendqisi2 ++ cmp r7, #255 ++ bne .L3013 ++.L3018: ++ subs r6, r6, #1 ++ bcs .L3014 ++ mov r7, r6 ++ mov r8, #0 ++.L3015: ++ ldr r6, .L3043+8 ++ ldr r3, [r6] ++ tst r3, #4096 ++ beq .L3019 ++ ldr r3, [r5, #2800] ++ mov r2, #4800 ++ mov r1, r7 ++ ldr r0, .L3043+16 ++ ldr r3, [r3] ++ bl rk_printk ++.L3019: ++ cmn r7, #1 ++ bne .L3020 ++ mov r2, #16384 ++ mov r1, #0 ++ ldr r0, [r4, #-52] ++ bl ftl_memset ++ ldr r3, [r5, #2800] ++ ldr r2, .L3043+12 ++ str r2, [r3] ++ ldr r2, .L3043+20 ++ ldr r3, [r5, #2800] ++ str r2, [r3, #12] ++.L3042: ++ mov r0, r7 ++.L3012: ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3013: ++ ldr r3, .L3043+24 ++ mov r0, #0 ++ ldr r2, [r4, #-52] ++ ldrh r3, [r3] ++ mul r7, r7, r3 ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ str r3, [sp] ++ mov r1, r7 ++ ldr r3, [r4, #-76] ++ bl ftl_read_page ++ cmn r0, #1 ++ mov fp, r0 ++ bne .L3016 ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ add r1, r7, #1 ++ ldr r2, [r4, #-52] ++ mov r0, #0 ++ str r3, [sp] ++ ldr r3, [r4, #-76] ++ bl ftl_read_page ++ mov fp, r0 ++.L3016: ++ ldr r3, [r10] ++ tst r3, #4096 ++ beq .L3017 ++ ldr r3, [r5, #2800] ++ mov r2, fp ++ mov r1, r6 ++ ldr r0, .L3043+28 ++ ldr r3, [r3] ++ str r3, [sp] ++ movw r3, #749 ++ bl rk_printk ++.L3017: ++ cmn fp, #1 ++ beq .L3018 ++ ldr r3, [r5, #2800] ++ ldr r3, [r3] ++ cmp r3, r9 ++ bne .L3018 ++ mov r7, r8 ++ b .L3015 ++.L3020: ++ ldr r3, [r5, #1040] ++ mov r0, #0 ++ ldr r2, [r4, #-52] ++ mov r7, #0 ++ strb r8, [r4, #-55] ++ add r3, r3, r8 ++ ldr r10, .L3043+12 ++ ldrb r1, [r3, #40] @ zero_extendqisi2 ++ mov r3, #4 ++ str r3, [sp] ++ ldr r3, [r4, #-76] ++ strb r1, [r4, #-56] ++ bl flash_get_last_written_page ++ uxth r9, r0 ++ ldrb r8, [r4, #-56] @ zero_extendqisi2 ++ ldr fp, .L3043+32 ++ add r3, r9, #1 ++ uxth r3, r3 ++ str r3, [sp, #8] ++ ldr r3, .L3043+36 ++ ldrh r3, [r3, #-2] ++ mla r8, r3, r8, r0 ++.L3022: ++ sub r3, r9, r7 ++ tst r3, #32768 ++ bne .L3026 ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ sub r1, r8, r7 ++ ldr r2, [r4, #-52] ++ mov r0, #0 ++ str r3, [sp] ++ ldr r3, [r4, #-76] ++ bl ftl_read_page ++ cmn r0, #1 ++ beq .L3023 ++ ldr r3, [r5, #2800] ++ ldr r3, [r3] ++ cmp r3, r10 ++ bne .L3023 ++ ldr r3, [r4, #-76] ++ ldr r3, [r3, #8] ++ cmp r3, #0 ++ bne .L3024 ++.L3026: ++ ldrh r3, [sp, #8] ++ strh r3, [r4, #-54] @ movhi ++ bl ftl_tmp_into_update ++ ldr r2, [r5, #2800] ++ mov r0, #0 ++ ldr r3, [r2, #64] ++ add r3, r3, #1 ++ str r3, [r2, #64] ++ bl ftl_info_flush ++ mov r0, #0 ++ bl ftl_info_flush ++ ldr r7, [r6] ++ ands r7, r7, #16384 ++ beq .L3042 ++ ldr r3, [r5, #2800] ++ ldr r0, .L3043+40 ++ ldr r1, [r3, #156] ++ bl rk_printk ++ mov r0, #0 ++ b .L3012 ++.L3024: ++ ldrb r1, [r4, #-2546] @ zero_extendqisi2 ++ ldr r0, [r4, #-52] ++ str r3, [sp, #12] ++ lsl r1, r1, #9 ++ bl js_hash ++ ldr r3, [sp, #12] ++ cmp r3, r0 ++ beq .L3026 ++ ldr r3, [r4, #-76] ++ mov r0, fp ++ ldr r1, [r3, #8] ++ bl rk_printk ++.L3023: ++ add r7, r7, #1 ++ b .L3022 ++.L3044: ++ .align 2 ++.L3043: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word 1229739078 ++ .word .LC188 ++ .word 393252 ++ .word .LANCHOR3-3074 ++ .word .LC187 ++ .word .LC189 ++ .word .LANCHOR3-3072 ++ .word .LC190 ++ .fnend ++ .size ftl_info_blk_init, .-ftl_info_blk_init ++ .align 2 ++ .global ftl_ext_info_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_ext_info_flush, %function ++ftl_ext_info_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, lr} ++ .save {r4, r5, r6, r7, r8, r9, lr} ++ .pad #12 ++ bl timer_get_time ++ ldr r3, .L3061 ++ ldr r5, .L3061+4 ++ umull r0, r1, r0, r3 ++ ldr r3, [r5, #1096] ++ ldr r0, [r3, #520] ++ lsr r1, r1, #5 ++ cmp r1, r0 ++ bls .L3046 ++ ldr r2, [r3, #12] ++ sub r2, r2, r0 ++ add r2, r2, r1 ++ str r2, [r3, #12] ++.L3060: ++ str r1, [r3, #520] ++ b .L3047 ++.L3046: ++ bcc .L3060 ++.L3047: ++ ldr r4, .L3061+8 ++ mov r0, #0 ++ bl ftl_total_vpn_update ++ sub r7, r4, #3136 ++.L3051: ++ ldr r3, [r5, #2800] ++ ldr r2, [r3, #56] ++ add r2, r2, #1 ++ str r2, [r3, #56] ++ ldrh r2, [r3, #140] ++ ldr r3, .L3061+12 ++ ldrh r3, [r3] ++ cmp r2, r3 ++ bcc .L3049 ++ bl ftl_ext_alloc_new_blk ++.L3049: ++ ldr r3, [r5, #2800] ++ ldrh r2, [r3, #130] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3050 ++ movw r2, #2211 ++ ldr r1, .L3061+16 ++ ldr r0, .L3061+20 ++ bl rk_printk ++ bl dump_stack ++.L3050: ++ ldr r2, [r5, #2800] ++ ldrb r6, [r5, #1153] @ zero_extendqisi2 ++ ldrh r1, [r7, #-2] ++ ldrh r3, [r2, #130] ++ rsb r6, r6, #24 ++ ldr r0, [r4, #-76] ++ sub r6, r6, r1 ++ mvn r1, #0 ++ asr r8, r3, r6 ++ bic r6, r3, r1, lsl r6 ++ ldr r3, .L3061+24 ++ sxth r6, r6 ++ ldrh r1, [r3, #-2] ++ ldrh r3, [r2, #140] ++ ldrb r2, [r4, #-2546] @ zero_extendqisi2 ++ mla r6, r1, r6, r3 ++ lsl r2, r2, #1 ++ mov r1, #0 ++ bl ftl_memset ++ ldr r3, [r4, #-76] ++ mov r2, #0 ++ str r2, [r3] ++ ldr r3, [r5, #2800] ++ ldrb r1, [r4, #-2546] @ zero_extendqisi2 ++ ldr r9, [r4, #-76] ++ ldr r3, [r3, #56] ++ ldr r0, [r4, #-44] ++ lsl r1, r1, #9 ++ str r3, [r9, #4] ++ bl js_hash ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ mov r1, r6 ++ str r0, [r9, #8] ++ uxtb r0, r8 ++ ldr r2, [r4, #-44] ++ str r3, [sp] ++ ldr r3, [r4, #-76] ++ bl ftl_prog_page ++ ldr r2, [r5, #2800] ++ ldrh r3, [r2, #140] ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmp r3, #1 ++ strh r3, [r2, #140] @ movhi ++ beq .L3051 ++ cmn r0, #1 ++ beq .L3052 ++ ldrb r0, [r4, #-46] @ zero_extendqisi2 ++ cmp r0, #0 ++ beq .L3053 ++.L3052: ++.L3048: ++ mov r3, #0 ++ strb r3, [r4, #-46] ++ b .L3051 ++.L3053: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, pc} ++.L3062: ++ .align 2 ++.L3061: ++ .word 1374389535 ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3096 ++ .word .LANCHOR1+2164 ++ .word .LC0 ++ .word .LANCHOR3-3072 ++ .fnend ++ .size ftl_ext_info_flush, .-ftl_ext_info_flush ++ .align 2 ++ .global ftl_ext_info_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_ext_info_init, %function ++ftl_ext_info_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r2, #0 ++ ldr r4, .L3083 ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r5, .L3083+4 ++ sub r3, r4, #2544 ++ strh r2, [r3, #-4] @ movhi ++ sub r2, r4, #3136 ++ ldr r3, [r5, #2800] ++ ldrh r2, [r2, #-2] ++ ldrh r6, [r3, #130] ++ ldrb r3, [r5, #1153] @ zero_extendqisi2 ++ rsb r3, r3, #24 ++ sub r3, r3, r2 ++ mvn r2, #0 ++ asr r7, r6, r3 ++ bic r6, r6, r2, lsl r3 ++ uxtb r10, r7 ++ mov r3, #4 ++ str r3, [sp] ++ mov r1, r6 ++ ldr r3, [r4, #-76] ++ mov r0, r10 ++ ldr r2, [r4, #-44] ++ bl flash_get_last_written_page ++ ldr r3, .L3083+8 ++ mov r8, r0 ++ ldr r2, [r3] ++ str r3, [sp, #8] ++ tst r2, #4096 ++ beq .L3064 ++ ldr r3, [r5, #2800] ++ uxth r7, r7 ++ mov r2, #2256 ++ ldr r1, .L3083+12 ++ ldrh r3, [r3, #130] ++ str r7, [sp] ++ str r3, [sp, #4] ++ mov r3, r0 ++ ldr r0, .L3083+16 ++ bl rk_printk ++.L3064: ++ ldr fp, .L3083+20 ++ mov r9, #0 ++.L3065: ++ uxth r7, r8 ++ sub r3, r7, r9 ++ tst r3, #32768 ++ bne .L3070 ++ ldr r3, .L3083+24 ++ sub r1, r8, r9 ++ ldrh r0, [r3] ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ mla r1, r6, r0, r1 ++ str r3, [sp] ++ ldr r3, [r4, #-76] ++ ldr r2, [r4, #-44] ++ mov r0, r10 ++ bl flash_read_page_en ++ cmp r0, #512 ++ cmnne r0, #1 ++ beq .L3066 ++ ldr r3, [r5, #1096] ++ ldr r2, .L3083+28 ++ ldr r3, [r3] ++ cmp r3, r2 ++ bne .L3066 ++ ldr r3, [r4, #-76] ++ ldr r3, [r3, #8] ++ cmp r3, #0 ++ bne .L3067 ++.L3070: ++ bl zftl_sblk_list_init ++ ldr r3, [r5, #2800] ++ ldrh r2, [r3, #140] ++ cmp r2, r8 ++ bgt .L3069 ++ add r7, r7, #1 ++ strh r7, [r3, #140] @ movhi ++ bl ftl_ext_info_flush ++.L3069: ++ ldr r4, [r5, #1096] ++ bl timer_get_time ++ ldr r3, .L3083+32 ++ umull r0, r1, r0, r3 ++ lsr r3, r1, #5 ++ str r3, [r4, #520] ++ ldr r4, [r5, #1096] ++ bl timer_get_time ++ ldr r3, [r5, #1096] ++ mov r2, #0 ++ str r0, [r4, #604] ++ add r1, r3, #584 ++ str r2, [r3, #608] ++ mvn r2, #0 ++ strh r2, [r1] @ movhi ++ movw r1, #586 ++ strh r2, [r3, r1] @ movhi ++ add r1, r3, #588 ++ strh r2, [r1] @ movhi ++ movw r1, #590 ++ strh r2, [r3, r1] @ movhi ++ movw r1, #65535 ++ str r2, [r3, #564] ++ ldr r2, [sp, #8] ++ str r1, [r3, #560] ++ ldr r2, [r2] ++ tst r2, #4096 ++ beq .L3072 ++ ldr r4, [r3, #520] ++ ldr r5, [r3, #12] ++ bl timer_get_time ++ mov r2, r4 ++ str r0, [sp] ++ mov r3, r5 ++ ldr r1, .L3083+12 ++ ldr r0, .L3083+36 ++ bl rk_printk ++.L3072: ++ ldr r3, .L3083+40 ++ mvn r2, #0 ++ mov r0, #0 ++ strh r2, [r3, #-4] @ movhi ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3067: ++ ldrb r1, [r4, #-2546] @ zero_extendqisi2 ++ ldr r0, [r4, #-44] ++ str r3, [sp, #12] ++ lsl r1, r1, #9 ++ bl js_hash ++ ldr r3, [sp, #12] ++ cmp r3, r0 ++ beq .L3070 ++ ldr r3, [r4, #-76] ++ mov r0, fp ++ ldr r1, [r3, #8] ++ bl rk_printk ++.L3066: ++ add r9, r9, #1 ++ b .L3065 ++.L3084: ++ .align 2 ++.L3083: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR1+2183 ++ .word .LC191 ++ .word .LC192 ++ .word .LANCHOR3-3074 ++ .word 1162432070 ++ .word 1374389535 ++ .word .LC193 ++ .word .LANCHOR3-3152 ++ .fnend ++ .size ftl_ext_info_init, .-ftl_ext_info_init ++ .align 2 ++ .global ftl_prog_ppa_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_prog_ppa_page, %function ++ftl_prog_ppa_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr ip, .L3087 ++ push {r0, r1, r2, r4, r5, lr} ++ .save {r4, r5, lr} ++ .pad #12 ++ ldrb r5, [ip, #1153] @ zero_extendqisi2 ++ mov ip, #1 ++ str r3, [sp] ++ mov r3, r2 ++ mov r2, r1 ++ rsb r4, r5, #24 ++ lsl lr, ip, r4 ++ lsl ip, ip, r5 ++ sub ip, ip, #1 ++ sub lr, lr, #1 ++ and ip, ip, r0, lsr r4 ++ and r1, lr, r0 ++ uxtb r0, ip ++ bl ftl_prog_page ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, pc} ++.L3088: ++ .align 2 ++.L3087: ++ .word .LANCHOR0 ++ .fnend ++ .size ftl_prog_ppa_page, .-ftl_prog_ppa_page ++ .align 2 ++ .global ftl_write_last_log_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_write_last_log_page, %function ++ftl_write_last_log_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldrh r3, [r0, #6] ++ cmp r3, #1 ++ bne .L3091 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r4, r0 ++ ldr r5, .L3097 ++ ldrh r8, [r0, #12] ++ ldr r6, [r5, #-2556] ++ bl ftl_get_new_free_page ++ cmn r0, #1 ++ mov r7, r0 ++ beq .L3092 ++ ldrh r0, [r4] ++ add r6, r6, r8, lsl #2 ++ bl ftl_vpn_decrement ++ ldr r3, [r5, #-40] ++ mov r0, r6 ++ ldr r2, .L3097+4 ++ str r2, [r3] ++ sub r3, r5, #3088 ++ ldrh r3, [r3, #-8] ++ ldrb r1, [r5, #-3127] @ zero_extendqisi2 ++ ldr r4, [r5, #-40] ++ mul r1, r1, r3 ++ lsl r1, r1, #2 ++ bl js_hash ++ ldr r1, [r5, #-40] ++ str r0, [r4, #4] ++ mov r4, #0 ++ mov r2, r4 ++ mov r0, #2 ++ str r4, [r1, #8] ++ str r4, [r1, #12] ++ str r4, [r1, #16]! ++ bl ftl_debug_info_fill ++ ldrb r3, [r5, #-2546] @ zero_extendqisi2 ++ mov r1, r6 ++ ldr r2, [r5, #-40] ++ mov r0, r7 ++ bl ftl_prog_ppa_page ++.L3092: ++ mov r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L3091: ++ mvn r0, #0 ++ bx lr ++.L3098: ++ .align 2 ++.L3097: ++ .word .LANCHOR3 ++ .word -178307901 ++ .fnend ++ .size ftl_write_last_log_page, .-ftl_write_last_log_page ++ .align 2 ++ .global ftl_dump_write_open_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_dump_write_open_sblk, %function ++ftl_dump_write_open_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 64 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #1080 ++ ldr r4, .L3138 ++ .pad #108 ++ sub sp, sp, #108 ++ ldrh r3, [r4, r3] ++ cmp r3, r0 ++ bls .L3099 ++ ldr r3, .L3138+4 ++ ldrb r2, [r3, #-3120] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L3101 ++ ldrb r2, [r3, #-3126] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3099 ++.L3101: ++ ldrb r2, [r4, #1158] @ zero_extendqisi2 ++ cmp r2, #0 ++ bne .L3099 ++ ldr r2, [r4, #1084] ++ lsl r7, r0, #2 ++ ldr r5, .L3138+8 ++ add r1, sp, #88 ++ mov r10, r0 ++ strh r0, [sp, #72] @ movhi ++ add r2, r2, r7 ++ mov r6, #0 ++ ldrb r2, [r2, #2] @ zero_extendqisi2 ++ and r2, r2, #224 ++ cmp r2, #160 ++ ldrbeq r8, [r3, #-3128] @ zero_extendqisi2 ++ movne r8, #1 ++ bl ftl_get_blk_list_in_sblk ++ ldrh r3, [r5, #-8] ++ uxtb r0, r0 ++ strh r6, [sp, #74] @ movhi ++ strb r0, [sp, #81] ++ strb r6, [sp, #77] ++ smulbb r0, r3, r0 ++ ldr r3, [r4, #1084] ++ strh r6, [sp, #82] @ movhi ++ strh r0, [sp, #78] @ movhi ++ add r2, r3, r7 ++ ldr r1, [r3, r10, lsl #2] ++ ldrb r2, [r2, #2] @ zero_extendqisi2 ++ ldr r0, .L3138+12 ++ ubfx r1, r1, #11, #8 ++ str r1, [sp, #4] ++ mov r1, r10 ++ ldrh r3, [r3, r7] ++ mov r7, r6 ++ ubfx r3, r3, #0, #11 ++ str r3, [sp] ++ ubfx r3, r2, #3, #2 ++ lsr r2, r2, #5 ++ bl rk_printk ++ mov r0, #1 ++ bl buf_alloc ++ mov r4, r0 ++ add r3, r5, #16 ++ str r6, [sp, #44] ++ str r3, [sp, #64] ++.L3103: ++ ldr r3, .L3138+16 ++ uxth r5, r6 ++ ldrh r3, [r3] ++ cmp r3, r5 ++ bls .L3111 ++ lsl r3, r5, #1 ++ str r5, [sp, #52] ++ mov fp, #0 ++ sub r2, r3, #1 ++ add r3, r3, r5 ++ sub r3, r3, #1 ++ str r2, [sp, #48] ++ str r3, [sp, #56] ++ b .L3114 ++.L3112: ++ ldr r2, [sp, #60] ++ add r3, sp, #104 ++ add r3, r3, r2 ++ ldrh r3, [r3, #-32] ++ str r3, [sp, #40] ++ movw r3, #65535 ++ ldr r2, [sp, #40] ++ cmp r2, r3 ++ bne .L3104 ++.L3110: ++ add r7, r7, #1 ++ uxth r7, r7 ++.L3105: ++ cmp r8, r7 ++ bcs .L3112 ++ add fp, fp, #1 ++.L3114: ++ uxth r3, fp ++ uxth r2, fp ++ str r3, [sp, #44] ++ ldrb r3, [sp, #81] @ zero_extendqisi2 ++ cmp r3, r2 ++ bls .L3113 ++ mov r7, #1 ++ add r3, r2, #8 ++ lsl r3, r3, r7 ++ str r3, [sp, #60] ++ b .L3105 ++.L3104: ++ ldr r3, [sp, #64] ++ cmp r8, #3 ++ ldr r2, [sp, #40] ++ ldrh r3, [r3, #-2] ++ mul r3, r2, r3 ++ bne .L3106 ++ ldr r2, .L3138 ++ ldrb r2, [r2, #1159] @ zero_extendqisi2 ++ cmp r2, #0 ++ uxtaheq r3, r3, r6 ++ ldrne r2, [sp, #56] ++ orreq r3, r3, r7, lsl #24 ++ beq .L3108 ++.L3137: ++ add r3, r2, r3 ++ ldr r2, .L3138+4 ++ add r3, r3, r7 ++ ldrb r2, [r2, #-3128] @ zero_extendqisi2 ++ orr r3, r3, r2, lsl #24 ++.L3108: ++ str r3, [r4, #24] ++ mov r1, #1 ++ mov r0, r4 ++ str r3, [sp, #68] ++ bl sblk_read_page ++ ldr r9, [r4, #36] ++ ldr r3, [sp, #68] ++ cmn r9, #1 ++ cmpne r9, #512 ++ bne .L3110 ++ ldr r1, [r4, #12] ++ ldr r2, [r4, #4] ++ ldr r0, [r1, #12] ++ str r0, [sp, #32] ++ ldr r0, [r1, #8] ++ str r0, [sp, #28] ++ ldr r0, [r1, #4] ++ str r0, [sp, #24] ++ ldr r1, [r1] ++ ldr r0, .L3138+20 ++ str r1, [sp, #20] ++ ldr r1, [r2, #12] ++ str r1, [sp, #16] ++ ldr r1, [r2, #8] ++ str r1, [sp, #12] ++ ldr r1, [r2, #4] ++ str r1, [sp, #8] ++ ldr r2, [r2] ++ ldr r1, [sp, #40] ++ str r9, [sp] ++ str r2, [sp, #4] ++ ldr r2, [sp, #52] ++ bl rk_printk ++ cmp r9, #512 ++ bne .L3110 ++.L3111: ++ uxth r2, r6 ++ ldr r6, .L3138+4 ++ ldr r3, [sp, #44] ++ mov r1, r10 ++ str r7, [sp] ++ ldr r0, .L3138+24 ++ bl rk_printk ++ ldrb r2, [r6, #-2546] @ zero_extendqisi2 ++ mov r1, #0 ++ ldr r0, [r4, #4] ++ ldr fp, .L3138+28 ++ lsl r2, r2, #9 ++ bl ftl_memset ++ ldrb r2, [r6, #-2546] @ zero_extendqisi2 ++ mov r1, #0 ++ ldr r0, [r4, #12] ++ lsl r2, r2, #1 ++ bl ftl_memset ++.L3115: ++ ldr r7, .L3138+16 ++ ldrh r3, [r7] ++ cmp r3, r5 ++ bls .L3121 ++ lsl r3, r5, #1 ++ mov r8, #0 ++ ldr r9, .L3138+32 ++ add r7, r7, #24 ++ str r3, [sp, #40] ++ b .L3122 ++.L3106: ++ cmp r8, #2 ++ uxtahne r3, r3, r6 ++ bne .L3108 ++ ldr r2, [sp, #48] ++ b .L3137 ++.L3113: ++ add r6, r6, #1 ++ b .L3103 ++.L3120: ++ ldr r3, [fp] ++ tst r3, #4096 ++ uxth r3, r8 ++ beq .L3116 ++ mov r2, r3 ++ mov r1, r5 ++ mov r0, r9 ++ str r3, [sp, #44] ++ bl rk_printk ++ ldr r3, [sp, #44] ++.L3116: ++ ldrb r2, [r6, #-3120] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3117 ++ add r2, sp, #104 ++ mov r0, r4 ++ add r3, r2, r3, lsl #1 ++ ldrh r2, [r3, #-16] ++ ldrh r3, [r7, #-2] ++ mul r3, r3, r2 ++ orr r3, r3, r5 ++ str r3, [r4, #24] ++ bl sblk_3d_tlc_dump_prog ++.L3118: ++ add r8, r8, #1 ++.L3122: ++ ldrb r2, [sp, #81] @ zero_extendqisi2 ++ uxth r3, r8 ++ cmp r2, r3 ++ bhi .L3120 ++ add r5, r5, #1 ++ uxth r5, r5 ++ b .L3115 ++.L3117: ++ ldrb r1, [r6, #-3128] @ zero_extendqisi2 ++ cmp r1, #2 ++ bne .L3119 ++ add r2, sp, #104 ++ mov r0, r4 ++ add r3, r2, r3, lsl #1 ++ ldrh r2, [r3, #-16] ++ ldrh r3, [r7, #-2] ++ mul r3, r3, r2 ++ ldr r2, [sp, #40] ++ orr r3, r3, r2 ++ orr r3, r3, #33554432 ++ str r3, [r4, #24] ++ bl sblk_mlc_dump_prog ++ b .L3118 ++.L3119: ++ add r1, sp, #104 ++ ldrh ip, [r7, #-2] ++ add r3, r1, r3, lsl #1 ++ ldrh r1, [r3, #-16] ++ ldr r3, .L3138 ++ mul ip, ip, r1 ++ ldrb r1, [r3, #1153] @ zero_extendqisi2 ++ mvn r3, #0 ++ rsb lr, r1, #24 ++ orr ip, ip, r5 ++ mvn r1, r3, lsl r1 ++ str ip, [r4, #24] ++ str r2, [sp, #4] ++ and r0, r1, ip, lsr lr ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ bic r1, ip, r1, lsl lr ++ uxtb r0, r0 ++ str r3, [sp] ++ ldr r3, [r4, #12] ++ ldr r2, [r4, #4] ++ bl flash_prog_page_en ++ b .L3118 ++.L3121: ++ mov r0, r4 ++ bl zbuf_free ++ mov r1, r10 ++ ldr r0, .L3138+36 ++ bl rk_printk ++.L3099: ++ add sp, sp, #108 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3139: ++ .align 2 ++.L3138: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3088 ++ .word .LC194 ++ .word .LANCHOR3-3096 ++ .word .LC195 ++ .word .LC196 ++ .word .LANCHOR2 ++ .word .LC197 ++ .word .LC198 ++ .fnend ++ .size ftl_dump_write_open_sblk, .-ftl_dump_write_open_sblk ++ .align 2 ++ .global gc_ink_check_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_ink_check_sblk, %function ++gc_ink_check_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ movw r3, #2106 ++ ldr r4, .L3169 ++ ldr r5, .L3169+4 ++ ldrh r2, [r4, r3] ++ ldr r6, [r5, #904] ++ cmp r2, #3 ++ ldrls pc, [pc, r2, asl #2] ++ b .L3141 ++.L3143: ++ .word .L3142 ++ .word .L3144 ++ .word .L3145 ++ .word .L3146 ++.L3142: ++ ldr r8, .L3169+8 ++ movw r3, #2788 ++ ldrh r3, [r8, r3] ++ cmp r3, #7 ++ bls .L3140 ++ ldrb r3, [r8, #2769] @ zero_extendqisi2 ++ cmp r3, #2 ++ bls .L3140 ++ ldr r7, .L3169+12 ++ mov r1, #0 ++ movw r9, #65535 ++ sub r6, r7, #3072 ++ sub r6, r6, #8 ++ mov r0, r6 ++ bl _list_get_gc_head_node ++ cmp r0, r9 ++ beq .L3140 ++ ldr r3, [r8, #1084] ++ lsl r0, r0, #2 ++ ldrh r3, [r3, r0] ++ ubfx r3, r3, #0, #11 ++ cmp r3, #2 ++ bgt .L3140 ++ mov r0, #1 ++ bl buf_alloc ++ cmp r0, #0 ++ str r0, [r5, #904] ++ beq .L3140 ++ mov r0, r6 ++ ldr r2, .L3169+16 ++ mov r1, #0 ++ bl _list_pop_index_node ++ uxth r10, r0 ++ mov r6, r0 ++ cmp r10, r9 ++ bne .L3150 ++ ldr r0, [r5, #904] ++ bl zbuf_free ++ mov r3, #0 ++ str r3, [r5, #904] ++.L3140: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3150: ++ add r1, r4, #2144 ++ mov r0, r10 ++ add r1, r1, #14 ++ uxth r6, r6 ++ bl ftl_get_blk_list_in_sblk ++ movw r3, #2142 ++ mov r2, #0 ++ strh r10, [r4, r3] @ movhi ++ add r3, r4, #2144 ++ strh r2, [r3] @ movhi ++ mov r2, #1 ++ movw r3, #2106 ++ lsl r6, r6, #2 ++ strh r2, [r4, r3] @ movhi ++ ldr r3, [r8, #1084] ++ strb r0, [r5, #879] ++ ldrb r2, [r7, #-2546] @ zero_extendqisi2 ++ ldrh r3, [r3, r6] ++ tst r3, #1 ++ ldr r3, [r5, #904] ++ lsl r2, r2, #9 ++ movne r1, #85 ++ moveq r1, #170 ++ ldr r0, [r3, #4] ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ b ftl_memset ++.L3144: ++ movw r3, #2142 ++ mov r1, #0 ++ ldrh r0, [r4, r3] ++ bl ftl_erase_sblk ++ mov r2, #2 ++.L3168: ++ movw r3, #2106 ++.L3166: ++ strh r2, [r4, r3] @ movhi ++ b .L3140 ++.L3145: ++ ldr r8, .L3169+12 ++ mov r7, #0 ++ ldr r10, .L3169+20 ++ bl sblk_wait_write_queue_completed ++ sub r9, r8, #3072 ++.L3152: ++ ldrb r2, [r5, #879] @ zero_extendqisi2 ++ uxth r3, r7 ++ cmp r2, r3 ++ bhi .L3154 ++ add r2, r4, #2144 ++ ldr r1, .L3169+24 ++ ldrh r3, [r2] ++ ldrh r1, [r1, #-8] ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmp r1, r3 ++ strh r3, [r2] @ movhi ++ bhi .L3140 ++ mov r3, #0 ++ strh r3, [r2] @ movhi ++ mov r2, #3 ++ b .L3168 ++.L3154: ++ uxth r2, r7 ++ add r3, r4, #2128 ++ add r3, r3, #14 ++ add r3, r3, r2, lsl #1 ++ ldrh r1, [r3, #16] ++ movw r3, #65535 ++ cmp r1, r3 ++ beq .L3153 ++ add r3, r4, #2144 ++ ldrh ip, [r9, #-2] ++ ldrh r3, [r3] ++ mla ip, r1, ip, r3 ++ ldr r3, [r6, #4] ++ str ip, [r3] ++ ldr r3, [r6, #4] ++ str r10, [r3, #4] ++ mov r3, #0 ++ ldr r2, [r6, #12] ++ str r3, [r2] ++ ldr r2, .L3169+8 ++ ldrb r1, [r2, #1153] @ zero_extendqisi2 ++ mvn r2, #0 ++ str r3, [sp, #4] ++ ldrb r3, [r8, #-2546] @ zero_extendqisi2 ++ rsb lr, r1, #24 ++ mvn r1, r2, lsl r1 ++ str r3, [sp] ++ and r0, r1, ip, lsr lr ++ ldr r3, [r6, #12] ++ ldr r2, [r6, #4] ++ bic r1, ip, r1, lsl lr ++ uxtb r0, r0 ++ bl flash_prog_page_en ++.L3153: ++ add r7, r7, #1 ++ b .L3152 ++.L3146: ++ add r10, r4, #2128 ++ mov r9, #0 ++ add r10, r10, #14 ++ bl sblk_wait_write_queue_completed ++.L3155: ++ ldrb r2, [r5, #879] @ zero_extendqisi2 ++ uxth r3, r9 ++ cmp r2, r3 ++ bhi .L3159 ++ add r2, r4, #2144 ++ ldrh r3, [r2] ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r3, [r2] @ movhi ++ ldr r2, .L3169+24 ++ ldrh r2, [r2, #-8] ++ cmp r2, r3 ++ bhi .L3140 ++ movw r3, #2106 ++ mov r6, #0 ++ ldr r0, [r5, #904] ++ strh r6, [r4, r3] @ movhi ++ bl zbuf_free ++ movw r2, #2108 ++ str r6, [r5, #904] ++ ldrh r3, [r4, r2] ++ cmp r3, #15 ++ bhi .L3160 ++ add r1, r3, #1 ++ add r3, r3, #1040 ++ strh r1, [r4, r2] @ movhi ++ movw r2, #2142 ++ add r3, r3, #12 ++ ldrh r2, [r4, r2] ++ add r3, r4, r3, lsl #1 ++ strh r2, [r3, #6] @ movhi ++.L3161: ++ movw r3, #2108 ++ ldr r0, .L3169+28 ++ ldrh r2, [r4, r3] ++ movw r3, #2142 ++ ldrh r1, [r4, r3] ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, lr} ++ b rk_printk ++.L3159: ++ uxth r7, r9 ++ movw r2, #65535 ++ add r7, r7, #8 ++ lsl r7, r7, #1 ++ ldrh r3, [r10, r7] ++ cmp r3, r2 ++ beq .L3157 ++ ldr r2, .L3169+32 ++ mov r1, #1 ++ mov r0, r6 ++ ldrh r8, [r2] ++ add r2, r4, #2144 ++ ldrh r2, [r2] ++ mla r8, r3, r8, r2 ++ str r8, [r6, #24] ++ bl sblk_read_page ++ ldr r3, [r6, #4] ++ ldr r3, [r3] ++ cmp r8, r3 ++ beq .L3157 ++ mov r0, r8 ++ bl ftl_mask_bad_block ++ mvn r3, #0 ++ strh r3, [r10, r7] @ movhi ++.L3157: ++ add r9, r9, #1 ++ b .L3155 ++.L3160: ++ movw r3, #2142 ++ ldrh r0, [r4, r3] ++ bl zftl_insert_free_list ++ b .L3161 ++.L3141: ++ mov r2, #0 ++ b .L3166 ++.L3170: ++ .align 2 ++.L3169: ++ .word .LANCHOR0+2824 ++ .word .LANCHOR0+4096 ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR0+2788 ++ .word 1437269760 ++ .word .LANCHOR3-3088 ++ .word .LC199 ++ .word .LANCHOR3-3074 ++ .fnend ++ .size gc_ink_check_sblk, .-gc_ink_check_sblk ++ .align 2 ++ .global ftl_ink_check_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_ink_check_sblk, %function ++ftl_ink_check_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ lsl r9, r0, #2 ++ ldr r6, .L3190 ++ mov r5, r0 ++ mov r1, r0 ++ .pad #52 ++ sub sp, sp, #52 ++ ldr r2, [r6, #1084] ++ ldr r3, [r2, r0, lsl #2] ++ ldrh r2, [r2, r9] ++ ldr r0, .L3190+4 ++ ubfx r3, r3, #11, #8 ++ ubfx r2, r2, #0, #11 ++ bl rk_printk ++ movw r3, #65535 ++ cmp r5, r3 ++ beq .L3171 ++ movw r3, #1080 ++ ldrh r3, [r6, r3] ++ cmp r3, r5 ++ bls .L3171 ++ mov r1, #0 ++ mov r0, r5 ++ bl ftl_erase_sblk ++ mov r0, r5 ++ add r1, sp, #32 ++ strh r5, [sp, #16] @ movhi ++ mov r8, #0 ++ bl ftl_get_blk_list_in_sblk ++ strb r0, [sp, #25] ++ mov r0, #1 ++ bl buf_alloc ++ ldr r3, [r6, #1084] ++ mov r4, r0 ++ ldr r10, .L3190+8 ++ ldr fp, .L3190+12 ++ ldrh r3, [r3, r9] ++ ldrb r2, [r10, #-2546] @ zero_extendqisi2 ++ ldr r0, [r0, #4] ++ ubfx r3, r3, #0, #11 ++ cmp r3, #1 ++ lsl r2, r2, #9 ++ movle r1, #85 ++ movgt r1, #170 ++ bl ftl_memset ++ bl sblk_wait_write_queue_completed ++.L3175: ++ ldr r3, .L3190+16 ++ ldrh r2, [r3] ++ uxth r3, r8 ++ cmp r2, r3 ++ bls .L3178 ++ mov r7, #0 ++ b .L3179 ++.L3177: ++ uxth r3, r7 ++ add r2, sp, #48 ++ add r3, r2, r3, lsl #1 ++ ldrh r1, [r3, #-16] ++ movw r3, #65535 ++ cmp r1, r3 ++ beq .L3176 ++ ldr r3, .L3190+20 ++ ldrh ip, [r3] ++ uxth r3, r8 ++ mla ip, r1, ip, r3 ++ ldr r3, [r4, #4] ++ str ip, [r3] ++ ldr r3, [r4, #4] ++ str fp, [r3, #4] ++ mov r3, #0 ++ ldr r2, [r4, #12] ++ str r3, [r2] ++ mvn r2, #0 ++ ldrb r1, [r6, #1153] @ zero_extendqisi2 ++ str r3, [sp, #4] ++ ldrb r3, [r10, #-2546] @ zero_extendqisi2 ++ rsb lr, r1, #24 ++ mvn r1, r2, lsl r1 ++ str r3, [sp] ++ and r0, r1, ip, lsr lr ++ ldr r3, [r4, #12] ++ ldr r2, [r4, #4] ++ bic r1, ip, r1, lsl lr ++ uxtb r0, r0 ++ bl flash_prog_page_en ++.L3176: ++ add r7, r7, #1 ++.L3179: ++ ldrb r2, [sp, #25] @ zero_extendqisi2 ++ uxth r3, r7 ++ cmp r2, r3 ++ bhi .L3177 ++ add r8, r8, #1 ++ b .L3175 ++.L3178: ++ mov r10, #0 ++.L3180: ++ ldr r3, .L3190+24 ++ uxth r2, r10 ++ ldrh r1, [r3, #-8] ++ cmp r1, r2 ++ bls .L3185 ++ mov fp, #0 ++ str r2, [sp, #12] ++ b .L3186 ++.L3184: ++ uxth r7, fp ++ add r3, sp, #48 ++ add r7, r7, #8 ++ add r7, r3, r7, lsl #1 ++ movw r3, #65535 ++ ldrh r1, [r7, #-32] ++ cmp r1, r3 ++ beq .L3182 ++ ldr r0, .L3190+20 ++ ldr r3, [sp, #12] ++ ldrh r8, [r0] ++ mov r0, r4 ++ mla r8, r1, r8, r3 ++ mov r1, #1 ++ str r8, [r4, #24] ++ bl sblk_read_page ++ ldr r1, [r4, #4] ++ ldr r1, [r1] ++ cmp r8, r1 ++ beq .L3182 ++ mov r0, r8 ++ bl ftl_mask_bad_block ++ mvn r1, #0 ++ strh r1, [r7, #-32] @ movhi ++.L3182: ++ add fp, fp, #1 ++.L3186: ++ ldrb r0, [sp, #25] @ zero_extendqisi2 ++ uxth r1, fp ++ cmp r0, r1 ++ bhi .L3184 ++ add r10, r10, #1 ++ b .L3180 ++.L3185: ++ mov r0, r4 ++ bl zbuf_free ++ ldr r2, [r6, #1084] ++ mov r1, r5 ++ ldr r0, .L3190+28 ++ ldr r3, [r2, r5, lsl #2] ++ ldrh r2, [r2, r9] ++ ubfx r3, r3, #11, #8 ++ ubfx r2, r2, #0, #11 ++ bl rk_printk ++.L3171: ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3191: ++ .align 2 ++.L3190: ++ .word .LANCHOR0 ++ .word .LC200 ++ .word .LANCHOR3 ++ .word 1437269760 ++ .word .LANCHOR3-3096 ++ .word .LANCHOR3-3074 ++ .word .LANCHOR3-3088 ++ .word .LC201 ++ .fnend ++ .size ftl_ink_check_sblk, .-ftl_ink_check_sblk ++ .align 2 ++ .global ftl_alloc_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_alloc_sblk, %function ++ftl_alloc_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ uxth r5, r0 ++ cmp r0, #5 ++ mov r9, r0 ++ mov r1, r5 ++ mov r0, #0 ++ movne r8, #0 ++ moveq r8, #2 ++ bl zftl_get_free_sblk ++ movw r3, #65535 ++ mov r4, r0 ++ cmp r0, r3 ++ beq .L3194 ++ ldr r6, .L3212 ++ lsl r7, r0, #2 ++ ldr r5, [r6, #1084] ++ add r5, r5, r7 ++ ldrb r3, [r5, #2] @ zero_extendqisi2 ++ tst r3, #224 ++ beq .L3195 ++ mov r2, #1012 ++ ldr r1, .L3212+4 ++ ldr r0, .L3212+8 ++ bl rk_printk ++ bl dump_stack ++.L3195: ++ ldrb r3, [r5, #2] @ zero_extendqisi2 ++ bfi r3, r9, #5, #3 ++ uxtb r3, r3 ++ ubfx r2, r3, #3, #2 ++ orr r2, r8, r2 ++ bfi r3, r2, #3, #2 ++ clz r2, r8 ++ strb r3, [r5, #2] ++ uxtb r3, r3 ++ lsr r2, r2, #5 ++ and r1, r3, #24 ++ cmp r1, #24 ++ cmpeq r8, #0 ++ moveq r1, #1 ++ bfieq r3, r1, #3, #2 ++ strbeq r3, [r5, #2] ++ ldr r3, [r6, #2800] ++ ldrh r3, [r3, #150] ++ cmp r3, #0 ++ beq .L3197 ++ ldr r3, [r6, #1084] ++ ldrh r3, [r3, r7] ++ ubfx r3, r3, #0, #11 ++ cmp r3, #0 ++ movne r2, #0 ++ andeq r2, r2, #1 ++ cmp r2, #0 ++ beq .L3197 ++ mov r0, r4 ++ bl ftl_ink_check_sblk ++.L3197: ++ mov r0, r4 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3194: ++ bl print_ftl_debug_info ++ mov r2, r9 ++ mov r1, r4 ++ ldr r0, .L3212+12 ++ bl rk_printk ++ mov r1, r5 ++ mov r0, #0 ++ bl zftl_get_free_sblk ++ mov r2, r9 ++ mov r1, r0 ++ mov r4, r0 ++ ldr r0, .L3212+12 ++ bl rk_printk ++ bl dump_all_list_info ++ movw r2, #1031 ++ ldr r1, .L3212+4 ++ ldr r0, .L3212+8 ++ bl rk_printk ++ bl dump_stack ++ b .L3197 ++.L3213: ++ .align 2 ++.L3212: ++ .word .LANCHOR0 ++ .word .LANCHOR1+2201 ++ .word .LC0 ++ .word .LC202 ++ .fnend ++ .size ftl_alloc_sblk, .-ftl_alloc_sblk ++ .align 2 ++ .global ftl_open_sblk_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_open_sblk_init, %function ++ftl_open_sblk_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, r0 ++ ldr r5, .L3222 ++ mov r6, r1 ++ mov r7, #0 ++ sub r8, r5, #3088 ++.L3215: ++ movw r10, #65535 ++.L3216: ++ mov r0, r6 ++ bl ftl_alloc_sblk ++ cmp r0, r10 ++ mov r9, r0 ++ beq .L3216 ++ mov r1, #0 ++ ldr fp, .L3222+4 ++ bl ftl_erase_sblk ++ add r1, r4, #16 ++ mov r0, r9 ++ bl ftl_get_blk_list_in_sblk ++ strh r9, [r4] @ movhi ++ cmp r6, #2 ++ ldrh r2, [r8, #-8] ++ uxtb r0, r0 ++ ldrbne r3, [r5, #-3127] @ zero_extendqisi2 ++ moveq r3, #0 ++ ldrb r1, [r5, #-3127] @ zero_extendqisi2 ++ lsl r10, r9, #1 ++ strb r0, [r4, #9] ++ smulbb r0, r0, r2 ++ strh r7, [r4, #2] @ movhi ++ smulbbne r3, r3, r2 ++ strb r7, [r4, #5] ++ mul r2, r2, r1 ++ strh r7, [r4, #10] @ movhi ++ strh r0, [r4, #6] @ movhi ++ mov r1, #255 ++ ldr r0, [r5, #-2556] ++ uxthne r3, r3 ++ strb r6, [r4, #4] ++ strh r3, [r4, #12] @ movhi ++ lsl r2, r2, #2 ++ add r0, r0, r3, lsl #2 ++ bl ftl_memset ++ ldr r3, [fp, #1092] ++ ldrh r2, [r4, #6] ++ strh r2, [r3, r10] @ movhi ++ ldrb r3, [r4, #9] @ zero_extendqisi2 ++ cmp r3, #0 ++ popne {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++ mov r1, r9 ++ ldr r0, .L3222+8 ++ bl rk_printk ++ ldr r3, [fp, #1092] ++ mvn r2, #0 ++ strh r2, [r3, r10] @ movhi ++ mov r3, #7 ++ strb r3, [r4, #4] ++ b .L3215 ++.L3223: ++ .align 2 ++.L3222: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LC203 ++ .fnend ++ .size ftl_open_sblk_init, .-ftl_open_sblk_init ++ .align 2 ++ .global pm_alloc_new_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_alloc_new_blk, %function ++pm_alloc_new_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ .pad #8 ++ movw r1, #690 ++ ldr r4, .L3242 ++ ldr r7, .L3242+4 ++ ldr r2, [r4, #2800] ++ ldrh r3, [r2, r1] ++ add r3, r3, #1 ++ uxth r3, r3 ++ strh r3, [r2, r1] @ movhi ++ ldrb r1, [r7, #-3127] @ zero_extendqisi2 ++ cmp r1, r3 ++ bls .L3225 ++ add r3, r3, #336 ++ lsl r3, r3, #1 ++ ldrh r2, [r2, r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3226 ++.L3225: ++ ldr r5, .L3242+8 ++ movw r8, #65535 ++.L3227: ++ mov r0, #1 ++ bl ftl_alloc_sblk ++ cmp r0, r8 ++ mov r6, r0 ++ beq .L3227 ++ mov r1, #0 ++ bl ftl_erase_sblk ++ ldr r1, [r4, #2800] ++ mov r0, r6 ++ add r1, r1, #672 ++ bl ftl_get_blk_list_in_sblk ++ uxth r0, r0 ++ cmp r0, #0 ++ bne .L3228 ++ mov r1, r6 ++ mov r0, r5 ++ bl rk_printk ++ ldr r3, [r4, #1084] ++ add r6, r3, r6, lsl #2 ++ ldrb r3, [r6, #2] @ zero_extendqisi2 ++ orr r3, r3, #224 ++ strb r3, [r6, #2] ++ b .L3227 ++.L3228: ++ ldr r2, [r4, #2800] ++ movw r3, #690 ++ mov r5, #0 ++ movw r1, #65535 ++ strh r5, [r2, r3] @ movhi ++ add r2, r2, #416 ++ mov r3, #1 ++ str r3, [r7, #-36] ++.L3230: ++ ldrh r0, [r2], #2 ++ uxth r3, r5 ++ cmp r0, r1 ++ beq .L3229 ++ add r5, r5, #1 ++ cmp r5, #128 ++ bne .L3230 ++ mov r2, #264 ++ ldr r1, .L3242+12 ++ ldr r0, .L3242+16 ++ bl rk_printk ++ bl dump_stack ++ mov r3, r5 ++.L3229: ++ ldr r2, [r4, #2800] ++ add r3, r3, #208 ++ lsl r3, r3, #1 ++ strh r6, [r2, r3] @ movhi ++ add r3, r2, #688 ++ ldrh r2, [r3] ++ add r2, r2, #1 ++ strh r2, [r3] @ movhi ++.L3226: ++ ldr r2, [r4, #2800] ++ movw r3, #690 ++ ldrh r3, [r2, r3] ++ add r3, r3, #336 ++ lsl r3, r3, #1 ++ ldrh r5, [r2, r3] ++ movw r2, #65533 ++ sub r3, r5, #1 ++ uxth r3, r3 ++ cmp r3, r2 ++ bls .L3232 ++ movw r2, #270 ++ ldr r1, .L3242+12 ++ ldr r0, .L3242+16 ++ bl rk_printk ++ bl dump_stack ++.L3232: ++ ldr r1, [r4, #2800] ++ mov r2, #0 ++ movw r0, #694 ++ add r3, r1, #696 ++ strh r2, [r3] @ movhi ++ ldr r3, .L3242+20 ++ ldrb r2, [r4, #1153] @ zero_extendqisi2 ++ ldrh r3, [r3, #-2] ++ rsb r2, r2, #24 ++ sub r2, r2, r3 ++ asr r3, r5, r2 ++ strh r3, [r1, r0] @ movhi ++ add r1, r1, #692 ++ strh r5, [r1] @ movhi ++ ldr r1, .L3242+24 ++ ldr r1, [r1] ++ tst r1, #4096 ++ beq .L3236 ++ uxth r3, r3 ++ mvn r1, #0 ++ mvn r2, r1, lsl r2 ++ ldr r0, .L3242+28 ++ str r3, [sp] ++ mov r1, r5 ++ mov r3, r5 ++ bl rk_printk ++.L3236: ++ mov r0, #0 ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L3243: ++ .align 2 ++.L3242: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LC203 ++ .word .LANCHOR1+2216 ++ .word .LC0 ++ .word .LANCHOR3-3136 ++ .word .LANCHOR2 ++ .word .LC204 ++ .fnend ++ .size pm_alloc_new_blk, .-pm_alloc_new_blk ++ .align 2 ++ .global pm_write_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_write_page, %function ++pm_write_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ mov r5, r0 ++ ldr r9, .L3258 ++ mov r8, r1 ++ mov r7, r9 ++.L3245: ++ ldr r3, [r9, #2800] ++ ldr r2, [r3, #48] ++ add r2, r2, #1 ++ str r2, [r3, #48] ++ add r2, r3, #696 ++ ldrh r1, [r2] ++ ldr r2, .L3258+4 ++ ldrh r2, [r2] ++ cmp r1, r2 ++ bcs .L3246 ++ add r3, r3, #692 ++ ldrh r2, [r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3247 ++.L3246: ++ bl pm_alloc_new_blk ++ mov r0, #0 ++ bl ftl_info_flush ++.L3247: ++ ldr r3, [r7, #2800] ++ add r3, r3, #692 ++ ldrh r2, [r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3248 ++ movw r2, #303 ++ ldr r1, .L3258+8 ++ ldr r0, .L3258+12 ++ bl rk_printk ++ bl dump_stack ++.L3248: ++ ldr r3, [r7, #2800] ++ mov r1, #0 ++ ldr r4, .L3258+16 ++ add r2, r3, #692 ++ add r3, r3, #696 ++ ldrh r6, [r2] ++ sub r2, r4, #3072 ++ ldrh r2, [r2, #-2] ++ ldrh r3, [r3] ++ ldr r0, [r4, #-32] ++ mla r6, r2, r6, r3 ++ mov r2, #64 ++ bl ftl_memset ++ ldr r3, [r4, #-32] ++ mov r0, r8 ++ str r5, [r3] ++ ldr r3, [r7, #2800] ++ ldrb r1, [r4, #-2546] @ zero_extendqisi2 ++ ldr r10, [r4, #-32] ++ ldr r3, [r3, #48] ++ lsl r1, r1, #9 ++ str r3, [r10, #4] ++ bl js_hash ++ ldr r3, [r7, #2800] ++ mov r2, r8 ++ str r0, [r10, #8] ++ mov r1, r6 ++ ldrb r0, [r3, #694] @ zero_extendqisi2 ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ str r3, [sp] ++ ldr r3, [r4, #-32] ++ bl ftl_prog_page ++ ldr r2, [r7, #2800] ++ add r1, r2, #696 ++ ldrh r3, [r1] ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmp r3, #1 ++ strh r3, [r1] @ movhi ++ beq .L3249 ++ ldrb r3, [r4, #-28] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3250 ++.L3249: ++ mov r3, #0 ++ strb r3, [r4, #-28] ++ b .L3245 ++.L3250: ++ cmn r0, #1 ++ bne .L3252 ++ mov r1, r6 ++ ldr r0, .L3258+20 ++ bl rk_printk ++ b .L3245 ++.L3252: ++ movw r3, #698 ++ mov r0, #0 ++ ldrh r3, [r2, r3] ++ cmp r5, r3 ++ addcc r5, r5, #176 ++ strcc r6, [r2, r5, lsl #2] ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3259: ++ .align 2 ++.L3258: ++ .word .LANCHOR0 ++ .word .LANCHOR3-3096 ++ .word .LANCHOR1+2233 ++ .word .LC0 ++ .word .LANCHOR3 ++ .word .LC205 ++ .fnend ++ .size pm_write_page, .-pm_write_page ++ .align 2 ++ .global flash_info_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_info_flush, %function ++flash_info_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3273 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #20 ++ sub sp, sp, #20 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L3261 ++ ldr r2, .L3273+4 ++ movw r1, #365 ++ ldr r0, .L3273+8 ++ bl rk_printk ++.L3261: ++ ldr r4, .L3273+12 ++ mov r2, #64 ++ ldr r5, .L3273+16 ++ mov r1, #0 ++ ldr r9, .L3273+20 ++ mov r7, #0 ++ ldr r0, [r4, #-24] ++ mov r10, r7 ++ bl ftl_memset ++ mov r3, #16 ++ mov r2, #4 ++ ldr r1, [r5, #1040] ++ ldr r0, .L3273+24 ++ bl rknand_print_hex ++ ldr r8, .L3273+28 ++ ldr r6, [r5, #1040] ++ ldr r1, [r6, #8] ++ add r0, r6, #16 ++ bl js_hash ++ str r0, [r6, #12] ++.L3262: ++ ldrb r6, [r4, #-20] @ zero_extendqisi2 ++ mov r0, r9 ++ ldrh fp, [r4, #-18] ++ ldrh r3, [r5, #2] ++ mov r1, r6 ++ mov r2, fp ++ str r3, [sp, #12] ++ bl rk_printk ++ ldrh r2, [r4, #-224] ++ ldrh r0, [r4, #-18] ++ ldr r3, [sp, #12] ++ sub r2, r2, #1 ++ cmp r0, r2 ++ blt .L3263 ++ ldr r6, [r5, #1040] ++ ldrb r2, [r4, #-19] @ zero_extendqisi2 ++ strh r10, [r4, #-18] @ movhi ++ ldr r3, [r6, #4] ++ mov r0, r6 ++ add r3, r3, #1 ++ str r3, [r6, #4] ++ ldrb r3, [r4, #-20] @ zero_extendqisi2 ++ strb r2, [r4, #-20] ++ strb r3, [r4, #-19] ++ ldrh r3, [r6, #16] ++ add r3, r3, #1 ++ strh r3, [r0, #16]! @ movhi ++ ldr r1, [r6, #8] ++ bl js_hash ++ ldrb r3, [r4, #-20] @ zero_extendqisi2 ++ str r0, [r6, #12] ++ mov r0, #0 ++ ldrh r6, [r5, #2] ++ mul r6, r6, r3 ++ mov r1, r6 ++.L3272: ++ bl flash_erase_block ++.L3264: ++ ldr r2, [r5, #1040] ++ mov fp, #1 ++ ldr r3, [r4, #-24] ++ mov r1, r6 ++ mov r0, #0 ++ ldr r2, [r2, #4] ++ str r2, [r3] ++ mov r2, #4 ++ ldr r3, [r4, #-24] ++ str r8, [r3, #4] ++ stm sp, {r2, fp} ++ ldr r2, [r5, #1040] ++ bl flash_prog_page_en ++ ldrh r3, [r4, #-18] ++ cmn r0, #1 ++ add r3, r3, fp ++ strh r3, [r4, #-18] @ movhi ++ bne .L3265 ++ mov r1, r6 ++ ldr r0, .L3273+32 ++ bl rk_printk ++ b .L3262 ++.L3267: ++ mov r7, fp ++ b .L3262 ++.L3263: ++ cmp r0, #0 ++ mla r6, r6, r3, fp ++ bne .L3264 ++ mov r1, r6 ++ b .L3272 ++.L3265: ++ cmp r7, #0 ++ beq .L3267 ++ mov r0, #0 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3274: ++ .align 2 ++.L3273: ++ .word .LANCHOR2 ++ .word .LANCHOR1+2247 ++ .word .LC135 ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LC207 ++ .word .LC206 ++ .word 1398362953 ++ .word .LC208 ++ .fnend ++ .size flash_info_flush, .-flash_info_flush ++ .align 2 ++ .global flash_info_blk_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flash_info_blk_init, %function ++flash_info_blk_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3307 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L3307+4 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L3276 ++ ldr r3, [r4, #1040] ++ mov r1, #50 ++ ldr r2, .L3307+8 ++ ldr r0, .L3307+12 ++ str r3, [sp] ++ mov r3, #2048 ++ bl rk_printk ++.L3276: ++ ldr r5, .L3307+16 ++ mov r7, #4 ++ ldr r8, .L3307+20 ++.L3280: ++ mov r6, #0 ++.L3279: ++ ldrh r1, [r4, #2] ++ mov r9, #4 ++ str r9, [sp] ++ mov r0, #0 ++ ldr r3, [r5, #-24] ++ ldr r2, [r4, #1040] ++ mla r1, r7, r1, r6 ++ bl flash_read_page_en ++ cmn r0, #1 ++ beq .L3277 ++ ldr r2, [r4, #1040] ++ ldr r3, [r2] ++ cmp r3, r8 ++ beq .L3278 ++.L3277: ++ add r6, r6, #1 ++ cmp r6, #4 ++ bne .L3279 ++ add r7, r7, #1 ++ cmp r7, #16 ++ bne .L3280 ++.L3306: ++ mvn r0, #0 ++.L3275: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3287: ++ str r9, [sp] ++ sub r1, r10, r7 ++ ldr r3, [r5, #-24] ++ mov r0, #0 ++ ldr r2, [r4, #1040] ++ bl flash_read_page_en ++ cmn r0, #1 ++ beq .L3285 ++ ldr r3, [r4, #1040] ++ ldr r3, [r3] ++ cmp r3, r8 ++ beq .L3286 ++.L3285: ++ add r7, r7, #1 ++ b .L3284 ++.L3286: ++ cmp r7, #1 ++ bls .L3290 ++ bl flash_info_flush ++.L3290: ++ mov r0, #0 ++ b .L3275 ++.L3278: ++ ldrb r1, [r2, #36] @ zero_extendqisi2 ++ ldrh r0, [r4, #2] ++ ldrb r3, [r2, #37] @ zero_extendqisi2 ++ strb r1, [r5, #-20] ++ str r9, [sp] ++ strb r3, [r5, #-19] ++ mul r1, r1, r0 ++ ldr r3, [r5, #-24] ++ mov r0, #0 ++ bl flash_read_page_en ++ cmn r0, #1 ++ beq .L3289 ++ ldr r3, [r4, #1040] ++ ldr r2, [r3] ++ cmp r2, r8 ++ ldreq r6, [r3, #4] ++ beq .L3282 ++.L3289: ++ mov r6, #0 ++.L3282: ++ ldrh r0, [r4, #2] ++ mov r3, #4 ++ ldrb r1, [r5, #-19] @ zero_extendqisi2 ++ str r3, [sp] ++ ldr r2, [r4, #1040] ++ ldr r3, [r5, #-24] ++ mul r1, r0, r1 ++ mov r0, #0 ++ bl flash_read_page_en ++ cmn r0, #1 ++ beq .L3283 ++ ldr r3, [r4, #1040] ++ ldr r2, [r3] ++ cmp r2, r8 ++ bne .L3283 ++ ldr r2, [r3, #4] ++ cmp r6, r2 ++ ldrbcc r2, [r3, #37] @ zero_extendqisi2 ++ ldrbcc r3, [r3, #36] @ zero_extendqisi2 ++ strbcc r2, [r5, #-20] ++ strbcc r3, [r5, #-19] ++.L3283: ++ mov r9, #4 ++ ldr r3, [r5, #-24] ++ ldrb r1, [r5, #-20] @ zero_extendqisi2 ++ mov r0, #0 ++ str r9, [sp] ++ mov r7, #0 ++ ldr r2, [r4, #1040] ++ bl flash_get_last_written_page ++ uxth fp, r0 ++ ldrb r10, [r5, #-20] @ zero_extendqisi2 ++ add r3, fp, #1 ++ strh r3, [r5, #-18] @ movhi ++ ldrh r3, [r4, #2] ++ mla r10, r3, r10, r0 ++.L3284: ++ sub r0, fp, r7 ++ sxth r6, r0 ++ cmp r6, #0 ++ bge .L3287 ++ cmn r6, #1 ++ bne .L3286 ++ ldr r3, [r4, #1040] ++ ldr r0, .L3307+24 ++ ldr r1, [r3] ++ bl rk_printk ++ b .L3306 ++.L3308: ++ .align 2 ++.L3307: ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LANCHOR1+2264 ++ .word .LC209 ++ .word .LANCHOR3 ++ .word 1398362953 ++ .word .LC210 ++ .fnend ++ .size flash_info_blk_init, .-flash_info_blk_init ++ .align 2 ++ .global nand_flash_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type nand_flash_init, %function ++nand_flash_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r4, r0 ++ ldr r6, .L3395 ++ ldr r3, [r6] ++ tst r3, #4096 ++ beq .L3310 ++ ldr r2, .L3395+4 ++ movw r1, #3450 ++ ldr r0, .L3395+8 ++ bl rk_printk ++.L3310: ++ ldr r5, .L3395+12 ++ mov r7, #0 ++ mov r0, r4 ++ ldr r4, .L3395+16 ++ ldr r9, .L3395+20 ++ mov fp, #44 ++ str r7, [r5, #-104] ++ bl nandc_init ++ ldr r3, .L3395+24 ++ mov r2, #8 ++ mov r1, r7 ++ ldr r0, .L3395+28 ++ mov r10, r9 ++ str r3, [r4, #1104] ++ mov r3, #1 ++ strb r3, [r4, #1109] ++ mov r3, #3 ++ strb r3, [r4, #1153] ++ bl ftl_memset ++ mov r2, #32 ++ mov r1, r7 ++ sub r0, r5, #220 ++ bl ftl_memset ++.L3316: ++ lsl r8, r7, #3 ++ uxtb r0, r7 ++ add r1, r9, r8 ++ bl flash_read_id ++ cmp r7, #0 ++ bne .L3311 ++ ldrb r3, [r4, #1160] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, #253 ++ bls .L3312 ++.L3314: ++ mvn r7, #1 ++.L3309: ++ mov r0, r7 ++ pop {r3, r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3312: ++ ldrb r3, [r4, #1161] @ zero_extendqisi2 ++ cmp r3, #255 ++ beq .L3314 ++.L3311: ++ ldrb r3, [r8, r10] @ zero_extendqisi2 ++ add r7, r7, #1 ++ cmp r3, #181 ++ strbeq fp, [r8, r10] ++ cmp r7, #4 ++ bne .L3316 ++ ldr r9, .L3395+32 ++ mov r7, #0 ++ ldr r10, .L3395+20 ++.L3319: ++ lsl r8, r7, #5 ++ ldrb r2, [r9, r7, lsl #5] @ zero_extendqisi2 ++ mov r1, r10 ++ add r0, r8, #1 ++ add r0, r9, r0 ++ bl flash_mem_cmp8 ++ cmp r0, #0 ++ bne .L3317 ++ add r9, r9, r8 ++ ldr r3, .L3395+36 ++ add r8, r6, r8 ++ ldrb r2, [r8, #440] @ zero_extendqisi2 ++ mov r1, r3 ++.L3318: ++ ldrb ip, [r3, r0, lsl #5] @ zero_extendqisi2 ++ cmp ip, r2 ++ beq .L3320 ++ add r0, r0, #1 ++ cmp r0, #4 ++ bne .L3318 ++.L3320: ++ add r1, r1, r0, lsl #5 ++ mov r2, #32 ++ ldr r0, .L3395+40 ++ bl ftl_memcpy ++ mov r2, #32 ++ mov r1, r9 ++ ldr r0, .L3395+24 ++ bl ftl_memcpy ++ ldrb r3, [r4, #1028] @ zero_extendqisi2 ++ cmp r3, #8 ++ bhi .L3321 ++ ldrb r2, [r6, #24] @ zero_extendqisi2 ++ cmp r2, #60 ++ movhi r2, #60 ++ strbhi r2, [r6, #24] ++ cmp r3, #6 ++ beq .L3314 ++.L3321: ++ ldr r3, [r6] ++ tst r3, #4096 ++ beq .L3323 ++ ldr r2, .L3395+4 ++ movw r1, #3480 ++ ldr r0, .L3395+8 ++ bl rk_printk ++.L3323: ++ ldr r3, [r4, #1104] ++ mov r0, #16384 ++ mov r7, #0 ++ ldrh r3, [r3, #10] ++ cmp r3, #1024 ++ movcs r3, #2 ++ strbcs r3, [r4, #1153] ++ bl ftl_malloc ++ str r0, [r5, #-92] ++ mov r0, #16384 ++ bl ftl_malloc ++ str r0, [r5, #-120] ++ mov r0, #2048 ++ bl ftl_dma32_malloc ++ str r0, [r4, #1040] ++ mov r0, #64 ++ bl ftl_dma32_malloc ++ str r0, [r5, #-96] ++ mov r0, #64 ++ bl ftl_dma32_malloc ++ str r0, [r5, #-112] ++ mov r0, #64 ++ bl ftl_dma32_malloc ++ strb r7, [r5, #-16] ++ str r0, [r5, #-24] ++ bl flash_die_info_init ++ ldrb r0, [r6, #22] @ zero_extendqisi2 ++ bl flash_lsb_page_tbl_build ++ ldrb r0, [r6, #24] @ zero_extendqisi2 ++ bl nandc_bch_sel ++ ldr r1, [r4, #1104] ++ str r7, [r5, #-100] ++ ldrh r3, [r1, #16] ++ ubfx r2, r3, #8, #3 ++ strb r2, [r4, #1192] ++ ubfx r2, r3, #3, #1 ++ strb r2, [r5, #-80] ++ ubfx r2, r3, #4, #1 ++ strb r2, [r4, #1194] ++ ubfx r2, r3, #12, #1 ++ strb r2, [r5, #-3120] ++ ubfx r2, r3, #13, #1 ++ strb r2, [r5, #-3126] ++ ubfx r2, r3, #11, #1 ++ strb r2, [r4, #1158] ++ ldrb r2, [r1, #31] @ zero_extendqisi2 ++ ldrb r1, [r1, #28] @ zero_extendqisi2 ++ ubfx r0, r2, #1, #1 ++ strb r0, [r5, #-2542] ++ ubfx r0, r2, #2, #1 ++ strb r0, [r5, #-15] ++ ubfx r0, r3, #14, #1 ++ lsr r3, r3, #15 ++ strb r0, [r4, #1] ++ strb r1, [r4] ++ strb r3, [r5, #-3125] ++ ubfx r3, r2, #3, #1 ++ strb r3, [r4, #1152] ++ mov r3, #60 ++ strb r3, [r4, #1108] ++ ubfx r2, r2, #4, #1 ++ ldrb r3, [r4, #1028] @ zero_extendqisi2 ++ strb r2, [r4, #1159] ++ strb r1, [r4, #1110] ++ cmp r3, #9 ++ moveq r2, #70 ++ strbeq r2, [r4, #1108] ++ ldrb r2, [r6, #35] @ zero_extendqisi2 ++ tst r2, #1 ++ beq .L3326 ++ ldrb r2, [r6, #33] @ zero_extendqisi2 ++ cmp r2, #0 ++ movne r2, #2 ++ moveq r2, #3 ++ strb r2, [r4, #1110] ++.L3326: ++ cmp r3, #8 ++ bne .L3328 ++ ldrb r3, [r4, #1160] @ zero_extendqisi2 ++ cmp r3, #137 ++ cmpne r3, #44 ++ bne .L3328 ++ ldrb r3, [r6, #32] @ zero_extendqisi2 ++ cmp r3, #3 ++ moveq r3, #0 ++ strbeq r3, [r4, #1110] ++.L3328: ++ ldrh r2, [r6, #20] ++ ldrb r3, [r6, #23] @ zero_extendqisi2 ++ tst r2, #64 ++ strb r3, [r4, #1100] ++ beq .L3330 ++ sub r2, r3, #17 ++ cmp r3, #21 ++ cmpne r2, #2 ++ bhi .L3331 ++ cmp r3, #21 ++ ldr r2, .L3395+44 ++ movne r3, #15 ++ moveq r3, #4 ++ str r2, [r5, #-100] ++.L3391: ++ strb r3, [r5, #-108] ++.L3330: ++ ldr r3, [r6] ++ tst r3, #4096 ++ beq .L3341 ++ ldr r2, .L3395+4 ++ movw r1, #3573 ++ ldr r0, .L3395+8 ++ bl rk_printk ++.L3341: ++ mov r3, #0 ++ strb r3, [r4, #1143] ++ ldrb r3, [r4, #1192] @ zero_extendqisi2 ++ tst r3, #1 ++ moveq r0, #4 ++ beq .L3393 ++ ldrb r3, [r4, #1160] @ zero_extendqisi2 ++ cmp r3, #155 ++ beq .L3343 ++ mov r0, #4 ++ bl flash_set_interface_mode ++ mov r0, #4 ++ bl nandc_set_if_mode ++.L3343: ++ mov r0, #1 ++ bl flash_set_interface_mode ++ mov r0, #1 ++.L3393: ++ bl nandc_set_if_mode ++ bl flash_info_blk_init ++ cmn r0, #1 ++ mov r7, r0 ++ bne .L3345 ++ ldr r3, [r4, #1040] ++ mov r2, #17 ++ mov r0, #0 ++ strb r0, [r4, #1154] ++ strb r2, [r3, #32] ++ bl zftl_flash_exit_slc_mode ++ b .L3309 ++.L3317: ++ add r7, r7, #1 ++ cmp r7, #49 ++ bne .L3319 ++ b .L3314 ++.L3331: ++ sub r2, r3, #65 ++ cmp r3, #33 ++ cmpne r2, #1 ++ bhi .L3334 ++ ldr r3, .L3395+48 ++ str r3, [r5, #-100] ++ mov r3, #4 ++ strb r3, [r4, #1101] ++.L3394: ++ mov r3, #7 ++ b .L3391 ++.L3334: ++ sub r2, r3, #67 ++ sub r1, r3, #34 ++ uxtb r2, r2 ++ cmp r2, #1 ++ cmphi r1, #1 ++ movls r1, #1 ++ movhi r1, #0 ++ bhi .L3335 ++ cmp r3, #68 ++ cmpne r3, #35 ++ ldr r1, .L3395+48 ++ movne r3, #7 ++ moveq r3, #17 ++ cmp r2, #1 ++ strb r3, [r5, #-108] ++ movls r3, #4 ++ movhi r3, #5 ++ str r1, [r5, #-100] ++ strb r3, [r4, #1101] ++ b .L3330 ++.L3335: ++ sub r2, r3, #36 ++ cmp r2, #1 ++ ldrls r3, .L3395+52 ++ strls r3, [r5, #-100] ++ bls .L3394 ++.L3339: ++ cmp r3, #50 ++ ldreq r3, .L3395+56 ++ streq r3, [r5, #-100] ++ moveq r3, #25 ++ beq .L3391 ++.L3340: ++ cmp r3, #81 ++ ldreq r3, .L3395+60 ++ strbeq r1, [r4, #1195] ++ streq r3, [r5, #-100] ++ moveq r3, #7 ++ strbeq r3, [r5, #-108] ++ b .L3330 ++.L3345: ++ ldrb r3, [r6, #11] @ zero_extendqisi2 ++ cmp r3, #9 ++ bne .L3346 ++ ldr r3, [r4, #1040] ++ ldrb r3, [r3, #20] @ zero_extendqisi2 ++ cmp r3, #1 ++ movne r3, #0 ++ strbne r3, [r4, #1110] ++.L3346: ++ ldrb r3, [r4, #1100] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ cmp r3, #7 ++ ldrls r3, .L3395+64 ++ strls r3, [r5, #-100] ++ ldrb r3, [r4, #1192] @ zero_extendqisi2 ++ tst r3, #4 ++ beq .L3349 ++ ldr r3, [r4, #1040] ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3349 ++ ldrb r3, [r5, #-20] @ zero_extendqisi2 ++ mov r0, #0 ++ ldrh r1, [r4, #2] ++ mul r1, r1, r3 ++ bl flash_ddr_para_scan ++ ldrb r3, [r4, #1143] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3349 ++ ldr r2, [r4, #1040] ++ strb r3, [r2, #19] ++ bl flash_info_flush ++.L3349: ++ ldr r3, [r6] ++ tst r3, #4096 ++ beq .L3351 ++ ldr r2, .L3395+4 ++ movw r1, #3676 ++ ldr r0, .L3395+8 ++ bl rk_printk ++.L3351: ++ bl nand_flash_print_info ++ mov r7, #0 ++ b .L3309 ++.L3396: ++ .align 2 ++.L3395: ++ .word .LANCHOR2 ++ .word .LANCHOR1+2284 ++ .word .LC135 ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LANCHOR0+1160 ++ .word .LANCHOR2+4 ++ .word .LANCHOR0+1144 ++ .word .LANCHOR2+418 ++ .word .LANCHOR2+1986 ++ .word .LANCHOR0+1111 ++ .word micron_read_retrial ++ .word toshiba_read_retrial ++ .word toshiba_3d_read_retrial ++ .word samsung_read_retrial ++ .word ymtc_3d_read_retrial ++ .word hynix_read_retrial ++ .fnend ++ .size nand_flash_init, .-nand_flash_init ++ .align 2 ++ .global ftl_sysblk_dump ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_sysblk_dump, %function ++ftl_sysblk_dump: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r9, r0 ++ .pad #52 ++ sub sp, sp, #52 ++ mov r0, #1 ++ mov r5, #0 ++ ldr r10, .L3408 ++ mov r6, r5 ++ bl buf_alloc ++ ldr r3, [r0, #4] ++ mov r4, r0 ++ str r3, [sp, #44] ++.L3398: ++ ldr r3, .L3408+4 ++ ldrh r2, [r3, #-8] ++ uxth r3, r5 ++ cmp r2, r3 ++ bhi .L3400 ++ ldr r1, [sp, #44] ++ mov r3, #32 ++ mov r2, #4 ++ ldr r0, .L3408+8 ++ add r1, r1, #704 ++ bl rknand_print_hex ++ mov r0, r4 ++ bl zbuf_free ++ cmp r6, #0 ++ beq .L3401 ++ movw r2, #1619 ++ ldr r1, .L3408+12 ++ ldr r0, .L3408+16 ++ bl rk_printk ++ bl dump_stack ++.L3401: ++ mov r0, r6 ++ add sp, sp, #52 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3400: ++ ldr r3, .L3408+20 ++ uxth fp, r5 ++ ldr r2, [r4, #12] ++ add r5, r5, #1 ++ ldr r1, [r4, #4] ++ ldrh r7, [r3] ++ ldrb r3, [r10, #-2546] @ zero_extendqisi2 ++ mla r7, r9, r7, fp ++ mov r0, r7 ++ bl ftl_read_ppa_page ++ ldr r2, [r4, #12] ++ mov r8, r0 ++ ldr r3, [r4, #4] ++ ldr r1, [r2, #12] ++ str r1, [sp, #32] ++ ldr r1, [r2, #8] ++ str r1, [sp, #28] ++ ldr r1, [r2, #4] ++ str r1, [sp, #24] ++ mov r1, r9 ++ ldr r2, [r2] ++ str r2, [sp, #20] ++ ldr r2, [r3, #12] ++ str r2, [sp, #16] ++ ldr r2, [r3, #8] ++ str r2, [sp, #12] ++ ldr r2, [r3, #4] ++ str r2, [sp, #8] ++ mov r2, fp ++ ldr r3, [r3] ++ str r0, [sp] ++ ldr r0, .L3408+24 ++ str r3, [sp, #4] ++ mov r3, r7 ++ bl rk_printk ++ cmn r8, #1 ++ cmpne r8, #512 ++ moveq r6, #1 ++ b .L3398 ++.L3409: ++ .align 2 ++.L3408: ++ .word .LANCHOR3 ++ .word .LANCHOR3-3088 ++ .word .LC211 ++ .word .LANCHOR1+2300 ++ .word .LC0 ++ .word .LANCHOR3-3074 ++ .word .LC195 ++ .fnend ++ .size ftl_sysblk_dump, .-ftl_sysblk_dump ++ .align 2 ++ .global ftl_open_sblk_recovery ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_open_sblk_recovery, %function ++ftl_open_sblk_recovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 216 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #228 ++ sub sp, sp, #228 ++ ldr r5, .L3532 ++ mov r4, r0 ++ str r1, [sp, #28] ++ ldr r3, [r5] ++ tst r3, #4096 ++ beq .L3411 ++ ldrh r1, [r0, #2] ++ ldr r0, .L3532+4 ++ bl rk_printk ++.L3411: ++ ldr r3, [r5] ++ tst r3, #4096 ++ beq .L3412 ++ ldrb r1, [r4, #5] @ zero_extendqisi2 ++ ldr r0, .L3532+8 ++ bl rk_printk ++.L3412: ++ ldr r3, [r5] ++ tst r3, #4096 ++ beq .L3413 ++ ldrh r1, [r4] ++ ldr r0, .L3532+12 ++ bl rk_printk ++.L3413: ++ ldr r3, [r5] ++ tst r3, #4096 ++ beq .L3414 ++ ldrh r2, [r4, #18] ++ ldrh r1, [r4, #16] ++ ldr r0, .L3532+16 ++ bl rk_printk ++.L3414: ++ ldr r3, [r5] ++ tst r3, #4096 ++ beq .L3415 ++ ldrb r1, [r4, #9] @ zero_extendqisi2 ++ ldr r0, .L3532+20 ++ bl rk_printk ++.L3415: ++ ldrh r3, [r4, #10] ++ ldr r1, .L3532+24 ++ ldrh r2, [r4] ++ strh r3, [r4, #14] @ movhi ++ movw r3, #1080 ++ ldrh r3, [r1, r3] ++ cmp r2, r3 ++ bcs .L3410 ++ mov r0, #1 ++ bl buf_alloc ++ ldr r3, .L3532+28 ++ mov r1, #255 ++ ldr r2, [r0, #4] ++ mov r5, r0 ++ add r0, sp, #32 ++ ldrb r3, [r3, #-2546] @ zero_extendqisi2 ++ sub r3, r3, #2 ++ add r3, r2, r3, lsl #9 ++ mov r2, #64 ++ str r3, [sp, #16] ++ bl ftl_memset ++ mov r2, #64 ++ mov r1, #255 ++ add r0, sp, #96 ++ bl ftl_memset ++ mov r2, #64 ++ mov r1, #255 ++ add r0, sp, #160 ++ bl ftl_memset ++ ldrb r10, [r4, #5] @ zero_extendqisi2 ++ mov r3, #2 ++ ldrh r9, [r4, #2] ++ str r3, [sp, #12] ++ mov r3, #0 ++ str r3, [sp, #24] ++.L3417: ++ ldr r3, .L3532+32 ++ ldrh r3, [r3] ++ cmp r3, r9 ++ bhi .L3434 ++.L3420: ++ ldrh r3, [r4, #10] ++ ldr r1, .L3532+36 ++ ldrh r2, [r4, #6] ++ ldrb r0, [r4, #9] @ zero_extendqisi2 ++ strh r9, [r4, #2] @ movhi ++ add r2, r2, r3 ++ ldrh r3, [r1, #-8] ++ strb r10, [r4, #5] ++ str r1, [sp, #16] ++ mul r3, r3, r0 ++ cmp r2, r3 ++ beq .L3435 ++ movw r2, #1802 ++ ldr r1, .L3532+40 ++ ldr r0, .L3532+44 ++ bl rk_printk ++ bl dump_stack ++.L3435: ++ ldr r6, .L3532+28 ++ mov r7, #0 ++ ldrh r0, [r4, #10] ++ mov r2, r7 ++ ldr r3, [r6, #-2556] ++.L3436: ++ cmp r2, r0 ++ bcc .L3438 ++ ldr r2, [sp, #16] ++ ldrb r3, [r4, #9] @ zero_extendqisi2 ++ ldr r9, .L3532 ++ ldrh r2, [r2, #-8] ++ ldr r10, .L3532+24 ++ smulbb r3, r3, r2 ++ sub r3, r3, r0 ++ add r7, r7, r3 ++ ldr r3, [r9] ++ uxth r7, r7 ++ tst r3, #4096 ++ beq .L3439 ++ ldrh r1, [r4] ++ ldr r2, [r10, #1092] ++ ldr r0, .L3532+48 ++ lsl r3, r1, #1 ++ ldrh r3, [r2, r3] ++ mov r2, r7 ++ bl rk_printk ++.L3439: ++ ldrh r3, [r4] ++ ldr r2, [r10, #1092] ++ lsl r3, r3, #1 ++ strh r7, [r2, r3] @ movhi ++ ldr r3, [r9] ++ tst r3, #16384 ++ beq .L3440 ++ ldr r3, [sp, #44] ++ add r1, sp, #32 ++ ldr r0, .L3532+52 ++ str r3, [sp] ++ ldm r1, {r1, r2, r3} ++ bl rk_printk ++.L3440: ++ ldrb r2, [r6, #-2546] @ zero_extendqisi2 ++ mov r8, #0 ++ mov r1, #0 ++ ldr r0, [r5, #4] ++ lsl r2, r2, #9 ++ bl ftl_memset ++.L3441: ++ ldrb r3, [r6, #-3127] @ zero_extendqisi2 ++ ldr r2, [sp, #12] ++ mul r3, r2, r3 ++ cmp r8, r3 ++ bcc .L3453 ++ ldr fp, .L3532+56 ++ mov r7, #0 ++ add r8, sp, #32 ++.L3454: ++ ldrb r3, [r6, #-3127] @ zero_extendqisi2 ++ ldr r2, [sp, #12] ++ mul r3, r2, r3 ++ cmp r7, r3 ++ bcc .L3460 ++ mov r0, r5 ++ bl zbuf_free ++ ldr r3, [sp, #16] ++ ldrh r2, [r4, #12] ++ ldrb r1, [r4, #9] @ zero_extendqisi2 ++ ldrh r3, [r3, #-8] ++ mla r3, r1, r3, r2 ++ ldr r2, [r6, #-2556] ++ sub r3, r3, #-1073741823 ++ ldr r3, [r2, r3, lsl #2] ++ cmn r3, #1 ++ beq .L3461 ++ movw r2, #1917 ++ ldr r1, .L3532+40 ++ ldr r0, .L3532+44 ++ bl rk_printk ++ bl dump_stack ++.L3461: ++ ldrh r3, [r4, #6] ++ cmp r3, #1 ++ bne .L3410 ++ mov r0, r4 ++ bl ftl_write_last_log_page ++.L3410: ++ add sp, sp, #228 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3434: ++ ldrb r10, [r4, #5] @ zero_extendqisi2 ++ ldr r6, .L3532+28 ++.L3418: ++ ldrb r3, [r4, #9] @ zero_extendqisi2 ++ cmp r3, r10 ++ movls r3, #0 ++ strbls r3, [r4, #5] ++ addls r3, r9, #1 ++ uxthls r9, r3 ++ bls .L3417 ++.L3433: ++ add r3, r4, r10, lsl #1 ++ ldrh r8, [r3, #16] ++ movw r3, #65535 ++ cmp r8, r3 ++ beq .L3419 ++ ldr r3, .L3532+60 ++ ldr r2, [r5, #12] ++ ldr r1, [r5, #4] ++ ldrh r3, [r3, #-2] ++ mla r3, r8, r3, r9 ++ str r3, [sp, #20] ++ ldr r0, [sp, #20] ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ bl ftl_read_ppa_page ++ cmp r0, #512 ++ mov r7, r0 ++ beq .L3420 ++ cmn r0, #1 ++ beq .L3421 ++ ldr r3, [r5, #12] ++ ldr r2, [r3] ++ cmn r2, #1 ++ bne .L3421 ++ ldr r3, [r3, #4] ++ cmn r3, #1 ++ bne .L3421 ++ ldr r3, [r5, #4] ++ ldr r3, [r3] ++ cmn r3, #1 ++ beq .L3420 ++.L3421: ++ mov r3, #1 ++ ldrh r2, [r4, #10] ++ strb r3, [r6, #-47] ++ ldrb r3, [r4, #9] @ zero_extendqisi2 ++ mla r3, r9, r3, r10 ++ cmp r2, r3 ++ beq .L3422 ++ movw r2, #1694 ++ ldr r1, .L3532+40 ++ ldr r0, .L3532+44 ++ bl rk_printk ++ bl dump_stack ++.L3422: ++ ldrh r3, [r4, #10] ++ ldrh r2, [r4, #6] ++ add r2, r2, r3 ++ ldr r3, .L3532+32 ++ ldrh r1, [r3] ++ ldrb r3, [r4, #9] @ zero_extendqisi2 ++ mul r3, r3, r1 ++ cmp r2, r3 ++ beq .L3423 ++ movw r2, #1695 ++ ldr r1, .L3532+40 ++ ldr r0, .L3532+44 ++ bl rk_printk ++ bl dump_stack ++.L3423: ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ cmp r3, #8 ++ bls .L3424 ++ ldr r3, [r5, #12] ++ ldr r1, .L3532+64 ++ ldr r2, [r3] ++ cmp r2, r1 ++ beq .L3424 ++ cmn r7, #1 ++ beq .L3426 ++ ldr r2, [r3, #4] ++ cmn r2, #1 ++ bne .L3427 ++.L3430: ++ ldr r3, [r5, #12] ++ ldr r0, [r3, #4] ++ cmn r0, #1 ++ bne .L3428 ++.L3426: ++ ldrh r3, [r4, #6] ++ sub r3, r3, #1 ++ strh r3, [r4, #6] @ movhi ++ ldrh r3, [r4, #10] ++ add r3, r3, #1 ++ strh r3, [r4, #10] @ movhi ++ mov r3, #4 ++ str r3, [sp, #12] ++ mov r3, #1 ++ str r3, [sp, #24] ++.L3419: ++ add r3, r10, #1 ++ uxth r10, r3 ++ b .L3418 ++.L3427: ++ ldr r2, [r3, #16] ++ ldr r1, .L3532+68 ++ cmp r2, r1 ++ bne .L3430 ++ ldr fp, [r3, #20] ++ mov r1, #1024 ++ ldr r0, [sp, #16] ++ bl js_hash ++ cmp fp, r0 ++ beq .L3430 ++ mov r1, #1024 ++ ldr r0, [sp, #16] ++ bl js_hash ++ mov r2, r9 ++ mov r1, r8 ++ str r0, [sp, #4] ++ str r7, [sp] ++ ldr r3, [sp, #20] ++ ldr r0, .L3532+72 ++ bl rk_printk ++ mov r3, #16 ++ mov r2, #4 ++ ldr r1, [sp, #16] ++ ldr r0, .L3532+76 ++ bl rknand_print_hex ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ mov r2, #4 ++ ldr r1, [r5, #12] ++ ldr r0, .L3532+80 ++ lsr r3, r3, #1 ++ bl rknand_print_hex ++ b .L3426 ++.L3424: ++ cmn r7, #1 ++ bne .L3430 ++ b .L3426 ++.L3428: ++ ldr r3, [r3] ++ ldr r2, .L3532+64 ++ cmp r3, r2 ++ beq .L3426 ++ bl lpa_hash_get_ppa ++ ldr r3, [sp, #28] ++ mov r8, r0 ++ cmp r3, #0 ++ beq .L3431 ++ ldr fp, [r5, #12] ++ ldr r3, [fp, #8] ++ cmp r3, r0 ++ cmnne r0, #1 ++ beq .L3431 ++ ldr r3, .L3532+84 ++ mov r7, #1 ++ ldrb r1, [r6, #-3136] @ zero_extendqisi2 ++ ldrh r0, [r3] ++ ldr r3, .L3532+24 ++ ldrb r3, [r3, #1153] @ zero_extendqisi2 ++ rsb r3, r3, #24 ++ sub r3, r3, r0 ++ lsl r3, r7, r3 ++ sub r3, r3, #1 ++ and r0, r3, r8, lsr r0 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #28] ++ uxth r0, r0 ++ ldrh r3, [r3] ++ cmp r3, r0 ++ bne .L3431 ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ mov r0, r8 ++ ldr r2, [r6, #-76] ++ ldr r1, [r5, #4] ++ ldr fp, [fp] ++ bl ftl_read_ppa_page ++ ldr r3, [r6, #-76] ++ ldr r3, [r3] ++ cmp fp, r3 ++ bhi .L3431 ++ ldr r3, [r5, #12] ++ ldr r0, [r3, #8] ++ cmn r0, #1 ++ beq .L3426 ++ ldr r3, .L3532+84 ++ ldrb r1, [r6, #-3136] @ zero_extendqisi2 ++ ldrh r2, [r3] ++ ldr r3, .L3532+24 ++ ldrb r3, [r3, #1153] @ zero_extendqisi2 ++ rsb r3, r3, #24 ++ sub r3, r3, r2 ++ lsl r7, r7, r3 ++ sub r7, r7, #1 ++ and r0, r7, r0, lsr r2 ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ bl ftl_vpn_decrement ++ b .L3426 ++.L3438: ++ ldrh r1, [r4, #12] ++ add r1, r1, r2 ++ add r2, r2, #1 ++ ldr r1, [r3, r1, lsl #2] ++ cmn r1, #1 ++ addne r7, r7, #1 ++ uxthne r7, r7 ++ b .L3436 ++.L3453: ++ add r3, sp, #32 ++ ldr r0, [r3, r8, lsl #2] ++ cmn r0, #1 ++ bne .L3442 ++.L3446: ++ ldr r2, [r10, #2800] ++ mvn r7, #0 ++ ldr r3, [r5, #12] ++ mov r0, #2 ++ ldr r2, [r2, #8] ++ str r2, [r3] ++ mov r2, #0 ++ ldr r3, [r5, #12] ++ str r7, [r3, #4] ++ ldr r3, [r5, #12] ++ str r7, [r3, #8] ++ ldr r3, [r5, #12] ++ str r2, [r3, #12] ++ ldr r3, [r5, #12] ++ str r2, [r3, #16] ++ ldr r3, [r5, #4] ++ str r2, [r3] ++ ldr r1, [r5, #12] ++ add r1, r1, #16 ++ bl ftl_debug_info_fill ++.L3443: ++ ldr r3, [sp, #24] ++ cmp r3, #1 ++ bne .L3448 ++ ldrh r3, [r4, #6] ++ cmp r3, #1 ++ bls .L3448 ++.L3507: ++ mov r0, r4 ++ bl ftl_get_new_free_page ++ ldr r3, [r9] ++ mov fp, r0 ++ tst r3, #16384 ++ beq .L3450 ++ ldrh r2, [r4, #12] ++ mov r1, r0 ++ ldrh r3, [r4, #10] ++ ldr r0, .L3532+88 ++ add r3, r3, r2 ++ ldr r2, [r5, #12] ++ sub r3, r3, #1 ++ ldr r2, [r2, #4] ++ bl rk_printk ++.L3450: ++ ldrb r3, [r6, #-3127] @ zero_extendqisi2 ++ ldr r1, [sp, #12] ++ ldrh r2, [r4, #6] ++ mul r3, r1, r3 ++ add r3, r3, #1 ++ sub r3, r3, r8 ++ cmp r2, r3 ++ bls .L3448 ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ mov r0, fp ++ ldr r2, [r5, #12] ++ ldr r1, [r5, #4] ++ bl ftl_prog_ppa_page ++ str r0, [sp, #20] ++ ldrh r0, [r4] ++ bl ftl_vpn_decrement ++ ldr r2, [sp, #20] ++ adds r3, r7, #1 ++ movne r3, #1 ++ cmn r2, #1 ++ cmnne r7, #1 ++ beq .L3451 ++ add r3, sp, #96 ++ ldrh r2, [r4, #12] ++ str fp, [r3, r8, lsl #2] ++ ldrh r3, [r4, #10] ++ add r3, r3, r2 ++ add r2, sp, #160 ++ sub r3, r3, #1 ++ str r3, [r2, r8, lsl #2] ++.L3448: ++ add r8, r8, #1 ++ b .L3441 ++.L3442: ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ ldr r2, [r5, #12] ++ ldr r1, [r5, #4] ++ bl ftl_read_ppa_page ++ ldr r3, [r5, #12] ++ mov r7, r0 ++ ldr r0, [r3, #4] ++ bl lpa_hash_get_ppa ++ ldr r3, [r9] ++ mov fp, r0 ++ tst r3, #16384 ++ beq .L3444 ++ ldr r3, [r5, #12] ++ add r2, sp, #32 ++ mov r1, r0 ++ ldr r2, [r2, r8, lsl #2] ++ ldr r0, .L3532+92 ++ ldr r3, [r3, #4] ++ bl rk_printk ++.L3444: ++ add r3, sp, #32 ++ mov r2, #1 ++ ldr r3, [r3, r8, lsl #2] ++ mov r0, #2 ++ cmp fp, r3 ++ ldr r3, [r5, #12] ++ mvnne r7, #0 ++ str fp, [r3, #8] ++ ldr r3, [r5, #12] ++ str r2, [r3, #12] ++ mov r2, #0 ++ ldr r3, [r5, #12] ++ str r2, [r3, #16] ++ ldr r1, [r5, #12] ++ add r1, r1, #16 ++ bl ftl_debug_info_fill ++ cmn r7, #1 ++ bne .L3443 ++ b .L3446 ++.L3451: ++ ldrh r2, [r4, #6] ++ cmp r2, #1 ++ movls r3, #0 ++ andhi r3, r3, #1 ++ cmp r3, #0 ++ bne .L3507 ++ b .L3448 ++.L3460: ++ add r10, sp, #96 ++ ldr r3, [r10, r7, lsl #2] ++ cmn r3, #1 ++ beq .L3456 ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ ldr r2, [r5, #12] ++ ldr r1, [r5, #4] ++ ldr r0, [r8, r7, lsl #2] ++ bl ftl_read_ppa_page ++ cmn r0, #1 ++ cmpne r0, #256 ++ bne .L3456 ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ ldr r0, [r10, r7, lsl #2] ++ ldr r2, [r5, #12] ++ ldr r1, [r5, #4] ++ bl ftl_read_ppa_page ++ ldr r3, [r9] ++ mov r10, r0 ++ tst r3, #16384 ++ beq .L3458 ++ ldr r2, [r5, #12] ++ mov r1, r0 ++ ldr r3, [r8, r7, lsl #2] ++ ldr r0, .L3532+88 ++ ldr r2, [r2, #8] ++ bl rk_printk ++.L3458: ++ cmn r10, #1 ++ beq .L3456 ++ ldr r1, [r5, #12] ++ ldr r2, [r8, r7, lsl #2] ++ ldr r3, [r1, #8] ++ cmp r2, r3 ++ bne .L3456 ++ ldr r3, [r9] ++ add r10, sp, #160 ++ tst r3, #16384 ++ beq .L3459 ++ ldr r3, [r10, r7, lsl #2] ++ mov r0, fp ++ ldr r1, [r1, #4] ++ bl rk_printk ++.L3459: ++ ldr r2, [r10, r7, lsl #2] ++ ldr r3, [r5, #12] ++ uxth r2, r2 ++ ldmib r3, {r0, r1} ++ bl lpa_hash_update_ppa ++.L3456: ++ add r7, r7, #1 ++ b .L3454 ++.L3431: ++ ldr r1, [r5, #12] ++ ldr r2, .L3532+24 ++ ldr r0, [r1, #4] ++ ldr r3, [r2, #2780] ++ cmp r0, r3 ++ bcs .L3426 ++ ldr r3, .L3532+32 ++ ldrb ip, [r4, #9] @ zero_extendqisi2 ++ ldrh r0, [r4, #10] ++ ldrh r3, [r3] ++ mul r3, r3, ip ++ sub r3, r3, #1 ++ cmp r0, r3 ++ bge .L3426 ++ ldr r3, [r2, #2800] ++ ldr r1, [r1] ++ ldr r2, [r3, #8] ++ cmp r1, r2 ++ strhi r1, [r3, #8] ++ ldrh r1, [r4, #12] ++ ldrh r2, [r4, #10] ++ ldr r3, [r5, #12] ++ add r2, r2, r1 ++ uxth r2, r2 ++ ldmib r3, {r0, r1} ++ bl lpa_hash_update_ppa ++ ldr r3, [sp, #36] ++ str r3, [sp, #32] ++ ldr r3, [sp, #40] ++ str r3, [sp, #36] ++ ldr r3, [sp, #44] ++ str r3, [sp, #40] ++ ldr r3, [sp, #20] ++ str r3, [sp, #44] ++ b .L3426 ++.L3533: ++ .align 2 ++.L3532: ++ .word .LANCHOR2 ++ .word .LC212 ++ .word .LC213 ++ .word .LC214 ++ .word .LC215 ++ .word .LC216 ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3096 ++ .word .LANCHOR3-3088 ++ .word .LANCHOR1+2316 ++ .word .LC0 ++ .word .LC219 ++ .word .LC220 ++ .word .LC223 ++ .word .LANCHOR3-3072 ++ .word -178307901 ++ .word 1212240712 ++ .word .LC217 ++ .word .LC218 ++ .word .LC183 ++ .word .LANCHOR3-3138 ++ .word .LC222 ++ .word .LC221 ++ .fnend ++ .size ftl_open_sblk_recovery, .-ftl_open_sblk_recovery ++ .align 2 ++ .global dump_ftl_info ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type dump_ftl_info, %function ++dump_ftl_info: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, lr} ++ .save {r4, r5, r6, r7, lr} ++ .pad #12 ++ movw r7, #1080 ++ ldr r4, .L3536 ++ ldr r5, .L3536+4 ++ ldrb r1, [r4, #2769] @ zero_extendqisi2 ++ ldr r0, .L3536+8 ++ bl rk_printk ++ ldrh r3, [r5, #-54] ++ sub r6, r5, #3088 ++ ldrb r2, [r5, #-55] @ zero_extendqisi2 ++ ldrb r1, [r5, #-56] @ zero_extendqisi2 ++ ldr r0, .L3536+12 ++ bl rk_printk ++ ldr r3, [r4, #2800] ++ ldr r0, .L3536+16 ++ ldrh r2, [r3, #140] ++ ldrh r1, [r3, #130] ++ bl rk_printk ++ ldr r0, [r4, #1096] ++ ldrh ip, [r0, #26] ++ ldrb r3, [r0, #21] @ zero_extendqisi2 ++ ldrh r2, [r0, #18] ++ ldrh r1, [r0, #16] ++ str ip, [sp, #4] ++ ldrh r0, [r0, #22] ++ str r0, [sp] ++ ldr r0, .L3536+20 ++ bl rk_printk ++ ldr r0, [r4, #1096] ++ ldrh ip, [r0, #58] ++ ldrb r3, [r0, #53] @ zero_extendqisi2 ++ ldrh r2, [r0, #50] ++ ldrh r1, [r0, #48] ++ str ip, [sp, #4] ++ ldrh r0, [r0, #54] ++ str r0, [sp] ++ ldr r0, .L3536+24 ++ bl rk_printk ++ ldr r0, [r4, #1096] ++ ldrh ip, [r0, #90] ++ ldrb r3, [r0, #85] @ zero_extendqisi2 ++ ldrh r2, [r0, #82] ++ ldrh r1, [r0, #80] ++ str ip, [sp, #4] ++ ldrh r0, [r0, #86] ++ str r0, [sp] ++ ldr r0, .L3536+28 ++ bl rk_printk ++ ldrh r2, [r6, #-8] ++ ldrb r3, [r5, #-3127] @ zero_extendqisi2 ++ ldr r1, [r5, #-2556] ++ ldr r0, .L3536+32 ++ mul r3, r3, r2 ++ mov r2, #4 ++ lsl r3, r3, #1 ++ bl rknand_print_hex ++ ldrh r3, [r4, r7] ++ mov r2, #2 ++ ldr r1, [r4, #1092] ++ ldr r0, .L3536+36 ++ bl rknand_print_hex ++ ldr r1, [r4, #2800] ++ movw r3, #698 ++ mov r2, #4 ++ ldr r0, .L3536+40 ++ ldrh r3, [r1, r3] ++ add r1, r1, #704 ++ bl rknand_print_hex ++ ldrh r3, [r4, r7] ++ mov r2, #4 ++ ldr r1, [r4, #1084] ++ ldr r0, .L3536+44 ++ bl rknand_print_hex ++ sub r1, r5, #3056 ++ mov r3, #256 ++ mov r2, #2 ++ sub r1, r1, #14 ++ ldr r0, .L3536+48 ++ bl rknand_print_hex ++ ldrh r2, [r6, #-8] ++ ldrb r3, [r5, #-3127] @ zero_extendqisi2 ++ ldr r1, [r5, #-2552] ++ ldr r0, .L3536+52 ++ mul r3, r3, r2 ++ mov r2, #2 ++ lsl r3, r3, #1 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, lr} ++ b rknand_print_hex ++.L3537: ++ .align 2 ++.L3536: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LC224 ++ .word .LC225 ++ .word .LC226 ++ .word .LC227 ++ .word .LC228 ++ .word .LC229 ++ .word .LC230 ++ .word .LC231 ++ .word .LC211 ++ .word .LC232 ++ .word .LC233 ++ .word .LC234 ++ .fnend ++ .size dump_ftl_info, .-dump_ftl_info ++ .align 2 ++ .global pm_ppa_update_check ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_ppa_update_check, %function ++pm_ppa_update_check: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L3542 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r6, r2 ++ ldr r7, .L3542+4 ++ mov r4, r0 ++ sub r2, r3, #3136 ++ mov r5, r1 ++ ldrh r0, [r2, #-2] ++ ldrb ip, [r7, #1153] @ zero_extendqisi2 ++ ldrb r1, [r3, #-3136] @ zero_extendqisi2 ++ mvn r3, #0 ++ rsb ip, ip, #24 ++ sub ip, ip, r0 ++ lsr r0, r6, r0 ++ bic r0, r0, r3, lsl ip ++ bl __aeabi_uidiv ++ ldr r3, [r7, #1084] ++ uxth r0, r0 ++ add r0, r3, r0, lsl #2 ++ ldrb r0, [r0, #2] @ zero_extendqisi2 ++ lsr r0, r0, #5 ++ cmp r0, #7 ++ cmpne r0, #1 ++ moveq r0, #1 ++ movne r0, #0 ++ popne {r4, r5, r6, r7, r8, pc} ++ mov r3, r6 ++ mov r2, r5 ++ mov r1, r4 ++ ldr r0, .L3542+8 ++ bl rk_printk ++ bl dump_ftl_info ++ mvn r0, #0 ++ pop {r4, r5, r6, r7, r8, pc} ++.L3543: ++ .align 2 ++.L3542: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LC235 ++ .fnend ++ .size pm_ppa_update_check, .-pm_ppa_update_check ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type load_l2p_region, %function ++load_l2p_region: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r1, #31 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ mov r7, r0 ++ mov r6, r1 ++ bls .L3545 ++ mov r2, #32 ++ ldr r1, .L3559 ++ ldr r0, .L3559+4 ++ bl rk_printk ++ bl dump_stack ++.L3545: ++ ldr r8, .L3559+8 ++ movw r10, #698 ++ ldr r5, .L3559+12 ++ ldr r3, [r8, #2800] ++ mov r9, r8 ++ ldrh r2, [r3, r10] ++ cmp r2, r7 ++ bcs .L3546 ++ mov r1, r7 ++ ldr r0, .L3559+16 ++ mov r4, #0 ++ bl rk_printk ++ ldrh r2, [r5, #-14] ++ mov r1, #255 ++ ldr r0, [r4, #4] ++ bl ftl_memset ++ ldr r3, [r8, #2800] ++ ldrh r3, [r3, r10] ++ cmp r3, r7 ++ bcc .L3547 ++.L3557: ++ mov r0, #0 ++.L3544: ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3547: ++ mov r2, #37 ++.L3558: ++ ldr r1, .L3559 ++ ldr r0, .L3559+4 ++ bl rk_printk ++ bl dump_stack ++ b .L3557 ++.L3546: ++ add r2, r7, #176 ++ lsl r6, r6, #3 ++ ldr r4, [r3, r2, lsl #2] ++ ldr r3, .L3559+20 ++ add r8, r5, r6 ++ add r2, r3, r6 ++ strh r7, [r3, r6] @ movhi ++ mov r3, #0 ++ cmp r4, r3 ++ strh r3, [r2, #2] @ movhi ++ bne .L3549 ++ mov r2, r4 ++ mov r1, r7 ++ ldr r0, .L3559+24 ++ bl rk_printk ++ ldrh r2, [r5, #-14] ++ mov r1, #255 ++ ldr r0, [r8, #-2528] ++ bl ftl_memset ++ b .L3557 ++.L3549: ++ ldrb r3, [r5, #-2546] @ zero_extendqisi2 ++ mov r0, r4 ++ ldr r2, [r5, #-32] ++ ldr r1, [r8, #-2528] ++ bl ftl_read_ppa_page ++ ldr r2, [r5, #-32] ++ mov r3, r0 ++ ldr r2, [r2] ++ cmp r2, r7 ++ bne .L3550 ++ cmn r0, #1 ++ cmpne r0, #512 ++ beq .L3550 ++.L3554: ++ ldr r3, [r5, #-32] ++ ldr r3, [r3] ++ cmp r7, r3 ++ beq .L3557 ++ mov r2, #73 ++ b .L3558 ++.L3550: ++ mov r1, r7 ++ str r4, [sp] ++ ldr r0, .L3559+28 ++ add r6, r5, r6 ++ bl rk_printk ++ ldr r1, [r9, #2800] ++ movw r3, #698 ++ mov r2, #4 ++ ldr r0, .L3559+32 ++ ldrh r3, [r1, r3] ++ add r1, r1, #704 ++ bl rknand_print_hex ++ ldrb r3, [r5, #-2546] @ zero_extendqisi2 ++ mov r2, #4 ++ ldr r1, [r6, #-2528] ++ ldr r0, .L3559+36 ++ lsl r3, r3, #7 ++ bl rknand_print_hex ++ mov r3, #16 ++ mov r2, #4 ++ ldr r1, [r5, #-32] ++ ldr r0, .L3559+40 ++ bl rknand_print_hex ++ ldrb r3, [r5, #-2546] @ zero_extendqisi2 ++ mov r0, r4 ++ ldr r2, [r5, #-32] ++ ldr r1, [r6, #-2528] ++ bl ftl_read_ppa_page ++ cmn r0, #1 ++ cmpne r0, #512 ++ bne .L3553 ++ ldrh r2, [r5, #-14] ++ mov r1, #255 ++ ldr r0, [r6, #-2528] ++ bl ftl_memset ++.L3555: ++ mvn r0, #0 ++ b .L3544 ++.L3553: ++ ldr r3, [r5, #-32] ++ ldr r3, [r3] ++ cmp r7, r3 ++ beq .L3554 ++ b .L3555 ++.L3560: ++ .align 2 ++.L3559: ++ .word .LANCHOR1+2339 ++ .word .LC0 ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LC236 ++ .word .LANCHOR3-2532 ++ .word .LC237 ++ .word .LC238 ++ .word .LC239 ++ .word .LC218 ++ .word .LC240 ++ .fnend ++ .size load_l2p_region, .-load_l2p_region ++ .align 2 ++ .global pm_gc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_gc, %function ++pm_gc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r6, .L3579 ++ ldr r4, .L3579+4 ++ ldr r3, [r6, #2800] ++ add r3, r3, #688 ++ ldrh r2, [r3] ++ ldrh r3, [r4, #-176] ++ sub r3, r3, #1 ++ cmp r2, r3 ++ bge .L3562 ++ ldr r3, [r4, #-184] ++ cmp r3, #0 ++ beq .L3563 ++.L3562: ++ bl pm_free_sblk ++ ldr r2, [r6, #2800] ++ add r3, r2, #688 ++ ldrh r1, [r3] ++ ldrh r3, [r4, #-176] ++ sub r3, r3, #1 ++ cmp r1, r3 ++ bge .L3564 ++ ldr r3, [r4, #-184] ++ cmp r3, #0 ++ beq .L3563 ++.L3564: ++ uxth r0, r0 ++ movw r5, #65535 ++ mov r3, #0 ++ add r0, r0, #208 ++ str r3, [r4, #-184] ++ lsl r0, r0, #1 ++ ldrh r9, [r2, r0] ++ cmp r9, r5 ++ bne .L3566 ++ mov r2, #182 ++ ldr r1, .L3579+8 ++ ldr r0, .L3579+12 ++ bl rk_printk ++ bl dump_stack ++ bl pm_free_sblk ++ uxth r0, r0 ++ ldr r3, [r6, #2800] ++ add r0, r0, #208 ++ lsl r0, r0, #1 ++ ldrh r9, [r3, r0] ++ cmp r9, r5 ++ beq .L3563 ++.L3566: ++ ldr r5, .L3579+16 ++ bl pm_select_ram_region ++ lsl r7, r0, #3 ++ mov r10, r0 ++ movw r3, #65535 ++ ldrh r0, [r5, r7] ++ add r8, r5, r7 ++ add r5, r5, #4 ++ cmp r0, r3 ++ beq .L3567 ++ add r3, r4, r7 ++ ldr r1, [r3, #-2528] ++ cmp r1, #0 ++ beq .L3567 ++ ldrsh r3, [r8, #2] ++ cmp r3, #0 ++ bge .L3567 ++ bl pm_write_page ++ ldrh r3, [r8, #2] ++ ubfx r3, r3, #0, #15 ++ strh r3, [r8, #2] @ movhi ++.L3567: ++ sub r5, r5, #4 ++ mov r8, #0 ++ add r5, r5, r7 ++.L3568: ++ ldr r3, [r6, #2800] ++ movw r1, #698 ++ uxth r2, r8 ++ ldrh r1, [r3, r1] ++ cmp r1, r2 ++ bhi .L3571 ++ bl pm_free_sblk ++.L3563: ++ mov r0, #0 ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3571: ++ ldr r1, .L3579+20 ++ uxth fp, r8 ++ ldrb r0, [r6, #1153] @ zero_extendqisi2 ++ add ip, fp, #176 ++ str r2, [sp, #4] ++ ldrh r1, [r1] ++ ldr r3, [r3, ip, lsl #2] ++ rsb r0, r0, #24 ++ mvn ip, #0 ++ sub r0, r0, r1 ++ lsr r3, r3, r1 ++ ldrb r1, [r4, #-3136] @ zero_extendqisi2 ++ bic r0, r3, ip, lsl r0 ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ ldr r2, [sp, #4] ++ cmp r9, r0 ++ bne .L3569 ++ mov r1, r10 ++ mov r0, r2 ++ bl load_l2p_region ++ cmp r0, #0 ++ bne .L3570 ++ add r3, r4, r7 ++ mov r0, fp ++ ldr r1, [r3, #-2528] ++ bl pm_write_page ++.L3570: ++ mvn r3, #0 ++ strh r3, [r5] @ movhi ++.L3569: ++ add r8, r8, #1 ++ b .L3568 ++.L3580: ++ .align 2 ++.L3579: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR1+2355 ++ .word .LC0 ++ .word .LANCHOR3-2532 ++ .word .LANCHOR3-3138 ++ .fnend ++ .size pm_gc, .-pm_gc ++ .align 2 ++ .global pm_flush_id ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_flush_id, %function ++pm_flush_id: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ lsl r0, r0, #3 ++ ldr r4, .L3587 ++ sub r3, r4, #2528 ++ add r2, r4, r0 ++ sub r3, r3, #4 ++ ldr r1, [r2, #-2528] ++ add r5, r3, r0 ++ ldrh r0, [r3, r0] ++ bl pm_write_page ++ ldrh r3, [r5, #2] ++ ubfx r3, r3, #0, #15 ++ strh r3, [r5, #2] @ movhi ++ ldr r3, [r4, #-36] ++ cmp r3, #0 ++ beq .L3582 ++ bl pm_gc ++ mov r3, #0 ++ str r3, [r4, #-36] ++.L3582: ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L3588: ++ .align 2 ++.L3587: ++ .word .LANCHOR3 ++ .fnend ++ .size pm_flush_id, .-pm_flush_id ++ .align 2 ++ .global pm_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_flush, %function ++pm_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r4, #0 ++ ldr r5, .L3594 ++.L3591: ++ add r3, r5, r4, lsl #3 ++ uxth r0, r4 ++ ldrsh r3, [r3, #2] ++ cmp r3, #0 ++ bge .L3590 ++ bl pm_flush_id ++.L3590: ++ add r4, r4, #1 ++ cmp r4, #32 ++ bne .L3591 ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L3595: ++ .align 2 ++.L3594: ++ .word .LANCHOR3-2532 ++ .fnend ++ .size pm_flush, .-pm_flush ++ .align 2 ++ .global flt_sys_flush ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type flt_sys_flush, %function ++flt_sys_flush: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl ftl_flush ++ bl pm_flush ++ bl ftl_ext_info_flush ++ mov r0, #0 ++ pop {r4, lr} ++ b ftl_info_flush ++ .fnend ++ .size flt_sys_flush, .-flt_sys_flush ++ .align 2 ++ .global zftl_deinit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_deinit, %function ++zftl_deinit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, lr} ++ .save {r4, lr} ++ bl zftl_flash_de_init ++ bl flt_sys_flush ++ pop {r4, lr} ++ b zftl_flash_de_init ++ .fnend ++ .size zftl_deinit, .-zftl_deinit ++ .align 2 ++ .global pm_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_init, %function ++pm_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r5, #0 ++ ldr r8, .L3623 ++ mvn r9, #0 ++ mov r10, r5 ++ mov r3, #1 ++ ldr r4, .L3623+4 ++ .pad #20 ++ sub sp, sp, #20 ++ mov r7, r0 ++ mov r0, #64 ++ str r5, [r4, #-184] ++ str r5, [r4, #-36] ++ strb r3, [r4, #-28] ++ bl ftl_dma32_malloc ++ str r0, [r4, #-32] ++.L3602: ++ cmp r7, #0 ++ mov r6, r8 ++ strh r9, [r6, r5]! @ movhi ++ strh r10, [r6, #2] @ movhi ++ beq .L3601 ++ ldrb r0, [r4, #-2546] @ zero_extendqisi2 ++ lsl r0, r0, #9 ++ bl ftl_dma32_malloc ++ str r0, [r6, #4] ++.L3601: ++ add r5, r5, #8 ++ cmp r5, #256 ++ bne .L3602 ++ ldr r5, .L3623+8 ++ ldr r9, [r4, #-2528] ++ ldr r6, [r4, #-32] ++ ldr r3, [r5, #2800] ++ add r2, r3, #692 ++ ldrb r0, [r3, #694] @ zero_extendqisi2 ++ mov r3, #4 ++ ldrh r1, [r2] ++ str r3, [sp] ++ mov r2, r9 ++ mov r3, r6 ++ bl flash_get_last_written_page ++ ldr r3, [r5, #2800] ++ mov r8, r0 ++ add r2, r3, #696 ++ ldrh r2, [r2] ++ cmp r2, r0 ++ bgt .L3603 ++ add r1, r3, #692 ++ mov r3, r0 ++ ldrh r1, [r1] ++ ldr r0, .L3623+12 ++ bl rk_printk ++ ldr r3, [r5, #2800] ++ add r3, r3, #696 ++ ldrsh r7, [r3] ++ add r3, r8, #1 ++ str r3, [sp, #12] ++.L3604: ++ ldr r3, [sp, #12] ++ cmp r7, r3 ++ blt .L3607 ++ mov r3, #1 ++ ldrh r2, [sp, #12] ++ strb r3, [r4, #-47] ++ ldr r3, [r5, #2800] ++ add r3, r3, #696 ++ strh r2, [r3] @ movhi ++ bl pm_free_sblk ++.L3603: ++ ldrh r2, [r4, #-14] ++ mov r1, #255 ++ ldr r0, [r4, #-2528] ++ bl ftl_memset ++ ldr r1, [r4, #-2528] ++ mvn r0, #0 ++ bl pm_write_page ++ ldrb r3, [r4, #-47] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3608 ++ ldr r1, [r4, #-2528] ++ mvn r0, #0 ++ bl pm_write_page ++ ldr r1, [r4, #-2528] ++ mvn r0, #0 ++ bl pm_write_page ++ ldr r1, [r4, #-2528] ++ mvn r0, #0 ++ bl pm_write_page ++.L3608: ++ bl pm_free_sblk ++ bl pm_gc ++ mov r0, #0 ++ add sp, sp, #20 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3607: ++ ldr r3, [r5, #2800] ++ movw fp, #694 ++ add r2, r3, #692 ++ ldrb r0, [r3, fp] @ zero_extendqisi2 ++ ldrh r8, [r2] ++ ldr r2, .L3623+16 ++ ldrb r3, [r4, #-2546] @ zero_extendqisi2 ++ ldrh r2, [r2] ++ str r3, [sp] ++ mov r3, r6 ++ mla r8, r2, r8, r7 ++ mov r2, r9 ++ mov r1, r8 ++ bl flash_read_page_en ++ ldr r3, [r5, #2800] ++ mov r10, r0 ++ ldr r0, .L3623+20 ++ ldr r2, [r3, #48] ++ add r2, r2, #1 ++ str r2, [r3, #48] ++ mov r2, r8 ++ ldrh r3, [r3, fp] ++ ldr r1, [r6] ++ bl rk_printk ++ cmp r10, #512 ++ cmnne r10, #1 ++ beq .L3605 ++ ldr r2, [r5, #2800] ++ movw r3, #698 ++ ldrh r3, [r2, r3] ++ ldr r2, [r6] ++ cmp r2, r3 ++ bcs .L3605 ++ ldr r10, [r6, #8] ++ cmp r10, #0 ++ beq .L3606 ++ ldrb r1, [r4, #-2546] @ zero_extendqisi2 ++ mov r0, r9 ++ lsl r1, r1, #9 ++ bl js_hash ++ cmp r10, r0 ++ beq .L3606 ++ ldr r1, [r6, #8] ++ ldr r0, .L3623+24 ++ bl rk_printk ++.L3605: ++ add r7, r7, #1 ++ sxth r7, r7 ++ b .L3604 ++.L3606: ++ ldr r3, [r6] ++ ldr r2, [r5, #2800] ++ add r3, r3, #176 ++ str r8, [r2, r3, lsl #2] ++ b .L3605 ++.L3624: ++ .align 2 ++.L3623: ++ .word .LANCHOR3-2532 ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LC241 ++ .word .LANCHOR3-3074 ++ .word .LC242 ++ .word .LC243 ++ .fnend ++ .size pm_init, .-pm_init ++ .align 2 ++ .global pm_log2phys ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type pm_log2phys, %function ++pm_log2phys: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ mov r7, r1 ++ ldr r8, .L3641 ++ mov r6, r0 ++ mov r9, r2 ++ ldr r10, .L3641+4 ++ ldrb r4, [r8, #-2546] @ zero_extendqisi2 ++ lsl r1, r4, #7 ++ lsl r4, r4, #7 ++ bl __aeabi_uidiv ++ str r0, [sp, #4] ++ ldrh fp, [sp, #4] ++ ldr r2, [r10, #2780] ++ smulbb r4, r4, fp ++ cmp r6, r2 ++ sub r4, r6, r4 ++ bcc .L3626 ++ mov r1, r6 ++ ldr r0, .L3641+8 ++ bl rk_printk ++ cmp r9, #0 ++ mvn r0, #0 ++ streq r0, [r7] ++.L3625: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3626: ++ ldr r1, .L3641+12 ++ uxth r4, r4 ++ mov r2, #0 ++ sub r6, r8, #2528 ++.L3632: ++ lsl r0, r2, #3 ++ uxth r5, r2 ++ add ip, r1, r0 ++ ldr ip, [ip, #4] ++ cmp ip, #0 ++ beq .L3628 ++ ldrh r0, [r0, r1] ++ cmp r0, fp ++ bne .L3628 ++.L3629: ++ cmp r9, #0 ++ lsl r5, r5, #3 ++ bne .L3630 ++ add r2, r8, r5 ++ ldr r2, [r2, #-2528] ++ ldr r1, [r2, r4, lsl #2] ++ mvn r2, #0 ++ str r1, [r7] ++ ldrb r0, [r10, #1153] @ zero_extendqisi2 ++ ldrb r3, [r8, #-3072] @ zero_extendqisi2 ++ rsb ip, r0, #24 ++ mvn r2, r2, lsl r0 ++ and r2, r2, r1, lsr ip ++ cmp r2, r3 ++ mvncs r3, #0 ++ strcs r3, [r7] ++.L3631: ++ sub r6, r6, #4 ++ movw r2, #32767 ++ add r6, r6, r5 ++ mov r0, #0 ++ ldrh r3, [r6, #2] ++ ubfx r1, r3, #0, #15 ++ cmp r1, r2 ++ addne r3, r3, #1 ++ strhne r3, [r6, #2] @ movhi ++ b .L3625 ++.L3630: ++ add r2, r8, r5 ++ ldr r1, [r7] ++ ldr r2, [r2, #-2528] ++ ldrb r3, [sp, #4] @ zero_extendqisi2 ++ str r1, [r2, r4, lsl #2] ++ sub r1, r6, #4 ++ add r1, r1, r5 ++ strb r3, [r8, #-2276] ++ ldrh r2, [r1, #2] ++ mvn r2, r2, lsl #17 ++ mvn r2, r2, lsr #17 ++ strh r2, [r1, #2] @ movhi ++ b .L3631 ++.L3628: ++ add r2, r2, #1 ++ cmp r2, #32 ++ bne .L3632 ++ bl pm_select_ram_region ++ lsl r1, r0, #3 ++ sub r2, r6, #4 ++ mov r5, r0 ++ add ip, r2, r1 ++ ldrh r1, [r2, r1] ++ movw r2, #65535 ++ cmp r1, r2 ++ beq .L3633 ++ ldrsh r2, [ip, #2] ++ cmp r2, #0 ++ bge .L3633 ++ bl pm_flush_id ++.L3633: ++ mov r1, r5 ++ mov r0, fp ++ strb r5, [r8, #-12] ++ bl load_l2p_region ++ b .L3629 ++.L3642: ++ .align 2 ++.L3641: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LC244 ++ .word .LANCHOR3-2532 ++ .fnend ++ .size pm_log2phys, .-pm_log2phys ++ .align 2 ++ .global gc_recovery ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_recovery, %function ++gc_recovery: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #65535 ++ ldr r8, .L3744 ++ mov r5, #0 ++ .pad #76 ++ sub sp, sp, #76 ++ ldr r7, .L3744+4 ++ ldr r4, [r8, #1096] ++ strb r5, [r7, #-3119] ++ ldrh r2, [r4, #80] ++ strb r5, [r7, #-144] ++ cmp r2, r3 ++ beq .L3644 ++ mvn r3, #0 ++ mov r0, #1 ++ strh r3, [r4, #130] @ movhi ++ bl buf_alloc ++ ldrb r3, [r4, #89] @ zero_extendqisi2 ++ mov r6, r0 ++ ldrb r1, [r7, #-3128] @ zero_extendqisi2 ++ add r3, r4, r3, lsl #1 ++ cmp r1, #2 ++ ldrh r2, [r3, #94] ++ sub r3, r7, #3072 ++ ldrh r3, [r3, #-2] ++ mul r2, r3, r2 ++ str r2, [sp, #64] ++ beq .L3645 ++ ldrb r3, [r8, #1158] @ zero_extendqisi2 ++ cmp r3, r5 ++ bne .L3645 ++ ldrb r3, [r8, #1159] @ zero_extendqisi2 ++ cmp r3, r5 ++ beq .L3646 ++.L3645: ++ ldr r3, .L3744+8 ++ ldrh r3, [r3, #-14] ++ sub r3, r3, #1 ++ add r3, r3, r2 ++ orr r3, r3, r1, lsl #24 ++.L3734: ++ str r3, [r6, #24] ++.L3647: ++ mov r1, #1 ++ mov r0, r6 ++ bl sblk_read_page ++ ldr r3, [r6, #36] ++ cmn r3, #1 ++ cmpne r3, #512 ++ beq .L3648 ++ ldr r3, [r6, #12] ++ ldr r9, .L3744+12 ++ ldr r3, [r3] ++ cmp r3, r9 ++ beq .L3649 ++.L3648: ++ mov r0, r6 ++ bl zbuf_free ++ ldr r2, [r6, #12] ++ ldr r3, [r6, #4] ++ ldr r0, .L3744+16 ++ ldr r1, [r2, #12] ++ str r1, [sp, #24] ++ ldr r1, [r2, #8] ++ str r1, [sp, #20] ++ ldr r1, [r2, #4] ++ str r1, [sp, #16] ++ ldr r2, [r2] ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r3, [r3] ++ ldr r2, [r6, #36] ++ ldr r1, [r6, #24] ++ bl rk_printk ++.L3742: ++ ldrh r3, [r4, #80] ++ mov r5, #0 ++ ldr r2, [r8, #1092] ++ lsl r3, r3, #1 ++ strh r5, [r2, r3] @ movhi ++ ldrh r2, [r4, #80] ++ ldr r3, [r8, #1096] ++ strh r2, [r3, #130] @ movhi ++.L3650: ++ ldrh r0, [r4, #80] ++ ldr r6, .L3744 ++ ldr r2, [r6, #1092] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ bne .L3694 ++ bl ftl_dump_write_open_sblk ++.L3694: ++ mov r2, r5 ++ ldrh r1, [r4, #80] ++ ldr r0, .L3744+20 ++ bl rk_printk ++ mvn r3, #0 ++ strh r3, [r4, #80] @ movhi ++ bl pm_flush ++ bl ftl_ext_info_flush ++ ldr r3, [r6, #1096] ++ movw r2, #65535 ++ ldrh r3, [r3, #130] ++ cmp r3, r2 ++ beq .L3695 ++ movw r2, #1080 ++ ldrh r2, [r6, r2] ++ cmp r2, r3 ++ bhi .L3696 ++ movw r2, #517 ++ ldr r1, .L3744+24 ++ ldr r0, .L3744+28 ++ bl rk_printk ++ bl dump_stack ++.L3696: ++ ldr r3, [r6, #1096] ++ ldrh r0, [r3, #130] ++ bl ftl_free_sblk ++.L3695: ++ ldr r2, [r6, #2800] ++ mvn r3, #0 ++ mov r0, #0 ++ strh r3, [r2, #126] @ movhi ++ ldr r2, [r6, #1096] ++ strh r3, [r2, #130] @ movhi ++ bl ftl_info_flush ++.L3643: ++ add sp, sp, #76 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3646: ++ cmp r1, #3 ++ bne .L3647 ++ sub r3, r7, #3088 ++ ldrh r3, [r3, #-8] ++ sub r3, r3, #1 ++ add r3, r3, r2 ++ orr r3, r3, #50331648 ++ b .L3734 ++.L3649: ++ ldrb r3, [r7, #-11] @ zero_extendqisi2 ++ ldr r5, .L3744+8 ++ cmp r3, #2 ++ bne .L3651 ++ ldrb r3, [r7, #-3128] @ zero_extendqisi2 ++ cmp r3, #3 ++ bne .L3651 ++ ldrh r2, [r5, #-14] ++ ldrh r0, [r7, #-14] ++ ldr r1, [r6, #4] ++ lsl r3, r2, #2 ++ ldrb r2, [r7, #-3127] @ zero_extendqisi2 ++ smulbb r2, r2, r3 ++ ldr r3, [r7, #-132] ++ sub r2, r2, r0 ++ lsr r0, r0, #2 ++ uxth r2, r2 ++ add r0, r3, r0, lsl #2 ++ bl ftl_memcpy ++ ldrb r3, [r8, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3652 ++ ldrb r3, [r8, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3653 ++.L3652: ++ ldr r3, [r6, #24] ++ sub r3, r3, #1 ++.L3735: ++ str r3, [r6, #24] ++ mov r1, #1 ++ mov r0, r6 ++ bl sblk_read_page ++ ldr r3, [r6, #36] ++ cmn r3, #1 ++ cmpne r3, #512 ++ beq .L3655 ++ ldr r3, [r6, #12] ++ ldr r3, [r3] ++ cmp r3, r9 ++ beq .L3656 ++.L3655: ++ mov r0, r6 ++ bl zbuf_free ++ b .L3742 ++.L3653: ++ ldr r3, [sp, #64] ++ ldrh r2, [r5, #8] ++ sub r3, r3, #1 ++ add r3, r3, r2 ++ orr r3, r3, #33554432 ++ b .L3735 ++.L3656: ++ ldrh r2, [r7, #-14] ++.L3736: ++ ldr r1, [r6, #4] ++ ldr r0, [r7, #-132] ++ bl ftl_memcpy ++ ldrh r3, [r5, #-14] ++ ldrb r2, [r7, #-3127] @ zero_extendqisi2 ++ mul r2, r2, r3 ++ ldrb r3, [r7, #-2546] @ zero_extendqisi2 ++ cmp r3, r2, asr #6 ++ lsl r2, r2, #2 ++ bge .L3658 ++ mov r1, #0 ++ ldr r0, [r7, #-128] ++ bl ftl_memset ++ ldrb r10, [r7, #-11] @ zero_extendqisi2 ++ cmp r10, #1 ++ movne r10, #1 ++ bne .L3737 ++ ldrh r1, [r5, #-14] ++ ldrb r3, [r7, #-3127] @ zero_extendqisi2 ++ ldrh r5, [r7, #-14] ++ ldr r0, [r7, #-128] ++ mul r3, r3, r1 ++ ldr r1, [r6, #4] ++ lsl r3, r3, #2 ++ sub r5, r5, r3 ++ add r1, r1, r3 ++ mov r2, r5 ++ bl ftl_memcpy ++.L3659: ++ ldr r3, .L3744+32 ++ ldrh r3, [r3, #-8] ++ str r3, [sp, #44] ++ ldrb r3, [r7, #-3128] @ zero_extendqisi2 ++ cmp r3, #2 ++ str r3, [sp, #36] ++ bne .L3660 ++ ldrb r3, [r7, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3661 ++.L3660: ++ ldrb r3, [r8, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3662 ++.L3661: ++ ldr r3, [sp, #36] ++ ldr r2, [sp, #44] ++ mul r3, r3, r2 ++ str r3, [sp, #44] ++ mov r3, #1 ++ str r3, [sp, #36] ++.L3662: ++ ldr r8, .L3744+4 ++ mov r7, #0 ++ str r7, [sp, #48] ++.L3663: ++ ldr r3, [sp, #44] ++ cmp r3, r7 ++ bls .L3676 ++ add r3, r7, r7, lsl #1 ++ sub r3, r3, #1 ++ str r3, [sp, #52] ++ mov r3, #0 ++ b .L3739 ++.L3651: ++ ldrh r3, [r5, #-14] ++ ldrb r2, [r7, #-3127] @ zero_extendqisi2 ++ mul r2, r2, r3 ++ lsl r2, r2, #2 ++ b .L3736 ++.L3658: ++ ldr r1, [r6, #4] ++ mov r10, #0 ++ ldr r0, [r7, #-128] ++ add r1, r1, r2 ++ bl ftl_memcpy ++.L3737: ++ mov r5, #0 ++ b .L3659 ++.L3672: ++ ldr r3, [sp, #56] ++ ldrb r1, [r8, #-3128] @ zero_extendqisi2 ++ ldrh r2, [r3, #96] ++ ldr r3, .L3744+36 ++ cmp r1, #2 ++ ldrh r3, [r3, #-2] ++ mul r3, r3, r2 ++ str r3, [sp, #64] ++ beq .L3664 ++ ldr r2, .L3744 ++ ldrb r2, [r2, #1158] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3665 ++.L3664: ++ sub r2, r7, #1 ++ add r3, r2, r3 ++ add r3, r3, fp ++ orr r3, r3, r1, lsl #24 ++.L3738: ++ str r3, [r6, #24] ++ mov r1, #1 ++ mov r0, r6 ++ bl sblk_read_page ++ cmp r10, #0 ++ beq .L3669 ++ ldr r3, [r8, #-128] ++ ldr r2, [r3, r9] ++ cmp r2, #0 ++ ldreq r2, [r6, #12] ++ ldreq r2, [r2, #8] ++ streq r2, [r3, r9] ++.L3669: ++ ldr r3, [r8, #-132] ++ ldr r2, [r6, #12] ++ ldr r3, [r3, r9] ++ ldr r1, [r2, #4] ++ cmp r3, r1 ++ bne .L3670 ++ ldr r0, [r8, #-128] ++ ldr ip, [r0, r9] ++ ldr r0, [r2, #8] ++ cmp ip, r0 ++ beq .L3671 ++.L3670: ++ ldr r0, [r2, #12] ++ str r0, [sp, #16] ++ ldr r0, [r2, #8] ++ str r1, [sp, #8] ++ str r0, [sp, #12] ++ ldr r2, [r2] ++ ldr r0, .L3744+40 ++ str r2, [sp, #4] ++ ldr r2, [r8, #-128] ++ ldr r2, [r2, r9] ++ str r2, [sp] ++ ldr r2, [r6, #36] ++ ldr r1, [r6, #24] ++ bl rk_printk ++ ldr r3, [r8, #-132] ++ ldr r3, [r3, r9] ++ cmn r3, #1 ++ beq .L3671 ++ mov r0, r6 ++ bl zbuf_free ++ ldrh r3, [r4, #80] ++ mov r0, #0 ++ ldr r2, .L3744 ++ ldr r1, [r2, #1092] ++ lsl r3, r3, #1 ++ strh r0, [r1, r3] @ movhi ++ ldrh r1, [r4, #80] ++ ldr r3, [r2, #1096] ++ strh r1, [r3, #130] @ movhi ++ b .L3650 ++.L3665: ++ cmp r1, #3 ++ addne r3, r7, r3 ++ bne .L3738 ++ ldr r2, .L3744 ++ ldrb r2, [r2, #1159] @ zero_extendqisi2 ++ cmp r2, #0 ++ ldrne r2, [sp, #52] ++ addeq r3, r7, r3 ++ orreq r3, r3, fp, lsl #24 ++ addne r3, r3, r2 ++ addne r3, r3, fp ++ orrne r3, r3, #50331648 ++ b .L3738 ++.L3671: ++ ldr r3, [sp, #48] ++ add fp, fp, #1 ++ add r9, r9, #4 ++ add r3, r3, #1 ++ str r3, [sp, #48] ++.L3674: ++ ldr r3, [sp, #36] ++ cmp r3, fp ++ bcs .L3672 ++ ldr r3, [sp, #40] ++ add r3, r3, #1 ++.L3739: ++ str r3, [sp, #40] ++ ldr r2, [sp, #40] ++ ldrb r3, [r4, #89] @ zero_extendqisi2 ++ cmp r2, r3 ++ bge .L3673 ++ ldr r3, [sp, #48] ++ mov fp, #1 ++ lsl r9, r3, #2 ++ add r3, r4, r2, lsl #1 ++ str r3, [sp, #56] ++ b .L3674 ++.L3673: ++ ldrb r3, [r8, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ addne r7, r7, #1 ++ add r7, r7, #1 ++ b .L3663 ++.L3676: ++ mov r0, r6 ++ mov r5, #0 ++ bl zbuf_free ++ ldr r3, .L3744 ++ mov r6, r5 ++ ldrb r1, [r4, #89] @ zero_extendqisi2 ++ mov r10, r5 ++ ldrh r2, [r4, #80] ++ ldr r0, [r3, #1092] ++ ldr r3, .L3744+8 ++ lsl r2, r2, #1 ++ ldrh ip, [r3, #-14] ++ add r9, r3, #3104 ++ smulbb r1, r1, ip ++ strh r1, [r0, r2] @ movhi ++.L3678: ++ ldr r3, [sp, #44] ++ cmp r3, r6 ++ bls .L3692 ++ add r2, r6, r6, lsl #1 ++ sub r3, r2, #1 ++ str r3, [sp, #52] ++ mov r3, #0 ++ b .L3741 ++.L3688: ++ ldr r2, [r9, #-132] ++ ldr fp, [r2, r10, lsl #2] ++ cmn fp, #1 ++ beq .L3679 ++ ldr r2, [r9, #-128] ++ mov r0, fp ++ ldr r3, [r2, r10, lsl #2] ++ str r3, [sp, #48] ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #68] ++ bne .L3680 ++ mov r2, #0 ++ add r1, sp, #68 ++ mov r0, fp ++ bl pm_log2phys ++.L3680: ++ ldr r3, [sp, #56] ++ ldr r1, .L3744+44 ++ ldrb r0, [r9, #-3128] @ zero_extendqisi2 ++ ldrh r2, [r3, #96] ++ ldrh r1, [r1] ++ cmp r0, #2 ++ mul r2, r1, r2 ++ beq .L3681 ++ ldr r1, .L3744 ++ ldrb ip, [r1, #1158] @ zero_extendqisi2 ++ cmp ip, #0 ++ beq .L3682 ++.L3681: ++ sub r1, r6, #1 ++ add r2, r1, r2 ++ add r2, r2, r8 ++ orr r2, r2, r0, lsl #24 ++.L3740: ++ str r2, [sp, #64] ++ ldr r2, .L3744+48 ++ ldr r3, [sp, #48] ++ ldrb r1, [r9, #-3136] @ zero_extendqisi2 ++ ldrh ip, [r2, #-2] ++ ldr r2, .L3744 ++ ldrb r0, [r2, #1153] @ zero_extendqisi2 ++ mov r2, #1 ++ str r2, [sp, #60] ++ rsb r0, r0, #24 ++ sub r0, r0, ip ++ lsl r0, r2, r0 ++ sub r0, r0, #1 ++ and r0, r0, r3, lsr ip ++ bl __aeabi_uidiv ++ ldr r1, [sp, #68] ++ mov r7, r0 ++ ldr r3, [sp, #48] ++ ldr r2, [sp, #60] ++ cmp r3, r1 ++ bne .L3686 ++ add r1, sp, #64 ++ mov r0, fp ++ bl pm_log2phys ++ uxth r0, r7 ++ add r5, r5, #1 ++ bl ftl_vpn_decrement ++.L3687: ++ ldr r1, .L3744 ++ uxth r7, r7 ++ add r10, r10, #1 ++ ldr r2, [r1, #1084] ++ add r2, r2, r7, lsl #2 ++ ldrb r2, [r2, #2] @ zero_extendqisi2 ++ ands r0, r2, #224 ++ bne .L3679 ++ ldr r2, [r1, #1092] ++ lsl r7, r7, #1 ++ ldrh r1, [r2, r7] ++ cmp r1, #0 ++ strhne r0, [r2, r7] @ movhi ++.L3679: ++ add r8, r8, #1 ++.L3690: ++ ldr r3, [sp, #36] ++ cmp r3, r8 ++ bcs .L3688 ++ ldr r3, [sp, #40] ++ add r3, r3, #1 ++.L3741: ++ str r3, [sp, #40] ++ ldrb r2, [r4, #89] @ zero_extendqisi2 ++ ldr r3, [sp, #40] ++ cmp r3, r2 ++ bge .L3689 ++ add r3, r4, r3, lsl #1 ++ mov r8, #1 ++ str r3, [sp, #56] ++ b .L3690 ++.L3682: ++ cmp r0, #3 ++ addne r2, r6, r2 ++ bne .L3740 ++ ldrb r1, [r1, #1159] @ zero_extendqisi2 ++ cmp r1, #0 ++ lsl r1, r8, #24 ++ ldrne r3, [sp, #52] ++ addeq r2, r6, r2 ++ addne r2, r2, r3 ++ addne r2, r2, r8 ++ orr r2, r2, r1 ++ b .L3740 ++.L3686: ++ ldr r2, [sp, #64] ++ cmp r1, r2 ++ addeq r5, r5, #1 ++ b .L3687 ++.L3689: ++ ldrb r2, [r9, #-3126] @ zero_extendqisi2 ++ cmp r2, #0 ++ addne r6, r6, #1 ++ add r6, r6, #1 ++ b .L3678 ++.L3692: ++ ldrh r3, [r4, #80] ++ ldr r2, .L3744 ++ ldr r2, [r2, #1092] ++ lsl r3, r3, #1 ++ strh r5, [r2, r3] @ movhi ++ ldrh r0, [r4, #80] ++ bl zftl_insert_data_list ++ b .L3650 ++.L3644: ++ ldrh r3, [r4, #130] ++ cmp r3, r2 ++ beq .L3643 ++ ldr r2, [r8, #2800] ++ ldrh r2, [r2, #126] ++ cmp r2, r3 ++ bne .L3698 ++ bl pm_flush ++ ldr r3, [r8, #1096] ++ ldrh r0, [r3, #130] ++ bl ftl_free_sblk ++ ldr r3, [r8, #2800] ++ mvn r2, #0 ++ mov r0, r5 ++ strh r2, [r3, #126] @ movhi ++ bl ftl_info_flush ++.L3698: ++ ldr r3, [r8, #1096] ++ mvn r2, #0 ++ strh r2, [r3, #130] @ movhi ++ b .L3643 ++.L3745: ++ .align 2 ++.L3744: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3104 ++ .word -178307901 ++ .word .LC245 ++ .word .LC247 ++ .word .LANCHOR1+2361 ++ .word .LC0 ++ .word .LANCHOR3-3088 ++ .word .LANCHOR3-3072 ++ .word .LC246 ++ .word .LANCHOR3-3074 ++ .word .LANCHOR3-3136 ++ .fnend ++ .size gc_recovery, .-gc_recovery ++ .align 2 ++ .global gc_update_l2p_map_new ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_update_l2p_map_new, %function ++gc_update_l2p_map_new: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, .L3781 ++ ldr r3, .L3781+4 ++ ldr r5, [r4, #1096] ++ ldrh r3, [r3, #-14] ++ ldrb r2, [r5, #89] @ zero_extendqisi2 ++ mul r3, r2, r3 ++ str r3, [sp] ++ ldr r3, .L3781+8 ++ ldr r2, [r3] ++ mov fp, r3 ++ tst r2, #256 ++ beq .L3747 ++ ldrh r1, [r5, #80] ++ ldr r0, .L3781+12 ++ bl rk_printk ++.L3747: ++ ldr r2, .L3781+16 ++ mov r7, #0 ++ ldrh r3, [r5, #80] ++ mov r6, r7 ++ ldr r0, [sp] ++ ldrb r2, [r2, #-11] @ zero_extendqisi2 ++ ldr r8, .L3781+16 ++ ldr r1, [r4, #1092] ++ lsl r3, r3, #1 ++ sub r2, r0, r2 ++ strh r2, [r1, r3] @ movhi ++.L3748: ++ ldr r3, [sp] ++ cmp r6, r3 ++ bne .L3757 ++ ldr r3, [fp] ++ tst r3, #256 ++ beq .L3758 ++ ldrh r2, [r5, #80] ++ mov r3, r7 ++ ldr r0, [r4, #1092] ++ ldr r1, [r4, #1096] ++ lsl r2, r2, #1 ++ ldrh r1, [r1, #80] ++ ldrh r2, [r0, r2] ++ ldr r0, .L3781+20 ++ bl rk_printk ++.L3758: ++ ldrh r3, [r5, #80] ++ ldr r2, [r4, #1092] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r7, r3 ++ beq .L3759 ++ movw r2, #898 ++ ldr r1, .L3781+24 ++ ldr r0, .L3781+28 ++ bl rk_printk ++ bl dump_stack ++.L3759: ++ ldrh r3, [r5, #80] ++ ldr r2, [r4, #1092] ++ lsl r3, r3, #1 ++ strh r7, [r2, r3] @ movhi ++ ldrh r0, [r5, #80] ++ bl zftl_insert_data_list ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3757: ++ ldr r3, [r8, #-132] ++ lsl r9, r6, #2 ++ ldr r10, [r3, r6, lsl #2] ++ cmn r10, #1 ++ beq .L3749 ++ ldrb r1, [r8, #-2546] @ zero_extendqisi2 ++ mov r0, r10 ++ lsl r1, r1, #7 ++ bl __aeabi_uidiv ++ uxth r3, r0 ++ str r3, [sp, #12] ++ ldr r3, [fp] ++ tst r3, #256 ++ beq .L3750 ++ mov r3, r6 ++ mov r2, r10 ++ ldr r1, [sp, #12] ++ ldr r0, .L3781+32 ++ bl rk_printk ++.L3750: ++ str r6, [sp, #8] ++.L3756: ++ ldr r3, [r8, #-132] ++ ldr r10, [r3, r9] ++ cmn r10, #1 ++ beq .L3751 ++ ldrb r1, [r8, #-2546] @ zero_extendqisi2 ++ mov r0, r10 ++ lsl r1, r1, #7 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #12] ++ uxth r0, r0 ++ cmp r3, r0 ++ bne .L3751 ++ ldr r3, [r8, #-128] ++ mov r0, r10 ++ ldr r3, [r3, r9] ++ str r3, [sp, #4] ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #20] ++ bne .L3752 ++ mov r2, #0 ++ add r1, sp, #20 ++ mov r0, r10 ++ bl pm_log2phys ++.L3752: ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #4] ++ cmp r2, r3 ++ bne .L3753 ++ ldr r3, .L3781+16 ++ add r1, sp, #24 ++ mov r2, #1 ++ mov r0, r10 ++ add r7, r7, #1 ++ ldr r3, [r3, #-124] ++ ldr r3, [r3, r9] ++ str r3, [r1, #-8]! ++ bl pm_log2phys ++ ldr r3, .L3781+36 ++ ldr r2, [sp, #4] ++ ldrh r0, [r3] ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ rsb r3, r3, #24 ++ sub r3, r3, r0 ++ lsr r0, r2, r0 ++ ldr r2, .L3781+16 ++ ldrb r1, [r2, #-3136] @ zero_extendqisi2 ++ mvn r2, #0 ++ bic r0, r0, r2, lsl r3 ++ bl __aeabi_uidiv ++ uxth r0, r0 ++.L3780: ++ bl ftl_vpn_decrement ++ ldr r3, [r8, #-132] ++ mvn r2, #0 ++ str r2, [r3, r9] ++.L3751: ++ ldr r3, [sp, #8] ++ add r9, r9, #4 ++ add r3, r3, #1 ++ str r3, [sp, #8] ++ ldr r2, [sp, #8] ++ ldr r3, [sp] ++ cmp r3, r2 ++ bne .L3756 ++.L3749: ++ add r6, r6, #1 ++ b .L3748 ++.L3753: ++ ldr r2, [fp] ++ tst r2, #256 ++ beq .L3755 ++ ldr r2, [sp, #4] ++ mov r1, r10 ++ ldr r0, .L3781+40 ++ bl rk_printk ++.L3755: ++ ldrh r0, [r5, #80] ++ b .L3780 ++.L3782: ++ .align 2 ++.L3781: ++ .word .LANCHOR0 ++ .word .LANCHOR3-3104 ++ .word .LANCHOR2 ++ .word .LC248 ++ .word .LANCHOR3 ++ .word .LC251 ++ .word .LANCHOR1+2373 ++ .word .LC0 ++ .word .LC249 ++ .word .LANCHOR3-3138 ++ .word .LC250 ++ .fnend ++ .size gc_update_l2p_map_new, .-gc_update_l2p_map_new ++ .align 2 ++ .global gc_scan_src_blk_one_page ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_scan_src_blk_one_page, %function ++gc_scan_src_blk_one_page: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ .pad #8 ++ mov r1, #0 ++ ldr r5, .L3810 ++ mov lr, r1 ++ movw r0, #65535 ++ ldr r4, .L3810+4 ++ ldrb r3, [r5, #2828] @ zero_extendqisi2 ++ ldr r7, .L3810+8 ++ add r2, r4, r3, lsl #1 ++ ldrb ip, [r7, #-3127] @ zero_extendqisi2 ++ ldrh r8, [r2, #36] ++ ldrh r2, [r4, #2] ++.L3784: ++ cmp r8, r0 ++ beq .L3786 ++ cmp lr, #0 ++ mov r0, #1 ++ strhne r2, [r4, #2] @ movhi ++ cmp r1, #0 ++ strbne r3, [r5, #2828] ++ mov r9, #1 ++ bl buf_alloc ++ mov r6, r0 ++.L3789: ++ ldrb r1, [r5, #2830] @ zero_extendqisi2 ++ cmp r9, r1 ++ ble .L3799 ++ mov r0, r6 ++ bl zbuf_free ++ ldrb r3, [r5, #2828] @ zero_extendqisi2 ++ ldrb r2, [r7, #-3127] @ zero_extendqisi2 ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r2, r3 ++ strb r3, [r5, #2828] ++ ldrheq r3, [r4, #2] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #2] @ movhi ++ moveq r3, #0 ++ strbeq r3, [r5, #2828] ++ add sp, sp, #8 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L3786: ++ add r3, r3, #1 ++ uxtb r3, r3 ++ cmp r3, ip ++ moveq r3, #0 ++ addeq r2, r2, #1 ++ add r1, r4, r3, lsl #1 ++ uxtheq r2, r2 ++ ldrh r8, [r1, #36] ++ moveq lr, #1 ++ mov r1, #1 ++ b .L3784 ++.L3799: ++ ldr r3, .L3810+12 ++ cmp r1, #2 ++ ldrh r3, [r3] ++ mul r2, r8, r3 ++ ldrheq r3, [r4, #2] ++ addeq r3, r2, r3, lsl #1 ++ subeq r3, r3, #1 ++ beq .L3809 ++ cmp r1, #3 ++ ldrhne r3, [r4, #2] ++ addne r3, r3, r2 ++ bne .L3808 ++ ldrb r3, [r5, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3793 ++ ldrb r3, [r5, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrheq r3, [r4, #2] ++ addeq r3, r3, r2 ++ orreq r3, r3, r9, lsl #24 ++ beq .L3808 ++.L3793: ++ ldrh r3, [r4, #2] ++ add r3, r3, r3, lsl #1 ++ sub r3, r3, #1 ++ add r3, r3, r2 ++.L3809: ++ ldrb r2, [r7, #-3128] @ zero_extendqisi2 ++ add r3, r3, r9 ++ orr r3, r3, r2, lsl #24 ++.L3808: ++ str r3, [r6, #24] ++ mov r1, #1 ++ mov r0, r6 ++ bl sblk_read_page ++ ldr r3, [r6, #36] ++ cmp r3, #512 ++ cmnne r3, #1 ++ beq .L3796 ++ ldr r3, [r6, #12] ++ ldr r10, [r3, #4] ++ mov r0, r10 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #4] ++ bne .L3797 ++ ldr r3, [r5, #2780] ++ cmp r10, r3 ++ bcs .L3797 ++ mov r2, #0 ++ add r1, sp, #4 ++ mov r0, r10 ++ bl pm_log2phys ++.L3797: ++ ldr r3, [r6, #24] ++ ldr r2, [sp, #4] ++ cmp r3, r2 ++ ldrheq r1, [r4, #20] ++ ldreq r2, [r7, #-3132] ++ streq r3, [r2, r1, lsl #2] ++ ldrheq r3, [r4, #20] ++ addeq r3, r3, #1 ++ strheq r3, [r4, #20] @ movhi ++.L3796: ++ ldrh r3, [r4, #22] ++ add r9, r9, #1 ++ add r3, r3, #1 ++ strh r3, [r4, #22] @ movhi ++ b .L3789 ++.L3811: ++ .align 2 ++.L3810: ++ .word .LANCHOR0 ++ .word .LANCHOR0+2824 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3074 ++ .fnend ++ .size gc_scan_src_blk_one_page, .-gc_scan_src_blk_one_page ++ .align 2 ++ .global gc_scan_src_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_scan_src_blk, %function ++gc_scan_src_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #2824 ++ ldr r4, .L3867 ++ .pad #28 ++ sub sp, sp, #28 ++ ldrh r2, [r4, r3] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L3813 ++ movw r2, #1505 ++ ldr r1, .L3867+4 ++ ldr r0, .L3867+8 ++ bl rk_printk ++ bl dump_stack ++.L3813: ++ movw r3, #2824 ++ ldrh r1, [r4, r3] ++ movw r3, #65535 ++ cmp r1, r3 ++ moveq r0, #0 ++ beq .L3812 ++ ldr r3, .L3867+12 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L3815 ++ ldr r2, [r4, #1092] ++ lsl r3, r1, #1 ++ ldr r0, .L3867+16 ++ ldrh r2, [r2, r3] ++ bl rk_printk ++.L3815: ++ ldr r7, .L3867+20 ++ movw r5, #2824 ++ bl timer_get_time ++ ldrh r0, [r4, r5] ++ add r1, r7, #36 ++ bl ftl_get_blk_list_in_sblk ++ uxtb r0, r0 ++ cmp r0, #0 ++ strb r0, [r4, #2829] ++ mvneq r3, #0 ++ strheq r3, [r4, r5] @ movhi ++ beq .L3812 ++ ldrh r3, [r4, r5] ++ ldr r2, [r4, #1084] ++ add r2, r2, r3, lsl #2 ++ ldrb r2, [r2, #2] @ zero_extendqisi2 ++ and r2, r2, #224 ++ cmp r2, #32 ++ beq .L3817 ++ cmp r2, #0 ++ cmpne r2, #224 ++ beq .L3818 ++ ldr r2, [r4, #1096] ++ ldrh r1, [r2, #16] ++ cmp r1, r3 ++ beq .L3817 ++ ldrh r1, [r2, #48] ++ cmp r1, r3 ++ beq .L3817 ++ ldrh r2, [r2, #80] ++ cmp r2, r3 ++ bne .L3860 ++.L3817: ++ mvn r2, #0 ++ movw r3, #2824 ++ mov r0, #0 ++ strh r2, [r4, r3] @ movhi ++ strh r0, [r7, #20] @ movhi ++.L3812: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3818: ++ cmp r2, #0 ++ bne .L3817 ++ ldr r2, [r4, #1092] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L3820 ++ movw r2, #1530 ++ ldr r1, .L3867+4 ++ ldr r0, .L3867+8 ++ bl rk_printk ++ bl dump_stack ++.L3820: ++ movw r3, #2824 ++ ldr r2, [r4, #1092] ++ ldrh r3, [r4, r3] ++ mov r1, #0 ++ lsl r3, r3, #1 ++ strh r1, [r2, r3] @ movhi ++ b .L3817 ++.L3860: ++ add r0, r7, r0, lsl #1 ++ movw r3, #65535 ++ ldrh r10, [r0, #34] ++ cmp r10, r3 ++ bne .L3821 ++ movw r2, #1540 ++ ldr r1, .L3867+4 ++ ldr r0, .L3867+8 ++ bl rk_printk ++ bl dump_stack ++.L3821: ++ movw r2, #2824 ++ ldr r8, .L3867+24 ++ ldrh r0, [r4, r2] ++ ldr r2, [r4, #1084] ++ sub r1, r8, #3072 ++ sub fp, r8, #3088 ++ ldrh r6, [fp, #-8] ++ ldrh r3, [r1, #-2] ++ add r2, r2, r0, lsl #2 ++ str r1, [sp, #4] ++ sub r6, r6, #1 ++ ldrb r2, [r2, #2] @ zero_extendqisi2 ++ uxth r6, r6 ++ mul r3, r10, r3 ++ and r2, r2, #224 ++ cmp r2, #160 ++ movne r9, #1 ++ bne .L3822 ++ ldrb r2, [r8, #-3128] @ zero_extendqisi2 ++ cmp r2, #2 ++ uxth r9, r2 ++ orr r3, r3, r2, lsl #24 ++ subeq r2, r8, #3104 ++ ldrheq r6, [r2, #-14] ++ ldrb r2, [r4, #1158] @ zero_extendqisi2 ++ subeq r6, r6, #1 ++ uxtheq r6, r6 ++ cmp r2, #0 ++ bne .L3824 ++ ldrb r2, [r4, #1159] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L3822 ++.L3824: ++ ldr r2, .L3867+28 ++ ldrh r6, [r2, #-14] ++ sub r6, r6, #1 ++ uxth r6, r6 ++.L3822: ++ orr r6, r6, r3 ++ strb r9, [r4, #2830] ++ mov r3, #0 ++ mov r0, #1 ++ strh r3, [r7, #2] @ movhi ++ strb r3, [r4, #2828] ++ strh r3, [r7, #22] @ movhi ++ strh r3, [r7, #24] @ movhi ++ str r3, [sp] ++ bl buf_alloc ++ mov r1, #1 ++ str r6, [r0, #24] ++ mov r5, r0 ++ bl sblk_read_page ++ ldr r3, [sp] ++ strh r3, [r7, #20] @ movhi ++ ldr r3, [r5, #36] ++ cmn r3, #1 ++ cmpne r3, #512 ++ bne .L3825 ++.L3865: ++ mov r0, r5 ++ bl zbuf_free ++.L3863: ++ mvn r0, #0 ++ b .L3812 ++.L3825: ++ ldr r1, [r5, #12] ++ ldr r3, .L3867+32 ++ ldr r2, [r1] ++ str r3, [sp, #8] ++ cmp r2, r3 ++ beq .L3826 ++ movw r2, #1578 ++.L3866: ++ ldr r1, .L3867+4 ++ ldr r0, .L3867+8 ++ bl rk_printk ++ bl dump_stack ++ b .L3865 ++.L3826: ++ ldrb r2, [r8, #-3127] @ zero_extendqisi2 ++ ldrh r3, [fp, #-8] ++ smulbb r3, r3, r2 ++ smulbb r3, r3, r9 ++ uxth r3, r3 ++ str r3, [sp] ++ ldrb r3, [r8, #-11] @ zero_extendqisi2 ++ cmp r3, #2 ++ cmpeq r9, #3 ++ bne .L3827 ++ ldr r3, .L3867+28 ++ ldrh r0, [r8, #-14] ++ ldr r1, [r5, #4] ++ ldrh r9, [r3, #-14] ++ ldr r3, [r8, #-3132] ++ lsl r9, r9, #2 ++ smulbb r9, r9, r2 ++ sub r9, r9, r0 ++ lsr r0, r0, #2 ++ uxth r9, r9 ++ add r0, r3, r0, lsl #2 ++ mov r2, r9 ++ bl ftl_memcpy ++ ldr r3, [r5, #12] ++ ldr r3, [r3, #4] ++ cmp r3, #0 ++ beq .L3828 ++ mov r1, r9 ++ ldr r0, [r5, #4] ++ str r3, [sp, #12] ++ bl js_hash ++ ldr r3, [sp, #12] ++ cmp r3, r0 ++ beq .L3828 ++ mov r0, r5 ++ bl zbuf_free ++ ldr r1, [r5, #12] ++ mov r3, r9 ++.L3864: ++ ldr r2, [r5, #24] ++ ldr r1, [r1, #4] ++ ldr r0, .L3867+36 ++ bl rk_printk ++ b .L3863 ++.L3828: ++ ldrb r3, [r4, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3829 ++ ldrb r3, [r4, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L3830 ++.L3829: ++ sub r6, r6, #1 ++ str r6, [r5, #24] ++.L3831: ++ mov r1, #1 ++ mov r0, r5 ++ bl sblk_read_page ++ ldr r3, [r5, #36] ++ cmn r3, #1 ++ cmpne r3, #512 ++ beq .L3865 ++ ldr r3, [r5, #12] ++ ldr r2, [sp, #8] ++ ldr r3, [r3] ++ cmp r3, r2 ++ movwne r2, #1619 ++ ldrheq r2, [r8, #-14] ++ bne .L3866 ++.L3862: ++ ldr r1, [r5, #4] ++ mov r9, #0 ++ ldr r0, [r8, #-3132] ++ mov r10, #1 ++ bl ftl_memcpy ++ ldr r6, [r8, #-3132] ++ sub r6, r6, #4 ++.L3836: ++ ldr r3, [sp] ++ cmp r9, r3 ++ blt .L3841 ++ mov r0, r5 ++ bl zbuf_free ++ movw r3, #2824 ++ ldr r2, [r4, #1092] ++ ldrh r1, [r4, r3] ++ lsl r3, r1, #1 ++ ldrh r2, [r2, r3] ++ ldrh r3, [r7, #20] ++ cmp r2, r3 ++ beq .L3842 ++ ldr r0, .L3867+40 ++ bl rk_printk ++.L3842: ++ movw r3, #2824 ++ ldrh r1, [r7, #20] ++ ldrh r3, [r4, r3] ++ ldr r2, [r4, #1092] ++ lsl r3, r3, #1 ++ strh r1, [r2, r3] @ movhi ++ mov r3, #0 ++ strh r3, [r7, #24] @ movhi ++ ldrh r0, [r7, #20] ++ b .L3812 ++.L3830: ++ ldr r2, [sp, #4] ++ ldrh r3, [fp, #-8] ++ ldrh r2, [r2, #-2] ++ sub r3, r3, #1 ++ uxth r3, r3 ++ mul r10, r10, r2 ++ orr r3, r3, #33554432 ++ orr r10, r3, r10 ++ str r10, [r5, #24] ++ b .L3831 ++.L3827: ++ ldr r3, [sp] ++ ldr r9, [r1, #4] ++ ldr r0, [r5, #4] ++ lsl r6, r3, #2 ++ mov r1, r6 ++ bl js_hash ++ cmp r9, r0 ++ moveq r2, r6 ++ beq .L3862 ++ mov r0, r5 ++ bl zbuf_free ++ ldr r1, [r5, #12] ++ mov r3, r6 ++ b .L3864 ++.L3841: ++ ldr r0, [r6, #4]! ++ cmn r0, #1 ++ beq .L3838 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #20] ++ bne .L3839 ++ mov r2, #0 ++ add r1, sp, #20 ++ ldr r0, [r6] ++ bl pm_log2phys ++.L3839: ++ ldr r3, .L3867+44 ++ ldr fp, [sp, #20] ++ ldrb r1, [r8, #-3136] @ zero_extendqisi2 ++ ldrh r0, [r3] ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ rsb r3, r3, #24 ++ sub r3, r3, r0 ++ lsl r3, r10, r3 ++ sub r3, r3, #1 ++ and r0, r3, fp, lsr r0 ++ bl __aeabi_uidiv ++ ldrh r3, [r7] ++ cmp r0, r3 ++ ldreq r3, [r8, #-3132] ++ ldrheq r2, [r7, #20] ++ streq fp, [r3, r2, lsl #2] ++ ldrheq r3, [r7, #20] ++ addeq r3, r3, #1 ++ strheq r3, [r7, #20] @ movhi ++.L3838: ++ bl timer_get_time ++ add r9, r9, #1 ++ b .L3836 ++.L3868: ++ .align 2 ++.L3867: ++ .word .LANCHOR0 ++ .word .LANCHOR1+2395 ++ .word .LC0 ++ .word .LANCHOR2 ++ .word .LC252 ++ .word .LANCHOR0+2824 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3104 ++ .word -178307901 ++ .word .LC253 ++ .word .LC254 ++ .word .LANCHOR3-3138 ++ .fnend ++ .size gc_scan_src_blk, .-gc_scan_src_blk ++ .align 2 ++ .global gc_scan_static_data ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_scan_static_data, %function ++gc_scan_static_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r4, .L3886 ++ ldr r3, [r4, #1096] ++ ldr r2, [r3, #544] ++ cmn r2, #1 ++ beq .L3870 ++ ldr r6, .L3886+4 ++ mov r7, #0 ++ ldr r9, .L3886+8 ++ sub r10, r6, #3136 ++.L3878: ++ ldr r3, [r4, #1096] ++ mov r2, #0 ++ add r1, sp, #4 ++ uxth r8, r7 ++ ldr r0, [r3, #544] ++ bl pm_log2phys ++ ldr r3, [sp, #4] ++ cmn r3, #1 ++ beq .L3871 ++ mov r0, #1 ++ bl buf_alloc ++ ldr r3, [sp, #4] ++ mov r5, r0 ++ mov r1, #1 ++ str r3, [r0, #24] ++ bl sblk_read_page ++ ldr r3, [r5, #36] ++ cmp r3, #256 ++ bne .L3872 ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ mov fp, #1 ++ ldrh r2, [r10, #-2] ++ ldr r0, [sp, #4] ++ rsb r3, r3, #24 ++ ldrb r1, [r6, #-3136] @ zero_extendqisi2 ++ sub r3, r3, r2 ++ lsl r3, fp, r3 ++ sub r3, r3, #1 ++ and r0, r3, r0, lsr r2 ++ bl __aeabi_uidiv ++ mov r2, #0 ++ mov r1, fp ++ uxth r0, r0 ++ bl gc_add_sblk ++.L3872: ++ ldr r2, [r5, #12] ++ ldr r3, [r4, #1096] ++ ldr r2, [r2, #4] ++ ldr r3, [r3, #544] ++ cmp r2, r3 ++ beq .L3873 ++ movw r2, #2163 ++ mov r1, r9 ++ ldr r0, .L3886+12 ++ bl rk_printk ++ bl dump_stack ++.L3873: ++ mov r0, r5 ++ bl zbuf_free ++.L3871: ++ ldr r3, [r4, #1096] ++ ldr r1, [r4, #2780] ++ ldr r2, [r3, #544] ++ add r2, r2, #1 ++ cmp r2, r1 ++ str r2, [r3, #544] ++ bcc .L3874 ++ mvn r2, #0 ++ str r2, [r3, #544] ++ ldr r2, [r3, #548] ++ add r2, r2, #1 ++ str r2, [r3, #548] ++ bl ftl_flush ++ bl pm_flush ++ bl ftl_ext_info_flush ++ mov r0, #0 ++ bl ftl_info_flush ++.L3869: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3874: ++ ldr r3, [sp, #4] ++ cmn r3, #1 ++ bne .L3869 ++ ldrh r3, [r6, #-14] ++ add r7, r7, #1 ++ cmp r8, r3, lsr #2 ++ bcc .L3878 ++ b .L3869 ++.L3870: ++ ldr r2, [r3, #536] ++ ldr r1, [r3, #12] ++ add r2, r2, #12910592 ++ add r2, r2, #49408 ++ cmp r1, r2 ++ bhi .L3880 ++ ldr r0, [r4, #2800] ++ ldr r2, [r3, #540] ++ ldr r0, [r0, #44] ++ add r2, r2, #4992 ++ add r2, r2, #8 ++ cmp r0, r2 ++ bls .L3869 ++.L3880: ++ ldr r2, [r4, #2800] ++ ldr r2, [r2, #44] ++ str r1, [r3, #536] ++ str r2, [r3, #540] ++ mov r2, #0 ++ str r2, [r3, #544] ++ b .L3869 ++.L3887: ++ .align 2 ++.L3886: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR1+2411 ++ .word .LC0 ++ .fnend ++ .size gc_scan_static_data, .-gc_scan_static_data ++ .align 2 ++ .global gc_block_vpn_scan ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_block_vpn_scan, %function ++gc_block_vpn_scan: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 32 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r5, #1080 ++ ldr r4, .L3922 ++ .pad #44 ++ sub sp, sp, #44 ++ ldr r2, [r4, #1096] ++ ldrh r3, [r4, r5] ++ ldr r2, [r2, #608] ++ cmp r2, r3 ++ bcs .L3888 ++ bl timer_get_time ++ ldr r6, [r4, #1096] ++ ldr r3, [r6, #604] ++ add r3, r3, #29952 ++ add r3, r3, #48 ++ cmp r0, r3 ++ bls .L3888 ++ bl timer_get_time ++ ldr r3, [r4, #1096] ++ str r0, [r6, #604] ++ ldrh r1, [r4, r5] ++ ldr r2, [r3, #600] ++ cmp r2, r1 ++ bcs .L3890 ++ ldr r1, [r4, #2800] ++ ldrh r1, [r1, #134] ++ cmp r2, r1 ++ bcs .L3891 ++.L3890: ++ ldr r2, [r4, #2800] ++ ldrh r2, [r2, #134] ++ str r2, [r3, #600] ++.L3891: ++ ldr r5, [r3, #600] ++ movw r3, #65535 ++ uxth r7, r5 ++ cmp r7, r3 ++ bne .L3892 ++ movw r2, #2504 ++ ldr r1, .L3922+4 ++ ldr r0, .L3922+8 ++ bl rk_printk ++ bl dump_stack ++.L3892: ++ ldr r3, [r4, #1096] ++ add r1, sp, #24 ++ mov r0, r7 ++ ldr r2, [r3, #600] ++ add r2, r2, #1 ++ str r2, [r3, #600] ++ ldr r2, [r3, #608] ++ add r2, r2, #1 ++ str r2, [r3, #608] ++ bl ftl_get_blk_list_in_sblk ++ uxth r3, r0 ++ cmp r3, #0 ++ beq .L3888 ++ ldr r10, [r4, #1084] ++ uxth r5, r5 ++ add r10, r10, r5, lsl #2 ++ ldrb r3, [r10, #2] @ zero_extendqisi2 ++ and r2, r3, #224 ++ and r3, r3, #192 ++ cmp r3, #0 ++ cmpne r2, #224 ++ beq .L3893 ++ ldr r3, [r4, #1096] ++ ldrh r1, [r3, #16] ++ cmp r1, r7 ++ beq .L3893 ++ ldrh r1, [r3, #48] ++ cmp r1, r7 ++ beq .L3893 ++ ldrh r3, [r3, #80] ++ cmp r3, r7 ++ bne .L3894 ++.L3893: ++ cmp r2, #0 ++ bne .L3888 ++ ldr r3, [r4, #1092] ++ lsl r5, r5, #1 ++ ldrh r3, [r3, r5] ++ cmp r3, #0 ++ beq .L3895 ++ movw r2, #2521 ++ ldr r1, .L3922+4 ++ ldr r0, .L3922+8 ++ bl rk_printk ++ bl dump_stack ++.L3895: ++ ldr r3, [r4, #1092] ++ mov r2, #0 ++ strh r2, [r3, r5] @ movhi ++.L3888: ++ add sp, sp, #44 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3894: ++ uxth r0, r0 ++ add r3, sp, #40 ++ add r0, r3, r0, lsl #1 ++ movw r3, #65535 ++ ldrh r8, [r0, #-18] ++ cmp r8, r3 ++ bne .L3897 ++ movw r2, #2529 ++ ldr r1, .L3922+4 ++ ldr r0, .L3922+8 ++ bl rk_printk ++ bl dump_stack ++.L3897: ++ ldr r6, .L3922+12 ++ sub fp, r6, #3088 ++ ldrh r2, [fp, #-8] ++ sub r2, r2, #1 ++ uxth r3, r2 ++ sub r2, r6, #3072 ++ ldrh r1, [r2, #-2] ++ ldrb r2, [r10, #2] @ zero_extendqisi2 ++ and r2, r2, #224 ++ mul r1, r8, r1 ++ cmp r2, #160 ++ sub r2, r6, #3104 ++ movne r8, #1 ++ bne .L3898 ++ ldrb r8, [r6, #-3128] @ zero_extendqisi2 ++ cmp r8, #2 ++ ldrheq r3, [r2, #-14] ++ orr r1, r1, r8, lsl #24 ++ uxthne r8, r8 ++ subeq r3, r3, #1 ++ uxtheq r3, r3 ++.L3898: ++ orr r3, r3, r1 ++ str r2, [sp, #12] ++ mov r0, #1 ++ str r3, [sp, #8] ++ bl buf_alloc ++ ldr r3, [sp, #8] ++ mov r1, #1 ++ mov r9, r0 ++ str r3, [r0, #24] ++ bl sblk_read_page ++ ldr r2, [sp, #12] ++ mov r1, #255 ++ ldr r0, [r6, #-3132] ++ ldrh r3, [r2, #-14] ++ ldrb r2, [r6, #-3127] @ zero_extendqisi2 ++ mul r2, r2, r3 ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldr r2, [r9, #36] ++ cmn r2, #1 ++ cmpne r2, #512 ++ moveq r2, #1 ++ movne r2, #0 ++ moveq r2, #0 ++ beq .L3921 ++ ldr r3, [r9, #12] ++ ldr r1, [r3] ++ ldr r3, .L3922+16 ++ cmp r1, r3 ++ beq .L3901 ++.L3921: ++ mov r1, #1 ++ mov r0, r7 ++ bl gc_add_sblk ++ mov r0, r9 ++ bl zbuf_free ++ b .L3888 ++.L3901: ++ ldrh r3, [fp, #-8] ++ mov fp, r2 ++ ldrb r1, [r6, #-3127] @ zero_extendqisi2 ++ smulbb r1, r1, r3 ++ smulbb r8, r1, r8 ++ uxth r3, r8 ++ mov r8, r2 ++ str r3, [sp, #12] ++ ldr r3, [r9, #4] ++ str r3, [sp, #8] ++.L3902: ++ ldr r3, [sp, #12] ++ cmp fp, r3 ++ blt .L3905 ++ mov r0, r9 ++ lsl r6, r5, #1 ++ bl zbuf_free ++ ldr r3, .L3922+20 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L3906 ++ ldr r3, [r4, #1092] ++ mov r1, r5 ++ ldr r0, .L3922+24 ++ ldrh r2, [r3, r6] ++ ldrb r3, [r10, #2] @ zero_extendqisi2 ++ lsr r3, r3, #5 ++ str r3, [sp] ++ mov r3, r8 ++ bl rk_printk ++.L3906: ++ ldr r3, [r4, #1092] ++ cmp r8, #31 ++ strh r8, [r3, r6] @ movhi ++ bhi .L3888 ++ mov r2, #0 ++ mov r1, #1 ++ mov r0, r7 ++ bl gc_add_sblk ++ b .L3888 ++.L3905: ++ ldr r3, [sp, #8] ++ ldr r0, [r3, fp, lsl #2] ++ cmn r0, #1 ++ beq .L3903 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #20] ++ bne .L3904 ++ ldr r3, [sp, #8] ++ mov r2, #0 ++ add r1, sp, #20 ++ ldr r0, [r3, fp, lsl #2] ++ bl pm_log2phys ++.L3904: ++ ldr r2, .L3922+28 ++ mov r3, #1 ++ ldr r0, [sp, #20] ++ ldrb r1, [r6, #-3136] @ zero_extendqisi2 ++ ldrh ip, [r2] ++ ldrb r2, [r4, #1153] @ zero_extendqisi2 ++ rsb r2, r2, #24 ++ sub r2, r2, ip ++ lsl r2, r3, r2 ++ sub r2, r2, #1 ++ and r0, r2, r0, lsr ip ++ bl __aeabi_uidiv ++ cmp r5, r0 ++ addeq r8, r8, #1 ++ uxtheq r8, r8 ++.L3903: ++ add fp, fp, #1 ++ b .L3902 ++.L3923: ++ .align 2 ++.L3922: ++ .word .LANCHOR0 ++ .word .LANCHOR1+2431 ++ .word .LC0 ++ .word .LANCHOR3 ++ .word -178307901 ++ .word .LANCHOR2 ++ .word .LC255 ++ .word .LANCHOR3-3138 ++ .fnend ++ .size gc_block_vpn_scan, .-gc_block_vpn_scan ++ .align 2 ++ .global ftl_sblk_dump ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_sblk_dump, %function ++ftl_sblk_dump: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 80 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ lsl r3, r0, #2 ++ ldr r4, .L3961 ++ .pad #124 ++ sub sp, sp, #124 ++ lsl r2, r0, #2 ++ mov r7, r0 ++ str r3, [sp, #68] ++ ldr r3, [r4, #1084] ++ str r1, [sp, #60] ++ ldr r1, [r3, r0, lsl #2] ++ add r2, r3, r2 ++ ldrb r2, [r2, #2] @ zero_extendqisi2 ++ ubfx r1, r1, #11, #8 ++ str r1, [sp, #4] ++ lsl r1, r0, #2 ++ ldrh r3, [r3, r1] ++ mov r1, r0 ++ ldr r0, .L3961+4 ++ ubfx r3, r3, #0, #11 ++ str r3, [sp] ++ ubfx r3, r2, #3, #2 ++ lsr r2, r2, #5 ++ bl rk_printk ++ movw r3, #65535 ++ cmp r7, r3 ++ beq .L3947 ++ movw r3, #1080 ++ ldrh r3, [r4, r3] ++ cmp r3, r7 ++ bls .L3947 ++ ldr r3, [r4, #1084] ++ lsl r2, r7, #2 ++ add r1, sp, #104 ++ strh r7, [sp, #88] @ movhi ++ mov r0, r7 ++ mov r5, #0 ++ add r3, r3, r2 ++ mov fp, r5 ++ ldrb r3, [r3, #2] @ zero_extendqisi2 ++ and r3, r3, #224 ++ cmp r3, #160 ++ ldreq r3, .L3961+8 ++ movne r9, #1 ++ ldrbeq r9, [r3, #-3128] @ zero_extendqisi2 ++ bl ftl_get_blk_list_in_sblk ++ ldr r3, .L3961+12 ++ uxtb r0, r0 ++ lsl r2, r7, #2 ++ strh r5, [sp, #90] @ movhi ++ strb r0, [sp, #97] ++ mov r1, r7 ++ ldrh r3, [r3, #-8] ++ strb r5, [sp, #93] ++ strh r5, [sp, #98] @ movhi ++ smulbb r3, r3, r0 ++ strh r3, [sp, #94] @ movhi ++ ldr r3, [r4, #1084] ++ add r3, r3, r2 ++ ldrb r2, [r3, #2] @ zero_extendqisi2 ++ mov r3, r9 ++ str r0, [sp] ++ ldr r0, .L3961+16 ++ lsr r2, r2, #5 ++ bl rk_printk ++ mov r0, #1 ++ bl buf_alloc ++ mov r6, r0 ++ str r5, [sp, #44] ++ str r5, [sp, #52] ++.L3927: ++ ldr r3, .L3961+20 ++ ldrh r2, [r3] ++ uxth r3, r5 ++ cmp r2, r3 ++ bls .L3944 ++ str r3, [sp, #72] ++ lsl r3, r3, #1 ++ sub r2, r3, #1 ++ str r2, [sp, #76] ++ uxth r2, r5 ++ add r3, r3, r2 ++ sub r3, r3, #1 ++ str r3, [sp, #64] ++ mov r3, #0 ++ b .L3960 ++.L3941: ++ ldrh r3, [sp, #48] ++ add r2, sp, #120 ++ add r3, r2, r3, lsl #1 ++ ldrh r3, [r3, #-16] ++ str r3, [sp, #56] ++ movw r3, #65535 ++ ldr r2, [sp, #56] ++ cmp r2, r3 ++ beq .L3928 ++ ldr r3, .L3961+24 ++ cmp r9, #3 ++ ldrh r4, [r3, #-2] ++ mul r3, r2, r4 ++ bne .L3929 ++ ldr r2, .L3961 ++ ldrb r1, [r2, #1158] @ zero_extendqisi2 ++ cmp r1, #0 ++ ldrne r2, [sp, #64] ++ bne .L3958 ++ ldrb r2, [r2, #1159] @ zero_extendqisi2 ++ lsl r4, r8, #24 ++ cmp r2, #0 ++ ldrne r2, [sp, #64] ++ uxtaheq r3, r3, r5 ++ addne r3, r3, r2 ++ addne r3, r3, r8 ++ orr r4, r4, r3 ++.L3931: ++ mov r1, #1 ++ str r4, [r6, #24] ++ mov r0, r6 ++ bl sblk_read_page ++ ldr r2, [r6, #12] ++ ldr r3, [r6, #4] ++ ldr r10, [r6, #36] ++ ldr r1, [r2, #12] ++ ldr r0, .L3961+28 ++ str r1, [sp, #32] ++ ldr r1, [r2, #8] ++ str r1, [sp, #28] ++ ldr r1, [r2, #4] ++ str r1, [sp, #24] ++ ldr r2, [r2] ++ ldr r1, [sp, #56] ++ str r2, [sp, #20] ++ ldr r2, [r3, #12] ++ str r2, [sp, #16] ++ ldr r2, [r3, #8] ++ str r2, [sp, #12] ++ ldr r2, [r3, #4] ++ str r2, [sp, #8] ++ ldr r3, [r3] ++ ldr r2, [sp, #72] ++ str r10, [sp] ++ str r3, [sp, #4] ++ mov r3, r4 ++ bl rk_printk ++ ldr r3, [sp, #52] ++ cmn r10, #1 ++ cmpne r10, #512 ++ moveq r3, #1 ++ ldr r0, .L3961+32 ++ str r3, [sp, #52] ++ ldr r3, .L3961+36 ++ ldr r3, [r3, #4] ++ blx r3 ++ ldr r3, .L3961 ++ ldr r2, [sp, #68] ++ ldr r3, [r3, #1084] ++ add r3, r3, r2 ++ ldrb r2, [r3, #2] @ zero_extendqisi2 ++ and r2, r2, #224 ++ cmp r2, #32 ++ cmpne r2, #224 ++ moveq r10, #1 ++ movne r10, #0 ++ beq .L3928 ++ ldr r3, [r6, #12] ++ ldr r0, [r3, #4] ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #84] ++ bne .L3935 ++ ldr r3, [r6, #12] ++ mov r2, r10 ++ add r1, sp, #84 ++ ldr r0, [r3, #4] ++ bl pm_log2phys ++.L3935: ++ ldr r3, [sp, #84] ++ cmp r4, r3 ++ bne .L3936 ++ ldr r3, [sp, #44] ++ mov r1, r4 ++ ldr r2, [r6, #12] ++ ldr r0, .L3961+40 ++ add r3, r3, #1 ++ ldr r2, [r2, #4] ++ str r3, [sp, #44] ++ bl rk_printk ++.L3936: ++ ldr r3, [sp, #60] ++ cmp r3, #0 ++ beq .L3938 ++ ldr r2, [r3, fp, lsl #2] ++ lsl r4, fp, #2 ++ ldr r3, [r6, #12] ++ ldr r3, [r3, #4] ++ cmp r3, r2 ++ beq .L3939 ++ ldr r3, .L3961+44 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L3939 ++ mov r1, fp ++ ldr r0, .L3961+48 ++ bl rk_printk ++.L3939: ++ ldr r3, [sp, #60] ++ ldr r2, [r6, #12] ++ ldr r3, [r3, r4] ++ ldr r2, [r2, #4] ++ cmp r2, r3 ++ cmnne r3, #1 ++ beq .L3938 ++ movw r2, #1575 ++ ldr r1, .L3961+52 ++ ldr r0, .L3961+56 ++ bl rk_printk ++ bl dump_stack ++.L3938: ++ add fp, fp, #1 ++.L3928: ++ add r8, r8, #1 ++ uxth r8, r8 ++.L3943: ++ cmp r9, r8 ++ bcs .L3941 ++ ldr r3, [sp, #48] ++ add r3, r3, #1 ++.L3960: ++ str r3, [sp, #48] ++ ldrb r2, [sp, #97] @ zero_extendqisi2 ++ ldrh r3, [sp, #48] ++ cmp r2, r3 ++ bls .L3942 ++ mov r8, #1 ++ b .L3943 ++.L3929: ++ cmp r9, #2 ++ uxtahne r4, r3, r5 ++ bne .L3931 ++ ldr r2, [sp, #76] ++.L3958: ++ add r4, r3, r2 ++ ldr r2, .L3961+8 ++ add r3, r4, r8 ++ ldrb r4, [r2, #-3128] @ zero_extendqisi2 ++ orr r4, r3, r4, lsl #24 ++ b .L3931 ++.L3942: ++ add r5, r5, #1 ++ b .L3927 ++.L3944: ++ mov r0, r6 ++ bl zbuf_free ++ ldr r3, .L3961 ++ lsl r2, r7, #1 ++ ldr r0, .L3961+60 ++ ldr r1, [r3, #1092] ++ ldr r3, [sp, #44] ++ ldrh r2, [r1, r2] ++ mov r1, r7 ++ bl rk_printk ++ ldr r0, [sp, #52] ++.L3924: ++ add sp, sp, #124 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3947: ++ mov r0, #0 ++ b .L3924 ++.L3962: ++ .align 2 ++.L3961: ++ .word .LANCHOR0 ++ .word .LC256 ++ .word .LANCHOR3 ++ .word .LANCHOR3-3088 ++ .word .LC257 ++ .word .LANCHOR3-3096 ++ .word .LANCHOR3-3072 ++ .word .LC195 ++ .word 644245000 ++ .word arm_delay_ops ++ .word .LC258 ++ .word .LANCHOR2 ++ .word .LC259 ++ .word .LANCHOR1+2449 ++ .word .LC0 ++ .word .LC260 ++ .fnend ++ .size ftl_sblk_dump, .-ftl_sblk_dump ++ .align 2 ++ .global zftl_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_read, %function ++zftl_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 48 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r3 ++ ldr r3, .L4026 ++ .pad #76 ++ sub sp, sp, #76 ++ mov r4, r0 ++ mov r6, r1 ++ str r2, [sp, #24] ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L3964 ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ ldr r0, .L4026+4 ++ bl rk_printk ++.L3964: ++ cmp r4, #0 ++ bne .L3965 ++ ldr r3, .L4026+8 ++ mov r4, #24576 ++ ldr r3, [r3, #1032] ++.L3966: ++ ldr r2, [sp, #24] ++ cmp r3, r2 ++ cmpcs r3, r6 ++ movls r5, #1 ++ movhi r5, #0 ++ bls .L3995 ++ add r2, r6, r2 ++ cmp r3, r2 ++ bcc .L3995 ++ add r3, r4, r6 ++ ldr r4, .L4026+8 ++ str r3, [sp, #28] ++ ldr r1, [sp, #24] ++ ldr r2, [r4, #2800] ++ ldr r0, [sp, #28] ++ ldr r3, [r2, #24] ++ add r3, r3, r1 ++ str r3, [r2, #24] ++ ldr r3, .L4026+12 ++ ldrb r6, [r3, #-2546] @ zero_extendqisi2 ++ mov r1, r6 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #24] ++ mov r1, r6 ++ ldr r2, [sp, #28] ++ str r0, [sp, #36] ++ add r3, r3, r2 ++ sub r0, r3, #1 ++ str r3, [sp, #44] ++ bl __aeabi_uidiv ++ ldr r3, [sp, #36] ++ str r5, [sp, #40] ++ ldr r6, [sp, #36] ++ ldr r5, .L4026+12 ++ rsb r3, r3, #1 ++ add r3, r3, r0 ++ str r0, [sp, #48] ++ str r3, [sp, #32] ++.L3968: ++ ldr r3, [sp, #32] ++ cmp r3, #0 ++ bne .L3992 ++ bl timer_get_time ++ str r0, [r5, #-8] ++ ldr r0, [sp, #40] ++.L3963: ++ add sp, sp, #76 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L3965: ++ cmp r4, #3 ++ bhi .L3995 ++ lsl r4, r4, #13 ++ mov r3, #8192 ++ b .L3966 ++.L3992: ++ ldr r3, [sp, #36] ++ ldr r2, [sp, #48] ++ ldrb r1, [r5, #-2546] @ zero_extendqisi2 ++ cmp r6, r2 ++ cmpne r6, r3 ++ moveq r10, #1 ++ movne r10, #0 ++ uxth r8, r1 ++ bne .L3969 ++ cmp r6, r3 ++ bne .L3970 ++ ldr r0, [sp, #28] ++ bl __aeabi_uidivmod ++ uxth r10, r1 ++ ldr r3, [sp, #24] ++ sub r8, r8, r10 ++ uxth r8, r8 ++ cmp r3, r8 ++ ldrhcc r8, [sp, #24] ++.L3969: ++ ldr r2, .L4026+16 ++ mov r3, #0 ++ mov r9, r2 ++.L3973: ++ ldr r1, [r2, #20] ++ cmp r6, r1 ++ bne .L3971 ++ ldrb r1, [r2, #2] @ zero_extendqisi2 ++ tst r1, #8 ++ beq .L3971 ++ mov r2, #48 ++ lsl r8, r8, #9 ++ mov r0, r7 ++ mla r3, r2, r3, r4 ++ add r7, r7, r8 ++ mov r2, r8 ++ ldr r1, [r3, #1236] ++ add r1, r1, r10, lsl #9 ++ bl ftl_memcpy ++.L3972: ++ ldr r3, [sp, #32] ++ add r6, r6, #1 ++ sub r3, r3, #1 ++ str r3, [sp, #32] ++.L3979: ++ ldrb r3, [r4, #2769] @ zero_extendqisi2 ++ ldr r2, [sp, #32] ++ cmp r2, #0 ++ cmpne r3, #2 ++ bhi .L3968 ++ ldrb r1, [r5, #-2535] @ zero_extendqisi2 ++ cmp r1, #0 ++ beq .L3968 ++ ldrb r0, [r5, #-2536] @ zero_extendqisi2 ++ add r0, r0, r0, lsl #1 ++ add r0, r9, r0, lsl #4 ++ bl sblk_read_page ++.L3981: ++ ldrb r3, [r5, #-2535] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L3991 ++ mvn r2, #0 ++ strb r3, [r5, #-2535] ++ strb r2, [r5, #-2536] ++ b .L3968 ++.L3970: ++ ldr r3, [sp, #28] ++ mov r10, #0 ++ ldr r2, [sp, #24] ++ add r8, r3, r2 ++ mls r1, r6, r1, r8 ++ uxtb r8, r1 ++ b .L3969 ++.L3971: ++ add r3, r3, #1 ++ add r2, r2, #48 ++ cmp r3, #32 ++ bne .L3973 ++ mov r0, r6 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #68] ++ bne .L3974 ++ mov r2, #0 ++ add r1, sp, #68 ++ mov r0, r6 ++ bl pm_log2phys ++.L3974: ++ ldr r3, [sp, #68] ++ cmn r3, #1 ++ moveq r8, #0 ++ beq .L3976 ++ mov r0, #0 ++ bl buf_alloc ++ subs r3, r0, #0 ++ beq .L3979 ++ ldr r1, [r4, #2800] ++ ldr r2, [r1, #40] ++ add r2, r2, #1 ++ str r2, [r1, #40] ++ ldr r2, [sp, #68] ++ str r7, [r3, #8] ++ add r7, r7, r8, lsl #9 ++ str r6, [r3, #20] ++ str r2, [r3, #24] ++ str r2, [r3, #28] ++ strb r8, [r3, #40] ++ strb r10, [r3, #41] ++ bl zftl_add_read_buf ++ b .L3972 ++.L3978: ++ mla r3, r3, r6, r8 ++ ldr r2, [sp, #28] ++ ldr r1, [sp, #44] ++ cmp r2, r3 ++ movls r2, #1 ++ movhi r2, #0 ++ cmp r1, r3 ++ movls r2, #0 ++ cmp r2, #0 ++ beq .L3977 ++ mov r0, r7 ++ add r7, r7, #512 ++ mov r2, #512 ++ mov r1, #0 ++ bl ftl_memset ++.L3977: ++ add r8, r8, #1 ++.L3976: ++ ldrb r3, [r5, #-2546] @ zero_extendqisi2 ++ cmp r8, r3 ++ bcc .L3978 ++ b .L3972 ++.L3991: ++ ldrb r3, [r5, #-2536] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L3982 ++ movw r2, #1284 ++ ldr r1, .L4026+20 ++ ldr r0, .L4026+24 ++ bl rk_printk ++ bl dump_stack ++.L3982: ++ ldr r3, .L4026+12 ++ ldr r1, .L4026+12 ++ ldrb r9, [r3, #-2536] @ zero_extendqisi2 ++ ldr r3, .L4026+16 ++ add r2, r9, r9, lsl #1 ++ add r3, r3, r2, lsl #4 ++ mov r2, #48 ++ mla r2, r2, r9, r4 ++ str r3, [sp, #52] ++ ldr r10, [r2, #1268] ++ ldrb r3, [r2, #1232] @ zero_extendqisi2 ++ cmn r10, #1 ++ strb r3, [r1, #-2536] ++ bne .L3983 ++ ldr r2, [r4, #1096] ++ str r10, [sp, #40] ++ ldr r3, [r2, #552] ++ add r3, r3, #1 ++ str r3, [r2, #552] ++.L3984: ++ mov r1, #48 ++ cmn r10, #1 ++ mla r1, r1, r9, r4 ++ movne r2, #0 ++ moveq r2, #1 ++ ldr r3, [r1, #1244] ++ ldr r0, [r1, #1252] ++ ldr ip, [r3, #4] ++ cmp ip, r0 ++ orrne r2, r2, #1 ++ cmp r2, #0 ++ beq .L3985 ++ ldrb r0, [r4, #1153] @ zero_extendqisi2 ++ mvn ip, #0 ++ ldr lr, [r1, #1256] ++ ldrb fp, [r1, #1272] @ zero_extendqisi2 ++ ldrb r8, [r5, #-2546] @ zero_extendqisi2 ++ mvn ip, ip, lsl r0 ++ ldr r10, [r1, #1236] ++ ldr r2, [r1, #1240] ++ rsb r1, r0, #24 ++ and r0, ip, lr, lsr r1 ++ cmp fp, r8 ++ movcc r2, r10 ++ str r8, [sp] ++ bic r1, lr, ip, lsl r1 ++ uxtb r0, r0 ++ bl flash_read_page_en ++ mov r10, r0 ++.L3985: ++ mov r8, #48 ++ cmn r10, #1 ++ mla r8, r8, r9, r4 ++ movne fp, #0 ++ moveq fp, #1 ++ ldr r3, [r8, #1244] ++ ldr r2, [r8, #1252] ++ ldr r3, [r3, #4] ++ cmp r3, r2 ++ moveq r3, fp ++ orrne r3, fp, #1 ++ cmp r3, #0 ++ beq .L3987 ++ ldr r2, [r4, #1096] ++ ldr r0, .L4026+28 ++ ldr r3, [r2, #552] ++ add r3, r3, #1 ++ str r3, [r2, #552] ++ ldr r3, [r8, #1244] ++ ldrb r1, [r8, #1233] @ zero_extendqisi2 ++ ldr r2, [r3, #12] ++ str r2, [sp, #16] ++ ldr r2, [r3, #8] ++ str r2, [sp, #12] ++ ldr r2, [r3, #4] ++ str r2, [sp, #8] ++ mov r2, r10 ++ ldr r3, [r3] ++ str r3, [sp, #4] ++ ldr r3, [r8, #1256] ++ str r3, [sp] ++ ldr r3, [r8, #1252] ++ bl rk_printk ++ ldr r3, .L4026+32 ++ ldr r2, [r8, #1256] ++ ldrb r1, [r5, #-3136] @ zero_extendqisi2 ++ ldrh r0, [r3, #-2] ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ lsr r2, r2, r0 ++ rsb r3, r3, #24 ++ sub r3, r3, r0 ++ mvn r0, #0 ++ bic r0, r2, r0, lsl r3 ++ bl __aeabi_uidiv ++ mov r1, #0 ++ uxth r0, r0 ++ bl ftl_sblk_dump ++.L3987: ++ mov r3, #48 ++ mla r3, r3, r9, r4 ++ ldr r2, [r3, #1244] ++ ldr r3, [r3, #1252] ++ ldr r2, [r2, #4] ++ cmp r2, r3 ++ orrne fp, fp, #1 ++ cmp fp, #0 ++ beq .L3988 ++ movw r2, #1320 ++ ldr r1, .L4026+20 ++ ldr r0, .L4026+24 ++ bl rk_printk ++ bl dump_stack ++.L3988: ++ mov r3, #48 ++ mla r9, r3, r9, r4 ++ ldrb r3, [r5, #-2546] @ zero_extendqisi2 ++ ldrb r2, [r9, #1272] @ zero_extendqisi2 ++ cmp r3, r2 ++ ldrbls r3, [r9, #1234] @ zero_extendqisi2 ++ bicls r3, r3, #8 ++ strbls r3, [r9, #1234] ++ bls .L3990 ++ ldrb r1, [r9, #1273] @ zero_extendqisi2 ++ lsl r2, r2, #9 ++ ldr r3, [r9, #1236] ++ ldr r0, [r9, #1240] ++ add r1, r3, r1, lsl #9 ++ bl ftl_memcpy ++.L3990: ++ ldr r1, [sp, #52] ++ ldr r0, .L4026+36 ++ bl buf_remove_buf ++ ldr r0, [sp, #52] ++ bl zbuf_free ++ ldrb r3, [r5, #-2535] @ zero_extendqisi2 ++ sub r3, r3, #1 ++ strb r3, [r5, #-2535] ++ b .L3981 ++.L3983: ++ cmp r10, #256 ++ bne .L3984 ++ ldr r1, .L4026+40 ++ mov fp, #1 ++ ldrb r0, [r4, #1153] @ zero_extendqisi2 ++ ldr r3, [r2, #1256] ++ ldrh ip, [r1] ++ rsb r0, r0, #24 ++ str r2, [sp, #60] ++ ldr r2, .L4026+12 ++ sub r0, r0, ip ++ str r3, [sp, #56] ++ lsl r0, fp, r0 ++ ldrb r1, [r2, #-3136] @ zero_extendqisi2 ++ sub r0, r0, #1 ++ and r0, r0, r3, lsr ip ++ bl __aeabi_uidiv ++ ldr r2, [sp, #60] ++ mov r8, r0 ++ uxth r1, r0 ++ ldr r3, [sp, #56] ++ ldr r0, .L4026+44 ++ ldr r2, [r2, #1252] ++ bl rk_printk ++ mov r2, #0 ++ mov r1, fp ++ uxth r0, r8 ++ bl gc_add_sblk ++ b .L3984 ++.L3995: ++ mvn r0, #0 ++ b .L3963 ++.L4027: ++ .align 2 ++.L4026: ++ .word .LANCHOR2 ++ .word .LC261 ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR0+1232 ++ .word .LANCHOR1+2463 ++ .word .LC0 ++ .word .LC263 ++ .word .LANCHOR3-3136 ++ .word .LANCHOR0+2771 ++ .word .LANCHOR3-3138 ++ .word .LC262 ++ .fnend ++ .size zftl_read, .-zftl_read ++ .align 2 ++ .global zftl_vendor_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_vendor_read, %function ++zftl_vendor_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ add r1, r0, #512 ++ mov r0, #2 ++ b zftl_read ++ .fnend ++ .size zftl_vendor_read, .-zftl_vendor_read ++ .align 2 ++ .global zftl_sys_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_sys_read, %function ++zftl_sys_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ mov r0, #2 ++ b zftl_read ++ .fnend ++ .size zftl_sys_read, .-zftl_sys_read ++ .align 2 ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_debug_proc_write, %function ++zftl_debug_proc_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 96 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ cmp r2, #79 ++ .pad #132 ++ sub sp, sp, #132 ++ mvnhi r0, #21 ++ add r6, sp, #48 ++ str r6, [sp, #44] ++ bhi .L4030 ++ mov r0, r6 ++ mov r4, r2 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ mvnne r0, #13 ++ bne .L4030 ++ add r3, sp, #128 ++ mov r1, r6 ++ add r3, r3, r4 ++ strb r0, [r3, #-80] ++ ldr r0, .L4056 ++ bl rk_printk ++ mov r3, #16 ++ mov r2, #1 ++ mov r1, r6 ++ ldr r0, .L4056+4 ++ bl rknand_print_hex ++ bl rknand_device_lock ++ mov r2, #7 ++ ldr r1, .L4056+8 ++ mov r0, r6 ++ bl memcmp ++ subs r7, r0, #0 ++ bne .L4032 ++ ldr r5, .L4056+12 ++ movw r3, #698 ++ mov r2, #4 ++ ldr r0, .L4056+16 ++ ldr r6, .L4056+20 ++ movw r8, #65535 ++ ldr r1, [r5, #2800] ++ ldrh r3, [r1, r3] ++ add r1, r1, #704 ++ bl rknand_print_hex ++ ldr r1, [r5, #2800] ++ mov r2, #2 ++ ldrh r3, [r6, #-176] ++ ldr r0, .L4056+24 ++ add r1, r1, #416 ++ bl rknand_print_hex ++.L4033: ++ ldrh r3, [r6, #-176] ++ cmp r7, r3 ++ blt .L4035 ++.L4036: ++ bl rknand_device_unlock ++ mov r0, r4 ++.L4030: ++ add sp, sp, #132 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4035: ++ mov r0, #300 ++ bl msleep ++ ldr r2, [r5, #2800] ++ add r3, r7, #208 ++ lsl r3, r3, #1 ++ ldrh r0, [r2, r3] ++ cmp r0, r8 ++ beq .L4034 ++ mov r1, #0 ++ bl ftl_sblk_dump ++.L4034: ++ add r7, r7, #1 ++ b .L4033 ++.L4032: ++ mov r2, #7 ++ ldr r1, .L4056+28 ++ mov r0, r6 ++ bl memcmp ++ subs r5, r0, #0 ++ bne .L4037 ++ ldr r8, .L4056+12 ++ movw r3, #698 ++ mov r2, #4 ++ ldr r0, .L4056+16 ++ ldr r7, .L4056+20 ++ ldr r1, [r8, #2800] ++ ldr r10, .L4056+32 ++ ldr fp, .L4056+36 ++ ldrh r3, [r1, r3] ++ add r1, r1, #704 ++ bl rknand_print_hex ++ ldr r1, [r8, #2800] ++ mov r2, #2 ++ ldrh r3, [r7, #-176] ++ ldr r0, .L4056+24 ++ add r1, r1, #416 ++ bl rknand_print_hex ++ mov r0, #50 ++ bl msleep ++ ldr r0, .L4056+40 ++ add r6, sp, #128 ++ add r1, sp, #55 ++ str r1, [r6, #-84]! ++ bl rk_printk ++ mov r1, r6 ++ ldr r0, [sp, #44] ++ bl rk_simple_strtoull.constprop.33 ++ str r8, [sp, #36] ++ uxth r3, r0 ++ ldr r8, .L4056+44 ++ mov r6, r0 ++ str r0, [sp, #40] ++ str r3, [sp, #32] ++.L4039: ++ add r9, r8, r5 ++ ldrh r1, [r8, r5] ++ ldrh r2, [r9, #2] ++ mov r0, r10 ++ bl rk_printk ++ ldrh r3, [r5, r8] ++ ldr r2, [sp, #32] ++ cmp r3, r2 ++ bne .L4038 ++ ldrb r3, [r7, #-2546] @ zero_extendqisi2 ++ mov r0, fp ++ mov r2, #4 ++ ldr r1, [r9, #4] ++ lsl r3, r3, #7 ++ bl rknand_print_hex ++ mov r0, #50 ++ bl msleep ++.L4038: ++ add r5, r5, #8 ++ cmp r5, #256 ++ bne .L4039 ++ mov r0, #300 ++ uxth r6, r6 ++ bl msleep ++ mov r0, #1 ++ add r6, r6, #176 ++ bl buf_alloc ++ ldr r3, [sp, #36] ++ mov r5, r0 ++ mov r1, #1 ++ ldr r3, [r3, #2800] ++ ldr r3, [r3, r6, lsl #2] ++ str r3, [r0, #24] ++ str r3, [sp, #40] ++ bl sblk_read_page ++ ldr r2, [r5, #12] ++ ldr r3, [r5, #4] ++ ldr r0, .L4056+48 ++ ldr r1, [r2, #12] ++ str r1, [sp, #24] ++ ldr r1, [r2, #8] ++ str r1, [sp, #20] ++ ldr r1, [r2, #4] ++ str r1, [sp, #16] ++ ldr r2, [r2] ++ ldr r1, [sp, #40] ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r3, [r3] ++ ldr r2, [r5, #36] ++ bl rk_printk ++ ldrb r3, [r7, #-2546] @ zero_extendqisi2 ++ mov r2, #4 ++ ldr r1, [r5, #4] ++ ldr r0, .L4056+52 ++ lsl r3, r3, #7 ++.L4055: ++ bl rknand_print_hex ++ mov r0, r5 ++ bl zbuf_free ++ b .L4036 ++.L4037: ++ mov r2, #7 ++ ldr r1, .L4056+56 ++ mov r0, r6 ++ bl memcmp ++ cmp r0, #0 ++ bne .L4040 ++ bl dump_ftl_info ++ b .L4036 ++.L4040: ++ mov r2, #9 ++ ldr r1, .L4056+60 ++ mov r0, r6 ++ bl memcmp ++ cmp r0, #0 ++ bne .L4041 ++ add r1, sp, #128 ++ add r0, sp, #57 ++ str r0, [r1, #-84]! ++ bl rk_simple_strtoull.constprop.33 ++ ldr r3, .L4056+64 ++ str r0, [sp, #40] ++ strh r0, [r3, #-4] @ movhi ++ bl dump_all_list_info ++ b .L4036 ++.L4041: ++ mov r2, #8 ++ ldr r1, .L4056+68 ++ mov r0, r6 ++ bl memcmp ++ cmp r0, #0 ++ beq .L4036 ++ mov r2, #8 ++ ldr r1, .L4056+72 ++ mov r0, r6 ++ bl memcmp ++ cmp r0, #0 ++ bne .L4043 ++ add r5, sp, #128 ++ add r1, sp, #56 ++ ldr r0, .L4056+40 ++ str r1, [r5, #-84]! ++ bl rk_printk ++ mov r1, r5 ++ ldr r0, [sp, #44] ++ bl rk_simple_strtoull.constprop.33 ++ str r0, [sp, #40] ++ mov r0, #1 ++ bl buf_alloc ++ ldr r3, [sp, #40] ++ mov r5, r0 ++ mov r1, #1 ++ ldr r6, .L4056+20 ++ str r3, [r0, #24] ++ bl sblk_read_page ++ ldr r2, [r5, #12] ++ ldr r3, [r5, #4] ++ ldr r0, .L4056+48 ++ ldr r1, [r2, #12] ++ str r1, [sp, #24] ++ ldr r1, [r2, #8] ++ str r1, [sp, #20] ++ ldr r1, [r2, #4] ++ str r1, [sp, #16] ++ ldr r2, [r2] ++ ldr r1, [sp, #40] ++ str r2, [sp, #12] ++ ldr r2, [r3, #12] ++ str r2, [sp, #8] ++ ldr r2, [r3, #8] ++ str r2, [sp, #4] ++ ldr r2, [r3, #4] ++ str r2, [sp] ++ ldr r3, [r3] ++ ldr r2, [r5, #36] ++ bl rk_printk ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ mov r2, #4 ++ ldr r1, [r5, #4] ++ ldr r0, .L4056+76 ++ lsl r3, r3, #7 ++ bl rknand_print_hex ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ mov r2, #4 ++ ldr r1, [r5, #12] ++ ldr r0, .L4056+80 ++ lsl r3, r3, #1 ++ b .L4055 ++.L4043: ++ mov r2, #8 ++ ldr r1, .L4056+84 ++ mov r0, r6 ++ bl memcmp ++ subs r7, r0, #0 ++ bne .L4044 ++ add r5, sp, #128 ++ add r1, sp, #56 ++ ldr r0, .L4056+40 ++ str r1, [r5, #-84]! ++ bl rk_printk ++ mov r1, r5 ++ ldr r0, [sp, #44] ++ bl rk_simple_strtoull.constprop.33 ++ mov r1, r7 ++ str r0, [sp, #40] ++ uxth r0, r0 ++ bl ftl_sblk_dump ++ b .L4036 ++.L4044: ++ mov r2, #10 ++ ldr r1, .L4056+88 ++ mov r0, r6 ++ bl memcmp ++ cmp r0, #0 ++ bne .L4045 ++ add r1, sp, #58 ++ add r5, sp, #128 ++ ldr r0, .L4056+40 ++ str r1, [r5, #-84]! ++ bl rk_printk ++ mov r1, r5 ++ ldr r0, [sp, #44] ++ bl rk_simple_strtoull.constprop.33 ++ ldr r3, .L4056+92 ++ str r0, [sp, #40] ++ str r0, [r3] ++ b .L4036 ++.L4045: ++ mov r0, r6 ++ mov r2, #8 ++ ldr r1, .L4056+96 ++ bl memcmp ++ subs r6, r0, #0 ++ bne .L4046 ++ add r5, sp, #128 ++ add r1, sp, #56 ++ ldr r0, .L4056+40 ++ str r1, [r5, #-84]! ++ bl rk_printk ++ mov r1, r5 ++ ldr r0, [sp, #44] ++ bl rk_simple_strtoull.constprop.33 ++ mov r5, r0 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #40] ++ bne .L4047 ++ mov r2, r6 ++ add r1, sp, #40 ++ mov r0, r5 ++ bl pm_log2phys ++.L4047: ++ ldr r2, [sp, #40] ++ mov r1, r5 ++ ldr r0, .L4056+100 ++ bl rk_printk ++ b .L4036 ++.L4046: ++ ldr r0, .L4056+104 ++ bl rk_printk ++ ldr r0, .L4056+108 ++ bl rk_printk ++ ldr r0, .L4056+112 ++ bl rk_printk ++ ldr r0, .L4056+116 ++ bl rk_printk ++ ldr r0, .L4056+120 ++ bl rk_printk ++ ldr r0, .L4056+124 ++ bl rk_printk ++ ldr r0, .L4056+128 ++ bl rk_printk ++ ldr r0, .L4056+132 ++ bl rk_printk ++ ldr r0, .L4056+136 ++ bl rk_printk ++ b .L4036 ++.L4057: ++ .align 2 ++.L4056: ++ .word .LC264 ++ .word .LC265 ++ .word .LC266 ++ .word .LANCHOR0 ++ .word .LC267 ++ .word .LANCHOR3 ++ .word .LC268 ++ .word .LC269 ++ .word .LC271 ++ .word .LC272 ++ .word .LC270 ++ .word .LANCHOR3-2532 ++ .word .LC245 ++ .word .LC273 ++ .word .LC274 ++ .word .LC275 ++ .word .LANCHOR3-3072 ++ .word .LC276 ++ .word .LC277 ++ .word .LC218 ++ .word .LC240 ++ .word .LC278 ++ .word .LC279 ++ .word .LANCHOR2 ++ .word .LC280 ++ .word .LC281 ++ .word .LC282 ++ .word .LC283 ++ .word .LC284 ++ .word .LC285 ++ .word .LC286 ++ .word .LC287 ++ .word .LC288 ++ .word .LC289 ++ .word .LC290 ++ .fnend ++ .size zftl_debug_proc_write, .-zftl_debug_proc_write ++ .global __aeabi_idivmod ++ .align 2 ++ .global ftl_update_l2p_map ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_update_l2p_map, %function ++ftl_update_l2p_map: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r7, r0 ++ ldr r6, .L4088 ++ .pad #28 ++ sub sp, sp, #28 ++ ldrb r8, [r0, #9] @ zero_extendqisi2 ++ sub r3, r6, #3088 ++ ldr r4, [r6, #-2556] ++ ldrh r3, [r3, #-8] ++ mul r8, r8, r3 ++ ldrh r3, [r0, #12] ++ add r4, r4, r3, lsl #2 ++ sub r3, r8, #-1073741823 ++ ldr r3, [r4, r3, lsl #2] ++ cmn r3, #1 ++ beq .L4059 ++ movw r2, #1998 ++ ldr r1, .L4088+4 ++ ldr r0, .L4088+8 ++ bl rk_printk ++ bl dump_stack ++.L4059: ++ mov r5, #0 ++ sub r4, r4, #4 ++ mov r10, r5 ++.L4060: ++ cmp r10, r8 ++ bne .L4066 ++ ldr r3, .L4088+12 ++ ldr r4, .L4088+16 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L4067 ++ ldrh r1, [r7] ++ ldr r2, [r4, #1092] ++ ldr r0, .L4088+20 ++ lsl r3, r1, #1 ++ ldrh r3, [r2, r3] ++ mov r2, r5 ++ bl rk_printk ++.L4067: ++ ldrh r3, [r7] ++ ldr r2, [r4, #1092] ++ lsl r3, r3, #1 ++ strh r5, [r2, r3] @ movhi ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4066: ++ ldr r9, [r4, #4]! ++ cmn r9, #1 ++ beq .L4061 ++ ldrb r1, [r6, #-2546] @ zero_extendqisi2 ++ mov r0, r9 ++ lsl r1, r1, #7 ++ bl __aeabi_uidiv ++ uxth r3, r0 ++ str r3, [sp, #4] ++ ldr r3, .L4088+12 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L4062 ++ mov r3, r10 ++ mov r2, r9 ++ ldr r1, [sp, #4] ++ ldr r0, .L4088+24 ++ bl rk_printk ++.L4062: ++ mov r9, r4 ++ mov fp, r10 ++.L4065: ++ ldr r0, [r9] ++ cmn r0, #1 ++ beq .L4063 ++ ldrb r1, [r6, #-2546] @ zero_extendqisi2 ++ lsl r1, r1, #7 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #4] ++ uxth r0, r0 ++ cmp r3, r0 ++ bne .L4063 ++ ldrb r3, [r7, #9] @ zero_extendqisi2 ++ mov r0, fp ++ mov r1, r3 ++ str r3, [sp, #12] ++ bl __aeabi_idivmod ++ ldr r2, .L4088+28 ++ add r1, r7, r1, lsl #1 ++ ldr r3, [sp, #12] ++ ldrh r0, [r1, #16] ++ ldrh r2, [r2] ++ mov r1, r3 ++ mul r2, r2, r0 ++ mov r0, fp ++ str r2, [sp, #8] ++ bl __aeabi_idiv ++ ldr r2, [sp, #8] ++ add r2, r2, r0 ++ ldr r0, .L4088+32 ++ str r2, [sp, #20] ++ ldr r1, [r9] ++ bl pm_ppa_update_check ++ cmp r0, #0 ++ beq .L4064 ++ mov r3, r8 ++ mov r2, #4 ++ ldr r1, [r6, #-2556] ++ ldr r0, .L4088+36 ++ bl rknand_print_hex ++.L4064: ++ add r5, r5, #1 ++ mov r2, #1 ++ uxth r5, r5 ++ add r1, sp, #20 ++ ldr r0, [r9] ++ bl pm_log2phys ++ mvn r3, #0 ++ str r3, [r9] ++.L4063: ++ add fp, fp, #1 ++ add r9, r9, #4 ++ cmp r8, fp ++ bne .L4065 ++.L4061: ++ add r10, r10, #1 ++ b .L4060 ++.L4089: ++ .align 2 ++.L4088: ++ .word .LANCHOR3 ++ .word .LANCHOR1+2473 ++ .word .LC0 ++ .word .LANCHOR2 ++ .word .LANCHOR0 ++ .word .LC294 ++ .word .LC291 ++ .word .LANCHOR3-3074 ++ .word .LC292 ++ .word .LC293 ++ .fnend ++ .size ftl_update_l2p_map, .-ftl_update_l2p_map ++ .align 2 ++ .global ftl_alloc_new_data_sblk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_alloc_new_data_sblk, %function ++ftl_alloc_new_data_sblk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r5, r0 ++ ldrh r6, [r0] ++ bl ftl_update_l2p_map ++ bl pm_flush ++ ldrh r0, [r5] ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L4091 ++ bl zftl_insert_data_list ++.L4091: ++ ldr r4, .L4099 ++ mov r0, r5 ++ ldr r1, [r4, #1096] ++ add r1, r1, #16 ++ cmp r5, r1 ++ movw r5, #65535 ++ moveq r1, #2 ++ movne r1, #3 ++ bl ftl_open_sblk_init ++ ldr r3, [r4, #1096] ++ cmp r6, r5 ++ ldr r3, [r3, #560] ++ sub r3, r3, r6 ++ clz r3, r3 ++ lsr r3, r3, #5 ++ moveq r3, #0 ++ cmp r3, #0 ++ beq .L4093 ++ mov r1, r6 ++ ldr r0, .L4099+4 ++ bl rk_printk ++ ldr r3, [r4, #1096] ++ ldr r0, [r3, #564] ++ bl gc_mark_bad_ppa ++ ldr r3, [r4, #1096] ++ mvn r2, #0 ++ str r5, [r3, #560] ++ str r2, [r3, #564] ++.L4093: ++ bl ftl_ext_info_flush ++ mov r0, #0 ++ bl ftl_info_flush ++ bl lpa_rebuild_hash ++ mov r0, #0 ++ pop {r4, r5, r6, pc} ++.L4100: ++ .align 2 ++.L4099: ++ .word .LANCHOR0 ++ .word .LC295 ++ .fnend ++ .size ftl_alloc_new_data_sblk, .-ftl_alloc_new_data_sblk ++ .align 2 ++ .global ftl_write_commit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type ftl_write_commit, %function ++ftl_write_commit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r8, .L4167 ++ mov r9, r8 ++.L4102: ++ ldrb r2, [r8, #2796] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L4104 ++ ldrb r3, [r8, #2820] @ zero_extendqisi2 ++ sub r2, r2, #1 ++ ldr r1, .L4167+4 ++ strb r2, [r8, #2796] ++ str r3, [sp, #12] ++ add r3, r3, r3, lsl #1 ++ add r3, r1, r3, lsl #4 ++ ldr r1, [sp, #12] ++ str r3, [sp, #20] ++ mov r3, #48 ++ mla r3, r3, r1, r8 ++ ldrb r1, [r3, #1232] @ zero_extendqisi2 ++ ldr r2, [r3, #1252] ++ ldr r3, [r8, #2780] ++ strb r1, [r8, #2820] ++ cmp r2, r3 ++ bcc .L4106 ++ movw r2, #607 ++ ldr r1, .L4167+8 ++ ldr r0, .L4167+12 ++ bl rk_printk ++ bl dump_stack ++.L4106: ++ ldr r2, [sp, #12] ++ mov r3, #48 ++ mla r3, r3, r2, r9 ++ ldr r2, [r9, #2780] ++ ldr r7, [r3, #1252] ++ cmp r7, r2 ++ bcc .L4107 ++ ldr r0, [sp, #20] ++ bl zbuf_free ++ mvn r0, #0 ++.L4101: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4107: ++ ldr r2, [r3, #1244] ++ ldr fp, [r3, #1236] ++ ldrb r5, [r3, #1273] @ zero_extendqisi2 ++ ldrb r3, [r3, #1272] @ zero_extendqisi2 ++ str r2, [sp, #8] ++ str r3, [sp, #16] ++ ldrb r3, [r9, #2797] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L4109 ++ ldr r6, .L4167+16 ++ ldr r3, .L4167+4 ++ ldrb r4, [r6, #-88] @ zero_extendqisi2 ++ add r4, r4, r4, lsl #1 ++ add r4, r3, r4, lsl #4 ++.L4110: ++ ldrb r3, [r4] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L4111 ++ ldr r3, [r4, #20] ++ cmp r7, r3 ++ bne .L4109 ++ ldr r3, [sp, #16] ++ lsl r5, r5, #9 ++ ldr r0, [r4, #4] ++ add r1, fp, r5 ++ lsl r2, r3, #9 ++ add r0, r0, r5 ++ bl ftl_memcpy ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ mov r0, #2 ++ ldr r2, [r4, #4] ++ ldr r1, [r4, #12] ++ sub r3, r3, #2 ++ add r2, r2, r3, lsl #9 ++ add r1, r1, #16 ++ bl ftl_debug_info_fill ++ ldr r0, [sp, #20] ++ bl zbuf_free ++ b .L4102 ++.L4111: ++ ldr r2, .L4167+4 ++ add r3, r3, r3, lsl #1 ++ add r4, r2, r3, lsl #4 ++ b .L4110 ++.L4109: ++ mov r0, r7 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #28] ++ bne .L4113 ++ mov r2, #0 ++ add r1, sp, #28 ++ mov r0, r7 ++ bl pm_log2phys ++.L4113: ++ ldr r6, [r9, #1096] ++ mov r1, #0 ++ ldr r3, .L4167+4 ++ mov r4, r1 ++ ldr ip, [sp, #28] ++ add r6, r6, #16 ++ add r0, r3, #1536 ++.L4115: ++ ldr r2, [r3, #20] ++ cmp r7, r2 ++ bne .L4114 ++ ldrb r2, [r3, #2] @ zero_extendqisi2 ++ tst r2, #8 ++ ldrne r4, [r3, #4] ++ movne r1, #1 ++ ldrne ip, [r3, #24] ++ bicne r2, r2, #8 ++ strbne r2, [r3, #2] ++.L4114: ++ add r3, r3, #48 ++ cmp r3, r0 ++ bne .L4115 ++ ldr r3, .L4167+16 ++ cmp r1, #0 ++ ldr r2, [sp, #16] ++ strne ip, [sp, #28] ++ ldrb r3, [r3, #-2546] @ zero_extendqisi2 ++ cmp r2, r3 ++ bcs .L4142 ++ cmp r4, #0 ++ beq .L4118 ++ cmp r5, #0 ++ beq .L4119 ++ lsl r2, r5, #9 ++ mov r1, r4 ++ mov r0, fp ++ bl ftl_memcpy ++ ldr r6, [r9, #1096] ++ add r6, r6, #48 ++.L4119: ++ ldr r3, [sp, #16] ++ add r5, r5, r3 ++ ldr r3, .L4167+16 ++ ldrb r2, [r3, #-2546] @ zero_extendqisi2 ++ cmp r5, r2 ++ ldrcs r6, [r9, #1096] ++ addcs r6, r6, #16 ++ bcs .L4142 ++ lsl r0, r5, #9 ++ sub r2, r2, r5 ++ lsl r2, r2, #9 ++ add r1, r4, r0 ++ add r0, fp, r0 ++ bl ftl_memcpy ++.L4142: ++ mov r10, #0 ++ b .L4117 ++.L4118: ++ ldr r3, [sp, #28] ++ cmn r3, #1 ++ beq .L4121 ++ mov r0, #1 ++ bl buf_alloc ++ ldr r3, [sp, #28] ++ mov r4, r0 ++ str r7, [r0, #20] ++ mov r1, #1 ++ str r3, [r0, #24] ++ bl sblk_read_page ++ ldr r3, [r4, #12] ++ ldr r2, [r3, #4] ++ ldr r10, [r3, #12] ++ cmp r7, r2 ++ add r10, r10, #1 ++ bne .L4122 ++ ldr r2, [r4, #36] ++ cmn r2, #1 ++ bne .L4123 ++.L4122: ++ ldrb r2, [r9, #1153] @ zero_extendqisi2 ++ mvn ip, #0 ++ ldr lr, [r4, #24] ++ rsb r1, r2, #24 ++ mvn ip, ip, lsl r2 ++ ldr r2, .L4167+16 ++ and r0, ip, lr, lsr r1 ++ bic r1, lr, ip, lsl r1 ++ ldrb r2, [r2, #-2546] @ zero_extendqisi2 ++ uxtb r0, r0 ++ str r2, [sp] ++ ldr r2, [r4, #4] ++ bl flash_read_page_en ++ str r0, [r4, #36] ++.L4123: ++ ldr r3, [r4, #12] ++ ldr r3, [r3, #4] ++ cmp r7, r3 ++ bne .L4124 ++ ldr r3, [r4, #36] ++ cmn r3, #1 ++ bne .L4125 ++.L4124: ++ ldr r2, [r8, #1096] ++ ldr r0, .L4167+20 ++ ldr r3, [r2, #552] ++ add r3, r3, #1 ++ str r3, [r2, #552] ++ ldr r3, [r4, #36] ++ ldrb r1, [r4, #1] @ zero_extendqisi2 ++ ldr r2, [sp, #28] ++ str r3, [sp] ++ mov r3, r7 ++ bl rk_printk ++ mov r3, #4 ++ ldr r1, [r4, #12] ++ mov r2, r3 ++ ldr r0, .L4167+24 ++ bl rknand_print_hex ++.L4125: ++ ldr r3, [r4, #12] ++ ldr r3, [r3, #4] ++ cmp r7, r3 ++ bne .L4126 ++ ldr r3, [r4, #36] ++ cmn r3, #1 ++ bne .L4127 ++.L4126: ++ movw r2, #699 ++ ldr r1, .L4167+8 ++ ldr r0, .L4167+12 ++ bl rk_printk ++ bl dump_stack ++.L4127: ++ cmp r5, #0 ++ beq .L4128 ++ ldr r3, [sp, #28] ++ lsl r2, r5, #9 ++ cmn r3, #1 ++ beq .L4129 ++ ldr r1, [r4, #4] ++ mov r0, fp ++ bl ftl_memcpy ++.L4130: ++ ldr r6, [r8, #1096] ++ add r6, r6, #48 ++.L4128: ++ ldr r3, [sp, #16] ++ add r5, r5, r3 ++ ldr r3, .L4167+16 ++ ldrb r2, [r3, #-2546] @ zero_extendqisi2 ++ cmp r5, r2 ++ bcc .L4131 ++ ldrhi r6, [r8, #1096] ++ addhi r6, r6, #16 ++.L4132: ++ cmp r4, #0 ++ beq .L4117 ++ ldrb r3, [r4, #2] @ zero_extendqisi2 ++ mov r1, r4 ++ ldr r0, .L4167+28 ++ bic r3, r3, #8 ++ strb r3, [r4, #2] ++ bl buf_remove_buf ++ mov r0, r4 ++ bl zbuf_free ++.L4117: ++ ldrh r3, [r6, #6] ++ cmp r3, #0 ++ bne .L4134 ++ bl ftl_flush ++ mov r0, r6 ++ bl ftl_alloc_new_data_sblk ++.L4134: ++ mov r0, r6 ++ mov r4, #48 ++ bl ftl_get_new_free_page ++ ldr r3, [sp, #12] ++ str r0, [sp, #16] ++ mov r0, #2 ++ mul r4, r4, r3 ++ ldr r3, [sp, #8] ++ mov r1, r3 ++ add r5, r9, r4 ++ ldr r2, [r5, #1248] ++ str r10, [r3, #12] ++ stm r3, {r2, r7} ++ ldr r2, [sp, #28] ++ str r2, [r3, #8] ++ mov r2, #0 ++ ldr r3, .L4167+16 ++ str r2, [r1, #16]! ++ ldrb r2, [r3, #-2546] @ zero_extendqisi2 ++ sub r2, r2, #2 ++ add r2, fp, r2, lsl #9 ++ bl ftl_debug_info_fill ++ ldr r3, [sp, #16] ++ ldr r1, [sp, #20] ++ ldr r0, .L4167+32 ++ str r3, [r5, #1256] ++ ldr r3, [sp, #28] ++ str r3, [r5, #1260] ++ mvn r3, #0 ++ strb r3, [r5, #1232] ++ ldrb r3, [r5, #1234] @ zero_extendqisi2 ++ orr r3, r3, #10 ++ strb r3, [r5, #1234] ++ ldr r3, .L4167+4 ++ ldrh r2, [r6, #12] ++ add r4, r3, r4 ++ ldrh r3, [r6, #10] ++ add r3, r3, r2 ++ sub r3, r3, #1 ++ strh r3, [r4, #32] @ movhi ++ bl buf_add_tail ++ ldrb r3, [r9, #2797] @ zero_extendqisi2 ++ ldr r4, .L4167 ++ add r3, r3, #1 ++ strb r3, [r9, #2797] ++ bl timer_get_time ++ ldr r3, .L4167+16 ++ ldrh r2, [r6, #6] ++ str r0, [r3, #-84] ++ ldrb r3, [r9, #2797] @ zero_extendqisi2 ++ cmp r3, #2 ++ bhi .L4135 ++ cmp r2, #1 ++ bne .L4105 ++.L4135: ++ ldr lr, .L4167+16 ++ mov r5, #48 ++ ldrb r1, [r6, #5] @ zero_extendqisi2 ++ ldrb r0, [lr, #-88] @ zero_extendqisi2 ++ cmp r1, #0 ++ mov r1, #0 ++ moveq ip, #1 ++ movne ip, #2 ++ cmp r2, #1 ++ mov r2, r0 ++ moveq ip, r3 ++.L4139: ++ cmp r1, ip ++ bne .L4140 ++ uxtb r1, r1 ++ add r0, r0, r0, lsl #1 ++ strb r2, [lr, #-88] ++ sub r3, r3, r1 ++ strb r3, [r4, #2797] ++ ldr r3, .L4167+4 ++ add r0, r3, r0, lsl #4 ++ bl sblk_prog_page ++ ldrh r3, [r6, #6] ++ cmp r3, #1 ++ bne .L4105 ++ bl sblk_wait_write_queue_completed ++ bl ftl_write_completed ++ mov r0, r6 ++ bl ftl_write_last_log_page ++ mov r0, r6 ++ bl ftl_alloc_new_data_sblk ++.L4105: ++ ldrb r3, [r4, #2796] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L4102 ++.L4104: ++ bl ftl_write_completed ++ mov r0, #0 ++ b .L4101 ++.L4131: ++ ldr r3, [sp, #28] ++ sub r2, r2, r5 ++ lsl r2, r2, #9 ++ lsl r0, r5, #9 ++ cmn r3, #1 ++ beq .L4133 ++ ldr r1, [r4, #4] ++ add r1, r1, r0 ++ add r0, fp, r0 ++ bl ftl_memcpy ++ b .L4132 ++.L4133: ++ mov r1, #0 ++ add r0, fp, r0 ++ bl ftl_memset ++ b .L4132 ++.L4140: ++ mla r2, r5, r2, r4 ++ add r1, r1, #1 ++ ldrb r2, [r2, #1232] @ zero_extendqisi2 ++ b .L4139 ++.L4121: ++ cmp r5, #0 ++ moveq r10, r5 ++ moveq r4, r5 ++ beq .L4128 ++ lsl r2, r5, #9 ++ mov r10, r4 ++.L4129: ++ mov r1, #0 ++ mov r0, fp ++ bl ftl_memset ++ b .L4130 ++.L4168: ++ .align 2 ++.L4167: ++ .word .LANCHOR0 ++ .word .LANCHOR0+1232 ++ .word .LANCHOR1+2492 ++ .word .LC0 ++ .word .LANCHOR3 ++ .word .LC296 ++ .word .LC240 ++ .word .LANCHOR0+2771 ++ .word .LANCHOR3-88 ++ .fnend ++ .size ftl_write_commit, .-ftl_write_commit ++ .align 2 ++ .global gc_do_copy_back ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type gc_do_copy_back, %function ++gc_do_copy_back: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 72 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #84 ++ sub sp, sp, #84 ++ ldr r7, .L4307 ++ ldrb r0, [r7, #-3119] @ zero_extendqisi2 ++ cmp r0, #0 ++ bne .L4170 ++ bl buf_alloc ++ subs r4, r0, #0 ++ beq .L4169 ++ ldr r5, .L4307+4 ++ ldrh r2, [r5, #22] ++ mov r0, r2 ++ bl gc_get_src_ppa_from_index ++ mov r1, #1 ++ add r2, r2, #1 ++ str r0, [r4, #24] ++ mov r6, r0 ++ mov r0, r4 ++ strh r2, [r5, #22] @ movhi ++ bl sblk_read_page ++ ldr r3, [r4, #36] ++ cmn r3, #1 ++ cmpne r3, #512 ++ bne .L4172 ++ movw r2, #1032 ++ ldr r1, .L4307+8 ++ ldr r0, .L4307+12 ++ bl rk_printk ++ bl dump_stack ++.L4172: ++ ldr r3, [r4, #12] ++ ldr r8, [r3, #4] ++ mov r0, r8 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #56] ++ bne .L4173 ++ mov r2, #0 ++ add r1, sp, #56 ++ mov r0, r8 ++ bl pm_log2phys ++.L4173: ++ ldr r9, [sp, #56] ++ cmp r6, r9 ++ bne .L4174 ++ ldr r2, .L4307+16 ++ mov r3, #0 ++ sub r10, r2, #1232 ++.L4177: ++ add r1, r2, r3 ++ ldr r0, [r1, #20] ++ cmp r8, r0 ++ bne .L4175 ++ ldrb r1, [r1, #2] @ zero_extendqisi2 ++ tst r1, #2 ++ beq .L4175 ++ mov r0, r4 ++ bl zbuf_free ++ ldr r3, .L4307+20 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L4169 ++ ldrh r3, [r5, #22] ++ mov r2, r6 ++ mov r1, r8 ++ ldr r0, .L4307+24 ++ bl rk_printk ++.L4169: ++ add sp, sp, #84 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4175: ++ add r3, r3, #48 ++ cmp r3, #1536 ++ bne .L4177 ++ ldrb r3, [r7, #-2546] @ zero_extendqisi2 ++ mov r2, #0 ++ str r8, [r4, #20] ++ strb r2, [r4, #41] ++ strb r3, [r4, #40] ++ ldr r3, [r4, #12] ++ ldr r1, [r3] ++ str r1, [r4, #16] ++ str r2, [r3, #16] ++ ldr r3, .L4307+20 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L4178 ++ mov r0, r8 ++ bl lpa_hash_get_ppa ++ ldrh r3, [r5, #22] ++ mov r2, r9 ++ str r6, [sp] ++ mov r1, r8 ++ str r3, [sp, #4] ++ mov r3, r0 ++ ldr r0, .L4307+28 ++ bl rk_printk ++.L4178: ++ mov r0, r4 ++ bl ftl_gc_write_buf ++ bl ftl_write_commit ++ ldr r2, [r10, #2800] ++ ldr r3, [r2, #60] ++ add r3, r3, #1 ++ str r3, [r2, #60] ++ ldrh r3, [r5, #24] ++ add r3, r3, #1 ++ strh r3, [r5, #24] @ movhi ++ b .L4169 ++.L4174: ++ ldr r3, .L4307+20 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L4179 ++ mov r0, r8 ++ bl lpa_hash_get_ppa ++ ldrh r3, [r5, #22] ++ mov r2, r9 ++ str r6, [sp] ++ mov r1, r8 ++ str r3, [sp, #4] ++ mov r3, r0 ++ ldr r0, .L4307+28 ++ bl rk_printk ++.L4179: ++ mov r0, r4 ++ bl zbuf_free ++ b .L4169 ++.L4170: ++ ldr r10, .L4307+32 ++ ldr r3, [r10, #1096] ++ ldrb r9, [r3, #89] @ zero_extendqisi2 ++ str r3, [sp, #12] ++ ldrb r3, [r7, #-3127] @ zero_extendqisi2 ++ uxth r8, r9 ++ cmp r3, r8 ++ movhi r6, #1 ++ bhi .L4180 ++ cmp r8, #2 ++ movcc r6, r8 ++ movcs r6, #2 ++.L4180: ++ ldrb r5, [r7, #-3128] @ zero_extendqisi2 ++ ldr r3, .L4307+4 ++ cmp r5, #3 ++ bne .L4181 ++ ldrb r2, [r10, #1158] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L4182 ++ movw r2, #2102 ++ mov r1, r9 ++ ldrh fp, [r3, r2] ++ mov r0, fp ++ bl __aeabi_idiv ++ ldrb r3, [r7, #-2542] @ zero_extendqisi2 ++ uxth r4, r0 ++ cmp r3, #0 ++ beq .L4183 ++ ldr r3, .L4307+36 ++ lsl r0, r0, #1 ++ ldrh r3, [r3, r0] ++ cmp r3, #0 ++ moveq r5, #1 ++ movne r5, #2 ++.L4184: ++ smulbb r8, r8, r4 ++ sub r8, fp, r8 ++ uxth r3, r8 ++ str r3, [sp, #20] ++.L4185: ++ mul r3, r6, r5 ++ ldr r9, .L4307+36 ++ mov r8, #0 ++ str r3, [sp, #16] ++ add r9, r9, r4, lsl #1 ++ ldr r3, .L4307+4 ++.L4189: ++ ldr r1, [sp, #16] ++ uxth r0, r8 ++ mov r2, r0 ++ cmp r0, r1 ++ bge .L4242 ++ ldr r1, .L4307+40 ++ add r2, fp, r2 ++ ldrh ip, [r1] ++ ldr r1, [sp, #12] ++ ldrb r1, [r1, #89] @ zero_extendqisi2 ++ mul r1, r1, ip ++ ldrb ip, [r7, #-11] @ zero_extendqisi2 ++ sub r1, r1, ip ++ cmp r2, r1 ++ blt .L4190 ++ ldrb r1, [r7, #-2542] @ zero_extendqisi2 ++ cmp r1, #0 ++ beq .L4242 ++ ldrh r1, [r9] ++ cmp r1, r4 ++ bcc .L4191 ++.L4242: ++ mov r3, #1 ++ str r3, [sp, #24] ++ b .L4187 ++.L4183: ++ ldrb r3, [r7, #-15] @ zero_extendqisi2 ++ cmp r3, #0 ++ moveq r5, #1 ++ beq .L4184 ++ sub r3, r4, #62 ++ cmp r3, #2160 ++ movcs r5, #2 ++ bcs .L4184 ++ mov r1, r5 ++ mov r0, r4 ++ bl __aeabi_uidivmod ++ uxth r1, r1 ++ cmp r1, #0 ++ movne r5, #1 ++ moveq r5, #2 ++ b .L4184 ++.L4182: ++ ldrb r2, [r7, #-3120] @ zero_extendqisi2 ++ cmp r2, #0 ++ movw r2, #2102 ++ beq .L4186 ++ ldrh fp, [r3, r2] ++ add r1, r9, r9, lsl #1 ++ mov r0, fp ++ bl __aeabi_idiv ++ mul r9, r0, r9 ++ ldr r2, .L4307+44 ++ uxth r4, r0 ++ sub r9, r9, r9, lsl #2 ++ add r9, r9, fp ++ smull r2, r3, r9, r2 ++ sub r9, r3, r9, asr #31 ++ uxth r3, r9 ++ str r3, [sp, #20] ++ ldrb r3, [r10, #1159] @ zero_extendqisi2 ++ cmp r3, #0 ++ addne r4, r4, r4, lsl #1 ++ uxthne r4, r4 ++ b .L4185 ++.L4186: ++ ldrh r10, [r3, r2] ++ mov r1, r9 ++ mov r0, r10 ++ bl __aeabi_idiv ++ ldr r2, .L4307+48 ++ lsl r3, r0, #1 ++ smulbb r8, r0, r8 ++ ldrh r3, [r2, r3] ++ sub r10, r10, r8 ++ lsr r4, r3, #3 ++ and r3, r3, #7 ++ str r3, [sp, #24] ++ uxth r3, r10 ++ mla r9, r9, r4, r3 ++ str r3, [sp, #20] ++ ldr r3, [sp, #24] ++ add r9, r9, r9, lsl #1 ++ cmp r3, #1 ++ uxth fp, r9 ++ beq .L4185 ++.L4187: ++ mul r3, r6, r5 ++ str r3, [sp, #36] ++ lsl r3, r6, #1 ++ uxth r3, r3 ++ str r3, [sp, #44] ++ ldrh r3, [sp, #44] ++ smulbb r3, r3, r5 ++ sub r3, fp, r3 ++ uxth r3, r3 ++ str r3, [sp, #48] ++ mov r3, #0 ++ str r3, [sp, #32] ++ ldr r3, .L4307+36 ++ add r3, r3, r4, lsl #1 ++ str r3, [sp, #40] ++.L4192: ++ ldrh r9, [sp, #32] ++ ldr r2, [sp, #36] ++ ldr r7, .L4307 ++ str r9, [sp, #28] ++ cmp r9, r2 ++ blt .L4216 ++ ldrb r3, [r7, #-3128] @ zero_extendqisi2 ++ cmp r3, #3 ++ bne .L4217 ++ ldr r3, .L4307+32 ++ ldrb r1, [r3, #1158] @ zero_extendqisi2 ++ cmp r1, #0 ++ movne r3, r2 ++ movne r1, #0 ++ subne r2, r3, #1 ++ bne .L4219 ++ ldrb r2, [r7, #-3120] @ zero_extendqisi2 ++ ldr r3, [sp, #56] ++ cmp r2, #0 ++ strbne r1, [r3, #44] ++ bne .L4305 ++ ldr r1, [sp, #24] ++ cmp r1, #1 ++ moveq r2, #9 ++ beq .L4225 ++ ldr r1, [sp, #24] ++ cmp r1, #2 ++ moveq r2, #13 ++.L4225: ++ strb r2, [r3, #44] ++.L4305: ++ mov r2, r6 ++ add r1, sp, #68 ++ add r0, sp, #56 ++ bl sblk_xlc_prog_pages ++.L4221: ++ ldrb r3, [r7, #-3120] @ zero_extendqisi2 ++ ldr r2, .L4307+32 ++ cmp r3, #0 ++ addne r6, r6, r6, lsl #1 ++ uxthne r6, r6 ++ bne .L4231 ++ ldrb r3, [r7, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrne r6, [sp, #44] ++ bne .L4231 ++ ldrb r3, [r2, #1158] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L4231 ++ smulbb r5, r6, r5 ++ ldrb r3, [r7, #-2542] @ zero_extendqisi2 ++ uxth r5, r5 ++ cmp r3, #0 ++ moveq r6, r5 ++ beq .L4231 ++ ldr r1, .L4307+36 ++ lsl r3, r4, #1 ++ ldrh r3, [r1, r3] ++ cmp r3, r4 ++ movcs r6, r5 ++.L4231: ++ ldr r1, [r2, #2800] ++ ldr r0, .L4307+4 ++ ldr r3, [r1, #52] ++ add r3, r3, r6 ++ str r3, [r1, #52] ++ movw r1, #2102 ++ ldrh r3, [r0, r1] ++ add r6, r6, r3 ++ ldr r3, .L4307+52 ++ uxth r6, r6 ++ strh r6, [r0, r1] @ movhi ++ ldrh r1, [r3, #-14] ++ ldr r3, [sp, #12] ++ ldrb r3, [r3, #89] @ zero_extendqisi2 ++ mul r3, r3, r1 ++ cmp r6, r3 ++ ldrge r3, [r2, #1096] ++ movge r2, #0 ++ strhge r2, [r3, #86] @ movhi ++ bl gc_write_completed ++ b .L4169 ++.L4181: ++ ldrb r2, [r7, #-3126] @ zero_extendqisi2 ++ mov r1, r9 ++ cmp r2, #0 ++ movw r2, #2102 ++ ldrh fp, [r3, r2] ++ mov r0, fp ++ bne .L4188 ++ bl __aeabi_idiv ++ uxth r4, r0 ++ mov r5, #1 ++ smulbb r8, r8, r4 ++ sub r8, fp, r8 ++ uxth r3, r8 ++ str r3, [sp, #20] ++ b .L4185 ++.L4188: ++ bl __aeabi_idiv ++ uxth r4, r0 ++ mov r5, #2 ++ smulbb r8, r8, r4 ++ sub r8, fp, r8 ++ uxth r3, r8 ++ str r3, [sp, #20] ++ b .L4185 ++.L4191: ++ tst r0, #1 ++ beq .L4242 ++.L4190: ++ ldr r10, [r7, #-128] ++ ldr r1, [r10, r2, lsl #2] ++ cmn r1, #1 ++ bne .L4193 ++ ldrh r1, [r3, #22] ++ ldrh ip, [r3, #20] ++ cmp ip, r1 ++ bls .L4169 ++ ldrb ip, [r7, #-2542] @ zero_extendqisi2 ++ cmp ip, #0 ++ beq .L4194 ++ ldrh ip, [r9] ++ cmp ip, r4 ++ bcs .L4194 ++ tst r0, #1 ++ ldrne r1, [r10, ip, lsl #2] ++ strne r1, [r10, r2, lsl #2] ++ bne .L4193 ++.L4194: ++ mov r0, r1 ++ str r3, [sp, #24] ++ bl gc_get_src_ppa_from_index ++ ldr r3, [sp, #24] ++ add r1, r1, #1 ++ strh r1, [r3, #22] @ movhi ++ str r0, [r10, r2, lsl #2] ++.L4193: ++ add r8, r8, #1 ++ b .L4189 ++.L4216: ++ ldr r3, [sp, #28] ++ add r3, fp, r3 ++ str r3, [sp, #16] ++ ldr r2, [sp, #16] ++ ldr r3, [r7, #-3124] ++ ldrb r3, [r3, r2] @ zero_extendqisi2 ++ cmp r3, #255 ++ bne .L4196 ++ mov r0, #0 ++ bl buf_alloc ++ subs r7, r0, #0 ++ bne .L4197 ++ bl sblk_wait_write_queue_completed ++ bl ftl_write_completed ++ bl gc_write_completed ++ bl gc_free_temp_buf ++ mov r0, r7 ++ bl buf_alloc ++ subs r7, r0, #0 ++ beq .L4169 ++.L4197: ++ ldr r2, .L4307 ++ ldrb r1, [r7, #1] @ zero_extendqisi2 ++ ldr r0, [sp, #16] ++ ldr r3, [r2, #-3124] ++ strb r1, [r3, r0] ++ ldr r1, .L4307+32 ++ ldrb r3, [r1, #2831] @ zero_extendqisi2 ++ add r3, r3, #1 ++ strb r3, [r1, #2831] ++ add r3, r9, fp ++ strh r3, [r7, #32] @ movhi ++ ldrb r3, [sp, #24] @ zero_extendqisi2 ++ strb r3, [r7, #45] ++ sub r3, r2, #3104 ++ ldrh r1, [r3, #-14] ++ ldr r3, [sp, #12] ++ ldrb r3, [r3, #89] @ zero_extendqisi2 ++ mul r3, r3, r1 ++ ldrb r1, [r2, #-11] @ zero_extendqisi2 ++ sub r3, r3, r1 ++ cmp r0, r3 ++ blt .L4198 ++ ldrb r3, [r2, #-2542] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L4199 ++ ldr r3, [sp, #40] ++ ldrh r3, [r3] ++ cmp r3, r4 ++ bcs .L4199 ++ tst r9, #1 ++ bne .L4198 ++.L4199: ++ ldr r8, .L4307 ++ mvn r2, #0 ++ ldr r1, [sp, #16] ++ ldr r10, .L4307+56 ++ ldr r3, [r8, #-132] ++ str r2, [r3, r1, lsl #2] ++ ldrb r3, [r8, #-11] @ zero_extendqisi2 ++ cmp r3, #2 ++ bne .L4200 ++ sub r3, r8, #3104 ++ ldr r2, [sp, #16] ++ ldrh r1, [r3, #-14] ++ ldr r3, [sp, #12] ++ ldrb r3, [r3, #89] @ zero_extendqisi2 ++ mul r3, r1, r3 ++ sub r3, r3, #2 ++ cmp r2, r3 ++ ldrh r2, [r8, #-14] ++ bne .L4201 ++ ldr r1, [r8, #-132] ++ ldr r0, [r7, #4] ++ bl ftl_memcpy ++ ldrb r2, [r8, #-2546] @ zero_extendqisi2 ++ mov r1, #0 ++ ldr r0, [r7, #12] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldr r3, [r7, #12] ++ str r10, [r3] ++ ldrh r1, [r8, #-14] ++ ldr r0, [r7, #4] ++ ldr r10, [r7, #12] ++ bl js_hash ++ ldr r2, .L4307+32 ++ str r0, [r10, #4] ++ ldr r3, [r7, #12] ++ ldr r2, [r2, #1096] ++ ldr r2, [r2, #132] ++ str r2, [r3, #8] ++ mov r2, #0 ++ ldr r3, [r7, #12] ++.L4301: ++ str r2, [r3, #12] ++.L4202: ++ ldr r3, [r7, #12] ++ mov r2, #0 ++ str r2, [r3, #16] ++.L4196: ++ ldr r3, .L4307 ++ ldr r1, [sp, #16] ++ ldrb lr, [sp, #24] @ zero_extendqisi2 ++ ldr r2, [r3, #-3124] ++ ldrb r7, [r2, r1] @ zero_extendqisi2 ++ add r2, sp, #80 ++ ldr r1, [sp, #28] ++ add r0, r7, r7, lsl #1 ++ add ip, r2, r1, lsl #2 ++ ldr r2, .L4307+32 ++ add r1, r2, #1232 ++ add r0, r1, r0, lsl #4 ++ str r0, [ip, #-24] ++ mov ip, #48 ++ mul ip, ip, r7 ++ add r1, r1, ip ++ add r0, r2, ip ++ mov ip, #2 ++ strb lr, [r0, #1277] ++ strh ip, [r1, #34] @ movhi ++ ldrb r1, [r3, #-3128] @ zero_extendqisi2 ++ cmp r1, #3 ++ bne .L4207 ++ ldrb r1, [r2, #1158] @ zero_extendqisi2 ++ cmp r1, #0 ++ beq .L4208 ++ ldrb r3, [r3, #-2542] @ zero_extendqisi2 ++ and r8, r9, #1 ++ add r8, r8, r4 ++ cmp r3, #0 ++ beq .L4209 ++ ldr r3, [sp, #40] ++ ldr r2, [sp, #32] ++ ldrh r3, [r3] ++ cmp r3, r4 ++ movcs r2, #0 ++ andcc r2, r2, #1 ++ cmp r2, #0 ++ movne r8, r3 ++.L4209: ++ ldr r3, .L4307+32 ++ mov r10, #48 ++ mov r1, r5 ++ mov r0, r9 ++ mla r10, r10, r7, r3 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #20] ++ ldr r2, .L4307+60 ++ uxtah r0, r3, r0 ++ ldr r3, [sp, #12] ++ ldrh r2, [r2] ++ add r0, r3, r0, lsl #1 ++ ldrh r3, [r0, #96] ++ mla r8, r2, r3, r8 ++ orr r8, r8, #50331648 ++ str r8, [r10, #1256] ++.L4214: ++ mov r2, #48 ++ ldr r3, .L4307+32 ++ mul r7, r2, r7 ++ add r2, r3, r7 ++ add r3, r3, #1232 ++ add r3, r3, r7 ++ ldr r2, [r2, #1256] ++ ldrh r1, [r3, #32] ++ ldr r3, .L4307 ++ ldr r3, [r3, #-124] ++ str r2, [r3, r1, lsl #2] ++ b .L4233 ++.L4201: ++ ldrb r3, [r8, #-3127] @ zero_extendqisi2 ++ ldr r0, [r8, #-132] ++ mul r3, r1, r3 ++ lsr r1, r2, #2 ++ add r1, r0, r1, lsl #2 ++ ldr r0, [r7, #4] ++ rsb r3, r2, r3, lsl #2 ++ mov r2, r3 ++ str r3, [sp, #52] ++ bl ftl_memcpy ++ ldrb r2, [r8, #-2546] @ zero_extendqisi2 ++ mov r1, #0 ++ ldr r0, [r7, #12] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldr r2, [r7, #12] ++ ldr r3, [sp, #52] ++ str r10, [r2] ++ mov r1, r3 ++ ldr r0, [r7, #4] ++ ldr r8, [r7, #12] ++ bl js_hash ++ ldr r2, .L4307+32 ++ str r0, [r8, #4] ++ ldr r3, [r7, #12] ++ ldr r2, [r2, #1096] ++ ldr r2, [r2, #132] ++ str r2, [r3, #8] ++ mov r2, #1 ++ ldr r3, [r7, #12] ++ b .L4301 ++.L4200: ++ ldr r3, .L4307+52 ++ ldrb r2, [r8, #-3127] @ zero_extendqisi2 ++ ldr r1, [r8, #-132] ++ ldrh r3, [r3, #-14] ++ ldr r0, [r7, #4] ++ mul r2, r2, r3 ++ lsl r2, r2, #2 ++ bl ftl_memcpy ++ ldr r3, .L4307+52 ++ ldrb r1, [r8, #-2546] @ zero_extendqisi2 ++ ldr r0, [r7, #4] ++ ldrh r2, [r3, #-14] ++ ldrb r3, [r8, #-3127] @ zero_extendqisi2 ++ mul r3, r3, r2 ++ cmp r1, r3, asr #6 ++ lsl r2, r3, #2 ++ ldrhlt r1, [r8, #-14] ++ mov r3, r2 ++ ldr r8, .L4307 ++ add r0, r0, r3 ++ sublt r2, r1, r2 ++ ldr r1, [r8, #-128] ++ bl ftl_memcpy ++ ldrb r2, [r8, #-2546] @ zero_extendqisi2 ++ mov r1, #0 ++ ldr r0, [r7, #12] ++ lsl r2, r2, #1 ++ bl ftl_memset ++ ldr r3, [r7, #12] ++ str r10, [r3] ++ sub r3, r8, #3104 ++ ldrh r3, [r3, #-14] ++ ldrb r1, [r8, #-3127] @ zero_extendqisi2 ++ ldr r0, [r7, #4] ++ ldr r10, [r7, #12] ++ mul r1, r1, r3 ++ lsl r1, r1, #2 ++ bl js_hash ++ ldr r2, .L4307+32 ++ str r0, [r10, #4] ++ ldr r3, [r7, #12] ++ ldr r2, [r2, #1096] ++ ldr r2, [r2, #132] ++.L4302: ++ str r2, [r3, #8] ++ b .L4202 ++.L4198: ++ ldr r8, .L4307 ++ mov r1, #1 ++ ldr r2, [sp, #16] ++ mov r0, r7 ++ ldr r3, [r8, #-128] ++ ldr r3, [r3, r2, lsl #2] ++ str r3, [r7, #24] ++ bl sblk_read_page ++ ldr r3, [r7, #36] ++ cmn r3, #1 ++ cmpne r3, #512 ++ bne .L4205 ++ ldr r3, .L4307+64 ++ mvn r0, #0 ++ ldr r2, [r7, #24] ++ ldrh r1, [r3] ++ ldr r3, .L4307+32 ++ ldrb r3, [r3, #1153] @ zero_extendqisi2 ++ lsr r2, r2, r1 ++ rsb r3, r3, #24 ++ sub r3, r3, r1 ++ ldrb r1, [r8, #-3136] @ zero_extendqisi2 ++ bic r0, r2, r0, lsl r3 ++ bl __aeabi_uidiv ++ mov r1, #0 ++ uxth r0, r0 ++ bl ftl_sblk_dump ++ ldr r3, [r7, #36] ++ cmn r3, #1 ++ cmpne r3, #512 ++ bne .L4205 ++ ldr r3, [r7, #12] ++ mvn r2, #0 ++ str r2, [r3, #4] ++ ldr r3, [r7, #36] ++ cmp r3, r2 ++ cmpne r3, #512 ++ bne .L4205 ++ movw r2, #1223 ++ ldr r1, .L4307+8 ++ ldr r0, .L4307+12 ++ bl rk_printk ++ bl dump_stack ++.L4205: ++ ldr r3, [r7, #12] ++ ldr r2, .L4307+32 ++ ldr r1, [r3, #4] ++ ldr r2, [r2, #2780] ++ cmp r1, r2 ++ ldr r1, [sp, #16] ++ mvncs r2, #0 ++ strcs r2, [r3, #4] ++ ldr r3, [r7, #12] ++ ldr r2, [r3, #4] ++ ldr r3, .L4307 ++ ldr r3, [r3, #-132] ++ str r2, [r3, r1, lsl #2] ++ ldr r3, [r7, #12] ++ ldr r2, [r7, #24] ++ b .L4302 ++.L4208: ++ ldrb r3, [r2, #1159] @ zero_extendqisi2 ++ ldr r1, .L4307+68 ++ cmp r3, #0 ++ umull r2, r3, r9, r1 ++ beq .L4211 ++ ldr r2, [sp, #20] ++ lsr r3, r3, #1 ++ ldr ip, [sp, #12] ++ uxtah r2, r2, r3 ++ add r3, r3, r3, lsl #1 ++ add r2, ip, r2, lsl #1 ++ ldr ip, .L4307+60 ++ sub r3, r9, r3 ++ ldrh r2, [r2, #96] ++ ldrh ip, [ip] ++ mla r2, ip, r2, r4 ++ uxtah r3, r2, r3 ++.L4306: ++ str r3, [r0, #1256] ++ mov r0, #48 ++ mul r7, r0, r7 ++ ldr r3, .L4307+32 ++ umull r0, r1, r9, r1 ++ add r2, r3, #1232 ++ add r2, r2, r7 ++ add r7, r3, r7 ++ ldrh ip, [r2, #32] ++ ldr r2, .L4307 ++ lsr r1, r1, #1 ++ ldr r3, [r7, #1256] ++ add r1, r1, r1, lsl #1 ++ ldr r2, [r2, #-124] ++ sub r1, r9, r1 ++ lsl r1, r1, #24 ++ add r1, r1, #16777216 ++ orr r1, r1, r3 ++ str r1, [r2, ip, lsl #2] ++.L4233: ++ ldr r3, .L4307 ++ ldrb r2, [r3, #-2542] @ zero_extendqisi2 ++ cmp r2, #0 ++ beq .L4215 ++ ldr r2, [sp, #40] ++ ldrh r2, [r2] ++ cmp r2, r4 ++ bcs .L4215 ++ tst r9, #1 ++ beq .L4215 ++ ldr r1, [r3, #-3124] ++ mvn r2, #0 ++ ldr r0, [sp, #16] ++ ldr ip, [sp, #48] ++ strb r2, [r1, r0] ++ add r1, sp, #80 ++ ldr r0, [sp, #28] ++ add r1, r1, r0, lsl #2 ++ ldrh r0, [sp, #48] ++ ldr r1, [r1, #-24] ++ strh r0, [r1, #32] @ movhi ++ ldrb r0, [r1, #1] @ zero_extendqisi2 ++ ldr r1, [r3, #-3124] ++ strb r0, [r1, ip] ++ ldr r1, [sp, #16] ++ ldr r3, [r3, #-128] ++ str r2, [r3, r1, lsl #2] ++.L4215: ++ ldr r3, [sp, #32] ++ add r3, r3, #1 ++ str r3, [sp, #32] ++ b .L4192 ++.L4211: ++ ldr r2, [sp, #20] ++ ubfx r3, r3, #1, #16 ++ add r3, r2, r3 ++ ldr r2, [sp, #12] ++ add r3, r2, r3, lsl #1 ++ ldr r2, .L4307+60 ++ ldrh r3, [r3, #96] ++ ldrh r2, [r2] ++ mla r3, r2, r3, r4 ++ b .L4306 ++.L4207: ++ cmp r1, #2 ++ bne .L4214 ++ ldrb r3, [r3, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L4213 ++ ldr r2, [sp, #20] ++ ldr r3, [sp, #28] ++ add r3, r3, r2 ++ ldr r2, [sp, #12] ++ add r3, r2, r3, lsl #1 ++ ldr r2, .L4307+60 ++ ldrh r3, [r3, #96] ++ ldrh r2, [r2] ++ mla r3, r2, r3, r4 ++.L4303: ++ orr r3, r3, #33554432 ++ str r3, [r0, #1256] ++ b .L4214 ++.L4213: ++ ldr r3, [sp, #20] ++ ldr r2, [sp, #12] ++ add r3, r3, r9, lsr #1 ++ add r3, r2, r3, lsl #1 ++ ldr r2, .L4307+60 ++ ldrh r3, [r3, #96] ++ ldrh r2, [r2] ++ mla r3, r2, r3, r4 ++ and r2, r9, #1 ++ add r3, r3, r2 ++ b .L4303 ++.L4220: ++ add r0, sp, #80 ++ add ip, sp, #80 ++ add r0, r0, r3, lsl #2 ++ add r3, ip, r3, lsl #2 ++ ldr r3, [r3, #-20] ++ ldr r0, [r0, #-24] ++ ldrb r3, [r3, #1] @ zero_extendqisi2 ++ strb r3, [r0] ++.L4219: ++ uxth r3, r1 ++ add r1, r1, #1 ++ cmp r3, r2 ++ blt .L4220 ++ add r3, sp, #80 ++ add r2, r3, r2, lsl #2 ++ ldr r3, [r2, #-24] ++.L4304: ++ smulbb r1, r6, r5 ++ mvn r2, #0 ++ strb r2, [r3] ++ ldr r0, [sp, #56] ++ uxtb r1, r1 ++ bl sblk_prog_page ++ b .L4221 ++.L4217: ++ ldrb r3, [r7, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L4226 ++ ldrb r3, [r7, #-3125] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L4227 ++.L4226: ++ ldr r2, [sp, #36] ++ sub r1, r2, #1 ++.L4228: ++ uxth r2, r3 ++ add r3, r3, #1 ++ cmp r2, r1 ++ blt .L4229 ++ add r3, sp, #80 ++ add r1, r3, r1, lsl #2 ++ ldr r3, [r1, #-24] ++ b .L4304 ++.L4227: ++ mov r1, r6 ++ add r0, sp, #56 ++ bl sblk_3d_mlc_prog_pages ++ b .L4221 ++.L4229: ++ add r0, sp, #80 ++ add ip, sp, #80 ++ add r0, r0, r2, lsl #2 ++ add r2, ip, r2, lsl #2 ++ ldr r2, [r2, #-20] ++ ldr r0, [r0, #-24] ++ ldrb r2, [r2, #1] @ zero_extendqisi2 ++ strb r2, [r0] ++ b .L4228 ++.L4308: ++ .align 2 ++.L4307: ++ .word .LANCHOR3 ++ .word .LANCHOR0+2824 ++ .word .LANCHOR1+2509 ++ .word .LC0 ++ .word .LANCHOR0+1232 ++ .word .LANCHOR2 ++ .word .LC297 ++ .word .LC298 ++ .word .LANCHOR0 ++ .word .LANCHOR2+2114 ++ .word .LANCHOR3-3118 ++ .word 1431655766 ++ .word .LANCHOR2+3650 ++ .word .LANCHOR3-3104 ++ .word -178307901 ++ .word .LANCHOR3-3074 ++ .word .LANCHOR3-3138 ++ .word -1431655765 ++ .fnend ++ .size gc_do_copy_back, .-gc_do_copy_back ++ .align 2 ++ .global zftl_do_gc ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_do_gc, %function ++zftl_do_gc: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 8 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ movw r3, #2788 ++ ldr r4, .L4535 ++ cmp r0, #1 ++ .pad #36 ++ sub sp, sp, #36 ++ mov r10, r0 ++ ldr r5, .L4535+4 ++ add r9, r4, #2784 ++ ldrh r8, [r4, r3] ++ ldrh r6, [r9] ++ movw r3, #2786 ++ ldr r7, [r4, #1096] ++ ldrh fp, [r4, r3] ++ add r6, r8, r6 ++ uxth r6, r6 ++ beq .L4310 ++.L4322: ++ ldrb r3, [r5, #-144] @ zero_extendqisi2 ++ cmp r3, #6 ++ ldrls pc, [pc, r3, asl #2] ++ b .L4435 ++.L4313: ++ .word .L4312 ++ .word .L4314 ++ .word .L4315 ++ .word .L4316 ++ .word .L4317 ++ .word .L4318 ++ .word .L4319 ++.L4318: ++ ldr r8, .L4535+40 ++ mov r7, #0 ++.L4320: ++ bl gc_check_data_one_wl ++ subs r9, r0, #0 ++ beq .L4431 ++ ldr r3, [r4, #1096] ++ mov r6, #0 ++ strh r6, [r8, #52] @ movhi ++ ldrh r0, [r3, #80] ++ bl ftl_free_sblk ++ ldr r2, [r4, #1096] ++ mvn r3, #0 ++ ldr r1, [r4, #2800] ++ ldr r0, [r4, #2832] ++ strh r3, [r2, #80] @ movhi ++ strh r3, [r1, #126] @ movhi ++ strh r3, [r2, #130] @ movhi ++ bl zbuf_free ++ str r6, [r4, #2832] ++ strb r6, [r5, #-144] ++ b .L4532 ++.L4310: ++ ldr r3, [r5, #-8] ++ cmp r3, #0 ++ bne .L4321 ++ ldr r2, [r5, #-4] ++ cmp r2, #0 ++ beq .L4322 ++.L4321: ++ ldr r2, .L4535+60 ++ ldrh r2, [r2, #-4] ++ cmp r6, r2, lsr #2 ++ bls .L4322 ++ movw r2, #2804 ++ ldrh r2, [r4, r2] ++ cmp r2, r6 ++ bcs .L4322 ++ str r3, [sp, #24] ++ bl timer_get_time ++ ldr r3, [sp, #24] ++ add r3, r3, #20 ++ cmp r3, r0 ++ movcc r3, #0 ++ strcc r3, [r5, #-8] ++ ldr r3, [r5, #-4] ++ add r3, r3, #20 ++ str r3, [sp, #24] ++ bl timer_get_time ++ ldr r3, [sp, #24] ++ cmp r3, r0 ++ movcc r3, #0 ++ strcc r3, [r5, #-4] ++ ldr r3, [r4, #1096] ++ ldrh r3, [r3, #124] ++ cmp r3, #0 ++ bne .L4322 ++.L4435: ++ mov r7, #16 ++ b .L4309 ++.L4312: ++ movw r3, #2790 ++ ldrh r2, [r7, #80] ++ ldrh r9, [r4, r3] ++ movw r3, #2792 ++ ldrh r3, [r4, r3] ++ add r8, r8, fp ++ uxth r8, r8 ++ add r9, r9, r3 ++ movw r3, #65535 ++ cmp r2, r3 ++ uxth r9, r9 ++ beq .L4325 ++ cmp r10, #0 ++ bne .L4326 ++ movw r3, #2804 ++ ldrh r3, [r4, r3] ++ cmp r6, r3, lsl #1 ++ bge .L4435 ++.L4326: ++ ldr r10, .L4535+60 ++ ldrh r1, [r10, #-6] ++ sub r0, r10, #12 ++ add r1, r1, #1 ++ uxth r1, r1 ++ strh r1, [r10, #-6] @ movhi ++ bl _list_get_gc_head_node ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L4328 ++ ldr r1, [r4, #1092] ++ lsl r2, r0, #1 ++ ldr r3, [r5, #-140] ++ ldrh r2, [r1, r2] ++ ldrh r1, [r10, #-8] ++ add r3, r3, #1 ++ str r3, [r5, #-140] ++ cmp r1, r2 ++ bcs .L4329 ++ movw r1, #1080 ++ ldrh r1, [r4, r1] ++ cmp r3, r1, lsr #4 ++ bls .L4328 ++ movw r3, #2808 ++ ldrh r3, [r4, r3] ++ cmp r3, r2 ++ bls .L4328 ++.L4329: ++ ldrb r2, [r5, #-3119] @ zero_extendqisi2 ++ mov r1, #0 ++ bl gc_add_sblk ++ cmp r0, #0 ++ beq .L4330 ++ mov r3, #1 ++ strb r3, [r5, #-144] ++ mov r3, #0 ++ str r3, [r5, #-140] ++ b .L4435 ++.L4328: ++ mov r3, #0 ++ strh r3, [r10, #-6] @ movhi ++.L4330: ++ cmp r8, #15 ++ movls r9, #2 ++ bls .L4331 ++ movw r3, #2794 ++ clz r9, r9 ++ ldrh r2, [r4, r3] ++ lsr r9, r9, #5 ++ ldrh r3, [r10, #-2] ++ cmp r2, r3 ++ orrhi r9, r9, #1 ++ cmp r9, #0 ++ movne r9, #2 ++ moveq r9, #1 ++.L4331: ++ ldr r3, .L4535+8 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L4332 ++ ldrh r1, [r7, #80] ++ ldr r3, [r4, #1096] ++ ldrb r2, [r5, #-3119] @ zero_extendqisi2 ++ str r1, [sp, #16] ++ ldrh r1, [r3, #122] ++ ldr r0, .L4535+12 ++ str r1, [sp, #12] ++ ldrh r1, [r3, #120] ++ str r1, [sp, #8] ++ movw r1, #2807 ++ ldrh r3, [r3, #124] ++ str r8, [sp] ++ str r3, [sp, #4] ++ mov r3, r6 ++ bl rk_printk ++.L4332: ++ mov r2, #1 ++ mov r1, r9 ++ ldrb r0, [r5, #-3119] @ zero_extendqisi2 ++ bl gc_search_src_blk ++ cmp r0, #0 ++ ble .L4333 ++.L4334: ++ mov r3, #1 ++.L4533: ++ strb r3, [r5, #-144] ++ b .L4435 ++.L4333: ++ mov r2, #1 ++ mov r1, #3 ++ ldrb r0, [r5, #-3119] @ zero_extendqisi2 ++ bl gc_search_src_blk ++ cmp r0, #0 ++ bgt .L4334 ++ b .L4435 ++.L4325: ++ cmp r10, #1 ++ bne .L4335 ++ ldr r3, [r4, #2800] ++ ldrh r3, [r3, #150] ++ cmp r3, #0 ++ beq .L4336 ++ movw r3, #2788 ++ ldrh r3, [r4, r3] ++ cmp r3, #8 ++ bls .L4336 ++ bl gc_ink_check_sblk ++.L4336: ++ bl gc_scan_static_data ++ ldr r3, [r4, #1096] ++ ldrh r3, [r3, #122] ++ cmp r3, #0 ++ beq .L4337 ++.L4338: ++ mov r3, #1 ++ strb r3, [r5, #-3119] ++ b .L4533 ++.L4337: ++ bl gc_static_wearleveling ++ subs r7, r0, #0 ++ bne .L4338 ++ bl gc_block_vpn_scan ++ cmp r8, #0 ++ ldr fp, .L4535+60 ++ beq .L4339 ++ cmp r6, r9 ++ bcs .L4340 ++ ldrh r3, [fp, #-4] ++ cmp r3, r6 ++ bhi .L4341 ++.L4340: ++ ldrh r2, [fp, #-4] ++ add r3, r6, r9 ++ cmp r3, r2 ++ blt .L4341 ++ movw r3, #2794 ++ ldrh r2, [r4, r3] ++ ldrh r3, [fp, #-2] ++ cmp r2, r3 ++ bcc .L4339 ++.L4341: ++ mov r1, #1 ++ mov r0, #16 ++ strb r1, [r5, #-3119] ++ str r1, [sp, #24] ++ bl zftl_get_gc_node.part.10 ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L4342 ++ ldr r2, [r4, #1092] ++ lsl r3, r0, #1 ++ ldr r1, [sp, #24] ++ ldrh r3, [r2, r3] ++ ldrh r2, [r5, #-136] ++ cmp r3, r2 ++ movcs r3, #0 ++ movcc r3, #1 ++ cmp r6, #2 ++ movls r3, #0 ++ cmp r3, #0 ++ beq .L4342 ++ mov r2, #0 ++ strb r2, [r5, #-3119] ++ str r2, [r5, #-140] ++ bl gc_add_sblk ++ cmp r0, #0 ++ bne .L4334 ++.L4342: ++ mov r1, #0 ++ ldr r0, .L4535+16 ++ bl _list_get_gc_head_node ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L4343 ++ ldr r2, [r4, #1092] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ ldrh r2, [r5, #-136] ++ cmp r3, r2 ++ movcs r3, #0 ++ movcc r3, #1 ++ cmp r6, #2 ++ movls r3, #0 ++ cmp r3, #0 ++ beq .L4343 ++ mov r2, #0 ++ mov r1, #1 ++ strb r2, [r5, #-3119] ++ str r2, [r5, #-140] ++ bl gc_add_sblk ++ cmp r0, #0 ++ bne .L4334 ++.L4343: ++ ldrh r3, [r5, #-136] ++ ldrh r2, [fp, #-8] ++ ldr r0, .L4535+16 ++ add r3, r3, #1 ++ ldr r1, [r5, #-140] ++ uxth r3, r3 ++ str r2, [sp, #28] ++ cmp r3, r2, lsr #5 ++ strh r3, [r5, #-136] @ movhi ++ add r1, r1, #1 ++ movhi r3, #4 ++ str r1, [r5, #-140] ++ strhhi r3, [r5, #-136] @ movhi ++ mov r3, #0 ++ strh r3, [r0, #-8] @ movhi ++ strh r3, [r0, #-6] @ movhi ++ strh r3, [r0, #-4] @ movhi ++ movw r0, #1080 ++ ldrh r0, [r4, r0] ++ cmp r1, r0, lsr #5 ++ bls .L4345 ++ movw r1, #2794 ++ ldrh r1, [r4, r1] ++ cmp r1, r8 ++ bls .L4345 ++ mov r1, r3 ++ sub r0, fp, #12 ++ str r3, [sp, #24] ++ bl _list_get_gc_head_node ++ movw r1, #65535 ++ ldr r3, [sp, #24] ++ cmp r0, r1 ++ ldr r2, [sp, #28] ++ bne .L4346 ++.L4519: ++ mov r7, #16 ++ b .L4347 ++.L4346: ++ ldr r1, [r4, #1092] ++ lsl r0, r0, #1 ++ ldrh r1, [r1, r0] ++ ldrb r0, [r5, #-3127] @ zero_extendqisi2 ++ mul r2, r2, r0 ++ cmp r1, r2 ++ strle r3, [r5, #-140] ++ movle r2, #4 ++ bgt .L4519 ++.L4527: ++ mov r1, #2 ++.L4518: ++ ldrb r0, [r5, #-3119] @ zero_extendqisi2 ++ bl gc_search_src_blk ++ uxth r0, r0 ++ cmp r0, #0 ++ beq .L4519 ++ b .L4334 ++.L4345: ++ movw r3, #2794 ++ ldrh r2, [r4, r3] ++ ldrh r3, [fp, #-2] ++ cmp r2, r3 ++ movcs r2, #1 ++ bcs .L4527 ++.L4350: ++ movw r3, #2790 ++ ldrh r3, [r4, r3] ++ cmp r3, #0 ++ bne .L4351 ++ movw r3, #2792 ++ ldrh r3, [r4, r3] ++ cmp r3, #8 ++ bls .L4352 ++.L4351: ++ mov r2, #4 ++ mov r1, #1 ++ b .L4518 ++.L4352: ++ ldr r2, .L4535+40 ++ movw r3, #2106 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ bne .L4519 ++.L4347: ++ ldr r3, [r4, #2812] ++ cmp r3, #0 ++ beq .L4353 ++ mov r3, #0 ++ mov r1, #0 ++ str r3, [r4, #2812] ++ subs r3, r8, r3 ++ movne r3, #1 ++ cmp r6, #15 ++ movhi r3, #0 ++ ldr r0, .L4535+20 ++ cmp r3, #0 ++ movne r3, #1 ++ strb r3, [r5, #-3119] ++ bl _list_get_gc_head_node ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L4356 ++ ldr r2, [r4, #1092] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #8 ++ bhi .L4356 ++ mov r3, #1 ++ ldrb r2, [r5, #-3119] @ zero_extendqisi2 ++ mov r1, #0 ++ str r3, [r4, #2812] ++ bl gc_add_sblk ++ cmp r0, #0 ++ bne .L4334 ++.L4356: ++ mov r1, #0 ++ ldr r0, .L4535+16 ++ bl _list_get_gc_head_node ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L4357 ++ ldr r2, [r4, #1092] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #4 ++ bhi .L4357 ++ mov r3, #1 ++ ldrb r2, [r5, #-3119] @ zero_extendqisi2 ++ mov r1, #0 ++ str r3, [r4, #2812] ++ bl gc_add_sblk ++ cmp r0, #0 ++ bne .L4334 ++.L4357: ++ mov r0, #0 ++ bl zftl_get_gc_node.part.10 ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L4353 ++ ldr r2, [r4, #1092] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #4 ++ bhi .L4353 ++ mov r1, #1 ++ ldrb r2, [r5, #-3119] @ zero_extendqisi2 ++ str r1, [r4, #2812] ++ bl gc_add_sblk ++ cmp r0, #0 ++ bne .L4334 ++.L4353: ++ ldr r3, [r4, #1096] ++ mov r1, #1 ++ strb r1, [r5, #-3119] ++ ldrh fp, [r3, #124] ++ cmp fp, #0 ++ movne r3, #0 ++ strbne r1, [r5, #-144] ++ strbne r3, [r5, #-3119] ++ bne .L4309 ++ movw r3, #2804 ++ ldrh r2, [r4, r3] ++ cmp r6, r2 ++ bcs .L4359 ++ cmp r8, #0 ++ beq .L4360 ++ cmp r8, #16 ++ bls .L4361 ++ ldr r6, .L4535+60 ++ movw r3, #2794 ++ ldrh r2, [r4, r3] ++ ldrh r3, [r6, #-2] ++ cmp r2, r3 ++ bhi .L4361 ++ mov r2, #4 ++ mov r0, r1 ++ bl gc_search_src_blk ++ uxth r0, r0 ++ cmp r0, #0 ++ bne .L4362 ++.L4523: ++ ldrb r0, [r5, #-3119] @ zero_extendqisi2 ++ mov r2, #4 ++ mov r1, #3 ++.L4525: ++ bl gc_search_src_blk ++ uxth r0, r0 ++.L4363: ++ cmp r0, #0 ++ bne .L4365 ++ b .L4309 ++.L4339: ++ ldrh r3, [r5, #-136] ++ ldrh r2, [fp, #-8] ++ cmp r3, r2, lsr #5 ++ movcs r3, #4 ++ strhcs r3, [r5, #-136] @ movhi ++ b .L4519 ++.L4335: ++ movw r3, #2804 ++ ldrh r3, [r4, r3] ++ cmp r3, r6 ++ bcs .L4519 ++ ldr r3, [r4, #1096] ++ ldrh r3, [r3, #124] ++ cmp r3, #0 ++ beq .L4435 ++ b .L4519 ++.L4362: ++ mov r1, fp ++ sub r0, r6, #12 ++ bl _list_get_gc_head_node ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L4365 ++ ldr r1, [r4, #1092] ++ lsl r2, r0, #1 ++ ldr r3, [r5, #-140] ++ ldrh r2, [r1, r2] ++ ldrh r1, [r6, #-8] ++ add r3, r3, #1 ++ str r3, [r5, #-140] ++ cmp r1, r2 ++ bcs .L4366 ++ movw r1, #1080 ++ ldrh r1, [r4, r1] ++ cmp r3, r1, lsr #4 ++ bls .L4365 ++ movw r3, #2808 ++ ldrh r3, [r4, r3] ++ cmp r3, r2 ++ bls .L4365 ++.L4366: ++ ldrb r2, [r5, #-3119] @ zero_extendqisi2 ++ mov r1, #0 ++ bl gc_add_sblk ++ mov r3, #1 ++ str r3, [r4, #2812] ++ mov r3, #0 ++ str r3, [r5, #-140] ++.L4365: ++ mov r3, #1 ++ b .L4526 ++.L4361: ++ mov r2, #1 ++ mov r1, #2 ++ mov r0, r2 ++.L4529: ++ bl gc_search_src_blk ++ uxth r0, r0 ++ cmp r0, #0 ++ bne .L4365 ++ b .L4523 ++.L4360: ++ cmp r6, #16 ++ strb r8, [r5, #-3119] ++ movhi r2, #4 ++ movhi r1, #3 ++ movhi r0, r8 ++ bhi .L4525 ++ mov r2, r1 ++ mov r0, r8 ++ b .L4529 ++.L4359: ++ cmp r10, #1 ++ bne .L4309 ++ cmp r6, r2, lsl #1 ++ bge .L4369 ++ cmp r9, r8, lsr #1 ++ bcs .L4370 ++ ldr r2, .L4535+60 ++ movw r1, #2794 ++ ldrh r0, [r4, r1] ++ ldrh r1, [r2, #-2] ++ cmp r0, r1 ++ ldrhcc r2, [r2, #-4] ++ lsrcc r2, r2, #2 ++ strhcc r2, [r4, r3] @ movhi ++ bcc .L4309 ++.L4370: ++ mov r0, #8 ++ bl zftl_get_gc_node.part.10 ++ movw r2, #65535 ++ cmp r0, r2 ++ beq .L4371 ++ ldr r2, [r4, #1092] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #3 ++ movhi r3, #0 ++ movls r3, #1 ++ cmp r6, #0 ++ moveq r3, #0 ++ cmp r3, #0 ++ beq .L4371 ++ mov r2, #0 ++ mov r1, #1 ++ strb r2, [r5, #-3119] ++ bl gc_add_sblk ++ cmp r0, #0 ++ bne .L4365 ++.L4371: ++ mov r1, #0 ++ ldr r0, .L4535+20 ++ bl _list_get_gc_head_node ++ movw r3, #65535 ++ mov fp, r0 ++ cmp r0, r3 ++ ldr r10, .L4535+60 ++ bne .L4372 ++.L4377: ++ cmp r8, #1 ++ bhi .L4373 ++.L4374: ++ cmp r6, r9 ++ bcs .L4381 ++ mov r6, #0 ++ mov r0, #4 ++ strb r6, [r5, #-3119] ++ bl zftl_get_gc_node.part.10 ++ movw r3, #65535 ++ cmp r0, r3 ++ beq .L4381 ++ ldr r3, [r4, #1092] ++ lsl r0, r0, #1 ++ ldrh r1, [r10, #-8] ++ ldrh r2, [r3, r0] ++ ldrb r3, [r5, #-3127] @ zero_extendqisi2 ++ mul r3, r3, r1 ++ cmp r2, r3, asr #1 ++ ble .L4383 ++.L4381: ++ ldrh r3, [r10, #-4] ++ movw r2, #2804 ++ lsr r3, r3, #2 ++ strh r3, [r4, r2] @ movhi ++.L4309: ++ mov r0, r7 ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4372: ++ movw r2, #1080 ++ ldr r3, [r5, #-140] ++ ldrh r2, [r4, r2] ++ add r3, r3, #1 ++ str r3, [r5, #-140] ++ cmp r3, r2, lsr #4 ++ lsl r3, r0, #1 ++ str r3, [sp, #24] ++ bls .L4375 ++ ldr r3, [r4, #1092] ++ lsl r2, r0, #1 ++ mov r1, #0 ++ str r1, [r5, #-140] ++ ldrh r2, [r3, r2] ++ movw r3, #2808 ++ ldrh r3, [r4, r3] ++ cmp r2, r3 ++ bcs .L4375 ++ mov r3, #1 ++ mov r2, r3 ++ strb r3, [r5, #-3119] ++ str r3, [sp, #24] ++ bl gc_add_sblk ++ cmp r0, #0 ++ ldr r3, [sp, #24] ++ beq .L4375 ++.L4526: ++ strb r3, [r5, #-144] ++ b .L4309 ++.L4375: ++ ldr r3, [r4, #1092] ++ lsl r2, fp, #1 ++ ldrh r2, [r3, r2] ++ ldrh r3, [r10, #-8] ++ cmp r2, r3, lsr #1 ++ bhi .L4376 ++ mov r2, #0 ++ mov r1, #1 ++ mov r0, fp ++ bl gc_add_sblk ++ b .L4365 ++.L4376: ++ movw r3, #2790 ++ movw r1, #2792 ++ ldrh r1, [r4, r1] ++ ldrh r3, [r4, r3] ++ add r3, r3, r1 ++ ldrh r1, [r10, #-4] ++ cmp r3, r1, lsl #1 ++ ble .L4377 ++ movw r3, #2808 ++ ldrh r3, [r4, r3] ++ cmp r3, r2 ++ bcc .L4374 ++ b .L4377 ++.L4373: ++ cmp r8, #16 ++ mov r1, #1 ++ strb r1, [r5, #-3119] ++ bls .L4378 ++ movw r3, #2794 ++ ldrh r2, [r4, r3] ++ ldrh r3, [r10, #-2] ++ cmp r2, r3 ++ movls r2, #4 ++ movls r0, r1 ++ bls .L4531 ++.L4378: ++ mov r2, #1 ++ mov r1, #2 ++ mov r0, r2 ++.L4531: ++ bl gc_search_src_blk ++ uxth r0, r0 ++ cmp r0, #0 ++ bne .L4379 ++ mov r2, #4 ++ mov r1, #3 ++ ldrb r0, [r5, #-3119] @ zero_extendqisi2 ++ bl gc_search_src_blk ++ uxth r0, r0 ++.L4379: ++ ldrh r3, [r10, #-4] ++ cmp r6, r9, lsr #1 ++ movw r2, #2804 ++ lsrhi r3, r3, #2 ++ lsrls r3, r3, #1 ++.L4524: ++ strh r3, [r4, r2] @ movhi ++ b .L4363 ++.L4383: ++ mov r2, #4 ++ mov r1, #3 ++ mov r0, r6 ++ bl gc_search_src_blk ++ ldrh r3, [r10, #-4] ++ uxth r0, r0 ++ movw r2, #2804 ++ lsr r3, r3, #1 ++ b .L4524 ++.L4369: ++ ldr r2, .L4535+60 ++ ldrh r2, [r2, #-4] ++ lsr r2, r2, #2 ++ strh r2, [r4, r3] @ movhi ++ movw r3, #2106 ++ ldr r2, .L4535+40 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ moveq r7, #0 ++ b .L4309 ++.L4314: ++ movw r6, #2824 ++ movw r3, #65535 ++ ldrh r2, [r4, r6] ++ cmp r2, r3 ++ bne .L4384 ++ bl gc_get_src_blk ++ strh r0, [r4, r6] @ movhi ++.L4384: ++ movw r3, #2824 ++ movw r1, #65535 ++ ldrh r2, [r4, r3] ++ cmp r2, r1 ++ beq .L4385 ++ movw r1, #1080 ++ ldrh r1, [r4, r1] ++ cmp r1, r2 ++ mvnls r2, #0 ++ strhls r2, [r4, r3] @ movhi ++.L4385: ++ movw r3, #2824 ++ movw r1, #65535 ++ ldrh r3, [r4, r3] ++ ldr r2, .L4535+40 ++ cmp r3, r1 ++ beq .L4534 ++ ldrh ip, [r2, #52] ++ ldr r1, [r4, #1084] ++ cmp ip, #0 ++ addne r2, r2, #52 ++ movne r0, #0 ++ add r1, r1, r3, lsl #2 ++ bne .L4388 ++.L4387: ++ ldrb r2, [r1, #2] @ zero_extendqisi2 ++ tst r2, #192 ++ and r2, r2, #224 ++ moveq r1, #1 ++ movne r1, #0 ++ cmp r2, #224 ++ movne r2, r1 ++ orreq r2, r1, #1 ++ cmp r2, #0 ++ beq .L4390 ++ ldr r2, [r4, #1092] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L4392 ++ movw r2, #3306 ++ ldr r1, .L4535+64 ++ ldr r0, .L4535+68 ++ bl rk_printk ++ bl dump_stack ++ b .L4392 ++.L4388: ++ uxth lr, r0 ++ cmp lr, ip ++ bcs .L4387 ++ ldrh lr, [r2, #2]! ++ add r0, r0, #1 ++ cmp lr, r3 ++ bne .L4388 ++.L4392: ++ mvn r2, #0 ++ movw r3, #2824 ++ strh r2, [r4, r3] @ movhi ++ b .L4435 ++.L4390: ++ mov r3, #2 ++ b .L4533 ++.L4315: ++ bl gc_scan_src_blk ++ cmn r0, #1 ++ moveq r3, #3 ++ beq .L4533 ++ movw r3, #2824 ++ ldr r2, .L4535+40 ++ ldrh r3, [r4, r3] ++ movw r1, #65535 ++ mov r6, r2 ++ cmp r3, r1 ++ beq .L4334 ++ ldrh r1, [r2, #20] ++ cmp r1, #0 ++ movne r3, #4 ++ strbne r3, [r5, #-144] ++ movne r3, #0 ++ strhne r3, [r2, #22] @ movhi ++ bne .L4435 ++.L4394: ++ mov r2, #1 ++ lsl r3, r3, #1 ++ strb r2, [r5, #-144] ++ ldr r2, [r4, #1092] ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L4395 ++ movw r2, #3336 ++ ldr r1, .L4535+64 ++ ldr r0, .L4535+68 ++ bl rk_printk ++ bl dump_stack ++.L4395: ++ movw r5, #2824 ++ ldrh r0, [r4, r5] ++ bl ftl_free_sblk ++ ldrh r3, [r4, r5] ++ mov r5, #0 ++ ldr r2, [r4, #1092] ++ lsl r3, r3, #1 ++ strh r5, [r2, r3] @ movhi ++ ldrh r3, [r6, #26] ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmp r3, #8 ++ strhls r3, [r6, #26] @ movhi ++ bls .L4392 ++ strh r5, [r6, #26] @ movhi ++ bl ftl_flush ++ bl pm_flush ++ bl ftl_ext_info_flush ++ mov r0, r5 ++ bl ftl_info_flush ++ b .L4392 ++.L4316: ++ ldr r7, .L4535+40 ++ mov r8, r7 ++.L4489: ++ bl gc_scan_src_blk_one_page ++ ldr r3, .L4535+24 ++ ldrh r2, [r7, #2] ++ ldrh r3, [r3] ++ cmp r2, r3 ++ bcs .L4398 ++ cmp r6, #7 ++ bls .L4489 ++ b .L4435 ++.L4398: ++ ldrh r3, [r7, #20] ++ ldrh r1, [r7] ++ cmp r3, #0 ++ beq .L4399 ++ mov r2, #4 ++ ldr r0, [r4, #1092] ++ strb r2, [r5, #-144] ++ mov r2, #0 ++ strh r2, [r7, #22] @ movhi ++ lsl r2, r1, #1 ++ ldrh r2, [r0, r2] ++ cmp r3, r2 ++ beq .L4400 ++ ldr r0, .L4535+8 ++ ldr r0, [r0] ++ tst r0, #1024 ++ beq .L4400 ++ ldr r0, .L4535+28 ++ bl rk_printk ++.L4400: ++ movw r3, #2824 ++ ldr r2, [r4, #1092] ++ ldrh r3, [r4, r3] ++ lsl r3, r3, #1 ++ ldrh r2, [r2, r3] ++ ldrh r3, [r8, #20] ++ cmp r2, r3 ++ beq .L4401 ++ movw r2, #3379 ++ ldr r1, .L4535+64 ++ ldr r0, .L4535+68 ++ bl rk_printk ++ bl dump_stack ++.L4401: ++ movw r3, #2824 ++ ldrh r1, [r8, #20] ++ ldrh r3, [r4, r3] ++ ldr r2, [r4, #1092] ++ lsl r3, r3, #1 ++ strh r1, [r2, r3] @ movhi ++ b .L4435 ++.L4399: ++ mov r3, #1 ++ ldr r6, [r4, #1084] ++ strb r3, [r5, #-144] ++ ldr r3, .L4535+8 ++ add r6, r6, r1, lsl #2 ++ ldr r3, [r3] ++ tst r3, #256 ++ beq .L4402 ++ ldrb r2, [r6, #2] @ zero_extendqisi2 ++ ldr r0, .L4535+32 ++ lsr r2, r2, #5 ++ bl rk_printk ++.L4402: ++ ldrb r3, [r6, #2] @ zero_extendqisi2 ++ and r2, r3, #224 ++ and r3, r3, #192 ++ cmp r3, #0 ++ cmpne r2, #224 ++ bne .L4403 ++ movw r2, #3389 ++ ldr r1, .L4535+64 ++ ldr r0, .L4535+68 ++ bl rk_printk ++ bl dump_stack ++.L4403: ++ movw r5, #2824 ++ ldrh r0, [r4, r5] ++ bl ftl_free_sblk ++ mvn r3, #0 ++ strh r3, [r4, r5] @ movhi ++ ldrh r3, [r8, #26] ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmp r3, #8 ++ movhi r3, #0 ++ strhls r3, [r8, #26] @ movhi ++ strhhi r3, [r8, #26] @ movhi ++ bls .L4435 ++.L4532: ++ bl flt_sys_flush ++ b .L4435 ++.L4317: ++ cmp r10, #0 ++ bne .L4405 ++ movw r3, #2804 ++ ldrh r3, [r4, r3] ++ cmp r3, r6 ++ bcc .L4435 ++.L4405: ++ ldrh r2, [r7, #80] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L4406 ++ ldrb r8, [r5, #-3119] @ zero_extendqisi2 ++ cmp r8, #1 ++ bne .L4406 ++ ldr r9, .L4535+40 ++ bl ftl_flush ++ movw r3, #2180 ++ mov r1, #5 ++ ldrh r0, [r9, r3] ++ cmp r0, #0 ++ movne r0, r8 ++ bl zftl_gc_get_free_sblk ++ movw r3, #65535 ++ mov r6, r0 ++ cmp r0, r3 ++ beq .L4409 ++ ldr r8, [r4, #1084] ++ add r8, r8, r0, lsl #2 ++ ldrb r3, [r8, #2] @ zero_extendqisi2 ++ tst r3, #224 ++ beq .L4410 ++ movw r2, #3423 ++ ldr r1, .L4535+64 ++ ldr r0, .L4535+68 ++ bl rk_printk ++ bl dump_stack ++.L4410: ++ ldrb r3, [r8, #2] @ zero_extendqisi2 ++ and r3, r3, #15 ++ orr r3, r3, #176 ++ strb r3, [r8, #2] ++.L4434: ++ mov r1, #1 ++ mov r0, r6 ++ bl ftl_erase_sblk ++ mov r3, #5 ++ add r1, r7, #96 ++ strb r3, [r7, #84] ++ mov r0, r6 ++ bl ftl_get_blk_list_in_sblk ++ ldr r2, .L4535+60 ++ uxtb r0, r0 ++ mov r8, #0 ++ strh r6, [r7, #80] @ movhi ++ strb r0, [r7, #89] ++ mov r1, #255 ++ ldrh r3, [r2, #-8] ++ strh r8, [r7, #82] @ movhi ++ strb r8, [r7, #85] ++ strh r8, [r7, #90] @ movhi ++ smulbb r0, r3, r0 ++ ldrh r3, [r2, #-30] ++ strh r0, [r7, #86] @ movhi ++ sub r7, r2, #16 ++ ldrb r2, [r5, #-3127] @ zero_extendqisi2 ++ ldr r0, [r5, #-132] ++ mul r2, r2, r3 ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldrh r3, [r7, #-14] ++ mov r1, #255 ++ ldrb r2, [r5, #-3127] @ zero_extendqisi2 ++ ldr r0, [r5, #-128] ++ mul r2, r2, r3 ++ lsl r2, r2, #2 ++ bl ftl_memset ++ ldrh r3, [r7, #-14] ++ mov r1, #255 ++ ldrb r2, [r5, #-3127] @ zero_extendqisi2 ++ ldr r0, [r5, #-3124] ++ mvn r5, #0 ++ mul r2, r2, r3 ++ bl ftl_memset ++ ldr r3, [r4, #1096] ++ strh r5, [r3, #128] @ movhi ++ strh r5, [r3, #130] @ movhi ++ str r6, [r3, #132] ++ bl pm_flush ++ bl ftl_ext_info_flush ++ ldr r3, [r4, #2800] ++ movw r2, #2182 ++ mov r0, r8 ++ strh r8, [r9, #52] @ movhi ++ strh r6, [r3, #126] @ movhi ++ movw r3, #2102 ++ strh r8, [r9, r3] @ movhi ++ ldr r3, .L4535+36 ++ strh r8, [r9, r2] @ movhi ++ strh r8, [r3] @ movhi ++ str r5, [r3, #80] ++ bl ftl_info_flush ++ b .L4435 ++.L4536: ++ .align 2 ++.L4535: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR2 ++ .word .LC299 ++ .word .LANCHOR3-3104 ++ .word .LANCHOR3-3100 ++ .word .LANCHOR3-3096 ++ .word .LC300 ++ .word .LC301 ++ .word .LANCHOR0+4928 ++ .word .LANCHOR0+2824 ++ .word .LANCHOR0+4096 ++ .word 1145785929 ++ .word .LANCHOR3-3136 ++ .word .LANCHOR0+1088 ++ .word .LANCHOR3-3088 ++ .word .LANCHOR1+2525 ++ .word .LC0 ++.L4406: ++ cmp r10, #1 ++ movne r8, #1 ++ moveq r8, #4 ++ cmp r6, #15 ++ ldr r6, .L4535+40 ++ addls r8, r8, #4 ++ add r10, r6, #2176 ++ add r10, r10, #6 ++.L4413: ++ sub r8, r8, #1 ++ uxtb r8, r8 ++ cmp r8, #255 ++ beq .L4435 ++ bl gc_do_copy_back ++ ldrb r3, [r5, #-3119] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L4414 ++ ldrb r3, [r4, #2769] @ zero_extendqisi2 ++ cmp r3, #3 ++ bhi .L4415 ++ bl ftl_write_commit ++.L4415: ++ ldrh r2, [r6, #22] ++ ldrh r3, [r6, #20] ++ cmp r2, r3 ++ bcc .L4413 ++ mov r3, #1 ++ strb r3, [r5, #-144] ++ bl ftl_write_commit ++ bl ftl_flush ++ ldrh r3, [r6] ++ ldr r2, [r4, #1092] ++ lsl r3, r3, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ beq .L4417 ++ movw r2, #3507 ++ ldr r1, .L4535+64 ++ ldr r0, .L4535+68 ++ bl rk_printk ++ bl dump_stack ++.L4417: ++ movw r3, #2824 ++ ldr r2, [r4, #1092] ++ ldrh r0, [r4, r3] ++ lsl r3, r0, #1 ++ ldrh r3, [r2, r3] ++ cmp r3, #0 ++ bne .L4418 ++ bl ftl_free_sblk ++ b .L4392 ++.L4418: ++ mov r2, #1 ++ mov r1, #0 ++ bl gc_add_sblk ++ b .L4392 ++.L4414: ++ ldrh r3, [r10] ++ cmp r3, #0 ++ beq .L4419 ++ ldr r8, .L4535+44 ++ mov r3, #0 ++ strh r3, [r10] @ movhi ++ bl sblk_wait_write_queue_completed ++ bl gc_write_completed ++ ldr r0, [r8, #912] ++ cmn r0, #1 ++ beq .L4420 ++ ldrb r3, [r5, #-2542] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L4421 ++ ldrb r3, [r5, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L4422 ++.L4421: ++ ldr r3, [r4, #2800] ++ ldr r2, [r3, #156] ++ ldr r3, .L4535+48 ++ cmp r2, r3 ++ bne .L4422 ++ ldr r7, .L4535+52 ++ ldrb r3, [r4, #1153] @ zero_extendqisi2 ++ ldrb r1, [r5, #-3136] @ zero_extendqisi2 ++ ldrh r2, [r7, #-2] ++ rsb r3, r3, #24 ++ sub r3, r3, r2 ++ lsr r2, r0, r2 ++ mvn r0, #0 ++ bic r0, r2, r0, lsl r3 ++ bl __aeabi_uidiv ++ ldr r3, [r4, #1084] ++ lsl lr, r0, #2 ++ add ip, r3, lr ++ ldrb r2, [ip, #2] @ zero_extendqisi2 ++ tst r2, #8 ++ beq .L4420 ++ ldrh r1, [r9] ++ ldrh r7, [r7, #44] ++ add r1, r1, #8 ++ cmp r1, r7 ++ bge .L4420 ++ ldr r1, .L4535+56 ++ bfc r2, #3, #2 ++ strb r2, [ip, #2] ++ ldr r2, [r3, r0, lsl #2] ++ ldrh r1, [r1] ++ ldrh ip, [r3, lr] ++ ubfx r2, r2, #11, #8 ++ mul r1, r2, r1 ++ ubfx r7, ip, #0, #11 ++ lsr r2, r2, #3 ++ add r1, r1, r1, lsl #1 ++ add r1, r7, r1, asr #2 ++ bfi ip, r1, #0, #11 ++ strh ip, [r3, lr] @ movhi ++ ldr r1, [r3, r0, lsl #2] ++ bfi r1, r2, #11, #8 ++ str r1, [r3, r0, lsl #2] ++.L4420: ++ ldr r3, [r4, #1096] ++ mov r7, #0 ++ str r7, [r8, #912] ++ strh r7, [r6, #52] @ movhi ++ ldrh r0, [r3, #80] ++ bl ftl_free_sblk ++ ldr r0, [r4, #2832] ++ mvn r3, #0 ++ ldr r2, [r4, #1096] ++ ldr r1, [r4, #2800] ++ cmp r0, r7 ++ strh r3, [r2, #80] @ movhi ++ strh r3, [r1, #126] @ movhi ++ strh r3, [r2, #130] @ movhi ++ beq .L4423 ++ bl zbuf_free ++.L4423: ++ str r7, [r4, #2832] ++ bl flt_sys_flush ++ movw r2, #3567 ++ ldr r1, .L4535+64 ++ ldr r0, .L4535+68 ++ strb r7, [r5, #-144] ++ bl rk_printk ++ bl dump_stack ++ b .L4435 ++.L4422: ++ bl ftl_mask_bad_block ++ b .L4420 ++.L4419: ++ ldrh r3, [r7, #86] ++ ldrh r2, [r6, #22] ++ cmp r3, #1 ++ ldrh r3, [r6, #20] ++ bls .L4424 ++ cmp r2, r3 ++ bcc .L4413 ++ mov r3, #1 ++ strb r3, [r5, #-144] ++ ldrh r3, [r6, #52] ++ add r2, r3, #1 ++ strh r2, [r6, #52] @ movhi ++ add r3, r6, r3, lsl #1 ++ ldrh r2, [r6] ++ strh r2, [r3, #54] @ movhi ++ mvn r3, #0 ++ strh r3, [r6] @ movhi ++ b .L4435 ++.L4424: ++ cmp r2, r3 ++ mov r1, #5 ++ strb r1, [r5, #-144] ++ bcc .L4425 ++ ldrh r3, [r6, #52] ++ add r2, r3, #1 ++ strh r2, [r6, #52] @ movhi ++ add r3, r6, r3, lsl #1 ++ ldrh r2, [r6] ++ strh r2, [r3, #54] @ movhi ++ mvn r3, #0 ++ strh r3, [r6] @ movhi ++.L4425: ++ bl ftl_flush ++ bl sblk_wait_write_queue_completed ++ bl gc_write_completed ++ ldrh r2, [r7, #80] ++ ldr r3, [r4, #1096] ++ strh r2, [r3, #128] @ movhi ++ bl pm_flush ++ bl ftl_ext_info_flush ++ ldr r2, .L4535+60 ++ mov r3, #0 ++ ldrb r1, [r4, #1158] @ zero_extendqisi2 ++ strh r3, [r6, #12] @ movhi ++ ldrh r3, [r2, #-8] ++ cmp r1, #0 ++ ldrhne r2, [r2, #-30] ++ strh r3, [r6, #14] @ movhi ++ ldrb r3, [r5, #-3128] @ zero_extendqisi2 ++ strhne r2, [r6, #14] @ movhi ++ movne r2, #1 ++ strh r3, [r6, #16] @ movhi ++ strhne r2, [r6, #16] @ movhi ++ cmp r3, #2 ++ bne .L4428 ++ ldrh r3, [r6, #14] ++ lsl r3, r3, #1 ++ strh r3, [r6, #14] @ movhi ++ ldrb r3, [r5, #-3126] @ zero_extendqisi2 ++ cmp r3, #0 ++ moveq r3, #1 ++ strheq r3, [r6, #16] @ movhi ++.L4428: ++ mov r3, #0 ++ strh r3, [r6, #18] @ movhi ++ b .L4435 ++.L4431: ++ ldrh r2, [r8, #12] ++ ldrh r3, [r8, #14] ++ cmp r2, r3 ++ bcc .L4432 ++ mov r3, #6 ++ ldr r0, [r4, #2832] ++ strb r3, [r5, #-144] ++ bl zbuf_free ++ str r9, [r4, #2832] ++ b .L4435 ++.L4432: ++ cmp r6, #15 ++ bls .L4320 ++ cmp r10, #1 ++ bne .L4435 ++ add r7, r7, #1 ++ uxtb r7, r7 ++ cmp r7, #4 ++ bls .L4320 ++ b .L4435 ++.L4319: ++ bl gc_update_l2p_map_new ++ bl gc_free_src_blk ++ bl ftl_flush ++ mvn r6, #0 ++ bl pm_flush ++ strh r6, [r7, #80] @ movhi ++ bl ftl_ext_info_flush ++ ldr r3, [r4, #2800] ++ mov r0, #0 ++ strh r6, [r3, #126] @ movhi ++ bl ftl_info_flush ++.L4534: ++ mov r3, #0 ++ b .L4533 ++.L4409: ++ movw r2, #3430 ++ ldr r1, .L4535+64 ++ ldr r0, .L4535+68 ++ bl rk_printk ++ bl dump_stack ++ b .L4434 ++ .fnend ++ .size zftl_do_gc, .-zftl_do_gc ++ .align 2 ++ .global zftl_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_init, %function ++zftl_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mvn r3, #0 ++ ldr r5, .L4617 ++ mov r6, #0 ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, .L4617+4 ++ ldr r9, .L4617+8 ++ ldr r1, .L4617+12 ++ ldr r0, .L4617+16 ++ strb r3, [r4, #2820] ++ strb r3, [r5, #-2536] ++ strb r3, [r5, #-88] ++ str r3, [r5] ++ strb r6, [r4, #2796] ++ strb r6, [r5, #-2535] ++ strb r6, [r4, #2797] ++ bl rk_printk ++ ldrb r3, [r9, #16] @ zero_extendqisi2 ++ sub r2, r5, #3104 ++ ldrb r8, [r9, #13] @ zero_extendqisi2 ++ str r3, [sp, #4] ++ ldrb r3, [sp, #4] @ zero_extendqisi2 ++ ldr r1, [sp, #4] ++ lsl r10, r8, #9 ++ strb r8, [r5, #-2546] ++ strb r3, [r5, #-3128] ++ uxth r10, r10 ++ ldrh r3, [r9, #14] ++ strh r3, [r2, #-14] @ movhi ++ mov r0, r3 ++ str r3, [sp, #12] ++ bl __aeabi_idiv ++ str r0, [sp, #8] ++ sub r2, r5, #3088 ++ ldrh r3, [sp, #8] ++ mov r1, #1 ++ ldrb r7, [r4, #1109] @ zero_extendqisi2 ++ ldrh fp, [r9, #18] ++ strh r3, [r2, #-8] @ movhi ++ ldrb r2, [r9, #17] @ zero_extendqisi2 ++ strb r7, [r5, #-3072] ++ ldr r3, [sp, #12] ++ ldrh r0, [r4, #2] ++ smulbb r7, r7, r2 ++ strb r2, [r5, #-3136] ++ movw r2, #1080 ++ strh r10, [r5, #-14] @ movhi ++ strh fp, [r4, r2] @ movhi ++ sub r2, r5, #3072 ++ uxtb r7, r7 ++ strh r0, [r2, #-2] @ movhi ++ strb r7, [r5, #-3127] ++.L4538: ++ cmp r0, r1 ++ uxth r2, r6 ++ add r6, r6, #1 ++ bcs .L4539 ++ ldr r1, .L4617+20 ++ sub r2, r2, #1 ++ mov ip, #0 ++ mov r0, #1 ++ strh r2, [r1, #-2] @ movhi ++ mul r2, r3, r8 ++ mul r1, r2, fp ++ str r2, [sp, #12] ++ lsr lr, r1, #21 ++.L4540: ++ cmp lr, r0 ++ uxth r2, ip ++ add ip, ip, #1 ++ bcs .L4541 ++ ldr r9, .L4617+24 ++ sub r2, r2, #1 ++ uxth r2, r2 ++ mul r1, r7, r1 ++ ldr r6, .L4617 ++ lsr fp, fp, #4 ++ str r3, [sp, #20] ++ mul r0, r9, r7 ++ str r1, [r4, #2776] ++ mov r1, r8 ++ sub r8, r6, #3088 ++ lsl r9, r0, r2 ++ add r2, r9, #24576 ++ str r9, [r4, #1032] ++ str r2, [r6, #4] ++ mov r0, r2 ++ str r2, [sp, #16] ++ bl __aeabi_uidiv ++ sub ip, r10, #1 ++ str r0, [r4, #2780] ++ mov r1, r10 ++ add r0, ip, r0, lsl #2 ++ bl __aeabi_uidiv ++ ldr r3, [sp, #8] ++ strh r0, [r6, #8] @ movhi ++ uxth r0, r0 ++ lsl r0, r0, #4 ++ mul r1, r7, r3 ++ bl __aeabi_idiv ++ ldr r3, [sp, #12] ++ ldr r2, [sp, #16] ++ strh r0, [r6, #-176] @ movhi ++ mul r1, r7, r3 ++ mov r0, r2 ++ sub r1, r1, #1 ++ bl __aeabi_uidiv ++ cmp fp, #79 ++ strh fp, [r8, #-4] @ movhi ++ movls r2, #80 ++ mov r1, #2000 ++ strhls r2, [r8, #-4] @ movhi ++ add r0, r0, #8 ++ ldr r2, .L4617+28 ++ strh r0, [r8, #-2] @ movhi ++ mov r0, #32 ++ ldr r3, [sp, #20] ++ strh r1, [r2, #-10] @ movhi ++ mov r1, #50 ++ strh r1, [r2, #-12] @ movhi ++ mov r1, #256 ++ strh r1, [r6, #-180] @ movhi ++ mov r1, #48 ++ strh r1, [r6, #-178] @ movhi ++ ldr r1, .L4617+32 ++ strh r0, [r1] @ movhi ++ ldr r1, [sp, #4] ++ cmp r1, #2 ++ mov r1, r2 ++ beq .L4543 ++ ldrb ip, [r6, #-3120] @ zero_extendqisi2 ++ cmp ip, #0 ++ beq .L4544 ++.L4543: ++ mov r2, #150 ++ mov r0, #12 ++ strh r2, [r1, #-12] @ movhi ++ mov r2, #64 ++ strh r2, [r6, #-178] @ movhi ++ ldr r2, .L4617+32 ++ strh r0, [r2] @ movhi ++ ldrb r0, [r4] @ zero_extendqisi2 ++ cmp r0, #0 ++ moveq r0, #4 ++ strheq r0, [r2] @ movhi ++ moveq r2, #600 ++ strheq r2, [r1, #-10] @ movhi ++ moveq r2, #128 ++ strheq r2, [r6, #-180] @ movhi ++ ldrb r2, [r4, #1159] @ zero_extendqisi2 ++ cmp r2, #0 ++ movne r2, #200 ++ strhne r2, [r1, #-12] @ movhi ++ movne r2, #2000 ++ strhne r2, [r1, #-10] @ movhi ++.L4547: ++ mul r7, r7, r3 ++ mov r2, #0 ++ str r2, [r4, #2812] ++ mov r2, #1 ++ strb r2, [r6, #-11] ++ cmp r10, r7, lsl #2 ++ ldr r7, .L4617+8 ++ movlt r3, #2 ++ strblt r3, [r6, #-11] ++ ldr r3, [r7] ++ tst r3, #4096 ++ beq .L4550 ++ mov r1, r9 ++ ldr r0, .L4617+36 ++ bl rk_printk ++.L4550: ++ ldr r3, [r7] ++ tst r3, #4096 ++ beq .L4551 ++ ldr r1, [r4, #2776] ++ ldr r0, .L4617+40 ++ bl rk_printk ++.L4551: ++ ldr r3, [r7] ++ tst r3, #4096 ++ beq .L4552 ++ ldr r1, [r4, #2780] ++ ldr r0, .L4617+44 ++ bl rk_printk ++.L4552: ++ ldr r3, [r7] ++ tst r3, #4096 ++ beq .L4553 ++ ldr r1, [r6, #4] ++ ldr r0, .L4617+48 ++ bl rk_printk ++.L4553: ++ ldr r3, [r7] ++ tst r3, #4096 ++ beq .L4554 ++ ldrh r1, [r6, #8] ++ ldr r0, .L4617+52 ++ bl rk_printk ++.L4554: ++ ldr r3, [r7] ++ tst r3, #4096 ++ beq .L4555 ++ ldrh r1, [r6, #-14] ++ ldr r0, .L4617+56 ++ bl rk_printk ++.L4555: ++ ldr r3, [r7] ++ tst r3, #4096 ++ beq .L4556 ++ ldrh r1, [r6, #-176] ++ ldr r0, .L4617+60 ++ bl rk_printk ++.L4556: ++ ldr r3, [r7] ++ tst r3, #4096 ++ beq .L4557 ++ ldrh r1, [r8, #-4] ++ ldr r0, .L4617+64 ++ bl rk_printk ++.L4557: ++ ldr r3, [r7] ++ tst r3, #4096 ++ beq .L4558 ++ ldrh r1, [r8, #-2] ++ ldr r0, .L4617+68 ++ bl rk_printk ++.L4558: ++ bl zbuf_init ++ mov r0, #16384 ++ movw r9, #1080 ++ bl ftl_malloc ++ str r0, [r5, #-52] ++ mov r0, #16384 ++ bl ftl_malloc ++ str r0, [r5, #-44] ++ mov r0, #16384 ++ bl ftl_malloc ++ str r0, [r5, #12] ++ mov r0, #256 ++ bl ftl_dma32_malloc ++ str r0, [r5, #-76] ++ mov r0, #256 ++ bl ftl_dma32_malloc ++ ldrh r3, [r4, r9] ++ str r0, [r5, #-40] ++ mov r0, #6 ++ mul r0, r0, r3 ++ bl ftl_dma32_malloc ++ ldrh r3, [r8, #-8] ++ str r0, [r4, #1036] ++ ldrb r0, [r5, #-3127] @ zero_extendqisi2 ++ mul r0, r0, r3 ++ lsl r0, r0, #2 ++ bl ftl_dma32_malloc ++ ldrh r1, [r8, #-8] ++ str r0, [r5, #-2552] ++ ldrb r0, [r5, #-3127] @ zero_extendqisi2 ++ ldr r2, [r5, #-44] ++ ldrh ip, [r4, r9] ++ mul r0, r0, r1 ++ str r2, [r5, #-2556] ++ lsl r1, r0, #1 ++ add r3, r2, r0, lsl #3 ++ ldr r0, [r7] ++ add r1, r1, ip, lsr #1 ++ str r3, [r4, #1092] ++ add r1, r2, r1, lsl #2 ++ tst r0, #4096 ++ str r1, [r4, #1096] ++ beq .L4559 ++ ldr r0, .L4617+72 ++ bl rk_printk ++.L4559: ++ ldrh r2, [r8, #-8] ++ movw r3, #1080 ++ ldrb r5, [r6, #-3127] @ zero_extendqisi2 ++ ldrh r3, [r4, r3] ++ mul r5, r5, r2 ++ ldrh r2, [r6, #8] ++ lsl r8, r3, #2 ++ add r5, r3, r5, lsl #2 ++ ldr r3, [r7] ++ add r8, r8, r2, lsl #2 ++ lsl r5, r5, #1 ++ tst r3, #4096 ++ add r5, r5, #632 ++ add r8, r8, #704 ++ beq .L4560 ++ ldrh r3, [r6, #-14] ++ mov r2, r8 ++ mov r1, r5 ++ ldr r0, .L4617+76 ++ bl rk_printk ++.L4560: ++ ldrh r1, [r6, #-14] ++ cmp r8, r1 ++ cmpls r5, r1 ++ movhi r5, #1 ++ movls r5, #0 ++ bls .L4561 ++.L4615: ++ b .L4615 ++.L4539: ++ lsl r1, r1, #1 ++ b .L4538 ++.L4541: ++ lsl r0, r0, #1 ++ b .L4540 ++.L4544: ++ ldrb r1, [r4, #1158] @ zero_extendqisi2 ++ cmp r1, #0 ++ movne r1, #1200 ++ strhne r0, [r2, #-12] @ movhi ++ strhne r1, [r2, #-10] @ movhi ++ strhne r0, [r6, #-178] @ movhi ++ b .L4547 ++.L4561: ++ bl sblk_init ++ bl gc_init ++ bl ftl_info_blk_init ++ cmn r0, #1 ++ beq .L4537 ++ bl ftl_ext_info_init ++ mov r0, #1 ++ bl pm_init ++ bl lpa_rebuild_hash ++ ldr r0, [r4, #1096] ++ mov r1, r5 ++ add r0, r0, #16 ++ bl ftl_open_sblk_recovery ++ ldr r0, [r4, #1096] ++ add r1, r0, #16 ++ add r0, r0, #48 ++ bl ftl_open_sblk_recovery ++ ldr r2, [r4, #2800] ++ ldr r0, [r4, #1096] ++ ldr r3, [r2, #8] ++ add r0, r0, #16 ++ add r3, r3, #16 ++ str r3, [r2, #8] ++ bl ftl_info_data_recovery ++ ldr r0, [r4, #1096] ++ add r0, r0, #48 ++ bl ftl_info_data_recovery ++ ldr r0, [r4, #1096] ++ add r0, r0, #80 ++ bl ftl_info_data_recovery ++ bl gc_recovery ++ bl pm_flush ++ mov r0, #1 ++ bl ftl_total_vpn_update ++ ldrb r3, [r6, #-47] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrne r2, [r4, #2800] ++ ldrne r3, [r2, #68] ++ addne r3, r3, #1 ++ strne r3, [r2, #68] ++ bl ftl_ext_info_flush ++ mov r0, #0 ++ bl ftl_info_flush ++ bl print_ftl_debug_info ++ ldr r3, [r4, #1096] ++ ldrh r3, [r3, #124] ++ cmp r3, #0 ++ bne .L4571 ++ ldr r3, .L4617+80 ++ movw r2, #2788 ++ ldrh r2, [r4, r2] ++ ldrh r3, [r3] ++ add r3, r3, r2 ++ cmp r3, #7 ++ ble .L4571 ++.L4567: ++ mov r0, #0 ++.L4537: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4571: ++ ldr r6, .L4617+80 ++ mov r5, #16384 ++.L4568: ++ mov r1, #1 ++ mov r0, #0 ++ bl zftl_do_gc ++ mov r1, #1 ++ mov r0, r1 ++ bl zftl_do_gc ++ ldr r3, [r4, #1096] ++ ldrh r2, [r3, #124] ++ cmp r2, #0 ++ bne .L4566 ++ ldrh r2, [r3, #80] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L4566 ++ ldr r2, .L4617+84 ++ ldrh r3, [r6] ++ ldrh r2, [r2] ++ add r3, r3, r2 ++ cmp r3, #7 ++ bgt .L4567 ++.L4566: ++ subs r5, r5, #1 ++ bne .L4568 ++ b .L4567 ++.L4618: ++ .align 2 ++.L4617: ++ .word .LANCHOR3 ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LC1 ++ .word .LC2 ++ .word .LANCHOR3-3136 ++ .word 1892352 ++ .word .LANCHOR3-2528 ++ .word .LANCHOR0+1088 ++ .word .LC302 ++ .word .LC303 ++ .word .LC304 ++ .word .LC305 ++ .word .LC306 ++ .word .LC307 ++ .word .LC308 ++ .word .LC309 ++ .word .LC310 ++ .word .LC311 ++ .word .LC312 ++ .word .LANCHOR0+2784 ++ .word .LANCHOR0+2788 ++ .fnend ++ .size zftl_init, .-zftl_init ++ .align 2 ++ .global rk_ftl_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_init, %function ++rk_ftl_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L4634 ++ mov r0, #68 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, #0 ++ ldr r4, .L4634+4 ++ ldr r3, [r3] ++ str r5, [r4, #-164] ++ strb r5, [r4, #16] ++ str r3, [r4, #-168] ++ str r5, [r4, #-152] ++ bl ftl_dma32_malloc ++ cmp r0, r5 ++ str r0, [r4, #-160] ++ bne .L4620 ++.L4622: ++ mvn r5, #0 ++.L4619: ++ mov r0, r5 ++ pop {r4, r5, r6, r7, r8, pc} ++.L4620: ++ mov r0, #2048 ++ bl ftl_dma32_malloc ++ mov r1, r4 ++ str r0, [r4, #20] ++ str r5, [r1, #24]! ++ sub r0, r4, #156 ++ str r5, [r4, #-156] ++ bl rknand_get_reg_addr ++ ldr r3, [r4, #-156] ++ cmp r3, #0 ++ beq .L4622 ++ bl rk_nandc_irq_init ++ mov r3, #2048 ++ mov r2, r5 ++ mov r1, r5 ++ ldr r0, [r4, #20] ++ bl flash_sram_load_store ++ bl rknand_flash_cs_init ++ ldr r3, [r4, #-160] ++ ldr r2, .L4634+8 ++ ldr r0, [r4, #-156] ++ str r2, [r3, #40] ++ ldr r2, .L4634+12 ++ str r2, [r3, #32] ++ ldr r2, .L4634+16 ++ str r2, [r3, #44] ++ ldr r2, .L4634+20 ++ str r2, [r3, #48] ++ ldr r2, .L4634+24 ++ str r2, [r3, #36] ++ ldr r2, .L4634+28 ++ str r2, [r3, #56] ++ ldr r2, .L4634+32 ++ str r2, [r3, #20] ++ ldr r2, .L4634+36 ++ str r2, [r3, #24] ++ ldr r2, .L4634+40 ++ str r2, [r3, #12] ++ ldr r2, .L4634+44 ++ str r2, [r3, #16] ++ ldr r2, .L4634+48 ++ str r2, [r3, #4] ++ ldr r2, .L4634+52 ++ str r2, [r3, #8] ++ ldr r2, .L4634+56 ++ str r2, [r3, #60] ++ ldr r2, .L4634+60 ++ str r2, [r3, #64] ++ ldr r2, .L4634+64 ++ str r2, [r3, #52] ++ ldr r2, .L4634+68 ++ str r2, [r3, #28] ++ bl nand_flash_init ++ subs r7, r0, #0 ++ bne .L4623 ++ bl zftl_init ++ mov r5, r0 ++ bl zftl_proc_debug_init ++ mov r3, #1 ++ strb r3, [r4, #16] ++.L4624: ++ mov r1, r5 ++ ldr r0, .L4634+72 ++ bl rk_printk ++ b .L4619 ++.L4623: ++ ldr r3, [r4, #-160] ++ mov r6, r4 ++ ldr r2, .L4634+76 ++ ldr r0, [r4, #-156] ++ ldr r4, .L4634+80 ++ str r2, [r3, #40] ++ ldr r2, .L4634+84 ++ str r2, [r3, #32] ++ ldr r2, .L4634+88 ++ str r2, [r3, #44] ++ ldr r2, .L4634+92 ++ str r2, [r3, #48] ++ ldr r2, .L4634+96 ++ str r2, [r3, #36] ++ ldr r2, .L4634+100 ++ str r2, [r3, #56] ++ ldr r2, .L4634+104 ++ str r2, [r3, #20] ++ ldr r2, .L4634+108 ++ str r2, [r3, #24] ++ ldr r2, .L4634+112 ++ str r2, [r3, #12] ++ ldr r2, .L4634+116 ++ str r2, [r3, #16] ++ ldr r2, .L4634+120 ++ str r2, [r3, #4] ++ ldr r2, .L4634+124 ++ str r2, [r3, #8] ++ ldr r2, .L4634+128 ++ str r2, [r3, #60] ++ ldr r2, .L4634+132 ++ str r2, [r3, #64] ++ ldr r2, .L4634+136 ++ str r2, [r3, #52] ++ ldr r2, .L4634+140 ++ str r2, [r3, #28] ++ bl FlashInit ++ cmn r7, #2 ++ mov r5, r0 ++ bne .L4625 ++ mov r2, #32 ++ ldr r1, .L4634+144 ++ add r0, r4, #4 ++ bl ftl_memcpy ++ ldrb r0, [r4, #22] @ zero_extendqisi2 ++ bl flash_lsb_page_tbl_build ++ ldrh r3, [r4, #14] ++ strh r3, [r4, #30] @ movhi ++.L4625: ++ ldr r3, .L4634+148 ++ ldr r2, [r3] ++ ldr r3, .L4634+152 ++ cmp r2, r3 ++ ldr r2, .L4634+156 ++ bne .L4626 ++ ldr r3, .L4634+160 ++ ldrb r3, [r3] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L4627 ++.L4626: ++ mov r3, #0 ++ strb r3, [r2, #1110] ++ strb r3, [r2] ++.L4627: ++ ldr r1, .L4634+164 ++ mov r0, #1 ++ ldrh ip, [r4, #14] ++ mov r3, #0 ++ str r3, [r6, #-100] ++ ldrb r1, [r1] @ zero_extendqisi2 ++ strb r1, [r2, #1108] ++ ldr r1, .L4634+168 ++ ldrb r1, [r1] @ zero_extendqisi2 ++ strb r1, [r2, #1193] ++.L4628: ++ cmp ip, r0 ++ uxth r1, r3 ++ add r3, r3, #1 ++ bcs .L4629 ++ sub r3, r1, #1 ++ ldr r1, .L4634+172 ++ strh r3, [r1, #-2] @ movhi ++ mov r3, #0 ++ cmp r5, r3 ++ strb r3, [r2, #1143] ++ bne .L4624 ++ bl FtlInit ++ mov r5, r0 ++ b .L4624 ++.L4629: ++ lsl r0, r0, #1 ++ b .L4628 ++.L4635: ++ .align 2 ++.L4634: ++ .word jiffies ++ .word .LANCHOR3 ++ .word zftl_deinit ++ .word zftl_cache_flush ++ .word zftl_flash_suspend ++ .word zftl_flash_resume ++ .word zftl_get_density ++ .word zftl_read_flash_info ++ .word zftl_read ++ .word zftl_write ++ .word zftl_sys_read ++ .word zftl_sys_write ++ .word zftl_vendor_read ++ .word zftl_vendor_write ++ .word zftl_nandc_get_irq_status ++ .word zftl_proc_ftl_read ++ .word zftl_do_gc ++ .word zftl_discard ++ .word .LC313 ++ .word ftl_deinit ++ .word .LANCHOR2 ++ .word ftl_cache_flush ++ .word ftl_flash_suspend ++ .word ftl_flash_resume ++ .word ftl_get_density ++ .word ftl_read_flash_info ++ .word ftl_read ++ .word ftl_write ++ .word ftl_sys_read ++ .word ftl_sys_write ++ .word ftl_vendor_read ++ .word ftl_vendor_write ++ .word ftl_nandc_get_irq_status ++ .word ftl_proc_ftl_read ++ .word ftl_do_gc ++ .word ftl_discard ++ .word gNandParaInfo ++ .word g_nandc_version_data ++ .word 1446522928 ++ .word .LANCHOR0 ++ .word gFlashSlcMode ++ .word gNandFlashIDBEccBits ++ .word gNandFlashEccBits ++ .word .LANCHOR3-3136 ++ .fnend ++ .size rk_ftl_init, .-rk_ftl_init ++ .align 2 ++ .global zftl_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_write, %function ++zftl_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ mov r10, r3 ++ ldr r3, .L4666 ++ .pad #36 ++ sub sp, sp, #36 ++ mov r4, r0 ++ mov r6, r1 ++ mov r5, r2 ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L4637 ++ ldr r3, [r10] ++ str r3, [sp] ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ ldr r0, .L4666+4 ++ bl rk_printk ++.L4637: ++ cmp r4, #0 ++ bne .L4638 ++ ldr r3, .L4666+8 ++ mov r4, #24576 ++ ldr r2, [r3, #1032] ++.L4639: ++ cmp r2, r5 ++ cmpcs r2, r6 ++ movls fp, #1 ++ movhi fp, #0 ++ bls .L4657 ++ add r1, r6, r5 ++ cmp r2, r1 ++ bcc .L4657 ++ ldr r8, .L4666+12 ++ add r4, r4, r6 ++ mov r0, r4 ++ ldrb r6, [r8, #-2546] @ zero_extendqisi2 ++ mov r1, r6 ++ bl __aeabi_uidiv ++ mov r9, r0 ++ sub r0, r5, #1 ++ mov r1, r6 ++ add r0, r0, r4 ++ bl __aeabi_uidiv ++ str r8, [sp, #16] ++ sub r7, r0, r9 ++ ldr r8, .L4666+8 ++ add r7, r7, #1 ++ mov r6, r9 ++ add r3, r4, r5 ++ str r0, [sp, #12] ++ str fp, [sp, #20] ++ str r3, [sp, #24] ++.L4641: ++ cmp r7, #0 ++ bne .L4650 ++ bl ftl_write_commit ++ mov r1, #1 ++ mov r0, r7 ++ bl zftl_do_gc ++ ldr r3, [r8, #1096] ++ ldr r4, .L4666+16 ++ ldrh r3, [r3, #124] ++ cmp r3, #0 ++ bne .L4651 ++ movw r2, #2788 ++ ldrh r3, [r4] ++ ldrh r2, [r8, r2] ++ add r3, r3, r2 ++ cmp r3, #11 ++ bgt .L4652 ++.L4651: ++ mov r1, #1 ++ mov r0, #0 ++ bl zftl_do_gc ++.L4652: ++ ldr r5, .L4666+20 ++.L4653: ++ ldrh r3, [r4] ++ ldrh r2, [r5] ++ add r3, r3, r2 ++ cmp r3, #7 ++ ble .L4654 ++ bl timer_get_time ++ ldr r3, [sp, #16] ++ str r0, [r3, #-4] ++ mov r0, #0 ++.L4636: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4638: ++ cmp r4, #3 ++ bhi .L4657 ++ lsl r4, r4, #13 ++ mov r2, #8192 ++ b .L4639 ++.L4650: ++ ldrb r3, [r8, #2796] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L4642 ++ ldrb r3, [r8, #2769] @ zero_extendqisi2 ++ cmp r3, #2 ++ bhi .L4642 ++ bl ftl_write_commit ++.L4642: ++ mov r0, #0 ++ bl buf_alloc ++ subs fp, r0, #0 ++ bne .L4643 ++ bl ftl_write_commit ++ b .L4641 ++.L4643: ++ ldrb r3, [sp, #20] @ zero_extendqisi2 ++ strb r3, [fp, #41] ++ ldr r3, [sp, #16] ++ ldrb r2, [r3, #-2546] @ zero_extendqisi2 ++ ldr r3, [sp, #12] ++ strb r2, [fp, #40] ++ cmp r6, r3 ++ cmpne r6, r9 ++ bne .L4646 ++ cmp r6, r9 ++ smulbbne r2, r6, r2 ++ ldrne r3, [sp, #24] ++ subne r2, r3, r2 ++ bne .L4665 ++ mov r1, r2 ++ mov r0, r4 ++ str r2, [sp, #28] ++ bl __aeabi_uidivmod ++ ldr r2, [sp, #28] ++ uxtb r1, r1 ++ strb r1, [fp, #41] ++ sub r2, r2, r1 ++ uxtb r2, r2 ++ cmp r5, r2 ++ strbcc r5, [fp, #40] ++ bcc .L4646 ++.L4665: ++ strb r2, [fp, #40] ++.L4646: ++ ldrb ip, [fp, #41] @ zero_extendqisi2 ++ mov r1, r10 ++ ldrb r2, [fp, #40] @ zero_extendqisi2 ++ sub r7, r7, #1 ++ ldr r0, [fp, #4] ++ lsl r2, r2, #9 ++ add r0, r0, ip, lsl #9 ++ bl ftl_memcpy ++ ldr r1, [r8, #2800] ++ str r6, [fp, #20] ++ add r6, r6, #1 ++ ldr r2, [r1, #8] ++ add r0, r2, #1 ++ str r0, [r1, #8] ++ mov r0, fp ++ str r2, [fp, #16] ++ bl ftl_write_buf ++ ldrb r3, [fp, #40] @ zero_extendqisi2 ++ add r10, r10, r3, lsl #9 ++ b .L4641 ++.L4654: ++ mov r1, #1 ++ mov r0, #0 ++ bl zftl_do_gc ++ mov r1, #1 ++ mov r0, r1 ++ bl zftl_do_gc ++ b .L4653 ++.L4657: ++ mvn r0, #0 ++ b .L4636 ++.L4667: ++ .align 2 ++.L4666: ++ .word .LANCHOR2 ++ .word .LC314 ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LANCHOR0+2784 ++ .word .LANCHOR0+2788 ++ .fnend ++ .size zftl_write, .-zftl_write ++ .align 2 ++ .global zftl_vendor_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_vendor_write, %function ++zftl_vendor_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ add r1, r0, #512 ++ mov r0, #2 ++ b zftl_write ++ .fnend ++ .size zftl_vendor_write, .-zftl_vendor_write ++ .align 2 ++ .global zftl_sys_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_sys_write, %function ++zftl_sys_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r3, r2 ++ mov r2, r1 ++ mov r1, r0 ++ mov r0, #2 ++ b zftl_write ++ .fnend ++ .size zftl_sys_write, .-zftl_sys_write ++ .align 2 ++ .global zftl_discard ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type zftl_discard, %function ++zftl_discard: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #36 ++ sub sp, sp, #36 ++ ldr r7, .L4720 ++ ldr r3, [r7, #1032] ++ cmp r1, r3 ++ cmpls r0, r3 ++ movcs r2, #1 ++ movcc r2, #0 ++ bcs .L4692 ++ mov r4, r1 ++ add r1, r0, r1 ++ cmp r3, r1 ++ bcc .L4692 ++ ldr r3, .L4720+4 ++ add r8, r0, #24576 ++ ldr r6, .L4720+8 ++ ldr r0, [r3] ++ ldr r1, [r6, #28] ++ str r3, [sp, #16] ++ tst r0, #4096 ++ add r1, r4, r1 ++ str r1, [r6, #28] ++ beq .L4672 ++ str r2, [sp] ++ mov r3, r4 ++ mov r2, r8 ++ ldr r0, .L4720+12 ++ bl rk_printk ++.L4672: ++ ldr r3, [r7, #2800] ++ ldr r10, [r3, #8] ++ add r2, r10, #1 ++ str r2, [r3, #8] ++ bl ftl_write_commit ++ bl ftl_flush ++ ldrb r9, [r6, #-2546] @ zero_extendqisi2 ++ mov r0, r8 ++ mov r1, r9 ++ bl __aeabi_uidiv ++ mov r1, r9 ++ mov r5, r0 ++ mov r0, r8 ++ bl __aeabi_uidivmod ++ subs fp, r1, #0 ++ beq .L4673 ++ sub r9, r9, fp ++ mov r0, r5 ++ cmp r9, r4 ++ movcs r9, r4 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #24] ++ bne .L4674 ++ mov r2, #0 ++ add r1, sp, #24 ++ mov r0, r5 ++ bl pm_log2phys ++.L4674: ++ ldr r3, [sp, #24] ++ cmn r3, #1 ++ uxth r3, r9 ++ str r3, [sp, #12] ++ beq .L4676 ++ mov r0, #0 ++ bl buf_alloc ++ subs r3, r0, #0 ++ beq .L4676 ++ ldr r0, [r3, #4] ++ mov r1, #0 ++ str r5, [r3, #20] ++ strb fp, [r3, #41] ++ strb r9, [r3, #40] ++ str r10, [r3, #16] ++ add r0, r0, fp, lsl #9 ++ str r3, [sp, #20] ++ ldr r3, [sp, #12] ++ lsl r2, r3, #9 ++ bl ftl_memset ++ ldr r3, [sp, #20] ++ mov r0, r3 ++ bl ftl_write_buf ++ bl ftl_write_commit ++ ldr r2, [r7, #2800] ++ ldr r3, [r2, #76] ++ add r3, r3, #1 ++ str r3, [r2, #76] ++.L4676: ++ ldr r3, [sp, #12] ++ add r5, r5, #1 ++ sub r4, r4, r3 ++.L4673: ++ cmp r4, #0 ++ beq .L4678 ++ bl ftl_flush ++.L4678: ++ mov r9, #0 ++ mvn r3, #0 ++ str r3, [sp, #28] ++.L4679: ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ cmp r4, r3 ++ bcs .L4684 ++ cmp r4, #0 ++ beq .L4686 ++ mov r0, r5 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #24] ++ bne .L4687 ++ mov r2, #0 ++ add r1, sp, #24 ++ mov r0, r5 ++ bl pm_log2phys ++.L4687: ++ ldr r3, [sp, #24] ++ cmn r3, #1 ++ beq .L4686 ++ mov r0, #0 ++ bl buf_alloc ++ subs r9, r0, #0 ++ beq .L4686 ++ mov r3, #0 ++ str r5, [r9, #20] ++ strb r3, [r9, #41] ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ strb r4, [r9, #40] ++ str r10, [r9, #16] ++ cmp r4, r3 ++ bcc .L4689 ++ movw r2, #1496 ++ ldr r1, .L4720+16 ++ ldr r0, .L4720+20 ++ bl rk_printk ++ bl dump_stack ++.L4689: ++ lsl r2, r4, #9 ++ mov r1, #0 ++ ldr r0, [r9, #4] ++ bl ftl_memset ++ mov r0, r9 ++ bl ftl_write_buf ++ bl ftl_write_commit ++ ldr r2, [r7, #2800] ++ ldr r3, [r2, #76] ++ add r3, r3, #1 ++ str r3, [r2, #76] ++.L4686: ++ ldr r1, [r6, #28] ++ cmp r1, #8192 ++ bls .L4693 ++ ldr r3, [sp, #16] ++ ldr r3, [r3] ++ tst r3, #4096 ++ beq .L4690 ++ mov r3, #0 ++ mov r2, r8 ++ str r3, [sp] ++ mov r3, r4 ++ ldr r0, .L4720+12 ++ bl rk_printk ++.L4690: ++ mov r4, #0 ++ str r4, [r6, #28] ++ bl flt_sys_flush ++ mov r3, #1 ++ str r3, [r7, #2812] ++.L4693: ++ mov r0, #0 ++ b .L4670 ++.L4684: ++ mov r0, r5 ++ bl lpa_hash_get_ppa ++ cmn r0, #1 ++ str r0, [sp, #24] ++ beq .L4680 ++ mov r0, #0 ++ bl buf_alloc ++ subs fp, r0, #0 ++ beq .L4682 ++ ldrb r2, [r6, #-2546] @ zero_extendqisi2 ++ mov r1, #0 ++ str r5, [fp, #20] ++ strb r9, [fp, #41] ++ strb r2, [fp, #40] ++ str r10, [fp, #16] ++ lsl r2, r2, #9 ++ ldr r0, [fp, #4] ++ bl ftl_memset ++ mov r0, fp ++ bl ftl_write_buf ++ bl ftl_write_commit ++.L4719: ++ ldr r2, [r7, #2800] ++ ldr r3, [r2, #76] ++ add r3, r3, #1 ++ str r3, [r2, #76] ++.L4682: ++ ldrb r3, [r6, #-2546] @ zero_extendqisi2 ++ add r5, r5, #1 ++ sub r4, r4, r3 ++ b .L4679 ++.L4680: ++ mov r2, #0 ++ add r1, sp, #24 ++ mov r0, r5 ++ bl pm_log2phys ++ ldr r3, [sp, #24] ++ cmn r3, #1 ++ beq .L4682 ++ mov r2, #1 ++ add r1, sp, #28 ++ mov r0, r5 ++ bl pm_log2phys ++ ldr r3, .L4720+24 ++ ldr r2, [sp, #24] ++ ldrb r1, [r6, #-3136] @ zero_extendqisi2 ++ ldrh r0, [r3] ++ ldrb r3, [r7, #1153] @ zero_extendqisi2 ++ lsr r2, r2, r0 ++ rsb r3, r3, #24 ++ sub r3, r3, r0 ++ mvn r0, #0 ++ bic r0, r2, r0, lsl r3 ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ bl ftl_vpn_decrement ++ b .L4719 ++.L4692: ++ mvn r0, #0 ++.L4670: ++ add sp, sp, #36 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4721: ++ .align 2 ++.L4720: ++ .word .LANCHOR0 ++ .word .LANCHOR2 ++ .word .LANCHOR3 ++ .word .LC315 ++ .word .LANCHOR1+2536 ++ .word .LC0 ++ .word .LANCHOR3-3138 ++ .fnend ++ .size zftl_discard, .-zftl_discard ++ .align 2 ++ .global dump_pm_blk ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type dump_pm_blk, %function ++dump_pm_blk: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ movw r3, #698 ++ ldr r4, .L4727 ++ mov r2, #4 ++ mov r5, #0 ++ movw r7, #65535 ++ ldr r0, .L4727+4 ++ ldr r1, [r4, #2800] ++ ldr r6, .L4727+8 ++ ldrh r3, [r1, r3] ++ add r1, r1, #704 ++ bl rknand_print_hex ++ ldr r1, [r4, #2800] ++ mov r2, #2 ++ ldrh r3, [r6, #-176] ++ ldr r0, .L4727+12 ++ add r1, r1, #416 ++ bl rknand_print_hex ++.L4723: ++ ldrh r2, [r6, #-176] ++ uxth r3, r5 ++ cmp r2, r3 ++ bhi .L4725 ++ pop {r4, r5, r6, r7, r8, pc} ++.L4725: ++ uxth r3, r5 ++ ldr r2, [r4, #2800] ++ add r3, r3, #208 ++ lsl r3, r3, #1 ++ ldrh r0, [r2, r3] ++ cmp r0, r7 ++ beq .L4724 ++ mov r1, #0 ++ bl ftl_sblk_dump ++.L4724: ++ add r5, r5, #1 ++ b .L4723 ++.L4728: ++ .align 2 ++.L4727: ++ .word .LANCHOR0 ++ .word .LC267 ++ .word .LANCHOR3 ++ .word .LC268 ++ .fnend ++ .size dump_pm_blk, .-dump_pm_blk ++ .align 2 ++ .global id_block_prog_msb_ff_data ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type id_block_prog_msb_ff_data, %function ++id_block_prog_msb_ff_data: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r0, r1, r2, r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #12 ++ ldr r5, .L4736 ++ ldrb r3, [r5, #1110] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L4729 ++ ldr r3, [r5, #1104] ++ mov r4, r2 ++ mov r10, r0 ++ mov fp, r1 ++ ldrb r3, [r3, #19] @ zero_extendqisi2 ++ sub r2, r3, #5 ++ cmp r3, #68 ++ cmpne r2, #2 ++ bls .L4731 ++ sub r3, r3, #19 ++ tst r3, #239 ++ bne .L4729 ++.L4731: ++ ldr r6, .L4736+4 ++ sub r7, r6, #2272 ++.L4733: ++ ldr r3, [r5, #1104] ++ ldrh r3, [r3, #10] ++ cmp r3, r4 ++ bhi .L4734 ++.L4729: ++ add sp, sp, #12 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4734: ++ lsl r9, r4, #1 ++ add r8, r4, fp ++ mov r2, r8 ++ ldr r0, .L4736+8 ++ ldrh r3, [r7, r9] ++ mov r1, r4 ++ bl rk_printk ++ ldrh r2, [r7, r9] ++ movw r3, #65535 ++ cmp r2, r3 ++ bne .L4729 ++ mov r2, #16384 ++ mov r1, #255 ++ ldr r0, [r6, #-120] ++ add r4, r4, #1 ++ bl ftl_memset ++ ldr r3, [r5, #1104] ++ mov r1, r8 ++ mov r0, r10 ++ uxth r4, r4 ++ ldrb r3, [r3, #9] @ zero_extendqisi2 ++ str r3, [sp] ++ ldr r3, [r6, #-120] ++ mov r2, r3 ++ bl flash_prog_page ++ b .L4733 ++.L4737: ++ .align 2 ++.L4736: ++ .word .LANCHOR0 ++ .word .LANCHOR3 ++ .word .LC316 ++ .fnend ++ .size id_block_prog_msb_ff_data, .-id_block_prog_msb_ff_data ++ .align 2 ++ .global write_idblock ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type write_idblock, %function ++write_idblock: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 160 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L4848 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #180 ++ sub sp, sp, #180 ++ ldr lr, [r1] ++ ldrb ip, [r3] @ zero_extendqisi2 ++ ldr r4, .L4848+4 ++ ldr r10, .L4848+8 ++ str ip, [sp, #76] ++ ldrh ip, [sp, #76] ++ ldr r9, .L4848+12 ++ cmp lr, r4 ++ cmpne lr, r10 ++ str ip, [sp, #40] ++ movne ip, #1 ++ moveq ip, #0 ++ cmp lr, r9 ++ moveq ip, #0 ++ andne ip, ip, #1 ++ cmp ip, #0 ++ beq .L4739 ++.L4847: ++ mvn r0, #0 ++.L4738: ++ add sp, sp, #180 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4739: ++ cmp r0, #15 ++ bls .L4847 ++ mov r5, r2 ++ ldr r2, [r3, #1104] ++ mov fp, r0 ++ mov r0, #256000 ++ str r3, [sp, #16] ++ ldrb r6, [r2, #9] @ zero_extendqisi2 ++ ldrh r8, [r2, #10] ++ ldr r2, .L4848+16 ++ str r1, [sp, #32] ++ ldrh r7, [r2, #30] ++ ldrb r2, [r3, #1110] @ zero_extendqisi2 ++ str r2, [sp, #96] ++ bl ftl_malloc ++ subs r3, r0, #0 ++ str r3, [sp, #20] ++ beq .L4847 ++ ldr r2, .L4848+20 ++ ldrb r2, [r2, #16] @ zero_extendqisi2 ++ cmp r2, #0 ++ streq r2, [sp, #16] ++ beq .L4742 ++ ldr r3, [sp, #16] ++ ldrb r2, [r3] @ zero_extendqisi2 ++ ldrb r3, [r3, #1110] @ zero_extendqisi2 ++ cmp r2, #0 ++ clzne r3, r3 ++ lsrne r3, r3, #5 ++ bne .L4844 ++ cmp r3, #3 ++ streq r3, [sp, #40] ++ moveq r3, #2 ++ beq .L4844 ++ cmp r3, #2 ++ ldr r3, [sp, #40] ++ moveq r3, #2 ++ str r3, [sp, #40] ++ movne r3, #0 ++ moveq r3, #3 ++.L4844: ++ str r3, [sp, #16] ++.L4742: ++ add fp, fp, #508 ++ add fp, fp, #3 ++ lsr fp, fp, #9 ++ cmp fp, #8 ++ bls .L4798 ++ cmp fp, #500 ++ bhi .L4745 ++.L4744: ++ ldr r3, [sp, #32] ++ ldr r3, [r3] ++ cmp r3, r4 ++ cmpne r3, r10 ++ movne r4, #1 ++ moveq r4, #0 ++ cmp r3, r9 ++ moveq r9, #0 ++ andne r9, r4, #1 ++ cmp r9, #0 ++ beq .L4746 ++.L4745: ++ ldr r0, [sp, #20] ++ bl ftl_free ++ b .L4847 ++.L4798: ++ mov fp, #8 ++ b .L4744 ++.L4746: ++ mov r0, r9 ++ mul r8, r6, r8 ++ bl zftl_flash_exit_slc_mode ++ ldr r3, .L4848 ++ sub r0, r8, #1 ++ mov r1, r8 ++ add r0, r0, fp ++ ldrb r2, [r3, #1110] @ zero_extendqisi2 ++ strb r2, [r3] ++ bl __aeabi_uidiv ++ ldr r3, [sp, #32] ++ movw r2, #63871 ++ ldr ip, .L4848+24 ++ str r0, [sp, #100] ++ movw r0, #4094 ++ add r3, r3, #254976 ++ add r3, r3, #512 ++.L4752: ++ ldr r1, [r3, #-4]! ++ cmp r1, #0 ++ bne .L4747 ++ cmp r9, #0 ++ sub r2, r2, #1 ++ ldrne r1, [sp, #32] ++ streq ip, [r3, #512] ++ ldrne r1, [r1, r9, lsl #2] ++ add r9, r9, #1 ++ strne r1, [r3, #512] ++ cmp r9, r0 ++ movhi r9, #0 ++ cmp r2, #4096 ++ bne .L4752 ++.L4751: ++ mul r3, r6, r7 ++ mov r2, #4 ++ mov r1, r5 ++ ldr r0, .L4848+28 ++ str r3, [sp, #72] ++ mov r3, #5 ++ bl rknand_print_hex ++ mov r2, fp ++ mov r1, fp ++ ldr r0, .L4848+32 ++ bl rk_printk ++ sub r3, r5, #4 ++ str r3, [sp, #48] ++ mov r3, #0 ++ str r3, [sp, #36] ++ str r3, [sp, #24] ++.L4792: ++ ldr r3, .L4848+20 ++ ldrb r3, [r3, #16] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L4753 ++ ldr r3, [sp, #48] ++ ldr r1, [sp, #24] ++ ldr r2, [r3, #4] ++ ldr r3, [sp, #72] ++ mul r10, r2, r3 ++ ldr r3, [sp, #100] ++ cmp r1, #0 ++ cmpne r3, #1 ++ bls .L4754 ++ ldr r3, [sp, #48] ++ ldr r3, [r3] ++ add r3, r3, #1 ++ cmp r2, r3 ++ bne .L4754 ++.L4755: ++ ldr r3, [sp, #24] ++ add r3, r3, #1 ++ str r3, [sp, #24] ++ ldr r3, [sp, #48] ++ add r3, r3, #4 ++ str r3, [sp, #48] ++ ldr r3, [sp, #24] ++ cmp r3, #4 ++ bne .L4792 ++.L4794: ++ mov r0, #0 ++ bl zftl_flash_exit_slc_mode ++ ldr r3, .L4848 ++ mov r0, #0 ++ ldrb r2, [sp, #76] @ zero_extendqisi2 ++ strb r2, [r3] ++ ldr r2, [sp, #16] ++ cmp r2, #0 ++ ldrbne r2, [sp, #96] @ zero_extendqisi2 ++ strbne r2, [r3, #1110] ++ mov r2, #2 ++ strb r2, [r3, #1154] ++ bl zftl_flash_enter_slc_mode ++ ldr r0, [sp, #20] ++ bl ftl_free ++ ldr r3, [sp, #36] ++ clz r0, r3 ++ lsr r0, r0, #5 ++ rsb r0, r0, #0 ++ b .L4738 ++.L4747: ++ ldr r0, .L4848+36 ++ bl rk_printk ++ b .L4751 ++.L4753: ++ ldr r5, .L4848 ++ ldr r2, [sp, #24] ++ ldr r3, [r5, #1040] ++ add r3, r3, r2 ++ ldrb r3, [r3, #32] @ zero_extendqisi2 ++ cmp r3, #255 ++ beq .L4755 ++ ldr r2, [sp, #72] ++ mul r10, r2, r3 ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ beq .L4754 ++ ldr r3, [sp, #24] ++ and r4, r3, #1 ++ ldr r3, [sp, #16] ++ cmp r3, #3 ++ orreq r4, r4, #1 ++ cmp r4, #0 ++ ldrbne r3, [sp, #40] @ zero_extendqisi2 ++ strbne r3, [r5] ++ strbne r3, [r5, #1110] ++ bne .L4754 ++ mov r0, r4 ++ bl zftl_flash_exit_slc_mode ++ strb r4, [r5] ++ strb r4, [r5, #1110] ++.L4754: ++ ldr r5, .L4848 ++ mov r2, #512 ++ mov r1, #0 ++ ldr r0, [sp, #20] ++ bl ftl_memset ++ ldr r3, [r5, #1104] ++ mov r6, #0 ++ mov r0, r10 ++ ldrb r8, [r3, #9] @ zero_extendqisi2 ++ ldrh r7, [r3, #10] ++ ldr r3, .L4848+16 ++ mov r1, r8 ++ ldrh r4, [r3, #30] ++ mul r7, r8, r7 ++ ldrb r3, [r5, #1196] @ zero_extendqisi2 ++ strb r6, [r5, #1196] ++ str r3, [sp, #104] ++ mul r4, r8, r4 ++ bl __aeabi_uidiv ++ mov r1, r0 ++ mov r0, r6 ++ bl flash_erase_block ++ cmp r7, fp ++ movcs r0, #1 ++ bcs .L4757 ++ add r1, r10, r4 ++ mov r0, r6 ++ bl flash_erase_block ++ mov r0, #2 ++.L4757: ++ ldr r2, [r5, #1104] ++ ldrh r3, [r2, #10] ++ ldrb r1, [r2, #12] @ zero_extendqisi2 ++ lsl r3, r3, #2 ++ mul r0, r0, r3 ++ bl __aeabi_idiv ++ mov r1, r4 ++ str r0, [sp, #64] ++ mov r0, r10 ++ bl __aeabi_uidivmod ++ sub r3, r10, r1 ++ str r1, [sp, #56] ++ cmp r10, r3 ++ str r3, [sp, #44] ++ bne .L4801 ++ ldrb r3, [r5, #1028] @ zero_extendqisi2 ++ cmp r3, #9 ++ bne .L4801 ++ ldr r3, .L4848+20 ++ mov r2, #1024 ++ mov r1, #0 ++ ldr r4, [r3, #-92] ++ mov r0, r4 ++ bl ftl_memset ++ ldr r2, .L4848+40 ++ mov r3, #12 ++ stm r4, {r2, r3} ++ mov r3, #0 ++ strb r3, [r4, #16] ++ str r3, [r4, #12] ++ ldrb r3, [r5, #1110] @ zero_extendqisi2 ++ cmp r3, #0 ++ ldrne r3, [r5, #1104] ++ ldrbne r3, [r3, #29] @ zero_extendqisi2 ++ strbne r3, [r4, #16] ++ mov r3, #4 ++ strb r3, [r4, #17] ++ ldr r3, .L4848 ++ ldr r3, [r3, #1104] ++ ldrb r1, [r3, #12] @ zero_extendqisi2 ++ ldrh r0, [r3, #10] ++ bl __aeabi_idiv ++ cmp r8, #8 ++ mov r3, #0 ++ movhi r2, #70 ++ movls r2, #16 ++ mov r1, #12 ++ strh r0, [r4, #18] @ movhi ++ strb r3, [r4, #20] ++ add r0, r4, r1 ++ strh r3, [r4, #22] @ movhi ++ strb r2, [r4, #21] ++ bl js_hash ++ sub r3, fp, #4 ++ str r0, [r4, #8] ++ str r3, [sp, #28] ++.L4758: ++ ldr r9, [sp, #32] ++ mov r6, #0 ++ ldr r7, .L4848 ++.L4761: ++ ldr r3, [sp, #64] ++ cmp r3, r6 ++ bhi .L4772 ++ ldr r3, .L4848+16 ++ mov r4, #0 ++ strb r4, [r7, #1196] ++ mov r0, r10 ++ ldr r5, .L4848 ++ mov r8, #4 ++ ldrb r2, [r3, #13] @ zero_extendqisi2 ++ ldrh r1, [r3, #30] ++ str r2, [sp, #80] ++ mul r1, r2, r1 ++ bl __aeabi_uidivmod ++ sub r3, r10, r1 ++ ldr r6, [sp, #20] ++ str r3, [sp, #84] ++ and r3, r1, #3 ++ str r3, [sp, #56] ++ ldr r3, [sp, #28] ++ str r1, [sp, #52] ++ str r4, [sp, #64] ++ str r3, [sp, #68] ++.L4773: ++ ldr r3, [sp, #68] ++ cmp r4, r3 ++ bcc .L4787 ++ ldrb r3, [sp, #104] @ zero_extendqisi2 ++ ldr r4, .L4848 ++ strb r3, [r4, #1196] ++ ldr r3, [sp, #16] ++ cmp r3, #0 ++ beq .L4788 ++ mov r0, #0 ++ bl zftl_flash_exit_slc_mode ++ mov r3, #0 ++ strb r3, [r4] ++ strb r3, [r4, #1110] ++.L4788: ++ ldr r3, [sp, #28] ++ mov r2, #0 ++ lsl r3, r3, #7 ++.L4790: ++ ldr r1, [sp, #20] ++ ldr r0, [r1, r2, lsl #2] ++ ldr r1, [sp, #32] ++ ldr r1, [r1, r2, lsl #2] ++ cmp r0, r1 ++ beq .L4789 ++ mov r2, #512 ++ mov r1, #0 ++ ldr r0, [sp, #20] ++ bl ftl_memset ++ mov r1, r10 ++ mov r0, #0 ++ bl flash_erase_block ++ b .L4755 ++.L4801: ++ str fp, [sp, #28] ++ mov r4, #0 ++ b .L4758 ++.L4772: ++ ldr r3, [sp, #56] ++ ldrb r2, [r7, #1110] @ zero_extendqisi2 ++ add r5, r3, r6 ++ ubfx r5, r5, #2, #16 ++ cmp r2, #0 ++ add r0, r5, #1 ++ lsl r1, r0, #1 ++ add r3, r7, r1 ++ ldrh r3, [r3, #4] ++ beq .L4763 ++ ldrb r3, [r7, #1] @ zero_extendqisi2 ++ cmp r3, #0 ++ moveq r3, r0 ++ movne r3, r1 ++.L4763: ++ ldrb r1, [r7, #1028] @ zero_extendqisi2 ++ cmp r1, #9 ++ subne r3, r3, #1 ++ lslne r3, r3, #2 ++ cmp r2, #0 ++ str r3, [sp, #112] ++ movw r3, #61424 ++ str r3, [sp, #116] ++ lsl r3, r5, #1 ++ add r1, r7, r3 ++ ldrh r1, [r1, #4] ++ moveq r5, r1 ++ beq .L4768 ++ ldrb r2, [r7, #1] @ zero_extendqisi2 ++ cmp r2, #0 ++ movne r5, r3 ++.L4768: ++ cmp r4, #0 ++ mul r0, r5, r8 ++ bne .L4769 ++ ldr r3, [sp, #44] ++ add r3, r0, r3 ++ ldr r0, .L4848+44 ++ str r3, [sp, #60] ++ movw r3, #61424 ++ str r3, [sp, #12] ++ add r3, sp, #176 ++ mov r2, r3 ++ ldr r1, [sp, #60] ++ ldr r3, [r2, #-64]! ++ str r3, [sp, #8] ++ ldr r3, [r9] ++ str r2, [sp, #52] ++ mov r2, r6 ++ str r9, [sp] ++ str r3, [sp, #4] ++ mov r3, fp ++ bl rk_printk ++ mov r1, r9 ++ ldr r2, [sp, #52] ++ ldr r0, [sp, #60] ++ bl fw_flash_page_prog.constprop.29 ++ ldrb r3, [r7, #1110] @ zero_extendqisi2 ++ cmp r3, #0 ++ bne .L4770 ++ add r5, r5, #1 ++ mov r1, r8 ++ uxth r5, r5 ++ ldr r0, [sp, #44] ++ bl __aeabi_uidiv ++ mov r2, r5 ++ mov r1, r0 ++ mov r0, r4 ++ bl id_block_prog_msb_ff_data ++.L4770: ++ ldr r3, [sp, #28] ++ add r9, r9, #2048 ++ add r3, r3, #16 ++ cmp r6, r3 ++ bcc .L4771 ++ ldr r3, [sp, #28] ++ add r3, r3, #20 ++ cmp r6, r3 ++ ldrcc r3, [sp, #32] ++ addcc r9, r3, #2048 ++.L4771: ++ add r6, r6, #4 ++ mov r4, #0 ++ uxth r6, r6 ++ b .L4761 ++.L4769: ++ ldr r3, [sp, #44] ++ add r2, sp, #112 ++ mov r1, r4 ++ add r0, r0, r3 ++ bl fw_flash_page_prog.constprop.29 ++ b .L4771 ++.L4787: ++ ldr r3, [sp, #56] ++ mov r1, r8 ++ sub r3, r8, r3 ++ uxth r3, r3 ++ str r3, [sp, #60] ++ ldr r3, [sp, #52] ++ add r0, r3, r4 ++ bl __aeabi_uidiv ++ uxth r0, r0 ++ ldrb r1, [r5, #1110] @ zero_extendqisi2 ++ lsl r3, r0, #1 ++ cmp r1, #0 ++ add r2, r5, r3 ++ ldrh r2, [r2, #4] ++ moveq r0, r2 ++ beq .L4775 ++ ldrb r2, [r5, #1] @ zero_extendqisi2 ++ cmp r2, #0 ++ movne r0, r3 ++.L4775: ++ ldr r2, [sp, #84] ++ ldr r3, [sp, #80] ++ ldrb r9, [r5, #1108] @ zero_extendqisi2 ++ mla r3, r0, r3, r2 ++ str r3, [sp, #88] ++ ldr r3, [r5, #1104] ++ ldr r2, [sp, #88] ++ ldrb r1, [r3, #9] @ zero_extendqisi2 ++ ldr r3, [sp, #56] ++ add r0, r3, r2 ++ bl __aeabi_uidiv ++ ldrb r3, [r5, #1193] @ zero_extendqisi2 ++ str r0, [sp, #44] ++ mov r0, r9 ++ str r3, [sp, #108] ++ bl nandc_bch_sel ++.L4776: ++ str r8, [sp] ++ add r3, sp, #112 ++ mov r2, r6 ++ ldr r1, [sp, #44] ++ mov r0, #0 ++ bl flash_read_page ++ cmn r0, #1 ++ mov r7, r0 ++ bne .L4777 ++ ldrb r3, [r5, #1196] @ zero_extendqisi2 ++ cmp r3, #0 ++ str r3, [sp, #92] ++ bne .L4778 ++.L4781: ++ ldr r3, .L4848+20 ++ ldr r3, [r3, #-100] ++ subs ip, r3, #0 ++ bne .L4779 ++.L4780: ++ ldrb r3, [r5, #1143] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L4777 ++ str r8, [sp] ++ add r3, sp, #112 ++ mov r2, r6 ++ ldr r1, [sp, #44] ++ mov r0, #0 ++ bl flash_ddr_tuning_read ++ b .L4846 ++.L4778: ++ mov r0, #0 ++ add r3, sp, #112 ++ strb r0, [r5, #1196] ++ mov r2, r6 ++ str r8, [sp] ++ ldr r1, [sp, #44] ++ bl flash_read_page ++ ldrb r3, [sp, #92] @ zero_extendqisi2 ++ cmn r0, #1 ++ strb r3, [r5, #1196] ++ beq .L4781 ++.L4846: ++ mov r7, r0 ++.L4777: ++ cmn r7, #1 ++ movne r7, #0 ++ moveq r7, #1 ++ cmp r9, #16 ++ moveq r9, #0 ++ andne r9, r7, #1 ++ cmp r9, #0 ++ beq .L4783 ++ mov r0, #16 ++ mov r9, #16 ++ bl nandc_bch_sel ++ b .L4776 ++.L4779: ++ str r8, [sp] ++ add r3, sp, #112 ++ mov r2, r6 ++ ldr r1, [sp, #44] ++ mov r0, #0 ++ blx ip ++ cmn r0, #1 ++ beq .L4780 ++ b .L4846 ++.L4783: ++ ldr r0, [sp, #108] ++ bl nandc_bch_sel ++ ldr r3, [sp, #64] ++ cmp r7, #0 ++ mvnne r3, #0 ++ str r3, [sp, #64] ++ ldr r3, [sp, #84] ++ ldr r2, [sp, #64] ++ cmp r10, r3 ++ cmpeq r4, #0 ++ moveq r3, #1 ++ movne r3, #0 ++ cmp r2, #0 ++ movne r3, #0 ++ andeq r3, r3, #1 ++ cmp r3, #0 ++ beq .L4785 ++ ldr r3, [r6] ++ ldr r2, .L4848+40 ++ cmp r3, r2 ++ bne .L4785 ++ ldr r3, [sp, #68] ++ ldr r2, [sp, #60] ++ ldrb r8, [r6, #17] @ zero_extendqisi2 ++ add r3, r3, r2 ++ str r3, [sp, #68] ++.L4786: ++ ldr r3, [sp, #60] ++ add r4, r3, r4 ++ uxth r4, r4 ++ b .L4773 ++.L4785: ++ ldr r3, [sp, #60] ++ mov r2, r4 ++ ldr r1, [sp, #88] ++ ldr r0, .L4848+48 ++ add r6, r6, r3, lsl #9 ++ ldr r3, [sp, #116] ++ str r3, [sp] ++ ldr r3, [sp, #112] ++ bl rk_printk ++ mov r3, #0 ++ str r3, [sp, #56] ++ b .L4786 ++.L4789: ++ add r2, r2, #1 ++ cmp r3, r2 ++ bne .L4790 ++ ldr r3, [sp, #36] ++ add r3, r3, #1 ++ cmp r3, #5 ++ str r3, [sp, #36] ++ bls .L4755 ++ b .L4794 ++.L4849: ++ .align 2 ++.L4848: ++ .word .LANCHOR0 ++ .word -52655045 ++ .word 1397640018 ++ .word 1397967698 ++ .word .LANCHOR2 ++ .word .LANCHOR3 ++ .word 1314014539 ++ .word .LC318 ++ .word .LC319 ++ .word .LC317 ++ .word 1179535694 ++ .word .LC320 ++ .word .LC321 ++ .fnend ++ .size write_idblock, .-write_idblock ++ .align 2 ++ .global write_loader_lba ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type write_loader_lba, %function ++write_loader_lba: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 40 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ cmp r0, #64 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r5, r0 ++ .pad #48 ++ sub sp, sp, #48 ++ mov r6, r1 ++ mov r8, r2 ++ ldr r4, .L4877 ++ bne .L4851 ++ ldr r3, .L4877+4 ++ ldr r2, [r2] ++ ldr r1, .L4877+8 ++ cmp r2, r1 ++ cmpne r2, r3 ++ add r1, r1, #327680 ++ moveq r3, #1 ++ movne r3, #0 ++ cmp r2, r1 ++ orreq r3, r3, #1 ++ cmp r3, #0 ++ beq .L4851 ++ mov r3, #1 ++ mov r0, #256000 ++ strb r3, [r4, #32] ++ bl ftl_malloc ++ mov r2, #256000 ++ mov r1, #0 ++ str r0, [r4, #36] ++ bl ftl_memset ++ str r5, [r4, #40] ++.L4851: ++ str r6, [sp] ++ mov r3, r5 ++ ldr r2, [r8] ++ ldr r1, [r4, #36] ++ ldr r0, .L4877+12 ++ bl rk_printk ++ ldrb r3, [r4, #32] @ zero_extendqisi2 ++ cmp r3, #0 ++ beq .L4850 ++ ldr r7, [r4, #36] ++ cmp r7, #0 ++ beq .L4850 ++ sub r0, r5, #64 ++ cmp r0, #500 ++ bcs .L4853 ++ rsb r2, r5, #564 ++ mov r1, r8 ++ cmp r6, r2 ++ add r0, r7, r0, lsl #9 ++ movcc r2, r6 ++ lsl r2, r2, #9 ++ bl ftl_memcpy ++.L4854: ++ ldr r3, [r4, #40] ++ cmp r5, r3 ++ beq .L4863 ++ mov r8, #0 ++ mov r0, r7 ++ strb r8, [r4, #32] ++ bl ftl_free ++ str r8, [r4, #36] ++ b .L4863 ++.L4853: ++ cmp r5, #564 ++ bcc .L4854 ++ ldr r3, .L4877+16 ++ ldr r0, [r4, #40] ++ ldr r3, [r3, #1104] ++ sub r0, r0, #64 ++ cmp r0, #500 ++ ldrb r3, [r3, #9] @ zero_extendqisi2 ++ movcs r0, #500 ++ cmp r3, #4 ++ beq .L4855 ++ mov r3, #2 ++ str r3, [sp, #8] ++ mov r3, #3 ++ str r3, [sp, #12] ++ mov r3, #4 ++ str r3, [sp, #16] ++ mov r3, #5 ++ str r3, [sp, #20] ++ mov r3, #6 ++ str r3, [sp, #24] ++.L4856: ++ mov r3, #61952 ++.L4862: ++ ldr r2, [r7, r3, lsl #2] ++ cmp r2, #0 ++ beq .L4860 ++ add r3, r3, #2048 ++ lsl r0, r3, #2 ++.L4861: ++ mov r1, r7 ++ add r2, sp, #8 ++ mov r7, #0 ++ bl write_idblock ++ ldr r0, [r4, #36] ++ strb r7, [r4, #32] ++ bl ftl_free ++ str r7, [r4, #36] ++.L4863: ++ add r5, r5, r6 ++ str r5, [r4, #40] ++.L4850: ++ add sp, sp, #48 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, pc} ++.L4855: ++ mov r2, #0 ++ add r3, sp, #8 ++.L4859: ++ cmp r0, #256 ++ lslhi r1, r2, #1 ++ strls r2, [r3, r2, lsl #2] ++ strhi r1, [r3, r2, lsl #2] ++ add r2, r2, #1 ++ cmp r2, #5 ++ bne .L4859 ++ b .L4856 ++.L4860: ++ sub r3, r3, #1 ++ cmp r3, #4096 ++ bne .L4862 ++ lsl r0, r0, #9 ++ b .L4861 ++.L4878: ++ .align 2 ++.L4877: ++ .word .LANCHOR3 ++ .word -52655045 ++ .word 1397640018 ++ .word .LC322 ++ .word .LANCHOR0 ++ .fnend ++ .size write_loader_lba, .-write_loader_lba ++ .align 2 ++ .global FtlWrite ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type FtlWrite, %function ++FtlWrite: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, lr} ++ .save {r4, r5, r6, r7, r8, lr} ++ mov r6, r2 ++ sub r2, r1, #64 ++ mov r4, r1 ++ cmp r2, #1984 ++ mov r7, r3 ++ movcs r2, #0 ++ movcc r2, #1 ++ cmp r0, #0 ++ mov r5, r0 ++ movne r2, #0 ++ cmp r2, #0 ++ beq .L4880 ++ mov r2, r3 ++ mov r1, r6 ++ mov r0, r4 ++ bl write_loader_lba ++.L4880: ++ ldr r3, .L4885 ++ mov r2, r6 ++ mov r1, r4 ++ mov r0, r5 ++ ldr r3, [r3, #-160] ++ ldr lr, [r3, #24] ++ mov r3, r7 ++ mov ip, lr ++ pop {r4, r5, r6, r7, r8, lr} ++ bx ip ++.L4886: ++ .align 2 ++.L4885: ++ .word .LANCHOR3 ++ .fnend ++ .size FtlWrite, .-FtlWrite ++ .align 2 ++ .global rknand_sys_storage_ioctl ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rknand_sys_storage_ioctl, %function ++rknand_sys_storage_ioctl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L4896 ++ cmp r1, r3 ++ bne .L4891 ++ push {r4, lr} ++ .save {r4, lr} ++ bl rknand_dev_flush ++ mov r1, #0 ++ ldr r0, .L4896+4 ++ bl rk_printk ++ mov r0, #0 ++ pop {r4, pc} ++.L4891: ++ mvn r0, #21 ++ bx lr ++.L4897: ++ .align 2 ++.L4896: ++ .word 1074029332 ++ .word .LC323 ++ .fnend ++ .size rknand_sys_storage_ioctl, .-rknand_sys_storage_ioctl ++ .align 2 ++ .global rk_ftl_storage_sys_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_storage_sys_init, %function ++rk_ftl_storage_sys_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ ldr r3, .L4899 ++ mov r2, #0 ++ mvn r1, #0 ++ strb r2, [r3, #32] ++ str r1, [r3, #40] ++ str r2, [r3, #36] ++ str r2, [r3, #44] ++ b rknand_sys_storage_init ++.L4900: ++ .align 2 ++.L4899: ++ .word .LANCHOR3 ++ .fnend ++ .size rk_ftl_storage_sys_init, .-rk_ftl_storage_sys_init ++ .align 2 ++ .global StorageSysDataDeInit ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type StorageSysDataDeInit, %function ++StorageSysDataDeInit: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ @ link register save eliminated. ++ mov r0, #0 ++ bx lr ++ .fnend ++ .size StorageSysDataDeInit, .-StorageSysDataDeInit ++ .align 2 ++ .global rk_ftl_vendor_storage_init ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_vendor_storage_init, %function ++rk_ftl_vendor_storage_init: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, r7, r8, r9, r10, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, lr} ++ ldr r6, .L4913 ++ ldr r3, [r6, #48] ++ cmp r3, #0 ++ bne .L4903 ++ mov r0, #65536 ++ bl ftl_malloc ++ str r0, [r6, #48] ++.L4903: ++ ldr r3, [r6, #48] ++ cmp r3, #0 ++ beq .L4908 ++ ldr r10, .L4913+4 ++ mov r7, #0 ++ ldr r9, .L4913+8 ++ mov r4, r7 ++ mov r8, r7 ++.L4906: ++ ldr r2, [r6, #48] ++ mov r1, #128 ++ lsl r0, r8, #7 ++ bl FlashBootVendorRead ++ cmp r0, #0 ++ bne .L4909 ++ ldr r1, [r6, #48] ++ mov r0, r10 ++ add r2, r1, #61440 ++ ldr r3, [r1, #4] ++ ldr r2, [r2, #4092] ++ ldr r1, [r1] ++ bl rk_printk ++ ldr r5, [r6, #48] ++ ldr r3, [r5] ++ cmp r3, r9 ++ bne .L4905 ++ add r2, r5, #61440 ++ ldr r3, [r5, #4] ++ ldr r2, [r2, #4092] ++ cmp r3, r4 ++ sub r2, r2, r3 ++ clz r2, r2 ++ lsr r2, r2, #5 ++ movls r2, #0 ++ cmp r2, #0 ++ movne r7, r8 ++ movne r4, r3 ++.L4905: ++ add r8, r8, #1 ++ cmp r8, #2 ++ bne .L4906 ++ cmp r4, #0 ++ beq .L4907 ++ mov r2, r5 ++ mov r1, #128 ++ lsl r0, r7, #7 ++ bl FlashBootVendorRead ++ adds r0, r0, #0 ++ movne r0, #1 ++ rsb r0, r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L4907: ++ mov r2, #65536 ++ mov r1, r4 ++ mov r0, r5 ++ bl memset ++ mov r3, #1 ++ add r2, r5, #61440 ++ str r3, [r5, #4] ++ mov r0, r4 ++ str r9, [r5] ++ str r3, [r2, #4092] ++ ldr r3, .L4913+12 ++ strh r4, [r5, #12] @ movhi ++ strh r3, [r5, #14] @ movhi ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L4908: ++ mvn r0, #11 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L4909: ++ mvn r0, #0 ++ pop {r4, r5, r6, r7, r8, r9, r10, pc} ++.L4914: ++ .align 2 ++.L4913: ++ .word .LANCHOR3 ++ .word .LC324 ++ .word 1380668996 ++ .word -1032 ++ .fnend ++ .size rk_ftl_vendor_storage_init, .-rk_ftl_vendor_storage_init ++ .align 2 ++ .global rk_ftl_vendor_read ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_vendor_read, %function ++rk_ftl_vendor_read: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L4925 ++ ldr ip, [r3, #48] ++ cmp ip, #0 ++ beq .L4920 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r3, #0 ++ ldrh r4, [ip, #10] ++.L4917: ++ cmp r3, r4 ++ bcc .L4919 ++ mvn r0, #0 ++ pop {r4, r5, r6, pc} ++.L4919: ++ add lr, ip, r3, lsl #3 ++ ldrh r5, [lr, #16] ++ cmp r5, r0 ++ bne .L4918 ++ ldrh r4, [lr, #20] ++ mov r0, r1 ++ ldrh r1, [lr, #18] ++ cmp r4, r2 ++ movcs r4, r2 ++ add r1, r1, #1024 ++ mov r2, r4 ++ add r1, ip, r1 ++ bl memcpy ++ mov r0, r4 ++ pop {r4, r5, r6, pc} ++.L4918: ++ add r3, r3, #1 ++ b .L4917 ++.L4920: ++ mvn r0, #0 ++ bx lr ++.L4926: ++ .align 2 ++.L4925: ++ .word .LANCHOR3 ++ .fnend ++ .size rk_ftl_vendor_read, .-rk_ftl_vendor_read ++ .align 2 ++ .global rk_ftl_vendor_write ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_vendor_write, %function ++rk_ftl_vendor_write: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 24 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ ldr r3, .L4948 ++ push {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .save {r4, r5, r6, r7, r8, r9, r10, fp, lr} ++ .pad #28 ++ sub sp, sp, #28 ++ ldr r4, [r3, #48] ++ cmp r4, #0 ++ beq .L4942 ++ mov r8, r2 ++ ldrh r2, [r4, #10] ++ add r6, r8, #63 ++ ldrh r3, [r4, #8] ++ mov fp, r1 ++ bic r6, r6, #63 ++ mov r7, #0 ++ str r3, [sp, #4] ++.L4929: ++ cmp r7, r2 ++ bcc .L4937 ++ ldrh r1, [r4, #14] ++ cmp r6, r1 ++ bhi .L4942 ++ add r3, r4, r2, lsl #3 ++ uxth r6, r6 ++ strh r0, [r3, #16] @ movhi ++ ldrh r2, [r4, #12] ++ strh r8, [r3, #20] @ movhi ++ strh r2, [r3, #18] @ movhi ++ add r2, r2, r6 ++ sub r6, r1, r6 ++ strh r2, [r4, #12] @ movhi ++ strh r6, [r4, #14] @ movhi ++ mov r2, r8 ++ ldrh r0, [r3, #18] ++ mov r1, fp ++ add r0, r0, #1024 ++ add r0, r4, r0 ++ bl memcpy ++ ldrh r3, [r4, #10] ++ add r3, r3, #1 ++ strh r3, [r4, #10] @ movhi ++ b .L4947 ++.L4937: ++ add r5, r4, r7, lsl #3 ++ ldrh r3, [r5, #16] ++ cmp r3, r0 ++ str r3, [sp, #8] ++ bne .L4930 ++ ldrh r1, [r5, #20] ++ add r3, r4, #1024 ++ add r1, r1, #63 ++ bic r1, r1, #63 ++ cmp r8, r1 ++ str r1, [sp, #12] ++ bls .L4931 ++ ldrh r1, [r4, #14] ++ cmp r6, r1 ++ subls r2, r2, #1 ++ ldrhls r10, [r5, #18] ++ strls r2, [sp, #16] ++ bls .L4932 ++.L4942: ++ mvn r0, #0 ++ b .L4927 ++.L4933: ++ ldrh r9, [r5, #20] ++ add r0, r3, r10 ++ ldrh r2, [r5, #16] ++ add r7, r7, #1 ++ ldrh r1, [r5, #18] ++ strh r9, [r5, #12] @ movhi ++ add r9, r9, #63 ++ bic r9, r9, #63 ++ strh r2, [r5, #8] @ movhi ++ strh r10, [r5, #10] @ movhi ++ add r1, r3, r1 ++ mov r2, r9 ++ str r3, [sp, #20] ++ bl memcpy ++ ldr r3, [sp, #20] ++ add r10, r10, r9 ++.L4932: ++ ldr r2, [sp, #16] ++ add r5, r5, #8 ++ cmp r7, r2 ++ bcc .L4933 ++ ldrh r2, [sp, #8] ++ add r7, r4, r7, lsl #3 ++ uxth r5, r10 ++ uxtah r0, r3, r10 ++ strh r8, [r7, #20] @ movhi ++ strh r2, [r7, #16] @ movhi ++ mov r1, fp ++ strh r5, [r7, #18] @ movhi ++ mov r2, r8 ++ bl memcpy ++ uxth r3, r6 ++ ldrh r6, [r4, #14] ++ add r5, r5, r3 ++ sub r6, r6, r3 ++ ldr r3, [sp, #12] ++ strh r5, [r4, #12] @ movhi ++ add r6, r6, r3 ++ strh r6, [r4, #14] @ movhi ++.L4947: ++ ldr r3, [r4, #4] ++ add r2, r4, #61440 ++ mov r1, #128 ++ add r3, r3, #1 ++ str r3, [r4, #4] ++ str r3, [r2, #4092] ++ mov r2, r4 ++ ldrh r3, [r4, #8] ++ add r3, r3, #1 ++ uxth r3, r3 ++ cmp r3, #1 ++ movhi r3, #0 ++ strh r3, [r4, #8] @ movhi ++ ldr r3, [sp, #4] ++ lsl r0, r3, #7 ++ bl FlashBootVendorWrite ++ mov r0, #0 ++.L4927: ++ add sp, sp, #28 ++ @ sp needed ++ pop {r4, r5, r6, r7, r8, r9, r10, fp, pc} ++.L4931: ++ ldrh r0, [r5, #18] ++ mov r2, r8 ++ mov r1, fp ++ add r0, r3, r0 ++ bl memcpy ++ strh r8, [r5, #20] @ movhi ++ b .L4947 ++.L4930: ++ add r7, r7, #1 ++ b .L4929 ++.L4949: ++ .align 2 ++.L4948: ++ .word .LANCHOR3 ++ .fnend ++ .size rk_ftl_vendor_write, .-rk_ftl_vendor_write ++ .align 2 ++ .global rk_ftl_vendor_storage_ioctl ++ .syntax unified ++ .arm ++ .fpu softvfp ++ .type rk_ftl_vendor_storage_ioctl, %function ++rk_ftl_vendor_storage_ioctl: ++ .fnstart ++ @ args = 0, pretend = 0, frame = 0 ++ @ frame_needed = 0, uses_anonymous_args = 0 ++ push {r4, r5, r6, lr} ++ .save {r4, r5, r6, lr} ++ mov r0, #9216 ++ mov r5, r2 ++ mov r6, r1 ++ bl ftl_malloc ++ subs r4, r0, #0 ++ mvneq r5, #0 ++ beq .L4950 ++ ldr r3, .L4966 ++ cmp r6, r3 ++ beq .L4953 ++ add r3, r3, #1 ++ cmp r6, r3 ++ beq .L4954 ++.L4964: ++ mvn r5, #13 ++ b .L4952 ++.L4953: ++ mov r2, #8 ++ mov r1, r5 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L4964 ++ ldr r2, [r4] ++ ldr r3, .L4966+4 ++ cmp r2, r3 ++ beq .L4956 ++.L4957: ++ mvn r5, #0 ++.L4952: ++ mov r0, r4 ++ bl kfree ++.L4950: ++ mov r0, r5 ++ pop {r4, r5, r6, pc} ++.L4956: ++ ldrh r2, [r4, #6] ++ add r1, r4, #8 ++ ldrh r0, [r4, #4] ++ bl rk_ftl_vendor_read ++ cmn r0, #1 ++ beq .L4957 ++ uxth r2, r0 ++ strh r0, [r4, #6] @ movhi ++ mov r1, r4 ++ mov r0, r5 ++ add r2, r2, #8 ++ bl rk_copy_to_user ++ subs r5, r0, #0 ++ beq .L4952 ++ b .L4964 ++.L4954: ++ mov r2, #8 ++ mov r1, r5 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L4964 ++ ldr r2, [r4] ++ ldr r3, .L4966+4 ++ cmp r2, r3 ++ bne .L4957 ++ ldrh r2, [r4, #6] ++ movw r3, #4087 ++ cmp r2, r3 ++ bhi .L4957 ++ add r2, r2, #8 ++ mov r1, r5 ++ mov r0, r4 ++ bl rk_copy_from_user ++ cmp r0, #0 ++ bne .L4964 ++ ldrh r2, [r4, #6] ++ add r1, r4, #8 ++ ldrh r0, [r4, #4] ++ bl rk_ftl_vendor_write ++ mov r5, r0 ++ b .L4952 ++.L4967: ++ .align 2 ++.L4966: ++ .word 1074034177 ++ .word 1448232273 ++ .fnend ++ .size rk_ftl_vendor_storage_ioctl, .-rk_ftl_vendor_storage_ioctl ++ .global SecureBootUnlockTryCount ++ .global SecureBootCheckOK ++ .global SecureBootEn ++ .global gpVendor1Info ++ .global gpVendor0Info ++ .global g_idb_buffer ++ .global gSnSectorData ++ .global gpDrmKeyInfo ++ .global gpBootConfig ++ .global ftl_dma32_buffer_size ++ .global ftl_dma32_buffer ++ .global gLoaderBootInfo ++ .global RK29_NANDC1_REG_BASE ++ .global RK29_NANDC_REG_BASE ++ .global gp_ftl_api ++ .global rk_zftl_enable ++ .global g_pm_spare ++ .global pm_first_write ++ .global pm_force_gc ++ .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 slc_cache_sblk ++ .global xlc_data_sblk ++ .global slc_data_sblk ++ .global free_mix_sblk ++ .global free_xlc_sblk ++ .global free_slc_sblk ++ .global gp_data_xlc_data_head ++ .global gp_data_slc_data_head ++ .global gp_data_slc_cache_head ++ .global gp_free_mix_head ++ .global gp_free_xlc_head ++ .global gp_free_slc_head ++ .global gp_sblk_list_tbl ++ .global zftl_print_list_count ++ .global ftl_ext_info_first_write ++ .global ftl_sys_info_first_write ++ .global ftl_low_format_cur_blk ++ .global ftl_power_lost_flag ++ .global ftl_vpn_update_count ++ .global ftl_sblk_update_list_offset ++ .global ftl_sblk_update_list ++ .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_buffer ++ .global ftl_ext_info_data_buffer ++ .global ftl_info_data_buffer ++ .global ftl_tmp_spare ++ .global ftl_info_spare ++ .global g_ftl_info_blk ++ .global tlc_b05a_prog_tbl ++ .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_xlc_search_index ++ .global gc_xlc_data_index ++ .global gc_slc_cache_index ++ .global gc_slc_data_index ++ .global gc_free_slc_sblk_th ++ .global gc_slc_mode_vpn_th ++ .global gc_slc_mode_slc_vpn_th ++ .global gc_slc_mode_tlc_vpn_th ++ .global gc_tlc_mode_tlc_vpn_th ++ .global gc_tlc_mode_slc_vpn_th ++ .global gc_state ++ .global gc_mode ++ .global p_read_ahead_ext_buf ++ .global discard_sector_count ++ .global read_ahead_lpa ++ .global _ftl_gc_tag_page_num ++ .global read_buf_count ++ .global read_buf_head ++ .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_slc_to_xlc_ec_ratio ++ .global _c_mix_max_xlc_ec_count ++ .global _c_mix_max_slc_ec_count ++ .global _c_swl_xlc_gc_th ++ .global _c_swl_slc_gc_th ++ .global _gc_after_discard_en ++ .global _last_write_time ++ .global _last_read_time ++ .global _min_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 nandc_ecc_sts ++ .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_tran_timeout ++ .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 _c_ftl_cs_bits ++ .global g_maxRetryCount ++ .global g_maxRegNum ++ .global g_retryMode ++ .global g_flash_toggle_mode_en ++ .global g_flash_ymtc_3d_tlc_flag ++ .global g_flash_micron_3d_tlc_b16a ++ .global g_flash_micron_3d_tlc_b05a ++ .global g_flash_micron_3d_tlc_flag ++ .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_one_pass_program ++ .global g_slc_mode_addr2 ++ .global g_slc_mode_enable ++ .global g_flash_cur_mode ++ .global g_flash_six_addr ++ .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 2 ++ .set .LANCHOR1,. + 0 ++ .type __func__.42945, %object ++ .size __func__.42945, 18 ++__func__.42945: ++ .ascii "_list_remove_node\000" ++ .type __func__.42970, %object ++ .size __func__.42970, 23 ++__func__.42970: ++ .ascii "_list_update_data_list\000" ++ .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 ++ .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 ++ .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__.23463, %object ++ .size __func__.23463, 22 ++__func__.23463: ++ .ascii "nand_flash_print_info\000" ++ .type __func__.22936, %object ++ .size __func__.22936, 28 ++__func__.22936: ++ .ascii "flash_wait_device_ready_raw\000" ++ .type __func__.23000, %object ++ .size __func__.23000, 22 ++__func__.23000: ++ .ascii "flash_start_page_read\000" ++ .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 ++ .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 ++ .type ymtc_3D_tlc_value, %object ++ .size ymtc_3D_tlc_value, 357 ++ymtc_3D_tlc_value: ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -10 ++ .byte -10 ++ .byte -6 ++ .byte -6 ++ .byte -2 ++ .byte 2 ++ .byte 2 ++ .byte -6 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -4 ++ .byte -6 ++ .byte -8 ++ .byte 6 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -2 ++ .byte -2 ++ .byte -2 ++ .byte -4 ++ .byte -4 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -11 ++ .byte -2 ++ .byte 2 ++ .byte 4 ++ .byte 4 ++ .byte 6 ++ .byte 6 ++ .byte 6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -8 ++ .byte -14 ++ .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 -18 ++ .byte -18 ++ .byte -14 ++ .byte -14 ++ .byte -10 ++ .byte -5 ++ .byte -5 ++ .byte -14 ++ .byte -14 ++ .byte -12 ++ .byte -12 ++ .byte -12 ++ .byte -13 ++ .byte -15 ++ .byte -2 ++ .byte -8 ++ .byte -8 ++ .byte -8 ++ .byte -8 ++ .byte -7 ++ .byte -7 ++ .byte -10 ++ .byte -10 ++ .byte -10 ++ .byte -12 ++ .byte -12 ++ .byte -13 ++ .byte -13 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -13 ++ .byte -18 ++ .byte -10 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -2 ++ .byte -1 ++ .byte -1 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -15 ++ .byte -21 ++ .byte -12 ++ .byte -11 ++ .byte -7 ++ .byte -7 ++ .byte -3 ++ .byte 1 ++ .byte 1 ++ .byte -8 ++ .byte -7 ++ .byte -5 ++ .byte -5 ++ .byte -5 ++ .byte -7 ++ .byte -9 ++ .byte 4 ++ .byte -1 ++ .byte -1 ++ .byte -1 ++ .byte -1 ++ .byte -1 ++ .byte -1 ++ .byte -4 ++ .byte -3 ++ .byte -3 ++ .byte -5 ++ .byte -5 ++ .byte -7 ++ .byte -7 ++ .byte -8 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -12 ++ .byte -4 ++ .byte 1 ++ .byte 3 ++ .byte 3 ++ .byte 5 ++ .byte 5 ++ .byte 5 ++ .byte -8 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -9 ++ .byte -15 ++ .byte 2 ++ .byte -7 ++ .byte -11 ++ .byte -14 ++ .byte -8 ++ .byte -12 ++ .byte -10 ++ .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 -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 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 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 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 ++ .type ymtc_3D_slc_value, %object ++ .size ymtc_3D_slc_value, 10 ++ymtc_3D_slc_value: ++ .byte 0 ++ .byte -8 ++ .byte 8 ++ .byte -16 ++ .byte -20 ++ .byte 24 ++ .byte -26 ++ .byte 40 ++ .byte -12 ++ .byte 56 ++ .type __func__.23025, %object ++ .size __func__.23025, 23 ++__func__.23025: ++ .ascii "flash_start_plane_read\000" ++ .type __func__.22911, %object ++ .size __func__.22911, 26 ++__func__.22911: ++ .ascii "flash_erase_duplane_block\000" ++ .type __func__.22922, %object ++ .size __func__.22922, 21 ++__func__.22922: ++ .ascii "flash_erase_block_en\000" ++ .type random_seed, %object ++ .size random_seed, 256 ++random_seed: ++ .short 22378 ++ .short 1512 ++ .short 25245 ++ .short 17827 ++ .short 25756 ++ .short 19440 ++ .short 9026 ++ .short 10030 ++ .short 29528 ++ .short 20467 ++ .short 29676 ++ .short 24432 ++ .short 31328 ++ .short 6872 ++ .short 13426 ++ .short 13842 ++ .short 8783 ++ .short 1108 ++ .short 782 ++ .short 28837 ++ .short 30729 ++ .short 9505 ++ .short 18676 ++ .short 23085 ++ .short 18730 ++ .short 1085 ++ .short 32609 ++ .short 14697 ++ .short 20858 ++ .short 15170 ++ .short 30365 ++ .short 1607 ++ .short 32298 ++ .short 4995 ++ .short 18905 ++ .short 1976 ++ .short 9592 ++ .short 20204 ++ .short 17443 ++ .short 13615 ++ .short 23330 ++ .short 29369 ++ .short 13947 ++ .short 9398 ++ .short 32398 ++ .short 8984 ++ .short 27600 ++ .short 21785 ++ .short 6019 ++ .short 6311 ++ .short 31598 ++ .short 30210 ++ .short 19327 ++ .short 13896 ++ .short 11347 ++ .short 27545 ++ .short 3107 ++ .short 26575 ++ .short 32270 ++ .short 19852 ++ .short 20601 ++ .short 8349 ++ .short 9290 ++ .short 29819 ++ .short 13579 ++ .short 3661 ++ .short 28676 ++ .short 27331 ++ .short 32574 ++ .short 8693 ++ .short 31253 ++ .short 9081 ++ .short 5399 ++ .short 6842 ++ .short 20087 ++ .short 5537 ++ .short 1274 ++ .short 11617 ++ .short 9530 ++ .short 4866 ++ .short 8035 ++ .short 23219 ++ .short 1178 ++ .short 23272 ++ .short 7383 ++ .short 18944 ++ .short 12488 ++ .short 12871 ++ .short 29340 ++ .short 20532 ++ .short 11022 ++ .short 22514 ++ .short 228 ++ .short 22363 ++ .short 24978 ++ .short 14584 ++ .short 12138 ++ .short 3092 ++ .short 17916 ++ .short 16863 ++ .short 14554 ++ .short 31457 ++ .short 29474 ++ .short 25311 ++ .short 24121 ++ .short 3684 ++ .short 28037 ++ .short 22865 ++ .short 22839 ++ .short 25217 ++ .short 13217 ++ .short 27186 ++ .short 14938 ++ .short 11180 ++ .short 29754 ++ .short 24180 ++ .short 15150 ++ .short 32455 ++ .short 20434 ++ .short 23848 ++ .short 29983 ++ .short 16120 ++ .short 14769 ++ .short 20041 ++ .short 29803 ++ .short 28406 ++ .short 17598 ++ .short 28087 ++ .type __func__.23728, %object ++ .size __func__.23728, 13 ++__func__.23728: ++ .ascii "buf_add_tail\000" ++ .type __func__.23741, %object ++ .size __func__.23741, 10 ++__func__.23741: ++ .ascii "buf_alloc\000" ++ .type __func__.23755, %object ++ .size __func__.23755, 16 ++__func__.23755: ++ .ascii "buf_remove_free\000" ++ .space 1 ++ .type zftl_debug_proc_fops, %object ++ .size zftl_debug_proc_fops, 44 ++zftl_debug_proc_fops: ++ .space 4 ++ .word zftl_debug_proc_open ++ .word seq_read ++ .space 4 ++ .word zftl_debug_proc_write ++ .word seq_lseek ++ .word single_release ++ .space 16 ++ .type __func__.42478, %object ++ .size __func__.42478, 12 ++__func__.42478: ++ .ascii "gc_add_sblk\000" ++ .type __func__.42570, %object ++ .size __func__.42570, 19 ++__func__.42570: ++ .ascii "gc_write_completed\000" ++ .type __func__.43176, %object ++ .size __func__.43176, 18 ++__func__.43176: ++ .ascii "ftl_alloc_sys_blk\000" ++ .type __func__.43186, %object ++ .size __func__.43186, 17 ++__func__.43186: ++ .ascii "ftl_free_sys_blk\000" ++ .type __func__.43307, %object ++ .size __func__.43307, 23 ++__func__.43307: ++ .ascii "ftl_get_ppa_from_index\000" ++ .type __func__.43347, %object ++ .size __func__.43347, 22 ++__func__.43347: ++ .ascii "ftl_get_new_free_page\000" ++ .type __func__.43358, %object ++ .size __func__.43358, 22 ++__func__.43358: ++ .ascii "ftl_ext_alloc_new_blk\000" ++ .type __func__.42627, %object ++ .size __func__.42627, 16 ++__func__.42627: ++ .ascii "gc_free_src_blk\000" ++ .type __func__.42221, %object ++ .size __func__.42221, 14 ++__func__.42221: ++ .ascii "ftl_write_buf\000" ++ .type __func__.42266, %object ++ .size __func__.42266, 18 ++__func__.42266: ++ .ascii "zftl_add_read_buf\000" ++ .type __func__.43780, %object ++ .size __func__.43780, 21 ++__func__.43780: ++ .ascii "pm_select_ram_region\000" ++ .type __func__.23453, %object ++ .size __func__.23453, 20 ++__func__.23453: ++ .ascii "flash_die_info_init\000" ++ .type __func__.42153, %object ++ .size __func__.42153, 17 ++__func__.42153: ++ .ascii "lpa_rebuild_hash\000" ++ .type __func__.43045, %object ++ .size __func__.43045, 20 ++__func__.43045: ++ .ascii "zftl_sblk_list_init\000" ++ .type __func__.43712, %object ++ .size __func__.43712, 13 ++__func__.43712: ++ .ascii "pm_free_sblk\000" ++ .type __func__.23791, %object ++ .size __func__.23791, 21 ++__func__.23791: ++ .ascii "flash_info_data_init\000" ++ .type __func__.23549, %object ++ .size __func__.23549, 11 ++__func__.23549: ++ .ascii "nandc_init\000" ++ .type samsung_14nm_slc_rr, %object ++ .size samsung_14nm_slc_rr, 26 ++samsung_14nm_slc_rr: ++ .byte 0 ++ .byte 10 ++ .byte -10 ++ .byte 20 ++ .byte -20 ++ .byte 30 ++ .byte -30 ++ .byte 40 ++ .byte -40 ++ .byte 50 ++ .byte -50 ++ .byte 60 ++ .byte -60 ++ .byte -70 ++ .byte -80 ++ .byte -90 ++ .byte -100 ++ .byte -110 ++ .byte -120 ++ .byte -9 ++ .byte 70 ++ .byte 80 ++ .byte 90 ++ .byte -125 ++ .byte -115 ++ .byte 100 ++ .type samsung_14nm_mlc_rr, %object ++ .size samsung_14nm_mlc_rr, 104 ++samsung_14nm_mlc_rr: ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -4 ++ .byte 3 ++ .byte -4 ++ .byte -6 ++ .byte 6 ++ .byte 0 ++ .byte 6 ++ .byte -10 ++ .byte -10 ++ .byte 4 ++ .byte -10 ++ .byte 16 ++ .byte 12 ++ .byte -4 ++ .byte 12 ++ .byte 8 ++ .byte -16 ++ .byte 10 ++ .byte -16 ++ .byte 24 ++ .byte 18 ++ .byte -14 ++ .byte 18 ++ .byte -4 ++ .byte -22 ++ .byte -16 ++ .byte -22 ++ .byte -8 ++ .byte 24 ++ .byte -9 ++ .byte 24 ++ .byte 8 ++ .byte -28 ++ .byte -4 ++ .byte -28 ++ .byte 16 ++ .byte 30 ++ .byte 10 ++ .byte 30 ++ .byte 10 ++ .byte -34 ++ .byte 6 ++ .byte -34 ++ .byte 0 ++ .byte 36 ++ .byte -8 ++ .byte 36 ++ .byte -8 ++ .byte -40 ++ .byte -2 ++ .byte -40 ++ .byte -20 ++ .byte -46 ++ .byte -4 ++ .byte -46 ++ .byte -30 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte -3 ++ .byte -2 ++ .byte -4 ++ .byte -2 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -4 ++ .byte -10 ++ .byte -6 ++ .byte -8 ++ .byte -6 ++ .byte -14 ++ .byte -9 ++ .byte -8 ++ .byte -9 ++ .byte -18 ++ .byte -52 ++ .byte 22 ++ .byte -52 ++ .byte 10 ++ .byte 42 ++ .byte 4 ++ .byte 42 ++ .byte 4 ++ .byte 48 ++ .byte -9 ++ .byte 48 ++ .byte 4 ++ .byte -58 ++ .byte 12 ++ .byte -58 ++ .byte 0 ++ .byte -64 ++ .byte -24 ++ .byte -64 ++ .byte -6 ++ .byte 9 ++ .byte 18 ++ .byte 9 ++ .byte 8 ++ .type __func__.22834, %object ++ .size __func__.22834, 19 ++__func__.22834: ++ .ascii "flash_read_page_en\000" ++ .type __func__.22960, %object ++ .size __func__.22960, 26 ++__func__.22960: ++ .ascii "flash_start_tlc_page_prog\000" ++ .type __func__.22971, %object ++ .size __func__.22971, 29 ++__func__.22971: ++ .ascii "flash_start_3d_mlc_page_prog\000" ++ .type __func__.22989, %object ++ .size __func__.22989, 22 ++__func__.22989: ++ .ascii "flash_start_page_prog\000" ++ .type __func__.23013, %object ++ .size __func__.23013, 31 ++__func__.23013: ++ .ascii "flash_complete_plane_page_read\000" ++ .type __func__.23038, %object ++ .size __func__.23038, 25 ++__func__.23038: ++ .ascii "flash_complete_page_read\000" ++ .type __func__.43545, %object ++ .size __func__.43545, 31 ++__func__.43545: ++ .ascii "queue_wait_first_req_completed\000" ++ .type __func__.43599, %object ++ .size __func__.43599, 15 ++__func__.43599: ++ .ascii "sblk_prog_page\000" ++ .type __func__.43626, %object ++ .size __func__.43626, 15 ++__func__.43626: ++ .ascii "sblk_read_page\000" ++ .type __func__.42525, %object ++ .size __func__.42525, 21 ++__func__.42525: ++ .ascii "gc_check_data_one_wl\000" ++ .type __func__.22895, %object ++ .size __func__.22895, 19 ++__func__.22895: ++ .ascii "flash_prog_page_en\000" ++ .type __func__.43422, %object ++ .size __func__.43422, 14 ++__func__.43422: ++ .ascii "ftl_prog_page\000" ++ .type __func__.43079, %object ++ .size __func__.43079, 15 ++__func__.43079: ++ .ascii "ftl_info_flush\000" ++ .type __func__.43384, %object ++ .size __func__.43384, 19 ++__func__.43384: ++ .ascii "ftl_ext_info_flush\000" ++ .type __func__.43396, %object ++ .size __func__.43396, 18 ++__func__.43396: ++ .ascii "ftl_ext_info_init\000" ++ .type __func__.43134, %object ++ .size __func__.43134, 15 ++__func__.43134: ++ .ascii "ftl_alloc_sblk\000" ++ .type __func__.43752, %object ++ .size __func__.43752, 17 ++__func__.43752: ++ .ascii "pm_alloc_new_blk\000" ++ .type __func__.43762, %object ++ .size __func__.43762, 14 ++__func__.43762: ++ .ascii "pm_write_page\000" ++ .type __func__.23813, %object ++ .size __func__.23813, 17 ++__func__.23813: ++ .ascii "flash_info_flush\000" ++ .type __func__.23776, %object ++ .size __func__.23776, 20 ++__func__.23776: ++ .ascii "flash_info_blk_init\000" ++ .type __func__.23508, %object ++ .size __func__.23508, 16 ++__func__.23508: ++ .ascii "nand_flash_init\000" ++ .type __func__.43249, %object ++ .size __func__.43249, 16 ++__func__.43249: ++ .ascii "ftl_sysblk_dump\000" ++ .type __func__.43274, %object ++ .size __func__.43274, 23 ++__func__.43274: ++ .ascii "ftl_open_sblk_recovery\000" ++ .type __func__.43696, %object ++ .size __func__.43696, 16 ++__func__.43696: ++ .ascii "load_l2p_region\000" ++ .type __func__.43736, %object ++ .size __func__.43736, 6 ++__func__.43736: ++ .ascii "pm_gc\000" ++ .type __func__.42468, %object ++ .size __func__.42468, 12 ++__func__.42468: ++ .ascii "gc_recovery\000" ++ .type __func__.42557, %object ++ .size __func__.42557, 22 ++__func__.42557: ++ .ascii "gc_update_l2p_map_new\000" ++ .type __func__.42671, %object ++ .size __func__.42671, 16 ++__func__.42671: ++ .ascii "gc_scan_src_blk\000" ++ .type __func__.42732, %object ++ .size __func__.42732, 20 ++__func__.42732: ++ .ascii "gc_scan_static_data\000" ++ .type __func__.42795, %object ++ .size __func__.42795, 18 ++__func__.42795: ++ .ascii "gc_block_vpn_scan\000" ++ .type __func__.43225, %object ++ .size __func__.43225, 14 ++__func__.43225: ++ .ascii "ftl_sblk_dump\000" ++ .type __func__.42299, %object ++ .size __func__.42299, 10 ++__func__.42299: ++ .ascii "zftl_read\000" ++ .type __func__.43328, %object ++ .size __func__.43328, 19 ++__func__.43328: ++ .ascii "ftl_update_l2p_map\000" ++ .type __func__.42203, %object ++ .size __func__.42203, 17 ++__func__.42203: ++ .ascii "ftl_write_commit\000" ++ .type __func__.42600, %object ++ .size __func__.42600, 16 ++__func__.42600: ++ .ascii "gc_do_copy_back\000" ++ .type __func__.42850, %object ++ .size __func__.42850, 11 ++__func__.42850: ++ .ascii "zftl_do_gc\000" ++ .type __func__.42331, %object ++ .size __func__.42331, 13 ++__func__.42331: ++ .ascii "_ftl_discard\000" ++ .data ++ .align 2 ++ .set .LANCHOR2,. + 0 ++ .type zftl_debug, %object ++ .size zftl_debug, 4 ++zftl_debug: ++ .word 17476 ++ .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 ++ .short 768 ++ .byte 3 ++ .byte 2 ++ .short 758 ++ .short 5593 ++ .byte 0 ++ .byte 37 ++ .byte 60 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 256 ++ .byte 1 ++ .byte -94 ++ .byte 0 ++ .byte 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 ++ .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 ++ .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 ++ .type zftl_nand_flash_para_tbl, %object ++ .size zftl_nand_flash_para_tbl, 1568 ++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 ++ .short 768 ++ .byte 3 ++ .byte 2 ++ .short 758 ++ .short 5593 ++ .byte 0 ++ .byte 37 ++ .byte 60 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 768 ++ .byte 3 ++ .byte 2 ++ .short 1478 ++ .short 5593 ++ .byte 0 ++ .byte 37 ++ .byte 60 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 384 ++ .byte 3 ++ .byte 2 ++ .short 1446 ++ .short 1497 ++ .byte 0 ++ .byte 36 ++ .byte 60 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 17881 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2092 ++ .short 17857 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2106 ++ .short 17881 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1056 ++ .short 17857 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 17857 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 17881 ++ .byte 2 ++ .byte 34 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 17857 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .short 256 ++ .byte 1 ++ .byte -94 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 17881 ++ .byte 2 ++ .byte 33 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .short 256 ++ .byte 1 ++ .byte -94 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -104 ++ .byte -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -47 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 17881 ++ .byte 2 ++ .byte 35 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2106 ++ .short 17881 ++ .byte 2 ++ .byte 68 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1074 ++ .short 17881 ++ .byte 2 ++ .byte 68 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1058 ++ .short 17881 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 17881 ++ .byte 2 ++ .byte 67 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .short 256 ++ .byte 1 ++ .byte -94 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte 69 ++ .byte -41 ++ .byte -124 ++ .byte -109 ++ .byte 114 ++ .byte 87 ++ .byte 8 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 1060 ++ .short 17857 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .short 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 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1048 ++ .short 9671 ++ .byte 5 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .short 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 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 700 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 512 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte 68 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1064 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 256 ++ .byte 3 ++ .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 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 512 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 1 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 84 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 455 ++ .byte 4 ++ .byte 18 ++ .byte 60 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 512 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 4 ++ .short 1024 ++ .short 449 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 256 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 512 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 9671 ++ .byte 5 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .short 512 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1044 ++ .short 471 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 512 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 9671 ++ .byte 5 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .short 512 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte -60 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 9671 ++ .byte 5 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .short 512 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 2184 ++ .short 9671 ++ .byte 5 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .short 512 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .byte 0 ++ .byte 6 ++ .byte -101 ++ .byte 73 ++ .byte 1 ++ .byte 0 ++ .byte -101 ++ .byte 73 ++ .byte 9 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 1 ++ .short 2144 ++ .short -23097 ++ .byte 8 ++ .byte 21 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 8 ++ .byte 0 ++ .short 256 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -87 ++ .byte 4 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 479 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 512 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 1 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 88 ++ .byte 50 ++ .byte -95 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 768 ++ .byte 3 ++ .byte 1 ++ .short 1440 ++ .short 3527 ++ .byte 0 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 1024 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 2 ++ .byte 6 ++ .byte 44 ++ .byte -92 ++ .byte 8 ++ .byte 50 ++ .byte -95 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 2304 ++ .byte 3 ++ .byte 1 ++ .short 1008 ++ .short 3521 ++ .byte 0 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 4096 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 4 ++ .byte 6 ++ .byte 44 ++ .byte -92 ++ .byte 100 ++ .byte 50 ++ .byte -86 ++ .byte 4 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .short 1024 ++ .byte 2 ++ .byte 1 ++ .short 2192 ++ .short 9671 ++ .byte 10 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 1024 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .byte 0 ++ .byte 6 ++ .byte -101 ++ .byte -61 ++ .byte 72 ++ .byte 37 ++ .byte 16 ++ .byte 0 ++ .byte 9 ++ .byte 1 ++ .byte 32 ++ .short 1152 ++ .byte 3 ++ .byte 2 ++ .short 1006 ++ .short -27169 ++ .byte 13 ++ .byte 81 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .short 2048 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .byte 24 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte 20 ++ .byte -85 ++ .byte 66 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1056 ++ .short 455 ++ .byte 2 ++ .byte 6 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .short 256 ++ .byte 2 ++ .byte -65 ++ .byte -66 ++ .byte 0 ++ .byte 6 ++ .byte -83 ++ .byte -34 ++ .byte -108 ++ .byte -21 ++ .byte 116 ++ .byte 68 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1066 ++ .short 473 ++ .byte 1 ++ .byte 7 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1060 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .short 256 ++ .byte 2 ++ .byte -65 ++ .byte -66 ++ .byte 0 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte -108 ++ .byte -111 ++ .byte 96 ++ .byte 68 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1046 ++ .short 473 ++ .byte 1 ++ .byte 3 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .short 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 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 2092 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .short 256 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -83 ++ .byte -41 ++ .byte 20 ++ .byte -98 ++ .byte 52 ++ .byte 74 ++ .byte 2 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 2 ++ .short 1056 ++ .short 473 ++ .byte 2 ++ .byte 5 ++ .byte 40 ++ .byte 32 ++ .byte 4 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .short 256 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -83 ++ .byte 58 ++ .byte 20 ++ .byte 3 ++ .byte 8 ++ .byte 80 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .short 388 ++ .byte 2 ++ .byte 2 ++ .short 1362 ++ .short 473 ++ .byte 9 ++ .byte 8 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .short 512 ++ .byte 0 ++ .byte -65 ++ .byte -66 ++ .byte 1 ++ .byte 5 ++ .byte -119 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -95 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 1 ++ .short 1024 ++ .short 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 512 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte -119 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .short 512 ++ .byte 2 ++ .byte 2 ++ .short 1024 ++ .short 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 512 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -119 ++ .byte 100 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 4 ++ .short 1024 ++ .short 449 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 256 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 36 ++ .byte 75 ++ .byte -87 ++ .byte -124 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 4 ++ .short 1024 ++ .short 449 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 256 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 4 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .short 256 ++ .byte 2 ++ .byte 4 ++ .short 1024 ++ .short 449 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 256 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -119 ++ .byte -92 ++ .byte 8 ++ .byte 50 ++ .byte -95 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .short 2304 ++ .byte 3 ++ .byte 1 ++ .short 1008 ++ .short 3521 ++ .byte 0 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .short 4096 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -108 ++ .byte -61 ++ .byte -92 ++ .byte -54 ++ .byte 0 ++ .byte 1 ++ .byte 32 ++ .short 792 ++ .byte 2 ++ .byte 1 ++ .short 688 ++ .short 1217 ++ .byte 11 ++ .byte 50 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .short 1024 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .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 ++ .space 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 ++ .space 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 ++ .space 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 ++ .space 14 ++ .type tlc_b05a_prog_tbl, %object ++ .size tlc_b05a_prog_tbl, 1536 ++tlc_b05a_prog_tbl: ++ .short 0 ++ .short 0 ++ .short 0 ++ .short 0 ++ .short 0 ++ .short 0 ++ .short 0 ++ .short 0 ++ .short 9 ++ .short 0 ++ .short 11 ++ .short 0 ++ .short 13 ++ .short 0 ++ .short 15 ++ .short 0 ++ .short 17 ++ .short 0 ++ .short 19 ++ .short 0 ++ .short 21 ++ .short 0 ++ .short 23 ++ .short 0 ++ .short 25 ++ .short 0 ++ .short 27 ++ .short 0 ++ .short 29 ++ .short 0 ++ .short 31 ++ .short 0 ++ .short 33 ++ .short 0 ++ .short 35 ++ .short 0 ++ .short 37 ++ .short 0 ++ .short 39 ++ .short 0 ++ .short 41 ++ .short 0 ++ .short 43 ++ .short 0 ++ .short 45 ++ .short 0 ++ .short 47 ++ .short 0 ++ .short 49 ++ .short 0 ++ .short 51 ++ .short 0 ++ .short 53 ++ .short 0 ++ .short 55 ++ .short 0 ++ .short 25 ++ .short 58 ++ .short 0 ++ .short 27 ++ .short 61 ++ .short 0 ++ .short 29 ++ .short 64 ++ .short 0 ++ .short 31 ++ .short 67 ++ .short 0 ++ .short 33 ++ .short 70 ++ .short 0 ++ .short 35 ++ .short 73 ++ .short 0 ++ .short 37 ++ .short 76 ++ .short 0 ++ .short 39 ++ .short 79 ++ .short 0 ++ .short 41 ++ .short 82 ++ .short 0 ++ .short 43 ++ .short 85 ++ .short 0 ++ .short 45 ++ .short 88 ++ .short 0 ++ .short 47 ++ .short 91 ++ .short 0 ++ .short 49 ++ .short 94 ++ .short 0 ++ .short 51 ++ .short 97 ++ .short 0 ++ .short 53 ++ .short 100 ++ .short 0 ++ .short 55 ++ .short 103 ++ .short 0 ++ .short 58 ++ .short 106 ++ .short 0 ++ .short 61 ++ .short 109 ++ .short 0 ++ .short 64 ++ .short 112 ++ .short 0 ++ .short 67 ++ .short 115 ++ .short 0 ++ .short 70 ++ .short 118 ++ .short 0 ++ .short 73 ++ .short 121 ++ .short 0 ++ .short 76 ++ .short 124 ++ .short 0 ++ .short 79 ++ .short 127 ++ .short 0 ++ .short 82 ++ .short 130 ++ .short 0 ++ .short 85 ++ .short 133 ++ .short 0 ++ .short 88 ++ .short 136 ++ .short 0 ++ .short 91 ++ .short 139 ++ .short 0 ++ .short 94 ++ .short 142 ++ .short 0 ++ .short 97 ++ .short 145 ++ .short 0 ++ .short 100 ++ .short 148 ++ .short 0 ++ .short 103 ++ .short 151 ++ .short 0 ++ .short 106 ++ .short 154 ++ .short 0 ++ .short 109 ++ .short 157 ++ .short 0 ++ .short 112 ++ .short 160 ++ .short 0 ++ .short 115 ++ .short 163 ++ .short 0 ++ .short 118 ++ .short 166 ++ .short 0 ++ .short 121 ++ .short 169 ++ .short 0 ++ .short 124 ++ .short 172 ++ .short 0 ++ .short 127 ++ .short 175 ++ .short 0 ++ .short 130 ++ .short 178 ++ .short 0 ++ .short 133 ++ .short 181 ++ .short 0 ++ .short 136 ++ .short 184 ++ .short 0 ++ .short 139 ++ .short 187 ++ .short 0 ++ .short 142 ++ .short 190 ++ .short 0 ++ .short 145 ++ .short 193 ++ .short 0 ++ .short 148 ++ .short 196 ++ .short 0 ++ .short 151 ++ .short 199 ++ .short 0 ++ .short 154 ++ .short 202 ++ .short 0 ++ .short 157 ++ .short 205 ++ .short 0 ++ .short 160 ++ .short 208 ++ .short 0 ++ .short 163 ++ .short 211 ++ .short 0 ++ .short 166 ++ .short 214 ++ .short 0 ++ .short 169 ++ .short 217 ++ .short 0 ++ .short 172 ++ .short 220 ++ .short 0 ++ .short 175 ++ .short 223 ++ .short 0 ++ .short 178 ++ .short 226 ++ .short 0 ++ .short 181 ++ .short 229 ++ .short 0 ++ .short 184 ++ .short 232 ++ .short 0 ++ .short 187 ++ .short 235 ++ .short 0 ++ .short 190 ++ .short 238 ++ .short 0 ++ .short 193 ++ .short 241 ++ .short 0 ++ .short 196 ++ .short 244 ++ .short 0 ++ .short 199 ++ .short 247 ++ .short 0 ++ .short 202 ++ .short 250 ++ .short 0 ++ .short 205 ++ .short 253 ++ .short 0 ++ .short 208 ++ .short 256 ++ .short 0 ++ .short 211 ++ .short 259 ++ .short 0 ++ .short 214 ++ .short 262 ++ .short 0 ++ .short 217 ++ .short 265 ++ .short 0 ++ .short 220 ++ .short 268 ++ .short 0 ++ .short 223 ++ .short 271 ++ .short 0 ++ .short 226 ++ .short 274 ++ .short 0 ++ .short 229 ++ .short 277 ++ .short 0 ++ .short 232 ++ .short 280 ++ .short 0 ++ .short 235 ++ .short 283 ++ .short 0 ++ .short 238 ++ .short 286 ++ .short 0 ++ .short 241 ++ .short 289 ++ .short 0 ++ .short 244 ++ .short 292 ++ .short 0 ++ .short 247 ++ .short 295 ++ .short 0 ++ .short 250 ++ .short 298 ++ .short 0 ++ .short 253 ++ .short 301 ++ .short 0 ++ .short 256 ++ .short 304 ++ .short 0 ++ .short 259 ++ .short 307 ++ .short 0 ++ .short 262 ++ .short 310 ++ .short 0 ++ .short 265 ++ .short 313 ++ .short 0 ++ .short 268 ++ .short 316 ++ .short 0 ++ .short 271 ++ .short 319 ++ .short 0 ++ .short 274 ++ .short 322 ++ .short 0 ++ .short 277 ++ .short 325 ++ .short 0 ++ .short 280 ++ .short 328 ++ .short 0 ++ .short 283 ++ .short 331 ++ .short 0 ++ .short 286 ++ .short 334 ++ .short 0 ++ .short 289 ++ .short 337 ++ .short 0 ++ .short 292 ++ .short 340 ++ .short 0 ++ .short 295 ++ .short 343 ++ .short 0 ++ .short 298 ++ .short 346 ++ .short 0 ++ .short 301 ++ .short 349 ++ .short 0 ++ .short 304 ++ .short 352 ++ .short 0 ++ .short 307 ++ .short 355 ++ .short 0 ++ .short 310 ++ .short 358 ++ .short 0 ++ .short 313 ++ .short 361 ++ .short 0 ++ .short 316 ++ .short 364 ++ .short 0 ++ .short 319 ++ .short 367 ++ .short 0 ++ .short 322 ++ .short 370 ++ .short 0 ++ .short 325 ++ .short 373 ++ .short 0 ++ .short 328 ++ .short 376 ++ .short 0 ++ .short 331 ++ .short 379 ++ .short 0 ++ .short 334 ++ .short 382 ++ .short 0 ++ .short 337 ++ .short 385 ++ .short 0 ++ .short 340 ++ .short 388 ++ .short 0 ++ .short 343 ++ .short 391 ++ .short 0 ++ .short 346 ++ .short 394 ++ .short 0 ++ .short 349 ++ .short 397 ++ .short 0 ++ .short 352 ++ .short 400 ++ .short 0 ++ .short 355 ++ .short 403 ++ .short 0 ++ .short 358 ++ .short 406 ++ .short 0 ++ .short 361 ++ .short 409 ++ .short 0 ++ .short 364 ++ .short 412 ++ .short 0 ++ .short 367 ++ .short 415 ++ .short 0 ++ .short 370 ++ .short 418 ++ .short 0 ++ .short 373 ++ .short 421 ++ .short 0 ++ .short 376 ++ .short 424 ++ .short 0 ++ .short 379 ++ .short 427 ++ .short 0 ++ .short 382 ++ .short 430 ++ .short 0 ++ .short 385 ++ .short 433 ++ .short 0 ++ .short 388 ++ .short 436 ++ .short 0 ++ .short 391 ++ .short 439 ++ .short 0 ++ .short 394 ++ .short 442 ++ .short 0 ++ .short 397 ++ .short 445 ++ .short 0 ++ .short 400 ++ .short 448 ++ .short 0 ++ .short 403 ++ .short 451 ++ .short 0 ++ .short 406 ++ .short 454 ++ .short 0 ++ .short 409 ++ .short 457 ++ .short 0 ++ .short 412 ++ .short 460 ++ .short 0 ++ .short 415 ++ .short 463 ++ .short 0 ++ .short 418 ++ .short 466 ++ .short 0 ++ .short 421 ++ .short 469 ++ .short 0 ++ .short 424 ++ .short 472 ++ .short 0 ++ .short 427 ++ .short 475 ++ .short 0 ++ .short 430 ++ .short 478 ++ .short 0 ++ .short 433 ++ .short 481 ++ .short 0 ++ .short 436 ++ .short 484 ++ .short 0 ++ .short 439 ++ .short 487 ++ .short 0 ++ .short 442 ++ .short 490 ++ .short 0 ++ .short 445 ++ .short 493 ++ .short 0 ++ .short 448 ++ .short 496 ++ .short 0 ++ .short 451 ++ .short 499 ++ .short 0 ++ .short 454 ++ .short 502 ++ .short 0 ++ .short 457 ++ .short 505 ++ .short 0 ++ .short 460 ++ .short 508 ++ .short 0 ++ .short 463 ++ .short 511 ++ .short 0 ++ .short 466 ++ .short 514 ++ .short 0 ++ .short 469 ++ .short 517 ++ .short 0 ++ .short 472 ++ .short 520 ++ .short 0 ++ .short 475 ++ .short 523 ++ .short 0 ++ .short 478 ++ .short 526 ++ .short 0 ++ .short 481 ++ .short 529 ++ .short 0 ++ .short 484 ++ .short 532 ++ .short 0 ++ .short 487 ++ .short 535 ++ .short 0 ++ .short 490 ++ .short 538 ++ .short 0 ++ .short 493 ++ .short 541 ++ .short 0 ++ .short 496 ++ .short 544 ++ .short 0 ++ .short 499 ++ .short 547 ++ .short 0 ++ .short 502 ++ .short 550 ++ .short 0 ++ .short 505 ++ .short 553 ++ .short 0 ++ .short 508 ++ .short 556 ++ .short 0 ++ .short 511 ++ .short 559 ++ .short 0 ++ .short 514 ++ .short 562 ++ .short 0 ++ .short 517 ++ .short 565 ++ .short 0 ++ .short 520 ++ .short 568 ++ .short 0 ++ .short 523 ++ .short 571 ++ .short 0 ++ .short 526 ++ .short 574 ++ .short 0 ++ .short 529 ++ .short 577 ++ .short 0 ++ .short 532 ++ .short 580 ++ .short 0 ++ .short 535 ++ .short 583 ++ .short 0 ++ .short 538 ++ .short 586 ++ .short 0 ++ .short 541 ++ .short 589 ++ .short 0 ++ .short 544 ++ .short 592 ++ .short 0 ++ .short 547 ++ .short 595 ++ .short 0 ++ .short 550 ++ .short 598 ++ .short 0 ++ .short 553 ++ .short 601 ++ .short 0 ++ .short 556 ++ .short 604 ++ .short 0 ++ .short 559 ++ .short 607 ++ .short 0 ++ .short 562 ++ .short 610 ++ .short 0 ++ .short 565 ++ .short 613 ++ .short 0 ++ .short 568 ++ .short 616 ++ .short 0 ++ .short 571 ++ .short 619 ++ .short 0 ++ .short 574 ++ .short 622 ++ .short 0 ++ .short 577 ++ .short 625 ++ .short 0 ++ .short 580 ++ .short 628 ++ .short 0 ++ .short 583 ++ .short 631 ++ .short 0 ++ .short 586 ++ .short 634 ++ .short 0 ++ .short 589 ++ .short 637 ++ .short 0 ++ .short 592 ++ .short 640 ++ .short 0 ++ .short 595 ++ .short 643 ++ .short 0 ++ .short 598 ++ .short 646 ++ .short 0 ++ .short 601 ++ .short 649 ++ .short 0 ++ .short 604 ++ .short 652 ++ .short 0 ++ .short 607 ++ .short 655 ++ .short 0 ++ .short 610 ++ .short 658 ++ .short 0 ++ .short 613 ++ .short 661 ++ .short 0 ++ .short 616 ++ .short 664 ++ .short 0 ++ .short 619 ++ .short 667 ++ .short 0 ++ .short 622 ++ .short 670 ++ .short 0 ++ .short 625 ++ .short 673 ++ .short 0 ++ .short 628 ++ .short 676 ++ .short 0 ++ .short 631 ++ .short 679 ++ .short 0 ++ .short 634 ++ .short 682 ++ .short 0 ++ .short 637 ++ .short 685 ++ .short 0 ++ .short 640 ++ .short 688 ++ .short 0 ++ .short 643 ++ .short 691 ++ .short 0 ++ .short 646 ++ .short 694 ++ .short 0 ++ .short 649 ++ .short 697 ++ .short 0 ++ .short 652 ++ .short 700 ++ .short 0 ++ .short 655 ++ .short 703 ++ .short 0 ++ .short 658 ++ .short 706 ++ .short 0 ++ .short 661 ++ .short 709 ++ .short 0 ++ .short 664 ++ .short 712 ++ .short 0 ++ .short 667 ++ .short 715 ++ .short 0 ++ .short 670 ++ .short 718 ++ .short 0 ++ .short 673 ++ .short 721 ++ .short 0 ++ .short 676 ++ .short 724 ++ .short 0 ++ .short 679 ++ .short 727 ++ .short 0 ++ .short 682 ++ .short 730 ++ .short 0 ++ .short 685 ++ .short 733 ++ .short 0 ++ .short 688 ++ .short 736 ++ .short 0 ++ .short 691 ++ .short 739 ++ .short 0 ++ .short 694 ++ .short 742 ++ .short 0 ++ .short 697 ++ .short 745 ++ .short 0 ++ .short 700 ++ .short 748 ++ .short 0 ++ .short 703 ++ .short 751 ++ .short 0 ++ .short 706 ++ .short 0 ++ .short 709 ++ .short 0 ++ .short 712 ++ .short 0 ++ .short 715 ++ .short 0 ++ .short 718 ++ .short 0 ++ .short 721 ++ .short 0 ++ .short 724 ++ .short 0 ++ .short 727 ++ .short 0 ++ .type tlc_prog_order, %object ++ .size tlc_prog_order, 768 ++tlc_prog_order: ++ .short 1 ++ .short 9 ++ .short 2 ++ .short 17 ++ .short 10 ++ .short 3 ++ .short 25 ++ .short 18 ++ .short 11 ++ .short 33 ++ .short 26 ++ .short 19 ++ .short 41 ++ .short 34 ++ .short 27 ++ .short 49 ++ .short 42 ++ .short 35 ++ .short 57 ++ .short 50 ++ .short 43 ++ .short 65 ++ .short 58 ++ .short 51 ++ .short 73 ++ .short 66 ++ .short 59 ++ .short 81 ++ .short 74 ++ .short 67 ++ .short 89 ++ .short 82 ++ .short 75 ++ .short 97 ++ .short 90 ++ .short 83 ++ .short 105 ++ .short 98 ++ .short 91 ++ .short 113 ++ .short 106 ++ .short 99 ++ .short 121 ++ .short 114 ++ .short 107 ++ .short 129 ++ .short 122 ++ .short 115 ++ .short 137 ++ .short 130 ++ .short 123 ++ .short 145 ++ .short 138 ++ .short 131 ++ .short 153 ++ .short 146 ++ .short 139 ++ .short 161 ++ .short 154 ++ .short 147 ++ .short 169 ++ .short 162 ++ .short 155 ++ .short 177 ++ .short 170 ++ .short 163 ++ .short 185 ++ .short 178 ++ .short 171 ++ .short 193 ++ .short 186 ++ .short 179 ++ .short 201 ++ .short 194 ++ .short 187 ++ .short 209 ++ .short 202 ++ .short 195 ++ .short 217 ++ .short 210 ++ .short 203 ++ .short 225 ++ .short 218 ++ .short 211 ++ .short 233 ++ .short 226 ++ .short 219 ++ .short 241 ++ .short 234 ++ .short 227 ++ .short 249 ++ .short 242 ++ .short 235 ++ .short 257 ++ .short 250 ++ .short 243 ++ .short 265 ++ .short 258 ++ .short 251 ++ .short 273 ++ .short 266 ++ .short 259 ++ .short 281 ++ .short 274 ++ .short 267 ++ .short 289 ++ .short 282 ++ .short 275 ++ .short 297 ++ .short 290 ++ .short 283 ++ .short 305 ++ .short 298 ++ .short 291 ++ .short 313 ++ .short 306 ++ .short 299 ++ .short 321 ++ .short 314 ++ .short 307 ++ .short 329 ++ .short 322 ++ .short 315 ++ .short 337 ++ .short 330 ++ .short 323 ++ .short 345 ++ .short 338 ++ .short 331 ++ .short 353 ++ .short 346 ++ .short 339 ++ .short 361 ++ .short 354 ++ .short 347 ++ .short 369 ++ .short 362 ++ .short 355 ++ .short 377 ++ .short 370 ++ .short 363 ++ .short 385 ++ .short 378 ++ .short 371 ++ .short 393 ++ .short 386 ++ .short 379 ++ .short 401 ++ .short 394 ++ .short 387 ++ .short 409 ++ .short 402 ++ .short 395 ++ .short 417 ++ .short 410 ++ .short 403 ++ .short 425 ++ .short 418 ++ .short 411 ++ .short 433 ++ .short 426 ++ .short 419 ++ .short 441 ++ .short 434 ++ .short 427 ++ .short 449 ++ .short 442 ++ .short 435 ++ .short 457 ++ .short 450 ++ .short 443 ++ .short 465 ++ .short 458 ++ .short 451 ++ .short 473 ++ .short 466 ++ .short 459 ++ .short 481 ++ .short 474 ++ .short 467 ++ .short 489 ++ .short 482 ++ .short 475 ++ .short 497 ++ .short 490 ++ .short 483 ++ .short 505 ++ .short 498 ++ .short 491 ++ .short 513 ++ .short 506 ++ .short 499 ++ .short 521 ++ .short 514 ++ .short 507 ++ .short 529 ++ .short 522 ++ .short 515 ++ .short 537 ++ .short 530 ++ .short 523 ++ .short 545 ++ .short 538 ++ .short 531 ++ .short 553 ++ .short 546 ++ .short 539 ++ .short 561 ++ .short 554 ++ .short 547 ++ .short 569 ++ .short 562 ++ .short 555 ++ .short 577 ++ .short 570 ++ .short 563 ++ .short 585 ++ .short 578 ++ .short 571 ++ .short 593 ++ .short 586 ++ .short 579 ++ .short 601 ++ .short 594 ++ .short 587 ++ .short 609 ++ .short 602 ++ .short 595 ++ .short 617 ++ .short 610 ++ .short 603 ++ .short 625 ++ .short 618 ++ .short 611 ++ .short 633 ++ .short 626 ++ .short 619 ++ .short 641 ++ .short 634 ++ .short 627 ++ .short 649 ++ .short 642 ++ .short 635 ++ .short 657 ++ .short 650 ++ .short 643 ++ .short 665 ++ .short 658 ++ .short 651 ++ .short 673 ++ .short 666 ++ .short 659 ++ .short 681 ++ .short 674 ++ .short 667 ++ .short 689 ++ .short 682 ++ .short 675 ++ .short 697 ++ .short 690 ++ .short 683 ++ .short 705 ++ .short 698 ++ .short 691 ++ .short 713 ++ .short 706 ++ .short 699 ++ .short 721 ++ .short 714 ++ .short 707 ++ .short 729 ++ .short 722 ++ .short 715 ++ .short 737 ++ .short 730 ++ .short 723 ++ .short 745 ++ .short 738 ++ .short 731 ++ .short 753 ++ .short 746 ++ .short 739 ++ .short 761 ++ .short 754 ++ .short 747 ++ .short 769 ++ .short 762 ++ .short 755 ++ .short 777 ++ .short 770 ++ .short 763 ++ .short 785 ++ .short 778 ++ .short 771 ++ .short 793 ++ .short 786 ++ .short 779 ++ .short 801 ++ .short 794 ++ .short 787 ++ .short 809 ++ .short 802 ++ .short 795 ++ .short 817 ++ .short 810 ++ .short 803 ++ .short 825 ++ .short 818 ++ .short 811 ++ .short 833 ++ .short 826 ++ .short 819 ++ .short 841 ++ .short 834 ++ .short 827 ++ .short 849 ++ .short 842 ++ .short 835 ++ .short 857 ++ .short 850 ++ .short 843 ++ .short 865 ++ .short 858 ++ .short 851 ++ .short 873 ++ .short 866 ++ .short 859 ++ .short 881 ++ .short 874 ++ .short 867 ++ .short 889 ++ .short 882 ++ .short 875 ++ .short 897 ++ .short 890 ++ .short 883 ++ .short 905 ++ .short 898 ++ .short 891 ++ .short 913 ++ .short 906 ++ .short 899 ++ .short 921 ++ .short 914 ++ .short 907 ++ .short 929 ++ .short 922 ++ .short 915 ++ .short 937 ++ .short 930 ++ .short 923 ++ .short 945 ++ .short 938 ++ .short 931 ++ .short 953 ++ .short 946 ++ .short 939 ++ .short 961 ++ .short 954 ++ .short 947 ++ .short 969 ++ .short 962 ++ .short 955 ++ .short 977 ++ .short 970 ++ .short 963 ++ .short 985 ++ .short 978 ++ .short 971 ++ .short 993 ++ .short 986 ++ .short 979 ++ .short 1001 ++ .short 994 ++ .short 987 ++ .short 1009 ++ .short 1002 ++ .short 995 ++ .short 1017 ++ .short 1010 ++ .short 1003 ++ .short 1018 ++ .short 1011 ++ .short 1019 ++ .bss ++ .align 6 ++ .set .LANCHOR0,. + 0 ++ .set .LANCHOR3,. + 8184 ++ .type g_flash_slc_mode, %object ++ .size g_flash_slc_mode, 1 ++g_flash_slc_mode: ++ .space 1 ++ .type g_slc_mode_addr2, %object ++ .size g_slc_mode_addr2, 1 ++g_slc_mode_addr2: ++ .space 1 ++ .type g_block_align_addr, %object ++ .size g_block_align_addr, 2 ++g_block_align_addr: ++ .space 2 ++ .type g_lsb_page_tbl, %object ++ .size g_lsb_page_tbl, 1024 ++g_lsb_page_tbl: ++ .space 1024 ++ .type g_nandc_ver, %object ++ .size g_nandc_ver, 1 ++g_nandc_ver: ++ .space 1 ++ .space 3 ++ .type _c_user_data_density, %object ++ .size _c_user_data_density, 4 ++_c_user_data_density: ++ .space 4 ++ .type gp_sblk_list_tbl, %object ++ .size gp_sblk_list_tbl, 4 ++gp_sblk_list_tbl: ++ .space 4 ++ .type gp_flash_info, %object ++ .size gp_flash_info, 4 ++gp_flash_info: ++ .space 4 ++ .type gp_nandc, %object ++ .size gp_nandc, 4 ++gp_nandc: ++ .space 4 ++ .type NANDC_FMCTL, %object ++ .size NANDC_FMCTL, 4 ++NANDC_FMCTL: ++ .space 4 ++ .type NANDC_FMWAIT, %object ++ .size NANDC_FMWAIT, 4 ++NANDC_FMWAIT: ++ .space 4 ++ .type NANDC_FLCTL, %object ++ .size NANDC_FLCTL, 4 ++NANDC_FLCTL: ++ .space 4 ++ .type NANDC_BCHCTL, %object ++ .size NANDC_BCHCTL, 4 ++NANDC_BCHCTL: ++ .space 4 ++ .type NANDC_DLL_CTL_REG0, %object ++ .size NANDC_DLL_CTL_REG0, 4 ++NANDC_DLL_CTL_REG0: ++ .space 4 ++ .type NANDC_DLL_CTL_REG1, %object ++ .size NANDC_DLL_CTL_REG1, 4 ++NANDC_DLL_CTL_REG1: ++ .space 4 ++ .type NANDC_RANDMZ_CFG, %object ++ .size NANDC_RANDMZ_CFG, 4 ++NANDC_RANDMZ_CFG: ++ .space 4 ++ .type NANDC_FMWAIT_SYN, %object ++ .size NANDC_FMWAIT_SYN, 4 ++NANDC_FMWAIT_SYN: ++ .space 4 ++ .type _c_ftl_blk_pre_plane, %object ++ .size _c_ftl_blk_pre_plane, 2 ++_c_ftl_blk_pre_plane: ++ .space 2 ++ .space 2 ++ .type gp_blk_info, %object ++ .size gp_blk_info, 4 ++gp_blk_info: ++ .space 4 ++ .type _c_slc_to_xlc_ec_ratio, %object ++ .size _c_slc_to_xlc_ec_ratio, 2 ++_c_slc_to_xlc_ec_ratio: ++ .space 2 ++ .space 2 ++ .type ftl_sblk_vpn, %object ++ .size ftl_sblk_vpn, 4 ++ftl_sblk_vpn: ++ .space 4 ++ .type gp_ftl_ext_info, %object ++ .size gp_ftl_ext_info, 4 ++gp_ftl_ext_info: ++ .space 4 ++ .type g_retryMode, %object ++ .size g_retryMode, 1 ++g_retryMode: ++ .space 1 ++ .type g_maxRegNum, %object ++ .size g_maxRegNum, 1 ++g_maxRegNum: ++ .space 1 ++ .space 2 ++ .type gp_nand_para_info, %object ++ .size gp_nand_para_info, 4 ++gp_nand_para_info: ++ .space 4 ++ .type g_idb_ecc_bits, %object ++ .size g_idb_ecc_bits, 1 ++g_idb_ecc_bits: ++ .space 1 ++ .type g_nand_max_die, %object ++ .size g_nand_max_die, 1 ++g_nand_max_die: ++ .space 1 ++ .type g_idb_slc_mode_enable, %object ++ .size g_idb_slc_mode_enable, 1 ++g_idb_slc_mode_enable: ++ .space 1 ++ .type g_nand_opt_para, %object ++ .size g_nand_opt_para, 32 ++g_nand_opt_para: ++ .space 32 ++ .type g_flash_toggle_mode_en, %object ++ .size g_flash_toggle_mode_en, 1 ++g_flash_toggle_mode_en: ++ .space 1 ++ .type g_die_cs_idx, %object ++ .size g_die_cs_idx, 8 ++g_die_cs_idx: ++ .space 8 ++ .type g_flash_six_addr, %object ++ .size g_flash_six_addr, 1 ++g_flash_six_addr: ++ .space 1 ++ .type _c_ftl_cs_bits, %object ++ .size _c_ftl_cs_bits, 1 ++_c_ftl_cs_bits: ++ .space 1 ++ .type g_flash_cur_mode, %object ++ .size g_flash_cur_mode, 4 ++g_flash_cur_mode: ++ .space 4 ++ .type g_flash_micron_3d_tlc_flag, %object ++ .size g_flash_micron_3d_tlc_flag, 1 ++g_flash_micron_3d_tlc_flag: ++ .space 1 ++ .type g_flash_ymtc_3d_tlc_flag, %object ++ .size g_flash_ymtc_3d_tlc_flag, 1 ++g_flash_ymtc_3d_tlc_flag: ++ .space 1 ++ .type IDByte, %object ++ .size IDByte, 32 ++IDByte: ++ .space 32 ++ .type g_flash_interface_mode, %object ++ .size g_flash_interface_mode, 1 ++g_flash_interface_mode: ++ .space 1 ++ .type g_nandc_ecc_bits, %object ++ .size g_nandc_ecc_bits, 1 ++g_nandc_ecc_bits: ++ .space 1 ++ .type g_flash_multi_page_prog_en, %object ++ .size g_flash_multi_page_prog_en, 1 ++g_flash_multi_page_prog_en: ++ .space 1 ++ .type nandc_hw_seed, %object ++ .size nandc_hw_seed, 1 ++nandc_hw_seed: ++ .space 1 ++ .type nandc_randomizer_en, %object ++ .size nandc_randomizer_en, 1 ++nandc_randomizer_en: ++ .space 1 ++ .space 3 ++ .type g_nandc_v6_master_info, %object ++ .size g_nandc_v6_master_info, 28 ++g_nandc_v6_master_info: ++ .space 28 ++ .type fill_spare_size, %object ++ .size fill_spare_size, 2 ++fill_spare_size: ++ .space 2 ++ .space 2 ++ .type g_buf, %object ++ .size g_buf, 1536 ++g_buf: ++ .space 1536 ++ .type p_free_buf_head, %object ++ .size p_free_buf_head, 1 ++p_free_buf_head: ++ .space 1 ++ .type free_buf_count, %object ++ .size free_buf_count, 1 ++free_buf_count: ++ .space 1 ++ .type sblk_queue_head, %object ++ .size sblk_queue_head, 1 ++sblk_queue_head: ++ .space 1 ++ .type sblk_read_completed_queue_head, %object ++ .size sblk_read_completed_queue_head, 1 ++sblk_read_completed_queue_head: ++ .space 1 ++ .type sblk_gc_write_completed_queue_head, %object ++ .size sblk_gc_write_completed_queue_head, 1 ++sblk_gc_write_completed_queue_head: ++ .space 1 ++ .type sblk_write_completed_queue_head, %object ++ .size sblk_write_completed_queue_head, 1 ++sblk_write_completed_queue_head: ++ .space 1 ++ .space 2 ++ .type _c_totle_phy_density, %object ++ .size _c_totle_phy_density, 4 ++_c_totle_phy_density: ++ .space 4 ++ .type _c_totle_log_page, %object ++ .size _c_totle_log_page, 4 ++_c_totle_log_page: ++ .space 4 ++ .type free_slc_sblk, %object ++ .size free_slc_sblk, 2 ++free_slc_sblk: ++ .space 2 ++ .type free_xlc_sblk, %object ++ .size free_xlc_sblk, 2 ++free_xlc_sblk: ++ .space 2 ++ .type free_mix_sblk, %object ++ .size free_mix_sblk, 2 ++free_mix_sblk: ++ .space 2 ++ .type slc_data_sblk, %object ++ .size slc_data_sblk, 2 ++slc_data_sblk: ++ .space 2 ++ .type slc_cache_sblk, %object ++ .size slc_cache_sblk, 2 ++slc_cache_sblk: ++ .space 2 ++ .type xlc_data_sblk, %object ++ .size xlc_data_sblk, 2 ++xlc_data_sblk: ++ .space 2 ++ .type write_buf_count, %object ++ .size write_buf_count, 1 ++write_buf_count: ++ .space 1 ++ .type write_commit_count, %object ++ .size write_commit_count, 1 ++write_commit_count: ++ .space 1 ++ .space 2 ++ .type gp_ftl_info, %object ++ .size gp_ftl_info, 4 ++gp_ftl_info: ++ .space 4 ++ .type gc_free_slc_sblk_th, %object ++ .size gc_free_slc_sblk_th, 2 ++gc_free_slc_sblk_th: ++ .space 2 ++ .type gc_tlc_mode_slc_vpn_th, %object ++ .size gc_tlc_mode_slc_vpn_th, 2 ++gc_tlc_mode_slc_vpn_th: ++ .space 2 ++ .type gc_tlc_mode_tlc_vpn_th, %object ++ .size gc_tlc_mode_tlc_vpn_th, 2 ++gc_tlc_mode_tlc_vpn_th: ++ .space 2 ++ .space 2 ++ .type _gc_after_discard_en, %object ++ .size _gc_after_discard_en, 4 ++_gc_after_discard_en: ++ .space 4 ++ .type gc_slc_mode_tlc_vpn_th, %object ++ .size gc_slc_mode_tlc_vpn_th, 2 ++gc_slc_mode_tlc_vpn_th: ++ .space 2 ++ .type gc_slc_mode_vpn_th, %object ++ .size gc_slc_mode_vpn_th, 2 ++gc_slc_mode_vpn_th: ++ .space 2 ++ .type write_buf_head, %object ++ .size write_buf_head, 1 ++write_buf_head: ++ .space 1 ++ .space 3 ++ .type g_gc_info, %object ++ .size g_gc_info, 2204 ++g_gc_info: ++ .space 2204 ++ .type ftl_sblk_vpn_update_id, %object ++ .size ftl_sblk_vpn_update_id, 2 ++ftl_sblk_vpn_update_id: ++ .space 2 ++ .type ftl_sblk_update_list, %object ++ .size ftl_sblk_update_list, 16 ++ftl_sblk_update_list: ++ .space 16 ++ .type _c_ftl_block_addr_log2, %object ++ .size _c_ftl_block_addr_log2, 2 ++_c_ftl_block_addr_log2: ++ .space 2 ++ .type _c_ftl_planes_per_die, %object ++ .size _c_ftl_planes_per_die, 1 ++_c_ftl_planes_per_die: ++ .space 1 ++ .space 3 ++ .type gc_valid_page_ppa, %object ++ .size gc_valid_page_ppa, 4 ++gc_valid_page_ppa: ++ .space 4 ++ .type _c_ftl_nand_type, %object ++ .size _c_ftl_nand_type, 1 ++_c_ftl_nand_type: ++ .space 1 ++ .type _c_ftl_nand_planes_num, %object ++ .size _c_ftl_nand_planes_num, 1 ++_c_ftl_nand_planes_num: ++ .space 1 ++ .type g_flash_3d_mlc_flag, %object ++ .size g_flash_3d_mlc_flag, 1 ++g_flash_3d_mlc_flag: ++ .space 1 ++ .type g_one_pass_program, %object ++ .size g_one_pass_program, 1 ++g_one_pass_program: ++ .space 1 ++ .type gc_page_buf_id, %object ++ .size gc_page_buf_id, 4 ++gc_page_buf_id: ++ .space 4 ++ .type g_flash_3d_tlc_flag, %object ++ .size g_flash_3d_tlc_flag, 1 ++g_flash_3d_tlc_flag: ++ .space 1 ++ .type gc_mode, %object ++ .size gc_mode, 1 ++gc_mode: ++ .space 1 ++ .type _c_ftl_page_pre_blk, %object ++ .size _c_ftl_page_pre_blk, 2 ++_c_ftl_page_pre_blk: ++ .space 2 ++ .type gp_data_slc_data_head, %object ++ .size gp_data_slc_data_head, 4 ++gp_data_slc_data_head: ++ .space 4 ++ .type gc_slc_data_index, %object ++ .size gc_slc_data_index, 2 ++gc_slc_data_index: ++ .space 2 ++ .type gc_slc_cache_index, %object ++ .size gc_slc_cache_index, 2 ++gc_slc_cache_index: ++ .space 2 ++ .type gc_xlc_data_index, %object ++ .size gc_xlc_data_index, 2 ++gc_xlc_data_index: ++ .space 2 ++ .space 2 ++ .type gp_data_slc_cache_head, %object ++ .size gp_data_slc_cache_head, 4 ++gp_data_slc_cache_head: ++ .space 4 ++ .type gp_data_xlc_data_head, %object ++ .size gp_data_xlc_data_head, 4 ++gp_data_xlc_data_head: ++ .space 4 ++ .type _c_ftl_page_pre_slc_blk, %object ++ .size _c_ftl_page_pre_slc_blk, 2 ++_c_ftl_page_pre_slc_blk: ++ .space 2 ++ .type gc_xlc_search_index, %object ++ .size gc_xlc_search_index, 2 ++gc_xlc_search_index: ++ .space 2 ++ .type _min_slc_super_block, %object ++ .size _min_slc_super_block, 2 ++_min_slc_super_block: ++ .space 2 ++ .type _max_xlc_super_block, %object ++ .size _max_xlc_super_block, 2 ++_max_xlc_super_block: ++ .space 2 ++ .type gp_free_slc_head, %object ++ .size gp_free_slc_head, 4 ++gp_free_slc_head: ++ .space 4 ++ .type gp_free_xlc_head, %object ++ .size gp_free_xlc_head, 4 ++gp_free_xlc_head: ++ .space 4 ++ .type gp_free_mix_head, %object ++ .size gp_free_mix_head, 4 ++gp_free_mix_head: ++ .space 4 ++ .type zftl_print_list_count, %object ++ .size zftl_print_list_count, 2 ++zftl_print_list_count: ++ .space 2 ++ .type _c_ftl_block_align_addr, %object ++ .size _c_ftl_block_align_addr, 2 ++_c_ftl_block_align_addr: ++ .space 2 ++ .type _c_ftl_nand_die_num, %object ++ .size _c_ftl_nand_die_num, 1 ++_c_ftl_nand_die_num: ++ .space 1 ++ .space 1 ++ .type lpa_hash, %object ++ .size lpa_hash, 512 ++lpa_hash: ++ .space 512 ++ .space 2 ++ .type ftl_sblk_lpa_tbl, %object ++ .size ftl_sblk_lpa_tbl, 4 ++ftl_sblk_lpa_tbl: ++ .space 4 ++ .type lpa_hash_index, %object ++ .size lpa_hash_index, 4 ++lpa_hash_index: ++ .space 4 ++ .type ftl_vpn_update_count, %object ++ .size ftl_vpn_update_count, 2 ++ftl_vpn_update_count: ++ .space 2 ++ .type _c_ftl_sec_per_page, %object ++ .size _c_ftl_sec_per_page, 1 ++_c_ftl_sec_per_page: ++ .space 1 ++ .space 1 ++ .type ftl_sblk_update_list_offset, %object ++ .size ftl_sblk_update_list_offset, 2 ++ftl_sblk_update_list_offset: ++ .space 2 ++ .type g_flash_micron_3d_tlc_b05a, %object ++ .size g_flash_micron_3d_tlc_b05a, 1 ++g_flash_micron_3d_tlc_b05a: ++ .space 1 ++ .space 1 ++ .type _c_mix_max_xlc_ec_count, %object ++ .size _c_mix_max_xlc_ec_count, 2 ++_c_mix_max_xlc_ec_count: ++ .space 2 ++ .type _c_mix_max_slc_ec_count, %object ++ .size _c_mix_max_slc_ec_count, 2 ++_c_mix_max_slc_ec_count: ++ .space 2 ++ .type read_buf_head, %object ++ .size read_buf_head, 1 ++read_buf_head: ++ .space 1 ++ .type read_buf_count, %object ++ .size read_buf_count, 1 ++read_buf_count: ++ .space 1 ++ .space 2 ++ .type pm_ram_info, %object ++ .size pm_ram_info, 256 ++pm_ram_info: ++ .space 256 ++ .type pm_last_update_ram_id, %object ++ .size pm_last_update_ram_id, 1 ++pm_last_update_ram_id: ++ .space 1 ++ .space 3 ++ .type g_msb_page_tbl, %object ++ .size g_msb_page_tbl, 2048 ++g_msb_page_tbl: ++ .space 2048 ++ .type g_slc_page_num, %object ++ .size g_slc_page_num, 2 ++g_slc_page_num: ++ .space 2 ++ .space 2 ++ .type g_die_addr, %object ++ .size g_die_addr, 32 ++g_die_addr: ++ .space 32 ++ .type g_totle_phy_block, %object ++ .size g_totle_phy_block, 2 ++g_totle_phy_block: ++ .space 2 ++ .space 2 ++ .type pm_force_gc, %object ++ .size pm_force_gc, 4 ++pm_force_gc: ++ .space 4 ++ .type _c_swl_slc_gc_th, %object ++ .size _c_swl_slc_gc_th, 2 ++_c_swl_slc_gc_th: ++ .space 2 ++ .type _c_swl_xlc_gc_th, %object ++ .size _c_swl_xlc_gc_th, 2 ++_c_swl_xlc_gc_th: ++ .space 2 ++ .type _c_max_pm_sblk, %object ++ .size _c_max_pm_sblk, 2 ++_c_max_pm_sblk: ++ .space 2 ++ .space 6 ++ .type power_on_init_jiffies, %object ++ .size power_on_init_jiffies, 8 ++power_on_init_jiffies: ++ .space 8 ++ .type gp_ftl_api, %object ++ .size gp_ftl_api, 4 ++gp_ftl_api: ++ .space 4 ++ .type RK29_NANDC_REG_BASE, %object ++ .size RK29_NANDC_REG_BASE, 4 ++RK29_NANDC_REG_BASE: ++ .space 4 ++ .type ftl_dma32_buffer_size, %object ++ .size ftl_dma32_buffer_size, 4 ++ftl_dma32_buffer_size: ++ .space 4 ++ .type ftl_dma32_buffer, %object ++ .size ftl_dma32_buffer, 4 ++ftl_dma32_buffer: ++ .space 4 ++ .type gc_state, %object ++ .size gc_state, 1 ++gc_state: ++ .space 1 ++ .space 3 ++ .type gc_search_count, %object ++ .size gc_search_count, 4 ++gc_search_count: ++ .space 4 ++ .type gc_slc_mode_slc_vpn_th, %object ++ .size gc_slc_mode_slc_vpn_th, 2 ++gc_slc_mode_slc_vpn_th: ++ .space 2 ++ .space 2 ++ .type gc_lpa_tbl, %object ++ .size gc_lpa_tbl, 4 ++gc_lpa_tbl: ++ .space 4 ++ .type gc_pre_ppa_tbl, %object ++ .size gc_pre_ppa_tbl, 4 ++gc_pre_ppa_tbl: ++ .space 4 ++ .type gc_des_ppa_tbl, %object ++ .size gc_des_ppa_tbl, 4 ++gc_des_ppa_tbl: ++ .space 4 ++ .type g_flash_tmp_page_buffer, %object ++ .size g_flash_tmp_page_buffer, 4 ++g_flash_tmp_page_buffer: ++ .space 4 ++ .type g_nandc_tran_timeout, %object ++ .size g_nandc_tran_timeout, 1 ++g_nandc_tran_timeout: ++ .space 1 ++ .space 3 ++ .type g_flash_tmp_spare_buffer, %object ++ .size g_flash_tmp_spare_buffer, 4 ++g_flash_tmp_spare_buffer: ++ .space 4 ++ .type g_maxRetryCount, %object ++ .size g_maxRetryCount, 1 ++g_maxRetryCount: ++ .space 1 ++ .space 3 ++ .type flash_ddr_tuning_sdr_read_count, %object ++ .size flash_ddr_tuning_sdr_read_count, 4 ++flash_ddr_tuning_sdr_read_count: ++ .space 4 ++ .type flash_read_retry, %object ++ .size flash_read_retry, 4 ++flash_read_retry: ++ .space 4 ++ .type g_flash_spare_buffer, %object ++ .size g_flash_spare_buffer, 4 ++g_flash_spare_buffer: ++ .space 4 ++ .type g_flash_page_buffer, %object ++ .size g_flash_page_buffer, 4 ++g_flash_page_buffer: ++ .space 4 ++ .type write_commit_head, %object ++ .size write_commit_head, 1 ++write_commit_head: ++ .space 1 ++ .space 3 ++ .type ftl_flush_jiffies, %object ++ .size ftl_flush_jiffies, 4 ++ftl_flush_jiffies: ++ .space 4 ++ .type g_flash_multi_page_read_en, %object ++ .size g_flash_multi_page_read_en, 1 ++g_flash_multi_page_read_en: ++ .space 1 ++ .space 3 ++ .type ftl_info_spare, %object ++ .size ftl_info_spare, 4 ++ftl_info_spare: ++ .space 4 ++ .space 16 ++ .type g_ftl_info_blk, %object ++ .size g_ftl_info_blk, 4 ++g_ftl_info_blk: ++ .space 4 ++ .type ftl_info_data_buffer, %object ++ .size ftl_info_data_buffer, 4 ++ftl_info_data_buffer: ++ .space 4 ++ .type ftl_sys_info_first_write, %object ++ .size ftl_sys_info_first_write, 1 ++ftl_sys_info_first_write: ++ .space 1 ++ .type ftl_power_lost_flag, %object ++ .size ftl_power_lost_flag, 1 ++ftl_power_lost_flag: ++ .space 1 ++ .type ftl_ext_info_first_write, %object ++ .size ftl_ext_info_first_write, 1 ++ftl_ext_info_first_write: ++ .space 1 ++ .space 1 ++ .type ftl_ext_info_data_buffer, %object ++ .size ftl_ext_info_data_buffer, 4 ++ftl_ext_info_data_buffer: ++ .space 4 ++ .type ftl_tmp_spare, %object ++ .size ftl_tmp_spare, 4 ++ftl_tmp_spare: ++ .space 4 ++ .type pm_gc_enable, %object ++ .size pm_gc_enable, 4 ++pm_gc_enable: ++ .space 4 ++ .type g_pm_spare, %object ++ .size g_pm_spare, 4 ++g_pm_spare: ++ .space 4 ++ .type pm_first_write, %object ++ .size pm_first_write, 1 ++pm_first_write: ++ .space 1 ++ .space 3 ++ .type g_flash_sys_spare_buffer, %object ++ .size g_flash_sys_spare_buffer, 4 ++g_flash_sys_spare_buffer: ++ .space 4 ++ .type g_flash_blk_info, %object ++ .size g_flash_blk_info, 4 ++g_flash_blk_info: ++ .space 4 ++ .type g_flash_reversd_blks, %object ++ .size g_flash_reversd_blks, 1 ++g_flash_reversd_blks: ++ .space 1 ++ .type g_flash_micron_3d_tlc_b16a, %object ++ .size g_flash_micron_3d_tlc_b16a, 1 ++g_flash_micron_3d_tlc_b16a: ++ .space 1 ++ .type _c_ftl_byte_pre_page, %object ++ .size _c_ftl_byte_pre_page, 2 ++_c_ftl_byte_pre_page: ++ .space 2 ++ .type pm_last_load_ram_id, %object ++ .size pm_last_load_ram_id, 1 ++pm_last_load_ram_id: ++ .space 1 ++ .type _ftl_gc_tag_page_num, %object ++ .size _ftl_gc_tag_page_num, 1 ++_ftl_gc_tag_page_num: ++ .space 1 ++ .space 2 ++ .type _last_read_time, %object ++ .size _last_read_time, 4 ++_last_read_time: ++ .space 4 ++ .type _last_write_time, %object ++ .size _last_write_time, 4 ++_last_write_time: ++ .space 4 ++ .type read_ahead_lpa, %object ++ .size read_ahead_lpa, 4 ++read_ahead_lpa: ++ .space 4 ++ .type _c_totle_data_density, %object ++ .size _c_totle_data_density, 4 ++_c_totle_data_density: ++ .space 4 ++ .type _c_ftl_pm_page_num, %object ++ .size _c_ftl_pm_page_num, 2 ++_c_ftl_pm_page_num: ++ .space 2 ++ .space 2 ++ .type ftl_tmp_buffer, %object ++ .size ftl_tmp_buffer, 4 ++ftl_tmp_buffer: ++ .space 4 ++ .type rk_zftl_enable, %object ++ .size rk_zftl_enable, 1 ++rk_zftl_enable: ++ .space 1 ++ .space 3 ++ .type gLoaderBootInfo, %object ++ .size gLoaderBootInfo, 4 ++gLoaderBootInfo: ++ .space 4 ++ .type RK29_NANDC1_REG_BASE, %object ++ .size RK29_NANDC1_REG_BASE, 4 ++RK29_NANDC1_REG_BASE: ++ .space 4 ++ .type discard_sector_count, %object ++ .size discard_sector_count, 4 ++discard_sector_count: ++ .space 4 ++ .type idb_write_enable, %object ++ .size idb_write_enable, 1 ++idb_write_enable: ++ .space 1 ++ .space 3 ++ .type idb_buf, %object ++ .size idb_buf, 4 ++idb_buf: ++ .space 4 ++ .type idb_last_lba, %object ++ .size idb_last_lba, 4 ++idb_last_lba: ++ .space 4 ++ .type g_idb_buffer, %object ++ .size g_idb_buffer, 4 ++g_idb_buffer: ++ .space 4 ++ .type g_vendor, %object ++ .size g_vendor, 4 ++g_vendor: ++ .space 4 ++ .type SecureBootUnlockTryCount, %object ++ .size SecureBootUnlockTryCount, 4 ++SecureBootUnlockTryCount: ++ .space 4 ++ .type SecureBootCheckOK, %object ++ .size SecureBootCheckOK, 4 ++SecureBootCheckOK: ++ .space 4 ++ .type SecureBootEn, %object ++ .size SecureBootEn, 4 ++SecureBootEn: ++ .space 4 ++ .type gpVendor1Info, %object ++ .size gpVendor1Info, 4 ++gpVendor1Info: ++ .space 4 ++ .type gpVendor0Info, %object ++ .size gpVendor0Info, 4 ++gpVendor0Info: ++ .space 4 ++ .type gSnSectorData, %object ++ .size gSnSectorData, 512 ++gSnSectorData: ++ .space 512 ++ .type gpDrmKeyInfo, %object ++ .size gpDrmKeyInfo, 4 ++gpDrmKeyInfo: ++ .space 4 ++ .type gpBootConfig, %object ++ .size gpBootConfig, 4 ++gpBootConfig: ++ .space 4 ++ .type ftl_low_format_cur_blk, %object ++ .size ftl_low_format_cur_blk, 2 ++ftl_low_format_cur_blk: ++ .space 2 ++ .space 2 ++ .type p_read_ahead_ext_buf, %object ++ .size p_read_ahead_ext_buf, 4 ++p_read_ahead_ext_buf: ++ .space 4 ++ .type _c_ftl_nand_blks_per_die, %object ++ .size _c_ftl_nand_blks_per_die, 2 ++_c_ftl_nand_blks_per_die: ++ .space 2 ++ .type nandc_ecc_sts, %object ++ .size nandc_ecc_sts, 16 ++nandc_ecc_sts: ++ .space 16 ++ .type g_slc_mode_enable, %object ++ .size g_slc_mode_enable, 1 ++g_slc_mode_enable: ++ .space 1 ++ .section .rodata.str1.1,"aMS",%progbits,1 ++.LC0: ++ .ascii "\012!!!!! error @ func:%s - line:%d\012\000" ++.LC1: ++ .ascii "FTL version: 6.0.24 20210716\000" ++.LC2: ++ .ascii "%s\012\000" ++.LC3: ++ .ascii "zftl_debug:0x%x\012\000" ++.LC4: ++ .ascii "...%s enter...\012\000" ++.LC5: ++ .ascii "No.0 FLASH ID: %x %x %x %x %x %x\012\000" ++.LC6: ++ .ascii "DiePerChip: %x\012\000" ++.LC7: ++ .ascii "SectPerPage: %x\012\000" ++.LC8: ++ .ascii "PagePerBlk: %x\012\000" ++.LC9: ++ .ascii "Cell: %x\012\000" ++.LC10: ++ .ascii "PlanePerDie: %x\012\000" ++.LC11: ++ .ascii "BlkPerPlane: %x\012\000" ++.LC12: ++ .ascii "die gap: %x\012\000" ++.LC13: ++ .ascii "lsbMode: %x\012\000" ++.LC14: ++ .ascii "ReadRetryMode: %x\012\000" ++.LC15: ++ .ascii "ecc: %x\012\000" ++.LC16: ++ .ascii "idb ecc: %x\012\000" ++.LC17: ++ .ascii "OptMode: %x\012\000" ++.LC18: ++ .ascii "g_nand_max_die: %x\012\000" ++.LC19: ++ .ascii "Cache read enable: %x\012\000" ++.LC20: ++ .ascii "Cache random read enable: %x\012\000" ++.LC21: ++ .ascii "Cache prog enable: %x\012\000" ++.LC22: ++ .ascii "multi read enable: %x\012\000" ++.LC23: ++ .ascii "multi prog enable: %x\012\000" ++.LC24: ++ .ascii "interleave enable: %x\012\000" ++.LC25: ++ .ascii "read retry enable: %x\012\000" ++.LC26: ++ .ascii "randomizer enable: %x\012\000" ++.LC27: ++ .ascii "SDR enable: %x\012\000" ++.LC28: ++ .ascii "ONFI enable: %x\012\000" ++.LC29: ++ .ascii "TOGGLE enable: %x\012\000" ++.LC30: ++ .ascii "g_flash_slc_mode: %x %x\012\000" ++.LC31: ++ .ascii "MultiPlaneProgCmd: %x %x\012\000" ++.LC32: ++ .ascii "MultiPlaneReadCmd: %x %x\012\000" ++.LC33: ++ .ascii "g_flash_toggle_mode_en: %x\012\000" ++.LC34: ++ .ascii "nand sdr mode %x\012\000" ++.LC35: ++ .ascii "nand ddr mode %x\012\000" ++.LC36: ++ .ascii "No.%d FLASH ID:%x %x %x %x %x %x\012\000" ++.LC37: ++ .ascii "otp:%x %x %x %x\012\000" ++.LC38: ++ .ascii "bad block test:%x %x\012\000" ++.LC39: ++ .ascii "flash_erase_duplane_block %x %x %x\012\000" ++.LC40: ++ .ascii "flash_erase_duplane_block pageadd = %x status = %x\012" ++ .ascii "\000" ++.LC41: ++ .ascii "flash_erase_block %x %x %x\012\000" ++.LC42: ++ .ascii "flash_erase_block %d block = %x status = %x\012\000" ++.LC43: ++ .ascii "erase done: %x\012\000" ++.LC44: ++ .ascii "sblk_queue_head = %d\012\000" ++.LC45: ++ .ascii "sblk_read_completed_queue_head = %d\012\000" ++.LC46: ++ .ascii "sblk_gc_write_completed_queue_head = %d\012\000" ++.LC47: ++ .ascii "sblk_write_completed_queue_head = %d\012\000" ++.LC48: ++ .ascii "p_free_buf_head = %d\012\000" ++.LC49: ++ .ascii "free_buf_count = %d\012\000" ++.LC50: ++ .ascii "buf = %d, next=%d, flag=%d gc_write_flag=%d, lun_st" ++ .ascii "ate=%d, op_status = %d lpa=%x, ppa=%x\012\000" ++.LC51: ++ .ascii "flash_mask_bad_block %d %d\012\000" ++.LC52: ++ .ascii "zftl_debug\000" ++.LC53: ++ .ascii "FLASH ID: %x %x %x %x %x %x\012\000" ++.LC54: ++ .ascii "density: %d MB\012\000" ++.LC55: ++ .ascii "device density: %d MB\012\000" ++.LC56: ++ .ascii "FTL INFO:\012\000" ++.LC57: ++ .ascii "max_lpn = 0x%x\012\000" ++.LC58: ++ .ascii "density = 0x%x\012\000" ++.LC59: ++ .ascii "slc vpn = 0x%x\012\000" ++.LC60: ++ .ascii "xlc vpn = 0x%x\012\000" ++.LC61: ++ .ascii "free slc blk = 0x%x\012\000" ++.LC62: ++ .ascii "free xlc blk = 0x%x\012\000" ++.LC63: ++ .ascii "free mix blk = 0x%x\012\000" ++.LC64: ++ .ascii "slc data blk = 0x%x\012\000" ++.LC65: ++ .ascii "slc cache blk = 0x%x\012\000" ++.LC66: ++ .ascii "xlc data blk = 0x%x\012\000" ++.LC67: ++ .ascii "free buf = %d, %d, %d\012\000" ++.LC68: ++ .ascii "bad blk = %d %d\012\000" ++.LC69: ++ .ascii "TBW = %d MB\012\000" ++.LC70: ++ .ascii "TBR = %d MB\012\000" ++.LC71: ++ .ascii "POC = %d\012\000" ++.LC72: ++ .ascii "PLC = %d\012\000" ++.LC73: ++ .ascii "sys run time = %d S\012\000" ++.LC74: ++ .ascii "slc mode = %x %x %x\012\000" ++.LC75: ++ .ascii "prog err = %d\012\000" ++.LC76: ++ .ascii "read err = %d\012\000" ++.LC77: ++ .ascii "GC XLC page = %d\012\000" ++.LC78: ++ .ascii "GC SLC page = %d\012\000" ++.LC79: ++ .ascii "discard page = 0x%x\012\000" ++.LC80: ++ .ascii "version = %d\012\000" ++.LC81: ++ .ascii "acblk = 0x%x %d %d\012\000" ++.LC82: ++ .ascii "tmblk = 0x%x %d %d\012\000" ++.LC83: ++ .ascii "gcblk = 0x%x %d %d\012\000" ++.LC84: ++ .ascii "slc ec = %d, %d, %d, %d, %d\012\000" ++.LC85: ++ .ascii "xlc ec = %d, %d, %d, %d, %d\012\000" ++.LC86: ++ .ascii "gc free blk th = %d\012\000" ++.LC87: ++ .ascii "gc vpn th = %d %d %d %d %d\012\000" ++.LC88: ++ .ascii "swl blk = %x %x %x %x\012\000" ++.LC89: ++ .ascii "rf info = %x %x %x %x %x\012\000" ++.LC90: ++ .ascii "gc_add_sblk = %d, %d, %d, %d, %d, %d, %d\012\000" ++.LC91: ++ .ascii "gc_add_sblk = %d, %d, %d\012\000" ++.LC92: ++ .ascii "gc_add_sblk = %d, %d, %d,last update:%d, %d\012\000" ++.LC93: ++ .ascii "gc_add_sblk = %d, %d, %d, %d, %d, %d\012\000" ++.LC94: ++ .ascii "gc_mark_bad_ppa %d %x %x\012\000" ++.LC95: ++ .ascii "status: %x, ppa: %x\012\000" ++.LC96: ++ .ascii "%d gc_free_temp_buf buf id= %x\012\000" ++.LC97: ++ .ascii "gc: b:%x,p:%x,i:%x; free buf=%d %d free slc th: %d\012" ++ .ascii "\000" ++.LC98: ++ .ascii "zftl_get_gc_node cache = %x index = %d vpn = %x\012" ++ .ascii "\000" ++.LC99: ++ .ascii "gc_search_src_blk mode = %x, src mode = %x, count= " ++ .ascii "%d %d\012\000" ++.LC100: ++ .ascii "swl_tlc_free_mini_ec_blk alloc sblk %x\012\000" ++.LC101: ++ .ascii "zftl_get_free_sblk %x %d, %p %d %d\012\000" ++.LC102: ++ .ascii "zftl_gc_get_free_sblk %x %x %x, %d %d %d\012\000" ++.LC103: ++ .ascii "swl_slc_free_mini_ec_blk alloc sblk %x\012\000" ++.LC104: ++ .ascii "list count:%p %d\012\000" ++.LC105: ++ .ascii "%d: node:%x %x %x %x, %d %d %d %d %d\012\000" ++.LC106: ++ .ascii "ftl_vpn_decrement %x = %d, %d\012\000" ++.LC107: ++ .ascii "mask bad block:cs %x %x block: %x %x\012\000" ++.LC108: ++ .ascii "gc_free_bad_sblk 0x%x\012\000" ++.LC109: ++ .ascii "swl_slc_free_mini_ec_blk sblk %x\012\000" ++.LC110: ++ .ascii "gc_free_src_blk = %x, vpn = %d\012\000" ++.LC111: ++ .ascii "gc_free_src_blk %x, %d\012\000" ++.LC112: ++ .ascii "bad blk = %x, %x free blk: s:%x,t:%x,m:%x, data blk" ++ .ascii ":s:%x,%x,t%x vpn: s:%x t:%x, max_vpn: %x\012\000" ++.LC113: ++ .ascii "totle w: %d MB,r: %d MB %d dv:0x%X,poc:%d\012\000" ++.LC114: ++ .ascii "gc xlc page: %d,gc slc page: %d, tmp w: %d MB\012\000" ++.LC115: ++ .ascii "slc ec: %d,%d,%d,%d,%d,tlc ec: %d,%d,%d,%d,%d\012\000" ++.LC116: ++ .ascii "gc th: tlc_tlc: %d tlc_slc: %d slc_slc: %d slc_tlc:" ++ .ascii "%d free_th: %d\012\000" ++.LC117: ++ .ascii "swl : %x %x %x %x %x %x\012\000" ++.LC118: ++ .ascii "ftl prog error =%x, lpa = %x, ppa= %x\012\000" ++.LC119: ++ .ascii "ftl re prog: lpa = %x, ppa= %x\012\000" ++.LC120: ++ .ascii "dump_sblk_queue: %d\012\000" ++.LC121: ++ .ascii "buf id= %d state = %d ppa = %x\012\000" ++.LC122: ++ .ascii "%s %d %d\012\000" ++.LC123: ++ .ascii "gc_static_wearleveling: min blk: %x,sec=%d,xec = %d" ++ .ascii " ,mode=%d, func=%x, bbt=%x vpn = %d\012\000" ++.LC124: ++ .ascii "gc_static_wearleveling: min slc blk: %x,sec=%d,xec " ++ .ascii "= %d ,mode=%d, func=%x, bbt=%x vpn = %d\012\000" ++.LC125: ++ .ascii "gc_static_wearleveling: min tlc blk: %x,sec=%d,xec " ++ .ascii "= %d ,mode=%d, func=%x, bbt=%x vpn = %d\012\000" ++.LC126: ++ .ascii "gc_static_wearleveling: max slc blk: %x,sec=%d,xec " ++ .ascii "= %d ,mode=%d, func=%x, bbt=%x vpn = %d\012\000" ++.LC127: ++ .ascii "gc_static_wearleveling: max xlc blk: %x,sec=%d,xec " ++ .ascii "= %d ,mode=%d, func=%x, bbt=%x vpn = %d\012\000" ++.LC128: ++ .ascii "gc_static_wearleveling: slc blk: %x, tlc blk: %d av" ++ .ascii "g slc ec: %d, avg tlc ec: %d \012\000" ++.LC129: ++ .ascii "gc_static_wearleveling: min slc ec: %x, min tlc ec:" ++ .ascii " %d max slc ec: %d, max tlc ec: %d; %d %d\012\000" ++.LC130: ++ .ascii "swl add tlc gc = %x, %d, %d, %d, %d, %d\012\000" ++.LC131: ++ .ascii "swl add slc gc = %x, %d, %d, %d, %d, %d\012\000" ++.LC132: ++ .ascii "free blk vpn error: %x %x\012\000" ++.LC133: ++ .ascii "GC PM block %x %x %x %d\012\000" ++.LC134: ++ .ascii "ftl_free_no_use_map_blk %x %x %x %d\012\000" ++.LC135: ++ .ascii "...%d @ %s\012\000" ++.LC136: ++ .ascii "...%s enter... %p\012\000" ++.LC137: ++ .ascii "0:%x %x %x %x %x\012\000" ++.LC138: ++ .ascii "g_nandc_ver...%d\012\000" ++.LC139: ++ .ascii "rk_ftl_de_init %x\012\000" ++.LC140: ++ .ascii "\0013\000" ++.LC141: ++ .ascii "otp error! %d\000" ++.LC142: ++ .ascii "rr\000" ++.LC143: ++ .ascii "flash_abort_clear = %d\012\000" ++.LC144: ++ .ascii "%d mtrans_cnt = %d page_num = %d\012\000" ++.LC145: ++ .ascii "%d flReg.d32=%x %x\012\000" ++.LC146: ++ .ascii "nandc:\000" ++.LC147: ++ .ascii "nandc_xfer_done read error %x\012\000" ++.LC148: ++ .ascii "dqs data abort %x\012\000" ++.LC149: ++ .ascii "dqs data timeout %x\012\000" ++.LC150: ++ .ascii "xfer error %x\012\000" ++.LC151: ++ .ascii "MT %d row=%x,last status %d,status = %d\012\000" ++.LC152: ++ .ascii "MT RR %d row=%x,count %d,status=%d\012\000" ++.LC153: ++ .ascii "toshiba SRR %d row=%x, status=%d\012\000" ++.LC154: ++ .ascii "toshiba TRR %d row=%x, status=%d\012\000" ++.LC155: ++ .ascii "toshiba RR %d row=%x,count %d,status=%d\012\000" ++.LC156: ++ .ascii "YMTC RR %d row=%x,count %d,status=%d\012\000" ++.LC157: ++ .ascii "samsung SRR %d row=%x, status=%d\012\000" ++.LC158: ++ .ascii "samsung TRR %d row=%x, status=%d\012\000" ++.LC159: ++ .ascii "samsung RR %d row=%x,count %d,status=%d\012\000" ++.LC160: ++ .ascii "hynix RR %d row=%x, count %d, status=%d\012\000" ++.LC161: ++ .ascii "%d flash_ddr_tuning_read %x ecc=%d\012\000" ++.LC162: ++ .ascii "sync para %d\012\000" ++.LC163: ++ .ascii "DDR mode Read error %x %x\012\000" ++.LC164: ++ .ascii "SDR mode Read %x %x ecc:%x\012\000" ++.LC165: ++ .ascii "flash_read_page_en %x %x %x %x\012\000" ++.LC166: ++ .ascii "flash_read_page_en %x %x error_ecc %d %d\012\000" ++.LC167: ++ .ascii "flash_get_last_written_page: %x %x %x\012\000" ++.LC168: ++ .ascii "flash_prog_page page_addr = %x status = %x\012\000" ++.LC169: ++ .ascii "flash_prog_page %x %x %x\012\000" ++.LC170: ++ .ascii "ymtc_flash_tlc_page_prog page_addr = %x status = %x" ++ .ascii "\012\000" ++.LC171: ++ .ascii "sblk_mlc_dump_prog wl_addr= %x ppa = %x ppa = %x\012" ++ .ascii "\000" ++.LC172: ++ .ascii "flash_complete_page_read %x %x error_ecc %d %d\012\000" ++.LC173: ++ .ascii "read: %x %x %x %x\012\000" ++.LC174: ++ .ascii "0set buf %d,status = %x, ppa = %x lun state = %d\012" ++ .ascii "\000" ++.LC175: ++ .ascii "prog end %x %x error_ecc %d %d\012\000" ++.LC176: ++ .ascii "1set buf %d,status = %x, ppa = %x lun state = %d\012" ++ .ascii "\000" ++.LC177: ++ .ascii "dp prog end %x %x error_ecc %d %d\012\000" ++.LC178: ++ .ascii "sblk_prog_page ppa = %x, count = %d\012\000" ++.LC179: ++ .ascii "err: ppa = %x, status = %x, %x %x spare: %x %x %x %" ++ .ascii "x\012\000" ++.LC180: ++ .ascii "flash_prog_page_en:%x %x %x\012\000" ++.LC181: ++ .ascii "w d:\000" ++.LC182: ++ .ascii "w s:\000" ++.LC183: ++ .ascii "spare\000" ++.LC184: ++ .ascii "data\000" ++.LC185: ++ .ascii "write error: %x\012\000" ++.LC186: ++ .ascii "g_ftl_info_blk blk = %x, page = %x version = %d\012" ++ .ascii "\000" ++.LC187: ++ .ascii "%d %x @%d %x\012\000" ++.LC188: ++ .ascii "ftl_info_blk_init %d %d %x\012\000" ++.LC189: ++ .ascii "ftl info hash %x error\012\000" ++.LC190: ++ .ascii "ink flag: %x\012\000" ++.LC191: ++ .ascii "%s %d %d %x %x\012\000" ++.LC192: ++ .ascii "ext info hash %x error\012\000" ++.LC193: ++ .ascii "%s %x %x %x\012\000" ++.LC194: ++ .ascii "ftl_sblk_dump_write = %x %d %d %d %d\012\000" ++.LC195: ++ .ascii "blk= %x, page=%x, ppa = %x, status = %x, data:%x %x" ++ .ascii " %x %x, spare: %x %x %x %x\012\000" ++.LC196: ++ .ascii "ftl_sblk_dump_write2 = %x %d %d %d\012\000" ++.LC197: ++ .ascii "ftl_sblk_dump_write = %x %x\012\000" ++.LC198: ++ .ascii "ftl_sblk_dump_write done = %x\012\000" ++.LC199: ++ .ascii "%x: ink_scaned_blk_num %x\012\000" ++.LC200: ++ .ascii "ftl_ink_check_sblk = %x %d %d\012\000" ++.LC201: ++ .ascii "ftl_ink_check_sblk = %x %d %d end\012\000" ++.LC202: ++ .ascii "alloc sblk %x %d\012\000" ++.LC203: ++ .ascii "blk %x is bad block\012\000" ++.LC204: ++ .ascii "pm_alloc_new_blk: %x %x %x %x\012\000" ++.LC205: ++ .ascii "pm_write_page write error: %x\012\000" ++.LC206: ++ .ascii "finfo:\000" ++.LC207: ++ .ascii "flash_info_flush id = %x, page = %x\012\000" ++.LC208: ++ .ascii "sys_info_flush error:%x\012\000" ++.LC209: ++ .ascii "...%d @ %s %d %p\012\000" ++.LC210: ++ .ascii "no sys info %x\012\000" ++.LC211: ++ .ascii "l2p:\000" ++.LC212: ++ .ascii "saved_active_page = %x\012\000" ++.LC213: ++ .ascii "saved_active_plane = %x\012\000" ++.LC214: ++ .ascii "sblk = %x\012\000" ++.LC215: ++ .ascii "phy_blk = %x %x\012\000" ++.LC216: ++ .ascii "num_planes = %x\012\000" ++.LC217: ++ .ascii "recovery blk=%x, page=%x, ppa = %x, status = %x, ha" ++ .ascii "sh:%x\012\000" ++.LC218: ++ .ascii "data:\000" ++.LC219: ++ .ascii "sblk = %x, vpn0 = %d, vpn1 = %d\012\000" ++.LC220: ++ .ascii "dump_write_lpa = %x %x %x %x\012\000" ++.LC221: ++ .ascii "dump write new ppa = %x, last ppa = %x lpa = %x\012" ++ .ascii "\000" ++.LC222: ++ .ascii "dump write = %x %x %x\012\000" ++.LC223: ++ .ascii "dump write hash update = %x %x %x\012\000" ++.LC224: ++ .ascii "free_buf_count: %d\012\000" ++.LC225: ++ .ascii "g_ftl_info_blk blk:0x%x, index:0x%x, page:0x%x\012\000" ++.LC226: ++ .ascii "ftl_ext_info_blk blk:0x%x, page:0x%x\012\000" ++.LC227: ++ .ascii "ac_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page" ++ .ascii "_index:0x%x\012\000" ++.LC228: ++ .ascii "tmp_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, pag" ++ .ascii "e_index:0x%x\012\000" ++.LC229: ++ .ascii "gc_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page" ++ .ascii "_index:0x%x\012\000" ++.LC230: ++ .ascii "lpa:\000" ++.LC231: ++ .ascii "vpn:\000" ++.LC232: ++ .ascii "sblk:\000" ++.LC233: ++ .ascii "lpa_hash:\000" ++.LC234: ++ .ascii "lpa_hash_index:\000" ++.LC235: ++ .ascii "%s w error lpn = %x, max ppa = %d\012\000" ++.LC236: ++ .ascii "region_id = %d, pm_max_region = %d\012\000" ++.LC237: ++ .ascii "load_l2p_region no ppa = %x , %x, all setting 0xff." ++ .ascii "...\012\000" ++.LC238: ++ .ascii "load_l2p_region = %x,%x,%x, %x\012\000" ++.LC239: ++ .ascii "pm_ppa:\000" ++.LC240: ++ .ascii "spare:\000" ++.LC241: ++ .ascii "pm_init posr %x %x %x\012\000" ++.LC242: ++ .ascii "pm_init recovery %x %x %x\012\000" ++.LC243: ++ .ascii "pm_init hash %x error\012\000" ++.LC244: ++ .ascii "pm_log2phys lpn = %d, max lpn = %d\012\000" ++.LC245: ++ .ascii "ppa = %x, status = %x, data:%x %x %x %x, spare: %x " ++ .ascii "%x %x %x\012\000" ++.LC246: ++ .ascii "ppa = %x, status = %x, %x %x spare: %x %x %x %x\012" ++ .ascii "\000" ++.LC247: ++ .ascii "gc_recovery: %x vpn = %x\012\000" ++.LC248: ++ .ascii "gc_update_l2p_map_new sblk %x\012\000" ++.LC249: ++ .ascii "gc_update_l2p_map_new: %x %x %x\012\000" ++.LC250: ++ .ascii "lpa: %x %x %x\012\000" ++.LC251: ++ .ascii "gc_update_l2p_map_new: %x vpn = %x vpn1 = %x done\012" ++ .ascii "\000" ++.LC252: ++ .ascii "gc_scan_src_blk = %x, vpn = %d\012\000" ++.LC253: ++ .ascii "js hash error:%x %x %x\012\000" ++.LC254: ++ .ascii "gc_scan_src_blk = %x, s vpn0 = %d, c vpn1 = %d\012\000" ++.LC255: ++ .ascii "gc_block_vpn_scan = %x, s vpn0 = %d, c vpn1 = %d f:" ++ .ascii "%d\012\000" ++.LC256: ++ .ascii "ftl_sblk_dump = %x %d %d %d %d\012\000" ++.LC257: ++ .ascii "ftl_sblk_dump = %x %x %x %x\012\000" ++.LC258: ++ .ascii "page_addr = %x, lpa=%x vpn = %d\012\000" ++.LC259: ++ .ascii "index= %x, lpa=%x\012\000" ++.LC260: ++ .ascii "block = %x, vpn=%x check vpn = %x\012\000" ++.LC261: ++ .ascii "ftl_read %x %x %x\012\000" ++.LC262: ++ .ascii "ftl_read refresh =%x, lpa = %x, ppa= %x\012\000" ++.LC263: ++ .ascii "id=%d, status = %x, lpa = %x, ppa = %x spare = %x %" ++ .ascii "x %x %x\012\000" ++.LC264: ++ .ascii "zftl debug cmd: %s\012\000" ++.LC265: ++ .ascii "cmd:\000" ++.LC266: ++ .ascii "dumpl2p\000" ++.LC267: ++ .ascii "pm l2p:\000" ++.LC268: ++ .ascii "pm blk:\000" ++.LC269: ++ .ascii "dumppm:\000" ++.LC270: ++ .ascii "p_cmd: %s\012\000" ++.LC271: ++ .ascii "pm ram = %x, %x\012\000" ++.LC272: ++ .ascii "ram:\000" ++.LC273: ++ .ascii "pm:\000" ++.LC274: ++ .ascii "dumpsys\000" ++.LC275: ++ .ascii "dumplist:\000" ++.LC276: ++ .ascii "vpncheck\000" ++.LC277: ++ .ascii "dumpppa:\000" ++.LC278: ++ .ascii "dumpblk:\000" ++.LC279: ++ .ascii "setzdebug:\000" ++.LC280: ++ .ascii "lpa2ppa:\000" ++.LC281: ++ .ascii "lpa: %x--> ppa: %x\012\000" ++.LC282: ++ .ascii "help:\012\000" ++.LC283: ++ .ascii "1. echo dumpl2p > /proc/zftl_debug\012\000" ++.LC284: ++ .ascii "2. echo dumppm:x > /proc/zftl_debug\012\000" ++.LC285: ++ .ascii "3. echo dumpsys > /proc/zftl_debug\012\000" ++.LC286: ++ .ascii "4. echo dumpppa:x > /proc/zftl_debug\012\000" ++.LC287: ++ .ascii "5. echo vpncheck > /proc/zftl_debug\012\000" ++.LC288: ++ .ascii "6. echo setzdebug:x > /proc/zftl_debug\012\000" ++.LC289: ++ .ascii "7. echo dumplist:x > /proc/zftl_debug\012\000" ++.LC290: ++ .ascii "8. echo lpa2ppa:x> /proc/zftl_debug\012\000" ++.LC291: ++ .ascii "ftl_update_l2p_map: %x %x %x\012\000" ++.LC292: ++ .ascii "ftl_update_l2p_map\000" ++.LC293: ++ .ascii "lpa_tbl:\000" ++.LC294: ++ .ascii "sblk %x vpn: %d %d\012\000" ++.LC295: ++ .ascii "error gc_add_sblk: %x\012\000" ++.LC296: ++ .ascii "%d read error: ppa:%x, lpa:%x, status:%x\012\000" ++.LC297: ++ .ascii "gc page in buf: lpa %x ppa = %x pageindex= %x\012\000" ++.LC298: ++ .ascii "gc_do_copy_back: lpa %x des_ppa = %x %x gc_ppa= %x " ++ .ascii "page_index= %d\012\000" ++.LC299: ++ .ascii "gc %d: %d %d %d %d %d %d %d\012\000" ++.LC300: ++ .ascii "GC_STATE_SCAN_ALL_PAGE = %x, vpn0 = %d, vpn1 = %d\012" ++ .ascii "\000" ++.LC301: ++ .ascii "gc free %x, %d\012\000" ++.LC302: ++ .ascii "_c_user_data_density := %d\012\000" ++.LC303: ++ .ascii "_c_totle_phy_density := %d\012\000" ++.LC304: ++ .ascii "_c_totle_log_page := %d\012\000" ++.LC305: ++ .ascii "_c_totle_data_density := %d\012\000" ++.LC306: ++ .ascii "_c_ftl_pm_page_num := %d\012\000" ++.LC307: ++ .ascii "_c_ftl_byte_pre_page := %d\012\000" ++.LC308: ++ .ascii "_c_max_pm_sblk := %d\012\000" ++.LC309: ++ .ascii "_min_slc_super_block := %d\012\000" ++.LC310: ++ .ascii "_max_xlc_super_block := %d\012\000" ++.LC311: ++ .ascii "gp_ftl_ext_info %p %p %p\012\000" ++.LC312: ++ .ascii "flash info size: %d %d %d\012\000" ++.LC313: ++ .ascii "ftl_init %x\012\000" ++.LC314: ++ .ascii "ftlwrite %x %x %x %x\012\000" ++.LC315: ++ .ascii "ftl_discard:(%x, %x, %x, %x)\012\000" ++.LC316: ++ .ascii "id_block_prog_msb_ff_data slc page = %d pageadd=%x " ++ .ascii "%x\012\000" ++.LC317: ++ .ascii "write_idblock fix data %x %x\012\000" ++.LC318: ++ .ascii "idblk:\000" ++.LC319: ++ .ascii "write_idblock totle_sec %x %x\012\000" ++.LC320: ++ .ascii "prog page: %x %x %x, %p %x %x %x\012\000" ++.LC321: ++ .ascii "read page: %x %x %x %x\012\000" ++.LC322: ++ .ascii "wl_lba %p %x %x %x\012\000" ++.LC323: ++ .ascii "return ret = %lx\012\000" ++.LC324: ++ .ascii "\0013vendor storage %x,%x,%x\012\000" +diff --git a/drivers/rk_nand/rk_zftl_arm64.S b/drivers/rk_nand/rk_zftl_arm64.S +new file mode 100644 +index 00000000000..943e3711067 +--- /dev/null ++++ b/drivers/rk_nand/rk_zftl_arm64.S +@@ -0,0 +1,35207 @@ ++/* ++ * 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: 2021-07-16 ++ * function: rk ftl v6 for rockchip soc base on arm v8 to support 3D/2D ++ * TLC and MLC. ++ */ ++ .cpu generic+fp+simd ++ .file "rk_zftl_arm64.S" ++ .text ++ .align 2 ++ .type flash_mem_cmp8, %function ++flash_mem_cmp8: ++ mov x3, 0 ++.L2: ++ mov w4, w3 ++ cmp w3, w2 ++ bcc .L4 ++ mov w0, 0 ++ ret ++.L4: ++ 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 ++ ret ++ .size flash_mem_cmp8, .-flash_mem_cmp8 ++ .align 2 ++ .type slc_phy_page_address_calc, %function ++slc_phy_page_address_calc: ++ adrp x1, .LANCHOR0 ++ add x2, x1, :lo12:.LANCHOR0 ++ ldrb w3, [x1, #:lo12:.LANCHOR0] ++ cbz w3, .L7 ++ ldrb w2, [x2, 1] ++ cbz w2, .L8 ++.L7: ++ add x1, x1, :lo12:.LANCHOR0 ++ ldrh w3, [x1, 2] ++ udiv w2, w0, w3 ++ mul w2, w2, w3 ++ ldrb w3, [x1, 1] ++ sub w0, w0, w2 ++ cbz w3, .L9 ++ add w0, w2, w0, lsl 1 ++ ret ++.L9: ++ add x1, x1, 4 ++ ldrh w0, [x1, w0, uxtw 1] ++ add w0, w0, w2 ++.L8: ++ ret ++ .size slc_phy_page_address_calc, .-slc_phy_page_address_calc ++ .align 2 ++ .global zftl_nandc_get_irq_status ++ .type zftl_nandc_get_irq_status, %function ++zftl_nandc_get_irq_status: ++ adrp x1, .LANCHOR0+1028 ++ ldrb w1, [x1, #:lo12:.LANCHOR0+1028] ++ cmp w1, 9 ++ bne .L17 ++ ldr w0, [x0, 296] ++ ret ++.L17: ++ ldr w0, [x0, 372] ++ ret ++ .size zftl_nandc_get_irq_status, .-zftl_nandc_get_irq_status ++ .section .text.unlikely,"ax",@progbits ++ .align 2 ++ .type isxdigit, %function ++isxdigit: ++ and w1, w0, -33 ++ sub w1, w1, #65 ++ cmp w1, 25 ++ bls .L21 ++ sub w0, w0, #48 ++ cmp w0, 9 ++ cset w0, ls ++ ret ++.L21: ++ mov w0, 1 ++ ret ++ .size isxdigit, .-isxdigit ++ .text ++ .align 2 ++ .global zftl_get_density ++ .type zftl_get_density, %function ++zftl_get_density: ++ cbnz w0, .L23 ++ adrp x0, .LANCHOR0+1032 ++ ldr w0, [x0, #:lo12:.LANCHOR0+1032] ++ ret ++.L23: ++ cmp w0, 4 ++ cset w0, cc ++ lsl w0, w0, 13 ++ ret ++ .size zftl_get_density, .-zftl_get_density ++ .align 2 ++ .type _list_remove_node, %function ++_list_remove_node: ++ stp x29, x30, [sp, -64]! ++ and w1, w1, 65535 ++ mov w4, 6 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x3, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ umull x21, w1, w4 ++ mov w1, 65535 ++ ldr x23, [x3, 1040] ++ add x20, x23, x21 ++ ldrh w4, [x23, x21] ++ ldrh w3, [x20, 2] ++ cmp w4, w1 ++ ldr x1, [x0] ++ bne .L27 ++ cmp w3, w4 ++ bne .L27 ++ cmp x20, x1 ++ bne .L26 ++.L27: ++ mov x22, x0 ++ mov x24, x2 ++ mov w0, 65535 ++ cmp w3, w0 ++ bne .L29 ++ cmp x20, x1 ++ beq .L29 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ mov w2, 202 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L29: ++ ldr x0, [x22] ++ ldrh w3, [x23, x21] ++ cmp x20, x0 ++ mov w0, 65535 ++ bne .L30 ++ cmp w3, w0 ++ bne .L31 ++ str xzr, [x22] ++.L32: ++ mov w0, -1 ++ strh w0, [x23, x21] ++ strh w0, [x20, 2] ++ ldrh w0, [x24] ++ sub w0, w0, #1 ++ strh w0, [x24] ++.L26: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L31: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, 6 ++ ldr x0, [x19, 1040] ++ umaddl x3, w3, w1, x0 ++ mov w0, -1 ++ str x3, [x22] ++ strh w0, [x3, 2] ++ b .L32 ++.L30: ++ cmp w3, w0 ++ ldrh w0, [x20, 2] ++ bne .L33 ++ cmp w0, w3 ++ beq .L32 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, 6 ++ mov w2, -1 ++ umull x0, w0, w1 ++ ldr x1, [x19, 1040] ++.L35: ++ strh w2, [x1, x0] ++ b .L32 ++.L33: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, 6 ++ ldr x2, [x19, 1040] ++ umaddl x3, w3, w1, x2 ++ strh w0, [x3, 2] ++ ldrh w0, [x20, 2] ++ ldrh w2, [x23, x21] ++ umull x0, w0, w1 ++ ldr x1, [x19, 1040] ++ b .L35 ++ .size _list_remove_node, .-_list_remove_node ++ .align 2 ++ .type hynix_set_rr_para, %function ++hynix_set_rr_para: ++ stp x29, x30, [sp, -64]! ++ adrp x3, .LANCHOR0 ++ add x3, x3, :lo12:.LANCHOR0 ++ and w1, w1, 255 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w0, w0, 255 ++ str x23, [sp, 48] ++ stp x19, x20, [sp, 16] ++ ldr x2, [x3, 1048] ++ ldr x19, [x3, 1056] ++ add x23, x2, 128 ++ add x21, x2, 112 ++ ldrb w22, [x2, 113] ++ ldrb w2, [x2, 112] ++ cmp w2, 8 ++ mov x2, 32 ++ umaddl x1, w1, w22, x2 ++ beq .L37 ++ mov w2, 160 ++ umaddl x1, w2, w0, x1 ++.L37: ++ ubfiz x0, x0, 8, 8 ++ add x21, x21, x1 ++ add x19, x19, x0 ++ mov x20, 0 ++ mov w0, 54 ++ str w0, [x19, 2056] ++.L39: ++ cmp w22, w20, uxtb ++ bhi .L40 ++ 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 ++.L40: ++ ldrb w0, [x23, x20] ++ str w0, [x19, 2052] ++ mov x0, 600 ++ bl __const_udelay ++ ldrsb w0, [x21, x20] ++ add x20, x20, 1 ++ str w0, [x19, 2048] ++ b .L39 ++ .size hynix_set_rr_para, .-hynix_set_rr_para ++ .align 2 ++ .type zftl_debug_proc_open, %function ++zftl_debug_proc_open: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ mov x19, x1 ++ bl PDE_DATA ++ mov x2, x0 ++ adrp x1, zftl_debug_proc_show ++ mov x0, x19 ++ add x1, x1, :lo12:zftl_debug_proc_show ++ bl single_open ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size zftl_debug_proc_open, .-zftl_debug_proc_open ++ .align 2 ++ .type zftl_debug_proc_show, %function ++zftl_debug_proc_show: ++ stp x29, x30, [sp, -32]! ++ adrp x2, .LC1 ++ adrp x1, .LC2 ++ add x2, x2, :lo12:.LC1 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ add x1, x1, :lo12:.LC2 ++ mov x19, x0 ++ bl seq_printf ++ adrp x0, .LANCHOR2 ++ adrp x1, .LC3 ++ add x1, x1, :lo12:.LC3 ++ ldr w2, [x0, #:lo12:.LANCHOR2] ++ mov x0, x19 ++ bl seq_printf ++ ldr x19, [sp, 16] ++ mov w0, 0 ++ ldp x29, x30, [sp], 32 ++ ret ++ .size zftl_debug_proc_show, .-zftl_debug_proc_show ++ .align 2 ++ .global zftl_flash_suspend ++ .type zftl_flash_suspend, %function ++zftl_flash_suspend: ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1028] ++ cmp w1, 9 ++ ldr x1, [x0, 1056] ++ ldr w2, [x1] ++ str w2, [x0, 1064] ++ ldr w2, [x1, 4] ++ str w2, [x0, 1068] ++ bne .L47 ++ ldr w2, [x1, 16] ++ str w2, [x0, 1072] ++ ldr w2, [x1, 32] ++ str w2, [x0, 1076] ++ ldr w2, [x1, 80] ++ str w2, [x0, 1080] ++ ldr w2, [x1, 84] ++ str w2, [x0, 1084] ++ ldr w2, [x1, 520] ++ ldr w1, [x1, 8] ++ str w2, [x0, 1088] ++.L49: ++ str w1, [x0, 1092] ++ ret ++.L47: ++ ldr w2, [x1, 8] ++ str w2, [x0, 1072] ++ ldr w2, [x1, 12] ++ str w2, [x0, 1076] ++ ldr w2, [x1, 304] ++ str w2, [x0, 1080] ++ ldr w2, [x1, 308] ++ str w2, [x0, 1084] ++ ldr w2, [x1, 336] ++ str w2, [x0, 1088] ++ ldr w1, [x1, 344] ++ b .L49 ++ .size zftl_flash_suspend, .-zftl_flash_suspend ++ .align 2 ++ .type nandc_irq_disable, %function ++nandc_irq_disable: ++ adrp x2, .LANCHOR0+1028 ++ ldrb w2, [x2, #:lo12:.LANCHOR0+1028] ++ cmp w2, 9 ++ mov x2, 1 ++ bne .L51 ++ 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] ++ ret ++.L51: ++ 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] ++ ret ++ .size nandc_irq_disable, .-nandc_irq_disable ++ .align 2 ++ .type _insert_free_list, %function ++_insert_free_list: ++ adrp x9, .LANCHOR0 ++ add x3, x9, :lo12:.LANCHOR0 ++ and w1, w1, 65535 ++ ldrh w4, [x3, 1096] ++ cmp w4, w1 ++ bls .L53 ++ ldrh w4, [x2] ++ mov w6, 6 ++ add w4, w4, 1 ++ strh w4, [x2] ++ umull x10, w1, w6 ++ mov w2, -1 ++ ldr x11, [x3, 1040] ++ add x5, x11, x10 ++ strh w2, [x5, 2] ++ strh w2, [x11, x10] ++ ldr x2, [x0] ++ cbnz x2, .L55 ++.L60: ++ str x5, [x0] ++ ret ++.L55: ++ ldr x8, [x3, 1104] ++ ubfiz x7, x1, 2, 16 ++ ldrh w13, [x3, 1112] ++ mov w15, 65535 ++ ldr x14, [x3, 1040] ++ ldr w4, [x8, x7] ++ sub x3, x2, x14 ++ ldrh w7, [x8, x7] ++ asr x3, x3, 1 ++ and w7, w7, 2047 ++ ubfx x4, x4, 11, 8 ++ madd w4, w13, w4, w7 ++ mov x7, -6148914691236517206 ++ movk x7, 0xaaab, lsl 0 ++ and w4, w4, 65535 ++ mul x3, x3, x7 ++ mov w7, w6 ++ and w3, w3, 65535 ++.L58: ++ ubfiz x12, x3, 2, 16 ++ ldr w6, [x8, x12] ++ ldrh w12, [x8, x12] ++ ubfx x6, x6, 11, 8 ++ and w12, w12, 2047 ++ madd w6, w13, w6, w12 ++ cmp w4, w6, uxth ++ bls .L56 ++ ldrh w6, [x2] ++ cmp w6, w15 ++ bne .L57 ++ strh w3, [x5, 2] ++ strh w1, [x2] ++ ret ++.L57: ++ umaddl x2, w6, w7, x14 ++ mov w3, w6 ++ b .L58 ++.L56: ++ ldrh w4, [x2, 2] ++ strh w4, [x5, 2] ++ strh w3, [x11, x10] ++ ldr x3, [x0] ++ cmp x2, x3 ++ bne .L59 ++ strh w1, [x2, 2] ++ b .L60 ++.L59: ++ ldrh w0, [x2, 2] ++ add x3, x9, :lo12:.LANCHOR0 ++ mov w4, 6 ++ ldr x3, [x3, 1040] ++ umull x0, w0, w4 ++ strh w1, [x3, x0] ++ strh w1, [x2, 2] ++.L53: ++ ret ++ .size _insert_free_list, .-_insert_free_list ++ .align 2 ++ .type _insert_data_list, %function ++_insert_data_list: ++ adrp x9, .LANCHOR0 ++ add x5, x9, :lo12:.LANCHOR0 ++ and w1, w1, 65535 ++ ldrh w3, [x5, 1096] ++ cmp w3, w1 ++ bls .L83 ++ ldrh w3, [x2] ++ mov w11, 6 ++ add w3, w3, 1 ++ strh w3, [x2] ++ umull x11, w1, w11 ++ mov w2, -1 ++ ldr x13, [x5, 1040] ++ add x10, x13, x11 ++ strh w2, [x10, 2] ++ strh w2, [x13, x11] ++ ldr x2, [x0] ++ cbnz x2, .L64 ++ str x10, [x0] ++ ret ++.L64: ++ stp x29, x30, [sp, -32]! ++ uxtw x4, w1 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ ldr x14, [x5, 1120] ++ ldrh w6, [x10, 4] ++ ldr x12, [x5, 1104] ++ ldrh w15, [x5, 1112] ++ ldrh w8, [x14, x4, lsl 1] ++ lsl x4, x4, 2 ++ ldr w3, [x12, x4] ++ mul w8, w8, w6 ++ ldrh w4, [x12, x4] ++ ubfx x3, x3, 11, 8 ++ and w4, w4, 2047 ++ cbz w8, .L65 ++ madd w3, w15, w3, w4 ++ add w8, w8, w3, uxth ++.L65: ++ add x4, x9, :lo12:.LANCHOR0 ++ mov x5, -6148914691236517206 ++ movk x5, 0xaaab, lsl 0 ++ cmp w6, 0 ++ csinv w8, w8, wzr, ne ++ mov w19, 65535 ++ ldr x16, [x4, 1040] ++ mov w18, 6 ++ ldrh w30, [x4, 1096] ++ sub x3, x2, x16 ++ asr x3, x3, 1 ++ mul x3, x3, x5 ++ mov w5, 0 ++ and w3, w3, 65535 ++.L71: ++ add w5, w5, 1 ++ and w5, w5, 65535 ++ cmp w5, w30 ++ bhi .L61 ++ cmp w1, w3 ++ beq .L61 ++ uxtw x7, w3 ++ ldrh w17, [x2, 4] ++ ldrh w4, [x14, x7, lsl 1] ++ lsl x7, x7, 2 ++ ldr w6, [x12, x7] ++ mul w4, w4, w17 ++ ldrh w7, [x12, x7] ++ ubfx x6, x6, 11, 8 ++ and w7, w7, 2047 ++ cbz w4, .L68 ++ madd w6, w15, w6, w7 ++ add w4, w4, w6, uxth ++.L68: ++ cbz w17, .L69 ++ cmp w8, w4 ++ bls .L69 ++ ldrh w4, [x2] ++ cmp w4, w19 ++ bne .L70 ++ strh w3, [x10, 2] ++ strh w1, [x2] ++.L61: ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L70: ++ umaddl x2, w4, w18, x16 ++ mov w3, w4 ++ b .L71 ++.L69: ++ ldrh w4, [x2, 2] ++ strh w4, [x10, 2] ++ strh w3, [x13, x11] ++ ldr x3, [x0] ++ cmp x2, x3 ++ bne .L72 ++ strh w1, [x2, 2] ++ str x10, [x0] ++ b .L61 ++.L72: ++ ldrh w0, [x2, 2] ++ add x9, x9, :lo12:.LANCHOR0 ++ mov w3, 6 ++ umull x0, w0, w3 ++ ldr x3, [x9, 1040] ++ strh w1, [x3, x0] ++ strh w1, [x2, 2] ++ b .L61 ++.L83: ++ ret ++ .size _insert_data_list, .-_insert_data_list ++ .align 2 ++ .type _list_update_data_list, %function ++_list_update_data_list: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w1, 65535 ++ adrp x1, .LANCHOR0 ++ add x4, x1, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ ldr x3, [x4, 1128] ++ ldrh w5, [x3, 16] ++ cmp w5, w19 ++ beq .L85 ++ mov x20, x1 ++ ldrh w1, [x3, 48] ++ cmp w1, w19 ++ beq .L85 ++ ldrh w1, [x3, 80] ++ cmp w1, w19 ++ beq .L85 ++ mov w23, 6 ++ ldr x25, [x4, 1040] ++ ldr x1, [x0] ++ umull x23, w19, w23 ++ add x24, x25, x23 ++ cmp x24, x1 ++ beq .L85 ++ mov x21, x0 ++ ldrh w0, [x24, 2] ++ mov w1, 65535 ++ mov x22, x2 ++ cmp w0, w1 ++ bne .L89 ++ ldrh w1, [x25, x23] ++ cmp w1, w0 ++ bne .L89 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 24 ++ mov w2, 273 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L89: ++ ldrh w3, [x24, 2] ++ mov w0, 65535 ++ cmp w3, w0 ++ bne .L90 ++ ldrh w0, [x25, x23] ++ cmp w0, w3 ++ beq .L85 ++.L90: ++ add x1, x20, :lo12:.LANCHOR0 ++ ubfiz x2, x19, 1, 16 ++ ldrh w4, [x24, 4] ++ mov x6, -6148914691236517206 ++ movk x6, 0xaaab, lsl 0 ++ mov w5, -1 ++ ldr x0, [x1, 1120] ++ cmp w4, 0 ++ ldr x1, [x1, 1040] ++ ldrh w2, [x0, x2] ++ mul w2, w2, w4 ++ mov w4, 6 ++ umull x3, w3, w4 ++ csel w2, w2, w5, ne ++ asr x4, x3, 1 ++ add x3, x1, x3 ++ mul x4, x4, x6 ++ ldrh w1, [x3, 4] ++ cmp w1, 0 ++ ldrh w0, [x0, x4, lsl 1] ++ mul w0, w0, w1 ++ csel w0, w0, w5, ne ++ cmp w2, w0 ++ bcs .L85 ++ mov x2, x22 ++ mov w1, w19 ++ mov x0, x21 ++ bl _list_remove_node ++ mov x2, x22 ++ mov w1, w19 ++ mov x0, x21 ++ bl _insert_data_list ++.L85: ++ 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 _list_update_data_list, .-_list_update_data_list ++ .section .text.unlikely ++ .align 2 ++ .type rk_simple_strtoull.constprop.33, %function ++rk_simple_strtoull.constprop.33: ++ stp x29, x30, [sp, -16]! ++ mov x3, x0 ++ mov x6, x1 ++ add x29, sp, 0 ++ ldrb w0, [x0] ++ cmp w0, 48 ++ bne .L107 ++ ldrb w0, [x3, 1] ++ add x2, x3, 1 ++ orr w0, w0, 32 ++ and w0, w0, 255 ++ cmp w0, 120 ++ bne .L109 ++ ldrb w0, [x3, 2] ++ bl isxdigit ++ cbz w0, .L109 ++ add x2, x3, 2 ++ mov w4, 16 ++.L97: ++ mov w5, 0 ++.L98: ++ ldrb w3, [x2] ++ mov w0, w3 ++ bl isxdigit ++ cbnz w0, .L99 ++.L105: ++ cbnz x6, .L100 ++.L96: ++ mov w0, w5 ++ ldp x29, x30, [sp], 16 ++ ret ++.L107: ++ mov x2, x3 ++ mov w4, 10 ++ b .L97 ++.L109: ++ mov w4, 8 ++ b .L97 ++.L99: ++ sub w0, w3, #48 ++ cmp w0, 9 ++ bhi .L110 ++.L106: ++ cmp w0, w4 ++ bcs .L105 ++ madd w5, w5, w4, w0 ++ add x2, x2, 1 ++ b .L98 ++.L100: ++ str x2, [x6] ++ b .L96 ++.L110: ++ orr w0, w3, 32 ++ sub w0, w0, #87 ++ b .L106 ++ .size rk_simple_strtoull.constprop.33, .-rk_simple_strtoull.constprop.33 ++ .text ++ .align 2 ++ .type nandc_de_cs.constprop.35, %function ++nandc_de_cs.constprop.35: ++ adrp x0, .LANCHOR0+1056 ++ ldr x1, [x0, #:lo12:.LANCHOR0+1056] ++ ldr w0, [x1] ++ and w0, w0, -256 ++ and w0, w0, -131073 ++ str w0, [x1] ++ ret ++ .size nandc_de_cs.constprop.35, .-nandc_de_cs.constprop.35 ++ .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 x0, 600 ++ bl __const_udelay ++ ldr w0, [x19] ++ ldr x19, [sp, 16] ++ and w0, w0, 255 ++ ldp x29, x30, [sp], 32 ++ 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: ++ stp x29, x30, [sp, -80]! ++ and w1, w1, 255 ++ add w2, w1, 1 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov x21, x0 ++ mov w0, 5 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ adrp x22, .LANCHOR0 ++ umull x2, w2, w0 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ stp x19, x20, [sp, 16] ++ add x25, x0, 48 ++ add x24, x0, 144 ++ add x25, x25, x2 ++ add x24, x24, x2 ++ add x22, x22, :lo12:.LANCHOR0 ++ mov x19, x0 ++ add x23, x0, w1, sxtw ++ mov x20, 0 ++ mov w26, 85 ++.L116: ++ ldrb w0, [x22, 1137] ++ cmp w0, w20 ++ bhi .L120 ++ 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 ++.L120: ++ add x0, x19, 144 ++ str w26, [x21, 8] ++ ldrsb w0, [x20, x0] ++ str w0, [x21, 4] ++ mov x0, 1000 ++ bl __const_udelay ++ ldrb w0, [x22, 1136] ++ cmp w0, 34 ++ bne .L117 ++ ldrsb w0, [x24, x20] ++.L122: ++ add x20, x20, 1 ++ str w0, [x21] ++ b .L116 ++.L117: ++ cmp w0, 35 ++ bne .L119 ++ ldrsb w0, [x25, x20] ++ b .L122 ++.L119: ++ ldrsb w0, [x23, 192] ++ b .L122 ++ .size toshiba_set_rr_para, .-toshiba_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]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x19, 1136] ++ sub w1, w1, #1 ++ and w1, w1, 255 ++ cmp w1, 7 ++ bhi .L123 ++ and w0, w0, 255 ++ ldr x1, [x19, 1048] ++ sxtw x20, w0 ++ add x1, x1, x20 ++ ldrb w1, [x1, 120] ++ cbz w1, .L123 ++ mov w1, 0 ++ bl hynix_set_rr_para ++ ldr x0, [x19, 1048] ++ add x0, x0, x20 ++ strb wzr, [x0, 120] ++.L123: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size hynix_reconfig_rr_para, .-hynix_reconfig_rr_para ++ .align 2 ++ .global nand_flash_print_info ++ .type nand_flash_print_info, %function ++nand_flash_print_info: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ adrp x19, .LANCHOR2 ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L130 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ adrp x0, .LC4 ++ add x1, x1, 200 ++ add x0, x0, :lo12:.LC4 ++ bl printk ++.L130: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L131 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w6, [x0, 6] ++ ldrb w5, [x0, 5] ++ ldrb w4, [x0, 4] ++ ldrb w3, [x0, 3] ++ ldrb w2, [x0, 2] ++ ldrb w1, [x0, 1] ++ adrp x0, .LC5 ++ add x0, x0, :lo12:.LC5 ++ bl printk ++.L131: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L132 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 8] ++ adrp x0, .LC6 ++ add x0, x0, :lo12:.LC6 ++ bl printk ++.L132: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L133 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 9] ++ adrp x0, .LC7 ++ add x0, x0, :lo12:.LC7 ++ bl printk ++.L133: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L134 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 10] ++ adrp x0, .LC8 ++ add x0, x0, :lo12:.LC8 ++ bl printk ++.L134: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L135 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 12] ++ adrp x0, .LC9 ++ add x0, x0, :lo12:.LC9 ++ bl printk ++.L135: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L136 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 13] ++ adrp x0, .LC10 ++ add x0, x0, :lo12:.LC10 ++ bl printk ++.L136: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L137 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 14] ++ adrp x0, .LC11 ++ add x0, x0, :lo12:.LC11 ++ bl printk ++.L137: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L138 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 23] ++ adrp x0, .LC12 ++ add x0, x0, :lo12:.LC12 ++ bl printk ++.L138: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L139 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 18] ++ adrp x0, .LC13 ++ add x0, x0, :lo12:.LC13 ++ bl printk ++.L139: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L140 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 19] ++ adrp x0, .LC14 ++ add x0, x0, :lo12:.LC14 ++ bl printk ++.L140: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L141 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 20] ++ adrp x0, .LC15 ++ add x0, x0, :lo12:.LC15 ++ bl printk ++.L141: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L142 ++ adrp x0, .LANCHOR0+1152 ++ ldrb w1, [x0, #:lo12:.LANCHOR0+1152] ++ adrp x0, .LC16 ++ add x0, x0, :lo12:.LC16 ++ bl printk ++.L142: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L143 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 22] ++ adrp x0, .LC17 ++ add x0, x0, :lo12:.LC17 ++ bl printk ++.L143: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L144 ++ adrp x0, .LANCHOR0+1153 ++ ldrb w1, [x0, #:lo12:.LANCHOR0+1153] ++ adrp x0, .LC18 ++ add x0, x0, :lo12:.LC18 ++ bl printk ++.L144: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L145 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 16] ++ adrp x0, .LC19 ++ add x0, x0, :lo12:.LC19 ++ and w1, w1, 1 ++ bl printk ++.L145: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L146 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 16] ++ adrp x0, .LC20 ++ add x0, x0, :lo12:.LC20 ++ ubfx x1, x1, 1, 1 ++ bl printk ++.L146: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L147 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 16] ++ adrp x0, .LC21 ++ add x0, x0, :lo12:.LC21 ++ ubfx x1, x1, 2, 1 ++ bl printk ++.L147: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L148 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 16] ++ adrp x0, .LC22 ++ add x0, x0, :lo12:.LC22 ++ ubfx x1, x1, 3, 1 ++ bl printk ++.L148: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L149 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 16] ++ adrp x0, .LC23 ++ add x0, x0, :lo12:.LC23 ++ ubfx x1, x1, 4, 1 ++ bl printk ++.L149: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L150 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 16] ++ adrp x0, .LC24 ++ add x0, x0, :lo12:.LC24 ++ ubfx x1, x1, 5, 1 ++ bl printk ++.L150: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L151 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 16] ++ adrp x0, .LC25 ++ add x0, x0, :lo12:.LC25 ++ ubfx x1, x1, 6, 1 ++ bl printk ++.L151: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L152 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 16] ++ adrp x0, .LC26 ++ add x0, x0, :lo12:.LC26 ++ ubfx x1, x1, 7, 1 ++ bl printk ++.L152: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L153 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x0, 17] ++ adrp x0, .LC27 ++ add x0, x0, :lo12:.LC27 ++ and w1, w1, 1 ++ bl printk ++.L153: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L154 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 16] ++ adrp x0, .LC28 ++ add x0, x0, :lo12:.LC28 ++ ubfx x1, x1, 9, 1 ++ bl printk ++.L154: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L155 ++ adrp x0, .LANCHOR0+1144 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1144] ++ ldrh w1, [x0, 16] ++ adrp x0, .LC29 ++ add x0, x0, :lo12:.LC29 ++ ubfx x1, x1, 10, 1 ++ bl printk ++.L155: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L156 ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ ldrb w2, [x1, 1154] ++ ldrb w1, [x0, #:lo12:.LANCHOR0] ++ adrp x0, .LC30 ++ add x0, x0, :lo12:.LC30 ++ bl printk ++.L156: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L157 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrb w2, [x0, 1171] ++ ldrb w1, [x0, 1170] ++ adrp x0, .LC31 ++ add x0, x0, :lo12:.LC31 ++ bl printk ++.L157: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L158 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrb w2, [x0, 1169] ++ ldrb w1, [x0, 1168] ++ adrp x0, .LC32 ++ add x0, x0, :lo12:.LC32 ++ bl printk ++.L158: ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L129 ++ adrp x0, .LANCHOR0+1192 ++ ldrb w1, [x0, #:lo12:.LANCHOR0+1192] ++ adrp x0, .LC33 ++ add x0, x0, :lo12:.LC33 ++ bl printk ++.L129: ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size nand_flash_print_info, .-nand_flash_print_info ++ .align 2 ++ .global timer_delay_ns ++ .type timer_delay_ns, %function ++timer_delay_ns: ++ stp x29, x30, [sp, -16]! ++ uxtw x0, w0 ++ add x29, sp, 0 ++ bl __ndelay ++ ldp x29, x30, [sp], 16 ++ ret ++ .size timer_delay_ns, .-timer_delay_ns ++ .align 2 ++ .global nandc_set_ddr_para ++ .type nandc_set_ddr_para, %function ++nandc_set_ddr_para: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ and w0, w0, 255 ++ ldrb w1, [x2, 1028] ++ ldr x2, [x2, 1056] ++ cmp w1, 9 ++ lsl w1, w0, 16 ++ lsl w0, w0, 8 ++ orr w1, w1, w0 ++ orr w1, w1, 3 ++ bne .L254 ++ str w1, [x2, 80] ++ ret ++.L254: ++ str w1, [x2, 304] ++ 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 x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1028] ++ ldr x0, [x0, 1056] ++ cmp w1, 9 ++ bne .L257 ++ ldr w0, [x0, 80] ++.L259: ++ ubfx x0, x0, 8, 8 ++ ret ++.L257: ++ ldr w0, [x0, 304] ++ b .L259 ++ .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 ++ add x3, x3, :lo12:.LANCHOR0 ++ and w0, w0, 255 ++ tst w0, 6 ++ ldr x2, [x3, 1056] ++ ldr w1, [x2] ++ beq .L261 ++ orr w1, w1, 24576 ++ tst x0, 4 ++ and w1, w1, -32769 ++ ldrb w0, [x3, 1028] ++ orr w1, w1, 196608 ++ mov w3, 8321 ++ orr w4, w1, 32768 ++ csel w1, w4, w1, ne ++ cmp w0, 9 ++ mov w0, 4099 ++ movk w0, 0x10, lsl 16 ++ bne .L263 ++ str w3, [x2, 8] ++ str w0, [x2, 80] ++ mov w0, 38 ++ str w0, [x2, 84] ++ mov w0, 39 ++ str w0, [x2, 84] ++.L264: ++ str w1, [x2] ++ ret ++.L263: ++ str w3, [x2, 344] ++ str w0, [x2, 304] ++ mov w0, 38 ++ str w0, [x2, 308] ++ mov w0, 39 ++ str w0, [x2, 308] ++ b .L264 ++.L261: ++ and w1, w1, -8193 ++ b .L264 ++ .size nandc_set_if_mode, .-nandc_set_if_mode ++ .align 2 ++ .global nandc_cs ++ .type nandc_cs, %function ++nandc_cs: ++ adrp x1, .LANCHOR0+1056 ++ mov w2, 1 ++ lsl w0, w2, w0 ++ ldr x3, [x1, #:lo12:.LANCHOR0+1056] ++ ldr w1, [x3] ++ bfi w1, w0, 0, 8 ++ str w1, [x3] ++ ret ++ .size nandc_cs, .-nandc_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, -96]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ stp x23, x24, [sp, 48] ++ mov w24, w2 ++ adrp x2, .LANCHOR0 ++ add x0, x2, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ mov x19, x2 ++ stp x25, x26, [sp, 64] ++ mov w21, w1 ++ str x27, [sp, 80] ++ ldrb w0, [x0, 1153] ++ cmp w0, w20 ++ bhi .L269 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 224 ++ mov w2, 812 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L269: ++ add x2, x19, :lo12:.LANCHOR0 ++ lsr w23, w21, 8 ++ add x20, x2, w20, sxtw ++ lsr w25, w21, 16 ++ lsr w26, w21, 24 ++ and w21, w21, 255 ++ ldr x19, [x2, 1056] ++ mov w27, 120 ++ ldrb w22, [x20, 1196] ++ mov x20, x2 ++ ubfiz x0, x22, 8, 8 ++ add x19, x19, x0 ++.L275: ++ mov w0, w22 ++ bl nandc_cs ++ str w27, [x19, 2056] ++ str w21, [x19, 2052] ++ ldrb w0, [x20, 1204] ++ str w23, [x19, 2052] ++ str w25, [x19, 2052] ++ cbz w0, .L270 ++ str w26, [x19, 2052] ++.L270: ++ mov x0, 600 ++ bl __const_udelay ++ ldr w2, [x19, 2048] ++ and w2, w2, 255 ++ bl nandc_de_cs.constprop.35 ++ bics wzr, w24, w2 ++ bne .L275 ++ cmp w2, 255 ++ beq .L275 ++ mov w0, w2 ++ 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_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: ++ adrp x4, .LANCHOR0 ++ add x7, x4, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ mov w6, 24 ++ mov w5, 1 ++ mov w2, w1 ++ add x29, sp, 0 ++ ldrb w8, [x7, 1205] ++ tst x0, 50331648 ++ sub w6, w6, w8 ++ lsl w3, w5, w6 ++ sub w3, w3, #1 ++ lsl w5, w5, w8 ++ sub w5, w5, #1 ++ asr w6, w0, w6 ++ and w5, w5, w6 ++ and w1, w3, w0 ++ and w5, w5, 255 ++ bne .L280 ++ ldrb w0, [x4, #:lo12:.LANCHOR0] ++ cbz w0, .L281 ++ ldrb w0, [x7, 1] ++ cbz w0, .L280 ++.L281: ++ add x4, x4, :lo12:.LANCHOR0 ++ ldrh w3, [x4, 2] ++ udiv w0, w1, w3 ++ mul w0, w0, w3 ++ sub w3, w1, w0 ++ ldrb w1, [x4, 1] ++ cbz w1, .L282 ++ add w1, w0, w3, lsl 1 ++.L280: ++ mov w0, w5 ++ bl flash_wait_device_ready_raw ++ ldp x29, x30, [sp], 16 ++ ret ++.L282: ++ add x4, x4, 4 ++ ldrh w3, [x4, w3, uxtw 1] ++ add w1, w3, w0 ++ b .L280 ++ .size flash_wait_device_ready, .-flash_wait_device_ready ++ .align 2 ++ .global nandc_de_cs ++ .type nandc_de_cs, %function ++nandc_de_cs: ++ adrp x0, .LANCHOR0+1056 ++ ldr x1, [x0, #:lo12:.LANCHOR0+1056] ++ 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 nandc_wait_flash_ready_no_delay ++ .type nandc_wait_flash_ready_no_delay, %function ++nandc_wait_flash_ready_no_delay: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, 34464 ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ movk w19, 0x1, lsl 16 ++.L293: ++ ldr x0, [x20, 1056] ++ ldr w0, [x0] ++ str w0, [x29, 40] ++ ldr w0, [x29, 40] ++ tbnz x0, 9, .L294 ++ mov x0, 50 ++ bl __const_udelay ++ subs w19, w19, #1 ++ bne .L293 ++ mov w0, -1 ++.L291: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L294: ++ mov w0, 0 ++ b .L291 ++ .size nandc_wait_flash_ready_no_delay, .-nandc_wait_flash_ready_no_delay ++ .align 2 ++ .global zftl_flash_enter_slc_mode ++ .type zftl_flash_enter_slc_mode, %function ++zftl_flash_enter_slc_mode: ++ stp x29, x30, [sp, -48]! ++ adrp x1, .LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and x19, x0, 255 ++ add x0, x1, :lo12:.LANCHOR0 ++ ldrb w1, [x1, #:lo12:.LANCHOR0] ++ str x21, [sp, 32] ++ cbz w1, .L297 ++ cmp w1, 1 ++ ldr x20, [x0, 1056] ++ bne .L300 ++ adrp x0, .LANCHOR2+37 ++ ldrb w0, [x0, #:lo12:.LANCHOR2+37] ++ cbz w0, .L297 ++.L316: ++ add x19, x19, 8 ++ add x19, x20, x19, lsl 8 ++ str w0, [x19, 8] ++.L297: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L300: ++ cmp w1, 2 ++ bne .L302 ++ add x0, x0, x19 ++ ldrb w1, [x0, 1208] ++ cbz w1, .L297 ++ adrp x21, .LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR2 ++ strb wzr, [x0, 1208] ++ add x21, x21, 8 ++ ldrb w0, [x21, 29] ++ cbz w0, .L297 ++ bl nandc_wait_flash_ready_no_delay ++ ldrb w0, [x21, 29] ++ b .L316 ++.L302: ++ cmp w1, 3 ++ bne .L297 ++ add x21, x0, w19, sxtw ++ ldrb w0, [x21, 1208] ++ cbz w0, .L297 ++ ubfiz x19, x19, 8, 8 ++ bl nandc_wait_flash_ready_no_delay ++ add x19, x20, x19 ++ mov w0, 239 ++ strb wzr, [x21, 1208] ++ str w0, [x19, 2056] ++ mov w0, 145 ++ str w0, [x19, 2052] ++ mov x0, 500 ++ bl __const_udelay ++ str wzr, [x19, 2048] ++ mov w0, 1 ++ str w0, [x19, 2048] ++ str wzr, [x19, 2048] ++ mov x0, 750 ++ str wzr, [x19, 2048] ++ bl __const_udelay ++ bl nandc_wait_flash_ready_no_delay ++ mov w0, 218 ++ str w0, [x19, 2056] ++ mov x0, 250 ++ bl __const_udelay ++ b .L297 ++ .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: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and x19, x0, 255 ++ adrp x0, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ add x21, x0, :lo12:.LANCHOR0 ++ ldrb w0, [x0, #:lo12:.LANCHOR0] ++ cbz w0, .L317 ++ cmp w0, 1 ++ ldr x20, [x21, 1056] ++ bne .L320 ++ adrp x0, .LANCHOR2+38 ++ ldrb w0, [x0, #:lo12:.LANCHOR2+38] ++ cbz w0, .L317 ++.L338: ++ add x19, x19, 8 ++ add x19, x20, x19, lsl 8 ++ str w0, [x19, 8] ++.L317: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L320: ++ cmp w0, 2 ++ bne .L322 ++ add x21, x21, x19 ++ ldrb w0, [x21, 1208] ++ cbnz w0, .L317 ++ adrp x22, .LANCHOR2 ++ add x22, x22, :lo12:.LANCHOR2 ++ mov w1, 4 ++ add x22, x22, 8 ++ ldrb w0, [x22, 12] ++ cmp w0, 2 ++ csel w0, w0, w1, eq ++ strb w0, [x21, 1208] ++ ldrb w0, [x22, 30] ++ cbz w0, .L317 ++ bl nandc_wait_flash_ready_no_delay ++ ldrb w0, [x22, 30] ++ b .L338 ++.L322: ++ cmp w0, 3 ++ bne .L317 ++ add x21, x21, w19, sxtw ++ ldrb w0, [x21, 1208] ++ cbnz w0, .L317 ++ adrp x22, .LANCHOR2 ++ add x22, x22, :lo12:.LANCHOR2 ++ bl nandc_wait_flash_ready_no_delay ++ ubfiz x19, x19, 8, 8 ++ add x19, x20, x19 ++ mov w1, 4 ++ ldrb w0, [x22, 20] ++ cmp w0, 2 ++ csel w0, w0, w1, eq ++ strb w0, [x21, 1208] ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 145 ++ str w0, [x19, 2052] ++ mov x0, 500 ++ bl __const_udelay ++ ldrb w0, [x22, 15] ++ cmp w0, 9 ++ mov w0, 1 ++ bne .L325 ++ str w0, [x19, 2048] ++.L326: ++ str w0, [x19, 2048] ++ mov x0, 750 ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ bl __const_udelay ++ bl nandc_wait_flash_ready_no_delay ++ mov w0, 223 ++ str w0, [x19, 2056] ++ mov x0, 250 ++ bl __const_udelay ++ b .L317 ++.L325: ++ ldrb w1, [x21, 1208] ++ str w1, [x19, 2048] ++ b .L326 ++ .size zftl_flash_exit_slc_mode, .-zftl_flash_exit_slc_mode ++ .align 2 ++ .global flash_start_page_read ++ .type flash_start_page_read, %function ++flash_start_page_read: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w21, w0, 255 ++ adrp x22, .LANCHOR0 ++ add x0, x22, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ mov w19, 24 ++ stp x23, x24, [sp, 48] ++ mov w23, w1 ++ mov w20, 1 ++ ldrb w1, [x0, 1205] ++ ldrb w0, [x0, 1153] ++ sub w24, w19, w1 ++ lsl w20, w20, w1 ++ sub w20, w20, #1 ++ lsr w1, w23, w24 ++ and w20, w20, w1 ++ and w20, w20, 255 ++ cmp w0, w20 ++ bhi .L340 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 256 ++ mov w2, 1013 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L340: ++ add x5, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x5, 1153] ++ cmp w0, w20 ++ bls .L339 ++ add x20, x5, w20, sxtw ++ mov w19, 1 ++ ubfx x4, x23, 24, 2 ++ lsl w19, w19, w24 ++ sub w19, w19, #1 ++ and w19, w19, w23 ++ ldrb w23, [x20, 1196] ++ ldr x20, [x5, 1056] ++ mov w0, w23 ++ bl nandc_cs ++ cbnz w4, .L342 ++ mov w0, w19 ++ bl slc_phy_page_address_calc ++ mov w19, w0 ++ ldrb w0, [x22, #:lo12:.LANCHOR0] ++ cbz w0, .L343 ++ mov w0, w23 ++ bl zftl_flash_enter_slc_mode ++.L343: ++ add x0, x22, :lo12:.LANCHOR0 ++ ldr x0, [x0, 1144] ++ ldrb w1, [x0, 7] ++ cmp w1, 1 ++ bne .L345 ++ ldrb w0, [x0, 12] ++ cmp w0, 2 ++ bne .L345 ++ sxtw x0, w23 ++ mov w1, 38 ++ add x0, x0, 8 ++ add x0, x20, x0, lsl 8 ++ str w1, [x0, 8] ++.L345: ++ ubfiz x0, x23, 8, 8 ++ and w1, w19, 255 ++ add x0, x20, x0 ++ add x22, x22, :lo12:.LANCHOR0 ++ str wzr, [x0, 2056] ++ str wzr, [x0, 2052] ++ str wzr, [x0, 2052] ++ str w1, [x0, 2052] ++ lsr w1, w19, 8 ++ str w1, [x0, 2052] ++ lsr w1, w19, 16 ++ str w1, [x0, 2052] ++ ldrb w1, [x22, 1204] ++ cbz w1, .L346 ++ lsr w19, w19, 24 ++ str w19, [x0, 2052] ++.L346: ++ str w21, [x0, 2056] ++.L339: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L342: ++ ldr x0, [x5, 1144] ++ ldrb w0, [x0, 12] ++ cmp w0, 3 ++ bne .L344 ++ ldrb w0, [x5, 1212] ++ cbnz w0, .L344 ++ ldrb w0, [x5, 1213] ++ cbnz w0, .L344 ++ sxtw x0, w23 ++ add x0, x0, 8 ++ add x0, x20, x0, lsl 8 ++ str w4, [x0, 8] ++ b .L343 ++.L344: ++ mov w0, w23 ++ bl zftl_flash_exit_slc_mode ++ b .L343 ++ .size flash_start_page_read, .-flash_start_page_read ++ .align 2 ++ .global nandc_wait_flash_ready ++ .type nandc_wait_flash_ready, %function ++nandc_wait_flash_ready: ++ stp x29, x30, [sp, -48]! ++ mov x0, 750 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, 34464 ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ movk w19, 0x1, lsl 16 ++ bl __const_udelay ++.L356: ++ ldr x0, [x20, 1056] ++ ldr w0, [x0] ++ str w0, [x29, 40] ++ ldr w0, [x29, 40] ++ tbnz x0, 9, .L357 ++ mov x0, 50 ++ bl __const_udelay ++ subs w19, w19, #1 ++ bne .L356 ++ mov w0, -1 ++.L354: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L357: ++ mov w0, 0 ++ b .L354 ++ .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 ++ and w19, w1, 255 ++ str w0, [x20, 8] ++ mov w0, 17 ++ str w0, [x20, 4] ++ mov x0, 1000 ++ bl __const_udelay ++ add w1, w19, 1 ++ mov w0, 5 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ umull x1, w1, w0 ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ add x3, x0, 48 ++ add x0, x0, 144 ++ add x3, x3, x1 ++ add x0, x0, x1 ++ mov x1, 0 ++.L361: ++ ldrb w4, [x2, 1137] ++ cmp w4, w1 ++ bhi .L364 ++ bl nandc_wait_flash_ready ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L364: ++ ldrb w4, [x2, 1136] ++ cmp w4, 67 ++ bne .L362 ++ ldrsb w4, [x0, x1] ++.L366: ++ add x1, x1, 1 ++ str w4, [x20] ++ b .L361 ++.L362: ++ ldrsb w4, [x3, x1] ++ b .L366 ++ .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]! ++ and x2, x1, 255 ++ mov x1, 7 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ str x21, [sp, 32] ++ mov w21, 213 ++ mov w0, -119 ++ madd x1, x2, x1, x1 ++ str w21, [x19, 8] ++ str wzr, [x19, 4] ++ str w0, [x19, 4] ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ add x0, x0, 280 ++ 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, w1, uxtb ++ ldrsb w1, [x1, 681] ++ 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, .L372 ++ mov w2, 18 ++ str w2, [x19, 4] ++ mov x2, 7 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x0, x0, 40 ++ 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] ++.L375: ++ str wzr, [x19] ++ bl nandc_wait_flash_ready ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L372: ++ add x0, x0, :lo12:.LANCHOR2 ++ mov w2, 20 ++ add x0, x0, 376 ++ str w2, [x19, 4] ++ ldrb w0, [x0, x1] ++ str w0, [x19] ++ str wzr, [x19] ++ str wzr, [x19] ++ b .L375 ++ .size toshiba_tlc_set_rr_para, .-toshiba_tlc_set_rr_para ++ .align 2 ++ .global ymtc_3d_set_tlc_rr_para ++ .type ymtc_3d_set_tlc_rr_para, %function ++ymtc_3d_set_tlc_rr_para: ++ stp x29, x30, [sp, -48]! ++ and x1, x1, 255 ++ mov x2, 7 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ str x21, [sp, 32] ++ mov w0, 160 ++ mov w21, 239 ++ mul x1, x1, x2 ++ str w21, [x19, 8] ++ str w0, [x19, 4] ++ adrp x0, .LANCHOR1 ++ add x0, x0, :lo12:.LANCHOR1 ++ add x0, x0, 696 ++ add x20, x0, x1 ++ ldrsb w0, [x0, x1] ++ str w0, [x19] ++ ldrsb w0, [x20, 4] ++ str w0, [x19] ++ str wzr, [x19] ++ str wzr, [x19] ++ bl nandc_wait_flash_ready ++ str w21, [x19, 8] ++ mov w0, 161 ++ str w0, [x19, 4] ++ ldrsb w0, [x20, 1] ++ str w0, [x19] ++ ldrsb w0, [x20, 3] ++ str w0, [x19] ++ ldrsb w0, [x20, 5] ++ str w0, [x19] ++ str wzr, [x19] ++ bl nandc_wait_flash_ready ++ str w21, [x19, 8] ++ mov w0, 162 ++ str w0, [x19, 4] ++ ldrsb w0, [x20, 2] ++ str w0, [x19] ++ ldrsb w0, [x20, 6] ++ str w0, [x19] ++ str wzr, [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 ymtc_3d_set_tlc_rr_para, .-ymtc_3d_set_tlc_rr_para ++ .align 2 ++ .global ymtc_3d_set_slc_rr_para ++ .type ymtc_3d_set_slc_rr_para, %function ++ymtc_3d_set_slc_rr_para: ++ stp x29, x30, [sp, -16]! ++ mov w2, 239 ++ and x1, x1, 255 ++ add x29, sp, 0 ++ str w2, [x0, 8] ++ mov w2, 163 ++ str w2, [x0, 4] ++ adrp x2, .LANCHOR1 ++ add x2, x2, :lo12:.LANCHOR1 ++ add x2, x2, 1056 ++ ldrsb w1, [x2, x1] ++ str w1, [x0] ++ str wzr, [x0] ++ str wzr, [x0] ++ str wzr, [x0] ++ bl nandc_wait_flash_ready ++ ldp x29, x30, [sp], 16 ++ ret ++ .size ymtc_3d_set_slc_rr_para, .-ymtc_3d_set_slc_rr_para ++ .align 2 ++ .global flash_start_plane_read ++ .type flash_start_plane_read, %function ++flash_start_plane_read: ++ stp x29, x30, [sp, -96]! ++ mov w3, 24 ++ mov w2, 1 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ add x4, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ ubfx x24, x0, 24, 2 ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldrb w19, [x4, 1205] ++ sub w3, w3, w19 ++ lsl w19, w2, w19 ++ sub w19, w19, #1 ++ lsl w21, w2, w3 ++ sub w21, w21, #1 ++ and w22, w21, w0 ++ lsr w3, w0, w3 ++ ldrb w0, [x4, 1153] ++ and w19, w19, w3 ++ and w19, w19, 255 ++ and w21, w21, w1 ++ cmp w0, w19 ++ bhi .L381 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1072 ++ mov w2, 1148 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L381: ++ add x4, x20, :lo12:.LANCHOR0 ++ add x19, x4, w19, sxtw ++ ldr x25, [x4, 1056] ++ ldrb w23, [x19, 1196] ++ mov w0, w23 ++ bl nandc_cs ++ cbnz w24, .L382 ++ mov w0, w22 ++ bl slc_phy_page_address_calc ++ mov w22, w0 ++ mov w0, w21 ++ bl slc_phy_page_address_calc ++ mov w21, w0 ++ ldrb w0, [x20, #:lo12:.LANCHOR0] ++ cbz w0, .L383 ++ mov w0, w23 ++ bl zftl_flash_enter_slc_mode ++.L383: ++ add x0, x20, :lo12:.LANCHOR0 ++ and x19, x23, 255 ++ and w3, w22, 255 ++ lsr w2, w22, 8 ++ and w28, w21, 255 ++ lsr w27, w21, 8 ++ ldrb w1, [x0, 1176] ++ lsr w26, w21, 16 ++ cmp w1, 1 ++ lsr w1, w22, 16 ++ bne .L385 ++ add x19, x25, x19, lsl 8 ++ ldrb w4, [x0, 1168] ++ ldrb w0, [x0, 1204] ++ str w4, [x19, 2056] ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w3, [x19, 2052] ++ str w2, [x19, 2052] ++ str w1, [x19, 2052] ++ cbz w0, .L386 ++ lsr w22, w22, 24 ++ str w22, [x19, 2052] ++.L386: ++ add x22, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x22, 1169] ++ str w0, [x19, 2056] ++ bl nandc_wait_flash_ready ++ ldr x0, [x22, 1144] ++ ldrb w0, [x0, 12] ++ cmp w0, 3 ++ bne .L387 ++ cbz w24, .L387 ++ str w24, [x19, 2056] ++.L387: ++ str wzr, [x19, 2056] ++ add x20, x20, :lo12:.LANCHOR0 ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w28, [x19, 2052] ++ ldrb w0, [x20, 1204] ++ str w27, [x19, 2052] ++ str w26, [x19, 2052] ++ cbz w0, .L408 ++ lsr w21, w21, 24 ++ str w21, [x19, 2052] ++.L408: ++ mov w0, 48 ++ str w0, [x19, 2056] ++ 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 ++.L382: ++ ldr x0, [x4, 1144] ++ ldrb w0, [x0, 12] ++ cmp w0, 3 ++ bne .L384 ++ ldrb w0, [x4, 1212] ++ cbnz w0, .L384 ++ ldrb w0, [x4, 1213] ++ cbnz w0, .L384 ++ sxtw x0, w23 ++ add x0, x0, 8 ++ add x0, x25, x0, lsl 8 ++ str w24, [x0, 8] ++ b .L383 ++.L384: ++ mov w0, w23 ++ bl zftl_flash_exit_slc_mode ++ b .L383 ++.L385: ++ ldr x0, [x0, 1144] ++ ldrb w4, [x0, 7] ++ cmp w4, 1 ++ bne .L390 ++ ldrb w4, [x0, 12] ++ cmp w4, 2 ++ bne .L390 ++ add x23, x23, 8 ++ mov w4, 38 ++ add x23, x25, x23, lsl 8 ++ str w4, [x23, 8] ++.L390: ++ add x4, x20, :lo12:.LANCHOR0 ++ add x19, x25, x19, lsl 8 ++ ldrb w4, [x4, 1168] ++ str w4, [x19, 2056] ++ str w3, [x19, 2052] ++ str w2, [x19, 2052] ++ str w1, [x19, 2052] ++ ldrb w0, [x0, 12] ++ cmp w0, 3 ++ bne .L391 ++ cbz w24, .L391 ++ str w24, [x19, 2056] ++.L391: ++ add x20, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x20, 1169] ++ str w0, [x19, 2056] ++ str w28, [x19, 2052] ++ str w27, [x19, 2052] ++ str w26, [x19, 2052] ++ b .L408 ++ .size flash_start_plane_read, .-flash_start_plane_read ++ .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 ++ str x25, [sp, 64] ++ adrp x25, .LANCHOR0 ++ add x25, x25, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x19, x20, [sp, 16] ++ mov w21, w0 ++ add x22, x25, 1216 ++ mov x20, x25 ++ stp x23, x24, [sp, 48] ++ mov x24, 0 ++.L422: ++ lsl x0, x24, 3 ++ ldr x19, [x25, 1056] ++ ldrb w23, [x0, x22] ++ cmp w23, 69 ++ beq .L410 ++ add w0, w23, 119 ++ cmp w23, 44 ++ and w1, w0, 255 ++ cset w2, eq ++ cmp w1, 18 ++ bhi .L423 ++ mov x0, 32769 ++ movk x0, 0x4, lsl 16 ++ lsr x0, x0, x1 ++ mvn x0, x0 ++.L411: ++ and w0, w0, 1 ++ eor w0, w0, 1 ++ orr w0, w2, w0 ++ cbz w0, .L412 ++.L410: ++ ldrb w1, [x20, 1248] ++ cmp w21, 1 ++ bne .L413 ++ tbz x1, 0, .L412 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L414 ++ adrp x0, .LC34 ++ add x0, x0, :lo12:.LC34 ++ bl printk ++.L414: ++ add x0, x19, x24, lsl 8 ++ mov w1, 239 ++ cmp w23, 44 ++ str w1, [x0, 2056] ++ mov w1, 137 ++ ccmp w23, w1, 4, ne ++ mov w1, 1 ++ bne .L415 ++.L446: ++ str w1, [x0, 2052] ++ mov w1, 5 ++.L445: ++ str w1, [x0, 2048] ++.L420: ++ str wzr, [x0, 2048] ++ str wzr, [x0, 2048] ++ str wzr, [x0, 2048] ++.L412: ++ add x24, x24, 1 ++ cmp x24, 4 ++ bne .L422 ++ 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 ++.L423: ++ mov x0, 1 ++ b .L411 ++.L415: ++ cmp w23, 155 ++ beq .L446 ++ mov w2, 128 ++ str w2, [x0, 2052] ++ b .L445 ++.L413: ++ tbz x1, 2, .L412 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L418 ++ adrp x0, .LC35 ++ add x0, x0, :lo12:.LC35 ++ bl printk ++.L418: ++ add x0, x19, x24, lsl 8 ++ mov w1, 239 ++ cmp w23, 44 ++ str w1, [x0, 2056] ++ mov w1, 137 ++ ccmp w23, w1, 4, ne ++ bne .L419 ++ mov w1, 1 ++ str w1, [x0, 2052] ++ mov w1, 35 ++ b .L445 ++.L419: ++ cmp w23, 155 ++ bne .L421 ++ mov w1, 1 ++ str w1, [x0, 2052] ++ mov w1, 37 ++ b .L445 ++.L421: ++ mov w1, 128 ++ str w1, [x0, 2052] ++ str wzr, [x0, 2048] ++ b .L420 ++ .size flash_set_interface_mode, .-flash_set_interface_mode ++ .align 2 ++ .type mt_auto_read_calibration_config, %function ++mt_auto_read_calibration_config: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w20, w1 ++ and w19, w0, 255 ++ bl nandc_wait_flash_ready ++ adrp x1, .LANCHOR0+1056 ++ ubfiz x0, x19, 8, 8 ++ ldr x19, [x1, #:lo12:.LANCHOR0+1056] ++ add x19, x19, x0 ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 150 ++ str w0, [x19, 2052] ++ mov x0, 1000 ++ bl __const_udelay ++ str w20, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size mt_auto_read_calibration_config, .-mt_auto_read_calibration_config ++ .align 2 ++ .global flash_reset ++ .type flash_reset, %function ++flash_reset: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR0+1056 ++ ubfiz x0, x0, 8, 8 ++ add x29, sp, 0 ++ ldr x1, [x1, #:lo12:.LANCHOR0+1056] ++ add x0, x0, 2048 ++ add x1, x1, x0 ++ mov w0, 255 ++ str w0, [x1, 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] ++ and w21, w0, 255 ++ adrp x0, .LANCHOR0+1056 ++ stp x19, x20, [sp, 16] ++ mov x19, x1 ++ ldr x20, [x0, #:lo12:.LANCHOR0+1056] ++ mov w0, w21 ++ bl flash_reset ++ mov w0, w21 ++ bl nandc_cs ++ ubfiz x0, x21, 8, 8 ++ add x20, x20, x0 ++ mov w0, 144 ++ str w0, [x20, 2056] ++ mov x0, 1000 ++ str wzr, [x20, 2052] ++ bl __const_udelay ++ 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] ++ bl nandc_de_cs.constprop.35 ++ ldrb w2, [x19] ++ sub w0, w2, #1 ++ and w0, w0, 255 ++ cmp w0, 253 ++ bhi .L451 ++ ldrb w7, [x19, 5] ++ adrp x0, .LC36 ++ ldrb w6, [x19, 4] ++ add w1, w21, 1 ++ ldrb w5, [x19, 3] ++ add x0, x0, :lo12:.LC36 ++ ldrb w4, [x19, 2] ++ ldrb w3, [x19, 1] ++ bl printk ++.L451: ++ 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, -32]! ++ ubfiz x0, x0, 8, 8 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x2 ++ adrp x2, .LANCHOR2+17 ++ ldrb w3, [x2, #:lo12:.LANCHOR2+17] ++ adrp x2, .LANCHOR0+1056 ++ ldr x19, [x2, #:lo12:.LANCHOR0+1056] ++ lsl w3, w3, 9 ++ add x19, x19, x0 ++ and w0, w1, 255 ++ 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 w0, [x19, 2048] ++ strb w0, [x20] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size flash_read_spare, .-flash_read_spare ++ .align 2 ++ .global flash_read_otp_data ++ .type flash_read_otp_data, %function ++flash_read_otp_data: ++ stp x29, x30, [sp, -48]! ++ and w4, w0, 255 ++ adrp x0, .LANCHOR0+1056 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w20, w1 ++ ldr x19, [x0, #:lo12:.LANCHOR0+1056] ++ mov w0, w4 ++ stp x21, x22, [sp, 32] ++ mov x22, x2 ++ bl nandc_cs ++ ubfiz x4, x4, 8, 8 ++ add x19, x19, x4 ++ mov w0, 239 ++ mov w21, 144 ++ str w0, [x19, 2056] ++ mov x0, 250 ++ str w21, [x19, 2052] ++ bl __const_udelay ++ mov w0, 1 ++ str w0, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ bl nandc_wait_flash_ready ++ mov w0, 238 ++ str w0, [x19, 2056] ++ str w21, [x19, 2052] ++ mov w1, w20 ++ adrp x0, .LC37 ++ add x0, x0, :lo12:.LC37 ++ ldr w2, [x19, 2048] ++ ldr w3, [x19, 2048] ++ ldr w4, [x19, 2048] ++ bl printk ++ bl nandc_wait_flash_ready ++ str wzr, [x19, 2056] ++ str wzr, [x19, 2052] ++ and w0, w20, 255 ++ str wzr, [x19, 2052] ++ str w0, [x19, 2052] ++ lsr w0, w20, 8 ++ str w0, [x19, 2052] ++ lsr w20, w20, 16 ++ str w20, [x19, 2052] ++ mov w0, 48 ++ str w0, [x19, 2056] ++ bl nandc_wait_flash_ready ++ mov x0, 0 ++.L457: ++ ldr w1, [x19, 2048] ++ strb w1, [x22, x0] ++ add x0, x0, 1 ++ cmp x0, 16384 ++ bne .L457 ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 144 ++ str w0, [x19, 2052] ++ mov x0, 250 ++ bl __const_udelay ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ bl nandc_de_cs.constprop.35 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size flash_read_otp_data, .-flash_read_otp_data ++ .align 2 ++ .global sandisk_prog_test_bad_block ++ .type sandisk_prog_test_bad_block, %function ++sandisk_prog_test_bad_block: ++ stp x29, x30, [sp, -48]! ++ and x2, x0, 255 ++ mov x0, x2 ++ add x2, x2, 8 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov w22, w1 ++ adrp x1, .LANCHOR0+1056 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ ldr x19, [x1, #:lo12:.LANCHOR0+1056] ++ add x1, x20, :lo12:.LANCHOR2 ++ ldrb w1, [x1, 37] ++ add x2, x19, x2, lsl 8 ++ cbz w1, .L461 ++.L476: ++ ubfiz x0, x0, 8, 8 ++ str w1, [x2, 8] ++ add x19, x19, x0 ++ mov w0, 128 ++ str w0, [x19, 2056] ++ and w0, w22, 255 ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w0, [x19, 2052] ++ lsr w0, w22, 8 ++ str w0, [x19, 2052] ++ lsr w0, w22, 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 x0, 1000 ++ bl __const_udelay ++ ldr w2, [x19, 2048] ++ cmp w2, 255 ++ bne .L463 ++ ldr w2, [x19, 2048] ++.L463: ++ mov w0, 5 ++ ands w21, w2, w0 ++ beq .L464 ++ ldr w0, [x20, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L464 ++ adrp x0, .LC38 ++ mov w1, w22 ++ add x0, x0, :lo12:.LC38 ++ bl printk ++.L464: ++ add x20, x20, :lo12:.LANCHOR2 ++ ldrb w0, [x20, 38] ++ cbz w0, .L460 ++ str w0, [x19, 2056] ++.L460: ++ mov w0, w21 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L461: ++ mov w1, 162 ++ b .L476 ++ .size sandisk_prog_test_bad_block, .-sandisk_prog_test_bad_block ++ .align 2 ++ .global nandc_rdy_status ++ .type nandc_rdy_status, %function ++nandc_rdy_status: ++ adrp x0, .LANCHOR0+1056 ++ sub sp, sp, #16 ++ ldr x0, [x0, #:lo12:.LANCHOR0+1056] ++ ldr w0, [x0] ++ str w0, [sp, 8] ++ ldr w0, [sp, 8] ++ add sp, sp, 16 ++ ubfx x0, x0, 9, 1 ++ ret ++ .size nandc_rdy_status, .-nandc_rdy_status ++ .align 2 ++ .global nandc_bch_sel ++ .type nandc_bch_sel, %function ++nandc_bch_sel: ++ sub sp, sp, #16 ++ str wzr, [sp, 8] ++ ldr w1, [sp, 8] ++ orr w1, w1, 1 ++ str w1, [sp, 8] ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ ldrb w2, [x1, 1028] ++ strb w0, [x1, 1249] ++ cmp w2, 9 ++ bne .L480 ++ ldr x1, [x1, 1056] ++ cmp w0, 70 ++ ldr w2, [sp, 8] ++ str w2, [x1, 16] ++ beq .L486 ++ cmp w0, 60 ++ beq .L487 ++ cmp w0, 40 ++ cset w0, eq ++ add w0, w0, 1 ++.L481: ++ str wzr, [sp] ++ ldr w2, [sp] ++ bfi w2, w0, 25, 3 ++ str w2, [sp] ++ ldr w0, [sp] ++ orr w0, w0, 1 ++ str w0, [sp] ++ ldr w0, [sp] ++ str w0, [x1, 32] ++.L479: ++ add sp, sp, 16 ++ ret ++.L486: ++ mov w0, 0 ++ b .L481 ++.L487: ++ mov w0, 3 ++ b .L481 ++.L480: ++ ldr x2, [x1, 1056] ++ mov w3, 16 ++ ldr w1, [sp, 8] ++ cmp w0, w3 ++ str w1, [x2, 8] ++ str wzr, [sp] ++ ldr w1, [sp] ++ bfi w1, w3, 8, 8 ++ str w1, [sp] ++ ldr w1, [sp] ++ and w1, w1, -262145 ++ str w1, [sp] ++ bne .L483 ++.L490: ++ ldr w0, [sp] ++ and w0, w0, -17 ++ b .L491 ++.L483: ++ cmp w0, 24 ++ bne .L485 ++ ldr w0, [sp] ++ orr w0, w0, 16 ++.L491: ++ str w0, [sp] ++ b .L484 ++.L485: ++ ldr w1, [sp] ++ cmp w0, 40 ++ orr w1, w1, 262144 ++ str w1, [sp] ++ ldr w1, [sp] ++ orr w1, w1, 16 ++ str w1, [sp] ++ beq .L490 ++.L484: ++ ldr w0, [sp] ++ orr w0, w0, 1 ++ str w0, [sp] ++ ldr w0, [sp] ++ str w0, [x2, 12] ++ b .L479 ++ .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, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ add x0, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ ldrb w1, [x0, 1028] ++ ldr w2, [x0, 1064] ++ cmp w1, 9 ++ ldr x1, [x0, 1056] ++ str w2, [x1] ++ ldr x1, [x0, 1056] ++ ldr w2, [x0, 1068] ++ str w2, [x1, 4] ++ ldr w2, [x0, 1072] ++ ldr x1, [x0, 1056] ++ bne .L493 ++ str w2, [x1, 16] ++ ldr w2, [x0, 1076] ++ str w2, [x1, 32] ++ ldr w2, [x0, 1080] ++ str w2, [x1, 80] ++ ldr w2, [x0, 1084] ++ str w2, [x1, 84] ++ ldr w2, [x0, 1088] ++ str w2, [x1, 520] ++ ldr w0, [x0, 1092] ++ str w0, [x1, 8] ++.L495: ++ add x0, x20, :lo12:.LANCHOR0 ++ mov x19, 0 ++ add x23, x0, 1216 ++ add x21, x0, 1208 ++ mov w24, 2 ++.L494: ++ lsl x0, x19, 3 ++ ldrb w0, [x0, x23] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 253 ++ bhi .L496 ++ and w22, w19, 255 ++ mov w0, w22 ++ bl flash_reset ++ strb w24, [x19, x21] ++ mov w0, w22 ++ bl zftl_flash_enter_slc_mode ++.L496: ++ add x19, x19, 1 ++ cmp x19, 4 ++ bne .L494 ++ add x20, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x20, 1192] ++ cbz w0, .L497 ++ 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, 1080] ++ lsr w0, w0, 8 ++ bl nandc_set_ddr_para ++.L497: ++ adrp x0, .LANCHOR2+28 ++ ldrb w0, [x0, #:lo12:.LANCHOR2+28] ++ bl nandc_bch_sel ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L493: ++ str w2, [x1, 8] ++ ldr w2, [x0, 1076] ++ str w2, [x1, 12] ++ ldr w2, [x0, 1080] ++ str w2, [x1, 304] ++ ldr w2, [x0, 1084] ++ str w2, [x1, 308] ++ ldr w2, [x0, 1088] ++ str w2, [x1, 336] ++ ldr w0, [x0, 1092] ++ str w0, [x1, 344] ++ b .L495 ++ .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 ++ str x19, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldr x0, [x19, 1056] ++ bl rk_nandc_rb_irq_flag_init ++ ldrb w1, [x19, 1028] ++ ldr x0, [x19, 1056] ++ cmp w1, 9 ++ bne .L506 ++ ldr w1, [x0, 292] ++ orr w1, w1, 2 ++ str w1, [x0, 292] ++ ldr w1, [x0, 288] ++ orr w1, w1, 2 ++ str w1, [x0, 288] ++.L507: ++ ldr w1, [x0] ++ tbnz x1, 9, .L508 ++ bl wait_for_nand_flash_ready ++.L505: ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L506: ++ ldr w1, [x0, 368] ++ orr w1, w1, 2 ++ str w1, [x0, 368] ++ ldr w1, [x0, 364] ++ orr w1, w1, 2 ++ str w1, [x0, 364] ++ b .L507 ++.L508: ++ mov w1, 1 ++ bl nandc_irq_disable ++ b .L505 ++ .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]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 255 ++ adrp x20, .LANCHOR0 ++ add x0, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ mov w22, w2 ++ stp x25, x26, [sp, 64] ++ mov w21, w3 ++ stp x23, x24, [sp, 48] ++ and w25, w1, 255 ++ ldrb w0, [x0, 1153] ++ cmp w0, w19 ++ bhi .L512 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1096 ++ mov w2, 695 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L512: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1153] ++ cmp w1, w19 ++ bls .L521 ++ add x19, x0, w19, sxtw ++ ldr x26, [x0, 1056] ++ adrp x0, .LANCHOR2 ++ ldrb w23, [x19, 1196] ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ and x19, x23, 255 ++ add x24, x19, 8 ++ add x24, x26, x24, lsl 8 ++ tbz x0, 4, .L514 ++ adrp x0, .LC39 ++ mov w3, w21 ++ mov w2, w22 ++ mov w1, w23 ++ add x0, x0, :lo12:.LC39 ++ bl printk ++.L514: ++ bl nandc_wait_flash_ready ++ mov w0, w23 ++ bl nandc_cs ++ mov w0, w23 ++ cbnz w25, .L515 ++ bl zftl_flash_enter_slc_mode ++.L516: ++ add x19, x26, x19, lsl 8 ++ mov w0, 96 ++ str w0, [x19, 2056] ++ and w0, w22, 255 ++ str w0, [x19, 2052] ++ lsr w0, w22, 8 ++ str w0, [x19, 2052] ++ lsr w0, w22, 16 ++ str w0, [x19, 2052] ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1204] ++ cbz w0, .L517 ++ lsr w0, w22, 24 ++ str w0, [x19, 2052] ++.L517: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1250] ++ cbnz w0, .L522 ++ mov w0, 208 ++ str w0, [x19, 2056] ++ mov w23, 5 ++ bl nandc_wait_flash_ready ++ mov x0, x24 ++ bl flash_read_status ++ and w23, w0, w23 ++.L518: ++ mov w0, 96 ++ add x20, x20, :lo12:.LANCHOR0 ++ str w0, [x19, 2056] ++ and w0, w21, 255 ++ str w0, [x19, 2052] ++ lsr w0, w21, 8 ++ str w0, [x19, 2052] ++ lsr w0, w21, 16 ++ str w0, [x19, 2052] ++ ldrb w0, [x20, 1204] ++ cbz w0, .L519 ++ lsr w3, w21, 24 ++ str w3, [x19, 2052] ++.L519: ++ mov w0, 208 ++ str w0, [x19, 2056] ++ mov w19, 5 ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov x0, x24 ++ bl flash_read_status ++ mov w2, w0 ++ bl nandc_de_cs.constprop.35 ++ and w19, w2, w19 ++ orr w19, w19, w23 ++ cbz w19, .L520 ++ adrp x0, .LC40 ++ mov w1, w22 ++ add x0, x0, :lo12:.LC40 ++ bl printk ++.L520: ++ mov w0, w19 ++.L511: ++ 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 ++.L515: ++ bl zftl_flash_exit_slc_mode ++ b .L516 ++.L522: ++ mov w23, 0 ++ b .L518 ++.L521: ++ mov w0, -1 ++ b .L511 ++ .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, -96]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ mov w23, w2 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ adrp x0, .LANCHOR0 ++ add x2, x0, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ mov w19, 24 ++ stp x25, x26, [sp, 64] ++ and w25, w1, 255 ++ str x27, [sp, 80] ++ mov x24, x0 ++ ldrb w1, [x2, 1205] ++ sub w1, w19, w1 ++ mov w19, 1 ++ lsl w19, w19, w1 ++ ldrb w1, [x2, 1153] ++ sub w19, w19, #1 ++ and w19, w19, w23 ++ cmp w1, w22 ++ bhi .L537 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1128 ++ mov w2, 757 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L537: ++ add x0, x24, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1153] ++ cmp w1, w22 ++ bls .L544 ++ add x1, x0, w22, sxtw ++ ldr x27, [x0, 1056] ++ adrp x0, .LANCHOR2 ++ ldrb w21, [x1, 1196] ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ and x20, x21, 255 ++ add x26, x20, 8 ++ add x26, x27, x26, lsl 8 ++ tbz x0, 4, .L539 ++ adrp x0, .LC41 ++ mov w3, w25 ++ mov w2, w23 ++ mov w1, w21 ++ add x0, x0, :lo12:.LC41 ++ bl printk ++.L539: ++ bl nandc_wait_flash_ready ++ mov w0, w21 ++ bl nandc_cs ++ mov w0, w21 ++ cbnz w25, .L540 ++ bl zftl_flash_enter_slc_mode ++.L541: ++ add x0, x27, x20, lsl 8 ++ mov w1, 96 ++ str w1, [x0, 2056] ++ and w1, w19, 255 ++ str w1, [x0, 2052] ++ lsr w1, w19, 8 ++ str w1, [x0, 2052] ++ lsr w1, w19, 16 ++ str w1, [x0, 2052] ++ add x1, x24, :lo12:.LANCHOR0 ++ ldrb w1, [x1, 1204] ++ cbz w1, .L542 ++ lsr w19, w19, 24 ++ str w19, [x0, 2052] ++.L542: ++ mov w1, 208 ++ str w1, [x0, 2056] ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov x0, x26 ++ bl flash_read_status ++ mov w3, w0 ++ bl nandc_de_cs.constprop.35 ++ mov w0, 5 ++ ands w3, w3, w0 ++ beq .L543 ++ add x0, x24, :lo12:.LANCHOR0 ++ mov w1, w22 ++ ldrh w2, [x0, 2] ++ adrp x0, .LC42 ++ add x0, x0, :lo12:.LC42 ++ udiv w2, w23, w2 ++ bl printk ++ mov w3, -1 ++.L543: ++ mov w0, w3 ++.L536: ++ 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 ++.L540: ++ bl zftl_flash_exit_slc_mode ++ b .L541 ++.L544: ++ mov w0, -1 ++ b .L536 ++ .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, -80]! ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ add x20, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ add x23, x20, 1024 ++ str x25, [sp, 64] ++ mov x24, x20 ++ mov w19, 0 ++ ldrb w1, [x0, 21] ++ ldrh w21, [x0, 22] ++ mul w21, w21, w1 ++ and w21, w21, 65535 ++.L558: ++ ldrb w0, [x20, 1153] ++ cmp w0, w19 ++ bhi .L561 ++ mov w1, 0 ++ adrp x0, .LC43 ++ add x0, x0, :lo12:.LC43 ++ bl printk ++ 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 ++.L561: ++ add x0, x23, w19, sxtw ++ mov w22, 0 ++ ldrb w25, [x0, 172] ++.L559: ++ cmp w21, w22, uxth ++ bhi .L560 ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L558 ++.L560: ++ ldrh w1, [x24, 2] ++ mov w0, w25 ++ mul w1, w1, w22 ++ add w22, w22, 1 ++ bl flash_erase_block ++ b .L559 ++ .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, -80]! ++ and w1, w1, 255 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ str x21, [sp, 32] ++ and w21, w0, 255 ++ mov x0, x2 ++ add x2, x20, :lo12:.LANCHOR0 ++ and w6, w21, 1 ++ ldrb w4, [x2, 1028] ++ cmp w4, 9 ++ add w4, w1, 1 ++ bne .L566 ++ str wzr, [x29, 56] ++ mov w5, 1 ++ ubfx x4, x4, 1, 6 ++ ldr w1, [x29, 56] ++ bfi w1, w6, 1, 1 ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ orr w1, w1, 8 ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ bfi w1, w5, 5, 2 ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ orr w1, w1, 536870912 ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ orr w1, w1, 1024 ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ and w1, w1, -17 ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ bfi w1, w4, 22, 6 ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ orr w1, w1, 128 ++ str w1, [x29, 56] ++ ldrb w1, [x2, 1251] ++ cbz w1, .L567 ++ ldrb w1, [x2, 1252] ++ cbz w1, .L567 ++ ldr w1, [x29, 56] ++ orr w1, w1, 512 ++ str w1, [x29, 56] ++.L567: ++ ldr w1, [x29, 56] ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w2, w21 ++ ubfx x1, x1, 22, 6 ++ str x3, [x20, 1272] ++ lsl w1, w1, 10 ++ str x0, [x20, 1264] ++ bl rknand_dma_map_single ++ str w0, [x20, 1280] ++ ldr w1, [x29, 56] ++ mov w2, w21 ++ ldr x0, [x20, 1272] ++ ubfx x1, x1, 22, 6 ++ lsl w1, w1, 2 ++ bl rknand_dma_map_single ++ str w0, [x20, 1284] ++ mov w1, 1 ++ str w1, [x20, 1288] ++ ldr x1, [x20, 1056] ++ cmp w21, 0 ++ ldr w2, [x20, 1280] ++ str w2, [x1, 52] ++ mov w2, 16 ++ str w0, [x1, 56] ++ ldr w0, [x1, 48] ++ str w0, [x29, 64] ++ ldr w0, [x29, 64] ++ bfi w0, w2, 9, 5 ++ str w0, [x29, 64] ++ mov w2, 2 ++ ldr w0, [x29, 64] ++ orr w0, w0, 448 ++ str w0, [x29, 64] ++ ldr w0, [x29, 64] ++ bfi w0, w2, 3, 3 ++ str w0, [x29, 64] ++ cset w2, eq ++ ldr w0, [x29, 64] ++ orr w0, w0, 4 ++ str w0, [x29, 64] ++ ldr w0, [x29, 64] ++ bfi w0, w2, 1, 1 ++ str w0, [x29, 64] ++ ldrh w2, [x20, 1296] ++ ldr w0, [x29, 64] ++ orr w0, w0, 1 ++ str w0, [x29, 64] ++ ldr w0, [x29, 64] ++ bfi w0, w2, 16, 11 ++ str w0, [x29, 64] ++ ldr w0, [x29, 64] ++ str w0, [x1, 48] ++ ldr w0, [x29, 56] ++ str w0, [x1, 16] ++ ldr w0, [x29, 56] ++ orr w0, w0, 4 ++ str w0, [x29, 56] ++ ldr w0, [x29, 56] ++ str w0, [x1, 16] ++.L565: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 80 ++ ret ++.L566: ++ ldr x5, [x2, 1056] ++ mov w7, 16 ++ ubfx x4, x4, 1, 6 ++ ldr w5, [x5, 12] ++ str w5, [x29, 72] ++ ldr w5, [x29, 72] ++ bfi w5, w7, 8, 8 ++ str w5, [x29, 72] ++ ldr w5, [x29, 72] ++ and w5, w5, -9 ++ str w5, [x29, 72] ++ ldr w5, [x29, 72] ++ and w5, w5, -225 ++ str w5, [x29, 72] ++ str wzr, [x29, 56] ++ ldr w5, [x29, 56] ++ bfi w5, w6, 1, 1 ++ str w5, [x29, 56] ++ mov w6, 1 ++ ldr w5, [x29, 56] ++ orr w5, w5, 8 ++ str w5, [x29, 56] ++ ldr w5, [x29, 56] ++ bfi w5, w6, 5, 2 ++ str w5, [x29, 56] ++ ldr w5, [x29, 56] ++ orr w5, w5, 536870912 ++ str w5, [x29, 56] ++ ldr w5, [x29, 56] ++ orr w5, w5, 1024 ++ str w5, [x29, 56] ++ ldr w5, [x29, 56] ++ and w5, w5, -17 ++ str w5, [x29, 56] ++ ldr w5, [x29, 56] ++ bfi w5, w4, 22, 6 ++ str w5, [x29, 56] ++ cbz w21, .L569 ++ ldrb w4, [x2, 1249] ++ lsr w1, w1, 1 ++ mov w6, 64 ++ mov x5, 0 ++ cmp w4, 25 ++ mov w4, 128 ++ csel w6, w6, w4, cc ++ mov w4, 0 ++.L571: ++ add w7, w6, w4 ++ cmp w1, w5 ++ bgt .L572 ++.L573: ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w2, w21 ++ ldr x1, [x20, 1256] ++ str x1, [x20, 1272] ++ ldr w1, [x29, 56] ++ str x0, [x20, 1264] ++ ubfx x1, x1, 22, 6 ++ lsl w1, w1, 10 ++ bl rknand_dma_map_single ++ ldr w1, [x29, 56] ++ mov w2, w21 ++ str w0, [x20, 1280] ++ ldr x0, [x20, 1272] ++ ubfx x1, x1, 22, 6 ++ lsl w1, w1, 7 ++ bl rknand_dma_map_single ++ str w0, [x20, 1284] ++ mov w0, 1 ++ str w0, [x20, 1288] ++ ldr x0, [x20, 1056] ++ mov w2, 16 ++ ldr w1, [x20, 1280] ++ cmp w21, 0 ++ str w1, [x0, 20] ++ ldr w1, [x20, 1284] ++ str w1, [x0, 24] ++ str wzr, [x29, 64] ++ ldr w1, [x29, 64] ++ bfi w1, w2, 9, 5 ++ str w1, [x29, 64] ++ mov w2, 2 ++ ldr w1, [x29, 64] ++ orr w1, w1, 448 ++ str w1, [x29, 64] ++ ldr w1, [x29, 64] ++ bfi w1, w2, 3, 3 ++ str w1, [x29, 64] ++ cset w2, eq ++ ldr w1, [x29, 64] ++ orr w1, w1, 4 ++ str w1, [x29, 64] ++ ldr w1, [x29, 64] ++ bfi w1, w2, 1, 1 ++ str w1, [x29, 64] ++ ldr w1, [x29, 64] ++ orr w1, w1, 1 ++ str w1, [x29, 64] ++ ldr w1, [x29, 64] ++ str w1, [x0, 16] ++ ldr w1, [x29, 72] ++ str w1, [x0, 12] ++ ldr w1, [x29, 56] ++ str w1, [x0, 8] ++ ldr w1, [x29, 56] ++ orr w1, w1, 4 ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ str w1, [x0, 8] ++ b .L565 ++.L572: ++ ldr x8, [x2, 1256] ++ and x4, x4, 4294967292 ++ ldr w9, [x3, x5, lsl 2] ++ add x5, x5, 1 ++ str w9, [x8, x4] ++ mov w4, w7 ++ b .L571 ++.L569: ++ ldr x1, [x2, 1256] ++ str w6, [x1] ++ b .L573 ++ .size nandc_xfer_start, .-nandc_xfer_start ++ .align 2 ++ .global nandc_set_seed ++ .type nandc_set_seed, %function ++nandc_set_seed: ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ and x0, x0, 127 ++ add x1, x1, 1152 ++ ldrh w1, [x1, x0, lsl 1] ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ orr w2, w1, -1073741824 ++ ldrb w3, [x0, 1252] ++ cmp w3, 0 ++ csel w1, w2, w1, ne ++ ldrb w2, [x0, 1028] ++ ldr x0, [x0, 1056] ++ cmp w2, 9 ++ bne .L584 ++ str w1, [x0, 520] ++ ret ++.L584: ++ str w1, [x0, 336] ++ ret ++ .size nandc_set_seed, .-nandc_set_seed ++ .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 x4, .LANCHOR0 ++ mov x19, x4 ++ ldrb w1, [x4, #:lo12:.LANCHOR0] ++ cbz w1, .L589 ++ add x0, x4, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1154] ++ cbnz w1, .L589 ++ ldrb w0, [x0, 1028] ++ cmp w0, 9 ++ beq .L589 ++ mov w0, 0 ++ bl zftl_flash_exit_slc_mode ++.L589: ++ add x20, x19, :lo12:.LANCHOR0 ++ mov w0, 0 ++ bl hynix_reconfig_rr_para ++ ldrb w0, [x20, 1192] ++ cbz w0, .L590 ++ ldrb w0, [x20, 1248] ++ tbz x0, 0, .L590 ++ mov w0, 1 ++ bl flash_set_interface_mode ++ mov w0, 1 ++ bl nandc_set_if_mode ++ strb wzr, [x20, 1192] ++.L590: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x19, 1252] ++ cbz w0, .L591 ++ mov w0, 0 ++ strb wzr, [x19, 1252] ++ bl nandc_set_seed ++ mov w0, 1 ++ strb w0, [x19, 1252] ++.L591: ++ 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+1252 ++ strb w0, [x1, #:lo12:.LANCHOR0+1252] ++ 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+1056 ++ ubfiz x0, x0, 8, 8 ++ add x0, x0, 2048 ++ ldr x1, [x1, #:lo12:.LANCHOR0+1056] ++ add x0, x1, x0 ++ ret ++ .size nandc_get_chip_if, .-nandc_get_chip_if ++ .align 2 ++ .global buf_reinit ++ .type buf_reinit, %function ++buf_reinit: ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ add x1, x1, 1304 ++ mov w2, 0 ++.L611: ++ and w3, w2, 255 ++ strb wzr, [x1, 2] ++ add w4, w3, 1 ++ strb w3, [x1, 1] ++ strb w4, [x1] ++ add w2, w2, 1 ++ str xzr, [x1, 16] ++ cmp w2, 32 ++ add x1, x1, 64 ++ bne .L611 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w1, -1 ++ strb wzr, [x0, 3352] ++ strb w1, [x0, 3288] ++ strb w2, [x0, 3353] ++ ret ++ .size buf_reinit, .-buf_reinit ++ .align 2 ++ .global buf_add_tail ++ .type buf_add_tail, %function ++buf_add_tail: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ str x21, [sp, 32] ++ mov w0, -1 ++ strb w0, [x1] ++ mov x20, x1 ++ ldrb w1, [x19] ++ cmp w1, 255 ++ bne .L619 ++ ldrb w0, [x20, 1] ++ cmp w0, 255 ++ bne .L615 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1408 ++ mov w2, 74 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L615: ++ ldrb w0, [x20, 1] ++ strb w0, [x19] ++.L613: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L619: ++ adrp x0, .LANCHOR0 ++ add x2, x0, :lo12:.LANCHOR0 ++ add x2, x2, 1304 ++ mov x19, x0 ++.L620: ++ sbfiz x0, x1, 6, 32 ++ mov w21, w1 ++ ldrb w1, [x2, x0] ++ cmp w1, 255 ++ bne .L620 ++ ldrb w0, [x20, 1] ++ cmp w0, 255 ++ bne .L617 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1408 ++ mov w2, 81 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L617: ++ add x0, x19, :lo12:.LANCHOR0 ++ sbfiz x21, x21, 6, 32 ++ add x0, x0, 1304 ++ ldrb w1, [x20, 1] ++ strb w1, [x0, x21] ++ b .L613 ++ .size buf_add_tail, .-buf_add_tail ++ .align 2 ++ .type queue_read_cmd, %function ++queue_read_cmd: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ mov x19, x0 ++ mov w0, 48 ++ ldr w1, [x19, 40] ++ bl flash_start_page_read ++ strb wzr, [x19, 59] ++ mov w0, 1 ++ strb w0, [x19, 58] ++ mov w0, -1 ++ strb w0, [x19] ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov x1, x19 ++ add x0, x0, 3354 ++ bl buf_add_tail ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size queue_read_cmd, .-queue_read_cmd ++ .align 2 ++ .global zbuf_free ++ .type zbuf_free, %function ++zbuf_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 ++ strb w1, [x0, 2] ++ cbz w1, .L625 ++ ldr w1, [x0, 36] ++ cmn w1, #1 ++ beq .L625 ++ mov x1, x0 ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 3352 ++ bl buf_add_tail ++.L626: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x19, 3353] ++ add w0, w0, 1 ++ strb w0, [x19, 3353] ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L625: ++ add x1, x19, :lo12:.LANCHOR0 ++ ldrb w2, [x1, 3352] ++ strb w2, [x0] ++ ldrb w0, [x0, 1] ++ strb w0, [x1, 3352] ++ b .L626 ++ .size zbuf_free, .-zbuf_free ++ .align 2 ++ .global buf_alloc ++ .type buf_alloc, %function ++buf_alloc: ++ stp x29, x30, [sp, -48]! ++ adrp x1, .LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ add x20, x1, :lo12:.LANCHOR0 ++ str x21, [sp, 32] ++ and w21, w0, 255 ++ mov x19, x1 ++ ldrb w0, [x20, 3353] ++ cbz w0, .L635 ++.L638: ++ add x1, x19, :lo12:.LANCHOR0 ++ add x0, x1, 1304 ++ ldrb w3, [x1, 3352] ++ ubfiz x2, x3, 6, 8 ++ add x0, x0, x2 ++ cbz w21, .L636 ++.L637: ++ add x1, x19, :lo12:.LANCHOR0 ++ sbfiz x3, x3, 6, 32 ++ add x4, x1, 1304 ++ add x2, x4, x3 ++ ldrb w5, [x4, x3] ++ strb w5, [x1, 3352] ++ ldrb w5, [x1, 3353] ++ strh wzr, [x2, 50] ++ sub w5, w5, #1 ++ strb w5, [x1, 3353] ++ mov w1, 1 ++ strb w1, [x2, 2] ++ mov w1, -1 ++ strb wzr, [x2, 56] ++ strb w1, [x4, x3] ++ mov w1, -1 ++ strb wzr, [x2, 57] ++ str xzr, [x2, 16] ++ str w1, [x2, 36] ++ b .L634 ++.L635: ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1424 ++ mov w2, 121 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ ldrb w0, [x20, 3353] ++ cbnz w0, .L638 ++.L640: ++ mov x0, 0 ++.L634: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L636: ++ ldrb w1, [x1, 3353] ++ cmp w1, 1 ++ bne .L637 ++ b .L640 ++ .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 .L648 ++ ldrb w1, [x1] ++ strb w1, [x0] ++.L652: ++ mov w0, 1 ++ ret ++.L649: ++ mov w3, w2 ++ sbfiz x2, x2, 6, 32 ++ ldrb w2, [x0, x2] ++ cmp w4, w2 ++ bne .L650 ++ sbfiz x3, x3, 6, 32 ++ ldrb w2, [x1] ++ strb w2, [x0, x3] ++ mov w0, -1 ++ strb w0, [x1] ++ b .L652 ++.L648: ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++.L650: ++ cmp w2, 255 ++ bne .L649 ++ mov w0, 0 ++ 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]! ++ adrp x5, .LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x0 ++ add x0, x5, :lo12:.LANCHOR0 ++ mov x19, x5 ++ ldrb w0, [x0, 3353] ++ cbnz w0, .L654 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1440 ++ mov w2, 172 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L654: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x19, 3353] ++ cbz w0, .L653 ++ mov x1, x20 ++ add x0, x19, 3352 ++ bl buf_remove_buf ++ cmp w0, 1 ++ bne .L653 ++ ldrb w0, [x19, 3353] ++ sub w0, w0, #1 ++ strb w0, [x19, 3353] ++ ldrb w0, [x20, 2] ++ orr w0, w0, 1 ++ strb w0, [x20, 2] ++.L653: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size buf_remove_free, .-buf_remove_free ++ .align 2 ++ .global dump_buf_info ++ .type dump_buf_info, %function ++dump_buf_info: ++ sub sp, sp, #64 ++ adrp x0, .LC44 ++ add x0, x0, :lo12:.LC44 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ str x21, [sp, 48] ++ add x20, x19, 1304 ++ adrp x21, .LC50 ++ add x19, x19, 3352 ++ add x21, x21, :lo12:.LC50 ++ ldrb w1, [x19, 2] ++ bl printk ++ ldrb w1, [x19, 3] ++ adrp x0, .LC45 ++ add x0, x0, :lo12:.LC45 ++ bl printk ++ ldrb w1, [x19, 4] ++ adrp x0, .LC46 ++ add x0, x0, :lo12:.LC46 ++ bl printk ++ ldrb w1, [x19, 5] ++ adrp x0, .LC47 ++ add x0, x0, :lo12:.LC47 ++ bl printk ++ ldrb w1, [x19] ++ adrp x0, .LC48 ++ add x0, x0, :lo12:.LC48 ++ bl printk ++ ldrb w1, [x19, 1] ++ adrp x0, .LC49 ++ add x0, x0, :lo12:.LC49 ++ bl printk ++.L660: ++ ldr w0, [x20, 40] ++ add x20, x20, 64 ++ ldrb w5, [x20, -6] ++ ldrh w4, [x20, -14] ++ ldrb w3, [x20, -62] ++ ldrb w2, [x20, -64] ++ ldrb w1, [x20, -63] ++ str w0, [sp] ++ mov x0, x21 ++ ldr w7, [x20, -28] ++ ldr w6, [x20, -12] ++ bl printk ++ cmp x20, x19 ++ bne .L660 ++ ldp x19, x20, [sp, 32] ++ ldp x29, x30, [sp, 16] ++ ldr x21, [sp, 48] ++ add sp, sp, 64 ++ ret ++ .size dump_buf_info, .-dump_buf_info ++ .align 2 ++ .global flash_check_bad_block ++ .type flash_check_bad_block, %function ++flash_check_bad_block: ++ adrp x3, .LANCHOR2 ++ add x3, x3, :lo12:.LANCHOR2 ++ and w5, w0, 255 ++ lsr w4, w1, 5 ++ ldrb w0, [x3, 21] ++ ldrh w2, [x3, 22] ++ mul w2, w2, w0 ++ mov x0, 912 ++ and w2, w2, 65535 ++ add w2, w2, 31 ++ asr w2, w2, 5 ++ lsl w2, w2, 2 ++ umaddl x0, w2, w5, x0 ++ adrp x2, .LANCHOR0+1048 ++ ldr x2, [x2, #:lo12:.LANCHOR0+1048] ++ add x0, x0, w4, uxtw 2 ++ ldr w0, [x2, x0] ++ 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]! ++ mov w2, w1 ++ add x29, sp, 0 ++ str x21, [sp, 32] ++ and w21, w0, 255 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ stp x19, x20, [sp, 16] ++ mov w20, w1 ++ ldrh w19, [x0, 22] ++ ldrb w1, [x0, 21] ++ adrp x0, .LC51 ++ add x0, x0, :lo12:.LC51 ++ mul w19, w19, w1 ++ mov w1, w21 ++ bl printk ++ and w19, w19, 65535 ++ lsr w0, w20, 5 ++ add w1, w19, 31 ++ mov x19, 912 ++ asr w1, w1, 5 ++ mov w2, 1 ++ lsl w1, w1, 2 ++ umaddl x1, w1, w21, x19 ++ add x1, x1, w0, uxtw 2 ++ adrp x0, .LANCHOR0+1048 ++ ldr x3, [x0, #:lo12:.LANCHOR0+1048] ++ lsl w0, w2, w20 ++ ldr w2, [x3, x1] ++ orr w2, w2, w0 ++ str w2, [x3, x1] ++ 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 str2hex ++ .type str2hex, %function ++str2hex: ++ ldrb w1, [x0] ++ cmp w1, 48 ++ bne .L667 ++ ldrb w1, [x0, 1] ++ add x2, x0, 2 ++ and w1, w1, -33 ++ and w1, w1, 255 ++ cmp w1, 88 ++ csel x0, x2, x0, eq ++.L667: ++ mov x2, x0 ++ ldrb w1, [x2], 1 ++ and w1, w1, -33 ++ and w1, w1, 255 ++ cmp w1, 88 ++ mov w1, 0 ++ csel x0, x2, x0, eq ++.L669: ++ ldrb w2, [x0] ++ cbnz w2, .L674 ++.L666: ++ mov w0, w1 ++ ret ++.L674: ++ sub w3, w2, #48 ++ and w3, w3, 255 ++ cmp w3, 9 ++ bhi .L670 ++ add w1, w2, w1, lsl 4 ++ sub w1, w1, #48 ++.L671: ++ add x0, x0, 1 ++ b .L669 ++.L670: ++ sub w3, w2, #97 ++ and w3, w3, 255 ++ cmp w3, 5 ++ bhi .L672 ++ add w1, w2, w1, lsl 4 ++ sub w1, w1, #87 ++ b .L671 ++.L672: ++ sub w3, w2, #65 ++ and w3, w3, 255 ++ cmp w3, 5 ++ bhi .L666 ++ add w1, w2, w1, lsl 4 ++ sub w1, w1, #55 ++ b .L671 ++ .size str2hex, .-str2hex ++ .align 2 ++ .global zftl_proc_debug_init ++ .type zftl_proc_debug_init, %function ++zftl_proc_debug_init: ++ stp x29, x30, [sp, -16]! ++ adrp x3, .LANCHOR1 ++ add x3, x3, :lo12:.LANCHOR1 ++ mov x4, 0 ++ add x29, sp, 0 ++ add x3, x3, 1456 ++ mov x2, 0 ++ mov w1, 292 ++ adrp x0, .LC52 ++ add x0, x0, :lo12:.LC52 ++ bl proc_create_data ++ ldp x29, x30, [sp], 16 ++ ret ++ .size zftl_proc_debug_init, .-zftl_proc_debug_init ++ .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 x2, .LC1 ++ adrp x1, .LC2 ++ add x2, x2, :lo12:.LC1 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ add x1, x1, :lo12:.LC2 ++ stp x21, x22, [sp, 32] ++ mov x20, x0 ++ bl sprintf ++ add x19, x20, w0, sxtw ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ adrp x22, .LANCHOR0 ++ add x21, x22, :lo12:.LANCHOR0 ++ adrp x1, .LC53 ++ add x1, x1, :lo12:.LC53 ++ ldrb w7, [x0, 14] ++ ldrb w6, [x0, 13] ++ ldrb w5, [x0, 12] ++ ldrb w4, [x0, 11] ++ ldrb w3, [x0, 10] ++ ldrb w2, [x0, 9] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr w2, [x21, 1032] ++ mov x0, x19 ++ adrp x1, .LC54 ++ add x1, x1, :lo12:.LC54 ++ lsr w2, w2, 11 ++ bl sprintf ++ ldr w2, [x21, 3360] ++ add x19, x19, w0, sxtw ++ mov x0, x19 ++ adrp x1, .LC55 ++ add x1, x1, :lo12:.LC55 ++ lsr w2, w2, 11 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ adrp x1, .LC56 ++ mov x0, x19 ++ add x1, x1, :lo12:.LC56 ++ bl strcpy ++ add x19, x19, 10 ++ ldr w2, [x21, 3364] ++ mov x0, x19 ++ adrp x1, .LC57 ++ add x1, x1, :lo12:.LC57 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr w2, [x21, 1032] ++ mov x0, x19 ++ adrp x1, .LC58 ++ add x1, x1, :lo12:.LC58 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ adrp x1, .LC59 ++ add x1, x1, :lo12:.LC59 ++ ldr w2, [x0, 524] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ adrp x1, .LC60 ++ add x1, x1, :lo12:.LC60 ++ ldr w2, [x0, 528] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x21, 3368] ++ mov x0, x19 ++ adrp x1, .LC61 ++ add x1, x1, :lo12:.LC61 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x21, 3370] ++ mov x0, x19 ++ adrp x1, .LC62 ++ add x1, x1, :lo12:.LC62 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x21, 3372] ++ mov x0, x19 ++ adrp x1, .LC63 ++ add x1, x1, :lo12:.LC63 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x21, 3374] ++ mov x0, x19 ++ adrp x1, .LC64 ++ add x1, x1, :lo12:.LC64 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x21, 3376] ++ mov x0, x19 ++ adrp x1, .LC65 ++ add x1, x1, :lo12:.LC65 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x21, 3378] ++ mov x0, x19 ++ adrp x1, .LC66 ++ add x1, x1, :lo12:.LC66 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrb w4, [x21, 3380] ++ mov x0, x19 ++ ldrb w3, [x21, 3381] ++ adrp x1, .LC67 ++ ldrb w2, [x21, 3353] ++ add x1, x1, :lo12:.LC67 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC68 ++ add x1, x1, :lo12:.LC68 ++ ldrh w3, [x0, 146] ++ ldrh w2, [x0, 148] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC69 ++ add x1, x1, :lo12:.LC69 ++ ldp w2, w0, [x0, 16] ++ add w2, w0, w2, lsr 11 ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC70 ++ add x1, x1, :lo12:.LC70 ++ ldp w2, w0, [x0, 24] ++ add w2, w0, w2, lsr 11 ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC71 ++ add x1, x1, :lo12:.LC71 ++ ldr w2, [x0, 64] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC72 ++ add x1, x1, :lo12:.LC72 ++ ldr w2, [x0, 68] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ adrp x1, .LC73 ++ add x1, x1, :lo12:.LC73 ++ ldr w2, [x0, 12] ++ mov w0, 10 ++ udiv w2, w2, w0 ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC74 ++ ldrb w2, [x22, #:lo12:.LANCHOR0] ++ add x1, x1, :lo12:.LC74 ++ ldrh w4, [x0, 150] ++ ldr w3, [x0, 156] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ adrp x1, .LC75 ++ add x1, x1, :lo12:.LC75 ++ ldr w2, [x0, 556] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ adrp x1, .LC76 ++ add x1, x1, :lo12:.LC76 ++ ldr w2, [x0, 552] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC77 ++ add x1, x1, :lo12:.LC77 ++ ldr w2, [x0, 52] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC78 ++ add x1, x1, :lo12:.LC78 ++ ldr w2, [x0, 60] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC79 ++ add x1, x1, :lo12:.LC79 ++ ldr w2, [x0, 76] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC80 ++ add x1, x1, :lo12:.LC80 ++ ldr w2, [x0, 8] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ adrp x1, .LC81 ++ add x1, x1, :lo12:.LC81 ++ ldrb w4, [x0, 25] ++ ldrh w3, [x0, 22] ++ ldrh w2, [x0, 16] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ adrp x1, .LC82 ++ add x1, x1, :lo12:.LC82 ++ ldrb w4, [x0, 57] ++ ldrh w3, [x0, 54] ++ ldrh w2, [x0, 48] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ adrp x1, .LC83 ++ add x1, x1, :lo12:.LC83 ++ ldrb w4, [x0, 89] ++ ldrh w3, [x0, 86] ++ ldrh w2, [x0, 80] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC84 ++ add x1, x1, :lo12:.LC84 ++ ldrh w6, [x0, 96] ++ ldrh w5, [x0, 92] ++ ldrh w4, [x0, 88] ++ ldrh w2, [x0, 74] ++ ldr w3, [x0, 84] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 3384] ++ adrp x1, .LC85 ++ add x1, x1, :lo12:.LC85 ++ ldrh w6, [x0, 98] ++ ldrh w5, [x0, 94] ++ ldrh w4, [x0, 90] ++ ldr w3, [x0, 80] ++ ldrh w2, [x0, 72] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldrh w2, [x21, 3392] ++ mov x0, x19 ++ adrp x1, .LC86 ++ add x1, x1, :lo12:.LC86 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr w6, [x21, 3396] ++ mov x0, x19 ++ ldrh w5, [x21, 3400] ++ adrp x1, .LC87 ++ ldrh w4, [x21, 3402] ++ add x1, x1, :lo12:.LC87 ++ ldrh w3, [x21, 3404] ++ ldrh w2, [x21, 3406] ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ adrp x1, .LC88 ++ add x1, x1, :lo12:.LC88 ++ ldrh w5, [x0, 590] ++ ldrh w4, [x0, 588] ++ ldrh w3, [x0, 586] ++ ldrh w2, [x0, 584] ++ mov x0, x19 ++ bl sprintf ++ add x19, x19, w0, sxtw ++ ldr x0, [x21, 1128] ++ ldr x1, [x21, 3384] ++ add x5, x0, 512 ++ mov x0, x19 ++ ldp w2, w3, [x5, 24] ++ ldp w4, w6, [x5, 32] ++ ldr w5, [x1, 44] ++ adrp x1, .LC89 ++ add x1, x1, :lo12:.LC89 ++ bl sprintf ++ add x0, x19, w0, sxtw ++ sub w0, w0, w20 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ 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]! ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 2] ++ orr w1, w1, 2 ++ strb w1, [x0, 2] ++ mov x1, x0 ++ add x0, x19, 3408 ++ bl buf_add_tail ++ ldrb w0, [x19, 3381] ++ add w0, w0, 1 ++ and w0, w0, 255 ++ strb w0, [x19, 3381] ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size ftl_gc_write_buf, .-ftl_gc_write_buf ++ .align 2 ++ .global gc_hook ++ .type gc_hook, %function ++gc_hook: ++ ret ++ .size gc_hook, .-gc_hook ++ .align 2 ++ .global vpn_check ++ .type vpn_check, %function ++vpn_check: ++ ret ++ .size vpn_check, .-vpn_check ++ .align 2 ++ .global ftl_scan_all_data ++ .type ftl_scan_all_data, %function ++ftl_scan_all_data: ++ ret ++ .size ftl_scan_all_data, .-ftl_scan_all_data ++ .align 2 ++ .global gc_add_sblk ++ .type gc_add_sblk, %function ++gc_add_sblk: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR2 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 65535 ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ adrp x21, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ and w24, w1, 65535 ++ and w23, w2, 65535 ++ tbz x0, 8, .L688 ++ add x1, x21, :lo12:.LANCHOR0 ++ uxtw x0, w19 ++ ldr x2, [x1, 1104] ++ ldr x3, [x1, 1120] ++ ldrh w7, [x1, 3402] ++ add x2, x2, x0, lsl 2 ++ ldrh w6, [x1, 3472] ++ mov w1, w19 ++ ldrh w5, [x3, x0, lsl 1] ++ adrp x0, .LC90 ++ ldrb w4, [x2, 2] ++ mov w3, w23 ++ mov w2, w24 ++ add x0, x0, :lo12:.LC90 ++ ubfx x4, x4, 5, 3 ++ bl printk ++.L688: ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 1096] ++ cmp w0, w19 ++ bhi .L689 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1552 ++ mov w2, 543 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L689: ++ add x1, x21, :lo12:.LANCHOR0 ++ ldrh w0, [x1, 1096] ++ cmp w0, w19 ++ bhi .L690 ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ mov w20, 0 ++ tbz x0, 10, .L687 ++ adrp x0, .LC91 ++ mov w3, w23 ++ mov w2, w24 ++ mov w1, w19 ++ add x0, x0, :lo12:.LC91 ++ bl printk ++.L687: ++ mov w0, w20 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L690: ++ ldr x2, [x1, 1120] ++ uxtw x0, w19 ++ ldrh w3, [x2, x0, lsl 1] ++ ldr x2, [x1, 1104] ++ add x0, x2, x0, lsl 2 ++ ldrb w2, [x0, 2] ++ tst w2, 224 ++ bne .L692 ++ mov w20, 0 ++ cbz w3, .L687 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1552 ++ mov w2, 553 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ b .L687 ++.L692: ++ ldrh w0, [x1, 3416] ++ cmp w0, w19 ++ beq .L711 ++ ldr x0, [x1, 1128] ++ ldrh w5, [x0, 48] ++ cmp w5, w19 ++ beq .L711 ++ ldrh w5, [x0, 16] ++ cmp w5, w19 ++ beq .L711 ++ ldrh w5, [x0, 80] ++ cmp w5, w19 ++ beq .L711 ++ ldrh w5, [x1, 3472] ++ add x1, x1, 3474 ++ mov w4, 0 ++.L693: ++ cmp w4, w5 ++ bcc .L694 ++ cbnz w24, .L698 ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ ldrh w6, [x1, 1280] ++ cmp w19, w6 ++ beq .L711 ++ add x1, x1, 1288 ++ mov x4, 0 ++.L697: ++ ldrh w7, [x4, x1] ++ cmp w19, w7 ++ bne .L696 ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ mov w20, 0 ++ tbz x0, 8, .L687 ++ mov w5, w6 ++ mov w4, w19 ++ ubfx x2, x2, 5, 3 ++ mov w1, w19 ++ adrp x0, .LC92 ++ add x0, x0, :lo12:.LC92 ++ bl printk ++ b .L687 ++.L694: ++ ldrh w6, [x1], 2 ++ cmp w6, w19 ++ beq .L711 ++ add w4, w4, 1 ++ b .L693 ++.L696: ++ add x4, x4, 2 ++ cmp x4, 16 ++ bne .L697 ++ ubfiz x20, x23, 7, 16 ++ add x20, x20, 136 ++ add x20, x0, x20 ++.L699: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L700 ++ add x0, x21, :lo12:.LANCHOR0 ++ mov w4, w3 ++ mov w1, w19 ++ ubfx x3, x2, 5, 3 ++ mov w2, w24 ++ ldrh w6, [x0, 3402] ++ adrp x0, .LC93 ++ add x0, x0, :lo12:.LC93 ++ bl printk ++.L700: ++ mov x0, x20 ++ add x1, x20, 128 ++ mov w2, 65535 ++.L703: ++ ldrh w3, [x0] ++ cmp w3, w2 ++ bne .L701 ++ strh w19, [x0] ++ add x21, x21, :lo12:.LANCHOR0 ++ cbz w24, .L702 ++ ldr x1, [x21, 1128] ++ ldrh w0, [x1, 124] ++ add w0, w0, 1 ++ strh w0, [x1, 124] ++.L725: ++ mov w20, 1 ++ b .L687 ++.L698: ++ add x20, x0, 392 ++ b .L699 ++.L702: ++ ldr x0, [x21, 1128] ++ add x23, x0, w23, uxth 1 ++ ldrh w0, [x23, 120] ++ add w0, w0, 1 ++ strh w0, [x23, 120] ++ b .L725 ++.L701: ++ add x0, x0, 2 ++ cmp x1, x0 ++ bne .L703 ++ b .L725 ++.L711: ++ mov w20, 0 ++ b .L687 ++ .size gc_add_sblk, .-gc_add_sblk ++ .align 2 ++ .global gc_mark_bad_ppa ++ .type gc_mark_bad_ppa, %function ++gc_mark_bad_ppa: ++ stp x29, x30, [sp, -64]! ++ adrp x1, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ add x21, x20, :lo12:.LANCHOR0 ++ str x23, [sp, 48] ++ mov w19, 24 ++ mov w23, 1 ++ ldrb w4, [x21, 1205] ++ add x21, x21, 3416 ++ ldrh w3, [x1, 1304] ++ sub w19, w19, w4 ++ ldrb w1, [x1, 1306] ++ sub w19, w19, w3 ++ lsr w2, w0, w3 ++ mov w3, w0 ++ lsl w19, w23, w19 ++ sub w19, w19, #1 ++ and w19, w19, w2 ++ and w22, w2, 65535 ++ mov w2, w22 ++ adrp x0, .LC94 ++ add x0, x0, :lo12:.LC94 ++ udiv w19, w19, w1 ++ ldr w1, [x21, 2200] ++ and w19, w19, 65535 ++ bl printk ++ mov w1, w23 ++ mov w2, 0 ++ mov w0, w19 ++ bl gc_add_sblk ++ ldr w0, [x21, 2200] ++ mov w1, 0 ++.L727: ++ cmp w1, w0 ++ bcc .L729 ++ cmp w0, 5 ++ bhi .L728 ++ add x20, x20, :lo12:.LANCHOR0 ++ add w1, w0, 1 ++ str w1, [x20, 5616] ++ add x20, x20, w0, uxtw 1 ++ strh w22, [x20, 5620] ++.L728: ++ mov w0, 0 ++ ldr x23, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L729: ++ add x2, x21, w1, sxtw 1 ++ ldrh w2, [x2, 2204] ++ cmp w2, w22 ++ beq .L728 ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L727 ++ .size gc_mark_bad_ppa, .-gc_mark_bad_ppa ++ .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, .LANCHOR3+1312 ++ ubfiz x0, x0, 2, 16 ++ ldr x1, [x1, #:lo12:.LANCHOR3+1312] ++ 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 x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ add x24, x22, :lo12:.LANCHOR0 ++ stp x25, x26, [sp, 64] ++ add x25, x24, 1304 ++ stp x19, x20, [sp, 16] ++.L733: ++ add x3, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x3, 3356] ++ cmp w0, 255 ++ bne .L746 ++ 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 ++.L746: ++ sxtw x21, w0 ++ add x1, x3, 1304 ++ lsl x4, x21, 6 ++ add x2, x1, x4 ++ ldrb w0, [x1, x4] ++ ldr w1, [x2, 52] ++ strb w0, [x3, 3356] ++ ldrh w23, [x2, 48] ++ cbz w1, .L734 ++ ldr w2, [x2, 40] ++ mov w0, 1 ++ str w2, [x3, 5612] ++ strh w0, [x3, 5610] ++ adrp x0, .LC95 ++ add x0, x0, :lo12:.LC95 ++ bl printk ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1568 ++ mov w2, 956 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L734: ++ adrp x20, .LANCHOR3 ++ add x1, x20, :lo12:.LANCHOR3 ++ ldrb w0, [x1, 1320] ++ cmp w0, 3 ++ bne .L735 ++ ldrb w0, [x24, 1212] ++ cbnz w0, .L735 ++ ldr x0, [x24, 1128] ++ ldrb w1, [x1, 1321] ++ ldrb w0, [x0, 89] ++ mov w19, w0 ++ cmp w1, w0 ++ bhi .L747 ++ cmp w0, 2 ++ mov w0, 2 ++ csel w19, w19, w0, ls ++.L736: ++ add w19, w19, w19, lsl 1 ++.L737: ++ add x0, x20, :lo12:.LANCHOR3 ++ and x1, x23, 65535 ++ ldr x2, [x0, 1328] ++ add x0, x25, x21, lsl 6 ++ ldrb w0, [x0, 1] ++ ldrb w1, [x2, x1] ++ cmp w1, w0 ++ beq .L738 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1568 ++ mov w2, 976 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L738: ++ add x0, x25, x21, lsl 6 ++ ldrb w0, [x0, 61] ++ cmp w0, 3 ++ beq .L739 ++ add x0, x20, :lo12:.LANCHOR3 ++ ldrb w1, [x0, 1320] ++ cmp w1, 3 ++ bne .L739 ++ ldrb w1, [x0, 1336] ++ cbnz w1, .L739 ++ ldrb w1, [x24, 1212] ++ cbnz w1, .L739 ++ ldrb w1, [x24, 1213] ++ cbnz w1, .L739 ++ ldrb w1, [x0, 1322] ++ cbz w1, .L740 ++ ldrb w0, [x0, 1323] ++ cbnz w0, .L739 ++.L740: ++ add x20, x20, :lo12:.LANCHOR3 ++ mov w0, 0 ++ ldr x2, [x20, 1328] ++.L741: ++ cmp w19, w0, uxth ++ bls .L733 ++ add w1, w23, w0 ++ add w0, w0, 1 ++ ldrb w1, [x2, x1] ++ add x1, x25, x1, lsl 6 ++ strb wzr, [x1, 61] ++ b .L741 ++.L747: ++ mov w19, 1 ++ b .L736 ++.L735: ++ add x0, x20, :lo12:.LANCHOR3 ++ ldrb w1, [x0, 1322] ++ cbz w1, .L748 ++ ldrb w0, [x0, 1323] ++ cmp w0, 0 ++ cset w19, ne ++ add w19, w19, 1 ++ b .L737 ++.L748: ++ mov w19, 1 ++ b .L737 ++.L739: ++ add x20, x20, :lo12:.LANCHOR3 ++ strh w23, [x24, 5524] ++ mov w21, 0 ++ mov w26, -1 ++.L742: ++ cmp w19, w21, uxth ++ bls .L733 ++ ldr x2, [x20, 1328] ++ add w1, w23, w21 ++ add w21, w21, 1 ++ ldrb w0, [x2, x1] ++ strb w26, [x2, x1] ++ sbfiz x1, x0, 6, 32 ++ ubfiz x0, x0, 6, 8 ++ add x1, x25, x1 ++ add x0, x25, x0 ++ strb wzr, [x1, 61] ++ bl zbuf_free ++ ldrb w0, [x24, 3423] ++ sub w0, w0, #1 ++ strb w0, [x24, 3423] ++ b .L742 ++ .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 x2, .LANCHOR0 ++ add x0, x2, :lo12:.LANCHOR0 ++ ldr x1, [x0, 1128] ++ ldrh w0, [x1, 124] ++ cbz w0, .L761 ++ add x1, x1, 392 ++ mov w3, 1 ++.L762: ++ add x4, x1, 128 ++ mov w5, 65535 ++.L766: ++ ldrh w0, [x1] ++ cmp w0, w5 ++ beq .L764 ++ mov w4, -1 ++ strh w4, [x1] ++ add x2, x2, :lo12:.LANCHOR0 ++ cbz w3, .L765 ++ ldr x2, [x2, 1128] ++ ldrh w1, [x2, 124] ++ sub w1, w1, #1 ++ strh w1, [x2, 124] ++ ret ++.L761: ++ adrp x0, .LANCHOR3+1337 ++ ldrb w0, [x0, #:lo12:.LANCHOR3+1337] ++ add x3, x1, w0, sxtw 1 ++ ldrh w3, [x3, 120] ++ cbz w3, .L767 ++ ubfiz x0, x0, 7, 8 ++ mov w3, 0 ++ add x0, x0, 136 ++ add x1, x1, x0 ++ b .L762 ++.L765: ++ adrp x1, .LANCHOR3+1337 ++ ldr x2, [x2, 1128] ++ ldrb w1, [x1, #:lo12:.LANCHOR3+1337] ++ add x1, x2, x1, lsl 1 ++ ldrh w2, [x1, 120] ++ sub w2, w2, #1 ++ strh w2, [x1, 120] ++ ret ++.L764: ++ add x1, x1, 2 ++ cmp x1, x4 ++ bne .L766 ++ ret ++.L767: ++ mov w0, 65535 ++ 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, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x0, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ ldrb w1, [x0, 3423] ++ cbz w1, .L776 ++ ldrb w1, [x0, 3353] ++ cmp w1, 1 ++ bhi .L776 ++ adrp x21, .LANCHOR3 ++ add x2, x21, :lo12:.LANCHOR3 ++ ldrh w20, [x0, 5524] ++ add x0, x0, 1304 ++ ldrb w4, [x2, 1321] ++ add w3, w20, 24 ++ ldrh w1, [x2, 1338] ++ mul w1, w1, w4 ++ ldr x4, [x2, 1328] ++ cmp w1, w3 ++ csel w1, w1, w3, ls ++.L771: ++ cmp w20, w1 ++ bcc .L774 ++.L776: ++ mov w0, 0 ++ b .L769 ++.L774: ++ uxtw x22, w20 ++ ldrb w2, [x4, x22] ++ cmp w2, 255 ++ beq .L772 ++ sbfiz x3, x2, 6, 32 ++ add x3, x0, x3 ++ ldrb w3, [x3, 61] ++ cbnz w3, .L772 ++ ubfiz x2, x2, 6, 8 ++ add x0, x0, x2 ++ bl zbuf_free ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L773 ++ add x0, x21, :lo12:.LANCHOR3 ++ mov w1, w20 ++ ldr x0, [x0, 1328] ++ ldrb w2, [x0, x22] ++ adrp x0, .LC96 ++ add x0, x0, :lo12:.LC96 ++ bl printk ++.L773: ++ add x21, x21, :lo12:.LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, -1 ++ ldr x0, [x21, 1328] ++ strb w1, [x0, x22] ++ ldrb w0, [x19, 3423] ++ sub w0, w0, #1 ++ strb w0, [x19, 3423] ++ mov w0, 1 ++.L769: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L772: ++ add w20, w20, 1 ++ b .L771 ++ .size gc_free_temp_buf, .-gc_free_temp_buf ++ .align 2 ++ .global get_ink_scaned_blk ++ .type get_ink_scaned_blk, %function ++get_ink_scaned_blk: ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ add x0, x1, 3416 ++ ldrh w2, [x1, 5528] ++ cbz w2, .L786 ++ sub w2, w2, #1 ++ strh w2, [x1, 5528] ++ add x0, x0, w2, sxtw 1 ++ ldrh w0, [x0, 2114] ++ ret ++.L786: ++ mov w0, 65535 ++ ret ++ .size get_ink_scaned_blk, .-get_ink_scaned_blk ++ .align 2 ++ .global print_gc_debug_info ++ .type print_gc_debug_info, %function ++print_gc_debug_info: ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ ldrh w6, [x0, 3392] ++ ldrb w5, [x0, 3423] ++ ldrb w4, [x0, 3353] ++ ldrh w3, [x0, 5522] ++ ldrh w2, [x0, 3418] ++ ldrh w1, [x0, 3416] ++ adrp x0, .LC97 ++ add x0, x0, :lo12:.LC97 ++ bl printk ++ ldp x29, x30, [sp], 16 ++ ret ++ .size print_gc_debug_info, .-print_gc_debug_info ++ .align 2 ++ .global _list_pop_index_node ++ .type _list_pop_index_node, %function ++_list_pop_index_node: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ ldr x20, [x0] ++ cbz x20, .L795 ++ adrp x3, .LANCHOR0+1040 ++ and w1, w1, 65535 ++ mov w4, 65535 ++ mov w5, 6 ++ ldr x19, [x3, #:lo12:.LANCHOR0+1040] ++.L791: ++ cbnz w1, .L792 ++.L794: ++ sub x19, x20, x19 ++ mov x1, -6148914691236517206 ++ asr x19, x19, 1 ++ movk x1, 0xaaab, lsl 0 ++ mul x19, x19, x1 ++ and w19, w19, 65535 ++ mov w1, w19 ++ bl _list_remove_node ++ mov w0, -1 ++ strh w0, [x20] ++ strh w0, [x20, 2] ++ mov w0, w19 ++.L789: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L792: ++ ldrh w3, [x20] ++ cmp w3, w4 ++ beq .L794 ++ sub w1, w1, #1 ++ umaddl x20, w3, w5, x19 ++ and w1, w1, 65535 ++ b .L791 ++.L795: ++ mov w0, 65535 ++ b .L789 ++ .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: ++ ldr x0, [x0] ++ and w1, w1, 65535 ++ cbz x0, .L802 ++ adrp x2, .LANCHOR0+1040 ++ mov w3, 65535 ++ mov w4, 6 ++ ldr x2, [x2, #:lo12:.LANCHOR0+1040] ++.L799: ++ cbz w1, .L800 ++ ldrh w0, [x0] ++ cmp w0, w3 ++ bne .L801 ++ ret ++.L801: ++ sub w1, w1, #1 ++ umaddl x0, w0, w4, x2 ++ and w1, w1, 65535 ++ b .L799 ++.L802: ++ mov w0, 65535 ++ ret ++.L800: ++ sub x0, x0, x2 ++ mov x1, -6148914691236517206 ++ asr x0, x0, 1 ++ movk x1, 0xaaab, lsl 0 ++ mul x0, x0, x1 ++ and w0, w0, 65535 ++ ret ++ .size _list_get_gc_head_node, .-_list_get_gc_head_node ++ .align 2 ++ .type zftl_get_gc_node.part.10, %function ++zftl_get_gc_node.part.10: ++ stp x29, x30, [sp, -16]! ++ mov w1, w0 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x29, sp, 0 ++ add x0, x0, 1344 ++ bl _list_get_gc_head_node ++ ldp x29, x30, [sp], 16 ++ ret ++ .size zftl_get_gc_node.part.10, .-zftl_get_gc_node.part.10 ++ .align 2 ++ .global gc_search_src_blk ++ .type gc_search_src_blk, %function ++gc_search_src_blk: ++ stp x29, x30, [sp, -160]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ and w0, w1, 255 ++ stp x19, x20, [sp, 16] ++ str w0, [x29, 144] ++ adrp x19, .LANCHOR0 ++ add x0, x19, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ and w20, w2, 255 ++ stp x27, x28, [sp, 80] ++ ldr x2, [x0, 1128] ++ add x1, x2, w22, sxtw 1 ++ ldrh w21, [x1, 120] ++ cbz w21, .L807 ++ mov w0, w21 ++.L806: ++ 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 ++.L807: ++ ldrh w1, [x0, 3472] ++ cmp w1, 1 ++ bhi .L809 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ strh wzr, [x0, 1352] ++ strh wzr, [x0, 1354] ++ strh wzr, [x0, 1356] ++.L809: ++ cbnz w22, .L810 ++ adrp x25, .LANCHOR3 ++ adrp x27, .LC98 ++ add x26, x25, :lo12:.LANCHOR3 ++ add x27, x27, :lo12:.LC98 ++ add x0, x26, 1360 ++ mov w23, 0 ++ mov w24, 0 ++ str x0, [x29, 136] ++.L811: ++ add w28, w20, 1 ++ cmp w24, w28 ++ bge .L816 ++ ldrh w6, [x26, 1354] ++ ldr x0, [x29, 136] ++ mov w1, w6 ++ bl _list_get_gc_head_node ++ add w2, w6, 1 ++ and w2, w2, 65535 ++ strh w2, [x26, 1354] ++ and w1, w0, 65535 ++ mov w0, 65535 ++ mov w4, w1 ++ cmp w1, w0 ++ beq .L812 ++ adrp x0, .LANCHOR2 ++ uxtw x6, w1 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L813 ++ add x0, x19, :lo12:.LANCHOR0 ++ str x6, [x29, 128] ++ str w1, [x29, 120] ++ ldr x0, [x0, 1120] ++ ldrh w3, [x0, x6, lsl 1] ++ mov x0, x27 ++ bl printk ++ ldr w4, [x29, 120] ++ ldr x6, [x29, 128] ++.L813: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x1, [x0, 1120] ++ ldrh w0, [x0, 3402] ++ ldrh w1, [x1, x6, lsl 1] ++ cmp w1, w0 ++ bcs .L814 ++ mov w2, 0 ++ mov w1, 0 ++ mov w0, w4 ++ bl gc_add_sblk ++ cbz w0, .L815 ++ add w5, w23, 1 ++ and w23, w5, 65535 ++ cmp w23, w20 ++ bcc .L815 ++.L816: ++ ldr x0, [x29, 144] ++ tbz x0, 1, .L818 ++ add x6, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x6, 3378] ++ cmp w0, 32 ++ bls .L818 ++ adrp x27, .LANCHOR3 ++ add x25, x27, :lo12:.LANCHOR3 ++ add x0, x25, 1368 ++ mov x26, x6 ++ str x0, [x29, 136] ++ mov w24, 0 ++ and w0, w20, 65535 ++ str w0, [x29, 128] ++.L819: ++ cmp w28, w24 ++ ble .L823 ++ ldrh w7, [x25, 1356] ++ ldr x0, [x29, 136] ++ mov w1, w7 ++ bl _list_get_gc_head_node ++ add w7, w7, 1 ++ strh w7, [x25, 1356] ++ and w1, w0, 65535 ++ mov w2, 65535 ++ cmp w1, w2 ++ beq .L820 ++ ldr x2, [x26, 1120] ++ ubfiz x1, x1, 1, 16 ++ ldrh w2, [x2, x1] ++ ldrh w1, [x26, 3400] ++ cmp w2, w1 ++ bcs .L820 ++ mov w2, 0 ++ mov w1, 0 ++ bl gc_add_sblk ++ cbz w0, .L822 ++ add w5, w23, 1 ++ ldr w0, [x29, 128] ++ and w23, w5, 65535 ++ cmp w23, w0 ++ bcc .L822 ++.L823: ++ cmp w23, w20 ++ bcs .L825 ++ add x27, x27, :lo12:.LANCHOR3 ++ add x2, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x27, 1338] ++ ldrb w4, [x27, 1321] ++ ldrh w1, [x27, 1376] ++ ldrh w3, [x2, 3400] ++ mul w0, w0, w4 ++ sub w0, w0, w1, lsr 2 ++ cmp w3, w0 ++ bge .L818 ++ add w1, w3, w1, lsr 3 ++ strh w1, [x2, 3400] ++.L818: ++ ldr x0, [x29, 144] ++ tbz x0, 0, .L826 ++ and w25, w20, 65535 ++ cmp w23, w25 ++ bcs .L826 ++ adrp x24, .LANCHOR3 ++ add x27, x24, :lo12:.LANCHOR3 ++ mov w26, 65535 ++.L831: ++ ldrh w6, [x27, 1352] ++ mov w0, w6 ++ bl zftl_get_gc_node.part.10 ++ add w6, w6, 1 ++ strh w6, [x27, 1352] ++ cmp w26, w0, uxth ++ beq .L827 ++ mov w2, 0 ++ mov w1, 0 ++ bl gc_add_sblk ++ cbz w0, .L828 ++ add w5, w23, 1 ++ and w23, w5, 65535 ++ cmp w25, w23 ++ bhi .L828 ++.L829: ++ add x24, x24, :lo12:.LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x24, 1376] ++ ldrh w1, [x19, 3402] ++ cmp w1, w0, lsr 1 ++ bls .L826 ++ sub w0, w1, w0, lsr 3 ++ b .L917 ++.L814: ++ add x25, x25, :lo12:.LANCHOR3 ++ strh wzr, [x25, 1354] ++ b .L816 ++.L812: ++ strh wzr, [x26, 1354] ++ b .L816 ++.L815: ++ add w24, w24, 1 ++ and w24, w24, 65535 ++ b .L811 ++.L820: ++ strh wzr, [x25, 1356] ++ b .L823 ++.L822: ++ add w3, w24, 1 ++ and w24, w3, 65535 ++ b .L819 ++.L825: ++ add x1, x19, :lo12:.LANCHOR0 ++ add x27, x27, :lo12:.LANCHOR3 ++ ldrh w2, [x1, 3400] ++ ldrh w0, [x27, 1376] ++ cmp w2, w0 ++ bls .L818 ++ sub w0, w2, w0, lsr 3 ++ strh w0, [x1, 3400] ++ b .L818 ++.L827: ++ strh wzr, [x27, 1352] ++.L830: ++ cmp w23, w25 ++ bcs .L829 ++ add x19, x19, :lo12:.LANCHOR0 ++ add x24, x24, :lo12:.LANCHOR3 ++ ldrh w1, [x19, 3402] ++ ldrh w0, [x24, 1376] ++ cmp w1, w0 ++ bcs .L826 ++ add w0, w1, w0, lsr 3 ++.L917: ++ strh w0, [x19, 3402] ++.L826: ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L862 ++ ldr w2, [x29, 144] ++ adrp x0, .LC99 ++ mov w4, w20 ++ mov w3, w23 ++ mov w1, w22 ++ add x0, x0, :lo12:.LC99 ++ bl printk ++.L862: ++ mov w0, w23 ++ b .L806 ++.L828: ++ add w21, w21, 1 ++ and w21, w21, 65535 ++ cmp w25, w21 ++ bhi .L831 ++ b .L830 ++.L810: ++ adrp x24, .LANCHOR3 ++ add x0, x24, :lo12:.LANCHOR3 ++ cmp w20, 1 ++ ldrb w25, [x0, 1321] ++ ldrh w0, [x0, 1338] ++ mul w25, w25, w0 ++ and w25, w25, 65535 ++ bne .L832 ++ cbz w1, .L832 ++ ldrh w2, [x2, 80] ++ mov w0, 65535 ++ cmp w2, w0 ++ beq .L865 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 5522] ++ sub w25, w25, w0 ++ and w25, w25, 65535 ++.L865: ++ mov w20, 8 ++.L832: ++ ldr w0, [x29, 144] ++ add x2, x19, :lo12:.LANCHOR0 ++ add x3, x24, :lo12:.LANCHOR3 ++ and w0, w0, 1 ++ str w0, [x29, 136] ++ ldr x0, [x29, 144] ++ strh wzr, [x2, 5608] ++ strh wzr, [x3, 1378] ++ tbz x0, 0, .L866 ++ ldrh w0, [x2, 3374] ++ ldrh w3, [x3, 1380] ++ cmp w0, w3, lsr 2 ++ bhi .L834 ++ ldrh w2, [x2, 3376] ++ cmp w2, w0 ++ bcs .L867 ++.L834: ++ cmp w1, 1 ++ bls .L836 ++.L838: ++ mov w23, 0 ++.L837: ++ add x27, x24, :lo12:.LANCHOR3 ++ add x8, x19, :lo12:.LANCHOR0 ++ and w0, w20, 65535 ++ mov w28, 0 ++ mov w26, 64 ++ str w0, [x29, 128] ++.L841: ++ ldrh w6, [x27, 1352] ++ str x8, [x29, 112] ++ mov w0, w6 ++ bl zftl_get_gc_node.part.10 ++ and w4, w0, 65535 ++ str w4, [x29, 120] ++ mov w1, 65535 ++ cmp w4, w1 ++ beq .L839 ++ add w6, w6, 1 ++ mov w2, w22 ++ strh w6, [x27, 1352] ++ mov w1, 0 ++ bl gc_add_sblk ++ ldr x8, [x29, 112] ++ cbz w0, .L840 ++ ldr w4, [x29, 120] ++ add w5, w23, 1 ++ ldr x0, [x8, 1120] ++ and w23, w5, 65535 ++ ubfiz x4, x4, 1, 16 ++ ldrh w0, [x0, x4] ++ add w3, w28, w0 ++ ldr w0, [x29, 128] ++ and w28, w3, 65535 ++ cmp w23, w0 ++ bcs .L835 ++ cmp w25, w28 ++ bcc .L835 ++ ldrh w0, [x8, 3376] ++ ldrh w1, [x8, 3374] ++ cmp w0, w1, lsl 1 ++ ble .L840 ++.L835: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x2, x24, :lo12:.LANCHOR3 ++ ldrh w1, [x0, 3376] ++ ldrh w2, [x2, 1380] ++ cmp w1, w2, lsr 2 ++ bhi .L863 ++ ldrh w0, [x0, 3374] ++ add w0, w0, 8 ++ cmp w1, w0 ++ ble .L833 ++.L863: ++ cmp w25, w28 ++ bls .L833 ++ add x27, x24, :lo12:.LANCHOR3 ++ mov w26, 64 ++ add x0, x27, 1360 ++ str x0, [x29, 128] ++ add x0, x19, :lo12:.LANCHOR0 ++ str x0, [x29, 120] ++ and w0, w20, 65535 ++ str w0, [x29, 112] ++.L844: ++ ldrh w6, [x27, 1354] ++ ldr x0, [x29, 128] ++ mov w1, w6 ++ bl _list_get_gc_head_node ++ and w7, w0, 65535 ++ str w7, [x29, 104] ++ mov w1, 65535 ++ cmp w7, w1 ++ beq .L842 ++ add w6, w6, 1 ++ mov w2, w22 ++ strh w6, [x27, 1354] ++ mov w1, 0 ++ bl gc_add_sblk ++ cbz w0, .L843 ++ ldr x0, [x29, 120] ++ add w5, w23, 1 ++ ldr w7, [x29, 104] ++ and w23, w5, 65535 ++ ldr x0, [x0, 1120] ++ ubfiz x7, x7, 1, 16 ++ ldrh w0, [x0, x7] ++ add w3, w28, w0 ++ ldr w0, [x29, 112] ++ and w28, w3, 65535 ++ cmp w23, w0 ++ bcs .L833 ++ cmp w25, w28 ++ bcs .L843 ++.L833: ++ ldr x0, [x29, 144] ++ tbz x0, 1, .L845 ++ add x7, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x7, 3378] ++ cmp w0, 32 ++ bls .L845 ++ cmp w28, w25 ++ bcs .L845 ++ add x27, x24, :lo12:.LANCHOR3 ++ mov w26, 64 ++ add x0, x27, 1368 ++ str x0, [x29, 128] ++ and w0, w20, 65535 ++ str w0, [x29, 120] ++.L851: ++ ldrh w8, [x27, 1356] ++ ldr x0, [x29, 128] ++ mov w1, w8 ++ str x7, [x29, 112] ++ bl _list_get_gc_head_node ++ and w4, w0, 65535 ++ mov w1, 65535 ++ cmp w4, w1 ++ beq .L846 ++ add w8, w8, 1 ++ strh w8, [x27, 1356] ++ cmp w20, 1 ++ ldr x7, [x29, 112] ++ bne .L847 ++ ldrb w1, [x27, 1321] ++ ldrh w2, [x27, 1338] ++ mul w2, w1, w2 ++ ldrh w1, [x27, 1376] ++ sub w1, w2, w1, lsr 3 ++ strh w1, [x7, 3406] ++.L847: ++ ldr x1, [x7, 1120] ++ ubfiz x4, x4, 1, 16 ++ stp x4, x7, [x29, 104] ++ ldrh w2, [x1, x4] ++ ldrh w1, [x7, 3406] ++ cmp w2, w1 ++ bcs .L848 ++ mov w2, w22 ++ mov w1, 0 ++ bl gc_add_sblk ++ ldr x7, [x29, 112] ++ cbz w0, .L849 ++ ldr x0, [x7, 1120] ++ add w5, w23, 1 ++ ldr x4, [x29, 104] ++ add w21, w21, 1 ++ and w23, w5, 65535 ++ and w21, w21, 65535 ++ ldrh w0, [x0, x4] ++ add w3, w28, w0 ++ ldr w0, [x29, 120] ++ and w28, w3, 65535 ++ cmp w23, w0 ++ bcs .L850 ++ cmp w25, w28 ++ bcs .L849 ++.L850: ++ cmp w23, w20 ++ bcc .L852 ++ cbnz w21, .L853 ++ add x1, x19, :lo12:.LANCHOR0 ++ add x0, x24, :lo12:.LANCHOR3 ++ ldrh w1, [x1, 3378] ++ ldrh w0, [x0, 1382] ++ cmp w1, w0 ++ bls .L853 ++.L852: ++ add x4, x24, :lo12:.LANCHOR3 ++ add x6, x19, :lo12:.LANCHOR0 ++ ldrh w2, [x4, 1376] ++ ldrh w0, [x4, 1338] ++ ldrb w4, [x4, 1321] ++ ldrh w1, [x6, 3406] ++ lsr w2, w2, 3 ++ mul w0, w0, w4 ++ sub w0, w0, w2 ++ cmp w1, w0 ++ bge .L845 ++ add w1, w1, w2 ++ strh w1, [x6, 3406] ++.L845: ++ ldr w0, [x29, 136] ++ cbz w0, .L826 ++ and w27, w20, 65535 ++ cmp w23, w27 ++ bcs .L826 ++ cmp w28, w25 ++ bcs .L826 ++ add x4, x24, :lo12:.LANCHOR3 ++ add x7, x19, :lo12:.LANCHOR0 ++ add x0, x4, 1360 ++ mov w26, 64 ++ str x0, [x29, 136] ++.L861: ++ ldrh w6, [x4, 1354] ++ ldr x0, [x29, 136] ++ mov w1, w6 ++ stp x7, x4, [x29, 120] ++ bl _list_get_gc_head_node ++ and w21, w0, 65535 ++ mov w1, 65535 ++ ldr x4, [x29, 128] ++ cmp w21, w1 ++ beq .L855 ++ ldr x7, [x29, 120] ++ ubfiz x21, x21, 1, 16 ++ add w6, w6, 1 ++ strh w6, [x4, 1354] ++ ldr x1, [x7, 1120] ++ ldrh w2, [x1, x21] ++ ldrh w1, [x7, 3404] ++ cmp w2, w1 ++ bcs .L856 ++ ldrh w2, [x4, 1380] ++ ldrh w1, [x7, 3376] ++ cmp w1, w2, lsr 1 ++ bls .L857 ++.L856: ++ stp x7, x4, [x29, 120] ++ mov w2, w22 ++ mov w1, 0 ++ bl gc_add_sblk ++ ldp x7, x4, [x29, 120] ++ cbz w0, .L858 ++ ldr x0, [x7, 1120] ++ add w5, w23, 1 ++ and w23, w5, 65535 ++ cmp w27, w23 ++ ldrh w0, [x0, x21] ++ add w3, w28, w0 ++ and w28, w3, 65535 ++ bls .L859 ++ cmp w25, w28 ++ bcs .L858 ++.L860: ++ add x24, x24, :lo12:.LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x24, 1376] ++ ldrh w1, [x19, 3404] ++ cmp w1, w0, lsr 1 ++ bls .L826 ++ sub w0, w1, w0, lsr 3 ++ strh w0, [x19, 3404] ++ b .L826 ++.L836: ++ add x5, x24, :lo12:.LANCHOR3 ++ lsr w0, w0, 2 ++ strh w0, [x5, 1352] ++ mov w0, 0 ++ bl zftl_get_gc_node.part.10 ++ and w1, w0, 65535 ++ mov w2, 65535 ++ cmp w1, w2 ++ beq .L838 ++ add x2, x19, :lo12:.LANCHOR0 ++ ubfiz x1, x1, 1, 16 ++ ldr x3, [x2, 1120] ++ ldrh w2, [x5, 1376] ++ ldrh w1, [x3, x1] ++ cmp w1, w2, lsr 2 ++ bcs .L838 ++ mov w1, 1 ++ mov w2, w22 ++ strh w1, [x5, 1352] ++ mov w1, 0 ++ bl gc_add_sblk ++ cmp w0, 0 ++ cset w23, ne ++ b .L837 ++.L839: ++ strh wzr, [x27, 1352] ++ b .L835 ++.L840: ++ sub w26, w26, #1 ++ ands w26, w26, 65535 ++ bne .L841 ++ b .L835 ++.L842: ++ cmp w6, 64 ++ bls .L833 ++ strh wzr, [x27, 1354] ++ b .L833 ++.L843: ++ sub w26, w26, #1 ++ ands w26, w26, 65535 ++ bne .L844 ++ b .L833 ++.L866: ++ mov w28, 0 ++ mov w23, 0 ++ b .L833 ++.L848: ++ add x0, x24, :lo12:.LANCHOR3 ++ strh wzr, [x0, 1356] ++ b .L850 ++.L846: ++ strh wzr, [x27, 1356] ++ b .L850 ++.L849: ++ sub w26, w26, #1 ++ ands w26, w26, 65535 ++ bne .L851 ++ b .L850 ++.L853: ++ add x24, x24, :lo12:.LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x24, 1376] ++ ldrb w1, [x24, 1321] ++ ldrh w2, [x19, 3406] ++ mul w1, w1, w0 ++ cmp w2, w1 ++ ble .L826 ++ sub w0, w2, w0, lsr 3 ++ strh w0, [x19, 3406] ++ b .L826 ++.L855: ++ cmp w6, 64 ++ bls .L857 ++ strh wzr, [x4, 1354] ++.L857: ++ cmp w23, w27 ++ bcc .L860 ++.L859: ++ add x24, x24, :lo12:.LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x24, 1376] ++ ldrb w0, [x24, 1321] ++ ldrh w2, [x19, 3404] ++ mul w0, w0, w1 ++ sub w0, w0, #32 ++ cmp w2, w0 ++ bge .L826 ++ add w1, w2, w1, lsr 3 ++ strh w1, [x19, 3404] ++ b .L826 ++.L858: ++ sub w26, w26, #1 ++ ands w26, w26, 65535 ++ bne .L861 ++ b .L857 ++.L867: ++ mov w28, 0 ++ mov w23, 0 ++ b .L835 ++ .size gc_search_src_blk, .-gc_search_src_blk ++ .align 2 ++ .global zftl_get_gc_node ++ .type zftl_get_gc_node, %function ++zftl_get_gc_node: ++ stp x29, x30, [sp, -16]! ++ and w1, w1, 65535 ++ and w0, w0, 65535 ++ cmp w1, 5 ++ add x29, sp, 0 ++ bne .L919 ++ mov w1, w0 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x0, x0, 1368 ++.L923: ++ bl _list_get_gc_head_node ++ b .L924 ++.L919: ++ cmp w1, 2 ++ bne .L921 ++ bl zftl_get_gc_node.part.10 ++.L924: ++ and w0, w0, 65535 ++ ldp x29, x30, [sp], 16 ++ ret ++.L921: ++ mov w1, w0 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x0, x0, 1360 ++ b .L923 ++ .size zftl_get_gc_node, .-zftl_get_gc_node ++ .align 2 ++ .global zftl_insert_free_list ++ .type zftl_insert_free_list, %function ++zftl_insert_free_list: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ and w1, w0, 65535 ++ adrp x3, .LANCHOR3 ++ add x3, x3, :lo12:.LANCHOR3 ++ add x29, sp, 0 ++ ldr x0, [x2, 1104] ++ add x0, x0, w1, uxth 2 ++ ldrb w0, [x0, 2] ++ ands w0, w0, 24 ++ bne .L926 ++ add x2, x2, 3368 ++ add x0, x3, 1384 ++.L930: ++ bl _insert_free_list ++ ldp x29, x30, [sp], 16 ++ ret ++.L926: ++ cmp w0, 16 ++ bne .L928 ++ add x2, x2, 3370 ++ add x0, x3, 1392 ++ b .L930 ++.L928: ++ add x2, x2, 3372 ++ add x0, x3, 1400 ++ b .L930 ++ .size zftl_insert_free_list, .-zftl_insert_free_list ++ .align 2 ++ .global zftl_insert_data_list ++ .type zftl_insert_data_list, %function ++zftl_insert_data_list: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ and w1, w0, 65535 ++ add x29, sp, 0 ++ ldr x0, [x2, 1104] ++ add x0, x0, w1, uxth 2 ++ ldrb w3, [x0, 2] ++ and w3, w3, 224 ++ cmp w3, 64 ++ bne .L932 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3374 ++ add x0, x0, 1344 ++.L936: ++ bl _insert_data_list ++.L931: ++ ldp x29, x30, [sp], 16 ++ ret ++.L932: ++ cmp w3, 96 ++ bne .L934 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3376 ++ add x0, x0, 1360 ++ b .L936 ++.L934: ++ cmp w3, 160 ++ bne .L931 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3378 ++ add x0, x0, 1368 ++ b .L936 ++ .size zftl_insert_data_list, .-zftl_insert_data_list ++ .align 2 ++ .global zftl_gc_get_free_sblk ++ .type zftl_gc_get_free_sblk, %function ++zftl_gc_get_free_sblk: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 65535 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x21, x19, :lo12:.LANCHOR0 ++ str x23, [sp, 48] ++ and w23, w1, 65535 ++ ldr x0, [x21, 1128] ++ ldrh w20, [x0, 588] ++ mov w0, 65535 ++ cmp w20, w0 ++ beq .L938 ++ cbnz w22, .L938 ++ mov w1, w20 ++ adrp x0, .LC100 ++ add x0, x0, :lo12:.LC100 ++ bl printk ++ ldr x0, [x21, 1128] ++ mov w1, -1 ++ strh w1, [x0, 588] ++.L939: ++ mov w0, w20 ++ ldr x23, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L938: ++ add x2, x19, :lo12:.LANCHOR0 ++ adrp x21, .LANCHOR3 ++ ldrh w0, [x2, 3370] ++ ldrh w1, [x2, 3372] ++ cmp w0, w1 ++ bcc .L940 ++ ldrh w2, [x2, 3368] ++ cmp w2, w0 ++ bls .L941 ++ cbz w1, .L941 ++.L940: ++ cbnz w22, .L942 ++ lsr w1, w1, 2 ++.L943: ++ add x2, x19, :lo12:.LANCHOR0 ++ add x0, x21, :lo12:.LANCHOR3 ++ add x2, x2, 3372 ++ add x0, x0, 1400 ++.L958: ++ bl _list_pop_index_node ++ and w20, w0, 65535 ++ mov w0, 65535 ++ cmp w20, w0 ++ bne .L946 ++ add x0, x19, :lo12:.LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR3 ++ mov w2, w23 ++ mov w1, w20 ++ ldrh w5, [x0, 3372] ++ ldrh w4, [x0, 3368] ++ adrp x0, .LC101 ++ ldr x3, [x21, 1384] ++ add x0, x0, :lo12:.LC101 ++ bl printk ++.L946: ++ cbz w22, .L939 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L939 ++ add x19, x19, :lo12:.LANCHOR0 ++ uxtw x3, w20 ++ lsl x0, x3, 2 ++ ldr x1, [x19, 1104] ++ ldr x6, [x19, 1120] ++ add x2, x1, x0 ++ ldr w4, [x1, x0] ++ ldrh w6, [x6, x3, lsl 1] ++ ldrb w2, [x2, 2] ++ ldrh w5, [x1, x0] ++ ubfx x4, x4, 11, 8 ++ mov w1, w20 ++ adrp x0, .LC102 ++ ubfx x3, x2, 3, 2 ++ and w5, w5, 2047 ++ ubfx x2, x2, 5, 3 ++ add x0, x0, :lo12:.LC102 ++ bl printk ++ b .L939 ++.L942: ++ mov w1, 7 ++ mul w1, w0, w1 ++ lsr w1, w1, 3 ++ b .L943 ++.L941: ++ lsr w1, w0, 3 ++ cmp w22, 0 ++ add x2, x19, :lo12:.LANCHOR0 ++ add x0, x21, :lo12:.LANCHOR3 ++ csel w1, w1, wzr, ne ++ add x2, x2, 3370 ++ add x0, x0, 1392 ++ b .L958 ++ .size zftl_gc_get_free_sblk, .-zftl_gc_get_free_sblk ++ .align 2 ++ .global zftl_get_free_sblk ++ .type zftl_get_free_sblk, %function ++zftl_get_free_sblk: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ and w21, w1, 65535 ++ cmp w21, 5 ++ bne .L960 ++ add x2, x19, :lo12:.LANCHOR0 ++ adrp x0, .LANCHOR3 ++ ldrh w3, [x2, 3370] ++ ldrh w1, [x2, 3372] ++ cmp w3, w1 ++ bcc .L961 ++ ldrh w2, [x2, 3368] ++ cmp w2, w3 ++ bls .L962 ++ cbz w1, .L962 ++.L961: ++ add x2, x19, :lo12:.LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3372 ++ lsr w1, w1, 1 ++.L981: ++ add x0, x0, 1400 ++ b .L980 ++.L962: ++ add x2, x19, :lo12:.LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3370 ++ add x0, x0, 1392 ++ mov w1, 0 ++.L980: ++ bl _list_pop_index_node ++ and w20, w0, 65535 ++ mov w0, 65535 ++ cmp w20, w0 ++ bne .L965 ++ add x19, x19, :lo12:.LANCHOR0 ++ adrp x0, .LANCHOR3+1384 ++ mov w2, w21 ++ mov w1, w20 ++ ldr x3, [x0, #:lo12:.LANCHOR3+1384] ++ adrp x0, .LC101 ++ ldrh w5, [x19, 3372] ++ add x0, x0, :lo12:.LC101 ++ ldrh w4, [x19, 3368] ++ bl printk ++ b .L965 ++.L960: ++ add x22, x19, :lo12:.LANCHOR0 ++ and w3, w0, 65535 ++ ldr x0, [x22, 1128] ++ ldrh w20, [x0, 590] ++ mov w0, 65535 ++ cmp w20, w0 ++ beq .L964 ++ cmp w21, 1 ++ beq .L964 ++ mov w1, w20 ++ adrp x0, .LC103 ++ add x0, x0, :lo12:.LC103 ++ bl printk ++ ldr x0, [x22, 1128] ++ mov w1, -1 ++ strh w1, [x0, 590] ++.L965: ++ mov w0, w20 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L964: ++ add x1, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x1, 3368] ++ ldrh w2, [x1, 3372] ++ cmp w0, w2 ++ bcc .L966 ++ ldrh w1, [x1, 3370] ++ cmp w1, w0 ++ bls .L967 ++ cbz w2, .L967 ++.L966: ++ bl get_ink_scaned_blk ++ and w20, w0, 65535 ++ mov w0, 65535 ++ cmp w20, w0 ++ bne .L965 ++ cmp w21, 1 ++ bne .L968 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w3, [x0, 3372] ++ lsr w3, w3, 1 ++.L968: ++ add x2, x19, :lo12:.LANCHOR0 ++ adrp x0, .LANCHOR3 ++ add x2, x2, 3372 ++ mov w1, w3 ++ add x0, x0, :lo12:.LANCHOR3 ++ b .L981 ++.L967: ++ lsr w0, w0, 1 ++ cmp w21, 1 ++ csel w3, w0, w3, eq ++ add x2, x19, :lo12:.LANCHOR0 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3368 ++ mov w1, w3 ++ add x0, x0, 1384 ++ b .L980 ++ .size zftl_get_free_sblk, .-zftl_get_free_sblk ++ .align 2 ++ .global zftl_remove_data_node ++ .type zftl_remove_data_node, %function ++zftl_remove_data_node: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ and w1, w0, 65535 ++ add x29, sp, 0 ++ ldr x0, [x2, 1104] ++ add x0, x0, w1, uxth 2 ++ ldrb w3, [x0, 2] ++ and w3, w3, 224 ++ cmp w3, 64 ++ bne .L983 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3374 ++ add x0, x0, 1344 ++.L987: ++ bl _list_remove_node ++.L982: ++ ldp x29, x30, [sp], 16 ++ ret ++.L983: ++ cmp w3, 96 ++ bne .L985 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3376 ++ add x0, x0, 1360 ++ b .L987 ++.L985: ++ cmp w3, 160 ++ bne .L982 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3378 ++ add x0, x0, 1368 ++ b .L987 ++ .size zftl_remove_data_node, .-zftl_remove_data_node ++ .align 2 ++ .global zftl_remove_free_node ++ .type zftl_remove_free_node, %function ++zftl_remove_free_node: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ and w1, w0, 65535 ++ adrp x3, .LANCHOR3 ++ add x3, x3, :lo12:.LANCHOR3 ++ add x29, sp, 0 ++ ldr x0, [x2, 1104] ++ add x0, x0, w1, uxth 2 ++ ldrb w0, [x0, 2] ++ ands w0, w0, 24 ++ bne .L989 ++ add x2, x2, 3368 ++ add x0, x3, 1384 ++.L993: ++ bl _list_remove_node ++ ldp x29, x30, [sp], 16 ++ ret ++.L989: ++ cmp w0, 16 ++ bne .L991 ++ add x2, x2, 3370 ++ add x0, x3, 1392 ++ b .L993 ++.L991: ++ add x2, x2, 3372 ++ add x0, x3, 1400 ++ b .L993 ++ .size zftl_remove_free_node, .-zftl_remove_free_node ++ .align 2 ++ .global zftl_list_update_data_list ++ .type zftl_list_update_data_list, %function ++zftl_list_update_data_list: ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ stp x29, x30, [sp, -16]! ++ and w1, w0, 65535 ++ add x29, sp, 0 ++ ldr x0, [x2, 1104] ++ add x0, x0, w1, uxth 2 ++ ldrb w3, [x0, 2] ++ and w3, w3, 224 ++ cmp w3, 64 ++ bne .L995 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3374 ++ add x0, x0, 1344 ++.L999: ++ bl _list_update_data_list ++.L994: ++ ldp x29, x30, [sp], 16 ++ ret ++.L995: ++ cmp w3, 96 ++ bne .L997 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3376 ++ add x0, x0, 1360 ++ b .L999 ++.L997: ++ cmp w3, 160 ++ bne .L994 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x2, x2, 3378 ++ add x0, x0, 1368 ++ b .L999 ++ .size zftl_list_update_data_list, .-zftl_list_update_data_list ++ .align 2 ++ .global print_list_info ++ .type print_list_info, %function ++print_list_info: ++ sub sp, sp, #96 ++ stp x29, x30, [sp, 32] ++ add x29, sp, 32 ++ stp x19, x20, [sp, 48] ++ mov x19, x0 ++ stp x21, x22, [sp, 64] ++ stp x23, x24, [sp, 80] ++ ldrh w2, [x1] ++ ldr x1, [x0] ++ adrp x0, .LC104 ++ add x0, x0, :lo12:.LC104 ++ bl printk ++ ldr x19, [x19] ++ cbz x19, .L1000 ++ adrp x21, .LANCHOR0 ++ mov x24, -6148914691236517206 ++ adrp x23, .LC105 ++ adrp x22, .LANCHOR3 ++ add x21, x21, :lo12:.LANCHOR0 ++ add x23, x23, :lo12:.LC105 ++ add x22, x22, :lo12:.LANCHOR3 ++ mov w20, 0 ++ movk x24, 0xaaab, lsl 0 ++.L1003: ++ ldr x2, [x21, 1040] ++ ldr x1, [x21, 1104] ++ sub x2, x19, x2 ++ ldr x8, [x21, 1120] ++ asr x2, x2, 1 ++ ldrh w5, [x19, 4] ++ ldrh w4, [x19, 2] ++ mul x2, x2, x24 ++ and x7, x2, 65535 ++ and w2, w2, 65535 ++ lsl x0, x7, 2 ++ add x3, x1, x0 ++ ldrh w7, [x8, x7, lsl 1] ++ ldrb w6, [x3, 2] ++ ldrh w3, [x19] ++ str w7, [sp, 16] ++ ldrh w7, [x1, x0] ++ and w7, w7, 2047 ++ str w7, [sp, 8] ++ ubfx x7, x6, 3, 2 ++ ubfx x6, x6, 5, 3 ++ ldr w0, [x1, x0] ++ mov w1, w20 ++ ubfx x0, x0, 11, 8 ++ str w0, [sp] ++ mov x0, x23 ++ bl printk ++ ldrh w19, [x19] ++ mov w0, 65535 ++ cmp w19, w0 ++ beq .L1000 ++ ldr x0, [x21, 1040] ++ mov w1, 6 ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ umaddl x19, w19, w1, x0 ++ ldrh w0, [x22, 1408] ++ cmp w0, w20 ++ bcs .L1003 ++.L1000: ++ ldp x19, x20, [sp, 48] ++ ldp x21, x22, [sp, 64] ++ ldp x23, x24, [sp, 80] ++ ldp x29, x30, [sp, 32] ++ add sp, sp, 96 ++ ret ++ .size print_list_info, .-print_list_info ++ .align 2 ++ .global dump_all_list_info ++ .type dump_all_list_info, %function ++dump_all_list_info: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ adrp x19, .LANCHOR3 ++ add x20, x20, :lo12:.LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR3 ++ add x1, x20, 3368 ++ add x0, x19, 1384 ++ bl print_list_info ++ add x1, x20, 3370 ++ add x0, x19, 1392 ++ bl print_list_info ++ add x1, x20, 3372 ++ add x0, x19, 1400 ++ bl print_list_info ++ add x1, x20, 3374 ++ add x0, x19, 1344 ++ bl print_list_info ++ add x1, x20, 3376 ++ add x0, x19, 1360 ++ bl print_list_info ++ add x1, x20, 3378 ++ add x0, x19, 1368 ++ bl print_list_info ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size dump_all_list_info, .-dump_all_list_info ++ .align 2 ++ .global ftl_tmp_into_update ++ .type ftl_tmp_into_update, %function ++ftl_tmp_into_update: ++ adrp x0, .LANCHOR0+3384 ++ ldr x0, [x0, #:lo12:.LANCHOR0+3384] ++ ldr w1, [x0, 16] ++ cmp w1, 2048 ++ bls .L1008 ++ ldr w2, [x0, 20] ++ add w2, w2, w1, lsr 11 ++ and w1, w1, 2047 ++ stp w1, w2, [x0, 16] ++.L1008: ++ ldr w1, [x0, 24] ++ cmp w1, 2048 ++ bls .L1009 ++ ldr w2, [x0, 28] ++ add w2, w2, w1, lsr 11 ++ and w1, w1, 2047 ++ stp w1, w2, [x0, 24] ++.L1009: ++ ldr w1, [x0, 32] ++ cmp w1, 1024 ++ bls .L1010 ++ ldr w2, [x0, 36] ++ add w2, w2, w1, lsr 10 ++ and w1, w1, 1023 ++ stp w1, w2, [x0, 32] ++.L1010: ++ ldr w1, [x0, 40] ++ cmp w1, 1024 ++ bls .L1007 ++ ldr w2, [x0, 44] ++ add w2, w2, w1, lsr 10 ++ and w1, w1, 1023 ++ stp w1, w2, [x0, 40] ++.L1007: ++ ret ++ .size ftl_tmp_into_update, .-ftl_tmp_into_update ++ .align 2 ++ .global ftl_get_blk_list_in_sblk ++ .type ftl_get_blk_list_in_sblk, %function ++ftl_get_blk_list_in_sblk: ++ adrp x5, .LANCHOR0 ++ add x5, x5, :lo12:.LANCHOR0 ++ and w9, w0, 65535 ++ mov w4, 0 ++ mov w0, 0 ++ mov w12, 24 ++ ldr x2, [x5, 1104] ++ add x2, x2, w9, uxth 2 ++ ldrb w11, [x2, 3] ++ adrp x2, .LANCHOR3 ++ add x7, x2, :lo12:.LANCHOR3 ++ mov x3, x2 ++.L1013: ++ ldrb w2, [x7, 1321] ++ cmp w4, w2 ++ blt .L1016 ++ mov w4, w0 ++ add x2, x3, :lo12:.LANCHOR3 ++ mov w5, -1 ++.L1017: ++ ldrb w3, [x2, 1321] ++ cmp w4, w3 ++ blt .L1018 ++ ret ++.L1016: ++ asr w2, w11, w4 ++ tbnz x2, 0, .L1014 ++ ldrb w2, [x7, 1306] ++ sbfiz x10, x0, 1, 32 ++ ldrb w6, [x5, 1205] ++ ldrh w13, [x7, 1304] ++ sub w6, w12, w6 ++ sdiv w8, w4, w2 ++ sub w6, w6, w13 ++ lsl w6, w8, w6 ++ madd w2, w9, w2, w6 ++ and w2, w2, 65535 ++ strh w2, [x1, x10] ++ ldrb w6, [x7, 1306] ++ cmp w6, 1 ++ bls .L1015 ++ sub w6, w6, #1 ++ and w6, w6, w4 ++ add w2, w2, w6 ++ strh w2, [x1, x10] ++.L1015: ++ add w0, w0, 1 ++.L1014: ++ add w4, w4, 1 ++ b .L1013 ++.L1018: ++ strh w5, [x1, w4, sxtw 1] ++ add w4, w4, 1 ++ b .L1017 ++ .size ftl_get_blk_list_in_sblk, .-ftl_get_blk_list_in_sblk ++ .align 2 ++ .global ftl_erase_phy_blk ++ .type ftl_erase_phy_blk, %function ++ftl_erase_phy_blk: ++ stp x29, x30, [sp, -48]! ++ mov w2, 24 ++ and w0, w0, 65535 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov w22, w1 ++ adrp x1, .LANCHOR0+1205 ++ stp x19, x20, [sp, 16] ++ ldrb w19, [x1, #:lo12:.LANCHOR0+1205] ++ adrp x1, .LANCHOR3 ++ add x3, x1, :lo12:.LANCHOR3 ++ mov x20, x1 ++ sub w19, w2, w19 ++ ldrh w2, [x3, 1304] ++ sub w2, w19, w2 ++ mov w19, 1 ++ lsl w19, w19, w2 ++ sub w19, w19, #1 ++ and w19, w19, w0 ++ asr w21, w0, w2 ++ ldrb w0, [x3, 1322] ++ sxth w19, w19 ++ cbz w0, .L1020 ++ ldrb w0, [x3, 1323] ++ cbnz w0, .L1020 ++ ldrh w2, [x3, 1410] ++ cmp w22, 0 ++ cset w1, eq ++ mov w0, w21 ++ mul w2, w2, w19 ++ bl flash_erase_block_en ++.L1020: ++ add x1, x20, :lo12:.LANCHOR3 ++ mov w0, w21 ++ ldrh w2, [x1, 1410] ++ mov w1, w22 ++ mul w2, w2, w19 ++ 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, -176]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov w22, w1 ++ stp x25, x26, [sp, 64] ++ and w25, w0, 65535 ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ ubfiz x21, x25, 2, 16 ++ stp x23, x24, [sp, 48] ++ adrp x26, .LANCHOR3 ++ stp x27, x28, [sp, 80] ++ mov x20, x0 ++ add x27, x29, 112 ++ add x24, x26, :lo12:.LANCHOR3 ++ ldr x1, [x1, 1104] ++ mov w19, 0 ++ add x1, x1, x21 ++ ldrb w28, [x1, 3] ++.L1026: ++ add x0, x26, :lo12:.LANCHOR3 ++ ldrb w1, [x0, 1412] ++ cmp w19, w1 ++ bge .L1037 ++ ldrb w1, [x0, 1306] ++ mov w23, 0 ++ ldrh w3, [x0, 1410] ++ mov w0, 0 ++ sub w4, w1, #1 ++ mul w6, w19, w1 ++ mul w5, w25, w1 ++ b .L1038 ++.L1028: ++ add w2, w6, w0 ++ asr w2, w28, w2 ++ tbnz x2, 0, .L1027 ++ and w2, w0, w4 ++ add w2, w2, w5 ++ mul w2, w2, w3 ++ str w2, [x27, w23, sxtw 2] ++ add w23, w23, 1 ++.L1027: ++ add w0, w0, 1 ++.L1038: ++ cmp w0, w1 ++ blt .L1028 ++ cmp w1, 4 ++ bne .L1029 ++ mov x3, 0 ++.L1030: ++ cmp w23, w3 ++ bgt .L1031 ++.L1032: ++ add w19, w19, 1 ++ b .L1026 ++.L1031: ++ ldr w2, [x27, x3, lsl 2] ++ mov w1, w22 ++ str x3, [x29, 104] ++ mov w0, w19 ++ bl flash_erase_block_en ++ ldr x3, [x29, 104] ++ add x3, x3, 1 ++ b .L1030 ++.L1029: ++ cmp w23, 2 ++ bne .L1033 ++ ldrb w0, [x24, 1322] ++ cbz w0, .L1034 ++ ldrb w0, [x24, 1323] ++ cbnz w0, .L1034 ++ ldp w2, w3, [x29, 112] ++ cmp w22, 0 ++ cset w1, eq ++ mov w0, w19 ++ bl flash_erase_duplane_block ++.L1034: ++ ldp w2, w3, [x29, 112] ++ mov w1, w22 ++ mov w0, w19 ++ bl flash_erase_duplane_block ++ b .L1032 ++.L1033: ++ cmp w23, 1 ++ bne .L1032 ++ ldrb w0, [x24, 1322] ++ cbz w0, .L1036 ++ ldrb w0, [x24, 1323] ++ cbnz w0, .L1036 ++ ldr w2, [x29, 112] ++ cmp w22, 0 ++ cset w1, eq ++ mov w0, w19 ++ bl flash_erase_block_en ++.L1036: ++ ldr w2, [x29, 112] ++ mov w1, w22 ++ mov w0, w19 ++ bl flash_erase_block_en ++ b .L1032 ++.L1037: ++ add x0, x20, :lo12:.LANCHOR0 ++ cbnz w22, .L1039 ++ ldr x2, [x0, 1104] ++ ldrh w1, [x2, x21] ++ add w3, w1, 1 ++ bfi w1, w3, 0, 11 ++ strh w1, [x2, x21] ++ ldr x1, [x0, 3384] ++ ldr x0, [x0, 1104] ++ ldr w2, [x1, 84] ++ ldrh w3, [x1, 96] ++ add w2, w2, 1 ++ str w2, [x1, 84] ++ ldrh w0, [x0, x21] ++ ubfx x0, x0, 0, 11 ++ and w2, w0, 65535 ++ cmp w3, w2 ++ bge .L1041 ++ strh w0, [x1, 96] ++.L1041: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L1039: ++ ldr x3, [x0, 1104] ++ ldr w1, [x3, x21] ++ ubfx x2, x1, 11, 8 ++ add w2, w2, 1 ++ bfi w1, w2, 11, 8 ++ str w1, [x3, x21] ++ ldr x1, [x0, 3384] ++ ldr x0, [x0, 1104] ++ ldr w2, [x1, 80] ++ add w2, w2, 1 ++ str w2, [x1, 80] ++ ldrh w2, [x1, 98] ++ ldr w0, [x0, x21] ++ ubfx x0, x0, 11, 8 ++ cmp w2, w0, uxtb ++ bcs .L1041 ++ strh w0, [x1, 98] ++ b .L1041 ++ .size ftl_erase_sblk, .-ftl_erase_sblk ++ .align 2 ++ .global ftl_alloc_sys_blk ++ .type ftl_alloc_sys_blk, %function ++ftl_alloc_sys_blk: ++ stp x29, x30, [sp, -32]! ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ mov x19, x0 ++ ldr x1, [x1, 3384] ++ ldrh w2, [x1, 136] ++ cmp w2, 63 ++ bls .L1051 ++ strh wzr, [x1, 136] ++.L1051: ++ ldrh w0, [x1, 112] ++ cbnz w0, .L1052 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1592 ++ mov w2, 1359 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1052: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w4, 65535 ++ ldr x1, [x0, 3384] ++.L1056: ++ ldrh w2, [x1, 136] ++ ubfiz x3, x2, 1, 16 ++ add x3, x3, 160 ++ add x3, x1, x3 ++.L1053: ++ cmp w2, 63 ++ ble .L1055 ++ strh wzr, [x1, 136] ++ b .L1056 ++.L1055: ++ ldrh w0, [x3], 2 ++ cmp w0, w4 ++ bne .L1058 ++ add w2, w2, 1 ++ b .L1053 ++.L1058: ++ add x3, x1, w2, sxtw 1 ++ mov w4, -1 ++ strh w4, [x3, 160] ++ strh w2, [x1, 136] ++ ldrh w2, [x1, 112] ++ sub w2, w2, #1 ++ strh w2, [x1, 112] ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ 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: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 65535 ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ mov x19, x0 ++ ldr x1, [x1, 3384] ++ ldrh w2, [x1, 138] ++ cmp w2, 63 ++ bls .L1061 ++ strh wzr, [x1, 138] ++.L1061: ++ ldrh w0, [x1, 112] ++ cmp w0, 63 ++ bls .L1062 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1616 ++ mov w2, 1386 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1062: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w3, 65535 ++ ldr x0, [x0, 3384] ++.L1066: ++ ldrh w1, [x0, 138] ++ ubfiz x2, x1, 1, 16 ++ add x2, x2, 160 ++ add x2, x0, x2 ++.L1063: ++ cmp w1, 63 ++ ble .L1065 ++ strh wzr, [x0, 138] ++ b .L1066 ++.L1065: ++ ldrh w4, [x2], 2 ++ cmp w4, w3 ++ bne .L1064 ++ add x2, x0, w1, sxtw 1 ++ strh w20, [x2, 160] ++ strh w1, [x0, 138] ++ ldrh w1, [x0, 112] ++ add w1, w1, 1 ++ strh w1, [x0, 112] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L1064: ++ add w1, w1, 1 ++ b .L1063 ++ .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 .L1079 ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ str x23, [sp, 48] ++ add x23, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ ubfiz x20, x2, 2, 16 ++ ldr x21, [x23, 1104] ++ add x22, x21, x20 ++ ldrb w1, [x22, 2] ++ tst w1, 224 ++ bne .L1069 ++ ldrb w0, [x0, 4] ++ bfi w1, w0, 5, 3 ++ strb w1, [x22, 2] ++ mov w0, w2 ++ bl zftl_remove_free_node ++ ldrb w0, [x22, 2] ++ ldr x1, [x23, 3384] ++ tbz x0, 3, .L1073 ++ ldrh w0, [x1, 116] ++ sub w0, w0, #1 ++ strh w0, [x1, 116] ++.L1074: ++ ldrb w0, [x22, 2] ++ and w0, w0, 224 ++ cmp w0, 160 ++ bne .L1076 ++ ldr w0, [x21, x20] ++ add x19, x19, :lo12:.LANCHOR0 ++ ubfx x1, x0, 11, 8 ++ add w1, w1, 1 ++ bfi w0, w1, 11, 8 ++ str w0, [x21, x20] ++ ldr x1, [x19, 3384] ++ ldrh w0, [x1, 120] ++ sub w0, w0, #1 ++ strh w0, [x1, 120] ++.L1069: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L1073: ++ tst w0, 24 ++ bne .L1075 ++ ldrh w0, [x1, 114] ++ sub w0, w0, #1 ++ strh w0, [x1, 114] ++ b .L1074 ++.L1075: ++ ldrh w0, [x1, 118] ++ sub w0, w0, #1 ++ strh w0, [x1, 118] ++ b .L1074 ++.L1076: ++ ldrh w1, [x21, x20] ++ cmp w0, 64 ++ add w2, w1, 1 ++ bfi w1, w2, 0, 11 ++ strh w1, [x21, x20] ++ bne .L1077 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldr x1, [x19, 3384] ++ ldrh w0, [x1, 122] ++ sub w0, w0, #1 ++ strh w0, [x1, 122] ++ b .L1069 ++.L1077: ++ cmp w0, 96 ++ bne .L1069 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldr x1, [x19, 3384] ++ ldrh w0, [x1, 124] ++ sub w0, w0, #1 ++ strh w0, [x1, 124] ++ b .L1069 ++.L1079: ++ 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: ++ stp x29, x30, [sp, -48]! ++ adrp x1, .LANCHOR0+1128 ++ and w0, w0, 65535 ++ add x29, sp, 0 ++ ldr x2, [x1, #:lo12:.LANCHOR0+1128] ++ adrp x1, .LANCHOR3 ++ add x4, x1, :lo12:.LANCHOR3 ++ stp x19, x20, [sp, 16] ++ str x21, [sp, 32] ++ mov x19, x1 ++ ldrh w3, [x4, 1376] ++ ldrb w4, [x4, 1321] ++ mul w3, w3, w4 ++ cmp w0, w3 ++ bge .L1083 ++ add x2, x2, 16 ++.L1084: ++ ldrb w1, [x2, 9] ++ sdiv w20, w0, w1 ++ msub w0, w20, w1, w0 ++ add x0, x2, w0, uxth 1 ++ ldrh w21, [x0, 16] ++ mov w0, 65535 ++ cmp w21, w0 ++ bne .L1085 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1640 ++ mov w2, 1945 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1085: ++ add x1, x19, :lo12:.LANCHOR3 ++ ldrh w0, [x1, 1410] ++ madd w0, w0, w21, w20 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L1083: ++ sub w0, w0, w3 ++ add x2, x2, 48 ++ and w0, w0, 65535 ++ b .L1084 ++ .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, .LANCHOR3 ++ add x1, x1, :lo12:.LANCHOR3 ++ and x3, x0, 255 ++ add x2, x1, 1416 ++ ldr x4, [x1, 1928] ++ ldr x5, [x1, 1936] ++ ldrh w2, [x2, x3, lsl 1] ++ mov w3, 65535 ++.L1088: ++ cmp w2, w3 ++ bne .L1091 ++ mov w0, -1 ++ ret ++.L1091: ++ uxtw x1, w2 ++ ldr w6, [x4, x1, lsl 2] ++ cmp w0, w6 ++ bne .L1089 ++ stp x29, x30, [sp, -16]! ++ mov w0, w2 ++ add x29, sp, 0 ++ bl ftl_get_ppa_from_index ++ ldp x29, x30, [sp], 16 ++ ret ++.L1089: ++ ldrh w2, [x5, x1, lsl 1] ++ b .L1088 ++ .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, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ ldrh w1, [x0] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L1097 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1664 ++ mov w2, 2088 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1097: ++ adrp x20, .LANCHOR3 ++ add x0, x20, :lo12:.LANCHOR3 ++ ldrh w1, [x19, 2] ++ ldrh w0, [x0, 1376] ++ cmp w1, w0 ++ bne .L1098 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1664 ++ mov w2, 2089 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1098: ++ ldrh w0, [x19, 6] ++ cbnz w0, .L1099 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1664 ++ mov w2, 2090 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1099: ++ ldrb w0, [x19, 5] ++ mov w2, 65535 ++ add x0, x0, 8 ++ ldrh w3, [x19, x0, lsl 1] ++ add x0, x20, :lo12:.LANCHOR3 ++ ldrb w4, [x0, 1321] ++.L1100: ++ cmp w3, w2 ++ ldrb w1, [x19, 5] ++ beq .L1102 ++ add x20, x20, :lo12:.LANCHOR3 ++ add w1, w1, 1 ++ and w1, w1, 255 ++ ldrh w2, [x19, 2] ++ strb w1, [x19, 5] ++ cmp w4, w1 ++ ldrh w0, [x20, 1410] ++ mul w0, w0, w3 ++ ldrh w3, [x19, 6] ++ sub w3, w3, #1 ++ strh w3, [x19, 6] ++ ldrh w3, [x19, 10] ++ orr w0, w0, w2 ++ add w3, w3, 1 ++ strh w3, [x19, 10] ++ bne .L1096 ++ add w2, w2, 1 ++ strb wzr, [x19, 5] ++ strh w2, [x19, 2] ++.L1096: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L1102: ++ add w1, w1, 1 ++ and w1, w1, 255 ++ strb w1, [x19, 5] ++ cmp w1, w4 ++ bne .L1101 ++ ldrh w0, [x19, 2] ++ strb wzr, [x19, 5] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++.L1101: ++ ldrb w0, [x19, 5] ++ add x0, x0, 8 ++ ldrh w3, [x19, x0, lsl 1] ++ b .L1100 ++ .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 ++ and w0, w0, 65535 ++ mov w1, 65533 ++ mov w20, w0 ++ sub w0, w0, #1 ++ cmp w1, w0, uxth ++ bcs .L1106 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1688 ++ mov w2, 2125 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1106: ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, 0 ++ mov w0, w20 ++ bl ftl_erase_phy_blk ++ ldr x0, [x19, 3384] ++ ldrh w0, [x0, 130] ++ bl ftl_free_sys_blk ++ ldr x0, [x19, 3384] ++ strh w20, [x0, 130] ++ strh wzr, [x0, 140] ++ mov w0, 0 ++ 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, .LANCHOR3 ++ add x3, x1, :lo12:.LANCHOR3 ++ ldrh w2, [x3, 1944] ++ cmp w2, 4 ++ bhi .L1109 ++ cbnz w0, .L1109 ++ add w2, w2, 1 ++ strh w2, [x3, 1944] ++ ret ++.L1109: ++ add x1, x1, :lo12:.LANCHOR3 ++ adrp x0, .LANCHOR0 ++ mov x2, 0 ++ mov w3, 0 ++ mov w9, 65535 ++ strh wzr, [x1, 1944] ++ add x1, x0, :lo12:.LANCHOR0 ++ ldrh w6, [x1, 1096] ++ ldr x8, [x1, 1104] ++ ldr x7, [x1, 1120] ++ mov w1, 0 ++.L1111: ++ cmp w6, w2, uxth ++ bhi .L1114 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldr x2, [x0, 1128] ++ ldr x0, [x0, 3384] ++ str w3, [x2, 524] ++ str w1, [x2, 528] ++ ldrh w0, [x0, 120] ++ cbz w0, .L1108 ++ udiv w1, w1, w0 ++ str w1, [x2, 532] ++.L1108: ++ ret ++.L1114: ++ ldrh w4, [x7, x2, lsl 1] ++ cmp w4, w9 ++ beq .L1112 ++ add x5, x8, x2, lsl 2 ++ ldrb w5, [x5, 2] ++ and w5, w5, 224 ++ cmp w5, 160 ++ bne .L1113 ++ add w1, w1, w4 ++.L1112: ++ add x2, x2, 1 ++ b .L1111 ++.L1113: ++ add w3, w3, w4 ++ b .L1112 ++ .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: ++ adrp x3, .LANCHOR3+1946 ++ ldrb w3, [x3, #:lo12:.LANCHOR3+1946] ++ cmp w3, 8 ++ bls .L1123 ++ and w0, w0, 255 ++ cmp x2, 0 ++ ccmp w0, 2, 0, ne ++ bne .L1121 ++ stp x29, x30, [sp, -32]! ++ mov x0, x2 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ mov x19, x1 ++ mov w1, 21320 ++ movk w1, 0x4841, lsl 16 ++ str w1, [x19] ++ mov w1, 1024 ++ bl js_hash ++ str w0, [x19, 4] ++ mov w0, 0 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L1121: ++ stp wzr, wzr, [x1] ++.L1123: ++ 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: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ and w19, w0, 65535 ++ mov w0, w19 ++ bl zftl_list_update_data_list ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ ubfiz x19, x19, 1, 16 ++ ldr x0, [x1, 1120] ++ ldrh w0, [x0, x19] ++ cbnz w0, .L1128 ++ mov w0, 1 ++ str w0, [x1, 3396] ++.L1126: ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L1128: ++ mov w0, 0 ++ b .L1126 ++ .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, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 65535 ++ mov w0, 65535 ++ cmp w20, w0 ++ beq .L1131 ++ adrp x2, .LANCHOR0 ++ add x2, x2, :lo12:.LANCHOR0 ++ uxtw x1, w20 ++ lsl x3, x1, 1 ++ ldr x4, [x2, 1120] ++ ldrh w0, [x4, x3] ++ cbnz w0, .L1132 ++ ldr x0, [x2, 1104] ++ mov w2, 0 ++ add x1, x0, x1, lsl 2 ++ adrp x0, .LC106 ++ add x0, x0, :lo12:.LC106 ++ ldrb w3, [x1, 2] ++ mov w1, w20 ++ ubfx x3, x3, 5, 3 ++ bl printk ++.L1137: ++ mov w0, 0 ++ b .L1130 ++.L1132: ++ sub w0, w0, #1 ++ strh w0, [x4, x3] ++.L1131: ++ adrp x19, .LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR3 ++ ldrh w0, [x19, 1280] ++ cmp w20, w0 ++ beq .L1137 ++ mov w1, 65535 ++ cmp w0, w1 ++ bne .L1134 ++ strh w20, [x19, 1280] ++ b .L1137 ++.L1134: ++ bl ftl_vpn_update ++ cmp w0, 0 ++ ldrh w2, [x19, 1948] ++ cset w0, ne ++ add x1, x19, 1288 ++ ldrh w3, [x19, 1280] ++ add w2, w2, 1 ++ strh w20, [x19, 1280] ++ and w2, w2, 65535 ++ cmp w2, 7 ++ csel w2, w2, wzr, ls ++ strh w2, [x19, 1948] ++ and x2, x2, 65535 ++ strh w3, [x1, x2, lsl 1] ++.L1130: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ 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, .LANCHOR3 ++ add x6, x3, :lo12:.LANCHOR3 ++ add x5, x6, 1416 ++ and x4, x0, 255 ++ and w2, w2, 65535 ++ ldr x10, [x6, 1928] ++ ldrh w5, [x5, x4, lsl 1] ++ ldr x11, [x6, 1936] ++ mov w6, 65535 ++ mov w9, w6 ++.L1140: ++ cmp w5, w9 ++ beq .L1144 ++ uxtw x8, w5 ++ lsl x7, x8, 2 ++ add x12, x10, x7 ++ ldr w7, [x10, x7] ++ cmp w0, w7 ++ lsl x7, x8, 1 ++ bne .L1141 ++ mov w5, -1 ++ str w5, [x12] ++ cmp w6, w9 ++ add x5, x3, :lo12:.LANCHOR3 ++ bne .L1142 ++ ldr x6, [x5, 1936] ++ add x5, x5, 1416 ++ ldrh w6, [x6, x7] ++ strh w6, [x5, x4, lsl 1] ++.L1143: ++ add x5, x3, :lo12:.LANCHOR3 ++ mov w6, -1 ++ ldr x5, [x5, 1936] ++ strh w6, [x5, x8, lsl 1] ++.L1144: ++ add x3, x3, :lo12:.LANCHOR3 ++ uxtw x5, w2 ++ cmn w1, #1 ++ ldr x6, [x3, 1928] ++ str w0, [x6, x5, lsl 2] ++ add x0, x3, 1416 ++ ldrh w6, [x0, x4, lsl 1] ++ strh w2, [x0, x4, lsl 1] ++ ldr x0, [x3, 1936] ++ strh w6, [x0, x5, lsl 1] ++ beq .L1151 ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LANCHOR0+1205 ++ add x29, sp, 0 ++ ldrb w2, [x0, #:lo12:.LANCHOR0+1205] ++ mov w0, 24 ++ ldrh w4, [x3, 1304] ++ sub w0, w0, w2 ++ sub w2, w0, w4 ++ mov w0, 1 ++ lsr w1, w1, w4 ++ lsl w0, w0, w2 ++ sub w0, w0, #1 ++ and w1, w0, w1 ++ ldrb w0, [x3, 1306] ++ udiv w0, w1, w0 ++ bl ftl_vpn_decrement ++ mov w0, -1 ++ ldp x29, x30, [sp], 16 ++ ret ++.L1142: ++ ldr x5, [x5, 1936] ++ ldrh w7, [x5, x7] ++ strh w7, [x5, w6, uxtw 1] ++ b .L1143 ++.L1141: ++ mov w6, w5 ++ ldrh w5, [x11, x7] ++ b .L1140 ++.L1151: ++ mov w0, -1 ++ 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 x6, .LANCHOR0 ++ add x1, x6, :lo12:.LANCHOR0 ++ adrp x3, .LANCHOR3 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ add x3, x3, :lo12:.LANCHOR3 ++ str x21, [sp, 32] ++ mov w7, 24 ++ mov w4, 1 ++ mov x19, x6 ++ ldrb w1, [x1, 1205] ++ ldrb w5, [x3, 1306] ++ ldrh w3, [x3, 1304] ++ sub w7, w7, w1 ++ lsl w1, w4, w1 ++ sub w1, w1, #1 ++ lsr w2, w0, w7 ++ and w1, w1, w2 ++ lsr w0, w0, w3 ++ sub w3, w7, w3 ++ and w1, w1, 255 ++ cmp w5, 1 ++ lsl w3, w4, w3 ++ sub w3, w3, #1 ++ and w3, w3, w0 ++ and w4, w3, 65535 ++ mul w2, w1, w5 ++ udiv w3, w3, w5 ++ and w20, w2, 255 ++ and w21, w3, 65535 ++ bls .L1155 ++ sub w2, w5, #1 ++ and w2, w2, w4 ++ add w2, w20, w2 ++ and w20, w2, 255 ++.L1155: ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 14, .L1156 ++ adrp x0, .LC107 ++ and w3, w3, 65535 ++ mov w2, w20 ++ add x0, x0, :lo12:.LC107 ++ bl printk ++.L1156: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x0, 1096] ++ cmp w1, w21 ++ bls .L1154 ++ ldr x0, [x0, 1104] ++ mov w2, 1 ++ lsl w2, w2, w20 ++ add x21, x0, w21, uxth 2 ++ ldrb w20, [x21, 3] ++ orr w2, w2, w20 ++ strb w2, [x21, 3] ++.L1154: ++ 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 gc_free_bad_sblk ++ .type gc_free_bad_sblk, %function ++gc_free_bad_sblk: ++ stp x29, x30, [sp, -96]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ adrp x24, .LANCHOR0 ++ add x24, x24, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 65535 ++ stp x19, x20, [sp, 16] ++ stp x25, x26, [sp, 64] ++ ldr w0, [x24, 5616] ++ str x27, [sp, 80] ++ cbz w0, .L1177 ++ mov w23, 20041 ++ add x27, x24, 3416 ++ mov w26, 0 ++ movk w23, 0x444b, lsl 16 ++.L1164: ++ adrp x21, .LANCHOR3 ++ add x2, x21, :lo12:.LANCHOR3 ++ ldrb w0, [x2, 1321] ++ cmp w0, w26 ++ bhi .L1174 ++.L1177: ++ 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 ++.L1174: ++ ldrb w3, [x2, 1306] ++ mov w1, 24 ++ ldrb w4, [x24, 1205] ++ ldrh w2, [x2, 1304] ++ and w0, w3, 65535 ++ sub w1, w1, w4 ++ cmp w3, 1 ++ sdiv w19, w26, w3 ++ sub w1, w1, w2 ++ lsl w19, w19, w1 ++ madd w19, w22, w0, w19 ++ and w19, w19, 65535 ++ bls .L1165 ++ sub w0, w0, #1 ++ and w0, w0, w26 ++ add w19, w19, w0 ++ and w19, w19, 65535 ++.L1165: ++ adrp x25, .LC108 ++ add x25, x25, :lo12:.LC108 ++ mov w20, 0 ++.L1166: ++ ldr w0, [x27, 2200] ++ cmp w20, w0 ++ bcc .L1173 ++ add w26, w26, 1 ++ and w26, w26, 65535 ++ b .L1164 ++.L1173: ++ add x0, x27, w20, sxtw 1 ++ ldrh w0, [x0, 2204] ++ cmp w0, w19 ++ bne .L1167 ++ mov w1, w19 ++ mov x0, x25 ++ bl printk ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrb w1, [x0, 1950] ++ cbnz w1, .L1168 ++ ldrb w0, [x0, 1322] ++ cbz w0, .L1169 ++.L1168: ++ ldr x0, [x24, 3384] ++ ldr w0, [x0, 156] ++ cmp w0, w23 ++ beq .L1170 ++.L1169: ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrh w0, [x0, 1304] ++ lsl w0, w19, w0 ++ bl ftl_mask_bad_block ++.L1170: ++ ldr w1, [x27, 2200] ++ mov w0, w20 ++.L1171: ++ cmp w0, w1 ++ bcc .L1172 ++ sub w1, w1, #1 ++ str w1, [x27, 2200] ++.L1167: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L1166 ++.L1172: ++ add w2, w0, 1 ++ add x0, x27, w0, sxtw 1 ++ add x3, x27, w2, sxtw 1 ++ ldrh w3, [x3, 2204] ++ strh w3, [x0, 2204] ++ and w0, w2, 65535 ++ b .L1171 ++ .size gc_free_bad_sblk, .-gc_free_bad_sblk ++ .align 2 ++ .global ftl_free_sblk ++ .type ftl_free_sblk, %function ++ftl_free_sblk: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ add x3, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ and x24, x0, 65535 ++ lsl x19, x24, 2 ++ mov x22, x24 ++ ldr x4, [x3, 1104] ++ add x21, x4, x19 ++ ldrb w0, [x21, 2] ++ ubfx x23, x0, 5, 3 ++ tbz x0, 3, .L1184 ++ ldr x5, [x3, 3384] ++ ldr w2, [x4, x19] ++ ldrh w1, [x4, x19] ++ ldrh w6, [x5, 74] ++ and w1, w1, 2047 ++ ubfx x7, x2, 11, 8 ++ ldrh w2, [x3, 1112] ++ add w6, w1, w6 ++ and w8, w6, 65535 ++ ldrh w6, [x5, 72] ++ adrp x5, .LANCHOR3 ++ add x5, x5, :lo12:.LANCHOR3 ++ add w6, w7, w6 ++ udiv w9, w8, w2 ++ and w6, w6, 65535 ++ ldrh w10, [x5, 1952] ++ add w9, w9, w6 ++ cmp w9, w10 ++ ble .L1185 ++ ldrh w6, [x3, 3370] ++ ldrh w8, [x3, 3378] ++ add w8, w8, w6 ++ ldrh w6, [x5, 1382] ++ add w6, w6, 8 ++ cmp w8, w6 ++ bge .L1186 ++.L1191: ++ mov w3, 2 ++ bfi w0, w3, 3, 2 ++ b .L1203 ++.L1186: ++ ldrh w6, [x3, 3374] ++ ldrh w8, [x3, 3368] ++ ldrh w5, [x5, 1380] ++ ldrh w3, [x3, 3376] ++ add w6, w6, w8 ++ add w5, w5, 8 ++ add w3, w6, w3 ++ cmp w3, w5 ++.L1207: ++ bge .L1191 ++ b .L1205 ++.L1185: ++ madd w6, w2, w6, w8 ++ ldrh w8, [x5, 1954] ++ cmp w6, w8 ++ ble .L1187 ++ ldrh w8, [x3, 3368] ++ ldrh w6, [x3, 3374] ++ add w6, w6, w8 ++ ldrh w8, [x3, 3376] ++ add w6, w6, w8 ++ ldrh w8, [x5, 1380] ++ add w9, w8, 8 ++ cmp w6, w9 ++ bge .L1189 ++.L1205: ++ and w0, w0, -25 ++.L1203: ++ strb w0, [x21, 2] ++.L1187: ++ ldrb w0, [x21, 2] ++ ands w0, w0, 24 ++ bne .L1192 ++ mul w2, w7, w2 ++ ldrh w0, [x4, x19] ++ add w2, w2, w2, lsl 1 ++ add w1, w1, w2, lsr 2 ++ lsr w2, w7, 3 ++ bfi w0, w1, 0, 11 ++ strh w0, [x4, x19] ++ ldr w0, [x4, x19] ++ bfi w0, w2, 11, 8 ++ str w0, [x4, x19] ++.L1193: ++ mov w0, w22 ++ bl zftl_remove_data_node ++ add x1, x20, :lo12:.LANCHOR0 ++ add w23, w23, 6 ++ and w23, w23, 7 ++ cmp w23, 4 ++ ldr x0, [x1, 1104] ++ add x19, x0, x19 ++ ldrb w0, [x19, 2] ++ and w0, w0, 31 ++ strb w0, [x19, 2] ++ ldr x0, [x1, 1120] ++ strh wzr, [x0, x24, lsl 1] ++ bhi .L1196 ++ mov w0, w22 ++ bl gc_free_bad_sblk ++.L1196: ++ ldrb w0, [x21, 2] ++ tbz x0, 3, .L1197 ++ add x20, x20, :lo12:.LANCHOR0 ++ ldr x0, [x20, 1128] ++ ldrh w1, [x0, 586] ++ cmp w1, w22 ++ bne .L1197 ++ mov w1, -1 ++ ldrh w2, [x0, 590] ++ strh w1, [x0, 586] ++ mov w1, 65535 ++ cmp w2, w1 ++ bne .L1197 ++ strh w22, [x0, 590] ++ mov w1, w22 ++ adrp x0, .LC109 ++ add x0, x0, :lo12:.LC109 ++ bl printk ++.L1183: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L1189: ++ ldrh w9, [x3, 3378] ++ ldrh w3, [x3, 3370] ++ add w9, w9, w3 ++ ldrh w3, [x5, 1382] ++ add w3, w3, 8 ++ cmp w9, w3 ++ blt .L1191 ++ add w8, w8, 24 ++ cmp w6, w8 ++ b .L1207 ++.L1192: ++ cmp w0, 16 ++ bne .L1193 ++ sdiv w2, w1, w2 ++ ldr w0, [x4, x19] ++ add w2, w2, w2, lsl 1 ++ add w2, w7, w2, lsr 2 ++.L1204: ++ bfi w0, w2, 11, 8 ++ asr w1, w1, 5 ++ str w0, [x4, x19] ++ bfi w0, w1, 0, 11 ++ strh w0, [x4, x19] ++ b .L1193 ++.L1184: ++ tst w0, 24 ++ bne .L1193 ++ ldrh w1, [x3, 3372] ++ cbnz w1, .L1193 ++ ldrh w7, [x3, 3370] ++ cmp w7, 15 ++ bhi .L1193 ++ ldrh w2, [x3, 3368] ++ ldrh w1, [x3, 3374] ++ add w1, w1, w2 ++ ldrh w2, [x3, 3376] ++ add w1, w1, w2 ++ adrp x2, .LANCHOR3 ++ add x2, x2, :lo12:.LANCHOR3 ++ ldrh w6, [x2, 1380] ++ add w6, w6, 16 ++ cmp w1, w6 ++ ble .L1193 ++ ldrh w5, [x3, 3378] ++ ldrh w1, [x2, 1382] ++ add w5, w5, w7 ++ add w1, w1, 8 ++ cmp w5, w1 ++ bge .L1193 ++ mov w1, 2 ++ bfi w0, w1, 3, 2 ++ strb w0, [x21, 2] ++ ldrh w0, [x3, 1112] ++ ldrh w1, [x4, x19] ++ and w1, w1, 2047 ++ sdiv w0, w1, w0 ++ add w2, w0, w0, lsl 1 ++ ldr w0, [x4, x19] ++ ubfx x3, x0, 11, 8 ++ add w2, w3, w2, lsr 2 ++ b .L1204 ++.L1197: ++ mov w0, w22 ++ bl zftl_insert_free_list ++ b .L1183 ++ .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, -80]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ add x24, x22, :lo12:.LANCHOR0 ++ adrp x23, .LC110 ++ add x21, x24, 3416 ++ add x23, x23, :lo12:.LC110 ++ stp x19, x20, [sp, 16] ++ stp x25, x26, [sp, 64] ++ mov w20, 0 ++.L1209: ++ ldrh w0, [x21, 56] ++ cmp w0, w20 ++ bhi .L1224 ++ strh wzr, [x21, 56] ++ 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 ++.L1224: ++ add x0, x21, w20, sxtw 1 ++ ldrh w25, [x0, 58] ++ ldr x0, [x24, 1120] ++ mov x19, x25 ++ lsl x26, x25, 1 ++ ldrh w2, [x0, x26] ++ cbz w2, .L1210 ++ mov w1, w25 ++ mov x0, x23 ++ bl printk ++.L1210: ++ add x0, x22, :lo12:.LANCHOR0 ++ ldr x1, [x0, 1120] ++ strh wzr, [x1, x26] ++ ldr x1, [x0, 1120] ++ ldrh w1, [x1, x26] ++ cbnz w1, .L1211 ++ ldr x0, [x0, 1104] ++ add x25, x0, x25, lsl 2 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L1212 ++ ldrb w2, [x25, 2] ++ adrp x0, .LC111 ++ mov w1, w19 ++ add x0, x0, :lo12:.LC111 ++ ubfx x2, x2, 5, 3 ++ bl printk ++.L1212: ++ ldrb w0, [x25, 2] ++ and w1, w0, 224 ++ cmp w1, 224 ++ beq .L1213 ++ tst w0, 192 ++ bne .L1214 ++.L1213: ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1712 ++ mov w2, 1363 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1214: ++ mov w0, w19 ++ bl ftl_free_sblk ++ add x0, x22, :lo12:.LANCHOR0 ++ ldr x0, [x0, 1128] ++ ldrh w2, [x0, 124] ++ cbz w2, .L1215 ++ add x3, x0, 392 ++ mov w1, 0 ++.L1217: ++ ldrh w4, [x3] ++ cmp w4, w19 ++ bne .L1216 ++ add x1, x0, w1, sxtw 1 ++ mov w3, -1 ++ sub w2, w2, #1 ++ strh w3, [x1, 392] ++ strh w2, [x0, 124] ++.L1215: ++ ldrh w2, [x0, 120] ++ cbz w2, .L1218 ++ add x3, x0, 136 ++ mov w1, 0 ++.L1220: ++ ldrh w4, [x3] ++ cmp w4, w19 ++ bne .L1219 ++ add x1, x0, w1, sxtw 1 ++ mov w3, -1 ++ sub w2, w2, #1 ++ strh w3, [x1, 136] ++ strh w2, [x0, 120] ++.L1218: ++ ldrh w2, [x0, 122] ++ cbz w2, .L1221 ++ add x3, x0, 264 ++ mov w1, 0 ++.L1223: ++ ldrh w4, [x3] ++ cmp w4, w19 ++ bne .L1222 ++ add x1, x0, w1, sxtw 1 ++ mov w3, -1 ++ sub w2, w2, #1 ++ strh w3, [x1, 264] ++ strh w2, [x0, 122] ++.L1221: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L1209 ++.L1216: ++ add w1, w1, 1 ++ add x3, x3, 2 ++ cmp w1, 64 ++ bne .L1217 ++ b .L1215 ++.L1219: ++ add w1, w1, 1 ++ add x3, x3, 2 ++ cmp w1, 64 ++ bne .L1220 ++ b .L1218 ++.L1222: ++ add w1, w1, 1 ++ add x3, x3, 2 ++ cmp w1, 64 ++ bne .L1223 ++ b .L1221 ++.L1211: ++ mov w2, 0 ++ mov w1, 1 ++ mov w0, w19 ++ bl gc_add_sblk ++ b .L1221 ++ .size gc_free_src_blk, .-gc_free_src_blk ++ .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 x1, [x19, 3384] ++ ldr x0, [x19, 1128] ++ ldr w8, [x19, 3364] ++ ldrh w7, [x19, 3376] ++ ldrh w2, [x1, 146] ++ ldrh w1, [x1, 148] ++ str w8, [sp, 24] ++ ldrh w6, [x19, 3374] ++ ldr w8, [x0, 528] ++ str w8, [sp, 16] ++ ldrh w5, [x19, 3372] ++ ldr w0, [x0, 524] ++ ldrh w4, [x19, 3370] ++ ldrh w3, [x19, 3368] ++ str w0, [sp, 8] ++ ldrh w0, [x19, 3378] ++ str w0, [sp] ++ adrp x0, .LC112 ++ add x0, x0, :lo12:.LC112 ++ bl printk ++ ldr x0, [x19, 3384] ++ ldrb w3, [x19, 3380] ++ ldr w4, [x0, 8] ++ ldr w5, [x0, 64] ++ ldr w1, [x0, 20] ++ ldr w2, [x0, 28] ++ adrp x0, .LC113 ++ add x0, x0, :lo12:.LC113 ++ bl printk ++ ldr x0, [x19, 3384] ++ ldr w1, [x0, 52] ++ ldr w2, [x0, 60] ++ ldr w3, [x0, 16] ++ adrp x0, .LC114 ++ add x0, x0, :lo12:.LC114 ++ lsr w3, w3, 11 ++ bl printk ++ ldr x0, [x19, 3384] ++ ldrh w2, [x0, 98] ++ ldrh w6, [x0, 72] ++ ldrh w5, [x0, 96] ++ ldrh w4, [x0, 92] ++ ldrh w3, [x0, 88] ++ ldrh w1, [x0, 74] ++ str w2, [sp, 16] ++ ldrh w2, [x0, 94] ++ str w2, [sp, 8] ++ ldrh w2, [x0, 90] ++ str w2, [sp] ++ ldp w7, w2, [x0, 80] ++ adrp x0, .LC115 ++ add x0, x0, :lo12:.LC115 ++ bl printk ++ ldrh w5, [x19, 3392] ++ adrp x0, .LC116 ++ ldrh w4, [x19, 3400] ++ add x0, x0, :lo12:.LC116 ++ ldrh w3, [x19, 3402] ++ ldrh w2, [x19, 3404] ++ ldrh w1, [x19, 3406] ++ bl printk ++ ldr x0, [x19, 1128] ++ ldr x1, [x19, 3384] ++ ldrh w4, [x0, 590] ++ ldrh w6, [x1, 150] ++ ldrh w3, [x0, 588] ++ ldrh w2, [x0, 586] ++ ldr w5, [x1, 156] ++ ldrh w1, [x0, 584] ++ adrp x0, .LC117 ++ add x0, x0, :lo12:.LC117 ++ bl printk ++ 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, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ str x21, [sp, 32] ++ cbnz x0, .L1250 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1728 ++ mov w2, 811 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ bl print_ftl_debug_info ++ mov w0, -1 ++.L1249: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L1253: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov x1, x20 ++ add x0, x19, 3408 ++ bl buf_add_tail ++ ldrb w3, [x20, 56] ++ ldr x1, [x19, 3384] ++ ldrb w0, [x19, 3381] ++ add w0, w0, 1 ++ ldr w2, [x1, 16] ++ and w0, w0, 255 ++ strb w0, [x19, 3381] ++ add w2, w2, w3 ++ str w2, [x1, 16] ++ ldr w2, [x1, 32] ++ add w2, w2, 1 ++ str w2, [x1, 32] ++ b .L1249 ++.L1250: ++ mov x20, x0 ++ adrp x0, .LANCHOR3 ++ add x1, x0, :lo12:.LANCHOR3 ++ mov x21, x0 ++ ldrb w2, [x20, 56] ++ ldrb w1, [x1, 1946] ++ cmp w2, w1 ++ bls .L1255 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1728 ++ mov w2, 818 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1255: ++ ldrb w1, [x20, 56] ++ adrp x19, .LANCHOR0 ++ cbz w1, .L1252 ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrb w0, [x0, 1946] ++ cmp w0, w1 ++ bcs .L1253 ++.L1252: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov x0, x20 ++ bl zbuf_free ++ ldrb w0, [x19, 3381] ++ b .L1249 ++ .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 x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ stp x19, x20, [sp, 16] ++ add x19, x21, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ add x22, x19, 1304 ++ mov w23, 20041 ++ str x25, [sp, 64] ++ movk w23, 0x444b, lsl 16 ++ mov w25, 0 ++.L1261: ++ add x1, x21, :lo12:.LANCHOR0 ++ ldrb w0, [x1, 3357] ++ cmp w0, 255 ++ bne .L1272 ++ 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 ++.L1272: ++ add x2, x1, 1304 ++ lsl x3, x0, 6 ++ add x24, x2, x3 ++ ubfiz x20, x0, 6, 8 ++ add x20, x2, x20 ++ ldrb w2, [x2, x3] ++ strb w2, [x1, 3357] ++ ldr w1, [x24, 52] ++ cmn w1, #1 ++ bne .L1262 ++ adrp x2, .LANCHOR3 ++ add x1, x2, :lo12:.LANCHOR3 ++ ldrb w3, [x1, 1950] ++ cbnz w3, .L1263 ++ ldrb w1, [x1, 1322] ++ cbz w1, .L1264 ++.L1263: ++ ldr x1, [x19, 3384] ++ ldr w1, [x1, 156] ++ cmp w1, w23 ++ beq .L1265 ++.L1264: ++ add x2, x2, :lo12:.LANCHOR3 ++ ldrb w3, [x19, 1205] ++ mov w1, 24 ++ add x4, x22, x0, lsl 6 ++ sub w1, w1, w3 ++ ldrh w5, [x2, 1304] ++ ldrb w2, [x2, 1306] ++ sub w3, w1, w5 ++ mov w1, 1 ++ lsl w1, w1, w3 ++ ldr w3, [x4, 40] ++ sub w1, w1, #1 ++ lsr w3, w3, w5 ++ and w1, w1, w3 ++ mov w3, 65535 ++ udiv w1, w1, w2 ++ ldr x2, [x19, 1128] ++ ldr w5, [x2, 560] ++ and w24, w1, 65535 ++ and w1, w1, w3 ++ cmp w5, w3 ++ bne .L1266 ++ str w1, [x2, 560] ++ ldr w3, [x4, 40] ++ str w3, [x2, 564] ++.L1266: ++ add x0, x22, x0, lsl 6 ++ ldp w2, w3, [x0, 36] ++ adrp x0, .LC118 ++ add x0, x0, :lo12:.LC118 ++ bl printk ++ ldr x0, [x19, 1128] ++ ldr w1, [x0, 556] ++ add w1, w1, 1 ++ str w1, [x0, 556] ++ ldrh w1, [x0, 16] ++ cmp w1, w24 ++ bne .L1267 ++ strh wzr, [x0, 22] ++.L1265: ++ mov x0, x20 ++ mov w25, 1 ++ bl ftl_write_buf ++ b .L1261 ++.L1267: ++ ldrh w1, [x0, 48] ++ cmp w1, w24 ++ bne .L1265 ++ strh wzr, [x0, 54] ++ b .L1265 ++.L1262: ++ cbz w25, .L1270 ++ ldp w1, w2, [x24, 36] ++ adrp x0, .LC119 ++ add x0, x0, :lo12:.LC119 ++ bl printk ++ mov x0, x20 ++ bl ftl_write_buf ++ b .L1261 ++.L1270: ++ ldrh w2, [x24, 48] ++ ldr w0, [x24, 36] ++ ldr w1, [x24, 44] ++ bl lpa_hash_update_ppa ++ ldrb w0, [x24, 2] ++ tbz x0, 2, .L1271 ++ and w0, w0, -3 ++ strb w0, [x24, 2] ++ b .L1261 ++.L1271: ++ mov x0, x20 ++ bl zbuf_free ++ b .L1261 ++ .size ftl_write_completed, .-ftl_write_completed ++ .align 2 ++ .global zftl_add_read_buf ++ .type zftl_add_read_buf, %function ++zftl_add_read_buf: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ cbnz x0, .L1278 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1744 ++ mov w2, 1151 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ bl print_ftl_debug_info ++.L1277: ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L1278: ++ mov x20, x0 ++ adrp x19, .LANCHOR3 ++ add x0, x19, :lo12:.LANCHOR3 ++ ldrb w1, [x20, 56] ++ ldrb w0, [x0, 1946] ++ cmp w1, w0 ++ bls .L1281 ++ adrp x1, .LANCHOR1 ++ add x1, x1, :lo12:.LANCHOR1 ++ add x1, x1, 1744 ++ mov w2, 1158 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1281: ++ add x19, x19, :lo12:.LANCHOR3 ++ mov x1, x20 ++ add x0, x19, 1956 ++ bl buf_add_tail ++ ldrb w0, [x19, 1957] ++ add w0, w0, 1 ++ strb w0, [x19, 1957] ++ b .L1277 ++ .size zftl_add_read_buf, .-zftl_add_read_buf ++ .align 2 ++ .global sblk_init ++ .type sblk_init, %function ++sblk_init: ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w1, -1 ++ strb w1, [x0, 3354] ++ strb w1, [x0, 3357] ++ strb w1, [x0, 3355] ++ strb w1, [x0, 3356] ++ 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, .LC120 ++ add x0, x0, :lo12:.LC120 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ str x21, [sp, 32] ++ ldrb w1, [x20, 3354] ++ bl printk ++ ldrb w19, [x20, 3354] ++ cmp w19, 255 ++ beq .L1284 ++ add x20, x20, 1304 ++ ubfiz x19, x19, 6, 8 ++ adrp x21, .LC121 ++ add x19, x20, x19 ++ add x21, x21, :lo12:.LC121 ++.L1286: ++ ldrb w2, [x19, 58] ++ mov x0, x21 ++ ldrb w1, [x19, 1] ++ ldr w3, [x19, 40] ++ bl printk ++ ldrb w19, [x19] ++ cmp w19, 255 ++ beq .L1284 ++ ubfiz x19, x19, 6, 8 ++ add x19, x20, x19 ++ b .L1286 ++.L1284: ++ 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 x5, .LANCHOR0 ++ add x5, x5, :lo12:.LANCHOR0 ++ ldrb w2, [x5, 3354] ++ cmp w2, 255 ++ beq .L1302 ++ adrp x6, .LANCHOR3 ++ add x6, x6, :lo12:.LANCHOR3 ++ ldrb w3, [x5, 1205] ++ mov w9, 24 ++ mov w4, 1 ++ adrp x12, .L1298 ++ ldrh w11, [x6, 1304] ++ sub w9, w9, w3 ++ ldrb w8, [x6, 1306] ++ lsl w3, w4, w3 ++ sub w7, w9, w11 ++ sub w3, w3, #1 ++ sub w8, w8, #1 ++ and w3, w3, 65535 ++ lsl w4, w4, w7 ++ and w8, w8, 65535 ++ sub w4, w4, #1 ++ asr w6, w0, w11 ++ and w4, w4, 65535 ++ and w6, w6, w8 ++ asr w10, w0, w9 ++ and w6, w6, w4 ++ and w10, w10, w3 ++ add x5, x5, 1304 ++ add x12, x12, :lo12:.L1298 ++.L1301: ++ add x13, x5, x2, lsl 6 ++ ldr w7, [x13, 40] ++ lsr w0, w7, w9 ++ and w0, w3, w0 ++ cmp w10, w0 ++ bne .L1296 ++ lsr w7, w7, w11 ++ and w7, w8, w7 ++ and w7, w4, w7 ++ ldrb w0, [x13, 58] ++ cmp w6, w7 ++ bne .L1297 ++ cmp w1, 1 ++ bne .L1294 ++ cmp w0, 7 ++ ccmp w0, 9, 4, ne ++ beq .L1296 ++ ret ++.L1297: ++ cmp w1, 3 ++ bhi .L1296 ++ ldrb w7, [x12,w1,uxtw] ++ adr x13, .Lrtx1298 ++ add x7, x13, w7, sxtb #2 ++ br x7 ++.Lrtx1298: ++ .section .rodata ++ .align 0 ++ .align 2 ++.L1298: ++ .byte (.L1294 - .Lrtx1298) / 4 ++ .byte (.L1299 - .Lrtx1298) / 4 ++ .byte (.L1300 - .Lrtx1298) / 4 ++ .byte (.L1294 - .Lrtx1298) / 4 ++ .text ++.L1299: ++ cmp w0, 7 ++ ccmp w0, 9, 4, ne ++ beq .L1296 ++ ret ++.L1300: ++ cmp w0, 11 ++ bne .L1294 ++.L1296: ++ lsl x2, x2, 6 ++ ldrb w2, [x5, x2] ++ cmp w2, 255 ++ bne .L1301 ++.L1302: ++ mov w0, 0 ++.L1294: ++ 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 x3, .LANCHOR0 ++ add x0, x3, :lo12:.LANCHOR0 ++ add x4, x0, 1304 ++ add x12, x0, 3355 ++ add x13, x0, 3356 ++ add x14, x0, 3357 ++ ldrb w7, [x0, 3354] ++ mov w5, 0 ++ ldrb w9, [x0, 3355] ++ mov w11, -1 ++ ldrb w10, [x0, 3357] ++ ldrb w8, [x0, 3356] ++.L1305: ++ cmp w7, 255 ++ beq .L1306 ++ sbfiz x6, x7, 6, 32 ++ sxtw x1, w7 ++ add x2, x4, x6 ++ ldrb w2, [x2, 58] ++ sub w2, w2, #12 ++ and w2, w2, 255 ++ cmp w2, 1 ++ bls .L1307 ++ cbz w5, .L1304 ++ strb w7, [x0, 3354] ++ ret ++.L1307: ++ lsl x5, x1, 6 ++ ldrb w7, [x4, x6] ++ add x2, x4, x5 ++ strb w11, [x4, x5] ++ ldrb w5, [x2, 59] ++ cmp w5, 1 ++ bne .L1310 ++ ldrh w2, [x2, 50] ++ cbnz w2, .L1318 ++ mov w2, w10 ++ mov x5, x14 ++.L1311: ++ cmp w2, 255 ++ bne .L1316 ++ add x3, x3, :lo12:.LANCHOR0 ++ add x1, x3, x1, lsl 6 ++ strb w7, [x3, 3354] ++ ldrb w0, [x1, 1305] ++ strb w0, [x5] ++ ret ++.L1310: ++ cbnz w5, .L1312 ++ ldr w2, [x2, 36] ++ cmn w2, #1 ++ beq .L1312 ++ mov w2, w9 ++ mov x5, x12 ++ b .L1311 ++.L1318: ++ mov w2, w8 ++ mov x5, x13 ++ b .L1311 ++.L1316: ++ mov w5, w2 ++ sbfiz x2, x2, 6, 32 ++ ldrb w2, [x4, x2] ++ cmp w2, 255 ++ bne .L1316 ++ add x1, x4, x1, lsl 6 ++ sbfiz x5, x5, 6, 32 ++ ldrb w1, [x1, 1] ++ strb w1, [x4, x5] ++.L1312: ++ mov w5, 1 ++ b .L1305 ++.L1306: ++ cbz w5, .L1304 ++ add x3, x3, :lo12:.LANCHOR0 ++ mov w0, -1 ++ strb w0, [x3, 3354] ++.L1304: ++ ret ++ .size queue_remove_completed_req, .-queue_remove_completed_req ++ .align 2 ++ .global pm_select_ram_region ++ .type pm_select_ram_region, %function ++pm_select_ram_region: ++ stp x29, x30, [sp, -32]! ++ adrp x1, .LANCHOR3 ++ add x0, x1, :lo12:.LANCHOR3 ++ mov x2, 0 ++ add x29, sp, 0 ++ add x3, x0, 1960 ++ mov w4, 65535 ++ str x19, [sp, 16] ++.L1330: ++ lsl x5, x2, 4 ++ and w19, w2, 65535 ++ ldrh w5, [x5, x3] ++ cmp w5, w4 ++ beq .L1329 ++ add x2, x2, 1 ++ cmp x2, 32 ++ bne .L1330 ++ add x0, x0, 1962 ++ mov w19, w2 ++ mov x3, x0 ++ mov w5, 32768 ++ mov w2, 0 ++.L1332: ++ ldrh w4, [x3] ++ tbnz x4, 15, .L1331 ++ cmp w4, w5 ++ bcs .L1331 ++ mov w5, w4 ++ mov w19, w2 ++.L1331: ++ add w2, w2, 1 ++ add x3, x3, 16 ++ and w2, w2, 65535 ++ cmp w2, 32 ++ bne .L1332 ++ cmp w19, 32 ++ bne .L1329 ++ add x1, x1, :lo12:.LANCHOR3 ++ mov w2, -1 ++ ldrb w3, [x1, 2472] ++ mov w1, 0 ++.L1334: ++ ldrh w5, [x0] ++ cmp w5, w2 ++ bcs .L1333 ++ ldrh w4, [x0, -2] ++ cmp w4, w3 ++ csel w2, w2, w5, eq ++ csel w19, w19, w1, eq ++.L1333: ++ add w1, w1, 1 ++ add x0, x0, 16 ++ and w1, w1, 65535 ++ cmp w1, 32 ++ bne .L1334 ++ cmp w19, 32 ++ bne .L1329 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ mov w2, 377 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1329: ++ mov w0, w19 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ 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, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x1, x19, :lo12:.LANCHOR0 ++ str x21, [sp, 32] ++ mov w20, 1024 ++ ldr x2, [x1, 1144] ++ ldrb w2, [x2, 12] ++ sdiv w20, w20, w2 ++ cbnz w0, .L1342 ++ add x1, x1, 4 ++ mov x0, 0 ++.L1343: ++ strh w0, [x1, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 512 ++ bne .L1343 ++.L1349: ++ adrp x21, .LANCHOR3 ++ add x21, x21, :lo12:.LANCHOR3 ++ add x21, x21, 2476 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w2, 2048 ++ mov w1, 255 ++ mov x0, x21 ++ add x19, x19, 4 ++ bl ftl_memset ++ mov x0, 0 ++.L1344: ++ ldrh w1, [x19, x0, lsl 1] ++ add x0, x0, 1 ++ cmp w20, w0, uxth ++ strh w1, [x21, w1, sxtw 1] ++ bhi .L1344 ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L1342: ++ cmp w0, 1 ++ bne .L1345 ++ add x1, x1, 4 ++ mov x2, 0 ++.L1348: ++ and w0, w2, 65535 ++ cmp x2, 3 ++ bls .L1346 ++ ubfiz w3, w0, 1, 15 ++ and w0, w0, 1 ++ add w0, w0, 2 ++ sub w0, w3, w0 ++ and w0, w0, 65535 ++.L1346: ++ strh w0, [x1, x2, lsl 1] ++ add x2, x2, 1 ++ cmp x2, 512 ++ bne .L1348 ++ b .L1349 ++.L1345: ++ cmp w0, 2 ++ bne .L1350 ++ add x1, x1, 4 ++ mov w2, 65535 ++ mov x0, 0 ++.L1352: ++ cmp x0, 2 ++ and w3, w0, 65535 ++ csel w3, w3, w2, cc ++ strh w3, [x1, x0, lsl 1] ++ add w2, w2, 2 ++ add x0, x0, 1 ++ and w2, w2, 65535 ++ cmp x0, 512 ++ bne .L1352 ++ b .L1349 ++.L1350: ++ cmp w0, 3 ++ bne .L1353 ++ add x1, x1, 4 ++ mov x2, 0 ++.L1356: ++ and w0, w2, 65535 ++ cmp x2, 5 ++ bls .L1354 ++ ubfiz w3, w0, 1, 15 ++ and w0, w0, 1 ++ add w0, w0, 4 ++ sub w0, w3, w0 ++ and w0, w0, 65535 ++.L1354: ++ strh w0, [x1, x2, lsl 1] ++ add x2, x2, 1 ++ cmp x2, 512 ++ bne .L1356 ++ b .L1349 ++.L1353: ++ cmp w0, 4 ++ bne .L1357 ++ mov w3, 1 ++ strh w0, [x1, 12] ++ mov w0, 5 ++ strh w3, [x1, 6] ++ strh w0, [x1, 14] ++ mov w3, 2 ++ mov w0, 7 ++ strh w3, [x1, 8] ++ strh w0, [x1, 16] ++ mov w3, 3 ++ mov w0, 8 ++ strh wzr, [x1, 4] ++ strh w0, [x1, 18] ++ add x1, x1, 20 ++ strh w3, [x1, -10] ++ mov w0, 8 ++.L1359: ++ and w3, w0, 1 ++ ubfiz w2, w0, 1, 15 ++ add w3, w3, 6 ++ add w0, w0, 1 ++ sub w2, w2, w3 ++ strh w2, [x1], 2 ++ and w0, w0, 65535 ++ cmp w0, 512 ++ bne .L1359 ++ b .L1349 ++.L1357: ++ cmp w0, 5 ++ bne .L1360 ++ add x2, x1, 4 ++ mov x0, 0 ++.L1361: ++ strh w0, [x2, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 16 ++ bne .L1361 ++ add x1, x1, 36 ++.L1362: ++ strh w0, [x1], 2 ++ add w0, w0, 2 ++ and w0, w0, 65535 ++ cmp w0, 1008 ++ bne .L1362 ++ b .L1349 ++.L1360: ++ cmp w0, 8 ++ bne .L1363 ++ add x1, x1, 4 ++ mov x0, 0 ++.L1364: ++ strh w0, [x0, x1] ++ add x0, x0, 2 ++ cmp x0, 1024 ++ bne .L1364 ++ b .L1349 ++.L1363: ++ cmp w0, 9 ++ bne .L1365 ++ mov w2, 1 ++ strh wzr, [x1, 4] ++ strh w2, [x1, 6] ++ mov w2, 2 ++ add x1, x1, 10 ++ strh w2, [x1, -2] ++ mov w0, 3 ++.L1366: ++ strh w0, [x1], 2 ++ add w0, w0, 2 ++ and w0, w0, 65535 ++ cmp w0, 1021 ++ bne .L1366 ++ b .L1349 ++.L1365: ++ cmp w0, 10 ++ bne .L1367 ++ add x2, x1, 4 ++ mov x0, 0 ++.L1368: ++ strh w0, [x2, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 63 ++ bne .L1368 ++ add x1, x1, 130 ++.L1369: ++ strh w0, [x1], 2 ++ add w0, w0, 2 ++ and w0, w0, 65535 ++ cmp w0, 961 ++ bne .L1369 ++ b .L1349 ++.L1367: ++ cmp w0, 11 ++ bne .L1370 ++ add x1, x19, :lo12:.LANCHOR0 ++ mov x0, 0 ++ add x2, x1, 4 ++.L1371: ++ strh w0, [x2, x0, lsl 1] ++ add x0, x0, 1 ++ cmp x0, 8 ++ bne .L1371 ++ add x1, x1, 20 ++.L1373: ++ and w3, w0, 1 ++ ubfiz w2, w0, 1, 15 ++ add w3, w3, 6 ++ add w0, w0, 1 ++ sub w2, w2, w3 ++ strh w2, [x1], 2 ++ and w0, w0, 65535 ++ cmp w0, 512 ++ bne .L1373 ++ b .L1349 ++.L1370: ++ cmp w0, 13 ++ bne .L1349 ++ add x2, x19, :lo12:.LANCHOR0 ++ mov x1, 0 ++ add x2, x2, 4 ++ mov w0, 0 ++.L1374: ++ strh w0, [x1, x2] ++ add w0, w0, 3 ++ and w0, w0, 65535 ++ add x1, x1, 2 ++ cmp w0, 1536 ++ bne .L1374 ++ b .L1349 ++ .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, -96]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ ldr w0, [x19, #:lo12:.LANCHOR2] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ str x27, [sp, 80] ++ tbz x0, 12, .L1397 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ adrp x0, .LC4 ++ add x1, x1, 24 ++ add x0, x0, :lo12:.LC4 ++ bl printk ++.L1397: ++ add x24, x19, :lo12:.LANCHOR2 ++ adrp x22, .LANCHOR0 ++ add x20, x22, :lo12:.LANCHOR0 ++ adrp x21, .LANCHOR5 ++ add x23, x21, :lo12:.LANCHOR5 ++ mov w2, 8 ++ ldrh w0, [x24, 34] ++ add x25, x20, 1208 ++ ldrb w1, [x24, 20] ++ add x27, x24, 9 ++ strh w0, [x20, 2] ++ mov w26, 2 ++ ldrh w0, [x24, 18] ++ strb wzr, [x20, 1153] ++ sdiv w0, w0, w1 ++ mov w1, 0 ++ strh w0, [x23, 172] ++ add x0, x20, 1196 ++ bl ftl_memset ++ add x0, x23, 176 ++ mov x23, 0 ++ mov w2, 32 ++ mov w1, 0 ++ bl ftl_memset ++.L1399: ++ ldrb w2, [x24, 8] ++ add x7, x20, 1024 ++ strb w26, [x23, x25] ++ add x1, x20, 1216 ++ add x1, x1, x23, lsl 3 ++ mov x0, x27 ++ bl flash_mem_cmp8 ++ cbnz w0, .L1398 ++ ldrb w2, [x20, 1153] ++ add x1, x21, :lo12:.LANCHOR5 ++ add x1, x1, 176 ++ add x7, x7, x2 ++ add w0, w2, 1 ++ strb w0, [x20, 1153] ++ and w0, w23, 255 ++ str wzr, [x1, x2, lsl 2] ++ strb w0, [x7, 172] ++ bl zftl_flash_enter_slc_mode ++.L1398: ++ add x23, x23, 1 ++ cmp x23, 4 ++ bne .L1399 ++ add x0, x19, :lo12:.LANCHOR2 ++ add x1, x0, 8 ++ ldrb w2, [x1, 8] ++ cmp w2, 2 ++ beq .L1400 ++.L1404: ++ add x19, x19, :lo12:.LANCHOR2 ++ add x22, x22, :lo12:.LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR5 ++ ldr x27, [sp, 80] ++ ldp x23, x24, [sp, 48] ++ ldrb w1, [x19, 21] ++ ldrb w0, [x22, 1153] ++ ldp x25, x26, [sp, 64] ++ mul w0, w0, w1 ++ ldrh w1, [x19, 22] ++ ldp x19, x20, [sp, 16] ++ mul w0, w0, w1 ++ strh w0, [x21, 208] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 96 ++ ret ++.L1400: ++ add x8, x22, :lo12:.LANCHOR0 ++ ldrh w7, [x1, 14] ++ add x11, x21, :lo12:.LANCHOR5 ++ ldrb w12, [x0, 8] ++ and w7, w7, 65280 ++ ldrb w13, [x1, 23] ++ ldrh w2, [x8, 2] ++ add x15, x8, 1216 ++ add x10, x0, 9 ++ add x11, x11, 176 ++ add x18, x8, 1024 ++ mov x9, 0 ++ mul w7, w7, w2 ++ ldrb w2, [x1, 13] ++ mul w7, w7, w2 ++ lsl w14, w7, 1 ++.L1403: ++ mov w2, w12 ++ add x1, x15, x9, lsl 3 ++ mov x0, x10 ++ bl flash_mem_cmp8 ++ cbnz w0, .L1401 ++ ldrb w0, [x8, 1153] ++ cmp w13, 0 ++ csel w2, w7, w14, eq ++ add w1, w0, 1 ++ strb w1, [x8, 1153] ++ str w2, [x11, x0, lsl 2] ++ add x0, x18, x0 ++ strb w9, [x0, 172] ++.L1401: ++ add x9, x9, 1 ++ cmp x9, 4 ++ bne .L1403 ++ b .L1404 ++ .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 w2, 512 ++ mov w1, 255 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ adrp x19, .LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR3 ++ add x0, x19, 1416 ++ bl ftl_memset ++ mov w1, 255 ++ ldrb w0, [x19, 1321] ++ ldrh w2, [x19, 1376] ++ mul w2, w2, w0 ++ ldr x0, [x19, 1936] ++ 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: ++ stp x29, x30, [sp, -32]! ++ adrp x0, .LANCHOR2 ++ add x29, sp, 0 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ stp x19, x20, [sp, 16] ++ tbz x0, 12, .L1417 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ adrp x0, .LC122 ++ mov w3, 0 ++ mov w2, 239 ++ add x1, x1, 48 ++ add x0, x0, :lo12:.LC122 ++ bl printk ++.L1417: ++ adrp x19, .LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR3 ++ add x20, x19, 1416 ++ mov w2, 512 ++ mov w1, 255 ++ mov x0, x20 ++ bl ftl_memset ++ ldrb w0, [x19, 1321] ++ mov w1, 255 ++ ldrh w2, [x19, 1376] ++ mul w2, w2, w0 ++ ldr x0, [x19, 1936] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ mov w1, 0 ++.L1418: ++ ldrh w0, [x19, 1376] ++ ldrb w2, [x19, 1321] ++ mul w0, w0, w2 ++ cmp w1, w0, lsl 1 ++ blt .L1420 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L1420: ++ ldr x0, [x19, 1928] ++ uxtw x2, w1 ++ ldr w0, [x0, x2, lsl 2] ++ cmn w0, #1 ++ beq .L1419 ++ and x0, x0, 255 ++ ldrh w3, [x20, x0, lsl 1] ++ strh w1, [x20, x0, lsl 1] ++ ldr x0, [x19, 1936] ++ strh w3, [x0, x2, lsl 1] ++.L1419: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L1418 ++ .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 w2, 11 ++ mov w1, 0 ++ 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, 8 ++ strb wzr, [x19, 10] ++ mov w4, 1 ++ ldrb w2, [x1, 9] ++ ldrh w3, [x0, 2] ++ add x0, x0, 1196 ++ mul w2, w2, w3 ++ strh w2, [x19, 4] ++ ldrb w2, [x0, 53] ++ strb w2, [x19, 7] ++ ldr w2, [x0, -164] ++ str w2, [x19] ++ ldrb w2, [x1, 9] ++ strb w2, [x19, 6] ++ ldrb w3, [x0, -43] ++ mov w2, 32 ++ ldrb w1, [x1, 7] ++ strb w2, [x19, 8] ++ mov x2, 0 ++ strb w1, [x19, 9] ++.L1429: ++ cmp w3, w2, uxtb ++ bhi .L1430 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L1430: ++ ldrb w1, [x2, x0] ++ add x2, x2, 1 ++ ldrb w5, [x19, 10] ++ lsl w1, w4, w1 ++ orr w1, w1, w5 ++ strb w1, [x19, 10] ++ b .L1429 ++ .size zftl_read_flash_info, .-zftl_read_flash_info ++ .align 2 ++ .global gc_static_wearleveling ++ .type gc_static_wearleveling, %function ++gc_static_wearleveling: ++ 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] ++ ldr x0, [x0, 3384] ++ ldr w1, [x0, 32] ++ mov w0, 10240 ++ cmp w1, w0 ++ bls .L1433 ++ bl ftl_tmp_into_update ++.L1433: ++ add x3, x19, :lo12:.LANCHOR0 ++ mov w4, 36000 ++ ldr x0, [x3, 1128] ++ ldr w1, [x0, 568] ++ ldr w2, [x0, 12] ++ add w4, w1, w4 ++ cmp w2, w4 ++ bcs .L1434 ++ ldr x4, [x3, 3384] ++ ldr w3, [x0, 572] ++ add w3, w3, 256 ++ ldr w4, [x4, 36] ++ cmp w4, w3 ++ bcc .L1486 ++.L1434: ++ add w1, w1, 860160 ++ add w1, w1, 3840 ++ cmp w2, w1 ++ bhi .L1436 ++ add x1, x19, :lo12:.LANCHOR0 ++ ldr x3, [x1, 3384] ++ ldr w1, [x0, 572] ++ add w1, w1, 32 ++ ldr w3, [x3, 36] ++ cmp w3, w1 ++ bls .L1487 ++.L1436: ++ add x24, x19, :lo12:.LANCHOR0 ++ mov w20, 65535 ++ adrp x8, .LC123 ++ mov w21, w20 ++ mov w9, w20 ++ add x8, x8, :lo12:.LC123 ++ ldr x1, [x24, 3384] ++ mov w28, 0 ++ mov w27, 0 ++ mov w26, 0 ++ mov w25, 0 ++ mov w23, 0 ++ adrp x10, .LANCHOR2 ++ stp wzr, wzr, [x29, 128] ++ ldr w3, [x1, 36] ++ str w3, [x0, 572] ++ str w2, [x0, 568] ++ str wzr, [x29, 136] ++ ldrh w22, [x1, 134] ++.L1438: ++ ldrh w0, [x24, 1096] ++ cmp w0, w22 ++ bhi .L1447 ++ ldr x0, [x24, 1128] ++ mov w2, 128 ++ mov w1, 255 ++ adrp x22, .LANCHOR2 ++ add x0, x0, 264 ++ strh wzr, [x0, -142] ++ bl ftl_memset ++ ldr x0, [x24, 1128] ++ ldr w2, [x22, #:lo12:.LANCHOR2] ++ ldr x10, [x24, 1104] ++ ldrh w0, [x0, 586] ++ mov x1, x0 ++ lsl x9, x0, 2 ++ add x8, x10, x9 ++ tbz x2, 10, .L1448 ++ ldr x5, [x24, 1120] ++ ldrb w6, [x8, 3] ++ ldrb w4, [x8, 2] ++ ldr w3, [x10, x9] ++ ldrh w7, [x5, x0, lsl 1] ++ adrp x0, .LC124 ++ ldrh w2, [x10, x9] ++ ubfx x5, x4, 5, 3 ++ stp x9, x10, [x29, 104] ++ ubfx x3, x3, 11, 8 ++ str x8, [x29, 120] ++ and w2, w2, 2047 ++ ubfx x4, x4, 3, 2 ++ add x0, x0, :lo12:.LC124 ++ bl printk ++ ldp x9, x10, [x29, 104] ++ ldr x8, [x29, 120] ++.L1448: ++ ldrb w0, [x8, 2] ++ adrp x24, .LANCHOR5 ++ and w0, w0, 224 ++ cmp w0, 32 ++ bne .L1449 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3384] ++ ldrh w0, [x0, 688] ++ cmp w0, 2 ++ bls .L1449 ++ add x0, x24, :lo12:.LANCHOR5 ++ mov w1, 1 ++ str w1, [x0, 212] ++.L1449: ++ ldrb w0, [x8, 2] ++ tbz x0, 3, .L1450 ++ add x3, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x10, x9] ++ and w1, w1, 2047 ++ ldr x0, [x3, 3384] ++ ldrh w2, [x0, 96] ++ add x0, x24, :lo12:.LANCHOR5 ++ ldrh w0, [x0, 216] ++ add w0, w1, w0, lsr 2 ++ cmp w2, w0 ++ ble .L1450 ++ ldrb w0, [x8, 2] ++ and w1, w0, 192 ++ cmp w1, 64 ++ bne .L1451 ++ ldr x0, [x3, 1128] ++ mov w2, 1 ++ str x3, [x29, 120] ++ mov w1, 0 ++ ldrh w0, [x0, 586] ++ bl gc_add_sblk ++ ldr x3, [x29, 120] ++ mov w0, 1 ++ strh w0, [x3, 5608] ++.L1450: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr w2, [x22, #:lo12:.LANCHOR2] ++ ldr x1, [x0, 1128] ++ ldr x10, [x0, 1104] ++ ldrh w5, [x1, 584] ++ mov x1, x5 ++ lsl x9, x5, 2 ++ add x8, x10, x9 ++ tbz x2, 10, .L1452 ++ ldr x0, [x0, 1120] ++ ldrb w6, [x8, 3] ++ ldrb w4, [x8, 2] ++ ldr w3, [x10, x9] ++ ldrh w7, [x0, x5, lsl 1] ++ adrp x0, .LC125 ++ ldrh w2, [x10, x9] ++ ubfx x5, x4, 5, 3 ++ stp x9, x10, [x29, 104] ++ ubfx x3, x3, 11, 8 ++ str x8, [x29, 120] ++ and w2, w2, 2047 ++ ubfx x4, x4, 3, 2 ++ add x0, x0, :lo12:.LC125 ++ bl printk ++ ldp x9, x10, [x29, 104] ++ ldr x8, [x29, 120] ++.L1452: ++ ldrb w0, [x8, 2] ++ tbz x0, 3, .L1453 ++ add x3, x19, :lo12:.LANCHOR0 ++ ldr w1, [x10, x9] ++ ldr x0, [x3, 3384] ++ ubfx x1, x1, 11, 8 ++ ldrh w2, [x0, 98] ++ add x0, x24, :lo12:.LANCHOR5 ++ ldrh w0, [x0, 218] ++ add w0, w1, w0, lsr 2 ++ cmp w2, w0 ++ ble .L1453 ++ ldrb w0, [x8, 2] ++ and w1, w0, 192 ++ cmp w1, 64 ++ bne .L1454 ++ ldr x0, [x3, 1128] ++ mov w2, 1 ++ str x3, [x29, 120] ++ mov w1, 0 ++ ldrh w0, [x0, 584] ++ bl gc_add_sblk ++ ldr x3, [x29, 120] ++ mov w0, 1 ++ strh w0, [x3, 5608] ++.L1453: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 10, .L1455 ++ add x0, x19, :lo12:.LANCHOR0 ++ uxtw x6, w28 ++ lsl x1, x6, 2 ++ ldr x2, [x0, 1104] ++ ldr x0, [x0, 1120] ++ add x5, x2, x1 ++ ldr w3, [x2, x1] ++ ldrh w7, [x0, x6, lsl 1] ++ adrp x0, .LC126 ++ ldrb w6, [x5, 3] ++ add x0, x0, :lo12:.LC126 ++ ldrb w4, [x5, 2] ++ ubfx x3, x3, 11, 8 ++ ldrh w2, [x2, x1] ++ mov w1, w28 ++ ubfx x5, x4, 5, 3 ++ and w2, w2, 2047 ++ ubfx x4, x4, 3, 2 ++ bl printk ++.L1455: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 10, .L1456 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr w6, [x29, 128] ++ ldr x2, [x0, 1104] ++ lsl x1, x6, 2 ++ ldr x0, [x0, 1120] ++ add x5, x2, x1 ++ ldr w3, [x2, x1] ++ ldrh w7, [x0, x6, lsl 1] ++ adrp x0, .LC127 ++ ldrh w2, [x2, x1] ++ add x0, x0, :lo12:.LC127 ++ ldrb w6, [x5, 3] ++ ubfx x3, x3, 11, 8 ++ ldr w1, [x29, 128] ++ and w2, w2, 2047 ++ ldrb w4, [x5, 2] ++ ubfx x5, x4, 5, 3 ++ ubfx x4, x4, 3, 2 ++ bl printk ++.L1456: ++ ldr w1, [x29, 132] ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3384] ++ udiv w3, w1, w26 ++ ldr w1, [x29, 136] ++ strh w25, [x0, 96] ++ udiv w4, w1, w27 ++ strh w23, [x0, 98] ++ strh w20, [x0, 92] ++ strh w21, [x0, 94] ++ strh w3, [x0, 88] ++ strh w4, [x0, 90] ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 10, .L1457 ++ adrp x0, .LC128 ++ and w4, w4, 65535 ++ and w3, w3, 65535 ++ mov w2, w27 ++ mov w1, w26 ++ add x0, x0, :lo12:.LC128 ++ bl printk ++.L1457: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 10, .L1458 ++ add x0, x24, :lo12:.LANCHOR5 ++ mov w4, w23 ++ mov w3, w25 ++ mov w2, w21 ++ mov w1, w20 ++ ldrh w6, [x0, 218] ++ ldrh w5, [x0, 216] ++ adrp x0, .LC129 ++ add x0, x0, :lo12:.LC129 ++ bl printk ++.L1458: ++ add x1, x24, :lo12:.LANCHOR5 ++ sub w0, w23, w21 ++ str w0, [x29, 128] ++ ldrh w0, [x1, 218] ++ ldr w2, [x29, 128] ++ cmp w2, w0 ++ bgt .L1459 ++ ldrh w1, [x1, 216] ++ sub w0, w25, w20 ++ cmp w0, w1 ++ ble .L1488 ++.L1459: ++ add x8, x19, :lo12:.LANCHOR0 ++ mov w26, 0 ++ mov x27, x8 ++ mov w23, 0 ++ ldr x0, [x8, 1128] ++ ldrh w28, [x0, 580] ++ ldr x0, [x8, 3384] ++ ldrh w0, [x0, 134] ++ str w0, [x29, 132] ++ add x0, x8, 3416 ++ str x0, [x29, 136] ++ adrp x0, .LC131 ++ add x0, x0, :lo12:.LC131 ++ str x0, [x29, 120] ++.L1461: ++ ldrh w0, [x27, 1096] ++ ldr w1, [x29, 132] ++ cmp w1, w0 ++ bcc .L1471 ++.L1470: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 1128] ++ str w28, [x0, 580] ++.L1460: ++ cbz w21, .L1473 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x1, [x0, 3384] ++ ldrh w1, [x1, 134] ++.L1474: ++ ldrh w2, [x0, 1096] ++ cmp w2, w1 ++ bhi .L1476 ++ ldr x0, [x0, 3384] ++ ldrh w1, [x0, 72] ++ add w1, w21, w1 ++ strh w1, [x0, 72] ++ ldrh w1, [x0, 98] ++ cmp w21, w1 ++ bcs .L1473 ++ sub w21, w1, w21 ++ strh w21, [x0, 98] ++.L1473: ++ cbz w20, .L1479 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x1, [x0, 3384] ++ ldrh w1, [x1, 134] ++.L1480: ++ ldrh w2, [x0, 1096] ++ cmp w2, w1 ++ bhi .L1482 ++ ldr x0, [x0, 3384] ++ ldrh w1, [x0, 74] ++ add w1, w20, w1 ++ strh w1, [x0, 74] ++ ldrh w1, [x0, 96] ++ cmp w20, w1 ++ bcs .L1479 ++ sub w20, w1, w20 ++ strh w20, [x0, 96] ++.L1479: ++ adrp x5, .LANCHOR3 ++ add x5, x5, :lo12:.LANCHOR3 ++ mov w1, 0 ++ add x0, x5, 1368 ++ bl _list_get_gc_head_node ++ and w1, w0, 65535 ++ mov w2, 65535 ++ cmp w1, w2 ++ beq .L1437 ++ add x19, x19, :lo12:.LANCHOR0 ++ ubfiz x1, x1, 1, 16 ++ ldrh w2, [x5, 1376] ++ ldr x3, [x19, 1120] ++ ldrh w1, [x3, x1] ++ cmp w1, w2, lsr 1 ++ bhi .L1437 ++ add w23, w23, 1 ++ mov w2, 1 ++ mov w1, 0 ++ bl gc_add_sblk ++.L1437: ++ add w0, w23, w26 ++.L1432: ++ 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 ++.L1447: ++ uxtw x7, w22 ++ ldr x5, [x24, 1104] ++ lsl x2, x7, 2 ++ add x6, x5, x2 ++ ldrb w0, [x6, 2] ++ and w1, w0, 224 ++ cmp w1, 224 ++ beq .L1439 ++ tbz x0, 3, .L1440 ++ ldr w0, [x5, x2] ++ ldrh w1, [x5, x2] ++ ubfx x0, x0, 11, 8 ++ and w1, w1, 2047 ++.L1441: ++ ldr w3, [x29, 132] ++ add w26, w26, 1 ++ and w26, w26, 65535 ++ cmp w20, w1 ++ add w3, w3, w1 ++ str w3, [x29, 132] ++ bls .L1485 ++ ldr x3, [x24, 1128] ++ mov w20, w1 ++ strh w22, [x3, 586] ++.L1485: ++ cmp w25, w1 ++ bcs .L1444 ++ mov w28, w22 ++ mov w25, w1 ++.L1444: ++ cmp w0, w9 ++ bne .L1443 ++.L1445: ++ cmp w0, 9 ++ ccmp w1, 9, 0, hi ++ bhi .L1439 ++ ldr w0, [x10, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L1439 ++ ldr x0, [x24, 1120] ++ mov w1, w22 ++ ldrb w4, [x6, 2] ++ ldrb w6, [x6, 3] ++ ldr w3, [x5, x2] ++ ldrh w7, [x0, x7, lsl 1] ++ mov x0, x8 ++ ldrh w2, [x5, x2] ++ ubfx x5, x4, 5, 3 ++ str x10, [x29, 104] ++ ubfx x4, x4, 3, 2 ++ str w9, [x29, 112] ++ ubfx x3, x3, 11, 8 ++ str x8, [x29, 120] ++ and w2, w2, 2047 ++ bl printk ++ ldr w9, [x29, 112] ++ ldr x10, [x29, 104] ++ ldr x8, [x29, 120] ++.L1439: ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ b .L1438 ++.L1440: ++ tst w0, 24 ++ bne .L1442 ++ ldrh w1, [x5, x2] ++ mov w0, 65535 ++ and w1, w1, 2047 ++ b .L1441 ++.L1442: ++ ldr w0, [x5, x2] ++ mov w1, 65535 ++ ubfx x0, x0, 11, 8 ++.L1443: ++ ldr w3, [x29, 136] ++ add w27, w27, 1 ++ and w27, w27, 65535 ++ cmp w21, w0 ++ add w3, w3, w0 ++ str w3, [x29, 136] ++ bls .L1446 ++ ldr x3, [x24, 1128] ++ mov w21, w0 ++ strh w22, [x3, 584] ++.L1446: ++ cmp w23, w0 ++ bcs .L1445 ++ mov w23, w0 ++ str w22, [x29, 128] ++ b .L1445 ++.L1451: ++ tst w0, 224 ++ bne .L1450 ++ ldr x1, [x3, 1128] ++ mov w0, 65535 ++ ldrh w2, [x1, 590] ++ cmp w2, w0 ++ bne .L1450 ++ ldrh w0, [x1, 586] ++ str x3, [x29, 120] ++ ldrh w1, [x1, 588] ++ cmp w1, w0 ++ beq .L1450 ++ bl zftl_remove_free_node ++ ldr x3, [x29, 120] ++ ldr x0, [x3, 1128] ++ ldrh w1, [x0, 586] ++ strh w1, [x0, 590] ++ mov w1, -1 ++ strh w1, [x0, 586] ++ b .L1450 ++.L1454: ++ and w0, w0, 248 ++ cmp w0, 16 ++ bne .L1453 ++ ldr x1, [x3, 1128] ++ mov w0, 65535 ++ ldrh w2, [x1, 588] ++ cmp w2, w0 ++ bne .L1453 ++ ldrh w0, [x1, 584] ++ str x3, [x29, 120] ++ ldrh w1, [x1, 590] ++ cmp w1, w0 ++ beq .L1453 ++ bl zftl_remove_free_node ++ ldr x3, [x29, 120] ++ ldr x0, [x3, 1128] ++ ldrh w1, [x0, 584] ++ strh w1, [x0, 588] ++ mov w1, -1 ++ strh w1, [x0, 584] ++ b .L1453 ++.L1471: ++ add w7, w28, 1 ++ ldr x4, [x27, 1104] ++ and w28, w7, 65535 ++ cmp w0, w28 ++ csel w28, w28, wzr, hi ++ uxtw x9, w28 ++ lsl x3, x9, 2 ++ add x0, x4, x3 ++ ldrb w0, [x0, 2] ++ tst w0, 192 ++ beq .L1463 ++ and w2, w0, 224 ++ cmp w2, 224 ++ beq .L1463 ++ ubfx x0, x0, 3, 2 ++ and w1, w0, 1 ++ tbz x0, 0, .L1464 ++ cmp w2, 160 ++.L1551: ++ bne .L1466 ++ add x0, x24, :lo12:.LANCHOR5 ++ ldr w2, [x29, 128] ++ ldrh w0, [x0, 218] ++ cmp w2, w0 ++ ble .L1467 ++ ldr w0, [x4, x3] ++ ubfx x0, x0, 11, 8 ++ cmp w0, w21 ++ bls .L1468 ++ cbz w1, .L1467 ++ ldrh w0, [x4, x3] ++ and w0, w0, 2047 ++ cmp w0, w20 ++ bgt .L1467 ++.L1468: ++ mov w1, 0 ++ stp x4, x9, [x29, 96] ++ str x3, [x29, 112] ++ mov w2, 1 ++ mov w0, w28 ++ bl gc_add_sblk ++ ldr x1, [x29, 136] ++ mov w0, 1 ++ add w23, w23, 1 ++ ldr x3, [x29, 112] ++ ldp x4, x9, [x29, 96] ++ strh w0, [x1, 2192] ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 10, .L1467 ++ ldr x0, [x27, 1104] ++ ldr w6, [x4, x3] ++ ldrh w5, [x4, x3] ++ add x3, x0, x3 ++ ldr x1, [x27, 1120] ++ ldr x0, [x29, 136] ++ ubfx x6, x6, 11, 8 ++ ldrb w2, [x3, 2] ++ and w5, w5, 2047 ++ ldrh w3, [x1, x9, lsl 1] ++ mov w1, w28 ++ ldrh w4, [x0, 56] ++ ubfx x2, x2, 5, 3 ++ adrp x0, .LC130 ++ add x0, x0, :lo12:.LC130 ++.L1552: ++ bl printk ++.L1467: ++ cmp w23, 4 ++ ccmp w26, 4, 2, ls ++ bhi .L1470 ++.L1463: ++ ldr w0, [x29, 132] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ str w0, [x29, 132] ++ b .L1461 ++.L1464: ++ cmp w0, 2 ++ b .L1551 ++.L1466: ++ add x2, x24, :lo12:.LANCHOR5 ++ sub w0, w25, w20 ++ ldrh w2, [x2, 216] ++ cmp w0, w2 ++ ble .L1467 ++ ldrh w0, [x4, x3] ++ add w2, w20, 8 ++ and w0, w0, 2047 ++ cmp w0, w2 ++ ble .L1469 ++ cbz w1, .L1467 ++ ldr w0, [x4, x3] ++ add w1, w21, 4 ++ ubfx x0, x0, 11, 8 ++ cmp w0, w1 ++ bgt .L1467 ++.L1469: ++ mov w1, 0 ++ stp x4, x9, [x29, 96] ++ str x3, [x29, 112] ++ mov w2, 1 ++ mov w0, w28 ++ bl gc_add_sblk ++ ldr x1, [x29, 136] ++ mov w0, 1 ++ add w26, w26, 1 ++ ldr x3, [x29, 112] ++ ldp x4, x9, [x29, 96] ++ strh w0, [x1, 2192] ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 10, .L1467 ++ ldr x0, [x27, 1104] ++ ldr w6, [x4, x3] ++ ldrh w5, [x4, x3] ++ add x3, x0, x3 ++ ldr x1, [x27, 1120] ++ ldr x0, [x29, 136] ++ ubfx x6, x6, 11, 8 ++ ldrb w2, [x3, 2] ++ and w5, w5, 2047 ++ ldrh w3, [x1, x9, lsl 1] ++ mov w1, w28 ++ ldrh w4, [x0, 56] ++ ubfx x2, x2, 5, 3 ++ ldr x0, [x29, 120] ++ b .L1552 ++.L1488: ++ mov w26, 0 ++ mov w23, 0 ++ b .L1460 ++.L1476: ++ ldr x5, [x0, 1104] ++ ubfiz x4, x1, 2, 16 ++ add x6, x5, x4 ++ ldr w2, [x5, x4] ++ ubfx x3, x2, 11, 8 ++ cmp w21, w3 ++ bhi .L1475 ++ ldrb w6, [x6, 2] ++ tst w6, 24 ++ beq .L1475 ++ sub w3, w3, w21 ++ bfi w2, w3, 11, 8 ++ str w2, [x5, x4] ++.L1475: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L1474 ++.L1482: ++ ldr x5, [x0, 1104] ++ ubfiz x4, x1, 2, 16 ++ add x6, x5, x4 ++ ldrh w2, [x5, x4] ++ and w3, w2, 2047 ++ cmp w3, w20 ++ blt .L1481 ++ ldrb w6, [x6, 2] ++ and w6, w6, 24 ++ cmp w6, 16 ++ beq .L1481 ++ sub w3, w3, w20 ++ bfi w2, w3, 0, 11 ++ strh w2, [x5, x4] ++.L1481: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ b .L1480 ++.L1487: ++ mov w26, 0 ++ mov w23, 0 ++ b .L1437 ++.L1486: ++ mov w0, 0 ++ b .L1432 ++ .size gc_static_wearleveling, .-gc_static_wearleveling ++ .align 2 ++ .global zftl_sblk_list_init ++ .type zftl_sblk_list_init, %function ++zftl_sblk_list_init: ++ stp x29, x30, [sp, -96]! ++ mov w0, 6 ++ mov w1, 0 ++ 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] ++ adrp x25, .LANCHOR4 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR3 ++ ldrh w2, [x19, 1096] ++ add x25, x25, :lo12:.LANCHOR4 ++ str x27, [sp, 80] ++ add x26, x19, 3372 ++ add x25, x25, 72 ++ mov w23, 0 ++ mul w2, w2, w0 ++ ldr x0, [x19, 1040] ++ bl ftl_memset ++ strh wzr, [x19, 3368] ++ add x0, x22, :lo12:.LANCHOR3 ++ mov w1, 32 ++ strh wzr, [x19, 3370] ++ strh wzr, [x19, 3372] ++ ldrb w24, [x0, 1321] ++ strh w1, [x0, 1408] ++ str xzr, [x0, 1344] ++ str xzr, [x0, 1360] ++ str xzr, [x0, 1368] ++ str xzr, [x0, 1384] ++ str xzr, [x0, 1392] ++ str xzr, [x0, 1400] ++ ldrh w0, [x0, 1338] ++ strh wzr, [x19, 3374] ++ strh wzr, [x19, 3378] ++ strh wzr, [x19, 3376] ++ mul w0, w24, w0 ++ mov w24, 32768 ++ sdiv w24, w24, w0 ++ ldr x0, [x19, 3384] ++ ldrsh w20, [x0, 134] ++ sxth w24, w24 ++ strh wzr, [x0, 146] ++.L1554: ++ ldrh w0, [x19, 1096] ++ cmp w20, w0 ++ blt .L1571 ++ ldr x0, [x19, 3384] ++ ldrh w1, [x19, 3368] ++ strh w1, [x0, 114] ++ ldrh w1, [x19, 3370] ++ strh w1, [x0, 118] ++ ldrh w1, [x19, 3372] ++ strh w1, [x0, 116] ++ ldrh w1, [x19, 3374] ++ strh w1, [x0, 122] ++ ldrh w1, [x19, 3378] ++ strh w1, [x0, 120] ++ ldrh w1, [x19, 3376] ++ strh w1, [x0, 124] ++ 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 ++.L1571: ++ ldr x21, [x19, 1104] ++ sxtw x27, w20 ++ add x21, x21, x27, lsl 2 ++ ldrb w0, [x21, 3] ++ cbz w0, .L1572 ++ add x0, x22, :lo12:.LANCHOR3 ++ ldr x3, [x19, 3384] ++ mov w1, 0 ++ ldrb w4, [x0, 1321] ++ ldrh w5, [x0, 1338] ++ mov w0, 0 ++.L1556: ++ cmp w1, w4 ++ blt .L1559 ++ cbz w0, .L1560 ++ mov w1, 32768 ++ sdiv w0, w1, w0 ++ add w0, w0, 1 ++ sxth w0, w0 ++.L1555: ++ mov w1, 6 ++ ldr x2, [x19, 1040] ++ smull x1, w20, w1 ++ add x2, x2, x1 ++ strh w0, [x2, 4] ++ mov w2, -1 ++ ldr x0, [x19, 1040] ++ add x3, x0, x1 ++ strh w2, [x3, 2] ++ strh w2, [x0, x1] ++ mov w1, 224 ++ ldrb w0, [x21, 2] ++ and w0, w0, 224 ++ cmp w0, 32 ++ ccmp w0, w1, 4, ne ++ beq .L1561 ++ ldr x1, [x19, 1128] ++ ldrh w2, [x1, 16] ++ cmp w20, w2 ++ beq .L1561 ++ ldrh w2, [x1, 48] ++ cmp w20, w2 ++ beq .L1561 ++ ldrh w1, [x1, 80] ++ cmp w20, w1 ++ beq .L1561 ++ cmp w0, 64 ++ bne .L1562 ++ and w21, w20, 65535 ++ add x0, x22, :lo12:.LANCHOR3 ++ add x2, x19, 3374 ++ mov w1, w21 ++ add x0, x0, 1344 ++.L1583: ++ bl _insert_data_list ++ ldr x0, [x19, 1120] ++ ldrh w0, [x0, x27, lsl 1] ++ cmp w0, 7 ++ bhi .L1561 ++ mov w0, w21 ++ mov w2, 0 ++ mov w1, 1 ++.L1581: ++ bl gc_add_sblk ++.L1561: ++ add w20, w20, 1 ++ sxth w20, w20 ++ b .L1554 ++.L1559: ++ ldrb w2, [x21, 3] ++ asr w2, w2, w1 ++ tbnz x2, 0, .L1557 ++ add w0, w5, w0 ++ sxth w0, w0 ++.L1558: ++ add w1, w1, 1 ++ b .L1556 ++.L1557: ++ ldrh w2, [x3, 146] ++ add w2, w2, 1 ++ strh w2, [x3, 146] ++ b .L1558 ++.L1560: ++ ldrb w1, [x21, 2] ++ mov w2, -1 ++ orr w1, w1, -32 ++ strb w1, [x21, 2] ++ ldr x1, [x19, 1120] ++ strh w2, [x1, x27, lsl 1] ++ b .L1555 ++.L1572: ++ mov w0, w24 ++ b .L1555 ++.L1562: ++ cmp w0, 96 ++ bne .L1563 ++ and w21, w20, 65535 ++ add x0, x22, :lo12:.LANCHOR3 ++ add x2, x19, 3376 ++ mov w1, w21 ++ add x0, x0, 1360 ++ b .L1583 ++.L1563: ++ cmp w0, 160 ++ bne .L1564 ++ and w21, w20, 65535 ++ add x0, x22, :lo12:.LANCHOR3 ++ add x2, x19, 3378 ++ mov w1, w21 ++ add x0, x0, 1368 ++ b .L1583 ++.L1564: ++ cbnz w0, .L1561 ++ ldr x0, [x19, 1120] ++ ldrh w2, [x0, x27, lsl 1] ++ cbz w2, .L1565 ++ cmp w23, 2 ++ bgt .L1566 ++ mov w1, w20 ++ adrp x0, .LC132 ++ add x0, x0, :lo12:.LC132 ++ bl printk ++ ldrb w0, [x21, 2] ++ add w23, w23, 1 ++ sxth w23, w23 ++ tbz x0, 4, .L1567 ++ mov w1, 5 ++.L1577: ++ bfi w0, w1, 5, 3 ++ mov w2, 0 ++ strb w0, [x21, 2] ++ mov w1, 1 ++ mov w0, w20 ++ b .L1581 ++.L1567: ++ mov w1, 2 ++ b .L1577 ++.L1566: ++ mov x1, x25 ++ mov w2, 656 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1565: ++ ldrb w0, [x21, 2] ++ ands w0, w0, 24 ++ bne .L1569 ++ add x0, x22, :lo12:.LANCHOR3 ++ add x2, x19, 3368 ++ mov w1, w20 ++ add x0, x0, 1384 ++.L1579: ++ bl _insert_free_list ++ b .L1561 ++.L1569: ++ cmp w0, 16 ++ add x0, x22, :lo12:.LANCHOR3 ++ bne .L1570 ++ add x2, x19, 3370 ++ mov w1, w20 ++ add x0, x0, 1392 ++ b .L1579 ++.L1570: ++ mov x2, x26 ++ mov w1, w20 ++ add x0, x0, 1400 ++ b .L1579 ++ .size zftl_sblk_list_init, .-zftl_sblk_list_init ++ .align 2 ++ .global pm_free_sblk ++ .type pm_free_sblk, %function ++pm_free_sblk: ++ stp x29, x30, [sp, -368]! ++ adrp x0, .LANCHOR5 ++ add x1, x0, :lo12:.LANCHOR5 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldrh w1, [x1, 220] ++ cmp w1, 128 ++ bls .L1586 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 96 ++ mov w2, 94 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L1586: ++ adrp x21, .LANCHOR0 ++ add x0, x21, :lo12:.LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR5 ++ mov w1, 0 ++ mov w4, 65535 ++ ldr x0, [x0, 3384] ++ ldrh w3, [x19, 220] ++ mov w19, 0 ++ add x0, x0, 416 ++ ldrh w2, [x0, 272] ++.L1589: ++ ldrh w5, [x0] ++ cmp w5, w4 ++ beq .L1587 ++ add w1, w1, 1 ++ and w1, w1, 65535 ++.L1587: ++ cmp w1, w2 ++ bcs .L1588 ++ cmp w1, w3 ++ bcs .L1588 ++ add w19, w19, 1 ++ add x0, x0, 2 ++ and w19, w19, 65535 ++ cmp w19, 128 ++ bne .L1589 ++.L1588: ++ add w19, w19, 1 ++ mov w0, 128 ++ and w19, w19, 65535 ++ add x22, x29, 112 ++ cmp w19, 129 ++ mov w2, 256 ++ csel w19, w19, w0, ne ++ mov w1, 0 ++ mov x0, x22 ++ adrp x23, .LANCHOR3 ++ bl ftl_memset ++ str x23, [x29, 104] ++ add x0, x21, :lo12:.LANCHOR0 ++ add x1, x23, :lo12:.LANCHOR3 ++ mov w2, 24 ++ ldr x5, [x0, 3384] ++ ldrb w0, [x0, 1205] ++ ldrh w8, [x1, 1304] ++ add x4, x5, 704 ++ sub w2, w2, w0 ++ ldrb w9, [x1, 1306] ++ ldrh w1, [x5, 698] ++ sub w0, w2, w8 ++ mov w2, 1 ++ add x1, x1, 176 ++ lsl w2, w2, w0 ++ add x1, x5, x1, lsl 2 ++ sub w2, w2, #1 ++.L1591: ++ cmp x1, x4 ++ bne .L1594 ++ ldr x0, [x29, 104] ++ adrp x27, .LC133 ++ adrp x28, .LC134 ++ add x21, x21, :lo12:.LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR3 ++ add x27, x27, :lo12:.LC133 ++ add x28, x28, :lo12:.LC134 ++ mov x20, 0 ++ mov w23, 65535 ++ mov w26, 0 ++ ldrb w24, [x0, 1321] ++ ldrh w0, [x0, 1376] ++ mul w24, w24, w0 ++ and w24, w24, 65535 ++.L1600: ++ ldr x0, [x21, 3384] ++ and w25, w20, 65535 ++ ldr x2, [x29, 104] ++ mov w6, w20 ++ add x1, x0, w20, sxtw 1 ++ add x2, x2, :lo12:.LANCHOR3 ++ ldrh w3, [x1, 416] ++ ldrb w4, [x2, 1306] ++ ldrh w1, [x0, 692] ++ sdiv w1, w1, w4 ++ cmp w1, w3 ++ bne .L1595 ++ ldrb w1, [x2, 1321] ++ ldrh w2, [x2, 1376] ++ mul w1, w1, w2 ++ strh w1, [x22, x20, lsl 1] ++.L1595: ++ ldrh w2, [x22, x20, lsl 1] ++ cmp w2, w24 ++ bcs .L1596 ++ cmp w2, 0 ++ csel w26, w26, w25, eq ++ csel w24, w24, w2, eq ++.L1596: ++ ldrh w1, [x0, 74] ++ cmp w1, 2 ++ bls .L1597 ++ mov w1, 65535 ++ cmp w3, w1 ++ beq .L1597 ++ ldr x4, [x21, 1104] ++ ubfiz x1, x3, 2, 16 ++ ldrh w0, [x0, 92] ++ add w0, w0, 4 ++ ldrh w4, [x4, x1] ++ and w4, w4, 2047 ++ cmp w4, w0 ++ bgt .L1597 ++ mov w1, w6 ++ str w6, [x29, 100] ++ mov x0, x27 ++ bl printk ++ ldr w6, [x29, 100] ++ mov w23, w25 ++.L1597: ++ ldrh w0, [x22, x20, lsl 1] ++ cbnz w0, .L1598 ++ sxtw x25, w6 ++ ldr x0, [x21, 3384] ++ add x1, x25, 208 ++ ldrh w3, [x0, x1, lsl 1] ++ mov w1, 65535 ++ cmp w3, w1 ++ beq .L1598 ++ adrp x1, .LANCHOR2 ++ ldr w1, [x1, #:lo12:.LANCHOR2] ++ tbz x1, 12, .L1599 ++ ldrh w4, [x0, 688] ++ mov w2, 0 ++ mov w1, w6 ++ mov x0, x28 ++ bl printk ++.L1599: ++ ldr x0, [x21, 3384] ++ add x25, x25, 208 ++ ldrh w0, [x0, x25, lsl 1] ++ bl ftl_free_sblk ++ ldr x0, [x21, 3384] ++ mov w1, -1 ++ strh w1, [x0, x25, lsl 1] ++ ldrh w1, [x0, 688] ++ sub w1, w1, #1 ++ strh w1, [x0, 688] ++.L1598: ++ add x20, x20, 1 ++ cmp w19, w20, uxth ++ bhi .L1600 ++ mov w0, 65535 ++ cmp w23, w0 ++ csel w0, w26, w23, eq ++ 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 ++.L1594: ++ ldr w0, [x4] ++ add x6, x5, 416 ++ mov x3, 0 ++ lsr w0, w0, w8 ++ and w0, w0, w2 ++ udiv w0, w0, w9 ++ and w0, w0, 65535 ++.L1593: ++ ldrh w7, [x6] ++ cmp w7, w0 ++ bne .L1592 ++ ldrh w7, [x22, x3, lsl 1] ++ add w7, w7, 1 ++ strh w7, [x22, x3, lsl 1] ++.L1592: ++ add x3, x3, 1 ++ add x6, x6, 2 ++ cmp w19, w3, uxth ++ bhi .L1593 ++ add x4, x4, 4 ++ b .L1591 ++ .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_info_data_init ++ .type flash_info_data_init, %function ++flash_info_data_init: ++ stp x29, x30, [sp, -32]! ++ adrp x1, .LANCHOR2 ++ add x29, sp, 0 ++ ldr w0, [x1, #:lo12:.LANCHOR2] ++ stp x19, x20, [sp, 16] ++ mov x20, x1 ++ tbz x0, 12, .L1614 ++ adrp x2, .LANCHOR4 ++ add x2, x2, :lo12:.LANCHOR4 ++ adrp x0, .LC135 ++ add x2, x2, 112 ++ mov w1, 120 ++ add x0, x0, :lo12:.LC135 ++ bl printk ++.L1614: ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w2, 2048 ++ mov w1, 0 ++ ldr x0, [x19, 1048] ++ bl ftl_memset ++ ldr x0, [x19, 1048] ++ mov w1, 21321 ++ movk w1, 0x5359, lsl 16 ++ mov w2, 32 ++ str w1, [x0] ++ mov w1, 2032 ++ ldr x0, [x19, 1048] ++ add x0, x0, 80 ++ str w1, [x0, -72] ++ mov w1, 1 ++ strh w1, [x0, -64] ++ add x1, x19, 1160 ++ bl ftl_memcpy ++ ldr x0, [x19, 1048] ++ add x1, x20, :lo12:.LANCHOR2 ++ mov w2, 32 ++ add x1, x1, 8 ++ add x0, x0, 48 ++ bl ftl_memcpy ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size flash_info_data_init, .-flash_info_data_init ++ .align 2 ++ .global ftl_memcpy32 ++ .type ftl_memcpy32, %function ++ftl_memcpy32: ++ mov x3, 0 ++.L1620: ++ cmp w2, w3 ++ bhi .L1621 ++ ret ++.L1621: ++ ldr w4, [x1, x3, lsl 2] ++ str w4, [x0, x3, lsl 2] ++ add x3, x3, 1 ++ b .L1620 ++ .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 timer_get_time ++ .type timer_get_time, %function ++timer_get_time: ++ stp x29, x30, [sp, -16]! ++ adrp x0, jiffies ++ add x29, sp, 0 ++ ldr x1, [x0, #:lo12:jiffies] ++ adrp x0, .LANCHOR5+224 ++ ldr x0, [x0, #:lo12:.LANCHOR5+224] ++ 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, -32]! ++ mov w2, 512 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x1 ++ mov w1, 0 ++ mov w20, w0 ++ mov x0, x19 ++ bl ftl_memset ++ bl rknand_device_lock ++ adrp x0, .LANCHOR5+232 ++ mov x2, x19 ++ mov w1, 1 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ ldr x3, [x0, 24] ++ mov w0, w20 ++ blr x3 ++ mov w19, w0 ++ bl rknand_device_unlock ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size StorageSysDataLoad, .-StorageSysDataLoad ++ .align 2 ++ .global StorageSysDataStore ++ .type StorageSysDataStore, %function ++StorageSysDataStore: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ mov x20, x1 ++ bl rknand_device_lock ++ adrp x0, .LANCHOR5+232 ++ mov x2, x20 ++ mov w1, 1 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ ldr x3, [x0, 32] ++ mov w0, w19 ++ blr x3 ++ mov w19, w0 ++ bl rknand_device_unlock ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ 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 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ mov w20, w1 ++ str x21, [sp, 32] ++ mov x21, x2 ++ bl rknand_device_lock ++ adrp x0, .LANCHOR5+232 ++ mov x2, x21 ++ mov w1, w20 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ ldr x3, [x0, 8] ++ mov w0, w19 ++ blr x3 ++ mov w19, w0 ++ bl rknand_device_unlock ++ ldr x21, [sp, 32] ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ 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 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ mov w20, w1 ++ str x21, [sp, 32] ++ mov x21, x2 ++ bl rknand_device_lock ++ adrp x0, .LANCHOR5+232 ++ mov x2, x21 ++ mov w1, w20 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ ldr x3, [x0, 16] ++ mov w0, w19 ++ blr x3 ++ mov w19, w0 ++ bl rknand_device_unlock ++ ldr x21, [sp, 32] ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ 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: ++ stp x29, x30, [sp, -16]! ++ adrp x4, .LANCHOR5+240 ++ uxtw x5, w1 ++ add x29, sp, 0 ++ ldr x4, [x4, #:lo12:.LANCHOR5+240] ++ add x4, x4, 4096 ++ cbnz w2, .L1635 ++ mov w2, w3 ++ add x1, x4, x5 ++.L1638: ++ bl ftl_memcpy ++ ldp x29, x30, [sp], 16 ++ ret ++.L1635: ++ mov x1, x0 ++ mov w2, w3 ++ add x0, x4, x5 ++ b .L1638 ++ .size flash_sram_load_store, .-flash_sram_load_store ++ .align 2 ++ .global FlashCs123Init ++ .type FlashCs123Init, %function ++FlashCs123Init: ++ ret ++ .size FlashCs123Init, .-FlashCs123Init ++ .align 2 ++ .global ftl_dma32_malloc ++ .type ftl_dma32_malloc, %function ++ftl_dma32_malloc: ++ stp x29, x30, [sp, -48]! ++ cmp w0, 8192 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ str x21, [sp, 32] ++ ble .L1641 ++ bl ftl_malloc ++.L1640: ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L1641: ++ adrp x1, .LANCHOR5 ++ add x21, x1, :lo12:.LANCHOR5 ++ add w19, w0, 63 ++ mov x20, x1 ++ and w19, w19, -64 ++ ldr w0, [x21, 248] ++ cmp w19, w0 ++ ble .L1643 ++ mov w0, 16384 ++ bl ftl_malloc ++ str x0, [x21, 256] ++ mov w0, 16384 ++ str w0, [x21, 248] ++.L1643: ++ add x1, x20, :lo12:.LANCHOR5 ++ ldr w0, [x1, 248] ++ sub w0, w0, w19 ++ str w0, [x1, 248] ++ ldr x0, [x1, 256] ++ add x19, x0, w19, sxtw ++ str x19, [x1, 256] ++ b .L1640 ++ .size ftl_dma32_malloc, .-ftl_dma32_malloc ++ .align 2 ++ .global nandc_init ++ .type nandc_init, %function ++nandc_init: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ mov x22, x0 ++ stp x19, x20, [sp, 16] ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ str wzr, [x29, 56] ++ tbz x0, 12, .L1646 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ adrp x0, .LC136 ++ mov x2, x22 ++ add x1, x1, 136 ++ add x0, x0, :lo12:.LC136 ++ bl printk ++.L1646: ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ ldr w3, [x22, 352] ++ mov w2, 6 ++ mov x20, x0 ++ strb w2, [x1, 1028] ++ mov w2, 12336 ++ str x22, [x1, 1056] ++ movk w2, 0x5638, lsl 16 ++ cmp w3, w2 ++ bne .L1647 ++ mov w0, 8 ++ strb w0, [x1, 1028] ++.L1647: ++ ldr w1, [x22, 128] ++ mov w0, 12336 ++ movk w0, 0x5639, lsl 16 ++ cmp w1, w0 ++ bne .L1648 ++ add x0, x20, :lo12:.LANCHOR0 ++ mov w1, 9 ++ strb w1, [x0, 1028] ++.L1648: ++ add x19, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x19, 1028] ++ cmp w0, 9 ++ bne .L1649 ++ mov w0, 1 ++ strb w0, [x19, 1251] ++ ldr w0, [x29, 56] ++ mov w1, 2 ++ orr w0, w0, 256 ++ str w0, [x29, 56] ++ ldr w0, [x29, 56] ++ bfi w0, w1, 18, 3 ++ str w0, [x29, 56] ++ mov w1, 4161 ++ ldr w0, [x29, 56] ++ str w0, [x22] ++ ldr x0, [x19, 1056] ++ str wzr, [x0, 520] ++ str w1, [x0, 4] ++ mov w1, 8321 ++ ldr x0, [x19, 1056] ++ str w1, [x0, 8] ++ mov w1, 4099 ++ movk w1, 0x10, lsl 16 ++ str w1, [x0, 80] ++ mov w1, 38 ++ str w1, [x0, 84] ++ mov w1, 39 ++ str w1, [x0, 84] ++ ldr w1, [x21, #:lo12:.LANCHOR2] ++ tbz x1, 12, .L1651 ++ ldr w1, [x0] ++ ldr w2, [x0, 8] ++ ldr w3, [x0, 80] ++ ldr w4, [x0, 84] ++ ldr w5, [x0, 88] ++.L1664: ++ adrp x0, .LC137 ++ add x0, x0, :lo12:.LC137 ++ bl printk ++.L1651: ++ add x0, x20, :lo12:.LANCHOR0 ++ mov w1, 1 ++ strb w1, [x0, 1252] ++ ldr w1, [x21, #:lo12:.LANCHOR2] ++ strh wzr, [x0, 1296] ++ strb wzr, [x0, 1249] ++ tbz x1, 12, .L1645 ++ ldrb w1, [x0, 1028] ++ adrp x0, .LC138 ++ add x0, x0, :lo12:.LC138 ++ bl printk ++.L1645: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L1649: ++ ldr w0, [x29, 56] ++ mov w1, 1 ++ strb wzr, [x19, 1251] ++ orr w0, w0, 256 ++ str w0, [x29, 56] ++ ldr w0, [x29, 56] ++ bfi w0, w1, 24, 3 ++ str w0, [x29, 56] ++ mov w1, 4193 ++ ldr w0, [x29, 56] ++ str w0, [x22] ++ ldr x0, [x19, 1056] ++ str wzr, [x0, 336] ++ str w1, [x0, 4] ++ mov w1, 8321 ++ ldr x0, [x19, 1056] ++ str w1, [x0, 344] ++ mov w1, 4099 ++ movk w1, 0x10, lsl 16 ++ str w1, [x0, 304] ++ mov w1, 38 ++ str w1, [x0, 308] ++ mov w1, 39 ++ str w1, [x0, 308] ++ mov w0, 2048 ++ bl ftl_dma32_malloc ++ str x0, [x19, 1256] ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L1651 ++ ldr x0, [x19, 1056] ++ ldr w1, [x0] ++ ldr w2, [x0, 344] ++ ldr w3, [x0, 304] ++ ldr w4, [x0, 308] ++ ldr w5, [x0, 312] ++ b .L1664 ++ .size nandc_init, .-nandc_init ++ .align 2 ++ .global zbuf_init ++ .type zbuf_init, %function ++zbuf_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, 1304 ++ adrp x22, .LANCHOR3 ++ mov x20, x0 ++ add x22, x22, :lo12:.LANCHOR3 ++ mov w21, 0 ++.L1666: ++ and w0, w21, 255 ++ strb w0, [x19, 1] ++ add w1, w0, 1 ++ ldrb w0, [x22, 1946] ++ strb w1, [x19] ++ add w21, w21, 1 ++ strb wzr, [x19, 2] ++ add x19, x19, 64 ++ str xzr, [x19, -48] ++ lsl w0, w0, 9 ++ bl ftl_dma32_malloc ++ str x0, [x19, -56] ++ mov w0, 64 ++ bl ftl_dma32_malloc ++ str x0, [x19, -40] ++ cmp w21, 32 ++ bne .L1666 ++ add x0, x20, :lo12:.LANCHOR0 ++ mov w1, -1 ++ strb wzr, [x0, 3352] ++ strb w1, [x0, 3288] ++ strb w21, [x0, 3353] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size zbuf_init, .-zbuf_init ++ .align 2 ++ .global gc_init ++ .type gc_init, %function ++gc_init: ++ stp x29, x30, [sp, -48]! ++ mov w2, 2216 ++ mov w1, 0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR3 ++ stp x21, x22, [sp, 32] ++ add x19, x19, :lo12:.LANCHOR3 ++ adrp x21, .LANCHOR5 ++ add x21, x21, :lo12:.LANCHOR5 ++ adrp x20, .LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR0 ++ add x22, x20, 3416 ++ strb wzr, [x19, 1337] ++ strb wzr, [x21, 264] ++ mov x0, x22 ++ strh wzr, [x19, 1378] ++ str wzr, [x21, 268] ++ bl ftl_memset ++ ldrh w1, [x19, 1376] ++ mov w0, -1 ++ ldrb w3, [x19, 1321] ++ strh w0, [x20, 3416] ++ lsr w0, w1, 2 ++ lsr w2, w1, 1 ++ strh w0, [x20, 3452] ++ strh w0, [x20, 3402] ++ ldrh w0, [x19, 1338] ++ strh w2, [x20, 3454] ++ mul w2, w1, w3 ++ strh w1, [x20, 3400] ++ mov w1, 4 ++ and w2, w2, 65535 ++ strh w1, [x21, 272] ++ sub w4, w2, #32 ++ mul w0, w0, w3 ++ strh w4, [x20, 3404] ++ strh w2, [x20, 3406] ++ strh wzr, [x19, 1352] ++ lsl w0, w0, 2 ++ strh wzr, [x19, 1354] ++ strh wzr, [x19, 1356] ++ str xzr, [x20, 3424] ++ bl ftl_dma32_malloc ++ ldrb w1, [x19, 1321] ++ str x0, [x21, 280] ++ ldrh w0, [x19, 1338] ++ mul w0, w0, w1 ++ lsl w0, w0, 2 ++ bl ftl_dma32_malloc ++ ldrh w1, [x19, 1338] ++ str x0, [x21, 288] ++ ldrb w0, [x19, 1321] ++ mul w0, w1, w0 ++ bl ftl_dma32_malloc ++ str x0, [x19, 1328] ++ ldrb w1, [x19, 1321] ++ ldrh w0, [x19, 1338] ++ mul w0, w0, w1 ++ lsl w0, w0, 2 ++ bl ftl_dma32_malloc ++ ldrb w1, [x19, 1321] ++ str x0, [x19, 1312] ++ ldrh w0, [x19, 1338] ++ mul w0, w0, w1 ++ lsl w0, w0, 2 ++ bl ftl_dma32_malloc ++ str x0, [x21, 296] ++ ldrh w0, [x19, 1380] ++ ldp x21, x22, [sp, 32] ++ lsr w0, w0, 2 ++ strh w0, [x20, 3392] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size gc_init, .-gc_init ++ .align 2 ++ .global rk_ftl_de_init ++ .type rk_ftl_de_init, %function ++rk_ftl_de_init: ++ stp x29, x30, [sp, -16]! ++ mov w1, 0 ++ adrp x0, .LC139 ++ add x0, x0, :lo12:.LC139 ++ add x29, sp, 0 ++ bl printk ++ adrp x0, .LANCHOR5+232 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ 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: ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LANCHOR5+232 ++ add x29, sp, 0 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ 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: ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LANCHOR5+232 ++ add x29, sp, 0 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ 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: ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LANCHOR5+232 ++ add x29, sp, 0 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ 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: ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LANCHOR5+232 ++ add x29, sp, 0 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ 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: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR5+232 ++ add x29, sp, 0 ++ ldr x1, [x1, #:lo12:.LANCHOR5+232] ++ 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: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR5+232 ++ add x29, sp, 0 ++ ldr x1, [x1, #:lo12:.LANCHOR5+232] ++ ldr x1, [x1, 128] ++ blr x1 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size rknand_proc_ftlread, .-rknand_proc_ftlread ++ .align 2 ++ .global FtlRead ++ .type FtlRead, %function ++FtlRead: ++ stp x29, x30, [sp, -16]! ++ adrp x4, .LANCHOR5+232 ++ and w0, w0, 255 ++ add x29, sp, 0 ++ ldr x4, [x4, #:lo12:.LANCHOR5+232] ++ ldr x4, [x4, 40] ++ blr x4 ++ ldp x29, x30, [sp], 16 ++ ret ++ .size FtlRead, .-FtlRead ++ .align 2 ++ .global FtlDiscard ++ .type FtlDiscard, %function ++FtlDiscard: ++ stp x29, x30, [sp, -16]! ++ adrp x2, .LANCHOR5+232 ++ add x29, sp, 0 ++ ldr x2, [x2, #:lo12:.LANCHOR5+232] ++ 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: ++ stp x29, x30, [sp, -16]! ++ adrp x2, .LANCHOR5+232 ++ add x29, sp, 0 ++ ldr x2, [x2, #:lo12:.LANCHOR5+232] ++ 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: ++ stp x29, x30, [sp, -16]! ++ adrp x1, .LANCHOR5+232 ++ add x29, sp, 0 ++ ldr x1, [x1, #:lo12:.LANCHOR5+232] ++ 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: ++ mul w6, w2, w3 ++ stp x29, x30, [sp, -16]! ++ mov x5, x1 ++ mov w4, w2 ++ add x29, sp, 0 ++ mov x1, x0 ++ mov w7, 0 ++ mov w3, 16 ++ mov w2, 0 ++ adrp x0, .LC140 ++ add x0, x0, :lo12:.LC140 ++ bl print_hex_dump ++ ldp x29, x30, [sp], 16 ++ 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 w4, -83 ++ mov w1, -82 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ mov w23, w0 ++ add x0, x20, :lo12:.LANCHOR0 ++ stp x25, x26, [sp, 64] ++ stp x21, x22, [sp, 32] ++ cmp w23, 2 ++ stp x27, x28, [sp, 80] ++ ldr x26, [x0, 1048] ++ add x0, x26, 112 ++ str x0, [x29, 136] ++ mov w0, -84 ++ add x25, x26, 128 ++ strb w0, [x26, 128] ++ mov w0, -81 ++ strb w23, [x26, 112] ++ strb w4, [x26, 129] ++ strb w1, [x26, 130] ++ strb w0, [x26, 131] ++ bne .L1696 ++ mov w0, -89 ++ strb w0, [x26, 128] ++ adrp x0, .LANCHOR2+425 ++ mov w1, -9 ++ strb w1, [x0, #:lo12:.LANCHOR2+425] ++.L1761: ++ mov w28, 7 ++ b .L1806 ++.L1696: ++ cmp w23, 3 ++ bne .L1698 ++ mov x4, 0 ++.L1699: ++ sub w0, w4, #80 ++ strb w0, [x25, x4] ++ add x4, x4, 1 ++ cmp x4, 8 ++ bne .L1699 ++ mov w28, w4 ++ mov w27, w4 ++.L1697: ++ sub w0, w23, #1 ++ cmp w0, 1 ++ bhi .L1705 ++ add x20, x20, :lo12:.LANCHOR0 ++ adrp x21, .LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR2 ++ add x23, x20, 1024 ++ add x21, x21, 408 ++ mov w26, 0 ++.L1706: ++ ldrb w0, [x20, 1153] ++ cmp w0, w26 ++ bhi .L1712 ++.L1713: ++ ldr x0, [x29, 136] ++ strb w27, [x0, 1] ++ strb w28, [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 ++.L1698: ++ cmp w23, 4 ++ bne .L1700 ++ mov w5, -52 ++ strb w5, [x26, 128] ++ mov w5, -65 ++ strb w5, [x26, 129] ++ mov w5, -86 ++ strb w5, [x26, 130] ++ mov w5, -85 ++ mov w28, 8 ++ strb w5, [x26, 131] ++ mov w27, w28 ++ mov w5, -51 ++ strb w4, [x26, 133] ++ strb w5, [x26, 132] ++ strb w1, [x26, 134] ++ strb w0, [x26, 135] ++ b .L1697 ++.L1700: ++ cmp w23, 5 ++ bne .L1701 ++ mov w0, 56 ++ strb w0, [x26, 128] ++ mov w0, 57 ++ strb w0, [x26, 129] ++ mov w0, 58 ++ mov w28, 8 ++ strb w0, [x26, 130] ++ mov w0, 59 ++ strb w0, [x26, 131] ++.L1806: ++ mov w27, 4 ++ b .L1697 ++.L1701: ++ cmp w23, 6 ++ bne .L1702 ++ mov w0, 14 ++ strb w0, [x26, 128] ++ mov w0, 15 ++ strb w0, [x26, 129] ++ mov w0, 16 ++ mov w28, 12 ++ strb w0, [x26, 130] ++ mov w0, 17 ++ strb w0, [x26, 131] ++ b .L1806 ++.L1702: ++ cmp w23, 7 ++ bne .L1703 ++ mov x0, 0 ++.L1704: ++ sub w1, w0, #80 ++ strb w1, [x25, x0] ++ add x0, x0, 1 ++ cmp x0, 8 ++ bne .L1704 ++ mov w0, -44 ++ mov w28, 12 ++ strb w0, [x26, 136] ++ mov w27, 10 ++ mov w0, -43 ++ strb w0, [x26, 137] ++ b .L1697 ++.L1703: ++ cmp w23, 8 ++ bne .L1761 ++ mov w0, 6 ++ strb w0, [x26, 128] ++ mov w0, 7 ++ strb w0, [x26, 129] ++ mov w0, 9 ++ strb w23, [x26, 130] ++ strb w0, [x26, 131] ++ mov w28, 50 ++ mov w0, 10 ++ mov w27, 5 ++ strb w0, [x26, 132] ++ b .L1697 ++.L1712: ++ add x0, x23, w26, sxtw ++ mov x1, 32 ++ mov w19, 160 ++ ldr x24, [x20, 1056] ++ mov x22, 0 ++ ldrb w0, [x0, 172] ++ umaddl x19, w19, w0, x1 ++ ldr x1, [x29, 136] ++ ubfiz x0, x0, 8, 8 ++ add x24, x24, x0 ++ add x19, x1, x19 ++ mov w1, 55 ++.L1707: ++ str w1, [x24, 2056] ++ str w1, [x29, 132] ++ ldrb w0, [x25, x22] ++ str w0, [x24, 2052] ++ mov x0, 1000 ++ bl __const_udelay ++ ldr w0, [x24, 2048] ++ strb w0, [x19, x22] ++ add x22, x22, 1 ++ cmp w27, w22, uxtb ++ ldr w1, [x29, 132] ++ bhi .L1707 ++ mov x0, 0 ++.L1710: ++ add x1, x0, 4 ++ add x2, x0, 28 ++ add w3, w0, 8 ++ add x1, x21, x1 ++ add x2, x21, x2 ++.L1709: ++ ldrb w7, [x1], 4 ++ ldrb w6, [x19, x0] ++ cmp x2, x1 ++ add w6, w6, w7 ++ strb w6, [x19, w3, sxtw] ++ add w3, w3, 8 ++ bne .L1709 ++ add x0, x0, 1 ++ cmp x0, 4 ++ bne .L1710 ++ add w26, w26, 1 ++ strb wzr, [x19, 16] ++ strb wzr, [x19, 24] ++ and w26, w26, 255 ++ strb wzr, [x19, 32] ++ strb wzr, [x19, 40] ++ strb wzr, [x19, 48] ++ strb wzr, [x19, 41] ++ strb wzr, [x19, 49] ++ b .L1706 ++.L1705: ++ sub w0, w23, #3 ++ cmp w0, 5 ++ bhi .L1713 ++ mul w0, w27, w28 ++ add x20, x20, :lo12:.LANCHOR0 ++ sub w25, w27, #1 ++ mov w21, 0 ++ and x25, x25, 255 ++ asr w24, w0, 1 ++ lsl w0, w0, 4 ++ str w0, [x29, 128] ++ lsl w0, w24, 1 ++ str w0, [x29, 132] ++ add x0, x20, 1024 ++ str x0, [x29, 120] ++ add x0, x25, 1 ++ str x0, [x29, 112] ++.L1714: ++ ldrb w0, [x20, 1153] ++ cmp w0, w21 ++ bls .L1713 ++ ldr x0, [x29, 120] ++ mov w22, 160 ++ sub w25, w23, #5 ++ add x0, x0, w21, sxtw ++ ldrb w19, [x0, 172] ++ mov w0, w19 ++ bl zftl_flash_exit_slc_mode ++ mov x0, 32 ++ mov w1, 255 ++ str w1, [x29, 108] ++ nop // between mem op and mult-accumulate ++ umaddl x22, w22, w19, x0 ++ ldr x0, [x29, 136] ++ ubfiz x19, x19, 8, 8 ++ add x22, x0, x22 ++ ldr x0, [x20, 1056] ++ add x19, x0, x19 ++ str w1, [x19, 2056] ++ bl nandc_wait_flash_ready ++ cmp w23, 8 ++ ldr w1, [x29, 108] ++ bne .L1715 ++ mov w0, 120 ++ str w0, [x19, 2056] ++ str wzr, [x19, 2052] ++ mov w0, 23 ++ str wzr, [x19, 2052] ++ mov w1, 25 ++ str wzr, [x19, 2052] ++ add x22, x26, 144 ++ str w0, [x19, 2056] ++ mov w0, 4 ++ str w0, [x19, 2056] ++ str w1, [x19, 2056] ++ mov w1, 218 ++ str w1, [x19, 2056] ++ mov w1, 21 ++ str wzr, [x19, 2056] ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w1, [x19, 2052] ++.L1809: ++ str w0, [x19, 2052] ++ mov w0, 48 ++ str wzr, [x19, 2052] ++ str w0, [x19, 2056] ++ bl nandc_wait_flash_ready ++ cmp w25, 1 ++ ccmp w23, 8, 4, hi ++ beq .L1762 ++ cmp w23, 7 ++ mov w0, 32 ++ mov w1, 2 ++ csel w1, w1, w0, ne ++.L1722: ++ adrp x8, .LANCHOR5 ++ add x0, x8, :lo12:.LANCHOR5 ++ mov x7, 0 ++ ldr x0, [x0, 304] ++.L1723: ++ ldr w9, [x19, 2048] ++ strb w9, [x0, x7] ++ add x7, x7, 1 ++ cmp w1, w7, uxtb ++ bhi .L1723 ++ cmp w23, 8 ++ bne .L1724 ++ mov w1, 0 ++.L1726: ++ ldrb w7, [x0] ++ cmp w7, 50 ++ beq .L1725 ++ ldrb w7, [x0, 1] ++ cmp w7, 5 ++ beq .L1725 ++ add w1, w1, 1 ++ add x0, x0, 4 ++ and w1, w1, 255 ++ cmp w1, 8 ++ bne .L1726 ++.L1727: ++ adrp x0, .LC141 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC141 ++ bl printk ++.L1729: ++ b .L1729 ++.L1715: ++ mov w0, 54 ++ str w0, [x19, 2056] ++ cmp w23, 4 ++ bne .L1717 ++ mov w0, 64 ++ str w1, [x19, 2052] ++ str w0, [x19, 2048] ++ mov w0, 204 ++.L1807: ++ str w0, [x19, 2052] ++ mov w0, 77 ++ b .L1808 ++.L1717: ++ cmp w25, 1 ++ bhi .L1719 ++ ldrb w0, [x26, 128] ++ str w0, [x19, 2052] ++ mov w0, 82 ++.L1808: ++ str w0, [x19, 2048] ++.L1718: ++ 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] ++ str wzr, [x19, 2056] ++ cmp w23, 6 ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ bne .L1720 ++ mov w0, 31 ++ str w0, [x19, 2052] ++.L1721: ++ mov w0, 2 ++ b .L1809 ++.L1719: ++ cmp w23, 7 ++ bne .L1718 ++ mov w0, 174 ++ str w0, [x19, 2052] ++ str wzr, [x19, 2048] ++ mov w0, 176 ++ b .L1807 ++.L1720: ++ str wzr, [x19, 2052] ++ b .L1721 ++.L1762: ++ mov w1, 16 ++ b .L1722 ++.L1725: ++ cmp w1, 6 ++ bhi .L1727 ++.L1728: ++ add x0, x8, :lo12:.LANCHOR5 ++ ldr x10, [x0, 304] ++ mov x0, 0 ++.L1738: ++ ldr w1, [x29, 128] ++ cmp w1, w0 ++ bgt .L1739 ++ add x0, x8, :lo12:.LANCHOR5 ++ mov w9, w24 ++ mov w7, 8 ++ ldr x11, [x0, 304] ++.L1741: ++ mov w0, 0 ++.L1740: ++ add w1, w0, w9 ++ add w0, w0, 1 ++ sbfiz x1, x1, 1, 32 ++ cmp w24, w0 ++ ldrh w12, [x11, x1] ++ mvn w12, w12 ++ strh w12, [x11, x1] ++ bgt .L1740 ++ ldr w0, [x29, 132] ++ subs w7, w7, #1 ++ add w9, w9, w0 ++ bne .L1741 ++ mov x7, 0 ++ mov w15, 1 ++.L1747: ++ mov w1, 0 ++ mov w0, 0 ++.L1746: ++ mov w13, w7 ++ lsl w14, w15, w0 ++ mov w9, 16 ++ mov w12, 0 ++.L1744: ++ ldrh w16, [x11, w13, sxtw 1] ++ add w13, w13, w24 ++ bics wzr, w14, w16 ++ cinc w12, w12, eq ++ subs w9, w9, #1 ++ bne .L1744 ++ cmp w12, 8 ++ bls .L1745 ++ orr w1, w1, w14 ++ and w1, w1, 65535 ++.L1745: ++ add w0, w0, 1 ++ cmp w0, 16 ++ bne .L1746 ++ strh w1, [x11, x7, lsl 1] ++ add x7, x7, 1 ++ cmp w24, w7 ++ bgt .L1747 ++ add x0, x8, :lo12:.LANCHOR5 ++ mov w7, 0 ++ ldr x1, [x0, 304] ++ mov x0, 0 ++.L1750: ++ ldr w8, [x1, x0] ++ add x0, x0, 4 ++ cmp w8, 0 ++ cinc w7, w7, eq ++ cmp x0, 32 ++ bne .L1750 ++ cmp w7, 7 ++ ble .L1751 ++ mov w3, 1024 ++ mov w2, 1 ++ adrp x0, .LC142 ++ add x0, x0, :lo12:.LC142 ++ bl rknand_print_hex ++ adrp x0, .LC141 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC141 ++ bl printk ++.L1752: ++ b .L1752 ++.L1724: ++ cmp w23, 7 ++ bne .L1730 ++ mov w1, 0 ++.L1732: ++ ldrb w7, [x0] ++ cmp w7, 12 ++ beq .L1731 ++ ldrb w7, [x0, 1] ++ cmp w7, 10 ++ beq .L1731 ++ add w1, w1, 1 ++ add x0, x0, 4 ++ and w1, w1, 255 ++ cmp w1, 8 ++ bne .L1732 ++.L1733: ++ adrp x0, .LC141 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC141 ++ bl printk ++.L1734: ++ b .L1734 ++.L1731: ++ cmp w1, 6 ++ bls .L1728 ++ b .L1733 ++.L1730: ++ cmp w23, 6 ++ bne .L1728 ++ mov x1, 0 ++.L1735: ++ ldrb w7, [x0, x1] ++ cmp w7, 12 ++ beq .L1728 ++ add x7, x0, x1 ++ ldrb w7, [x7, 8] ++ cmp w7, 4 ++ beq .L1728 ++ add x1, x1, 1 ++ cmp x1, 8 ++ bne .L1735 ++ adrp x0, .LC141 ++ mov w1, 0 ++ add x0, x0, :lo12:.LC141 ++ bl printk ++.L1737: ++ b .L1737 ++.L1739: ++ ldr w1, [x19, 2048] ++ strb w1, [x10, x0] ++ add x0, x0, 1 ++ b .L1738 ++.L1751: ++ cmp w23, 6 ++ beq .L1764 ++ cmp w23, 7 ++ beq .L1765 ++ cmp w23, 8 ++ mov w0, 5 ++ mov w1, 8 ++ csel w1, w1, w0, ne ++.L1753: ++ mov w7, 0 ++.L1754: ++ mov x0, 0 ++.L1755: ++ add w8, w9, w0 ++ ldrb w11, [x10, x0] ++ add x0, x0, 1 ++ cmp w27, w0, uxtb ++ strb w11, [x22, w8, sxtw] ++ bhi .L1755 ++ ldr x0, [x29, 112] ++ add w7, w7, 1 ++ add w9, w9, w1 ++ cmp w28, w7 ++ add x10, x10, x0 ++ bgt .L1754 ++ mov w22, 255 ++ str w22, [x19, 2056] ++ bl nandc_wait_flash_ready ++ cmp w25, 1 ++ bhi .L1757 ++ mov w0, 54 ++ str w0, [x19, 2056] ++ ldrb w0, [x26, 128] ++ str w0, [x19, 2052] ++ str wzr, [x19, 2048] ++ mov w0, 22 ++ str w0, [x19, 2056] ++ mov w0, 48 ++ str wzr, [x19, 2056] ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w22, [x19, 2052] ++ str w22, [x19, 2052] ++ str w22, [x19, 2052] ++.L1810: ++ str w0, [x19, 2056] ++ add w21, w21, 1 ++ and w21, w21, 255 ++ bl nandc_wait_flash_ready ++ b .L1714 ++.L1764: ++ mov w1, 4 ++ b .L1753 ++.L1765: ++ mov w1, 10 ++ b .L1753 ++.L1757: ++ cmp w23, 8 ++ bne .L1759 ++ mov w0, 190 ++ b .L1810 ++.L1759: ++ mov w0, 56 ++ b .L1810 ++ .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+27 ++ ldrb w0, [x0, #:lo12:.LANCHOR2+27] ++ sub w1, w0, #1 ++ and w1, w1, 255 ++ cmp w1, 7 ++ bhi .L1814 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl hynix_get_read_retry_default ++ ldp x29, x30, [sp], 16 ++ ret ++.L1814: ++ 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 x21, x22, [sp, 32] ++ adrp x21, .LANCHOR5 ++ add x0, x21, :lo12:.LANCHOR5 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ adrp x20, .LANCHOR0 ++ strb wzr, [x0, 312] ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1028] ++ cmp w1, 9 ++ bne .L1818 ++ ldr x22, [x0, 1056] ++ ldr w1, [x22, 16] ++ str w1, [x29, 64] ++ ldr w1, [x22, 48] ++ tbnz x1, 1, .L1819 ++ adrp x23, .LC145 ++ adrp x24, .LC146 ++ mov x19, x0 ++ add x23, x23, :lo12:.LC145 ++ add x24, x24, :lo12:.LC146 ++ mov w21, 0 ++.L1820: ++ ldr w0, [x29, 64] ++ tbz x0, 20, .L1830 ++ add x19, x20, :lo12:.LANCHOR0 ++ add x19, x19, 1256 ++ ldr w0, [x19, 32] ++ cbz w0, .L1828 ++ ldr w1, [x29, 64] ++ mov w2, 1 ++ ldr w0, [x19, 24] ++ ubfx x1, x1, 22, 6 ++ lsl w1, w1, 10 ++ bl rknand_dma_unmap_single ++ ldr w1, [x29, 64] ++ mov w2, 1 ++ ubfx x1, x1, 22, 6 ++ b .L1865 ++.L1819: ++ mov x19, x0 ++ mov w23, 0 ++.L1821: ++ ldr w1, [x22, 64] ++ ldr w0, [x29, 64] ++ ubfx x1, x1, 16, 6 ++ ubfx x0, x0, 22, 6 ++ cmp w1, w0 ++ bge .L1823 ++ ldr x0, [x19, 1056] ++ ldr w0, [x0] ++ str w0, [x29, 72] ++ ldr w0, [x29, 72] ++ tbz x0, 13, .L1822 ++ ldr w0, [x29, 72] ++ tbz x0, 17, .L1822 ++ ldr w1, [x29, 72] ++ adrp x0, .LC143 ++ add x0, x0, :lo12:.LC143 ++ ubfx x1, x1, 17, 1 ++ bl printk ++.L1823: ++ add x19, x20, :lo12:.LANCHOR0 ++ add x19, x19, 1256 ++ ldr w0, [x19, 32] ++ cbz w0, .L1828 ++ ldr w1, [x29, 64] ++ mov w2, 0 ++ ldr w0, [x19, 24] ++ ubfx x1, x1, 22, 6 ++ lsl w1, w1, 10 ++ bl rknand_dma_unmap_single ++ ldr w1, [x29, 64] ++ mov w2, 0 ++ ubfx x1, x1, 22, 6 ++.L1865: ++ lsl w1, w1, 2 ++.L1863: ++ ldr w0, [x19, 28] ++ bl rknand_dma_unmap_single ++.L1828: ++ add x20, x20, :lo12:.LANCHOR0 ++ ldp x21, x22, [sp, 32] ++ str wzr, [x20, 1288] ++ ldp x23, x24, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 80 ++ ret ++.L1822: ++ ldr w0, [x29, 64] ++ add w23, w23, 1 ++ ubfx x0, x0, 22, 6 ++ cmp w23, w0, lsl 12 ++ bne .L1824 ++ ldr w2, [x22, 64] ++ mov w1, w23 ++ ldr w3, [x29, 64] ++ adrp x0, .LC144 ++ add x21, x21, :lo12:.LANCHOR5 ++ add x0, x0, :lo12:.LC144 ++ ubfx x2, x2, 16, 5 ++ ubfx x3, x3, 22, 6 ++ bl printk ++ ldr w1, [x29, 72] ++ mov w0, 1 ++ strb w0, [x21, 312] ++ tbnz x1, 13, .L1823 ++ mov x0, 35160 ++ movk x0, 0x41, lsl 16 ++ bl __const_udelay ++ b .L1823 ++.L1824: ++ mov x1, 10 ++ mov x0, 5 ++ bl usleep_range ++ b .L1821 ++.L1830: ++ ldr x0, [x19, 1056] ++ add w21, w21, 1 ++ tst x21, 16777215 ++ ldr w0, [x0, 16] ++ str w0, [x29, 64] ++ bne .L1829 ++ ldr w2, [x29, 64] ++ mov w1, w21 ++ ldr w3, [x22, 64] ++ mov x0, x23 ++ ubfx x3, x3, 16, 6 ++ bl printk ++ ldr x1, [x19, 1056] ++ mov w3, 64 ++ mov w2, 4 ++ mov x0, x24 ++ bl rknand_print_hex ++.L1829: ++ mov x1, 10 ++ mov x0, 5 ++ bl usleep_range ++ b .L1820 ++.L1818: ++ ldr x21, [x0, 1056] ++ mov w22, 0 ++ mov x19, x0 ++ ldr w1, [x21, 8] ++ str w1, [x29, 64] ++ ldr w1, [x21, 16] ++ tbnz x1, 1, .L1832 ++ adrp x23, .LC145 ++ adrp x24, .LC146 ++ add x23, x23, :lo12:.LC145 ++ add x24, x24, :lo12:.LC146 ++.L1833: ++ ldr w0, [x29, 64] ++ tbz x0, 20, .L1840 ++ add x19, x20, :lo12:.LANCHOR0 ++ add x19, x19, 1256 ++ ldr w0, [x19, 32] ++ cbz w0, .L1828 ++ ldr w1, [x29, 64] ++ mov w2, 1 ++ ldr w0, [x19, 24] ++ ubfx x1, x1, 22, 6 ++ lsl w1, w1, 10 ++ bl rknand_dma_unmap_single ++ ldr w1, [x29, 64] ++ mov w2, 1 ++ ubfx x1, x1, 22, 6 ++ b .L1864 ++.L1832: ++ adrp x23, .LC144 ++ adrp x24, .LC146 ++ add x23, x23, :lo12:.LC144 ++ add x24, x24, :lo12:.LC146 ++.L1834: ++ ldr w1, [x21, 28] ++ ldr w0, [x29, 64] ++ ubfx x1, x1, 16, 5 ++ ubfx x0, x0, 22, 6 ++ cmp w1, w0 ++ bge .L1836 ++ ldr x0, [x19, 1056] ++ ldr w0, [x0] ++ str w0, [x29, 72] ++ ldr w0, [x29, 72] ++ tbz x0, 13, .L1835 ++ ldr w0, [x29, 72] ++ tbz x0, 17, .L1835 ++ ldr w1, [x29, 72] ++ adrp x0, .LC147 ++ add x0, x0, :lo12:.LC147 ++ bl printk ++.L1836: ++ add x19, x20, :lo12:.LANCHOR0 ++ add x19, x19, 1256 ++ ldr w0, [x19, 32] ++ cbz w0, .L1828 ++ ldr w1, [x29, 64] ++ mov w2, 0 ++ ldr w0, [x19, 24] ++ ubfx x1, x1, 22, 6 ++ lsl w1, w1, 10 ++ bl rknand_dma_unmap_single ++ ldr w1, [x29, 64] ++ mov w2, 0 ++ ubfx x1, x1, 22, 6 ++.L1864: ++ lsl w1, w1, 7 ++ b .L1863 ++.L1835: ++ add w22, w22, 1 ++ tst x22, 16777215 ++ bne .L1837 ++ ldr w2, [x21, 28] ++ mov w1, w22 ++ ldr w3, [x29, 64] ++ mov x0, x23 ++ ubfx x2, x2, 16, 5 ++ ubfx x3, x3, 22, 6 ++ bl printk ++ ldr x1, [x19, 1056] ++ mov w3, 64 ++ mov w2, 4 ++ mov x0, x24 ++ bl rknand_print_hex ++.L1837: ++ mov x1, 10 ++ mov x0, 5 ++ bl usleep_range ++ b .L1834 ++.L1840: ++ ldr x0, [x19, 1056] ++ add w22, w22, 1 ++ tst x22, 16777215 ++ ldr w0, [x0, 8] ++ str w0, [x29, 64] ++ bne .L1839 ++ ldr w2, [x29, 64] ++ mov w1, w22 ++ ldr w3, [x21, 28] ++ mov x0, x23 ++ ubfx x3, x3, 16, 5 ++ bl printk ++ ldr x1, [x19, 1056] ++ mov w3, 64 ++ mov w2, 4 ++ mov x0, x24 ++ bl rknand_print_hex ++.L1839: ++ mov x1, 10 ++ mov x0, 5 ++ bl usleep_range ++ b .L1833 ++ .size nandc_xfer_done, .-nandc_xfer_done ++ .align 2 ++ .global nandc_xfer ++ .type nandc_xfer, %function ++nandc_xfer: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w2, 255 ++ stp x21, x22, [sp, 32] ++ mov x21, x3 ++ and w19, w1, 255 ++ mov x3, x4 ++ mov x2, x21 ++ mov w1, w20 ++ mov w0, w19 ++ mov x22, x4 ++ bl nandc_xfer_start ++ mov w0, w19 ++ bl nandc_xfer_done ++ cbnz w19, .L1885 ++ adrp x19, .LANCHOR0 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1028] ++ cmp w1, 9 ++ bne .L1868 ++ lsr w20, w20, 2 ++ ldr x5, [x0, 1056] ++ mov w3, 1 ++ mov w2, 0 ++ mov w0, 0 ++.L1869: ++ cmp w2, w20 ++ bcc .L1873 ++ ldr w20, [x5] ++ cmp w3, 0 ++ mov w1, 512 ++ csel w0, w0, w1, eq ++ mov w1, 8192 ++ movk w1, 0x2, lsl 16 ++ and w1, w20, w1 ++ cmp w1, 139264 ++ bne .L1875 ++ mov w1, w20 ++ adrp x0, .LC148 ++ add x0, x0, :lo12:.LC148 ++ bl printk ++ add x0, x19, :lo12:.LANCHOR0 ++ orr w20, w20, 131072 ++ ldr x0, [x0, 1056] ++ str w20, [x0] ++ mov w0, -1 ++.L1875: ++ tbz x20, 13, .L1876 ++ adrp x1, .LANCHOR5+312 ++ ldrb w1, [x1, #:lo12:.LANCHOR5+312] ++ cbz w1, .L1876 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, w20 ++ adrp x0, .LC149 ++ add x0, x0, :lo12:.LC149 ++ bl printk ++ ldr x0, [x19, 1056] ++ mov w1, 1 ++ str w1, [x0, 16] ++.L1904: ++ mov w0, -1 ++.L1867: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L1873: ++ uxtw x1, w2 ++ add x1, x1, 84 ++ ldr w1, [x5, x1, lsl 2] ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ ldr w4, [x29, 56] ++ ubfx x4, x4, 26, 1 ++ and w1, w4, w1, lsr 10 ++ and w3, w3, w1 ++ ldr w1, [x29, 56] ++ tbnz x1, 2, .L1887 ++ ldr w1, [x29, 56] ++ tbnz x1, 18, .L1887 ++ ldr w4, [x29, 56] ++ ldr w1, [x29, 56] ++ ubfx x4, x4, 3, 7 ++ ubfx x1, x1, 19, 7 ++ cmp w4, w1 ++ ldr w1, [x29, 56] ++ ble .L1871 ++ ubfx x1, x1, 3, 7 ++.L1872: ++ cmp w0, w1 ++ csel w0, w0, w1, cs ++.L1870: ++ add w2, w2, 1 ++ b .L1869 ++.L1871: ++ ubfx x1, x1, 19, 7 ++ b .L1872 ++.L1887: ++ mov w0, -1 ++ b .L1870 ++.L1868: ++ ldrb w1, [x0, 1249] ++ lsr w5, w20, 1 ++ mov w4, 64 ++ mov w2, 1 ++ cmp w1, 25 ++ mov w1, 128 ++ mov w3, 0 ++ csel w4, w4, w1, cc ++ mov w1, 0 ++.L1878: ++ add w6, w4, w1 ++ cmp w3, w5 ++ bcc .L1879 ++ add x0, x19, :lo12:.LANCHOR0 ++ lsr w20, w20, 2 ++ mov w3, 0 ++ ldr x4, [x0, 1056] ++ mov w0, 0 ++.L1880: ++ cmp w3, w20 ++ bcc .L1884 ++ str wzr, [x4, 16] ++ mov w1, 8192 ++ movk w1, 0x2, lsl 16 ++ ldr w20, [x4] ++ and w1, w20, w1 ++ cmp w1, 139264 ++ bne .L1876 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, w20 ++ adrp x0, .LC150 ++ add x0, x0, :lo12:.LC150 ++ bl printk ++ orr w20, w20, 131072 ++ ldr x0, [x19, 1056] ++ str w20, [x0] ++ b .L1904 ++.L1879: ++ ldr x7, [x0, 1256] ++ and x1, x1, 4294967292 ++ ldr w1, [x7, x1] ++ lsl w7, w3, 2 ++ add w3, w3, 1 ++ strb w1, [x22, x7] ++ lsr w7, w1, 8 ++ strb w7, [x22, w2, uxtw] ++ add w7, w2, 1 ++ lsr w8, w1, 16 ++ lsr w1, w1, 24 ++ strb w8, [x22, x7] ++ add w7, w2, 2 ++ add w2, w2, 4 ++ strb w1, [x22, x7] ++ mov w1, w6 ++ b .L1878 ++.L1884: ++ uxtw x1, w3 ++ add x1, x1, 8 ++ ldr w1, [x4, x1, lsl 2] ++ str w1, [x29, 56] ++ ldr w1, [x29, 56] ++ tbnz x1, 2, .L1890 ++ ldr w1, [x29, 56] ++ tbnz x1, 15, .L1890 ++ ldr w2, [x29, 56] ++ ubfx x6, x2, 3, 5 ++ ldr w2, [x29, 56] ++ ldr w1, [x29, 56] ++ ubfx x2, x2, 27, 1 ++ ubfx x5, x1, 16, 5 ++ ldr w1, [x29, 56] ++ orr w2, w6, w2, lsl 5 ++ ubfx x1, x1, 29, 1 ++ orr w1, w5, w1, lsl 5 ++ cmp w2, w1 ++ ldr w1, [x29, 56] ++ bls .L1882 ++ ubfx x2, x1, 3, 5 ++ ldr w1, [x29, 56] ++ ubfx x1, x1, 27, 1 ++.L1903: ++ orr w1, w2, w1, lsl 5 ++ cmp w0, w1 ++ csel w0, w0, w1, cs ++.L1881: ++ add w3, w3, 1 ++ b .L1880 ++.L1882: ++ ubfx x2, x1, 16, 5 ++ ldr w1, [x29, 56] ++ ubfx x1, x1, 29, 1 ++ b .L1903 ++.L1890: ++ mov w0, -1 ++ b .L1881 ++.L1876: ++ cmn w0, #1 ++ beq .L1867 ++ ldr w1, [x22] ++ cmn w1, #1 ++ bne .L1867 ++ ldr w1, [x22, 4] ++ cmn w1, #1 ++ bne .L1867 ++ ldr w1, [x21] ++ cmn w1, #1 ++ mov w1, 512 ++ csel w0, w0, w1, ne ++ b .L1867 ++.L1885: ++ mov w0, 0 ++ b .L1867 ++ .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 x21, .LANCHOR0 ++ str x27, [sp, 80] ++ add x27, x21, :lo12:.LANCHOR0 ++ and w22, w0, 255 ++ stp x19, x20, [sp, 16] ++ mov w19, 24 ++ stp x23, x24, [sp, 48] ++ ldrb w0, [x27, 1205] ++ ubfx x23, x1, 24, 2 ++ stp x25, x26, [sp, 64] ++ mov w24, w4 ++ sub w0, w19, w0 ++ mov w19, 1 ++ mov x25, x2 ++ mov x26, x3 ++ lsl w19, w19, w0 ++ sub w19, w19, #1 ++ and w19, w19, w1 ++ ldr x20, [x27, 1056] ++ bl nandc_wait_flash_ready ++ mov w0, w22 ++ bl nandc_cs ++ cbnz w23, .L1906 ++ mov w0, w22 ++ bl zftl_flash_enter_slc_mode ++.L1907: ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr x1, [x0, 1144] ++ ldrb w0, [x1, 7] ++ cmp w0, 1 ++ bne .L1909 ++ ldrb w0, [x1, 12] ++ cmp w0, 2 ++ bne .L1909 ++ sxtw x0, w22 ++ mov w2, 38 ++ add x0, x0, 8 ++ add x0, x20, x0, lsl 8 ++ str w2, [x0, 8] ++.L1909: ++ ubfiz x0, x22, 8, 8 ++ add x20, x20, x0 ++ and w0, w19, 255 ++ str wzr, [x20, 2056] ++ str wzr, [x20, 2052] ++ str wzr, [x20, 2052] ++ str w0, [x20, 2052] ++ lsr w0, w19, 8 ++ str w0, [x20, 2052] ++ lsr w0, w19, 16 ++ str w0, [x20, 2052] ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1204] ++ cbz w0, .L1910 ++ lsr w0, w19, 24 ++ str w0, [x20, 2052] ++.L1910: ++ mov w0, 48 ++ str w0, [x20, 2056] ++ ldrb w0, [x1, 12] ++ cmp w0, 3 ++ bne .L1911 ++ cbz w23, .L1911 ++ add x21, x21, :lo12:.LANCHOR0 ++ ldrb w0, [x21, 1212] ++ cbnz w0, .L1911 ++ ldrb w0, [x21, 1213] ++ cbnz w0, .L1911 ++ add w19, w19, w19, lsl 1 ++ sub w0, w19, #1 ++ add w0, w0, w23 ++.L1920: ++ bl nandc_set_seed ++ bl nandc_wait_flash_ready ++ mov w0, 5 ++ str w0, [x20, 2056] ++ str wzr, [x20, 2052] ++ mov w0, 224 ++ str wzr, [x20, 2052] ++ mov w2, w24 ++ str w0, [x20, 2056] ++ mov x4, x26 ++ mov x3, x25 ++ mov w1, 0 ++ mov w0, w22 ++ bl nandc_xfer ++ mov w2, w0 ++ bl nandc_de_cs.constprop.35 ++ mov w0, w2 ++ 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 ++.L1906: ++ ldr x0, [x27, 1144] ++ ldrb w0, [x0, 12] ++ cmp w0, 3 ++ bne .L1908 ++ ldrb w0, [x27, 1212] ++ cbnz w0, .L1908 ++ ldrb w0, [x27, 1213] ++ cbnz w0, .L1908 ++ sxtw x0, w22 ++ add x0, x0, 8 ++ add x0, x20, x0, lsl 8 ++ str w23, [x0, 8] ++ b .L1907 ++.L1908: ++ mov w0, w22 ++ bl zftl_flash_exit_slc_mode ++ b .L1907 ++.L1911: ++ mov w0, w19 ++ b .L1920 ++ .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, -128]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ and w20, w0, 255 ++ stp x25, x26, [sp, 64] ++ mov w24, w1 ++ stp x27, x28, [sp, 80] ++ mov x26, x3 ++ str x2, [x29, 112] ++ mov w22, 0 ++ ldrb w0, [x19, 1249] ++ add w0, w0, w0, lsl 1 ++ asr w1, w0, 2 ++ stp w4, w1, [x29, 120] ++ bl nandc_wait_flash_ready ++ ldr x19, [x19, 1056] ++ ubfiz x0, x20, 8, 8 ++ add x19, x19, x0 ++.L1922: ++ adrp x23, .LANCHOR5 ++ add x23, x23, :lo12:.LANCHOR5 ++ mov x27, x23 ++ mov w21, 0 ++ mov w25, -1 ++ mov w0, w20 ++ bl zftl_flash_enter_slc_mode ++ mov w0, w20 ++ bl zftl_flash_exit_slc_mode ++.L1923: ++ ldrb w0, [x23, 328] ++ cmp w21, w0 ++ bcc .L1928 ++.L1927: ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 137 ++ str w0, [x19, 2052] ++ mov x0, 1000 ++ bl __const_udelay ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ ldr w0, [x29, 124] ++ str wzr, [x19, 2048] ++ cmp w25, w0 ++ bcc .L1929 ++ cmn w25, #1 ++ mov w0, 256 ++ csel w25, w25, w0, eq ++.L1929: ++ cmn w25, #1 ++ cset w23, eq ++ cmp w25, 256 ++ cset w0, eq ++ orr w0, w23, w0 ++ cbz w0, .L1930 ++ mov w4, w25 ++ mov w3, w21 ++ mov w2, w24 ++ mov w1, w20 ++ adrp x0, .LC152 ++ add x0, x0, :lo12:.LC152 ++ bl printk ++ eor w0, w22, 1 ++ tst w23, w0 ++ beq .L1931 ++ mov w1, 3 ++ mov w0, w20 ++ mov w22, 1 ++ bl mt_auto_read_calibration_config ++ b .L1922 ++.L1928: ++ mov w0, 239 ++ str w0, [x19, 2056] ++ mov w0, 137 ++ str w0, [x19, 2052] ++ add w28, w21, 1 ++ mov x0, 1000 ++ bl __const_udelay ++ str w28, [x19, 2048] ++ str wzr, [x19, 2048] ++ mov x3, x26 ++ ldr w4, [x29, 120] ++ mov w1, w24 ++ ldr x2, [x29, 112] ++ mov w0, w20 ++ str wzr, [x19, 2048] ++ str wzr, [x19, 2048] ++ bl flash_read_page ++ mov w6, w0 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L1924 ++ mov w4, w6 ++ str w6, [x29, 108] ++ mov w3, w25 ++ mov w2, w24 ++ mov w1, w21 ++ adrp x0, .LC151 ++ add x0, x0, :lo12:.LC151 ++ bl printk ++ ldr w6, [x29, 108] ++.L1924: ++ cmn w6, #1 ++ beq .L1925 ++ ldr x0, [x27, 304] ++ cmn w25, #1 ++ str x0, [x29, 112] ++ csel w25, w25, w6, ne ++ ldr w0, [x29, 124] ++ ldr x26, [x27, 320] ++ cmp w6, w0 ++ bcc .L1934 ++.L1925: ++ mov w21, w28 ++ b .L1923 ++.L1934: ++ mov w25, w6 ++ b .L1927 ++.L1931: ++ cbz w22, .L1932 ++ mov w0, w20 ++ mov w1, 0 ++ bl mt_auto_read_calibration_config ++ cmn w25, #1 ++ mov w0, 256 ++ csel w25, w25, w0, eq ++.L1932: ++ bl nandc_wait_flash_ready ++ 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], 128 ++ ret ++.L1930: ++ cbz w22, .L1932 ++ mov w1, 0 ++ mov w0, w20 ++ mov w25, 256 ++ bl mt_auto_read_calibration_config ++ b .L1932 ++ .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]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ mov w24, w1 ++ stp x25, x26, [sp, 64] ++ and w23, w0, 255 ++ stp x27, x28, [sp, 80] ++ mov x26, x2 ++ stp x19, x20, [sp, 16] ++ mov x27, x3 ++ mov w28, w4 ++ bl nandc_wait_flash_ready ++ add x0, x22, :lo12:.LANCHOR0 ++ and x1, x23, 255 ++ add x21, x1, 8 ++ str x1, [x29, 120] ++ mov w2, 46 ++ mov w3, 56 ++ ldrb w1, [x0, 1136] ++ ubfx x19, x24, 24, 2 ++ ldr x25, [x0, 1056] ++ cmp w1, 36 ++ mov w1, 26 ++ csel w2, w3, w2, ne ++ str w2, [x29, 112] ++ mov w2, 10 ++ csel w1, w2, w1, ne ++ str w1, [x29, 128] ++ add x21, x25, x21, lsl 8 ++ cbnz w19, .L1952 ++ str x0, [x29, 136] ++ sxtw x0, w23 ++ add x0, x0, 8 ++ mov w19, -1 ++ add x0, x25, x0, lsl 8 ++ mov w20, 1 ++ str x0, [x29, 112] ++.L1959: ++ ldr x0, [x29, 136] ++ ldrb w0, [x0, 1136] ++ cmp w0, 36 ++ bne .L1953 ++ mov w1, w20 ++ mov x0, x21 ++ mov w2, 0 ++ bl toshiba_tlc_set_rr_para ++ ldr x1, [x29, 112] ++ mov w0, 93 ++ str w0, [x1, 8] ++.L1954: ++ mov w4, w28 ++ mov x3, x27 ++ mov x2, x26 ++ mov w1, w24 ++ mov w0, w23 ++ bl flash_read_page ++ mov w4, w0 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 4, .L1955 ++ mov w3, w4 ++ str w4, [x29, 108] ++ mov w2, w24 ++ mov w1, w20 ++ adrp x0, .LC153 ++ add x0, x0, :lo12:.LC153 ++ bl printk ++ ldr w4, [x29, 108] ++.L1955: ++ cmn w4, #1 ++ beq .L1956 ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ cmn w19, #1 ++ csel w19, w19, w4, ne ++ ldr x26, [x0, 304] ++ ldr x27, [x0, 320] ++ ldr x0, [x29, 136] ++ ldrb w0, [x0, 1249] ++ add w0, w0, w0, lsl 1 ++ cmp w4, w0, lsr 2 ++ bcc .L1974 ++.L1956: ++ ldr w0, [x29, 128] ++ add w20, w20, 1 ++ cmp w0, w20 ++ bne .L1959 ++.L1958: ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1136] ++ cmp w0, 36 ++ bne .L1960 ++ mov w2, 0 ++.L1997: ++ mov w1, 0 ++ mov x0, x21 ++ bl toshiba_tlc_set_rr_para ++ b .L1961 ++.L1953: ++ mov w1, w20 ++ mov x0, x21 ++ bl toshiba_3d_set_slc_rr_para ++ b .L1954 ++.L1974: ++ mov w19, w4 ++ b .L1958 ++.L1960: ++ mov w1, 0 ++ mov x0, x21 ++ bl toshiba_3d_set_slc_rr_para ++.L1961: ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1136] ++ cmp w0, 36 ++ bne .L1970 ++ ldr x0, [x29, 120] ++ add x25, x25, x0, lsl 8 ++ mov w0, 85 ++ str w0, [x25, 2056] ++ mov w0, 255 ++ str wzr, [x25, 2052] ++ str wzr, [x25, 2048] ++ str w0, [x25, 2056] ++.L1970: ++ add x22, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x22, 1249] ++ add w0, w0, w0, lsl 1 ++ cmp w19, w0, lsr 2 ++ bcc .L1971 ++ cmn w19, #1 ++ mov w0, 256 ++ csel w19, w19, w0, eq ++.L1971: ++ cmp w19, 256 ++ ccmn w19, #1, 4, ne ++ bne .L1972 ++ adrp x0, .LC155 ++ mov w4, w19 ++ mov w3, w20 ++ mov w2, w24 ++ mov w1, w23 ++ add x0, x0, :lo12:.LC155 ++ bl printk ++.L1972: ++ 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 ++.L1952: ++ str x0, [x29, 136] ++ sxtw x0, w23 ++ add x0, x0, 8 ++ mov w19, -1 ++ add x0, x25, x0, lsl 8 ++ mov w20, 1 ++ str x0, [x29, 128] ++.L1968: ++ ldr x0, [x29, 136] ++ ldrb w0, [x0, 1136] ++ cmp w0, 36 ++ bne .L1962 ++ mov x0, x21 ++ mov w2, 1 ++ mov w1, w20 ++ bl toshiba_tlc_set_rr_para ++ mov w0, 93 ++.L1996: ++ ldr x1, [x29, 128] ++ mov w4, w28 ++ mov x3, x27 ++ mov x2, x26 ++ str w0, [x1, 8] ++ mov w1, w24 ++ mov w0, w23 ++ bl flash_read_page ++ mov w4, w0 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 4, .L1964 ++ mov w3, w4 ++ str w4, [x29, 108] ++ mov w2, w24 ++ mov w1, w20 ++ adrp x0, .LC154 ++ add x0, x0, :lo12:.LC154 ++ bl printk ++ ldr w4, [x29, 108] ++.L1964: ++ cmn w4, #1 ++ beq .L1965 ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ cmn w19, #1 ++ csel w19, w19, w4, ne ++ ldr x26, [x0, 304] ++ ldr x27, [x0, 320] ++ ldr x0, [x29, 136] ++ ldrb w0, [x0, 1249] ++ add w0, w0, w0, lsl 1 ++ cmp w4, w0, lsr 2 ++ bcc .L1975 ++.L1965: ++ ldr w0, [x29, 112] ++ add w20, w20, 1 ++ cmp w0, w20 ++ bne .L1968 ++.L1967: ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1136] ++ cmp w0, 36 ++ bne .L1969 ++ mov w2, 1 ++ b .L1997 ++.L1962: ++ mov x0, x21 ++ mov w1, w20 ++ bl toshiba_3d_set_tlc_rr_para ++ mov w0, 38 ++ b .L1996 ++.L1975: ++ mov w19, w4 ++ b .L1967 ++.L1969: ++ mov w1, 0 ++ mov x0, x21 ++ bl toshiba_3d_set_tlc_rr_para ++ b .L1961 ++ .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 x19, x20, [sp, 16] ++ and w19, w0, 255 ++ stp x27, x28, [sp, 80] ++ mov x27, x2 ++ stp w4, w1, [x29, 120] ++ mov x28, x3 ++ stp x21, x22, [sp, 32] ++ adrp x20, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ bl nandc_wait_flash_ready ++ mov w0, w19 ++ bl zftl_flash_enter_slc_mode ++ mov w0, w19 ++ bl zftl_flash_exit_slc_mode ++ add x1, x20, :lo12:.LANCHOR0 ++ and x0, x19, 255 ++ add x22, x0, 8 ++ str x0, [x29, 112] ++ ldrb w0, [x1, 1136] ++ ldr x23, [x1, 1056] ++ sub w0, w0, #67 ++ and w0, w0, 255 ++ add x22, x23, x22, lsl 8 ++ cmp w0, 1 ++ bls .L2016 ++ ldrb w0, [x1, 1192] ++ cbz w0, .L2017 ++ mov w24, 1 ++ mov w0, 1 ++ bl nandc_set_if_mode ++.L2000: ++ and x0, x19, 255 ++ mov w1, 92 ++ add x0, x23, x0, lsl 8 ++ str w1, [x0, 2056] ++ mov w1, 197 ++ str w1, [x0, 2056] ++.L1999: ++ sxtw x0, w19 ++ mov w21, 1 ++ add x0, x0, 8 ++ mov w25, -1 ++ add x0, x23, x0, lsl 8 ++ str x0, [x29, 104] ++.L2001: ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ ldrb w0, [x0, 328] ++ add w0, w0, 1 ++ cmp w21, w0 ++ bcc .L2010 ++ mov w26, w25 ++.L2009: ++ add x0, x20, :lo12:.LANCHOR0 ++ mov w1, 0 ++ ldrb w0, [x0, 1136] ++ sub w0, w0, #67 ++ and w0, w0, 255 ++ cmp w0, 1 ++ mov x0, x22 ++ bhi .L2011 ++ bl sandisk_set_rr_para ++.L2012: ++ sxtw x19, w19 ++ add x20, x20, :lo12:.LANCHOR0 ++ add x19, x19, 8 ++ mov w0, 255 ++ add x23, x23, x19, lsl 8 ++ str w0, [x23, 8] ++ ldrb w0, [x20, 1249] ++ add w0, w0, w0, lsl 1 ++ cmp w26, w0, lsr 2 ++ bcc .L2013 ++ cmn w26, #1 ++ mov w0, 256 ++ csel w26, w26, w0, eq ++.L2013: ++ cmp w26, 256 ++ ccmn w26, #1, 4, ne ++ bne .L2014 ++ ldr w2, [x29, 124] ++ adrp x0, .LC155 ++ mov w4, w26 ++ mov w3, w21 ++ mov w1, w21 ++ add x0, x0, :lo12:.LC155 ++ bl printk ++.L2014: ++ bl nandc_wait_flash_ready ++ cbz w24, .L1998 ++ mov w0, 4 ++ bl nandc_set_if_mode ++.L1998: ++ 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 ++.L2017: ++ mov w24, 0 ++ b .L2000 ++.L2016: ++ mov w24, 0 ++ b .L1999 ++.L2010: ++ add x0, x20, :lo12:.LANCHOR0 ++ mov w1, w21 ++ ldrb w0, [x0, 1136] ++ sub w0, w0, #67 ++ and w0, w0, 255 ++ cmp w0, 1 ++ mov x0, x22 ++ bhi .L2002 ++ bl sandisk_set_rr_para ++.L2003: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1136] ++ cmp w0, 34 ++ bne .L2004 ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ ldrb w0, [x0, 328] ++ sub w0, w0, #3 ++ cmp w21, w0 ++ bne .L2004 ++ ldr x1, [x29, 104] ++ mov w0, 179 ++ str w0, [x1, 8] ++.L2004: ++ ldr x0, [x29, 112] ++ mov w1, 38 ++ ldr w4, [x29, 120] ++ mov x3, x28 ++ mov x2, x27 ++ add x0, x23, x0, lsl 8 ++ str w1, [x0, 2056] ++ mov w1, 93 ++ str w1, [x0, 2056] ++ mov w0, w19 ++ ldr w1, [x29, 124] ++ bl flash_read_page ++ mov w26, w0 ++ cmn w0, #1 ++ beq .L2007 ++ cmn w25, #1 ++ csel w25, w25, w0, ne ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ ldr x27, [x0, 304] ++ ldr x28, [x0, 320] ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1249] ++ add w0, w0, w0, lsl 1 ++ cmp w26, w0, lsr 2 ++ bcc .L2009 ++.L2007: ++ add w21, w21, 1 ++ b .L2001 ++.L2002: ++ bl toshiba_set_rr_para ++ b .L2003 ++.L2011: ++ bl toshiba_set_rr_para ++ b .L2012 ++ .size toshiba_read_retrial, .-toshiba_read_retrial ++ .align 2 ++ .global ymtc_3d_read_retrial ++ .type ymtc_3d_read_retrial, %function ++ymtc_3d_read_retrial: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, -1 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ mov w24, w1 ++ and w23, w0, 255 ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ mov x25, x2 ++ mov x26, x3 ++ mov w27, w4 ++ bl nandc_wait_flash_ready ++ ubfiz x28, x23, 8, 8 ++ mov w0, w23 ++ bl zftl_flash_enter_slc_mode ++ mov w0, w23 ++ bl zftl_flash_exit_slc_mode ++ add x1, x22, :lo12:.LANCHOR0 ++ add x0, x28, 2048 ++ adrp x5, .LANCHOR5 ++ mov w20, 1 ++ add x5, x5, :lo12:.LANCHOR5 ++ mov x21, x1 ++ ldr x28, [x1, 1056] ++ tst x24, 50331648 ++ add x28, x28, x0 ++ bne .L2040 ++.L2035: ++ str x5, [x29, 104] ++ mov w1, w20 ++ mov x0, x28 ++ bl ymtc_3d_set_slc_rr_para ++ mov w4, w27 ++ mov x3, x26 ++ mov x2, x25 ++ mov w1, w24 ++ mov w0, w23 ++ bl flash_read_page ++ ldr x5, [x29, 104] ++ cmn w0, #1 ++ beq .L2032 ++ ldrb w1, [x21, 1249] ++ cmn w19, #1 ++ csel w19, w19, w0, ne ++ ldr x25, [x5, 304] ++ ldr x26, [x5, 320] ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L2043 ++.L2032: ++ add w20, w20, 1 ++ cmp w20, 10 ++ bne .L2035 ++.L2034: ++ mov w1, 0 ++ mov x0, x28 ++ bl ymtc_3d_set_slc_rr_para ++.L2036: ++ add x22, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x22, 1249] ++ add w0, w0, w0, lsl 1 ++ cmp w19, w0, lsr 2 ++ bcc .L2041 ++ cmn w19, #1 ++ mov w0, 256 ++ csel w19, w19, w0, eq ++.L2041: ++ cmp w19, 256 ++ ccmn w19, #1, 4, ne ++ bne .L2042 ++ adrp x0, .LC156 ++ mov w4, w19 ++ mov w3, w20 ++ mov w2, w24 ++ mov w1, w20 ++ add x0, x0, :lo12:.LC156 ++ bl printk ++.L2042: ++ 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], 112 ++ ret ++.L2043: ++ mov w19, w0 ++ b .L2034 ++.L2040: ++ str x5, [x29, 104] ++ mov w1, w20 ++ mov x0, x28 ++ bl ymtc_3d_set_tlc_rr_para ++ mov w4, w27 ++ mov x3, x26 ++ mov x2, x25 ++ mov w1, w24 ++ mov w0, w23 ++ bl flash_read_page ++ ldr x5, [x29, 104] ++ cmn w0, #1 ++ beq .L2037 ++ ldrb w1, [x21, 1249] ++ cmn w19, #1 ++ csel w19, w19, w0, ne ++ ldr x25, [x5, 304] ++ ldr x26, [x5, 320] ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L2044 ++.L2037: ++ add w20, w20, 1 ++ cmp w20, 51 ++ bne .L2040 ++.L2039: ++ mov w1, 0 ++ mov x0, x28 ++ bl ymtc_3d_set_tlc_rr_para ++ b .L2036 ++.L2044: ++ mov w19, w0 ++ b .L2039 ++ .size ymtc_3d_read_retrial, .-ymtc_3d_read_retrial ++ .align 2 ++ .global samsung_read_retrial ++ .type samsung_read_retrial, %function ++samsung_read_retrial: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ mov w21, w1 ++ stp x23, x24, [sp, 48] ++ str w4, [x29, 108] ++ mov x23, x2 ++ mov x24, x3 ++ stp x19, x20, [sp, 16] ++ stp x25, x26, [sp, 64] ++ adrp x20, .LANCHOR0 ++ stp x27, x28, [sp, 80] ++ bl nandc_wait_flash_ready ++ mov w0, w22 ++ bl zftl_flash_enter_slc_mode ++ mov w0, w22 ++ bl zftl_flash_exit_slc_mode ++ add x0, x20, :lo12:.LANCHOR0 ++ tst x21, 50331648 ++ and x5, x22, 255 ++ adrp x7, .LANCHOR4 ++ ldr x0, [x0, 1056] ++ bne .L2060 ++ add x7, x7, :lo12:.LANCHOR4 ++ adrp x25, .LC157 ++ add x25, x25, :lo12:.LC157 ++ add x27, x0, x5, lsl 8 ++ mov x28, 0 ++ add x0, x7, 152 ++ mov w26, -1 ++ str x0, [x29, 96] ++.L2065: ++ mov w0, 239 ++ str w0, [x27, 2056] ++ mov w0, 141 ++ str w0, [x27, 2052] ++ ldr x0, [x29, 96] ++ add w19, w28, 1 ++ add x0, x0, x28 ++ ldrsb w0, [x0, 1] ++ str w0, [x27, 2048] ++ str wzr, [x27, 2048] ++ str wzr, [x27, 2048] ++ str wzr, [x27, 2048] ++ bl nandc_wait_flash_ready ++ ldr w4, [x29, 108] ++ mov x3, x24 ++ mov x2, x23 ++ mov w1, w21 ++ mov w0, w22 ++ bl flash_read_page ++ mov w4, w0 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 4, .L2061 ++ mov w3, w4 ++ str w4, [x29, 104] ++ mov w2, w21 ++ mov w1, w19 ++ mov x0, x25 ++ bl printk ++ ldr w4, [x29, 104] ++.L2061: ++ cmn w4, #1 ++ beq .L2062 ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ cmn w26, #1 ++ csel w26, w26, w4, ne ++ ldr x23, [x0, 304] ++ ldr x24, [x0, 320] ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1249] ++ add w0, w0, w0, lsl 1 ++ cmp w4, w0, lsr 2 ++ bcc .L2074 ++.L2062: ++ add x28, x28, 1 ++ cmp x28, 25 ++ bne .L2065 ++ mov w19, 26 ++.L2064: ++ mov w0, 239 ++ str w0, [x27, 2056] ++ mov w0, 141 ++ str w0, [x27, 2052] ++ str wzr, [x27, 2048] ++ str wzr, [x27, 2048] ++ str wzr, [x27, 2048] ++ str wzr, [x27, 2048] ++.L2096: ++ add x20, x20, :lo12:.LANCHOR0 ++ bl nandc_wait_flash_ready ++ ldrb w0, [x20, 1249] ++ add w0, w0, w0, lsl 1 ++ cmp w26, w0, lsr 2 ++ bcc .L2072 ++ cmn w26, #1 ++ mov w0, 256 ++ csel w26, w26, w0, eq ++.L2072: ++ cmp w26, 256 ++ ccmn w26, #1, 4, ne ++ bne .L2073 ++ adrp x0, .LC159 ++ mov w4, w26 ++ mov w3, w19 ++ mov w2, w21 ++ mov w1, w19 ++ add x0, x0, :lo12:.LC159 ++ bl printk ++.L2073: ++ bl nandc_wait_flash_ready ++ 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], 112 ++ ret ++.L2074: ++ mov w26, w4 ++ b .L2064 ++.L2060: ++ add x7, x7, :lo12:.LANCHOR4 ++ adrp x25, .LC158 ++ add x27, x7, 188 ++ add x28, x0, x5, lsl 8 ++ add x25, x25, :lo12:.LC158 ++ mov w26, -1 ++ mov w19, 1 ++.L2071: ++ mov w0, 239 ++ str w0, [x28, 2056] ++ mov w0, 137 ++ str w0, [x28, 2052] ++ ldrb w0, [x27] ++ str w0, [x28, 2048] ++ ldrb w0, [x27, 1] ++ str w0, [x28, 2048] ++ ldrb w0, [x27, 2] ++ str w0, [x28, 2048] ++ ldrb w0, [x27, 3] ++ str w0, [x28, 2048] ++ bl nandc_wait_flash_ready ++ ldr w4, [x29, 108] ++ mov x3, x24 ++ mov x2, x23 ++ mov w1, w21 ++ mov w0, w22 ++ bl flash_read_page ++ mov w4, w0 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 4, .L2067 ++ mov w3, w4 ++ str w4, [x29, 96] ++ mov w2, w21 ++ mov w1, w19 ++ mov x0, x25 ++ bl printk ++ ldr w4, [x29, 96] ++.L2067: ++ cmn w4, #1 ++ beq .L2068 ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ cmn w26, #1 ++ csel w26, w26, w4, ne ++ ldr x23, [x0, 304] ++ ldr x24, [x0, 320] ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1249] ++ add w0, w0, w0, lsl 1 ++ cmp w4, w0, lsr 2 ++ bcc .L2075 ++.L2068: ++ add w19, w19, 1 ++ add x27, x27, 4 ++ cmp w19, 26 ++ bne .L2071 ++.L2070: ++ mov w0, 239 ++ str w0, [x28, 2056] ++ mov w0, 137 ++ str w0, [x28, 2052] ++ str wzr, [x28, 2048] ++ str wzr, [x28, 2048] ++ str wzr, [x28, 2048] ++ str wzr, [x28, 2048] ++ b .L2096 ++.L2075: ++ mov w26, w4 ++ b .L2070 ++ .size samsung_read_retrial, .-samsung_read_retrial ++ .align 2 ++ .global hynix_read_retrial ++ .type hynix_read_retrial, %function ++hynix_read_retrial: ++ stp x29, x30, [sp, -128]! ++ adrp x5, .LANCHOR0 ++ add x8, x5, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov w22, w1 ++ stp x25, x26, [sp, 64] ++ mov x25, x2 ++ stp x19, x20, [sp, 16] ++ mov x26, x3 ++ stp x23, x24, [sp, 48] ++ and x23, x0, 255 ++ stp x27, x28, [sp, 80] ++ mov w27, w4 ++ stp x5, x8, [x29, 112] ++ mov x21, x23 ++ ldr x28, [x8, 1048] ++ mov w19, -1 ++ add x28, x28, 112 ++ add x0, x28, x23 ++ ldrb w24, [x28, 2] ++ ldrb w20, [x0, 8] ++ bl nandc_wait_flash_ready ++ mov w0, w23 ++ bl zftl_flash_enter_slc_mode ++ mov w0, w23 ++ bl zftl_flash_exit_slc_mode ++ ldp x5, x8, [x29, 112] ++ adrp x7, .LANCHOR5 ++ add x7, x7, :lo12:.LANCHOR5 ++ mov w6, 0 ++.L2098: ++ cmp w6, w24 ++ bcc .L2103 ++.L2102: ++ add x1, x5, :lo12:.LANCHOR0 ++ add x23, x28, x23 ++ ldrb w0, [x1, 1249] ++ strb w20, [x23, 8] ++ add w0, w0, w0, lsl 1 ++ cmp w19, w0, lsr 2 ++ bcc .L2104 ++ cmn w19, #1 ++ mov w0, 256 ++ csel w19, w19, w0, eq ++.L2104: ++ cmp w19, 256 ++ ccmn w19, #1, 4, ne ++ bne .L2105 ++ adrp x0, .LC160 ++ mov w4, w19 ++ mov w3, w6 ++ mov w2, w22 ++ mov w1, w6 ++ add x0, x0, :lo12:.LC160 ++ bl printk ++.L2105: ++ 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], 128 ++ ret ++.L2103: ++ add w20, w20, 1 ++ stp x8, x7, [x29, 96] ++ and w20, w20, 255 ++ str x5, [x29, 112] ++ cmp w24, w20 ++ str w6, [x29, 120] ++ csel w20, w20, wzr, hi ++ mov w0, w21 ++ mov w1, w20 ++ bl hynix_set_rr_para ++ mov w4, w27 ++ mov x3, x26 ++ mov x2, x25 ++ mov w1, w22 ++ mov w0, w21 ++ bl flash_read_page ++ ldr w6, [x29, 120] ++ cmn w0, #1 ++ ldp x8, x7, [x29, 96] ++ ldr x5, [x29, 112] ++ beq .L2100 ++ ldrb w1, [x8, 1249] ++ cmn w19, #1 ++ csel w19, w19, w0, ne ++ ldr x25, [x7, 304] ++ ldr x26, [x7, 320] ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ bcc .L2106 ++.L2100: ++ add w6, w6, 1 ++ b .L2098 ++.L2106: ++ mov w19, w0 ++ b .L2102 ++ .size hynix_read_retrial, .-hynix_read_retrial ++ .align 2 ++ .global flash_ddr_tuning_read ++ .type flash_ddr_tuning_read, %function ++flash_ddr_tuning_read: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov w22, w1 ++ stp x23, x24, [sp, 48] ++ mov x24, x2 ++ stp x25, x26, [sp, 64] ++ adrp x23, .LANCHOR5 ++ stp x27, x28, [sp, 80] ++ mov x25, x3 ++ str w4, [x29, 120] ++ add x23, x23, :lo12:.LANCHOR5 ++ bl nandc_get_ddr_para ++ mov w28, 0 ++ str w0, [x29, 116] ++ mov w26, 0 ++ adrp x0, .LC161 ++ mov w27, 0 ++ add x0, x0, :lo12:.LC161 ++ mov w19, 1024 ++ mov w21, -1 ++ mov w7, 6 ++ str wzr, [x29, 124] ++ str x0, [x29, 104] ++.L2122: ++ mov w0, w7 ++ str w7, [x29, 112] ++ bl nandc_set_ddr_para ++ ldr w4, [x29, 120] ++ mov x3, x25 ++ mov x2, x24 ++ mov w1, w22 ++ mov w0, w20 ++ bl flash_read_page ++ mov w4, w0 ++ adrp x0, .LANCHOR2 ++ ldr w7, [x29, 112] ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 4, .L2117 ++ ldr x0, [x29, 104] ++ mov w3, w4 ++ mov w1, w7 ++ str w4, [x29, 100] ++ str w7, [x29, 112] ++ mov w2, w22 ++ bl printk ++ ldr w4, [x29, 100] ++ ldr w7, [x29, 112] ++.L2117: ++ add w0, w19, 1 ++ cmp w4, w0 ++ bhi .L2118 ++ adrp x0, .LANCHOR0+1249 ++ ldr x24, [x23, 304] ++ ldr x25, [x23, 320] ++ ldrb w0, [x0, #:lo12:.LANCHOR0+1249] ++ cmp w4, w0, lsr 2 ++ bcs .L2128 ++ add w27, w27, 1 ++ cmp w27, 7 ++ bls .L2128 ++ sub w28, w7, w27 ++ mov w19, w4 ++ mov w21, 0 ++.L2120: ++ ldr w0, [x29, 124] ++ cmp w27, w26 ++ csel w28, w28, w0, cs ++.L2121: ++ cbz w28, .L2123 ++ adrp x0, .LANCHOR0+1249 ++ mov w1, 3 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+1249] ++ udiv w0, w0, w1 ++ cmp w0, w19 ++ bls .L2123 ++ mov w1, w28 ++ adrp x0, .LC162 ++ add x0, x0, :lo12:.LC162 ++ bl printk ++ mov w0, w28 ++.L2142: ++ bl nandc_set_ddr_para ++ cbz w21, .L2116 ++ adrp x0, .LANCHOR0 ++ add x27, x0, :lo12:.LANCHOR0 ++ mov x23, x0 ++ ldrb w1, [x27, 1248] ++ tbz x1, 0, .L2116 ++ mov w2, w22 ++ mov w1, w20 ++ adrp x0, .LC163 ++ add x0, x0, :lo12:.LC163 ++ bl printk ++ mov w0, w20 ++ bl flash_reset ++ mov w0, 1 ++ bl flash_set_interface_mode ++ mov w0, 1 ++ bl nandc_set_if_mode ++ add x0, x27, w20, sxtw ++ mov w1, 2 ++ strb w1, [x0, 1208] ++ mov w0, w20 ++ bl zftl_flash_enter_slc_mode ++ ldr w4, [x29, 120] ++ mov x3, x25 ++ mov x2, x24 ++ mov w1, w22 ++ mov w0, w20 ++ bl flash_read_page ++ mov w19, w0 ++ mov w3, w0 ++ mov w2, w22 ++ mov w1, w20 ++ adrp x0, .LC164 ++ add x0, x0, :lo12:.LC164 ++ bl printk ++ ldrb w0, [x27, 1249] ++ cmp w19, w0 ++ bhi .L2130 ++ adrp x1, .LANCHOR5 ++ add x1, x1, :lo12:.LANCHOR5 ++ ldr w0, [x1, 332] ++ add w0, w0, 1 ++ str w0, [x1, 332] ++ cmp w0, 100 ++ bls .L2126 ++ strb wzr, [x27, 1192] ++.L2116: ++ 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 ++.L2118: ++ cmp w27, w26 ++ bls .L2129 ++ sub w0, w28, w27 ++ str w0, [x29, 124] ++ cmp w27, 7 ++ bhi .L2121 ++ mov w26, w27 ++.L2129: ++ mov w27, 0 ++ b .L2119 ++.L2128: ++ mov w28, w7 ++ mov w19, w4 ++ mov w21, 0 ++.L2119: ++ add w7, w7, 2 ++ cmp w7, 50 ++ bne .L2122 ++ b .L2120 ++.L2123: ++ ldrb w0, [x29, 116] ++ b .L2142 ++.L2130: ++ mov w19, w21 ++.L2126: ++ add x23, x23, :lo12:.LANCHOR0 ++ ldrb w0, [x23, 1248] ++ bl flash_set_interface_mode ++ ldrb w0, [x23, 1248] ++ bl nandc_set_if_mode ++ b .L2116 ++ .size flash_ddr_tuning_read, .-flash_ddr_tuning_read ++ .align 2 ++ .global flash_read_page_en ++ .type flash_read_page_en, %function ++flash_read_page_en: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ stp x25, x26, [sp, 64] ++ and w25, w0, 255 ++ add x0, x20, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ stp x21, x22, [sp, 32] ++ mov w19, w1 ++ mov x22, x2 ++ mov x23, x3 ++ ldrb w0, [x0, 1153] ++ mov w24, w4 ++ cmp w0, w25 ++ bhi .L2144 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 288 ++ mov w2, 431 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2144: ++ add x0, x20, :lo12:.LANCHOR0 ++ add x1, x0, w25, sxtw ++ ldrb w4, [x0, 1153] ++ ldrb w21, [x1, 1196] ++ cmp w25, w4 ++ bcc .L2145 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbnz x0, 6, .L2146 ++.L2170: ++ mov w0, -1 ++.L2143: ++ 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 ++.L2146: ++ mov w3, w19 ++ mov w2, w25 ++ mov w1, w21 ++ adrp x0, .LC165 ++ add x0, x0, :lo12:.LC165 ++ bl printk ++ b .L2170 ++.L2145: ++ tst x19, 50331648 ++ bne .L2148 ++ ldrb w1, [x20, #:lo12:.LANCHOR0] ++ cbz w1, .L2149 ++ ldrb w0, [x0, 1] ++ cbz w0, .L2148 ++.L2149: ++ add x1, x20, :lo12:.LANCHOR0 ++ ldrh w2, [x1, 2] ++ udiv w0, w19, w2 ++ mul w0, w0, w2 ++ ldrb w2, [x1, 1] ++ sub w19, w19, w0 ++ cbz w2, .L2150 ++ add w19, w0, w19, lsl 1 ++.L2148: ++ mov w4, w24 ++ mov x3, x23 ++ mov x2, x22 ++ mov w1, w19 ++ mov w0, w21 ++ bl flash_read_page ++ cmn w0, #1 ++ bne .L2143 ++ add x25, x20, :lo12:.LANCHOR0 ++ ldrb w26, [x25, 1252] ++ cbnz w26, .L2151 ++.L2154: ++ adrp x0, .LANCHOR5+336 ++ ldr x5, [x0, #:lo12:.LANCHOR5+336] ++ cbnz x5, .L2152 ++.L2153: ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w3, -1 ++ mov w2, w19 ++ mov w1, 0 ++ adrp x0, .LC166 ++ add x0, x0, :lo12:.LC166 ++ ldrb w4, [x20, 1252] ++ bl printk ++ ldrb w0, [x20, 1192] ++ cbz w0, .L2170 ++ mov w4, w24 ++ mov x3, x23 ++ mov x2, x22 ++ mov w1, w19 ++ mov w0, w21 ++ bl flash_ddr_tuning_read ++ b .L2143 ++.L2150: ++ add x1, x1, 4 ++ ldrh w19, [x1, w19, uxtw 1] ++ add w19, w19, w0 ++ b .L2148 ++.L2151: ++ strb wzr, [x25, 1252] ++ mov w4, w24 ++ mov x3, x23 ++ mov x2, x22 ++ mov w1, w19 ++ mov w0, w21 ++ bl flash_read_page ++ strb w26, [x25, 1252] ++ cmn w0, #1 ++ beq .L2154 ++ b .L2143 ++.L2152: ++ mov w4, w24 ++ mov x3, x23 ++ mov x2, x22 ++ mov w1, w19 ++ mov w0, w21 ++ blr x5 ++ cmn w0, #1 ++ bne .L2143 ++ b .L2153 ++ .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, -112]! ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ and w23, w0, 255 ++ adrp x0, .LANCHOR5+172 ++ stp x19, x20, [sp, 16] ++ stp x27, x28, [sp, 80] ++ adrp x27, .LANCHOR2 ++ ldrh w19, [x0, #:lo12:.LANCHOR5+172] ++ add x0, x27, :lo12:.LANCHOR2 ++ stp x21, x22, [sp, 32] ++ and w21, w1, 65535 ++ stp x25, x26, [sp, 64] ++ sub w19, w19, #1 ++ sxth w19, w19 ++ mov x24, x2 ++ ldrh w26, [x0, 34] ++ mov x22, x3 ++ mov w25, w4 ++ mov w0, w23 ++ mul w26, w26, w21 ++ add w1, w19, w26 ++ bl flash_read_page_en ++ cmp w0, 512 ++ bne .L2172 ++ mov w28, 0 ++ mov w5, 2 ++.L2173: ++ cmp w28, w19 ++ ble .L2176 ++.L2172: ++ ldr w0, [x27, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2177 ++ ldr w3, [x22] ++ adrp x0, .LC167 ++ mov w2, w19 ++ mov w1, w21 ++ add x0, x0, :lo12:.LC167 ++ bl printk ++.L2177: ++ 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], 112 ++ ret ++.L2176: ++ add w20, w28, w19 ++ str w5, [x29, 108] ++ mov w4, w25 ++ mov x3, x22 ++ mov x2, x24 ++ mov w0, w23 ++ sdiv w20, w20, w5 ++ add w1, w26, w20, sxth ++ bl flash_read_page_en ++ ldr w5, [x29, 108] ++ cmp w0, 512 ++ bne .L2174 ++ sub w19, w20, #1 ++ sxth w19, w19 ++ b .L2173 ++.L2174: ++ add w20, w20, 1 ++ sxth w28, w20 ++ b .L2173 ++ .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: ++ stp x29, x30, [sp, -16]! ++ adrp x4, .LANCHOR0+1205 ++ mov w5, 24 ++ mov w6, 1 ++ add x29, sp, 0 ++ ldrb w4, [x4, #:lo12:.LANCHOR0+1205] ++ and w0, w0, 65535 ++ sub w5, w5, w4 ++ adrp x4, .LANCHOR3+1304 ++ ldrh w4, [x4, #:lo12:.LANCHOR3+1304] ++ sub w5, w5, w4 ++ mov w4, w3 ++ mov x3, x2 ++ mov x2, x1 ++ lsl w6, w6, w5 ++ sub w6, w6, #1 ++ and w1, w6, w0 ++ asr w0, w0, w5 ++ 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_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 ++ stp x21, x22, [sp, 32] ++ add x21, x19, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ and w23, w0, 255 ++ mov w24, w1 ++ mov w22, 1 ++ ldrb w0, [x21, 1248] ++ adrp x20, .LANCHOR5 ++ strb w22, [x21, 1192] ++ add x20, x20, :lo12:.LANCHOR5 ++ bl flash_set_interface_mode ++ ldrb w0, [x21, 1248] ++ bl nandc_set_if_mode ++ ldp x3, x2, [x20, 344] ++ mov w4, 4 ++ mov w1, w24 ++ mov w0, w23 ++ bl flash_ddr_tuning_read ++ ldp x3, x2, [x20, 344] ++ mov w4, 4 ++ mov w1, w24 ++ mov w0, w23 ++ bl flash_read_page ++ cmn w0, #1 ++ bne .L2185 ++ ldrb w0, [x21, 1248] ++ tbz x0, 0, .L2185 ++ mov w0, 1 ++ bl flash_set_interface_mode ++ mov w0, w22 ++ bl nandc_set_if_mode ++ strb wzr, [x21, 1192] ++.L2186: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2185: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w0, 1 ++ strb w0, [x19, 1192] ++ b .L2186 ++ .size flash_ddr_para_scan, .-flash_ddr_para_scan ++ .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] ++ and w21, w0, 255 ++ str x27, [sp, 80] ++ adrp x27, .LANCHOR0 ++ add x0, x27, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ mov w22, w1 ++ stp x25, x26, [sp, 64] ++ mov w20, 24 ++ mov x24, x2 ++ mov x25, x3 ++ ldrb w1, [x0, 1205] ++ and x19, x21, 255 ++ ldr x26, [x0, 1056] ++ add x23, x19, 8 ++ sub w1, w20, w1 ++ mov w20, 1 ++ lsl w20, w20, w1 ++ sub w20, w20, #1 ++ bl nandc_wait_flash_ready ++ and w20, w20, w22 ++ mov w0, w21 ++ bl hynix_reconfig_rr_para ++ mov w0, w21 ++ bl nandc_cs ++ add x23, x26, x23, lsl 8 ++ mov w0, w21 ++ tst x22, 50331648 ++ bne .L2192 ++ bl zftl_flash_enter_slc_mode ++.L2193: ++ add x19, x26, x19, lsl 8 ++ mov w0, 128 ++ str w0, [x19, 2056] ++ and w0, w20, 255 ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w0, [x19, 2052] ++ lsr w0, w20, 8 ++ str w0, [x19, 2052] ++ lsr w0, w20, 16 ++ str w0, [x19, 2052] ++ add x0, x27, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1204] ++ cbz w0, .L2194 ++ lsr w0, w20, 24 ++ str w0, [x19, 2052] ++.L2194: ++ mov w0, w20 ++ bl nandc_set_seed ++ adrp x0, .LANCHOR2+17 ++ mov x4, x25 ++ mov x3, x24 ++ mov w1, 1 ++ ldrb w2, [x0, #:lo12:.LANCHOR2+17] ++ mov w0, w21 ++ bl nandc_xfer ++ mov w0, 16 ++ str w0, [x19, 2056] ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov x0, x23 ++ bl flash_read_status ++ mov w3, w0 ++ bl nandc_de_cs.constprop.35 ++ and w2, w3, 4 ++ tbz x3, 2, .L2191 ++ mov w1, w22 ++ adrp x0, .LC168 ++ add x0, x0, :lo12:.LC168 ++ bl printk ++ mov w2, -1 ++.L2191: ++ mov w0, w2 ++ 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 ++.L2192: ++ bl zftl_flash_exit_slc_mode ++ b .L2193 ++ .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]! ++ mov w2, 32 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR5 ++ add x19, x19, :lo12:.LANCHOR5 ++ stp x21, x22, [sp, 32] ++ and w22, w0, 255 ++ and w20, w1, 65535 ++ mov w1, 165 ++ ldr x0, [x19, 304] ++ bl ftl_memset ++ ldr x0, [x19, 320] ++ mov w2, 8 ++ mov w1, 90 ++ bl ftl_memset ++ adrp x0, .LANCHOR0+2 ++ ldrh w0, [x0, #:lo12:.LANCHOR0+2] ++ mul w20, w0, w20 ++ mov w0, w22 ++ mov w1, w20 ++ bl flash_erase_block ++ cmn w0, #1 ++ bne .L2204 ++.L2206: ++ mov w19, -1 ++.L2205: ++ mov w1, w20 ++ mov w0, w22 ++ bl flash_erase_block ++ mov w0, w19 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2204: ++ adrp x21, .LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR2 ++ ldr x2, [x19, 304] ++ mov w1, w20 ++ ldr x3, [x19, 320] ++ mov w0, w22 ++ ldrb w4, [x21, 17] ++ add x21, x21, 8 ++ bl flash_prog_page ++ cmn w0, #1 ++ beq .L2206 ++ ldrb w4, [x21, 9] ++ mov w1, w20 ++ ldr x2, [x19, 304] ++ mov w0, w22 ++ ldr x3, [x19, 320] ++ bl flash_read_page_en ++ cmn w0, #1 ++ beq .L2206 ++ ldr x0, [x19, 304] ++ ldr w1, [x0] ++ mov w0, 42405 ++ movk w0, 0xa5a5, lsl 16 ++ cmp w1, w0 ++ bne .L2206 ++ ldr x0, [x19, 320] ++ ldr w1, [x0] ++ mov w0, 23130 ++ movk w0, 0x5a5a, lsl 16 ++ cmp w1, w0 ++ csetm w19, ne ++ b .L2205 ++ .size flash_test_blk, .-flash_test_blk ++ .align 2 ++ .global flash_start_one_pass_page_prog ++ .type flash_start_one_pass_page_prog, %function ++flash_start_one_pass_page_prog: ++ stp x29, x30, [sp, -32]! ++ and w9, w0, 255 ++ and w8, w3, 255 ++ adrp x7, .LANCHOR0 ++ add x29, sp, 0 ++ add x0, x7, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ and w20, w2, 255 ++ ldr x19, [x0, 1056] ++ mov w0, w8 ++ bl nandc_cs ++ cbz w9, .L2215 ++ sxtw x0, w8 ++ add x0, x0, 8 ++ add x0, x19, x0, lsl 8 ++ str w9, [x0, 8] ++.L2215: ++ ubfiz x0, x8, 8, 8 ++ add x7, x7, :lo12:.LANCHOR0 ++ add x19, x19, x0 ++ mov w0, 128 ++ 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 ++ str w0, [x19, 2052] ++ ldrb w0, [x7, 1204] ++ cbz w0, .L2216 ++ lsr w0, w4, 24 ++ str w0, [x19, 2052] ++.L2216: ++ mov w0, w4 ++ bl nandc_set_seed ++ adrp x0, .LANCHOR2+17 ++ mov x4, x6 ++ mov x3, x5 ++ mov w1, 1 ++ ldrb w2, [x0, #:lo12:.LANCHOR2+17] ++ mov w0, w8 ++ bl nandc_xfer ++ str w20, [x19, 2056] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++ .size flash_start_one_pass_page_prog, .-flash_start_one_pass_page_prog ++ .align 2 ++ .global flash_dual_page_prog ++ .type flash_dual_page_prog, %function ++flash_dual_page_prog: ++ stp x29, x30, [sp, -96]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ ubfiz x22, x20, 8, 8 ++ stp x23, x24, [sp, 48] ++ mov w19, 24 ++ stp x25, x26, [sp, 64] ++ mov x25, x2 ++ stp x27, x28, [sp, 80] ++ add x2, x22, 2048 ++ adrp x27, .LANCHOR2 ++ mov w21, w1 ++ ldr x22, [x0, 1056] ++ mov x26, x3 ++ ldrb w0, [x0, 1205] ++ mov x23, x4 ++ mov x24, x5 ++ ubfx x28, x21, 24, 2 ++ sub w0, w19, w0 ++ mov w19, 1 ++ add x22, x22, x2 ++ lsl w19, w19, w0 ++ ldr w0, [x27, #:lo12:.LANCHOR2] ++ sub w19, w19, #1 ++ and w19, w19, w1 ++ tbz x0, 4, .L2225 ++ adrp x0, .LC169 ++ mov w3, w6 ++ mov w2, w28 ++ add x0, x0, :lo12:.LC169 ++ bl printk ++.L2225: ++ bl nandc_wait_flash_ready ++ mov w0, w20 ++ bl nandc_cs ++ mov w0, w20 ++ cbnz w28, .L2226 ++ bl zftl_flash_enter_slc_mode ++.L2227: ++ mov x6, x26 ++ mov x5, x25 ++ mov w4, w19 ++ mov w3, w20 ++ mov w2, 16 ++ mov w1, 0 ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ mov x6, x24 ++ mov x5, x23 ++ add w4, w19, 1 ++ mov w3, w20 ++ mov w2, 16 ++ mov w1, 0 ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ mov x0, x22 ++ bl flash_read_status ++ mov w3, w0 ++ bl nandc_de_cs.constprop.35 ++ and w2, w3, 4 ++ tbz x3, 2, .L2224 ++ ldr w0, [x27, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2229 ++ adrp x0, .LC168 ++ mov w1, w21 ++ add x0, x0, :lo12:.LC168 ++ bl printk ++.L2229: ++ mov w2, -1 ++.L2224: ++ 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], 96 ++ ret ++.L2226: ++ bl zftl_flash_exit_slc_mode ++ b .L2227 ++ .size flash_dual_page_prog, .-flash_dual_page_prog ++ .align 2 ++ .global ymtc_flash_tlc_page_prog ++ .type ymtc_flash_tlc_page_prog, %function ++ymtc_flash_tlc_page_prog: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ str x25, [sp, 64] ++ mov w25, w1 ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov w19, 24 ++ stp x23, x24, [sp, 48] ++ ubfiz x24, x20, 8, 8 ++ add x0, x24, 2048 ++ mov x22, x2 ++ ldr x24, [x1, 1056] ++ mov x23, x3 ++ mov w21, 1 ++ add x24, x24, x0 ++ ldrb w0, [x1, 1205] ++ sub w19, w19, w0 ++ bl nandc_wait_flash_ready ++ lsl w19, w21, w19 ++ mov w0, w20 ++ sub w19, w19, #1 ++ bl nandc_cs ++ and w19, w19, w25 ++ mov w0, w20 ++ bl zftl_flash_exit_slc_mode ++ mov x6, x23 ++ mov x5, x22 ++ mov w4, w19 ++ mov w3, w20 ++ mov w1, w21 ++ mov w2, 26 ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ mov x6, x23 ++ mov x5, x22 ++ add w4, w19, w21 ++ mov w3, w20 ++ mov w1, w21 ++ mov w2, 26 ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ mov x6, x23 ++ mov x5, x22 ++ add w4, w19, 2 ++ mov w3, w20 ++ mov w1, w21 ++ mov w2, 16 ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ mov x0, x24 ++ bl flash_read_status ++ mov w3, w0 ++ bl nandc_de_cs.constprop.35 ++ and w2, w3, 4 ++ tbz x3, 2, .L2237 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2239 ++ adrp x0, .LC170 ++ mov w1, w25 ++ add x0, x0, :lo12:.LC170 ++ bl printk ++.L2239: ++ mov w2, -1 ++.L2237: ++ mov w0, w2 ++ 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 ymtc_flash_tlc_page_prog, .-ymtc_flash_tlc_page_prog ++ .section .text.unlikely ++ .align 2 ++ .type fw_flash_page_prog.constprop.29, %function ++fw_flash_page_prog.constprop.29: ++ stp x29, x30, [sp, -64]! ++ adrp x4, .LANCHOR0 ++ add x4, x4, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov x21, x1 ++ str x23, [sp, 48] ++ mov x23, x2 ++ stp x19, x20, [sp, 16] ++ ldr x1, [x4, 1144] ++ ldrb w22, [x4, 1249] ++ ldrb w19, [x1, 9] ++ udiv w19, w0, w19 ++ ldrb w0, [x4, 1152] ++ bl nandc_bch_sel ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ ldrb w1, [x0, 15] ++ cmp w1, 9 ++ bne .L2245 ++ ldrb w1, [x4, 1154] ++ cbnz w1, .L2245 ++ add x0, x0, 8 ++ ldrb w0, [x0, 12] ++ cmp w0, 3 ++ bne .L2246 ++ mov x3, x23 ++ mov x2, x21 ++ mov w1, w19 ++ mov w0, 0 ++ bl ymtc_flash_tlc_page_prog ++.L2249: ++ mov w4, w0 ++ mov w0, w22 ++ bl nandc_bch_sel ++ mov w0, w4 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2246: ++ adrp x20, .LANCHOR5 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w2, 16384 ++ mov w1, 255 ++ ldr x0, [x20, 304] ++ bl ftl_memset ++ ldr x5, [x20, 304] ++ mov w6, 4 ++ mov x3, x23 ++ mov x2, x21 ++ mov w1, w19 ++ mov x4, x5 ++ mov w0, 0 ++ bl flash_dual_page_prog ++ b .L2249 ++.L2245: ++ mov w4, 4 ++ mov x3, x23 ++ mov x2, x21 ++ mov w1, w19 ++ mov w0, 0 ++ bl flash_prog_page ++ b .L2249 ++ .size fw_flash_page_prog.constprop.29, .-fw_flash_page_prog.constprop.29 ++ .text ++ .align 2 ++ .global flash_start_tlc_page_prog ++ .type flash_start_tlc_page_prog, %function ++flash_start_tlc_page_prog: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w21, w1, 255 ++ stp x25, x26, [sp, 64] ++ and w25, w0, 255 ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ and w26, w3, 255 ++ stp x23, x24, [sp, 48] ++ and w22, w2, 255 ++ mov w20, w4 ++ mov x23, x5 ++ ldrb w1, [x1, 1153] ++ mov x24, x6 ++ mov x19, x0 ++ cmp w1, w26 ++ bhi .L2251 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 312 ++ mov w2, 868 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2251: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1153] ++ cmp w1, w26 ++ bls .L2250 ++ add x26, x0, w26, sxtw ++ ldr x19, [x0, 1056] ++ ldrb w5, [x26, 1196] ++ mov w0, w5 ++ bl nandc_cs ++ cbz w25, .L2253 ++ sxtw x0, w5 ++ add x0, x0, 8 ++ add x0, x19, x0, lsl 8 ++ str w25, [x0, 8] ++.L2253: ++ ubfiz x0, x5, 8, 8 ++ add x19, x19, x0 ++ mov w0, 128 ++ str w21, [x19, 2056] ++ str w0, [x19, 2056] ++ and w0, w20, 255 ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w0, [x19, 2052] ++ lsr w0, w20, 8 ++ str w0, [x19, 2052] ++ lsr w0, w20, 16 ++ add w20, w20, w20, lsl 1 ++ str w0, [x19, 2052] ++ sub w0, w20, #1 ++ add w0, w0, w21 ++ bl nandc_set_seed ++ adrp x0, .LANCHOR2+17 ++ mov x4, x24 ++ mov x3, x23 ++ mov w1, 1 ++ ldrb w2, [x0, #:lo12:.LANCHOR2+17] ++ mov w0, w5 ++ bl nandc_xfer ++ str w22, [x19, 2056] ++ bl nandc_de_cs.constprop.35 ++.L2250: ++ 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_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, -64]! ++ mov w3, 24 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ mov x21, x0 ++ stp x23, x24, [sp, 48] ++ adrp x22, .LANCHOR0 ++ mov w24, w1 ++ mov w23, 1 ++ ldr x7, [x0] ++ add x0, x22, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1205] ++ ldr w2, [x7, 40] ++ sub w3, w3, w1 ++ ldrb w0, [x0, 1213] ++ lsl w19, w23, w1 ++ sub w19, w19, #1 ++ lsl w20, w23, w3 ++ sub w20, w20, #1 ++ and w20, w20, w2 ++ lsr w2, w2, w3 ++ and w19, w19, w2 ++ and w19, w19, 255 ++ cbz w0, .L2259 ++ mov w0, w19 ++ bl zftl_flash_exit_slc_mode ++ ldr x0, [x21] ++ mov w4, w20 ++ mov w3, w19 ++ mov w1, w23 ++ mov w2, 26 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr x0, [x21, 8] ++ add w4, w20, w23 ++ mov w3, w19 ++ mov w1, w23 ++ mov w2, 26 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr x0, [x21, 16] ++ add w4, w20, 2 ++ mov w3, w19 ++ mov w2, 16 ++ mov w1, w23 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++.L2260: ++ cbz w24, .L2258 ++ ldr x1, [x21] ++ mov w0, 4 ++ strb w0, [x1, 58] ++ mov w0, 1 ++ strb w0, [x1, 59] ++ mov w0, -1 ++ strb w0, [x1] ++ add x0, x22, :lo12:.LANCHOR0 ++ add x0, x0, 3354 ++ bl buf_add_tail ++.L2258: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2259: ++ ldr x5, [x7, 8] ++ mov w4, w20 ++ ldr x6, [x7, 24] ++ mov w3, w19 ++ ldrb w0, [x7, 60] ++ mov w1, w23 ++ mov w2, 26 ++ bl flash_start_tlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldp x7, x0, [x21] ++ mov w4, w20 ++ mov w3, w19 ++ mov w2, 26 ++ mov w1, 2 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ ldrb w0, [x7, 60] ++ bl flash_start_tlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr x0, [x21, 16] ++ mov w4, w20 ++ ldr x7, [x21] ++ mov w3, w19 ++ mov w2, 16 ++ mov w1, 3 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ ldrb w0, [x7, 60] ++ bl flash_start_tlc_page_prog ++ b .L2260 ++ .size queue_tlc_prog_cmd, .-queue_tlc_prog_cmd ++ .align 2 ++ .global sblk_3d_tlc_dump_prog ++ .type sblk_3d_tlc_dump_prog, %function ++sblk_3d_tlc_dump_prog: ++ stp x29, x30, [sp, -48]! ++ adrp x1, .LANCHOR0 ++ add x1, x1, :lo12:.LANCHOR0 ++ mov w3, 24 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x0 ++ stp x21, x22, [sp, 32] ++ mov w22, 1 ++ ldr w2, [x0, 40] ++ ldrb w0, [x1, 1205] ++ sub w3, w3, w0 ++ lsl w19, w22, w0 ++ ldrb w0, [x1, 1213] ++ lsl w21, w22, w3 ++ sub w19, w19, #1 ++ sub w21, w21, #1 ++ and w21, w21, w2 ++ lsr w2, w2, w3 ++ and w19, w19, w2 ++ and w19, w19, 255 ++ cbz w0, .L2267 ++ mov w0, w19 ++ bl zftl_flash_exit_slc_mode ++ ldr x5, [x20, 8] ++ mov w4, w21 ++ ldr x6, [x20, 24] ++ mov w3, w19 ++ mov w1, w22 ++ mov w2, 26 ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr x5, [x20, 8] ++ add w4, w21, w22 ++ ldr x6, [x20, 24] ++ mov w3, w19 ++ mov w1, w22 ++ mov w2, 26 ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr x5, [x20, 8] ++ add w4, w21, 2 ++ ldr x6, [x20, 24] ++ mov w3, w19 ++ mov w2, 16 ++ mov w1, w22 ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++.L2268: ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr w0, [x20, 40] ++ mov w1, 64 ++ bl flash_wait_device_ready ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L2267: ++ ldr x5, [x20, 8] ++ mov w4, w21 ++ ldr x6, [x20, 24] ++ mov w3, w19 ++ mov w1, w22 ++ mov w2, 26 ++ mov w0, 0 ++ bl flash_start_tlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr x5, [x20, 8] ++ mov w4, w21 ++ ldr x6, [x20, 24] ++ mov w3, w19 ++ mov w2, 26 ++ mov w1, 2 ++ mov w0, 0 ++ bl flash_start_tlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr x5, [x20, 8] ++ mov w4, w21 ++ ldr x6, [x20, 24] ++ mov w3, w19 ++ mov w2, 16 ++ mov w1, 3 ++ mov w0, 0 ++ bl flash_start_tlc_page_prog ++ b .L2268 ++ .size sblk_3d_tlc_dump_prog, .-sblk_3d_tlc_dump_prog ++ .align 2 ++ .global flash_start_3d_mlc_page_prog ++ .type flash_start_3d_mlc_page_prog, %function ++flash_start_3d_mlc_page_prog: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w1, 255 ++ stp x21, x22, [sp, 32] ++ and w21, w0, 255 ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ mov x22, x3 ++ mov w24, w2 ++ mov x23, x4 ++ ldrb w1, [x1, 1153] ++ mov x19, x0 ++ cmp w1, w20 ++ bhi .L2271 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 344 ++ mov w2, 903 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2271: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1153] ++ cmp w1, w20 ++ bls .L2270 ++ add x20, x0, w20, sxtw ++ ldr x19, [x0, 1056] ++ ldrb w5, [x20, 1196] ++ mov w0, w5 ++ bl nandc_cs ++ ubfiz x0, x5, 8, 8 ++ add x19, x19, x0 ++ mov w0, 128 ++ str w0, [x19, 2056] ++ and w0, w24, 255 ++ str wzr, [x19, 2052] ++ str wzr, [x19, 2052] ++ str w0, [x19, 2052] ++ lsr w0, w24, 8 ++ str w0, [x19, 2052] ++ lsr w0, w24, 16 ++ str w0, [x19, 2052] ++ mov w0, w24 ++ bl nandc_set_seed ++ adrp x0, .LANCHOR2+17 ++ mov x4, x23 ++ mov x3, x22 ++ mov w1, 1 ++ ldrb w2, [x0, #:lo12:.LANCHOR2+17] ++ mov w0, w5 ++ bl nandc_xfer ++ str w21, [x19, 2056] ++.L2270: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size flash_start_3d_mlc_page_prog, .-flash_start_3d_mlc_page_prog ++ .align 2 ++ .global sblk_mlc_dump_prog ++ .type sblk_mlc_dump_prog, %function ++sblk_mlc_dump_prog: ++ stp x29, x30, [sp, -48]! ++ mov w2, 24 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x0 ++ str x21, [sp, 32] ++ ldr w1, [x0, 40] ++ adrp x0, .LANCHOR0+1205 ++ ldrb w19, [x0, #:lo12:.LANCHOR0+1205] ++ mov w0, 1 ++ sub w2, w2, w19 ++ lsl w19, w0, w19 ++ sub w19, w19, #1 ++ lsl w21, w0, w2 ++ sub w21, w21, #1 ++ and w21, w21, w1 ++ lsr w1, w1, w2 ++ and w19, w19, w1 ++ and w19, w19, 255 ++ mov w0, w19 ++ bl zftl_flash_exit_slc_mode ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2275 ++ ldr w2, [x20, 40] ++ adrp x0, .LC171 ++ mov w1, w21 ++ add x0, x0, :lo12:.LC171 ++ add w3, w2, 1 ++ bl printk ++.L2275: ++ ldr x3, [x20, 8] ++ mov w2, w21 ++ ldr x4, [x20, 24] ++ mov w1, w19 ++ mov w0, 16 ++ bl flash_start_3d_mlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr x3, [x20, 8] ++ add w2, w21, 1 ++ ldr x4, [x20, 24] ++ mov w1, w19 ++ mov w0, 16 ++ bl flash_start_3d_mlc_page_prog ++ bl nandc_iqr_wait_flash_ready ++ bl nandc_wait_flash_ready ++ ldr w0, [x20, 40] ++ mov w1, 64 ++ bl flash_wait_device_ready ++ mov w2, w0 ++ bl nandc_de_cs.constprop.35 ++ mov w0, w2 ++ ldp x19, x20, [sp, 16] ++ ldr x21, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size sblk_mlc_dump_prog, .-sblk_mlc_dump_prog ++ .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 x21, x22, [sp, 32] ++ and w21, w0, 255 ++ stp x25, x26, [sp, 64] ++ adrp x26, .LANCHOR0 ++ add x0, x26, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ mov w24, w1 ++ str x27, [sp, 80] ++ mov w19, 24 ++ mov w20, 1 ++ mov x22, x2 ++ ldrb w1, [x0, 1205] ++ mov x23, x3 ++ ldrb w0, [x0, 1153] ++ sub w25, w19, w1 ++ lsl w20, w20, w1 ++ sub w20, w20, #1 ++ lsr w1, w24, w25 ++ and w20, w20, w1 ++ and w20, w20, 255 ++ cmp w0, w20 ++ bhi .L2281 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 376 ++ mov w2, 956 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2281: ++ add x1, x26, :lo12:.LANCHOR0 ++ ldrb w0, [x1, 1153] ++ cmp w0, w20 ++ bls .L2280 ++ add x0, x1, w20, sxtw ++ mov w19, 1 ++ lsl w19, w19, w25 ++ sub w19, w19, #1 ++ and w19, w19, w24 ++ ldr x25, [x1, 1056] ++ ldrb w27, [x0, 1196] ++ bl nandc_rdy_status ++ cbnz w0, .L2283 ++ ldrb w0, [x1, 1153] ++ cmp w0, 1 ++ bne .L2284 ++ bl nandc_wait_flash_ready ++.L2283: ++ mov w0, w27 ++ bl hynix_reconfig_rr_para ++ mov w0, w27 ++ bl nandc_cs ++ tst x24, 50331648 ++ bne .L2285 ++ mov w0, w19 ++ bl slc_phy_page_address_calc ++ mov w19, w0 ++ ldrb w0, [x26, #:lo12:.LANCHOR0] ++ cbz w0, .L2286 ++ mov w0, w27 ++ bl zftl_flash_enter_slc_mode ++.L2286: ++ ubfiz x20, x27, 8, 8 ++ mov w0, 128 ++ add x20, x25, x20 ++ add x26, x26, :lo12:.LANCHOR0 ++ str w0, [x20, 2056] ++ and w0, w19, 255 ++ str wzr, [x20, 2052] ++ str wzr, [x20, 2052] ++ str w0, [x20, 2052] ++ lsr w0, w19, 8 ++ str w0, [x20, 2052] ++ lsr w0, w19, 16 ++ str w0, [x20, 2052] ++ ldrb w0, [x26, 1204] ++ cbz w0, .L2287 ++ lsr w0, w19, 24 ++ str w0, [x20, 2052] ++.L2287: ++ mov w0, w19 ++ bl nandc_set_seed ++ adrp x0, .LANCHOR2+17 ++ mov x4, x23 ++ mov x3, x22 ++ mov w1, 1 ++ ldrb w2, [x0, #:lo12:.LANCHOR2+17] ++ mov w0, w27 ++ bl nandc_xfer ++ str w21, [x20, 2056] ++ bl nandc_de_cs.constprop.35 ++.L2280: ++ 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 ++.L2284: ++ mov w2, 64 ++ mov w1, w19 ++ mov w0, w20 ++ bl flash_wait_device_ready_raw ++ b .L2283 ++.L2285: ++ mov w0, w27 ++ bl zftl_flash_exit_slc_mode ++ b .L2286 ++ .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 ++ ldr w1, [x0, 40] ++ ldr x3, [x0, 24] ++ ldr x2, [x0, 8] ++ mov w0, 16 ++ bl flash_start_page_prog ++ adrp x0, .LANCHOR0 ++ add x3, x0, :lo12:.LANCHOR0 ++ ldr w4, [x19, 40] ++ ldrb w1, [x3, 3354] ++ cmp w1, 255 ++ beq .L2296 ++ ldrb w5, [x3, 1205] ++ mov w2, 1 ++ mov w6, 24 ++ add x3, x3, 1304 ++ sub w6, w6, w5 ++ lsl w2, w2, w5 ++ sub w2, w2, #1 ++ and w2, w2, 65535 ++ asr w4, w4, w6 ++ and w4, w4, w2 ++.L2298: ++ add x7, x3, x1, lsl 6 ++ ldr w5, [x7, 40] ++ lsr w5, w5, w6 ++ and w5, w2, w5 ++ cmp w4, w5 ++ bne .L2297 ++ ldrb w5, [x7, 58] ++ cmp w5, 7 ++ bne .L2297 ++ mov w1, 3 ++ strb w1, [x7, 58] ++.L2296: ++ mov w1, 3 ++ strb w1, [x19, 58] ++ mov w1, 1 ++ strb w1, [x19, 59] ++ mov w1, -1 ++ strb w1, [x19] ++ add x0, x0, :lo12:.LANCHOR0 ++ mov x1, x19 ++ add x0, x0, 3354 ++ bl buf_add_tail ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2297: ++ lsl x1, x1, 6 ++ ldrb w1, [x3, x1] ++ cmp w1, 255 ++ bne .L2298 ++ b .L2296 ++ .size queue_prog_cmd, .-queue_prog_cmd ++ .align 2 ++ .global flash_complete_plane_page_read ++ .type flash_complete_plane_page_read, %function ++flash_complete_plane_page_read: ++ stp x29, x30, [sp, -64]! ++ mov w4, 24 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ mov w24, w0 ++ add x0, x22, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ mov x20, x1 ++ mov w19, 1 ++ mov x21, x2 ++ ldrb w1, [x0, 1205] ++ ldrb w0, [x0, 1153] ++ sub w23, w4, w1 ++ lsl w19, w19, w1 ++ sub w19, w19, #1 ++ lsr w1, w24, w23 ++ and w19, w19, w1 ++ and w19, w19, 255 ++ cmp w0, w19 ++ bhi .L2305 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 400 ++ mov w2, 1070 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2305: ++ add x2, x22, :lo12:.LANCHOR0 ++ ldrb w0, [x2, 1153] ++ cmp w0, w19 ++ bls .L2316 ++ add x19, x2, w19, sxtw ++ mov w4, 1 ++ lsl w4, w4, w23 ++ ldr x7, [x2, 1056] ++ sub w4, w4, #1 ++ ldrb w9, [x19, 1196] ++ and w4, w4, w24 ++ ubfx x24, x24, 24, 2 ++ mov w0, w9 ++ bl nandc_cs ++ cbnz w24, .L2307 ++ mov w0, w4 ++ bl slc_phy_page_address_calc ++ mov w4, w0 ++.L2307: ++ add x8, x22, :lo12:.LANCHOR0 ++ and x1, x9, 255 ++ and w6, w4, 255 ++ lsr w5, w4, 8 ++ lsr w3, w4, 16 ++ ldrb w0, [x8, 1176] ++ ldrb w2, [x8, 1204] ++ cmp w0, 1 ++ bne .L2308 ++ add x1, x7, x1, lsl 8 ++ mov w0, 6 ++.L2334: ++ str w0, [x1, 2056] ++ str wzr, [x1, 2052] ++ str wzr, [x1, 2052] ++ str w6, [x1, 2052] ++ str w5, [x1, 2052] ++ str w3, [x1, 2052] ++ cbz w2, .L2330 ++ lsr w0, w4, 24 ++ str w0, [x1, 2052] ++.L2330: ++ add x22, x22, :lo12:.LANCHOR0 ++ mov w0, 224 ++ str w0, [x1, 2056] ++ ldr x0, [x22, 1144] ++ ldrb w0, [x0, 12] ++ cmp w0, 3 ++ bne .L2314 ++ cbz w24, .L2314 ++ ldrb w0, [x22, 1212] ++ cbnz w0, .L2314 ++ ldrb w0, [x22, 1213] ++ cbnz w0, .L2314 ++ add w4, w4, w4, lsl 1 ++ sub w0, w24, #1 ++ add w0, w4, w0 ++.L2331: ++ bl nandc_set_seed ++ adrp x0, .LANCHOR2+17 ++ mov x4, x21 ++ mov x3, x20 ++ mov w1, 0 ++ ldrb w2, [x0, #:lo12:.LANCHOR2+17] ++ mov w0, w9 ++ bl nandc_xfer ++ mov w2, w0 ++ bl nandc_de_cs.constprop.35 ++ mov w0, w2 ++.L2304: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2308: ++ ldr x0, [x8, 1144] ++ add x1, x7, x1, lsl 8 ++ ldrb w0, [x0, 12] ++ cmp w0, 3 ++ bne .L2311 ++ mov w0, 5 ++ b .L2334 ++.L2311: ++ str wzr, [x1, 2056] ++ str wzr, [x1, 2052] ++ str wzr, [x1, 2052] ++ str w6, [x1, 2052] ++ str w5, [x1, 2052] ++ str w3, [x1, 2052] ++ cbz w2, .L2313 ++ lsr w0, w4, 24 ++ str w0, [x1, 2052] ++.L2313: ++ mov w0, 5 ++ str w0, [x1, 2056] ++ str wzr, [x1, 2052] ++ str wzr, [x1, 2052] ++ b .L2330 ++.L2314: ++ mov w0, w4 ++ b .L2331 ++.L2316: ++ mov w0, -1 ++ b .L2304 ++ .size flash_complete_plane_page_read, .-flash_complete_plane_page_read ++ .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 x23, x24, [sp, 48] ++ mov x23, x2 ++ adrp x24, .LANCHOR0 ++ add x2, x24, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ mov w21, w0 ++ stp x19, x20, [sp, 16] ++ mov w0, 1 ++ stp x25, x26, [sp, 64] ++ mov x22, x1 ++ stp x27, x28, [sp, 80] ++ mov w1, 24 ++ ubfx x25, x21, 24, 2 ++ ldrb w20, [x2, 1205] ++ sub w1, w1, w20 ++ lsl w20, w0, w20 ++ sub w20, w20, #1 ++ lsl w19, w0, w1 ++ ldrb w0, [x2, 1153] ++ lsr w1, w21, w1 ++ and w20, w20, w1 ++ sub w19, w19, #1 ++ and w20, w20, 255 ++ and w19, w19, w21 ++ cmp w0, w20 ++ bhi .L2336 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 432 ++ mov w2, 1232 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2336: ++ add x0, x24, :lo12:.LANCHOR0 ++ add x20, x0, w20, sxtw ++ ldr x4, [x0, 1056] ++ ldrb w26, [x20, 1196] ++ mov w0, w26 ++ bl nandc_cs ++ cbnz w25, .L2337 ++ mov w0, w19 ++ bl slc_phy_page_address_calc ++ mov w19, w0 ++.L2337: ++ adrp x20, .LANCHOR2 ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 20] ++ cmp w0, 3 ++ bne .L2338 ++ ubfiz x0, x26, 8, 8 ++ mov w1, 5 ++ add x0, x4, x0 ++ str w1, [x0, 2056] ++ and w1, w19, 255 ++ str wzr, [x0, 2052] ++ str wzr, [x0, 2052] ++ str w1, [x0, 2052] ++ lsr w1, w19, 8 ++ str w1, [x0, 2052] ++ lsr w1, w19, 16 ++ str w1, [x0, 2052] ++ mov w1, 224 ++ str w1, [x0, 2056] ++.L2338: ++ add x0, x24, :lo12:.LANCHOR0 ++ ldr x1, [x0, 1144] ++ ldrb w1, [x1, 12] ++ cmp w1, 3 ++ bne .L2339 ++ cbz w25, .L2339 ++ ldrb w1, [x0, 1212] ++ cbnz w1, .L2339 ++ ldrb w0, [x0, 1213] ++ cbnz w0, .L2339 ++ sub w0, w25, #1 ++ add w1, w19, w19, lsl 1 ++ add w0, w0, w1 ++.L2366: ++ add x27, x20, :lo12:.LANCHOR2 ++ bl nandc_set_seed ++ mov x4, x23 ++ mov x3, x22 ++ mov w1, 0 ++ mov w0, w26 ++ ldrb w2, [x27, 17] ++ add x27, x27, 8 ++ bl nandc_xfer ++ cmn w0, #1 ++ bne .L2341 ++ add x28, x24, :lo12:.LANCHOR0 ++ ldrb w5, [x28, 1252] ++ cbz w5, .L2342 ++ ldrb w4, [x27, 9] ++ mov x3, x23 ++ str w5, [x29, 108] ++ mov x2, x22 ++ strb wzr, [x28, 1252] ++ orr w1, w19, w25, lsl 24 ++ mov w0, w26 ++ bl flash_read_page ++ ldr w5, [x29, 108] ++ strb w5, [x28, 1252] ++ cbnz w25, .L2343 ++.L2348: ++ ldrb w2, [x24, #:lo12:.LANCHOR0] ++ add x1, x24, :lo12:.LANCHOR0 ++ cbz w2, .L2343 ++ ldrb w1, [x1, 1249] ++ add w1, w1, w1, lsl 1 ++ cmp w0, w1, lsr 2 ++ blt .L2343 ++ add x20, x20, :lo12:.LANCHOR2 ++ ldrb w1, [x20, 27] ++ sub w1, w1, #4 ++ and w1, w1, 255 ++ cmp w1, 4 ++ mov w1, 256 ++ csel w0, w0, w1, hi ++.L2335: ++ 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 ++.L2339: ++ mov w0, w19 ++ b .L2366 ++.L2343: ++ cmn w0, #1 ++ bne .L2335 ++.L2349: ++ adrp x0, .LANCHOR5+336 ++ ldr x5, [x0, #:lo12:.LANCHOR5+336] ++ cbnz x5, .L2345 ++.L2347: ++ add x24, x24, :lo12:.LANCHOR0 ++ mov w3, -1 ++ mov w2, w21 ++ mov w1, 0 ++ adrp x0, .LC172 ++ add x0, x0, :lo12:.LC172 ++ ldrb w4, [x24, 1252] ++ bl printk ++ ldrb w0, [x24, 1192] ++ cbnz w0, .L2346 ++ mov w0, -1 ++ b .L2335 ++.L2345: ++ add x0, x20, :lo12:.LANCHOR2 ++ mov x3, x23 ++ mov x2, x22 ++ orr w1, w19, w25, lsl 24 ++ ldrb w4, [x0, 17] ++ mov w0, w26 ++ blr x5 ++ cmn w0, #1 ++ bne .L2335 ++ b .L2347 ++.L2346: ++ add x20, x20, :lo12:.LANCHOR2 ++ mov x3, x23 ++ mov x2, x22 ++ orr w1, w19, w25, lsl 24 ++ mov w0, w26 ++ ldrb w4, [x20, 17] ++ bl flash_ddr_tuning_read ++ b .L2335 ++.L2342: ++ cbz w25, .L2348 ++ b .L2349 ++.L2341: ++ cbnz w25, .L2335 ++ b .L2348 ++ .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, -96]! ++ 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] ++ stp x25, x26, [sp, 64] ++ str x27, [sp, 80] ++ ldrb w0, [x1, 3354] ++ cmp w0, 255 ++ bne .L2368 ++.L2401: ++ mov w21, 0 ++ b .L2367 ++.L2368: ++ add x1, x1, 1304 ++ sxtw x20, w0 ++ add x1, x1, x20, lsl 6 ++ ldrb w2, [x1, 58] ++ ldr w21, [x1, 40] ++ sub w3, w2, #1 ++ cmp w3, 10 ++ bhi .L2401 ++ adrp x1, .L2371 ++ add x1, x1, :lo12:.L2371 ++ ldrh w1, [x1,w3,uxtw #1] ++ adr x3, .Lrtx2371 ++ add x1, x3, w1, sxth #2 ++ br x1 ++.Lrtx2371: ++ .section .rodata ++ .align 0 ++ .align 2 ++.L2371: ++ .2byte (.L2370 - .Lrtx2371) / 4 ++ .2byte (.L2372 - .Lrtx2371) / 4 ++ .2byte (.L2373 - .Lrtx2371) / 4 ++ .2byte (.L2373 - .Lrtx2371) / 4 ++ .2byte (.L2373 - .Lrtx2371) / 4 ++ .2byte (.L2373 - .Lrtx2371) / 4 ++ .2byte (.L2374 - .Lrtx2371) / 4 ++ .2byte (.L2375 - .Lrtx2371) / 4 ++ .2byte (.L2376 - .Lrtx2371) / 4 ++ .2byte (.L2373 - .Lrtx2371) / 4 ++ .2byte (.L2376 - .Lrtx2371) / 4 ++ .text ++.L2370: ++ bl nandc_wait_flash_ready ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x0, x0, x20, lsl 6 ++ ldp x1, x2, [x0, 8] ++ cbz x2, .L2377 ++ ldrb w3, [x0, 56] ++ adrp x0, .LANCHOR3+1946 ++ ldrb w0, [x0, #:lo12:.LANCHOR3+1946] ++ cmp w3, w0 ++ csel x1, x1, x2, ne ++.L2377: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w0, w21 ++ add x19, x19, 1304 ++ add x20, x19, x20, lsl 6 ++ ldr x2, [x20, 24] ++ bl flash_complete_page_read ++ str w0, [x20, 52] ++ mov w0, 13 ++ strb w0, [x20, 58] ++ ldrb w0, [x20, 2] ++ orr w0, w0, 8 ++ strb w0, [x20, 2] ++ b .L2401 ++.L2372: ++ bl nandc_wait_flash_ready ++ add x0, x19, :lo12:.LANCHOR0 ++ lsl x2, x20, 6 ++ add x0, x0, 1304 ++ add x1, x0, x2 ++ ldrb w21, [x0, x2] ++ add x0, x0, x21, lsl 6 ++ ldr x23, [x0, 8] ++ ldp x26, x0, [x1, 8] ++ cbz x0, .L2378 ++ ldrb w2, [x1, 56] ++ adrp x1, .LANCHOR3+1946 ++ ldrb w1, [x1, #:lo12:.LANCHOR3+1946] ++ cmp w2, w1 ++ csel x26, x26, x0, ne ++.L2378: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x0, x0, x21, lsl 6 ++ ldr x1, [x0, 16] ++ cbz x1, .L2379 ++ ldrb w2, [x0, 56] ++ adrp x0, .LANCHOR3+1946 ++ ldrb w0, [x0, #:lo12:.LANCHOR3+1946] ++ cmp w2, w0 ++ csel x23, x23, x1, ne ++.L2379: ++ add x24, x19, :lo12:.LANCHOR0 ++ mov x1, x26 ++ add x24, x24, 1304 ++ add x27, x24, x20, lsl 6 ++ add x24, x24, x21, lsl 6 ++ ldr x2, [x27, 24] ++ ldr w0, [x27, 40] ++ bl flash_complete_plane_page_read ++ mov w22, w0 ++ ldr x2, [x24, 24] ++ mov x1, x23 ++ ldr w0, [x24, 40] ++ bl flash_complete_plane_page_read ++ mov w25, w0 ++ cmn w22, #1 ++ beq .L2380 ++ ldr w0, [x27, 36] ++ cmn w0, #1 ++ beq .L2381 ++ ldr x1, [x27, 24] ++ ldr w1, [x1, 4] ++ cmp w0, w1 ++ beq .L2381 ++.L2380: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w5, 1 ++ add x24, x0, 1304 ++ add x24, x24, x20, lsl 6 ++ ldrb w2, [x0, 1205] ++ mov w0, 24 ++ sub w0, w0, w2 ++ ldr x3, [x24, 24] ++ lsl w5, w5, w2 ++ adrp x2, .LANCHOR3+1946 ++ sub w5, w5, #1 ++ ldr w1, [x24, 40] ++ ldrb w4, [x2, #:lo12:.LANCHOR3+1946] ++ mov x2, x26 ++ lsl w6, w5, w0 ++ lsr w0, w1, w0 ++ bic w1, w1, w6 ++ and w0, w0, w5 ++ bl flash_read_page_en ++ mov w22, w0 ++ ldr w2, [x24, 36] ++ cmn w2, #1 ++ beq .L2382 ++ ldr x0, [x24, 24] ++ ldr w4, [x0, 4] ++ cmp w2, w4 ++ beq .L2382 ++ adrp x1, .LANCHOR2 ++ ldr w1, [x1, #:lo12:.LANCHOR2] ++ tbz x1, 6, .L2382 ++ ldr w3, [x0] ++ adrp x0, .LC173 ++ ldr w1, [x24, 40] ++ add x0, x0, :lo12:.LC173 ++ bl printk ++.L2382: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x0, x0, x20, lsl 6 ++ ldr w1, [x0, 36] ++ cmn w1, #1 ++ beq .L2381 ++ ldr x0, [x0, 24] ++ ldr w0, [x0, 4] ++ cmp w1, w0 ++ beq .L2381 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 464 ++ mov w2, 431 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2381: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w1, 13 ++ add x0, x0, 1304 ++ cmn w25, #1 ++ add x20, x0, x20, lsl 6 ++ strb w1, [x20, 58] ++ ldrb w1, [x20, 2] ++ str w22, [x20, 52] ++ orr w1, w1, 8 ++ strb w1, [x20, 2] ++ beq .L2383 ++ add x0, x0, x21, lsl 6 ++ ldr w1, [x0, 36] ++ cmn w1, #1 ++ beq .L2385 ++ ldr x0, [x0, 24] ++ ldr w0, [x0, 4] ++ cmp w1, w0 ++ beq .L2385 ++.L2383: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w5, 1 ++ add x20, x0, 1304 ++ add x20, x20, x21, lsl 6 ++ ldrb w2, [x0, 1205] ++ mov w0, 24 ++ sub w0, w0, w2 ++ ldr x3, [x20, 24] ++ lsl w5, w5, w2 ++ adrp x2, .LANCHOR3+1946 ++ sub w5, w5, #1 ++ ldr w1, [x20, 40] ++ ldrb w4, [x2, #:lo12:.LANCHOR3+1946] ++ mov x2, x23 ++ lsl w6, w5, w0 ++ lsr w0, w1, w0 ++ bic w1, w1, w6 ++ and w0, w0, w5 ++ bl flash_read_page_en ++ ldr w2, [x20, 36] ++ cmn w2, #1 ++ beq .L2387 ++ ldr x0, [x20, 24] ++ ldr w4, [x0, 4] ++ cmp w2, w4 ++ beq .L2387 ++ adrp x1, .LANCHOR2 ++ ldr w1, [x1, #:lo12:.LANCHOR2] ++ tbz x1, 6, .L2387 ++ ldr w3, [x0] ++ adrp x0, .LC173 ++ ldr w1, [x20, 40] ++ add x0, x0, :lo12:.LC173 ++ bl printk ++.L2387: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x0, x0, x21, lsl 6 ++ ldr w1, [x0, 36] ++ cmn w1, #1 ++ beq .L2385 ++ ldr x0, [x0, 24] ++ ldr w0, [x0, 4] ++ cmp w1, w0 ++ beq .L2385 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 464 ++ mov w2, 450 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2385: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w0, 13 ++ add x19, x19, 1304 ++ add x21, x19, x21, lsl 6 ++ strb w0, [x21, 58] ++ ldrb w0, [x21, 2] ++ str w22, [x21, 52] ++ orr w0, w0, 8 ++ strb w0, [x21, 2] ++ b .L2401 ++.L2373: ++ bl nandc_iqr_wait_flash_ready ++ mov w0, w21 ++ mov w1, 64 ++ bl flash_wait_device_ready ++ mov w21, w0 ++ tbz x21, 6, .L2401 ++ mov w0, 5 ++ tst w21, w0 ++ beq .L2389 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w0, 12 ++ add x19, x19, 1304 ++ mov w4, 12 ++ add x20, x19, x20, lsl 6 ++ mov w2, w21 ++ ldrb w1, [x20, 1] ++ ldr w3, [x20, 40] ++ strb w0, [x20, 58] ++ adrp x0, .LC174 ++ add x0, x0, :lo12:.LC174 ++ bl printk ++.L2459: ++ mov w0, -1 ++ str w0, [x20, 52] ++ b .L2367 ++.L2389: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w1, 13 ++ add x21, x0, 1304 ++ add x21, x21, x20, lsl 6 ++ strb w1, [x21, 58] ++ ldr x1, [x0, 3384] ++ str wzr, [x21, 52] ++ ldr w2, [x1, 156] ++ mov w1, 20041 ++ movk w1, 0x444b, lsl 16 ++ cmp w2, w1 ++ bne .L2401 ++ ldrh w1, [x21, 50] ++ cbnz w1, .L2401 ++ ldrb w2, [x0, 1205] ++ mov w5, 1 ++ adrp x22, .LANCHOR5 ++ add x22, x22, :lo12:.LANCHOR5 ++ mov w0, 24 ++ sub w0, w0, w2 ++ lsl w5, w5, w2 ++ adrp x2, .LANCHOR3+1946 ++ sub w5, w5, #1 ++ ldr w1, [x21, 40] ++ ldrb w4, [x2, #:lo12:.LANCHOR3+1946] ++ ldp x3, x2, [x22, 344] ++ lsl w6, w5, w0 ++ lsr w0, w1, w0 ++ bic w1, w1, w6 ++ and w0, w0, w5 ++ bl flash_read_page_en ++ cmn w0, #1 ++ beq .L2390 ++ ldr x2, [x21, 24] ++ ldr x1, [x22, 344] ++ ldr w2, [x2] ++ ldr w1, [x1] ++ cmp w2, w1 ++ beq .L2401 ++.L2390: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w3, w0 ++ add x1, x19, 1304 ++ adrp x0, .LC175 ++ add x20, x1, x20, lsl 6 ++ add x0, x0, :lo12:.LC175 ++ ldrb w4, [x19, 1252] ++ ldrb w1, [x20, 1] ++ ldr w2, [x20, 40] ++ bl printk ++ mov w0, -1 ++ str w0, [x20, 52] ++ b .L2401 ++.L2376: ++ cmp w2, 11 ++ mov w1, 3 ++ mov w5, 10 ++ csel w5, w5, w1, eq ++ add x1, x19, :lo12:.LANCHOR0 ++ mov w4, 24 ++ mov w2, 1 ++ add x22, x1, 1304 ++ ubfiz x0, x0, 6, 8 ++ mov x24, x1 ++ ldrb w3, [x1, 1205] ++ add x0, x22, x0 ++ sub w4, w4, w3 ++ lsl w2, w2, w3 ++ sub w2, w2, #1 ++ lsr w3, w21, w4 ++ and w3, w3, w2 ++ and w3, w3, 65535 ++.L2392: ++ ldrb w1, [x0] ++ cmp w1, 255 ++ bne .L2399 ++ mov w21, -1 ++ b .L2367 ++.L2399: ++ sxtw x23, w1 ++ ubfiz x0, x1, 6, 8 ++ add x1, x22, x23, lsl 6 ++ add x0, x22, x0 ++ ldrb w6, [x1, 58] ++ cmp w6, w5 ++ bne .L2392 ++ ldr w1, [x1, 40] ++ lsr w1, w1, w4 ++ and w1, w1, w2 ++ cmp w3, w1 ++ bne .L2392 ++ bl nandc_iqr_wait_flash_ready ++ mov w0, w21 ++ mov w1, 64 ++ bl flash_wait_device_ready ++ mov w21, w0 ++ tbnz x21, 6, .L2394 ++.L2458: ++ mov w21, 0 ++ b .L2395 ++.L2394: ++ tst x21, 15 ++ beq .L2396 ++ add x22, x22, x20, lsl 6 ++ mov w2, w0 ++ mov w4, 12 ++ adrp x0, .LC176 ++ add x0, x0, :lo12:.LC176 ++ ldrb w1, [x22, 1] ++ ldr w3, [x22, 40] ++ bl printk ++ mov w0, 12 ++ strb w0, [x22, 58] ++ mov w0, -1 ++ str w0, [x22, 52] ++.L2395: ++ add x1, x19, :lo12:.LANCHOR0 ++ add x1, x1, 1304 ++ add x20, x1, x20, lsl 6 ++ add x1, x1, x23, lsl 6 ++ ldrb w0, [x20, 58] ++ strb w0, [x1, 58] ++ ldr w0, [x20, 52] ++ str w0, [x1, 52] ++.L2367: ++ 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 ++.L2396: ++ add x21, x22, x20, lsl 6 ++ mov w0, 13 ++ strb w0, [x21, 58] ++ ldr x0, [x24, 3384] ++ str wzr, [x21, 52] ++ ldr w1, [x0, 156] ++ mov w0, 20041 ++ movk w0, 0x444b, lsl 16 ++ cmp w1, w0 ++ bne .L2458 ++ ldrh w0, [x21, 50] ++ cbnz w0, .L2458 ++ ldrb w2, [x24, 1205] ++ mov w5, 1 ++ adrp x22, .LANCHOR5 ++ add x22, x22, :lo12:.LANCHOR5 ++ mov w0, 24 ++ sub w0, w0, w2 ++ lsl w5, w5, w2 ++ adrp x2, .LANCHOR3+1946 ++ sub w5, w5, #1 ++ ldr w1, [x21, 40] ++ ldrb w4, [x2, #:lo12:.LANCHOR3+1946] ++ ldp x3, x2, [x22, 344] ++ lsl w6, w5, w0 ++ lsr w0, w1, w0 ++ bic w1, w1, w6 ++ and w0, w0, w5 ++ bl flash_read_page_en ++ cmn w0, #1 ++ beq .L2398 ++ ldr x2, [x21, 24] ++ ldr x1, [x22, 344] ++ ldr w2, [x2] ++ ldr w1, [x1] ++ cmp w2, w1 ++ beq .L2458 ++.L2398: ++ add x1, x19, :lo12:.LANCHOR0 ++ mov w3, w0 ++ add x21, x1, 1304 ++ adrp x0, .LC177 ++ add x21, x21, x20, lsl 6 ++ add x0, x0, :lo12:.LC177 ++ ldrb w4, [x1, 1252] ++ ldr w2, [x21, 40] ++ ldrb w1, [x21, 1] ++ bl printk ++ mov w0, -1 ++ str w0, [x21, 52] ++ b .L2458 ++.L2374: ++ mov w0, w21 ++ mov w1, 32 ++ bl flash_wait_device_ready ++ mov w21, w0 ++ tbz x21, 5, .L2401 ++ add x19, x19, :lo12:.LANCHOR0 ++ tst x21, 15 ++ add x19, x19, 1304 ++ add x20, x19, x20, lsl 6 ++ beq .L2400 ++ mov w0, 12 ++ strb w0, [x20, 58] ++ b .L2459 ++.L2400: ++ mov w0, 13 ++ str wzr, [x20, 52] ++ strb w0, [x20, 58] ++ b .L2401 ++.L2375: ++ mov w1, 64 ++ mov w0, w21 ++ bl flash_wait_device_ready ++ tbz x0, 6, .L2401 ++ add x19, x19, :lo12:.LANCHOR0 ++ add x19, x19, 1304 ++ add x19, x19, x20, lsl 6 ++ str w0, [x19, 52] ++ mov w0, 7 ++ strb w0, [x19, 58] ++ b .L2401 ++ .size queue_wait_first_req_completed, .-queue_wait_first_req_completed ++ .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] ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ and w20, w1, 255 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldrh w0, [x0, 50] ++ cbz w0, .L2461 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L2461 ++ ldr w1, [x19, 40] ++ adrp x0, .LC178 ++ mov w2, w20 ++ add x0, x0, :lo12:.LC178 ++ bl printk ++.L2461: ++ adrp x24, .LANCHOR0 ++ add x25, x24, :lo12:.LANCHOR0 ++ add x27, x25, 1304 ++ mov w21, 0 ++ mov w23, 1 ++.L2462: ++ cbnz w20, .L2473 ++.L2489: ++ 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 ++.L2473: ++ ldrb w26, [x19] ++ ldr w22, [x19, 40] ++.L2463: ++ mov w1, 1 ++ mov w0, w22 ++ bl queue_lun_state ++ cbnz w0, .L2464 ++ cmp w20, 1 ++ beq .L2465 ++ add x0, x24, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1250] ++ cbz w1, .L2465 ++ ldrb w1, [x0, 1213] ++ cbz w1, .L2466 ++.L2465: ++ mov x0, x19 ++ bl queue_prog_cmd ++.L2467: ++ subs w20, w20, #1 ++ beq .L2489 ++ add x19, x24, :lo12:.LANCHOR0 ++ ubfiz x26, x26, 6, 8 ++ add x19, x19, 1304 ++ add x19, x19, x26 ++ b .L2462 ++.L2464: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2463 ++.L2466: ++ ldrb w0, [x0, 1205] ++ mov w28, 24 ++ sub w28, w28, w0 ++ lsl w0, w23, w0 ++ sub w0, w0, #1 ++ lsr w28, w22, w28 ++ and w28, w28, w0 ++ ldrb w0, [x19] ++ and w28, w28, 65535 ++ cmp w0, 255 ++ bne .L2468 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 496 ++ mov w2, 697 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2468: ++ ldrb w0, [x19] ++ mov w1, 24 ++ add x0, x27, x0, lsl 6 ++ ldr w4, [x0, 40] ++ ldrb w0, [x25, 1205] ++ sub w1, w1, w0 ++ lsl w0, w23, w0 ++ sub w0, w0, #1 ++ lsr w2, w4, w1 ++ and w0, w0, w2 ++ cmp w28, w0, uxth ++ bne .L2469 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ ldrh w2, [x0, 1304] ++ ldrb w3, [x0, 1306] ++ sub w0, w1, w2 ++ sub w3, w3, #1 ++ lsl w1, w23, w2 ++ lsl w0, w23, w0 ++ sub w0, w0, #1 ++ and w0, w0, w3 ++ sub w1, w1, #1 ++ and w0, w0, 65535 ++ lsr w5, w22, w2 ++ and w1, w1, 65535 ++ and w5, w0, w5 ++ lsr w2, w4, w2 ++ and w0, w0, w2 ++ and w22, w1, w22 ++ cmp w5, w0 ++ and w1, w1, w4 ++ ccmp w22, w1, 0, ne ++ bne .L2469 ++ cmp w21, w3 ++ beq .L2469 ++ ldr w1, [x19, 40] ++ mov w0, 17 ++ ldr x2, [x19, 8] ++ add w21, w21, 1 ++ ldr x3, [x19, 24] ++ bl flash_start_page_prog ++ strb w23, [x19, 59] ++ mov w0, 9 ++ strb w0, [x19, 58] ++ mov w0, -1 ++ strb w0, [x19] ++ mov x1, x19 ++ add x0, x25, 3354 ++ bl buf_add_tail ++ b .L2467 ++.L2469: ++ mov x0, x19 ++ mov w21, 0 ++ bl queue_prog_cmd ++ b .L2467 ++ .size sblk_prog_page, .-sblk_prog_page ++ .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 ++ add x19, x19, :lo12:.LANCHOR0 ++.L2492: ++ ldrb w0, [x19, 3354] ++ cmp w0, 255 ++ bne .L2493 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2493: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2492 ++ .size sblk_wait_write_queue_completed, .-sblk_wait_write_queue_completed ++ .align 2 ++ .global ftl_flush ++ .type ftl_flush, %function ++ftl_flush: ++ stp x29, x30, [sp, -32]! ++ adrp x2, .LANCHOR0 ++ add x0, x2, :lo12:.LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x2 ++ adrp x20, .LANCHOR5 ++ ldrb w1, [x0, 3380] ++ cbz w1, .L2496 ++ add x2, x20, :lo12:.LANCHOR5 ++ add x0, x0, 1304 ++ ldrb w2, [x2, 360] ++ add x0, x0, x2, lsl 6 ++ bl sblk_prog_page ++.L2496: ++ add x2, x19, :lo12:.LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, -1 ++ strb wzr, [x2, 3380] ++ strb w0, [x20, 360] ++ 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+3380 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+3380] ++ cbz w0, .L2506 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl timer_get_time ++ adrp x1, .LANCHOR5+364 ++ ldr w1, [x1, #:lo12:.LANCHOR5+364] ++ add w1, w1, 100 ++ cmp w0, w1 ++ bls .L2501 ++ bl ftl_flush ++.L2501: ++ ldp x29, x30, [sp], 16 ++ ret ++.L2506: ++ ret ++ .size zftl_cache_flush, .-zftl_cache_flush ++ .align 2 ++ .global ftl_read_page ++ .type ftl_read_page, %function ++ftl_read_page: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov w20, w1 ++ mov x21, x2 ++ mov x22, x3 ++ str x23, [sp, 48] ++ mov w23, w4 ++ bl sblk_wait_write_queue_completed ++ mov w4, w23 ++ mov x3, x22 ++ mov x2, x21 ++ mov w1, w20 ++ mov w0, w19 ++ bl flash_read_page_en ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ 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 w5, 1 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w20, w0 ++ adrp x0, .LANCHOR0+1205 ++ mov w19, 24 ++ stp x21, x22, [sp, 32] ++ mov x21, x1 ++ ldrb w0, [x0, #:lo12:.LANCHOR0+1205] ++ mov x22, x2 ++ str x23, [sp, 48] ++ mov w23, w3 ++ sub w19, w19, w0 ++ lsl w5, w5, w0 ++ sub w5, w5, #1 ++ lsr w19, w20, w19 ++ and w19, w19, w5 ++ and w19, w19, 255 ++ bl sblk_wait_write_queue_completed ++ mov w4, w23 ++ mov x3, x22 ++ mov x2, x21 ++ mov w1, w20 ++ mov w0, w19 ++ bl flash_read_page_en ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldr x23, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++ .size ftl_read_ppa_page, .-ftl_read_ppa_page ++ .align 2 ++ .global sblk_read_page ++ .type sblk_read_page, %function ++sblk_read_page: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w21, w1, 255 ++ stp x25, x26, [sp, 64] ++ adrp x25, .LANCHOR0 ++ add x26, x25, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ mov x22, x0 ++ mov x19, x0 ++ mov w20, w21 ++ add x23, x26, 1304 ++ stp x27, x28, [sp, 80] ++ adrp x28, .LANCHOR5 ++.L2514: ++ cbnz w20, .L2524 ++.L2537: ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ add x19, x19, 1304 ++.L2525: ++ cbnz w21, .L2527 ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L2524: ++ ldrb w24, [x19] ++ ldr w27, [x19, 40] ++.L2515: ++ mov w1, 0 ++ mov w0, w27 ++ bl queue_lun_state ++ cbnz w0, .L2516 ++ cmp w20, 1 ++ beq .L2521 ++ add x0, x28, :lo12:.LANCHOR5 ++ ldrb w0, [x0, 368] ++ cbnz w0, .L2518 ++.L2521: ++ mov x0, x19 ++ bl queue_read_cmd ++ b .L2519 ++.L2516: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2515 ++.L2518: ++ add x0, x25, :lo12:.LANCHOR0 ++ mov w3, 24 ++ ldrb w1, [x0, 1205] ++ mov w0, 1 ++ sub w3, w3, w1 ++ lsl w0, w0, w1 ++ sub w0, w0, #1 ++ lsr w3, w27, w3 ++ and w3, w3, w0 ++ ldrb w0, [x19] ++ and w3, w3, 65535 ++ cmp w0, 255 ++ bne .L2520 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 512 ++ mov w2, 782 ++ str w3, [x29, 124] ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ ldr w3, [x29, 124] ++.L2520: ++ ldrb w4, [x19] ++ mov w0, 24 ++ ldrb w7, [x26, 1205] ++ mov w2, 1 ++ sbfiz x5, x4, 6, 32 ++ sub w0, w0, w7 ++ add x6, x23, x5 ++ lsl w2, w2, w7 ++ sub w2, w2, #1 ++ ldr w1, [x6, 40] ++ lsr w0, w1, w0 ++ and w0, w0, w2 ++ cmp w3, w0, uxth ++ bne .L2521 ++ adrp x0, .LANCHOR3+1410 ++ ldrh w0, [x0, #:lo12:.LANCHOR3+1410] ++ add w27, w0, w27 ++ cmp w1, w27 ++ bne .L2521 ++ ldr w0, [x19, 40] ++ mov w27, -1 ++ ldrb w24, [x23, x5] ++ sub w20, w20, #1 ++ stp x6, x5, [x29, 104] ++ str w4, [x29, 120] ++ bl flash_start_plane_read ++ strb wzr, [x19, 59] ++ mov w2, 2 ++ strb w27, [x19] ++ strb w2, [x19, 58] ++ add x0, x26, 3354 ++ mov x1, x19 ++ str w2, [x29, 124] ++ mov x19, x0 ++ bl buf_add_tail ++ ldp x6, x5, [x29, 104] ++ strb wzr, [x6, 59] ++ ldp w4, w2, [x29, 120] ++ strb w2, [x6, 58] ++ strb w27, [x23, x5] ++ mov x0, x19 ++ ubfiz x1, x4, 6, 8 ++ add x1, x23, x1 ++ bl buf_add_tail ++.L2519: ++ subs w20, w20, #1 ++ beq .L2537 ++ add x19, x25, :lo12:.LANCHOR0 ++ ubfiz x24, x24, 6, 8 ++ add x19, x19, 1304 ++ add x19, x19, x24 ++ b .L2514 ++.L2527: ++ ldrb w0, [x22, 58] ++ cmp w0, 13 ++ bne .L2526 ++ ldrb w0, [x22] ++ sub w21, w21, #1 ++ cmp w0, 255 ++ beq .L2526 ++ ubfiz x22, x0, 6, 8 ++ add x22, x19, x22 ++.L2526: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2525 ++ .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, #128 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x19, .LANCHOR0 ++ add x20, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 48] ++ stp x23, x24, [sp, 64] ++ stp x25, x26, [sp, 80] ++ stp x27, x28, [sp, 96] ++ ldr x0, [x20, 3424] ++ ldr x21, [x20, 1128] ++ cbnz x0, .L2540 ++ add x20, x20, 3416 ++ mov w0, 1 ++ bl buf_alloc ++ str x0, [x20, 8] ++.L2540: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x22, [x0, 3424] ++ cbnz x22, .L2541 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 528 ++ mov w2, 729 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2541: ++ add x27, x19, :lo12:.LANCHOR0 ++ adrp x4, .LANCHOR3 ++ add x23, x27, 3416 ++ mov x20, x4 ++ mov w25, 0 ++.L2542: ++ add x28, x21, 80 ++ ldrb w0, [x28, 9] ++ cmp w25, w0 ++ bge .L2553 ++ sxtw x26, w25 ++ mov w24, 1 ++ add x26, x26, 8 ++ b .L2554 ++.L2552: ++ add x1, x4, :lo12:.LANCHOR3 ++ ldrh w0, [x28, x26, lsl 1] ++ ldrh w2, [x1, 1410] ++ ldrb w1, [x1, 1320] ++ cmp w1, 2 ++ mul w2, w0, w2 ++ beq .L2543 ++ ldrb w0, [x27, 1212] ++ cbz w0, .L2544 ++.L2543: ++ ldrh w0, [x23, 16] ++ sub w3, w0, #1 ++ add w0, w24, w2 ++ add w0, w3, w0 ++ orr w1, w0, w1, lsl 24 ++ str w1, [x22, 40] ++.L2545: ++ str x4, [x29, 104] ++ mov w1, 1 ++ mov x0, x22 ++ bl sblk_read_page ++ ldr w2, [x22, 52] ++ adrp x0, .LANCHOR5 ++ ldr x4, [x29, 104] ++ cmn w2, #1 ++ beq .L2548 ++ add x5, x0, :lo12:.LANCHOR5 ++ ldrh w1, [x23, 22] ++ ldr x3, [x22, 24] ++ ldr x6, [x5, 280] ++ lsl x1, x1, 2 ++ ldr w7, [x6, x1] ++ ldr w6, [x3, 4] ++ cmp w7, w6 ++ bne .L2548 ++ ldr x5, [x5, 288] ++ ldr w5, [x5, x1] ++ ldr w1, [x3, 8] ++ cmp w5, w1 ++ beq .L2549 ++.L2548: ++ add x0, x0, :lo12:.LANCHOR5 ++ ldrh w1, [x23, 22] ++ ldr x3, [x0, 280] ++ lsl x1, x1, 2 ++ ldr w3, [x3, x1] ++ cmn w3, #1 ++ beq .L2549 ++ adrp x4, .LANCHOR2 ++ ldr w4, [x4, #:lo12:.LANCHOR2] ++ tbz x4, 10, .L2550 ++ ldr x4, [x22, 24] ++ ldr x0, [x0, 288] ++ ldr w5, [x4, 12] ++ str w5, [sp] ++ ldp w5, w6, [x4] ++ ldr w7, [x4, 8] ++ ldr w4, [x0, x1] ++ adrp x0, .LC179 ++ ldr w1, [x22, 40] ++ add x0, x0, :lo12:.LC179 ++ bl printk ++.L2550: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x21, 80] ++ ldr x0, [x19, 1120] ++ strh wzr, [x0, x1, lsl 1] ++ ldr x1, [x19, 1128] ++ ldr w0, [x1, 556] ++ add w0, w0, 1 ++ str w0, [x1, 556] ++ ldr x0, [x19, 3384] ++ ldr w1, [x0, 156] ++ mov w0, 20041 ++ movk w0, 0x444b, lsl 16 ++ cmp w1, w0 ++ bne .L2557 ++ add x20, x20, :lo12:.LANCHOR3 ++ ldrb w0, [x20, 1950] ++ cbnz w0, .L2557 ++ ldrb w0, [x20, 1322] ++ cbnz w0, .L2557 ++ ldr w0, [x22, 40] ++ bl ftl_mask_bad_block ++.L2557: ++ mov w0, -1 ++.L2539: ++ 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, 128 ++ ret ++.L2544: ++ cmp w1, 3 ++ ldrh w0, [x23, 16] ++ bne .L2546 ++ ldrb w1, [x27, 1213] ++ cbz w1, .L2547 ++ add w0, w0, w0, lsl 1 ++ sub w1, w0, #1 ++ add w0, w24, w2 ++ add w0, w1, w0 ++ orr w0, w0, 50331648 ++.L2572: ++ str w0, [x22, 40] ++ b .L2545 ++.L2547: ++ add w0, w0, w2 ++ orr w0, w0, w24, lsl 24 ++ b .L2572 ++.L2546: ++ add w0, w0, w2 ++ b .L2572 ++.L2549: ++ ldrh w0, [x23, 22] ++ add w24, w24, 1 ++ add w0, w0, 1 ++ strh w0, [x23, 22] ++.L2554: ++ ldrh w0, [x23, 20] ++ cmp w24, w0 ++ ble .L2552 ++ add w25, w25, 1 ++ b .L2542 ++.L2553: ++ add x19, x19, :lo12:.LANCHOR0 ++ add x19, x19, 3416 ++ ldrh w0, [x19, 16] ++ add w1, w0, 1 ++ strh w1, [x19, 16] ++ adrp x1, .LANCHOR3+1322 ++ ldrb w1, [x1, #:lo12:.LANCHOR3+1322] ++ cbz w1, .L2558 ++ add w0, w0, 2 ++ strh w0, [x19, 16] ++.L2558: ++.L2551: ++ mov w0, 0 ++ b .L2539 ++ .size gc_check_data_one_wl, .-gc_check_data_one_wl ++ .align 2 ++ .global sblk_tlc_prog_one_page ++ .type sblk_tlc_prog_one_page, %function ++sblk_tlc_prog_one_page: ++ stp x29, x30, [sp, -32]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ ldr x0, [x0] ++ ldr w20, [x0, 40] ++.L2574: ++ mov w1, 1 ++ mov w0, w20 ++ bl queue_lun_state ++ cbnz w0, .L2575 ++ mov x0, x19 ++ mov w1, 1 ++ bl queue_tlc_prog_cmd ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L2575: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2574 ++ .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, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x0 ++ stp x21, x22, [sp, 32] ++ mov x22, x1 ++ stp x25, x26, [sp, 64] ++ mov w25, w2 ++ stp x23, x24, [sp, 48] ++ ldr x0, [x0] ++ ldr w19, [x0, 40] ++.L2578: ++ mov w1, 1 ++ mov w0, w19 ++ bl queue_lun_state ++ cbnz w0, .L2579 ++ cmp w25, 2 ++ bne .L2580 ++ adrp x23, .LANCHOR0 ++ add x4, x23, :lo12:.LANCHOR0 ++ ldr x5, [x22] ++ ldrb w0, [x4, 1250] ++ cbz w0, .L2581 ++ ldr x0, [x20] ++ mov w26, 1 ++ ldrb w1, [x4, 1205] ++ mov w3, 24 ++ ldr w5, [x5, 40] ++ sub w3, w3, w1 ++ lsl w19, w26, w1 ++ ldr w2, [x0, 40] ++ ldrb w1, [x4, 1213] ++ lsl w21, w26, w3 ++ sub w19, w19, #1 ++ sub w21, w21, #1 ++ and w24, w2, w21 ++ lsr w2, w2, w3 ++ and w19, w19, w2 ++ and w21, w21, w5 ++ and w19, w19, 255 ++ cbz w1, .L2582 ++ mov w0, w19 ++ bl zftl_flash_exit_slc_mode ++ ldr x0, [x20] ++ mov w4, w24 ++ mov w3, w19 ++ mov w1, w26 ++ mov w2, 17 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr x0, [x22] ++ mov w4, w21 ++ mov w3, w19 ++ mov w1, w26 ++ mov w2, 26 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr x0, [x20, 8] ++ add w4, w24, w26 ++ mov w3, w19 ++ mov w1, w25 ++ mov w2, 17 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr x0, [x22, 8] ++ add w4, w21, w26 ++ mov w3, w19 ++ mov w1, w25 ++ mov w2, 26 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr x0, [x20, 16] ++ add w4, w24, 2 ++ mov w3, w19 ++ mov w2, 17 ++ mov w1, 3 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++ bl nandc_wait_flash_ready ++ ldr x0, [x22, 16] ++ add w4, w21, 2 ++ mov w3, w19 ++ mov w2, 16 ++ mov w1, 3 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ mov w0, 0 ++ bl flash_start_one_pass_page_prog ++.L2583: ++ ldr x1, [x20] ++ mov w0, 5 ++ strb w0, [x1, 58] ++ mov w0, 1 ++ strb w0, [x1, 59] ++ mov w0, -1 ++ strb w0, [x1] ++ add x0, x23, :lo12:.LANCHOR0 ++ add x0, x0, 3354 ++ bl buf_add_tail ++.L2584: ++ 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 ++.L2579: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2578 ++.L2582: ++ ldr x5, [x0, 8] ++ mov w4, w24 ++ ldr x6, [x0, 24] ++ mov w3, w19 ++ ldrb w0, [x0, 60] ++ mov w1, w26 ++ mov w2, 17 ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr x7, [x20] ++ mov w4, w21 ++ ldr x0, [x22] ++ mov w3, w19 ++ mov w1, w26 ++ mov w2, 26 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ ldrb w0, [x7, 60] ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldp x7, x0, [x20] ++ mov w4, w24 ++ mov w3, w19 ++ mov w1, w25 ++ mov w2, 17 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ ldrb w0, [x7, 60] ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr x7, [x20] ++ mov w4, w21 ++ ldr x0, [x22, 8] ++ mov w3, w19 ++ mov w1, w25 ++ mov w2, 26 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ ldrb w0, [x7, 60] ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr x7, [x20] ++ mov w4, w24 ++ ldr x0, [x20, 16] ++ mov w3, w19 ++ mov w2, 17 ++ mov w1, 3 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ ldrb w0, [x7, 60] ++ bl flash_start_tlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr x0, [x22, 16] ++ mov w4, w21 ++ ldr x7, [x20] ++ mov w3, w19 ++ mov w2, 16 ++ mov w1, 3 ++ ldr x5, [x0, 8] ++ ldr x6, [x0, 24] ++ ldrb w0, [x7, 60] ++ bl flash_start_tlc_page_prog ++ b .L2583 ++.L2581: ++ ldr w19, [x5, 40] ++.L2585: ++ mov w1, 1 ++ mov w0, w19 ++ bl queue_lun_state ++ cbnz w0, .L2586 ++ mov w1, 1 ++ mov x0, x20 ++ bl queue_tlc_prog_cmd ++ mov w1, 0 ++ mov x0, x22 ++ bl queue_tlc_prog_cmd ++.L2587: ++ mov w1, 1 ++ mov w0, w19 ++ bl queue_lun_state ++ cbz w0, .L2584 ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2587 ++.L2586: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2585 ++.L2580: ++ mov w1, 1 ++ mov x0, x20 ++ bl queue_tlc_prog_cmd ++ b .L2584 ++ .size sblk_xlc_prog_pages, .-sblk_xlc_prog_pages ++ .align 2 ++ .global sblk_3d_mlc_prog_pages ++ .type sblk_3d_mlc_prog_pages, %function ++sblk_3d_mlc_prog_pages: ++ stp x29, x30, [sp, -80]! ++ ubfiz x1, x1, 4, 32 ++ add x1, x1, 8 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ add x22, x22, :lo12:.LANCHOR0 ++ stp x25, x26, [sp, 64] ++ add x21, x0, x1 ++ add x26, x0, 8 ++ add x25, x22, 3354 ++ stp x23, x24, [sp, 48] ++ stp x19, x20, [sp, 16] ++ mov w23, 1 ++ mov w24, 24 ++.L2591: ++ cmp x21, x26 ++ bne .L2594 ++ 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 ++.L2594: ++ ldr x0, [x26, -8] ++ ldr w19, [x0, 40] ++.L2592: ++ mov w1, 1 ++ mov w0, w19 ++ bl queue_lun_state ++ cbnz w0, .L2593 ++ ldr x0, [x26, -8] ++ add x26, x26, 16 ++ ldrb w1, [x22, 1205] ++ sub w2, w24, w1 ++ ldr w0, [x0, 40] ++ lsl w19, w23, w1 ++ lsl w20, w23, w2 ++ sub w19, w19, #1 ++ sub w20, w20, #1 ++ and w20, w20, w0 ++ lsr w0, w0, w2 ++ and w19, w19, w0 ++ and w19, w19, 255 ++ mov w0, w19 ++ bl zftl_flash_exit_slc_mode ++ ldr x0, [x26, -24] ++ mov w2, w20 ++ mov w1, w19 ++ ldr x3, [x0, 8] ++ ldr x4, [x0, 24] ++ mov w0, 16 ++ bl flash_start_3d_mlc_page_prog ++ bl nandc_wait_flash_ready ++ ldr x0, [x26, -16] ++ add w2, w20, 1 ++ mov w1, w19 ++ ldr x3, [x0, 8] ++ ldr x4, [x0, 24] ++ mov w0, 16 ++ bl flash_start_3d_mlc_page_prog ++ bl nandc_de_cs.constprop.35 ++ ldr x1, [x26, -24] ++ mov w0, 4 ++ strb w23, [x1, 59] ++ strb w0, [x1, 58] ++ mov w0, -1 ++ strb w0, [x1] ++ mov x0, x25 ++ bl buf_add_tail ++ b .L2591 ++.L2593: ++ bl queue_wait_first_req_completed ++ bl queue_remove_completed_req ++ b .L2592 ++ .size sblk_3d_mlc_prog_pages, .-sblk_3d_mlc_prog_pages ++ .align 2 ++ .global flash_prog_page_en ++ .type flash_prog_page_en, %function ++flash_prog_page_en: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w21, w0, 255 ++ and w0, w5, 255 ++ stp x19, x20, [sp, 16] ++ str w0, [x29, 108] ++ adrp x19, .LANCHOR0 ++ add x0, x19, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ stp x27, x28, [sp, 80] ++ mov w20, w1 ++ stp x25, x26, [sp, 64] ++ mov x23, x2 ++ mov x22, x3 ++ mov w27, w4 ++ ldrb w0, [x0, 1153] ++ ubfx x24, x20, 24, 2 ++ cmp w0, w21 ++ bhi .L2597 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 552 ++ mov w2, 642 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2597: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1153] ++ cmp w1, w21 ++ bls .L2608 ++ add x1, x0, w21, sxtw ++ ldrb w26, [x1, 1196] ++ cbnz w24, .L2610 ++ ldrb w1, [x19, #:lo12:.LANCHOR0] ++ cbz w1, .L2600 ++ ldrb w0, [x0, 1] ++ cbz w0, .L2610 ++.L2600: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x0, 2] ++ ldrb w2, [x0, 1] ++ udiv w19, w20, w1 ++ mul w19, w19, w1 ++ sub w1, w20, w19 ++ cbz w2, .L2601 ++ add w19, w19, w1, lsl 1 ++.L2599: ++ adrp x24, .LC180 ++ adrp x28, .LANCHOR5 ++ add x24, x24, :lo12:.LC180 ++ add x25, x28, :lo12:.LANCHOR5 ++.L2605: ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 4, .L2602 ++ mov w3, w19 ++ mov w2, w20 ++ mov w1, w26 ++ mov x0, x24 ++ bl printk ++.L2602: ++ mov w4, w27 ++ mov x3, x22 ++ mov x2, x23 ++ mov w1, w19 ++ mov w0, w26 ++ bl flash_prog_page ++ mov w5, w0 ++ ldr w0, [x29, 108] ++ cbz w0, .L2603 ++ add x6, x28, :lo12:.LANCHOR5 ++ mov w4, w27 ++ mov w1, w20 ++ mov w0, w21 ++ str x6, [x29, 96] ++ ldp x3, x2, [x6, 344] ++ str w5, [x29, 104] ++ bl flash_read_page_en ++ cmp w0, 512 ++ mov w4, w0 ++ ccmn w0, #1, 4, ne ++ beq .L2604 ++ ldr x6, [x29, 96] ++ ldr w1, [x23] ++ ldr w5, [x29, 104] ++ ldr x0, [x6, 352] ++ ldr w0, [x0] ++ cmp w1, w0 ++ bne .L2604 ++ ldr x0, [x6, 344] ++ ldr w1, [x22] ++ ldr w0, [x0] ++ cmp w1, w0 ++ beq .L2603 ++.L2604: ++ str w4, [x29, 96] ++ mov w3, 4 ++ mov x1, x23 ++ mov w2, w3 ++ adrp x0, .LC181 ++ add x0, x0, :lo12:.LC181 ++ bl rknand_print_hex ++ mov w3, 4 ++ mov x1, x22 ++ mov w2, w3 ++ adrp x0, .LC182 ++ add x0, x0, :lo12:.LC182 ++ bl rknand_print_hex ++ ldr x1, [x25, 344] ++ mov w3, 4 ++ adrp x0, .LC183 ++ mov w2, w3 ++ add x0, x0, :lo12:.LC183 ++ bl rknand_print_hex ++ ldr x1, [x25, 352] ++ mov w3, 4 ++ adrp x0, .LC184 ++ mov w2, w3 ++ add x0, x0, :lo12:.LC184 ++ bl rknand_print_hex ++ ldr w4, [x29, 96] ++ cmp w4, 512 ++ beq .L2605 ++.L2607: ++ mov w1, w20 ++ adrp x0, .LC185 ++ add x0, x0, :lo12:.LC185 ++ bl printk ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 552 ++ mov w2, 685 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2608: ++ mov w0, -1 ++ b .L2596 ++.L2601: ++ add x0, x0, 4 ++ ldrh w0, [x0, w1, uxtw 1] ++ add w19, w0, w19 ++ b .L2599 ++.L2610: ++ mov w19, w20 ++ b .L2599 ++.L2603: ++ mov w0, w5 ++ cmn w5, #1 ++ beq .L2607 ++.L2596: ++ 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_prog_page_en, .-flash_prog_page_en ++ .align 2 ++ .global ftl_prog_page ++ .type ftl_prog_page, %function ++ftl_prog_page: ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w19, w0, 255 ++ stp x21, x22, [sp, 32] ++ mov w20, w1 ++ mov x21, x2 ++ mov x22, x3 ++ str x23, [sp, 48] ++ mov w23, w4 ++ bl sblk_wait_write_queue_completed ++ mov w0, w19 ++ mov w5, 1 ++ mov w4, w23 ++ mov x3, x22 ++ mov x2, x21 ++ mov w1, w20 ++ bl flash_prog_page_en ++ mov w19, w0 ++ cmn w0, #1 ++ bne .L2626 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 576 ++ mov w2, 2678 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ adrp x0, .LC185 ++ mov w1, w20 ++ add x0, x0, :lo12:.LC185 ++ bl printk ++.L2626: ++ 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_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 x21, .LANCHOR3 ++ stp x25, x26, [sp, 64] ++ mov w26, w0 ++ add x0, x21, :lo12:.LANCHOR3 ++ stp x23, x24, [sp, 48] ++ stp x19, x20, [sp, 16] ++ adrp x22, .LANCHOR5 ++ stp x27, x28, [sp, 80] ++ adrp x23, .LANCHOR0 ++ ldrb w2, [x0, 1946] ++ add x0, x22, :lo12:.LANCHOR5 ++ ldr x0, [x0, 376] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ add x0, x23, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3384] ++ ldrh w1, [x0, 74] ++ cmp w1, 1 ++ bls .L2630 ++ strh wzr, [x0, 150] ++.L2630: ++ adrp x24, .LANCHOR4 ++ add x24, x24, :lo12:.LANCHOR4 ++ add x19, x22, :lo12:.LANCHOR5 ++ add x24, x24, 592 ++ mov w25, 0 ++.L2643: ++ add x2, x23, :lo12:.LANCHOR0 ++ add x1, x21, :lo12:.LANCHOR3 ++ ldrb w20, [x19, 384] ++ ldrh w27, [x19, 386] ++ ldr x3, [x2, 3384] ++ ldrh w28, [x1, 1410] ++ ldr w0, [x3, 4] ++ add w0, w0, 1 ++ str w0, [x3, 4] ++ ldr x0, [x19, 376] ++ str w26, [x0] ++ ldr x3, [x2, 3384] ++ ldr x0, [x19, 376] ++ ldrb w1, [x1, 1946] ++ ldr w3, [x3, 4] ++ str w3, [x0, 4] ++ lsl w1, w1, 9 ++ ldr x3, [x19, 376] ++ ldr x0, [x19, 392] ++ stp x2, x3, [x29, 96] ++ bl js_hash ++ ldp x2, x3, [x29, 96] ++ str w0, [x3, 8] ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2631 ++ ldr x0, [x2, 3384] ++ ldrb w1, [x19, 384] ++ ldrh w2, [x19, 386] ++ ldr w3, [x0, 4] ++ adrp x0, .LC186 ++ add x0, x0, :lo12:.LC186 ++ bl printk ++.L2631: ++ add x1, x21, :lo12:.LANCHOR3 ++ ldrh w0, [x19, 386] ++ ldrh w1, [x1, 1376] ++ cmp w1, w0 ++ bhi .L2632 ++ add x20, x23, :lo12:.LANCHOR0 ++.L2639: ++ ldrb w0, [x19, 385] ++ add w0, w0, 1 ++ and w0, w0, 255 ++ strb w0, [x19, 385] ++ cmp w0, 7 ++ bls .L2633 ++ mov x0, 0 ++.L2638: ++ ldr x2, [x20, 1048] ++ add w1, w0, 8 ++ and w25, w0, 65535 ++ add x1, x2, w1, sxtw ++ ldrb w2, [x1, 32] ++ add w1, w2, 127 ++ and w1, w1, 255 ++ cmp w1, 125 ++ bhi .L2634 ++ mov x1, x24 ++ mov w2, 846 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2637: ++ strb w25, [x19, 385] ++ mov w25, 1 ++.L2633: ++ ldrb w1, [x19, 385] ++ ldr x0, [x20, 1048] ++ add x0, x0, x1 ++ ldrb w0, [x0, 40] ++ strb w0, [x19, 384] ++ cmp w0, 255 ++ beq .L2639 ++ add x27, x21, :lo12:.LANCHOR3 ++ ldrh w20, [x27, 1410] ++ mul w20, w20, w0 ++ mov w0, 0 ++ mov w1, w20 ++ bl flash_erase_block ++ ldrb w4, [x27, 1946] ++ mov w1, w20 ++ ldr x3, [x19, 376] ++ mov w0, 0 ++ ldr x2, [x19, 392] ++ add w20, w20, 1 ++ bl ftl_prog_page ++ mov w0, 1 ++ strh w0, [x19, 386] ++.L2640: ++ add x0, x21, :lo12:.LANCHOR3 ++ ldr x3, [x19, 376] ++ ldr x2, [x19, 392] ++ mov w1, w20 ++ ldrb w4, [x0, 1946] ++ mov w0, 0 ++ bl ftl_prog_page ++ cmn w0, #1 ++ ldrh w1, [x19, 386] ++ add w1, w1, 1 ++ strh w1, [x19, 386] ++ beq .L2641 ++ ldrb w0, [x19, 400] ++ cbz w0, .L2642 ++.L2641: ++ strb wzr, [x19, 400] ++ b .L2643 ++.L2634: ++ cmp w2, 255 ++ bne .L2637 ++ add x0, x0, 1 ++ cmp x0, 8 ++ bne .L2638 ++ mov w25, w0 ++ b .L2637 ++.L2632: ++ madd w20, w20, w28, w27 ++ cbnz w0, .L2640 ++ mov w1, w20 ++ bl flash_erase_block ++ b .L2640 ++.L2642: ++ cbnz w25, .L2644 ++.L2652: ++ add x22, x22, :lo12:.LANCHOR5 ++ ldrb w0, [x22, 384] ++ cmp w0, 255 ++ bne .L2646 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 592 ++ mov w2, 890 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2646: ++ ldp x19, x20, [sp, 16] ++ mov w0, 0 ++ 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 ++.L2644: ++ ldrb w19, [x19, 385] ++ adrp x20, .LANCHOR4 ++ add x20, x20, :lo12:.LANCHOR4 ++ adrp x24, .LC0 ++ add w19, w19, 1 ++ add x20, x20, 592 ++ add x24, x24, :lo12:.LC0 ++.L2647: ++ cmp w19, 7 ++ bhi .L2652 ++ add x0, x23, :lo12:.LANCHOR0 ++ ldr x1, [x0, 1048] ++ add w0, w19, 8 ++ add x0, x1, w0, sxtw ++ ldrb w25, [x0, 32] ++ add w0, w25, 127 ++ and w0, w0, 255 ++ cmp w0, 125 ++ bhi .L2648 ++ mov x1, x20 ++ mov w2, 881 ++ mov x0, x24 ++ bl printk ++ bl dump_stack ++.L2649: ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrh w1, [x0, 1410] ++ mov w0, 0 ++ mul w1, w1, w25 ++ bl flash_erase_block ++ b .L2650 ++.L2648: ++ cmp w25, 255 ++ bne .L2649 ++.L2650: ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L2647 ++ .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 w0, 1 ++ mov w2, 16384 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ add x22, x19, :lo12:.LANCHOR0 ++ adrp x21, .LANCHOR5 ++ add x20, x21, :lo12:.LANCHOR5 ++ stp x25, x26, [sp, 64] ++ adrp x26, .LC187 ++ stp x27, x28, [sp, 80] ++ add x26, x26, :lo12:.LC187 ++ stp x23, x24, [sp, 48] ++ mov w27, 21574 ++ strb w0, [x20, 400] ++ movk w27, 0x494c, lsl 16 ++ strb w0, [x20, 402] ++ ldrh w1, [x22, 1096] ++ ldr x0, [x20, 392] ++ strb wzr, [x20, 401] ++ str x0, [x22, 1104] ++ add x1, x0, x1, lsl 2 ++ str x1, [x22, 3384] ++ mov w1, 0 ++ bl ftl_memset ++ ldr x0, [x20, 408] ++ mov w2, 16384 ++ mov w1, 0 ++ bl ftl_memset ++ strb wzr, [x20, 385] ++ ldr x0, [x22, 1048] ++ adrp x22, .LANCHOR3 ++ add x22, x22, :lo12:.LANCHOR3 ++ strh wzr, [x20, 386] ++ ldrb w0, [x0, 40] ++ strb w0, [x20, 384] ++ mov w20, 7 ++.L2668: ++ add x0, x19, :lo12:.LANCHOR0 ++ sxth w24, w20 ++ ldr x1, [x0, 1048] ++ add w0, w20, 8 ++ add x0, x1, w0, sxtw ++ ldrb w0, [x0, 32] ++ cmp w0, 255 ++ bne .L2667 ++.L2672: ++ sub w20, w20, #1 ++ cmn w20, #1 ++ bne .L2668 ++ mov w24, 0 ++.L2669: ++ adrp x23, .LANCHOR2 ++ ldr w0, [x23, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2673 ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w2, 4800 ++ mov w1, w20 ++ ldr x0, [x0, 3384] ++ ldr w3, [x0] ++ adrp x0, .LC188 ++ add x0, x0, :lo12:.LC188 ++ bl printk ++.L2673: ++ cmn w20, #1 ++ bne .L2674 ++ add x21, x21, :lo12:.LANCHOR5 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, 0 ++ mov w2, 16384 ++ ldr x0, [x21, 392] ++ bl ftl_memset ++ ldr x0, [x19, 3384] ++ mov w1, 21574 ++ movk w1, 0x494c, lsl 16 ++ str w1, [x0] ++ mov w1, 36 ++ movk w1, 0x6, lsl 16 ++ ldr x0, [x19, 3384] ++ str w1, [x0, 12] ++ mov w0, w20 ++.L2666: ++ 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 ++.L2667: ++ add x28, x21, :lo12:.LANCHOR5 ++ ldrh w25, [x22, 1410] ++ ldrb w4, [x22, 1946] ++ ldr x3, [x28, 376] ++ ldr x2, [x28, 392] ++ mul w25, w25, w0 ++ mov w0, 0 ++ mov w1, w25 ++ bl ftl_read_page ++ mov w23, w0 ++ cmn w0, #1 ++ bne .L2670 ++ ldrb w4, [x22, 1946] ++ add w1, w25, 1 ++ ldr x3, [x28, 376] ++ mov w0, 0 ++ ldr x2, [x28, 392] ++ bl ftl_read_page ++ mov w23, w0 ++.L2670: ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2671 ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w3, 749 ++ mov w2, w23 ++ mov w1, w20 ++ ldr x0, [x0, 3384] ++ ldr w4, [x0] ++ mov x0, x26 ++ bl printk ++.L2671: ++ cmn w23, #1 ++ beq .L2672 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3384] ++ ldr w0, [x0] ++ cmp w0, w27 ++ bne .L2672 ++ mov w20, w24 ++ b .L2669 ++.L2674: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x20, x21, :lo12:.LANCHOR5 ++ adrp x22, .LANCHOR3 ++ add x22, x22, :lo12:.LANCHOR3 ++ mov w4, 4 ++ mov w28, 21574 ++ ldr x1, [x0, 1048] ++ add w0, w24, 8 ++ ldr x3, [x20, 376] ++ adrp x27, .LC189 ++ ldr x2, [x20, 392] ++ add x27, x27, :lo12:.LC189 ++ add x0, x1, w0, sxtw ++ strb w24, [x20, 385] ++ movk w28, 0x494c, lsl 16 ++ ldrb w1, [x0, 32] ++ mov w0, 0 ++ strb w1, [x20, 384] ++ bl flash_get_last_written_page ++ sxth w25, w0 ++ add w0, w0, 1 ++ ldrb w26, [x20, 384] ++ and w24, w0, 65535 ++ ldrh w0, [x22, 1410] ++ madd w26, w26, w0, w25 ++.L2676: ++ tbnz w25, #31, .L2680 ++ ldrb w4, [x22, 1946] ++ mov w1, w26 ++ ldr x3, [x20, 376] ++ mov w0, 0 ++ ldr x2, [x20, 392] ++ bl ftl_read_page ++ cmn w0, #1 ++ beq .L2677 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3384] ++ ldr w0, [x0] ++ cmp w0, w28 ++ bne .L2677 ++ ldr x0, [x20, 376] ++ ldr w2, [x0, 8] ++ cbnz w2, .L2678 ++.L2680: ++ add x21, x21, :lo12:.LANCHOR5 ++ add x19, x19, :lo12:.LANCHOR0 ++ strh w24, [x21, 386] ++ bl ftl_tmp_into_update ++ ldr x1, [x19, 3384] ++ ldr w0, [x1, 64] ++ add w0, w0, 1 ++ str w0, [x1, 64] ++ mov w0, 0 ++ bl ftl_info_flush ++ mov w0, 0 ++ bl ftl_info_flush ++ ldr w0, [x23, #:lo12:.LANCHOR2] ++ tbnz x0, 14, .L2679 ++.L2696: ++ mov w0, 0 ++ b .L2666 ++.L2678: ++ ldr x0, [x20, 392] ++ ldrb w1, [x22, 1946] ++ str w2, [x29, 108] ++ lsl w1, w1, 9 ++ bl js_hash ++ ldr w2, [x29, 108] ++ cmp w2, w0 ++ beq .L2680 ++ ldr x0, [x20, 376] ++ ldr w1, [x0, 8] ++ mov x0, x27 ++ bl printk ++.L2677: ++ sub w25, w25, #1 ++ sub w26, w26, #1 ++ sxth w25, w25 ++ b .L2676 ++.L2679: ++ ldr x0, [x19, 3384] ++ ldr w1, [x0, 156] ++ adrp x0, .LC190 ++ add x0, x0, :lo12:.LC190 ++ bl printk ++ b .L2696 ++ .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, -96]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ str x27, [sp, 80] ++ bl timer_get_time ++ mov w1, 100 ++ udiv w0, w0, w1 ++ add x1, x19, :lo12:.LANCHOR0 ++ ldr x1, [x1, 1128] ++ ldr w3, [x1, 520] ++ cmp w0, w3 ++ bls .L2698 ++ ldr w2, [x1, 12] ++ sub w2, w2, w3 ++ add w2, w2, w0 ++ str w2, [x1, 12] ++.L2712: ++ str w0, [x1, 520] ++ b .L2699 ++.L2698: ++ bcc .L2712 ++.L2699: ++ adrp x22, .LANCHOR4 ++ add x22, x22, :lo12:.LANCHOR4 ++ add x19, x19, :lo12:.LANCHOR0 ++ add x22, x22, 608 ++ mov w0, 0 ++ bl ftl_total_vpn_update ++.L2700: ++ adrp x23, .LANCHOR3 ++.L2703: ++ ldr x1, [x19, 3384] ++ ldr w0, [x1, 56] ++ add w0, w0, 1 ++ str w0, [x1, 56] ++ add x0, x23, :lo12:.LANCHOR3 ++ ldrh w1, [x1, 140] ++ ldrh w0, [x0, 1376] ++ cmp w1, w0 ++ bcc .L2701 ++ bl ftl_ext_alloc_new_blk ++.L2701: ++ ldr x0, [x19, 3384] ++ ldrh w1, [x0, 130] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2702 ++ mov x1, x22 ++ mov w2, 2211 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2702: ++ add x25, x23, :lo12:.LANCHOR3 ++ ldr x1, [x19, 3384] ++ ldrb w20, [x19, 1205] ++ mov w0, 24 ++ adrp x24, .LANCHOR5 ++ add x21, x24, :lo12:.LANCHOR5 ++ sub w20, w0, w20 ++ ldrh w0, [x25, 1304] ++ ldrh w2, [x1, 130] ++ sub w0, w20, w0 ++ mov w20, 1 ++ lsl w20, w20, w0 ++ sub w20, w20, #1 ++ asr w26, w2, w0 ++ and w20, w20, w2 ++ ldrh w0, [x1, 140] ++ sxth w20, w20 ++ ldrh w2, [x25, 1410] ++ mov w1, 0 ++ madd w20, w20, w2, w0 ++ ldr x0, [x21, 376] ++ ldrb w2, [x25, 1946] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldr x0, [x21, 376] ++ str wzr, [x0] ++ ldr x1, [x19, 3384] ++ ldr x0, [x21, 376] ++ ldr w1, [x1, 56] ++ str w1, [x0, 4] ++ ldrb w1, [x25, 1946] ++ ldr x0, [x21, 408] ++ ldr x27, [x21, 376] ++ lsl w1, w1, 9 ++ bl js_hash ++ ldr x2, [x21, 408] ++ mov w1, w20 ++ ldrb w4, [x25, 1946] ++ ldr x3, [x21, 376] ++ str w0, [x27, 8] ++ mov w0, w26 ++ bl ftl_prog_page ++ ldr x2, [x19, 3384] ++ ldrh w1, [x2, 140] ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ strh w1, [x2, 140] ++ cmp w1, 1 ++ beq .L2703 ++ cmn w0, #1 ++ beq .L2704 ++ ldrb w0, [x21, 402] ++ cbz w0, .L2705 ++.L2704: ++ add x24, x24, :lo12:.LANCHOR5 ++ strb wzr, [x24, 402] ++ b .L2700 ++.L2705: ++ 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 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, -128]! ++ mov w4, 4 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR3 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x22, x19, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ add x2, x21, :lo12:.LANCHOR3 ++ stp x27, x28, [sp, 80] ++ adrp x25, .LANCHOR5 ++ ldr x0, [x22, 3384] ++ ldrb w20, [x22, 1205] ++ strh wzr, [x2, 1944] ++ ldrh w1, [x0, 130] ++ mov w0, 24 ++ sub w0, w0, w20 ++ ldrh w20, [x2, 1304] ++ sub w0, w0, w20 ++ mov w20, 1 ++ asr w24, w1, w0 ++ and w27, w24, 255 ++ lsl w20, w20, w0 ++ add x0, x25, :lo12:.LANCHOR5 ++ sub w20, w20, #1 ++ and w20, w20, w1 ++ ldr x3, [x0, 376] ++ mov w1, w20 ++ ldr x2, [x0, 408] ++ mov w0, w27 ++ bl flash_get_last_written_page ++ sxth w23, w0 ++ adrp x0, .LANCHOR2 ++ stp x0, x25, [x29, 112] ++ ldr w1, [x0, #:lo12:.LANCHOR2] ++ tbz x1, 12, .L2714 ++ ldr x0, [x22, 3384] ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ and w4, w24, 65535 ++ mov w3, w23 ++ mov w2, 2256 ++ add x1, x1, 632 ++ ldrh w5, [x0, 130] ++ adrp x0, .LC191 ++ add x0, x0, :lo12:.LC191 ++ bl printk ++.L2714: ++ adrp x26, .LC192 ++ and w22, w23, 65535 ++ add x25, x21, :lo12:.LANCHOR3 ++ add x26, x26, :lo12:.LC192 ++ mov w24, 0 ++.L2715: ++ sub w0, w22, w24 ++ tbnz x0, 15, .L2720 ++ ldr x0, [x29, 120] ++ sub w1, w23, w24 ++ ldrb w4, [x25, 1946] ++ add x28, x0, :lo12:.LANCHOR5 ++ ldrh w0, [x25, 1410] ++ ldr x3, [x28, 376] ++ madd w1, w0, w20, w1 ++ ldr x2, [x28, 408] ++ mov w0, w27 ++ bl flash_read_page_en ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ beq .L2716 ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w1, 20038 ++ movk w1, 0x4549, lsl 16 ++ ldr x0, [x0, 1128] ++ ldr w0, [x0] ++ cmp w0, w1 ++ bne .L2716 ++ ldr x0, [x28, 376] ++ ldr w2, [x0, 8] ++ cbnz w2, .L2717 ++.L2720: ++ bl zftl_sblk_list_init ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3384] ++ ldrh w1, [x0, 140] ++ cmp w1, w23 ++ bgt .L2719 ++ add w22, w22, 1 ++ strh w22, [x0, 140] ++ bl ftl_ext_info_flush ++.L2719: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldr x20, [x19, 1128] ++ bl timer_get_time ++ mov w1, 100 ++ udiv w0, w0, w1 ++ str w0, [x20, 520] ++ ldr x20, [x19, 1128] ++ bl timer_get_time ++ mov w1, -1 ++ str w0, [x20, 604] ++ ldr x0, [x19, 1128] ++ strh w1, [x0, 584] ++ strh w1, [x0, 586] ++ strh w1, [x0, 588] ++ strh w1, [x0, 590] ++ mov w1, 65535 ++ str w1, [x0, 560] ++ mov w1, -1 ++ str w1, [x0, 564] ++ ldr x1, [x29, 112] ++ str wzr, [x0, 608] ++ ldr w1, [x1, #:lo12:.LANCHOR2] ++ tbz x1, 12, .L2722 ++ ldr w20, [x0, 12] ++ ldr w19, [x0, 520] ++ bl timer_get_time ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ mov w4, w0 ++ mov w3, w20 ++ adrp x0, .LC193 ++ mov w2, w19 ++ add x1, x1, 632 ++ add x0, x0, :lo12:.LC193 ++ bl printk ++.L2722: ++ add x21, x21, :lo12:.LANCHOR3 ++ mov w0, -1 ++ ldp x19, x20, [sp, 16] ++ strh w0, [x21, 1280] ++ mov w0, 0 ++ 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 ++.L2717: ++ ldr x0, [x28, 408] ++ ldrb w1, [x25, 1946] ++ str w2, [x29, 108] ++ lsl w1, w1, 9 ++ bl js_hash ++ ldr w2, [x29, 108] ++ cmp w2, w0 ++ beq .L2720 ++ ldr x0, [x28, 376] ++ ldr w1, [x0, 8] ++ mov x0, x26 ++ bl printk ++.L2716: ++ add w24, w24, 1 ++ b .L2715 ++ .size ftl_ext_info_init, .-ftl_ext_info_init ++ .align 2 ++ .global ftl_prog_ppa_page ++ .type ftl_prog_ppa_page, %function ++ftl_prog_ppa_page: ++ stp x29, x30, [sp, -16]! ++ adrp x4, .LANCHOR0+1205 ++ mov w5, 1 ++ add x29, sp, 0 ++ ldrb w6, [x4, #:lo12:.LANCHOR0+1205] ++ mov w4, 24 ++ sub w4, w4, w6 ++ lsl w7, w5, w4 ++ sub w7, w7, #1 ++ lsl w5, w5, w6 ++ sub w6, w5, #1 ++ lsr w5, w0, w4 ++ mov w4, w3 ++ mov x3, x2 ++ mov x2, x1 ++ and w1, w7, w0 ++ and w0, w6, w5 ++ 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: ++ ldrh w1, [x0, 6] ++ cmp w1, 1 ++ bne .L2737 ++ stp x29, x30, [sp, -64]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR3 ++ add x20, x20, :lo12:.LANCHOR3 ++ stp x21, x22, [sp, 32] ++ str x23, [sp, 48] ++ mov x19, x0 ++ ldr x21, [x20, 1928] ++ ldrh w23, [x0, 12] ++ bl ftl_get_new_free_page ++ mov w22, w0 ++ cmn w0, #1 ++ beq .L2738 ++ ldrh w0, [x19] ++ adrp x19, .LANCHOR5 ++ add x19, x19, :lo12:.LANCHOR5 ++ add x21, x21, w23, uxth 2 ++ bl ftl_vpn_decrement ++ ldr x0, [x19, 416] ++ mov w1, 15555 ++ movk w1, 0xf55f, lsl 16 ++ str w1, [x0] ++ ldrb w0, [x20, 1321] ++ ldrh w1, [x20, 1376] ++ ldr x23, [x19, 416] ++ mul w1, w1, w0 ++ mov x0, x21 ++ lsl w1, w1, 2 ++ bl js_hash ++ str w0, [x23, 4] ++ mov x2, 0 ++ mov w0, 2 ++ ldr x1, [x19, 416] ++ stp wzr, wzr, [x1, 8] ++ str wzr, [x1, 16]! ++ bl ftl_debug_info_fill ++ ldrb w3, [x20, 1946] ++ mov x1, x21 ++ ldr x2, [x19, 416] ++ mov w0, w22 ++ bl ftl_prog_ppa_page ++.L2738: ++ mov w0, 0 ++ ldr x23, [sp, 48] ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L2737: ++ mov w0, -1 ++ ret ++ .size ftl_write_last_log_page, .-ftl_write_last_log_page ++ .align 2 ++ .global ftl_dump_write_open_sblk ++ .type ftl_dump_write_open_sblk, %function ++ftl_dump_write_open_sblk: ++ sub sp, sp, #224 ++ stp x29, x30, [sp, 48] ++ add x29, sp, 48 ++ stp x19, x20, [sp, 64] ++ and w20, w0, 65535 ++ stp x21, x22, [sp, 80] ++ adrp x21, .LANCHOR0 ++ add x0, x21, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 96] ++ stp x25, x26, [sp, 112] ++ stp x27, x28, [sp, 128] ++ ldrh w0, [x0, 1096] ++ cmp w0, w20 ++ bls .L2743 ++ adrp x23, .LANCHOR3 ++ add x0, x23, :lo12:.LANCHOR3 ++ ldrb w1, [x0, 1336] ++ cbnz w1, .L2745 ++ ldrb w0, [x0, 1322] ++ cbz w0, .L2743 ++.L2745: ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1212] ++ cbnz w1, .L2743 ++ ldr x0, [x0, 1104] ++ ubfiz x14, x20, 2, 16 ++ add x0, x0, x14 ++ ldrb w0, [x0, 2] ++ and w0, w0, 224 ++ cmp w0, 160 ++ bne .L2767 ++ add x0, x23, :lo12:.LANCHOR3 ++ ldrb w26, [x0, 1320] ++.L2746: ++ add x22, x29, 176 ++ add x24, x23, :lo12:.LANCHOR3 ++ mov w0, w20 ++ adrp x27, .LC195 ++ add x27, x27, :lo12:.LC195 ++ mov w28, 0 ++ strh w20, [x22, -32]! ++ add x1, x22, 16 ++ bl ftl_get_blk_list_in_sblk ++ ldrh w1, [x24, 1376] ++ and w0, w0, 255 ++ strb w0, [x29, 153] ++ strh wzr, [x29, 146] ++ strb wzr, [x29, 149] ++ mul w0, w0, w1 ++ strh wzr, [x29, 154] ++ strh w0, [x29, 150] ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr x0, [x0, 1104] ++ add x1, x0, x14 ++ ldr w5, [x0, x14] ++ ldrb w2, [x1, 2] ++ mov w1, w20 ++ ldrh w4, [x0, x14] ++ adrp x0, .LC194 ++ ubfx x5, x5, 11, 8 ++ add x0, x0, :lo12:.LC194 ++ ubfx x3, x2, 3, 2 ++ and w4, w4, 2047 ++ ubfx x2, x2, 5, 3 ++ bl printk ++ mov w0, 1 ++ bl buf_alloc ++ mov x19, x0 ++ mov x11, x24 ++ mov w9, 0 ++ mov w10, 0 ++.L2747: ++ ldrh w0, [x11, 1376] ++ cmp w0, w28 ++ bls .L2755 ++ lsl w24, w28, 1 ++ mov w10, 0 ++ sub w0, w24, #1 ++ add w24, w24, w28 ++ sub w24, w24, #1 ++ str w0, [x29, 136] ++ b .L2758 ++.L2767: ++ mov w26, 1 ++ b .L2746 ++.L2756: ++ ldrh w12, [x22, x25] ++ mov w0, 65535 ++ cmp w12, w0 ++ bne .L2748 ++.L2754: ++ add w9, w9, 1 ++ and w9, w9, 65535 ++.L2749: ++ cmp w26, w9 ++ bcs .L2756 ++ add w10, w10, 1 ++ and w10, w10, 65535 ++.L2758: ++ ldrb w0, [x29, 153] ++ cmp w0, w10 ++ bls .L2757 ++ sxtw x25, w10 ++ mov w9, 1 ++ add x25, x25, 8 ++ lsl x25, x25, 1 ++ b .L2749 ++.L2748: ++ ldrh w3, [x11, 1410] ++ cmp w26, 3 ++ mul w3, w3, w12 ++ add w0, w3, w9 ++ bne .L2750 ++ add x1, x21, :lo12:.LANCHOR0 ++ ldrb w1, [x1, 1213] ++ cbz w1, .L2751 ++ ldrb w3, [x11, 1320] ++ add w0, w0, w24 ++.L2781: ++ orr w3, w0, w3, lsl 24 ++ b .L2752 ++.L2751: ++ add w3, w28, w3 ++ orr w3, w3, w9, lsl 24 ++.L2752: ++ str w3, [x19, 40] ++ mov w1, 1 ++ str x11, [x29, 104] ++ mov x0, x19 ++ str w9, [x29, 112] ++ stp w12, w10, [x29, 124] ++ str w3, [x29, 132] ++ bl sblk_read_page ++ ldr w13, [x19, 52] ++ ldr w9, [x29, 112] ++ cmp w13, 512 ++ ldr w3, [x29, 132] ++ ccmn w13, #1, 4, ne ++ ldr x11, [x29, 104] ++ ldp w12, w10, [x29, 124] ++ bne .L2754 ++ ldr x1, [x19, 24] ++ mov w4, w13 ++ ldr x0, [x19, 8] ++ str x11, [x29, 112] ++ stp w9, w10, [x29, 124] ++ ldr w2, [x1, 12] ++ str w2, [sp, 32] ++ str w13, [x29, 132] ++ ldr w2, [x1, 8] ++ str w2, [sp, 24] ++ ldr w2, [x1, 4] ++ str w2, [sp, 16] ++ mov w2, w28 ++ ldr w1, [x1] ++ str w1, [sp, 8] ++ ldr w1, [x0, 12] ++ str w1, [sp] ++ mov w1, w12 ++ ldp w5, w6, [x0] ++ ldr w7, [x0, 8] ++ mov x0, x27 ++ bl printk ++ ldr w13, [x29, 132] ++ ldp w9, w10, [x29, 124] ++ cmp w13, 512 ++ ldr x11, [x29, 112] ++ bne .L2754 ++.L2755: ++ add x24, x23, :lo12:.LANCHOR3 ++ mov w4, w9 ++ mov w3, w10 ++ mov w2, w28 ++ mov w1, w20 ++ adrp x0, .LC196 ++ add x0, x0, :lo12:.LC196 ++ bl printk ++ ldr x0, [x19, 8] ++ mov w1, 0 ++ ldrb w2, [x24, 1946] ++ adrp x26, .LC197 ++ add x26, x26, :lo12:.LC197 ++ lsl w2, w2, 9 ++ bl ftl_memset ++ ldr x0, [x19, 24] ++ mov w1, 0 ++ ldrb w2, [x24, 1946] ++ lsl w2, w2, 1 ++ bl ftl_memset ++.L2759: ++ add x24, x23, :lo12:.LANCHOR3 ++ ldrh w0, [x24, 1376] ++ cmp w0, w28 ++ bls .L2765 ++ add x0, x21, :lo12:.LANCHOR0 ++ lsl w27, w28, 1 ++ mov w25, 0 ++ str x0, [x29, 136] ++ b .L2766 ++.L2750: ++ cmp w26, 2 ++ bne .L2753 ++ ldr w1, [x29, 136] ++ ldrb w3, [x11, 1320] ++ add w0, w1, w0 ++ b .L2781 ++.L2753: ++ add w3, w28, w3 ++ b .L2752 ++.L2757: ++ add w8, w28, 1 ++ and w28, w8, 65535 ++ b .L2747 ++.L2764: ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2760 ++ mov w2, w25 ++ mov w1, w28 ++ mov x0, x26 ++ bl printk ++.L2760: ++ ldrb w1, [x24, 1336] ++ sxtw x0, w25 ++ ldrh w2, [x24, 1410] ++ cbz w1, .L2761 ++ add x0, x0, 8 ++ ldrh w1, [x22, x0, lsl 1] ++ mov x0, x19 ++ mul w1, w1, w2 ++ orr w1, w1, w28 ++ str w1, [x19, 40] ++ bl sblk_3d_tlc_dump_prog ++.L2762: ++ add w25, w25, 1 ++ and w25, w25, 65535 ++.L2766: ++ ldrb w0, [x29, 153] ++ cmp w0, w25 ++ bhi .L2764 ++ add w8, w28, 1 ++ and w28, w8, 65535 ++ b .L2759 ++.L2761: ++ add x0, x0, 8 ++ ldrb w1, [x24, 1320] ++ cmp w1, 2 ++ ldrh w1, [x22, x0, lsl 1] ++ mul w1, w1, w2 ++ bne .L2763 ++ orr w1, w1, w27 ++ mov x0, x19 ++ orr w1, w1, 33554432 ++ str w1, [x19, 40] ++ bl sblk_mlc_dump_prog ++ b .L2762 ++.L2763: ++ ldr x0, [x29, 136] ++ mov w6, 1 ++ ldrb w4, [x24, 1946] ++ orr w1, w1, w28 ++ ldr x3, [x19, 24] ++ mov w5, 0 ++ str w1, [x19, 40] ++ ldrb w2, [x0, 1205] ++ mov w0, 24 ++ sub w0, w0, w2 ++ lsl w6, w6, w2 ++ ldr x2, [x19, 8] ++ sub w6, w6, #1 ++ lsl w7, w6, w0 ++ lsr w0, w1, w0 ++ bic w1, w1, w7 ++ and w0, w0, w6 ++ bl flash_prog_page_en ++ b .L2762 ++.L2765: ++ mov x0, x19 ++ bl zbuf_free ++ adrp x0, .LC198 ++ mov w1, w20 ++ add x0, x0, :lo12:.LC198 ++ bl printk ++.L2743: ++ 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, 224 ++ ret ++ .size ftl_dump_write_open_sblk, .-ftl_dump_write_open_sblk ++ .align 2 ++ .global gc_ink_check_sblk ++ .type gc_ink_check_sblk, %function ++gc_ink_check_sblk: ++ stp x29, x30, [sp, -80]! ++ 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, 5526] ++ ldr x21, [x0, 5600] ++ cmp w1, 3 ++ bhi .L2783 ++ adrp x0, .L2785 ++ mov x20, x19 ++ add x0, x0, :lo12:.L2785 ++ ldrh w0, [x0,w1,uxtw #1] ++ adr x1, .Lrtx2785 ++ add x0, x1, w0, sxth #2 ++ br x0 ++.Lrtx2785: ++ .section .rodata ++ .align 0 ++ .align 2 ++.L2785: ++ .2byte (.L2784 - .Lrtx2785) / 4 ++ .2byte (.L2786 - .Lrtx2785) / 4 ++ .2byte (.L2787 - .Lrtx2785) / 4 ++ .2byte (.L2788 - .Lrtx2785) / 4 ++ .text ++.L2784: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x19, 3372] ++ cmp w0, 7 ++ bls .L2782 ++ ldrb w0, [x19, 3353] ++ cmp w0, 2 ++ bls .L2782 ++ adrp x20, .LANCHOR3 ++ add x20, x20, :lo12:.LANCHOR3 ++ add x23, x20, 1400 ++ mov w1, 0 ++ mov x0, x23 ++ bl _list_get_gc_head_node ++ and w0, w0, 65535 ++ mov w22, 65535 ++ cmp w0, w22 ++ beq .L2782 ++ ldr x1, [x19, 1104] ++ ubfiz x0, x0, 2, 16 ++ ldrh w0, [x1, x0] ++ and w0, w0, 2047 ++ cmp w0, 2 ++ bgt .L2782 ++ mov w0, 1 ++ bl buf_alloc ++ str x0, [x19, 5600] ++ add x21, x19, 3416 ++ cbz x0, .L2782 ++ add x2, x19, 3372 ++ mov w1, 0 ++ mov x0, x23 ++ bl _list_pop_index_node ++ and w14, w0, 65535 ++ cmp w14, w22 ++ bne .L2792 ++ ldr x0, [x19, 5600] ++ bl zbuf_free ++ str xzr, [x19, 5600] ++.L2782: ++ 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 ++.L2792: ++ mov w0, w14 ++ add x1, x21, 2162 ++ bl ftl_get_blk_list_in_sblk ++ strb w0, [x21, 2155] ++ mov w0, 1 ++ strh w0, [x19, 5526] ++ ldr x0, [x19, 1104] ++ strh w14, [x19, 5562] ++ ubfiz x14, x14, 2, 16 ++ strh wzr, [x19, 5564] ++ ldrb w2, [x20, 1946] ++ ldrh w0, [x0, x14] ++ tbz x0, 0, .L2793 ++ ldr x0, [x19, 5600] ++ lsl w2, w2, 9 ++ mov w1, 85 ++.L2808: ++ ldr x0, [x0, 8] ++ bl ftl_memset ++ b .L2782 ++.L2793: ++ lsl w2, w2, 9 ++ mov w1, 170 ++ ldr x0, [x19, 5600] ++ b .L2808 ++.L2786: ++ add x20, x19, :lo12:.LANCHOR0 ++ mov w1, 0 ++ ldrh w0, [x20, 5562] ++ bl ftl_erase_sblk ++ mov w0, 2 ++ strh w0, [x20, 5526] ++ b .L2782 ++.L2787: ++ add x19, x19, :lo12:.LANCHOR0 ++ adrp x24, .LANCHOR3 ++ mov w20, 65280 ++ add x22, x19, 3416 ++ add x24, x24, :lo12:.LANCHOR3 ++ mov w23, 0 ++ movk w20, 0x55aa, lsl 16 ++ bl sblk_wait_write_queue_completed ++.L2794: ++ ldrb w0, [x22, 2155] ++ cmp w0, w23 ++ bhi .L2796 ++ ldrh w0, [x22, 2148] ++ adrp x1, .LANCHOR3+1376 ++ add w0, w0, 1 ++ ldrh w1, [x1, #:lo12:.LANCHOR3+1376] ++ and w0, w0, 65535 ++ strh w0, [x22, 2148] ++ cmp w1, w0 ++ bhi .L2782 ++ mov w0, 3 ++ strh wzr, [x22, 2148] ++ strh w0, [x22, 2110] ++ b .L2782 ++.L2796: ++ add x0, x22, w23, sxtw 1 ++ mov w1, 65535 ++ ldrh w0, [x0, 2162] ++ cmp w0, w1 ++ beq .L2795 ++ ldrh w2, [x22, 2148] ++ mov w6, 1 ++ ldrh w1, [x24, 1410] ++ mov w5, 0 ++ madd w1, w1, w0, w2 ++ ldr x0, [x21, 8] ++ str w1, [x0] ++ ldr x0, [x21, 8] ++ str w20, [x0, 4] ++ ldr x0, [x21, 24] ++ str wzr, [x0] ++ mov w0, 24 ++ ldrb w2, [x19, 1205] ++ ldrb w4, [x24, 1946] ++ sub w0, w0, w2 ++ ldr x3, [x21, 24] ++ lsl w6, w6, w2 ++ ldr x2, [x21, 8] ++ sub w6, w6, #1 ++ lsl w7, w6, w0 ++ lsr w0, w1, w0 ++ bic w1, w1, w7 ++ and w0, w0, w6 ++ bl flash_prog_page_en ++.L2795: ++ add w23, w23, 1 ++ and w23, w23, 65535 ++ b .L2794 ++.L2788: ++ add x19, x19, :lo12:.LANCHOR0 ++ adrp x25, .LANCHOR3 ++ add x19, x19, 3416 ++ add x25, x25, :lo12:.LANCHOR3 ++ mov w22, 0 ++ mov w26, 65535 ++ bl sblk_wait_write_queue_completed ++.L2797: ++ ldrb w0, [x19, 2155] ++ cmp w0, w22 ++ bhi .L2801 ++ ldrh w0, [x19, 2148] ++ adrp x1, .LANCHOR3+1376 ++ add w0, w0, 1 ++ ldrh w1, [x1, #:lo12:.LANCHOR3+1376] ++ and w0, w0, 65535 ++ strh w0, [x19, 2148] ++ cmp w1, w0 ++ bhi .L2782 ++ ldr x0, [x19, 2184] ++ strh wzr, [x19, 2110] ++ bl zbuf_free ++ str xzr, [x19, 2184] ++ ldrh w0, [x19, 2112] ++ cmp w0, 15 ++ bhi .L2802 ++ add w1, w0, 1 ++ add x0, x19, w0, sxtw 1 ++ strh w1, [x19, 2112] ++ ldrh w1, [x19, 2146] ++ strh w1, [x0, 2114] ++.L2803: ++ add x19, x20, :lo12:.LANCHOR0 ++ adrp x0, .LC199 ++ add x0, x0, :lo12:.LC199 ++ ldrh w2, [x19, 5528] ++ ldrh w1, [x19, 5562] ++ bl printk ++ b .L2782 ++.L2801: ++ add x24, x19, w22, sxtw 1 ++ add x24, x24, 16 ++ ldrh w0, [x24, 2146] ++ cmp w0, w26 ++ beq .L2799 ++ ldrh w1, [x19, 2148] ++ ldrh w23, [x25, 1410] ++ madd w23, w23, w0, w1 ++ mov w1, 1 ++ str w23, [x21, 40] ++ mov x0, x21 ++ bl sblk_read_page ++ ldr x0, [x21, 8] ++ ldr w0, [x0] ++ cmp w23, w0 ++ beq .L2799 ++ mov w0, w23 ++ bl ftl_mask_bad_block ++ mov w0, -1 ++ strh w0, [x24, 2146] ++.L2799: ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ b .L2797 ++.L2802: ++ ldrh w0, [x19, 2146] ++ bl zftl_insert_free_list ++ b .L2803 ++.L2783: ++ strh wzr, [x0, 5526] ++ b .L2782 ++ .size gc_ink_check_sblk, .-gc_ink_check_sblk ++ .align 2 ++ .global ftl_ink_check_sblk ++ .type ftl_ink_check_sblk, %function ++ftl_ink_check_sblk: ++ stp x29, x30, [sp, -144]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x22, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x25, x26, [sp, 64] ++ and w20, w0, 65535 ++ stp x23, x24, [sp, 48] ++ ubfiz x25, x20, 2, 16 ++ stp x27, x28, [sp, 80] ++ mov w1, w20 ++ ldr x0, [x22, 1104] ++ ldr w3, [x0, x25] ++ ldrh w2, [x0, x25] ++ adrp x0, .LC200 ++ add x0, x0, :lo12:.LC200 ++ ubfx x3, x3, 11, 8 ++ and w2, w2, 2047 ++ bl printk ++ mov w0, 65535 ++ cmp w20, w0 ++ beq .L2809 ++ ldrh w0, [x22, 1096] ++ cmp w0, w20 ++ bls .L2809 ++ add x24, x29, 144 ++ mov w1, 0 ++ mov w0, w20 ++ bl ftl_erase_sblk ++ mov w0, w20 ++ strh w20, [x24, -32]! ++ add x1, x24, 16 ++ bl ftl_get_blk_list_in_sblk ++ strb w0, [x29, 121] ++ mov w0, 1 ++ bl buf_alloc ++ mov x19, x0 ++ ldr x0, [x22, 1104] ++ adrp x22, .LANCHOR3 ++ ldrh w0, [x0, x25] ++ and w0, w0, 2047 ++ cmp w0, 1 ++ add x0, x22, :lo12:.LANCHOR3 ++ ldrb w2, [x0, 1946] ++ lsl w2, w2, 9 ++ bgt .L2811 ++ mov w1, 85 ++.L2827: ++ ldr x0, [x19, 8] ++ add x27, x22, :lo12:.LANCHOR3 ++ mov w26, 0 ++ bl ftl_memset ++ bl sblk_wait_write_queue_completed ++ mov w9, 65280 ++ mov w8, 65535 ++ movk w9, 0x55aa, lsl 16 ++.L2813: ++ ldrh w0, [x27, 1376] ++ cmp w0, w26 ++ bls .L2816 ++ mov w23, 0 ++ add x7, x21, :lo12:.LANCHOR0 ++ mov w28, 24 ++ b .L2817 ++.L2811: ++ mov w1, 170 ++ b .L2827 ++.L2815: ++ add x0, x24, w23, sxtw 1 ++ ldrh w0, [x0, 16] ++ cmp w0, w8 ++ beq .L2814 ++ ldrh w1, [x27, 1410] ++ mov w6, 1 ++ stp w8, w9, [x29, 96] ++ mov w5, 0 ++ str x7, [x29, 104] ++ madd w1, w1, w0, w26 ++ ldr x0, [x19, 8] ++ str w1, [x0] ++ ldr x0, [x19, 8] ++ str w9, [x0, 4] ++ ldr x0, [x19, 24] ++ str wzr, [x0] ++ ldrb w2, [x7, 1205] ++ ldrb w4, [x27, 1946] ++ sub w0, w28, w2 ++ ldr x3, [x19, 24] ++ lsl w6, w6, w2 ++ ldr x2, [x19, 8] ++ sub w6, w6, #1 ++ lsl w10, w6, w0 ++ lsr w0, w1, w0 ++ bic w1, w1, w10 ++ and w0, w0, w6 ++ bl flash_prog_page_en ++ ldp w8, w9, [x29, 96] ++ ldr x7, [x29, 104] ++.L2814: ++ add w23, w23, 1 ++ and w23, w23, 65535 ++.L2817: ++ ldrb w0, [x29, 121] ++ cmp w0, w23 ++ bhi .L2815 ++ add w26, w26, 1 ++ and w26, w26, 65535 ++ b .L2813 ++.L2816: ++ add x22, x22, :lo12:.LANCHOR3 ++ mov w26, 0 ++ mov w27, 65535 ++.L2818: ++ ldrh w0, [x22, 1376] ++ cmp w0, w26 ++ bls .L2823 ++ mov w23, 0 ++ b .L2824 ++.L2822: ++ sxtw x28, w23 ++ add x28, x28, 8 ++ lsl x28, x28, 1 ++ ldrh w0, [x24, x28] ++ cmp w0, w27 ++ beq .L2820 ++ ldrh w3, [x22, 1410] ++ mov w1, 1 ++ madd w3, w3, w0, w26 ++ mov x0, x19 ++ str w3, [x19, 40] ++ str w3, [x29, 104] ++ bl sblk_read_page ++ ldr x0, [x19, 8] ++ ldr w3, [x29, 104] ++ ldr w0, [x0] ++ cmp w3, w0 ++ beq .L2820 ++ mov w0, w3 ++ bl ftl_mask_bad_block ++ mov w0, -1 ++ strh w0, [x24, x28] ++.L2820: ++ add w23, w23, 1 ++ and w23, w23, 65535 ++.L2824: ++ ldrb w0, [x29, 121] ++ cmp w0, w23 ++ bhi .L2822 ++ add w2, w26, 1 ++ and w26, w2, 65535 ++ b .L2818 ++.L2823: ++ add x21, x21, :lo12:.LANCHOR0 ++ mov x0, x19 ++ bl zbuf_free ++ mov w1, w20 ++ ldr x0, [x21, 1104] ++ ldr w3, [x0, x25] ++ ldrh w2, [x0, x25] ++ adrp x0, .LC201 ++ add x0, x0, :lo12:.LC201 ++ ubfx x3, x3, 11, 8 ++ and w2, w2, 2047 ++ bl printk ++.L2809: ++ 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_ink_check_sblk, .-ftl_ink_check_sblk ++ .align 2 ++ .global ftl_alloc_sblk ++ .type ftl_alloc_sblk, %function ++ftl_alloc_sblk: ++ stp x29, x30, [sp, -80]! ++ cmp w0, 5 ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ and w21, w0, 65535 ++ stp x19, x20, [sp, 16] ++ mov w22, w0 ++ stp x23, x24, [sp, 48] ++ mov w1, w21 ++ cset w23, eq ++ mov w0, 0 ++ str x25, [sp, 64] ++ bl zftl_get_free_sblk ++ and w20, w0, 65535 ++ mov w0, 65535 ++ cmp w20, w0 ++ beq .L2830 ++ adrp x0, .LANCHOR0 ++ add x1, x0, :lo12:.LANCHOR0 ++ ubfiz x25, x20, 2, 16 ++ lsl w23, w23, 1 ++ mov w24, w20 ++ mov x19, x0 ++ ldr x21, [x1, 1104] ++ add x21, x21, x25 ++ ldrb w1, [x21, 2] ++ tst w1, 224 ++ beq .L2831 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 656 ++ mov w2, 1012 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2831: ++ ldrb w0, [x21, 2] ++ bfi w0, w22, 5, 3 ++ ubfx x1, x0, 3, 2 ++ orr w1, w23, w1 ++ bfi w0, w1, 3, 2 ++ strb w0, [x21, 2] ++ and w1, w0, 24 ++ cmp w1, 24 ++ bne .L2832 ++ cbnz w23, .L2832 ++ mov w1, 1 ++ bfi w0, w1, 3, 2 ++ strb w0, [x21, 2] ++.L2832: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x1, [x0, 3384] ++ ldrh w1, [x1, 150] ++ cbz w1, .L2833 ++ ldr x0, [x0, 1104] ++ ldrh w0, [x0, x25] ++ tst x0, 2047 ++ bne .L2833 ++ cbnz w23, .L2833 ++ mov w0, w24 ++ bl ftl_ink_check_sblk ++.L2833: ++ mov w0, w20 ++ 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 ++.L2830: ++ bl print_ftl_debug_info ++ adrp x19, .LC202 ++ mov w2, w22 ++ add x19, x19, :lo12:.LC202 ++ mov w1, w20 ++ mov x0, x19 ++ bl printk ++ mov w1, w21 ++ mov w0, 0 ++ bl zftl_get_free_sblk ++ and w20, w0, 65535 ++ mov w2, w22 ++ mov w1, w20 ++ mov x0, x19 ++ bl printk ++ bl dump_all_list_info ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 656 ++ mov w2, 1031 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ b .L2833 ++ .size ftl_alloc_sblk, .-ftl_alloc_sblk ++ .align 2 ++ .global ftl_open_sblk_init ++ .type ftl_open_sblk_init, %function ++ftl_open_sblk_init: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ stp x23, x24, [sp, 48] ++ adrp x22, .LC203 ++ stp x19, x20, [sp, 16] ++ adrp x24, .LANCHOR3 ++ stp x25, x26, [sp, 64] ++ mov x19, x0 ++ mov w23, w1 ++ add x25, x24, :lo12:.LANCHOR3 ++ add x21, x21, :lo12:.LANCHOR0 ++ add x22, x22, :lo12:.LC203 ++.L2843: ++ mov w26, 65535 ++.L2844: ++ mov w0, w23 ++ bl ftl_alloc_sblk ++ and w20, w0, 65535 ++ cmp w20, w26 ++ beq .L2844 ++ mov w1, 0 ++ mov w0, w20 ++ bl ftl_erase_sblk ++ add x1, x19, 16 ++ mov w0, w20 ++ bl ftl_get_blk_list_in_sblk ++ strh w20, [x19] ++ add x2, x24, :lo12:.LANCHOR3 ++ and w0, w0, 255 ++ strb w0, [x19, 9] ++ cmp w23, 2 ++ strh wzr, [x19, 2] ++ ldrh w1, [x2, 1376] ++ strb wzr, [x19, 5] ++ strh wzr, [x19, 10] ++ strb w23, [x19, 4] ++ mul w0, w1, w0 ++ strh w0, [x19, 6] ++ beq .L2847 ++ ldrb w0, [x2, 1321] ++ mul w0, w1, w0 ++ and w0, w0, 65535 ++.L2845: ++ ldrb w2, [x25, 1321] ++ ubfiz x26, x20, 1, 16 ++ ldr x3, [x25, 1928] ++ strh w0, [x19, 12] ++ mul w2, w2, w1 ++ add x0, x3, w0, uxth 2 ++ mov w1, 255 ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldr x0, [x21, 1120] ++ ldrh w1, [x19, 6] ++ strh w1, [x0, x26] ++ ldrb w0, [x19, 9] ++ cbnz w0, .L2842 ++ mov w1, w20 ++ mov x0, x22 ++ bl printk ++ ldr x0, [x21, 1120] ++ mov w1, -1 ++ strh w1, [x0, x26] ++ mov w0, 7 ++ strb w0, [x19, 4] ++ b .L2843 ++.L2847: ++ mov w0, 0 ++ b .L2845 ++.L2842: ++ 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 ftl_open_sblk_init, .-ftl_open_sblk_init ++ .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 ++ add x0, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ adrp x22, .LANCHOR3 ++ add x2, x22, :lo12:.LANCHOR3 ++ ldr x1, [x0, 3384] ++ ldrb w2, [x2, 1321] ++ ldrh w0, [x1, 690] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ strh w0, [x1, 690] ++ cmp w2, w0 ++ bls .L2851 ++ add x0, x1, w0, sxtw 1 ++ ldrh w1, [x0, 672] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2852 ++.L2851: ++ adrp x23, .LC203 ++ add x20, x19, :lo12:.LANCHOR0 ++ add x23, x23, :lo12:.LC203 ++ mov w24, 65535 ++.L2853: ++ mov w0, 1 ++ bl ftl_alloc_sblk ++ and w21, w0, 65535 ++ cmp w21, w24 ++ beq .L2853 ++ mov w1, 0 ++ mov w0, w21 ++ bl ftl_erase_sblk ++ ldr x1, [x20, 3384] ++ mov w0, w21 ++ add x1, x1, 672 ++ bl ftl_get_blk_list_in_sblk ++ tst w0, 65535 ++ bne .L2854 ++ mov w1, w21 ++ mov x0, x23 ++ bl printk ++ ldr x0, [x20, 1104] ++ add x21, x0, w21, uxth 2 ++ ldrb w0, [x21, 2] ++ orr w0, w0, -32 ++ strb w0, [x21, 2] ++ b .L2853 ++.L2854: ++ ldr x0, [x20, 3384] ++ adrp x1, .LANCHOR5+424 ++ mov w2, 1 ++ mov w20, 0 ++ add x0, x0, 416 ++ str w2, [x1, #:lo12:.LANCHOR5+424] ++ mov w1, 65535 ++ strh wzr, [x0, 274] ++.L2856: ++ ldrh w2, [x0] ++ cmp w2, w1 ++ beq .L2855 ++ add w20, w20, 1 ++ add x0, x0, 2 ++ and w20, w20, 65535 ++ cmp w20, 128 ++ bne .L2856 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 672 ++ mov w2, 264 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2855: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3384] ++ add x20, x0, w20, sxtw 1 ++ strh w21, [x20, 416] ++ ldrh w1, [x0, 688] ++ add w1, w1, 1 ++ strh w1, [x0, 688] ++.L2852: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x1, [x0, 3384] ++ ldrh w0, [x1, 690] ++ add x0, x0, 336 ++ ldrh w20, [x1, x0, lsl 1] ++ mov w0, 65533 ++ sub w1, w20, #1 ++ cmp w0, w1, uxth ++ bcs .L2858 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 672 ++ mov w2, 270 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2858: ++ add x19, x19, :lo12:.LANCHOR0 ++ add x22, x22, :lo12:.LANCHOR3 ++ mov w2, 24 ++ ldrb w1, [x19, 1205] ++ ldr x0, [x19, 3384] ++ sub w2, w2, w1 ++ ldrh w1, [x22, 1304] ++ sub w2, w2, w1 ++ strh wzr, [x0, 696] ++ asr w4, w20, w2 ++ strh w20, [x0, 692] ++ strh w4, [x0, 694] ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2861 ++ mov w0, 1 ++ and w4, w4, 65535 ++ lsl w2, w0, w2 ++ mov w3, w20 ++ adrp x0, .LC204 ++ sub w2, w2, #1 ++ mov w1, w20 ++ add x0, x0, :lo12:.LC204 ++ bl printk ++.L2861: ++ 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 pm_alloc_new_blk, .-pm_alloc_new_blk ++ .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] ++ mov w21, w0 ++ stp x23, x24, [sp, 48] ++ mov x24, x1 ++ stp x25, x26, [sp, 64] ++ adrp x25, .LANCHOR0 ++ adrp x26, .LANCHOR3 ++ add x22, x25, :lo12:.LANCHOR0 ++ add x23, x26, :lo12:.LANCHOR3 ++ stp x19, x20, [sp, 16] ++ stp x27, x28, [sp, 80] ++.L2869: ++ add x0, x25, :lo12:.LANCHOR0 ++ ldr x0, [x0, 3384] ++ ldr w1, [x0, 48] ++ ldrh w2, [x0, 696] ++ add w1, w1, 1 ++ str w1, [x0, 48] ++ add x1, x26, :lo12:.LANCHOR3 ++ ldrh w1, [x1, 1376] ++ cmp w2, w1 ++ bcs .L2870 ++ ldrh w1, [x0, 692] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2871 ++.L2870: ++ bl pm_alloc_new_blk ++ mov w0, 0 ++ bl ftl_info_flush ++.L2871: ++ ldr x0, [x22, 3384] ++ ldrh w1, [x0, 692] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L2872 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 696 ++ mov w2, 303 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L2872: ++ ldr x0, [x22, 3384] ++ adrp x19, .LANCHOR5 ++ ldrh w1, [x23, 1410] ++ add x20, x19, :lo12:.LANCHOR5 ++ mov w2, 64 ++ ldrh w27, [x0, 692] ++ ldrh w0, [x0, 696] ++ madd w27, w27, w1, w0 ++ ldr x0, [x20, 432] ++ mov w1, 0 ++ bl ftl_memset ++ ldr x0, [x20, 432] ++ str w21, [x0] ++ ldr x1, [x22, 3384] ++ ldr x0, [x20, 432] ++ ldr w1, [x1, 48] ++ str w1, [x0, 4] ++ mov x0, x24 ++ ldrb w1, [x23, 1946] ++ ldr x28, [x20, 432] ++ lsl w1, w1, 9 ++ bl js_hash ++ ldrb w4, [x23, 1946] ++ mov x2, x24 ++ str w0, [x28, 8] ++ mov w1, w27 ++ ldr x0, [x22, 3384] ++ ldr x3, [x20, 432] ++ ldrb w0, [x0, 694] ++ bl ftl_prog_page ++ ldr x2, [x22, 3384] ++ ldrh w1, [x2, 696] ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ strh w1, [x2, 696] ++ cmp w1, 1 ++ beq .L2873 ++ ldrb w1, [x20, 440] ++ cbz w1, .L2874 ++.L2873: ++ add x19, x19, :lo12:.LANCHOR5 ++ strb wzr, [x19, 440] ++ b .L2869 ++.L2874: ++ cmn w0, #1 ++ bne .L2876 ++ mov w1, w27 ++ adrp x0, .LC205 ++ add x0, x0, :lo12:.LC205 ++ bl printk ++ b .L2869 ++.L2876: ++ ldrh w0, [x2, 698] ++ cmp w21, w0 ++ bcs .L2877 ++ add x21, x2, w21, uxtw 2 ++ str w27, [x21, 704] ++.L2877: ++ 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, -80]! ++ adrp x0, .LANCHOR2 ++ add x29, sp, 0 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ tbz x0, 12, .L2883 ++ adrp x2, .LANCHOR4 ++ add x2, x2, :lo12:.LANCHOR4 ++ adrp x0, .LC135 ++ add x2, x2, 712 ++ mov w1, 365 ++ add x0, x0, :lo12:.LC135 ++ bl printk ++.L2883: ++ adrp x19, .LANCHOR5 ++ add x19, x19, :lo12:.LANCHOR5 ++ adrp x20, .LANCHOR0 ++ add x22, x20, :lo12:.LANCHOR0 ++ mov w2, 64 ++ mov w1, 0 ++ ldr x0, [x19, 448] ++ adrp x23, .LC207 ++ mov w25, 21321 ++ add x23, x23, :lo12:.LC207 ++ mov w24, 0 ++ movk w25, 0x5359, lsl 16 ++ bl ftl_memset ++ ldr x1, [x22, 1048] ++ mov w3, 16 ++ mov w2, 4 ++ adrp x0, .LC206 ++ add x0, x0, :lo12:.LC206 ++ bl rknand_print_hex ++ ldr x21, [x22, 1048] ++ add x0, x21, 16 ++ ldr w1, [x21, 8] ++ bl js_hash ++ str w0, [x21, 12] ++.L2884: ++ ldrb w26, [x19, 456] ++ mov x0, x23 ++ ldrh w21, [x19, 458] ++ mov w1, w26 ++ ldrh w20, [x22, 2] ++ mov w2, w21 ++ bl printk ++ ldrh w0, [x19, 172] ++ ldrh w1, [x19, 458] ++ sub w0, w0, #1 ++ cmp w1, w0 ++ blt .L2885 ++ ldr x1, [x22, 1048] ++ strh wzr, [x19, 458] ++ ldr w0, [x1, 4] ++ add w0, w0, 1 ++ str w0, [x1, 4] ++ ldrb w0, [x19, 456] ++ ldr x21, [x22, 1048] ++ ldrb w1, [x19, 457] ++ strb w0, [x19, 457] ++ mov x0, x21 ++ strb w1, [x19, 456] ++ ldrh w1, [x21, 16] ++ add w1, w1, 1 ++ strh w1, [x0, 16]! ++ ldr w1, [x21, 8] ++ bl js_hash ++ ldrb w20, [x19, 456] ++ str w0, [x21, 12] ++ ldrh w0, [x22, 2] ++ mul w20, w20, w0 ++.L2894: ++ mov w1, w20 ++ mov w0, 0 ++ bl flash_erase_block ++ b .L2886 ++.L2889: ++ mov w24, 1 ++ b .L2884 ++.L2885: ++ madd w20, w20, w26, w21 ++ cbz w1, .L2894 ++.L2886: ++ ldr x1, [x22, 1048] ++ mov w5, 1 ++ ldr x0, [x19, 448] ++ mov w4, 4 ++ ldr w1, [x1, 4] ++ str w1, [x0] ++ mov w1, w20 ++ ldr x0, [x19, 448] ++ str w25, [x0, 4] ++ mov w0, 0 ++ ldr x3, [x19, 448] ++ ldr x2, [x22, 1048] ++ bl flash_prog_page_en ++ cmn w0, #1 ++ ldrh w1, [x19, 458] ++ add w1, w1, 1 ++ strh w1, [x19, 458] ++ bne .L2887 ++ mov w1, w20 ++ adrp x0, .LC208 ++ add x0, x0, :lo12:.LC208 ++ bl printk ++ b .L2884 ++.L2887: ++ cbz w24, .L2889 ++ 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 flash_info_flush, .-flash_info_flush ++ .align 2 ++ .global flash_info_blk_init ++ .type flash_info_blk_init, %function ++flash_info_blk_init: ++ stp x29, x30, [sp, -80]! ++ adrp x0, .LANCHOR2 ++ add x29, sp, 0 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ tbz x0, 12, .L2896 ++ add x0, x22, :lo12:.LANCHOR0 ++ adrp x2, .LANCHOR4 ++ add x2, x2, :lo12:.LANCHOR4 ++ mov w3, 2048 ++ add x2, x2, 736 ++ mov w1, 50 ++ ldr x4, [x0, 1048] ++ adrp x0, .LC209 ++ add x0, x0, :lo12:.LC209 ++ bl printk ++.L2896: ++ adrp x20, .LANCHOR5 ++ mov w25, 21321 ++ add x21, x20, :lo12:.LANCHOR5 ++ add x19, x22, :lo12:.LANCHOR0 ++ mov w24, 4 ++ movk w25, 0x5359, lsl 16 ++.L2900: ++ mov w23, 0 ++.L2899: ++ ldrh w1, [x19, 2] ++ mov w4, 4 ++ ldr x2, [x19, 1048] ++ mov w0, 0 ++ ldr x3, [x21, 448] ++ madd w1, w1, w24, w23 ++ bl flash_read_page_en ++ cmn w0, #1 ++ beq .L2897 ++ ldr x2, [x19, 1048] ++ ldr w0, [x2] ++ cmp w0, w25 ++ beq .L2898 ++.L2897: ++ add w23, w23, 1 ++ cmp w23, 4 ++ bne .L2899 ++ add w24, w24, 1 ++ cmp w24, 16 ++ bne .L2900 ++.L2926: ++ mov w0, -1 ++.L2895: ++ 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 ++.L2908: ++ ldr x0, [x19, 1048] ++ ldr w1, [x0] ++ cmp w1, w25 ++ bne .L2909 ++ ldr w21, [x0, 4] ++.L2902: ++ add x19, x20, :lo12:.LANCHOR5 ++ add x23, x22, :lo12:.LANCHOR0 ++ mov w4, 4 ++ ldrh w0, [x23, 2] ++ ldrb w1, [x19, 457] ++ ldr x3, [x19, 448] ++ ldr x2, [x23, 1048] ++ mul w1, w1, w0 ++ mov w0, 0 ++ bl flash_read_page_en ++ cmn w0, #1 ++ beq .L2903 ++ ldr x0, [x23, 1048] ++ mov w1, 21321 ++ movk w1, 0x5359, lsl 16 ++ ldr w2, [x0] ++ cmp w2, w1 ++ bne .L2903 ++ ldr w1, [x0, 4] ++ cmp w21, w1 ++ bcs .L2903 ++ ldrb w1, [x0, 37] ++ ldrb w0, [x0, 36] ++ strb w1, [x19, 456] ++ strb w0, [x19, 457] ++.L2903: ++ add x21, x20, :lo12:.LANCHOR5 ++ add x19, x22, :lo12:.LANCHOR0 ++ mov w4, 4 ++ mov w0, 0 ++ mov w26, 21321 ++ mov x20, x19 ++ ldrb w1, [x21, 456] ++ mov w23, 0 ++ ldr x2, [x19, 1048] ++ movk w26, 0x5359, lsl 16 ++ ldr x3, [x21, 448] ++ bl flash_get_last_written_page ++ and w25, w0, 65535 ++ add w1, w25, 1 ++ ldrb w24, [x21, 456] ++ strh w1, [x21, 458] ++ ldrh w1, [x19, 2] ++ mul w24, w24, w1 ++ add w24, w24, w0, sxth ++.L2904: ++ sub w0, w25, w23 ++ sxth w19, w0 ++ tbz w19, #31, .L2907 ++ cmn w19, #1 ++ bne .L2906 ++ add x22, x22, :lo12:.LANCHOR0 ++ ldr x0, [x22, 1048] ++ ldr w1, [x0] ++ adrp x0, .LC210 ++ add x0, x0, :lo12:.LC210 ++ bl printk ++ b .L2926 ++.L2907: ++ ldr x2, [x20, 1048] ++ mov w4, 4 ++ ldr x3, [x21, 448] ++ sub w1, w24, w23 ++ mov w0, 0 ++ bl flash_read_page_en ++ cmn w0, #1 ++ beq .L2905 ++ ldr x0, [x20, 1048] ++ ldr w0, [x0] ++ cmp w0, w26 ++ beq .L2906 ++.L2905: ++ add w23, w23, 1 ++ b .L2904 ++.L2906: ++ cmp w23, 1 ++ bls .L2910 ++ bl flash_info_flush ++.L2910: ++ mov w0, 0 ++ b .L2895 ++.L2898: ++ ldrb w1, [x2, 37] ++ mov w4, 4 ++ ldrb w0, [x2, 36] ++ strb w1, [x21, 457] ++ ldrh w1, [x19, 2] ++ ldr x3, [x21, 448] ++ strb w0, [x21, 456] ++ mul w1, w1, w0 ++ mov w0, 0 ++ bl flash_read_page_en ++ cmn w0, #1 ++ bne .L2908 ++.L2909: ++ mov w21, 0 ++ b .L2902 ++ .size flash_info_blk_init, .-flash_info_blk_init ++ .align 2 ++ .global nand_flash_init ++ .type nand_flash_init, %function ++nand_flash_init: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR2 ++ mov x19, x0 ++ stp x21, x22, [sp, 32] ++ ldr w0, [x20, #:lo12:.LANCHOR2] ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ tbz x0, 12, .L2928 ++ adrp x2, .LANCHOR4 ++ add x2, x2, :lo12:.LANCHOR4 ++ adrp x0, .LC135 ++ add x2, x2, 760 ++ mov w1, 3450 ++ add x0, x0, :lo12:.LC135 ++ bl printk ++.L2928: ++ adrp x21, .LANCHOR5 ++ add x23, x21, :lo12:.LANCHOR5 ++ mov x0, x19 ++ adrp x19, .LANCHOR0 ++ add x22, x19, :lo12:.LANCHOR0 ++ mov w25, 44 ++ str wzr, [x23, 332] ++ bl nandc_init ++ add x0, x20, :lo12:.LANCHOR2 ++ mov w2, 8 ++ add x0, x0, 8 ++ str x0, [x22, 1144] ++ mov w0, 1 ++ strb w0, [x22, 1153] ++ mov w0, 3 ++ strb w0, [x22, 1205] ++ add x0, x22, 1196 ++ add x22, x22, 1216 ++ mov w1, 0 ++ mov x24, x22 ++ bl ftl_memset ++ add x0, x23, 176 ++ mov w23, 0 ++ mov w2, 32 ++ mov w1, 0 ++ bl ftl_memset ++.L2934: ++ mov x1, x22 ++ mov w0, w23 ++ bl flash_read_id ++ cbnz w23, .L2929 ++ ldrb w0, [x24] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 253 ++ bls .L2930 ++.L2932: ++ mov w22, -2 ++.L2927: ++ 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 ++.L2930: ++ ldrb w0, [x24, 1] ++ cmp w0, 255 ++ beq .L2932 ++.L2929: ++ ldrb w0, [x22] ++ cmp w0, 181 ++ bne .L2933 ++ strb w25, [x22] ++.L2933: ++ add w23, w23, 1 ++ add x22, x22, 8 ++ and w23, w23, 255 ++ cmp w23, 4 ++ bne .L2934 ++ add x7, x20, :lo12:.LANCHOR2 ++ add x9, x19, :lo12:.LANCHOR0 ++ add x7, x7, 441 ++ add x9, x9, 1216 ++ mov x8, 0 ++.L2937: ++ ldrb w2, [x7, -1] ++ mov w10, w8 ++ lsl x24, x8, 5 ++ mov x1, x9 ++ mov x0, x7 ++ bl flash_mem_cmp8 ++ cbnz w0, .L2935 ++ add x2, x20, :lo12:.LANCHOR2 ++ ubfiz x10, x10, 5, 32 ++ add x0, x2, 440 ++ add x1, x2, 2008 ++ add x24, x0, x24 ++ add x0, x0, x10 ++ ldrb w3, [x0, 22] ++ mov x0, 0 ++.L2936: ++ lsl x4, x0, 5 ++ mov w2, w0 ++ ldrb w4, [x4, x1] ++ cmp w4, w3 ++ beq .L2938 ++ add x0, x0, 1 ++ cmp x0, 4 ++ bne .L2936 ++ mov w2, w0 ++.L2938: ++ add x22, x20, :lo12:.LANCHOR2 ++ ubfiz x1, x2, 5, 32 ++ add x0, x22, 2008 ++ add x23, x19, :lo12:.LANCHOR0 ++ add x1, x0, x1 ++ mov w2, 32 ++ add x0, x23, 1160 ++ add x22, x22, 8 ++ bl ftl_memcpy ++ mov w2, 32 ++ mov x1, x24 ++ mov x0, x22 ++ bl ftl_memcpy ++ ldrb w0, [x23, 1028] ++ cmp w0, 8 ++ bhi .L2939 ++ ldrb w1, [x22, 20] ++ cmp w1, 60 ++ bls .L2940 ++ mov w1, 60 ++ strb w1, [x22, 20] ++.L2940: ++ cmp w0, 6 ++ beq .L2932 ++.L2939: ++ ldr w0, [x20, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2941 ++ adrp x2, .LANCHOR4 ++ add x2, x2, :lo12:.LANCHOR4 ++ adrp x0, .LC135 ++ add x2, x2, 760 ++ mov w1, 3480 ++ add x0, x0, :lo12:.LC135 ++ bl printk ++.L2941: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x1, [x0, 1144] ++ ldrh w1, [x1, 10] ++ cmp w1, 1023 ++ bls .L2942 ++ mov w1, 2 ++ strb w1, [x0, 1205] ++.L2942: ++ add x23, x21, :lo12:.LANCHOR5 ++ add x22, x19, :lo12:.LANCHOR0 ++ mov w0, 16384 ++ bl ftl_malloc ++ add x24, x20, :lo12:.LANCHOR2 ++ str x0, [x23, 352] ++ mov w0, 16384 ++ bl ftl_malloc ++ str x0, [x23, 304] ++ mov w0, 2048 ++ bl ftl_dma32_malloc ++ str x0, [x22, 1048] ++ mov w0, 64 ++ bl ftl_dma32_malloc ++ str x0, [x23, 344] ++ mov w0, 64 ++ bl ftl_dma32_malloc ++ str x0, [x23, 320] ++ mov w0, 64 ++ bl ftl_dma32_malloc ++ strb wzr, [x23, 460] ++ str x0, [x23, 448] ++ bl flash_die_info_init ++ ldrb w0, [x24, 26] ++ bl flash_lsb_page_tbl_build ++ ldrb w0, [x24, 28] ++ bl nandc_bch_sel ++ str xzr, [x23, 336] ++ ldr x3, [x22, 1144] ++ adrp x2, .LANCHOR3 ++ add x2, x2, :lo12:.LANCHOR3 ++ ldrh w0, [x3, 16] ++ ubfx x1, x0, 8, 3 ++ strb w1, [x22, 1248] ++ ubfx x1, x0, 3, 1 ++ strb w1, [x23, 368] ++ ubfx x1, x0, 4, 1 ++ strb w1, [x22, 1250] ++ ubfx x1, x0, 12, 1 ++ strb w1, [x2, 1336] ++ ubfx x1, x0, 13, 1 ++ strb w1, [x2, 1322] ++ ubfx x1, x0, 11, 1 ++ strb w1, [x22, 1212] ++ ldrb w1, [x3, 31] ++ ubfx x4, x1, 1, 1 ++ strb w4, [x2, 1950] ++ ubfx x4, x1, 2, 1 ++ strb w4, [x23, 461] ++ ubfx x4, x0, 14, 1 ++ lsr w0, w0, 15 ++ strb w0, [x2, 1323] ++ ubfx x2, x1, 3, 1 ++ ldrb w0, [x3, 28] ++ ubfx x1, x1, 4, 1 ++ strb w2, [x22, 1204] ++ strb w1, [x22, 1213] ++ mov w1, 60 ++ ldrb w2, [x22, 1028] ++ strb w4, [x22, 1] ++ strb w0, [x19, #:lo12:.LANCHOR0] ++ cmp w2, 9 ++ strb w1, [x22, 1152] ++ bne .L2943 ++ mov w1, 70 ++ strb w1, [x22, 1152] ++.L2943: ++ add x1, x19, :lo12:.LANCHOR0 ++ strb w0, [x1, 1154] ++ add x0, x20, :lo12:.LANCHOR2 ++ add x0, x0, 8 ++ ldrb w3, [x0, 31] ++ tbz x3, 0, .L2944 ++ ldrb w0, [x0, 29] ++ cbz w0, .L2945 ++ mov w0, 2 ++.L3007: ++ strb w0, [x1, 1154] ++.L2944: ++ cmp w2, 8 ++ bne .L2946 ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w2, 137 ++ ldrb w1, [x0, 1216] ++ cmp w1, 44 ++ ccmp w1, w2, 4, ne ++ bne .L2946 ++ add x1, x20, :lo12:.LANCHOR2 ++ ldrb w1, [x1, 36] ++ cmp w1, 3 ++ bne .L2946 ++ strb wzr, [x0, 1154] ++.L2946: ++ add x1, x20, :lo12:.LANCHOR2 ++ add x2, x19, :lo12:.LANCHOR0 ++ add x1, x1, 8 ++ ldrb w0, [x1, 19] ++ ldrh w1, [x1, 16] ++ strb w0, [x2, 1136] ++ tbz x1, 6, .L2948 ++ sub w1, w0, #17 ++ and w1, w1, 255 ++ cmp w1, 2 ++ ccmp w0, 21, 4, hi ++ bne .L2949 ++ add x1, x21, :lo12:.LANCHOR5 ++ adrp x2, micron_read_retrial ++ add x2, x2, :lo12:micron_read_retrial ++ cmp w0, 21 ++ str x2, [x1, 336] ++ beq .L2950 ++ mov w0, 15 ++.L3009: ++ strb w0, [x1, 328] ++.L2948: ++ ldr w0, [x20, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2959 ++ adrp x2, .LANCHOR4 ++ add x2, x2, :lo12:.LANCHOR4 ++ adrp x0, .LC135 ++ add x2, x2, 760 ++ mov w1, 3573 ++ add x0, x0, :lo12:.LC135 ++ bl printk ++.L2959: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1248] ++ strb wzr, [x0, 1192] ++ tbz x1, 0, .L2960 ++ ldrb w0, [x0, 1216] ++ cmp w0, 155 ++ beq .L2961 ++ mov w0, 4 ++ bl flash_set_interface_mode ++ mov w0, 4 ++ bl nandc_set_if_mode ++.L2961: ++ mov w0, 1 ++ bl flash_set_interface_mode ++ mov w0, 1 ++.L3012: ++ bl nandc_set_if_mode ++ bl flash_info_blk_init ++ mov w22, w0 ++ cmn w0, #1 ++ bne .L2963 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, 17 ++ ldr x0, [x19, 1048] ++ strb wzr, [x19, 1208] ++ strb w1, [x0, 32] ++ mov w0, 0 ++ bl zftl_flash_exit_slc_mode ++ b .L2927 ++.L2935: ++ add x8, x8, 1 ++ add x7, x7, 32 ++ cmp x8, 49 ++ bne .L2937 ++ b .L2932 ++.L2945: ++ mov w0, 3 ++ b .L3007 ++.L2950: ++ mov w0, 4 ++ b .L3009 ++.L2949: ++ sub w1, w0, #65 ++ cmp w0, 33 ++ and w1, w1, 255 ++ ccmp w1, 1, 0, ne ++ bhi .L2952 ++ add x0, x21, :lo12:.LANCHOR5 ++ adrp x1, toshiba_read_retrial ++ add x1, x1, :lo12:toshiba_read_retrial ++ str x1, [x0, 336] ++ mov w1, 4 ++ strb w1, [x2, 1137] ++.L3013: ++ mov w1, 7 ++.L3011: ++ strb w1, [x0, 328] ++ b .L2948 ++.L2952: ++ sub w3, w0, #34 ++ sub w1, w0, #67 ++ and w3, w3, 255 ++ and w1, w1, 255 ++ cmp w3, 1 ++ ccmp w1, 1, 0, hi ++ bhi .L2953 ++ add x2, x21, :lo12:.LANCHOR5 ++ adrp x3, toshiba_read_retrial ++ add x3, x3, :lo12:toshiba_read_retrial ++ cmp w0, 35 ++ str x3, [x2, 336] ++ mov w3, 68 ++ ccmp w0, w3, 4, ne ++ beq .L2954 ++ mov w0, 7 ++.L3008: ++ strb w0, [x2, 328] ++ cmp w1, 1 ++ add x0, x19, :lo12:.LANCHOR0 ++ bhi .L2956 ++ mov w1, 4 ++.L3010: ++ strb w1, [x0, 1137] ++ b .L2948 ++.L2954: ++ mov w0, 17 ++ b .L3008 ++.L2956: ++ mov w1, 5 ++ b .L3010 ++.L2953: ++ sub w1, w0, #36 ++ and w1, w1, 255 ++ cmp w1, 1 ++ bhi .L2957 ++ add x0, x21, :lo12:.LANCHOR5 ++ adrp x1, toshiba_3d_read_retrial ++ add x1, x1, :lo12:toshiba_3d_read_retrial ++ str x1, [x0, 336] ++ b .L3013 ++.L2957: ++ cmp w0, 50 ++ bne .L2958 ++ add x0, x21, :lo12:.LANCHOR5 ++ adrp x1, samsung_read_retrial ++ add x1, x1, :lo12:samsung_read_retrial ++ str x1, [x0, 336] ++ mov w1, 25 ++ b .L3011 ++.L2958: ++ cmp w0, 81 ++ bne .L2948 ++ add x0, x21, :lo12:.LANCHOR5 ++ adrp x1, ymtc_3d_read_retrial ++ add x1, x1, :lo12:ymtc_3d_read_retrial ++ strb wzr, [x2, 1251] ++ str x1, [x0, 336] ++ mov w1, 7 ++ strb w1, [x0, 328] ++ b .L2948 ++.L2960: ++ mov w0, 4 ++ b .L3012 ++.L2963: ++ add x0, x20, :lo12:.LANCHOR2 ++ ldrb w0, [x0, 15] ++ cmp w0, 9 ++ bne .L2964 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x1, [x0, 1048] ++ ldrb w1, [x1, 20] ++ cmp w1, 1 ++ beq .L2964 ++ strb wzr, [x0, 1154] ++.L2964: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1136] ++ sub w0, w0, #1 ++ and w0, w0, 255 ++ cmp w0, 7 ++ bhi .L2965 ++ add x0, x21, :lo12:.LANCHOR5 ++ adrp x1, hynix_read_retrial ++ add x1, x1, :lo12:hynix_read_retrial ++ str x1, [x0, 336] ++.L2965: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x19, 1248] ++ tbz x0, 2, .L2967 ++ ldr x0, [x19, 1048] ++ ldrb w0, [x0, 19] ++ cbz w0, .L2967 ++ add x21, x21, :lo12:.LANCHOR5 ++ ldrh w0, [x19, 2] ++ ldrb w1, [x21, 456] ++ mul w1, w1, w0 ++ mov w0, 0 ++ bl flash_ddr_para_scan ++ ldrb w0, [x19, 1192] ++ cbnz w0, .L2967 ++ ldr x0, [x19, 1048] ++ strb wzr, [x0, 19] ++ bl flash_info_flush ++.L2967: ++ ldr w0, [x20, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L2969 ++ adrp x2, .LANCHOR4 ++ add x2, x2, :lo12:.LANCHOR4 ++ adrp x0, .LC135 ++ add x2, x2, 760 ++ mov w1, 3676 ++ add x0, x0, :lo12:.LC135 ++ bl printk ++.L2969: ++ bl nand_flash_print_info ++ mov w22, 0 ++ b .L2927 ++ .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 x19, x20, [sp, 64] ++ mov w20, 0 ++ stp x25, x26, [sp, 112] ++ adrp x26, .LANCHOR3 ++ stp x27, x28, [sp, 128] ++ add x26, x26, :lo12:.LANCHOR3 ++ stp x21, x22, [sp, 80] ++ adrp x22, .LC195 ++ stp x23, x24, [sp, 96] ++ and w24, w0, 65535 ++ mov w0, 1 ++ bl buf_alloc ++ ldr x27, [x0, 8] ++ mov x25, x0 ++ add x22, x22, :lo12:.LC195 ++ mov w19, 0 ++ mov w28, 1 ++.L3015: ++ ldrh w0, [x26, 1376] ++ cmp w0, w19 ++ bhi .L3017 ++ add x1, x27, 704 ++ mov w3, 32 ++ mov w2, 4 ++ adrp x0, .LC211 ++ add x0, x0, :lo12:.LC211 ++ bl rknand_print_hex ++ mov x0, x25 ++ bl zbuf_free ++ cbz w20, .L3018 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 776 ++ mov w2, 1619 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3018: ++ mov w0, w20 ++ 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 ++.L3017: ++ ldrh w21, [x26, 1410] ++ ldrb w3, [x26, 1946] ++ ldr x1, [x25, 8] ++ ldr x2, [x25, 24] ++ madd w21, w21, w24, w19 ++ mov w0, w21 ++ bl ftl_read_ppa_page ++ mov w23, w0 ++ ldr x1, [x25, 24] ++ mov w4, w0 ++ ldr x0, [x25, 8] ++ mov w3, w21 ++ ldr w2, [x1, 12] ++ str w2, [sp, 32] ++ ldr w2, [x1, 8] ++ str w2, [sp, 24] ++ ldr w2, [x1, 4] ++ str w2, [sp, 16] ++ mov w2, w19 ++ add w19, w19, 1 ++ ldr w1, [x1] ++ and w19, w19, 65535 ++ str w1, [sp, 8] ++ ldr w1, [x0, 12] ++ str w1, [sp] ++ mov w1, w24 ++ ldp w5, w6, [x0] ++ ldr w7, [x0, 8] ++ mov x0, x22 ++ bl printk ++ cmp w23, 512 ++ ccmn w23, #1, 4, ne ++ csel w20, w20, w28, ne ++ b .L3015 ++ .size ftl_sysblk_dump, .-ftl_sysblk_dump ++ .align 2 ++ .global ftl_open_sblk_recovery ++ .type ftl_open_sblk_recovery, %function ++ftl_open_sblk_recovery: ++ stp x29, x30, [sp, -352]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR2 ++ stp x19, x20, [sp, 16] ++ mov x19, x0 ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ str x1, [x29, 112] ++ tbz x0, 12, .L3026 ++ ldrh w1, [x19, 2] ++ adrp x0, .LC212 ++ add x0, x0, :lo12:.LC212 ++ bl printk ++.L3026: ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L3027 ++ ldrb w1, [x19, 5] ++ adrp x0, .LC213 ++ add x0, x0, :lo12:.LC213 ++ bl printk ++.L3027: ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L3028 ++ ldrh w1, [x19] ++ adrp x0, .LC214 ++ add x0, x0, :lo12:.LC214 ++ bl printk ++.L3028: ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L3029 ++ ldrh w2, [x19, 18] ++ adrp x0, .LC215 ++ ldrh w1, [x19, 16] ++ add x0, x0, :lo12:.LC215 ++ bl printk ++.L3029: ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L3030 ++ ldrb w1, [x19, 9] ++ adrp x0, .LC216 ++ add x0, x0, :lo12:.LC216 ++ bl printk ++.L3030: ++ ldrh w0, [x19, 10] ++ adrp x24, .LANCHOR0 ++ strh w0, [x19, 14] ++ add x0, x24, :lo12:.LANCHOR0 ++ ldrh w1, [x19] ++ ldrh w0, [x0, 1096] ++ cmp w1, w0 ++ bcs .L3025 ++ mov w0, 1 ++ bl buf_alloc ++ adrp x20, .LANCHOR3 ++ mov x27, x0 ++ add x0, x20, :lo12:.LANCHOR3 ++ add x25, x29, 160 ++ mov w2, 64 ++ add x28, x29, 288 ++ ldr x1, [x27, 8] ++ ldrb w0, [x0, 1946] ++ sub w0, w0, #2 ++ sbfiz x0, x0, 9, 32 ++ add x0, x1, x0 ++ mov w1, 255 ++ str x0, [x29, 144] ++ mov x0, x25 ++ bl ftl_memset ++ mov w2, 64 ++ mov w1, 255 ++ add x0, x29, 224 ++ bl ftl_memset ++ mov w2, 64 ++ mov w1, 255 ++ mov x0, x28 ++ bl ftl_memset ++ ldrb w22, [x19, 5] ++ mov w0, 2 ++ ldrh w23, [x19, 2] ++ str w0, [x29, 152] ++ adrp x0, .LANCHOR5 ++ str wzr, [x29, 120] ++ add x0, x0, :lo12:.LANCHOR5 ++ str x0, [x29, 104] ++.L3032: ++ add x0, x20, :lo12:.LANCHOR3 ++ ldrh w0, [x0, 1376] ++ cmp w0, w23 ++ bhi .L3049 ++.L3035: ++ add x2, x20, :lo12:.LANCHOR3 ++ ldrh w0, [x19, 10] ++ ldrh w1, [x19, 6] ++ strh w23, [x19, 2] ++ add w1, w1, w0 ++ ldrh w2, [x2, 1376] ++ ldrb w0, [x19, 9] ++ strb w22, [x19, 5] ++ mul w0, w0, w2 ++ cmp w1, w0 ++ beq .L3050 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 792 ++ mov w2, 1802 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3050: ++ add x0, x20, :lo12:.LANCHOR3 ++ ldrh w3, [x19, 10] ++ mov w1, 0 ++ ldr x4, [x0, 1928] ++ mov w0, 0 ++.L3051: ++ cmp w1, w3 ++ bcc .L3053 ++ add x1, x20, :lo12:.LANCHOR3 ++ ldrb w22, [x19, 9] ++ ldrh w1, [x1, 1376] ++ madd w22, w22, w1, w0 ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ sub w22, w22, w3 ++ and w22, w22, 65535 ++ tbz x0, 12, .L3054 ++ add x0, x24, :lo12:.LANCHOR0 ++ ldrh w1, [x19] ++ ldr x0, [x0, 1120] ++ ubfiz x2, x1, 1, 16 ++ ldrh w3, [x0, x2] ++ adrp x0, .LC219 ++ mov w2, w22 ++ add x0, x0, :lo12:.LC219 ++ bl printk ++.L3054: ++ add x0, x24, :lo12:.LANCHOR0 ++ ldrh w1, [x19] ++ ldr x0, [x0, 1120] ++ strh w22, [x0, x1, lsl 1] ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ tbz x0, 14, .L3055 ++ ldp w1, w2, [x29, 160] ++ adrp x0, .LC220 ++ ldp w3, w4, [x29, 168] ++ add x0, x0, :lo12:.LC220 ++ bl printk ++.L3055: ++ add x0, x20, :lo12:.LANCHOR3 ++ mov w1, 0 ++ mov x23, 0 ++ ldrb w2, [x0, 1946] ++ ldr x0, [x27, 8] ++ lsl w2, w2, 9 ++ bl ftl_memset ++ adrp x0, .LC221 ++ add x0, x0, :lo12:.LC221 ++ str x0, [x29, 128] ++ adrp x0, .LC222 ++ add x0, x0, :lo12:.LC222 ++ str x0, [x29, 112] ++.L3056: ++ add x1, x20, :lo12:.LANCHOR3 ++ ldr w2, [x29, 152] ++ str w23, [x29, 140] ++ ldrb w0, [x1, 1321] ++ mul w0, w0, w2 ++ cmp w23, w0 ++ bcc .L3068 ++ adrp x22, .LC223 ++ adrp x23, .LC222 ++ mov x20, x1 ++ add x22, x22, :lo12:.LC223 ++ add x23, x23, :lo12:.LC222 ++ mov x24, 0 ++.L3069: ++ ldrb w0, [x20, 1321] ++ ldr w1, [x29, 152] ++ mul w0, w0, w1 ++ cmp w0, w24 ++ bhi .L3075 ++ mov x0, x27 ++ bl zbuf_free ++ ldrh w1, [x19, 12] ++ ldrh w0, [x20, 1376] ++ ldrb w2, [x19, 9] ++ madd w0, w0, w2, w1 ++ mov x1, -4 ++ add x0, x1, w0, sxtw 2 ++ ldr x1, [x20, 1928] ++ ldr w0, [x1, x0] ++ cmn w0, #1 ++ beq .L3076 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 792 ++ mov w2, 1917 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3076: ++ ldrh w0, [x19, 6] ++ cmp w0, 1 ++ bne .L3025 ++ mov x0, x19 ++ bl ftl_write_last_log_page ++.L3025: ++ 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], 352 ++ ret ++.L3049: ++ ldrb w22, [x19, 5] ++.L3033: ++ ldrb w0, [x19, 9] ++ cmp w0, w22 ++ bhi .L3048 ++ add w23, w23, 1 ++ strb wzr, [x19, 5] ++ and w23, w23, 65535 ++ b .L3032 ++.L3048: ++ add x0, x19, w22, sxtw 1 ++ ldrh w0, [x0, 16] ++ str w0, [x29, 140] ++ mov w0, 65535 ++ ldr w1, [x29, 140] ++ cmp w1, w0 ++ beq .L3034 ++ add x0, x20, :lo12:.LANCHOR3 ++ ldr w2, [x29, 140] ++ ldrh w1, [x0, 1410] ++ ldrb w3, [x0, 1946] ++ madd w1, w1, w2, w23 ++ ldr x2, [x27, 24] ++ str w1, [x29, 128] ++ ldr x1, [x27, 8] ++ ldr w0, [x29, 128] ++ bl ftl_read_ppa_page ++ mov w26, w0 ++ cmp w0, 512 ++ beq .L3035 ++ cmn w0, #1 ++ beq .L3036 ++ ldr x0, [x27, 24] ++ ldr w1, [x0] ++ cmn w1, #1 ++ bne .L3036 ++ ldr w0, [x0, 4] ++ cmn w0, #1 ++ bne .L3036 ++ ldr x0, [x27, 8] ++ ldr w0, [x0] ++ cmn w0, #1 ++ beq .L3035 ++.L3036: ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ mov w1, 1 ++ strb w1, [x0, 401] ++ ldrb w0, [x19, 9] ++ ldrh w1, [x19, 10] ++ madd w0, w0, w23, w22 ++ cmp w1, w0 ++ beq .L3037 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 792 ++ mov w2, 1694 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3037: ++ ldrh w0, [x19, 10] ++ ldrh w1, [x19, 6] ++ ldrb w2, [x19, 9] ++ add w1, w1, w0 ++ add x0, x20, :lo12:.LANCHOR3 ++ ldrh w0, [x0, 1376] ++ mul w0, w0, w2 ++ cmp w1, w0 ++ beq .L3038 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 792 ++ mov w2, 1695 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3038: ++ add x0, x20, :lo12:.LANCHOR3 ++ str x0, [x29, 152] ++ ldrb w0, [x0, 1946] ++ cmp w0, 8 ++ bls .L3039 ++ ldr x0, [x27, 24] ++ mov w2, 15555 ++ movk w2, 0xf55f, lsl 16 ++ ldr w1, [x0] ++ cmp w1, w2 ++ beq .L3039 ++ cmn w26, #1 ++ beq .L3041 ++ ldr w1, [x0, 4] ++ cmn w1, #1 ++ bne .L3042 ++.L3045: ++ ldr x1, [x27, 24] ++ ldr w0, [x1, 4] ++ cmn w0, #1 ++ bne .L3043 ++.L3041: ++ ldrh w0, [x19, 6] ++ sub w0, w0, #1 ++ strh w0, [x19, 6] ++ ldrh w0, [x19, 10] ++ add w0, w0, 1 ++ strh w0, [x19, 10] ++ mov w0, 4 ++ str w0, [x29, 152] ++ mov w0, 1 ++ str w0, [x29, 120] ++.L3034: ++ add w22, w22, 1 ++ and w22, w22, 65535 ++ b .L3033 ++.L3042: ++ ldr w1, [x0, 16] ++ mov w2, 21320 ++ movk w2, 0x4841, lsl 16 ++ cmp w1, w2 ++ bne .L3045 ++ ldr w2, [x0, 20] ++ mov w1, 1024 ++ ldr x0, [x29, 144] ++ str w2, [x29, 152] ++ bl js_hash ++ ldr w2, [x29, 152] ++ cmp w2, w0 ++ beq .L3045 ++ ldr x0, [x29, 144] ++ mov w1, 1024 ++ bl js_hash ++ mov w5, w0 ++ ldr w3, [x29, 128] ++ mov w4, w26 ++ ldr w1, [x29, 140] ++ mov w2, w23 ++ adrp x0, .LC217 ++ add x0, x0, :lo12:.LC217 ++ bl printk ++ ldr x1, [x29, 144] ++ mov w3, 16 ++ mov w2, 4 ++ adrp x0, .LC218 ++ add x0, x0, :lo12:.LC218 ++ bl rknand_print_hex ++ add x0, x20, :lo12:.LANCHOR3 ++ ldr x1, [x27, 24] ++ mov w2, 4 ++ ldrb w0, [x0, 1946] ++ lsr w3, w0, 1 ++ adrp x0, .LC183 ++ add x0, x0, :lo12:.LC183 ++ bl rknand_print_hex ++ b .L3041 ++.L3039: ++ cmn w26, #1 ++ bne .L3045 ++ b .L3041 ++.L3043: ++ ldr w1, [x1] ++ mov w2, 15555 ++ movk w2, 0xf55f, lsl 16 ++ cmp w1, w2 ++ beq .L3041 ++ bl lpa_hash_get_ppa ++ ldr x1, [x29, 112] ++ cbz x1, .L3046 ++ ldr x3, [x27, 24] ++ ldr w1, [x3, 8] ++ cmp w0, w1 ++ beq .L3046 ++ cmn w0, #1 ++ beq .L3046 ++ add x7, x24, :lo12:.LANCHOR0 ++ add x4, x20, :lo12:.LANCHOR3 ++ mov w5, 24 ++ mov w26, 1 ++ ldrb w1, [x7, 1205] ++ ldrh w8, [x4, 1304] ++ sub w1, w5, w1 ++ sub w1, w1, w8 ++ lsr w2, w0, w8 ++ lsl w1, w26, w1 ++ sub w1, w1, #1 ++ and w1, w1, w2 ++ ldrb w2, [x4, 1306] ++ udiv w1, w1, w2 ++ ldr x2, [x29, 112] ++ ldrh w2, [x2] ++ cmp w2, w1, uxth ++ bne .L3046 ++ ldr x1, [x29, 104] ++ ldr w8, [x3] ++ ldrb w3, [x4, 1946] ++ stp w5, w8, [x29, 136] ++ ldr x2, [x1, 376] ++ ldr x1, [x27, 8] ++ str x7, [x29, 120] ++ str x4, [x29, 152] ++ bl ftl_read_ppa_page ++ ldr x0, [x29, 104] ++ ldr w8, [x29, 140] ++ ldr x0, [x0, 376] ++ ldr w0, [x0] ++ cmp w8, w0 ++ bhi .L3046 ++ ldr x0, [x27, 24] ++ ldr w3, [x0, 8] ++ cmn w3, #1 ++ beq .L3041 ++ ldr x7, [x29, 120] ++ ldr x4, [x29, 152] ++ ldr w5, [x29, 136] ++ ldrb w2, [x7, 1205] ++ ldrh w1, [x4, 1304] ++ sub w5, w5, w2 ++ sub w5, w5, w1 ++ lsr w0, w3, w1 ++ lsl w26, w26, w5 ++ sub w26, w26, #1 ++ and w26, w26, w0 ++ ldrb w0, [x4, 1306] ++ udiv w0, w26, w0 ++ bl ftl_vpn_decrement ++ b .L3041 ++.L3053: ++ ldrh w2, [x19, 12] ++ add w2, w2, w1 ++ ldr w2, [x4, x2, lsl 2] ++ cmn w2, #1 ++ beq .L3052 ++ add w22, w0, 1 ++ and w0, w22, 65535 ++.L3052: ++ add w1, w1, 1 ++ b .L3051 ++.L3068: ++ ldr w0, [x25, x23, lsl 2] ++ cmn w0, #1 ++ bne .L3057 ++.L3061: ++ add x1, x24, :lo12:.LANCHOR0 ++ ldr x0, [x27, 24] ++ mov w22, -1 ++ mov x2, 0 ++ ldr x1, [x1, 3384] ++ ldr w1, [x1, 8] ++ str w1, [x0] ++ ldr x0, [x27, 24] ++ str w22, [x0, 4] ++ ldr x0, [x27, 24] ++ str w22, [x0, 8] ++ ldr x0, [x27, 24] ++ str wzr, [x0, 12] ++ ldr x0, [x27, 24] ++ str wzr, [x0, 16] ++ ldr x0, [x27, 8] ++ str wzr, [x0] ++ mov w0, 2 ++ ldr x1, [x27, 24] ++ add x1, x1, 16 ++ bl ftl_debug_info_fill ++.L3058: ++ ldr w0, [x29, 120] ++ cbz w0, .L3063 ++ ldrh w0, [x19, 6] ++ cmp w0, 1 ++ bls .L3063 ++ add x0, x20, :lo12:.LANCHOR3 ++ str x0, [x29, 144] ++.L3122: ++ mov x0, x19 ++ bl ftl_get_new_free_page ++ mov w26, w0 ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ tbz x0, 14, .L3065 ++ ldrh w0, [x19, 12] ++ mov w1, w26 ++ ldrh w3, [x19, 10] ++ add w3, w3, w0 ++ ldr x0, [x27, 24] ++ sub w3, w3, #1 ++ ldr w2, [x0, 4] ++ ldr x0, [x29, 112] ++ bl printk ++.L3065: ++ ldr x0, [x29, 144] ++ ldr w2, [x29, 152] ++ ldrh w1, [x19, 6] ++ ldrb w0, [x0, 1321] ++ mul w0, w0, w2 ++ ldr w2, [x29, 140] ++ add w0, w0, 1 ++ sub w0, w0, w2 ++ cmp w1, w0 ++ bls .L3063 ++ ldr x0, [x29, 144] ++ ldr x1, [x27, 8] ++ ldr x2, [x27, 24] ++ ldrb w3, [x0, 1946] ++ mov w0, w26 ++ bl ftl_prog_ppa_page ++ mov w1, w0 ++ ldrh w0, [x19] ++ str w1, [x29, 104] ++ bl ftl_vpn_decrement ++ ldr w1, [x29, 104] ++ cmn w22, #1 ++ ccmn w1, #1, 4, ne ++ beq .L3066 ++ add x0, x29, 224 ++ ldrh w1, [x19, 12] ++ str w26, [x0, x23, lsl 2] ++ ldrh w0, [x19, 10] ++ add w0, w0, w1 ++ sub w0, w0, #1 ++ str w0, [x28, x23, lsl 2] ++.L3063: ++ add x23, x23, 1 ++ b .L3056 ++.L3057: ++ ldrb w3, [x1, 1946] ++ ldr x2, [x27, 24] ++ ldr x1, [x27, 8] ++ bl ftl_read_ppa_page ++ mov w22, w0 ++ ldr x0, [x27, 24] ++ ldr w0, [x0, 4] ++ bl lpa_hash_get_ppa ++ mov w26, w0 ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ tbz x0, 14, .L3059 ++ ldr x0, [x27, 24] ++ mov w1, w26 ++ ldr w2, [x25, x23, lsl 2] ++ ldr w3, [x0, 4] ++ ldr x0, [x29, 128] ++ bl printk ++.L3059: ++ ldr w0, [x25, x23, lsl 2] ++ mov w1, 1 ++ mov x2, 0 ++ cmp w26, w0 ++ ldr x0, [x27, 24] ++ csinv w22, w22, wzr, eq ++ str w26, [x0, 8] ++ ldr x0, [x27, 24] ++ str w1, [x0, 12] ++ ldr x0, [x27, 24] ++ str wzr, [x0, 16] ++ mov w0, 2 ++ ldr x1, [x27, 24] ++ add x1, x1, 16 ++ bl ftl_debug_info_fill ++ cmn w22, #1 ++ bne .L3058 ++ b .L3061 ++.L3066: ++ ldrh w0, [x19, 6] ++ cmp w0, 1 ++ bls .L3063 ++ cmn w22, #1 ++ bne .L3122 ++ b .L3063 ++.L3075: ++ add x0, x29, 224 ++ ldr w0, [x0, x24, lsl 2] ++ cmn w0, #1 ++ beq .L3071 ++ ldrb w3, [x20, 1946] ++ ldr w0, [x25, x24, lsl 2] ++ ldr x1, [x27, 8] ++ ldr x2, [x27, 24] ++ bl ftl_read_ppa_page ++ cmp w0, 256 ++ ccmn w0, #1, 4, ne ++ bne .L3071 ++ add x0, x29, 224 ++ ldrb w3, [x20, 1946] ++ ldr x1, [x27, 8] ++ ldr x2, [x27, 24] ++ ldr w0, [x0, x24, lsl 2] ++ bl ftl_read_ppa_page ++ mov w26, w0 ++ ldr w0, [x21, #:lo12:.LANCHOR2] ++ tbz x0, 14, .L3073 ++ ldr x0, [x27, 24] ++ mov w1, w26 ++ ldr w3, [x25, x24, lsl 2] ++ ldr w2, [x0, 8] ++ mov x0, x23 ++ bl printk ++.L3073: ++ cmn w26, #1 ++ beq .L3071 ++ ldr x0, [x27, 24] ++ ldr w2, [x25, x24, lsl 2] ++ ldr w1, [x0, 8] ++ cmp w2, w1 ++ bne .L3071 ++ ldr w1, [x21, #:lo12:.LANCHOR2] ++ tbz x1, 14, .L3074 ++ ldr w1, [x0, 4] ++ mov x0, x22 ++ ldr w3, [x28, x24, lsl 2] ++ bl printk ++.L3074: ++ ldr x0, [x27, 24] ++ lsl x1, x24, 2 ++ ldrh w2, [x28, x1] ++ ldr w1, [x0, 8] ++ ldr w0, [x0, 4] ++ bl lpa_hash_update_ppa ++.L3071: ++ add x24, x24, 1 ++ b .L3069 ++.L3046: ++ ldr x2, [x27, 24] ++ add x1, x24, :lo12:.LANCHOR0 ++ ldr w0, [x1, 3364] ++ ldr w3, [x2, 4] ++ cmp w3, w0 ++ bcs .L3041 ++ add x4, x20, :lo12:.LANCHOR3 ++ ldrb w0, [x19, 9] ++ ldrh w3, [x19, 10] ++ ldrh w4, [x4, 1376] ++ mul w0, w0, w4 ++ sub w0, w0, #1 ++ cmp w3, w0 ++ bge .L3041 ++ ldr x0, [x1, 3384] ++ ldr w2, [x2] ++ ldr w1, [x0, 8] ++ cmp w2, w1 ++ bls .L3047 ++ str w2, [x0, 8] ++.L3047: ++ ldr x0, [x27, 24] ++ ldrh w1, [x19, 12] ++ ldrh w2, [x19, 10] ++ add w2, w2, w1 ++ ldr w1, [x0, 8] ++ ldr w0, [x0, 4] ++ bl lpa_hash_update_ppa ++ ldr w0, [x29, 164] ++ str w0, [x29, 160] ++ ldr w0, [x29, 168] ++ str w0, [x29, 164] ++ ldr w0, [x29, 172] ++ str w0, [x29, 168] ++ ldr w0, [x29, 128] ++ str w0, [x29, 172] ++ b .L3041 ++ .size ftl_open_sblk_recovery, .-ftl_open_sblk_recovery ++ .align 2 ++ .global dump_ftl_info ++ .type dump_ftl_info, %function ++dump_ftl_info: ++ stp x29, x30, [sp, -32]! ++ adrp x0, .LC224 ++ add x0, x0, :lo12:.LC224 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ adrp x20, .LANCHOR3 ++ add x20, x20, :lo12:.LANCHOR3 ++ ldrb w1, [x19, 3353] ++ bl printk ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ ldrh w3, [x0, 386] ++ ldrb w2, [x0, 385] ++ ldrb w1, [x0, 384] ++ adrp x0, .LC225 ++ add x0, x0, :lo12:.LC225 ++ bl printk ++ ldr x0, [x19, 3384] ++ ldrh w2, [x0, 140] ++ ldrh w1, [x0, 130] ++ adrp x0, .LC226 ++ add x0, x0, :lo12:.LC226 ++ bl printk ++ ldr x1, [x19, 1128] ++ adrp x0, .LC227 ++ add x0, x0, :lo12:.LC227 ++ ldrh w5, [x1, 26] ++ ldrh w4, [x1, 22] ++ ldrb w3, [x1, 21] ++ ldrh w2, [x1, 18] ++ ldrh w1, [x1, 16] ++ bl printk ++ ldr x1, [x19, 1128] ++ adrp x0, .LC228 ++ add x0, x0, :lo12:.LC228 ++ ldrh w5, [x1, 58] ++ ldrh w4, [x1, 54] ++ ldrb w3, [x1, 53] ++ ldrh w2, [x1, 50] ++ ldrh w1, [x1, 48] ++ bl printk ++ ldr x1, [x19, 1128] ++ adrp x0, .LC229 ++ add x0, x0, :lo12:.LC229 ++ ldrh w5, [x1, 90] ++ ldrh w4, [x1, 86] ++ ldrb w3, [x1, 85] ++ ldrh w2, [x1, 82] ++ ldrh w1, [x1, 80] ++ bl printk ++ ldrb w0, [x20, 1321] ++ mov w2, 4 ++ ldrh w3, [x20, 1376] ++ ldr x1, [x20, 1928] ++ mul w3, w3, w0 ++ adrp x0, .LC230 ++ add x0, x0, :lo12:.LC230 ++ lsl w3, w3, 1 ++ bl rknand_print_hex ++ ldrh w3, [x19, 1096] ++ mov w2, 2 ++ ldr x1, [x19, 1120] ++ adrp x0, .LC231 ++ add x0, x0, :lo12:.LC231 ++ bl rknand_print_hex ++ ldr x1, [x19, 3384] ++ mov w2, 4 ++ adrp x0, .LC211 ++ add x0, x0, :lo12:.LC211 ++ add x1, x1, 704 ++ ldrh w3, [x1, -6] ++ bl rknand_print_hex ++ ldrh w3, [x19, 1096] ++ mov w2, 4 ++ ldr x1, [x19, 1104] ++ adrp x0, .LC232 ++ add x0, x0, :lo12:.LC232 ++ bl rknand_print_hex ++ add x1, x20, 1416 ++ mov w3, 256 ++ mov w2, 2 ++ adrp x0, .LC233 ++ add x0, x0, :lo12:.LC233 ++ bl rknand_print_hex ++ ldrb w0, [x20, 1321] ++ mov w2, 2 ++ ldrh w3, [x20, 1376] ++ ldr x1, [x20, 1936] ++ mul w3, w3, w0 ++ adrp x0, .LC234 ++ add x0, x0, :lo12:.LC234 ++ lsl w3, w3, 1 ++ bl rknand_print_hex ++ ldp x19, x20, [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 x3, .LANCHOR0 ++ add x3, x3, :lo12:.LANCHOR0 ++ adrp x6, .LANCHOR3 ++ add x6, x6, :lo12:.LANCHOR3 ++ mov w5, 24 ++ ldrb w4, [x3, 1205] ++ ldrh w7, [x6, 1304] ++ sub w4, w5, w4 ++ ldr x3, [x3, 1104] ++ sub w5, w4, w7 ++ mov w4, 1 ++ lsr w7, w2, w7 ++ lsl w4, w4, w5 ++ ldrb w5, [x6, 1306] ++ sub w4, w4, #1 ++ and w4, w4, w7 ++ udiv w4, w4, w5 ++ add x4, x3, w4, uxth 2 ++ ldrb w3, [x4, 2] ++ ubfx x3, x3, 5, 3 ++ cmp w3, 1 ++ ccmp w3, 7, 4, ne ++ bne .L3151 ++ mov w3, w2 ++ mov w2, w1 ++ mov x1, x0 ++ stp x29, x30, [sp, -16]! ++ adrp x0, .LC235 ++ add x0, x0, :lo12:.LC235 ++ add x29, sp, 0 ++ bl printk ++ bl dump_ftl_info ++ mov w0, -1 ++ ldp x29, x30, [sp], 16 ++ ret ++.L3151: ++ mov w0, 0 ++ ret ++ .size pm_ppa_update_check, .-pm_ppa_update_check ++ .align 2 ++ .type load_l2p_region, %function ++load_l2p_region: ++ stp x29, x30, [sp, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 65535 ++ stp x21, x22, [sp, 32] ++ and x21, x1, 65535 ++ stp x23, x24, [sp, 48] ++ cmp w21, 31 ++ stp x25, x26, [sp, 64] ++ bls .L3157 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 816 ++ mov w2, 32 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3157: ++ adrp x23, .LANCHOR0 ++ add x22, x23, :lo12:.LANCHOR0 ++ adrp x19, .LANCHOR5 ++ ldr x0, [x22, 3384] ++ ldrh w2, [x0, 698] ++ cmp w2, w20 ++ bcs .L3158 ++ mov w1, w20 ++ adrp x0, .LC236 ++ add x19, x19, :lo12:.LANCHOR5 ++ add x0, x0, :lo12:.LC236 ++ bl printk ++ mov x0, 0 ++ mov w1, 255 ++ ldrh w2, [x19, 462] ++ ldr x0, [x0, 8] ++ bl ftl_memset ++ ldr x0, [x22, 3384] ++ ldrh w0, [x0, 698] ++ cmp w0, w20 ++ bcc .L3159 ++.L3169: ++ mov w0, 0 ++.L3156: ++ 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 ++.L3159: ++ mov w2, 37 ++.L3170: ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 816 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ b .L3169 ++.L3158: ++ add x0, x0, w20, sxtw 2 ++ adrp x22, .LANCHOR3 ++ lsl x1, x21, 4 ++ ldr w24, [x0, 704] ++ add x0, x22, :lo12:.LANCHOR3 ++ add x2, x0, 1960 ++ add x26, x2, x1 ++ strh w20, [x2, x1] ++ strh wzr, [x26, 2] ++ cbnz w24, .L3161 ++ add x19, x19, :lo12:.LANCHOR5 ++ mov w1, w20 ++ mov w2, 0 ++ adrp x0, .LC237 ++ add x0, x0, :lo12:.LC237 ++ bl printk ++ ldrh w2, [x19, 462] ++ mov w1, 255 ++ ldr x0, [x26, 8] ++ bl ftl_memset ++ b .L3169 ++.L3161: ++ add x25, x19, :lo12:.LANCHOR5 ++ ldrb w3, [x0, 1946] ++ ldr x1, [x26, 8] ++ mov w0, w24 ++ ldr x2, [x25, 432] ++ bl ftl_read_ppa_page ++ ldr x1, [x25, 432] ++ ldr w2, [x1] ++ cmp w2, w20 ++ bne .L3162 ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ beq .L3162 ++.L3166: ++ add x19, x19, :lo12:.LANCHOR5 ++ ldr x0, [x19, 432] ++ ldr w0, [x0] ++ cmp w20, w0 ++ beq .L3169 ++ mov w2, 73 ++ b .L3170 ++.L3162: ++ add x23, x23, :lo12:.LANCHOR0 ++ mov w4, w24 ++ mov w3, w0 ++ mov w1, w20 ++ adrp x0, .LC238 ++ add x0, x0, :lo12:.LC238 ++ bl printk ++ add x22, x22, :lo12:.LANCHOR3 ++ ldr x1, [x23, 3384] ++ mov w2, 4 ++ adrp x0, .LC239 ++ add x0, x0, :lo12:.LC239 ++ add x1, x1, 704 ++ add x23, x19, :lo12:.LANCHOR5 ++ ldrh w3, [x1, -6] ++ bl rknand_print_hex ++ add x0, x22, 1960 ++ ldrb w3, [x22, 1946] ++ add x21, x0, x21, lsl 4 ++ mov w2, 4 ++ adrp x0, .LC218 ++ add x0, x0, :lo12:.LC218 ++ lsl w3, w3, 7 ++ ldr x1, [x21, 8] ++ bl rknand_print_hex ++ ldr x1, [x23, 432] ++ mov w3, 16 ++ mov w2, 4 ++ adrp x0, .LC240 ++ add x0, x0, :lo12:.LC240 ++ bl rknand_print_hex ++ ldrb w3, [x22, 1946] ++ mov w0, w24 ++ ldr x1, [x21, 8] ++ ldr x2, [x23, 432] ++ bl ftl_read_ppa_page ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ bne .L3165 ++ ldrh w2, [x23, 462] ++ mov w1, 255 ++ ldr x0, [x21, 8] ++ bl ftl_memset ++.L3167: ++ mov w0, -1 ++ b .L3156 ++.L3165: ++ ldr x0, [x23, 432] ++ ldr w0, [x0] ++ cmp w20, w0 ++ beq .L3166 ++ b .L3167 ++ .size load_l2p_region, .-load_l2p_region ++ .align 2 ++ .global pm_gc ++ .type pm_gc, %function ++pm_gc: ++ 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] ++ adrp x20, .LANCHOR5 ++ add x1, x20, :lo12:.LANCHOR5 ++ ldr x0, [x0, 3384] ++ ldrh w2, [x0, 688] ++ ldrh w0, [x1, 220] ++ sub w0, w0, #1 ++ cmp w2, w0 ++ bge .L3172 ++ ldr w0, [x1, 212] ++ cbz w0, .L3173 ++.L3172: ++ bl pm_free_sblk ++ add x1, x19, :lo12:.LANCHOR0 ++ add x3, x20, :lo12:.LANCHOR5 ++ ldr x2, [x1, 3384] ++ ldrh w1, [x3, 220] ++ sub w1, w1, #1 ++ ldrh w4, [x2, 688] ++ cmp w4, w1 ++ bge .L3174 ++ ldr w1, [x3, 212] ++ cbz w1, .L3173 ++.L3174: ++ add x20, x20, :lo12:.LANCHOR5 ++ add x0, x2, w0, uxth 1 ++ str wzr, [x20, 212] ++ mov w20, 65535 ++ ldrh w22, [x0, 416] ++ cmp w22, w20 ++ bne .L3176 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 832 ++ mov w2, 182 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ bl pm_free_sblk ++ add x1, x19, :lo12:.LANCHOR0 ++ ldr x1, [x1, 3384] ++ add x0, x1, w0, uxth 1 ++ ldrh w22, [x0, 416] ++ cmp w22, w20 ++ beq .L3173 ++.L3176: ++ bl pm_select_ram_region ++ adrp x24, .LANCHOR3 ++ and x21, x0, 65535 ++ add x0, x24, :lo12:.LANCHOR3 ++ lsl x1, x21, 4 ++ add x0, x0, 1960 ++ add x20, x0, x1 ++ mov x23, x21 ++ ldrh w0, [x0, x1] ++ mov w1, 65535 ++ cmp w0, w1 ++ beq .L3177 ++ ldr x1, [x20, 8] ++ cbz x1, .L3177 ++ ldrsh w2, [x20, 2] ++ tbz w2, #31, .L3177 ++ bl pm_write_page ++ ldrh w0, [x20, 2] ++ and w0, w0, 32767 ++ strh w0, [x20, 2] ++.L3177: ++ add x24, x24, :lo12:.LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR0 ++ add x0, x24, 1960 ++ mov w20, 0 ++ add x21, x0, x21, lsl 4 ++.L3178: ++ ldr x2, [x19, 3384] ++ ldrh w0, [x2, 698] ++ cmp w0, w20 ++ bhi .L3181 ++ bl pm_free_sblk ++.L3173: ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 64 ++ ret ++.L3181: ++ ldrb w1, [x19, 1205] ++ mov w0, 24 ++ ldrh w3, [x24, 1304] ++ add x2, x2, w20, sxtw 2 ++ sub w0, w0, w1 ++ sub w1, w0, w3 ++ mov w0, 1 ++ lsl w0, w0, w1 ++ ldr w1, [x2, 704] ++ sub w0, w0, #1 ++ lsr w1, w1, w3 ++ and w0, w0, w1 ++ ldrb w1, [x24, 1306] ++ udiv w0, w0, w1 ++ cmp w22, w0, uxth ++ bne .L3179 ++ mov w1, w23 ++ mov w0, w20 ++ bl load_l2p_region ++ cbnz w0, .L3180 ++ ldr x1, [x21, 8] ++ mov w0, w20 ++ bl pm_write_page ++.L3180: ++ mov w0, -1 ++ strh w0, [x21] ++.L3179: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L3178 ++ .size pm_gc, .-pm_gc ++ .align 2 ++ .global pm_flush_id ++ .type pm_flush_id, %function ++pm_flush_id: ++ stp x29, x30, [sp, -32]! ++ adrp x2, .LANCHOR3 ++ add x2, x2, :lo12:.LANCHOR3 ++ ubfiz x0, x0, 4, 16 ++ add x2, x2, 1960 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ add x19, x2, x0 ++ ldrh w0, [x2, x0] ++ ldr x1, [x19, 8] ++ bl pm_write_page ++ ldrh w0, [x19, 2] ++ and w0, w0, 32767 ++ strh w0, [x19, 2] ++ adrp x19, .LANCHOR5 ++ add x19, x19, :lo12:.LANCHOR5 ++ ldr w0, [x19, 424] ++ cbz w0, .L3190 ++ bl pm_gc ++ str wzr, [x19, 424] ++.L3190: ++ mov w0, 0 ++ ldr x19, [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 x19, .LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR3 ++ mov w20, 0 ++ add x19, x19, 1962 ++.L3197: ++ ldrsh w0, [x19] ++ tbz w0, #31, .L3196 ++ mov w0, w20 ++ bl pm_flush_id ++.L3196: ++ add w20, w20, 1 ++ add x19, x19, 16 ++ and w20, w20, 65535 ++ cmp w20, 32 ++ bne .L3197 ++ 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, -128]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR5 ++ add x19, x20, :lo12:.LANCHOR5 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ mov w24, w0 ++ stp x25, x26, [sp, 64] ++ mov w0, 1 ++ stp x27, x28, [sp, 80] ++ mov w25, -1 ++ strb w0, [x19, 440] ++ mov w0, 64 ++ str wzr, [x19, 212] ++ str wzr, [x19, 424] ++ bl ftl_dma32_malloc ++ str x0, [x19, 432] ++ adrp x19, .LANCHOR3 ++ add x0, x19, :lo12:.LANCHOR3 ++ add x21, x0, 1960 ++ add x23, x0, 2472 ++ mov x22, x0 ++.L3206: ++ strh w25, [x21] ++ strh wzr, [x21, 2] ++ cbz w24, .L3205 ++ ldrb w0, [x22, 1946] ++ lsl w0, w0, 9 ++ bl ftl_dma32_malloc ++ str x0, [x21, 8] ++.L3205: ++ add x21, x21, 16 ++ cmp x21, x23 ++ bne .L3206 ++ add x0, x19, :lo12:.LANCHOR3 ++ adrp x21, .LANCHOR0 ++ add x23, x21, :lo12:.LANCHOR0 ++ mov w4, 4 ++ ldr x26, [x0, 1968] ++ add x0, x20, :lo12:.LANCHOR5 ++ mov x2, x26 ++ ldr x22, [x0, 432] ++ ldr x0, [x23, 3384] ++ mov x3, x22 ++ ldrh w1, [x0, 692] ++ ldrb w0, [x0, 694] ++ bl flash_get_last_written_page ++ sxth w24, w0 ++ ldr x0, [x23, 3384] ++ mov w25, w24 ++ ldrh w2, [x0, 696] ++ cmp w2, w24 ++ bgt .L3207 ++ ldrh w1, [x0, 692] ++ mov w3, w24 ++ adrp x0, .LC241 ++ add x0, x0, :lo12:.LC241 ++ adrp x28, .LC243 ++ add x28, x28, :lo12:.LC243 ++ adrp x27, .LC242 ++ bl printk ++ ldr x0, [x23, 3384] ++ ldrsh w23, [x0, 696] ++ add w0, w24, 1 ++ str w0, [x29, 124] ++ add x0, x27, :lo12:.LC242 ++ str x0, [x29, 112] ++.L3208: ++ ldr w0, [x29, 124] ++ cmp w23, w0 ++ blt .L3211 ++ add x0, x20, :lo12:.LANCHOR5 ++ add x21, x21, :lo12:.LANCHOR0 ++ mov w1, 1 ++ add w25, w25, 1 ++ strb w1, [x0, 401] ++ ldr x0, [x21, 3384] ++ strh w25, [x0, 696] ++ bl pm_free_sblk ++.L3207: ++ add x19, x19, :lo12:.LANCHOR3 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w1, 255 ++ add x19, x19, 1960 ++ ldrh w2, [x20, 462] ++ ldr x0, [x19, 8] ++ bl ftl_memset ++ ldr x1, [x19, 8] ++ mov w0, -1 ++ bl pm_write_page ++ ldrb w0, [x20, 401] ++ cbz w0, .L3212 ++ ldr x1, [x19, 8] ++ mov w0, -1 ++ bl pm_write_page ++ ldr x1, [x19, 8] ++ mov w0, -1 ++ bl pm_write_page ++ ldr x1, [x19, 8] ++ mov w0, -1 ++ bl pm_write_page ++.L3212: ++ 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], 128 ++ ret ++.L3211: ++ add x27, x21, :lo12:.LANCHOR0 ++ add x5, x19, :lo12:.LANCHOR3 ++ mov x3, x22 ++ mov x2, x26 ++ str x5, [x29, 104] ++ ldr x0, [x27, 3384] ++ ldrh w1, [x5, 1410] ++ ldrb w4, [x5, 1946] ++ ldrh w24, [x0, 692] ++ ldrb w0, [x0, 694] ++ madd w24, w24, w1, w23 ++ mov w1, w24 ++ bl flash_read_page_en ++ mov w4, w0 ++ ldr x0, [x27, 3384] ++ str w4, [x29, 120] ++ mov w2, w24 ++ ldr w1, [x0, 48] ++ ldrh w3, [x0, 694] ++ add w1, w1, 1 ++ str w1, [x0, 48] ++ ldr x0, [x29, 112] ++ ldr w1, [x22] ++ bl printk ++ ldr w4, [x29, 120] ++ cmp w4, 512 ++ ccmn w4, #1, 4, ne ++ beq .L3209 ++ ldr x0, [x27, 3384] ++ ldr w1, [x22] ++ ldrh w0, [x0, 698] ++ cmp w1, w0 ++ bcs .L3209 ++ ldr w2, [x22, 8] ++ ldr x5, [x29, 104] ++ cbz w2, .L3210 ++ ldrb w1, [x5, 1946] ++ mov x0, x26 ++ str w2, [x29, 120] ++ lsl w1, w1, 9 ++ bl js_hash ++ ldr w2, [x29, 120] ++ cmp w2, w0 ++ beq .L3210 ++ ldr w1, [x22, 8] ++ mov x0, x28 ++ bl printk ++.L3209: ++ add w23, w23, 1 ++ sxth w23, w23 ++ b .L3208 ++.L3210: ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr x1, [x0, 3384] ++ ldr w0, [x22] ++ add x0, x0, 176 ++ str w24, [x1, x0, lsl 2] ++ b .L3209 ++ .size pm_init, .-pm_init ++ .align 2 ++ .global pm_log2phys ++ .type pm_log2phys, %function ++pm_log2phys: ++ stp x29, x30, [sp, -96]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR3 ++ stp x23, x24, [sp, 48] ++ mov x23, x1 ++ add x1, x21, :lo12:.LANCHOR3 ++ stp x25, x26, [sp, 64] ++ stp x19, x20, [sp, 16] ++ mov w24, w2 ++ str x27, [sp, 80] ++ adrp x22, .LANCHOR0 ++ add x2, x22, :lo12:.LANCHOR0 ++ ldrb w20, [x1, 1946] ++ ldr w2, [x2, 3364] ++ lsl w25, w20, 7 ++ ubfiz w20, w20, 7, 9 ++ cmp w0, w2 ++ udiv w25, w0, w25 ++ and w26, w25, 65535 ++ msub w20, w26, w20, w0 ++ bcc .L3228 ++ mov w1, w0 ++ adrp x0, .LC244 ++ add x0, x0, :lo12:.LC244 ++ bl printk ++ mov w0, -1 ++ cbnz w24, .L3227 ++ str w0, [x23] ++.L3227: ++ 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 ++.L3228: ++ and x20, x20, 65535 ++ add x0, x1, 1968 ++ mov x19, 0 ++.L3234: ++ ldr x1, [x0] ++ cbz x1, .L3230 ++ ldrh w1, [x0, -8] ++ cmp w1, w26 ++ bne .L3230 ++.L3231: ++ cbnz w24, .L3232 ++ add x3, x21, :lo12:.LANCHOR3 ++ add x22, x22, :lo12:.LANCHOR0 ++ add x0, x3, x19, lsl 4 ++ mov w2, 24 ++ mov w1, 1 ++ ldr x0, [x0, 1968] ++ ldr w0, [x0, x20, lsl 2] ++ str w0, [x23] ++ ldrb w4, [x22, 1205] ++ sub w2, w2, w4 ++ lsl w1, w1, w4 ++ sub w1, w1, #1 ++ lsr w0, w0, w2 ++ and w0, w0, w1 ++ ldrb w1, [x3, 1412] ++ cmp w0, w1 ++ bcc .L3233 ++ mov w0, -1 ++ str w0, [x23] ++.L3233: ++ add x21, x21, :lo12:.LANCHOR3 ++ add x21, x21, 1960 ++ add x19, x21, x19, lsl 4 ++ ldrh w0, [x19, 2] ++ mvn x1, x0 ++ tst x1, 32767 ++ beq .L3237 ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++.L3237: ++ mov w0, 0 ++ b .L3227 ++.L3232: ++ add x2, x21, :lo12:.LANCHOR3 ++ ldr w3, [x23] ++ add x0, x2, 1960 ++ add x0, x0, x19, lsl 4 ++ ldr x1, [x0, 8] ++ str w3, [x1, x20, lsl 2] ++ strb w25, [x2, 2472] ++ ldrh w1, [x0, 2] ++ orr w1, w1, -32768 ++ strh w1, [x0, 2] ++ b .L3233 ++.L3230: ++ add w19, w19, 1 ++ add x0, x0, 16 ++ and x19, x19, 65535 ++ cmp w19, 32 ++ bne .L3234 ++ bl pm_select_ram_region ++ and x19, x0, 65535 ++ add x2, x21, :lo12:.LANCHOR3 ++ sbfiz x1, x19, 4, 32 ++ add x2, x2, 1960 ++ mov w27, w0 ++ add x3, x2, x1 ++ ldrh w2, [x2, x1] ++ mov w1, 65535 ++ cmp w2, w1 ++ beq .L3235 ++ ldrsh w1, [x3, 2] ++ tbz w1, #31, .L3235 ++ bl pm_flush_id ++.L3235: ++ adrp x0, .LANCHOR5+464 ++ mov w1, w27 ++ strb w19, [x0, #:lo12:.LANCHOR5+464] ++ mov w0, w26 ++ bl load_l2p_region ++ b .L3231 ++ .size pm_log2phys, .-pm_log2phys ++ .align 2 ++ .global gc_recovery ++ .type gc_recovery, %function ++gc_recovery: ++ sub sp, sp, #224 ++ stp x29, x30, [sp, 32] ++ add x29, sp, 32 ++ stp x21, x22, [sp, 64] ++ adrp x22, .LANCHOR3 ++ stp x19, x20, [sp, 48] ++ adrp x19, .LANCHOR0 ++ add x21, x19, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 80] ++ stp x25, x26, [sp, 96] ++ adrp x23, .LANCHOR5 ++ stp x27, x28, [sp, 112] ++ add x0, x23, :lo12:.LANCHOR5 ++ add x25, x22, :lo12:.LANCHOR3 ++ ldr x20, [x21, 1128] ++ strb wzr, [x0, 264] ++ mov w0, 65535 ++ strb wzr, [x25, 1337] ++ ldrh w1, [x20, 80] ++ cmp w1, w0 ++ beq .L3244 ++ add x24, x20, 80 ++ mov w0, -1 ++ strh w0, [x20, 130] ++ mov w0, 1 ++ bl buf_alloc ++ mov x28, x0 ++ ldrb w0, [x24, 9] ++ ldrh w1, [x25, 1410] ++ sub w0, w0, #1 ++ ldrb w2, [x25, 1320] ++ add x0, x24, w0, sxtw 1 ++ cmp w2, 2 ++ ldrh w0, [x0, 16] ++ mul w1, w0, w1 ++ str w1, [x29, 184] ++ beq .L3245 ++ ldrb w0, [x21, 1212] ++ cbnz w0, .L3245 ++ ldrb w0, [x21, 1213] ++ cbz w0, .L3246 ++.L3245: ++ add x0, x22, :lo12:.LANCHOR3 ++ ldrh w0, [x0, 1338] ++ sub w0, w0, #1 ++ add w0, w0, w1 ++ orr w2, w0, w2, lsl 24 ++ str w2, [x28, 40] ++.L3247: ++ mov w1, 1 ++ mov x0, x28 ++ bl sblk_read_page ++ ldr w0, [x28, 52] ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ beq .L3248 ++ ldr x0, [x28, 24] ++ ldr w1, [x0] ++ mov w0, 15555 ++ movk w0, 0xf55f, lsl 16 ++ cmp w1, w0 ++ beq .L3249 ++.L3248: ++ mov x0, x28 ++ bl zbuf_free ++ ldr x1, [x28, 24] ++ ldr x0, [x28, 8] ++ ldr w2, [x1, 12] ++ str w2, [sp, 16] ++ ldr w2, [x1, 8] ++ str w2, [sp, 8] ++ ldr w2, [x1, 4] ++ str w2, [sp] ++ ldp w3, w4, [x0] ++ ldp w5, w6, [x0, 8] ++ adrp x0, .LC245 ++ ldr w7, [x1] ++ add x0, x0, :lo12:.LC245 ++ ldr w1, [x28, 40] ++ ldr w2, [x28, 52] ++ bl printk ++.L3338: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w2, [x20, 80] ++ mov w21, 0 ++ ldr x1, [x0, 1120] ++ strh wzr, [x1, x2, lsl 1] ++ ldr x0, [x0, 1128] ++ ldrh w1, [x20, 80] ++ strh w1, [x0, 130] ++.L3250: ++ add x1, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x20, 80] ++ ldr x1, [x1, 1120] ++ ubfiz x2, x0, 1, 16 ++ ldrh w1, [x1, x2] ++ cbnz w1, .L3294 ++ bl ftl_dump_write_open_sblk ++.L3294: ++ ldrh w1, [x20, 80] ++ mov w2, w21 ++ adrp x0, .LC247 ++ add x0, x0, :lo12:.LC247 ++ bl printk ++ mov w0, -1 ++ strh w0, [x20, 80] ++ bl pm_flush ++ bl ftl_ext_info_flush ++ add x1, x19, :lo12:.LANCHOR0 ++ mov w2, 65535 ++ ldr x0, [x1, 1128] ++ ldrh w0, [x0, 130] ++ cmp w0, w2 ++ beq .L3295 ++ ldrh w1, [x1, 1096] ++ cmp w1, w0 ++ bhi .L3296 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 840 ++ mov w2, 517 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3296: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 1128] ++ ldrh w0, [x0, 130] ++ bl ftl_free_sblk ++.L3295: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w0, -1 ++ ldr x1, [x19, 3384] ++ strh w0, [x1, 126] ++ ldr x1, [x19, 1128] ++ strh w0, [x1, 130] ++ mov w0, 0 ++ bl ftl_info_flush ++.L3243: ++ 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, 224 ++ ret ++.L3246: ++ cmp w2, 3 ++ bne .L3247 ++ ldrh w0, [x25, 1376] ++ sub w0, w0, #1 ++ add w0, w0, w1 ++ orr w0, w0, 50331648 ++ str w0, [x28, 40] ++ b .L3247 ++.L3249: ++ add x1, x23, :lo12:.LANCHOR5 ++ ldrb w0, [x1, 465] ++ cmp w0, 2 ++ bne .L3251 ++ add x21, x22, :lo12:.LANCHOR3 ++ ldrb w0, [x21, 1320] ++ cmp w0, 3 ++ bne .L3251 ++ ldrh w2, [x21, 1338] ++ ldrb w3, [x21, 1321] ++ ldrh w0, [x1, 462] ++ ubfiz w2, w2, 2, 14 ++ mul w2, w2, w3 ++ ldr x3, [x1, 280] ++ ldr x1, [x28, 8] ++ sub w2, w2, w0 ++ and x0, x0, 65532 ++ and w2, w2, 65535 ++ add x0, x3, x0 ++ bl ftl_memcpy ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1212] ++ cbnz w1, .L3252 ++ ldrb w0, [x0, 1213] ++ cbz w0, .L3253 ++.L3252: ++ ldr w0, [x28, 40] ++ sub w0, w0, #1 ++.L3332: ++ str w0, [x28, 40] ++ mov w1, 1 ++ mov x0, x28 ++ bl sblk_read_page ++ ldr w0, [x28, 52] ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ beq .L3255 ++ ldr x0, [x28, 24] ++ ldr w1, [x0] ++ mov w0, 15555 ++ movk w0, 0xf55f, lsl 16 ++ cmp w1, w0 ++ beq .L3256 ++.L3255: ++ mov x0, x28 ++ bl zbuf_free ++ b .L3338 ++.L3253: ++ ldr w0, [x29, 184] ++ ldrh w1, [x21, 1376] ++ sub w0, w0, #1 ++ add w0, w0, w1 ++ orr w0, w0, 33554432 ++ b .L3332 ++.L3256: ++ add x0, x23, :lo12:.LANCHOR5 ++ ldrh w2, [x0, 462] ++.L3333: ++ ldr x1, [x28, 8] ++ add x21, x22, :lo12:.LANCHOR3 ++ ldr x0, [x0, 280] ++ bl ftl_memcpy ++ ldrb w1, [x21, 1321] ++ ldrh w0, [x21, 1338] ++ mul w0, w0, w1 ++ ldrb w1, [x21, 1946] ++ lsl w2, w0, 2 ++ cmp w1, w0, lsr 6 ++ bge .L3258 ++ add x25, x23, :lo12:.LANCHOR5 ++ mov w1, 0 ++ ldr x0, [x25, 288] ++ bl ftl_memset ++ ldrb w26, [x25, 465] ++ cmp w26, 1 ++ bne .L3299 ++ ldrb w1, [x21, 1321] ++ ldrh w0, [x21, 1338] ++ ldrh w21, [x25, 462] ++ mul w0, w0, w1 ++ ldr x1, [x28, 8] ++ sub w21, w21, w0, lsl 2 ++ add x1, x1, w0, sxtw 2 ++ ldr x0, [x25, 288] ++ mov w2, w21 ++ bl ftl_memcpy ++ mov w10, w26 ++.L3259: ++ add x0, x22, :lo12:.LANCHOR3 ++ ldrh w1, [x0, 1376] ++ ldrb w25, [x0, 1320] ++ str w1, [x29, 168] ++ cmp w25, 2 ++ bne .L3260 ++ ldrb w0, [x0, 1322] ++ cbz w0, .L3261 ++.L3260: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1212] ++ cbz w0, .L3262 ++.L3261: ++ ldr w0, [x29, 168] ++ mul w0, w0, w25 ++ mov w25, 1 ++ str w0, [x29, 168] ++.L3262: ++ add x14, x22, :lo12:.LANCHOR3 ++ adrp x26, .LC246 ++ mov w9, 0 ++ add x0, x26, :lo12:.LC246 ++ mov w13, 0 ++ str x0, [x29, 152] ++.L3263: ++ sub w0, w9, #1 ++ str w0, [x29, 164] ++ ldr w0, [x29, 168] ++ cmp w0, w9 ++ bls .L3276 ++ add w0, w9, w9, lsl 1 ++ mov w26, 0 ++ sub w0, w0, #1 ++ str w0, [x29, 172] ++ b .L3277 ++.L3251: ++ add x0, x22, :lo12:.LANCHOR3 ++ ldrh w2, [x0, 1338] ++ ldrb w0, [x0, 1321] ++ mul w2, w2, w0 ++ add x0, x23, :lo12:.LANCHOR5 ++ lsl w2, w2, 2 ++ b .L3333 ++.L3258: ++ add x3, x23, :lo12:.LANCHOR5 ++ ldr x1, [x28, 8] ++ add x1, x1, w0, sxtw 2 ++ ldr x0, [x3, 288] ++ bl ftl_memcpy ++ mov w10, 0 ++.L3334: ++ mov w21, 0 ++ b .L3259 ++.L3299: ++ mov w10, 1 ++ b .L3334 ++.L3272: ++ ldrh w1, [x14, 1410] ++ ldrh w0, [x24, x27, lsl 1] ++ ldrb w2, [x14, 1320] ++ cmp w2, 2 ++ mul w0, w0, w1 ++ str w0, [x29, 184] ++ add w1, w11, w0 ++ beq .L3264 ++ add x3, x19, :lo12:.LANCHOR0 ++ ldrb w4, [x3, 1212] ++ cbz w4, .L3265 ++.L3264: ++ ldr w0, [x29, 164] ++ add w1, w1, w0 ++ orr w1, w1, w2, lsl 24 ++.L3335: ++ str w1, [x28, 40] ++.L3266: ++ str x14, [x29, 120] ++ mov w1, 1 ++ str w10, [x29, 128] ++ mov x0, x28 ++ str w9, [x29, 136] ++ str w13, [x29, 144] ++ str w11, [x29, 160] ++ bl sblk_read_page ++ ldr w10, [x29, 128] ++ ldr w13, [x29, 144] ++ ldr w9, [x29, 136] ++ ldr w11, [x29, 160] ++ sxtw x15, w13 ++ ldr x14, [x29, 120] ++ cbz w10, .L3269 ++ add x0, x23, :lo12:.LANCHOR5 ++ lsl x1, x15, 2 ++ ldr x0, [x0, 288] ++ ldr w2, [x0, x1] ++ cbnz w2, .L3269 ++ ldr x2, [x28, 24] ++ ldr w2, [x2, 8] ++ str w2, [x0, x1] ++.L3269: ++ add x1, x23, :lo12:.LANCHOR5 ++ lsl x15, x15, 2 ++ ldr x0, [x1, 280] ++ ldr w3, [x0, x15] ++ ldr x0, [x28, 24] ++ ldr w6, [x0, 4] ++ cmp w3, w6 ++ bne .L3270 ++ ldr x1, [x1, 288] ++ ldr w2, [x1, x15] ++ ldr w1, [x0, 8] ++ cmp w2, w1 ++ beq .L3271 ++.L3270: ++ add x18, x23, :lo12:.LANCHOR5 ++ ldr w2, [x0, 12] ++ str x14, [x29, 104] ++ stp w10, w11, [x29, 116] ++ ldr x1, [x18, 288] ++ str w2, [sp] ++ str w9, [x29, 128] ++ ldr w5, [x0] ++ ldr w4, [x1, x15] ++ ldr w7, [x0, 8] ++ ldr w1, [x28, 40] ++ ldr w2, [x28, 52] ++ ldr x0, [x29, 152] ++ stp x18, x15, [x29, 136] ++ str w13, [x29, 160] ++ bl printk ++ ldp x18, x15, [x29, 136] ++ ldp w10, w11, [x29, 116] ++ ldr x0, [x18, 280] ++ ldr w9, [x29, 128] ++ ldr w13, [x29, 160] ++ ldr x14, [x29, 104] ++ ldr w0, [x0, x15] ++ cmn w0, #1 ++ beq .L3271 ++ mov x0, x28 ++ bl zbuf_free ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w2, [x20, 80] ++ ldr x1, [x0, 1120] ++ strh wzr, [x1, x2, lsl 1] ++ ldr x0, [x0, 1128] ++ ldrh w1, [x20, 80] ++ strh w1, [x0, 130] ++ b .L3250 ++.L3265: ++ cmp w2, 3 ++ bne .L3267 ++ ldrb w2, [x3, 1213] ++ cbz w2, .L3268 ++ ldr w0, [x29, 172] ++ add w1, w1, w0 ++ orr w1, w1, 50331648 ++ b .L3335 ++.L3268: ++ add w0, w9, w0 ++ orr w0, w0, w11, lsl 24 ++.L3336: ++ str w0, [x28, 40] ++ b .L3266 ++.L3267: ++ add w0, w9, w0 ++ b .L3336 ++.L3271: ++ add w13, w13, 1 ++ add w11, w11, 1 ++.L3274: ++ cmp w25, w11 ++ bcs .L3272 ++ add w26, w26, 1 ++.L3277: ++ ldrb w0, [x24, 9] ++ cmp w26, w0 ++ bge .L3273 ++ sxtw x27, w26 ++ mov w11, 1 ++ add x27, x27, 8 ++ b .L3274 ++.L3273: ++ ldrb w0, [x14, 1322] ++ cmp w0, 0 ++ cinc w9, w9, ne ++ add w9, w9, 1 ++ b .L3263 ++.L3276: ++ mov x0, x28 ++ bl zbuf_free ++ add x0, x19, :lo12:.LANCHOR0 ++ add x3, x22, :lo12:.LANCHOR3 ++ ldrh w2, [x20, 80] ++ mov w21, 0 ++ mov w27, 0 ++ str wzr, [x29, 164] ++ ldrh w3, [x3, 1338] ++ ldr x1, [x0, 1120] ++ ldrb w0, [x24, 9] ++ mul w0, w0, w3 ++ strh w0, [x1, x2, lsl 1] ++.L3278: ++ sub w0, w27, #1 ++ str w0, [x29, 136] ++ ldr w0, [x29, 168] ++ cmp w0, w27 ++ bls .L3292 ++ add w0, w27, w27, lsl 1 ++ add x28, x23, :lo12:.LANCHOR5 ++ sub w0, w0, #1 ++ str wzr, [x29, 172] ++ str w0, [x29, 160] ++ b .L3293 ++.L3288: ++ ldr w0, [x29, 164] ++ ldr x1, [x28, 280] ++ sbfiz x0, x0, 2, 32 ++ ldr w5, [x1, x0] ++ cmn w5, #1 ++ beq .L3279 ++ ldr x1, [x28, 288] ++ str w5, [x29, 144] ++ ldr w0, [x1, x0] ++ str w0, [x29, 152] ++ mov w0, w5 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 188] ++ cmn w0, #1 ++ ldr w5, [x29, 144] ++ bne .L3280 ++ mov w0, w5 ++ str w5, [x29, 144] ++ mov w2, 0 ++ add x1, x29, 188 ++ bl pm_log2phys ++ ldr w5, [x29, 144] ++.L3280: ++ ldr x0, [x29, 128] ++ add x2, x22, :lo12:.LANCHOR3 ++ ldrh w1, [x2, 1410] ++ ldrh w0, [x24, x0, lsl 1] ++ ldrb w2, [x2, 1320] ++ cmp w2, 2 ++ mul w0, w0, w1 ++ add w1, w26, w0 ++ beq .L3281 ++ add x6, x19, :lo12:.LANCHOR0 ++ ldrb w7, [x6, 1212] ++ cbz w7, .L3282 ++.L3281: ++ ldr w0, [x29, 136] ++ add w1, w0, w1 ++ orr w1, w1, w2, lsl 24 ++ str w1, [x29, 184] ++.L3283: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x6, x22, :lo12:.LANCHOR3 ++ ldr w3, [x29, 152] ++ ldrb w2, [x0, 1205] ++ mov w0, 24 ++ ldrh w1, [x6, 1304] ++ sub w0, w0, w2 ++ mov w2, 1 ++ sub w0, w0, w1 ++ lsr w1, w3, w1 ++ lsl w0, w2, w0 ++ sub w0, w0, #1 ++ and w0, w0, w1 ++ ldrb w1, [x6, 1306] ++ udiv w0, w0, w1 ++ and w0, w0, 65535 ++ str w0, [x29, 144] ++ ldr w0, [x29, 188] ++ cmp w3, w0 ++ bne .L3286 ++ add x1, x29, 184 ++ mov w0, w5 ++ bl pm_log2phys ++ add w21, w21, 1 ++ ldrh w0, [x29, 144] ++ bl ftl_vpn_decrement ++.L3287: ++ ldr w0, [x29, 164] ++ add x2, x19, :lo12:.LANCHOR0 ++ add w0, w0, 1 ++ str w0, [x29, 164] ++ ldr x1, [x2, 1104] ++ ldr w0, [x29, 144] ++ add x1, x1, x0, lsl 2 ++ ldrb w1, [x1, 2] ++ tst w1, 224 ++ bne .L3279 ++ ldr x1, [x2, 1120] ++ lsl x0, x0, 1 ++ ldrh w2, [x1, x0] ++ cbz w2, .L3279 ++ strh wzr, [x1, x0] ++.L3279: ++ add w26, w26, 1 ++.L3290: ++ cmp w25, w26 ++ bcs .L3288 ++ ldr w0, [x29, 172] ++ add w0, w0, 1 ++ str w0, [x29, 172] ++.L3293: ++ ldrb w0, [x24, 9] ++ ldr w1, [x29, 172] ++ cmp w1, w0 ++ bge .L3289 ++ ldrsw x0, [x29, 172] ++ mov w26, 1 ++ add x0, x0, 8 ++ str x0, [x29, 128] ++ b .L3290 ++.L3282: ++ cmp w2, 3 ++ bne .L3284 ++ ldrb w6, [x6, 1213] ++ lsl w2, w26, 24 ++ cbz w6, .L3285 ++ ldr w0, [x29, 160] ++ add w1, w0, w1 ++ orr w0, w1, w2 ++.L3337: ++ str w0, [x29, 184] ++ b .L3283 ++.L3285: ++ add w0, w27, w0 ++ orr w0, w0, w2 ++ b .L3337 ++.L3284: ++ add w0, w27, w0 ++ b .L3337 ++.L3286: ++ ldr w1, [x29, 184] ++ cmp w0, w1 ++ cinc w21, w21, eq ++ b .L3287 ++.L3289: ++ add x0, x22, :lo12:.LANCHOR3 ++ ldrb w0, [x0, 1322] ++ cmp w0, 0 ++ cinc w27, w27, ne ++ add w27, w27, 1 ++ b .L3278 ++.L3292: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x20, 80] ++ ldr x0, [x0, 1120] ++ strh w21, [x0, x1, lsl 1] ++ ldrh w0, [x20, 80] ++ bl zftl_insert_data_list ++ b .L3250 ++.L3244: ++ ldrh w0, [x20, 130] ++ cmp w0, w1 ++ beq .L3243 ++ ldr x1, [x21, 3384] ++ ldrh w1, [x1, 126] ++ cmp w1, w0 ++ bne .L3298 ++ bl pm_flush ++ ldr x0, [x21, 1128] ++ ldrh w0, [x0, 130] ++ bl ftl_free_sblk ++ ldr x0, [x21, 3384] ++ mov w1, -1 ++ strh w1, [x0, 126] ++ mov w0, 0 ++ bl ftl_info_flush ++.L3298: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, -1 ++ ldr x0, [x19, 1128] ++ strh w1, [x0, 130] ++ b .L3243 ++ .size gc_recovery, .-gc_recovery ++ .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 ++ add x0, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ adrp x22, .LANCHOR3 ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr x20, [x0, 1128] ++ add x0, x22, :lo12:.LANCHOR3 ++ ldrh w24, [x0, 1338] ++ add x0, x20, 80 ++ str x0, [x29, 112] ++ ldrb w0, [x0, 9] ++ mul w24, w24, w0 ++ adrp x0, .LANCHOR2 ++ str x0, [x29, 136] ++ ldr w1, [x0, #:lo12:.LANCHOR2] ++ tbz x1, 8, .L3340 ++ ldrh w1, [x20, 80] ++ adrp x0, .LC248 ++ add x0, x0, :lo12:.LC248 ++ bl printk ++.L3340: ++ add x0, x19, :lo12:.LANCHOR0 ++ adrp x1, .LANCHOR5 ++ ldrh w3, [x20, 80] ++ mov w23, 0 ++ mov w21, 0 ++ str x1, [x29, 120] ++ ldr x2, [x0, 1120] ++ add x0, x1, :lo12:.LANCHOR5 ++ ldrb w0, [x0, 465] ++ sub w0, w24, w0 ++ strh w0, [x2, x3, lsl 1] ++ adrp x0, .LC250 ++ add x0, x0, :lo12:.LC250 ++ str x0, [x29, 104] ++.L3341: ++ cmp w21, w24 ++ bne .L3350 ++ ldr x0, [x29, 136] ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L3351 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w2, [x20, 80] ++ mov w3, w23 ++ ldr x1, [x0, 1120] ++ ldr x0, [x0, 1128] ++ ldrh w2, [x1, x2, lsl 1] ++ ldrh w1, [x0, 80] ++ adrp x0, .LC251 ++ add x0, x0, :lo12:.LC251 ++ bl printk ++.L3351: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x20, 80] ++ ldr x0, [x0, 1120] ++ ldrh w0, [x0, x1, lsl 1] ++ cmp w23, w0 ++ beq .L3352 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 856 ++ mov w2, 898 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3352: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x20, 80] ++ ldr x0, [x19, 1120] ++ strh w23, [x0, x1, lsl 1] ++ ldrh w0, [x20, 80] ++ bl zftl_insert_data_list ++ 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 ++.L3350: ++ ldr x0, [x29, 120] ++ add x0, x0, :lo12:.LANCHOR5 ++ ldr x0, [x0, 280] ++ ldr w2, [x0, w21, sxtw 2] ++ cmn w2, #1 ++ beq .L3342 ++ add x0, x22, :lo12:.LANCHOR3 ++ ldrb w0, [x0, 1946] ++ lsl w0, w0, 7 ++ udiv w0, w2, w0 ++ and w0, w0, 65535 ++ str w0, [x29, 132] ++ ldr x0, [x29, 136] ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L3343 ++ ldr w1, [x29, 132] ++ adrp x0, .LC249 ++ mov w3, w21 ++ add x0, x0, :lo12:.LC249 ++ bl printk ++.L3343: ++ ldr x0, [x29, 120] ++ mov w25, w21 ++ add x26, x0, :lo12:.LANCHOR5 ++.L3349: ++ ldr x0, [x26, 280] ++ sbfiz x27, x25, 2, 32 ++ ldr w4, [x0, x27] ++ cmn w4, #1 ++ beq .L3344 ++ add x0, x22, :lo12:.LANCHOR3 ++ ldr w1, [x29, 132] ++ ldrb w0, [x0, 1946] ++ lsl w0, w0, 7 ++ udiv w0, w4, w0 ++ cmp w1, w0, uxth ++ bne .L3344 ++ ldr x0, [x26, 288] ++ str w4, [x29, 128] ++ ldr w28, [x0, x27] ++ mov w0, w4 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 156] ++ cmn w0, #1 ++ ldr w4, [x29, 128] ++ bne .L3345 ++ mov w0, w4 ++ str w4, [x29, 128] ++ mov w2, 0 ++ add x1, x29, 156 ++ bl pm_log2phys ++ ldr w4, [x29, 128] ++.L3345: ++ ldr w3, [x29, 156] ++ cmp w28, w3 ++ bne .L3346 ++ ldr x0, [x26, 296] ++ mov w2, 1 ++ add x1, x29, 152 ++ add w23, w23, 1 ++ ldr w0, [x0, x27] ++ str w0, [x29, 152] ++ mov w0, w4 ++ bl pm_log2phys ++ add x0, x19, :lo12:.LANCHOR0 ++ add x3, x22, :lo12:.LANCHOR3 ++ ldrb w1, [x0, 1205] ++ mov w0, 24 ++ ldrh w2, [x3, 1304] ++ sub w0, w0, w1 ++ sub w1, w0, w2 ++ mov w0, 1 ++ lsr w28, w28, w2 ++ lsl w0, w0, w1 ++ sub w0, w0, #1 ++ and w28, w0, w28 ++ ldrb w0, [x3, 1306] ++ udiv w0, w28, w0 ++.L3373: ++ bl ftl_vpn_decrement ++ ldr x0, [x26, 280] ++ mov w1, -1 ++ str w1, [x0, x27] ++.L3344: ++ add w25, w25, 1 ++ cmp w24, w25 ++ bne .L3349 ++.L3342: ++ add w21, w21, 1 ++ b .L3341 ++.L3346: ++ ldr x0, [x29, 136] ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L3348 ++ ldr x0, [x29, 104] ++ mov w2, w28 ++ mov w1, w4 ++ bl printk ++.L3348: ++ ldr x0, [x29, 112] ++ ldrh w0, [x0] ++ b .L3373 ++ .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, -96]! ++ mov w3, 0 ++ mov w4, 0 ++ mov w5, 65535 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ add x1, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ add x1, x1, 3416 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ adrp x21, .LANCHOR3 ++ ldrb w0, [x1, 4] ++ add x2, x1, w0, sxtw 1 ++ ldrh w22, [x2, 40] ++ add x2, x21, :lo12:.LANCHOR3 ++ ldrb w6, [x2, 1321] ++ ldrh w2, [x1, 2] ++.L3375: ++ cmp w22, w5 ++ beq .L3377 ++ cbz w4, .L3378 ++ add x1, x20, :lo12:.LANCHOR0 ++ strh w2, [x1, 3418] ++.L3378: ++ cbz w3, .L3379 ++ add x1, x20, :lo12:.LANCHOR0 ++ strb w0, [x1, 3420] ++.L3379: ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w0, 1 ++ add x19, x20, 3416 ++ bl buf_alloc ++ add x25, x21, :lo12:.LANCHOR3 ++ mov x23, x0 ++ mov w24, 1 ++.L3380: ++ ldrb w1, [x19, 6] ++ cmp w24, w1 ++ ble .L3390 ++ mov x0, x23 ++ bl zbuf_free ++ ldrb w0, [x19, 4] ++ add x21, x21, :lo12:.LANCHOR3 ++ add w0, w0, 1 ++ and w0, w0, 255 ++ ldrb w1, [x21, 1321] ++ strb w0, [x19, 4] ++ cmp w1, w0 ++ bne .L3374 ++ ldrh w0, [x19, 2] ++ strb wzr, [x19, 4] ++ add w0, w0, 1 ++ strh w0, [x19, 2] ++.L3374: ++ 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 ++.L3377: ++ add w0, w0, 1 ++ and w0, w0, 255 ++ cmp w0, w6 ++ bne .L3376 ++ add w2, w2, 1 ++ mov w0, 0 ++ and w2, w2, 65535 ++ mov w4, 1 ++.L3376: ++ add x3, x1, w0, sxtw 1 ++ ldrh w22, [x3, 40] ++ mov w3, 1 ++ b .L3375 ++.L3390: ++ ldrh w0, [x25, 1410] ++ cmp w1, 2 ++ mul w0, w0, w22 ++ bne .L3381 ++ ldrh w1, [x19, 2] ++ lsl w1, w1, 1 ++.L3400: ++ sub w1, w1, #1 ++ add w0, w24, w0 ++ add w0, w1, w0 ++ ldrb w1, [x25, 1320] ++ orr w0, w0, w1, lsl 24 ++.L3399: ++ str w0, [x23, 40] ++ mov w1, 1 ++ mov x0, x23 ++ bl sblk_read_page ++ ldr w0, [x23, 52] ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ beq .L3387 ++ ldr x0, [x23, 24] ++ ldr w26, [x0, 4] ++ mov w0, w26 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 92] ++ cmn w0, #1 ++ bne .L3388 ++ ldr w0, [x20, 3364] ++ cmp w26, w0 ++ bcs .L3388 ++ mov w2, 0 ++ add x1, x29, 92 ++ mov w0, w26 ++ bl pm_log2phys ++.L3388: ++ ldr w0, [x23, 40] ++ ldr w1, [x29, 92] ++ cmp w0, w1 ++ bne .L3387 ++ ldrh w2, [x19, 24] ++ ldr x1, [x25, 1312] ++ str w0, [x1, x2, lsl 2] ++ ldrh w0, [x19, 24] ++ add w0, w0, 1 ++ strh w0, [x19, 24] ++.L3387: ++ ldrh w0, [x19, 26] ++ add w24, w24, 1 ++ add w0, w0, 1 ++ strh w0, [x19, 26] ++ b .L3380 ++.L3381: ++ cmp w1, 3 ++ bne .L3383 ++ ldrb w1, [x20, 1212] ++ cbnz w1, .L3384 ++ ldrb w1, [x20, 1213] ++ cbz w1, .L3385 ++.L3384: ++ ldrh w1, [x19, 2] ++ add w1, w1, w1, lsl 1 ++ b .L3400 ++.L3385: ++ ldrh w1, [x19, 2] ++ add w0, w1, w0 ++ orr w0, w0, w24, lsl 24 ++ b .L3399 ++.L3383: ++ ldrh w1, [x19, 2] ++ add w0, w1, w0 ++ b .L3399 ++ .size gc_scan_src_blk_one_page, .-gc_scan_src_blk_one_page ++ .align 2 ++ .global gc_scan_src_blk ++ .type gc_scan_src_blk, %function ++gc_scan_src_blk: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x20, .LANCHOR0 ++ add x0, x20, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ str x27, [sp, 80] ++ ldrh w1, [x0, 3416] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L3402 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 880 ++ mov w2, 1505 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3402: ++ add x0, x20, :lo12:.LANCHOR0 ++ mov w2, 65535 ++ ldrh w1, [x0, 3416] ++ cmp w1, w2 ++ beq .L3432 ++ adrp x2, .LANCHOR2 ++ ldr w2, [x2, #:lo12:.LANCHOR2] ++ tbz x2, 8, .L3404 ++ ldr x0, [x0, 1120] ++ ubfiz x2, x1, 1, 16 ++ ldrh w2, [x0, x2] ++ adrp x0, .LC252 ++ add x0, x0, :lo12:.LC252 ++ bl printk ++.L3404: ++ bl timer_get_time ++ add x14, x20, :lo12:.LANCHOR0 ++ add x15, x14, 3416 ++ add x1, x14, 3456 ++ ldrh w0, [x14, 3416] ++ bl ftl_get_blk_list_in_sblk ++ and w1, w0, 255 ++ strb w1, [x15, 5] ++ cbnz w1, .L3405 ++ mov w0, -1 ++ strh w0, [x14, 3416] ++.L3432: ++ mov w0, 0 ++ b .L3401 ++.L3405: ++ ldrh w3, [x14, 3416] ++ ldr x1, [x14, 1104] ++ mov x2, x3 ++ add x1, x1, x3, lsl 2 ++ ldrb w1, [x1, 2] ++ and w1, w1, 224 ++ cmp w1, 32 ++ beq .L3406 ++ cmp w1, 224 ++ beq .L3406 ++ cbz w1, .L3407 ++ ldr x1, [x14, 1128] ++ ldrh w3, [x1, 16] ++ cmp w3, w2 ++ beq .L3406 ++ ldrh w3, [x1, 48] ++ cmp w3, w2 ++ beq .L3406 ++ ldrh w1, [x1, 80] ++ cmp w1, w2 ++ bne .L3452 ++.L3406: ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w0, -1 ++ strh wzr, [x20, 3440] ++ strh w0, [x20, 3416] ++ b .L3432 ++.L3407: ++ ldr x0, [x14, 1120] ++ ldrh w0, [x0, x3, lsl 1] ++ cbz w0, .L3409 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 880 ++ mov w2, 1530 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3409: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrh w1, [x0, 3416] ++ ldr x0, [x0, 1120] ++ strh wzr, [x0, x1, lsl 1] ++ b .L3406 ++.L3452: ++ and w0, w0, 255 ++ sub w0, w0, #1 ++ add x0, x15, w0, sxtw 1 ++ ldrh w22, [x0, 40] ++ mov w0, 65535 ++ cmp w22, w0 ++ bne .L3410 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 880 ++ mov w2, 1540 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3410: ++ add x3, x20, :lo12:.LANCHOR0 ++ adrp x23, .LANCHOR3 ++ add x1, x23, :lo12:.LANCHOR3 ++ ldrh w2, [x3, 3416] ++ ldr x3, [x3, 1104] ++ ldrh w21, [x1, 1410] ++ ldrh w0, [x1, 1376] ++ add x2, x3, x2, lsl 2 ++ sub w0, w0, #1 ++ and w0, w0, 65535 ++ mul w21, w21, w22 ++ ldrb w2, [x2, 2] ++ and w2, w2, 224 ++ cmp w2, 160 ++ bne .L3433 ++ ldrb w2, [x1, 1320] ++ and w27, w2, 65535 ++ cmp w2, 2 ++ orr w21, w21, w2, lsl 24 ++ bne .L3412 ++ ldrh w0, [x1, 1338] ++ sub w0, w0, #1 ++ and w0, w0, 65535 ++.L3412: ++ add x1, x20, :lo12:.LANCHOR0 ++ ldrb w2, [x1, 1212] ++ cbnz w2, .L3413 ++ ldrb w1, [x1, 1213] ++ cbz w1, .L3411 ++.L3413: ++ add x0, x23, :lo12:.LANCHOR3 ++ ldrh w0, [x0, 1338] ++ sub w0, w0, #1 ++ and w0, w0, 65535 ++.L3411: ++ add x24, x20, :lo12:.LANCHOR0 ++ orr w21, w0, w21 ++ mov w0, 1 ++ strb w27, [x24, 3422] ++ strh wzr, [x24, 3418] ++ strb wzr, [x24, 3420] ++ strh wzr, [x24, 3442] ++ strh wzr, [x24, 3444] ++ bl buf_alloc ++ mov x19, x0 ++ str w21, [x0, 40] ++ mov w1, 1 ++ bl sblk_read_page ++ strh wzr, [x24, 3440] ++ ldr w0, [x19, 52] ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ bne .L3414 ++.L3457: ++ mov x0, x19 ++ bl zbuf_free ++.L3455: ++ mov w0, -1 ++.L3401: ++ 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 ++.L3433: ++ mov w27, 1 ++ b .L3411 ++.L3414: ++ ldr x0, [x19, 24] ++ mov w1, 15555 ++ movk w1, 0xf55f, lsl 16 ++ ldr w2, [x0] ++ cmp w2, w1 ++ beq .L3415 ++ mov w2, 1578 ++.L3458: ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 880 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ b .L3457 ++.L3415: ++ add x1, x23, :lo12:.LANCHOR3 ++ adrp x26, .LANCHOR5 ++ add x2, x26, :lo12:.LANCHOR5 ++ ldrb w24, [x1, 1321] ++ ldrh w25, [x1, 1376] ++ ldrb w3, [x2, 465] ++ cmp w3, 2 ++ mul w25, w24, w25 ++ mul w25, w27, w25 ++ and w25, w25, 65535 ++ bne .L3416 ++ cmp w27, 3 ++ bne .L3416 ++ ldrh w0, [x2, 462] ++ ldrh w2, [x1, 1338] ++ ldr x3, [x1, 1312] ++ ldr x1, [x19, 8] ++ ubfiz w2, w2, 2, 14 ++ mul w24, w24, w2 ++ sub w24, w24, w0 ++ and x0, x0, 65532 ++ and w24, w24, 65535 ++ add x0, x3, x0 ++ mov w2, w24 ++ bl ftl_memcpy ++ ldr x0, [x19, 24] ++ ldr w27, [x0, 4] ++ cbz w27, .L3417 ++ ldr x0, [x19, 8] ++ mov w1, w24 ++ bl js_hash ++ cmp w27, w0 ++ beq .L3417 ++ mov x0, x19 ++ bl zbuf_free ++ ldr x0, [x19, 24] ++ mov w3, w24 ++.L3456: ++ ldr w1, [x0, 4] ++ adrp x0, .LC253 ++ ldr w2, [x19, 40] ++ add x0, x0, :lo12:.LC253 ++ bl printk ++ b .L3455 ++.L3417: ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 1212] ++ cbnz w1, .L3418 ++ ldrb w0, [x0, 1213] ++ cbz w0, .L3419 ++.L3418: ++ sub w0, w21, #1 ++ str w0, [x19, 40] ++.L3420: ++ mov w1, 1 ++ mov x0, x19 ++ bl sblk_read_page ++ ldr w0, [x19, 52] ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ beq .L3457 ++ ldr x0, [x19, 24] ++ ldr w1, [x0] ++ mov w0, 15555 ++ movk w0, 0xf55f, lsl 16 ++ cmp w1, w0 ++ beq .L3422 ++ mov w2, 1619 ++ b .L3458 ++.L3419: ++ add x1, x23, :lo12:.LANCHOR3 ++ ldrh w0, [x1, 1376] ++ ldrh w1, [x1, 1410] ++ sub w0, w0, #1 ++ and w0, w0, 65535 ++ orr w0, w0, 33554432 ++ mul w22, w1, w22 ++ orr w22, w0, w22 ++ str w22, [x19, 40] ++ b .L3420 ++.L3422: ++ add x26, x26, :lo12:.LANCHOR5 ++ add x0, x23, :lo12:.LANCHOR3 ++ ldrh w2, [x26, 462] ++.L3454: ++ ldr x0, [x0, 1312] ++ add x23, x23, :lo12:.LANCHOR3 ++ ldr x1, [x19, 8] ++ add x24, x20, :lo12:.LANCHOR0 ++ add x21, x24, 3416 ++ mov x27, 0 ++ mov w26, 24 ++ bl ftl_memcpy ++ ldr x22, [x23, 1312] ++.L3425: ++ cmp w25, w27 ++ bgt .L3430 ++ mov x0, x19 ++ bl zbuf_free ++ add x0, x20, :lo12:.LANCHOR0 ++ ldrh w1, [x0, 3416] ++ ldr x3, [x0, 1120] ++ ubfiz x2, x1, 1, 16 ++ ldrh w2, [x3, x2] ++ ldrh w3, [x0, 3440] ++ cmp w2, w3 ++ beq .L3431 ++ adrp x0, .LC254 ++ add x0, x0, :lo12:.LC254 ++ bl printk ++.L3431: ++ add x20, x20, :lo12:.LANCHOR0 ++ ldrh w2, [x20, 3416] ++ ldr x1, [x20, 1120] ++ ldrh w3, [x20, 3440] ++ strh w3, [x1, x2, lsl 1] ++ strh wzr, [x20, 3444] ++ ldrh w0, [x20, 3440] ++ b .L3401 ++.L3416: ++ ldr w22, [x0, 4] ++ lsl w21, w25, 2 ++ ldr x0, [x19, 8] ++ mov w1, w21 ++ bl js_hash ++ cmp w22, w0 ++ beq .L3424 ++ mov x0, x19 ++ bl zbuf_free ++ mov w3, w21 ++ ldr x0, [x19, 24] ++ b .L3456 ++.L3424: ++ add x0, x23, :lo12:.LANCHOR3 ++ mov w2, w21 ++ b .L3454 ++.L3430: ++ ldr w0, [x22, x27, lsl 2] ++ cmn w0, #1 ++ beq .L3427 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 108] ++ cmn w0, #1 ++ bne .L3428 ++ ldr w0, [x22, x27, lsl 2] ++ mov w2, 0 ++ add x1, x29, 108 ++ bl pm_log2phys ++.L3428: ++ ldrb w1, [x24, 1205] ++ ldrh w2, [x23, 1304] ++ sub w0, w26, w1 ++ ldr w3, [x29, 108] ++ sub w1, w0, w2 ++ mov w0, 1 ++ lsl w0, w0, w1 ++ ldrb w1, [x23, 1306] ++ sub w0, w0, #1 ++ lsr w2, w3, w2 ++ and w0, w0, w2 ++ udiv w0, w0, w1 ++ ldrh w1, [x21] ++ cmp w0, w1 ++ bne .L3427 ++ ldrh w1, [x21, 24] ++ ldr x0, [x23, 1312] ++ str w3, [x0, x1, lsl 2] ++ ldrh w0, [x21, 24] ++ add w0, w0, 1 ++ strh w0, [x21, 24] ++.L3427: ++ bl timer_get_time ++ add x27, x27, 1 ++ b .L3425 ++ .size gc_scan_src_blk, .-gc_scan_src_blk ++ .align 2 ++ .global gc_scan_static_data ++ .type gc_scan_static_data, %function ++gc_scan_static_data: ++ stp x29, x30, [sp, -64]! ++ adrp x1, .LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ add x19, x1, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ ldr x0, [x19, 1128] ++ ldr w2, [x0, 544] ++ cmn w2, #1 ++ beq .L3460 ++ adrp x20, .LANCHOR4 ++ add x20, x20, :lo12:.LANCHOR4 ++ add x20, x20, 896 ++ mov w21, 0 ++.L3468: ++ ldr x0, [x19, 1128] ++ mov w2, 0 ++ add x1, x29, 60 ++ ldr w0, [x0, 544] ++ bl pm_log2phys ++ ldr w0, [x29, 60] ++ cmn w0, #1 ++ beq .L3461 ++ mov w0, 1 ++ bl buf_alloc ++ ldr w1, [x29, 60] ++ mov x22, x0 ++ str w1, [x0, 40] ++ mov w1, 1 ++ bl sblk_read_page ++ ldr w0, [x22, 52] ++ cmp w0, 256 ++ bne .L3462 ++ adrp x2, .LANCHOR3 ++ add x2, x2, :lo12:.LANCHOR3 ++ ldrb w1, [x19, 1205] ++ mov w0, 24 ++ ldr w3, [x29, 60] ++ ldrh w4, [x2, 1304] ++ sub w0, w0, w1 ++ mov w1, 1 ++ sub w0, w0, w4 ++ lsr w3, w3, w4 ++ lsl w0, w1, w0 ++ sub w0, w0, #1 ++ and w0, w0, w3 ++ ldrb w3, [x2, 1306] ++ mov w2, 0 ++ udiv w0, w0, w3 ++ bl gc_add_sblk ++.L3462: ++ ldr x0, [x19, 1128] ++ ldr x1, [x22, 24] ++ ldr w0, [x0, 544] ++ ldr w1, [x1, 4] ++ cmp w1, w0 ++ beq .L3463 ++ mov x1, x20 ++ mov w2, 2163 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3463: ++ mov x0, x22 ++ bl zbuf_free ++.L3461: ++ ldr x0, [x19, 1128] ++ ldr w2, [x19, 3364] ++ ldr w1, [x0, 544] ++ add w1, w1, 1 ++ str w1, [x0, 544] ++ cmp w1, w2 ++ bcc .L3464 ++ 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 ++.L3459: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 64 ++ ret ++.L3464: ++ ldr w0, [x29, 60] ++ cmn w0, #1 ++ bne .L3459 ++ adrp x1, .LANCHOR5+462 ++ add w0, w21, 1 ++ and w0, w0, 65535 ++ ldrh w1, [x1, #:lo12:.LANCHOR5+462] ++ cmp w21, w1, lsr 2 ++ bcs .L3459 ++ mov w21, w0 ++ b .L3468 ++.L3460: ++ ldr w2, [x0, 536] ++ ldr w3, [x0, 12] ++ add w2, w2, 12959744 ++ add w2, w2, 256 ++ cmp w3, w2 ++ bhi .L3470 ++ ldr w2, [x0, 540] ++ mov w4, 5000 ++ add w2, w2, w4 ++ ldr x4, [x19, 3384] ++ ldr w4, [x4, 44] ++ cmp w4, w2 ++ bls .L3459 ++.L3470: ++ add x1, x1, :lo12:.LANCHOR0 ++ ldr x1, [x1, 3384] ++ ldr w1, [x1, 44] ++ str w1, [x0, 540] ++ str w3, [x0, 536] ++ str wzr, [x0, 544] ++ b .L3459 ++ .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, 1128] ++ ldrh w0, [x20, 1096] ++ ldr w1, [x1, 608] ++ cmp w1, w0 ++ bcs .L3476 ++ bl timer_get_time ++ ldr x21, [x20, 1128] ++ mov w2, 30000 ++ ldr w1, [x21, 604] ++ add w1, w1, w2 ++ cmp w0, w1 ++ bls .L3476 ++ bl timer_get_time ++ str w0, [x21, 604] ++ ldr x0, [x20, 1128] ++ ldrh w2, [x20, 1096] ++ ldr w1, [x0, 600] ++ cmp w1, w2 ++ bcs .L3478 ++ ldr x2, [x20, 3384] ++ ldrh w2, [x2, 134] ++ cmp w1, w2 ++ bcs .L3479 ++.L3478: ++ add x1, x19, :lo12:.LANCHOR0 ++ ldr x1, [x1, 3384] ++ ldrh w1, [x1, 134] ++ str w1, [x0, 600] ++.L3479: ++ ldr w25, [x0, 600] ++ mov w0, 65535 ++ and w21, w25, 65535 ++ cmp w21, w0 ++ bne .L3480 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 920 ++ mov w2, 2504 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3480: ++ add x14, x19, :lo12:.LANCHOR0 ++ add x15, x29, 128 ++ ldr x0, [x14, 1128] ++ ldr w1, [x0, 600] ++ add w1, w1, 1 ++ str w1, [x0, 600] ++ ldr w1, [x0, 608] ++ add w1, w1, 1 ++ str w1, [x0, 608] ++ mov x1, x15 ++ mov w0, w21 ++ bl ftl_get_blk_list_in_sblk ++ mov w1, w0 ++ tst w0, 65535 ++ beq .L3476 ++ ldr x24, [x14, 1104] ++ uxtw x23, w21 ++ mov w2, 224 ++ add x24, x24, x23, lsl 2 ++ ldrb w0, [x24, 2] ++ and w0, w0, 224 ++ cmp w0, 32 ++ ccmp w0, w2, 4, ne ++ beq .L3481 ++ cbz w0, .L3482 ++ ldr x0, [x14, 1128] ++ ldrh w2, [x0, 16] ++ cmp w2, w21 ++ beq .L3476 ++ ldrh w2, [x0, 48] ++ cmp w2, w21 ++ beq .L3476 ++ ldrh w0, [x0, 80] ++ cmp w0, w21 ++ bne .L3512 ++.L3476: ++ 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 ++.L3481: ++ cbnz w0, .L3476 ++.L3482: ++ add x0, x19, :lo12:.LANCHOR0 ++ lsl x23, x23, 1 ++ ldr x0, [x0, 1120] ++ ldrh w0, [x0, x23] ++ cbz w0, .L3484 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 920 ++ mov w2, 2521 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3484: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldr x0, [x19, 1120] ++ strh wzr, [x0, x23] ++ b .L3476 ++.L3512: ++ and w1, w1, 65535 ++ mov w0, 65535 ++ sub w1, w1, #1 ++ ldrh w26, [x15, w1, sxtw 1] ++ cmp w26, w0 ++ bne .L3486 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 920 ++ mov w2, 2529 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3486: ++ adrp x20, .LANCHOR3 ++ add x2, x20, :lo12:.LANCHOR3 ++ ldrb w1, [x24, 2] ++ ldrh w22, [x2, 1410] ++ and w1, w1, 224 ++ ldrh w0, [x2, 1376] ++ cmp w1, 160 ++ sub w0, w0, #1 ++ and w0, w0, 65535 ++ mul w22, w22, w26 ++ bne .L3496 ++ ldrb w1, [x2, 1320] ++ cmp w1, 2 ++ orr w22, w22, w1, lsl 24 ++ beq .L3488 ++ and w26, w1, 65535 ++.L3487: ++ add x20, x20, :lo12:.LANCHOR3 ++ orr w22, w0, w22 ++ mov w0, 1 ++ bl buf_alloc ++ str w22, [x0, 40] ++ mov x27, x0 ++ mov w1, 1 ++ bl sblk_read_page ++ ldrb w0, [x20, 1321] ++ mov w1, 255 ++ ldrh w2, [x20, 1338] ++ mul w2, w2, w0 ++ ldr x0, [x20, 1312] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldr w0, [x27, 52] ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ bne .L3489 ++.L3514: ++ mov w2, 0 ++ mov w1, 1 ++ mov w0, w21 ++ bl gc_add_sblk ++ mov x0, x27 ++ bl zbuf_free ++ b .L3476 ++.L3488: ++ ldrh w0, [x2, 1338] ++ mov w26, w1 ++ sub w0, w0, #1 ++ and w0, w0, 65535 ++ b .L3487 ++.L3496: ++ mov w26, 1 ++ b .L3487 ++.L3489: ++ ldr x0, [x27, 24] ++ ldr w1, [x0] ++ mov w0, 15555 ++ movk w0, 0xf55f, lsl 16 ++ cmp w1, w0 ++ bne .L3514 ++ ldrh w0, [x20, 1376] ++ mov x28, 0 ++ ldrb w1, [x20, 1321] ++ mov w22, 0 ++ mul w1, w1, w0 ++ mul w1, w26, w1 ++ ldr x26, [x27, 8] ++ and w0, w1, 65535 ++ str w0, [x29, 108] ++ and w0, w25, 65535 ++ str w0, [x29, 104] ++ add x0, x19, :lo12:.LANCHOR0 ++ str x0, [x29, 96] ++.L3491: ++ ldr w0, [x29, 108] ++ cmp w0, w28 ++ bgt .L3494 ++ mov x0, x27 ++ bl zbuf_free ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L3495 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w4, [x24, 2] ++ mov w3, w22 ++ and w1, w25, 65535 ++ ldr x0, [x0, 1120] ++ ubfx x4, x4, 5, 3 ++ ldrh w2, [x0, x23, lsl 1] ++ adrp x0, .LC255 ++ add x0, x0, :lo12:.LC255 ++ bl printk ++.L3495: ++ add x19, x19, :lo12:.LANCHOR0 ++ cmp w22, 31 ++ ldr x0, [x19, 1120] ++ strh w22, [x0, x23, lsl 1] ++ bhi .L3476 ++ mov w2, 0 ++ mov w1, 1 ++ mov w0, w21 ++ bl gc_add_sblk ++ b .L3476 ++.L3494: ++ ldr w0, [x26, x28, lsl 2] ++ cmn w0, #1 ++ beq .L3492 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 124] ++ cmn w0, #1 ++ bne .L3493 ++ ldr w0, [x26, x28, lsl 2] ++ mov w2, 0 ++ add x1, x29, 124 ++ bl pm_log2phys ++.L3493: ++ ldr x0, [x29, 96] ++ mov w1, 24 ++ ldrh w2, [x20, 1304] ++ ldrb w0, [x0, 1205] ++ sub w0, w1, w0 ++ sub w1, w0, w2 ++ mov w0, 1 ++ lsl w0, w0, w1 ++ ldr w1, [x29, 124] ++ sub w0, w0, #1 ++ lsr w1, w1, w2 ++ and w0, w0, w1 ++ ldrb w1, [x20, 1306] ++ udiv w0, w0, w1 ++ ldr w1, [x29, 104] ++ cmp w1, w0 ++ bne .L3492 ++ add w22, w22, 1 ++ and w22, w22, 65535 ++.L3492: ++ add x28, x28, 1 ++ b .L3491 ++ .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, #288 ++ and x0, x0, 65535 ++ stp x29, x30, [sp, 48] ++ add x29, sp, 48 ++ stp x19, x20, [sp, 64] ++ mov x20, x0 ++ stp x21, x22, [sp, 80] ++ adrp x21, .LANCHOR0 ++ add x19, x21, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 96] ++ stp x25, x26, [sp, 112] ++ lsl x23, x0, 2 ++ stp x27, x28, [sp, 128] ++ str x0, [x29, 136] ++ ldr x0, [x19, 1104] ++ str x1, [x29, 152] ++ add x1, x0, x23 ++ ldr w5, [x0, x23] ++ ldrb w2, [x1, 2] ++ mov w1, w20 ++ ldrh w4, [x0, x23] ++ adrp x0, .LC256 ++ ubfx x5, x5, 11, 8 ++ add x0, x0, :lo12:.LC256 ++ ubfx x3, x2, 3, 2 ++ and w4, w4, 2047 ++ ubfx x2, x2, 5, 3 ++ bl printk ++ str x21, [x29, 160] ++ mov w0, 65535 ++ cmp w20, w0 ++ beq .L3537 ++ ldrh w1, [x19, 1096] ++ mov w0, 0 ++ cmp w1, w20 ++ bls .L3515 ++ ldr x0, [x19, 1104] ++ adrp x28, .LANCHOR3 ++ add x0, x0, x23 ++ ldrb w0, [x0, 2] ++ and w0, w0, 224 ++ cmp w0, 160 ++ bne .L3539 ++ add x0, x28, :lo12:.LANCHOR3 ++ ldrb w24, [x0, 1320] ++.L3517: ++ add x27, x29, 240 ++ mov w0, w20 ++ mov w19, 0 ++ strh w20, [x27, -32]! ++ add x1, x27, 16 ++ bl ftl_get_blk_list_in_sblk ++ add x2, x28, :lo12:.LANCHOR3 ++ and w1, w0, 255 ++ strb w1, [x29, 217] ++ and w4, w0, 255 ++ strh wzr, [x29, 210] ++ mov w3, w24 ++ ldrh w2, [x2, 1376] ++ adrp x0, .LC257 ++ strb wzr, [x29, 213] ++ add x0, x0, :lo12:.LC257 ++ strh wzr, [x29, 218] ++ mul w1, w1, w2 ++ strh w1, [x29, 214] ++ ldr x1, [x29, 160] ++ add x1, x1, :lo12:.LANCHOR0 ++ ldr x1, [x1, 1104] ++ add x1, x1, x23 ++ ldrb w2, [x1, 2] ++ mov w1, w20 ++ ubfx x2, x2, 5, 3 ++ bl printk ++ mov w0, 1 ++ bl buf_alloc ++ stp wzr, wzr, [x29, 168] ++ mov x25, x0 ++ str wzr, [x29, 176] ++ adrp x0, .LC195 ++ add x0, x0, :lo12:.LC195 ++ str x0, [x29, 120] ++.L3518: ++ add x0, x28, :lo12:.LANCHOR3 ++ ldrh w0, [x0, 1376] ++ cmp w0, w19 ++ bls .L3535 ++ lsl w0, w19, 1 ++ mov w22, 0 ++ sub w1, w0, #1 ++ add w0, w0, w19 ++ sub w0, w0, #1 ++ stp w1, w0, [x29, 144] ++ b .L3536 ++.L3539: ++ mov w24, 1 ++ b .L3517 ++.L3532: ++ ldr x0, [x29, 128] ++ ldrh w10, [x27, x0] ++ mov w0, 65535 ++ cmp w10, w0 ++ beq .L3519 ++ add x2, x28, :lo12:.LANCHOR3 ++ cmp w24, 3 ++ ldrh w8, [x2, 1410] ++ mul w1, w8, w10 ++ add w0, w21, w1 ++ bne .L3520 ++ ldr x3, [x29, 160] ++ add x3, x3, :lo12:.LANCHOR0 ++ ldrb w4, [x3, 1212] ++ cbz w4, .L3521 ++ ldrb w8, [x2, 1320] ++ ldr w1, [x29, 148] ++.L3548: ++ add w0, w0, w1 ++ orr w26, w0, w8, lsl 24 ++ b .L3522 ++.L3521: ++ ldrb w2, [x3, 1213] ++ lsl w8, w21, 24 ++ cbz w2, .L3523 ++ ldr w1, [x29, 148] ++ add w0, w0, w1 ++ orr w26, w0, w8 ++.L3522: ++ str w26, [x25, 40] ++ mov w1, 1 ++ str w10, [x29, 108] ++ mov x0, x25 ++ bl sblk_read_page ++ ldr x1, [x25, 24] ++ mov w3, w26 ++ ldr x0, [x25, 8] ++ ldr w11, [x25, 52] ++ ldr w10, [x29, 108] ++ ldr w2, [x1, 12] ++ mov w4, w11 ++ str w2, [sp, 32] ++ str w11, [x29, 112] ++ ldr w2, [x1, 8] ++ str w2, [sp, 24] ++ ldr w2, [x1, 4] ++ str w2, [sp, 16] ++ mov w2, w19 ++ ldr w1, [x1] ++ str w1, [sp, 8] ++ ldr w1, [x0, 12] ++ str w1, [sp] ++ mov w1, w10 ++ ldp w5, w6, [x0] ++ ldr w7, [x0, 8] ++ ldr x0, [x29, 120] ++ bl printk ++ ldr w11, [x29, 112] ++ ldr w0, [x29, 168] ++ cmp w11, 512 ++ ccmn w11, #1, 4, ne ++ csinc w0, w0, wzr, ne ++ str w0, [x29, 168] ++ mov x0, 35160 ++ movk x0, 0x41, lsl 16 ++ bl __const_udelay ++ ldr x0, [x29, 160] ++ mov w1, 32 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldr x0, [x0, 1104] ++ add x0, x0, x23 ++ ldrb w0, [x0, 2] ++ and w0, w0, 224 ++ cmp w0, 224 ++ ccmp w0, w1, 4, ne ++ beq .L3519 ++ ldr x0, [x25, 24] ++ ldr w0, [x0, 4] ++ bl lpa_hash_get_ppa ++ str w0, [x29, 204] ++ cmn w0, #1 ++ bne .L3526 ++ ldr x0, [x25, 24] ++ mov w2, 0 ++ add x1, x29, 204 ++ ldr w0, [x0, 4] ++ bl pm_log2phys ++.L3526: ++ ldr w0, [x29, 204] ++ cmp w26, w0 ++ bne .L3527 ++ ldr w0, [x29, 172] ++ mov w1, w26 ++ add w0, w0, 1 ++ str w0, [x29, 172] ++ ldr x0, [x25, 24] ++ ldr w3, [x29, 172] ++ ldr w2, [x0, 4] ++ adrp x0, .LC258 ++ add x0, x0, :lo12:.LC258 ++ bl printk ++.L3527: ++ ldr x0, [x29, 152] ++ cbz x0, .L3529 ++ ldr x0, [x29, 176] ++ ubfiz x3, x0, 2, 32 ++ ldr x0, [x29, 152] ++ ldr w2, [x0, x3] ++ ldr x0, [x25, 24] ++ ldr w0, [x0, 4] ++ cmp w0, w2 ++ beq .L3530 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L3530 ++ ldr w1, [x29, 176] ++ adrp x0, .LC259 ++ str x3, [x29, 112] ++ add x0, x0, :lo12:.LC259 ++ bl printk ++ ldr x3, [x29, 112] ++.L3530: ++ ldr x1, [x25, 24] ++ ldr x0, [x29, 152] ++ ldr w1, [x1, 4] ++ ldr w0, [x0, x3] ++ cmp w1, w0 ++ beq .L3529 ++ cmn w0, #1 ++ beq .L3529 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 944 ++ mov w2, 1575 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3529: ++ ldr w0, [x29, 176] ++ add w0, w0, 1 ++ str w0, [x29, 176] ++.L3519: ++ add w21, w21, 1 ++ and w21, w21, 65535 ++.L3534: ++ cmp w24, w21 ++ bcs .L3532 ++ add w22, w22, 1 ++ and w22, w22, 65535 ++.L3536: ++ ldrb w0, [x29, 217] ++ cmp w0, w22 ++ bls .L3533 ++ sxtw x0, w22 ++ mov w21, 1 ++ add x0, x0, 8 ++ lsl x0, x0, 1 ++ str x0, [x29, 128] ++ b .L3534 ++.L3523: ++ add w1, w19, w1 ++ orr w26, w8, w1 ++ b .L3522 ++.L3520: ++ cmp w24, 2 ++ bne .L3524 ++ ldrb w8, [x2, 1320] ++ ldr w1, [x29, 144] ++ b .L3548 ++.L3524: ++ add w26, w19, w1 ++ b .L3522 ++.L3533: ++ add w19, w19, 1 ++ and w19, w19, 65535 ++ b .L3518 ++.L3535: ++ mov x0, x25 ++ bl zbuf_free ++ ldr x0, [x29, 160] ++ ldr x1, [x29, 136] ++ add x0, x0, :lo12:.LANCHOR0 ++ ldr w3, [x29, 172] ++ ldr x0, [x0, 1120] ++ ldrh w2, [x0, x1, lsl 1] ++ mov w1, w20 ++ adrp x0, .LC260 ++ add x0, x0, :lo12:.LC260 ++ bl printk ++ ldr w0, [x29, 168] ++.L3515: ++ 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, 288 ++ ret ++.L3537: ++ mov w0, 0 ++ b .L3515 ++ .size ftl_sblk_dump, .-ftl_sblk_dump ++ .align 2 ++ .global zftl_read ++ .type zftl_read, %function ++zftl_read: ++ sub sp, sp, #176 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ mov w20, w0 ++ adrp x0, .LANCHOR2 ++ stp x23, x24, [sp, 64] ++ stp x21, x22, [sp, 48] ++ mov w19, w1 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ mov w24, w2 ++ stp x25, x26, [sp, 80] ++ mov x23, x3 ++ stp x27, x28, [sp, 96] ++ tbz x0, 12, .L3550 ++ mov w3, w2 ++ adrp x0, .LC261 ++ mov w2, w1 ++ add x0, x0, :lo12:.LC261 ++ mov w1, w20 ++ bl printk ++.L3550: ++ cbnz w20, .L3551 ++ adrp x0, .LANCHOR0+1032 ++ mov w20, 24576 ++ ldr w0, [x0, #:lo12:.LANCHOR0+1032] ++.L3552: ++ cmp w0, w19 ++ ccmp w0, w24, 0, hi ++ bcc .L3585 ++ add w1, w19, w24 ++ cmp w0, w1 ++ bcc .L3585 ++ add w20, w20, w19 ++ adrp x19, .LANCHOR0 ++ add x0, x19, :lo12:.LANCHOR0 ++ adrp x21, .LANCHOR3 ++ ldr x1, [x0, 3384] ++ ldr w0, [x1, 24] ++ add w0, w0, w24 ++ str w0, [x1, 24] ++ add x0, x21, :lo12:.LANCHOR3 ++ add w1, w24, w20 ++ stp w1, wzr, [x29, 136] ++ sub w1, w1, #1 ++ ldrb w0, [x0, 1946] ++ udiv w26, w20, w0 ++ udiv w0, w1, w0 ++ mov w22, w26 ++ sub w25, w0, w26 ++ str w0, [x29, 132] ++ add w25, w25, 1 ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ add x0, x0, 960 ++ str x0, [x29, 112] ++.L3554: ++ cbnz w25, .L3582 ++ bl timer_get_time ++ adrp x1, .LANCHOR5+468 ++ str w0, [x1, #:lo12:.LANCHOR5+468] ++ ldr w0, [x29, 140] ++.L3549: ++ 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, 176 ++ ret ++.L3551: ++ cmp w20, 3 ++ bhi .L3585 ++ lsl w20, w20, 13 ++ mov w0, 8192 ++ b .L3552 ++.L3582: ++ add x0, x21, :lo12:.LANCHOR3 ++ cmp w22, w26 ++ ldrb w1, [x0, 1946] ++ ldr w0, [x29, 132] ++ and w27, w1, 65535 ++ ccmp w22, w0, 4, ne ++ bne .L3586 ++ cmp w22, w26 ++ bne .L3556 ++ udiv w3, w20, w1 ++ and w0, w24, 65535 ++ msub w1, w3, w1, w20 ++ and w28, w1, 65535 ++ sub w27, w27, w28 ++ and w27, w27, 65535 ++ cmp w24, w27 ++ csel w27, w0, w27, cc ++.L3555: ++ add x1, x19, :lo12:.LANCHOR0 ++ mov w0, 0 ++ add x1, x1, 1306 ++.L3559: ++ ldr w2, [x1, 34] ++ cmp w22, w2 ++ bne .L3557 ++ ldrb w2, [x1] ++ tbz x2, 3, .L3557 ++ add x1, x19, :lo12:.LANCHOR0 ++ ubfiz x0, x0, 6, 32 ++ add x0, x1, x0 ++ lsl w2, w27, 9 ++ ubfiz x27, x27, 9, 16 ++ ubfiz x28, x28, 9, 16 ++ ldr x1, [x0, 1312] ++ mov x0, x23 ++ add x23, x23, x27 ++ add x1, x1, x28 ++ bl ftl_memcpy ++.L3558: ++ add w22, w22, 1 ++ sub w25, w25, #1 ++.L3565: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 3353] ++ cmp w0, 2 ++ bls .L3566 ++ cbnz w25, .L3554 ++.L3566: ++ add x2, x21, :lo12:.LANCHOR3 ++ ldrb w1, [x2, 1957] ++ cbz w1, .L3554 ++ ldrb w2, [x2, 1956] ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x0, x0, x2, lsl 6 ++ bl sblk_read_page ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ str x0, [x29, 120] ++.L3568: ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrb w1, [x0, 1957] ++ cbnz w1, .L3581 ++ mov w1, -1 ++ strb wzr, [x0, 1957] ++ strb w1, [x0, 1956] ++ b .L3554 ++.L3556: ++ ldr w0, [x29, 136] ++ msub w27, w1, w22, w0 ++ and w27, w27, 255 ++.L3586: ++ mov w28, 0 ++ b .L3555 ++.L3557: ++ add w0, w0, 1 ++ add x1, x1, 64 ++ cmp w0, 32 ++ bne .L3559 ++ mov w0, w22 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 156] ++ cmn w0, #1 ++ bne .L3560 ++ mov w2, 0 ++ add x1, x29, 156 ++ mov w0, w22 ++ bl pm_log2phys ++.L3560: ++ ldr w0, [x29, 156] ++ cmn w0, #1 ++ bne .L3561 ++ add x28, x21, :lo12:.LANCHOR3 ++ mov w27, 0 ++.L3562: ++ ldrb w0, [x28, 1946] ++ cmp w27, w0 ++ bcs .L3558 ++ madd w0, w22, w0, w27 ++ cmp w20, w0 ++ bhi .L3563 ++ ldr w1, [x29, 136] ++ cmp w1, w0 ++ bls .L3563 ++ mov x0, x23 ++ add x23, x23, 512 ++ mov w2, 512 ++ mov w1, 0 ++ bl ftl_memset ++.L3563: ++ add w27, w27, 1 ++ b .L3562 ++.L3561: ++ mov w0, 0 ++ bl buf_alloc ++ cbz x0, .L3565 ++ add x2, x19, :lo12:.LANCHOR0 ++ ldr x4, [x2, 3384] ++ ldr w2, [x4, 40] ++ add w2, w2, 1 ++ str w2, [x4, 40] ++ ldr w2, [x29, 156] ++ strb w27, [x0, 56] ++ ubfiz x27, x27, 9, 16 ++ str x23, [x0, 16] ++ add x23, x23, x27 ++ strb w28, [x0, 57] ++ stp w22, w2, [x0, 36] ++ str w2, [x0, 44] ++ bl zftl_add_read_buf ++ b .L3558 ++.L3581: ++ ldrb w0, [x0, 1956] ++ cmp w0, 255 ++ bne .L3569 ++ ldp x1, x0, [x29, 112] ++ mov w2, 1284 ++ bl printk ++ bl dump_stack ++.L3569: ++ add x0, x21, :lo12:.LANCHOR3 ++ add x4, x19, :lo12:.LANCHOR0 ++ add x1, x4, 1304 ++ ldrb w8, [x0, 1956] ++ ubfiz x27, x8, 6, 8 ++ add x28, x1, x27 ++ sxtw x27, w8 ++ lsl x3, x27, 6 ++ add x2, x1, x3 ++ ldrb w1, [x1, x3] ++ ldr w9, [x2, 52] ++ strb w1, [x0, 1956] ++ cmn w9, #1 ++ bne .L3570 ++ ldr x1, [x4, 1128] ++ str w9, [x29, 140] ++ ldr w0, [x1, 552] ++ add w0, w0, 1 ++ str w0, [x1, 552] ++.L3571: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x0, x0, x27, lsl 6 ++ ldr x3, [x0, 24] ++ ldr w0, [x0, 36] ++ ldr w1, [x3, 4] ++ cmp w1, w0 ++ bne .L3572 ++ cmn w9, #1 ++ bne .L3573 ++.L3572: ++ add x0, x21, :lo12:.LANCHOR3 ++ add x5, x19, :lo12:.LANCHOR0 ++ ldrb w4, [x0, 1946] ++ add x0, x5, 1304 ++ add x0, x0, x27, lsl 6 ++ ldrb w6, [x5, 1205] ++ mov w5, 1 ++ ldrb w1, [x0, 56] ++ lsl w5, w5, w6 ++ ldp x2, x7, [x0, 8] ++ cmp w1, w4 ++ sub w5, w5, #1 ++ ldr w1, [x0, 40] ++ mov w0, 24 ++ sub w0, w0, w6 ++ csel x2, x7, x2, cs ++ lsl w6, w5, w0 ++ lsr w0, w1, w0 ++ bic w1, w1, w6 ++ and w0, w0, w5 ++ bl flash_read_page_en ++ mov w9, w0 ++.L3573: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x0, x0, x27, lsl 6 ++ ldr x1, [x0, 24] ++ ldr w0, [x0, 36] ++ ldr w1, [x1, 4] ++ cmp w1, w0 ++ bne .L3575 ++ cmn w9, #1 ++ bne .L3576 ++.L3575: ++ add x11, x19, :lo12:.LANCHOR0 ++ str w9, [x29, 128] ++ add x10, x11, 1304 ++ add x10, x10, x27, lsl 6 ++ stp x11, x10, [x29, 96] ++ ldr x1, [x11, 1128] ++ ldr w0, [x1, 552] ++ add w0, w0, 1 ++ str w0, [x1, 552] ++ ldr x0, [x10, 24] ++ ldrb w1, [x10, 1] ++ ldr w2, [x0, 12] ++ str w2, [sp] ++ mov w2, w9 ++ ldp w3, w4, [x10, 36] ++ ldp w5, w6, [x0] ++ ldr w7, [x0, 8] ++ adrp x0, .LC263 ++ add x0, x0, :lo12:.LC263 ++ bl printk ++ ldp x11, x10, [x29, 96] ++ add x2, x21, :lo12:.LANCHOR3 ++ mov w0, 24 ++ ldrb w1, [x11, 1205] ++ ldrh w3, [x2, 1304] ++ sub w0, w0, w1 ++ ldrb w2, [x2, 1306] ++ sub w1, w0, w3 ++ mov w0, 1 ++ lsl w0, w0, w1 ++ ldr w1, [x10, 40] ++ sub w0, w0, #1 ++ lsr w1, w1, w3 ++ and w0, w0, w1 ++ mov x1, 0 ++ udiv w0, w0, w2 ++ bl ftl_sblk_dump ++ ldr w9, [x29, 128] ++.L3576: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x0, x0, x27, lsl 6 ++ ldr x1, [x0, 24] ++ ldr w0, [x0, 36] ++ ldr w1, [x1, 4] ++ cmp w1, w0 ++ bne .L3577 ++ cmn w9, #1 ++ bne .L3578 ++.L3577: ++ ldp x1, x0, [x29, 112] ++ mov w2, 1320 ++ bl printk ++ bl dump_stack ++.L3578: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x8, x0, x27, lsl 6 ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrb w2, [x8, 56] ++ ldrb w0, [x0, 1946] ++ cmp w0, w2 ++ bls .L3579 ++ ldr x0, [x8, 8] ++ lsl w2, w2, 9 ++ ldrb w1, [x8, 57] ++ add x1, x0, x1, lsl 9 ++ ldr x0, [x8, 16] ++ bl ftl_memcpy ++.L3580: ++ mov x1, x28 ++ add x0, x19, :lo12:.LANCHOR0 ++ add x0, x0, 3355 ++ bl buf_remove_buf ++ mov x0, x28 ++ bl zbuf_free ++ add x1, x21, :lo12:.LANCHOR3 ++ ldrb w0, [x1, 1957] ++ sub w0, w0, #1 ++ strb w0, [x1, 1957] ++ b .L3568 ++.L3570: ++ cmp w9, 256 ++ bne .L3571 ++ ldrb w5, [x4, 1205] ++ mov w4, 24 ++ ldrh w1, [x0, 1304] ++ sub w4, w4, w5 ++ ldr w3, [x2, 40] ++ sub w4, w4, w1 ++ mov w5, 1 ++ ldrb w0, [x0, 1306] ++ lsl w4, w5, w4 ++ sub w4, w4, #1 ++ lsr w1, w3, w1 ++ and w4, w4, w1 ++ ldr w2, [x2, 36] ++ str w9, [x29, 96] ++ udiv w4, w4, w0 ++ str w5, [x29, 104] ++ adrp x0, .LC262 ++ add x0, x0, :lo12:.LC262 ++ and w1, w4, 65535 ++ str w4, [x29, 128] ++ bl printk ++ ldr w5, [x29, 104] ++ mov w2, 0 ++ ldr w4, [x29, 128] ++ mov w1, w5 ++ mov w0, w4 ++ bl gc_add_sblk ++ ldr w9, [x29, 96] ++ b .L3571 ++.L3579: ++ ldrb w0, [x8, 2] ++ and w0, w0, -9 ++ strb w0, [x8, 2] ++ b .L3580 ++.L3585: ++ mov w0, -1 ++ b .L3549 ++ .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 ++ mov w2, w1 ++ add w1, w0, 512 ++ add x29, sp, 0 ++ 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 x3, x2 ++ mov w2, w1 ++ mov w1, w0 ++ add x29, sp, 0 ++ mov w0, 2 ++ bl zftl_read ++ ldp x29, x30, [sp], 16 ++ ret ++ .size zftl_sys_read, .-zftl_sys_read ++ .align 2 ++ .type zftl_debug_proc_write, %function ++zftl_debug_proc_write: ++ sub sp, sp, #224 ++ cmp x2, 79 ++ stp x29, x30, [sp, 32] ++ add x29, sp, 32 ++ stp x19, x20, [sp, 48] ++ add x19, x29, 112 ++ stp x21, x22, [sp, 64] ++ stp x23, x24, [sp, 80] ++ stp x25, x26, [sp, 96] ++ stp x27, x28, [sp, 112] ++ str x19, [x29, 104] ++ bhi .L3623 ++ mov x21, x2 ++ mov x0, x19 ++ bl rk_copy_from_user ++ mov x1, -14 ++ cbnz x0, .L3605 ++ mov x1, x19 ++ strb wzr, [x19, x21] ++ adrp x0, .LC264 ++ add x0, x0, :lo12:.LC264 ++ bl printk ++ mov x1, x19 ++ adrp x0, .LC265 ++ add x0, x0, :lo12:.LC265 ++ mov w3, 16 ++ mov w2, 1 ++ bl rknand_print_hex ++ bl rknand_device_lock ++ mov x2, 7 ++ adrp x1, .LC266 ++ mov x0, x19 ++ add x1, x1, :lo12:.LC266 ++ bl memcmp ++ mov w22, w0 ++ cbnz w0, .L3607 ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ adrp x20, .LANCHOR5 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w2, 4 ++ adrp x0, .LC267 ++ ldr x1, [x19, 3384] ++ add x0, x0, :lo12:.LC267 ++ mov w23, 65535 ++ add x1, x1, 704 ++ ldrh w3, [x1, -6] ++ bl rknand_print_hex ++ ldrh w3, [x20, 220] ++ adrp x0, .LC268 ++ ldr x1, [x19, 3384] ++ mov w2, 2 ++ add x0, x0, :lo12:.LC268 ++ add x1, x1, 416 ++ bl rknand_print_hex ++.L3608: ++ ldrh w0, [x20, 220] ++ cmp w22, w0 ++ blt .L3610 ++.L3611: ++ bl rknand_device_unlock ++ mov x1, x21 ++.L3605: ++ ldp x19, x20, [sp, 48] ++ mov x0, x1 ++ 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, 224 ++ ret ++.L3610: ++ mov w0, 300 ++ bl msleep ++ ldr x0, [x19, 3384] ++ add x0, x0, w22, sxtw 1 ++ ldrh w0, [x0, 416] ++ cmp w0, w23 ++ beq .L3609 ++ mov x1, 0 ++ bl ftl_sblk_dump ++.L3609: ++ add w22, w22, 1 ++ b .L3608 ++.L3607: ++ adrp x1, .LC269 ++ mov x2, 7 ++ add x1, x1, :lo12:.LC269 ++ mov x0, x19 ++ bl memcmp ++ cbnz w0, .L3612 ++ adrp x22, .LANCHOR0 ++ add x20, x22, :lo12:.LANCHOR0 ++ mov w2, 4 ++ adrp x0, .LC267 ++ add x0, x0, :lo12:.LC267 ++ adrp x25, .LC271 ++ ldr x1, [x20, 3384] ++ adrp x24, .LC272 ++ add x25, x25, :lo12:.LC271 ++ add x24, x24, :lo12:.LC272 ++ add x1, x1, 704 ++ ldrh w3, [x1, -6] ++ bl rknand_print_hex ++ adrp x0, .LANCHOR5+220 ++ ldr x1, [x20, 3384] ++ mov w2, 2 ++ add x20, x29, 192 ++ ldrh w3, [x0, #:lo12:.LANCHOR5+220] ++ add x1, x1, 416 ++ adrp x0, .LC268 ++ add x0, x0, :lo12:.LC268 ++ bl rknand_print_hex ++ mov w0, 50 ++ bl msleep ++ add x1, x19, 7 ++ adrp x0, .LC270 ++ str x1, [x20, -88]! ++ add x0, x0, :lo12:.LC270 ++ bl printk ++ ldr x0, [x29, 104] ++ mov x1, x20 ++ adrp x20, .LANCHOR3 ++ bl rk_simple_strtoull.constprop.33 ++ mov w23, w0 ++ add x1, x20, :lo12:.LANCHOR3 ++ and w27, w0, 65535 ++ add x19, x1, 1960 ++ add x26, x1, 2472 ++ mov x28, x1 ++ str w0, [x29, 100] ++.L3614: ++ ldrh w2, [x19, 2] ++ mov x0, x25 ++ ldrh w1, [x19] ++ bl printk ++ ldrh w0, [x19] ++ cmp w0, w27 ++ bne .L3613 ++ ldrb w3, [x28, 1946] ++ mov w2, 4 ++ ldr x1, [x19, 8] ++ mov x0, x24 ++ lsl w3, w3, 7 ++ bl rknand_print_hex ++ mov w0, 50 ++ bl msleep ++.L3613: ++ add x19, x19, 16 ++ cmp x19, x26 ++ bne .L3614 ++ add x22, x22, :lo12:.LANCHOR0 ++ mov w0, 300 ++ bl msleep ++ add x20, x20, :lo12:.LANCHOR3 ++ mov w0, 1 ++ bl buf_alloc ++ ldr x1, [x22, 3384] ++ mov x19, x0 ++ add x1, x1, w23, uxth 2 ++ ldr w1, [x1, 704] ++ str w1, [x0, 40] ++ str w1, [x29, 100] ++ mov w1, 1 ++ bl sblk_read_page ++ ldr x1, [x19, 24] ++ ldr x0, [x19, 8] ++ ldr w2, [x1, 12] ++ str w2, [sp, 16] ++ ldr w2, [x1, 8] ++ str w2, [sp, 8] ++ ldr w2, [x1, 4] ++ str w2, [sp] ++ ldp w3, w4, [x0] ++ ldp w5, w6, [x0, 8] ++ adrp x0, .LC245 ++ ldr w7, [x1] ++ add x0, x0, :lo12:.LC245 ++ ldr w2, [x19, 52] ++ ldr w1, [x29, 100] ++ bl printk ++ ldrb w3, [x20, 1946] ++ adrp x0, .LC273 ++ ldr x1, [x19, 8] ++ add x0, x0, :lo12:.LC273 ++ mov w2, 4 ++ lsl w3, w3, 7 ++.L3630: ++ bl rknand_print_hex ++ mov x0, x19 ++ bl zbuf_free ++ b .L3611 ++.L3612: ++ adrp x1, .LC274 ++ mov x2, 7 ++ add x1, x1, :lo12:.LC274 ++ mov x0, x19 ++ bl memcmp ++ cbnz w0, .L3615 ++ bl dump_ftl_info ++ b .L3611 ++.L3615: ++ adrp x1, .LC275 ++ mov x2, 9 ++ add x1, x1, :lo12:.LC275 ++ mov x0, x19 ++ bl memcmp ++ cbnz w0, .L3616 ++ add x1, x29, 192 ++ add x0, x19, 9 ++ str x0, [x1, -88]! ++ bl rk_simple_strtoull.constprop.33 ++ str w0, [x29, 100] ++ adrp x1, .LANCHOR3+1408 ++ strh w0, [x1, #:lo12:.LANCHOR3+1408] ++ bl dump_all_list_info ++ b .L3611 ++.L3616: ++ adrp x1, .LC276 ++ mov x2, 8 ++ add x1, x1, :lo12:.LC276 ++ mov x0, x19 ++ bl memcmp ++ cbz w0, .L3611 ++ adrp x1, .LC277 ++ mov x2, 8 ++ add x1, x1, :lo12:.LC277 ++ mov x0, x19 ++ bl memcmp ++ cbnz w0, .L3618 ++ add x20, x29, 192 ++ add x1, x19, 8 ++ adrp x0, .LC270 ++ add x0, x0, :lo12:.LC270 ++ str x1, [x20, -88]! ++ bl printk ++ ldr x0, [x29, 104] ++ mov x1, x20 ++ adrp x20, .LANCHOR3 ++ add x20, x20, :lo12:.LANCHOR3 ++ bl rk_simple_strtoull.constprop.33 ++ str w0, [x29, 100] ++ mov w0, 1 ++ bl buf_alloc ++ ldr w1, [x29, 100] ++ mov x19, x0 ++ str w1, [x0, 40] ++ mov w1, 1 ++ bl sblk_read_page ++ ldr x1, [x19, 24] ++ ldr x0, [x19, 8] ++ ldr w2, [x1, 12] ++ str w2, [sp, 16] ++ ldr w2, [x1, 8] ++ str w2, [sp, 8] ++ ldr w2, [x1, 4] ++ str w2, [sp] ++ ldp w3, w4, [x0] ++ ldp w5, w6, [x0, 8] ++ adrp x0, .LC245 ++ ldr w7, [x1] ++ add x0, x0, :lo12:.LC245 ++ ldr w2, [x19, 52] ++ ldr w1, [x29, 100] ++ bl printk ++ ldr x1, [x19, 8] ++ mov w2, 4 ++ ldrb w3, [x20, 1946] ++ adrp x0, .LC218 ++ add x0, x0, :lo12:.LC218 ++ lsl w3, w3, 7 ++ bl rknand_print_hex ++ ldrb w3, [x20, 1946] ++ adrp x0, .LC240 ++ mov w2, 4 ++ add x0, x0, :lo12:.LC240 ++ ldr x1, [x19, 24] ++ lsl w3, w3, 1 ++ b .L3630 ++.L3618: ++ adrp x1, .LC278 ++ mov x2, 8 ++ add x1, x1, :lo12:.LC278 ++ mov x0, x19 ++ bl memcmp ++ cbnz w0, .L3619 ++ add x20, x29, 192 ++ add x1, x19, 8 ++ adrp x0, .LC270 ++ add x0, x0, :lo12:.LC270 ++ str x1, [x20, -88]! ++ bl printk ++ ldr x0, [x29, 104] ++ mov x1, x20 ++ bl rk_simple_strtoull.constprop.33 ++ str w0, [x29, 100] ++ mov x1, 0 ++ bl ftl_sblk_dump ++ b .L3611 ++.L3619: ++ adrp x1, .LC279 ++ mov x2, 10 ++ add x1, x1, :lo12:.LC279 ++ mov x0, x19 ++ bl memcmp ++ cbnz w0, .L3620 ++ add x20, x29, 192 ++ add x1, x19, 10 ++ adrp x0, .LC270 ++ add x0, x0, :lo12:.LC270 ++ str x1, [x20, -88]! ++ bl printk ++ ldr x0, [x29, 104] ++ mov x1, x20 ++ bl rk_simple_strtoull.constprop.33 ++ str w0, [x29, 100] ++ adrp x1, .LANCHOR2 ++ str w0, [x1, #:lo12:.LANCHOR2] ++ b .L3611 ++.L3620: ++ adrp x1, .LC280 ++ mov x2, 8 ++ add x1, x1, :lo12:.LC280 ++ mov x0, x19 ++ bl memcmp ++ cbnz w0, .L3621 ++ add x1, x19, 8 ++ add x19, x29, 192 ++ adrp x0, .LC270 ++ add x0, x0, :lo12:.LC270 ++ str x1, [x19, -88]! ++ bl printk ++ ldr x0, [x29, 104] ++ mov x1, x19 ++ bl rk_simple_strtoull.constprop.33 ++ mov w19, w0 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 100] ++ cmn w0, #1 ++ bne .L3622 ++ mov w2, 0 ++ add x1, x29, 100 ++ mov w0, w19 ++ bl pm_log2phys ++.L3622: ++ ldr w2, [x29, 100] ++ mov w1, w19 ++ adrp x0, .LC281 ++ add x0, x0, :lo12:.LC281 ++ bl printk ++ b .L3611 ++.L3621: ++ adrp x0, .LC282 ++ add x0, x0, :lo12:.LC282 ++ bl printk ++ adrp x0, .LC283 ++ add x0, x0, :lo12:.LC283 ++ bl printk ++ adrp x0, .LC284 ++ add x0, x0, :lo12:.LC284 ++ bl printk ++ adrp x0, .LC285 ++ add x0, x0, :lo12:.LC285 ++ bl printk ++ adrp x0, .LC286 ++ add x0, x0, :lo12:.LC286 ++ bl printk ++ adrp x0, .LC287 ++ add x0, x0, :lo12:.LC287 ++ bl printk ++ adrp x0, .LC288 ++ add x0, x0, :lo12:.LC288 ++ bl printk ++ adrp x0, .LC289 ++ add x0, x0, :lo12:.LC289 ++ bl printk ++ adrp x0, .LC290 ++ add x0, x0, :lo12:.LC290 ++ bl printk ++ b .L3611 ++.L3623: ++ mov x1, -22 ++ b .L3605 ++ .size zftl_debug_proc_write, .-zftl_debug_proc_write ++ .align 2 ++ .global ftl_update_l2p_map ++ .type ftl_update_l2p_map, %function ++ftl_update_l2p_map: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ mov x22, x0 ++ stp x25, x26, [sp, 64] ++ adrp x26, .LANCHOR3 ++ add x0, x26, :lo12:.LANCHOR3 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x27, x28, [sp, 80] ++ ldrh w23, [x0, 1376] ++ ldrb w1, [x22, 9] ++ ldr x0, [x0, 1928] ++ ldrh w19, [x22, 12] ++ mul w23, w23, w1 ++ add x19, x0, x19, lsl 2 ++ add x0, x19, w23, sxtw 2 ++ ldr w0, [x0, -4] ++ cmn w0, #1 ++ beq .L3632 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 976 ++ mov w2, 1998 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3632: ++ adrp x27, .LC292 ++ mov w21, 0 ++ add x0, x27, :lo12:.LC292 ++ mov w25, 0 ++ str x0, [x29, 104] ++.L3633: ++ cmp w25, w23 ++ bne .L3639 ++ adrp x0, .LANCHOR2 ++ adrp x19, .LANCHOR0 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L3640 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x22] ++ ldr x0, [x0, 1120] ++ ubfiz x2, x1, 1, 16 ++ ldrh w3, [x0, x2] ++ adrp x0, .LC294 ++ mov w2, w21 ++ add x0, x0, :lo12:.LC294 ++ bl printk ++.L3640: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x22] ++ ldr x0, [x19, 1120] ++ 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], 128 ++ ret ++.L3639: ++ ldr w2, [x19] ++ cmn w2, #1 ++ beq .L3634 ++ add x0, x26, :lo12:.LANCHOR3 ++ ldrb w20, [x0, 1946] ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ lsl w20, w20, 7 ++ udiv w20, w2, w20 ++ and w20, w20, 65535 ++ tbz x0, 12, .L3635 ++ adrp x0, .LC291 ++ mov w3, w25 ++ mov w1, w20 ++ add x0, x0, :lo12:.LC291 ++ bl printk ++.L3635: ++ adrp x28, .LC293 ++ mov x24, x19 ++ mov w27, w25 ++ add x28, x28, :lo12:.LC293 ++.L3638: ++ ldr w0, [x24] ++ cmn w0, #1 ++ beq .L3636 ++ add x5, x26, :lo12:.LANCHOR3 ++ ldrb w1, [x5, 1946] ++ lsl w1, w1, 7 ++ udiv w0, w0, w1 ++ cmp w20, w0, uxth ++ bne .L3636 ++ ldrb w0, [x22, 9] ++ str x5, [x29, 96] ++ sdiv w1, w27, w0 ++ msub w0, w1, w0, w27 ++ add x0, x22, w0, sxtw 1 ++ ldrh w2, [x0, 16] ++ ldrh w0, [x5, 1410] ++ madd w2, w2, w0, w1 ++ ldr x0, [x29, 104] ++ str w2, [x29, 124] ++ ldr w1, [x24] ++ bl pm_ppa_update_check ++ ldr x5, [x29, 96] ++ cbz w0, .L3637 ++ ldr x1, [x5, 1928] ++ mov w3, w23 ++ mov w2, 4 ++ mov x0, x28 ++ bl rknand_print_hex ++.L3637: ++ ldr w0, [x24] ++ add w21, w21, 1 ++ mov w2, 1 ++ add x1, x29, 124 ++ and w21, w21, 65535 ++ bl pm_log2phys ++ mov w0, -1 ++ str w0, [x24] ++.L3636: ++ add w27, w27, 1 ++ add x24, x24, 4 ++ cmp w23, w27 ++ bne .L3638 ++.L3634: ++ add w25, w25, 1 ++ add x19, x19, 4 ++ b .L3633 ++ .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, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x0 ++ str x21, [sp, 32] ++ ldrh w21, [x0] ++ bl ftl_update_l2p_map ++ bl pm_flush ++ ldrh w0, [x20] ++ mov w1, 65535 ++ cmp w0, w1 ++ beq .L3662 ++ bl zftl_insert_data_list ++.L3662: ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ ldr x0, [x19, 1128] ++ add x0, x0, 16 ++ cmp x20, x0 ++ mov x0, x20 ++ cset w1, ne ++ add w1, w1, 2 ++ bl ftl_open_sblk_init ++ ldr x0, [x19, 1128] ++ ldr w0, [x0, 560] ++ cmp w0, w21 ++ bne .L3664 ++ mov w20, 65535 ++ cmp w21, w20 ++ beq .L3664 ++ mov w1, w21 ++ adrp x0, .LC295 ++ add x0, x0, :lo12:.LC295 ++ bl printk ++ ldr x0, [x19, 1128] ++ ldr w0, [x0, 564] ++ bl gc_mark_bad_ppa ++ ldr x0, [x19, 1128] ++ mov w1, -1 ++ str w20, [x0, 560] ++ str w1, [x0, 564] ++.L3664: ++ bl ftl_ext_info_flush ++ mov w0, 0 ++ bl ftl_info_flush ++ bl lpa_rebuild_hash ++ ldr x21, [sp, 32] ++ mov w0, 0 ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ 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, -144]! ++ adrp x0, .LANCHOR0 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ add x20, x0, :lo12:.LANCHOR0 ++ stp x27, x28, [sp, 80] ++ add x28, x20, 1304 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++.L3668: ++ adrp x0, .LANCHOR0 ++ add x0, x0, :lo12:.LANCHOR0 ++ ldrb w1, [x0, 3381] ++ cbz w1, .L3670 ++ ldrb w3, [x0, 3408] ++ add x2, x0, 1304 ++ sub w1, w1, #1 ++ strb w1, [x0, 3381] ++ ubfiz x4, x3, 6, 8 ++ add x4, x2, x4 ++ stp x3, x4, [x29, 104] ++ lsl x3, x3, 6 ++ add x4, x2, x3 ++ ldrb w2, [x2, x3] ++ strb w2, [x0, 3408] ++ ldr w1, [x4, 36] ++ ldr w0, [x0, 3364] ++ cmp w1, w0 ++ bcc .L3672 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1000 ++ mov w2, 607 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3672: ++ ldr x0, [x29, 104] ++ ldr w1, [x20, 3364] ++ add x0, x28, x0, lsl 6 ++ ldr w23, [x0, 36] ++ cmp w23, w1 ++ bcc .L3673 ++ ldr x0, [x29, 112] ++ bl zbuf_free ++ mov w0, -1 ++.L3667: ++ 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 ++.L3673: ++ ldrb w22, [x0, 57] ++ ldrb w21, [x0, 56] ++ ldr x27, [x0, 8] ++ ldr x24, [x0, 24] ++ ldrb w0, [x20, 3380] ++ cbz w0, .L3675 ++ adrp x0, .LANCHOR5+360 ++ ldrb w19, [x0, #:lo12:.LANCHOR5+360] ++ add x19, x28, x19, lsl 6 ++.L3676: ++ ldrb w0, [x19] ++ cmp w0, 255 ++ bne .L3677 ++ ldr w0, [x19, 36] ++ cmp w23, w0 ++ bne .L3675 ++ ldr x0, [x19, 8] ++ ubfiz x22, x22, 9, 8 ++ lsl w2, w21, 9 ++ add x1, x27, x22 ++ add x0, x0, x22 ++ bl ftl_memcpy ++ adrp x0, .LANCHOR3+1946 ++ ldr x2, [x19, 8] ++ ldr x1, [x19, 24] ++ ldrb w0, [x0, #:lo12:.LANCHOR3+1946] ++ add x1, x1, 16 ++ sub w0, w0, #2 ++ sbfiz x0, x0, 9, 32 ++ add x2, x2, x0 ++ mov w0, 2 ++ bl ftl_debug_info_fill ++ ldr x0, [x29, 112] ++ bl zbuf_free ++ b .L3668 ++.L3677: ++ ubfiz x19, x0, 6, 8 ++ add x19, x28, x19 ++ b .L3676 ++.L3675: ++ mov w0, w23 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 140] ++ cmn w0, #1 ++ bne .L3679 ++ mov w2, 0 ++ add x1, x29, 140 ++ mov w0, w23 ++ bl pm_log2phys ++.L3679: ++ ldr x19, [x20, 1128] ++ add x0, x20, 1306 ++ ldr w2, [x29, 140] ++ add x4, x20, 3354 ++ add x19, x19, 16 ++ mov w3, 0 ++ mov x26, 0 ++.L3681: ++ ldr w1, [x0, 34] ++ cmp w23, w1 ++ bne .L3680 ++ ldrb w1, [x0] ++ tbz x1, 3, .L3680 ++ ldr w2, [x0, 38] ++ and w1, w1, -9 ++ ldr x26, [x0, 6] ++ mov w3, 1 ++ strb w1, [x0] ++.L3680: ++ add x0, x0, 64 ++ cmp x0, x4 ++ bne .L3681 ++ cbz w3, .L3682 ++ str w2, [x29, 140] ++.L3682: ++ adrp x25, .LANCHOR3 ++ add x0, x25, :lo12:.LANCHOR3 ++ str x25, [x29, 120] ++ ldrb w0, [x0, 1946] ++ cmp w21, w0 ++ bcs .L3708 ++ add w21, w22, w21 ++ cbz x26, .L3684 ++ cbz w22, .L3685 ++ lsl w2, w22, 9 ++ mov x1, x26 ++ mov x0, x27 ++ bl ftl_memcpy ++ ldr x19, [x20, 1128] ++ add x19, x19, 48 ++.L3685: ++ ldr x0, [x29, 120] ++ add x0, x0, :lo12:.LANCHOR3 ++ ldrb w2, [x0, 1946] ++ cmp w21, w2 ++ bcc .L3686 ++ ldr x19, [x20, 1128] ++ add x19, x19, 16 ++.L3708: ++ mov w26, 0 ++ b .L3683 ++.L3686: ++ ubfiz x0, x21, 9, 9 ++ sub w2, w2, w21 ++ add x1, x26, x0 ++ lsl w2, w2, 9 ++ add x0, x27, x0 ++ bl ftl_memcpy ++ b .L3708 ++.L3684: ++ ldr w0, [x29, 140] ++ cmn w0, #1 ++ beq .L3687 ++ mov w0, 1 ++ bl buf_alloc ++ ldr w1, [x29, 140] ++ mov x25, x0 ++ stp w23, w1, [x0, 36] ++ mov w1, 1 ++ bl sblk_read_page ++ ldr x3, [x25, 24] ++ ldr w0, [x3, 4] ++ ldr w26, [x3, 12] ++ cmp w23, w0 ++ add w26, w26, 1 ++ bne .L3688 ++ ldr w0, [x25, 52] ++ cmn w0, #1 ++ bne .L3689 ++.L3688: ++ ldrb w2, [x20, 1205] ++ mov w6, 1 ++ mov w0, 24 ++ ldr w1, [x25, 40] ++ sub w0, w0, w2 ++ lsl w6, w6, w2 ++ ldr x2, [x29, 120] ++ sub w6, w6, #1 ++ add x2, x2, :lo12:.LANCHOR3 ++ lsl w7, w6, w0 ++ lsr w0, w1, w0 ++ bic w1, w1, w7 ++ ldrb w4, [x2, 1946] ++ and w0, w0, w6 ++ ldr x2, [x25, 8] ++ bl flash_read_page_en ++ str w0, [x25, 52] ++.L3689: ++ ldr x0, [x25, 24] ++ ldr w0, [x0, 4] ++ cmp w23, w0 ++ bne .L3690 ++ ldr w0, [x25, 52] ++ cmn w0, #1 ++ bne .L3691 ++.L3690: ++ ldr x1, [x20, 1128] ++ mov w3, w23 ++ ldr w2, [x29, 140] ++ ldr w0, [x1, 552] ++ add w0, w0, 1 ++ str w0, [x1, 552] ++ adrp x0, .LC296 ++ add x0, x0, :lo12:.LC296 ++ ldrb w1, [x25, 1] ++ ldr w4, [x25, 52] ++ bl printk ++ ldr x1, [x25, 24] ++ mov w3, 4 ++ adrp x0, .LC240 ++ mov w2, w3 ++ add x0, x0, :lo12:.LC240 ++ bl rknand_print_hex ++.L3691: ++ ldr x0, [x25, 24] ++ ldr w0, [x0, 4] ++ cmp w23, w0 ++ bne .L3692 ++ ldr w0, [x25, 52] ++ cmn w0, #1 ++ bne .L3693 ++.L3692: ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1000 ++ mov w2, 699 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3693: ++ cbz w22, .L3694 ++ ldr w0, [x29, 140] ++ lsl w2, w22, 9 ++ cmn w0, #1 ++ beq .L3695 ++ ldr x1, [x25, 8] ++ mov x0, x27 ++ bl ftl_memcpy ++.L3696: ++ ldr x19, [x20, 1128] ++ add x19, x19, 48 ++.L3694: ++ ldr x0, [x29, 120] ++ add x0, x0, :lo12:.LANCHOR3 ++ ldrb w2, [x0, 1946] ++ cmp w21, w2 ++ bcc .L3697 ++ bls .L3698 ++ ldr x19, [x20, 1128] ++ add x19, x19, 16 ++.L3698: ++ cbz x25, .L3683 ++ ldrb w0, [x25, 2] ++ mov x1, x25 ++ and w0, w0, -9 ++ strb w0, [x25, 2] ++ add x0, x20, 3355 ++ bl buf_remove_buf ++ mov x0, x25 ++ bl zbuf_free ++.L3683: ++ ldrh w0, [x19, 6] ++ cbnz w0, .L3700 ++ bl ftl_flush ++ mov x0, x19 ++ bl ftl_alloc_new_data_sblk ++.L3700: ++ mov x0, x19 ++ bl ftl_get_new_free_page ++ mov w3, w0 ++ ldr x0, [x29, 104] ++ mov x1, x24 ++ str w3, [x29, 100] ++ lsl x22, x0, 6 ++ add x21, x28, x22 ++ ldr w0, [x21, 32] ++ stp w0, w23, [x24] ++ str w26, [x24, 12] ++ ldr w0, [x29, 140] ++ str w0, [x24, 8] ++ ldr x0, [x29, 120] ++ str wzr, [x1, 16]! ++ add x25, x0, :lo12:.LANCHOR3 ++ mov w0, 2 ++ ldrb w2, [x25, 1946] ++ sub w2, w2, #2 ++ sbfiz x2, x2, 9, 32 ++ add x2, x27, x2 ++ bl ftl_debug_info_fill ++ ldr w0, [x29, 140] ++ mov w1, 10 ++ ldr w3, [x29, 100] ++ stp w3, w0, [x21, 40] ++ mov w0, -1 ++ strb w0, [x28, x22] ++ ldrb w0, [x21, 2] ++ orr w0, w0, w1 ++ strb w0, [x21, 2] ++ ldrh w1, [x19, 12] ++ ldrh w0, [x19, 10] ++ add w0, w0, w1 ++ ldr x1, [x29, 112] ++ sub w0, w0, #1 ++ strh w0, [x21, 48] ++ adrp x21, .LANCHOR5 ++ add x22, x21, :lo12:.LANCHOR5 ++ add x0, x22, 360 ++ bl buf_add_tail ++ ldrb w0, [x20, 3380] ++ add w0, w0, 1 ++ strb w0, [x20, 3380] ++ bl timer_get_time ++ str w0, [x22, 364] ++ ldrb w2, [x20, 3380] ++ ldrh w0, [x19, 6] ++ cmp w2, 2 ++ bhi .L3701 ++ cmp w0, 1 ++ bne .L3671 ++.L3701: ++ ldrb w1, [x19, 5] ++ cmp w1, 0 ++ mov w1, 0 ++ cset w4, ne ++ cmp w0, 1 ++ add x0, x21, :lo12:.LANCHOR5 ++ csinc w4, w2, w4, eq ++ ldrb w0, [x0, 360] ++ mov w3, w0 ++.L3705: ++ cmp w1, w4 ++ bne .L3706 ++ and w1, w1, 255 ++ add x21, x21, :lo12:.LANCHOR5 ++ sub w2, w2, w1 ++ ubfiz x0, x0, 6, 8 ++ strb w2, [x20, 3380] ++ add x0, x28, x0 ++ strb w3, [x21, 360] ++ bl sblk_prog_page ++ ldrh w0, [x19, 6] ++ cmp w0, 1 ++ bne .L3671 ++ 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 ++.L3671: ++ ldrb w0, [x20, 3381] ++ cbnz w0, .L3668 ++.L3670: ++ bl ftl_write_completed ++ mov w0, 0 ++ b .L3667 ++.L3697: ++ ldr w0, [x29, 140] ++ sub w2, w2, w21 ++ lsl w2, w2, 9 ++ cmn w0, #1 ++ ubfiz x0, x21, 7, 9 ++ beq .L3699 ++ ldr x1, [x25, 8] ++ lsl x0, x0, 2 ++ add x1, x1, x0 ++ add x0, x27, x0 ++ bl ftl_memcpy ++ b .L3698 ++.L3699: ++ mov w1, 0 ++ add x0, x27, x0, lsl 2 ++ bl ftl_memset ++ b .L3698 ++.L3706: ++ ubfiz x3, x3, 6, 8 ++ add w1, w1, 1 ++ ldrb w3, [x28, x3] ++ b .L3705 ++.L3707: ++ lsl w2, w22, 9 ++ mov x25, 0 ++ mov w26, 0 ++.L3695: ++ mov w1, 0 ++ mov x0, x27 ++ bl ftl_memset ++ b .L3696 ++.L3687: ++ cbnz w22, .L3707 ++ mov w26, 0 ++ mov x25, 0 ++ b .L3694 ++ .size ftl_write_commit, .-ftl_write_commit ++ .align 2 ++ .global gc_do_copy_back ++ .type gc_do_copy_back, %function ++gc_do_copy_back: ++ stp x29, x30, [sp, -240]! ++ add x29, sp, 0 ++ stp x21, x22, [sp, 32] ++ adrp x22, .LANCHOR3 ++ add x1, x22, :lo12:.LANCHOR3 ++ stp x19, x20, [sp, 16] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldrb w0, [x1, 1337] ++ cbnz w0, .L3734 ++ bl buf_alloc ++ mov x20, x0 ++ cbz x0, .L3733 ++ adrp x19, .LANCHOR0 ++ add x2, x19, :lo12:.LANCHOR0 ++ ldrh w3, [x2, 3442] ++ mov w0, w3 ++ bl gc_get_src_ppa_from_index ++ add w3, w3, 1 ++ mov w23, w0 ++ str w23, [x20, 40] ++ strh w3, [x2, 3442] ++ mov w1, 1 ++ mov x0, x20 ++ bl sblk_read_page ++ ldr w0, [x20, 52] ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ bne .L3736 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1024 ++ mov w2, 1032 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3736: ++ ldr x0, [x20, 24] ++ ldr w21, [x0, 4] ++ mov w0, w21 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 192] ++ cmn w0, #1 ++ bne .L3737 ++ mov w2, 0 ++ add x1, x29, 192 ++ mov w0, w21 ++ bl pm_log2phys ++.L3737: ++ ldr w24, [x29, 192] ++ cmp w23, w24 ++ bne .L3738 ++ add x1, x19, :lo12:.LANCHOR0 ++ add x0, x1, 1306 ++ add x1, x1, 3354 ++.L3741: ++ ldr w2, [x0, 34] ++ cmp w21, w2 ++ bne .L3739 ++ ldrb w2, [x0] ++ tbz x2, 1, .L3739 ++ mov x0, x20 ++ bl zbuf_free ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L3733 ++ add x19, x19, :lo12:.LANCHOR0 ++ adrp x0, .LC297 ++ mov w2, w23 ++ mov w1, w21 ++ add x0, x0, :lo12:.LC297 ++ ldrh w3, [x19, 3442] ++ bl printk ++.L3733: ++ 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 ++.L3739: ++ add x0, x0, 64 ++ cmp x1, x0 ++ bne .L3741 ++ add x22, x22, :lo12:.LANCHOR3 ++ strb wzr, [x20, 57] ++ str w21, [x20, 36] ++ ldrb w0, [x22, 1946] ++ strb w0, [x20, 56] ++ ldr x0, [x20, 24] ++ ldr w1, [x0] ++ str w1, [x20, 32] ++ str wzr, [x0, 16] ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L3742 ++ mov w0, w21 ++ bl lpa_hash_get_ppa ++ add x1, x19, :lo12:.LANCHOR0 ++ mov w3, w0 ++ mov w4, w23 ++ adrp x0, .LC298 ++ mov w2, w24 ++ add x0, x0, :lo12:.LC298 ++ ldrh w5, [x1, 3442] ++ mov w1, w21 ++ bl printk ++.L3742: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov x0, x20 ++ bl ftl_gc_write_buf ++ bl ftl_write_commit ++ ldr x1, [x19, 3384] ++ ldr w0, [x1, 60] ++ add w0, w0, 1 ++ str w0, [x1, 60] ++ ldrh w0, [x19, 3444] ++ add w0, w0, 1 ++ strh w0, [x19, 3444] ++ b .L3733 ++.L3738: ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L3743 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w0, w21 ++ bl lpa_hash_get_ppa ++ mov w3, w0 ++ mov w4, w23 ++ adrp x0, .LC298 ++ ldrh w5, [x19, 3442] ++ mov w2, w24 ++ mov w1, w21 ++ add x0, x0, :lo12:.LC298 ++ bl printk ++.L3743: ++ mov x0, x20 ++ bl zbuf_free ++ b .L3733 ++.L3734: ++ adrp x21, .LANCHOR0 ++ add x0, x21, :lo12:.LANCHOR0 ++ ldrb w1, [x1, 1321] ++ ldr x26, [x0, 1128] ++ add x0, x26, 80 ++ str x0, [x29, 184] ++ ldrb w0, [x0, 9] ++ and w19, w0, 65535 ++ cmp w1, w19 ++ bhi .L3798 ++ cmp w19, 2 ++ mov w23, 2 ++ csel w23, w19, w23, ls ++ and w23, w23, 65535 ++.L3744: ++ add x1, x22, :lo12:.LANCHOR3 ++ ldrb w20, [x1, 1320] ++ cmp w20, 3 ++ bne .L3745 ++ add x3, x21, :lo12:.LANCHOR0 ++ ldrb w2, [x3, 1212] ++ ldrh w5, [x3, 5522] ++ cbz w2, .L3746 ++ sdiv w0, w5, w0 ++ ldrb w1, [x1, 1950] ++ mov w24, w5 ++ and w26, w0, 65535 ++ cbz w1, .L3747 ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ add x1, x1, 2136 ++ ldrh w0, [x1, w0, sxtw 1] ++ cmp w0, 0 ++ cset w20, ne ++.L3865: ++ add w20, w20, 1 ++.L3748: ++ msub w19, w19, w26, w5 ++ and w19, w19, 65535 ++.L3749: ++ adrp x8, .LANCHOR5 ++ adrp x0, .LANCHOR2 ++ add x8, x8, :lo12:.LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x7, x21, :lo12:.LANCHOR0 ++ mul w11, w20, w23 ++ add x10, x22, :lo12:.LANCHOR3 ++ add x6, x0, 2136 ++ sxtw x12, w26 ++ mov x13, x8 ++ add x7, x7, 3416 ++ mov w5, 0 ++.L3753: ++ cmp w5, w11 ++ bge .L3806 ++ ldr x1, [x29, 184] ++ add w2, w24, w5 ++ ldrh w0, [x10, 1338] ++ ldrb w1, [x1, 9] ++ mul w0, w0, w1 ++ ldrb w1, [x8, 465] ++ sub w0, w0, w1 ++ cmp w2, w0 ++ blt .L3754 ++ ldrb w0, [x10, 1950] ++ cbz w0, .L3806 ++ ldrh w0, [x6, x12, lsl 1] ++ cmp w0, w26 ++ bcc .L3755 ++.L3806: ++ mov w0, 1 ++ str w0, [x29, 180] ++ b .L3751 ++.L3798: ++ mov w23, 1 ++ b .L3744 ++.L3747: ++ adrp x0, .LANCHOR5+461 ++ ldrb w0, [x0, #:lo12:.LANCHOR5+461] ++ cbz w0, .L3800 ++ sub w0, w26, #62 ++ and w0, w0, 65535 ++ cmp w0, 2159 ++ bhi .L3801 ++ udiv w20, w26, w20 ++ add w20, w20, w20, lsl 1 ++ sub w20, w26, w20 ++ and w20, w20, 65535 ++ cmp w20, 0 ++ cset w20, eq ++ b .L3865 ++.L3800: ++ mov w20, 1 ++ b .L3748 ++.L3801: ++ mov w20, 2 ++ b .L3748 ++.L3746: ++ ldrb w1, [x1, 1336] ++ cbz w1, .L3750 ++ add w19, w0, w0, lsl 1 ++ mov w24, w5 ++ sdiv w19, w5, w19 ++ mul w0, w0, w19 ++ and w26, w19, 65535 ++ sub w0, w0, w0, lsl 2 ++ add w19, w0, w5 ++ ldrb w0, [x3, 1213] ++ sdiv w19, w19, w20 ++ and w19, w19, 65535 ++ cbz w0, .L3749 ++ add w4, w26, w26, lsl 1 ++ and w26, w4, 65535 ++ b .L3749 ++.L3750: ++ sdiv w2, w5, w0 ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ add x1, x1, 3672 ++ msub w19, w19, w2, w5 ++ ldrh w25, [x1, w2, sxtw 1] ++ and w19, w19, 65535 ++ and w1, w25, 7 ++ str w1, [x29, 180] ++ lsr w26, w25, 3 ++ madd w0, w26, w0, w19 ++ add w0, w0, w0, lsl 1 ++ and w24, w0, 65535 ++ uxtw x0, w1 ++ cmp w0, 1 ++ beq .L3749 ++.L3751: ++ mul w0, w20, w23 ++ str wzr, [x29, 160] ++ str w0, [x29, 176] ++ ubfiz w0, w23, 1, 15 ++ strh w0, [x29, 128] ++ str w0, [x29, 156] ++ msub w0, w0, w20, w24 ++ and w0, w0, 65535 ++ str w0, [x29, 152] ++ ldrh w0, [x29, 152] ++ str x0, [x29, 120] ++ adrp x0, .LANCHOR5 ++ add x28, x0, :lo12:.LANCHOR5 ++ adrp x0, .LANCHOR4 ++ add x0, x0, :lo12:.LANCHOR4 ++ str x0, [x29, 112] ++.L3756: ++ ldr w0, [x29, 160] ++ ldr w1, [x29, 176] ++ and w0, w0, 65535 ++ str w0, [x29, 164] ++ ldrh w27, [x29, 160] ++ cmp w0, w1 ++ blt .L3780 ++ add x1, x22, :lo12:.LANCHOR3 ++ ldrb w0, [x1, 1320] ++ cmp w0, 3 ++ add x0, x29, 192 ++ bne .L3781 ++ add x2, x21, :lo12:.LANCHOR0 ++ ldrb w2, [x2, 1212] ++ cbz w2, .L3782 ++ ldr w2, [x29, 176] ++ mov w1, 0 ++ sub w2, w2, #1 ++.L3783: ++ cmp w1, w2 ++ blt .L3784 ++.L3870: ++ ldr x0, [x0, w2, sxtw 3] ++ mov w1, -1 ++ strb w1, [x0] ++ ldrb w1, [x29, 176] ++ ldr x0, [x29, 192] ++ bl sblk_prog_page ++ b .L3785 ++.L3745: ++ ldrb w1, [x1, 1322] ++ cbnz w1, .L3752 ++ add x1, x21, :lo12:.LANCHOR0 ++ mov w20, 1 ++ ldrh w24, [x1, 5522] ++ sdiv w26, w24, w0 ++ msub w19, w19, w26, w24 ++ and w19, w19, 65535 ++ b .L3749 ++.L3752: ++ add x1, x21, :lo12:.LANCHOR0 ++ mov w20, 2 ++ ldrh w24, [x1, 5522] ++ sdiv w26, w24, w0 ++ msub w19, w19, w26, w24 ++ and w19, w19, 65535 ++ b .L3749 ++.L3755: ++ tbz x5, 0, .L3806 ++.L3754: ++ ldr x9, [x13, 288] ++ sbfiz x2, x2, 2, 32 ++ ldr w0, [x9, x2] ++ cmn w0, #1 ++ bne .L3757 ++ ldrh w3, [x7, 26] ++ ldrh w0, [x7, 24] ++ cmp w0, w3 ++ bls .L3733 ++ ldrb w0, [x10, 1950] ++ cbz w0, .L3758 ++ ldrh w0, [x6, x12, lsl 1] ++ cmp w0, w26 ++ bcs .L3758 ++ tbz x5, 0, .L3758 ++ ubfiz x0, x0, 2, 16 ++ ldr w0, [x9, x0] ++.L3866: ++ str w0, [x9, x2] ++.L3757: ++ add w5, w5, 1 ++ and w5, w5, 65535 ++ b .L3753 ++.L3758: ++ mov w0, w3 ++ bl gc_get_src_ppa_from_index ++ add w3, w3, 1 ++ strh w3, [x7, 26] ++ b .L3866 ++.L3780: ++ ldr w0, [x29, 164] ++ add w1, w24, w0 ++ sxtw x0, w1 ++ str x0, [x29, 168] ++ add x0, x22, :lo12:.LANCHOR3 ++ sxtw x2, w1 ++ ldr x0, [x0, 1328] ++ ldrb w0, [x0, x2] ++ cmp w0, 255 ++ bne .L3760 ++ str w1, [x29, 144] ++ mov w0, 0 ++ bl buf_alloc ++ mov x25, x0 ++ ldr w1, [x29, 144] ++ cbnz x0, .L3761 ++ str w1, [x29, 144] ++ bl sblk_wait_write_queue_completed ++ bl ftl_write_completed ++ bl gc_write_completed ++ bl gc_free_temp_buf ++ mov w0, 0 ++ bl buf_alloc ++ ldr w1, [x29, 144] ++ mov x25, x0 ++ cbz x0, .L3733 ++.L3761: ++ add x2, x22, :lo12:.LANCHOR3 ++ ldr x3, [x29, 168] ++ ldrb w5, [x25, 1] ++ ldr x0, [x2, 1328] ++ strb w5, [x0, x3] ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr x3, [x29, 184] ++ ldrb w5, [x0, 3423] ++ add w5, w5, 1 ++ strb w5, [x0, 3423] ++ add w0, w27, w24 ++ strh w0, [x25, 48] ++ ldrb w0, [x29, 180] ++ strb w0, [x25, 61] ++ ldrh w0, [x2, 1338] ++ ldrb w5, [x3, 9] ++ adrp x3, .LANCHOR5 ++ mul w0, w0, w5 ++ add x5, x3, :lo12:.LANCHOR5 ++ ldrb w5, [x5, 465] ++ sub w0, w0, w5 ++ cmp w1, w0 ++ blt .L3762 ++ ldrb w0, [x2, 1950] ++ cbz w0, .L3763 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x0, x0, 2136 ++ ldrh w0, [x0, w26, sxtw 1] ++ cmp w0, w26 ++ bcs .L3763 ++ tbnz x27, 0, .L3762 ++.L3763: ++ ldr x0, [x28, 280] ++ mov w2, -1 ++ ldr x3, [x29, 168] ++ str w2, [x0, x3, lsl 2] ++ ldrb w0, [x28, 465] ++ cmp w0, 2 ++ bne .L3764 ++ ldr x0, [x29, 184] ++ add x7, x22, :lo12:.LANCHOR3 ++ ldrh w2, [x28, 462] ++ ldrh w6, [x7, 1338] ++ ldrb w0, [x0, 9] ++ mul w0, w0, w6 ++ sub w0, w0, #2 ++ cmp w1, w0 ++ bne .L3765 ++ ldr x1, [x28, 280] ++ ldr x0, [x25, 8] ++ str x7, [x29, 144] ++ bl ftl_memcpy ++ ldr x7, [x29, 144] ++ mov w1, 0 ++ ldr x0, [x25, 24] ++ ldrb w2, [x7, 1946] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldr x0, [x25, 24] ++ mov w1, 15555 ++ movk w1, 0xf55f, lsl 16 ++ str w1, [x0] ++ ldr x2, [x25, 24] ++ ldrh w1, [x28, 462] ++ ldr x0, [x25, 8] ++ str x2, [x29, 144] ++ bl js_hash ++ ldr x2, [x29, 144] ++ add x1, x21, :lo12:.LANCHOR0 ++ str w0, [x2, 4] ++ ldr x1, [x1, 1128] ++ ldr x0, [x25, 24] ++ ldr w1, [x1, 132] ++ str w1, [x0, 8] ++ ldr x0, [x25, 24] ++ str wzr, [x0, 12] ++.L3766: ++ ldr x0, [x25, 24] ++ str wzr, [x0, 16] ++.L3760: ++ add x5, x22, :lo12:.LANCHOR3 ++ ldr x1, [x29, 168] ++ ldrsw x2, [x29, 164] ++ add x3, x29, 192 ++ add x7, x21, :lo12:.LANCHOR0 ++ ldr x0, [x5, 1328] ++ add x6, x7, 1304 ++ ldrb w1, [x0, x1] ++ ubfiz x0, x1, 6, 8 ++ add x0, x6, x0 ++ add x6, x6, x1, lsl 6 ++ str x0, [x3, x2, lsl 3] ++ ldrb w0, [x29, 180] ++ strb w0, [x6, 61] ++ mov w0, 2 ++ strh w0, [x6, 50] ++ ldrb w0, [x5, 1320] ++ cmp w0, 3 ++ bne .L3771 ++ ldrb w8, [x7, 1212] ++ cbz w8, .L3772 ++ ldrb w0, [x5, 1950] ++ and w6, w27, 1 ++ add w7, w6, w26 ++ cbz w0, .L3773 ++ adrp x5, .LANCHOR2 ++ add x5, x5, :lo12:.LANCHOR2 ++ add x5, x5, 2136 ++ ldrh w0, [x5, w26, sxtw 1] ++ cmp w0, w26 ++ bcs .L3773 ++ cmp w6, 0 ++ csel w7, w7, w0, eq ++.L3773: ++ udiv w5, w27, w20 ++ ldr x0, [x29, 184] ++ add x6, x21, :lo12:.LANCHOR0 ++ add x6, x6, x1, lsl 6 ++ add w5, w5, w19 ++ add x5, x0, w5, sxtw 1 ++ ldrh w0, [x5, 16] ++ add x5, x22, :lo12:.LANCHOR3 ++ ldrh w5, [x5, 1410] ++ madd w0, w0, w5, w7 ++ orr w0, w0, 50331648 ++ str w0, [x6, 1344] ++.L3778: ++ add x0, x21, :lo12:.LANCHOR0 ++ add x0, x0, 1304 ++ add x1, x0, x1, lsl 6 ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ ldr w5, [x1, 40] ++ ldr x0, [x0, 296] ++ ldrh w1, [x1, 48] ++ str w5, [x0, x1, lsl 2] ++ b .L3797 ++.L3765: ++ ldrb w5, [x7, 1321] ++ and x1, x2, 65532 ++ ldr x0, [x28, 280] ++ str x7, [x29, 144] ++ add x1, x0, x1 ++ ldr x0, [x25, 8] ++ mul w5, w5, w6 ++ lsl w5, w5, 2 ++ sub w5, w5, w2 ++ str w5, [x29, 104] ++ mov w2, w5 ++ bl ftl_memcpy ++ ldr x7, [x29, 144] ++ mov w1, 0 ++ ldr x0, [x25, 24] ++ ldrb w2, [x7, 1946] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldr x0, [x25, 24] ++ mov w1, 15555 ++ movk w1, 0xf55f, lsl 16 ++ ldr w5, [x29, 104] ++ str w1, [x0] ++ mov w1, w5 ++ ldr x2, [x25, 24] ++ ldr x0, [x25, 8] ++ str x2, [x29, 144] ++ bl js_hash ++ ldr x2, [x29, 144] ++ add x1, x21, :lo12:.LANCHOR0 ++ str w0, [x2, 4] ++ ldr x1, [x1, 1128] ++ ldr x0, [x25, 24] ++ ldr w1, [x1, 132] ++ str w1, [x0, 8] ++ mov w1, 1 ++ ldr x0, [x25, 24] ++ str w1, [x0, 12] ++ b .L3766 ++.L3764: ++ add x5, x22, :lo12:.LANCHOR3 ++ ldr x1, [x28, 280] ++ str x5, [x29, 144] ++ ldrb w0, [x5, 1321] ++ ldrh w2, [x5, 1338] ++ mul w2, w2, w0 ++ ldr x0, [x25, 8] ++ lsl w2, w2, 2 ++ bl ftl_memcpy ++ ldr x5, [x29, 144] ++ ldrb w1, [x5, 1321] ++ ldrh w0, [x5, 1338] ++ mul w0, w0, w1 ++ ldrb w1, [x5, 1946] ++ lsl w2, w0, 2 ++ cmp w1, w0, lsr 6 ++ bge .L3767 ++ ldrh w1, [x28, 462] ++ sub w2, w1, w2 ++.L3767: ++ ldr x5, [x25, 8] ++ ldr x1, [x28, 288] ++ add x0, x5, w0, sxtw 2 ++ bl ftl_memcpy ++ add x5, x22, :lo12:.LANCHOR3 ++ ldr x0, [x25, 24] ++ mov w1, 0 ++ str x5, [x29, 104] ++ ldrb w2, [x5, 1946] ++ lsl w2, w2, 1 ++ bl ftl_memset ++ ldr x0, [x25, 24] ++ mov w1, 15555 ++ ldr x5, [x29, 104] ++ movk w1, 0xf55f, lsl 16 ++ str w1, [x0] ++ ldrb w0, [x5, 1321] ++ ldrh w1, [x5, 1338] ++ ldr x2, [x25, 24] ++ str x2, [x29, 144] ++ mul w1, w1, w0 ++ ldr x0, [x25, 8] ++ lsl w1, w1, 2 ++ bl js_hash ++ ldr x2, [x29, 144] ++ add x1, x21, :lo12:.LANCHOR0 ++ str w0, [x2, 4] ++ ldr x1, [x1, 1128] ++ ldr x0, [x25, 24] ++ ldr w1, [x1, 132] ++.L3867: ++ str w1, [x0, 8] ++ b .L3766 ++.L3762: ++ ldr x0, [x29, 168] ++ lsl x0, x0, 2 ++ str x0, [x29, 144] ++ ldr x0, [x28, 288] ++ ldr x1, [x29, 144] ++ ldr w0, [x0, x1] ++ mov w1, 1 ++ str w0, [x25, 40] ++ mov x0, x25 ++ bl sblk_read_page ++ ldr w0, [x25, 52] ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ bne .L3769 ++ add x0, x21, :lo12:.LANCHOR0 ++ add x2, x22, :lo12:.LANCHOR3 ++ ldrb w1, [x0, 1205] ++ mov w0, 24 ++ ldrh w5, [x2, 1304] ++ sub w0, w0, w1 ++ ldrb w2, [x2, 1306] ++ sub w1, w0, w5 ++ mov w0, 1 ++ lsl w0, w0, w1 ++ ldr w1, [x25, 40] ++ sub w0, w0, #1 ++ lsr w1, w1, w5 ++ and w0, w0, w1 ++ mov x1, 0 ++ udiv w0, w0, w2 ++ bl ftl_sblk_dump ++ ldr w0, [x25, 52] ++ cmp w0, 512 ++ ccmn w0, #1, 4, ne ++ bne .L3769 ++ ldr x0, [x25, 24] ++ mov w1, -1 ++ str w1, [x0, 4] ++ ldr w0, [x25, 52] ++ cmp w0, 512 ++ ccmp w0, w1, 4, ne ++ bne .L3769 ++ ldr x0, [x29, 112] ++ mov w2, 1223 ++ add x1, x0, 1024 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3769: ++ ldr x1, [x25, 24] ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr w0, [x0, 3364] ++ ldr w2, [x1, 4] ++ cmp w2, w0 ++ bcc .L3770 ++ mov w0, -1 ++ str w0, [x1, 4] ++.L3770: ++ ldr x0, [x25, 24] ++ ldr x2, [x29, 144] ++ ldr w1, [x0, 4] ++ ldr x0, [x28, 280] ++ str w1, [x0, x2] ++ ldr w1, [x25, 40] ++ ldr x0, [x25, 24] ++ b .L3867 ++.L3772: ++ udiv w0, w27, w0 ++ ldrb w7, [x7, 1213] ++ ldrh w8, [x5, 1410] ++ cbz w7, .L3775 ++ ldr x4, [x29, 184] ++ add w7, w0, w19 ++ add w0, w0, w0, lsl 1 ++ sub w0, w27, w0 ++ add x7, x4, w7, sxtw 1 ++ ldrh w5, [x7, 16] ++ madd w5, w5, w8, w26 ++ add w0, w5, w0, uxth ++.L3871: ++ str w0, [x6, 40] ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ add x5, x21, :lo12:.LANCHOR0 ++ add x5, x5, 1304 ++ add x1, x5, x1, lsl 6 ++ ldr x5, [x0, 296] ++ mov w0, 3 ++ udiv w0, w27, w0 ++ ldrh w6, [x1, 48] ++ ldr w1, [x1, 40] ++ add w0, w0, w0, lsl 1 ++ sub w0, w27, w0 ++ and w0, w0, 65535 ++ add w0, w0, 1 ++ orr w0, w1, w0, lsl 24 ++ str w0, [x5, x6, lsl 2] ++.L3797: ++ add x1, x22, :lo12:.LANCHOR3 ++ ldrb w0, [x1, 1950] ++ cbz w0, .L3779 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x0, x0, 2136 ++ ldrh w0, [x0, w26, sxtw 1] ++ cmp w0, w26 ++ bcs .L3779 ++ tbz x27, 0, .L3779 ++ ldr x0, [x1, 1328] ++ mov w5, -1 ++ ldr x4, [x29, 168] ++ strb w5, [x0, x4] ++ ldr x0, [x3, x2, lsl 3] ++ ldrh w2, [x29, 152] ++ strh w2, [x0, 48] ++ ldrb w2, [x0, 1] ++ ldr x0, [x1, 1328] ++ ldr x1, [x29, 120] ++ strb w2, [x0, x1] ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ mov w1, -1 ++ ldr x0, [x0, 288] ++ str w1, [x0, x4, lsl 2] ++.L3779: ++ ldr w0, [x29, 160] ++ add w0, w0, 1 ++ str w0, [x29, 160] ++ b .L3756 ++.L3775: ++ ldr x4, [x29, 184] ++ add w0, w0, w19 ++ add x0, x4, w0, sxtw 1 ++ ldrh w0, [x0, 16] ++ madd w0, w0, w8, w26 ++ b .L3871 ++.L3771: ++ cmp w0, 2 ++ bne .L3778 ++ ldrb w0, [x5, 1322] ++ ldrh w7, [x5, 1410] ++ cbnz w0, .L3777 ++ ldr w0, [x29, 164] ++ add w5, w19, w0 ++ ldr x0, [x29, 184] ++ add x5, x0, w5, sxtw 1 ++ ldrh w0, [x5, 16] ++ madd w0, w0, w7, w26 ++.L3868: ++ orr w0, w0, 33554432 ++ str w0, [x6, 40] ++ b .L3778 ++.L3777: ++ ldr x0, [x29, 184] ++ add w5, w19, w27, lsr 1 ++ add x5, x0, w5, sxtw 1 ++ ldrh w0, [x5, 16] ++ and w5, w27, 1 ++ madd w0, w0, w7, w26 ++ add w0, w0, w5 ++ b .L3868 ++.L3784: ++ ldr x3, [x0, w1, sxtw 3] ++ add w1, w1, 1 ++ ldr x5, [x0, w1, sxtw 3] ++ and w1, w1, 65535 ++ ldrb w5, [x5, 1] ++ strb w5, [x3] ++ b .L3783 ++.L3782: ++ ldrb w2, [x1, 1336] ++ ldr x1, [x29, 192] ++ cbz w2, .L3786 ++.L3789: ++ strb wzr, [x1, 60] ++ b .L3788 ++.L3786: ++ ldr w2, [x29, 180] ++ cmp w2, 1 ++ bne .L3787 ++ mov w2, 9 ++.L3869: ++ strb w2, [x1, 60] ++.L3788: ++ mov w2, w23 ++ add x1, x0, 24 ++ bl sblk_xlc_prog_pages ++.L3785: ++ add x0, x22, :lo12:.LANCHOR3 ++ ldrb w1, [x0, 1336] ++ cbz w1, .L3794 ++ ldr w0, [x29, 128] ++ add w23, w23, w0 ++ and w23, w23, 65535 ++.L3795: ++ add x21, x21, :lo12:.LANCHOR0 ++ add x22, x22, :lo12:.LANCHOR3 ++ ldr x1, [x21, 3384] ++ ldr w0, [x1, 52] ++ add w0, w0, w23 ++ str w0, [x1, 52] ++ ldr x1, [x29, 184] ++ ldrh w0, [x21, 5522] ++ add w23, w23, w0 ++ ldrh w0, [x22, 1338] ++ and w23, w23, 65535 ++ strh w23, [x21, 5522] ++ ldrb w1, [x1, 9] ++ mul w0, w0, w1 ++ cmp w23, w0 ++ blt .L3796 ++ ldr x0, [x21, 1128] ++ strh wzr, [x0, 86] ++.L3796: ++ bl gc_write_completed ++ b .L3733 ++.L3787: ++ ldr w2, [x29, 180] ++ cmp w2, 2 ++ bne .L3789 ++ mov w2, 13 ++ b .L3869 ++.L3781: ++ ldrb w2, [x1, 1322] ++ cbz w2, .L3807 ++ ldrb w1, [x1, 1323] ++ cbnz w1, .L3791 ++.L3790: ++ ldr w2, [x29, 176] ++ sub w2, w2, #1 ++.L3792: ++ cmp w1, w2 ++ bge .L3870 ++ ldr x3, [x0, w1, sxtw 3] ++ add w1, w1, 1 ++ ldr x5, [x0, w1, sxtw 3] ++ and w1, w1, 65535 ++ ldrb w5, [x5, 1] ++ strb w5, [x3] ++ b .L3792 ++.L3807: ++ mov w1, 0 ++ b .L3790 ++.L3791: ++ mov w1, w23 ++ bl sblk_3d_mlc_prog_pages ++ b .L3785 ++.L3794: ++ ldrb w1, [x0, 1322] ++ cbnz w1, .L3808 ++ add x1, x21, :lo12:.LANCHOR0 ++ ldrb w1, [x1, 1212] ++ cbz w1, .L3795 ++ ldrb w0, [x0, 1950] ++ ldrh w1, [x29, 176] ++ cbz w0, .L3809 ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x0, x0, 2136 ++ ldrh w0, [x0, w26, sxtw 1] ++ cmp w0, w26 ++ csel w23, w23, w1, cc ++ b .L3795 ++.L3808: ++ ldr w23, [x29, 156] ++ b .L3795 ++.L3809: ++ mov w23, w1 ++ b .L3795 ++ .size gc_do_copy_back, .-gc_do_copy_back ++ .align 2 ++ .global zftl_do_gc ++ .type zftl_do_gc, %function ++zftl_do_gc: ++ sub sp, sp, #128 ++ stp x29, x30, [sp, 16] ++ add x29, sp, 16 ++ stp x19, x20, [sp, 32] ++ adrp x19, .LANCHOR0 ++ stp x27, x28, [sp, 96] ++ mov w27, w0 ++ add x0, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 48] ++ stp x23, x24, [sp, 64] ++ cmp w27, 1 ++ stp x25, x26, [sp, 80] ++ adrp x20, .LANCHOR5 ++ ldrh w24, [x0, 3372] ++ ldrh w22, [x0, 3368] ++ ldrh w23, [x0, 3370] ++ add w22, w24, w22 ++ ldr x25, [x0, 1128] ++ and w22, w22, 65535 ++ beq .L3873 ++.L3885: ++ add x0, x20, :lo12:.LANCHOR5 ++ ldrb w1, [x0, 264] ++ cmp w1, 6 ++ bhi .L4000 ++ adrp x0, .L3876 ++ add x0, x0, :lo12:.L3876 ++ ldrh w0, [x0,w1,uxtw #1] ++ adr x1, .Lrtx3876 ++ add x0, x1, w0, sxth #2 ++ br x0 ++.Lrtx3876: ++ .section .rodata ++ .align 0 ++ .align 2 ++.L3876: ++ .2byte (.L3875 - .Lrtx3876) / 4 ++ .2byte (.L3877 - .Lrtx3876) / 4 ++ .2byte (.L3878 - .Lrtx3876) / 4 ++ .2byte (.L3879 - .Lrtx3876) / 4 ++ .2byte (.L3880 - .Lrtx3876) / 4 ++ .2byte (.L3881 - .Lrtx3876) / 4 ++ .2byte (.L3882 - .Lrtx3876) / 4 ++ .text ++.L3881: ++ add x21, x19, :lo12:.LANCHOR0 ++ mov w23, 0 ++ add x21, x21, 3416 ++.L3883: ++ bl gc_check_data_one_wl ++ cbz w0, .L3996 ++ add x19, x19, :lo12:.LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR5 ++ ldr x0, [x19, 1128] ++ strh wzr, [x19, 3472] ++ ldrh w0, [x0, 80] ++ bl ftl_free_sblk ++ ldr x1, [x19, 1128] ++ mov w0, -1 ++ ldr x2, [x19, 3384] ++ strh w0, [x1, 80] ++ strh w0, [x2, 126] ++ strh w0, [x1, 130] ++ ldr x0, [x19, 3424] ++ bl zbuf_free ++ strb wzr, [x20, 264] ++ str xzr, [x19, 3424] ++ b .L4090 ++.L3873: ++ add x0, x20, :lo12:.LANCHOR5 ++ ldr w21, [x0, 468] ++ cbnz w21, .L3884 ++ ldr w0, [x0, 472] ++ cbz w0, .L3885 ++.L3884: ++ adrp x0, .LANCHOR3+1380 ++ ldrh w0, [x0, #:lo12:.LANCHOR3+1380] ++ cmp w22, w0, lsr 2 ++ bls .L3885 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 3392] ++ cmp w0, w22 ++ bcs .L3885 ++ add w21, w21, 20 ++ bl timer_get_time ++ cmp w21, w0 ++ bcs .L3886 ++ add x0, x20, :lo12:.LANCHOR5 ++ str wzr, [x0, 468] ++.L3886: ++ add x26, x20, :lo12:.LANCHOR5 ++ ldr w21, [x26, 472] ++ bl timer_get_time ++ add w21, w21, 20 ++ cmp w21, w0 ++ bcs .L3887 ++ str wzr, [x26, 472] ++.L3887: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 1128] ++ ldrh w0, [x0, 124] ++ cbnz w0, .L3885 ++.L4000: ++ mov w23, 16 ++ b .L3872 ++.L3875: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w2, [x25, 80] ++ add w24, w24, w23 ++ and w24, w24, 65535 ++ ldrh w1, [x0, 3376] ++ ldrh w26, [x0, 3374] ++ add w26, w26, w1 ++ mov w1, 65535 ++ and w26, w26, 65535 ++ cmp w2, w1 ++ beq .L3888 ++ cbnz w27, .L3889 ++ ldrh w0, [x0, 3392] ++ cmp w22, w0, lsl 1 ++ bge .L4000 ++.L3889: ++ adrp x21, .LANCHOR3 ++ add x5, x21, :lo12:.LANCHOR3 ++ add x0, x5, 1368 ++ ldrh w1, [x5, 1378] ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ strh w1, [x5, 1378] ++ bl _list_get_gc_head_node ++ and w2, w0, 65535 ++ mov w1, 65535 ++ cmp w2, w1 ++ beq .L3891 ++ add x3, x20, :lo12:.LANCHOR5 ++ ubfiz x2, x2, 1, 16 ++ ldr w1, [x3, 268] ++ add w1, w1, 1 ++ str w1, [x3, 268] ++ add x3, x19, :lo12:.LANCHOR0 ++ ldr x4, [x3, 1120] ++ ldrh w2, [x4, x2] ++ ldrh w4, [x5, 1376] ++ cmp w4, w2 ++ bcs .L3892 ++ ldrh w4, [x3, 1096] ++ cmp w1, w4, lsr 4 ++ bls .L3891 ++ ldrh w1, [x3, 3406] ++ cmp w1, w2 ++ bls .L3891 ++.L3892: ++ add x1, x21, :lo12:.LANCHOR3 ++ ldrb w2, [x1, 1337] ++ mov w1, 0 ++ bl gc_add_sblk ++ cbz w0, .L3893 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 1 ++ str wzr, [x20, 268] ++ strb w0, [x20, 264] ++ b .L4000 ++.L3891: ++ add x0, x21, :lo12:.LANCHOR3 ++ strh wzr, [x0, 1378] ++.L3893: ++ cmp w24, 15 ++ bls .L4002 ++ add x1, x19, :lo12:.LANCHOR0 ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrh w1, [x1, 3378] ++ ldrh w0, [x0, 1382] ++ cmp w1, w0 ++ bhi .L4002 ++ cmp w26, 0 ++ cset w23, eq ++ add w23, w23, 1 ++.L3894: ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L3895 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w4, w24 ++ mov w3, w22 ++ mov w1, 2807 ++ ldr x0, [x19, 1128] ++ ldrh w7, [x0, 122] ++ ldrh w6, [x0, 120] ++ ldrh w5, [x0, 124] ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrb w2, [x0, 1337] ++ ldrh w0, [x25, 80] ++ str w0, [sp] ++ adrp x0, .LC299 ++ add x0, x0, :lo12:.LC299 ++ bl printk ++.L3895: ++ add x21, x21, :lo12:.LANCHOR3 ++ mov w2, 1 ++ mov w1, w23 ++ ldrb w0, [x21, 1337] ++ bl gc_search_src_blk ++ cmp w0, 0 ++ ble .L3896 ++.L3897: ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 1 ++.L4092: ++ strb w0, [x20, 264] ++ b .L4000 ++.L4002: ++ mov w23, 2 ++ b .L3894 ++.L3896: ++ ldrb w0, [x21, 1337] ++ mov w2, 1 ++ mov w1, 3 ++ bl gc_search_src_blk ++ cmp w0, 0 ++ bgt .L3897 ++ b .L4000 ++.L3888: ++ cmp w27, 1 ++ bne .L3898 ++ ldr x1, [x0, 3384] ++ ldrh w1, [x1, 150] ++ cbz w1, .L3899 ++ ldrh w0, [x0, 3372] ++ cmp w0, 8 ++ bls .L3899 ++ bl gc_ink_check_sblk ++.L3899: ++ bl gc_scan_static_data ++ adrp x21, .LANCHOR3 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 1128] ++ ldrh w0, [x0, 122] ++ cbz w0, .L3900 ++.L3901: ++ add x21, x21, :lo12:.LANCHOR3 ++ mov w0, 1 ++ add x20, x20, :lo12:.LANCHOR5 ++ strb w0, [x21, 1337] ++ b .L4092 ++.L3900: ++ bl gc_static_wearleveling ++ mov w23, w0 ++ cbnz w0, .L3901 ++ bl gc_block_vpn_scan ++ cbz w24, .L3902 ++ cmp w22, w26 ++ bcs .L3903 ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrh w0, [x0, 1380] ++ cmp w0, w22 ++ bhi .L3904 ++.L3903: ++ add x1, x21, :lo12:.LANCHOR3 ++ add w0, w22, w26 ++ ldrh w2, [x1, 1380] ++ cmp w0, w2 ++ blt .L3904 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w2, [x0, 3378] ++ ldrh w0, [x1, 1382] ++ cmp w2, w0 ++ bcc .L3902 ++.L3904: ++ add x5, x21, :lo12:.LANCHOR3 ++ mov w0, 1 ++ strb w0, [x5, 1337] ++ mov w0, 16 ++ bl zftl_get_gc_node.part.10 ++ and w1, w0, 65535 ++ mov w2, 65535 ++ cmp w1, w2 ++ beq .L3905 ++ add x2, x19, :lo12:.LANCHOR0 ++ ubfiz x1, x1, 1, 16 ++ ldr x3, [x2, 1120] ++ add x2, x20, :lo12:.LANCHOR5 ++ ldrh w3, [x3, x1] ++ ldrh w1, [x2, 272] ++ cmp w3, w1 ++ bcs .L3905 ++ cmp w22, 2 ++ bls .L3905 ++ str wzr, [x2, 268] ++ mov w1, 1 ++ strb wzr, [x5, 1337] ++ mov w2, 0 ++ bl gc_add_sblk ++ cbnz w0, .L3897 ++.L3905: ++ add x5, x21, :lo12:.LANCHOR3 ++ mov w1, 0 ++ add x0, x5, 1360 ++ bl _list_get_gc_head_node ++ and w1, w0, 65535 ++ mov w2, 65535 ++ cmp w1, w2 ++ beq .L3906 ++ add x2, x19, :lo12:.LANCHOR0 ++ ubfiz x1, x1, 1, 16 ++ ldr x3, [x2, 1120] ++ add x2, x20, :lo12:.LANCHOR5 ++ ldrh w3, [x3, x1] ++ ldrh w1, [x2, 272] ++ cmp w3, w1 ++ bcs .L3906 ++ cmp w22, 2 ++ bls .L3906 ++ str wzr, [x2, 268] ++ mov w1, 1 ++ strb wzr, [x5, 1337] ++ mov w2, 0 ++ bl gc_add_sblk ++ cbnz w0, .L3897 ++.L3906: ++ add x1, x20, :lo12:.LANCHOR5 ++ add x2, x21, :lo12:.LANCHOR3 ++ ldrh w0, [x1, 272] ++ ldrh w8, [x2, 1376] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ strh w0, [x1, 272] ++ cmp w0, w8, lsr 5 ++ bls .L3907 ++ mov w0, 4 ++ strh w0, [x1, 272] ++.L3907: ++ add x6, x20, :lo12:.LANCHOR5 ++ add x7, x19, :lo12:.LANCHOR0 ++ add x5, x21, :lo12:.LANCHOR3 ++ ldr w0, [x6, 268] ++ ldrh w1, [x7, 1096] ++ add w0, w0, 1 ++ strh wzr, [x5, 1352] ++ strh wzr, [x5, 1354] ++ strh wzr, [x5, 1356] ++ cmp w0, w1, lsr 5 ++ str w0, [x6, 268] ++ bls .L3908 ++ ldrh w0, [x7, 3378] ++ cmp w0, w24 ++ bls .L3908 ++ mov w1, 0 ++ add x0, x5, 1368 ++ bl _list_get_gc_head_node ++ and w0, w0, 65535 ++ mov w1, 65535 ++ cmp w0, w1 ++ bne .L3909 ++.L4082: ++ mov w23, 16 ++ b .L3910 ++.L3909: ++ ldr x1, [x7, 1120] ++ ubfiz x0, x0, 1, 16 ++ ldrh w1, [x1, x0] ++ ldrb w0, [x5, 1321] ++ mul w0, w0, w8 ++ cmp w1, w0 ++ bgt .L4082 ++ ldrb w0, [x5, 1337] ++ mov w2, 4 ++ mov w1, 2 ++ str wzr, [x6, 268] ++.L4081: ++ bl gc_search_src_blk ++ and w0, w0, 65535 ++ cbz w0, .L4082 ++ b .L3897 ++.L3908: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x3, x21, :lo12:.LANCHOR3 ++ ldrh w2, [x0, 3378] ++ ldrh w1, [x3, 1382] ++ cmp w2, w1 ++ bcc .L3913 ++ mov w2, 1 ++ mov w1, 2 ++ ldrb w0, [x3, 1337] ++ b .L4081 ++.L3913: ++ ldrh w1, [x0, 3374] ++ cbnz w1, .L3914 ++ ldrh w1, [x0, 3376] ++ cmp w1, 8 ++ bls .L3915 ++.L3914: ++ add x21, x21, :lo12:.LANCHOR3 ++ mov w2, 4 ++ mov w1, 1 ++ ldrb w0, [x21, 1337] ++ b .L4081 ++.L3915: ++ ldrh w0, [x0, 5526] ++ cbnz w0, .L4082 ++.L3910: ++ add x0, x19, :lo12:.LANCHOR0 ++ adrp x21, .LANCHOR3 ++ ldr w1, [x0, 3396] ++ cbz w1, .L3916 ++ str wzr, [x0, 3396] ++ cmp w24, 0 ++ ccmp w22, 15, 2, ne ++ add x0, x21, :lo12:.LANCHOR3 ++ bls .L3917 ++ strb wzr, [x0, 1337] ++.L3918: ++ add x5, x21, :lo12:.LANCHOR3 ++ mov w1, 0 ++ add x0, x5, 1368 ++ bl _list_get_gc_head_node ++ and w1, w0, 65535 ++ mov w2, 65535 ++ cmp w1, w2 ++ beq .L3919 ++ add x2, x19, :lo12:.LANCHOR0 ++ ubfiz x1, x1, 1, 16 ++ ldr x3, [x2, 1120] ++ ldrh w1, [x3, x1] ++ cmp w1, 8 ++ bhi .L3919 ++ mov w1, 1 ++ str w1, [x2, 3396] ++ ldrb w2, [x5, 1337] ++ mov w1, 0 ++ bl gc_add_sblk ++ cbnz w0, .L3897 ++.L3919: ++ add x5, x21, :lo12:.LANCHOR3 ++ mov w1, 0 ++ add x0, x5, 1360 ++ bl _list_get_gc_head_node ++ and w1, w0, 65535 ++ mov w2, 65535 ++ cmp w1, w2 ++ beq .L3920 ++ add x2, x19, :lo12:.LANCHOR0 ++ ubfiz x1, x1, 1, 16 ++ ldr x3, [x2, 1120] ++ ldrh w1, [x3, x1] ++ cmp w1, 4 ++ bhi .L3920 ++ mov w1, 1 ++ str w1, [x2, 3396] ++ ldrb w2, [x5, 1337] ++ mov w1, 0 ++ bl gc_add_sblk ++ cbnz w0, .L3897 ++.L3920: ++ mov w0, 0 ++ bl zftl_get_gc_node.part.10 ++ and w1, w0, 65535 ++ mov w2, 65535 ++ cmp w1, w2 ++ beq .L3916 ++ add x2, x19, :lo12:.LANCHOR0 ++ ubfiz x1, x1, 1, 16 ++ ldr x3, [x2, 1120] ++ ldrh w1, [x3, x1] ++ cmp w1, 4 ++ bhi .L3916 ++ mov w1, 1 ++ str w1, [x2, 3396] ++ add x2, x21, :lo12:.LANCHOR3 ++ ldrb w2, [x2, 1337] ++ bl gc_add_sblk ++ cbnz w0, .L3897 ++.L3916: ++ add x28, x19, :lo12:.LANCHOR0 ++ add x25, x21, :lo12:.LANCHOR3 ++ mov w1, 1 ++ ldr x0, [x28, 1128] ++ strb w1, [x25, 1337] ++ ldrh w0, [x0, 124] ++ cbz w0, .L3921 ++ add x20, x20, :lo12:.LANCHOR5 ++ strb wzr, [x25, 1337] ++ strb w1, [x20, 264] ++.L3872: ++ mov w0, w23 ++ 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, 128 ++ ret ++.L3902: ++ add x21, x21, :lo12:.LANCHOR3 ++ add x0, x20, :lo12:.LANCHOR5 ++ ldrh w2, [x21, 1376] ++ ldrh w1, [x0, 272] ++ cmp w1, w2, lsr 5 ++ bcc .L4082 ++ mov w1, 4 ++ strh w1, [x0, 272] ++ b .L4082 ++.L3898: ++ ldrh w1, [x0, 3392] ++ cmp w1, w22 ++ bcs .L4082 ++ ldr x0, [x0, 1128] ++ ldrh w0, [x0, 124] ++ cbz w0, .L4000 ++ b .L4082 ++.L3917: ++ mov w1, 1 ++ strb w1, [x0, 1337] ++ b .L3918 ++.L3921: ++ ldrh w0, [x28, 3392] ++ cmp w22, w0 ++ bcs .L3922 ++ cbz w24, .L3923 ++ cmp w24, 16 ++ bls .L3924 ++ ldrh w2, [x28, 3378] ++ ldrh w0, [x25, 1382] ++ cmp w2, w0 ++ bhi .L3924 ++ mov w2, 4 ++ mov w0, w1 ++ bl gc_search_src_blk ++ tst w0, 65535 ++ bne .L3925 ++.L4089: ++ mov w2, 4 ++ mov w1, 3 ++ ldrb w0, [x25, 1337] ++ b .L4084 ++.L3925: ++ mov w1, 0 ++ add x0, x25, 1368 ++ bl _list_get_gc_head_node ++ and w2, w0, 65535 ++ mov w1, 65535 ++ cmp w2, w1 ++ beq .L3928 ++ add x3, x20, :lo12:.LANCHOR5 ++ ubfiz x2, x2, 1, 16 ++ ldr w1, [x3, 268] ++ add w1, w1, 1 ++ str w1, [x3, 268] ++ ldr x3, [x28, 1120] ++ ldrh w2, [x3, x2] ++ ldrh w3, [x25, 1376] ++ cmp w3, w2 ++ bcs .L3929 ++ ldrh w3, [x28, 1096] ++ cmp w1, w3, lsr 4 ++ bls .L3928 ++ ldrh w1, [x28, 3406] ++ cmp w1, w2 ++ bls .L3928 ++.L3929: ++ add x21, x21, :lo12:.LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w1, 0 ++ ldrb w2, [x21, 1337] ++ bl gc_add_sblk ++ mov w0, 1 ++ str w0, [x19, 3396] ++ add x0, x20, :lo12:.LANCHOR5 ++ str wzr, [x0, 268] ++.L3928: ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 1 ++ strb w0, [x20, 264] ++ b .L3872 ++.L3924: ++ mov w2, 1 ++ mov w1, 2 ++ mov w0, w2 ++ bl gc_search_src_blk ++ tst w0, 65535 ++ bne .L3928 ++ add x21, x21, :lo12:.LANCHOR3 ++ mov w2, 4 ++ mov w1, 3 ++ ldrb w0, [x21, 1337] ++.L4084: ++ bl gc_search_src_blk ++ and w0, w0, 65535 ++.L3926: ++ cbnz w0, .L3928 ++ b .L3872 ++.L3923: ++ strb wzr, [x25, 1337] ++ cmp w22, 16 ++ bls .L3931 ++ mov w2, 4 ++ mov w1, 3 ++ mov w0, 0 ++ b .L4084 ++.L3931: ++ mov w2, w1 ++ mov w0, 0 ++ bl gc_search_src_blk ++ tst w0, 65535 ++ bne .L3928 ++ b .L4089 ++.L3922: ++ cmp w27, 1 ++ bne .L3872 ++ cmp w22, w0, lsl 1 ++ bge .L3932 ++ cmp w26, w24, lsr 1 ++ bcs .L3933 ++ ldrh w1, [x28, 3378] ++ ldrh w0, [x25, 1382] ++ cmp w1, w0 ++ bcs .L3933 ++ ldrh w0, [x25, 1380] ++ lsr w0, w0, 2 ++ strh w0, [x28, 3392] ++ b .L3872 ++.L3933: ++ mov w0, 8 ++ bl zftl_get_gc_node.part.10 ++ and w1, w0, 65535 ++ mov w2, 65535 ++ cmp w1, w2 ++ beq .L3934 ++ add x2, x19, :lo12:.LANCHOR0 ++ ubfiz x1, x1, 1, 16 ++ ldr x2, [x2, 1120] ++ ldrh w1, [x2, x1] ++ cmp w1, 3 ++ bhi .L3934 ++ cbz w22, .L3934 ++ add x1, x21, :lo12:.LANCHOR3 ++ mov w2, 0 ++ strb wzr, [x1, 1337] ++ mov w1, 1 ++ bl gc_add_sblk ++ cbnz w0, .L3928 ++.L3934: ++ add x5, x21, :lo12:.LANCHOR3 ++ mov w1, 0 ++ add x0, x5, 1368 ++ bl _list_get_gc_head_node ++ and w25, w0, 65535 ++ mov w1, 65535 ++ mov w28, w25 ++ cmp w25, w1 ++ bne .L3935 ++.L3940: ++ cmp w24, 1 ++ bhi .L3936 ++.L3937: ++ cmp w22, w26 ++ bcs .L3944 ++ add x21, x21, :lo12:.LANCHOR3 ++ mov w0, 4 ++ add x19, x19, :lo12:.LANCHOR0 ++ strb wzr, [x21, 1337] ++ bl zftl_get_gc_node.part.10 ++ and w0, w0, 65535 ++ mov w1, 65535 ++ cmp w0, w1 ++ beq .L4088 ++ ldr x1, [x19, 1120] ++ ubfiz x0, x0, 1, 16 ++ ldrb w2, [x21, 1321] ++ ldrh w1, [x1, x0] ++ ldrh w0, [x21, 1376] ++ mul w0, w0, w2 ++ cmp w1, w0, lsr 1 ++ ble .L3946 ++.L4088: ++ ldrh w0, [x21, 1380] ++ lsr w0, w0, 2 ++ strh w0, [x19, 3392] ++ b .L3872 ++.L3935: ++ add x27, x20, :lo12:.LANCHOR5 ++ add x2, x19, :lo12:.LANCHOR0 ++ uxtw x25, w25 ++ ldr w1, [x27, 268] ++ ldrh w3, [x2, 1096] ++ add w1, w1, 1 ++ str w1, [x27, 268] ++ cmp w1, w3, lsr 4 ++ bls .L3938 ++ ldr x1, [x2, 1120] ++ str wzr, [x27, 268] ++ ldrh w3, [x1, x25, lsl 1] ++ ldrh w1, [x2, 3406] ++ cmp w3, w1 ++ bcs .L3938 ++ mov w3, 1 ++ mov w2, 1 ++ strb w3, [x5, 1337] ++ mov w1, 0 ++ str w3, [x29, 108] ++ bl gc_add_sblk ++ ldr w3, [x29, 108] ++ cbz w0, .L3938 ++ strb w3, [x27, 264] ++ b .L3872 ++.L3938: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x3, x21, :lo12:.LANCHOR3 ++ ldr x1, [x0, 1120] ++ ldrh w2, [x1, x25, lsl 1] ++ ldrh w1, [x3, 1376] ++ cmp w2, w1, lsr 1 ++ bhi .L3939 ++ mov w2, 0 ++ mov w1, 1 ++ mov w0, w28 ++ bl gc_add_sblk ++ b .L3928 ++.L3939: ++ ldrh w1, [x0, 3374] ++ ldrh w4, [x0, 3376] ++ ldrh w3, [x3, 1380] ++ add w1, w1, w4 ++ cmp w1, w3, lsl 1 ++ ble .L3940 ++ ldrh w0, [x0, 3406] ++ cmp w0, w2 ++ bcc .L3937 ++ b .L3940 ++.L3936: ++ add x25, x21, :lo12:.LANCHOR3 ++ mov w1, 1 ++ cmp w24, 16 ++ strb w1, [x25, 1337] ++ bls .L3941 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w2, [x0, 3378] ++ ldrh w0, [x25, 1382] ++ cmp w2, w0 ++ bhi .L3941 ++ mov w2, 4 ++ mov w0, w1 ++ bl gc_search_src_blk ++ ands w0, w0, 65535 ++ bne .L3942 ++ ldrb w0, [x25, 1337] ++ mov w2, 4 ++ mov w1, 3 ++.L4083: ++ bl gc_search_src_blk ++ and w0, w0, 65535 ++.L3942: ++ add x21, x21, :lo12:.LANCHOR3 ++ add x19, x19, :lo12:.LANCHOR0 ++ cmp w22, w26, lsr 1 ++ ldrh w1, [x21, 1380] ++ bls .L4085 ++ lsr w1, w1, 2 ++.L4086: ++ strh w1, [x19, 3392] ++ b .L3926 ++.L3941: ++ mov w2, 1 ++ mov w1, 2 ++ mov w0, w2 ++ bl gc_search_src_blk ++ ands w0, w0, 65535 ++ bne .L3942 ++ add x0, x21, :lo12:.LANCHOR3 ++ mov w2, 4 ++ mov w1, 3 ++ ldrb w0, [x0, 1337] ++ b .L4083 ++.L3946: ++ mov w1, 3 ++ mov w2, 4 ++ mov w0, 0 ++ bl gc_search_src_blk ++ ldrh w1, [x21, 1380] ++ and w0, w0, 65535 ++.L4085: ++ lsr w1, w1, 1 ++ b .L4086 ++.L3944: ++ add x19, x19, :lo12:.LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR3 ++ b .L4088 ++.L3932: ++ ldrh w0, [x25, 1380] ++ lsr w0, w0, 2 ++ strh w0, [x28, 3392] ++ ldrh w0, [x28, 5526] ++ cmp w0, 0 ++ csel w23, w23, wzr, ne ++ b .L3872 ++.L3877: ++ add x6, x19, :lo12:.LANCHOR0 ++ mov w0, 65535 ++ ldrh w1, [x6, 3416] ++ cmp w1, w0 ++ bne .L3947 ++ bl gc_get_src_blk ++ strh w0, [x6, 3416] ++.L3947: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w2, 65535 ++ ldrh w1, [x0, 3416] ++ cmp w1, w2 ++ beq .L3948 ++ ldrh w2, [x0, 1096] ++ cmp w2, w1 ++ bhi .L3948 ++ mov w1, -1 ++ strh w1, [x0, 3416] ++.L3948: ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w2, 65535 ++ ldrh w3, [x0, 3416] ++ cmp w3, w2 ++ beq .L4091 ++ ldrh w5, [x0, 3472] ++ uxtw x4, w3 ++ ldr x2, [x0, 1104] ++ add x2, x2, x4, lsl 2 ++ cbz w5, .L3950 ++ add x0, x0, 3474 ++ mov w1, 0 ++.L3952: ++ ldrh w6, [x0], 2 ++ cmp w6, w3 ++ bne .L3951 ++.L3956: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w0, -1 ++ strh w0, [x19, 3416] ++ b .L4000 ++.L3951: ++ add w1, w1, 1 ++ and w1, w1, 65535 ++ cmp w5, w1 ++ bne .L3952 ++.L3950: ++ ldrb w0, [x2, 2] ++ and w1, w0, 224 ++ cmp w1, 224 ++ beq .L3953 ++ tst w0, 192 ++ bne .L3954 ++.L3953: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x0, [x0, 1120] ++ ldrh w0, [x0, x4, lsl 1] ++ cbz w0, .L3956 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1040 ++ mov w2, 3306 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ b .L3956 ++.L3954: ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 2 ++ b .L4092 ++.L3878: ++ bl gc_scan_src_blk ++ cmn w0, #1 ++ bne .L3957 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 3 ++ b .L4092 ++.L3957: ++ add x1, x19, :lo12:.LANCHOR0 ++ mov w3, 65535 ++ ldrh w0, [x1, 3416] ++ cmp w0, w3 ++ beq .L3897 ++ ldrh w3, [x1, 3440] ++ add x20, x20, :lo12:.LANCHOR5 ++ cbz w3, .L3958 ++ mov w0, 4 ++ strh wzr, [x1, 3442] ++ strb w0, [x20, 264] ++ b .L4000 ++.L3958: ++ ldr x1, [x1, 1120] ++ ubfiz x0, x0, 1, 16 ++ mov w2, 1 ++ strb w2, [x20, 264] ++ ldrh w0, [x1, x0] ++ cbz w0, .L3959 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1040 ++ mov w2, 3336 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3959: ++ add x20, x19, :lo12:.LANCHOR0 ++ add x21, x20, 3416 ++ ldrh w0, [x20, 3416] ++ bl ftl_free_sblk ++ ldr x0, [x20, 1120] ++ ldrh w1, [x20, 3416] ++ strh wzr, [x0, x1, lsl 1] ++ ldrh w0, [x21, 30] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ cmp w0, 8 ++ bhi .L3960 ++ strh w0, [x21, 30] ++ b .L3956 ++.L3960: ++ strh wzr, [x21, 30] ++ bl ftl_flush ++ bl pm_flush ++ bl ftl_ext_info_flush ++ mov w0, 0 ++ bl ftl_info_flush ++ b .L3956 ++.L3879: ++ add x23, x19, :lo12:.LANCHOR0 ++ adrp x24, .LANCHOR3 ++ add x21, x23, 3416 ++ add x24, x24, :lo12:.LANCHOR3 ++.L4053: ++ bl gc_scan_src_blk_one_page ++ ldrh w1, [x21, 2] ++ ldrh w0, [x24, 1376] ++ cmp w1, w0 ++ bcs .L3962 ++ cmp w22, 7 ++ bls .L4053 ++ b .L4000 ++.L3962: ++ ldrh w3, [x21, 24] ++ ldrh w1, [x21] ++ cbz w3, .L3963 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 4 ++ ldr x2, [x23, 1120] ++ strh wzr, [x21, 26] ++ strb w0, [x20, 264] ++ ubfiz x0, x1, 1, 16 ++ ldrh w2, [x2, x0] ++ cmp w3, w2 ++ beq .L3964 ++ adrp x0, .LANCHOR2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 10, .L3964 ++ adrp x0, .LC300 ++ add x0, x0, :lo12:.LC300 ++ bl printk ++.L3964: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w2, [x0, 3416] ++ ldr x1, [x0, 1120] ++ ldrh w0, [x0, 3440] ++ ldrh w1, [x1, x2, lsl 1] ++ cmp w1, w0 ++ beq .L3965 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1040 ++ mov w2, 3379 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3965: ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w1, [x19, 3416] ++ ldr x0, [x19, 1120] ++ ldrh w2, [x19, 3440] ++ strh w2, [x0, x1, lsl 1] ++ b .L4000 ++.L3963: ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 1 ++ ldr x21, [x23, 1104] ++ strb w0, [x20, 264] ++ adrp x0, .LANCHOR2 ++ add x21, x21, w1, uxth 2 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 8, .L3966 ++ ldrb w2, [x21, 2] ++ adrp x0, .LC301 ++ add x0, x0, :lo12:.LC301 ++ ubfx x2, x2, 5, 3 ++ bl printk ++.L3966: ++ ldrb w0, [x21, 2] ++ and w1, w0, 224 ++ cmp w1, 224 ++ beq .L3967 ++ tst w0, 192 ++ bne .L3968 ++.L3967: ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1040 ++ mov w2, 3389 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3968: ++ add x19, x19, :lo12:.LANCHOR0 ++ add x20, x19, 3416 ++ ldrh w0, [x19, 3416] ++ bl ftl_free_sblk ++ mov w0, -1 ++ strh w0, [x19, 3416] ++ ldrh w0, [x20, 30] ++ add w0, w0, 1 ++ and w0, w0, 65535 ++ cmp w0, 8 ++ bhi .L3969 ++ strh w0, [x20, 30] ++ b .L4000 ++.L3969: ++ strh wzr, [x20, 30] ++.L4090: ++ bl flt_sys_flush ++ b .L4000 ++.L3880: ++ cbnz w27, .L3970 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x0, 3392] ++ cmp w0, w22 ++ bcc .L4000 ++.L3970: ++ ldrh w1, [x25, 80] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L3971 ++ adrp x21, .LANCHOR3 ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrb w23, [x0, 1337] ++ cmp w23, 1 ++ bne .L3971 ++ bl ftl_flush ++ add x0, x19, :lo12:.LANCHOR0 ++ mov w1, 5 ++ ldrh w0, [x0, 5608] ++ cbz w0, .L3972 ++ mov w0, w23 ++.L4087: ++ bl zftl_gc_get_free_sblk ++ and w22, w0, 65535 ++ mov w0, 65535 ++ cmp w22, w0 ++ beq .L3974 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr x23, [x0, 1104] ++ add x23, x23, w22, uxth 2 ++ ldrb w0, [x23, 2] ++ tst w0, 224 ++ beq .L3975 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1040 ++ mov w2, 3423 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3975: ++ ldrb w0, [x23, 2] ++ mov w1, 5 ++ bfi w0, w1, 5, 3 ++ orr w0, w0, 16 ++ strb w0, [x23, 2] ++.L3999: ++ mov w1, 1 ++ mov w0, w22 ++ bl ftl_erase_sblk ++ add x21, x21, :lo12:.LANCHOR3 ++ mov w0, 5 ++ strb w0, [x25, 84] ++ add x1, x25, 96 ++ mov w0, w22 ++ bl ftl_get_blk_list_in_sblk ++ and w0, w0, 255 ++ ldrh w1, [x21, 1376] ++ add x20, x20, :lo12:.LANCHOR5 ++ strb w0, [x25, 89] ++ add x19, x19, :lo12:.LANCHOR0 ++ ldrh w2, [x21, 1338] ++ strh w22, [x25, 80] ++ mul w0, w0, w1 ++ strh wzr, [x25, 82] ++ strh w0, [x25, 86] ++ mov w1, 255 ++ ldrb w0, [x21, 1321] ++ strb wzr, [x25, 85] ++ strh wzr, [x25, 90] ++ mul w2, w2, w0 ++ ldr x0, [x20, 280] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldrb w0, [x21, 1321] ++ mov w1, 255 ++ ldrh w2, [x21, 1338] ++ mul w2, w2, w0 ++ ldr x0, [x20, 288] ++ lsl w2, w2, 2 ++ bl ftl_memset ++ ldrb w0, [x21, 1321] ++ mov w1, 255 ++ ldrh w2, [x21, 1338] ++ mul w2, w2, w0 ++ ldr x0, [x21, 1328] ++ bl ftl_memset ++ ldr x0, [x19, 1128] ++ mov w1, -1 ++ str w22, [x0, 132] ++ strh w1, [x0, 128] ++ strh w1, [x0, 130] ++ bl pm_flush ++ bl ftl_ext_info_flush ++ strh wzr, [x19, 3472] ++ ldr x0, [x19, 3384] ++ strh w22, [x0, 126] ++ mov w0, -1 ++ strh wzr, [x19, 5522] ++ str w0, [x19, 5612] ++ mov w0, 0 ++ strh wzr, [x19, 5524] ++ strh wzr, [x19, 5610] ++ bl ftl_info_flush ++ b .L4000 ++.L3972: ++ mov w0, 0 ++ b .L4087 ++.L3971: ++ cmp w27, 1 ++ mov w23, 4 ++ csinc w23, w23, wzr, eq ++ add x26, x19, :lo12:.LANCHOR0 ++ cmp w22, 15 ++ mov w0, w23 ++ add w23, w23, 4 ++ adrp x22, .LANCHOR3 ++ csel w23, w23, w0, ls ++ add x24, x22, :lo12:.LANCHOR3 ++ add x21, x26, 3416 ++.L3978: ++ sub w23, w23, #1 ++ and w23, w23, 255 ++ cmp w23, 255 ++ beq .L4000 ++ bl gc_do_copy_back ++ ldrb w0, [x24, 1337] ++ cbnz w0, .L3979 ++ ldrb w0, [x26, 3353] ++ cmp w0, 3 ++ bhi .L3980 ++ bl ftl_write_commit ++.L3980: ++ ldrh w1, [x21, 26] ++ ldrh w0, [x21, 24] ++ cmp w1, w0 ++ bcc .L3978 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 1 ++ strb w0, [x20, 264] ++ bl ftl_write_commit ++ bl ftl_flush ++ ldrh w1, [x21] ++ ldr x0, [x26, 1120] ++ ldrh w0, [x0, x1, lsl 1] ++ cbz w0, .L3982 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1040 ++ mov w2, 3507 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L3982: ++ add x1, x19, :lo12:.LANCHOR0 ++ ldrh w0, [x1, 3416] ++ ldr x1, [x1, 1120] ++ ubfiz x2, x0, 1, 16 ++ ldrh w1, [x1, x2] ++ cbnz w1, .L3983 ++ bl ftl_free_sblk ++ b .L3956 ++.L3983: ++ mov w2, 1 ++ mov w1, 0 ++ bl gc_add_sblk ++ b .L3956 ++.L3979: ++ ldrh w0, [x21, 2194] ++ cbz w0, .L3984 ++ strh wzr, [x21, 2194] ++ bl sblk_wait_write_queue_completed ++ bl gc_write_completed ++ ldr w0, [x21, 2196] ++ cmn w0, #1 ++ beq .L3985 ++ ldrb w1, [x24, 1950] ++ cbnz w1, .L3986 ++ ldrb w1, [x24, 1322] ++ cbz w1, .L3987 ++.L3986: ++ add x4, x19, :lo12:.LANCHOR0 ++ ldr x1, [x4, 3384] ++ ldr w2, [x1, 156] ++ mov w1, 20041 ++ movk w1, 0x444b, lsl 16 ++ cmp w2, w1 ++ bne .L3987 ++ add x22, x22, :lo12:.LANCHOR3 ++ ldrb w2, [x4, 1205] ++ mov w1, 24 ++ sub w1, w1, w2 ++ ldrh w3, [x22, 1304] ++ sub w2, w1, w3 ++ mov w1, 1 ++ lsr w0, w0, w3 ++ lsl w1, w1, w2 ++ sub w1, w1, #1 ++ and w0, w1, w0 ++ ldrb w1, [x22, 1306] ++ ldr x2, [x4, 1104] ++ udiv w0, w0, w1 ++ lsl x0, x0, 2 ++ add x5, x2, x0 ++ ldrb w1, [x5, 2] ++ tbz x1, 3, .L3985 ++ ldrh w3, [x4, 3368] ++ ldrh w6, [x22, 1380] ++ add w3, w3, 8 ++ cmp w3, w6 ++ bge .L3985 ++ and w1, w1, -25 ++ strb w1, [x5, 2] ++ ldrh w1, [x4, 1112] ++ ldr w3, [x2, x0] ++ ldrh w4, [x2, x0] ++ ubfx x3, x3, 11, 8 ++ and w5, w4, 2047 ++ mul w1, w1, w3 ++ lsr w3, w3, 3 ++ add w1, w1, w1, lsl 1 ++ add w1, w5, w1, lsr 2 ++ bfi w4, w1, 0, 11 ++ strh w4, [x2, x0] ++ ldr w1, [x2, x0] ++ bfi w1, w3, 11, 8 ++ str w1, [x2, x0] ++.L3985: ++ add x21, x19, :lo12:.LANCHOR0 ++ ldr x0, [x21, 1128] ++ str wzr, [x21, 5612] ++ strh wzr, [x21, 3472] ++ ldrh w0, [x0, 80] ++ bl ftl_free_sblk ++ ldr x1, [x21, 1128] ++ mov w0, -1 ++ ldr x2, [x21, 3384] ++ strh w0, [x1, 80] ++ strh w0, [x2, 126] ++ strh w0, [x1, 130] ++ ldr x0, [x21, 3424] ++ cbz x0, .L3988 ++ bl zbuf_free ++.L3988: ++ add x19, x19, :lo12:.LANCHOR0 ++ add x20, x20, :lo12:.LANCHOR5 ++ str xzr, [x19, 3424] ++ bl flt_sys_flush ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1040 ++ mov w2, 3567 ++ strb wzr, [x20, 264] ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ b .L4000 ++.L3987: ++ bl ftl_mask_bad_block ++ b .L3985 ++.L3984: ++ ldrh w0, [x25, 86] ++ ldrh w1, [x21, 26] ++ cmp w0, 1 ++ ldrh w0, [x21, 24] ++ bls .L3989 ++ cmp w1, w0 ++ bcc .L3978 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 1 ++ strb w0, [x20, 264] ++ ldrh w0, [x21, 56] ++ add w1, w0, 1 ++ strh w1, [x21, 56] ++ add x0, x21, w0, sxtw 1 ++ ldrh w1, [x21] ++ strh w1, [x0, 58] ++ mov w0, -1 ++ strh w0, [x21] ++ b .L4000 ++.L3989: ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w2, 5 ++ cmp w1, w0 ++ strb w2, [x20, 264] ++ bcc .L3990 ++ ldrh w0, [x21, 56] ++ add w1, w0, 1 ++ strh w1, [x21, 56] ++ add x0, x21, w0, sxtw 1 ++ ldrh w1, [x21] ++ strh w1, [x0, 58] ++ mov w0, -1 ++ strh w0, [x21] ++.L3990: ++ add x20, x19, :lo12:.LANCHOR0 ++ bl ftl_flush ++ bl sblk_wait_write_queue_completed ++ bl gc_write_completed ++ ldr x0, [x20, 1128] ++ ldrh w1, [x25, 80] ++ strh w1, [x0, 128] ++ bl pm_flush ++ bl ftl_ext_info_flush ++ strh wzr, [x20, 3432] ++ add x1, x22, :lo12:.LANCHOR3 ++ ldrb w3, [x20, 1212] ++ ldrh w2, [x1, 1376] ++ strh w2, [x20, 3434] ++ ldrb w2, [x1, 1320] ++ strh w2, [x20, 3436] ++ cbz w3, .L3991 ++ ldrh w1, [x1, 1338] ++ strh w1, [x20, 3434] ++ mov w1, 1 ++ strh w1, [x20, 3436] ++.L3991: ++ cmp w2, 2 ++ bne .L3993 ++ add x0, x19, :lo12:.LANCHOR0 ++ add x22, x22, :lo12:.LANCHOR3 ++ add x0, x0, 3416 ++ ldrh w1, [x0, 18] ++ ubfiz w1, w1, 1, 15 ++ strh w1, [x0, 18] ++ ldrb w1, [x22, 1322] ++ cbnz w1, .L3993 ++ mov w1, 1 ++ strh w1, [x0, 20] ++.L3993: ++ add x19, x19, :lo12:.LANCHOR0 ++ strh wzr, [x19, 3438] ++ b .L4000 ++.L3996: ++ ldrh w1, [x21, 16] ++ ldrh w0, [x21, 18] ++ cmp w1, w0 ++ bcc .L3997 ++ add x20, x20, :lo12:.LANCHOR5 ++ mov w0, 6 ++ strb w0, [x20, 264] ++ ldr x0, [x21, 8] ++ bl zbuf_free ++ str xzr, [x21, 8] ++ b .L4000 ++.L3997: ++ cmp w22, 15 ++ bls .L3883 ++ cmp w27, 1 ++ bne .L4000 ++ add w23, w23, 1 ++ and w23, w23, 255 ++ cmp w23, 4 ++ bls .L3883 ++ b .L4000 ++.L3882: ++ bl gc_update_l2p_map_new ++ mov w21, -1 ++ bl gc_free_src_blk ++ add x19, x19, :lo12:.LANCHOR0 ++ bl ftl_flush ++ bl pm_flush ++ strh w21, [x25, 80] ++ bl ftl_ext_info_flush ++ ldr x0, [x19, 3384] ++ strh w21, [x0, 126] ++ mov w0, 0 ++ bl ftl_info_flush ++.L4091: ++ add x20, x20, :lo12:.LANCHOR5 ++ strb wzr, [x20, 264] ++ b .L4000 ++.L3974: ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1040 ++ mov w2, 3430 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++ b .L3999 ++ .size zftl_do_gc, .-zftl_do_gc ++ .align 2 ++ .global zftl_init ++ .type zftl_init, %function ++zftl_init: ++ stp x29, x30, [sp, -80]! ++ mov w0, -1 ++ adrp x1, .LC1 ++ add x1, x1, :lo12:.LC1 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ stp x21, x22, [sp, 32] ++ adrp x20, .LANCHOR5 ++ stp x23, x24, [sp, 48] ++ adrp x21, .LANCHOR3 ++ str x25, [sp, 64] ++ add x23, x21, :lo12:.LANCHOR3 ++ add x24, x19, :lo12:.LANCHOR0 ++ add x25, x20, :lo12:.LANCHOR5 ++ adrp x22, .LANCHOR2 ++ strb w0, [x23, 1956] ++ strb w0, [x24, 3408] ++ strb w0, [x25, 360] ++ mov w0, -1 ++ strb wzr, [x24, 3381] ++ str w0, [x25, 476] ++ adrp x0, .LC2 ++ strb wzr, [x23, 1957] ++ add x0, x0, :lo12:.LC2 ++ strb wzr, [x24, 3380] ++ bl printk ++ add x1, x22, :lo12:.LANCHOR2 ++ ldrb w2, [x24, 1153] ++ strb w2, [x23, 1412] ++ ldrh w4, [x24, 2] ++ ldrb w9, [x1, 20] ++ ldrh w5, [x1, 18] ++ ldrb w3, [x1, 21] ++ ldrb w0, [x1, 17] ++ ldrh w6, [x1, 22] ++ mov w1, 0 ++ sdiv w10, w5, w9 ++ strb w3, [x23, 1306] ++ mul w2, w2, w3 ++ ubfiz w8, w0, 9, 7 ++ strb w9, [x23, 1320] ++ mov w3, 1 ++ and w2, w2, 255 ++ strb w0, [x23, 1946] ++ strh w5, [x23, 1338] ++ strh w10, [x23, 1376] ++ strb w2, [x23, 1321] ++ strh w6, [x24, 1096] ++ strh w8, [x25, 462] ++ strh w4, [x23, 1410] ++.L4094: ++ cmp w4, w3 ++ bcs .L4095 ++ mul w7, w0, w5 ++ add x3, x21, :lo12:.LANCHOR3 ++ sub w1, w1, #1 ++ mov w4, 0 ++ strh w1, [x3, 1304] ++ mov w1, 1 ++ mul w3, w6, w7 ++ lsr w11, w3, 21 ++.L4096: ++ cmp w11, w1 ++ bcs .L4097 ++ mov w1, 57344 ++ add x11, x19, :lo12:.LANCHOR0 ++ movk w1, 0x1c, lsl 16 ++ sub w4, w4, #1 ++ mul w3, w3, w2 ++ lsr w6, w6, 4 ++ mul w1, w2, w1 ++ str w3, [x11, 3360] ++ mul w10, w10, w2 ++ cmp w6, 79 ++ mul w7, w7, w2 ++ lsl w1, w1, w4 ++ add w3, w1, 24576 ++ str w1, [x11, 1032] ++ add x4, x20, :lo12:.LANCHOR5 ++ sub w7, w7, #1 ++ udiv w0, w3, w0 ++ str w3, [x4, 480] ++ udiv w3, w3, w7 ++ str w0, [x11, 3364] ++ sub w11, w8, #1 ++ add w0, w11, w0, lsl 2 ++ add w3, w3, 8 ++ udiv w0, w0, w8 ++ strh w0, [x4, 484] ++ ubfiz w0, w0, 4, 16 ++ sdiv w0, w0, w10 ++ strh w0, [x4, 220] ++ add x0, x21, :lo12:.LANCHOR3 ++ strh w3, [x0, 1382] ++ strh w6, [x0, 1380] ++ bhi .L4098 ++ mov w3, 80 ++ strh w3, [x0, 1380] ++.L4098: ++ add x0, x21, :lo12:.LANCHOR3 ++ mov w3, 2000 ++ add x6, x19, :lo12:.LANCHOR0 ++ mov w4, 256 ++ cmp w9, 2 ++ strh w3, [x0, 1954] ++ mov w3, 50 ++ strh w3, [x0, 1952] ++ add x3, x20, :lo12:.LANCHOR5 ++ strh w4, [x3, 216] ++ mov w4, 48 ++ strh w4, [x3, 218] ++ mov w4, 32 ++ strh w4, [x6, 1112] ++ beq .L4099 ++ ldrb w7, [x0, 1336] ++ cbz w7, .L4100 ++.L4099: ++ add x3, x21, :lo12:.LANCHOR3 ++ mov w0, 150 ++ mov w4, 64 ++ mov w6, 12 ++ strh w0, [x3, 1952] ++ add x0, x20, :lo12:.LANCHOR5 ++ strh w4, [x0, 218] ++ add x4, x19, :lo12:.LANCHOR0 ++ strh w6, [x4, 1112] ++ ldrb w6, [x19, #:lo12:.LANCHOR0] ++ cbnz w6, .L4101 ++ mov w6, 4 ++ strh w6, [x4, 1112] ++ mov w4, 600 ++ strh w4, [x3, 1954] ++ mov w3, 128 ++ strh w3, [x0, 216] ++.L4101: ++ add x0, x19, :lo12:.LANCHOR0 ++ ldrb w0, [x0, 1213] ++ cbz w0, .L4103 ++ add x0, x21, :lo12:.LANCHOR3 ++ mov w3, 200 ++ strh w3, [x0, 1952] ++ mov w3, 2000 ++ strh w3, [x0, 1954] ++.L4103: ++ add x0, x19, :lo12:.LANCHOR0 ++ mul w2, w5, w2 ++ mov w3, 1 ++ str wzr, [x0, 3396] ++ add x0, x20, :lo12:.LANCHOR5 ++ cmp w8, w2, lsl 2 ++ strb w3, [x0, 465] ++ bge .L4105 ++ mov w2, 2 ++ strb w2, [x0, 465] ++.L4105: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4106 ++ adrp x0, .LC302 ++ add x0, x0, :lo12:.LC302 ++ bl printk ++.L4106: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4107 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr w1, [x0, 3360] ++ adrp x0, .LC303 ++ add x0, x0, :lo12:.LC303 ++ bl printk ++.L4107: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4108 ++ add x0, x19, :lo12:.LANCHOR0 ++ ldr w1, [x0, 3364] ++ adrp x0, .LC304 ++ add x0, x0, :lo12:.LC304 ++ bl printk ++.L4108: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4109 ++ add x0, x20, :lo12:.LANCHOR5 ++ ldr w1, [x0, 480] ++ adrp x0, .LC305 ++ add x0, x0, :lo12:.LC305 ++ bl printk ++.L4109: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4110 ++ add x0, x20, :lo12:.LANCHOR5 ++ ldrh w1, [x0, 484] ++ adrp x0, .LC306 ++ add x0, x0, :lo12:.LC306 ++ bl printk ++.L4110: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4111 ++ add x0, x20, :lo12:.LANCHOR5 ++ ldrh w1, [x0, 462] ++ adrp x0, .LC307 ++ add x0, x0, :lo12:.LC307 ++ bl printk ++.L4111: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4112 ++ add x0, x20, :lo12:.LANCHOR5 ++ ldrh w1, [x0, 220] ++ adrp x0, .LC308 ++ add x0, x0, :lo12:.LC308 ++ bl printk ++.L4112: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4113 ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrh w1, [x0, 1380] ++ adrp x0, .LC309 ++ add x0, x0, :lo12:.LC309 ++ bl printk ++.L4113: ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4114 ++ add x0, x21, :lo12:.LANCHOR3 ++ ldrh w1, [x0, 1382] ++ adrp x0, .LC310 ++ add x0, x0, :lo12:.LC310 ++ bl printk ++.L4114: ++ add x24, x20, :lo12:.LANCHOR5 ++ bl zbuf_init ++ mov w0, 16384 ++ bl ftl_malloc ++ add x25, x19, :lo12:.LANCHOR0 ++ add x23, x21, :lo12:.LANCHOR3 ++ str x0, [x24, 392] ++ mov w0, 16384 ++ bl ftl_malloc ++ str x0, [x24, 408] ++ mov w0, 16384 ++ bl ftl_malloc ++ str x0, [x24, 488] ++ mov w0, 256 ++ bl ftl_dma32_malloc ++ str x0, [x24, 376] ++ mov w0, 256 ++ bl ftl_dma32_malloc ++ ldrh w1, [x25, 1096] ++ str x0, [x24, 416] ++ mov w0, 6 ++ mul w0, w1, w0 ++ bl ftl_dma32_malloc ++ str x0, [x25, 1040] ++ ldrb w1, [x23, 1321] ++ ldrh w0, [x23, 1376] ++ mul w0, w0, w1 ++ lsl w0, w0, 2 ++ bl ftl_dma32_malloc ++ ldrb w1, [x23, 1321] ++ str x0, [x23, 1936] ++ ldrh w0, [x23, 1376] ++ ldr x2, [x24, 408] ++ str x2, [x23, 1928] ++ mul w0, w0, w1 ++ ldrh w1, [x25, 1096] ++ add x3, x2, w0, sxtw 3 ++ lsl w0, w0, 1 ++ add w1, w0, w1, lsr 1 ++ ldr w0, [x22, #:lo12:.LANCHOR2] ++ add x1, x2, w1, sxtw 2 ++ str x3, [x25, 1120] ++ str x1, [x25, 1128] ++ tbz x0, 12, .L4115 ++ adrp x0, .LC311 ++ add x0, x0, :lo12:.LC311 ++ bl printk ++.L4115: ++ add x0, x19, :lo12:.LANCHOR0 ++ add x21, x21, :lo12:.LANCHOR3 ++ ldrh w1, [x0, 1096] ++ ldrh w0, [x21, 1376] ++ ldrb w21, [x21, 1321] ++ mul w21, w0, w21 ++ add x0, x20, :lo12:.LANCHOR5 ++ ldrh w23, [x0, 484] ++ add w21, w1, w21, lsl 2 ++ lsl w1, w1, 2 ++ lsl w21, w21, 1 ++ add w21, w21, 632 ++ add w23, w1, w23, lsl 2 ++ ldr w1, [x22, #:lo12:.LANCHOR2] ++ add w23, w23, 704 ++ tbz x1, 12, .L4116 ++ ldrh w3, [x0, 462] ++ mov w2, w23 ++ adrp x0, .LC312 ++ mov w1, w21 ++ add x0, x0, :lo12:.LC312 ++ bl printk ++.L4116: ++ add x20, x20, :lo12:.LANCHOR5 ++ ldrh w0, [x20, 462] ++ cmp w21, w0 ++ bhi .L4117 ++ cmp w23, w0 ++ bls .L4118 ++.L4117: ++.L4171: ++ b .L4171 ++.L4095: ++ add w1, w1, 1 ++ lsl w3, w3, 1 ++ and w1, w1, 65535 ++ b .L4094 ++.L4097: ++ add w4, w4, 1 ++ lsl w1, w1, 1 ++ and w4, w4, 65535 ++ b .L4096 ++.L4100: ++ ldrb w6, [x6, 1212] ++ cbz w6, .L4103 ++ mov w6, 1200 ++ strh w4, [x0, 1952] ++ strh w6, [x0, 1954] ++ strh w4, [x3, 218] ++ b .L4103 ++.L4118: ++ bl sblk_init ++ bl gc_init ++ bl ftl_info_blk_init ++ cmn w0, #1 ++ beq .L4093 ++ add x21, x19, :lo12:.LANCHOR0 ++ bl ftl_ext_info_init ++ mov w0, 1 ++ bl pm_init ++ bl lpa_rebuild_hash ++ ldr x0, [x21, 1128] ++ mov x1, 0 ++ add x0, x0, 16 ++ bl ftl_open_sblk_recovery ++ ldr x0, [x21, 1128] ++ add x1, x0, 16 ++ add x0, x0, 48 ++ bl ftl_open_sblk_recovery ++ ldr x1, [x21, 3384] ++ ldr w0, [x1, 8] ++ add w0, w0, 16 ++ str w0, [x1, 8] ++ ldr x0, [x21, 1128] ++ add x0, x0, 16 ++ bl ftl_info_data_recovery ++ ldr x0, [x21, 1128] ++ add x0, x0, 48 ++ bl ftl_info_data_recovery ++ ldr x0, [x21, 1128] ++ add x0, x0, 80 ++ bl ftl_info_data_recovery ++ bl gc_recovery ++ bl pm_flush ++ mov w0, 1 ++ bl ftl_total_vpn_update ++ ldrb w0, [x20, 401] ++ cbz w0, .L4120 ++ ldr x1, [x21, 3384] ++ ldr w0, [x1, 68] ++ add w0, w0, 1 ++ str w0, [x1, 68] ++.L4120: ++ bl ftl_ext_info_flush ++ mov w0, 0 ++ bl ftl_info_flush ++ bl print_ftl_debug_info ++ add x1, x19, :lo12:.LANCHOR0 ++ ldr x0, [x1, 1128] ++ ldrh w0, [x0, 124] ++ cbnz w0, .L4127 ++ ldrh w0, [x1, 3368] ++ ldrh w1, [x1, 3372] ++ add w0, w0, w1 ++ cmp w0, 7 ++ ble .L4127 ++.L4123: ++ mov w0, 0 ++.L4093: ++ 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 ++.L4127: ++ add x19, x19, :lo12:.LANCHOR0 ++ mov w20, 16384 ++ mov w21, 65535 ++.L4124: ++ mov w1, 1 ++ mov w0, 0 ++ bl zftl_do_gc ++ mov w1, 1 ++ mov w0, w1 ++ bl zftl_do_gc ++ ldr x0, [x19, 1128] ++ ldrh w1, [x0, 124] ++ cbnz w1, .L4122 ++ ldrh w0, [x0, 80] ++ cmp w0, w21 ++ bne .L4122 ++ ldrh w0, [x19, 3368] ++ ldrh w1, [x19, 3372] ++ add w0, w0, w1 ++ cmp w0, 7 ++ bgt .L4123 ++.L4122: ++ subs w20, w20, #1 ++ bne .L4124 ++ b .L4123 ++ .size zftl_init, .-zftl_init ++ .align 2 ++ .global rk_ftl_init ++ .type rk_ftl_init, %function ++rk_ftl_init: ++ stp x29, x30, [sp, -48]! ++ adrp x0, jiffies ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR5 ++ add x19, x21, :lo12:.LANCHOR5 ++ ldr x0, [x0, #:lo12:jiffies] ++ str x0, [x19, 224] ++ mov w0, 136 ++ strb wzr, [x19, 496] ++ str wzr, [x19, 248] ++ bl ftl_dma32_malloc ++ str x0, [x19, 232] ++ cbnz x0, .L4174 ++.L4176: ++ mov w20, -1 ++.L4173: ++ mov w0, w20 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L4174: ++ mov w0, 2048 ++ bl ftl_dma32_malloc ++ add x1, x19, 512 ++ stp x0, xzr, [x19, 504] ++ str xzr, [x19, 240] ++ add x0, x19, 240 ++ bl rknand_get_reg_addr ++ ldr x0, [x19, 240] ++ cbz x0, .L4176 ++ bl rk_nandc_irq_init ++ ldr x0, [x19, 504] ++ mov w3, 2048 ++ mov w2, 0 ++ mov w1, 0 ++ bl flash_sram_load_store ++ bl rknand_flash_cs_init ++ ldr x0, [x19, 232] ++ 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, 240] ++ bl nand_flash_init ++ mov w22, w0 ++ cbnz w0, .L4177 ++ bl zftl_init ++ mov w20, w0 ++ bl zftl_proc_debug_init ++ mov w0, 1 ++ strb w0, [x19, 496] ++.L4178: ++ mov w1, w20 ++ adrp x0, .LC313 ++ add x0, x0, :lo12:.LC313 ++ bl printk ++ b .L4173 ++.L4177: ++ ldr x0, [x19, 232] ++ 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_sys_read ++ add x1, x1, :lo12:ftl_sys_read ++ str x1, [x0, 24] ++ adrp x1, ftl_sys_write ++ add x1, x1, :lo12:ftl_sys_write ++ str x1, [x0, 32] ++ adrp x1, ftl_vendor_read ++ add x1, x1, :lo12:ftl_vendor_read ++ str x1, [x0, 8] ++ adrp x1, ftl_vendor_write ++ add x1, x1, :lo12:ftl_vendor_write ++ str x1, [x0, 16] ++ 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, 240] ++ bl FlashInit ++ mov w20, w0 ++ cmn w22, #2 ++ adrp x22, .LANCHOR2 ++ bne .L4179 ++ add x19, x22, :lo12:.LANCHOR2 ++ mov w2, 32 ++ add x19, x19, 8 ++ adrp x1, gNandParaInfo ++ mov x0, x19 ++ add x1, x1, :lo12:gNandParaInfo ++ bl ftl_memcpy ++ ldrb w0, [x19, 18] ++ bl flash_lsb_page_tbl_build ++ ldrh w0, [x19, 10] ++ strh w0, [x19, 26] ++.L4179: ++ adrp x0, g_nandc_version_data ++ ldr w1, [x0, #:lo12:g_nandc_version_data] ++ mov w0, 12336 ++ movk w0, 0x5638, lsl 16 ++ cmp w1, w0 ++ adrp x1, .LANCHOR0 ++ bne .L4180 ++ adrp x0, gFlashSlcMode ++ ldrb w0, [x0, #:lo12:gFlashSlcMode] ++ cbnz w0, .L4181 ++.L4180: ++ add x0, x1, :lo12:.LANCHOR0 ++ strb wzr, [x1, #:lo12:.LANCHOR0] ++ strb wzr, [x0, 1154] ++.L4181: ++ adrp x2, gNandFlashIDBEccBits ++ add x0, x1, :lo12:.LANCHOR0 ++ add x22, x22, :lo12:.LANCHOR2 ++ add x21, x21, :lo12:.LANCHOR5 ++ ldrb w2, [x2, #:lo12:gNandFlashIDBEccBits] ++ strb w2, [x0, 1152] ++ adrp x2, gNandFlashEccBits ++ ldrh w3, [x22, 18] ++ str xzr, [x21, 336] ++ ldrb w2, [x2, #:lo12:gNandFlashEccBits] ++ strb w2, [x0, 1249] ++ mov w0, 0 ++ mov w2, 1 ++.L4182: ++ cmp w3, w2 ++ bcs .L4183 ++ add x1, x1, :lo12:.LANCHOR0 ++ adrp x2, .LANCHOR3+1304 ++ sub w0, w0, #1 ++ strh w0, [x2, #:lo12:.LANCHOR3+1304] ++ strb wzr, [x1, 1192] ++ cbnz w20, .L4178 ++ bl FtlInit ++ mov w20, w0 ++ b .L4178 ++.L4183: ++ add w0, w0, 1 ++ lsl w2, w2, 1 ++ and w0, w0, 65535 ++ b .L4182 ++ .size rk_ftl_init, .-rk_ftl_init ++ .align 2 ++ .global zftl_write ++ .type zftl_write, %function ++zftl_write: ++ stp x29, x30, [sp, -112]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ adrp x0, .LANCHOR2 ++ stp x21, x22, [sp, 32] ++ stp x25, x26, [sp, 64] ++ mov w20, w1 ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ mov w21, w2 ++ stp x23, x24, [sp, 48] ++ mov x26, x3 ++ stp x27, x28, [sp, 80] ++ tbz x0, 12, .L4189 ++ ldr w4, [x26] ++ mov w3, w2 ++ adrp x0, .LC314 ++ mov w2, w1 ++ add x0, x0, :lo12:.LC314 ++ mov w1, w19 ++ bl printk ++.L4189: ++ cbnz w19, .L4190 ++ adrp x0, .LANCHOR0+1032 ++ mov w19, 24576 ++ ldr w0, [x0, #:lo12:.LANCHOR0+1032] ++.L4191: ++ cmp w0, w20 ++ ccmp w0, w21, 0, hi ++ bcc .L4209 ++ add w1, w20, w21 ++ cmp w0, w1 ++ bcc .L4209 ++ adrp x0, .LANCHOR3 ++ add x0, x0, :lo12:.LANCHOR3 ++ add w19, w19, w20 ++ sub w23, w21, #1 ++ add w23, w23, w19 ++ adrp x22, .LANCHOR0 ++ ldrb w1, [x0, 1946] ++ add x27, x22, :lo12:.LANCHOR0 ++ str x0, [x29, 104] ++ add w0, w19, w21 ++ str w0, [x29, 100] ++ udiv w25, w19, w1 ++ udiv w23, w23, w1 ++ mov w20, w25 ++ sub w24, w23, w25 ++ add w24, w24, 1 ++.L4193: ++ cbnz w24, .L4202 ++ bl ftl_write_commit ++ mov w1, 1 ++ mov w0, 0 ++ bl zftl_do_gc ++ add x1, x22, :lo12:.LANCHOR0 ++ ldr x0, [x1, 1128] ++ ldrh w0, [x0, 124] ++ cbnz w0, .L4203 ++ ldrh w0, [x1, 3368] ++ ldrh w1, [x1, 3372] ++ add w0, w0, w1 ++ cmp w0, 11 ++ bgt .L4204 ++.L4203: ++ mov w1, 1 ++ mov w0, 0 ++ bl zftl_do_gc ++.L4204: ++ add x22, x22, :lo12:.LANCHOR0 ++.L4205: ++ ldrh w0, [x22, 3368] ++ ldrh w1, [x22, 3372] ++ add w0, w0, w1 ++ cmp w0, 7 ++ ble .L4206 ++ bl timer_get_time ++ adrp x1, .LANCHOR5+472 ++ str w0, [x1, #:lo12:.LANCHOR5+472] ++ mov w0, 0 ++.L4188: ++ 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 ++.L4190: ++ cmp w19, 3 ++ bhi .L4209 ++ lsl w19, w19, 13 ++ mov w0, 8192 ++ b .L4191 ++.L4202: ++ ldrb w0, [x27, 3381] ++ cbz w0, .L4194 ++ ldrb w0, [x27, 3353] ++ cmp w0, 2 ++ bhi .L4194 ++ bl ftl_write_commit ++.L4194: ++ mov w0, 0 ++ bl buf_alloc ++ mov x28, x0 ++ cbnz x0, .L4195 ++ bl ftl_write_commit ++ b .L4193 ++.L4195: ++ strb wzr, [x0, 57] ++ cmp w20, w25 ++ ldr x0, [x29, 104] ++ ccmp w20, w23, 4, ne ++ ldrb w0, [x0, 1946] ++ strb w0, [x28, 56] ++ bne .L4198 ++ cmp w20, w25 ++ bne .L4199 ++ udiv w1, w19, w0 ++ msub w1, w1, w0, w19 ++ and w1, w1, 255 ++ strb w1, [x28, 57] ++ sub w0, w0, w1 ++ and w0, w0, 255 ++ cmp w21, w0 ++ csel w0, w21, w0, cc ++.L4217: ++ strb w0, [x28, 56] ++.L4198: ++ ldrb w4, [x28, 57] ++ mov x1, x26 ++ ldrb w2, [x28, 56] ++ sub w24, w24, #1 ++ ldr x0, [x28, 8] ++ lsl w2, w2, 9 ++ add x0, x0, x4, lsl 9 ++ bl ftl_memcpy ++ ldr x1, [x27, 3384] ++ str w20, [x28, 36] ++ add w20, w20, 1 ++ ldr w0, [x1, 8] ++ add w2, w0, 1 ++ str w2, [x1, 8] ++ str w0, [x28, 32] ++ mov x0, x28 ++ bl ftl_write_buf ++ ldrb w0, [x28, 56] ++ add x26, x26, x0, lsl 9 ++ b .L4193 ++.L4199: ++ ldr w1, [x29, 100] ++ msub w0, w0, w20, w1 ++ b .L4217 ++.L4206: ++ mov w1, 1 ++ mov w0, 0 ++ bl zftl_do_gc ++ mov w1, 1 ++ mov w0, w1 ++ bl zftl_do_gc ++ b .L4205 ++.L4209: ++ mov w0, -1 ++ b .L4188 ++ .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 ++ mov w2, w1 ++ add w1, w0, 512 ++ add x29, sp, 0 ++ 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 x3, x2 ++ mov w2, w1 ++ mov w1, w0 ++ add x29, sp, 0 ++ mov w0, 2 ++ bl zftl_write ++ ldp x29, x30, [sp], 16 ++ ret ++ .size zftl_sys_write, .-zftl_sys_write ++ .align 2 ++ .global zftl_discard ++ .type zftl_discard, %function ++zftl_discard: ++ stp x29, x30, [sp, -128]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w1 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR0 ++ add x1, x21, :lo12:.LANCHOR0 ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldr w1, [x1, 1032] ++ cmp w0, w1 ++ ccmp w19, w1, 2, cc ++ bhi .L4244 ++ add w2, w0, w19 ++ cmp w1, w2 ++ bcc .L4244 ++ add w23, w0, 24576 ++ adrp x24, .LANCHOR5 ++ add x0, x24, :lo12:.LANCHOR5 ++ ldr w1, [x0, 520] ++ add w1, w19, w1 ++ str w1, [x0, 520] ++ adrp x0, .LANCHOR2 ++ str x0, [x29, 104] ++ ldr w2, [x0, #:lo12:.LANCHOR2] ++ tbz x2, 12, .L4224 ++ adrp x0, .LC315 ++ mov w4, 0 ++ mov w3, w19 ++ mov w2, w23 ++ add x0, x0, :lo12:.LC315 ++ bl printk ++.L4224: ++ add x0, x21, :lo12:.LANCHOR0 ++ adrp x25, .LANCHOR3 ++ ldr x0, [x0, 3384] ++ ldr w27, [x0, 8] ++ add w1, w27, 1 ++ str w1, [x0, 8] ++ bl ftl_write_commit ++ bl ftl_flush ++ add x0, x25, :lo12:.LANCHOR3 ++ ldrb w22, [x0, 1946] ++ udiv w20, w23, w22 ++ msub w26, w20, w22, w23 ++ cbz w26, .L4225 ++ sub w22, w22, w26 ++ mov w0, w20 ++ cmp w22, w19 ++ csel w22, w22, w19, ls ++ bl lpa_hash_get_ppa ++ str w0, [x29, 120] ++ cmn w0, #1 ++ bne .L4226 ++ mov w2, 0 ++ add x1, x29, 120 ++ mov w0, w20 ++ bl pm_log2phys ++.L4226: ++ ldr w0, [x29, 120] ++ and w28, w22, 65535 ++ cmn w0, #1 ++ beq .L4228 ++ mov w0, 0 ++ bl buf_alloc ++ mov x3, x0 ++ cbz x0, .L4228 ++ strb w26, [x0, 57] ++ ubfiz x26, x26, 9, 25 ++ strb w22, [x0, 56] ++ mov w1, 0 ++ ldr x0, [x0, 8] ++ lsl w2, w28, 9 ++ stp w27, w20, [x3, 32] ++ str x3, [x29, 96] ++ add x0, x0, x26 ++ bl ftl_memset ++ ldr x3, [x29, 96] ++ mov x0, x3 ++ bl ftl_write_buf ++ bl ftl_write_commit ++ add x0, x21, :lo12:.LANCHOR0 ++ ldr x1, [x0, 3384] ++ ldr w0, [x1, 76] ++ add w0, w0, 1 ++ str w0, [x1, 76] ++.L4228: ++ add w20, w20, 1 ++ sub w19, w19, w28 ++.L4225: ++ cbz w19, .L4230 ++ bl ftl_flush ++.L4230: ++ add x22, x25, :lo12:.LANCHOR3 ++ add x26, x21, :lo12:.LANCHOR0 ++ mov w0, -1 ++ mov w28, 1 ++ str w0, [x29, 124] ++.L4231: ++ ldrb w0, [x22, 1946] ++ cmp w19, w0 ++ bcs .L4236 ++ cbz w19, .L4238 ++ mov w0, w20 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 120] ++ cmn w0, #1 ++ bne .L4239 ++ mov w2, 0 ++ add x1, x29, 120 ++ mov w0, w20 ++ bl pm_log2phys ++.L4239: ++ ldr w0, [x29, 120] ++ cmn w0, #1 ++ beq .L4238 ++ mov w0, 0 ++ bl buf_alloc ++ mov x22, x0 ++ cbz x0, .L4238 ++ add x25, x25, :lo12:.LANCHOR3 ++ strb wzr, [x0, 57] ++ strb w19, [x0, 56] ++ stp w27, w20, [x22, 32] ++ ldrb w0, [x25, 1946] ++ cmp w19, w0 ++ bcc .L4241 ++ adrp x1, .LANCHOR4 ++ add x1, x1, :lo12:.LANCHOR4 ++ add x1, x1, 1056 ++ mov w2, 1496 ++ adrp x0, .LC0 ++ add x0, x0, :lo12:.LC0 ++ bl printk ++ bl dump_stack ++.L4241: ++ ldr x0, [x22, 8] ++ lsl w2, w19, 9 ++ 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, 3384] ++ ldr w0, [x1, 76] ++ add w0, w0, 1 ++ str w0, [x1, 76] ++.L4238: ++ add x0, x24, :lo12:.LANCHOR5 ++ ldr w1, [x0, 520] ++ cmp w1, 8192 ++ bls .L4245 ++ ldr x0, [x29, 104] ++ ldr w0, [x0, #:lo12:.LANCHOR2] ++ tbz x0, 12, .L4242 ++ adrp x0, .LC315 ++ mov w4, 0 ++ mov w3, w19 ++ mov w2, w23 ++ add x0, x0, :lo12:.LC315 ++ bl printk ++.L4242: ++ add x24, x24, :lo12:.LANCHOR5 ++ add x21, x21, :lo12:.LANCHOR0 ++ str wzr, [x24, 520] ++ bl flt_sys_flush ++ mov w0, 1 ++ str w0, [x21, 3396] ++.L4245: ++ mov w0, 0 ++ b .L4222 ++.L4236: ++ mov w0, w20 ++ bl lpa_hash_get_ppa ++ str w0, [x29, 120] ++ cmn w0, #1 ++ beq .L4232 ++ mov w0, 0 ++ bl buf_alloc ++ mov x3, x0 ++ cbz x0, .L4234 ++ ldrb w2, [x22, 1946] ++ mov w1, 0 ++ strb w2, [x0, 56] ++ strb wzr, [x0, 57] ++ ldr x0, [x0, 8] ++ lsl w2, w2, 9 ++ stp w27, w20, [x3, 32] ++ str x3, [x29, 96] ++ bl ftl_memset ++ ldr x3, [x29, 96] ++ mov x0, x3 ++ bl ftl_write_buf ++ bl ftl_write_commit ++.L4271: ++ ldr x1, [x26, 3384] ++ ldr w0, [x1, 76] ++ add w0, w0, 1 ++ str w0, [x1, 76] ++.L4234: ++ ldrb w0, [x22, 1946] ++ add w20, w20, 1 ++ sub w19, w19, w0 ++ b .L4231 ++.L4232: ++ mov w2, 0 ++ add x1, x29, 120 ++ mov w0, w20 ++ bl pm_log2phys ++ ldr w0, [x29, 120] ++ cmn w0, #1 ++ beq .L4234 ++ add x1, x29, 124 ++ mov w2, 1 ++ mov w0, w20 ++ bl pm_log2phys ++ ldrb w1, [x26, 1205] ++ mov w0, 24 ++ ldrh w2, [x22, 1304] ++ sub w0, w0, w1 ++ ldr w1, [x29, 120] ++ sub w0, w0, w2 ++ lsr w1, w1, w2 ++ lsl w0, w28, w0 ++ sub w0, w0, #1 ++ and w0, w0, w1 ++ ldrb w1, [x22, 1306] ++ udiv w0, w0, w1 ++ bl ftl_vpn_decrement ++ b .L4271 ++.L4244: ++ mov w0, -1 ++.L4222: ++ 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 zftl_discard, .-zftl_discard ++ .align 2 ++ .global dump_pm_blk ++ .type dump_pm_blk, %function ++dump_pm_blk: ++ stp x29, x30, [sp, -48]! ++ mov w2, 4 ++ adrp x0, .LC267 ++ add x0, x0, :lo12:.LC267 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR0 ++ add x19, x19, :lo12:.LANCHOR0 ++ stp x21, x22, [sp, 32] ++ adrp x21, .LANCHOR5 ++ add x21, x21, :lo12:.LANCHOR5 ++ mov w20, 0 ++ mov w22, 65535 ++ ldr x1, [x19, 3384] ++ add x1, x1, 704 ++ ldrh w3, [x1, -6] ++ bl rknand_print_hex ++ ldrh w3, [x21, 220] ++ adrp x0, .LC268 ++ ldr x1, [x19, 3384] ++ mov w2, 2 ++ add x0, x0, :lo12:.LC268 ++ add x1, x1, 416 ++ bl rknand_print_hex ++.L4273: ++ ldrh w0, [x21, 220] ++ cmp w0, w20 ++ bhi .L4275 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++.L4275: ++ ldr x0, [x19, 3384] ++ add x0, x0, w20, sxtw 1 ++ ldrh w0, [x0, 416] ++ cmp w0, w22 ++ beq .L4274 ++ mov x1, 0 ++ bl ftl_sblk_dump ++.L4274: ++ add w20, w20, 1 ++ and w20, w20, 65535 ++ b .L4273 ++ .size dump_pm_blk, .-dump_pm_blk ++ .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] ++ and w24, w0, 255 ++ add x0, x21, :lo12:.LANCHOR0 ++ stp x19, x20, [sp, 16] ++ stp x25, x26, [sp, 64] ++ and w19, w2, 65535 ++ str x27, [sp, 80] ++ ldrb w2, [x0, 1154] ++ cbnz w2, .L4277 ++ ldr x0, [x0, 1144] ++ ldrb w0, [x0, 19] ++ sub w0, w0, #5 ++ and w0, w0, 255 ++ cmp w0, 63 ++ bhi .L4277 ++ mov x2, 16391 ++ movk x2, 0x4000, lsl 16 ++ movk x2, 0x8000, lsl 48 ++ lsr x0, x2, x0 ++ tbz x0, 0, .L4277 ++ adrp x20, .LANCHOR3 ++ add x20, x20, :lo12:.LANCHOR3 ++ adrp x23, .LC316 ++ mov w25, w1 ++ add x20, x20, 2476 ++ add x23, x23, :lo12:.LC316 ++.L4279: ++ add x26, x21, :lo12:.LANCHOR0 ++ ldr x0, [x26, 1144] ++ ldrh w0, [x0, 10] ++ cmp w0, w19 ++ bhi .L4280 ++.L4277: ++ 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 ++.L4280: ++ sxtw x22, w19 ++ add w27, w19, w25 ++ mov w1, w19 ++ mov w2, w27 ++ mov x0, x23 ++ ldrh w3, [x20, x22, lsl 1] ++ bl printk ++ ldrh w1, [x20, x22, lsl 1] ++ mov w0, 65535 ++ cmp w1, w0 ++ bne .L4277 ++ adrp x22, .LANCHOR5 ++ add x22, x22, :lo12:.LANCHOR5 ++ mov w2, 16384 ++ mov w1, 255 ++ add w19, w19, 1 ++ ldr x0, [x22, 304] ++ and w19, w19, 65535 ++ bl ftl_memset ++ ldr x0, [x26, 1144] ++ mov w1, w27 ++ ldr x3, [x22, 304] ++ mov x2, x3 ++ ldrb w4, [x0, 9] ++ mov w0, w24 ++ bl flash_prog_page ++ b .L4279 ++ .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, -304]! ++ mov w4, 35899 ++ movk w4, 0xfcdc, lsl 16 ++ add x29, sp, 0 ++ stp x23, x24, [sp, 48] ++ adrp x23, .LANCHOR0 ++ stp x19, x20, [sp, 16] ++ ldrb w3, [x23, #:lo12:.LANCHOR0] ++ str w3, [x29, 160] ++ stp x21, x22, [sp, 32] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ ldrh w3, [x29, 160] ++ str w3, [x29, 212] ++ ldr w3, [x1] ++ cmp w3, w4 ++ mov w4, 19282 ++ movk w4, 0x534e, lsl 16 ++ ccmp w3, w4, 4, ne ++ beq .L4283 ++ add w4, w4, 327680 ++ cmp w3, w4 ++ beq .L4283 ++.L4401: ++ mov w0, -1 ++.L4282: ++ 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], 304 ++ ret ++.L4283: ++ cmp w0, 15 ++ bls .L4401 ++ add x25, x23, :lo12:.LANCHOR0 ++ mov w19, w0 ++ str x2, [x29, 168] ++ str x1, [x29, 216] ++ ldr x0, [x25, 1144] ++ ldrb w20, [x0, 9] ++ ldrh w24, [x0, 10] ++ adrp x0, .LANCHOR2+34 ++ ldrh w21, [x0, #:lo12:.LANCHOR2+34] ++ ldrb w0, [x25, 1154] ++ str w0, [x29, 144] ++ mov w0, 59392 ++ movk w0, 0x3, lsl 16 ++ bl ftl_malloc ++ mov x22, x0 ++ cbz x0, .L4401 ++ adrp x0, .LANCHOR5+496 ++ ldrb w0, [x0, #:lo12:.LANCHOR5+496] ++ cbz w0, .L4340 ++ ldrb w1, [x23, #:lo12:.LANCHOR0] ++ ldrb w0, [x25, 1154] ++ cbz w1, .L4287 ++ cmp w0, 0 ++ cset w0, eq ++.L4398: ++ str w0, [x29, 236] ++ b .L4286 ++.L4287: ++ cmp w0, 3 ++ beq .L4341 ++ ldr w2, [x29, 212] ++ cmp w0, 2 ++ mov w1, 2 ++ mov w0, 3 ++ csel w1, w2, w1, ne ++ csel w0, wzr, w0, ne ++ str w1, [x29, 212] ++ b .L4398 ++.L4340: ++ str wzr, [x29, 236] ++.L4286: ++ add w19, w19, 511 ++ lsr w19, w19, 9 ++ cmp w19, 8 ++ bls .L4343 ++ cmp w19, 500 ++ bhi .L4289 ++.L4288: ++ ldr x0, [x29, 216] ++ mov w1, 35899 ++ movk w1, 0xfcdc, lsl 16 ++ ldr w0, [x0] ++ cmp w0, w1 ++ mov w1, 19282 ++ movk w1, 0x534e, lsl 16 ++ ccmp w0, w1, 4, ne ++ beq .L4290 ++ add w1, w1, 327680 ++ cmp w0, w1 ++ beq .L4290 ++.L4289: ++ mov x0, x22 ++ bl ftl_free ++ b .L4401 ++.L4341: ++ str w0, [x29, 212] ++ mov w0, 2 ++ b .L4398 ++.L4343: ++ mov w19, 8 ++ b .L4288 ++.L4290: ++ mov w0, 0 ++ bl zftl_flash_exit_slc_mode ++ add x0, x23, :lo12:.LANCHOR0 ++ mul w24, w24, w20 ++ mov w4, 17739 ++ mov w2, 63871 ++ movk w4, 0x4e52, lsl 16 ++ ldrb w0, [x0, 1154] ++ strb w0, [x23, #:lo12:.LANCHOR0] ++ sub w0, w24, #1 ++ add w0, w0, w19 ++ udiv w0, w0, w24 ++ str w0, [x29, 132] ++ ldr x0, [x29, 216] ++ add x3, x0, 253952 ++ mov w0, 0 ++ add x3, x3, 1532 ++.L4296: ++ ldr w1, [x3] ++ cbnz w1, .L4291 ++ cbnz w0, .L4292 ++ str w4, [x3, 512] ++.L4293: ++ add w0, w0, 1 ++ sub w2, w2, #1 ++ cmp w0, 4095 ++ sub x3, x3, #4 ++ csel w0, w0, wzr, cc ++ cmp w2, 4096 ++ bne .L4296 ++.L4295: ++ ldr x1, [x29, 168] ++ mul w0, w21, w20 ++ mov w3, 5 ++ mov w2, 4 ++ str w0, [x29, 164] ++ adrp x0, .LC318 ++ add x0, x0, :lo12:.LC318 ++ bl rknand_print_hex ++ mov w2, w19 ++ mov w1, w19 ++ adrp x0, .LC319 ++ add x0, x0, :lo12:.LC319 ++ bl printk ++ str xzr, [x29, 224] ++ adrp x0, .LANCHOR2 ++ add x0, x0, :lo12:.LANCHOR2 ++ add x0, x0, 8 ++ str wzr, [x29, 232] ++ str x0, [x29, 136] ++.L4337: ++ adrp x27, .LANCHOR5 ++ add x1, x27, :lo12:.LANCHOR5 ++ ldr w0, [x29, 224] ++ ldrb w1, [x1, 496] ++ cbnz w1, .L4297 ++ ldr x2, [x29, 224] ++ cmp w0, 0 ++ ldr x1, [x29, 168] ++ ldr w1, [x1, x2, lsl 2] ++ ldr w2, [x29, 164] ++ mul w21, w2, w1 ++ ldr w2, [x29, 132] ++ ccmp w2, 1, 0, ne ++ bls .L4298 ++ ldr x2, [x29, 168] ++ sub w0, w0, #1 ++ ldr w0, [x2, x0, lsl 2] ++ add w0, w0, 1 ++ cmp w1, w0 ++ bne .L4298 ++.L4299: ++ ldr x0, [x29, 224] ++ add x0, x0, 1 ++ str x0, [x29, 224] ++ cmp x0, 4 ++ bne .L4337 ++.L4339: ++ mov w0, 0 ++ bl zftl_flash_exit_slc_mode ++ adrp x0, .LANCHOR0 ++ ldrb w2, [x29, 160] ++ add x1, x0, :lo12:.LANCHOR0 ++ strb w2, [x0, #:lo12:.LANCHOR0] ++ ldr w2, [x29, 236] ++ cbz w2, .L4338 ++ ldrb w2, [x29, 144] ++ strb w2, [x1, 1154] ++.L4338: ++ add x0, x0, :lo12:.LANCHOR0 ++ mov w1, 2 ++ strb w1, [x0, 1208] ++ mov w0, 0 ++ bl zftl_flash_enter_slc_mode ++ mov x0, x22 ++ bl ftl_free ++ ldr w0, [x29, 232] ++ cmp w0, 0 ++ csetm w0, eq ++ b .L4282 ++.L4292: ++ ldr x1, [x29, 216] ++ ldr w1, [x1, w0, uxtw 2] ++ str w1, [x3, 512] ++ b .L4293 ++.L4291: ++ adrp x0, .LC317 ++ add x0, x0, :lo12:.LC317 ++ bl printk ++ b .L4295 ++.L4297: ++ adrp x20, .LANCHOR0 ++ add x23, x20, :lo12:.LANCHOR0 ++ ldr w2, [x29, 224] ++ ldr x1, [x23, 1048] ++ add x1, x1, w2, uxtw ++ ldrb w21, [x1, 32] ++ mov x1, x20 ++ cmp w21, 255 ++ beq .L4299 ++ ldr w2, [x29, 164] ++ mul w21, w21, w2 ++ ldr w2, [x29, 236] ++ cbz w2, .L4298 ++ and w0, w0, -3 ++ cmp w0, 1 ++ beq .L4300 ++ cmp w2, 3 ++ bne .L4301 ++.L4300: ++ add x2, x1, :lo12:.LANCHOR0 ++ ldrb w0, [x29, 212] ++ strb w0, [x1, #:lo12:.LANCHOR0] ++ strb w0, [x2, 1154] ++.L4298: ++ mov w2, 512 ++ mov w1, 0 ++ mov x0, x22 ++ bl ftl_memset ++ adrp x20, .LANCHOR0 ++ add x0, x20, :lo12:.LANCHOR0 ++ ldr x1, [x0, 1144] ++ ldrb w24, [x1, 9] ++ ldrh w23, [x1, 10] ++ adrp x1, .LANCHOR2 ++ add x1, x1, :lo12:.LANCHOR2 ++ ldrh w25, [x1, 34] ++ mul w23, w23, w24 ++ ldrb w1, [x0, 1252] ++ str w1, [x29, 128] ++ udiv w1, w21, w24 ++ strb wzr, [x0, 1252] ++ mov w0, 0 ++ mul w25, w25, w24 ++ bl flash_erase_block ++ cmp w23, w19 ++ bcs .L4344 ++ add w1, w21, w25 ++ mov w0, 0 ++ bl flash_erase_block ++ mov w1, 2 ++.L4302: ++ add x28, x20, :lo12:.LANCHOR0 ++ ldr x0, [x28, 1144] ++ ldrh w23, [x0, 10] ++ ldrb w0, [x0, 12] ++ lsl w23, w23, 2 ++ mul w23, w23, w1 ++ sdiv w0, w23, w0 ++ str w0, [x29, 176] ++ udiv w0, w21, w25 ++ msub w0, w0, w25, w21 ++ str w0, [x29, 208] ++ sub w26, w21, w0 ++ cmp w21, w26 ++ bne .L4346 ++ ldrb w0, [x28, 1028] ++ cmp w0, 9 ++ bne .L4346 ++ add x27, x27, :lo12:.LANCHOR5 ++ mov w2, 1024 ++ mov w1, 0 ++ ldr x27, [x27, 352] ++ mov x0, x27 ++ bl ftl_memset ++ mov w0, 18766 ++ movk w0, 0x464e, lsl 16 ++ str w0, [x27] ++ mov w0, 12 ++ str w0, [x27, 4] ++ ldrb w0, [x28, 1154] ++ strb wzr, [x27, 16] ++ str wzr, [x27, 12] ++ cbz w0, .L4304 ++ ldr x0, [x28, 1144] ++ ldrb w0, [x0, 29] ++ strb w0, [x27, 16] ++.L4304: ++ add x20, x20, :lo12:.LANCHOR0 ++ mov w0, 4 ++ strb w0, [x27, 17] ++ cmp w24, 8 ++ sub w28, w19, #4 ++ ldr x1, [x20, 1144] ++ ldrh w0, [x1, 10] ++ ldrb w1, [x1, 12] ++ strb wzr, [x27, 20] ++ strh wzr, [x27, 22] ++ sdiv w0, w0, w1 ++ mov w1, 16 ++ strh w0, [x27, 18] ++ mov w0, 70 ++ csel w0, w0, w1, hi ++ strb w0, [x27, 21] ++ mov w1, 12 ++ add x0, x27, 12 ++ bl js_hash ++ str w0, [x27, 8] ++.L4303: ++ ldr x20, [x29, 216] ++ adrp x0, .LANCHOR0 ++ add x25, x0, :lo12:.LANCHOR0 ++ mov w23, 0 ++ add x0, x25, 4 ++ str x0, [x29, 200] ++.L4306: ++ ldr w0, [x29, 176] ++ cmp w0, w23 ++ bhi .L4317 ++ ldr x0, [x29, 136] ++ mov x23, x22 ++ mov w24, 4 ++ mov w25, 0 ++ stp w28, wzr, [x29, 192] ++ ldrb w0, [x0, 9] ++ str w0, [x29, 156] ++ ldr x0, [x29, 136] ++ ldr w1, [x29, 156] ++ ldrh w0, [x0, 26] ++ mul w0, w0, w1 ++ adrp x1, .LANCHOR0 ++ add x20, x1, :lo12:.LANCHOR0 ++ udiv w1, w21, w0 ++ strb wzr, [x20, 1252] ++ msub w0, w1, w0, w21 ++ str w0, [x29, 208] ++ sub w0, w21, w0 ++ str w0, [x29, 152] ++ ldr w0, [x29, 208] ++ and w0, w0, 3 ++ str w0, [x29, 200] ++ add x0, x20, 4 ++ str x0, [x29, 104] ++.L4318: ++ ldr w0, [x29, 192] ++ cmp w25, w0 ++ bcc .L4332 ++ adrp x0, .LANCHOR0 ++ add x20, x0, :lo12:.LANCHOR0 ++ ldrb w0, [x29, 128] ++ strb w0, [x20, 1252] ++ ldr w0, [x29, 236] ++ cbz w0, .L4333 ++ mov w0, 0 ++ bl zftl_flash_exit_slc_mode ++ adrp x0, .LANCHOR0 ++ strb wzr, [x20, 1154] ++ strb wzr, [x0, #:lo12:.LANCHOR0] ++.L4333: ++ lsl w0, w28, 7 ++ mov x1, 0 ++.L4334: ++ cmp w0, w1 ++ bhi .L4335 ++ ldr w0, [x29, 232] ++ add w0, w0, 1 ++ str w0, [x29, 232] ++ cmp w0, 5 ++ bls .L4299 ++ b .L4339 ++.L4301: ++ mov w0, 0 ++ bl zftl_flash_exit_slc_mode ++ strb wzr, [x20, #:lo12:.LANCHOR0] ++ strb wzr, [x23, 1154] ++ b .L4298 ++.L4344: ++ mov w1, 1 ++ b .L4302 ++.L4346: ++ mov w28, w19 ++ mov x27, 0 ++ b .L4303 ++.L4317: ++ ldr w0, [x29, 208] ++ ldrb w2, [x25, 1154] ++ add w8, w0, w23 ++ ldr x0, [x29, 200] ++ ubfx x8, x8, 2, 16 ++ add w1, w8, 1 ++ ldrh w0, [x0, w1, sxtw 1] ++ cbz w2, .L4308 ++ ldrb w4, [x25, 1] ++ lsl w0, w1, 1 ++ cmp w4, 0 ++ csel w0, w0, w1, ne ++.L4308: ++ ldrb w1, [x25, 1028] ++ cmp w1, 9 ++ bne .L4310 ++.L4399: ++ str w0, [x29, 240] ++ mov w0, 61424 ++ str w0, [x29, 244] ++ ldr x0, [x29, 200] ++ ldrh w0, [x0, w8, sxtw 1] ++ cbnz w2, .L4312 ++ mov w8, w0 ++.L4313: ++ mul w0, w24, w8 ++ cbnz x27, .L4314 ++ ldr w5, [x20] ++ mov x4, x20 ++ ldr w6, [x29, 240] ++ mov w3, w19 ++ add w27, w0, w26 ++ mov w7, 61424 ++ str w8, [x29, 196] ++ mov w2, w23 ++ mov w1, w27 ++ adrp x0, .LC320 ++ add x0, x0, :lo12:.LC320 ++ bl printk ++ add x2, x29, 240 ++ mov x1, x20 ++ mov w0, w27 ++ bl fw_flash_page_prog.constprop.29 ++ ldrb w0, [x25, 1154] ++ ldr w8, [x29, 196] ++ cbnz w0, .L4315 ++ udiv w1, w26, w24 ++ add w2, w8, 1 ++ bl id_block_prog_msb_ff_data ++.L4315: ++ add w0, w28, 16 ++ add x20, x20, 2048 ++ cmp w23, w0 ++ bcc .L4316 ++ ldr x0, [x29, 216] ++ add w1, w28, 20 ++ cmp w23, w1 ++ add x0, x0, 2048 ++ csel x20, x0, x20, cc ++.L4316: ++ add w9, w23, 4 ++ mov x27, 0 ++ and w23, w9, 65535 ++ b .L4306 ++.L4310: ++ sub w0, w0, #1 ++ lsl w0, w0, 2 ++ b .L4399 ++.L4312: ++ ldrb w1, [x25, 1] ++ lsl w0, w8, 1 ++ cmp w1, 0 ++ csel w8, w0, w8, ne ++ b .L4313 ++.L4314: ++ add x2, x29, 240 ++ mov x1, x27 ++ add w0, w0, w26 ++ bl fw_flash_page_prog.constprop.29 ++ b .L4316 ++.L4332: ++ ldr w0, [x29, 200] ++ ldr x1, [x29, 104] ++ sub w0, w24, w0 ++ ldrb w2, [x20, 1154] ++ and w0, w0, 65535 ++ str w0, [x29, 176] ++ ldr w0, [x29, 208] ++ add w0, w0, w25 ++ udiv w0, w0, w24 ++ and w0, w0, 65535 ++ ldrh w1, [x1, w0, sxtw 1] ++ cbnz w2, .L4319 ++ mov w0, w1 ++.L4320: ++ ldp w2, w1, [x29, 152] ++ ldrb w27, [x20, 1152] ++ madd w0, w1, w0, w2 ++ str w0, [x29, 148] ++ ldr w0, [x29, 200] ++ ldr w1, [x29, 148] ++ add w26, w0, w1 ++ ldr x0, [x20, 1144] ++ ldrb w0, [x0, 9] ++ udiv w26, w26, w0 ++ ldrb w0, [x20, 1249] ++ str w0, [x29, 124] ++ mov w0, w27 ++ bl nandc_bch_sel ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ str x0, [x29, 112] ++.L4321: ++ mov w4, w24 ++ add x3, x29, 240 ++ mov x2, x23 ++ mov w1, w26 ++ mov w0, 0 ++ bl flash_read_page ++ mov w5, w0 ++ cmn w0, #1 ++ bne .L4322 ++ ldrb w6, [x20, 1252] ++ cbnz w6, .L4323 ++.L4326: ++ ldr x0, [x29, 112] ++ ldr x6, [x0, 336] ++ cbnz x6, .L4324 ++.L4325: ++ ldrb w0, [x20, 1192] ++ cbz w0, .L4322 ++ mov w4, w24 ++ add x3, x29, 240 ++ mov x2, x23 ++ mov w1, w26 ++ mov w0, 0 ++ bl flash_ddr_tuning_read ++ b .L4400 ++.L4319: ++ ldrb w2, [x20, 1] ++ lsl w1, w0, 1 ++ cmp w2, 0 ++ csel w0, w1, w0, ne ++ b .L4320 ++.L4323: ++ str w6, [x29, 100] ++ mov w4, w24 ++ str w5, [x29, 120] ++ add x3, x29, 240 ++ strb wzr, [x20, 1252] ++ mov x2, x23 ++ mov w1, w26 ++ mov w0, 0 ++ bl flash_read_page ++ cmn w0, #1 ++ ldr w6, [x29, 100] ++ strb w6, [x20, 1252] ++ ldr w5, [x29, 120] ++ beq .L4326 ++.L4400: ++ mov w5, w0 ++.L4322: ++ cmn w5, #1 ++ cset w4, eq ++ cmp w27, 16 ++ cset w0, ne ++ tst w4, w0 ++ beq .L4328 ++ mov w0, 16 ++ mov w27, 16 ++ bl nandc_bch_sel ++ b .L4321 ++.L4324: ++ str w5, [x29, 120] ++ mov w4, w24 ++ add x3, x29, 240 ++ mov x2, x23 ++ mov w1, w26 ++ mov w0, 0 ++ blr x6 ++ cmn w0, #1 ++ ldr w5, [x29, 120] ++ beq .L4325 ++ b .L4400 ++.L4328: ++ ldr w0, [x29, 124] ++ bl nandc_bch_sel ++ cmp w4, 0 ++ ldr w0, [x29, 196] ++ csinv w0, w0, wzr, eq ++ str w0, [x29, 196] ++ ldr w0, [x29, 152] ++ cmp w25, 0 ++ ccmp w21, w0, 0, eq ++ bne .L4330 ++ ldr w0, [x29, 196] ++ cbnz w0, .L4330 ++ ldr w0, [x23] ++ mov w1, 18766 ++ movk w1, 0x464e, lsl 16 ++ cmp w0, w1 ++ bne .L4330 ++ ldr w0, [x29, 192] ++ ldr w1, [x29, 176] ++ ldrb w24, [x23, 17] ++ add w0, w0, w1 ++ str w0, [x29, 192] ++.L4331: ++ ldr w0, [x29, 176] ++ add w25, w0, w25 ++ and w25, w25, 65535 ++ b .L4318 ++.L4330: ++ ldr x0, [x29, 176] ++ mov w2, w25 ++ ldr w1, [x29, 148] ++ ldp w3, w4, [x29, 240] ++ ubfiz x0, x0, 9, 16 ++ add x23, x23, x0 ++ adrp x0, .LC321 ++ add x0, x0, :lo12:.LC321 ++ bl printk ++ str wzr, [x29, 200] ++ b .L4331 ++.L4335: ++ ldr x2, [x29, 216] ++ ldr w3, [x22, x1, lsl 2] ++ add x1, x1, 1 ++ add x2, x2, x1, lsl 2 ++ ldr w2, [x2, -4] ++ cmp w3, w2 ++ beq .L4334 ++ mov w2, 512 ++ mov w1, 0 ++ mov x0, x22 ++ bl ftl_memset ++ mov w1, w21 ++ mov w0, 0 ++ bl flash_erase_block ++ b .L4299 ++ .size write_idblock, .-write_idblock ++ .align 2 ++ .global write_loader_lba ++ .type write_loader_lba, %function ++write_loader_lba: ++ stp x29, x30, [sp, -112]! ++ cmp w0, 64 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov w19, w0 ++ stp x21, x22, [sp, 32] ++ adrp x20, .LANCHOR5 ++ stp x23, x24, [sp, 48] ++ mov w21, w1 ++ mov x24, x2 ++ bne .L4403 ++ ldr w0, [x2] ++ mov w1, 35899 ++ movk w1, 0xfcdc, lsl 16 ++ cmp w0, w1 ++ mov w1, 19282 ++ movk w1, 0x534e, lsl 16 ++ ccmp w0, w1, 4, ne ++ beq .L4404 ++ add w1, w1, 327680 ++ cmp w0, w1 ++ bne .L4403 ++.L4404: ++ add x22, x20, :lo12:.LANCHOR5 ++ mov w0, 1 ++ strb w0, [x22, 524] ++ mov w0, 59392 ++ movk w0, 0x3, lsl 16 ++ bl ftl_malloc ++ mov w2, 59392 ++ mov w1, 0 ++ movk w2, 0x3, lsl 16 ++ str x0, [x22, 528] ++ bl ftl_memset ++ mov w0, 64 ++ str w0, [x22, 536] ++.L4403: ++ add x23, x20, :lo12:.LANCHOR5 ++ ldr w2, [x24] ++ mov w4, w21 ++ mov w3, w19 ++ adrp x0, .LC322 ++ add x0, x0, :lo12:.LC322 ++ ldr x1, [x23, 528] ++ bl printk ++ ldrb w0, [x23, 524] ++ cbz w0, .L4402 ++ ldr x22, [x23, 528] ++ cbz x22, .L4402 ++ sub w0, w19, #64 ++ cmp w0, 499 ++ bhi .L4406 ++ mov w2, 564 ++ sub w2, w2, w19 ++ cmp w21, w2 ++ ubfiz x0, x0, 9, 25 ++ csel w2, w21, w2, ls ++ mov x1, x24 ++ lsl w2, w2, 9 ++ add x0, x22, x0 ++ bl ftl_memcpy ++.L4407: ++ add x23, x20, :lo12:.LANCHOR5 ++ ldr w0, [x23, 536] ++ cmp w19, w0 ++ beq .L4416 ++ strb wzr, [x23, 524] ++ mov x0, x22 ++ bl ftl_free ++ str xzr, [x23, 528] ++ b .L4416 ++.L4406: ++ cmp w19, 563 ++ bls .L4407 ++ ldr w0, [x23, 536] ++ mov w1, 500 ++ sub w0, w0, #64 ++ cmp w0, 500 ++ csel w0, w0, w1, ls ++ adrp x1, .LANCHOR0+1144 ++ ldr x1, [x1, #:lo12:.LANCHOR0+1144] ++ ldrb w1, [x1, 9] ++ cmp w1, 4 ++ beq .L4408 ++ mov w1, 2 ++ str w1, [x29, 72] ++ mov w1, 3 ++ str w1, [x29, 76] ++ mov w1, 4 ++ str w1, [x29, 80] ++ mov w1, 5 ++ str w1, [x29, 84] ++ mov w1, 6 ++ str w1, [x29, 88] ++.L4409: ++ add x2, x22, 245760 ++ mov w1, 61952 ++ add x2, x2, 2048 ++.L4415: ++ ldr w3, [x2] ++ cbz w3, .L4413 ++ add w0, w1, 2048 ++ lsl w0, w0, 2 ++.L4414: ++ mov x1, x22 ++ add x22, x20, :lo12:.LANCHOR5 ++ add x2, x29, 72 ++ bl write_idblock ++ ldr x0, [x22, 528] ++ strb wzr, [x22, 524] ++ bl ftl_free ++ str xzr, [x22, 528] ++.L4416: ++ add x20, x20, :lo12:.LANCHOR5 ++ add w19, w19, w21 ++ str w19, [x20, 536] ++.L4402: ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x23, x24, [sp, 48] ++ ldp x29, x30, [sp], 112 ++ ret ++.L4408: ++ add x2, x29, 72 ++ mov x1, 0 ++.L4412: ++ cmp w0, 256 ++ bls .L4410 ++ lsl w3, w1, 1 ++ str w3, [x2, x1, lsl 2] ++.L4411: ++ add x1, x1, 1 ++ cmp x1, 5 ++ bne .L4412 ++ b .L4409 ++.L4410: ++ str w1, [x2, x1, lsl 2] ++ b .L4411 ++.L4413: ++ sub w1, w1, #1 ++ sub x2, x2, #4 ++ cmp w1, 4096 ++ bne .L4415 ++ lsl w0, w0, 9 ++ b .L4414 ++ .size write_loader_lba, .-write_loader_lba ++ .align 2 ++ .global FtlWrite ++ .type FtlWrite, %function ++FtlWrite: ++ stp x29, x30, [sp, -48]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ and w20, w0, 255 ++ stp x21, x22, [sp, 32] ++ sub w0, w1, #64 ++ mov w19, w1 ++ mov w21, w2 ++ mov x22, x3 ++ cmp w0, 1983 ++ bhi .L4428 ++ cbnz w20, .L4428 ++ mov x2, x3 ++ mov w1, w21 ++ mov w0, w19 ++ bl write_loader_lba ++.L4428: ++ adrp x0, .LANCHOR5+232 ++ mov x3, x22 ++ mov w2, w21 ++ mov w1, w19 ++ ldr x0, [x0, #:lo12:.LANCHOR5+232] ++ ldr x4, [x0, 48] ++ mov w0, w20 ++ blr x4 ++ ldp x19, x20, [sp, 16] ++ ldp x21, x22, [sp, 32] ++ ldp x29, x30, [sp], 48 ++ ret ++ .size FtlWrite, .-FtlWrite ++ .align 2 ++ .global rknand_sys_storage_ioctl ++ .type rknand_sys_storage_ioctl, %function ++rknand_sys_storage_ioctl: ++ mov w0, 25364 ++ movk w0, 0x4004, lsl 16 ++ cmp w1, w0 ++ bne .L4434 ++ stp x29, x30, [sp, -16]! ++ add x29, sp, 0 ++ bl rknand_dev_flush ++ mov x1, 0 ++ adrp x0, .LC323 ++ add x0, x0, :lo12:.LC323 ++ bl printk ++ mov x0, 0 ++ ldp x29, x30, [sp], 16 ++ ret ++.L4434: ++ mov x0, -22 ++ 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, -16]! ++ adrp x0, .LANCHOR5 ++ add x0, x0, :lo12:.LANCHOR5 ++ mov w1, -1 ++ add x29, sp, 0 ++ str w1, [x0, 536] ++ strb wzr, [x0, 524] ++ str xzr, [x0, 528] ++ str xzr, [x0, 544] ++ bl rknand_sys_storage_init ++ ldp x29, x30, [sp], 16 ++ 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, -80]! ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ adrp x19, .LANCHOR5 ++ add x20, x19, :lo12:.LANCHOR5 ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ str x25, [sp, 64] ++ ldr x0, [x20, 552] ++ cbnz x0, .L4443 ++ mov w0, 65536 ++ bl ftl_malloc ++ str x0, [x20, 552] ++.L4443: ++ add x19, x19, :lo12:.LANCHOR5 ++ ldr x0, [x19, 552] ++ cbz x0, .L4448 ++ adrp x23, .LC324 ++ mov w25, 22084 ++ add x23, x23, :lo12:.LC324 ++ mov w24, 0 ++ mov w22, 0 ++ mov w21, 0 ++ movk w25, 0x524b, lsl 16 ++.L4446: ++ ldr x2, [x19, 552] ++ mov w1, 128 ++ lsl w0, w21, 7 ++ bl FlashBootVendorRead ++ cbnz w0, .L4449 ++ ldr x0, [x19, 552] ++ add x1, x0, 61440 ++ ldr w3, [x0, 4] ++ ldr w2, [x1, 4092] ++ ldr w1, [x0] ++ mov x0, x23 ++ bl printk ++ ldr x20, [x19, 552] ++ ldr w0, [x20] ++ cmp w0, w25 ++ bne .L4445 ++ add x0, x20, 61440 ++ ldr w1, [x20, 4] ++ ldr w0, [x0, 4092] ++ cmp w0, w1 ++ bne .L4445 ++ cmp w0, w22 ++ bls .L4445 ++ mov w24, w21 ++ mov w22, w0 ++.L4445: ++ add w21, w21, 1 ++ cmp w21, 2 ++ bne .L4446 ++ cbz w22, .L4447 ++ mov x2, x20 ++ mov w1, 128 ++ lsl w0, w24, 7 ++ bl FlashBootVendorRead ++ cmp w0, 0 ++ csetm w0, ne ++.L4442: ++ 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 ++.L4447: ++ mov w1, 0 ++ mov x2, 65536 ++ mov x0, x20 ++ bl memset ++ mov w1, 22084 ++ mov w0, 1 ++ movk w1, 0x524b, lsl 16 ++ stp w1, w0, [x20] ++ add x1, x20, 61440 ++ str w0, [x1, 4092] ++ mov w0, -1032 ++ strh w0, [x20, 14] ++ mov w0, 0 ++ b .L4442 ++.L4448: ++ mov w0, -12 ++ b .L4442 ++.L4449: ++ mov w0, -1 ++ b .L4442 ++ .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, .LANCHOR5+552 ++ ldr x4, [x3, #:lo12:.LANCHOR5+552] ++ cbz x4, .L4457 ++ ldrh w6, [x4, 10] ++ add x5, x4, 16 ++ mov w3, 0 ++.L4454: ++ cmp w3, w6 ++ bcc .L4456 ++.L4457: ++ mov w0, -1 ++ ret ++.L4456: ++ ldrh w7, [x5], 8 ++ cmp w7, w0 ++ bne .L4455 ++ stp x29, x30, [sp, -32]! ++ add x3, x4, w3, uxtw 3 ++ mov x0, x1 ++ add x29, sp, 0 ++ str x19, [sp, 16] ++ ldrh w19, [x3, 20] ++ ldrh w1, [x3, 18] ++ cmp w19, w2 ++ csel w19, w19, w2, ls ++ add x1, x1, 1024 ++ uxtw x2, w19 ++ add x1, x4, x1 ++ bl memcpy ++ mov w0, w19 ++ ldr x19, [sp, 16] ++ ldp x29, x30, [sp], 32 ++ ret ++.L4455: ++ add w3, w3, 1 ++ b .L4454 ++ .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]! ++ adrp x3, .LANCHOR5+552 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ ldr x19, [x3, #:lo12:.LANCHOR5+552] ++ stp x21, x22, [sp, 32] ++ stp x23, x24, [sp, 48] ++ stp x25, x26, [sp, 64] ++ stp x27, x28, [sp, 80] ++ cbz x19, .L4477 ++ add w4, w2, 63 ++ ldrh w3, [x19, 10] ++ ldrh w24, [x19, 8] ++ mov x28, x1 ++ mov w26, w2 ++ and w22, w4, -64 ++ add x1, x19, 16 ++ mov w20, 0 ++.L4464: ++ cmp w20, w3 ++ bcc .L4472 ++ ldrh w1, [x19, 14] ++ cmp w22, w1 ++ bhi .L4477 ++ add x3, x19, w3, uxth 3 ++ strh w0, [x3, 16] ++ and w0, w22, 65535 ++ ldrh w2, [x19, 12] ++ strh w2, [x3, 18] ++ strh w26, [x3, 20] ++ add w2, w2, w0 ++ sub w0, w1, w0 ++ strh w2, [x19, 12] ++ strh w0, [x19, 14] ++ uxtw x2, w26 ++ mov x1, x28 ++ 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] ++ b .L4479 ++.L4472: ++ ldrh w6, [x1], 8 ++ cmp w6, w0 ++ bne .L4465 ++ uxtw x23, w20 ++ add x5, x19, 1024 ++ add x21, x19, x23, lsl 3 ++ ldrh w25, [x21, 20] ++ add w25, w25, 63 ++ and w25, w25, -64 ++ cmp w26, w25 ++ bls .L4466 ++ ldrh w0, [x19, 14] ++ cmp w22, w0 ++ bhi .L4477 ++ add x23, x23, 2 ++ ldrh w21, [x21, 18] ++ add x23, x19, x23, lsl 3 ++ sub w3, w3, #1 ++.L4467: ++ cmp w20, w3 ++ bcc .L4468 ++ add x20, x19, w20, uxtw 3 ++ and w21, w21, 65535 ++ add x0, x5, w21, uxth ++ uxtw x2, w26 ++ mov x1, x28 ++ strh w21, [x20, 18] ++ strh w6, [x20, 16] ++ strh w26, [x20, 20] ++ bl memcpy ++ ldrh w0, [x19, 14] ++ and w4, w22, 65535 ++ add w21, w21, w4 ++ strh w21, [x19, 12] ++ sub w0, w0, w4 ++ add w25, w0, w25 ++ strh w25, [x19, 14] ++.L4479: ++ 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 ++ and w0, w0, 65535 ++ cmp w0, 1 ++ csel w0, w0, wzr, ls ++ strh w0, [x19, 8] ++ lsl w0, w24, 7 ++ bl FlashBootVendorWrite ++ mov w0, 0 ++.L4462: ++ 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 ++.L4468: ++ add w20, w20, 1 ++ stp w3, w6, [x29, 96] ++ add x0, x19, w20, uxtw 3 ++ str x5, [x29, 104] ++ add x23, x23, 8 ++ ldrh w1, [x0, 16] ++ strh w1, [x23, -8] ++ ldrh w1, [x0, 20] ++ strh w1, [x23, -4] ++ strh w21, [x23, -6] ++ ldrh w27, [x0, 20] ++ ldrh w1, [x0, 18] ++ add x0, x5, w21, uxtw ++ add w27, w27, 63 ++ and w27, w27, -64 ++ add x1, x5, x1 ++ and x2, x27, 131008 ++ bl memcpy ++ add w21, w21, w27 ++ ldr x5, [x29, 104] ++ ldp w3, w6, [x29, 96] ++ b .L4467 ++.L4466: ++ ldrh w0, [x21, 18] ++ uxtw x2, w26 ++ mov x1, x28 ++ add x0, x5, x0 ++ bl memcpy ++ strh w26, [x21, 20] ++ b .L4479 ++.L4465: ++ add w20, w20, 1 ++ b .L4464 ++.L4477: ++ mov w0, -1 ++ b .L4462 ++ .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]! ++ mov w0, 9216 ++ add x29, sp, 0 ++ stp x19, x20, [sp, 16] ++ mov x20, x2 ++ str x21, [sp, 32] ++ mov w21, w1 ++ bl ftl_malloc ++ cbz x0, .L4488 ++ mov w1, 30209 ++ mov x19, x0 ++ movk w1, 0x4004, lsl 16 ++ cmp w21, w1 ++ beq .L4483 ++ add w1, w1, 1 ++ cmp w21, w1 ++ beq .L4484 ++.L4494: ++ mov x20, -14 ++ b .L4482 ++.L4483: ++ mov x2, 8 ++ mov x1, x20 ++ bl rk_copy_from_user ++ cbnz x0, .L4494 ++ ldr w1, [x19] ++ mov w0, 17745 ++ movk w0, 0x5652, lsl 16 ++ cmp w1, w0 ++ beq .L4486 ++.L4487: ++ mov x20, -1 ++.L4482: ++ mov x0, x19 ++ bl kfree ++.L4480: ++ mov x0, x20 ++ ldr x21, [sp, 32] ++ ldp x19, x20, [sp, 16] ++ ldp x29, x30, [sp], 48 ++ ret ++.L4486: ++ ldrh w2, [x19, 6] ++ add x1, x19, 8 ++ ldrh w0, [x19, 4] ++ bl rk_ftl_vendor_read ++ cmn w0, #1 ++ beq .L4487 ++ strh w0, [x19, 6] ++ and x0, x0, 65535 ++ add x2, x0, 8 ++ mov x1, x19 ++ mov x0, x20 ++ bl rk_copy_to_user ++ cbnz x0, .L4494 ++ mov x20, 0 ++ b .L4482 ++.L4484: ++ mov x2, 8 ++ mov x1, x20 ++ bl rk_copy_from_user ++ cbnz x0, .L4494 ++ ldr w1, [x19] ++ mov w0, 17745 ++ movk w0, 0x5652, lsl 16 ++ cmp w1, w0 ++ bne .L4487 ++ ldrh w2, [x19, 6] ++ cmp w2, 4087 ++ bhi .L4487 ++ add w2, w2, 8 ++ mov x1, x20 ++ sxtw x2, w2 ++ mov x0, x19 ++ bl rk_copy_from_user ++ cbnz x0, .L4494 ++ ldrh w2, [x19, 6] ++ add x1, x19, 8 ++ ldrh w0, [x19, 4] ++ bl rk_ftl_vendor_write ++ sxtw x20, w0 ++ b .L4482 ++.L4488: ++ mov x20, -1 ++ b .L4480 ++ .size rk_ftl_vendor_storage_ioctl, .-rk_ftl_vendor_storage_ioctl ++ .global SecureBootUnlockTryCount ++ .global SecureBootCheckOK ++ .global SecureBootEn ++ .global gpVendor1Info ++ .global gpVendor0Info ++ .global g_idb_buffer ++ .global gSnSectorData ++ .global gpDrmKeyInfo ++ .global gpBootConfig ++ .global ftl_dma32_buffer_size ++ .global ftl_dma32_buffer ++ .global gLoaderBootInfo ++ .global RK29_NANDC1_REG_BASE ++ .global RK29_NANDC_REG_BASE ++ .global gp_ftl_api ++ .global rk_zftl_enable ++ .global g_pm_spare ++ .global pm_first_write ++ .global pm_force_gc ++ .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 slc_cache_sblk ++ .global xlc_data_sblk ++ .global slc_data_sblk ++ .global free_mix_sblk ++ .global free_xlc_sblk ++ .global free_slc_sblk ++ .global gp_data_xlc_data_head ++ .global gp_data_slc_data_head ++ .global gp_data_slc_cache_head ++ .global gp_free_mix_head ++ .global gp_free_xlc_head ++ .global gp_free_slc_head ++ .global gp_sblk_list_tbl ++ .global zftl_print_list_count ++ .global ftl_ext_info_first_write ++ .global ftl_sys_info_first_write ++ .global ftl_low_format_cur_blk ++ .global ftl_power_lost_flag ++ .global ftl_vpn_update_count ++ .global ftl_sblk_update_list_offset ++ .global ftl_sblk_update_list ++ .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_buffer ++ .global ftl_ext_info_data_buffer ++ .global ftl_info_data_buffer ++ .global ftl_tmp_spare ++ .global ftl_info_spare ++ .global g_ftl_info_blk ++ .global tlc_b05a_prog_tbl ++ .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_xlc_search_index ++ .global gc_xlc_data_index ++ .global gc_slc_cache_index ++ .global gc_slc_data_index ++ .global gc_free_slc_sblk_th ++ .global gc_slc_mode_vpn_th ++ .global gc_slc_mode_slc_vpn_th ++ .global gc_slc_mode_tlc_vpn_th ++ .global gc_tlc_mode_tlc_vpn_th ++ .global gc_tlc_mode_slc_vpn_th ++ .global gc_state ++ .global gc_mode ++ .global p_read_ahead_ext_buf ++ .global discard_sector_count ++ .global read_ahead_lpa ++ .global _ftl_gc_tag_page_num ++ .global read_buf_count ++ .global read_buf_head ++ .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_slc_to_xlc_ec_ratio ++ .global _c_mix_max_xlc_ec_count ++ .global _c_mix_max_slc_ec_count ++ .global _c_swl_xlc_gc_th ++ .global _c_swl_slc_gc_th ++ .global _gc_after_discard_en ++ .global _last_write_time ++ .global _last_read_time ++ .global _min_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 nandc_ecc_sts ++ .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_tran_timeout ++ .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 _c_ftl_cs_bits ++ .global g_maxRetryCount ++ .global g_maxRegNum ++ .global g_retryMode ++ .global g_flash_toggle_mode_en ++ .global g_flash_ymtc_3d_tlc_flag ++ .global g_flash_micron_3d_tlc_b16a ++ .global g_flash_micron_3d_tlc_b05a ++ .global g_flash_micron_3d_tlc_flag ++ .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_one_pass_program ++ .global g_slc_mode_addr2 ++ .global g_slc_mode_enable ++ .global g_flash_cur_mode ++ .global g_flash_six_addr ++ .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 ++ .data ++ .align 3 ++ .set .LANCHOR2,. + 0 ++ .type zftl_debug, %object ++ .size zftl_debug, 4 ++zftl_debug: ++ .word 17476 ++ .zero 4 ++ .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 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 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, 1568 ++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 3 ++ .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 3 ++ .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 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 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 3 ++ .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 17857 ++ .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 3 ++ .byte 1 ++ .byte 1 ++ .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 87 ++ .byte 1 ++ .byte 1 ++ .byte 32 ++ .hword 256 ++ .byte 2 ++ .byte 2 ++ .hword 1058 ++ .hword 17881 ++ .byte 2 ++ .byte 33 ++ .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 -34 ++ .byte -108 ++ .byte -109 ++ .byte 118 ++ .byte -47 ++ .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 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 17881 ++ .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 17881 ++ .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 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 17857 ++ .byte 2 ++ .byte 66 ++ .byte 40 ++ .byte 32 ++ .byte 2 ++ .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 9671 ++ .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 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .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 3 ++ .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 0 ++ .byte 0 ++ .byte 0 ++ .byte 1 ++ .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 455 ++ .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 5 ++ .byte 44 ++ .byte 100 ++ .byte 68 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 16 ++ .hword 256 ++ .byte 2 ++ .byte 4 ++ .hword 1024 ++ .hword 449 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 256 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .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 ++ .hword 512 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 52 ++ .byte -92 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 9671 ++ .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 60 ++ .byte -91 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 1044 ++ .hword 471 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 512 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 68 ++ .byte 50 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 9671 ++ .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 -124 ++ .byte -60 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 9671 ++ .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 -124 ++ .byte 68 ++ .byte 52 ++ .byte -86 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 2184 ++ .hword 9671 ++ .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 6 ++ .byte -101 ++ .byte 73 ++ .byte 1 ++ .byte 0 ++ .byte -101 ++ .byte 73 ++ .byte 9 ++ .byte 1 ++ .byte 32 ++ .hword 256 ++ .byte 2 ++ .byte 1 ++ .hword 2144 ++ .hword -23097 ++ .byte 8 ++ .byte 21 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 8 ++ .byte 0 ++ .hword 256 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -87 ++ .byte 4 ++ .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 ++ .hword 512 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 1 ++ .byte 5 ++ .byte 44 ++ .byte -124 ++ .byte 88 ++ .byte 50 ++ .byte -95 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 768 ++ .byte 3 ++ .byte 1 ++ .hword 1440 ++ .hword 3527 ++ .byte 0 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 1024 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 2 ++ .byte 6 ++ .byte 44 ++ .byte -92 ++ .byte 8 ++ .byte 50 ++ .byte -95 ++ .byte 0 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 2304 ++ .byte 3 ++ .byte 1 ++ .hword 1008 ++ .hword 3521 ++ .byte 0 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 4096 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 4 ++ .byte 6 ++ .byte 44 ++ .byte -92 ++ .byte 100 ++ .byte 50 ++ .byte -86 ++ .byte 4 ++ .byte 4 ++ .byte 1 ++ .byte 32 ++ .hword 1024 ++ .byte 2 ++ .byte 1 ++ .hword 2192 ++ .hword 9671 ++ .byte 10 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 1024 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .byte 0 ++ .byte 6 ++ .byte -101 ++ .byte -61 ++ .byte 72 ++ .byte 37 ++ .byte 16 ++ .byte 0 ++ .byte 9 ++ .byte 1 ++ .byte 32 ++ .hword 1152 ++ .byte 3 ++ .byte 2 ++ .hword 1006 ++ .hword -27169 ++ .byte 13 ++ .byte 81 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 4 ++ .byte 0 ++ .hword 2048 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .byte 24 ++ .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 455 ++ .byte 2 ++ .byte 6 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .hword 256 ++ .byte 2 ++ .byte -65 ++ .byte -66 ++ .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 2 ++ .byte -65 ++ .byte -66 ++ .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 ++ .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 ++ .hword 256 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -83 ++ .byte 58 ++ .byte 20 ++ .byte 3 ++ .byte 8 ++ .byte 80 ++ .byte 2 ++ .byte 1 ++ .byte 32 ++ .hword 388 ++ .byte 2 ++ .byte 2 ++ .hword 1362 ++ .hword 473 ++ .byte 9 ++ .byte 8 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 3 ++ .byte 0 ++ .hword 512 ++ .byte 0 ++ .byte -65 ++ .byte -66 ++ .byte 1 ++ .byte 5 ++ .byte -119 ++ .byte 100 ++ .byte 100 ++ .byte 60 ++ .byte -95 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 1 ++ .hword 1024 ++ .hword 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 512 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 5 ++ .byte -119 ++ .byte -124 ++ .byte 100 ++ .byte 60 ++ .byte -91 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .hword 512 ++ .byte 2 ++ .byte 2 ++ .hword 1024 ++ .hword 455 ++ .byte 4 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 512 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .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 4 ++ .hword 1024 ++ .hword 449 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 256 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .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 4 ++ .hword 1024 ++ .hword 449 ++ .byte 3 ++ .byte 17 ++ .byte 40 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 256 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -119 ++ .byte -120 ++ .byte 4 ++ .byte 75 ++ .byte -87 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 16 ++ .hword 256 ++ .byte 2 ++ .byte 4 ++ .hword 1024 ++ .hword 449 ++ .byte 1 ++ .byte 0 ++ .byte 24 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 256 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 6 ++ .byte -119 ++ .byte -92 ++ .byte 8 ++ .byte 50 ++ .byte -95 ++ .byte 0 ++ .byte 7 ++ .byte 1 ++ .byte 32 ++ .hword 2304 ++ .byte 3 ++ .byte 1 ++ .hword 1008 ++ .hword 3521 ++ .byte 0 ++ .byte 19 ++ .byte 70 ++ .byte 32 ++ .byte 1 ++ .byte 0 ++ .byte 1 ++ .byte 0 ++ .hword 4096 ++ .byte 3 ++ .byte 0 ++ .byte 0 ++ .byte 4 ++ .byte 6 ++ .byte -20 ++ .byte -34 ++ .byte -108 ++ .byte -61 ++ .byte -92 ++ .byte -54 ++ .byte 0 ++ .byte 1 ++ .byte 32 ++ .hword 792 ++ .byte 2 ++ .byte 1 ++ .hword 688 ++ .hword 1217 ++ .byte 11 ++ .byte 50 ++ .byte 40 ++ .byte 32 ++ .byte 3 ++ .byte 1 ++ .byte 1 ++ .byte 0 ++ .hword 1024 ++ .byte 1 ++ .byte -38 ++ .byte -33 ++ .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_b05a_prog_tbl, %object ++ .size tlc_b05a_prog_tbl, 1536 ++tlc_b05a_prog_tbl: ++ .hword 0 ++ .hword 0 ++ .hword 0 ++ .hword 0 ++ .hword 0 ++ .hword 0 ++ .hword 0 ++ .hword 0 ++ .hword 9 ++ .hword 0 ++ .hword 11 ++ .hword 0 ++ .hword 13 ++ .hword 0 ++ .hword 15 ++ .hword 0 ++ .hword 17 ++ .hword 0 ++ .hword 19 ++ .hword 0 ++ .hword 21 ++ .hword 0 ++ .hword 23 ++ .hword 0 ++ .hword 25 ++ .hword 0 ++ .hword 27 ++ .hword 0 ++ .hword 29 ++ .hword 0 ++ .hword 31 ++ .hword 0 ++ .hword 33 ++ .hword 0 ++ .hword 35 ++ .hword 0 ++ .hword 37 ++ .hword 0 ++ .hword 39 ++ .hword 0 ++ .hword 41 ++ .hword 0 ++ .hword 43 ++ .hword 0 ++ .hword 45 ++ .hword 0 ++ .hword 47 ++ .hword 0 ++ .hword 49 ++ .hword 0 ++ .hword 51 ++ .hword 0 ++ .hword 53 ++ .hword 0 ++ .hword 55 ++ .hword 0 ++ .hword 25 ++ .hword 58 ++ .hword 0 ++ .hword 27 ++ .hword 61 ++ .hword 0 ++ .hword 29 ++ .hword 64 ++ .hword 0 ++ .hword 31 ++ .hword 67 ++ .hword 0 ++ .hword 33 ++ .hword 70 ++ .hword 0 ++ .hword 35 ++ .hword 73 ++ .hword 0 ++ .hword 37 ++ .hword 76 ++ .hword 0 ++ .hword 39 ++ .hword 79 ++ .hword 0 ++ .hword 41 ++ .hword 82 ++ .hword 0 ++ .hword 43 ++ .hword 85 ++ .hword 0 ++ .hword 45 ++ .hword 88 ++ .hword 0 ++ .hword 47 ++ .hword 91 ++ .hword 0 ++ .hword 49 ++ .hword 94 ++ .hword 0 ++ .hword 51 ++ .hword 97 ++ .hword 0 ++ .hword 53 ++ .hword 100 ++ .hword 0 ++ .hword 55 ++ .hword 103 ++ .hword 0 ++ .hword 58 ++ .hword 106 ++ .hword 0 ++ .hword 61 ++ .hword 109 ++ .hword 0 ++ .hword 64 ++ .hword 112 ++ .hword 0 ++ .hword 67 ++ .hword 115 ++ .hword 0 ++ .hword 70 ++ .hword 118 ++ .hword 0 ++ .hword 73 ++ .hword 121 ++ .hword 0 ++ .hword 76 ++ .hword 124 ++ .hword 0 ++ .hword 79 ++ .hword 127 ++ .hword 0 ++ .hword 82 ++ .hword 130 ++ .hword 0 ++ .hword 85 ++ .hword 133 ++ .hword 0 ++ .hword 88 ++ .hword 136 ++ .hword 0 ++ .hword 91 ++ .hword 139 ++ .hword 0 ++ .hword 94 ++ .hword 142 ++ .hword 0 ++ .hword 97 ++ .hword 145 ++ .hword 0 ++ .hword 100 ++ .hword 148 ++ .hword 0 ++ .hword 103 ++ .hword 151 ++ .hword 0 ++ .hword 106 ++ .hword 154 ++ .hword 0 ++ .hword 109 ++ .hword 157 ++ .hword 0 ++ .hword 112 ++ .hword 160 ++ .hword 0 ++ .hword 115 ++ .hword 163 ++ .hword 0 ++ .hword 118 ++ .hword 166 ++ .hword 0 ++ .hword 121 ++ .hword 169 ++ .hword 0 ++ .hword 124 ++ .hword 172 ++ .hword 0 ++ .hword 127 ++ .hword 175 ++ .hword 0 ++ .hword 130 ++ .hword 178 ++ .hword 0 ++ .hword 133 ++ .hword 181 ++ .hword 0 ++ .hword 136 ++ .hword 184 ++ .hword 0 ++ .hword 139 ++ .hword 187 ++ .hword 0 ++ .hword 142 ++ .hword 190 ++ .hword 0 ++ .hword 145 ++ .hword 193 ++ .hword 0 ++ .hword 148 ++ .hword 196 ++ .hword 0 ++ .hword 151 ++ .hword 199 ++ .hword 0 ++ .hword 154 ++ .hword 202 ++ .hword 0 ++ .hword 157 ++ .hword 205 ++ .hword 0 ++ .hword 160 ++ .hword 208 ++ .hword 0 ++ .hword 163 ++ .hword 211 ++ .hword 0 ++ .hword 166 ++ .hword 214 ++ .hword 0 ++ .hword 169 ++ .hword 217 ++ .hword 0 ++ .hword 172 ++ .hword 220 ++ .hword 0 ++ .hword 175 ++ .hword 223 ++ .hword 0 ++ .hword 178 ++ .hword 226 ++ .hword 0 ++ .hword 181 ++ .hword 229 ++ .hword 0 ++ .hword 184 ++ .hword 232 ++ .hword 0 ++ .hword 187 ++ .hword 235 ++ .hword 0 ++ .hword 190 ++ .hword 238 ++ .hword 0 ++ .hword 193 ++ .hword 241 ++ .hword 0 ++ .hword 196 ++ .hword 244 ++ .hword 0 ++ .hword 199 ++ .hword 247 ++ .hword 0 ++ .hword 202 ++ .hword 250 ++ .hword 0 ++ .hword 205 ++ .hword 253 ++ .hword 0 ++ .hword 208 ++ .hword 256 ++ .hword 0 ++ .hword 211 ++ .hword 259 ++ .hword 0 ++ .hword 214 ++ .hword 262 ++ .hword 0 ++ .hword 217 ++ .hword 265 ++ .hword 0 ++ .hword 220 ++ .hword 268 ++ .hword 0 ++ .hword 223 ++ .hword 271 ++ .hword 0 ++ .hword 226 ++ .hword 274 ++ .hword 0 ++ .hword 229 ++ .hword 277 ++ .hword 0 ++ .hword 232 ++ .hword 280 ++ .hword 0 ++ .hword 235 ++ .hword 283 ++ .hword 0 ++ .hword 238 ++ .hword 286 ++ .hword 0 ++ .hword 241 ++ .hword 289 ++ .hword 0 ++ .hword 244 ++ .hword 292 ++ .hword 0 ++ .hword 247 ++ .hword 295 ++ .hword 0 ++ .hword 250 ++ .hword 298 ++ .hword 0 ++ .hword 253 ++ .hword 301 ++ .hword 0 ++ .hword 256 ++ .hword 304 ++ .hword 0 ++ .hword 259 ++ .hword 307 ++ .hword 0 ++ .hword 262 ++ .hword 310 ++ .hword 0 ++ .hword 265 ++ .hword 313 ++ .hword 0 ++ .hword 268 ++ .hword 316 ++ .hword 0 ++ .hword 271 ++ .hword 319 ++ .hword 0 ++ .hword 274 ++ .hword 322 ++ .hword 0 ++ .hword 277 ++ .hword 325 ++ .hword 0 ++ .hword 280 ++ .hword 328 ++ .hword 0 ++ .hword 283 ++ .hword 331 ++ .hword 0 ++ .hword 286 ++ .hword 334 ++ .hword 0 ++ .hword 289 ++ .hword 337 ++ .hword 0 ++ .hword 292 ++ .hword 340 ++ .hword 0 ++ .hword 295 ++ .hword 343 ++ .hword 0 ++ .hword 298 ++ .hword 346 ++ .hword 0 ++ .hword 301 ++ .hword 349 ++ .hword 0 ++ .hword 304 ++ .hword 352 ++ .hword 0 ++ .hword 307 ++ .hword 355 ++ .hword 0 ++ .hword 310 ++ .hword 358 ++ .hword 0 ++ .hword 313 ++ .hword 361 ++ .hword 0 ++ .hword 316 ++ .hword 364 ++ .hword 0 ++ .hword 319 ++ .hword 367 ++ .hword 0 ++ .hword 322 ++ .hword 370 ++ .hword 0 ++ .hword 325 ++ .hword 373 ++ .hword 0 ++ .hword 328 ++ .hword 376 ++ .hword 0 ++ .hword 331 ++ .hword 379 ++ .hword 0 ++ .hword 334 ++ .hword 382 ++ .hword 0 ++ .hword 337 ++ .hword 385 ++ .hword 0 ++ .hword 340 ++ .hword 388 ++ .hword 0 ++ .hword 343 ++ .hword 391 ++ .hword 0 ++ .hword 346 ++ .hword 394 ++ .hword 0 ++ .hword 349 ++ .hword 397 ++ .hword 0 ++ .hword 352 ++ .hword 400 ++ .hword 0 ++ .hword 355 ++ .hword 403 ++ .hword 0 ++ .hword 358 ++ .hword 406 ++ .hword 0 ++ .hword 361 ++ .hword 409 ++ .hword 0 ++ .hword 364 ++ .hword 412 ++ .hword 0 ++ .hword 367 ++ .hword 415 ++ .hword 0 ++ .hword 370 ++ .hword 418 ++ .hword 0 ++ .hword 373 ++ .hword 421 ++ .hword 0 ++ .hword 376 ++ .hword 424 ++ .hword 0 ++ .hword 379 ++ .hword 427 ++ .hword 0 ++ .hword 382 ++ .hword 430 ++ .hword 0 ++ .hword 385 ++ .hword 433 ++ .hword 0 ++ .hword 388 ++ .hword 436 ++ .hword 0 ++ .hword 391 ++ .hword 439 ++ .hword 0 ++ .hword 394 ++ .hword 442 ++ .hword 0 ++ .hword 397 ++ .hword 445 ++ .hword 0 ++ .hword 400 ++ .hword 448 ++ .hword 0 ++ .hword 403 ++ .hword 451 ++ .hword 0 ++ .hword 406 ++ .hword 454 ++ .hword 0 ++ .hword 409 ++ .hword 457 ++ .hword 0 ++ .hword 412 ++ .hword 460 ++ .hword 0 ++ .hword 415 ++ .hword 463 ++ .hword 0 ++ .hword 418 ++ .hword 466 ++ .hword 0 ++ .hword 421 ++ .hword 469 ++ .hword 0 ++ .hword 424 ++ .hword 472 ++ .hword 0 ++ .hword 427 ++ .hword 475 ++ .hword 0 ++ .hword 430 ++ .hword 478 ++ .hword 0 ++ .hword 433 ++ .hword 481 ++ .hword 0 ++ .hword 436 ++ .hword 484 ++ .hword 0 ++ .hword 439 ++ .hword 487 ++ .hword 0 ++ .hword 442 ++ .hword 490 ++ .hword 0 ++ .hword 445 ++ .hword 493 ++ .hword 0 ++ .hword 448 ++ .hword 496 ++ .hword 0 ++ .hword 451 ++ .hword 499 ++ .hword 0 ++ .hword 454 ++ .hword 502 ++ .hword 0 ++ .hword 457 ++ .hword 505 ++ .hword 0 ++ .hword 460 ++ .hword 508 ++ .hword 0 ++ .hword 463 ++ .hword 511 ++ .hword 0 ++ .hword 466 ++ .hword 514 ++ .hword 0 ++ .hword 469 ++ .hword 517 ++ .hword 0 ++ .hword 472 ++ .hword 520 ++ .hword 0 ++ .hword 475 ++ .hword 523 ++ .hword 0 ++ .hword 478 ++ .hword 526 ++ .hword 0 ++ .hword 481 ++ .hword 529 ++ .hword 0 ++ .hword 484 ++ .hword 532 ++ .hword 0 ++ .hword 487 ++ .hword 535 ++ .hword 0 ++ .hword 490 ++ .hword 538 ++ .hword 0 ++ .hword 493 ++ .hword 541 ++ .hword 0 ++ .hword 496 ++ .hword 544 ++ .hword 0 ++ .hword 499 ++ .hword 547 ++ .hword 0 ++ .hword 502 ++ .hword 550 ++ .hword 0 ++ .hword 505 ++ .hword 553 ++ .hword 0 ++ .hword 508 ++ .hword 556 ++ .hword 0 ++ .hword 511 ++ .hword 559 ++ .hword 0 ++ .hword 514 ++ .hword 562 ++ .hword 0 ++ .hword 517 ++ .hword 565 ++ .hword 0 ++ .hword 520 ++ .hword 568 ++ .hword 0 ++ .hword 523 ++ .hword 571 ++ .hword 0 ++ .hword 526 ++ .hword 574 ++ .hword 0 ++ .hword 529 ++ .hword 577 ++ .hword 0 ++ .hword 532 ++ .hword 580 ++ .hword 0 ++ .hword 535 ++ .hword 583 ++ .hword 0 ++ .hword 538 ++ .hword 586 ++ .hword 0 ++ .hword 541 ++ .hword 589 ++ .hword 0 ++ .hword 544 ++ .hword 592 ++ .hword 0 ++ .hword 547 ++ .hword 595 ++ .hword 0 ++ .hword 550 ++ .hword 598 ++ .hword 0 ++ .hword 553 ++ .hword 601 ++ .hword 0 ++ .hword 556 ++ .hword 604 ++ .hword 0 ++ .hword 559 ++ .hword 607 ++ .hword 0 ++ .hword 562 ++ .hword 610 ++ .hword 0 ++ .hword 565 ++ .hword 613 ++ .hword 0 ++ .hword 568 ++ .hword 616 ++ .hword 0 ++ .hword 571 ++ .hword 619 ++ .hword 0 ++ .hword 574 ++ .hword 622 ++ .hword 0 ++ .hword 577 ++ .hword 625 ++ .hword 0 ++ .hword 580 ++ .hword 628 ++ .hword 0 ++ .hword 583 ++ .hword 631 ++ .hword 0 ++ .hword 586 ++ .hword 634 ++ .hword 0 ++ .hword 589 ++ .hword 637 ++ .hword 0 ++ .hword 592 ++ .hword 640 ++ .hword 0 ++ .hword 595 ++ .hword 643 ++ .hword 0 ++ .hword 598 ++ .hword 646 ++ .hword 0 ++ .hword 601 ++ .hword 649 ++ .hword 0 ++ .hword 604 ++ .hword 652 ++ .hword 0 ++ .hword 607 ++ .hword 655 ++ .hword 0 ++ .hword 610 ++ .hword 658 ++ .hword 0 ++ .hword 613 ++ .hword 661 ++ .hword 0 ++ .hword 616 ++ .hword 664 ++ .hword 0 ++ .hword 619 ++ .hword 667 ++ .hword 0 ++ .hword 622 ++ .hword 670 ++ .hword 0 ++ .hword 625 ++ .hword 673 ++ .hword 0 ++ .hword 628 ++ .hword 676 ++ .hword 0 ++ .hword 631 ++ .hword 679 ++ .hword 0 ++ .hword 634 ++ .hword 682 ++ .hword 0 ++ .hword 637 ++ .hword 685 ++ .hword 0 ++ .hword 640 ++ .hword 688 ++ .hword 0 ++ .hword 643 ++ .hword 691 ++ .hword 0 ++ .hword 646 ++ .hword 694 ++ .hword 0 ++ .hword 649 ++ .hword 697 ++ .hword 0 ++ .hword 652 ++ .hword 700 ++ .hword 0 ++ .hword 655 ++ .hword 703 ++ .hword 0 ++ .hword 658 ++ .hword 706 ++ .hword 0 ++ .hword 661 ++ .hword 709 ++ .hword 0 ++ .hword 664 ++ .hword 712 ++ .hword 0 ++ .hword 667 ++ .hword 715 ++ .hword 0 ++ .hword 670 ++ .hword 718 ++ .hword 0 ++ .hword 673 ++ .hword 721 ++ .hword 0 ++ .hword 676 ++ .hword 724 ++ .hword 0 ++ .hword 679 ++ .hword 727 ++ .hword 0 ++ .hword 682 ++ .hword 730 ++ .hword 0 ++ .hword 685 ++ .hword 733 ++ .hword 0 ++ .hword 688 ++ .hword 736 ++ .hword 0 ++ .hword 691 ++ .hword 739 ++ .hword 0 ++ .hword 694 ++ .hword 742 ++ .hword 0 ++ .hword 697 ++ .hword 745 ++ .hword 0 ++ .hword 700 ++ .hword 748 ++ .hword 0 ++ .hword 703 ++ .hword 751 ++ .hword 0 ++ .hword 706 ++ .hword 0 ++ .hword 709 ++ .hword 0 ++ .hword 712 ++ .hword 0 ++ .hword 715 ++ .hword 0 ++ .hword 718 ++ .hword 0 ++ .hword 721 ++ .hword 0 ++ .hword 724 ++ .hword 0 ++ .hword 727 ++ .hword 0 ++ .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 ++ .bss ++ .align 6 ++ .set .LANCHOR0,. + 0 ++ .set .LANCHOR3,. + 4352 ++ .set .LANCHOR5,. + 8704 ++ .type g_flash_slc_mode, %object ++ .size g_flash_slc_mode, 1 ++g_flash_slc_mode: ++ .zero 1 ++ .type g_slc_mode_addr2, %object ++ .size g_slc_mode_addr2, 1 ++g_slc_mode_addr2: ++ .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, 1024 ++g_lsb_page_tbl: ++ .zero 1024 ++ .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 ++ .zero 4 ++ .type gp_sblk_list_tbl, %object ++ .size gp_sblk_list_tbl, 8 ++gp_sblk_list_tbl: ++ .zero 8 ++ .type gp_flash_info, %object ++ .size gp_flash_info, 8 ++gp_flash_info: ++ .zero 8 ++ .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 _c_ftl_blk_pre_plane, %object ++ .size _c_ftl_blk_pre_plane, 2 ++_c_ftl_blk_pre_plane: ++ .zero 2 ++ .zero 6 ++ .type gp_blk_info, %object ++ .size gp_blk_info, 8 ++gp_blk_info: ++ .zero 8 ++ .type _c_slc_to_xlc_ec_ratio, %object ++ .size _c_slc_to_xlc_ec_ratio, 2 ++_c_slc_to_xlc_ec_ratio: ++ .zero 2 ++ .zero 6 ++ .type ftl_sblk_vpn, %object ++ .size ftl_sblk_vpn, 8 ++ftl_sblk_vpn: ++ .zero 8 ++ .type gp_ftl_ext_info, %object ++ .size gp_ftl_ext_info, 8 ++gp_ftl_ext_info: ++ .zero 8 ++ .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 6 ++ .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_idb_slc_mode_enable, %object ++ .size g_idb_slc_mode_enable, 1 ++g_idb_slc_mode_enable: ++ .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 ++ .zero 3 ++ .type g_die_cs_idx, %object ++ .size g_die_cs_idx, 8 ++g_die_cs_idx: ++ .zero 8 ++ .type g_flash_six_addr, %object ++ .size g_flash_six_addr, 1 ++g_flash_six_addr: ++ .zero 1 ++ .type _c_ftl_cs_bits, %object ++ .size _c_ftl_cs_bits, 1 ++_c_ftl_cs_bits: ++ .zero 1 ++ .zero 2 ++ .type g_flash_cur_mode, %object ++ .size g_flash_cur_mode, 4 ++g_flash_cur_mode: ++ .zero 4 ++ .type g_flash_micron_3d_tlc_flag, %object ++ .size g_flash_micron_3d_tlc_flag, 1 ++g_flash_micron_3d_tlc_flag: ++ .zero 1 ++ .type g_flash_ymtc_3d_tlc_flag, %object ++ .size g_flash_ymtc_3d_tlc_flag, 1 ++g_flash_ymtc_3d_tlc_flag: ++ .zero 1 ++ .zero 2 ++ .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_nandc_ecc_bits, %object ++ .size g_nandc_ecc_bits, 1 ++g_nandc_ecc_bits: ++ .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 ++ .type nandc_hw_seed, %object ++ .size nandc_hw_seed, 1 ++nandc_hw_seed: ++ .zero 1 ++ .type nandc_randomizer_en, %object ++ .size nandc_randomizer_en, 1 ++nandc_randomizer_en: ++ .zero 1 ++ .zero 3 ++ .type g_nandc_v6_master_info, %object ++ .size g_nandc_v6_master_info, 40 ++g_nandc_v6_master_info: ++ .zero 40 ++ .type fill_spare_size, %object ++ .size fill_spare_size, 2 ++fill_spare_size: ++ .zero 2 ++ .zero 6 ++ .type g_buf, %object ++ .size g_buf, 2048 ++g_buf: ++ .zero 2048 ++ .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 ++ .type sblk_queue_head, %object ++ .size sblk_queue_head, 1 ++sblk_queue_head: ++ .zero 1 ++ .type sblk_read_completed_queue_head, %object ++ .size sblk_read_completed_queue_head, 1 ++sblk_read_completed_queue_head: ++ .zero 1 ++ .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 sblk_write_completed_queue_head, %object ++ .size sblk_write_completed_queue_head, 1 ++sblk_write_completed_queue_head: ++ .zero 1 ++ .zero 2 ++ .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 ++ .type free_slc_sblk, %object ++ .size free_slc_sblk, 2 ++free_slc_sblk: ++ .zero 2 ++ .type free_xlc_sblk, %object ++ .size free_xlc_sblk, 2 ++free_xlc_sblk: ++ .zero 2 ++ .type free_mix_sblk, %object ++ .size free_mix_sblk, 2 ++free_mix_sblk: ++ .zero 2 ++ .type slc_data_sblk, %object ++ .size slc_data_sblk, 2 ++slc_data_sblk: ++ .zero 2 ++ .type slc_cache_sblk, %object ++ .size slc_cache_sblk, 2 ++slc_cache_sblk: ++ .zero 2 ++ .type xlc_data_sblk, %object ++ .size xlc_data_sblk, 2 ++xlc_data_sblk: ++ .zero 2 ++ .type write_commit_count, %object ++ .size write_commit_count, 1 ++write_commit_count: ++ .zero 1 ++ .type write_buf_count, %object ++ .size write_buf_count, 1 ++write_buf_count: ++ .zero 1 ++ .zero 2 ++ .type gp_ftl_info, %object ++ .size gp_ftl_info, 8 ++gp_ftl_info: ++ .zero 8 ++ .type gc_free_slc_sblk_th, %object ++ .size gc_free_slc_sblk_th, 2 ++gc_free_slc_sblk_th: ++ .zero 2 ++ .zero 2 ++ .type _gc_after_discard_en, %object ++ .size _gc_after_discard_en, 4 ++_gc_after_discard_en: ++ .zero 4 ++ .type gc_slc_mode_tlc_vpn_th, %object ++ .size gc_slc_mode_tlc_vpn_th, 2 ++gc_slc_mode_tlc_vpn_th: ++ .zero 2 ++ .type gc_slc_mode_vpn_th, %object ++ .size gc_slc_mode_vpn_th, 2 ++gc_slc_mode_vpn_th: ++ .zero 2 ++ .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 write_buf_head, %object ++ .size write_buf_head, 1 ++write_buf_head: ++ .zero 1 ++ .zero 7 ++ .type g_gc_info, %object ++ .size g_gc_info, 2216 ++g_gc_info: ++ .zero 2216 ++ .type ftl_sblk_vpn_update_id, %object ++ .size ftl_sblk_vpn_update_id, 2 ++ftl_sblk_vpn_update_id: ++ .zero 2 ++ .zero 6 ++ .type ftl_sblk_update_list, %object ++ .size ftl_sblk_update_list, 16 ++ftl_sblk_update_list: ++ .zero 16 ++ .type _c_ftl_block_addr_log2, %object ++ .size _c_ftl_block_addr_log2, 2 ++_c_ftl_block_addr_log2: ++ .zero 2 ++ .type _c_ftl_planes_per_die, %object ++ .size _c_ftl_planes_per_die, 1 ++_c_ftl_planes_per_die: ++ .zero 1 ++ .zero 5 ++ .type gc_valid_page_ppa, %object ++ .size gc_valid_page_ppa, 8 ++gc_valid_page_ppa: ++ .zero 8 ++ .type _c_ftl_nand_type, %object ++ .size _c_ftl_nand_type, 1 ++_c_ftl_nand_type: ++ .zero 1 ++ .type _c_ftl_nand_planes_num, %object ++ .size _c_ftl_nand_planes_num, 1 ++_c_ftl_nand_planes_num: ++ .zero 1 ++ .type g_flash_3d_mlc_flag, %object ++ .size g_flash_3d_mlc_flag, 1 ++g_flash_3d_mlc_flag: ++ .zero 1 ++ .type g_one_pass_program, %object ++ .size g_one_pass_program, 1 ++g_one_pass_program: ++ .zero 1 ++ .zero 4 ++ .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 ++ .zero 4 ++ .type gp_data_slc_data_head, %object ++ .size gp_data_slc_data_head, 8 ++gp_data_slc_data_head: ++ .zero 8 ++ .type gc_slc_data_index, %object ++ .size gc_slc_data_index, 2 ++gc_slc_data_index: ++ .zero 2 ++ .type gc_slc_cache_index, %object ++ .size gc_slc_cache_index, 2 ++gc_slc_cache_index: ++ .zero 2 ++ .type gc_xlc_data_index, %object ++ .size gc_xlc_data_index, 2 ++gc_xlc_data_index: ++ .zero 2 ++ .zero 2 ++ .type gp_data_slc_cache_head, %object ++ .size gp_data_slc_cache_head, 8 ++gp_data_slc_cache_head: ++ .zero 8 ++ .type gp_data_xlc_data_head, %object ++ .size gp_data_xlc_data_head, 8 ++gp_data_xlc_data_head: ++ .zero 8 ++ .type _c_ftl_page_pre_slc_blk, %object ++ .size _c_ftl_page_pre_slc_blk, 2 ++_c_ftl_page_pre_slc_blk: ++ .zero 2 ++ .type gc_xlc_search_index, %object ++ .size gc_xlc_search_index, 2 ++gc_xlc_search_index: ++ .zero 2 ++ .type _min_slc_super_block, %object ++ .size _min_slc_super_block, 2 ++_min_slc_super_block: ++ .zero 2 ++ .type _max_xlc_super_block, %object ++ .size _max_xlc_super_block, 2 ++_max_xlc_super_block: ++ .zero 2 ++ .type gp_free_slc_head, %object ++ .size gp_free_slc_head, 8 ++gp_free_slc_head: ++ .zero 8 ++ .type gp_free_xlc_head, %object ++ .size gp_free_xlc_head, 8 ++gp_free_xlc_head: ++ .zero 8 ++ .type gp_free_mix_head, %object ++ .size gp_free_mix_head, 8 ++gp_free_mix_head: ++ .zero 8 ++ .type zftl_print_list_count, %object ++ .size zftl_print_list_count, 2 ++zftl_print_list_count: ++ .zero 2 ++ .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 3 ++ .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 _c_ftl_sec_per_page, %object ++ .size _c_ftl_sec_per_page, 1 ++_c_ftl_sec_per_page: ++ .zero 1 ++ .zero 1 ++ .type ftl_sblk_update_list_offset, %object ++ .size ftl_sblk_update_list_offset, 2 ++ftl_sblk_update_list_offset: ++ .zero 2 ++ .type g_flash_micron_3d_tlc_b05a, %object ++ .size g_flash_micron_3d_tlc_b05a, 1 ++g_flash_micron_3d_tlc_b05a: ++ .zero 1 ++ .zero 1 ++ .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 _c_mix_max_slc_ec_count, %object ++ .size _c_mix_max_slc_ec_count, 2 ++_c_mix_max_slc_ec_count: ++ .zero 2 ++ .type read_buf_head, %object ++ .size read_buf_head, 1 ++read_buf_head: ++ .zero 1 ++ .type read_buf_count, %object ++ .size read_buf_count, 1 ++read_buf_count: ++ .zero 1 ++ .zero 2 ++ .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, 2048 ++g_msb_page_tbl: ++ .zero 2048 ++ .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 ++ .zero 2 ++ .type pm_force_gc, %object ++ .size pm_force_gc, 4 ++pm_force_gc: ++ .zero 4 ++ .type _c_swl_slc_gc_th, %object ++ .size _c_swl_slc_gc_th, 2 ++_c_swl_slc_gc_th: ++ .zero 2 ++ .type _c_swl_xlc_gc_th, %object ++ .size _c_swl_xlc_gc_th, 2 ++_c_swl_xlc_gc_th: ++ .zero 2 ++ .type _c_max_pm_sblk, %object ++ .size _c_max_pm_sblk, 2 ++_c_max_pm_sblk: ++ .zero 2 ++ .zero 2 ++ .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 ftl_dma32_buffer_size, %object ++ .size ftl_dma32_buffer_size, 4 ++ftl_dma32_buffer_size: ++ .zero 4 ++ .zero 4 ++ .type ftl_dma32_buffer, %object ++ .size ftl_dma32_buffer, 8 ++ftl_dma32_buffer: ++ .zero 8 ++ .type gc_state, %object ++ .size gc_state, 1 ++gc_state: ++ .zero 1 ++ .zero 3 ++ .type gc_search_count, %object ++ .size gc_search_count, 4 ++gc_search_count: ++ .zero 4 ++ .type gc_slc_mode_slc_vpn_th, %object ++ .size gc_slc_mode_slc_vpn_th, 2 ++gc_slc_mode_slc_vpn_th: ++ .zero 2 ++ .zero 6 ++ .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 g_flash_tmp_page_buffer, %object ++ .size g_flash_tmp_page_buffer, 8 ++g_flash_tmp_page_buffer: ++ .zero 8 ++ .type g_nandc_tran_timeout, %object ++ .size g_nandc_tran_timeout, 1 ++g_nandc_tran_timeout: ++ .zero 1 ++ .zero 7 ++ .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 3 ++ .type flash_ddr_tuning_sdr_read_count, %object ++ .size flash_ddr_tuning_sdr_read_count, 4 ++flash_ddr_tuning_sdr_read_count: ++ .zero 4 ++ .type flash_read_retry, %object ++ .size flash_read_retry, 8 ++flash_read_retry: ++ .zero 8 ++ .type g_flash_spare_buffer, %object ++ .size g_flash_spare_buffer, 8 ++g_flash_spare_buffer: ++ .zero 8 ++ .type g_flash_page_buffer, %object ++ .size g_flash_page_buffer, 8 ++g_flash_page_buffer: ++ .zero 8 ++ .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_multi_page_read_en, %object ++ .size g_flash_multi_page_read_en, 1 ++g_flash_multi_page_read_en: ++ .zero 1 ++ .zero 7 ++ .type ftl_info_spare, %object ++ .size ftl_info_spare, 8 ++ftl_info_spare: ++ .zero 8 ++ .type g_ftl_info_blk, %object ++ .size g_ftl_info_blk, 4 ++g_ftl_info_blk: ++ .zero 4 ++ .zero 4 ++ .type ftl_info_data_buffer, %object ++ .size ftl_info_data_buffer, 8 ++ftl_info_data_buffer: ++ .zero 8 ++ .type ftl_sys_info_first_write, %object ++ .size ftl_sys_info_first_write, 1 ++ftl_sys_info_first_write: ++ .zero 1 ++ .type ftl_power_lost_flag, %object ++ .size ftl_power_lost_flag, 1 ++ftl_power_lost_flag: ++ .zero 1 ++ .type ftl_ext_info_first_write, %object ++ .size ftl_ext_info_first_write, 1 ++ftl_ext_info_first_write: ++ .zero 1 ++ .zero 5 ++ .type ftl_ext_info_data_buffer, %object ++ .size ftl_ext_info_data_buffer, 8 ++ftl_ext_info_data_buffer: ++ .zero 8 ++ .type ftl_tmp_spare, %object ++ .size ftl_tmp_spare, 8 ++ftl_tmp_spare: ++ .zero 8 ++ .type pm_gc_enable, %object ++ .size pm_gc_enable, 4 ++pm_gc_enable: ++ .zero 4 ++ .zero 4 ++ .type g_pm_spare, %object ++ .size g_pm_spare, 8 ++g_pm_spare: ++ .zero 8 ++ .type pm_first_write, %object ++ .size pm_first_write, 1 ++pm_first_write: ++ .zero 1 ++ .zero 7 ++ .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 ++ .type g_flash_reversd_blks, %object ++ .size g_flash_reversd_blks, 1 ++g_flash_reversd_blks: ++ .zero 1 ++ .type g_flash_micron_3d_tlc_b16a, %object ++ .size g_flash_micron_3d_tlc_b16a, 1 ++g_flash_micron_3d_tlc_b16a: ++ .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 ++ .type _ftl_gc_tag_page_num, %object ++ .size _ftl_gc_tag_page_num, 1 ++_ftl_gc_tag_page_num: ++ .zero 1 ++ .zero 2 ++ .type _last_read_time, %object ++ .size _last_read_time, 4 ++_last_read_time: ++ .zero 4 ++ .type _last_write_time, %object ++ .size _last_write_time, 4 ++_last_write_time: ++ .zero 4 ++ .type read_ahead_lpa, %object ++ .size read_ahead_lpa, 4 ++read_ahead_lpa: ++ .zero 4 ++ .type _c_totle_data_density, %object ++ .size _c_totle_data_density, 4 ++_c_totle_data_density: ++ .zero 4 ++ .type _c_ftl_pm_page_num, %object ++ .size _c_ftl_pm_page_num, 2 ++_c_ftl_pm_page_num: ++ .zero 2 ++ .zero 2 ++ .type ftl_tmp_buffer, %object ++ .size ftl_tmp_buffer, 8 ++ftl_tmp_buffer: ++ .zero 8 ++ .type rk_zftl_enable, %object ++ .size rk_zftl_enable, 1 ++rk_zftl_enable: ++ .zero 1 ++ .zero 7 ++ .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 ++ .type idb_write_enable, %object ++ .size idb_write_enable, 1 ++idb_write_enable: ++ .zero 1 ++ .zero 3 ++ .type idb_buf, %object ++ .size idb_buf, 8 ++idb_buf: ++ .zero 8 ++ .type idb_last_lba, %object ++ .size idb_last_lba, 4 ++idb_last_lba: ++ .zero 4 ++ .zero 4 ++ .type g_idb_buffer, %object ++ .size g_idb_buffer, 8 ++g_idb_buffer: ++ .zero 8 ++ .type g_vendor, %object ++ .size g_vendor, 8 ++g_vendor: ++ .zero 8 ++ .type SecureBootUnlockTryCount, %object ++ .size SecureBootUnlockTryCount, 4 ++SecureBootUnlockTryCount: ++ .zero 4 ++ .type SecureBootCheckOK, %object ++ .size SecureBootCheckOK, 4 ++SecureBootCheckOK: ++ .zero 4 ++ .type SecureBootEn, %object ++ .size SecureBootEn, 4 ++SecureBootEn: ++ .zero 4 ++ .zero 4 ++ .type gpVendor1Info, %object ++ .size gpVendor1Info, 8 ++gpVendor1Info: ++ .zero 8 ++ .type gpVendor0Info, %object ++ .size gpVendor0Info, 8 ++gpVendor0Info: ++ .zero 8 ++ .type gSnSectorData, %object ++ .size gSnSectorData, 512 ++gSnSectorData: ++ .zero 512 ++ .type gpDrmKeyInfo, %object ++ .size gpDrmKeyInfo, 8 ++gpDrmKeyInfo: ++ .zero 8 ++ .type gpBootConfig, %object ++ .size gpBootConfig, 8 ++gpBootConfig: ++ .zero 8 ++ .type ftl_low_format_cur_blk, %object ++ .size ftl_low_format_cur_blk, 2 ++ftl_low_format_cur_blk: ++ .zero 2 ++ .zero 6 ++ .type p_read_ahead_ext_buf, %object ++ .size p_read_ahead_ext_buf, 8 ++p_read_ahead_ext_buf: ++ .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 ++ .zero 6 ++ .type nandc_ecc_sts, %object ++ .size nandc_ecc_sts, 16 ++nandc_ecc_sts: ++ .zero 16 ++ .type g_slc_mode_enable, %object ++ .size g_slc_mode_enable, 1 ++g_slc_mode_enable: ++ .zero 1 ++ .section .rodata ++ .align 3 ++ .set .LANCHOR1,. + 0 ++ .type __func__.46344, %object ++ .size __func__.46344, 18 ++__func__.46344: ++ .string "_list_remove_node" ++ .zero 6 ++ .type __func__.46369, %object ++ .size __func__.46369, 23 ++__func__.46369: ++ .string "_list_update_data_list" ++ .zero 1 ++ .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_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_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__.26714, %object ++ .size __func__.26714, 22 ++__func__.26714: ++ .string "nand_flash_print_info" ++ .zero 2 ++ .type __func__.26187, %object ++ .size __func__.26187, 28 ++__func__.26187: ++ .string "flash_wait_device_ready_raw" ++ .zero 4 ++ .type __func__.26251, %object ++ .size __func__.26251, 22 ++__func__.26251: ++ .string "flash_start_page_read" ++ .zero 2 ++ .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 ymtc_3D_tlc_value, %object ++ .size ymtc_3D_tlc_value, 357 ++ymtc_3D_tlc_value: ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -10 ++ .byte -10 ++ .byte -6 ++ .byte -6 ++ .byte -2 ++ .byte 2 ++ .byte 2 ++ .byte -6 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -4 ++ .byte -6 ++ .byte -8 ++ .byte 6 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -2 ++ .byte -2 ++ .byte -2 ++ .byte -4 ++ .byte -4 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -11 ++ .byte -2 ++ .byte 2 ++ .byte 4 ++ .byte 4 ++ .byte 6 ++ .byte 6 ++ .byte 6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -6 ++ .byte -8 ++ .byte -14 ++ .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 -18 ++ .byte -18 ++ .byte -14 ++ .byte -14 ++ .byte -10 ++ .byte -5 ++ .byte -5 ++ .byte -14 ++ .byte -14 ++ .byte -12 ++ .byte -12 ++ .byte -12 ++ .byte -13 ++ .byte -15 ++ .byte -2 ++ .byte -8 ++ .byte -8 ++ .byte -8 ++ .byte -8 ++ .byte -7 ++ .byte -7 ++ .byte -10 ++ .byte -10 ++ .byte -10 ++ .byte -12 ++ .byte -12 ++ .byte -13 ++ .byte -13 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -13 ++ .byte -18 ++ .byte -10 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -2 ++ .byte -1 ++ .byte -1 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -14 ++ .byte -15 ++ .byte -21 ++ .byte -12 ++ .byte -11 ++ .byte -7 ++ .byte -7 ++ .byte -3 ++ .byte 1 ++ .byte 1 ++ .byte -8 ++ .byte -7 ++ .byte -5 ++ .byte -5 ++ .byte -5 ++ .byte -7 ++ .byte -9 ++ .byte 4 ++ .byte -1 ++ .byte -1 ++ .byte -1 ++ .byte -1 ++ .byte -1 ++ .byte -1 ++ .byte -4 ++ .byte -3 ++ .byte -3 ++ .byte -5 ++ .byte -5 ++ .byte -7 ++ .byte -7 ++ .byte -8 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -12 ++ .byte -4 ++ .byte 1 ++ .byte 3 ++ .byte 3 ++ .byte 5 ++ .byte 5 ++ .byte 5 ++ .byte -8 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -7 ++ .byte -9 ++ .byte -15 ++ .byte 2 ++ .byte -7 ++ .byte -11 ++ .byte -14 ++ .byte -8 ++ .byte -12 ++ .byte -10 ++ .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 -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 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 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 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 3 ++ .type ymtc_3D_slc_value, %object ++ .size ymtc_3D_slc_value, 10 ++ymtc_3D_slc_value: ++ .byte 0 ++ .byte -8 ++ .byte 8 ++ .byte -16 ++ .byte -20 ++ .byte 24 ++ .byte -26 ++ .byte 40 ++ .byte -12 ++ .byte 56 ++ .zero 6 ++ .type __func__.26276, %object ++ .size __func__.26276, 23 ++__func__.26276: ++ .string "flash_start_plane_read" ++ .zero 1 ++ .type __func__.26162, %object ++ .size __func__.26162, 26 ++__func__.26162: ++ .string "flash_erase_duplane_block" ++ .zero 6 ++ .type __func__.26173, %object ++ .size __func__.26173, 21 ++__func__.26173: ++ .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__.26979, %object ++ .size __func__.26979, 13 ++__func__.26979: ++ .string "buf_add_tail" ++ .zero 3 ++ .type __func__.26992, %object ++ .size __func__.26992, 10 ++__func__.26992: ++ .string "buf_alloc" ++ .zero 6 ++ .type __func__.27006, %object ++ .size __func__.27006, 16 ++__func__.27006: ++ .string "buf_remove_free" ++ .type zftl_debug_proc_fops, %object ++ .size zftl_debug_proc_fops, 96 ++zftl_debug_proc_fops: ++ .zero 8 ++ .xword zftl_debug_proc_open ++ .xword seq_read ++ .zero 8 ++ .xword zftl_debug_proc_write ++ .xword seq_lseek ++ .xword single_release ++ .zero 40 ++ .type __func__.45877, %object ++ .size __func__.45877, 12 ++__func__.45877: ++ .string "gc_add_sblk" ++ .zero 4 ++ .type __func__.45969, %object ++ .size __func__.45969, 19 ++__func__.45969: ++ .string "gc_write_completed" ++ .zero 5 ++ .type __func__.46575, %object ++ .size __func__.46575, 18 ++__func__.46575: ++ .string "ftl_alloc_sys_blk" ++ .zero 6 ++ .type __func__.46585, %object ++ .size __func__.46585, 17 ++__func__.46585: ++ .string "ftl_free_sys_blk" ++ .zero 7 ++ .type __func__.46706, %object ++ .size __func__.46706, 23 ++__func__.46706: ++ .string "ftl_get_ppa_from_index" ++ .zero 1 ++ .type __func__.46746, %object ++ .size __func__.46746, 22 ++__func__.46746: ++ .string "ftl_get_new_free_page" ++ .zero 2 ++ .type __func__.46757, %object ++ .size __func__.46757, 22 ++__func__.46757: ++ .string "ftl_ext_alloc_new_blk" ++ .zero 2 ++ .type __func__.46026, %object ++ .size __func__.46026, 16 ++__func__.46026: ++ .string "gc_free_src_blk" ++ .type __func__.45620, %object ++ .size __func__.45620, 14 ++__func__.45620: ++ .string "ftl_write_buf" ++ .zero 2 ++ .type __func__.45665, %object ++ .size __func__.45665, 18 ++__func__.45665: ++ .string "zftl_add_read_buf" ++ .align 3 ++ .set .LANCHOR4,. + 0 ++ .type __func__.47179, %object ++ .size __func__.47179, 21 ++__func__.47179: ++ .string "pm_select_ram_region" ++ .zero 3 ++ .type __func__.26704, %object ++ .size __func__.26704, 20 ++__func__.26704: ++ .string "flash_die_info_init" ++ .zero 4 ++ .type __func__.45552, %object ++ .size __func__.45552, 17 ++__func__.45552: ++ .string "lpa_rebuild_hash" ++ .zero 7 ++ .type __func__.46444, %object ++ .size __func__.46444, 20 ++__func__.46444: ++ .string "zftl_sblk_list_init" ++ .zero 4 ++ .type __func__.47111, %object ++ .size __func__.47111, 13 ++__func__.47111: ++ .string "pm_free_sblk" ++ .zero 3 ++ .type __func__.27042, %object ++ .size __func__.27042, 21 ++__func__.27042: ++ .string "flash_info_data_init" ++ .zero 3 ++ .type __func__.26800, %object ++ .size __func__.26800, 11 ++__func__.26800: ++ .string "nandc_init" ++ .zero 5 ++ .type samsung_14nm_slc_rr, %object ++ .size samsung_14nm_slc_rr, 26 ++samsung_14nm_slc_rr: ++ .byte 0 ++ .byte 10 ++ .byte -10 ++ .byte 20 ++ .byte -20 ++ .byte 30 ++ .byte -30 ++ .byte 40 ++ .byte -40 ++ .byte 50 ++ .byte -50 ++ .byte 60 ++ .byte -60 ++ .byte -70 ++ .byte -80 ++ .byte -90 ++ .byte -100 ++ .byte -110 ++ .byte -120 ++ .byte -9 ++ .byte 70 ++ .byte 80 ++ .byte 90 ++ .byte -125 ++ .byte -115 ++ .byte 100 ++ .zero 6 ++ .type samsung_14nm_mlc_rr, %object ++ .size samsung_14nm_mlc_rr, 104 ++samsung_14nm_mlc_rr: ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .byte -4 ++ .byte 3 ++ .byte -4 ++ .byte -6 ++ .byte 6 ++ .byte 0 ++ .byte 6 ++ .byte -10 ++ .byte -10 ++ .byte 4 ++ .byte -10 ++ .byte 16 ++ .byte 12 ++ .byte -4 ++ .byte 12 ++ .byte 8 ++ .byte -16 ++ .byte 10 ++ .byte -16 ++ .byte 24 ++ .byte 18 ++ .byte -14 ++ .byte 18 ++ .byte -4 ++ .byte -22 ++ .byte -16 ++ .byte -22 ++ .byte -8 ++ .byte 24 ++ .byte -9 ++ .byte 24 ++ .byte 8 ++ .byte -28 ++ .byte -4 ++ .byte -28 ++ .byte 16 ++ .byte 30 ++ .byte 10 ++ .byte 30 ++ .byte 10 ++ .byte -34 ++ .byte 6 ++ .byte -34 ++ .byte 0 ++ .byte 36 ++ .byte -8 ++ .byte 36 ++ .byte -8 ++ .byte -40 ++ .byte -2 ++ .byte -40 ++ .byte -20 ++ .byte -46 ++ .byte -4 ++ .byte -46 ++ .byte -30 ++ .byte 3 ++ .byte 0 ++ .byte 3 ++ .byte -3 ++ .byte -2 ++ .byte -4 ++ .byte -2 ++ .byte -6 ++ .byte -4 ++ .byte -4 ++ .byte -4 ++ .byte -10 ++ .byte -6 ++ .byte -8 ++ .byte -6 ++ .byte -14 ++ .byte -9 ++ .byte -8 ++ .byte -9 ++ .byte -18 ++ .byte -52 ++ .byte 22 ++ .byte -52 ++ .byte 10 ++ .byte 42 ++ .byte 4 ++ .byte 42 ++ .byte 4 ++ .byte 48 ++ .byte -9 ++ .byte 48 ++ .byte 4 ++ .byte -58 ++ .byte 12 ++ .byte -58 ++ .byte 0 ++ .byte -64 ++ .byte -24 ++ .byte -64 ++ .byte -6 ++ .byte 9 ++ .byte 18 ++ .byte 9 ++ .byte 8 ++ .type __func__.26085, %object ++ .size __func__.26085, 19 ++__func__.26085: ++ .string "flash_read_page_en" ++ .zero 5 ++ .type __func__.26211, %object ++ .size __func__.26211, 26 ++__func__.26211: ++ .string "flash_start_tlc_page_prog" ++ .zero 6 ++ .type __func__.26222, %object ++ .size __func__.26222, 29 ++__func__.26222: ++ .string "flash_start_3d_mlc_page_prog" ++ .zero 3 ++ .type __func__.26240, %object ++ .size __func__.26240, 22 ++__func__.26240: ++ .string "flash_start_page_prog" ++ .zero 2 ++ .type __func__.26264, %object ++ .size __func__.26264, 31 ++__func__.26264: ++ .string "flash_complete_plane_page_read" ++ .zero 1 ++ .type __func__.26289, %object ++ .size __func__.26289, 25 ++__func__.26289: ++ .string "flash_complete_page_read" ++ .zero 7 ++ .type __func__.46944, %object ++ .size __func__.46944, 31 ++__func__.46944: ++ .string "queue_wait_first_req_completed" ++ .zero 1 ++ .type __func__.46998, %object ++ .size __func__.46998, 15 ++__func__.46998: ++ .string "sblk_prog_page" ++ .zero 1 ++ .type __func__.47025, %object ++ .size __func__.47025, 15 ++__func__.47025: ++ .string "sblk_read_page" ++ .zero 1 ++ .type __func__.45924, %object ++ .size __func__.45924, 21 ++__func__.45924: ++ .string "gc_check_data_one_wl" ++ .zero 3 ++ .type __func__.26146, %object ++ .size __func__.26146, 19 ++__func__.26146: ++ .string "flash_prog_page_en" ++ .zero 5 ++ .type __func__.46821, %object ++ .size __func__.46821, 14 ++__func__.46821: ++ .string "ftl_prog_page" ++ .zero 2 ++ .type __func__.46478, %object ++ .size __func__.46478, 15 ++__func__.46478: ++ .string "ftl_info_flush" ++ .zero 1 ++ .type __func__.46783, %object ++ .size __func__.46783, 19 ++__func__.46783: ++ .string "ftl_ext_info_flush" ++ .zero 5 ++ .type __func__.46795, %object ++ .size __func__.46795, 18 ++__func__.46795: ++ .string "ftl_ext_info_init" ++ .zero 6 ++ .type __func__.46533, %object ++ .size __func__.46533, 15 ++__func__.46533: ++ .string "ftl_alloc_sblk" ++ .zero 1 ++ .type __func__.47151, %object ++ .size __func__.47151, 17 ++__func__.47151: ++ .string "pm_alloc_new_blk" ++ .zero 7 ++ .type __func__.47161, %object ++ .size __func__.47161, 14 ++__func__.47161: ++ .string "pm_write_page" ++ .zero 2 ++ .type __func__.27064, %object ++ .size __func__.27064, 17 ++__func__.27064: ++ .string "flash_info_flush" ++ .zero 7 ++ .type __func__.27027, %object ++ .size __func__.27027, 20 ++__func__.27027: ++ .string "flash_info_blk_init" ++ .zero 4 ++ .type __func__.26759, %object ++ .size __func__.26759, 16 ++__func__.26759: ++ .string "nand_flash_init" ++ .type __func__.46648, %object ++ .size __func__.46648, 16 ++__func__.46648: ++ .string "ftl_sysblk_dump" ++ .type __func__.46673, %object ++ .size __func__.46673, 23 ++__func__.46673: ++ .string "ftl_open_sblk_recovery" ++ .zero 1 ++ .type __func__.47095, %object ++ .size __func__.47095, 16 ++__func__.47095: ++ .string "load_l2p_region" ++ .type __func__.47135, %object ++ .size __func__.47135, 6 ++__func__.47135: ++ .string "pm_gc" ++ .zero 2 ++ .type __func__.45867, %object ++ .size __func__.45867, 12 ++__func__.45867: ++ .string "gc_recovery" ++ .zero 4 ++ .type __func__.45956, %object ++ .size __func__.45956, 22 ++__func__.45956: ++ .string "gc_update_l2p_map_new" ++ .zero 2 ++ .type __func__.46070, %object ++ .size __func__.46070, 16 ++__func__.46070: ++ .string "gc_scan_src_blk" ++ .type __func__.46131, %object ++ .size __func__.46131, 20 ++__func__.46131: ++ .string "gc_scan_static_data" ++ .zero 4 ++ .type __func__.46194, %object ++ .size __func__.46194, 18 ++__func__.46194: ++ .string "gc_block_vpn_scan" ++ .zero 6 ++ .type __func__.46624, %object ++ .size __func__.46624, 14 ++__func__.46624: ++ .string "ftl_sblk_dump" ++ .zero 2 ++ .type __func__.45698, %object ++ .size __func__.45698, 10 ++__func__.45698: ++ .string "zftl_read" ++ .zero 6 ++ .type __func__.46727, %object ++ .size __func__.46727, 19 ++__func__.46727: ++ .string "ftl_update_l2p_map" ++ .zero 5 ++ .type __func__.45602, %object ++ .size __func__.45602, 17 ++__func__.45602: ++ .string "ftl_write_commit" ++ .zero 7 ++ .type __func__.45999, %object ++ .size __func__.45999, 16 ++__func__.45999: ++ .string "gc_do_copy_back" ++ .type __func__.46249, %object ++ .size __func__.46249, 11 ++__func__.46249: ++ .string "zftl_do_gc" ++ .zero 5 ++ .type __func__.45730, %object ++ .size __func__.45730, 13 ++__func__.45730: ++ .string "_ftl_discard" ++ .section .rodata.str1.1,"aMS",@progbits,1 ++.LC0: ++ .string "\n!!!!! error @ func:%s - line:%d\n" ++.LC1: ++ .string "FTL version: 6.0.24 20210716" ++.LC2: ++ .string "%s\n" ++.LC3: ++ .string "zftl_debug:0x%x\n" ++.LC4: ++ .string "...%s enter...\n" ++.LC5: ++ .string "No.0 FLASH ID: %x %x %x %x %x %x\n" ++.LC6: ++ .string "DiePerChip: %x\n" ++.LC7: ++ .string "SectPerPage: %x\n" ++.LC8: ++ .string "PagePerBlk: %x\n" ++.LC9: ++ .string "Cell: %x\n" ++.LC10: ++ .string "PlanePerDie: %x\n" ++.LC11: ++ .string "BlkPerPlane: %x\n" ++.LC12: ++ .string "die gap: %x\n" ++.LC13: ++ .string "lsbMode: %x\n" ++.LC14: ++ .string "ReadRetryMode: %x\n" ++.LC15: ++ .string "ecc: %x\n" ++.LC16: ++ .string "idb ecc: %x\n" ++.LC17: ++ .string "OptMode: %x\n" ++.LC18: ++ .string "g_nand_max_die: %x\n" ++.LC19: ++ .string "Cache read enable: %x\n" ++.LC20: ++ .string "Cache random read enable: %x\n" ++.LC21: ++ .string "Cache prog enable: %x\n" ++.LC22: ++ .string "multi read enable: %x\n" ++.LC23: ++ .string "multi prog enable: %x\n" ++.LC24: ++ .string "interleave enable: %x\n" ++.LC25: ++ .string "read retry enable: %x\n" ++.LC26: ++ .string "randomizer enable: %x\n" ++.LC27: ++ .string "SDR enable: %x\n" ++.LC28: ++ .string "ONFI enable: %x\n" ++.LC29: ++ .string "TOGGLE enable: %x\n" ++.LC30: ++ .string "g_flash_slc_mode: %x %x\n" ++.LC31: ++ .string "MultiPlaneProgCmd: %x %x\n" ++.LC32: ++ .string "MultiPlaneReadCmd: %x %x\n" ++.LC33: ++ .string "g_flash_toggle_mode_en: %x\n" ++.LC34: ++ .string "nand sdr mode %x\n" ++.LC35: ++ .string "nand ddr mode %x\n" ++.LC36: ++ .string "No.%d FLASH ID:%x %x %x %x %x %x\n" ++.LC37: ++ .string "otp:%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 %x\n" ++.LC42: ++ .string "flash_erase_block %d block = %x status = %x\n" ++.LC43: ++ .string "erase done: %x\n" ++.LC44: ++ .string "sblk_queue_head = %d\n" ++.LC45: ++ .string "sblk_read_completed_queue_head = %d\n" ++.LC46: ++ .string "sblk_gc_write_completed_queue_head = %d\n" ++.LC47: ++ .string "sblk_write_completed_queue_head = %d\n" ++.LC48: ++ .string "p_free_buf_head = %d\n" ++.LC49: ++ .string "free_buf_count = %d\n" ++.LC50: ++ .string "buf = %d, next=%d, flag=%d gc_write_flag=%d, lun_state=%d, op_status = %d lpa=%x, ppa=%x\n" ++.LC51: ++ .string "flash_mask_bad_block %d %d\n" ++.LC52: ++ .string "zftl_debug" ++.LC53: ++ .string "FLASH ID: %x %x %x %x %x %x\n" ++.LC54: ++ .string "density: %d MB\n" ++.LC55: ++ .string "device density: %d MB\n" ++.LC56: ++ .string "FTL INFO:\n" ++.LC57: ++ .string "max_lpn = 0x%x\n" ++.LC58: ++ .string "density = 0x%x\n" ++.LC59: ++ .string "slc vpn = 0x%x\n" ++.LC60: ++ .string "xlc vpn = 0x%x\n" ++.LC61: ++ .string "free slc blk = 0x%x\n" ++.LC62: ++ .string "free xlc blk = 0x%x\n" ++.LC63: ++ .string "free mix blk = 0x%x\n" ++.LC64: ++ .string "slc data blk = 0x%x\n" ++.LC65: ++ .string "slc cache blk = 0x%x\n" ++.LC66: ++ .string "xlc data blk = 0x%x\n" ++.LC67: ++ .string "free buf = %d, %d, %d\n" ++.LC68: ++ .string "bad blk = %d %d\n" ++.LC69: ++ .string "TBW = %d MB\n" ++.LC70: ++ .string "TBR = %d MB\n" ++.LC71: ++ .string "POC = %d\n" ++.LC72: ++ .string "PLC = %d\n" ++.LC73: ++ .string "sys run time = %d S\n" ++.LC74: ++ .string "slc mode = %x %x %x\n" ++.LC75: ++ .string "prog err = %d\n" ++.LC76: ++ .string "read err = %d\n" ++.LC77: ++ .string "GC XLC page = %d\n" ++.LC78: ++ .string "GC SLC page = %d\n" ++.LC79: ++ .string "discard page = 0x%x\n" ++.LC80: ++ .string "version = %d\n" ++.LC81: ++ .string "acblk = 0x%x %d %d\n" ++.LC82: ++ .string "tmblk = 0x%x %d %d\n" ++.LC83: ++ .string "gcblk = 0x%x %d %d\n" ++.LC84: ++ .string "slc ec = %d, %d, %d, %d, %d\n" ++.LC85: ++ .string "xlc ec = %d, %d, %d, %d, %d\n" ++.LC86: ++ .string "gc free blk th = %d\n" ++.LC87: ++ .string "gc vpn th = %d %d %d %d %d\n" ++.LC88: ++ .string "swl blk = %x %x %x %x\n" ++.LC89: ++ .string "rf info = %x %x %x %x %x\n" ++.LC90: ++ .string "gc_add_sblk = %d, %d, %d, %d, %d, %d, %d\n" ++.LC91: ++ .string "gc_add_sblk = %d, %d, %d\n" ++.LC92: ++ .string "gc_add_sblk = %d, %d, %d,last update:%d, %d\n" ++.LC93: ++ .string "gc_add_sblk = %d, %d, %d, %d, %d, %d\n" ++.LC94: ++ .string "gc_mark_bad_ppa %d %x %x\n" ++.LC95: ++ .string "status: %x, ppa: %x\n" ++.LC96: ++ .string "%d gc_free_temp_buf buf id= %x\n" ++.LC97: ++ .string "gc: b:%x,p:%x,i:%x; free buf=%d %d free slc th: %d\n" ++.LC98: ++ .string "zftl_get_gc_node cache = %x index = %d vpn = %x\n" ++.LC99: ++ .string "gc_search_src_blk mode = %x, src mode = %x, count= %d %d\n" ++.LC100: ++ .string "swl_tlc_free_mini_ec_blk alloc sblk %x\n" ++.LC101: ++ .string "zftl_get_free_sblk %x %d, %p %d %d\n" ++.LC102: ++ .string "zftl_gc_get_free_sblk %x %x %x, %d %d %d\n" ++.LC103: ++ .string "swl_slc_free_mini_ec_blk alloc sblk %x\n" ++.LC104: ++ .string "list count:%p %d\n" ++.LC105: ++ .string "%d: node:%x %x %x %x, %d %d %d %d %d\n" ++.LC106: ++ .string "ftl_vpn_decrement %x = %d, %d\n" ++.LC107: ++ .string "mask bad block:cs %x %x block: %x %x\n" ++.LC108: ++ .string "gc_free_bad_sblk 0x%x\n" ++.LC109: ++ .string "swl_slc_free_mini_ec_blk sblk %x\n" ++.LC110: ++ .string "gc_free_src_blk = %x, vpn = %d\n" ++.LC111: ++ .string "gc_free_src_blk %x, %d\n" ++.LC112: ++ .string "bad blk = %x, %x free blk: s:%x,t:%x,m:%x, data blk:s:%x,%x,t%x vpn: s:%x t:%x, max_vpn: %x\n" ++.LC113: ++ .string "totle w: %d MB,r: %d MB %d dv:0x%X,poc:%d\n" ++.LC114: ++ .string "gc xlc page: %d,gc slc page: %d, tmp w: %d MB\n" ++.LC115: ++ .string "slc ec: %d,%d,%d,%d,%d,tlc ec: %d,%d,%d,%d,%d\n" ++.LC116: ++ .string "gc th: tlc_tlc: %d tlc_slc: %d slc_slc: %d slc_tlc:%d free_th: %d\n" ++.LC117: ++ .string "swl : %x %x %x %x %x %x\n" ++.LC118: ++ .string "ftl prog error =%x, lpa = %x, ppa= %x\n" ++.LC119: ++ .string "ftl re prog: lpa = %x, ppa= %x\n" ++.LC120: ++ .string "dump_sblk_queue: %d\n" ++.LC121: ++ .string "buf id= %d state = %d ppa = %x\n" ++.LC122: ++ .string "%s %d %d\n" ++.LC123: ++ .string "gc_static_wearleveling: min blk: %x,sec=%d,xec = %d ,mode=%d, func=%x, bbt=%x vpn = %d\n" ++.LC124: ++ .string "gc_static_wearleveling: min slc blk: %x,sec=%d,xec = %d ,mode=%d, func=%x, bbt=%x vpn = %d\n" ++.LC125: ++ .string "gc_static_wearleveling: min tlc blk: %x,sec=%d,xec = %d ,mode=%d, func=%x, bbt=%x vpn = %d\n" ++.LC126: ++ .string "gc_static_wearleveling: max slc blk: %x,sec=%d,xec = %d ,mode=%d, func=%x, bbt=%x vpn = %d\n" ++.LC127: ++ .string "gc_static_wearleveling: max xlc blk: %x,sec=%d,xec = %d ,mode=%d, func=%x, bbt=%x vpn = %d\n" ++.LC128: ++ .string "gc_static_wearleveling: slc blk: %x, tlc blk: %d avg slc ec: %d, avg tlc ec: %d \n" ++.LC129: ++ .string "gc_static_wearleveling: min slc ec: %x, min tlc ec: %d max slc ec: %d, max tlc ec: %d; %d %d\n" ++.LC130: ++ .string "swl add tlc gc = %x, %d, %d, %d, %d, %d\n" ++.LC131: ++ .string "swl add slc gc = %x, %d, %d, %d, %d, %d\n" ++.LC132: ++ .string "free blk vpn error: %x %x\n" ++.LC133: ++ .string "GC PM block %x %x %x %d\n" ++.LC134: ++ .string "ftl_free_no_use_map_blk %x %x %x %d\n" ++.LC135: ++ .string "...%d @ %s\n" ++.LC136: ++ .string "...%s enter... %p\n" ++.LC137: ++ .string "0:%x %x %x %x %x\n" ++.LC138: ++ .string "g_nandc_ver...%d\n" ++.LC139: ++ .string "rk_ftl_de_init %x\n" ++.LC140: ++ .string "\0013" ++.LC141: ++ .string "otp error! %d" ++.LC142: ++ .string "rr" ++.LC143: ++ .string "flash_abort_clear = %d\n" ++.LC144: ++ .string "%d mtrans_cnt = %d page_num = %d\n" ++.LC145: ++ .string "%d flReg.d32=%x %x\n" ++.LC146: ++ .string "nandc:" ++.LC147: ++ .string "nandc_xfer_done read error %x\n" ++.LC148: ++ .string "dqs data abort %x\n" ++.LC149: ++ .string "dqs data timeout %x\n" ++.LC150: ++ .string "xfer error %x\n" ++.LC151: ++ .string "MT %d row=%x,last status %d,status = %d\n" ++.LC152: ++ .string "MT RR %d row=%x,count %d,status=%d\n" ++.LC153: ++ .string "toshiba SRR %d row=%x, status=%d\n" ++.LC154: ++ .string "toshiba TRR %d row=%x, status=%d\n" ++.LC155: ++ .string "toshiba RR %d row=%x,count %d,status=%d\n" ++.LC156: ++ .string "YMTC RR %d row=%x,count %d,status=%d\n" ++.LC157: ++ .string "samsung SRR %d row=%x, status=%d\n" ++.LC158: ++ .string "samsung TRR %d row=%x, status=%d\n" ++.LC159: ++ .string "samsung RR %d row=%x,count %d,status=%d\n" ++.LC160: ++ .string "hynix RR %d row=%x, count %d, status=%d\n" ++.LC161: ++ .string "%d flash_ddr_tuning_read %x ecc=%d\n" ++.LC162: ++ .string "sync para %d\n" ++.LC163: ++ .string "DDR mode Read error %x %x\n" ++.LC164: ++ .string "SDR mode Read %x %x ecc:%x\n" ++.LC165: ++ .string "flash_read_page_en %x %x %x %x\n" ++.LC166: ++ .string "flash_read_page_en %x %x error_ecc %d %d\n" ++.LC167: ++ .string "flash_get_last_written_page: %x %x %x\n" ++.LC168: ++ .string "flash_prog_page page_addr = %x status = %x\n" ++.LC169: ++ .string "flash_prog_page %x %x %x\n" ++.LC170: ++ .string "ymtc_flash_tlc_page_prog page_addr = %x status = %x\n" ++.LC171: ++ .string "sblk_mlc_dump_prog wl_addr= %x ppa = %x ppa = %x\n" ++.LC172: ++ .string "flash_complete_page_read %x %x error_ecc %d %d\n" ++.LC173: ++ .string "read: %x %x %x %x\n" ++.LC174: ++ .string "0set buf %d,status = %x, ppa = %x lun state = %d\n" ++.LC175: ++ .string "prog end %x %x error_ecc %d %d\n" ++.LC176: ++ .string "1set buf %d,status = %x, ppa = %x lun state = %d\n" ++.LC177: ++ .string "dp prog end %x %x error_ecc %d %d\n" ++.LC178: ++ .string "sblk_prog_page ppa = %x, count = %d\n" ++.LC179: ++ .string "err: ppa = %x, status = %x, %x %x spare: %x %x %x %x\n" ++.LC180: ++ .string "flash_prog_page_en:%x %x %x\n" ++.LC181: ++ .string "w d:" ++.LC182: ++ .string "w s:" ++.LC183: ++ .string "spare" ++.LC184: ++ .string "data" ++.LC185: ++ .string "write error: %x\n" ++.LC186: ++ .string "g_ftl_info_blk blk = %x, page = %x version = %d\n" ++.LC187: ++ .string "%d %x @%d %x\n" ++.LC188: ++ .string "ftl_info_blk_init %d %d %x\n" ++.LC189: ++ .string "ftl info hash %x error\n" ++.LC190: ++ .string "ink flag: %x\n" ++.LC191: ++ .string "%s %d %d %x %x\n" ++.LC192: ++ .string "ext info hash %x error\n" ++.LC193: ++ .string "%s %x %x %x\n" ++.LC194: ++ .string "ftl_sblk_dump_write = %x %d %d %d %d\n" ++.LC195: ++ .string "blk= %x, page=%x, ppa = %x, status = %x, data:%x %x %x %x, spare: %x %x %x %x\n" ++.LC196: ++ .string "ftl_sblk_dump_write2 = %x %d %d %d\n" ++.LC197: ++ .string "ftl_sblk_dump_write = %x %x\n" ++.LC198: ++ .string "ftl_sblk_dump_write done = %x\n" ++.LC199: ++ .string "%x: ink_scaned_blk_num %x\n" ++.LC200: ++ .string "ftl_ink_check_sblk = %x %d %d\n" ++.LC201: ++ .string "ftl_ink_check_sblk = %x %d %d end\n" ++.LC202: ++ .string "alloc sblk %x %d\n" ++.LC203: ++ .string "blk %x is bad block\n" ++.LC204: ++ .string "pm_alloc_new_blk: %x %x %x %x\n" ++.LC205: ++ .string "pm_write_page write error: %x\n" ++.LC206: ++ .string "finfo:" ++.LC207: ++ .string "flash_info_flush id = %x, page = %x\n" ++.LC208: ++ .string "sys_info_flush error:%x\n" ++.LC209: ++ .string "...%d @ %s %d %p\n" ++.LC210: ++ .string "no sys info %x\n" ++.LC211: ++ .string "l2p:" ++.LC212: ++ .string "saved_active_page = %x\n" ++.LC213: ++ .string "saved_active_plane = %x\n" ++.LC214: ++ .string "sblk = %x\n" ++.LC215: ++ .string "phy_blk = %x %x\n" ++.LC216: ++ .string "num_planes = %x\n" ++.LC217: ++ .string "recovery blk=%x, page=%x, ppa = %x, status = %x, hash:%x\n" ++.LC218: ++ .string "data:" ++.LC219: ++ .string "sblk = %x, vpn0 = %d, vpn1 = %d\n" ++.LC220: ++ .string "dump_write_lpa = %x %x %x %x\n" ++.LC221: ++ .string "dump write new ppa = %x, last ppa = %x lpa = %x\n" ++.LC222: ++ .string "dump write = %x %x %x\n" ++.LC223: ++ .string "dump write hash update = %x %x %x\n" ++.LC224: ++ .string "free_buf_count: %d\n" ++.LC225: ++ .string "g_ftl_info_blk blk:0x%x, index:0x%x, page:0x%x\n" ++.LC226: ++ .string "ftl_ext_info_blk blk:0x%x, page:0x%x\n" ++.LC227: ++ .string "ac_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page_index:0x%x\n" ++.LC228: ++ .string "tmp_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page_index:0x%x\n" ++.LC229: ++ .string "gc_blk:0x%x, page:0x%x, index:0x%x, free:0x%x, page_index:0x%x\n" ++.LC230: ++ .string "lpa:" ++.LC231: ++ .string "vpn:" ++.LC232: ++ .string "sblk:" ++.LC233: ++ .string "lpa_hash:" ++.LC234: ++ .string "lpa_hash_index:" ++.LC235: ++ .string "%s w error lpn = %x, max ppa = %d\n" ++.LC236: ++ .string "region_id = %d, pm_max_region = %d\n" ++.LC237: ++ .string "load_l2p_region no ppa = %x , %x, all setting 0xff....\n" ++.LC238: ++ .string "load_l2p_region = %x,%x,%x, %x\n" ++.LC239: ++ .string "pm_ppa:" ++.LC240: ++ .string "spare:" ++.LC241: ++ .string "pm_init posr %x %x %x\n" ++.LC242: ++ .string "pm_init recovery %x %x %x\n" ++.LC243: ++ .string "pm_init hash %x error\n" ++.LC244: ++ .string "pm_log2phys lpn = %d, max lpn = %d\n" ++.LC245: ++ .string "ppa = %x, status = %x, data:%x %x %x %x, spare: %x %x %x %x\n" ++.LC246: ++ .string "ppa = %x, status = %x, %x %x spare: %x %x %x %x\n" ++.LC247: ++ .string "gc_recovery: %x vpn = %x\n" ++.LC248: ++ .string "gc_update_l2p_map_new sblk %x\n" ++.LC249: ++ .string "gc_update_l2p_map_new: %x %x %x\n" ++.LC250: ++ .string "lpa: %x %x %x\n" ++.LC251: ++ .string "gc_update_l2p_map_new: %x vpn = %x vpn1 = %x done\n" ++.LC252: ++ .string "gc_scan_src_blk = %x, vpn = %d\n" ++.LC253: ++ .string "js hash error:%x %x %x\n" ++.LC254: ++ .string "gc_scan_src_blk = %x, s vpn0 = %d, c vpn1 = %d\n" ++.LC255: ++ .string "gc_block_vpn_scan = %x, s vpn0 = %d, c vpn1 = %d f:%d\n" ++.LC256: ++ .string "ftl_sblk_dump = %x %d %d %d %d\n" ++.LC257: ++ .string "ftl_sblk_dump = %x %x %x %x\n" ++.LC258: ++ .string "page_addr = %x, lpa=%x vpn = %d\n" ++.LC259: ++ .string "index= %x, lpa=%x\n" ++.LC260: ++ .string "block = %x, vpn=%x check vpn = %x\n" ++.LC261: ++ .string "ftl_read %x %x %x\n" ++.LC262: ++ .string "ftl_read refresh =%x, lpa = %x, ppa= %x\n" ++.LC263: ++ .string "id=%d, status = %x, lpa = %x, ppa = %x spare = %x %x %x %x\n" ++.LC264: ++ .string "zftl debug cmd: %s\n" ++.LC265: ++ .string "cmd:" ++.LC266: ++ .string "dumpl2p" ++.LC267: ++ .string "pm l2p:" ++.LC268: ++ .string "pm blk:" ++.LC269: ++ .string "dumppm:" ++.LC270: ++ .string "p_cmd: %s\n" ++.LC271: ++ .string "pm ram = %x, %x\n" ++.LC272: ++ .string "ram:" ++.LC273: ++ .string "pm:" ++.LC274: ++ .string "dumpsys" ++.LC275: ++ .string "dumplist:" ++.LC276: ++ .string "vpncheck" ++.LC277: ++ .string "dumpppa:" ++.LC278: ++ .string "dumpblk:" ++.LC279: ++ .string "setzdebug:" ++.LC280: ++ .string "lpa2ppa:" ++.LC281: ++ .string "lpa: %x--> ppa: %x\n" ++.LC282: ++ .string "help:\n" ++.LC283: ++ .string "1. echo dumpl2p > /proc/zftl_debug\n" ++.LC284: ++ .string "2. echo dumppm:x > /proc/zftl_debug\n" ++.LC285: ++ .string "3. echo dumpsys > /proc/zftl_debug\n" ++.LC286: ++ .string "4. echo dumpppa:x > /proc/zftl_debug\n" ++.LC287: ++ .string "5. echo vpncheck > /proc/zftl_debug\n" ++.LC288: ++ .string "6. echo setzdebug:x > /proc/zftl_debug\n" ++.LC289: ++ .string "7. echo dumplist:x > /proc/zftl_debug\n" ++.LC290: ++ .string "8. echo lpa2ppa:x> /proc/zftl_debug\n" ++.LC291: ++ .string "ftl_update_l2p_map: %x %x %x\n" ++.LC292: ++ .string "ftl_update_l2p_map" ++.LC293: ++ .string "lpa_tbl:" ++.LC294: ++ .string "sblk %x vpn: %d %d\n" ++.LC295: ++ .string "error gc_add_sblk: %x\n" ++.LC296: ++ .string "%d read error: ppa:%x, lpa:%x, status:%x\n" ++.LC297: ++ .string "gc page in buf: lpa %x ppa = %x pageindex= %x\n" ++.LC298: ++ .string "gc_do_copy_back: lpa %x des_ppa = %x %x gc_ppa= %x page_index= %d\n" ++.LC299: ++ .string "gc %d: %d %d %d %d %d %d %d\n" ++.LC300: ++ .string "GC_STATE_SCAN_ALL_PAGE = %x, vpn0 = %d, vpn1 = %d\n" ++.LC301: ++ .string "gc free %x, %d\n" ++.LC302: ++ .string "_c_user_data_density := %d\n" ++.LC303: ++ .string "_c_totle_phy_density := %d\n" ++.LC304: ++ .string "_c_totle_log_page := %d\n" ++.LC305: ++ .string "_c_totle_data_density := %d\n" ++.LC306: ++ .string "_c_ftl_pm_page_num := %d\n" ++.LC307: ++ .string "_c_ftl_byte_pre_page := %d\n" ++.LC308: ++ .string "_c_max_pm_sblk := %d\n" ++.LC309: ++ .string "_min_slc_super_block := %d\n" ++.LC310: ++ .string "_max_xlc_super_block := %d\n" ++.LC311: ++ .string "gp_ftl_ext_info %p %p %p\n" ++.LC312: ++ .string "flash info size: %d %d %d\n" ++.LC313: ++ .string "ftl_init %x\n" ++.LC314: ++ .string "ftlwrite %x %x %x %x\n" ++.LC315: ++ .string "ftl_discard:(%x, %x, %x, %x)\n" ++.LC316: ++ .string "id_block_prog_msb_ff_data slc page = %d pageadd=%x %x\n" ++.LC317: ++ .string "write_idblock fix data %x %x\n" ++.LC318: ++ .string "idblk:" ++.LC319: ++ .string "write_idblock totle_sec %x %x\n" ++.LC320: ++ .string "prog page: %x %x %x, %p %x %x %x\n" ++.LC321: ++ .string "read page: %x %x %x %x\n" ++.LC322: ++ .string "wl_lba %p %x %x %x\n" ++.LC323: ++ .string "return ret = %lx\n" ++.LC324: ++ .string "\0013vendor storage %x,%x,%x\n" +diff --git a/include/linux/soc/rockchip/rk_vendor_storage.h b/include/linux/soc/rockchip/rk_vendor_storage.h +new file mode 100644 +index 00000000000..33033a4cfe9 +--- /dev/null ++++ b/include/linux/soc/rockchip/rk_vendor_storage.h +@@ -0,0 +1,58 @@ ++/* ++ * Copyright (c) 2016, 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. ++ */ ++ ++#ifndef __PLAT_RK_VENDOR_STORAGE_H ++#define __PLAT_RK_VENDOR_STORAGE_H ++ ++#define RSV_ID 0 ++#define SN_ID 1 ++#define WIFI_MAC_ID 2 ++#define LAN_MAC_ID 3 ++#define BT_MAC_ID 4 ++#define HDCP_14_HDMI_ID 5 ++#define HDCP_14_DP_ID 6 ++#define HDCP_2X_ID 7 ++#define DRM_KEY_ID 8 ++#define PLAYREADY_CERT_ID 9 ++#define ATTENTION_KEY_ID 10 ++#define PLAYREADY_ROOT_KEY_0_ID 11 ++#define PLAYREADY_ROOT_KEY_1_ID 12 ++#define SENSOR_CALIBRATION_ID 13 ++#define IMEI_ID 15 ++#define LAN_RGMII_DL_ID 16 ++#define EINK_VCOM_ID 17 ++ ++#if IS_ENABLED(CONFIG_ROCKCHIP_VENDOR_STORAGE) ++int rk_vendor_read(u32 id, void *pbuf, u32 size); ++int rk_vendor_write(u32 id, void *pbuf, u32 size); ++int rk_vendor_register(void *read, void *write); ++bool is_rk_vendor_ready(void); ++#else ++static inline int rk_vendor_read(u32 id, void *pbuf, u32 size) ++{ ++ return -1; ++} ++ ++static inline int rk_vendor_write(u32 id, void *pbuf, u32 size) ++{ ++ return -1; ++} ++ ++static inline int rk_vendor_register(void *read, void *write) ++{ ++ return -1; ++} ++ ++static inline bool is_rk_vendor_ready(void) ++{ ++ return false; ++} ++#endif ++ ++#endif +-- +2.30.2 +