Merge tag 'v4.4.2'
[firefly-linux-kernel-4.4.55.git] / drivers / rk_nand / rk_ftl_arm_v8.S
1 /*
2  * Copyright (c) 2016, Fuzhou Rockchip Electronics Co., Ltd
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  */
9         .cpu generic+fp+simd
10         .file   "rk_ftl_arm_v8.S"
11 #APP
12         .irp    num,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17\
13                 ,18,19,20,21,22,23,24,25,26,27,28,29,30
14         .equ    __reg_num_x\num, \num
15         .endr
16         .equ    __reg_num_xzr, 31
17
18         .macro  mrs_s, rt, sreg
19         .inst   0xd5200000|(\sreg)|(__reg_num_\rt)
20         .endm
21
22         .macro  msr_s, sreg, rt
23         .inst   0xd5000000|(\sreg)|(__reg_num_\rt)
24         .endm
25
26 #NO_APP
27         .text
28         .align  2
29         .type   rknand_sys_storage_open, %function
30 rknand_sys_storage_open:
31         adrp    x0, :got:kmalloc_caches
32         stp     x29, x30, [sp, -32]!
33         add     x29, sp, 0
34         ldr     x0, [x0, #:got_lo12:kmalloc_caches]
35         str     x19, [sp,16]
36         mov     x19, x1
37         mov     w1, 192
38         ldr     x0, [x0,96]
39         movk    w1, 0x240, lsl 16
40         bl      kmem_cache_alloc
41         str     xzr, [x19,208]
42         cbnz    x0, .L2
43         adrp    x0, .LC0
44         add     x0, x0, :lo12:.LC0
45         bl      printk
46         mov     w0, -12
47         b       .L3
48 .L2:
49         str     x0, [x19,208]
50         mov     w0, 0
51 .L3:
52         ldr     x19, [sp,16]
53         ldp     x29, x30, [sp], 32
54         ret
55         .size   rknand_sys_storage_open, .-rknand_sys_storage_open
56         .align  2
57         .type   rknand_sys_storage_release, %function
58 rknand_sys_storage_release:
59         stp     x29, x30, [sp, -16]!
60         add     x29, sp, 0
61         ldr     x0, [x1,208]
62         cbz     x0, .L6
63         str     xzr, [x1,208]
64         bl      kfree
65 .L6:
66         mov     w0, 0
67         ldp     x29, x30, [sp], 16
68         ret
69         .size   rknand_sys_storage_release, .-rknand_sys_storage_release
70         .align  2
71         .global FlashMemCmp8
72         .type   FlashMemCmp8, %function
73 FlashMemCmp8:
74         mov     x3, 0
75 .L11:
76         cmp     w3, w2
77         mov     w4, w3
78         bcs     .L15
79         ldrb    w5, [x0,x3]
80         add     x3, x3, 1
81         add     x6, x1, x3
82         ldrb    w6, [x6,-1]
83         cmp     w6, w5
84         beq     .L11
85         add     w0, w4, 1
86         b       .L12
87 .L15:
88         mov     w0, 0
89 .L12:
90         ret
91         .size   FlashMemCmp8, .-FlashMemCmp8
92         .align  2
93         .global FlashRsvdBlkChk
94         .type   FlashRsvdBlkChk, %function
95 FlashRsvdBlkChk:
96         adrp    x2, :got:gNandIDBResBlkNum
97         adrp    x3, :got:gBlockPageAlignSize
98         uxtb    w0, w0
99         ldr     x2, [x2, #:got_lo12:gNandIDBResBlkNum]
100         ldr     x3, [x3, #:got_lo12:gBlockPageAlignSize]
101         ldrb    w2, [x2]
102         ldr     w3, [x3]
103         mul     w2, w2, w3
104         cmp     w1, w2
105         cset    w1, cc
106         cmp     w0, wzr
107         cset    w0, eq
108         and     w0, w1, w0
109         eor     w0, w0, 1
110         ret
111         .size   FlashRsvdBlkChk, .-FlashRsvdBlkChk
112         .align  2
113         .global FlashGetRandomizer
114         .type   FlashGetRandomizer, %function
115 FlashGetRandomizer:
116         adrp    x2, :got:random_seed
117         and     w3, w1, 127
118         stp     x29, x30, [sp, -32]!
119         uxtb    w0, w0
120         add     x29, sp, 0
121         ldr     x2, [x2, #:got_lo12:random_seed]
122         str     x19, [sp,16]
123         ldrh    w19, [x2,w3,uxtw 1]
124         adrp    x2, :got:gNandRandomizer
125         ldr     x2, [x2, #:got_lo12:gNandRandomizer]
126         ldrb    w2, [x2]
127         cbz     w2, .L18
128         bl      FlashRsvdBlkChk
129         cmp     w0, wzr
130         orr     w1, w19, -1073741824
131         csel    w19, w1, w19, ne
132 .L18:
133         mov     w0, w19
134         ldr     x19, [sp,16]
135         ldp     x29, x30, [sp], 32
136         ret
137         .size   FlashGetRandomizer, .-FlashGetRandomizer
138         .align  2
139         .global JSHash
140         .type   JSHash, %function
141 JSHash:
142         mov     x5, x0
143         mov     w0, 42982
144         mov     x2, 0
145         movk    w0, 0x47c6, lsl 16
146 .L25:
147         cmp     w1, w2
148         bls     .L27
149         lsl     w3, w0, 5
150         ldrb    w4, [x5,x2]
151         add     w3, w3, w0, lsr 2
152         add     x2, x2, 1
153         add     w3, w3, w4
154         eor     w0, w0, w3
155         b       .L25
156 .L27:
157         ret
158         .size   JSHash, .-JSHash
159         .align  2
160         .global FlashLoadIdbInfo
161         .type   FlashLoadIdbInfo, %function
162 FlashLoadIdbInfo:
163         mov     w0, 0
164         ret
165         .size   FlashLoadIdbInfo, .-FlashLoadIdbInfo
166         .align  2
167         .global FlashPrintInfo
168         .type   FlashPrintInfo, %function
169 FlashPrintInfo:
170         ret
171         .size   FlashPrintInfo, .-FlashPrintInfo
172         .align  2
173         .global FlashSuspend
174         .type   FlashSuspend, %function
175 FlashSuspend:
176         adrp    x0, :got:gpNandc
177         adrp    x2, .LANCHOR0
178         add     x1, x2, :lo12:.LANCHOR0
179         ldr     x0, [x0, #:got_lo12:gpNandc]
180         ldr     x0, [x0]
181         ldr     w3, [x0]
182         str     w3, [x2,#:lo12:.LANCHOR0]
183         ldr     w2, [x0,4]
184         str     w2, [x1,4]
185         ldr     w2, [x0,8]
186         str     w2, [x1,8]
187         ldr     w2, [x0,12]
188         str     w2, [x1,12]
189         ldr     w2, [x0,304]
190         str     w2, [x1,16]
191         ldr     w2, [x0,308]
192         str     w2, [x1,20]
193         ldr     w2, [x0,336]
194         ldr     w0, [x0,344]
195         str     w0, [x1,28]
196         mov     w0, 0
197         str     w2, [x1,24]
198         ret
199         .size   FlashSuspend, .-FlashSuspend
200         .align  2
201         .global LogAddr2PhyAddr
202         .type   LogAddr2PhyAddr, %function
203 LogAddr2PhyAddr:
204         adrp    x6, :got:gNandPhyInfo
205         cmp     w1, 1
206         uxtb    w4, w4
207         ldr     x6, [x6, #:got_lo12:gNandPhyInfo]
208         ldrh    w5, [x6,12]
209         ldrh    w6, [x6,14]
210         mul     w5, w5, w6
211         adrp    x6, :got:gBlockPageAlignSize
212         uxth    w5, w5
213         ldr     x6, [x6, #:got_lo12:gBlockPageAlignSize]
214         ldr     w8, [x6]
215         ldr     w6, [x0,4]
216         ubfx    x9, x6, 10, 16
217         and     w6, w6, 1023
218         udiv    w7, w9, w5
219         msub    w5, w7, w5, w9
220         uxth    w5, w5
221         bne     .L32
222         adrp    x1, :got:slcPageToMlcPageTbl
223         ldr     x1, [x1, #:got_lo12:slcPageToMlcPageTbl]
224         ldrh    w6, [x1,w6,sxtw 1]
225 .L32:
226         adrp    x1, :got:DieAddrs
227         and     w8, w8, 65535
228         cmp     w4, 1
229         ldr     x1, [x1, #:got_lo12:DieAddrs]
230         ldr     w1, [x1,w7,uxtw 2]
231         madd    w5, w5, w8, w1
232         mov     w1, 0
233         add     w5, w5, w6
234         str     w5, [x2]
235         str     w7, [x3]
236         bls     .L33
237         ldr     w1, [x0,4]
238         ldr     w0, [x0,60]
239         add     w1, w1, 1024
240         cmp     w1, w0
241         cset    w1, eq
242 .L33:
243         mov     w0, w1
244         ret
245         .size   LogAddr2PhyAddr, .-LogAddr2PhyAddr
246         .align  2
247         .global FlashGetPageSize
248         .type   FlashGetPageSize, %function
249 FlashGetPageSize:
250         adrp    x0, :got:gpNandParaInfo
251         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
252         ldr     x0, [x0]
253         ldrb    w0, [x0,9]
254         ret
255         .size   FlashGetPageSize, .-FlashGetPageSize
256         .align  2
257         .global NandcReadDontCaseBusyEn
258         .type   NandcReadDontCaseBusyEn, %function
259 NandcReadDontCaseBusyEn:
260         ret
261         .size   NandcReadDontCaseBusyEn, .-NandcReadDontCaseBusyEn
262         .align  2
263         .global NandcGetChipIf
264         .type   NandcGetChipIf, %function
265 NandcGetChipIf:
266         adrp    x1, :got:gNandChipMap
267         ubfiz   x0, x0, 4, 8
268         ldr     x1, [x1, #:got_lo12:gNandChipMap]
269         add     x2, x1, x0
270         ldr     x0, [x1,x0]
271         ldrb    w2, [x2,8]
272         add     x2, x2, 8
273         add     x0, x0, x2, lsl 8
274         ret
275         .size   NandcGetChipIf, .-NandcGetChipIf
276         .align  2
277         .global FlashEraseCmd
278         .type   FlashEraseCmd, %function
279 FlashEraseCmd:
280         stp     x29, x30, [sp, -32]!
281         add     x29, sp, 0
282         str     x1, [x29,16]
283         str     x2, [x29,24]
284         bl      NandcGetChipIf
285         ldr     x2, [x29,24]
286         ldr     x1, [x29,16]
287         cbz     w2, .L39
288         mov     w2, 96
289         str     w2, [x0,8]
290         and     w2, w1, 255
291         str     w2, [x0,4]
292         lsr     w2, w1, 8
293         str     w2, [x0,4]
294         lsr     w2, w1, 16
295         str     w2, [x0,4]
296         adrp    x2, :got:gBlockPageAlignSize
297         ldr     x2, [x2, #:got_lo12:gBlockPageAlignSize]
298         ldr     w2, [x2]
299         add     w1, w1, w2
300 .L39:
301         mov     w2, 96
302         str     w2, [x0,8]
303         and     w2, w1, 255
304         str     w2, [x0,4]
305         lsr     w2, w1, 8
306         str     w2, [x0,4]
307         lsr     w1, w1, 16
308         str     w1, [x0,4]
309         mov     w1, 208
310         str     w1, [x0,8]
311         ldp     x29, x30, [sp], 32
312         ret
313         .size   FlashEraseCmd, .-FlashEraseCmd
314         .align  2
315         .global FlashProgSecondCmd
316         .type   FlashProgSecondCmd, %function
317 FlashProgSecondCmd:
318         stp     x29, x30, [sp, -16]!
319         add     x29, sp, 0
320         bl      NandcGetChipIf
321         mov     w1, 16
322         str     w1, [x0,8]
323         ldp     x29, x30, [sp], 16
324         ret
325         .size   FlashProgSecondCmd, .-FlashProgSecondCmd
326         .align  2
327         .global FlashProgDpFirstCmd
328         .type   FlashProgDpFirstCmd, %function
329 FlashProgDpFirstCmd:
330         stp     x29, x30, [sp, -16]!
331         add     x29, sp, 0
332         bl      NandcGetChipIf
333         adrp    x1, :got:gNandOptPara
334         ldr     x1, [x1, #:got_lo12:gNandOptPara]
335         ldrb    w1, [x1,10]
336         str     w1, [x0,8]
337         ldp     x29, x30, [sp], 16
338         ret
339         .size   FlashProgDpFirstCmd, .-FlashProgDpFirstCmd
340         .align  2
341         .global NandcSetDdrPara
342         .type   NandcSetDdrPara, %function
343 NandcSetDdrPara:
344         adrp    x1, :got:gpNandc
345         uxtb    w0, w0
346         lsl     w2, w0, 8
347         orr     w0, w2, w0, lsl 16
348         ldr     x1, [x1, #:got_lo12:gpNandc]
349         orr     w0, w0, 1
350         ldr     x1, [x1]
351         str     w0, [x1,304]
352         adrp    x0, :got:gpNandc1
353         ldr     x0, [x0, #:got_lo12:gpNandc1]
354         ldr     x0, [x0]
355         cbz     x0, .L45
356         ldr     w1, [x1,304]
357         str     w1, [x0,304]
358 .L45:
359         ret
360         .size   NandcSetDdrPara, .-NandcSetDdrPara
361         .align  2
362         .global NandcSetDdrMode
363         .type   NandcSetDdrMode, %function
364 NandcSetDdrMode:
365         adrp    x1, :got:gpNandc
366         cmp     w0, wzr
367         adrp    x0, :got:gpNandc1
368         ldr     x2, [x1, #:got_lo12:gpNandc]
369         ldr     x3, [x2]
370         ldr     w2, [x3]
371         and     w4, w2, -8193
372         orr     w2, w2, 253952
373         csel    w2, w2, w4, ne
374         str     w2, [x3]
375         ldr     x0, [x0, #:got_lo12:gpNandc1]
376         ldr     x0, [x0]
377         cbz     x0, .L50
378         ldr     x1, [x1, #:got_lo12:gpNandc]
379         ldr     x1, [x1]
380         ldr     w1, [x1]
381         str     w1, [x0]
382 .L50:
383         ret
384         .size   NandcSetDdrMode, .-NandcSetDdrMode
385         .align  2
386         .global NandcSetMode
387         .type   NandcSetMode, %function
388 NandcSetMode:
389         stp     x29, x30, [sp, -48]!
390         uxtb    w0, w0
391         add     x29, sp, 0
392         stp     x19, x20, [sp,16]
393         adrp    x20, :got:gpNandc
394         tst     w0, 6
395         stp     x21, x22, [sp,32]
396         adrp    x22, :got:gpNandc1
397         ldr     x21, [x20, #:got_lo12:gpNandc]
398         ldr     x1, [x21]
399         ldr     w19, [x1]
400         beq     .L58
401         orr     w19, w19, 24576
402         and     w0, w0, 4
403         and     w19, w19, -32769
404         cmp     w0, wzr
405         orr     w19, w19, 196608
406         mov     w0, 0
407         orr     w1, w19, 32768
408         csel    w19, w1, w19, ne
409         bl      rknand_get_clk_rate
410         mov     w1, 5055
411         movk    w1, 0x900, lsl 16
412         cmp     w0, w1
413         adrp    x0, :got:gToggleModeClkDiv
414         ble     .L60
415         ldr     x0, [x0, #:got_lo12:gToggleModeClkDiv]
416         mov     w2, 8320
417         ldr     x3, [x21]
418         ldr     w1, [x0]
419         add     w1, w1, 1
420         orr     w1, w1, w2
421         str     w1, [x3,344]
422         b       .L61
423 .L60:
424         ldr     x0, [x0, #:got_lo12:gToggleModeClkDiv]
425         mov     w1, 8320
426         ldr     x2, [x21]
427         ldr     w0, [x0]
428         orr     w1, w0, w1
429         str     w1, [x2,344]
430 .L61:
431         ldr     x0, [x20, #:got_lo12:gpNandc]
432         mov     w2, 4099
433         movk    w2, 0x10, lsl 16
434         mov     w3, 38
435         ldr     x1, [x0]
436         str     w2, [x1,304]
437         mov     w2, 39
438         str     w3, [x1,308]
439         str     w2, [x1,308]
440         ldr     x0, [x22, #:got_lo12:gpNandc1]
441         ldr     x0, [x0]
442         cbz     x0, .L62
443         ldr     w4, [x1,344]
444         str     w4, [x0,344]
445         ldr     w1, [x1,304]
446         str     w1, [x0,304]
447         str     w3, [x0,308]
448         str     w2, [x0,308]
449         b       .L62
450 .L58:
451         and     w19, w19, -8193
452 .L62:
453         ldr     x20, [x20, #:got_lo12:gpNandc]
454         ldr     x0, [x20]
455         str     w19, [x0]
456         ldr     x0, [x22, #:got_lo12:gpNandc1]
457         ldr     x0, [x0]
458         cbz     x0, .L63
459         ldr     x1, [x20]
460         ldr     w1, [x1]
461         str     w1, [x0]
462 .L63:
463         mov     w0, 0
464         ldp     x19, x20, [sp,16]
465         ldp     x21, x22, [sp,32]
466         ldp     x29, x30, [sp], 48
467         ret
468         .size   NandcSetMode, .-NandcSetMode
469         .align  2
470         .global NandcFlashCsDebug
471         .type   NandcFlashCsDebug, %function
472 NandcFlashCsDebug:
473         adrp    x1, :got:gNandChipMap
474         uxtb    w0, w0
475         ldr     x1, [x1, #:got_lo12:gNandChipMap]
476         ldr     x2, [x1]
477         ldr     w1, [x2]
478         bfi     w1, w0, 0, 8
479         str     w1, [x2]
480         ret
481         .size   NandcFlashCsDebug, .-NandcFlashCsDebug
482         .align  2
483         .global NandcFlashCs
484         .type   NandcFlashCs, %function
485 NandcFlashCs:
486         adrp    x1, :got:gNandChipMap
487         ubfiz   x0, x0, 4, 8
488         ldr     x1, [x1, #:got_lo12:gNandChipMap]
489         add     x3, x1, x0
490         ldr     x2, [x1,x0]
491         mov     w1, 1
492         ldrb    w3, [x3,8]
493         ldr     w0, [x2]
494         lsl     w1, w1, w3
495         bfi     w0, w1, 0, 8
496         str     w0, [x2]
497         ret
498         .size   NandcFlashCs, .-NandcFlashCs
499         .align  2
500         .global NandcFlashDeCs
501         .type   NandcFlashDeCs, %function
502 NandcFlashDeCs:
503         adrp    x1, :got:gNandChipMap
504         ubfiz   x0, x0, 4, 8
505         ldr     x1, [x1, #:got_lo12:gNandChipMap]
506         ldr     x1, [x1,x0]
507         ldr     w0, [x1]
508         and     w0, w0, -256
509         and     w0, w0, -131073
510         str     w0, [x1]
511         ret
512         .size   NandcFlashDeCs, .-NandcFlashDeCs
513         .align  2
514         .global NandcDelayns
515         .type   NandcDelayns, %function
516 NandcDelayns:
517         sub     sp, sp, #16
518         lsr     w0, w0, 4
519         str     w0, [sp,12]
520 .L76:
521         ldr     w0, [sp,12]
522         sub     w1, w0, #1
523         str     w1, [sp,12]
524         cbnz    w0, .L76
525         add     sp, sp, 16
526         ret
527         .size   NandcDelayns, .-NandcDelayns
528         .align  2
529         .global FlashReadStatus
530         .type   FlashReadStatus, %function
531 FlashReadStatus:
532         stp     x29, x30, [sp, -32]!
533         add     x29, sp, 0
534         str     x19, [sp,16]
535         bl      NandcGetChipIf
536         mov     x19, x0
537         mov     w0, 112
538         str     w0, [x19,8]
539         mov     w0, 80
540         bl      NandcDelayns
541         ldr     w0, [x19]
542         ldr     x19, [sp,16]
543         ldp     x29, x30, [sp], 32
544         ret
545         .size   FlashReadStatus, .-FlashReadStatus
546         .align  2
547         .global ToshibaSetRRPara
548         .type   ToshibaSetRRPara, %function
549 ToshibaSetRRPara:
550         stp     x29, x30, [sp, -96]!
551         adrp    x2, :got:Toshiba15RefValue
552         add     x29, sp, 0
553         stp     x23, x24, [sp,48]
554         uxtb    x23, w1
555         ldr     x2, [x2, #:got_lo12:Toshiba15RefValue]
556         stp     x19, x20, [sp,16]
557         stp     x21, x22, [sp,32]
558         mov     w20, 5
559         mov     x21, x0
560         add     w0, w23, 1
561         mov     x19, 0
562         stp     x25, x26, [sp,64]
563         smull   x20, w0, w20
564         adrp    x0, :got:ToshibaA19RefValue
565         adrp    x25, :got:g_maxRegNum
566         stp     x27, x28, [sp,80]
567         mov     x22, x0
568         mov     w26, 85
569         ldr     x24, [x0, #:got_lo12:ToshibaA19RefValue]
570         adrp    x27, :got:g_retryMode
571         adrp    x28, :got:ToshibaRefValue
572         add     x24, x20, x24
573         add     x20, x20, x2
574 .L80:
575         ldr     x0, [x25, #:got_lo12:g_maxRegNum]
576         ldrb    w0, [x0]
577         cmp     w0, w19
578         bls     .L86
579         str     w26, [x21,8]
580         ldr     x0, [x22, #:got_lo12:ToshibaA19RefValue]
581         ldrsb   w0, [x19,x0]
582         str     w0, [x21,4]
583         mov     w0, 200
584         bl      NandcDelayns
585         ldr     x0, [x27, #:got_lo12:g_retryMode]
586         ldrb    w0, [x0]
587         cmp     w0, 34
588         bne     .L81
589         ldrsb   w0, [x24,x19]
590         b       .L85
591 .L81:
592         cmp     w0, 35
593         bne     .L83
594         ldrsb   w0, [x20,x19]
595         b       .L85
596 .L83:
597         ldr     x0, [x28, #:got_lo12:ToshibaRefValue]
598         ldrsb   w0, [x0,x23]
599 .L85:
600         str     w0, [x21]
601         add     x19, x19, 1
602         b       .L80
603 .L86:
604         ldp     x19, x20, [sp,16]
605         ldp     x21, x22, [sp,32]
606         ldp     x23, x24, [sp,48]
607         ldp     x25, x26, [sp,64]
608         ldp     x27, x28, [sp,80]
609         ldp     x29, x30, [sp], 96
610         ret
611         .size   ToshibaSetRRPara, .-ToshibaSetRRPara
612         .align  2
613         .global SamsungSetRRPara
614         .type   SamsungSetRRPara, %function
615 SamsungSetRRPara:
616         stp     x29, x30, [sp, -64]!
617         uxtb    x1, w1
618         add     x29, sp, 0
619         stp     x21, x22, [sp,32]
620         mov     x21, x0
621         adrp    x0, :got:SamsungRefValue
622         stp     x19, x20, [sp,16]
623         add     x1, x1, 1
624         mov     x19, 0
625         ldr     x20, [x0, #:got_lo12:SamsungRefValue]
626         mov     x22, x0
627         stp     x23, x24, [sp,48]
628         add     x20, x20, x1, lsl 2
629         adrp    x23, :got:g_maxRegNum
630         mov     w24, 161
631 .L88:
632         ldr     x0, [x23, #:got_lo12:g_maxRegNum]
633         ldrb    w0, [x0]
634         cmp     w0, w19
635         bls     .L90
636         str     w24, [x21,8]
637         str     wzr, [x21]
638         ldr     x0, [x22, #:got_lo12:SamsungRefValue]
639         ldrsb   w0, [x19,x0]
640         str     w0, [x21]
641         ldrsb   w0, [x20,x19]
642         add     x19, x19, 1
643         str     w0, [x21]
644         mov     w0, 300
645         bl      NandcDelayns
646         b       .L88
647 .L90:
648         ldp     x19, x20, [sp,16]
649         ldp     x21, x22, [sp,32]
650         ldp     x23, x24, [sp,48]
651         ldp     x29, x30, [sp], 64
652         ret
653         .size   SamsungSetRRPara, .-SamsungSetRRPara
654         .align  2
655         .global HynixSetRRPara
656         .type   HynixSetRRPara, %function
657 HynixSetRRPara:
658         stp     x29, x30, [sp, -80]!
659         adrp    x4, :got:gReadRetryInfo
660         add     x29, sp, 0
661         stp     x21, x22, [sp,32]
662         uxtb    x22, w0
663         adrp    x0, :got:gpNandParaInfo
664         stp     x23, x24, [sp,48]
665         stp     x19, x20, [sp,16]
666         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
667         mov     x21, x22
668         stp     x25, x26, [sp,64]
669         uxtb    w20, w1
670         mov     x24, x2
671         ldr     x0, [x0]
672         uxtb    w23, w3
673         ldrb    w0, [x0,19]
674         cmp     w0, 6
675         bne     .L92
676         ldr     x4, [x4, #:got_lo12:gReadRetryInfo]
677         lsl     w19, w23, 2
678         add     x4, x4, x22, lsl 6
679         add     x4, x4, 20
680         add     x19, x4, x19, sxtw
681         b       .L93
682 .L92:
683         ldr     x4, [x4, #:got_lo12:gReadRetryInfo]
684         lsl     x19, x22, 3
685         add     x19, x19, x23, sxtw
686         add     x4, x4, x19, lsl 3
687         add     x19, x4, 20
688 .L93:
689         mov     w0, w21
690         uxtb    x26, w20
691         mov     x20, 0
692         bl      NandcGetChipIf
693         mov     x25, x0
694         mov     w0, w21
695         bl      NandcFlashCs
696         mov     w0, 54
697         str     w0, [x25,8]
698 .L94:
699         cmp     x20, x26
700         beq     .L96
701         ldrb    w0, [x24,x20]
702         str     w0, [x25,4]
703         mov     w0, 200
704         bl      NandcDelayns
705         ldrb    w0, [x19,x20]
706         add     x20, x20, 1
707         str     w0, [x25]
708         b       .L94
709 .L96:
710         mov     w0, 22
711         str     w0, [x25,8]
712         mov     w0, w21
713         bl      NandcFlashDeCs
714         adrp    x0, :got:read_retry_cur_offset
715         ldr     x0, [x0, #:got_lo12:read_retry_cur_offset]
716         strb    w23, [x0,x22]
717         ldp     x19, x20, [sp,16]
718         ldp     x21, x22, [sp,32]
719         ldp     x23, x24, [sp,48]
720         ldp     x25, x26, [sp,64]
721         ldp     x29, x30, [sp], 80
722         ret
723         .size   HynixSetRRPara, .-HynixSetRRPara
724         .align  2
725         .global FlashSetReadRetryDefault
726         .type   FlashSetReadRetryDefault, %function
727 FlashSetReadRetryDefault:
728         adrp    x0, :got:gpNandParaInfo
729         stp     x29, x30, [sp, -48]!
730         add     x29, sp, 0
731         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
732         stp     x19, x20, [sp,16]
733         str     x21, [sp,32]
734         mov     x19, 0
735         ldr     x0, [x0]
736         ldrb    w0, [x0,19]
737         sub     w0, w0, #1
738         uxtb    w0, w0
739         cmp     w0, 5
740         bhi     .L97
741         adrp    x20, :got:IDByte
742         adrp    x21, :got:gReadRetryInfo
743 .L102:
744         lsl     x1, x19, 3
745         ldr     x2, [x20, #:got_lo12:IDByte]
746         uxtb    w0, w19
747         ldrb    w1, [x1,x2]
748         cmp     w1, 173
749         bne     .L99
750         ldr     x2, [x21, #:got_lo12:gReadRetryInfo]
751         mov     w3, 0
752         add     x2, x2, 4
753         ldrb    w1, [x2,-3]
754         bl      HynixSetRRPara
755 .L99:
756         add     x19, x19, 1
757         cmp     x19, 8
758         bne     .L102
759 .L97:
760         ldp     x19, x20, [sp,16]
761         ldr     x21, [sp,32]
762         ldp     x29, x30, [sp], 48
763         ret
764         .size   FlashSetReadRetryDefault, .-FlashSetReadRetryDefault
765         .align  2
766         .global FlashReadStatusEN
767         .type   FlashReadStatusEN, %function
768 FlashReadStatusEN:
769         stp     x29, x30, [sp, -48]!
770         add     x29, sp, 0
771         stp     x19, x20, [sp,16]
772         uxtb    w20, w2
773         str     x1, [x29,40]
774         bl      NandcGetChipIf
775         mov     x19, x0
776         adrp    x0, :got:gpNandParaInfo
777         ldr     x1, [x29,40]
778         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
779         ldr     x0, [x0]
780         ldrb    w0, [x0,8]
781         cmp     w0, 2
782         bne     .L105
783         adrp    x3, :got:gNandOptPara
784         ldr     x0, [x3, #:got_lo12:gNandOptPara]
785         cbnz    w20, .L106
786         ldrb    w0, [x0,13]
787         b       .L114
788 .L106:
789         ldrb    w0, [x0,14]
790 .L114:
791         str     w0, [x19,8]
792         mov     w2, 0
793         ldr     x0, [x3, #:got_lo12:gNandOptPara]
794         ldrb    w0, [x0,15]
795         cbz     w0, .L109
796 .L113:
797         ldr     x0, [x3, #:got_lo12:gNandOptPara]
798         ldrb    w0, [x0,15]
799         cmp     w2, w0
800         bcs     .L109
801         lsl     w0, w2, 3
802         add     w2, w2, 1
803         lsr     w0, w1, w0
804         and     w0, w0, 255
805         str     w0, [x19,4]
806         b       .L113
807 .L105:
808         mov     w0, 112
809         str     w0, [x19,8]
810 .L109:
811         mov     w0, 80
812         bl      NandcDelayns
813         ldr     w0, [x19]
814         ldp     x19, x20, [sp,16]
815         ldp     x29, x30, [sp], 48
816         uxtb    w0, w0
817         ret
818         .size   FlashReadStatusEN, .-FlashReadStatusEN
819         .align  2
820         .global FlashWaitReadyEN
821         .type   FlashWaitReadyEN, %function
822 FlashWaitReadyEN:
823         stp     x29, x30, [sp, -48]!
824         add     x29, sp, 0
825         stp     x19, x20, [sp,16]
826         str     x21, [sp,32]
827         uxtb    w19, w0
828         mov     w20, w1
829         uxtb    w21, w2
830 .L119:
831         mov     w0, w19
832         mov     w1, w20
833         mov     w2, w21
834         bl      FlashReadStatusEN
835         cmp     w0, 255
836         mov     w3, w0
837         beq     .L119
838         tbz     x3, 6, .L119
839         ldp     x19, x20, [sp,16]
840         ldr     x21, [sp,32]
841         ldp     x29, x30, [sp], 48
842         ret
843         .size   FlashWaitReadyEN, .-FlashWaitReadyEN
844         .align  2
845         .global FlashWaitCmdDone
846         .type   FlashWaitCmdDone, %function
847 FlashWaitCmdDone:
848         stp     x29, x30, [sp, -48]!
849         adrp    x2, :got:gDieOp
850         uxtb    x1, w0
851         mov     x0, 24
852         add     x29, sp, 0
853         stp     x19, x20, [sp,16]
854         ldr     x2, [x2, #:got_lo12:gDieOp]
855         mov     x20, x1
856         mul     x1, x1, x0
857         str     x21, [sp,32]
858         add     x19, x2, x1
859         ldrb    w21, [x2,x1]
860         ldr     x0, [x19,8]
861         cbz     x0, .L124
862         mov     w0, w21
863         bl      NandcFlashCs
864         adrp    x1, :got:DieAddrs
865         ldr     x1, [x1, #:got_lo12:DieAddrs]
866         ldr     w0, [x1,w20,sxtw 2]
867         ldr     w1, [x19,4]
868         cmp     w0, wzr
869         mov     w0, w21
870         cset    w2, ne
871         bl      FlashWaitReadyEN
872         mov     w20, w0
873         mov     w0, w21
874         bl      NandcFlashDeCs
875         ldr     x1, [x19,8]
876         sbfx    x0, x20, 0, 1
877         str     w0, [x1]
878         str     xzr, [x19,8]
879         ldr     x1, [x19,16]
880         cbz     x1, .L124
881         str     w0, [x1]
882         str     xzr, [x19,16]
883 .L124:
884         mov     w0, 0
885         ldr     x21, [sp,32]
886         ldp     x19, x20, [sp,16]
887         ldp     x29, x30, [sp], 48
888         ret
889         .size   FlashWaitCmdDone, .-FlashWaitCmdDone
890         .align  2
891         .global NandcWaitFlashReady
892         .type   NandcWaitFlashReady, %function
893 NandcWaitFlashReady:
894         adrp    x1, :got:gNandChipMap
895         ubfiz   x0, x0, 4, 8
896         stp     x29, x30, [sp, -48]!
897         add     x29, sp, 0
898         ldr     x1, [x1, #:got_lo12:gNandChipMap]
899         stp     x19, x20, [sp,16]
900         mov     w19, 34464
901         ldr     x20, [x1,x0]
902         movk    w19, 0x1, lsl 16
903 .L131:
904         mov     w0, 100
905         bl      NandcDelayns
906         ldr     w0, [x20]
907         str     w0, [x29,40]
908         ldr     w0, [x29,40]
909         tbnz    x0, 9, .L132
910         subs    w19, w19, #1
911         bne     .L131
912         mov     w0, -1
913         b       .L130
914 .L132:
915         mov     w0, 0
916 .L130:
917         ldp     x19, x20, [sp,16]
918         ldp     x29, x30, [sp], 48
919         ret
920         .size   NandcWaitFlashReady, .-NandcWaitFlashReady
921         .align  2
922         .global FlashReset
923         .type   FlashReset, %function
924 FlashReset:
925         stp     x29, x30, [sp, -32]!
926         add     x29, sp, 0
927         stp     x19, x20, [sp,16]
928         uxtb    w19, w0
929         mov     w0, w19
930         bl      NandcGetChipIf
931         mov     x20, x0
932         mov     w0, w19
933         bl      NandcFlashCs
934         mov     w0, 255
935         str     w0, [x20,8]
936         mov     w0, w19
937         bl      NandcWaitFlashReady
938         mov     w0, w19
939         bl      NandcFlashDeCs
940         ldp     x19, x20, [sp,16]
941         ldp     x29, x30, [sp], 32
942         ret
943         .size   FlashReset, .-FlashReset
944         .align  2
945         .global FlashEraseBlock
946         .type   FlashEraseBlock, %function
947 FlashEraseBlock:
948         stp     x29, x30, [sp, -48]!
949         add     x29, sp, 0
950         stp     x19, x20, [sp,16]
951         uxtb    w19, w0
952         mov     w20, w1
953         mov     w0, w19
954         str     x2, [x29,40]
955         bl      NandcWaitFlashReady
956         mov     w0, w19
957         bl      NandcFlashCs
958         ldr     x2, [x29,40]
959         mov     w1, w20
960         mov     w0, w19
961         bl      FlashEraseCmd
962         mov     w0, w19
963         bl      NandcWaitFlashReady
964         mov     w1, w20
965         mov     w0, w19
966         bl      FlashReadStatus
967         mov     w20, w0
968         mov     w0, w19
969         bl      NandcFlashDeCs
970         and     w0, w20, 1
971         ldp     x19, x20, [sp,16]
972         ldp     x29, x30, [sp], 48
973         ret
974         .size   FlashEraseBlock, .-FlashEraseBlock
975         .align  2
976         .global FlashSetInterfaceMode
977         .type   FlashSetInterfaceMode, %function
978 FlashSetInterfaceMode:
979         stp     x29, x30, [sp, -80]!
980         add     x29, sp, 0
981         stp     x19, x20, [sp,16]
982         adrp    x19, :got:IDByte
983         mov     w20, 0
984         stp     x21, x22, [sp,32]
985         stp     x23, x24, [sp,48]
986         ldr     x19, [x19, #:got_lo12:IDByte]
987         mov     w21, w0
988         stp     x25, x26, [sp,64]
989         adrp    x22, :got:gFlashInterfaceMode
990         mov     w23, 239
991         mov     w24, 128
992         mov     w25, 1
993         mov     w26, 32
994 .L144:
995         mov     w0, w20
996         bl      NandcGetChipIf
997         ldrb    w1, [x19]
998         cmp     w1, 69
999         cset    w3, eq
1000         cmp     w1, 152
1001         cset    w2, eq
1002         orr     w2, w3, w2
1003         cbnz    w2, .L145
1004         cmp     w1, 173
1005         bne     .L137
1006 .L145:
1007         ldr     x1, [x22, #:got_lo12:gFlashInterfaceMode]
1008         cmp     w21, 1
1009         ldrb    w1, [x1]
1010         bne     .L139
1011         tbz     x1, 0, .L137
1012         str     w23, [x0,8]
1013         ldrb    w1, [x19]
1014         cmp     w1, 173
1015         bne     .L140
1016         str     w21, [x0,4]
1017         b       .L156
1018 .L140:
1019         str     w24, [x0,4]
1020         str     w21, [x0]
1021         b       .L143
1022 .L139:
1023         tbz     x1, 2, .L137
1024         str     w23, [x0,8]
1025         ldrb    w1, [x19]
1026         cmp     w1, 173
1027         bne     .L142
1028         str     w25, [x0,4]
1029         str     w26, [x0]
1030         b       .L143
1031 .L142:
1032         str     w24, [x0,4]
1033 .L156:
1034         str     wzr, [x0]
1035 .L143:
1036         str     wzr, [x0]
1037         str     wzr, [x0]
1038         str     wzr, [x0]
1039 .L137:
1040         add     w20, w20, 1
1041         add     x19, x19, 8
1042         uxtb    w20, w20
1043         cmp     w20, 8
1044         bne     .L144
1045         mov     w0, 0
1046         bl      NandcWaitFlashReady
1047         mov     w0, 0
1048         ldp     x19, x20, [sp,16]
1049         ldp     x21, x22, [sp,32]
1050         ldp     x23, x24, [sp,48]
1051         ldp     x25, x26, [sp,64]
1052         ldp     x29, x30, [sp], 80
1053         ret
1054         .size   FlashSetInterfaceMode, .-FlashSetInterfaceMode
1055         .align  2
1056         .global FlashReadSpare
1057         .type   FlashReadSpare, %function
1058 FlashReadSpare:
1059         adrp    x3, :got:gNandParaInfo
1060         stp     x29, x30, [sp, -64]!
1061         add     x29, sp, 0
1062         ldr     x3, [x3, #:got_lo12:gNandParaInfo]
1063         stp     x19, x20, [sp,16]
1064         str     x21, [sp,32]
1065         uxtb    w21, w0
1066         mov     w0, w21
1067         str     x2, [x29,56]
1068         ldrb    w20, [x3,9]
1069         str     x1, [x29,48]
1070         bl      NandcGetChipIf
1071         str     wzr, [x0,8]
1072         mov     x19, x0
1073         ldr     x1, [x29,48]
1074         lsl     w20, w20, 9
1075         str     w20, [x0,4]
1076         lsr     w20, w20, 8
1077         str     w20, [x0,4]
1078         and     w0, w1, 255
1079         str     w0, [x19,4]
1080         lsr     w0, w1, 8
1081         str     w0, [x19,4]
1082         lsr     w1, w1, 16
1083         mov     w0, 48
1084         str     w1, [x19,4]
1085         str     w0, [x19,8]
1086         mov     w0, w21
1087         bl      NandcWaitFlashReady
1088         ldr     x2, [x29,56]
1089         ldr     w0, [x19]
1090         strb    w0, [x2]
1091         ldp     x19, x20, [sp,16]
1092         ldr     x21, [sp,32]
1093         ldp     x29, x30, [sp], 64
1094         ret
1095         .size   FlashReadSpare, .-FlashReadSpare
1096         .align  2
1097         .global SandiskProgTestBadBlock
1098         .type   SandiskProgTestBadBlock, %function
1099 SandiskProgTestBadBlock:
1100         stp     x29, x30, [sp, -48]!
1101         add     x29, sp, 0
1102         stp     x19, x20, [sp,16]
1103         uxtb    w20, w0
1104         mov     w0, w20
1105         str     x1, [x29,40]
1106         bl      NandcGetChipIf
1107         mov     x19, x0
1108         mov     w0, 162
1109         ldr     x1, [x29,40]
1110         str     w0, [x19,8]
1111         mov     w0, 128
1112         str     w0, [x19,8]
1113         and     w0, w1, 255
1114         str     wzr, [x19,4]
1115         str     wzr, [x19,4]
1116         str     w0, [x19,4]
1117         lsr     w0, w1, 8
1118         str     w0, [x19,4]
1119         lsr     w1, w1, 16
1120         mov     w0, 16
1121         str     w1, [x19,4]
1122         str     w0, [x19,8]
1123         mov     w0, w20
1124         bl      NandcWaitFlashReady
1125         mov     w0, 112
1126         str     w0, [x19,8]
1127         mov     w0, 80
1128         bl      NandcDelayns
1129         ldr     w0, [x19]
1130         ldp     x19, x20, [sp,16]
1131         and     w0, w0, 1
1132         ldp     x29, x30, [sp], 48
1133         ret
1134         .size   SandiskProgTestBadBlock, .-SandiskProgTestBadBlock
1135         .align  2
1136         .global SandiskSetRRPara
1137         .type   SandiskSetRRPara, %function
1138 SandiskSetRRPara:
1139         stp     x29, x30, [sp, -32]!
1140         add     x29, sp, 0
1141         stp     x19, x20, [sp,16]
1142         mov     x20, x0
1143         mov     w0, 239
1144         uxtb    w19, w1
1145         add     w19, w19, 1
1146         str     w0, [x20,8]
1147         mov     w0, 17
1148         str     w0, [x20,4]
1149         mov     w0, 200
1150         bl      NandcDelayns
1151         adrp    x3, :got:ToshibaA19RefValue
1152         adrp    x2, :got:Toshiba15RefValue
1153         mov     w1, 5
1154         adrp    x4, :got:g_maxRegNum
1155         adrp    x5, :got:g_retryMode
1156         smull   x1, w19, w1
1157         ldr     x2, [x2, #:got_lo12:Toshiba15RefValue]
1158         ldr     x3, [x3, #:got_lo12:ToshibaA19RefValue]
1159         add     x3, x1, x3
1160         add     x1, x1, x2
1161         mov     x2, 0
1162 .L160:
1163         ldr     x0, [x4, #:got_lo12:g_maxRegNum]
1164         ldrb    w0, [x0]
1165         cmp     w0, w2
1166         bls     .L165
1167         ldr     x0, [x5, #:got_lo12:g_retryMode]
1168         ldrb    w0, [x0]
1169         cmp     w0, 67
1170         bne     .L161
1171         ldrsb   w0, [x3,x2]
1172         b       .L164
1173 .L161:
1174         ldrsb   w0, [x1,x2]
1175 .L164:
1176         str     w0, [x20]
1177         add     x2, x2, 1
1178         b       .L160
1179 .L165:
1180         mov     w0, 0
1181         bl      NandcWaitFlashReady
1182         ldp     x19, x20, [sp,16]
1183         ldp     x29, x30, [sp], 32
1184         ret
1185         .size   SandiskSetRRPara, .-SandiskSetRRPara
1186         .align  2
1187         .global NandcRandmzSel
1188         .type   NandcRandmzSel, %function
1189 NandcRandmzSel:
1190         adrp    x2, :got:gNandChipMap
1191         ubfiz   x0, x0, 4, 8
1192         ldr     x2, [x2, #:got_lo12:gNandChipMap]
1193         ldr     x0, [x2,x0]
1194         str     w1, [x0,336]
1195         ret
1196         .size   NandcRandmzSel, .-NandcRandmzSel
1197         .align  2
1198         .global FlashSetRandomizer
1199         .type   FlashSetRandomizer, %function
1200 FlashSetRandomizer:
1201         stp     x29, x30, [sp, -48]!
1202         add     x29, sp, 0
1203         str     x21, [sp,32]
1204         uxtb    w21, w0
1205         adrp    x0, :got:gNandcVer
1206         stp     x19, x20, [sp,16]
1207         mov     w19, w1
1208         ldr     x0, [x0, #:got_lo12:gNandcVer]
1209         ldr     w0, [x0]
1210         cmp     w0, 5
1211         bls     .L168
1212         adrp    x0, :got:random_seed
1213         and     w19, w1, 127
1214         ldr     x0, [x0, #:got_lo12:random_seed]
1215         ldrh    w19, [x0,w19,uxtw 1]
1216         adrp    x0, :got:gNandRandomizer
1217         ldr     x0, [x0, #:got_lo12:gNandRandomizer]
1218         ldrb    w0, [x0]
1219         cbz     w0, .L169
1220         mov     w0, w21
1221         bl      FlashRsvdBlkChk
1222         cmp     w0, wzr
1223         orr     w1, w19, -1073741824
1224         csel    w19, w1, w19, ne
1225 .L169:
1226         mov     w0, w21
1227         mov     w1, w19
1228         b       .L183
1229 .L168:
1230         cmp     w0, 4
1231         bne     .L167
1232         adrp    x0, :got:random_seed
1233         and     w2, w1, 127
1234         ldr     x0, [x0, #:got_lo12:random_seed]
1235         ldrh    w20, [x0,w2,uxtw 1]
1236         mov     w0, w21
1237         lsl     w20, w20, 8
1238         bl      FlashRsvdBlkChk
1239         cbz     w0, .L171
1240         adrp    x0, :got:gNandRandomizer
1241         ldr     x0, [x0, #:got_lo12:gNandRandomizer]
1242         ldrb    w0, [x0]
1243         cbz     w0, .L171
1244         ubfiz   w19, w19, 1, 7
1245         orr     w19, w19, 1
1246         orr     w20, w20, w19
1247 .L171:
1248         mov     w0, w21
1249         mov     w1, w20
1250 .L183:
1251         bl      NandcRandmzSel
1252 .L167:
1253         ldp     x19, x20, [sp,16]
1254         ldr     x21, [sp,32]
1255         ldp     x29, x30, [sp], 48
1256         ret
1257         .size   FlashSetRandomizer, .-FlashSetRandomizer
1258         .align  2
1259         .global FlashReadCmd
1260         .type   FlashReadCmd, %function
1261 FlashReadCmd:
1262         stp     x29, x30, [sp, -48]!
1263         add     x29, sp, 0
1264         str     x19, [sp,16]
1265         uxtb    w19, w0
1266         mov     w0, w19
1267         str     x1, [x29,40]
1268         bl      NandcGetChipIf
1269         str     wzr, [x0,8]
1270         str     wzr, [x0,4]
1271         ldr     x1, [x29,40]
1272         str     wzr, [x0,4]
1273         and     w2, w1, 255
1274         str     w2, [x0,4]
1275         lsr     w2, w1, 8
1276         str     w2, [x0,4]
1277         lsr     w2, w1, 16
1278         str     w2, [x0,4]
1279         mov     w2, 48
1280         str     w2, [x0,8]
1281         mov     w0, w19
1282         bl      FlashSetRandomizer
1283         ldr     x19, [sp,16]
1284         ldp     x29, x30, [sp], 48
1285         ret
1286         .size   FlashReadCmd, .-FlashReadCmd
1287         .align  2
1288         .global HynixGetReadRetryDefault
1289         .type   HynixGetReadRetryDefault, %function
1290 HynixGetReadRetryDefault:
1291         stp     x29, x30, [sp, -144]!
1292         mov     w4, -83
1293         mov     w3, -82
1294         add     x29, sp, 0
1295         stp     x19, x20, [sp,16]
1296         adrp    x19, :got:gReadRetryInfo
1297         stp     x27, x28, [sp,80]
1298         stp     x21, x22, [sp,32]
1299         ldr     x1, [x19, #:got_lo12:gReadRetryInfo]
1300         mov     w28, w0
1301         stp     x23, x24, [sp,48]
1302         stp     x25, x26, [sp,64]
1303         strb    w0, [x1]
1304         mov     w0, -84
1305         strb    w4, [x1,5]
1306         cmp     w28, 2
1307         strb    w0, [x1,4]
1308         mov     w0, -81
1309         strb    w3, [x1,6]
1310         strb    w0, [x1,7]
1311         bne     .L186
1312         mov     w0, -89
1313         strb    w0, [x1,4]
1314         adrp    x0, :got:refValueDefault
1315         mov     w1, -9
1316         ldr     x0, [x0, #:got_lo12:refValueDefault]
1317         strb    w1, [x0,17]
1318         b       .L223
1319 .L186:
1320         cmp     w28, 3
1321         bne     .L188
1322         mov     w0, -80
1323         strb    w0, [x1,4]
1324         mov     w0, -79
1325         strb    w0, [x1,5]
1326         mov     w0, -78
1327         strb    w0, [x1,6]
1328         mov     w0, -77
1329         strb    w0, [x1,7]
1330         mov     w0, -76
1331         strb    w0, [x1,8]
1332         mov     w0, -75
1333         strb    w0, [x1,9]
1334         mov     w0, -74
1335         strb    w0, [x1,10]
1336         mov     w0, -73
1337         b       .L239
1338 .L188:
1339         cmp     w28, 4
1340         bne     .L189
1341         mov     w5, -52
1342         strb    w5, [x1,4]
1343         mov     w5, -65
1344         strb    w5, [x1,5]
1345         mov     w5, -86
1346         strb    w5, [x1,6]
1347         mov     w5, -85
1348         strb    w4, [x1,9]
1349         strb    w5, [x1,7]
1350         mov     w5, -51
1351         strb    w3, [x1,10]
1352         strb    w5, [x1,8]
1353 .L239:
1354         mov     w21, 8
1355         strb    w0, [x1,11]
1356         mov     w20, w21
1357         b       .L187
1358 .L189:
1359         cmp     w28, 5
1360         bne     .L190
1361         mov     w0, 56
1362         strb    w0, [x1,4]
1363         mov     w0, 57
1364         strb    w0, [x1,5]
1365         mov     w0, 58
1366         mov     w21, 8
1367         strb    w0, [x1,6]
1368         mov     w0, 59
1369         strb    w0, [x1,7]
1370         b       .L238
1371 .L190:
1372         cmp     w28, 6
1373         bne     .L223
1374         mov     w0, 14
1375         strb    w0, [x1,4]
1376         mov     w0, 15
1377         strb    w0, [x1,5]
1378         mov     w0, 16
1379         mov     w21, 12
1380         strb    w0, [x1,6]
1381         mov     w0, 17
1382         strb    w0, [x1,7]
1383         b       .L238
1384 .L223:
1385         mov     w21, 7
1386 .L238:
1387         mov     w20, 4
1388 .L187:
1389         sub     w0, w28, #1
1390         cmp     w0, 1
1391         bhi     .L235
1392         mov     w27, 0
1393         adrp    x23, :got:gNandMaxDie
1394         adrp    x24, :got:DieCsIndex
1395         mov     w25, 55
1396         adrp    x26, :got:refValueDefault
1397 .L191:
1398         ldr     x0, [x23, #:got_lo12:gNandMaxDie]
1399         ldrb    w0, [x0]
1400         cmp     w0, w27
1401         bls     .L198
1402         ldr     x0, [x24, #:got_lo12:DieCsIndex]
1403         mov     x28, 0
1404         ldr     x22, [x19, #:got_lo12:gReadRetryInfo]
1405         ldrb    w0, [x0,w27,sxtw]
1406         sbfiz   x1, x0, 6, 32
1407         add     x22, x22, x1
1408         add     x22, x22, 20
1409         bl      NandcGetChipIf
1410         mov     x1, x0
1411 .L193:
1412         str     w25, [x1,8]
1413         str     x1, [x29,136]
1414         ldr     x0, [x19, #:got_lo12:gReadRetryInfo]
1415         add     x0, x28, x0
1416         ldrb    w0, [x0,4]
1417         str     w0, [x1,4]
1418         mov     w0, 80
1419         bl      NandcDelayns
1420         ldr     x1, [x29,136]
1421         ldr     w0, [x1]
1422         strb    w0, [x22,x28]
1423         add     x28, x28, 1
1424         cmp     w20, w28, uxtb
1425         bhi     .L193
1426         mov     x0, 0
1427 .L194:
1428         add     w2, w0, 8
1429         mov     x1, 0
1430 .L195:
1431         ldr     x3, [x26, #:got_lo12:refValueDefault]
1432         add     x4, x1, x0
1433         add     x1, x1, 4
1434         add     x3, x4, x3
1435         cmp     x1, 24
1436         ldrb    w4, [x3,4]
1437         ldrb    w3, [x22,x0]
1438         add     w3, w4, w3
1439         strb    w3, [x22,w2,sxtw]
1440         add     w2, w2, 8
1441         bne     .L195
1442         add     x0, x0, 1
1443         cmp     x0, 4
1444         bne     .L194
1445         add     w27, w27, 1
1446         strb    wzr, [x22,16]
1447         strb    wzr, [x22,24]
1448         strb    wzr, [x22,32]
1449         uxtb    w27, w27
1450         strb    wzr, [x22,40]
1451         strb    wzr, [x22,48]
1452         strb    wzr, [x22,41]
1453         strb    wzr, [x22,49]
1454         b       .L191
1455 .L235:
1456         sub     w0, w28, #3
1457         cmp     w0, 3
1458         bhi     .L198
1459         mul     w0, w20, w21
1460         sub     w25, w20, #1
1461         cmp     w28, 6
1462         asr     w24, w0, 2
1463         lsl     w0, w0, 4
1464         str     w0, [x29,136]
1465         lsl     w0, w24, 1
1466         mov     w1, 4
1467         str     w0, [x29,128]
1468         mov     w0, 8
1469         uxtb    x25, w25
1470         csel    w0, w1, w0, eq
1471         mov     w22, 0
1472         str     w0, [x29,132]
1473         sub     w27, w28, #5
1474         add     x0, x25, 1
1475         str     x0, [x29,120]
1476 .L199:
1477         adrp    x0, :got:gNandMaxDie
1478         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
1479         ldrb    w0, [x0]
1480         cmp     w0, w22
1481         bhi     .L222
1482 .L198:
1483         ldr     x19, [x19, #:got_lo12:gReadRetryInfo]
1484         strb    w20, [x19,1]
1485         strb    w21, [x19,2]
1486         ldp     x19, x20, [sp,16]
1487         ldp     x21, x22, [sp,32]
1488         ldp     x23, x24, [sp,48]
1489         ldp     x25, x26, [sp,64]
1490         ldp     x27, x28, [sp,80]
1491         ldp     x29, x30, [sp], 144
1492         ret
1493 .L222:
1494         adrp    x0, :got:DieCsIndex
1495         ldr     x3, [x19, #:got_lo12:gReadRetryInfo]
1496         str     x3, [x29,104]
1497         ldr     x0, [x0, #:got_lo12:DieCsIndex]
1498         ldrb    w23, [x0,w22,sxtw]
1499         mov     w0, w23
1500         sbfiz   x26, x23, 6, 32
1501         add     x26, x3, x26
1502         bl      NandcGetChipIf
1503         mov     x25, x0
1504         mov     w4, 255
1505         str     w4, [x0,8]
1506         mov     w0, w23
1507         str     x4, [x29,112]
1508         add     x26, x26, 20
1509         bl      NandcWaitFlashReady
1510         mov     w0, 54
1511         cmp     w28, 4
1512         str     w0, [x25,8]
1513         ldr     x4, [x29,112]
1514         ldr     x3, [x29,104]
1515         bne     .L200
1516         mov     w0, 64
1517         str     w4, [x25,4]
1518         str     w0, [x25]
1519         mov     w0, 204
1520         b       .L240
1521 .L200:
1522         cmp     w27, 1
1523         bhi     .L202
1524         ldrb    w0, [x3,4]
1525         str     w0, [x25,4]
1526         mov     w0, 82
1527         b       .L241
1528 .L202:
1529         mov     w0, 174
1530         str     w0, [x25,4]
1531         str     wzr, [x25]
1532         mov     w0, 176
1533 .L240:
1534         str     w0, [x25,4]
1535         mov     w0, 77
1536 .L241:
1537         str     w0, [x25]
1538         mov     w0, 22
1539         str     w0, [x25,8]
1540         mov     w0, 23
1541         str     w0, [x25,8]
1542         mov     w0, 4
1543         str     w0, [x25,8]
1544         mov     w0, 25
1545         str     w0, [x25,8]
1546         cmp     w28, 6
1547         str     wzr, [x25,8]
1548         str     wzr, [x25,4]
1549         str     wzr, [x25,4]
1550         bne     .L203
1551         mov     w0, 31
1552         str     w0, [x25,4]
1553         b       .L204
1554 .L203:
1555         str     wzr, [x25,4]
1556 .L204:
1557         mov     w3, 2
1558         str     w3, [x25,4]
1559         str     wzr, [x25,4]
1560         mov     w0, 48
1561         str     w0, [x25,8]
1562         mov     w0, w23
1563         str     x3, [x29,112]
1564         bl      NandcWaitFlashReady
1565         ldr     x3, [x29,112]
1566         mov     w0, 16
1567         cmp     w27, 1
1568         csel    w3, w3, w0, hi
1569         mov     w0, 0
1570 .L206:
1571         add     w0, w0, 1
1572         ldr     w4, [x25]
1573         uxtb    w0, w0
1574         cmp     w0, w3
1575         bne     .L206
1576         adrp    x4, :got:gFlashPageBuffer0
1577         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
1578         ldr     x7, [x0]
1579         mov     x0, 0
1580 .L207:
1581         ldr     w1, [x29,136]
1582         cmp     w1, w0
1583         ble     .L242
1584         ldr     w3, [x25]
1585         strb    w3, [x7,x0]
1586         add     x0, x0, 1
1587         b       .L207
1588 .L242:
1589         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
1590         mov     w6, w24
1591         mov     w5, 8
1592         ldr     x9, [x0]
1593 .L210:
1594         mov     w0, 0
1595 .L209:
1596         add     w3, w0, w6
1597         add     w0, w0, 1
1598         sbfiz   x3, x3, 2, 32
1599         cmp     w0, w24
1600         ldr     w8, [x9,x3]
1601         mvn     w8, w8
1602         str     w8, [x9,x3]
1603         bne     .L209
1604         ldr     w0, [x29,128]
1605         subs    w5, w5, #1
1606         add     w6, w6, w0
1607         bne     .L210
1608         mov     x5, 0
1609         mov     w13, 1
1610 .L211:
1611         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
1612         mov     w3, 0
1613         mov     w8, w3
1614         ldr     x12, [x0]
1615 .L215:
1616         lsl     w6, w13, w8
1617         mov     w10, w5
1618         mov     w0, 16
1619         mov     w9, 0
1620 .L213:
1621         ldr     w11, [x12,w10,sxtw 2]
1622         add     w10, w10, w24
1623         and     w11, w6, w11
1624         cmp     w11, w6
1625         csinc   w9, w9, w9, ne
1626         subs    w0, w0, #1
1627         bne     .L213
1628         cmp     w9, 9
1629         orr     w6, w3, w6
1630         add     w8, w8, 1
1631         csel    w3, w6, w3, cs
1632         cmp     w8, 32
1633         bne     .L215
1634         str     w3, [x12,x5,lsl 2]
1635         add     x5, x5, 1
1636         cmp     w24, w5
1637         bgt     .L211
1638         mov     w4, w0
1639 .L218:
1640         mov     x3, 0
1641 .L217:
1642         add     w5, w0, w3
1643         ldrb    w6, [x7,x3]
1644         add     x3, x3, 1
1645         cmp     w20, w3, uxtb
1646         strb    w6, [x26,w5,sxtw]
1647         bhi     .L217
1648         ldr     x1, [x29,120]
1649         add     w4, w4, 1
1650         cmp     w4, w21
1651         add     x7, x7, x1
1652         ldr     w1, [x29,132]
1653         add     w0, w0, w1
1654         blt     .L218
1655         mov     w0, 255
1656         str     w0, [x25,8]
1657         mov     w0, w23
1658         bl      NandcWaitFlashReady
1659         cmp     w27, 1
1660         bhi     .L220
1661         mov     w0, 54
1662         str     w0, [x25,8]
1663         mov     w1, -1
1664         ldr     x0, [x19, #:got_lo12:gReadRetryInfo]
1665         ldrb    w0, [x0,4]
1666         str     w0, [x25,4]
1667         mov     w0, 22
1668         str     wzr, [x25]
1669         str     w0, [x25,8]
1670         mov     w0, w22
1671         bl      FlashReadCmd
1672         b       .L221
1673 .L220:
1674         mov     w0, 56
1675         str     w0, [x25,8]
1676 .L221:
1677         mov     w0, w23
1678         add     w22, w22, 1
1679         bl      NandcWaitFlashReady
1680         uxtb    w22, w22
1681         b       .L199
1682         .size   HynixGetReadRetryDefault, .-HynixGetReadRetryDefault
1683         .align  2
1684         .global FlashReadDpDataOutCmd
1685         .type   FlashReadDpDataOutCmd, %function
1686 FlashReadDpDataOutCmd:
1687         stp     x29, x30, [sp, -48]!
1688         add     x29, sp, 0
1689         str     x19, [sp,16]
1690         uxtb    w19, w0
1691         mov     w0, w19
1692         str     x1, [x29,40]
1693         bl      NandcGetChipIf
1694         adrp    x2, :got:gNandOptPara
1695         ldr     x1, [x29,40]
1696         and     w4, w1, 255
1697         lsr     w3, w1, 8
1698         ldr     x2, [x2, #:got_lo12:gNandOptPara]
1699         ldrb    w2, [x2,16]
1700         cmp     w2, 1
1701         lsr     w2, w1, 16
1702         bne     .L244
1703         mov     w5, 6
1704         str     w5, [x0,8]
1705         str     wzr, [x0,4]
1706         str     wzr, [x0,4]
1707         str     w4, [x0,4]
1708         str     w3, [x0,4]
1709         str     w2, [x0,4]
1710         b       .L246
1711 .L244:
1712         str     wzr, [x0,8]
1713         str     wzr, [x0,4]
1714         str     wzr, [x0,4]
1715         str     w4, [x0,4]
1716         str     w3, [x0,4]
1717         str     w2, [x0,4]
1718         mov     w2, 5
1719         str     w2, [x0,8]
1720         str     wzr, [x0,4]
1721         str     wzr, [x0,4]
1722 .L246:
1723         mov     w2, 224
1724         str     w2, [x0,8]
1725         mov     w0, w19
1726         bl      FlashSetRandomizer
1727         ldr     x19, [sp,16]
1728         ldp     x29, x30, [sp], 48
1729         ret
1730         .size   FlashReadDpDataOutCmd, .-FlashReadDpDataOutCmd
1731         .align  2
1732         .global FlashReadDpCmd
1733         .type   FlashReadDpCmd, %function
1734 FlashReadDpCmd:
1735         stp     x29, x30, [sp, -80]!
1736         add     x29, sp, 0
1737         stp     x21, x22, [sp,32]
1738         uxtb    w21, w0
1739         str     x23, [sp,48]
1740         mov     w0, w21
1741         str     x1, [x29,64]
1742         stp     x19, x20, [sp,16]
1743         str     x2, [x29,72]
1744         bl      NandcGetChipIf
1745         adrp    x3, :got:gNandOptPara
1746         mov     x19, x0
1747         ldr     x1, [x29,64]
1748         ldr     x2, [x29,72]
1749         ldr     x3, [x3, #:got_lo12:gNandOptPara]
1750         and     w5, w1, 255
1751         lsr     w4, w1, 8
1752         and     w23, w2, 255
1753         lsr     w22, w2, 8
1754         lsr     w20, w2, 16
1755         ldrb    w0, [x3,16]
1756         cmp     w0, 1
1757         lsr     w0, w1, 16
1758         bne     .L248
1759         ldrb    w2, [x3,8]
1760         str     w2, [x19,8]
1761         str     wzr, [x19,4]
1762         str     wzr, [x19,4]
1763         str     w5, [x19,4]
1764         str     w4, [x19,4]
1765         str     w0, [x19,4]
1766         str     x1, [x29,72]
1767         ldrb    w0, [x3,9]
1768         str     w0, [x19,8]
1769         mov     w0, w21
1770         bl      NandcWaitFlashReady
1771         str     wzr, [x19,8]
1772         str     wzr, [x19,4]
1773         mov     w0, 48
1774         str     wzr, [x19,4]
1775         str     w23, [x19,4]
1776         str     w22, [x19,4]
1777         str     w20, [x19,4]
1778         str     w0, [x19,8]
1779         ldr     x1, [x29,72]
1780         b       .L249
1781 .L248:
1782         ldrb    w2, [x3,8]
1783         str     w2, [x19,8]
1784         str     w5, [x19,4]
1785         str     w4, [x19,4]
1786         str     w0, [x19,4]
1787         ldrb    w0, [x3,9]
1788         str     w0, [x19,8]
1789         mov     w0, 48
1790         str     w23, [x19,4]
1791         str     w22, [x19,4]
1792         str     w20, [x19,4]
1793         str     w0, [x19,8]
1794 .L249:
1795         mov     w0, w21
1796         bl      FlashSetRandomizer
1797         ldr     x23, [sp,48]
1798         ldp     x19, x20, [sp,16]
1799         ldp     x21, x22, [sp,32]
1800         ldp     x29, x30, [sp], 80
1801         ret
1802         .size   FlashReadDpCmd, .-FlashReadDpCmd
1803         .align  2
1804         .global FlashProgFirstCmd
1805         .type   FlashProgFirstCmd, %function
1806 FlashProgFirstCmd:
1807         stp     x29, x30, [sp, -48]!
1808         add     x29, sp, 0
1809         str     x19, [sp,16]
1810         uxtb    w19, w0
1811         mov     w0, w19
1812         str     x1, [x29,40]
1813         bl      NandcGetChipIf
1814         mov     w2, 128
1815         str     w2, [x0,8]
1816         str     wzr, [x0,4]
1817         ldr     x1, [x29,40]
1818         str     wzr, [x0,4]
1819         and     w2, w1, 255
1820         str     w2, [x0,4]
1821         lsr     w2, w1, 8
1822         str     w2, [x0,4]
1823         lsr     w2, w1, 16
1824         str     w2, [x0,4]
1825         mov     w0, w19
1826         bl      FlashSetRandomizer
1827         ldr     x19, [sp,16]
1828         ldp     x29, x30, [sp], 48
1829         ret
1830         .size   FlashProgFirstCmd, .-FlashProgFirstCmd
1831         .align  2
1832         .global FlashProgDpSecondCmd
1833         .type   FlashProgDpSecondCmd, %function
1834 FlashProgDpSecondCmd:
1835         stp     x29, x30, [sp, -48]!
1836         add     x29, sp, 0
1837         str     x19, [sp,16]
1838         uxtb    w19, w0
1839         mov     w0, w19
1840         str     x1, [x29,40]
1841         bl      NandcGetChipIf
1842         adrp    x2, :got:gNandOptPara
1843         ldr     x1, [x29,40]
1844         ldr     x2, [x2, #:got_lo12:gNandOptPara]
1845         ldrb    w2, [x2,11]
1846         str     w2, [x0,8]
1847         and     w2, w1, 255
1848         str     wzr, [x0,4]
1849         str     wzr, [x0,4]
1850         str     w2, [x0,4]
1851         lsr     w2, w1, 8
1852         str     w2, [x0,4]
1853         lsr     w2, w1, 16
1854         str     w2, [x0,4]
1855         mov     w0, w19
1856         bl      FlashSetRandomizer
1857         ldr     x19, [sp,16]
1858         ldp     x29, x30, [sp], 48
1859         ret
1860         .size   FlashProgDpSecondCmd, .-FlashProgDpSecondCmd
1861         .align  2
1862         .global FlashDeInit
1863         .type   FlashDeInit, %function
1864 FlashDeInit:
1865         stp     x29, x30, [sp, -32]!
1866         mov     w0, 0
1867         add     x29, sp, 0
1868         str     x19, [sp,16]
1869         adrp    x19, :got:gFlashToggleModeEn
1870         bl      NandcWaitFlashReady
1871         bl      FlashSetReadRetryDefault
1872         ldr     x19, [x19, #:got_lo12:gFlashToggleModeEn]
1873         ldrb    w0, [x19]
1874         cbz     w0, .L253
1875         adrp    x0, :got:gFlashInterfaceMode
1876         ldr     x0, [x0, #:got_lo12:gFlashInterfaceMode]
1877         ldrb    w0, [x0]
1878         tbz     x0, 0, .L253
1879         mov     w0, 1
1880         bl      FlashSetInterfaceMode
1881         mov     w0, 1
1882         bl      NandcSetMode
1883         strb    wzr, [x19]
1884 .L253:
1885         mov     w0, 0
1886         mov     w1, 0
1887         bl      NandcRandmzSel
1888         ldr     x19, [sp,16]
1889         mov     w0, 0
1890         ldp     x29, x30, [sp], 32
1891         ret
1892         .size   FlashDeInit, .-FlashDeInit
1893         .align  2
1894         .global NandcTimeCfg
1895         .type   NandcTimeCfg, %function
1896 NandcTimeCfg:
1897         stp     x29, x30, [sp, -32]!
1898         add     x29, sp, 0
1899         str     x19, [sp,16]
1900         mov     w19, w0
1901         mov     w0, 0
1902         bl      rknand_get_clk_rate
1903         mov     w2, 16960
1904         adrp    x1, :got:gpNandc
1905         movk    w2, 0xf, lsl 16
1906         sdiv    w0, w0, w2
1907         cmp     w0, 250
1908         ble     .L261
1909         ldr     x0, [x1, #:got_lo12:gpNandc]
1910         mov     w2, 8354
1911         ldr     x0, [x0]
1912         b       .L272
1913 .L261:
1914         cmp     w0, 220
1915         ble     .L263
1916         ldr     x0, [x1, #:got_lo12:gpNandc]
1917         ldr     x0, [x0]
1918         b       .L273
1919 .L263:
1920         cmp     w0, 185
1921         ble     .L264
1922         ldr     x0, [x1, #:got_lo12:gpNandc]
1923         mov     w2, 4226
1924         ldr     x0, [x0]
1925         b       .L272
1926 .L264:
1927         cmp     w0, 160
1928         ldr     x0, [x1, #:got_lo12:gpNandc]
1929         ldr     x0, [x0]
1930         ble     .L265
1931         mov     w2, 4194
1932         b       .L272
1933 .L265:
1934         cmp     w19, 35
1935         mov     w2, 4193
1936         bls     .L272
1937         cmp     w19, 99
1938         mov     w2, 4225
1939         bls     .L272
1940 .L273:
1941         mov     w2, 8322
1942 .L272:
1943         str     w2, [x0,4]
1944         adrp    x0, :got:gpNandc1
1945         ldr     x0, [x0, #:got_lo12:gpNandc1]
1946         ldr     x0, [x0]
1947         cbz     x0, .L260
1948         ldr     x1, [x1, #:got_lo12:gpNandc]
1949         ldr     x1, [x1]
1950         ldr     w1, [x1,4]
1951         str     w1, [x0,4]
1952 .L260:
1953         ldr     x19, [sp,16]
1954         ldp     x29, x30, [sp], 32
1955         ret
1956         .size   NandcTimeCfg, .-NandcTimeCfg
1957         .align  2
1958         .global FlashTimingCfg
1959         .type   FlashTimingCfg, %function
1960 FlashTimingCfg:
1961         sub     w1, w0, #4096
1962         sub     w1, w1, #97
1963         stp     x29, x30, [sp, -16]!
1964         and     w1, w1, -33
1965         cmp     w1, 1
1966         add     x29, sp, 0
1967         bls     .L275
1968         mov     w1, 8322
1969         cmp     w0, w1
1970         bne     .L276
1971 .L275:
1972         adrp    x1, :got:gpNandc
1973         ldr     x1, [x1, #:got_lo12:gpNandc]
1974         ldr     x2, [x1]
1975         str     w0, [x2,4]
1976         adrp    x0, :got:gpNandc1
1977         ldr     x0, [x0, #:got_lo12:gpNandc1]
1978         ldr     x0, [x0]
1979         cbz     x0, .L276
1980         ldr     x1, [x1]
1981         ldr     w1, [x1,4]
1982         str     w1, [x0,4]
1983 .L276:
1984         adrp    x0, :got:gNandParaInfo
1985         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
1986         ldrb    w0, [x0,21]
1987         bl      NandcTimeCfg
1988         ldp     x29, x30, [sp], 16
1989         ret
1990         .size   FlashTimingCfg, .-FlashTimingCfg
1991         .align  2
1992         .global NandcGetTimeCfg
1993         .type   NandcGetTimeCfg, %function
1994 NandcGetTimeCfg:
1995         adrp    x4, :got:gpNandc
1996         ldr     x4, [x4, #:got_lo12:gpNandc]
1997         ldr     x5, [x4]
1998         ldr     w5, [x5,4]
1999         str     w5, [x0]
2000         ldr     x0, [x4]
2001         ldr     w0, [x0]
2002         str     w0, [x1]
2003         ldr     x0, [x4]
2004         ldr     w0, [x0,304]
2005         str     w0, [x2]
2006         ldr     x1, [x4]
2007         ldr     w0, [x1,308]
2008         ldr     w1, [x1,344]
2009         and     w0, w0, 255
2010         orr     w0, w0, w1, lsl 16
2011         str     w0, [x3]
2012         ret
2013         .size   NandcGetTimeCfg, .-NandcGetTimeCfg
2014         .align  2
2015         .global NandcBchSel
2016         .type   NandcBchSel, %function
2017 NandcBchSel:
2018         adrp    x1, :got:gpNandc
2019         mov     w2, 1
2020         uxtb    w0, w0
2021         cmp     w0, 16
2022         ldr     x1, [x1, #:got_lo12:gpNandc]
2023         ldr     x3, [x1]
2024         adrp    x1, :got:gNandcEccBits
2025         str     w2, [x3,8]
2026         ldr     x1, [x1, #:got_lo12:gNandcEccBits]
2027         str     w0, [x1]
2028         mov     w1, 4096
2029         bne     .L283
2030 .L286:
2031         and     w1, w1, -17
2032         b       .L284
2033 .L283:
2034         cmp     w0, 24
2035         bne     .L285
2036         orr     w1, w1, 16
2037         b       .L284
2038 .L285:
2039         cmp     w0, 40
2040         orr     w1, w1, 262144
2041         orr     w1, w1, 16
2042         beq     .L286
2043 .L284:
2044         adrp    x0, :got:gpNandc1
2045         orr     w1, w1, 1
2046         str     w1, [x3,12]
2047         ldr     x0, [x0, #:got_lo12:gpNandc1]
2048         ldr     x0, [x0]
2049         cbz     x0, .L282
2050         str     w2, [x0,8]
2051         str     w1, [x0,12]
2052 .L282:
2053         ret
2054         .size   NandcBchSel, .-NandcBchSel
2055         .align  2
2056         .global FlashBchSel
2057         .type   FlashBchSel, %function
2058 FlashBchSel:
2059         adrp    x1, :got:gNandFlashEccBits
2060         uxtb    w0, w0
2061         stp     x29, x30, [sp, -16]!
2062         add     x29, sp, 0
2063         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
2064         strb    w0, [x1]
2065         bl      NandcBchSel
2066         ldp     x29, x30, [sp], 16
2067         ret
2068         .size   FlashBchSel, .-FlashBchSel
2069         .align  2
2070         .global FlashResume
2071         .type   FlashResume, %function
2072 FlashResume:
2073         adrp    x1, :got:gpNandc
2074         stp     x29, x30, [sp, -48]!
2075         add     x29, sp, 0
2076         ldr     x1, [x1, #:got_lo12:gpNandc]
2077         stp     x19, x20, [sp,16]
2078         str     x21, [sp,32]
2079         adrp    x19, .LANCHOR0
2080         add     x0, x19, :lo12:.LANCHOR0
2081         ldr     x2, [x1]
2082         ldr     w9, [x19,#:lo12:.LANCHOR0]
2083         ldr     w8, [x0,4]
2084         str     w9, [x2]
2085         ldr     w7, [x0,8]
2086         ldr     x2, [x1]
2087         ldr     w6, [x0,12]
2088         ldr     w5, [x0,16]
2089         str     w8, [x2,4]
2090         ldr     w4, [x0,20]
2091         ldr     x1, [x1]
2092         ldr     w3, [x0,24]
2093         ldr     w2, [x0,28]
2094         adrp    x0, :got:gpNandc1
2095         str     w7, [x1,8]
2096         str     w6, [x1,12]
2097         str     w5, [x1,304]
2098         str     w4, [x1,308]
2099         str     w3, [x1,336]
2100         str     w2, [x1,344]
2101         ldr     x0, [x0, #:got_lo12:gpNandc1]
2102         ldr     x1, [x0]
2103         cbz     x1, .L296
2104         str     w9, [x1]
2105         ldr     x1, [x0]
2106         str     w8, [x1,4]
2107         ldr     x0, [x0]
2108         str     w7, [x0,8]
2109         str     w6, [x0,12]
2110         str     w5, [x0,304]
2111         str     w4, [x0,308]
2112         str     w3, [x0,336]
2113         str     w2, [x0,344]
2114 .L296:
2115         mov     x20, 0
2116         adrp    x21, :got:IDByte
2117 .L298:
2118         lsl     x0, x20, 3
2119         ldr     x1, [x21, #:got_lo12:IDByte]
2120         ldrb    w0, [x0,x1]
2121         sub     w0, w0, #1
2122         uxtb    w0, w0
2123         cmp     w0, 253
2124         bhi     .L297
2125         mov     w0, w20
2126         bl      FlashReset
2127 .L297:
2128         add     x20, x20, 1
2129         cmp     x20, 8
2130         bne     .L298
2131         adrp    x0, :got:gFlashToggleModeEn
2132         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
2133         ldrb    w0, [x0]
2134         cbz     w0, .L299
2135         adrp    x20, :got:gFlashInterfaceMode
2136         mov     w0, 1
2137         add     x19, x19, :lo12:.LANCHOR0
2138         bl      NandcSetMode
2139         ldr     x20, [x20, #:got_lo12:gFlashInterfaceMode]
2140         ldrb    w0, [x20]
2141         bl      FlashSetInterfaceMode
2142         ldrb    w0, [x20]
2143         bl      NandcSetMode
2144         ldr     w0, [x19,16]
2145         lsr     w0, w0, 8
2146         bl      NandcSetDdrPara
2147 .L299:
2148         adrp    x0, :got:gpNandParaInfo
2149         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
2150         ldr     x0, [x0]
2151         ldrb    w0, [x0,20]
2152         bl      FlashBchSel
2153         ldr     x21, [sp,32]
2154         mov     w0, 0
2155         ldp     x19, x20, [sp,16]
2156         ldp     x29, x30, [sp], 48
2157         ret
2158         .size   FlashResume, .-FlashResume
2159         .align  2
2160         .global NandCIrqEnable
2161         .type   NandCIrqEnable, %function
2162 NandCIrqEnable:
2163         ldr     w3, [x0,368]
2164         mov     x2, 1
2165         lsl     x1, x2, x1
2166         orr     w3, w3, w1
2167         str     w3, [x0,368]
2168         ldr     w2, [x0,364]
2169         orr     w1, w2, w1
2170         str     w1, [x0,364]
2171         ret
2172         .size   NandCIrqEnable, .-NandCIrqEnable
2173         .align  2
2174         .global NandCIrqDisable
2175         .type   NandCIrqDisable, %function
2176 NandCIrqDisable:
2177         ldr     w3, [x0,368]
2178         mov     x2, 1
2179         lsl     x1, x2, x1
2180         orr     w3, w3, w1
2181         str     w3, [x0,368]
2182         ldr     w2, [x0,364]
2183         bic     w1, w2, w1
2184         str     w1, [x0,364]
2185         ret
2186         .size   NandCIrqDisable, .-NandCIrqDisable
2187         .align  2
2188         .global rk_nandc_get_irq_status
2189         .type   rk_nandc_get_irq_status, %function
2190 rk_nandc_get_irq_status:
2191         ldr     w0, [x0,372]
2192         ret
2193         .size   rk_nandc_get_irq_status, .-rk_nandc_get_irq_status
2194         .align  2
2195         .global rk_nandc_flash_ready
2196         .type   rk_nandc_flash_ready, %function
2197 rk_nandc_flash_ready:
2198         stp     x29, x30, [sp, -16]!
2199         mov     w1, 1
2200         add     x29, sp, 0
2201         bl      NandCIrqDisable
2202         ldp     x29, x30, [sp], 16
2203         ret
2204         .size   rk_nandc_flash_ready, .-rk_nandc_flash_ready
2205         .align  2
2206         .global NandcIqrWaitFlashReady
2207         .type   NandcIqrWaitFlashReady, %function
2208 NandcIqrWaitFlashReady:
2209         stp     x29, x30, [sp, -32]!
2210         add     x29, sp, 0
2211         str     x19, [sp,16]
2212         mov     x19, x0
2213         bl      rk_nandc_rb_irq_flag_init
2214         mov     x0, x19
2215         mov     w1, 1
2216         bl      NandCIrqEnable
2217         ldr     w0, [x19]
2218         tbnz    x0, 9, .L312
2219         mov     x0, x19
2220         bl      wait_for_nand_flash_ready
2221         b       .L311
2222 .L312:
2223         mov     x0, x19
2224         mov     w1, 1
2225         bl      NandCIrqDisable
2226 .L311:
2227         ldr     x19, [sp,16]
2228         ldp     x29, x30, [sp], 32
2229         ret
2230         .size   NandcIqrWaitFlashReady, .-NandcIqrWaitFlashReady
2231         .align  2
2232         .global FlashEraseBlocks
2233         .type   FlashEraseBlocks, %function
2234 FlashEraseBlocks:
2235         stp     x29, x30, [sp, -128]!
2236         add     x29, sp, 0
2237         stp     x19, x20, [sp,16]
2238         stp     x21, x22, [sp,32]
2239         stp     x25, x26, [sp,64]
2240         stp     x27, x28, [sp,80]
2241         stp     x23, x24, [sp,48]
2242         mov     x20, x0
2243         mov     w21, w1
2244         mov     w19, 0
2245         mov     w22, 56
2246         add     x25, x29, 120
2247         add     x26, x29, 124
2248         adrp    x27, :got:gMultiPageProgEn
2249         adrp    x28, :got:gDieOp
2250 .L315:
2251         cmp     w19, w21
2252         adrp    x23, :got:gNandMaxDie
2253         bcs     .L337
2254         umull   x5, w19, w22
2255         mov     w1, 0
2256         sub     w4, w21, w19
2257         add     x23, x20, x5
2258         mov     x2, x25
2259         mov     x0, x23
2260         mov     x3, x26
2261         str     x5, [x29,104]
2262         bl      LogAddr2PhyAddr
2263         mov     w24, w0
2264         adrp    x1, :got:gNandMaxDie
2265         ldr     w0, [x29,124]
2266         ldr     x5, [x29,104]
2267         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
2268         ldrb    w1, [x1]
2269         cmp     w0, w1
2270         bcc     .L316
2271         mov     w0, -1
2272         str     w0, [x20,x5]
2273         b       .L317
2274 .L316:
2275         ldr     x1, [x27, #:got_lo12:gMultiPageProgEn]
2276         mov     x5, 24
2277         ldr     x4, [x28, #:got_lo12:gDieOp]
2278         ldrb    w1, [x1]
2279         cmp     w1, wzr
2280         uxtw    x1, w0
2281         csel    w24, w24, wzr, ne
2282         madd    x1, x1, x5, x4
2283         adrp    x4, :got:gDieOp
2284         ldr     x1, [x1,8]
2285         cbz     x1, .L319
2286         str     x4, [x29,104]
2287         bl      FlashWaitCmdDone
2288         ldr     x4, [x29,104]
2289 .L319:
2290         ldr     x2, [x4, #:got_lo12:gDieOp]
2291         mov     x1, 24
2292         ldr     w0, [x29,124]
2293         madd    x1, x0, x1, x2
2294         ldr     w2, [x29,120]
2295         str     x23, [x1,8]
2296         str     xzr, [x1,16]
2297         str     w2, [x1,4]
2298         cbz     w24, .L320
2299         add     w2, w19, 1
2300         umull   x2, w2, w22
2301         add     x2, x20, x2
2302         str     x2, [x1,16]
2303 .L320:
2304         adrp    x1, :got:DieCsIndex
2305         ldr     x4, [x4, #:got_lo12:gDieOp]
2306         add     w19, w19, w24
2307         ldr     x1, [x1, #:got_lo12:DieCsIndex]
2308         ldrb    w23, [x1,x0]
2309         mov     x1, 24
2310         mul     x0, x0, x1
2311         strb    w23, [x4,x0]
2312         mov     w0, w23
2313         bl      NandcFlashCs
2314         adrp    x0, :got:DieAddrs
2315         ldr     w1, [x29,124]
2316         ldr     x0, [x0, #:got_lo12:DieAddrs]
2317         ldr     w0, [x0,x1,lsl 2]
2318         ldr     w1, [x29,120]
2319         cmp     w0, wzr
2320         mov     w0, w23
2321         cset    w2, ne
2322         bl      FlashWaitReadyEN
2323         ldr     w1, [x29,120]
2324         mov     w0, w23
2325         mov     w2, w24
2326         bl      FlashEraseCmd
2327         mov     w0, w23
2328         bl      NandcFlashDeCs
2329 .L317:
2330         add     w19, w19, 1
2331         b       .L315
2332 .L337:
2333         adrp    x0, :got:gpNandc
2334         ldr     x0, [x0, #:got_lo12:gpNandc]
2335         ldr     x0, [x0]
2336         bl      NandcIqrWaitFlashReady
2337         adrp    x0, :got:gpNandc1
2338         ldr     x0, [x0, #:got_lo12:gpNandc1]
2339         ldr     x0, [x0]
2340         cbz     x0, .L322
2341         adrp    x1, :got:gNandc1_enable
2342         ldr     x1, [x1, #:got_lo12:gNandc1_enable]
2343         ldrb    w1, [x1]
2344         cbz     w1, .L322
2345         bl      NandcIqrWaitFlashReady
2346 .L322:
2347         mov     w19, 0
2348 .L323:
2349         ldr     x0, [x23, #:got_lo12:gNandMaxDie]
2350         ldrb    w0, [x0]
2351         cmp     w19, w0
2352         bcs     .L338
2353         mov     w0, w19
2354         add     w19, w19, 1
2355         bl      FlashWaitCmdDone
2356         b       .L323
2357 .L338:
2358         mov     w0, 0
2359         ldp     x19, x20, [sp,16]
2360         ldp     x21, x22, [sp,32]
2361         ldp     x23, x24, [sp,48]
2362         ldp     x25, x26, [sp,64]
2363         ldp     x27, x28, [sp,80]
2364         ldp     x29, x30, [sp], 128
2365         ret
2366         .size   FlashEraseBlocks, .-FlashEraseBlocks
2367         .align  2
2368         .global rk_nandc_flash_xfer_completed
2369         .type   rk_nandc_flash_xfer_completed, %function
2370 rk_nandc_flash_xfer_completed:
2371         stp     x29, x30, [sp, -16]!
2372         mov     w1, 0
2373         add     x29, sp, 0
2374         bl      NandCIrqDisable
2375         ldp     x29, x30, [sp], 16
2376         ret
2377         .size   rk_nandc_flash_xfer_completed, .-rk_nandc_flash_xfer_completed
2378         .align  2
2379         .global NandcSendDumpDataStart
2380         .type   NandcSendDumpDataStart, %function
2381 NandcSendDumpDataStart:
2382         sub     sp, sp, #16
2383         mov     w2, 1
2384         mov     w1, 10
2385         bfi     w1, w2, 5, 2
2386         ldr     w2, [x0,16]
2387         str     w2, [sp,8]
2388         orr     w1, w1, 536870912
2389         orr     w1, w1, 1024
2390         ldr     w2, [sp,8]
2391         orr     w1, w1, 2097152
2392         and     w2, w2, -5
2393         str     w2, [sp,8]
2394         ldr     w2, [sp,8]
2395         add     sp, sp, 16
2396         str     w2, [x0,16]
2397         str     w1, [x0,8]
2398         orr     w1, w1, 4
2399         str     w1, [x0,8]
2400         ret
2401         .size   NandcSendDumpDataStart, .-NandcSendDumpDataStart
2402         .align  2
2403         .global NandcSendDumpDataDone
2404         .type   NandcSendDumpDataDone, %function
2405 NandcSendDumpDataDone:
2406         sub     sp, sp, #16
2407 .L342:
2408         ldr     w1, [x0,8]
2409         str     w1, [sp,8]
2410         ldr     w1, [sp,8]
2411         tbz     x1, 20, .L342
2412         add     sp, sp, 16
2413         ret
2414         .size   NandcSendDumpDataDone, .-NandcSendDumpDataDone
2415         .align  2
2416         .global NandcXferStart
2417         .type   NandcXferStart, %function
2418 NandcXferStart:
2419         stp     x29, x30, [sp, -96]!
2420         ubfiz   x0, x0, 4, 8
2421         ubfx    x3, x3, 1, 7
2422         add     x29, sp, 0
2423         str     x25, [sp,64]
2424         uxtb    w25, w1
2425         adrp    x1, :got:gNandChipMap
2426         stp     x19, x20, [sp,16]
2427         stp     x21, x22, [sp,32]
2428         ldr     x1, [x1, #:got_lo12:gNandChipMap]
2429         ubfiz   w19, w25, 1, 1
2430         stp     x23, x24, [sp,48]
2431         uxtb    w23, w2
2432         add     x2, x1, x0
2433         ldr     x21, [x1,x0]
2434         mov     w1, 16
2435         orr     w19, w19, 8
2436         mov     x22, x4
2437         ldrb    w0, [x2,8]
2438         ldr     w24, [x21,12]
2439         bfi     w24, w1, 8, 8
2440         and     w24, w24, -9
2441         bfi     w24, w0, 5, 3
2442         mov     w0, 1
2443         bfi     w19, w0, 5, 2
2444         adrp    x0, :got:gNandcVer
2445         orr     w19, w19, 536870912
2446         orr     w19, w19, 1024
2447         ldr     x0, [x0, #:got_lo12:gNandcVer]
2448         bfi     w19, w3, 4, 1
2449         ldr     w0, [x0]
2450         cmp     w0, 3
2451         bls     .L346
2452         ldr     w0, [x21,16]
2453         cmp     x5, xzr
2454         str     w0, [x29,88]
2455         cset    w6, ne
2456         ldr     w0, [x29,88]
2457         and     w0, w0, -5
2458         str     w0, [x29,88]
2459         cbnz    w6, .L360
2460         cbz     x4, .L347
2461 .L360:
2462         adrp    x20, :got:gMasterInfo
2463         cbnz    w25, .L349
2464 .L357:
2465         mov     x0, x21
2466         add     w23, w23, 1
2467         asr     w23, w23, 1
2468         bl      rk_nandc_xfer_irq_flag_init
2469         bfi     w19, w23, 22, 6
2470         mov     x0, x21
2471         mov     w1, 0
2472         bl      NandCIrqEnable
2473         mov     x0, x22
2474         cbnz    x22, .L351
2475         ldr     x0, [x20, #:got_lo12:gMasterInfo]
2476         ldr     x0, [x0]
2477         b       .L351
2478 .L349:
2479         adrp    x0, :got:gNandcEccBits
2480         mov     w3, 128
2481         mov     w1, 0
2482         lsr     w7, w23, 1
2483         mov     w2, w1
2484         mov     w8, -1
2485         ldr     x0, [x0, #:got_lo12:gNandcEccBits]
2486         ldr     w0, [x0]
2487         cmp     w0, 25
2488         mov     w0, 64
2489         csel    w3, w0, w3, cc
2490 .L353:
2491         cmp     w2, w7
2492         bcs     .L357
2493         lsr     w0, w1, 2
2494         ldr     x4, [x20, #:got_lo12:gMasterInfo]
2495         ubfiz   x0, x0, 2, 30
2496         cbz     w6, .L354
2497         ldr     x9, [x4,8]
2498         ldrh    w4, [x5,2]
2499         ldrh    w10, [x5],4
2500         orr     w4, w10, w4, lsl 16
2501         str     w4, [x9,x0]
2502         b       .L355
2503 .L354:
2504         ldr     x4, [x4,8]
2505         str     w8, [x4,x0]
2506 .L355:
2507         add     w2, w2, 1
2508         add     w1, w1, w3
2509         b       .L353
2510 .L351:
2511         ldr     x20, [x20, #:got_lo12:gMasterInfo]
2512         ubfx    x23, x19, 22, 5
2513         mov     w2, w25
2514         and     x22, x22, 3
2515         ldr     x1, [x20,8]
2516         str     x1, [x20,24]
2517         lsl     w1, w23, 10
2518         str     x0, [x20,16]
2519         bl      rknand_dma_map_single
2520         str     w0, [x20,32]
2521         ldr     x0, [x20,24]
2522         lsl     w1, w23, 7
2523         mov     w2, w25
2524         bl      rknand_dma_map_single
2525         str     w0, [x20,36]
2526         mov     w0, 1
2527         str     w0, [x20,40]
2528         ldr     w0, [x20,32]
2529         mov     w1, 16
2530         str     w0, [x21,20]
2531         ldr     w0, [x20,36]
2532         str     w0, [x21,24]
2533         str     wzr, [x29,88]
2534         ldr     w0, [x29,88]
2535         bfi     w0, w1, 9, 5
2536         str     w0, [x29,88]
2537         ldr     w0, [x29,88]
2538         orr     w0, w0, 448
2539         str     w0, [x29,88]
2540         cbnz    x22, .L358
2541         ldr     w0, [x29,88]
2542         mov     w1, 2
2543         bfi     w0, w1, 3, 3
2544         str     w0, [x29,88]
2545 .L358:
2546         ldr     w0, [x29,88]
2547         cmp     w25, wzr
2548         cset    w1, eq
2549         orr     w0, w0, 4
2550         str     w0, [x29,88]
2551         ldr     w0, [x29,88]
2552         bfi     w0, w1, 1, 1
2553         str     w0, [x29,88]
2554         ldr     w0, [x29,88]
2555         orr     w0, w0, 1
2556         str     w0, [x29,88]
2557 .L347:
2558         ldr     w0, [x29,88]
2559         str     w0, [x21,16]
2560 .L346:
2561         str     w24, [x21,12]
2562         str     w19, [x21,8]
2563         orr     w19, w19, 4
2564         str     w19, [x21,8]
2565         ldp     x19, x20, [sp,16]
2566         ldp     x21, x22, [sp,32]
2567         ldp     x23, x24, [sp,48]
2568         ldr     x25, [sp,64]
2569         ldp     x29, x30, [sp], 96
2570         ret
2571         .size   NandcXferStart, .-NandcXferStart
2572         .align  2
2573         .global Ftl_log2
2574         .type   Ftl_log2, %function
2575 Ftl_log2:
2576         mov     w2, 1
2577         mov     w1, 0
2578 .L365:
2579         cmp     w2, w0
2580         bhi     .L367
2581         add     w1, w1, 1
2582         lsl     w2, w2, 1
2583         uxth    w1, w1
2584         b       .L365
2585 .L367:
2586         sub     w0, w1, #1
2587         ret
2588         .size   Ftl_log2, .-Ftl_log2
2589         .align  2
2590         .global FtlPrintInfo
2591         .type   FtlPrintInfo, %function
2592 FtlPrintInfo:
2593         ret
2594         .size   FtlPrintInfo, .-FtlPrintInfo
2595         .align  2
2596         .global FtlSysBlkNumInit
2597         .type   FtlSysBlkNumInit, %function
2598 FtlSysBlkNumInit:
2599         uxth    w0, w0
2600         mov     w1, 24
2601         cmp     w0, 23
2602         adrp    x2, :got:c_ftl_nand_max_sys_blks
2603         csel    w0, w0, w1, hi
2604         adrp    x1, :got:c_ftl_nand_sys_blks_per_plane
2605         adrp    x3, :got:c_ftl_nand_blk_pre_plane
2606         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
2607         str     w0, [x1]
2608         adrp    x1, :got:c_ftl_nand_planes_num
2609         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_sys_blks]
2610         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
2611         ldrh    w1, [x1]
2612         mul     w1, w0, w1
2613         str     w1, [x2]
2614         adrp    x2, :got:c_ftl_nand_data_blks_per_plane
2615         ldr     x3, [x3, #:got_lo12:c_ftl_nand_blk_pre_plane]
2616         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_blks_per_plane]
2617         ldrh    w3, [x3]
2618         sub     w0, w3, w0
2619         strh    w0, [x2]
2620         adrp    x2, :got:c_ftl_nand_totle_phy_blks
2621         adrp    x0, :got:c_ftl_nand_max_data_blks
2622         ldr     x2, [x2, #:got_lo12:c_ftl_nand_totle_phy_blks]
2623         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_data_blks]
2624         ldr     w2, [x2]
2625         sub     w1, w2, w1
2626         str     w1, [x0]
2627         mov     w0, 0
2628         ret
2629         .size   FtlSysBlkNumInit, .-FtlSysBlkNumInit
2630         .align  2
2631         .global FtlConstantsInit
2632         .type   FtlConstantsInit, %function
2633 FtlConstantsInit:
2634         stp     x29, x30, [sp, -96]!
2635         adrp    x3, :got:c_ftl_nand_planes_per_die
2636         adrp    x6, :got:p_plane_order_table
2637         add     x29, sp, 0
2638         stp     x19, x20, [sp,16]
2639         stp     x21, x22, [sp,32]
2640         stp     x23, x24, [sp,48]
2641         stp     x25, x26, [sp,64]
2642         str     x27, [sp,80]
2643         mov     x19, x0
2644         adrp    x20, :got:c_ftl_nand_blk_pre_plane
2645         ldrh    w10, [x0,8]
2646         adrp    x0, :got:c_ftl_nand_type
2647         ldrh    w2, [x19,10]
2648         ldrh    w5, [x19,14]
2649         ldr     x0, [x0, #:got_lo12:c_ftl_nand_type]
2650         strh    w10, [x0]
2651         adrp    x0, :got:c_ftl_nand_die_num
2652         ldr     x1, [x0, #:got_lo12:c_ftl_nand_die_num]
2653         strh    w2, [x1]
2654         ldrh    w1, [x19,12]
2655         ldr     x3, [x3, #:got_lo12:c_ftl_nand_planes_per_die]
2656         strh    w1, [x3]
2657         ldr     x3, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
2658         strh    w5, [x3]
2659         mov     x3, 0
2660 .L372:
2661         ldr     x4, [x6, #:got_lo12:p_plane_order_table]
2662         adrp    x13, :got:p_plane_order_table
2663         strb    w3, [x3,x4]
2664         add     x3, x3, 1
2665         cmp     x3, 32
2666         bne     .L372
2667         ldrh    w4, [x19,20]
2668         ldrb    w3, [x19,15]
2669         cmp     w4, w3
2670         bcs     .L373
2671         uxtb    w8, w1
2672         mov     w4, 0
2673         mul     w12, w1, w2
2674         ubfiz   w11, w8, 1, 7
2675 .L374:
2676         cmp     w4, w1
2677         bcs     .L376
2678         uxtb    w3, w4
2679         mov     w6, w4
2680         mov     w7, 0
2681 .L377:
2682         cmp     w7, w2
2683         bcs     .L387
2684         ldr     x9, [x13, #:got_lo12:p_plane_order_table]
2685         add     w14, w6, w12
2686         add     w15, w3, w8
2687         add     w7, w7, 1
2688         strb    w3, [x9,w6,uxtw]
2689         add     w3, w3, w11
2690         strb    w15, [x9,x14]
2691         add     w6, w6, w1
2692         uxtb    w3, w3
2693         b       .L377
2694 .L387:
2695         add     w4, w4, 1
2696         b       .L374
2697 .L376:
2698         ldr     x3, [x0, #:got_lo12:c_ftl_nand_die_num]
2699         lsl     w2, w2, 1
2700         lsr     w5, w5, 1
2701         strh    w2, [x3]
2702         ldr     x2, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
2703         strh    w5, [x2]
2704 .L373:
2705         adrp    x2, :got:c_mlc_erase_count_value
2706         adrp    x21, :got:c_ftl_nand_ext_blk_pre_plane
2707         mov     w3, 5
2708         cmp     w10, 1
2709         ldr     x2, [x2, #:got_lo12:c_mlc_erase_count_value]
2710         strh    w3, [x2]
2711         ldr     x3, [x21, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
2712         strh    wzr, [x3]
2713         bne     .L378
2714         strh    w10, [x2]
2715 .L378:
2716         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
2717         adrp    x23, :got:c_ftl_nand_planes_num
2718         adrp    x26, :got:c_ftl_nand_page_pre_blk
2719         adrp    x25, :got:c_ftl_nand_page_pre_slc_blk
2720         adrp    x27, :got:c_ftl_nand_sec_pre_page
2721         adrp    x22, :got:c_ftl_nand_sec_pre_page_shift
2722         ldrh    w0, [x0]
2723         ldr     x23, [x23, #:got_lo12:c_ftl_nand_planes_num]
2724         mul     w0, w1, w0
2725         strh    w0, [x23]
2726         ldr     x20, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
2727         ldrh    w0, [x20]
2728         mul     w1, w1, w0
2729         adrp    x0, :got:c_ftl_nand_blks_per_die
2730         uxth    w1, w1
2731         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blks_per_die]
2732         strh    w1, [x0]
2733         mov     w0, w1
2734         bl      Ftl_log2
2735         adrp    x1, :got:c_ftl_nand_blks_per_die_shift
2736         ldrh    w2, [x19,18]
2737         adrp    x3, :got:c_ftl_nand_page_pre_super_blk
2738         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blks_per_die_shift]
2739         strh    w0, [x1]
2740         ldrh    w0, [x19,16]
2741         ldr     x1, [x26, #:got_lo12:c_ftl_nand_page_pre_blk]
2742         strh    w0, [x1]
2743         ldr     x1, [x25, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
2744         strh    w2, [x1]
2745         ldrh    w1, [x23]
2746         ldr     x3, [x3, #:got_lo12:c_ftl_nand_page_pre_super_blk]
2747         mul     w0, w0, w1
2748         strh    w0, [x3]
2749         ldrh    w0, [x19,20]
2750         ldr     x24, [x27, #:got_lo12:c_ftl_nand_sec_pre_page]
2751         strh    w0, [x24]
2752         bl      Ftl_log2
2753         ldr     x1, [x22, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
2754         uxth    w5, w0
2755         ldrh    w4, [x24]
2756         adrp    x6, :got:c_ftl_nand_totle_phy_blks
2757         mov     x2, x25
2758         strh    w0, [x1]
2759         adrp    x0, :got:c_ftl_nand_byte_pre_page
2760         lsl     w3, w4, 9
2761         ldrh    w1, [x19,26]
2762         mov     x19, x26
2763         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_page]
2764         strh    w3, [x0]
2765         adrp    x0, :got:c_ftl_nand_byte_pre_oob
2766         ubfx    x3, x3, 9, 7
2767         lsl     w3, w3, 1
2768         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
2769         strh    w3, [x0]
2770         adrp    x0, :got:c_ftl_nand_reserved_blks
2771         ldrh    w3, [x23]
2772         ldr     x0, [x0, #:got_lo12:c_ftl_nand_reserved_blks]
2773         strh    w1, [x0]
2774         ldrh    w0, [x20]
2775         mov     x20, x27
2776         ldr     x6, [x6, #:got_lo12:c_ftl_nand_totle_phy_blks]
2777         cmp     w0, 1024
2778         mul     w1, w3, w0
2779         str     w1, [x6]
2780         bls     .L379
2781         ldr     x1, [x21, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
2782         and     w6, w0, 255
2783         strh    w6, [x1]
2784 .L379:
2785         ldr     x21, [x21, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
2786         adrp    x6, :got:DeviceCapacity
2787         ldr     x7, [x19, #:got_lo12:c_ftl_nand_page_pre_blk]
2788         ldrh    w1, [x21]
2789         ldrh    w7, [x7]
2790         sub     w1, w0, w1
2791         ldr     x6, [x6, #:got_lo12:DeviceCapacity]
2792         mul     w1, w3, w1
2793         mul     w1, w1, w4
2794         mul     w1, w1, w7
2795         asr     w1, w1, 11
2796         str     w1, [x6]
2797         ldr     x1, [x2, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
2798         ldrh    w1, [x1]
2799         mul     w1, w4, w1
2800         mov     w4, 34816
2801         sdiv    w4, w4, w1
2802         adrp    x1, :got:c_ftl_nand_max_vendor_blks
2803         cmp     w4, 4
2804         ldr     x2, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
2805         bgt     .L385
2806         mov     w4, 4
2807 .L385:
2808         strh    w4, [x2]
2809         adrp    x4, :got:c_ftl_nand_vendor_region_num
2810         mov     w2, 4352
2811         lsl     w0, w0, 6
2812         asr     w2, w2, w5
2813         cmp     w3, 1
2814         ldr     x4, [x4, #:got_lo12:c_ftl_nand_vendor_region_num]
2815         add     w2, w2, 2
2816         strh    w2, [x4]
2817         add     w2, w5, 9
2818         asr     w0, w0, w2
2819         adrp    x2, :got:c_ftl_nand_map_blks_per_plane
2820         ldr     x2, [x2, #:got_lo12:c_ftl_nand_map_blks_per_plane]
2821         strh    w0, [x2]
2822         adrp    x2, :got:c_ftl_nand_max_map_blks
2823         and     w0, w0, 65535
2824         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_map_blks]
2825         mul     w4, w0, w3
2826         add     w0, w0, 8
2827         str     w4, [x2]
2828         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
2829         ldrh    w1, [x1]
2830         udiv    w1, w1, w3
2831         add     w0, w0, w1
2832         adrp    x1, :got:c_ftl_nand_sys_blks_per_plane
2833         ldr     x2, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
2834         bne     .L386
2835         add     w0, w0, 4
2836 .L386:
2837         str     w0, [x2]
2838         ldr     x21, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
2839         ldrh    w0, [x21]
2840         bl      FtlSysBlkNumInit
2841         adrp    x0, :got:c_ftl_nand_init_sys_blks_per_plane
2842         ldr     w1, [x21]
2843         adrp    x2, :got:c_ftl_nand_map_region_num
2844         ldr     x0, [x0, #:got_lo12:c_ftl_nand_init_sys_blks_per_plane]
2845         str     w1, [x0]
2846         adrp    x0, :got:c_ftl_nand_max_data_blks
2847         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_blk]
2848         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_data_blks]
2849         ldr     x22, [x22, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
2850         ldrh    w1, [x19]
2851         ldr     w0, [x0]
2852         ldr     x2, [x2, #:got_lo12:c_ftl_nand_map_region_num]
2853         lsl     w0, w0, 2
2854         mul     w1, w0, w1
2855         ldrh    w0, [x22]
2856         add     w0, w0, 9
2857         lsr     w0, w1, w0
2858         mov     w1, 2048
2859         add     w0, w0, 2
2860         strh    w0, [x2]
2861         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
2862         ldr     x20, [x20, #:got_lo12:c_ftl_nand_sec_pre_page]
2863         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
2864         ldrh    w2, [x20]
2865         sdiv    w1, w1, w2
2866         strh    w1, [x0]
2867         adrp    x0, :got:g_MaxLbaSector
2868         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
2869         str     wzr, [x0]
2870         mov     w0, 0
2871         ldp     x19, x20, [sp,16]
2872         ldp     x21, x22, [sp,32]
2873         ldp     x23, x24, [sp,48]
2874         ldp     x25, x26, [sp,64]
2875         ldr     x27, [sp,80]
2876         ldp     x29, x30, [sp], 96
2877         ret
2878         .size   FtlConstantsInit, .-FtlConstantsInit
2879         .align  2
2880         .global IsBlkInVendorPart
2881         .type   IsBlkInVendorPart, %function
2882 IsBlkInVendorPart:
2883         adrp    x1, :got:g_totle_vendor_block
2884         uxth    w4, w0
2885         mov     w0, 0
2886         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
2887         ldrh    w1, [x1]
2888         cbz     w1, .L389
2889         adrp    x1, :got:c_ftl_nand_max_vendor_blks
2890         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
2891         ldrh    w2, [x1]
2892         adrp    x1, :got:p_vendor_block_table
2893         ldr     x1, [x1, #:got_lo12:p_vendor_block_table]
2894         ldr     x3, [x1]
2895         mov     x1, 0
2896 .L390:
2897         cmp     w2, w1, uxth
2898         bls     .L395
2899         add     x1, x1, 1
2900         add     x0, x3, x1, lsl 1
2901         ldrh    w0, [x0,-2]
2902         cmp     w0, w4
2903         bne     .L390
2904         mov     w0, 1
2905         b       .L389
2906 .L395:
2907         mov     w0, 0
2908 .L389:
2909         ret
2910         .size   IsBlkInVendorPart, .-IsBlkInVendorPart
2911         .align  2
2912         .global FtlCacheMetchLpa
2913         .type   FtlCacheMetchLpa, %function
2914 FtlCacheMetchLpa:
2915         adrp    x2, :got:g_wr_page_num
2916         mov     w6, w0
2917         mov     w0, 0
2918         ldr     x2, [x2, #:got_lo12:g_wr_page_num]
2919         ldr     w3, [x2]
2920         cbz     w3, .L397
2921         adrp    x2, :got:req_wr_io
2922         mov     x0, 56
2923         ldr     x2, [x2, #:got_lo12:req_wr_io]
2924         ldr     x5, [x2]
2925         mov     x2, 0
2926 .L398:
2927         cmp     w3, w2
2928         bls     .L407
2929         madd    x4, x2, x0, x5
2930         add     x2, x2, 1
2931         ldr     w4, [x4,24]
2932         cmp     w4, w6
2933         bcc     .L398
2934         cmp     w4, w1
2935         bhi     .L398
2936         mov     w0, 1
2937         b       .L397
2938 .L407:
2939         mov     w0, 0
2940 .L397:
2941         ret
2942         .size   FtlCacheMetchLpa, .-FtlCacheMetchLpa
2943         .align  2
2944         .global FtlGetCap
2945         .type   FtlGetCap, %function
2946 FtlGetCap:
2947         adrp    x0, :got:g_MaxLbaSector
2948         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
2949         ldr     w0, [x0]
2950         ret
2951         .size   FtlGetCap, .-FtlGetCap
2952         .align  2
2953         .global FtlGetCapacity
2954         .type   FtlGetCapacity, %function
2955 FtlGetCapacity:
2956         adrp    x0, :got:g_MaxLbaSector
2957         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
2958         ldr     w0, [x0]
2959         ret
2960         .size   FtlGetCapacity, .-FtlGetCapacity
2961         .align  2
2962         .global FtlGetLpn
2963         .type   FtlGetLpn, %function
2964 FtlGetLpn:
2965         adrp    x0, :got:g_MaxLpn
2966         ldr     x0, [x0, #:got_lo12:g_MaxLpn]
2967         ldr     w0, [x0]
2968         ret
2969         .size   FtlGetLpn, .-FtlGetLpn
2970         .align  2
2971         .global FtlGetCurEraseBlock
2972         .type   FtlGetCurEraseBlock, %function
2973 FtlGetCurEraseBlock:
2974         adrp    x0, :got:c_ftl_nand_planes_num
2975         adrp    x1, :got:g_cur_erase_blk
2976         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
2977         ldr     x1, [x1, #:got_lo12:g_cur_erase_blk]
2978         ldrh    w2, [x0]
2979         ldr     w0, [x1]
2980         mul     w0, w2, w0
2981         ret
2982         .size   FtlGetCurEraseBlock, .-FtlGetCurEraseBlock
2983         .align  2
2984         .global FtlGetAllBlockNum
2985         .type   FtlGetAllBlockNum, %function
2986 FtlGetAllBlockNum:
2987         adrp    x0, :got:c_ftl_nand_blk_pre_plane
2988         adrp    x1, :got:c_ftl_nand_planes_num
2989         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
2990         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
2991         ldrh    w2, [x0]
2992         ldrh    w0, [x1]
2993         mul     w0, w2, w0
2994         ret
2995         .size   FtlGetAllBlockNum, .-FtlGetAllBlockNum
2996         .align  2
2997         .global FtlBbmMapBadBlock
2998         .type   FtlBbmMapBadBlock, %function
2999 FtlBbmMapBadBlock:
3000         uxth    w1, w0
3001         adrp    x0, :got:c_ftl_nand_blks_per_die
3002         stp     x29, x30, [sp, -32]!
3003         mov     w4, 1
3004         add     x29, sp, 0
3005         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blks_per_die]
3006         str     x19, [sp,16]
3007         adrp    x19, :got:gBbtInfo
3008         ldrh    w3, [x0]
3009         ldr     x19, [x19, #:got_lo12:gBbtInfo]
3010         udiv    w2, w1, w3
3011         add     x0, x19, x2, uxth 3
3012         ldr     x0, [x0,32]
3013         msub    w3, w2, w3, w1
3014         uxth    w3, w3
3015         ubfx    x6, x3, 5, 11
3016         lsl     w4, w4, w3
3017         lsl     x6, x6, 2
3018         ldr     w5, [x0,x6]
3019         orr     w4, w4, w5
3020         str     w4, [x0,x6]
3021         adrp    x0, .LC1
3022         add     x0, x0, :lo12:.LC1
3023         bl      printk
3024         ldrh    w0, [x19,6]
3025         add     w0, w0, 1
3026         strh    w0, [x19,6]
3027         mov     w0, 0
3028         ldr     x19, [sp,16]
3029         ldp     x29, x30, [sp], 32
3030         ret
3031         .size   FtlBbmMapBadBlock, .-FtlBbmMapBadBlock
3032         .align  2
3033         .global FtlBbmIsBadBlock
3034         .type   FtlBbmIsBadBlock, %function
3035 FtlBbmIsBadBlock:
3036         adrp    x2, :got:c_ftl_nand_blks_per_die
3037         uxth    w0, w0
3038         ldr     x2, [x2, #:got_lo12:c_ftl_nand_blks_per_die]
3039         ldrh    w1, [x2]
3040         udiv    w2, w0, w1
3041         msub    w0, w2, w1, w0
3042         adrp    x1, :got:gBbtInfo
3043         uxth    w0, w0
3044         ldr     x1, [x1, #:got_lo12:gBbtInfo]
3045         ubfx    x3, x0, 5, 11
3046         add     x2, x1, x2, uxth 3
3047         ldr     x1, [x2,32]
3048         ldr     w1, [x1,x3,lsl 2]
3049         lsr     w0, w1, w0
3050         and     w0, w0, 1
3051         ret
3052         .size   FtlBbmIsBadBlock, .-FtlBbmIsBadBlock
3053         .align  2
3054         .global FtlBbtInfoPrint
3055         .type   FtlBbtInfoPrint, %function
3056 FtlBbtInfoPrint:
3057         ret
3058         .size   FtlBbtInfoPrint, .-FtlBbtInfoPrint
3059         .align  2
3060         .global FtlBbtCalcTotleCnt
3061         .type   FtlBbtCalcTotleCnt, %function
3062 FtlBbtCalcTotleCnt:
3063         stp     x29, x30, [sp, -48]!
3064         add     x29, sp, 0
3065         stp     x19, x20, [sp,16]
3066         mov     w19, 0
3067         stp     x21, x22, [sp,32]
3068         mov     w20, w19
3069         adrp    x22, :got:c_ftl_nand_blks_per_die
3070         adrp    x21, :got:c_ftl_nand_die_num
3071 .L417:
3072         ldr     x0, [x22, #:got_lo12:c_ftl_nand_blks_per_die]
3073         ldr     x1, [x21, #:got_lo12:c_ftl_nand_die_num]
3074         ldrh    w0, [x0]
3075         ldrh    w1, [x1]
3076         mul     w0, w0, w1
3077         cmp     w20, w0
3078         bge     .L423
3079         mov     w0, w20
3080         bl      FtlBbmIsBadBlock
3081         cbz     w0, .L418
3082         add     w19, w19, 1
3083         uxth    w19, w19
3084 .L418:
3085         add     w20, w20, 1
3086         uxth    w20, w20
3087         b       .L417
3088 .L423:
3089         mov     w0, w19
3090         ldp     x19, x20, [sp,16]
3091         ldp     x21, x22, [sp,32]
3092         ldp     x29, x30, [sp], 48
3093         ret
3094         .size   FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt
3095         .align  2
3096         .global V2P_block
3097         .type   V2P_block, %function
3098 V2P_block:
3099         adrp    x2, :got:c_ftl_nand_planes_per_die
3100         uxth    w0, w0
3101         uxth    w1, w1
3102         ldr     x2, [x2, #:got_lo12:c_ftl_nand_planes_per_die]
3103         ldrh    w3, [x2]
3104         udiv    w2, w0, w3
3105         msub    w0, w2, w3, w0
3106         madd    w0, w1, w3, w0
3107         adrp    x1, :got:c_ftl_nand_blks_per_die
3108         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blks_per_die]
3109         ldrh    w1, [x1]
3110         madd    w0, w2, w1, w0
3111         ret
3112         .size   V2P_block, .-V2P_block
3113         .align  2
3114         .global P2V_plane
3115         .type   P2V_plane, %function
3116 P2V_plane:
3117         adrp    x1, :got:c_ftl_nand_planes_per_die
3118         adrp    x2, :got:c_ftl_nand_blks_per_die
3119         uxth    w0, w0
3120         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_per_die]
3121         ldr     x2, [x2, #:got_lo12:c_ftl_nand_blks_per_die]
3122         ldrh    w1, [x1]
3123         ldrh    w3, [x2]
3124         udiv    w2, w0, w1
3125         udiv    w3, w0, w3
3126         msub    w0, w2, w1, w0
3127         madd    w0, w1, w3, w0
3128         ret
3129         .size   P2V_plane, .-P2V_plane
3130         .align  2
3131         .global P2V_block_in_plane
3132         .type   P2V_block_in_plane, %function
3133 P2V_block_in_plane:
3134         adrp    x1, :got:c_ftl_nand_blks_per_die
3135         uxth    w0, w0
3136         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blks_per_die]
3137         ldrh    w2, [x1]
3138         udiv    w1, w0, w2
3139         msub    w0, w1, w2, w0
3140         adrp    x1, :got:c_ftl_nand_planes_per_die
3141         uxth    w0, w0
3142         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_per_die]
3143         ldrh    w1, [x1]
3144         udiv    w0, w0, w1
3145         ret
3146         .size   P2V_block_in_plane, .-P2V_block_in_plane
3147         .align  2
3148         .global ftl_cmp_data_ver
3149         .type   ftl_cmp_data_ver, %function
3150 ftl_cmp_data_ver:
3151         cmp     w0, w1
3152         mov     w2, -2147483648
3153         bls     .L428
3154         sub     w1, w0, w1
3155         cmp     w1, w2
3156         cset    w0, ls
3157         b       .L429
3158 .L428:
3159         sub     w1, w1, w0
3160         cmp     w1, w2
3161         cset    w0, hi
3162 .L429:
3163         ret
3164         .size   ftl_cmp_data_ver, .-ftl_cmp_data_ver
3165         .align  2
3166         .global FtlFreeSysBlkQueueEmpty
3167         .type   FtlFreeSysBlkQueueEmpty, %function
3168 FtlFreeSysBlkQueueEmpty:
3169         adrp    x0, :got:gSysFreeQueue
3170         ldr     x0, [x0, #:got_lo12:gSysFreeQueue]
3171         ldrh    w0, [x0,6]
3172         cmp     w0, wzr
3173         cset    w0, eq
3174         ret
3175         .size   FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty
3176         .align  2
3177         .global FtlFreeSysBlkQueueFull
3178         .type   FtlFreeSysBlkQueueFull, %function
3179 FtlFreeSysBlkQueueFull:
3180         adrp    x0, :got:gSysFreeQueue
3181         ldr     x0, [x0, #:got_lo12:gSysFreeQueue]
3182         ldrh    w0, [x0,6]
3183         cmp     w0, 1024
3184         cset    w0, eq
3185         ret
3186         .size   FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull
3187         .align  2
3188         .global FtlFreeSysBlkQueueIn
3189         .type   FtlFreeSysBlkQueueIn, %function
3190 FtlFreeSysBlkQueueIn:
3191         stp     x29, x30, [sp, -32]!
3192         add     x29, sp, 0
3193         stp     x19, x20, [sp,16]
3194         uxth    w20, w0
3195         uxth    w19, w1
3196         bl      FtlFreeSysBlkQueueFull
3197         uxth    w0, w0
3198         cbnz    w0, .L432
3199         cbz     w19, .L434
3200         mov     w0, w20
3201         bl      P2V_block_in_plane
3202         uxth    w19, w0
3203         adrp    x1, :got:req_erase
3204         lsl     w2, w20, 10
3205         ldr     x1, [x1, #:got_lo12:req_erase]
3206         ldr     x0, [x1]
3207         str     w2, [x0,4]
3208         ldr     x0, [x1]
3209         mov     w1, 1
3210         bl      FlashEraseBlocks
3211         adrp    x0, :got:p_erase_count_table
3212         ubfiz   x1, x19, 1, 16
3213         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
3214         ldr     x2, [x0]
3215         ldrh    w0, [x2,x1]
3216         add     w0, w0, 1
3217         strh    w0, [x2,x1]
3218         adrp    x1, :got:g_totle_sys_slc_erase_count
3219         ldr     x1, [x1, #:got_lo12:g_totle_sys_slc_erase_count]
3220         ldr     w0, [x1]
3221         add     w0, w0, 1
3222         str     w0, [x1]
3223 .L434:
3224         adrp    x1, :got:gSysFreeQueue
3225         ldr     x1, [x1, #:got_lo12:gSysFreeQueue]
3226         ldrh    w0, [x1,6]
3227         ldrh    w2, [x1,4]
3228         add     w0, w0, 1
3229         strh    w0, [x1,6]
3230         add     x0, x1, x2, sxtw 1
3231         add     w2, w2, 1
3232         and     w2, w2, 1023
3233         strh    w20, [x0,8]
3234         strh    w2, [x1,4]
3235 .L432:
3236         ldp     x19, x20, [sp,16]
3237         ldp     x29, x30, [sp], 32
3238         ret
3239         .size   FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn
3240         .align  2
3241         .global FtlFreeSysBLkSort
3242         .type   FtlFreeSysBLkSort, %function
3243 FtlFreeSysBLkSort:
3244         stp     x29, x30, [sp, -48]!
3245         add     x29, sp, 0
3246         stp     x19, x20, [sp,16]
3247         stp     x21, x22, [sp,32]
3248         mov     w19, 0
3249         adrp    x20, :got:gSysFreeQueue
3250         adrp    x21, :got:p_sys_data_buf
3251         adrp    x22, :got:p_erase_count_table
3252 .L439:
3253         ldr     x1, [x20, #:got_lo12:gSysFreeQueue]
3254         adrp    x6, :got:gSysFreeQueue
3255         ldrh    w0, [x1,6]
3256         cmp     w0, w19
3257         bls     .L447
3258         ldrh    w0, [x1,2]
3259         add     w0, w0, w19
3260         add     x0, x1, x0, sxtw 1
3261         ldrh    w0, [x0,8]
3262         bl      P2V_block_in_plane
3263         ubfiz   x0, x0, 1, 16
3264         ldr     x3, [x22, #:got_lo12:p_erase_count_table]
3265         ubfiz   x1, x19, 2, 16
3266         ldr     x2, [x21, #:got_lo12:p_sys_data_buf]
3267         add     w19, w19, 1
3268         ldr     x3, [x3]
3269         uxth    w19, w19
3270         ldr     x2, [x2]
3271         ldrh    w0, [x3,x0]
3272         str     w0, [x2,x1]
3273         b       .L439
3274 .L447:
3275         mov     w0, 0
3276         adrp    x7, :got:p_sys_data_buf
3277 .L441:
3278         ldr     x1, [x6, #:got_lo12:gSysFreeQueue]
3279         ldrh    w5, [x1,6]
3280         sub     w1, w5, #1
3281         cmp     w0, w1
3282         bge     .L448
3283         ldr     x1, [x7, #:got_lo12:p_sys_data_buf]
3284         add     w4, w0, 1
3285         uxth    w4, w4
3286         ldr     x3, [x1]
3287         mov     w2, w4
3288         mov     w1, w0
3289 .L442:
3290         cmp     w2, w5
3291         bcs     .L449
3292         ubfiz   x8, x2, 2, 16
3293         ldr     w9, [x3,w1,uxtw 2]
3294         ldr     w8, [x3,x8]
3295         cmp     w9, w8
3296         csel    w1, w1, w2, ls
3297         add     w2, w2, 1
3298         uxth    w2, w2
3299         b       .L442
3300 .L449:
3301         cmp     w0, w1
3302         beq     .L445
3303         ubfiz   x5, x0, 2, 16
3304         ubfiz   x2, x1, 2, 32
3305         ldr     w9, [x3,x5]
3306         ldr     w8, [x3,x2]
3307         str     w9, [x3,x2]
3308         adrp    x2, :got:p_sys_data_buf
3309         ldr     x2, [x2, #:got_lo12:p_sys_data_buf]
3310         ldr     x2, [x2]
3311         str     w8, [x2,x5]
3312         ldr     x2, [x6, #:got_lo12:gSysFreeQueue]
3313         ldrh    w3, [x2,2]
3314         add     w1, w3, w1
3315         add     w0, w3, w0
3316         add     x1, x2, x1, sxtw 1
3317         add     x0, x2, x0, sxtw 1
3318         ldrh    w2, [x0,8]
3319         ldrh    w5, [x1,8]
3320         strh    w2, [x1,8]
3321         strh    w5, [x0,8]
3322 .L445:
3323         mov     w0, w4
3324         b       .L441
3325 .L448:
3326         ldp     x19, x20, [sp,16]
3327         ldp     x21, x22, [sp,32]
3328         ldp     x29, x30, [sp], 48
3329         ret
3330         .size   FtlFreeSysBLkSort, .-FtlFreeSysBLkSort
3331         .align  2
3332         .global IsInFreeQueue
3333         .type   IsInFreeQueue, %function
3334 IsInFreeQueue:
3335         stp     x29, x30, [sp, -32]!
3336         add     x29, sp, 0
3337         str     x19, [sp,16]
3338         uxth    w19, w0
3339         bl      FtlFreeSysBlkQueueFull
3340         uxth    w1, w0
3341         mov     w0, 0
3342         cbnz    w1, .L451
3343         adrp    x2, :got:gSysFreeQueue
3344         mov     w0, w1
3345         ldr     x3, [x2, #:got_lo12:gSysFreeQueue]
3346         ldrh    w4, [x3,6]
3347         ldrh    w3, [x3,2]
3348 .L452:
3349         cmp     w0, w4
3350         bcs     .L456
3351         ldr     x5, [x2, #:got_lo12:gSysFreeQueue]
3352         add     w1, w0, w3
3353         ubfiz   x1, x1, 1, 10
3354         add     x1, x5, x1
3355         ldrh    w1, [x1,8]
3356         cmp     w1, w19
3357         beq     .L455
3358         add     w0, w0, 1
3359         b       .L452
3360 .L456:
3361         mov     w0, 0
3362         b       .L451
3363 .L455:
3364         mov     w0, 1
3365 .L451:
3366         ldr     x19, [sp,16]
3367         ldp     x29, x30, [sp], 32
3368         ret
3369         .size   IsInFreeQueue, .-IsInFreeQueue
3370         .align  2
3371         .global FtlFreeSysBlkQueueOut
3372         .type   FtlFreeSysBlkQueueOut, %function
3373 FtlFreeSysBlkQueueOut:
3374         stp     x29, x30, [sp, -16]!
3375         add     x29, sp, 0
3376         bl      FtlFreeSysBlkQueueEmpty
3377         uxth    w1, w0
3378         mov     w0, 0
3379         cbnz    w1, .L458
3380         adrp    x1, :got:gSysFreeQueue
3381         ldr     x1, [x1, #:got_lo12:gSysFreeQueue]
3382         ldrh    w2, [x1,2]
3383         add     x0, x1, x2, sxtw 1
3384         ldrh    w3, [x1,6]
3385         add     w2, w2, 1
3386         ldrh    w0, [x0,8]
3387         sub     w3, w3, #1
3388         and     w2, w2, 1023
3389         strh    w3, [x1,6]
3390         strh    w2, [x1,2]
3391 .L458:
3392         ldp     x29, x30, [sp], 16
3393         ret
3394         .size   FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut
3395         .align  2
3396         .global insert_data_list
3397         .type   insert_data_list, %function
3398 insert_data_list:
3399         uxth    w0, w0
3400         mov     w9, 65535
3401         cmp     w0, w9
3402         beq     .L461
3403         adrp    x3, :got:p_data_block_list_table
3404         mov     w4, 6
3405         mov     w1, -1
3406         adrp    x2, :got:p_data_block_list_head
3407         umull   x11, w0, w4
3408         ldr     x8, [x3, #:got_lo12:p_data_block_list_table]
3409         mov     x10, x3
3410         mov     x5, x2
3411         ldr     x12, [x8]
3412         add     x6, x12, x11
3413         strh    w1, [x6,2]
3414         strh    w1, [x12,x11]
3415         ldr     x7, [x2, #:got_lo12:p_data_block_list_head]
3416         ldr     x1, [x7]
3417         cbnz    x1, .L462
3418         str     x6, [x7]
3419         b       .L461
3420 .L462:
3421         adrp    x2, :got:p_valid_page_count_table
3422         ubfiz   x7, x0, 1, 16
3423         ldr     x13, [x8]
3424         mov     x8, -6148914691236517206
3425         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
3426         ldr     x14, [x2]
3427         ldrh    w2, [x6,4]
3428         ldrh    w3, [x14,x7]
3429         cmp     w2, wzr
3430         mul     w3, w3, w2
3431         sub     x2, x1, x13
3432         asr     x2, x2, 1
3433         csinv   w3, w3, wzr, ne
3434         madd    x2, x8, x2, x2
3435         adrp    x8, :got:p_erase_count_table
3436         uxth    w2, w2
3437         ldr     x8, [x8, #:got_lo12:p_erase_count_table]
3438         ldr     x15, [x8]
3439         add     x8, x15, x7
3440         mov     w7, w4
3441 .L469:
3442         ubfiz   x16, x2, 1, 16
3443         ldrh    w17, [x1,4]
3444         cmp     w17, wzr
3445         ldrh    w4, [x14,x16]
3446         mul     w4, w4, w17
3447         csinv   w4, w4, wzr, ne
3448         cmp     w4, w3
3449         bne     .L465
3450         ldrh    w16, [x15,x16]
3451         ldrh    w4, [x8]
3452         cmp     w16, w4
3453         bcc     .L467
3454         b       .L466
3455 .L465:
3456         bhi     .L466
3457 .L467:
3458         ldrh    w4, [x1]
3459         cmp     w4, w9
3460         bne     .L468
3461         strh    w2, [x6,2]
3462         strh    w0, [x1]
3463         adrp    x0, :got:p_data_block_list_tail
3464         ldr     x0, [x0, #:got_lo12:p_data_block_list_tail]
3465         str     x6, [x0]
3466         b       .L461
3467 .L468:
3468         umull   x1, w4, w7
3469         mov     w2, w4
3470         add     x1, x13, x1
3471         b       .L469
3472 .L466:
3473         strh    w2, [x12,x11]
3474         ldrh    w2, [x1,2]
3475         strh    w2, [x6,2]
3476         ldr     x2, [x5, #:got_lo12:p_data_block_list_head]
3477         ldr     x3, [x2]
3478         cmp     x1, x3
3479         bne     .L470
3480         strh    w0, [x1,2]
3481         str     x6, [x2]
3482         b       .L461
3483 .L470:
3484         ldrh    w2, [x1,2]
3485         mov     w3, 6
3486         umull   x2, w2, w3
3487         ldr     x3, [x10, #:got_lo12:p_data_block_list_table]
3488         ldr     x3, [x3]
3489         strh    w0, [x3,x2]
3490         strh    w0, [x1,2]
3491 .L461:
3492         mov     w0, 0
3493         ret
3494         .size   insert_data_list, .-insert_data_list
3495         .align  2
3496         .global INSERT_DATA_LIST
3497         .type   INSERT_DATA_LIST, %function
3498 INSERT_DATA_LIST:
3499         stp     x29, x30, [sp, -16]!
3500         add     x29, sp, 0
3501         bl      insert_data_list
3502         adrp    x0, :got:g_num_data_superblocks
3503         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
3504         ldrh    w1, [x0]
3505         add     w1, w1, 1
3506         strh    w1, [x0]
3507         ldp     x29, x30, [sp], 16
3508         ret
3509         .size   INSERT_DATA_LIST, .-INSERT_DATA_LIST
3510         .align  2
3511         .global insert_free_list
3512         .type   insert_free_list, %function
3513 insert_free_list:
3514         uxth    w0, w0
3515         mov     w6, 65535
3516         cmp     w0, w6
3517         beq     .L475
3518         adrp    x3, :got:p_data_block_list_table
3519         mov     w5, 6
3520         mov     w1, -1
3521         adrp    x2, :got:p_free_data_block_list_head
3522         umull   x7, w0, w5
3523         ldr     x9, [x3, #:got_lo12:p_data_block_list_table]
3524         mov     x12, x3
3525         mov     x3, x2
3526         ldr     x8, [x9]
3527         add     x4, x8, x7
3528         strh    w1, [x4,2]
3529         strh    w1, [x8,x7]
3530         ldr     x10, [x2, #:got_lo12:p_free_data_block_list_head]
3531         ldr     x1, [x10]
3532         cbnz    x1, .L476
3533         str     x4, [x10]
3534         b       .L475
3535 .L476:
3536         adrp    x2, :got:p_erase_count_table
3537         ldr     x10, [x9]
3538         mov     x9, -6148914691236517206
3539         ldr     x2, [x2, #:got_lo12:p_erase_count_table]
3540         ldr     x11, [x2]
3541         ubfiz   x2, x0, 1, 16
3542         ldrh    w13, [x11,x2]
3543         sub     x2, x1, x10
3544         asr     x2, x2, 1
3545         madd    x2, x9, x2, x2
3546         uxth    w2, w2
3547 .L479:
3548         ubfiz   x9, x2, 1, 16
3549         ldrh    w9, [x11,x9]
3550         cmp     w9, w13
3551         bcs     .L477
3552         ldrh    w9, [x1]
3553         cmp     w9, w6
3554         bne     .L478
3555         strh    w2, [x4,2]
3556         strh    w0, [x1]
3557         b       .L475
3558 .L478:
3559         umull   x1, w9, w5
3560         mov     w2, w9
3561         add     x1, x10, x1
3562         b       .L479
3563 .L477:
3564         ldrh    w5, [x1,2]
3565         strh    w5, [x4,2]
3566         strh    w2, [x8,x7]
3567         ldr     x2, [x3, #:got_lo12:p_free_data_block_list_head]
3568         ldr     x3, [x2]
3569         cmp     x1, x3
3570         bne     .L480
3571         strh    w0, [x1,2]
3572         str     x4, [x2]
3573         b       .L475
3574 .L480:
3575         ldrh    w2, [x1,2]
3576         mov     w3, 6
3577         umull   x2, w2, w3
3578         ldr     x3, [x12, #:got_lo12:p_data_block_list_table]
3579         ldr     x3, [x3]
3580         strh    w0, [x3,x2]
3581         strh    w0, [x1,2]
3582 .L475:
3583         mov     w0, 0
3584         ret
3585         .size   insert_free_list, .-insert_free_list
3586         .align  2
3587         .global INSERT_FREE_LIST
3588         .type   INSERT_FREE_LIST, %function
3589 INSERT_FREE_LIST:
3590         stp     x29, x30, [sp, -16]!
3591         add     x29, sp, 0
3592         bl      insert_free_list
3593         adrp    x0, :got:g_num_free_superblocks
3594         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
3595         ldrh    w1, [x0]
3596         add     w1, w1, 1
3597         strh    w1, [x0]
3598         ldp     x29, x30, [sp], 16
3599         ret
3600         .size   INSERT_FREE_LIST, .-INSERT_FREE_LIST
3601         .align  2
3602         .global List_remove_node
3603         .type   List_remove_node, %function
3604 List_remove_node:
3605         adrp    x6, :got:p_data_block_list_table
3606         uxth    w1, w1
3607         mov     w5, 6
3608         ldr     x3, [x0]
3609         mov     w7, 65535
3610         ldr     x6, [x6, #:got_lo12:p_data_block_list_table]
3611         umull   x1, w1, w5
3612         ldr     x2, [x6]
3613         add     x4, x2, x1
3614         cmp     x4, x3
3615         bne     .L483
3616         ldrh    w3, [x2,x1]
3617         cmp     w3, w7
3618         bne     .L484
3619         str     xzr, [x0]
3620         b       .L485
3621 .L484:
3622         umull   x3, w3, w5
3623         add     x3, x2, x3
3624         str     x3, [x0]
3625         mov     w0, -1
3626         strh    w0, [x3,2]
3627         b       .L485
3628 .L483:
3629         ldrh    w0, [x2,x1]
3630         ldrh    w3, [x4,2]
3631         cmp     w0, w7
3632         bne     .L486
3633         umull   x3, w3, w5
3634         mov     w0, -1
3635         strh    w0, [x2,x3]
3636         b       .L485
3637 .L486:
3638         umull   x0, w0, w5
3639         add     x0, x2, x0
3640         strh    w3, [x0,2]
3641         ldrh    w3, [x4,2]
3642         ldr     x0, [x6]
3643         ldrh    w7, [x2,x1]
3644         umull   x3, w3, w5
3645         strh    w7, [x0,x3]
3646 .L485:
3647         mov     w0, -1
3648         strh    w0, [x2,x1]
3649         strh    w0, [x4,2]
3650         mov     w0, 0
3651         ret
3652         .size   List_remove_node, .-List_remove_node
3653         .align  2
3654         .global List_pop_index_node
3655         .type   List_pop_index_node, %function
3656 List_pop_index_node:
3657         stp     x29, x30, [sp, -32]!
3658         uxth    w1, w1
3659         add     x29, sp, 0
3660         str     x19, [sp,16]
3661         mov     w19, 65535
3662         ldr     x2, [x0]
3663         cbz     x2, .L488
3664         adrp    x3, :got:p_data_block_list_table
3665         mov     w5, w19
3666         mov     w6, 6
3667         ldr     x3, [x3, #:got_lo12:p_data_block_list_table]
3668         ldr     x4, [x3]
3669 .L489:
3670         cbnz    w1, .L490
3671 .L492:
3672         sub     x2, x2, x4
3673         mov     x1, -6148914691236517206
3674         asr     x2, x2, 1
3675         madd    x2, x1, x2, x2
3676         uxth    w19, w2
3677         mov     w1, w19
3678         bl      List_remove_node
3679         b       .L488
3680 .L490:
3681         ldrh    w3, [x2]
3682         cmp     w3, w5
3683         beq     .L492
3684         umull   x3, w3, w6
3685         sub     w1, w1, #1
3686         add     x2, x4, x3
3687         uxth    w1, w1
3688         b       .L489
3689 .L488:
3690         mov     w0, w19
3691         ldr     x19, [sp,16]
3692         ldp     x29, x30, [sp], 32
3693         ret
3694         .size   List_pop_index_node, .-List_pop_index_node
3695         .align  2
3696         .global List_pop_head_node
3697         .type   List_pop_head_node, %function
3698 List_pop_head_node:
3699         stp     x29, x30, [sp, -16]!
3700         mov     w1, 0
3701         add     x29, sp, 0
3702         bl      List_pop_index_node
3703         ldp     x29, x30, [sp], 16
3704         ret
3705         .size   List_pop_head_node, .-List_pop_head_node
3706         .align  2
3707         .global List_get_gc_head_node
3708         .type   List_get_gc_head_node, %function
3709 List_get_gc_head_node:
3710         uxth    w2, w0
3711         adrp    x0, :got:p_data_block_list_head
3712         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
3713         ldr     x1, [x0]
3714         mov     w0, 65535
3715         cbz     x1, .L496
3716         adrp    x0, :got:p_data_block_list_table
3717         mov     w4, 65535
3718         mov     w5, 6
3719         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
3720         ldr     x0, [x0]
3721 .L497:
3722         cbnz    w2, .L498
3723 .L500:
3724         sub     x1, x1, x0
3725         mov     x0, -6148914691236517206
3726         asr     x1, x1, 1
3727         madd    x1, x0, x1, x1
3728         uxth    w0, w1
3729         b       .L496
3730 .L498:
3731         ldrh    w3, [x1]
3732         cmp     w3, w4
3733         beq     .L500
3734         umull   x3, w3, w5
3735         sub     w2, w2, #1
3736         add     x1, x0, x3
3737         uxth    w2, w2
3738         b       .L497
3739 .L496:
3740         ret
3741         .size   List_get_gc_head_node, .-List_get_gc_head_node
3742         .align  2
3743         .global List_update_data_list
3744         .type   List_update_data_list, %function
3745 List_update_data_list:
3746         stp     x29, x30, [sp, -32]!
3747         add     x29, sp, 0
3748         str     x19, [sp,16]
3749         uxth    w19, w0
3750         adrp    x0, :got:g_active_superblock
3751         ldr     x0, [x0, #:got_lo12:g_active_superblock]
3752         ldrh    w0, [x0]
3753         cmp     w0, w19
3754         beq     .L503
3755         adrp    x0, :got:g_buffer_superblock
3756         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
3757         ldrh    w0, [x0]
3758         cmp     w0, w19
3759         beq     .L503
3760         adrp    x0, :got:g_gc_temp_superblock
3761         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
3762         ldrh    w0, [x0]
3763         cmp     w0, w19
3764         beq     .L503
3765         adrp    x0, :got:p_data_block_list_table
3766         mov     w3, 6
3767         umull   x4, w19, w3
3768         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
3769         ldr     x5, [x0]
3770         adrp    x0, :got:p_data_block_list_head
3771         add     x4, x5, x4
3772         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
3773         ldr     x1, [x0]
3774         cmp     x4, x1
3775         beq     .L503
3776         adrp    x1, :got:p_valid_page_count_table
3777         ldrh    w2, [x4,4]
3778         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
3779         ldr     x6, [x1]
3780         ubfiz   x1, x19, 1, 16
3781         ldrh    w1, [x6,x1]
3782         mul     w2, w1, w2
3783         ldrh    w1, [x4,2]
3784         mov     x4, -6148914691236517206
3785         cmp     w2, wzr
3786         csinv   w2, w2, wzr, ne
3787         umull   x3, w1, w3
3788         asr     x1, x3, 1
3789         add     x3, x5, x3
3790         madd    x1, x4, x1, x1
3791         ldrh    w3, [x3,4]
3792         ldrh    w1, [x6,x1,lsl 1]
3793         mul     w1, w1, w3
3794         cmp     w1, wzr
3795         csinv   w1, w1, wzr, ne
3796         cmp     w2, w1
3797         bcs     .L503
3798         mov     w1, w19
3799         bl      List_remove_node
3800         adrp    x0, :got:g_num_data_superblocks
3801         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
3802         ldrh    w1, [x0]
3803         sub     w1, w1, #1
3804         strh    w1, [x0]
3805         mov     w0, w19
3806         bl      INSERT_DATA_LIST
3807 .L503:
3808         mov     w0, 0
3809         ldr     x19, [sp,16]
3810         ldp     x29, x30, [sp], 32
3811         ret
3812         .size   List_update_data_list, .-List_update_data_list
3813         .align  2
3814         .global ftl_map_blk_alloc_new_blk
3815         .type   ftl_map_blk_alloc_new_blk, %function
3816 ftl_map_blk_alloc_new_blk:
3817         stp     x29, x30, [sp, -48]!
3818         add     x29, sp, 0
3819         stp     x19, x20, [sp,16]
3820         stp     x21, x22, [sp,32]
3821         mov     w20, 0
3822         ldrh    w2, [x0,10]
3823         ldr     x1, [x0,16]
3824 .L507:
3825         cmp     w20, w2
3826         beq     .L510
3827         mov     x22, x1
3828         ldrh    w21, [x1],2
3829         cbnz    w21, .L508
3830         mov     x19, x0
3831         bl      FtlFreeSysBlkQueueOut
3832         uxth    w1, w0
3833         strh    w0, [x22]
3834         cbz     w1, .L510
3835         ldr     w0, [x19,48]
3836         strh    w21, [x19,2]
3837         add     w0, w0, 1
3838         str     w0, [x19,48]
3839         ldrh    w0, [x19,8]
3840         strh    w20, [x19]
3841         add     w0, w0, 1
3842         strh    w0, [x19,8]
3843         b       .L510
3844 .L508:
3845         add     w20, w20, 1
3846         uxth    w20, w20
3847         b       .L507
3848 .L510:
3849         mov     w0, 0
3850         ldp     x19, x20, [sp,16]
3851         ldp     x21, x22, [sp,32]
3852         ldp     x29, x30, [sp], 48
3853         ret
3854         .size   ftl_map_blk_alloc_new_blk, .-ftl_map_blk_alloc_new_blk
3855         .align  2
3856         .global select_l2p_ram_region
3857         .type   select_l2p_ram_region, %function
3858 select_l2p_ram_region:
3859         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
3860         mov     x3, 0
3861         mov     w4, 65535
3862         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
3863         ldrh    w2, [x0]
3864         adrp    x0, :got:p_l2p_ram_map
3865         ldr     x0, [x0, #:got_lo12:p_l2p_ram_map]
3866         ldr     x1, [x0]
3867 .L514:
3868         uxth    w0, w3
3869         cmp     w0, w2
3870         bcs     .L530
3871         add     x3, x3, 1
3872         add     x5, x1, x3, lsl 4
3873         ldrh    w5, [x5,-16]
3874         cmp     w5, w4
3875         bne     .L514
3876         b       .L515
3877 .L530:
3878         mov     w0, w2
3879         mov     x3, 0
3880         mov     w6, -2147483648
3881 .L517:
3882         uxth    w5, w3
3883         cmp     w5, w2
3884         bcs     .L531
3885         add     x4, x1, x3, lsl 4
3886         ldr     w4, [x4,4]
3887         tbnz    w4, #31, .L526
3888         cmp     w4, w6
3889         bcc     .L518
3890 .L526:
3891         mov     w4, w6
3892         mov     w5, w0
3893 .L518:
3894         add     x3, x3, 1
3895         mov     w6, w4
3896         mov     w0, w5
3897         b       .L517
3898 .L531:
3899         cmp     w0, w2
3900         bcc     .L515
3901         adrp    x0, :got:g_l2p_last_update_region_id
3902         add     x1, x1, 4
3903         mov     w4, -1
3904         mov     w3, 0
3905         ldr     x0, [x0, #:got_lo12:g_l2p_last_update_region_id]
3906         ldrh    w5, [x0]
3907         mov     w0, w2
3908 .L521:
3909         cmp     w3, w2
3910         beq     .L515
3911         ldr     w7, [x1]
3912         cmp     w7, w4
3913         bcs     .L522
3914         ldrh    w6, [x1,-4]
3915         cmp     w6, w5
3916         csel    w4, w4, w7, eq
3917         cmp     w6, w5
3918         csel    w0, w0, w3, eq
3919 .L522:
3920         add     w3, w3, 1
3921         add     x1, x1, 16
3922         uxth    w3, w3
3923         b       .L521
3924 .L515:
3925         ret
3926         .size   select_l2p_ram_region, .-select_l2p_ram_region
3927         .align  2
3928         .global FtlUpdateVaildLpn
3929         .type   FtlUpdateVaildLpn, %function
3930 FtlUpdateVaildLpn:
3931         adrp    x1, :got:FtlUpdateVaildLpnCount
3932         ldr     x3, [x1, #:got_lo12:FtlUpdateVaildLpnCount]
3933         ldrh    w2, [x3]
3934         cbnz    w0, .L533
3935         cmp     w2, 4
3936         bhi     .L533
3937         add     w2, w2, 1
3938         strh    w2, [x3]
3939         b       .L532
3940 .L533:
3941         ldr     x1, [x1, #:got_lo12:FtlUpdateVaildLpnCount]
3942         mov     w7, 65535
3943         strh    wzr, [x1]
3944         adrp    x1, :got:g_VaildLpn
3945         ldr     x0, [x1, #:got_lo12:g_VaildLpn]
3946         str     wzr, [x0]
3947         adrp    x0, :got:c_ftl_nand_data_blks_per_plane
3948         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_blks_per_plane]
3949         ldrh    w5, [x0]
3950         adrp    x0, :got:p_valid_page_count_table
3951         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
3952         ldr     x6, [x0]
3953         mov     x0, 0
3954 .L534:
3955         cmp     w5, w0, uxth
3956         bls     .L532
3957         ldrh    w4, [x6,x0,lsl 1]
3958         cmp     w4, w7
3959         beq     .L535
3960         ldr     x3, [x1, #:got_lo12:g_VaildLpn]
3961         ldr     w2, [x3]
3962         add     w2, w4, w2
3963         str     w2, [x3]
3964 .L535:
3965         add     x0, x0, 1
3966         b       .L534
3967 .L532:
3968         ret
3969         .size   FtlUpdateVaildLpn, .-FtlUpdateVaildLpn
3970         .align  2
3971         .global ftl_sb_update_avl_pages
3972         .type   ftl_sb_update_avl_pages, %function
3973 ftl_sb_update_avl_pages:
3974         adrp    x3, :got:c_ftl_nand_planes_num
3975         strh    wzr, [x0,4]
3976         uxth    w1, w1
3977         uxth    w2, w2
3978         mov     w5, 65535
3979         ldr     x3, [x3, #:got_lo12:c_ftl_nand_planes_num]
3980         ldrh    w3, [x3]
3981 .L539:
3982         cmp     w2, w3
3983         bcs     .L545
3984         add     x4, x0, x2, sxtw 1
3985         ldrh    w4, [x4,16]
3986         cmp     w4, w5
3987         beq     .L540
3988         ldrh    w4, [x0,4]
3989         add     w4, w4, 1
3990         strh    w4, [x0,4]
3991 .L540:
3992         add     w2, w2, 1
3993         uxth    w2, w2
3994         b       .L539
3995 .L545:
3996         adrp    x2, :got:c_ftl_nand_page_pre_blk
3997         mov     x4, x0
3998         mov     w6, 65535
3999         add     x3, x0, x3, uxth 1
4000         ldr     x2, [x2, #:got_lo12:c_ftl_nand_page_pre_blk]
4001         ldrh    w5, [x2]
4002 .L542:
4003         cmp     x4, x3
4004         beq     .L546
4005         ldrh    w2, [x4,16]
4006         cmp     w2, w6
4007         beq     .L543
4008         ldrh    w2, [x0,4]
4009         add     w2, w5, w2
4010         sub     w2, w2, #1
4011         sub     w2, w2, w1
4012         strh    w2, [x0,4]
4013 .L543:
4014         add     x4, x4, 2
4015         b       .L542
4016 .L546:
4017         ret
4018         .size   ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages
4019         .align  2
4020         .global make_superblock
4021         .type   make_superblock, %function
4022 make_superblock:
4023         stp     x29, x30, [sp, -80]!
4024         add     x29, sp, 0
4025         stp     x19, x20, [sp,16]
4026         stp     x23, x24, [sp,48]
4027         stp     x21, x22, [sp,32]
4028         str     x25, [sp,64]
4029         mov     x19, x0
4030         strh    wzr, [x0,4]
4031         mov     w20, 0
4032         strb    wzr, [x0,7]
4033         adrp    x22, :got:c_ftl_nand_planes_num
4034         adrp    x24, :got:p_plane_order_table
4035         mov     w23, -1
4036 .L548:
4037         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
4038         ldrh    w0, [x0]
4039         cmp     w0, w20
4040         bls     .L555
4041         ldr     x0, [x24, #:got_lo12:p_plane_order_table]
4042         add     x21, x19, x20, uxth 1
4043         ldrh    w1, [x19]
4044         ldrb    w0, [x0,w20,sxtw]
4045         bl      V2P_block
4046         strh    w23, [x21,16]
4047         mov     w25, w0
4048         bl      FtlBbmIsBadBlock
4049         cbnz    w0, .L549
4050         strh    w25, [x21,16]
4051         ldrb    w0, [x19,7]
4052         add     w0, w0, 1
4053         strb    w0, [x19,7]
4054 .L549:
4055         add     w20, w20, 1
4056         uxth    w20, w20
4057         b       .L548
4058 .L555:
4059         adrp    x1, :got:c_ftl_nand_page_pre_blk
4060         ldrb    w0, [x19,7]
4061         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
4062         strb    wzr, [x19,9]
4063         ldrh    w1, [x1]
4064         mul     w0, w0, w1
4065         strh    w0, [x19,4]
4066         adrp    x0, :got:g_inkDie_check_enable
4067         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
4068         ldr     w0, [x0]
4069         cbz     w0, .L551
4070         adrp    x0, :got:p_erase_count_table
4071         ldrh    w1, [x19]
4072         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
4073         ldr     x0, [x0]
4074         ldrh    w0, [x0,x1,lsl 1]
4075         cmp     w0, 59
4076         bhi     .L551
4077         mov     w0, 1
4078         strb    w0, [x19,9]
4079 .L551:
4080         mov     w0, 0
4081         ldr     x25, [sp,64]
4082         ldp     x19, x20, [sp,16]
4083         ldp     x21, x22, [sp,32]
4084         ldp     x23, x24, [sp,48]
4085         ldp     x29, x30, [sp], 80
4086         ret
4087         .size   make_superblock, .-make_superblock
4088         .align  2
4089         .global update_multiplier_value
4090         .type   update_multiplier_value, %function
4091 update_multiplier_value:
4092         stp     x29, x30, [sp, -64]!
4093         add     x29, sp, 0
4094         stp     x19, x20, [sp,16]
4095         mov     w19, 0
4096         uxth    w20, w0
4097         stp     x21, x22, [sp,32]
4098         stp     x23, x24, [sp,48]
4099         mov     w21, w19
4100         adrp    x22, :got:c_ftl_nand_planes_num
4101         adrp    x23, :got:p_plane_order_table
4102         adrp    x24, :got:c_ftl_nand_page_pre_blk
4103 .L557:
4104         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
4105         ldrh    w0, [x0]
4106         cmp     w0, w21
4107         bls     .L564
4108         ldr     x0, [x23, #:got_lo12:p_plane_order_table]
4109         mov     w1, w20
4110         ldrb    w0, [x0,w21,sxtw]
4111         bl      V2P_block
4112         bl      FtlBbmIsBadBlock
4113         cbnz    w0, .L558
4114         ldr     x0, [x24, #:got_lo12:c_ftl_nand_page_pre_blk]
4115         ldrh    w0, [x0]
4116         add     w19, w19, w0
4117         uxth    w19, w19
4118 .L558:
4119         add     w21, w21, 1
4120         uxth    w21, w21
4121         b       .L557
4122 .L564:
4123         cbz     w19, .L560
4124         mov     w0, 32768
4125         sdiv    w19, w0, w19
4126 .L560:
4127         mov     w0, 6
4128         umull   x20, w20, w0
4129         adrp    x0, :got:p_data_block_list_table
4130         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4131         ldr     x0, [x0]
4132         add     x20, x0, x20
4133         mov     w0, 0
4134         strh    w19, [x20,4]
4135         ldp     x19, x20, [sp,16]
4136         ldp     x21, x22, [sp,32]
4137         ldp     x23, x24, [sp,48]
4138         ldp     x29, x30, [sp], 64
4139         ret
4140         .size   update_multiplier_value, .-update_multiplier_value
4141         .align  2
4142         .global GetFreeBlockMinEraseCount
4143         .type   GetFreeBlockMinEraseCount, %function
4144 GetFreeBlockMinEraseCount:
4145         adrp    x0, :got:p_free_data_block_list_head
4146         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
4147         ldr     x1, [x0]
4148         mov     w0, w1
4149         cbz     x1, .L566
4150         adrp    x0, :got:p_data_block_list_table
4151         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4152         ldr     x0, [x0]
4153         sub     x1, x1, x0
4154         mov     x0, -6148914691236517206
4155         asr     x1, x1, 1
4156         madd    x1, x0, x1, x1
4157         adrp    x0, :got:p_erase_count_table
4158         and     x1, x1, 65535
4159         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
4160         ldr     x0, [x0]
4161         ldrh    w0, [x0,x1,lsl 1]
4162 .L566:
4163         ret
4164         .size   GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount
4165         .align  2
4166         .global GetFreeBlockMaxEraseCount
4167         .type   GetFreeBlockMaxEraseCount, %function
4168 GetFreeBlockMaxEraseCount:
4169         adrp    x0, :got:p_free_data_block_list_head
4170         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
4171         ldr     x1, [x0]
4172         mov     w0, w1
4173         cbz     x1, .L569
4174         adrp    x0, :got:g_num_free_superblocks
4175         mov     w2, 7
4176         mov     w5, 6
4177         mov     w6, 65535
4178         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
4179         ldrh    w0, [x0]
4180         mul     w2, w0, w2
4181         adrp    x0, :got:p_data_block_list_table
4182         lsr     w2, w2, 3
4183         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4184         ldr     x3, [x0]
4185         sub     x0, x1, x3
4186         mov     x1, -6148914691236517206
4187         asr     x0, x0, 1
4188         madd    x0, x1, x0, x0
4189         mov     w1, 0
4190         uxth    w0, w0
4191 .L570:
4192         cmp     w1, w2
4193         bcs     .L573
4194         umull   x4, w0, w5
4195         ldrh    w4, [x3,x4]
4196         cmp     w4, w6
4197         bne     .L571
4198 .L573:
4199         adrp    x1, :got:p_erase_count_table
4200         ubfiz   x0, x0, 1, 16
4201         ldr     x1, [x1, #:got_lo12:p_erase_count_table]
4202         ldr     x1, [x1]
4203         ldrh    w0, [x1,x0]
4204         b       .L569
4205 .L571:
4206         add     w1, w1, 1
4207         mov     w0, w4
4208         uxth    w1, w1
4209         b       .L570
4210 .L569:
4211         ret
4212         .size   GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount
4213         .align  2
4214         .global FtlPrintInfo2buf
4215         .type   FtlPrintInfo2buf, %function
4216 FtlPrintInfo2buf:
4217         stp     x29, x30, [sp, -128]!
4218         adrp    x1, .LC2
4219         add     x29, sp, 0
4220         add     x1, x1, :lo12:.LC2
4221         stp     x19, x20, [sp,16]
4222         stp     x21, x22, [sp,32]
4223         stp     x23, x24, [sp,48]
4224         mov     x22, x0
4225         stp     x25, x26, [sp,64]
4226         stp     x27, x28, [sp,80]
4227         bl      strcpy
4228         add     x20, x22, 12
4229         adrp    x2, :got:gNandPhyInfo
4230         adrp    x1, .LC3
4231         mov     x0, x20
4232         add     x1, x1, :lo12:.LC3
4233         ldr     x2, [x2, #:got_lo12:gNandPhyInfo]
4234         ldr     w2, [x2]
4235         bl      sprintf
4236         add     x20, x20, x0, sxtw
4237         adrp    x2, :got:DeviceCapacity
4238         adrp    x1, .LC4
4239         mov     x0, x20
4240         add     x1, x1, :lo12:.LC4
4241         ldr     x2, [x2, #:got_lo12:DeviceCapacity]
4242         ldr     w2, [x2]
4243         bl      sprintf
4244         add     x20, x20, x0, sxtw
4245         adrp    x0, :got:gFtlInitStatus
4246         ldr     x0, [x0, #:got_lo12:gFtlInitStatus]
4247         ldr     w0, [x0]
4248         cmp     w0, 1
4249         beq     .L576
4250         sub     w0, w20, w22
4251         b       .L577
4252 .L576:
4253         add     x0, x29, 112
4254         add     x1, x29, 116
4255         add     x2, x29, 120
4256         add     x3, x29, 124
4257         adrp    x19, :got:gBbtInfo
4258         adrp    x23, :got:p_valid_page_count_table
4259         bl      NandcGetTimeCfg
4260         adrp    x25, :got:g_sys_ext_data
4261         ldr     w4, [x29,120]
4262         adrp    x1, .LC5
4263         ldr     w5, [x29,124]
4264         mov     x0, x20
4265         ldr     w3, [x29,116]
4266         add     x1, x1, :lo12:.LC5
4267         ldr     w2, [x29,112]
4268         bl      sprintf
4269         add     x21, x20, x0, sxtw
4270         adrp    x1, .LC6
4271         mov     x0, x21
4272         add     x1, x1, :lo12:.LC6
4273         add     x21, x21, 10
4274         adrp    x20, :got:g_sys_save_data
4275         bl      strcpy
4276         adrp    x2, :got:g_MaxLpn
4277         adrp    x1, .LC7
4278         mov     x0, x21
4279         add     x1, x1, :lo12:.LC7
4280         ldr     x2, [x2, #:got_lo12:g_MaxLpn]
4281         ldr     w2, [x2]
4282         bl      sprintf
4283         add     x21, x21, x0, sxtw
4284         adrp    x2, :got:g_VaildLpn
4285         adrp    x1, .LC8
4286         mov     x0, x21
4287         add     x1, x1, :lo12:.LC8
4288         ldr     x2, [x2, #:got_lo12:g_VaildLpn]
4289         ldr     w2, [x2]
4290         bl      sprintf
4291         add     x21, x21, x0, sxtw
4292         adrp    x2, :got:g_totle_read_page_count
4293         adrp    x1, .LC9
4294         mov     x0, x21
4295         add     x1, x1, :lo12:.LC9
4296         ldr     x2, [x2, #:got_lo12:g_totle_read_page_count]
4297         ldr     w2, [x2]
4298         bl      sprintf
4299         add     x21, x21, x0, sxtw
4300         adrp    x2, :got:g_totle_discard_page_count
4301         adrp    x1, .LC10
4302         mov     x0, x21
4303         add     x1, x1, :lo12:.LC10
4304         ldr     x2, [x2, #:got_lo12:g_totle_discard_page_count]
4305         ldr     w2, [x2]
4306         bl      sprintf
4307         add     x21, x21, x0, sxtw
4308         adrp    x2, :got:g_totle_write_page_count
4309         adrp    x1, .LC11
4310         mov     x0, x21
4311         add     x1, x1, :lo12:.LC11
4312         ldr     x2, [x2, #:got_lo12:g_totle_write_page_count]
4313         ldr     w2, [x2]
4314         bl      sprintf
4315         add     x21, x21, x0, sxtw
4316         adrp    x2, :got:g_totle_cache_write_count
4317         adrp    x1, .LC12
4318         mov     x0, x21
4319         add     x1, x1, :lo12:.LC12
4320         ldr     x2, [x2, #:got_lo12:g_totle_cache_write_count]
4321         ldr     w2, [x2]
4322         bl      sprintf
4323         add     x21, x21, x0, sxtw
4324         adrp    x2, :got:g_totle_l2p_write_count
4325         adrp    x1, .LC13
4326         mov     x0, x21
4327         add     x1, x1, :lo12:.LC13
4328         ldr     x2, [x2, #:got_lo12:g_totle_l2p_write_count]
4329         ldr     w2, [x2]
4330         bl      sprintf
4331         add     x21, x21, x0, sxtw
4332         adrp    x2, :got:g_totle_gc_page_count
4333         adrp    x1, .LC14
4334         mov     x0, x21
4335         add     x1, x1, :lo12:.LC14
4336         ldr     x2, [x2, #:got_lo12:g_totle_gc_page_count]
4337         ldr     w2, [x2]
4338         bl      sprintf
4339         add     x21, x21, x0, sxtw
4340         adrp    x0, :got:g_totle_write_sector
4341         adrp    x1, .LC15
4342         add     x1, x1, :lo12:.LC15
4343         ldr     x0, [x0, #:got_lo12:g_totle_write_sector]
4344         ldr     w2, [x0]
4345         mov     x0, x21
4346         lsr     w2, w2, 11
4347         bl      sprintf
4348         add     x21, x21, x0, sxtw
4349         adrp    x0, :got:g_totle_read_sector
4350         adrp    x1, .LC16
4351         add     x1, x1, :lo12:.LC16
4352         ldr     x0, [x0, #:got_lo12:g_totle_read_sector]
4353         ldr     w2, [x0]
4354         mov     x0, x21
4355         lsr     w2, w2, 11
4356         bl      sprintf
4357         add     x21, x21, x0, sxtw
4358         adrp    x2, :got:g_GlobalSysVersion
4359         adrp    x1, .LC17
4360         mov     x0, x21
4361         add     x1, x1, :lo12:.LC17
4362         ldr     x2, [x2, #:got_lo12:g_GlobalSysVersion]
4363         ldr     w2, [x2]
4364         bl      sprintf
4365         add     x21, x21, x0, sxtw
4366         adrp    x2, :got:g_GlobalDataVersion
4367         adrp    x1, .LC18
4368         add     x1, x1, :lo12:.LC18
4369         mov     x0, x21
4370         ldr     x2, [x2, #:got_lo12:g_GlobalDataVersion]
4371         ldr     w2, [x2]
4372         bl      sprintf
4373         ldr     x19, [x19, #:got_lo12:gBbtInfo]
4374         add     x21, x21, x0, sxtw
4375         ldrh    w2, [x19,6]
4376         str     x2, [x29,104]
4377         bl      FtlBbtCalcTotleCnt
4378         uxth    w3, w0
4379         ldr     x2, [x29,104]
4380         adrp    x1, .LC19
4381         mov     x0, x21
4382         add     x1, x1, :lo12:.LC19
4383         bl      sprintf
4384         add     x21, x21, x0, sxtw
4385         adrp    x2, :got:g_num_free_superblocks
4386         adrp    x1, .LC20
4387         mov     x0, x21
4388         add     x1, x1, :lo12:.LC20
4389         ldr     x2, [x2, #:got_lo12:g_num_free_superblocks]
4390         ldrh    w2, [x2]
4391         bl      sprintf
4392         add     x21, x21, x0, sxtw
4393         adrp    x2, :got:g_totle_mlc_erase_count
4394         adrp    x1, .LC21
4395         mov     x0, x21
4396         add     x1, x1, :lo12:.LC21
4397         ldr     x2, [x2, #:got_lo12:g_totle_mlc_erase_count]
4398         ldr     w2, [x2]
4399         bl      sprintf
4400         add     x21, x21, x0, sxtw
4401         adrp    x2, :got:g_totle_slc_erase_count
4402         adrp    x1, .LC22
4403         mov     x0, x21
4404         add     x1, x1, :lo12:.LC22
4405         ldr     x2, [x2, #:got_lo12:g_totle_slc_erase_count]
4406         ldr     w2, [x2]
4407         bl      sprintf
4408         add     x21, x21, x0, sxtw
4409         adrp    x2, :got:g_totle_avg_erase_count
4410         adrp    x1, .LC23
4411         mov     x0, x21
4412         add     x1, x1, :lo12:.LC23
4413         ldr     x2, [x2, #:got_lo12:g_totle_avg_erase_count]
4414         ldr     w2, [x2]
4415         bl      sprintf
4416         add     x21, x21, x0, sxtw
4417         adrp    x2, :got:g_totle_sys_slc_erase_count
4418         adrp    x1, .LC24
4419         mov     x0, x21
4420         add     x1, x1, :lo12:.LC24
4421         ldr     x2, [x2, #:got_lo12:g_totle_sys_slc_erase_count]
4422         ldr     w2, [x2]
4423         bl      sprintf
4424         add     x21, x21, x0, sxtw
4425         adrp    x2, :got:g_max_erase_count
4426         adrp    x1, .LC25
4427         mov     x0, x21
4428         add     x1, x1, :lo12:.LC25
4429         ldr     x2, [x2, #:got_lo12:g_max_erase_count]
4430         ldr     w2, [x2]
4431         bl      sprintf
4432         add     x21, x21, x0, sxtw
4433         adrp    x2, :got:g_min_erase_count
4434         adrp    x1, .LC26
4435         mov     x0, x21
4436         add     x1, x1, :lo12:.LC26
4437         ldr     x2, [x2, #:got_lo12:g_min_erase_count]
4438         ldr     w2, [x2]
4439         bl      sprintf
4440         ldr     x20, [x20, #:got_lo12:g_sys_save_data]
4441         adrp    x1, .LC27
4442         add     x21, x21, x0, sxtw
4443         add     x1, x1, :lo12:.LC27
4444         mov     x0, x21
4445         ldrh    w2, [x20,30]
4446         bl      sprintf
4447         add     x21, x21, x0, sxtw
4448         ldrh    w2, [x20,28]
4449         adrp    x1, .LC28
4450         mov     x0, x21
4451         add     x1, x1, :lo12:.LC28
4452         adrp    x20, :got:g_gc_superblock
4453         bl      sprintf
4454         add     x21, x21, x0, sxtw
4455         adrp    x2, :got:g_MaxLbaSector
4456         adrp    x1, .LC29
4457         mov     x0, x21
4458         add     x1, x1, :lo12:.LC29
4459         ldr     x2, [x2, #:got_lo12:g_MaxLbaSector]
4460         ldr     w2, [x2]
4461         bl      sprintf
4462         add     x21, x21, x0, sxtw
4463         adrp    x2, :got:c_ftl_nand_init_sys_blks_per_plane
4464         adrp    x1, .LC30
4465         mov     x0, x21
4466         add     x1, x1, :lo12:.LC30
4467         ldr     x2, [x2, #:got_lo12:c_ftl_nand_init_sys_blks_per_plane]
4468         ldr     w2, [x2]
4469         bl      sprintf
4470         add     x21, x21, x0, sxtw
4471         adrp    x2, :got:c_ftl_nand_sys_blks_per_plane
4472         adrp    x1, .LC31
4473         mov     x0, x21
4474         add     x1, x1, :lo12:.LC31
4475         ldr     x2, [x2, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
4476         ldr     w2, [x2]
4477         bl      sprintf
4478         add     x21, x21, x0, sxtw
4479         adrp    x2, :got:gSysFreeQueue
4480         adrp    x1, .LC32
4481         mov     x0, x21
4482         add     x1, x1, :lo12:.LC32
4483         ldr     x2, [x2, #:got_lo12:gSysFreeQueue]
4484         ldrh    w2, [x2,6]
4485         bl      sprintf
4486         add     x21, x21, x0, sxtw
4487         adrp    x2, :got:c_ftl_nand_data_blks_per_plane
4488         adrp    x1, .LC33
4489         mov     x0, x21
4490         add     x1, x1, :lo12:.LC33
4491         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_blks_per_plane]
4492         ldrh    w2, [x2]
4493         bl      sprintf
4494         add     x21, x21, x0, sxtw
4495         adrp    x2, :got:c_ftl_nand_data_op_blks_per_plane
4496         adrp    x1, .LC34
4497         mov     x0, x21
4498         add     x1, x1, :lo12:.LC34
4499         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
4500         ldrh    w2, [x2]
4501         bl      sprintf
4502         add     x21, x21, x0, sxtw
4503         adrp    x2, :got:c_ftl_nand_max_data_blks
4504         adrp    x1, .LC35
4505         mov     x0, x21
4506         add     x1, x1, :lo12:.LC35
4507         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_data_blks]
4508         ldr     w2, [x2]
4509         bl      sprintf
4510         add     x21, x21, x0, sxtw
4511         adrp    x2, :got:gSysInfo
4512         adrp    x1, .LC36
4513         mov     x0, x21
4514         add     x1, x1, :lo12:.LC36
4515         ldr     x2, [x2, #:got_lo12:gSysInfo]
4516         ldrh    w2, [x2]
4517         bl      sprintf
4518         add     x21, x21, x0, sxtw
4519         ldrh    w2, [x19]
4520         adrp    x1, .LC37
4521         adrp    x19, :got:g_active_superblock
4522         mov     x0, x21
4523         add     x1, x1, :lo12:.LC37
4524         bl      sprintf
4525         ldr     x19, [x19, #:got_lo12:g_active_superblock]
4526         adrp    x1, .LC38
4527         add     x21, x21, x0, sxtw
4528         add     x1, x1, :lo12:.LC38
4529         mov     x0, x21
4530         ldrh    w2, [x19,2]
4531         bl      sprintf
4532         add     x21, x21, x0, sxtw
4533         ldrb    w2, [x19,6]
4534         adrp    x1, .LC39
4535         mov     x0, x21
4536         add     x1, x1, :lo12:.LC39
4537         bl      sprintf
4538         add     x21, x21, x0, sxtw
4539         ldrh    w2, [x19]
4540         adrp    x1, .LC40
4541         mov     x0, x21
4542         add     x1, x1, :lo12:.LC40
4543         bl      sprintf
4544         add     x21, x21, x0, sxtw
4545         ldrb    w2, [x19,8]
4546         adrp    x1, .LC41
4547         mov     x0, x21
4548         add     x1, x1, :lo12:.LC41
4549         bl      sprintf
4550         add     x21, x21, x0, sxtw
4551         ldrh    w2, [x19,4]
4552         adrp    x1, .LC42
4553         mov     x0, x21
4554         add     x1, x1, :lo12:.LC42
4555         bl      sprintf
4556         ldr     x24, [x23, #:got_lo12:p_valid_page_count_table]
4557         ldrh    w3, [x19]
4558         adrp    x1, .LC43
4559         adrp    x19, :got:g_buffer_superblock
4560         add     x21, x21, x0, sxtw
4561         ldr     x2, [x24]
4562         mov     x0, x21
4563         add     x1, x1, :lo12:.LC43
4564         ldrh    w2, [x2,x3,lsl 1]
4565         bl      sprintf
4566         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
4567         adrp    x1, .LC44
4568         add     x21, x21, x0, sxtw
4569         add     x1, x1, :lo12:.LC44
4570         mov     x0, x21
4571         ldrh    w2, [x19,2]
4572         bl      sprintf
4573         add     x21, x21, x0, sxtw
4574         ldrb    w2, [x19,6]
4575         adrp    x1, .LC45
4576         mov     x0, x21
4577         add     x1, x1, :lo12:.LC45
4578         bl      sprintf
4579         add     x21, x21, x0, sxtw
4580         ldrh    w2, [x19]
4581         adrp    x1, .LC46
4582         mov     x0, x21
4583         add     x1, x1, :lo12:.LC46
4584         bl      sprintf
4585         add     x21, x21, x0, sxtw
4586         ldrb    w2, [x19,8]
4587         adrp    x1, .LC47
4588         mov     x0, x21
4589         add     x1, x1, :lo12:.LC47
4590         bl      sprintf
4591         add     x21, x21, x0, sxtw
4592         ldrh    w2, [x19,4]
4593         adrp    x1, .LC48
4594         mov     x0, x21
4595         add     x1, x1, :lo12:.LC48
4596         bl      sprintf
4597         add     x21, x21, x0, sxtw
4598         ldrh    w3, [x19]
4599         adrp    x1, .LC49
4600         ldr     x2, [x24]
4601         adrp    x19, :got:g_gc_temp_superblock
4602         mov     x0, x21
4603         add     x1, x1, :lo12:.LC49
4604         ldrh    w2, [x2,x3,lsl 1]
4605         bl      sprintf
4606         ldr     x19, [x19, #:got_lo12:g_gc_temp_superblock]
4607         adrp    x1, .LC50
4608         add     x21, x21, x0, sxtw
4609         add     x1, x1, :lo12:.LC50
4610         mov     x0, x21
4611         ldrh    w2, [x19,2]
4612         bl      sprintf
4613         add     x21, x21, x0, sxtw
4614         ldrb    w2, [x19,6]
4615         adrp    x1, .LC51
4616         mov     x0, x21
4617         add     x1, x1, :lo12:.LC51
4618         bl      sprintf
4619         add     x21, x21, x0, sxtw
4620         ldrh    w2, [x19]
4621         adrp    x1, .LC52
4622         mov     x0, x21
4623         add     x1, x1, :lo12:.LC52
4624         bl      sprintf
4625         add     x21, x21, x0, sxtw
4626         ldrb    w2, [x19,8]
4627         adrp    x1, .LC53
4628         mov     x0, x21
4629         add     x1, x1, :lo12:.LC53
4630         bl      sprintf
4631         add     x21, x21, x0, sxtw
4632         ldrh    w2, [x19,4]
4633         adrp    x1, .LC54
4634         mov     x0, x21
4635         add     x1, x1, :lo12:.LC54
4636         bl      sprintf
4637         ldr     x20, [x20, #:got_lo12:g_gc_superblock]
4638         adrp    x1, .LC55
4639         add     x21, x21, x0, sxtw
4640         add     x1, x1, :lo12:.LC55
4641         mov     x0, x21
4642         ldrh    w2, [x20,2]
4643         bl      sprintf
4644         add     x21, x21, x0, sxtw
4645         ldrb    w2, [x20,6]
4646         adrp    x1, .LC56
4647         mov     x0, x21
4648         add     x1, x1, :lo12:.LC56
4649         bl      sprintf
4650         add     x21, x21, x0, sxtw
4651         ldrh    w2, [x20]
4652         adrp    x1, .LC57
4653         mov     x0, x21
4654         add     x1, x1, :lo12:.LC57
4655         bl      sprintf
4656         add     x21, x21, x0, sxtw
4657         ldrb    w2, [x20,8]
4658         adrp    x1, .LC58
4659         mov     x0, x21
4660         add     x1, x1, :lo12:.LC58
4661         bl      sprintf
4662         add     x21, x21, x0, sxtw
4663         ldrh    w2, [x20,4]
4664         adrp    x1, .LC59
4665         mov     x0, x21
4666         add     x1, x1, :lo12:.LC59
4667         bl      sprintf
4668         add     x21, x21, x0, sxtw
4669         adrp    x0, :got:g_all_blk_used_slc_mode
4670         ldr     x25, [x25, #:got_lo12:g_sys_ext_data]
4671         adrp    x1, .LC60
4672         add     x1, x1, :lo12:.LC60
4673         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
4674         ldr     w4, [x25,84]
4675         ldr     w5, [x25,76]
4676         ldr     w3, [x0]
4677         adrp    x0, :got:g_inkDie_check_enable
4678         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
4679         ldr     w2, [x0]
4680         mov     x0, x21
4681         orr     w2, w2, w3, lsl 8
4682         ldr     w3, [x25,80]
4683         bl      sprintf
4684         add     x19, x21, x0, sxtw
4685         ldr     w2, [x25,72]
4686         adrp    x1, .LC61
4687         mov     x0, x19
4688         add     x1, x1, :lo12:.LC61
4689         bl      sprintf
4690         add     x19, x19, x0, sxtw
4691         ldr     w2, [x25,96]
4692         adrp    x1, .LC62
4693         mov     x0, x19
4694         add     x1, x1, :lo12:.LC62
4695         bl      sprintf
4696         add     x19, x19, x0, sxtw
4697         adrp    x2, :got:g_gc_free_blk_threshold
4698         adrp    x1, .LC63
4699         mov     x0, x19
4700         add     x1, x1, :lo12:.LC63
4701         ldr     x2, [x2, #:got_lo12:g_gc_free_blk_threshold]
4702         ldrh    w2, [x2]
4703         bl      sprintf
4704         add     x19, x19, x0, sxtw
4705         adrp    x2, :got:g_gc_merge_free_blk_threshold
4706         adrp    x1, .LC64
4707         mov     x0, x19
4708         add     x1, x1, :lo12:.LC64
4709         ldr     x2, [x2, #:got_lo12:g_gc_merge_free_blk_threshold]
4710         ldrh    w2, [x2]
4711         bl      sprintf
4712         add     x19, x19, x0, sxtw
4713         adrp    x2, :got:g_gc_skip_write_count
4714         adrp    x1, .LC65
4715         mov     x0, x19
4716         add     x1, x1, :lo12:.LC65
4717         ldr     x2, [x2, #:got_lo12:g_gc_skip_write_count]
4718         ldr     w2, [x2]
4719         bl      sprintf
4720         add     x19, x19, x0, sxtw
4721         adrp    x2, :got:g_gc_blk_index
4722         adrp    x1, .LC66
4723         add     x1, x1, :lo12:.LC66
4724         mov     x0, x19
4725         ldr     x2, [x2, #:got_lo12:g_gc_blk_index]
4726         ldrh    w2, [x2]
4727         bl      sprintf
4728         add     x19, x19, x0, sxtw
4729         bl      GetFreeBlockMinEraseCount
4730         uxth    w2, w0
4731         adrp    x1, .LC67
4732         mov     x0, x19
4733         add     x1, x1, :lo12:.LC67
4734         bl      sprintf
4735         add     x19, x19, x0, sxtw
4736         bl      GetFreeBlockMaxEraseCount
4737         uxth    w2, w0
4738         adrp    x1, .LC68
4739         mov     x0, x19
4740         add     x1, x1, :lo12:.LC68
4741         bl      sprintf
4742         add     x19, x19, x0, sxtw
4743         ldrh    w0, [x20]
4744         mov     w1, 65535
4745         cmp     w0, w1
4746         beq     .L578
4747         ubfiz   x2, x0, 1, 16
4748         ldr     x3, [x24]
4749         adrp    x1, .LC69
4750         mov     x0, x19
4751         add     x1, x1, :lo12:.LC69
4752         ldrh    w2, [x3,x2]
4753         bl      sprintf
4754         add     x19, x19, x0, sxtw
4755 .L578:
4756         mov     w0, 0
4757         adrp    x24, .LC70
4758         mov     w20, 0
4759         adrp    x28, :got:p_data_block_list_table
4760         bl      List_get_gc_head_node
4761         add     x24, x24, :lo12:.LC70
4762         uxth    w3, w0
4763         mov     w9, 65535
4764         mov     w8, 6
4765         adrp    x27, :got:p_erase_count_table
4766 .L580:
4767         cmp     w3, w9
4768         str     x9, [x29,96]
4769         adrp    x21, :got:p_data_block_list_table
4770         beq     .L579
4771         ldr     x0, [x23, #:got_lo12:p_valid_page_count_table]
4772         ubfiz   x6, x3, 1, 16
4773         ldr     x26, [x28, #:got_lo12:p_data_block_list_table]
4774         mov     w2, w20
4775         umull   x25, w3, w8
4776         ldr     x4, [x0]
4777         mov     x1, x24
4778         ldr     x0, [x27, #:got_lo12:p_erase_count_table]
4779         add     w20, w20, 1
4780         ldr     x5, [x26]
4781         ldrh    w4, [x4,x6]
4782         ldr     x7, [x0]
4783         add     x5, x5, x25
4784         mov     x0, x19
4785         str     x8, [x29,104]
4786         ldrh    w5, [x5,4]
4787         ldrh    w6, [x7,x6]
4788         bl      sprintf
4789         add     x19, x19, x0, sxtw
4790         ldr     x0, [x26]
4791         cmp     w20, 16
4792         ldr     x8, [x29,104]
4793         ldr     x9, [x29,96]
4794         ldrh    w3, [x0,x25]
4795         bne     .L580
4796 .L579:
4797         adrp    x0, :got:p_free_data_block_list_head
4798         ldr     x1, [x21, #:got_lo12:p_data_block_list_table]
4799         adrp    x23, .LC71
4800         mov     w20, 0
4801         mov     w28, 65535
4802         mov     w27, 6
4803         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
4804         add     x23, x23, :lo12:.LC71
4805         ldr     x3, [x1]
4806         adrp    x26, :got:p_erase_count_table
4807         ldr     x0, [x0]
4808         sub     x3, x0, x3
4809         mov     x0, -6148914691236517206
4810         asr     x3, x3, 1
4811         madd    x3, x0, x3, x3
4812         uxth    w3, w3
4813 .L582:
4814         cmp     w3, w28
4815         beq     .L581
4816         ldr     x25, [x21, #:got_lo12:p_data_block_list_table]
4817         ubfiz   x5, x3, 1, 16
4818         ldr     x0, [x26, #:got_lo12:p_erase_count_table]
4819         mov     w2, w20
4820         umull   x24, w3, w27
4821         ldr     x4, [x25]
4822         mov     x1, x23
4823         ldr     x6, [x0]
4824         mov     x0, x19
4825         add     x4, x4, x24
4826         add     w20, w20, 1
4827         ldrh    w5, [x6,x5]
4828         ldrh    w4, [x4,4]
4829         bl      sprintf
4830         add     x19, x19, x0, sxtw
4831         ldr     x0, [x25]
4832         cmp     w20, 4
4833         ldrh    w3, [x0,x24]
4834         bne     .L582
4835 .L581:
4836         sub     w0, w19, w22
4837 .L577:
4838         ldp     x19, x20, [sp,16]
4839         ldp     x21, x22, [sp,32]
4840         ldp     x23, x24, [sp,48]
4841         ldp     x25, x26, [sp,64]
4842         ldp     x27, x28, [sp,80]
4843         ldp     x29, x30, [sp], 128
4844         ret
4845         .size   FtlPrintInfo2buf, .-FtlPrintInfo2buf
4846         .align  2
4847         .global rknand_proc_ftlread
4848         .type   rknand_proc_ftlread, %function
4849 rknand_proc_ftlread:
4850         stp     x29, x30, [sp, -32]!
4851         adrp    x1, .LC72
4852         adrp    x2, .LC73
4853         add     x29, sp, 0
4854         add     x1, x1, :lo12:.LC72
4855         add     x2, x2, :lo12:.LC73
4856         stp     x19, x20, [sp,16]
4857         mov     x20, x0
4858         bl      sprintf
4859         add     x19, x20, x0, sxtw
4860         mov     x0, x19
4861         bl      FtlPrintInfo2buf
4862         add     x0, x19, x0, sxtw
4863         sub     w0, w0, w20
4864         ldp     x19, x20, [sp,16]
4865         ldp     x29, x30, [sp], 32
4866         ret
4867         .size   rknand_proc_ftlread, .-rknand_proc_ftlread
4868         .align  2
4869         .global GetSwlReplaceBlock
4870         .type   GetSwlReplaceBlock, %function
4871 GetSwlReplaceBlock:
4872         adrp    x1, :got:g_totle_avg_erase_count
4873         adrp    x2, :got:g_min_erase_count
4874         stp     x29, x30, [sp, -80]!
4875         add     x29, sp, 0
4876         ldr     x0, [x1, #:got_lo12:g_totle_avg_erase_count]
4877         stp     x23, x24, [sp,48]
4878         stp     x25, x26, [sp,64]
4879         stp     x19, x20, [sp,16]
4880         stp     x21, x22, [sp,32]
4881         mov     x24, x1
4882         mov     x25, x2
4883         ldr     w3, [x0]
4884         ldr     x0, [x2, #:got_lo12:g_min_erase_count]
4885         ldr     w0, [x0]
4886         cmp     w3, w0
4887         bcs     .L587
4888         adrp    x0, :got:g_totle_mlc_erase_count
4889         adrp    x2, :got:p_erase_count_table
4890         ldr     x1, [x0, #:got_lo12:g_totle_mlc_erase_count]
4891         str     wzr, [x1]
4892         adrp    x1, :got:c_ftl_nand_data_blks_per_plane
4893         ldr     x2, [x2, #:got_lo12:p_erase_count_table]
4894         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_blks_per_plane]
4895         ldr     x5, [x2]
4896         mov     x2, 0
4897         ldrh    w1, [x1]
4898 .L588:
4899         cmp     w1, w2
4900         bls     .L631
4901         ldr     x4, [x0, #:got_lo12:g_totle_mlc_erase_count]
4902         ldrh    w6, [x5,x2,lsl 1]
4903         add     x2, x2, 1
4904         ldr     w3, [x4]
4905         add     w3, w6, w3
4906         str     w3, [x4]
4907         b       .L588
4908 .L631:
4909         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
4910         ldr     x2, [x24, #:got_lo12:g_totle_avg_erase_count]
4911         ldr     w3, [x0]
4912         udiv    w1, w3, w1
4913         str     w1, [x2]
4914         adrp    x1, :got:g_totle_slc_erase_count
4915         ldr     x1, [x1, #:got_lo12:g_totle_slc_erase_count]
4916         ldr     w1, [x1]
4917         sub     w3, w3, w1
4918         adrp    x1, :got:c_mlc_erase_count_value
4919         ldr     x1, [x1, #:got_lo12:c_mlc_erase_count_value]
4920         ldrh    w1, [x1]
4921         udiv    w3, w3, w1
4922         str     w3, [x0]
4923         b       .L590
4924 .L587:
4925         adrp    x0, :got:g_max_erase_count
4926         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
4927         ldr     w1, [x0]
4928         cmp     w3, w1
4929         bls     .L590
4930         add     w1, w1, 1
4931         adrp    x4, :got:c_ftl_nand_data_blks_per_plane
4932         str     w1, [x0]
4933         adrp    x5, :got:p_erase_count_table
4934         mov     w0, 0
4935 .L592:
4936         ldr     x1, [x4, #:got_lo12:c_ftl_nand_data_blks_per_plane]
4937         ldrh    w1, [x1]
4938         cmp     w0, w1
4939         bcs     .L590
4940         ldr     x1, [x5, #:got_lo12:p_erase_count_table]
4941         ubfiz   x2, x0, 1, 32
4942         add     w0, w0, 1
4943         ldr     x3, [x1]
4944         ldrh    w1, [x3,x2]
4945         add     w1, w1, 1
4946         strh    w1, [x3,x2]
4947         b       .L592
4948 .L590:
4949         ldr     x0, [x25, #:got_lo12:g_min_erase_count]
4950         ldr     x1, [x24, #:got_lo12:g_totle_avg_erase_count]
4951         ldr     w0, [x0]
4952         ldr     w1, [x1]
4953         add     w2, w0, 341
4954         cmp     w2, w1
4955         bls     .L595
4956         adrp    x2, :got:g_max_erase_count
4957         add     w1, w0, 1024
4958         ldr     x2, [x2, #:got_lo12:g_max_erase_count]
4959         ldr     w2, [x2]
4960         cmp     w1, w2
4961         bls     .L595
4962         adrp    x1, :got:g_inkDie_check_enable
4963         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
4964         ldr     w1, [x1]
4965         cbz     w1, .L598
4966         cmp     w0, 30
4967         bls     .L595
4968 .L598:
4969         mov     w0, 65535
4970         b       .L597
4971 .L595:
4972         bl      GetFreeBlockMaxEraseCount
4973         uxth    w26, w0
4974         ldr     x0, [x25, #:got_lo12:g_min_erase_count]
4975         ldr     w1, [x0]
4976         add     w0, w1, 64
4977         cmp     w26, w0
4978         bcs     .L611
4979         cmp     w1, 30
4980         bhi     .L598
4981 .L611:
4982         adrp    x0, :got:p_data_block_list_head
4983         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
4984         ldr     x2, [x0]
4985         cbz     x2, .L598
4986         adrp    x0, :got:p_data_block_list_table
4987         adrp    x21, :got:p_erase_count_table
4988         mov     w22, 65535
4989         mov     x5, -6148914691236517206
4990         mov     w19, w22
4991         mov     w8, w22
4992         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4993         add     x5, x5, 1
4994         mov     w9, 6
4995         ldr     x7, [x0]
4996         ldr     x0, [x21, #:got_lo12:p_erase_count_table]
4997         ldr     x6, [x0]
4998 .L600:
4999         ldrh    w4, [x2]
5000         cmp     w4, w8
5001         beq     .L602
5002         ldrh    w0, [x2,4]
5003         cbz     w0, .L601
5004         sub     x3, x2, x7
5005         asr     x3, x3, 1
5006         mul     x3, x3, x5
5007         uxth    w2, w3
5008         and     x3, x3, 65535
5009         ldrh    w0, [x6,x3,lsl 1]
5010         cmp     w0, w1
5011         bls     .L610
5012         cmp     w0, w22
5013         bcs     .L601
5014         mov     w22, w0
5015         mov     w19, w2
5016 .L601:
5017         umull   x2, w4, w9
5018         add     x2, x7, x2
5019         b       .L600
5020 .L610:
5021         mov     w19, w2
5022 .L602:
5023         mov     w0, 65535
5024         cmp     w19, w0
5025         beq     .L598
5026         ubfiz   x23, x19, 1, 16
5027         ldrh    w20, [x6,x23]
5028         cmp     w20, w1
5029         bls     .L605
5030         bl      GetFreeBlockMinEraseCount
5031         ldr     x2, [x25, #:got_lo12:g_min_erase_count]
5032         ldr     w1, [x2]
5033         cmp     w1, w0, uxth
5034         bcs     .L605
5035         str     w22, [x2]
5036 .L605:
5037         cmp     w20, 29
5038         bhi     .L607
5039         adrp    x1, :got:g_inkDie_check_enable
5040         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
5041         ldr     w0, [x1]
5042         cbz     w0, .L607
5043         ldr     x0, [x24, #:got_lo12:g_totle_avg_erase_count]
5044         add     w1, w20, 10
5045         ldr     w0, [x0]
5046         cmp     w1, w0
5047         bls     .L608
5048         adrp    x1, :got:c_mlc_erase_count_value
5049         ldr     x1, [x1, #:got_lo12:c_mlc_erase_count_value]
5050         ldrh    w0, [x1]
5051         cmp     w0, w20
5052         bls     .L607
5053 .L608:
5054         adrp    x1, :got:g_num_data_superblocks
5055         ldr     x1, [x1, #:got_lo12:g_num_data_superblocks]
5056         ldrh    w0, [x1]
5057         cmp     w0, 64
5058         bls     .L607
5059         ldr     x21, [x21, #:got_lo12:p_erase_count_table]
5060         adrp    x0, .LC74
5061         mov     w1, w19
5062         add     x0, x0, :lo12:.LC74
5063         ldr     x2, [x21]
5064         ldrh    w2, [x2,x23]
5065         bl      printk
5066         b       .L630
5067 .L607:
5068         ldr     x1, [x24, #:got_lo12:g_totle_avg_erase_count]
5069         ldr     w2, [x1]
5070         cmp     w20, w2
5071         bcs     .L598
5072         add     w0, w20, 64
5073         cmp     w26, w0
5074         ble     .L598
5075         add     w0, w20, 341
5076         cmp     w0, w2
5077         adrp    x0, :got:g_max_erase_count
5078         bcc     .L609
5079         ldr     x1, [x0, #:got_lo12:g_max_erase_count]
5080         add     w20, w20, 1024
5081         ldr     w1, [x1]
5082         cmp     w20, w1
5083         bcs     .L598
5084 .L609:
5085         ldr     x3, [x0, #:got_lo12:g_max_erase_count]
5086         adrp    x0, :got:p_valid_page_count_table
5087         ldr     x21, [x21, #:got_lo12:p_erase_count_table]
5088         mov     w1, w19
5089         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
5090         ldr     x5, [x21]
5091         ldr     w3, [x3]
5092         ldr     x4, [x0]
5093         adrp    x0, .LC75
5094         ldrh    w5, [x5,x23]
5095         add     x0, x0, :lo12:.LC75
5096         ldrh    w4, [x4,x23]
5097         bl      printk
5098 .L630:
5099         adrp    x0, :got:g_in_swl_replace
5100         mov     w1, 1
5101         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
5102         str     w1, [x0]
5103         mov     w0, w19
5104 .L597:
5105         ldp     x19, x20, [sp,16]
5106         ldp     x21, x22, [sp,32]
5107         ldp     x23, x24, [sp,48]
5108         ldp     x25, x26, [sp,64]
5109         ldp     x29, x30, [sp], 80
5110         ret
5111         .size   GetSwlReplaceBlock, .-GetSwlReplaceBlock
5112         .align  2
5113         .global free_data_superblock
5114         .type   free_data_superblock, %function
5115 free_data_superblock:
5116         stp     x29, x30, [sp, -16]!
5117         uxth    w0, w0
5118         mov     w1, 65535
5119         cmp     w0, w1
5120         add     x29, sp, 0
5121         beq     .L633
5122         adrp    x1, :got:p_valid_page_count_table
5123         ubfiz   x2, x0, 1, 16
5124         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
5125         ldr     x1, [x1]
5126         strh    wzr, [x1,x2]
5127         bl      INSERT_FREE_LIST
5128 .L633:
5129         mov     w0, 0
5130         ldp     x29, x30, [sp], 16
5131         ret
5132         .size   free_data_superblock, .-free_data_superblock
5133         .align  2
5134         .global FtlGcBufInit
5135         .type   FtlGcBufInit, %function
5136 FtlGcBufInit:
5137         adrp    x0, :got:g_gc_num_req
5138         mov     w1, 0
5139         adrp    x6, :got:c_ftl_nand_planes_num
5140         mov     w7, 24
5141         adrp    x8, :got:gp_gc_page_buf_info
5142         mov     w9, 1
5143         ldr     x0, [x0, #:got_lo12:g_gc_num_req]
5144         adrp    x10, :got:c_ftl_nand_byte_pre_page
5145         mov     w3, 4
5146         adrp    x11, :got:p_gc_data_buf
5147         adrp    x12, :got:c_ftl_nand_byte_pre_oob
5148         adrp    x13, :got:p_gc_spare_buf
5149         str     wzr, [x0]
5150         adrp    x14, :got:req_gc
5151         mov     w15, 56
5152 .L635:
5153         ldr     x0, [x6, #:got_lo12:c_ftl_nand_planes_num]
5154         ldrh    w0, [x0]
5155         cmp     w1, w0
5156         bcs     .L639
5157         ldr     x4, [x8, #:got_lo12:gp_gc_page_buf_info]
5158         umull   x2, w1, w7
5159         ldr     x5, [x4]
5160         add     x0, x5, x2
5161         str     w9, [x0,16]
5162         ldr     x0, [x10, #:got_lo12:c_ftl_nand_byte_pre_page]
5163         ldr     x16, [x11, #:got_lo12:p_gc_data_buf]
5164         ldrh    w0, [x0]
5165         ldr     x16, [x16]
5166         mul     w0, w1, w0
5167         sdiv    w0, w0, w3
5168         add     x0, x16, x0, sxtw 2
5169         str     x0, [x5,x2]
5170         ldr     x0, [x12, #:got_lo12:c_ftl_nand_byte_pre_oob]
5171         ldr     x5, [x4]
5172         ldr     x16, [x13, #:got_lo12:p_gc_spare_buf]
5173         ldrh    w0, [x0]
5174         add     x4, x5, x2
5175         ldr     x16, [x16]
5176         mul     w0, w1, w0
5177         sdiv    w0, w0, w3
5178         add     x0, x16, x0, sxtw 2
5179         str     x0, [x4,8]
5180         umull   x0, w1, w15
5181         ldr     x16, [x14, #:got_lo12:req_gc]
5182         add     w1, w1, 1
5183         ldr     x2, [x5,x2]
5184         uxth    w1, w1
5185         ldr     x16, [x16]
5186         add     x0, x16, x0
5187         str     x2, [x0,8]
5188         ldr     x2, [x4,8]
5189         str     x2, [x0,16]
5190         b       .L635
5191 .L639:
5192         adrp    x6, :got:c_gc_page_buf_num
5193         mov     w7, 24
5194         adrp    x8, :got:gp_gc_page_buf_info
5195         adrp    x9, :got:c_ftl_nand_byte_pre_page
5196         mov     w3, 4
5197         adrp    x10, :got:p_gc_data_buf
5198         adrp    x11, :got:c_ftl_nand_byte_pre_oob
5199         adrp    x12, :got:p_gc_spare_buf
5200 .L637:
5201         ldr     x1, [x6, #:got_lo12:c_gc_page_buf_num]
5202         ldr     w1, [x1]
5203         cmp     w0, w1
5204         bcs     .L640
5205         ldr     x4, [x8, #:got_lo12:gp_gc_page_buf_info]
5206         umull   x2, w0, w7
5207         ldr     x5, [x4]
5208         add     x1, x5, x2
5209         str     wzr, [x1,16]
5210         ldr     x1, [x9, #:got_lo12:c_ftl_nand_byte_pre_page]
5211         ldr     x13, [x10, #:got_lo12:p_gc_data_buf]
5212         ldrh    w1, [x1]
5213         ldr     x13, [x13]
5214         mul     w1, w0, w1
5215         sdiv    w1, w1, w3
5216         add     x1, x13, x1, sxtw 2
5217         str     x1, [x5,x2]
5218         ldr     x1, [x11, #:got_lo12:c_ftl_nand_byte_pre_oob]
5219         ldr     x4, [x4]
5220         ldrh    w1, [x1]
5221         add     x2, x4, x2
5222         ldr     x4, [x12, #:got_lo12:p_gc_spare_buf]
5223         mul     w1, w0, w1
5224         add     w0, w0, 1
5225         ldr     x4, [x4]
5226         sdiv    w1, w1, w3
5227         uxth    w0, w0
5228         add     x1, x4, x1, sxtw 2
5229         str     x1, [x2,8]
5230         b       .L637
5231 .L640:
5232         ret
5233         .size   FtlGcBufInit, .-FtlGcBufInit
5234         .align  2
5235         .global FtlGcBufFree
5236         .type   FtlGcBufFree, %function
5237 FtlGcBufFree:
5238         adrp    x2, :got:c_gc_page_buf_num
5239         mov     w3, 0
5240         mov     w7, 56
5241         mov     w9, 24
5242         ldr     x2, [x2, #:got_lo12:c_gc_page_buf_num]
5243         ldr     w8, [x2]
5244         adrp    x2, :got:gp_gc_page_buf_info
5245         ldr     x2, [x2, #:got_lo12:gp_gc_page_buf_info]
5246         ldr     x5, [x2]
5247 .L642:
5248         cmp     w3, w1
5249         bcs     .L641
5250         umull   x4, w3, w7
5251         mov     w2, 0
5252         add     x4, x0, x4
5253 .L647:
5254         cmp     w2, w8
5255         bcs     .L644
5256         umull   x6, w2, w9
5257         add     x10, x5, x6
5258         ldr     x11, [x5,x6]
5259         ldr     x6, [x4,8]
5260         cmp     x11, x6
5261         bne     .L643
5262         str     wzr, [x10,16]
5263         b       .L644
5264 .L643:
5265         add     w2, w2, 1
5266         uxth    w2, w2
5267         b       .L647
5268 .L644:
5269         add     w3, w3, 1
5270         uxth    w3, w3
5271         b       .L642
5272 .L641:
5273         ret
5274         .size   FtlGcBufFree, .-FtlGcBufFree
5275         .align  2
5276         .global FtlGcBufAlloc
5277         .type   FtlGcBufAlloc, %function
5278 FtlGcBufAlloc:
5279         adrp    x2, :got:c_gc_page_buf_num
5280         mov     w7, 24
5281         mov     w8, 1
5282         mov     w9, 56
5283         ldr     x2, [x2, #:got_lo12:c_gc_page_buf_num]
5284         ldr     w5, [x2]
5285         adrp    x2, :got:gp_gc_page_buf_info
5286         ldr     x2, [x2, #:got_lo12:gp_gc_page_buf_info]
5287         ldr     x6, [x2]
5288         mov     w2, 0
5289 .L649:
5290         cmp     w2, w1
5291         bcs     .L655
5292         mov     w3, 0
5293 .L653:
5294         cmp     w3, w5
5295         bcs     .L651
5296         umull   x4, w3, w7
5297         add     x4, x6, x4
5298         ldr     w10, [x4,16]
5299         cbnz    w10, .L650
5300         umull   x3, w2, w9
5301         str     w8, [x4,16]
5302         add     x3, x0, x3
5303         ldr     x10, [x4]
5304         str     x10, [x3,8]
5305         ldr     x4, [x4,8]
5306         str     x4, [x3,16]
5307         b       .L651
5308 .L650:
5309         add     w3, w3, 1
5310         uxth    w3, w3
5311         b       .L653
5312 .L651:
5313         add     w2, w2, 1
5314         uxth    w2, w2
5315         b       .L649
5316 .L655:
5317         ret
5318         .size   FtlGcBufAlloc, .-FtlGcBufAlloc
5319         .align  2
5320         .global IsBlkInGcList
5321         .type   IsBlkInGcList, %function
5322 IsBlkInGcList:
5323         adrp    x1, :got:g_gc_blk_num
5324         uxth    w0, w0
5325         ldr     x1, [x1, #:got_lo12:g_gc_blk_num]
5326         ldrh    w2, [x1]
5327         adrp    x1, :got:p_gc_blk_tbl
5328         ldr     x1, [x1, #:got_lo12:p_gc_blk_tbl]
5329         ldr     x3, [x1]
5330         mov     x1, 0
5331 .L657:
5332         cmp     w2, w1, uxth
5333         bls     .L661
5334         add     x1, x1, 1
5335         add     x4, x3, x1, lsl 1
5336         ldrh    w4, [x4,-2]
5337         cmp     w4, w0
5338         bne     .L657
5339         mov     w0, 1
5340         b       .L658
5341 .L661:
5342         mov     w0, 0
5343 .L658:
5344         ret
5345         .size   IsBlkInGcList, .-IsBlkInGcList
5346         .align  2
5347         .global FtlGcUpdatePage
5348         .type   FtlGcUpdatePage, %function
5349 FtlGcUpdatePage:
5350         stp     x29, x30, [sp, -48]!
5351         add     x29, sp, 0
5352         str     x19, [sp,16]
5353         mov     w19, w0
5354         lsr     w0, w0, 10
5355         str     x1, [x29,32]
5356         str     x2, [x29,40]
5357         bl      P2V_block_in_plane
5358         adrp    x3, :got:g_gc_blk_num
5359         ldr     x2, [x29,40]
5360         ldr     x1, [x29,32]
5361         uxth    w8, w0
5362         mov     x5, 0
5363         ldr     x4, [x3, #:got_lo12:g_gc_blk_num]
5364         ldrh    w7, [x4]
5365         adrp    x4, :got:p_gc_blk_tbl
5366         ldr     x4, [x4, #:got_lo12:p_gc_blk_tbl]
5367         ldr     x6, [x4]
5368 .L663:
5369         uxth    w4, w5
5370         cmp     w4, w7
5371         bcs     .L667
5372         add     x5, x5, 1
5373         add     x9, x6, x5, lsl 1
5374         ldrh    w9, [x9,-2]
5375         cmp     w9, w8
5376         bne     .L663
5377 .L667:
5378         cmp     w4, w7
5379         bne     .L665
5380         ubfiz   x4, x4, 1, 16
5381         strh    w0, [x6,x4]
5382         ldr     x3, [x3, #:got_lo12:g_gc_blk_num]
5383         ldrh    w4, [x3]
5384         add     w4, w4, 1
5385         strh    w4, [x3]
5386 .L665:
5387         adrp    x3, :got:g_gc_page_offset
5388         adrp    x5, :got:p_gc_page_info
5389         mov     w0, 12
5390         ldr     x3, [x3, #:got_lo12:g_gc_page_offset]
5391         ldr     x5, [x5, #:got_lo12:p_gc_page_info]
5392         ldrh    w4, [x3]
5393         ldr     x6, [x5]
5394         umull   x4, w4, w0
5395         add     x6, x6, x4
5396         str     w1, [x6,4]
5397         ldr     x1, [x5]
5398         add     x0, x1, x4
5399         str     w2, [x0,8]
5400         str     w19, [x1,x4]
5401         ldrh    w0, [x3]
5402         add     w0, w0, 1
5403         strh    w0, [x3]
5404         ldr     x19, [sp,16]
5405         ldp     x29, x30, [sp], 48
5406         ret
5407         .size   FtlGcUpdatePage, .-FtlGcUpdatePage
5408         .align  2
5409         .global FtlGcRefreshBlock
5410         .type   FtlGcRefreshBlock, %function
5411 FtlGcRefreshBlock:
5412         stp     x29, x30, [sp, -32]!
5413         add     x29, sp, 0
5414         str     x19, [sp,16]
5415         uxth    w19, w0
5416         adrp    x0, .LC76
5417         mov     w1, w19
5418         add     x0, x0, :lo12:.LC76
5419         bl      printk
5420         adrp    x2, :got:g_gc_next_blk
5421         mov     w0, 65535
5422         ldr     x2, [x2, #:got_lo12:g_gc_next_blk]
5423         ldrh    w1, [x2]
5424         cmp     w1, w0
5425         beq     .L672
5426         adrp    x2, :got:g_gc_next_blk_1
5427         ldr     x2, [x2, #:got_lo12:g_gc_next_blk_1]
5428         ldrh    w1, [x2]
5429         cmp     w1, w0
5430         bne     .L671
5431 .L672:
5432         strh    w19, [x2]
5433 .L671:
5434         mov     w0, 0
5435         ldr     x19, [sp,16]
5436         ldp     x29, x30, [sp], 32
5437         ret
5438         .size   FtlGcRefreshBlock, .-FtlGcRefreshBlock
5439         .align  2
5440         .global FtlGcMarkBadPhyBlk
5441         .type   FtlGcMarkBadPhyBlk, %function
5442 FtlGcMarkBadPhyBlk:
5443         stp     x29, x30, [sp, -48]!
5444         add     x29, sp, 0
5445         stp     x19, x20, [sp,16]
5446         uxth    w20, w0
5447         adrp    x19, :got:g_gc_bad_block_temp_num
5448         mov     w0, w20
5449         stp     x21, x22, [sp,32]
5450         bl      P2V_block_in_plane
5451         uxth    w21, w0
5452         ldr     x1, [x19, #:got_lo12:g_gc_bad_block_temp_num]
5453         adrp    x0, .LC77
5454         mov     w2, w20
5455         add     x0, x0, :lo12:.LC77
5456         ldrh    w1, [x1]
5457         bl      printk
5458         mov     w0, w21
5459         bl      FtlGcRefreshBlock
5460         adrp    x0, :got:g_inkDie_check_enable
5461         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
5462         ldr     w0, [x0]
5463         cbz     w0, .L674
5464         adrp    x1, :got:p_erase_count_table
5465         ubfiz   x0, x21, 1, 16
5466         ldr     x1, [x1, #:got_lo12:p_erase_count_table]
5467         ldr     x2, [x1]
5468         ldrh    w1, [x2,x0]
5469         cmp     w1, 29
5470         bls     .L674
5471         sub     w1, w1, #30
5472         strh    w1, [x2,x0]
5473 .L674:
5474         ldr     x0, [x19, #:got_lo12:g_gc_bad_block_temp_num]
5475         adrp    x3, :got:g_gc_bad_block_temp_tbl
5476         ldrh    w1, [x0]
5477         mov     x0, 0
5478 .L675:
5479         cmp     w1, w0, uxth
5480         bls     .L681
5481         add     x0, x0, 1
5482         ldr     x2, [x3, #:got_lo12:g_gc_bad_block_temp_tbl]
5483         add     x2, x2, x0, lsl 1
5484         ldrh    w2, [x2,-2]
5485         cmp     w2, w20
5486         bne     .L675
5487         b       .L676
5488 .L681:
5489         cmp     w1, 15
5490         bhi     .L676
5491         ldr     x19, [x19, #:got_lo12:g_gc_bad_block_temp_num]
5492         add     w0, w1, 1
5493         strh    w0, [x19]
5494         adrp    x0, :got:g_gc_bad_block_temp_tbl
5495         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_tbl]
5496         strh    w20, [x0,w1,sxtw 1]
5497 .L676:
5498         mov     w0, 0
5499         ldp     x19, x20, [sp,16]
5500         ldp     x21, x22, [sp,32]
5501         ldp     x29, x30, [sp], 48
5502         ret
5503         .size   FtlGcMarkBadPhyBlk, .-FtlGcMarkBadPhyBlk
5504         .align  2
5505         .global FtlGcReFreshBadBlk
5506         .type   FtlGcReFreshBadBlk, %function
5507 FtlGcReFreshBadBlk:
5508         adrp    x0, :got:g_gc_bad_block_temp_num
5509         stp     x29, x30, [sp, -32]!
5510         add     x29, sp, 0
5511         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_num]
5512         str     x19, [sp,16]
5513         ldrh    w1, [x0]
5514         cbz     w1, .L683
5515         adrp    x0, :got:g_gc_next_blk
5516         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
5517         ldrh    w2, [x0]
5518         mov     w0, 65535
5519         cmp     w2, w0
5520         bne     .L683
5521         adrp    x19, :got:g_gc_bad_block_gc_index
5522         ldr     x0, [x19, #:got_lo12:g_gc_bad_block_gc_index]
5523         ldrh    w2, [x0]
5524         cmp     w2, w1
5525         bcc     .L684
5526         strh    wzr, [x0]
5527 .L684:
5528         ldr     x19, [x19, #:got_lo12:g_gc_bad_block_gc_index]
5529         adrp    x0, :got:g_gc_bad_block_temp_tbl
5530         ldrh    w1, [x19]
5531         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_tbl]
5532         ldrh    w0, [x0,w1,sxtw 1]
5533         bl      P2V_block_in_plane
5534         bl      FtlGcRefreshBlock
5535         ldrh    w0, [x19]
5536         add     w0, w0, 1
5537         strh    w0, [x19]
5538 .L683:
5539         mov     w0, 0
5540         ldr     x19, [sp,16]
5541         ldp     x29, x30, [sp], 32
5542         ret
5543         .size   FtlGcReFreshBadBlk, .-FtlGcReFreshBadBlk
5544         .align  2
5545         .global ftl_malloc
5546         .type   ftl_malloc, %function
5547 ftl_malloc:
5548         stp     x29, x30, [sp, -16]!
5549         mov     w1, 193
5550         sxtw    x0, w0
5551         add     x29, sp, 0
5552         movk    w1, 0x240, lsl 16
5553         bl      __kmalloc
5554         ldp     x29, x30, [sp], 16
5555         ret
5556         .size   ftl_malloc, .-ftl_malloc
5557         .align  2
5558         .global NandcInit
5559         .type   NandcInit, %function
5560 NandcInit:
5561         adrp    x4, :got:gpNandc1
5562         adrp    x1, :got:RK29_NANDC1_REG_BASE
5563         stp     x29, x30, [sp, -32]!
5564         add     x29, sp, 0
5565         ldr     x3, [x4, #:got_lo12:gpNandc1]
5566         stp     x19, x20, [sp,16]
5567         mov     x20, x4
5568         str     xzr, [x3]
5569         ldr     x1, [x1, #:got_lo12:RK29_NANDC1_REG_BASE]
5570         ldr     x2, [x1]
5571         adrp    x1, :got:gNandChipMap
5572         cbz     x2, .L690
5573         str     x2, [x3]
5574         mov     w3, 0
5575         ldr     x1, [x1, #:got_lo12:gNandChipMap]
5576 .L693:
5577         lsr     w4, w3, 1
5578         str     w4, [x1,8]
5579         and     w4, w3, 1
5580         add     w3, w3, 1
5581         cmp     w4, wzr
5582         csel    x4, x0, x2, eq
5583         cmp     w3, 8
5584         str     x4, [x1],16
5585         bne     .L693
5586 .L697:
5587         adrp    x19, :got:gpNandc
5588         adrp    x2, :got:gToggleModeClkDiv
5589         ldr     x1, [x19, #:got_lo12:gpNandc]
5590         str     x0, [x1]
5591         ldr     w1, [x0]
5592         ldr     w3, [x0,344]
5593         and     w1, w1, 253952
5594         and     w3, w3, 7
5595         cmp     w3, 2
5596         bhi     .L694
5597         ldr     x4, [x2, #:got_lo12:gToggleModeClkDiv]
5598         str     w3, [x4]
5599         b       .L698
5600 .L690:
5601         ldr     x1, [x1, #:got_lo12:gNandChipMap]
5602 .L696:
5603         str     w2, [x1,8]
5604         add     w2, w2, 1
5605         str     x0, [x1],16
5606         cmp     w2, 8
5607         bne     .L696
5608         b       .L697
5609 .L694:
5610         ldr     x3, [x2, #:got_lo12:gToggleModeClkDiv]
5611         mov     w4, 2
5612         str     w4, [x3]
5613 .L698:
5614         ldr     x2, [x2, #:got_lo12:gToggleModeClkDiv]
5615         ldr     w3, [x2]
5616         cbnz    w3, .L699
5617         mov     w3, 1
5618         str     w3, [x2]
5619 .L699:
5620         adrp    x2, :got:gBootDdrMode
5621         ubfx    x3, x1, 13, 1
5622         and     w1, w1, -8193
5623         orr     w1, w1, 256
5624         ldr     x2, [x2, #:got_lo12:gBootDdrMode]
5625         str     w3, [x2]
5626         adrp    x2, :got:gNandcVer
5627         ldr     w3, [x0,352]
5628         ldr     x2, [x2, #:got_lo12:gNandcVer]
5629         ubfx    x3, x3, 16, 4
5630         str     w3, [x2]
5631         str     w1, [x0]
5632         ldr     x19, [x19, #:got_lo12:gpNandc]
5633         ldr     x0, [x19]
5634         str     wzr, [x0,336]
5635         mov     w0, 40
5636         bl      NandcTimeCfg
5637         ldr     x1, [x19]
5638         mov     w0, 8322
5639         mov     w2, 6145
5640         movk    w2, 0x18, lsl 16
5641         str     w0, [x1,344]
5642         mov     w0, 39
5643         str     w2, [x1,304]
5644         str     w0, [x1,308]
5645         ldr     x0, [x20, #:got_lo12:gpNandc1]
5646         ldr     x2, [x0]
5647         cbz     x2, .L700
5648         ldr     w1, [x1]
5649         str     w1, [x2]
5650         ldr     x2, [x19]
5651         ldr     x1, [x0]
5652         ldr     w3, [x2,336]
5653         str     w3, [x1,336]
5654         ldr     w2, [x2,4]
5655         str     w2, [x1,4]
5656         ldr     x1, [x19]
5657         ldr     x0, [x0]
5658         ldr     w2, [x1,304]
5659         str     w2, [x0,304]
5660         ldr     w2, [x1,308]
5661         str     w2, [x0,308]
5662         ldr     w1, [x1,344]
5663         str     w1, [x0,344]
5664 .L700:
5665         mov     w0, 36864
5666         bl      ftl_malloc
5667         adrp    x1, :got:gMasterTempBuf
5668         ldr     x1, [x1, #:got_lo12:gMasterTempBuf]
5669         str     x0, [x1]
5670         adrp    x1, :got:gMasterInfo
5671         ldr     x1, [x1, #:got_lo12:gMasterInfo]
5672         str     x0, [x1]
5673         add     x0, x0, 32768
5674         str     x0, [x1,8]
5675         adrp    x0, :got:gNandcDumpWriteEn
5676         str     wzr, [x1,40]
5677         ldr     x0, [x0, #:got_lo12:gNandcDumpWriteEn]
5678         str     wzr, [x0]
5679         ldp     x19, x20, [sp,16]
5680         ldp     x29, x30, [sp], 32
5681         ret
5682         .size   NandcInit, .-NandcInit
5683         .align  2
5684         .global ftl_free
5685         .type   ftl_free, %function
5686 ftl_free:
5687         stp     x29, x30, [sp, -16]!
5688         add     x29, sp, 0
5689         bl      kfree
5690         ldp     x29, x30, [sp], 16
5691         ret
5692         .size   ftl_free, .-ftl_free
5693         .align  2
5694         .global ftl_memset
5695         .type   ftl_memset, %function
5696 ftl_memset:
5697         stp     x29, x30, [sp, -16]!
5698         uxtw    x2, w2
5699         add     x29, sp, 0
5700         bl      memset
5701         ldp     x29, x30, [sp], 16
5702         ret
5703         .size   ftl_memset, .-ftl_memset
5704         .align  2
5705         .global BuildFlashLsbPageTable
5706         .type   BuildFlashLsbPageTable, %function
5707 BuildFlashLsbPageTable:
5708         stp     x29, x30, [sp, -32]!
5709         add     x29, sp, 0
5710         stp     x19, x20, [sp,16]
5711         mov     w19, w1
5712         cbnz    w0, .L710
5713         mov     x0, 0
5714         adrp    x2, :got:slcPageToMlcPageTbl
5715 .L711:
5716         ldr     x1, [x2, #:got_lo12:slcPageToMlcPageTbl]
5717         strh    w0, [x1,x0,lsl 1]
5718         add     x0, x0, 1
5719         cmp     x0, 256
5720         bne     .L711
5721 .L717:
5722         adrp    x20, :got:mlcPageToSlcPageTbl
5723         mov     w2, 1024
5724         mov     w1, 255
5725         uxth    w19, w19
5726         ldr     x0, [x20, #:got_lo12:mlcPageToSlcPageTbl]
5727         bl      ftl_memset
5728         mov     x0, 0
5729         adrp    x2, :got:slcPageToMlcPageTbl
5730         b       .L712
5731 .L710:
5732         cmp     w0, 1
5733         bne     .L713
5734         mov     x0, 0
5735         mov     w4, 3
5736         mov     w5, 2
5737         adrp    x3, :got:slcPageToMlcPageTbl
5738 .L716:
5739         cmp     x0, 3
5740         uxth    w1, w0
5741         mov     w2, w1
5742         bls     .L714
5743         ubfiz   w2, w1, 1, 15
5744         and     w1, w1, 1
5745         cmp     w1, wzr
5746         csel    w1, w4, w5, ne
5747         sub     w2, w2, w1
5748         uxth    w2, w2
5749 .L714:
5750         ldr     x1, [x3, #:got_lo12:slcPageToMlcPageTbl]
5751         strh    w2, [x1,x0,lsl 1]
5752         add     x0, x0, 1
5753         cmp     x0, 256
5754         bne     .L716
5755         b       .L717
5756 .L713:
5757         cmp     w0, 2
5758         bne     .L718
5759         mov     w2, 65535
5760         mov     x0, 0
5761         adrp    x4, :got:slcPageToMlcPageTbl
5762 .L720:
5763         ldr     x3, [x4, #:got_lo12:slcPageToMlcPageTbl]
5764         cmp     x0, 1
5765         uxth    w1, w0
5766         csel    w1, w2, w1, hi
5767         add     w2, w2, 2
5768         strh    w1, [x3,x0,lsl 1]
5769         add     x0, x0, 1
5770         cmp     x0, 256
5771         uxth    w2, w2
5772         bne     .L720
5773         b       .L717
5774 .L718:
5775         cmp     w0, 3
5776         bne     .L721
5777         mov     x0, 0
5778         mov     w5, 5
5779         mov     w6, 4
5780         adrp    x4, :got:slcPageToMlcPageTbl
5781 .L724:
5782         cmp     x0, 5
5783         uxth    w3, w0
5784         mov     w2, w3
5785         bls     .L722
5786         ubfiz   w2, w3, 1, 15
5787         and     w3, w3, 1
5788         cmp     w3, wzr
5789         csel    w1, w5, w6, ne
5790         sub     w2, w2, w1
5791         uxth    w2, w2
5792 .L722:
5793         ldr     x1, [x4, #:got_lo12:slcPageToMlcPageTbl]
5794         strh    w2, [x1,x0,lsl 1]
5795         add     x0, x0, 1
5796         cmp     x0, 256
5797         bne     .L724
5798         b       .L717
5799 .L721:
5800         cmp     w0, 4
5801         bne     .L725
5802         adrp    x2, :got:slcPageToMlcPageTbl
5803         mov     w1, 1
5804         mov     w5, 7
5805         mov     w4, 6
5806         ldr     x2, [x2, #:got_lo12:slcPageToMlcPageTbl]
5807         strh    w0, [x2,8]
5808         mov     w0, 5
5809         strh    w0, [x2,10]
5810         mov     w0, 7
5811         strh    w1, [x2,2]
5812         mov     w1, 2
5813         strh    w0, [x2,12]
5814         mov     w0, 8
5815         strh    w1, [x2,4]
5816         mov     w1, 3
5817         strh    w0, [x2,14]
5818         mov     w0, 8
5819         strh    wzr, [x2]
5820         strh    w1, [x2,6]
5821 .L727:
5822         and     w3, w0, 1
5823         ubfiz   w1, w0, 1, 15
5824         add     w0, w0, 1
5825         cmp     w3, wzr
5826         csel    w3, w5, w4, ne
5827         add     x2, x2, 2
5828         uxth    w0, w0
5829         sub     w1, w1, w3
5830         cmp     w0, 256
5831         strh    w1, [x2,14]
5832         bne     .L727
5833         b       .L717
5834 .L725:
5835         cmp     w0, 6
5836         bne     .L717
5837         mov     x2, 0
5838         mov     w5, 12
5839         mov     w6, 10
5840         adrp    x4, :got:slcPageToMlcPageTbl
5841 .L730:
5842         cmp     x2, 5
5843         uxth    w3, w2
5844         mov     w0, w3
5845         bls     .L728
5846         add     w0, w3, w3, lsl 1
5847         and     w3, w3, 1
5848         cmp     w3, wzr
5849         uxth    w0, w0
5850         csel    w1, w5, w6, ne
5851         sub     w0, w0, w1
5852         uxth    w0, w0
5853 .L728:
5854         ldr     x1, [x4, #:got_lo12:slcPageToMlcPageTbl]
5855         strh    w0, [x1,x2,lsl 1]
5856         add     x2, x2, 1
5857         cmp     x2, 256
5858         bne     .L730
5859         b       .L717
5860 .L712:
5861         cmp     w19, w0, uxth
5862         bls     .L746
5863         ldr     x1, [x2, #:got_lo12:slcPageToMlcPageTbl]
5864         ldr     x3, [x20, #:got_lo12:mlcPageToSlcPageTbl]
5865         ldrh    w1, [x1,x0,lsl 1]
5866         add     x0, x0, 1
5867         strh    w1, [x3,w1,sxtw 1]
5868         b       .L712
5869 .L746:
5870         ldp     x19, x20, [sp,16]
5871         ldp     x29, x30, [sp], 32
5872         ret
5873         .size   BuildFlashLsbPageTable, .-BuildFlashLsbPageTable
5874         .align  2
5875         .global FlashDieInfoInit
5876         .type   FlashDieInfoInit, %function
5877 FlashDieInfoInit:
5878         stp     x29, x30, [sp, -128]!
5879         add     x29, sp, 0
5880         stp     x19, x20, [sp,16]
5881         adrp    x19, :got:gNandMaxDie
5882         stp     x21, x22, [sp,32]
5883         stp     x23, x24, [sp,48]
5884         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5885         adrp    x23, :got:gNandMaxChip
5886         stp     x25, x26, [sp,64]
5887         stp     x27, x28, [sp,80]
5888         strb    wzr, [x0]
5889         adrp    x22, :got:gBlockPageAlignSize
5890         ldr     x0, [x23, #:got_lo12:gNandMaxChip]
5891         strb    wzr, [x0]
5892         adrp    x0, :got:gNandParaInfo
5893         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
5894         ldrh    w0, [x0,10]
5895         cmp     w0, 256
5896         bls     .L748
5897         ldr     x0, [x22, #:got_lo12:gBlockPageAlignSize]
5898         mov     w1, 512
5899         b       .L769
5900 .L748:
5901         cmp     w0, 128
5902         bhi     .L750
5903         ldr     x1, [x22, #:got_lo12:gBlockPageAlignSize]
5904         str     w0, [x1]
5905         b       .L749
5906 .L750:
5907         ldr     x0, [x22, #:got_lo12:gBlockPageAlignSize]
5908         mov     w1, 256
5909 .L769:
5910         str     w1, [x0]
5911 .L749:
5912         adrp    x20, :got:DieCsIndex
5913         mov     w1, 0
5914         mov     w2, 16
5915         adrp    x21, :got:DieAddrs
5916         mov     x24, 0
5917         adrp    x28, :got:gpNandParaInfo
5918         ldr     x0, [x20, #:got_lo12:DieCsIndex]
5919         bl      ftl_memset
5920         ldr     x0, [x21, #:got_lo12:DieAddrs]
5921         mov     w1, 0
5922         mov     w2, 64
5923         bl      ftl_memset
5924         adrp    x0, :got:gDieOp
5925         mov     w1, 0
5926         mov     w2, 384
5927         ldr     x0, [x0, #:got_lo12:gDieOp]
5928         bl      ftl_memset
5929         adrp    x0, :got:gNandc1_enable
5930         adrp    x3, :got:IDByte
5931         mov     x27, x0
5932         adrp    x4, :got:gpNandc1
5933         adrp    x5, :got:gNandChipMap
5934         mov     w6, 1
5935         ldr     x1, [x0, #:got_lo12:gNandc1_enable]
5936         strb    wzr, [x1]
5937 .L754:
5938         ldr     x0, [x28, #:got_lo12:gpNandParaInfo]
5939         adrp    x25, :got:gpNandParaInfo
5940         ldr     x1, [x3, #:got_lo12:IDByte]
5941         adrp    x26, :got:IDByte
5942         str     x6, [x29,96]
5943         ldr     x2, [x0]
5944         add     x1, x1, x24, lsl 3
5945         str     x5, [x29,104]
5946         add     x0, x2, 1
5947         str     x4, [x29,112]
5948         ldrb    w2, [x2]
5949         str     x3, [x29,120]
5950         bl      FlashMemCmp8
5951         ldr     x3, [x29,120]
5952         ldr     x4, [x29,112]
5953         ldr     x5, [x29,104]
5954         ldr     x6, [x29,96]
5955         cbnz    w0, .L752
5956         ldr     x2, [x19, #:got_lo12:gNandMaxDie]
5957         ldr     x7, [x21, #:got_lo12:DieAddrs]
5958         ldrb    w1, [x2]
5959         str     w0, [x7,w1,sxtw 2]
5960         add     w0, w1, 1
5961         strb    w0, [x2]
5962         ldr     x0, [x20, #:got_lo12:DieCsIndex]
5963         strb    w24, [x0,w1,sxtw]
5964         ldr     x0, [x4, #:got_lo12:gpNandc1]
5965         ldr     x1, [x0]
5966         cbz     x1, .L752
5967         lsl     x0, x24, 4
5968         ldr     x2, [x5, #:got_lo12:gNandChipMap]
5969         ldr     x0, [x0,x2]
5970         cmp     x0, x1
5971         bne     .L752
5972         ldr     x0, [x27, #:got_lo12:gNandc1_enable]
5973         strb    w6, [x0]
5974 .L752:
5975         add     x24, x24, 1
5976         cmp     x24, 8
5977         bne     .L754
5978         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5979         ldr     x23, [x23, #:got_lo12:gNandMaxChip]
5980         ldrb    w0, [x0]
5981         strb    w0, [x23]
5982         ldr     x0, [x25, #:got_lo12:gpNandParaInfo]
5983         ldr     x0, [x0]
5984         ldrb    w0, [x0,8]
5985         cmp     w0, 2
5986         beq     .L759
5987 .L758:
5988         ldr     x25, [x25, #:got_lo12:gpNandParaInfo]
5989         adrp    x1, :got:gTotleBlock
5990         ldr     x19, [x19, #:got_lo12:gNandMaxDie]
5991         ldr     x2, [x25]
5992         ldrb    w0, [x19]
5993         ldr     x1, [x1, #:got_lo12:gTotleBlock]
5994         ldrb    w3, [x2,13]
5995         ldrh    w2, [x2,14]
5996         mul     w0, w0, w3
5997         mul     w0, w0, w2
5998         strh    w0, [x1]
5999         ldp     x19, x20, [sp,16]
6000         ldp     x21, x22, [sp,32]
6001         ldp     x23, x24, [sp,48]
6002         ldp     x25, x26, [sp,64]
6003         ldp     x27, x28, [sp,80]
6004         ldp     x29, x30, [sp], 128
6005         ret
6006 .L759:
6007         mov     x23, 0
6008 .L755:
6009         ldr     x24, [x25, #:got_lo12:gpNandParaInfo]
6010         ldr     x1, [x26, #:got_lo12:IDByte]
6011         ldr     x2, [x24]
6012         add     x1, x1, x23, lsl 3
6013         add     x0, x2, 1
6014         ldrb    w2, [x2]
6015         bl      FlashMemCmp8
6016         cbnz    w0, .L756
6017         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
6018         ldr     x3, [x24]
6019         ldr     x1, [x22, #:got_lo12:gBlockPageAlignSize]
6020         ldrb    w4, [x0]
6021         ldrb    w0, [x3,13]
6022         ldr     w1, [x1]
6023         mov     x2, x4
6024         mul     w1, w0, w1
6025         ldrh    w0, [x3,14]
6026         and     w0, w0, 65280
6027         mul     w0, w1, w0
6028         ldr     x1, [x21, #:got_lo12:DieAddrs]
6029         str     w0, [x1,w4,sxtw 2]
6030         ldrb    w3, [x3,23]
6031         cbz     w3, .L757
6032         lsl     w0, w0, 1
6033         str     w0, [x1,w4,sxtw 2]
6034 .L757:
6035         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
6036         add     w2, w2, 1
6037         strb    w2, [x0]
6038         ldr     x0, [x20, #:got_lo12:DieCsIndex]
6039         strb    w23, [x0,x4]
6040 .L756:
6041         add     x23, x23, 1
6042         cmp     x23, 8
6043         bne     .L755
6044         b       .L758
6045         .size   FlashDieInfoInit, .-FlashDieInfoInit
6046         .align  2
6047         .global ReadFlashInfo
6048         .type   ReadFlashInfo, %function
6049 ReadFlashInfo:
6050         stp     x29, x30, [sp, -32]!
6051         mov     w1, 0
6052         mov     w2, 11
6053         add     x29, sp, 0
6054         str     x19, [sp,16]
6055         mov     x19, x0
6056         bl      ftl_memset
6057         adrp    x2, :got:gpNandParaInfo
6058         adrp    x1, :got:gBlockPageAlignSize
6059         adrp    x4, :got:DieCsIndex
6060         mov     w5, 1
6061         ldr     x2, [x2, #:got_lo12:gpNandParaInfo]
6062         ldr     x1, [x1, #:got_lo12:gBlockPageAlignSize]
6063         ldr     x0, [x2]
6064         ldrb    w3, [x0,9]
6065         ldr     w0, [x1]
6066         adrp    x1, :got:gNandFlashEccBits
6067         mul     w0, w0, w3
6068         uxth    w0, w0
6069         strh    w0, [x19,4]
6070         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
6071         ldrb    w1, [x1]
6072         strb    w1, [x19,7]
6073         ldr     x3, [x2]
6074         ldrb    w1, [x3,13]
6075         mul     w0, w1, w0
6076         ldrh    w1, [x3,14]
6077         mul     w0, w0, w1
6078         ldrb    w1, [x3,8]
6079         mul     w0, w0, w1
6080         str     w0, [x19]
6081         ldr     x0, [x2]
6082         ldrb    w0, [x0,9]
6083         strb    w0, [x19,6]
6084         mov     w0, 32
6085         strb    w0, [x19,8]
6086         ldr     x0, [x2]
6087         ldrb    w0, [x0,7]
6088         strb    w0, [x19,9]
6089         adrp    x0, :got:gNandMaxDie
6090         strb    wzr, [x19,10]
6091         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
6092         ldrb    w3, [x0]
6093         mov     x0, 0
6094 .L771:
6095         cmp     w3, w0, uxtb
6096         bls     .L773
6097         ldr     x1, [x4, #:got_lo12:DieCsIndex]
6098         ldrb    w2, [x19,10]
6099         ldrb    w1, [x0,x1]
6100         add     x0, x0, 1
6101         lsl     w1, w5, w1
6102         orr     w1, w1, w2
6103         strb    w1, [x19,10]
6104         b       .L771
6105 .L773:
6106         ldr     x19, [sp,16]
6107         ldp     x29, x30, [sp], 32
6108         ret
6109         .size   ReadFlashInfo, .-ReadFlashInfo
6110         .align  2
6111         .global FtlMemInit
6112         .type   FtlMemInit, %function
6113 FtlMemInit:
6114         adrp    x0, :got:g_SlcPartLbaEndSector
6115         mov     w1, 65535
6116         stp     x29, x30, [sp, -224]!
6117         add     x29, sp, 0
6118         ldr     x0, [x0, #:got_lo12:g_SlcPartLbaEndSector]
6119         stp     x19, x20, [sp,16]
6120         stp     x23, x24, [sp,48]
6121         stp     x21, x22, [sp,32]
6122         stp     x25, x26, [sp,64]
6123         stp     x27, x28, [sp,80]
6124         str     wzr, [x0]
6125         adrp    x0, :got:g_all_blk_used_slc_mode
6126         adrp    x20, :got:c_ftl_nand_planes_num
6127         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
6128         str     wzr, [x0]
6129         adrp    x0, :got:g_GlobalSysVersion
6130         ldr     x0, [x0, #:got_lo12:g_GlobalSysVersion]
6131         str     wzr, [x0]
6132         adrp    x0, :got:g_GlobalDataVersion
6133         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
6134         str     wzr, [x0]
6135         adrp    x0, :got:g_totle_gc_page_count
6136         ldr     x0, [x0, #:got_lo12:g_totle_gc_page_count]
6137         str     wzr, [x0]
6138         adrp    x0, :got:g_totle_write_page_count
6139         ldr     x0, [x0, #:got_lo12:g_totle_write_page_count]
6140         str     wzr, [x0]
6141         adrp    x0, :got:g_totle_discard_page_count
6142         ldr     x0, [x0, #:got_lo12:g_totle_discard_page_count]
6143         str     wzr, [x0]
6144         adrp    x0, :got:g_totle_cache_write_count
6145         ldr     x0, [x0, #:got_lo12:g_totle_cache_write_count]
6146         str     wzr, [x0]
6147         adrp    x0, :got:g_totle_l2p_write_count
6148         ldr     x0, [x0, #:got_lo12:g_totle_l2p_write_count]
6149         str     wzr, [x0]
6150         adrp    x0, :got:g_totle_read_page_count
6151         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
6152         str     wzr, [x0]
6153         adrp    x0, :got:g_totle_mlc_erase_count
6154         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
6155         str     wzr, [x0]
6156         adrp    x0, :got:g_totle_slc_erase_count
6157         ldr     x0, [x0, #:got_lo12:g_totle_slc_erase_count]
6158         str     wzr, [x0]
6159         adrp    x0, :got:g_totle_sys_slc_erase_count
6160         ldr     x0, [x0, #:got_lo12:g_totle_sys_slc_erase_count]
6161         str     wzr, [x0]
6162         adrp    x0, :got:g_max_erase_count
6163         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
6164         str     wzr, [x0]
6165         adrp    x0, :got:g_min_erase_count
6166         ldr     x0, [x0, #:got_lo12:g_min_erase_count]
6167         str     wzr, [x0]
6168         adrp    x0, :got:g_in_gc_progress
6169         ldr     x0, [x0, #:got_lo12:g_in_gc_progress]
6170         str     wzr, [x0]
6171         adrp    x0, :got:g_in_swl_replace
6172         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
6173         str     wzr, [x0]
6174         adrp    x0, :got:g_gc_head_data_block
6175         ldr     x0, [x0, #:got_lo12:g_gc_head_data_block]
6176         str     w1, [x0]
6177         adrp    x0, :got:g_gc_head_data_block_count
6178         mov     w1, -1
6179         ldr     x0, [x0, #:got_lo12:g_gc_head_data_block_count]
6180         str     wzr, [x0]
6181         adrp    x0, :got:g_gc_skip_write_count
6182         ldr     x0, [x0, #:got_lo12:g_gc_skip_write_count]
6183         str     wzr, [x0]
6184         adrp    x0, :got:g_cur_erase_blk
6185         ldr     x0, [x0, #:got_lo12:g_cur_erase_blk]
6186         str     wzr, [x0]
6187         adrp    x0, :got:g_gc_next_blk
6188         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
6189         strh    w1, [x0]
6190         adrp    x0, :got:g_gc_next_blk_1
6191         ldr     x0, [x0, #:got_lo12:g_gc_next_blk_1]
6192         strh    w1, [x0]
6193         adrp    x0, :got:g_gc_free_blk_threshold
6194         mov     w1, 32
6195         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
6196         strh    w1, [x0]
6197         adrp    x0, :got:g_gc_merge_free_blk_threshold
6198         mov     w1, 128
6199         ldr     x0, [x0, #:got_lo12:g_gc_merge_free_blk_threshold]
6200         strh    w1, [x0]
6201         adrp    x0, :got:g_gc_blk_index
6202         adrp    x1, :got:c_wr_page_buf_num
6203         mov     x23, x1
6204         ldr     x0, [x0, #:got_lo12:g_gc_blk_index]
6205         strh    wzr, [x0]
6206         adrp    x0, :got:g_gc_bad_block_temp_num
6207         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_num]
6208         strh    wzr, [x0]
6209         adrp    x0, :got:g_gc_bad_block_gc_index
6210         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_gc_index]
6211         strh    wzr, [x0]
6212         adrp    x0, :got:c_ftl_nand_sec_pre_page
6213         ldr     x3, [x1, #:got_lo12:c_wr_page_buf_num]
6214         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
6215         ldrh    w2, [x0]
6216         mov     w0, 1024
6217         sdiv    w2, w0, w2
6218         str     w2, [x3]
6219         ldr     x0, [x20, #:got_lo12:c_ftl_nand_planes_num]
6220         ldrh    w0, [x0]
6221         lsl     w0, w0, 2
6222         cmp     w2, w0
6223         bls     .L775
6224         str     w0, [x3]
6225 .L775:
6226         adrp    x0, :got:g_wr_page_num
6227         adrp    x19, :got:c_ftl_nand_page_pre_super_blk
6228         mov     w21, 56
6229         adrp    x28, :got:req_gc_dst
6230         adrp    x27, :got:p_sys_data_buf
6231         adrp    x26, :got:p_sys_data_buf_1
6232         ldr     x0, [x0, #:got_lo12:g_wr_page_num]
6233         adrp    x25, :got:p_vendor_data_buf
6234         adrp    x24, :got:p_gc_data_buf
6235         str     wzr, [x0]
6236         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_super_blk]
6237         ldrh    w0, [x19]
6238         lsl     w0, w0, 1
6239         bl      ftl_malloc
6240         adrp    x8, :got:p_gc_blk_tbl
6241         str     x8, [x29,96]
6242         ldr     x1, [x8, #:got_lo12:p_gc_blk_tbl]
6243         str     x0, [x1]
6244         mov     w0, 12
6245         ldrh    w1, [x19]
6246         mul     w0, w1, w0
6247         bl      ftl_malloc
6248         adrp    x7, :got:p_gc_page_info
6249         str     x7, [x29,104]
6250         ldr     x1, [x7, #:got_lo12:p_gc_page_info]
6251         str     x0, [x1]
6252         ldr     x20, [x20, #:got_lo12:c_ftl_nand_planes_num]
6253         ldrh    w19, [x20]
6254         mul     w19, w19, w21
6255         lsl     w22, w19, 3
6256         mov     w0, w22
6257         bl      ftl_malloc
6258         adrp    x6, :got:req_read
6259         str     x6, [x29,112]
6260         ldr     x1, [x6, #:got_lo12:req_read]
6261         str     x0, [x1]
6262         mov     w0, w19
6263         bl      ftl_malloc
6264         ldr     x1, [x28, #:got_lo12:req_gc_dst]
6265         str     x0, [x1]
6266         mov     w0, w22
6267         bl      ftl_malloc
6268         adrp    x5, :got:req_prgm
6269         str     x5, [x29,120]
6270         ldr     x1, [x5, #:got_lo12:req_prgm]
6271         str     x0, [x1]
6272         mov     w0, w19
6273         bl      ftl_malloc
6274         adrp    x4, :got:req_erase
6275         str     x4, [x29,128]
6276         ldr     x1, [x4, #:got_lo12:req_erase]
6277         str     x0, [x1]
6278         mov     w0, w19
6279         bl      ftl_malloc
6280         adrp    x3, :got:req_gc
6281         str     x3, [x29,136]
6282         ldr     x1, [x3, #:got_lo12:req_gc]
6283         str     x0, [x1]
6284         ldr     x22, [x23, #:got_lo12:c_wr_page_buf_num]
6285         ldr     w0, [x22]
6286         mul     w0, w0, w21
6287         bl      ftl_malloc
6288         adrp    x2, :got:req_wr_io
6289         adrp    x12, :got:c_ftl_nand_byte_pre_page
6290         adrp    x9, :got:c_gc_page_buf_num
6291         ldr     x2, [x2, #:got_lo12:req_wr_io]
6292         str     x0, [x2]
6293         ldrh    w0, [x20]
6294         ldr     x12, [x12, #:got_lo12:c_ftl_nand_byte_pre_page]
6295         ldr     x23, [x9, #:got_lo12:c_gc_page_buf_num]
6296         lsl     w0, w0, 1
6297         add     w0, w0, 1
6298         str     x12, [x29,144]
6299         ldrh    w19, [x12]
6300         str     w0, [x23]
6301         mov     w0, w19
6302         bl      ftl_malloc
6303         ldr     x2, [x27, #:got_lo12:p_sys_data_buf]
6304         str     x0, [x2]
6305         mov     w0, w19
6306         bl      ftl_malloc
6307         ldr     x2, [x26, #:got_lo12:p_sys_data_buf_1]
6308         str     x0, [x2]
6309         mov     w0, w19
6310         bl      ftl_malloc
6311         ldr     x2, [x25, #:got_lo12:p_vendor_data_buf]
6312         str     x0, [x2]
6313         ldr     w0, [x23]
6314         mul     w0, w19, w0
6315         bl      ftl_malloc
6316         ldr     x2, [x24, #:got_lo12:p_gc_data_buf]
6317         str     x0, [x2]
6318         ldr     w0, [x22]
6319         mul     w0, w19, w0
6320         bl      ftl_malloc
6321         adrp    x2, :got:p_wr_io_data_buf
6322         ldr     x2, [x2, #:got_lo12:p_wr_io_data_buf]
6323         str     x0, [x2]
6324         mov     w0, w19
6325         bl      ftl_malloc
6326         adrp    x1, :got:p_io_data_buf_0
6327         ldr     x2, [x1, #:got_lo12:p_io_data_buf_0]
6328         str     x0, [x2]
6329         mov     w0, w19
6330         bl      ftl_malloc
6331         adrp    x1, :got:p_io_data_buf_1
6332         ldr     x2, [x1, #:got_lo12:p_io_data_buf_1]
6333         str     x0, [x2]
6334         mov     w0, 24
6335         ldr     w2, [x23]
6336         mul     w0, w2, w0
6337         bl      ftl_malloc
6338         ldrh    w19, [x20]
6339         adrp    x1, :got:gp_gc_page_buf_info
6340         ldr     x2, [x1, #:got_lo12:gp_gc_page_buf_info]
6341         str     x0, [x2]
6342         adrp    x2, :got:c_ftl_nand_byte_pre_oob
6343         ldr     x21, [x2, #:got_lo12:c_ftl_nand_byte_pre_oob]
6344         ldrh    w0, [x21]
6345         mul     w19, w0, w19
6346         mov     w0, w19
6347         bl      ftl_malloc
6348         adrp    x1, :got:p_sys_spare_buf
6349         ldr     x10, [x1, #:got_lo12:p_sys_spare_buf]
6350         str     x0, [x10]
6351         lsl     w0, w19, 3
6352         bl      ftl_malloc
6353         adrp    x1, :got:p_io_spare_buf
6354         ldr     x10, [x1, #:got_lo12:p_io_spare_buf]
6355         str     x0, [x10]
6356         ldrh    w10, [x21]
6357         ldr     w0, [x23]
6358         adrp    x23, :got:p_io_data_buf_0
6359         mul     w0, w10, w0
6360         bl      ftl_malloc
6361         adrp    x15, :got:p_gc_spare_buf
6362         ldrh    w2, [x21]
6363         str     x15, [x29,152]
6364         adrp    x21, :got:gp_gc_page_buf_info
6365         ldr     x9, [x15, #:got_lo12:p_gc_spare_buf]
6366         str     x0, [x9]
6367         ldr     w0, [x22]
6368         adrp    x22, :got:p_io_data_buf_1
6369         mul     w0, w2, w0
6370         bl      ftl_malloc
6371         adrp    x1, :got:p_wr_io_spare_buf
6372         adrp    x13, :got:c_ftl_nand_blk_pre_plane
6373         ldr     x1, [x1, #:got_lo12:p_wr_io_spare_buf]
6374         str     x0, [x1]
6375         adrp    x1, :got:g_ect_tbl_info_size
6376         ldr     x19, [x13, #:got_lo12:c_ftl_nand_blk_pre_plane]
6377         ldr     x20, [x1, #:got_lo12:g_ect_tbl_info_size]
6378         ldrh    w0, [x19]
6379         lsl     w0, w0, 1
6380         strh    w0, [x20]
6381         and     w0, w0, 65534
6382         bl      ftl_malloc
6383         adrp    x2, :got:p_swl_mul_table
6384         ldr     x2, [x2, #:got_lo12:p_swl_mul_table]
6385         str     x0, [x2]
6386         ldrh    w0, [x20]
6387         add     x0, x0, 547
6388         lsr     x0, x0, 9
6389         strh    w0, [x20]
6390         lsl     w0, w0, 9
6391         bl      ftl_malloc
6392         adrp    x1, :got:gp_ect_tbl_info
6393         adrp    x14, :got:p_erase_count_table
6394         str     x14, [x29,160]
6395         ldr     x1, [x1, #:got_lo12:gp_ect_tbl_info]
6396         str     x0, [x1]
6397         add     x0, x0, 32
6398         ldr     x1, [x14, #:got_lo12:p_erase_count_table]
6399         str     x0, [x1]
6400         ldrh    w1, [x19]
6401         lsl     w20, w1, 1
6402         mov     w0, w20
6403         bl      ftl_malloc
6404         adrp    x2, :got:p_valid_page_count_check_table
6405         ldr     x2, [x2, #:got_lo12:p_valid_page_count_check_table]
6406         str     x0, [x2]
6407         mov     w0, w20
6408         bl      ftl_malloc
6409         adrp    x9, :got:p_valid_page_count_table
6410         adrp    x16, :got:c_ftl_nand_max_map_blks
6411         str     x9, [x29,168]
6412         ldr     x1, [x9, #:got_lo12:p_valid_page_count_table]
6413         str     x0, [x1]
6414         ldr     x16, [x16, #:got_lo12:c_ftl_nand_max_map_blks]
6415         str     x16, [x29,208]
6416         ldr     w1, [x16]
6417         lsl     w20, w1, 1
6418         mov     w0, w20
6419         bl      ftl_malloc
6420         adrp    x11, :got:p_map_block_table
6421         str     x11, [x29,176]
6422         ldr     x2, [x11, #:got_lo12:p_map_block_table]
6423         str     x0, [x2]
6424         mov     w0, w20
6425         bl      ftl_malloc
6426         adrp    x10, :got:p_map_block_valid_page_count
6427         str     x10, [x29,184]
6428         ldr     x1, [x10, #:got_lo12:p_map_block_valid_page_count]
6429         str     x0, [x1]
6430         adrp    x1, :got:c_ftl_nand_max_vendor_blks
6431         ldr     x20, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
6432         ldrh    w0, [x20]
6433         lsl     w0, w0, 1
6434         bl      ftl_malloc
6435         adrp    x2, :got:p_vendor_block_table
6436         ldr     x2, [x2, #:got_lo12:p_vendor_block_table]
6437         str     x0, [x2]
6438         ldrh    w0, [x20]
6439         lsl     w0, w0, 1
6440         bl      ftl_malloc
6441         adrp    x2, :got:p_vendor_block_valid_page_count
6442         ldr     x2, [x2, #:got_lo12:p_vendor_block_valid_page_count]
6443         str     x0, [x2]
6444         ldrh    w0, [x20]
6445         adrp    x20, :got:p_sys_spare_buf
6446         lsl     w0, w0, 2
6447         bl      ftl_malloc
6448         adrp    x1, :got:p_vendor_block_ver_table
6449         ldr     x1, [x1, #:got_lo12:p_vendor_block_ver_table]
6450         str     x0, [x1]
6451         adrp    x1, :got:c_ftl_nand_vendor_region_num
6452         ldr     x1, [x1, #:got_lo12:c_ftl_nand_vendor_region_num]
6453         str     x1, [x29,216]
6454         ldrh    w0, [x1]
6455         lsl     w0, w0, 2
6456         bl      ftl_malloc
6457         adrp    x2, :got:p_vendor_region_ppn_table
6458         ldr     x1, [x29,216]
6459         ldr     x2, [x2, #:got_lo12:p_vendor_region_ppn_table]
6460         str     x0, [x2]
6461         ldrh    w2, [x1]
6462         mov     w1, 0
6463         lsl     w2, w2, 2
6464         bl      ftl_memset
6465         adrp    x0, :got:c_ftl_nand_map_region_num
6466         ldr     x0, [x0, #:got_lo12:c_ftl_nand_map_region_num]
6467         ldrh    w0, [x0]
6468         lsl     w0, w0, 2
6469         bl      ftl_malloc
6470         adrp    x2, :got:p_map_region_ppn_table
6471         ldr     x16, [x29,208]
6472         str     x2, [x29,192]
6473         ldr     x1, [x2, #:got_lo12:p_map_region_ppn_table]
6474         str     x0, [x1]
6475         ldr     w0, [x16]
6476         lsl     w0, w0, 2
6477         bl      ftl_malloc
6478         adrp    x1, :got:p_map_block_ver_table
6479         str     x1, [x29,200]
6480         ldr     x16, [x1, #:got_lo12:p_map_block_ver_table]
6481         str     x0, [x16]
6482         adrp    x16, :got:c_ftl_nand_l2pmap_ram_region_num
6483         ldr     x16, [x16, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
6484         str     x16, [x29,216]
6485         ldrh    w0, [x16]
6486         lsl     w0, w0, 4
6487         bl      ftl_malloc
6488         adrp    x17, :got:p_l2p_ram_map
6489         ldr     x12, [x29,144]
6490         ldr     x16, [x29,216]
6491         ldr     x17, [x17, #:got_lo12:p_l2p_ram_map]
6492         ldrh    w16, [x16]
6493         str     x0, [x17]
6494         ldrh    w0, [x12]
6495         mul     w0, w16, w0
6496         bl      ftl_malloc
6497         adrp    x12, :got:p_l2p_map_buf
6498         ldr     x12, [x12, #:got_lo12:p_l2p_map_buf]
6499         str     x0, [x12]
6500         mov     w0, 6
6501         ldrh    w12, [x19]
6502         adrp    x19, :got:p_io_spare_buf
6503         mul     w0, w12, w0
6504         bl      ftl_malloc
6505         adrp    x12, :got:p_data_block_list_table
6506         adrp    x16, :got:c_ftl_nand_bbm_buf_size
6507         adrp    x17, :got:c_ftl_nand_die_num
6508         ldr     x12, [x12, #:got_lo12:p_data_block_list_table]
6509         str     x0, [x12]
6510         adrp    x0, :got:c_ftl_nand_blks_per_die
6511         ldr     x16, [x16, #:got_lo12:c_ftl_nand_bbm_buf_size]
6512         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blks_per_die]
6513         str     x16, [x29,208]
6514         ldrh    w0, [x0]
6515         add     w0, w0, 31
6516         asr     w0, w0, 5
6517         strh    w0, [x16]
6518         ldr     x17, [x17, #:got_lo12:c_ftl_nand_die_num]
6519         str     x17, [x29,216]
6520         ldrh    w12, [x17]
6521         mul     w0, w0, w12
6522         lsl     w0, w0, 2
6523         bl      ftl_malloc
6524         adrp    x13, :got:gBbtInfo
6525         ldr     x17, [x29,216]
6526         ldr     x16, [x29,208]
6527         ldr     x15, [x29,152]
6528         ldr     x12, [x13, #:got_lo12:gBbtInfo]
6529         ldrh    w18, [x17]
6530         ldrh    w17, [x16]
6531         ldr     x14, [x29,160]
6532         ldr     x8, [x29,96]
6533         mov     w16, w17
6534         ldr     x7, [x29,104]
6535         ldr     x6, [x29,112]
6536         ldr     x5, [x29,120]
6537         ldr     x4, [x29,128]
6538         ldr     x3, [x29,136]
6539         ldr     x9, [x29,168]
6540         ldr     x11, [x29,176]
6541         ldr     x10, [x29,184]
6542         ldr     x2, [x29,192]
6543         ldr     x1, [x29,200]
6544         str     x0, [x12,32]
6545         mov     w0, 1
6546         str     x15, [x29,216]
6547         mov     x15, x13
6548         str     x14, [x29,208]
6549 .L776:
6550         cmp     w0, w18
6551         add     x12, x12, 8
6552         bcs     .L778
6553         ldr     x14, [x15, #:got_lo12:gBbtInfo]
6554         add     w0, w0, 1
6555         ldr     x14, [x14,32]
6556         add     x14, x14, x16, uxtw 2
6557         add     w16, w16, w17
6558         str     x14, [x12,32]
6559         b       .L776
6560 .L778:
6561         cmp     w0, 8
6562         beq     .L876
6563         ldr     x12, [x13, #:got_lo12:gBbtInfo]
6564         add     x12, x12, x0, uxtw 3
6565         add     w0, w0, 1
6566         str     xzr, [x12,32]
6567         b       .L778
6568 .L876:
6569         ldr     x11, [x11, #:got_lo12:p_map_block_table]
6570         ldr     x0, [x11]
6571         cbnz    x0, .L780
6572 .L782:
6573         adrp    x0, .LC78
6574         adrp    x1, .LANCHOR1
6575         add     x0, x0, :lo12:.LC78
6576         add     x1, x1, :lo12:.LANCHOR1
6577         bl      printk
6578         mov     w0, -1
6579         b       .L781
6580 .L780:
6581         ldr     x10, [x10, #:got_lo12:p_map_block_valid_page_count]
6582         ldr     x0, [x10]
6583         cbz     x0, .L782
6584         ldr     x2, [x2, #:got_lo12:p_map_region_ppn_table]
6585         ldr     x0, [x2]
6586         cbz     x0, .L782
6587         ldr     x1, [x1, #:got_lo12:p_map_block_ver_table]
6588         ldr     x0, [x1]
6589         cbz     x0, .L782
6590         adrp    x0, :got:p_l2p_ram_map
6591         ldr     x0, [x0, #:got_lo12:p_l2p_ram_map]
6592         ldr     x0, [x0]
6593         cbz     x0, .L782
6594         adrp    x0, :got:p_l2p_map_buf
6595         ldr     x0, [x0, #:got_lo12:p_l2p_map_buf]
6596         ldr     x0, [x0]
6597         cbz     x0, .L782
6598         adrp    x0, :got:p_data_block_list_table
6599         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
6600         ldr     x0, [x0]
6601         cbz     x0, .L782
6602         adrp    x0, :got:gBbtInfo
6603         ldr     x0, [x0, #:got_lo12:gBbtInfo]
6604         ldr     x0, [x0,32]
6605         cbz     x0, .L782
6606         ldr     x9, [x9, #:got_lo12:p_valid_page_count_table]
6607         ldr     x0, [x9]
6608         cbz     x0, .L782
6609         ldr     x8, [x8, #:got_lo12:p_gc_blk_tbl]
6610         ldr     x0, [x8]
6611         cbz     x0, .L782
6612         ldr     x7, [x7, #:got_lo12:p_gc_page_info]
6613         ldr     x0, [x7]
6614         cbz     x0, .L782
6615         ldr     x6, [x6, #:got_lo12:req_read]
6616         ldr     x0, [x6]
6617         cbz     x0, .L782
6618         ldr     x5, [x5, #:got_lo12:req_prgm]
6619         ldr     x0, [x5]
6620         cbz     x0, .L782
6621         ldr     x4, [x4, #:got_lo12:req_erase]
6622         ldr     x0, [x4]
6623         cbz     x0, .L782
6624         ldr     x3, [x3, #:got_lo12:req_gc]
6625         ldr     x0, [x3]
6626         cbz     x0, .L782
6627         ldr     x28, [x28, #:got_lo12:req_gc_dst]
6628         ldr     x0, [x28]
6629         cbz     x0, .L782
6630         ldr     x27, [x27, #:got_lo12:p_sys_data_buf]
6631         ldr     x0, [x27]
6632         cbz     x0, .L782
6633         ldr     x26, [x26, #:got_lo12:p_sys_data_buf_1]
6634         ldr     x0, [x26]
6635         cbz     x0, .L782
6636         ldr     x25, [x25, #:got_lo12:p_vendor_data_buf]
6637         ldr     x0, [x25]
6638         cbz     x0, .L782
6639         ldr     x24, [x24, #:got_lo12:p_gc_data_buf]
6640         ldr     x0, [x24]
6641         cbz     x0, .L782
6642         ldr     x23, [x23, #:got_lo12:p_io_data_buf_0]
6643         ldr     x0, [x23]
6644         cbz     x0, .L782
6645         ldr     x22, [x22, #:got_lo12:p_io_data_buf_1]
6646         ldr     x0, [x22]
6647         cbz     x0, .L782
6648         ldr     x21, [x21, #:got_lo12:gp_gc_page_buf_info]
6649         ldr     x0, [x21]
6650         cbz     x0, .L782
6651         ldr     x20, [x20, #:got_lo12:p_sys_spare_buf]
6652         ldr     x0, [x20]
6653         cbz     x0, .L782
6654         ldr     x19, [x19, #:got_lo12:p_io_spare_buf]
6655         ldr     x0, [x19]
6656         cbz     x0, .L782
6657         ldr     x0, [x29,216]
6658         ldr     x15, [x0, #:got_lo12:p_gc_spare_buf]
6659         ldr     x0, [x15]
6660         cbz     x0, .L782
6661         ldr     x0, [x29,208]
6662         ldr     x14, [x0, #:got_lo12:p_erase_count_table]
6663         ldr     x0, [x14]
6664         cbz     x0, .L782
6665         adrp    x0, :got:p_swl_mul_table
6666         ldr     x0, [x0, #:got_lo12:p_swl_mul_table]
6667         ldr     x0, [x0]
6668         cbz     x0, .L782
6669         adrp    x0, :got:p_vendor_block_table
6670         ldr     x0, [x0, #:got_lo12:p_vendor_block_table]
6671         ldr     x0, [x0]
6672         cbz     x0, .L782
6673         adrp    x0, :got:p_vendor_block_valid_page_count
6674         ldr     x0, [x0, #:got_lo12:p_vendor_block_valid_page_count]
6675         ldr     x0, [x0]
6676         cbz     x0, .L782
6677         adrp    x0, :got:p_vendor_block_ver_table
6678         ldr     x0, [x0, #:got_lo12:p_vendor_block_ver_table]
6679         ldr     x0, [x0]
6680         cbz     x0, .L782
6681         adrp    x0, :got:p_vendor_region_ppn_table
6682         ldr     x0, [x0, #:got_lo12:p_vendor_region_ppn_table]
6683         ldr     x0, [x0]
6684         cbz     x0, .L782
6685         mov     w0, 0
6686 .L781:
6687         ldp     x19, x20, [sp,16]
6688         ldp     x21, x22, [sp,32]
6689         ldp     x23, x24, [sp,48]
6690         ldp     x25, x26, [sp,64]
6691         ldp     x27, x28, [sp,80]
6692         ldp     x29, x30, [sp], 224
6693         ret
6694         .size   FtlMemInit, .-FtlMemInit
6695         .align  2
6696         .global FtlBbt2Bitmap
6697         .type   FtlBbt2Bitmap, %function
6698 FtlBbt2Bitmap:
6699         stp     x29, x30, [sp, -32]!
6700         add     x29, sp, 0
6701         stp     x19, x20, [sp,16]
6702         mov     x19, x1
6703         adrp    x1, :got:c_ftl_nand_bbm_buf_size
6704         mov     x20, x0
6705         mov     x0, x19
6706         ldr     x1, [x1, #:got_lo12:c_ftl_nand_bbm_buf_size]
6707         ldrh    w2, [x1]
6708         mov     w1, 0
6709         lsl     w2, w2, 2
6710         bl      ftl_memset
6711         mov     x3, 0
6712         mov     w0, 65535
6713         mov     w5, 1
6714 .L879:
6715         ldrh    w2, [x20,x3]
6716         cmp     w2, w0
6717         beq     .L877
6718         ubfx    x4, x2, 5, 11
6719         add     x3, x3, 2
6720         lsl     x4, x4, 2
6721         lsl     w2, w5, w2
6722         cmp     x3, 1024
6723         ldr     w1, [x19,x4]
6724         orr     w2, w1, w2
6725         str     w2, [x19,x4]
6726         bne     .L879
6727 .L877:
6728         ldp     x19, x20, [sp,16]
6729         ldp     x29, x30, [sp], 32
6730         ret
6731         .size   FtlBbt2Bitmap, .-FtlBbt2Bitmap
6732         .align  2
6733         .global FtlBbtMemInit
6734         .type   FtlBbtMemInit, %function
6735 FtlBbtMemInit:
6736         adrp    x0, :got:gBbtInfo
6737         mov     w1, -1
6738         stp     x29, x30, [sp, -16]!
6739         mov     w2, 16
6740         add     x29, sp, 0
6741         ldr     x0, [x0, #:got_lo12:gBbtInfo]
6742         add     x0, x0, 12
6743         strh    w1, [x0,-12]
6744         mov     w1, 255
6745         strh    wzr, [x0,-6]
6746         bl      ftl_memset
6747         ldp     x29, x30, [sp], 16
6748         ret
6749         .size   FtlBbtMemInit, .-FtlBbtMemInit
6750         .align  2
6751         .global FtlFreeSysBlkQueueInit
6752         .type   FtlFreeSysBlkQueueInit, %function
6753 FtlFreeSysBlkQueueInit:
6754         adrp    x1, :got:gSysFreeQueue
6755         mov     w2, 2048
6756         stp     x29, x30, [sp, -16]!
6757         add     x29, sp, 0
6758         ldr     x1, [x1, #:got_lo12:gSysFreeQueue]
6759         strh    wzr, [x1,2]
6760         strh    wzr, [x1,4]
6761         strh    wzr, [x1,6]
6762         strh    w0, [x1],8
6763         mov     x0, x1
6764         mov     w1, 0
6765         bl      ftl_memset
6766         mov     w0, 0
6767         ldp     x29, x30, [sp], 16
6768         ret
6769         .size   FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit
6770         .align  2
6771         .global ftl_free_no_use_map_blk
6772         .type   ftl_free_no_use_map_blk, %function
6773 ftl_free_no_use_map_blk:
6774         stp     x29, x30, [sp, -96]!
6775         mov     w1, 0
6776         add     x29, sp, 0
6777         stp     x19, x20, [sp,16]
6778         stp     x21, x22, [sp,32]
6779         stp     x23, x24, [sp,48]
6780         stp     x25, x26, [sp,64]
6781         str     x27, [sp,80]
6782         mov     x19, x0
6783         ldrh    w2, [x0,10]
6784         ldr     x21, [x0,32]
6785         ldr     x25, [x0,16]
6786         lsl     w2, w2, 1
6787         ldr     x20, [x0,40]
6788         mov     x0, x21
6789         bl      ftl_memset
6790         mov     w0, 0
6791 .L885:
6792         ldrh    w1, [x19,6]
6793         cmp     w1, w0
6794         bls     .L898
6795         ubfiz   x1, x0, 2, 16
6796         ldr     w2, [x20,x1]
6797         mov     w1, 0
6798         ubfx    x2, x2, 10, 16
6799 .L886:
6800         ldrh    w3, [x19,10]
6801         cmp     w3, w1
6802         bls     .L899
6803         ubfiz   x3, x1, 1, 16
6804         ldrh    w4, [x25,x3]
6805         cmp     w4, w2
6806         bne     .L887
6807         ldrh    w4, [x21,x3]
6808         add     w4, w4, 1
6809         strh    w4, [x21,x3]
6810 .L887:
6811         add     w1, w1, 1
6812         uxth    w1, w1
6813         b       .L886
6814 .L899:
6815         add     w0, w0, 1
6816         uxth    w0, w0
6817         b       .L885
6818 .L898:
6819         mov     w24, 0
6820         ldrh    w26, [x21]
6821         mov     w20, w24
6822         adrp    x27, :got:c_ftl_nand_page_pre_slc_blk
6823 .L890:
6824         ldrh    w0, [x19,10]
6825         cmp     w0, w20
6826         bls     .L900
6827         ldrh    w0, [x19]
6828         uxtw    x22, w20
6829         cmp     w0, w20
6830         bne     .L891
6831         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
6832         ldrh    w1, [x19,2]
6833         ldrh    w0, [x0]
6834         cmp     w1, w0
6835         bcs     .L891
6836         strh    w0, [x21,x22,lsl 1]
6837 .L891:
6838         lsl     x22, x22, 1
6839         ldrh    w23, [x21,x22]
6840         cmp     w26, w23
6841         bls     .L892
6842         mov     w24, w20
6843         mov     w26, w23
6844 .L892:
6845         cbnz    w23, .L893
6846         ldrh    w0, [x25,x22]
6847         cbz     w0, .L893
6848         mov     w1, 1
6849         bl      FtlFreeSysBlkQueueIn
6850         strh    w23, [x25,x22]
6851         ldrh    w0, [x19,8]
6852         sub     w0, w0, #1
6853         strh    w0, [x19,8]
6854 .L893:
6855         add     w20, w20, 1
6856         uxth    w20, w20
6857         b       .L890
6858 .L900:
6859         mov     w0, w24
6860         ldr     x27, [sp,80]
6861         ldp     x19, x20, [sp,16]
6862         ldp     x21, x22, [sp,32]
6863         ldp     x23, x24, [sp,48]
6864         ldp     x25, x26, [sp,64]
6865         ldp     x29, x30, [sp], 96
6866         ret
6867         .size   ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk
6868         .align  2
6869         .global FtlL2PDataInit
6870         .type   FtlL2PDataInit, %function
6871 FtlL2PDataInit:
6872         stp     x29, x30, [sp, -64]!
6873         add     x29, sp, 0
6874         stp     x21, x22, [sp,32]
6875         adrp    x22, :got:c_ftl_nand_max_map_blks
6876         str     x23, [sp,48]
6877         adrp    x23, :got:p_map_block_valid_page_count
6878         adrp    x21, :got:c_ftl_nand_byte_pre_page
6879         stp     x19, x20, [sp,16]
6880         ldr     x1, [x22, #:got_lo12:c_ftl_nand_max_map_blks]
6881         adrp    x19, :got:c_ftl_nand_l2pmap_ram_region_num
6882         ldr     x0, [x23, #:got_lo12:p_map_block_valid_page_count]
6883         adrp    x20, :got:p_l2p_map_buf
6884         ldr     w2, [x1]
6885         mov     w1, 0
6886         ldr     x0, [x0]
6887         lsl     w2, w2, 1
6888         bl      ftl_memset
6889         ldr     x1, [x21, #:got_lo12:c_ftl_nand_byte_pre_page]
6890         ldr     x0, [x20, #:got_lo12:p_l2p_map_buf]
6891         ldrh    w3, [x1]
6892         ldr     x1, [x19, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
6893         ldr     x0, [x0]
6894         ldrh    w2, [x1]
6895         mov     w1, 255
6896         mul     w2, w3, w2
6897         bl      ftl_memset
6898         mov     w1, 0
6899         mov     x3, x23
6900         adrp    x5, :got:p_l2p_ram_map
6901         mov     w6, -1
6902 .L902:
6903         ldr     x0, [x19, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
6904         ldrh    w0, [x0]
6905         cmp     w0, w1
6906         bls     .L904
6907         ldr     x2, [x5, #:got_lo12:p_l2p_ram_map]
6908         ubfiz   x0, x1, 4, 16
6909         ldr     x4, [x2]
6910         add     x4, x4, x0
6911         str     wzr, [x4,4]
6912         ldr     x4, [x2]
6913         strh    w6, [x4,x0]
6914         ldr     x2, [x2]
6915         ldr     x4, [x20, #:got_lo12:p_l2p_map_buf]
6916         add     x2, x2, x0
6917         ldr     x0, [x21, #:got_lo12:c_ftl_nand_byte_pre_page]
6918         ldr     x4, [x4]
6919         ldrh    w0, [x0]
6920         mul     w0, w0, w1
6921         sxtw    x0, w0
6922         and     x0, x0, -4
6923         add     x0, x4, x0
6924         str     x0, [x2,8]
6925         add     w0, w1, 1
6926         uxth    w1, w0
6927         b       .L902
6928 .L904:
6929         adrp    x0, :got:gL2pMapInfo
6930         mov     w2, -1
6931         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
6932         strh    w2, [x0,2]
6933         strh    w2, [x0]
6934         ldr     x1, [x22, #:got_lo12:c_ftl_nand_max_map_blks]
6935         ldr     w1, [x1]
6936         strh    w1, [x0,10]
6937         mov     w1, -3902
6938         strh    w1, [x0,4]
6939         adrp    x1, :got:g_totle_map_block
6940         ldr     x1, [x1, #:got_lo12:g_totle_map_block]
6941         ldrh    w1, [x1]
6942         strh    w1, [x0,8]
6943         adrp    x1, :got:c_ftl_nand_map_region_num
6944         ldr     x1, [x1, #:got_lo12:c_ftl_nand_map_region_num]
6945         ldrh    w1, [x1]
6946         strh    w1, [x0,6]
6947         adrp    x1, :got:p_map_block_table
6948         ldr     x1, [x1, #:got_lo12:p_map_block_table]
6949         ldr     x1, [x1]
6950         str     x1, [x0,16]
6951         adrp    x1, :got:p_map_block_ver_table
6952         ldr     x1, [x1, #:got_lo12:p_map_block_ver_table]
6953         ldr     x1, [x1]
6954         str     x1, [x0,24]
6955         ldr     x1, [x3, #:got_lo12:p_map_block_valid_page_count]
6956         ldr     x1, [x1]
6957         str     x1, [x0,32]
6958         adrp    x1, :got:p_map_region_ppn_table
6959         ldr     x1, [x1, #:got_lo12:p_map_region_ppn_table]
6960         ldr     x1, [x1]
6961         str     x1, [x0,40]
6962         ldp     x19, x20, [sp,16]
6963         ldp     x21, x22, [sp,32]
6964         ldr     x23, [sp,48]
6965         ldp     x29, x30, [sp], 64
6966         ret
6967         .size   FtlL2PDataInit, .-FtlL2PDataInit
6968         .align  2
6969         .global FtlVariablesInit
6970         .type   FtlVariablesInit, %function
6971 FtlVariablesInit:
6972         adrp    x0, :got:g_req_cache
6973         mov     w1, -1
6974         stp     x29, x30, [sp, -32]!
6975         add     x29, sp, 0
6976         ldr     x0, [x0, #:got_lo12:g_req_cache]
6977         str     x19, [sp,16]
6978         adrp    x19, :got:c_ftl_nand_blk_pre_plane
6979         str     xzr, [x0]
6980         adrp    x0, :got:g_tmp_data_superblock_id
6981         ldr     x0, [x0, #:got_lo12:g_tmp_data_superblock_id]
6982         strh    w1, [x0]
6983         adrp    x0, :got:g_totle_swl_count
6984         mov     w1, -1
6985         ldr     x0, [x0, #:got_lo12:g_totle_swl_count]
6986         str     wzr, [x0]
6987         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
6988         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
6989         str     wzr, [x0]
6990         adrp    x0, :got:g_recovery_page_min_ver
6991         ldr     x0, [x0, #:got_lo12:g_recovery_page_min_ver]
6992         str     w1, [x0]
6993         adrp    x0, :got:g_inkDie_check_enable
6994         adrp    x1, :got:c_ftl_nand_max_vendor_blks
6995         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
6996         str     wzr, [x0]
6997         adrp    x0, :got:g_totle_vendor_block
6998         ldr     x0, [x0, #:got_lo12:g_totle_vendor_block]
6999         strh    wzr, [x0]
7000         adrp    x0, :got:p_vendor_block_table
7001         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
7002         ldr     x0, [x0, #:got_lo12:p_vendor_block_table]
7003         ldrh    w2, [x1]
7004         mov     w1, 0
7005         ldr     x0, [x0]
7006         lsl     w2, w2, 1
7007         bl      ftl_memset
7008         ldr     x19, [x19, #:got_lo12:c_ftl_nand_blk_pre_plane]
7009         adrp    x0, :got:p_erase_count_table
7010         mov     w1, 0
7011         ldrh    w2, [x19]
7012         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
7013         lsl     w2, w2, 1
7014         ldr     x0, [x0]
7015         bl      ftl_memset
7016         adrp    x0, :got:p_swl_mul_table
7017         ldrh    w2, [x19]
7018         mov     w1, 0
7019         lsl     w2, w2, 1
7020         ldr     x0, [x0, #:got_lo12:p_swl_mul_table]
7021         ldr     x0, [x0]
7022         bl      ftl_memset
7023         adrp    x0, :got:g_sys_save_data
7024         mov     w1, 0
7025         mov     w2, 48
7026         ldr     x0, [x0, #:got_lo12:g_sys_save_data]
7027         bl      ftl_memset
7028         adrp    x0, :got:g_sys_ext_data
7029         mov     w1, 0
7030         mov     w2, 512
7031         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
7032         bl      ftl_memset
7033         bl      FtlGcBufInit
7034         bl      FtlL2PDataInit
7035         ldr     x19, [sp,16]
7036         mov     w0, 0
7037         ldp     x29, x30, [sp], 32
7038         ret
7039         .size   FtlVariablesInit, .-FtlVariablesInit
7040         .align  2
7041         .global SupperBlkListInit
7042         .type   SupperBlkListInit, %function
7043 SupperBlkListInit:
7044         stp     x29, x30, [sp, -112]!
7045         adrp    x0, :got:c_ftl_nand_blk_pre_plane
7046         mov     w2, 6
7047         add     x29, sp, 0
7048         stp     x23, x24, [sp,48]
7049         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
7050         adrp    x23, :got:p_data_block_list_table
7051         stp     x19, x20, [sp,16]
7052         stp     x21, x22, [sp,32]
7053         stp     x25, x26, [sp,64]
7054         stp     x27, x28, [sp,80]
7055         ldr     x1, [x23, #:got_lo12:p_data_block_list_table]
7056         adrp    x21, :got:g_num_data_superblocks
7057         ldrh    w3, [x0]
7058         adrp    x20, :got:g_num_free_superblocks
7059         mov     w24, 0
7060         adrp    x25, :got:c_ftl_nand_planes_num
7061         ldr     x0, [x1]
7062         mov     w1, 0
7063         mul     w2, w3, w2
7064         mov     w22, w24
7065         mov     w19, w24
7066         adrp    x26, :got:p_plane_order_table
7067         adrp    x27, :got:c_ftl_nand_page_pre_blk
7068         bl      ftl_memset
7069         mov     w28, 32768
7070         adrp    x0, :got:p_free_data_block_list_head
7071         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
7072         str     xzr, [x0]
7073         adrp    x0, :got:p_data_block_list_head
7074         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
7075         str     xzr, [x0]
7076         adrp    x0, :got:p_data_block_list_tail
7077         ldr     x0, [x0, #:got_lo12:p_data_block_list_tail]
7078         str     xzr, [x0]
7079         ldr     x0, [x21, #:got_lo12:g_num_data_superblocks]
7080         strh    wzr, [x0]
7081         ldr     x0, [x20, #:got_lo12:g_num_free_superblocks]
7082         strh    wzr, [x0]
7083 .L907:
7084         adrp    x0, :got:c_ftl_nand_data_blks_per_plane
7085         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_blks_per_plane]
7086         ldrh    w0, [x0]
7087         cmp     w0, w19
7088         bls     .L918
7089         mov     w2, 0
7090         mov     w4, w2
7091 .L913:
7092         ldr     x0, [x25, #:got_lo12:c_ftl_nand_planes_num]
7093         ldrh    w0, [x0]
7094         cmp     w0, w4
7095         bls     .L919
7096         ldr     x0, [x26, #:got_lo12:p_plane_order_table]
7097         mov     w1, w19
7098         str     x2, [x29,96]
7099         str     x4, [x29,104]
7100         ldrb    w0, [x0,w4,sxtw]
7101         bl      V2P_block
7102         bl      FtlBbmIsBadBlock
7103         ldr     x4, [x29,104]
7104         ldr     x2, [x29,96]
7105         cbnz    w0, .L908
7106         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_blk]
7107         ldrh    w0, [x0]
7108         add     w2, w2, w0
7109         uxth    w2, w2
7110 .L908:
7111         add     w4, w4, 1
7112         uxth    w4, w4
7113         b       .L913
7114 .L919:
7115         cbz     w2, .L910
7116         sdiv    w2, w28, w2
7117 .L910:
7118         ldr     x1, [x23, #:got_lo12:p_data_block_list_table]
7119         mov     w0, 6
7120         umull   x0, w19, w0
7121         ldr     x1, [x1]
7122         add     x0, x1, x0
7123         strh    w2, [x0,4]
7124         adrp    x0, :got:g_active_superblock
7125         ldr     x0, [x0, #:got_lo12:g_active_superblock]
7126         ldrh    w0, [x0]
7127         cmp     w0, w19
7128         beq     .L911
7129         adrp    x0, :got:g_buffer_superblock
7130         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
7131         ldrh    w0, [x0]
7132         cmp     w0, w19
7133         beq     .L911
7134         adrp    x0, :got:g_gc_temp_superblock
7135         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
7136         ldrh    w0, [x0]
7137         cmp     w0, w19
7138         beq     .L911
7139         adrp    x1, :got:p_valid_page_count_table
7140         ubfiz   x0, x19, 1, 16
7141         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
7142         ldr     x1, [x1]
7143         ldrh    w0, [x1,x0]
7144         cbnz    w0, .L912
7145         add     w3, w24, 1
7146         mov     w0, w19
7147         uxth    w24, w3
7148         bl      INSERT_FREE_LIST
7149         b       .L911
7150 .L912:
7151         add     w22, w22, 1
7152         mov     w0, w19
7153         uxth    w22, w22
7154         bl      INSERT_DATA_LIST
7155 .L911:
7156         add     w19, w19, 1
7157         uxth    w19, w19
7158         b       .L907
7159 .L918:
7160         ldr     x21, [x21, #:got_lo12:g_num_data_superblocks]
7161         mov     w0, 0
7162         strh    w22, [x21]
7163         ldr     x20, [x20, #:got_lo12:g_num_free_superblocks]
7164         strh    w24, [x20]
7165         ldp     x19, x20, [sp,16]
7166         ldp     x21, x22, [sp,32]
7167         ldp     x23, x24, [sp,48]
7168         ldp     x25, x26, [sp,64]
7169         ldp     x27, x28, [sp,80]
7170         ldp     x29, x30, [sp], 112
7171         ret
7172         .size   SupperBlkListInit, .-SupperBlkListInit
7173         .align  2
7174         .global FtlGcPageVarInit
7175         .type   FtlGcPageVarInit, %function
7176 FtlGcPageVarInit:
7177         adrp    x0, :got:g_gc_blk_num
7178         mov     w1, 255
7179         stp     x29, x30, [sp, -32]!
7180         add     x29, sp, 0
7181         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
7182         str     x19, [sp,16]
7183         adrp    x19, :got:c_ftl_nand_page_pre_super_blk
7184         strh    wzr, [x0]
7185         adrp    x0, :got:g_gc_page_offset
7186         ldr     x0, [x0, #:got_lo12:g_gc_page_offset]
7187         strh    wzr, [x0]
7188         adrp    x0, :got:p_gc_blk_tbl
7189         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_super_blk]
7190         ldr     x0, [x0, #:got_lo12:p_gc_blk_tbl]
7191         ldrh    w2, [x19]
7192         ldr     x0, [x0]
7193         lsl     w2, w2, 1
7194         bl      ftl_memset
7195         adrp    x0, :got:p_gc_page_info
7196         ldrh    w3, [x19]
7197         mov     w2, 12
7198         mov     w1, 255
7199         ldr     x0, [x0, #:got_lo12:p_gc_page_info]
7200         mul     w2, w3, w2
7201         ldr     x0, [x0]
7202         bl      ftl_memset
7203         bl      FtlGcBufInit
7204         ldr     x19, [sp,16]
7205         ldp     x29, x30, [sp], 32
7206         ret
7207         .size   FtlGcPageVarInit, .-FtlGcPageVarInit
7208         .align  2
7209         .global ftl_memcpy
7210         .type   ftl_memcpy, %function
7211 ftl_memcpy:
7212         stp     x29, x30, [sp, -16]!
7213         uxtw    x2, w2
7214         add     x29, sp, 0
7215         bl      memcpy
7216         ldp     x29, x30, [sp], 16
7217         ret
7218         .size   ftl_memcpy, .-ftl_memcpy
7219         .align  2
7220         .global FlashGetReadRetryDefault
7221         .type   FlashGetReadRetryDefault, %function
7222 FlashGetReadRetryDefault:
7223         stp     x29, x30, [sp, -16]!
7224         mov     w1, w0
7225         add     x29, sp, 0
7226         cbz     w0, .L922
7227         sub     w2, w0, #1
7228         cmp     w2, 5
7229         bhi     .L924
7230         bl      HynixGetReadRetryDefault
7231         b       .L922
7232 .L924:
7233         cmp     w0, 49
7234         bne     .L925
7235         adrp    x0, :got:gReadRetryInfo
7236         mov     w2, 64
7237         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7238         add     x0, x0, 4
7239         strb    w1, [x0,-4]
7240         mov     w1, 4
7241         strb    w1, [x0,-3]
7242         mov     w1, 15
7243         strb    w1, [x0,-2]
7244         adrp    x1, :got:SamsungRefValue
7245         ldr     x1, [x1, #:got_lo12:SamsungRefValue]
7246         b       .L940
7247 .L925:
7248         sub     w0, w0, #65
7249         cmp     w0, 1
7250         bls     .L931
7251         cmp     w1, 33
7252         bne     .L926
7253 .L931:
7254         adrp    x0, :got:gReadRetryInfo
7255         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7256         strb    w1, [x0]
7257         mov     w1, 4
7258         b       .L941
7259 .L926:
7260         cmp     w1, 67
7261         beq     .L932
7262         cmp     w1, 34
7263         bne     .L928
7264 .L932:
7265         adrp    x0, :got:gReadRetryInfo
7266         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7267         strb    w1, [x0]
7268         mov     w1, 5
7269 .L941:
7270         strb    w1, [x0,1]
7271         mov     w1, 7
7272         strb    w1, [x0,2]
7273         adrp    x1, :got:ToshibaA19RefValue
7274         add     x0, x0, 4
7275         mov     w2, 45
7276         ldr     x1, [x1, #:got_lo12:ToshibaA19RefValue]
7277         b       .L940
7278 .L928:
7279         cmp     w1, 68
7280         beq     .L933
7281         cmp     w1, 35
7282         bne     .L922
7283 .L933:
7284         adrp    x0, :got:gReadRetryInfo
7285         mov     w2, 95
7286         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7287         add     x0, x0, 4
7288         strb    w1, [x0,-4]
7289         mov     w1, 5
7290         strb    w1, [x0,-3]
7291         mov     w1, 17
7292         strb    w1, [x0,-2]
7293         adrp    x1, :got:Toshiba15RefValue
7294         ldr     x1, [x1, #:got_lo12:Toshiba15RefValue]
7295 .L940:
7296         bl      ftl_memcpy
7297 .L922:
7298         ldp     x29, x30, [sp], 16
7299         ret
7300         .size   FlashGetReadRetryDefault, .-FlashGetReadRetryDefault
7301         .align  2
7302         .global FlashReadIdbData
7303         .type   FlashReadIdbData, %function
7304 FlashReadIdbData:
7305         adrp    x1, :got:gNandIDataBuf
7306         mov     w2, 2048
7307         stp     x29, x30, [sp, -16]!
7308         add     x29, sp, 0
7309         ldr     x1, [x1, #:got_lo12:gNandIDataBuf]
7310         bl      ftl_memcpy
7311         mov     w0, 0
7312         ldp     x29, x30, [sp], 16
7313         ret
7314         .size   FlashReadIdbData, .-FlashReadIdbData
7315         .align  2
7316         .global FlashLoadPhyInfoInRam
7317         .type   FlashLoadPhyInfoInRam, %function
7318 FlashLoadPhyInfoInRam:
7319         stp     x29, x30, [sp, -64]!
7320         add     x29, sp, 0
7321         stp     x19, x20, [sp,16]
7322         adrp    x19, :got:NandFlashParaTbl
7323         str     x23, [sp,48]
7324         stp     x21, x22, [sp,32]
7325         mov     w20, 0
7326         adrp    x23, :got:IDByte
7327         ldr     x22, [x19, #:got_lo12:NandFlashParaTbl]
7328 .L947:
7329         ldr     x1, [x23, #:got_lo12:IDByte]
7330         add     x0, x22, 1
7331         ldrb    w2, [x22]
7332         bl      FlashMemCmp8
7333         mov     w21, w0
7334         cbnz    w0, .L944
7335         ldr     x19, [x19, #:got_lo12:NandFlashParaTbl]
7336         ubfiz   x20, x20, 5, 32
7337         adds    x19, x20, x19
7338         beq     .L950
7339         ldrb    w3, [x19,22]
7340         mov     x2, 0
7341         adrp    x4, .LANCHOR2
7342         b       .L949
7343 .L944:
7344         add     w20, w20, 1
7345         add     x22, x22, 32
7346         cmp     w20, 63
7347         bne     .L947
7348         b       .L950
7349 .L949:
7350         lsl     x0, x2, 5
7351         add     x5, x4, :lo12:.LANCHOR2
7352         mov     w1, w2
7353         ldrb    w0, [x0,x5]
7354         cmp     w0, w3
7355         beq     .L948
7356         add     x2, x2, 1
7357         cmp     x2, 4
7358         bne     .L949
7359         mov     w1, w2
7360 .L948:
7361         adrp    x0, :got:gNandOptPara
7362         adrp    x2, .LANCHOR2
7363         add     x2, x2, :lo12:.LANCHOR2
7364         ubfiz   x1, x1, 5, 32
7365         add     x1, x2, x1
7366         mov     w2, 32
7367         ldr     x0, [x0, #:got_lo12:gNandOptPara]
7368         bl      ftl_memcpy
7369         adrp    x0, :got:gNandParaInfo
7370         mov     x1, x19
7371         mov     w2, 32
7372         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
7373         bl      ftl_memcpy
7374         b       .L945
7375 .L950:
7376         mov     w21, -1
7377 .L945:
7378         mov     w0, w21
7379         ldr     x23, [sp,48]
7380         ldp     x19, x20, [sp,16]
7381         ldp     x21, x22, [sp,32]
7382         ldp     x29, x30, [sp], 64
7383         ret
7384         .size   FlashLoadPhyInfoInRam, .-FlashLoadPhyInfoInRam
7385         .align  2
7386         .global NandcCopy1KB
7387         .type   NandcCopy1KB, %function
7388 NandcCopy1KB:
7389         stp     x29, x30, [sp, -48]!
7390         uxtb    w1, w1
7391         add     x29, sp, 0
7392         stp     x19, x20, [sp,16]
7393         str     x21, [sp,32]
7394         uxtb    w19, w2
7395         cmp     w1, 1
7396         mov     x20, x4
7397         ubfiz   x2, x19, 9, 8
7398         add     x4, x0, 4096
7399         add     x21, x0, 512
7400         add     x2, x4, x2
7401         bne     .L955
7402         cbz     x3, .L956
7403         mov     x0, x2
7404         mov     x1, x3
7405         mov     w2, 1024
7406         bl      ftl_memcpy
7407 .L956:
7408         cbz     x20, .L954
7409         mov     w0, 48
7410         lsr     w19, w19, 1
7411         ldrb    w1, [x20,1]
7412         mul     w19, w19, w0
7413         ldrb    w0, [x20,2]
7414         asr     w19, w19, 2
7415         lsl     w0, w0, 16
7416         orr     w0, w0, w1, lsl 8
7417         ldrb    w1, [x20]
7418         orr     w0, w0, w1
7419         ldrb    w1, [x20,3]
7420         orr     w0, w0, w1, lsl 24
7421         str     w0, [x21,w19,sxtw 2]
7422         b       .L954
7423 .L955:
7424         cbz     x3, .L959
7425         mov     x1, x2
7426         mov     x0, x3
7427         mov     w2, 1024
7428         bl      ftl_memcpy
7429 .L959:
7430         cbz     x20, .L954
7431         mov     w0, 48
7432         lsr     w19, w19, 1
7433         mul     w19, w19, w0
7434         asr     w19, w19, 2
7435         ldr     w0, [x21,w19,sxtw 2]
7436         strb    w0, [x20]
7437         lsr     w1, w0, 8
7438         strb    w1, [x20,1]
7439         lsr     w1, w0, 16
7440         lsr     w0, w0, 24
7441         strb    w1, [x20,2]
7442         strb    w0, [x20,3]
7443 .L954:
7444         ldp     x19, x20, [sp,16]
7445         ldr     x21, [sp,32]
7446         ldp     x29, x30, [sp], 48
7447         ret
7448         .size   NandcCopy1KB, .-NandcCopy1KB
7449         .align  2
7450         .global ftl_memcmp
7451         .type   ftl_memcmp, %function
7452 ftl_memcmp:
7453         stp     x29, x30, [sp, -16]!
7454         uxtw    x2, w2
7455         add     x29, sp, 0
7456         bl      memcmp
7457         ldp     x29, x30, [sp], 16
7458         ret
7459         .size   ftl_memcmp, .-ftl_memcmp
7460         .align  2
7461         .global FlashSramLoadStore
7462         .type   FlashSramLoadStore, %function
7463 FlashSramLoadStore:
7464         adrp    x4, :got:RK29_NANDC_REG_BASE
7465         mov     x6, x0
7466         stp     x29, x30, [sp, -16]!
7467         uxtw    x1, w1
7468         add     x29, sp, 0
7469         ldr     x4, [x4, #:got_lo12:RK29_NANDC_REG_BASE]
7470         ldr     x4, [x4]
7471         add     x4, x4, 4096
7472         cbnz    w2, .L972
7473         add     x1, x4, x1
7474         b       .L974
7475 .L972:
7476         add     x0, x4, x1
7477         mov     x1, x6
7478 .L974:
7479         mov     w2, w3
7480         bl      ftl_memcpy
7481         ldp     x29, x30, [sp], 16
7482         ret
7483         .size   FlashSramLoadStore, .-FlashSramLoadStore
7484         .align  2
7485         .global FlashCs123Init
7486         .type   FlashCs123Init, %function
7487 FlashCs123Init:
7488         ret
7489         .size   FlashCs123Init, .-FlashCs123Init
7490         .align  2
7491         .global rk_nand_de_init
7492         .type   rk_nand_de_init, %function
7493 rk_nand_de_init:
7494         stp     x29, x30, [sp, -16]!
7495         add     x29, sp, 0
7496         bl      FlashDeInit
7497         ldp     x29, x30, [sp], 16
7498         ret
7499         .size   rk_nand_de_init, .-rk_nand_de_init
7500         .align  2
7501         .global rk_nand_suspend
7502         .type   rk_nand_suspend, %function
7503 rk_nand_suspend:
7504         stp     x29, x30, [sp, -16]!
7505         add     x29, sp, 0
7506         bl      FlashSuspend
7507         ldp     x29, x30, [sp], 16
7508         ret
7509         .size   rk_nand_suspend, .-rk_nand_suspend
7510         .align  2
7511         .global rk_nand_resume
7512         .type   rk_nand_resume, %function
7513 rk_nand_resume:
7514         stp     x29, x30, [sp, -16]!
7515         add     x29, sp, 0
7516         bl      FlashResume
7517         ldp     x29, x30, [sp], 16
7518         ret
7519         .size   rk_nand_resume, .-rk_nand_resume
7520         .align  2
7521         .global rk_ftl_get_capacity
7522         .type   rk_ftl_get_capacity, %function
7523 rk_ftl_get_capacity:
7524         stp     x29, x30, [sp, -16]!
7525         mov     w0, -1
7526         add     x29, sp, 0
7527         bl      FtlGetCapacity
7528         ldp     x29, x30, [sp], 16
7529         ret
7530         .size   rk_ftl_get_capacity, .-rk_ftl_get_capacity
7531         .align  2
7532         .global rknand_print_hex
7533         .type   rknand_print_hex, %function
7534 rknand_print_hex:
7535         stp     x29, x30, [sp, -96]!
7536         add     x29, sp, 0
7537         stp     x19, x20, [sp,16]
7538         stp     x21, x22, [sp,32]
7539         stp     x23, x24, [sp,48]
7540         mov     x19, 0
7541         adrp    x23, .LC79
7542         adrp    x21, .LC80
7543         adrp    x24, .LC72
7544         stp     x25, x26, [sp,64]
7545         str     x27, [sp,80]
7546         mov     x22, x1
7547         mov     x27, x0
7548         mov     w25, w2
7549         uxtw    x26, w3
7550         mov     w20, w19
7551         add     x23, x23, :lo12:.LC79
7552         add     x21, x21, :lo12:.LC80
7553         add     x24, x24, :lo12:.LC72
7554 .L981:
7555         cmp     x19, x26
7556         beq     .L989
7557         cbnz    w20, .L982
7558         mov     x0, x23
7559         mov     x1, x27
7560         mov     w2, w19
7561         bl      printk
7562 .L982:
7563         cmp     w25, 4
7564         mov     x0, x21
7565         bne     .L983
7566         ldr     w1, [x22,x19,lsl 2]
7567         b       .L988
7568 .L983:
7569         cmp     w25, 2
7570         bne     .L985
7571         ldrsh   w1, [x22,x19,lsl 1]
7572         b       .L988
7573 .L985:
7574         ldrb    w1, [x22,x19]
7575 .L988:
7576         bl      printk
7577         add     w20, w20, 1
7578         cmp     w20, 15
7579         bls     .L986
7580         adrp    x1, .LC81
7581         mov     x0, x24
7582         add     x1, x1, :lo12:.LC81
7583         mov     w20, 0
7584         bl      printk
7585 .L986:
7586         add     x19, x19, 1
7587         b       .L981
7588 .L989:
7589         adrp    x0, .LC72
7590         adrp    x1, .LC81
7591         add     x1, x1, :lo12:.LC81
7592         add     x0, x0, :lo12:.LC72
7593         bl      printk
7594         ldr     x27, [sp,80]
7595         ldp     x19, x20, [sp,16]
7596         ldp     x21, x22, [sp,32]
7597         ldp     x23, x24, [sp,48]
7598         ldp     x25, x26, [sp,64]
7599         ldp     x29, x30, [sp], 96
7600         ret
7601         .size   rknand_print_hex, .-rknand_print_hex
7602         .align  2
7603         .global NandcXferComp
7604         .type   NandcXferComp, %function
7605 NandcXferComp:
7606         stp     x29, x30, [sp, -80]!
7607         adrp    x1, :got:gNandChipMap
7608         ubfiz   x0, x0, 4, 8
7609         add     x29, sp, 0
7610         stp     x21, x22, [sp,32]
7611         ldr     x1, [x1, #:got_lo12:gNandChipMap]
7612         adrp    x21, :got:gNandcVer
7613         stp     x19, x20, [sp,16]
7614         str     x23, [sp,48]
7615         ldr     x19, [x1,x0]
7616         ldr     x0, [x21, #:got_lo12:gNandcVer]
7617         ldr     w0, [x0]
7618         cmp     w0, 3
7619         bls     .L1021
7620         ldr     w0, [x19,16]
7621         tbz     x0, 2, .L1021
7622         mov     x0, x19
7623         bl      wait_for_nandc_xfer_completed
7624         ldr     w20, [x19,16]
7625         ldr     w0, [x19,8]
7626         ubfx    x20, x20, 1, 1
7627         str     w0, [x29,64]
7628         cbz     w20, .L992
7629         adrp    x22, .LC82
7630         adrp    x23, .LC83
7631         mov     w20, 0
7632         add     x22, x22, :lo12:.LC82
7633         add     x23, x23, :lo12:.LC83
7634 .L993:
7635         ldr     w2, [x19,28]
7636         ldr     w1, [x29,64]
7637         ubfx    x2, x2, 16, 5
7638         ubfx    x1, x1, 22, 6
7639         cmp     w2, w1
7640         bge     .L1001
7641         ldr     x0, [x21, #:got_lo12:gNandcVer]
7642         ldr     w0, [x0]
7643         cmp     w0, 5
7644         bhi     .L994
7645 .L997:
7646         add     w20, w20, 1
7647         and     w0, w20, 16777215
7648         cbnz    w0, .L993
7649         ldr     w2, [x19,28]
7650         mov     w1, w20
7651         ldr     w3, [x29,64]
7652         mov     x0, x22
7653         ubfx    x2, x2, 16, 5
7654         ubfx    x3, x3, 22, 6
7655         bl      printk
7656         mov     x0, x23
7657         mov     x1, x19
7658         mov     w2, 4
7659         mov     w3, 512
7660         bl      rknand_print_hex
7661         b       .L993
7662 .L994:
7663         ldr     w0, [x19]
7664         str     w0, [x29,72]
7665         ldr     w0, [x29,72]
7666         tbz     x0, 13, .L997
7667         ldr     w0, [x29,72]
7668         tbz     x0, 17, .L997
7669 .L1001:
7670         adrp    x19, :got:gMasterInfo
7671         ldr     x19, [x19, #:got_lo12:gMasterInfo]
7672         ldr     w0, [x19,40]
7673         cbz     w0, .L1002
7674         ldr     w1, [x29,64]
7675         mov     w2, 0
7676         ldr     w0, [x19,32]
7677         ubfx    x1, x1, 22, 5
7678         lsl     w1, w1, 10
7679         bl      rknand_dma_unmap_single
7680         ldr     w1, [x29,64]
7681         mov     w2, 0
7682         ldr     w0, [x19,36]
7683         ubfx    x1, x1, 22, 5
7684         lsl     w1, w1, 7
7685         bl      rknand_dma_unmap_single
7686         b       .L1002
7687 .L992:
7688         adrp    x21, .LC84
7689         adrp    x22, .LC83
7690         add     x21, x21, :lo12:.LC84
7691         add     x22, x22, :lo12:.LC83
7692 .L1003:
7693         ldr     w0, [x29,64]
7694         tbnz    x0, 20, .L1029
7695         ldr     w0, [x19,8]
7696         add     w20, w20, 1
7697         str     w0, [x29,64]
7698         and     w0, w20, 16777215
7699         cbnz    w0, .L1003
7700         ldr     w2, [x29,64]
7701         mov     w1, w20
7702         ldr     w3, [x19,28]
7703         mov     x0, x21
7704         ubfx    x3, x3, 16, 5
7705         bl      printk
7706         mov     x0, x22
7707         mov     x1, x19
7708         mov     w2, 4
7709         mov     w3, 512
7710         bl      rknand_print_hex
7711         b       .L1003
7712 .L1029:
7713         adrp    x0, :got:gNandcDumpWriteEn
7714         mov     x20, x0
7715         ldr     x1, [x0, #:got_lo12:gNandcDumpWriteEn]
7716         ldr     w1, [x1]
7717         cbz     w1, .L1006
7718         mov     x0, x19
7719         bl      NandcSendDumpDataStart
7720 .L1006:
7721         adrp    x21, :got:gMasterInfo
7722         ldr     x21, [x21, #:got_lo12:gMasterInfo]
7723         ldr     w0, [x21,40]
7724         cbz     w0, .L1007
7725         ldr     w1, [x29,64]
7726         mov     w2, 1
7727         ldr     w0, [x21,32]
7728         ubfx    x1, x1, 22, 5
7729         lsl     w1, w1, 10
7730         bl      rknand_dma_unmap_single
7731         ldr     w1, [x29,64]
7732         mov     w2, 1
7733         ldr     w0, [x21,36]
7734         ubfx    x1, x1, 22, 5
7735         lsl     w1, w1, 7
7736         bl      rknand_dma_unmap_single
7737 .L1007:
7738         ldr     x0, [x20, #:got_lo12:gNandcDumpWriteEn]
7739         ldr     w0, [x0]
7740         cbz     w0, .L1002
7741         mov     x0, x19
7742         bl      NandcSendDumpDataDone
7743 .L1002:
7744         adrp    x0, :got:gMasterInfo
7745         ldr     x0, [x0, #:got_lo12:gMasterInfo]
7746         str     wzr, [x0,40]
7747         b       .L990
7748 .L1021:
7749         ldr     w0, [x19,8]
7750         str     w0, [x29,64]
7751         ldr     w0, [x29,64]
7752         tbz     x0, 20, .L1021
7753 .L990:
7754         ldp     x19, x20, [sp,16]
7755         ldp     x21, x22, [sp,32]
7756         ldr     x23, [sp,48]
7757         ldp     x29, x30, [sp], 80
7758         ret
7759         .size   NandcXferComp, .-NandcXferComp
7760         .align  2
7761         .global NandcXferData
7762         .type   NandcXferData, %function
7763 NandcXferData:
7764         stp     x29, x30, [sp, -176]!
7765         add     x29, sp, 0
7766         stp     x23, x24, [sp,48]
7767         uxtb    w23, w0
7768         adrp    x0, :got:gNandChipMap
7769         stp     x19, x20, [sp,16]
7770         uxtb    w20, w1
7771         sbfiz   x1, x23, 4, 32
7772         ldr     x0, [x0, #:got_lo12:gNandChipMap]
7773         uxtb    w24, w2
7774         stp     x21, x22, [sp,32]
7775         stp     x25, x26, [sp,64]
7776         stp     x27, x28, [sp,80]
7777         mov     x25, x3
7778         mov     x21, x4
7779         ldr     x19, [x0,x1]
7780         and     x0, x3, 63
7781         cbnz    x0, .L1031
7782         cbnz    x4, .L1032
7783         add     x21, x29, 112
7784         mov     w1, 255
7785         mov     x0, x21
7786         mov     w2, 64
7787         bl      ftl_memset
7788 .L1032:
7789         mov     w0, w23
7790         mov     w1, w20
7791         mov     w2, w24
7792         mov     w3, 0
7793         mov     x4, x25
7794         mov     x5, x21
7795         bl      NandcXferStart
7796         mov     w0, w23
7797         bl      NandcXferComp
7798         cbz     w20, .L1033
7799 .L1050:
7800         mov     w22, 0
7801         b       .L1034
7802 .L1033:
7803         adrp    x0, :got:gNandcEccBits
7804         ubfx    x2, x24, 1, 7
7805         mov     w3, 128
7806         adrp    x5, :got:gMasterInfo
7807         add     x2, x21, x2, lsl 2
7808         ldr     x1, [x0, #:got_lo12:gNandcEccBits]
7809         ldr     w1, [x1]
7810         cmp     w1, 25
7811         mov     w1, 64
7812         csel    w3, w1, w3, cc
7813         mov     w1, w20
7814 .L1036:
7815         cmp     x21, x2
7816         add     w4, w1, w3
7817         beq     .L1078
7818         ldr     x6, [x5, #:got_lo12:gMasterInfo]
7819         and     x1, x1, 4294967292
7820         add     x21, x21, 4
7821         ldr     x6, [x6,8]
7822         ldr     w1, [x6,x1]
7823         strb    w1, [x21,-4]
7824         lsr     w6, w1, 8
7825         strb    w6, [x21,-3]
7826         lsr     w6, w1, 16
7827         strb    w6, [x21,-2]
7828         lsr     w1, w1, 24
7829         strb    w1, [x21,-1]
7830         mov     w1, w4
7831         b       .L1036
7832 .L1078:
7833         ldr     x0, [x0, #:got_lo12:gNandcEccBits]
7834         lsr     w24, w24, 2
7835         ldr     w5, [x0]
7836         adrp    x0, :got:gNandcVer
7837         ldr     x0, [x0, #:got_lo12:gNandcVer]
7838         ldr     w4, [x0]
7839         mov     w0, 0
7840         mov     w22, w0
7841 .L1038:
7842         cmp     w0, w24
7843         bcs     .L1034
7844         cbz     w5, .L1034
7845         uxtw    x1, w0
7846         add     x1, x1, 8
7847         ldr     w1, [x19,x1,lsl 2]
7848         str     w1, [x29,104]
7849         ldr     w1, [x29,104]
7850         tbnz    x1, 2, .L1062
7851         ldr     w3, [x29,104]
7852         ubfx    x3, x3, 15, 1
7853         cbnz    w3, .L1062
7854         cmp     w4, 5
7855         bls     .L1040
7856         ldr     w2, [x29,104]
7857         ubfx    x6, x2, 3, 5
7858         ldr     w2, [x29,104]
7859         ldr     w1, [x29,104]
7860         ubfx    x2, x2, 27, 1
7861         ubfx    x3, x1, 16, 5
7862         ldr     w1, [x29,104]
7863         orr     w2, w6, w2, lsl 5
7864         ubfx    x1, x1, 29, 1
7865         orr     w1, w3, w1, lsl 5
7866         ldr     w3, [x29,104]
7867         cmp     w2, w1
7868         bls     .L1041
7869         ldr     w1, [x29,104]
7870         ubfx    x3, x3, 3, 5
7871         ubfx    x1, x1, 27, 1
7872         orr     w3, w3, w1, lsl 5
7873         b       .L1042
7874 .L1041:
7875         ubfx    x1, x3, 16, 5
7876         ldr     w3, [x29,104]
7877         ubfx    x3, x3, 29, 1
7878         b       .L1077
7879 .L1040:
7880         cmp     w4, 3
7881         bls     .L1042
7882         ldr     w2, [x29,104]
7883         ubfx    x6, x2, 3, 5
7884         ldr     w2, [x29,104]
7885         ldr     w1, [x29,104]
7886         ubfx    x2, x2, 28, 1
7887         ubfx    x3, x1, 16, 5
7888         ldr     w1, [x29,104]
7889         orr     w2, w6, w2, lsl 5
7890         ubfx    x1, x1, 30, 1
7891         orr     w1, w3, w1, lsl 5
7892         ldr     w3, [x29,104]
7893         cmp     w2, w1
7894         bls     .L1043
7895         ubfx    x1, x3, 3, 5
7896         ldr     w3, [x29,104]
7897         ubfx    x3, x3, 28, 1
7898         b       .L1077
7899 .L1043:
7900         ubfx    x1, x3, 16, 5
7901         ldr     w3, [x29,104]
7902         ubfx    x3, x3, 30, 1
7903 .L1077:
7904         orr     w3, w1, w3, lsl 5
7905 .L1042:
7906         cmp     w22, w3
7907         csel    w22, w22, w3, cs
7908         b       .L1039
7909 .L1062:
7910         mov     w22, -1
7911 .L1039:
7912         add     w0, w0, 1
7913         b       .L1038
7914 .L1031:
7915         cmp     w20, 1
7916         bne     .L1076
7917         mov     w22, 0
7918         mov     w27, 2
7919 .L1045:
7920         cmp     w22, w24
7921         bcs     .L1050
7922         and     w26, w22, 3
7923         mov     x3, x25
7924         cbz     x25, .L1047
7925         ubfiz   x0, x22, 9, 23
7926         add     x3, x25, x0
7927 .L1047:
7928         cmp     x21, xzr
7929         mov     x0, x19
7930         csel    w4, w27, wzr, ne
7931         mov     w1, 1
7932         mov     w2, w26
7933         mul     w4, w4, w22
7934         add     w22, w22, 2
7935         add     x4, x21, x4
7936         bl      NandcCopy1KB
7937         mov     x4, 0
7938         mov     w0, w23
7939         mov     w1, 1
7940         mov     w2, 2
7941         mov     w3, w26
7942         mov     x5, x4
7943         bl      NandcXferStart
7944         mov     w0, w23
7945         bl      NandcXferComp
7946         b       .L1045
7947 .L1076:
7948         mov     w1, 0
7949         mov     x4, 0
7950         mov     w27, 0
7951         mov     w0, w23
7952         mov     w2, 2
7953         mov     w3, w1
7954         mov     x5, x4
7955         mov     w22, w27
7956         mov     w28, 2
7957         bl      NandcXferStart
7958 .L1051:
7959         cmp     w27, w24
7960         bcs     .L1034
7961         mov     w0, w23
7962         add     w26, w27, 2
7963         bl      NandcXferComp
7964         ldr     w0, [x19,32]
7965         cmp     w26, w24
7966         str     w0, [x29,104]
7967         bcs     .L1052
7968         mov     x4, 0
7969         mov     w0, w23
7970         mov     w1, 0
7971         mov     w2, 2
7972         and     w3, w26, 3
7973         mov     x5, x4
7974         bl      NandcXferStart
7975 .L1052:
7976         ldr     w0, [x29,104]
7977         tbnz    x0, 2, .L1067
7978         ldr     w0, [x29,104]
7979         ubfx    x1, x0, 3, 5
7980         ldr     w0, [x29,104]
7981         ubfx    x0, x0, 27, 1
7982         orr     w0, w1, w0, lsl 5
7983         cmp     w22, w0
7984         csel    w22, w22, w0, cs
7985         b       .L1053
7986 .L1067:
7987         mov     w22, -1
7988 .L1053:
7989         adrp    x0, :got:gpNandc1
7990         ldr     x0, [x0, #:got_lo12:gpNandc1]
7991         ldr     x0, [x0]
7992         cmp     x19, x0
7993         bne     .L1054
7994         mov     w0, w23
7995         bl      NandcXferComp
7996 .L1054:
7997         and     w2, w27, 3
7998         mov     x3, x25
7999         cbz     x25, .L1055
8000         ubfiz   x3, x27, 9, 23
8001         add     x3, x25, x3
8002 .L1055:
8003         cmp     x21, xzr
8004         mov     x0, x19
8005         csel    w4, w28, wzr, ne
8006         mov     w1, 0
8007         mul     w4, w4, w27
8008         mov     w27, w26
8009         add     x4, x21, x4
8010         bl      NandcCopy1KB
8011         b       .L1051
8012 .L1034:
8013         cbnz    w20, .L1058
8014         adrp    x0, :got:gNandcVer
8015         ldr     x0, [x0, #:got_lo12:gNandcVer]
8016         ldr     w0, [x0]
8017         cmp     w0, 5
8018         bls     .L1058
8019         ldr     w0, [x19]
8020         mov     w1, 8192
8021         movk    w1, 0x2, lsl 16
8022         and     w1, w0, w1
8023         cmp     w1, 139264
8024         bne     .L1058
8025         orr     w0, w0, 131072
8026         mov     w22, -1
8027         str     w0, [x19]
8028 .L1058:
8029         mov     w0, w22
8030         ldp     x19, x20, [sp,16]
8031         ldp     x21, x22, [sp,32]
8032         ldp     x23, x24, [sp,48]
8033         ldp     x25, x26, [sp,64]
8034         ldp     x27, x28, [sp,80]
8035         ldp     x29, x30, [sp], 176
8036         ret
8037         .size   NandcXferData, .-NandcXferData
8038         .align  2
8039         .global FlashReadRawPage
8040         .type   FlashReadRawPage, %function
8041 FlashReadRawPage:
8042         stp     x29, x30, [sp, -64]!
8043         mov     x4, x3
8044         add     x29, sp, 0
8045         stp     x19, x20, [sp,16]
8046         uxtb    w19, w0
8047         adrp    x0, :got:gNandParaInfo
8048         str     x21, [sp,32]
8049         mov     x21, x2
8050         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
8051         ldrb    w20, [x0,9]
8052         cbnz    w19, .L1080
8053         adrp    x0, :got:gNandIDBResBlkNum
8054         adrp    x5, :got:gBlockPageAlignSize
8055         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
8056         ldr     x5, [x5, #:got_lo12:gBlockPageAlignSize]
8057         ldrb    w0, [x0]
8058         ldr     w2, [x5]
8059         mul     w0, w0, w2
8060         cmp     w1, w0
8061         mov     w0, 4
8062         csel    w20, w20, w0, cs
8063 .L1080:
8064         mov     w0, w19
8065         str     x4, [x29,48]
8066         str     x1, [x29,56]
8067         bl      NandcWaitFlashReady
8068         mov     w0, w19
8069         bl      NandcFlashCs
8070         ldr     x1, [x29,56]
8071         mov     w0, w19
8072         bl      FlashReadCmd
8073         mov     w0, w19
8074         bl      NandcWaitFlashReady
8075         ldr     x4, [x29,48]
8076         mov     w2, w20
8077         mov     x3, x21
8078         mov     w1, 0
8079         mov     w0, w19
8080         bl      NandcXferData
8081         mov     w20, w0
8082         mov     w0, w19
8083         bl      NandcFlashDeCs
8084         ldr     x21, [sp,32]
8085         mov     w0, w20
8086         ldp     x19, x20, [sp,16]
8087         ldp     x29, x30, [sp], 64
8088         ret
8089         .size   FlashReadRawPage, .-FlashReadRawPage
8090         .align  2
8091         .global FlashDdrTunningRead
8092         .type   FlashDdrTunningRead, %function
8093 FlashDdrTunningRead:
8094         stp     x29, x30, [sp, -112]!
8095         add     x29, sp, 0
8096         stp     x21, x22, [sp,32]
8097         uxtb    w22, w0
8098         adrp    x0, :got:gpNandc
8099         stp     x19, x20, [sp,16]
8100         stp     x23, x24, [sp,48]
8101         ldr     x0, [x0, #:got_lo12:gpNandc]
8102         mov     w19, 6
8103         stp     x25, x26, [sp,64]
8104         stp     x27, x28, [sp,80]
8105         mov     w24, w1
8106         mov     x23, x2
8107         ldr     x0, [x0]
8108         mov     x21, x3
8109         mov     w25, w4
8110         mov     w20, 1024
8111         ldr     w26, [x0,304]
8112         adrp    x0, :got:gNandcVer
8113         ldr     x0, [x0, #:got_lo12:gNandcVer]
8114         ldr     w0, [x0]
8115         cmp     w0, 8
8116         mov     w0, 18
8117         csel    w19, w19, w0, cc
8118         cbz     w4, .L1083
8119         mov     w0, 1
8120         bl      FlashSetInterfaceMode
8121         mov     w0, 1
8122         bl      NandcSetMode
8123         mov     w0, w22
8124         bl      FlashReset
8125         mov     x3, x21
8126         adrp    x21, :got:gFlashInterfaceMode
8127         mov     w1, w24
8128         mov     x2, x23
8129         mov     w0, w22
8130         bl      FlashReadRawPage
8131         ldr     x21, [x21, #:got_lo12:gFlashInterfaceMode]
8132         mov     w20, w0
8133         ldrb    w0, [x21]
8134         bl      FlashSetInterfaceMode
8135         ldrb    w0, [x21]
8136         bl      NandcSetMode
8137         cmn     w20, #1
8138         bne     .L1084
8139 .L1092:
8140         mov     w20, -1
8141         b       .L1085
8142 .L1084:
8143         cmp     w20, 9
8144         bhi     .L1086
8145         adrp    x1, :got:IDByte
8146         sxtw    x0, w22
8147         lsl     x2, x0, 3
8148         ldr     x1, [x1, #:got_lo12:IDByte]
8149         ldrb    w1, [x1,x2]
8150         cmp     w1, 173
8151         bne     .L1086
8152         adrp    x1, :got:gNandChipMap
8153         lsl     x0, x0, 4
8154         ldr     x1, [x1, #:got_lo12:gNandChipMap]
8155         ldr     x0, [x1,x0]
8156         ldr     w1, [x0,3840]
8157         ldr     w1, [x0]
8158         orr     w1, w1, 131072
8159         str     w1, [x0]
8160 .L1086:
8161         adrp    x3, :got:FlashDdrTunningReadCount
8162         ldr     x3, [x3, #:got_lo12:FlashDdrTunningReadCount]
8163         ldr     w0, [x3]
8164         add     w0, w0, 1
8165         cmp     w0, 2047
8166         bhi     .L1087
8167         str     w0, [x3]
8168         b       .L1085
8169 .L1087:
8170         mov     x21, 0
8171         str     wzr, [x3]
8172         mov     x23, x21
8173 .L1083:
8174         mov     w28, 0
8175         mov     w5, w20
8176         mov     w4, w28
8177         mov     w27, -1
8178 .L1090:
8179         mov     w0, w19
8180         str     x5, [x29,96]
8181         str     x4, [x29,104]
8182         bl      NandcSetDdrPara
8183         mov     w0, w22
8184         mov     w1, w24
8185         mov     x2, x23
8186         mov     x3, x21
8187         bl      FlashReadRawPage
8188         mov     w20, w0
8189         ldr     x5, [x29,96]
8190         ldr     x4, [x29,104]
8191         add     w0, w5, 1
8192         cmp     w20, w0
8193         bhi     .L1095
8194         cmp     w20, 2
8195         bhi     .L1096
8196         add     w4, w4, 1
8197         cmp     w4, 4
8198         bls     .L1096
8199         b       .L1097
8200 .L1095:
8201         mov     w20, w5
8202         b       .L1088
8203 .L1096:
8204         mov     x21, 0
8205         mov     w28, w19
8206         mov     w27, 0
8207         mov     x23, x21
8208 .L1088:
8209         add     w19, w19, 2
8210         cmp     w19, 69
8211         bhi     .L1112
8212         mov     w5, w20
8213         b       .L1090
8214 .L1112:
8215         mov     w19, w28
8216         cbz     w28, .L1091
8217         b       .L1089
8218 .L1097:
8219         mov     w27, 0
8220 .L1089:
8221         adrp    x0, .LC85
8222         mov     w1, w19
8223         add     x0, x0, :lo12:.LC85
8224         bl      printk
8225         mov     w0, w19
8226         bl      NandcSetDdrPara
8227 .L1091:
8228         cbz     w27, .L1085
8229         adrp    x0, .LC86
8230         mov     w1, w22
8231         add     x0, x0, :lo12:.LC86
8232         mov     w2, w24
8233         bl      printk
8234         cbz     w25, .L1092
8235         lsr     w0, w26, 8
8236         bl      NandcSetDdrPara
8237 .L1085:
8238         mov     w0, w20
8239         ldp     x19, x20, [sp,16]
8240         ldp     x21, x22, [sp,32]
8241         ldp     x23, x24, [sp,48]
8242         ldp     x25, x26, [sp,64]
8243         ldp     x27, x28, [sp,80]
8244         ldp     x29, x30, [sp], 112
8245         ret
8246         .size   FlashDdrTunningRead, .-FlashDdrTunningRead
8247         .align  2
8248         .global FlashReadPage
8249         .type   FlashReadPage, %function
8250 FlashReadPage:
8251         stp     x29, x30, [sp, -80]!
8252         add     x29, sp, 0
8253         stp     x19, x20, [sp,16]
8254         uxtb    w20, w0
8255         str     x25, [sp,64]
8256         mov     w0, w20
8257         stp     x23, x24, [sp,48]
8258         stp     x21, x22, [sp,32]
8259         mov     x24, x2
8260         mov     w22, w1
8261         mov     x23, x3
8262         bl      FlashReadRawPage
8263         cmn     w0, #1
8264         mov     w19, w0
8265         bne     .L1114
8266         adrp    x21, :got:gNandRandomizer
8267         ldr     x21, [x21, #:got_lo12:gNandRandomizer]
8268         ldrb    w25, [x21]
8269         cbz     w25, .L1114
8270         mov     w0, w20
8271         mov     w1, w22
8272         mov     x2, x24
8273         mov     x3, x23
8274         strb    wzr, [x21]
8275         bl      FlashReadRawPage
8276         strb    w25, [x21]
8277         mov     w19, w0
8278 .L1114:
8279         adrp    x0, :got:gpReadRetrial
8280         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
8281         ldr     x4, [x0]
8282         cbz     x4, .L1115
8283         cmn     w19, #1
8284         bne     .L1116
8285         mov     w1, w22
8286         mov     x2, x24
8287         mov     x3, x23
8288         mov     w0, w20
8289         blr     x4
8290         mov     w19, w0
8291         adrp    x0, .LC87
8292         mov     w1, w19
8293         add     x0, x0, :lo12:.LC87
8294         mov     w2, w20
8295         mov     w3, w22
8296         bl      printk
8297 .L1115:
8298         cmn     w19, #1
8299         bne     .L1116
8300         adrp    x0, :got:gFlashToggleModeEn
8301         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
8302         ldrb    w0, [x0]
8303         cbz     w0, .L1116
8304         adrp    x0, :got:gpNandc
8305         mov     w1, w22
8306         mov     x2, x24
8307         mov     x3, x23
8308         mov     w4, 1
8309         ldr     x0, [x0, #:got_lo12:gpNandc]
8310         ldr     x0, [x0]
8311         ldr     w21, [x0,304]
8312         mov     w0, w20
8313         bl      FlashDdrTunningRead
8314         cmn     w0, #1
8315         mov     w19, w0
8316         beq     .L1117
8317         adrp    x1, :got:gNandFlashEccBits
8318         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
8319         ldrb    w0, [x1]
8320         cmp     w19, w0, lsr 1
8321         bls     .L1116
8322 .L1117:
8323         lsr     w0, w21, 8
8324         bl      NandcSetDdrPara
8325 .L1116:
8326         mov     w0, w19
8327         ldr     x25, [sp,64]
8328         ldp     x19, x20, [sp,16]
8329         ldp     x21, x22, [sp,32]
8330         ldp     x23, x24, [sp,48]
8331         ldp     x29, x30, [sp], 80
8332         ret
8333         .size   FlashReadPage, .-FlashReadPage
8334         .align  2
8335         .global FlashDdrParaScan
8336         .type   FlashDdrParaScan, %function
8337 FlashDdrParaScan:
8338         stp     x29, x30, [sp, -48]!
8339         add     x29, sp, 0
8340         stp     x19, x20, [sp,16]
8341         adrp    x19, :got:gFlashInterfaceMode
8342         mov     w20, w1
8343         stp     x21, x22, [sp,32]
8344         uxtb    w21, w0
8345         ldr     x22, [x19, #:got_lo12:gFlashInterfaceMode]
8346         ldrb    w0, [x22]
8347         bl      FlashSetInterfaceMode
8348         ldrb    w0, [x22]
8349         bl      NandcSetMode
8350         mov     x2, 0
8351         mov     w1, w20
8352         mov     x3, x2
8353         mov     w4, w2
8354         mov     w0, w21
8355         bl      FlashDdrTunningRead
8356         mov     w22, w0
8357         mov     x2, 0
8358         mov     w1, w20
8359         mov     w0, w21
8360         mov     x3, x2
8361         bl      FlashReadRawPage
8362         cmn     w0, #1
8363         mov     x1, x19
8364         adrp    x19, :got:gFlashToggleModeEn
8365         beq     .L1134
8366         cmn     w22, #1
8367         bne     .L1131
8368 .L1134:
8369         ldr     x0, [x1, #:got_lo12:gFlashInterfaceMode]
8370         ldrb    w0, [x0]
8371         tbz     x0, 0, .L1131
8372         mov     w0, 1
8373         bl      FlashSetInterfaceMode
8374         mov     w0, 1
8375         bl      NandcSetMode
8376         ldr     x19, [x19, #:got_lo12:gFlashToggleModeEn]
8377         strb    wzr, [x19]
8378         b       .L1133
8379 .L1131:
8380         ldr     x19, [x19, #:got_lo12:gFlashToggleModeEn]
8381         mov     w0, 1
8382         strb    w0, [x19]
8383 .L1133:
8384         mov     w0, 0
8385         ldp     x19, x20, [sp,16]
8386         ldp     x21, x22, [sp,32]
8387         ldp     x29, x30, [sp], 48
8388         ret
8389         .size   FlashDdrParaScan, .-FlashDdrParaScan
8390         .align  2
8391         .global FlashLoadPhyInfo
8392         .type   FlashLoadPhyInfo, %function
8393 FlashLoadPhyInfo:
8394         stp     x29, x30, [sp, -144]!
8395         mov     w0, 40
8396         add     x29, sp, 0
8397         stp     x19, x20, [sp,16]
8398         adrp    x20, :got:gNandParaInfo
8399         mov     w19, 0
8400         strb    w0, [x29,136]
8401         mov     w0, 60
8402         strb    w0, [x29,137]
8403         mov     w0, 24
8404         strb    w0, [x29,138]
8405         mov     w0, 16
8406         stp     x21, x22, [sp,32]
8407         strb    w0, [x29,139]
8408         adrp    x22, :got:gFlashPageBuffer0
8409         ldr     x0, [x20, #:got_lo12:gNandParaInfo]
8410         adrp    x21, :got:gpFlashSaveInfo
8411         stp     x23, x24, [sp,48]
8412         stp     x25, x26, [sp,64]
8413         stp     x27, x28, [sp,80]
8414         ldr     x1, [x22, #:got_lo12:gFlashPageBuffer0]
8415         adrp    x23, :got:gNandFlashInfoBlockAddr
8416         ldrh    w0, [x0,10]
8417         mov     w24, 4
8418         str     w0, [x29,124]
8419         mov     w25, -1
8420         ldr     x0, [x21, #:got_lo12:gpFlashSaveInfo]
8421         adrp    x26, :got:gNandOptPara
8422         ldr     x1, [x1]
8423         adrp    x27, :got:gReadRetryInfo
8424         str     x21, [x29,112]
8425         str     x1, [x0]
8426         ldr     x0, [x23, #:got_lo12:gNandFlashInfoBlockAddr]
8427         str     wzr, [x0]
8428 .L1142:
8429         add     w28, w19, 1
8430         mov     x21, 0
8431 .L1144:
8432         add     x0, x29, 136
8433         ldrb    w0, [x21,x0]
8434         bl      FlashBchSel
8435         ldr     x6, [x22, #:got_lo12:gFlashPageBuffer0]
8436         mov     w0, 0
8437         mov     w1, w19
8438         mov     x3, 0
8439         str     x6, [x29,104]
8440         ldr     x2, [x6]
8441         bl      FlashReadRawPage
8442         cmn     w0, #1
8443         bne     .L1143
8444         ldr     x6, [x29,104]
8445         mov     w0, 0
8446         mov     w1, w28
8447         mov     x3, 0
8448         ldr     x2, [x6]
8449         bl      FlashReadRawPage
8450         cmn     w0, #1
8451         bne     .L1143
8452         add     x21, x21, 1
8453         cmp     x21, 4
8454         beq     .L1145
8455         b       .L1144
8456 .L1146:
8457         ldr     w21, [x0,8]
8458         mov     w1, 2036
8459         add     x0, x0, 12
8460         mov     w25, -1
8461         bl      JSHash
8462         cmp     w21, w0
8463         beq     .L1156
8464 .L1145:
8465         ldr     w0, [x29,124]
8466         subs    w24, w24, #1
8467         add     w19, w19, w0
8468         bne     .L1142
8469         b       .L1153
8470 .L1143:
8471         ldr     x0, [x29,112]
8472         mov     w1, 20036
8473         movk    w1, 0x4e41, lsl 16
8474         ldr     x28, [x0, #:got_lo12:gpFlashSaveInfo]
8475         ldr     x0, [x28]
8476         ldr     w2, [x0]
8477         cmp     w2, w1
8478         bne     .L1145
8479         cbnz    w25, .L1146
8480         ldr     x20, [x20, #:got_lo12:gNandParaInfo]
8481         adrp    x0, :got:gNandFlashIdbBlockAddr
8482         ldrh    w1, [x20,10]
8483         ldr     x0, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
8484         udiv    w19, w19, w1
8485         add     w19, w19, 1
8486         str     w19, [x0]
8487         b       .L1153
8488 .L1156:
8489         ldr     x21, [x20, #:got_lo12:gNandParaInfo]
8490         mov     w2, 32
8491         ldr     x1, [x28]
8492         mov     x0, x21
8493         add     x1, x1, 160
8494         bl      ftl_memcpy
8495         ldr     x1, [x28]
8496         mov     w2, 32
8497         ldr     x0, [x26, #:got_lo12:gNandOptPara]
8498         add     x1, x1, 192
8499         bl      ftl_memcpy
8500         ldr     x1, [x28]
8501         mov     w2, 852
8502         ldr     x0, [x27, #:got_lo12:gReadRetryInfo]
8503         add     x1, x1, 224
8504         bl      ftl_memcpy
8505         adrp    x1, :got:gFlashToggleModeEn
8506         ldr     x2, [x28]
8507         ldr     x1, [x1, #:got_lo12:gFlashToggleModeEn]
8508         ldr     w0, [x2,1076]
8509         strb    w0, [x1]
8510         ldrh    w1, [x21,10]
8511         ldr     x0, [x23, #:got_lo12:gNandFlashInfoBlockAddr]
8512         udiv    w1, w19, w1
8513         str     w19, [x0]
8514         adrp    x0, :got:gNandFlashIdbBlockAddr
8515         add     w3, w1, 1
8516         ldr     x0, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
8517         cbz     w1, .L1148
8518         str     w3, [x0]
8519         b       .L1149
8520 .L1148:
8521         mov     w1, 2
8522         str     w1, [x0]
8523 .L1149:
8524         adrp    x0, :got:gNandIDBResBlkNumSaveInFlash
8525         ldrh    w1, [x2,14]
8526         mov     w25, 0
8527         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNumSaveInFlash]
8528         strb    w1, [x0]
8529         b       .L1145
8530 .L1153:
8531         mov     w0, w25
8532         ldp     x19, x20, [sp,16]
8533         ldp     x21, x22, [sp,32]
8534         ldp     x23, x24, [sp,48]
8535         ldp     x25, x26, [sp,64]
8536         ldp     x27, x28, [sp,80]
8537         ldp     x29, x30, [sp], 144
8538         ret
8539         .size   FlashLoadPhyInfo, .-FlashLoadPhyInfo
8540         .align  2
8541         .global ToshibaReadRetrial
8542         .type   ToshibaReadRetrial, %function
8543 ToshibaReadRetrial:
8544         stp     x29, x30, [sp, -96]!
8545         add     x29, sp, 0
8546         stp     x23, x24, [sp,48]
8547         uxtb    w23, w0
8548         mov     w0, w23
8549         stp     x19, x20, [sp,16]
8550         stp     x25, x26, [sp,64]
8551         stp     x21, x22, [sp,32]
8552         stp     x27, x28, [sp,80]
8553         mov     x26, x2
8554         mov     w27, w1
8555         mov     x25, x3
8556         bl      NandcWaitFlashReady
8557         mov     w0, w23
8558         adrp    x20, :got:g_retryMode
8559         mov     w22, 0
8560         bl      NandcGetChipIf
8561         mov     x19, x0
8562         ldr     x0, [x20, #:got_lo12:g_retryMode]
8563         ldrb    w0, [x0]
8564         sub     w0, w0, #67
8565         uxtb    w0, w0
8566         cmp     w0, 1
8567         bls     .L1158
8568         adrp    x0, :got:gFlashToggleModeEn
8569         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
8570         ldrb    w0, [x0]
8571         cbz     w0, .L1159
8572         mov     w0, w22
8573         mov     w22, 1
8574         bl      NandcSetDdrMode
8575 .L1159:
8576         mov     w0, 92
8577         str     w0, [x19,8]
8578         mov     w0, 197
8579         str     w0, [x19,8]
8580 .L1158:
8581         mov     w21, 1
8582         mov     w24, -1
8583 .L1160:
8584         adrp    x0, :got:g_maxRetryCount
8585         ldr     x0, [x0, #:got_lo12:g_maxRetryCount]
8586         ldrb    w0, [x0]
8587         add     w0, w0, 1
8588         cmp     w21, w0
8589         bcs     .L1185
8590         ldr     x0, [x20, #:got_lo12:g_retryMode]
8591         mov     w1, w21
8592         ldrb    w0, [x0]
8593         sub     w0, w0, #67
8594         uxtb    w0, w0
8595         cmp     w0, 1
8596         mov     x0, x19
8597         bhi     .L1161
8598         bl      SandiskSetRRPara
8599         b       .L1162
8600 .L1161:
8601         bl      ToshibaSetRRPara
8602 .L1162:
8603         ldr     x0, [x20, #:got_lo12:g_retryMode]
8604         ldrb    w0, [x0]
8605         cmp     w0, 34
8606         bne     .L1163
8607         adrp    x0, :got:g_maxRetryCount
8608         ldr     x0, [x0, #:got_lo12:g_maxRetryCount]
8609         ldrb    w0, [x0]
8610         sub     w0, w0, #3
8611         cmp     w21, w0
8612         bne     .L1163
8613         mov     w0, 179
8614         str     w0, [x19,8]
8615 .L1163:
8616         mov     w0, 38
8617         str     w0, [x19,8]
8618         mov     w0, 93
8619         str     w0, [x19,8]
8620         cbz     w22, .L1164
8621         mov     w0, 4
8622         bl      NandcSetDdrMode
8623         mov     w0, w23
8624         mov     w1, w27
8625         mov     x2, x26
8626         mov     x3, x25
8627         bl      FlashReadRawPage
8628         mov     w28, w0
8629         mov     w0, 0
8630         bl      NandcSetDdrMode
8631         b       .L1165
8632 .L1164:
8633         mov     w0, w23
8634         mov     w1, w27
8635         mov     x2, x26
8636         mov     x3, x25
8637         bl      FlashReadRawPage
8638         mov     w28, w0
8639 .L1165:
8640         cmn     w28, #1
8641         beq     .L1166
8642         adrp    x0, :got:gNandFlashEccBits
8643         cmn     w24, #1
8644         csel    w24, w24, w28, ne
8645         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8646         ldrb    w0, [x0]
8647         add     w0, w0, w0, lsl 1
8648         cmp     w28, w0, lsr 2
8649         bcc     .L1168
8650         mov     x25, 0
8651         mov     x26, x25
8652 .L1166:
8653         add     w21, w21, 1
8654         b       .L1160
8655 .L1185:
8656         mov     w28, w24
8657 .L1168:
8658         ldr     x20, [x20, #:got_lo12:g_retryMode]
8659         mov     w1, 0
8660         ldrb    w0, [x20]
8661         sub     w0, w0, #67
8662         uxtb    w0, w0
8663         cmp     w0, 1
8664         mov     x0, x19
8665         bhi     .L1170
8666         bl      SandiskSetRRPara
8667         b       .L1171
8668 .L1170:
8669         bl      ToshibaSetRRPara
8670 .L1171:
8671         mov     w0, 255
8672         str     w0, [x19,8]
8673         adrp    x0, :got:gNandFlashEccBits
8674         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8675         ldrb    w0, [x0]
8676         add     w0, w0, w0, lsl 1
8677         cmp     w28, w0, lsr 2
8678         bcc     .L1172
8679         cmn     w28, #1
8680         mov     w0, 256
8681         csel    w28, w28, w0, eq
8682 .L1172:
8683         mov     w0, w23
8684         bl      NandcWaitFlashReady
8685         cbz     w22, .L1173
8686         mov     w0, 4
8687         bl      NandcSetDdrMode
8688 .L1173:
8689         mov     w0, w28
8690         ldp     x19, x20, [sp,16]
8691         ldp     x21, x22, [sp,32]
8692         ldp     x23, x24, [sp,48]
8693         ldp     x25, x26, [sp,64]
8694         ldp     x27, x28, [sp,80]
8695         ldp     x29, x30, [sp], 96
8696         ret
8697         .size   ToshibaReadRetrial, .-ToshibaReadRetrial
8698         .align  2
8699         .global SamsungReadRetrial
8700         .type   SamsungReadRetrial, %function
8701 SamsungReadRetrial:
8702         stp     x29, x30, [sp, -96]!
8703         add     x29, sp, 0
8704         stp     x21, x22, [sp,32]
8705         uxtb    w21, w0
8706         str     x27, [sp,80]
8707         mov     w0, w21
8708         mov     x22, x3
8709         stp     x19, x20, [sp,16]
8710         stp     x23, x24, [sp,48]
8711         stp     x25, x26, [sp,64]
8712         mov     w23, w1
8713         mov     x25, x2
8714         bl      NandcWaitFlashReady
8715         mov     w20, 1
8716         mov     w0, w21
8717         mov     w19, -1
8718         adrp    x26, :got:g_maxRetryCount
8719         adrp    x27, :got:gNandFlashEccBits
8720         bl      NandcGetChipIf
8721         mov     x24, x0
8722 .L1187:
8723         ldr     x0, [x26, #:got_lo12:g_maxRetryCount]
8724         ldrb    w4, [x0]
8725         add     w4, w4, 1
8726         cmp     w20, w4
8727         bcs     .L1190
8728         mov     x0, x24
8729         mov     w1, w20
8730         bl      SamsungSetRRPara
8731         mov     w0, w21
8732         mov     w1, w23
8733         mov     x2, x25
8734         mov     x3, x22
8735         bl      FlashReadRawPage
8736         cmn     w0, #1
8737         mov     w4, w0
8738         beq     .L1188
8739         cmn     w19, #1
8740         csel    w19, w19, w0, ne
8741         ldr     x0, [x27, #:got_lo12:gNandFlashEccBits]
8742         ldrb    w2, [x0]
8743         add     w2, w2, w2, lsl 1
8744         cmp     w4, w2, lsr 2
8745         bcc     .L1193
8746         mov     x22, 0
8747         mov     x25, x22
8748 .L1188:
8749         add     w20, w20, 1
8750         b       .L1187
8751 .L1193:
8752         mov     w19, w4
8753 .L1190:
8754         mov     x0, x24
8755         mov     w1, 0
8756         bl      SamsungSetRRPara
8757         adrp    x0, :got:gNandFlashEccBits
8758         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8759         ldrb    w0, [x0]
8760         add     w0, w0, w0, lsl 1
8761         cmp     w19, w0, lsr 2
8762         bcc     .L1192
8763         cmn     w19, #1
8764         mov     w0, 256
8765         csel    w19, w19, w0, eq
8766 .L1192:
8767         mov     w0, w19
8768         ldr     x27, [sp,80]
8769         ldp     x19, x20, [sp,16]
8770         ldp     x21, x22, [sp,32]
8771         ldp     x23, x24, [sp,48]
8772         ldp     x25, x26, [sp,64]
8773         ldp     x29, x30, [sp], 96
8774         ret
8775         .size   SamsungReadRetrial, .-SamsungReadRetrial
8776         .align  2
8777         .global MicronReadRetrial
8778         .type   MicronReadRetrial, %function
8779 MicronReadRetrial:
8780         stp     x29, x30, [sp, -96]!
8781         add     x29, sp, 0
8782         stp     x21, x22, [sp,32]
8783         uxtb    w22, w0
8784         mov     w21, 0
8785         mov     w0, w22
8786         stp     x19, x20, [sp,16]
8787         stp     x23, x24, [sp,48]
8788         stp     x25, x26, [sp,64]
8789         stp     x27, x28, [sp,80]
8790         mov     w25, w1
8791         mov     x24, x2
8792         mov     x23, x3
8793         bl      NandcWaitFlashReady
8794         mov     w0, w22
8795         mov     w20, -1
8796         mov     w26, 239
8797         mov     w27, 137
8798         bl      NandcGetChipIf
8799         adrp    x28, :got:gNandFlashEccBits
8800         mov     x19, x0
8801 .L1203:
8802         str     w26, [x19,8]
8803         mov     w0, 200
8804         str     w27, [x19,4]
8805         add     w21, w21, 1
8806         bl      NandcDelayns
8807         str     w21, [x19]
8808         str     wzr, [x19]
8809         mov     w0, w22
8810         str     wzr, [x19]
8811         mov     w1, w25
8812         str     wzr, [x19]
8813         mov     x2, x24
8814         mov     x3, x23
8815         bl      FlashReadRawPage
8816         cmn     w0, #1
8817         beq     .L1200
8818         ldr     x1, [x28, #:got_lo12:gNandFlashEccBits]
8819         cmn     w20, #1
8820         csel    w20, w20, w0, ne
8821         ldrb    w2, [x1]
8822         add     w2, w2, w2, lsl 1
8823         cmp     w0, w2, lsr 2
8824         bcc     .L1205
8825         mov     x23, 0
8826         mov     x24, x23
8827 .L1200:
8828         cmp     w21, 7
8829         bne     .L1203
8830         b       .L1202
8831 .L1205:
8832         mov     w20, w0
8833 .L1202:
8834         mov     w0, 239
8835         str     w0, [x19,8]
8836         mov     w0, 137
8837         str     w0, [x19,4]
8838         mov     w0, 200
8839         bl      NandcDelayns
8840         str     wzr, [x19]
8841         str     wzr, [x19]
8842         adrp    x0, :got:gNandFlashEccBits
8843         str     wzr, [x19]
8844         str     wzr, [x19]
8845         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8846         ldrb    w0, [x0]
8847         add     w0, w0, w0, lsl 1
8848         cmp     w20, w0, lsr 2
8849         bcc     .L1204
8850         cmn     w20, #1
8851         mov     w0, 256
8852         csel    w20, w20, w0, eq
8853 .L1204:
8854         mov     w0, w20
8855         ldp     x19, x20, [sp,16]
8856         ldp     x21, x22, [sp,32]
8857         ldp     x23, x24, [sp,48]
8858         ldp     x25, x26, [sp,64]
8859         ldp     x27, x28, [sp,80]
8860         ldp     x29, x30, [sp], 96
8861         ret
8862         .size   MicronReadRetrial, .-MicronReadRetrial
8863         .align  2
8864         .global HynixReadRetrial
8865         .type   HynixReadRetrial, %function
8866 HynixReadRetrial:
8867         stp     x29, x30, [sp, -112]!
8868         add     x29, sp, 0
8869         stp     x21, x22, [sp,32]
8870         adrp    x21, :got:gReadRetryInfo
8871         uxtb    x22, w0
8872         stp     x23, x24, [sp,48]
8873         stp     x27, x28, [sp,80]
8874         ldr     x0, [x21, #:got_lo12:gReadRetryInfo]
8875         mov     w27, w1
8876         stp     x19, x20, [sp,16]
8877         stp     x25, x26, [sp,64]
8878         add     x1, x0, x22
8879         mov     x26, x2
8880         ldrb    w25, [x0,2]
8881         mov     w0, w22
8882         mov     x24, x3
8883         mov     x23, x22
8884         ldrb    w20, [x1,12]
8885         bl      NandcWaitFlashReady
8886         mov     w28, 0
8887         mov     w19, -1
8888         adrp    x4, :got:gNandFlashEccBits
8889 .L1213:
8890         cmp     w28, w25
8891         bcs     .L1217
8892         add     w20, w20, 1
8893         ldr     x2, [x21, #:got_lo12:gReadRetryInfo]
8894         mov     w0, w23
8895         str     x4, [x29,104]
8896         uxtb    w20, w20
8897         add     x2, x2, 4
8898         cmp     w20, w25
8899         ldrb    w1, [x2,-3]
8900         csel    w20, w20, wzr, cc
8901         mov     w3, w20
8902         bl      HynixSetRRPara
8903         mov     w0, w23
8904         mov     w1, w27
8905         mov     x2, x26
8906         mov     x3, x24
8907         bl      FlashReadRawPage
8908         cmn     w0, #1
8909         ldr     x4, [x29,104]
8910         beq     .L1215
8911         ldr     x1, [x4, #:got_lo12:gNandFlashEccBits]
8912         cmn     w19, #1
8913         csel    w19, w19, w0, ne
8914         ldrb    w1, [x1]
8915         add     w1, w1, w1, lsl 1
8916         cmp     w0, w1, lsr 2
8917         bcc     .L1220
8918         mov     x24, 0
8919         mov     x26, x24
8920 .L1215:
8921         add     w28, w28, 1
8922         b       .L1213
8923 .L1220:
8924         mov     w19, w0
8925 .L1217:
8926         ldr     x21, [x21, #:got_lo12:gReadRetryInfo]
8927         adrp    x0, :got:gNandFlashEccBits
8928         add     x21, x21, x22
8929         strb    w20, [x21,12]
8930         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8931         ldrb    w0, [x0]
8932         add     w0, w0, w0, lsl 1
8933         cmp     w19, w0, lsr 2
8934         bcc     .L1219
8935         cmn     w19, #1
8936         mov     w0, 256
8937         csel    w19, w19, w0, eq
8938 .L1219:
8939         mov     w0, w19
8940         ldp     x19, x20, [sp,16]
8941         ldp     x21, x22, [sp,32]
8942         ldp     x23, x24, [sp,48]
8943         ldp     x25, x26, [sp,64]
8944         ldp     x27, x28, [sp,80]
8945         ldp     x29, x30, [sp], 112
8946         ret
8947         .size   HynixReadRetrial, .-HynixReadRetrial
8948         .align  2
8949         .global FlashProgPage
8950         .type   FlashProgPage, %function
8951 FlashProgPage:
8952         stp     x29, x30, [sp, -64]!
8953         mov     x4, x3
8954         add     x29, sp, 0
8955         stp     x19, x20, [sp,16]
8956         uxtb    w19, w0
8957         adrp    x0, :got:gNandParaInfo
8958         stp     x21, x22, [sp,32]
8959         mov     w20, w1
8960         mov     x22, x2
8961         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
8962         ldrb    w21, [x0,9]
8963         cbnz    w19, .L1227
8964         adrp    x0, :got:gNandIDBResBlkNum
8965         adrp    x1, :got:gBlockPageAlignSize
8966         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
8967         ldr     x1, [x1, #:got_lo12:gBlockPageAlignSize]
8968         ldrb    w0, [x0]
8969         ldr     w1, [x1]
8970         mul     w0, w0, w1
8971         sub     w1, w21, #2
8972         cmp     w20, w0
8973         csel    w21, w1, w21, cc
8974 .L1227:
8975         mov     w0, w19
8976         str     x4, [x29,56]
8977         bl      NandcWaitFlashReady
8978         mov     w0, w19
8979         bl      NandcFlashCs
8980         mov     w0, w19
8981         mov     w1, w20
8982         bl      FlashProgFirstCmd
8983         ldr     x4, [x29,56]
8984         mov     w2, w21
8985         mov     x3, x22
8986         mov     w0, w19
8987         mov     w1, 1
8988         bl      NandcXferData
8989         mov     w1, w20
8990         mov     w0, w19
8991         bl      FlashProgSecondCmd
8992         mov     w0, w19
8993         bl      NandcWaitFlashReady
8994         mov     w1, w20
8995         mov     w0, w19
8996         bl      FlashReadStatus
8997         mov     w20, w0
8998         mov     w0, w19
8999         bl      NandcFlashDeCs
9000         and     w0, w20, 1
9001         ldp     x19, x20, [sp,16]
9002         ldp     x21, x22, [sp,32]
9003         ldp     x29, x30, [sp], 64
9004         ret
9005         .size   FlashProgPage, .-FlashProgPage
9006         .align  2
9007         .global FlashSavePhyInfo
9008         .type   FlashSavePhyInfo, %function
9009 FlashSavePhyInfo:
9010         stp     x29, x30, [sp, -112]!
9011         add     x29, sp, 0
9012         stp     x23, x24, [sp,48]
9013         adrp    x23, :got:gFlashPageBuffer0
9014         adrp    x24, :got:gFlashPageBuffer1
9015         stp     x21, x22, [sp,32]
9016         adrp    x22, :got:gpFlashSaveInfo
9017         stp     x19, x20, [sp,16]
9018         ldr     x20, [x23, #:got_lo12:gFlashPageBuffer0]
9019         ldr     x19, [x22, #:got_lo12:gpFlashSaveInfo]
9020         stp     x25, x26, [sp,64]
9021         stp     x27, x28, [sp,80]
9022         adrp    x25, :got:gBlockPageAlignSize
9023         adrp    x26, :got:gNandFlashIdbBlockAddr
9024         ldr     x0, [x20]
9025         adrp    x27, :got:gNandFlashInfoBlockAddr
9026         str     x0, [x19]
9027         adrp    x0, :got:gNandFlashIDBEccBits
9028         ldr     x0, [x0, #:got_lo12:gNandFlashIDBEccBits]
9029         ldrb    w0, [x0]
9030         bl      FlashBchSel
9031         ldr     x0, [x20]
9032         mov     w1, 0
9033         mov     w2, 2048
9034         bl      ftl_memset
9035         ldr     x1, [x19]
9036         mov     w0, 20036
9037         movk    w0, 0x4e41, lsl 16
9038         mov     w2, 64
9039         str     w0, [x1]
9040         adrp    x1, :got:gNandMaxDie
9041         ldr     x0, [x19]
9042         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
9043         add     x0, x0, 16
9044         ldrb    w1, [x1]
9045         strh    w1, [x0,-4]
9046         adrp    x1, :got:gNandIDBResBlkNum
9047         ldr     x1, [x1, #:got_lo12:gNandIDBResBlkNum]
9048         ldrb    w1, [x1]
9049         strh    w1, [x0,-2]
9050         adrp    x1, :got:gFlashToggleModeEn
9051         ldr     x1, [x1, #:got_lo12:gFlashToggleModeEn]
9052         ldrb    w1, [x1]
9053         str     w1, [x0,1060]
9054         adrp    x1, :got:IDByte
9055         ldr     x1, [x1, #:got_lo12:IDByte]
9056         bl      ftl_memcpy
9057         adrp    x1, :got:DieCsIndex
9058         ldr     x0, [x19]
9059         mov     w2, 16
9060         add     x0, x0, 80
9061         ldr     x1, [x1, #:got_lo12:DieCsIndex]
9062         bl      ftl_memcpy
9063         adrp    x1, :got:DieAddrs
9064         ldr     x0, [x19]
9065         mov     w2, 64
9066         add     x0, x0, 96
9067         ldr     x1, [x1, #:got_lo12:DieAddrs]
9068         bl      ftl_memcpy
9069         adrp    x1, :got:gNandParaInfo
9070         ldr     x0, [x19]
9071         mov     w2, 32
9072         add     x0, x0, 160
9073         ldr     x1, [x1, #:got_lo12:gNandParaInfo]
9074         bl      ftl_memcpy
9075         adrp    x1, :got:gNandOptPara
9076         ldr     x0, [x19]
9077         mov     w2, 32
9078         add     x0, x0, 192
9079         ldr     x1, [x1, #:got_lo12:gNandOptPara]
9080         bl      ftl_memcpy
9081         adrp    x1, :got:gReadRetryInfo
9082         ldr     x0, [x19]
9083         mov     w2, 852
9084         add     x0, x0, 224
9085         ldr     x1, [x1, #:got_lo12:gReadRetryInfo]
9086         bl      ftl_memcpy
9087         ldr     x20, [x19]
9088         mov     w1, 2036
9089         add     x0, x20, 12
9090         bl      JSHash
9091         str     w0, [x20,8]
9092         ldr     x0, [x19]
9093         mov     w1, 1592
9094         str     w1, [x0,4]
9095         ldr     x0, [x24, #:got_lo12:gFlashPageBuffer1]
9096         ldr     x0, [x0]
9097         str     x0, [x19]
9098         mov     w19, 0
9099         mov     w20, w19
9100 .L1231:
9101         ldr     x21, [x25, #:got_lo12:gBlockPageAlignSize]
9102         mov     w2, 0
9103         mov     w0, 0
9104         ldr     w1, [x21]
9105         mul     w1, w20, w1
9106         bl      FlashEraseBlock
9107         ldr     x28, [x23, #:got_lo12:gFlashPageBuffer0]
9108         ldr     w1, [x21]
9109         mov     x3, 0
9110         mov     w0, 0
9111         ldr     x2, [x28]
9112         mul     w1, w20, w1
9113         bl      FlashProgPage
9114         ldr     w1, [x21]
9115         mov     x3, 0
9116         ldr     x2, [x28]
9117         mov     w0, 0
9118         add     w28, w20, 1
9119         mul     w1, w20, w1
9120         add     w1, w1, 1
9121         bl      FlashProgPage
9122         ldr     w1, [x21]
9123         mov     w0, 0
9124         ldr     x2, [x24, #:got_lo12:gFlashPageBuffer1]
9125         mov     x3, 0
9126         mul     w1, w20, w1
9127         ldr     x2, [x2]
9128         bl      FlashReadRawPage
9129         cmn     w0, #1
9130         beq     .L1232
9131         ldr     x0, [x22, #:got_lo12:gpFlashSaveInfo]
9132         mov     w1, 20036
9133         movk    w1, 0x4e41, lsl 16
9134         ldr     x0, [x0]
9135         ldr     w2, [x0]
9136         cmp     w2, w1
9137         bne     .L1232
9138         ldr     w2, [x0,8]
9139         mov     w1, 2036
9140         add     x0, x0, 12
9141         str     x2, [x29,104]
9142         bl      JSHash
9143         ldr     x2, [x29,104]
9144         cmp     w2, w0
9145         bne     .L1232
9146         ldr     x0, [x26, #:got_lo12:gNandFlashIdbBlockAddr]
9147         str     w28, [x0]
9148         ldr     w0, [x21]
9149         ldr     x1, [x27, #:got_lo12:gNandFlashInfoBlockAddr]
9150         mul     w20, w20, w0
9151         str     w20, [x1]
9152         cbnz    w19, .L1233
9153         mov     w19, 1
9154 .L1232:
9155         cmp     w28, 4
9156         mov     w20, w28
9157         bne     .L1231
9158         eor     w0, w19, 1
9159         neg     w0, w0
9160         b       .L1230
9161 .L1233:
9162         mov     w0, 0
9163 .L1230:
9164         ldp     x19, x20, [sp,16]
9165         ldp     x21, x22, [sp,32]
9166         ldp     x23, x24, [sp,48]
9167         ldp     x25, x26, [sp,64]
9168         ldp     x27, x28, [sp,80]
9169         ldp     x29, x30, [sp], 112
9170         ret
9171         .size   FlashSavePhyInfo, .-FlashSavePhyInfo
9172         .align  2
9173         .global FlashReadIdbDataRaw
9174         .type   FlashReadIdbDataRaw, %function
9175 FlashReadIdbDataRaw:
9176         stp     x29, x30, [sp, -128]!
9177         mov     w1, 40
9178         mov     w2, 2048
9179         add     x29, sp, 0
9180         stp     x23, x24, [sp,48]
9181         stp     x25, x26, [sp,64]
9182         strb    w1, [x29,120]
9183         mov     w1, 60
9184         strb    w1, [x29,121]
9185         mov     w1, 24
9186         strb    w1, [x29,122]
9187         mov     w1, 16
9188         strb    w1, [x29,123]
9189         adrp    x1, :got:gNandFlashEccBits
9190         stp     x19, x20, [sp,16]
9191         stp     x21, x22, [sp,32]
9192         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
9193         adrp    x21, .LC88
9194         stp     x27, x28, [sp,80]
9195         mov     w19, 2
9196         mov     w28, -1
9197         ldrb    w22, [x1]
9198         adrp    x24, :got:gNandIDBResBlkNum
9199         mov     w1, 0
9200         adrp    x25, :got:gBlockPageAlignSize
9201         adrp    x26, :got:gFlashPageBuffer0
9202         add     x21, x21, :lo12:.LC88
9203         mov     x23, x0
9204         bl      ftl_memset
9205 .L1239:
9206         ldr     x0, [x24, #:got_lo12:gNandIDBResBlkNum]
9207         ldrb    w0, [x0]
9208         cmp     w19, w0
9209         bcs     .L1243
9210         mov     x27, 0
9211 .L1241:
9212         add     x0, x29, 120
9213         ldrb    w4, [x27,x0]
9214         str     x4, [x29,104]
9215         mov     w0, w4
9216         bl      FlashBchSel
9217         ldr     x20, [x26, #:got_lo12:gFlashPageBuffer0]
9218         ldr     x0, [x25, #:got_lo12:gBlockPageAlignSize]
9219         mov     x3, 0
9220         ldr     x2, [x20]
9221         ldr     w1, [x0]
9222         mov     w0, 0
9223         mul     w1, w19, w1
9224         bl      FlashReadRawPage
9225         cmn     w0, #1
9226         ldr     x4, [x29,104]
9227         bne     .L1240
9228         add     x27, x27, 1
9229         cmp     x27, 4
9230         bne     .L1241
9231         b       .L1242
9232 .L1240:
9233         ldr     x0, [x20]
9234         ldr     w1, [x0]
9235         mov     w0, 35899
9236         movk    w0, 0xfcdc, lsl 16
9237         cmp     w1, w0
9238         bne     .L1242
9239         mov     w1, w4
9240         mov     x0, x21
9241         bl      printk
9242         ldr     x1, [x20]
9243         mov     x0, x23
9244         mov     w2, 2048
9245         bl      ftl_memcpy
9246         adrp    x0, :got:gNandIDBResBlkNum
9247         ldr     x1, [x20]
9248         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
9249         ldr     w1, [x1,512]
9250         strb    w1, [x0]
9251         adrp    x1, :got:gNandFlashIdbBlockAddr
9252         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
9253         ldr     w0, [x1]
9254         cmp     w0, w19
9255         bls     .L1245
9256         mov     w28, 0
9257         str     w19, [x1]
9258         bl      FlashSavePhyInfo
9259 .L1242:
9260         add     w19, w19, 1
9261         b       .L1239
9262 .L1245:
9263         mov     w28, 0
9264 .L1243:
9265         mov     w0, w22
9266         bl      FlashBchSel
9267         mov     w0, w28
9268         ldp     x19, x20, [sp,16]
9269         ldp     x21, x22, [sp,32]
9270         ldp     x23, x24, [sp,48]
9271         ldp     x25, x26, [sp,64]
9272         ldp     x27, x28, [sp,80]
9273         ldp     x29, x30, [sp], 128
9274         ret
9275         .size   FlashReadIdbDataRaw, .-FlashReadIdbDataRaw
9276         .align  2
9277         .global FlashInit
9278         .type   FlashInit, %function
9279 FlashInit:
9280         stp     x29, x30, [sp, -96]!
9281         add     x29, sp, 0
9282         stp     x19, x20, [sp,16]
9283         mov     x19, x0
9284         mov     w0, 32768
9285         stp     x21, x22, [sp,32]
9286         stp     x23, x24, [sp,48]
9287         stp     x25, x26, [sp,64]
9288         stp     x27, x28, [sp,80]
9289         bl      ftl_malloc
9290         adrp    x20, :got:gNandIDBResBlkNum
9291         adrp    x1, :got:gFlashPageBuffer0
9292         adrp    x24, :got:gNandIDBResBlkNumSaveInFlash
9293         adrp    x23, :got:gFlashToggleModeEn
9294         adrp    x22, :got:gNandFlashIDBEccBits
9295         adrp    x21, :got:IDByte
9296         adrp    x26, .LC89
9297         ldr     x1, [x1, #:got_lo12:gFlashPageBuffer0]
9298         mov     w27, 0
9299         add     x26, x26, :lo12:.LC89
9300         str     x0, [x1]
9301         mov     w0, 32768
9302         bl      ftl_malloc
9303         adrp    x1, :got:gFlashPageBuffer1
9304         ldr     x1, [x1, #:got_lo12:gFlashPageBuffer1]
9305         str     x0, [x1]
9306         mov     w0, 4096
9307         bl      ftl_malloc
9308         adrp    x1, :got:gFlashSpareBuffer
9309         ldr     x1, [x1, #:got_lo12:gFlashSpareBuffer]
9310         str     x0, [x1]
9311         mov     w0, 32768
9312         bl      ftl_malloc
9313         adrp    x1, :got:gFlashProgCheckBuffer
9314         ldr     x1, [x1, #:got_lo12:gFlashProgCheckBuffer]
9315         str     x0, [x1]
9316         mov     w0, 4096
9317         bl      ftl_malloc
9318         adrp    x1, :got:gFlashProgCheckSpareBuffer
9319         ldr     x1, [x1, #:got_lo12:gFlashProgCheckSpareBuffer]
9320         str     x0, [x1]
9321         mov     w1, 50
9322         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9323         strb    w1, [x0]
9324         ldr     x0, [x24, #:got_lo12:gNandIDBResBlkNumSaveInFlash]
9325         strb    w1, [x0]
9326         adrp    x1, :got:gNandFlashIdbBlockAddr
9327         mov     w0, 128
9328         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
9329         str     wzr, [x1]
9330         adrp    x1, :got:gBlockPageAlignSize
9331         ldr     x1, [x1, #:got_lo12:gBlockPageAlignSize]
9332         str     w0, [x1]
9333         adrp    x1, :got:FlashDdrTunningReadCount
9334         ldr     x0, [x23, #:got_lo12:gFlashToggleModeEn]
9335         strb    wzr, [x0]
9336         ldr     x1, [x1, #:got_lo12:FlashDdrTunningReadCount]
9337         str     wzr, [x1]
9338         adrp    x1, :got:g_slc2KBNand
9339         ldr     x1, [x1, #:got_lo12:g_slc2KBNand]
9340         strb    wzr, [x1]
9341         mov     w1, 60
9342         ldr     x0, [x22, #:got_lo12:gNandFlashIDBEccBits]
9343         strb    w1, [x0]
9344         mov     x0, x19
9345         bl      NandcInit
9346         ldr     x19, [x21, #:got_lo12:IDByte]
9347 .L1253:
9348         uxtb    w28, w27
9349         mov     w0, w28
9350         bl      FlashReset
9351         mov     w0, w28
9352         bl      NandcGetChipIf
9353         mov     x25, x0
9354         mov     w0, w28
9355         bl      NandcFlashCs
9356         mov     w0, 144
9357         str     w0, [x25,8]
9358         str     wzr, [x25,4]
9359         mov     w0, 200
9360         bl      NandcDelayns
9361         ldr     w0, [x25]
9362         strb    w0, [x19]
9363         ldr     w0, [x25]
9364         strb    w0, [x19,1]
9365         ldr     w0, [x25]
9366         strb    w0, [x19,2]
9367         ldr     w0, [x25]
9368         strb    w0, [x19,3]
9369         ldr     w0, [x25]
9370         strb    w0, [x19,4]
9371         ldr     w0, [x25]
9372         strb    w0, [x19,5]
9373         ldr     w0, [x25]
9374         strb    w0, [x19,6]
9375         ldr     w0, [x25]
9376         strb    w0, [x19,7]
9377         mov     w0, w28
9378         bl      NandcFlashDeCs
9379         ldrb    w2, [x19]
9380         sub     w0, w2, #1
9381         uxtb    w0, w0
9382         cmp     w0, 253
9383         bhi     .L1250
9384         ldrb    w3, [x19,1]
9385         mov     x0, x26
9386         ldrb    w4, [x19,2]
9387         add     w1, w27, 1
9388         ldrb    w5, [x19,3]
9389         ldrb    w6, [x19,4]
9390         ldrb    w7, [x19,5]
9391         bl      printk
9392 .L1250:
9393         cbnz    w27, .L1251
9394         ldr     x0, [x21, #:got_lo12:IDByte]
9395         ldrb    w1, [x0]
9396         sub     w1, w1, #1
9397         uxtb    w1, w1
9398         cmp     w1, 253
9399         bhi     .L1287
9400         bl      FlashCs123Init
9401 .L1251:
9402         add     w27, w27, 1
9403         add     x19, x19, 8
9404         cmp     w27, 8
9405         bne     .L1253
9406         ldr     x0, [x21, #:got_lo12:IDByte]
9407         ldrb    w0, [x0]
9408         cmp     w0, 173
9409         beq     .L1254
9410         adrp    x0, :got:gBootDdrMode
9411         ldr     x0, [x0, #:got_lo12:gBootDdrMode]
9412         ldr     w0, [x0]
9413         bl      NandcSetDdrMode
9414 .L1254:
9415         adrp    x25, :got:gReadRetryInfo
9416         mov     w1, 0
9417         mov     w2, 852
9418         adrp    x19, :got:gpNandParaInfo
9419         adrp    x26, :got:gNandRandomizer
9420         ldr     x0, [x25, #:got_lo12:gReadRetryInfo]
9421         bl      ftl_memset
9422         ldr     x27, [x19, #:got_lo12:gpNandParaInfo]
9423         adrp    x0, :got:gNandParaInfo
9424         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
9425         str     x0, [x27]
9426         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
9427         strb    wzr, [x0]
9428         bl      FlashLoadPhyInfoInRam
9429         cbnz    w0, .L1256
9430         ldr     x0, [x27]
9431         adrp    x27, :got:gFlashInterfaceMode
9432         ldr     x27, [x27, #:got_lo12:gFlashInterfaceMode]
9433         ldrb    w1, [x0,17]
9434         and     w0, w1, 7
9435         strb    w0, [x27]
9436         tbnz    x1, 0, .L1256
9437         ldr     x1, [x23, #:got_lo12:gFlashToggleModeEn]
9438         mov     w2, 1
9439         strb    w2, [x1]
9440         bl      FlashSetInterfaceMode
9441         ldrb    w0, [x27]
9442         bl      NandcSetMode
9443 .L1256:
9444         bl      FlashLoadPhyInfo
9445         cbz     w0, .L1286
9446         adrp    x0, :got:gBootDdrMode
9447         ldr     x0, [x0, #:got_lo12:gBootDdrMode]
9448         ldr     w0, [x0]
9449         cbz     w0, .L1259
9450         mov     w0, 1
9451         bl      FlashSetInterfaceMode
9452         mov     w0, 1
9453         b       .L1303
9454 .L1259:
9455         adrp    x27, :got:gFlashInterfaceMode
9456         ldr     x27, [x27, #:got_lo12:gFlashInterfaceMode]
9457         ldrb    w0, [x27]
9458         bl      FlashSetInterfaceMode
9459         ldrb    w0, [x27]
9460 .L1303:
9461         bl      NandcSetMode
9462         bl      FlashLoadPhyInfo
9463         cbz     w0, .L1286
9464         mov     w0, 1
9465         bl      FlashSetInterfaceMode
9466         mov     w0, 1
9467         bl      NandcSetMode
9468         ldr     x27, [x19, #:got_lo12:gpNandParaInfo]
9469         adrp    x0, .LC90
9470         add     x0, x0, :lo12:.LC90
9471         ldr     x1, [x27]
9472         ldrh    w1, [x1,14]
9473         bl      printk
9474         bl      FlashLoadPhyInfoInRam
9475         cmn     w0, #1
9476         beq     .L1252
9477         bl      FlashDieInfoInit
9478         ldr     x0, [x27]
9479         ldrb    w0, [x0,19]
9480         bl      FlashGetReadRetryDefault
9481         adrp    x1, :got:gTotleBlock
9482         ldr     x0, [x27]
9483         ldr     x1, [x1, #:got_lo12:gTotleBlock]
9484         ldrb    w2, [x0,9]
9485         ldrh    w1, [x1]
9486         add     w1, w1, 4095
9487         cmp     w2, w1, lsr 12
9488         blt     .L1261
9489         ldrh    w1, [x0,14]
9490         add     w1, w1, 255
9491         cmp     w2, w1, lsr 8
9492         bge     .L1262
9493 .L1261:
9494         ldrh    w1, [x0,14]
9495         and     w1, w1, -256
9496         strh    w1, [x0,14]
9497 .L1262:
9498         adrp    x0, :got:gFlashInterfaceMode
9499         ldr     x0, [x0, #:got_lo12:gFlashInterfaceMode]
9500         ldrb    w0, [x0]
9501         tst     w0, 6
9502         beq     .L1264
9503         adrp    x0, :got:gNandcVer
9504         mov     x27, x0
9505         ldr     x1, [x0, #:got_lo12:gNandcVer]
9506         ldr     w1, [x1]
9507         cmp     w1, 7
9508         bhi     .L1265
9509         ldr     x0, [x22, #:got_lo12:gNandFlashIDBEccBits]
9510         mov     w1, 40
9511         strb    w1, [x0]
9512 .L1265:
9513         bl      FlashSavePhyInfo
9514         adrp    x1, :got:gNandFlashInfoBlockAddr
9515         mov     w0, 0
9516         ldr     x1, [x1, #:got_lo12:gNandFlashInfoBlockAddr]
9517         ldr     w1, [x1]
9518         bl      FlashDdrParaScan
9519         ldr     x0, [x23, #:got_lo12:gFlashToggleModeEn]
9520         ldrb    w0, [x0]
9521         cbnz    w0, .L1264
9522         ldr     x0, [x27, #:got_lo12:gNandcVer]
9523         ldr     w0, [x0]
9524         cmp     w0, 7
9525         bhi     .L1264
9526         ldr     x0, [x22, #:got_lo12:gNandFlashIDBEccBits]
9527         mov     w1, 60
9528         strb    w1, [x0]
9529 .L1264:
9530         bl      FlashSavePhyInfo
9531 .L1286:
9532         ldr     x0, [x19, #:got_lo12:gpNandParaInfo]
9533         adrp    x3, :got:gpReadRetrial
9534         ldr     x26, [x26, #:got_lo12:gNandRandomizer]
9535         ldr     x4, [x0]
9536         ldrh    w0, [x4,16]
9537         ubfx    x1, x0, 7, 1
9538         strb    w1, [x26]
9539         adrp    x1, :got:gMultiPageReadEn
9540         ubfx    x2, x0, 3, 1
9541         adrp    x26, :got:gFlashInterfaceMode
9542         ldr     x1, [x1, #:got_lo12:gMultiPageReadEn]
9543         strb    w2, [x1]
9544         adrp    x1, :got:gMultiPageProgEn
9545         ubfx    x2, x0, 4, 1
9546         ldr     x1, [x1, #:got_lo12:gMultiPageProgEn]
9547         strb    w2, [x1]
9548         ubfx    x2, x0, 8, 3
9549         ldr     x1, [x26, #:got_lo12:gFlashInterfaceMode]
9550         strb    w2, [x1]
9551         ldr     x6, [x3, #:got_lo12:gpReadRetrial]
9552         str     xzr, [x6]
9553         tbz     x0, 6, .L1268
9554         adrp    x1, :got:g_retryMode
9555         ldrb    w0, [x4,19]
9556         ldr     x1, [x1, #:got_lo12:g_retryMode]
9557         strb    w0, [x1]
9558         adrp    x1, :got:g_maxRegNum
9559         ldr     x25, [x25, #:got_lo12:gReadRetryInfo]
9560         ldr     x2, [x1, #:got_lo12:g_maxRegNum]
9561         ldrb    w5, [x25,1]
9562         strb    w5, [x2]
9563         adrp    x2, :got:g_maxRetryCount
9564         ldrb    w7, [x25,2]
9565         ldr     x5, [x2, #:got_lo12:g_maxRetryCount]
9566         strb    w7, [x5]
9567         sub     w5, w0, #1
9568         uxtb    w5, w5
9569         cmp     w5, 5
9570         bhi     .L1269
9571         adrp    x1, :got:HynixReadRetrial
9572         sub     w0, w0, #5
9573         uxtb    w0, w0
9574         ldr     x1, [x1, #:got_lo12:HynixReadRetrial]
9575         cmp     w0, 1
9576         str     x1, [x6]
9577         bhi     .L1268
9578         adrp    x0, :got:gNandcDumpWriteEn
9579         mov     w1, 1
9580         ldr     x0, [x0, #:got_lo12:gNandcDumpWriteEn]
9581         str     w1, [x0]
9582         b       .L1268
9583 .L1269:
9584         sub     w5, w0, #17
9585         uxtb    w5, w5
9586         cmp     w5, 1
9587         bhi     .L1271
9588         adrp    x0, :got:MicronReadRetrial
9589         ldr     x0, [x0, #:got_lo12:MicronReadRetrial]
9590         b       .L1305
9591 .L1271:
9592         sub     w5, w0, #65
9593         uxtb    w5, w5
9594         cmp     w5, 1
9595         bls     .L1288
9596         cmp     w0, 33
9597         bne     .L1272
9598 .L1288:
9599         adrp    x0, :got:ToshibaReadRetrial
9600         ldr     x3, [x3, #:got_lo12:gpReadRetrial]
9601         ldr     x0, [x0, #:got_lo12:ToshibaReadRetrial]
9602         str     x0, [x3]
9603         mov     w0, 4
9604         ldr     x1, [x1, #:got_lo12:g_maxRegNum]
9605         strb    w0, [x1]
9606         mov     w0, 7
9607         ldr     x2, [x2, #:got_lo12:g_maxRetryCount]
9608         strb    w0, [x2]
9609         b       .L1268
9610 .L1272:
9611         sub     w5, w0, #67
9612         uxtb    w5, w5
9613         cmp     w5, 1
9614         sub     w5, w0, #34
9615         cset    w7, ls
9616         uxtb    w5, w5
9617         cmp     w5, 1
9618         bls     .L1289
9619         cbz     w7, .L1274
9620 .L1289:
9621         adrp    x5, :got:ToshibaReadRetrial
9622         ldr     x3, [x3, #:got_lo12:gpReadRetrial]
9623         cmp     w0, 35
9624         ldr     x5, [x5, #:got_lo12:ToshibaReadRetrial]
9625         str     x5, [x3]
9626         ldr     x2, [x2, #:got_lo12:g_maxRetryCount]
9627         beq     .L1276
9628         cmp     w0, 68
9629         beq     .L1276
9630         mov     w0, 7
9631         b       .L1304
9632 .L1276:
9633         mov     w0, 17
9634 .L1304:
9635         strb    w0, [x2]
9636         mov     w0, 4
9637         ldr     x1, [x1, #:got_lo12:g_maxRegNum]
9638         cbnz    w7, .L1306
9639         mov     w0, 5
9640 .L1306:
9641         strb    w0, [x1]
9642         b       .L1268
9643 .L1274:
9644         cmp     w0, 49
9645         bne     .L1268
9646         adrp    x0, :got:SamsungReadRetrial
9647         ldr     x0, [x0, #:got_lo12:SamsungReadRetrial]
9648 .L1305:
9649         str     x0, [x6]
9650 .L1268:
9651         ldrh    w2, [x4,10]
9652         ldrb    w1, [x4,12]
9653         ldrb    w0, [x4,18]
9654         sdiv    w1, w2, w1
9655         bl      BuildFlashLsbPageTable
9656         bl      FlashDieInfoInit
9657         ldr     x26, [x26, #:got_lo12:gFlashInterfaceMode]
9658         ldrb    w0, [x26]
9659         tst     w0, 6
9660         beq     .L1280
9661         ldr     x23, [x23, #:got_lo12:gFlashToggleModeEn]
9662         ldrb    w1, [x23]
9663         cbnz    w1, .L1281
9664         tbnz    x0, 0, .L1280
9665 .L1281:
9666         adrp    x1, :got:gNandFlashInfoBlockAddr
9667         mov     w0, 0
9668         ldr     x1, [x1, #:got_lo12:gNandFlashInfoBlockAddr]
9669         ldr     w1, [x1]
9670         bl      FlashDdrParaScan
9671         adrp    x0, :got:gNandcVer
9672         ldr     x0, [x0, #:got_lo12:gNandcVer]
9673         ldr     w0, [x0]
9674         cmp     w0, 7
9675         bhi     .L1280
9676         ldr     x22, [x22, #:got_lo12:gNandFlashIDBEccBits]
9677         mov     w0, 40
9678         strb    w0, [x22]
9679 .L1280:
9680         ldr     x0, [x19, #:got_lo12:gpNandParaInfo]
9681         ldr     x0, [x0]
9682         ldrb    w0, [x0,20]
9683         bl      FlashBchSel
9684         adrp    x0, :got:gNandIDataBuf
9685         ldr     x0, [x0, #:got_lo12:gNandIDataBuf]
9686         bl      FlashReadIdbDataRaw
9687         cbnz    w0, .L1283
9688         ldr     x24, [x24, #:got_lo12:gNandIDBResBlkNumSaveInFlash]
9689         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9690         ldrb    w1, [x24]
9691         ldrb    w2, [x0]
9692         cmp     w2, w1
9693         bls     .L1284
9694         strb    w1, [x0]
9695 .L1284:
9696         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9697         ldrb    w0, [x0]
9698         cmp     w0, 15
9699         bhi     .L1285
9700 .L1283:
9701         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9702         mov     w1, 16
9703         strb    w1, [x0]
9704 .L1285:
9705         mov     w0, 18928
9706         movk    w0, 0x2, lsl 16
9707         bl      FlashTimingCfg
9708         bl      FlashPrintInfo
9709         ldr     x19, [x19, #:got_lo12:gpNandParaInfo]
9710         adrp    x0, :got:gNandPhyInfo
9711         ldr     x1, [x19]
9712         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
9713         ldrb    w2, [x1,12]
9714         strh    w2, [x0,8]
9715         ldrb    w2, [x1,7]
9716         str     w2, [x0,4]
9717         ldr     x21, [x21, #:got_lo12:IDByte]
9718         ldr     w2, [x21]
9719         str     w2, [x0]
9720         adrp    x2, :got:gNandMaxDie
9721         ldr     x2, [x2, #:got_lo12:gNandMaxDie]
9722         ldrb    w2, [x2]
9723         strh    w2, [x0,10]
9724         ldrb    w2, [x1,13]
9725         strh    w2, [x0,12]
9726         ldrh    w2, [x1,14]
9727         strh    w2, [x0,14]
9728         ldrh    w2, [x1,10]
9729         strh    w2, [x0,16]
9730         ldrb    w3, [x1,12]
9731         ldrh    w2, [x1,10]
9732         sdiv    w2, w2, w3
9733         strh    w2, [x0,18]
9734         ldrb    w2, [x1,9]
9735         strh    w2, [x0,20]
9736         ldrb    w2, [x1,9]
9737         ldrh    w3, [x1,10]
9738         mul     w2, w2, w3
9739         strh    w2, [x0,22]
9740         mov     w2, 512
9741         strh    w2, [x0,24]
9742         ldr     x20, [x20, #:got_lo12:gNandIDBResBlkNum]
9743         ldrb    w2, [x20]
9744         strh    w2, [x0,26]
9745         ldrb    w0, [x1,20]
9746         bl      FlashBchSel
9747         bl      FlashSuspend
9748         mov     w0, 0
9749         b       .L1252
9750 .L1287:
9751         mov     w0, -2
9752 .L1252:
9753         ldp     x19, x20, [sp,16]
9754         ldp     x21, x22, [sp,32]
9755         ldp     x23, x24, [sp,48]
9756         ldp     x25, x26, [sp,64]
9757         ldp     x27, x28, [sp,80]
9758         ldp     x29, x30, [sp], 96
9759         ret
9760         .size   FlashInit, .-FlashInit
9761         .align  2
9762         .global FlashPageProgMsbFFData
9763         .type   FlashPageProgMsbFFData, %function
9764 FlashPageProgMsbFFData:
9765         stp     x29, x30, [sp, -80]!
9766         adrp    x3, :got:gpNandParaInfo
9767         add     x29, sp, 0
9768         stp     x21, x22, [sp,32]
9769         uxtb    w22, w0
9770         ldr     x0, [x3, #:got_lo12:gpNandParaInfo]
9771         stp     x19, x20, [sp,16]
9772         stp     x23, x24, [sp,48]
9773         stp     x25, x26, [sp,64]
9774         uxtb    w19, w2
9775         mov     x20, x3
9776         ldr     x0, [x0]
9777         ldrb    w2, [x0,19]
9778         cmp     w2, 35
9779         cset    w4, eq
9780         cmp     w2, 68
9781         cset    w0, eq
9782         orr     w4, w4, w0
9783         cbnz    w4, .L1312
9784         sub     w2, w2, #5
9785         uxtb    w2, w2
9786         cmp     w2, 1
9787         bhi     .L1307
9788 .L1312:
9789         mov     w21, w1
9790         adrp    x24, :got:mlcPageToSlcPageTbl
9791         mov     w25, 65535
9792         adrp    x26, :got:gFlashPageBuffer1
9793 .L1310:
9794         ldr     x0, [x20, #:got_lo12:gpNandParaInfo]
9795         ldr     x0, [x0]
9796         ldrh    w0, [x0,10]
9797         cmp     w0, w19
9798         bls     .L1307
9799         ldr     x0, [x24, #:got_lo12:mlcPageToSlcPageTbl]
9800         ldrh    w0, [x0,w19,sxtw 1]
9801         cmp     w0, w25
9802         bne     .L1307
9803         ldr     x23, [x26, #:got_lo12:gFlashPageBuffer1]
9804         mov     w1, 255
9805         mov     w2, 32768
9806         ldr     x0, [x23]
9807         bl      ftl_memset
9808         ldr     x2, [x23]
9809         add     w1, w19, w21
9810         mov     w0, w22
9811         mov     x3, 0
9812         add     w19, w19, 1
9813         bl      FlashProgPage
9814         uxtb    w19, w19
9815         b       .L1310
9816 .L1307:
9817         ldp     x19, x20, [sp,16]
9818         ldp     x21, x22, [sp,32]
9819         ldp     x23, x24, [sp,48]
9820         ldp     x25, x26, [sp,64]
9821         ldp     x29, x30, [sp], 80
9822         ret
9823         .size   FlashPageProgMsbFFData, .-FlashPageProgMsbFFData
9824         .align  2
9825         .global FlashProgPageDp
9826         .type   FlashProgPageDp, %function
9827 FlashProgPageDp:
9828         stp     x29, x30, [sp, -80]!
9829         add     x29, sp, 0
9830         stp     x19, x20, [sp,16]
9831         uxtb    w19, w0
9832         adrp    x0, :got:gNandParaInfo
9833         stp     x23, x24, [sp,48]
9834         stp     x21, x22, [sp,32]
9835         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
9836         mov     w20, w1
9837         str     x5, [x29,72]
9838         mov     x24, x2
9839         mov     x21, x3
9840         mov     x23, x4
9841         ldrb    w22, [x0,9]
9842         mov     w0, w19
9843         bl      NandcWaitFlashReady
9844         mov     w0, w19
9845         bl      NandcFlashCs
9846         mov     w0, w19
9847         mov     w1, w20
9848         bl      FlashProgFirstCmd
9849         mov     w2, w22
9850         mov     x3, x24
9851         mov     x4, x21
9852         mov     w0, w19
9853         mov     w1, 1
9854         adrp    x21, :got:gBlockPageAlignSize
9855         bl      NandcXferData
9856         mov     w1, w20
9857         mov     w0, w19
9858         bl      FlashProgDpFirstCmd
9859         mov     w0, w19
9860         bl      NandcWaitFlashReady
9861         ldr     x21, [x21, #:got_lo12:gBlockPageAlignSize]
9862         mov     w0, w19
9863         ldr     w1, [x21]
9864         add     w1, w20, w1
9865         bl      FlashProgDpSecondCmd
9866         ldr     x5, [x29,72]
9867         mov     w2, w22
9868         mov     x3, x23
9869         mov     w0, w19
9870         mov     x4, x5
9871         mov     w1, 1
9872         bl      NandcXferData
9873         ldr     w1, [x21]
9874         mov     w0, w19
9875         add     w1, w20, w1
9876         bl      FlashProgSecondCmd
9877         mov     w0, w19
9878         bl      NandcWaitFlashReady
9879         mov     w1, w20
9880         mov     w0, w19
9881         bl      FlashReadStatus
9882         mov     w20, w0
9883         mov     w0, w19
9884         bl      NandcFlashDeCs
9885         and     w0, w20, 1
9886         ldp     x19, x20, [sp,16]
9887         ldp     x21, x22, [sp,32]
9888         ldp     x23, x24, [sp,48]
9889         ldp     x29, x30, [sp], 80
9890         ret
9891         .size   FlashProgPageDp, .-FlashProgPageDp
9892         .align  2
9893         .global FlashReadPages
9894         .type   FlashReadPages, %function
9895 FlashReadPages:
9896         stp     x29, x30, [sp, -160]!
9897         add     x29, sp, 0
9898         stp     x23, x24, [sp,48]
9899         mov     x24, x0
9900         adrp    x0, :got:gNandParaInfo
9901         stp     x21, x22, [sp,32]
9902         stp     x25, x26, [sp,64]
9903         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
9904         adrp    x26, :got:gNandRandomizer
9905         stp     x27, x28, [sp,80]
9906         stp     x19, x20, [sp,16]
9907         mov     w23, 0
9908         mov     w27, w1
9909         ldrb    w0, [x0,9]
9910         mov     w22, w23
9911         str     w0, [x29,140]
9912         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
9913         str     w2, [x29,132]
9914         ldrb    w0, [x0]
9915         str     w0, [x29,136]
9916         adrp    x0, .LC92
9917         add     x0, x0, :lo12:.LC92
9918         str     x0, [x29,112]
9919         adrp    x0, .LC93
9920         add     x0, x0, :lo12:.LC93
9921         str     x0, [x29,104]
9922         adrp    x0, .LC91
9923         add     x0, x0, :lo12:.LC91
9924         str     x0, [x29,96]
9925 .L1318:
9926         cmp     w22, w27
9927         bcs     .L1386
9928         mov     w25, 56
9929         ldr     w1, [x29,132]
9930         sub     w4, w27, w22
9931         add     x2, x29, 156
9932         umull   x25, w22, w25
9933         add     x3, x29, 152
9934         add     x21, x24, x25
9935         mov     x0, x21
9936         bl      LogAddr2PhyAddr
9937         mov     w19, w0
9938         adrp    x0, :got:gNandMaxDie
9939         ldr     w1, [x29,152]
9940         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
9941         ldrb    w0, [x0]
9942         cmp     w1, w0
9943         bcc     .L1319
9944         mov     w0, -1
9945         str     w0, [x24,x25]
9946         b       .L1320
9947 .L1319:
9948         adrp    x0, :got:DieCsIndex
9949         ldr     x0, [x0, #:got_lo12:DieCsIndex]
9950         ldrb    w20, [x0,w1,uxtw]
9951         adrp    x0, :got:gMultiPageReadEn
9952         ldr     x0, [x0, #:got_lo12:gMultiPageReadEn]
9953         ldrb    w0, [x0]
9954         cmp     w0, wzr
9955         mov     w0, w20
9956         csel    w19, w19, wzr, ne
9957         bl      NandcWaitFlashReady
9958         adrp    x1, :got:gpNandParaInfo
9959         str     x1, [x29,120]
9960         ldr     x0, [x1, #:got_lo12:gpNandParaInfo]
9961         ldr     x0, [x0]
9962         ldrb    w0, [x0,19]
9963         sub     w0, w0, #1
9964         uxtb    w0, w0
9965         cmp     w0, 5
9966         bhi     .L1322
9967         adrp    x2, :got:gReadRetryInfo
9968         sxtw    x1, w20
9969         ldr     x2, [x2, #:got_lo12:gReadRetryInfo]
9970         add     x0, x2, x1
9971         ldrb    w3, [x0,12]
9972         adrp    x0, :got:read_retry_cur_offset
9973         ldr     x0, [x0, #:got_lo12:read_retry_cur_offset]
9974         ldrb    w0, [x0,x1]
9975         cmp     w0, w3
9976         beq     .L1322
9977         ldrb    w1, [x2,1]
9978         mov     w0, w20
9979         add     x2, x2, 4
9980         bl      HynixSetRRPara
9981 .L1322:
9982         mov     w0, w20
9983         bl      NandcFlashCs
9984 .L1323:
9985         cmp     w20, 255
9986         ldr     w1, [x29,156]
9987         bne     .L1355
9988         cmn     w1, #1
9989         cset    w0, ne
9990         cbz     w0, .L1351
9991 .L1355:
9992         cbz     w19, .L1326
9993         adrp    x0, :got:gBlockPageAlignSize
9994         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
9995         ldr     w2, [x0]
9996         mov     w0, w20
9997         add     w2, w1, w2
9998         bl      FlashReadDpCmd
9999         b       .L1327
10000 .L1326:
10001         mov     w0, w20
10002         bl      FlashReadCmd
10003         b       .L1327
10004 .L1351:
10005         mov     w19, w0
10006 .L1324:
10007         ldrb    w2, [x29,140]
10008         mov     w1, 0
10009         ldr     x3, [x21,8]
10010         mov     w0, w20
10011         ldr     x4, [x21,16]
10012         bl      NandcXferData
10013         mov     w28, w0
10014         mov     w0, 0
10015         bl      NandcReadDontCaseBusyEn
10016         cmn     w28, #1
10017         bne     .L1328
10018         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
10019         ldrb    w1, [x0]
10020         cbz     w1, .L1328
10021         strb    wzr, [x0]
10022         mov     w19, 0
10023         b       .L1323
10024 .L1328:
10025         cbz     w19, .L1329
10026         adrp    x0, :got:gBlockPageAlignSize
10027         ldr     w1, [x29,156]
10028         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
10029         ldr     w2, [x0]
10030         mov     w0, w20
10031         add     w1, w2, w1
10032         bl      FlashReadDpDataOutCmd
10033         add     w0, w22, 1
10034         mov     w4, 56
10035         ldrb    w2, [x29,140]
10036         mov     w1, 0
10037         umull   x4, w0, w4
10038         mov     w0, w20
10039         add     x4, x24, x4
10040         ldr     x3, [x4,8]
10041         ldr     x4, [x4,16]
10042         bl      NandcXferData
10043         cmn     w0, #1
10044         mov     w23, w0
10045         csel    w19, w19, wzr, ne
10046 .L1329:
10047         mov     w0, w20
10048         bl      NandcFlashDeCs
10049         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
10050         cmn     w28, #1
10051         ldrb    w1, [x29,136]
10052         strb    w1, [x0]
10053         bne     .L1336
10054         adrp    x0, :got:gFlashToggleModeEn
10055         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
10056         ldrb    w0, [x0]
10057         cbnz    w0, .L1331
10058 .L1335:
10059         adrp    x0, :got:gpReadRetrial
10060         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
10061         ldr     x19, [x0]
10062         cbnz    x19, .L1332
10063         b       .L1387
10064 .L1331:
10065         adrp    x0, :got:gpNandc
10066         ldr     w1, [x29,156]
10067         ldr     x2, [x21,8]
10068         mov     w4, 1
10069         ldr     x3, [x21,16]
10070         ldr     x0, [x0, #:got_lo12:gpNandc]
10071         ldr     x0, [x0]
10072         ldr     w19, [x0,304]
10073         mov     w0, w20
10074         bl      FlashDdrTunningRead
10075         cmn     w0, #1
10076         mov     w28, w0
10077         beq     .L1334
10078         adrp    x1, :got:gNandFlashEccBits
10079         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
10080         ldrb    w0, [x1]
10081         cmp     w28, w0, lsr 1
10082         bls     .L1353
10083 .L1334:
10084         lsr     w0, w19, 8
10085         bl      NandcSetDdrPara
10086         cmn     w28, #1
10087         beq     .L1335
10088         b       .L1353
10089 .L1332:
10090         ldr     w1, [x29,156]
10091         mov     w0, w20
10092         ldr     x2, [x21,8]
10093         ldr     x3, [x21,16]
10094         blr     x19
10095         cmn     w0, #1
10096         mov     w28, w0
10097         mov     w19, 0
10098         bne     .L1337
10099         ldr     x0, [x29,120]
10100         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
10101         ldr     x0, [x0]
10102         ldrb    w0, [x0,19]
10103         sub     w0, w0, #1
10104         uxtb    w0, w0
10105         cmp     w0, 5
10106         bhi     .L1338
10107         adrp    x2, :got:gReadRetryInfo
10108         mov     w0, w20
10109         mov     w3, w19
10110         ldr     x2, [x2, #:got_lo12:gReadRetryInfo]
10111         add     x2, x2, 4
10112         ldrb    w1, [x2,-3]
10113         bl      HynixSetRRPara
10114 .L1338:
10115         ldr     w1, [x29,156]
10116         mov     w0, w20
10117         ldr     x2, [x21,8]
10118         mov     w19, 0
10119         ldr     x3, [x21,16]
10120         bl      FlashReadRawPage
10121         mov     w28, w0
10122         adrp    x2, :got:gNandFlashEccBits
10123         ldr     x0, [x29,96]
10124         ldr     w1, [x21,4]
10125         mov     w3, w28
10126         ldr     x2, [x2, #:got_lo12:gNandFlashEccBits]
10127         ldrb    w2, [x2]
10128         bl      printk
10129         b       .L1337
10130 .L1387:
10131         ldr     w1, [x29,156]
10132         mov     w0, w20
10133         ldr     x2, [x21,8]
10134         ldr     x3, [x21,16]
10135         bl      FlashReadRawPage
10136         mov     w28, w0
10137         b       .L1337
10138 .L1353:
10139         mov     w19, 0
10140 .L1336:
10141         adrp    x0, :got:gNandFlashEccBits
10142         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
10143         ldrb    w0, [x0]
10144         add     w0, w0, w0, lsl 1
10145         cmp     w28, w0, lsr 2
10146         bls     .L1337
10147         adrp    x0, :got:gpReadRetrial
10148         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
10149         ldr     x0, [x0]
10150         cmp     x0, xzr
10151         mov     w0, 256
10152         csel    w28, w28, w0, ne
10153 .L1337:
10154         cmp     w28, 256
10155         beq     .L1356
10156         cmn     w28, #1
10157         bne     .L1339
10158 .L1356:
10159         str     w28, [x24,x25]
10160         b       .L1341
10161 .L1339:
10162         str     wzr, [x24,x25]
10163 .L1341:
10164         ldr     w3, [x24,x25]
10165         cmn     w3, #1
10166         bne     .L1343
10167         adrp    x2, :got:gNandFlashEccBits
10168         ldr     w1, [x21,4]
10169         ldr     x0, [x29,112]
10170         ldr     x2, [x2, #:got_lo12:gNandFlashEccBits]
10171         ldrb    w2, [x2]
10172         bl      printk
10173         ldr     x1, [x21,16]
10174         cbz     x1, .L1343
10175         mov     w2, 4
10176         ldr     x0, [x29,104]
10177         mov     w3, w2
10178         bl      rknand_print_hex
10179 .L1343:
10180         cbz     w19, .L1345
10181         adrp    x0, :got:gNandFlashEccBits
10182         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
10183         ldrb    w0, [x0]
10184         add     w0, w0, w0, lsl 1
10185         cmp     w23, w0, lsr 2
10186         bls     .L1346
10187         adrp    x0, :got:gpReadRetrial
10188         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
10189         ldr     x0, [x0]
10190         cmp     x0, xzr
10191         mov     w0, 256
10192         csel    w23, w23, w0, ne
10193 .L1346:
10194         add     w0, w22, 1
10195         mov     w1, 56
10196         cmp     w23, 256
10197         umull   x0, w0, w1
10198         beq     .L1357
10199         cmn     w23, #1
10200         bne     .L1347
10201 .L1357:
10202         str     w23, [x24,x0]
10203         b       .L1345
10204 .L1347:
10205         str     wzr, [x24,x0]
10206 .L1345:
10207         add     w22, w22, w19
10208 .L1320:
10209         add     w22, w22, 1
10210         b       .L1318
10211 .L1327:
10212         mov     w0, w20
10213         bl      NandcWaitFlashReady
10214         cbz     w19, .L1324
10215         ldr     w1, [x29,156]
10216         mov     w0, w20
10217         bl      FlashReadDpDataOutCmd
10218         b       .L1324
10219 .L1386:
10220         mov     w0, 0
10221         ldp     x19, x20, [sp,16]
10222         ldp     x21, x22, [sp,32]
10223         ldp     x23, x24, [sp,48]
10224         ldp     x25, x26, [sp,64]
10225         ldp     x27, x28, [sp,80]
10226         ldp     x29, x30, [sp], 160
10227         ret
10228         .size   FlashReadPages, .-FlashReadPages
10229         .align  2
10230         .global FlashLoadFactorBbt
10231         .type   FlashLoadFactorBbt, %function
10232 FlashLoadFactorBbt:
10233         adrp    x0, :got:gNandPhyInfo
10234         mov     w2, 32
10235         stp     x29, x30, [sp, -192]!
10236         add     x29, sp, 0
10237         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
10238         stp     x23, x24, [sp,48]
10239         stp     x25, x26, [sp,64]
10240         stp     x27, x28, [sp,80]
10241         stp     x19, x20, [sp,16]
10242         stp     x21, x22, [sp,32]
10243         adrp    x23, :got:FbbtBlk
10244         adrp    x24, :got:gFlashSpareBuffer
10245         ldrh    w1, [x0,12]
10246         mov     w27, -1
10247         ldrh    w21, [x0,14]
10248         adrp    x26, .LC94
10249         ldr     x0, [x23, #:got_lo12:FbbtBlk]
10250         add     x28, x29, 136
10251         add     x26, x26, :lo12:.LC94
10252         mul     w21, w1, w21
10253         mov     w1, 0
10254         bl      ftl_memset
10255         uxth    w21, w21
10256         ldr     x0, [x24, #:got_lo12:gFlashSpareBuffer]
10257         add     w25, w21, w27
10258         mov     w3, 0
10259         str     xzr, [x29,144]
10260         mov     w19, w3
10261         uxth    w25, w25
10262         ldr     x0, [x0]
10263         str     x0, [x29,152]
10264         sub     w0, w21, #16
10265         str     w0, [x29,124]
10266 .L1389:
10267         adrp    x22, :got:gNandMaxDie
10268         ldr     x1, [x22, #:got_lo12:gNandMaxDie]
10269         ldrb    w1, [x1]
10270         cmp     w1, w19
10271         bls     .L1399
10272         mul     w4, w19, w21
10273         mov     w20, w25
10274         mov     w5, 61664
10275 .L1390:
10276         ldr     w0, [x29,124]
10277         cmp     w20, w0
10278         ble     .L1392
10279         add     w1, w4, w20
10280         mov     x0, x28
10281         lsl     w1, w1, 10
10282         str     w1, [x28,4]
10283         mov     w1, 1
10284         str     x5, [x29,96]
10285         mov     w2, w1
10286         str     x3, [x29,104]
10287         str     x4, [x29,112]
10288         bl      FlashReadPages
10289         ldr     w0, [x28]
10290         ldr     x4, [x29,112]
10291         cmn     w0, #1
10292         ldr     x3, [x29,104]
10293         ldr     x5, [x29,96]
10294         beq     .L1391
10295         ldr     x0, [x24, #:got_lo12:gFlashSpareBuffer]
10296         ldr     x0, [x0]
10297         ldrh    w0, [x0]
10298         cmp     w0, w5
10299         bne     .L1391
10300         mov     x0, x26
10301         mov     w1, w19
10302         mov     w2, w20
10303         str     x3, [x29,112]
10304         bl      printk
10305         ldr     x3, [x29,112]
10306         ldr     x0, [x23, #:got_lo12:FbbtBlk]
10307         add     w3, w3, 1
10308         strh    w20, [x0,w19,sxtw 1]
10309         uxth    w3, w3
10310         b       .L1392
10311 .L1391:
10312         sub     w20, w20, #1
10313         uxth    w20, w20
10314         b       .L1390
10315 .L1392:
10316         ldr     x22, [x22, #:got_lo12:gNandMaxDie]
10317         add     w19, w19, 1
10318         uxtb    w19, w19
10319         ldrb    w1, [x22]
10320         cmp     w1, w3
10321         csel    w27, w27, wzr, ne
10322         b       .L1389
10323 .L1399:
10324         mov     w0, w27
10325         ldp     x19, x20, [sp,16]
10326         ldp     x21, x22, [sp,32]
10327         ldp     x23, x24, [sp,48]
10328         ldp     x25, x26, [sp,64]
10329         ldp     x27, x28, [sp,80]
10330         ldp     x29, x30, [sp], 192
10331         ret
10332         .size   FlashLoadFactorBbt, .-FlashLoadFactorBbt
10333         .align  2
10334         .global FtlLoadFactoryBbt
10335         .type   FtlLoadFactoryBbt, %function
10336 FtlLoadFactoryBbt:
10337         adrp    x1, :got:p_sys_data_buf
10338         adrp    x0, :got:req_sys
10339         stp     x29, x30, [sp, -112]!
10340         add     x29, sp, 0
10341         ldr     x1, [x1, #:got_lo12:p_sys_data_buf]
10342         stp     x21, x22, [sp,32]
10343         stp     x25, x26, [sp,64]
10344         stp     x27, x28, [sp,80]
10345         stp     x19, x20, [sp,16]
10346         stp     x23, x24, [sp,48]
10347         ldr     x2, [x0, #:got_lo12:req_sys]
10348         adrp    x20, :got:gBbtInfo
10349         ldr     x1, [x1]
10350         mov     w21, 0
10351         mov     x22, x0
10352         adrp    x25, :got:c_ftl_nand_die_num
10353         str     x1, [x2,8]
10354         adrp    x1, :got:p_sys_spare_buf
10355         mov     w26, -1
10356         adrp    x27, :got:c_ftl_nand_blks_per_die
10357         mov     w28, 61664
10358         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
10359         ldr     x24, [x1]
10360         str     x24, [x2,16]
10361         ldr     x20, [x20, #:got_lo12:gBbtInfo]
10362 .L1401:
10363         ldr     x0, [x25, #:got_lo12:c_ftl_nand_die_num]
10364         ldrh    w0, [x0]
10365         cmp     w21, w0
10366         bcs     .L1410
10367         strh    w26, [x20,12]
10368         adrp    x3, :got:c_ftl_nand_blks_per_die
10369         ldr     x0, [x27, #:got_lo12:c_ftl_nand_blks_per_die]
10370         ldrh    w19, [x0]
10371         sub     w19, w19, #1
10372         uxth    w19, w19
10373 .L1402:
10374         ldr     x0, [x3, #:got_lo12:c_ftl_nand_blks_per_die]
10375         ldrh    w1, [x0]
10376         sub     w0, w1, #16
10377         cmp     w19, w0
10378         ble     .L1404
10379         ldr     x23, [x22, #:got_lo12:req_sys]
10380         madd    w1, w21, w1, w19
10381         mov     x0, x23
10382         str     x3, [x29,104]
10383         lsl     w1, w1, 10
10384         str     w1, [x23,4]
10385         mov     w1, 1
10386         mov     w2, w1
10387         bl      FlashReadPages
10388         ldr     w0, [x23]
10389         ldr     x3, [x29,104]
10390         cmn     w0, #1
10391         beq     .L1403
10392         ldrh    w0, [x24]
10393         cmp     w0, w28
10394         bne     .L1403
10395         strh    w19, [x20,12]
10396         b       .L1404
10397 .L1403:
10398         sub     w19, w19, #1
10399         uxth    w19, w19
10400         b       .L1402
10401 .L1404:
10402         add     w21, w21, 1
10403         add     x20, x20, 2
10404         b       .L1401
10405 .L1410:
10406         mov     w0, 0
10407         ldp     x19, x20, [sp,16]
10408         ldp     x21, x22, [sp,32]
10409         ldp     x23, x24, [sp,48]
10410         ldp     x25, x26, [sp,64]
10411         ldp     x27, x28, [sp,80]
10412         ldp     x29, x30, [sp], 112
10413         ret
10414         .size   FtlLoadFactoryBbt, .-FtlLoadFactoryBbt
10415         .align  2
10416         .global FtlGetLastWrittenPage
10417         .type   FtlGetLastWrittenPage, %function
10418 FtlGetLastWrittenPage:
10419         stp     x29, x30, [sp, -208]!
10420         cmp     w1, 1
10421         add     x29, sp, 0
10422         stp     x23, x24, [sp,48]
10423         stp     x19, x20, [sp,16]
10424         stp     x21, x22, [sp,32]
10425         stp     x25, x26, [sp,64]
10426         mov     w24, w1
10427         bne     .L1412
10428         adrp    x1, :got:c_ftl_nand_page_pre_slc_blk
10429         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
10430         b       .L1422
10431 .L1412:
10432         adrp    x1, :got:c_ftl_nand_page_pre_blk
10433         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
10434 .L1422:
10435         ldrh    w19, [x1]
10436         lsl     w21, w0, 10
10437         add     x22, x29, 88
10438         mov     w1, 1
10439         sub     w19, w19, #1
10440         mov     w2, w24
10441         str     xzr, [x29,96]
10442         add     x25, x29, 144
10443         sxth    w19, w19
10444         str     x25, [x29,104]
10445         orr     w0, w19, w21
10446         str     w0, [x29,92]
10447         mov     x0, x22
10448         bl      FlashReadPages
10449         ldr     w0, [x29,144]
10450         cmn     w0, #1
10451         bne     .L1414
10452         mov     w23, 0
10453         mov     w26, 2
10454 .L1415:
10455         cmp     w23, w19
10456         bgt     .L1414
10457         add     w3, w23, w19
10458         mov     w1, 1
10459         mov     w2, w24
10460         sdiv    w20, w3, w26
10461         sxth    w0, w20
10462         orr     w0, w0, w21
10463         str     w0, [x22,4]
10464         mov     x0, x22
10465         bl      FlashReadPages
10466         ldr     w0, [x25]
10467         cmn     w0, #1
10468         bne     .L1416
10469         ldr     w0, [x25,4]
10470         cmn     w0, #1
10471         bne     .L1416
10472         ldr     w0, [x22]
10473         cmn     w0, #1
10474         beq     .L1416
10475         sub     w19, w20, #1
10476         sxth    w19, w19
10477         b       .L1415
10478 .L1416:
10479         add     w20, w20, 1
10480         sxth    w23, w20
10481         b       .L1415
10482 .L1414:
10483         mov     w0, w19
10484         ldp     x19, x20, [sp,16]
10485         ldp     x21, x22, [sp,32]
10486         ldp     x23, x24, [sp,48]
10487         ldp     x25, x26, [sp,64]
10488         ldp     x29, x30, [sp], 208
10489         ret
10490         .size   FtlGetLastWrittenPage, .-FtlGetLastWrittenPage
10491         .align  2
10492         .global FtlLoadBbt
10493         .type   FtlLoadBbt, %function
10494 FtlLoadBbt:
10495         stp     x29, x30, [sp, -64]!
10496         adrp    x0, :got:p_sys_spare_buf
10497         add     x29, sp, 0
10498         stp     x21, x22, [sp,32]
10499         adrp    x21, :got:req_sys
10500         stp     x23, x24, [sp,48]
10501         stp     x19, x20, [sp,16]
10502         ldr     x1, [x21, #:got_lo12:req_sys]
10503         adrp    x23, :got:c_ftl_nand_blks_per_die
10504         mov     w24, 61649
10505         str     xzr, [x1,8]
10506         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
10507         ldr     x20, [x0]
10508         str     x20, [x1,16]
10509         bl      FtlBbtMemInit
10510         ldr     x0, [x23, #:got_lo12:c_ftl_nand_blks_per_die]
10511         ldrh    w19, [x0]
10512         sub     w19, w19, #1
10513         uxth    w19, w19
10514 .L1424:
10515         ldr     x0, [x23, #:got_lo12:c_ftl_nand_blks_per_die]
10516         ldrh    w0, [x0]
10517         sub     w0, w0, #48
10518         cmp     w19, w0
10519         ble     .L1427
10520         ldr     x22, [x21, #:got_lo12:req_sys]
10521         lsl     w0, w19, 10
10522         mov     w1, 1
10523         mov     w2, w1
10524         str     w0, [x22,4]
10525         mov     x0, x22
10526         bl      FlashReadPages
10527         ldr     w0, [x22]
10528         cmn     w0, #1
10529         bne     .L1425
10530         ldr     w0, [x22,4]
10531         mov     w1, 1
10532         mov     w2, w1
10533         add     w0, w0, 1
10534         str     w0, [x22,4]
10535         mov     x0, x22
10536         bl      FlashReadPages
10537 .L1425:
10538         ldr     x0, [x21, #:got_lo12:req_sys]
10539         ldr     w0, [x0]
10540         cmn     w0, #1
10541         beq     .L1426
10542         ldrh    w0, [x20]
10543         cmp     w0, w24
10544         bne     .L1426
10545         adrp    x0, :got:gBbtInfo
10546         ldr     w1, [x20,4]
10547         ldr     x0, [x0, #:got_lo12:gBbtInfo]
10548         str     w1, [x0,8]
10549         strh    w19, [x0]
10550         ldrh    w1, [x20,8]
10551         strh    w1, [x0,4]
10552         b       .L1427
10553 .L1426:
10554         sub     w19, w19, #1
10555         uxth    w19, w19
10556         b       .L1424
10557 .L1427:
10558         adrp    x19, :got:gBbtInfo
10559         mov     w2, 65535
10560         mov     w0, -1
10561         ldr     x22, [x19, #:got_lo12:gBbtInfo]
10562         ldrh    w1, [x22]
10563         cmp     w1, w2
10564         beq     .L1429
10565         ldrh    w1, [x22,4]
10566         cmp     w1, w2
10567         beq     .L1431
10568         ldr     x23, [x21, #:got_lo12:req_sys]
10569         lsl     w1, w1, 10
10570         mov     x0, x23
10571         str     w1, [x23,4]
10572         mov     w1, 1
10573         mov     w2, w1
10574         bl      FlashReadPages
10575         ldr     w0, [x23]
10576         cmn     w0, #1
10577         beq     .L1431
10578         ldrh    w1, [x20]
10579         mov     w0, 61649
10580         cmp     w1, w0
10581         bne     .L1431
10582         ldr     w0, [x20,4]
10583         ldr     w1, [x22,8]
10584         cmp     w0, w1
10585         bls     .L1431
10586         str     w0, [x22,8]
10587         ldrh    w1, [x22,4]
10588         ldrh    w0, [x20,8]
10589         strh    w1, [x22]
10590         strh    w0, [x22,4]
10591 .L1431:
10592         ldr     x23, [x19, #:got_lo12:gBbtInfo]
10593         mov     w1, 1
10594         adrp    x24, :got:p_sys_data_buf
10595         ldrh    w0, [x23]
10596         bl      FtlGetLastWrittenPage
10597         sxth    w22, w0
10598         add     w0, w0, 1
10599         strh    w0, [x23,2]
10600 .L1433:
10601         tbnz    w22, #31, .L1438
10602         ldr     x0, [x19, #:got_lo12:gBbtInfo]
10603         mov     w1, 1
10604         ldr     x23, [x21, #:got_lo12:req_sys]
10605         mov     w2, w1
10606         ldrh    w0, [x0]
10607         orr     w0, w22, w0, lsl 10
10608         str     w0, [x23,4]
10609         ldr     x0, [x24, #:got_lo12:p_sys_data_buf]
10610         ldr     x0, [x0]
10611         str     x0, [x23,8]
10612         mov     x0, x23
10613         bl      FlashReadPages
10614         ldr     w0, [x23]
10615         cmn     w0, #1
10616         beq     .L1434
10617 .L1438:
10618         ldr     x0, [x19, #:got_lo12:gBbtInfo]
10619         ldrh    w1, [x20,10]
10620         strh    w1, [x0,6]
10621         mov     w1, 65535
10622         ldrh    w0, [x20,12]
10623         cmp     w0, w1
10624         bne     .L1435
10625         b       .L1436
10626 .L1434:
10627         sub     w22, w22, #1
10628         sxth    w22, w22
10629         b       .L1433
10630 .L1435:
10631         adrp    x1, :got:c_ftl_nand_sys_blks_per_plane
10632         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
10633         ldr     w2, [x1]
10634         cmp     w0, w2
10635         beq     .L1436
10636         adrp    x1, :got:c_ftl_nand_blk_pre_plane
10637         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blk_pre_plane]
10638         ldrh    w1, [x1]
10639         lsr     w1, w1, 2
10640         cmp     w0, w1
10641         bcs     .L1436
10642         cmp     w2, w1
10643         bcs     .L1436
10644         bl      FtlSysBlkNumInit
10645 .L1436:
10646         mov     x20, 0
10647         adrp    x22, :got:c_ftl_nand_die_num
10648         adrp    x23, :got:c_ftl_nand_bbm_buf_size
10649 .L1439:
10650         ldr     x0, [x22, #:got_lo12:c_ftl_nand_die_num]
10651         mov     w1, w20
10652         add     x20, x20, 1
10653         ldrh    w0, [x0]
10654         cmp     w1, w0
10655         bcs     .L1454
10656         ldr     x0, [x23, #:got_lo12:c_ftl_nand_bbm_buf_size]
10657         ldr     x3, [x21, #:got_lo12:req_sys]
10658         ldrh    w2, [x0]
10659         ldr     x0, [x19, #:got_lo12:gBbtInfo]
10660         ldr     x3, [x3,8]
10661         add     x0, x0, x20, lsl 3
10662         mul     w1, w1, w2
10663         lsl     w2, w2, 2
10664         ldr     x0, [x0,24]
10665         add     x1, x3, x1, lsl 2
10666         bl      ftl_memcpy
10667         b       .L1439
10668 .L1454:
10669         mov     w0, 0
10670 .L1429:
10671         ldp     x19, x20, [sp,16]
10672         ldp     x21, x22, [sp,32]
10673         ldp     x23, x24, [sp,48]
10674         ldp     x29, x30, [sp], 64
10675         ret
10676         .size   FtlLoadBbt, .-FtlLoadBbt
10677         .align  2
10678         .global load_l2p_region
10679         .type   load_l2p_region, %function
10680 load_l2p_region:
10681         stp     x29, x30, [sp, -48]!
10682         uxth    x1, w1
10683         add     x29, sp, 0
10684         stp     x21, x22, [sp,32]
10685         uxth    w21, w0
10686         adrp    x0, :got:p_map_region_ppn_table
10687         stp     x19, x20, [sp,16]
10688         ubfiz   x2, x21, 2, 16
10689         adrp    x20, :got:p_l2p_ram_map
10690         ldr     x0, [x0, #:got_lo12:p_map_region_ppn_table]
10691         ldr     x0, [x0]
10692         ldr     w22, [x0,x2]
10693         cbnz    w22, .L1456
10694         ldr     x20, [x20, #:got_lo12:p_l2p_ram_map]
10695         adrp    x2, :got:c_ftl_nand_byte_pre_page
10696         lsl     x19, x1, 4
10697         mov     w1, 255
10698         ldr     x0, [x20]
10699         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
10700         add     x0, x0, x19
10701         ldrh    w2, [x2]
10702         ldr     x0, [x0,8]
10703         bl      ftl_memset
10704         ldr     x0, [x20]
10705         strh    w21, [x0,x19]
10706         ldr     x1, [x20]
10707         add     x19, x1, x19
10708         str     w22, [x19,4]
10709         b       .L1457
10710 .L1456:
10711         adrp    x0, :got:req_sys
10712         lsl     x19, x1, 4
10713         ldr     x0, [x0, #:got_lo12:req_sys]
10714         str     w22, [x0,4]
10715         ldr     x20, [x20, #:got_lo12:p_l2p_ram_map]
10716         ldr     x1, [x20]
10717         add     x1, x1, x19
10718         ldr     x1, [x1,8]
10719         str     x1, [x0,8]
10720         adrp    x1, :got:p_sys_spare_buf
10721         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
10722         ldr     x1, [x1]
10723         str     x1, [x0,16]
10724         mov     w1, 1
10725         mov     w2, w1
10726         bl      FlashReadPages
10727         ldr     x0, [x20]
10728         add     x0, x0, x19
10729         str     wzr, [x0,4]
10730         ldr     x0, [x20]
10731         strh    w21, [x0,x19]
10732 .L1457:
10733         mov     w0, 0
10734         ldp     x19, x20, [sp,16]
10735         ldp     x21, x22, [sp,32]
10736         ldp     x29, x30, [sp], 48
10737         ret
10738         .size   load_l2p_region, .-load_l2p_region
10739         .align  2
10740         .global FtlVendorPartRead
10741         .type   FtlVendorPartRead, %function
10742 FtlVendorPartRead:
10743         stp     x29, x30, [sp, -176]!
10744         add     x29, sp, 0
10745         stp     x21, x22, [sp,32]
10746         mov     w22, w0
10747         adrp    x0, :got:c_ftl_nand_sec_pre_page_shift
10748         stp     x19, x20, [sp,16]
10749         stp     x23, x24, [sp,48]
10750         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
10751         mov     w21, w1
10752         stp     x25, x26, [sp,64]
10753         stp     x27, x28, [sp,80]
10754         add     w1, w22, w1
10755         mov     x23, x2
10756         ldrh    w3, [x0]
10757         mov     w0, 4352
10758         cmp     w1, w0
10759         mov     w20, -1
10760         bhi     .L1459
10761         lsr     w24, w22, w3
10762         mov     w20, 0
10763         add     x25, x29, 120
10764         adrp    x26, :got:p_vendor_data_buf
10765 .L1460:
10766         cbz     w21, .L1459
10767         adrp    x0, :got:p_vendor_region_ppn_table
10768         ldr     x0, [x0, #:got_lo12:p_vendor_region_ppn_table]
10769         ldr     x0, [x0]
10770         ldr     w1, [x0,w24,uxtw 2]
10771         adrp    x0, :got:c_ftl_nand_sec_pre_page
10772         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
10773         ldrh    w19, [x0]
10774         uxth    w0, w21
10775         udiv    w27, w22, w19
10776         msub    w27, w27, w19, w22
10777         sub     w19, w19, w27
10778         uxth    w19, w19
10779         cmp     w19, w21
10780         csel    w19, w0, w19, hi
10781         lsl     w28, w19, 9
10782         cbz     w1, .L1462
10783         ldr     x5, [x26, #:got_lo12:p_vendor_data_buf]
10784         ubfiz   x27, x27, 9, 16
10785         str     w1, [x25,4]
10786         mov     w1, 1
10787         mov     w2, w1
10788         str     x5, [x29,104]
10789         ldr     x0, [x5]
10790         str     x0, [x25,8]
10791         mov     x0, x25
10792         str     xzr, [x25,16]
10793         bl      FlashReadPages
10794         ldr     x5, [x29,104]
10795         mov     w2, w28
10796         ldr     w0, [x25]
10797         ldr     x1, [x5]
10798         cmn     w0, #1
10799         mov     x0, x23
10800         csinv   w20, w20, wzr, ne
10801         add     x1, x1, x27
10802         bl      ftl_memcpy
10803         b       .L1464
10804 .L1462:
10805         mov     x0, x23
10806         mov     w2, w28
10807         bl      ftl_memset
10808 .L1464:
10809         add     w24, w24, 1
10810         sub     w21, w21, w19
10811         add     w22, w22, w19
10812         add     x23, x23, x28, sxtw
10813         b       .L1460
10814 .L1459:
10815         mov     w0, w20
10816         ldp     x19, x20, [sp,16]
10817         ldp     x21, x22, [sp,32]
10818         ldp     x23, x24, [sp,48]
10819         ldp     x25, x26, [sp,64]
10820         ldp     x27, x28, [sp,80]
10821         ldp     x29, x30, [sp], 176
10822         ret
10823         .size   FtlVendorPartRead, .-FtlVendorPartRead
10824         .align  2
10825         .global FtlLoadEctTbl
10826         .type   FtlLoadEctTbl, %function
10827 FtlLoadEctTbl:
10828         stp     x29, x30, [sp, -32]!
10829         mov     w0, 64
10830         add     x29, sp, 0
10831         stp     x19, x20, [sp,16]
10832         adrp    x20, :got:g_ect_tbl_info_size
10833         adrp    x19, :got:gp_ect_tbl_info
10834         ldr     x20, [x20, #:got_lo12:g_ect_tbl_info_size]
10835         ldr     x19, [x19, #:got_lo12:gp_ect_tbl_info]
10836         ldrh    w1, [x20]
10837         ldr     x2, [x19]
10838         bl      FtlVendorPartRead
10839         ldr     x0, [x19]
10840         ldr     w1, [x0]
10841         mov     w0, 17221
10842         movk    w0, 0x4254, lsl 16
10843         cmp     w1, w0
10844         beq     .L1468
10845         adrp    x0, .LC72
10846         adrp    x1, .LC95
10847         add     x1, x1, :lo12:.LC95
10848         add     x0, x0, :lo12:.LC72
10849         bl      printk
10850         ldrh    w2, [x20]
10851         mov     w1, 0
10852         ldr     x0, [x19]
10853         lsl     w2, w2, 9
10854         bl      ftl_memset
10855 .L1468:
10856         mov     w0, 0
10857         ldp     x19, x20, [sp,16]
10858         ldp     x29, x30, [sp], 32
10859         ret
10860         .size   FtlLoadEctTbl, .-FtlLoadEctTbl
10861         .align  2
10862         .global Ftl_load_ext_data
10863         .type   Ftl_load_ext_data, %function
10864 Ftl_load_ext_data:
10865         stp     x29, x30, [sp, -32]!
10866         mov     w1, 1
10867         mov     w0, 0
10868         add     x29, sp, 0
10869         stp     x19, x20, [sp,16]
10870         adrp    x19, :got:g_sys_ext_data
10871         ldr     x20, [x19, #:got_lo12:g_sys_ext_data]
10872         mov     x2, x20
10873         bl      FtlVendorPartRead
10874         ldr     w1, [x20]
10875         mov     w0, 19539
10876         movk    w0, 0x4654, lsl 16
10877         cmp     w1, w0
10878         beq     .L1470
10879         mov     x0, x20
10880         mov     w1, 0
10881         mov     w2, 512
10882         bl      ftl_memset
10883         mov     w0, 19539
10884         movk    w0, 0x4654, lsl 16
10885         str     w0, [x20]
10886 .L1470:
10887         ldr     x0, [x19, #:got_lo12:g_sys_ext_data]
10888         mov     w1, 19539
10889         movk    w1, 0x4654, lsl 16
10890         ldr     w2, [x0]
10891         cmp     w2, w1
10892         adrp    x2, :got:g_totle_slc_erase_count
10893         bne     .L1471
10894         adrp    x1, :got:g_totle_write_sector
10895         ldr     w3, [x0,88]
10896         ldr     x1, [x1, #:got_lo12:g_totle_write_sector]
10897         str     w3, [x1]
10898         adrp    x1, :got:g_totle_read_sector
10899         ldr     w3, [x0,92]
10900         ldr     x1, [x1, #:got_lo12:g_totle_read_sector]
10901         str     w3, [x1]
10902         adrp    x1, :got:g_totle_gc_page_count
10903         ldr     w3, [x0,8]
10904         ldr     x1, [x1, #:got_lo12:g_totle_gc_page_count]
10905         str     w3, [x1]
10906         adrp    x1, :got:g_totle_write_page_count
10907         ldr     w3, [x0,12]
10908         ldr     x1, [x1, #:got_lo12:g_totle_write_page_count]
10909         str     w3, [x1]
10910         adrp    x1, :got:g_totle_read_page_count
10911         ldr     w3, [x0,16]
10912         ldr     x1, [x1, #:got_lo12:g_totle_read_page_count]
10913         str     w3, [x1]
10914         adrp    x1, :got:g_totle_l2p_write_count
10915         ldr     w3, [x0,20]
10916         ldr     x1, [x1, #:got_lo12:g_totle_l2p_write_count]
10917         str     w3, [x1]
10918         ldr     w3, [x0,28]
10919         ldr     x1, [x2, #:got_lo12:g_totle_slc_erase_count]
10920         str     w3, [x1]
10921         adrp    x1, :got:g_totle_sys_slc_erase_count
10922         ldr     w3, [x0,32]
10923         ldr     x1, [x1, #:got_lo12:g_totle_sys_slc_erase_count]
10924         str     w3, [x1]
10925         adrp    x1, :got:g_totle_discard_page_count
10926         ldr     w3, [x0,36]
10927         ldr     x1, [x1, #:got_lo12:g_totle_discard_page_count]
10928         str     w3, [x1]
10929         adrp    x1, :got:g_totle_cache_write_count
10930         ldr     w3, [x0,40]
10931         ldr     x1, [x1, #:got_lo12:g_totle_cache_write_count]
10932         str     w3, [x1]
10933         adrp    x1, :got:g_max_erase_count
10934         ldr     w3, [x0,44]
10935         ldr     x1, [x1, #:got_lo12:g_max_erase_count]
10936         str     w3, [x1]
10937         adrp    x1, :got:g_min_erase_count
10938         ldr     x1, [x1, #:got_lo12:g_min_erase_count]
10939         ldr     w3, [x0,48]
10940         ldr     w0, [x0,60]
10941         str     w3, [x1]
10942         adrp    x1, :got:g_all_blk_used_slc_mode
10943         ldr     x1, [x1, #:got_lo12:g_all_blk_used_slc_mode]
10944         str     w0, [x1]
10945 .L1471:
10946         adrp    x0, :got:g_SlcPartLbaEndSector
10947         ldr     x0, [x0, #:got_lo12:g_SlcPartLbaEndSector]
10948         str     wzr, [x0]
10949         mov     w0, 34661
10950         movk    w0, 0x1234, lsl 16
10951         ldr     x19, [x19, #:got_lo12:g_sys_ext_data]
10952         ldr     w1, [x19,68]
10953         cmp     w1, w0
10954         bne     .L1472
10955         adrp    x0, :got:g_inkDie_check_enable
10956         mov     w1, 1
10957         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
10958         str     w1, [x0]
10959 .L1472:
10960         adrp    x0, :got:c_mlc_erase_count_value
10961         ldr     x2, [x2, #:got_lo12:g_totle_slc_erase_count]
10962         adrp    x3, :got:g_totle_avg_erase_count
10963         ldr     x0, [x0, #:got_lo12:c_mlc_erase_count_value]
10964         ldr     x3, [x3, #:got_lo12:g_totle_avg_erase_count]
10965         ldrh    w1, [x0]
10966         adrp    x0, :got:g_totle_mlc_erase_count
10967         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
10968         ldr     w4, [x0]
10969         ldr     w0, [x2]
10970         madd    w0, w1, w4, w0
10971         adrp    x1, :got:c_ftl_nand_data_blks_per_plane
10972         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_blks_per_plane]
10973         ldrh    w1, [x1]
10974         udiv    w0, w0, w1
10975         str     w0, [x3]
10976         ldp     x19, x20, [sp,16]
10977         ldp     x29, x30, [sp], 32
10978         ret
10979         .size   Ftl_load_ext_data, .-Ftl_load_ext_data
10980         .align  2
10981         .global FtlScanSysBlk
10982         .type   FtlScanSysBlk, %function
10983 FtlScanSysBlk:
10984         stp     x29, x30, [sp, -160]!
10985         mov     w1, 0
10986         add     x29, sp, 0
10987         stp     x19, x20, [sp,16]
10988         adrp    x19, :got:g_totle_map_block
10989         stp     x21, x22, [sp,32]
10990         stp     x23, x24, [sp,48]
10991         ldr     x0, [x19, #:got_lo12:g_totle_map_block]
10992         adrp    x24, :got:p_map_block_ver_table
10993         stp     x27, x28, [sp,80]
10994         stp     x25, x26, [sp,64]
10995         adrp    x28, :got:g_totle_vendor_block
10996         strh    wzr, [x0]
10997         adrp    x25, :got:c_ftl_nand_max_map_blks
10998         adrp    x21, :got:p_map_block_table
10999         adrp    x27, :got:c_ftl_nand_max_vendor_blks
11000         adrp    x23, :got:p_vendor_block_ver_table
11001         ldr     x0, [x28, #:got_lo12:g_totle_vendor_block]
11002         strh    wzr, [x0]
11003         ldr     x20, [x25, #:got_lo12:c_ftl_nand_max_map_blks]
11004         ldr     x0, [x24, #:got_lo12:p_map_block_ver_table]
11005         ldr     w2, [x20]
11006         ldr     x0, [x0]
11007         lsl     w2, w2, 2
11008         bl      ftl_memset
11009         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11010         mov     w1, 0
11011         ldr     w2, [x20]
11012         adrp    x20, :got:p_vendor_block_table
11013         ldr     x0, [x0]
11014         lsl     w2, w2, 1
11015         bl      ftl_memset
11016         ldr     x22, [x27, #:got_lo12:c_ftl_nand_max_vendor_blks]
11017         ldr     x0, [x23, #:got_lo12:p_vendor_block_ver_table]
11018         mov     w1, 0
11019         ldrh    w2, [x22]
11020         ldr     x0, [x0]
11021         lsl     w2, w2, 2
11022         bl      ftl_memset
11023         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11024         mov     w1, 0
11025         ldrh    w2, [x22]
11026         adrp    x22, :got:gSysInfo
11027         ldr     x0, [x0]
11028         lsl     w2, w2, 1
11029         bl      ftl_memset
11030         ldr     x0, [x22, #:got_lo12:gSysInfo]
11031         mov     w1, 255
11032         mov     w2, 12
11033         bl      ftl_memset
11034         str     x28, [x29,144]
11035         adrp    x0, :got:c_ftl_nand_data_blks_per_plane
11036         str     x25, [x29,136]
11037         str     x27, [x29,128]
11038         str     x22, [x29,120]
11039         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_blks_per_plane]
11040         ldrh    w0, [x0]
11041         str     w0, [x29,156]
11042 .L1474:
11043         adrp    x0, :got:c_ftl_nand_blk_pre_plane
11044         ldr     w1, [x29,156]
11045         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
11046         ldrh    w0, [x0]
11047         cmp     w0, w1
11048         bls     .L1550
11049         mov     w22, 0
11050         adrp    x25, :got:c_ftl_nand_byte_pre_oob
11051         mov     w27, w22
11052         mov     w26, 4
11053 .L1517:
11054         adrp    x0, :got:c_ftl_nand_planes_num
11055         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
11056         ldrh    w0, [x0]
11057         cmp     w0, w27
11058         bls     .L1551
11059         adrp    x0, :got:p_plane_order_table
11060         ldrh    w1, [x29,156]
11061         ldr     x0, [x0, #:got_lo12:p_plane_order_table]
11062         ldrb    w0, [x0,w27,sxtw]
11063         bl      V2P_block
11064         uxth    w28, w0
11065         bl      FtlBbmIsBadBlock
11066         cbnz    w0, .L1475
11067         adrp    x1, :got:req_read
11068         mov     w0, 56
11069         lsl     w28, w28, 10
11070         umull   x0, w22, w0
11071         ldr     x2, [x1, #:got_lo12:req_read]
11072         ldr     x1, [x2]
11073         add     x1, x1, x0
11074         str     w28, [x1,4]
11075         ldr     x1, [x2]
11076         adrp    x2, :got:p_gc_spare_buf
11077         add     x1, x1, x0
11078         str     xzr, [x1,8]
11079         ldr     x0, [x25, #:got_lo12:c_ftl_nand_byte_pre_oob]
11080         ldr     x2, [x2, #:got_lo12:p_gc_spare_buf]
11081         ldrh    w0, [x0]
11082         ldr     x2, [x2]
11083         mul     w0, w22, w0
11084         add     w22, w22, 1
11085         sdiv    w0, w0, w26
11086         uxth    w22, w22
11087         add     x0, x2, x0, sxtw 2
11088         str     x0, [x1,16]
11089 .L1475:
11090         add     w27, w27, 1
11091         uxth    w27, w27
11092         b       .L1517
11093 .L1551:
11094         adrp    x0, :got:req_read
11095         mov     w1, w22
11096         mov     w2, 1
11097         mov     x27, 0
11098         mov     w28, 65535
11099         ldr     x0, [x0, #:got_lo12:req_read]
11100         ldr     x0, [x0]
11101         bl      FlashReadPages
11102 .L1477:
11103         cmp     w22, w27, uxth
11104         bls     .L1552
11105         mov     x0, 56
11106         mul     x5, x27, x0
11107         adrp    x0, :got:req_read
11108         ldr     x6, [x0, #:got_lo12:req_read]
11109         ldr     x2, [x6]
11110         add     x1, x2, x5
11111         ldr     w7, [x2,x5]
11112         ldr     w0, [x1,4]
11113         cmn     w7, #1
11114         ldr     x26, [x1,16]
11115         ubfx    x25, x0, 10, 16
11116         bne     .L1479
11117         add     w0, w0, 1
11118         str     w0, [x1,4]
11119         mov     w1, 1
11120         str     x7, [x29,96]
11121         ldr     x0, [x6]
11122         mov     w2, w1
11123         str     x6, [x29,104]
11124         add     x0, x0, x5
11125         str     x5, [x29,112]
11126         bl      FlashReadPages
11127         ldrh    w0, [x26]
11128         ldr     x5, [x29,112]
11129         cmp     w0, w28
11130         ldr     x6, [x29,104]
11131         ldr     x7, [x29,96]
11132         bne     .L1479
11133         ldr     x0, [x6]
11134         str     w7, [x0,x5]
11135 .L1479:
11136         adrp    x0, :got:req_read
11137         ldr     x0, [x0, #:got_lo12:req_read]
11138         ldr     x0, [x0]
11139         ldr     w0, [x0,x5]
11140         cmn     w0, #1
11141         beq     .L1481
11142         adrp    x0, :got:g_GlobalSysVersion
11143         ldr     x0, [x0, #:got_lo12:g_GlobalSysVersion]
11144         ldr     w0, [x0]
11145         cmn     w0, #1
11146         beq     .L1482
11147         ldr     w1, [x26,4]
11148         cmp     w0, w1
11149         bhi     .L1483
11150 .L1482:
11151         ldr     w0, [x26,4]
11152         cmn     w0, #1
11153         beq     .L1483
11154         adrp    x1, :got:g_GlobalSysVersion
11155         add     w0, w0, 1
11156         ldr     x1, [x1, #:got_lo12:g_GlobalSysVersion]
11157         str     w0, [x1]
11158 .L1483:
11159         ldrh    w0, [x26]
11160         mov     w1, 61604
11161         cmp     w0, w1
11162         beq     .L1485
11163         bhi     .L1486
11164         mov     w1, 61574
11165         cmp     w0, w1
11166         bne     .L1484
11167         ldr     x0, [x29,128]
11168         ldr     x6, [x23, #:got_lo12:p_vendor_block_ver_table]
11169         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_vendor_blks]
11170         ldr     x6, [x6]
11171         ldrh    w5, [x0]
11172         ldr     x0, [x29,144]
11173         sub     w1, w5, #1
11174         ldr     x0, [x0, #:got_lo12:g_totle_vendor_block]
11175         sxth    w2, w1
11176         ldrh    w0, [x0]
11177         sub     w1, w1, w0
11178         b       .L1502
11179 .L1486:
11180         mov     w1, 61634
11181         cmp     w0, w1
11182         beq     .L1488
11183         cmp     w0, w28
11184         bne     .L1484
11185         mov     w0, w25
11186         mov     w1, 0
11187         b       .L1547
11188 .L1488:
11189         ldr     x0, [x29,136]
11190         ldr     x6, [x24, #:got_lo12:p_map_block_ver_table]
11191         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_map_blks]
11192         ldr     x6, [x6]
11193         ldr     w5, [x0]
11194         ldr     x0, [x19, #:got_lo12:g_totle_map_block]
11195         uxth    w1, w5
11196         ldrh    w0, [x0]
11197         sub     w2, w1, #1
11198         sub     w1, w1, w0
11199         sxth    w2, w2
11200         sub     w1, w1, #1
11201         sxth    w1, w1
11202 .L1490:
11203         cmp     w2, w1
11204         ble     .L1553
11205         sbfiz   x7, x2, 2, 32
11206         ldr     w10, [x26,4]
11207         sxth    x8, w2
11208         ldr     w9, [x6,x7]
11209         cmp     w10, w9
11210         bls     .L1491
11211         ldr     w1, [x6]
11212         cbnz    w1, .L1492
11213         cmp     w0, w5
11214         bne     .L1493
11215 .L1492:
11216         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11217         mov     w1, 1
11218         str     x8, [x29,96]
11219         str     x2, [x29,104]
11220         ldr     x0, [x0]
11221         str     x7, [x29,112]
11222         ldrh    w0, [x0]
11223         bl      FtlFreeSysBlkQueueIn
11224         ldr     x7, [x29,112]
11225         ldr     x2, [x29,104]
11226         ldr     x8, [x29,96]
11227         b       .L1494
11228 .L1493:
11229         ldr     x1, [x19, #:got_lo12:g_totle_map_block]
11230         add     w0, w0, 1
11231         strh    w0, [x1]
11232 .L1494:
11233         mov     w0, 0
11234 .L1495:
11235         cmp     w0, w2
11236         beq     .L1554
11237         ldr     x1, [x24, #:got_lo12:p_map_block_ver_table]
11238         ldr     x6, [x1]
11239         sxtw    x1, w0
11240         lsl     x5, x1, 2
11241         lsl     x1, x1, 1
11242         add     x9, x6, x5
11243         add     w0, w0, 1
11244         sxth    w0, w0
11245         ldr     w9, [x9,4]
11246         str     w9, [x6,x5]
11247         ldr     x5, [x21, #:got_lo12:p_map_block_table]
11248         ldr     x5, [x5]
11249         add     x6, x5, x1
11250         ldrh    w6, [x6,2]
11251         strh    w6, [x5,x1]
11252         b       .L1495
11253 .L1554:
11254         ldr     x0, [x24, #:got_lo12:p_map_block_ver_table]
11255         ldr     w1, [x26,4]
11256         ldr     x0, [x0]
11257         str     w1, [x0,x7]
11258         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11259         ldr     x0, [x0]
11260         strh    w25, [x0,x8,lsl 1]
11261         tbz     w2, #31, .L1546
11262         b       .L1481
11263 .L1491:
11264         sub     w2, w2, #1
11265         sxth    w2, w2
11266         b       .L1490
11267 .L1553:
11268         tbz     w2, #31, .L1501
11269         b       .L1481
11270 .L1546:
11271         ldr     x1, [x29,136]
11272         ldr     x0, [x19, #:got_lo12:g_totle_map_block]
11273         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_map_blks]
11274         ldrh    w0, [x0]
11275         ldr     w1, [x1]
11276         sub     w1, w1, w0
11277         sub     w1, w1, #1
11278         cmp     w2, w1, sxth
11279         bgt     .L1484
11280 .L1501:
11281         ldr     x1, [x19, #:got_lo12:g_totle_map_block]
11282         add     w0, w0, 1
11283         sxtw    x2, w2
11284         strh    w0, [x1]
11285         ldr     w1, [x26,4]
11286         ldr     x0, [x24, #:got_lo12:p_map_block_ver_table]
11287         ldr     x0, [x0]
11288         str     w1, [x0,x2,lsl 2]
11289         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11290         b       .L1548
11291 .L1510:
11292         sbfiz   x7, x2, 2, 32
11293         ldr     w10, [x26,4]
11294         sxth    x8, w2
11295         ldr     w9, [x6,x7]
11296         cmp     w10, w9
11297         bhi     .L1555
11298         sub     w2, w2, #1
11299         sxth    w2, w2
11300 .L1502:
11301         cmp     w2, w1
11302         bgt     .L1510
11303         b       .L1509
11304 .L1555:
11305         ldr     w1, [x6]
11306         cbnz    w1, .L1504
11307         cmp     w0, w5
11308         bne     .L1505
11309 .L1504:
11310         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11311         mov     w1, 1
11312         str     x8, [x29,96]
11313         str     x7, [x29,104]
11314         ldr     x0, [x0]
11315         str     x2, [x29,112]
11316         ldrh    w0, [x0]
11317         bl      FtlFreeSysBlkQueueIn
11318         ldr     x2, [x29,112]
11319         ldr     x7, [x29,104]
11320         ldr     x8, [x29,96]
11321         b       .L1506
11322 .L1505:
11323         ldr     x1, [x29,144]
11324         add     w0, w0, 1
11325         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
11326         strh    w0, [x1]
11327 .L1506:
11328         mov     w0, 0
11329 .L1507:
11330         cmp     w0, w2
11331         beq     .L1556
11332         ldr     x1, [x23, #:got_lo12:p_vendor_block_ver_table]
11333         ldr     x6, [x1]
11334         sxtw    x1, w0
11335         lsl     x5, x1, 2
11336         lsl     x1, x1, 1
11337         add     x9, x6, x5
11338         add     w0, w0, 1
11339         sxth    w0, w0
11340         ldr     w9, [x9,4]
11341         str     w9, [x6,x5]
11342         ldr     x5, [x20, #:got_lo12:p_vendor_block_table]
11343         ldr     x5, [x5]
11344         add     x6, x5, x1
11345         ldrh    w6, [x6,2]
11346         strh    w6, [x5,x1]
11347         b       .L1507
11348 .L1556:
11349         ldr     x0, [x23, #:got_lo12:p_vendor_block_ver_table]
11350         ldr     w1, [x26,4]
11351         ldr     x0, [x0]
11352         str     w1, [x0,x7]
11353         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11354         ldr     x0, [x0]
11355         strh    w25, [x0,x8,lsl 1]
11356 .L1509:
11357         tbnz    w2, #31, .L1481
11358         ldr     x0, [x29,144]
11359         ldr     x5, [x0, #:got_lo12:g_totle_vendor_block]
11360         ldr     x0, [x29,128]
11361         ldrh    w1, [x5]
11362         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_vendor_blks]
11363         ldrh    w0, [x0]
11364         sub     w0, w0, #1
11365         sub     w0, w0, w1
11366         cmp     w2, w0, sxth
11367         bgt     .L1484
11368         add     w1, w1, 1
11369         strh    w1, [x5]
11370         sxtw    x2, w2
11371         ldr     w1, [x26,4]
11372         ldr     x0, [x23, #:got_lo12:p_vendor_block_ver_table]
11373         ldr     x0, [x0]
11374         str     w1, [x0,x2,lsl 2]
11375         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11376 .L1548:
11377         ldr     x0, [x0]
11378         strh    w25, [x0,x2,lsl 1]
11379         b       .L1484
11380 .L1485:
11381         ldr     x0, [x29,120]
11382         ldr     x0, [x0, #:got_lo12:gSysInfo]
11383         ldrh    w1, [x0]
11384         cmp     w1, w28
11385         beq     .L1549
11386         ldrh    w0, [x0,4]
11387         cmp     w0, w28
11388         beq     .L1514
11389         mov     w1, 1
11390         bl      FtlFreeSysBlkQueueIn
11391 .L1514:
11392         ldr     x0, [x29,120]
11393         ldr     w1, [x26,4]
11394         ldr     x0, [x0, #:got_lo12:gSysInfo]
11395         ldr     w2, [x0,8]
11396         cmp     w2, w1
11397         bcs     .L1515
11398         ldrh    w1, [x0]
11399         strh    w1, [x0,4]
11400 .L1549:
11401         ldr     w1, [x26,4]
11402         strh    w25, [x0]
11403         str     w1, [x0,8]
11404         b       .L1484
11405 .L1515:
11406         strh    w25, [x0,4]
11407         b       .L1484
11408 .L1481:
11409         mov     w0, w25
11410         mov     w1, 1
11411 .L1547:
11412         bl      FtlFreeSysBlkQueueIn
11413 .L1484:
11414         add     x27, x27, 1
11415         b       .L1477
11416 .L1552:
11417         ldr     w0, [x29,156]
11418         add     w26, w0, 1
11419         uxth    w0, w26
11420         str     w0, [x29,156]
11421         b       .L1474
11422 .L1550:
11423         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11424         ldr     x1, [x0]
11425         ldrh    w0, [x1]
11426         cbz     w0, .L1518
11427 .L1521:
11428         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11429         ldr     x2, [x0]
11430         ldrh    w0, [x2]
11431         cbz     w0, .L1519
11432         b       .L1541
11433 .L1518:
11434         ldr     x19, [x19, #:got_lo12:g_totle_map_block]
11435         ldrh    w2, [x19]
11436         cbz     w2, .L1521
11437         ldr     x2, [x29,136]
11438         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_map_blks]
11439         ldr     w2, [x2]
11440 .L1522:
11441         cmp     w0, w2
11442         bcs     .L1521
11443         ldrh    w3, [x1,w0,sxtw 1]
11444         cbz     w3, .L1523
11445         mov     w6, w0
11446 .L1524:
11447         ldr     x1, [x29,136]
11448         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_map_blks]
11449         ldr     w1, [x1]
11450         cmp     w0, w1
11451         bcs     .L1521
11452         ldr     x3, [x21, #:got_lo12:p_map_block_table]
11453         sxtw    x5, w0
11454         sub     w1, w0, w6
11455         lsl     x2, x5, 1
11456         add     w0, w0, 1
11457         ldr     x4, [x3]
11458         sxtw    x1, w1
11459         sxth    w0, w0
11460         ldrh    w7, [x4,x2]
11461         strh    w7, [x4,x1,lsl 1]
11462         ldr     x4, [x24, #:got_lo12:p_map_block_ver_table]
11463         ldr     x4, [x4]
11464         ldr     w5, [x4,x5,lsl 2]
11465         str     w5, [x4,x1,lsl 2]
11466         ldr     x1, [x3]
11467         strh    wzr, [x1,x2]
11468         b       .L1524
11469 .L1523:
11470         add     w0, w0, 1
11471         sxth    w0, w0
11472         b       .L1522
11473 .L1519:
11474         ldr     x1, [x29,144]
11475         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
11476         ldrh    w1, [x1]
11477         cbz     w1, .L1541
11478         ldr     x1, [x29,128]
11479         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
11480         ldrh    w1, [x1]
11481 .L1527:
11482         cmp     w0, w1
11483         mov     w6, w0
11484         bge     .L1541
11485         ldrh    w3, [x2,w0,sxtw 1]
11486         cbz     w3, .L1528
11487 .L1529:
11488         ldr     x1, [x29,128]
11489         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
11490         ldrh    w1, [x1]
11491         cmp     w0, w1
11492         bge     .L1541
11493         ldr     x3, [x20, #:got_lo12:p_vendor_block_table]
11494         sxtw    x5, w0
11495         sub     w1, w0, w6
11496         lsl     x2, x5, 1
11497         add     w0, w0, 1
11498         ldr     x4, [x3]
11499         sxtw    x1, w1
11500         sxth    w0, w0
11501         ldrh    w7, [x4,x2]
11502         strh    w7, [x4,x1,lsl 1]
11503         ldr     x4, [x23, #:got_lo12:p_vendor_block_ver_table]
11504         ldr     x4, [x4]
11505         ldr     w5, [x4,x5,lsl 2]
11506         str     w5, [x4,x1,lsl 2]
11507         ldr     x1, [x3]
11508         strh    wzr, [x1,x2]
11509         b       .L1529
11510 .L1528:
11511         add     w0, w0, 1
11512         sxth    w0, w0
11513         b       .L1527
11514 .L1541:
11515         mov     w0, 0
11516         ldp     x19, x20, [sp,16]
11517         ldp     x21, x22, [sp,32]
11518         ldp     x23, x24, [sp,48]
11519         ldp     x25, x26, [sp,64]
11520         ldp     x27, x28, [sp,80]
11521         ldp     x29, x30, [sp], 160
11522         ret
11523         .size   FtlScanSysBlk, .-FtlScanSysBlk
11524         .align  2
11525         .global FtlLoadSysInfo
11526         .type   FtlLoadSysInfo, %function
11527 FtlLoadSysInfo:
11528         stp     x29, x30, [sp, -80]!
11529         adrp    x0, :got:p_sys_spare_buf
11530         add     x29, sp, 0
11531         stp     x19, x20, [sp,16]
11532         adrp    x20, :got:req_sys
11533         str     x25, [sp,64]
11534         stp     x21, x22, [sp,32]
11535         stp     x23, x24, [sp,48]
11536         ldr     x1, [x20, #:got_lo12:req_sys]
11537         adrp    x22, :got:c_ftl_nand_data_blks_per_plane
11538         adrp    x21, :got:p_valid_page_count_table
11539         adrp    x23, :got:gSysInfo
11540         str     xzr, [x1,8]
11541         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
11542         ldr     x0, [x0]
11543         str     x0, [x1,16]
11544         ldr     x1, [x22, #:got_lo12:c_ftl_nand_data_blks_per_plane]
11545         ldr     x0, [x21, #:got_lo12:p_valid_page_count_table]
11546         ldrh    w2, [x1]
11547         mov     w1, 0
11548         ldr     x0, [x0]
11549         lsl     w2, w2, 1
11550         bl      ftl_memset
11551         ldr     x24, [x23, #:got_lo12:gSysInfo]
11552         mov     w1, 65535
11553         ldrh    w0, [x24]
11554         cmp     w0, w1
11555         bne     .L1558
11556 .L1562:
11557         mov     w19, -1
11558         b       .L1559
11559 .L1558:
11560         mov     w1, 1
11561         adrp    x25, :got:p_sys_data_buf
11562         bl      FtlGetLastWrittenPage
11563         sxth    w19, w0
11564         add     w0, w0, 1
11565         strh    w0, [x24,2]
11566 .L1560:
11567         tbnz    w19, #31, .L1565
11568         ldr     x0, [x23, #:got_lo12:gSysInfo]
11569         mov     w1, 1
11570         ldr     x24, [x20, #:got_lo12:req_sys]
11571         mov     w2, w1
11572         ldrh    w0, [x0]
11573         orr     w0, w19, w0, lsl 10
11574         str     w0, [x24,4]
11575         ldr     x0, [x25, #:got_lo12:p_sys_data_buf]
11576         ldr     x0, [x0]
11577         str     x0, [x24,8]
11578         mov     x0, x24
11579         bl      FlashReadPages
11580         ldr     w0, [x24]
11581         cmn     w0, #1
11582         beq     .L1561
11583 .L1565:
11584         adrp    x24, :got:g_sys_save_data
11585         ldr     x20, [x20, #:got_lo12:req_sys]
11586         mov     w2, 48
11587         ldr     x19, [x24, #:got_lo12:g_sys_save_data]
11588         ldr     x1, [x20,8]
11589         mov     x0, x19
11590         bl      ftl_memcpy
11591         ldr     x22, [x22, #:got_lo12:c_ftl_nand_data_blks_per_plane]
11592         ldr     x21, [x21, #:got_lo12:p_valid_page_count_table]
11593         ldr     x1, [x20,8]
11594         ldrh    w2, [x22]
11595         ldr     x0, [x21]
11596         add     x1, x1, 48
11597         lsl     w2, w2, 1
11598         bl      ftl_memcpy
11599         ldr     w1, [x19]
11600         mov     w0, 19539
11601         movk    w0, 0x4654, lsl 16
11602         mov     x2, x24
11603         cmp     w1, w0
11604         beq     .L1572
11605         b       .L1562
11606 .L1561:
11607         sub     w19, w19, #1
11608         sxth    w19, w19
11609         b       .L1560
11610 .L1572:
11611         ldr     x23, [x23, #:got_lo12:gSysInfo]
11612         adrp    x0, :got:c_ftl_nand_die_num
11613         ldrh    w3, [x19,8]
11614         ldrb    w1, [x19,10]
11615         strh    w3, [x23,6]
11616         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
11617         ldrh    w0, [x0]
11618         cmp     w1, w0
11619         bne     .L1562
11620         adrp    x0, :got:g_MaxLbn
11621         adrp    x4, :got:c_ftl_nand_sec_pre_page
11622         ldrh    w6, [x19,14]
11623         adrp    x20, :got:g_gc_superblock
11624         ldr     x0, [x0, #:got_lo12:g_MaxLbn]
11625         str     w3, [x0]
11626         adrp    x0, :got:c_ftl_nand_page_pre_blk
11627         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11628         ldrh    w1, [x0]
11629         adrp    x0, :got:g_MaxLpn
11630         ldr     x0, [x0, #:got_lo12:g_MaxLpn]
11631         mul     w1, w1, w3
11632         str     w1, [x0]
11633         adrp    x0, :got:g_MaxLbaSector
11634         ldr     x4, [x4, #:got_lo12:c_ftl_nand_sec_pre_page]
11635         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
11636         ldrh    w4, [x4]
11637         mul     w1, w1, w4
11638         str     w1, [x0]
11639         adrp    x1, :got:c_ftl_nand_max_data_blks
11640         adrp    x0, :got:gBbtInfo
11641         adrp    x4, :got:c_ftl_nand_data_op_blks_per_plane
11642         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_data_blks]
11643         ldr     x0, [x0, #:got_lo12:gBbtInfo]
11644         ldr     x4, [x4, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
11645         ldr     w1, [x1]
11646         ldrh    w0, [x0,6]
11647         sub     w0, w1, w0
11648         adrp    x1, :got:c_ftl_nand_planes_num
11649         sub     w0, w0, w3
11650         adrp    x3, :got:g_active_superblock
11651         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
11652         ldrh    w1, [x1]
11653         udiv    w0, w0, w1
11654         ldrh    w1, [x19,16]
11655         strh    w0, [x4]
11656         lsr     w4, w1, 6
11657         and     w1, w1, 63
11658         ldr     x0, [x3, #:got_lo12:g_active_superblock]
11659         strb    w1, [x0,6]
11660         ldrb    w1, [x19,11]
11661         strh    w6, [x0]
11662         strh    w4, [x0,2]
11663         strb    w1, [x0,8]
11664         mov     w0, -1
11665         ldr     x1, [x20, #:got_lo12:g_gc_superblock]
11666         strh    w0, [x1]
11667         strh    wzr, [x1,2]
11668         strb    wzr, [x1,6]
11669         strb    wzr, [x1,8]
11670         adrp    x1, :got:g_buffer_superblock
11671         ldrh    w0, [x19,18]
11672         ldr     x4, [x1, #:got_lo12:g_buffer_superblock]
11673         strh    w0, [x4]
11674         ldrh    w5, [x19,20]
11675         lsr     w0, w5, 6
11676         strh    w0, [x4,2]
11677         ldrb    w0, [x19,12]
11678         and     w5, w5, 63
11679         strb    w0, [x4,8]
11680         adrp    x0, :got:g_gc_temp_superblock
11681         strb    w5, [x4,6]
11682         mov     x21, x0
11683         ldrh    w5, [x19,22]
11684         ldr     x4, [x0, #:got_lo12:g_gc_temp_superblock]
11685         strh    w5, [x4]
11686         ldrh    w5, [x19,24]
11687         lsr     w7, w5, 6
11688         and     w5, w5, 63
11689         strb    w5, [x4,6]
11690         ldrb    w5, [x19,13]
11691         strh    w7, [x4,2]
11692         strb    w5, [x4,8]
11693         adrp    x4, :got:g_totle_gc_page_count
11694         ldr     w5, [x19,32]
11695         ldr     x4, [x4, #:got_lo12:g_totle_gc_page_count]
11696         str     wzr, [x4]
11697         adrp    x4, :got:g_totle_write_page_count
11698         ldr     x4, [x4, #:got_lo12:g_totle_write_page_count]
11699         str     wzr, [x4]
11700         adrp    x4, :got:g_totle_read_page_count
11701         ldr     x4, [x4, #:got_lo12:g_totle_read_page_count]
11702         str     wzr, [x4]
11703         adrp    x4, :got:g_totle_l2p_write_count
11704         ldr     x4, [x4, #:got_lo12:g_totle_l2p_write_count]
11705         str     wzr, [x4]
11706         adrp    x4, :got:g_totle_mlc_erase_count
11707         ldr     x4, [x4, #:got_lo12:g_totle_mlc_erase_count]
11708         str     w5, [x4]
11709         adrp    x4, :got:g_totle_slc_erase_count
11710         ldr     w5, [x19,40]
11711         mov     x19, x1
11712         ldr     x4, [x4, #:got_lo12:g_totle_slc_erase_count]
11713         str     wzr, [x4]
11714         adrp    x4, :got:g_max_erase_count
11715         ldr     x4, [x4, #:got_lo12:g_max_erase_count]
11716         str     wzr, [x4]
11717         adrp    x4, :got:g_totle_cache_write_count
11718         ldr     x4, [x4, #:got_lo12:g_totle_cache_write_count]
11719         str     wzr, [x4]
11720         adrp    x4, :got:g_GlobalSysVersion
11721         ldr     x4, [x4, #:got_lo12:g_GlobalSysVersion]
11722         ldr     w7, [x4]
11723         cmp     w5, w7
11724         bls     .L1566
11725         str     w5, [x4]
11726 .L1566:
11727         adrp    x0, :got:g_GlobalDataVersion
11728         ldr     x2, [x2, #:got_lo12:g_sys_save_data]
11729         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
11730         ldr     w1, [x2,36]
11731         ldr     w2, [x0]
11732         cmp     w1, w2
11733         bls     .L1567
11734         str     w1, [x0]
11735 .L1567:
11736         mov     w0, 65535
11737         cmp     w6, w0
11738         beq     .L1568
11739         ldr     x0, [x3, #:got_lo12:g_active_superblock]
11740         bl      make_superblock
11741 .L1568:
11742         ldr     x0, [x19, #:got_lo12:g_buffer_superblock]
11743         mov     w1, 65535
11744         ldrh    w2, [x0]
11745         cmp     w2, w1
11746         beq     .L1569
11747         bl      make_superblock
11748 .L1569:
11749         ldr     x0, [x21, #:got_lo12:g_gc_temp_superblock]
11750         mov     w1, 65535
11751         ldrh    w2, [x0]
11752         cmp     w2, w1
11753         beq     .L1570
11754         bl      make_superblock
11755 .L1570:
11756         ldr     x0, [x20, #:got_lo12:g_gc_superblock]
11757         mov     w1, 65535
11758         mov     w19, 0
11759         ldrh    w2, [x0]
11760         cmp     w2, w1
11761         beq     .L1559
11762         bl      make_superblock
11763 .L1559:
11764         mov     w0, w19
11765         ldr     x25, [sp,64]
11766         ldp     x19, x20, [sp,16]
11767         ldp     x21, x22, [sp,32]
11768         ldp     x23, x24, [sp,48]
11769         ldp     x29, x30, [sp], 80
11770         ret
11771         .size   FtlLoadSysInfo, .-FtlLoadSysInfo
11772         .align  2
11773         .global FtlGcScanTempBlk
11774         .type   FtlGcScanTempBlk, %function
11775 FtlGcScanTempBlk:
11776         stp     x29, x30, [sp, -128]!
11777         add     x29, sp, 0
11778         stp     x19, x20, [sp,16]
11779         adrp    x19, .LANCHOR2
11780         stp     x25, x26, [sp,64]
11781         mov     x26, x0
11782         add     x0, x19, :lo12:.LANCHOR2
11783         stp     x23, x24, [sp,48]
11784         stp     x21, x22, [sp,32]
11785         stp     x27, x28, [sp,80]
11786         mov     w23, w1
11787         ldrh    w25, [x0,128]
11788         mov     w0, 65535
11789         cmp     w25, w0
11790         beq     .L1594
11791         cbnz    w25, .L1574
11792         b       .L1575
11793 .L1594:
11794         mov     w25, 0
11795 .L1574:
11796         adrp    x0, :got:c_ftl_nand_page_pre_blk
11797         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11798         ldrh    w0, [x0]
11799         cmp     w23, w0
11800         bne     .L1576
11801 .L1575:
11802         bl      FtlGcPageVarInit
11803 .L1576:
11804         mov     w22, -1
11805         mov     w20, 0
11806         mov     w21, 65535
11807         adrp    x24, :got:req_read
11808 .L1588:
11809         ldrh    w0, [x26]
11810         strb    wzr, [x26,8]
11811         cmp     w0, w21
11812         beq     .L1595
11813 .L1578:
11814 .L1591:
11815         adrp    x0, :got:c_ftl_nand_planes_num
11816         adrp    x1, :got:c_ftl_nand_byte_pre_oob
11817         mov     x2, x26
11818         mov     w27, 0
11819         mov     w10, 4
11820         adrp    x11, :got:p_gc_spare_buf
11821         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
11822         ldr     x1, [x1, #:got_lo12:c_ftl_nand_byte_pre_oob]
11823         ldrh    w6, [x0]
11824         ldrh    w9, [x1]
11825         add     x6, x26, x6, lsl 1
11826 .L1579:
11827         cmp     x2, x6
11828         beq     .L1603
11829         ldrh    w1, [x2,16]
11830         cmp     w1, w21
11831         beq     .L1580
11832         ldr     x8, [x24, #:got_lo12:req_read]
11833         mov     w0, 56
11834         orr     w1, w25, w1, lsl 10
11835         add     w5, w27, 1
11836         umull   x0, w27, w0
11837         ldr     x7, [x8]
11838         add     x7, x7, x0
11839         str     w1, [x7,4]
11840         ldr     x1, [x8]
11841         add     x0, x1, x0
11842         mul     w1, w27, w9
11843         uxth    w27, w5
11844         str     xzr, [x0,8]
11845         sdiv    w1, w1, w10
11846         ldr     x7, [x11, #:got_lo12:p_gc_spare_buf]
11847         ldr     x7, [x7]
11848         add     x1, x7, x1, sxtw 2
11849         str     x1, [x0,16]
11850 .L1580:
11851         add     x2, x2, 2
11852         b       .L1579
11853 .L1603:
11854         ldr     x0, [x24, #:got_lo12:req_read]
11855         mov     w1, w27
11856         mov     w2, 0
11857         mov     x28, 0
11858         ldr     x0, [x0]
11859         bl      FlashReadPages
11860 .L1582:
11861         cmp     w27, w28, uxth
11862         bls     .L1604
11863         mov     x0, 56
11864         mul     x6, x28, x0
11865         adrp    x0, :got:req_read
11866         str     x6, [x29,112]
11867         ldr     x8, [x0, #:got_lo12:req_read]
11868         str     x8, [x29,104]
11869         ldr     x0, [x8]
11870         add     x0, x0, x6
11871         ldr     w1, [x0,4]
11872         str     x1, [x29,120]
11873         lsr     w0, w1, 10
11874         bl      P2V_plane
11875         uxth    w2, w0
11876         ldr     x8, [x29,104]
11877         ldr     x6, [x29,112]
11878         ldr     x0, [x8]
11879         add     x8, x0, x6
11880         ldr     w6, [x0,x6]
11881         cbnz    w6, .L1583
11882         ldr     x6, [x8,16]
11883         add     x28, x28, 1
11884         ldr     x1, [x29,120]
11885         ldrh    w0, [x6]
11886         cmp     w0, w21
11887         bne     .L1584
11888         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
11889         mov     w1, 1
11890         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
11891         str     w1, [x0]
11892         b       .L1577
11893 .L1584:
11894         ldr     w0, [x6,12]
11895         ldr     w2, [x6,8]
11896         bl      FtlGcUpdatePage
11897         b       .L1582
11898 .L1583:
11899         adrp    x0, :got:g_inkDie_check_enable
11900         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
11901         ldr     w0, [x0]
11902         cbz     w0, .L1585
11903         adrp    x0, :got:p_erase_count_table
11904         ldrh    w1, [x26]
11905         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
11906         ldr     x0, [x0]
11907         ldrh    w0, [x0,x1,lsl 1]
11908         cmp     w0, 119
11909         bls     .L1586
11910 .L1585:
11911         cmn     w6, #1
11912         bne     .L1587
11913 .L1586:
11914         ldr     w22, [x8,4]
11915 .L1587:
11916         adrp    x0, :got:p_valid_page_count_table
11917         ldrh    w1, [x26]
11918         mov     w25, 0
11919         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
11920         ldr     x0, [x0]
11921         strh    wzr, [x0,x1,lsl 1]
11922         ldrh    w0, [x26]
11923         bl      INSERT_FREE_LIST
11924         mov     w0, -1
11925         strh    w0, [x26]
11926         bl      FtlGcPageVarInit
11927         b       .L1588
11928 .L1604:
11929         add     w20, w20, 1
11930         add     w3, w25, 1
11931         cmp     w20, w23
11932         adrp    x0, :got:c_ftl_nand_page_pre_blk
11933         uxth    w25, w3
11934         bcs     .L1590
11935 .L1592:
11936         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11937         ldrh    w0, [x0]
11938         cmp     w0, w25
11939         bhi     .L1591
11940         b       .L1595
11941 .L1590:
11942         add     x2, x19, :lo12:.LANCHOR2
11943         ldrh    w1, [x2,128]
11944         cmp     w1, w21
11945         beq     .L1592
11946         add     w1, w1, w20
11947         strh    w1, [x2,128]
11948         ldr     x1, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11949         ldrh    w1, [x1]
11950         cmp     w1, w25
11951         bls     .L1592
11952         b       .L1593
11953 .L1595:
11954         mov     w2, 0
11955 .L1577:
11956         add     x19, x19, :lo12:.LANCHOR2
11957         mov     w0, -1
11958         strh    w25, [x26,2]
11959         mov     w1, w25
11960         strb    w2, [x26,6]
11961         strh    w0, [x19,128]
11962         mov     x0, x26
11963         bl      ftl_sb_update_avl_pages
11964 .L1593:
11965         mov     w0, w22
11966         ldp     x19, x20, [sp,16]
11967         ldp     x21, x22, [sp,32]
11968         ldp     x23, x24, [sp,48]
11969         ldp     x25, x26, [sp,64]
11970         ldp     x27, x28, [sp,80]
11971         ldp     x29, x30, [sp], 128
11972         ret
11973         .size   FtlGcScanTempBlk, .-FtlGcScanTempBlk
11974         .align  2
11975         .global FlashProgPages
11976         .type   FlashProgPages, %function
11977 FlashProgPages:
11978         stp     x29, x30, [sp, -192]!
11979         add     x29, sp, 0
11980         stp     x19, x20, [sp,16]
11981         mov     x19, x0
11982         adrp    x0, :got:gpNandParaInfo
11983         stp     x21, x22, [sp,32]
11984         stp     x23, x24, [sp,48]
11985         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
11986         mov     w24, w1
11987         stp     x25, x26, [sp,64]
11988         stp     x27, x28, [sp,80]
11989         mov     w26, w2
11990         str     w3, [x29,120]
11991         ldr     x0, [x0]
11992         mov     w21, 0
11993         mov     w27, 56
11994         ldrb    w1, [x0,19]
11995         adrp    x0, :got:gNandParaInfo
11996         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
11997         ldrb    w28, [x0,9]
11998         add     x0, x29, 128
11999         str     x0, [x29,112]
12000         add     x0, x29, 132
12001         str     x0, [x29,104]
12002         sub     w0, w1, #1
12003         str     w0, [x29,100]
12004 .L1606:
12005         cmp     w21, w24
12006         adrp    x20, :got:gNandMaxDie
12007         bcs     .L1655
12008         umull   x20, w21, w27
12009         ldr     x2, [x29,112]
12010         mov     w1, w26
12011         add     x25, x19, x20
12012         ldr     x3, [x29,104]
12013         sub     w4, w24, w21
12014         mov     x0, x25
12015         bl      LogAddr2PhyAddr
12016         mov     w23, w0
12017         adrp    x1, :got:gNandMaxDie
12018         ldr     w0, [x29,132]
12019         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
12020         ldrb    w2, [x1]
12021         cmp     w0, w2
12022         bcc     .L1607
12023         mov     w0, -1
12024         str     w0, [x19,x20]
12025         b       .L1608
12026 .L1607:
12027         adrp    x1, :got:gMultiPageProgEn
12028         adrp    x22, :got:gDieOp
12029         ldr     x1, [x1, #:got_lo12:gMultiPageProgEn]
12030         ldr     x3, [x22, #:got_lo12:gDieOp]
12031         ldrb    w1, [x1]
12032         cmp     w1, wzr
12033         uxtw    x1, w0
12034         mov     x0, 24
12035         csel    w23, w23, wzr, ne
12036         madd    x0, x1, x0, x3
12037         ldr     x0, [x0,8]
12038         cbz     x0, .L1610
12039         cmp     w2, 1
12040         bne     .L1611
12041         adrp    x0, :got:gpNandc
12042         ldr     x0, [x0, #:got_lo12:gpNandc]
12043         ldr     x0, [x0]
12044         bl      NandcIqrWaitFlashReady
12045 .L1611:
12046         ldrb    w0, [x29,132]
12047         bl      FlashWaitCmdDone
12048 .L1610:
12049         ldr     x2, [x22, #:got_lo12:gDieOp]
12050         mov     x0, 24
12051         ldr     w1, [x29,132]
12052         madd    x0, x1, x0, x2
12053         ldr     w2, [x29,128]
12054         str     x25, [x0,8]
12055         str     xzr, [x0,16]
12056         str     w2, [x0,4]
12057         cbz     w23, .L1612
12058         add     w2, w21, 1
12059         umull   x2, w2, w27
12060         add     x2, x19, x2
12061         str     x2, [x0,16]
12062 .L1612:
12063         adrp    x0, :got:DieCsIndex
12064         ldr     x22, [x22, #:got_lo12:gDieOp]
12065         ldr     x0, [x0, #:got_lo12:DieCsIndex]
12066         ldrb    w20, [x0,x1]
12067         mov     x0, 24
12068         mul     x1, x1, x0
12069         adrp    x0, :got:gNandMaxDie
12070         strb    w20, [x22,x1]
12071         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
12072         ldrb    w0, [x0]
12073         cmp     w0, 1
12074         mov     w0, w20
12075         bne     .L1613
12076         bl      NandcWaitFlashReady
12077         b       .L1614
12078 .L1613:
12079         bl      NandcFlashCs
12080         adrp    x0, :got:DieAddrs
12081         ldr     w1, [x29,132]
12082         ldr     x0, [x0, #:got_lo12:DieAddrs]
12083         ldr     w0, [x0,x1,lsl 2]
12084         ldr     w1, [x29,128]
12085         cmp     w0, wzr
12086         mov     w0, w20
12087         cset    w2, ne
12088         bl      FlashWaitReadyEN
12089         mov     w0, w20
12090         bl      NandcFlashDeCs
12091 .L1614:
12092         ldr     w0, [x29,100]
12093         cmp     w0, 5
12094         bhi     .L1615
12095         adrp    x0, :got:read_retry_cur_offset
12096         ldr     x0, [x0, #:got_lo12:read_retry_cur_offset]
12097         ldrb    w0, [x0,w20,sxtw]
12098         cbz     w0, .L1615
12099         adrp    x2, :got:gReadRetryInfo
12100         mov     w0, w20
12101         mov     w3, 0
12102         ldr     x2, [x2, #:got_lo12:gReadRetryInfo]
12103         add     x2, x2, 4
12104         ldrb    w1, [x2,-3]
12105         bl      HynixSetRRPara
12106 .L1615:
12107         mov     w0, w20
12108         bl      NandcFlashCs
12109         ldr     w1, [x29,128]
12110         mov     w0, w20
12111         bl      FlashProgFirstCmd
12112         ldr     x3, [x25,8]
12113         mov     w0, w20
12114         ldr     x4, [x25,16]
12115         mov     w1, 1
12116         mov     w2, w28
12117         bl      NandcXferData
12118         cbz     w23, .L1616
12119         ldr     w1, [x29,128]
12120         mov     w0, w20
12121         bl      FlashProgDpFirstCmd
12122         adrp    x0, :got:DieAddrs
12123         ldr     w1, [x29,132]
12124         ldr     x0, [x0, #:got_lo12:DieAddrs]
12125         ldr     w0, [x0,x1,lsl 2]
12126         ldr     w1, [x29,128]
12127         cmp     w0, wzr
12128         mov     w0, w20
12129         cset    w2, ne
12130         bl      FlashWaitReadyEN
12131         adrp    x0, :got:gBlockPageAlignSize
12132         ldr     w1, [x29,128]
12133         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
12134         ldr     w2, [x0]
12135         mov     w0, w20
12136         add     w1, w2, w1
12137         bl      FlashProgDpSecondCmd
12138         add     w4, w21, 1
12139         mov     w0, w20
12140         mov     w1, 1
12141         mov     w2, w28
12142         umull   x4, w4, w27
12143         add     x4, x19, x4
12144         ldr     x3, [x4,8]
12145         ldr     x4, [x4,16]
12146         bl      NandcXferData
12147 .L1616:
12148         ldr     w1, [x29,128]
12149         mov     w0, w20
12150         add     w21, w21, w23
12151         bl      FlashProgSecondCmd
12152         mov     w0, w20
12153         bl      NandcFlashDeCs
12154 .L1608:
12155         add     w21, w21, 1
12156         b       .L1606
12157 .L1655:
12158         adrp    x0, :got:gpNandc
12159         ldr     x0, [x0, #:got_lo12:gpNandc]
12160         ldr     x0, [x0]
12161         bl      NandcIqrWaitFlashReady
12162         adrp    x0, :got:gpNandc1
12163         ldr     x0, [x0, #:got_lo12:gpNandc1]
12164         ldr     x0, [x0]
12165         cbz     x0, .L1618
12166         adrp    x1, :got:gNandc1_enable
12167         ldr     x1, [x1, #:got_lo12:gNandc1_enable]
12168         ldrb    w1, [x1]
12169         cbz     w1, .L1618
12170         bl      NandcIqrWaitFlashReady
12171 .L1618:
12172         mov     w21, 0
12173 .L1619:
12174         ldr     x0, [x20, #:got_lo12:gNandMaxDie]
12175         ldrb    w0, [x0]
12176         cmp     w21, w0
12177         bcs     .L1656
12178         mov     w0, w21
12179         add     w21, w21, 1
12180         bl      FlashWaitCmdDone
12181         b       .L1619
12182 .L1656:
12183         ldr     w0, [x29,120]
12184         cbz     w0, .L1654
12185         adrp    x23, .LC99
12186         adrp    x25, .LC98
12187         adrp    x27, .LC97
12188         mov     w22, 0
12189         add     x23, x23, :lo12:.LC99
12190         add     x25, x25, :lo12:.LC98
12191         add     x27, x27, :lo12:.LC97
12192 .L1622:
12193         cmp     w22, w24
12194         beq     .L1654
12195         ldr     w0, [x19]
12196         cmn     w0, #1
12197         bne     .L1623
12198         adrp    x0, .LC96
12199         ldr     w1, [x19,4]
12200         add     x0, x0, :lo12:.LC96
12201         bl      printk
12202         b       .L1624
12203 .L1623:
12204         sub     w4, w24, w22
12205         mov     w1, w26
12206         add     x2, x29, 128
12207         add     x3, x29, 132
12208         mov     x0, x19
12209         adrp    x20, :got:gFlashProgCheckBuffer
12210         adrp    x21, :got:gFlashProgCheckSpareBuffer
12211         bl      LogAddr2PhyAddr
12212         ldr     x4, [x20, #:got_lo12:gFlashProgCheckBuffer]
12213         add     x3, x29, 136
12214         mov     x1, x19
12215         mov     x2, 56
12216         str     x4, [x29,120]
12217         ldr     x0, [x4]
12218         str     wzr, [x0]
12219         ldr     x28, [x21, #:got_lo12:gFlashProgCheckSpareBuffer]
12220         ldr     x0, [x28]
12221         str     wzr, [x0]
12222         mov     x0, x3
12223         bl      memcpy
12224         mov     x3, x0
12225         ldr     x4, [x29,120]
12226         mov     w1, 1
12227         mov     w2, w26
12228         ldr     x0, [x4]
12229         str     x0, [x29,144]
12230         ldr     x0, [x28]
12231         str     x0, [x29,152]
12232         mov     x0, x3
12233         bl      FlashReadPages
12234         ldr     w28, [x29,136]
12235         cmn     w28, #1
12236         bne     .L1625
12237         ldr     w1, [x19,4]
12238         mov     x0, x27
12239         bl      printk
12240         str     w28, [x19]
12241 .L1625:
12242         ldr     x0, [x19,16]
12243         cbz     x0, .L1626
12244         ldr     x21, [x21, #:got_lo12:gFlashProgCheckSpareBuffer]
12245         ldr     w2, [x0]
12246         ldr     x0, [x21]
12247         ldr     w3, [x0]
12248         cmp     w2, w3
12249         beq     .L1626
12250         ldr     w1, [x19,4]
12251         mov     x0, x25
12252         bl      printk
12253         mov     w0, -1
12254         str     w0, [x19]
12255 .L1626:
12256         ldr     x0, [x19,8]
12257         cbz     x0, .L1624
12258         ldr     x20, [x20, #:got_lo12:gFlashProgCheckBuffer]
12259         ldr     w2, [x0]
12260         ldr     x0, [x20]
12261         ldr     w3, [x0]
12262         cmp     w2, w3
12263         beq     .L1624
12264         ldr     w1, [x19,4]
12265         mov     x0, x23
12266         bl      printk
12267         mov     w0, -1
12268         str     w0, [x19]
12269 .L1624:
12270         add     w22, w22, 1
12271         add     x19, x19, 56
12272         b       .L1622
12273 .L1654:
12274         mov     w0, 0
12275         ldp     x19, x20, [sp,16]
12276         ldp     x21, x22, [sp,32]
12277         ldp     x23, x24, [sp,48]
12278         ldp     x25, x26, [sp,64]
12279         ldp     x27, x28, [sp,80]
12280         ldp     x29, x30, [sp], 192
12281         ret
12282         .size   FlashProgPages, .-FlashProgPages
12283         .align  2
12284         .type   FlashTestBlk.part.20, %function
12285 FlashTestBlk.part.20:
12286         stp     x29, x30, [sp, -176]!
12287         mov     w1, 165
12288         mov     w2, 32
12289         add     x29, sp, 0
12290         stp     x19, x20, [sp,16]
12291         adrp    x20, :got:gFlashPageBuffer1
12292         str     x21, [sp,32]
12293         uxth    w21, w0
12294         add     x19, x29, 56
12295         lsl     w21, w21, 10
12296         ldr     x20, [x20, #:got_lo12:gFlashPageBuffer1]
12297         ldr     x0, [x20]
12298         str     x0, [x29,64]
12299         add     x0, x29, 112
12300         str     x0, [x29,72]
12301         bl      ftl_memset
12302         ldr     x0, [x20]
12303         mov     w2, 8
12304         mov     w1, 90
12305         bl      ftl_memset
12306         str     w21, [x29,60]
12307         mov     x0, x19
12308         mov     w1, 0
12309         bl      FlashEraseBlocks
12310         mov     w1, 1
12311         mov     x0, x19
12312         mov     w2, w1
12313         mov     w3, w1
12314         bl      FlashProgPages
12315         ldr     w0, [x29,56]
12316         mov     w1, 1
12317         cmn     w0, #1
12318         mov     x0, x19
12319         csetm   w20, eq
12320         bl      FlashEraseBlocks
12321         ldr     x21, [sp,32]
12322         mov     w0, w20
12323         ldp     x19, x20, [sp,16]
12324         ldp     x29, x30, [sp], 176
12325         ret
12326         .size   FlashTestBlk.part.20, .-FlashTestBlk.part.20
12327         .align  2
12328         .global FlashTestBlk
12329         .type   FlashTestBlk, %function
12330 FlashTestBlk:
12331         adrp    x1, :got:gNandFlashIdbBlockAddr
12332         uxth    w2, w0
12333         stp     x29, x30, [sp, -16]!
12334         mov     w0, 0
12335         add     x29, sp, 0
12336         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
12337         ldr     w1, [x1]
12338         cmp     w2, w1
12339         bcc     .L1659
12340         mov     w0, w2
12341         bl      FlashTestBlk.part.20
12342 .L1659:
12343         ldp     x29, x30, [sp], 16
12344         ret
12345         .size   FlashTestBlk, .-FlashTestBlk
12346         .align  2
12347         .global FlashMakeFactorBbt
12348         .type   FlashMakeFactorBbt, %function
12349 FlashMakeFactorBbt:
12350         stp     x29, x30, [sp, -240]!
12351         add     x29, sp, 0
12352         stp     x23, x24, [sp,48]
12353         adrp    x23, :got:gNandPhyInfo
12354         adrp    x24, :got:gFlashSpareBuffer
12355         stp     x19, x20, [sp,16]
12356         stp     x21, x22, [sp,32]
12357         ldr     x1, [x23, #:got_lo12:gNandPhyInfo]
12358         adrp    x22, :got:gpNandParaInfo
12359         stp     x25, x26, [sp,64]
12360         stp     x27, x28, [sp,80]
12361         adrp    x20, :got:gBlockPageAlignSize
12362         ldr     x19, [x24, #:got_lo12:gFlashSpareBuffer]
12363         ldrh    w0, [x1,12]
12364         ldrh    w21, [x1,14]
12365         mov     w1, 1
12366         ldr     x25, [x19]
12367         mul     w21, w0, w21
12368         ldr     x0, [x22, #:got_lo12:gpNandParaInfo]
12369         uxth    w21, w21
12370         ldr     x0, [x0]
12371         ldrb    w26, [x0,24]
12372         ldr     x0, [x20, #:got_lo12:gBlockPageAlignSize]
12373         ldr     w0, [x0]
12374         str     w0, [x29,164]
12375         adrp    x0, .LC100
12376         add     x0, x0, :lo12:.LC100
12377         bl      printk
12378         ldr     x0, [x19]
12379         mov     w1, 0
12380         mov     w2, 4096
12381         mov     w19, 0
12382         bl      ftl_memset
12383         str     x24, [x29,136]
12384         lsr     w0, w21, 4
12385         str     w0, [x29,160]
12386         and     w0, w26, 1
12387         str     w0, [x29,112]
12388         and     w0, w26, 2
12389         str     x23, [x29,168]
12390         str     x22, [x29,152]
12391         uxtb    w0, w0
12392         str     w0, [x29,108]
12393         sub     w0, w21, #1
12394         str     x20, [x29,128]
12395         uxth    w0, w0
12396         str     w0, [x29,104]
12397 .L1662:
12398         adrp    x0, :got:gNandMaxDie
12399         str     x0, [x29,144]
12400         ldr     x1, [x0, #:got_lo12:gNandMaxDie]
12401         ldrb    w1, [x1]
12402         cmp     w1, w19
12403         bls     .L1708
12404         adrp    x0, :got:FbbtBlk
12405         str     x0, [x29,120]
12406         sxtw    x24, w19
12407         ldr     x1, [x0, #:got_lo12:FbbtBlk]
12408         ldrh    w22, [x1,w19,sxtw 1]
12409         cbnz    w22, .L1687
12410         ldr     x1, [x29,168]
12411         adrp    x20, :got:gFlashPageBuffer0
12412         mov     w23, w22
12413         ldr     x1, [x1, #:got_lo12:gNandPhyInfo]
12414         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer0]
12415         ldrh    w2, [x1,20]
12416         mov     w1, w22
12417         ldr     x0, [x0]
12418         lsl     w2, w2, 9
12419         bl      ftl_memset
12420         adrp    x0, :got:DieCsIndex
12421         ldr     x0, [x0, #:got_lo12:DieCsIndex]
12422         ldrb    w28, [x0,x24]
12423         and     w0, w26, 4
12424         uxtb    w0, w0
12425         str     w0, [x29,116]
12426 .L1664:
12427         uxth    w27, w23
12428         cmp     w27, w21
12429         bcs     .L1672
12430         mov     w0, -1
12431         strb    w0, [x29,182]
12432         strb    w0, [x29,183]
12433         ldr     w0, [x29,112]
12434         cbz     w0, .L1665
12435         ldr     w0, [x29,164]
12436         and     w1, w0, 65535
12437         adrp    x0, :got:DieAddrs
12438         ldr     x0, [x0, #:got_lo12:DieAddrs]
12439         ldr     w2, [x0,x24,lsl 2]
12440         mov     w0, w28
12441         madd    w1, w23, w1, w2
12442         add     x2, x29, 182
12443         bl      FlashReadSpare
12444 .L1665:
12445         ldr     w0, [x29,108]
12446         cbz     w0, .L1666
12447         ldr     x0, [x29,152]
12448         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
12449         ldr     x0, [x0]
12450         ldrh    w2, [x0,10]
12451         adrp    x0, :got:DieAddrs
12452         sub     w2, w2, #1
12453         ldr     x0, [x0, #:got_lo12:DieAddrs]
12454         ldr     w0, [x0,x24,lsl 2]
12455         add     w2, w2, w0
12456         ldr     w0, [x29,164]
12457         and     w1, w0, 65535
12458         mov     w0, w28
12459         madd    w1, w23, w1, w2
12460         add     x2, x29, 183
12461         bl      FlashReadSpare
12462 .L1666:
12463         ldr     x0, [x29,152]
12464         ldrb    w1, [x29,182]
12465         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
12466         ldr     x0, [x0]
12467         ldrb    w0, [x0,7]
12468         cmp     w0, 8
12469         beq     .L1688
12470         cmp     w0, 1
12471         bne     .L1667
12472 .L1688:
12473         mov     w0, 1
12474         cbz     w1, .L1669
12475         ldrb    w0, [x29,183]
12476         cmp     w0, wzr
12477         cset    w0, eq
12478         b       .L1669
12479 .L1667:
12480         cmp     w1, 255
12481         mov     w0, 1
12482         bne     .L1669
12483         ldrb    w0, [x29,183]
12484         cmp     w0, 255
12485         cset    w0, ne
12486 .L1669:
12487         ldr     w1, [x29,116]
12488         cbz     w1, .L1670
12489         ldr     x0, [x29,128]
12490         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
12491         ldr     w2, [x0]
12492         adrp    x0, :got:DieAddrs
12493         ldr     x0, [x0, #:got_lo12:DieAddrs]
12494         ldr     w1, [x0,x24,lsl 2]
12495         mov     w0, w28
12496         madd    w1, w23, w2, w1
12497         bl      SandiskProgTestBadBlock
12498 .L1670:
12499         cbz     w0, .L1671
12500         adrp    x0, .LC101
12501         mov     w1, w19
12502         mov     w2, w23
12503         add     x0, x0, :lo12:.LC101
12504         add     w22, w22, 1
12505         bl      printk
12506         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer0]
12507         ubfx    x1, x27, 5, 11
12508         lsl     x1, x1, 2
12509         uxth    w22, w22
12510         ldr     x2, [x0]
12511         mov     w0, 1
12512         lsl     w27, w0, w27
12513         ldr     w0, [x2,x1]
12514         orr     w27, w0, w27
12515         ldr     x0, [x29,144]
12516         str     w27, [x2,x1]
12517         ldr     w1, [x29,160]
12518         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
12519         ldrb    w0, [x0]
12520         mul     w0, w1, w0
12521         cmp     w22, w0
12522         bgt     .L1672
12523 .L1671:
12524         add     w23, w23, 1
12525         b       .L1664
12526 .L1672:
12527         adrp    x0, .LC102
12528         mov     w1, w19
12529         add     x0, x0, :lo12:.LC102
12530         mov     w2, w22
12531         bl      printk
12532         ldr     x0, [x29,144]
12533         ldr     w1, [x29,160]
12534         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
12535         ldrb    w0, [x0]
12536         mul     w0, w1, w0
12537         cmp     w22, w0
12538         blt     .L1674
12539         ldr     x1, [x29,168]
12540         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer0]
12541         ldr     x1, [x1, #:got_lo12:gNandPhyInfo]
12542         ldr     x0, [x0]
12543         ldrh    w2, [x1,20]
12544         mov     w1, 0
12545         lsl     w2, w2, 9
12546         bl      ftl_memset
12547 .L1674:
12548         cbnz    w19, .L1676
12549         adrp    x0, :got:gNandFlashIdbBlockAddr
12550         adrp    x27, .LC103
12551         mov     w22, w19
12552         str     x0, [x29,144]
12553         adrp    x23, :got:gNandIDBResBlkNum
12554         add     x27, x27, :lo12:.LC103
12555         ldr     x1, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
12556         ldrh    w28, [x1]
12557 .L1677:
12558         ldr     x0, [x23, #:got_lo12:gNandIDBResBlkNum]
12559         ldrb    w0, [x0]
12560         cmp     w28, w0
12561         bcs     .L1709
12562         mov     w0, w28
12563         bl      FlashTestBlk
12564         cbz     w0, .L1678
12565         mov     w1, w28
12566         mov     x0, x27
12567         bl      printk
12568         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer0]
12569         ubfx    x1, x28, 5, 11
12570         lsl     x1, x1, 2
12571         add     w3, w22, 1
12572         ldr     x4, [x0]
12573         mov     w0, 1
12574         lsl     w0, w0, w28
12575         uxth    w22, w3
12576         ldr     w5, [x4,x1]
12577         orr     w0, w5, w0
12578         str     w0, [x4,x1]
12579 .L1678:
12580         add     w2, w28, 1
12581         uxth    w28, w2
12582         b       .L1677
12583 .L1709:
12584         ldr     x1, [x29,144]
12585         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
12586         ldr     w1, [x1]
12587         sub     w0, w0, w1
12588         cmp     w22, w0
12589         bcc     .L1676
12590         ldr     x1, [x29,168]
12591         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer0]
12592         ldr     x1, [x1, #:got_lo12:gNandPhyInfo]
12593         ldr     x0, [x0]
12594         ldrh    w2, [x1,20]
12595         mov     w1, 0
12596         lsl     w2, w2, 9
12597         bl      ftl_memset
12598 .L1676:
12599         adrp    x27, .LC104
12600         ldr     w22, [x29,104]
12601         mul     w28, w19, w21
12602         add     x23, x27, :lo12:.LC104
12603         add     x27, x29, 184
12604 .L1681:
12605         mov     w2, w22
12606         mov     x0, x23
12607         mov     w1, w19
12608         bl      printk
12609         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer0]
12610         ldr     x2, [x0]
12611 .L1682:
12612         ubfx    x0, x22, 5, 11
12613         ldr     w1, [x2,x0,lsl 2]
12614         lsr     w1, w1, w22
12615         and     w0, w1, 1
12616         tbz     x1, 0, .L1710
12617         sub     w4, w22, #1
12618         uxth    w22, w4
12619         b       .L1682
12620 .L1710:
12621         ldr     x1, [x29,120]
12622         ldr     x1, [x1, #:got_lo12:FbbtBlk]
12623         strh    w22, [x1,x24,lsl 1]
12624         mov     w1, -3872
12625         strh    w22, [x25,2]
12626         strh    w1, [x25]
12627         add     w1, w22, w28
12628         strh    w0, [x25,8]
12629         lsl     w1, w1, 10
12630         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer0]
12631         ldr     x0, [x0]
12632         str     x0, [x27,8]
12633         ldr     x0, [x29,136]
12634         ldr     x0, [x0, #:got_lo12:gFlashSpareBuffer]
12635         str     w1, [x27,4]
12636         mov     w1, 1
12637         ldr     x0, [x0]
12638         str     x0, [x27,16]
12639         mov     x0, x27
12640         bl      FlashEraseBlocks
12641         mov     w1, 1
12642         mov     x0, x27
12643         mov     w2, w1
12644         mov     w3, w1
12645         bl      FlashProgPages
12646         ldr     w0, [x27]
12647         cbz     w0, .L1687
12648         sub     w4, w22, #1
12649         uxth    w22, w4
12650         b       .L1681
12651 .L1687:
12652         add     w19, w19, 1
12653         uxtb    w19, w19
12654         b       .L1662
12655 .L1708:
12656         ldp     x19, x20, [sp,16]
12657         ldp     x21, x22, [sp,32]
12658         ldp     x23, x24, [sp,48]
12659         ldp     x25, x26, [sp,64]
12660         ldp     x27, x28, [sp,80]
12661         ldp     x29, x30, [sp], 240
12662         ret
12663         .size   FlashMakeFactorBbt, .-FlashMakeFactorBbt
12664         .align  2
12665         .global FtlLowFormatEraseBlock
12666         .type   FtlLowFormatEraseBlock, %function
12667 FtlLowFormatEraseBlock:
12668         stp     x29, x30, [sp, -128]!
12669         add     x29, sp, 0
12670         stp     x21, x22, [sp,32]
12671         uxth    w21, w0
12672         adrp    x0, :got:g_cur_erase_blk
12673         stp     x19, x20, [sp,16]
12674         stp     x23, x24, [sp,48]
12675         ldr     x0, [x0, #:got_lo12:g_cur_erase_blk]
12676         uxtb    w23, w1
12677         stp     x25, x26, [sp,64]
12678         stp     x27, x28, [sp,80]
12679         mov     w25, 0
12680         str     w21, [x0]
12681         mov     w20, w25
12682         mov     w19, w25
12683         mov     w24, 56
12684         adrp    x26, :got:p_plane_order_table
12685         adrp    x27, :got:c_ftl_nand_byte_pre_oob
12686         mov     w28, 4
12687 .L1712:
12688         adrp    x0, :got:c_ftl_nand_planes_num
12689         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
12690         ldrh    w0, [x0]
12691         cmp     w0, w25
12692         bls     .L1750
12693         adrp    x1, :got:req_erase
12694         umull   x0, w25, w24
12695         ldr     x1, [x1, #:got_lo12:req_erase]
12696         ldr     x1, [x1]
12697         str     wzr, [x1,x0]
12698         mov     w1, w21
12699         ldr     x0, [x26, #:got_lo12:p_plane_order_table]
12700         ldrb    w0, [x0,w25,sxtw]
12701         bl      V2P_block
12702         uxth    w22, w0
12703         mov     w1, w22
12704         cbnz    w23, .L1713
12705 .L1717:
12706         mov     w0, w1
12707         bl      FtlBbmIsBadBlock
12708         cbnz    w0, .L1751
12709         adrp    x1, :got:req_erase
12710         lsl     w22, w22, 10
12711         umull   x0, w20, w24
12712         ldr     x1, [x1, #:got_lo12:req_erase]
12713         ldr     x3, [x1]
12714         add     x3, x3, x0
12715         str     w22, [x3,4]
12716         adrp    x3, :got:p_io_spare_buf
12717         ldr     x1, [x1]
12718         add     x1, x1, x0
12719         str     xzr, [x1,8]
12720         ldr     x0, [x27, #:got_lo12:c_ftl_nand_byte_pre_oob]
12721         ldr     x3, [x3, #:got_lo12:p_io_spare_buf]
12722         ldrh    w0, [x0]
12723         ldr     x3, [x3]
12724         mul     w0, w20, w0
12725         add     w20, w20, 1
12726         sdiv    w0, w0, w28
12727         uxth    w20, w20
12728         add     x0, x3, x0, sxtw 2
12729         str     x0, [x1,16]
12730         b       .L1716
12731 .L1713:
12732         str     x1, [x29,120]
12733         bl      IsBlkInVendorPart
12734         ldr     x1, [x29,120]
12735         cbnz    w0, .L1716
12736         b       .L1717
12737 .L1751:
12738         add     w19, w19, 1
12739         uxth    w19, w19
12740 .L1716:
12741         add     w2, w25, 1
12742         uxth    w25, w2
12743         b       .L1712
12744 .L1750:
12745         cbz     w20, .L1720
12746         adrp    x22, :got:req_erase
12747         mov     w1, w20
12748         mov     x24, 0
12749         mov     x25, 56
12750         ldr     x0, [x22, #:got_lo12:req_erase]
12751         ldr     x0, [x0]
12752         bl      FlashEraseBlocks
12753 .L1721:
12754         cmp     w20, w24, uxth
12755         bls     .L1752
12756         ldr     x1, [x22, #:got_lo12:req_erase]
12757         mul     x0, x24, x25
12758         ldr     x1, [x1]
12759         add     x2, x1, x0
12760         ldr     w0, [x1,x0]
12761         cmn     w0, #1
12762         bne     .L1722
12763         ldr     w0, [x2,4]
12764         add     w19, w19, 1
12765         lsr     w0, w0, 10
12766         uxth    w19, w19
12767         bl      FtlBbmMapBadBlock
12768 .L1722:
12769         add     x24, x24, 1
12770         b       .L1721
12771 .L1752:
12772         cmp     w23, wzr
12773         cset    w26, ne
12774         cbz     w26, .L1738
12775         adrp    x0, :got:g_inkDie_check_enable
12776         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
12777         ldr     w0, [x0]
12778         cbz     w0, .L1738
12779         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
12780         mov     w23, 5
12781         mov     w27, 1
12782         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
12783         ldrh    w25, [x0]
12784         udiv    w23, w25, w23
12785         sub     w23, w23, #1
12786         uxth    w0, w23
12787         str     w0, [x29,120]
12788         b       .L1724
12789 .L1738:
12790         mov     w0, 6
12791         mov     w27, 0
12792         str     w0, [x29,120]
12793         mov     w25, 1
12794 .L1724:
12795         mov     w24, 0
12796         mov     w28, 56
12797 .L1736:
12798         mov     w23, 0
12799         mov     w20, w23
12800 .L1725:
12801         adrp    x0, :got:c_ftl_nand_planes_num
12802         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
12803         ldrh    w0, [x0]
12804         cmp     w0, w23
12805         bls     .L1753
12806         ldr     x1, [x22, #:got_lo12:req_erase]
12807         umull   x0, w23, w28
12808         ldr     x1, [x1]
12809         str     wzr, [x1,x0]
12810         adrp    x0, :got:p_plane_order_table
12811         mov     w1, w21
12812         ldr     x0, [x0, #:got_lo12:p_plane_order_table]
12813         ldrb    w0, [x0,w23,sxtw]
12814         bl      V2P_block
12815         uxth    w2, w0
12816         str     w2, [x29,116]
12817         mov     w1, w2
12818         cbnz    w26, .L1726
12819 .L1729:
12820         mov     w0, w1
12821         bl      FtlBbmIsBadBlock
12822         cbnz    w0, .L1728
12823         ldr     x4, [x22, #:got_lo12:req_erase]
12824         umull   x0, w20, w28
12825         ldr     w2, [x29,116]
12826         ldr     x1, [x4]
12827         add     x1, x1, x0
12828         add     w3, w24, w2, lsl 10
12829         mov     w2, 4
12830         str     w3, [x1,4]
12831         ldr     x1, [x4]
12832         add     x1, x1, x0
12833         adrp    x0, :got:p_io_data_buf_0
12834         ldr     x0, [x0, #:got_lo12:p_io_data_buf_0]
12835         ldr     x0, [x0]
12836         str     x0, [x1,8]
12837         adrp    x0, :got:c_ftl_nand_byte_pre_oob
12838         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
12839         ldrh    w0, [x0]
12840         mul     w0, w20, w0
12841         add     w20, w20, 1
12842         sdiv    w0, w0, w2
12843         adrp    x2, :got:p_io_data_buf_1
12844         uxth    w20, w20
12845         ldr     x3, [x2, #:got_lo12:p_io_data_buf_1]
12846         ldr     x3, [x3]
12847         add     x0, x3, x0, sxtw 2
12848         str     x0, [x1,16]
12849         b       .L1728
12850 .L1726:
12851         str     x1, [x29,104]
12852         bl      IsBlkInVendorPart
12853         ldr     x1, [x29,104]
12854         cbz     w0, .L1729
12855 .L1728:
12856         add     w2, w23, 1
12857         uxth    w23, w2
12858         b       .L1725
12859 .L1753:
12860         cbz     w20, .L1720
12861         ldr     x0, [x22, #:got_lo12:req_erase]
12862         mov     w1, w20
12863         mov     w2, w27
12864         mov     w3, 1
12865         mov     x23, 0
12866         ldr     x0, [x0]
12867         bl      FlashProgPages
12868 .L1732:
12869         cmp     w20, w23, uxth
12870         bls     .L1754
12871         ldr     x1, [x22, #:got_lo12:req_erase]
12872         mov     x0, 56
12873         mul     x0, x23, x0
12874         ldr     x3, [x1]
12875         add     x1, x3, x0
12876         ldr     w0, [x3,x0]
12877         cmn     w0, #1
12878         bne     .L1733
12879         ldr     w0, [x1,4]
12880         add     w19, w19, 1
12881         lsr     w0, w0, 10
12882         uxth    w19, w19
12883         bl      FtlBbmMapBadBlock
12884         b       .L1734
12885 .L1733:
12886         cbz     w26, .L1734
12887         ldr     w0, [x1,4]
12888         mov     w1, 1
12889         lsr     w0, w0, 10
12890         bl      FtlFreeSysBlkQueueIn
12891 .L1734:
12892         add     x23, x23, 1
12893         b       .L1732
12894 .L1754:
12895         ldr     w0, [x29,120]
12896         add     w24, w24, w0
12897         uxth    w24, w24
12898         cmp     w24, w25
12899         bcc     .L1736
12900         cmp     w21, 63
12901         bhi     .L1720
12902         ldr     x22, [x22, #:got_lo12:req_erase]
12903         mov     w1, w20
12904         ldr     x0, [x22]
12905         bl      FlashEraseBlocks
12906 .L1720:
12907         mov     w0, w19
12908         ldp     x19, x20, [sp,16]
12909         ldp     x21, x22, [sp,32]
12910         ldp     x23, x24, [sp,48]
12911         ldp     x25, x26, [sp,64]
12912         ldp     x27, x28, [sp,80]
12913         ldp     x29, x30, [sp], 128
12914         ret
12915         .size   FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock
12916         .align  2
12917         .global FtlBbmTblFlush
12918         .type   FtlBbmTblFlush, %function
12919 FtlBbmTblFlush:
12920         stp     x29, x30, [sp, -112]!
12921         add     x29, sp, 0
12922         stp     x21, x22, [sp,32]
12923         adrp    x21, :got:p_sys_data_buf
12924         adrp    x22, :got:p_sys_spare_buf
12925         stp     x19, x20, [sp,16]
12926         adrp    x20, :got:req_sys
12927         mov     x19, 0
12928         ldr     x0, [x21, #:got_lo12:p_sys_data_buf]
12929         stp     x25, x26, [sp,64]
12930         stp     x23, x24, [sp,48]
12931         stp     x27, x28, [sp,80]
12932         ldr     x1, [x20, #:got_lo12:req_sys]
12933         adrp    x24, :got:c_ftl_nand_die_num
12934         ldr     x0, [x0]
12935         adrp    x25, :got:gBbtInfo
12936         adrp    x26, :got:c_ftl_nand_bbm_buf_size
12937         str     x0, [x1,8]
12938         ldr     x2, [x22, #:got_lo12:p_sys_spare_buf]
12939         ldr     x2, [x2]
12940         str     x2, [x1,16]
12941         adrp    x2, :got:c_ftl_nand_byte_pre_page
12942         mov     w1, 0
12943         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
12944         ldrh    w2, [x2]
12945         bl      ftl_memset
12946         str     x21, [x29,104]
12947         str     x22, [x29,96]
12948 .L1756:
12949         ldr     x1, [x24, #:got_lo12:c_ftl_nand_die_num]
12950         mov     w0, w19
12951         adrp    x23, :got:gBbtInfo
12952         add     x19, x19, 1
12953         ldrh    w1, [x1]
12954         cmp     w0, w1
12955         bge     .L1763
12956         ldr     x1, [x26, #:got_lo12:c_ftl_nand_bbm_buf_size]
12957         ldrh    w2, [x1]
12958         ldr     x1, [x20, #:got_lo12:req_sys]
12959         mul     w0, w0, w2
12960         ldr     x3, [x1,8]
12961         lsl     w2, w2, 2
12962         ldr     x1, [x25, #:got_lo12:gBbtInfo]
12963         add     x0, x3, x0, sxtw 2
12964         add     x1, x1, x19, lsl 3
12965         ldr     x1, [x1,24]
12966         bl      ftl_memcpy
12967         b       .L1756
12968 .L1763:
12969         ldr     x0, [x20, #:got_lo12:req_sys]
12970         mov     w1, 255
12971         mov     w2, 16
12972         adrp    x24, .LC105
12973         adrp    x25, .LC106
12974         mov     w26, 0
12975         ldr     x21, [x0,16]
12976         add     x24, x24, :lo12:.LC105
12977         adrp    x27, :got:c_ftl_nand_page_pre_slc_blk
12978         adrp    x28, :got:req_erase
12979         mov     x0, x21
12980         add     x25, x25, :lo12:.LC106
12981         bl      ftl_memset
12982         mov     w0, -3887
12983         strh    w0, [x21]
12984         ldr     x0, [x23, #:got_lo12:gBbtInfo]
12985         ldr     w1, [x0,8]
12986         str     w1, [x21,4]
12987         ldrh    w1, [x0]
12988         strh    w1, [x21,2]
12989         ldrh    w1, [x0,4]
12990         ldrh    w0, [x0,6]
12991         strh    w0, [x21,10]
12992         adrp    x0, :got:c_ftl_nand_sys_blks_per_plane
12993         strh    w1, [x21,8]
12994         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
12995         ldr     w0, [x0]
12996         strh    w0, [x21,12]
12997 .L1758:
12998         ldr     x0, [x29,104]
12999         ldr     x22, [x20, #:got_lo12:req_sys]
13000         ldr     x0, [x0, #:got_lo12:p_sys_data_buf]
13001         ldr     x0, [x0]
13002         str     x0, [x22,8]
13003         ldr     x0, [x29,96]
13004         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
13005         str     wzr, [x22]
13006         ldr     x0, [x0]
13007         str     x0, [x22,16]
13008         ldr     x19, [x23, #:got_lo12:gBbtInfo]
13009         ldrh    w4, [x21,10]
13010         ldrh    w1, [x19]
13011         ldrh    w2, [x19,2]
13012         ldrh    w3, [x19,4]
13013         orr     w0, w2, w1, lsl 10
13014         str     w0, [x22,4]
13015         mov     x0, x24
13016         bl      printk
13017         mov     w1, 1
13018         mov     x0, x22
13019         mov     w2, w1
13020         mov     w3, w1
13021         bl      FlashProgPages
13022         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13023         ldrh    w1, [x19,2]
13024         ldrh    w0, [x0]
13025         sub     w0, w0, #1
13026         cmp     w1, w0
13027         blt     .L1759
13028         ldr     w0, [x19,8]
13029         ldrh    w1, [x19]
13030         add     w0, w0, 1
13031         str     w0, [x19,8]
13032         str     w0, [x21,4]
13033         strh    w1, [x21,8]
13034         ldrh    w0, [x19,4]
13035         strh    w0, [x19]
13036         strh    w1, [x19,4]
13037         lsl     w0, w0, 10
13038         strh    wzr, [x19,2]
13039         str     w0, [x22,4]
13040         ldr     x1, [x28, #:got_lo12:req_erase]
13041         ldr     x2, [x1]
13042         str     w0, [x2,4]
13043         ldr     x0, [x1]
13044         mov     w1, 1
13045         bl      FlashEraseBlocks
13046         mov     w1, 1
13047         mov     x0, x22
13048         mov     w2, w1
13049         mov     w3, w1
13050         bl      FlashProgPages
13051 .L1759:
13052         bl      FtlBbtInfoPrint
13053         ldr     x1, [x23, #:got_lo12:gBbtInfo]
13054         ldrh    w0, [x1,2]
13055         add     w0, w0, 1
13056         strh    w0, [x1,2]
13057         ldr     x1, [x20, #:got_lo12:req_sys]
13058         ldr     w0, [x1]
13059         cmn     w0, #1
13060         bne     .L1760
13061         ldr     w1, [x1,4]
13062         mov     x0, x25
13063         bl      printk
13064         b       .L1758
13065 .L1760:
13066         cbnz    w26, .L1764
13067         mov     w26, 1
13068         b       .L1758
13069 .L1764:
13070         mov     w0, 0
13071         ldp     x19, x20, [sp,16]
13072         ldp     x21, x22, [sp,32]
13073         ldp     x23, x24, [sp,48]
13074         ldp     x25, x26, [sp,64]
13075         ldp     x27, x28, [sp,80]
13076         ldp     x29, x30, [sp], 112
13077         ret
13078         .size   FtlBbmTblFlush, .-FtlBbmTblFlush
13079         .align  2
13080         .global allocate_data_superblock
13081         .type   allocate_data_superblock, %function
13082 allocate_data_superblock:
13083         stp     x29, x30, [sp, -128]!
13084         add     x29, sp, 0
13085         stp     x19, x20, [sp,16]
13086         stp     x21, x22, [sp,32]
13087         stp     x23, x24, [sp,48]
13088         stp     x25, x26, [sp,64]
13089         stp     x27, x28, [sp,80]
13090         mov     x19, x0
13091         adrp    x20, :got:g_num_free_superblocks
13092         adrp    x21, :got:g_inkDie_check_enable
13093         adrp    x22, :got:g_min_erase_count
13094         mov     w24, 7
13095 .L1766:
13096         adrp    x0, :got:g_gc_temp_superblock
13097         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
13098         cmp     x19, x0
13099         bne     .L1767
13100         adrp    x1, :got:g_in_swl_replace
13101         ldr     x0, [x20, #:got_lo12:g_num_free_superblocks]
13102         ldr     x4, [x21, #:got_lo12:g_inkDie_check_enable]
13103         ldr     x1, [x1, #:got_lo12:g_in_swl_replace]
13104         ldrh    w0, [x0]
13105         ldr     w4, [x4]
13106         ldr     w3, [x1]
13107         lsr     w2, w0, 1
13108         mul     w1, w0, w3
13109         add     w1, w2, w1, lsr 2
13110         uxth    w1, w1
13111         cbz     w4, .L1768
13112         ldr     x4, [x22, #:got_lo12:g_min_erase_count]
13113         ldr     w4, [x4]
13114         cmp     w4, 29
13115         bhi     .L1768
13116         cmp     w4, 2
13117         mov     w1, 0
13118         bls     .L1769
13119         tbz     x0, 0, .L1792
13120         cbz     w3, .L1769
13121 .L1792:
13122         mov     w1, w2
13123         b       .L1768
13124 .L1767:
13125         ldrb    w0, [x19,8]
13126         mov     w1, 0
13127         cmp     w0, 1
13128         bne     .L1769
13129         ldr     x2, [x21, #:got_lo12:g_inkDie_check_enable]
13130         ldr     x0, [x20, #:got_lo12:g_num_free_superblocks]
13131         ldr     w2, [x2]
13132         ldrh    w0, [x0]
13133         lsr     w1, w0, 3
13134         cbz     w2, .L1768
13135         ldr     x2, [x22, #:got_lo12:g_min_erase_count]
13136         ldr     w2, [x2]
13137         cmp     w2, 1
13138         bhi     .L1768
13139         mul     w1, w0, w24
13140         lsr     w1, w1, 3
13141 .L1768:
13142         cbz     w1, .L1769
13143         sub     w1, w1, #1
13144         uxth    w1, w1
13145 .L1769:
13146         adrp    x0, :got:p_free_data_block_list_head
13147         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
13148         bl      List_pop_index_node
13149         uxth    w26, w0
13150         ldr     x1, [x20, #:got_lo12:g_num_free_superblocks]
13151         ldrh    w0, [x1]
13152         sub     w0, w0, #1
13153         strh    w0, [x1]
13154         strh    w26, [x19]
13155         mov     x0, x19
13156         bl      make_superblock
13157         ldrb    w0, [x19,7]
13158         cbz     w0, .L1771
13159         adrp    x0, :got:c_ftl_nand_planes_num
13160         adrp    x6, :got:req_erase
13161         mov     x3, 56
13162         mov     w7, 65535
13163         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
13164         ldrh    w5, [x0]
13165         mov     x0, 0
13166         mov     w25, w0
13167         b       .L1772
13168 .L1771:
13169         adrp    x0, :got:p_valid_page_count_table
13170         ubfiz   x1, x26, 1, 16
13171         mov     w2, -1
13172         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13173         ldr     x0, [x0]
13174         strh    w2, [x0,x1]
13175         b       .L1814
13176 .L1775:
13177         ldr     x1, [x6, #:got_lo12:req_erase]
13178         ldr     x4, [x1]
13179         madd    x1, x0, x3, x4
13180         str     xzr, [x1,16]
13181         str     xzr, [x1,8]
13182         add     x1, x19, x0, lsl 1
13183         ldrh    w1, [x1,16]
13184         cmp     w1, w7
13185         beq     .L1774
13186         umull   x2, w25, w3
13187         add     w25, w25, 1
13188         lsl     w1, w1, 10
13189         add     x2, x4, x2
13190         uxth    w25, w25
13191         str     w1, [x2,4]
13192 .L1774:
13193         add     x0, x0, 1
13194 .L1772:
13195         cmp     w5, w0, uxth
13196         adrp    x23, :got:req_erase
13197         bhi     .L1775
13198         adrp    x1, :got:g_active_superblock
13199         uxtw    x27, w26
13200         adrp    x0, :got:p_erase_count_table
13201         ldr     x1, [x1, #:got_lo12:g_active_superblock]
13202         cmp     x19, x1
13203         bne     .L1776
13204         ldr     x2, [x21, #:got_lo12:g_inkDie_check_enable]
13205         ldr     w2, [x2]
13206         cbz     w2, .L1776
13207         ldr     x2, [x0, #:got_lo12:p_erase_count_table]
13208         ldr     x2, [x2]
13209         ldrh    w2, [x2,x27,lsl 1]
13210         cmp     w2, 30
13211         bls     .L1776
13212         strb    wzr, [x1,8]
13213 .L1776:
13214         ldrb    w5, [x19,8]
13215         adrp    x1, :got:c_mlc_erase_count_value
13216         adrp    x3, :got:g_totle_mlc_erase_count
13217         adrp    x2, :got:g_totle_slc_erase_count
13218         ldr     x6, [x0, #:got_lo12:p_erase_count_table]
13219         cbnz    w5, .L1777
13220         lsl     x5, x27, 1
13221         ldr     x6, [x6]
13222         mov     w7, 2
13223         ldrh    w8, [x6,x5]
13224         cbz     w8, .L1815
13225         ldr     x7, [x1, #:got_lo12:c_mlc_erase_count_value]
13226         ldrh    w7, [x7]
13227         add     w7, w8, w7
13228 .L1815:
13229         strh    w7, [x6,x5]
13230         ldr     x6, [x3, #:got_lo12:g_totle_mlc_erase_count]
13231         b       .L1816
13232 .L1777:
13233         lsl     x5, x27, 1
13234         ldr     x7, [x6]
13235         ldrh    w6, [x7,x5]
13236         add     w6, w6, 1
13237         strh    w6, [x7,x5]
13238         ldr     x6, [x2, #:got_lo12:g_totle_slc_erase_count]
13239 .L1816:
13240         ldr     w5, [x6]
13241         lsl     x27, x27, 1
13242         add     w5, w5, 1
13243         str     w5, [x6]
13244         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
13245         ldr     x0, [x0]
13246         ldrh    w5, [x0,x27]
13247         adrp    x0, :got:g_max_erase_count
13248         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
13249         ldr     w6, [x0]
13250         cmp     w5, w6
13251         bls     .L1781
13252         str     w5, [x0]
13253 .L1781:
13254         ldr     x1, [x1, #:got_lo12:c_mlc_erase_count_value]
13255         adrp    x5, :got:g_totle_avg_erase_count
13256         ldr     x3, [x3, #:got_lo12:g_totle_mlc_erase_count]
13257         ldr     x2, [x2, #:got_lo12:g_totle_slc_erase_count]
13258         ldrh    w1, [x1]
13259         ldr     w3, [x3]
13260         ldr     w0, [x2]
13261         ldr     x5, [x5, #:got_lo12:g_totle_avg_erase_count]
13262         madd    w0, w1, w3, w0
13263         adrp    x1, :got:c_ftl_nand_data_blks_per_plane
13264         mov     x3, 56
13265         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_blks_per_plane]
13266         ldrh    w1, [x1]
13267         udiv    w0, w0, w1
13268         str     w0, [x5]
13269         adrp    x0, :got:gp_ect_tbl_info
13270         ldr     x0, [x0, #:got_lo12:gp_ect_tbl_info]
13271         ldr     x1, [x0]
13272         ldr     w0, [x1,16]
13273         add     w0, w0, 1
13274         str     w0, [x1,16]
13275         mov     x0, 0
13276 .L1782:
13277         cmp     w25, w0, uxth
13278         bls     .L1817
13279         ldr     x1, [x23, #:got_lo12:req_erase]
13280         ldr     x1, [x1]
13281         madd    x1, x0, x3, x1
13282         add     x0, x0, 1
13283         ldr     w2, [x1,4]
13284         and     w2, w2, -1024
13285         str     w2, [x1,4]
13286         b       .L1782
13287 .L1817:
13288         ldr     x0, [x23, #:got_lo12:req_erase]
13289         mov     w1, w25
13290         mov     x28, 0
13291         ldr     x0, [x0]
13292         bl      FlashEraseBlocks
13293         mov     w1, w28
13294         mov     x3, 56
13295 .L1784:
13296         cmp     w25, w28, uxth
13297         bls     .L1818
13298         ldr     x2, [x23, #:got_lo12:req_erase]
13299         mul     x0, x28, x3
13300         ldr     x2, [x2]
13301         add     x5, x2, x0
13302         ldr     w2, [x2,x0]
13303         cmn     w2, #1
13304         bne     .L1785
13305         ldr     w0, [x5,4]
13306         add     w1, w1, 1
13307         str     x3, [x29,96]
13308         lsr     w0, w0, 10
13309         str     x2, [x29,104]
13310         str     x1, [x29,112]
13311         str     x1, [x29,120]
13312         bl      FtlBbmMapBadBlock
13313         add     x0, x19, x28, lsl 1
13314         ldr     x2, [x29,104]
13315         ldr     x3, [x29,96]
13316         ldr     x1, [x29,120]
13317         strh    w2, [x0,16]
13318         ldrb    w0, [x19,7]
13319         sub     w0, w0, #1
13320         strb    w0, [x19,7]
13321 .L1785:
13322         add     x28, x28, 1
13323         b       .L1784
13324 .L1818:
13325         cbz     w1, .L1787
13326         mov     w0, w26
13327         bl      update_multiplier_value
13328         bl      FtlBbmTblFlush
13329 .L1787:
13330         ldrb    w1, [x19,7]
13331         adrp    x0, :got:p_valid_page_count_table
13332         cbnz    w1, .L1788
13333         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13334         mov     w1, -1
13335         ldr     x0, [x0]
13336         strh    w1, [x0,x27]
13337 .L1814:
13338         mov     w0, w26
13339         bl      INSERT_DATA_LIST
13340         b       .L1766
13341 .L1788:
13342         adrp    x2, :got:c_ftl_nand_page_pre_blk
13343         ldr     x2, [x2, #:got_lo12:c_ftl_nand_page_pre_blk]
13344         strh    wzr, [x19,2]
13345         strb    wzr, [x19,6]
13346         ldrh    w2, [x2]
13347         strh    w26, [x19]
13348         mul     w1, w1, w2
13349         adrp    x2, :got:g_GlobalSysVersion
13350         uxth    w1, w1
13351         strh    w1, [x19,4]
13352         ldr     x2, [x2, #:got_lo12:g_GlobalSysVersion]
13353         ldr     w3, [x2]
13354         str     w3, [x19,12]
13355         add     w3, w3, 1
13356         str     w3, [x2]
13357         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13358         ldrh    w2, [x19]
13359         ldr     x0, [x0]
13360         strh    w1, [x0,x2,lsl 1]
13361         mov     w0, 0
13362         ldp     x19, x20, [sp,16]
13363         ldp     x21, x22, [sp,32]
13364         ldp     x23, x24, [sp,48]
13365         ldp     x25, x26, [sp,64]
13366         ldp     x27, x28, [sp,80]
13367         ldp     x29, x30, [sp], 128
13368         ret
13369         .size   allocate_data_superblock, .-allocate_data_superblock
13370         .align  2
13371         .global FtlGcFreeBadSuperBlk
13372         .type   FtlGcFreeBadSuperBlk, %function
13373 FtlGcFreeBadSuperBlk:
13374         stp     x29, x30, [sp, -112]!
13375         add     x29, sp, 0
13376         stp     x21, x22, [sp,32]
13377         adrp    x21, :got:g_gc_bad_block_temp_num
13378         stp     x23, x24, [sp,48]
13379         uxth    w24, w0
13380         ldr     x0, [x21, #:got_lo12:g_gc_bad_block_temp_num]
13381         stp     x19, x20, [sp,16]
13382         stp     x25, x26, [sp,64]
13383         stp     x27, x28, [sp,80]
13384         mov     w20, 0
13385         ldrh    w0, [x0]
13386         cbz     w0, .L1821
13387         adrp    x22, .LC107
13388         adrp    x23, :got:c_ftl_nand_planes_num
13389         adrp    x25, :got:p_plane_order_table
13390         adrp    x26, :got:g_gc_bad_block_temp_tbl
13391         add     x22, x22, :lo12:.LC107
13392 .L1829:
13393         ldr     x0, [x23, #:got_lo12:c_ftl_nand_planes_num]
13394         ldrh    w0, [x0]
13395         cmp     w0, w20
13396         bls     .L1830
13397         ldr     x0, [x25, #:got_lo12:p_plane_order_table]
13398         mov     w1, w24
13399         mov     w19, 0
13400         ldrb    w0, [x0,w20,sxtw]
13401         bl      V2P_block
13402         uxth    w27, w0
13403 .L1822:
13404         ldr     x28, [x21, #:got_lo12:g_gc_bad_block_temp_num]
13405         ldrh    w0, [x28]
13406         cmp     w0, w19
13407         bls     .L1831
13408         ldr     x0, [x26, #:got_lo12:g_gc_bad_block_temp_tbl]
13409         adrp    x4, :got:g_gc_bad_block_temp_tbl
13410         ldrh    w0, [x0,w19,sxtw 1]
13411         cmp     w0, w27
13412         bne     .L1823
13413         mov     w1, w27
13414         mov     x0, x22
13415         str     x4, [x29,104]
13416         bl      printk
13417         mov     w0, w27
13418         bl      FtlBbmMapBadBlock
13419         bl      FtlBbmTblFlush
13420         ldrh    w2, [x28]
13421         mov     w3, w19
13422         ldr     x4, [x29,104]
13423 .L1824:
13424         cmp     w3, w2
13425         bcs     .L1832
13426         ldr     x1, [x4, #:got_lo12:g_gc_bad_block_temp_tbl]
13427         add     w0, w3, 1
13428         ldrh    w5, [x1,w0,sxtw 1]
13429         strh    w5, [x1,w3,sxtw 1]
13430         uxth    w3, w0
13431         b       .L1824
13432 .L1832:
13433         ldr     x0, [x21, #:got_lo12:g_gc_bad_block_temp_num]
13434         sub     w2, w2, #1
13435         strh    w2, [x0]
13436 .L1823:
13437         add     w19, w19, 1
13438         uxth    w19, w19
13439         b       .L1822
13440 .L1831:
13441         add     w20, w20, 1
13442         uxth    w20, w20
13443         b       .L1829
13444 .L1830:
13445         bl      FtlGcReFreshBadBlk
13446 .L1821:
13447         mov     w0, 0
13448         ldp     x19, x20, [sp,16]
13449         ldp     x21, x22, [sp,32]
13450         ldp     x23, x24, [sp,48]
13451         ldp     x25, x26, [sp,64]
13452         ldp     x27, x28, [sp,80]
13453         ldp     x29, x30, [sp], 112
13454         ret
13455         .size   FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk
13456         .align  2
13457         .global update_vpc_list
13458         .type   update_vpc_list, %function
13459 update_vpc_list:
13460         stp     x29, x30, [sp, -32]!
13461         add     x29, sp, 0
13462         str     x19, [sp,16]
13463         uxth    w19, w0
13464         adrp    x0, :got:p_valid_page_count_table
13465         ubfiz   x1, x19, 1, 16
13466         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13467         ldr     x0, [x0]
13468         ldrh    w1, [x0,x1]
13469         cbnz    w1, .L1834
13470         adrp    x0, :got:g_gc_superblock
13471         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
13472         ldrh    w2, [x0]
13473         cmp     w2, w19
13474         bne     .L1835
13475         mov     w1, -1
13476         strh    w1, [x0]
13477         b       .L1836
13478 .L1835:
13479         adrp    x0, :got:g_active_superblock
13480         ldr     x0, [x0, #:got_lo12:g_active_superblock]
13481         ldrh    w2, [x0]
13482         mov     w0, w1
13483         cmp     w2, w19
13484         beq     .L1837
13485         adrp    x0, :got:g_buffer_superblock
13486         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
13487         ldrh    w2, [x0]
13488         mov     w0, w1
13489         cmp     w2, w19
13490         beq     .L1837
13491         adrp    x0, :got:g_gc_temp_superblock
13492         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
13493         ldrh    w2, [x0]
13494         mov     w0, w1
13495         cmp     w2, w19
13496         beq     .L1837
13497 .L1836:
13498         adrp    x0, :got:p_data_block_list_head
13499         mov     w1, w19
13500         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
13501         bl      List_remove_node
13502         adrp    x0, :got:g_num_data_superblocks
13503         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
13504         ldrh    w1, [x0]
13505         sub     w1, w1, #1
13506         strh    w1, [x0]
13507         mov     w0, w19
13508         bl      free_data_superblock
13509         mov     w0, w19
13510         bl      FtlGcFreeBadSuperBlk
13511         mov     w0, 1
13512         b       .L1837
13513 .L1834:
13514         mov     w0, w19
13515         bl      List_update_data_list
13516         mov     w0, 0
13517 .L1837:
13518         ldr     x19, [sp,16]
13519         ldp     x29, x30, [sp], 32
13520         ret
13521         .size   update_vpc_list, .-update_vpc_list
13522         .align  2
13523         .global decrement_vpc_count
13524         .type   decrement_vpc_count, %function
13525 decrement_vpc_count:
13526         stp     x29, x30, [sp, -48]!
13527         uxth    w1, w0
13528         mov     w0, 65535
13529         add     x29, sp, 0
13530         str     x19, [sp,16]
13531         cmp     w1, w0
13532         beq     .L1842
13533         adrp    x0, :got:p_valid_page_count_table
13534         ubfiz   x2, x1, 1, 16
13535         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13536         ldr     x0, [x0]
13537         ldrh    w19, [x0,x2]
13538         cbnz    w19, .L1843
13539         adrp    x0, .LC108
13540         mov     w2, w19
13541         add     x0, x0, :lo12:.LC108
13542         bl      printk
13543         b       .L1847
13544 .L1843:
13545         sub     w19, w19, #1
13546         strh    w19, [x0,x2]
13547 .L1842:
13548         adrp    x19, :got:g_tmp_data_superblock_id
13549         mov     w0, 65535
13550         ldr     x19, [x19, #:got_lo12:g_tmp_data_superblock_id]
13551         ldrh    w2, [x19]
13552         cmp     w2, w0
13553         bne     .L1845
13554         strh    w1, [x19]
13555 .L1847:
13556         mov     w0, 0
13557         b       .L1844
13558 .L1845:
13559         cmp     w2, w1
13560         str     x1, [x29,40]
13561         mov     w0, 0
13562         beq     .L1844
13563         mov     w0, w2
13564         bl      update_vpc_list
13565         cmp     w0, wzr
13566         ldr     x1, [x29,40]
13567         cset    w0, ne
13568         strh    w1, [x19]
13569 .L1844:
13570         ldr     x19, [sp,16]
13571         ldp     x29, x30, [sp], 48
13572         ret
13573         .size   decrement_vpc_count, .-decrement_vpc_count
13574         .align  2
13575         .global FtlSlcSuperblockCheck
13576         .type   FtlSlcSuperblockCheck, %function
13577 FtlSlcSuperblockCheck:
13578         stp     x29, x30, [sp, -48]!
13579         add     x29, sp, 0
13580         stp     x19, x20, [sp,16]
13581         stp     x21, x22, [sp,32]
13582         ldrh    w1, [x0,4]
13583         cbz     w1, .L1848
13584         mov     x19, x0
13585         ldrb    w0, [x0,6]
13586         mov     w20, 65535
13587         adrp    x21, :got:mlcPageToSlcPageTbl
13588         add     x0, x0, 8
13589         adrp    x22, :got:c_ftl_nand_planes_num
13590         ldrh    w0, [x19,x0,lsl 1]
13591 .L1851:
13592         cmp     w0, w20
13593         bne     .L1855
13594 .L1853:
13595         ldrb    w0, [x19,6]
13596         add     w0, w0, 1
13597         uxtb    w0, w0
13598         strb    w0, [x19,6]
13599         ldr     x1, [x22, #:got_lo12:c_ftl_nand_planes_num]
13600         ldrh    w1, [x1]
13601         cmp     w1, w0
13602         bne     .L1852
13603         ldrh    w0, [x19,2]
13604         strb    wzr, [x19,6]
13605         add     w0, w0, 1
13606         strh    w0, [x19,2]
13607 .L1852:
13608         ldrb    w0, [x19,6]
13609         add     x0, x0, 8
13610         ldrh    w0, [x19,x0,lsl 1]
13611         b       .L1851
13612 .L1855:
13613         ldrb    w0, [x19,8]
13614         cmp     w0, 1
13615         bne     .L1848
13616         ldr     x0, [x21, #:got_lo12:mlcPageToSlcPageTbl]
13617         ldrh    w1, [x19,2]
13618         ldrh    w0, [x0,w1,sxtw 1]
13619         cmp     w0, w20
13620         bne     .L1848
13621         ldrh    w0, [x19,4]
13622         sub     w0, w0, #1
13623         strh    w0, [x19,4]
13624         ldrh    w0, [x19]
13625         bl      decrement_vpc_count
13626         ldrh    w1, [x19,4]
13627         cbnz    w1, .L1853
13628         ldrh    w0, [x19,2]
13629         strb    w1, [x19,6]
13630         add     w0, w0, 1
13631         strh    w0, [x19,2]
13632 .L1848:
13633         ldp     x19, x20, [sp,16]
13634         ldp     x21, x22, [sp,32]
13635         ldp     x29, x30, [sp], 48
13636         ret
13637         .size   FtlSlcSuperblockCheck, .-FtlSlcSuperblockCheck
13638         .align  2
13639         .global get_new_active_ppa
13640         .type   get_new_active_ppa, %function
13641 get_new_active_ppa:
13642         stp     x29, x30, [sp, -64]!
13643         add     x29, sp, 0
13644         stp     x19, x20, [sp,16]
13645         stp     x21, x22, [sp,32]
13646         stp     x23, x24, [sp,48]
13647         mov     x19, x0
13648         strb    wzr, [x0,10]
13649         ldrb    w0, [x0,6]
13650         mov     w20, 65535
13651         adrp    x21, :got:c_ftl_nand_planes_num
13652         adrp    x23, :got:mlcPageToSlcPageTbl
13653         add     x0, x0, 8
13654         ldrh    w0, [x19,x0,lsl 1]
13655 .L1857:
13656         cmp     w0, w20
13657         adrp    x22, :got:c_ftl_nand_planes_num
13658         bne     .L1869
13659 .L1858:
13660         ldrb    w0, [x19,6]
13661         add     w0, w0, 1
13662         uxtb    w0, w0
13663         strb    w0, [x19,6]
13664         ldr     x1, [x21, #:got_lo12:c_ftl_nand_planes_num]
13665         ldrh    w1, [x1]
13666         cmp     w1, w0
13667         bne     .L1859
13668         ldrh    w0, [x19,2]
13669         strb    wzr, [x19,6]
13670         add     w0, w0, 1
13671         strh    w0, [x19,2]
13672 .L1859:
13673         ldrb    w0, [x19,6]
13674         add     x0, x0, 8
13675         ldrh    w0, [x19,x0,lsl 1]
13676         b       .L1857
13677 .L1869:
13678         ldrb    w1, [x19,8]
13679         cmp     w1, 1
13680         bne     .L1860
13681         ldr     x1, [x23, #:got_lo12:mlcPageToSlcPageTbl]
13682         ldrh    w2, [x19,2]
13683         ldrh    w1, [x1,w2,sxtw 1]
13684         cmp     w1, w20
13685         bne     .L1860
13686         ldrh    w0, [x19,4]
13687         sub     w0, w0, #1
13688         strh    w0, [x19,4]
13689         ldrh    w0, [x19]
13690         bl      decrement_vpc_count
13691         b       .L1858
13692 .L1860:
13693         ldrh    w20, [x19,2]
13694         mov     w21, 65535
13695         mov     w23, w21
13696         adrp    x24, :got:mlcPageToSlcPageTbl
13697         orr     w20, w20, w0, lsl 10
13698         ldrh    w0, [x19,4]
13699         sub     w0, w0, #1
13700         strh    w0, [x19,4]
13701 .L1861:
13702         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
13703         ldrb    w1, [x19,6]
13704         ldrh    w2, [x0]
13705 .L1863:
13706         add     w1, w1, 1
13707         uxtb    w1, w1
13708         cmp     w1, w2
13709         bne     .L1862
13710         ldrh    w0, [x19,2]
13711         mov     w1, 0
13712         add     w0, w0, 1
13713         strh    w0, [x19,2]
13714 .L1862:
13715         add     x0, x19, x1, sxtw 1
13716         ldrh    w0, [x0,16]
13717         cmp     w0, w21
13718         beq     .L1863
13719         ldrb    w0, [x19,8]
13720         strb    w1, [x19,6]
13721         cmp     w0, 1
13722         bne     .L1864
13723         ldr     x0, [x24, #:got_lo12:mlcPageToSlcPageTbl]
13724         ldrh    w1, [x19,2]
13725         ldrh    w0, [x0,w1,sxtw 1]
13726         cmp     w0, w23
13727         bne     .L1864
13728         ldrh    w0, [x19,4]
13729         cbz     w0, .L1864
13730         sub     w0, w0, #1
13731         strh    w0, [x19,4]
13732         ldrh    w0, [x19]
13733         bl      decrement_vpc_count
13734         b       .L1861
13735 .L1864:
13736         mov     w0, w20
13737         ldp     x19, x20, [sp,16]
13738         ldp     x21, x22, [sp,32]
13739         ldp     x23, x24, [sp,48]
13740         ldp     x29, x30, [sp], 64
13741         ret
13742         .size   get_new_active_ppa, .-get_new_active_ppa
13743         .align  2
13744         .global FtlVpcTblFlush
13745         .type   FtlVpcTblFlush, %function
13746 FtlVpcTblFlush:
13747         stp     x29, x30, [sp, -96]!
13748         add     x29, sp, 0
13749         stp     x23, x24, [sp,48]
13750         adrp    x23, :got:p_sys_data_buf
13751         adrp    x24, :got:p_sys_spare_buf
13752         stp     x21, x22, [sp,32]
13753         adrp    x21, :got:req_sys
13754         adrp    x22, :got:gSysInfo
13755         ldr     x0, [x23, #:got_lo12:p_sys_data_buf]
13756         stp     x25, x26, [sp,64]
13757         stp     x19, x20, [sp,16]
13758         stp     x27, x28, [sp,80]
13759         ldr     x26, [x21, #:got_lo12:req_sys]
13760         adrp    x19, :got:g_sys_save_data
13761         ldr     x0, [x0]
13762         adrp    x25, :got:g_GlobalSysVersion
13763         mov     w28, 65535
13764         str     x0, [x26,8]
13765         ldr     x0, [x24, #:got_lo12:p_sys_spare_buf]
13766         ldr     x20, [x0]
13767         str     x20, [x26,16]
13768         ldr     x0, [x22, #:got_lo12:gSysInfo]
13769         str     wzr, [x20,12]
13770         ldrh    w1, [x0]
13771         strh    w1, [x20,2]
13772         mov     w1, -3932
13773         strh    w1, [x20]
13774         ldr     w1, [x0,8]
13775         str     w1, [x20,4]
13776         mov     w1, 19539
13777         str     wzr, [x20,8]
13778         movk    w1, 0x4654, lsl 16
13779         ldrh    w0, [x0,6]
13780         ldr     x19, [x19, #:got_lo12:g_sys_save_data]
13781         str     w1, [x19]
13782         mov     w1, 39
13783         strh    w0, [x19,8]
13784         adrp    x0, :got:c_ftl_nand_die_num
13785         movk    w1, 0x5000, lsl 16
13786         str     w1, [x19,4]
13787         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
13788         ldrh    w0, [x0]
13789         strb    w0, [x19,10]
13790         adrp    x0, :got:g_active_superblock
13791         ldr     x0, [x0, #:got_lo12:g_active_superblock]
13792         ldrh    w1, [x0]
13793         strh    w1, [x19,14]
13794         ldrh    w1, [x0,2]
13795         ldrb    w2, [x0,6]
13796         ldrb    w0, [x0,8]
13797         strb    w0, [x19,11]
13798         adrp    x0, :got:g_buffer_superblock
13799         orr     w1, w2, w1, lsl 6
13800         strh    w1, [x19,16]
13801         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
13802         ldrh    w1, [x0]
13803         strh    w1, [x19,18]
13804         ldrh    w1, [x0,2]
13805         ldrb    w2, [x0,6]
13806         ldrb    w0, [x0,8]
13807         strb    w0, [x19,12]
13808         adrp    x0, :got:g_gc_temp_superblock
13809         orr     w1, w2, w1, lsl 6
13810         strh    w1, [x19,20]
13811         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
13812         ldrh    w1, [x0]
13813         strh    w1, [x19,22]
13814         ldrh    w1, [x0,2]
13815         ldrb    w2, [x0,6]
13816         ldrb    w0, [x0,8]
13817         strb    w0, [x19,13]
13818         adrp    x0, :got:g_totle_mlc_erase_count
13819         orr     w1, w2, w1, lsl 6
13820         strh    w1, [x19,24]
13821         adrp    x2, :got:c_ftl_nand_byte_pre_page
13822         mov     w1, 255
13823         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
13824         ldr     w0, [x0]
13825         str     w0, [x19,32]
13826         ldr     x0, [x25, #:got_lo12:g_GlobalSysVersion]
13827         ldr     w0, [x0]
13828         str     w0, [x19,40]
13829         adrp    x0, :got:g_GlobalDataVersion
13830         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
13831         ldr     w0, [x0]
13832         str     w0, [x19,36]
13833         ldr     x0, [x26,8]
13834         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
13835         ldrh    w2, [x2]
13836         bl      ftl_memset
13837         ldr     x0, [x26,8]
13838         mov     x1, x19
13839         mov     w2, 48
13840         bl      ftl_memcpy
13841         adrp    x2, :got:c_ftl_nand_data_blks_per_plane
13842         adrp    x1, :got:p_valid_page_count_table
13843         ldr     x0, [x26,8]
13844         adrp    x26, :got:c_ftl_nand_page_pre_slc_blk
13845         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_blks_per_plane]
13846         add     x0, x0, 48
13847         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
13848         ldrh    w2, [x2]
13849         ldr     x1, [x1]
13850         lsl     w2, w2, 1
13851         bl      ftl_memcpy
13852         mov     w0, 0
13853         bl      FtlUpdateVaildLpn
13854 .L1871:
13855         ldr     x0, [x23, #:got_lo12:p_sys_data_buf]
13856         ldr     x27, [x21, #:got_lo12:req_sys]
13857         ldr     x0, [x0]
13858         str     x0, [x27,8]
13859         ldr     x0, [x24, #:got_lo12:p_sys_spare_buf]
13860         ldr     x0, [x0]
13861         str     x0, [x27,16]
13862         ldr     x19, [x22, #:got_lo12:gSysInfo]
13863         ldrh    w0, [x19]
13864         ldrh    w1, [x19,2]
13865         orr     w0, w1, w0, lsl 10
13866         mov     w1, 1
13867         str     w0, [x27,4]
13868         mov     w2, w1
13869         mov     w3, w1
13870         mov     x0, x27
13871         bl      FlashProgPages
13872         ldr     x0, [x26, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13873         ldrh    w1, [x19,2]
13874         ldrh    w0, [x0]
13875         sub     w0, w0, #1
13876         cmp     w1, w0
13877         blt     .L1872
13878         ldrh    w0, [x19]
13879         ldrh    w28, [x19,4]
13880         strh    wzr, [x19,2]
13881         strh    w0, [x19,4]
13882         bl      FtlFreeSysBlkQueueOut
13883         strh    w0, [x19]
13884         ldr     x2, [x25, #:got_lo12:g_GlobalSysVersion]
13885         ldr     w1, [x2]
13886         str     w1, [x19,8]
13887         add     w3, w1, 1
13888         str     w3, [x2]
13889         ubfiz   w2, w0, 10, 16
13890         str     w2, [x27,4]
13891         str     w1, [x20,4]
13892         mov     w1, 1
13893         strh    w0, [x20,2]
13894         mov     w2, w1
13895         mov     x0, x27
13896         mov     w3, w1
13897         bl      FlashProgPages
13898 .L1872:
13899         ldr     x0, [x22, #:got_lo12:gSysInfo]
13900         ldrh    w1, [x0,2]
13901         add     w1, w1, 1
13902         uxth    w1, w1
13903         strh    w1, [x0,2]
13904         ldr     x2, [x21, #:got_lo12:req_sys]
13905         ldr     w2, [x2]
13906         cmn     w2, #1
13907         bne     .L1873
13908         cmp     w1, 1
13909         bne     .L1871
13910         adrp    x1, :got:c_ftl_nand_page_pre_slc_blk
13911         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13912         ldrh    w1, [x1]
13913         sub     w1, w1, #1
13914         strh    w1, [x0,2]
13915         b       .L1871
13916 .L1873:
13917         cmp     w1, 1
13918         beq     .L1871
13919         mov     w0, 65535
13920         cmp     w28, w0
13921         beq     .L1875
13922         mov     w0, w28
13923         mov     w1, 1
13924         bl      FtlFreeSysBlkQueueIn
13925 .L1875:
13926         mov     w0, 0
13927         ldp     x19, x20, [sp,16]
13928         ldp     x21, x22, [sp,32]
13929         ldp     x23, x24, [sp,48]
13930         ldp     x25, x26, [sp,64]
13931         ldp     x27, x28, [sp,80]
13932         ldp     x29, x30, [sp], 96
13933         ret
13934         .size   FtlVpcTblFlush, .-FtlVpcTblFlush
13935         .align  2
13936         .global ftl_map_blk_gc
13937         .type   ftl_map_blk_gc, %function
13938 ftl_map_blk_gc:
13939         stp     x29, x30, [sp, -96]!
13940         add     x29, sp, 0
13941         stp     x19, x20, [sp,16]
13942         stp     x21, x22, [sp,32]
13943         stp     x23, x24, [sp,48]
13944         stp     x25, x26, [sp,64]
13945         stp     x27, x28, [sp,80]
13946         mov     x19, x0
13947         adrp    x22, :got:c_ftl_nand_page_pre_slc_blk
13948         ldr     x20, [x0,16]
13949         ldr     x24, [x0,40]
13950         bl      ftl_free_no_use_map_blk
13951         ldrh    w1, [x19,10]
13952         ldrh    w2, [x19,8]
13953         sub     w1, w1, #1
13954         cmp     w2, w1
13955         blt     .L1880
13956         ubfiz   x1, x0, 1, 16
13957         ldrh    w23, [x20,x1]
13958         cbz     w23, .L1880
13959         ldr     w0, [x19,52]
13960         cbnz    w0, .L1880
13961         mov     w2, 1
13962         str     w2, [x19,52]
13963         strh    w0, [x20,x1]
13964         ldrh    w0, [x19,8]
13965         ldrh    w1, [x19,2]
13966         sub     w0, w0, #1
13967         strh    w0, [x19,8]
13968         ldr     x0, [x22, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13969         ldrh    w0, [x0]
13970         cmp     w1, w0
13971         bcc     .L1881
13972         mov     x0, x19
13973         bl      ftl_map_blk_alloc_new_blk
13974 .L1881:
13975         mov     w20, 0
13976         adrp    x25, :got:req_sys
13977         adrp    x26, :got:p_sys_data_buf_1
13978         adrp    x27, :got:p_sys_spare_buf
13979 .L1882:
13980         ldrh    w0, [x19,6]
13981         cmp     w0, w20
13982         bls     .L1890
13983         ubfiz   x28, x20, 2, 16
13984         ldr     w0, [x24,x28]
13985         cmp     w23, w0, lsr 10
13986         bne     .L1883
13987         ldr     x0, [x26, #:got_lo12:p_sys_data_buf_1]
13988         mov     w1, 1
13989         ldr     x21, [x25, #:got_lo12:req_sys]
13990         mov     w2, w1
13991         ldr     x0, [x0]
13992         str     x0, [x21,8]
13993         ldr     x0, [x27, #:got_lo12:p_sys_spare_buf]
13994         ldr     x0, [x0]
13995         str     x0, [x21,16]
13996         ldr     w0, [x24,x28]
13997         str     w0, [x21,4]
13998         mov     x0, x21
13999         bl      FlashReadPages
14000         ldr     w0, [x21]
14001         cmn     w0, #1
14002         bne     .L1884
14003         str     wzr, [x24,x28]
14004         b       .L1883
14005 .L1884:
14006         ldr     x2, [x21,8]
14007         mov     x0, x19
14008         mov     w1, w20
14009         bl      FtlMapWritePage
14010 .L1883:
14011         add     w20, w20, 1
14012         uxth    w20, w20
14013         b       .L1882
14014 .L1890:
14015         mov     w0, w23
14016         mov     w1, 1
14017         bl      FtlFreeSysBlkQueueIn
14018         str     wzr, [x19,52]
14019 .L1880:
14020         ldr     x22, [x22, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14021         ldrh    w1, [x19,2]
14022         ldrh    w0, [x22]
14023         cmp     w1, w0
14024         bcc     .L1886
14025         mov     x0, x19
14026         bl      ftl_map_blk_alloc_new_blk
14027 .L1886:
14028         mov     w0, 0
14029         ldp     x19, x20, [sp,16]
14030         ldp     x21, x22, [sp,32]
14031         ldp     x23, x24, [sp,48]
14032         ldp     x25, x26, [sp,64]
14033         ldp     x27, x28, [sp,80]
14034         ldp     x29, x30, [sp], 96
14035         ret
14036         .size   ftl_map_blk_gc, .-ftl_map_blk_gc
14037         .align  2
14038         .global Ftl_write_map_blk_to_last_page
14039         .type   Ftl_write_map_blk_to_last_page, %function
14040 Ftl_write_map_blk_to_last_page:
14041         stp     x29, x30, [sp, -64]!
14042         mov     w1, 65535
14043         add     x29, sp, 0
14044         stp     x19, x20, [sp,16]
14045         stp     x21, x22, [sp,32]
14046         str     x23, [sp,48]
14047         mov     x19, x0
14048         ldr     x20, [x0,16]
14049         ldr     x23, [x0,40]
14050         ldrh    w0, [x0]
14051         cmp     w0, w1
14052         bne     .L1892
14053         ldrh    w0, [x19,8]
14054         add     w0, w0, 1
14055         strh    w0, [x19,8]
14056         bl      FtlFreeSysBlkQueueOut
14057         strh    w0, [x20]
14058         strh    wzr, [x19,2]
14059         ldr     w0, [x19,48]
14060         strh    wzr, [x19]
14061         add     w0, w0, 1
14062         str     w0, [x19,48]
14063         b       .L1893
14064 .L1892:
14065         ubfiz   x0, x0, 1, 16
14066         ldrh    w1, [x19,2]
14067         adrp    x21, :got:p_sys_data_buf
14068         ldrh    w22, [x20,x0]
14069         adrp    x20, :got:req_sys
14070         ldr     x0, [x20, #:got_lo12:req_sys]
14071         orr     w1, w1, w22, lsl 10
14072         str     w1, [x0,4]
14073         ldr     x3, [x21, #:got_lo12:p_sys_data_buf]
14074         ldr     x1, [x3]
14075         str     x1, [x0,8]
14076         adrp    x1, :got:p_sys_spare_buf
14077         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
14078         ldr     x1, [x1]
14079         str     x1, [x0,16]
14080         ldr     w0, [x19,48]
14081         str     w0, [x1,4]
14082         mov     w0, -1291
14083         strh    w0, [x1,8]
14084         ldrh    w0, [x19,4]
14085         strh    w0, [x1]
14086         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
14087         strh    w22, [x1,2]
14088         mov     w1, 255
14089         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14090         ldrh    w2, [x0]
14091         ldr     x0, [x3]
14092         lsl     w2, w2, 3
14093         bl      ftl_memset
14094         mov     w2, 0
14095         mov     w1, w2
14096 .L1894:
14097         ldrh    w0, [x19,6]
14098         cmp     w0, w1
14099         bls     .L1897
14100         ubfiz   x4, x1, 2, 16
14101         ldr     w0, [x23,x4]
14102         cmp     w22, w0, lsr 10
14103         bne     .L1895
14104         ldr     x3, [x21, #:got_lo12:p_sys_data_buf]
14105         add     w2, w2, 1
14106         uxth    w2, w2
14107         ldr     x5, [x3]
14108         ubfiz   x0, x2, 3, 16
14109         str     w1, [x5,x0]
14110         ldr     x3, [x3]
14111         ldr     w4, [x23,x4]
14112         add     x0, x3, x0
14113         str     w4, [x0,4]
14114 .L1895:
14115         add     w1, w1, 1
14116         uxth    w1, w1
14117         b       .L1894
14118 .L1897:
14119         mov     w1, 1
14120         ldr     x0, [x20, #:got_lo12:req_sys]
14121         mov     w2, w1
14122         mov     w3, 0
14123         bl      FlashProgPages
14124         ldrh    w0, [x19,2]
14125         add     w0, w0, 1
14126         strh    w0, [x19,2]
14127         mov     x0, x19
14128         bl      ftl_map_blk_gc
14129 .L1893:
14130         mov     w0, 0
14131         ldr     x23, [sp,48]
14132         ldp     x19, x20, [sp,16]
14133         ldp     x21, x22, [sp,32]
14134         ldp     x29, x30, [sp], 64
14135         ret
14136         .size   Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page
14137         .align  2
14138         .global FtlMapWritePage
14139         .type   FtlMapWritePage, %function
14140 FtlMapWritePage:
14141         stp     x29, x30, [sp, -96]!
14142         add     x29, sp, 0
14143         stp     x21, x22, [sp,32]
14144         stp     x23, x24, [sp,48]
14145         stp     x25, x26, [sp,64]
14146         stp     x19, x20, [sp,16]
14147         stp     x27, x28, [sp,80]
14148         mov     x19, x0
14149         mov     w21, w1
14150         mov     x22, x2
14151         adrp    x23, :got:g_totle_l2p_write_count
14152         adrp    x24, :got:c_ftl_nand_page_pre_slc_blk
14153         mov     w25, 65535
14154         adrp    x26, :got:req_sys
14155         adrp    x27, :got:p_sys_spare_buf
14156 .L1904:
14157         ldr     x1, [x23, #:got_lo12:g_totle_l2p_write_count]
14158         ldr     w0, [x1]
14159         add     w0, w0, 1
14160         str     w0, [x1]
14161         ldr     x0, [x24, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14162         ldrh    w1, [x19,2]
14163         ldrh    w0, [x0]
14164         sub     w0, w0, #1
14165         cmp     w1, w0
14166         bge     .L1899
14167         ldrh    w0, [x19]
14168         cmp     w0, w25
14169         bne     .L1900
14170 .L1899:
14171         mov     x0, x19
14172         bl      Ftl_write_map_blk_to_last_page
14173 .L1900:
14174         ldrh    w1, [x19]
14175         mov     w2, 16
14176         ldr     x0, [x19,16]
14177         ldr     x20, [x26, #:got_lo12:req_sys]
14178         ldrh    w28, [x0,x1,lsl 1]
14179         mov     w1, 0
14180         ldrh    w0, [x19,2]
14181         str     x22, [x20,8]
14182         orr     w0, w0, w28, lsl 10
14183         str     w0, [x20,4]
14184         ldr     x0, [x27, #:got_lo12:p_sys_spare_buf]
14185         ldr     x0, [x0]
14186         str     x0, [x20,16]
14187         bl      ftl_memset
14188         ldr     x0, [x20,16]
14189         ldr     w1, [x19,48]
14190         str     w1, [x0,4]
14191         strh    w21, [x0,8]
14192         ldrh    w1, [x19,4]
14193         strh    w1, [x0]
14194         mov     w1, 1
14195         strh    w28, [x0,2]
14196         mov     w2, w1
14197         mov     x0, x20
14198         mov     w3, w1
14199         bl      FlashProgPages
14200         ldrh    w0, [x19,2]
14201         add     w0, w0, 1
14202         uxth    w0, w0
14203         strh    w0, [x19,2]
14204         cmp     w0, 1
14205         beq     .L1904
14206         ldr     w0, [x20]
14207         cmn     w0, #1
14208         beq     .L1904
14209         ldr     x0, [x19,40]
14210         ldr     w1, [x20,4]
14211         str     w1, [x0,w21,uxtw 2]
14212         mov     w0, 0
14213         ldp     x19, x20, [sp,16]
14214         ldp     x21, x22, [sp,32]
14215         ldp     x23, x24, [sp,48]
14216         ldp     x25, x26, [sp,64]
14217         ldp     x27, x28, [sp,80]
14218         ldp     x29, x30, [sp], 96
14219         ret
14220         .size   FtlMapWritePage, .-FtlMapWritePage
14221         .align  2
14222         .global flush_l2p_region
14223         .type   flush_l2p_region, %function
14224 flush_l2p_region:
14225         stp     x29, x30, [sp, -32]!
14226         add     x29, sp, 0
14227         stp     x19, x20, [sp,16]
14228         adrp    x20, :got:p_l2p_ram_map
14229         ubfiz   x19, x0, 4, 16
14230         adrp    x0, :got:gL2pMapInfo
14231         ldr     x20, [x20, #:got_lo12:p_l2p_ram_map]
14232         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
14233         ldr     x1, [x20]
14234         add     x2, x1, x19
14235         ldrh    w1, [x1,x19]
14236         ldr     x2, [x2,8]
14237         bl      FtlMapWritePage
14238         ldr     x0, [x20]
14239         add     x19, x0, x19
14240         ldr     w0, [x19,4]
14241         and     w0, w0, 2147483647
14242         str     w0, [x19,4]
14243         mov     w0, 0
14244         ldp     x19, x20, [sp,16]
14245         ldp     x29, x30, [sp], 32
14246         ret
14247         .size   flush_l2p_region, .-flush_l2p_region
14248         .align  2
14249         .global log2phys
14250         .type   log2phys, %function
14251 log2phys:
14252         stp     x29, x30, [sp, -80]!
14253         mov     x4, 1
14254         add     x29, sp, 0
14255         stp     x21, x22, [sp,32]
14256         mov     x21, x1
14257         adrp    x1, :got:c_ftl_nand_sec_pre_page_shift
14258         stp     x23, x24, [sp,48]
14259         stp     x19, x20, [sp,16]
14260         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
14261         adrp    x23, :got:p_l2p_ram_map
14262         mov     w22, w2
14263         ldrh    w3, [x1]
14264         ldr     x1, [x23, #:got_lo12:p_l2p_ram_map]
14265         add     w3, w3, 7
14266         lsr     w20, w0, w3
14267         lsl     x3, x4, x3
14268         sub     w3, w3, #1
14269         ldr     x1, [x1]
14270         and     w0, w3, w0
14271         uxth    w20, w20
14272         mov     x4, 0
14273         uxth    x24, w0
14274         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
14275         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
14276         ldrh    w0, [x0]
14277 .L1909:
14278         uxth    x19, w4
14279         cmp     w19, w0
14280         bcs     .L1921
14281         add     x4, x4, 1
14282         add     x2, x1, x4, lsl 4
14283         ldrh    w2, [x2,-16]
14284         cmp     w2, w20
14285         bne     .L1909
14286 .L1910:
14287         cbnz    w22, .L1911
14288         ldr     x0, [x23, #:got_lo12:p_l2p_ram_map]
14289         ldr     x1, [x0]
14290         add     x1, x1, x19, lsl 4
14291         ldr     x0, [x1,8]
14292         ldr     w0, [x0,x24,lsl 2]
14293         str     w0, [x21]
14294         b       .L1912
14295 .L1911:
14296         ldr     x2, [x23, #:got_lo12:p_l2p_ram_map]
14297         lsl     x0, x19, 4
14298         ldr     w3, [x21]
14299         ldr     x1, [x2]
14300         add     x1, x1, x0
14301         ldr     x1, [x1,8]
14302         str     w3, [x1,x24,lsl 2]
14303         ldr     x1, [x2]
14304         add     x0, x1, x0
14305         ldr     w1, [x0,4]
14306         orr     w1, w1, -2147483648
14307         str     w1, [x0,4]
14308         adrp    x0, :got:g_l2p_last_update_region_id
14309         ldr     x0, [x0, #:got_lo12:g_l2p_last_update_region_id]
14310         strh    w20, [x0]
14311 .L1912:
14312         ldr     x23, [x23, #:got_lo12:p_l2p_ram_map]
14313         ldr     x0, [x23]
14314         add     x19, x0, x19, lsl 4
14315         ldr     w0, [x19,4]
14316         cmn     w0, #1
14317         beq     .L1918
14318         add     w0, w0, 1
14319         str     w0, [x19,4]
14320         b       .L1918
14321 .L1921:
14322         bl      select_l2p_ram_region
14323         uxth    x19, w0
14324         ldr     x3, [x23, #:got_lo12:p_l2p_ram_map]
14325         ubfiz   x2, x19, 4, 16
14326         mov     w1, w0
14327         ldr     x3, [x3]
14328         add     x4, x3, x2
14329         ldrh    w3, [x3,x2]
14330         mov     w2, 65535
14331         cmp     w3, w2
14332         beq     .L1915
14333         ldr     w2, [x4,4]
14334         tbz     w2, #31, .L1915
14335         str     x1, [x29,72]
14336         bl      flush_l2p_region
14337         ldr     x1, [x29,72]
14338 .L1915:
14339         mov     w0, w20
14340         bl      load_l2p_region
14341         b       .L1910
14342 .L1918:
14343         mov     w0, 0
14344         ldp     x19, x20, [sp,16]
14345         ldp     x21, x22, [sp,32]
14346         ldp     x23, x24, [sp,48]
14347         ldp     x29, x30, [sp], 80
14348         ret
14349         .size   log2phys, .-log2phys
14350         .align  2
14351         .global FtlReUsePrevPpa
14352         .type   FtlReUsePrevPpa, %function
14353 FtlReUsePrevPpa:
14354         stp     x29, x30, [sp, -80]!
14355         add     x29, sp, 0
14356         stp     x19, x20, [sp,16]
14357         mov     w20, w0
14358         lsr     w0, w1, 10
14359         stp     x21, x22, [sp,32]
14360         str     x23, [sp,48]
14361         str     w1, [x29,76]
14362         bl      P2V_block_in_plane
14363         uxth    w4, w0
14364         adrp    x0, :got:p_valid_page_count_table
14365         ubfiz   x22, x4, 1, 16
14366         mov     x23, x0
14367         ldr     x1, [x0, #:got_lo12:p_valid_page_count_table]
14368         ldr     x2, [x1]
14369         ldrh    w1, [x2,x22]
14370         cbnz    w1, .L1923
14371         adrp    x0, :got:p_free_data_block_list_head
14372         ldr     x2, [x0, #:got_lo12:p_free_data_block_list_head]
14373         ldr     x19, [x2]
14374         cbz     x19, .L1924
14375         adrp    x2, :got:g_num_free_superblocks
14376         mov     x6, -6148914691236517206
14377         mov     x21, x2
14378         ldr     x3, [x2, #:got_lo12:g_num_free_superblocks]
14379         mov     w2, 6
14380         ldrh    w5, [x3]
14381         adrp    x3, :got:p_data_block_list_table
14382         ldr     x3, [x3, #:got_lo12:p_data_block_list_table]
14383         ldr     x3, [x3]
14384         sub     x19, x19, x3
14385         asr     x19, x19, 1
14386         madd    x19, x6, x19, x19
14387         mov     w6, 65535
14388         uxth    w19, w19
14389 .L1925:
14390         cmp     w1, w5
14391         beq     .L1924
14392         cmp     w19, w4
14393         bne     .L1926
14394         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
14395         mov     w1, w19
14396         bl      List_remove_node
14397         ldr     x0, [x21, #:got_lo12:g_num_free_superblocks]
14398         ldrh    w1, [x0]
14399         sub     w1, w1, #1
14400         strh    w1, [x0]
14401         mov     w0, w19
14402         bl      INSERT_DATA_LIST
14403         ldr     x0, [x23, #:got_lo12:p_valid_page_count_table]
14404         ldr     x1, [x0]
14405         ldrh    w0, [x1,x22]
14406         add     w0, w0, 1
14407         strh    w0, [x1,x22]
14408         b       .L1924
14409 .L1926:
14410         umull   x19, w19, w2
14411         ldrh    w19, [x3,x19]
14412         cmp     w19, w6
14413         beq     .L1924
14414         add     w1, w1, 1
14415         uxth    w1, w1
14416         b       .L1925
14417 .L1923:
14418         add     w1, w1, 1
14419         strh    w1, [x2,x22]
14420 .L1924:
14421         add     x1, x29, 76
14422         mov     w0, w20
14423         mov     w2, 1
14424         bl      log2phys
14425         ldr     x23, [sp,48]
14426         ldp     x19, x20, [sp,16]
14427         ldp     x21, x22, [sp,32]
14428         ldp     x29, x30, [sp], 80
14429         ret
14430         .size   FtlReUsePrevPpa, .-FtlReUsePrevPpa
14431         .align  2
14432         .global FtlMapTblRecovery
14433         .type   FtlMapTblRecovery, %function
14434 FtlMapTblRecovery:
14435         stp     x29, x30, [sp, -144]!
14436         mov     w1, 0
14437         add     x29, sp, 0
14438         stp     x25, x26, [sp,64]
14439         mov     x26, x0
14440         stp     x19, x20, [sp,16]
14441         stp     x21, x22, [sp,32]
14442         stp     x23, x24, [sp,48]
14443         stp     x27, x28, [sp,80]
14444         ldrh    w23, [x26,6]
14445         adrp    x20, :got:p_sys_data_buf
14446         ldr     x0, [x0,40]
14447         adrp    x19, :got:req_sys
14448         lsl     w2, w23, 2
14449         ldrh    w24, [x26,8]
14450         str     x0, [x29,136]
14451         mov     w27, 0
14452         ldr     x22, [x26,16]
14453         ldr     x25, [x26,24]
14454         bl      ftl_memset
14455         ldr     x0, [x20, #:got_lo12:p_sys_data_buf]
14456         ldr     x1, [x19, #:got_lo12:req_sys]
14457         ldr     x0, [x0]
14458         str     x0, [x1,8]
14459         adrp    x0, :got:p_sys_spare_buf
14460         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
14461         str     wzr, [x26,52]
14462         str     wzr, [x26,48]
14463         ldr     x21, [x0]
14464         mov     w0, -1
14465         str     x21, [x1,16]
14466         strh    w0, [x26]
14467         strh    w0, [x26,2]
14468         mov     w0, 1
14469         str     w0, [x26,56]
14470         sub     w0, w24, #1
14471         str     w0, [x29,132]
14472 .L1932:
14473         cmp     w27, w24
14474         bge     .L1949
14475         ldr     w0, [x29,132]
14476         sxtw    x28, w27
14477         cmp     w27, w0
14478         bne     .L1933
14479         lsl     x0, x28, 1
14480         mov     w1, 1
14481         add     x20, x22, x0
14482         ldrh    w0, [x22,x0]
14483         mov     w22, 0
14484         bl      FtlGetLastWrittenPage
14485         strh    w27, [x26]
14486         sxth    w1, w0
14487         add     w0, w0, 1
14488         strh    w0, [x26,2]
14489         ldr     w0, [x25,x28,lsl 2]
14490         add     w25, w1, 1
14491         str     w0, [x26,48]
14492         ldr     x0, [x19, #:got_lo12:req_sys]
14493         str     xzr, [x0,8]
14494 .L1934:
14495         cmp     w22, w25
14496         bge     .L1949
14497         ldrh    w0, [x20]
14498         mov     w1, 1
14499         ldr     x24, [x19, #:got_lo12:req_sys]
14500         mov     w2, w1
14501         orr     w0, w22, w0, lsl 10
14502         str     w0, [x24,4]
14503         mov     x0, x24
14504         bl      FlashReadPages
14505         ldr     w0, [x24]
14506         cmn     w0, #1
14507         beq     .L1935
14508         ldrh    w1, [x21,8]
14509         cmp     w1, w23
14510         bcs     .L1935
14511         ldrh    w2, [x21]
14512         ldrh    w0, [x26,4]
14513         cmp     w2, w0
14514         bne     .L1935
14515         ubfiz   x1, x1, 2, 16
14516         ldr     x2, [x29,136]
14517         ldr     w0, [x24,4]
14518         str     w0, [x2,x1]
14519 .L1935:
14520         add     w22, w22, 1
14521         sxth    w22, w22
14522         b       .L1934
14523 .L1949:
14524         mov     x0, x26
14525         bl      ftl_free_no_use_map_blk
14526         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
14527         ldrh    w1, [x26,2]
14528         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14529         ldrh    w0, [x0]
14530         cmp     w1, w0
14531         bne     .L1938
14532         mov     x0, x26
14533         bl      ftl_map_blk_alloc_new_blk
14534         b       .L1938
14535 .L1933:
14536         ldr     x0, [x20, #:got_lo12:p_sys_data_buf]
14537         lsl     x1, x28, 1
14538         ldr     x6, [x19, #:got_lo12:req_sys]
14539         add     x28, x22, x1
14540         str     x6, [x29,120]
14541         ldr     x0, [x0]
14542         str     x0, [x6,8]
14543         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
14544         ldrh    w1, [x22,x1]
14545         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14546         ldrh    w0, [x0]
14547         sub     w0, w0, #1
14548         orr     w0, w0, w1, lsl 10
14549         mov     w1, 1
14550         str     w0, [x6,4]
14551         mov     w2, w1
14552         mov     x0, x6
14553         bl      FlashReadPages
14554         ldr     x6, [x29,120]
14555         adrp    x8, :got:c_ftl_nand_page_pre_slc_blk
14556         ldr     w0, [x6]
14557         cmn     w0, #1
14558         beq     .L1939
14559         ldrh    w1, [x21]
14560         ldrh    w0, [x26,4]
14561         cmp     w1, w0
14562         bne     .L1939
14563         ldrh    w0, [x21,8]
14564         mov     w1, 64245
14565         cmp     w0, w1
14566         bne     .L1939
14567         mov     w0, 0
14568 .L1940:
14569         ldr     x1, [x8, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14570         ldrh    w1, [x1]
14571         sub     w1, w1, #1
14572         cmp     w0, w1
14573         bge     .L1943
14574         ldr     x1, [x20, #:got_lo12:p_sys_data_buf]
14575         sbfiz   x2, x0, 3, 32
14576         ldr     x6, [x1]
14577         ldrh    w1, [x6,x2]
14578         cmp     w1, w23
14579         bcs     .L1941
14580         add     x2, x6, x2
14581         ubfiz   x1, x1, 2, 16
14582         ldr     x3, [x29,136]
14583         ldr     w2, [x2,4]
14584         str     w2, [x3,x1]
14585 .L1941:
14586         add     w0, w0, 1
14587         sxth    w0, w0
14588         b       .L1940
14589 .L1939:
14590         ldr     x0, [x19, #:got_lo12:req_sys]
14591         mov     w6, 0
14592         str     xzr, [x0,8]
14593 .L1944:
14594         ldr     x0, [x8, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14595         ldrh    w0, [x0]
14596         cmp     w6, w0
14597         bge     .L1943
14598         ldrh    w0, [x28]
14599         mov     w1, 1
14600         ldr     x7, [x19, #:got_lo12:req_sys]
14601         mov     w2, w1
14602         str     x8, [x29,104]
14603         orr     w0, w6, w0, lsl 10
14604         str     x6, [x29,112]
14605         str     w0, [x7,4]
14606         mov     x0, x7
14607         str     x7, [x29,120]
14608         bl      FlashReadPages
14609         ldr     x7, [x29,120]
14610         ldr     x6, [x29,112]
14611         ldr     x8, [x29,104]
14612         ldr     w0, [x7]
14613         cmn     w0, #1
14614         beq     .L1945
14615         ldrh    w1, [x21,8]
14616         cmp     w1, w23
14617         bcs     .L1945
14618         ldrh    w2, [x21]
14619         ldrh    w0, [x26,4]
14620         cmp     w2, w0
14621         bne     .L1945
14622         ubfiz   x1, x1, 2, 16
14623         ldr     x2, [x29,136]
14624         ldr     w0, [x7,4]
14625         str     w0, [x2,x1]
14626 .L1945:
14627         add     w6, w6, 1
14628         sxth    w6, w6
14629         b       .L1944
14630 .L1943:
14631         add     w4, w27, 1
14632         sxth    w27, w4
14633         b       .L1932
14634 .L1938:
14635         ldrh    w1, [x26,8]
14636         ldrh    w0, [x26,10]
14637         cmp     w1, w0
14638         bcc     .L1950
14639         mov     x0, x26
14640         bl      ftl_map_blk_gc
14641 .L1950:
14642         mov     w0, 0
14643         ldp     x19, x20, [sp,16]
14644         ldp     x21, x22, [sp,32]
14645         ldp     x23, x24, [sp,48]
14646         ldp     x25, x26, [sp,64]
14647         ldp     x27, x28, [sp,80]
14648         ldp     x29, x30, [sp], 144
14649         ret
14650         .size   FtlMapTblRecovery, .-FtlMapTblRecovery
14651         .align  2
14652         .global FtlLoadVonderInfo
14653         .type   FtlLoadVonderInfo, %function
14654 FtlLoadVonderInfo:
14655         adrp    x1, :got:c_ftl_nand_max_vendor_blks
14656         adrp    x0, :got:gVendorBlkInfo
14657         stp     x29, x30, [sp, -16]!
14658         add     x29, sp, 0
14659         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
14660         ldr     x0, [x0, #:got_lo12:gVendorBlkInfo]
14661         ldrh    w1, [x1]
14662         strh    w1, [x0,10]
14663         mov     w1, -3962
14664         strh    w1, [x0,4]
14665         adrp    x1, :got:g_totle_vendor_block
14666         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
14667         ldrh    w1, [x1]
14668         strh    w1, [x0,8]
14669         adrp    x1, :got:c_ftl_nand_vendor_region_num
14670         ldr     x1, [x1, #:got_lo12:c_ftl_nand_vendor_region_num]
14671         ldrh    w1, [x1]
14672         strh    w1, [x0,6]
14673         adrp    x1, :got:p_vendor_block_table
14674         ldr     x1, [x1, #:got_lo12:p_vendor_block_table]
14675         ldr     x1, [x1]
14676         str     x1, [x0,16]
14677         adrp    x1, :got:p_vendor_block_ver_table
14678         ldr     x1, [x1, #:got_lo12:p_vendor_block_ver_table]
14679         ldr     x1, [x1]
14680         str     x1, [x0,24]
14681         adrp    x1, :got:p_vendor_block_valid_page_count
14682         ldr     x1, [x1, #:got_lo12:p_vendor_block_valid_page_count]
14683         ldr     x1, [x1]
14684         str     x1, [x0,32]
14685         adrp    x1, :got:p_vendor_region_ppn_table
14686         ldr     x1, [x1, #:got_lo12:p_vendor_region_ppn_table]
14687         ldr     x1, [x1]
14688         str     x1, [x0,40]
14689         bl      FtlMapTblRecovery
14690         mov     w0, 0
14691         ldp     x29, x30, [sp], 16
14692         ret
14693         .size   FtlLoadVonderInfo, .-FtlLoadVonderInfo
14694         .align  2
14695         .global FtlLoadMapInfo
14696         .type   FtlLoadMapInfo, %function
14697 FtlLoadMapInfo:
14698         stp     x29, x30, [sp, -16]!
14699         add     x29, sp, 0
14700         bl      FtlL2PDataInit
14701         adrp    x0, :got:gL2pMapInfo
14702         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
14703         bl      FtlMapTblRecovery
14704         mov     w0, 0
14705         ldp     x29, x30, [sp], 16
14706         ret
14707         .size   FtlLoadMapInfo, .-FtlLoadMapInfo
14708         .align  2
14709         .global FtlReadRefresh
14710         .type   FtlReadRefresh, %function
14711 FtlReadRefresh:
14712         stp     x29, x30, [sp, -128]!
14713         add     x29, sp, 0
14714         stp     x19, x20, [sp,16]
14715         adrp    x19, :got:g_sys_ext_data
14716         str     x23, [sp,48]
14717         stp     x21, x22, [sp,32]
14718         ldr     x1, [x19, #:got_lo12:g_sys_ext_data]
14719         ldr     w0, [x1,80]
14720         cbz     w0, .L1964
14721         adrp    x0, :got:g_MaxLpn
14722         ldr     w3, [x1,84]
14723         mov     x20, x0
14724         ldr     x2, [x0, #:got_lo12:g_MaxLpn]
14725         ldr     w2, [x2]
14726         cmp     w3, w2
14727         bcs     .L1965
14728         mov     w21, 2048
14729         add     x23, x29, 68
14730 .L1970:
14731         ldr     x22, [x19, #:got_lo12:g_sys_ext_data]
14732         ldr     x1, [x20, #:got_lo12:g_MaxLpn]
14733         ldr     w0, [x22,84]
14734         ldr     w1, [x1]
14735         cmp     w0, w1
14736         bcs     .L1967
14737         mov     w2, 0
14738         mov     x1, x23
14739         bl      log2phys
14740         ldr     w0, [x22,84]
14741         ldr     w2, [x29,68]
14742         add     w0, w0, 1
14743         str     w0, [x22,84]
14744         cmn     w2, #1
14745         beq     .L1968
14746         str     w2, [x29,76]
14747         mov     w1, 1
14748         str     w0, [x29,96]
14749         mov     w2, 0
14750         add     x0, x29, 72
14751         str     xzr, [x29,80]
14752         str     xzr, [x29,88]
14753         str     wzr, [x29,72]
14754         bl      FlashReadPages
14755         ldr     w0, [x29,72]
14756         cmp     w0, 256
14757         bne     .L1967
14758         ldr     w0, [x29,68]
14759         lsr     w0, w0, 10
14760         bl      P2V_block_in_plane
14761         bl      FtlGcRefreshBlock
14762         b       .L1967
14763 .L1968:
14764         subs    w21, w21, #1
14765         bne     .L1970
14766 .L1967:
14767         mov     w0, -1
14768         b       .L1972
14769 .L1965:
14770         adrp    x0, :got:g_totle_read_page_count
14771         str     wzr, [x1,80]
14772         str     wzr, [x1,84]
14773         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
14774         ldr     w0, [x0]
14775         str     w0, [x1,76]
14776         b       .L1976
14777 .L1964:
14778         adrp    x2, :got:g_max_erase_count
14779         ldr     w1, [x1,76]
14780         ldr     x2, [x2, #:got_lo12:g_max_erase_count]
14781         ldr     w3, [x2]
14782         adrp    x2, :got:g_inkDie_check_enable
14783         ldr     x2, [x2, #:got_lo12:g_inkDie_check_enable]
14784         ldr     w4, [x2]
14785         adrp    x2, :got:g_totle_read_page_count
14786         ldr     x2, [x2, #:got_lo12:g_totle_read_page_count]
14787         ldr     w2, [x2]
14788         add     w5, w2, 1048576
14789         cmp     w1, w5
14790         bhi     .L1973
14791         add     w3, w4, w3, lsr 10
14792         mov     w4, 33554432
14793         asr     w3, w4, w3
14794         add     w1, w3, w1
14795         cmp     w1, w2
14796         bcs     .L1972
14797 .L1973:
14798         ldr     x0, [x19, #:got_lo12:g_sys_ext_data]
14799         mov     w1, 1
14800         str     wzr, [x0,84]
14801         str     w1, [x0,80]
14802         str     w2, [x0,76]
14803 .L1976:
14804         mov     w0, 0
14805 .L1972:
14806         ldp     x19, x20, [sp,16]
14807         ldp     x21, x22, [sp,32]
14808         ldr     x23, [sp,48]
14809         ldp     x29, x30, [sp], 128
14810         ret
14811         .size   FtlReadRefresh, .-FtlReadRefresh
14812         .align  2
14813         .global FtlVendorPartWrite
14814         .type   FtlVendorPartWrite, %function
14815 FtlVendorPartWrite:
14816         stp     x29, x30, [sp, -176]!
14817         add     x29, sp, 0
14818         stp     x25, x26, [sp,64]
14819         mov     w26, w0
14820         adrp    x0, :got:c_ftl_nand_sec_pre_page_shift
14821         stp     x19, x20, [sp,16]
14822         stp     x23, x24, [sp,48]
14823         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
14824         mov     w25, w1
14825         stp     x21, x22, [sp,32]
14826         stp     x27, x28, [sp,80]
14827         add     w1, w26, w1
14828         mov     x23, x2
14829         ldrh    w20, [x0]
14830         mov     w0, 4352
14831         cmp     w1, w0
14832         mov     w19, -1
14833         bhi     .L1978
14834         lsr     w20, w26, w20
14835         mov     w19, 0
14836         adrp    x24, :got:p_vendor_data_buf
14837         add     x22, x29, 120
14838         adrp    x28, :got:gVendorBlkInfo
14839 .L1979:
14840         cbz     w25, .L1978
14841         adrp    x0, :got:p_vendor_region_ppn_table
14842         ldr     x0, [x0, #:got_lo12:p_vendor_region_ppn_table]
14843         ldr     x0, [x0]
14844         ldr     w2, [x0,w20,uxtw 2]
14845         adrp    x0, :got:c_ftl_nand_sec_pre_page
14846         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
14847         ldrh    w1, [x0]
14848         uxth    w0, w25
14849         udiv    w21, w26, w1
14850         msub    w21, w21, w1, w26
14851         sub     w3, w1, w21
14852         uxth    w27, w3
14853         cmp     w27, w25
14854         csel    w27, w0, w27, hi
14855         cmp     w27, w1
14856         beq     .L1981
14857         cbz     w2, .L1981
14858         ldr     x0, [x24, #:got_lo12:p_vendor_data_buf]
14859         mov     w1, 1
14860         str     w2, [x22,4]
14861         mov     w2, w1
14862         str     xzr, [x22,16]
14863         ldr     x0, [x0]
14864         str     x0, [x22,8]
14865         mov     x0, x22
14866         bl      FlashReadPages
14867         b       .L1982
14868 .L1981:
14869         adrp    x1, :got:c_ftl_nand_byte_pre_page
14870         ldr     x0, [x24, #:got_lo12:p_vendor_data_buf]
14871         ldr     x2, [x1, #:got_lo12:c_ftl_nand_byte_pre_page]
14872         mov     w1, 0
14873         ldr     x0, [x0]
14874         ldrh    w2, [x2]
14875         bl      ftl_memset
14876 .L1982:
14877         ldr     x7, [x24, #:got_lo12:p_vendor_data_buf]
14878         lsl     w6, w27, 9
14879         ubfiz   x21, x21, 9, 16
14880         mov     w2, w6
14881         mov     x1, x23
14882         str     x6, [x29,104]
14883         ldr     x0, [x7]
14884         sub     w25, w25, w27
14885         str     x7, [x29,96]
14886         add     w26, w26, w27
14887         add     x0, x0, x21
14888         bl      ftl_memcpy
14889         ldr     x7, [x29,96]
14890         mov     w1, w20
14891         ldr     x0, [x28, #:got_lo12:gVendorBlkInfo]
14892         add     w20, w20, 1
14893         ldr     x2, [x7]
14894         bl      FtlMapWritePage
14895         cmn     w0, #1
14896         ldr     x6, [x29,104]
14897         csinv   w19, w19, wzr, ne
14898         add     x23, x23, x6, sxtw
14899         b       .L1979
14900 .L1978:
14901         mov     w0, w19
14902         ldp     x19, x20, [sp,16]
14903         ldp     x21, x22, [sp,32]
14904         ldp     x23, x24, [sp,48]
14905         ldp     x25, x26, [sp,64]
14906         ldp     x27, x28, [sp,80]
14907         ldp     x29, x30, [sp], 176
14908         ret
14909         .size   FtlVendorPartWrite, .-FtlVendorPartWrite
14910         .align  2
14911         .global Ftl_save_ext_data
14912         .type   Ftl_save_ext_data, %function
14913 Ftl_save_ext_data:
14914         adrp    x2, :got:g_sys_ext_data
14915         mov     w0, 19539
14916         stp     x29, x30, [sp, -16]!
14917         movk    w0, 0x4654, lsl 16
14918         add     x29, sp, 0
14919         ldr     x2, [x2, #:got_lo12:g_sys_ext_data]
14920         ldr     w1, [x2]
14921         cmp     w1, w0
14922         bne     .L1992
14923         mov     w0, 39
14924         mov     w1, 1
14925         movk    w0, 0x5000, lsl 16
14926         str     w0, [x2,4]
14927         adrp    x0, :got:g_totle_write_sector
14928         ldr     x0, [x0, #:got_lo12:g_totle_write_sector]
14929         ldr     w0, [x0]
14930         str     w0, [x2,88]
14931         adrp    x0, :got:g_totle_read_sector
14932         ldr     x0, [x0, #:got_lo12:g_totle_read_sector]
14933         ldr     w0, [x0]
14934         str     w0, [x2,92]
14935         adrp    x0, :got:g_totle_gc_page_count
14936         ldr     x0, [x0, #:got_lo12:g_totle_gc_page_count]
14937         ldr     w0, [x0]
14938         str     w0, [x2,8]
14939         adrp    x0, :got:g_totle_write_page_count
14940         ldr     x0, [x0, #:got_lo12:g_totle_write_page_count]
14941         ldr     w0, [x0]
14942         str     w0, [x2,12]
14943         adrp    x0, :got:g_totle_read_page_count
14944         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
14945         ldr     w0, [x0]
14946         str     w0, [x2,16]
14947         adrp    x0, :got:g_totle_l2p_write_count
14948         ldr     x0, [x0, #:got_lo12:g_totle_l2p_write_count]
14949         ldr     w0, [x0]
14950         str     w0, [x2,20]
14951         adrp    x0, :got:g_totle_slc_erase_count
14952         ldr     x0, [x0, #:got_lo12:g_totle_slc_erase_count]
14953         ldr     w0, [x0]
14954         str     w0, [x2,28]
14955         adrp    x0, :got:g_totle_sys_slc_erase_count
14956         ldr     x0, [x0, #:got_lo12:g_totle_sys_slc_erase_count]
14957         ldr     w0, [x0]
14958         str     w0, [x2,32]
14959         adrp    x0, :got:g_totle_discard_page_count
14960         ldr     x0, [x0, #:got_lo12:g_totle_discard_page_count]
14961         ldr     w0, [x0]
14962         str     w0, [x2,36]
14963         adrp    x0, :got:g_totle_cache_write_count
14964         ldr     x0, [x0, #:got_lo12:g_totle_cache_write_count]
14965         ldr     w0, [x0]
14966         str     w0, [x2,40]
14967         adrp    x0, :got:g_max_erase_count
14968         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
14969         ldr     w0, [x0]
14970         str     w0, [x2,44]
14971         adrp    x0, :got:g_min_erase_count
14972         ldr     x0, [x0, #:got_lo12:g_min_erase_count]
14973         ldr     w0, [x0]
14974         str     w0, [x2,48]
14975         adrp    x0, :got:g_all_blk_used_slc_mode
14976         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
14977         ldr     w0, [x0]
14978         str     w0, [x2,60]
14979         adrp    x0, :got:g_SlcPartLbaEndSector
14980         ldr     x0, [x0, #:got_lo12:g_SlcPartLbaEndSector]
14981         ldr     w0, [x0]
14982         str     w0, [x2,64]
14983         mov     w0, 0
14984         bl      FtlVendorPartWrite
14985 .L1992:
14986         ldp     x29, x30, [sp], 16
14987         ret
14988         .size   Ftl_save_ext_data, .-Ftl_save_ext_data
14989         .align  2
14990         .global FtlEctTblFlush
14991         .type   FtlEctTblFlush, %function
14992 FtlEctTblFlush:
14993         adrp    x1, :got:g_inkDie_check_enable
14994         stp     x29, x30, [sp, -16]!
14995         add     x29, sp, 0
14996         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
14997         ldr     w2, [x1]
14998         mov     w1, 32
14999         cbz     w2, .L1995
15000         adrp    x2, :got:g_min_erase_count
15001         ldr     x2, [x2, #:got_lo12:g_min_erase_count]
15002         ldr     w2, [x2]
15003         cmp     w2, 29
15004         mov     w2, 4
15005         csel    w1, w1, w2, hi
15006 .L1995:
15007         adrp    x2, :got:g_ect_tbl_power_up_flush
15008         ldr     x2, [x2, #:got_lo12:g_ect_tbl_power_up_flush]
15009         ldrh    w3, [x2]
15010         cmp     w3, 31
15011         bhi     .L1996
15012         add     w3, w3, 1
15013         mov     w1, 1
15014         strh    w3, [x2]
15015 .L1996:
15016         adrp    x2, :got:gp_ect_tbl_info
15017         cbnz    w0, .L1997
15018         ldr     x0, [x2, #:got_lo12:gp_ect_tbl_info]
15019         ldr     x3, [x0]
15020         ldr     w0, [x3,20]
15021         add     w1, w1, w0
15022         ldr     w0, [x3,16]
15023         cmp     w0, w1
15024         bcc     .L1998
15025 .L1997:
15026         ldr     x2, [x2, #:got_lo12:gp_ect_tbl_info]
15027         ldr     x0, [x2]
15028         ldr     w1, [x0,16]
15029         str     w1, [x0,20]
15030         mov     w1, 17221
15031         movk    w1, 0x4254, lsl 16
15032         str     w1, [x0]
15033         adrp    x1, :got:g_ect_tbl_info_size
15034         ldr     x0, [x2]
15035         ldr     x1, [x1, #:got_lo12:g_ect_tbl_info_size]
15036         str     wzr, [x0,4]
15037         ldrh    w1, [x1]
15038         ldr     x2, [x2]
15039         lsl     w3, w1, 9
15040         str     w3, [x0,12]
15041         ldr     w3, [x0,8]
15042         add     w3, w3, 1
15043         str     w3, [x0,8]
15044         mov     w0, 64
15045         bl      FtlVendorPartWrite
15046         bl      Ftl_save_ext_data
15047 .L1998:
15048         mov     w0, 0
15049         ldp     x29, x30, [sp], 16
15050         ret
15051         .size   FtlEctTblFlush, .-FtlEctTblFlush
15052         .align  2
15053         .global FtlMapBlkWriteDumpData
15054         .type   FtlMapBlkWriteDumpData, %function
15055 FtlMapBlkWriteDumpData:
15056         stp     x29, x30, [sp, -48]!
15057         add     x29, sp, 0
15058         stp     x19, x20, [sp,16]
15059         str     x21, [sp,32]
15060         ldr     w1, [x0,56]
15061         ldrh    w20, [x0,6]
15062         ldr     x4, [x0,40]
15063         cbz     w1, .L2002
15064         str     wzr, [x0,56]
15065         mov     x21, x0
15066         adrp    x0, :got:p_sys_data_buf_1
15067         adrp    x2, :got:req_sys
15068         adrp    x3, :got:p_sys_spare_buf
15069         sub     w20, w20, #1
15070         mov     x19, x2
15071         ldr     x0, [x0, #:got_lo12:p_sys_data_buf_1]
15072         uxth    w20, w20
15073         ldr     x1, [x2, #:got_lo12:req_sys]
15074         ldr     x0, [x0]
15075         str     x0, [x1,8]
15076         ldr     x3, [x3, #:got_lo12:p_sys_spare_buf]
15077         ldr     x3, [x3]
15078         str     x3, [x1,16]
15079         ubfiz   x3, x20, 2, 16
15080         ldr     w3, [x4,x3]
15081         str     w3, [x1,4]
15082         cbz     w3, .L2004
15083         mov     x0, x1
15084         mov     w1, 1
15085         mov     w2, w1
15086         bl      FlashReadPages
15087         b       .L2005
15088 .L2004:
15089         adrp    x2, :got:c_ftl_nand_byte_pre_page
15090         mov     w1, 255
15091         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
15092         ldrh    w2, [x2]
15093         bl      ftl_memset
15094 .L2005:
15095         ldr     x2, [x19, #:got_lo12:req_sys]
15096         mov     x0, x21
15097         mov     w1, w20
15098         ldr     x2, [x2,8]
15099         bl      FtlMapWritePage
15100 .L2002:
15101         ldp     x19, x20, [sp,16]
15102         ldr     x21, [sp,32]
15103         ldp     x29, x30, [sp], 48
15104         ret
15105         .size   FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData
15106         .align  2
15107         .global FtlRecoverySuperblock
15108         .type   FtlRecoverySuperblock, %function
15109 FtlRecoverySuperblock:
15110         stp     x29, x30, [sp, -240]!
15111         add     x29, sp, 0
15112         stp     x19, x20, [sp,16]
15113         stp     x21, x22, [sp,32]
15114         stp     x23, x24, [sp,48]
15115         stp     x25, x26, [sp,64]
15116         stp     x27, x28, [sp,80]
15117         mov     x19, x0
15118         ldrh    w25, [x0,2]
15119         ldrb    w22, [x0,6]
15120         adrp    x0, :got:c_ftl_nand_page_pre_blk
15121         str     x0, [x29,160]
15122         ldr     x1, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
15123         ldrh    w1, [x1]
15124         cmp     w1, w25
15125         bne     .L2010
15126         strh    wzr, [x19,4]
15127         b       .L2153
15128 .L2010:
15129         ldrh    w0, [x19,16]
15130         mov     w1, 0
15131         mov     w2, 65535
15132 .L2012:
15133         cmp     w0, w2
15134         bne     .L2156
15135         add     w1, w1, 1
15136         uxth    w1, w1
15137         add     x0, x19, x1, sxtw 1
15138         ldrh    w0, [x0,16]
15139         b       .L2012
15140 .L2156:
15141         ldrb    w1, [x19,8]
15142         cmp     w1, 1
15143         bne     .L2014
15144         bl      FtlGetLastWrittenPage
15145         cmn     w0, #1
15146         mov     w20, w0
15147         beq     .L2015
15148         adrp    x0, :got:slcPageToMlcPageTbl
15149         ldr     x0, [x0, #:got_lo12:slcPageToMlcPageTbl]
15150         ldrh    w23, [x0,w20,sxtw 1]
15151         b       .L2016
15152 .L2014:
15153         mov     w1, 0
15154         bl      FtlGetLastWrittenPage
15155         cmn     w0, #1
15156         mov     w20, w0
15157         beq     .L2015
15158         mov     w23, w0
15159 .L2016:
15160         adrp    x1, :got:c_ftl_nand_planes_num
15161         adrp    x0, :got:c_ftl_nand_byte_pre_oob
15162         mov     w26, 0
15163         str     x1, [x29,192]
15164         mov     w7, 65535
15165         mov     w8, 56
15166         ldr     x2, [x1, #:got_lo12:c_ftl_nand_planes_num]
15167         adrp    x9, :got:req_read
15168         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
15169         mov     w10, 4
15170         adrp    x11, :got:p_gc_spare_buf
15171         ldrh    w3, [x2]
15172         mov     x2, x19
15173         ldrh    w6, [x0]
15174         add     x3, x19, x3, lsl 1
15175         b       .L2017
15176 .L2015:
15177         strh    wzr, [x19,2]
15178 .L2153:
15179         strb    wzr, [x19,6]
15180         b       .L2011
15181 .L2019:
15182         ldrh    w1, [x2,16]
15183         cmp     w1, w7
15184         beq     .L2018
15185         ldr     x5, [x9, #:got_lo12:req_read]
15186         orr     w1, w23, w1, lsl 10
15187         umull   x0, w26, w8
15188         ldr     x4, [x5]
15189         add     x4, x4, x0
15190         str     w1, [x4,4]
15191         ldr     x1, [x5]
15192         add     x0, x1, x0
15193         mul     w1, w26, w6
15194         add     w26, w26, 1
15195         str     xzr, [x0,8]
15196         sdiv    w1, w1, w10
15197         uxth    w26, w26
15198         ldr     x4, [x11, #:got_lo12:p_gc_spare_buf]
15199         ldr     x4, [x4]
15200         add     x1, x4, x1, sxtw 2
15201         str     x1, [x0,16]
15202 .L2018:
15203         add     x2, x2, 2
15204 .L2017:
15205         cmp     x2, x3
15206         bne     .L2019
15207         adrp    x21, :got:req_read
15208         mov     w1, w26
15209         mov     w2, 0
15210         mov     w24, 65535
15211         ldr     x0, [x21, #:got_lo12:req_read]
15212         ldr     x0, [x0]
15213         bl      FlashReadPages
15214         adrp    x0, :got:g_GlobalDataVersion
15215         mov     x3, 0
15216         str     x0, [x29,152]
15217         mov     x6, 56
15218         uxth    w7, w23
15219         ldr     x1, [x0, #:got_lo12:g_GlobalDataVersion]
15220         ldr     w27, [x1]
15221 .L2020:
15222         uxth    w28, w3
15223         cmp     w28, w26
15224         bcs     .L2029
15225         ldr     x0, [x21, #:got_lo12:req_read]
15226         mul     x2, x3, x6
15227         ldr     x0, [x0]
15228         add     x1, x0, x2
15229         ldr     w0, [x0,x2]
15230         cbnz    w0, .L2021
15231         ldr     x5, [x1,16]
15232         str     x5, [x29,168]
15233         ldr     w0, [x5,4]
15234         cmn     w0, #1
15235         beq     .L2023
15236         ldr     x1, [x29,152]
15237         str     x7, [x29,176]
15238         str     x6, [x29,184]
15239         ldr     x4, [x1, #:got_lo12:g_GlobalDataVersion]
15240         str     x2, [x29,200]
15241         str     x3, [x29,208]
15242         ldr     w1, [x4]
15243         str     x4, [x29,216]
15244         bl      ftl_cmp_data_ver
15245         ldr     x4, [x29,216]
15246         ldr     x3, [x29,208]
15247         ldr     x2, [x29,200]
15248         ldr     x6, [x29,184]
15249         ldr     x7, [x29,176]
15250         ldr     x5, [x29,168]
15251         cbz     w0, .L2023
15252         ldr     w0, [x5,4]
15253         add     w0, w0, 1
15254         str     w0, [x4]
15255 .L2023:
15256         ldr     x0, [x21, #:got_lo12:req_read]
15257         ldr     x0, [x0]
15258         add     x2, x0, x2
15259         ldr     x0, [x2,16]
15260         ldr     w0, [x0]
15261         cmn     w0, #1
15262         bne     .L2025
15263 .L2029:
15264         cmp     w28, w26
15265         bne     .L2148
15266         ldr     x0, [x21, #:got_lo12:req_read]
15267         add     w20, w20, 1
15268         uxth    w20, w20
15269         ldr     x0, [x0]
15270         ldr     w0, [x0,4]
15271         b       .L2149
15272 .L2021:
15273         mov     w24, w7
15274 .L2025:
15275         add     x3, x3, 1
15276         b       .L2020
15277 .L2148:
15278         mov     w0, 56
15279         uxth    w20, w20
15280         umull   x28, w28, w0
15281         ldr     x0, [x21, #:got_lo12:req_read]
15282         ldr     x0, [x0]
15283         add     x28, x0, x28
15284         ldr     w0, [x28,4]
15285 .L2149:
15286         lsr     w0, w0, 10
15287         bl      P2V_plane
15288         uxth    w26, w0
15289         ldrb    w1, [x19,8]
15290         cmp     w1, 1
15291         bne     .L2031
15292         adrp    x0, :got:slcPageToMlcPageTbl
15293         ldr     x0, [x0, #:got_lo12:slcPageToMlcPageTbl]
15294         ldrh    w20, [x0,w20,sxtw 1]
15295 .L2031:
15296         ldr     x0, [x29,160]
15297         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
15298         ldrh    w0, [x0]
15299         cmp     w0, w20
15300         bne     .L2032
15301         strh    w20, [x19,2]
15302         strb    wzr, [x19,6]
15303         strh    wzr, [x19,4]
15304 .L2032:
15305         uxth    w0, w22
15306         cmp     w20, w25
15307         str     w0, [x29,184]
15308         bne     .L2033
15309         cmp     w26, w0
15310         beq     .L2154
15311 .L2033:
15312         mov     w0, 65535
15313         sub     w22, w27, #1
15314         cmp     w24, w0
15315         bne     .L2034
15316         cbnz    w1, .L2035
15317 .L2034:
15318         adrp    x24, :got:g_recovery_page_min_ver
15319         uxth    w5, w23
15320         ldr     x0, [x24, #:got_lo12:g_recovery_page_min_ver]
15321         ldr     w1, [x0]
15322         cmn     w1, #1
15323         bne     .L2036
15324         str     w22, [x0]
15325 .L2036:
15326         ldr     x0, [x24, #:got_lo12:g_recovery_page_min_ver]
15327         mov     w27, w25
15328         ldr     w6, [x0]
15329         add     w0, w25, 7
15330         cmp     w0, w23, uxth
15331         bge     .L2037
15332         sub     w27, w5, #7
15333         uxth    w27, w27
15334 .L2037:
15335         mov     w3, -1
15336         mov     w4, 65535
15337         mov     w28, w3
15338         mov     w7, 56
15339         adrp    x8, :got:mlcPageToSlcPageTbl
15340 .L2038:
15341         cmp     w27, w5
15342         bhi     .L2051
15343         ldr     x0, [x29,192]
15344         mov     w23, 0
15345         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
15346         ldrh    w2, [x0]
15347         mov     x0, x19
15348         add     x2, x19, x2, lsl 1
15349 .L2052:
15350         cmp     x0, x2
15351         beq     .L2157
15352         ldrh    w1, [x0,16]
15353         cmp     w1, w4
15354         beq     .L2039
15355         ldr     x10, [x21, #:got_lo12:req_read]
15356         orr     w1, w27, w1, lsl 10
15357         umull   x9, w23, w7
15358         add     w23, w23, 1
15359         ldr     x10, [x10]
15360         uxth    w23, w23
15361         add     x9, x10, x9
15362         str     w1, [x9,4]
15363 .L2039:
15364         add     x0, x0, 2
15365         b       .L2052
15366 .L2157:
15367         ldr     x9, [x21, #:got_lo12:req_read]
15368         mov     w1, w23
15369         mov     w2, 0
15370         str     x8, [x29,136]
15371         str     x7, [x29,144]
15372         ldr     x0, [x9]
15373         str     x4, [x29,168]
15374         str     x6, [x29,176]
15375         str     x5, [x29,200]
15376         str     x3, [x29,208]
15377         str     x9, [x29,216]
15378         bl      FlashReadPages
15379         ldr     x9, [x29,216]
15380         mov     w1, 0
15381         ldr     x3, [x29,208]
15382         sxtw    x10, w27
15383         ldr     x5, [x29,200]
15384         ldr     x0, [x9]
15385         ldr     x6, [x29,176]
15386         ldr     x4, [x29,168]
15387         add     x0, x0, 16
15388         ldr     x7, [x29,144]
15389         ldr     x8, [x29,136]
15390 .L2041:
15391         cmp     w1, w23
15392         beq     .L2158
15393         ldr     w2, [x0,-16]
15394         cbnz    w2, .L2042
15395         ldr     x2, [x0]
15396         ldrh    w9, [x2]
15397         cmp     w9, w4
15398         beq     .L2043
15399         ldr     w9, [x2,4]
15400         cmn     w9, #1
15401         beq     .L2043
15402         ldr     x2, [x24, #:got_lo12:g_recovery_page_min_ver]
15403         cmn     w3, #1
15404         ldr     w28, [x2]
15405         str     w9, [x2]
15406         bne     .L2043
15407         ldr     x2, [x8, #:got_lo12:mlcPageToSlcPageTbl]
15408         ldrh    w2, [x2,x10,lsl 1]
15409         cmp     w2, w4
15410         beq     .L2043
15411         cmp     w28, w22
15412         csinv   w3, w28, wzr, ne
15413         b       .L2043
15414 .L2042:
15415         ldrb    w0, [x19,8]
15416         cbnz    w0, .L2035
15417         adrp    x0, :got:mlcPageToSlcPageTbl
15418         ldr     x0, [x0, #:got_lo12:mlcPageToSlcPageTbl]
15419         ldrh    w1, [x0,w27,sxtw 1]
15420         mov     w0, 65535
15421         cmp     w1, w0
15422         bne     .L2046
15423         cmn     w3, #1
15424         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15425         beq     .L2047
15426         str     w3, [x24]
15427         b       .L2035
15428 .L2047:
15429         cmp     w6, w22
15430         beq     .L2048
15431         str     w6, [x24]
15432         b       .L2035
15433 .L2048:
15434         ldr     w0, [x24]
15435         b       .L2155
15436 .L2046:
15437         cmp     w28, w22
15438         beq     .L2049
15439         cmn     w28, #1
15440         beq     .L2035
15441         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15442         str     w28, [x24]
15443         b       .L2035
15444 .L2049:
15445         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15446         ldr     w0, [x24]
15447         cmp     w0, w22
15448         beq     .L2035
15449 .L2155:
15450         sub     w0, w0, #1
15451         b       .L2150
15452 .L2043:
15453         add     w1, w1, 1
15454         add     x0, x0, 56
15455         uxth    w1, w1
15456         b       .L2041
15457 .L2158:
15458         add     w27, w27, 1
15459         uxth    w27, w27
15460         b       .L2038
15461 .L2051:
15462         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15463         mov     w0, -1
15464 .L2150:
15465         str     w0, [x24]
15466 .L2035:
15467         adrp    x0, :got:g_power_lost_recovery_flag
15468         mov     w1, 1
15469         mov     w23, w25
15470         ldr     x0, [x0, #:got_lo12:g_power_lost_recovery_flag]
15471         strh    w1, [x0]
15472         adrp    x0, :got:gL2pMapInfo
15473         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
15474         bl      FtlMapBlkWriteDumpData
15475         add     x0, x29, 232
15476         str     x0, [x29,144]
15477         adrp    x0, .LC109
15478         add     x0, x0, :lo12:.LC109
15479         str     x0, [x29,128]
15480         add     x0, x29, 236
15481         str     x0, [x29,120]
15482         add     x0, x29, 228
15483         str     x0, [x29,112]
15484 .L2053:
15485         ldr     x0, [x29,192]
15486         mov     w4, 65535
15487         str     wzr, [x29,216]
15488         mov     w5, 56
15489         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
15490         ldrh    w2, [x0]
15491         mov     x0, x19
15492         add     x2, x19, x2, lsl 1
15493 .L2054:
15494         cmp     x0, x2
15495         beq     .L2159
15496         ldrh    w1, [x0,16]
15497         cmp     w1, w4
15498         beq     .L2055
15499         ldr     w3, [x29,216]
15500         orr     w1, w23, w1, lsl 10
15501         ldr     x6, [x21, #:got_lo12:req_read]
15502         umull   x3, w3, w5
15503         ldr     x6, [x6]
15504         add     x3, x6, x3
15505         str     w1, [x3,4]
15506         ldr     w1, [x29,216]
15507         add     w1, w1, 1
15508         uxth    w1, w1
15509         str     w1, [x29,216]
15510 .L2055:
15511         add     x0, x0, 2
15512         b       .L2054
15513 .L2159:
15514         ldr     x0, [x21, #:got_lo12:req_read]
15515         mov     w2, 0
15516         ldr     w1, [x29,216]
15517         ldr     x0, [x0]
15518         bl      FlashReadPages
15519         str     xzr, [x29,200]
15520 .L2057:
15521         ldrh    w0, [x29,200]
15522         ldr     w1, [x29,216]
15523         cmp     w1, w0, uxth
15524         bls     .L2160
15525         ldr     x0, [x29,200]
15526         mov     x1, 56
15527         mul     x24, x0, x1
15528         ldr     x0, [x21, #:got_lo12:req_read]
15529         ldr     x0, [x0]
15530         add     x0, x0, x24
15531         ldr     w0, [x0,4]
15532         str     w0, [x29,236]
15533         lsr     w0, w0, 10
15534         bl      P2V_plane
15535         uxth    w0, w0
15536         cmp     w23, w25
15537         bcc     .L2058
15538         ldr     w1, [x29,184]
15539         cmp     w0, w1
15540         bcs     .L2090
15541         cmp     w23, w25
15542         beq     .L2058
15543 .L2090:
15544         cmp     w0, w26
15545         bne     .L2091
15546         cmp     w23, w20
15547         beq     .L2060
15548 .L2091:
15549         ldr     x0, [x21, #:got_lo12:req_read]
15550         ldr     x0, [x0]
15551         add     x1, x0, x24
15552         ldr     w0, [x0,x24]
15553         cmn     w0, #1
15554         beq     .L2062
15555         ldr     x28, [x1,16]
15556         mov     w0, 61589
15557         ldrh    w1, [x28]
15558         cmp     w1, w0
15559         bne     .L2071
15560         ldr     w22, [x28,4]
15561         cmn     w22, #1
15562         beq     .L2065
15563         ldr     x0, [x29,152]
15564         ldr     x27, [x0, #:got_lo12:g_GlobalDataVersion]
15565         mov     w0, w22
15566         ldr     w1, [x27]
15567         bl      ftl_cmp_data_ver
15568         cbz     w0, .L2065
15569         ldr     w0, [x28,4]
15570         add     w0, w0, 1
15571         str     w0, [x27]
15572 .L2065:
15573         ldr     w27, [x28,8]
15574         mov     w2, 0
15575         ldr     w0, [x28,12]
15576         ldr     x1, [x29,144]
15577         str     w0, [x29,228]
15578         mov     w0, w27
15579         bl      log2phys
15580         adrp    x0, :got:g_recovery_page_min_ver
15581         str     x0, [x29,136]
15582         ldr     x1, [x0, #:got_lo12:g_recovery_page_min_ver]
15583         str     x1, [x29,168]
15584         ldr     w1, [x1]
15585         cmn     w1, #1
15586         beq     .L2067
15587         mov     w0, w22
15588         bl      ftl_cmp_data_ver
15589         cbz     w0, .L2067
15590         ldr     w1, [x29,228]
15591         cmn     w1, #1
15592         beq     .L2068
15593         ldr     x3, [x21, #:got_lo12:req_read]
15594         str     x3, [x29,104]
15595         ldr     x0, [x3]
15596         add     x0, x0, x24
15597         str     w1, [x0,4]
15598         mov     w1, 1
15599         ldr     x2, [x0,16]
15600         ldr     x0, [x3]
15601         str     x2, [x29,208]
15602         mov     w2, 0
15603         add     x0, x0, x24
15604         bl      FlashReadPages
15605         ldr     x0, [x29,208]
15606         ldr     x3, [x29,104]
15607         ldr     w0, [x0,4]
15608         str     w0, [x29,176]
15609         ldr     x0, [x3]
15610         ldr     w0, [x0,x24]
15611         cmn     w0, #1
15612         bne     .L2069
15613         b       .L2070
15614 .L2068:
15615         ldr     w0, [x29,236]
15616         ldr     w1, [x29,232]
15617         cmp     w1, w0
15618         bne     .L2071
15619         ldr     x1, [x29,112]
15620         mov     w0, w27
15621         mov     w2, 1
15622         bl      log2phys
15623 .L2071:
15624         ldrh    w0, [x19]
15625         b       .L2152
15626 .L2069:
15627         ldr     x0, [x29,208]
15628         ldr     w28, [x0,8]
15629         cmp     w28, w27
15630         bne     .L2070
15631         ldr     x0, [x29,168]
15632         ldr     w1, [x29,176]
15633         str     x3, [x29,104]
15634         ldr     w0, [x0]
15635         bl      ftl_cmp_data_ver
15636         ldr     x3, [x29,104]
15637         cbz     w0, .L2070
15638         ldr     w0, [x29,232]
15639         ldr     w1, [x29,236]
15640         cmp     w0, w1
15641         beq     .L2076
15642         ldr     w1, [x29,228]
15643         cmp     w0, w1
15644         beq     .L2070
15645         cmn     w0, #1
15646         ldr     x1, [x3]
15647         beq     .L2074
15648         add     x1, x1, x24
15649         str     w0, [x1,4]
15650         ldr     x2, [x1,16]
15651         mov     w1, 1
15652         ldr     x0, [x3]
15653         str     x2, [x29,208]
15654         mov     w2, 0
15655         add     x0, x0, x24
15656         bl      FlashReadPages
15657         b       .L2075
15658 .L2074:
15659         str     w0, [x1,x24]
15660 .L2075:
15661         ldr     x0, [x21, #:got_lo12:req_read]
15662         ldr     x0, [x0]
15663         ldr     w0, [x0,x24]
15664         cmn     w0, #1
15665         beq     .L2076
15666         ldr     x0, [x29,208]
15667         ldr     w24, [x0,4]
15668         ldr     x0, [x29,136]
15669         mov     w1, w24
15670         ldr     x0, [x0, #:got_lo12:g_recovery_page_min_ver]
15671         ldr     w0, [x0]
15672         bl      ftl_cmp_data_ver
15673         cbz     w0, .L2076
15674         ldr     w0, [x29,176]
15675         mov     w1, w24
15676         bl      ftl_cmp_data_ver
15677         cbz     w0, .L2070
15678 .L2076:
15679         ldr     w1, [x29,228]
15680         mov     w0, w28
15681         bl      FtlReUsePrevPpa
15682 .L2070:
15683         mov     w0, -1
15684         str     w0, [x29,228]
15685         ldrh    w0, [x19]
15686         bl      decrement_vpc_count
15687         b       .L2078
15688 .L2067:
15689         ldr     w0, [x29,236]
15690         ldr     w1, [x29,232]
15691         cmp     w1, w0
15692         beq     .L2078
15693         ldr     x1, [x29,120]
15694         mov     w0, w27
15695         mov     w2, 1
15696         bl      log2phys
15697         ldr     w0, [x29,232]
15698         cmn     w0, #1
15699         beq     .L2078
15700         ldr     w1, [x29,228]
15701         cmp     w0, w1
15702         beq     .L2078
15703         lsr     w0, w0, 10
15704         bl      P2V_block_in_plane
15705         uxth    w0, w0
15706         adrp    x1, :got:g_active_superblock
15707         ldr     x1, [x1, #:got_lo12:g_active_superblock]
15708         ldrh    w1, [x1]
15709         cmp     w1, w0
15710         beq     .L2081
15711         adrp    x1, :got:g_buffer_superblock
15712         ldr     x1, [x1, #:got_lo12:g_buffer_superblock]
15713         ldrh    w1, [x1]
15714         cmp     w1, w0
15715         beq     .L2081
15716         adrp    x1, :got:g_gc_temp_superblock
15717         ldr     x1, [x1, #:got_lo12:g_gc_temp_superblock]
15718         ldrh    w1, [x1]
15719         cmp     w1, w0
15720         bne     .L2078
15721 .L2081:
15722         ldr     x24, [x21, #:got_lo12:req_read]
15723         mov     w2, 0
15724         ldr     w1, [x29,232]
15725         ldr     x0, [x24]
15726         str     w1, [x0,4]
15727         mov     w1, 1
15728         ldr     x28, [x0,16]
15729         ldr     x0, [x24]
15730         bl      FlashReadPages
15731         ldr     x0, [x24]
15732         ldr     w1, [x28,4]
15733         ldr     w0, [x0]
15734         cmn     w0, #1
15735         beq     .L2078
15736         mov     w0, w22
15737         bl      ftl_cmp_data_ver
15738         cbnz    w0, .L2078
15739         ldr     x1, [x29,144]
15740         mov     w0, w27
15741         mov     w2, 1
15742         bl      log2phys
15743 .L2078:
15744         ldr     w0, [x29,228]
15745         cmn     w0, #1
15746         beq     .L2058
15747         lsr     w0, w0, 10
15748         bl      P2V_block_in_plane
15749         uxth    w1, w0
15750         adrp    x2, :got:p_valid_page_count_table
15751         ubfiz   x3, x1, 1, 16
15752         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
15753         ldr     x2, [x2]
15754         ldrh    w2, [x2,x3]
15755         cbz     w2, .L2082
15756 .L2152:
15757         bl      decrement_vpc_count
15758         b       .L2058
15759 .L2082:
15760         ldr     x0, [x29,128]
15761         bl      printk
15762         b       .L2058
15763 .L2062:
15764         adrp    x1, :got:g_recovery_page_num
15765         ldr     x1, [x1, #:got_lo12:g_recovery_page_num]
15766         ldr     w0, [x1]
15767         cmp     w0, 31
15768         bhi     .L2083
15769         adrp    x2, :got:g_recovery_ppa_tbl
15770         ldr     w3, [x29,236]
15771         ldr     x2, [x2, #:got_lo12:g_recovery_ppa_tbl]
15772         str     w3, [x2,w0,uxtw 2]
15773         add     w0, w0, 1
15774         str     w0, [x1]
15775 .L2083:
15776         ldrh    w0, [x19]
15777         bl      decrement_vpc_count
15778         adrp    x0, :got:g_recovery_page_min_ver
15779         ldr     x0, [x0, #:got_lo12:g_recovery_page_min_ver]
15780         ldr     w1, [x0]
15781         cmn     w1, #1
15782         beq     .L2151
15783         cmp     w1, w22
15784         bls     .L2058
15785 .L2151:
15786         str     w22, [x0]
15787 .L2058:
15788         ldr     x0, [x29,200]
15789         add     x0, x0, 1
15790         str     x0, [x29,200]
15791         b       .L2057
15792 .L2160:
15793         ldr     x0, [x29,160]
15794         add     w23, w23, 1
15795         uxth    w23, w23
15796         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
15797         ldrh    w0, [x0]
15798         cmp     w23, w0
15799         bne     .L2053
15800         ldr     x0, [x29,192]
15801         mov     w3, 65535
15802         strh    w23, [x19,2]
15803         strh    wzr, [x19,4]
15804         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
15805         ldrh    w2, [x0]
15806         mov     x0, 0
15807 .L2086:
15808         uxth    w1, w0
15809         cmp     w1, w2
15810         bcs     .L2011
15811         add     x0, x0, 1
15812         add     x4, x19, x0, lsl 1
15813         ldrh    w4, [x4,14]
15814         cmp     w4, w3
15815         beq     .L2086
15816         strb    w1, [x19,6]
15817         b       .L2011
15818 .L2060:
15819         strb    w26, [x19,6]
15820         strh    w20, [x19,2]
15821 .L2154:
15822         mov     x0, x19
15823         mov     w1, w20
15824         mov     w2, w26
15825         bl      ftl_sb_update_avl_pages
15826 .L2011:
15827         mov     w0, 0
15828         ldp     x19, x20, [sp,16]
15829         ldp     x21, x22, [sp,32]
15830         ldp     x23, x24, [sp,48]
15831         ldp     x25, x26, [sp,64]
15832         ldp     x27, x28, [sp,80]
15833         ldp     x29, x30, [sp], 240
15834         ret
15835         .size   FtlRecoverySuperblock, .-FtlRecoverySuperblock
15836         .align  2
15837         .global FtlWriteDumpData
15838         .type   FtlWriteDumpData, %function
15839 FtlWriteDumpData:
15840         stp     x29, x30, [sp, -144]!
15841         add     x29, sp, 0
15842         stp     x19, x20, [sp,16]
15843         adrp    x19, :got:g_active_superblock
15844         stp     x21, x22, [sp,32]
15845         stp     x23, x24, [sp,48]
15846         ldr     x0, [x19, #:got_lo12:g_active_superblock]
15847         stp     x25, x26, [sp,64]
15848         ldrh    w3, [x0,4]
15849         cbz     w3, .L2162
15850         ldrb    w1, [x0,8]
15851         cbnz    w1, .L2162
15852         adrp    x2, :got:c_ftl_nand_page_pre_blk
15853         ldrb    w1, [x0,7]
15854         ldr     x2, [x2, #:got_lo12:c_ftl_nand_page_pre_blk]
15855         ldrh    w2, [x2]
15856         mul     w1, w1, w2
15857         cmp     w3, w1
15858         beq     .L2162
15859         adrp    x1, :got:g_MaxLpn
15860         ldrb    w23, [x0,10]
15861         ldr     x1, [x1, #:got_lo12:g_MaxLpn]
15862         ldr     w21, [x1]
15863         adrp    x1, :got:c_ftl_nand_planes_num
15864         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
15865         ldrh    w24, [x1]
15866         cbnz    w23, .L2161
15867         sub     w21, w21, #1
15868         add     x1, x29, 84
15869         mov     w2, w23
15870         mov     w0, w21
15871         add     x22, x29, 88
15872         bl      log2phys
15873         str     w21, [x29,112]
15874         adrp    x0, :got:p_sys_data_buf
15875         ldr     w2, [x29,84]
15876         str     w2, [x29,92]
15877         cmn     w2, #1
15878         ldr     x0, [x0, #:got_lo12:p_sys_data_buf]
15879         ldr     x1, [x0]
15880         str     x1, [x29,96]
15881         adrp    x1, :got:p_sys_spare_buf
15882         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
15883         ldr     x20, [x1]
15884         str     x20, [x29,104]
15885         str     w23, [x20,4]
15886         beq     .L2164
15887         mov     x0, x22
15888         mov     w1, 1
15889         mov     w2, w23
15890         bl      FlashReadPages
15891         b       .L2165
15892 .L2164:
15893         adrp    x2, :got:c_ftl_nand_byte_pre_page
15894         ldr     x0, [x0]
15895         mov     w1, 255
15896         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
15897         ldrh    w2, [x2]
15898         bl      ftl_memset
15899 .L2165:
15900         mov     w0, 6
15901         mov     w26, 0
15902         adrp    x25, :got:g_GlobalDataVersion
15903         mul     w24, w24, w0
15904         mov     w0, -3947
15905         strh    w0, [x20]
15906 .L2166:
15907         cmp     w26, w24
15908         beq     .L2167
15909         ldr     x23, [x19, #:got_lo12:g_active_superblock]
15910         ldrh    w0, [x23,4]
15911         cbz     w0, .L2167
15912         ldr     w0, [x22,4]
15913         add     w26, w26, 1
15914         str     w0, [x20,12]
15915         ldrh    w0, [x23]
15916         strh    w0, [x20,2]
15917         mov     x0, x23
15918         str     w21, [x20,8]
15919         bl      get_new_active_ppa
15920         str     w0, [x22,4]
15921         ldr     x0, [x25, #:got_lo12:g_GlobalDataVersion]
15922         mov     w2, 0
15923         mov     w3, w2
15924         ldr     w1, [x0]
15925         str     w1, [x20,4]
15926         add     w1, w1, 1
15927         cmn     w1, #1
15928         csel    w1, w1, wzr, ne
15929         str     w1, [x0]
15930         mov     w1, 1
15931         mov     x0, x22
15932         bl      FlashProgPages
15933         ldrh    w0, [x23]
15934         bl      decrement_vpc_count
15935         b       .L2166
15936 .L2167:
15937         ldr     x19, [x19, #:got_lo12:g_active_superblock]
15938         mov     w0, 1
15939         strb    w0, [x19,10]
15940         b       .L2161
15941 .L2162:
15942         ldr     x19, [x19, #:got_lo12:g_active_superblock]
15943         strb    wzr, [x19,10]
15944 .L2161:
15945         ldp     x19, x20, [sp,16]
15946         ldp     x21, x22, [sp,32]
15947         ldp     x23, x24, [sp,48]
15948         ldp     x25, x26, [sp,64]
15949         ldp     x29, x30, [sp], 144
15950         ret
15951         .size   FtlWriteDumpData, .-FtlWriteDumpData
15952         .align  2
15953         .global l2p_flush
15954         .type   l2p_flush, %function
15955 l2p_flush:
15956         stp     x29, x30, [sp, -48]!
15957         add     x29, sp, 0
15958         stp     x19, x20, [sp,16]
15959         str     x21, [sp,32]
15960         mov     w19, 0
15961         adrp    x20, :got:c_ftl_nand_l2pmap_ram_region_num
15962         adrp    x21, :got:p_l2p_ram_map
15963         bl      FtlWriteDumpData
15964 .L2179:
15965         ldr     x0, [x20, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
15966         ldrh    w0, [x0]
15967         cmp     w0, w19
15968         bls     .L2182
15969         ldr     x1, [x21, #:got_lo12:p_l2p_ram_map]
15970         ubfiz   x0, x19, 4, 16
15971         ldr     x1, [x1]
15972         add     x0, x1, x0
15973         ldr     w0, [x0,4]
15974         tbz     w0, #31, .L2180
15975         mov     w0, w19
15976         bl      flush_l2p_region
15977 .L2180:
15978         add     w19, w19, 1
15979         uxth    w19, w19
15980         b       .L2179
15981 .L2182:
15982         mov     w0, 0
15983         ldr     x21, [sp,32]
15984         ldp     x19, x20, [sp,16]
15985         ldp     x29, x30, [sp], 48
15986         ret
15987         .size   l2p_flush, .-l2p_flush
15988         .align  2
15989         .global FtlVpcCheckAndModify
15990         .type   FtlVpcCheckAndModify, %function
15991 FtlVpcCheckAndModify:
15992         stp     x29, x30, [sp, -112]!
15993         adrp    x1, .LANCHOR1
15994         adrp    x0, .LC110
15995         add     x1, x1, :lo12:.LANCHOR1
15996         add     x29, sp, 0
15997         add     x1, x1, 16
15998         add     x0, x0, :lo12:.LC110
15999         stp     x19, x20, [sp,16]
16000         stp     x21, x22, [sp,32]
16001         stp     x23, x24, [sp,48]
16002         stp     x25, x26, [sp,64]
16003         stp     x27, x28, [sp,80]
16004         bl      printk
16005         adrp    x20, :got:p_valid_page_count_check_table
16006         adrp    x0, :got:c_ftl_nand_blk_pre_plane
16007         mov     w19, 0
16008         adrp    x21, :got:g_MaxLpn
16009         add     x22, x29, 108
16010         ldr     x1, [x20, #:got_lo12:p_valid_page_count_check_table]
16011         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
16012         ldrh    w2, [x0]
16013         ldr     x0, [x1]
16014         mov     w1, 0
16015         lsl     w2, w2, 1
16016         bl      ftl_memset
16017 .L2184:
16018         ldr     x0, [x21, #:got_lo12:g_MaxLpn]
16019         ldr     w0, [x0]
16020         cmp     w19, w0
16021         bcs     .L2199
16022         mov     w0, w19
16023         mov     x1, x22
16024         mov     w2, 0
16025         bl      log2phys
16026         ldr     w0, [x29,108]
16027         cmn     w0, #1
16028         beq     .L2185
16029         lsr     w0, w0, 10
16030         bl      P2V_block_in_plane
16031         ubfiz   x0, x0, 1, 16
16032         ldr     x1, [x20, #:got_lo12:p_valid_page_count_check_table]
16033         ldr     x3, [x1]
16034         ldrh    w2, [x3,x0]
16035         add     w2, w2, 1
16036         strh    w2, [x3,x0]
16037 .L2185:
16038         add     w19, w19, 1
16039         b       .L2184
16040 .L2199:
16041         adrp    x22, .LC111
16042         mov     w19, 0
16043         adrp    x23, :got:c_ftl_nand_data_blks_per_plane
16044         adrp    x24, :got:p_valid_page_count_table
16045         mov     w25, 65535
16046         add     x22, x22, :lo12:.LC111
16047         adrp    x26, :got:g_active_superblock
16048 .L2187:
16049         ldr     x0, [x23, #:got_lo12:c_ftl_nand_data_blks_per_plane]
16050         ldrh    w0, [x0]
16051         cmp     w0, w19
16052         bls     .L2200
16053         ldr     x27, [x24, #:got_lo12:p_valid_page_count_table]
16054         ubfiz   x21, x19, 1, 16
16055         ldr     x28, [x20, #:got_lo12:p_valid_page_count_check_table]
16056         ldr     x0, [x27]
16057         ldrh    w2, [x0,x21]
16058         ldr     x0, [x28]
16059         ldrh    w3, [x0,x21]
16060         cmp     w2, w3
16061         beq     .L2190
16062         cmp     w2, w25
16063         beq     .L2190
16064         mov     x0, x22
16065         mov     w1, w19
16066         bl      printk
16067         ldr     x0, [x26, #:got_lo12:g_active_superblock]
16068         ldrh    w0, [x0]
16069         cmp     w0, w19
16070         beq     .L2190
16071         adrp    x0, :got:g_gc_temp_superblock
16072         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
16073         ldrh    w0, [x0]
16074         cmp     w0, w19
16075         beq     .L2190
16076         adrp    x0, :got:g_buffer_superblock
16077         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
16078         ldrh    w0, [x0]
16079         cmp     w0, w19
16080         beq     .L2190
16081         ldr     x0, [x28]
16082         ldrh    w1, [x0,x21]
16083         ldr     x0, [x27]
16084         strh    w1, [x0,x21]
16085         mov     w0, w19
16086         bl      update_vpc_list
16087         bl      l2p_flush
16088         bl      FtlVpcTblFlush
16089 .L2190:
16090         add     w19, w19, 1
16091         uxth    w19, w19
16092         b       .L2187
16093 .L2200:
16094         ldp     x19, x20, [sp,16]
16095         ldp     x21, x22, [sp,32]
16096         ldp     x23, x24, [sp,48]
16097         ldp     x25, x26, [sp,64]
16098         ldp     x27, x28, [sp,80]
16099         ldp     x29, x30, [sp], 112
16100         ret
16101         .size   FtlVpcCheckAndModify, .-FtlVpcCheckAndModify
16102         .align  2
16103         .global allocate_new_data_superblock
16104         .type   allocate_new_data_superblock, %function
16105 allocate_new_data_superblock:
16106         stp     x29, x30, [sp, -48]!
16107         add     x29, sp, 0
16108         stp     x19, x20, [sp,16]
16109         str     x21, [sp,32]
16110         mov     x19, x0
16111         ldrh    w21, [x0]
16112         mov     w0, 65535
16113         cmp     w21, w0
16114         beq     .L2202
16115         adrp    x1, :got:p_valid_page_count_table
16116         ubfiz   x0, x21, 1, 16
16117         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
16118         ldr     x1, [x1]
16119         ldrh    w0, [x1,x0]
16120         cbz     w0, .L2203
16121         mov     w0, w21
16122         bl      INSERT_DATA_LIST
16123         b       .L2202
16124 .L2203:
16125         mov     w0, w21
16126         bl      INSERT_FREE_LIST
16127 .L2202:
16128         adrp    x0, :got:g_buffer_superblock
16129         strb    wzr, [x19,8]
16130         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
16131         cmp     x19, x0
16132         beq     .L2204
16133         adrp    x0, :got:c_ftl_nand_type
16134         ldr     x0, [x0, #:got_lo12:c_ftl_nand_type]
16135         ldrh    w0, [x0]
16136         cmp     w0, 1
16137         bne     .L2205
16138 .L2204:
16139         mov     w0, 1
16140         strb    w0, [x19,8]
16141         b       .L2206
16142 .L2205:
16143         adrp    x1, :got:g_active_superblock
16144         ldr     x2, [x1, #:got_lo12:g_active_superblock]
16145         cmp     x19, x2
16146         bne     .L2206
16147         cmp     w0, 3
16148         beq     .L2208
16149         adrp    x0, :got:g_all_blk_used_slc_mode
16150         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
16151         ldr     w0, [x0]
16152         cmp     w0, 1
16153         bne     .L2209
16154 .L2208:
16155         ldr     x0, [x1, #:got_lo12:g_active_superblock]
16156         mov     w2, 1
16157         strb    w2, [x0,8]
16158 .L2209:
16159         adrp    x0, :got:g_inkDie_check_enable
16160         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
16161         ldr     w0, [x0]
16162         cbz     w0, .L2206
16163         adrp    x0, :got:g_min_erase_count
16164         ldr     x0, [x0, #:got_lo12:g_min_erase_count]
16165         ldr     w0, [x0]
16166         cmp     w0, 29
16167         bhi     .L2206
16168         ldr     x1, [x1, #:got_lo12:g_active_superblock]
16169         mov     w0, 1
16170         strb    w0, [x1,8]
16171 .L2206:
16172         adrp    x1, :got:g_tmp_data_superblock_id
16173         mov     w2, 65535
16174         mov     x20, x1
16175         ldr     x0, [x1, #:got_lo12:g_tmp_data_superblock_id]
16176         ldrh    w0, [x0]
16177         cmp     w0, w2
16178         beq     .L2211
16179         cmp     w21, w0
16180         bne     .L2212
16181         adrp    x2, :got:p_valid_page_count_table
16182         ubfiz   x1, x0, 1, 16
16183         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
16184         ldr     x2, [x2]
16185         ldrh    w1, [x2,x1]
16186         cbz     w1, .L2213
16187 .L2212:
16188         bl      update_vpc_list
16189 .L2213:
16190         ldr     x1, [x20, #:got_lo12:g_tmp_data_superblock_id]
16191         mov     w0, -1
16192         strh    w0, [x1]
16193 .L2211:
16194         mov     x0, x19
16195         bl      allocate_data_superblock
16196         bl      l2p_flush
16197         bl      FtlVpcTblFlush
16198         mov     w0, 0
16199         bl      FtlEctTblFlush
16200         ldr     x21, [sp,32]
16201         mov     w0, 0
16202         ldp     x19, x20, [sp,16]
16203         ldp     x29, x30, [sp], 48
16204         ret
16205         .size   allocate_new_data_superblock, .-allocate_new_data_superblock
16206         .align  2
16207         .global FtlCacheWriteBack
16208         .type   FtlCacheWriteBack, %function
16209 FtlCacheWriteBack:
16210         adrp    x0, :got:gp_last_act_superblock
16211         stp     x29, x30, [sp, -144]!
16212         add     x29, sp, 0
16213         ldr     x0, [x0, #:got_lo12:gp_last_act_superblock]
16214         stp     x19, x20, [sp,16]
16215         stp     x21, x22, [sp,32]
16216         stp     x23, x24, [sp,48]
16217         stp     x25, x26, [sp,64]
16218         stp     x27, x28, [sp,80]
16219         ldr     x19, [x0]
16220         adrp    x0, :got:g_wr_page_num
16221         str     x0, [x29,120]
16222         ldr     x1, [x0, #:got_lo12:g_wr_page_num]
16223         ldr     w1, [x1]
16224         cbz     w1, .L2224
16225         adrp    x21, :got:req_wr_io
16226         ldrb    w3, [x19,9]
16227         mov     w2, 0
16228         mov     w23, 0
16229         adrp    x24, .LC112
16230         mov     w22, w23
16231         ldr     x0, [x21, #:got_lo12:req_wr_io]
16232         mov     w25, 56
16233         adrp    x26, :got:p_valid_page_count_table
16234         add     x24, x24, :lo12:.LC112
16235         ldr     x0, [x0]
16236         bl      FlashProgPages
16237         add     x0, x29, 140
16238         str     x0, [x29,112]
16239 .L2225:
16240         ldr     x0, [x29,120]
16241         ldr     x0, [x0, #:got_lo12:g_wr_page_num]
16242         ldr     w1, [x0]
16243         cmp     w22, w1
16244         bcs     .L2243
16245         cbz     w23, .L2226
16246         ldr     x1, [x21, #:got_lo12:req_wr_io]
16247         mov     w2, -1
16248         umull   x0, w22, w25
16249         ldr     x1, [x1]
16250         str     w2, [x1,x0]
16251 .L2226:
16252         umull   x20, w22, w25
16253         adrp    x27, :got:c_ftl_nand_page_pre_blk
16254         adrp    x28, :got:g_sys_ext_data
16255 .L2227:
16256         ldr     x3, [x21, #:got_lo12:req_wr_io]
16257         ldr     x1, [x3]
16258         add     x0, x1, x20
16259         ldr     w1, [x1,x20]
16260         cmn     w1, #1
16261         bne     .L2244
16262         ldr     w0, [x0,4]
16263         lsr     w0, w0, 10
16264         bl      P2V_block_in_plane
16265         ldrh    w1, [x19]
16266         cmp     w1, w0, uxth
16267         bne     .L2228
16268         ldr     x0, [x26, #:got_lo12:p_valid_page_count_table]
16269         ubfiz   x1, x1, 1, 16
16270         ldrh    w3, [x19,4]
16271         ldr     x2, [x0]
16272         ldrh    w0, [x2,x1]
16273         sub     w0, w0, w3
16274         strh    w0, [x2,x1]
16275         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_blk]
16276         strb    wzr, [x19,6]
16277         strh    wzr, [x19,4]
16278         ldrh    w0, [x0]
16279         strh    w0, [x19,2]
16280 .L2228:
16281         ldrh    w0, [x19,4]
16282         cbnz    w0, .L2229
16283         mov     x0, x19
16284         bl      allocate_new_data_superblock
16285 .L2229:
16286         ldr     x1, [x28, #:got_lo12:g_sys_ext_data]
16287         ldr     w0, [x1,96]
16288         add     w0, w0, 1
16289         str     w0, [x1,96]
16290         ldr     x23, [x21, #:got_lo12:req_wr_io]
16291         ldr     x0, [x23]
16292         add     x0, x0, x20
16293         ldr     w0, [x0,4]
16294         lsr     w0, w0, 10
16295         bl      FtlGcMarkBadPhyBlk
16296         mov     x0, x19
16297         bl      get_new_active_ppa
16298         str     w0, [x29,140]
16299         ldr     x1, [x23]
16300         mov     w2, 0
16301         add     x1, x1, x20
16302         str     w0, [x1,4]
16303         mov     w1, 1
16304         ldr     x0, [x23]
16305         mov     w23, 1
16306         ldrb    w3, [x19,9]
16307         add     x0, x0, x20
16308         bl      FlashProgPages
16309         b       .L2227
16310 .L2244:
16311         ldr     w1, [x0,4]
16312         mov     w2, 1
16313         str     w1, [x29,140]
16314         ldr     w0, [x0,24]
16315         ldr     x1, [x29,112]
16316         str     x3, [x29,104]
16317         bl      log2phys
16318         ldr     x3, [x29,104]
16319         ldr     x0, [x3]
16320         add     x20, x0, x20
16321         ldr     x0, [x20,16]
16322         ldr     w0, [x0,12]
16323         cmn     w0, #1
16324         beq     .L2231
16325         lsr     w0, w0, 10
16326         bl      P2V_block_in_plane
16327         uxth    w1, w0
16328         ldr     x2, [x26, #:got_lo12:p_valid_page_count_table]
16329         ubfiz   x0, x1, 1, 16
16330         mov     w20, w1
16331         ldr     x2, [x2]
16332         ldrh    w2, [x2,x0]
16333         cbnz    w2, .L2232
16334         mov     x0, x24
16335         bl      printk
16336 .L2232:
16337         mov     w0, w20
16338         bl      decrement_vpc_count
16339 .L2231:
16340         add     w22, w22, 1
16341         b       .L2225
16342 .L2243:
16343         str     wzr, [x0]
16344 .L2224:
16345         mov     w0, 0
16346         ldp     x19, x20, [sp,16]
16347         ldp     x21, x22, [sp,32]
16348         ldp     x23, x24, [sp,48]
16349         ldp     x25, x26, [sp,64]
16350         ldp     x27, x28, [sp,80]
16351         ldp     x29, x30, [sp], 144
16352         ret
16353         .size   FtlCacheWriteBack, .-FtlCacheWriteBack
16354         .align  2
16355         .global rk_ftl_cache_write_back
16356         .type   rk_ftl_cache_write_back, %function
16357 rk_ftl_cache_write_back:
16358         stp     x29, x30, [sp, -16]!
16359         add     x29, sp, 0
16360         bl      FtlCacheWriteBack
16361         ldp     x29, x30, [sp], 16
16362         ret
16363         .size   rk_ftl_cache_write_back, .-rk_ftl_cache_write_back
16364         .align  2
16365         .global FtlSysFlush
16366         .type   FtlSysFlush, %function
16367 FtlSysFlush:
16368         stp     x29, x30, [sp, -16]!
16369         add     x29, sp, 0
16370         bl      FtlCacheWriteBack
16371         bl      l2p_flush
16372         bl      FtlVpcTblFlush
16373         mov     w0, 1
16374         bl      FtlEctTblFlush
16375         mov     w0, 0
16376         ldp     x29, x30, [sp], 16
16377         ret
16378         .size   FtlSysFlush, .-FtlSysFlush
16379         .align  2
16380         .global FtlDeInit
16381         .type   FtlDeInit, %function
16382 FtlDeInit:
16383         adrp    x0, :got:gFtlInitStatus
16384         stp     x29, x30, [sp, -16]!
16385         add     x29, sp, 0
16386         ldr     x0, [x0, #:got_lo12:gFtlInitStatus]
16387         ldr     w0, [x0]
16388         cmp     w0, 1
16389         bne     .L2248
16390         bl      FtlSysFlush
16391 .L2248:
16392         mov     w0, 0
16393         ldp     x29, x30, [sp], 16
16394         ret
16395         .size   FtlDeInit, .-FtlDeInit
16396         .align  2
16397         .global rk_ftl_de_init
16398         .type   rk_ftl_de_init, %function
16399 rk_ftl_de_init:
16400         stp     x29, x30, [sp, -16]!
16401         add     x29, sp, 0
16402         bl      rk_nand_de_init
16403         bl      FtlDeInit
16404         bl      rk_nand_de_init
16405         ldp     x29, x30, [sp], 16
16406         ret
16407         .size   rk_ftl_de_init, .-rk_ftl_de_init
16408         .align  2
16409         .global FtlDiscard
16410         .type   FtlDiscard, %function
16411 FtlDiscard:
16412         stp     x29, x30, [sp, -96]!
16413         add     w2, w0, w1
16414         add     x29, sp, 0
16415         stp     x19, x20, [sp,16]
16416         mov     w20, w0
16417         adrp    x0, :got:g_MaxLbaSector
16418         stp     x21, x22, [sp,32]
16419         stp     x23, x24, [sp,48]
16420         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
16421         mov     w19, w1
16422         str     x25, [sp,64]
16423         ldr     w1, [x0]
16424         mov     w0, -1
16425         cmp     w2, w1
16426         bhi     .L2251
16427         cmp     w19, 31
16428         bls     .L2265
16429         adrp    x22, :got:c_ftl_nand_sec_pre_page
16430         bl      FtlCacheWriteBack
16431         ldr     x0, [x22, #:got_lo12:c_ftl_nand_sec_pre_page]
16432         ldrh    w1, [x0]
16433         udiv    w21, w20, w1
16434         msub    w20, w1, w21, w20
16435         uxth    w20, w20
16436         cbz     w20, .L2253
16437         sub     w1, w1, w20
16438         add     w21, w21, 1
16439         cmp     w1, w19
16440         csel    w1, w1, w19, ls
16441         sub     w19, w19, w1, uxth
16442 .L2253:
16443         adrp    x20, .LANCHOR0
16444         mov     w0, -1
16445         add     x23, x29, 88
16446         str     w0, [x29,92]
16447         add     x20, x20, :lo12:.LANCHOR0
16448         adrp    x24, :got:g_totle_discard_page_count
16449         add     x25, x29, 92
16450 .L2254:
16451         ldr     x0, [x22, #:got_lo12:c_ftl_nand_sec_pre_page]
16452         ldrh    w0, [x0]
16453         cmp     w19, w0
16454         bcc     .L2266
16455         mov     w0, w21
16456         mov     x1, x23
16457         mov     w2, 0
16458         bl      log2phys
16459         ldr     w0, [x29,88]
16460         cmn     w0, #1
16461         beq     .L2255
16462         ldr     w0, [x20,32]
16463         mov     w2, 1
16464         add     w0, w0, 1
16465         str     w0, [x20,32]
16466         ldr     x1, [x24, #:got_lo12:g_totle_discard_page_count]
16467         ldr     w0, [x1]
16468         add     w0, w0, 1
16469         str     w0, [x1]
16470         mov     x1, x25
16471         mov     w0, w21
16472         bl      log2phys
16473         ldr     w0, [x29,88]
16474         lsr     w0, w0, 10
16475         bl      P2V_block_in_plane
16476         bl      decrement_vpc_count
16477 .L2255:
16478         ldr     x0, [x22, #:got_lo12:c_ftl_nand_sec_pre_page]
16479         add     w21, w21, 1
16480         ldrh    w0, [x0]
16481         sub     w19, w19, w0
16482         b       .L2254
16483 .L2266:
16484         adrp    x0, .LANCHOR0
16485         add     x0, x0, :lo12:.LANCHOR0
16486         ldr     w1, [x0,32]
16487         cmp     w1, 32
16488         bls     .L2265
16489         str     wzr, [x0,32]
16490         bl      l2p_flush
16491         bl      FtlVpcTblFlush
16492 .L2265:
16493         mov     w0, 0
16494 .L2251:
16495         ldp     x19, x20, [sp,16]
16496         ldp     x21, x22, [sp,32]
16497         ldp     x23, x24, [sp,48]
16498         ldr     x25, [sp,64]
16499         ldp     x29, x30, [sp], 96
16500         ret
16501         .size   FtlDiscard, .-FtlDiscard
16502         .align  2
16503         .global FtlGcFreeTempBlock
16504         .type   FtlGcFreeTempBlock, %function
16505 FtlGcFreeTempBlock:
16506         stp     x29, x30, [sp, -112]!
16507         add     x29, sp, 0
16508         stp     x19, x20, [sp,16]
16509         adrp    x19, :got:g_gc_temp_superblock
16510         adrp    x20, :got:c_ftl_nand_page_pre_blk
16511         stp     x21, x22, [sp,32]
16512         stp     x23, x24, [sp,48]
16513         ldr     x2, [x19, #:got_lo12:g_gc_temp_superblock]
16514         stp     x25, x26, [sp,64]
16515         stp     x27, x28, [sp,80]
16516         ldr     x1, [x20, #:got_lo12:c_ftl_nand_page_pre_blk]
16517         ldrh    w21, [x2]
16518         mov     w2, 65535
16519         cmp     w21, w2
16520         ldrh    w1, [x1]
16521         bne     .L2268
16522 .L2278:
16523         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
16524         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16525         str     wzr, [x0]
16526         mov     w0, 65535
16527         ldr     x22, [x19, #:got_lo12:g_gc_temp_superblock]
16528         ldrh    w1, [x22]
16529         cmp     w1, w0
16530         beq     .L2296
16531         adrp    x21, :got:p_valid_page_count_table
16532         bl      FtlCacheWriteBack
16533         ldr     x20, [x20, #:got_lo12:c_ftl_nand_page_pre_blk]
16534         adrp    x25, :got:p_gc_page_info
16535         ldrh    w2, [x22]
16536         mov     w26, 12
16537         ldr     x0, [x21, #:got_lo12:p_valid_page_count_table]
16538         add     x27, x29, 108
16539         ldrh    w3, [x20]
16540         adrp    x20, :got:g_gc_page_offset
16541         ldr     x1, [x0]
16542         ldrb    w0, [x22,7]
16543         mov     w22, 0
16544         mul     w0, w0, w3
16545         strh    w0, [x1,x2,lsl 1]
16546         adrp    x0, :got:g_totle_gc_page_count
16547         ldr     x1, [x20, #:got_lo12:g_gc_page_offset]
16548         ldr     x0, [x0, #:got_lo12:g_totle_gc_page_count]
16549         ldrh    w2, [x1]
16550         ldr     w1, [x0]
16551         add     w1, w2, w1
16552         str     w1, [x0]
16553         b       .L2279
16554 .L2268:
16555         cbz     w0, .L2271
16556         adrp    x0, .LANCHOR2
16557         add     x0, x0, :lo12:.LANCHOR2
16558         ldrh    w3, [x0,128]
16559         cmp     w3, w2
16560         beq     .L2272
16561 .L2273:
16562         mov     w1, 2
16563         b       .L2271
16564 .L2272:
16565         strh    wzr, [x0,128]
16566         adrp    x0, :got:g_num_free_superblocks
16567         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
16568         ldrh    w0, [x0]
16569         cmp     w0, 17
16570         bhi     .L2273
16571 .L2271:
16572         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
16573         bl      FtlGcScanTempBlk
16574         str     w0, [x29,108]
16575         cmn     w0, #1
16576         beq     .L2274
16577         adrp    x0, :got:g_sys_ext_data
16578         ubfiz   x21, x21, 1, 16
16579         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
16580         ldr     w1, [x0,96]
16581         add     w1, w1, 1
16582         str     w1, [x0,96]
16583         adrp    x0, :got:p_erase_count_table
16584         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
16585         ldr     x1, [x0]
16586         ldrh    w0, [x1,x21]
16587         cmp     w0, 4
16588         bls     .L2275
16589         sub     w0, w0, #5
16590         strh    w0, [x1,x21]
16591         mov     w0, 1
16592         bl      FtlEctTblFlush
16593 .L2275:
16594         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
16595         mov     x19, x0
16596         ldr     x1, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16597         ldr     w1, [x1]
16598         cbnz    w1, .L2276
16599         ldr     w0, [x29,108]
16600         lsr     w0, w0, 10
16601         bl      FtlBbmMapBadBlock
16602         bl      FtlBbmTblFlush
16603 .L2276:
16604         ldr     x0, [x19, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16605         str     wzr, [x0]
16606         mov     w0, 1
16607         b       .L2277
16608 .L2274:
16609         adrp    x0, .LANCHOR2+128
16610         mov     w1, 65535
16611         ldrh    w2, [x0,#:lo12:.LANCHOR2+128]
16612         mov     w0, 1
16613         cmp     w2, w1
16614         bne     .L2277
16615         b       .L2278
16616 .L2282:
16617         ldr     x0, [x25, #:got_lo12:p_gc_page_info]
16618         mov     x1, x27
16619         umull   x24, w22, w26
16620         mov     w2, 0
16621         ldr     x28, [x0]
16622         add     x23, x28, x24
16623         ldr     w0, [x23,8]
16624         bl      log2phys
16625         ldr     w0, [x29,108]
16626         ldr     w1, [x28,x24]
16627         cmp     w0, w1
16628         bne     .L2280
16629         lsr     w0, w0, 10
16630         bl      P2V_block_in_plane
16631         mov     w24, w0
16632         ldr     w0, [x23,8]
16633         add     x1, x23, 4
16634         mov     w2, 1
16635         bl      log2phys
16636         mov     w0, w24
16637 .L2295:
16638         bl      decrement_vpc_count
16639 .L2281:
16640         add     w22, w22, 1
16641         uxth    w22, w22
16642 .L2279:
16643         ldr     x0, [x20, #:got_lo12:g_gc_page_offset]
16644         ldrh    w0, [x0]
16645         cmp     w0, w22
16646         bhi     .L2282
16647         b       .L2298
16648 .L2280:
16649         ldr     w1, [x23,4]
16650         cmp     w0, w1
16651         beq     .L2281
16652         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
16653         ldrh    w0, [x0]
16654         b       .L2295
16655 .L2298:
16656         mov     w0, -1
16657         bl      decrement_vpc_count
16658         ldr     x21, [x21, #:got_lo12:p_valid_page_count_table]
16659         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
16660         ldr     x2, [x21]
16661         ldrh    w0, [x0]
16662         ubfiz   x1, x0, 1, 16
16663         ldrh    w1, [x2,x1]
16664         cbz     w1, .L2283
16665         bl      INSERT_DATA_LIST
16666         b       .L2284
16667 .L2283:
16668         bl      INSERT_FREE_LIST
16669 .L2284:
16670         ldr     x19, [x19, #:got_lo12:g_gc_temp_superblock]
16671         mov     w0, -1
16672         strh    w0, [x19]
16673         adrp    x0, :got:g_gc_blk_num
16674         ldr     x20, [x20, #:got_lo12:g_gc_page_offset]
16675         strh    wzr, [x20]
16676         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
16677         strh    wzr, [x0]
16678         bl      l2p_flush
16679         bl      FtlVpcTblFlush
16680         adrp    x0, :got:g_inkDie_check_enable
16681         adrp    x1, :got:g_num_free_superblocks
16682         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
16683         ldr     w2, [x0]
16684         adrp    x0, :got:c_ftl_nand_data_op_blks_per_plane
16685         cbz     w2, .L2285
16686         adrp    x2, :got:g_min_erase_count
16687         ldr     x2, [x2, #:got_lo12:g_min_erase_count]
16688         ldr     w2, [x2]
16689         cmp     w2, 29
16690         bhi     .L2285
16691         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
16692         ldr     x1, [x1, #:got_lo12:g_num_free_superblocks]
16693         ldrh    w0, [x0]
16694         ldrh    w1, [x1]
16695         cmp     w1, w0
16696         bcs     .L2286
16697         adrp    x1, :got:g_gc_free_blk_threshold
16698         lsl     w0, w0, 1
16699         ldr     x1, [x1, #:got_lo12:g_gc_free_blk_threshold]
16700         strh    w0, [x1]
16701 .L2286:
16702         adrp    x0, :got:g_gc_superblock
16703         mov     w1, -1
16704         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
16705         b       .L2297
16706 .L2285:
16707         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
16708         ldr     x1, [x1, #:got_lo12:g_num_free_superblocks]
16709         ldrh    w0, [x0]
16710         ldrh    w1, [x1]
16711         add     w0, w0, w0, lsl 1
16712         cmp     w1, w0, lsr 2
16713         ble     .L2296
16714         adrp    x0, :got:g_gc_superblock
16715         mov     w1, -1
16716         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
16717         strh    w1, [x0]
16718         adrp    x0, :got:g_gc_free_blk_threshold
16719         mov     w1, 20
16720         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
16721 .L2297:
16722         strh    w1, [x0]
16723 .L2296:
16724         mov     w0, 0
16725 .L2277:
16726         ldp     x19, x20, [sp,16]
16727         ldp     x21, x22, [sp,32]
16728         ldp     x23, x24, [sp,48]
16729         ldp     x25, x26, [sp,64]
16730         ldp     x27, x28, [sp,80]
16731         ldp     x29, x30, [sp], 112
16732         ret
16733         .size   FtlGcFreeTempBlock, .-FtlGcFreeTempBlock
16734         .align  2
16735         .global FtlGcPageRecovery
16736         .type   FtlGcPageRecovery, %function
16737 FtlGcPageRecovery:
16738         stp     x29, x30, [sp, -32]!
16739         add     x29, sp, 0
16740         stp     x19, x20, [sp,16]
16741         adrp    x19, :got:c_ftl_nand_page_pre_blk
16742         adrp    x20, :got:g_gc_temp_superblock
16743         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_blk]
16744         ldr     x20, [x20, #:got_lo12:g_gc_temp_superblock]
16745         ldrh    w1, [x19]
16746         mov     x0, x20
16747         bl      FtlGcScanTempBlk
16748         ldrh    w1, [x20,2]
16749         ldrh    w0, [x19]
16750         cmp     w1, w0
16751         bcc     .L2299
16752         adrp    x0, :got:gL2pMapInfo
16753         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
16754         bl      FtlMapBlkWriteDumpData
16755         mov     w0, 0
16756         bl      FtlGcFreeTempBlock
16757         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
16758         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16759         str     wzr, [x0]
16760 .L2299:
16761         ldp     x19, x20, [sp,16]
16762         ldp     x29, x30, [sp], 32
16763         ret
16764         .size   FtlGcPageRecovery, .-FtlGcPageRecovery
16765         .align  2
16766         .global FtlPowerLostRecovery
16767         .type   FtlPowerLostRecovery, %function
16768 FtlPowerLostRecovery:
16769         adrp    x0, :got:g_power_lost_recovery_flag
16770         stp     x29, x30, [sp, -32]!
16771         add     x29, sp, 0
16772         ldr     x0, [x0, #:got_lo12:g_power_lost_recovery_flag]
16773         str     x19, [sp,16]
16774         adrp    x19, :got:g_active_superblock
16775         strh    wzr, [x0]
16776         adrp    x0, :got:g_recovery_page_num
16777         ldr     x0, [x0, #:got_lo12:g_recovery_page_num]
16778         str     wzr, [x0]
16779         ldr     x19, [x19, #:got_lo12:g_active_superblock]
16780         mov     x0, x19
16781         bl      FtlRecoverySuperblock
16782         mov     x0, x19
16783         adrp    x19, :got:g_buffer_superblock
16784         bl      FtlSlcSuperblockCheck
16785         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
16786         mov     x0, x19
16787         bl      FtlRecoverySuperblock
16788         mov     x0, x19
16789         bl      FtlSlcSuperblockCheck
16790         bl      FtlGcPageRecovery
16791         mov     w0, -1
16792         bl      decrement_vpc_count
16793         ldr     x19, [sp,16]
16794         mov     w0, 0
16795         ldp     x29, x30, [sp], 32
16796         ret
16797         .size   FtlPowerLostRecovery, .-FtlPowerLostRecovery
16798         .align  2
16799         .global Ftl_gc_temp_data_write_back
16800         .type   Ftl_gc_temp_data_write_back, %function
16801 Ftl_gc_temp_data_write_back:
16802         stp     x29, x30, [sp, -64]!
16803         mov     w2, 0
16804         add     x29, sp, 0
16805         stp     x19, x20, [sp,16]
16806         stp     x21, x22, [sp,32]
16807         adrp    x19, :got:req_gc_dst
16808         adrp    x21, :got:g_gc_num_req
16809         str     x23, [sp,48]
16810         mov     w3, w2
16811         mov     w20, 0
16812         mov     w23, 56
16813         ldr     x0, [x19, #:got_lo12:req_gc_dst]
16814         ldr     x1, [x21, #:got_lo12:g_gc_num_req]
16815         ldr     x0, [x0]
16816         ldr     w1, [x1]
16817         bl      FlashProgPages
16818 .L2303:
16819         ldr     x22, [x21, #:got_lo12:g_gc_num_req]
16820         ldr     w1, [x22]
16821         cmp     w20, w1
16822         bcs     .L2309
16823         ldr     x3, [x19, #:got_lo12:req_gc_dst]
16824         umull   x0, w20, w23
16825         ldr     x2, [x3]
16826         add     x1, x2, x0
16827         ldr     w4, [x2,x0]
16828         cmn     w4, #1
16829         bne     .L2304
16830         adrp    x1, :got:g_gc_temp_superblock
16831         adrp    x2, :got:p_valid_page_count_table
16832         ldr     x1, [x1, #:got_lo12:g_gc_temp_superblock]
16833         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
16834         ldrh    w5, [x1]
16835         ldr     x2, [x2]
16836         strh    wzr, [x2,x5,lsl 1]
16837         strh    w4, [x1]
16838         adrp    x1, :got:g_sys_ext_data
16839         ldr     x1, [x1, #:got_lo12:g_sys_ext_data]
16840         ldr     w2, [x1,96]
16841         add     w2, w2, 1
16842         str     w2, [x1,96]
16843         ldr     x1, [x3]
16844         add     x0, x1, x0
16845         ldr     w0, [x0,4]
16846         lsr     w0, w0, 10
16847         bl      FtlBbmMapBadBlock
16848         bl      FtlBbmTblFlush
16849         bl      FtlGcPageVarInit
16850         b       .L2308
16851 .L2304:
16852         ldr     x2, [x1,16]
16853         add     w20, w20, 1
16854         ldr     w1, [x1,4]
16855         uxth    w20, w20
16856         ldr     w0, [x2,12]
16857         ldr     w2, [x2,8]
16858         bl      FtlGcUpdatePage
16859         b       .L2303
16860 .L2309:
16861         ldr     x19, [x19, #:got_lo12:req_gc_dst]
16862         ldr     x0, [x19]
16863         bl      FtlGcBufFree
16864         str     wzr, [x22]
16865         adrp    x0, :got:g_gc_temp_superblock
16866         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
16867         ldrh    w1, [x0,4]
16868         mov     w0, 0
16869         cbnz    w1, .L2305
16870         mov     w0, 1
16871         bl      FtlGcFreeTempBlock
16872 .L2308:
16873         mov     w0, 1
16874 .L2305:
16875         ldp     x19, x20, [sp,16]
16876         ldp     x21, x22, [sp,32]
16877         ldr     x23, [sp,48]
16878         ldp     x29, x30, [sp], 64
16879         ret
16880         .size   Ftl_gc_temp_data_write_back, .-Ftl_gc_temp_data_write_back
16881         .align  2
16882         .global FtlSysBlkInit
16883         .type   FtlSysBlkInit, %function
16884 FtlSysBlkInit:
16885         adrp    x0, :got:c_ftl_nand_max_sys_blks
16886         stp     x29, x30, [sp, -48]!
16887         add     x29, sp, 0
16888         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_sys_blks]
16889         stp     x19, x20, [sp,16]
16890         stp     x21, x22, [sp,32]
16891         ldrh    w0, [x0]
16892         bl      FtlFreeSysBlkQueueInit
16893         bl      FtlScanSysBlk
16894         adrp    x0, :got:gSysInfo
16895         ldr     x0, [x0, #:got_lo12:gSysInfo]
16896         ldrh    w1, [x0]
16897         mov     w0, 65535
16898         cmp     w1, w0
16899         bne     .L2311
16900 .L2313:
16901         mov     w22, -1
16902         b       .L2312
16903 .L2311:
16904         bl      FtlLoadSysInfo
16905         mov     w22, w0
16906         cbnz    w0, .L2313
16907         bl      FtlLoadMapInfo
16908         bl      FtlLoadVonderInfo
16909         bl      Ftl_load_ext_data
16910         bl      FtlLoadEctTbl
16911         bl      FtlFreeSysBLkSort
16912         bl      SupperBlkListInit
16913         bl      FtlPowerLostRecovery
16914         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
16915         mov     x1, 0
16916         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
16917         ldrh    w2, [x0]
16918         adrp    x0, :got:p_l2p_ram_map
16919         ldr     x0, [x0, #:got_lo12:p_l2p_ram_map]
16920         ldr     x0, [x0]
16921 .L2314:
16922         cmp     w1, w2
16923         mov     w3, w1
16924         bge     .L2318
16925         add     x4, x0, x1, lsl 4
16926         add     x1, x1, 1
16927         ldr     w4, [x4,4]
16928         tbz     w4, #31, .L2314
16929 .L2318:
16930         adrp    x19, :got:g_sys_save_data
16931         cmp     w3, w2
16932         adrp    x20, :got:g_active_superblock
16933         ldr     x1, [x19, #:got_lo12:g_sys_save_data]
16934         ldrh    w0, [x1,28]
16935         add     w0, w0, 1
16936         strh    w0, [x1,28]
16937         blt     .L2315
16938         adrp    x0, :got:g_power_lost_recovery_flag
16939         ldr     x0, [x0, #:got_lo12:g_power_lost_recovery_flag]
16940         ldrh    w0, [x0]
16941         cbz     w0, .L2319
16942 .L2315:
16943         adrp    x3, :got:p_valid_page_count_table
16944         ldr     x1, [x20, #:got_lo12:g_active_superblock]
16945         ldr     x3, [x3, #:got_lo12:p_valid_page_count_table]
16946         ldrh    w0, [x1]
16947         ldrh    w5, [x1,4]
16948         ldr     x4, [x3]
16949         lsl     x0, x0, 1
16950         ldrh    w2, [x4,x0]
16951         sub     w2, w2, w5
16952         strh    w2, [x4,x0]
16953         adrp    x0, :got:c_ftl_nand_page_pre_blk
16954         ldr     x4, [x3]
16955         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
16956         strh    wzr, [x1,4]
16957         strb    wzr, [x1,6]
16958         ldrh    w2, [x0]
16959         strh    w2, [x1,2]
16960         adrp    x1, :got:g_buffer_superblock
16961         ldr     x1, [x1, #:got_lo12:g_buffer_superblock]
16962         ldrh    w2, [x1]
16963         ldrh    w5, [x1,4]
16964         lsl     x2, x2, 1
16965         ldrh    w3, [x4,x2]
16966         sub     w3, w3, w5
16967         strh    w3, [x4,x2]
16968         strb    wzr, [x1,6]
16969         ldrh    w0, [x0]
16970         strh    w0, [x1,2]
16971         adrp    x0, :got:gL2pMapInfo
16972         strh    wzr, [x1,4]
16973         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
16974         bl      FtlMapBlkWriteDumpData
16975         adrp    x0, :got:gVendorBlkInfo
16976         ldr     x0, [x0, #:got_lo12:gVendorBlkInfo]
16977         bl      FtlMapBlkWriteDumpData
16978         ldr     x1, [x19, #:got_lo12:g_sys_save_data]
16979         ldrh    w0, [x1,30]
16980         add     w0, w0, 1
16981         strh    w0, [x1,30]
16982         bl      l2p_flush
16983         bl      FtlVpcTblFlush
16984 .L2319:
16985         mov     w0, 1
16986         bl      FtlUpdateVaildLpn
16987         ldr     x20, [x20, #:got_lo12:g_active_superblock]
16988         mov     w1, 65535
16989         ldrh    w0, [x20]
16990         cmp     w0, w1
16991         beq     .L2320
16992         ldrh    w1, [x20,4]
16993         cbnz    w1, .L2320
16994         adrp    x21, :got:g_buffer_superblock
16995         ldr     x21, [x21, #:got_lo12:g_buffer_superblock]
16996         ldrh    w1, [x21,4]
16997         cbnz    w1, .L2320
16998         bl      FtlGcRefreshBlock
16999         ldrh    w0, [x21]
17000         bl      FtlGcRefreshBlock
17001         mov     x0, x20
17002         bl      allocate_new_data_superblock
17003         mov     x0, x21
17004         bl      allocate_new_data_superblock
17005         adrp    x0, :got:gVendorBlkInfo
17006         ldr     x0, [x0, #:got_lo12:gVendorBlkInfo]
17007         bl      FtlMapBlkWriteDumpData
17008 .L2320:
17009         ldr     x19, [x19, #:got_lo12:g_sys_save_data]
17010         ldrh    w0, [x19,28]
17011         and     w0, w0, 31
17012         cbnz    w0, .L2312
17013         bl      FtlVpcCheckAndModify
17014 .L2312:
17015         mov     w0, w22
17016         ldp     x19, x20, [sp,16]
17017         ldp     x21, x22, [sp,32]
17018         ldp     x29, x30, [sp], 48
17019         ret
17020         .size   FtlSysBlkInit, .-FtlSysBlkInit
17021         .align  2
17022         .global FtlInit
17023         .type   FtlInit, %function
17024 FtlInit:
17025         stp     x29, x30, [sp, -32]!
17026         adrp    x1, :got:g_LowFormat
17027         add     x29, sp, 0
17028         stp     x19, x20, [sp,16]
17029         adrp    x19, :got:gFtlInitStatus
17030         mov     x20, x0
17031         mov     w0, -1
17032         ldr     x19, [x19, #:got_lo12:gFtlInitStatus]
17033         str     w0, [x19]
17034         adrp    x0, .LC72
17035         add     x0, x0, :lo12:.LC72
17036         ldr     x1, [x1, #:got_lo12:g_LowFormat]
17037         str     wzr, [x1]
17038         adrp    x1, .LC73
17039         add     x1, x1, :lo12:.LC73
17040         bl      printk
17041         mov     x0, x20
17042         bl      FtlConstantsInit
17043         bl      FtlMemInit
17044         bl      FtlVariablesInit
17045         adrp    x0, :got:c_ftl_nand_max_sys_blks
17046         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_sys_blks]
17047         ldrh    w0, [x0]
17048         bl      FtlFreeSysBlkQueueInit
17049         bl      FtlLoadBbt
17050         cbnz    w0, .L2328
17051         bl      FtlSysBlkInit
17052         cbnz    w0, .L2328
17053         mov     w0, 1
17054         str     w0, [x19]
17055 .L2328:
17056         mov     w0, 0
17057         ldp     x19, x20, [sp,16]
17058         ldp     x29, x30, [sp], 32
17059         ret
17060         .size   FtlInit, .-FtlInit
17061         .align  2
17062         .global rk_ftl_init
17063         .type   rk_ftl_init, %function
17064 rk_ftl_init:
17065         stp     x29, x30, [sp, -32]!
17066         mov     w0, 2048
17067         add     x29, sp, 0
17068         stp     x19, x20, [sp,16]
17069         adrp    x20, :got:gLoaderBootInfo
17070         bl      ftl_malloc
17071         adrp    x19, :got:RK29_NANDC_REG_BASE
17072         adrp    x1, :got:RK29_NANDC1_REG_BASE
17073         ldr     x20, [x20, #:got_lo12:gLoaderBootInfo]
17074         str     x0, [x20]
17075         ldr     x19, [x19, #:got_lo12:RK29_NANDC_REG_BASE]
17076         mov     x0, x19
17077         str     xzr, [x19]
17078         ldr     x1, [x1, #:got_lo12:RK29_NANDC1_REG_BASE]
17079         str     xzr, [x1]
17080         bl      rknand_get_reg_addr
17081         ldr     x1, [x19]
17082         mov     w0, -1
17083         cbz     x1, .L2331
17084         bl      rk_nandc_irq_init
17085         mov     w1, 0
17086         ldr     x0, [x20]
17087         mov     w2, w1
17088         mov     w3, 2048
17089         bl      FlashSramLoadStore
17090         bl      rknand_flash_cs_init
17091         ldr     x0, [x19]
17092         bl      FlashInit
17093         mov     w19, w0
17094         cbnz    w0, .L2332
17095         adrp    x0, :got:gNandPhyInfo
17096         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
17097         bl      FtlInit
17098 .L2332:
17099         adrp    x0, .LC113
17100         mov     w1, w19
17101         add     x0, x0, :lo12:.LC113
17102         bl      printk
17103         mov     w0, w19
17104 .L2331:
17105         ldp     x19, x20, [sp,16]
17106         ldp     x29, x30, [sp], 32
17107         ret
17108         .size   rk_ftl_init, .-rk_ftl_init
17109         .align  2
17110         .global Ftl_get_new_temp_ppa
17111         .type   Ftl_get_new_temp_ppa, %function
17112 Ftl_get_new_temp_ppa:
17113         stp     x29, x30, [sp, -32]!
17114         mov     w1, 65535
17115         add     x29, sp, 0
17116         str     x19, [sp,16]
17117         adrp    x19, :got:g_gc_temp_superblock
17118         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
17119         ldrh    w2, [x0]
17120         cmp     w2, w1
17121         beq     .L2336
17122         ldrh    w0, [x0,4]
17123         cbnz    w0, .L2337
17124 .L2336:
17125         bl      FtlCacheWriteBack
17126         mov     w0, 0
17127         bl      FtlGcFreeTempBlock
17128         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
17129         strb    wzr, [x0,8]
17130         bl      allocate_data_superblock
17131         adrp    x0, :got:g_gc_blk_num
17132         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
17133         strh    wzr, [x0]
17134         adrp    x0, :got:g_gc_page_offset
17135         ldr     x0, [x0, #:got_lo12:g_gc_page_offset]
17136         strh    wzr, [x0]
17137         bl      l2p_flush
17138         bl      FtlVpcTblFlush
17139         mov     w0, 0
17140         bl      FtlEctTblFlush
17141 .L2337:
17142         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
17143         bl      get_new_active_ppa
17144         ldr     x19, [sp,16]
17145         ldp     x29, x30, [sp], 32
17146         ret
17147         .size   Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa
17148         .align  2
17149         .global rk_ftl_garbage_collect
17150         .type   rk_ftl_garbage_collect, %function
17151 rk_ftl_garbage_collect:
17152         stp     x29, x30, [sp, -160]!
17153         add     x29, sp, 0
17154         stp     x21, x22, [sp,32]
17155         adrp    x22, :got:g_in_gc_progress
17156         stp     x19, x20, [sp,16]
17157         stp     x23, x24, [sp,48]
17158         ldr     x2, [x22, #:got_lo12:g_in_gc_progress]
17159         stp     x25, x26, [sp,64]
17160         stp     x27, x28, [sp,80]
17161         ldr     w3, [x2]
17162         mov     w2, 0
17163         cbnz    w3, .L2465
17164         mov     w24, w0
17165         adrp    x0, .LANCHOR2+128
17166         mov     w23, w1
17167         mov     w1, 65535
17168         ldrh    w0, [x0,#:lo12:.LANCHOR2+128]
17169         cmp     w0, w1
17170         bne     .L2340
17171 .L2343:
17172         adrp    x0, :got:g_gc_next_blk_1
17173         mov     w3, 65535
17174         ldr     x0, [x0, #:got_lo12:g_gc_next_blk_1]
17175         ldrh    w2, [x0]
17176         cmp     w2, w3
17177         bne     .L2341
17178         b       .L2342
17179 .L2340:
17180         adrp    x0, :got:g_gc_temp_superblock
17181         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
17182         ldrh    w0, [x0]
17183         cmp     w0, w1
17184         beq     .L2343
17185         mov     w0, 1
17186         bl      FtlGcFreeTempBlock
17187         mov     w2, 1
17188         cbz     w0, .L2343
17189         b       .L2465
17190 .L2341:
17191         adrp    x1, :got:g_gc_next_blk
17192         ldr     x1, [x1, #:got_lo12:g_gc_next_blk]
17193         ldrh    w4, [x1]
17194         cmp     w4, w3
17195         bne     .L2342
17196         strh    w2, [x1]
17197         mov     w1, -1
17198         strh    w1, [x0]
17199 .L2342:
17200         adrp    x26, :got:g_gc_skip_write_count
17201         cmp     w24, 1
17202         adrp    x19, :got:g_gc_superblock
17203         ldr     x20, [x26, #:got_lo12:g_gc_skip_write_count]
17204         ldr     w0, [x20]
17205         add     w0, w0, 1
17206         add     w0, w0, w24, lsl 7
17207         str     w0, [x20]
17208         beq     .L2344
17209 .L2346:
17210         mov     w21, 65535
17211         b       .L2345
17212 .L2344:
17213         adrp    x1, :got:g_inkDie_check_enable
17214         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
17215         ldr     w1, [x1]
17216         cbz     w1, .L2346
17217         adrp    x27, :got:g_min_erase_count
17218         ldr     x27, [x27, #:got_lo12:g_min_erase_count]
17219         ldr     w1, [x27]
17220         cmp     w1, 29
17221         bhi     .L2346
17222         adrp    x25, :got:gc_ink_free_return_value
17223         ldr     x21, [x25, #:got_lo12:gc_ink_free_return_value]
17224         ldrh    w1, [x21]
17225         add     w0, w0, w1
17226         str     w0, [x20]
17227         bl      FtlGcReFreshBadBlk
17228         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17229         ldrh    w1, [x0]
17230         mov     w0, 65535
17231         cmp     w1, w0
17232         bne     .L2346
17233         adrp    x0, :got:g_gc_next_blk
17234         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
17235         ldrh    w0, [x0]
17236         cmp     w0, w1
17237         bne     .L2346
17238         ldr     w0, [x20]
17239         cmp     w0, 1024
17240         bls     .L2346
17241         ldr     w0, [x27]
17242         str     wzr, [x20]
17243         strh    wzr, [x21]
17244         cbnz    w0, .L2347
17245         mov     w0, 6
17246         b       .L2484
17247 .L2347:
17248         cmp     w0, 5
17249         bhi     .L2348
17250         mov     w0, 18
17251 .L2484:
17252         strh    w0, [x21]
17253 .L2348:
17254         mov     w0, 32
17255         bl      List_get_gc_head_node
17256         uxth    w28, w0
17257         mov     w3, 65535
17258         cmp     w28, w3
17259         beq     .L2352
17260         adrp    x20, :got:g_gc_blk_index
17261         ldr     x20, [x20, #:got_lo12:g_gc_blk_index]
17262         ldrh    w0, [x20]
17263         cbz     w0, .L2350
17264         adrp    x27, :got:p_valid_page_count_table
17265         ubfiz   x28, x28, 1, 16
17266         adrp    x2, :got:c_ftl_nand_planes_num
17267         ldr     x27, [x27, #:got_lo12:p_valid_page_count_table]
17268         ldr     x2, [x2, #:got_lo12:c_ftl_nand_planes_num]
17269         ldr     x1, [x27]
17270         ldrh    w2, [x2]
17271         ldrh    w4, [x1,x28]
17272         adrp    x1, :got:c_ftl_nand_page_pre_slc_blk
17273         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
17274         ldrh    w1, [x1]
17275         mul     w1, w1, w2
17276         add     w1, w1, 1
17277         cmp     w4, w1
17278         bgt     .L2352
17279         adrp    x1, :got:g_in_swl_replace
17280         str     x3, [x29,136]
17281         ldr     x1, [x1, #:got_lo12:g_in_swl_replace]
17282         str     wzr, [x1]
17283         add     w1, w0, 1
17284         strh    w1, [x20]
17285         bl      List_get_gc_head_node
17286         uxth    w21, w0
17287         ldr     x3, [x29,136]
17288         cmp     w21, w3
17289         beq     .L2352
17290         ubfiz   x5, x21, 1, 16
17291         ldr     x4, [x27]
17292         adrp    x0, .LC114
17293         ldrh    w1, [x20]
17294         add     x0, x0, :lo12:.LC114
17295         mov     w2, w21
17296         ldrh    w3, [x4,x5]
17297         ldrh    w4, [x4,x28]
17298         str     x5, [x29,136]
17299         bl      printk
17300         ldrh    w0, [x20]
17301         ldr     x5, [x29,136]
17302         cmp     w0, 40
17303         bls     .L2351
17304         ldr     x0, [x27]
17305         ldrh    w0, [x0,x5]
17306         cmp     w0, 32
17307         bls     .L2351
17308         strh    wzr, [x20]
17309 .L2351:
17310         ldr     x25, [x25, #:got_lo12:gc_ink_free_return_value]
17311         mov     w0, 6
17312         strh    w0, [x25]
17313         b       .L2345
17314 .L2350:
17315         mov     w0, 1
17316         strh    w0, [x20]
17317 .L2352:
17318         bl      GetSwlReplaceBlock
17319         uxth    w21, w0
17320         mov     w0, 65535
17321         cmp     w21, w0
17322         bne     .L2345
17323         ldr     x25, [x25, #:got_lo12:gc_ink_free_return_value]
17324         strh    wzr, [x25]
17325 .L2345:
17326         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17327         ldrh    w2, [x0]
17328         mov     w0, 65535
17329         cmp     w2, w0
17330         bne     .L2353
17331         adrp    x0, :got:g_gc_temp_superblock
17332         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
17333         ldrh    w1, [x0]
17334         cmp     w1, w2
17335         bne     .L2353
17336         adrp    x0, :got:g_gc_next_blk
17337         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
17338         ldrh    w20, [x0]
17339         cmp     w20, w1
17340         bne     .L2353
17341         adrp    x25, :got:g_num_free_superblocks
17342         ldr     x26, [x26, #:got_lo12:g_gc_skip_write_count]
17343         mov     w2, 1024
17344         ldr     x27, [x25, #:got_lo12:g_num_free_superblocks]
17345         ldr     w1, [x26]
17346         ldrh    w0, [x27]
17347         cmp     w0, 24
17348         mov     w0, 5120
17349         csel    w0, w0, w2, cc
17350         cmp     w1, w0
17351         bls     .L2353
17352         adrp    x0, :got:gc_ink_free_return_value
17353         str     wzr, [x26]
17354         ldr     x0, [x0, #:got_lo12:gc_ink_free_return_value]
17355         strh    wzr, [x0]
17356         bl      GetSwlReplaceBlock
17357         uxth    w21, w0
17358         cmp     w21, w20
17359         bne     .L2355
17360         adrp    x20, :got:g_gc_merge_free_blk_threshold
17361         ldrh    w1, [x27]
17362         ldr     x26, [x20, #:got_lo12:g_gc_merge_free_blk_threshold]
17363         ldrh    w0, [x26]
17364         cmp     w1, w0
17365         bcs     .L2356
17366         mov     w0, 64
17367         bl      List_get_gc_head_node
17368         uxth    w0, w0
17369         cmp     w0, w21
17370         beq     .L2365
17371         adrp    x1, :got:g_SlcPartLbaEndSector
17372         adrp    x4, :got:c_ftl_nand_type
17373         uxtw    x2, w0
17374         ldr     x1, [x1, #:got_lo12:g_SlcPartLbaEndSector]
17375         ldr     w3, [x1]
17376         adrp    x1, :got:p_valid_page_count_table
17377         cbnz    w3, .L2358
17378         ldr     x0, [x4, #:got_lo12:c_ftl_nand_type]
17379         ldrh    w0, [x0]
17380         cmp     w0, 3
17381         beq     .L2358
17382         adrp    x0, :got:g_all_blk_used_slc_mode
17383         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
17384         ldr     w0, [x0]
17385         cbnz    w0, .L2358
17386         adrp    x0, :got:g_inkDie_check_enable
17387         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
17388         ldr     w0, [x0]
17389         cbz     w0, .L2359
17390 .L2358:
17391         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17392         ldr     x0, [x1]
17393         ldrh    w5, [x0,x2,lsl 1]
17394         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
17395         ldr     x2, [x4, #:got_lo12:c_ftl_nand_type]
17396         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
17397         ldrh    w2, [x2]
17398         ldrh    w1, [x0]
17399         adrp    x0, :got:c_ftl_nand_planes_num
17400         cmp     w2, 3
17401         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
17402         ldrh    w0, [x0]
17403         mul     w3, w1, w0
17404         mov     w0, 0
17405         lsr     w1, w1, 1
17406         csel    w0, w1, w0, eq
17407         add     w0, w3, w0
17408         cmp     w5, w0
17409         bgt     .L2361
17410         mov     w0, 0
17411         bl      List_get_gc_head_node
17412         uxth    w21, w0
17413         adrp    x0, :got:g_MaxLpn
17414         adrp    x1, :got:g_VaildLpn
17415         ldr     x20, [x20, #:got_lo12:g_gc_merge_free_blk_threshold]
17416         ldr     x0, [x0, #:got_lo12:g_MaxLpn]
17417         ldr     x1, [x1, #:got_lo12:g_VaildLpn]
17418         ldr     w0, [x0]
17419         ldr     w1, [x1]
17420         add     w0, w0, w0, lsl 1
17421         cmp     w1, w0, lsr 2
17422         bls     .L2362
17423         mov     w0, 128
17424         b       .L2485
17425 .L2362:
17426         mov     w0, 160
17427 .L2485:
17428         strh    w0, [x20]
17429         b       .L2363
17430 .L2361:
17431         ldr     x20, [x20, #:got_lo12:g_gc_merge_free_blk_threshold]
17432         mov     w0, 128
17433         strh    w0, [x20]
17434         b       .L2365
17435 .L2359:
17436         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17437         ldr     x1, [x1]
17438         ldrh    w1, [x1,x2,lsl 1]
17439         cmp     w1, 7
17440         bhi     .L2364
17441         bl      List_get_gc_head_node
17442         uxth    w21, w0
17443         mov     w0, 128
17444         strh    w0, [x26]
17445         b       .L2363
17446 .L2364:
17447         mov     w0, 64
17448         b       .L2486
17449 .L2356:
17450         mov     w0, 80
17451 .L2486:
17452         strh    w0, [x26]
17453         b       .L2365
17454 .L2363:
17455         mov     w0, 65535
17456         cmp     w21, w0
17457         beq     .L2365
17458 .L2355:
17459         adrp    x0, :got:p_valid_page_count_table
17460         adrp    x5, :got:g_gc_free_blk_threshold
17461         ubfiz   x4, x21, 1, 16
17462         ldr     x25, [x25, #:got_lo12:g_num_free_superblocks]
17463         mov     w1, w21
17464         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
17465         ldr     x5, [x5, #:got_lo12:g_gc_free_blk_threshold]
17466         ldrh    w2, [x25]
17467         ldr     x3, [x0]
17468         adrp    x0, :got:p_erase_count_table
17469         ldrh    w5, [x5]
17470         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
17471         ldrh    w3, [x3,x4]
17472         ldr     x6, [x0]
17473         adrp    x0, .LC115
17474         add     x0, x0, :lo12:.LC115
17475         ldrh    w4, [x6,x4]
17476         bl      printk
17477 .L2365:
17478         bl      FtlGcReFreshBadBlk
17479 .L2353:
17480         mov     w0, 65535
17481         cmp     w21, w0
17482         cset    w1, eq
17483         cbz     w1, .L2366
17484         cbnz    w24, .L2366
17485         adrp    x0, :got:g_num_free_superblocks
17486         mov     w20, 1
17487         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
17488         ldrh    w1, [x0]
17489         cmp     w1, 24
17490         bhi     .L2367
17491         adrp    x0, :got:c_ftl_nand_page_pre_blk
17492         cmp     w1, 16
17493         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17494         ldrh    w20, [x0]
17495         bls     .L2368
17496         lsr     w20, w20, 5
17497         b       .L2367
17498 .L2368:
17499         cmp     w1, 12
17500         bls     .L2369
17501         lsr     w20, w20, 4
17502         b       .L2367
17503 .L2369:
17504         cmp     w1, 8
17505         bls     .L2367
17506         lsr     w20, w20, 2
17507 .L2367:
17508         adrp    x0, :got:g_gc_free_blk_threshold
17509         ldr     x4, [x0, #:got_lo12:g_gc_free_blk_threshold]
17510         ldrh    w2, [x4]
17511         cmp     w2, w1
17512         bcs     .L2371
17513         adrp    x1, :got:g_gc_temp_superblock
17514         ldr     x1, [x1, #:got_lo12:g_gc_temp_superblock]
17515         ldrh    w2, [x1]
17516         mov     w1, 65535
17517         cmp     w2, w1
17518         bne     .L2372
17519         adrp    x1, :got:g_gc_next_blk
17520         ldr     x1, [x1, #:got_lo12:g_gc_next_blk]
17521         ldrh    w1, [x1]
17522         cmp     w1, w2
17523         bne     .L2372
17524         adrp    x1, :got:gc_ink_free_return_value
17525         ldr     x1, [x1, #:got_lo12:gc_ink_free_return_value]
17526         ldrh    w2, [x1]
17527         cbnz    w2, .L2373
17528         adrp    x1, :got:g_MaxLpn
17529         adrp    x3, :got:g_VaildLpn
17530         ldr     x1, [x1, #:got_lo12:g_MaxLpn]
17531         ldr     x3, [x3, #:got_lo12:g_VaildLpn]
17532         ldr     w1, [x1]
17533         ldr     w3, [x3]
17534         add     w1, w1, w1, lsl 1
17535         cmp     w3, w1, lsr 2
17536         bcs     .L2374
17537 .L2373:
17538         adrp    x1, :got:c_ftl_nand_data_op_blks_per_plane
17539         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
17540         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17541         ldrh    w1, [x1]
17542         add     w1, w1, w1, lsl 1
17543         asr     w1, w1, 2
17544         strh    w1, [x0]
17545         b       .L2375
17546 .L2374:
17547         mov     w0, 18
17548         strh    w0, [x4]
17549 .L2375:
17550         adrp    x0, :got:g_in_swl_replace
17551         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
17552         str     wzr, [x0]
17553         b       .L2465
17554 .L2372:
17555         adrp    x1, :got:c_ftl_nand_data_op_blks_per_plane
17556         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
17557         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17558         ldrh    w1, [x1]
17559         add     w1, w1, w1, lsl 1
17560         asr     w1, w1, 2
17561         strh    w1, [x0]
17562 .L2371:
17563         cmp     w23, 2
17564         bhi     .L2426
17565         adrp    x0, :got:g_inkDie_check_enable
17566         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
17567         ldr     w0, [x0]
17568         cbz     w0, .L2426
17569         add     w20, w20, 1
17570         uxth    w20, w20
17571         b       .L2426
17572 .L2366:
17573         adrp    x0, :got:g_gc_temp_superblock
17574         mov     w2, 65535
17575         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
17576         ldrh    w0, [x0]
17577         cmp     w0, w2
17578         bne     .L2378
17579         cbz     w1, .L2378
17580         adrp    x1, :got:g_gc_next_blk
17581         ldr     x1, [x1, #:got_lo12:g_gc_next_blk]
17582         ldrh    w1, [x1]
17583         cmp     w1, w0
17584         bne     .L2378
17585         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17586         ldrh    w1, [x1]
17587         cmp     w1, w0
17588         beq     .L2379
17589 .L2384:
17590         mov     w21, 65535
17591         b       .L2378
17592 .L2379:
17593         adrp    x0, :got:g_in_swl_replace
17594         adrp    x20, :got:g_num_free_superblocks
17595         adrp    x21, :got:gc_ink_free_return_value
17596         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
17597         str     wzr, [x0]
17598         adrp    x0, :got:g_gc_free_blk_threshold
17599         ldr     x24, [x20, #:got_lo12:g_num_free_superblocks]
17600         ldr     x2, [x0, #:got_lo12:g_gc_free_blk_threshold]
17601         ldrh    w3, [x24]
17602         ldrh    w1, [x2]
17603         cmp     w3, w1
17604         bls     .L2380
17605         ldr     x1, [x21, #:got_lo12:gc_ink_free_return_value]
17606         ldrh    w1, [x1]
17607         cbnz    w1, .L2381
17608         adrp    x1, :got:g_MaxLpn
17609         adrp    x3, :got:g_VaildLpn
17610         ldr     x1, [x1, #:got_lo12:g_MaxLpn]
17611         ldr     x3, [x3, #:got_lo12:g_VaildLpn]
17612         ldr     w1, [x1]
17613         ldr     w3, [x3]
17614         add     w1, w1, w1, lsl 1
17615         cmp     w3, w1, lsr 2
17616         bcs     .L2382
17617 .L2381:
17618         adrp    x1, :got:c_ftl_nand_data_op_blks_per_plane
17619         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
17620         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17621         ldrh    w1, [x1]
17622         add     w1, w1, w1, lsl 1
17623         asr     w1, w1, 2
17624         strh    w1, [x0]
17625         b       .L2383
17626 .L2382:
17627         mov     w0, 18
17628         strh    w0, [x2]
17629 .L2383:
17630         bl      FtlReadRefresh
17631         ldr     x21, [x21, #:got_lo12:gc_ink_free_return_value]
17632         b       .L2487
17633 .L2380:
17634         ldr     x21, [x21, #:got_lo12:gc_ink_free_return_value]
17635         ldrh    w0, [x21]
17636         cbnz    w0, .L2384
17637         adrp    x23, :got:c_ftl_nand_data_op_blks_per_plane
17638         ldr     x23, [x23, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17639         ldrh    w1, [x23]
17640         add     w1, w1, w1, lsl 1
17641         asr     w1, w1, 2
17642         strh    w1, [x2]
17643         bl      List_get_gc_head_node
17644         ubfiz   x0, x0, 1, 16
17645         adrp    x1, :got:p_valid_page_count_table
17646         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17647         ldr     x1, [x1]
17648         ldrh    w2, [x1,x0]
17649         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
17650         adrp    x1, :got:c_ftl_nand_planes_num
17651         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
17652         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
17653         ldrh    w0, [x0]
17654         ldrh    w1, [x1]
17655         mul     w0, w0, w1
17656         mov     w1, 2
17657         sdiv    w0, w0, w1
17658         cmp     w2, w0
17659         ble     .L2385
17660         ldrh    w0, [x23]
17661         ldrh    w1, [x24]
17662         sub     w0, w0, #1
17663         cmp     w1, w0
17664         blt     .L2385
17665         bl      FtlReadRefresh
17666 .L2487:
17667         ldrh    w2, [x21]
17668         b       .L2465
17669 .L2385:
17670         cbnz    w2, .L2384
17671         mov     w0, -1
17672         bl      decrement_vpc_count
17673         ldr     x20, [x20, #:got_lo12:g_num_free_superblocks]
17674         ldrh    w2, [x20]
17675         add     w2, w2, 1
17676         b       .L2465
17677 .L2378:
17678         adrp    x0, :got:g_inkDie_check_enable
17679         mov     w20, 2
17680         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
17681         ldr     w0, [x0]
17682         cmp     w0, wzr
17683         csinc   w20, w20, wzr, ne
17684         b       .L2377
17685 .L2426:
17686         mov     w21, 65535
17687 .L2377:
17688         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17689         mov     w2, 65535
17690         ldrh    w0, [x1]
17691         cmp     w0, w2
17692         bne     .L2387
17693         cmp     w21, w0
17694         beq     .L2388
17695         strh    w21, [x1]
17696         b       .L2389
17697 .L2388:
17698         adrp    x0, :got:g_gc_next_blk
17699         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
17700         ldrh    w2, [x0]
17701         cmp     w2, w21
17702         beq     .L2389
17703         strh    w2, [x1]
17704         mov     w1, -1
17705         strh    w1, [x0]
17706 .L2389:
17707         ldr     x23, [x19, #:got_lo12:g_gc_superblock]
17708         ldrh    w0, [x23]
17709         bl      IsBlkInGcList
17710         cbz     w0, .L2390
17711         mov     w0, -1
17712         strh    w0, [x23]
17713 .L2390:
17714         ldr     x23, [x19, #:got_lo12:g_gc_superblock]
17715         mov     w0, 65535
17716         ldrh    w1, [x23]
17717         cmp     w1, w0
17718         beq     .L2387
17719         mov     x0, x23
17720         bl      make_superblock
17721         strh    wzr, [x23,2]
17722         adrp    x0, :got:g_gc_cur_blk_valid_pages
17723         strb    wzr, [x23,6]
17724         ldrh    w1, [x23]
17725         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17726         strh    wzr, [x0]
17727         adrp    x0, :got:p_valid_page_count_table
17728         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
17729         ldr     x0, [x0]
17730         ldrh    w1, [x0,x1,lsl 1]
17731         adrp    x0, :got:g_gc_cur_blk_max_valid_pages
17732         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_max_valid_pages]
17733         strh    w1, [x0]
17734 .L2387:
17735         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17736         ldrh    w1, [x0]
17737         adrp    x0, :got:g_active_superblock
17738         ldr     x0, [x0, #:got_lo12:g_active_superblock]
17739         ldrh    w0, [x0]
17740         cmp     w0, w1
17741         beq     .L2392
17742         adrp    x0, :got:g_buffer_superblock
17743         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
17744         ldrh    w0, [x0]
17745         cmp     w0, w1
17746         beq     .L2392
17747 .L2393:
17748         add     x0, x29, 156
17749         mov     w24, 65535
17750         str     x0, [x29,136]
17751         b       .L2394
17752 .L2392:
17753         ldr     x19, [x19, #:got_lo12:g_gc_superblock]
17754         mov     w0, -1
17755         strh    w0, [x19]
17756         b       .L2488
17757 .L2412:
17758         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17759         ldrh    w0, [x1,2]
17760         add     w20, w20, w0
17761         adrp    x0, :got:c_ftl_nand_page_pre_blk
17762         uxth    w20, w20
17763         strh    w20, [x1,2]
17764         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17765         ldrh    w0, [x0]
17766         cmp     w0, w20
17767         bls     .L2414
17768         adrp    x1, :got:g_gc_cur_blk_valid_pages
17769         adrp    x0, :got:g_gc_cur_blk_max_valid_pages
17770         ldr     x1, [x1, #:got_lo12:g_gc_cur_blk_valid_pages]
17771         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_max_valid_pages]
17772         ldrh    w1, [x1]
17773         ldrh    w0, [x0]
17774         cmp     w1, w0
17775         beq     .L2414
17776 .L2415:
17777         adrp    x0, :got:g_num_free_superblocks
17778         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
17779         ldrh    w0, [x0]
17780         cmp     w0, 2
17781         bhi     .L2418
17782         adrp    x0, :got:c_ftl_nand_page_pre_blk
17783         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17784         ldrh    w20, [x0]
17785 .L2394:
17786         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17787         ldrh    w0, [x0]
17788         cmp     w0, w24
17789         bne     .L2395
17790         adrp    x0, :got:g_in_swl_replace
17791         adrp    x23, :got:c_ftl_nand_planes_num
17792         mov     w25, 2
17793         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
17794         str     wzr, [x0]
17795 .L2396:
17796         adrp    x0, :got:g_gc_blk_index
17797         adrp    x26, :got:g_gc_blk_index
17798         ldr     x27, [x0, #:got_lo12:g_gc_blk_index]
17799         ldrh    w0, [x27]
17800         bl      List_get_gc_head_node
17801         ldr     x28, [x19, #:got_lo12:g_gc_superblock]
17802         uxth    w0, w0
17803         cmp     w0, w24
17804         strh    w0, [x28]
17805         bne     .L2397
17806         strh    wzr, [x27]
17807         mov     w2, 8
17808         b       .L2465
17809 .L2397:
17810         bl      IsBlkInGcList
17811         cbz     w0, .L2398
17812         ldrh    w0, [x27]
17813         add     w0, w0, 1
17814         strh    w0, [x27]
17815         b       .L2396
17816 .L2398:
17817         ldrh    w0, [x27]
17818         adrp    x1, :got:p_valid_page_count_table
17819         ldrh    w2, [x28]
17820         add     w0, w0, 1
17821         lsl     x2, x2, 1
17822         uxth    w0, w0
17823         strh    w0, [x27]
17824         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17825         ldr     x5, [x23, #:got_lo12:c_ftl_nand_planes_num]
17826         ldr     x3, [x1]
17827         adrp    x1, :got:c_ftl_nand_page_pre_blk
17828         ldrh    w5, [x5]
17829         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
17830         ldrh    w4, [x3,x2]
17831         ldrh    w1, [x1]
17832         mul     w1, w1, w5
17833         sdiv    w5, w1, w25
17834         cmp     w4, w5
17835         bgt     .L2400
17836         cmp     w4, 8
17837         bls     .L2401
17838         cmp     w0, 48
17839         bls     .L2401
17840         adrp    x0, :got:g_gc_blk_num
17841         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
17842         ldrh    w0, [x0]
17843         cmp     w0, 35
17844         bhi     .L2401
17845 .L2400:
17846         ldr     x0, [x26, #:got_lo12:g_gc_blk_index]
17847         strh    wzr, [x0]
17848 .L2401:
17849         cmp     w21, w24
17850         ldrh    w0, [x3,x2]
17851         bne     .L2402
17852         cmp     w0, w1
17853         blt     .L2402
17854         ldr     x19, [x19, #:got_lo12:g_gc_superblock]
17855         mov     w0, -1
17856         strh    w0, [x19]
17857         ldr     x26, [x26, #:got_lo12:g_gc_blk_index]
17858         strh    wzr, [x26]
17859         b       .L2488
17860 .L2402:
17861         cbnz    w0, .L2403
17862         mov     w0, -1
17863         bl      decrement_vpc_count
17864         ldr     x26, [x26, #:got_lo12:g_gc_blk_index]
17865         ldrh    w0, [x26]
17866         add     w0, w0, 1
17867         strh    w0, [x26]
17868         b       .L2396
17869 .L2403:
17870         ldr     x23, [x19, #:got_lo12:g_gc_superblock]
17871         mov     x0, x23
17872         strb    wzr, [x23,8]
17873         bl      make_superblock
17874         adrp    x0, :got:g_gc_cur_blk_valid_pages
17875         ldrh    w1, [x23]
17876         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17877         strh    wzr, [x0]
17878         adrp    x0, :got:p_valid_page_count_table
17879         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
17880         ldr     x0, [x0]
17881         ldrh    w1, [x0,x1,lsl 1]
17882         adrp    x0, :got:g_gc_cur_blk_max_valid_pages
17883         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_max_valid_pages]
17884         strh    wzr, [x23,2]
17885         strb    wzr, [x23,6]
17886         strh    w1, [x0]
17887 .L2395:
17888         bl      FtlReadRefresh
17889         ldr     x0, [x22, #:got_lo12:g_in_gc_progress]
17890         mov     w1, 1
17891         str     w1, [x0]
17892         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17893         ldrh    w1, [x0,2]
17894         adrp    x0, :got:c_ftl_nand_page_pre_blk
17895         add     w2, w1, w20
17896         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17897         ldrh    w0, [x0]
17898         cmp     w2, w0
17899         ble     .L2404
17900         sub     w20, w0, w1
17901         uxth    w20, w20
17902 .L2404:
17903         mov     w25, 0
17904 .L2405:
17905         cmp     w20, w25, uxth
17906         bls     .L2412
17907         adrp    x0, :got:c_ftl_nand_planes_num
17908         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
17909         ldrh    w4, [x0]
17910         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17911         ldrh    w2, [x0,2]
17912         mov     x0, 0
17913         mov     w23, w0
17914         add     w2, w2, w25
17915 .L2413:
17916         cmp     w4, w0, uxth
17917         bls     .L2490
17918         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17919         add     x1, x1, x0, lsl 1
17920         ldrh    w1, [x1,16]
17921         cmp     w1, w24
17922         beq     .L2406
17923         adrp    x5, :got:req_gc
17924         mov     w3, 56
17925         orr     w1, w2, w1, lsl 10
17926         umull   x3, w23, w3
17927         ldr     x5, [x5, #:got_lo12:req_gc]
17928         add     w23, w23, 1
17929         uxth    w23, w23
17930         ldr     x5, [x5]
17931         add     x3, x5, x3
17932         str     w1, [x3,4]
17933 .L2406:
17934         add     x0, x0, 1
17935         b       .L2413
17936 .L2490:
17937         adrp    x0, :got:req_gc
17938         mov     w1, w23
17939         mov     w2, 0
17940         mov     x26, 0
17941         mov     x27, 56
17942         ldr     x0, [x0, #:got_lo12:req_gc]
17943         ldr     x0, [x0]
17944         bl      FlashReadPages
17945 .L2408:
17946         cmp     w23, w26, uxth
17947         bls     .L2491
17948         adrp    x0, :got:req_gc
17949         mul     x4, x26, x27
17950         ldr     x6, [x0, #:got_lo12:req_gc]
17951         ldr     x0, [x6]
17952         add     x1, x0, x4
17953         ldr     w0, [x0,x4]
17954         cmn     w0, #1
17955         ldr     x5, [x1,16]
17956         beq     .L2428
17957         ldrh    w0, [x5]
17958         mov     w1, 61589
17959         cmp     w0, w1
17960         bne     .L2428
17961         ldr     w0, [x5,8]
17962         mov     w2, 0
17963         ldr     x1, [x29,136]
17964         str     x6, [x29,112]
17965         str     x4, [x29,120]
17966         str     x5, [x29,128]
17967         bl      log2phys
17968         ldr     x6, [x29,112]
17969         ldr     x4, [x29,120]
17970         ldr     w1, [x29,156]
17971         ldr     x2, [x6]
17972         ldr     x5, [x29,128]
17973         add     x2, x2, x4
17974         ldr     w0, [x2,4]
17975         cmp     w1, w0
17976         bne     .L2428
17977         adrp    x0, :got:g_gc_cur_blk_valid_pages
17978         str     x6, [x29,96]
17979         str     x4, [x29,104]
17980         str     x5, [x29,112]
17981         ldr     x1, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17982         ldrh    w0, [x1]
17983         add     w0, w0, 1
17984         strh    w0, [x1]
17985         adrp    x0, :got:g_gc_num_req
17986         ldr     x28, [x0, #:got_lo12:g_gc_num_req]
17987         adrp    x0, :got:req_gc_dst
17988         ldr     x7, [x0, #:got_lo12:req_gc_dst]
17989         ldr     w0, [x28]
17990         str     x7, [x29,120]
17991         ldr     x1, [x7]
17992         madd    x1, x0, x27, x1
17993         ldr     w0, [x2,24]
17994         str     x1, [x29,128]
17995         str     w0, [x1,24]
17996         bl      Ftl_get_new_temp_ppa
17997         ldr     x1, [x29,128]
17998         ldr     x7, [x29,120]
17999         ldr     x6, [x29,96]
18000         str     w0, [x1,4]
18001         ldr     w0, [x28]
18002         ldr     x1, [x7]
18003         ldr     x4, [x29,104]
18004         ldr     x5, [x29,112]
18005         madd    x0, x0, x27, x1
18006         ldr     x1, [x6]
18007         add     x1, x1, x4
18008         ldr     x2, [x1,8]
18009         str     x2, [x0,8]
18010         adrp    x2, :got:g_gc_temp_superblock
18011         ldr     x1, [x1,16]
18012         str     x1, [x0,16]
18013         mov     w1, 1
18014         ldr     w0, [x29,156]
18015         str     w0, [x5,12]
18016         ldr     x2, [x2, #:got_lo12:g_gc_temp_superblock]
18017         str     x2, [x29,128]
18018         ldrh    w0, [x2]
18019         strh    w0, [x5,2]
18020         adrp    x0, :got:g_GlobalDataVersion
18021         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
18022         ldr     w0, [x0]
18023         str     w0, [x5,4]
18024         ldr     w0, [x28]
18025         add     w0, w0, 1
18026         str     w0, [x28]
18027         ldr     x0, [x6]
18028         add     x0, x0, x4
18029         bl      FtlGcBufAlloc
18030         ldr     x2, [x29,128]
18031         ldr     w1, [x28]
18032         ldrb    w0, [x2,7]
18033         cmp     w1, w0
18034         beq     .L2410
18035         ldrh    w0, [x2,4]
18036         cbnz    w0, .L2428
18037 .L2410:
18038         bl      Ftl_gc_temp_data_write_back
18039         cbnz    w0, .L2489
18040 .L2428:
18041         add     x26, x26, 1
18042         b       .L2408
18043 .L2491:
18044         add     w25, w25, 1
18045         b       .L2405
18046 .L2414:
18047         adrp    x0, :got:g_gc_num_req
18048         ldr     x0, [x0, #:got_lo12:g_gc_num_req]
18049         ldr     w0, [x0]
18050         cbz     w0, .L2416
18051         bl      Ftl_gc_temp_data_write_back
18052         cbz     w0, .L2416
18053 .L2489:
18054         ldr     x22, [x22, #:got_lo12:g_in_gc_progress]
18055         str     wzr, [x22]
18056 .L2488:
18057         adrp    x0, :got:gc_ink_free_return_value
18058         ldr     x0, [x0, #:got_lo12:gc_ink_free_return_value]
18059         ldrh    w2, [x0]
18060         b       .L2465
18061 .L2416:
18062         adrp    x0, :got:g_gc_cur_blk_valid_pages
18063         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
18064         ldrh    w3, [x0]
18065         cbnz    w3, .L2417
18066         adrp    x0, :got:p_valid_page_count_table
18067         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
18068         ldr     x2, [x0, #:got_lo12:p_valid_page_count_table]
18069         ldrh    w0, [x1]
18070         ldr     x2, [x2]
18071         lsl     x0, x0, 1
18072         ldrh    w4, [x2,x0]
18073         cbz     w4, .L2417
18074         strh    w3, [x2,x0]
18075         ldrh    w0, [x1]
18076         bl      update_vpc_list
18077         bl      FtlCacheWriteBack
18078         bl      l2p_flush
18079         bl      FtlVpcTblFlush
18080 .L2417:
18081         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
18082         mov     w1, -1
18083         strh    w1, [x0]
18084         b       .L2415
18085 .L2418:
18086         ldr     x22, [x22, #:got_lo12:g_in_gc_progress]
18087         adrp    x1, :got:gc_ink_free_return_value
18088         str     wzr, [x22]
18089         ldr     x1, [x1, #:got_lo12:gc_ink_free_return_value]
18090         ldrh    w2, [x1]
18091         cmp     w2, wzr
18092         csinc   w2, w2, w0, ne
18093 .L2465:
18094         mov     w0, w2
18095         ldp     x19, x20, [sp,16]
18096         ldp     x21, x22, [sp,32]
18097         ldp     x23, x24, [sp,48]
18098         ldp     x25, x26, [sp,64]
18099         ldp     x27, x28, [sp,80]
18100         ldp     x29, x30, [sp], 160
18101         ret
18102         .size   rk_ftl_garbage_collect, .-rk_ftl_garbage_collect
18103         .align  2
18104         .global FtlRead
18105         .type   FtlRead, %function
18106 FtlRead:
18107         stp     x29, x30, [sp, -192]!
18108         uxtb    w0, w0
18109         add     x29, sp, 0
18110         stp     x19, x20, [sp,16]
18111         stp     x25, x26, [sp,64]
18112         stp     x27, x28, [sp,80]
18113         stp     x21, x22, [sp,32]
18114         stp     x23, x24, [sp,48]
18115         cmp     w0, 16
18116         mov     w19, w1
18117         mov     w28, w2
18118         mov     x25, x3
18119         bne     .L2493
18120         add     w0, w1, 256
18121         mov     w1, w2
18122         mov     x2, x3
18123         bl      FtlVendorPartRead
18124         b       .L2494
18125 .L2493:
18126         add     w0, w1, w2
18127         str     w0, [x29,172]
18128         adrp    x0, :got:g_MaxLbaSector
18129         ldr     w2, [x29,172]
18130         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
18131         ldr     w1, [x0]
18132         mov     w0, -1
18133         cmp     w2, w1
18134         bhi     .L2494
18135         adrp    x23, :got:c_ftl_nand_sec_pre_page
18136         sub     w24, w2, #1
18137         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18138         ldrh    w0, [x0]
18139         udiv    w27, w19, w0
18140         udiv    w24, w24, w0
18141         adrp    x0, :got:g_totle_read_sector
18142         sub     w22, w24, w27
18143         ldr     x0, [x0, #:got_lo12:g_totle_read_sector]
18144         add     w22, w22, 1
18145         ldr     w1, [x0]
18146         add     w1, w28, w1
18147         str     w1, [x0]
18148         adrp    x0, :got:g_totle_read_page_count
18149         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
18150         ldr     w1, [x0]
18151         add     w1, w22, w1
18152         str     w1, [x0]
18153         mov     w0, w27
18154         mov     w1, w24
18155         bl      FtlCacheMetchLpa
18156         cbz     w0, .L2495
18157         bl      FtlCacheWriteBack
18158 .L2495:
18159         mov     w26, 0
18160         add     x0, x29, 188
18161         mov     w20, w27
18162         str     w26, [x29,168]
18163         mov     w21, w26
18164         str     w26, [x29,156]
18165         str     x0, [x29,112]
18166 .L2496:
18167         cbz     w22, .L2538
18168         ldr     x1, [x29,112]
18169         mov     w0, w20
18170         mov     w2, 0
18171         bl      log2phys
18172         ldr     w3, [x29,188]
18173         cmn     w3, #1
18174         bne     .L2535
18175         mov     w3, 0
18176 .L2497:
18177         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18178         ldrh    w0, [x0]
18179         cmp     w3, w0
18180         bcs     .L2501
18181         madd    w0, w20, w0, w3
18182         cmp     w0, w19
18183         bcc     .L2499
18184         ldr     w1, [x29,172]
18185         cmp     w0, w1
18186         bcs     .L2499
18187         sub     w0, w0, w19
18188         mov     w1, 0
18189         ubfiz   x0, x0, 9, 23
18190         mov     w2, 512
18191         add     x0, x25, x0
18192         str     x3, [x29,160]
18193         bl      ftl_memset
18194         ldr     x3, [x29,160]
18195 .L2499:
18196         add     w3, w3, 1
18197         b       .L2497
18198 .L2535:
18199         mov     w0, 56
18200         cmp     w20, w27
18201         umull   x1, w21, w0
18202         adrp    x0, :got:req_read
18203         ldr     x0, [x0, #:got_lo12:req_read]
18204         ldr     x2, [x0]
18205         add     x2, x2, x1
18206         str     w3, [x2,4]
18207         bne     .L2502
18208         adrp    x2, :got:p_io_data_buf_0
18209         ldr     x0, [x0]
18210         add     x0, x0, x1
18211         ldr     x2, [x2, #:got_lo12:p_io_data_buf_0]
18212         ldr     x2, [x2]
18213         str     x2, [x0,8]
18214         ldr     x2, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18215         ldrh    w2, [x2]
18216         udiv    w3, w19, w2
18217         msub    w3, w3, w2, w19
18218         str     w3, [x29,128]
18219         sub     w3, w2, w3
18220         cmp     w3, w28
18221         csel    w3, w3, w28, ls
18222         str     w3, [x29,168]
18223         cmp     w3, w2
18224         bne     .L2503
18225         str     x25, [x0,8]
18226         b       .L2503
18227 .L2502:
18228         ldr     x2, [x0]
18229         cmp     w20, w24
18230         add     x2, x2, x1
18231         bne     .L2504
18232         adrp    x0, :got:p_io_data_buf_1
18233         ldr     w4, [x29,172]
18234         ldr     x0, [x0, #:got_lo12:p_io_data_buf_1]
18235         ldr     x0, [x0]
18236         str     x0, [x2,8]
18237         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18238         ldrh    w3, [x0]
18239         mul     w0, w20, w3
18240         sub     w26, w4, w0
18241         cmp     w26, w3
18242         bne     .L2503
18243         b       .L2536
18244 .L2504:
18245         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18246         ldrh    w0, [x0]
18247         mul     w0, w20, w0
18248 .L2536:
18249         sub     w0, w0, w19
18250         ubfiz   x0, x0, 9, 23
18251         add     x0, x25, x0
18252         str     x0, [x2,8]
18253 .L2503:
18254         adrp    x0, :got:req_read
18255         adrp    x2, :got:p_io_spare_buf
18256         ldr     x0, [x0, #:got_lo12:req_read]
18257         ldr     x2, [x2, #:got_lo12:p_io_spare_buf]
18258         ldr     x0, [x0]
18259         ldr     x2, [x2]
18260         add     x1, x0, x1
18261         adrp    x0, :got:c_ftl_nand_byte_pre_oob
18262         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
18263         str     w20, [x1,24]
18264         ldrh    w0, [x0]
18265         mul     w0, w21, w0
18266         add     w21, w21, 1
18267         and     x0, x0, 4294967292
18268         add     x0, x2, x0
18269         str     x0, [x1,16]
18270 .L2501:
18271         subs    w22, w22, #1
18272         add     w20, w20, 1
18273         beq     .L2505
18274         adrp    x0, :got:c_ftl_nand_planes_num
18275         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
18276         ldrh    w0, [x0]
18277         cmp     w21, w0, lsl 3
18278         bne     .L2496
18279 .L2505:
18280         cbz     w21, .L2496
18281         adrp    x0, :got:req_read
18282         mov     w1, w21
18283         mov     w2, 0
18284         ldr     x0, [x0, #:got_lo12:req_read]
18285         ldr     x0, [x0]
18286         bl      FlashReadPages
18287         str     xzr, [x29,160]
18288         ldr     x0, [x29,128]
18289         ubfiz   x0, x0, 9, 23
18290         str     x0, [x29,144]
18291         ldr     w0, [x29,168]
18292         lsl     w0, w0, 9
18293         str     w0, [x29,152]
18294         lsl     w0, w26, 9
18295         str     w0, [x29,124]
18296 .L2507:
18297         ldr     w0, [x29,160]
18298         cmp     w21, w0
18299         bls     .L2539
18300         ldr     x0, [x29,160]
18301         mov     x1, 56
18302         mul     x3, x0, x1
18303         adrp    x0, :got:req_read
18304         ldr     x0, [x0, #:got_lo12:req_read]
18305         ldr     x0, [x0]
18306         add     x0, x0, x3
18307         ldr     w1, [x0,24]
18308         cmp     w1, w27
18309         bne     .L2508
18310         ldr     x1, [x0,8]
18311         adrp    x0, :got:p_io_data_buf_0
18312         ldr     x0, [x0, #:got_lo12:p_io_data_buf_0]
18313         ldr     x0, [x0]
18314         cmp     x1, x0
18315         bne     .L2509
18316         ldr     x2, [x29,144]
18317         mov     x0, x25
18318         str     x3, [x29,104]
18319         add     x1, x1, x2
18320         ldr     w2, [x29,152]
18321         b       .L2537
18322 .L2508:
18323         cmp     w1, w24
18324         bne     .L2509
18325         ldr     x1, [x0,8]
18326         adrp    x0, :got:p_io_data_buf_1
18327         ldr     x0, [x0, #:got_lo12:p_io_data_buf_1]
18328         ldr     x0, [x0]
18329         cmp     x1, x0
18330         bne     .L2509
18331         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18332         ldr     w2, [x29,124]
18333         str     x3, [x29,104]
18334         ldrh    w0, [x0]
18335         mul     w0, w24, w0
18336         sub     w0, w0, w19
18337         ubfiz   x0, x0, 9, 23
18338         add     x0, x25, x0
18339 .L2537:
18340         bl      ftl_memcpy
18341         ldr     x3, [x29,104]
18342 .L2509:
18343         adrp    x0, :got:req_read
18344         ldr     x0, [x0, #:got_lo12:req_read]
18345         ldr     x0, [x0]
18346         add     x5, x0, x3
18347         ldr     w2, [x0,x3]
18348         cmn     w2, #1
18349         bne     .L2510
18350         adrp    x1, :got:g_sys_ext_data
18351         str     w2, [x29,156]
18352         ldr     x4, [x1, #:got_lo12:g_sys_ext_data]
18353         ldr     w1, [x4,72]
18354         add     w1, w1, 1
18355         str     w1, [x4,72]
18356 .L2510:
18357         ldr     w0, [x0,x3]
18358         cmp     w0, 256
18359         bne     .L2511
18360         ldr     w0, [x5,4]
18361         lsr     w0, w0, 10
18362         bl      P2V_block_in_plane
18363         bl      FtlGcRefreshBlock
18364 .L2511:
18365         ldr     x0, [x29,160]
18366         add     x0, x0, 1
18367         str     x0, [x29,160]
18368         b       .L2507
18369 .L2539:
18370         mov     w21, 0
18371         b       .L2496
18372 .L2538:
18373         adrp    x0, :got:g_gc_bad_block_temp_num
18374         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_num]
18375         ldrh    w0, [x0]
18376         cbz     w0, .L2514
18377         mov     w0, w22
18378         mov     w1, 1
18379         bl      rk_ftl_garbage_collect
18380 .L2514:
18381         ldr     w0, [x29,156]
18382 .L2494:
18383         ldp     x19, x20, [sp,16]
18384         ldp     x21, x22, [sp,32]
18385         ldp     x23, x24, [sp,48]
18386         ldp     x25, x26, [sp,64]
18387         ldp     x27, x28, [sp,80]
18388         ldp     x29, x30, [sp], 192
18389         ret
18390         .size   FtlRead, .-FtlRead
18391         .align  2
18392         .global StorageSysDataLoad
18393         .type   StorageSysDataLoad, %function
18394 StorageSysDataLoad:
18395         stp     x29, x30, [sp, -48]!
18396         mov     x2, 512
18397         add     x29, sp, 0
18398         str     x19, [sp,16]
18399         mov     w19, w0
18400         mov     x0, x1
18401         str     x1, [x29,40]
18402         mov     w1, 0
18403         bl      memset
18404         bl      rknand_device_lock
18405         ldr     x3, [x29,40]
18406         add     w1, w19, 256
18407         mov     w2, 1
18408         mov     w0, 16
18409         bl      FtlRead
18410         str     x0, [x29,40]
18411         bl      rknand_device_unlock
18412         ldr     x19, [sp,16]
18413         ldr     x0, [x29,40]
18414         ldp     x29, x30, [sp], 48
18415         ret
18416         .size   StorageSysDataLoad, .-StorageSysDataLoad
18417         .align  2
18418         .global FtlWrite
18419         .type   FtlWrite, %function
18420 FtlWrite:
18421         stp     x29, x30, [sp, -320]!
18422         uxtb    w0, w0
18423         add     x29, sp, 0
18424         stp     x23, x24, [sp,48]
18425         stp     x25, x26, [sp,64]
18426         stp     x19, x20, [sp,16]
18427         stp     x21, x22, [sp,32]
18428         stp     x27, x28, [sp,80]
18429         cmp     w0, 16
18430         mov     w23, w1
18431         mov     w24, w2
18432         mov     x25, x3
18433         bne     .L2542
18434         add     w0, w1, 256
18435         mov     w1, w2
18436         mov     x2, x3
18437         bl      FtlVendorPartWrite
18438         b       .L2543
18439 .L2542:
18440         adrp    x0, :got:g_MaxLbaSector
18441         add     w2, w1, w2
18442         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
18443         ldr     w1, [x0]
18444         mov     w0, -1
18445         cmp     w2, w1
18446         bhi     .L2543
18447         adrp    x0, :got:g_ftl_nand_free_count
18448         adrp    x3, :got:c_ftl_nand_sec_pre_page
18449         mov     w1, 2048
18450         sub     w2, w2, #1
18451         str     x3, [x29,248]
18452         ldr     x0, [x0, #:got_lo12:g_ftl_nand_free_count]
18453         str     w1, [x0]
18454         ldr     x0, [x3, #:got_lo12:c_ftl_nand_sec_pre_page]
18455         ldrh    w1, [x0]
18456         udiv    w0, w2, w1
18457         cmp     w24, w1, lsl 1
18458         str     w0, [x29,220]
18459         udiv    w26, w23, w1
18460         sub     w27, w0, w26
18461         adrp    x0, :got:g_totle_write_page_count
18462         add     w21, w27, 1
18463         ldr     x0, [x0, #:got_lo12:g_totle_write_page_count]
18464         ldr     w2, [x0]
18465         add     w2, w21, w2
18466         str     w2, [x0]
18467         adrp    x0, :got:g_totle_write_sector
18468         ldr     x0, [x0, #:got_lo12:g_totle_write_sector]
18469         ldr     w2, [x0]
18470         add     w2, w24, w2
18471         str     w2, [x0]
18472         cset    w0, cs
18473         cmp     w24, 8
18474         str     w0, [x29,236]
18475         bhi     .L2581
18476         adrp    x19, :got:g_buffer_superblock
18477         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
18478         b       .L2544
18479 .L2581:
18480         adrp    x19, :got:g_active_superblock
18481         ldr     x19, [x19, #:got_lo12:g_active_superblock]
18482 .L2544:
18483         adrp    x22, :got:g_wr_page_num
18484         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18485         ldr     w3, [x0]
18486         cbz     w3, .L2545
18487         adrp    x0, :got:req_wr_io
18488         sub     w3, w3, #1
18489         mov     w2, 56
18490         adrp    x20, :got:last_cache_match_count
18491         ldr     x0, [x0, #:got_lo12:req_wr_io]
18492         umull   x3, w3, w2
18493         ldr     x0, [x0]
18494         add     x3, x0, x3
18495         ldr     w0, [x3,24]
18496         cmp     w26, w0
18497         bne     .L2546
18498         adrp    x0, :got:g_totle_cache_write_count
18499         ldr     x0, [x0, #:got_lo12:g_totle_cache_write_count]
18500         ldr     w2, [x0]
18501         add     w2, w2, 1
18502         str     w2, [x0]
18503         ldr     x28, [x20, #:got_lo12:last_cache_match_count]
18504         ldr     w0, [x28]
18505         add     w0, w0, 1
18506         str     w0, [x28]
18507         msub    w0, w26, w1, w23
18508         sub     w1, w1, w0
18509         ubfiz   x0, x0, 9, 23
18510         cmp     w1, w24
18511         csel    w19, w1, w24, ls
18512         ldr     x1, [x3,8]
18513         lsl     w21, w19, 9
18514         add     x0, x1, x0
18515         mov     w2, w21
18516         mov     x1, x25
18517         bl      ftl_memcpy
18518         cbnz    w27, .L2547
18519         ldr     w1, [x28]
18520         mov     w0, w27
18521         cmp     w1, 2
18522         ble     .L2543
18523 .L2547:
18524         add     x25, x25, x21
18525         sub     w24, w24, w19
18526         add     w23, w23, w19
18527         add     w26, w26, 1
18528         mov     w21, w27
18529 .L2546:
18530         ldr     x20, [x20, #:got_lo12:last_cache_match_count]
18531         adrp    x0, :got:gp_last_act_superblock
18532         str     wzr, [x20]
18533         ldr     x0, [x0, #:got_lo12:gp_last_act_superblock]
18534         ldr     x19, [x0]
18535 .L2545:
18536         ldr     w1, [x29,220]
18537         mov     w0, w26
18538         bl      FtlCacheMetchLpa
18539         cbz     w0, .L2548
18540         bl      FtlCacheWriteBack
18541 .L2548:
18542         adrp    x0, :got:gp_last_act_superblock
18543         str     x0, [x29,168]
18544         str     w26, [x29,232]
18545         ldr     x1, [x0, #:got_lo12:gp_last_act_superblock]
18546         add     x0, x29, 260
18547         str     x0, [x29,144]
18548         add     x0, x29, 264
18549         str     x0, [x29,240]
18550         adrp    x0, .LC116
18551         add     x0, x0, :lo12:.LC116
18552         str     x19, [x1]
18553         str     x0, [x29,136]
18554 .L2549:
18555         cbz     w21, .L2606
18556         ldrh    w1, [x19,4]
18557         cbnz    w1, .L2550
18558         adrp    x0, :got:g_active_superblock
18559         adrp    x20, :got:g_active_superblock
18560         ldr     x0, [x0, #:got_lo12:g_active_superblock]
18561         cmp     x19, x0
18562         bne     .L2551
18563         adrp    x19, :got:g_buffer_superblock
18564         ldr     x0, [x19, #:got_lo12:g_buffer_superblock]
18565         ldrh    w27, [x0,4]
18566         cbnz    w27, .L2552
18567         bl      allocate_new_data_superblock
18568         adrp    x0, :got:power_up_flag
18569         ldr     x0, [x0, #:got_lo12:power_up_flag]
18570         str     w27, [x0]
18571 .L2552:
18572         ldr     x0, [x20, #:got_lo12:g_active_superblock]
18573         bl      allocate_new_data_superblock
18574         adrp    x0, :got:power_up_flag
18575         ldr     x0, [x0, #:got_lo12:power_up_flag]
18576         ldr     w0, [x0]
18577         cbnz    w0, .L2583
18578 .L2554:
18579         ldr     x19, [x20, #:got_lo12:g_active_superblock]
18580         b       .L2553
18581 .L2551:
18582         adrp    x2, :got:power_up_flag
18583         ldrh    w0, [x0,4]
18584         ldr     x2, [x2, #:got_lo12:power_up_flag]
18585         str     w1, [x2]
18586         cbnz    w0, .L2554
18587         mov     x0, x19
18588         bl      allocate_new_data_superblock
18589         b       .L2553
18590 .L2583:
18591         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
18592 .L2553:
18593         ldrh    w0, [x19,4]
18594         cbnz    w0, .L2555
18595         mov     x0, x19
18596         bl      allocate_new_data_superblock
18597 .L2555:
18598         ldr     x0, [x29,168]
18599         ldr     x0, [x0, #:got_lo12:gp_last_act_superblock]
18600         str     x19, [x0]
18601 .L2550:
18602         adrp    x2, :got:c_wr_page_buf_num
18603         ldr     x3, [x22, #:got_lo12:g_wr_page_num]
18604         ldrh    w1, [x19,4]
18605         str     xzr, [x29,224]
18606         ldr     x0, [x2, #:got_lo12:c_wr_page_buf_num]
18607         ldr     w3, [x3]
18608         str     x2, [x29,160]
18609         ldr     w0, [x0]
18610         sub     w0, w0, w3
18611         cmp     w1, w0
18612         csel    w0, w1, w0, ls
18613         cmp     w0, w21
18614         csel    w0, w0, w21, ls
18615         str     w0, [x29,212]
18616         ldr     w0, [x29,236]
18617         and     w0, w0, 1
18618         str     w0, [x29,156]
18619         add     w0, w24, w23
18620         str     w0, [x29,208]
18621 .L2556:
18622         ldr     w0, [x29,224]
18623         ldr     w2, [x29,212]
18624         ldr     w1, [x29,232]
18625         cmp     w0, w2
18626         add     w28, w1, w0
18627         bcs     .L2607
18628         ldrh    w1, [x19,4]
18629         cbz     w1, .L2585
18630         ldr     w1, [x29,220]
18631         cmp     w28, w1
18632         cset    w10, eq
18633         cbz     w0, .L2558
18634         ldr     w1, [x29,156]
18635         tst     w10, w1
18636         beq     .L2558
18637         ldr     x1, [x29,248]
18638         ldr     w2, [x29,208]
18639         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page]
18640         ldrh    w1, [x1]
18641         msub    w2, w28, w1, w2
18642         cmp     w2, w1
18643         bne     .L2585
18644 .L2558:
18645         ldr     x1, [x29,144]
18646         mov     w2, 0
18647         mov     w0, w28
18648         str     x10, [x29,96]
18649         bl      log2phys
18650         mov     x0, x19
18651         bl      get_new_active_ppa
18652         ldr     x8, [x22, #:got_lo12:g_wr_page_num]
18653         adrp    x4, :got:req_wr_io
18654         mov     w7, 56
18655         str     x4, [x29,120]
18656         str     x8, [x29,104]
18657         ldr     x6, [x4, #:got_lo12:req_wr_io]
18658         ldr     w9, [x8]
18659         str     x7, [x29,112]
18660         ldr     x2, [x6]
18661         umull   x1, w9, w7
18662         str     x6, [x29,128]
18663         add     x2, x2, x1
18664         str     w0, [x2,4]
18665         ldr     x0, [x6]
18666         add     x1, x0, x1
18667         adrp    x0, :got:c_ftl_nand_byte_pre_oob
18668         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
18669         ldrh    w2, [x0]
18670         adrp    x0, :got:p_wr_io_spare_buf
18671         ldr     x0, [x0, #:got_lo12:p_wr_io_spare_buf]
18672         mul     w5, w2, w9
18673         ldr     x0, [x0]
18674         and     x3, x5, 4294967292
18675         adrp    x5, :got:c_ftl_nand_byte_pre_page
18676         str     x0, [x29,176]
18677         add     x27, x0, x3
18678         str     x27, [x1,16]
18679         str     x5, [x29,192]
18680         ldr     x20, [x5, #:got_lo12:c_ftl_nand_byte_pre_page]
18681         str     x3, [x29,184]
18682         ldrh    w0, [x20]
18683         mul     w0, w0, w9
18684         adrp    x9, :got:p_wr_io_data_buf
18685         and     x0, x0, 4294967292
18686         ldr     x9, [x9, #:got_lo12:p_wr_io_data_buf]
18687         str     w28, [x1,24]
18688         ldr     x9, [x9]
18689         add     x0, x9, x0
18690         str     x0, [x1,8]
18691         mov     x0, x27
18692         mov     w1, 0
18693         bl      ftl_memset
18694         cmp     w28, w26
18695         ldr     x4, [x29,120]
18696         cset    w0, eq
18697         str     w0, [x29,216]
18698         ldr     x5, [x29,192]
18699         cbnz    w0, .L2588
18700         ldr     x10, [x29,96]
18701         ldr     x6, [x29,128]
18702         ldr     x7, [x29,112]
18703         ldr     x8, [x29,104]
18704         cbz     w10, .L2559
18705         ldr     x0, [x29,248]
18706         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18707         ldrh    w20, [x0]
18708         ldr     w0, [x29,208]
18709         msub    w20, w28, w20, w0
18710         ldr     w0, [x29,216]
18711         str     w0, [x29,192]
18712         uxth    w20, w20
18713         b       .L2562
18714 .L2588:
18715         ldr     x0, [x29,248]
18716         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18717         ldrh    w20, [x0]
18718         udiv    w0, w23, w20
18719         msub    w0, w0, w20, w23
18720         str     w0, [x29,192]
18721         sub     w20, w20, w0
18722         cmp     w20, w24
18723         csel    w20, w20, w24, ls
18724 .L2562:
18725         ldr     x0, [x29,248]
18726         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18727         ldrh    w0, [x0]
18728         cmp     w20, w0
18729         bne     .L2563
18730         ldr     w0, [x29,216]
18731         mov     x1, x25
18732         cbnz    w0, .L2564
18733         mul     w1, w20, w28
18734         sub     w1, w1, w23
18735         ubfiz   x1, x1, 9, 23
18736         add     x1, x25, x1
18737 .L2564:
18738         ldr     w2, [x29,236]
18739         mov     w0, 56
18740         cbz     w2, .L2565
18741         ldr     x2, [x22, #:got_lo12:g_wr_page_num]
18742         ldr     x4, [x4, #:got_lo12:req_wr_io]
18743         ldr     w2, [x2]
18744         umull   x0, w2, w0
18745         ldr     x2, [x4]
18746         add     x0, x2, x0
18747         str     x1, [x0,8]
18748         b       .L2566
18749 .L2565:
18750         ldr     x2, [x22, #:got_lo12:g_wr_page_num]
18751         ldr     x4, [x4, #:got_lo12:req_wr_io]
18752         ldr     x5, [x5, #:got_lo12:c_ftl_nand_byte_pre_page]
18753         ldr     w2, [x2]
18754         umull   x0, w2, w0
18755         ldr     x2, [x4]
18756         add     x0, x2, x0
18757         ldrh    w2, [x5]
18758         ldr     x0, [x0,8]
18759         b       .L2605
18760 .L2563:
18761         ldr     w0, [x29,260]
18762         cmn     w0, #1
18763         beq     .L2567
18764         ldr     x1, [x29,240]
18765         mov     w2, 56
18766         str     x4, [x29,128]
18767         str     w28, [x1,24]
18768         str     w0, [x1,4]
18769         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18770         ldr     x1, [x4, #:got_lo12:req_wr_io]
18771         ldr     w0, [x0]
18772         ldr     x1, [x1]
18773         umull   x0, w0, w2
18774         ldr     x2, [x29,240]
18775         add     x0, x1, x0
18776         ldr     x1, [x0,8]
18777         ldr     x0, [x0,16]
18778         str     x1, [x2,8]
18779         mov     w1, 1
18780         str     x0, [x2,16]
18781         mov     x0, x2
18782         mov     w2, 0
18783         bl      FlashReadPages
18784         ldr     x0, [x29,240]
18785         ldr     x4, [x29,128]
18786         ldr     w0, [x0]
18787         cmn     w0, #1
18788         bne     .L2568
18789         adrp    x0, :got:g_sys_ext_data
18790         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
18791         ldr     w1, [x0,72]
18792         add     w1, w1, 1
18793         str     w1, [x0,72]
18794         b       .L2570
18795 .L2568:
18796         ldr     w0, [x27,8]
18797         cmp     w0, w28
18798         beq     .L2570
18799         adrp    x0, :got:g_sys_ext_data
18800         mov     w2, w28
18801         str     x4, [x29,128]
18802         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
18803         ldr     w1, [x0,72]
18804         add     w1, w1, 1
18805         str     w1, [x0,72]
18806         ldr     x0, [x29,136]
18807         ldr     w1, [x27,8]
18808         bl      printk
18809         b       .L2604
18810 .L2567:
18811         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18812         mov     w1, 56
18813         ldr     x5, [x5, #:got_lo12:c_ftl_nand_byte_pre_page]
18814         str     x4, [x29,128]
18815         ldr     w0, [x0]
18816         ldrh    w2, [x5]
18817         umull   x0, w0, w1
18818         ldr     x1, [x4, #:got_lo12:req_wr_io]
18819         ldr     x1, [x1]
18820         add     x0, x1, x0
18821         mov     w1, 0
18822         ldr     x0, [x0,8]
18823         bl      ftl_memset
18824 .L2604:
18825         ldr     x4, [x29,128]
18826 .L2570:
18827         ldr     w1, [x29,216]
18828         mov     w0, 56
18829         lsl     w2, w20, 9
18830         cbz     w1, .L2571
18831         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18832         ldr     x4, [x4, #:got_lo12:req_wr_io]
18833         ldr     w5, [x1]
18834         ldr     x4, [x4]
18835         umull   x0, w5, w0
18836         add     x4, x4, x0
18837         ldr     x0, [x29,192]
18838         ubfiz   x0, x0, 9, 23
18839         ldr     x1, [x4,8]
18840         add     x0, x1, x0
18841         mov     x1, x25
18842         b       .L2605
18843 .L2571:
18844         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18845         ldr     x4, [x4, #:got_lo12:req_wr_io]
18846         ldr     w5, [x1]
18847         ldr     x1, [x4]
18848         umull   x0, w5, w0
18849         add     x0, x1, x0
18850         ldr     x1, [x29,248]
18851         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page]
18852         ldr     x0, [x0,8]
18853         ldrh    w1, [x1]
18854         mul     w1, w28, w1
18855         sub     w1, w1, w23
18856         ubfiz   x1, x1, 9, 23
18857         add     x1, x25, x1
18858         b       .L2605
18859 .L2559:
18860         ldr     w0, [x29,236]
18861         ldr     w1, [x8]
18862         cbz     w0, .L2572
18863         umull   x0, w1, w7
18864         ldr     x1, [x6]
18865         add     x1, x1, x0
18866         ldr     x0, [x29,248]
18867         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18868         ldrh    w0, [x0]
18869         mul     w0, w28, w0
18870         sub     w0, w0, w23
18871         ubfiz   x0, x0, 9, 23
18872         add     x0, x25, x0
18873         str     x0, [x1,8]
18874         b       .L2566
18875 .L2572:
18876         umull   x0, w1, w7
18877         ldr     x1, [x6]
18878         ldrh    w2, [x20]
18879         add     x0, x1, x0
18880         ldr     x1, [x29,248]
18881         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page]
18882         ldr     x0, [x0,8]
18883         ldrh    w1, [x1]
18884         mul     w1, w28, w1
18885         sub     w1, w1, w23
18886         ubfiz   x1, x1, 9, 23
18887         add     x1, x25, x1
18888 .L2605:
18889         bl      ftl_memcpy
18890 .L2566:
18891         ldr     x1, [x29,176]
18892         mov     w0, -3947
18893         ldr     x2, [x29,184]
18894         strh    w0, [x1,x2]
18895         adrp    x1, :got:g_GlobalDataVersion
18896         ldr     x1, [x1, #:got_lo12:g_GlobalDataVersion]
18897         str     w28, [x27,8]
18898         ldr     w0, [x1]
18899         str     w0, [x27,4]
18900         add     w0, w0, 1
18901         cmn     w0, #1
18902         csel    w0, w0, wzr, ne
18903         str     w0, [x1]
18904         ldr     w0, [x29,260]
18905         str     w0, [x27,12]
18906         ldrh    w0, [x19]
18907         strh    w0, [x27,2]
18908         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18909         ldr     w0, [x1]
18910         add     w0, w0, 1
18911         str     w0, [x1]
18912         ldr     x0, [x29,224]
18913         add     x0, x0, 1
18914         str     x0, [x29,224]
18915         b       .L2556
18916 .L2607:
18917         str     w28, [x29,232]
18918         mov     x0, x2
18919         b       .L2557
18920 .L2585:
18921         str     w28, [x29,232]
18922 .L2557:
18923         sub     w21, w21, w0
18924         ldr     w0, [x29,236]
18925         cbnz    w0, .L2576
18926         ldr     x0, [x29,160]
18927         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18928         ldr     x0, [x0, #:got_lo12:c_wr_page_buf_num]
18929         ldr     w1, [x1]
18930         ldr     w0, [x0]
18931         cmp     w1, w0
18932         bcs     .L2576
18933         ldrh    w0, [x19,4]
18934         cbz     w0, .L2576
18935 .L2578:
18936         str     wzr, [x29,236]
18937         b       .L2577
18938 .L2576:
18939         bl      FtlCacheWriteBack
18940         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18941         cmp     w21, 3
18942         str     wzr, [x0]
18943         bls     .L2578
18944 .L2577:
18945         bl      rknand_queue_cond_resched
18946         b       .L2549
18947 .L2606:
18948         ldr     w1, [x29,220]
18949         mov     w0, w21
18950         sub     w1, w1, w26
18951         bl      rk_ftl_garbage_collect
18952         mov     w0, w21
18953 .L2543:
18954         ldp     x19, x20, [sp,16]
18955         ldp     x21, x22, [sp,32]
18956         ldp     x23, x24, [sp,48]
18957         ldp     x25, x26, [sp,64]
18958         ldp     x27, x28, [sp,80]
18959         ldp     x29, x30, [sp], 320
18960         ret
18961         .size   FtlWrite, .-FtlWrite
18962         .align  2
18963         .global StorageSysDataStore
18964         .type   StorageSysDataStore, %function
18965 StorageSysDataStore:
18966         stp     x29, x30, [sp, -48]!
18967         add     x29, sp, 0
18968         str     x19, [sp,16]
18969         mov     w19, w0
18970         str     x1, [x29,40]
18971         bl      rknand_device_lock
18972         ldr     x3, [x29,40]
18973         add     w1, w19, 256
18974         mov     w2, 1
18975         mov     w0, 16
18976         bl      FtlWrite
18977         str     x0, [x29,40]
18978         bl      rknand_device_unlock
18979         ldr     x19, [sp,16]
18980         ldr     x0, [x29,40]
18981         ldp     x29, x30, [sp], 48
18982         ret
18983         .size   StorageSysDataStore, .-StorageSysDataStore
18984         .align  2
18985         .type   FlashReadFacBbtData.part.17, %function
18986 FlashReadFacBbtData.part.17:
18987         stp     x29, x30, [sp, -32]!
18988         mov     w3, 0
18989         adrp    x4, :got:gFlashPageBuffer0
18990         add     x29, sp, 0
18991         str     x19, [sp,16]
18992         mov     x19, x0
18993         cbnz    w1, .L2612
18994         adrp    x1, :got:gNandFlashIdbBlockAddr
18995         mov     w7, 1
18996 .L2615:
18997         ldr     x0, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
18998         ldr     w0, [x0]
18999         cmp     w3, w0
19000         bcs     .L2612
19001         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
19002         ubfx    x5, x3, 5, 11
19003         lsl     x5, x5, 2
19004         lsl     w6, w7, w3
19005         add     w3, w3, 1
19006         ldr     x0, [x0]
19007         uxth    w3, w3
19008         ldr     w8, [x0,x5]
19009         orr     w6, w8, w6
19010         str     w6, [x0,x5]
19011         b       .L2615
19012 .L2612:
19013         ldr     x4, [x4, #:got_lo12:gFlashPageBuffer0]
19014         mov     x0, x19
19015         ldr     x1, [x4]
19016         bl      ftl_memcpy
19017         mov     w2, 4
19018         adrp    x0, .LC117
19019         mov     x1, x19
19020         add     x0, x0, :lo12:.LC117
19021         mov     w3, w2
19022         bl      rknand_print_hex
19023         ldr     x19, [sp,16]
19024         mov     w0, 0
19025         ldp     x29, x30, [sp], 32
19026         ret
19027         .size   FlashReadFacBbtData.part.17, .-FlashReadFacBbtData.part.17
19028         .align  2
19029         .global FlashReadFacBbtData
19030         .type   FlashReadFacBbtData, %function
19031 FlashReadFacBbtData:
19032         adrp    x4, :got:gNandPhyInfo
19033         stp     x29, x30, [sp, -160]!
19034         add     x29, sp, 0
19035         ldr     x4, [x4, #:got_lo12:gNandPhyInfo]
19036         stp     x19, x20, [sp,16]
19037         stp     x21, x22, [sp,32]
19038         stp     x23, x24, [sp,48]
19039         stp     x25, x26, [sp,64]
19040         str     x27, [sp,80]
19041         mov     x22, x0
19042         mov     w24, w1
19043         mov     w26, w2
19044         ldrh    w0, [x4,14]
19045         add     x23, x29, 104
19046         ldrh    w3, [x4,12]
19047         adrp    x4, :got:gFlashSpareBuffer
19048         mov     x21, x4
19049         mov     w27, 61664
19050         mul     w3, w3, w0
19051         adrp    x0, :got:gFlashPageBuffer0
19052         uxth    w3, w3
19053         ldr     x0, [x0, #:got_lo12:gFlashPageBuffer0]
19054         sub     w20, w3, #1
19055         mul     w25, w1, w3
19056         uxth    w20, w20
19057         sub     w19, w3, #16
19058         ldr     x0, [x0]
19059         str     x0, [x29,112]
19060         ldr     x0, [x4, #:got_lo12:gFlashSpareBuffer]
19061         ldr     x0, [x0]
19062         str     x0, [x29,120]
19063 .L2617:
19064         cmp     w20, w19
19065         ble     .L2625
19066         add     w0, w20, w25
19067         mov     w1, 1
19068         lsl     w0, w0, 10
19069         mov     w2, w1
19070         str     w0, [x23,4]
19071         mov     x0, x23
19072         bl      FlashReadPages
19073         ldr     w0, [x23]
19074         cmn     w0, #1
19075         beq     .L2618
19076         ldr     x0, [x21, #:got_lo12:gFlashSpareBuffer]
19077         ldr     x0, [x0]
19078         ldrh    w0, [x0]
19079         cmp     w0, w27
19080         bne     .L2618
19081         mov     w0, w22
19082         cbz     x22, .L2619
19083         mov     x0, x22
19084         mov     w1, w24
19085         mov     w2, w26
19086         bl      FlashReadFacBbtData.part.17
19087         b       .L2619
19088 .L2618:
19089         sub     w20, w20, #1
19090         uxth    w20, w20
19091         b       .L2617
19092 .L2625:
19093         mov     w0, -1
19094 .L2619:
19095         ldp     x19, x20, [sp,16]
19096         ldp     x21, x22, [sp,32]
19097         ldp     x23, x24, [sp,48]
19098         ldp     x25, x26, [sp,64]
19099         ldr     x27, [sp,80]
19100         ldp     x29, x30, [sp], 160
19101         ret
19102         .size   FlashReadFacBbtData, .-FlashReadFacBbtData
19103         .align  2
19104         .global FlashGetBadBlockList
19105         .type   FlashGetBadBlockList, %function
19106 FlashGetBadBlockList:
19107         adrp    x2, :got:gpNandParaInfo
19108         stp     x29, x30, [sp, -48]!
19109         add     x29, sp, 0
19110         ldr     x2, [x2, #:got_lo12:gpNandParaInfo]
19111         stp     x19, x20, [sp,16]
19112         str     x21, [sp,32]
19113         mov     x21, x0
19114         adrp    x20, :got:gFlashPageBuffer1
19115         ldr     x0, [x2]
19116         ldrb    w2, [x0,13]
19117         ldrh    w19, [x0,14]
19118         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer1]
19119         mul     w19, w2, w19
19120         ldr     x0, [x0]
19121         uxth    w19, w19
19122         add     w2, w19, 7
19123         lsr     w2, w2, 3
19124         bl      FlashReadFacBbtData
19125         cmn     w0, #1
19126         bne     .L2627
19127 .L2631:
19128         mov     w1, 0
19129         b       .L2628
19130 .L2627:
19131         mov     w2, 0
19132         lsr     w0, w19, 4
19133         mov     w1, w2
19134         sub     w19, w19, #1
19135         mov     w5, 1
19136 .L2629:
19137         cmp     w2, w19
19138         bge     .L2628
19139         ldr     x3, [x20, #:got_lo12:gFlashPageBuffer1]
19140         ubfx    x4, x2, 5, 11
19141         ldr     x6, [x3]
19142         lsl     w3, w5, w2
19143         ldr     w4, [x6,x4,lsl 2]
19144         tst     w3, w4
19145         beq     .L2630
19146         add     w3, w1, 1
19147         ubfiz   x1, x1, 1, 16
19148         strh    w2, [x21,x1]
19149         uxth    w1, w3
19150 .L2630:
19151         cmp     w1, w0
19152         bcs     .L2631
19153         add     w2, w2, 1
19154         uxth    w2, w2
19155         b       .L2629
19156 .L2628:
19157         ubfiz   x1, x1, 1, 16
19158         mov     w0, -1
19159         ldp     x19, x20, [sp,16]
19160         strh    w0, [x21,x1]
19161         mov     w0, 0
19162         ldr     x21, [sp,32]
19163         ldp     x29, x30, [sp], 48
19164         ret
19165         .size   FlashGetBadBlockList, .-FlashGetBadBlockList
19166         .align  2
19167         .global FtlMakeBbt
19168         .type   FtlMakeBbt, %function
19169 FtlMakeBbt:
19170         stp     x29, x30, [sp, -96]!
19171         add     x29, sp, 0
19172         stp     x19, x20, [sp,16]
19173         adrp    x19, :got:gBbtInfo
19174         stp     x21, x22, [sp,32]
19175         stp     x23, x24, [sp,48]
19176         stp     x25, x26, [sp,64]
19177         stp     x27, x28, [sp,80]
19178         bl      FtlBbtMemInit
19179         mov     w21, 0
19180         bl      FtlLoadFactoryBbt
19181         ldr     x22, [x19, #:got_lo12:gBbtInfo]
19182         adrp    x25, :got:c_ftl_nand_blks_per_die
19183         mov     x23, x22
19184 .L2637:
19185         adrp    x0, :got:c_ftl_nand_die_num
19186         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
19187         ldrh    w0, [x0]
19188         cmp     w21, w0
19189         bcs     .L2655
19190         adrp    x0, :got:p_sys_data_buf
19191         adrp    x1, :got:req_sys
19192         ldrh    w26, [x23,12]
19193         ldr     x0, [x0, #:got_lo12:p_sys_data_buf]
19194         ldr     x20, [x1, #:got_lo12:req_sys]
19195         adrp    x1, :got:p_sys_spare_buf
19196         ldr     x0, [x0]
19197         str     x0, [x20,8]
19198         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
19199         ldr     x24, [x1]
19200         mov     w1, 65535
19201         str     x24, [x20,16]
19202         cmp     w26, w1
19203         beq     .L2638
19204         ldr     x24, [x25, #:got_lo12:c_ftl_nand_blks_per_die]
19205         ldrh    w1, [x24]
19206         madd    w26, w21, w1, w26
19207         mov     w1, 1
19208         lsl     w0, w26, 10
19209         mov     w2, w1
19210         str     w0, [x20,4]
19211         mov     x0, x20
19212         bl      FlashReadPages
19213         ldrh    w2, [x24]
19214         ldr     x0, [x22,32]
19215         add     w2, w2, 7
19216         ldr     x1, [x20,8]
19217         lsr     w2, w2, 3
19218         bl      ftl_memcpy
19219         b       .L2639
19220 .L2638:
19221         mov     w1, w21
19222         adrp    x28, :got:c_ftl_nand_bbm_buf_size
19223         bl      FlashGetBadBlockList
19224         ldr     x0, [x20,8]
19225         ldr     x1, [x22,32]
19226         bl      FtlBbt2Bitmap
19227         ldr     x0, [x25, #:got_lo12:c_ftl_nand_blks_per_die]
19228         ldrh    w20, [x0]
19229         sub     w20, w20, #1
19230         uxth    w20, w20
19231 .L2640:
19232         ldr     x26, [x25, #:got_lo12:c_ftl_nand_blks_per_die]
19233         ldrh    w0, [x26]
19234         madd    w0, w21, w0, w20
19235         bl      FtlBbmIsBadBlock
19236         cmp     w0, 1
19237         bne     .L2656
19238         sub     w20, w20, #1
19239         uxth    w20, w20
19240         b       .L2640
19241 .L2656:
19242         adrp    x0, :got:p_sys_spare_buf
19243         strh    w20, [x23,12]
19244         mov     w1, 0
19245         mov     w2, 16
19246         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
19247         ldr     x0, [x0]
19248         bl      ftl_memset
19249         str     wzr, [x24,4]
19250         mov     w0, -3872
19251         strh    w0, [x24]
19252         ldrh    w0, [x23,12]
19253         strh    w0, [x24,2]
19254         ldrh    w0, [x26]
19255         ldrh    w1, [x23,12]
19256         madd    w26, w21, w0, w1
19257         adrp    x0, :got:req_sys
19258         ldr     x1, [x22,32]
19259         ldr     x27, [x0, #:got_lo12:req_sys]
19260         lsl     w0, w26, 10
19261         str     w0, [x27,4]
19262         ldr     x0, [x28, #:got_lo12:c_ftl_nand_bbm_buf_size]
19263         ldrh    w2, [x0]
19264         ldr     x0, [x27,8]
19265         lsl     w2, w2, 2
19266         bl      ftl_memcpy
19267         mov     w1, 1
19268         mov     x0, x27
19269         bl      FlashEraseBlocks
19270         mov     w1, 1
19271         mov     x0, x27
19272         mov     w2, w1
19273         mov     w3, w1
19274         bl      FlashProgPages
19275         ldr     w0, [x27]
19276         cmn     w0, #1
19277         bne     .L2639
19278         mov     w0, w26
19279         bl      FtlBbmMapBadBlock
19280         b       .L2640
19281 .L2639:
19282         mov     w0, w26
19283         add     w21, w21, 1
19284         add     x22, x22, 8
19285         add     x23, x23, 2
19286         bl      FtlBbmMapBadBlock
19287         b       .L2637
19288 .L2655:
19289         mov     w20, 0
19290         adrp    x21, :got:c_ftl_nand_reserved_blks
19291 .L2644:
19292         ldr     x0, [x21, #:got_lo12:c_ftl_nand_reserved_blks]
19293         ldrh    w0, [x0]
19294         cmp     w0, w20
19295         bls     .L2657
19296         mov     w0, w20
19297         add     w20, w20, 1
19298         bl      FtlBbmMapBadBlock
19299         uxth    w20, w20
19300         b       .L2644
19301 .L2657:
19302         ldr     x0, [x19, #:got_lo12:gBbtInfo]
19303         mov     w22, 65535
19304         ldrh    w20, [x0,12]
19305         sub     w20, w20, #1
19306         uxth    w20, w20
19307 .L2646:
19308         ldr     x21, [x19, #:got_lo12:gBbtInfo]
19309         ldrh    w0, [x21,12]
19310         sub     w0, w0, #48
19311         cmp     w20, w0
19312         ble     .L2650
19313         mov     w0, w20
19314         bl      FtlBbmIsBadBlock
19315         cmp     w0, 1
19316         beq     .L2647
19317         mov     w0, w20
19318         bl      FlashTestBlk
19319         cbz     w0, .L2648
19320         mov     w0, w20
19321         bl      FtlBbmMapBadBlock
19322         b       .L2647
19323 .L2648:
19324         ldrh    w0, [x21]
19325         cmp     w0, w22
19326         bne     .L2649
19327         strh    w20, [x21]
19328         b       .L2647
19329 .L2649:
19330         strh    w20, [x21,4]
19331         b       .L2650
19332 .L2647:
19333         sub     w20, w20, #1
19334         uxth    w20, w20
19335         b       .L2646
19336 .L2650:
19337         ldr     x19, [x19, #:got_lo12:gBbtInfo]
19338         adrp    x0, :got:req_erase
19339         str     wzr, [x19,8]
19340         strh    wzr, [x19,2]
19341         ldrh    w1, [x19]
19342         ldr     x0, [x0, #:got_lo12:req_erase]
19343         lsl     w1, w1, 10
19344         ldr     x2, [x0]
19345         str     w1, [x2,4]
19346         ldrh    w1, [x19,4]
19347         ldr     x0, [x0]
19348         lsl     w1, w1, 10
19349         str     w1, [x0,60]
19350         mov     w1, 2
19351         bl      FlashEraseBlocks
19352         ldrh    w0, [x19]
19353         bl      FtlBbmMapBadBlock
19354         ldrh    w0, [x19,4]
19355         bl      FtlBbmMapBadBlock
19356         bl      FtlBbmTblFlush
19357         strh    wzr, [x19,2]
19358         ldr     w0, [x19,8]
19359         ldrh    w1, [x19,4]
19360         add     w0, w0, 1
19361         str     w0, [x19,8]
19362         ldrh    w0, [x19]
19363         strh    w0, [x19,4]
19364         strh    w1, [x19]
19365         bl      FtlBbmTblFlush
19366         mov     w0, 0
19367         ldp     x19, x20, [sp,16]
19368         ldp     x21, x22, [sp,32]
19369         ldp     x23, x24, [sp,48]
19370         ldp     x25, x26, [sp,64]
19371         ldp     x27, x28, [sp,80]
19372         ldp     x29, x30, [sp], 96
19373         ret
19374         .size   FtlMakeBbt, .-FtlMakeBbt
19375         .align  2
19376         .global FtlLowFormat
19377         .type   FtlLowFormat, %function
19378 FtlLowFormat:
19379         stp     x29, x30, [sp, -80]!
19380         add     x29, sp, 0
19381         stp     x19, x20, [sp,16]
19382         adrp    x19, :got:g_GlobalSysVersion
19383         str     x25, [sp,64]
19384         stp     x23, x24, [sp,48]
19385         stp     x21, x22, [sp,32]
19386         ldr     x0, [x19, #:got_lo12:g_GlobalSysVersion]
19387         adrp    x23, :got:c_ftl_nand_max_sys_blks
19388         str     wzr, [x0]
19389         adrp    x0, :got:g_GlobalDataVersion
19390         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
19391         str     wzr, [x0]
19392         ldr     x0, [x23, #:got_lo12:c_ftl_nand_max_sys_blks]
19393         ldrh    w0, [x0]
19394         bl      FtlFreeSysBlkQueueInit
19395         bl      FtlLoadBbt
19396         cbz     w0, .L2659
19397         bl      FtlMakeBbt
19398 .L2659:
19399         mov     w0, 0
19400         adrp    x3, :got:c_ftl_nand_sec_pre_page
19401         adrp    x4, :got:p_io_data_buf_0
19402         adrp    x5, :got:p_io_data_buf_1
19403 .L2660:
19404         ldr     x1, [x3, #:got_lo12:c_ftl_nand_sec_pre_page]
19405         ldrh    w1, [x1]
19406         cmp     w0, w1, lsl 7
19407         bge     .L2683
19408         ldr     x1, [x4, #:got_lo12:p_io_data_buf_0]
19409         ubfiz   x2, x0, 2, 16
19410         ldr     x6, [x1]
19411         mvn     w1, w0
19412         orr     w1, w0, w1, lsl 16
19413         add     w0, w0, 1
19414         str     w1, [x6,x2]
19415         uxth    w0, w0
19416         ldr     x1, [x5, #:got_lo12:p_io_data_buf_1]
19417         ldr     x6, [x1]
19418         mov     w1, 23752
19419         movk    w1, 0xa0f, lsl 16
19420         str     w1, [x6,x2]
19421         b       .L2660
19422 .L2683:
19423         adrp    x24, :got:c_ftl_nand_data_blks_per_plane
19424         mov     w21, 0
19425         adrp    x25, :got:c_ftl_nand_blk_pre_plane
19426         ldr     x0, [x24, #:got_lo12:c_ftl_nand_data_blks_per_plane]
19427         ldrh    w22, [x0]
19428 .L2662:
19429         ldr     x0, [x25, #:got_lo12:c_ftl_nand_blk_pre_plane]
19430         adrp    x20, :got:c_ftl_nand_blk_pre_plane
19431         ldrh    w0, [x0]
19432         cmp     w0, w22
19433         bls     .L2684
19434         mov     w0, w22
19435         mov     w1, 1
19436         add     w22, w22, 1
19437         bl      FtlLowFormatEraseBlock
19438         add     w0, w21, w0
19439         uxth    w22, w22
19440         uxth    w21, w0
19441         b       .L2662
19442 .L2684:
19443         adrp    x22, :got:c_ftl_nand_planes_num
19444         sub     w1, w21, #3
19445         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
19446         ldrh    w0, [x0]
19447         cmp     w1, w0, lsl 1
19448         bge     .L2664
19449 .L2668:
19450         mov     w21, 0
19451         mov     w23, w21
19452         b       .L2665
19453 .L2664:
19454         udiv    w21, w21, w0
19455         adrp    x0, :got:c_ftl_nand_init_sys_blks_per_plane
19456         ldr     x0, [x0, #:got_lo12:c_ftl_nand_init_sys_blks_per_plane]
19457         ldr     w0, [x0]
19458         add     w0, w21, w0
19459         bl      FtlSysBlkNumInit
19460         ldr     x23, [x23, #:got_lo12:c_ftl_nand_max_sys_blks]
19461         ldrh    w0, [x23]
19462         bl      FtlFreeSysBlkQueueInit
19463         ldr     x0, [x24, #:got_lo12:c_ftl_nand_data_blks_per_plane]
19464         ldrh    w21, [x0]
19465 .L2666:
19466         ldr     x0, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
19467         ldrh    w0, [x0]
19468         cmp     w0, w21
19469         bls     .L2668
19470         mov     w0, w21
19471         mov     w1, 1
19472         add     w21, w21, 1
19473         bl      FtlLowFormatEraseBlock
19474         uxth    w21, w21
19475         b       .L2666
19476 .L2665:
19477         ldr     x0, [x24, #:got_lo12:c_ftl_nand_data_blks_per_plane]
19478         ldrh    w0, [x0]
19479         cmp     w0, w23
19480         bls     .L2685
19481         mov     w0, w23
19482         mov     w1, 0
19483         add     w23, w23, 1
19484         bl      FtlLowFormatEraseBlock
19485         add     w0, w21, w0
19486         uxth    w23, w23
19487         uxth    w21, w0
19488         b       .L2665
19489 .L2685:
19490         adrp    x0, :got:g_cur_erase_blk
19491         ldr     x1, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
19492         adrp    x2, :got:g_MaxLpn
19493         adrp    x5, :got:c_ftl_nand_data_op_blks_per_plane
19494         ldr     x0, [x0, #:got_lo12:g_cur_erase_blk]
19495         ldrh    w1, [x1]
19496         str     w1, [x0]
19497         adrp    x0, :got:c_ftl_nand_max_data_blks
19498         ldr     x22, [x22, #:got_lo12:c_ftl_nand_planes_num]
19499         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_data_blks]
19500         ldr     x8, [x2, #:got_lo12:g_MaxLpn]
19501         ldrh    w6, [x22]
19502         ldr     w1, [x0]
19503         udiv    w0, w1, w6
19504         str     w0, [x8]
19505         ubfx    x7, x0, 5, 16
19506         ldr     x4, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19507         add     w3, w7, 36
19508         strh    w3, [x4]
19509         mov     w3, 24
19510         mul     w3, w6, w3
19511         cmp     w21, w3
19512         ble     .L2670
19513         sub     w1, w1, w21
19514         udiv    w1, w1, w6
19515         str     w1, [x8]
19516         lsr     w1, w1, 5
19517         add     w1, w1, 24
19518         strh    w1, [x4]
19519 .L2670:
19520         adrp    x3, :got:g_inkDie_check_enable
19521         ldr     x3, [x3, #:got_lo12:g_inkDie_check_enable]
19522         ldr     w1, [x3]
19523         cmp     w1, 1
19524         bne     .L2671
19525         ldr     x1, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19526         udiv    w3, w21, w6
19527         ldrh    w4, [x1]
19528         add     w3, w4, w3
19529         add     w3, w4, w3, asr 2
19530         strh    w3, [x1]
19531 .L2671:
19532         adrp    x3, :got:c_ftl_nand_ext_blk_pre_plane
19533         ldr     x3, [x3, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
19534         ldrh    w1, [x3]
19535         cbz     w1, .L2673
19536         ldr     x3, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19537         ldrh    w4, [x3]
19538         add     w4, w4, w1, lsr 1
19539         strh    w4, [x3]
19540         mul     w4, w1, w6
19541         cmp     w4, w21
19542         ble     .L2673
19543         ldr     x4, [x2, #:got_lo12:g_MaxLpn]
19544         add     w1, w1, 32
19545         add     w1, w7, w1
19546         strh    w1, [x3]
19547         str     w0, [x4]
19548 .L2673:
19549         ldr     x1, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19550         adrp    x22, :got:g_MaxLbn
19551         ldr     x2, [x2, #:got_lo12:g_MaxLpn]
19552         adrp    x21, :got:p_valid_page_count_table
19553         ldrh    w0, [x1]
19554         ldr     w1, [x2]
19555         sub     w0, w1, w0
19556         ldr     x1, [x22, #:got_lo12:g_MaxLbn]
19557         mul     w0, w0, w6
19558         str     w0, [x1]
19559         adrp    x1, :got:c_ftl_nand_page_pre_blk
19560         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
19561         ldrh    w1, [x1]
19562         mul     w0, w0, w1
19563         str     w0, [x2]
19564         adrp    x2, :got:c_ftl_nand_sec_pre_page
19565         adrp    x1, :got:g_MaxLbaSector
19566         ldr     x2, [x2, #:got_lo12:c_ftl_nand_sec_pre_page]
19567         ldr     x1, [x1, #:got_lo12:g_MaxLbaSector]
19568         ldrh    w2, [x2]
19569         mul     w0, w0, w2
19570         str     w0, [x1]
19571         bl      FtlBbmTblFlush
19572         ldr     x0, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
19573         mov     x20, x21
19574         ldr     x1, [x21, #:got_lo12:p_valid_page_count_table]
19575         ldrh    w2, [x0]
19576         ldr     x0, [x1]
19577         mov     w1, 0
19578         lsl     w2, w2, 1
19579         bl      ftl_memset
19580         adrp    x0, :got:g_VaildLpn
19581         mov     w1, -1
19582         mov     w23, w1
19583         ldr     x0, [x0, #:got_lo12:g_VaildLpn]
19584         str     wzr, [x0]
19585         adrp    x0, :got:g_gc_superblock
19586         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
19587         strh    w1, [x0]
19588         strh    wzr, [x0,2]
19589         strb    wzr, [x0,6]
19590         strb    wzr, [x0,8]
19591         adrp    x0, :got:g_active_superblock
19592         mov     x24, x0
19593         ldr     x2, [x0, #:got_lo12:g_active_superblock]
19594         strh    wzr, [x2,2]
19595         strb    wzr, [x2,6]
19596         strh    wzr, [x2]
19597         strb    wzr, [x2,8]
19598 .L2675:
19599         ldr     x21, [x24, #:got_lo12:g_active_superblock]
19600         mov     x0, x21
19601         bl      make_superblock
19602         ldrb    w0, [x21,7]
19603         cbnz    w0, .L2676
19604         ldr     x0, [x20, #:got_lo12:p_valid_page_count_table]
19605         ldrh    w1, [x21]
19606         ldr     x0, [x0]
19607         strh    w23, [x0,x1,lsl 1]
19608         ldrh    w0, [x21]
19609         add     w0, w0, 1
19610         strh    w0, [x21]
19611         b       .L2675
19612 .L2676:
19613         ldr     x1, [x19, #:got_lo12:g_GlobalSysVersion]
19614         mov     w24, -1
19615         ldrh    w2, [x21,4]
19616         ldr     w0, [x1]
19617         str     w0, [x21,12]
19618         add     w0, w0, 1
19619         str     w0, [x1]
19620         ldrh    w1, [x21]
19621         ldr     x0, [x20, #:got_lo12:p_valid_page_count_table]
19622         ldr     x0, [x0]
19623         strh    w2, [x0,x1,lsl 1]
19624         adrp    x0, :got:g_buffer_superblock
19625         mov     x23, x0
19626         ldrh    w2, [x21]
19627         ldr     x1, [x0, #:got_lo12:g_buffer_superblock]
19628         add     w2, w2, 1
19629         strh    wzr, [x1,2]
19630         strh    w2, [x1]
19631         mov     w2, 1
19632         strb    wzr, [x1,6]
19633         strb    w2, [x1,8]
19634 .L2677:
19635         ldr     x21, [x23, #:got_lo12:g_buffer_superblock]
19636         mov     x0, x21
19637         bl      make_superblock
19638         ldrb    w0, [x21,7]
19639         cbnz    w0, .L2678
19640         ldr     x0, [x20, #:got_lo12:p_valid_page_count_table]
19641         ldrh    w1, [x21]
19642         ldr     x0, [x0]
19643         strh    w24, [x0,x1,lsl 1]
19644         ldrh    w0, [x21]
19645         add     w0, w0, 1
19646         strh    w0, [x21]
19647         b       .L2677
19648 .L2678:
19649         ldr     x19, [x19, #:got_lo12:g_GlobalSysVersion]
19650         ldrh    w1, [x21]
19651         ldrh    w2, [x21,4]
19652         ldr     w0, [x19]
19653         str     w0, [x21,12]
19654         add     w0, w0, 1
19655         str     w0, [x19]
19656         ldr     x20, [x20, #:got_lo12:p_valid_page_count_table]
19657         ldr     x0, [x20]
19658         mov     w20, -1
19659         strh    w2, [x0,x1,lsl 1]
19660         adrp    x0, :got:g_gc_temp_superblock
19661         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
19662         strh    w20, [x0]
19663         bl      FtlFreeSysBlkQueueOut
19664         adrp    x1, :got:gSysInfo
19665         ldr     x1, [x1, #:got_lo12:gSysInfo]
19666         strh    w0, [x1]
19667         strh    wzr, [x1,2]
19668         strh    w20, [x1,4]
19669         ldr     x22, [x22, #:got_lo12:g_MaxLbn]
19670         ldr     w0, [x22]
19671         strh    w0, [x1,6]
19672         ldr     w0, [x19]
19673         str     w0, [x1,8]
19674         add     w0, w0, 1
19675         str     w0, [x19]
19676         bl      FtlVpcTblFlush
19677         bl      FtlSysBlkInit
19678         cbnz    w0, .L2679
19679         adrp    x0, :got:gFtlInitStatus
19680         mov     w1, 1
19681         ldr     x0, [x0, #:got_lo12:gFtlInitStatus]
19682         str     w1, [x0]
19683 .L2679:
19684         mov     w0, 0
19685         ldr     x25, [sp,64]
19686         ldp     x19, x20, [sp,16]
19687         ldp     x21, x22, [sp,32]
19688         ldp     x23, x24, [sp,48]
19689         ldp     x29, x30, [sp], 80
19690         ret
19691         .size   FtlLowFormat, .-FtlLowFormat
19692         .align  2
19693         .global FtlReInitForSDUpdata
19694         .type   FtlReInitForSDUpdata, %function
19695 FtlReInitForSDUpdata:
19696         adrp    x0, :got:RK29_NANDC_REG_BASE
19697         stp     x29, x30, [sp, -48]!
19698         add     x29, sp, 0
19699         ldr     x0, [x0, #:got_lo12:RK29_NANDC_REG_BASE]
19700         str     x19, [sp,16]
19701         ldr     x0, [x0]
19702         bl      FlashInit
19703         mov     w1, 0
19704         cbnz    w0, .L2687
19705         bl      FlashLoadFactorBbt
19706         cbz     w0, .L2688
19707         bl      FlashMakeFactorBbt
19708 .L2688:
19709         adrp    x0, :got:gFlashPageBuffer1
19710         ldr     x0, [x0, #:got_lo12:gFlashPageBuffer1]
19711         ldr     x0, [x0]
19712         bl      FlashReadIdbDataRaw
19713         cbz     w0, .L2689
19714         mov     w1, 0
19715         mov     w2, 16
19716         add     x0, x29, 32
19717         bl      FlashReadFacBbtData
19718         mov     w0, 0
19719         ldr     w2, [x29,32]
19720         mov     w1, w0
19721         mov     w4, 1
19722 .L2691:
19723         lsl     w3, w4, w1
19724         add     w1, w1, 1
19725         tst     w3, w2
19726         cset    w3, ne
19727         cmp     w1, 16
19728         add     w0, w0, w3
19729         bne     .L2691
19730         cmp     w0, 6
19731         bhi     .L2692
19732         adrp    x0, :got:gNandIDBResBlkNum
19733         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
19734         b       .L2716
19735 .L2692:
19736         mov     w1, 0
19737         mov     w4, 1
19738 .L2695:
19739         lsl     w3, w4, w1
19740         add     w1, w1, 1
19741         tst     w3, w2
19742         cset    w3, ne
19743         cmp     w1, 24
19744         add     w0, w0, w3
19745         bne     .L2695
19746         cmp     w0, 17
19747         adrp    x0, :got:gNandIDBResBlkNum
19748         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
19749         bls     .L2716
19750         mov     w1, 36
19751 .L2716:
19752         strb    w1, [x0]
19753         adrp    x1, :got:gNandIDBResBlkNum
19754         adrp    x0, :got:gNandPhyInfo
19755         ldr     x1, [x1, #:got_lo12:gNandIDBResBlkNum]
19756         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
19757         ldrb    w1, [x1]
19758         strh    w1, [x0,26]
19759 .L2689:
19760         adrp    x0, .LC72
19761         adrp    x1, .LC73
19762         add     x1, x1, :lo12:.LC73
19763         add     x0, x0, :lo12:.LC72
19764         mov     w19, 1
19765         bl      printk
19766         adrp    x0, :got:gNandPhyInfo
19767         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
19768         bl      FtlConstantsInit
19769         bl      FtlVariablesInit
19770         adrp    x0, :got:c_ftl_nand_max_sys_blks
19771         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_sys_blks]
19772         ldrh    w0, [x0]
19773         bl      FtlFreeSysBlkQueueInit
19774 .L2697:
19775         bl      FtlLoadBbt
19776         cbz     w0, .L2698
19777 .L2718:
19778         bl      FtlLowFormat
19779         cmp     w19, 3
19780         bhi     .L2719
19781         add     w19, w19, 1
19782         b       .L2697
19783 .L2719:
19784         mov     w1, -1
19785         b       .L2687
19786 .L2698:
19787         bl      FtlSysBlkInit
19788         cbnz    w0, .L2718
19789         adrp    x1, :got:gFtlInitStatus
19790         mov     w2, 1
19791         ldr     x1, [x1, #:got_lo12:gFtlInitStatus]
19792         str     w2, [x1]
19793         mov     w1, w0
19794 .L2687:
19795         mov     w0, w1
19796         ldr     x19, [sp,16]
19797         ldp     x29, x30, [sp], 48
19798         ret
19799         .size   FtlReInitForSDUpdata, .-FtlReInitForSDUpdata
19800         .align  2
19801         .global IdBlockReadData
19802         .type   IdBlockReadData, %function
19803 IdBlockReadData:
19804         stp     x29, x30, [sp, -176]!
19805         add     x29, sp, 0
19806         stp     x19, x20, [sp,16]
19807         stp     x23, x24, [sp,48]
19808         mov     w20, w0
19809         adrp    x23, :got:gpNandParaInfo
19810         adrp    x0, :got:gBlockPageAlignSize
19811         stp     x21, x22, [sp,32]
19812         ldr     x21, [x23, #:got_lo12:gpNandParaInfo]
19813         mov     x22, x2
19814         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
19815         stp     x27, x28, [sp,80]
19816         stp     x25, x26, [sp,64]
19817         mov     w27, w1
19818         mov     w1, w20
19819         ldr     w3, [x0]
19820         mov     w2, w27
19821         ldr     x0, [x21]
19822         mov     x26, x23
19823         ldrb    w19, [x0,9]
19824         adrp    x0, .LC118
19825         add     x0, x0, :lo12:.LC118
19826         mul     w19, w3, w19
19827         bl      printk
19828         ldr     x0, [x21]
19829         mov     w5, 4
19830         uxth    w19, w19
19831         mov     w21, 0
19832         adrp    x6, :got:slcPageToMlcPageTbl
19833         adrp    x7, :got:gFlashPageBuffer1
19834         ldrb    w28, [x0,9]
19835         adrp    x8, :got:gNandFlashEccBits
19836         udiv    w0, w20, w19
19837         adrp    x9, :got:gNandFlashIDBEccBits
19838         msub    w19, w0, w19, w20
19839         sub     w4, w20, w19
19840         mul     w3, w19, w28
19841         ubfx    x3, x3, 2, 2
19842 .L2721:
19843         cmp     w21, w27
19844         bcs     .L2723
19845         add     w0, w21, w19
19846         ldr     x1, [x6, #:got_lo12:slcPageToMlcPageTbl]
19847         ubfx    x0, x0, 2, 16
19848         ldr     x25, [x7, #:got_lo12:gFlashPageBuffer1]
19849         sub     w23, w5, w3
19850         add     w3, w3, w4
19851         str     x5, [x29,104]
19852         ldrh    w24, [x1,w0,sxtw 1]
19853         uxth    w23, w23
19854         ldr     x0, [x26, #:got_lo12:gpNandParaInfo]
19855         ldr     x2, [x25]
19856         str     x4, [x29,112]
19857         ldr     x0, [x0]
19858         str     x6, [x29,120]
19859         str     x7, [x29,128]
19860         ldrb    w1, [x0,9]
19861         ldr     x0, [x8, #:got_lo12:gNandFlashEccBits]
19862         str     x8, [x29,152]
19863         str     x9, [x29,168]
19864         ldrb    w10, [x0]
19865         ldr     x0, [x9, #:got_lo12:gNandFlashIDBEccBits]
19866         madd    w24, w24, w28, w3
19867         str     x10, [x29,160]
19868         ldrb    w0, [x0]
19869         str     x2, [x29,136]
19870         str     x1, [x29,144]
19871         bl      FlashBchSel
19872         ldr     x1, [x29,144]
19873         mov     x3, 0
19874         ldr     x2, [x29,136]
19875         mov     w0, 0
19876         udiv    w1, w24, w1
19877         bl      FlashReadPage
19878         ldr     x10, [x29,160]
19879         mov     w0, w10
19880         bl      FlashBchSel
19881         ubfiz   x0, x21, 9, 16
19882         ldr     x1, [x25]
19883         add     x0, x22, x0
19884         mov     w2, 2048
19885         add     w21, w23, w21
19886         bl      ftl_memcpy
19887         uxth    w21, w21
19888         mov     w3, 0
19889         ldr     x5, [x29,104]
19890         ldr     x4, [x29,112]
19891         ldr     x6, [x29,120]
19892         ldr     x7, [x29,128]
19893         ldr     x8, [x29,152]
19894         ldr     x9, [x29,168]
19895         b       .L2721
19896 .L2723:
19897         adrp    x0, .LC119
19898         mov     w1, w20
19899         mov     w2, w27
19900         mov     w3, 0
19901         add     x0, x0, :lo12:.LC119
19902         bl      printk
19903         mov     w0, 0
19904         ldp     x19, x20, [sp,16]
19905         ldp     x21, x22, [sp,32]
19906         ldp     x23, x24, [sp,48]
19907         ldp     x25, x26, [sp,64]
19908         ldp     x27, x28, [sp,80]
19909         ldp     x29, x30, [sp], 176
19910         ret
19911         .size   IdBlockReadData, .-IdBlockReadData
19912         .align  2
19913         .global IDBlockWriteData
19914         .type   IDBlockWriteData, %function
19915 IDBlockWriteData:
19916         stp     x29, x30, [sp, -224]!
19917         add     x29, sp, 0
19918         stp     x21, x22, [sp,32]
19919         stp     x25, x26, [sp,64]
19920         adrp    x21, :got:gpNandParaInfo
19921         mov     w25, w0
19922         adrp    x0, :got:gBlockPageAlignSize
19923         stp     x23, x24, [sp,48]
19924         ldr     x22, [x21, #:got_lo12:gpNandParaInfo]
19925         mov     w24, 0
19926         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
19927         stp     x27, x28, [sp,80]
19928         stp     x19, x20, [sp,16]
19929         mov     w27, w1
19930         mov     x20, x2
19931         ldr     w3, [x0]
19932         mov     w1, w25
19933         ldr     x0, [x22]
19934         mov     w2, w27
19935         add     x28, x29, 160
19936         ldrb    w19, [x0,9]
19937         adrp    x0, .LC120
19938         add     x0, x0, :lo12:.LC120
19939         mul     w19, w3, w19
19940         bl      printk
19941         adrp    x0, :got:gNandPhyInfo
19942         mov     w2, 0
19943         uxth    w19, w19
19944         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
19945         ldrh    w1, [x0,20]
19946         mov     w0, 0
19947         udiv    w1, w25, w1
19948         bl      FlashEraseBlock
19949         udiv    w26, w25, w19
19950         ldr     x0, [x22]
19951         adrp    x5, :got:slcPageToMlcPageTbl
19952         adrp    x6, :got:gNandFlashEccBits
19953         adrp    x7, :got:gNandFlashIDBEccBits
19954         ldrb    w22, [x0,9]
19955         msub    w26, w26, w19, w25
19956         sub     w23, w25, w26
19957 .L2725:
19958         cmp     w24, w27
19959         bcs     .L2731
19960         add     w4, w24, w26
19961         lsr     w4, w4, 2
19962         and     w19, w4, 65535
19963         uxth    w0, w4
19964         cbz     w0, .L2726
19965         ldr     x0, [x5, #:got_lo12:slcPageToMlcPageTbl]
19966         add     w1, w19, 1
19967         str     wzr, [x28,4]
19968         ldrh    w4, [x0,w1,sxtw 1]
19969         sub     w4, w4, #1
19970         lsl     w4, w4, 2
19971         str     w4, [x28]
19972 .L2726:
19973         ldr     x4, [x5, #:got_lo12:slcPageToMlcPageTbl]
19974         ubfiz   x2, x24, 9, 16
19975         ldr     x0, [x6, #:got_lo12:gNandFlashEccBits]
19976         add     x2, x20, x2
19977         str     x5, [x29,104]
19978         add     w24, w24, 4
19979         ldrh    w1, [x4,w19,sxtw 1]
19980         ldrb    w8, [x0]
19981         uxth    w24, w24
19982         ldr     x0, [x7, #:got_lo12:gNandFlashIDBEccBits]
19983         madd    w1, w1, w22, w23
19984         str     x6, [x29,136]
19985         ldrb    w0, [x0]
19986         str     x7, [x29,152]
19987         str     x4, [x29,112]
19988         str     x8, [x29,144]
19989         str     x1, [x29,120]
19990         str     x2, [x29,128]
19991         bl      FlashBchSel
19992         ldr     x0, [x21, #:got_lo12:gpNandParaInfo]
19993         ldr     x1, [x29,120]
19994         ldr     x2, [x29,128]
19995         ldr     x0, [x0]
19996         ldrb    w3, [x0,9]
19997         mov     w0, 0
19998         udiv    w1, w1, w3
19999         mov     x3, x28
20000         bl      FlashProgPage
20001         ldr     x8, [x29,144]
20002         mov     w0, w8
20003         bl      FlashBchSel
20004         udiv    w1, w23, w22
20005         ldr     x4, [x29,112]
20006         mov     w0, 0
20007         ldrh    w2, [x4,w19,sxtw 1]
20008         add     w2, w2, 1
20009         bl      FlashPageProgMsbFFData
20010         ldr     x5, [x29,104]
20011         ldr     x6, [x29,136]
20012         ldr     x7, [x29,152]
20013         b       .L2725
20014 .L2731:
20015         adrp    x0, .LC121
20016         mov     w1, w25
20017         mov     w2, w27
20018         mov     w3, 0
20019         add     x0, x0, :lo12:.LC121
20020         bl      printk
20021         mov     w0, 0
20022         ldp     x19, x20, [sp,16]
20023         ldp     x21, x22, [sp,32]
20024         ldp     x23, x24, [sp,48]
20025         ldp     x25, x26, [sp,64]
20026         ldp     x27, x28, [sp,80]
20027         ldp     x29, x30, [sp], 224
20028         ret
20029         .size   IDBlockWriteData, .-IDBlockWriteData
20030         .align  2
20031         .global write_idblock
20032         .type   write_idblock, %function
20033 write_idblock:
20034         stp     x29, x30, [sp, -112]!
20035         add     x29, sp, 0
20036         stp     x23, x24, [sp,48]
20037         mov     w24, w0
20038         adrp    x0, :got:gpNandParaInfo
20039         stp     x19, x20, [sp,16]
20040         stp     x21, x22, [sp,32]
20041         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
20042         mov     x21, x1
20043         stp     x25, x26, [sp,64]
20044         stp     x27, x28, [sp,80]
20045         mov     w1, 192
20046         mov     x23, x2
20047         ldr     x0, [x0]
20048         movk    w1, 0x240, lsl 16
20049         mov     w2, 6
20050         ldrb    w22, [x0,9]
20051         adrp    x0, :got:gBlockPageAlignSize
20052         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
20053         ldr     w25, [x0]
20054         mov     x0, 59392
20055         movk    x0, 0x3, lsl 16
20056         bl      kmalloc_order
20057         mov     x20, x0
20058         mov     w0, -1
20059         cbz     x20, .L2742
20060         add     w19, w24, 511
20061         lsr     w19, w19, 9
20062         cmp     w19, 255
20063         bhi     .L2734
20064         ubfiz   x0, x19, 9, 23
20065         mov     w2, 256
20066         add     x0, x21, x0
20067         mov     x1, x21
20068         sub     w2, w2, w19
20069         bl      memcpy
20070 .L2734:
20071         add     w19, w19, 128
20072         mov     w0, 256
20073         cmp     w19, 256
20074         adrp    x26, :got:gNandIDBResBlkNum
20075         csel    w19, w19, w0, ls
20076         adrp    x0, .LC122
20077         add     x0, x0, :lo12:.LC122
20078         mov     x1, x23
20079         mov     w2, 4
20080         mov     w3, 5
20081         bl      rknand_print_hex
20082         ldr     x26, [x26, #:got_lo12:gNandIDBResBlkNum]
20083         ldr     w1, [x21,512]
20084         adrp    x0, .LC123
20085         add     x0, x0, :lo12:.LC123
20086         ldrb    w2, [x26]
20087         bl      printk
20088         ldrb    w0, [x26]
20089         ldr     w1, [x21,512]
20090         cmp     w1, w0
20091         bls     .L2735
20092         str     w0, [x21,512]
20093 .L2735:
20094         adrp    x0, .LC124
20095         mov     w2, w24
20096         mul     w22, w22, w25
20097         add     x0, x0, :lo12:.LC124
20098         mov     w1, w19
20099         mov     x28, 0
20100         adrp    x25, .LC125
20101         bl      printk
20102         adrp    x26, .LC126
20103         adrp    x27, .LC127
20104         lsl     w0, w19, 7
20105         uxth    w22, w22
20106         str     w0, [x29,108]
20107         mov     w24, w28
20108         add     x25, x25, :lo12:.LC125
20109         add     x26, x26, :lo12:.LC126
20110         add     x27, x27, :lo12:.LC127
20111 .L2740:
20112         adrp    x0, :got:gNandPhyInfo
20113         ldr     w2, [x23,x28,lsl 2]
20114         mov     w8, w28
20115         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
20116         ldrh    w0, [x0,26]
20117         cmp     w2, w0
20118         bcs     .L2736
20119         adrp    x0, :got:gNandFlashIdbBlockAddr
20120         ldr     x0, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
20121         ldr     w0, [x0]
20122         cmp     w2, w0
20123         bcc     .L2736
20124         mov     w1, 0
20125         mov     x2, 512
20126         mov     x0, x20
20127         str     x8, [x29,96]
20128         bl      memset
20129         ldr     w0, [x23,x28,lsl 2]
20130         mov     w1, w19
20131         mov     x2, x21
20132         mul     w0, w22, w0
20133         bl      IDBlockWriteData
20134         ldr     w0, [x23,x28,lsl 2]
20135         mov     w1, w19
20136         mov     x2, x20
20137         mul     w0, w22, w0
20138         bl      IdBlockReadData
20139         ldr     x8, [x29,96]
20140         mov     x0, 0
20141 .L2737:
20142         ldr     w1, [x29,108]
20143         mov     w3, w0
20144         cmp     w0, w1
20145         bcs     .L2747
20146         ldr     w4, [x20,x0,lsl 2]
20147         mov     x7, x0
20148         add     x0, x0, 1
20149         add     x1, x21, x0, lsl 2
20150         ldr     w5, [x1,-4]
20151         cmp     w4, w5
20152         beq     .L2737
20153         ldr     w2, [x23,x28,lsl 2]
20154         mov     w1, w8
20155         mov     x0, x25
20156         str     x7, [x29,96]
20157         bl      printk
20158         ldr     x7, [x29,96]
20159         mov     x0, x26
20160         mov     w2, 4
20161         mov     w3, 256
20162         and     x4, x7, -256
20163         lsl     x4, x4, 2
20164         str     x4, [x29,96]
20165         add     x1, x21, x4
20166         bl      rknand_print_hex
20167         ldr     x4, [x29,96]
20168         mov     w3, 256
20169         mov     x0, x27
20170         mov     w2, 4
20171         add     x1, x20, x4
20172         bl      rknand_print_hex
20173         mov     x0, x20
20174         mov     w1, 0
20175         mov     x2, 512
20176         bl      memset
20177         ldr     w0, [x23,x28,lsl 2]
20178         mov     w1, 4
20179         mov     x2, x20
20180         mul     w0, w22, w0
20181         bl      IDBlockWriteData
20182         adrp    x0, .LC128
20183         add     x0, x0, :lo12:.LC128
20184         bl      printk
20185         b       .L2736
20186 .L2747:
20187         add     w24, w24, 1
20188 .L2736:
20189         add     x28, x28, 1
20190         cmp     x28, 5
20191         bne     .L2740
20192         mov     x0, x20
20193         bl      kfree
20194         cmp     w24, wzr
20195         csetm   w0, eq
20196 .L2742:
20197         ldp     x19, x20, [sp,16]
20198         ldp     x21, x22, [sp,32]
20199         ldp     x23, x24, [sp,48]
20200         ldp     x25, x26, [sp,64]
20201         ldp     x27, x28, [sp,80]
20202         ldp     x29, x30, [sp], 112
20203         ret
20204         .size   write_idblock, .-write_idblock
20205         .align  2
20206         .global CRC_32
20207         .type   CRC_32, %function
20208 CRC_32:
20209         mov     x2, 0
20210         mov     x4, x0
20211         adrp    x5, :got:gTable_Crc32
20212         mov     w0, w2
20213 .L2749:
20214         cmp     w1, w2
20215         bls     .L2751
20216         ldrb    w3, [x4,x2]
20217         add     x2, x2, 1
20218         ldr     x6, [x5, #:got_lo12:gTable_Crc32]
20219         eor     w3, w3, w0, lsr 24
20220         ldr     w3, [x6,w3,uxtw 2]
20221         eor     w0, w3, w0, lsl 8
20222         b       .L2749
20223 .L2751:
20224         ret
20225         .size   CRC_32, .-CRC_32
20226         .align  2
20227         .type   rknand_sys_storage_ioctl, %function
20228 rknand_sys_storage_ioctl:
20229         sub     sp, sp, #528
20230         stp     x29, x30, [sp, -48]!
20231         add     x29, sp, 0
20232         stp     x19, x20, [sp,16]
20233         stp     x21, x22, [sp,32]
20234         mov     x19, x2
20235         mov     w21, w1
20236         ldr     x20, [x0,208]
20237         mov     w0, 29187
20238         movk    w0, 0x4004, lsl 16
20239         cmp     w1, w0
20240         beq     .L2754
20241         mov     w0, 29187
20242         movk    w0, 0x4004, lsl 16
20243         cmp     w1, w0
20244         bhi     .L2755
20245         mov     w0, 25726
20246         movk    w0, 0x4004, lsl 16
20247         cmp     w1, w0
20248         beq     .L2756
20249         mov     w0, 25726
20250         movk    w0, 0x4004, lsl 16
20251         cmp     w1, w0
20252         bhi     .L2757
20253         mov     w0, 25601
20254         movk    w0, 0x4004, lsl 16
20255         cmp     w1, w0
20256         beq     .L2758
20257         mov     w0, 25601
20258         movk    w0, 0x4004, lsl 16
20259         cmp     w1, w0
20260         bhi     .L2759
20261         mov     w0, 25364
20262         movk    w0, 0x4004, lsl 16
20263         cmp     w1, w0
20264         bne     .L2814
20265         bl      rknand_dev_flush
20266         b       .L2897
20267 .L2759:
20268         mov     w0, 25602
20269         movk    w0, 0x4004, lsl 16
20270         cmp     w1, w0
20271         beq     .L2761
20272         mov     w0, 25603
20273         movk    w0, 0x4004, lsl 16
20274         cmp     w1, w0
20275         beq     .L2762
20276         b       .L2814
20277 .L2757:
20278         mov     w0, 27688
20279         movk    w0, 0x4004, lsl 16
20280         cmp     w1, w0
20281         beq     .L2763
20282         mov     w0, 27688
20283         movk    w0, 0x4004, lsl 16
20284         cmp     w1, w0
20285         bhi     .L2764
20286         mov     w0, 25727
20287         movk    w0, 0x4004, lsl 16
20288         cmp     w1, w0
20289         beq     .L2765
20290         b       .L2814
20291 .L2764:
20292         mov     w0, 27698
20293         movk    w0, 0x4004, lsl 16
20294         cmp     w1, w0
20295         beq     .L2763
20296         mov     w0, 27708
20297         movk    w0, 0x4004, lsl 16
20298         cmp     w1, w0
20299         beq     .L2763
20300         b       .L2814
20301 .L2755:
20302         mov     w0, 29267
20303         movk    w0, 0x4004, lsl 16
20304         cmp     w1, w0
20305         beq     .L2766
20306         mov     w0, 29267
20307         movk    w0, 0x4004, lsl 16
20308         cmp     w1, w0
20309         bhi     .L2767
20310         mov     w0, 29189
20311         movk    w0, 0x4004, lsl 16
20312         cmp     w1, w0
20313         beq     .L2768
20314         mov     w0, 29189
20315         movk    w0, 0x4004, lsl 16
20316         cmp     w1, w0
20317         bcc     .L2769
20318         mov     w0, 29210
20319         movk    w0, 0x4004, lsl 16
20320         cmp     w1, w0
20321         beq     .L2770
20322         mov     w0, 29266
20323         movk    w0, 0x4004, lsl 16
20324         cmp     w1, w0
20325         beq     .L2771
20326         b       .L2814
20327 .L2767:
20328         mov     w0, 30225
20329         movk    w0, 0x4004, lsl 16
20330         cmp     w1, w0
20331         beq     .L2772
20332         mov     w0, 30225
20333         movk    w0, 0x4004, lsl 16
20334         cmp     w1, w0
20335         bhi     .L2773
20336         mov     w0, 29268
20337         movk    w0, 0x4004, lsl 16
20338         cmp     w1, w0
20339         beq     .L2774
20340         mov     w0, 30224
20341         movk    w0, 0x4004, lsl 16
20342         cmp     w1, w0
20343         beq     .L2775
20344         b       .L2814
20345 .L2773:
20346         mov     w0, 30226
20347         movk    w0, 0x4004, lsl 16
20348         cmp     w1, w0
20349         beq     .L2775
20350         mov     w0, 30227
20351         movk    w0, 0x4004, lsl 16
20352         cmp     w1, w0
20353         beq     .L2772
20354         b       .L2814
20355 .L2769:
20356         adrp    x0, .LC129
20357         add     x0, x0, :lo12:.LC129
20358         bl      printk
20359         mov     x0, sp
20360         and     x0, x0, -16384
20361         ldr     x2, [x0,8]
20362         mov     x0, x19
20363 #APP
20364 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20365         adds x0, x0, 512; ccmp x0, x2, #2, cc; cset x1, ls
20366 // 0 "" 2
20367 #NO_APP
20368         mov     x0, x20
20369         cbz     x1, .L2776
20370         mov     x1, x19
20371         mov     x2, 512
20372         bl      __copy_from_user
20373         cbz     x0, .L2777
20374         b       .L2778
20375 .L2776:
20376         mov     x2, 512
20377 .L2888:
20378         bl      memset
20379 .L2778:
20380         adrp    x0, .LC130
20381         add     x0, x0, :lo12:.LC130
20382         b       .L2901
20383 .L2777:
20384         adrp    x0, .LC131
20385         ldr     w1, [x20]
20386         ldr     w2, [x20,4]
20387         add     x0, x0, :lo12:.LC131
20388         bl      printk
20389         ldr     w21, [x20,4]
20390         cmp     w21, 8
20391         bhi     .L2900
20392         bl      rknand_device_unlock
20393         ldr     w0, [x20]
20394         mov     w1, w21
20395         mov     x2, x20
20396         bl      IdBlockReadData
20397         bl      rknand_device_unlock
20398         mov     x0, sp
20399         and     x0, x0, -16384
20400         ubfiz   x2, x21, 9, 23
20401         ldr     x1, [x0,8]
20402         mov     x0, x19
20403 #APP
20404 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20405         adds x0, x0, x2; ccmp x0, x1, #2, cc; cset x3, ls
20406 // 0 "" 2
20407 #NO_APP
20408         cbz     x3, .L2780
20409         mov     x0, x19
20410         mov     x1, x20
20411         bl      __copy_to_user
20412         mov     x2, x0
20413 .L2780:
20414         cbz     x2, .L2897
20415         adrp    x0, .LC132
20416         add     x0, x0, :lo12:.LC132
20417 .L2901:
20418         bl      printk
20419 .L2900:
20420         mov     x19, -14
20421         b       .L2753
20422 .L2768:
20423         adrp    x0, .LC133
20424         add     x0, x0, :lo12:.LC133
20425         bl      printk
20426         mov     x0, sp
20427         and     x0, x0, -16384
20428         ldr     x2, [x0,8]
20429         mov     x0, x19
20430 #APP
20431 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20432         adds x0, x0, 4096; ccmp x0, x2, #2, cc; cset x1, ls
20433 // 0 "" 2
20434 #NO_APP
20435         mov     x0, x20
20436         cbz     x1, .L2783
20437         mov     x1, x19
20438         mov     x2, 4096
20439         bl      __copy_from_user
20440         cbz     x0, .L2885
20441         b       .L2778
20442 .L2783:
20443         mov     x2, 4096
20444         b       .L2888
20445 .L2885:
20446         ldr     w1, [x20]
20447         adrp    x0, .LC134
20448         ldr     w2, [x20,4]
20449         add     x0, x0, :lo12:.LC134
20450         bl      printk
20451         adrp    x0, :got:g_idb_buffer
20452         mov     x19, x0
20453         ldr     x21, [x0, #:got_lo12:g_idb_buffer]
20454         ldr     x1, [x21]
20455         cbz     x1, .L2786
20456 .L2789:
20457         ldr     w2, [x20,4]
20458         cmp     w2, 4088
20459         bls     .L2787
20460         b       .L2900
20461 .L2786:
20462         mov     w1, 192
20463         mov     x0, 260096
20464         movk    w1, 0x240, lsl 16
20465         mov     w2, 6
20466         bl      kmalloc_order
20467         str     x0, [x21]
20468         cbnz    x0, .L2789
20469         b       .L2900
20470 .L2787:
20471         ldr     w0, [x20]
20472         mov     w1, 55296
20473         movk    w1, 0x3, lsl 16
20474         cmp     w0, w1
20475         bhi     .L2900
20476         ldr     x19, [x19, #:got_lo12:g_idb_buffer]
20477         uxtw    x2, w2
20478         ldr     x1, [x19]
20479         add     x0, x1, x0, uxtw
20480         add     x1, x20, 8
20481         bl      memcpy
20482         b       .L2897
20483 .L2771:
20484         adrp    x0, .LC135
20485         add     x0, x0, :lo12:.LC135
20486         bl      printk
20487         mov     x0, sp
20488         and     x0, x0, -16384
20489         mov     x1, x19
20490         ldr     x2, [x0,8]
20491 #APP
20492 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20493         adds x1, x1, 28; ccmp x1, x2, #2, cc; cset x0, ls
20494 // 0 "" 2
20495 #NO_APP
20496         cbz     x0, .L2790
20497         mov     x0, x20
20498         mov     x1, x19
20499         mov     x2, 28
20500         bl      __copy_from_user
20501         cbz     x0, .L2886
20502         b       .L2778
20503 .L2790:
20504         stp     xzr, xzr, [x20]
20505         str     x0, [x20,16]
20506         str     w0, [x20,24]
20507         b       .L2778
20508 .L2886:
20509         ldr     w1, [x20]
20510         adrp    x0, .LC136
20511         ldr     w2, [x20,4]
20512         add     x0, x0, :lo12:.LC136
20513         bl      printk
20514         ldr     w1, [x20]
20515         mov     w0, 59392
20516         movk    w0, 0x3, lsl 16
20517         cmp     w1, w0
20518         bhi     .L2900
20519         adrp    x21, :got:g_idb_buffer
20520         ldr     x21, [x21, #:got_lo12:g_idb_buffer]
20521         ldr     x0, [x21]
20522         cbz     x0, .L2900
20523         ldr     w22, [x20,4]
20524         bl      CRC_32
20525         mov     x19, -2
20526         cmp     w22, w0
20527         bne     .L2753
20528         bl      rknand_device_unlock
20529         ldr     x1, [x21]
20530         add     x2, x20, 8
20531         ldr     w0, [x20]
20532         bl      write_idblock
20533         bl      rknand_device_unlock
20534         ldr     x0, [x21]
20535         bl      kfree
20536         str     xzr, [x21]
20537         b       .L2897
20538 .L2770:
20539         adrp    x0, .LC137
20540         add     x0, x0, :lo12:.LC137
20541         bl      printk
20542         mov     x0, x20
20543         bl      ReadFlashInfo
20544         mov     x0, sp
20545         and     x0, x0, -16384
20546         ldr     x1, [x0,8]
20547         mov     x0, x19
20548 #APP
20549 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20550         adds x0, x0, 11; ccmp x0, x1, #2, cc; cset x2, ls
20551 // 0 "" 2
20552 #NO_APP
20553         cbz     x2, .L2900
20554         mov     x0, x19
20555         mov     x1, x20
20556         mov     x2, 11
20557         b       .L2889
20558 .L2754:
20559         adrp    x0, .LC138
20560         add     x0, x0, :lo12:.LC138
20561         bl      printk
20562         bl      rknand_device_unlock
20563         bl      FtlReInitForSDUpdata
20564         mov     w21, w0
20565         bl      rknand_device_unlock
20566         cbnz    w21, .L2900
20567         bl      nand_blk_add_whole_disk
20568         bl      rknand_device_unlock
20569         mov     w1, w21
20570         mov     w2, 64
20571         mov     x0, x20
20572         bl      FlashReadFacBbtData
20573         bl      rknand_device_unlock
20574         adrp    x0, .LC139
20575         mov     x1, x20
20576         add     x0, x0, :lo12:.LC139
20577         mov     w2, 4
20578         mov     w3, 8
20579         bl      rknand_print_hex
20580         mov     x0, sp
20581         and     x0, x0, -16384
20582         ldr     x1, [x0,8]
20583         mov     x0, x19
20584 #APP
20585 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20586         adds x0, x0, 64; ccmp x0, x1, #2, cc; cset x2, ls
20587 // 0 "" 2
20588 #NO_APP
20589         cbz     x2, .L2900
20590         mov     x0, x19
20591         mov     x1, x20
20592         mov     x2, 64
20593         b       .L2889
20594 .L2766:
20595         adrp    x0, .LC140
20596         add     x0, x0, :lo12:.LC140
20597         bl      printk
20598         adrp    x0, :got:gpDrmKeyInfo
20599         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20600         ldr     x0, [x0]
20601         ldr     w0, [x0,20]
20602         str     w0, [x20]
20603         mov     x0, sp
20604         and     x0, x0, -16384
20605         ldr     x1, [x0,8]
20606         mov     x0, x19
20607 #APP
20608 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20609         adds x0, x0, 4; ccmp x0, x1, #2, cc; cset x2, ls
20610 // 0 "" 2
20611 #NO_APP
20612         cbz     x2, .L2900
20613         mov     x0, x19
20614         mov     x1, x20
20615         mov     x2, 4
20616         b       .L2889
20617 .L2774:
20618         adrp    x0, .LC141
20619         add     x0, x0, :lo12:.LC141
20620         bl      printk
20621         bl      rknand_device_unlock
20622         mov     w1, 264
20623         mov     w2, 2
20624         mov     x3, x20
20625         mov     w0, 16
20626         bl      FtlRead
20627         bl      rknand_device_unlock
20628         mov     x0, sp
20629         and     x0, x0, -16384
20630         ldr     x1, [x0,8]
20631         mov     x0, x19
20632 #APP
20633 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20634         adds x0, x0, 1024; ccmp x0, x1, #2, cc; cset x2, ls
20635 // 0 "" 2
20636 #NO_APP
20637         cbz     x2, .L2900
20638         mov     x0, x19
20639         mov     x1, x20
20640         mov     x2, 1024
20641         b       .L2889
20642 .L2758:
20643         adrp    x0, .LC142
20644         add     x0, x0, :lo12:.LC142
20645         bl      printk
20646         mov     x0, sp
20647         and     x0, x0, -16384
20648         ldr     x1, [x0,8]
20649         mov     x0, x19
20650 #APP
20651 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20652         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20653 // 0 "" 2
20654 #NO_APP
20655         cbz     x2, .L2793
20656         add     x20, x29, 56
20657         mov     x1, x19
20658         mov     x0, x20
20659         mov     x2, 520
20660         bl      __copy_from_user
20661         cbz     x0, .L2887
20662         b       .L2778
20663 .L2761:
20664         adrp    x0, .LC143
20665         add     x0, x0, :lo12:.LC143
20666         bl      printk
20667         mov     x0, sp
20668         and     x0, x0, -16384
20669         ldr     x1, [x0,8]
20670         mov     x0, x19
20671 #APP
20672 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20673         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20674 // 0 "" 2
20675 #NO_APP
20676         cbnz    x2, .L2902
20677 .L2793:
20678         add     x0, x29, 56
20679         mov     w1, 0
20680         mov     x2, 520
20681         b       .L2888
20682 .L2887:
20683         ldr     w1, [x20]
20684         mov     w0, 21060
20685         movk    w0, 0x4b4d, lsl 16
20686         cmp     w1, w0
20687         beq     .L2795
20688 .L2796:
20689         mov     x19, -1
20690         b       .L2782
20691 .L2795:
20692         ldr     w0, [x20,4]
20693         cmp     w0, 512
20694         bhi     .L2796
20695         adrp    x1, :got:gpDrmKeyInfo
20696         mov     x0, x20
20697         mov     x2, 512
20698         ldr     x1, [x1, #:got_lo12:gpDrmKeyInfo]
20699         ldr     x1, [x1]
20700         bl      memcpy
20701         adrp    x0, :got:SecureBootCheckOK
20702         ldr     x0, [x0, #:got_lo12:SecureBootCheckOK]
20703         ldr     w1, [x0]
20704         mov     w0, 5161
20705         movk    w0, 0xc059, lsl 16
20706         cmp     w1, w0
20707         beq     .L2797
20708         str     wzr, [x20,8]
20709         add     x0, x20, 64
20710         str     wzr, [x20,12]
20711         mov     w1, 0
20712         mov     x2, 128
20713         bl      memset
20714 .L2797:
20715         str     wzr, [x20,16]
20716         add     x0, x20, 256
20717         mov     w1, 0
20718         mov     x2, 256
20719         bl      memset
20720         b       .L2894
20721 .L2902:
20722         add     x20, x29, 56
20723         mov     x1, x19
20724         mov     x0, x20
20725         mov     x2, 520
20726         bl      __copy_from_user
20727         cbnz    x0, .L2778
20728         ldr     w1, [x20]
20729         mov     w0, 21060
20730         movk    w0, 0x4b4d, lsl 16
20731         cmp     w1, w0
20732         bne     .L2796
20733         ldr     w0, [x20,4]
20734         cmp     w0, 512
20735         bhi     .L2796
20736         adrp    x0, :got:SecureBootCheckOK
20737         mov     x19, -2
20738         ldr     x0, [x0, #:got_lo12:SecureBootCheckOK]
20739         ldr     w1, [x0]
20740         mov     w0, 5161
20741         movk    w0, 0xc059, lsl 16
20742         cmp     w1, w0
20743         bne     .L2753
20744         ldr     w1, [x20,12]
20745         mov     x19, -3
20746         sub     w0, w1, #1
20747         cmp     w0, 127
20748         bhi     .L2753
20749         adrp    x0, :got:gpDrmKeyInfo
20750         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20751         ldr     x19, [x0]
20752         add     x0, x19, 64
20753         str     w1, [x19,12]
20754         add     x1, x20, 64
20755         ldr     w2, [x20,12]
20756         bl      memcpy
20757         mov     w0, 1
20758         mov     x1, x19
20759         b       .L2899
20760 .L2765:
20761         adrp    x0, .LC144
20762         add     x0, x0, :lo12:.LC144
20763         bl      printk
20764         mov     x0, sp
20765         and     x0, x0, -16384
20766         ldr     x1, [x0,8]
20767         mov     x0, x19
20768 #APP
20769 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20770         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20771 // 0 "" 2
20772 #NO_APP
20773         cbz     x2, .L2793
20774         add     x20, x29, 56
20775         mov     x1, x19
20776         mov     x0, x20
20777         mov     x2, 520
20778         bl      __copy_from_user
20779         cbnz    x0, .L2778
20780         ldr     w1, [x20]
20781         mov     w0, 17476
20782         movk    w0, 0x4253, lsl 16
20783         cmp     w1, w0
20784         bne     .L2796
20785         ldr     w0, [x20,4]
20786         cmp     w0, 512
20787         bhi     .L2796
20788         adrp    x19, :got:SecureBootEn
20789         ldr     x0, [x19, #:got_lo12:SecureBootEn]
20790         ldr     w0, [x0]
20791         cbnz    w0, .L2798
20792 .L2801:
20793         mov     x19, 0
20794         b       .L2753
20795 .L2798:
20796         adrp    x0, :got:gpBootConfig
20797         mov     w3, 22867
20798         movk    w3, 0x4453, lsl 16
20799         ldr     x1, [x0, #:got_lo12:gpBootConfig]
20800         ldr     x2, [x1]
20801         ldr     w4, [x2]
20802         cmp     w4, w3
20803         beq     .L2799
20804         mov     w3, 22867
20805         movk    w3, 0x4453, lsl 16
20806         str     w3, [x2]
20807         mov     w3, 504
20808         ldr     x2, [x1]
20809         str     w3, [x2,4]
20810         ldr     x1, [x1]
20811         str     wzr, [x1,8]
20812         str     wzr, [x1,12]
20813 .L2799:
20814         ldr     x0, [x0, #:got_lo12:gpBootConfig]
20815         ldr     x1, [x0]
20816         mov     w0, 0
20817         str     wzr, [x1,16]
20818         bl      StorageSysDataStore
20819         adrp    x0, :got:gpDrmKeyInfo
20820         mov     w3, 21060
20821         movk    w3, 0x4b4d, lsl 16
20822         ldr     x1, [x0, #:got_lo12:gpDrmKeyInfo]
20823         ldr     x2, [x1]
20824         ldr     w4, [x2]
20825         cmp     w4, w3
20826         beq     .L2800
20827         mov     w3, 21060
20828         movk    w3, 0x4b4d, lsl 16
20829         str     w3, [x2]
20830         mov     w3, 504
20831         ldr     x2, [x1]
20832         str     w3, [x2,4]
20833         ldr     x1, [x1]
20834         str     wzr, [x1,8]
20835 .L2800:
20836         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20837         mov     w1, 0
20838         mov     x2, 128
20839         ldr     x20, [x0]
20840         add     x0, x20, 64
20841         str     wzr, [x20,12]
20842         bl      memset
20843         mov     w0, 1
20844         mov     x1, x20
20845         bl      StorageSysDataStore
20846         ldr     x19, [x19, #:got_lo12:SecureBootEn]
20847         adrp    x0, :got:SecureBootCheckOK
20848         str     wzr, [x19]
20849         ldr     x0, [x0, #:got_lo12:SecureBootCheckOK]
20850         str     wzr, [x0]
20851         b       .L2897
20852 .L2756:
20853         adrp    x0, .LC145
20854         add     x0, x0, :lo12:.LC145
20855         bl      printk
20856         mov     x0, sp
20857         and     x0, x0, -16384
20858         ldr     x1, [x0,8]
20859         mov     x0, x19
20860 #APP
20861 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20862         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20863 // 0 "" 2
20864 #NO_APP
20865         cbz     x2, .L2793
20866         add     x20, x29, 56
20867         mov     x1, x19
20868         mov     x0, x20
20869         mov     x2, 520
20870         bl      __copy_from_user
20871         cbnz    x0, .L2778
20872         ldr     w2, [x20]
20873         mov     w1, 20037
20874         movk    w1, 0x4253, lsl 16
20875         cmp     w2, w1
20876         bne     .L2796
20877         ldr     w1, [x20,4]
20878         cmp     w1, 512
20879         bhi     .L2796
20880         adrp    x19, :got:SecureBootEn
20881         ldr     x1, [x19, #:got_lo12:SecureBootEn]
20882         ldr     w1, [x1]
20883         cmp     w1, 1
20884         beq     .L2801
20885         adrp    x1, :got:gpBootConfig
20886         mov     w4, 22867
20887         movk    w4, 0x4453, lsl 16
20888         ldr     x2, [x1, #:got_lo12:gpBootConfig]
20889         ldr     x3, [x2]
20890         ldr     w5, [x3]
20891         cmp     w5, w4
20892         beq     .L2802
20893         mov     w4, 22867
20894         movk    w4, 0x4453, lsl 16
20895         str     w4, [x3]
20896         mov     w4, 504
20897         ldr     x3, [x2]
20898         str     w4, [x3,4]
20899         ldr     x2, [x2]
20900         str     w0, [x2,8]
20901         str     w0, [x2,12]
20902 .L2802:
20903         ldr     x1, [x1, #:got_lo12:gpBootConfig]
20904         mov     w0, 1
20905         ldr     x1, [x1]
20906         str     w0, [x1,16]
20907         mov     w0, 0
20908         bl      StorageSysDataStore
20909         adrp    x0, :got:gpDrmKeyInfo
20910         mov     w3, 21060
20911         movk    w3, 0x4b4d, lsl 16
20912         ldr     x1, [x0, #:got_lo12:gpDrmKeyInfo]
20913         ldr     x2, [x1]
20914         ldr     w4, [x2]
20915         cmp     w4, w3
20916         beq     .L2803
20917         mov     w3, 21060
20918         movk    w3, 0x4b4d, lsl 16
20919         str     w3, [x2]
20920         mov     w3, 504
20921         ldr     x2, [x1]
20922         str     w3, [x2,4]
20923         ldr     x1, [x1]
20924         str     wzr, [x1,8]
20925 .L2803:
20926         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20927         mov     w1, 0
20928         mov     x2, 128
20929         ldr     x20, [x0]
20930         add     x0, x20, 64
20931         str     wzr, [x20,12]
20932         bl      memset
20933         mov     w0, 1
20934         mov     x1, x20
20935         bl      StorageSysDataStore
20936         ldr     x19, [x19, #:got_lo12:SecureBootEn]
20937         mov     w0, 1
20938         str     w0, [x19]
20939         b       .L2897
20940 .L2762:
20941         adrp    x0, .LC146
20942         add     x0, x0, :lo12:.LC146
20943         bl      printk
20944         mov     x0, sp
20945         and     x0, x0, -16384
20946         ldr     x1, [x0,8]
20947         mov     x0, x19
20948 #APP
20949 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20950         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20951 // 0 "" 2
20952 #NO_APP
20953         cbz     x2, .L2793
20954         add     x20, x29, 56
20955         mov     x1, x19
20956         mov     x0, x20
20957         mov     x2, 520
20958         bl      __copy_from_user
20959         cbnz    x0, .L2778
20960         ldr     w1, [x20]
20961         mov     w0, 20051
20962         movk    w0, 0x4144, lsl 16
20963         cmp     w1, w0
20964         bne     .L2796
20965         ldr     w2, [x20,4]
20966         cmp     w2, 512
20967         bhi     .L2796
20968         adrp    x1, :got:gSnSectorData
20969         add     x0, x20, 8
20970         uxtw    x2, w2
20971         ldr     x1, [x1, #:got_lo12:gSnSectorData]
20972         b       .L2896
20973 .L2763:
20974         mov     w0, 27698
20975         movk    w0, 0x4004, lsl 16
20976         cmp     w21, w0
20977         bne     .L2804
20978         adrp    x0, .LC147
20979         add     x0, x0, :lo12:.LC147
20980         b       .L2891
20981 .L2804:
20982         mov     w0, 27708
20983         movk    w0, 0x4004, lsl 16
20984         cmp     w21, w0
20985         bne     .L2806
20986         adrp    x0, .LC148
20987         add     x0, x0, :lo12:.LC148
20988         b       .L2891
20989 .L2806:
20990         adrp    x0, .LC149
20991         add     x0, x0, :lo12:.LC149
20992 .L2891:
20993         bl      printk
20994         mov     x0, sp
20995         and     x0, x0, -16384
20996         ldr     x1, [x0,8]
20997         mov     x0, x19
20998 #APP
20999 // 257 "./arch/arm64/include/asm/uaccess.h" 1
21000         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
21001 // 0 "" 2
21002 #NO_APP
21003         cbz     x2, .L2793
21004         add     x20, x29, 56
21005         mov     x1, x19
21006         mov     x0, x20
21007         mov     x2, 520
21008         bl      __copy_from_user
21009         cbnz    x0, .L2778
21010         ldr     w1, [x20]
21011         mov     w0, 17227
21012         movk    w0, 0x4c4f, lsl 16
21013         cmp     w1, w0
21014         bne     .L2900
21015         mov     w0, 27708
21016         movk    w0, 0x4004, lsl 16
21017         cmp     w21, w0
21018         bne     .L2807
21019         adrp    x0, :got:gpDrmKeyInfo
21020         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
21021         ldr     x0, [x0]
21022         ldr     w0, [x0,20]
21023         strb    w0, [x20,8]
21024         str     w0, [x20,4]
21025         mov     x0, sp
21026         and     x0, x0, -16384
21027         ldr     x1, [x0,8]
21028         mov     x0, x19
21029 #APP
21030 // 266 "./arch/arm64/include/asm/uaccess.h" 1
21031         adds x0, x0, 16; ccmp x0, x1, #2, cc; cset x2, ls
21032 // 0 "" 2
21033 #NO_APP
21034         cbz     x2, .L2900
21035         mov     x0, x19
21036         mov     x1, x20
21037         mov     x2, 16
21038         bl      __copy_to_user
21039         cbz     x0, .L2801
21040         b       .L2900
21041 .L2807:
21042         adrp    x2, :got:SecureBootUnlockTryCount
21043         mov     x3, x2
21044         ldr     x19, [x2, #:got_lo12:SecureBootUnlockTryCount]
21045         ldr     w0, [x19]
21046         cmp     w0, 10
21047         bhi     .L2900
21048         adrp    x0, :got:gpDrmKeyInfo
21049         ldr     w1, [x20,4]
21050         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
21051         ldr     x2, [x0]
21052         ldr     w0, [x2,24]
21053         cmp     w0, w1
21054         beq     .L2808
21055         cbz     w0, .L2808
21056         adrp    x0, .LC150
21057         add     x0, x0, :lo12:.LC150
21058         bl      printk
21059         ldr     w0, [x19]
21060         add     w0, w0, 1
21061         str     w0, [x19]
21062         b       .L2900
21063 .L2808:
21064         ldr     x3, [x3, #:got_lo12:SecureBootUnlockTryCount]
21065         mov     w0, 27698
21066         movk    w0, 0x4004, lsl 16
21067         cmp     w21, w0
21068         str     wzr, [x3]
21069         bne     .L2809
21070         str     wzr, [x2,20]
21071         str     wzr, [x2,24]
21072         b       .L2810
21073 .L2809:
21074         mov     w0, 1
21075         str     w1, [x2,24]
21076         str     w0, [x2,20]
21077 .L2810:
21078         mov     w0, 1
21079         mov     x1, x2
21080         mov     x19, -2
21081         bl      StorageSysDataStore
21082         cmn     w0, #1
21083         bne     .L2897
21084         b       .L2782
21085 .L2775:
21086         adrp    x0, .LC151
21087         add     x0, x0, :lo12:.LC151
21088         bl      printk
21089         mov     x0, sp
21090         and     x0, x0, -16384
21091         ldr     x1, [x0,8]
21092         mov     x0, x19
21093 #APP
21094 // 257 "./arch/arm64/include/asm/uaccess.h" 1
21095         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
21096 // 0 "" 2
21097 #NO_APP
21098         cbz     x2, .L2793
21099         add     x20, x29, 56
21100         mov     x1, x19
21101         mov     x0, x20
21102         mov     x2, 520
21103         bl      __copy_from_user
21104         cbnz    x0, .L2778
21105         ldr     w1, [x20]
21106         mov     w0, 17750
21107         movk    w0, 0x444e, lsl 16
21108         cmp     w1, w0
21109         bne     .L2796
21110         ldr     w2, [x20,4]
21111         cmp     w2, 504
21112         bhi     .L2796
21113         mov     w0, 30224
21114         uxtw    x2, w2
21115         movk    w0, 0x4004, lsl 16
21116         cmp     w21, w0
21117         add     x0, x20, 8
21118         bne     .L2811
21119         adrp    x1, :got:gpVendor0Info
21120         ldr     x1, [x1, #:got_lo12:gpVendor0Info]
21121         b       .L2892
21122 .L2811:
21123         adrp    x1, :got:gpVendor1Info
21124         ldr     x1, [x1, #:got_lo12:gpVendor1Info]
21125 .L2892:
21126         ldr     x1, [x1]
21127         add     x1, x1, 8
21128 .L2896:
21129         bl      memcpy
21130 .L2894:
21131         mov     x0, sp
21132         and     x0, x0, -16384
21133         ldr     x1, [x0,8]
21134         mov     x0, x19
21135 #APP
21136 // 266 "./arch/arm64/include/asm/uaccess.h" 1
21137         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
21138 // 0 "" 2
21139 #NO_APP
21140         cbz     x2, .L2900
21141         mov     x0, x19
21142         mov     x1, x20
21143         mov     x2, 520
21144 .L2889:
21145         bl      __copy_to_user
21146         cbnz    x0, .L2900
21147         b       .L2897
21148 .L2772:
21149         adrp    x0, .LC152
21150         add     x0, x0, :lo12:.LC152
21151         bl      printk
21152         mov     x0, sp
21153         and     x0, x0, -16384
21154         ldr     x1, [x0,8]
21155         mov     x0, x19
21156 #APP
21157 // 257 "./arch/arm64/include/asm/uaccess.h" 1
21158         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
21159 // 0 "" 2
21160 #NO_APP
21161         cbz     x2, .L2793
21162         add     x20, x29, 56
21163         mov     x1, x19
21164         mov     x0, x20
21165         mov     x2, 520
21166         bl      __copy_from_user
21167         cbnz    x0, .L2778
21168         ldr     w1, [x20]
21169         mov     w0, 17750
21170         movk    w0, 0x444e, lsl 16
21171         cmp     w1, w0
21172         bne     .L2796
21173         ldr     w2, [x20,4]
21174         cmp     w2, 504
21175         bhi     .L2796
21176         mov     w0, 30225
21177         add     w2, w2, 8
21178         movk    w0, 0x4004, lsl 16
21179         cmp     w21, w0
21180         bne     .L2813
21181         adrp    x19, :got:gpVendor0Info
21182         mov     x1, x20
21183         ldr     x19, [x19, #:got_lo12:gpVendor0Info]
21184         ldr     x0, [x19]
21185         bl      memcpy
21186         mov     w0, 2
21187         b       .L2898
21188 .L2813:
21189         adrp    x19, :got:gpVendor1Info
21190         mov     x1, x20
21191         ldr     x19, [x19, #:got_lo12:gpVendor1Info]
21192         ldr     x0, [x19]
21193         bl      memcpy
21194         mov     w0, 3
21195 .L2898:
21196         ldr     x1, [x19]
21197 .L2899:
21198         bl      StorageSysDataStore
21199         uxtw    x19, w0
21200         b       .L2782
21201 .L2897:
21202         mov     x19, 0
21203 .L2782:
21204         adrp    x0, .LC153
21205         mov     x1, x19
21206         add     x0, x0, :lo12:.LC153
21207         bl      printk
21208         b       .L2753
21209 .L2814:
21210         mov     x19, -22
21211 .L2753:
21212         mov     x0, x19
21213         ldp     x19, x20, [sp,16]
21214         ldp     x21, x22, [sp,32]
21215         ldp     x29, x30, [sp], 48
21216         add     sp, sp, 528
21217         ret
21218         .size   rknand_sys_storage_ioctl, .-rknand_sys_storage_ioctl
21219         .align  2
21220         .global rk_ftl_storage_sys_init
21221         .type   rk_ftl_storage_sys_init, %function
21222 rk_ftl_storage_sys_init:
21223         adrp    x0, :got:g_idb_buffer
21224         stp     x29, x30, [sp, -80]!
21225         add     x29, sp, 0
21226         ldr     x0, [x0, #:got_lo12:g_idb_buffer]
21227         stp     x19, x20, [sp,16]
21228         stp     x21, x22, [sp,32]
21229         stp     x23, x24, [sp,48]
21230         str     x25, [sp,64]
21231         adrp    x21, :got:gpBootConfig
21232         str     xzr, [x0]
21233         adrp    x0, :got:gLoaderBootInfo
21234         adrp    x20, :got:gpVendor0Info
21235         adrp    x19, :got:gpVendor1Info
21236         ldr     x21, [x21, #:got_lo12:gpBootConfig]
21237         ldr     x0, [x0, #:got_lo12:gLoaderBootInfo]
21238         ldr     x1, [x0]
21239         adrp    x0, :got:gpDrmKeyInfo
21240         str     x1, [x21]
21241         add     x2, x1, 512
21242         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
21243         str     x2, [x0]
21244         add     x2, x1, 1024
21245         add     x1, x1, 1536
21246         ldr     x0, [x20, #:got_lo12:gpVendor0Info]
21247         str     x2, [x0]
21248         mov     w2, 512
21249         ldr     x0, [x19, #:got_lo12:gpVendor1Info]
21250         str     x1, [x0]
21251         adrp    x0, :got:gSnSectorData
21252         ldr     x0, [x0, #:got_lo12:gSnSectorData]
21253         bl      ftl_memcpy
21254         adrp    x1, :got:SecureBootEn
21255         ldr     x0, [x21]
21256         adrp    x3, :got:SecureBootCheckOK
21257         mov     x25, x1
21258         mov     x24, x3
21259         ldr     x22, [x1, #:got_lo12:SecureBootEn]
21260         ldr     w2, [x0,16]
21261         ldr     w23, [x0,508]
21262         str     w2, [x22]
21263         ldr     x2, [x3, #:got_lo12:SecureBootCheckOK]
21264         str     wzr, [x2]
21265         adrp    x2, :got:SecureBootUnlockTryCount
21266         ldr     x2, [x2, #:got_lo12:SecureBootUnlockTryCount]
21267         str     wzr, [x2]
21268         cbz     w23, .L2905
21269         mov     w1, 508
21270         bl      JSHash
21271         cmp     w23, w0
21272         beq     .L2905
21273         ldr     x0, [x21]
21274         str     wzr, [x22]
21275         str     wzr, [x0,16]
21276         adrp    x0, .LC154
21277         add     x0, x0, :lo12:.LC154
21278         bl      printk
21279 .L2905:
21280         ldr     x1, [x25, #:got_lo12:SecureBootEn]
21281         ldr     w0, [x1]
21282         cbz     w0, .L2907
21283         ldr     x0, [x24, #:got_lo12:SecureBootCheckOK]
21284         mov     w1, 5161
21285         movk    w1, 0xc059, lsl 16
21286         str     w1, [x0]
21287 .L2907:
21288         ldr     x20, [x20, #:got_lo12:gpVendor0Info]
21289         mov     w0, 2
21290         ldr     x1, [x20]
21291         bl      StorageSysDataLoad
21292         ldr     x19, [x19, #:got_lo12:gpVendor1Info]
21293         mov     w0, 3
21294         ldr     x1, [x19]
21295         bl      StorageSysDataLoad
21296         adrp    x0, .LANCHOR3
21297         add     x0, x0, :lo12:.LANCHOR3
21298         bl      misc_register
21299         ldr     x25, [sp,64]
21300         ldp     x19, x20, [sp,16]
21301         ldp     x21, x22, [sp,32]
21302         ldp     x23, x24, [sp,48]
21303         ldp     x29, x30, [sp], 80
21304         ret
21305         .size   rk_ftl_storage_sys_init, .-rk_ftl_storage_sys_init
21306         .align  2
21307         .global StorageSysDataDeInit
21308         .type   StorageSysDataDeInit, %function
21309 StorageSysDataDeInit:
21310         stp     x29, x30, [sp, -16]!
21311         adrp    x0, .LANCHOR3
21312         add     x29, sp, 0
21313         add     x0, x0, :lo12:.LANCHOR3
21314         bl      misc_deregister
21315         mov     w0, 0
21316         ldp     x29, x30, [sp], 16
21317         ret
21318         .size   StorageSysDataDeInit, .-StorageSysDataDeInit
21319         .global rknand_sys_storage_fops
21320         .global gTable_Crc32
21321         .global SecureBootUnlockTryCount
21322         .global SecureBootCheckOK
21323         .global SecureBootEn
21324         .global gpVendor1Info
21325         .global gpVendor0Info
21326         .global g_idb_buffer
21327         .global gSnSectorData
21328         .global gpDrmKeyInfo
21329         .global gpBootConfig
21330         .global gLoaderBootInfo
21331         .global RK29_NANDC1_REG_BASE
21332         .global RK29_NANDC_REG_BASE
21333         .global gc_ink_free_return_value
21334         .global FtlUpdateVaildLpnCount
21335         .global g_ect_tbl_power_up_flush
21336         .global last_cache_match_count
21337         .global power_up_flag
21338         .global g_LowFormat
21339         .global gFtlInitStatus
21340         .global DeviceCapacity
21341         .global ToshibaRefValue
21342         .global Toshiba15RefValue
21343         .global ToshibaA19RefValue
21344         .global SamsungRefValue
21345         .global refValueDefault
21346         .global FbbtBlk
21347         .global random_seed
21348         .global gNandParaInfo
21349         .global NandFlashParaTbl
21350         .global g_power_lost_recovery_flag
21351         .global c_mlc_erase_count_value
21352         .global g_recovery_ppa_tbl
21353         .global g_recovery_page_min_ver
21354         .global g_recovery_page_num
21355         .global g_cur_erase_blk
21356         .global g_gc_skip_write_count
21357         .global g_gc_head_data_block_count
21358         .global g_gc_head_data_block
21359         .global g_ftl_nand_free_count
21360         .global g_in_swl_replace
21361         .global g_in_gc_progress
21362         .global g_all_blk_used_slc_mode
21363         .global g_max_erase_count
21364         .global g_totle_sys_slc_erase_count
21365         .global g_totle_slc_erase_count
21366         .global g_min_erase_count
21367         .global g_totle_avg_erase_count
21368         .global g_totle_mlc_erase_count
21369         .global g_totle_l2p_write_count
21370         .global g_totle_cache_write_count
21371         .global g_tmp_data_superblock_id
21372         .global g_totle_read_page_count
21373         .global g_totle_discard_page_count
21374         .global g_totle_read_sector
21375         .global g_totle_write_sector
21376         .global g_totle_write_page_count
21377         .global g_totle_gc_page_count
21378         .global g_gc_blk_index
21379         .global g_gc_merge_free_blk_threshold
21380         .global g_gc_free_blk_threshold
21381         .global g_gc_bad_block_temp_tbl
21382         .global g_gc_bad_block_gc_index
21383         .global g_gc_bad_block_temp_num
21384         .global g_gc_next_blk_1
21385         .global g_gc_next_blk
21386         .global g_gc_cur_blk_max_valid_pages
21387         .global g_gc_cur_blk_valid_pages
21388         .global g_gc_page_offset
21389         .global g_gc_blk_num
21390         .global p_gc_blk_tbl
21391         .global p_gc_page_info
21392         .global g_sys_ext_data
21393         .global g_sys_save_data
21394         .global gp_last_act_superblock
21395         .global g_gc_superblock
21396         .global g_gc_temp_superblock
21397         .global g_buffer_superblock
21398         .global g_active_superblock
21399         .global g_num_data_superblocks
21400         .global g_num_free_superblocks
21401         .global p_data_block_list_tail
21402         .global p_data_block_list_head
21403         .global p_free_data_block_list_head
21404         .global p_data_block_list_table
21405         .global g_l2p_last_update_region_id
21406         .global p_l2p_map_buf
21407         .global p_l2p_ram_map
21408         .global g_totle_vendor_block
21409         .global p_vendor_region_ppn_table
21410         .global p_vendor_block_ver_table
21411         .global p_vendor_block_valid_page_count
21412         .global p_vendor_block_table
21413         .global g_totle_map_block
21414         .global p_map_region_ppn_table
21415         .global p_map_block_ver_table
21416         .global p_map_block_valid_page_count
21417         .global p_map_block_table
21418         .global p_valid_page_count_check_table
21419         .global p_valid_page_count_table
21420         .global g_totle_swl_count
21421         .global p_swl_mul_table
21422         .global p_erase_count_table
21423         .global g_ect_tbl_info_size
21424         .global gp_ect_tbl_info
21425         .global g_gc_num_req
21426         .global c_gc_page_buf_num
21427         .global gp_gc_page_buf_info
21428         .global p_gc_data_buf
21429         .global p_gc_spare_buf
21430         .global p_io_spare_buf
21431         .global p_io_data_buf_1
21432         .global p_io_data_buf_0
21433         .global p_sys_spare_buf
21434         .global p_vendor_data_buf
21435         .global p_sys_data_buf_1
21436         .global p_sys_data_buf
21437         .global g_wr_page_num
21438         .global req_wr_io
21439         .global c_wr_page_buf_num
21440         .global p_wr_io_data_buf
21441         .global p_wr_io_spare_buf
21442         .global p_plane_order_table
21443         .global g_req_cache
21444         .global req_gc_dst
21445         .global req_gc
21446         .global req_erase
21447         .global req_prgm
21448         .global req_read
21449         .global req_sys
21450         .global gVendorBlkInfo
21451         .global gL2pMapInfo
21452         .global gSysFreeQueue
21453         .global gSysInfo
21454         .global gBbtInfo
21455         .global g_inkDie_check_enable
21456         .global g_SlcPartLbaEndSector
21457         .global g_MaxLbn
21458         .global g_VaildLpn
21459         .global g_MaxLpn
21460         .global g_MaxLbaSector
21461         .global g_GlobalDataVersion
21462         .global g_GlobalSysVersion
21463         .global ftl_gc_temp_power_lost_recovery_flag
21464         .global c_ftl_nand_max_data_blks
21465         .global c_ftl_nand_data_op_blks_per_plane
21466         .global c_ftl_nand_data_blks_per_plane
21467         .global c_ftl_nand_max_sys_blks
21468         .global c_ftl_nand_init_sys_blks_per_plane
21469         .global c_ftl_nand_sys_blks_per_plane
21470         .global c_ftl_nand_max_vendor_blks
21471         .global c_ftl_nand_max_map_blks
21472         .global c_ftl_nand_map_blks_per_plane
21473         .global c_ftl_nand_vendor_region_num
21474         .global c_ftl_nand_l2pmap_ram_region_num
21475         .global c_ftl_nand_map_region_num
21476         .global c_ftl_nand_totle_phy_blks
21477         .global c_ftl_nand_reserved_blks
21478         .global c_ftl_nand_byte_pre_oob
21479         .global c_ftl_nand_byte_pre_page
21480         .global c_ftl_nand_sec_pre_page_shift
21481         .global c_ftl_nand_sec_pre_page
21482         .global c_ftl_nand_page_pre_super_blk
21483         .global c_ftl_nand_page_pre_slc_blk
21484         .global c_ftl_nand_page_pre_blk
21485         .global c_ftl_nand_bbm_buf_size
21486         .global c_ftl_nand_ext_blk_pre_plane
21487         .global c_ftl_nand_blk_pre_plane
21488         .global c_ftl_nand_planes_num
21489         .global c_ftl_nand_blks_per_die_shift
21490         .global c_ftl_nand_blks_per_die
21491         .global c_ftl_nand_planes_per_die
21492         .global c_ftl_nand_die_num
21493         .global c_ftl_nand_type
21494         .global gMasterTempBuf
21495         .global gMasterInfo
21496         .global gNandcDumpWriteEn
21497         .global gToggleModeClkDiv
21498         .global gBootDdrMode
21499         .global gNandcEccBits
21500         .global gpNandc1
21501         .global gpNandc
21502         .global gNandcVer
21503         .global gNandChipMap
21504         .global gNandIDataBuf
21505         .global FlashDdrTunningReadCount
21506         .global gNandPhyInfo
21507         .global gFlashProgCheckSpareBuffer
21508         .global gFlashProgCheckBuffer
21509         .global gFlashSpareBuffer
21510         .global gFlashPageBuffer1
21511         .global gFlashPageBuffer0
21512         .global gpFlashSaveInfo
21513         .global gReadRetryInfo
21514         .global gpNandParaInfo
21515         .global gNandOptPara
21516         .global g_slc2KBNand
21517         .global g_maxRetryCount
21518         .global g_maxRegNum
21519         .global g_retryMode
21520         .global gNandIDBResBlkNumSaveInFlash
21521         .global gNandIDBResBlkNum
21522         .global gNandFlashResEndPageAddr
21523         .global gNandFlashInfoBlockAddr
21524         .global gNandFlashIdbBlockAddr
21525         .global gNandFlashInfoBlockEcc
21526         .global gNandFlashIDBEccBits
21527         .global gNandFlashEccBits
21528         .global gNandRandomizer
21529         .global gBlockPageAlignSize
21530         .global gTotleBlock
21531         .global gNandMaxChip
21532         .global gNandMaxDie
21533         .global gFlashInterfaceMode
21534         .global gFlashOnfiModeEn
21535         .global gFlashToggleModeEn
21536         .global gFlashSdrModeEn
21537         .global gMultiPageProgEn
21538         .global gMultiPageReadEn
21539         .global gpReadRetrial
21540         .global mlcPageToSlcPageTbl
21541         .global slcPageToMlcPageTbl
21542         .global DieAddrs
21543         .global gDieOp
21544         .global DieCsIndex
21545         .global IDByte
21546         .global read_retry_cur_offset
21547         .global gNandc1_enable
21548         .section        .rodata
21549         .align  3
21550 .LANCHOR1 = . + 0
21551         .type   __func__.18558, %object
21552         .size   __func__.18558, 11
21553 __func__.18558:
21554         .string "FtlMemInit"
21555         .zero   5
21556         .type   __func__.19412, %object
21557         .size   __func__.19412, 21
21558 __func__.19412:
21559         .string "FtlVpcCheckAndModify"
21560         .section        .data.rel.local,"aw",%progbits
21561         .align  3
21562         .type   rknand_sys_storage_fops, %object
21563         .size   rknand_sys_storage_fops, 216
21564 rknand_sys_storage_fops:
21565         .zero   64
21566         .xword  rknand_sys_storage_ioctl
21567         .xword  rknand_sys_storage_ioctl
21568         .zero   8
21569         .xword  rknand_sys_storage_open
21570         .zero   8
21571         .xword  rknand_sys_storage_release
21572         .zero   104
21573         .data
21574         .align  3
21575 .LANCHOR2 = . + 0
21576         .type   NandOptPara, %object
21577         .size   NandOptPara, 128
21578 NandOptPara:
21579         .byte   1
21580         .byte   0
21581         .byte   49
21582         .byte   63
21583         .byte   0
21584         .byte   49
21585         .byte   -128
21586         .byte   21
21587         .byte   0
21588         .byte   50
21589         .byte   17
21590         .byte   -128
21591         .byte   112
21592         .byte   120
21593         .byte   120
21594         .byte   3
21595         .byte   1
21596         .byte   0
21597         .zero   14
21598         .byte   2
21599         .byte   0
21600         .byte   49
21601         .byte   63
21602         .byte   0
21603         .byte   49
21604         .byte   -128
21605         .byte   21
21606         .byte   0
21607         .byte   0
21608         .byte   17
21609         .byte   -127
21610         .byte   112
21611         .byte   -15
21612         .byte   -14
21613         .byte   0
21614         .byte   0
21615         .byte   0
21616         .zero   14
21617         .byte   3
21618         .byte   0
21619         .byte   49
21620         .byte   63
21621         .byte   0
21622         .byte   49
21623         .byte   -128
21624         .byte   21
21625         .byte   96
21626         .byte   96
21627         .byte   17
21628         .byte   -127
21629         .byte   112
21630         .byte   -15
21631         .byte   -14
21632         .byte   0
21633         .byte   0
21634         .byte   0
21635         .zero   14
21636         .byte   4
21637         .byte   0
21638         .byte   49
21639         .byte   63
21640         .byte   0
21641         .byte   49
21642         .byte   -128
21643         .byte   21
21644         .byte   96
21645         .byte   96
21646         .byte   17
21647         .byte   -127
21648         .byte   112
21649         .byte   112
21650         .byte   112
21651         .byte   0
21652         .byte   0
21653         .byte   0
21654         .zero   14
21655         .type   ftl_gc_temp_block_bops_scan_page_addr, %object
21656         .size   ftl_gc_temp_block_bops_scan_page_addr, 2
21657 ftl_gc_temp_block_bops_scan_page_addr:
21658         .hword  -1
21659         .zero   6
21660         .type   gTable_Crc32, %object
21661         .size   gTable_Crc32, 1024
21662 gTable_Crc32:
21663         .word   0
21664         .word   79760823
21665         .word   159521646
21666         .word   222500569
21667         .word   319043292
21668         .word   398801771
21669         .word   445001138
21670         .word   507977733
21671         .word   638086584
21672         .word   583622671
21673         .word   797603542
21674         .word   726367073
21675         .word   890002276
21676         .word   835540691
21677         .word   1015955466
21678         .word   944721341
21679         .word   1276173168
21680         .word   1221711559
21681         .word   1167245342
21682         .word   1096011177
21683         .word   1595207084
21684         .word   1540743195
21685         .word   1452734146
21686         .word   1381497717
21687         .word   1780004552
21688         .word   1859763071
21689         .word   1671081382
21690         .word   1734058001
21691         .word   2031910932
21692         .word   2111671715
21693         .word   1889442682
21694         .word   1952421581
21695         .word   -1742620960
21696         .word   -1662993577
21697         .word   -1851544178
21698         .word   -1788698567
21699         .word   -1960476612
21700         .word   -1880846965
21701         .word   -2102944942
21702         .word   -2040097051
21703         .word   -1104553128
21704         .word   -1159145745
21705         .word   -1213480906
21706         .word   -1284846207
21707         .word   -1389499004
21708         .word   -1444093901
21709         .word   -1531971862
21710         .word   -1603339427
21711         .word   -734958192
21712         .word   -789553113
21713         .word   -575441154
21714         .word   -646808759
21715         .word   -952804532
21716         .word   -1007397125
21717         .word   -826851294
21718         .word   -898216555
21719         .word   -231145432
21720         .word   -151515745
21721         .word   -71623866
21722         .word   -8775951
21723         .word   -516081932
21724         .word   -436454589
21725         .word   -390124134
21726         .word   -327278547
21727         .word   880959607
21728         .word   809725376
21729         .word   1023441689
21730         .word   968980142
21731         .word   663115435
21732         .word   591878940
21733         .word   772033989
21734         .word   717570162
21735         .word   311037391
21736         .word   374014072
21737         .word   453514913
21738         .word   533273366
21739         .word   26098451
21740         .word   89077412
21741         .word   135012477
21742         .word   214773194
21743         .word   2022882055
21744         .word   2085861040
21745         .word   1896915049
21746         .word   1976675806
21747         .word   1805028827
21748         .word   1868005484
21749         .word   1645516469
21750         .word   1725274882
21751         .word   1587205823
21752         .word   1515969288
21753         .word   1461243345
21754         .word   1406779494
21755         .word   1302257763
21756         .word   1231023572
21757         .word   1142749965
21758         .word   1088288442
21759         .word   -1398548841
21760         .word   -1469916384
21761         .word   -1524511239
21762         .word   -1579106226
21763         .word   -1079517109
21764         .word   -1150882308
21765         .word   -1239024859
21766         .word   -1293617518
21767         .word   -1968456913
21768         .word   -1905609064
21769         .word   -2094423999
21770         .word   -2014794250
21771         .word   -1716548109
21772         .word   -1653702588
21773         .word   -1876060515
21774         .word   -1796433110
21775         .word   -525136409
21776         .word   -462290864
21777         .word   -382658935
21778         .word   -303031490
21779         .word   -206095557
21780         .word   -143247732
21781         .word   -97181611
21782         .word   -17551902
21783         .word   -960798625
21784         .word   -1032163864
21785         .word   -818316495
21786         .word   -872909178
21787         .word   -708880765
21788         .word   -780248268
21789         .word   -599962131
21790         .word   -654557094
21791         .word   1761919214
21792         .word   1841679705
21793         .word   1619450752
21794         .word   1682429495
21795         .word   2046883378
21796         .word   2126642053
21797         .word   1937960284
21798         .word   2000937195
21799         .word   1326230870
21800         .word   1271767265
21801         .word   1183757880
21802         .word   1112521615
21803         .word   1544067978
21804         .word   1489606205
21805         .word   1435140324
21806         .word   1363905875
21807         .word   622074782
21808         .word   567612969
21809         .word   748028144
21810         .word   676793671
21811         .word   907029826
21812         .word   852566261
21813         .word   1066546732
21814         .word   995310491
21815         .word   52196902
21816         .word   131955601
21817         .word   178154824
21818         .word   241131775
21819         .word   270024954
21820         .word   349785421
21821         .word   429546388
21822         .word   492525091
21823         .word   -249203186
21824         .word   -169575495
21825         .word   -123245216
21826         .word   -60399401
21827         .word   -501137198
21828         .word   -421507739
21829         .word   -341615684
21830         .word   -278768117
21831         .word   -684909642
21832         .word   -739502591
21833         .word   -558956328
21834         .word   -630321809
21835         .word   -1003934358
21836         .word   -1058529059
21837         .word   -844417532
21838         .word   -915784781
21839         .word   -1120555650
21840         .word   -1175150391
21841         .word   -1263028720
21842         .word   -1334395993
21843         .word   -1372480606
21844         .word   -1427073515
21845         .word   -1481408308
21846         .word   -1552773765
21847         .word   -1690451770
21848         .word   -1610822287
21849         .word   -1832920152
21850         .word   -1770072545
21851         .word   -2009467366
21852         .word   -1929839699
21853         .word   -2118390412
21854         .word   -2055544637
21855         .word   1569104025
21856         .word   1497869614
21857         .word   1409596407
21858         .word   1355134528
21859         .word   1317180997
21860         .word   1245944818
21861         .word   1191218475
21862         .word   1136754844
21863         .word   2072956193
21864         .word   2135933078
21865         .word   1913443919
21866         .word   1993202680
21867         .word   1753938941
21868         .word   1816917578
21869         .word   1627971731
21870         .word   1707732260
21871         .word   295074793
21872         .word   358053470
21873         .word   403988615
21874         .word   483749168
21875         .word   43142453
21876         .word   106119298
21877         .word   185620059
21878         .word   265378796
21879         .word   933107281
21880         .word   861871078
21881         .word   1042025791
21882         .word   987562120
21883         .word   614080653
21884         .word   542846266
21885         .word   756562915
21886         .word   702101076
21887         .word   -978905479
21888         .word   -1050272818
21889         .word   -869987049
21890         .word   -924581728
21891         .word   -693952347
21892         .word   -765317870
21893         .word   -551470133
21894         .word   -606062980
21895         .word   -475038783
21896         .word   -412191114
21897         .word   -366124881
21898         .word   -286495464
21899         .word   -257209059
21900         .word   -194363222
21901         .word   -114731405
21902         .word   -35103804
21903         .word   -1984443127
21904         .word   -1921597250
21905         .word   -2143955353
21906         .word   -2064327728
21907         .word   -1699480619
21908         .word   -1636632990
21909         .word   -1825447749
21910         .word   -1745818356
21911         .word   -1346395983
21912         .word   -1417761530
21913         .word   -1505903649
21914         .word   -1560496536
21915         .word   -1128556947
21916         .word   -1199924262
21917         .word   -1254519549
21918         .word   -1309114188
21919         .type   power_up_flag, %object
21920         .size   power_up_flag, 4
21921 power_up_flag:
21922         .word   1
21923         .type   gFtlInitStatus, %object
21924         .size   gFtlInitStatus, 4
21925 gFtlInitStatus:
21926         .word   -1
21927         .type   ToshibaRefValue, %object
21928         .size   ToshibaRefValue, 8
21929 ToshibaRefValue:
21930         .byte   0
21931         .byte   4
21932         .byte   124
21933         .byte   120
21934         .byte   116
21935         .byte   8
21936         .byte   12
21937         .byte   112
21938         .type   Toshiba15RefValue, %object
21939         .size   Toshiba15RefValue, 95
21940 Toshiba15RefValue:
21941         .byte   4
21942         .byte   5
21943         .byte   6
21944         .byte   7
21945         .byte   13
21946         .byte   0
21947         .byte   0
21948         .byte   0
21949         .byte   0
21950         .byte   0
21951         .byte   0
21952         .byte   0
21953         .byte   0
21954         .byte   0
21955         .byte   0
21956         .byte   2
21957         .byte   4
21958         .byte   2
21959         .byte   0
21960         .byte   0
21961         .byte   8
21962         .byte   8
21963         .byte   0
21964         .byte   0
21965         .byte   0
21966         .byte   124
21967         .byte   0
21968         .byte   124
21969         .byte   124
21970         .byte   0
21971         .byte   122
21972         .byte   0
21973         .byte   122
21974         .byte   122
21975         .byte   0
21976         .byte   11
21977         .byte   126
21978         .byte   118
21979         .byte   116
21980         .byte   0
21981         .byte   120
21982         .byte   2
21983         .byte   120
21984         .byte   122
21985         .byte   0
21986         .byte   126
21987         .byte   4
21988         .byte   126
21989         .byte   122
21990         .byte   0
21991         .byte   16
21992         .byte   118
21993         .byte   114
21994         .byte   112
21995         .byte   0
21996         .byte   118
21997         .byte   4
21998         .byte   118
21999         .byte   120
22000         .byte   0
22001         .byte   4
22002         .byte   4
22003         .byte   4
22004         .byte   118
22005         .byte   0
22006         .byte   2
22007         .byte   0
22008         .byte   126
22009         .byte   124
22010         .byte   0
22011         .byte   6
22012         .byte   10
22013         .byte   6
22014         .byte   2
22015         .byte   0
22016         .byte   116
22017         .byte   124
22018         .byte   116
22019         .byte   118
22020         .byte   0
22021         .byte   4
22022         .byte   4
22023         .byte   124
22024         .byte   126
22025         .byte   0
22026         .byte   0
22027         .byte   124
22028         .byte   120
22029         .byte   120
22030         .byte   0
22031         .byte   124
22032         .byte   118
22033         .byte   116
22034         .byte   114
22035         .byte   0
22036         .zero   1
22037         .type   ToshibaA19RefValue, %object
22038         .size   ToshibaA19RefValue, 45
22039 ToshibaA19RefValue:
22040         .byte   4
22041         .byte   5
22042         .byte   6
22043         .byte   7
22044         .byte   13
22045         .byte   0
22046         .byte   0
22047         .byte   0
22048         .byte   0
22049         .byte   0
22050         .byte   4
22051         .byte   4
22052         .byte   124
22053         .byte   126
22054         .byte   0
22055         .byte   0
22056         .byte   124
22057         .byte   120
22058         .byte   120
22059         .byte   0
22060         .byte   124
22061         .byte   118
22062         .byte   116
22063         .byte   114
22064         .byte   0
22065         .byte   8
22066         .byte   8
22067         .byte   0
22068         .byte   0
22069         .byte   0
22070         .byte   11
22071         .byte   126
22072         .byte   118
22073         .byte   116
22074         .byte   0
22075         .byte   16
22076         .byte   118
22077         .byte   114
22078         .byte   112
22079         .byte   0
22080         .byte   2
22081         .byte   0
22082         .byte   126
22083         .byte   124
22084         .byte   0
22085         .zero   3
22086         .type   SamsungRefValue, %object
22087         .size   SamsungRefValue, 64
22088 SamsungRefValue:
22089         .byte   -89
22090         .byte   -92
22091         .byte   -91
22092         .byte   -90
22093         .byte   0
22094         .byte   0
22095         .byte   0
22096         .byte   0
22097         .byte   5
22098         .byte   10
22099         .byte   0
22100         .byte   0
22101         .byte   40
22102         .byte   0
22103         .byte   -20
22104         .byte   -40
22105         .byte   -19
22106         .byte   -11
22107         .byte   -19
22108         .byte   -26
22109         .byte   10
22110         .byte   15
22111         .byte   5
22112         .byte   0
22113         .byte   15
22114         .byte   10
22115         .byte   -5
22116         .byte   -20
22117         .byte   -24
22118         .byte   -17
22119         .byte   -24
22120         .byte   -36
22121         .byte   -15
22122         .byte   -5
22123         .byte   -2
22124         .byte   -16
22125         .byte   10
22126         .byte   0
22127         .byte   -5
22128         .byte   -20
22129         .byte   -48
22130         .byte   -30
22131         .byte   -48
22132         .byte   -62
22133         .byte   20
22134         .byte   15
22135         .byte   -5
22136         .byte   -20
22137         .byte   -24
22138         .byte   -5
22139         .byte   -24
22140         .byte   -36
22141         .byte   30
22142         .byte   20
22143         .byte   -5
22144         .byte   -20
22145         .byte   -5
22146         .byte   -1
22147         .byte   -5
22148         .byte   -8
22149         .byte   7
22150         .byte   12
22151         .byte   2
22152         .byte   0
22153         .type   refValueDefault, %object
22154         .size   refValueDefault, 28
22155 refValueDefault:
22156         .byte   0
22157         .byte   0
22158         .byte   0
22159         .byte   0
22160         .byte   0
22161         .byte   6
22162         .byte   10
22163         .byte   6
22164         .byte   0
22165         .byte   -3
22166         .byte   -7
22167         .byte   -8
22168         .byte   0
22169         .byte   -6
22170         .byte   -13
22171         .byte   -15
22172         .byte   0
22173         .byte   -11
22174         .byte   -20
22175         .byte   -23
22176         .byte   0
22177         .byte   0
22178         .byte   -26
22179         .byte   -30
22180         .byte   0
22181         .byte   0
22182         .byte   -32
22183         .byte   -37
22184         .zero   4
22185         .type   random_seed, %object
22186         .size   random_seed, 256
22187 random_seed:
22188         .hword  22378
22189         .hword  1512
22190         .hword  25245
22191         .hword  17827
22192         .hword  25756
22193         .hword  19440
22194         .hword  9026
22195         .hword  10030
22196         .hword  29528
22197         .hword  20467
22198         .hword  29676
22199         .hword  24432
22200         .hword  31328
22201         .hword  6872
22202         .hword  13426
22203         .hword  13842
22204         .hword  8783
22205         .hword  1108
22206         .hword  782
22207         .hword  28837
22208         .hword  30729
22209         .hword  9505
22210         .hword  18676
22211         .hword  23085
22212         .hword  18730
22213         .hword  1085
22214         .hword  32609
22215         .hword  14697
22216         .hword  20858
22217         .hword  15170
22218         .hword  30365
22219         .hword  1607
22220         .hword  32298
22221         .hword  4995
22222         .hword  18905
22223         .hword  1976
22224         .hword  9592
22225         .hword  20204
22226         .hword  17443
22227         .hword  13615
22228         .hword  23330
22229         .hword  29369
22230         .hword  13947
22231         .hword  9398
22232         .hword  32398
22233         .hword  8984
22234         .hword  27600
22235         .hword  21785
22236         .hword  6019
22237         .hword  6311
22238         .hword  31598
22239         .hword  30210
22240         .hword  19327
22241         .hword  13896
22242         .hword  11347
22243         .hword  27545
22244         .hword  3107
22245         .hword  26575
22246         .hword  32270
22247         .hword  19852
22248         .hword  20601
22249         .hword  8349
22250         .hword  9290
22251         .hword  29819
22252         .hword  13579
22253         .hword  3661
22254         .hword  28676
22255         .hword  27331
22256         .hword  32574
22257         .hword  8693
22258         .hword  31253
22259         .hword  9081
22260         .hword  5399
22261         .hword  6842
22262         .hword  20087
22263         .hword  5537
22264         .hword  1274
22265         .hword  11617
22266         .hword  9530
22267         .hword  4866
22268         .hword  8035
22269         .hword  23219
22270         .hword  1178
22271         .hword  23272
22272         .hword  7383
22273         .hword  18944
22274         .hword  12488
22275         .hword  12871
22276         .hword  29340
22277         .hword  20532
22278         .hword  11022
22279         .hword  22514
22280         .hword  228
22281         .hword  22363
22282         .hword  24978
22283         .hword  14584
22284         .hword  12138
22285         .hword  3092
22286         .hword  17916
22287         .hword  16863
22288         .hword  14554
22289         .hword  31457
22290         .hword  29474
22291         .hword  25311
22292         .hword  24121
22293         .hword  3684
22294         .hword  28037
22295         .hword  22865
22296         .hword  22839
22297         .hword  25217
22298         .hword  13217
22299         .hword  27186
22300         .hword  14938
22301         .hword  11180
22302         .hword  29754
22303         .hword  24180
22304         .hword  15150
22305         .hword  32455
22306         .hword  20434
22307         .hword  23848
22308         .hword  29983
22309         .hword  16120
22310         .hword  14769
22311         .hword  20041
22312         .hword  29803
22313         .hword  28406
22314         .hword  17598
22315         .hword  28087
22316         .type   gNandParaInfo, %object
22317         .size   gNandParaInfo, 32
22318 gNandParaInfo:
22319         .byte   0
22320         .byte   0
22321         .zero   5
22322         .byte   0
22323         .byte   1
22324         .byte   8
22325         .hword  128
22326         .byte   2
22327         .byte   1
22328         .hword  2048
22329         .hword  0
22330         .byte   1
22331         .byte   0
22332         .byte   24
22333         .byte   32
22334         .byte   1
22335         .byte   0
22336         .byte   1
22337         .byte   0
22338         .byte   0
22339         .zero   5
22340         .type   NandFlashParaTbl, %object
22341         .size   NandFlashParaTbl, 2016
22342 NandFlashParaTbl:
22343         .byte   6
22344         .byte   44
22345         .byte   100
22346         .byte   68
22347         .byte   75
22348         .byte   -87
22349         .byte   0
22350         .byte   4
22351         .byte   1
22352         .byte   16
22353         .hword  256
22354         .byte   2
22355         .byte   2
22356         .hword  2048
22357         .hword  479
22358         .byte   3
22359         .byte   17
22360         .byte   40
22361         .byte   32
22362         .byte   1
22363         .byte   0
22364         .byte   1
22365         .byte   0
22366         .byte   0
22367         .zero   5
22368         .byte   6
22369         .byte   44
22370         .byte   68
22371         .byte   68
22372         .byte   75
22373         .byte   -87
22374         .byte   0
22375         .byte   4
22376         .byte   1
22377         .byte   16
22378         .hword  256
22379         .byte   2
22380         .byte   2
22381         .hword  1064
22382         .hword  479
22383         .byte   3
22384         .byte   17
22385         .byte   40
22386         .byte   32
22387         .byte   1
22388         .byte   0
22389         .byte   1
22390         .byte   0
22391         .byte   0
22392         .zero   5
22393         .byte   6
22394         .byte   44
22395         .byte   104
22396         .byte   4
22397         .byte   74
22398         .byte   -87
22399         .byte   0
22400         .byte   4
22401         .byte   1
22402         .byte   8
22403         .hword  256
22404         .byte   2
22405         .byte   2
22406         .hword  2048
22407         .hword  287
22408         .byte   1
22409         .byte   0
22410         .byte   24
22411         .byte   32
22412         .byte   1
22413         .byte   0
22414         .byte   1
22415         .byte   0
22416         .byte   0
22417         .zero   5
22418         .byte   5
22419         .byte   44
22420         .byte   -120
22421         .byte   4
22422         .byte   75
22423         .byte   -87
22424         .byte   0
22425         .byte   4
22426         .byte   1
22427         .byte   16
22428         .hword  256
22429         .byte   2
22430         .byte   2
22431         .hword  2048
22432         .hword  287
22433         .byte   1
22434         .byte   0
22435         .byte   24
22436         .byte   32
22437         .byte   1
22438         .byte   0
22439         .byte   1
22440         .byte   0
22441         .byte   0
22442         .zero   5
22443         .byte   6
22444         .byte   44
22445         .byte   -88
22446         .byte   5
22447         .byte   -53
22448         .byte   -87
22449         .byte   0
22450         .byte   4
22451         .byte   2
22452         .byte   16
22453         .hword  256
22454         .byte   2
22455         .byte   2
22456         .hword  2048
22457         .hword  287
22458         .byte   1
22459         .byte   0
22460         .byte   24
22461         .byte   32
22462         .byte   1
22463         .byte   0
22464         .byte   1
22465         .byte   0
22466         .byte   0
22467         .zero   5
22468         .byte   6
22469         .byte   44
22470         .byte   104
22471         .byte   4
22472         .byte   70
22473         .byte   -119
22474         .byte   0
22475         .byte   4
22476         .byte   1
22477         .byte   8
22478         .hword  256
22479         .byte   2
22480         .byte   2
22481         .hword  2048
22482         .hword  287
22483         .byte   1
22484         .byte   0
22485         .byte   24
22486         .byte   32
22487         .byte   1
22488         .byte   0
22489         .byte   1
22490         .byte   0
22491         .byte   0
22492         .zero   5
22493         .byte   6
22494         .byte   44
22495         .byte   72
22496         .byte   4
22497         .byte   74
22498         .byte   -91
22499         .byte   0
22500         .byte   4
22501         .byte   1
22502         .byte   8
22503         .hword  256
22504         .byte   2
22505         .byte   2
22506         .hword  1024
22507         .hword  287
22508         .byte   1
22509         .byte   0
22510         .byte   24
22511         .byte   32
22512         .byte   1
22513         .byte   0
22514         .byte   1
22515         .byte   0
22516         .byte   0
22517         .zero   5
22518         .byte   6
22519         .byte   44
22520         .byte   -124
22521         .byte   100
22522         .byte   60
22523         .byte   -91
22524         .byte   0
22525         .byte   4
22526         .byte   1
22527         .byte   32
22528         .hword  512
22529         .byte   2
22530         .byte   2
22531         .hword  1024
22532         .hword  479
22533         .byte   3
22534         .byte   17
22535         .byte   40
22536         .byte   32
22537         .byte   1
22538         .byte   0
22539         .byte   1
22540         .byte   0
22541         .byte   0
22542         .zero   5
22543         .byte   6
22544         .byte   44
22545         .byte   -124
22546         .byte   100
22547         .byte   84
22548         .byte   -87
22549         .byte   0
22550         .byte   4
22551         .byte   1
22552         .byte   32
22553         .hword  512
22554         .byte   2
22555         .byte   2
22556         .hword  1024
22557         .hword  3039
22558         .byte   4
22559         .byte   18
22560         .byte   60
22561         .byte   32
22562         .byte   1
22563         .byte   0
22564         .byte   1
22565         .byte   0
22566         .byte   0
22567         .zero   5
22568         .byte   6
22569         .byte   44
22570         .byte   -41
22571         .byte   -108
22572         .byte   62
22573         .byte   -124
22574         .byte   0
22575         .byte   4
22576         .byte   1
22577         .byte   8
22578         .hword  128
22579         .byte   2
22580         .byte   2
22581         .hword  4096
22582         .hword  279
22583         .byte   1
22584         .byte   0
22585         .byte   24
22586         .byte   32
22587         .byte   1
22588         .byte   0
22589         .byte   1
22590         .byte   0
22591         .byte   0
22592         .zero   5
22593         .byte   6
22594         .byte   44
22595         .byte   72
22596         .byte   4
22597         .byte   70
22598         .byte   -123
22599         .byte   0
22600         .byte   4
22601         .byte   1
22602         .byte   8
22603         .hword  256
22604         .byte   2
22605         .byte   2
22606         .hword  1024
22607         .hword  287
22608         .byte   1
22609         .byte   0
22610         .byte   24
22611         .byte   32
22612         .byte   1
22613         .byte   0
22614         .byte   1
22615         .byte   0
22616         .byte   0
22617         .zero   5
22618         .byte   6
22619         .byte   44
22620         .byte   -120
22621         .byte   5
22622         .byte   -58
22623         .byte   -119
22624         .byte   0
22625         .byte   4
22626         .byte   2
22627         .byte   8
22628         .hword  256
22629         .byte   2
22630         .byte   2
22631         .hword  2048
22632         .hword  287
22633         .byte   1
22634         .byte   0
22635         .byte   24
22636         .byte   32
22637         .byte   1
22638         .byte   0
22639         .byte   1
22640         .byte   0
22641         .byte   0
22642         .zero   5
22643         .byte   5
22644         .byte   44
22645         .byte   -120
22646         .byte   36
22647         .byte   75
22648         .byte   -87
22649         .byte   0
22650         .byte   4
22651         .byte   1
22652         .byte   16
22653         .hword  256
22654         .byte   2
22655         .byte   2
22656         .hword  2048
22657         .hword  287
22658         .byte   1
22659         .byte   0
22660         .byte   24
22661         .byte   32
22662         .byte   1
22663         .byte   0
22664         .byte   1
22665         .byte   0
22666         .byte   0
22667         .zero   5
22668         .byte   6
22669         .byte   44
22670         .byte   104
22671         .byte   0
22672         .byte   39
22673         .byte   -87
22674         .byte   0
22675         .byte   4
22676         .byte   1
22677         .byte   16
22678         .hword  128
22679         .byte   1
22680         .byte   2
22681         .hword  2048
22682         .hword  287
22683         .byte   0
22684         .byte   0
22685         .byte   24
22686         .byte   32
22687         .byte   1
22688         .byte   0
22689         .byte   1
22690         .byte   0
22691         .byte   0
22692         .zero   5
22693         .byte   6
22694         .byte   44
22695         .byte   100
22696         .byte   100
22697         .byte   86
22698         .byte   -91
22699         .byte   0
22700         .byte   4
22701         .byte   1
22702         .byte   24
22703         .hword  512
22704         .byte   2
22705         .byte   2
22706         .hword  700
22707         .hword  479
22708         .byte   4
22709         .byte   18
22710         .byte   60
22711         .byte   32
22712         .byte   1
22713         .byte   0
22714         .byte   1
22715         .byte   0
22716         .byte   0
22717         .zero   5
22718         .byte   6
22719         .byte   44
22720         .byte   -124
22721         .byte   -59
22722         .byte   75
22723         .byte   -87
22724         .byte   0
22725         .byte   4
22726         .byte   2
22727         .byte   16
22728         .hword  256
22729         .byte   2
22730         .byte   2
22731         .hword  2048
22732         .hword  479
22733         .byte   3
22734         .byte   17
22735         .byte   40
22736         .byte   32
22737         .byte   1
22738         .byte   0
22739         .byte   1
22740         .byte   0
22741         .byte   0
22742         .zero   5
22743         .byte   6
22744         .byte   44
22745         .byte   -43
22746         .byte   -47
22747         .byte   -90
22748         .byte   104
22749         .byte   0
22750         .byte   4
22751         .byte   2
22752         .byte   8
22753         .hword  64
22754         .byte   1
22755         .byte   2
22756         .hword  2048
22757         .hword  279
22758         .byte   0
22759         .byte   0
22760         .byte   24
22761         .byte   32
22762         .byte   1
22763         .byte   0
22764         .byte   1
22765         .byte   0
22766         .byte   0
22767         .zero   5
22768         .byte   6
22769         .byte   -83
22770         .byte   -34
22771         .byte   -108
22772         .byte   -46
22773         .byte   4
22774         .byte   67
22775         .byte   2
22776         .byte   1
22777         .byte   16
22778         .hword  256
22779         .byte   2
22780         .byte   2
22781         .hword  2048
22782         .hword  473
22783         .byte   1
22784         .byte   1
22785         .byte   24
22786         .byte   32
22787         .byte   4
22788         .byte   0
22789         .byte   3
22790         .byte   0
22791         .byte   0
22792         .zero   5
22793         .byte   6
22794         .byte   -83
22795         .byte   -41
22796         .byte   -108
22797         .byte   -38
22798         .byte   116
22799         .byte   -61
22800         .byte   2
22801         .byte   1
22802         .byte   16
22803         .hword  256
22804         .byte   2
22805         .byte   2
22806         .hword  1024
22807         .hword  473
22808         .byte   1
22809         .byte   2
22810         .byte   40
22811         .byte   32
22812         .byte   4
22813         .byte   0
22814         .byte   3
22815         .byte   0
22816         .byte   0
22817         .zero   5
22818         .byte   6
22819         .byte   -83
22820         .byte   -41
22821         .byte   -108
22822         .byte   -111
22823         .byte   96
22824         .byte   68
22825         .byte   2
22826         .byte   1
22827         .byte   16
22828         .hword  256
22829         .byte   2
22830         .byte   2
22831         .hword  1046
22832         .hword  473
22833         .byte   1
22834         .byte   3
22835         .byte   40
22836         .byte   32
22837         .byte   4
22838         .byte   1
22839         .byte   3
22840         .byte   0
22841         .byte   0
22842         .zero   5
22843         .byte   6
22844         .byte   -83
22845         .byte   -34
22846         .byte   -108
22847         .byte   -38
22848         .byte   116
22849         .byte   -60
22850         .byte   2
22851         .byte   1
22852         .byte   16
22853         .hword  256
22854         .byte   2
22855         .byte   2
22856         .hword  2090
22857         .hword  473
22858         .byte   1
22859         .byte   4
22860         .byte   40
22861         .byte   32
22862         .byte   4
22863         .byte   1
22864         .byte   3
22865         .byte   0
22866         .byte   0
22867         .zero   5
22868         .byte   6
22869         .byte   -83
22870         .byte   -34
22871         .byte   -108
22872         .byte   -21
22873         .byte   116
22874         .byte   68
22875         .byte   2
22876         .byte   1
22877         .byte   32
22878         .hword  256
22879         .byte   2
22880         .byte   2
22881         .hword  1066
22882         .hword  473
22883         .byte   1
22884         .byte   3
22885         .byte   40
22886         .byte   32
22887         .byte   4
22888         .byte   1
22889         .byte   3
22890         .byte   0
22891         .byte   0
22892         .zero   5
22893         .byte   6
22894         .byte   -83
22895         .byte   -43
22896         .byte   -108
22897         .byte   -38
22898         .byte   116
22899         .byte   -60
22900         .byte   2
22901         .byte   1
22902         .byte   16
22903         .hword  256
22904         .byte   2
22905         .byte   2
22906         .hword  530
22907         .hword  473
22908         .byte   1
22909         .byte   3
22910         .byte   40
22911         .byte   32
22912         .byte   4
22913         .byte   1
22914         .byte   3
22915         .byte   0
22916         .byte   0
22917         .zero   5
22918         .byte   6
22919         .byte   -83
22920         .byte   -41
22921         .byte   -108
22922         .byte   -102
22923         .byte   116
22924         .byte   66
22925         .byte   2
22926         .byte   1
22927         .byte   16
22928         .hword  256
22929         .byte   2
22930         .byte   2
22931         .hword  1024
22932         .hword  281
22933         .byte   1
22934         .byte   0
22935         .byte   24
22936         .byte   32
22937         .byte   4
22938         .byte   0
22939         .byte   3
22940         .byte   0
22941         .byte   0
22942         .zero   5
22943         .byte   6
22944         .byte   -83
22945         .byte   -34
22946         .byte   20
22947         .byte   -89
22948         .byte   66
22949         .byte   74
22950         .byte   2
22951         .byte   1
22952         .byte   32
22953         .hword  256
22954         .byte   2
22955         .byte   2
22956         .hword  1060
22957         .hword  473
22958         .byte   2
22959         .byte   5
22960         .byte   40
22961         .byte   32
22962         .byte   4
22963         .byte   1
22964         .byte   3
22965         .byte   0
22966         .byte   0
22967         .zero   5
22968         .byte   6
22969         .byte   -83
22970         .byte   -41
22971         .byte   20
22972         .byte   -98
22973         .byte   52
22974         .byte   74
22975         .byte   2
22976         .byte   1
22977         .byte   16
22978         .hword  256
22979         .byte   2
22980         .byte   2
22981         .hword  1056
22982         .hword  473
22983         .byte   2
22984         .byte   5
22985         .byte   40
22986         .byte   32
22987         .byte   4
22988         .byte   1
22989         .byte   3
22990         .byte   0
22991         .byte   0
22992         .zero   5
22993         .byte   6
22994         .byte   -83
22995         .byte   -34
22996         .byte   -108
22997         .byte   -89
22998         .byte   66
22999         .byte   72
23000         .byte   2
23001         .byte   1
23002         .byte   32
23003         .hword  256
23004         .byte   2
23005         .byte   2
23006         .hword  1060
23007         .hword  473
23008         .byte   2
23009         .byte   5
23010         .byte   40
23011         .byte   32
23012         .byte   4
23013         .byte   1
23014         .byte   3
23015         .byte   0
23016         .byte   0
23017         .zero   5
23018         .byte   6
23019         .byte   -83
23020         .byte   -34
23021         .byte   20
23022         .byte   -85
23023         .byte   66
23024         .byte   74
23025         .byte   2
23026         .byte   1
23027         .byte   32
23028         .hword  256
23029         .byte   2
23030         .byte   2
23031         .hword  1056
23032         .hword  1497
23033         .byte   2
23034         .byte   6
23035         .byte   40
23036         .byte   32
23037         .byte   3
23038         .byte   1
23039         .byte   3
23040         .byte   0
23041         .byte   0
23042         .zero   5
23043         .byte   6
23044         .byte   -119
23045         .byte   100
23046         .byte   68
23047         .byte   75
23048         .byte   -87
23049         .byte   0
23050         .byte   7
23051         .byte   1
23052         .byte   16
23053         .hword  256
23054         .byte   2
23055         .byte   2
23056         .hword  2048
23057         .hword  479
23058         .byte   3
23059         .byte   17
23060         .byte   40
23061         .byte   32
23062         .byte   1
23063         .byte   0
23064         .byte   1
23065         .byte   0
23066         .byte   0
23067         .zero   5
23068         .byte   6
23069         .byte   -119
23070         .byte   -120
23071         .byte   36
23072         .byte   75
23073         .byte   -87
23074         .byte   -124
23075         .byte   7
23076         .byte   1
23077         .byte   16
23078         .hword  256
23079         .byte   2
23080         .byte   2
23081         .hword  2048
23082         .hword  479
23083         .byte   3
23084         .byte   17
23085         .byte   40
23086         .byte   32
23087         .byte   1
23088         .byte   0
23089         .byte   1
23090         .byte   0
23091         .byte   0
23092         .zero   5
23093         .byte   6
23094         .byte   -119
23095         .byte   -120
23096         .byte   36
23097         .byte   75
23098         .byte   -87
23099         .byte   0
23100         .byte   7
23101         .byte   1
23102         .byte   16
23103         .hword  256
23104         .byte   2
23105         .byte   2
23106         .hword  2048
23107         .hword  279
23108         .byte   1
23109         .byte   0
23110         .byte   24
23111         .byte   32
23112         .byte   1
23113         .byte   0
23114         .byte   1
23115         .byte   0
23116         .byte   0
23117         .zero   5
23118         .byte   6
23119         .byte   -119
23120         .byte   104
23121         .byte   36
23122         .byte   74
23123         .byte   -87
23124         .byte   0
23125         .byte   7
23126         .byte   1
23127         .byte   8
23128         .hword  256
23129         .byte   2
23130         .byte   2
23131         .hword  2048
23132         .hword  279
23133         .byte   1
23134         .byte   0
23135         .byte   24
23136         .byte   32
23137         .byte   1
23138         .byte   0
23139         .byte   1
23140         .byte   0
23141         .byte   0
23142         .zero   5
23143         .byte   6
23144         .byte   -119
23145         .byte   104
23146         .byte   4
23147         .byte   74
23148         .byte   -87
23149         .byte   0
23150         .byte   7
23151         .byte   1
23152         .byte   8
23153         .hword  256
23154         .byte   2
23155         .byte   2
23156         .hword  2048
23157         .hword  279
23158         .byte   1
23159         .byte   0
23160         .byte   24
23161         .byte   32
23162         .byte   1
23163         .byte   0
23164         .byte   1
23165         .byte   0
23166         .byte   0
23167         .zero   5
23168         .byte   6
23169         .byte   -119
23170         .byte   -41
23171         .byte   -108
23172         .byte   62
23173         .byte   -124
23174         .byte   0
23175         .byte   7
23176         .byte   1
23177         .byte   8
23178         .hword  256
23179         .byte   2
23180         .byte   2
23181         .hword  2048
23182         .hword  279
23183         .byte   1
23184         .byte   0
23185         .byte   24
23186         .byte   32
23187         .byte   1
23188         .byte   0
23189         .byte   1
23190         .byte   0
23191         .byte   0
23192         .zero   5
23193         .byte   6
23194         .byte   -119
23195         .byte   104
23196         .byte   4
23197         .byte   70
23198         .byte   -87
23199         .byte   0
23200         .byte   7
23201         .byte   1
23202         .byte   8
23203         .hword  256
23204         .byte   2
23205         .byte   2
23206         .hword  2048
23207         .hword  279
23208         .byte   1
23209         .byte   0
23210         .byte   24
23211         .byte   32
23212         .byte   1
23213         .byte   0
23214         .byte   1
23215         .byte   0
23216         .byte   0
23217         .zero   5
23218         .byte   6
23219         .byte   -104
23220         .byte   -41
23221         .byte   -124
23222         .byte   -109
23223         .byte   114
23224         .byte   87
23225         .byte   1
23226         .byte   1
23227         .byte   32
23228         .hword  256
23229         .byte   2
23230         .byte   1
23231         .hword  1060
23232         .hword  1473
23233         .byte   2
23234         .byte   33
23235         .byte   40
23236         .byte   32
23237         .byte   2
23238         .byte   1
23239         .byte   1
23240         .byte   0
23241         .byte   0
23242         .zero   5
23243         .byte   6
23244         .byte   -104
23245         .byte   -34
23246         .byte   -124
23247         .byte   -109
23248         .byte   114
23249         .byte   87
23250         .byte   1
23251         .byte   1
23252         .byte   32
23253         .hword  256
23254         .byte   2
23255         .byte   1
23256         .hword  2092
23257         .hword  1473
23258         .byte   2
23259         .byte   33
23260         .byte   40
23261         .byte   32
23262         .byte   2
23263         .byte   1
23264         .byte   1
23265         .byte   0
23266         .byte   0
23267         .zero   5
23268         .byte   6
23269         .byte   -104
23270         .byte   58
23271         .byte   -123
23272         .byte   -109
23273         .byte   118
23274         .byte   87
23275         .byte   1
23276         .byte   2
23277         .byte   32
23278         .hword  256
23279         .byte   2
23280         .byte   1
23281         .hword  2092
23282         .hword  1505
23283         .byte   2
23284         .byte   33
23285         .byte   40
23286         .byte   32
23287         .byte   2
23288         .byte   1
23289         .byte   1
23290         .byte   0
23291         .byte   0
23292         .zero   5
23293         .byte   6
23294         .byte   -104
23295         .byte   -43
23296         .byte   -124
23297         .byte   50
23298         .byte   114
23299         .byte   86
23300         .byte   1
23301         .byte   1
23302         .byte   16
23303         .hword  128
23304         .byte   2
23305         .byte   1
23306         .hword  2056
23307         .hword  1473
23308         .byte   2
23309         .byte   33
23310         .byte   40
23311         .byte   32
23312         .byte   2
23313         .byte   1
23314         .byte   1
23315         .byte   0
23316         .byte   0
23317         .zero   5
23318         .byte   6
23319         .byte   -104
23320         .byte   -41
23321         .byte   -108
23322         .byte   50
23323         .byte   118
23324         .byte   86
23325         .byte   1
23326         .byte   1
23327         .byte   16
23328         .hword  128
23329         .byte   2
23330         .byte   2
23331         .hword  2058
23332         .hword  1489
23333         .byte   2
23334         .byte   33
23335         .byte   40
23336         .byte   32
23337         .byte   2
23338         .byte   1
23339         .byte   1
23340         .byte   0
23341         .byte   0
23342         .zero   5
23343         .byte   6
23344         .byte   -104
23345         .byte   -34
23346         .byte   -108
23347         .byte   -126
23348         .byte   118
23349         .byte   86
23350         .byte   1
23351         .byte   1
23352         .byte   16
23353         .hword  256
23354         .byte   2
23355         .byte   2
23356         .hword  2062
23357         .hword  1489
23358         .byte   1
23359         .byte   33
23360         .byte   40
23361         .byte   32
23362         .byte   2
23363         .byte   1
23364         .byte   1
23365         .byte   0
23366         .byte   0
23367         .zero   5
23368         .byte   6
23369         .byte   -104
23370         .byte   -34
23371         .byte   -108
23372         .byte   -109
23373         .byte   118
23374         .byte   80
23375         .byte   1
23376         .byte   1
23377         .byte   32
23378         .hword  256
23379         .byte   2
23380         .byte   2
23381         .hword  1066
23382         .hword  1497
23383         .byte   2
23384         .byte   34
23385         .byte   40
23386         .byte   32
23387         .byte   3
23388         .byte   1
23389         .byte   1
23390         .byte   0
23391         .byte   0
23392         .zero   5
23393         .byte   6
23394         .byte   -104
23395         .byte   58
23396         .byte   -107
23397         .byte   -109
23398         .byte   122
23399         .byte   80
23400         .byte   1
23401         .byte   2
23402         .byte   32
23403         .hword  256
23404         .byte   2
23405         .byte   2
23406         .hword  1066
23407         .hword  1497
23408         .byte   2
23409         .byte   34
23410         .byte   40
23411         .byte   32
23412         .byte   3
23413         .byte   1
23414         .byte   1
23415         .byte   0
23416         .byte   0
23417         .zero   5
23418         .byte   6
23419         .byte   -104
23420         .byte   -41
23421         .byte   -108
23422         .byte   50
23423         .byte   118
23424         .byte   85
23425         .byte   1
23426         .byte   1
23427         .byte   16
23428         .hword  128
23429         .byte   2
23430         .byte   2
23431         .hword  2050
23432         .hword  401
23433         .byte   2
23434         .byte   0
23435         .byte   24
23436         .byte   32
23437         .byte   1
23438         .byte   1
23439         .byte   1
23440         .byte   0
23441         .byte   0
23442         .zero   5
23443         .byte   6
23444         .byte   -104
23445         .byte   -34
23446         .byte   -108
23447         .byte   -109
23448         .byte   118
23449         .byte   87
23450         .byte   1
23451         .byte   1
23452         .byte   32
23453         .hword  256
23454         .byte   2
23455         .byte   2
23456         .hword  1058
23457         .hword  1497
23458         .byte   2
23459         .byte   33
23460         .byte   40
23461         .byte   32
23462         .byte   3
23463         .byte   1
23464         .byte   1
23465         .byte   0
23466         .byte   0
23467         .zero   5
23468         .byte   6
23469         .byte   -104
23470         .byte   -41
23471         .byte   -124
23472         .byte   -109
23473         .byte   114
23474         .byte   80
23475         .byte   1
23476         .byte   1
23477         .byte   32
23478         .hword  256
23479         .byte   2
23480         .byte   1
23481         .hword  1060
23482         .hword  1473
23483         .byte   2
23484         .byte   34
23485         .byte   40
23486         .byte   32
23487         .byte   3
23488         .byte   1
23489         .byte   1
23490         .byte   0
23491         .byte   0
23492         .zero   5
23493         .byte   6
23494         .byte   -104
23495         .byte   -34
23496         .byte   -108
23497         .byte   -109
23498         .byte   118
23499         .byte   81
23500         .byte   1
23501         .byte   1
23502         .byte   32
23503         .hword  256
23504         .byte   2
23505         .byte   2
23506         .hword  1074
23507         .hword  1497
23508         .byte   2
23509         .byte   35
23510         .byte   40
23511         .byte   32
23512         .byte   3
23513         .byte   1
23514         .byte   4
23515         .byte   0
23516         .byte   0
23517         .zero   5
23518         .byte   6
23519         .byte   -104
23520         .byte   58
23521         .byte   -108
23522         .byte   -109
23523         .byte   118
23524         .byte   81
23525         .byte   1
23526         .byte   1
23527         .byte   32
23528         .hword  256
23529         .byte   2
23530         .byte   2
23531         .hword  2106
23532         .hword  1497
23533         .byte   2
23534         .byte   35
23535         .byte   40
23536         .byte   32
23537         .byte   3
23538         .byte   1
23539         .byte   4
23540         .byte   0
23541         .byte   0
23542         .zero   5
23543         .byte   6
23544         .byte   69
23545         .byte   -34
23546         .byte   -108
23547         .byte   -109
23548         .byte   118
23549         .byte   87
23550         .byte   8
23551         .byte   1
23552         .byte   32
23553         .hword  256
23554         .byte   2
23555         .byte   2
23556         .hword  1058
23557         .hword  1497
23558         .byte   2
23559         .byte   66
23560         .byte   40
23561         .byte   32
23562         .byte   3
23563         .byte   1
23564         .byte   1
23565         .byte   0
23566         .byte   0
23567         .zero   5
23568         .byte   6
23569         .byte   69
23570         .byte   -41
23571         .byte   -124
23572         .byte   -109
23573         .byte   114
23574         .byte   87
23575         .byte   8
23576         .byte   1
23577         .byte   32
23578         .hword  256
23579         .byte   2
23580         .byte   1
23581         .hword  1060
23582         .hword  1473
23583         .byte   2
23584         .byte   66
23585         .byte   40
23586         .byte   32
23587         .byte   2
23588         .byte   1
23589         .byte   1
23590         .byte   0
23591         .byte   0
23592         .zero   5
23593         .byte   6
23594         .byte   69
23595         .byte   -34
23596         .byte   -92
23597         .byte   -126
23598         .byte   118
23599         .byte   86
23600         .byte   8
23601         .byte   1
23602         .byte   16
23603         .hword  256
23604         .byte   2
23605         .byte   2
23606         .hword  2082
23607         .hword  473
23608         .byte   1
23609         .byte   65
23610         .byte   40
23611         .byte   32
23612         .byte   3
23613         .byte   1
23614         .byte   1
23615         .byte   0
23616         .byte   0
23617         .zero   5
23618         .byte   6
23619         .byte   69
23620         .byte   -34
23621         .byte   -108
23622         .byte   -109
23623         .byte   118
23624         .byte   80
23625         .byte   8
23626         .byte   1
23627         .byte   32
23628         .hword  256
23629         .byte   2
23630         .byte   2
23631         .hword  1066
23632         .hword  1497
23633         .byte   2
23634         .byte   67
23635         .byte   40
23636         .byte   32
23637         .byte   3
23638         .byte   1
23639         .byte   1
23640         .byte   0
23641         .byte   0
23642         .zero   5
23643         .byte   6
23644         .byte   69
23645         .byte   -41
23646         .byte   -124
23647         .byte   -109
23648         .byte   114
23649         .byte   80
23650         .byte   8
23651         .byte   1
23652         .byte   32
23653         .hword  256
23654         .byte   2
23655         .byte   1
23656         .hword  1060
23657         .hword  1473
23658         .byte   2
23659         .byte   67
23660         .byte   40
23661         .byte   32
23662         .byte   3
23663         .byte   1
23664         .byte   1
23665         .byte   0
23666         .byte   0
23667         .zero   5
23668         .byte   6
23669         .byte   69
23670         .byte   -34
23671         .byte   -92
23672         .byte   -126
23673         .byte   118
23674         .byte   -41
23675         .byte   8
23676         .byte   1
23677         .byte   16
23678         .hword  256
23679         .byte   2
23680         .byte   2
23681         .hword  2090
23682         .hword  1241
23683         .byte   1
23684         .byte   66
23685         .byte   40
23686         .byte   32
23687         .byte   3
23688         .byte   1
23689         .byte   1
23690         .byte   0
23691         .byte   0
23692         .zero   5
23693         .byte   6
23694         .byte   69
23695         .byte   -34
23696         .byte   -124
23697         .byte   -109
23698         .byte   114
23699         .byte   87
23700         .byte   8
23701         .byte   1
23702         .byte   32
23703         .hword  256
23704         .byte   2
23705         .byte   1
23706         .hword  2092
23707         .hword  1473
23708         .byte   2
23709         .byte   66
23710         .byte   40
23711         .byte   32
23712         .byte   3
23713         .byte   1
23714         .byte   1
23715         .byte   0
23716         .byte   0
23717         .zero   5
23718         .byte   6
23719         .byte   69
23720         .byte   58
23721         .byte   -108
23722         .byte   -109
23723         .byte   118
23724         .byte   81
23725         .byte   8
23726         .byte   1
23727         .byte   32
23728         .hword  256
23729         .byte   2
23730         .byte   2
23731         .hword  2106
23732         .hword  1497
23733         .byte   2
23734         .byte   68
23735         .byte   40
23736         .byte   32
23737         .byte   3
23738         .byte   1
23739         .byte   4
23740         .byte   0
23741         .byte   0
23742         .zero   5
23743         .byte   6
23744         .byte   69
23745         .byte   -34
23746         .byte   -108
23747         .byte   -109
23748         .byte   118
23749         .byte   81
23750         .byte   8
23751         .byte   1
23752         .byte   32
23753         .hword  256
23754         .byte   2
23755         .byte   2
23756         .hword  1074
23757         .hword  1497
23758         .byte   2
23759         .byte   68
23760         .byte   40
23761         .byte   32
23762         .byte   3
23763         .byte   1
23764         .byte   4
23765         .byte   0
23766         .byte   0
23767         .zero   5
23768         .byte   6
23769         .byte   -20
23770         .byte   -41
23771         .byte   -108
23772         .byte   126
23773         .byte   100
23774         .byte   68
23775         .byte   0
23776         .byte   1
23777         .byte   16
23778         .hword  128
23779         .byte   2
23780         .byte   2
23781         .hword  2048
23782         .hword  473
23783         .byte   2
23784         .byte   49
23785         .byte   60
23786         .byte   36
23787         .byte   3
23788         .byte   0
23789         .byte   3
23790         .byte   0
23791         .byte   0
23792         .zero   5
23793         .byte   6
23794         .byte   -20
23795         .byte   -34
23796         .byte   -43
23797         .byte   126
23798         .byte   104
23799         .byte   68
23800         .byte   0
23801         .byte   2
23802         .byte   16
23803         .hword  128
23804         .byte   2
23805         .byte   2
23806         .hword  2048
23807         .hword  505
23808         .byte   2
23809         .byte   49
23810         .byte   60
23811         .byte   36
23812         .byte   3
23813         .byte   0
23814         .byte   3
23815         .byte   0
23816         .byte   0
23817         .zero   5
23818         .byte   6
23819         .byte   -20
23820         .byte   -41
23821         .byte   -108
23822         .byte   122
23823         .byte   84
23824         .byte   67
23825         .byte   0
23826         .byte   1
23827         .byte   16
23828         .hword  128
23829         .byte   2
23830         .byte   2
23831         .hword  2076
23832         .hword  409
23833         .byte   2
23834         .byte   0
23835         .byte   40
23836         .byte   36
23837         .byte   3
23838         .byte   1
23839         .byte   3
23840         .byte   0
23841         .byte   0
23842         .zero   5
23843         .byte   6
23844         .byte   -20
23845         .byte   -34
23846         .byte   -43
23847         .byte   122
23848         .byte   88
23849         .byte   67
23850         .byte   0
23851         .byte   2
23852         .byte   16
23853         .hword  128
23854         .byte   2
23855         .byte   2
23856         .hword  2076
23857         .hword  441
23858         .byte   2
23859         .byte   0
23860         .byte   40
23861         .byte   36
23862         .byte   3
23863         .byte   1
23864         .byte   3
23865         .byte   0
23866         .byte   0
23867         .zero   5
23868         .byte   6
23869         .byte   -20
23870         .byte   -43
23871         .byte   -108
23872         .byte   118
23873         .byte   84
23874         .byte   67
23875         .byte   0
23876         .byte   1
23877         .byte   16
23878         .hword  128
23879         .byte   2
23880         .byte   2
23881         .hword  1038
23882         .hword  281
23883         .byte   2
23884         .byte   0
23885         .byte   24
23886         .byte   36
23887         .byte   3
23888         .byte   1
23889         .byte   3
23890         .byte   0
23891         .byte   0
23892         .zero   5
23893         .byte   6
23894         .byte   -20
23895         .byte   -41
23896         .byte   20
23897         .byte   118
23898         .byte   84
23899         .byte   -62
23900         .byte   0
23901         .byte   1
23902         .byte   16
23903         .hword  128
23904         .byte   2
23905         .byte   2
23906         .hword  2076
23907         .hword  1169
23908         .byte   2
23909         .byte   0
23910         .byte   24
23911         .byte   40
23912         .byte   3
23913         .byte   1
23914         .byte   3
23915         .byte   0
23916         .byte   0
23917         .zero   5
23918         .section        .rodata.str1.1,"aMS",%progbits,1
23919 .LC0:
23920         .string "Context allocation failed\n"
23921 .LC1:
23922         .string "phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\n"
23923 .LC2:
23924         .string "FLASH INFO:\n"
23925 .LC3:
23926         .string "FLASH ID: %x\n"
23927 .LC4:
23928         .string "Device Capacity: %d MB\n"
23929 .LC5:
23930         .string "FMWAIT: %x %x %x %x\n"
23931 .LC6:
23932         .string "FTL INFO:\n"
23933 .LC7:
23934         .string "g_MaxLpn = 0x%x\n"
23935 .LC8:
23936         .string "g_VaildLpn = 0x%x\n"
23937 .LC9:
23938         .string "read_page_count = 0x%x\n"
23939 .LC10:
23940         .string "discard_page_count = 0x%x\n"
23941 .LC11:
23942         .string "write_page_count = 0x%x\n"
23943 .LC12:
23944         .string "cache_write_count = 0x%x\n"
23945 .LC13:
23946         .string "l2p_write_count = 0x%x\n"
23947 .LC14:
23948         .string "gc_page_count = 0x%x\n"
23949 .LC15:
23950         .string "totle_write = %d MB\n"
23951 .LC16:
23952         .string "totle_read = %d MB\n"
23953 .LC17:
23954         .string "GSV = 0x%x\n"
23955 .LC18:
23956         .string "GDV = 0x%x\n"
23957 .LC19:
23958         .string "bad blk num = %d %d\n"
23959 .LC20:
23960         .string "free_superblocks = 0x%x\n"
23961 .LC21:
23962         .string "mlc_EC = 0x%x\n"
23963 .LC22:
23964         .string "slc_EC = 0x%x\n"
23965 .LC23:
23966         .string "avg_EC = 0x%x\n"
23967 .LC24:
23968         .string "sys_EC = 0x%x\n"
23969 .LC25:
23970         .string "max_EC = 0x%x\n"
23971 .LC26:
23972         .string "min_EC = 0x%x\n"
23973 .LC27:
23974         .string "PLT = 0x%x\n"
23975 .LC28:
23976         .string "POT = 0x%x\n"
23977 .LC29:
23978         .string "MaxSector = 0x%x\n"
23979 .LC30:
23980         .string "init_sys_blks_pp = 0x%x\n"
23981 .LC31:
23982         .string "sys_blks_pp = 0x%x\n"
23983 .LC32:
23984         .string "free sysblock = 0x%x\n"
23985 .LC33:
23986         .string "data_blks_pp = 0x%x\n"
23987 .LC34:
23988         .string "data_op_blks_pp = 0x%x\n"
23989 .LC35:
23990         .string "max_data_blks = 0x%x\n"
23991 .LC36:
23992         .string "Sys.id = 0x%x\n"
23993 .LC37:
23994         .string "Bbt.id = 0x%x\n"
23995 .LC38:
23996         .string "ACT.page = 0x%x\n"
23997 .LC39:
23998         .string "ACT.plane = 0x%x\n"
23999 .LC40:
24000         .string "ACT.id = 0x%x\n"
24001 .LC41:
24002         .string "ACT.mode = 0x%x\n"
24003 .LC42:
24004         .string "ACT.a_pages = 0x%x\n"
24005 .LC43:
24006         .string "ACT VPC = 0x%x\n"
24007 .LC44:
24008         .string "BUF.page = 0x%x\n"
24009 .LC45:
24010         .string "BUF.plane = 0x%x\n"
24011 .LC46:
24012         .string "BUF.id = 0x%x\n"
24013 .LC47:
24014         .string "BUF.mode = 0x%x\n"
24015 .LC48:
24016         .string "BUF.a_pages = 0x%x\n"
24017 .LC49:
24018         .string "BUF VPC = 0x%x\n"
24019 .LC50:
24020         .string "TMP.page = 0x%x\n"
24021 .LC51:
24022         .string "TMP.plane = 0x%x\n"
24023 .LC52:
24024         .string "TMP.id = 0x%x\n"
24025 .LC53:
24026         .string "TMP.mode = 0x%x\n"
24027 .LC54:
24028         .string "TMP.a_pages = 0x%x\n"
24029 .LC55:
24030         .string "GC.page = 0x%x\n"
24031 .LC56:
24032         .string "GC.plane = 0x%x\n"
24033 .LC57:
24034         .string "GC.id = 0x%x\n"
24035 .LC58:
24036         .string "GC.mode = 0x%x\n"
24037 .LC59:
24038         .string "GC.a_pages = 0x%x\n"
24039 .LC60:
24040         .string "WR_CHK = 0x%x %x %x %x\n"
24041 .LC61:
24042         .string "Read Err Cnt = 0x%x\n"
24043 .LC62:
24044         .string "Prog Err Cnt = 0x%x\n"
24045 .LC63:
24046         .string "gc_free_blk_th= 0x%x\n"
24047 .LC64:
24048         .string "gc_merge_free_blk_th= 0x%x\n"
24049 .LC65:
24050         .string "gc_skip_write_count= 0x%x\n"
24051 .LC66:
24052         .string "gc_blk_index= 0x%x\n"
24053 .LC67:
24054         .string "free min EC= 0x%x\n"
24055 .LC68:
24056         .string "free max EC= 0x%x\n"
24057 .LC69:
24058         .string "GC__SB VPC = 0x%x\n"
24059 .LC70:
24060         .string "%d. [0x%x]=0x%x 0x%x  0x%x\n"
24061 .LC71:
24062         .string "free %d. [0x%x] 0x%x  0x%x\n"
24063 .LC72:
24064         .string "%s\n"
24065 .LC73:
24066         .string "FTL version: 5.0.28 20151015"
24067 .LC74:
24068         .string "GetSwlReplaceBlock min_ec_id =%x %x\n"
24069 .LC75:
24070         .string "GetSwlReplaceBlock %x ,avg = %x max= %x vpc= %x,ec=%x\n"
24071 .LC76:
24072         .string "FtlGcRefreshBlock  0x%x \n"
24073 .LC77:
24074         .string "FtlGcMarkBadPhyBlk %d 0x%x\n"
24075 .LC78:
24076         .string "%s error allocating memory. return -1\n"
24077 .LC79:
24078         .string "%s 0x%x:"
24079 .LC80:
24080         .string "%x "
24081 .LC81:
24082         .string ""
24083 .LC82:
24084         .string "%d statReg->V6.mtrans_cnt=%d flReg.V6.page_num=%d\n"
24085 .LC83:
24086         .string "nandc:"
24087 .LC84:
24088         .string "%d flReg.d32=%x %x\n"
24089 .LC85:
24090         .string "sync para %d\n"
24091 .LC86:
24092         .string "TOG mode Read error %x %x\n"
24093 .LC87:
24094         .string "read retry status %x %x %x\n"
24095 .LC88:
24096         .string "ECC:%d\n"
24097 .LC89:
24098         .string "No.%d FLASH ID:%x %x %x %x %x %x\n"
24099 .LC90:
24100         .string "FlashLoadPhyInfo fail %x!!\n"
24101 .LC91:
24102         .string "ReadRetry pageadd=%x  ecc=%x err=%x\n"
24103 .LC92:
24104         .string "Read pageadd=%x  ecc=%x err=%x\n"
24105 .LC93:
24106         .string "spare:"
24107 .LC94:
24108         .string "FLFB:%d %d\n"
24109 .LC95:
24110         .string "no ect"
24111 .LC96:
24112         .string "prog error: = %x\n"
24113 .LC97:
24114         .string "prog read error: = %x\n"
24115 .LC98:
24116         .string "prog read s error: = %x %x %x\n"
24117 .LC99:
24118         .string "prog read d error: = %x %x %x\n"
24119 .LC100:
24120         .string "FlashMakeFactorBbt %d\n"
24121 .LC101:
24122         .string "bad block:%d %d\n"
24123 .LC102:
24124         .string "FMFB:%d %d\n"
24125 .LC103:
24126         .string "E:bad block:%d\n"
24127 .LC104:
24128         .string "FMFB:Save %d %d\n"
24129 .LC105:
24130         .string "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\n"
24131 .LC106:
24132         .string "FtlBbmTblFlush error:%x\n"
24133 .LC107:
24134         .string "FtlGcFreeBadSuperBlk 0x%x\n"
24135 .LC108:
24136         .string "decrement_vpc_count %x = %d\n"
24137 .LC109:
24138         .string "spuer block %x vpn is 0\n "
24139 .LC110:
24140         .string "...%s enter...\n"
24141 .LC111:
24142         .string "FtlCheckVpc %x = %x  %x\n"
24143 .LC112:
24144         .string "Ftlwrite decrement_vpc_count %x = %d\n"
24145 .LC113:
24146         .string "FtlInit %x\n"
24147 .LC114:
24148         .string "%d GC datablk  = %x vpc %x %x\n"
24149 .LC115:
24150         .string "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\n"
24151 .LC116:
24152         .string "FtlWrite: lpa error:%x %x\n"
24153 .LC117:
24154         .string "BBT:"
24155 .LC118:
24156         .string "IdBlockReadData %x %x\n"
24157 .LC119:
24158         .string "IdBlockReadData %x %x ret= %x\n"
24159 .LC120:
24160         .string "IDBlockWriteData %x %x\n"
24161 .LC121:
24162         .string "IDBlockWriteData %x %x ret= %x\n"
24163 .LC122:
24164         .string "idblk:"
24165 .LC123:
24166         .string "idb reverse %x %x\n"
24167 .LC124:
24168         .string "write_idblock totle_sec %x %x\n"
24169 .LC125:
24170         .string "write and check error:%d idb=%x,offset=%x,r=%x,w=%x \n"
24171 .LC126:
24172         .string "write"
24173 .LC127:
24174         .string "read"
24175 .LC128:
24176         .string "write_idblock error\n"
24177 .LC129:
24178         .string "READ_SECTOR_IO\n"
24179 .LC130:
24180         .string "copy_from_user error \n"
24181 .LC131:
24182         .string "READ_SECTOR_IO %x %x\n"
24183 .LC132:
24184         .string "copy_to_user error\n"
24185 .LC133:
24186         .string "WRITE_SECTOR_IO\n"
24187 .LC134:
24188         .string "WRITE_SECTOR_IO %x %x\n"
24189 .LC135:
24190         .string "END_WRITE_SECTOR_IO\n"
24191 .LC136:
24192         .string "END_WRITE_SECTOR_IO %x %x\n"
24193 .LC137:
24194         .string "GET_FLASH_INFO_IO\n"
24195 .LC138:
24196         .string "GET_BAD_BLOCK_IO\n"
24197 .LC139:
24198         .string "bbt:"
24199 .LC140:
24200         .string "GET_LOCK_FLAG_IO\n"
24201 .LC141:
24202         .string "GET_PUBLIC_KEY_IO\n"
24203 .LC142:
24204         .string "RKNAND_GET_DRM_KEY\n"
24205 .LC143:
24206         .string "RKNAND_STORE_DRM_KEY\n"
24207 .LC144:
24208         .string "RKNAND_DIASBLE_SECURE_BOOT\n"
24209 .LC145:
24210         .string "RKNAND_ENASBLE_SECURE_BOOT\n"
24211 .LC146:
24212         .string "RKNAND_GET_SN_SECTOR\n"
24213 .LC147:
24214         .string "RKNAND_LOADER_UNLOCK\n"
24215 .LC148:
24216         .string "RKNAND_LOADER_STATUS\n"
24217 .LC149:
24218         .string "RKNAND_LOADER_LOCK\n"
24219 .LC150:
24220         .string "LockKey not match %d\n"
24221 .LC151:
24222         .string "RKNAND_GET_VENDOR_SECTOR\n"
24223 .LC152:
24224         .string "RKNAND_STORE_VENDOR_SECTOR\n"
24225 .LC153:
24226         .string "return ret = %lx\n"
24227 .LC154:
24228         .string "secureBootEn check error\n"
24229 .LC155:
24230         .string "rknand_sys_storage"
24231         .bss
24232         .align  3
24233 .LANCHOR0 = . + 0
24234         .type   NANDC_FMCTL, %object
24235         .size   NANDC_FMCTL, 4
24236 NANDC_FMCTL:
24237         .zero   4
24238         .type   NANDC_FMWAIT, %object
24239         .size   NANDC_FMWAIT, 4
24240 NANDC_FMWAIT:
24241         .zero   4
24242         .type   NANDC_FLCTL, %object
24243         .size   NANDC_FLCTL, 4
24244 NANDC_FLCTL:
24245         .zero   4
24246         .type   NANDC_BCHCTL, %object
24247         .size   NANDC_BCHCTL, 4
24248 NANDC_BCHCTL:
24249         .zero   4
24250         .type   NANDC_DLL_CTL_REG0, %object
24251         .size   NANDC_DLL_CTL_REG0, 4
24252 NANDC_DLL_CTL_REG0:
24253         .zero   4
24254         .type   NANDC_DLL_CTL_REG1, %object
24255         .size   NANDC_DLL_CTL_REG1, 4
24256 NANDC_DLL_CTL_REG1:
24257         .zero   4
24258         .type   NANDC_RANDMZ_CFG, %object
24259         .size   NANDC_RANDMZ_CFG, 4
24260 NANDC_RANDMZ_CFG:
24261         .zero   4
24262         .type   NANDC_FMWAIT_SYN, %object
24263         .size   NANDC_FMWAIT_SYN, 4
24264 NANDC_FMWAIT_SYN:
24265         .zero   4
24266         .type   gc_discard_updated, %object
24267         .size   gc_discard_updated, 4
24268 gc_discard_updated:
24269         .zero   4
24270         .type   SecureBootUnlockTryCount, %object
24271         .size   SecureBootUnlockTryCount, 4
24272 SecureBootUnlockTryCount:
24273         .zero   4
24274         .type   SecureBootCheckOK, %object
24275         .size   SecureBootCheckOK, 4
24276 SecureBootCheckOK:
24277         .zero   4
24278         .type   SecureBootEn, %object
24279         .size   SecureBootEn, 4
24280 SecureBootEn:
24281         .zero   4
24282         .type   gpVendor1Info, %object
24283         .size   gpVendor1Info, 8
24284 gpVendor1Info:
24285         .zero   8
24286         .type   gpVendor0Info, %object
24287         .size   gpVendor0Info, 8
24288 gpVendor0Info:
24289         .zero   8
24290         .type   g_idb_buffer, %object
24291         .size   g_idb_buffer, 8
24292 g_idb_buffer:
24293         .zero   8
24294         .type   gSnSectorData, %object
24295         .size   gSnSectorData, 512
24296 gSnSectorData:
24297         .zero   512
24298         .type   gpDrmKeyInfo, %object
24299         .size   gpDrmKeyInfo, 8
24300 gpDrmKeyInfo:
24301         .zero   8
24302         .type   gpBootConfig, %object
24303         .size   gpBootConfig, 8
24304 gpBootConfig:
24305         .zero   8
24306         .type   gLoaderBootInfo, %object
24307         .size   gLoaderBootInfo, 8
24308 gLoaderBootInfo:
24309         .zero   8
24310         .type   RK29_NANDC1_REG_BASE, %object
24311         .size   RK29_NANDC1_REG_BASE, 8
24312 RK29_NANDC1_REG_BASE:
24313         .zero   8
24314         .type   RK29_NANDC_REG_BASE, %object
24315         .size   RK29_NANDC_REG_BASE, 8
24316 RK29_NANDC_REG_BASE:
24317         .zero   8
24318         .type   gc_ink_free_return_value, %object
24319         .size   gc_ink_free_return_value, 2
24320 gc_ink_free_return_value:
24321         .zero   2
24322         .type   FtlUpdateVaildLpnCount, %object
24323         .size   FtlUpdateVaildLpnCount, 2
24324 FtlUpdateVaildLpnCount:
24325         .zero   2
24326         .type   g_ect_tbl_power_up_flush, %object
24327         .size   g_ect_tbl_power_up_flush, 2
24328 g_ect_tbl_power_up_flush:
24329         .zero   2
24330         .zero   2
24331         .type   last_cache_match_count, %object
24332         .size   last_cache_match_count, 4
24333 last_cache_match_count:
24334         .zero   4
24335         .type   g_LowFormat, %object
24336         .size   g_LowFormat, 4
24337 g_LowFormat:
24338         .zero   4
24339         .type   DeviceCapacity, %object
24340         .size   DeviceCapacity, 4
24341 DeviceCapacity:
24342         .zero   4
24343         .zero   4
24344         .type   FbbtBlk, %object
24345         .size   FbbtBlk, 32
24346 FbbtBlk:
24347         .zero   32
24348         .type   g_power_lost_recovery_flag, %object
24349         .size   g_power_lost_recovery_flag, 2
24350 g_power_lost_recovery_flag:
24351         .zero   2
24352         .type   c_mlc_erase_count_value, %object
24353         .size   c_mlc_erase_count_value, 2
24354 c_mlc_erase_count_value:
24355         .zero   2
24356         .zero   4
24357         .type   g_recovery_ppa_tbl, %object
24358         .size   g_recovery_ppa_tbl, 128
24359 g_recovery_ppa_tbl:
24360         .zero   128
24361         .type   g_recovery_page_min_ver, %object
24362         .size   g_recovery_page_min_ver, 4
24363 g_recovery_page_min_ver:
24364         .zero   4
24365         .type   g_recovery_page_num, %object
24366         .size   g_recovery_page_num, 4
24367 g_recovery_page_num:
24368         .zero   4
24369         .type   g_cur_erase_blk, %object
24370         .size   g_cur_erase_blk, 4
24371 g_cur_erase_blk:
24372         .zero   4
24373         .type   g_gc_skip_write_count, %object
24374         .size   g_gc_skip_write_count, 4
24375 g_gc_skip_write_count:
24376         .zero   4
24377         .type   g_gc_head_data_block_count, %object
24378         .size   g_gc_head_data_block_count, 4
24379 g_gc_head_data_block_count:
24380         .zero   4
24381         .type   g_gc_head_data_block, %object
24382         .size   g_gc_head_data_block, 4
24383 g_gc_head_data_block:
24384         .zero   4
24385         .type   g_ftl_nand_free_count, %object
24386         .size   g_ftl_nand_free_count, 4
24387 g_ftl_nand_free_count:
24388         .zero   4
24389         .type   g_in_swl_replace, %object
24390         .size   g_in_swl_replace, 4
24391 g_in_swl_replace:
24392         .zero   4
24393         .type   g_in_gc_progress, %object
24394         .size   g_in_gc_progress, 4
24395 g_in_gc_progress:
24396         .zero   4
24397         .type   g_all_blk_used_slc_mode, %object
24398         .size   g_all_blk_used_slc_mode, 4
24399 g_all_blk_used_slc_mode:
24400         .zero   4
24401         .type   g_max_erase_count, %object
24402         .size   g_max_erase_count, 4
24403 g_max_erase_count:
24404         .zero   4
24405         .type   g_totle_sys_slc_erase_count, %object
24406         .size   g_totle_sys_slc_erase_count, 4
24407 g_totle_sys_slc_erase_count:
24408         .zero   4
24409         .type   g_totle_slc_erase_count, %object
24410         .size   g_totle_slc_erase_count, 4
24411 g_totle_slc_erase_count:
24412         .zero   4
24413         .type   g_min_erase_count, %object
24414         .size   g_min_erase_count, 4
24415 g_min_erase_count:
24416         .zero   4
24417         .type   g_totle_avg_erase_count, %object
24418         .size   g_totle_avg_erase_count, 4
24419 g_totle_avg_erase_count:
24420         .zero   4
24421         .type   g_totle_mlc_erase_count, %object
24422         .size   g_totle_mlc_erase_count, 4
24423 g_totle_mlc_erase_count:
24424         .zero   4
24425         .type   g_totle_l2p_write_count, %object
24426         .size   g_totle_l2p_write_count, 4
24427 g_totle_l2p_write_count:
24428         .zero   4
24429         .type   g_totle_cache_write_count, %object
24430         .size   g_totle_cache_write_count, 4
24431 g_totle_cache_write_count:
24432         .zero   4
24433         .type   g_tmp_data_superblock_id, %object
24434         .size   g_tmp_data_superblock_id, 2
24435 g_tmp_data_superblock_id:
24436         .zero   2
24437         .zero   2
24438         .type   g_totle_read_page_count, %object
24439         .size   g_totle_read_page_count, 4
24440 g_totle_read_page_count:
24441         .zero   4
24442         .type   g_totle_discard_page_count, %object
24443         .size   g_totle_discard_page_count, 4
24444 g_totle_discard_page_count:
24445         .zero   4
24446         .type   g_totle_read_sector, %object
24447         .size   g_totle_read_sector, 4
24448 g_totle_read_sector:
24449         .zero   4
24450         .type   g_totle_write_sector, %object
24451         .size   g_totle_write_sector, 4
24452 g_totle_write_sector:
24453         .zero   4
24454         .type   g_totle_write_page_count, %object
24455         .size   g_totle_write_page_count, 4
24456 g_totle_write_page_count:
24457         .zero   4
24458         .type   g_totle_gc_page_count, %object
24459         .size   g_totle_gc_page_count, 4
24460 g_totle_gc_page_count:
24461         .zero   4
24462         .type   g_gc_blk_index, %object
24463         .size   g_gc_blk_index, 2
24464 g_gc_blk_index:
24465         .zero   2
24466         .type   g_gc_merge_free_blk_threshold, %object
24467         .size   g_gc_merge_free_blk_threshold, 2
24468 g_gc_merge_free_blk_threshold:
24469         .zero   2
24470         .type   g_gc_free_blk_threshold, %object
24471         .size   g_gc_free_blk_threshold, 2
24472 g_gc_free_blk_threshold:
24473         .zero   2
24474         .zero   6
24475         .type   g_gc_bad_block_temp_tbl, %object
24476         .size   g_gc_bad_block_temp_tbl, 34
24477 g_gc_bad_block_temp_tbl:
24478         .zero   34
24479         .type   g_gc_bad_block_gc_index, %object
24480         .size   g_gc_bad_block_gc_index, 2
24481 g_gc_bad_block_gc_index:
24482         .zero   2
24483         .type   g_gc_bad_block_temp_num, %object
24484         .size   g_gc_bad_block_temp_num, 2
24485 g_gc_bad_block_temp_num:
24486         .zero   2
24487         .type   g_gc_next_blk_1, %object
24488         .size   g_gc_next_blk_1, 2
24489 g_gc_next_blk_1:
24490         .zero   2
24491         .type   g_gc_next_blk, %object
24492         .size   g_gc_next_blk, 2
24493 g_gc_next_blk:
24494         .zero   2
24495         .type   g_gc_cur_blk_max_valid_pages, %object
24496         .size   g_gc_cur_blk_max_valid_pages, 2
24497 g_gc_cur_blk_max_valid_pages:
24498         .zero   2
24499         .type   g_gc_cur_blk_valid_pages, %object
24500         .size   g_gc_cur_blk_valid_pages, 2
24501 g_gc_cur_blk_valid_pages:
24502         .zero   2
24503         .type   g_gc_page_offset, %object
24504         .size   g_gc_page_offset, 2
24505 g_gc_page_offset:
24506         .zero   2
24507         .type   g_gc_blk_num, %object
24508         .size   g_gc_blk_num, 2
24509 g_gc_blk_num:
24510         .zero   2
24511         .zero   6
24512         .type   p_gc_blk_tbl, %object
24513         .size   p_gc_blk_tbl, 8
24514 p_gc_blk_tbl:
24515         .zero   8
24516         .type   p_gc_page_info, %object
24517         .size   p_gc_page_info, 8
24518 p_gc_page_info:
24519         .zero   8
24520         .type   g_sys_ext_data, %object
24521         .size   g_sys_ext_data, 512
24522 g_sys_ext_data:
24523         .zero   512
24524         .type   g_sys_save_data, %object
24525         .size   g_sys_save_data, 48
24526 g_sys_save_data:
24527         .zero   48
24528         .type   gp_last_act_superblock, %object
24529         .size   gp_last_act_superblock, 8
24530 gp_last_act_superblock:
24531         .zero   8
24532         .type   g_gc_superblock, %object
24533         .size   g_gc_superblock, 48
24534 g_gc_superblock:
24535         .zero   48
24536         .type   g_gc_temp_superblock, %object
24537         .size   g_gc_temp_superblock, 48
24538 g_gc_temp_superblock:
24539         .zero   48
24540         .type   g_buffer_superblock, %object
24541         .size   g_buffer_superblock, 48
24542 g_buffer_superblock:
24543         .zero   48
24544         .type   g_active_superblock, %object
24545         .size   g_active_superblock, 48
24546 g_active_superblock:
24547         .zero   48
24548         .type   g_num_data_superblocks, %object
24549         .size   g_num_data_superblocks, 2
24550 g_num_data_superblocks:
24551         .zero   2
24552         .type   g_num_free_superblocks, %object
24553         .size   g_num_free_superblocks, 2
24554 g_num_free_superblocks:
24555         .zero   2
24556         .zero   4
24557         .type   p_data_block_list_tail, %object
24558         .size   p_data_block_list_tail, 8
24559 p_data_block_list_tail:
24560         .zero   8
24561         .type   p_data_block_list_head, %object
24562         .size   p_data_block_list_head, 8
24563 p_data_block_list_head:
24564         .zero   8
24565         .type   p_free_data_block_list_head, %object
24566         .size   p_free_data_block_list_head, 8
24567 p_free_data_block_list_head:
24568         .zero   8
24569         .type   p_data_block_list_table, %object
24570         .size   p_data_block_list_table, 8
24571 p_data_block_list_table:
24572         .zero   8
24573         .type   g_l2p_last_update_region_id, %object
24574         .size   g_l2p_last_update_region_id, 2
24575 g_l2p_last_update_region_id:
24576         .zero   2
24577         .zero   6
24578         .type   p_l2p_map_buf, %object
24579         .size   p_l2p_map_buf, 8
24580 p_l2p_map_buf:
24581         .zero   8
24582         .type   p_l2p_ram_map, %object
24583         .size   p_l2p_ram_map, 8
24584 p_l2p_ram_map:
24585         .zero   8
24586         .type   g_totle_vendor_block, %object
24587         .size   g_totle_vendor_block, 2
24588 g_totle_vendor_block:
24589         .zero   2
24590         .zero   6
24591         .type   p_vendor_region_ppn_table, %object
24592         .size   p_vendor_region_ppn_table, 8
24593 p_vendor_region_ppn_table:
24594         .zero   8
24595         .type   p_vendor_block_ver_table, %object
24596         .size   p_vendor_block_ver_table, 8
24597 p_vendor_block_ver_table:
24598         .zero   8
24599         .type   p_vendor_block_valid_page_count, %object
24600         .size   p_vendor_block_valid_page_count, 8
24601 p_vendor_block_valid_page_count:
24602         .zero   8
24603         .type   p_vendor_block_table, %object
24604         .size   p_vendor_block_table, 8
24605 p_vendor_block_table:
24606         .zero   8
24607         .type   g_totle_map_block, %object
24608         .size   g_totle_map_block, 2
24609 g_totle_map_block:
24610         .zero   2
24611         .zero   6
24612         .type   p_map_region_ppn_table, %object
24613         .size   p_map_region_ppn_table, 8
24614 p_map_region_ppn_table:
24615         .zero   8
24616         .type   p_map_block_ver_table, %object
24617         .size   p_map_block_ver_table, 8
24618 p_map_block_ver_table:
24619         .zero   8
24620         .type   p_map_block_valid_page_count, %object
24621         .size   p_map_block_valid_page_count, 8
24622 p_map_block_valid_page_count:
24623         .zero   8
24624         .type   p_map_block_table, %object
24625         .size   p_map_block_table, 8
24626 p_map_block_table:
24627         .zero   8
24628         .type   p_valid_page_count_check_table, %object
24629         .size   p_valid_page_count_check_table, 8
24630 p_valid_page_count_check_table:
24631         .zero   8
24632         .type   p_valid_page_count_table, %object
24633         .size   p_valid_page_count_table, 8
24634 p_valid_page_count_table:
24635         .zero   8
24636         .type   g_totle_swl_count, %object
24637         .size   g_totle_swl_count, 4
24638 g_totle_swl_count:
24639         .zero   4
24640         .zero   4
24641         .type   p_swl_mul_table, %object
24642         .size   p_swl_mul_table, 8
24643 p_swl_mul_table:
24644         .zero   8
24645         .type   p_erase_count_table, %object
24646         .size   p_erase_count_table, 8
24647 p_erase_count_table:
24648         .zero   8
24649         .type   g_ect_tbl_info_size, %object
24650         .size   g_ect_tbl_info_size, 2
24651 g_ect_tbl_info_size:
24652         .zero   2
24653         .zero   6
24654         .type   gp_ect_tbl_info, %object
24655         .size   gp_ect_tbl_info, 8
24656 gp_ect_tbl_info:
24657         .zero   8
24658         .type   g_gc_num_req, %object
24659         .size   g_gc_num_req, 4
24660 g_gc_num_req:
24661         .zero   4
24662         .type   c_gc_page_buf_num, %object
24663         .size   c_gc_page_buf_num, 4
24664 c_gc_page_buf_num:
24665         .zero   4
24666         .type   gp_gc_page_buf_info, %object
24667         .size   gp_gc_page_buf_info, 8
24668 gp_gc_page_buf_info:
24669         .zero   8
24670         .type   p_gc_data_buf, %object
24671         .size   p_gc_data_buf, 8
24672 p_gc_data_buf:
24673         .zero   8
24674         .type   p_gc_spare_buf, %object
24675         .size   p_gc_spare_buf, 8
24676 p_gc_spare_buf:
24677         .zero   8
24678         .type   p_io_spare_buf, %object
24679         .size   p_io_spare_buf, 8
24680 p_io_spare_buf:
24681         .zero   8
24682         .type   p_io_data_buf_1, %object
24683         .size   p_io_data_buf_1, 8
24684 p_io_data_buf_1:
24685         .zero   8
24686         .type   p_io_data_buf_0, %object
24687         .size   p_io_data_buf_0, 8
24688 p_io_data_buf_0:
24689         .zero   8
24690         .type   p_sys_spare_buf, %object
24691         .size   p_sys_spare_buf, 8
24692 p_sys_spare_buf:
24693         .zero   8
24694         .type   p_vendor_data_buf, %object
24695         .size   p_vendor_data_buf, 8
24696 p_vendor_data_buf:
24697         .zero   8
24698         .type   p_sys_data_buf_1, %object
24699         .size   p_sys_data_buf_1, 8
24700 p_sys_data_buf_1:
24701         .zero   8
24702         .type   p_sys_data_buf, %object
24703         .size   p_sys_data_buf, 8
24704 p_sys_data_buf:
24705         .zero   8
24706         .type   g_wr_page_num, %object
24707         .size   g_wr_page_num, 4
24708 g_wr_page_num:
24709         .zero   4
24710         .zero   4
24711         .type   req_wr_io, %object
24712         .size   req_wr_io, 8
24713 req_wr_io:
24714         .zero   8
24715         .type   c_wr_page_buf_num, %object
24716         .size   c_wr_page_buf_num, 4
24717 c_wr_page_buf_num:
24718         .zero   4
24719         .zero   4
24720         .type   p_wr_io_data_buf, %object
24721         .size   p_wr_io_data_buf, 8
24722 p_wr_io_data_buf:
24723         .zero   8
24724         .type   p_wr_io_spare_buf, %object
24725         .size   p_wr_io_spare_buf, 8
24726 p_wr_io_spare_buf:
24727         .zero   8
24728         .type   p_plane_order_table, %object
24729         .size   p_plane_order_table, 32
24730 p_plane_order_table:
24731         .zero   32
24732         .type   g_req_cache, %object
24733         .size   g_req_cache, 8
24734 g_req_cache:
24735         .zero   8
24736         .type   req_gc_dst, %object
24737         .size   req_gc_dst, 8
24738 req_gc_dst:
24739         .zero   8
24740         .type   req_gc, %object
24741         .size   req_gc, 8
24742 req_gc:
24743         .zero   8
24744         .type   req_erase, %object
24745         .size   req_erase, 8
24746 req_erase:
24747         .zero   8
24748         .type   req_prgm, %object
24749         .size   req_prgm, 8
24750 req_prgm:
24751         .zero   8
24752         .type   req_read, %object
24753         .size   req_read, 8
24754 req_read:
24755         .zero   8
24756         .type   req_sys, %object
24757         .size   req_sys, 56
24758 req_sys:
24759         .zero   56
24760         .type   gVendorBlkInfo, %object
24761         .size   gVendorBlkInfo, 64
24762 gVendorBlkInfo:
24763         .zero   64
24764         .type   gL2pMapInfo, %object
24765         .size   gL2pMapInfo, 64
24766 gL2pMapInfo:
24767         .zero   64
24768         .type   gSysFreeQueue, %object
24769         .size   gSysFreeQueue, 2056
24770 gSysFreeQueue:
24771         .zero   2056
24772         .type   gSysInfo, %object
24773         .size   gSysInfo, 12
24774 gSysInfo:
24775         .zero   12
24776         .zero   4
24777         .type   gBbtInfo, %object
24778         .size   gBbtInfo, 96
24779 gBbtInfo:
24780         .zero   96
24781         .type   g_inkDie_check_enable, %object
24782         .size   g_inkDie_check_enable, 4
24783 g_inkDie_check_enable:
24784         .zero   4
24785         .type   g_SlcPartLbaEndSector, %object
24786         .size   g_SlcPartLbaEndSector, 4
24787 g_SlcPartLbaEndSector:
24788         .zero   4
24789         .type   g_MaxLbn, %object
24790         .size   g_MaxLbn, 4
24791 g_MaxLbn:
24792         .zero   4
24793         .type   g_VaildLpn, %object
24794         .size   g_VaildLpn, 4
24795 g_VaildLpn:
24796         .zero   4
24797         .type   g_MaxLpn, %object
24798         .size   g_MaxLpn, 4
24799 g_MaxLpn:
24800         .zero   4
24801         .type   g_MaxLbaSector, %object
24802         .size   g_MaxLbaSector, 4
24803 g_MaxLbaSector:
24804         .zero   4
24805         .type   g_GlobalDataVersion, %object
24806         .size   g_GlobalDataVersion, 4
24807 g_GlobalDataVersion:
24808         .zero   4
24809         .type   g_GlobalSysVersion, %object
24810         .size   g_GlobalSysVersion, 4
24811 g_GlobalSysVersion:
24812         .zero   4
24813         .type   ftl_gc_temp_power_lost_recovery_flag, %object
24814         .size   ftl_gc_temp_power_lost_recovery_flag, 4
24815 ftl_gc_temp_power_lost_recovery_flag:
24816         .zero   4
24817         .type   c_ftl_nand_max_data_blks, %object
24818         .size   c_ftl_nand_max_data_blks, 4
24819 c_ftl_nand_max_data_blks:
24820         .zero   4
24821         .type   c_ftl_nand_data_op_blks_per_plane, %object
24822         .size   c_ftl_nand_data_op_blks_per_plane, 2
24823 c_ftl_nand_data_op_blks_per_plane:
24824         .zero   2
24825         .type   c_ftl_nand_data_blks_per_plane, %object
24826         .size   c_ftl_nand_data_blks_per_plane, 2
24827 c_ftl_nand_data_blks_per_plane:
24828         .zero   2
24829         .type   c_ftl_nand_max_sys_blks, %object
24830         .size   c_ftl_nand_max_sys_blks, 4
24831 c_ftl_nand_max_sys_blks:
24832         .zero   4
24833         .type   c_ftl_nand_init_sys_blks_per_plane, %object
24834         .size   c_ftl_nand_init_sys_blks_per_plane, 4
24835 c_ftl_nand_init_sys_blks_per_plane:
24836         .zero   4
24837         .type   c_ftl_nand_sys_blks_per_plane, %object
24838         .size   c_ftl_nand_sys_blks_per_plane, 4
24839 c_ftl_nand_sys_blks_per_plane:
24840         .zero   4
24841         .type   c_ftl_nand_max_vendor_blks, %object
24842         .size   c_ftl_nand_max_vendor_blks, 2
24843 c_ftl_nand_max_vendor_blks:
24844         .zero   2
24845         .zero   2
24846         .type   c_ftl_nand_max_map_blks, %object
24847         .size   c_ftl_nand_max_map_blks, 4
24848 c_ftl_nand_max_map_blks:
24849         .zero   4
24850         .type   c_ftl_nand_map_blks_per_plane, %object
24851         .size   c_ftl_nand_map_blks_per_plane, 2
24852 c_ftl_nand_map_blks_per_plane:
24853         .zero   2
24854         .type   c_ftl_nand_vendor_region_num, %object
24855         .size   c_ftl_nand_vendor_region_num, 2
24856 c_ftl_nand_vendor_region_num:
24857         .zero   2
24858         .type   c_ftl_nand_l2pmap_ram_region_num, %object
24859         .size   c_ftl_nand_l2pmap_ram_region_num, 2
24860 c_ftl_nand_l2pmap_ram_region_num:
24861         .zero   2
24862         .type   c_ftl_nand_map_region_num, %object
24863         .size   c_ftl_nand_map_region_num, 2
24864 c_ftl_nand_map_region_num:
24865         .zero   2
24866         .type   c_ftl_nand_totle_phy_blks, %object
24867         .size   c_ftl_nand_totle_phy_blks, 4
24868 c_ftl_nand_totle_phy_blks:
24869         .zero   4
24870         .type   c_ftl_nand_reserved_blks, %object
24871         .size   c_ftl_nand_reserved_blks, 2
24872 c_ftl_nand_reserved_blks:
24873         .zero   2
24874         .type   c_ftl_nand_byte_pre_oob, %object
24875         .size   c_ftl_nand_byte_pre_oob, 2
24876 c_ftl_nand_byte_pre_oob:
24877         .zero   2
24878         .type   c_ftl_nand_byte_pre_page, %object
24879         .size   c_ftl_nand_byte_pre_page, 2
24880 c_ftl_nand_byte_pre_page:
24881         .zero   2
24882         .type   c_ftl_nand_sec_pre_page_shift, %object
24883         .size   c_ftl_nand_sec_pre_page_shift, 2
24884 c_ftl_nand_sec_pre_page_shift:
24885         .zero   2
24886         .type   c_ftl_nand_sec_pre_page, %object
24887         .size   c_ftl_nand_sec_pre_page, 2
24888 c_ftl_nand_sec_pre_page:
24889         .zero   2
24890         .type   c_ftl_nand_page_pre_super_blk, %object
24891         .size   c_ftl_nand_page_pre_super_blk, 2
24892 c_ftl_nand_page_pre_super_blk:
24893         .zero   2
24894         .type   c_ftl_nand_page_pre_slc_blk, %object
24895         .size   c_ftl_nand_page_pre_slc_blk, 2
24896 c_ftl_nand_page_pre_slc_blk:
24897         .zero   2
24898         .type   c_ftl_nand_page_pre_blk, %object
24899         .size   c_ftl_nand_page_pre_blk, 2
24900 c_ftl_nand_page_pre_blk:
24901         .zero   2
24902         .type   c_ftl_nand_bbm_buf_size, %object
24903         .size   c_ftl_nand_bbm_buf_size, 2
24904 c_ftl_nand_bbm_buf_size:
24905         .zero   2
24906         .type   c_ftl_nand_ext_blk_pre_plane, %object
24907         .size   c_ftl_nand_ext_blk_pre_plane, 2
24908 c_ftl_nand_ext_blk_pre_plane:
24909         .zero   2
24910         .type   c_ftl_nand_blk_pre_plane, %object
24911         .size   c_ftl_nand_blk_pre_plane, 2
24912 c_ftl_nand_blk_pre_plane:
24913         .zero   2
24914         .type   c_ftl_nand_planes_num, %object
24915         .size   c_ftl_nand_planes_num, 2
24916 c_ftl_nand_planes_num:
24917         .zero   2
24918         .type   c_ftl_nand_blks_per_die_shift, %object
24919         .size   c_ftl_nand_blks_per_die_shift, 2
24920 c_ftl_nand_blks_per_die_shift:
24921         .zero   2
24922         .type   c_ftl_nand_blks_per_die, %object
24923         .size   c_ftl_nand_blks_per_die, 2
24924 c_ftl_nand_blks_per_die:
24925         .zero   2
24926         .type   c_ftl_nand_planes_per_die, %object
24927         .size   c_ftl_nand_planes_per_die, 2
24928 c_ftl_nand_planes_per_die:
24929         .zero   2
24930         .type   c_ftl_nand_die_num, %object
24931         .size   c_ftl_nand_die_num, 2
24932 c_ftl_nand_die_num:
24933         .zero   2
24934         .type   c_ftl_nand_type, %object
24935         .size   c_ftl_nand_type, 2
24936 c_ftl_nand_type:
24937         .zero   2
24938         .zero   2
24939         .type   gMasterTempBuf, %object
24940         .size   gMasterTempBuf, 8
24941 gMasterTempBuf:
24942         .zero   8
24943         .type   gMasterInfo, %object
24944         .size   gMasterInfo, 48
24945 gMasterInfo:
24946         .zero   48
24947         .type   gNandcDumpWriteEn, %object
24948         .size   gNandcDumpWriteEn, 4
24949 gNandcDumpWriteEn:
24950         .zero   4
24951         .type   gToggleModeClkDiv, %object
24952         .size   gToggleModeClkDiv, 4
24953 gToggleModeClkDiv:
24954         .zero   4
24955         .type   gBootDdrMode, %object
24956         .size   gBootDdrMode, 4
24957 gBootDdrMode:
24958         .zero   4
24959         .type   gNandcEccBits, %object
24960         .size   gNandcEccBits, 4
24961 gNandcEccBits:
24962         .zero   4
24963         .type   gpNandc1, %object
24964         .size   gpNandc1, 8
24965 gpNandc1:
24966         .zero   8
24967         .type   gpNandc, %object
24968         .size   gpNandc, 8
24969 gpNandc:
24970         .zero   8
24971         .type   gNandcVer, %object
24972         .size   gNandcVer, 4
24973 gNandcVer:
24974         .zero   4
24975         .zero   4
24976         .type   gNandChipMap, %object
24977         .size   gNandChipMap, 128
24978 gNandChipMap:
24979         .zero   128
24980         .type   gNandIDataBuf, %object
24981         .size   gNandIDataBuf, 2048
24982 gNandIDataBuf:
24983         .zero   2048
24984         .type   FlashDdrTunningReadCount, %object
24985         .size   FlashDdrTunningReadCount, 4
24986 FlashDdrTunningReadCount:
24987         .zero   4
24988         .zero   4
24989         .type   gNandPhyInfo, %object
24990         .size   gNandPhyInfo, 28
24991 gNandPhyInfo:
24992         .zero   28
24993         .zero   4
24994         .type   gFlashProgCheckSpareBuffer, %object
24995         .size   gFlashProgCheckSpareBuffer, 8
24996 gFlashProgCheckSpareBuffer:
24997         .zero   8
24998         .type   gFlashProgCheckBuffer, %object
24999         .size   gFlashProgCheckBuffer, 8
25000 gFlashProgCheckBuffer:
25001         .zero   8
25002         .type   gFlashSpareBuffer, %object
25003         .size   gFlashSpareBuffer, 8
25004 gFlashSpareBuffer:
25005         .zero   8
25006         .type   gFlashPageBuffer1, %object
25007         .size   gFlashPageBuffer1, 8
25008 gFlashPageBuffer1:
25009         .zero   8
25010         .type   gFlashPageBuffer0, %object
25011         .size   gFlashPageBuffer0, 8
25012 gFlashPageBuffer0:
25013         .zero   8
25014         .type   gpFlashSaveInfo, %object
25015         .size   gpFlashSaveInfo, 8
25016 gpFlashSaveInfo:
25017         .zero   8
25018         .type   gReadRetryInfo, %object
25019         .size   gReadRetryInfo, 852
25020 gReadRetryInfo:
25021         .zero   852
25022         .zero   4
25023         .type   gpNandParaInfo, %object
25024         .size   gpNandParaInfo, 8
25025 gpNandParaInfo:
25026         .zero   8
25027         .type   gNandOptPara, %object
25028         .size   gNandOptPara, 32
25029 gNandOptPara:
25030         .zero   32
25031         .type   g_slc2KBNand, %object
25032         .size   g_slc2KBNand, 1
25033 g_slc2KBNand:
25034         .zero   1
25035         .type   g_maxRetryCount, %object
25036         .size   g_maxRetryCount, 1
25037 g_maxRetryCount:
25038         .zero   1
25039         .type   g_maxRegNum, %object
25040         .size   g_maxRegNum, 1
25041 g_maxRegNum:
25042         .zero   1
25043         .type   g_retryMode, %object
25044         .size   g_retryMode, 1
25045 g_retryMode:
25046         .zero   1
25047         .type   gNandIDBResBlkNumSaveInFlash, %object
25048         .size   gNandIDBResBlkNumSaveInFlash, 1
25049 gNandIDBResBlkNumSaveInFlash:
25050         .zero   1
25051         .type   gNandIDBResBlkNum, %object
25052         .size   gNandIDBResBlkNum, 1
25053 gNandIDBResBlkNum:
25054         .zero   1
25055         .zero   2
25056         .type   gNandFlashResEndPageAddr, %object
25057         .size   gNandFlashResEndPageAddr, 4
25058 gNandFlashResEndPageAddr:
25059         .zero   4
25060         .type   gNandFlashInfoBlockAddr, %object
25061         .size   gNandFlashInfoBlockAddr, 4
25062 gNandFlashInfoBlockAddr:
25063         .zero   4
25064         .type   gNandFlashIdbBlockAddr, %object
25065         .size   gNandFlashIdbBlockAddr, 4
25066 gNandFlashIdbBlockAddr:
25067         .zero   4
25068         .type   gNandFlashInfoBlockEcc, %object
25069         .size   gNandFlashInfoBlockEcc, 1
25070 gNandFlashInfoBlockEcc:
25071         .zero   1
25072         .type   gNandFlashIDBEccBits, %object
25073         .size   gNandFlashIDBEccBits, 1
25074 gNandFlashIDBEccBits:
25075         .zero   1
25076         .type   gNandFlashEccBits, %object
25077         .size   gNandFlashEccBits, 1
25078 gNandFlashEccBits:
25079         .zero   1
25080         .type   gNandRandomizer, %object
25081         .size   gNandRandomizer, 1
25082 gNandRandomizer:
25083         .zero   1
25084         .type   gBlockPageAlignSize, %object
25085         .size   gBlockPageAlignSize, 4
25086 gBlockPageAlignSize:
25087         .zero   4
25088         .type   gTotleBlock, %object
25089         .size   gTotleBlock, 2
25090 gTotleBlock:
25091         .zero   2
25092         .type   gNandMaxChip, %object
25093         .size   gNandMaxChip, 1
25094 gNandMaxChip:
25095         .zero   1
25096         .type   gNandMaxDie, %object
25097         .size   gNandMaxDie, 1
25098 gNandMaxDie:
25099         .zero   1
25100         .type   gFlashInterfaceMode, %object
25101         .size   gFlashInterfaceMode, 1
25102 gFlashInterfaceMode:
25103         .zero   1
25104         .type   gFlashOnfiModeEn, %object
25105         .size   gFlashOnfiModeEn, 1
25106 gFlashOnfiModeEn:
25107         .zero   1
25108         .type   gFlashToggleModeEn, %object
25109         .size   gFlashToggleModeEn, 1
25110 gFlashToggleModeEn:
25111         .zero   1
25112         .type   gFlashSdrModeEn, %object
25113         .size   gFlashSdrModeEn, 1
25114 gFlashSdrModeEn:
25115         .zero   1
25116         .type   gMultiPageProgEn, %object
25117         .size   gMultiPageProgEn, 1
25118 gMultiPageProgEn:
25119         .zero   1
25120         .type   gMultiPageReadEn, %object
25121         .size   gMultiPageReadEn, 1
25122 gMultiPageReadEn:
25123         .zero   1
25124         .zero   2
25125         .type   gpReadRetrial, %object
25126         .size   gpReadRetrial, 8
25127 gpReadRetrial:
25128         .zero   8
25129         .type   mlcPageToSlcPageTbl, %object
25130         .size   mlcPageToSlcPageTbl, 1024
25131 mlcPageToSlcPageTbl:
25132         .zero   1024
25133         .type   slcPageToMlcPageTbl, %object
25134         .size   slcPageToMlcPageTbl, 512
25135 slcPageToMlcPageTbl:
25136         .zero   512
25137         .type   DieAddrs, %object
25138         .size   DieAddrs, 64
25139 DieAddrs:
25140         .zero   64
25141         .type   gDieOp, %object
25142         .size   gDieOp, 384
25143 gDieOp:
25144         .zero   384
25145         .type   DieCsIndex, %object
25146         .size   DieCsIndex, 16
25147 DieCsIndex:
25148         .zero   16
25149         .type   IDByte, %object
25150         .size   IDByte, 64
25151 IDByte:
25152         .zero   64
25153         .type   read_retry_cur_offset, %object
25154         .size   read_retry_cur_offset, 8
25155 read_retry_cur_offset:
25156         .zero   8
25157         .type   gNandc1_enable, %object
25158         .size   gNandc1_enable, 1
25159 gNandc1_enable:
25160         .zero   1
25161         .section        .data.rel,"aw",%progbits
25162         .align  3
25163 .LANCHOR3 = . + 0
25164         .type   rknand_sys_storage_dev, %object
25165         .size   rknand_sys_storage_dev, 80
25166 rknand_sys_storage_dev:
25167         .word   255
25168         .zero   4
25169         .xword  .LC155
25170         .xword  rknand_sys_storage_fops
25171         .zero   56