usb: ehci: add rockchip relinquishing port quirk support
[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    .L__reg_num_x\num, \num
15         .endr
16         .equ    .L__reg_num_xzr, 31
17
18         .macro  mrs_s, rt, sreg
19         .inst   0xd5200000|(\sreg)|(.L__reg_num_\rt)
20         .endm
21
22         .macro  msr_s, sreg, rt
23         .inst   0xd5000000|(\sreg)|(.L__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         mov     x2, 4096
33         stp     x29, x30, [sp, -32]!
34         add     x29, sp, 0
35         ldr     x0, [x0, #:got_lo12:kmalloc_caches]
36         str     x19, [sp,16]
37         mov     x19, x1
38         mov     w1, 192
39         ldr     x0, [x0,96]
40         movk    w1, 0x240, lsl 16
41         bl      kmem_cache_alloc_trace
42         str     xzr, [x19,208]
43         cbnz    x0, .L2
44         adrp    x0, .LC0
45         add     x0, x0, :lo12:.LC0
46         bl      printk
47         mov     w0, -12
48         b       .L3
49 .L2:
50         str     x0, [x19,208]
51         mov     w0, 0
52 .L3:
53         ldr     x19, [sp,16]
54         ldp     x29, x30, [sp], 32
55         ret
56         .size   rknand_sys_storage_open, .-rknand_sys_storage_open
57         .align  2
58         .type   rknand_sys_storage_release, %function
59 rknand_sys_storage_release:
60         stp     x29, x30, [sp, -16]!
61         add     x29, sp, 0
62         ldr     x0, [x1,208]
63         cbz     x0, .L6
64         str     xzr, [x1,208]
65         bl      kfree
66 .L6:
67         mov     w0, 0
68         ldp     x29, x30, [sp], 16
69         ret
70         .size   rknand_sys_storage_release, .-rknand_sys_storage_release
71         .align  2
72         .global FlashMemCmp8
73         .type   FlashMemCmp8, %function
74 FlashMemCmp8:
75         adrp    x3, :got:g_slc2KBNand
76         mov     x5, x0
77         ldr     x3, [x3, #:got_lo12:g_slc2KBNand]
78         ldrb    w0, [x3]
79         cbz     w0, .L14
80         ldrb    w4, [x5,1]
81         mov     w0, 0
82         ldrb    w3, [x1,1]
83         cmp     w4, w3
84         beq     .L12
85 .L14:
86         mov     x3, 0
87 .L16:
88         cmp     w3, w2
89         mov     w4, w3
90         bcs     .L18
91         ldrb    w0, [x5,x3]
92         add     x3, x3, 1
93         add     x6, x1, x3
94         ldrb    w6, [x6,-1]
95         cmp     w6, w0
96         beq     .L16
97         add     w0, w4, 1
98         b       .L12
99 .L18:
100         mov     w0, 0
101 .L12:
102         ret
103         .size   FlashMemCmp8, .-FlashMemCmp8
104         .align  2
105         .global FlashRsvdBlkChk
106         .type   FlashRsvdBlkChk, %function
107 FlashRsvdBlkChk:
108         adrp    x2, :got:gNandIDBResBlkNum
109         adrp    x3, :got:gBlockPageAlignSize
110         uxtb    w0, w0
111         ldr     x2, [x2, #:got_lo12:gNandIDBResBlkNum]
112         ldr     x3, [x3, #:got_lo12:gBlockPageAlignSize]
113         ldrb    w2, [x2]
114         ldr     w3, [x3]
115         mul     w2, w2, w3
116         cmp     w1, w2
117         cset    w1, cc
118         cmp     w0, wzr
119         cset    w0, eq
120         and     w0, w1, w0
121         eor     w0, w0, 1
122         ret
123         .size   FlashRsvdBlkChk, .-FlashRsvdBlkChk
124         .align  2
125         .global FlashGetRandomizer
126         .type   FlashGetRandomizer, %function
127 FlashGetRandomizer:
128         adrp    x2, :got:random_seed
129         and     w3, w1, 127
130         stp     x29, x30, [sp, -32]!
131         uxtb    w0, w0
132         add     x29, sp, 0
133         ldr     x2, [x2, #:got_lo12:random_seed]
134         str     x19, [sp,16]
135         ldrh    w19, [x2,w3,uxtw 1]
136         adrp    x2, :got:gNandRandomizer
137         ldr     x2, [x2, #:got_lo12:gNandRandomizer]
138         ldrb    w2, [x2]
139         cbz     w2, .L21
140         bl      FlashRsvdBlkChk
141         cmp     w0, wzr
142         orr     w1, w19, -1073741824
143         csel    w19, w1, w19, ne
144 .L21:
145         mov     w0, w19
146         ldr     x19, [sp,16]
147         ldp     x29, x30, [sp], 32
148         ret
149         .size   FlashGetRandomizer, .-FlashGetRandomizer
150         .align  2
151         .global JSHash
152         .type   JSHash, %function
153 JSHash:
154         mov     x5, x0
155         mov     w0, 42982
156         mov     x2, 0
157         movk    w0, 0x47c6, lsl 16
158 .L28:
159         cmp     w1, w2
160         bls     .L30
161         lsl     w3, w0, 5
162         ldrb    w4, [x5,x2]
163         add     w3, w3, w0, lsr 2
164         add     x2, x2, 1
165         add     w3, w3, w4
166         eor     w0, w0, w3
167         b       .L28
168 .L30:
169         ret
170         .size   JSHash, .-JSHash
171         .align  2
172         .global FlashLoadIdbInfo
173         .type   FlashLoadIdbInfo, %function
174 FlashLoadIdbInfo:
175         mov     w0, 0
176         ret
177         .size   FlashLoadIdbInfo, .-FlashLoadIdbInfo
178         .align  2
179         .global FlashPrintInfo
180         .type   FlashPrintInfo, %function
181 FlashPrintInfo:
182         ret
183         .size   FlashPrintInfo, .-FlashPrintInfo
184         .align  2
185         .global FlashSuspend
186         .type   FlashSuspend, %function
187 FlashSuspend:
188         adrp    x0, :got:gpNandc
189         adrp    x2, .LANCHOR0
190         add     x1, x2, :lo12:.LANCHOR0
191         ldr     x0, [x0, #:got_lo12:gpNandc]
192         ldr     x0, [x0]
193         ldr     w3, [x0]
194         str     w3, [x2,#:lo12:.LANCHOR0]
195         ldr     w2, [x0,4]
196         str     w2, [x1,4]
197         ldr     w2, [x0,8]
198         str     w2, [x1,8]
199         ldr     w2, [x0,12]
200         str     w2, [x1,12]
201         ldr     w2, [x0,304]
202         str     w2, [x1,16]
203         ldr     w2, [x0,308]
204         str     w2, [x1,20]
205         ldr     w2, [x0,336]
206         ldr     w0, [x0,344]
207         str     w0, [x1,28]
208         mov     w0, 0
209         str     w2, [x1,24]
210         ret
211         .size   FlashSuspend, .-FlashSuspend
212         .align  2
213         .global LogAddr2PhyAddr
214         .type   LogAddr2PhyAddr, %function
215 LogAddr2PhyAddr:
216         adrp    x6, :got:gNandPhyInfo
217         uxtb    w4, w4
218         ldr     x6, [x6, #:got_lo12:gNandPhyInfo]
219         ldrh    w5, [x6,12]
220         ldrh    w6, [x6,14]
221         mul     w5, w5, w6
222         adrp    x6, :got:gBlockPageAlignSize
223         uxth    w5, w5
224         ldr     x6, [x6, #:got_lo12:gBlockPageAlignSize]
225         ldrh    w8, [x6]
226         adrp    x6, :got:g_slc2KBNand
227         ubfiz   w7, w8, 1, 15
228         ldr     x6, [x6, #:got_lo12:g_slc2KBNand]
229         ldrb    w6, [x6]
230         cmp     w6, 1
231         csel    w8, w7, w8, eq
232         ldr     w7, [x0,4]
233         cmp     w1, 1
234         ubfx    x6, x7, 10, 16
235         and     w7, w7, 1023
236         udiv    w9, w6, w5
237         msub    w5, w9, w5, w6
238         uxth    w6, w5
239         bne     .L36
240         adrp    x1, :got:slcPageToMlcPageTbl
241         ldr     x1, [x1, #:got_lo12:slcPageToMlcPageTbl]
242         ldrh    w7, [x1,w7,sxtw 1]
243 .L36:
244         adrp    x1, :got:DieAddrs
245         cmp     w4, 1
246         ldr     x1, [x1, #:got_lo12:DieAddrs]
247         ldr     w5, [x1,w9,uxtw 2]
248         mov     w1, 0
249         madd    w5, w6, w8, w5
250         add     w5, w5, w7
251         str     w5, [x2]
252         str     w9, [x3]
253         bls     .L37
254         ldr     w1, [x0,4]
255         ldr     w0, [x0,60]
256         add     w1, w1, 1024
257         cmp     w1, w0
258         cset    w1, eq
259 .L37:
260         mov     w0, w1
261         ret
262         .size   LogAddr2PhyAddr, .-LogAddr2PhyAddr
263         .align  2
264         .global FlashGetPageSize
265         .type   FlashGetPageSize, %function
266 FlashGetPageSize:
267         adrp    x0, :got:gpNandParaInfo
268         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
269         ldr     x0, [x0]
270         ldrb    w0, [x0,9]
271         ret
272         .size   FlashGetPageSize, .-FlashGetPageSize
273         .align  2
274         .global NandcReadDontCaseBusyEn
275         .type   NandcReadDontCaseBusyEn, %function
276 NandcReadDontCaseBusyEn:
277         ret
278         .size   NandcReadDontCaseBusyEn, .-NandcReadDontCaseBusyEn
279         .align  2
280         .global NandcGetChipIf
281         .type   NandcGetChipIf, %function
282 NandcGetChipIf:
283         adrp    x1, :got:gNandChipMap
284         ubfiz   x0, x0, 4, 8
285         ldr     x1, [x1, #:got_lo12:gNandChipMap]
286         add     x2, x1, x0
287         ldr     x0, [x1,x0]
288         ldrb    w2, [x2,8]
289         add     x2, x2, 8
290         add     x0, x0, x2, lsl 8
291         ret
292         .size   NandcGetChipIf, .-NandcGetChipIf
293         .align  2
294         .global FlashEraseCmd
295         .type   FlashEraseCmd, %function
296 FlashEraseCmd:
297         stp     x29, x30, [sp, -32]!
298         add     x29, sp, 0
299         str     x1, [x29,16]
300         str     x2, [x29,24]
301         bl      NandcGetChipIf
302         ldr     x2, [x29,24]
303         ldr     x1, [x29,16]
304         cbz     w2, .L43
305         mov     w2, 96
306         str     w2, [x0,8]
307         and     w2, w1, 255
308         str     w2, [x0,4]
309         lsr     w2, w1, 8
310         str     w2, [x0,4]
311         lsr     w2, w1, 16
312         str     w2, [x0,4]
313         adrp    x2, :got:gBlockPageAlignSize
314         ldr     x2, [x2, #:got_lo12:gBlockPageAlignSize]
315         ldr     w2, [x2]
316         add     w1, w1, w2
317 .L43:
318         mov     w2, 96
319         str     w2, [x0,8]
320         and     w2, w1, 255
321         str     w2, [x0,4]
322         lsr     w2, w1, 8
323         str     w2, [x0,4]
324         lsr     w1, w1, 16
325         str     w1, [x0,4]
326         mov     w1, 208
327         str     w1, [x0,8]
328         ldp     x29, x30, [sp], 32
329         ret
330         .size   FlashEraseCmd, .-FlashEraseCmd
331         .align  2
332         .global FlashProgSecondCmd
333         .type   FlashProgSecondCmd, %function
334 FlashProgSecondCmd:
335         stp     x29, x30, [sp, -16]!
336         add     x29, sp, 0
337         bl      NandcGetChipIf
338         mov     w1, 16
339         str     w1, [x0,8]
340         ldp     x29, x30, [sp], 16
341         ret
342         .size   FlashProgSecondCmd, .-FlashProgSecondCmd
343         .align  2
344         .global FlashProgDpFirstCmd
345         .type   FlashProgDpFirstCmd, %function
346 FlashProgDpFirstCmd:
347         stp     x29, x30, [sp, -16]!
348         add     x29, sp, 0
349         bl      NandcGetChipIf
350         adrp    x1, :got:gNandOptPara
351         ldr     x1, [x1, #:got_lo12:gNandOptPara]
352         ldrb    w1, [x1,10]
353         str     w1, [x0,8]
354         ldp     x29, x30, [sp], 16
355         ret
356         .size   FlashProgDpFirstCmd, .-FlashProgDpFirstCmd
357         .align  2
358         .global NandcSetDdrPara
359         .type   NandcSetDdrPara, %function
360 NandcSetDdrPara:
361         adrp    x1, :got:gpNandc
362         uxtb    w0, w0
363         lsl     w2, w0, 8
364         orr     w0, w2, w0, lsl 16
365         ldr     x1, [x1, #:got_lo12:gpNandc]
366         orr     w0, w0, 1
367         ldr     x1, [x1]
368         str     w0, [x1,304]
369         ret
370         .size   NandcSetDdrPara, .-NandcSetDdrPara
371         .align  2
372         .global NandcSetDdrMode
373         .type   NandcSetDdrMode, %function
374 NandcSetDdrMode:
375         adrp    x1, :got:gpNandc
376         cmp     w0, wzr
377         ldr     x1, [x1, #:got_lo12:gpNandc]
378         ldr     x2, [x1]
379         ldr     w1, [x2]
380         and     w3, w1, -8193
381         orr     w1, w1, 253952
382         csel    w1, w1, w3, ne
383         str     w1, [x2]
384         ret
385         .size   NandcSetDdrMode, .-NandcSetDdrMode
386         .align  2
387         .global NandcSetMode
388         .type   NandcSetMode, %function
389 NandcSetMode:
390         stp     x29, x30, [sp, -48]!
391         adrp    x1, :got:gpNandc
392         uxtb    w0, w0
393         add     x29, sp, 0
394         str     x21, [sp,32]
395         tst     w0, 6
396         ldr     x21, [x1, #:got_lo12:gpNandc]
397         stp     x19, x20, [sp,16]
398         mov     x20, x1
399         ldr     x2, [x21]
400         ldr     w19, [x2]
401         beq     .L54
402         orr     w19, w19, 24576
403         and     w0, w0, 4
404         and     w19, w19, -32769
405         cmp     w0, wzr
406         orr     w19, w19, 196608
407         mov     w0, 0
408         orr     w1, w19, 32768
409         csel    w19, w1, w19, ne
410         bl      rknand_get_clk_rate
411         ldr     x0, [x21]
412         mov     w1, 8322
413         str     w1, [x0,344]
414         mov     w1, 4099
415         movk    w1, 0x10, lsl 16
416         str     w1, [x0,304]
417         mov     w1, 38
418         str     w1, [x0,308]
419         mov     w1, 39
420         str     w1, [x0,308]
421         b       .L56
422 .L54:
423         and     w19, w19, -8193
424 .L56:
425         ldr     x1, [x20, #:got_lo12:gpNandc]
426         ldr     x0, [x1]
427         str     w19, [x0]
428         mov     w0, 0
429         ldp     x19, x20, [sp,16]
430         ldr     x21, [sp,32]
431         ldp     x29, x30, [sp], 48
432         ret
433         .size   NandcSetMode, .-NandcSetMode
434         .align  2
435         .global NandcFlashCsDebug
436         .type   NandcFlashCsDebug, %function
437 NandcFlashCsDebug:
438         adrp    x1, :got:gNandChipMap
439         uxtb    w0, w0
440         ldr     x1, [x1, #:got_lo12:gNandChipMap]
441         ldr     x2, [x1]
442         ldr     w1, [x2]
443         bfi     w1, w0, 0, 8
444         str     w1, [x2]
445         ret
446         .size   NandcFlashCsDebug, .-NandcFlashCsDebug
447         .align  2
448         .global NandcFlashCs
449         .type   NandcFlashCs, %function
450 NandcFlashCs:
451         adrp    x1, :got:gNandChipMap
452         ubfiz   x0, x0, 4, 8
453         ldr     x1, [x1, #:got_lo12:gNandChipMap]
454         add     x3, x1, x0
455         ldr     x2, [x1,x0]
456         mov     w1, 1
457         ldrb    w3, [x3,8]
458         ldr     w0, [x2]
459         lsl     w1, w1, w3
460         bfi     w0, w1, 0, 8
461         str     w0, [x2]
462         ret
463         .size   NandcFlashCs, .-NandcFlashCs
464         .align  2
465         .global NandcFlashDeCs
466         .type   NandcFlashDeCs, %function
467 NandcFlashDeCs:
468         adrp    x1, :got:gNandChipMap
469         ubfiz   x0, x0, 4, 8
470         ldr     x1, [x1, #:got_lo12:gNandChipMap]
471         ldr     x1, [x1,x0]
472         ldr     w0, [x1]
473         and     w0, w0, -256
474         and     w0, w0, -131073
475         str     w0, [x1]
476         ret
477         .size   NandcFlashDeCs, .-NandcFlashDeCs
478         .align  2
479         .global NandcDelayns
480         .type   NandcDelayns, %function
481 NandcDelayns:
482         sub     sp, sp, #16
483         lsr     w0, w0, 4
484         str     w0, [sp,12]
485 .L63:
486         ldr     w0, [sp,12]
487         sub     w1, w0, #1
488         str     w1, [sp,12]
489         cbnz    w0, .L63
490         add     sp, sp, 16
491         ret
492         .size   NandcDelayns, .-NandcDelayns
493         .align  2
494         .global FlashReadStatus
495         .type   FlashReadStatus, %function
496 FlashReadStatus:
497         stp     x29, x30, [sp, -32]!
498         add     x29, sp, 0
499         str     x19, [sp,16]
500         bl      NandcGetChipIf
501         mov     x19, x0
502         mov     w0, 112
503         str     w0, [x19,8]
504         mov     w0, 80
505         bl      NandcDelayns
506         ldr     w0, [x19]
507         ldr     x19, [sp,16]
508         ldp     x29, x30, [sp], 32
509         ret
510         .size   FlashReadStatus, .-FlashReadStatus
511         .align  2
512         .global ToshibaSetRRPara
513         .type   ToshibaSetRRPara, %function
514 ToshibaSetRRPara:
515         stp     x29, x30, [sp, -96]!
516         adrp    x2, :got:Toshiba15RefValue
517         add     x29, sp, 0
518         stp     x23, x24, [sp,48]
519         uxtb    x23, w1
520         ldr     x2, [x2, #:got_lo12:Toshiba15RefValue]
521         stp     x19, x20, [sp,16]
522         stp     x21, x22, [sp,32]
523         mov     w20, 5
524         mov     x21, x0
525         add     w0, w23, 1
526         mov     x19, 0
527         stp     x25, x26, [sp,64]
528         smull   x20, w0, w20
529         adrp    x0, :got:ToshibaA19RefValue
530         adrp    x25, :got:g_maxRegNum
531         stp     x27, x28, [sp,80]
532         mov     x22, x0
533         mov     w26, 85
534         ldr     x24, [x0, #:got_lo12:ToshibaA19RefValue]
535         adrp    x27, :got:g_retryMode
536         adrp    x28, :got:ToshibaRefValue
537         add     x24, x20, x24
538         add     x20, x20, x2
539 .L67:
540         ldr     x0, [x25, #:got_lo12:g_maxRegNum]
541         ldrb    w0, [x0]
542         cmp     w0, w19
543         bls     .L73
544         str     w26, [x21,8]
545         ldr     x0, [x22, #:got_lo12:ToshibaA19RefValue]
546         ldrsb   w0, [x19,x0]
547         str     w0, [x21,4]
548         mov     w0, 200
549         bl      NandcDelayns
550         ldr     x0, [x27, #:got_lo12:g_retryMode]
551         ldrb    w0, [x0]
552         cmp     w0, 34
553         bne     .L68
554         ldrsb   w0, [x24,x19]
555         b       .L72
556 .L68:
557         cmp     w0, 35
558         bne     .L70
559         ldrsb   w0, [x20,x19]
560         b       .L72
561 .L70:
562         ldr     x0, [x28, #:got_lo12:ToshibaRefValue]
563         ldrsb   w0, [x0,x23]
564 .L72:
565         str     w0, [x21]
566         add     x19, x19, 1
567         b       .L67
568 .L73:
569         ldp     x19, x20, [sp,16]
570         ldp     x21, x22, [sp,32]
571         ldp     x23, x24, [sp,48]
572         ldp     x25, x26, [sp,64]
573         ldp     x27, x28, [sp,80]
574         ldp     x29, x30, [sp], 96
575         ret
576         .size   ToshibaSetRRPara, .-ToshibaSetRRPara
577         .align  2
578         .global SamsungSetRRPara
579         .type   SamsungSetRRPara, %function
580 SamsungSetRRPara:
581         stp     x29, x30, [sp, -64]!
582         uxtb    x1, w1
583         add     x29, sp, 0
584         stp     x21, x22, [sp,32]
585         mov     x21, x0
586         adrp    x0, :got:SamsungRefValue
587         stp     x19, x20, [sp,16]
588         add     x1, x1, 1
589         mov     x19, 0
590         ldr     x20, [x0, #:got_lo12:SamsungRefValue]
591         mov     x22, x0
592         stp     x23, x24, [sp,48]
593         add     x20, x20, x1, lsl 2
594         adrp    x23, :got:g_maxRegNum
595         mov     w24, 161
596 .L75:
597         ldr     x0, [x23, #:got_lo12:g_maxRegNum]
598         ldrb    w0, [x0]
599         cmp     w0, w19
600         bls     .L77
601         str     w24, [x21,8]
602         str     wzr, [x21]
603         ldr     x0, [x22, #:got_lo12:SamsungRefValue]
604         ldrsb   w0, [x19,x0]
605         str     w0, [x21]
606         ldrsb   w0, [x20,x19]
607         add     x19, x19, 1
608         str     w0, [x21]
609         mov     w0, 300
610         bl      NandcDelayns
611         b       .L75
612 .L77:
613         ldp     x19, x20, [sp,16]
614         ldp     x21, x22, [sp,32]
615         ldp     x23, x24, [sp,48]
616         ldp     x29, x30, [sp], 64
617         ret
618         .size   SamsungSetRRPara, .-SamsungSetRRPara
619         .align  2
620         .global HynixSetRRPara
621         .type   HynixSetRRPara, %function
622 HynixSetRRPara:
623         stp     x29, x30, [sp, -80]!
624         adrp    x4, :got:gReadRetryInfo
625         add     x29, sp, 0
626         stp     x21, x22, [sp,32]
627         uxtb    x22, w0
628         adrp    x0, :got:gpNandParaInfo
629         stp     x23, x24, [sp,48]
630         stp     x19, x20, [sp,16]
631         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
632         mov     x21, x22
633         stp     x25, x26, [sp,64]
634         uxtb    w20, w1
635         mov     x24, x2
636         ldr     x0, [x0]
637         uxtb    w23, w3
638         ldrb    w0, [x0,19]
639         cmp     w0, 6
640         bne     .L79
641         ldr     x4, [x4, #:got_lo12:gReadRetryInfo]
642         lsl     w19, w23, 2
643         add     x4, x4, x22, lsl 6
644         add     x4, x4, 20
645         add     x19, x4, x19, sxtw
646         b       .L80
647 .L79:
648         ldr     x4, [x4, #:got_lo12:gReadRetryInfo]
649         lsl     x19, x22, 3
650         add     x19, x19, x23, sxtw
651         add     x4, x4, x19, lsl 3
652         add     x19, x4, 20
653 .L80:
654         mov     w0, w21
655         uxtb    x26, w20
656         mov     x20, 0
657         bl      NandcGetChipIf
658         mov     x25, x0
659         mov     w0, w21
660         bl      NandcFlashCs
661         mov     w0, 54
662         str     w0, [x25,8]
663 .L81:
664         cmp     x20, x26
665         beq     .L83
666         ldrb    w0, [x24,x20]
667         str     w0, [x25,4]
668         mov     w0, 200
669         bl      NandcDelayns
670         ldrb    w0, [x19,x20]
671         add     x20, x20, 1
672         str     w0, [x25]
673         b       .L81
674 .L83:
675         mov     w0, 22
676         str     w0, [x25,8]
677         mov     w0, w21
678         bl      NandcFlashDeCs
679         adrp    x0, :got:read_retry_cur_offset
680         ldr     x0, [x0, #:got_lo12:read_retry_cur_offset]
681         strb    w23, [x0,x22]
682         ldp     x19, x20, [sp,16]
683         ldp     x21, x22, [sp,32]
684         ldp     x23, x24, [sp,48]
685         ldp     x25, x26, [sp,64]
686         ldp     x29, x30, [sp], 80
687         ret
688         .size   HynixSetRRPara, .-HynixSetRRPara
689         .align  2
690         .global FlashSetReadRetryDefault
691         .type   FlashSetReadRetryDefault, %function
692 FlashSetReadRetryDefault:
693         adrp    x0, :got:gpNandParaInfo
694         stp     x29, x30, [sp, -48]!
695         add     x29, sp, 0
696         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
697         stp     x19, x20, [sp,16]
698         str     x21, [sp,32]
699         mov     x19, 0
700         ldr     x0, [x0]
701         ldrb    w0, [x0,19]
702         sub     w0, w0, #1
703         uxtb    w0, w0
704         cmp     w0, 5
705         bhi     .L84
706         adrp    x20, :got:IDByte
707         adrp    x21, :got:gReadRetryInfo
708 .L89:
709         lsl     x1, x19, 3
710         ldr     x2, [x20, #:got_lo12:IDByte]
711         uxtb    w0, w19
712         ldrb    w1, [x1,x2]
713         cmp     w1, 173
714         bne     .L86
715         ldr     x2, [x21, #:got_lo12:gReadRetryInfo]
716         mov     w3, 0
717         add     x2, x2, 4
718         ldrb    w1, [x2,-3]
719         bl      HynixSetRRPara
720 .L86:
721         add     x19, x19, 1
722         cmp     x19, 4
723         bne     .L89
724 .L84:
725         ldp     x19, x20, [sp,16]
726         ldr     x21, [sp,32]
727         ldp     x29, x30, [sp], 48
728         ret
729         .size   FlashSetReadRetryDefault, .-FlashSetReadRetryDefault
730         .align  2
731         .global FlashReadStatusEN
732         .type   FlashReadStatusEN, %function
733 FlashReadStatusEN:
734         stp     x29, x30, [sp, -48]!
735         add     x29, sp, 0
736         stp     x19, x20, [sp,16]
737         uxtb    w20, w2
738         str     x1, [x29,40]
739         bl      NandcGetChipIf
740         mov     x19, x0
741         adrp    x0, :got:gpNandParaInfo
742         ldr     x1, [x29,40]
743         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
744         ldr     x0, [x0]
745         ldrb    w0, [x0,8]
746         cmp     w0, 2
747         bne     .L92
748         adrp    x3, :got:gNandOptPara
749         ldr     x0, [x3, #:got_lo12:gNandOptPara]
750         cbnz    w20, .L93
751         ldrb    w0, [x0,13]
752         b       .L101
753 .L93:
754         ldrb    w0, [x0,14]
755 .L101:
756         str     w0, [x19,8]
757         mov     w2, 0
758         ldr     x0, [x3, #:got_lo12:gNandOptPara]
759         ldrb    w0, [x0,15]
760         cbz     w0, .L96
761 .L100:
762         ldr     x0, [x3, #:got_lo12:gNandOptPara]
763         ldrb    w0, [x0,15]
764         cmp     w2, w0
765         bcs     .L96
766         lsl     w0, w2, 3
767         add     w2, w2, 1
768         lsr     w0, w1, w0
769         and     w0, w0, 255
770         str     w0, [x19,4]
771         b       .L100
772 .L92:
773         mov     w0, 112
774         str     w0, [x19,8]
775 .L96:
776         mov     w0, 80
777         bl      NandcDelayns
778         ldr     w0, [x19]
779         ldp     x19, x20, [sp,16]
780         ldp     x29, x30, [sp], 48
781         uxtb    w0, w0
782         ret
783         .size   FlashReadStatusEN, .-FlashReadStatusEN
784         .align  2
785         .global FlashWaitReadyEN
786         .type   FlashWaitReadyEN, %function
787 FlashWaitReadyEN:
788         stp     x29, x30, [sp, -48]!
789         add     x29, sp, 0
790         stp     x19, x20, [sp,16]
791         str     x21, [sp,32]
792         uxtb    w19, w0
793         mov     w20, w1
794         uxtb    w21, w2
795 .L106:
796         mov     w0, w19
797         mov     w1, w20
798         mov     w2, w21
799         bl      FlashReadStatusEN
800         cmp     w0, 255
801         mov     w3, w0
802         beq     .L106
803         tbz     x3, 6, .L106
804         ldp     x19, x20, [sp,16]
805         ldr     x21, [sp,32]
806         ldp     x29, x30, [sp], 48
807         ret
808         .size   FlashWaitReadyEN, .-FlashWaitReadyEN
809         .align  2
810         .global FlashWaitCmdDone
811         .type   FlashWaitCmdDone, %function
812 FlashWaitCmdDone:
813         stp     x29, x30, [sp, -48]!
814         adrp    x2, :got:gDieOp
815         uxtb    x1, w0
816         mov     x0, 24
817         add     x29, sp, 0
818         stp     x19, x20, [sp,16]
819         ldr     x2, [x2, #:got_lo12:gDieOp]
820         mov     x20, x1
821         mul     x1, x1, x0
822         str     x21, [sp,32]
823         add     x19, x2, x1
824         ldrb    w21, [x2,x1]
825         ldr     x0, [x19,8]
826         cbz     x0, .L111
827         mov     w0, w21
828         bl      NandcFlashCs
829         adrp    x1, :got:DieAddrs
830         ldr     x1, [x1, #:got_lo12:DieAddrs]
831         ldr     w0, [x1,w20,sxtw 2]
832         ldr     w1, [x19,4]
833         cmp     w0, wzr
834         mov     w0, w21
835         cset    w2, ne
836         bl      FlashWaitReadyEN
837         mov     w20, w0
838         mov     w0, w21
839         bl      NandcFlashDeCs
840         ldr     x1, [x19,8]
841         sbfx    x0, x20, 0, 1
842         str     w0, [x1]
843         str     xzr, [x19,8]
844         ldr     x1, [x19,16]
845         cbz     x1, .L111
846         str     w0, [x1]
847         str     xzr, [x19,16]
848 .L111:
849         mov     w0, 0
850         ldr     x21, [sp,32]
851         ldp     x19, x20, [sp,16]
852         ldp     x29, x30, [sp], 48
853         ret
854         .size   FlashWaitCmdDone, .-FlashWaitCmdDone
855         .align  2
856         .global NandcWaitFlashReady
857         .type   NandcWaitFlashReady, %function
858 NandcWaitFlashReady:
859         adrp    x1, :got:gNandChipMap
860         ubfiz   x0, x0, 4, 8
861         stp     x29, x30, [sp, -48]!
862         add     x29, sp, 0
863         ldr     x1, [x1, #:got_lo12:gNandChipMap]
864         stp     x19, x20, [sp,16]
865         mov     w19, 34464
866         ldr     x20, [x1,x0]
867         movk    w19, 0x1, lsl 16
868 .L118:
869         mov     w0, 100
870         bl      NandcDelayns
871         ldr     w0, [x20]
872         str     w0, [x29,40]
873         ldr     w0, [x29,40]
874         tbnz    x0, 9, .L119
875         subs    w19, w19, #1
876         bne     .L118
877         mov     w0, -1
878         b       .L117
879 .L119:
880         mov     w0, 0
881 .L117:
882         ldp     x19, x20, [sp,16]
883         ldp     x29, x30, [sp], 48
884         ret
885         .size   NandcWaitFlashReady, .-NandcWaitFlashReady
886         .align  2
887         .global FlashReset
888         .type   FlashReset, %function
889 FlashReset:
890         stp     x29, x30, [sp, -32]!
891         add     x29, sp, 0
892         stp     x19, x20, [sp,16]
893         uxtb    w19, w0
894         mov     w0, w19
895         bl      NandcGetChipIf
896         mov     x20, x0
897         mov     w0, w19
898         bl      NandcFlashCs
899         mov     w0, 255
900         str     w0, [x20,8]
901         mov     w0, w19
902         bl      NandcWaitFlashReady
903         mov     w0, w19
904         bl      NandcFlashDeCs
905         ldp     x19, x20, [sp,16]
906         ldp     x29, x30, [sp], 32
907         ret
908         .size   FlashReset, .-FlashReset
909         .align  2
910         .global FlashEraseBlock
911         .type   FlashEraseBlock, %function
912 FlashEraseBlock:
913         stp     x29, x30, [sp, -48]!
914         add     x29, sp, 0
915         stp     x19, x20, [sp,16]
916         uxtb    w19, w0
917         mov     w20, w1
918         mov     w0, w19
919         str     x2, [x29,40]
920         bl      NandcWaitFlashReady
921         mov     w0, w19
922         bl      NandcFlashCs
923         ldr     x2, [x29,40]
924         mov     w1, w20
925         mov     w0, w19
926         bl      FlashEraseCmd
927         mov     w0, w19
928         bl      NandcWaitFlashReady
929         mov     w1, w20
930         mov     w0, w19
931         bl      FlashReadStatus
932         mov     w20, w0
933         mov     w0, w19
934         bl      NandcFlashDeCs
935         and     w0, w20, 1
936         ldp     x19, x20, [sp,16]
937         ldp     x29, x30, [sp], 48
938         ret
939         .size   FlashEraseBlock, .-FlashEraseBlock
940         .align  2
941         .global FlashSetInterfaceMode
942         .type   FlashSetInterfaceMode, %function
943 FlashSetInterfaceMode:
944         stp     x29, x30, [sp, -80]!
945         add     x29, sp, 0
946         stp     x19, x20, [sp,16]
947         stp     x21, x22, [sp,32]
948         stp     x23, x24, [sp,48]
949         stp     x25, x26, [sp,64]
950         mov     w20, w0
951         mov     x19, 0
952         adrp    x25, :got:IDByte
953         adrp    x21, :got:gFlashInterfaceMode
954         mov     w22, 239
955         mov     w23, 128
956         mov     w24, 1
957         mov     w26, 35
958 .L134:
959         mov     w0, w19
960         bl      NandcGetChipIf
961         lsl     x1, x19, 3
962         ldr     x2, [x25, #:got_lo12:IDByte]
963         ldrb    w1, [x1,x2]
964         cmp     w1, 152
965         beq     .L124
966         cmp     w1, 69
967         beq     .L124
968         cmp     w1, 173
969         beq     .L124
970         cmp     w1, 44
971         bne     .L125
972 .L124:
973         ldr     x2, [x21, #:got_lo12:gFlashInterfaceMode]
974         cmp     w20, 1
975         ldrb    w2, [x2]
976         bne     .L127
977         tbz     x2, 0, .L125
978         str     w22, [x0,8]
979         cmp     w1, 173
980         bne     .L128
981         str     w20, [x0,4]
982         b       .L145
983 .L128:
984         cmp     w1, 44
985         bne     .L130
986         str     w20, [x0,4]
987         mov     w1, 5
988         b       .L146
989 .L130:
990         str     w23, [x0,4]
991         str     w20, [x0]
992         b       .L132
993 .L127:
994         tbz     x2, 2, .L125
995         str     w22, [x0,8]
996         cmp     w1, 173
997         bne     .L131
998         str     w24, [x0,4]
999         mov     w1, 32
1000 .L146:
1001         str     w1, [x0]
1002         b       .L132
1003 .L131:
1004         cmp     w1, 44
1005         bne     .L133
1006         str     w24, [x0,4]
1007         str     w26, [x0]
1008         b       .L132
1009 .L133:
1010         str     w23, [x0,4]
1011 .L145:
1012         str     wzr, [x0]
1013 .L132:
1014         str     wzr, [x0]
1015         str     wzr, [x0]
1016         str     wzr, [x0]
1017 .L125:
1018         add     x19, x19, 1
1019         cmp     x19, 4
1020         bne     .L134
1021         mov     w0, 0
1022         bl      NandcWaitFlashReady
1023         mov     w0, 0
1024         ldp     x19, x20, [sp,16]
1025         ldp     x21, x22, [sp,32]
1026         ldp     x23, x24, [sp,48]
1027         ldp     x25, x26, [sp,64]
1028         ldp     x29, x30, [sp], 80
1029         ret
1030         .size   FlashSetInterfaceMode, .-FlashSetInterfaceMode
1031         .align  2
1032         .global FlashReadSpare
1033         .type   FlashReadSpare, %function
1034 FlashReadSpare:
1035         adrp    x3, :got:gNandParaInfo
1036         stp     x29, x30, [sp, -64]!
1037         add     x29, sp, 0
1038         ldr     x3, [x3, #:got_lo12:gNandParaInfo]
1039         stp     x19, x20, [sp,16]
1040         str     x21, [sp,32]
1041         uxtb    w21, w0
1042         mov     w0, w21
1043         str     x2, [x29,56]
1044         ldrb    w20, [x3,9]
1045         str     x1, [x29,48]
1046         bl      NandcGetChipIf
1047         str     wzr, [x0,8]
1048         mov     x19, x0
1049         ldr     x1, [x29,48]
1050         lsl     w20, w20, 9
1051         str     w20, [x0,4]
1052         lsr     w20, w20, 8
1053         str     w20, [x0,4]
1054         and     w0, w1, 255
1055         str     w0, [x19,4]
1056         lsr     w0, w1, 8
1057         str     w0, [x19,4]
1058         lsr     w1, w1, 16
1059         mov     w0, 48
1060         str     w1, [x19,4]
1061         str     w0, [x19,8]
1062         mov     w0, w21
1063         bl      NandcWaitFlashReady
1064         ldr     x2, [x29,56]
1065         ldr     w0, [x19]
1066         strb    w0, [x2]
1067         ldp     x19, x20, [sp,16]
1068         ldr     x21, [sp,32]
1069         ldp     x29, x30, [sp], 64
1070         ret
1071         .size   FlashReadSpare, .-FlashReadSpare
1072         .align  2
1073         .global SandiskProgTestBadBlock
1074         .type   SandiskProgTestBadBlock, %function
1075 SandiskProgTestBadBlock:
1076         stp     x29, x30, [sp, -48]!
1077         add     x29, sp, 0
1078         stp     x19, x20, [sp,16]
1079         uxtb    w20, w0
1080         mov     w0, w20
1081         str     x1, [x29,40]
1082         bl      NandcGetChipIf
1083         mov     x19, x0
1084         mov     w0, 162
1085         ldr     x1, [x29,40]
1086         str     w0, [x19,8]
1087         mov     w0, 128
1088         str     w0, [x19,8]
1089         and     w0, w1, 255
1090         str     wzr, [x19,4]
1091         str     wzr, [x19,4]
1092         str     w0, [x19,4]
1093         lsr     w0, w1, 8
1094         str     w0, [x19,4]
1095         lsr     w1, w1, 16
1096         mov     w0, 16
1097         str     w1, [x19,4]
1098         str     w0, [x19,8]
1099         mov     w0, w20
1100         bl      NandcWaitFlashReady
1101         mov     w0, 112
1102         str     w0, [x19,8]
1103         mov     w0, 80
1104         bl      NandcDelayns
1105         ldr     w0, [x19]
1106         ldp     x19, x20, [sp,16]
1107         and     w0, w0, 1
1108         ldp     x29, x30, [sp], 48
1109         ret
1110         .size   SandiskProgTestBadBlock, .-SandiskProgTestBadBlock
1111         .align  2
1112         .global SandiskSetRRPara
1113         .type   SandiskSetRRPara, %function
1114 SandiskSetRRPara:
1115         stp     x29, x30, [sp, -32]!
1116         add     x29, sp, 0
1117         stp     x19, x20, [sp,16]
1118         mov     x20, x0
1119         mov     w0, 239
1120         uxtb    w19, w1
1121         add     w19, w19, 1
1122         str     w0, [x20,8]
1123         mov     w0, 17
1124         str     w0, [x20,4]
1125         mov     w0, 200
1126         bl      NandcDelayns
1127         adrp    x3, :got:ToshibaA19RefValue
1128         adrp    x2, :got:Toshiba15RefValue
1129         mov     w1, 5
1130         adrp    x4, :got:g_maxRegNum
1131         adrp    x5, :got:g_retryMode
1132         smull   x1, w19, w1
1133         ldr     x2, [x2, #:got_lo12:Toshiba15RefValue]
1134         ldr     x3, [x3, #:got_lo12:ToshibaA19RefValue]
1135         add     x3, x1, x3
1136         add     x1, x1, x2
1137         mov     x2, 0
1138 .L150:
1139         ldr     x0, [x4, #:got_lo12:g_maxRegNum]
1140         ldrb    w0, [x0]
1141         cmp     w0, w2
1142         bls     .L155
1143         ldr     x0, [x5, #:got_lo12:g_retryMode]
1144         ldrb    w0, [x0]
1145         cmp     w0, 67
1146         bne     .L151
1147         ldrsb   w0, [x3,x2]
1148         b       .L154
1149 .L151:
1150         ldrsb   w0, [x1,x2]
1151 .L154:
1152         str     w0, [x20]
1153         add     x2, x2, 1
1154         b       .L150
1155 .L155:
1156         mov     w0, 0
1157         bl      NandcWaitFlashReady
1158         ldp     x19, x20, [sp,16]
1159         ldp     x29, x30, [sp], 32
1160         ret
1161         .size   SandiskSetRRPara, .-SandiskSetRRPara
1162         .align  2
1163         .global NandcRandmzSel
1164         .type   NandcRandmzSel, %function
1165 NandcRandmzSel:
1166         adrp    x2, :got:gNandChipMap
1167         ubfiz   x0, x0, 4, 8
1168         ldr     x2, [x2, #:got_lo12:gNandChipMap]
1169         ldr     x0, [x2,x0]
1170         str     w1, [x0,336]
1171         ret
1172         .size   NandcRandmzSel, .-NandcRandmzSel
1173         .align  2
1174         .global FlashSetRandomizer
1175         .type   FlashSetRandomizer, %function
1176 FlashSetRandomizer:
1177         stp     x29, x30, [sp, -48]!
1178         add     x29, sp, 0
1179         str     x21, [sp,32]
1180         uxtb    w21, w0
1181         adrp    x0, :got:gNandcVer
1182         stp     x19, x20, [sp,16]
1183         mov     w19, w1
1184         ldr     x0, [x0, #:got_lo12:gNandcVer]
1185         ldr     w0, [x0]
1186         cmp     w0, 5
1187         bls     .L158
1188         adrp    x0, :got:random_seed
1189         and     w19, w1, 127
1190         ldr     x0, [x0, #:got_lo12:random_seed]
1191         ldrh    w19, [x0,w19,uxtw 1]
1192         adrp    x0, :got:gNandRandomizer
1193         ldr     x0, [x0, #:got_lo12:gNandRandomizer]
1194         ldrb    w0, [x0]
1195         cbz     w0, .L159
1196         mov     w0, w21
1197         bl      FlashRsvdBlkChk
1198         cmp     w0, wzr
1199         orr     w1, w19, -1073741824
1200         csel    w19, w1, w19, ne
1201 .L159:
1202         mov     w0, w21
1203         mov     w1, w19
1204         b       .L173
1205 .L158:
1206         cmp     w0, 4
1207         bne     .L157
1208         adrp    x0, :got:random_seed
1209         and     w2, w1, 127
1210         ldr     x0, [x0, #:got_lo12:random_seed]
1211         ldrh    w20, [x0,w2,uxtw 1]
1212         mov     w0, w21
1213         lsl     w20, w20, 8
1214         bl      FlashRsvdBlkChk
1215         cbz     w0, .L161
1216         adrp    x0, :got:gNandRandomizer
1217         ldr     x0, [x0, #:got_lo12:gNandRandomizer]
1218         ldrb    w0, [x0]
1219         cbz     w0, .L161
1220         ubfiz   w19, w19, 1, 7
1221         orr     w19, w19, 1
1222         orr     w20, w20, w19
1223 .L161:
1224         mov     w0, w21
1225         mov     w1, w20
1226 .L173:
1227         bl      NandcRandmzSel
1228 .L157:
1229         ldp     x19, x20, [sp,16]
1230         ldr     x21, [sp,32]
1231         ldp     x29, x30, [sp], 48
1232         ret
1233         .size   FlashSetRandomizer, .-FlashSetRandomizer
1234         .align  2
1235         .global FlashReadCmd
1236         .type   FlashReadCmd, %function
1237 FlashReadCmd:
1238         stp     x29, x30, [sp, -48]!
1239         add     x29, sp, 0
1240         str     x19, [sp,16]
1241         uxtb    w19, w0
1242         mov     w0, w19
1243         str     x1, [x29,40]
1244         bl      NandcGetChipIf
1245         str     wzr, [x0,8]
1246         str     wzr, [x0,4]
1247         ldr     x1, [x29,40]
1248         str     wzr, [x0,4]
1249         and     w2, w1, 255
1250         str     w2, [x0,4]
1251         lsr     w2, w1, 8
1252         str     w2, [x0,4]
1253         lsr     w2, w1, 16
1254         str     w2, [x0,4]
1255         mov     w2, 48
1256         str     w2, [x0,8]
1257         mov     w0, w19
1258         bl      FlashSetRandomizer
1259         ldr     x19, [sp,16]
1260         ldp     x29, x30, [sp], 48
1261         ret
1262         .size   FlashReadCmd, .-FlashReadCmd
1263         .align  2
1264         .global HynixGetReadRetryDefault
1265         .type   HynixGetReadRetryDefault, %function
1266 HynixGetReadRetryDefault:
1267         stp     x29, x30, [sp, -144]!
1268         mov     w4, -83
1269         mov     w3, -82
1270         add     x29, sp, 0
1271         stp     x19, x20, [sp,16]
1272         adrp    x19, :got:gReadRetryInfo
1273         stp     x27, x28, [sp,80]
1274         stp     x21, x22, [sp,32]
1275         ldr     x1, [x19, #:got_lo12:gReadRetryInfo]
1276         mov     w28, w0
1277         stp     x23, x24, [sp,48]
1278         stp     x25, x26, [sp,64]
1279         strb    w0, [x1]
1280         mov     w0, -84
1281         strb    w4, [x1,5]
1282         cmp     w28, 2
1283         strb    w0, [x1,4]
1284         mov     w0, -81
1285         strb    w3, [x1,6]
1286         strb    w0, [x1,7]
1287         bne     .L176
1288         mov     w0, -89
1289         strb    w0, [x1,4]
1290         adrp    x0, :got:refValueDefault
1291         mov     w1, -9
1292         ldr     x0, [x0, #:got_lo12:refValueDefault]
1293         strb    w1, [x0,17]
1294         b       .L213
1295 .L176:
1296         cmp     w28, 3
1297         bne     .L178
1298         mov     w0, -80
1299         strb    w0, [x1,4]
1300         mov     w0, -79
1301         strb    w0, [x1,5]
1302         mov     w0, -78
1303         strb    w0, [x1,6]
1304         mov     w0, -77
1305         strb    w0, [x1,7]
1306         mov     w0, -76
1307         strb    w0, [x1,8]
1308         mov     w0, -75
1309         strb    w0, [x1,9]
1310         mov     w0, -74
1311         strb    w0, [x1,10]
1312         mov     w0, -73
1313         b       .L229
1314 .L178:
1315         cmp     w28, 4
1316         bne     .L179
1317         mov     w5, -52
1318         strb    w5, [x1,4]
1319         mov     w5, -65
1320         strb    w5, [x1,5]
1321         mov     w5, -86
1322         strb    w5, [x1,6]
1323         mov     w5, -85
1324         strb    w4, [x1,9]
1325         strb    w5, [x1,7]
1326         mov     w5, -51
1327         strb    w3, [x1,10]
1328         strb    w5, [x1,8]
1329 .L229:
1330         mov     w21, 8
1331         strb    w0, [x1,11]
1332         mov     w20, w21
1333         b       .L177
1334 .L179:
1335         cmp     w28, 5
1336         bne     .L180
1337         mov     w0, 56
1338         strb    w0, [x1,4]
1339         mov     w0, 57
1340         strb    w0, [x1,5]
1341         mov     w0, 58
1342         mov     w21, 8
1343         strb    w0, [x1,6]
1344         mov     w0, 59
1345         strb    w0, [x1,7]
1346         b       .L228
1347 .L180:
1348         cmp     w28, 6
1349         bne     .L213
1350         mov     w0, 14
1351         strb    w0, [x1,4]
1352         mov     w0, 15
1353         strb    w0, [x1,5]
1354         mov     w0, 16
1355         mov     w21, 12
1356         strb    w0, [x1,6]
1357         mov     w0, 17
1358         strb    w0, [x1,7]
1359         b       .L228
1360 .L213:
1361         mov     w21, 7
1362 .L228:
1363         mov     w20, 4
1364 .L177:
1365         sub     w0, w28, #1
1366         cmp     w0, 1
1367         bhi     .L225
1368         mov     w27, 0
1369         adrp    x23, :got:gNandMaxDie
1370         adrp    x24, :got:DieCsIndex
1371         mov     w25, 55
1372         adrp    x26, :got:refValueDefault
1373 .L181:
1374         ldr     x0, [x23, #:got_lo12:gNandMaxDie]
1375         ldrb    w0, [x0]
1376         cmp     w0, w27
1377         bls     .L188
1378         ldr     x0, [x24, #:got_lo12:DieCsIndex]
1379         mov     x28, 0
1380         ldr     x22, [x19, #:got_lo12:gReadRetryInfo]
1381         ldrb    w0, [x0,w27,sxtw]
1382         sbfiz   x1, x0, 6, 32
1383         add     x22, x22, x1
1384         add     x22, x22, 20
1385         bl      NandcGetChipIf
1386         mov     x1, x0
1387 .L183:
1388         str     w25, [x1,8]
1389         str     x1, [x29,136]
1390         ldr     x0, [x19, #:got_lo12:gReadRetryInfo]
1391         add     x0, x28, x0
1392         ldrb    w0, [x0,4]
1393         str     w0, [x1,4]
1394         mov     w0, 80
1395         bl      NandcDelayns
1396         ldr     x1, [x29,136]
1397         ldr     w0, [x1]
1398         strb    w0, [x22,x28]
1399         add     x28, x28, 1
1400         cmp     w20, w28, uxtb
1401         bhi     .L183
1402         mov     x0, 0
1403 .L184:
1404         add     w2, w0, 8
1405         mov     x1, 0
1406 .L185:
1407         ldr     x3, [x26, #:got_lo12:refValueDefault]
1408         add     x4, x1, x0
1409         add     x1, x1, 4
1410         add     x3, x4, x3
1411         cmp     x1, 24
1412         ldrb    w4, [x3,4]
1413         ldrb    w3, [x22,x0]
1414         add     w3, w4, w3
1415         strb    w3, [x22,w2,sxtw]
1416         add     w2, w2, 8
1417         bne     .L185
1418         add     x0, x0, 1
1419         cmp     x0, 4
1420         bne     .L184
1421         add     w27, w27, 1
1422         strb    wzr, [x22,16]
1423         strb    wzr, [x22,24]
1424         strb    wzr, [x22,32]
1425         uxtb    w27, w27
1426         strb    wzr, [x22,40]
1427         strb    wzr, [x22,48]
1428         strb    wzr, [x22,41]
1429         strb    wzr, [x22,49]
1430         b       .L181
1431 .L225:
1432         sub     w0, w28, #3
1433         cmp     w0, 3
1434         bhi     .L188
1435         mul     w0, w20, w21
1436         sub     w25, w20, #1
1437         cmp     w28, 6
1438         asr     w24, w0, 2
1439         lsl     w0, w0, 4
1440         str     w0, [x29,136]
1441         lsl     w0, w24, 1
1442         mov     w1, 4
1443         str     w0, [x29,128]
1444         mov     w0, 8
1445         uxtb    x25, w25
1446         csel    w0, w1, w0, eq
1447         mov     w22, 0
1448         str     w0, [x29,132]
1449         sub     w27, w28, #5
1450         add     x0, x25, 1
1451         str     x0, [x29,120]
1452 .L189:
1453         adrp    x0, :got:gNandMaxDie
1454         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
1455         ldrb    w0, [x0]
1456         cmp     w0, w22
1457         bhi     .L212
1458 .L188:
1459         ldr     x19, [x19, #:got_lo12:gReadRetryInfo]
1460         strb    w20, [x19,1]
1461         strb    w21, [x19,2]
1462         ldp     x19, x20, [sp,16]
1463         ldp     x21, x22, [sp,32]
1464         ldp     x23, x24, [sp,48]
1465         ldp     x25, x26, [sp,64]
1466         ldp     x27, x28, [sp,80]
1467         ldp     x29, x30, [sp], 144
1468         ret
1469 .L212:
1470         adrp    x0, :got:DieCsIndex
1471         ldr     x3, [x19, #:got_lo12:gReadRetryInfo]
1472         str     x3, [x29,104]
1473         ldr     x0, [x0, #:got_lo12:DieCsIndex]
1474         ldrb    w23, [x0,w22,sxtw]
1475         mov     w0, w23
1476         sbfiz   x26, x23, 6, 32
1477         add     x26, x3, x26
1478         bl      NandcGetChipIf
1479         mov     x25, x0
1480         mov     w4, 255
1481         str     w4, [x0,8]
1482         mov     w0, w23
1483         str     x4, [x29,112]
1484         add     x26, x26, 20
1485         bl      NandcWaitFlashReady
1486         mov     w0, 54
1487         cmp     w28, 4
1488         str     w0, [x25,8]
1489         ldr     x4, [x29,112]
1490         ldr     x3, [x29,104]
1491         bne     .L190
1492         mov     w0, 64
1493         str     w4, [x25,4]
1494         str     w0, [x25]
1495         mov     w0, 204
1496         b       .L230
1497 .L190:
1498         cmp     w27, 1
1499         bhi     .L192
1500         ldrb    w0, [x3,4]
1501         str     w0, [x25,4]
1502         mov     w0, 82
1503         b       .L231
1504 .L192:
1505         mov     w0, 174
1506         str     w0, [x25,4]
1507         str     wzr, [x25]
1508         mov     w0, 176
1509 .L230:
1510         str     w0, [x25,4]
1511         mov     w0, 77
1512 .L231:
1513         str     w0, [x25]
1514         mov     w0, 22
1515         str     w0, [x25,8]
1516         mov     w0, 23
1517         str     w0, [x25,8]
1518         mov     w0, 4
1519         str     w0, [x25,8]
1520         mov     w0, 25
1521         str     w0, [x25,8]
1522         cmp     w28, 6
1523         str     wzr, [x25,8]
1524         str     wzr, [x25,4]
1525         str     wzr, [x25,4]
1526         bne     .L193
1527         mov     w0, 31
1528         str     w0, [x25,4]
1529         b       .L194
1530 .L193:
1531         str     wzr, [x25,4]
1532 .L194:
1533         mov     w3, 2
1534         str     w3, [x25,4]
1535         str     wzr, [x25,4]
1536         mov     w0, 48
1537         str     w0, [x25,8]
1538         mov     w0, w23
1539         str     x3, [x29,112]
1540         bl      NandcWaitFlashReady
1541         ldr     x3, [x29,112]
1542         mov     w0, 16
1543         cmp     w27, 1
1544         csel    w3, w3, w0, hi
1545         mov     w0, 0
1546 .L196:
1547         add     w0, w0, 1
1548         ldr     w4, [x25]
1549         uxtb    w0, w0
1550         cmp     w0, w3
1551         bne     .L196
1552         adrp    x4, :got:gFlashPageBuffer0
1553         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
1554         ldr     x7, [x0]
1555         mov     x0, 0
1556 .L197:
1557         ldr     w1, [x29,136]
1558         cmp     w1, w0
1559         ble     .L232
1560         ldr     w3, [x25]
1561         strb    w3, [x7,x0]
1562         add     x0, x0, 1
1563         b       .L197
1564 .L232:
1565         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
1566         mov     w6, w24
1567         mov     w5, 8
1568         ldr     x9, [x0]
1569 .L200:
1570         mov     w0, 0
1571 .L199:
1572         add     w3, w0, w6
1573         add     w0, w0, 1
1574         sbfiz   x3, x3, 2, 32
1575         cmp     w0, w24
1576         ldr     w8, [x9,x3]
1577         mvn     w8, w8
1578         str     w8, [x9,x3]
1579         bne     .L199
1580         ldr     w0, [x29,128]
1581         subs    w5, w5, #1
1582         add     w6, w6, w0
1583         bne     .L200
1584         mov     x5, 0
1585         mov     w13, 1
1586 .L201:
1587         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
1588         mov     w3, 0
1589         mov     w8, w3
1590         ldr     x12, [x0]
1591 .L205:
1592         lsl     w6, w13, w8
1593         mov     w10, w5
1594         mov     w0, 16
1595         mov     w9, 0
1596 .L203:
1597         ldr     w11, [x12,w10,sxtw 2]
1598         add     w10, w10, w24
1599         and     w11, w6, w11
1600         cmp     w11, w6
1601         csinc   w9, w9, w9, ne
1602         subs    w0, w0, #1
1603         bne     .L203
1604         cmp     w9, 9
1605         orr     w6, w3, w6
1606         add     w8, w8, 1
1607         csel    w3, w6, w3, cs
1608         cmp     w8, 32
1609         bne     .L205
1610         str     w3, [x12,x5,lsl 2]
1611         add     x5, x5, 1
1612         cmp     w24, w5
1613         bgt     .L201
1614         mov     w4, w0
1615 .L208:
1616         mov     x3, 0
1617 .L207:
1618         add     w5, w0, w3
1619         ldrb    w6, [x7,x3]
1620         add     x3, x3, 1
1621         cmp     w20, w3, uxtb
1622         strb    w6, [x26,w5,sxtw]
1623         bhi     .L207
1624         ldr     x1, [x29,120]
1625         add     w4, w4, 1
1626         cmp     w4, w21
1627         add     x7, x7, x1
1628         ldr     w1, [x29,132]
1629         add     w0, w0, w1
1630         blt     .L208
1631         mov     w0, 255
1632         str     w0, [x25,8]
1633         mov     w0, w23
1634         bl      NandcWaitFlashReady
1635         cmp     w27, 1
1636         bhi     .L210
1637         mov     w0, 54
1638         str     w0, [x25,8]
1639         mov     w1, -1
1640         ldr     x0, [x19, #:got_lo12:gReadRetryInfo]
1641         ldrb    w0, [x0,4]
1642         str     w0, [x25,4]
1643         mov     w0, 22
1644         str     wzr, [x25]
1645         str     w0, [x25,8]
1646         mov     w0, w22
1647         bl      FlashReadCmd
1648         b       .L211
1649 .L210:
1650         mov     w0, 56
1651         str     w0, [x25,8]
1652 .L211:
1653         mov     w0, w23
1654         add     w22, w22, 1
1655         bl      NandcWaitFlashReady
1656         uxtb    w22, w22
1657         b       .L189
1658         .size   HynixGetReadRetryDefault, .-HynixGetReadRetryDefault
1659         .align  2
1660         .global FlashReadDpDataOutCmd
1661         .type   FlashReadDpDataOutCmd, %function
1662 FlashReadDpDataOutCmd:
1663         stp     x29, x30, [sp, -48]!
1664         add     x29, sp, 0
1665         str     x19, [sp,16]
1666         uxtb    w19, w0
1667         mov     w0, w19
1668         str     x1, [x29,40]
1669         bl      NandcGetChipIf
1670         adrp    x2, :got:gNandOptPara
1671         ldr     x1, [x29,40]
1672         and     w4, w1, 255
1673         lsr     w3, w1, 8
1674         ldr     x2, [x2, #:got_lo12:gNandOptPara]
1675         ldrb    w2, [x2,16]
1676         cmp     w2, 1
1677         lsr     w2, w1, 16
1678         bne     .L234
1679         mov     w5, 6
1680         str     w5, [x0,8]
1681         str     wzr, [x0,4]
1682         str     wzr, [x0,4]
1683         str     w4, [x0,4]
1684         str     w3, [x0,4]
1685         str     w2, [x0,4]
1686         b       .L236
1687 .L234:
1688         str     wzr, [x0,8]
1689         str     wzr, [x0,4]
1690         str     wzr, [x0,4]
1691         str     w4, [x0,4]
1692         str     w3, [x0,4]
1693         str     w2, [x0,4]
1694         mov     w2, 5
1695         str     w2, [x0,8]
1696         str     wzr, [x0,4]
1697         str     wzr, [x0,4]
1698 .L236:
1699         mov     w2, 224
1700         str     w2, [x0,8]
1701         mov     w0, w19
1702         bl      FlashSetRandomizer
1703         ldr     x19, [sp,16]
1704         ldp     x29, x30, [sp], 48
1705         ret
1706         .size   FlashReadDpDataOutCmd, .-FlashReadDpDataOutCmd
1707         .align  2
1708         .global FlashReadDpCmd
1709         .type   FlashReadDpCmd, %function
1710 FlashReadDpCmd:
1711         stp     x29, x30, [sp, -80]!
1712         add     x29, sp, 0
1713         stp     x21, x22, [sp,32]
1714         uxtb    w21, w0
1715         str     x23, [sp,48]
1716         mov     w0, w21
1717         str     x1, [x29,64]
1718         stp     x19, x20, [sp,16]
1719         str     x2, [x29,72]
1720         bl      NandcGetChipIf
1721         adrp    x3, :got:gNandOptPara
1722         mov     x19, x0
1723         ldr     x1, [x29,64]
1724         ldr     x2, [x29,72]
1725         ldr     x3, [x3, #:got_lo12:gNandOptPara]
1726         and     w5, w1, 255
1727         lsr     w4, w1, 8
1728         and     w23, w2, 255
1729         lsr     w22, w2, 8
1730         lsr     w20, w2, 16
1731         ldrb    w0, [x3,16]
1732         cmp     w0, 1
1733         lsr     w0, w1, 16
1734         bne     .L238
1735         ldrb    w2, [x3,8]
1736         str     w2, [x19,8]
1737         str     wzr, [x19,4]
1738         str     wzr, [x19,4]
1739         str     w5, [x19,4]
1740         str     w4, [x19,4]
1741         str     w0, [x19,4]
1742         str     x1, [x29,72]
1743         ldrb    w0, [x3,9]
1744         str     w0, [x19,8]
1745         mov     w0, w21
1746         bl      NandcWaitFlashReady
1747         str     wzr, [x19,8]
1748         str     wzr, [x19,4]
1749         mov     w0, 48
1750         str     wzr, [x19,4]
1751         str     w23, [x19,4]
1752         str     w22, [x19,4]
1753         str     w20, [x19,4]
1754         str     w0, [x19,8]
1755         ldr     x1, [x29,72]
1756         b       .L239
1757 .L238:
1758         ldrb    w2, [x3,8]
1759         str     w2, [x19,8]
1760         str     w5, [x19,4]
1761         str     w4, [x19,4]
1762         str     w0, [x19,4]
1763         ldrb    w0, [x3,9]
1764         str     w0, [x19,8]
1765         mov     w0, 48
1766         str     w23, [x19,4]
1767         str     w22, [x19,4]
1768         str     w20, [x19,4]
1769         str     w0, [x19,8]
1770 .L239:
1771         mov     w0, w21
1772         bl      FlashSetRandomizer
1773         ldr     x23, [sp,48]
1774         ldp     x19, x20, [sp,16]
1775         ldp     x21, x22, [sp,32]
1776         ldp     x29, x30, [sp], 80
1777         ret
1778         .size   FlashReadDpCmd, .-FlashReadDpCmd
1779         .align  2
1780         .global FlashProgFirstCmd
1781         .type   FlashProgFirstCmd, %function
1782 FlashProgFirstCmd:
1783         stp     x29, x30, [sp, -48]!
1784         add     x29, sp, 0
1785         str     x19, [sp,16]
1786         uxtb    w19, w0
1787         mov     w0, w19
1788         str     x1, [x29,40]
1789         bl      NandcGetChipIf
1790         mov     w2, 128
1791         str     w2, [x0,8]
1792         str     wzr, [x0,4]
1793         ldr     x1, [x29,40]
1794         str     wzr, [x0,4]
1795         and     w2, w1, 255
1796         str     w2, [x0,4]
1797         lsr     w2, w1, 8
1798         str     w2, [x0,4]
1799         lsr     w2, w1, 16
1800         str     w2, [x0,4]
1801         mov     w0, w19
1802         bl      FlashSetRandomizer
1803         ldr     x19, [sp,16]
1804         ldp     x29, x30, [sp], 48
1805         ret
1806         .size   FlashProgFirstCmd, .-FlashProgFirstCmd
1807         .align  2
1808         .global FlashProgDpSecondCmd
1809         .type   FlashProgDpSecondCmd, %function
1810 FlashProgDpSecondCmd:
1811         stp     x29, x30, [sp, -48]!
1812         add     x29, sp, 0
1813         str     x19, [sp,16]
1814         uxtb    w19, w0
1815         mov     w0, w19
1816         str     x1, [x29,40]
1817         bl      NandcGetChipIf
1818         adrp    x2, :got:gNandOptPara
1819         ldr     x1, [x29,40]
1820         ldr     x2, [x2, #:got_lo12:gNandOptPara]
1821         ldrb    w2, [x2,11]
1822         str     w2, [x0,8]
1823         and     w2, w1, 255
1824         str     wzr, [x0,4]
1825         str     wzr, [x0,4]
1826         str     w2, [x0,4]
1827         lsr     w2, w1, 8
1828         str     w2, [x0,4]
1829         lsr     w2, w1, 16
1830         str     w2, [x0,4]
1831         mov     w0, w19
1832         bl      FlashSetRandomizer
1833         ldr     x19, [sp,16]
1834         ldp     x29, x30, [sp], 48
1835         ret
1836         .size   FlashProgDpSecondCmd, .-FlashProgDpSecondCmd
1837         .align  2
1838         .global FlashDeInit
1839         .type   FlashDeInit, %function
1840 FlashDeInit:
1841         stp     x29, x30, [sp, -32]!
1842         mov     w0, 0
1843         add     x29, sp, 0
1844         str     x19, [sp,16]
1845         adrp    x19, :got:gFlashToggleModeEn
1846         bl      NandcWaitFlashReady
1847         bl      FlashSetReadRetryDefault
1848         ldr     x19, [x19, #:got_lo12:gFlashToggleModeEn]
1849         ldrb    w0, [x19]
1850         cbz     w0, .L243
1851         adrp    x0, :got:gFlashInterfaceMode
1852         ldr     x0, [x0, #:got_lo12:gFlashInterfaceMode]
1853         ldrb    w0, [x0]
1854         tbz     x0, 0, .L243
1855         mov     w0, 1
1856         bl      FlashSetInterfaceMode
1857         mov     w0, 1
1858         bl      NandcSetMode
1859         strb    wzr, [x19]
1860 .L243:
1861         mov     w0, 0
1862         mov     w1, 0
1863         bl      NandcRandmzSel
1864         ldr     x19, [sp,16]
1865         mov     w0, 0
1866         ldp     x29, x30, [sp], 32
1867         ret
1868         .size   FlashDeInit, .-FlashDeInit
1869         .align  2
1870         .global NandcTimeCfg
1871         .type   NandcTimeCfg, %function
1872 NandcTimeCfg:
1873         stp     x29, x30, [sp, -32]!
1874         add     x29, sp, 0
1875         str     x19, [sp,16]
1876         mov     w19, w0
1877         mov     w0, 0
1878         bl      rknand_get_clk_rate
1879         mov     w2, 16960
1880         adrp    x1, :got:gpNandc
1881         movk    w2, 0xf, lsl 16
1882         sdiv    w0, w0, w2
1883         ldr     x1, [x1, #:got_lo12:gpNandc]
1884         cmp     w0, 250
1885         ble     .L251
1886         ldr     x0, [x1]
1887         mov     w1, 8354
1888         b       .L258
1889 .L251:
1890         cmp     w0, 220
1891         ble     .L253
1892         ldr     x0, [x1]
1893         b       .L259
1894 .L253:
1895         cmp     w0, 185
1896         ble     .L254
1897         ldr     x0, [x1]
1898         mov     w1, 4226
1899         b       .L258
1900 .L254:
1901         cmp     w0, 160
1902         ldr     x0, [x1]
1903         ble     .L255
1904         mov     w1, 4194
1905         b       .L258
1906 .L255:
1907         cmp     w19, 35
1908         mov     w1, 4193
1909         bls     .L258
1910         cmp     w19, 99
1911         mov     w1, 4225
1912         bls     .L258
1913 .L259:
1914         mov     w1, 8322
1915 .L258:
1916         str     w1, [x0,4]
1917         ldr     x19, [sp,16]
1918         ldp     x29, x30, [sp], 32
1919         ret
1920         .size   NandcTimeCfg, .-NandcTimeCfg
1921         .align  2
1922         .global FlashTimingCfg
1923         .type   FlashTimingCfg, %function
1924 FlashTimingCfg:
1925         sub     w1, w0, #4096
1926         sub     w1, w1, #97
1927         stp     x29, x30, [sp, -16]!
1928         and     w1, w1, -33
1929         cmp     w1, 1
1930         add     x29, sp, 0
1931         bls     .L261
1932         mov     w1, 8322
1933         cmp     w0, w1
1934         bne     .L262
1935 .L261:
1936         adrp    x1, :got:gpNandc
1937         ldr     x1, [x1, #:got_lo12:gpNandc]
1938         ldr     x1, [x1]
1939         str     w0, [x1,4]
1940 .L262:
1941         adrp    x0, :got:gNandParaInfo
1942         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
1943         ldrb    w0, [x0,21]
1944         bl      NandcTimeCfg
1945         ldp     x29, x30, [sp], 16
1946         ret
1947         .size   FlashTimingCfg, .-FlashTimingCfg
1948         .align  2
1949         .global NandcGetTimeCfg
1950         .type   NandcGetTimeCfg, %function
1951 NandcGetTimeCfg:
1952         adrp    x4, :got:gpNandc
1953         ldr     x4, [x4, #:got_lo12:gpNandc]
1954         ldr     x5, [x4]
1955         ldr     w5, [x5,4]
1956         str     w5, [x0]
1957         ldr     x0, [x4]
1958         ldr     w0, [x0]
1959         str     w0, [x1]
1960         ldr     x0, [x4]
1961         ldr     w0, [x0,304]
1962         str     w0, [x2]
1963         ldr     x1, [x4]
1964         ldr     w0, [x1,308]
1965         ldr     w1, [x1,344]
1966         and     w0, w0, 255
1967         orr     w0, w0, w1, lsl 16
1968         str     w0, [x3]
1969         ret
1970         .size   NandcGetTimeCfg, .-NandcGetTimeCfg
1971         .align  2
1972         .global NandcBchSel
1973         .type   NandcBchSel, %function
1974 NandcBchSel:
1975         adrp    x1, :got:gpNandc
1976         uxtb    w0, w0
1977         cmp     w0, 16
1978         ldr     x1, [x1, #:got_lo12:gpNandc]
1979         ldr     x2, [x1]
1980         mov     w1, 1
1981         str     w1, [x2,8]
1982         adrp    x1, :got:gNandcEccBits
1983         ldr     x1, [x1, #:got_lo12:gNandcEccBits]
1984         str     w0, [x1]
1985         mov     w1, 4096
1986         bne     .L265
1987 .L268:
1988         and     w1, w1, -17
1989         b       .L266
1990 .L265:
1991         cmp     w0, 24
1992         bne     .L267
1993         orr     w1, w1, 16
1994         b       .L266
1995 .L267:
1996         cmp     w0, 40
1997         orr     w1, w1, 262144
1998         orr     w1, w1, 16
1999         beq     .L268
2000 .L266:
2001         orr     w1, w1, 1
2002         str     w1, [x2,12]
2003         ret
2004         .size   NandcBchSel, .-NandcBchSel
2005         .align  2
2006         .global FlashBchSel
2007         .type   FlashBchSel, %function
2008 FlashBchSel:
2009         adrp    x1, :got:gNandFlashEccBits
2010         uxtb    w0, w0
2011         stp     x29, x30, [sp, -16]!
2012         add     x29, sp, 0
2013         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
2014         strb    w0, [x1]
2015         bl      NandcBchSel
2016         ldp     x29, x30, [sp], 16
2017         ret
2018         .size   FlashBchSel, .-FlashBchSel
2019         .align  2
2020         .global FlashResume
2021         .type   FlashResume, %function
2022 FlashResume:
2023         adrp    x1, :got:gpNandc
2024         stp     x29, x30, [sp, -48]!
2025         add     x29, sp, 0
2026         ldr     x1, [x1, #:got_lo12:gpNandc]
2027         stp     x19, x20, [sp,16]
2028         str     x21, [sp,32]
2029         adrp    x19, .LANCHOR0
2030         add     x0, x19, :lo12:.LANCHOR0
2031         mov     x20, 0
2032         ldr     x2, [x1]
2033         adrp    x21, :got:IDByte
2034         ldr     w3, [x19,#:lo12:.LANCHOR0]
2035         str     w3, [x2]
2036         ldr     w3, [x0,4]
2037         ldr     x2, [x1]
2038         str     w3, [x2,4]
2039         ldr     w2, [x0,8]
2040         ldr     x1, [x1]
2041         str     w2, [x1,8]
2042         ldr     w2, [x0,12]
2043         str     w2, [x1,12]
2044         ldr     w2, [x0,16]
2045         str     w2, [x1,304]
2046         ldr     w2, [x0,20]
2047         str     w2, [x1,308]
2048         ldr     w2, [x0,24]
2049         str     w2, [x1,336]
2050         ldr     w0, [x0,28]
2051         str     w0, [x1,344]
2052 .L275:
2053         lsl     x0, x20, 3
2054         ldr     x1, [x21, #:got_lo12:IDByte]
2055         ldrb    w0, [x0,x1]
2056         sub     w0, w0, #1
2057         uxtb    w0, w0
2058         cmp     w0, 253
2059         bhi     .L274
2060         mov     w0, w20
2061         bl      FlashReset
2062 .L274:
2063         add     x20, x20, 1
2064         cmp     x20, 4
2065         bne     .L275
2066         adrp    x0, :got:gFlashToggleModeEn
2067         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
2068         ldrb    w0, [x0]
2069         cbz     w0, .L276
2070         adrp    x20, :got:gFlashInterfaceMode
2071         mov     w0, 1
2072         add     x19, x19, :lo12:.LANCHOR0
2073         bl      NandcSetMode
2074         ldr     x20, [x20, #:got_lo12:gFlashInterfaceMode]
2075         ldrb    w0, [x20]
2076         bl      FlashSetInterfaceMode
2077         ldrb    w0, [x20]
2078         bl      NandcSetMode
2079         ldr     w0, [x19,16]
2080         lsr     w0, w0, 8
2081         bl      NandcSetDdrPara
2082 .L276:
2083         adrp    x0, :got:gpNandParaInfo
2084         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
2085         ldr     x0, [x0]
2086         ldrb    w0, [x0,20]
2087         bl      FlashBchSel
2088         ldr     x21, [sp,32]
2089         mov     w0, 0
2090         ldp     x19, x20, [sp,16]
2091         ldp     x29, x30, [sp], 48
2092         ret
2093         .size   FlashResume, .-FlashResume
2094         .align  2
2095         .global NandCIrqEnable
2096         .type   NandCIrqEnable, %function
2097 NandCIrqEnable:
2098         ldr     w3, [x0,368]
2099         mov     x2, 1
2100         lsl     x1, x2, x1
2101         orr     w3, w3, w1
2102         str     w3, [x0,368]
2103         ldr     w2, [x0,364]
2104         orr     w1, w2, w1
2105         str     w1, [x0,364]
2106         ret
2107         .size   NandCIrqEnable, .-NandCIrqEnable
2108         .align  2
2109         .global NandCIrqDisable
2110         .type   NandCIrqDisable, %function
2111 NandCIrqDisable:
2112         ldr     w3, [x0,368]
2113         mov     x2, 1
2114         lsl     x1, x2, x1
2115         orr     w3, w3, w1
2116         str     w3, [x0,368]
2117         ldr     w2, [x0,364]
2118         bic     w1, w2, w1
2119         str     w1, [x0,364]
2120         ret
2121         .size   NandCIrqDisable, .-NandCIrqDisable
2122         .align  2
2123         .global rk_nandc_get_irq_status
2124         .type   rk_nandc_get_irq_status, %function
2125 rk_nandc_get_irq_status:
2126         ldr     w0, [x0,372]
2127         ret
2128         .size   rk_nandc_get_irq_status, .-rk_nandc_get_irq_status
2129         .align  2
2130         .global rk_nandc_flash_ready
2131         .type   rk_nandc_flash_ready, %function
2132 rk_nandc_flash_ready:
2133         stp     x29, x30, [sp, -16]!
2134         mov     w1, 1
2135         add     x29, sp, 0
2136         bl      NandCIrqDisable
2137         ldp     x29, x30, [sp], 16
2138         ret
2139         .size   rk_nandc_flash_ready, .-rk_nandc_flash_ready
2140         .align  2
2141         .global NandcIqrWaitFlashReady
2142         .type   NandcIqrWaitFlashReady, %function
2143 NandcIqrWaitFlashReady:
2144         stp     x29, x30, [sp, -32]!
2145         add     x29, sp, 0
2146         str     x19, [sp,16]
2147         mov     x19, x0
2148         bl      rk_nandc_rb_irq_flag_init
2149         mov     x0, x19
2150         mov     w1, 1
2151         bl      NandCIrqEnable
2152         ldr     w0, [x19]
2153         tbnz    x0, 9, .L286
2154         mov     x0, x19
2155         bl      wait_for_nand_flash_ready
2156         b       .L285
2157 .L286:
2158         mov     x0, x19
2159         mov     w1, 1
2160         bl      NandCIrqDisable
2161 .L285:
2162         ldr     x19, [sp,16]
2163         ldp     x29, x30, [sp], 32
2164         ret
2165         .size   NandcIqrWaitFlashReady, .-NandcIqrWaitFlashReady
2166         .align  2
2167         .global FlashEraseBlocks
2168         .type   FlashEraseBlocks, %function
2169 FlashEraseBlocks:
2170         stp     x29, x30, [sp, -128]!
2171         add     x29, sp, 0
2172         stp     x19, x20, [sp,16]
2173         stp     x21, x22, [sp,32]
2174         stp     x25, x26, [sp,64]
2175         stp     x27, x28, [sp,80]
2176         stp     x23, x24, [sp,48]
2177         mov     x20, x0
2178         mov     w21, w1
2179         mov     w19, 0
2180         mov     w22, 56
2181         add     x25, x29, 120
2182         add     x26, x29, 124
2183         adrp    x27, :got:gMultiPageProgEn
2184         adrp    x28, :got:gDieOp
2185 .L289:
2186         cmp     w19, w21
2187         adrp    x23, :got:gNandMaxDie
2188         bcs     .L304
2189         umull   x5, w19, w22
2190         mov     w1, 0
2191         sub     w4, w21, w19
2192         add     x23, x20, x5
2193         mov     x2, x25
2194         mov     x0, x23
2195         mov     x3, x26
2196         str     x5, [x29,104]
2197         bl      LogAddr2PhyAddr
2198         mov     w24, w0
2199         adrp    x1, :got:gNandMaxDie
2200         ldr     w0, [x29,124]
2201         ldr     x5, [x29,104]
2202         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
2203         ldrb    w1, [x1]
2204         cmp     w0, w1
2205         bcc     .L290
2206         mov     w0, -1
2207         str     w0, [x20,x5]
2208         b       .L291
2209 .L290:
2210         ldr     x1, [x27, #:got_lo12:gMultiPageProgEn]
2211         mov     x5, 24
2212         ldr     x4, [x28, #:got_lo12:gDieOp]
2213         ldrb    w1, [x1]
2214         cmp     w1, wzr
2215         uxtw    x1, w0
2216         csel    w24, w24, wzr, ne
2217         madd    x1, x1, x5, x4
2218         adrp    x4, :got:gDieOp
2219         ldr     x1, [x1,8]
2220         cbz     x1, .L293
2221         str     x4, [x29,104]
2222         bl      FlashWaitCmdDone
2223         ldr     x4, [x29,104]
2224 .L293:
2225         ldr     x2, [x4, #:got_lo12:gDieOp]
2226         mov     x1, 24
2227         ldr     w0, [x29,124]
2228         madd    x1, x0, x1, x2
2229         ldr     w2, [x29,120]
2230         str     x23, [x1,8]
2231         str     xzr, [x1,16]
2232         str     w2, [x1,4]
2233         cbz     w24, .L294
2234         add     w2, w19, 1
2235         umull   x2, w2, w22
2236         add     x2, x20, x2
2237         str     x2, [x1,16]
2238 .L294:
2239         adrp    x1, :got:DieCsIndex
2240         ldr     x4, [x4, #:got_lo12:gDieOp]
2241         add     w19, w19, w24
2242         ldr     x1, [x1, #:got_lo12:DieCsIndex]
2243         ldrb    w23, [x1,x0]
2244         mov     x1, 24
2245         mul     x0, x0, x1
2246         strb    w23, [x4,x0]
2247         mov     w0, w23
2248         bl      NandcFlashCs
2249         adrp    x0, :got:DieAddrs
2250         ldr     w1, [x29,124]
2251         ldr     x0, [x0, #:got_lo12:DieAddrs]
2252         ldr     w0, [x0,x1,lsl 2]
2253         ldr     w1, [x29,120]
2254         cmp     w0, wzr
2255         mov     w0, w23
2256         cset    w2, ne
2257         bl      FlashWaitReadyEN
2258         ldr     w1, [x29,120]
2259         mov     w0, w23
2260         mov     w2, w24
2261         bl      FlashEraseCmd
2262         mov     w0, w23
2263         bl      NandcFlashDeCs
2264 .L291:
2265         add     w19, w19, 1
2266         b       .L289
2267 .L304:
2268         adrp    x0, :got:gpNandc
2269         mov     w19, 0
2270         ldr     x0, [x0, #:got_lo12:gpNandc]
2271         ldr     x0, [x0]
2272         bl      NandcIqrWaitFlashReady
2273 .L296:
2274         ldr     x0, [x23, #:got_lo12:gNandMaxDie]
2275         ldrb    w0, [x0]
2276         cmp     w19, w0
2277         bcs     .L305
2278         mov     w0, w19
2279         add     w19, w19, 1
2280         bl      FlashWaitCmdDone
2281         b       .L296
2282 .L305:
2283         mov     w0, 0
2284         ldp     x19, x20, [sp,16]
2285         ldp     x21, x22, [sp,32]
2286         ldp     x23, x24, [sp,48]
2287         ldp     x25, x26, [sp,64]
2288         ldp     x27, x28, [sp,80]
2289         ldp     x29, x30, [sp], 128
2290         ret
2291         .size   FlashEraseBlocks, .-FlashEraseBlocks
2292         .align  2
2293         .global rk_nandc_flash_xfer_completed
2294         .type   rk_nandc_flash_xfer_completed, %function
2295 rk_nandc_flash_xfer_completed:
2296         stp     x29, x30, [sp, -16]!
2297         mov     w1, 0
2298         add     x29, sp, 0
2299         bl      NandCIrqDisable
2300         ldp     x29, x30, [sp], 16
2301         ret
2302         .size   rk_nandc_flash_xfer_completed, .-rk_nandc_flash_xfer_completed
2303         .align  2
2304         .global NandcSendDumpDataStart
2305         .type   NandcSendDumpDataStart, %function
2306 NandcSendDumpDataStart:
2307         sub     sp, sp, #16
2308         mov     w2, 1
2309         mov     w1, 10
2310         bfi     w1, w2, 5, 2
2311         ldr     w2, [x0,16]
2312         str     w2, [sp,8]
2313         orr     w1, w1, 536870912
2314         orr     w1, w1, 1024
2315         ldr     w2, [sp,8]
2316         orr     w1, w1, 2097152
2317         and     w2, w2, -5
2318         str     w2, [sp,8]
2319         ldr     w2, [sp,8]
2320         add     sp, sp, 16
2321         str     w2, [x0,16]
2322         str     w1, [x0,8]
2323         orr     w1, w1, 4
2324         str     w1, [x0,8]
2325         ret
2326         .size   NandcSendDumpDataStart, .-NandcSendDumpDataStart
2327         .align  2
2328         .global NandcSendDumpDataDone
2329         .type   NandcSendDumpDataDone, %function
2330 NandcSendDumpDataDone:
2331         sub     sp, sp, #16
2332 .L309:
2333         ldr     w1, [x0,8]
2334         str     w1, [sp,8]
2335         ldr     w1, [sp,8]
2336         tbz     x1, 20, .L309
2337         add     sp, sp, 16
2338         ret
2339         .size   NandcSendDumpDataDone, .-NandcSendDumpDataDone
2340         .align  2
2341         .global NandcXferStart
2342         .type   NandcXferStart, %function
2343 NandcXferStart:
2344         stp     x29, x30, [sp, -96]!
2345         ubfiz   x0, x0, 4, 8
2346         ubfx    x3, x3, 1, 7
2347         add     x29, sp, 0
2348         str     x25, [sp,64]
2349         uxtb    w25, w1
2350         adrp    x1, :got:gNandChipMap
2351         stp     x19, x20, [sp,16]
2352         stp     x21, x22, [sp,32]
2353         ldr     x1, [x1, #:got_lo12:gNandChipMap]
2354         ubfiz   w19, w25, 1, 1
2355         stp     x23, x24, [sp,48]
2356         uxtb    w23, w2
2357         add     x2, x1, x0
2358         ldr     x21, [x1,x0]
2359         mov     w1, 16
2360         orr     w19, w19, 8
2361         mov     x22, x4
2362         ldrb    w0, [x2,8]
2363         ldr     w24, [x21,12]
2364         bfi     w24, w1, 8, 8
2365         and     w24, w24, -9
2366         bfi     w24, w0, 5, 3
2367         mov     w0, 1
2368         bfi     w19, w0, 5, 2
2369         adrp    x0, :got:gNandcVer
2370         orr     w19, w19, 536870912
2371         orr     w19, w19, 1024
2372         ldr     x0, [x0, #:got_lo12:gNandcVer]
2373         bfi     w19, w3, 4, 1
2374         ldr     w0, [x0]
2375         cmp     w0, 3
2376         bls     .L313
2377         ldr     w0, [x21,16]
2378         cmp     x5, xzr
2379         str     w0, [x29,88]
2380         cset    w6, ne
2381         ldr     w0, [x29,88]
2382         and     w0, w0, -5
2383         str     w0, [x29,88]
2384         cbnz    w6, .L327
2385         cbz     x4, .L314
2386 .L327:
2387         adrp    x20, :got:gMasterInfo
2388         cbnz    w25, .L316
2389 .L324:
2390         mov     x0, x21
2391         add     w23, w23, 1
2392         asr     w23, w23, 1
2393         bl      rk_nandc_xfer_irq_flag_init
2394         bfi     w19, w23, 22, 6
2395         mov     x0, x21
2396         mov     w1, 0
2397         bl      NandCIrqEnable
2398         mov     x0, x22
2399         cbnz    x22, .L318
2400         ldr     x0, [x20, #:got_lo12:gMasterInfo]
2401         ldr     x0, [x0]
2402         b       .L318
2403 .L316:
2404         adrp    x0, :got:gNandcEccBits
2405         mov     w3, 128
2406         mov     w1, 0
2407         lsr     w7, w23, 1
2408         mov     w2, w1
2409         mov     w8, -1
2410         ldr     x0, [x0, #:got_lo12:gNandcEccBits]
2411         ldr     w0, [x0]
2412         cmp     w0, 25
2413         mov     w0, 64
2414         csel    w3, w0, w3, cc
2415 .L320:
2416         cmp     w2, w7
2417         bcs     .L324
2418         lsr     w0, w1, 2
2419         ldr     x4, [x20, #:got_lo12:gMasterInfo]
2420         ubfiz   x0, x0, 2, 30
2421         cbz     w6, .L321
2422         ldr     x9, [x4,8]
2423         ldrh    w4, [x5,2]
2424         ldrh    w10, [x5],4
2425         orr     w4, w10, w4, lsl 16
2426         str     w4, [x9,x0]
2427         b       .L322
2428 .L321:
2429         ldr     x4, [x4,8]
2430         str     w8, [x4,x0]
2431 .L322:
2432         add     w2, w2, 1
2433         add     w1, w1, w3
2434         b       .L320
2435 .L318:
2436         ldr     x20, [x20, #:got_lo12:gMasterInfo]
2437         ubfx    x23, x19, 22, 5
2438         mov     w2, w25
2439         and     x22, x22, 3
2440         ldr     x1, [x20,8]
2441         str     x1, [x20,24]
2442         lsl     w1, w23, 10
2443         str     x0, [x20,16]
2444         bl      rknand_dma_map_single
2445         str     w0, [x20,32]
2446         ldr     x0, [x20,24]
2447         lsl     w1, w23, 7
2448         mov     w2, w25
2449         bl      rknand_dma_map_single
2450         str     w0, [x20,36]
2451         mov     w0, 1
2452         str     w0, [x20,40]
2453         ldr     w0, [x20,32]
2454         mov     w1, 16
2455         str     w0, [x21,20]
2456         ldr     w0, [x20,36]
2457         str     w0, [x21,24]
2458         str     wzr, [x29,88]
2459         ldr     w0, [x29,88]
2460         bfi     w0, w1, 9, 5
2461         str     w0, [x29,88]
2462         ldr     w0, [x29,88]
2463         orr     w0, w0, 448
2464         str     w0, [x29,88]
2465         cbnz    x22, .L325
2466         ldr     w0, [x29,88]
2467         mov     w1, 2
2468         bfi     w0, w1, 3, 3
2469         str     w0, [x29,88]
2470 .L325:
2471         ldr     w0, [x29,88]
2472         cmp     w25, wzr
2473         cset    w1, eq
2474         orr     w0, w0, 4
2475         str     w0, [x29,88]
2476         ldr     w0, [x29,88]
2477         bfi     w0, w1, 1, 1
2478         str     w0, [x29,88]
2479         ldr     w0, [x29,88]
2480         orr     w0, w0, 1
2481         str     w0, [x29,88]
2482 .L314:
2483         ldr     w0, [x29,88]
2484         str     w0, [x21,16]
2485 .L313:
2486         str     w24, [x21,12]
2487         str     w19, [x21,8]
2488         orr     w19, w19, 4
2489         str     w19, [x21,8]
2490         ldp     x19, x20, [sp,16]
2491         ldp     x21, x22, [sp,32]
2492         ldp     x23, x24, [sp,48]
2493         ldr     x25, [sp,64]
2494         ldp     x29, x30, [sp], 96
2495         ret
2496         .size   NandcXferStart, .-NandcXferStart
2497         .align  2
2498         .global Ftl_log2
2499         .type   Ftl_log2, %function
2500 Ftl_log2:
2501         mov     w2, 1
2502         mov     w1, 0
2503 .L332:
2504         cmp     w2, w0
2505         bhi     .L334
2506         add     w1, w1, 1
2507         lsl     w2, w2, 1
2508         uxth    w1, w1
2509         b       .L332
2510 .L334:
2511         sub     w0, w1, #1
2512         ret
2513         .size   Ftl_log2, .-Ftl_log2
2514         .align  2
2515         .global FtlPrintInfo
2516         .type   FtlPrintInfo, %function
2517 FtlPrintInfo:
2518         ret
2519         .size   FtlPrintInfo, .-FtlPrintInfo
2520         .align  2
2521         .global FtlSysBlkNumInit
2522         .type   FtlSysBlkNumInit, %function
2523 FtlSysBlkNumInit:
2524         uxth    w0, w0
2525         mov     w1, 24
2526         cmp     w0, 23
2527         adrp    x2, :got:c_ftl_nand_max_sys_blks
2528         csel    w0, w0, w1, hi
2529         adrp    x1, :got:c_ftl_nand_sys_blks_per_plane
2530         adrp    x3, :got:c_ftl_nand_blk_pre_plane
2531         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
2532         str     w0, [x1]
2533         adrp    x1, :got:c_ftl_nand_planes_num
2534         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_sys_blks]
2535         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
2536         ldrh    w1, [x1]
2537         mul     w1, w0, w1
2538         str     w1, [x2]
2539         adrp    x2, :got:c_ftl_nand_data_blks_per_plane
2540         ldr     x3, [x3, #:got_lo12:c_ftl_nand_blk_pre_plane]
2541         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_blks_per_plane]
2542         ldrh    w3, [x3]
2543         sub     w0, w3, w0
2544         strh    w0, [x2]
2545         adrp    x2, :got:c_ftl_nand_totle_phy_blks
2546         adrp    x0, :got:c_ftl_nand_max_data_blks
2547         ldr     x2, [x2, #:got_lo12:c_ftl_nand_totle_phy_blks]
2548         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_data_blks]
2549         ldr     w2, [x2]
2550         sub     w1, w2, w1
2551         str     w1, [x0]
2552         mov     w0, 0
2553         ret
2554         .size   FtlSysBlkNumInit, .-FtlSysBlkNumInit
2555         .align  2
2556         .global FtlConstantsInit
2557         .type   FtlConstantsInit, %function
2558 FtlConstantsInit:
2559         stp     x29, x30, [sp, -96]!
2560         adrp    x3, :got:c_ftl_nand_planes_per_die
2561         adrp    x6, :got:p_plane_order_table
2562         add     x29, sp, 0
2563         stp     x19, x20, [sp,16]
2564         stp     x21, x22, [sp,32]
2565         stp     x23, x24, [sp,48]
2566         stp     x25, x26, [sp,64]
2567         stp     x27, x28, [sp,80]
2568         mov     x19, x0
2569         adrp    x20, :got:c_ftl_nand_blk_pre_plane
2570         ldrh    w7, [x0,8]
2571         adrp    x0, :got:c_ftl_nand_type
2572         ldrh    w2, [x19,10]
2573         ldr     x0, [x0, #:got_lo12:c_ftl_nand_type]
2574         ldrh    w5, [x19,14]
2575         strh    w7, [x0]
2576         adrp    x0, :got:c_ftl_nand_die_num
2577         ldr     x1, [x0, #:got_lo12:c_ftl_nand_die_num]
2578         strh    w2, [x1]
2579         ldrh    w1, [x19,12]
2580         ldr     x3, [x3, #:got_lo12:c_ftl_nand_planes_per_die]
2581         strh    w1, [x3]
2582         ldr     x3, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
2583         strh    w5, [x3]
2584         mov     x3, 0
2585 .L339:
2586         ldr     x4, [x6, #:got_lo12:p_plane_order_table]
2587         adrp    x13, :got:p_plane_order_table
2588         strb    w3, [x3,x4]
2589         add     x3, x3, 1
2590         cmp     x3, 32
2591         bne     .L339
2592         ldrh    w4, [x19,20]
2593         ldrb    w3, [x19,15]
2594         cmp     w4, w3
2595         bcs     .L340
2596         uxtb    w9, w1
2597         mov     w4, 0
2598         mul     w12, w1, w2
2599         ubfiz   w11, w9, 1, 7
2600 .L341:
2601         cmp     w4, w1
2602         bcs     .L343
2603         uxtb    w3, w4
2604         mov     w6, w4
2605         mov     w8, 0
2606 .L344:
2607         cmp     w8, w2
2608         bcs     .L357
2609         ldr     x10, [x13, #:got_lo12:p_plane_order_table]
2610         add     w14, w6, w12
2611         add     w15, w3, w9
2612         add     w8, w8, 1
2613         strb    w3, [x10,w6,uxtw]
2614         add     w3, w3, w11
2615         strb    w15, [x10,x14]
2616         add     w6, w6, w1
2617         uxtb    w3, w3
2618         b       .L344
2619 .L357:
2620         add     w4, w4, 1
2621         b       .L341
2622 .L343:
2623         ldr     x3, [x0, #:got_lo12:c_ftl_nand_die_num]
2624         lsl     w2, w2, 1
2625         lsr     w5, w5, 1
2626         strh    w2, [x3]
2627         ldr     x2, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
2628         strh    w5, [x2]
2629 .L340:
2630         adrp    x2, :got:c_mlc_erase_count_value
2631         adrp    x21, :got:c_ftl_nand_ext_blk_pre_plane
2632         mov     w3, 5
2633         cmp     w7, 1
2634         ldr     x2, [x2, #:got_lo12:c_mlc_erase_count_value]
2635         strh    w3, [x2]
2636         ldr     x3, [x21, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
2637         strh    wzr, [x3]
2638         bne     .L345
2639         strh    w7, [x2]
2640 .L345:
2641         adrp    x23, :got:c_ftl_vendor_part_size
2642         mov     w2, 4352
2643         ldr     x3, [x23, #:got_lo12:c_ftl_vendor_part_size]
2644         strh    w2, [x3]
2645         adrp    x2, :got:g_slc2KBNand
2646         ldr     x2, [x2, #:got_lo12:g_slc2KBNand]
2647         ldrb    w2, [x2]
2648         cbz     w2, .L346
2649         mov     w2, 384
2650         strh    w2, [x3]
2651 .L346:
2652         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
2653         adrp    x24, :got:c_ftl_nand_planes_num
2654         adrp    x25, :got:c_ftl_nand_page_pre_blk
2655         adrp    x28, :got:c_ftl_nand_page_pre_slc_blk
2656         adrp    x27, :got:c_ftl_nand_sec_pre_page
2657         adrp    x22, :got:c_ftl_nand_sec_pre_page_shift
2658         ldrh    w0, [x0]
2659         ldr     x24, [x24, #:got_lo12:c_ftl_nand_planes_num]
2660         mul     w0, w1, w0
2661         strh    w0, [x24]
2662         ldr     x20, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
2663         ldrh    w0, [x20]
2664         mul     w1, w1, w0
2665         adrp    x0, :got:c_ftl_nand_blks_per_die
2666         uxth    w1, w1
2667         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blks_per_die]
2668         strh    w1, [x0]
2669         mov     w0, w1
2670         bl      Ftl_log2
2671         adrp    x1, :got:c_ftl_nand_blks_per_die_shift
2672         ldrh    w2, [x19,18]
2673         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blks_per_die_shift]
2674         strh    w0, [x1]
2675         ldrh    w0, [x19,16]
2676         ldr     x1, [x25, #:got_lo12:c_ftl_nand_page_pre_blk]
2677         strh    w0, [x1]
2678         ldr     x1, [x28, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
2679         strh    w2, [x1]
2680         adrp    x1, :got:c_ftl_nand_page_pre_super_blk
2681         ldrh    w2, [x24]
2682         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_super_blk]
2683         mul     w0, w0, w2
2684         strh    w0, [x1]
2685         ldrh    w0, [x19,20]
2686         ldr     x26, [x27, #:got_lo12:c_ftl_nand_sec_pre_page]
2687         strh    w0, [x26]
2688         bl      Ftl_log2
2689         ldr     x1, [x22, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
2690         uxth    w6, w0
2691         ldrh    w2, [x26]
2692         mov     x4, x28
2693         ldrh    w5, [x24]
2694         strh    w0, [x1]
2695         adrp    x0, :got:c_ftl_nand_byte_pre_page
2696         lsl     w1, w2, 9
2697         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_page]
2698         strh    w1, [x0]
2699         adrp    x0, :got:c_ftl_nand_byte_pre_oob
2700         ubfx    x1, x1, 9, 7
2701         lsl     w1, w1, 1
2702         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
2703         strh    w1, [x0]
2704         adrp    x0, :got:c_ftl_nand_reserved_blks
2705         ldrh    w1, [x19,26]
2706         mov     x19, x25
2707         ldr     x0, [x0, #:got_lo12:c_ftl_nand_reserved_blks]
2708         strh    w1, [x0]
2709         adrp    x1, :got:c_ftl_nand_totle_phy_blks
2710         ldrh    w0, [x20]
2711         mov     x20, x27
2712         ldr     x1, [x1, #:got_lo12:c_ftl_nand_totle_phy_blks]
2713         cmp     w0, 1024
2714         mul     w3, w5, w0
2715         str     w3, [x1]
2716         bls     .L347
2717         ldr     x1, [x21, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
2718         and     w3, w0, 255
2719         strh    w3, [x1]
2720 .L347:
2721         ldr     x21, [x21, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
2722         adrp    x3, :got:DeviceCapacity
2723         ldr     x7, [x19, #:got_lo12:c_ftl_nand_page_pre_blk]
2724         ldrh    w1, [x21]
2725         ldrh    w7, [x7]
2726         sub     w1, w0, w1
2727         ldr     x3, [x3, #:got_lo12:DeviceCapacity]
2728         mul     w1, w5, w1
2729         mul     w1, w1, w2
2730         mul     w1, w1, w7
2731         asr     w1, w1, 11
2732         str     w1, [x3]
2733         ldr     x4, [x4, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
2734         ldr     x23, [x23, #:got_lo12:c_ftl_vendor_part_size]
2735         ldrh    w4, [x4]
2736         ldrh    w1, [x23]
2737         mul     w2, w2, w4
2738         lsl     w3, w1, 3
2739         sdiv    w2, w3, w2
2740         adrp    x3, :got:c_ftl_nand_max_vendor_blks
2741         uxth    w2, w2
2742         cmp     w2, 4
2743         bls     .L348
2744         ldr     x4, [x3, #:got_lo12:c_ftl_nand_max_vendor_blks]
2745         strh    w2, [x4]
2746         b       .L349
2747 .L348:
2748         ldr     x2, [x3, #:got_lo12:c_ftl_nand_max_vendor_blks]
2749         mov     w4, 4
2750         strh    w4, [x2]
2751 .L349:
2752         adrp    x2, :got:c_ftl_nand_vendor_region_num
2753         asr     w1, w1, w6
2754         add     w1, w1, 2
2755         lsl     w0, w0, 6
2756         cmp     w5, 1
2757         ldr     x2, [x2, #:got_lo12:c_ftl_nand_vendor_region_num]
2758         strh    w1, [x2]
2759         add     w1, w6, 9
2760         asr     w0, w0, w1
2761         adrp    x1, :got:c_ftl_nand_map_blks_per_plane
2762         ldr     x1, [x1, #:got_lo12:c_ftl_nand_map_blks_per_plane]
2763         strh    w0, [x1]
2764         adrp    x1, :got:c_ftl_nand_max_map_blks
2765         and     w0, w0, 65535
2766         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_map_blks]
2767         mul     w2, w0, w5
2768         add     w0, w0, 8
2769         str     w2, [x1]
2770         ldr     x3, [x3, #:got_lo12:c_ftl_nand_max_vendor_blks]
2771         ldrh    w1, [x3]
2772         udiv    w1, w1, w5
2773         add     w0, w0, w1
2774         adrp    x1, :got:c_ftl_nand_sys_blks_per_plane
2775         ldr     x2, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
2776         bne     .L356
2777         add     w0, w0, 4
2778 .L356:
2779         str     w0, [x2]
2780         ldr     x21, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
2781         ldrh    w0, [x21]
2782         bl      FtlSysBlkNumInit
2783         adrp    x0, :got:c_ftl_nand_init_sys_blks_per_plane
2784         ldr     w1, [x21]
2785         adrp    x2, :got:c_ftl_nand_map_region_num
2786         ldr     x0, [x0, #:got_lo12:c_ftl_nand_init_sys_blks_per_plane]
2787         str     w1, [x0]
2788         adrp    x0, :got:c_ftl_nand_max_data_blks
2789         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_blk]
2790         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_data_blks]
2791         ldr     x22, [x22, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
2792         ldrh    w1, [x19]
2793         ldr     w0, [x0]
2794         ldr     x2, [x2, #:got_lo12:c_ftl_nand_map_region_num]
2795         lsl     w0, w0, 2
2796         mul     w1, w0, w1
2797         ldrh    w0, [x22]
2798         add     w0, w0, 9
2799         lsr     w0, w1, w0
2800         mov     w1, 2048
2801         add     w0, w0, 2
2802         strh    w0, [x2]
2803         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
2804         ldr     x20, [x20, #:got_lo12:c_ftl_nand_sec_pre_page]
2805         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
2806         ldrh    w2, [x20]
2807         sdiv    w1, w1, w2
2808         strh    w1, [x0]
2809         adrp    x0, :got:g_MaxLbaSector
2810         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
2811         str     wzr, [x0]
2812         mov     w0, 0
2813         ldp     x19, x20, [sp,16]
2814         ldp     x21, x22, [sp,32]
2815         ldp     x23, x24, [sp,48]
2816         ldp     x25, x26, [sp,64]
2817         ldp     x27, x28, [sp,80]
2818         ldp     x29, x30, [sp], 96
2819         ret
2820         .size   FtlConstantsInit, .-FtlConstantsInit
2821         .align  2
2822         .global IsBlkInVendorPart
2823         .type   IsBlkInVendorPart, %function
2824 IsBlkInVendorPart:
2825         adrp    x1, :got:g_totle_vendor_block
2826         uxth    w4, w0
2827         mov     w0, 0
2828         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
2829         ldrh    w1, [x1]
2830         cbz     w1, .L359
2831         adrp    x1, :got:c_ftl_nand_max_vendor_blks
2832         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
2833         ldrh    w2, [x1]
2834         adrp    x1, :got:p_vendor_block_table
2835         ldr     x1, [x1, #:got_lo12:p_vendor_block_table]
2836         ldr     x3, [x1]
2837         mov     x1, 0
2838 .L360:
2839         cmp     w2, w1, uxth
2840         bls     .L365
2841         add     x1, x1, 1
2842         add     x0, x3, x1, lsl 1
2843         ldrh    w0, [x0,-2]
2844         cmp     w0, w4
2845         bne     .L360
2846         mov     w0, 1
2847         b       .L359
2848 .L365:
2849         mov     w0, 0
2850 .L359:
2851         ret
2852         .size   IsBlkInVendorPart, .-IsBlkInVendorPart
2853         .align  2
2854         .global FtlCacheMetchLpa
2855         .type   FtlCacheMetchLpa, %function
2856 FtlCacheMetchLpa:
2857         adrp    x2, :got:g_wr_page_num
2858         mov     w6, w0
2859         mov     w0, 0
2860         ldr     x2, [x2, #:got_lo12:g_wr_page_num]
2861         ldr     w3, [x2]
2862         cbz     w3, .L367
2863         adrp    x2, :got:req_wr_io
2864         mov     x0, 56
2865         ldr     x2, [x2, #:got_lo12:req_wr_io]
2866         ldr     x5, [x2]
2867         mov     x2, 0
2868 .L368:
2869         cmp     w3, w2
2870         bls     .L377
2871         madd    x4, x2, x0, x5
2872         add     x2, x2, 1
2873         ldr     w4, [x4,24]
2874         cmp     w4, w6
2875         bcc     .L368
2876         cmp     w4, w1
2877         bhi     .L368
2878         mov     w0, 1
2879         b       .L367
2880 .L377:
2881         mov     w0, 0
2882 .L367:
2883         ret
2884         .size   FtlCacheMetchLpa, .-FtlCacheMetchLpa
2885         .align  2
2886         .global FtlGetCap
2887         .type   FtlGetCap, %function
2888 FtlGetCap:
2889         adrp    x0, :got:g_MaxLbaSector
2890         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
2891         ldr     w0, [x0]
2892         ret
2893         .size   FtlGetCap, .-FtlGetCap
2894         .align  2
2895         .global FtlGetCapacity
2896         .type   FtlGetCapacity, %function
2897 FtlGetCapacity:
2898         adrp    x0, :got:g_MaxLbaSector
2899         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
2900         ldr     w0, [x0]
2901         ret
2902         .size   FtlGetCapacity, .-FtlGetCapacity
2903         .align  2
2904         .global FtlGetLpn
2905         .type   FtlGetLpn, %function
2906 FtlGetLpn:
2907         adrp    x0, :got:g_MaxLpn
2908         ldr     x0, [x0, #:got_lo12:g_MaxLpn]
2909         ldr     w0, [x0]
2910         ret
2911         .size   FtlGetLpn, .-FtlGetLpn
2912         .align  2
2913         .global FtlGetCurEraseBlock
2914         .type   FtlGetCurEraseBlock, %function
2915 FtlGetCurEraseBlock:
2916         adrp    x0, :got:c_ftl_nand_planes_num
2917         adrp    x1, :got:g_cur_erase_blk
2918         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
2919         ldr     x1, [x1, #:got_lo12:g_cur_erase_blk]
2920         ldrh    w2, [x0]
2921         ldr     w0, [x1]
2922         mul     w0, w2, w0
2923         ret
2924         .size   FtlGetCurEraseBlock, .-FtlGetCurEraseBlock
2925         .align  2
2926         .global FtlGetAllBlockNum
2927         .type   FtlGetAllBlockNum, %function
2928 FtlGetAllBlockNum:
2929         adrp    x0, :got:c_ftl_nand_blk_pre_plane
2930         adrp    x1, :got:c_ftl_nand_planes_num
2931         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
2932         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
2933         ldrh    w2, [x0]
2934         ldrh    w0, [x1]
2935         mul     w0, w2, w0
2936         ret
2937         .size   FtlGetAllBlockNum, .-FtlGetAllBlockNum
2938         .align  2
2939         .global FtlBbmMapBadBlock
2940         .type   FtlBbmMapBadBlock, %function
2941 FtlBbmMapBadBlock:
2942         uxth    w1, w0
2943         adrp    x0, :got:c_ftl_nand_blks_per_die
2944         stp     x29, x30, [sp, -32]!
2945         mov     w4, 1
2946         add     x29, sp, 0
2947         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blks_per_die]
2948         str     x19, [sp,16]
2949         adrp    x19, :got:gBbtInfo
2950         ldrh    w3, [x0]
2951         ldr     x19, [x19, #:got_lo12:gBbtInfo]
2952         udiv    w2, w1, w3
2953         add     x0, x19, x2, uxth 3
2954         ldr     x0, [x0,32]
2955         msub    w3, w2, w3, w1
2956         uxth    w3, w3
2957         ubfx    x6, x3, 5, 11
2958         lsl     w4, w4, w3
2959         lsl     x6, x6, 2
2960         ldr     w5, [x0,x6]
2961         orr     w4, w4, w5
2962         str     w4, [x0,x6]
2963         adrp    x0, .LC1
2964         add     x0, x0, :lo12:.LC1
2965         bl      printk
2966         ldrh    w0, [x19,6]
2967         add     w0, w0, 1
2968         strh    w0, [x19,6]
2969         mov     w0, 0
2970         ldr     x19, [sp,16]
2971         ldp     x29, x30, [sp], 32
2972         ret
2973         .size   FtlBbmMapBadBlock, .-FtlBbmMapBadBlock
2974         .align  2
2975         .global FtlBbmIsBadBlock
2976         .type   FtlBbmIsBadBlock, %function
2977 FtlBbmIsBadBlock:
2978         adrp    x2, :got:c_ftl_nand_blks_per_die
2979         uxth    w0, w0
2980         ldr     x2, [x2, #:got_lo12:c_ftl_nand_blks_per_die]
2981         ldrh    w1, [x2]
2982         udiv    w2, w0, w1
2983         msub    w0, w2, w1, w0
2984         adrp    x1, :got:gBbtInfo
2985         uxth    w0, w0
2986         ldr     x1, [x1, #:got_lo12:gBbtInfo]
2987         ubfx    x3, x0, 5, 11
2988         add     x2, x1, x2, uxth 3
2989         ldr     x1, [x2,32]
2990         ldr     w1, [x1,x3,lsl 2]
2991         lsr     w0, w1, w0
2992         and     w0, w0, 1
2993         ret
2994         .size   FtlBbmIsBadBlock, .-FtlBbmIsBadBlock
2995         .align  2
2996         .global FtlBbtInfoPrint
2997         .type   FtlBbtInfoPrint, %function
2998 FtlBbtInfoPrint:
2999         ret
3000         .size   FtlBbtInfoPrint, .-FtlBbtInfoPrint
3001         .align  2
3002         .global FtlBbtCalcTotleCnt
3003         .type   FtlBbtCalcTotleCnt, %function
3004 FtlBbtCalcTotleCnt:
3005         stp     x29, x30, [sp, -48]!
3006         add     x29, sp, 0
3007         stp     x19, x20, [sp,16]
3008         mov     w19, 0
3009         stp     x21, x22, [sp,32]
3010         mov     w20, w19
3011         adrp    x22, :got:c_ftl_nand_blks_per_die
3012         adrp    x21, :got:c_ftl_nand_die_num
3013 .L387:
3014         ldr     x0, [x22, #:got_lo12:c_ftl_nand_blks_per_die]
3015         ldr     x1, [x21, #:got_lo12:c_ftl_nand_die_num]
3016         ldrh    w0, [x0]
3017         ldrh    w1, [x1]
3018         mul     w0, w0, w1
3019         cmp     w20, w0
3020         bge     .L393
3021         mov     w0, w20
3022         bl      FtlBbmIsBadBlock
3023         cbz     w0, .L388
3024         add     w19, w19, 1
3025         uxth    w19, w19
3026 .L388:
3027         add     w20, w20, 1
3028         uxth    w20, w20
3029         b       .L387
3030 .L393:
3031         mov     w0, w19
3032         ldp     x19, x20, [sp,16]
3033         ldp     x21, x22, [sp,32]
3034         ldp     x29, x30, [sp], 48
3035         ret
3036         .size   FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt
3037         .align  2
3038         .global V2P_block
3039         .type   V2P_block, %function
3040 V2P_block:
3041         adrp    x2, :got:c_ftl_nand_planes_per_die
3042         uxth    w0, w0
3043         uxth    w1, w1
3044         ldr     x2, [x2, #:got_lo12:c_ftl_nand_planes_per_die]
3045         ldrh    w3, [x2]
3046         udiv    w2, w0, w3
3047         msub    w0, w2, w3, w0
3048         madd    w0, w1, w3, w0
3049         adrp    x1, :got:c_ftl_nand_blks_per_die
3050         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blks_per_die]
3051         ldrh    w1, [x1]
3052         madd    w0, w2, w1, w0
3053         ret
3054         .size   V2P_block, .-V2P_block
3055         .align  2
3056         .global P2V_plane
3057         .type   P2V_plane, %function
3058 P2V_plane:
3059         adrp    x1, :got:c_ftl_nand_planes_per_die
3060         adrp    x2, :got:c_ftl_nand_blks_per_die
3061         uxth    w0, w0
3062         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_per_die]
3063         ldr     x2, [x2, #:got_lo12:c_ftl_nand_blks_per_die]
3064         ldrh    w1, [x1]
3065         ldrh    w3, [x2]
3066         udiv    w2, w0, w1
3067         udiv    w3, w0, w3
3068         msub    w0, w2, w1, w0
3069         madd    w0, w1, w3, w0
3070         ret
3071         .size   P2V_plane, .-P2V_plane
3072         .align  2
3073         .global P2V_block_in_plane
3074         .type   P2V_block_in_plane, %function
3075 P2V_block_in_plane:
3076         adrp    x1, :got:c_ftl_nand_blks_per_die
3077         uxth    w0, w0
3078         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blks_per_die]
3079         ldrh    w2, [x1]
3080         udiv    w1, w0, w2
3081         msub    w0, w1, w2, w0
3082         adrp    x1, :got:c_ftl_nand_planes_per_die
3083         uxth    w0, w0
3084         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_per_die]
3085         ldrh    w1, [x1]
3086         udiv    w0, w0, w1
3087         ret
3088         .size   P2V_block_in_plane, .-P2V_block_in_plane
3089         .align  2
3090         .global ftl_cmp_data_ver
3091         .type   ftl_cmp_data_ver, %function
3092 ftl_cmp_data_ver:
3093         cmp     w0, w1
3094         mov     w2, -2147483648
3095         bls     .L398
3096         sub     w1, w0, w1
3097         cmp     w1, w2
3098         cset    w0, ls
3099         b       .L399
3100 .L398:
3101         sub     w1, w1, w0
3102         cmp     w1, w2
3103         cset    w0, hi
3104 .L399:
3105         ret
3106         .size   ftl_cmp_data_ver, .-ftl_cmp_data_ver
3107         .align  2
3108         .global FtlFreeSysBlkQueueEmpty
3109         .type   FtlFreeSysBlkQueueEmpty, %function
3110 FtlFreeSysBlkQueueEmpty:
3111         adrp    x0, :got:gSysFreeQueue
3112         ldr     x0, [x0, #:got_lo12:gSysFreeQueue]
3113         ldrh    w0, [x0,6]
3114         cmp     w0, wzr
3115         cset    w0, eq
3116         ret
3117         .size   FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty
3118         .align  2
3119         .global FtlFreeSysBlkQueueFull
3120         .type   FtlFreeSysBlkQueueFull, %function
3121 FtlFreeSysBlkQueueFull:
3122         adrp    x0, :got:gSysFreeQueue
3123         ldr     x0, [x0, #:got_lo12:gSysFreeQueue]
3124         ldrh    w0, [x0,6]
3125         cmp     w0, 1024
3126         cset    w0, eq
3127         ret
3128         .size   FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull
3129         .align  2
3130         .global FtlFreeSysBlkQueueIn
3131         .type   FtlFreeSysBlkQueueIn, %function
3132 FtlFreeSysBlkQueueIn:
3133         stp     x29, x30, [sp, -32]!
3134         add     x29, sp, 0
3135         stp     x19, x20, [sp,16]
3136         uxth    w20, w0
3137         uxth    w19, w1
3138         bl      FtlFreeSysBlkQueueFull
3139         uxth    w0, w0
3140         cbnz    w0, .L402
3141         cbz     w19, .L404
3142         mov     w0, w20
3143         bl      P2V_block_in_plane
3144         uxth    w19, w0
3145         adrp    x1, :got:req_erase
3146         lsl     w2, w20, 10
3147         ldr     x1, [x1, #:got_lo12:req_erase]
3148         ldr     x0, [x1]
3149         str     w2, [x0,4]
3150         ldr     x0, [x1]
3151         mov     w1, 1
3152         bl      FlashEraseBlocks
3153         adrp    x0, :got:p_erase_count_table
3154         ubfiz   x1, x19, 1, 16
3155         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
3156         ldr     x2, [x0]
3157         ldrh    w0, [x2,x1]
3158         add     w0, w0, 1
3159         strh    w0, [x2,x1]
3160         adrp    x1, :got:g_totle_sys_slc_erase_count
3161         ldr     x1, [x1, #:got_lo12:g_totle_sys_slc_erase_count]
3162         ldr     w0, [x1]
3163         add     w0, w0, 1
3164         str     w0, [x1]
3165 .L404:
3166         adrp    x1, :got:gSysFreeQueue
3167         ldr     x1, [x1, #:got_lo12:gSysFreeQueue]
3168         ldrh    w0, [x1,6]
3169         ldrh    w2, [x1,4]
3170         add     w0, w0, 1
3171         strh    w0, [x1,6]
3172         add     x0, x1, x2, sxtw 1
3173         add     w2, w2, 1
3174         and     w2, w2, 1023
3175         strh    w20, [x0,8]
3176         strh    w2, [x1,4]
3177 .L402:
3178         ldp     x19, x20, [sp,16]
3179         ldp     x29, x30, [sp], 32
3180         ret
3181         .size   FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn
3182         .align  2
3183         .global FtlFreeSysBLkSort
3184         .type   FtlFreeSysBLkSort, %function
3185 FtlFreeSysBLkSort:
3186         stp     x29, x30, [sp, -48]!
3187         add     x29, sp, 0
3188         stp     x19, x20, [sp,16]
3189         stp     x21, x22, [sp,32]
3190         mov     w19, 0
3191         adrp    x20, :got:gSysFreeQueue
3192         adrp    x21, :got:p_sys_data_buf
3193         adrp    x22, :got:p_erase_count_table
3194 .L409:
3195         ldr     x1, [x20, #:got_lo12:gSysFreeQueue]
3196         adrp    x6, :got:gSysFreeQueue
3197         ldrh    w0, [x1,6]
3198         cmp     w0, w19
3199         bls     .L417
3200         ldrh    w0, [x1,2]
3201         add     w0, w0, w19
3202         add     x0, x1, x0, sxtw 1
3203         ldrh    w0, [x0,8]
3204         bl      P2V_block_in_plane
3205         ubfiz   x0, x0, 1, 16
3206         ldr     x3, [x22, #:got_lo12:p_erase_count_table]
3207         ubfiz   x1, x19, 2, 16
3208         ldr     x2, [x21, #:got_lo12:p_sys_data_buf]
3209         add     w19, w19, 1
3210         ldr     x3, [x3]
3211         uxth    w19, w19
3212         ldr     x2, [x2]
3213         ldrh    w0, [x3,x0]
3214         str     w0, [x2,x1]
3215         b       .L409
3216 .L417:
3217         mov     w0, 0
3218         adrp    x7, :got:p_sys_data_buf
3219 .L411:
3220         ldr     x1, [x6, #:got_lo12:gSysFreeQueue]
3221         ldrh    w5, [x1,6]
3222         sub     w1, w5, #1
3223         cmp     w0, w1
3224         bge     .L418
3225         ldr     x1, [x7, #:got_lo12:p_sys_data_buf]
3226         add     w4, w0, 1
3227         uxth    w4, w4
3228         ldr     x3, [x1]
3229         mov     w2, w4
3230         mov     w1, w0
3231 .L412:
3232         cmp     w2, w5
3233         bcs     .L419
3234         ubfiz   x8, x2, 2, 16
3235         ldr     w9, [x3,w1,uxtw 2]
3236         ldr     w8, [x3,x8]
3237         cmp     w9, w8
3238         csel    w1, w1, w2, ls
3239         add     w2, w2, 1
3240         uxth    w2, w2
3241         b       .L412
3242 .L419:
3243         cmp     w0, w1
3244         beq     .L415
3245         ubfiz   x5, x0, 2, 16
3246         ubfiz   x2, x1, 2, 32
3247         ldr     w9, [x3,x5]
3248         ldr     w8, [x3,x2]
3249         str     w9, [x3,x2]
3250         adrp    x2, :got:p_sys_data_buf
3251         ldr     x2, [x2, #:got_lo12:p_sys_data_buf]
3252         ldr     x2, [x2]
3253         str     w8, [x2,x5]
3254         ldr     x2, [x6, #:got_lo12:gSysFreeQueue]
3255         ldrh    w3, [x2,2]
3256         add     w1, w3, w1
3257         add     w0, w3, w0
3258         add     x1, x2, x1, sxtw 1
3259         add     x0, x2, x0, sxtw 1
3260         ldrh    w2, [x0,8]
3261         ldrh    w5, [x1,8]
3262         strh    w2, [x1,8]
3263         strh    w5, [x0,8]
3264 .L415:
3265         mov     w0, w4
3266         b       .L411
3267 .L418:
3268         ldp     x19, x20, [sp,16]
3269         ldp     x21, x22, [sp,32]
3270         ldp     x29, x30, [sp], 48
3271         ret
3272         .size   FtlFreeSysBLkSort, .-FtlFreeSysBLkSort
3273         .align  2
3274         .global IsInFreeQueue
3275         .type   IsInFreeQueue, %function
3276 IsInFreeQueue:
3277         stp     x29, x30, [sp, -32]!
3278         add     x29, sp, 0
3279         str     x19, [sp,16]
3280         uxth    w19, w0
3281         bl      FtlFreeSysBlkQueueFull
3282         uxth    w1, w0
3283         mov     w0, 0
3284         cbnz    w1, .L421
3285         adrp    x2, :got:gSysFreeQueue
3286         mov     w0, w1
3287         ldr     x3, [x2, #:got_lo12:gSysFreeQueue]
3288         ldrh    w4, [x3,6]
3289         ldrh    w3, [x3,2]
3290 .L422:
3291         cmp     w0, w4
3292         bcs     .L426
3293         ldr     x5, [x2, #:got_lo12:gSysFreeQueue]
3294         add     w1, w0, w3
3295         ubfiz   x1, x1, 1, 10
3296         add     x1, x5, x1
3297         ldrh    w1, [x1,8]
3298         cmp     w1, w19
3299         beq     .L425
3300         add     w0, w0, 1
3301         b       .L422
3302 .L426:
3303         mov     w0, 0
3304         b       .L421
3305 .L425:
3306         mov     w0, 1
3307 .L421:
3308         ldr     x19, [sp,16]
3309         ldp     x29, x30, [sp], 32
3310         ret
3311         .size   IsInFreeQueue, .-IsInFreeQueue
3312         .align  2
3313         .global FtlFreeSysBlkQueueOut
3314         .type   FtlFreeSysBlkQueueOut, %function
3315 FtlFreeSysBlkQueueOut:
3316         stp     x29, x30, [sp, -16]!
3317         add     x29, sp, 0
3318         bl      FtlFreeSysBlkQueueEmpty
3319         uxth    w1, w0
3320         mov     w0, 0
3321         cbnz    w1, .L428
3322         adrp    x1, :got:gSysFreeQueue
3323         ldr     x1, [x1, #:got_lo12:gSysFreeQueue]
3324         ldrh    w2, [x1,2]
3325         add     x0, x1, x2, sxtw 1
3326         ldrh    w3, [x1,6]
3327         add     w2, w2, 1
3328         ldrh    w0, [x0,8]
3329         sub     w3, w3, #1
3330         and     w2, w2, 1023
3331         strh    w3, [x1,6]
3332         strh    w2, [x1,2]
3333 .L428:
3334         ldp     x29, x30, [sp], 16
3335         ret
3336         .size   FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut
3337         .align  2
3338         .global insert_data_list
3339         .type   insert_data_list, %function
3340 insert_data_list:
3341         uxth    w0, w0
3342         mov     w9, 65535
3343         cmp     w0, w9
3344         beq     .L431
3345         adrp    x3, :got:p_data_block_list_table
3346         mov     w4, 6
3347         mov     w1, -1
3348         adrp    x2, :got:p_data_block_list_head
3349         umull   x11, w0, w4
3350         ldr     x8, [x3, #:got_lo12:p_data_block_list_table]
3351         mov     x10, x3
3352         mov     x5, x2
3353         ldr     x12, [x8]
3354         add     x6, x12, x11
3355         strh    w1, [x6,2]
3356         strh    w1, [x12,x11]
3357         ldr     x7, [x2, #:got_lo12:p_data_block_list_head]
3358         ldr     x1, [x7]
3359         cbnz    x1, .L432
3360         str     x6, [x7]
3361         b       .L431
3362 .L432:
3363         adrp    x2, :got:p_valid_page_count_table
3364         ubfiz   x7, x0, 1, 16
3365         ldr     x13, [x8]
3366         mov     x8, -6148914691236517206
3367         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
3368         ldr     x14, [x2]
3369         ldrh    w2, [x6,4]
3370         ldrh    w3, [x14,x7]
3371         cmp     w2, wzr
3372         mul     w3, w3, w2
3373         sub     x2, x1, x13
3374         asr     x2, x2, 1
3375         csinv   w3, w3, wzr, ne
3376         madd    x2, x8, x2, x2
3377         adrp    x8, :got:p_erase_count_table
3378         uxth    w2, w2
3379         ldr     x8, [x8, #:got_lo12:p_erase_count_table]
3380         ldr     x15, [x8]
3381         add     x8, x15, x7
3382         mov     w7, w4
3383 .L439:
3384         ubfiz   x16, x2, 1, 16
3385         ldrh    w17, [x1,4]
3386         cmp     w17, wzr
3387         ldrh    w4, [x14,x16]
3388         mul     w4, w4, w17
3389         csinv   w4, w4, wzr, ne
3390         cmp     w4, w3
3391         bne     .L435
3392         ldrh    w16, [x15,x16]
3393         ldrh    w4, [x8]
3394         cmp     w16, w4
3395         bcc     .L437
3396         b       .L436
3397 .L435:
3398         bhi     .L436
3399 .L437:
3400         ldrh    w4, [x1]
3401         cmp     w4, w9
3402         bne     .L438
3403         strh    w2, [x6,2]
3404         strh    w0, [x1]
3405         adrp    x0, :got:p_data_block_list_tail
3406         ldr     x0, [x0, #:got_lo12:p_data_block_list_tail]
3407         str     x6, [x0]
3408         b       .L431
3409 .L438:
3410         umull   x1, w4, w7
3411         mov     w2, w4
3412         add     x1, x13, x1
3413         b       .L439
3414 .L436:
3415         strh    w2, [x12,x11]
3416         ldrh    w2, [x1,2]
3417         strh    w2, [x6,2]
3418         ldr     x2, [x5, #:got_lo12:p_data_block_list_head]
3419         ldr     x3, [x2]
3420         cmp     x1, x3
3421         bne     .L440
3422         strh    w0, [x1,2]
3423         str     x6, [x2]
3424         b       .L431
3425 .L440:
3426         ldrh    w2, [x1,2]
3427         mov     w3, 6
3428         umull   x2, w2, w3
3429         ldr     x3, [x10, #:got_lo12:p_data_block_list_table]
3430         ldr     x3, [x3]
3431         strh    w0, [x3,x2]
3432         strh    w0, [x1,2]
3433 .L431:
3434         mov     w0, 0
3435         ret
3436         .size   insert_data_list, .-insert_data_list
3437         .align  2
3438         .global INSERT_DATA_LIST
3439         .type   INSERT_DATA_LIST, %function
3440 INSERT_DATA_LIST:
3441         stp     x29, x30, [sp, -16]!
3442         add     x29, sp, 0
3443         bl      insert_data_list
3444         adrp    x0, :got:g_num_data_superblocks
3445         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
3446         ldrh    w1, [x0]
3447         add     w1, w1, 1
3448         strh    w1, [x0]
3449         ldp     x29, x30, [sp], 16
3450         ret
3451         .size   INSERT_DATA_LIST, .-INSERT_DATA_LIST
3452         .align  2
3453         .global insert_free_list
3454         .type   insert_free_list, %function
3455 insert_free_list:
3456         uxth    w0, w0
3457         mov     w6, 65535
3458         cmp     w0, w6
3459         beq     .L445
3460         adrp    x3, :got:p_data_block_list_table
3461         mov     w5, 6
3462         mov     w1, -1
3463         adrp    x2, :got:p_free_data_block_list_head
3464         umull   x7, w0, w5
3465         ldr     x9, [x3, #:got_lo12:p_data_block_list_table]
3466         mov     x12, x3
3467         mov     x3, x2
3468         ldr     x8, [x9]
3469         add     x4, x8, x7
3470         strh    w1, [x4,2]
3471         strh    w1, [x8,x7]
3472         ldr     x10, [x2, #:got_lo12:p_free_data_block_list_head]
3473         ldr     x1, [x10]
3474         cbnz    x1, .L446
3475         str     x4, [x10]
3476         b       .L445
3477 .L446:
3478         adrp    x2, :got:p_erase_count_table
3479         ldr     x10, [x9]
3480         mov     x9, -6148914691236517206
3481         ldr     x2, [x2, #:got_lo12:p_erase_count_table]
3482         ldr     x11, [x2]
3483         ubfiz   x2, x0, 1, 16
3484         ldrh    w13, [x11,x2]
3485         sub     x2, x1, x10
3486         asr     x2, x2, 1
3487         madd    x2, x9, x2, x2
3488         uxth    w2, w2
3489 .L449:
3490         ubfiz   x9, x2, 1, 16
3491         ldrh    w9, [x11,x9]
3492         cmp     w9, w13
3493         bcs     .L447
3494         ldrh    w9, [x1]
3495         cmp     w9, w6
3496         bne     .L448
3497         strh    w2, [x4,2]
3498         strh    w0, [x1]
3499         b       .L445
3500 .L448:
3501         umull   x1, w9, w5
3502         mov     w2, w9
3503         add     x1, x10, x1
3504         b       .L449
3505 .L447:
3506         ldrh    w5, [x1,2]
3507         strh    w5, [x4,2]
3508         strh    w2, [x8,x7]
3509         ldr     x2, [x3, #:got_lo12:p_free_data_block_list_head]
3510         ldr     x3, [x2]
3511         cmp     x1, x3
3512         bne     .L450
3513         strh    w0, [x1,2]
3514         str     x4, [x2]
3515         b       .L445
3516 .L450:
3517         ldrh    w2, [x1,2]
3518         mov     w3, 6
3519         umull   x2, w2, w3
3520         ldr     x3, [x12, #:got_lo12:p_data_block_list_table]
3521         ldr     x3, [x3]
3522         strh    w0, [x3,x2]
3523         strh    w0, [x1,2]
3524 .L445:
3525         mov     w0, 0
3526         ret
3527         .size   insert_free_list, .-insert_free_list
3528         .align  2
3529         .global INSERT_FREE_LIST
3530         .type   INSERT_FREE_LIST, %function
3531 INSERT_FREE_LIST:
3532         stp     x29, x30, [sp, -16]!
3533         add     x29, sp, 0
3534         bl      insert_free_list
3535         adrp    x0, :got:g_num_free_superblocks
3536         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
3537         ldrh    w1, [x0]
3538         add     w1, w1, 1
3539         strh    w1, [x0]
3540         ldp     x29, x30, [sp], 16
3541         ret
3542         .size   INSERT_FREE_LIST, .-INSERT_FREE_LIST
3543         .align  2
3544         .global List_remove_node
3545         .type   List_remove_node, %function
3546 List_remove_node:
3547         adrp    x6, :got:p_data_block_list_table
3548         uxth    w1, w1
3549         mov     w5, 6
3550         ldr     x3, [x0]
3551         mov     w7, 65535
3552         ldr     x6, [x6, #:got_lo12:p_data_block_list_table]
3553         umull   x1, w1, w5
3554         ldr     x2, [x6]
3555         add     x4, x2, x1
3556         cmp     x4, x3
3557         bne     .L453
3558         ldrh    w3, [x2,x1]
3559         cmp     w3, w7
3560         bne     .L454
3561         str     xzr, [x0]
3562         b       .L455
3563 .L454:
3564         umull   x3, w3, w5
3565         add     x3, x2, x3
3566         str     x3, [x0]
3567         mov     w0, -1
3568         strh    w0, [x3,2]
3569         b       .L455
3570 .L453:
3571         ldrh    w0, [x2,x1]
3572         ldrh    w3, [x4,2]
3573         cmp     w0, w7
3574         bne     .L456
3575         umull   x3, w3, w5
3576         mov     w0, -1
3577         strh    w0, [x2,x3]
3578         b       .L455
3579 .L456:
3580         umull   x0, w0, w5
3581         add     x0, x2, x0
3582         strh    w3, [x0,2]
3583         ldrh    w3, [x4,2]
3584         ldr     x0, [x6]
3585         ldrh    w7, [x2,x1]
3586         umull   x3, w3, w5
3587         strh    w7, [x0,x3]
3588 .L455:
3589         mov     w0, -1
3590         strh    w0, [x2,x1]
3591         strh    w0, [x4,2]
3592         mov     w0, 0
3593         ret
3594         .size   List_remove_node, .-List_remove_node
3595         .align  2
3596         .global List_pop_index_node
3597         .type   List_pop_index_node, %function
3598 List_pop_index_node:
3599         stp     x29, x30, [sp, -32]!
3600         uxth    w1, w1
3601         add     x29, sp, 0
3602         str     x19, [sp,16]
3603         mov     w19, 65535
3604         ldr     x2, [x0]
3605         cbz     x2, .L458
3606         adrp    x3, :got:p_data_block_list_table
3607         mov     w5, w19
3608         mov     w6, 6
3609         ldr     x3, [x3, #:got_lo12:p_data_block_list_table]
3610         ldr     x4, [x3]
3611 .L459:
3612         cbnz    w1, .L460
3613 .L462:
3614         sub     x2, x2, x4
3615         mov     x1, -6148914691236517206
3616         asr     x2, x2, 1
3617         madd    x2, x1, x2, x2
3618         uxth    w19, w2
3619         mov     w1, w19
3620         bl      List_remove_node
3621         b       .L458
3622 .L460:
3623         ldrh    w3, [x2]
3624         cmp     w3, w5
3625         beq     .L462
3626         umull   x3, w3, w6
3627         sub     w1, w1, #1
3628         add     x2, x4, x3
3629         uxth    w1, w1
3630         b       .L459
3631 .L458:
3632         mov     w0, w19
3633         ldr     x19, [sp,16]
3634         ldp     x29, x30, [sp], 32
3635         ret
3636         .size   List_pop_index_node, .-List_pop_index_node
3637         .align  2
3638         .global List_pop_head_node
3639         .type   List_pop_head_node, %function
3640 List_pop_head_node:
3641         stp     x29, x30, [sp, -16]!
3642         mov     w1, 0
3643         add     x29, sp, 0
3644         bl      List_pop_index_node
3645         ldp     x29, x30, [sp], 16
3646         ret
3647         .size   List_pop_head_node, .-List_pop_head_node
3648         .align  2
3649         .global List_get_gc_head_node
3650         .type   List_get_gc_head_node, %function
3651 List_get_gc_head_node:
3652         uxth    w2, w0
3653         adrp    x0, :got:p_data_block_list_head
3654         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
3655         ldr     x1, [x0]
3656         mov     w0, 65535
3657         cbz     x1, .L466
3658         adrp    x0, :got:p_data_block_list_table
3659         mov     w4, 65535
3660         mov     w5, 6
3661         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
3662         ldr     x0, [x0]
3663 .L467:
3664         cbnz    w2, .L468
3665 .L470:
3666         sub     x1, x1, x0
3667         mov     x0, -6148914691236517206
3668         asr     x1, x1, 1
3669         madd    x1, x0, x1, x1
3670         uxth    w0, w1
3671         b       .L466
3672 .L468:
3673         ldrh    w3, [x1]
3674         cmp     w3, w4
3675         beq     .L470
3676         umull   x3, w3, w5
3677         sub     w2, w2, #1
3678         add     x1, x0, x3
3679         uxth    w2, w2
3680         b       .L467
3681 .L466:
3682         ret
3683         .size   List_get_gc_head_node, .-List_get_gc_head_node
3684         .align  2
3685         .global List_update_data_list
3686         .type   List_update_data_list, %function
3687 List_update_data_list:
3688         stp     x29, x30, [sp, -32]!
3689         add     x29, sp, 0
3690         str     x19, [sp,16]
3691         uxth    w19, w0
3692         adrp    x0, :got:g_active_superblock
3693         ldr     x0, [x0, #:got_lo12:g_active_superblock]
3694         ldrh    w0, [x0]
3695         cmp     w0, w19
3696         beq     .L473
3697         adrp    x0, :got:g_buffer_superblock
3698         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
3699         ldrh    w0, [x0]
3700         cmp     w0, w19
3701         beq     .L473
3702         adrp    x0, :got:g_gc_temp_superblock
3703         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
3704         ldrh    w0, [x0]
3705         cmp     w0, w19
3706         beq     .L473
3707         adrp    x0, :got:p_data_block_list_table
3708         mov     w3, 6
3709         umull   x4, w19, w3
3710         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
3711         ldr     x5, [x0]
3712         adrp    x0, :got:p_data_block_list_head
3713         add     x4, x5, x4
3714         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
3715         ldr     x1, [x0]
3716         cmp     x4, x1
3717         beq     .L473
3718         adrp    x1, :got:p_valid_page_count_table
3719         ldrh    w2, [x4,4]
3720         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
3721         ldr     x6, [x1]
3722         ubfiz   x1, x19, 1, 16
3723         ldrh    w1, [x6,x1]
3724         mul     w2, w1, w2
3725         ldrh    w1, [x4,2]
3726         mov     x4, -6148914691236517206
3727         cmp     w2, wzr
3728         csinv   w2, w2, wzr, ne
3729         umull   x3, w1, w3
3730         asr     x1, x3, 1
3731         add     x3, x5, x3
3732         madd    x1, x4, x1, x1
3733         ldrh    w3, [x3,4]
3734         ldrh    w1, [x6,x1,lsl 1]
3735         mul     w1, w1, w3
3736         cmp     w1, wzr
3737         csinv   w1, w1, wzr, ne
3738         cmp     w2, w1
3739         bcs     .L473
3740         mov     w1, w19
3741         bl      List_remove_node
3742         adrp    x0, :got:g_num_data_superblocks
3743         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
3744         ldrh    w1, [x0]
3745         sub     w1, w1, #1
3746         strh    w1, [x0]
3747         mov     w0, w19
3748         bl      INSERT_DATA_LIST
3749 .L473:
3750         mov     w0, 0
3751         ldr     x19, [sp,16]
3752         ldp     x29, x30, [sp], 32
3753         ret
3754         .size   List_update_data_list, .-List_update_data_list
3755         .align  2
3756         .global ftl_map_blk_alloc_new_blk
3757         .type   ftl_map_blk_alloc_new_blk, %function
3758 ftl_map_blk_alloc_new_blk:
3759         stp     x29, x30, [sp, -48]!
3760         add     x29, sp, 0
3761         stp     x19, x20, [sp,16]
3762         stp     x21, x22, [sp,32]
3763         mov     w20, 0
3764         ldrh    w2, [x0,10]
3765         ldr     x1, [x0,16]
3766 .L477:
3767         cmp     w20, w2
3768         beq     .L480
3769         mov     x22, x1
3770         ldrh    w21, [x1],2
3771         cbnz    w21, .L478
3772         mov     x19, x0
3773         bl      FtlFreeSysBlkQueueOut
3774         uxth    w1, w0
3775         strh    w0, [x22]
3776         cbz     w1, .L480
3777         ldr     w0, [x19,48]
3778         strh    w21, [x19,2]
3779         add     w0, w0, 1
3780         str     w0, [x19,48]
3781         ldrh    w0, [x19,8]
3782         strh    w20, [x19]
3783         add     w0, w0, 1
3784         strh    w0, [x19,8]
3785         b       .L480
3786 .L478:
3787         add     w20, w20, 1
3788         uxth    w20, w20
3789         b       .L477
3790 .L480:
3791         mov     w0, 0
3792         ldp     x19, x20, [sp,16]
3793         ldp     x21, x22, [sp,32]
3794         ldp     x29, x30, [sp], 48
3795         ret
3796         .size   ftl_map_blk_alloc_new_blk, .-ftl_map_blk_alloc_new_blk
3797         .align  2
3798         .global select_l2p_ram_region
3799         .type   select_l2p_ram_region, %function
3800 select_l2p_ram_region:
3801         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
3802         mov     x3, 0
3803         mov     w4, 65535
3804         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
3805         ldrh    w2, [x0]
3806         adrp    x0, :got:p_l2p_ram_map
3807         ldr     x0, [x0, #:got_lo12:p_l2p_ram_map]
3808         ldr     x1, [x0]
3809 .L484:
3810         uxth    w0, w3
3811         cmp     w0, w2
3812         bcs     .L500
3813         add     x3, x3, 1
3814         add     x5, x1, x3, lsl 4
3815         ldrh    w5, [x5,-16]
3816         cmp     w5, w4
3817         bne     .L484
3818         b       .L485
3819 .L500:
3820         mov     w0, w2
3821         mov     x3, 0
3822         mov     w6, -2147483648
3823 .L487:
3824         uxth    w5, w3
3825         cmp     w5, w2
3826         bcs     .L501
3827         add     x4, x1, x3, lsl 4
3828         ldr     w4, [x4,4]
3829         tbnz    w4, #31, .L496
3830         cmp     w4, w6
3831         bcc     .L488
3832 .L496:
3833         mov     w4, w6
3834         mov     w5, w0
3835 .L488:
3836         add     x3, x3, 1
3837         mov     w6, w4
3838         mov     w0, w5
3839         b       .L487
3840 .L501:
3841         cmp     w0, w2
3842         bcc     .L485
3843         adrp    x0, :got:g_l2p_last_update_region_id
3844         add     x1, x1, 4
3845         mov     w4, -1
3846         mov     w3, 0
3847         ldr     x0, [x0, #:got_lo12:g_l2p_last_update_region_id]
3848         ldrh    w5, [x0]
3849         mov     w0, w2
3850 .L491:
3851         cmp     w3, w2
3852         beq     .L485
3853         ldr     w7, [x1]
3854         cmp     w7, w4
3855         bcs     .L492
3856         ldrh    w6, [x1,-4]
3857         cmp     w6, w5
3858         csel    w4, w4, w7, eq
3859         cmp     w6, w5
3860         csel    w0, w0, w3, eq
3861 .L492:
3862         add     w3, w3, 1
3863         add     x1, x1, 16
3864         uxth    w3, w3
3865         b       .L491
3866 .L485:
3867         ret
3868         .size   select_l2p_ram_region, .-select_l2p_ram_region
3869         .align  2
3870         .global FtlUpdateVaildLpn
3871         .type   FtlUpdateVaildLpn, %function
3872 FtlUpdateVaildLpn:
3873         adrp    x1, :got:FtlUpdateVaildLpnCount
3874         ldr     x3, [x1, #:got_lo12:FtlUpdateVaildLpnCount]
3875         ldrh    w2, [x3]
3876         cbnz    w0, .L503
3877         cmp     w2, 4
3878         bhi     .L503
3879         add     w2, w2, 1
3880         strh    w2, [x3]
3881         b       .L502
3882 .L503:
3883         ldr     x1, [x1, #:got_lo12:FtlUpdateVaildLpnCount]
3884         mov     w7, 65535
3885         strh    wzr, [x1]
3886         adrp    x1, :got:g_VaildLpn
3887         ldr     x0, [x1, #:got_lo12:g_VaildLpn]
3888         str     wzr, [x0]
3889         adrp    x0, :got:c_ftl_nand_data_blks_per_plane
3890         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_blks_per_plane]
3891         ldrh    w5, [x0]
3892         adrp    x0, :got:p_valid_page_count_table
3893         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
3894         ldr     x6, [x0]
3895         mov     x0, 0
3896 .L504:
3897         cmp     w5, w0, uxth
3898         bls     .L502
3899         ldrh    w4, [x6,x0,lsl 1]
3900         cmp     w4, w7
3901         beq     .L505
3902         ldr     x3, [x1, #:got_lo12:g_VaildLpn]
3903         ldr     w2, [x3]
3904         add     w2, w4, w2
3905         str     w2, [x3]
3906 .L505:
3907         add     x0, x0, 1
3908         b       .L504
3909 .L502:
3910         ret
3911         .size   FtlUpdateVaildLpn, .-FtlUpdateVaildLpn
3912         .align  2
3913         .global ftl_sb_update_avl_pages
3914         .type   ftl_sb_update_avl_pages, %function
3915 ftl_sb_update_avl_pages:
3916         adrp    x3, :got:c_ftl_nand_planes_num
3917         strh    wzr, [x0,4]
3918         uxth    w1, w1
3919         uxth    w2, w2
3920         mov     w5, 65535
3921         ldr     x3, [x3, #:got_lo12:c_ftl_nand_planes_num]
3922         ldrh    w3, [x3]
3923 .L509:
3924         cmp     w2, w3
3925         bcs     .L515
3926         add     x4, x0, x2, sxtw 1
3927         ldrh    w4, [x4,16]
3928         cmp     w4, w5
3929         beq     .L510
3930         ldrh    w4, [x0,4]
3931         add     w4, w4, 1
3932         strh    w4, [x0,4]
3933 .L510:
3934         add     w2, w2, 1
3935         uxth    w2, w2
3936         b       .L509
3937 .L515:
3938         adrp    x2, :got:c_ftl_nand_page_pre_blk
3939         mov     x4, x0
3940         mov     w6, 65535
3941         add     x3, x0, x3, uxth 1
3942         ldr     x2, [x2, #:got_lo12:c_ftl_nand_page_pre_blk]
3943         ldrh    w5, [x2]
3944 .L512:
3945         cmp     x4, x3
3946         beq     .L516
3947         ldrh    w2, [x4,16]
3948         cmp     w2, w6
3949         beq     .L513
3950         ldrh    w2, [x0,4]
3951         add     w2, w5, w2
3952         sub     w2, w2, #1
3953         sub     w2, w2, w1
3954         strh    w2, [x0,4]
3955 .L513:
3956         add     x4, x4, 2
3957         b       .L512
3958 .L516:
3959         ret
3960         .size   ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages
3961         .align  2
3962         .global make_superblock
3963         .type   make_superblock, %function
3964 make_superblock:
3965         stp     x29, x30, [sp, -80]!
3966         add     x29, sp, 0
3967         stp     x19, x20, [sp,16]
3968         stp     x23, x24, [sp,48]
3969         stp     x21, x22, [sp,32]
3970         str     x25, [sp,64]
3971         mov     x19, x0
3972         strh    wzr, [x0,4]
3973         mov     w20, 0
3974         strb    wzr, [x0,7]
3975         adrp    x22, :got:c_ftl_nand_planes_num
3976         adrp    x24, :got:p_plane_order_table
3977         mov     w23, -1
3978 .L518:
3979         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
3980         ldrh    w0, [x0]
3981         cmp     w0, w20
3982         bls     .L525
3983         ldr     x0, [x24, #:got_lo12:p_plane_order_table]
3984         add     x21, x19, x20, uxth 1
3985         ldrh    w1, [x19]
3986         ldrb    w0, [x0,w20,sxtw]
3987         bl      V2P_block
3988         strh    w23, [x21,16]
3989         mov     w25, w0
3990         bl      FtlBbmIsBadBlock
3991         cbnz    w0, .L519
3992         strh    w25, [x21,16]
3993         ldrb    w0, [x19,7]
3994         add     w0, w0, 1
3995         strb    w0, [x19,7]
3996 .L519:
3997         add     w20, w20, 1
3998         uxth    w20, w20
3999         b       .L518
4000 .L525:
4001         adrp    x1, :got:c_ftl_nand_page_pre_blk
4002         ldrb    w0, [x19,7]
4003         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
4004         strb    wzr, [x19,9]
4005         ldrh    w1, [x1]
4006         mul     w0, w0, w1
4007         strh    w0, [x19,4]
4008         adrp    x0, :got:g_inkDie_check_enable
4009         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
4010         ldr     w0, [x0]
4011         cbz     w0, .L521
4012         adrp    x0, :got:p_erase_count_table
4013         ldrh    w1, [x19]
4014         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
4015         ldr     x0, [x0]
4016         ldrh    w0, [x0,x1,lsl 1]
4017         cmp     w0, 59
4018         bhi     .L521
4019         mov     w0, 1
4020         strb    w0, [x19,9]
4021 .L521:
4022         mov     w0, 0
4023         ldr     x25, [sp,64]
4024         ldp     x19, x20, [sp,16]
4025         ldp     x21, x22, [sp,32]
4026         ldp     x23, x24, [sp,48]
4027         ldp     x29, x30, [sp], 80
4028         ret
4029         .size   make_superblock, .-make_superblock
4030         .align  2
4031         .global update_multiplier_value
4032         .type   update_multiplier_value, %function
4033 update_multiplier_value:
4034         stp     x29, x30, [sp, -64]!
4035         add     x29, sp, 0
4036         stp     x19, x20, [sp,16]
4037         mov     w19, 0
4038         uxth    w20, w0
4039         stp     x21, x22, [sp,32]
4040         stp     x23, x24, [sp,48]
4041         mov     w21, w19
4042         adrp    x22, :got:c_ftl_nand_planes_num
4043         adrp    x23, :got:p_plane_order_table
4044         adrp    x24, :got:c_ftl_nand_page_pre_blk
4045 .L527:
4046         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
4047         ldrh    w0, [x0]
4048         cmp     w0, w21
4049         bls     .L534
4050         ldr     x0, [x23, #:got_lo12:p_plane_order_table]
4051         mov     w1, w20
4052         ldrb    w0, [x0,w21,sxtw]
4053         bl      V2P_block
4054         bl      FtlBbmIsBadBlock
4055         cbnz    w0, .L528
4056         ldr     x0, [x24, #:got_lo12:c_ftl_nand_page_pre_blk]
4057         ldrh    w0, [x0]
4058         add     w19, w19, w0
4059         uxth    w19, w19
4060 .L528:
4061         add     w21, w21, 1
4062         uxth    w21, w21
4063         b       .L527
4064 .L534:
4065         cbz     w19, .L530
4066         mov     w0, 32768
4067         sdiv    w19, w0, w19
4068 .L530:
4069         mov     w0, 6
4070         umull   x20, w20, w0
4071         adrp    x0, :got:p_data_block_list_table
4072         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4073         ldr     x0, [x0]
4074         add     x20, x0, x20
4075         mov     w0, 0
4076         strh    w19, [x20,4]
4077         ldp     x19, x20, [sp,16]
4078         ldp     x21, x22, [sp,32]
4079         ldp     x23, x24, [sp,48]
4080         ldp     x29, x30, [sp], 64
4081         ret
4082         .size   update_multiplier_value, .-update_multiplier_value
4083         .align  2
4084         .global GetFreeBlockMinEraseCount
4085         .type   GetFreeBlockMinEraseCount, %function
4086 GetFreeBlockMinEraseCount:
4087         adrp    x0, :got:p_free_data_block_list_head
4088         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
4089         ldr     x1, [x0]
4090         mov     w0, w1
4091         cbz     x1, .L536
4092         adrp    x0, :got:p_data_block_list_table
4093         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4094         ldr     x0, [x0]
4095         sub     x1, x1, x0
4096         mov     x0, -6148914691236517206
4097         asr     x1, x1, 1
4098         madd    x1, x0, x1, x1
4099         adrp    x0, :got:p_erase_count_table
4100         and     x1, x1, 65535
4101         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
4102         ldr     x0, [x0]
4103         ldrh    w0, [x0,x1,lsl 1]
4104 .L536:
4105         ret
4106         .size   GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount
4107         .align  2
4108         .global GetFreeBlockMaxEraseCount
4109         .type   GetFreeBlockMaxEraseCount, %function
4110 GetFreeBlockMaxEraseCount:
4111         uxth    w3, w0
4112         adrp    x0, :got:p_free_data_block_list_head
4113         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
4114         ldr     x1, [x0]
4115         mov     w0, w1
4116         cbz     x1, .L539
4117         adrp    x0, :got:g_num_free_superblocks
4118         mov     w5, 6
4119         mov     w6, 65535
4120         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
4121         ldrh    w2, [x0]
4122         mov     w0, 7
4123         mul     w2, w2, w0
4124         adrp    x0, :got:p_data_block_list_table
4125         asr     w2, w2, 3
4126         cmp     w3, w2
4127         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4128         csel    w3, w2, w3, gt
4129         mov     x2, -6148914691236517206
4130         ldr     x0, [x0]
4131         sub     x1, x1, x0
4132         asr     x1, x1, 1
4133         madd    x1, x2, x1, x1
4134         mov     w2, 0
4135         uxth    w1, w1
4136 .L541:
4137         cmp     w2, w3
4138         beq     .L544
4139         umull   x4, w1, w5
4140         ldrh    w4, [x0,x4]
4141         cmp     w4, w6
4142         bne     .L542
4143 .L544:
4144         adrp    x0, :got:p_erase_count_table
4145         ubfiz   x1, x1, 1, 16
4146         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
4147         ldr     x0, [x0]
4148         ldrh    w0, [x0,x1]
4149         b       .L539
4150 .L542:
4151         add     w2, w2, 1
4152         mov     w1, w4
4153         uxth    w2, w2
4154         b       .L541
4155 .L539:
4156         ret
4157         .size   GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount
4158         .align  2
4159         .global FtlPrintInfo2buf
4160         .type   FtlPrintInfo2buf, %function
4161 FtlPrintInfo2buf:
4162         stp     x29, x30, [sp, -128]!
4163         adrp    x1, .LC2
4164         add     x29, sp, 0
4165         add     x1, x1, :lo12:.LC2
4166         stp     x19, x20, [sp,16]
4167         stp     x21, x22, [sp,32]
4168         stp     x23, x24, [sp,48]
4169         mov     x22, x0
4170         stp     x25, x26, [sp,64]
4171         stp     x27, x28, [sp,80]
4172         bl      strcpy
4173         add     x20, x22, 12
4174         adrp    x2, :got:gNandPhyInfo
4175         adrp    x1, .LC3
4176         mov     x0, x20
4177         add     x1, x1, :lo12:.LC3
4178         ldr     x2, [x2, #:got_lo12:gNandPhyInfo]
4179         ldr     w2, [x2]
4180         bl      sprintf
4181         add     x20, x20, x0, sxtw
4182         adrp    x2, :got:DeviceCapacity
4183         adrp    x1, .LC4
4184         mov     x0, x20
4185         add     x1, x1, :lo12:.LC4
4186         ldr     x2, [x2, #:got_lo12:DeviceCapacity]
4187         ldr     w2, [x2]
4188         bl      sprintf
4189         add     x20, x20, x0, sxtw
4190         adrp    x0, :got:gFtlInitStatus
4191         ldr     x0, [x0, #:got_lo12:gFtlInitStatus]
4192         ldr     w0, [x0]
4193         cmp     w0, 1
4194         beq     .L547
4195         sub     w0, w20, w22
4196         b       .L548
4197 .L547:
4198         add     x0, x29, 112
4199         add     x1, x29, 116
4200         add     x2, x29, 120
4201         add     x3, x29, 124
4202         adrp    x19, :got:gBbtInfo
4203         adrp    x25, :got:g_num_free_superblocks
4204         bl      NandcGetTimeCfg
4205         adrp    x23, :got:p_valid_page_count_table
4206         ldr     w4, [x29,120]
4207         adrp    x1, .LC5
4208         ldr     w5, [x29,124]
4209         mov     x0, x20
4210         ldr     w3, [x29,116]
4211         add     x1, x1, :lo12:.LC5
4212         ldr     w2, [x29,112]
4213         adrp    x26, :got:g_sys_ext_data
4214         bl      sprintf
4215         add     x21, x20, x0, sxtw
4216         adrp    x1, .LC6
4217         mov     x0, x21
4218         add     x1, x1, :lo12:.LC6
4219         add     x21, x21, 10
4220         adrp    x20, :got:g_sys_save_data
4221         bl      strcpy
4222         adrp    x2, :got:g_MaxLpn
4223         adrp    x1, .LC7
4224         mov     x0, x21
4225         add     x1, x1, :lo12:.LC7
4226         ldr     x2, [x2, #:got_lo12:g_MaxLpn]
4227         ldr     w2, [x2]
4228         bl      sprintf
4229         add     x21, x21, x0, sxtw
4230         adrp    x2, :got:g_VaildLpn
4231         adrp    x1, .LC8
4232         mov     x0, x21
4233         add     x1, x1, :lo12:.LC8
4234         ldr     x2, [x2, #:got_lo12:g_VaildLpn]
4235         ldr     w2, [x2]
4236         bl      sprintf
4237         add     x21, x21, x0, sxtw
4238         adrp    x2, :got:g_totle_read_page_count
4239         adrp    x1, .LC9
4240         mov     x0, x21
4241         add     x1, x1, :lo12:.LC9
4242         ldr     x2, [x2, #:got_lo12:g_totle_read_page_count]
4243         ldr     w2, [x2]
4244         bl      sprintf
4245         add     x21, x21, x0, sxtw
4246         adrp    x2, :got:g_totle_discard_page_count
4247         adrp    x1, .LC10
4248         mov     x0, x21
4249         add     x1, x1, :lo12:.LC10
4250         ldr     x2, [x2, #:got_lo12:g_totle_discard_page_count]
4251         ldr     w2, [x2]
4252         bl      sprintf
4253         add     x21, x21, x0, sxtw
4254         adrp    x2, :got:g_totle_write_page_count
4255         adrp    x1, .LC11
4256         mov     x0, x21
4257         add     x1, x1, :lo12:.LC11
4258         ldr     x2, [x2, #:got_lo12:g_totle_write_page_count]
4259         ldr     w2, [x2]
4260         bl      sprintf
4261         add     x21, x21, x0, sxtw
4262         adrp    x2, :got:g_totle_cache_write_count
4263         adrp    x1, .LC12
4264         mov     x0, x21
4265         add     x1, x1, :lo12:.LC12
4266         ldr     x2, [x2, #:got_lo12:g_totle_cache_write_count]
4267         ldr     w2, [x2]
4268         bl      sprintf
4269         add     x21, x21, x0, sxtw
4270         adrp    x2, :got:g_totle_l2p_write_count
4271         adrp    x1, .LC13
4272         mov     x0, x21
4273         add     x1, x1, :lo12:.LC13
4274         ldr     x2, [x2, #:got_lo12:g_totle_l2p_write_count]
4275         ldr     w2, [x2]
4276         bl      sprintf
4277         add     x21, x21, x0, sxtw
4278         adrp    x2, :got:g_totle_gc_page_count
4279         adrp    x1, .LC14
4280         mov     x0, x21
4281         add     x1, x1, :lo12:.LC14
4282         ldr     x2, [x2, #:got_lo12:g_totle_gc_page_count]
4283         ldr     w2, [x2]
4284         bl      sprintf
4285         add     x21, x21, x0, sxtw
4286         adrp    x0, :got:g_totle_write_sector
4287         adrp    x1, .LC15
4288         add     x1, x1, :lo12:.LC15
4289         ldr     x0, [x0, #:got_lo12:g_totle_write_sector]
4290         ldr     w2, [x0]
4291         mov     x0, x21
4292         lsr     w2, w2, 11
4293         bl      sprintf
4294         add     x21, x21, x0, sxtw
4295         adrp    x0, :got:g_totle_read_sector
4296         adrp    x1, .LC16
4297         add     x1, x1, :lo12:.LC16
4298         ldr     x0, [x0, #:got_lo12:g_totle_read_sector]
4299         ldr     w2, [x0]
4300         mov     x0, x21
4301         lsr     w2, w2, 11
4302         bl      sprintf
4303         add     x21, x21, x0, sxtw
4304         adrp    x2, :got:g_GlobalSysVersion
4305         adrp    x1, .LC17
4306         mov     x0, x21
4307         add     x1, x1, :lo12:.LC17
4308         ldr     x2, [x2, #:got_lo12:g_GlobalSysVersion]
4309         ldr     w2, [x2]
4310         bl      sprintf
4311         add     x21, x21, x0, sxtw
4312         adrp    x2, :got:g_GlobalDataVersion
4313         adrp    x1, .LC18
4314         add     x1, x1, :lo12:.LC18
4315         mov     x0, x21
4316         ldr     x2, [x2, #:got_lo12:g_GlobalDataVersion]
4317         ldr     w2, [x2]
4318         bl      sprintf
4319         ldr     x19, [x19, #:got_lo12:gBbtInfo]
4320         add     x21, x21, x0, sxtw
4321         ldrh    w2, [x19,6]
4322         str     x2, [x29,104]
4323         bl      FtlBbtCalcTotleCnt
4324         uxth    w3, w0
4325         ldr     x2, [x29,104]
4326         adrp    x1, .LC19
4327         mov     x0, x21
4328         add     x1, x1, :lo12:.LC19
4329         bl      sprintf
4330         ldr     x25, [x25, #:got_lo12:g_num_free_superblocks]
4331         adrp    x1, .LC20
4332         add     x21, x21, x0, sxtw
4333         add     x1, x1, :lo12:.LC20
4334         mov     x0, x21
4335         ldrh    w2, [x25]
4336         bl      sprintf
4337         add     x21, x21, x0, sxtw
4338         adrp    x2, :got:g_totle_mlc_erase_count
4339         adrp    x1, .LC21
4340         mov     x0, x21
4341         add     x1, x1, :lo12:.LC21
4342         ldr     x2, [x2, #:got_lo12:g_totle_mlc_erase_count]
4343         ldr     w2, [x2]
4344         bl      sprintf
4345         add     x21, x21, x0, sxtw
4346         adrp    x2, :got:g_totle_slc_erase_count
4347         adrp    x1, .LC22
4348         mov     x0, x21
4349         add     x1, x1, :lo12:.LC22
4350         ldr     x2, [x2, #:got_lo12:g_totle_slc_erase_count]
4351         ldr     w2, [x2]
4352         bl      sprintf
4353         add     x21, x21, x0, sxtw
4354         adrp    x2, :got:g_totle_avg_erase_count
4355         adrp    x1, .LC23
4356         mov     x0, x21
4357         add     x1, x1, :lo12:.LC23
4358         ldr     x2, [x2, #:got_lo12:g_totle_avg_erase_count]
4359         ldr     w2, [x2]
4360         bl      sprintf
4361         add     x21, x21, x0, sxtw
4362         adrp    x2, :got:g_totle_sys_slc_erase_count
4363         adrp    x1, .LC24
4364         mov     x0, x21
4365         add     x1, x1, :lo12:.LC24
4366         ldr     x2, [x2, #:got_lo12:g_totle_sys_slc_erase_count]
4367         ldr     w2, [x2]
4368         bl      sprintf
4369         add     x21, x21, x0, sxtw
4370         adrp    x2, :got:g_max_erase_count
4371         adrp    x1, .LC25
4372         mov     x0, x21
4373         add     x1, x1, :lo12:.LC25
4374         ldr     x2, [x2, #:got_lo12:g_max_erase_count]
4375         ldr     w2, [x2]
4376         bl      sprintf
4377         add     x21, x21, x0, sxtw
4378         adrp    x2, :got:g_min_erase_count
4379         adrp    x1, .LC26
4380         mov     x0, x21
4381         add     x1, x1, :lo12:.LC26
4382         ldr     x2, [x2, #:got_lo12:g_min_erase_count]
4383         ldr     w2, [x2]
4384         bl      sprintf
4385         ldr     x20, [x20, #:got_lo12:g_sys_save_data]
4386         adrp    x1, .LC27
4387         add     x21, x21, x0, sxtw
4388         add     x1, x1, :lo12:.LC27
4389         mov     x0, x21
4390         ldrh    w2, [x20,30]
4391         bl      sprintf
4392         add     x21, x21, x0, sxtw
4393         ldrh    w2, [x20,28]
4394         adrp    x1, .LC28
4395         mov     x0, x21
4396         add     x1, x1, :lo12:.LC28
4397         adrp    x20, :got:g_gc_superblock
4398         bl      sprintf
4399         add     x21, x21, x0, sxtw
4400         adrp    x2, :got:g_MaxLbaSector
4401         adrp    x1, .LC29
4402         mov     x0, x21
4403         add     x1, x1, :lo12:.LC29
4404         ldr     x2, [x2, #:got_lo12:g_MaxLbaSector]
4405         ldr     w2, [x2]
4406         bl      sprintf
4407         add     x21, x21, x0, sxtw
4408         adrp    x2, :got:c_ftl_nand_init_sys_blks_per_plane
4409         adrp    x1, .LC30
4410         mov     x0, x21
4411         add     x1, x1, :lo12:.LC30
4412         ldr     x2, [x2, #:got_lo12:c_ftl_nand_init_sys_blks_per_plane]
4413         ldr     w2, [x2]
4414         bl      sprintf
4415         add     x21, x21, x0, sxtw
4416         adrp    x2, :got:c_ftl_nand_sys_blks_per_plane
4417         adrp    x1, .LC31
4418         mov     x0, x21
4419         add     x1, x1, :lo12:.LC31
4420         ldr     x2, [x2, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
4421         ldr     w2, [x2]
4422         bl      sprintf
4423         add     x21, x21, x0, sxtw
4424         adrp    x2, :got:gSysFreeQueue
4425         adrp    x1, .LC32
4426         mov     x0, x21
4427         add     x1, x1, :lo12:.LC32
4428         ldr     x2, [x2, #:got_lo12:gSysFreeQueue]
4429         ldrh    w2, [x2,6]
4430         bl      sprintf
4431         add     x21, x21, x0, sxtw
4432         adrp    x2, :got:c_ftl_nand_data_blks_per_plane
4433         adrp    x1, .LC33
4434         mov     x0, x21
4435         add     x1, x1, :lo12:.LC33
4436         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_blks_per_plane]
4437         ldrh    w2, [x2]
4438         bl      sprintf
4439         add     x21, x21, x0, sxtw
4440         adrp    x2, :got:c_ftl_nand_data_op_blks_per_plane
4441         adrp    x1, .LC34
4442         mov     x0, x21
4443         add     x1, x1, :lo12:.LC34
4444         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
4445         ldrh    w2, [x2]
4446         bl      sprintf
4447         add     x21, x21, x0, sxtw
4448         adrp    x2, :got:c_ftl_nand_max_data_blks
4449         adrp    x1, .LC35
4450         mov     x0, x21
4451         add     x1, x1, :lo12:.LC35
4452         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_data_blks]
4453         ldr     w2, [x2]
4454         bl      sprintf
4455         add     x21, x21, x0, sxtw
4456         adrp    x2, :got:gSysInfo
4457         adrp    x1, .LC36
4458         mov     x0, x21
4459         add     x1, x1, :lo12:.LC36
4460         ldr     x2, [x2, #:got_lo12:gSysInfo]
4461         ldrh    w2, [x2]
4462         bl      sprintf
4463         add     x21, x21, x0, sxtw
4464         ldrh    w2, [x19]
4465         adrp    x1, .LC37
4466         adrp    x19, :got:g_active_superblock
4467         mov     x0, x21
4468         add     x1, x1, :lo12:.LC37
4469         bl      sprintf
4470         ldr     x19, [x19, #:got_lo12:g_active_superblock]
4471         adrp    x1, .LC38
4472         add     x21, x21, x0, sxtw
4473         add     x1, x1, :lo12:.LC38
4474         mov     x0, x21
4475         ldrh    w2, [x19,2]
4476         bl      sprintf
4477         add     x21, x21, x0, sxtw
4478         ldrb    w2, [x19,6]
4479         adrp    x1, .LC39
4480         mov     x0, x21
4481         add     x1, x1, :lo12:.LC39
4482         bl      sprintf
4483         add     x21, x21, x0, sxtw
4484         ldrh    w2, [x19]
4485         adrp    x1, .LC40
4486         mov     x0, x21
4487         add     x1, x1, :lo12:.LC40
4488         bl      sprintf
4489         add     x21, x21, x0, sxtw
4490         ldrb    w2, [x19,8]
4491         adrp    x1, .LC41
4492         mov     x0, x21
4493         add     x1, x1, :lo12:.LC41
4494         bl      sprintf
4495         add     x21, x21, x0, sxtw
4496         ldrh    w2, [x19,4]
4497         adrp    x1, .LC42
4498         mov     x0, x21
4499         add     x1, x1, :lo12:.LC42
4500         bl      sprintf
4501         ldr     x24, [x23, #:got_lo12:p_valid_page_count_table]
4502         ldrh    w3, [x19]
4503         adrp    x1, .LC43
4504         adrp    x19, :got:g_buffer_superblock
4505         add     x21, x21, x0, sxtw
4506         ldr     x2, [x24]
4507         mov     x0, x21
4508         add     x1, x1, :lo12:.LC43
4509         ldrh    w2, [x2,x3,lsl 1]
4510         bl      sprintf
4511         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
4512         adrp    x1, .LC44
4513         add     x21, x21, x0, sxtw
4514         add     x1, x1, :lo12:.LC44
4515         mov     x0, x21
4516         ldrh    w2, [x19,2]
4517         bl      sprintf
4518         add     x21, x21, x0, sxtw
4519         ldrb    w2, [x19,6]
4520         adrp    x1, .LC45
4521         mov     x0, x21
4522         add     x1, x1, :lo12:.LC45
4523         bl      sprintf
4524         add     x21, x21, x0, sxtw
4525         ldrh    w2, [x19]
4526         adrp    x1, .LC46
4527         mov     x0, x21
4528         add     x1, x1, :lo12:.LC46
4529         bl      sprintf
4530         add     x21, x21, x0, sxtw
4531         ldrb    w2, [x19,8]
4532         adrp    x1, .LC47
4533         mov     x0, x21
4534         add     x1, x1, :lo12:.LC47
4535         bl      sprintf
4536         add     x21, x21, x0, sxtw
4537         ldrh    w2, [x19,4]
4538         adrp    x1, .LC48
4539         mov     x0, x21
4540         add     x1, x1, :lo12:.LC48
4541         bl      sprintf
4542         add     x21, x21, x0, sxtw
4543         ldrh    w3, [x19]
4544         adrp    x1, .LC49
4545         ldr     x2, [x24]
4546         adrp    x19, :got:g_gc_temp_superblock
4547         mov     x0, x21
4548         add     x1, x1, :lo12:.LC49
4549         ldrh    w2, [x2,x3,lsl 1]
4550         bl      sprintf
4551         ldr     x19, [x19, #:got_lo12:g_gc_temp_superblock]
4552         adrp    x1, .LC50
4553         add     x21, x21, x0, sxtw
4554         add     x1, x1, :lo12:.LC50
4555         mov     x0, x21
4556         ldrh    w2, [x19,2]
4557         bl      sprintf
4558         add     x21, x21, x0, sxtw
4559         ldrb    w2, [x19,6]
4560         adrp    x1, .LC51
4561         mov     x0, x21
4562         add     x1, x1, :lo12:.LC51
4563         bl      sprintf
4564         add     x21, x21, x0, sxtw
4565         ldrh    w2, [x19]
4566         adrp    x1, .LC52
4567         mov     x0, x21
4568         add     x1, x1, :lo12:.LC52
4569         bl      sprintf
4570         add     x21, x21, x0, sxtw
4571         ldrb    w2, [x19,8]
4572         adrp    x1, .LC53
4573         mov     x0, x21
4574         add     x1, x1, :lo12:.LC53
4575         bl      sprintf
4576         add     x21, x21, x0, sxtw
4577         ldrh    w2, [x19,4]
4578         adrp    x1, .LC54
4579         mov     x0, x21
4580         add     x1, x1, :lo12:.LC54
4581         bl      sprintf
4582         ldr     x20, [x20, #:got_lo12:g_gc_superblock]
4583         adrp    x1, .LC55
4584         add     x21, x21, x0, sxtw
4585         add     x1, x1, :lo12:.LC55
4586         mov     x0, x21
4587         ldrh    w2, [x20,2]
4588         bl      sprintf
4589         add     x21, x21, x0, sxtw
4590         ldrb    w2, [x20,6]
4591         adrp    x1, .LC56
4592         mov     x0, x21
4593         add     x1, x1, :lo12:.LC56
4594         bl      sprintf
4595         add     x21, x21, x0, sxtw
4596         ldrh    w2, [x20]
4597         adrp    x1, .LC57
4598         mov     x0, x21
4599         add     x1, x1, :lo12:.LC57
4600         bl      sprintf
4601         add     x21, x21, x0, sxtw
4602         ldrb    w2, [x20,8]
4603         adrp    x1, .LC58
4604         mov     x0, x21
4605         add     x1, x1, :lo12:.LC58
4606         bl      sprintf
4607         add     x21, x21, x0, sxtw
4608         ldrh    w2, [x20,4]
4609         adrp    x1, .LC59
4610         mov     x0, x21
4611         add     x1, x1, :lo12:.LC59
4612         bl      sprintf
4613         add     x21, x21, x0, sxtw
4614         adrp    x0, :got:g_all_blk_used_slc_mode
4615         ldr     x26, [x26, #:got_lo12:g_sys_ext_data]
4616         adrp    x1, .LC60
4617         add     x1, x1, :lo12:.LC60
4618         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
4619         ldr     w4, [x26,84]
4620         ldr     w5, [x26,76]
4621         ldr     w3, [x0]
4622         adrp    x0, :got:g_inkDie_check_enable
4623         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
4624         ldr     w2, [x0]
4625         mov     x0, x21
4626         orr     w2, w2, w3, lsl 8
4627         ldr     w3, [x26,80]
4628         bl      sprintf
4629         add     x19, x21, x0, sxtw
4630         ldr     w2, [x26,72]
4631         adrp    x1, .LC61
4632         mov     x0, x19
4633         add     x1, x1, :lo12:.LC61
4634         bl      sprintf
4635         add     x19, x19, x0, sxtw
4636         ldr     w2, [x26,96]
4637         adrp    x1, .LC62
4638         mov     x0, x19
4639         add     x1, x1, :lo12:.LC62
4640         bl      sprintf
4641         add     x19, x19, x0, sxtw
4642         adrp    x2, :got:g_gc_free_blk_threshold
4643         adrp    x1, .LC63
4644         mov     x0, x19
4645         add     x1, x1, :lo12:.LC63
4646         ldr     x2, [x2, #:got_lo12:g_gc_free_blk_threshold]
4647         ldrh    w2, [x2]
4648         bl      sprintf
4649         add     x19, x19, x0, sxtw
4650         adrp    x2, :got:g_gc_merge_free_blk_threshold
4651         adrp    x1, .LC64
4652         mov     x0, x19
4653         add     x1, x1, :lo12:.LC64
4654         ldr     x2, [x2, #:got_lo12:g_gc_merge_free_blk_threshold]
4655         ldrh    w2, [x2]
4656         bl      sprintf
4657         add     x19, x19, x0, sxtw
4658         adrp    x2, :got:g_gc_skip_write_count
4659         adrp    x1, .LC65
4660         mov     x0, x19
4661         add     x1, x1, :lo12:.LC65
4662         ldr     x2, [x2, #:got_lo12:g_gc_skip_write_count]
4663         ldr     w2, [x2]
4664         bl      sprintf
4665         add     x19, x19, x0, sxtw
4666         adrp    x2, :got:g_gc_blk_index
4667         adrp    x1, .LC66
4668         add     x1, x1, :lo12:.LC66
4669         mov     x0, x19
4670         ldr     x2, [x2, #:got_lo12:g_gc_blk_index]
4671         ldrh    w2, [x2]
4672         bl      sprintf
4673         add     x19, x19, x0, sxtw
4674         bl      GetFreeBlockMinEraseCount
4675         uxth    w2, w0
4676         adrp    x1, .LC67
4677         mov     x0, x19
4678         add     x1, x1, :lo12:.LC67
4679         bl      sprintf
4680         add     x19, x19, x0, sxtw
4681         ldrh    w0, [x25]
4682         bl      GetFreeBlockMaxEraseCount
4683         uxth    w2, w0
4684         adrp    x1, .LC68
4685         mov     x0, x19
4686         add     x1, x1, :lo12:.LC68
4687         bl      sprintf
4688         add     x19, x19, x0, sxtw
4689         ldrh    w0, [x20]
4690         mov     w1, 65535
4691         cmp     w0, w1
4692         beq     .L549
4693         ubfiz   x2, x0, 1, 16
4694         ldr     x3, [x24]
4695         adrp    x1, .LC69
4696         mov     x0, x19
4697         add     x1, x1, :lo12:.LC69
4698         ldrh    w2, [x3,x2]
4699         bl      sprintf
4700         add     x19, x19, x0, sxtw
4701 .L549:
4702         mov     w0, 0
4703         adrp    x24, .LC70
4704         mov     w20, 0
4705         adrp    x28, :got:p_data_block_list_table
4706         bl      List_get_gc_head_node
4707         add     x24, x24, :lo12:.LC70
4708         uxth    w3, w0
4709         mov     w9, 65535
4710         mov     w8, 6
4711         adrp    x27, :got:p_erase_count_table
4712 .L551:
4713         cmp     w3, w9
4714         str     x9, [x29,96]
4715         adrp    x21, :got:p_data_block_list_table
4716         beq     .L550
4717         ldr     x0, [x23, #:got_lo12:p_valid_page_count_table]
4718         ubfiz   x6, x3, 1, 16
4719         ldr     x26, [x28, #:got_lo12:p_data_block_list_table]
4720         mov     w2, w20
4721         umull   x25, w3, w8
4722         ldr     x4, [x0]
4723         mov     x1, x24
4724         ldr     x0, [x27, #:got_lo12:p_erase_count_table]
4725         add     w20, w20, 1
4726         ldr     x5, [x26]
4727         ldrh    w4, [x4,x6]
4728         ldr     x7, [x0]
4729         add     x5, x5, x25
4730         mov     x0, x19
4731         str     x8, [x29,104]
4732         ldrh    w5, [x5,4]
4733         ldrh    w6, [x7,x6]
4734         bl      sprintf
4735         add     x19, x19, x0, sxtw
4736         ldr     x0, [x26]
4737         cmp     w20, 16
4738         ldr     x8, [x29,104]
4739         ldr     x9, [x29,96]
4740         ldrh    w3, [x0,x25]
4741         bne     .L551
4742 .L550:
4743         adrp    x0, :got:p_free_data_block_list_head
4744         ldr     x1, [x21, #:got_lo12:p_data_block_list_table]
4745         adrp    x23, .LC71
4746         mov     w20, 0
4747         mov     w28, 65535
4748         mov     w27, 6
4749         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
4750         add     x23, x23, :lo12:.LC71
4751         ldr     x3, [x1]
4752         adrp    x26, :got:p_erase_count_table
4753         ldr     x0, [x0]
4754         sub     x3, x0, x3
4755         mov     x0, -6148914691236517206
4756         asr     x3, x3, 1
4757         madd    x3, x0, x3, x3
4758         uxth    w3, w3
4759 .L553:
4760         cmp     w3, w28
4761         beq     .L552
4762         ldr     x25, [x21, #:got_lo12:p_data_block_list_table]
4763         ubfiz   x5, x3, 1, 16
4764         ldr     x0, [x26, #:got_lo12:p_erase_count_table]
4765         mov     w2, w20
4766         umull   x24, w3, w27
4767         ldr     x4, [x25]
4768         mov     x1, x23
4769         ldr     x6, [x0]
4770         mov     x0, x19
4771         add     x4, x4, x24
4772         add     w20, w20, 1
4773         ldrh    w5, [x6,x5]
4774         ldrh    w4, [x4,4]
4775         bl      sprintf
4776         add     x19, x19, x0, sxtw
4777         ldr     x0, [x25]
4778         cmp     w20, 4
4779         ldrh    w3, [x0,x24]
4780         bne     .L553
4781 .L552:
4782         sub     w0, w19, w22
4783 .L548:
4784         ldp     x19, x20, [sp,16]
4785         ldp     x21, x22, [sp,32]
4786         ldp     x23, x24, [sp,48]
4787         ldp     x25, x26, [sp,64]
4788         ldp     x27, x28, [sp,80]
4789         ldp     x29, x30, [sp], 128
4790         ret
4791         .size   FtlPrintInfo2buf, .-FtlPrintInfo2buf
4792         .align  2
4793         .global rknand_proc_ftlread
4794         .type   rknand_proc_ftlread, %function
4795 rknand_proc_ftlread:
4796         stp     x29, x30, [sp, -32]!
4797         adrp    x1, .LC72
4798         adrp    x2, .LC73
4799         add     x29, sp, 0
4800         add     x1, x1, :lo12:.LC72
4801         add     x2, x2, :lo12:.LC73
4802         stp     x19, x20, [sp,16]
4803         mov     x20, x0
4804         bl      sprintf
4805         add     x19, x20, x0, sxtw
4806         mov     x0, x19
4807         bl      FtlPrintInfo2buf
4808         add     x0, x19, x0, sxtw
4809         sub     w0, w0, w20
4810         ldp     x19, x20, [sp,16]
4811         ldp     x29, x30, [sp], 32
4812         ret
4813         .size   rknand_proc_ftlread, .-rknand_proc_ftlread
4814         .align  2
4815         .global GetSwlReplaceBlock
4816         .type   GetSwlReplaceBlock, %function
4817 GetSwlReplaceBlock:
4818         adrp    x1, :got:g_totle_avg_erase_count
4819         adrp    x2, :got:g_min_erase_count
4820         stp     x29, x30, [sp, -96]!
4821         add     x29, sp, 0
4822         ldr     x0, [x1, #:got_lo12:g_totle_avg_erase_count]
4823         stp     x23, x24, [sp,48]
4824         str     x25, [sp,64]
4825         mov     x24, x1
4826         stp     x19, x20, [sp,16]
4827         stp     x21, x22, [sp,32]
4828         mov     x25, x2
4829         ldr     w3, [x0]
4830         ldr     x0, [x2, #:got_lo12:g_min_erase_count]
4831         ldr     w0, [x0]
4832         cmp     w3, w0
4833         bcs     .L558
4834         adrp    x0, :got:g_totle_mlc_erase_count
4835         adrp    x2, :got:p_erase_count_table
4836         ldr     x1, [x0, #:got_lo12:g_totle_mlc_erase_count]
4837         str     wzr, [x1]
4838         adrp    x1, :got:c_ftl_nand_data_blks_per_plane
4839         ldr     x2, [x2, #:got_lo12:p_erase_count_table]
4840         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_blks_per_plane]
4841         ldr     x5, [x2]
4842         mov     x2, 0
4843         ldrh    w1, [x1]
4844 .L559:
4845         cmp     w1, w2
4846         bls     .L602
4847         ldr     x4, [x0, #:got_lo12:g_totle_mlc_erase_count]
4848         ldrh    w6, [x5,x2,lsl 1]
4849         add     x2, x2, 1
4850         ldr     w3, [x4]
4851         add     w3, w6, w3
4852         str     w3, [x4]
4853         b       .L559
4854 .L602:
4855         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
4856         ldr     x2, [x24, #:got_lo12:g_totle_avg_erase_count]
4857         ldr     w3, [x0]
4858         udiv    w1, w3, w1
4859         str     w1, [x2]
4860         adrp    x1, :got:g_totle_slc_erase_count
4861         ldr     x1, [x1, #:got_lo12:g_totle_slc_erase_count]
4862         ldr     w1, [x1]
4863         sub     w3, w3, w1
4864         adrp    x1, :got:c_mlc_erase_count_value
4865         ldr     x1, [x1, #:got_lo12:c_mlc_erase_count_value]
4866         ldrh    w1, [x1]
4867         udiv    w3, w3, w1
4868         str     w3, [x0]
4869         b       .L561
4870 .L558:
4871         adrp    x0, :got:g_max_erase_count
4872         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
4873         ldr     w1, [x0]
4874         cmp     w3, w1
4875         bls     .L561
4876         add     w1, w1, 1
4877         adrp    x4, :got:c_ftl_nand_data_blks_per_plane
4878         str     w1, [x0]
4879         adrp    x5, :got:p_erase_count_table
4880         mov     w0, 0
4881 .L563:
4882         ldr     x1, [x4, #:got_lo12:c_ftl_nand_data_blks_per_plane]
4883         ldrh    w1, [x1]
4884         cmp     w0, w1
4885         bcs     .L561
4886         ldr     x1, [x5, #:got_lo12:p_erase_count_table]
4887         ubfiz   x2, x0, 1, 32
4888         add     w0, w0, 1
4889         ldr     x3, [x1]
4890         ldrh    w1, [x3,x2]
4891         add     w1, w1, 1
4892         strh    w1, [x3,x2]
4893         b       .L563
4894 .L561:
4895         ldr     x0, [x25, #:got_lo12:g_min_erase_count]
4896         ldr     x1, [x24, #:got_lo12:g_totle_avg_erase_count]
4897         ldr     w0, [x0]
4898         ldr     w1, [x1]
4899         add     w2, w0, 341
4900         cmp     w2, w1
4901         bls     .L566
4902         adrp    x2, :got:g_max_erase_count
4903         add     w1, w0, 1024
4904         ldr     x2, [x2, #:got_lo12:g_max_erase_count]
4905         ldr     w2, [x2]
4906         cmp     w1, w2
4907         bls     .L566
4908         adrp    x1, :got:g_inkDie_check_enable
4909         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
4910         ldr     w1, [x1]
4911         cbz     w1, .L569
4912         cmp     w0, 30
4913         bls     .L566
4914 .L569:
4915         mov     w0, 65535
4916         b       .L568
4917 .L566:
4918         adrp    x0, :got:g_num_free_superblocks
4919         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
4920         ldrh    w0, [x0]
4921         add     w0, w0, w0, lsl 1
4922         lsr     w0, w0, 2
4923         bl      GetFreeBlockMaxEraseCount
4924         uxth    w6, w0
4925         ldr     x0, [x25, #:got_lo12:g_min_erase_count]
4926         ldr     w1, [x0]
4927         add     w0, w1, 64
4928         cmp     w6, w0
4929         bcs     .L582
4930         cmp     w1, 30
4931         bhi     .L569
4932 .L582:
4933         adrp    x0, :got:p_data_block_list_head
4934         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
4935         ldr     x2, [x0]
4936         cbz     x2, .L569
4937         adrp    x0, :got:p_data_block_list_table
4938         adrp    x21, :got:p_erase_count_table
4939         mov     w22, 65535
4940         mov     w10, 6
4941         mov     w19, w22
4942         mov     w9, w22
4943         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4944         ldr     x8, [x0]
4945         ldr     x0, [x21, #:got_lo12:p_erase_count_table]
4946         ldr     x5, [x0]
4947         mov     x0, -6148914691236517206
4948         add     x0, x0, 1
4949 .L571:
4950         ldrh    w4, [x2]
4951         cmp     w4, w9
4952         beq     .L573
4953         ldrh    w3, [x2,4]
4954         cbz     w3, .L572
4955         sub     x3, x2, x8
4956         asr     x3, x3, 1
4957         mul     x3, x3, x0
4958         uxth    w7, w3
4959         and     x3, x3, 65535
4960         ldrh    w2, [x5,x3,lsl 1]
4961         cmp     w2, w1
4962         bls     .L581
4963         cmp     w2, w22
4964         bcs     .L572
4965         mov     w22, w2
4966         mov     w19, w7
4967 .L572:
4968         umull   x2, w4, w10
4969         add     x2, x8, x2
4970         b       .L571
4971 .L581:
4972         mov     w19, w7
4973 .L573:
4974         mov     w0, 65535
4975         cmp     w19, w0
4976         beq     .L569
4977         ubfiz   x23, x19, 1, 16
4978         ldrh    w20, [x5,x23]
4979         cmp     w20, w1
4980         bls     .L576
4981         str     x6, [x29,88]
4982         bl      GetFreeBlockMinEraseCount
4983         ldr     x2, [x25, #:got_lo12:g_min_erase_count]
4984         ldr     x6, [x29,88]
4985         ldr     w1, [x2]
4986         cmp     w1, w0, uxth
4987         bcs     .L576
4988         str     w22, [x2]
4989 .L576:
4990         cmp     w20, 29
4991         bhi     .L578
4992         adrp    x0, :got:g_inkDie_check_enable
4993         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
4994         ldr     w0, [x0]
4995         cbz     w0, .L578
4996         ldr     x1, [x24, #:got_lo12:g_totle_avg_erase_count]
4997         add     w0, w20, 10
4998         ldr     w1, [x1]
4999         cmp     w0, w1
5000         bls     .L579
5001         adrp    x0, :got:c_mlc_erase_count_value
5002         ldr     x0, [x0, #:got_lo12:c_mlc_erase_count_value]
5003         ldrh    w0, [x0]
5004         cmp     w0, w20
5005         bls     .L578
5006 .L579:
5007         adrp    x0, :got:g_num_data_superblocks
5008         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
5009         ldrh    w0, [x0]
5010         cmp     w0, 64
5011         bls     .L578
5012         ldr     x21, [x21, #:got_lo12:p_erase_count_table]
5013         adrp    x0, .LC74
5014         mov     w1, w19
5015         add     x0, x0, :lo12:.LC74
5016         ldr     x2, [x21]
5017         ldrh    w2, [x2,x23]
5018         bl      printk
5019         b       .L601
5020 .L578:
5021         ldr     x1, [x24, #:got_lo12:g_totle_avg_erase_count]
5022         ldr     w2, [x1]
5023         cmp     w20, w2
5024         bcs     .L569
5025         add     w0, w20, 128
5026         cmp     w6, w0
5027         ble     .L569
5028         add     w0, w20, 341
5029         adrp    x1, :got:g_max_erase_count
5030         cmp     w0, w2
5031         bcc     .L580
5032         ldr     x0, [x1, #:got_lo12:g_max_erase_count]
5033         add     w20, w20, 1024
5034         ldr     w0, [x0]
5035         cmp     w20, w0
5036         bcs     .L569
5037 .L580:
5038         adrp    x0, :got:p_valid_page_count_table
5039         ldr     x21, [x21, #:got_lo12:p_erase_count_table]
5040         ldr     x3, [x1, #:got_lo12:g_max_erase_count]
5041         mov     w1, w19
5042         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
5043         ldr     x5, [x21]
5044         ldr     w3, [x3]
5045         ldr     x4, [x0]
5046         adrp    x0, .LC75
5047         ldrh    w5, [x5,x23]
5048         add     x0, x0, :lo12:.LC75
5049         ldrh    w4, [x4,x23]
5050         bl      printk
5051 .L601:
5052         adrp    x0, :got:g_in_swl_replace
5053         mov     w1, 1
5054         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
5055         str     w1, [x0]
5056         mov     w0, w19
5057 .L568:
5058         ldp     x19, x20, [sp,16]
5059         ldp     x21, x22, [sp,32]
5060         ldp     x23, x24, [sp,48]
5061         ldr     x25, [sp,64]
5062         ldp     x29, x30, [sp], 96
5063         ret
5064         .size   GetSwlReplaceBlock, .-GetSwlReplaceBlock
5065         .align  2
5066         .global free_data_superblock
5067         .type   free_data_superblock, %function
5068 free_data_superblock:
5069         stp     x29, x30, [sp, -16]!
5070         uxth    w0, w0
5071         mov     w1, 65535
5072         cmp     w0, w1
5073         add     x29, sp, 0
5074         beq     .L604
5075         adrp    x1, :got:p_valid_page_count_table
5076         ubfiz   x2, x0, 1, 16
5077         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
5078         ldr     x1, [x1]
5079         strh    wzr, [x1,x2]
5080         bl      INSERT_FREE_LIST
5081 .L604:
5082         mov     w0, 0
5083         ldp     x29, x30, [sp], 16
5084         ret
5085         .size   free_data_superblock, .-free_data_superblock
5086         .align  2
5087         .global FtlGcBufInit
5088         .type   FtlGcBufInit, %function
5089 FtlGcBufInit:
5090         adrp    x0, :got:g_gc_num_req
5091         mov     w1, 0
5092         adrp    x6, :got:c_ftl_nand_planes_num
5093         mov     w7, 24
5094         adrp    x8, :got:gp_gc_page_buf_info
5095         mov     w9, 1
5096         ldr     x0, [x0, #:got_lo12:g_gc_num_req]
5097         adrp    x10, :got:c_ftl_nand_byte_pre_page
5098         mov     w3, 4
5099         adrp    x11, :got:p_gc_data_buf
5100         adrp    x12, :got:c_ftl_nand_byte_pre_oob
5101         adrp    x13, :got:p_gc_spare_buf
5102         str     wzr, [x0]
5103         adrp    x14, :got:req_gc
5104         mov     w15, 56
5105 .L606:
5106         ldr     x0, [x6, #:got_lo12:c_ftl_nand_planes_num]
5107         ldrh    w0, [x0]
5108         cmp     w1, w0
5109         bcs     .L610
5110         ldr     x4, [x8, #:got_lo12:gp_gc_page_buf_info]
5111         umull   x2, w1, w7
5112         ldr     x5, [x4]
5113         add     x0, x5, x2
5114         str     w9, [x0,16]
5115         ldr     x0, [x10, #:got_lo12:c_ftl_nand_byte_pre_page]
5116         ldr     x16, [x11, #:got_lo12:p_gc_data_buf]
5117         ldrh    w0, [x0]
5118         ldr     x16, [x16]
5119         mul     w0, w1, w0
5120         sdiv    w0, w0, w3
5121         add     x0, x16, x0, sxtw 2
5122         str     x0, [x5,x2]
5123         ldr     x0, [x12, #:got_lo12:c_ftl_nand_byte_pre_oob]
5124         ldr     x5, [x4]
5125         ldr     x16, [x13, #:got_lo12:p_gc_spare_buf]
5126         ldrh    w0, [x0]
5127         add     x4, x5, x2
5128         ldr     x16, [x16]
5129         mul     w0, w1, w0
5130         sdiv    w0, w0, w3
5131         add     x0, x16, x0, sxtw 2
5132         str     x0, [x4,8]
5133         umull   x0, w1, w15
5134         ldr     x16, [x14, #:got_lo12:req_gc]
5135         add     w1, w1, 1
5136         ldr     x2, [x5,x2]
5137         uxth    w1, w1
5138         ldr     x16, [x16]
5139         add     x0, x16, x0
5140         str     x2, [x0,8]
5141         ldr     x2, [x4,8]
5142         str     x2, [x0,16]
5143         b       .L606
5144 .L610:
5145         adrp    x6, :got:c_gc_page_buf_num
5146         mov     w7, 24
5147         adrp    x8, :got:gp_gc_page_buf_info
5148         adrp    x9, :got:c_ftl_nand_byte_pre_page
5149         mov     w3, 4
5150         adrp    x10, :got:p_gc_data_buf
5151         adrp    x11, :got:c_ftl_nand_byte_pre_oob
5152         adrp    x12, :got:p_gc_spare_buf
5153 .L608:
5154         ldr     x1, [x6, #:got_lo12:c_gc_page_buf_num]
5155         ldr     w1, [x1]
5156         cmp     w0, w1
5157         bcs     .L611
5158         ldr     x4, [x8, #:got_lo12:gp_gc_page_buf_info]
5159         umull   x2, w0, w7
5160         ldr     x5, [x4]
5161         add     x1, x5, x2
5162         str     wzr, [x1,16]
5163         ldr     x1, [x9, #:got_lo12:c_ftl_nand_byte_pre_page]
5164         ldr     x13, [x10, #:got_lo12:p_gc_data_buf]
5165         ldrh    w1, [x1]
5166         ldr     x13, [x13]
5167         mul     w1, w0, w1
5168         sdiv    w1, w1, w3
5169         add     x1, x13, x1, sxtw 2
5170         str     x1, [x5,x2]
5171         ldr     x1, [x11, #:got_lo12:c_ftl_nand_byte_pre_oob]
5172         ldr     x4, [x4]
5173         ldrh    w1, [x1]
5174         add     x2, x4, x2
5175         ldr     x4, [x12, #:got_lo12:p_gc_spare_buf]
5176         mul     w1, w0, w1
5177         add     w0, w0, 1
5178         ldr     x4, [x4]
5179         sdiv    w1, w1, w3
5180         uxth    w0, w0
5181         add     x1, x4, x1, sxtw 2
5182         str     x1, [x2,8]
5183         b       .L608
5184 .L611:
5185         ret
5186         .size   FtlGcBufInit, .-FtlGcBufInit
5187         .align  2
5188         .global FtlGcBufFree
5189         .type   FtlGcBufFree, %function
5190 FtlGcBufFree:
5191         adrp    x2, :got:c_gc_page_buf_num
5192         mov     w3, 0
5193         mov     w7, 56
5194         mov     w9, 24
5195         ldr     x2, [x2, #:got_lo12:c_gc_page_buf_num]
5196         ldr     w8, [x2]
5197         adrp    x2, :got:gp_gc_page_buf_info
5198         ldr     x2, [x2, #:got_lo12:gp_gc_page_buf_info]
5199         ldr     x5, [x2]
5200 .L613:
5201         cmp     w3, w1
5202         bcs     .L612
5203         umull   x4, w3, w7
5204         mov     w2, 0
5205         add     x4, x0, x4
5206 .L618:
5207         cmp     w2, w8
5208         bcs     .L615
5209         umull   x6, w2, w9
5210         add     x10, x5, x6
5211         ldr     x11, [x5,x6]
5212         ldr     x6, [x4,8]
5213         cmp     x11, x6
5214         bne     .L614
5215         str     wzr, [x10,16]
5216         b       .L615
5217 .L614:
5218         add     w2, w2, 1
5219         uxth    w2, w2
5220         b       .L618
5221 .L615:
5222         add     w3, w3, 1
5223         uxth    w3, w3
5224         b       .L613
5225 .L612:
5226         ret
5227         .size   FtlGcBufFree, .-FtlGcBufFree
5228         .align  2
5229         .global FtlGcBufAlloc
5230         .type   FtlGcBufAlloc, %function
5231 FtlGcBufAlloc:
5232         adrp    x2, :got:c_gc_page_buf_num
5233         mov     w7, 24
5234         mov     w8, 1
5235         mov     w9, 56
5236         ldr     x2, [x2, #:got_lo12:c_gc_page_buf_num]
5237         ldr     w5, [x2]
5238         adrp    x2, :got:gp_gc_page_buf_info
5239         ldr     x2, [x2, #:got_lo12:gp_gc_page_buf_info]
5240         ldr     x6, [x2]
5241         mov     w2, 0
5242 .L620:
5243         cmp     w2, w1
5244         bcs     .L626
5245         mov     w3, 0
5246 .L624:
5247         cmp     w3, w5
5248         bcs     .L622
5249         umull   x4, w3, w7
5250         add     x4, x6, x4
5251         ldr     w10, [x4,16]
5252         cbnz    w10, .L621
5253         umull   x3, w2, w9
5254         str     w8, [x4,16]
5255         add     x3, x0, x3
5256         ldr     x10, [x4]
5257         str     x10, [x3,8]
5258         ldr     x4, [x4,8]
5259         str     x4, [x3,16]
5260         b       .L622
5261 .L621:
5262         add     w3, w3, 1
5263         uxth    w3, w3
5264         b       .L624
5265 .L622:
5266         add     w2, w2, 1
5267         uxth    w2, w2
5268         b       .L620
5269 .L626:
5270         ret
5271         .size   FtlGcBufAlloc, .-FtlGcBufAlloc
5272         .align  2
5273         .global IsBlkInGcList
5274         .type   IsBlkInGcList, %function
5275 IsBlkInGcList:
5276         adrp    x1, :got:g_gc_blk_num
5277         uxth    w0, w0
5278         ldr     x1, [x1, #:got_lo12:g_gc_blk_num]
5279         ldrh    w2, [x1]
5280         adrp    x1, :got:p_gc_blk_tbl
5281         ldr     x1, [x1, #:got_lo12:p_gc_blk_tbl]
5282         ldr     x3, [x1]
5283         mov     x1, 0
5284 .L628:
5285         cmp     w2, w1, uxth
5286         bls     .L632
5287         add     x1, x1, 1
5288         add     x4, x3, x1, lsl 1
5289         ldrh    w4, [x4,-2]
5290         cmp     w4, w0
5291         bne     .L628
5292         mov     w0, 1
5293         b       .L629
5294 .L632:
5295         mov     w0, 0
5296 .L629:
5297         ret
5298         .size   IsBlkInGcList, .-IsBlkInGcList
5299         .align  2
5300         .global FtlGcUpdatePage
5301         .type   FtlGcUpdatePage, %function
5302 FtlGcUpdatePage:
5303         stp     x29, x30, [sp, -48]!
5304         add     x29, sp, 0
5305         str     x19, [sp,16]
5306         mov     w19, w0
5307         lsr     w0, w0, 10
5308         str     x1, [x29,32]
5309         str     x2, [x29,40]
5310         bl      P2V_block_in_plane
5311         adrp    x3, :got:g_gc_blk_num
5312         ldr     x2, [x29,40]
5313         ldr     x1, [x29,32]
5314         uxth    w8, w0
5315         mov     x5, 0
5316         ldr     x4, [x3, #:got_lo12:g_gc_blk_num]
5317         ldrh    w7, [x4]
5318         adrp    x4, :got:p_gc_blk_tbl
5319         ldr     x4, [x4, #:got_lo12:p_gc_blk_tbl]
5320         ldr     x6, [x4]
5321 .L634:
5322         uxth    w4, w5
5323         cmp     w4, w7
5324         bcs     .L638
5325         add     x5, x5, 1
5326         add     x9, x6, x5, lsl 1
5327         ldrh    w9, [x9,-2]
5328         cmp     w9, w8
5329         bne     .L634
5330 .L638:
5331         cmp     w4, w7
5332         bne     .L636
5333         ubfiz   x4, x4, 1, 16
5334         strh    w0, [x6,x4]
5335         ldr     x3, [x3, #:got_lo12:g_gc_blk_num]
5336         ldrh    w4, [x3]
5337         add     w4, w4, 1
5338         strh    w4, [x3]
5339 .L636:
5340         adrp    x3, :got:g_gc_page_offset
5341         adrp    x5, :got:p_gc_page_info
5342         mov     w0, 12
5343         ldr     x3, [x3, #:got_lo12:g_gc_page_offset]
5344         ldr     x5, [x5, #:got_lo12:p_gc_page_info]
5345         ldrh    w4, [x3]
5346         ldr     x6, [x5]
5347         umull   x4, w4, w0
5348         add     x6, x6, x4
5349         str     w1, [x6,4]
5350         ldr     x1, [x5]
5351         add     x0, x1, x4
5352         str     w2, [x0,8]
5353         str     w19, [x1,x4]
5354         ldrh    w0, [x3]
5355         add     w0, w0, 1
5356         strh    w0, [x3]
5357         ldr     x19, [sp,16]
5358         ldp     x29, x30, [sp], 48
5359         ret
5360         .size   FtlGcUpdatePage, .-FtlGcUpdatePage
5361         .align  2
5362         .global FtlGcRefreshBlock
5363         .type   FtlGcRefreshBlock, %function
5364 FtlGcRefreshBlock:
5365         stp     x29, x30, [sp, -32]!
5366         add     x29, sp, 0
5367         str     x19, [sp,16]
5368         uxth    w19, w0
5369         adrp    x0, .LC76
5370         mov     w1, w19
5371         add     x0, x0, :lo12:.LC76
5372         bl      printk
5373         adrp    x2, :got:g_gc_next_blk
5374         mov     w0, 65535
5375         ldr     x2, [x2, #:got_lo12:g_gc_next_blk]
5376         ldrh    w1, [x2]
5377         cmp     w1, w0
5378         beq     .L643
5379         adrp    x2, :got:g_gc_next_blk_1
5380         ldr     x2, [x2, #:got_lo12:g_gc_next_blk_1]
5381         ldrh    w1, [x2]
5382         cmp     w1, w0
5383         bne     .L642
5384 .L643:
5385         strh    w19, [x2]
5386 .L642:
5387         mov     w0, 0
5388         ldr     x19, [sp,16]
5389         ldp     x29, x30, [sp], 32
5390         ret
5391         .size   FtlGcRefreshBlock, .-FtlGcRefreshBlock
5392         .align  2
5393         .global FtlGcMarkBadPhyBlk
5394         .type   FtlGcMarkBadPhyBlk, %function
5395 FtlGcMarkBadPhyBlk:
5396         stp     x29, x30, [sp, -48]!
5397         add     x29, sp, 0
5398         stp     x19, x20, [sp,16]
5399         uxth    w20, w0
5400         adrp    x19, :got:g_gc_bad_block_temp_num
5401         mov     w0, w20
5402         stp     x21, x22, [sp,32]
5403         bl      P2V_block_in_plane
5404         uxth    w21, w0
5405         ldr     x1, [x19, #:got_lo12:g_gc_bad_block_temp_num]
5406         adrp    x0, .LC77
5407         mov     w2, w20
5408         add     x0, x0, :lo12:.LC77
5409         ldrh    w1, [x1]
5410         bl      printk
5411         mov     w0, w21
5412         bl      FtlGcRefreshBlock
5413         adrp    x0, :got:g_inkDie_check_enable
5414         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
5415         ldr     w0, [x0]
5416         cbz     w0, .L645
5417         adrp    x1, :got:p_erase_count_table
5418         ubfiz   x0, x21, 1, 16
5419         ldr     x1, [x1, #:got_lo12:p_erase_count_table]
5420         ldr     x2, [x1]
5421         ldrh    w1, [x2,x0]
5422         cmp     w1, 29
5423         bls     .L645
5424         sub     w1, w1, #30
5425         strh    w1, [x2,x0]
5426 .L645:
5427         ldr     x0, [x19, #:got_lo12:g_gc_bad_block_temp_num]
5428         adrp    x3, :got:g_gc_bad_block_temp_tbl
5429         ldrh    w1, [x0]
5430         mov     x0, 0
5431 .L646:
5432         cmp     w1, w0, uxth
5433         bls     .L652
5434         add     x0, x0, 1
5435         ldr     x2, [x3, #:got_lo12:g_gc_bad_block_temp_tbl]
5436         add     x2, x2, x0, lsl 1
5437         ldrh    w2, [x2,-2]
5438         cmp     w2, w20
5439         bne     .L646
5440         b       .L647
5441 .L652:
5442         cmp     w1, 15
5443         bhi     .L647
5444         ldr     x19, [x19, #:got_lo12:g_gc_bad_block_temp_num]
5445         add     w0, w1, 1
5446         strh    w0, [x19]
5447         adrp    x0, :got:g_gc_bad_block_temp_tbl
5448         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_tbl]
5449         strh    w20, [x0,w1,sxtw 1]
5450 .L647:
5451         mov     w0, 0
5452         ldp     x19, x20, [sp,16]
5453         ldp     x21, x22, [sp,32]
5454         ldp     x29, x30, [sp], 48
5455         ret
5456         .size   FtlGcMarkBadPhyBlk, .-FtlGcMarkBadPhyBlk
5457         .align  2
5458         .global FtlGcReFreshBadBlk
5459         .type   FtlGcReFreshBadBlk, %function
5460 FtlGcReFreshBadBlk:
5461         adrp    x0, :got:g_gc_bad_block_temp_num
5462         stp     x29, x30, [sp, -32]!
5463         add     x29, sp, 0
5464         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_num]
5465         str     x19, [sp,16]
5466         ldrh    w1, [x0]
5467         cbz     w1, .L654
5468         adrp    x0, :got:g_gc_next_blk
5469         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
5470         ldrh    w2, [x0]
5471         mov     w0, 65535
5472         cmp     w2, w0
5473         bne     .L654
5474         adrp    x19, :got:g_gc_bad_block_gc_index
5475         ldr     x0, [x19, #:got_lo12:g_gc_bad_block_gc_index]
5476         ldrh    w2, [x0]
5477         cmp     w2, w1
5478         bcc     .L655
5479         strh    wzr, [x0]
5480 .L655:
5481         ldr     x19, [x19, #:got_lo12:g_gc_bad_block_gc_index]
5482         adrp    x0, :got:g_gc_bad_block_temp_tbl
5483         ldrh    w1, [x19]
5484         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_tbl]
5485         ldrh    w0, [x0,w1,sxtw 1]
5486         bl      P2V_block_in_plane
5487         bl      FtlGcRefreshBlock
5488         ldrh    w0, [x19]
5489         add     w0, w0, 1
5490         strh    w0, [x19]
5491 .L654:
5492         mov     w0, 0
5493         ldr     x19, [sp,16]
5494         ldp     x29, x30, [sp], 32
5495         ret
5496         .size   FtlGcReFreshBadBlk, .-FtlGcReFreshBadBlk
5497         .align  2
5498         .global ftl_malloc
5499         .type   ftl_malloc, %function
5500 ftl_malloc:
5501         stp     x29, x30, [sp, -16]!
5502         mov     w1, 193
5503         sxtw    x0, w0
5504         add     x29, sp, 0
5505         movk    w1, 0x240, lsl 16
5506         bl      __kmalloc
5507         ldp     x29, x30, [sp], 16
5508         ret
5509         .size   ftl_malloc, .-ftl_malloc
5510         .align  2
5511         .global NandcInit
5512         .type   NandcInit, %function
5513 NandcInit:
5514         adrp    x1, :got:gNandChipMap
5515         mov     w2, 1
5516         stp     x29, x30, [sp, -32]!
5517         add     x29, sp, 0
5518         ldr     x1, [x1, #:got_lo12:gNandChipMap]
5519         str     x19, [sp,16]
5520         adrp    x19, :got:gpNandc
5521         str     w2, [x1,24]
5522         mov     w2, 2
5523         str     x0, [x1]
5524         str     x0, [x1,16]
5525         str     w2, [x1,40]
5526         mov     w2, 3
5527         str     x0, [x1,32]
5528         str     w2, [x1,56]
5529         adrp    x2, :got:gBootDdrMode
5530         str     x0, [x1,48]
5531         str     wzr, [x1,8]
5532         ldr     x19, [x19, #:got_lo12:gpNandc]
5533         str     x0, [x19]
5534         ldr     x2, [x2, #:got_lo12:gBootDdrMode]
5535         ldr     w1, [x0]
5536         ubfx    x3, x1, 13, 1
5537         str     w3, [x2]
5538         adrp    x2, :got:gNandcVer
5539         ldr     w3, [x0,352]
5540         and     w1, w1, 245760
5541         ubfx    x3, x3, 16, 4
5542         orr     w1, w1, 256
5543         ldr     x2, [x2, #:got_lo12:gNandcVer]
5544         str     w3, [x2]
5545         str     w1, [x0]
5546         ldr     x0, [x19]
5547         str     wzr, [x0,336]
5548         mov     w0, 40
5549         bl      NandcTimeCfg
5550         ldr     x0, [x19]
5551         mov     w1, 8322
5552         str     w1, [x0,344]
5553         mov     w1, 6145
5554         movk    w1, 0x18, lsl 16
5555         str     w1, [x0,304]
5556         mov     w0, 36864
5557         bl      ftl_malloc
5558         adrp    x1, :got:gMasterTempBuf
5559         ldr     x1, [x1, #:got_lo12:gMasterTempBuf]
5560         str     x0, [x1]
5561         adrp    x1, :got:gMasterInfo
5562         ldr     x1, [x1, #:got_lo12:gMasterInfo]
5563         str     x0, [x1]
5564         add     x0, x0, 32768
5565         str     x0, [x1,8]
5566         adrp    x0, :got:gNandcDumpWriteEn
5567         str     wzr, [x1,40]
5568         ldr     x0, [x0, #:got_lo12:gNandcDumpWriteEn]
5569         str     wzr, [x0]
5570         ldr     x19, [sp,16]
5571         ldp     x29, x30, [sp], 32
5572         ret
5573         .size   NandcInit, .-NandcInit
5574         .align  2
5575         .global ftl_free
5576         .type   ftl_free, %function
5577 ftl_free:
5578         stp     x29, x30, [sp, -16]!
5579         add     x29, sp, 0
5580         bl      kfree
5581         ldp     x29, x30, [sp], 16
5582         ret
5583         .size   ftl_free, .-ftl_free
5584         .align  2
5585         .global ftl_memset
5586         .type   ftl_memset, %function
5587 ftl_memset:
5588         stp     x29, x30, [sp, -16]!
5589         uxtw    x2, w2
5590         add     x29, sp, 0
5591         bl      memset
5592         ldp     x29, x30, [sp], 16
5593         ret
5594         .size   ftl_memset, .-ftl_memset
5595         .align  2
5596         .global BuildFlashLsbPageTable
5597         .type   BuildFlashLsbPageTable, %function
5598 BuildFlashLsbPageTable:
5599         stp     x29, x30, [sp, -32]!
5600         add     x29, sp, 0
5601         stp     x19, x20, [sp,16]
5602         mov     w19, w1
5603         cbnz    w0, .L664
5604         mov     x0, 0
5605         adrp    x2, :got:slcPageToMlcPageTbl
5606 .L665:
5607         ldr     x1, [x2, #:got_lo12:slcPageToMlcPageTbl]
5608         strh    w0, [x1,x0,lsl 1]
5609         add     x0, x0, 1
5610         cmp     x0, 256
5611         bne     .L665
5612 .L671:
5613         adrp    x20, :got:mlcPageToSlcPageTbl
5614         mov     w2, 1024
5615         mov     w1, 255
5616         uxth    w19, w19
5617         ldr     x0, [x20, #:got_lo12:mlcPageToSlcPageTbl]
5618         bl      ftl_memset
5619         mov     x0, 0
5620         adrp    x2, :got:slcPageToMlcPageTbl
5621         b       .L666
5622 .L664:
5623         cmp     w0, 1
5624         bne     .L667
5625         mov     x0, 0
5626         mov     w4, 3
5627         mov     w5, 2
5628         adrp    x3, :got:slcPageToMlcPageTbl
5629 .L670:
5630         cmp     x0, 3
5631         uxth    w1, w0
5632         mov     w2, w1
5633         bls     .L668
5634         ubfiz   w2, w1, 1, 15
5635         and     w1, w1, 1
5636         cmp     w1, wzr
5637         csel    w1, w4, w5, ne
5638         sub     w2, w2, w1
5639         uxth    w2, w2
5640 .L668:
5641         ldr     x1, [x3, #:got_lo12:slcPageToMlcPageTbl]
5642         strh    w2, [x1,x0,lsl 1]
5643         add     x0, x0, 1
5644         cmp     x0, 256
5645         bne     .L670
5646         b       .L671
5647 .L667:
5648         cmp     w0, 2
5649         bne     .L672
5650         mov     w2, 65535
5651         mov     x0, 0
5652         adrp    x4, :got:slcPageToMlcPageTbl
5653 .L674:
5654         ldr     x3, [x4, #:got_lo12:slcPageToMlcPageTbl]
5655         cmp     x0, 1
5656         uxth    w1, w0
5657         csel    w1, w2, w1, hi
5658         add     w2, w2, 2
5659         strh    w1, [x3,x0,lsl 1]
5660         add     x0, x0, 1
5661         cmp     x0, 256
5662         uxth    w2, w2
5663         bne     .L674
5664         b       .L671
5665 .L672:
5666         cmp     w0, 3
5667         bne     .L675
5668         mov     x0, 0
5669         mov     w5, 5
5670         mov     w6, 4
5671         adrp    x4, :got:slcPageToMlcPageTbl
5672 .L678:
5673         cmp     x0, 5
5674         uxth    w3, w0
5675         mov     w2, w3
5676         bls     .L676
5677         ubfiz   w2, w3, 1, 15
5678         and     w3, w3, 1
5679         cmp     w3, wzr
5680         csel    w1, w5, w6, ne
5681         sub     w2, w2, w1
5682         uxth    w2, w2
5683 .L676:
5684         ldr     x1, [x4, #:got_lo12:slcPageToMlcPageTbl]
5685         strh    w2, [x1,x0,lsl 1]
5686         add     x0, x0, 1
5687         cmp     x0, 256
5688         bne     .L678
5689         b       .L671
5690 .L675:
5691         cmp     w0, 4
5692         bne     .L679
5693         adrp    x2, :got:slcPageToMlcPageTbl
5694         mov     w1, 1
5695         mov     w5, 7
5696         mov     w4, 6
5697         ldr     x2, [x2, #:got_lo12:slcPageToMlcPageTbl]
5698         strh    w0, [x2,8]
5699         mov     w0, 5
5700         strh    w0, [x2,10]
5701         mov     w0, 7
5702         strh    w1, [x2,2]
5703         mov     w1, 2
5704         strh    w0, [x2,12]
5705         mov     w0, 8
5706         strh    w1, [x2,4]
5707         mov     w1, 3
5708         strh    w0, [x2,14]
5709         mov     w0, 8
5710         strh    wzr, [x2]
5711         strh    w1, [x2,6]
5712 .L681:
5713         and     w3, w0, 1
5714         ubfiz   w1, w0, 1, 15
5715         add     w0, w0, 1
5716         cmp     w3, wzr
5717         csel    w3, w5, w4, ne
5718         add     x2, x2, 2
5719         uxth    w0, w0
5720         sub     w1, w1, w3
5721         cmp     w0, 256
5722         strh    w1, [x2,14]
5723         bne     .L681
5724         b       .L671
5725 .L679:
5726         cmp     w0, 6
5727         bne     .L671
5728         mov     x2, 0
5729         mov     w5, 12
5730         mov     w6, 10
5731         adrp    x4, :got:slcPageToMlcPageTbl
5732 .L684:
5733         cmp     x2, 5
5734         uxth    w3, w2
5735         mov     w0, w3
5736         bls     .L682
5737         add     w0, w3, w3, lsl 1
5738         and     w3, w3, 1
5739         cmp     w3, wzr
5740         uxth    w0, w0
5741         csel    w1, w5, w6, ne
5742         sub     w0, w0, w1
5743         uxth    w0, w0
5744 .L682:
5745         ldr     x1, [x4, #:got_lo12:slcPageToMlcPageTbl]
5746         strh    w0, [x1,x2,lsl 1]
5747         add     x2, x2, 1
5748         cmp     x2, 256
5749         bne     .L684
5750         b       .L671
5751 .L666:
5752         cmp     w19, w0, uxth
5753         bls     .L700
5754         ldr     x1, [x2, #:got_lo12:slcPageToMlcPageTbl]
5755         ldr     x3, [x20, #:got_lo12:mlcPageToSlcPageTbl]
5756         ldrh    w1, [x1,x0,lsl 1]
5757         add     x0, x0, 1
5758         strh    w1, [x3,w1,sxtw 1]
5759         b       .L666
5760 .L700:
5761         ldp     x19, x20, [sp,16]
5762         ldp     x29, x30, [sp], 32
5763         ret
5764         .size   BuildFlashLsbPageTable, .-BuildFlashLsbPageTable
5765         .align  2
5766         .global FlashDieInfoInit
5767         .type   FlashDieInfoInit, %function
5768 FlashDieInfoInit:
5769         stp     x29, x30, [sp, -96]!
5770         add     x29, sp, 0
5771         stp     x19, x20, [sp,16]
5772         adrp    x19, :got:gNandMaxDie
5773         stp     x21, x22, [sp,32]
5774         stp     x23, x24, [sp,48]
5775         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5776         adrp    x23, :got:gNandMaxChip
5777         stp     x25, x26, [sp,64]
5778         stp     x27, x28, [sp,80]
5779         strb    wzr, [x0]
5780         adrp    x22, :got:gBlockPageAlignSize
5781         ldr     x0, [x23, #:got_lo12:gNandMaxChip]
5782         strb    wzr, [x0]
5783         adrp    x0, :got:gNandParaInfo
5784         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
5785         ldrh    w0, [x0,10]
5786         cmp     w0, 256
5787         bls     .L702
5788         ldr     x0, [x22, #:got_lo12:gBlockPageAlignSize]
5789         mov     w1, 512
5790         b       .L718
5791 .L702:
5792         cmp     w0, 128
5793         bhi     .L704
5794         ldr     x1, [x22, #:got_lo12:gBlockPageAlignSize]
5795         str     w0, [x1]
5796         b       .L703
5797 .L704:
5798         ldr     x0, [x22, #:got_lo12:gBlockPageAlignSize]
5799         mov     w1, 256
5800 .L718:
5801         str     w1, [x0]
5802 .L703:
5803         adrp    x20, :got:DieCsIndex
5804         mov     w1, 0
5805         mov     w2, 8
5806         adrp    x21, :got:DieAddrs
5807         mov     x25, 0
5808         adrp    x27, :got:gpNandParaInfo
5809         ldr     x0, [x20, #:got_lo12:DieCsIndex]
5810         adrp    x28, :got:IDByte
5811         bl      ftl_memset
5812         ldr     x0, [x21, #:got_lo12:DieAddrs]
5813         mov     w1, 0
5814         mov     w2, 32
5815         bl      ftl_memset
5816         adrp    x0, :got:gDieOp
5817         mov     w1, 0
5818         mov     w2, 192
5819         ldr     x0, [x0, #:got_lo12:gDieOp]
5820         bl      ftl_memset
5821 .L706:
5822         ldr     x0, [x27, #:got_lo12:gpNandParaInfo]
5823         adrp    x24, :got:gpNandParaInfo
5824         ldr     x1, [x28, #:got_lo12:IDByte]
5825         adrp    x26, :got:IDByte
5826         ldr     x2, [x0]
5827         add     x1, x1, x25, lsl 3
5828         add     x0, x2, 1
5829         ldrb    w2, [x2]
5830         bl      FlashMemCmp8
5831         cbnz    w0, .L705
5832         ldr     x2, [x19, #:got_lo12:gNandMaxDie]
5833         ldr     x3, [x21, #:got_lo12:DieAddrs]
5834         ldrb    w1, [x2]
5835         str     w0, [x3,w1,sxtw 2]
5836         add     w0, w1, 1
5837         strb    w0, [x2]
5838         ldr     x0, [x20, #:got_lo12:DieCsIndex]
5839         strb    w25, [x0,w1,sxtw]
5840 .L705:
5841         add     x25, x25, 1
5842         cmp     x25, 4
5843         bne     .L706
5844         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5845         ldr     x23, [x23, #:got_lo12:gNandMaxChip]
5846         ldrb    w0, [x0]
5847         strb    w0, [x23]
5848         ldr     x0, [x24, #:got_lo12:gpNandParaInfo]
5849         ldr     x0, [x0]
5850         ldrb    w0, [x0,8]
5851         cmp     w0, 2
5852         beq     .L711
5853 .L710:
5854         ldr     x24, [x24, #:got_lo12:gpNandParaInfo]
5855         adrp    x1, :got:gTotleBlock
5856         ldr     x19, [x19, #:got_lo12:gNandMaxDie]
5857         ldr     x2, [x24]
5858         ldrb    w0, [x19]
5859         ldr     x1, [x1, #:got_lo12:gTotleBlock]
5860         ldrb    w3, [x2,13]
5861         ldrh    w2, [x2,14]
5862         mul     w0, w0, w3
5863         mul     w0, w0, w2
5864         strh    w0, [x1]
5865         ldp     x19, x20, [sp,16]
5866         ldp     x21, x22, [sp,32]
5867         ldp     x23, x24, [sp,48]
5868         ldp     x25, x26, [sp,64]
5869         ldp     x27, x28, [sp,80]
5870         ldp     x29, x30, [sp], 96
5871         ret
5872 .L711:
5873         mov     x23, 0
5874 .L707:
5875         ldr     x25, [x24, #:got_lo12:gpNandParaInfo]
5876         ldr     x1, [x26, #:got_lo12:IDByte]
5877         ldr     x2, [x25]
5878         add     x1, x1, x23, lsl 3
5879         add     x0, x2, 1
5880         ldrb    w2, [x2]
5881         bl      FlashMemCmp8
5882         cbnz    w0, .L708
5883         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5884         ldr     x3, [x25]
5885         ldr     x1, [x22, #:got_lo12:gBlockPageAlignSize]
5886         ldrb    w4, [x0]
5887         ldrb    w0, [x3,13]
5888         ldr     w1, [x1]
5889         mov     x2, x4
5890         mul     w1, w0, w1
5891         ldrh    w0, [x3,14]
5892         and     w0, w0, 65280
5893         mul     w0, w1, w0
5894         ldr     x1, [x21, #:got_lo12:DieAddrs]
5895         str     w0, [x1,w4,sxtw 2]
5896         ldrb    w3, [x3,23]
5897         cbz     w3, .L709
5898         lsl     w0, w0, 1
5899         str     w0, [x1,w4,sxtw 2]
5900 .L709:
5901         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5902         add     w2, w2, 1
5903         strb    w2, [x0]
5904         ldr     x0, [x20, #:got_lo12:DieCsIndex]
5905         strb    w23, [x0,x4]
5906 .L708:
5907         add     x23, x23, 1
5908         cmp     x23, 4
5909         bne     .L707
5910         b       .L710
5911         .size   FlashDieInfoInit, .-FlashDieInfoInit
5912         .align  2
5913         .global ReadFlashInfo
5914         .type   ReadFlashInfo, %function
5915 ReadFlashInfo:
5916         stp     x29, x30, [sp, -32]!
5917         mov     w1, 0
5918         mov     w2, 11
5919         add     x29, sp, 0
5920         str     x19, [sp,16]
5921         mov     x19, x0
5922         bl      ftl_memset
5923         adrp    x2, :got:gpNandParaInfo
5924         adrp    x1, :got:gBlockPageAlignSize
5925         adrp    x4, :got:DieCsIndex
5926         mov     w5, 1
5927         ldr     x2, [x2, #:got_lo12:gpNandParaInfo]
5928         ldr     x1, [x1, #:got_lo12:gBlockPageAlignSize]
5929         ldr     x0, [x2]
5930         ldrb    w3, [x0,9]
5931         ldr     w0, [x1]
5932         adrp    x1, :got:gNandFlashEccBits
5933         mul     w0, w0, w3
5934         uxth    w0, w0
5935         strh    w0, [x19,4]
5936         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
5937         ldrb    w1, [x1]
5938         strb    w1, [x19,7]
5939         ldr     x3, [x2]
5940         ldrb    w1, [x3,13]
5941         mul     w0, w1, w0
5942         ldrh    w1, [x3,14]
5943         mul     w0, w0, w1
5944         ldrb    w1, [x3,8]
5945         mul     w0, w0, w1
5946         str     w0, [x19]
5947         ldr     x0, [x2]
5948         ldrb    w0, [x0,9]
5949         strb    w0, [x19,6]
5950         mov     w0, 32
5951         strb    w0, [x19,8]
5952         ldr     x0, [x2]
5953         ldrb    w0, [x0,7]
5954         strb    w0, [x19,9]
5955         adrp    x0, :got:gNandMaxDie
5956         strb    wzr, [x19,10]
5957         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
5958         ldrb    w3, [x0]
5959         mov     x0, 0
5960 .L720:
5961         cmp     w3, w0, uxtb
5962         bls     .L722
5963         ldr     x1, [x4, #:got_lo12:DieCsIndex]
5964         ldrb    w2, [x19,10]
5965         ldrb    w1, [x0,x1]
5966         add     x0, x0, 1
5967         lsl     w1, w5, w1
5968         orr     w1, w1, w2
5969         strb    w1, [x19,10]
5970         b       .L720
5971 .L722:
5972         ldr     x19, [sp,16]
5973         ldp     x29, x30, [sp], 32
5974         ret
5975         .size   ReadFlashInfo, .-ReadFlashInfo
5976         .align  2
5977         .global FtlMemInit
5978         .type   FtlMemInit, %function
5979 FtlMemInit:
5980         adrp    x0, :got:g_SlcPartLbaEndSector
5981         mov     w1, 65535
5982         stp     x29, x30, [sp, -224]!
5983         add     x29, sp, 0
5984         ldr     x0, [x0, #:got_lo12:g_SlcPartLbaEndSector]
5985         stp     x19, x20, [sp,16]
5986         stp     x23, x24, [sp,48]
5987         stp     x21, x22, [sp,32]
5988         stp     x25, x26, [sp,64]
5989         stp     x27, x28, [sp,80]
5990         str     wzr, [x0]
5991         adrp    x0, :got:g_all_blk_used_slc_mode
5992         adrp    x20, :got:c_ftl_nand_planes_num
5993         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
5994         str     wzr, [x0]
5995         adrp    x0, :got:g_GlobalSysVersion
5996         ldr     x0, [x0, #:got_lo12:g_GlobalSysVersion]
5997         str     wzr, [x0]
5998         adrp    x0, :got:g_GlobalDataVersion
5999         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
6000         str     wzr, [x0]
6001         adrp    x0, :got:g_totle_gc_page_count
6002         ldr     x0, [x0, #:got_lo12:g_totle_gc_page_count]
6003         str     wzr, [x0]
6004         adrp    x0, :got:g_totle_write_page_count
6005         ldr     x0, [x0, #:got_lo12:g_totle_write_page_count]
6006         str     wzr, [x0]
6007         adrp    x0, :got:g_totle_discard_page_count
6008         ldr     x0, [x0, #:got_lo12:g_totle_discard_page_count]
6009         str     wzr, [x0]
6010         adrp    x0, :got:g_totle_cache_write_count
6011         ldr     x0, [x0, #:got_lo12:g_totle_cache_write_count]
6012         str     wzr, [x0]
6013         adrp    x0, :got:g_totle_l2p_write_count
6014         ldr     x0, [x0, #:got_lo12:g_totle_l2p_write_count]
6015         str     wzr, [x0]
6016         adrp    x0, :got:g_totle_read_page_count
6017         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
6018         str     wzr, [x0]
6019         adrp    x0, :got:g_totle_mlc_erase_count
6020         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
6021         str     wzr, [x0]
6022         adrp    x0, :got:g_totle_slc_erase_count
6023         ldr     x0, [x0, #:got_lo12:g_totle_slc_erase_count]
6024         str     wzr, [x0]
6025         adrp    x0, :got:g_totle_sys_slc_erase_count
6026         ldr     x0, [x0, #:got_lo12:g_totle_sys_slc_erase_count]
6027         str     wzr, [x0]
6028         adrp    x0, :got:g_max_erase_count
6029         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
6030         str     wzr, [x0]
6031         adrp    x0, :got:g_min_erase_count
6032         ldr     x0, [x0, #:got_lo12:g_min_erase_count]
6033         str     wzr, [x0]
6034         adrp    x0, :got:g_in_gc_progress
6035         ldr     x0, [x0, #:got_lo12:g_in_gc_progress]
6036         str     wzr, [x0]
6037         adrp    x0, :got:g_in_swl_replace
6038         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
6039         str     wzr, [x0]
6040         adrp    x0, :got:g_gc_head_data_block
6041         ldr     x0, [x0, #:got_lo12:g_gc_head_data_block]
6042         str     w1, [x0]
6043         adrp    x0, :got:g_gc_head_data_block_count
6044         mov     w1, -1
6045         ldr     x0, [x0, #:got_lo12:g_gc_head_data_block_count]
6046         str     wzr, [x0]
6047         adrp    x0, :got:g_gc_skip_write_count
6048         ldr     x0, [x0, #:got_lo12:g_gc_skip_write_count]
6049         str     wzr, [x0]
6050         adrp    x0, :got:g_cur_erase_blk
6051         ldr     x0, [x0, #:got_lo12:g_cur_erase_blk]
6052         str     wzr, [x0]
6053         adrp    x0, :got:g_gc_next_blk
6054         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
6055         strh    w1, [x0]
6056         adrp    x0, :got:g_gc_next_blk_1
6057         ldr     x0, [x0, #:got_lo12:g_gc_next_blk_1]
6058         strh    w1, [x0]
6059         adrp    x0, :got:g_gc_free_blk_threshold
6060         mov     w1, 32
6061         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
6062         strh    w1, [x0]
6063         adrp    x0, :got:g_gc_merge_free_blk_threshold
6064         mov     w1, 128
6065         ldr     x0, [x0, #:got_lo12:g_gc_merge_free_blk_threshold]
6066         strh    w1, [x0]
6067         adrp    x0, :got:g_gc_blk_index
6068         adrp    x1, :got:c_wr_page_buf_num
6069         mov     x23, x1
6070         ldr     x0, [x0, #:got_lo12:g_gc_blk_index]
6071         strh    wzr, [x0]
6072         adrp    x0, :got:g_gc_bad_block_temp_num
6073         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_num]
6074         strh    wzr, [x0]
6075         adrp    x0, :got:g_gc_bad_block_gc_index
6076         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_gc_index]
6077         strh    wzr, [x0]
6078         adrp    x0, :got:c_ftl_nand_sec_pre_page
6079         ldr     x3, [x1, #:got_lo12:c_wr_page_buf_num]
6080         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
6081         ldrh    w2, [x0]
6082         mov     w0, 1024
6083         sdiv    w2, w0, w2
6084         str     w2, [x3]
6085         ldr     x0, [x20, #:got_lo12:c_ftl_nand_planes_num]
6086         ldrh    w0, [x0]
6087         lsl     w0, w0, 2
6088         cmp     w2, w0
6089         bls     .L724
6090         str     w0, [x3]
6091 .L724:
6092         adrp    x0, :got:g_wr_page_num
6093         adrp    x19, :got:c_ftl_nand_page_pre_super_blk
6094         mov     w21, 56
6095         adrp    x28, :got:req_gc_dst
6096         adrp    x27, :got:p_sys_data_buf
6097         adrp    x26, :got:p_sys_data_buf_1
6098         ldr     x0, [x0, #:got_lo12:g_wr_page_num]
6099         adrp    x25, :got:p_vendor_data_buf
6100         adrp    x24, :got:p_gc_data_buf
6101         str     wzr, [x0]
6102         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_super_blk]
6103         ldrh    w0, [x19]
6104         lsl     w0, w0, 1
6105         bl      ftl_malloc
6106         adrp    x8, :got:p_gc_blk_tbl
6107         str     x8, [x29,96]
6108         ldr     x1, [x8, #:got_lo12:p_gc_blk_tbl]
6109         str     x0, [x1]
6110         mov     w0, 12
6111         ldrh    w1, [x19]
6112         mul     w0, w1, w0
6113         bl      ftl_malloc
6114         adrp    x7, :got:p_gc_page_info
6115         str     x7, [x29,104]
6116         ldr     x1, [x7, #:got_lo12:p_gc_page_info]
6117         str     x0, [x1]
6118         ldr     x20, [x20, #:got_lo12:c_ftl_nand_planes_num]
6119         ldrh    w19, [x20]
6120         mul     w19, w19, w21
6121         lsl     w22, w19, 3
6122         mov     w0, w22
6123         bl      ftl_malloc
6124         adrp    x6, :got:req_read
6125         str     x6, [x29,112]
6126         ldr     x1, [x6, #:got_lo12:req_read]
6127         str     x0, [x1]
6128         mov     w0, w19
6129         bl      ftl_malloc
6130         ldr     x1, [x28, #:got_lo12:req_gc_dst]
6131         str     x0, [x1]
6132         mov     w0, w22
6133         bl      ftl_malloc
6134         adrp    x5, :got:req_prgm
6135         str     x5, [x29,120]
6136         ldr     x1, [x5, #:got_lo12:req_prgm]
6137         str     x0, [x1]
6138         mov     w0, w19
6139         bl      ftl_malloc
6140         adrp    x4, :got:req_erase
6141         str     x4, [x29,128]
6142         ldr     x1, [x4, #:got_lo12:req_erase]
6143         str     x0, [x1]
6144         mov     w0, w19
6145         bl      ftl_malloc
6146         adrp    x3, :got:req_gc
6147         str     x3, [x29,136]
6148         ldr     x1, [x3, #:got_lo12:req_gc]
6149         str     x0, [x1]
6150         ldr     x22, [x23, #:got_lo12:c_wr_page_buf_num]
6151         ldr     w0, [x22]
6152         mul     w0, w0, w21
6153         bl      ftl_malloc
6154         adrp    x2, :got:req_wr_io
6155         adrp    x12, :got:c_ftl_nand_byte_pre_page
6156         adrp    x9, :got:c_gc_page_buf_num
6157         ldr     x2, [x2, #:got_lo12:req_wr_io]
6158         str     x0, [x2]
6159         ldrh    w0, [x20]
6160         ldr     x12, [x12, #:got_lo12:c_ftl_nand_byte_pre_page]
6161         ldr     x23, [x9, #:got_lo12:c_gc_page_buf_num]
6162         lsl     w0, w0, 1
6163         add     w0, w0, 1
6164         str     x12, [x29,144]
6165         ldrh    w19, [x12]
6166         str     w0, [x23]
6167         mov     w0, w19
6168         bl      ftl_malloc
6169         ldr     x2, [x27, #:got_lo12:p_sys_data_buf]
6170         str     x0, [x2]
6171         mov     w0, w19
6172         bl      ftl_malloc
6173         ldr     x2, [x26, #:got_lo12:p_sys_data_buf_1]
6174         str     x0, [x2]
6175         mov     w0, w19
6176         bl      ftl_malloc
6177         ldr     x2, [x25, #:got_lo12:p_vendor_data_buf]
6178         str     x0, [x2]
6179         ldr     w0, [x23]
6180         mul     w0, w19, w0
6181         bl      ftl_malloc
6182         ldr     x2, [x24, #:got_lo12:p_gc_data_buf]
6183         str     x0, [x2]
6184         ldr     w0, [x22]
6185         mul     w0, w19, w0
6186         bl      ftl_malloc
6187         adrp    x2, :got:p_wr_io_data_buf
6188         ldr     x2, [x2, #:got_lo12:p_wr_io_data_buf]
6189         str     x0, [x2]
6190         mov     w0, w19
6191         bl      ftl_malloc
6192         adrp    x1, :got:p_io_data_buf_0
6193         ldr     x2, [x1, #:got_lo12:p_io_data_buf_0]
6194         str     x0, [x2]
6195         mov     w0, w19
6196         bl      ftl_malloc
6197         adrp    x1, :got:p_io_data_buf_1
6198         ldr     x2, [x1, #:got_lo12:p_io_data_buf_1]
6199         str     x0, [x2]
6200         mov     w0, 24
6201         ldr     w2, [x23]
6202         mul     w0, w2, w0
6203         bl      ftl_malloc
6204         ldrh    w19, [x20]
6205         adrp    x1, :got:gp_gc_page_buf_info
6206         ldr     x2, [x1, #:got_lo12:gp_gc_page_buf_info]
6207         str     x0, [x2]
6208         adrp    x2, :got:c_ftl_nand_byte_pre_oob
6209         ldr     x21, [x2, #:got_lo12:c_ftl_nand_byte_pre_oob]
6210         ldrh    w0, [x21]
6211         mul     w19, w0, w19
6212         mov     w0, w19
6213         bl      ftl_malloc
6214         adrp    x1, :got:p_sys_spare_buf
6215         ldr     x10, [x1, #:got_lo12:p_sys_spare_buf]
6216         str     x0, [x10]
6217         lsl     w0, w19, 3
6218         bl      ftl_malloc
6219         adrp    x1, :got:p_io_spare_buf
6220         ldr     x10, [x1, #:got_lo12:p_io_spare_buf]
6221         str     x0, [x10]
6222         ldrh    w10, [x21]
6223         ldr     w0, [x23]
6224         adrp    x23, :got:p_io_data_buf_0
6225         mul     w0, w10, w0
6226         bl      ftl_malloc
6227         adrp    x15, :got:p_gc_spare_buf
6228         ldrh    w2, [x21]
6229         str     x15, [x29,152]
6230         adrp    x21, :got:gp_gc_page_buf_info
6231         ldr     x9, [x15, #:got_lo12:p_gc_spare_buf]
6232         str     x0, [x9]
6233         ldr     w0, [x22]
6234         adrp    x22, :got:p_io_data_buf_1
6235         mul     w0, w2, w0
6236         bl      ftl_malloc
6237         adrp    x1, :got:p_wr_io_spare_buf
6238         adrp    x13, :got:c_ftl_nand_blk_pre_plane
6239         ldr     x1, [x1, #:got_lo12:p_wr_io_spare_buf]
6240         str     x0, [x1]
6241         adrp    x1, :got:g_ect_tbl_info_size
6242         ldr     x19, [x13, #:got_lo12:c_ftl_nand_blk_pre_plane]
6243         ldr     x20, [x1, #:got_lo12:g_ect_tbl_info_size]
6244         ldrh    w0, [x19]
6245         lsl     w0, w0, 1
6246         strh    w0, [x20]
6247         and     w0, w0, 65534
6248         bl      ftl_malloc
6249         adrp    x2, :got:p_swl_mul_table
6250         ldr     x2, [x2, #:got_lo12:p_swl_mul_table]
6251         str     x0, [x2]
6252         ldrh    w0, [x20]
6253         add     x0, x0, 547
6254         lsr     x0, x0, 9
6255         strh    w0, [x20]
6256         lsl     w0, w0, 9
6257         bl      ftl_malloc
6258         adrp    x1, :got:gp_ect_tbl_info
6259         adrp    x14, :got:p_erase_count_table
6260         str     x14, [x29,160]
6261         ldr     x1, [x1, #:got_lo12:gp_ect_tbl_info]
6262         str     x0, [x1]
6263         add     x0, x0, 32
6264         ldr     x1, [x14, #:got_lo12:p_erase_count_table]
6265         str     x0, [x1]
6266         ldrh    w1, [x19]
6267         lsl     w20, w1, 1
6268         mov     w0, w20
6269         bl      ftl_malloc
6270         adrp    x2, :got:p_valid_page_count_check_table
6271         ldr     x2, [x2, #:got_lo12:p_valid_page_count_check_table]
6272         str     x0, [x2]
6273         mov     w0, w20
6274         bl      ftl_malloc
6275         adrp    x9, :got:p_valid_page_count_table
6276         adrp    x16, :got:c_ftl_nand_max_map_blks
6277         str     x9, [x29,168]
6278         ldr     x1, [x9, #:got_lo12:p_valid_page_count_table]
6279         str     x0, [x1]
6280         ldr     x16, [x16, #:got_lo12:c_ftl_nand_max_map_blks]
6281         str     x16, [x29,208]
6282         ldr     w1, [x16]
6283         lsl     w20, w1, 1
6284         mov     w0, w20
6285         bl      ftl_malloc
6286         adrp    x11, :got:p_map_block_table
6287         str     x11, [x29,176]
6288         ldr     x2, [x11, #:got_lo12:p_map_block_table]
6289         str     x0, [x2]
6290         mov     w0, w20
6291         bl      ftl_malloc
6292         adrp    x10, :got:p_map_block_valid_page_count
6293         str     x10, [x29,184]
6294         ldr     x1, [x10, #:got_lo12:p_map_block_valid_page_count]
6295         str     x0, [x1]
6296         adrp    x1, :got:c_ftl_nand_max_vendor_blks
6297         ldr     x20, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
6298         ldrh    w0, [x20]
6299         lsl     w0, w0, 1
6300         bl      ftl_malloc
6301         adrp    x2, :got:p_vendor_block_table
6302         ldr     x2, [x2, #:got_lo12:p_vendor_block_table]
6303         str     x0, [x2]
6304         ldrh    w0, [x20]
6305         lsl     w0, w0, 1
6306         bl      ftl_malloc
6307         adrp    x2, :got:p_vendor_block_valid_page_count
6308         ldr     x2, [x2, #:got_lo12:p_vendor_block_valid_page_count]
6309         str     x0, [x2]
6310         ldrh    w0, [x20]
6311         adrp    x20, :got:p_sys_spare_buf
6312         lsl     w0, w0, 2
6313         bl      ftl_malloc
6314         adrp    x1, :got:p_vendor_block_ver_table
6315         ldr     x1, [x1, #:got_lo12:p_vendor_block_ver_table]
6316         str     x0, [x1]
6317         adrp    x1, :got:c_ftl_nand_vendor_region_num
6318         ldr     x1, [x1, #:got_lo12:c_ftl_nand_vendor_region_num]
6319         str     x1, [x29,216]
6320         ldrh    w0, [x1]
6321         lsl     w0, w0, 2
6322         bl      ftl_malloc
6323         adrp    x2, :got:p_vendor_region_ppn_table
6324         ldr     x1, [x29,216]
6325         ldr     x2, [x2, #:got_lo12:p_vendor_region_ppn_table]
6326         str     x0, [x2]
6327         ldrh    w2, [x1]
6328         mov     w1, 0
6329         lsl     w2, w2, 2
6330         bl      ftl_memset
6331         adrp    x0, :got:c_ftl_nand_map_region_num
6332         ldr     x0, [x0, #:got_lo12:c_ftl_nand_map_region_num]
6333         ldrh    w0, [x0]
6334         lsl     w0, w0, 2
6335         bl      ftl_malloc
6336         adrp    x2, :got:p_map_region_ppn_table
6337         ldr     x16, [x29,208]
6338         str     x2, [x29,192]
6339         ldr     x1, [x2, #:got_lo12:p_map_region_ppn_table]
6340         str     x0, [x1]
6341         ldr     w0, [x16]
6342         lsl     w0, w0, 2
6343         bl      ftl_malloc
6344         adrp    x1, :got:p_map_block_ver_table
6345         str     x1, [x29,200]
6346         ldr     x16, [x1, #:got_lo12:p_map_block_ver_table]
6347         str     x0, [x16]
6348         adrp    x16, :got:c_ftl_nand_l2pmap_ram_region_num
6349         ldr     x16, [x16, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
6350         str     x16, [x29,216]
6351         ldrh    w0, [x16]
6352         lsl     w0, w0, 4
6353         bl      ftl_malloc
6354         adrp    x17, :got:p_l2p_ram_map
6355         ldr     x12, [x29,144]
6356         ldr     x16, [x29,216]
6357         ldr     x17, [x17, #:got_lo12:p_l2p_ram_map]
6358         ldrh    w16, [x16]
6359         str     x0, [x17]
6360         ldrh    w0, [x12]
6361         mul     w0, w16, w0
6362         bl      ftl_malloc
6363         adrp    x12, :got:p_l2p_map_buf
6364         ldr     x12, [x12, #:got_lo12:p_l2p_map_buf]
6365         str     x0, [x12]
6366         mov     w0, 6
6367         ldrh    w12, [x19]
6368         adrp    x19, :got:p_io_spare_buf
6369         mul     w0, w12, w0
6370         bl      ftl_malloc
6371         adrp    x12, :got:p_data_block_list_table
6372         adrp    x16, :got:c_ftl_nand_bbm_buf_size
6373         adrp    x17, :got:c_ftl_nand_die_num
6374         ldr     x12, [x12, #:got_lo12:p_data_block_list_table]
6375         str     x0, [x12]
6376         adrp    x0, :got:c_ftl_nand_blks_per_die
6377         ldr     x16, [x16, #:got_lo12:c_ftl_nand_bbm_buf_size]
6378         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blks_per_die]
6379         str     x16, [x29,208]
6380         ldrh    w0, [x0]
6381         add     w0, w0, 31
6382         asr     w0, w0, 5
6383         strh    w0, [x16]
6384         ldr     x17, [x17, #:got_lo12:c_ftl_nand_die_num]
6385         str     x17, [x29,216]
6386         ldrh    w12, [x17]
6387         mul     w0, w0, w12
6388         lsl     w0, w0, 2
6389         bl      ftl_malloc
6390         adrp    x13, :got:gBbtInfo
6391         ldr     x17, [x29,216]
6392         ldr     x16, [x29,208]
6393         ldr     x15, [x29,152]
6394         ldr     x12, [x13, #:got_lo12:gBbtInfo]
6395         ldrh    w18, [x17]
6396         ldrh    w17, [x16]
6397         ldr     x14, [x29,160]
6398         ldr     x8, [x29,96]
6399         mov     w16, w17
6400         ldr     x7, [x29,104]
6401         ldr     x6, [x29,112]
6402         ldr     x5, [x29,120]
6403         ldr     x4, [x29,128]
6404         ldr     x3, [x29,136]
6405         ldr     x9, [x29,168]
6406         ldr     x11, [x29,176]
6407         ldr     x10, [x29,184]
6408         ldr     x2, [x29,192]
6409         ldr     x1, [x29,200]
6410         str     x0, [x12,32]
6411         mov     w0, 1
6412         str     x15, [x29,216]
6413         mov     x15, x13
6414         str     x14, [x29,208]
6415 .L725:
6416         cmp     w0, w18
6417         add     x12, x12, 8
6418         bcs     .L727
6419         ldr     x14, [x15, #:got_lo12:gBbtInfo]
6420         add     w0, w0, 1
6421         ldr     x14, [x14,32]
6422         add     x14, x14, x16, uxtw 2
6423         add     w16, w16, w17
6424         str     x14, [x12,32]
6425         b       .L725
6426 .L727:
6427         cmp     w0, 8
6428         beq     .L825
6429         ldr     x12, [x13, #:got_lo12:gBbtInfo]
6430         add     x12, x12, x0, uxtw 3
6431         add     w0, w0, 1
6432         str     xzr, [x12,32]
6433         b       .L727
6434 .L825:
6435         ldr     x11, [x11, #:got_lo12:p_map_block_table]
6436         ldr     x0, [x11]
6437         cbnz    x0, .L729
6438 .L731:
6439         adrp    x0, .LC78
6440         adrp    x1, .LANCHOR1
6441         add     x0, x0, :lo12:.LC78
6442         add     x1, x1, :lo12:.LANCHOR1
6443         bl      printk
6444         mov     w0, -1
6445         b       .L730
6446 .L729:
6447         ldr     x10, [x10, #:got_lo12:p_map_block_valid_page_count]
6448         ldr     x0, [x10]
6449         cbz     x0, .L731
6450         ldr     x2, [x2, #:got_lo12:p_map_region_ppn_table]
6451         ldr     x0, [x2]
6452         cbz     x0, .L731
6453         ldr     x1, [x1, #:got_lo12:p_map_block_ver_table]
6454         ldr     x0, [x1]
6455         cbz     x0, .L731
6456         adrp    x0, :got:p_l2p_ram_map
6457         ldr     x0, [x0, #:got_lo12:p_l2p_ram_map]
6458         ldr     x0, [x0]
6459         cbz     x0, .L731
6460         adrp    x0, :got:p_l2p_map_buf
6461         ldr     x0, [x0, #:got_lo12:p_l2p_map_buf]
6462         ldr     x0, [x0]
6463         cbz     x0, .L731
6464         adrp    x0, :got:p_data_block_list_table
6465         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
6466         ldr     x0, [x0]
6467         cbz     x0, .L731
6468         adrp    x0, :got:gBbtInfo
6469         ldr     x0, [x0, #:got_lo12:gBbtInfo]
6470         ldr     x0, [x0,32]
6471         cbz     x0, .L731
6472         ldr     x9, [x9, #:got_lo12:p_valid_page_count_table]
6473         ldr     x0, [x9]
6474         cbz     x0, .L731
6475         ldr     x8, [x8, #:got_lo12:p_gc_blk_tbl]
6476         ldr     x0, [x8]
6477         cbz     x0, .L731
6478         ldr     x7, [x7, #:got_lo12:p_gc_page_info]
6479         ldr     x0, [x7]
6480         cbz     x0, .L731
6481         ldr     x6, [x6, #:got_lo12:req_read]
6482         ldr     x0, [x6]
6483         cbz     x0, .L731
6484         ldr     x5, [x5, #:got_lo12:req_prgm]
6485         ldr     x0, [x5]
6486         cbz     x0, .L731
6487         ldr     x4, [x4, #:got_lo12:req_erase]
6488         ldr     x0, [x4]
6489         cbz     x0, .L731
6490         ldr     x3, [x3, #:got_lo12:req_gc]
6491         ldr     x0, [x3]
6492         cbz     x0, .L731
6493         ldr     x28, [x28, #:got_lo12:req_gc_dst]
6494         ldr     x0, [x28]
6495         cbz     x0, .L731
6496         ldr     x27, [x27, #:got_lo12:p_sys_data_buf]
6497         ldr     x0, [x27]
6498         cbz     x0, .L731
6499         ldr     x26, [x26, #:got_lo12:p_sys_data_buf_1]
6500         ldr     x0, [x26]
6501         cbz     x0, .L731
6502         ldr     x25, [x25, #:got_lo12:p_vendor_data_buf]
6503         ldr     x0, [x25]
6504         cbz     x0, .L731
6505         ldr     x24, [x24, #:got_lo12:p_gc_data_buf]
6506         ldr     x0, [x24]
6507         cbz     x0, .L731
6508         ldr     x23, [x23, #:got_lo12:p_io_data_buf_0]
6509         ldr     x0, [x23]
6510         cbz     x0, .L731
6511         ldr     x22, [x22, #:got_lo12:p_io_data_buf_1]
6512         ldr     x0, [x22]
6513         cbz     x0, .L731
6514         ldr     x21, [x21, #:got_lo12:gp_gc_page_buf_info]
6515         ldr     x0, [x21]
6516         cbz     x0, .L731
6517         ldr     x20, [x20, #:got_lo12:p_sys_spare_buf]
6518         ldr     x0, [x20]
6519         cbz     x0, .L731
6520         ldr     x19, [x19, #:got_lo12:p_io_spare_buf]
6521         ldr     x0, [x19]
6522         cbz     x0, .L731
6523         ldr     x0, [x29,216]
6524         ldr     x15, [x0, #:got_lo12:p_gc_spare_buf]
6525         ldr     x0, [x15]
6526         cbz     x0, .L731
6527         ldr     x0, [x29,208]
6528         ldr     x14, [x0, #:got_lo12:p_erase_count_table]
6529         ldr     x0, [x14]
6530         cbz     x0, .L731
6531         adrp    x0, :got:p_swl_mul_table
6532         ldr     x0, [x0, #:got_lo12:p_swl_mul_table]
6533         ldr     x0, [x0]
6534         cbz     x0, .L731
6535         adrp    x0, :got:p_vendor_block_table
6536         ldr     x0, [x0, #:got_lo12:p_vendor_block_table]
6537         ldr     x0, [x0]
6538         cbz     x0, .L731
6539         adrp    x0, :got:p_vendor_block_valid_page_count
6540         ldr     x0, [x0, #:got_lo12:p_vendor_block_valid_page_count]
6541         ldr     x0, [x0]
6542         cbz     x0, .L731
6543         adrp    x0, :got:p_vendor_block_ver_table
6544         ldr     x0, [x0, #:got_lo12:p_vendor_block_ver_table]
6545         ldr     x0, [x0]
6546         cbz     x0, .L731
6547         adrp    x0, :got:p_vendor_region_ppn_table
6548         ldr     x0, [x0, #:got_lo12:p_vendor_region_ppn_table]
6549         ldr     x0, [x0]
6550         cbz     x0, .L731
6551         mov     w0, 0
6552 .L730:
6553         ldp     x19, x20, [sp,16]
6554         ldp     x21, x22, [sp,32]
6555         ldp     x23, x24, [sp,48]
6556         ldp     x25, x26, [sp,64]
6557         ldp     x27, x28, [sp,80]
6558         ldp     x29, x30, [sp], 224
6559         ret
6560         .size   FtlMemInit, .-FtlMemInit
6561         .align  2
6562         .global FtlBbt2Bitmap
6563         .type   FtlBbt2Bitmap, %function
6564 FtlBbt2Bitmap:
6565         stp     x29, x30, [sp, -32]!
6566         add     x29, sp, 0
6567         stp     x19, x20, [sp,16]
6568         mov     x19, x1
6569         adrp    x1, :got:c_ftl_nand_bbm_buf_size
6570         mov     x20, x0
6571         mov     x0, x19
6572         ldr     x1, [x1, #:got_lo12:c_ftl_nand_bbm_buf_size]
6573         ldrh    w2, [x1]
6574         mov     w1, 0
6575         lsl     w2, w2, 2
6576         bl      ftl_memset
6577         mov     x3, 0
6578         mov     w0, 65535
6579         mov     w5, 1
6580 .L828:
6581         ldrh    w2, [x20,x3]
6582         cmp     w2, w0
6583         beq     .L826
6584         ubfx    x4, x2, 5, 11
6585         add     x3, x3, 2
6586         lsl     x4, x4, 2
6587         lsl     w2, w5, w2
6588         cmp     x3, 1024
6589         ldr     w1, [x19,x4]
6590         orr     w2, w1, w2
6591         str     w2, [x19,x4]
6592         bne     .L828
6593 .L826:
6594         ldp     x19, x20, [sp,16]
6595         ldp     x29, x30, [sp], 32
6596         ret
6597         .size   FtlBbt2Bitmap, .-FtlBbt2Bitmap
6598         .align  2
6599         .global FtlBbtMemInit
6600         .type   FtlBbtMemInit, %function
6601 FtlBbtMemInit:
6602         adrp    x0, :got:gBbtInfo
6603         mov     w1, -1
6604         stp     x29, x30, [sp, -16]!
6605         mov     w2, 16
6606         add     x29, sp, 0
6607         ldr     x0, [x0, #:got_lo12:gBbtInfo]
6608         add     x0, x0, 12
6609         strh    w1, [x0,-12]
6610         mov     w1, 255
6611         strh    wzr, [x0,-6]
6612         bl      ftl_memset
6613         ldp     x29, x30, [sp], 16
6614         ret
6615         .size   FtlBbtMemInit, .-FtlBbtMemInit
6616         .align  2
6617         .global FtlFreeSysBlkQueueInit
6618         .type   FtlFreeSysBlkQueueInit, %function
6619 FtlFreeSysBlkQueueInit:
6620         adrp    x1, :got:gSysFreeQueue
6621         mov     w2, 2048
6622         stp     x29, x30, [sp, -16]!
6623         add     x29, sp, 0
6624         ldr     x1, [x1, #:got_lo12:gSysFreeQueue]
6625         strh    wzr, [x1,2]
6626         strh    wzr, [x1,4]
6627         strh    wzr, [x1,6]
6628         strh    w0, [x1],8
6629         mov     x0, x1
6630         mov     w1, 0
6631         bl      ftl_memset
6632         mov     w0, 0
6633         ldp     x29, x30, [sp], 16
6634         ret
6635         .size   FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit
6636         .align  2
6637         .global ftl_free_no_use_map_blk
6638         .type   ftl_free_no_use_map_blk, %function
6639 ftl_free_no_use_map_blk:
6640         stp     x29, x30, [sp, -96]!
6641         mov     w1, 0
6642         add     x29, sp, 0
6643         stp     x19, x20, [sp,16]
6644         stp     x21, x22, [sp,32]
6645         stp     x23, x24, [sp,48]
6646         stp     x25, x26, [sp,64]
6647         str     x27, [sp,80]
6648         mov     x19, x0
6649         ldrh    w2, [x0,10]
6650         ldr     x21, [x0,32]
6651         ldr     x25, [x0,16]
6652         lsl     w2, w2, 1
6653         ldr     x20, [x0,40]
6654         mov     x0, x21
6655         bl      ftl_memset
6656         mov     w0, 0
6657 .L834:
6658         ldrh    w1, [x19,6]
6659         cmp     w1, w0
6660         bls     .L847
6661         ubfiz   x1, x0, 2, 16
6662         ldr     w2, [x20,x1]
6663         mov     w1, 0
6664         ubfx    x2, x2, 10, 16
6665 .L835:
6666         ldrh    w3, [x19,10]
6667         cmp     w3, w1
6668         bls     .L848
6669         ubfiz   x3, x1, 1, 16
6670         ldrh    w4, [x25,x3]
6671         cmp     w4, w2
6672         bne     .L836
6673         ldrh    w4, [x21,x3]
6674         add     w4, w4, 1
6675         strh    w4, [x21,x3]
6676 .L836:
6677         add     w1, w1, 1
6678         uxth    w1, w1
6679         b       .L835
6680 .L848:
6681         add     w0, w0, 1
6682         uxth    w0, w0
6683         b       .L834
6684 .L847:
6685         mov     w24, 0
6686         ldrh    w26, [x21]
6687         mov     w20, w24
6688         adrp    x27, :got:c_ftl_nand_page_pre_slc_blk
6689 .L839:
6690         ldrh    w0, [x19,10]
6691         cmp     w0, w20
6692         bls     .L849
6693         ldrh    w0, [x19]
6694         uxtw    x22, w20
6695         cmp     w0, w20
6696         bne     .L840
6697         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
6698         ldrh    w1, [x19,2]
6699         ldrh    w0, [x0]
6700         cmp     w1, w0
6701         bcs     .L840
6702         strh    w0, [x21,x22,lsl 1]
6703 .L840:
6704         lsl     x22, x22, 1
6705         ldrh    w23, [x21,x22]
6706         cmp     w26, w23
6707         bls     .L841
6708         mov     w24, w20
6709         mov     w26, w23
6710 .L841:
6711         cbnz    w23, .L842
6712         ldrh    w0, [x25,x22]
6713         cbz     w0, .L842
6714         mov     w1, 1
6715         bl      FtlFreeSysBlkQueueIn
6716         strh    w23, [x25,x22]
6717         ldrh    w0, [x19,8]
6718         sub     w0, w0, #1
6719         strh    w0, [x19,8]
6720 .L842:
6721         add     w20, w20, 1
6722         uxth    w20, w20
6723         b       .L839
6724 .L849:
6725         mov     w0, w24
6726         ldr     x27, [sp,80]
6727         ldp     x19, x20, [sp,16]
6728         ldp     x21, x22, [sp,32]
6729         ldp     x23, x24, [sp,48]
6730         ldp     x25, x26, [sp,64]
6731         ldp     x29, x30, [sp], 96
6732         ret
6733         .size   ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk
6734         .align  2
6735         .global FtlL2PDataInit
6736         .type   FtlL2PDataInit, %function
6737 FtlL2PDataInit:
6738         stp     x29, x30, [sp, -64]!
6739         add     x29, sp, 0
6740         stp     x21, x22, [sp,32]
6741         adrp    x22, :got:c_ftl_nand_max_map_blks
6742         str     x23, [sp,48]
6743         adrp    x23, :got:p_map_block_valid_page_count
6744         adrp    x21, :got:c_ftl_nand_byte_pre_page
6745         stp     x19, x20, [sp,16]
6746         ldr     x1, [x22, #:got_lo12:c_ftl_nand_max_map_blks]
6747         adrp    x19, :got:c_ftl_nand_l2pmap_ram_region_num
6748         ldr     x0, [x23, #:got_lo12:p_map_block_valid_page_count]
6749         adrp    x20, :got:p_l2p_map_buf
6750         ldr     w2, [x1]
6751         mov     w1, 0
6752         ldr     x0, [x0]
6753         lsl     w2, w2, 1
6754         bl      ftl_memset
6755         ldr     x1, [x21, #:got_lo12:c_ftl_nand_byte_pre_page]
6756         ldr     x0, [x20, #:got_lo12:p_l2p_map_buf]
6757         ldrh    w3, [x1]
6758         ldr     x1, [x19, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
6759         ldr     x0, [x0]
6760         ldrh    w2, [x1]
6761         mov     w1, 255
6762         mul     w2, w3, w2
6763         bl      ftl_memset
6764         mov     w1, 0
6765         mov     x3, x23
6766         adrp    x5, :got:p_l2p_ram_map
6767         mov     w6, -1
6768 .L851:
6769         ldr     x0, [x19, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
6770         ldrh    w0, [x0]
6771         cmp     w0, w1
6772         bls     .L853
6773         ldr     x2, [x5, #:got_lo12:p_l2p_ram_map]
6774         ubfiz   x0, x1, 4, 16
6775         ldr     x4, [x2]
6776         add     x4, x4, x0
6777         str     wzr, [x4,4]
6778         ldr     x4, [x2]
6779         strh    w6, [x4,x0]
6780         ldr     x2, [x2]
6781         ldr     x4, [x20, #:got_lo12:p_l2p_map_buf]
6782         add     x2, x2, x0
6783         ldr     x0, [x21, #:got_lo12:c_ftl_nand_byte_pre_page]
6784         ldr     x4, [x4]
6785         ldrh    w0, [x0]
6786         mul     w0, w0, w1
6787         sxtw    x0, w0
6788         and     x0, x0, -4
6789         add     x0, x4, x0
6790         str     x0, [x2,8]
6791         add     w0, w1, 1
6792         uxth    w1, w0
6793         b       .L851
6794 .L853:
6795         adrp    x0, :got:gL2pMapInfo
6796         mov     w2, -1
6797         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
6798         strh    w2, [x0,2]
6799         strh    w2, [x0]
6800         ldr     x1, [x22, #:got_lo12:c_ftl_nand_max_map_blks]
6801         ldr     w1, [x1]
6802         strh    w1, [x0,10]
6803         mov     w1, -3902
6804         strh    w1, [x0,4]
6805         adrp    x1, :got:g_totle_map_block
6806         ldr     x1, [x1, #:got_lo12:g_totle_map_block]
6807         ldrh    w1, [x1]
6808         strh    w1, [x0,8]
6809         adrp    x1, :got:c_ftl_nand_map_region_num
6810         ldr     x1, [x1, #:got_lo12:c_ftl_nand_map_region_num]
6811         ldrh    w1, [x1]
6812         strh    w1, [x0,6]
6813         adrp    x1, :got:p_map_block_table
6814         ldr     x1, [x1, #:got_lo12:p_map_block_table]
6815         ldr     x1, [x1]
6816         str     x1, [x0,16]
6817         adrp    x1, :got:p_map_block_ver_table
6818         ldr     x1, [x1, #:got_lo12:p_map_block_ver_table]
6819         ldr     x1, [x1]
6820         str     x1, [x0,24]
6821         ldr     x1, [x3, #:got_lo12:p_map_block_valid_page_count]
6822         ldr     x1, [x1]
6823         str     x1, [x0,32]
6824         adrp    x1, :got:p_map_region_ppn_table
6825         ldr     x1, [x1, #:got_lo12:p_map_region_ppn_table]
6826         ldr     x1, [x1]
6827         str     x1, [x0,40]
6828         ldp     x19, x20, [sp,16]
6829         ldp     x21, x22, [sp,32]
6830         ldr     x23, [sp,48]
6831         ldp     x29, x30, [sp], 64
6832         ret
6833         .size   FtlL2PDataInit, .-FtlL2PDataInit
6834         .align  2
6835         .global FtlVariablesInit
6836         .type   FtlVariablesInit, %function
6837 FtlVariablesInit:
6838         adrp    x0, :got:g_req_cache
6839         mov     w1, -1
6840         stp     x29, x30, [sp, -32]!
6841         add     x29, sp, 0
6842         ldr     x0, [x0, #:got_lo12:g_req_cache]
6843         str     x19, [sp,16]
6844         adrp    x19, :got:c_ftl_nand_blk_pre_plane
6845         str     xzr, [x0]
6846         adrp    x0, :got:g_tmp_data_superblock_id
6847         ldr     x0, [x0, #:got_lo12:g_tmp_data_superblock_id]
6848         strh    w1, [x0]
6849         adrp    x0, :got:g_totle_swl_count
6850         mov     w1, -1
6851         ldr     x0, [x0, #:got_lo12:g_totle_swl_count]
6852         str     wzr, [x0]
6853         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
6854         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
6855         str     wzr, [x0]
6856         adrp    x0, :got:g_recovery_page_min_ver
6857         ldr     x0, [x0, #:got_lo12:g_recovery_page_min_ver]
6858         str     w1, [x0]
6859         adrp    x0, :got:g_inkDie_check_enable
6860         adrp    x1, :got:c_ftl_nand_max_vendor_blks
6861         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
6862         str     wzr, [x0]
6863         adrp    x0, :got:g_totle_vendor_block
6864         ldr     x0, [x0, #:got_lo12:g_totle_vendor_block]
6865         strh    wzr, [x0]
6866         adrp    x0, :got:p_vendor_block_table
6867         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
6868         ldr     x0, [x0, #:got_lo12:p_vendor_block_table]
6869         ldrh    w2, [x1]
6870         mov     w1, 0
6871         ldr     x0, [x0]
6872         lsl     w2, w2, 1
6873         bl      ftl_memset
6874         ldr     x19, [x19, #:got_lo12:c_ftl_nand_blk_pre_plane]
6875         adrp    x0, :got:p_erase_count_table
6876         mov     w1, 0
6877         ldrh    w2, [x19]
6878         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
6879         lsl     w2, w2, 1
6880         ldr     x0, [x0]
6881         bl      ftl_memset
6882         adrp    x0, :got:p_swl_mul_table
6883         ldrh    w2, [x19]
6884         mov     w1, 0
6885         lsl     w2, w2, 1
6886         ldr     x0, [x0, #:got_lo12:p_swl_mul_table]
6887         ldr     x0, [x0]
6888         bl      ftl_memset
6889         adrp    x0, :got:g_sys_save_data
6890         mov     w1, 0
6891         mov     w2, 48
6892         ldr     x0, [x0, #:got_lo12:g_sys_save_data]
6893         bl      ftl_memset
6894         adrp    x0, :got:g_sys_ext_data
6895         mov     w1, 0
6896         mov     w2, 512
6897         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
6898         bl      ftl_memset
6899         bl      FtlGcBufInit
6900         bl      FtlL2PDataInit
6901         ldr     x19, [sp,16]
6902         mov     w0, 0
6903         ldp     x29, x30, [sp], 32
6904         ret
6905         .size   FtlVariablesInit, .-FtlVariablesInit
6906         .align  2
6907         .global SupperBlkListInit
6908         .type   SupperBlkListInit, %function
6909 SupperBlkListInit:
6910         stp     x29, x30, [sp, -112]!
6911         adrp    x0, :got:c_ftl_nand_blk_pre_plane
6912         mov     w2, 6
6913         add     x29, sp, 0
6914         stp     x23, x24, [sp,48]
6915         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
6916         adrp    x23, :got:p_data_block_list_table
6917         stp     x19, x20, [sp,16]
6918         stp     x21, x22, [sp,32]
6919         stp     x25, x26, [sp,64]
6920         stp     x27, x28, [sp,80]
6921         ldr     x1, [x23, #:got_lo12:p_data_block_list_table]
6922         adrp    x21, :got:g_num_data_superblocks
6923         ldrh    w3, [x0]
6924         adrp    x20, :got:g_num_free_superblocks
6925         mov     w24, 0
6926         adrp    x25, :got:c_ftl_nand_planes_num
6927         ldr     x0, [x1]
6928         mov     w1, 0
6929         mul     w2, w3, w2
6930         mov     w22, w24
6931         mov     w19, w24
6932         adrp    x26, :got:p_plane_order_table
6933         adrp    x27, :got:c_ftl_nand_page_pre_blk
6934         bl      ftl_memset
6935         mov     w28, 32768
6936         adrp    x0, :got:p_free_data_block_list_head
6937         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
6938         str     xzr, [x0]
6939         adrp    x0, :got:p_data_block_list_head
6940         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
6941         str     xzr, [x0]
6942         adrp    x0, :got:p_data_block_list_tail
6943         ldr     x0, [x0, #:got_lo12:p_data_block_list_tail]
6944         str     xzr, [x0]
6945         ldr     x0, [x21, #:got_lo12:g_num_data_superblocks]
6946         strh    wzr, [x0]
6947         ldr     x0, [x20, #:got_lo12:g_num_free_superblocks]
6948         strh    wzr, [x0]
6949 .L856:
6950         adrp    x0, :got:c_ftl_nand_data_blks_per_plane
6951         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_blks_per_plane]
6952         ldrh    w0, [x0]
6953         cmp     w0, w19
6954         bls     .L867
6955         mov     w2, 0
6956         mov     w4, w2
6957 .L862:
6958         ldr     x0, [x25, #:got_lo12:c_ftl_nand_planes_num]
6959         ldrh    w0, [x0]
6960         cmp     w0, w4
6961         bls     .L868
6962         ldr     x0, [x26, #:got_lo12:p_plane_order_table]
6963         mov     w1, w19
6964         str     x2, [x29,96]
6965         str     x4, [x29,104]
6966         ldrb    w0, [x0,w4,sxtw]
6967         bl      V2P_block
6968         bl      FtlBbmIsBadBlock
6969         ldr     x4, [x29,104]
6970         ldr     x2, [x29,96]
6971         cbnz    w0, .L857
6972         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_blk]
6973         ldrh    w0, [x0]
6974         add     w2, w2, w0
6975         uxth    w2, w2
6976 .L857:
6977         add     w4, w4, 1
6978         uxth    w4, w4
6979         b       .L862
6980 .L868:
6981         cbz     w2, .L859
6982         sdiv    w2, w28, w2
6983 .L859:
6984         ldr     x1, [x23, #:got_lo12:p_data_block_list_table]
6985         mov     w0, 6
6986         umull   x0, w19, w0
6987         ldr     x1, [x1]
6988         add     x0, x1, x0
6989         strh    w2, [x0,4]
6990         adrp    x0, :got:g_active_superblock
6991         ldr     x0, [x0, #:got_lo12:g_active_superblock]
6992         ldrh    w0, [x0]
6993         cmp     w0, w19
6994         beq     .L860
6995         adrp    x0, :got:g_buffer_superblock
6996         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
6997         ldrh    w0, [x0]
6998         cmp     w0, w19
6999         beq     .L860
7000         adrp    x0, :got:g_gc_temp_superblock
7001         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
7002         ldrh    w0, [x0]
7003         cmp     w0, w19
7004         beq     .L860
7005         adrp    x1, :got:p_valid_page_count_table
7006         ubfiz   x0, x19, 1, 16
7007         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
7008         ldr     x1, [x1]
7009         ldrh    w0, [x1,x0]
7010         cbnz    w0, .L861
7011         add     w3, w24, 1
7012         mov     w0, w19
7013         uxth    w24, w3
7014         bl      INSERT_FREE_LIST
7015         b       .L860
7016 .L861:
7017         add     w22, w22, 1
7018         mov     w0, w19
7019         uxth    w22, w22
7020         bl      INSERT_DATA_LIST
7021 .L860:
7022         add     w19, w19, 1
7023         uxth    w19, w19
7024         b       .L856
7025 .L867:
7026         ldr     x21, [x21, #:got_lo12:g_num_data_superblocks]
7027         mov     w0, 0
7028         strh    w22, [x21]
7029         ldr     x20, [x20, #:got_lo12:g_num_free_superblocks]
7030         strh    w24, [x20]
7031         ldp     x19, x20, [sp,16]
7032         ldp     x21, x22, [sp,32]
7033         ldp     x23, x24, [sp,48]
7034         ldp     x25, x26, [sp,64]
7035         ldp     x27, x28, [sp,80]
7036         ldp     x29, x30, [sp], 112
7037         ret
7038         .size   SupperBlkListInit, .-SupperBlkListInit
7039         .align  2
7040         .global FtlGcPageVarInit
7041         .type   FtlGcPageVarInit, %function
7042 FtlGcPageVarInit:
7043         adrp    x0, :got:g_gc_blk_num
7044         mov     w1, 255
7045         stp     x29, x30, [sp, -32]!
7046         add     x29, sp, 0
7047         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
7048         str     x19, [sp,16]
7049         adrp    x19, :got:c_ftl_nand_page_pre_super_blk
7050         strh    wzr, [x0]
7051         adrp    x0, :got:g_gc_page_offset
7052         ldr     x0, [x0, #:got_lo12:g_gc_page_offset]
7053         strh    wzr, [x0]
7054         adrp    x0, :got:p_gc_blk_tbl
7055         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_super_blk]
7056         ldr     x0, [x0, #:got_lo12:p_gc_blk_tbl]
7057         ldrh    w2, [x19]
7058         ldr     x0, [x0]
7059         lsl     w2, w2, 1
7060         bl      ftl_memset
7061         adrp    x0, :got:p_gc_page_info
7062         ldrh    w3, [x19]
7063         mov     w2, 12
7064         mov     w1, 255
7065         ldr     x0, [x0, #:got_lo12:p_gc_page_info]
7066         mul     w2, w3, w2
7067         ldr     x0, [x0]
7068         bl      ftl_memset
7069         bl      FtlGcBufInit
7070         ldr     x19, [sp,16]
7071         ldp     x29, x30, [sp], 32
7072         ret
7073         .size   FtlGcPageVarInit, .-FtlGcPageVarInit
7074         .align  2
7075         .global ftl_memcpy
7076         .type   ftl_memcpy, %function
7077 ftl_memcpy:
7078         stp     x29, x30, [sp, -16]!
7079         uxtw    x2, w2
7080         add     x29, sp, 0
7081         bl      memcpy
7082         ldp     x29, x30, [sp], 16
7083         ret
7084         .size   ftl_memcpy, .-ftl_memcpy
7085         .align  2
7086         .global FlashGetReadRetryDefault
7087         .type   FlashGetReadRetryDefault, %function
7088 FlashGetReadRetryDefault:
7089         stp     x29, x30, [sp, -16]!
7090         mov     w1, w0
7091         add     x29, sp, 0
7092         cbz     w0, .L871
7093         sub     w2, w0, #1
7094         cmp     w2, 5
7095         bhi     .L873
7096         bl      HynixGetReadRetryDefault
7097         b       .L871
7098 .L873:
7099         cmp     w0, 49
7100         bne     .L874
7101         adrp    x0, :got:gReadRetryInfo
7102         mov     w2, 64
7103         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7104         add     x0, x0, 4
7105         strb    w1, [x0,-4]
7106         mov     w1, 4
7107         strb    w1, [x0,-3]
7108         mov     w1, 15
7109         strb    w1, [x0,-2]
7110         adrp    x1, :got:SamsungRefValue
7111         ldr     x1, [x1, #:got_lo12:SamsungRefValue]
7112         b       .L889
7113 .L874:
7114         sub     w0, w0, #65
7115         cmp     w0, 1
7116         bls     .L880
7117         cmp     w1, 33
7118         bne     .L875
7119 .L880:
7120         adrp    x0, :got:gReadRetryInfo
7121         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7122         strb    w1, [x0]
7123         mov     w1, 4
7124         b       .L890
7125 .L875:
7126         cmp     w1, 67
7127         beq     .L881
7128         cmp     w1, 34
7129         bne     .L877
7130 .L881:
7131         adrp    x0, :got:gReadRetryInfo
7132         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7133         strb    w1, [x0]
7134         mov     w1, 5
7135 .L890:
7136         strb    w1, [x0,1]
7137         mov     w1, 7
7138         strb    w1, [x0,2]
7139         adrp    x1, :got:ToshibaA19RefValue
7140         add     x0, x0, 4
7141         mov     w2, 45
7142         ldr     x1, [x1, #:got_lo12:ToshibaA19RefValue]
7143         b       .L889
7144 .L877:
7145         cmp     w1, 68
7146         beq     .L882
7147         cmp     w1, 35
7148         bne     .L871
7149 .L882:
7150         adrp    x0, :got:gReadRetryInfo
7151         mov     w2, 95
7152         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7153         add     x0, x0, 4
7154         strb    w1, [x0,-4]
7155         mov     w1, 5
7156         strb    w1, [x0,-3]
7157         mov     w1, 17
7158         strb    w1, [x0,-2]
7159         adrp    x1, :got:Toshiba15RefValue
7160         ldr     x1, [x1, #:got_lo12:Toshiba15RefValue]
7161 .L889:
7162         bl      ftl_memcpy
7163 .L871:
7164         ldp     x29, x30, [sp], 16
7165         ret
7166         .size   FlashGetReadRetryDefault, .-FlashGetReadRetryDefault
7167         .align  2
7168         .global FlashReadIdbData
7169         .type   FlashReadIdbData, %function
7170 FlashReadIdbData:
7171         adrp    x1, :got:gNandIDataBuf
7172         mov     w2, 2048
7173         stp     x29, x30, [sp, -16]!
7174         add     x29, sp, 0
7175         ldr     x1, [x1, #:got_lo12:gNandIDataBuf]
7176         bl      ftl_memcpy
7177         mov     w0, 0
7178         ldp     x29, x30, [sp], 16
7179         ret
7180         .size   FlashReadIdbData, .-FlashReadIdbData
7181         .align  2
7182         .global FlashLoadPhyInfoInRam
7183         .type   FlashLoadPhyInfoInRam, %function
7184 FlashLoadPhyInfoInRam:
7185         stp     x29, x30, [sp, -64]!
7186         add     x29, sp, 0
7187         stp     x19, x20, [sp,16]
7188         adrp    x19, :got:NandFlashParaTbl
7189         str     x23, [sp,48]
7190         stp     x21, x22, [sp,32]
7191         mov     w20, 0
7192         adrp    x23, :got:IDByte
7193         ldr     x22, [x19, #:got_lo12:NandFlashParaTbl]
7194 .L896:
7195         ldr     x1, [x23, #:got_lo12:IDByte]
7196         add     x0, x22, 1
7197         ldrb    w2, [x22]
7198         bl      FlashMemCmp8
7199         mov     w21, w0
7200         cbnz    w0, .L893
7201         ldr     x19, [x19, #:got_lo12:NandFlashParaTbl]
7202         ubfiz   x20, x20, 5, 32
7203         adds    x19, x20, x19
7204         beq     .L899
7205         ldrb    w3, [x19,22]
7206         mov     x2, 0
7207         adrp    x4, .LANCHOR2
7208         b       .L898
7209 .L893:
7210         add     w20, w20, 1
7211         add     x22, x22, 32
7212         cmp     w20, 66
7213         bne     .L896
7214         b       .L899
7215 .L898:
7216         lsl     x0, x2, 5
7217         add     x5, x4, :lo12:.LANCHOR2
7218         mov     w1, w2
7219         ldrb    w0, [x0,x5]
7220         cmp     w0, w3
7221         beq     .L897
7222         add     x2, x2, 1
7223         cmp     x2, 4
7224         bne     .L898
7225         mov     w1, w2
7226 .L897:
7227         adrp    x0, :got:gNandOptPara
7228         adrp    x2, .LANCHOR2
7229         add     x2, x2, :lo12:.LANCHOR2
7230         ubfiz   x1, x1, 5, 32
7231         add     x1, x2, x1
7232         mov     w2, 32
7233         ldr     x0, [x0, #:got_lo12:gNandOptPara]
7234         bl      ftl_memcpy
7235         adrp    x0, :got:gNandParaInfo
7236         mov     x1, x19
7237         mov     w2, 32
7238         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
7239         bl      ftl_memcpy
7240         b       .L894
7241 .L899:
7242         mov     w21, -1
7243 .L894:
7244         mov     w0, w21
7245         ldr     x23, [sp,48]
7246         ldp     x19, x20, [sp,16]
7247         ldp     x21, x22, [sp,32]
7248         ldp     x29, x30, [sp], 64
7249         ret
7250         .size   FlashLoadPhyInfoInRam, .-FlashLoadPhyInfoInRam
7251         .align  2
7252         .global NandcCopy1KB
7253         .type   NandcCopy1KB, %function
7254 NandcCopy1KB:
7255         stp     x29, x30, [sp, -48]!
7256         uxtb    w1, w1
7257         add     x29, sp, 0
7258         stp     x19, x20, [sp,16]
7259         str     x21, [sp,32]
7260         uxtb    w19, w2
7261         cmp     w1, 1
7262         mov     x20, x4
7263         ubfiz   x2, x19, 9, 8
7264         add     x4, x0, 4096
7265         add     x21, x0, 512
7266         add     x2, x4, x2
7267         bne     .L904
7268         cbz     x3, .L905
7269         mov     x0, x2
7270         mov     x1, x3
7271         mov     w2, 1024
7272         bl      ftl_memcpy
7273 .L905:
7274         cbz     x20, .L903
7275         mov     w0, 48
7276         lsr     w19, w19, 1
7277         ldrb    w1, [x20,1]
7278         mul     w19, w19, w0
7279         ldrb    w0, [x20,2]
7280         asr     w19, w19, 2
7281         lsl     w0, w0, 16
7282         orr     w0, w0, w1, lsl 8
7283         ldrb    w1, [x20]
7284         orr     w0, w0, w1
7285         ldrb    w1, [x20,3]
7286         orr     w0, w0, w1, lsl 24
7287         str     w0, [x21,w19,sxtw 2]
7288         b       .L903
7289 .L904:
7290         cbz     x3, .L908
7291         mov     x1, x2
7292         mov     x0, x3
7293         mov     w2, 1024
7294         bl      ftl_memcpy
7295 .L908:
7296         cbz     x20, .L903
7297         mov     w0, 48
7298         lsr     w19, w19, 1
7299         mul     w19, w19, w0
7300         asr     w19, w19, 2
7301         ldr     w0, [x21,w19,sxtw 2]
7302         strb    w0, [x20]
7303         lsr     w1, w0, 8
7304         strb    w1, [x20,1]
7305         lsr     w1, w0, 16
7306         lsr     w0, w0, 24
7307         strb    w1, [x20,2]
7308         strb    w0, [x20,3]
7309 .L903:
7310         ldp     x19, x20, [sp,16]
7311         ldr     x21, [sp,32]
7312         ldp     x29, x30, [sp], 48
7313         ret
7314         .size   NandcCopy1KB, .-NandcCopy1KB
7315         .align  2
7316         .global ftl_memcmp
7317         .type   ftl_memcmp, %function
7318 ftl_memcmp:
7319         stp     x29, x30, [sp, -16]!
7320         uxtw    x2, w2
7321         add     x29, sp, 0
7322         bl      memcmp
7323         ldp     x29, x30, [sp], 16
7324         ret
7325         .size   ftl_memcmp, .-ftl_memcmp
7326         .align  2
7327         .global FlashSramLoadStore
7328         .type   FlashSramLoadStore, %function
7329 FlashSramLoadStore:
7330         adrp    x4, :got:RK29_NANDC_REG_BASE
7331         mov     x6, x0
7332         stp     x29, x30, [sp, -16]!
7333         uxtw    x1, w1
7334         add     x29, sp, 0
7335         ldr     x4, [x4, #:got_lo12:RK29_NANDC_REG_BASE]
7336         ldr     x4, [x4]
7337         add     x4, x4, 4096
7338         cbnz    w2, .L921
7339         add     x1, x4, x1
7340         b       .L923
7341 .L921:
7342         add     x0, x4, x1
7343         mov     x1, x6
7344 .L923:
7345         mov     w2, w3
7346         bl      ftl_memcpy
7347         ldp     x29, x30, [sp], 16
7348         ret
7349         .size   FlashSramLoadStore, .-FlashSramLoadStore
7350         .align  2
7351         .global FlashCs123Init
7352         .type   FlashCs123Init, %function
7353 FlashCs123Init:
7354         ret
7355         .size   FlashCs123Init, .-FlashCs123Init
7356         .align  2
7357         .global rk_nand_de_init
7358         .type   rk_nand_de_init, %function
7359 rk_nand_de_init:
7360         stp     x29, x30, [sp, -16]!
7361         add     x29, sp, 0
7362         bl      FlashDeInit
7363         ldp     x29, x30, [sp], 16
7364         ret
7365         .size   rk_nand_de_init, .-rk_nand_de_init
7366         .align  2
7367         .global rk_nand_suspend
7368         .type   rk_nand_suspend, %function
7369 rk_nand_suspend:
7370         stp     x29, x30, [sp, -16]!
7371         add     x29, sp, 0
7372         bl      FlashSuspend
7373         ldp     x29, x30, [sp], 16
7374         ret
7375         .size   rk_nand_suspend, .-rk_nand_suspend
7376         .align  2
7377         .global rk_nand_resume
7378         .type   rk_nand_resume, %function
7379 rk_nand_resume:
7380         stp     x29, x30, [sp, -16]!
7381         add     x29, sp, 0
7382         bl      FlashResume
7383         ldp     x29, x30, [sp], 16
7384         ret
7385         .size   rk_nand_resume, .-rk_nand_resume
7386         .align  2
7387         .global rk_ftl_get_capacity
7388         .type   rk_ftl_get_capacity, %function
7389 rk_ftl_get_capacity:
7390         stp     x29, x30, [sp, -16]!
7391         mov     w0, -1
7392         add     x29, sp, 0
7393         bl      FtlGetCapacity
7394         ldp     x29, x30, [sp], 16
7395         ret
7396         .size   rk_ftl_get_capacity, .-rk_ftl_get_capacity
7397         .align  2
7398         .global rknand_print_hex
7399         .type   rknand_print_hex, %function
7400 rknand_print_hex:
7401         stp     x29, x30, [sp, -96]!
7402         add     x29, sp, 0
7403         stp     x19, x20, [sp,16]
7404         stp     x21, x22, [sp,32]
7405         stp     x23, x24, [sp,48]
7406         mov     x19, 0
7407         adrp    x23, .LC79
7408         adrp    x21, .LC80
7409         adrp    x24, .LC72
7410         stp     x25, x26, [sp,64]
7411         str     x27, [sp,80]
7412         mov     x22, x1
7413         mov     x27, x0
7414         mov     w25, w2
7415         uxtw    x26, w3
7416         mov     w20, w19
7417         add     x23, x23, :lo12:.LC79
7418         add     x21, x21, :lo12:.LC80
7419         add     x24, x24, :lo12:.LC72
7420 .L930:
7421         cmp     x19, x26
7422         beq     .L938
7423         cbnz    w20, .L931
7424         mov     x0, x23
7425         mov     x1, x27
7426         mov     w2, w19
7427         bl      printk
7428 .L931:
7429         cmp     w25, 4
7430         mov     x0, x21
7431         bne     .L932
7432         ldr     w1, [x22,x19,lsl 2]
7433         b       .L937
7434 .L932:
7435         cmp     w25, 2
7436         bne     .L934
7437         ldrsh   w1, [x22,x19,lsl 1]
7438         b       .L937
7439 .L934:
7440         ldrb    w1, [x22,x19]
7441 .L937:
7442         bl      printk
7443         add     w20, w20, 1
7444         cmp     w20, 15
7445         bls     .L935
7446         adrp    x1, .LC81
7447         mov     x0, x24
7448         add     x1, x1, :lo12:.LC81
7449         mov     w20, 0
7450         bl      printk
7451 .L935:
7452         add     x19, x19, 1
7453         b       .L930
7454 .L938:
7455         adrp    x0, .LC72
7456         adrp    x1, .LC81
7457         add     x1, x1, :lo12:.LC81
7458         add     x0, x0, :lo12:.LC72
7459         bl      printk
7460         ldr     x27, [sp,80]
7461         ldp     x19, x20, [sp,16]
7462         ldp     x21, x22, [sp,32]
7463         ldp     x23, x24, [sp,48]
7464         ldp     x25, x26, [sp,64]
7465         ldp     x29, x30, [sp], 96
7466         ret
7467         .size   rknand_print_hex, .-rknand_print_hex
7468         .align  2
7469         .global NandcXferComp
7470         .type   NandcXferComp, %function
7471 NandcXferComp:
7472         stp     x29, x30, [sp, -80]!
7473         adrp    x1, :got:gNandChipMap
7474         ubfiz   x0, x0, 4, 8
7475         add     x29, sp, 0
7476         stp     x21, x22, [sp,32]
7477         ldr     x1, [x1, #:got_lo12:gNandChipMap]
7478         adrp    x21, :got:gNandcVer
7479         stp     x19, x20, [sp,16]
7480         str     x23, [sp,48]
7481         ldr     x19, [x1,x0]
7482         ldr     x0, [x21, #:got_lo12:gNandcVer]
7483         ldr     w0, [x0]
7484         cmp     w0, 3
7485         bls     .L970
7486         ldr     w0, [x19,16]
7487         tbz     x0, 2, .L970
7488         mov     x0, x19
7489         bl      wait_for_nandc_xfer_completed
7490         ldr     w20, [x19,16]
7491         ldr     w0, [x19,8]
7492         ubfx    x20, x20, 1, 1
7493         str     w0, [x29,64]
7494         cbz     w20, .L941
7495         adrp    x22, .LC82
7496         adrp    x23, .LC83
7497         mov     w20, 0
7498         add     x22, x22, :lo12:.LC82
7499         add     x23, x23, :lo12:.LC83
7500 .L942:
7501         ldr     w2, [x19,28]
7502         ldr     w1, [x29,64]
7503         ubfx    x2, x2, 16, 5
7504         ubfx    x1, x1, 22, 6
7505         cmp     w2, w1
7506         bge     .L950
7507         ldr     x0, [x21, #:got_lo12:gNandcVer]
7508         ldr     w0, [x0]
7509         cmp     w0, 5
7510         bhi     .L943
7511 .L946:
7512         add     w20, w20, 1
7513         and     w0, w20, 16777215
7514         cbnz    w0, .L942
7515         ldr     w2, [x19,28]
7516         mov     w1, w20
7517         ldr     w3, [x29,64]
7518         mov     x0, x22
7519         ubfx    x2, x2, 16, 5
7520         ubfx    x3, x3, 22, 6
7521         bl      printk
7522         mov     x0, x23
7523         mov     x1, x19
7524         mov     w2, 4
7525         mov     w3, 512
7526         bl      rknand_print_hex
7527         b       .L942
7528 .L943:
7529         ldr     w0, [x19]
7530         str     w0, [x29,72]
7531         ldr     w0, [x29,72]
7532         tbz     x0, 13, .L946
7533         ldr     w0, [x29,72]
7534         tbz     x0, 17, .L946
7535 .L950:
7536         adrp    x19, :got:gMasterInfo
7537         ldr     x19, [x19, #:got_lo12:gMasterInfo]
7538         ldr     w0, [x19,40]
7539         cbz     w0, .L951
7540         ldr     w1, [x29,64]
7541         mov     w2, 0
7542         ldr     w0, [x19,32]
7543         ubfx    x1, x1, 22, 5
7544         lsl     w1, w1, 10
7545         bl      rknand_dma_unmap_single
7546         ldr     w1, [x29,64]
7547         mov     w2, 0
7548         ldr     w0, [x19,36]
7549         ubfx    x1, x1, 22, 5
7550         lsl     w1, w1, 7
7551         bl      rknand_dma_unmap_single
7552         b       .L951
7553 .L941:
7554         adrp    x21, .LC84
7555         adrp    x22, .LC83
7556         add     x21, x21, :lo12:.LC84
7557         add     x22, x22, :lo12:.LC83
7558 .L952:
7559         ldr     w0, [x29,64]
7560         tbnz    x0, 20, .L978
7561         ldr     w0, [x19,8]
7562         add     w20, w20, 1
7563         str     w0, [x29,64]
7564         and     w0, w20, 16777215
7565         cbnz    w0, .L952
7566         ldr     w2, [x29,64]
7567         mov     w1, w20
7568         ldr     w3, [x19,28]
7569         mov     x0, x21
7570         ubfx    x3, x3, 16, 5
7571         bl      printk
7572         mov     x0, x22
7573         mov     x1, x19
7574         mov     w2, 4
7575         mov     w3, 512
7576         bl      rknand_print_hex
7577         b       .L952
7578 .L978:
7579         adrp    x0, :got:gNandcDumpWriteEn
7580         mov     x20, x0
7581         ldr     x1, [x0, #:got_lo12:gNandcDumpWriteEn]
7582         ldr     w1, [x1]
7583         cbz     w1, .L955
7584         mov     x0, x19
7585         bl      NandcSendDumpDataStart
7586 .L955:
7587         adrp    x21, :got:gMasterInfo
7588         ldr     x21, [x21, #:got_lo12:gMasterInfo]
7589         ldr     w0, [x21,40]
7590         cbz     w0, .L956
7591         ldr     w1, [x29,64]
7592         mov     w2, 1
7593         ldr     w0, [x21,32]
7594         ubfx    x1, x1, 22, 5
7595         lsl     w1, w1, 10
7596         bl      rknand_dma_unmap_single
7597         ldr     w1, [x29,64]
7598         mov     w2, 1
7599         ldr     w0, [x21,36]
7600         ubfx    x1, x1, 22, 5
7601         lsl     w1, w1, 7
7602         bl      rknand_dma_unmap_single
7603 .L956:
7604         ldr     x0, [x20, #:got_lo12:gNandcDumpWriteEn]
7605         ldr     w0, [x0]
7606         cbz     w0, .L951
7607         mov     x0, x19
7608         bl      NandcSendDumpDataDone
7609 .L951:
7610         adrp    x0, :got:gMasterInfo
7611         ldr     x0, [x0, #:got_lo12:gMasterInfo]
7612         str     wzr, [x0,40]
7613         b       .L939
7614 .L970:
7615         ldr     w0, [x19,8]
7616         str     w0, [x29,64]
7617         ldr     w0, [x29,64]
7618         tbz     x0, 20, .L970
7619 .L939:
7620         ldp     x19, x20, [sp,16]
7621         ldp     x21, x22, [sp,32]
7622         ldr     x23, [sp,48]
7623         ldp     x29, x30, [sp], 80
7624         ret
7625         .size   NandcXferComp, .-NandcXferComp
7626         .align  2
7627         .global NandcXferData
7628         .type   NandcXferData, %function
7629 NandcXferData:
7630         stp     x29, x30, [sp, -176]!
7631         add     x29, sp, 0
7632         stp     x23, x24, [sp,48]
7633         uxtb    w24, w0
7634         adrp    x0, :got:gNandChipMap
7635         stp     x19, x20, [sp,16]
7636         uxtb    w20, w1
7637         sbfiz   x1, x24, 4, 32
7638         ldr     x0, [x0, #:got_lo12:gNandChipMap]
7639         uxtb    w23, w2
7640         stp     x21, x22, [sp,32]
7641         stp     x25, x26, [sp,64]
7642         stp     x27, x28, [sp,80]
7643         mov     x25, x3
7644         mov     x21, x4
7645         ldr     x19, [x0,x1]
7646         and     x0, x3, 63
7647         cbnz    x0, .L980
7648         cbnz    x4, .L981
7649         add     x21, x29, 112
7650         mov     w1, 255
7651         mov     x0, x21
7652         mov     w2, 64
7653         bl      ftl_memset
7654 .L981:
7655         mov     w0, w24
7656         mov     w1, w20
7657         mov     w2, w23
7658         mov     w3, 0
7659         mov     x4, x25
7660         mov     x5, x21
7661         mov     w22, 0
7662         bl      NandcXferStart
7663         mov     w0, w24
7664         bl      NandcXferComp
7665         cbnz    w20, .L982
7666         adrp    x0, :got:gNandcEccBits
7667         ubfx    x2, x23, 1, 7
7668         mov     w3, 128
7669         adrp    x5, :got:gMasterInfo
7670         add     x2, x21, x2, lsl 2
7671         ldr     x1, [x0, #:got_lo12:gNandcEccBits]
7672         ldr     w1, [x1]
7673         cmp     w1, 25
7674         mov     w1, 64
7675         csel    w3, w1, w3, cc
7676         mov     w1, w20
7677 .L984:
7678         cmp     x21, x2
7679         add     w4, w1, w3
7680         beq     .L1026
7681         ldr     x6, [x5, #:got_lo12:gMasterInfo]
7682         and     x1, x1, 4294967292
7683         add     x21, x21, 4
7684         ldr     x6, [x6,8]
7685         ldr     w1, [x6,x1]
7686         strb    w1, [x21,-4]
7687         lsr     w6, w1, 8
7688         strb    w6, [x21,-3]
7689         lsr     w6, w1, 16
7690         strb    w6, [x21,-2]
7691         lsr     w1, w1, 24
7692         strb    w1, [x21,-1]
7693         mov     w1, w4
7694         b       .L984
7695 .L1026:
7696         ldr     x0, [x0, #:got_lo12:gNandcEccBits]
7697         lsr     w23, w23, 2
7698         ldr     w5, [x0]
7699         adrp    x0, :got:gNandcVer
7700         ldr     x0, [x0, #:got_lo12:gNandcVer]
7701         ldr     w4, [x0]
7702         mov     w0, 0
7703         mov     w22, w0
7704 .L986:
7705         cmp     w0, w23
7706         bcs     .L982
7707         cbz     w5, .L982
7708         uxtw    x1, w0
7709         add     x1, x1, 8
7710         ldr     w1, [x19,x1,lsl 2]
7711         str     w1, [x29,104]
7712         ldr     w1, [x29,104]
7713         tbnz    x1, 2, .L1010
7714         ldr     w3, [x29,104]
7715         ubfx    x3, x3, 15, 1
7716         cbnz    w3, .L1010
7717         cmp     w4, 5
7718         bls     .L988
7719         ldr     w2, [x29,104]
7720         ubfx    x6, x2, 3, 5
7721         ldr     w2, [x29,104]
7722         ldr     w1, [x29,104]
7723         ubfx    x2, x2, 27, 1
7724         ubfx    x3, x1, 16, 5
7725         ldr     w1, [x29,104]
7726         orr     w2, w6, w2, lsl 5
7727         ubfx    x1, x1, 29, 1
7728         orr     w1, w3, w1, lsl 5
7729         ldr     w3, [x29,104]
7730         cmp     w2, w1
7731         bls     .L989
7732         ldr     w1, [x29,104]
7733         ubfx    x3, x3, 3, 5
7734         ubfx    x1, x1, 27, 1
7735         orr     w3, w3, w1, lsl 5
7736         b       .L990
7737 .L989:
7738         ubfx    x1, x3, 16, 5
7739         ldr     w3, [x29,104]
7740         ubfx    x3, x3, 29, 1
7741         b       .L1025
7742 .L988:
7743         cmp     w4, 3
7744         bls     .L990
7745         ldr     w2, [x29,104]
7746         ubfx    x6, x2, 3, 5
7747         ldr     w2, [x29,104]
7748         ldr     w1, [x29,104]
7749         ubfx    x2, x2, 28, 1
7750         ubfx    x3, x1, 16, 5
7751         ldr     w1, [x29,104]
7752         orr     w2, w6, w2, lsl 5
7753         ubfx    x1, x1, 30, 1
7754         orr     w1, w3, w1, lsl 5
7755         ldr     w3, [x29,104]
7756         cmp     w2, w1
7757         bls     .L991
7758         ubfx    x1, x3, 3, 5
7759         ldr     w3, [x29,104]
7760         ubfx    x3, x3, 28, 1
7761         b       .L1025
7762 .L991:
7763         ubfx    x1, x3, 16, 5
7764         ldr     w3, [x29,104]
7765         ubfx    x3, x3, 30, 1
7766 .L1025:
7767         orr     w3, w1, w3, lsl 5
7768 .L990:
7769         cmp     w22, w3
7770         csel    w22, w22, w3, cs
7771         b       .L987
7772 .L1010:
7773         mov     w22, -1
7774 .L987:
7775         add     w0, w0, 1
7776         b       .L986
7777 .L982:
7778         str     wzr, [x19,16]
7779         b       .L993
7780 .L980:
7781         cmp     w20, 1
7782         bne     .L1024
7783         mov     w22, 0
7784         mov     w27, 2
7785 .L994:
7786         cmp     w22, w23
7787         bcs     .L1027
7788         and     w26, w22, 3
7789         mov     x3, x25
7790         cbz     x25, .L996
7791         ubfiz   x0, x22, 9, 23
7792         add     x3, x25, x0
7793 .L996:
7794         cmp     x21, xzr
7795         mov     x0, x19
7796         csel    w4, w27, wzr, ne
7797         mov     w1, 1
7798         mov     w2, w26
7799         mul     w4, w4, w22
7800         add     w22, w22, 2
7801         add     x4, x21, x4
7802         bl      NandcCopy1KB
7803         mov     x4, 0
7804         mov     w0, w24
7805         mov     w1, 1
7806         mov     w2, 2
7807         mov     w3, w26
7808         mov     x5, x4
7809         bl      NandcXferStart
7810         mov     w0, w24
7811         bl      NandcXferComp
7812         b       .L994
7813 .L1027:
7814         mov     w22, 0
7815         b       .L993
7816 .L1024:
7817         mov     w1, 0
7818         mov     x4, 0
7819         mov     w26, 0
7820         mov     w0, w24
7821         mov     w2, 2
7822         mov     w3, w1
7823         mov     x5, x4
7824         mov     w22, w26
7825         mov     w27, 2
7826         bl      NandcXferStart
7827 .L999:
7828         cmp     w26, w23
7829         bcs     .L993
7830         mov     w0, w24
7831         add     w28, w26, 2
7832         bl      NandcXferComp
7833         ldr     w0, [x19,32]
7834         cmp     w28, w23
7835         str     w0, [x29,104]
7836         bcs     .L1000
7837         mov     x4, 0
7838         mov     w0, w24
7839         mov     w1, 0
7840         mov     w2, 2
7841         and     w3, w28, 3
7842         mov     x5, x4
7843         bl      NandcXferStart
7844 .L1000:
7845         ldr     w0, [x29,104]
7846         tbnz    x0, 2, .L1015
7847         ldr     w0, [x29,104]
7848         ubfx    x1, x0, 3, 5
7849         ldr     w0, [x29,104]
7850         ubfx    x0, x0, 27, 1
7851         orr     w0, w1, w0, lsl 5
7852         cmp     w22, w0
7853         csel    w22, w22, w0, cs
7854         b       .L1001
7855 .L1015:
7856         mov     w22, -1
7857 .L1001:
7858         and     w2, w26, 3
7859         mov     x3, x25
7860         cbz     x25, .L1002
7861         ubfiz   x3, x26, 9, 23
7862         add     x3, x25, x3
7863 .L1002:
7864         cmp     x21, xzr
7865         mov     x0, x19
7866         csel    w4, w27, wzr, ne
7867         mov     w1, 0
7868         mul     w4, w4, w26
7869         mov     w26, w28
7870         add     x4, x21, x4
7871         bl      NandcCopy1KB
7872         b       .L999
7873 .L993:
7874         cbnz    w20, .L1005
7875         adrp    x0, :got:gNandcVer
7876         ldr     x0, [x0, #:got_lo12:gNandcVer]
7877         ldr     w0, [x0]
7878         cmp     w0, 5
7879         bls     .L1005
7880         ldr     w0, [x19]
7881         mov     w1, 8192
7882         movk    w1, 0x2, lsl 16
7883         and     w1, w0, w1
7884         cmp     w1, 139264
7885         bne     .L1005
7886         orr     w0, w0, 131072
7887         mov     w22, -1
7888         str     w0, [x19]
7889 .L1005:
7890         mov     w0, w22
7891         ldp     x19, x20, [sp,16]
7892         ldp     x21, x22, [sp,32]
7893         ldp     x23, x24, [sp,48]
7894         ldp     x25, x26, [sp,64]
7895         ldp     x27, x28, [sp,80]
7896         ldp     x29, x30, [sp], 176
7897         ret
7898         .size   NandcXferData, .-NandcXferData
7899         .align  2
7900         .global FlashReadRawPage
7901         .type   FlashReadRawPage, %function
7902 FlashReadRawPage:
7903         stp     x29, x30, [sp, -64]!
7904         mov     x4, x3
7905         add     x29, sp, 0
7906         stp     x19, x20, [sp,16]
7907         uxtb    w19, w0
7908         adrp    x0, :got:gNandParaInfo
7909         str     x21, [sp,32]
7910         mov     x21, x2
7911         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
7912         ldrb    w20, [x0,9]
7913         cbnz    w19, .L1029
7914         adrp    x0, :got:gNandIDBResBlkNum
7915         adrp    x5, :got:gBlockPageAlignSize
7916         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
7917         ldr     x5, [x5, #:got_lo12:gBlockPageAlignSize]
7918         ldrb    w0, [x0]
7919         ldr     w2, [x5]
7920         mul     w0, w0, w2
7921         cmp     w1, w0
7922         mov     w0, 4
7923         csel    w20, w20, w0, cs
7924 .L1029:
7925         mov     w0, w19
7926         str     x4, [x29,48]
7927         str     x1, [x29,56]
7928         bl      NandcWaitFlashReady
7929         mov     w0, w19
7930         bl      NandcFlashCs
7931         ldr     x1, [x29,56]
7932         mov     w0, w19
7933         bl      FlashReadCmd
7934         mov     w0, w19
7935         bl      NandcWaitFlashReady
7936         ldr     x4, [x29,48]
7937         mov     w2, w20
7938         mov     x3, x21
7939         mov     w1, 0
7940         mov     w0, w19
7941         bl      NandcXferData
7942         mov     w20, w0
7943         mov     w0, w19
7944         bl      NandcFlashDeCs
7945         ldr     x21, [sp,32]
7946         mov     w0, w20
7947         ldp     x19, x20, [sp,16]
7948         ldp     x29, x30, [sp], 64
7949         ret
7950         .size   FlashReadRawPage, .-FlashReadRawPage
7951         .align  2
7952         .global FlashDdrTunningRead
7953         .type   FlashDdrTunningRead, %function
7954 FlashDdrTunningRead:
7955         stp     x29, x30, [sp, -128]!
7956         add     x29, sp, 0
7957         stp     x23, x24, [sp,48]
7958         uxtb    w24, w0
7959         adrp    x0, :got:gpNandc
7960         stp     x21, x22, [sp,32]
7961         stp     x25, x26, [sp,64]
7962         ldr     x0, [x0, #:got_lo12:gpNandc]
7963         mov     w22, 6
7964         stp     x27, x28, [sp,80]
7965         stp     x19, x20, [sp,16]
7966         mov     w26, w1
7967         mov     x25, x2
7968         ldr     x0, [x0]
7969         mov     x23, x3
7970         mov     w27, w4
7971         mov     w21, 1024
7972         ldr     w0, [x0,304]
7973         str     w0, [x29,124]
7974         adrp    x0, :got:gNandcVer
7975         ldr     x0, [x0, #:got_lo12:gNandcVer]
7976         ldr     w0, [x0]
7977         cmp     w0, 8
7978         mov     w0, 12
7979         csel    w22, w22, w0, cc
7980         cbz     w4, .L1032
7981         mov     w0, 1
7982         adrp    x19, :got:gFlashInterfaceMode
7983         bl      FlashSetInterfaceMode
7984         mov     w0, 1
7985         bl      NandcSetMode
7986         mov     w0, w24
7987         bl      FlashReset
7988         mov     w1, w26
7989         mov     x2, x25
7990         mov     x3, x23
7991         mov     w0, w24
7992         bl      FlashReadRawPage
7993         ldr     x19, [x19, #:got_lo12:gFlashInterfaceMode]
7994         mov     w21, w0
7995         ldrb    w0, [x19]
7996         bl      FlashSetInterfaceMode
7997         ldrb    w0, [x19]
7998         bl      NandcSetMode
7999         cmn     w21, #1
8000         bne     .L1033
8001 .L1042:
8002         mov     w21, -1
8003         b       .L1034
8004 .L1033:
8005         adrp    x0, .LC85
8006         mov     w1, w26
8007         add     x0, x0, :lo12:.LC85
8008         mov     w2, w21
8009         bl      printk
8010         cmp     w21, 9
8011         bhi     .L1035
8012         adrp    x1, :got:IDByte
8013         sxtw    x0, w24
8014         lsl     x2, x0, 3
8015         ldr     x1, [x1, #:got_lo12:IDByte]
8016         ldrb    w1, [x1,x2]
8017         cmp     w1, 173
8018         bne     .L1035
8019         adrp    x1, :got:gNandChipMap
8020         lsl     x0, x0, 4
8021         ldr     x1, [x1, #:got_lo12:gNandChipMap]
8022         ldr     x0, [x1,x0]
8023         ldr     w1, [x0,3840]
8024         ldr     w1, [x0]
8025         orr     w1, w1, 131072
8026         str     w1, [x0]
8027 .L1035:
8028         adrp    x0, :got:FlashDdrTunningReadCount
8029         ldr     x0, [x0, #:got_lo12:FlashDdrTunningReadCount]
8030         ldr     w1, [x0]
8031         add     w1, w1, 1
8032         str     w1, [x0]
8033         cmp     w1, 2047
8034         bls     .L1034
8035         mov     x23, 0
8036         str     wzr, [x0]
8037         mov     x25, x23
8038 .L1032:
8039         mov     w19, 0
8040         mov     w28, -1
8041         mov     w5, w19
8042         mov     w6, w19
8043         mov     w20, w19
8044 .L1040:
8045         mov     w0, w22
8046         str     x5, [x29,104]
8047         str     x6, [x29,112]
8048         bl      NandcSetDdrPara
8049         mov     w1, w26
8050         mov     w0, w24
8051         mov     x2, x25
8052         mov     x3, x23
8053         bl      FlashReadRawPage
8054         add     w1, w21, 1
8055         ldr     x6, [x29,112]
8056         cmp     w0, w1
8057         ldr     x5, [x29,104]
8058         bhi     .L1036
8059         cmp     w0, 2
8060         bhi     .L1046
8061         add     w20, w20, 1
8062         cmp     w20, 9
8063         bls     .L1046
8064         sub     w19, w22, w20
8065         mov     w21, w0
8066         mov     w28, 0
8067         b       .L1038
8068 .L1036:
8069         cmp     w6, w20
8070         bcs     .L1047
8071         cmp     w20, 7
8072         sub     w5, w19, w20
8073         bhi     .L1048
8074         mov     w6, w20
8075         b       .L1047
8076 .L1046:
8077         mov     x23, 0
8078         mov     w19, w22
8079         mov     w21, w0
8080         mov     w28, 0
8081         mov     x25, x23
8082         b       .L1037
8083 .L1047:
8084         mov     w20, 0
8085 .L1037:
8086         add     w22, w22, 2
8087         cmp     w22, 69
8088         bls     .L1040
8089 .L1038:
8090         cmp     w6, w20
8091         csel    w19, w19, w5, cc
8092         b       .L1039
8093 .L1048:
8094         mov     w19, w5
8095 .L1039:
8096         cbz     w19, .L1041
8097         adrp    x0, .LC86
8098         mov     w1, w19
8099         add     x0, x0, :lo12:.LC86
8100         bl      printk
8101         mov     w0, w19
8102         bl      NandcSetDdrPara
8103 .L1041:
8104         cbz     w28, .L1034
8105         adrp    x0, .LC87
8106         mov     w1, w24
8107         add     x0, x0, :lo12:.LC87
8108         mov     w2, w26
8109         bl      printk
8110         cbz     w27, .L1042
8111         ldr     w0, [x29,124]
8112         lsr     w0, w0, 8
8113         bl      NandcSetDdrPara
8114 .L1034:
8115         mov     w0, w21
8116         ldp     x19, x20, [sp,16]
8117         ldp     x21, x22, [sp,32]
8118         ldp     x23, x24, [sp,48]
8119         ldp     x25, x26, [sp,64]
8120         ldp     x27, x28, [sp,80]
8121         ldp     x29, x30, [sp], 128
8122         ret
8123         .size   FlashDdrTunningRead, .-FlashDdrTunningRead
8124         .align  2
8125         .global FlashReadPage
8126         .type   FlashReadPage, %function
8127 FlashReadPage:
8128         stp     x29, x30, [sp, -80]!
8129         add     x29, sp, 0
8130         stp     x19, x20, [sp,16]
8131         uxtb    w20, w0
8132         str     x25, [sp,64]
8133         mov     w0, w20
8134         stp     x23, x24, [sp,48]
8135         stp     x21, x22, [sp,32]
8136         mov     x24, x2
8137         mov     w22, w1
8138         mov     x23, x3
8139         bl      FlashReadRawPage
8140         cmn     w0, #1
8141         mov     w19, w0
8142         bne     .L1064
8143         adrp    x21, :got:gNandRandomizer
8144         ldr     x21, [x21, #:got_lo12:gNandRandomizer]
8145         ldrb    w25, [x21]
8146         cbnz    w25, .L1065
8147 .L1067:
8148         adrp    x0, :got:gFlashToggleModeEn
8149         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
8150         ldrb    w0, [x0]
8151         cbz     w0, .L1064
8152         b       .L1082
8153 .L1065:
8154         mov     w0, w20
8155         mov     w1, w22
8156         mov     x2, x24
8157         mov     x3, x23
8158         strb    wzr, [x21]
8159         bl      FlashReadRawPage
8160         strb    w25, [x21]
8161         cmn     w0, #1
8162         beq     .L1067
8163         mov     w19, w0
8164         b       .L1064
8165 .L1082:
8166         adrp    x0, :got:gpNandc
8167         mov     w1, w22
8168         mov     x2, x24
8169         mov     x3, x23
8170         mov     w4, 1
8171         ldr     x0, [x0, #:got_lo12:gpNandc]
8172         ldr     x0, [x0]
8173         ldr     w21, [x0,304]
8174         mov     w0, w20
8175         bl      FlashDdrTunningRead
8176         cmn     w0, #1
8177         mov     w19, w0
8178         beq     .L1068
8179         adrp    x1, :got:gNandFlashEccBits
8180         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
8181         ldrb    w0, [x1]
8182         cmp     w19, w0, lsr 1
8183         bls     .L1064
8184 .L1068:
8185         lsr     w0, w21, 8
8186         bl      NandcSetDdrPara
8187 .L1064:
8188         adrp    x0, :got:gpReadRetrial
8189         cmn     w19, #1
8190         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
8191         ldr     x4, [x0]
8192         bne     .L1069
8193         cbz     x4, .L1069
8194         mov     w1, w22
8195         mov     x2, x24
8196         mov     x3, x23
8197         mov     w0, w20
8198         blr     x4
8199         mov     w19, w0
8200         adrp    x0, .LC88
8201         mov     w1, w19
8202         add     x0, x0, :lo12:.LC88
8203         mov     w2, w20
8204         mov     w3, w22
8205         bl      printk
8206 .L1069:
8207         mov     w0, w19
8208         ldr     x25, [sp,64]
8209         ldp     x19, x20, [sp,16]
8210         ldp     x21, x22, [sp,32]
8211         ldp     x23, x24, [sp,48]
8212         ldp     x29, x30, [sp], 80
8213         ret
8214         .size   FlashReadPage, .-FlashReadPage
8215         .align  2
8216         .global FlashDdrParaScan
8217         .type   FlashDdrParaScan, %function
8218 FlashDdrParaScan:
8219         stp     x29, x30, [sp, -48]!
8220         add     x29, sp, 0
8221         stp     x19, x20, [sp,16]
8222         adrp    x19, :got:gFlashInterfaceMode
8223         mov     w20, w1
8224         stp     x21, x22, [sp,32]
8225         uxtb    w21, w0
8226         ldr     x22, [x19, #:got_lo12:gFlashInterfaceMode]
8227         ldrb    w0, [x22]
8228         bl      FlashSetInterfaceMode
8229         ldrb    w0, [x22]
8230         bl      NandcSetMode
8231         mov     x2, 0
8232         mov     w1, w20
8233         mov     x3, x2
8234         mov     w4, w2
8235         mov     w0, w21
8236         bl      FlashDdrTunningRead
8237         mov     w22, w0
8238         mov     x2, 0
8239         mov     w1, w20
8240         mov     w0, w21
8241         mov     x3, x2
8242         bl      FlashReadRawPage
8243         cmn     w0, #1
8244         mov     x1, x19
8245         adrp    x19, :got:gFlashToggleModeEn
8246         beq     .L1087
8247         cmn     w22, #1
8248         bne     .L1084
8249 .L1087:
8250         ldr     x0, [x1, #:got_lo12:gFlashInterfaceMode]
8251         ldrb    w0, [x0]
8252         tbz     x0, 0, .L1084
8253         mov     w0, 1
8254         bl      FlashSetInterfaceMode
8255         mov     w0, 1
8256         bl      NandcSetMode
8257         ldr     x19, [x19, #:got_lo12:gFlashToggleModeEn]
8258         strb    wzr, [x19]
8259         b       .L1086
8260 .L1084:
8261         ldr     x19, [x19, #:got_lo12:gFlashToggleModeEn]
8262         mov     w0, 1
8263         strb    w0, [x19]
8264 .L1086:
8265         mov     w0, 0
8266         ldp     x19, x20, [sp,16]
8267         ldp     x21, x22, [sp,32]
8268         ldp     x29, x30, [sp], 48
8269         ret
8270         .size   FlashDdrParaScan, .-FlashDdrParaScan
8271         .align  2
8272         .global FlashLoadPhyInfo
8273         .type   FlashLoadPhyInfo, %function
8274 FlashLoadPhyInfo:
8275         stp     x29, x30, [sp, -144]!
8276         mov     w0, 60
8277         add     x29, sp, 0
8278         stp     x19, x20, [sp,16]
8279         adrp    x20, :got:gNandParaInfo
8280         mov     w19, 0
8281         strb    w0, [x29,136]
8282         mov     w0, 40
8283         strb    w0, [x29,137]
8284         mov     w0, 24
8285         strb    w0, [x29,138]
8286         mov     w0, 16
8287         stp     x21, x22, [sp,32]
8288         strb    w0, [x29,139]
8289         adrp    x22, :got:gFlashPageBuffer0
8290         ldr     x0, [x20, #:got_lo12:gNandParaInfo]
8291         adrp    x21, :got:gpFlashSaveInfo
8292         stp     x23, x24, [sp,48]
8293         stp     x25, x26, [sp,64]
8294         stp     x27, x28, [sp,80]
8295         ldr     x1, [x22, #:got_lo12:gFlashPageBuffer0]
8296         adrp    x23, :got:gNandFlashInfoBlockAddr
8297         ldrh    w0, [x0,10]
8298         mov     w24, 4
8299         str     w0, [x29,124]
8300         mov     w25, -1
8301         ldr     x0, [x21, #:got_lo12:gpFlashSaveInfo]
8302         adrp    x26, :got:gNandOptPara
8303         ldr     x1, [x1]
8304         adrp    x27, :got:gReadRetryInfo
8305         str     x21, [x29,112]
8306         str     x1, [x0]
8307         ldr     x0, [x23, #:got_lo12:gNandFlashInfoBlockAddr]
8308         str     wzr, [x0]
8309 .L1095:
8310         add     w28, w19, 1
8311         mov     x21, 0
8312 .L1097:
8313         add     x0, x29, 136
8314         ldrb    w0, [x21,x0]
8315         bl      FlashBchSel
8316         ldr     x6, [x22, #:got_lo12:gFlashPageBuffer0]
8317         mov     w0, 0
8318         mov     w1, w19
8319         mov     x3, 0
8320         str     x6, [x29,104]
8321         ldr     x2, [x6]
8322         bl      FlashReadRawPage
8323         cmn     w0, #1
8324         bne     .L1096
8325         ldr     x6, [x29,104]
8326         mov     w0, 0
8327         mov     w1, w28
8328         mov     x3, 0
8329         ldr     x2, [x6]
8330         bl      FlashReadRawPage
8331         cmn     w0, #1
8332         bne     .L1096
8333         add     x21, x21, 1
8334         cmp     x21, 4
8335         beq     .L1098
8336         b       .L1097
8337 .L1099:
8338         ldr     w21, [x0,8]
8339         mov     w1, 2036
8340         add     x0, x0, 12
8341         mov     w25, -1
8342         bl      JSHash
8343         cmp     w21, w0
8344         beq     .L1109
8345 .L1098:
8346         ldr     w0, [x29,124]
8347         subs    w24, w24, #1
8348         add     w19, w19, w0
8349         bne     .L1095
8350         b       .L1106
8351 .L1096:
8352         ldr     x0, [x29,112]
8353         mov     w1, 20036
8354         movk    w1, 0x4e41, lsl 16
8355         ldr     x28, [x0, #:got_lo12:gpFlashSaveInfo]
8356         ldr     x0, [x28]
8357         ldr     w2, [x0]
8358         cmp     w2, w1
8359         bne     .L1098
8360         cbnz    w25, .L1099
8361         ldr     x20, [x20, #:got_lo12:gNandParaInfo]
8362         adrp    x0, :got:gNandFlashIdbBlockAddr
8363         ldrh    w1, [x20,10]
8364         ldr     x0, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
8365         udiv    w19, w19, w1
8366         add     w19, w19, 1
8367         str     w19, [x0]
8368         b       .L1106
8369 .L1109:
8370         ldr     x21, [x20, #:got_lo12:gNandParaInfo]
8371         mov     w2, 32
8372         ldr     x1, [x28]
8373         mov     x0, x21
8374         add     x1, x1, 160
8375         bl      ftl_memcpy
8376         ldr     x1, [x28]
8377         mov     w2, 32
8378         ldr     x0, [x26, #:got_lo12:gNandOptPara]
8379         add     x1, x1, 192
8380         bl      ftl_memcpy
8381         ldr     x1, [x28]
8382         mov     w2, 852
8383         ldr     x0, [x27, #:got_lo12:gReadRetryInfo]
8384         add     x1, x1, 224
8385         bl      ftl_memcpy
8386         adrp    x1, :got:gFlashToggleModeEn
8387         ldr     x2, [x28]
8388         ldr     x1, [x1, #:got_lo12:gFlashToggleModeEn]
8389         ldr     w0, [x2,1076]
8390         strb    w0, [x1]
8391         ldrh    w1, [x21,10]
8392         ldr     x0, [x23, #:got_lo12:gNandFlashInfoBlockAddr]
8393         udiv    w1, w19, w1
8394         str     w19, [x0]
8395         adrp    x0, :got:gNandFlashIdbBlockAddr
8396         add     w3, w1, 1
8397         ldr     x0, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
8398         cbz     w1, .L1101
8399         str     w3, [x0]
8400         b       .L1102
8401 .L1101:
8402         mov     w1, 2
8403         str     w1, [x0]
8404 .L1102:
8405         adrp    x0, :got:gNandIDBResBlkNumSaveInFlash
8406         ldrh    w1, [x2,14]
8407         mov     w25, 0
8408         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNumSaveInFlash]
8409         strb    w1, [x0]
8410         b       .L1098
8411 .L1106:
8412         mov     w0, w25
8413         ldp     x19, x20, [sp,16]
8414         ldp     x21, x22, [sp,32]
8415         ldp     x23, x24, [sp,48]
8416         ldp     x25, x26, [sp,64]
8417         ldp     x27, x28, [sp,80]
8418         ldp     x29, x30, [sp], 144
8419         ret
8420         .size   FlashLoadPhyInfo, .-FlashLoadPhyInfo
8421         .align  2
8422         .global ToshibaReadRetrial
8423         .type   ToshibaReadRetrial, %function
8424 ToshibaReadRetrial:
8425         stp     x29, x30, [sp, -96]!
8426         add     x29, sp, 0
8427         stp     x23, x24, [sp,48]
8428         uxtb    w23, w0
8429         mov     w0, w23
8430         stp     x19, x20, [sp,16]
8431         stp     x25, x26, [sp,64]
8432         stp     x21, x22, [sp,32]
8433         stp     x27, x28, [sp,80]
8434         mov     x26, x2
8435         mov     w27, w1
8436         mov     x25, x3
8437         bl      NandcWaitFlashReady
8438         mov     w0, w23
8439         adrp    x20, :got:g_retryMode
8440         mov     w22, 0
8441         bl      NandcGetChipIf
8442         mov     x19, x0
8443         ldr     x0, [x20, #:got_lo12:g_retryMode]
8444         ldrb    w0, [x0]
8445         sub     w0, w0, #67
8446         uxtb    w0, w0
8447         cmp     w0, 1
8448         bls     .L1111
8449         adrp    x0, :got:gFlashToggleModeEn
8450         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
8451         ldrb    w0, [x0]
8452         cbz     w0, .L1112
8453         mov     w0, w22
8454         mov     w22, 1
8455         bl      NandcSetDdrMode
8456 .L1112:
8457         mov     w0, 92
8458         str     w0, [x19,8]
8459         mov     w0, 197
8460         str     w0, [x19,8]
8461 .L1111:
8462         mov     w21, 1
8463         mov     w24, -1
8464 .L1113:
8465         adrp    x0, :got:g_maxRetryCount
8466         ldr     x0, [x0, #:got_lo12:g_maxRetryCount]
8467         ldrb    w0, [x0]
8468         add     w0, w0, 1
8469         cmp     w21, w0
8470         bcs     .L1138
8471         ldr     x0, [x20, #:got_lo12:g_retryMode]
8472         mov     w1, w21
8473         ldrb    w0, [x0]
8474         sub     w0, w0, #67
8475         uxtb    w0, w0
8476         cmp     w0, 1
8477         mov     x0, x19
8478         bhi     .L1114
8479         bl      SandiskSetRRPara
8480         b       .L1115
8481 .L1114:
8482         bl      ToshibaSetRRPara
8483 .L1115:
8484         ldr     x0, [x20, #:got_lo12:g_retryMode]
8485         ldrb    w0, [x0]
8486         cmp     w0, 34
8487         bne     .L1116
8488         adrp    x0, :got:g_maxRetryCount
8489         ldr     x0, [x0, #:got_lo12:g_maxRetryCount]
8490         ldrb    w0, [x0]
8491         sub     w0, w0, #3
8492         cmp     w21, w0
8493         bne     .L1116
8494         mov     w0, 179
8495         str     w0, [x19,8]
8496 .L1116:
8497         mov     w0, 38
8498         str     w0, [x19,8]
8499         mov     w0, 93
8500         str     w0, [x19,8]
8501         cbz     w22, .L1117
8502         mov     w0, 4
8503         bl      NandcSetDdrMode
8504         mov     w0, w23
8505         mov     w1, w27
8506         mov     x2, x26
8507         mov     x3, x25
8508         bl      FlashReadRawPage
8509         mov     w28, w0
8510         mov     w0, 0
8511         bl      NandcSetDdrMode
8512         b       .L1118
8513 .L1117:
8514         mov     w0, w23
8515         mov     w1, w27
8516         mov     x2, x26
8517         mov     x3, x25
8518         bl      FlashReadRawPage
8519         mov     w28, w0
8520 .L1118:
8521         cmn     w28, #1
8522         beq     .L1119
8523         adrp    x0, :got:gNandFlashEccBits
8524         cmn     w24, #1
8525         csel    w24, w24, w28, ne
8526         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8527         ldrb    w0, [x0]
8528         add     w0, w0, w0, lsl 1
8529         cmp     w28, w0, lsr 2
8530         bcc     .L1121
8531         mov     x25, 0
8532         mov     x26, x25
8533 .L1119:
8534         add     w21, w21, 1
8535         b       .L1113
8536 .L1138:
8537         mov     w28, w24
8538 .L1121:
8539         ldr     x20, [x20, #:got_lo12:g_retryMode]
8540         mov     w1, 0
8541         ldrb    w0, [x20]
8542         sub     w0, w0, #67
8543         uxtb    w0, w0
8544         cmp     w0, 1
8545         mov     x0, x19
8546         bhi     .L1123
8547         bl      SandiskSetRRPara
8548         b       .L1124
8549 .L1123:
8550         bl      ToshibaSetRRPara
8551 .L1124:
8552         mov     w0, 255
8553         str     w0, [x19,8]
8554         adrp    x0, :got:gNandFlashEccBits
8555         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8556         ldrb    w0, [x0]
8557         add     w0, w0, w0, lsl 1
8558         cmp     w28, w0, lsr 2
8559         bcc     .L1125
8560         cmn     w28, #1
8561         mov     w0, 256
8562         csel    w28, w28, w0, eq
8563 .L1125:
8564         mov     w0, w23
8565         bl      NandcWaitFlashReady
8566         cbz     w22, .L1126
8567         mov     w0, 4
8568         bl      NandcSetDdrMode
8569 .L1126:
8570         mov     w0, w28
8571         ldp     x19, x20, [sp,16]
8572         ldp     x21, x22, [sp,32]
8573         ldp     x23, x24, [sp,48]
8574         ldp     x25, x26, [sp,64]
8575         ldp     x27, x28, [sp,80]
8576         ldp     x29, x30, [sp], 96
8577         ret
8578         .size   ToshibaReadRetrial, .-ToshibaReadRetrial
8579         .align  2
8580         .global SamsungReadRetrial
8581         .type   SamsungReadRetrial, %function
8582 SamsungReadRetrial:
8583         stp     x29, x30, [sp, -96]!
8584         add     x29, sp, 0
8585         stp     x21, x22, [sp,32]
8586         uxtb    w21, w0
8587         str     x27, [sp,80]
8588         mov     w0, w21
8589         mov     x22, x3
8590         stp     x19, x20, [sp,16]
8591         stp     x23, x24, [sp,48]
8592         stp     x25, x26, [sp,64]
8593         mov     w23, w1
8594         mov     x25, x2
8595         bl      NandcWaitFlashReady
8596         mov     w20, 1
8597         mov     w0, w21
8598         mov     w19, -1
8599         adrp    x26, :got:g_maxRetryCount
8600         adrp    x27, :got:gNandFlashEccBits
8601         bl      NandcGetChipIf
8602         mov     x24, x0
8603 .L1140:
8604         ldr     x0, [x26, #:got_lo12:g_maxRetryCount]
8605         ldrb    w4, [x0]
8606         add     w4, w4, 1
8607         cmp     w20, w4
8608         bcs     .L1143
8609         mov     x0, x24
8610         mov     w1, w20
8611         bl      SamsungSetRRPara
8612         mov     w0, w21
8613         mov     w1, w23
8614         mov     x2, x25
8615         mov     x3, x22
8616         bl      FlashReadRawPage
8617         cmn     w0, #1
8618         mov     w4, w0
8619         beq     .L1141
8620         cmn     w19, #1
8621         csel    w19, w19, w0, ne
8622         ldr     x0, [x27, #:got_lo12:gNandFlashEccBits]
8623         ldrb    w2, [x0]
8624         add     w2, w2, w2, lsl 1
8625         cmp     w4, w2, lsr 2
8626         bcc     .L1146
8627         mov     x22, 0
8628         mov     x25, x22
8629 .L1141:
8630         add     w20, w20, 1
8631         b       .L1140
8632 .L1146:
8633         mov     w19, w4
8634 .L1143:
8635         mov     x0, x24
8636         mov     w1, 0
8637         bl      SamsungSetRRPara
8638         adrp    x0, :got:gNandFlashEccBits
8639         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8640         ldrb    w0, [x0]
8641         add     w0, w0, w0, lsl 1
8642         cmp     w19, w0, lsr 2
8643         bcc     .L1145
8644         cmn     w19, #1
8645         mov     w0, 256
8646         csel    w19, w19, w0, eq
8647 .L1145:
8648         mov     w0, w19
8649         ldr     x27, [sp,80]
8650         ldp     x19, x20, [sp,16]
8651         ldp     x21, x22, [sp,32]
8652         ldp     x23, x24, [sp,48]
8653         ldp     x25, x26, [sp,64]
8654         ldp     x29, x30, [sp], 96
8655         ret
8656         .size   SamsungReadRetrial, .-SamsungReadRetrial
8657         .align  2
8658         .global MicronReadRetrial
8659         .type   MicronReadRetrial, %function
8660 MicronReadRetrial:
8661         stp     x29, x30, [sp, -96]!
8662         add     x29, sp, 0
8663         stp     x21, x22, [sp,32]
8664         uxtb    w22, w0
8665         mov     w21, 0
8666         mov     w0, w22
8667         stp     x19, x20, [sp,16]
8668         stp     x23, x24, [sp,48]
8669         stp     x25, x26, [sp,64]
8670         stp     x27, x28, [sp,80]
8671         mov     w25, w1
8672         mov     x24, x2
8673         mov     x23, x3
8674         bl      NandcWaitFlashReady
8675         mov     w0, w22
8676         mov     w20, -1
8677         mov     w26, 239
8678         mov     w27, 137
8679         bl      NandcGetChipIf
8680         adrp    x28, :got:gNandFlashEccBits
8681         mov     x19, x0
8682 .L1156:
8683         str     w26, [x19,8]
8684         mov     w0, 200
8685         str     w27, [x19,4]
8686         add     w21, w21, 1
8687         bl      NandcDelayns
8688         str     w21, [x19]
8689         str     wzr, [x19]
8690         mov     w0, w22
8691         str     wzr, [x19]
8692         mov     w1, w25
8693         str     wzr, [x19]
8694         mov     x2, x24
8695         mov     x3, x23
8696         bl      FlashReadRawPage
8697         cmn     w0, #1
8698         beq     .L1153
8699         ldr     x1, [x28, #:got_lo12:gNandFlashEccBits]
8700         cmn     w20, #1
8701         csel    w20, w20, w0, ne
8702         ldrb    w2, [x1]
8703         add     w2, w2, w2, lsl 1
8704         cmp     w0, w2, lsr 2
8705         bcc     .L1158
8706         mov     x23, 0
8707         mov     x24, x23
8708 .L1153:
8709         cmp     w21, 7
8710         bne     .L1156
8711         b       .L1155
8712 .L1158:
8713         mov     w20, w0
8714 .L1155:
8715         mov     w0, 239
8716         str     w0, [x19,8]
8717         mov     w0, 137
8718         str     w0, [x19,4]
8719         mov     w0, 200
8720         bl      NandcDelayns
8721         str     wzr, [x19]
8722         str     wzr, [x19]
8723         adrp    x0, :got:gNandFlashEccBits
8724         str     wzr, [x19]
8725         str     wzr, [x19]
8726         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8727         ldrb    w0, [x0]
8728         add     w0, w0, w0, lsl 1
8729         cmp     w20, w0, lsr 2
8730         bcc     .L1157
8731         cmn     w20, #1
8732         mov     w0, 256
8733         csel    w20, w20, w0, eq
8734 .L1157:
8735         mov     w0, w20
8736         ldp     x19, x20, [sp,16]
8737         ldp     x21, x22, [sp,32]
8738         ldp     x23, x24, [sp,48]
8739         ldp     x25, x26, [sp,64]
8740         ldp     x27, x28, [sp,80]
8741         ldp     x29, x30, [sp], 96
8742         ret
8743         .size   MicronReadRetrial, .-MicronReadRetrial
8744         .align  2
8745         .global HynixReadRetrial
8746         .type   HynixReadRetrial, %function
8747 HynixReadRetrial:
8748         stp     x29, x30, [sp, -112]!
8749         add     x29, sp, 0
8750         stp     x21, x22, [sp,32]
8751         adrp    x21, :got:gReadRetryInfo
8752         uxtb    x22, w0
8753         stp     x23, x24, [sp,48]
8754         stp     x27, x28, [sp,80]
8755         ldr     x0, [x21, #:got_lo12:gReadRetryInfo]
8756         mov     w27, w1
8757         stp     x19, x20, [sp,16]
8758         stp     x25, x26, [sp,64]
8759         add     x1, x0, x22
8760         mov     x26, x2
8761         ldrb    w25, [x0,2]
8762         mov     w0, w22
8763         mov     x24, x3
8764         mov     x23, x22
8765         ldrb    w20, [x1,12]
8766         bl      NandcWaitFlashReady
8767         mov     w28, 0
8768         mov     w19, -1
8769         adrp    x4, :got:gNandFlashEccBits
8770 .L1166:
8771         cmp     w28, w25
8772         bcs     .L1170
8773         add     w20, w20, 1
8774         ldr     x2, [x21, #:got_lo12:gReadRetryInfo]
8775         mov     w0, w23
8776         str     x4, [x29,104]
8777         uxtb    w20, w20
8778         add     x2, x2, 4
8779         cmp     w20, w25
8780         ldrb    w1, [x2,-3]
8781         csel    w20, w20, wzr, cc
8782         mov     w3, w20
8783         bl      HynixSetRRPara
8784         mov     w0, w23
8785         mov     w1, w27
8786         mov     x2, x26
8787         mov     x3, x24
8788         bl      FlashReadRawPage
8789         cmn     w0, #1
8790         ldr     x4, [x29,104]
8791         beq     .L1168
8792         ldr     x1, [x4, #:got_lo12:gNandFlashEccBits]
8793         cmn     w19, #1
8794         csel    w19, w19, w0, ne
8795         ldrb    w1, [x1]
8796         add     w1, w1, w1, lsl 1
8797         cmp     w0, w1, lsr 2
8798         bcc     .L1173
8799         mov     x24, 0
8800         mov     x26, x24
8801 .L1168:
8802         add     w28, w28, 1
8803         b       .L1166
8804 .L1173:
8805         mov     w19, w0
8806 .L1170:
8807         ldr     x21, [x21, #:got_lo12:gReadRetryInfo]
8808         adrp    x0, :got:gNandFlashEccBits
8809         add     x21, x21, x22
8810         strb    w20, [x21,12]
8811         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8812         ldrb    w0, [x0]
8813         add     w0, w0, w0, lsl 1
8814         cmp     w19, w0, lsr 2
8815         bcc     .L1172
8816         cmn     w19, #1
8817         mov     w0, 256
8818         csel    w19, w19, w0, eq
8819 .L1172:
8820         mov     w0, w19
8821         ldp     x19, x20, [sp,16]
8822         ldp     x21, x22, [sp,32]
8823         ldp     x23, x24, [sp,48]
8824         ldp     x25, x26, [sp,64]
8825         ldp     x27, x28, [sp,80]
8826         ldp     x29, x30, [sp], 112
8827         ret
8828         .size   HynixReadRetrial, .-HynixReadRetrial
8829         .align  2
8830         .global FlashProgPage
8831         .type   FlashProgPage, %function
8832 FlashProgPage:
8833         stp     x29, x30, [sp, -64]!
8834         mov     x4, x3
8835         add     x29, sp, 0
8836         stp     x19, x20, [sp,16]
8837         uxtb    w19, w0
8838         adrp    x0, :got:gNandParaInfo
8839         stp     x21, x22, [sp,32]
8840         mov     w20, w1
8841         mov     x22, x2
8842         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
8843         ldrb    w21, [x0,9]
8844         cbnz    w19, .L1180
8845         adrp    x0, :got:gNandIDBResBlkNum
8846         adrp    x1, :got:gBlockPageAlignSize
8847         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
8848         ldr     x1, [x1, #:got_lo12:gBlockPageAlignSize]
8849         ldrb    w0, [x0]
8850         ldr     w1, [x1]
8851         mul     w0, w0, w1
8852         cmp     w20, w0
8853         bcs     .L1180
8854         adrp    x0, :got:g_slc2KBNand
8855         ldr     x0, [x0, #:got_lo12:g_slc2KBNand]
8856         ldrb    w0, [x0]
8857         cbnz    w0, .L1181
8858         sub     w21, w21, #2
8859         b       .L1180
8860 .L1181:
8861         mov     w21, 4
8862 .L1180:
8863         mov     w0, w19
8864         str     x4, [x29,56]
8865         bl      NandcWaitFlashReady
8866         mov     w0, w19
8867         bl      NandcFlashCs
8868         mov     w0, w19
8869         mov     w1, w20
8870         bl      FlashProgFirstCmd
8871         ldr     x4, [x29,56]
8872         mov     w2, w21
8873         mov     x3, x22
8874         mov     w0, w19
8875         mov     w1, 1
8876         bl      NandcXferData
8877         mov     w1, w20
8878         mov     w0, w19
8879         bl      FlashProgSecondCmd
8880         mov     w0, w19
8881         bl      NandcWaitFlashReady
8882         mov     w1, w20
8883         mov     w0, w19
8884         bl      FlashReadStatus
8885         mov     w20, w0
8886         mov     w0, w19
8887         bl      NandcFlashDeCs
8888         and     w0, w20, 1
8889         ldp     x19, x20, [sp,16]
8890         ldp     x21, x22, [sp,32]
8891         ldp     x29, x30, [sp], 64
8892         ret
8893         .size   FlashProgPage, .-FlashProgPage
8894         .align  2
8895         .global FlashSavePhyInfo
8896         .type   FlashSavePhyInfo, %function
8897 FlashSavePhyInfo:
8898         stp     x29, x30, [sp, -112]!
8899         add     x29, sp, 0
8900         stp     x23, x24, [sp,48]
8901         adrp    x23, :got:gFlashPageBuffer0
8902         adrp    x24, :got:gFlashPageBuffer1
8903         stp     x21, x22, [sp,32]
8904         adrp    x22, :got:gpFlashSaveInfo
8905         stp     x19, x20, [sp,16]
8906         ldr     x20, [x23, #:got_lo12:gFlashPageBuffer0]
8907         ldr     x19, [x22, #:got_lo12:gpFlashSaveInfo]
8908         stp     x25, x26, [sp,64]
8909         stp     x27, x28, [sp,80]
8910         adrp    x25, :got:gBlockPageAlignSize
8911         adrp    x26, :got:gNandFlashIdbBlockAddr
8912         ldr     x0, [x20]
8913         adrp    x27, :got:gNandFlashInfoBlockAddr
8914         str     x0, [x19]
8915         adrp    x0, :got:gNandFlashIDBEccBits
8916         ldr     x0, [x0, #:got_lo12:gNandFlashIDBEccBits]
8917         ldrb    w0, [x0]
8918         bl      FlashBchSel
8919         ldr     x0, [x20]
8920         mov     w1, 0
8921         mov     w2, 2048
8922         bl      ftl_memset
8923         ldr     x1, [x19]
8924         mov     w0, 20036
8925         movk    w0, 0x4e41, lsl 16
8926         mov     w2, 32
8927         str     w0, [x1]
8928         adrp    x1, :got:gNandMaxDie
8929         ldr     x0, [x19]
8930         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
8931         add     x0, x0, 16
8932         ldrb    w1, [x1]
8933         strh    w1, [x0,-4]
8934         adrp    x1, :got:gNandIDBResBlkNum
8935         ldr     x1, [x1, #:got_lo12:gNandIDBResBlkNum]
8936         ldrb    w1, [x1]
8937         strh    w1, [x0,-2]
8938         adrp    x1, :got:gFlashToggleModeEn
8939         ldr     x1, [x1, #:got_lo12:gFlashToggleModeEn]
8940         ldrb    w1, [x1]
8941         str     w1, [x0,1060]
8942         adrp    x1, :got:IDByte
8943         ldr     x1, [x1, #:got_lo12:IDByte]
8944         bl      ftl_memcpy
8945         adrp    x1, :got:DieCsIndex
8946         ldr     x0, [x19]
8947         mov     w2, 8
8948         add     x0, x0, 80
8949         ldr     x1, [x1, #:got_lo12:DieCsIndex]
8950         bl      ftl_memcpy
8951         adrp    x1, :got:DieAddrs
8952         ldr     x0, [x19]
8953         mov     w2, 32
8954         add     x0, x0, 96
8955         ldr     x1, [x1, #:got_lo12:DieAddrs]
8956         bl      ftl_memcpy
8957         adrp    x1, :got:gNandParaInfo
8958         ldr     x0, [x19]
8959         mov     w2, 32
8960         add     x0, x0, 160
8961         ldr     x1, [x1, #:got_lo12:gNandParaInfo]
8962         bl      ftl_memcpy
8963         adrp    x1, :got:gNandOptPara
8964         ldr     x0, [x19]
8965         mov     w2, 32
8966         add     x0, x0, 192
8967         ldr     x1, [x1, #:got_lo12:gNandOptPara]
8968         bl      ftl_memcpy
8969         adrp    x1, :got:gReadRetryInfo
8970         ldr     x0, [x19]
8971         mov     w2, 852
8972         add     x0, x0, 224
8973         ldr     x1, [x1, #:got_lo12:gReadRetryInfo]
8974         bl      ftl_memcpy
8975         ldr     x20, [x19]
8976         mov     w1, 2036
8977         add     x0, x20, 12
8978         bl      JSHash
8979         str     w0, [x20,8]
8980         ldr     x0, [x19]
8981         mov     w1, 1592
8982         str     w1, [x0,4]
8983         ldr     x0, [x24, #:got_lo12:gFlashPageBuffer1]
8984         ldr     x0, [x0]
8985         str     x0, [x19]
8986         mov     w19, 0
8987         mov     w20, w19
8988 .L1185:
8989         ldr     x21, [x25, #:got_lo12:gBlockPageAlignSize]
8990         mov     w2, 0
8991         mov     w0, 0
8992         ldr     w1, [x21]
8993         mul     w1, w20, w1
8994         bl      FlashEraseBlock
8995         ldr     x28, [x23, #:got_lo12:gFlashPageBuffer0]
8996         ldr     w1, [x21]
8997         mov     x3, 0
8998         mov     w0, 0
8999         ldr     x2, [x28]
9000         mul     w1, w20, w1
9001         bl      FlashProgPage
9002         ldr     w1, [x21]
9003         mov     x3, 0
9004         ldr     x2, [x28]
9005         mov     w0, 0
9006         add     w28, w20, 1
9007         mul     w1, w20, w1
9008         add     w1, w1, 1
9009         bl      FlashProgPage
9010         ldr     w1, [x21]
9011         mov     w0, 0
9012         ldr     x2, [x24, #:got_lo12:gFlashPageBuffer1]
9013         mov     x3, 0
9014         mul     w1, w20, w1
9015         ldr     x2, [x2]
9016         bl      FlashReadRawPage
9017         cmn     w0, #1
9018         beq     .L1186
9019         ldr     x0, [x22, #:got_lo12:gpFlashSaveInfo]
9020         mov     w1, 20036
9021         movk    w1, 0x4e41, lsl 16
9022         ldr     x0, [x0]
9023         ldr     w2, [x0]
9024         cmp     w2, w1
9025         bne     .L1186
9026         ldr     w2, [x0,8]
9027         mov     w1, 2036
9028         add     x0, x0, 12
9029         str     x2, [x29,104]
9030         bl      JSHash
9031         ldr     x2, [x29,104]
9032         cmp     w2, w0
9033         bne     .L1186
9034         ldr     x0, [x26, #:got_lo12:gNandFlashIdbBlockAddr]
9035         str     w28, [x0]
9036         ldr     w0, [x21]
9037         ldr     x1, [x27, #:got_lo12:gNandFlashInfoBlockAddr]
9038         mul     w20, w20, w0
9039         str     w20, [x1]
9040         cbnz    w19, .L1187
9041         mov     w19, 1
9042 .L1186:
9043         cmp     w28, 4
9044         mov     w20, w28
9045         bne     .L1185
9046         eor     w0, w19, 1
9047         neg     w0, w0
9048         b       .L1184
9049 .L1187:
9050         mov     w0, 0
9051 .L1184:
9052         ldp     x19, x20, [sp,16]
9053         ldp     x21, x22, [sp,32]
9054         ldp     x23, x24, [sp,48]
9055         ldp     x25, x26, [sp,64]
9056         ldp     x27, x28, [sp,80]
9057         ldp     x29, x30, [sp], 112
9058         ret
9059         .size   FlashSavePhyInfo, .-FlashSavePhyInfo
9060         .align  2
9061         .global FlashReadIdbDataRaw
9062         .type   FlashReadIdbDataRaw, %function
9063 FlashReadIdbDataRaw:
9064         stp     x29, x30, [sp, -128]!
9065         mov     w1, 60
9066         mov     w2, 2048
9067         add     x29, sp, 0
9068         stp     x23, x24, [sp,48]
9069         stp     x25, x26, [sp,64]
9070         strb    w1, [x29,120]
9071         mov     w1, 40
9072         strb    w1, [x29,121]
9073         mov     w1, 24
9074         strb    w1, [x29,122]
9075         mov     w1, 16
9076         strb    w1, [x29,123]
9077         adrp    x1, :got:gNandFlashEccBits
9078         stp     x19, x20, [sp,16]
9079         stp     x21, x22, [sp,32]
9080         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
9081         adrp    x21, .LC89
9082         stp     x27, x28, [sp,80]
9083         mov     w19, 2
9084         mov     w28, -1
9085         ldrb    w22, [x1]
9086         adrp    x24, :got:gNandIDBResBlkNum
9087         mov     w1, 0
9088         adrp    x25, :got:gBlockPageAlignSize
9089         adrp    x26, :got:gFlashPageBuffer0
9090         add     x21, x21, :lo12:.LC89
9091         mov     x23, x0
9092         bl      ftl_memset
9093 .L1193:
9094         ldr     x0, [x24, #:got_lo12:gNandIDBResBlkNum]
9095         ldrb    w0, [x0]
9096         cmp     w19, w0
9097         bcs     .L1197
9098         mov     x27, 0
9099 .L1195:
9100         add     x0, x29, 120
9101         ldrb    w4, [x27,x0]
9102         str     x4, [x29,104]
9103         mov     w0, w4
9104         bl      FlashBchSel
9105         ldr     x20, [x26, #:got_lo12:gFlashPageBuffer0]
9106         ldr     x0, [x25, #:got_lo12:gBlockPageAlignSize]
9107         mov     x3, 0
9108         ldr     x2, [x20]
9109         ldr     w1, [x0]
9110         mov     w0, 0
9111         mul     w1, w19, w1
9112         bl      FlashReadRawPage
9113         cmn     w0, #1
9114         ldr     x4, [x29,104]
9115         bne     .L1194
9116         add     x27, x27, 1
9117         cmp     x27, 4
9118         bne     .L1195
9119         b       .L1196
9120 .L1194:
9121         ldr     x0, [x20]
9122         ldr     w1, [x0]
9123         mov     w0, 35899
9124         movk    w0, 0xfcdc, lsl 16
9125         cmp     w1, w0
9126         bne     .L1196
9127         mov     w1, w4
9128         mov     x0, x21
9129         bl      printk
9130         ldr     x1, [x20]
9131         mov     x0, x23
9132         mov     w2, 2048
9133         bl      ftl_memcpy
9134         adrp    x0, :got:gNandIDBResBlkNum
9135         ldr     x1, [x20]
9136         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
9137         ldr     w1, [x1,512]
9138         strb    w1, [x0]
9139         adrp    x1, :got:gNandFlashIdbBlockAddr
9140         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
9141         ldr     w0, [x1]
9142         cmp     w0, w19
9143         bls     .L1199
9144         mov     w28, 0
9145         str     w19, [x1]
9146         bl      FlashSavePhyInfo
9147 .L1196:
9148         add     w19, w19, 1
9149         b       .L1193
9150 .L1199:
9151         mov     w28, 0
9152 .L1197:
9153         mov     w0, w22
9154         bl      FlashBchSel
9155         mov     w0, w28
9156         ldp     x19, x20, [sp,16]
9157         ldp     x21, x22, [sp,32]
9158         ldp     x23, x24, [sp,48]
9159         ldp     x25, x26, [sp,64]
9160         ldp     x27, x28, [sp,80]
9161         ldp     x29, x30, [sp], 128
9162         ret
9163         .size   FlashReadIdbDataRaw, .-FlashReadIdbDataRaw
9164         .align  2
9165         .global FlashInit
9166         .type   FlashInit, %function
9167 FlashInit:
9168         stp     x29, x30, [sp, -112]!
9169         add     x29, sp, 0
9170         stp     x19, x20, [sp,16]
9171         mov     x19, x0
9172         mov     w0, 32768
9173         stp     x21, x22, [sp,32]
9174         stp     x23, x24, [sp,48]
9175         stp     x27, x28, [sp,80]
9176         stp     x25, x26, [sp,64]
9177         bl      ftl_malloc
9178         adrp    x20, :got:gNandIDBResBlkNum
9179         adrp    x1, :got:gFlashPageBuffer0
9180         adrp    x24, :got:gNandIDBResBlkNumSaveInFlash
9181         adrp    x23, :got:gFlashToggleModeEn
9182         adrp    x22, :got:g_slc2KBNand
9183         adrp    x25, :got:gNandFlashIDBEccBits
9184         adrp    x21, :got:IDByte
9185         ldr     x1, [x1, #:got_lo12:gFlashPageBuffer0]
9186         adrp    x27, .LC90
9187         mov     w28, 0
9188         add     x27, x27, :lo12:.LC90
9189         str     x0, [x1]
9190         mov     w0, 32768
9191         bl      ftl_malloc
9192         adrp    x1, :got:gFlashPageBuffer1
9193         ldr     x1, [x1, #:got_lo12:gFlashPageBuffer1]
9194         str     x0, [x1]
9195         mov     w0, 4096
9196         bl      ftl_malloc
9197         adrp    x1, :got:gFlashSpareBuffer
9198         ldr     x1, [x1, #:got_lo12:gFlashSpareBuffer]
9199         str     x0, [x1]
9200         mov     w0, 32768
9201         bl      ftl_malloc
9202         adrp    x1, :got:gFlashProgCheckBuffer
9203         ldr     x1, [x1, #:got_lo12:gFlashProgCheckBuffer]
9204         str     x0, [x1]
9205         mov     w0, 4096
9206         bl      ftl_malloc
9207         adrp    x1, :got:gFlashProgCheckSpareBuffer
9208         ldr     x1, [x1, #:got_lo12:gFlashProgCheckSpareBuffer]
9209         str     x0, [x1]
9210         mov     w1, 50
9211         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9212         strb    w1, [x0]
9213         ldr     x0, [x24, #:got_lo12:gNandIDBResBlkNumSaveInFlash]
9214         strb    w1, [x0]
9215         adrp    x1, :got:gNandFlashIdbBlockAddr
9216         mov     w0, 128
9217         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
9218         str     wzr, [x1]
9219         adrp    x1, :got:gBlockPageAlignSize
9220         ldr     x1, [x1, #:got_lo12:gBlockPageAlignSize]
9221         str     w0, [x1]
9222         adrp    x1, :got:FlashDdrTunningReadCount
9223         ldr     x0, [x23, #:got_lo12:gFlashToggleModeEn]
9224         strb    wzr, [x0]
9225         ldr     x1, [x1, #:got_lo12:FlashDdrTunningReadCount]
9226         str     wzr, [x1]
9227         mov     w1, 60
9228         ldr     x0, [x22, #:got_lo12:g_slc2KBNand]
9229         strb    wzr, [x0]
9230         ldr     x0, [x25, #:got_lo12:gNandFlashIDBEccBits]
9231         strb    w1, [x0]
9232         mov     x0, x19
9233         bl      NandcInit
9234         ldr     x19, [x21, #:got_lo12:IDByte]
9235         str     x24, [x29,104]
9236 .L1207:
9237         uxtb    w26, w28
9238         mov     w0, w26
9239         bl      FlashReset
9240         mov     w0, w26
9241         bl      NandcGetChipIf
9242         mov     x24, x0
9243         mov     w0, w26
9244         bl      NandcFlashCs
9245         mov     w0, 144
9246         str     w0, [x24,8]
9247         str     wzr, [x24,4]
9248         mov     w0, 200
9249         bl      NandcDelayns
9250         ldr     w0, [x24]
9251         strb    w0, [x19]
9252         ldr     w0, [x24]
9253         strb    w0, [x19,1]
9254         ldr     w0, [x24]
9255         strb    w0, [x19,2]
9256         ldr     w0, [x24]
9257         strb    w0, [x19,3]
9258         ldr     w0, [x24]
9259         strb    w0, [x19,4]
9260         ldr     w0, [x24]
9261         strb    w0, [x19,5]
9262         ldr     w0, [x24]
9263         strb    w0, [x19,6]
9264         ldr     w0, [x24]
9265         strb    w0, [x19,7]
9266         mov     w0, w26
9267         bl      NandcFlashDeCs
9268         ldrb    w2, [x19]
9269         sub     w0, w2, #1
9270         uxtb    w0, w0
9271         cmp     w0, 253
9272         bhi     .L1204
9273         ldrb    w3, [x19,1]
9274         mov     x0, x27
9275         ldrb    w4, [x19,2]
9276         add     w1, w28, 1
9277         ldrb    w5, [x19,3]
9278         ldrb    w6, [x19,4]
9279         ldrb    w7, [x19,5]
9280         bl      printk
9281 .L1204:
9282         cbnz    w28, .L1205
9283         ldr     x1, [x21, #:got_lo12:IDByte]
9284         ldrb    w0, [x1]
9285         sub     w0, w0, #1
9286         uxtb    w0, w0
9287         cmp     w0, 253
9288         bhi     .L1243
9289         ldrb    w0, [x1,1]
9290         cmp     w0, 255
9291         beq     .L1243
9292         bl      FlashCs123Init
9293 .L1205:
9294         add     w28, w28, 1
9295         add     x19, x19, 8
9296         cmp     w28, 4
9297         bne     .L1207
9298         ldr     x0, [x21, #:got_lo12:IDByte]
9299         ldrb    w0, [x0]
9300         cmp     w0, 173
9301         beq     .L1208
9302         adrp    x0, :got:gBootDdrMode
9303         ldr     x0, [x0, #:got_lo12:gBootDdrMode]
9304         ldr     w0, [x0]
9305         bl      NandcSetDdrMode
9306 .L1208:
9307         adrp    x26, :got:gReadRetryInfo
9308         mov     w1, 0
9309         mov     w2, 852
9310         adrp    x19, :got:gpNandParaInfo
9311         adrp    x27, :got:gNandRandomizer
9312         ldr     x0, [x26, #:got_lo12:gReadRetryInfo]
9313         bl      ftl_memset
9314         adrp    x0, :got:gNandParaInfo
9315         ldr     x1, [x19, #:got_lo12:gpNandParaInfo]
9316         mov     x28, x0
9317         ldr     x2, [x0, #:got_lo12:gNandParaInfo]
9318         str     x2, [x1]
9319         ldr     x1, [x27, #:got_lo12:gNandRandomizer]
9320         strb    wzr, [x1]
9321         ldr     x1, [x21, #:got_lo12:IDByte]
9322         ldrb    w2, [x1,1]
9323         cmp     w2, 218
9324         cset    w1, eq
9325         cbnz    w1, .L1244
9326         cmp     w2, 241
9327         bne     .L1209
9328 .L1244:
9329         ldr     x0, [x22, #:got_lo12:g_slc2KBNand]
9330         mov     w2, 1
9331         strb    w2, [x0]
9332         mov     w2, 16
9333         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9334         strb    w2, [x0]
9335         ldr     x25, [x25, #:got_lo12:gNandFlashIDBEccBits]
9336         strb    w2, [x25]
9337         ldr     x0, [x21, #:got_lo12:IDByte]
9338         ldrb    w0, [x0]
9339         cmp     w0, 152
9340         bne     .L1211
9341         mov     w0, 24
9342         strb    w0, [x25]
9343 .L1211:
9344         adrp    x25, :got:gSlcNandParaInfo
9345         cbz     w1, .L1212
9346         ldr     x0, [x25, #:got_lo12:gSlcNandParaInfo]
9347         mov     w1, 2048
9348         strh    w1, [x0,14]
9349 .L1212:
9350         adrp    x0, :got:gNandOptPara
9351         adrp    x1, .LANCHOR2
9352         add     x1, x1, :lo12:.LANCHOR2
9353         mov     w2, 32
9354         add     x1, x1, 32
9355         ldr     x0, [x0, #:got_lo12:gNandOptPara]
9356         bl      ftl_memcpy
9357         ldr     x0, [x28, #:got_lo12:gNandParaInfo]
9358         mov     w2, 32
9359         ldr     x1, [x25, #:got_lo12:gSlcNandParaInfo]
9360         bl      ftl_memcpy
9361 .L1209:
9362         ldr     x0, [x22, #:got_lo12:g_slc2KBNand]
9363         ldrb    w0, [x0]
9364         cbnz    w0, .L1213
9365         bl      FlashLoadPhyInfoInRam
9366         cbnz    w0, .L1215
9367         ldr     x0, [x19, #:got_lo12:gpNandParaInfo]
9368         adrp    x25, :got:gFlashInterfaceMode
9369         ldr     x0, [x0]
9370         ldr     x25, [x25, #:got_lo12:gFlashInterfaceMode]
9371         ldrb    w1, [x0,17]
9372         and     w0, w1, 7
9373         strb    w0, [x25]
9374         tbnz    x1, 0, .L1215
9375         ldr     x1, [x23, #:got_lo12:gFlashToggleModeEn]
9376         mov     w2, 1
9377         strb    w2, [x1]
9378         bl      FlashSetInterfaceMode
9379         ldrb    w0, [x25]
9380         bl      NandcSetMode
9381 .L1215:
9382         bl      FlashLoadPhyInfo
9383         cbz     w0, .L1213
9384         adrp    x0, :got:gBootDdrMode
9385         ldr     x0, [x0, #:got_lo12:gBootDdrMode]
9386         ldr     w0, [x0]
9387         cbz     w0, .L1218
9388         mov     w0, 1
9389         bl      FlashSetInterfaceMode
9390         mov     w0, 1
9391         b       .L1275
9392 .L1218:
9393         adrp    x25, :got:gFlashInterfaceMode
9394         ldr     x25, [x25, #:got_lo12:gFlashInterfaceMode]
9395         ldrb    w0, [x25]
9396         bl      FlashSetInterfaceMode
9397         ldrb    w0, [x25]
9398 .L1275:
9399         bl      NandcSetMode
9400         bl      FlashLoadPhyInfo
9401         cbz     w0, .L1213
9402         mov     w0, 1
9403         bl      FlashSetInterfaceMode
9404         mov     w0, 1
9405         bl      NandcSetMode
9406         ldr     x25, [x19, #:got_lo12:gpNandParaInfo]
9407         adrp    x0, .LC91
9408         add     x0, x0, :lo12:.LC91
9409         ldr     x1, [x25]
9410         ldrh    w1, [x1,14]
9411         bl      printk
9412         bl      FlashLoadPhyInfoInRam
9413         cmn     w0, #1
9414         beq     .L1206
9415         bl      FlashDieInfoInit
9416         ldr     x0, [x25]
9417         ldrb    w0, [x0,19]
9418         bl      FlashGetReadRetryDefault
9419         adrp    x1, :got:gTotleBlock
9420         ldr     x0, [x25]
9421         ldr     x1, [x1, #:got_lo12:gTotleBlock]
9422         ldrb    w2, [x0,9]
9423         ldrh    w1, [x1]
9424         add     w1, w1, 4095
9425         cmp     w2, w1, lsr 12
9426         blt     .L1220
9427         ldrh    w1, [x0,14]
9428         add     w1, w1, 255
9429         cmp     w2, w1, lsr 8
9430         bge     .L1221
9431 .L1220:
9432         ldrh    w1, [x0,14]
9433         and     w1, w1, -256
9434         strh    w1, [x0,14]
9435 .L1221:
9436         adrp    x0, :got:gFlashInterfaceMode
9437         ldr     x0, [x0, #:got_lo12:gFlashInterfaceMode]
9438         ldrb    w0, [x0]
9439         tst     w0, 6
9440         beq     .L1222
9441         bl      FlashSavePhyInfo
9442         adrp    x1, :got:gNandFlashInfoBlockAddr
9443         mov     w0, 0
9444         ldr     x1, [x1, #:got_lo12:gNandFlashInfoBlockAddr]
9445         ldr     w1, [x1]
9446         bl      FlashDdrParaScan
9447 .L1222:
9448         bl      FlashSavePhyInfo
9449 .L1213:
9450         ldr     x0, [x19, #:got_lo12:gpNandParaInfo]
9451         adrp    x25, :got:gFlashInterfaceMode
9452         ldr     x27, [x27, #:got_lo12:gNandRandomizer]
9453         adrp    x3, :got:gpReadRetrial
9454         ldr     x4, [x0]
9455         ldrh    w0, [x4,16]
9456         ubfx    x1, x0, 7, 1
9457         strb    w1, [x27]
9458         adrp    x1, :got:gMultiPageReadEn
9459         ubfx    x2, x0, 3, 1
9460         ldr     x1, [x1, #:got_lo12:gMultiPageReadEn]
9461         strb    w2, [x1]
9462         adrp    x1, :got:gMultiPageProgEn
9463         ubfx    x2, x0, 4, 1
9464         ldr     x1, [x1, #:got_lo12:gMultiPageProgEn]
9465         strb    w2, [x1]
9466         ubfx    x2, x0, 8, 3
9467         ldr     x1, [x25, #:got_lo12:gFlashInterfaceMode]
9468         strb    w2, [x1]
9469         ldr     x6, [x3, #:got_lo12:gpReadRetrial]
9470         str     xzr, [x6]
9471         tbz     x0, 6, .L1224
9472         adrp    x1, :got:g_retryMode
9473         ldrb    w0, [x4,19]
9474         ldr     x1, [x1, #:got_lo12:g_retryMode]
9475         strb    w0, [x1]
9476         adrp    x1, :got:g_maxRegNum
9477         ldr     x26, [x26, #:got_lo12:gReadRetryInfo]
9478         ldr     x2, [x1, #:got_lo12:g_maxRegNum]
9479         ldrb    w5, [x26,1]
9480         strb    w5, [x2]
9481         adrp    x2, :got:g_maxRetryCount
9482         ldrb    w7, [x26,2]
9483         ldr     x5, [x2, #:got_lo12:g_maxRetryCount]
9484         strb    w7, [x5]
9485         sub     w5, w0, #1
9486         uxtb    w5, w5
9487         cmp     w5, 5
9488         bhi     .L1225
9489         adrp    x1, :got:HynixReadRetrial
9490         sub     w0, w0, #5
9491         uxtb    w0, w0
9492         ldr     x1, [x1, #:got_lo12:HynixReadRetrial]
9493         cmp     w0, 1
9494         str     x1, [x6]
9495         bhi     .L1224
9496         adrp    x0, :got:gNandcDumpWriteEn
9497         mov     w1, 1
9498         ldr     x0, [x0, #:got_lo12:gNandcDumpWriteEn]
9499         str     w1, [x0]
9500         b       .L1224
9501 .L1225:
9502         sub     w5, w0, #17
9503         uxtb    w5, w5
9504         cmp     w5, 1
9505         bhi     .L1227
9506         adrp    x0, :got:MicronReadRetrial
9507         ldr     x0, [x0, #:got_lo12:MicronReadRetrial]
9508         b       .L1277
9509 .L1227:
9510         sub     w5, w0, #65
9511         uxtb    w5, w5
9512         cmp     w5, 1
9513         bls     .L1245
9514         cmp     w0, 33
9515         bne     .L1228
9516 .L1245:
9517         adrp    x0, :got:ToshibaReadRetrial
9518         ldr     x3, [x3, #:got_lo12:gpReadRetrial]
9519         ldr     x0, [x0, #:got_lo12:ToshibaReadRetrial]
9520         str     x0, [x3]
9521         mov     w0, 4
9522         ldr     x1, [x1, #:got_lo12:g_maxRegNum]
9523         strb    w0, [x1]
9524         mov     w0, 7
9525         ldr     x2, [x2, #:got_lo12:g_maxRetryCount]
9526         strb    w0, [x2]
9527         b       .L1224
9528 .L1228:
9529         sub     w5, w0, #67
9530         uxtb    w5, w5
9531         cmp     w5, 1
9532         sub     w5, w0, #34
9533         cset    w7, ls
9534         uxtb    w5, w5
9535         cmp     w5, 1
9536         bls     .L1246
9537         cbz     w7, .L1230
9538 .L1246:
9539         adrp    x5, :got:ToshibaReadRetrial
9540         ldr     x3, [x3, #:got_lo12:gpReadRetrial]
9541         cmp     w0, 35
9542         ldr     x5, [x5, #:got_lo12:ToshibaReadRetrial]
9543         str     x5, [x3]
9544         ldr     x2, [x2, #:got_lo12:g_maxRetryCount]
9545         beq     .L1232
9546         cmp     w0, 68
9547         beq     .L1232
9548         mov     w0, 7
9549         b       .L1276
9550 .L1232:
9551         mov     w0, 17
9552 .L1276:
9553         strb    w0, [x2]
9554         mov     w0, 4
9555         ldr     x1, [x1, #:got_lo12:g_maxRegNum]
9556         cbnz    w7, .L1278
9557         mov     w0, 5
9558 .L1278:
9559         strb    w0, [x1]
9560         b       .L1224
9561 .L1230:
9562         cmp     w0, 49
9563         bne     .L1224
9564         adrp    x0, :got:SamsungReadRetrial
9565         ldr     x0, [x0, #:got_lo12:SamsungReadRetrial]
9566 .L1277:
9567         str     x0, [x6]
9568 .L1224:
9569         ldrh    w2, [x4,10]
9570         ldrb    w1, [x4,12]
9571         ldrb    w0, [x4,18]
9572         sdiv    w1, w2, w1
9573         bl      BuildFlashLsbPageTable
9574         bl      FlashDieInfoInit
9575         ldr     x0, [x21, #:got_lo12:IDByte]
9576         ldrb    w0, [x0]
9577         cmp     w0, 44
9578         bne     .L1235
9579         ldr     x0, [x23, #:got_lo12:gFlashToggleModeEn]
9580         ldrb    w1, [x0]
9581         cbz     w1, .L1235
9582         strb    wzr, [x0]
9583         mov     w0, 1
9584         bl      FlashSetInterfaceMode
9585         mov     w0, 1
9586         bl      NandcSetMode
9587 .L1235:
9588         ldr     x25, [x25, #:got_lo12:gFlashInterfaceMode]
9589         ldrb    w0, [x25]
9590         tst     w0, 6
9591         beq     .L1236
9592         ldr     x23, [x23, #:got_lo12:gFlashToggleModeEn]
9593         ldrb    w1, [x23]
9594         cbnz    w1, .L1237
9595         tbnz    x0, 0, .L1236
9596 .L1237:
9597         adrp    x1, :got:gNandFlashInfoBlockAddr
9598         mov     w0, 0
9599         ldr     x1, [x1, #:got_lo12:gNandFlashInfoBlockAddr]
9600         ldr     w1, [x1]
9601         bl      FlashDdrParaScan
9602 .L1236:
9603         ldr     x0, [x19, #:got_lo12:gpNandParaInfo]
9604         ldr     x0, [x0]
9605         ldrb    w0, [x0,20]
9606         bl      FlashBchSel
9607         adrp    x0, :got:gNandIDataBuf
9608         ldr     x0, [x0, #:got_lo12:gNandIDataBuf]
9609         bl      FlashReadIdbDataRaw
9610         cbnz    w0, .L1238
9611         ldr     x0, [x29,104]
9612         ldr     x24, [x0, #:got_lo12:gNandIDBResBlkNumSaveInFlash]
9613         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9614         ldrb    w1, [x24]
9615         ldrb    w2, [x0]
9616         cmp     w2, w1
9617         bls     .L1239
9618         strb    w1, [x0]
9619 .L1239:
9620         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9621         ldrb    w0, [x0]
9622         cmp     w0, 15
9623         bhi     .L1240
9624 .L1238:
9625         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9626         mov     w1, 16
9627         strb    w1, [x0]
9628 .L1240:
9629         mov     w0, 18928
9630         movk    w0, 0x2, lsl 16
9631         bl      FlashTimingCfg
9632         bl      FlashPrintInfo
9633         ldr     x19, [x19, #:got_lo12:gpNandParaInfo]
9634         adrp    x0, :got:gNandPhyInfo
9635         ldr     x4, [x19]
9636         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
9637         ldrb    w1, [x4,12]
9638         strh    w1, [x0,8]
9639         ldrh    w3, [x4,14]
9640         ldrb    w1, [x4,7]
9641         str     w1, [x0,4]
9642         ldr     x21, [x21, #:got_lo12:IDByte]
9643         ldr     w1, [x21]
9644         str     w1, [x0]
9645         adrp    x1, :got:gNandMaxDie
9646         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
9647         ldrb    w1, [x1]
9648         strh    w1, [x0,10]
9649         ldrb    w1, [x4,13]
9650         strh    w1, [x0,12]
9651         strh    w3, [x0,14]
9652         ldrh    w1, [x4,10]
9653         strh    w1, [x0,16]
9654         ldrb    w2, [x4,12]
9655         ldrh    w1, [x4,10]
9656         sdiv    w1, w1, w2
9657         strh    w1, [x0,18]
9658         ldrb    w2, [x4,9]
9659         strh    w2, [x0,20]
9660         ldrh    w5, [x4,10]
9661         ldrb    w1, [x4,9]
9662         mul     w1, w1, w5
9663         mov     w5, 512
9664         strh    w5, [x0,24]
9665         uxth    w1, w1
9666         strh    w1, [x0,22]
9667         ldr     x20, [x20, #:got_lo12:gNandIDBResBlkNum]
9668         ldrb    w5, [x20]
9669         strh    w5, [x0,26]
9670         ldr     x22, [x22, #:got_lo12:g_slc2KBNand]
9671         ldrb    w5, [x22]
9672         cmp     w5, 1
9673         bne     .L1241
9674         lsl     w1, w1, 1
9675         mov     w5, 16
9676         lsr     w3, w3, 1
9677         lsl     w2, w2, 1
9678         strh    w1, [x0,22]
9679         mov     w1, 8
9680         strb    w5, [x20]
9681         strh    w3, [x0,14]
9682         strh    w2, [x0,20]
9683         strh    w1, [x0,26]
9684 .L1241:
9685         ldrb    w0, [x4,20]
9686         bl      FlashBchSel
9687         bl      FlashSuspend
9688         mov     w0, 0
9689         b       .L1206
9690 .L1243:
9691         mov     w0, -2
9692 .L1206:
9693         ldp     x19, x20, [sp,16]
9694         ldp     x21, x22, [sp,32]
9695         ldp     x23, x24, [sp,48]
9696         ldp     x25, x26, [sp,64]
9697         ldp     x27, x28, [sp,80]
9698         ldp     x29, x30, [sp], 112
9699         ret
9700         .size   FlashInit, .-FlashInit
9701         .align  2
9702         .global FlashPageProgMsbFFData
9703         .type   FlashPageProgMsbFFData, %function
9704 FlashPageProgMsbFFData:
9705         stp     x29, x30, [sp, -80]!
9706         adrp    x3, :got:gpNandParaInfo
9707         add     x29, sp, 0
9708         stp     x21, x22, [sp,32]
9709         uxtb    w22, w0
9710         ldr     x0, [x3, #:got_lo12:gpNandParaInfo]
9711         stp     x19, x20, [sp,16]
9712         stp     x23, x24, [sp,48]
9713         stp     x25, x26, [sp,64]
9714         uxtb    w19, w2
9715         mov     x20, x3
9716         ldr     x0, [x0]
9717         ldrb    w2, [x0,19]
9718         cmp     w2, 35
9719         cset    w4, eq
9720         cmp     w2, 68
9721         cset    w0, eq
9722         orr     w4, w4, w0
9723         cbnz    w4, .L1284
9724         sub     w2, w2, #5
9725         uxtb    w2, w2
9726         cmp     w2, 1
9727         bhi     .L1279
9728 .L1284:
9729         mov     w21, w1
9730         adrp    x24, :got:mlcPageToSlcPageTbl
9731         mov     w25, 65535
9732         adrp    x26, :got:gFlashPageBuffer1
9733 .L1282:
9734         ldr     x0, [x20, #:got_lo12:gpNandParaInfo]
9735         ldr     x0, [x0]
9736         ldrh    w0, [x0,10]
9737         cmp     w0, w19
9738         bls     .L1279
9739         ldr     x0, [x24, #:got_lo12:mlcPageToSlcPageTbl]
9740         ldrh    w0, [x0,w19,sxtw 1]
9741         cmp     w0, w25
9742         bne     .L1279
9743         ldr     x23, [x26, #:got_lo12:gFlashPageBuffer1]
9744         mov     w1, 255
9745         mov     w2, 32768
9746         ldr     x0, [x23]
9747         bl      ftl_memset
9748         ldr     x2, [x23]
9749         add     w1, w19, w21
9750         mov     w0, w22
9751         mov     x3, 0
9752         add     w19, w19, 1
9753         bl      FlashProgPage
9754         uxtb    w19, w19
9755         b       .L1282
9756 .L1279:
9757         ldp     x19, x20, [sp,16]
9758         ldp     x21, x22, [sp,32]
9759         ldp     x23, x24, [sp,48]
9760         ldp     x25, x26, [sp,64]
9761         ldp     x29, x30, [sp], 80
9762         ret
9763         .size   FlashPageProgMsbFFData, .-FlashPageProgMsbFFData
9764         .align  2
9765         .global FlashProgPageDp
9766         .type   FlashProgPageDp, %function
9767 FlashProgPageDp:
9768         stp     x29, x30, [sp, -80]!
9769         add     x29, sp, 0
9770         stp     x19, x20, [sp,16]
9771         uxtb    w19, w0
9772         adrp    x0, :got:gNandParaInfo
9773         stp     x23, x24, [sp,48]
9774         stp     x21, x22, [sp,32]
9775         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
9776         mov     w20, w1
9777         str     x5, [x29,72]
9778         mov     x24, x2
9779         mov     x21, x3
9780         mov     x23, x4
9781         ldrb    w22, [x0,9]
9782         mov     w0, w19
9783         bl      NandcWaitFlashReady
9784         mov     w0, w19
9785         bl      NandcFlashCs
9786         mov     w0, w19
9787         mov     w1, w20
9788         bl      FlashProgFirstCmd
9789         mov     w2, w22
9790         mov     x3, x24
9791         mov     x4, x21
9792         mov     w0, w19
9793         mov     w1, 1
9794         adrp    x21, :got:gBlockPageAlignSize
9795         bl      NandcXferData
9796         mov     w1, w20
9797         mov     w0, w19
9798         bl      FlashProgDpFirstCmd
9799         mov     w0, w19
9800         bl      NandcWaitFlashReady
9801         ldr     x21, [x21, #:got_lo12:gBlockPageAlignSize]
9802         mov     w0, w19
9803         ldr     w1, [x21]
9804         add     w1, w20, w1
9805         bl      FlashProgDpSecondCmd
9806         ldr     x5, [x29,72]
9807         mov     w2, w22
9808         mov     x3, x23
9809         mov     w0, w19
9810         mov     x4, x5
9811         mov     w1, 1
9812         bl      NandcXferData
9813         ldr     w1, [x21]
9814         mov     w0, w19
9815         add     w1, w20, w1
9816         bl      FlashProgSecondCmd
9817         mov     w0, w19
9818         bl      NandcWaitFlashReady
9819         mov     w1, w20
9820         mov     w0, w19
9821         bl      FlashReadStatus
9822         mov     w20, w0
9823         mov     w0, w19
9824         bl      NandcFlashDeCs
9825         and     w0, w20, 1
9826         ldp     x19, x20, [sp,16]
9827         ldp     x21, x22, [sp,32]
9828         ldp     x23, x24, [sp,48]
9829         ldp     x29, x30, [sp], 80
9830         ret
9831         .size   FlashProgPageDp, .-FlashProgPageDp
9832         .align  2
9833         .global FlashReadPages
9834         .type   FlashReadPages, %function
9835 FlashReadPages:
9836         stp     x29, x30, [sp, -160]!
9837         add     x29, sp, 0
9838         stp     x23, x24, [sp,48]
9839         mov     x24, x0
9840         adrp    x0, :got:gNandParaInfo
9841         stp     x21, x22, [sp,32]
9842         stp     x25, x26, [sp,64]
9843         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
9844         adrp    x26, :got:gNandRandomizer
9845         stp     x27, x28, [sp,80]
9846         stp     x19, x20, [sp,16]
9847         mov     w23, 0
9848         mov     w27, w1
9849         ldrb    w0, [x0,9]
9850         mov     w22, w23
9851         str     w0, [x29,140]
9852         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
9853         str     w2, [x29,132]
9854         ldrb    w0, [x0]
9855         str     w0, [x29,136]
9856         adrp    x0, .LC93
9857         add     x0, x0, :lo12:.LC93
9858         str     x0, [x29,112]
9859         adrp    x0, .LC94
9860         add     x0, x0, :lo12:.LC94
9861         str     x0, [x29,104]
9862         adrp    x0, .LC92
9863         add     x0, x0, :lo12:.LC92
9864         str     x0, [x29,96]
9865 .L1290:
9866         cmp     w22, w27
9867         bcs     .L1358
9868         mov     w25, 56
9869         ldr     w1, [x29,132]
9870         sub     w4, w27, w22
9871         add     x2, x29, 156
9872         umull   x25, w22, w25
9873         add     x3, x29, 152
9874         add     x21, x24, x25
9875         mov     x0, x21
9876         bl      LogAddr2PhyAddr
9877         mov     w19, w0
9878         adrp    x0, :got:gNandMaxDie
9879         ldr     w1, [x29,152]
9880         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
9881         ldrb    w0, [x0]
9882         cmp     w1, w0
9883         bcc     .L1291
9884         mov     w0, -1
9885         str     w0, [x24,x25]
9886         b       .L1292
9887 .L1291:
9888         adrp    x0, :got:DieCsIndex
9889         ldr     x0, [x0, #:got_lo12:DieCsIndex]
9890         ldrb    w20, [x0,w1,uxtw]
9891         adrp    x0, :got:gMultiPageReadEn
9892         ldr     x0, [x0, #:got_lo12:gMultiPageReadEn]
9893         ldrb    w0, [x0]
9894         cmp     w0, wzr
9895         mov     w0, w20
9896         csel    w19, w19, wzr, ne
9897         bl      NandcWaitFlashReady
9898         adrp    x1, :got:gpNandParaInfo
9899         str     x1, [x29,120]
9900         ldr     x0, [x1, #:got_lo12:gpNandParaInfo]
9901         ldr     x0, [x0]
9902         ldrb    w0, [x0,19]
9903         sub     w0, w0, #1
9904         uxtb    w0, w0
9905         cmp     w0, 5
9906         bhi     .L1294
9907         adrp    x2, :got:gReadRetryInfo
9908         sxtw    x1, w20
9909         ldr     x2, [x2, #:got_lo12:gReadRetryInfo]
9910         add     x0, x2, x1
9911         ldrb    w3, [x0,12]
9912         adrp    x0, :got:read_retry_cur_offset
9913         ldr     x0, [x0, #:got_lo12:read_retry_cur_offset]
9914         ldrb    w0, [x0,x1]
9915         cmp     w0, w3
9916         beq     .L1294
9917         ldrb    w1, [x2,1]
9918         mov     w0, w20
9919         add     x2, x2, 4
9920         bl      HynixSetRRPara
9921 .L1294:
9922         mov     w0, w20
9923         bl      NandcFlashCs
9924 .L1295:
9925         cmp     w20, 255
9926         ldr     w1, [x29,156]
9927         bne     .L1327
9928         cmn     w1, #1
9929         cset    w0, ne
9930         cbz     w0, .L1323
9931 .L1327:
9932         cbz     w19, .L1298
9933         adrp    x0, :got:gBlockPageAlignSize
9934         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
9935         ldr     w2, [x0]
9936         mov     w0, w20
9937         add     w2, w1, w2
9938         bl      FlashReadDpCmd
9939         b       .L1299
9940 .L1298:
9941         mov     w0, w20
9942         bl      FlashReadCmd
9943         b       .L1299
9944 .L1323:
9945         mov     w19, w0
9946 .L1296:
9947         ldrb    w2, [x29,140]
9948         mov     w1, 0
9949         ldr     x3, [x21,8]
9950         mov     w0, w20
9951         ldr     x4, [x21,16]
9952         bl      NandcXferData
9953         mov     w28, w0
9954         mov     w0, 0
9955         bl      NandcReadDontCaseBusyEn
9956         cmn     w28, #1
9957         bne     .L1300
9958         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
9959         ldrb    w1, [x0]
9960         cbz     w1, .L1300
9961         strb    wzr, [x0]
9962         mov     w19, 0
9963         b       .L1295
9964 .L1300:
9965         cbz     w19, .L1301
9966         adrp    x0, :got:gBlockPageAlignSize
9967         ldr     w1, [x29,156]
9968         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
9969         ldr     w2, [x0]
9970         mov     w0, w20
9971         add     w1, w2, w1
9972         bl      FlashReadDpDataOutCmd
9973         add     w0, w22, 1
9974         mov     w4, 56
9975         ldrb    w2, [x29,140]
9976         mov     w1, 0
9977         umull   x4, w0, w4
9978         mov     w0, w20
9979         add     x4, x24, x4
9980         ldr     x3, [x4,8]
9981         ldr     x4, [x4,16]
9982         bl      NandcXferData
9983         cmn     w0, #1
9984         mov     w23, w0
9985         csel    w19, w19, wzr, ne
9986 .L1301:
9987         mov     w0, w20
9988         bl      NandcFlashDeCs
9989         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
9990         cmn     w28, #1
9991         ldrb    w1, [x29,136]
9992         strb    w1, [x0]
9993         bne     .L1308
9994         adrp    x0, :got:gFlashToggleModeEn
9995         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
9996         ldrb    w0, [x0]
9997         cbnz    w0, .L1303
9998 .L1307:
9999         adrp    x0, :got:gpReadRetrial
10000         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
10001         ldr     x19, [x0]
10002         cbnz    x19, .L1304
10003         b       .L1359
10004 .L1303:
10005         adrp    x0, :got:gpNandc
10006         ldr     w1, [x29,156]
10007         ldr     x2, [x21,8]
10008         mov     w4, 1
10009         ldr     x3, [x21,16]
10010         ldr     x0, [x0, #:got_lo12:gpNandc]
10011         ldr     x0, [x0]
10012         ldr     w19, [x0,304]
10013         mov     w0, w20
10014         bl      FlashDdrTunningRead
10015         cmn     w0, #1
10016         mov     w28, w0
10017         beq     .L1306
10018         adrp    x1, :got:gNandFlashEccBits
10019         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
10020         ldrb    w0, [x1]
10021         cmp     w28, w0, lsr 1
10022         bls     .L1325
10023 .L1306:
10024         lsr     w0, w19, 8
10025         bl      NandcSetDdrPara
10026         cmn     w28, #1
10027         beq     .L1307
10028         b       .L1325
10029 .L1304:
10030         ldr     w1, [x29,156]
10031         mov     w0, w20
10032         ldr     x2, [x21,8]
10033         ldr     x3, [x21,16]
10034         blr     x19
10035         cmn     w0, #1
10036         mov     w28, w0
10037         mov     w19, 0
10038         bne     .L1309
10039         ldr     x0, [x29,120]
10040         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
10041         ldr     x0, [x0]
10042         ldrb    w0, [x0,19]
10043         sub     w0, w0, #1
10044         uxtb    w0, w0
10045         cmp     w0, 5
10046         bhi     .L1310
10047         adrp    x2, :got:gReadRetryInfo
10048         mov     w0, w20
10049         mov     w3, w19
10050         ldr     x2, [x2, #:got_lo12:gReadRetryInfo]
10051         add     x2, x2, 4
10052         ldrb    w1, [x2,-3]
10053         bl      HynixSetRRPara
10054 .L1310:
10055         ldr     w1, [x29,156]
10056         mov     w0, w20
10057         ldr     x2, [x21,8]
10058         mov     w19, 0
10059         ldr     x3, [x21,16]
10060         bl      FlashReadRawPage
10061         mov     w28, w0
10062         adrp    x2, :got:gNandFlashEccBits
10063         ldr     x0, [x29,96]
10064         ldr     w1, [x21,4]
10065         mov     w3, w28
10066         ldr     x2, [x2, #:got_lo12:gNandFlashEccBits]
10067         ldrb    w2, [x2]
10068         bl      printk
10069         b       .L1309
10070 .L1359:
10071         ldr     w1, [x29,156]
10072         mov     w0, w20
10073         ldr     x2, [x21,8]
10074         ldr     x3, [x21,16]
10075         bl      FlashReadRawPage
10076         mov     w28, w0
10077         b       .L1309
10078 .L1325:
10079         mov     w19, 0
10080 .L1308:
10081         adrp    x0, :got:gNandFlashEccBits
10082         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
10083         ldrb    w0, [x0]
10084         add     w0, w0, w0, lsl 1
10085         cmp     w28, w0, lsr 2
10086         bls     .L1309
10087         adrp    x0, :got:gpReadRetrial
10088         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
10089         ldr     x0, [x0]
10090         cmp     x0, xzr
10091         mov     w0, 256
10092         csel    w28, w28, w0, ne
10093 .L1309:
10094         cmp     w28, 256
10095         beq     .L1328
10096         cmn     w28, #1
10097         bne     .L1311
10098 .L1328:
10099         str     w28, [x24,x25]
10100         b       .L1313
10101 .L1311:
10102         str     wzr, [x24,x25]
10103 .L1313:
10104         ldr     w3, [x24,x25]
10105         cmn     w3, #1
10106         bne     .L1315
10107         adrp    x2, :got:gNandFlashEccBits
10108         ldr     w1, [x21,4]
10109         ldr     x0, [x29,112]
10110         ldr     x2, [x2, #:got_lo12:gNandFlashEccBits]
10111         ldrb    w2, [x2]
10112         bl      printk
10113         ldr     x1, [x21,16]
10114         cbz     x1, .L1315
10115         mov     w2, 4
10116         ldr     x0, [x29,104]
10117         mov     w3, w2
10118         bl      rknand_print_hex
10119 .L1315:
10120         cbz     w19, .L1317
10121         adrp    x0, :got:gNandFlashEccBits
10122         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
10123         ldrb    w0, [x0]
10124         add     w0, w0, w0, lsl 1
10125         cmp     w23, w0, lsr 2
10126         bls     .L1318
10127         adrp    x0, :got:gpReadRetrial
10128         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
10129         ldr     x0, [x0]
10130         cmp     x0, xzr
10131         mov     w0, 256
10132         csel    w23, w23, w0, ne
10133 .L1318:
10134         add     w0, w22, 1
10135         mov     w1, 56
10136         cmp     w23, 256
10137         umull   x0, w0, w1
10138         beq     .L1329
10139         cmn     w23, #1
10140         bne     .L1319
10141 .L1329:
10142         str     w23, [x24,x0]
10143         b       .L1317
10144 .L1319:
10145         str     wzr, [x24,x0]
10146 .L1317:
10147         add     w22, w22, w19
10148 .L1292:
10149         add     w22, w22, 1
10150         b       .L1290
10151 .L1299:
10152         mov     w0, w20
10153         bl      NandcWaitFlashReady
10154         cbz     w19, .L1296
10155         ldr     w1, [x29,156]
10156         mov     w0, w20
10157         bl      FlashReadDpDataOutCmd
10158         b       .L1296
10159 .L1358:
10160         mov     w0, 0
10161         ldp     x19, x20, [sp,16]
10162         ldp     x21, x22, [sp,32]
10163         ldp     x23, x24, [sp,48]
10164         ldp     x25, x26, [sp,64]
10165         ldp     x27, x28, [sp,80]
10166         ldp     x29, x30, [sp], 160
10167         ret
10168         .size   FlashReadPages, .-FlashReadPages
10169         .align  2
10170         .global FlashLoadFactorBbt
10171         .type   FlashLoadFactorBbt, %function
10172 FlashLoadFactorBbt:
10173         adrp    x0, :got:gNandPhyInfo
10174         mov     w2, 16
10175         stp     x29, x30, [sp, -192]!
10176         add     x29, sp, 0
10177         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
10178         stp     x23, x24, [sp,48]
10179         stp     x25, x26, [sp,64]
10180         stp     x27, x28, [sp,80]
10181         stp     x19, x20, [sp,16]
10182         stp     x21, x22, [sp,32]
10183         adrp    x23, :got:FbbtBlk
10184         adrp    x24, :got:gFlashSpareBuffer
10185         ldrh    w1, [x0,12]
10186         mov     w27, -1
10187         ldrh    w21, [x0,14]
10188         adrp    x26, .LC95
10189         ldr     x0, [x23, #:got_lo12:FbbtBlk]
10190         add     x28, x29, 136
10191         add     x26, x26, :lo12:.LC95
10192         mul     w21, w1, w21
10193         mov     w1, 0
10194         bl      ftl_memset
10195         uxth    w21, w21
10196         ldr     x0, [x24, #:got_lo12:gFlashSpareBuffer]
10197         add     w25, w21, w27
10198         mov     w3, 0
10199         str     xzr, [x29,144]
10200         mov     w19, w3
10201         uxth    w25, w25
10202         ldr     x0, [x0]
10203         str     x0, [x29,152]
10204         sub     w0, w21, #16
10205         str     w0, [x29,124]
10206 .L1361:
10207         adrp    x22, :got:gNandMaxDie
10208         ldr     x1, [x22, #:got_lo12:gNandMaxDie]
10209         ldrb    w1, [x1]
10210         cmp     w1, w19
10211         bls     .L1371
10212         mul     w4, w19, w21
10213         mov     w20, w25
10214         mov     w5, 61664
10215 .L1362:
10216         ldr     w0, [x29,124]
10217         cmp     w20, w0
10218         ble     .L1364
10219         add     w1, w4, w20
10220         mov     x0, x28
10221         lsl     w1, w1, 10
10222         str     w1, [x28,4]
10223         mov     w1, 1
10224         str     x5, [x29,96]
10225         mov     w2, w1
10226         str     x3, [x29,104]
10227         str     x4, [x29,112]
10228         bl      FlashReadPages
10229         ldr     w0, [x28]
10230         ldr     x4, [x29,112]
10231         cmn     w0, #1
10232         ldr     x3, [x29,104]
10233         ldr     x5, [x29,96]
10234         beq     .L1363
10235         ldr     x0, [x24, #:got_lo12:gFlashSpareBuffer]
10236         ldr     x0, [x0]
10237         ldrh    w0, [x0]
10238         cmp     w0, w5
10239         bne     .L1363
10240         mov     x0, x26
10241         mov     w1, w19
10242         mov     w2, w20
10243         str     x3, [x29,112]
10244         bl      printk
10245         ldr     x3, [x29,112]
10246         ldr     x0, [x23, #:got_lo12:FbbtBlk]
10247         add     w3, w3, 1
10248         strh    w20, [x0,w19,sxtw 1]
10249         uxth    w3, w3
10250         b       .L1364
10251 .L1363:
10252         sub     w20, w20, #1
10253         uxth    w20, w20
10254         b       .L1362
10255 .L1364:
10256         ldr     x22, [x22, #:got_lo12:gNandMaxDie]
10257         add     w19, w19, 1
10258         uxtb    w19, w19
10259         ldrb    w1, [x22]
10260         cmp     w1, w3
10261         csel    w27, w27, wzr, ne
10262         b       .L1361
10263 .L1371:
10264         mov     w0, w27
10265         ldp     x19, x20, [sp,16]
10266         ldp     x21, x22, [sp,32]
10267         ldp     x23, x24, [sp,48]
10268         ldp     x25, x26, [sp,64]
10269         ldp     x27, x28, [sp,80]
10270         ldp     x29, x30, [sp], 192
10271         ret
10272         .size   FlashLoadFactorBbt, .-FlashLoadFactorBbt
10273         .align  2
10274         .global FtlLoadFactoryBbt
10275         .type   FtlLoadFactoryBbt, %function
10276 FtlLoadFactoryBbt:
10277         adrp    x1, :got:p_sys_data_buf
10278         adrp    x0, :got:req_sys
10279         stp     x29, x30, [sp, -112]!
10280         add     x29, sp, 0
10281         ldr     x1, [x1, #:got_lo12:p_sys_data_buf]
10282         stp     x21, x22, [sp,32]
10283         stp     x25, x26, [sp,64]
10284         stp     x27, x28, [sp,80]
10285         stp     x19, x20, [sp,16]
10286         stp     x23, x24, [sp,48]
10287         ldr     x2, [x0, #:got_lo12:req_sys]
10288         adrp    x20, :got:gBbtInfo
10289         ldr     x1, [x1]
10290         mov     w21, 0
10291         mov     x22, x0
10292         adrp    x25, :got:c_ftl_nand_die_num
10293         str     x1, [x2,8]
10294         adrp    x1, :got:p_sys_spare_buf
10295         mov     w26, -1
10296         adrp    x27, :got:c_ftl_nand_blks_per_die
10297         mov     w28, 61664
10298         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
10299         ldr     x24, [x1]
10300         str     x24, [x2,16]
10301         ldr     x20, [x20, #:got_lo12:gBbtInfo]
10302 .L1373:
10303         ldr     x0, [x25, #:got_lo12:c_ftl_nand_die_num]
10304         ldrh    w0, [x0]
10305         cmp     w21, w0
10306         bcs     .L1382
10307         strh    w26, [x20,12]
10308         adrp    x3, :got:c_ftl_nand_blks_per_die
10309         ldr     x0, [x27, #:got_lo12:c_ftl_nand_blks_per_die]
10310         ldrh    w19, [x0]
10311         sub     w19, w19, #1
10312         uxth    w19, w19
10313 .L1374:
10314         ldr     x0, [x3, #:got_lo12:c_ftl_nand_blks_per_die]
10315         ldrh    w1, [x0]
10316         sub     w0, w1, #16
10317         cmp     w19, w0
10318         ble     .L1376
10319         ldr     x23, [x22, #:got_lo12:req_sys]
10320         madd    w1, w21, w1, w19
10321         mov     x0, x23
10322         str     x3, [x29,104]
10323         lsl     w1, w1, 10
10324         str     w1, [x23,4]
10325         mov     w1, 1
10326         mov     w2, w1
10327         bl      FlashReadPages
10328         ldr     w0, [x23]
10329         ldr     x3, [x29,104]
10330         cmn     w0, #1
10331         beq     .L1375
10332         ldrh    w0, [x24]
10333         cmp     w0, w28
10334         bne     .L1375
10335         strh    w19, [x20,12]
10336         b       .L1376
10337 .L1375:
10338         sub     w19, w19, #1
10339         uxth    w19, w19
10340         b       .L1374
10341 .L1376:
10342         add     w21, w21, 1
10343         add     x20, x20, 2
10344         b       .L1373
10345 .L1382:
10346         mov     w0, 0
10347         ldp     x19, x20, [sp,16]
10348         ldp     x21, x22, [sp,32]
10349         ldp     x23, x24, [sp,48]
10350         ldp     x25, x26, [sp,64]
10351         ldp     x27, x28, [sp,80]
10352         ldp     x29, x30, [sp], 112
10353         ret
10354         .size   FtlLoadFactoryBbt, .-FtlLoadFactoryBbt
10355         .align  2
10356         .global FtlGetLastWrittenPage
10357         .type   FtlGetLastWrittenPage, %function
10358 FtlGetLastWrittenPage:
10359         stp     x29, x30, [sp, -208]!
10360         cmp     w1, 1
10361         add     x29, sp, 0
10362         stp     x23, x24, [sp,48]
10363         stp     x19, x20, [sp,16]
10364         stp     x21, x22, [sp,32]
10365         stp     x25, x26, [sp,64]
10366         mov     w24, w1
10367         bne     .L1384
10368         adrp    x1, :got:c_ftl_nand_page_pre_slc_blk
10369         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
10370         b       .L1394
10371 .L1384:
10372         adrp    x1, :got:c_ftl_nand_page_pre_blk
10373         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
10374 .L1394:
10375         ldrh    w19, [x1]
10376         lsl     w21, w0, 10
10377         add     x22, x29, 88
10378         mov     w1, 1
10379         sub     w19, w19, #1
10380         mov     w2, w24
10381         str     xzr, [x29,96]
10382         add     x25, x29, 144
10383         sxth    w19, w19
10384         str     x25, [x29,104]
10385         orr     w0, w19, w21
10386         str     w0, [x29,92]
10387         mov     x0, x22
10388         bl      FlashReadPages
10389         ldr     w0, [x29,144]
10390         cmn     w0, #1
10391         bne     .L1386
10392         mov     w23, 0
10393         mov     w26, 2
10394 .L1387:
10395         cmp     w23, w19
10396         bgt     .L1386
10397         add     w3, w23, w19
10398         mov     w1, 1
10399         mov     w2, w24
10400         sdiv    w20, w3, w26
10401         sxth    w0, w20
10402         orr     w0, w0, w21
10403         str     w0, [x22,4]
10404         mov     x0, x22
10405         bl      FlashReadPages
10406         ldr     w0, [x25]
10407         cmn     w0, #1
10408         bne     .L1388
10409         ldr     w0, [x25,4]
10410         cmn     w0, #1
10411         bne     .L1388
10412         ldr     w0, [x22]
10413         cmn     w0, #1
10414         beq     .L1388
10415         sub     w19, w20, #1
10416         sxth    w19, w19
10417         b       .L1387
10418 .L1388:
10419         add     w20, w20, 1
10420         sxth    w23, w20
10421         b       .L1387
10422 .L1386:
10423         mov     w0, w19
10424         ldp     x19, x20, [sp,16]
10425         ldp     x21, x22, [sp,32]
10426         ldp     x23, x24, [sp,48]
10427         ldp     x25, x26, [sp,64]
10428         ldp     x29, x30, [sp], 208
10429         ret
10430         .size   FtlGetLastWrittenPage, .-FtlGetLastWrittenPage
10431         .align  2
10432         .global FtlLoadBbt
10433         .type   FtlLoadBbt, %function
10434 FtlLoadBbt:
10435         stp     x29, x30, [sp, -64]!
10436         adrp    x0, :got:p_sys_spare_buf
10437         add     x29, sp, 0
10438         stp     x21, x22, [sp,32]
10439         adrp    x21, :got:req_sys
10440         stp     x23, x24, [sp,48]
10441         stp     x19, x20, [sp,16]
10442         ldr     x1, [x21, #:got_lo12:req_sys]
10443         adrp    x23, :got:c_ftl_nand_blks_per_die
10444         mov     w24, 61649
10445         str     xzr, [x1,8]
10446         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
10447         ldr     x20, [x0]
10448         str     x20, [x1,16]
10449         bl      FtlBbtMemInit
10450         ldr     x0, [x23, #:got_lo12:c_ftl_nand_blks_per_die]
10451         ldrh    w19, [x0]
10452         sub     w19, w19, #1
10453         uxth    w19, w19
10454 .L1396:
10455         ldr     x0, [x23, #:got_lo12:c_ftl_nand_blks_per_die]
10456         ldrh    w0, [x0]
10457         sub     w0, w0, #48
10458         cmp     w19, w0
10459         ble     .L1399
10460         ldr     x22, [x21, #:got_lo12:req_sys]
10461         lsl     w0, w19, 10
10462         mov     w1, 1
10463         mov     w2, w1
10464         str     w0, [x22,4]
10465         mov     x0, x22
10466         bl      FlashReadPages
10467         ldr     w0, [x22]
10468         cmn     w0, #1
10469         bne     .L1397
10470         ldr     w0, [x22,4]
10471         mov     w1, 1
10472         mov     w2, w1
10473         add     w0, w0, 1
10474         str     w0, [x22,4]
10475         mov     x0, x22
10476         bl      FlashReadPages
10477 .L1397:
10478         ldr     x0, [x21, #:got_lo12:req_sys]
10479         ldr     w0, [x0]
10480         cmn     w0, #1
10481         beq     .L1398
10482         ldrh    w0, [x20]
10483         cmp     w0, w24
10484         bne     .L1398
10485         adrp    x0, :got:gBbtInfo
10486         ldr     w1, [x20,4]
10487         ldr     x0, [x0, #:got_lo12:gBbtInfo]
10488         str     w1, [x0,8]
10489         strh    w19, [x0]
10490         ldrh    w1, [x20,8]
10491         strh    w1, [x0,4]
10492         b       .L1399
10493 .L1398:
10494         sub     w19, w19, #1
10495         uxth    w19, w19
10496         b       .L1396
10497 .L1399:
10498         adrp    x19, :got:gBbtInfo
10499         mov     w2, 65535
10500         mov     w0, -1
10501         ldr     x22, [x19, #:got_lo12:gBbtInfo]
10502         ldrh    w1, [x22]
10503         cmp     w1, w2
10504         beq     .L1401
10505         ldrh    w1, [x22,4]
10506         cmp     w1, w2
10507         beq     .L1403
10508         ldr     x23, [x21, #:got_lo12:req_sys]
10509         lsl     w1, w1, 10
10510         mov     x0, x23
10511         str     w1, [x23,4]
10512         mov     w1, 1
10513         mov     w2, w1
10514         bl      FlashReadPages
10515         ldr     w0, [x23]
10516         cmn     w0, #1
10517         beq     .L1403
10518         ldrh    w1, [x20]
10519         mov     w0, 61649
10520         cmp     w1, w0
10521         bne     .L1403
10522         ldr     w0, [x20,4]
10523         ldr     w1, [x22,8]
10524         cmp     w0, w1
10525         bls     .L1403
10526         str     w0, [x22,8]
10527         ldrh    w1, [x22,4]
10528         ldrh    w0, [x20,8]
10529         strh    w1, [x22]
10530         strh    w0, [x22,4]
10531 .L1403:
10532         ldr     x23, [x19, #:got_lo12:gBbtInfo]
10533         mov     w1, 1
10534         adrp    x24, :got:p_sys_data_buf
10535         ldrh    w0, [x23]
10536         bl      FtlGetLastWrittenPage
10537         sxth    w22, w0
10538         add     w0, w0, 1
10539         strh    w0, [x23,2]
10540 .L1405:
10541         tbnz    w22, #31, .L1410
10542         ldr     x0, [x19, #:got_lo12:gBbtInfo]
10543         mov     w1, 1
10544         ldr     x23, [x21, #:got_lo12:req_sys]
10545         mov     w2, w1
10546         ldrh    w0, [x0]
10547         orr     w0, w22, w0, lsl 10
10548         str     w0, [x23,4]
10549         ldr     x0, [x24, #:got_lo12:p_sys_data_buf]
10550         ldr     x0, [x0]
10551         str     x0, [x23,8]
10552         mov     x0, x23
10553         bl      FlashReadPages
10554         ldr     w0, [x23]
10555         cmn     w0, #1
10556         beq     .L1406
10557 .L1410:
10558         ldr     x0, [x19, #:got_lo12:gBbtInfo]
10559         ldrh    w1, [x20,10]
10560         strh    w1, [x0,6]
10561         mov     w1, 65535
10562         ldrh    w0, [x20,12]
10563         cmp     w0, w1
10564         bne     .L1407
10565         b       .L1408
10566 .L1406:
10567         sub     w22, w22, #1
10568         sxth    w22, w22
10569         b       .L1405
10570 .L1407:
10571         adrp    x1, :got:c_ftl_nand_sys_blks_per_plane
10572         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
10573         ldr     w2, [x1]
10574         cmp     w0, w2
10575         beq     .L1408
10576         adrp    x1, :got:c_ftl_nand_blk_pre_plane
10577         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blk_pre_plane]
10578         ldrh    w1, [x1]
10579         lsr     w1, w1, 2
10580         cmp     w0, w1
10581         bcs     .L1408
10582         cmp     w2, w1
10583         bcs     .L1408
10584         bl      FtlSysBlkNumInit
10585 .L1408:
10586         mov     x20, 0
10587         adrp    x22, :got:c_ftl_nand_die_num
10588         adrp    x23, :got:c_ftl_nand_bbm_buf_size
10589 .L1411:
10590         ldr     x0, [x22, #:got_lo12:c_ftl_nand_die_num]
10591         mov     w1, w20
10592         add     x20, x20, 1
10593         ldrh    w0, [x0]
10594         cmp     w1, w0
10595         bcs     .L1426
10596         ldr     x0, [x23, #:got_lo12:c_ftl_nand_bbm_buf_size]
10597         ldr     x3, [x21, #:got_lo12:req_sys]
10598         ldrh    w2, [x0]
10599         ldr     x0, [x19, #:got_lo12:gBbtInfo]
10600         ldr     x3, [x3,8]
10601         add     x0, x0, x20, lsl 3
10602         mul     w1, w1, w2
10603         lsl     w2, w2, 2
10604         ldr     x0, [x0,24]
10605         add     x1, x3, x1, lsl 2
10606         bl      ftl_memcpy
10607         b       .L1411
10608 .L1426:
10609         mov     w0, 0
10610 .L1401:
10611         ldp     x19, x20, [sp,16]
10612         ldp     x21, x22, [sp,32]
10613         ldp     x23, x24, [sp,48]
10614         ldp     x29, x30, [sp], 64
10615         ret
10616         .size   FtlLoadBbt, .-FtlLoadBbt
10617         .align  2
10618         .global load_l2p_region
10619         .type   load_l2p_region, %function
10620 load_l2p_region:
10621         stp     x29, x30, [sp, -48]!
10622         uxth    x1, w1
10623         add     x29, sp, 0
10624         stp     x21, x22, [sp,32]
10625         uxth    w21, w0
10626         adrp    x0, :got:p_map_region_ppn_table
10627         stp     x19, x20, [sp,16]
10628         ubfiz   x2, x21, 2, 16
10629         adrp    x20, :got:p_l2p_ram_map
10630         ldr     x0, [x0, #:got_lo12:p_map_region_ppn_table]
10631         ldr     x0, [x0]
10632         ldr     w22, [x0,x2]
10633         cbnz    w22, .L1428
10634         ldr     x20, [x20, #:got_lo12:p_l2p_ram_map]
10635         adrp    x2, :got:c_ftl_nand_byte_pre_page
10636         lsl     x19, x1, 4
10637         mov     w1, 255
10638         ldr     x0, [x20]
10639         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
10640         add     x0, x0, x19
10641         ldrh    w2, [x2]
10642         ldr     x0, [x0,8]
10643         bl      ftl_memset
10644         ldr     x0, [x20]
10645         strh    w21, [x0,x19]
10646         ldr     x1, [x20]
10647         add     x19, x1, x19
10648         str     w22, [x19,4]
10649         b       .L1429
10650 .L1428:
10651         adrp    x0, :got:req_sys
10652         lsl     x19, x1, 4
10653         ldr     x0, [x0, #:got_lo12:req_sys]
10654         str     w22, [x0,4]
10655         ldr     x20, [x20, #:got_lo12:p_l2p_ram_map]
10656         ldr     x1, [x20]
10657         add     x1, x1, x19
10658         ldr     x1, [x1,8]
10659         str     x1, [x0,8]
10660         adrp    x1, :got:p_sys_spare_buf
10661         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
10662         ldr     x1, [x1]
10663         str     x1, [x0,16]
10664         mov     w1, 1
10665         mov     w2, w1
10666         bl      FlashReadPages
10667         ldr     x0, [x20]
10668         add     x0, x0, x19
10669         str     wzr, [x0,4]
10670         ldr     x0, [x20]
10671         strh    w21, [x0,x19]
10672 .L1429:
10673         mov     w0, 0
10674         ldp     x19, x20, [sp,16]
10675         ldp     x21, x22, [sp,32]
10676         ldp     x29, x30, [sp], 48
10677         ret
10678         .size   load_l2p_region, .-load_l2p_region
10679         .align  2
10680         .global FtlVendorPartRead
10681         .type   FtlVendorPartRead, %function
10682 FtlVendorPartRead:
10683         stp     x29, x30, [sp, -176]!
10684         add     x29, sp, 0
10685         stp     x21, x22, [sp,32]
10686         mov     w22, w0
10687         adrp    x0, :got:c_ftl_nand_sec_pre_page_shift
10688         stp     x19, x20, [sp,16]
10689         stp     x23, x24, [sp,48]
10690         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
10691         mov     w21, w1
10692         stp     x25, x26, [sp,64]
10693         stp     x27, x28, [sp,80]
10694         add     w1, w22, w1
10695         mov     x23, x2
10696         ldrh    w3, [x0]
10697         adrp    x0, :got:c_ftl_vendor_part_size
10698         mov     w20, -1
10699         ldr     x0, [x0, #:got_lo12:c_ftl_vendor_part_size]
10700         ldrh    w0, [x0]
10701         cmp     w1, w0
10702         bhi     .L1431
10703         lsr     w24, w22, w3
10704         mov     w20, 0
10705         add     x25, x29, 120
10706         adrp    x26, :got:p_vendor_data_buf
10707 .L1432:
10708         cbz     w21, .L1431
10709         adrp    x0, :got:p_vendor_region_ppn_table
10710         ldr     x0, [x0, #:got_lo12:p_vendor_region_ppn_table]
10711         ldr     x0, [x0]
10712         ldr     w1, [x0,w24,uxtw 2]
10713         adrp    x0, :got:c_ftl_nand_sec_pre_page
10714         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
10715         ldrh    w19, [x0]
10716         uxth    w0, w21
10717         udiv    w27, w22, w19
10718         msub    w27, w27, w19, w22
10719         sub     w19, w19, w27
10720         uxth    w19, w19
10721         cmp     w19, w21
10722         csel    w19, w0, w19, hi
10723         lsl     w28, w19, 9
10724         cbz     w1, .L1434
10725         ldr     x5, [x26, #:got_lo12:p_vendor_data_buf]
10726         ubfiz   x27, x27, 9, 16
10727         str     w1, [x25,4]
10728         mov     w1, 1
10729         mov     w2, w1
10730         str     x5, [x29,104]
10731         ldr     x0, [x5]
10732         str     x0, [x25,8]
10733         mov     x0, x25
10734         str     xzr, [x25,16]
10735         bl      FlashReadPages
10736         ldr     x5, [x29,104]
10737         mov     w2, w28
10738         ldr     w0, [x25]
10739         ldr     x1, [x5]
10740         cmn     w0, #1
10741         mov     x0, x23
10742         csinv   w20, w20, wzr, ne
10743         add     x1, x1, x27
10744         bl      ftl_memcpy
10745         b       .L1436
10746 .L1434:
10747         mov     x0, x23
10748         mov     w2, w28
10749         bl      ftl_memset
10750 .L1436:
10751         add     w24, w24, 1
10752         sub     w21, w21, w19
10753         add     w22, w22, w19
10754         add     x23, x23, x28, sxtw
10755         b       .L1432
10756 .L1431:
10757         mov     w0, w20
10758         ldp     x19, x20, [sp,16]
10759         ldp     x21, x22, [sp,32]
10760         ldp     x23, x24, [sp,48]
10761         ldp     x25, x26, [sp,64]
10762         ldp     x27, x28, [sp,80]
10763         ldp     x29, x30, [sp], 176
10764         ret
10765         .size   FtlVendorPartRead, .-FtlVendorPartRead
10766         .align  2
10767         .global FtlLoadEctTbl
10768         .type   FtlLoadEctTbl, %function
10769 FtlLoadEctTbl:
10770         stp     x29, x30, [sp, -32]!
10771         mov     w0, 64
10772         add     x29, sp, 0
10773         stp     x19, x20, [sp,16]
10774         adrp    x20, :got:g_ect_tbl_info_size
10775         adrp    x19, :got:gp_ect_tbl_info
10776         ldr     x20, [x20, #:got_lo12:g_ect_tbl_info_size]
10777         ldr     x19, [x19, #:got_lo12:gp_ect_tbl_info]
10778         ldrh    w1, [x20]
10779         ldr     x2, [x19]
10780         bl      FtlVendorPartRead
10781         ldr     x0, [x19]
10782         ldr     w1, [x0]
10783         mov     w0, 17221
10784         movk    w0, 0x4254, lsl 16
10785         cmp     w1, w0
10786         beq     .L1440
10787         adrp    x0, .LC72
10788         adrp    x1, .LC96
10789         add     x1, x1, :lo12:.LC96
10790         add     x0, x0, :lo12:.LC72
10791         bl      printk
10792         ldrh    w2, [x20]
10793         mov     w1, 0
10794         ldr     x0, [x19]
10795         lsl     w2, w2, 9
10796         bl      ftl_memset
10797 .L1440:
10798         mov     w0, 0
10799         ldp     x19, x20, [sp,16]
10800         ldp     x29, x30, [sp], 32
10801         ret
10802         .size   FtlLoadEctTbl, .-FtlLoadEctTbl
10803         .align  2
10804         .global Ftl_load_ext_data
10805         .type   Ftl_load_ext_data, %function
10806 Ftl_load_ext_data:
10807         stp     x29, x30, [sp, -32]!
10808         mov     w1, 1
10809         mov     w0, 0
10810         add     x29, sp, 0
10811         stp     x19, x20, [sp,16]
10812         adrp    x19, :got:g_sys_ext_data
10813         ldr     x20, [x19, #:got_lo12:g_sys_ext_data]
10814         mov     x2, x20
10815         bl      FtlVendorPartRead
10816         ldr     w1, [x20]
10817         mov     w0, 19539
10818         movk    w0, 0x4654, lsl 16
10819         cmp     w1, w0
10820         beq     .L1442
10821         mov     x0, x20
10822         mov     w1, 0
10823         mov     w2, 512
10824         bl      ftl_memset
10825         mov     w0, 19539
10826         movk    w0, 0x4654, lsl 16
10827         str     w0, [x20]
10828 .L1442:
10829         ldr     x0, [x19, #:got_lo12:g_sys_ext_data]
10830         mov     w1, 19539
10831         movk    w1, 0x4654, lsl 16
10832         adrp    x20, :got:g_totle_slc_erase_count
10833         ldr     w2, [x0]
10834         cmp     w2, w1
10835         bne     .L1443
10836         adrp    x1, :got:g_totle_write_sector
10837         ldr     w2, [x0,88]
10838         ldr     x1, [x1, #:got_lo12:g_totle_write_sector]
10839         str     w2, [x1]
10840         adrp    x1, :got:g_totle_read_sector
10841         ldr     w2, [x0,92]
10842         ldr     x1, [x1, #:got_lo12:g_totle_read_sector]
10843         str     w2, [x1]
10844         adrp    x1, :got:g_totle_gc_page_count
10845         ldr     w2, [x0,8]
10846         ldr     x1, [x1, #:got_lo12:g_totle_gc_page_count]
10847         str     w2, [x1]
10848         adrp    x1, :got:g_totle_write_page_count
10849         ldr     w2, [x0,12]
10850         ldr     x1, [x1, #:got_lo12:g_totle_write_page_count]
10851         str     w2, [x1]
10852         adrp    x1, :got:g_totle_read_page_count
10853         ldr     w2, [x0,16]
10854         ldr     x1, [x1, #:got_lo12:g_totle_read_page_count]
10855         str     w2, [x1]
10856         adrp    x1, :got:g_totle_l2p_write_count
10857         ldr     w2, [x0,20]
10858         ldr     x1, [x1, #:got_lo12:g_totle_l2p_write_count]
10859         str     w2, [x1]
10860         ldr     w2, [x0,28]
10861         ldr     x1, [x20, #:got_lo12:g_totle_slc_erase_count]
10862         str     w2, [x1]
10863         adrp    x1, :got:g_totle_sys_slc_erase_count
10864         ldr     w2, [x0,32]
10865         ldr     x1, [x1, #:got_lo12:g_totle_sys_slc_erase_count]
10866         str     w2, [x1]
10867         adrp    x1, :got:g_totle_discard_page_count
10868         ldr     w2, [x0,36]
10869         ldr     x1, [x1, #:got_lo12:g_totle_discard_page_count]
10870         str     w2, [x1]
10871         adrp    x1, :got:g_totle_cache_write_count
10872         ldr     w2, [x0,40]
10873         ldr     x1, [x1, #:got_lo12:g_totle_cache_write_count]
10874         str     w2, [x1]
10875         adrp    x1, :got:g_max_erase_count
10876         ldr     w2, [x0,44]
10877         ldr     x1, [x1, #:got_lo12:g_max_erase_count]
10878         str     w2, [x1]
10879         adrp    x1, :got:g_min_erase_count
10880         ldr     x1, [x1, #:got_lo12:g_min_erase_count]
10881         ldr     w2, [x0,48]
10882         ldr     w0, [x0,60]
10883         str     w2, [x1]
10884         adrp    x1, :got:g_all_blk_used_slc_mode
10885         ldr     x1, [x1, #:got_lo12:g_all_blk_used_slc_mode]
10886         str     w0, [x1]
10887 .L1443:
10888         adrp    x0, :got:g_SlcPartLbaEndSector
10889         ldr     x0, [x0, #:got_lo12:g_SlcPartLbaEndSector]
10890         str     wzr, [x0]
10891         mov     w0, 34661
10892         movk    w0, 0x1234, lsl 16
10893         ldr     x19, [x19, #:got_lo12:g_sys_ext_data]
10894         ldr     w1, [x19,68]
10895         cmp     w1, w0
10896         bne     .L1444
10897         adrp    x0, :got:g_inkDie_check_enable
10898         mov     w1, 1
10899         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
10900         str     w1, [x0]
10901         adrp    x0, .LC72
10902         adrp    x1, .LC97
10903         add     x0, x0, :lo12:.LC72
10904         add     x1, x1, :lo12:.LC97
10905         bl      printk
10906 .L1444:
10907         adrp    x0, :got:c_mlc_erase_count_value
10908         ldr     x2, [x20, #:got_lo12:g_totle_slc_erase_count]
10909         adrp    x3, :got:g_totle_avg_erase_count
10910         ldr     x0, [x0, #:got_lo12:c_mlc_erase_count_value]
10911         ldr     x3, [x3, #:got_lo12:g_totle_avg_erase_count]
10912         ldrh    w1, [x0]
10913         adrp    x0, :got:g_totle_mlc_erase_count
10914         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
10915         ldr     w4, [x0]
10916         ldr     w0, [x2]
10917         madd    w0, w1, w4, w0
10918         adrp    x1, :got:c_ftl_nand_data_blks_per_plane
10919         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_blks_per_plane]
10920         ldrh    w1, [x1]
10921         udiv    w0, w0, w1
10922         str     w0, [x3]
10923         ldp     x19, x20, [sp,16]
10924         ldp     x29, x30, [sp], 32
10925         ret
10926         .size   Ftl_load_ext_data, .-Ftl_load_ext_data
10927         .align  2
10928         .global FtlScanSysBlk
10929         .type   FtlScanSysBlk, %function
10930 FtlScanSysBlk:
10931         stp     x29, x30, [sp, -160]!
10932         mov     w1, 0
10933         add     x29, sp, 0
10934         stp     x19, x20, [sp,16]
10935         adrp    x19, :got:g_totle_map_block
10936         stp     x21, x22, [sp,32]
10937         stp     x23, x24, [sp,48]
10938         ldr     x0, [x19, #:got_lo12:g_totle_map_block]
10939         adrp    x24, :got:p_map_block_ver_table
10940         stp     x27, x28, [sp,80]
10941         stp     x25, x26, [sp,64]
10942         adrp    x28, :got:g_totle_vendor_block
10943         strh    wzr, [x0]
10944         adrp    x25, :got:c_ftl_nand_max_map_blks
10945         adrp    x21, :got:p_map_block_table
10946         adrp    x27, :got:c_ftl_nand_max_vendor_blks
10947         adrp    x23, :got:p_vendor_block_ver_table
10948         ldr     x0, [x28, #:got_lo12:g_totle_vendor_block]
10949         strh    wzr, [x0]
10950         ldr     x20, [x25, #:got_lo12:c_ftl_nand_max_map_blks]
10951         ldr     x0, [x24, #:got_lo12:p_map_block_ver_table]
10952         ldr     w2, [x20]
10953         ldr     x0, [x0]
10954         lsl     w2, w2, 2
10955         bl      ftl_memset
10956         ldr     x0, [x21, #:got_lo12:p_map_block_table]
10957         mov     w1, 0
10958         ldr     w2, [x20]
10959         adrp    x20, :got:p_vendor_block_table
10960         ldr     x0, [x0]
10961         lsl     w2, w2, 1
10962         bl      ftl_memset
10963         ldr     x22, [x27, #:got_lo12:c_ftl_nand_max_vendor_blks]
10964         ldr     x0, [x23, #:got_lo12:p_vendor_block_ver_table]
10965         mov     w1, 0
10966         ldrh    w2, [x22]
10967         ldr     x0, [x0]
10968         lsl     w2, w2, 2
10969         bl      ftl_memset
10970         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
10971         mov     w1, 0
10972         ldrh    w2, [x22]
10973         adrp    x22, :got:gSysInfo
10974         ldr     x0, [x0]
10975         lsl     w2, w2, 1
10976         bl      ftl_memset
10977         ldr     x0, [x22, #:got_lo12:gSysInfo]
10978         mov     w1, 255
10979         mov     w2, 12
10980         bl      ftl_memset
10981         str     x28, [x29,144]
10982         adrp    x0, :got:c_ftl_nand_data_blks_per_plane
10983         str     x25, [x29,136]
10984         str     x27, [x29,128]
10985         str     x22, [x29,120]
10986         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_blks_per_plane]
10987         ldrh    w0, [x0]
10988         str     w0, [x29,156]
10989 .L1446:
10990         adrp    x0, :got:c_ftl_nand_blk_pre_plane
10991         ldr     w1, [x29,156]
10992         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
10993         ldrh    w0, [x0]
10994         cmp     w0, w1
10995         bls     .L1522
10996         mov     w22, 0
10997         adrp    x25, :got:c_ftl_nand_byte_pre_oob
10998         mov     w27, w22
10999         mov     w26, 4
11000 .L1489:
11001         adrp    x0, :got:c_ftl_nand_planes_num
11002         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
11003         ldrh    w0, [x0]
11004         cmp     w0, w27
11005         bls     .L1523
11006         adrp    x0, :got:p_plane_order_table
11007         ldrh    w1, [x29,156]
11008         ldr     x0, [x0, #:got_lo12:p_plane_order_table]
11009         ldrb    w0, [x0,w27,sxtw]
11010         bl      V2P_block
11011         uxth    w28, w0
11012         bl      FtlBbmIsBadBlock
11013         cbnz    w0, .L1447
11014         adrp    x1, :got:req_read
11015         mov     w0, 56
11016         lsl     w28, w28, 10
11017         umull   x0, w22, w0
11018         ldr     x2, [x1, #:got_lo12:req_read]
11019         ldr     x1, [x2]
11020         add     x1, x1, x0
11021         str     w28, [x1,4]
11022         ldr     x1, [x2]
11023         adrp    x2, :got:p_gc_spare_buf
11024         add     x1, x1, x0
11025         str     xzr, [x1,8]
11026         ldr     x0, [x25, #:got_lo12:c_ftl_nand_byte_pre_oob]
11027         ldr     x2, [x2, #:got_lo12:p_gc_spare_buf]
11028         ldrh    w0, [x0]
11029         ldr     x2, [x2]
11030         mul     w0, w22, w0
11031         add     w22, w22, 1
11032         sdiv    w0, w0, w26
11033         uxth    w22, w22
11034         add     x0, x2, x0, sxtw 2
11035         str     x0, [x1,16]
11036 .L1447:
11037         add     w27, w27, 1
11038         uxth    w27, w27
11039         b       .L1489
11040 .L1523:
11041         adrp    x0, :got:req_read
11042         mov     w1, w22
11043         mov     w2, 1
11044         mov     x27, 0
11045         mov     w28, 65535
11046         ldr     x0, [x0, #:got_lo12:req_read]
11047         ldr     x0, [x0]
11048         bl      FlashReadPages
11049 .L1449:
11050         cmp     w22, w27, uxth
11051         bls     .L1524
11052         mov     x0, 56
11053         mul     x5, x27, x0
11054         adrp    x0, :got:req_read
11055         ldr     x6, [x0, #:got_lo12:req_read]
11056         ldr     x2, [x6]
11057         add     x1, x2, x5
11058         ldr     w7, [x2,x5]
11059         ldr     w0, [x1,4]
11060         cmn     w7, #1
11061         ldr     x26, [x1,16]
11062         ubfx    x25, x0, 10, 16
11063         bne     .L1451
11064         add     w0, w0, 1
11065         str     w0, [x1,4]
11066         mov     w1, 1
11067         str     x7, [x29,96]
11068         ldr     x0, [x6]
11069         mov     w2, w1
11070         str     x6, [x29,104]
11071         add     x0, x0, x5
11072         str     x5, [x29,112]
11073         bl      FlashReadPages
11074         ldrh    w0, [x26]
11075         ldr     x5, [x29,112]
11076         cmp     w0, w28
11077         ldr     x6, [x29,104]
11078         ldr     x7, [x29,96]
11079         bne     .L1451
11080         ldr     x0, [x6]
11081         str     w7, [x0,x5]
11082 .L1451:
11083         adrp    x0, :got:req_read
11084         ldr     x0, [x0, #:got_lo12:req_read]
11085         ldr     x0, [x0]
11086         ldr     w0, [x0,x5]
11087         cmn     w0, #1
11088         beq     .L1453
11089         adrp    x0, :got:g_GlobalSysVersion
11090         ldr     x0, [x0, #:got_lo12:g_GlobalSysVersion]
11091         ldr     w0, [x0]
11092         cmn     w0, #1
11093         beq     .L1454
11094         ldr     w1, [x26,4]
11095         cmp     w0, w1
11096         bhi     .L1455
11097 .L1454:
11098         ldr     w0, [x26,4]
11099         cmn     w0, #1
11100         beq     .L1455
11101         adrp    x1, :got:g_GlobalSysVersion
11102         add     w0, w0, 1
11103         ldr     x1, [x1, #:got_lo12:g_GlobalSysVersion]
11104         str     w0, [x1]
11105 .L1455:
11106         ldrh    w0, [x26]
11107         mov     w1, 61604
11108         cmp     w0, w1
11109         beq     .L1457
11110         bhi     .L1458
11111         mov     w1, 61574
11112         cmp     w0, w1
11113         bne     .L1456
11114         ldr     x0, [x29,128]
11115         ldr     x6, [x23, #:got_lo12:p_vendor_block_ver_table]
11116         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_vendor_blks]
11117         ldr     x6, [x6]
11118         ldrh    w5, [x0]
11119         ldr     x0, [x29,144]
11120         sub     w1, w5, #1
11121         ldr     x0, [x0, #:got_lo12:g_totle_vendor_block]
11122         sxth    w2, w1
11123         ldrh    w0, [x0]
11124         sub     w1, w1, w0
11125         b       .L1474
11126 .L1458:
11127         mov     w1, 61634
11128         cmp     w0, w1
11129         beq     .L1460
11130         cmp     w0, w28
11131         bne     .L1456
11132         mov     w0, w25
11133         mov     w1, 0
11134         b       .L1519
11135 .L1460:
11136         ldr     x0, [x29,136]
11137         ldr     x6, [x24, #:got_lo12:p_map_block_ver_table]
11138         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_map_blks]
11139         ldr     x6, [x6]
11140         ldr     w5, [x0]
11141         ldr     x0, [x19, #:got_lo12:g_totle_map_block]
11142         uxth    w1, w5
11143         ldrh    w0, [x0]
11144         sub     w2, w1, #1
11145         sub     w1, w1, w0
11146         sxth    w2, w2
11147         sub     w1, w1, #1
11148         sxth    w1, w1
11149 .L1462:
11150         cmp     w2, w1
11151         ble     .L1525
11152         sbfiz   x7, x2, 2, 32
11153         ldr     w10, [x26,4]
11154         sxth    x8, w2
11155         ldr     w9, [x6,x7]
11156         cmp     w10, w9
11157         bls     .L1463
11158         ldr     w1, [x6]
11159         cbnz    w1, .L1464
11160         cmp     w0, w5
11161         bne     .L1465
11162 .L1464:
11163         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11164         mov     w1, 1
11165         str     x8, [x29,96]
11166         str     x2, [x29,104]
11167         ldr     x0, [x0]
11168         str     x7, [x29,112]
11169         ldrh    w0, [x0]
11170         bl      FtlFreeSysBlkQueueIn
11171         ldr     x7, [x29,112]
11172         ldr     x2, [x29,104]
11173         ldr     x8, [x29,96]
11174         b       .L1466
11175 .L1465:
11176         ldr     x1, [x19, #:got_lo12:g_totle_map_block]
11177         add     w0, w0, 1
11178         strh    w0, [x1]
11179 .L1466:
11180         mov     w0, 0
11181 .L1467:
11182         cmp     w0, w2
11183         beq     .L1526
11184         ldr     x1, [x24, #:got_lo12:p_map_block_ver_table]
11185         ldr     x6, [x1]
11186         sxtw    x1, w0
11187         lsl     x5, x1, 2
11188         lsl     x1, x1, 1
11189         add     x9, x6, x5
11190         add     w0, w0, 1
11191         sxth    w0, w0
11192         ldr     w9, [x9,4]
11193         str     w9, [x6,x5]
11194         ldr     x5, [x21, #:got_lo12:p_map_block_table]
11195         ldr     x5, [x5]
11196         add     x6, x5, x1
11197         ldrh    w6, [x6,2]
11198         strh    w6, [x5,x1]
11199         b       .L1467
11200 .L1526:
11201         ldr     x0, [x24, #:got_lo12:p_map_block_ver_table]
11202         ldr     w1, [x26,4]
11203         ldr     x0, [x0]
11204         str     w1, [x0,x7]
11205         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11206         ldr     x0, [x0]
11207         strh    w25, [x0,x8,lsl 1]
11208         tbz     w2, #31, .L1518
11209         b       .L1453
11210 .L1463:
11211         sub     w2, w2, #1
11212         sxth    w2, w2
11213         b       .L1462
11214 .L1525:
11215         tbz     w2, #31, .L1473
11216         b       .L1453
11217 .L1518:
11218         ldr     x1, [x29,136]
11219         ldr     x0, [x19, #:got_lo12:g_totle_map_block]
11220         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_map_blks]
11221         ldrh    w0, [x0]
11222         ldr     w1, [x1]
11223         sub     w1, w1, w0
11224         sub     w1, w1, #1
11225         cmp     w2, w1, sxth
11226         bgt     .L1456
11227 .L1473:
11228         ldr     x1, [x19, #:got_lo12:g_totle_map_block]
11229         add     w0, w0, 1
11230         sxtw    x2, w2
11231         strh    w0, [x1]
11232         ldr     w1, [x26,4]
11233         ldr     x0, [x24, #:got_lo12:p_map_block_ver_table]
11234         ldr     x0, [x0]
11235         str     w1, [x0,x2,lsl 2]
11236         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11237         b       .L1520
11238 .L1482:
11239         sbfiz   x7, x2, 2, 32
11240         ldr     w10, [x26,4]
11241         sxth    x8, w2
11242         ldr     w9, [x6,x7]
11243         cmp     w10, w9
11244         bhi     .L1527
11245         sub     w2, w2, #1
11246         sxth    w2, w2
11247 .L1474:
11248         cmp     w2, w1
11249         bgt     .L1482
11250         b       .L1481
11251 .L1527:
11252         ldr     w1, [x6]
11253         cbnz    w1, .L1476
11254         cmp     w0, w5
11255         bne     .L1477
11256 .L1476:
11257         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11258         mov     w1, 1
11259         str     x8, [x29,96]
11260         str     x7, [x29,104]
11261         ldr     x0, [x0]
11262         str     x2, [x29,112]
11263         ldrh    w0, [x0]
11264         bl      FtlFreeSysBlkQueueIn
11265         ldr     x2, [x29,112]
11266         ldr     x7, [x29,104]
11267         ldr     x8, [x29,96]
11268         b       .L1478
11269 .L1477:
11270         ldr     x1, [x29,144]
11271         add     w0, w0, 1
11272         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
11273         strh    w0, [x1]
11274 .L1478:
11275         mov     w0, 0
11276 .L1479:
11277         cmp     w0, w2
11278         beq     .L1528
11279         ldr     x1, [x23, #:got_lo12:p_vendor_block_ver_table]
11280         ldr     x6, [x1]
11281         sxtw    x1, w0
11282         lsl     x5, x1, 2
11283         lsl     x1, x1, 1
11284         add     x9, x6, x5
11285         add     w0, w0, 1
11286         sxth    w0, w0
11287         ldr     w9, [x9,4]
11288         str     w9, [x6,x5]
11289         ldr     x5, [x20, #:got_lo12:p_vendor_block_table]
11290         ldr     x5, [x5]
11291         add     x6, x5, x1
11292         ldrh    w6, [x6,2]
11293         strh    w6, [x5,x1]
11294         b       .L1479
11295 .L1528:
11296         ldr     x0, [x23, #:got_lo12:p_vendor_block_ver_table]
11297         ldr     w1, [x26,4]
11298         ldr     x0, [x0]
11299         str     w1, [x0,x7]
11300         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11301         ldr     x0, [x0]
11302         strh    w25, [x0,x8,lsl 1]
11303 .L1481:
11304         tbnz    w2, #31, .L1453
11305         ldr     x0, [x29,144]
11306         ldr     x5, [x0, #:got_lo12:g_totle_vendor_block]
11307         ldr     x0, [x29,128]
11308         ldrh    w1, [x5]
11309         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_vendor_blks]
11310         ldrh    w0, [x0]
11311         sub     w0, w0, #1
11312         sub     w0, w0, w1
11313         cmp     w2, w0, sxth
11314         bgt     .L1456
11315         add     w1, w1, 1
11316         strh    w1, [x5]
11317         sxtw    x2, w2
11318         ldr     w1, [x26,4]
11319         ldr     x0, [x23, #:got_lo12:p_vendor_block_ver_table]
11320         ldr     x0, [x0]
11321         str     w1, [x0,x2,lsl 2]
11322         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11323 .L1520:
11324         ldr     x0, [x0]
11325         strh    w25, [x0,x2,lsl 1]
11326         b       .L1456
11327 .L1457:
11328         ldr     x0, [x29,120]
11329         ldr     x0, [x0, #:got_lo12:gSysInfo]
11330         ldrh    w1, [x0]
11331         cmp     w1, w28
11332         beq     .L1521
11333         ldrh    w0, [x0,4]
11334         cmp     w0, w28
11335         beq     .L1486
11336         mov     w1, 1
11337         bl      FtlFreeSysBlkQueueIn
11338 .L1486:
11339         ldr     x0, [x29,120]
11340         ldr     w1, [x26,4]
11341         ldr     x0, [x0, #:got_lo12:gSysInfo]
11342         ldr     w2, [x0,8]
11343         cmp     w2, w1
11344         bcs     .L1487
11345         ldrh    w1, [x0]
11346         strh    w1, [x0,4]
11347 .L1521:
11348         ldr     w1, [x26,4]
11349         strh    w25, [x0]
11350         str     w1, [x0,8]
11351         b       .L1456
11352 .L1487:
11353         strh    w25, [x0,4]
11354         b       .L1456
11355 .L1453:
11356         mov     w0, w25
11357         mov     w1, 1
11358 .L1519:
11359         bl      FtlFreeSysBlkQueueIn
11360 .L1456:
11361         add     x27, x27, 1
11362         b       .L1449
11363 .L1524:
11364         ldr     w0, [x29,156]
11365         add     w26, w0, 1
11366         uxth    w0, w26
11367         str     w0, [x29,156]
11368         b       .L1446
11369 .L1522:
11370         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11371         ldr     x1, [x0]
11372         ldrh    w0, [x1]
11373         cbz     w0, .L1490
11374 .L1493:
11375         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11376         ldr     x2, [x0]
11377         ldrh    w0, [x2]
11378         cbz     w0, .L1491
11379         b       .L1513
11380 .L1490:
11381         ldr     x19, [x19, #:got_lo12:g_totle_map_block]
11382         ldrh    w2, [x19]
11383         cbz     w2, .L1493
11384         ldr     x2, [x29,136]
11385         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_map_blks]
11386         ldr     w2, [x2]
11387 .L1494:
11388         cmp     w0, w2
11389         bcs     .L1493
11390         ldrh    w3, [x1,w0,sxtw 1]
11391         cbz     w3, .L1495
11392         mov     w6, w0
11393 .L1496:
11394         ldr     x1, [x29,136]
11395         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_map_blks]
11396         ldr     w1, [x1]
11397         cmp     w0, w1
11398         bcs     .L1493
11399         ldr     x3, [x21, #:got_lo12:p_map_block_table]
11400         sxtw    x5, w0
11401         sub     w1, w0, w6
11402         lsl     x2, x5, 1
11403         add     w0, w0, 1
11404         ldr     x4, [x3]
11405         sxtw    x1, w1
11406         sxth    w0, w0
11407         ldrh    w7, [x4,x2]
11408         strh    w7, [x4,x1,lsl 1]
11409         ldr     x4, [x24, #:got_lo12:p_map_block_ver_table]
11410         ldr     x4, [x4]
11411         ldr     w5, [x4,x5,lsl 2]
11412         str     w5, [x4,x1,lsl 2]
11413         ldr     x1, [x3]
11414         strh    wzr, [x1,x2]
11415         b       .L1496
11416 .L1495:
11417         add     w0, w0, 1
11418         sxth    w0, w0
11419         b       .L1494
11420 .L1491:
11421         ldr     x1, [x29,144]
11422         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
11423         ldrh    w1, [x1]
11424         cbz     w1, .L1513
11425         ldr     x1, [x29,128]
11426         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
11427         ldrh    w1, [x1]
11428 .L1499:
11429         cmp     w0, w1
11430         mov     w6, w0
11431         bge     .L1513
11432         ldrh    w3, [x2,w0,sxtw 1]
11433         cbz     w3, .L1500
11434 .L1501:
11435         ldr     x1, [x29,128]
11436         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
11437         ldrh    w1, [x1]
11438         cmp     w0, w1
11439         bge     .L1513
11440         ldr     x3, [x20, #:got_lo12:p_vendor_block_table]
11441         sxtw    x5, w0
11442         sub     w1, w0, w6
11443         lsl     x2, x5, 1
11444         add     w0, w0, 1
11445         ldr     x4, [x3]
11446         sxtw    x1, w1
11447         sxth    w0, w0
11448         ldrh    w7, [x4,x2]
11449         strh    w7, [x4,x1,lsl 1]
11450         ldr     x4, [x23, #:got_lo12:p_vendor_block_ver_table]
11451         ldr     x4, [x4]
11452         ldr     w5, [x4,x5,lsl 2]
11453         str     w5, [x4,x1,lsl 2]
11454         ldr     x1, [x3]
11455         strh    wzr, [x1,x2]
11456         b       .L1501
11457 .L1500:
11458         add     w0, w0, 1
11459         sxth    w0, w0
11460         b       .L1499
11461 .L1513:
11462         mov     w0, 0
11463         ldp     x19, x20, [sp,16]
11464         ldp     x21, x22, [sp,32]
11465         ldp     x23, x24, [sp,48]
11466         ldp     x25, x26, [sp,64]
11467         ldp     x27, x28, [sp,80]
11468         ldp     x29, x30, [sp], 160
11469         ret
11470         .size   FtlScanSysBlk, .-FtlScanSysBlk
11471         .align  2
11472         .global FtlLoadSysInfo
11473         .type   FtlLoadSysInfo, %function
11474 FtlLoadSysInfo:
11475         stp     x29, x30, [sp, -80]!
11476         adrp    x0, :got:p_sys_spare_buf
11477         add     x29, sp, 0
11478         stp     x19, x20, [sp,16]
11479         adrp    x20, :got:req_sys
11480         str     x25, [sp,64]
11481         stp     x21, x22, [sp,32]
11482         stp     x23, x24, [sp,48]
11483         ldr     x1, [x20, #:got_lo12:req_sys]
11484         adrp    x22, :got:c_ftl_nand_data_blks_per_plane
11485         adrp    x21, :got:p_valid_page_count_table
11486         adrp    x23, :got:gSysInfo
11487         str     xzr, [x1,8]
11488         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
11489         ldr     x0, [x0]
11490         str     x0, [x1,16]
11491         ldr     x1, [x22, #:got_lo12:c_ftl_nand_data_blks_per_plane]
11492         ldr     x0, [x21, #:got_lo12:p_valid_page_count_table]
11493         ldrh    w2, [x1]
11494         mov     w1, 0
11495         ldr     x0, [x0]
11496         lsl     w2, w2, 1
11497         bl      ftl_memset
11498         ldr     x24, [x23, #:got_lo12:gSysInfo]
11499         mov     w1, 65535
11500         ldrh    w0, [x24]
11501         cmp     w0, w1
11502         bne     .L1530
11503 .L1534:
11504         mov     w19, -1
11505         b       .L1531
11506 .L1530:
11507         mov     w1, 1
11508         adrp    x25, :got:p_sys_data_buf
11509         bl      FtlGetLastWrittenPage
11510         sxth    w19, w0
11511         add     w0, w0, 1
11512         strh    w0, [x24,2]
11513 .L1532:
11514         tbnz    w19, #31, .L1537
11515         ldr     x0, [x23, #:got_lo12:gSysInfo]
11516         mov     w1, 1
11517         ldr     x24, [x20, #:got_lo12:req_sys]
11518         mov     w2, w1
11519         ldrh    w0, [x0]
11520         orr     w0, w19, w0, lsl 10
11521         str     w0, [x24,4]
11522         ldr     x0, [x25, #:got_lo12:p_sys_data_buf]
11523         ldr     x0, [x0]
11524         str     x0, [x24,8]
11525         mov     x0, x24
11526         bl      FlashReadPages
11527         ldr     w0, [x24]
11528         cmn     w0, #1
11529         beq     .L1533
11530 .L1537:
11531         adrp    x24, :got:g_sys_save_data
11532         ldr     x20, [x20, #:got_lo12:req_sys]
11533         mov     w2, 48
11534         ldr     x19, [x24, #:got_lo12:g_sys_save_data]
11535         ldr     x1, [x20,8]
11536         mov     x0, x19
11537         bl      ftl_memcpy
11538         ldr     x22, [x22, #:got_lo12:c_ftl_nand_data_blks_per_plane]
11539         ldr     x21, [x21, #:got_lo12:p_valid_page_count_table]
11540         ldr     x1, [x20,8]
11541         ldrh    w2, [x22]
11542         ldr     x0, [x21]
11543         add     x1, x1, 48
11544         lsl     w2, w2, 1
11545         bl      ftl_memcpy
11546         ldr     w1, [x19]
11547         mov     w0, 19539
11548         movk    w0, 0x4654, lsl 16
11549         mov     x2, x24
11550         cmp     w1, w0
11551         beq     .L1544
11552         b       .L1534
11553 .L1533:
11554         sub     w19, w19, #1
11555         sxth    w19, w19
11556         b       .L1532
11557 .L1544:
11558         ldr     x23, [x23, #:got_lo12:gSysInfo]
11559         adrp    x0, :got:c_ftl_nand_die_num
11560         ldrh    w3, [x19,8]
11561         ldrb    w1, [x19,10]
11562         strh    w3, [x23,6]
11563         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
11564         ldrh    w0, [x0]
11565         cmp     w1, w0
11566         bne     .L1534
11567         adrp    x0, :got:g_MaxLbn
11568         adrp    x4, :got:c_ftl_nand_sec_pre_page
11569         ldrh    w6, [x19,14]
11570         adrp    x20, :got:g_gc_superblock
11571         ldr     x0, [x0, #:got_lo12:g_MaxLbn]
11572         str     w3, [x0]
11573         adrp    x0, :got:c_ftl_nand_page_pre_blk
11574         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11575         ldrh    w1, [x0]
11576         adrp    x0, :got:g_MaxLpn
11577         ldr     x0, [x0, #:got_lo12:g_MaxLpn]
11578         mul     w1, w1, w3
11579         str     w1, [x0]
11580         adrp    x0, :got:g_MaxLbaSector
11581         ldr     x4, [x4, #:got_lo12:c_ftl_nand_sec_pre_page]
11582         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
11583         ldrh    w4, [x4]
11584         mul     w1, w1, w4
11585         str     w1, [x0]
11586         adrp    x1, :got:c_ftl_nand_max_data_blks
11587         adrp    x0, :got:gBbtInfo
11588         adrp    x4, :got:c_ftl_nand_data_op_blks_per_plane
11589         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_data_blks]
11590         ldr     x0, [x0, #:got_lo12:gBbtInfo]
11591         ldr     x4, [x4, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
11592         ldr     w1, [x1]
11593         ldrh    w0, [x0,6]
11594         sub     w0, w1, w0
11595         adrp    x1, :got:c_ftl_nand_planes_num
11596         sub     w0, w0, w3
11597         adrp    x3, :got:g_active_superblock
11598         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
11599         ldrh    w1, [x1]
11600         udiv    w0, w0, w1
11601         ldrh    w1, [x19,16]
11602         strh    w0, [x4]
11603         lsr     w4, w1, 6
11604         and     w1, w1, 63
11605         ldr     x0, [x3, #:got_lo12:g_active_superblock]
11606         strb    w1, [x0,6]
11607         ldrb    w1, [x19,11]
11608         strh    w6, [x0]
11609         strh    w4, [x0,2]
11610         strb    w1, [x0,8]
11611         mov     w0, -1
11612         ldr     x1, [x20, #:got_lo12:g_gc_superblock]
11613         strh    w0, [x1]
11614         strh    wzr, [x1,2]
11615         strb    wzr, [x1,6]
11616         strb    wzr, [x1,8]
11617         adrp    x1, :got:g_buffer_superblock
11618         ldrh    w0, [x19,18]
11619         ldr     x4, [x1, #:got_lo12:g_buffer_superblock]
11620         strh    w0, [x4]
11621         ldrh    w5, [x19,20]
11622         lsr     w0, w5, 6
11623         strh    w0, [x4,2]
11624         ldrb    w0, [x19,12]
11625         and     w5, w5, 63
11626         strb    w0, [x4,8]
11627         adrp    x0, :got:g_gc_temp_superblock
11628         strb    w5, [x4,6]
11629         mov     x21, x0
11630         ldrh    w5, [x19,22]
11631         ldr     x4, [x0, #:got_lo12:g_gc_temp_superblock]
11632         strh    w5, [x4]
11633         ldrh    w5, [x19,24]
11634         lsr     w7, w5, 6
11635         and     w5, w5, 63
11636         strb    w5, [x4,6]
11637         ldrb    w5, [x19,13]
11638         strh    w7, [x4,2]
11639         strb    w5, [x4,8]
11640         adrp    x4, :got:g_totle_gc_page_count
11641         ldr     w5, [x19,32]
11642         ldr     x4, [x4, #:got_lo12:g_totle_gc_page_count]
11643         str     wzr, [x4]
11644         adrp    x4, :got:g_totle_write_page_count
11645         ldr     x4, [x4, #:got_lo12:g_totle_write_page_count]
11646         str     wzr, [x4]
11647         adrp    x4, :got:g_totle_read_page_count
11648         ldr     x4, [x4, #:got_lo12:g_totle_read_page_count]
11649         str     wzr, [x4]
11650         adrp    x4, :got:g_totle_l2p_write_count
11651         ldr     x4, [x4, #:got_lo12:g_totle_l2p_write_count]
11652         str     wzr, [x4]
11653         adrp    x4, :got:g_totle_mlc_erase_count
11654         ldr     x4, [x4, #:got_lo12:g_totle_mlc_erase_count]
11655         str     w5, [x4]
11656         adrp    x4, :got:g_totle_slc_erase_count
11657         ldr     w5, [x19,40]
11658         mov     x19, x1
11659         ldr     x4, [x4, #:got_lo12:g_totle_slc_erase_count]
11660         str     wzr, [x4]
11661         adrp    x4, :got:g_max_erase_count
11662         ldr     x4, [x4, #:got_lo12:g_max_erase_count]
11663         str     wzr, [x4]
11664         adrp    x4, :got:g_totle_cache_write_count
11665         ldr     x4, [x4, #:got_lo12:g_totle_cache_write_count]
11666         str     wzr, [x4]
11667         adrp    x4, :got:g_GlobalSysVersion
11668         ldr     x4, [x4, #:got_lo12:g_GlobalSysVersion]
11669         ldr     w7, [x4]
11670         cmp     w5, w7
11671         bls     .L1538
11672         str     w5, [x4]
11673 .L1538:
11674         adrp    x0, :got:g_GlobalDataVersion
11675         ldr     x2, [x2, #:got_lo12:g_sys_save_data]
11676         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
11677         ldr     w1, [x2,36]
11678         ldr     w2, [x0]
11679         cmp     w1, w2
11680         bls     .L1539
11681         str     w1, [x0]
11682 .L1539:
11683         mov     w0, 65535
11684         cmp     w6, w0
11685         beq     .L1540
11686         ldr     x0, [x3, #:got_lo12:g_active_superblock]
11687         bl      make_superblock
11688 .L1540:
11689         ldr     x0, [x19, #:got_lo12:g_buffer_superblock]
11690         mov     w1, 65535
11691         ldrh    w2, [x0]
11692         cmp     w2, w1
11693         beq     .L1541
11694         bl      make_superblock
11695 .L1541:
11696         ldr     x0, [x21, #:got_lo12:g_gc_temp_superblock]
11697         mov     w1, 65535
11698         ldrh    w2, [x0]
11699         cmp     w2, w1
11700         beq     .L1542
11701         bl      make_superblock
11702 .L1542:
11703         ldr     x0, [x20, #:got_lo12:g_gc_superblock]
11704         mov     w1, 65535
11705         mov     w19, 0
11706         ldrh    w2, [x0]
11707         cmp     w2, w1
11708         beq     .L1531
11709         bl      make_superblock
11710 .L1531:
11711         mov     w0, w19
11712         ldr     x25, [sp,64]
11713         ldp     x19, x20, [sp,16]
11714         ldp     x21, x22, [sp,32]
11715         ldp     x23, x24, [sp,48]
11716         ldp     x29, x30, [sp], 80
11717         ret
11718         .size   FtlLoadSysInfo, .-FtlLoadSysInfo
11719         .align  2
11720         .global FtlGcScanTempBlk
11721         .type   FtlGcScanTempBlk, %function
11722 FtlGcScanTempBlk:
11723         stp     x29, x30, [sp, -128]!
11724         add     x29, sp, 0
11725         stp     x19, x20, [sp,16]
11726         adrp    x19, .LANCHOR2
11727         stp     x25, x26, [sp,64]
11728         mov     x26, x0
11729         add     x0, x19, :lo12:.LANCHOR2
11730         stp     x23, x24, [sp,48]
11731         stp     x21, x22, [sp,32]
11732         stp     x27, x28, [sp,80]
11733         mov     w23, w1
11734         ldrh    w25, [x0,128]
11735         mov     w0, 65535
11736         cmp     w25, w0
11737         beq     .L1566
11738         cbnz    w25, .L1546
11739         b       .L1547
11740 .L1566:
11741         mov     w25, 0
11742 .L1546:
11743         adrp    x0, :got:c_ftl_nand_page_pre_blk
11744         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11745         ldrh    w0, [x0]
11746         cmp     w23, w0
11747         bne     .L1548
11748 .L1547:
11749         bl      FtlGcPageVarInit
11750 .L1548:
11751         mov     w22, -1
11752         mov     w20, 0
11753         mov     w21, 65535
11754         adrp    x24, :got:req_read
11755 .L1560:
11756         ldrh    w0, [x26]
11757         strb    wzr, [x26,8]
11758         cmp     w0, w21
11759         beq     .L1567
11760 .L1550:
11761 .L1563:
11762         adrp    x0, :got:c_ftl_nand_planes_num
11763         adrp    x1, :got:c_ftl_nand_byte_pre_oob
11764         mov     x2, x26
11765         mov     w27, 0
11766         mov     w10, 4
11767         adrp    x11, :got:p_gc_spare_buf
11768         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
11769         ldr     x1, [x1, #:got_lo12:c_ftl_nand_byte_pre_oob]
11770         ldrh    w6, [x0]
11771         ldrh    w9, [x1]
11772         add     x6, x26, x6, lsl 1
11773 .L1551:
11774         cmp     x2, x6
11775         beq     .L1575
11776         ldrh    w1, [x2,16]
11777         cmp     w1, w21
11778         beq     .L1552
11779         ldr     x8, [x24, #:got_lo12:req_read]
11780         mov     w0, 56
11781         orr     w1, w25, w1, lsl 10
11782         add     w5, w27, 1
11783         umull   x0, w27, w0
11784         ldr     x7, [x8]
11785         add     x7, x7, x0
11786         str     w1, [x7,4]
11787         ldr     x1, [x8]
11788         add     x0, x1, x0
11789         mul     w1, w27, w9
11790         uxth    w27, w5
11791         str     xzr, [x0,8]
11792         sdiv    w1, w1, w10
11793         ldr     x7, [x11, #:got_lo12:p_gc_spare_buf]
11794         ldr     x7, [x7]
11795         add     x1, x7, x1, sxtw 2
11796         str     x1, [x0,16]
11797 .L1552:
11798         add     x2, x2, 2
11799         b       .L1551
11800 .L1575:
11801         ldr     x0, [x24, #:got_lo12:req_read]
11802         mov     w1, w27
11803         mov     w2, 0
11804         mov     x28, 0
11805         ldr     x0, [x0]
11806         bl      FlashReadPages
11807 .L1554:
11808         cmp     w27, w28, uxth
11809         bls     .L1576
11810         mov     x0, 56
11811         mul     x6, x28, x0
11812         adrp    x0, :got:req_read
11813         str     x6, [x29,112]
11814         ldr     x8, [x0, #:got_lo12:req_read]
11815         str     x8, [x29,104]
11816         ldr     x0, [x8]
11817         add     x0, x0, x6
11818         ldr     w1, [x0,4]
11819         str     x1, [x29,120]
11820         lsr     w0, w1, 10
11821         bl      P2V_plane
11822         uxth    w2, w0
11823         ldr     x8, [x29,104]
11824         ldr     x6, [x29,112]
11825         ldr     x0, [x8]
11826         add     x8, x0, x6
11827         ldr     w6, [x0,x6]
11828         cbnz    w6, .L1555
11829         ldr     x6, [x8,16]
11830         add     x28, x28, 1
11831         ldr     x1, [x29,120]
11832         ldrh    w0, [x6]
11833         cmp     w0, w21
11834         bne     .L1556
11835         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
11836         mov     w1, 1
11837         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
11838         str     w1, [x0]
11839         b       .L1549
11840 .L1556:
11841         ldr     w0, [x6,12]
11842         ldr     w2, [x6,8]
11843         bl      FtlGcUpdatePage
11844         b       .L1554
11845 .L1555:
11846         adrp    x0, :got:g_inkDie_check_enable
11847         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
11848         ldr     w0, [x0]
11849         cbz     w0, .L1557
11850         adrp    x0, :got:p_erase_count_table
11851         ldrh    w1, [x26]
11852         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
11853         ldr     x0, [x0]
11854         ldrh    w0, [x0,x1,lsl 1]
11855         cmp     w0, 119
11856         bls     .L1558
11857 .L1557:
11858         cmn     w6, #1
11859         bne     .L1559
11860 .L1558:
11861         ldr     w22, [x8,4]
11862 .L1559:
11863         adrp    x0, :got:p_valid_page_count_table
11864         ldrh    w1, [x26]
11865         mov     w25, 0
11866         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
11867         ldr     x0, [x0]
11868         strh    wzr, [x0,x1,lsl 1]
11869         ldrh    w0, [x26]
11870         bl      INSERT_FREE_LIST
11871         mov     w0, -1
11872         strh    w0, [x26]
11873         bl      FtlGcPageVarInit
11874         b       .L1560
11875 .L1576:
11876         add     w20, w20, 1
11877         add     w3, w25, 1
11878         cmp     w20, w23
11879         adrp    x0, :got:c_ftl_nand_page_pre_blk
11880         uxth    w25, w3
11881         bcs     .L1562
11882 .L1564:
11883         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11884         ldrh    w0, [x0]
11885         cmp     w0, w25
11886         bhi     .L1563
11887         b       .L1567
11888 .L1562:
11889         add     x2, x19, :lo12:.LANCHOR2
11890         ldrh    w1, [x2,128]
11891         cmp     w1, w21
11892         beq     .L1564
11893         add     w1, w1, w20
11894         strh    w1, [x2,128]
11895         ldr     x1, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11896         ldrh    w1, [x1]
11897         cmp     w1, w25
11898         bls     .L1564
11899         b       .L1565
11900 .L1567:
11901         mov     w2, 0
11902 .L1549:
11903         add     x19, x19, :lo12:.LANCHOR2
11904         mov     w0, -1
11905         strh    w25, [x26,2]
11906         mov     w1, w25
11907         strb    w2, [x26,6]
11908         strh    w0, [x19,128]
11909         mov     x0, x26
11910         bl      ftl_sb_update_avl_pages
11911 .L1565:
11912         mov     w0, w22
11913         ldp     x19, x20, [sp,16]
11914         ldp     x21, x22, [sp,32]
11915         ldp     x23, x24, [sp,48]
11916         ldp     x25, x26, [sp,64]
11917         ldp     x27, x28, [sp,80]
11918         ldp     x29, x30, [sp], 128
11919         ret
11920         .size   FtlGcScanTempBlk, .-FtlGcScanTempBlk
11921         .align  2
11922         .global FlashProgPages
11923         .type   FlashProgPages, %function
11924 FlashProgPages:
11925         stp     x29, x30, [sp, -192]!
11926         add     x29, sp, 0
11927         stp     x19, x20, [sp,16]
11928         mov     x19, x0
11929         adrp    x0, :got:gpNandParaInfo
11930         stp     x21, x22, [sp,32]
11931         stp     x23, x24, [sp,48]
11932         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
11933         mov     w24, w1
11934         stp     x25, x26, [sp,64]
11935         stp     x27, x28, [sp,80]
11936         mov     w26, w2
11937         str     w3, [x29,120]
11938         ldr     x0, [x0]
11939         mov     w21, 0
11940         mov     w27, 56
11941         ldrb    w1, [x0,19]
11942         adrp    x0, :got:gNandParaInfo
11943         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
11944         ldrb    w28, [x0,9]
11945         add     x0, x29, 128
11946         str     x0, [x29,112]
11947         add     x0, x29, 132
11948         str     x0, [x29,104]
11949         sub     w0, w1, #1
11950         str     w0, [x29,100]
11951 .L1578:
11952         cmp     w21, w24
11953         adrp    x20, :got:gNandMaxDie
11954         bcs     .L1620
11955         umull   x20, w21, w27
11956         ldr     x2, [x29,112]
11957         mov     w1, w26
11958         add     x25, x19, x20
11959         ldr     x3, [x29,104]
11960         sub     w4, w24, w21
11961         mov     x0, x25
11962         bl      LogAddr2PhyAddr
11963         mov     w23, w0
11964         adrp    x1, :got:gNandMaxDie
11965         ldr     w0, [x29,132]
11966         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
11967         ldrb    w2, [x1]
11968         cmp     w0, w2
11969         bcc     .L1579
11970         mov     w0, -1
11971         str     w0, [x19,x20]
11972         b       .L1580
11973 .L1579:
11974         adrp    x1, :got:gMultiPageProgEn
11975         adrp    x22, :got:gDieOp
11976         ldr     x1, [x1, #:got_lo12:gMultiPageProgEn]
11977         ldr     x3, [x22, #:got_lo12:gDieOp]
11978         ldrb    w1, [x1]
11979         cmp     w1, wzr
11980         uxtw    x1, w0
11981         mov     x0, 24
11982         csel    w23, w23, wzr, ne
11983         madd    x0, x1, x0, x3
11984         ldr     x0, [x0,8]
11985         cbz     x0, .L1582
11986         cmp     w2, 1
11987         bne     .L1583
11988         adrp    x0, :got:gpNandc
11989         ldr     x0, [x0, #:got_lo12:gpNandc]
11990         ldr     x0, [x0]
11991         bl      NandcIqrWaitFlashReady
11992 .L1583:
11993         ldrb    w0, [x29,132]
11994         bl      FlashWaitCmdDone
11995 .L1582:
11996         ldr     x2, [x22, #:got_lo12:gDieOp]
11997         mov     x0, 24
11998         ldr     w1, [x29,132]
11999         madd    x0, x1, x0, x2
12000         ldr     w2, [x29,128]
12001         str     x25, [x0,8]
12002         str     xzr, [x0,16]
12003         str     w2, [x0,4]
12004         cbz     w23, .L1584
12005         add     w2, w21, 1
12006         umull   x2, w2, w27
12007         add     x2, x19, x2
12008         str     x2, [x0,16]
12009 .L1584:
12010         adrp    x0, :got:DieCsIndex
12011         ldr     x22, [x22, #:got_lo12:gDieOp]
12012         ldr     x0, [x0, #:got_lo12:DieCsIndex]
12013         ldrb    w20, [x0,x1]
12014         mov     x0, 24
12015         mul     x1, x1, x0
12016         adrp    x0, :got:gNandMaxDie
12017         strb    w20, [x22,x1]
12018         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
12019         ldrb    w0, [x0]
12020         cmp     w0, 1
12021         mov     w0, w20
12022         bne     .L1585
12023         bl      NandcWaitFlashReady
12024         b       .L1586
12025 .L1585:
12026         bl      NandcFlashCs
12027         adrp    x0, :got:DieAddrs
12028         ldr     w1, [x29,132]
12029         ldr     x0, [x0, #:got_lo12:DieAddrs]
12030         ldr     w0, [x0,x1,lsl 2]
12031         ldr     w1, [x29,128]
12032         cmp     w0, wzr
12033         mov     w0, w20
12034         cset    w2, ne
12035         bl      FlashWaitReadyEN
12036         mov     w0, w20
12037         bl      NandcFlashDeCs
12038 .L1586:
12039         ldr     w0, [x29,100]
12040         cmp     w0, 5
12041         bhi     .L1587
12042         adrp    x0, :got:read_retry_cur_offset
12043         ldr     x0, [x0, #:got_lo12:read_retry_cur_offset]
12044         ldrb    w0, [x0,w20,sxtw]
12045         cbz     w0, .L1587
12046         adrp    x2, :got:gReadRetryInfo
12047         mov     w0, w20
12048         mov     w3, 0
12049         ldr     x2, [x2, #:got_lo12:gReadRetryInfo]
12050         add     x2, x2, 4
12051         ldrb    w1, [x2,-3]
12052         bl      HynixSetRRPara
12053 .L1587:
12054         mov     w0, w20
12055         bl      NandcFlashCs
12056         ldr     w1, [x29,128]
12057         mov     w0, w20
12058         bl      FlashProgFirstCmd
12059         ldr     x3, [x25,8]
12060         mov     w0, w20
12061         ldr     x4, [x25,16]
12062         mov     w1, 1
12063         mov     w2, w28
12064         bl      NandcXferData
12065         cbz     w23, .L1588
12066         ldr     w1, [x29,128]
12067         mov     w0, w20
12068         bl      FlashProgDpFirstCmd
12069         adrp    x0, :got:DieAddrs
12070         ldr     w1, [x29,132]
12071         ldr     x0, [x0, #:got_lo12:DieAddrs]
12072         ldr     w0, [x0,x1,lsl 2]
12073         ldr     w1, [x29,128]
12074         cmp     w0, wzr
12075         mov     w0, w20
12076         cset    w2, ne
12077         bl      FlashWaitReadyEN
12078         adrp    x0, :got:gBlockPageAlignSize
12079         ldr     w1, [x29,128]
12080         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
12081         ldr     w2, [x0]
12082         mov     w0, w20
12083         add     w1, w2, w1
12084         bl      FlashProgDpSecondCmd
12085         add     w4, w21, 1
12086         mov     w0, w20
12087         mov     w1, 1
12088         mov     w2, w28
12089         umull   x4, w4, w27
12090         add     x4, x19, x4
12091         ldr     x3, [x4,8]
12092         ldr     x4, [x4,16]
12093         bl      NandcXferData
12094 .L1588:
12095         ldr     w1, [x29,128]
12096         mov     w0, w20
12097         add     w21, w21, w23
12098         bl      FlashProgSecondCmd
12099         mov     w0, w20
12100         bl      NandcFlashDeCs
12101 .L1580:
12102         add     w21, w21, 1
12103         b       .L1578
12104 .L1620:
12105         adrp    x0, :got:gpNandc
12106         mov     w21, 0
12107         ldr     x0, [x0, #:got_lo12:gpNandc]
12108         ldr     x0, [x0]
12109         bl      NandcIqrWaitFlashReady
12110 .L1590:
12111         ldr     x0, [x20, #:got_lo12:gNandMaxDie]
12112         ldrb    w0, [x0]
12113         cmp     w21, w0
12114         bcs     .L1621
12115         mov     w0, w21
12116         add     w21, w21, 1
12117         bl      FlashWaitCmdDone
12118         b       .L1590
12119 .L1621:
12120         ldr     w0, [x29,120]
12121         cbz     w0, .L1619
12122         adrp    x23, .LC101
12123         adrp    x25, .LC100
12124         adrp    x27, .LC99
12125         mov     w22, 0
12126         add     x23, x23, :lo12:.LC101
12127         add     x25, x25, :lo12:.LC100
12128         add     x27, x27, :lo12:.LC99
12129 .L1593:
12130         cmp     w22, w24
12131         beq     .L1619
12132         ldr     w0, [x19]
12133         cmn     w0, #1
12134         bne     .L1594
12135         adrp    x0, .LC98
12136         ldr     w1, [x19,4]
12137         add     x0, x0, :lo12:.LC98
12138         bl      printk
12139         b       .L1595
12140 .L1594:
12141         sub     w4, w24, w22
12142         mov     w1, w26
12143         add     x2, x29, 128
12144         add     x3, x29, 132
12145         mov     x0, x19
12146         adrp    x20, :got:gFlashProgCheckBuffer
12147         adrp    x21, :got:gFlashProgCheckSpareBuffer
12148         bl      LogAddr2PhyAddr
12149         ldr     x4, [x20, #:got_lo12:gFlashProgCheckBuffer]
12150         add     x3, x29, 136
12151         mov     x1, x19
12152         mov     x2, 56
12153         str     x4, [x29,120]
12154         ldr     x0, [x4]
12155         str     wzr, [x0]
12156         ldr     x28, [x21, #:got_lo12:gFlashProgCheckSpareBuffer]
12157         ldr     x0, [x28]
12158         str     wzr, [x0]
12159         mov     x0, x3
12160         bl      memcpy
12161         mov     x3, x0
12162         ldr     x4, [x29,120]
12163         mov     w1, 1
12164         mov     w2, w26
12165         ldr     x0, [x4]
12166         str     x0, [x29,144]
12167         ldr     x0, [x28]
12168         str     x0, [x29,152]
12169         mov     x0, x3
12170         bl      FlashReadPages
12171         ldr     w28, [x29,136]
12172         cmn     w28, #1
12173         bne     .L1596
12174         ldr     w1, [x19,4]
12175         mov     x0, x27
12176         bl      printk
12177         str     w28, [x19]
12178 .L1596:
12179         ldr     x0, [x19,16]
12180         cbz     x0, .L1597
12181         ldr     x21, [x21, #:got_lo12:gFlashProgCheckSpareBuffer]
12182         ldr     w2, [x0]
12183         ldr     x0, [x21]
12184         ldr     w3, [x0]
12185         cmp     w2, w3
12186         beq     .L1597
12187         ldr     w1, [x19,4]
12188         mov     x0, x25
12189         bl      printk
12190         mov     w0, -1
12191         str     w0, [x19]
12192 .L1597:
12193         ldr     x0, [x19,8]
12194         cbz     x0, .L1595
12195         ldr     x20, [x20, #:got_lo12:gFlashProgCheckBuffer]
12196         ldr     w2, [x0]
12197         ldr     x0, [x20]
12198         ldr     w3, [x0]
12199         cmp     w2, w3
12200         beq     .L1595
12201         ldr     w1, [x19,4]
12202         mov     x0, x23
12203         bl      printk
12204         mov     w0, -1
12205         str     w0, [x19]
12206 .L1595:
12207         add     w22, w22, 1
12208         add     x19, x19, 56
12209         b       .L1593
12210 .L1619:
12211         mov     w0, 0
12212         ldp     x19, x20, [sp,16]
12213         ldp     x21, x22, [sp,32]
12214         ldp     x23, x24, [sp,48]
12215         ldp     x25, x26, [sp,64]
12216         ldp     x27, x28, [sp,80]
12217         ldp     x29, x30, [sp], 192
12218         ret
12219         .size   FlashProgPages, .-FlashProgPages
12220         .align  2
12221         .type   FlashTestBlk.part.19, %function
12222 FlashTestBlk.part.19:
12223         stp     x29, x30, [sp, -176]!
12224         mov     w1, 165
12225         mov     w2, 32
12226         add     x29, sp, 0
12227         stp     x19, x20, [sp,16]
12228         adrp    x20, :got:gFlashPageBuffer1
12229         str     x21, [sp,32]
12230         uxth    w21, w0
12231         add     x19, x29, 56
12232         lsl     w21, w21, 10
12233         ldr     x20, [x20, #:got_lo12:gFlashPageBuffer1]
12234         ldr     x0, [x20]
12235         str     x0, [x29,64]
12236         add     x0, x29, 112
12237         str     x0, [x29,72]
12238         bl      ftl_memset
12239         ldr     x0, [x20]
12240         mov     w2, 8
12241         mov     w1, 90
12242         bl      ftl_memset
12243         str     w21, [x29,60]
12244         mov     x0, x19
12245         mov     w1, 1
12246         bl      FlashEraseBlocks
12247         mov     w1, 1
12248         mov     x0, x19
12249         mov     w2, w1
12250         mov     w3, w1
12251         bl      FlashProgPages
12252         ldr     w0, [x29,56]
12253         mov     w1, 1
12254         cmn     w0, #1
12255         mov     x0, x19
12256         csetm   w20, eq
12257         bl      FlashEraseBlocks
12258         ldr     x21, [sp,32]
12259         mov     w0, w20
12260         ldp     x19, x20, [sp,16]
12261         ldp     x29, x30, [sp], 176
12262         ret
12263         .size   FlashTestBlk.part.19, .-FlashTestBlk.part.19
12264         .align  2
12265         .global FlashTestBlk
12266         .type   FlashTestBlk, %function
12267 FlashTestBlk:
12268         adrp    x1, :got:gNandFlashIdbBlockAddr
12269         uxth    w2, w0
12270         stp     x29, x30, [sp, -16]!
12271         mov     w0, 0
12272         add     x29, sp, 0
12273         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
12274         ldr     w1, [x1]
12275         cmp     w2, w1
12276         bcc     .L1624
12277         mov     w0, w2
12278         bl      FlashTestBlk.part.19
12279 .L1624:
12280         ldp     x29, x30, [sp], 16
12281         ret
12282         .size   FlashTestBlk, .-FlashTestBlk
12283         .align  2
12284         .global FlashMakeFactorBbt
12285         .type   FlashMakeFactorBbt, %function
12286 FlashMakeFactorBbt:
12287         adrp    x5, :got:gFlashSpareBuffer
12288         adrp    x4, :got:gNandPhyInfo
12289         stp     x29, x30, [sp, -256]!
12290         adrp    x3, :got:gpNandParaInfo
12291         adrp    x2, :got:gBlockPageAlignSize
12292         add     x29, sp, 0
12293         ldr     x0, [x5, #:got_lo12:gFlashSpareBuffer]
12294         stp     x19, x20, [sp,16]
12295         stp     x21, x22, [sp,32]
12296         stp     x23, x24, [sp,48]
12297         stp     x25, x26, [sp,64]
12298         stp     x27, x28, [sp,80]
12299         ldr     x1, [x4, #:got_lo12:gNandPhyInfo]
12300         mov     w19, 0
12301         ldr     x0, [x0]
12302         str     x0, [x29,184]
12303         ldrh    w22, [x1,14]
12304         ldrh    w0, [x1,12]
12305         adrp    x1, :got:g_slc2KBNand
12306         str     x1, [x29,128]
12307         str     x5, [x29,160]
12308         mul     w22, w0, w22
12309         ldr     x0, [x3, #:got_lo12:gpNandParaInfo]
12310         str     x4, [x29,168]
12311         str     x3, [x29,152]
12312         uxth    w22, w22
12313         ldr     x0, [x0]
12314         str     x2, [x29,136]
12315         ldrb    w0, [x0,24]
12316         str     w0, [x29,180]
12317         ldr     x0, [x2, #:got_lo12:gBlockPageAlignSize]
12318         ldrh    w25, [x0]
12319         ldr     x0, [x1, #:got_lo12:g_slc2KBNand]
12320         ubfiz   w1, w25, 1, 15
12321         ldrb    w0, [x0]
12322         cmp     w0, 1
12323         adrp    x0, .LC102
12324         csel    w25, w1, w25, eq
12325         add     x0, x0, :lo12:.LC102
12326         mov     w1, 1
12327         bl      printk
12328         ldr     x0, [x29,160]
12329         mov     w1, 0
12330         mov     w2, 4096
12331         ldr     x0, [x0, #:got_lo12:gFlashSpareBuffer]
12332         ldr     x0, [x0]
12333         bl      ftl_memset
12334         lsr     w0, w22, 4
12335         str     w0, [x29,176]
12336         ldr     w0, [x29,180]
12337         and     w0, w0, 1
12338         str     w0, [x29,112]
12339         ldr     w0, [x29,180]
12340         and     w0, w0, 2
12341         uxtb    w0, w0
12342         str     w0, [x29,108]
12343         sub     w0, w22, #1
12344         uxth    w0, w0
12345         str     w0, [x29,104]
12346 .L1628:
12347         adrp    x0, :got:gNandMaxDie
12348         str     x0, [x29,144]
12349         ldr     x1, [x0, #:got_lo12:gNandMaxDie]
12350         ldrb    w1, [x1]
12351         cmp     w1, w19
12352         bls     .L1673
12353         adrp    x0, :got:FbbtBlk
12354         str     x0, [x29,120]
12355         sxtw    x24, w19
12356         ldr     x1, [x0, #:got_lo12:FbbtBlk]
12357         ldrh    w20, [x1,w19,sxtw 1]
12358         cbnz    w20, .L1655
12359         ldr     x1, [x29,168]
12360         adrp    x21, :got:gFlashPageBuffer0
12361         mov     w26, w20
12362         mov     w23, w20
12363         ldr     x1, [x1, #:got_lo12:gNandPhyInfo]
12364         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12365         ldrh    w2, [x1,20]
12366         mov     w1, w20
12367         ldr     x0, [x0]
12368         lsl     w2, w2, 9
12369         bl      ftl_memset
12370         adrp    x0, :got:DieCsIndex
12371         ldr     x0, [x0, #:got_lo12:DieCsIndex]
12372         ldrb    w27, [x0,x24]
12373         ldr     w0, [x29,180]
12374         and     w0, w0, 4
12375         uxtb    w0, w0
12376         str     w0, [x29,116]
12377 .L1630:
12378         uxth    w28, w26
12379         cmp     w28, w22
12380         bcs     .L1640
12381         mov     w0, -1
12382         strb    w0, [x29,198]
12383         strb    w0, [x29,199]
12384         ldr     w0, [x29,112]
12385         cbz     w0, .L1632
12386         adrp    x0, :got:DieAddrs
12387         add     x2, x29, 198
12388         ldr     x0, [x0, #:got_lo12:DieAddrs]
12389         ldr     w3, [x0,x24,lsl 2]
12390         mov     w0, w27
12391         add     w3, w20, w3
12392         str     x3, [x29,96]
12393         mov     w1, w3
12394         bl      FlashReadSpare
12395         ldr     x0, [x29,128]
12396         ldr     x3, [x29,96]
12397         ldr     x0, [x0, #:got_lo12:g_slc2KBNand]
12398         ldrb    w0, [x0]
12399         cmp     w0, 1
12400         bne     .L1632
12401         ldr     x0, [x29,136]
12402         add     x2, x29, 199
12403         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
12404         ldr     w1, [x0]
12405         mov     w0, w27
12406         add     w1, w3, w1
12407         bl      FlashReadSpare
12408         ldrb    w0, [x29,198]
12409         ldrb    w1, [x29,199]
12410         and     w0, w1, w0
12411         strb    w0, [x29,198]
12412 .L1632:
12413         ldr     w0, [x29,108]
12414         cbz     w0, .L1634
12415         ldr     x0, [x29,152]
12416         add     x2, x29, 199
12417         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
12418         ldr     x0, [x0]
12419         ldrh    w1, [x0,10]
12420         adrp    x0, :got:DieAddrs
12421         sub     w1, w1, #1
12422         ldr     x0, [x0, #:got_lo12:DieAddrs]
12423         ldr     w0, [x0,x24,lsl 2]
12424         add     w1, w1, w0
12425         mov     w0, w27
12426         add     w1, w1, w20
12427         bl      FlashReadSpare
12428 .L1634:
12429         ldr     x0, [x29,152]
12430         ldrb    w1, [x29,198]
12431         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
12432         ldr     x0, [x0]
12433         ldrb    w0, [x0,7]
12434         cmp     w0, 8
12435         beq     .L1656
12436         cmp     w0, 1
12437         bne     .L1635
12438 .L1656:
12439         mov     w0, 1
12440         cbz     w1, .L1637
12441         ldrb    w0, [x29,199]
12442         cmp     w0, wzr
12443         cset    w0, eq
12444         b       .L1637
12445 .L1635:
12446         cmp     w1, 255
12447         mov     w0, 1
12448         bne     .L1637
12449         ldrb    w0, [x29,199]
12450         cmp     w0, 255
12451         cset    w0, ne
12452 .L1637:
12453         ldr     w1, [x29,116]
12454         cbz     w1, .L1638
12455         adrp    x0, :got:DieAddrs
12456         ldr     x0, [x0, #:got_lo12:DieAddrs]
12457         ldr     w1, [x0,x24,lsl 2]
12458         mov     w0, w27
12459         add     w1, w20, w1
12460         bl      SandiskProgTestBadBlock
12461 .L1638:
12462         cbz     w0, .L1639
12463         adrp    x0, .LC103
12464         mov     w1, w19
12465         mov     w2, w26
12466         add     x0, x0, :lo12:.LC103
12467         add     w23, w23, 1
12468         bl      printk
12469         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12470         ubfx    x1, x28, 5, 11
12471         lsl     x1, x1, 2
12472         uxth    w23, w23
12473         ldr     x2, [x0]
12474         mov     w0, 1
12475         lsl     w28, w0, w28
12476         ldr     w0, [x2,x1]
12477         orr     w28, w0, w28
12478         ldr     x0, [x29,144]
12479         str     w28, [x2,x1]
12480         ldr     w1, [x29,176]
12481         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
12482         ldrb    w0, [x0]
12483         mul     w0, w1, w0
12484         cmp     w23, w0
12485         bgt     .L1640
12486 .L1639:
12487         add     w26, w26, 1
12488         add     w20, w20, w25
12489         b       .L1630
12490 .L1640:
12491         adrp    x0, .LC104
12492         mov     w1, w19
12493         add     x0, x0, :lo12:.LC104
12494         mov     w2, w23
12495         bl      printk
12496         ldr     x0, [x29,144]
12497         ldr     w1, [x29,176]
12498         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
12499         ldrb    w0, [x0]
12500         mul     w0, w1, w0
12501         cmp     w23, w0
12502         blt     .L1642
12503         ldr     x1, [x29,168]
12504         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12505         ldr     x1, [x1, #:got_lo12:gNandPhyInfo]
12506         ldr     x0, [x0]
12507         ldrh    w2, [x1,20]
12508         mov     w1, 0
12509         lsl     w2, w2, 9
12510         bl      ftl_memset
12511 .L1642:
12512         cbnz    w19, .L1644
12513         adrp    x27, :got:gNandFlashIdbBlockAddr
12514         adrp    x23, .LC105
12515         mov     w20, w19
12516         adrp    x26, :got:gNandIDBResBlkNum
12517         add     x23, x23, :lo12:.LC105
12518         ldr     x0, [x27, #:got_lo12:gNandFlashIdbBlockAddr]
12519         ldrh    w28, [x0]
12520 .L1645:
12521         ldr     x0, [x26, #:got_lo12:gNandIDBResBlkNum]
12522         ldrb    w0, [x0]
12523         cmp     w28, w0
12524         bcs     .L1674
12525         mov     w0, w28
12526         bl      FlashTestBlk
12527         cbz     w0, .L1646
12528         mov     w1, w28
12529         mov     x0, x23
12530         bl      printk
12531         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12532         ubfx    x1, x28, 5, 11
12533         lsl     x1, x1, 2
12534         add     w2, w20, 1
12535         ldr     x3, [x0]
12536         mov     w0, 1
12537         lsl     w0, w0, w28
12538         uxth    w20, w2
12539         ldr     w4, [x3,x1]
12540         orr     w0, w4, w0
12541         str     w0, [x3,x1]
12542 .L1646:
12543         add     w28, w28, 1
12544         uxth    w28, w28
12545         b       .L1645
12546 .L1674:
12547         ldr     x27, [x27, #:got_lo12:gNandFlashIdbBlockAddr]
12548         ldr     w1, [x27]
12549         sub     w0, w0, w1
12550         cmp     w20, w0
12551         bcc     .L1644
12552         ldr     x1, [x29,168]
12553         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12554         ldr     x1, [x1, #:got_lo12:gNandPhyInfo]
12555         ldr     x0, [x0]
12556         ldrh    w2, [x1,20]
12557         mov     w1, 0
12558         lsl     w2, w2, 9
12559         bl      ftl_memset
12560 .L1644:
12561         adrp    x23, .LC106
12562         ldr     w27, [x29,104]
12563         mul     w26, w19, w22
12564         add     x23, x23, :lo12:.LC106
12565         mov     w20, -3872
12566         add     x28, x29, 200
12567 .L1649:
12568         mov     w2, w27
12569         mov     x0, x23
12570         mov     w1, w19
12571         bl      printk
12572         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12573         ldr     x2, [x0]
12574 .L1650:
12575         ubfx    x0, x27, 5, 11
12576         ldr     w1, [x2,x0,lsl 2]
12577         lsr     w1, w1, w27
12578         and     w0, w1, 1
12579         tbz     x1, 0, .L1675
12580         sub     w27, w27, #1
12581         uxth    w27, w27
12582         b       .L1650
12583 .L1675:
12584         ldr     x1, [x29,120]
12585         ldr     x1, [x1, #:got_lo12:FbbtBlk]
12586         strh    w27, [x1,x24,lsl 1]
12587         ldr     x1, [x29,184]
12588         strh    w20, [x1]
12589         strh    w27, [x1,2]
12590         strh    w0, [x1,8]
12591         add     w1, w27, w26
12592         lsl     w1, w1, 10
12593         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12594         ldr     x0, [x0]
12595         str     x0, [x28,8]
12596         ldr     x0, [x29,160]
12597         ldr     x0, [x0, #:got_lo12:gFlashSpareBuffer]
12598         str     w1, [x28,4]
12599         mov     w1, 1
12600         ldr     x0, [x0]
12601         str     x0, [x28,16]
12602         mov     x0, x28
12603         bl      FlashEraseBlocks
12604         mov     w1, 1
12605         mov     x0, x28
12606         mov     w2, w1
12607         mov     w3, w1
12608         bl      FlashProgPages
12609         ldr     w0, [x28]
12610         cbz     w0, .L1655
12611         sub     w27, w27, #1
12612         uxth    w27, w27
12613         b       .L1649
12614 .L1655:
12615         add     w19, w19, 1
12616         uxtb    w19, w19
12617         b       .L1628
12618 .L1673:
12619         ldp     x19, x20, [sp,16]
12620         ldp     x21, x22, [sp,32]
12621         ldp     x23, x24, [sp,48]
12622         ldp     x25, x26, [sp,64]
12623         ldp     x27, x28, [sp,80]
12624         ldp     x29, x30, [sp], 256
12625         ret
12626         .size   FlashMakeFactorBbt, .-FlashMakeFactorBbt
12627         .align  2
12628         .global FtlLowFormatEraseBlock
12629         .type   FtlLowFormatEraseBlock, %function
12630 FtlLowFormatEraseBlock:
12631         stp     x29, x30, [sp, -128]!
12632         add     x29, sp, 0
12633         stp     x21, x22, [sp,32]
12634         uxth    w21, w0
12635         adrp    x0, :got:g_cur_erase_blk
12636         stp     x19, x20, [sp,16]
12637         stp     x23, x24, [sp,48]
12638         ldr     x0, [x0, #:got_lo12:g_cur_erase_blk]
12639         uxtb    w23, w1
12640         stp     x25, x26, [sp,64]
12641         stp     x27, x28, [sp,80]
12642         mov     w25, 0
12643         str     w21, [x0]
12644         mov     w20, w25
12645         mov     w19, w25
12646         mov     w24, 56
12647         adrp    x26, :got:p_plane_order_table
12648         adrp    x27, :got:c_ftl_nand_byte_pre_oob
12649         mov     w28, 4
12650 .L1677:
12651         adrp    x0, :got:c_ftl_nand_planes_num
12652         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
12653         ldrh    w0, [x0]
12654         cmp     w0, w25
12655         bls     .L1715
12656         adrp    x1, :got:req_erase
12657         umull   x0, w25, w24
12658         ldr     x1, [x1, #:got_lo12:req_erase]
12659         ldr     x1, [x1]
12660         str     wzr, [x1,x0]
12661         mov     w1, w21
12662         ldr     x0, [x26, #:got_lo12:p_plane_order_table]
12663         ldrb    w0, [x0,w25,sxtw]
12664         bl      V2P_block
12665         uxth    w22, w0
12666         mov     w1, w22
12667         cbnz    w23, .L1678
12668 .L1682:
12669         mov     w0, w1
12670         bl      FtlBbmIsBadBlock
12671         cbnz    w0, .L1716
12672         adrp    x1, :got:req_erase
12673         lsl     w22, w22, 10
12674         umull   x0, w20, w24
12675         ldr     x1, [x1, #:got_lo12:req_erase]
12676         ldr     x3, [x1]
12677         add     x3, x3, x0
12678         str     w22, [x3,4]
12679         adrp    x3, :got:p_io_spare_buf
12680         ldr     x1, [x1]
12681         add     x1, x1, x0
12682         str     xzr, [x1,8]
12683         ldr     x0, [x27, #:got_lo12:c_ftl_nand_byte_pre_oob]
12684         ldr     x3, [x3, #:got_lo12:p_io_spare_buf]
12685         ldrh    w0, [x0]
12686         ldr     x3, [x3]
12687         mul     w0, w20, w0
12688         add     w20, w20, 1
12689         sdiv    w0, w0, w28
12690         uxth    w20, w20
12691         add     x0, x3, x0, sxtw 2
12692         str     x0, [x1,16]
12693         b       .L1681
12694 .L1678:
12695         str     x1, [x29,120]
12696         bl      IsBlkInVendorPart
12697         ldr     x1, [x29,120]
12698         cbnz    w0, .L1681
12699         b       .L1682
12700 .L1716:
12701         add     w19, w19, 1
12702         uxth    w19, w19
12703 .L1681:
12704         add     w2, w25, 1
12705         uxth    w25, w2
12706         b       .L1677
12707 .L1715:
12708         cbz     w20, .L1685
12709         adrp    x22, :got:req_erase
12710         mov     w1, w20
12711         mov     x24, 0
12712         mov     x25, 56
12713         ldr     x0, [x22, #:got_lo12:req_erase]
12714         ldr     x0, [x0]
12715         bl      FlashEraseBlocks
12716 .L1686:
12717         cmp     w20, w24, uxth
12718         bls     .L1717
12719         ldr     x1, [x22, #:got_lo12:req_erase]
12720         mul     x0, x24, x25
12721         ldr     x1, [x1]
12722         add     x2, x1, x0
12723         ldr     w0, [x1,x0]
12724         cmn     w0, #1
12725         bne     .L1687
12726         ldr     w0, [x2,4]
12727         add     w19, w19, 1
12728         lsr     w0, w0, 10
12729         uxth    w19, w19
12730         bl      FtlBbmMapBadBlock
12731 .L1687:
12732         add     x24, x24, 1
12733         b       .L1686
12734 .L1717:
12735         cmp     w23, wzr
12736         cset    w26, ne
12737         cbz     w26, .L1703
12738         adrp    x0, :got:g_inkDie_check_enable
12739         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
12740         ldr     w0, [x0]
12741         cbz     w0, .L1703
12742         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
12743         mov     w23, 5
12744         mov     w27, 1
12745         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
12746         ldrh    w25, [x0]
12747         udiv    w23, w25, w23
12748         sub     w23, w23, #1
12749         uxth    w0, w23
12750         str     w0, [x29,120]
12751         b       .L1689
12752 .L1703:
12753         mov     w0, 6
12754         mov     w27, 0
12755         str     w0, [x29,120]
12756         mov     w25, 1
12757 .L1689:
12758         mov     w24, 0
12759         mov     w28, 56
12760 .L1701:
12761         mov     w23, 0
12762         mov     w20, w23
12763 .L1690:
12764         adrp    x0, :got:c_ftl_nand_planes_num
12765         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
12766         ldrh    w0, [x0]
12767         cmp     w0, w23
12768         bls     .L1718
12769         ldr     x1, [x22, #:got_lo12:req_erase]
12770         umull   x0, w23, w28
12771         ldr     x1, [x1]
12772         str     wzr, [x1,x0]
12773         adrp    x0, :got:p_plane_order_table
12774         mov     w1, w21
12775         ldr     x0, [x0, #:got_lo12:p_plane_order_table]
12776         ldrb    w0, [x0,w23,sxtw]
12777         bl      V2P_block
12778         uxth    w2, w0
12779         str     w2, [x29,116]
12780         mov     w1, w2
12781         cbnz    w26, .L1691
12782 .L1694:
12783         mov     w0, w1
12784         bl      FtlBbmIsBadBlock
12785         cbnz    w0, .L1693
12786         ldr     x4, [x22, #:got_lo12:req_erase]
12787         umull   x0, w20, w28
12788         ldr     w2, [x29,116]
12789         ldr     x1, [x4]
12790         add     x1, x1, x0
12791         add     w3, w24, w2, lsl 10
12792         mov     w2, 4
12793         str     w3, [x1,4]
12794         ldr     x1, [x4]
12795         add     x1, x1, x0
12796         adrp    x0, :got:p_io_data_buf_0
12797         ldr     x0, [x0, #:got_lo12:p_io_data_buf_0]
12798         ldr     x0, [x0]
12799         str     x0, [x1,8]
12800         adrp    x0, :got:c_ftl_nand_byte_pre_oob
12801         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
12802         ldrh    w0, [x0]
12803         mul     w0, w20, w0
12804         add     w20, w20, 1
12805         sdiv    w0, w0, w2
12806         adrp    x2, :got:p_io_data_buf_1
12807         uxth    w20, w20
12808         ldr     x3, [x2, #:got_lo12:p_io_data_buf_1]
12809         ldr     x3, [x3]
12810         add     x0, x3, x0, sxtw 2
12811         str     x0, [x1,16]
12812         b       .L1693
12813 .L1691:
12814         str     x1, [x29,104]
12815         bl      IsBlkInVendorPart
12816         ldr     x1, [x29,104]
12817         cbz     w0, .L1694
12818 .L1693:
12819         add     w2, w23, 1
12820         uxth    w23, w2
12821         b       .L1690
12822 .L1718:
12823         cbz     w20, .L1685
12824         ldr     x0, [x22, #:got_lo12:req_erase]
12825         mov     w1, w20
12826         mov     w2, w27
12827         mov     w3, 1
12828         mov     x23, 0
12829         ldr     x0, [x0]
12830         bl      FlashProgPages
12831 .L1697:
12832         cmp     w20, w23, uxth
12833         bls     .L1719
12834         ldr     x1, [x22, #:got_lo12:req_erase]
12835         mov     x0, 56
12836         mul     x0, x23, x0
12837         ldr     x3, [x1]
12838         add     x1, x3, x0
12839         ldr     w0, [x3,x0]
12840         cmn     w0, #1
12841         bne     .L1698
12842         ldr     w0, [x1,4]
12843         add     w19, w19, 1
12844         lsr     w0, w0, 10
12845         uxth    w19, w19
12846         bl      FtlBbmMapBadBlock
12847         b       .L1699
12848 .L1698:
12849         cbz     w26, .L1699
12850         ldr     w0, [x1,4]
12851         mov     w1, 1
12852         lsr     w0, w0, 10
12853         bl      FtlFreeSysBlkQueueIn
12854 .L1699:
12855         add     x23, x23, 1
12856         b       .L1697
12857 .L1719:
12858         ldr     w0, [x29,120]
12859         add     w24, w24, w0
12860         uxth    w24, w24
12861         cmp     w24, w25
12862         bcc     .L1701
12863         cmp     w21, 63
12864         bhi     .L1685
12865         ldr     x22, [x22, #:got_lo12:req_erase]
12866         mov     w1, w20
12867         ldr     x0, [x22]
12868         bl      FlashEraseBlocks
12869 .L1685:
12870         mov     w0, w19
12871         ldp     x19, x20, [sp,16]
12872         ldp     x21, x22, [sp,32]
12873         ldp     x23, x24, [sp,48]
12874         ldp     x25, x26, [sp,64]
12875         ldp     x27, x28, [sp,80]
12876         ldp     x29, x30, [sp], 128
12877         ret
12878         .size   FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock
12879         .align  2
12880         .global FtlBbmTblFlush
12881         .type   FtlBbmTblFlush, %function
12882 FtlBbmTblFlush:
12883         stp     x29, x30, [sp, -112]!
12884         add     x29, sp, 0
12885         stp     x21, x22, [sp,32]
12886         adrp    x21, :got:p_sys_data_buf
12887         adrp    x22, :got:p_sys_spare_buf
12888         stp     x19, x20, [sp,16]
12889         adrp    x20, :got:req_sys
12890         mov     x19, 0
12891         ldr     x0, [x21, #:got_lo12:p_sys_data_buf]
12892         stp     x25, x26, [sp,64]
12893         stp     x23, x24, [sp,48]
12894         stp     x27, x28, [sp,80]
12895         ldr     x1, [x20, #:got_lo12:req_sys]
12896         adrp    x24, :got:c_ftl_nand_die_num
12897         ldr     x0, [x0]
12898         adrp    x25, :got:gBbtInfo
12899         adrp    x26, :got:c_ftl_nand_bbm_buf_size
12900         str     x0, [x1,8]
12901         ldr     x2, [x22, #:got_lo12:p_sys_spare_buf]
12902         ldr     x2, [x2]
12903         str     x2, [x1,16]
12904         adrp    x2, :got:c_ftl_nand_byte_pre_page
12905         mov     w1, 0
12906         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
12907         ldrh    w2, [x2]
12908         bl      ftl_memset
12909         str     x21, [x29,104]
12910         str     x22, [x29,96]
12911 .L1721:
12912         ldr     x1, [x24, #:got_lo12:c_ftl_nand_die_num]
12913         mov     w0, w19
12914         adrp    x23, :got:gBbtInfo
12915         add     x19, x19, 1
12916         ldrh    w1, [x1]
12917         cmp     w0, w1
12918         bge     .L1728
12919         ldr     x1, [x26, #:got_lo12:c_ftl_nand_bbm_buf_size]
12920         ldrh    w2, [x1]
12921         ldr     x1, [x20, #:got_lo12:req_sys]
12922         mul     w0, w0, w2
12923         ldr     x3, [x1,8]
12924         lsl     w2, w2, 2
12925         ldr     x1, [x25, #:got_lo12:gBbtInfo]
12926         add     x0, x3, x0, sxtw 2
12927         add     x1, x1, x19, lsl 3
12928         ldr     x1, [x1,24]
12929         bl      ftl_memcpy
12930         b       .L1721
12931 .L1728:
12932         ldr     x0, [x20, #:got_lo12:req_sys]
12933         mov     w1, 255
12934         mov     w2, 16
12935         adrp    x24, .LC107
12936         adrp    x25, .LC108
12937         mov     w26, 0
12938         ldr     x21, [x0,16]
12939         add     x24, x24, :lo12:.LC107
12940         adrp    x27, :got:c_ftl_nand_page_pre_slc_blk
12941         adrp    x28, :got:req_erase
12942         mov     x0, x21
12943         add     x25, x25, :lo12:.LC108
12944         bl      ftl_memset
12945         mov     w0, -3887
12946         strh    w0, [x21]
12947         ldr     x0, [x23, #:got_lo12:gBbtInfo]
12948         ldr     w1, [x0,8]
12949         str     w1, [x21,4]
12950         ldrh    w1, [x0]
12951         strh    w1, [x21,2]
12952         ldrh    w1, [x0,4]
12953         ldrh    w0, [x0,6]
12954         strh    w0, [x21,10]
12955         adrp    x0, :got:c_ftl_nand_sys_blks_per_plane
12956         strh    w1, [x21,8]
12957         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
12958         ldr     w0, [x0]
12959         strh    w0, [x21,12]
12960 .L1723:
12961         ldr     x0, [x29,104]
12962         ldr     x22, [x20, #:got_lo12:req_sys]
12963         ldr     x0, [x0, #:got_lo12:p_sys_data_buf]
12964         ldr     x0, [x0]
12965         str     x0, [x22,8]
12966         ldr     x0, [x29,96]
12967         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
12968         str     wzr, [x22]
12969         ldr     x0, [x0]
12970         str     x0, [x22,16]
12971         ldr     x19, [x23, #:got_lo12:gBbtInfo]
12972         ldrh    w4, [x21,10]
12973         ldrh    w1, [x19]
12974         ldrh    w2, [x19,2]
12975         ldrh    w3, [x19,4]
12976         orr     w0, w2, w1, lsl 10
12977         str     w0, [x22,4]
12978         mov     x0, x24
12979         bl      printk
12980         mov     w1, 1
12981         mov     x0, x22
12982         mov     w2, w1
12983         mov     w3, w1
12984         bl      FlashProgPages
12985         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
12986         ldrh    w1, [x19,2]
12987         ldrh    w0, [x0]
12988         sub     w0, w0, #1
12989         cmp     w1, w0
12990         blt     .L1724
12991         ldr     w0, [x19,8]
12992         ldrh    w1, [x19]
12993         add     w0, w0, 1
12994         str     w0, [x19,8]
12995         str     w0, [x21,4]
12996         strh    w1, [x21,8]
12997         ldrh    w0, [x19,4]
12998         strh    w0, [x19]
12999         strh    w1, [x19,4]
13000         lsl     w0, w0, 10
13001         strh    wzr, [x19,2]
13002         str     w0, [x22,4]
13003         ldr     x1, [x28, #:got_lo12:req_erase]
13004         ldr     x2, [x1]
13005         str     w0, [x2,4]
13006         ldr     x0, [x1]
13007         mov     w1, 1
13008         bl      FlashEraseBlocks
13009         mov     w1, 1
13010         mov     x0, x22
13011         mov     w2, w1
13012         mov     w3, w1
13013         bl      FlashProgPages
13014 .L1724:
13015         bl      FtlBbtInfoPrint
13016         ldr     x1, [x23, #:got_lo12:gBbtInfo]
13017         ldrh    w0, [x1,2]
13018         add     w0, w0, 1
13019         strh    w0, [x1,2]
13020         ldr     x1, [x20, #:got_lo12:req_sys]
13021         ldr     w0, [x1]
13022         cmn     w0, #1
13023         bne     .L1725
13024         ldr     w1, [x1,4]
13025         mov     x0, x25
13026         bl      printk
13027         b       .L1723
13028 .L1725:
13029         cbnz    w26, .L1729
13030         mov     w26, 1
13031         b       .L1723
13032 .L1729:
13033         mov     w0, 0
13034         ldp     x19, x20, [sp,16]
13035         ldp     x21, x22, [sp,32]
13036         ldp     x23, x24, [sp,48]
13037         ldp     x25, x26, [sp,64]
13038         ldp     x27, x28, [sp,80]
13039         ldp     x29, x30, [sp], 112
13040         ret
13041         .size   FtlBbmTblFlush, .-FtlBbmTblFlush
13042         .align  2
13043         .global allocate_data_superblock
13044         .type   allocate_data_superblock, %function
13045 allocate_data_superblock:
13046         stp     x29, x30, [sp, -128]!
13047         add     x29, sp, 0
13048         stp     x19, x20, [sp,16]
13049         stp     x21, x22, [sp,32]
13050         stp     x23, x24, [sp,48]
13051         stp     x25, x26, [sp,64]
13052         stp     x27, x28, [sp,80]
13053         mov     x19, x0
13054         adrp    x20, :got:g_num_free_superblocks
13055         adrp    x24, :got:c_ftl_nand_type
13056         adrp    x21, :got:g_inkDie_check_enable
13057         adrp    x22, :got:g_min_erase_count
13058 .L1731:
13059         adrp    x0, :got:g_gc_temp_superblock
13060         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
13061         cmp     x19, x0
13062         bne     .L1732
13063         ldr     x0, [x20, #:got_lo12:g_num_free_superblocks]
13064         ldrh    w2, [x0]
13065         adrp    x0, :got:g_in_swl_replace
13066         lsr     w3, w2, 1
13067         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
13068         add     w1, w3, 1
13069         ldr     w4, [x0]
13070         mul     w0, w2, w4
13071         add     w1, w1, w0, lsr 2
13072         ldr     x0, [x21, #:got_lo12:g_inkDie_check_enable]
13073         uxth    w1, w1
13074         ldr     w0, [x0]
13075         cbz     w0, .L1733
13076         ldr     x0, [x22, #:got_lo12:g_min_erase_count]
13077         ldr     w0, [x0]
13078         cmp     w0, 29
13079         bhi     .L1733
13080         cmp     w0, 2
13081         mov     w1, 0
13082         bls     .L1734
13083         tbz     x2, 0, .L1758
13084         cbz     w4, .L1734
13085 .L1758:
13086         mov     w1, w3
13087         b       .L1733
13088 .L1732:
13089         ldrb    w0, [x19,8]
13090         mov     w1, 0
13091         cmp     w0, 1
13092         bne     .L1734
13093         ldr     x0, [x24, #:got_lo12:c_ftl_nand_type]
13094         ldrh    w0, [x0]
13095         cmp     w0, 1
13096         beq     .L1734
13097         ldr     x2, [x21, #:got_lo12:g_inkDie_check_enable]
13098         ldr     x0, [x20, #:got_lo12:g_num_free_superblocks]
13099         ldr     w2, [x2]
13100         ldrh    w0, [x0]
13101         lsr     w1, w0, 3
13102         cbz     w2, .L1733
13103         ldr     x2, [x22, #:got_lo12:g_min_erase_count]
13104         ldr     w2, [x2]
13105         cmp     w2, 1
13106         bhi     .L1733
13107         mov     w1, 7
13108         mul     w1, w0, w1
13109         lsr     w1, w1, 3
13110 .L1733:
13111         cbz     w1, .L1734
13112         sub     w1, w1, #1
13113         uxth    w1, w1
13114 .L1734:
13115         adrp    x0, :got:p_free_data_block_list_head
13116         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
13117         bl      List_pop_index_node
13118         uxth    w26, w0
13119         ldr     x1, [x20, #:got_lo12:g_num_free_superblocks]
13120         ldrh    w0, [x1]
13121         sub     w0, w0, #1
13122         strh    w0, [x1]
13123         strh    w26, [x19]
13124         mov     x0, x19
13125         bl      make_superblock
13126         ldrb    w0, [x19,7]
13127         cbz     w0, .L1736
13128         adrp    x0, :got:c_ftl_nand_planes_num
13129         adrp    x6, :got:req_erase
13130         mov     x3, 56
13131         mov     w7, 65535
13132         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
13133         ldrh    w5, [x0]
13134         mov     x0, 0
13135         mov     w25, w0
13136         b       .L1737
13137 .L1736:
13138         adrp    x0, :got:p_valid_page_count_table
13139         ubfiz   x1, x26, 1, 16
13140         mov     w2, -1
13141         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13142         ldr     x0, [x0]
13143         strh    w2, [x0,x1]
13144         b       .L1780
13145 .L1740:
13146         ldr     x1, [x6, #:got_lo12:req_erase]
13147         ldr     x4, [x1]
13148         madd    x1, x0, x3, x4
13149         str     xzr, [x1,16]
13150         str     xzr, [x1,8]
13151         add     x1, x19, x0, lsl 1
13152         ldrh    w1, [x1,16]
13153         cmp     w1, w7
13154         beq     .L1739
13155         umull   x2, w25, w3
13156         add     w25, w25, 1
13157         lsl     w1, w1, 10
13158         add     x2, x4, x2
13159         uxth    w25, w25
13160         str     w1, [x2,4]
13161 .L1739:
13162         add     x0, x0, 1
13163 .L1737:
13164         cmp     w5, w0, uxth
13165         adrp    x23, :got:req_erase
13166         bhi     .L1740
13167         adrp    x1, :got:g_active_superblock
13168         uxtw    x27, w26
13169         adrp    x0, :got:p_erase_count_table
13170         ldr     x1, [x1, #:got_lo12:g_active_superblock]
13171         cmp     x19, x1
13172         bne     .L1741
13173         ldr     x2, [x21, #:got_lo12:g_inkDie_check_enable]
13174         ldr     w2, [x2]
13175         cbz     w2, .L1741
13176         ldr     x2, [x0, #:got_lo12:p_erase_count_table]
13177         ldr     x2, [x2]
13178         ldrh    w2, [x2,x27,lsl 1]
13179         cmp     w2, 30
13180         bls     .L1741
13181         strb    wzr, [x1,8]
13182 .L1741:
13183         ldrb    w5, [x19,8]
13184         adrp    x1, :got:c_mlc_erase_count_value
13185         adrp    x3, :got:g_totle_mlc_erase_count
13186         adrp    x2, :got:g_totle_slc_erase_count
13187         ldr     x6, [x0, #:got_lo12:p_erase_count_table]
13188         cbnz    w5, .L1742
13189         lsl     x5, x27, 1
13190         ldr     x6, [x6]
13191         mov     w7, 2
13192         ldrh    w8, [x6,x5]
13193         cbz     w8, .L1781
13194         ldr     x7, [x1, #:got_lo12:c_mlc_erase_count_value]
13195         ldrh    w7, [x7]
13196         add     w7, w8, w7
13197 .L1781:
13198         strh    w7, [x6,x5]
13199         ldr     x6, [x3, #:got_lo12:g_totle_mlc_erase_count]
13200         b       .L1782
13201 .L1742:
13202         lsl     x5, x27, 1
13203         ldr     x7, [x6]
13204         ldrh    w6, [x7,x5]
13205         add     w6, w6, 1
13206         strh    w6, [x7,x5]
13207         ldr     x6, [x2, #:got_lo12:g_totle_slc_erase_count]
13208 .L1782:
13209         ldr     w5, [x6]
13210         lsl     x27, x27, 1
13211         add     w5, w5, 1
13212         str     w5, [x6]
13213         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
13214         ldr     x0, [x0]
13215         ldrh    w5, [x0,x27]
13216         adrp    x0, :got:g_max_erase_count
13217         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
13218         ldr     w6, [x0]
13219         cmp     w5, w6
13220         bls     .L1746
13221         str     w5, [x0]
13222 .L1746:
13223         ldr     x1, [x1, #:got_lo12:c_mlc_erase_count_value]
13224         adrp    x5, :got:g_totle_avg_erase_count
13225         ldr     x3, [x3, #:got_lo12:g_totle_mlc_erase_count]
13226         ldr     x2, [x2, #:got_lo12:g_totle_slc_erase_count]
13227         ldrh    w1, [x1]
13228         ldr     w3, [x3]
13229         ldr     w0, [x2]
13230         ldr     x5, [x5, #:got_lo12:g_totle_avg_erase_count]
13231         madd    w0, w1, w3, w0
13232         adrp    x1, :got:c_ftl_nand_data_blks_per_plane
13233         mov     x3, 56
13234         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_blks_per_plane]
13235         ldrh    w1, [x1]
13236         udiv    w0, w0, w1
13237         str     w0, [x5]
13238         adrp    x0, :got:gp_ect_tbl_info
13239         ldr     x0, [x0, #:got_lo12:gp_ect_tbl_info]
13240         ldr     x1, [x0]
13241         ldr     w0, [x1,16]
13242         add     w0, w0, 1
13243         str     w0, [x1,16]
13244         mov     x0, 0
13245 .L1747:
13246         cmp     w25, w0, uxth
13247         bls     .L1783
13248         ldr     x1, [x23, #:got_lo12:req_erase]
13249         ldr     x1, [x1]
13250         madd    x1, x0, x3, x1
13251         add     x0, x0, 1
13252         ldr     w2, [x1,4]
13253         and     w2, w2, -1024
13254         str     w2, [x1,4]
13255         b       .L1747
13256 .L1783:
13257         ldr     x0, [x23, #:got_lo12:req_erase]
13258         mov     w1, w25
13259         mov     x28, 0
13260         ldr     x0, [x0]
13261         bl      FlashEraseBlocks
13262         mov     w1, w28
13263         mov     x3, 56
13264 .L1749:
13265         cmp     w25, w28, uxth
13266         bls     .L1784
13267         ldr     x2, [x23, #:got_lo12:req_erase]
13268         mul     x0, x28, x3
13269         ldr     x2, [x2]
13270         add     x5, x2, x0
13271         ldr     w2, [x2,x0]
13272         cmn     w2, #1
13273         bne     .L1750
13274         ldr     w0, [x5,4]
13275         add     w1, w1, 1
13276         str     x3, [x29,96]
13277         lsr     w0, w0, 10
13278         str     x2, [x29,104]
13279         str     x1, [x29,112]
13280         str     x1, [x29,120]
13281         bl      FtlBbmMapBadBlock
13282         add     x0, x19, x28, lsl 1
13283         ldr     x2, [x29,104]
13284         ldr     x3, [x29,96]
13285         ldr     x1, [x29,120]
13286         strh    w2, [x0,16]
13287         ldrb    w0, [x19,7]
13288         sub     w0, w0, #1
13289         strb    w0, [x19,7]
13290 .L1750:
13291         add     x28, x28, 1
13292         b       .L1749
13293 .L1784:
13294         cbz     w1, .L1752
13295         mov     w0, w26
13296         bl      update_multiplier_value
13297         bl      FtlBbmTblFlush
13298 .L1752:
13299         ldrb    w1, [x19,7]
13300         adrp    x0, :got:p_valid_page_count_table
13301         cbnz    w1, .L1753
13302         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13303         mov     w1, -1
13304         ldr     x0, [x0]
13305         strh    w1, [x0,x27]
13306 .L1780:
13307         mov     w0, w26
13308         bl      INSERT_DATA_LIST
13309         b       .L1731
13310 .L1753:
13311         adrp    x2, :got:c_ftl_nand_page_pre_blk
13312         ldr     x2, [x2, #:got_lo12:c_ftl_nand_page_pre_blk]
13313         strh    wzr, [x19,2]
13314         strb    wzr, [x19,6]
13315         ldrh    w2, [x2]
13316         strh    w26, [x19]
13317         mul     w1, w1, w2
13318         adrp    x2, :got:g_GlobalSysVersion
13319         uxth    w1, w1
13320         strh    w1, [x19,4]
13321         ldr     x2, [x2, #:got_lo12:g_GlobalSysVersion]
13322         ldr     w3, [x2]
13323         str     w3, [x19,12]
13324         add     w3, w3, 1
13325         str     w3, [x2]
13326         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13327         ldrh    w2, [x19]
13328         ldr     x0, [x0]
13329         strh    w1, [x0,x2,lsl 1]
13330         mov     w0, 0
13331         ldp     x19, x20, [sp,16]
13332         ldp     x21, x22, [sp,32]
13333         ldp     x23, x24, [sp,48]
13334         ldp     x25, x26, [sp,64]
13335         ldp     x27, x28, [sp,80]
13336         ldp     x29, x30, [sp], 128
13337         ret
13338         .size   allocate_data_superblock, .-allocate_data_superblock
13339         .align  2
13340         .global FtlGcFreeBadSuperBlk
13341         .type   FtlGcFreeBadSuperBlk, %function
13342 FtlGcFreeBadSuperBlk:
13343         stp     x29, x30, [sp, -112]!
13344         add     x29, sp, 0
13345         stp     x21, x22, [sp,32]
13346         adrp    x21, :got:g_gc_bad_block_temp_num
13347         stp     x23, x24, [sp,48]
13348         uxth    w24, w0
13349         ldr     x0, [x21, #:got_lo12:g_gc_bad_block_temp_num]
13350         stp     x19, x20, [sp,16]
13351         stp     x25, x26, [sp,64]
13352         stp     x27, x28, [sp,80]
13353         mov     w20, 0
13354         ldrh    w0, [x0]
13355         cbz     w0, .L1787
13356         adrp    x22, .LC109
13357         adrp    x23, :got:c_ftl_nand_planes_num
13358         adrp    x25, :got:p_plane_order_table
13359         adrp    x26, :got:g_gc_bad_block_temp_tbl
13360         add     x22, x22, :lo12:.LC109
13361 .L1795:
13362         ldr     x0, [x23, #:got_lo12:c_ftl_nand_planes_num]
13363         ldrh    w0, [x0]
13364         cmp     w0, w20
13365         bls     .L1796
13366         ldr     x0, [x25, #:got_lo12:p_plane_order_table]
13367         mov     w1, w24
13368         mov     w19, 0
13369         ldrb    w0, [x0,w20,sxtw]
13370         bl      V2P_block
13371         uxth    w27, w0
13372 .L1788:
13373         ldr     x28, [x21, #:got_lo12:g_gc_bad_block_temp_num]
13374         ldrh    w0, [x28]
13375         cmp     w0, w19
13376         bls     .L1797
13377         ldr     x0, [x26, #:got_lo12:g_gc_bad_block_temp_tbl]
13378         adrp    x4, :got:g_gc_bad_block_temp_tbl
13379         ldrh    w0, [x0,w19,sxtw 1]
13380         cmp     w0, w27
13381         bne     .L1789
13382         mov     w1, w27
13383         mov     x0, x22
13384         str     x4, [x29,104]
13385         bl      printk
13386         mov     w0, w27
13387         bl      FtlBbmMapBadBlock
13388         bl      FtlBbmTblFlush
13389         ldrh    w2, [x28]
13390         mov     w3, w19
13391         ldr     x4, [x29,104]
13392 .L1790:
13393         cmp     w3, w2
13394         bcs     .L1798
13395         ldr     x1, [x4, #:got_lo12:g_gc_bad_block_temp_tbl]
13396         add     w0, w3, 1
13397         ldrh    w5, [x1,w0,sxtw 1]
13398         strh    w5, [x1,w3,sxtw 1]
13399         uxth    w3, w0
13400         b       .L1790
13401 .L1798:
13402         ldr     x0, [x21, #:got_lo12:g_gc_bad_block_temp_num]
13403         sub     w2, w2, #1
13404         strh    w2, [x0]
13405 .L1789:
13406         add     w19, w19, 1
13407         uxth    w19, w19
13408         b       .L1788
13409 .L1797:
13410         add     w20, w20, 1
13411         uxth    w20, w20
13412         b       .L1795
13413 .L1796:
13414         bl      FtlGcReFreshBadBlk
13415 .L1787:
13416         mov     w0, 0
13417         ldp     x19, x20, [sp,16]
13418         ldp     x21, x22, [sp,32]
13419         ldp     x23, x24, [sp,48]
13420         ldp     x25, x26, [sp,64]
13421         ldp     x27, x28, [sp,80]
13422         ldp     x29, x30, [sp], 112
13423         ret
13424         .size   FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk
13425         .align  2
13426         .global update_vpc_list
13427         .type   update_vpc_list, %function
13428 update_vpc_list:
13429         stp     x29, x30, [sp, -32]!
13430         add     x29, sp, 0
13431         str     x19, [sp,16]
13432         uxth    w19, w0
13433         adrp    x0, :got:p_valid_page_count_table
13434         ubfiz   x1, x19, 1, 16
13435         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13436         ldr     x0, [x0]
13437         ldrh    w1, [x0,x1]
13438         cbnz    w1, .L1800
13439         adrp    x0, :got:g_gc_superblock
13440         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
13441         ldrh    w2, [x0]
13442         cmp     w2, w19
13443         bne     .L1801
13444         mov     w1, -1
13445         strh    w1, [x0]
13446         b       .L1802
13447 .L1801:
13448         adrp    x0, :got:g_active_superblock
13449         ldr     x0, [x0, #:got_lo12:g_active_superblock]
13450         ldrh    w2, [x0]
13451         mov     w0, w1
13452         cmp     w2, w19
13453         beq     .L1803
13454         adrp    x0, :got:g_buffer_superblock
13455         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
13456         ldrh    w2, [x0]
13457         mov     w0, w1
13458         cmp     w2, w19
13459         beq     .L1803
13460         adrp    x0, :got:g_gc_temp_superblock
13461         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
13462         ldrh    w2, [x0]
13463         mov     w0, w1
13464         cmp     w2, w19
13465         beq     .L1803
13466 .L1802:
13467         adrp    x0, :got:p_data_block_list_head
13468         mov     w1, w19
13469         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
13470         bl      List_remove_node
13471         adrp    x0, :got:g_num_data_superblocks
13472         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
13473         ldrh    w1, [x0]
13474         sub     w1, w1, #1
13475         strh    w1, [x0]
13476         mov     w0, w19
13477         bl      free_data_superblock
13478         mov     w0, w19
13479         bl      FtlGcFreeBadSuperBlk
13480         mov     w0, 1
13481         b       .L1803
13482 .L1800:
13483         mov     w0, w19
13484         bl      List_update_data_list
13485         mov     w0, 0
13486 .L1803:
13487         ldr     x19, [sp,16]
13488         ldp     x29, x30, [sp], 32
13489         ret
13490         .size   update_vpc_list, .-update_vpc_list
13491         .align  2
13492         .global decrement_vpc_count
13493         .type   decrement_vpc_count, %function
13494 decrement_vpc_count:
13495         stp     x29, x30, [sp, -48]!
13496         uxth    w1, w0
13497         mov     w0, 65535
13498         add     x29, sp, 0
13499         str     x19, [sp,16]
13500         cmp     w1, w0
13501         beq     .L1808
13502         adrp    x0, :got:p_valid_page_count_table
13503         ubfiz   x2, x1, 1, 16
13504         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13505         ldr     x0, [x0]
13506         ldrh    w19, [x0,x2]
13507         cbnz    w19, .L1809
13508         adrp    x0, .LC110
13509         mov     w2, w19
13510         add     x0, x0, :lo12:.LC110
13511         bl      printk
13512         b       .L1813
13513 .L1809:
13514         sub     w19, w19, #1
13515         strh    w19, [x0,x2]
13516 .L1808:
13517         adrp    x19, :got:g_tmp_data_superblock_id
13518         mov     w0, 65535
13519         ldr     x19, [x19, #:got_lo12:g_tmp_data_superblock_id]
13520         ldrh    w2, [x19]
13521         cmp     w2, w0
13522         bne     .L1811
13523         strh    w1, [x19]
13524 .L1813:
13525         mov     w0, 0
13526         b       .L1810
13527 .L1811:
13528         cmp     w2, w1
13529         str     x1, [x29,40]
13530         mov     w0, 0
13531         beq     .L1810
13532         mov     w0, w2
13533         bl      update_vpc_list
13534         cmp     w0, wzr
13535         ldr     x1, [x29,40]
13536         cset    w0, ne
13537         strh    w1, [x19]
13538 .L1810:
13539         ldr     x19, [sp,16]
13540         ldp     x29, x30, [sp], 48
13541         ret
13542         .size   decrement_vpc_count, .-decrement_vpc_count
13543         .align  2
13544         .global FtlSlcSuperblockCheck
13545         .type   FtlSlcSuperblockCheck, %function
13546 FtlSlcSuperblockCheck:
13547         stp     x29, x30, [sp, -48]!
13548         add     x29, sp, 0
13549         stp     x19, x20, [sp,16]
13550         stp     x21, x22, [sp,32]
13551         ldrh    w1, [x0,4]
13552         cbz     w1, .L1814
13553         mov     x19, x0
13554         ldrb    w0, [x0,6]
13555         mov     w20, 65535
13556         adrp    x21, :got:mlcPageToSlcPageTbl
13557         add     x0, x0, 8
13558         adrp    x22, :got:c_ftl_nand_planes_num
13559         ldrh    w0, [x19,x0,lsl 1]
13560 .L1817:
13561         cmp     w0, w20
13562         bne     .L1821
13563 .L1819:
13564         ldrb    w0, [x19,6]
13565         add     w0, w0, 1
13566         uxtb    w0, w0
13567         strb    w0, [x19,6]
13568         ldr     x1, [x22, #:got_lo12:c_ftl_nand_planes_num]
13569         ldrh    w1, [x1]
13570         cmp     w1, w0
13571         bne     .L1818
13572         ldrh    w0, [x19,2]
13573         strb    wzr, [x19,6]
13574         add     w0, w0, 1
13575         strh    w0, [x19,2]
13576 .L1818:
13577         ldrb    w0, [x19,6]
13578         add     x0, x0, 8
13579         ldrh    w0, [x19,x0,lsl 1]
13580         b       .L1817
13581 .L1821:
13582         ldrb    w0, [x19,8]
13583         cmp     w0, 1
13584         bne     .L1814
13585         ldr     x0, [x21, #:got_lo12:mlcPageToSlcPageTbl]
13586         ldrh    w1, [x19,2]
13587         ldrh    w0, [x0,w1,sxtw 1]
13588         cmp     w0, w20
13589         bne     .L1814
13590         ldrh    w0, [x19,4]
13591         sub     w0, w0, #1
13592         strh    w0, [x19,4]
13593         ldrh    w0, [x19]
13594         bl      decrement_vpc_count
13595         ldrh    w1, [x19,4]
13596         cbnz    w1, .L1819
13597         ldrh    w0, [x19,2]
13598         strb    w1, [x19,6]
13599         add     w0, w0, 1
13600         strh    w0, [x19,2]
13601 .L1814:
13602         ldp     x19, x20, [sp,16]
13603         ldp     x21, x22, [sp,32]
13604         ldp     x29, x30, [sp], 48
13605         ret
13606         .size   FtlSlcSuperblockCheck, .-FtlSlcSuperblockCheck
13607         .align  2
13608         .global get_new_active_ppa
13609         .type   get_new_active_ppa, %function
13610 get_new_active_ppa:
13611         stp     x29, x30, [sp, -64]!
13612         add     x29, sp, 0
13613         stp     x19, x20, [sp,16]
13614         stp     x21, x22, [sp,32]
13615         stp     x23, x24, [sp,48]
13616         mov     x19, x0
13617         strb    wzr, [x0,10]
13618         ldrb    w0, [x0,6]
13619         mov     w20, 65535
13620         adrp    x21, :got:c_ftl_nand_planes_num
13621         adrp    x23, :got:mlcPageToSlcPageTbl
13622         add     x0, x0, 8
13623         ldrh    w0, [x19,x0,lsl 1]
13624 .L1823:
13625         cmp     w0, w20
13626         adrp    x22, :got:c_ftl_nand_planes_num
13627         bne     .L1835
13628 .L1824:
13629         ldrb    w0, [x19,6]
13630         add     w0, w0, 1
13631         uxtb    w0, w0
13632         strb    w0, [x19,6]
13633         ldr     x1, [x21, #:got_lo12:c_ftl_nand_planes_num]
13634         ldrh    w1, [x1]
13635         cmp     w1, w0
13636         bne     .L1825
13637         ldrh    w0, [x19,2]
13638         strb    wzr, [x19,6]
13639         add     w0, w0, 1
13640         strh    w0, [x19,2]
13641 .L1825:
13642         ldrb    w0, [x19,6]
13643         add     x0, x0, 8
13644         ldrh    w0, [x19,x0,lsl 1]
13645         b       .L1823
13646 .L1835:
13647         ldrb    w1, [x19,8]
13648         cmp     w1, 1
13649         bne     .L1826
13650         ldr     x1, [x23, #:got_lo12:mlcPageToSlcPageTbl]
13651         ldrh    w2, [x19,2]
13652         ldrh    w1, [x1,w2,sxtw 1]
13653         cmp     w1, w20
13654         bne     .L1826
13655         ldrh    w0, [x19,4]
13656         sub     w0, w0, #1
13657         strh    w0, [x19,4]
13658         ldrh    w0, [x19]
13659         bl      decrement_vpc_count
13660         b       .L1824
13661 .L1826:
13662         ldrh    w20, [x19,2]
13663         mov     w21, 65535
13664         mov     w23, w21
13665         adrp    x24, :got:mlcPageToSlcPageTbl
13666         orr     w20, w20, w0, lsl 10
13667         ldrh    w0, [x19,4]
13668         sub     w0, w0, #1
13669         strh    w0, [x19,4]
13670 .L1827:
13671         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
13672         ldrb    w1, [x19,6]
13673         ldrh    w2, [x0]
13674 .L1829:
13675         add     w1, w1, 1
13676         uxtb    w1, w1
13677         cmp     w1, w2
13678         bne     .L1828
13679         ldrh    w0, [x19,2]
13680         mov     w1, 0
13681         add     w0, w0, 1
13682         strh    w0, [x19,2]
13683 .L1828:
13684         add     x0, x19, x1, sxtw 1
13685         ldrh    w0, [x0,16]
13686         cmp     w0, w21
13687         beq     .L1829
13688         ldrb    w0, [x19,8]
13689         strb    w1, [x19,6]
13690         cmp     w0, 1
13691         bne     .L1830
13692         ldr     x0, [x24, #:got_lo12:mlcPageToSlcPageTbl]
13693         ldrh    w1, [x19,2]
13694         ldrh    w0, [x0,w1,sxtw 1]
13695         cmp     w0, w23
13696         bne     .L1830
13697         ldrh    w0, [x19,4]
13698         cbz     w0, .L1830
13699         sub     w0, w0, #1
13700         strh    w0, [x19,4]
13701         ldrh    w0, [x19]
13702         bl      decrement_vpc_count
13703         b       .L1827
13704 .L1830:
13705         mov     w0, w20
13706         ldp     x19, x20, [sp,16]
13707         ldp     x21, x22, [sp,32]
13708         ldp     x23, x24, [sp,48]
13709         ldp     x29, x30, [sp], 64
13710         ret
13711         .size   get_new_active_ppa, .-get_new_active_ppa
13712         .align  2
13713         .global FtlVpcTblFlush
13714         .type   FtlVpcTblFlush, %function
13715 FtlVpcTblFlush:
13716         stp     x29, x30, [sp, -96]!
13717         add     x29, sp, 0
13718         stp     x23, x24, [sp,48]
13719         adrp    x23, :got:p_sys_data_buf
13720         adrp    x24, :got:p_sys_spare_buf
13721         stp     x21, x22, [sp,32]
13722         adrp    x21, :got:req_sys
13723         adrp    x22, :got:gSysInfo
13724         ldr     x0, [x23, #:got_lo12:p_sys_data_buf]
13725         stp     x25, x26, [sp,64]
13726         stp     x19, x20, [sp,16]
13727         stp     x27, x28, [sp,80]
13728         ldr     x26, [x21, #:got_lo12:req_sys]
13729         adrp    x19, :got:g_sys_save_data
13730         ldr     x0, [x0]
13731         adrp    x25, :got:g_GlobalSysVersion
13732         mov     w28, 65535
13733         str     x0, [x26,8]
13734         ldr     x0, [x24, #:got_lo12:p_sys_spare_buf]
13735         ldr     x20, [x0]
13736         str     x20, [x26,16]
13737         ldr     x0, [x22, #:got_lo12:gSysInfo]
13738         str     wzr, [x20,12]
13739         ldrh    w1, [x0]
13740         strh    w1, [x20,2]
13741         mov     w1, -3932
13742         strh    w1, [x20]
13743         ldr     w1, [x0,8]
13744         str     w1, [x20,4]
13745         mov     w1, 19539
13746         str     wzr, [x20,8]
13747         movk    w1, 0x4654, lsl 16
13748         ldrh    w0, [x0,6]
13749         ldr     x19, [x19, #:got_lo12:g_sys_save_data]
13750         str     w1, [x19]
13751         mov     w1, 39
13752         strh    w0, [x19,8]
13753         adrp    x0, :got:c_ftl_nand_die_num
13754         movk    w1, 0x5000, lsl 16
13755         str     w1, [x19,4]
13756         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
13757         ldrh    w0, [x0]
13758         strb    w0, [x19,10]
13759         adrp    x0, :got:g_active_superblock
13760         ldr     x0, [x0, #:got_lo12:g_active_superblock]
13761         ldrh    w1, [x0]
13762         strh    w1, [x19,14]
13763         ldrh    w1, [x0,2]
13764         ldrb    w2, [x0,6]
13765         ldrb    w0, [x0,8]
13766         strb    w0, [x19,11]
13767         adrp    x0, :got:g_buffer_superblock
13768         orr     w1, w2, w1, lsl 6
13769         strh    w1, [x19,16]
13770         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
13771         ldrh    w1, [x0]
13772         strh    w1, [x19,18]
13773         ldrh    w1, [x0,2]
13774         ldrb    w2, [x0,6]
13775         ldrb    w0, [x0,8]
13776         strb    w0, [x19,12]
13777         adrp    x0, :got:g_gc_temp_superblock
13778         orr     w1, w2, w1, lsl 6
13779         strh    w1, [x19,20]
13780         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
13781         ldrh    w1, [x0]
13782         strh    w1, [x19,22]
13783         ldrh    w1, [x0,2]
13784         ldrb    w2, [x0,6]
13785         ldrb    w0, [x0,8]
13786         strb    w0, [x19,13]
13787         adrp    x0, :got:g_totle_mlc_erase_count
13788         orr     w1, w2, w1, lsl 6
13789         strh    w1, [x19,24]
13790         adrp    x2, :got:c_ftl_nand_byte_pre_page
13791         mov     w1, 255
13792         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
13793         ldr     w0, [x0]
13794         str     w0, [x19,32]
13795         ldr     x0, [x25, #:got_lo12:g_GlobalSysVersion]
13796         ldr     w0, [x0]
13797         str     w0, [x19,40]
13798         adrp    x0, :got:g_GlobalDataVersion
13799         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
13800         ldr     w0, [x0]
13801         str     w0, [x19,36]
13802         ldr     x0, [x26,8]
13803         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
13804         ldrh    w2, [x2]
13805         bl      ftl_memset
13806         ldr     x0, [x26,8]
13807         mov     x1, x19
13808         mov     w2, 48
13809         bl      ftl_memcpy
13810         adrp    x2, :got:c_ftl_nand_data_blks_per_plane
13811         adrp    x1, :got:p_valid_page_count_table
13812         ldr     x0, [x26,8]
13813         adrp    x26, :got:c_ftl_nand_page_pre_slc_blk
13814         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_blks_per_plane]
13815         add     x0, x0, 48
13816         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
13817         ldrh    w2, [x2]
13818         ldr     x1, [x1]
13819         lsl     w2, w2, 1
13820         bl      ftl_memcpy
13821         mov     w0, 0
13822         bl      FtlUpdateVaildLpn
13823 .L1837:
13824         ldr     x0, [x23, #:got_lo12:p_sys_data_buf]
13825         ldr     x27, [x21, #:got_lo12:req_sys]
13826         ldr     x0, [x0]
13827         str     x0, [x27,8]
13828         ldr     x0, [x24, #:got_lo12:p_sys_spare_buf]
13829         ldr     x0, [x0]
13830         str     x0, [x27,16]
13831         ldr     x19, [x22, #:got_lo12:gSysInfo]
13832         ldrh    w0, [x19]
13833         ldrh    w1, [x19,2]
13834         orr     w0, w1, w0, lsl 10
13835         mov     w1, 1
13836         str     w0, [x27,4]
13837         mov     w2, w1
13838         mov     w3, w1
13839         mov     x0, x27
13840         bl      FlashProgPages
13841         ldr     x0, [x26, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13842         ldrh    w1, [x19,2]
13843         ldrh    w0, [x0]
13844         sub     w0, w0, #1
13845         cmp     w1, w0
13846         blt     .L1838
13847         ldrh    w0, [x19]
13848         ldrh    w28, [x19,4]
13849         strh    wzr, [x19,2]
13850         strh    w0, [x19,4]
13851         bl      FtlFreeSysBlkQueueOut
13852         strh    w0, [x19]
13853         ldr     x2, [x25, #:got_lo12:g_GlobalSysVersion]
13854         ldr     w1, [x2]
13855         str     w1, [x19,8]
13856         add     w3, w1, 1
13857         str     w3, [x2]
13858         ubfiz   w2, w0, 10, 16
13859         str     w2, [x27,4]
13860         str     w1, [x20,4]
13861         mov     w1, 1
13862         strh    w0, [x20,2]
13863         mov     w2, w1
13864         mov     x0, x27
13865         mov     w3, w1
13866         bl      FlashProgPages
13867 .L1838:
13868         ldr     x0, [x22, #:got_lo12:gSysInfo]
13869         ldrh    w1, [x0,2]
13870         add     w1, w1, 1
13871         uxth    w1, w1
13872         strh    w1, [x0,2]
13873         ldr     x2, [x21, #:got_lo12:req_sys]
13874         ldr     w2, [x2]
13875         cmn     w2, #1
13876         bne     .L1839
13877         cmp     w1, 1
13878         bne     .L1837
13879         adrp    x1, :got:c_ftl_nand_page_pre_slc_blk
13880         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13881         ldrh    w1, [x1]
13882         sub     w1, w1, #1
13883         strh    w1, [x0,2]
13884         b       .L1837
13885 .L1839:
13886         cmp     w1, 1
13887         beq     .L1837
13888         mov     w0, 65535
13889         cmp     w28, w0
13890         beq     .L1841
13891         mov     w0, w28
13892         mov     w1, 1
13893         bl      FtlFreeSysBlkQueueIn
13894 .L1841:
13895         mov     w0, 0
13896         ldp     x19, x20, [sp,16]
13897         ldp     x21, x22, [sp,32]
13898         ldp     x23, x24, [sp,48]
13899         ldp     x25, x26, [sp,64]
13900         ldp     x27, x28, [sp,80]
13901         ldp     x29, x30, [sp], 96
13902         ret
13903         .size   FtlVpcTblFlush, .-FtlVpcTblFlush
13904         .align  2
13905         .global ftl_map_blk_gc
13906         .type   ftl_map_blk_gc, %function
13907 ftl_map_blk_gc:
13908         stp     x29, x30, [sp, -96]!
13909         add     x29, sp, 0
13910         stp     x19, x20, [sp,16]
13911         stp     x21, x22, [sp,32]
13912         stp     x23, x24, [sp,48]
13913         stp     x25, x26, [sp,64]
13914         stp     x27, x28, [sp,80]
13915         mov     x19, x0
13916         adrp    x22, :got:c_ftl_nand_page_pre_slc_blk
13917         ldr     x20, [x0,16]
13918         ldr     x24, [x0,40]
13919         bl      ftl_free_no_use_map_blk
13920         ldrh    w1, [x19,10]
13921         ldrh    w2, [x19,8]
13922         sub     w1, w1, #1
13923         cmp     w2, w1
13924         blt     .L1846
13925         ubfiz   x1, x0, 1, 16
13926         ldrh    w23, [x20,x1]
13927         cbz     w23, .L1846
13928         ldr     w0, [x19,52]
13929         cbnz    w0, .L1846
13930         mov     w2, 1
13931         str     w2, [x19,52]
13932         strh    w0, [x20,x1]
13933         ldrh    w0, [x19,8]
13934         ldrh    w1, [x19,2]
13935         sub     w0, w0, #1
13936         strh    w0, [x19,8]
13937         ldr     x0, [x22, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13938         ldrh    w0, [x0]
13939         cmp     w1, w0
13940         bcc     .L1847
13941         mov     x0, x19
13942         bl      ftl_map_blk_alloc_new_blk
13943 .L1847:
13944         mov     w20, 0
13945         adrp    x25, :got:req_sys
13946         adrp    x26, :got:p_sys_data_buf_1
13947         adrp    x27, :got:p_sys_spare_buf
13948 .L1848:
13949         ldrh    w0, [x19,6]
13950         cmp     w0, w20
13951         bls     .L1856
13952         ubfiz   x28, x20, 2, 16
13953         ldr     w0, [x24,x28]
13954         cmp     w23, w0, lsr 10
13955         bne     .L1849
13956         ldr     x0, [x26, #:got_lo12:p_sys_data_buf_1]
13957         mov     w1, 1
13958         ldr     x21, [x25, #:got_lo12:req_sys]
13959         mov     w2, w1
13960         ldr     x0, [x0]
13961         str     x0, [x21,8]
13962         ldr     x0, [x27, #:got_lo12:p_sys_spare_buf]
13963         ldr     x0, [x0]
13964         str     x0, [x21,16]
13965         ldr     w0, [x24,x28]
13966         str     w0, [x21,4]
13967         mov     x0, x21
13968         bl      FlashReadPages
13969         ldr     w0, [x21]
13970         cmn     w0, #1
13971         bne     .L1850
13972         str     wzr, [x24,x28]
13973         b       .L1849
13974 .L1850:
13975         ldr     x2, [x21,8]
13976         mov     x0, x19
13977         mov     w1, w20
13978         bl      FtlMapWritePage
13979 .L1849:
13980         add     w20, w20, 1
13981         uxth    w20, w20
13982         b       .L1848
13983 .L1856:
13984         mov     w0, w23
13985         mov     w1, 1
13986         bl      FtlFreeSysBlkQueueIn
13987         str     wzr, [x19,52]
13988 .L1846:
13989         ldr     x22, [x22, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13990         ldrh    w1, [x19,2]
13991         ldrh    w0, [x22]
13992         cmp     w1, w0
13993         bcc     .L1852
13994         mov     x0, x19
13995         bl      ftl_map_blk_alloc_new_blk
13996 .L1852:
13997         mov     w0, 0
13998         ldp     x19, x20, [sp,16]
13999         ldp     x21, x22, [sp,32]
14000         ldp     x23, x24, [sp,48]
14001         ldp     x25, x26, [sp,64]
14002         ldp     x27, x28, [sp,80]
14003         ldp     x29, x30, [sp], 96
14004         ret
14005         .size   ftl_map_blk_gc, .-ftl_map_blk_gc
14006         .align  2
14007         .global Ftl_write_map_blk_to_last_page
14008         .type   Ftl_write_map_blk_to_last_page, %function
14009 Ftl_write_map_blk_to_last_page:
14010         stp     x29, x30, [sp, -64]!
14011         mov     w1, 65535
14012         add     x29, sp, 0
14013         stp     x19, x20, [sp,16]
14014         stp     x21, x22, [sp,32]
14015         str     x23, [sp,48]
14016         mov     x19, x0
14017         ldr     x20, [x0,16]
14018         ldr     x23, [x0,40]
14019         ldrh    w0, [x0]
14020         cmp     w0, w1
14021         bne     .L1858
14022         ldrh    w0, [x19,8]
14023         add     w0, w0, 1
14024         strh    w0, [x19,8]
14025         bl      FtlFreeSysBlkQueueOut
14026         strh    w0, [x20]
14027         strh    wzr, [x19,2]
14028         ldr     w0, [x19,48]
14029         strh    wzr, [x19]
14030         add     w0, w0, 1
14031         str     w0, [x19,48]
14032         b       .L1859
14033 .L1858:
14034         ubfiz   x0, x0, 1, 16
14035         ldrh    w1, [x19,2]
14036         adrp    x21, :got:p_sys_data_buf
14037         ldrh    w22, [x20,x0]
14038         adrp    x20, :got:req_sys
14039         ldr     x0, [x20, #:got_lo12:req_sys]
14040         orr     w1, w1, w22, lsl 10
14041         str     w1, [x0,4]
14042         ldr     x3, [x21, #:got_lo12:p_sys_data_buf]
14043         ldr     x1, [x3]
14044         str     x1, [x0,8]
14045         adrp    x1, :got:p_sys_spare_buf
14046         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
14047         ldr     x1, [x1]
14048         str     x1, [x0,16]
14049         ldr     w0, [x19,48]
14050         str     w0, [x1,4]
14051         mov     w0, -1291
14052         strh    w0, [x1,8]
14053         ldrh    w0, [x19,4]
14054         strh    w0, [x1]
14055         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
14056         strh    w22, [x1,2]
14057         mov     w1, 255
14058         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14059         ldrh    w2, [x0]
14060         ldr     x0, [x3]
14061         lsl     w2, w2, 3
14062         bl      ftl_memset
14063         mov     w2, 0
14064         mov     w1, w2
14065 .L1860:
14066         ldrh    w0, [x19,6]
14067         cmp     w0, w1
14068         bls     .L1863
14069         ubfiz   x4, x1, 2, 16
14070         ldr     w0, [x23,x4]
14071         cmp     w22, w0, lsr 10
14072         bne     .L1861
14073         ldr     x3, [x21, #:got_lo12:p_sys_data_buf]
14074         add     w2, w2, 1
14075         uxth    w2, w2
14076         ldr     x5, [x3]
14077         ubfiz   x0, x2, 3, 16
14078         str     w1, [x5,x0]
14079         ldr     x3, [x3]
14080         ldr     w4, [x23,x4]
14081         add     x0, x3, x0
14082         str     w4, [x0,4]
14083 .L1861:
14084         add     w1, w1, 1
14085         uxth    w1, w1
14086         b       .L1860
14087 .L1863:
14088         mov     w1, 1
14089         ldr     x0, [x20, #:got_lo12:req_sys]
14090         mov     w2, w1
14091         mov     w3, 0
14092         bl      FlashProgPages
14093         ldrh    w0, [x19,2]
14094         add     w0, w0, 1
14095         strh    w0, [x19,2]
14096         mov     x0, x19
14097         bl      ftl_map_blk_gc
14098 .L1859:
14099         mov     w0, 0
14100         ldr     x23, [sp,48]
14101         ldp     x19, x20, [sp,16]
14102         ldp     x21, x22, [sp,32]
14103         ldp     x29, x30, [sp], 64
14104         ret
14105         .size   Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page
14106         .align  2
14107         .global FtlMapWritePage
14108         .type   FtlMapWritePage, %function
14109 FtlMapWritePage:
14110         stp     x29, x30, [sp, -96]!
14111         add     x29, sp, 0
14112         stp     x21, x22, [sp,32]
14113         stp     x23, x24, [sp,48]
14114         stp     x25, x26, [sp,64]
14115         stp     x19, x20, [sp,16]
14116         stp     x27, x28, [sp,80]
14117         mov     x19, x0
14118         mov     w21, w1
14119         mov     x22, x2
14120         adrp    x23, :got:g_totle_l2p_write_count
14121         adrp    x24, :got:c_ftl_nand_page_pre_slc_blk
14122         mov     w25, 65535
14123         adrp    x26, :got:req_sys
14124         adrp    x27, :got:p_sys_spare_buf
14125 .L1870:
14126         ldr     x1, [x23, #:got_lo12:g_totle_l2p_write_count]
14127         ldr     w0, [x1]
14128         add     w0, w0, 1
14129         str     w0, [x1]
14130         ldr     x0, [x24, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14131         ldrh    w1, [x19,2]
14132         ldrh    w0, [x0]
14133         sub     w0, w0, #1
14134         cmp     w1, w0
14135         bge     .L1865
14136         ldrh    w0, [x19]
14137         cmp     w0, w25
14138         bne     .L1866
14139 .L1865:
14140         mov     x0, x19
14141         bl      Ftl_write_map_blk_to_last_page
14142 .L1866:
14143         ldrh    w1, [x19]
14144         mov     w2, 16
14145         ldr     x0, [x19,16]
14146         ldr     x20, [x26, #:got_lo12:req_sys]
14147         ldrh    w28, [x0,x1,lsl 1]
14148         mov     w1, 0
14149         ldrh    w0, [x19,2]
14150         str     x22, [x20,8]
14151         orr     w0, w0, w28, lsl 10
14152         str     w0, [x20,4]
14153         ldr     x0, [x27, #:got_lo12:p_sys_spare_buf]
14154         ldr     x0, [x0]
14155         str     x0, [x20,16]
14156         bl      ftl_memset
14157         ldr     x0, [x20,16]
14158         ldr     w1, [x19,48]
14159         str     w1, [x0,4]
14160         strh    w21, [x0,8]
14161         ldrh    w1, [x19,4]
14162         strh    w1, [x0]
14163         mov     w1, 1
14164         strh    w28, [x0,2]
14165         mov     w2, w1
14166         mov     x0, x20
14167         mov     w3, w1
14168         bl      FlashProgPages
14169         ldrh    w0, [x19,2]
14170         add     w0, w0, 1
14171         uxth    w0, w0
14172         strh    w0, [x19,2]
14173         cmp     w0, 1
14174         beq     .L1870
14175         ldr     w0, [x20]
14176         cmn     w0, #1
14177         beq     .L1870
14178         ldr     x0, [x19,40]
14179         ldr     w1, [x20,4]
14180         str     w1, [x0,w21,uxtw 2]
14181         mov     w0, 0
14182         ldp     x19, x20, [sp,16]
14183         ldp     x21, x22, [sp,32]
14184         ldp     x23, x24, [sp,48]
14185         ldp     x25, x26, [sp,64]
14186         ldp     x27, x28, [sp,80]
14187         ldp     x29, x30, [sp], 96
14188         ret
14189         .size   FtlMapWritePage, .-FtlMapWritePage
14190         .align  2
14191         .global flush_l2p_region
14192         .type   flush_l2p_region, %function
14193 flush_l2p_region:
14194         stp     x29, x30, [sp, -32]!
14195         add     x29, sp, 0
14196         stp     x19, x20, [sp,16]
14197         adrp    x20, :got:p_l2p_ram_map
14198         ubfiz   x19, x0, 4, 16
14199         adrp    x0, :got:gL2pMapInfo
14200         ldr     x20, [x20, #:got_lo12:p_l2p_ram_map]
14201         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
14202         ldr     x1, [x20]
14203         add     x2, x1, x19
14204         ldrh    w1, [x1,x19]
14205         ldr     x2, [x2,8]
14206         bl      FtlMapWritePage
14207         ldr     x0, [x20]
14208         add     x19, x0, x19
14209         ldr     w0, [x19,4]
14210         and     w0, w0, 2147483647
14211         str     w0, [x19,4]
14212         mov     w0, 0
14213         ldp     x19, x20, [sp,16]
14214         ldp     x29, x30, [sp], 32
14215         ret
14216         .size   flush_l2p_region, .-flush_l2p_region
14217         .align  2
14218         .global log2phys
14219         .type   log2phys, %function
14220 log2phys:
14221         stp     x29, x30, [sp, -80]!
14222         mov     x4, 1
14223         add     x29, sp, 0
14224         stp     x21, x22, [sp,32]
14225         mov     x21, x1
14226         adrp    x1, :got:c_ftl_nand_sec_pre_page_shift
14227         stp     x23, x24, [sp,48]
14228         stp     x19, x20, [sp,16]
14229         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
14230         adrp    x23, :got:p_l2p_ram_map
14231         mov     w22, w2
14232         ldrh    w3, [x1]
14233         ldr     x1, [x23, #:got_lo12:p_l2p_ram_map]
14234         add     w3, w3, 7
14235         lsr     w20, w0, w3
14236         lsl     x3, x4, x3
14237         sub     w3, w3, #1
14238         ldr     x1, [x1]
14239         and     w0, w3, w0
14240         uxth    w20, w20
14241         mov     x4, 0
14242         uxth    x24, w0
14243         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
14244         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
14245         ldrh    w0, [x0]
14246 .L1875:
14247         uxth    x19, w4
14248         cmp     w19, w0
14249         bcs     .L1887
14250         add     x4, x4, 1
14251         add     x2, x1, x4, lsl 4
14252         ldrh    w2, [x2,-16]
14253         cmp     w2, w20
14254         bne     .L1875
14255 .L1876:
14256         cbnz    w22, .L1877
14257         ldr     x0, [x23, #:got_lo12:p_l2p_ram_map]
14258         ldr     x1, [x0]
14259         add     x1, x1, x19, lsl 4
14260         ldr     x0, [x1,8]
14261         ldr     w0, [x0,x24,lsl 2]
14262         str     w0, [x21]
14263         b       .L1878
14264 .L1877:
14265         ldr     x2, [x23, #:got_lo12:p_l2p_ram_map]
14266         lsl     x0, x19, 4
14267         ldr     w3, [x21]
14268         ldr     x1, [x2]
14269         add     x1, x1, x0
14270         ldr     x1, [x1,8]
14271         str     w3, [x1,x24,lsl 2]
14272         ldr     x1, [x2]
14273         add     x0, x1, x0
14274         ldr     w1, [x0,4]
14275         orr     w1, w1, -2147483648
14276         str     w1, [x0,4]
14277         adrp    x0, :got:g_l2p_last_update_region_id
14278         ldr     x0, [x0, #:got_lo12:g_l2p_last_update_region_id]
14279         strh    w20, [x0]
14280 .L1878:
14281         ldr     x23, [x23, #:got_lo12:p_l2p_ram_map]
14282         ldr     x0, [x23]
14283         add     x19, x0, x19, lsl 4
14284         ldr     w0, [x19,4]
14285         cmn     w0, #1
14286         beq     .L1884
14287         add     w0, w0, 1
14288         str     w0, [x19,4]
14289         b       .L1884
14290 .L1887:
14291         bl      select_l2p_ram_region
14292         uxth    x19, w0
14293         ldr     x3, [x23, #:got_lo12:p_l2p_ram_map]
14294         ubfiz   x2, x19, 4, 16
14295         mov     w1, w0
14296         ldr     x3, [x3]
14297         add     x4, x3, x2
14298         ldrh    w3, [x3,x2]
14299         mov     w2, 65535
14300         cmp     w3, w2
14301         beq     .L1881
14302         ldr     w2, [x4,4]
14303         tbz     w2, #31, .L1881
14304         str     x1, [x29,72]
14305         bl      flush_l2p_region
14306         ldr     x1, [x29,72]
14307 .L1881:
14308         mov     w0, w20
14309         bl      load_l2p_region
14310         b       .L1876
14311 .L1884:
14312         mov     w0, 0
14313         ldp     x19, x20, [sp,16]
14314         ldp     x21, x22, [sp,32]
14315         ldp     x23, x24, [sp,48]
14316         ldp     x29, x30, [sp], 80
14317         ret
14318         .size   log2phys, .-log2phys
14319         .align  2
14320         .global FtlReUsePrevPpa
14321         .type   FtlReUsePrevPpa, %function
14322 FtlReUsePrevPpa:
14323         stp     x29, x30, [sp, -80]!
14324         add     x29, sp, 0
14325         stp     x19, x20, [sp,16]
14326         mov     w20, w0
14327         lsr     w0, w1, 10
14328         stp     x21, x22, [sp,32]
14329         str     x23, [sp,48]
14330         str     w1, [x29,76]
14331         bl      P2V_block_in_plane
14332         uxth    w4, w0
14333         adrp    x0, :got:p_valid_page_count_table
14334         ubfiz   x22, x4, 1, 16
14335         mov     x23, x0
14336         ldr     x1, [x0, #:got_lo12:p_valid_page_count_table]
14337         ldr     x2, [x1]
14338         ldrh    w1, [x2,x22]
14339         cbnz    w1, .L1889
14340         adrp    x0, :got:p_free_data_block_list_head
14341         ldr     x2, [x0, #:got_lo12:p_free_data_block_list_head]
14342         ldr     x19, [x2]
14343         cbz     x19, .L1890
14344         adrp    x2, :got:g_num_free_superblocks
14345         mov     x6, -6148914691236517206
14346         mov     x21, x2
14347         ldr     x3, [x2, #:got_lo12:g_num_free_superblocks]
14348         mov     w2, 6
14349         ldrh    w5, [x3]
14350         adrp    x3, :got:p_data_block_list_table
14351         ldr     x3, [x3, #:got_lo12:p_data_block_list_table]
14352         ldr     x3, [x3]
14353         sub     x19, x19, x3
14354         asr     x19, x19, 1
14355         madd    x19, x6, x19, x19
14356         mov     w6, 65535
14357         uxth    w19, w19
14358 .L1891:
14359         cmp     w1, w5
14360         beq     .L1890
14361         cmp     w19, w4
14362         bne     .L1892
14363         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
14364         mov     w1, w19
14365         bl      List_remove_node
14366         ldr     x0, [x21, #:got_lo12:g_num_free_superblocks]
14367         ldrh    w1, [x0]
14368         sub     w1, w1, #1
14369         strh    w1, [x0]
14370         mov     w0, w19
14371         bl      INSERT_DATA_LIST
14372         ldr     x0, [x23, #:got_lo12:p_valid_page_count_table]
14373         ldr     x1, [x0]
14374         ldrh    w0, [x1,x22]
14375         add     w0, w0, 1
14376         strh    w0, [x1,x22]
14377         b       .L1890
14378 .L1892:
14379         umull   x19, w19, w2
14380         ldrh    w19, [x3,x19]
14381         cmp     w19, w6
14382         beq     .L1890
14383         add     w1, w1, 1
14384         uxth    w1, w1
14385         b       .L1891
14386 .L1889:
14387         add     w1, w1, 1
14388         strh    w1, [x2,x22]
14389 .L1890:
14390         add     x1, x29, 76
14391         mov     w0, w20
14392         mov     w2, 1
14393         bl      log2phys
14394         ldr     x23, [sp,48]
14395         ldp     x19, x20, [sp,16]
14396         ldp     x21, x22, [sp,32]
14397         ldp     x29, x30, [sp], 80
14398         ret
14399         .size   FtlReUsePrevPpa, .-FtlReUsePrevPpa
14400         .align  2
14401         .global FtlMapTblRecovery
14402         .type   FtlMapTblRecovery, %function
14403 FtlMapTblRecovery:
14404         stp     x29, x30, [sp, -144]!
14405         mov     w1, 0
14406         add     x29, sp, 0
14407         stp     x25, x26, [sp,64]
14408         mov     x26, x0
14409         stp     x19, x20, [sp,16]
14410         stp     x21, x22, [sp,32]
14411         stp     x23, x24, [sp,48]
14412         stp     x27, x28, [sp,80]
14413         ldrh    w23, [x26,6]
14414         adrp    x20, :got:p_sys_data_buf
14415         ldr     x0, [x0,40]
14416         adrp    x19, :got:req_sys
14417         lsl     w2, w23, 2
14418         ldrh    w24, [x26,8]
14419         str     x0, [x29,136]
14420         mov     w27, 0
14421         ldr     x22, [x26,16]
14422         ldr     x25, [x26,24]
14423         bl      ftl_memset
14424         ldr     x0, [x20, #:got_lo12:p_sys_data_buf]
14425         ldr     x1, [x19, #:got_lo12:req_sys]
14426         ldr     x0, [x0]
14427         str     x0, [x1,8]
14428         adrp    x0, :got:p_sys_spare_buf
14429         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
14430         str     wzr, [x26,52]
14431         str     wzr, [x26,48]
14432         ldr     x21, [x0]
14433         mov     w0, -1
14434         str     x21, [x1,16]
14435         strh    w0, [x26]
14436         strh    w0, [x26,2]
14437         mov     w0, 1
14438         str     w0, [x26,56]
14439         sub     w0, w24, #1
14440         str     w0, [x29,132]
14441 .L1898:
14442         cmp     w27, w24
14443         bge     .L1915
14444         ldr     w0, [x29,132]
14445         sxtw    x28, w27
14446         cmp     w27, w0
14447         bne     .L1899
14448         lsl     x0, x28, 1
14449         mov     w1, 1
14450         add     x20, x22, x0
14451         ldrh    w0, [x22,x0]
14452         mov     w22, 0
14453         bl      FtlGetLastWrittenPage
14454         strh    w27, [x26]
14455         sxth    w1, w0
14456         add     w0, w0, 1
14457         strh    w0, [x26,2]
14458         ldr     w0, [x25,x28,lsl 2]
14459         add     w25, w1, 1
14460         str     w0, [x26,48]
14461         ldr     x0, [x19, #:got_lo12:req_sys]
14462         str     xzr, [x0,8]
14463 .L1900:
14464         cmp     w22, w25
14465         bge     .L1915
14466         ldrh    w0, [x20]
14467         mov     w1, 1
14468         ldr     x24, [x19, #:got_lo12:req_sys]
14469         mov     w2, w1
14470         orr     w0, w22, w0, lsl 10
14471         str     w0, [x24,4]
14472         mov     x0, x24
14473         bl      FlashReadPages
14474         ldr     w0, [x24]
14475         cmn     w0, #1
14476         beq     .L1901
14477         ldrh    w1, [x21,8]
14478         cmp     w1, w23
14479         bcs     .L1901
14480         ldrh    w2, [x21]
14481         ldrh    w0, [x26,4]
14482         cmp     w2, w0
14483         bne     .L1901
14484         ubfiz   x1, x1, 2, 16
14485         ldr     x2, [x29,136]
14486         ldr     w0, [x24,4]
14487         str     w0, [x2,x1]
14488 .L1901:
14489         add     w22, w22, 1
14490         sxth    w22, w22
14491         b       .L1900
14492 .L1915:
14493         mov     x0, x26
14494         bl      ftl_free_no_use_map_blk
14495         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
14496         ldrh    w1, [x26,2]
14497         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14498         ldrh    w0, [x0]
14499         cmp     w1, w0
14500         bne     .L1904
14501         mov     x0, x26
14502         bl      ftl_map_blk_alloc_new_blk
14503         b       .L1904
14504 .L1899:
14505         ldr     x0, [x20, #:got_lo12:p_sys_data_buf]
14506         lsl     x1, x28, 1
14507         ldr     x6, [x19, #:got_lo12:req_sys]
14508         add     x28, x22, x1
14509         str     x6, [x29,120]
14510         ldr     x0, [x0]
14511         str     x0, [x6,8]
14512         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
14513         ldrh    w1, [x22,x1]
14514         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14515         ldrh    w0, [x0]
14516         sub     w0, w0, #1
14517         orr     w0, w0, w1, lsl 10
14518         mov     w1, 1
14519         str     w0, [x6,4]
14520         mov     w2, w1
14521         mov     x0, x6
14522         bl      FlashReadPages
14523         ldr     x6, [x29,120]
14524         adrp    x8, :got:c_ftl_nand_page_pre_slc_blk
14525         ldr     w0, [x6]
14526         cmn     w0, #1
14527         beq     .L1905
14528         ldrh    w1, [x21]
14529         ldrh    w0, [x26,4]
14530         cmp     w1, w0
14531         bne     .L1905
14532         ldrh    w0, [x21,8]
14533         mov     w1, 64245
14534         cmp     w0, w1
14535         bne     .L1905
14536         mov     w0, 0
14537 .L1906:
14538         ldr     x1, [x8, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14539         ldrh    w1, [x1]
14540         sub     w1, w1, #1
14541         cmp     w0, w1
14542         bge     .L1909
14543         ldr     x1, [x20, #:got_lo12:p_sys_data_buf]
14544         sbfiz   x2, x0, 3, 32
14545         ldr     x6, [x1]
14546         ldrh    w1, [x6,x2]
14547         cmp     w1, w23
14548         bcs     .L1907
14549         add     x2, x6, x2
14550         ubfiz   x1, x1, 2, 16
14551         ldr     x3, [x29,136]
14552         ldr     w2, [x2,4]
14553         str     w2, [x3,x1]
14554 .L1907:
14555         add     w0, w0, 1
14556         sxth    w0, w0
14557         b       .L1906
14558 .L1905:
14559         ldr     x0, [x19, #:got_lo12:req_sys]
14560         mov     w6, 0
14561         str     xzr, [x0,8]
14562 .L1910:
14563         ldr     x0, [x8, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14564         ldrh    w0, [x0]
14565         cmp     w6, w0
14566         bge     .L1909
14567         ldrh    w0, [x28]
14568         mov     w1, 1
14569         ldr     x7, [x19, #:got_lo12:req_sys]
14570         mov     w2, w1
14571         str     x8, [x29,104]
14572         orr     w0, w6, w0, lsl 10
14573         str     x6, [x29,112]
14574         str     w0, [x7,4]
14575         mov     x0, x7
14576         str     x7, [x29,120]
14577         bl      FlashReadPages
14578         ldr     x7, [x29,120]
14579         ldr     x6, [x29,112]
14580         ldr     x8, [x29,104]
14581         ldr     w0, [x7]
14582         cmn     w0, #1
14583         beq     .L1911
14584         ldrh    w1, [x21,8]
14585         cmp     w1, w23
14586         bcs     .L1911
14587         ldrh    w2, [x21]
14588         ldrh    w0, [x26,4]
14589         cmp     w2, w0
14590         bne     .L1911
14591         ubfiz   x1, x1, 2, 16
14592         ldr     x2, [x29,136]
14593         ldr     w0, [x7,4]
14594         str     w0, [x2,x1]
14595 .L1911:
14596         add     w6, w6, 1
14597         sxth    w6, w6
14598         b       .L1910
14599 .L1909:
14600         add     w4, w27, 1
14601         sxth    w27, w4
14602         b       .L1898
14603 .L1904:
14604         ldrh    w1, [x26,8]
14605         ldrh    w0, [x26,10]
14606         cmp     w1, w0
14607         bcc     .L1916
14608         mov     x0, x26
14609         bl      ftl_map_blk_gc
14610 .L1916:
14611         mov     w0, 0
14612         ldp     x19, x20, [sp,16]
14613         ldp     x21, x22, [sp,32]
14614         ldp     x23, x24, [sp,48]
14615         ldp     x25, x26, [sp,64]
14616         ldp     x27, x28, [sp,80]
14617         ldp     x29, x30, [sp], 144
14618         ret
14619         .size   FtlMapTblRecovery, .-FtlMapTblRecovery
14620         .align  2
14621         .global FtlLoadVonderInfo
14622         .type   FtlLoadVonderInfo, %function
14623 FtlLoadVonderInfo:
14624         adrp    x1, :got:c_ftl_nand_max_vendor_blks
14625         adrp    x0, :got:gVendorBlkInfo
14626         stp     x29, x30, [sp, -16]!
14627         add     x29, sp, 0
14628         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
14629         ldr     x0, [x0, #:got_lo12:gVendorBlkInfo]
14630         ldrh    w1, [x1]
14631         strh    w1, [x0,10]
14632         mov     w1, -3962
14633         strh    w1, [x0,4]
14634         adrp    x1, :got:g_totle_vendor_block
14635         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
14636         ldrh    w1, [x1]
14637         strh    w1, [x0,8]
14638         adrp    x1, :got:c_ftl_nand_vendor_region_num
14639         ldr     x1, [x1, #:got_lo12:c_ftl_nand_vendor_region_num]
14640         ldrh    w1, [x1]
14641         strh    w1, [x0,6]
14642         adrp    x1, :got:p_vendor_block_table
14643         ldr     x1, [x1, #:got_lo12:p_vendor_block_table]
14644         ldr     x1, [x1]
14645         str     x1, [x0,16]
14646         adrp    x1, :got:p_vendor_block_ver_table
14647         ldr     x1, [x1, #:got_lo12:p_vendor_block_ver_table]
14648         ldr     x1, [x1]
14649         str     x1, [x0,24]
14650         adrp    x1, :got:p_vendor_block_valid_page_count
14651         ldr     x1, [x1, #:got_lo12:p_vendor_block_valid_page_count]
14652         ldr     x1, [x1]
14653         str     x1, [x0,32]
14654         adrp    x1, :got:p_vendor_region_ppn_table
14655         ldr     x1, [x1, #:got_lo12:p_vendor_region_ppn_table]
14656         ldr     x1, [x1]
14657         str     x1, [x0,40]
14658         bl      FtlMapTblRecovery
14659         mov     w0, 0
14660         ldp     x29, x30, [sp], 16
14661         ret
14662         .size   FtlLoadVonderInfo, .-FtlLoadVonderInfo
14663         .align  2
14664         .global FtlLoadMapInfo
14665         .type   FtlLoadMapInfo, %function
14666 FtlLoadMapInfo:
14667         stp     x29, x30, [sp, -16]!
14668         add     x29, sp, 0
14669         bl      FtlL2PDataInit
14670         adrp    x0, :got:gL2pMapInfo
14671         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
14672         bl      FtlMapTblRecovery
14673         mov     w0, 0
14674         ldp     x29, x30, [sp], 16
14675         ret
14676         .size   FtlLoadMapInfo, .-FtlLoadMapInfo
14677         .align  2
14678         .global FtlReadRefresh
14679         .type   FtlReadRefresh, %function
14680 FtlReadRefresh:
14681         stp     x29, x30, [sp, -128]!
14682         add     x29, sp, 0
14683         stp     x19, x20, [sp,16]
14684         adrp    x19, :got:g_sys_ext_data
14685         str     x23, [sp,48]
14686         stp     x21, x22, [sp,32]
14687         ldr     x1, [x19, #:got_lo12:g_sys_ext_data]
14688         ldr     w0, [x1,80]
14689         cbz     w0, .L1930
14690         adrp    x0, :got:g_MaxLpn
14691         ldr     w3, [x1,84]
14692         mov     x20, x0
14693         ldr     x2, [x0, #:got_lo12:g_MaxLpn]
14694         ldr     w2, [x2]
14695         cmp     w3, w2
14696         bcs     .L1931
14697         mov     w21, 2048
14698         add     x23, x29, 68
14699 .L1936:
14700         ldr     x22, [x19, #:got_lo12:g_sys_ext_data]
14701         ldr     x1, [x20, #:got_lo12:g_MaxLpn]
14702         ldr     w0, [x22,84]
14703         ldr     w1, [x1]
14704         cmp     w0, w1
14705         bcs     .L1933
14706         mov     w2, 0
14707         mov     x1, x23
14708         bl      log2phys
14709         ldr     w0, [x22,84]
14710         ldr     w2, [x29,68]
14711         add     w0, w0, 1
14712         str     w0, [x22,84]
14713         cmn     w2, #1
14714         beq     .L1934
14715         str     w2, [x29,76]
14716         mov     w1, 1
14717         str     w0, [x29,96]
14718         mov     w2, 0
14719         add     x0, x29, 72
14720         str     xzr, [x29,80]
14721         str     xzr, [x29,88]
14722         str     wzr, [x29,72]
14723         bl      FlashReadPages
14724         ldr     w0, [x29,72]
14725         cmp     w0, 256
14726         bne     .L1933
14727         ldr     w0, [x29,68]
14728         lsr     w0, w0, 10
14729         bl      P2V_block_in_plane
14730         bl      FtlGcRefreshBlock
14731         b       .L1933
14732 .L1934:
14733         subs    w21, w21, #1
14734         bne     .L1936
14735 .L1933:
14736         mov     w0, -1
14737         b       .L1938
14738 .L1931:
14739         adrp    x0, :got:g_totle_read_page_count
14740         str     wzr, [x1,80]
14741         str     wzr, [x1,84]
14742         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
14743         ldr     w0, [x0]
14744         str     w0, [x1,76]
14745         b       .L1942
14746 .L1930:
14747         adrp    x2, :got:g_max_erase_count
14748         ldr     w1, [x1,76]
14749         ldr     x2, [x2, #:got_lo12:g_max_erase_count]
14750         ldr     w3, [x2]
14751         adrp    x2, :got:g_inkDie_check_enable
14752         ldr     x2, [x2, #:got_lo12:g_inkDie_check_enable]
14753         ldr     w4, [x2]
14754         adrp    x2, :got:g_totle_read_page_count
14755         ldr     x2, [x2, #:got_lo12:g_totle_read_page_count]
14756         ldr     w2, [x2]
14757         add     w5, w2, 1048576
14758         cmp     w1, w5
14759         bhi     .L1939
14760         add     w3, w4, w3, lsr 10
14761         mov     w4, 33554432
14762         asr     w3, w4, w3
14763         add     w1, w3, w1
14764         cmp     w1, w2
14765         bcs     .L1938
14766 .L1939:
14767         ldr     x0, [x19, #:got_lo12:g_sys_ext_data]
14768         mov     w1, 1
14769         str     wzr, [x0,84]
14770         str     w1, [x0,80]
14771         str     w2, [x0,76]
14772 .L1942:
14773         mov     w0, 0
14774 .L1938:
14775         ldp     x19, x20, [sp,16]
14776         ldp     x21, x22, [sp,32]
14777         ldr     x23, [sp,48]
14778         ldp     x29, x30, [sp], 128
14779         ret
14780         .size   FtlReadRefresh, .-FtlReadRefresh
14781         .align  2
14782         .global FtlVendorPartWrite
14783         .type   FtlVendorPartWrite, %function
14784 FtlVendorPartWrite:
14785         stp     x29, x30, [sp, -176]!
14786         add     x29, sp, 0
14787         stp     x25, x26, [sp,64]
14788         mov     w26, w0
14789         adrp    x0, :got:c_ftl_nand_sec_pre_page_shift
14790         stp     x19, x20, [sp,16]
14791         stp     x23, x24, [sp,48]
14792         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
14793         mov     w25, w1
14794         stp     x21, x22, [sp,32]
14795         stp     x27, x28, [sp,80]
14796         add     w1, w26, w1
14797         mov     x23, x2
14798         ldrh    w20, [x0]
14799         adrp    x0, :got:c_ftl_vendor_part_size
14800         mov     w19, -1
14801         ldr     x0, [x0, #:got_lo12:c_ftl_vendor_part_size]
14802         ldrh    w0, [x0]
14803         cmp     w1, w0
14804         bhi     .L1944
14805         lsr     w20, w26, w20
14806         mov     w19, 0
14807         adrp    x24, :got:p_vendor_data_buf
14808         add     x22, x29, 120
14809         adrp    x28, :got:gVendorBlkInfo
14810 .L1945:
14811         cbz     w25, .L1944
14812         adrp    x0, :got:p_vendor_region_ppn_table
14813         ldr     x0, [x0, #:got_lo12:p_vendor_region_ppn_table]
14814         ldr     x0, [x0]
14815         ldr     w2, [x0,w20,uxtw 2]
14816         adrp    x0, :got:c_ftl_nand_sec_pre_page
14817         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
14818         ldrh    w1, [x0]
14819         uxth    w0, w25
14820         udiv    w21, w26, w1
14821         msub    w21, w21, w1, w26
14822         sub     w3, w1, w21
14823         uxth    w27, w3
14824         cmp     w27, w25
14825         csel    w27, w0, w27, hi
14826         cmp     w27, w1
14827         beq     .L1947
14828         cbz     w2, .L1947
14829         ldr     x0, [x24, #:got_lo12:p_vendor_data_buf]
14830         mov     w1, 1
14831         str     w2, [x22,4]
14832         mov     w2, w1
14833         str     xzr, [x22,16]
14834         ldr     x0, [x0]
14835         str     x0, [x22,8]
14836         mov     x0, x22
14837         bl      FlashReadPages
14838         b       .L1948
14839 .L1947:
14840         adrp    x1, :got:c_ftl_nand_byte_pre_page
14841         ldr     x0, [x24, #:got_lo12:p_vendor_data_buf]
14842         ldr     x2, [x1, #:got_lo12:c_ftl_nand_byte_pre_page]
14843         mov     w1, 0
14844         ldr     x0, [x0]
14845         ldrh    w2, [x2]
14846         bl      ftl_memset
14847 .L1948:
14848         ldr     x7, [x24, #:got_lo12:p_vendor_data_buf]
14849         lsl     w6, w27, 9
14850         ubfiz   x21, x21, 9, 16
14851         mov     w2, w6
14852         mov     x1, x23
14853         str     x6, [x29,104]
14854         ldr     x0, [x7]
14855         sub     w25, w25, w27
14856         str     x7, [x29,96]
14857         add     w26, w26, w27
14858         add     x0, x0, x21
14859         bl      ftl_memcpy
14860         ldr     x7, [x29,96]
14861         mov     w1, w20
14862         ldr     x0, [x28, #:got_lo12:gVendorBlkInfo]
14863         add     w20, w20, 1
14864         ldr     x2, [x7]
14865         bl      FtlMapWritePage
14866         cmn     w0, #1
14867         ldr     x6, [x29,104]
14868         csinv   w19, w19, wzr, ne
14869         add     x23, x23, x6, sxtw
14870         b       .L1945
14871 .L1944:
14872         mov     w0, w19
14873         ldp     x19, x20, [sp,16]
14874         ldp     x21, x22, [sp,32]
14875         ldp     x23, x24, [sp,48]
14876         ldp     x25, x26, [sp,64]
14877         ldp     x27, x28, [sp,80]
14878         ldp     x29, x30, [sp], 176
14879         ret
14880         .size   FtlVendorPartWrite, .-FtlVendorPartWrite
14881         .align  2
14882         .global Ftl_save_ext_data
14883         .type   Ftl_save_ext_data, %function
14884 Ftl_save_ext_data:
14885         adrp    x2, :got:g_sys_ext_data
14886         mov     w0, 19539
14887         stp     x29, x30, [sp, -16]!
14888         movk    w0, 0x4654, lsl 16
14889         add     x29, sp, 0
14890         ldr     x2, [x2, #:got_lo12:g_sys_ext_data]
14891         ldr     w1, [x2]
14892         cmp     w1, w0
14893         bne     .L1958
14894         mov     w0, 39
14895         mov     w1, 1
14896         movk    w0, 0x5000, lsl 16
14897         str     w0, [x2,4]
14898         adrp    x0, :got:g_totle_write_sector
14899         ldr     x0, [x0, #:got_lo12:g_totle_write_sector]
14900         ldr     w0, [x0]
14901         str     w0, [x2,88]
14902         adrp    x0, :got:g_totle_read_sector
14903         ldr     x0, [x0, #:got_lo12:g_totle_read_sector]
14904         ldr     w0, [x0]
14905         str     w0, [x2,92]
14906         adrp    x0, :got:g_totle_gc_page_count
14907         ldr     x0, [x0, #:got_lo12:g_totle_gc_page_count]
14908         ldr     w0, [x0]
14909         str     w0, [x2,8]
14910         adrp    x0, :got:g_totle_write_page_count
14911         ldr     x0, [x0, #:got_lo12:g_totle_write_page_count]
14912         ldr     w0, [x0]
14913         str     w0, [x2,12]
14914         adrp    x0, :got:g_totle_read_page_count
14915         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
14916         ldr     w0, [x0]
14917         str     w0, [x2,16]
14918         adrp    x0, :got:g_totle_l2p_write_count
14919         ldr     x0, [x0, #:got_lo12:g_totle_l2p_write_count]
14920         ldr     w0, [x0]
14921         str     w0, [x2,20]
14922         adrp    x0, :got:g_totle_slc_erase_count
14923         ldr     x0, [x0, #:got_lo12:g_totle_slc_erase_count]
14924         ldr     w0, [x0]
14925         str     w0, [x2,28]
14926         adrp    x0, :got:g_totle_sys_slc_erase_count
14927         ldr     x0, [x0, #:got_lo12:g_totle_sys_slc_erase_count]
14928         ldr     w0, [x0]
14929         str     w0, [x2,32]
14930         adrp    x0, :got:g_totle_discard_page_count
14931         ldr     x0, [x0, #:got_lo12:g_totle_discard_page_count]
14932         ldr     w0, [x0]
14933         str     w0, [x2,36]
14934         adrp    x0, :got:g_totle_cache_write_count
14935         ldr     x0, [x0, #:got_lo12:g_totle_cache_write_count]
14936         ldr     w0, [x0]
14937         str     w0, [x2,40]
14938         adrp    x0, :got:g_max_erase_count
14939         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
14940         ldr     w0, [x0]
14941         str     w0, [x2,44]
14942         adrp    x0, :got:g_min_erase_count
14943         ldr     x0, [x0, #:got_lo12:g_min_erase_count]
14944         ldr     w0, [x0]
14945         str     w0, [x2,48]
14946         adrp    x0, :got:g_all_blk_used_slc_mode
14947         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
14948         ldr     w0, [x0]
14949         str     w0, [x2,60]
14950         adrp    x0, :got:g_SlcPartLbaEndSector
14951         ldr     x0, [x0, #:got_lo12:g_SlcPartLbaEndSector]
14952         ldr     w0, [x0]
14953         str     w0, [x2,64]
14954         mov     w0, 0
14955         bl      FtlVendorPartWrite
14956 .L1958:
14957         ldp     x29, x30, [sp], 16
14958         ret
14959         .size   Ftl_save_ext_data, .-Ftl_save_ext_data
14960         .align  2
14961         .global FtlEctTblFlush
14962         .type   FtlEctTblFlush, %function
14963 FtlEctTblFlush:
14964         adrp    x1, :got:g_inkDie_check_enable
14965         stp     x29, x30, [sp, -16]!
14966         add     x29, sp, 0
14967         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
14968         ldr     w2, [x1]
14969         mov     w1, 32
14970         cbz     w2, .L1961
14971         adrp    x2, :got:g_min_erase_count
14972         ldr     x2, [x2, #:got_lo12:g_min_erase_count]
14973         ldr     w2, [x2]
14974         cmp     w2, 29
14975         mov     w2, 4
14976         csel    w1, w1, w2, hi
14977 .L1961:
14978         adrp    x2, :got:g_ect_tbl_power_up_flush
14979         ldr     x2, [x2, #:got_lo12:g_ect_tbl_power_up_flush]
14980         ldrh    w3, [x2]
14981         cmp     w3, 31
14982         bhi     .L1962
14983         add     w3, w3, 1
14984         mov     w1, 1
14985         strh    w3, [x2]
14986 .L1962:
14987         adrp    x2, :got:gp_ect_tbl_info
14988         cbnz    w0, .L1963
14989         ldr     x0, [x2, #:got_lo12:gp_ect_tbl_info]
14990         ldr     x3, [x0]
14991         ldr     w0, [x3,20]
14992         add     w1, w1, w0
14993         ldr     w0, [x3,16]
14994         cmp     w0, w1
14995         bcc     .L1964
14996 .L1963:
14997         ldr     x2, [x2, #:got_lo12:gp_ect_tbl_info]
14998         ldr     x0, [x2]
14999         ldr     w1, [x0,16]
15000         str     w1, [x0,20]
15001         mov     w1, 17221
15002         movk    w1, 0x4254, lsl 16
15003         str     w1, [x0]
15004         adrp    x1, :got:g_ect_tbl_info_size
15005         ldr     x0, [x2]
15006         ldr     x1, [x1, #:got_lo12:g_ect_tbl_info_size]
15007         str     wzr, [x0,4]
15008         ldrh    w1, [x1]
15009         ldr     x2, [x2]
15010         lsl     w3, w1, 9
15011         str     w3, [x0,12]
15012         ldr     w3, [x0,8]
15013         add     w3, w3, 1
15014         str     w3, [x0,8]
15015         mov     w0, 64
15016         bl      FtlVendorPartWrite
15017         bl      Ftl_save_ext_data
15018 .L1964:
15019         mov     w0, 0
15020         ldp     x29, x30, [sp], 16
15021         ret
15022         .size   FtlEctTblFlush, .-FtlEctTblFlush
15023         .align  2
15024         .global FtlMapBlkWriteDumpData
15025         .type   FtlMapBlkWriteDumpData, %function
15026 FtlMapBlkWriteDumpData:
15027         stp     x29, x30, [sp, -48]!
15028         add     x29, sp, 0
15029         stp     x19, x20, [sp,16]
15030         str     x21, [sp,32]
15031         ldr     w1, [x0,56]
15032         ldrh    w20, [x0,6]
15033         ldr     x4, [x0,40]
15034         cbz     w1, .L1968
15035         str     wzr, [x0,56]
15036         mov     x21, x0
15037         adrp    x0, :got:p_sys_data_buf_1
15038         adrp    x2, :got:req_sys
15039         adrp    x3, :got:p_sys_spare_buf
15040         sub     w20, w20, #1
15041         mov     x19, x2
15042         ldr     x0, [x0, #:got_lo12:p_sys_data_buf_1]
15043         uxth    w20, w20
15044         ldr     x1, [x2, #:got_lo12:req_sys]
15045         ldr     x0, [x0]
15046         str     x0, [x1,8]
15047         ldr     x3, [x3, #:got_lo12:p_sys_spare_buf]
15048         ldr     x3, [x3]
15049         str     x3, [x1,16]
15050         ubfiz   x3, x20, 2, 16
15051         ldr     w3, [x4,x3]
15052         str     w3, [x1,4]
15053         cbz     w3, .L1970
15054         mov     x0, x1
15055         mov     w1, 1
15056         mov     w2, w1
15057         bl      FlashReadPages
15058         b       .L1971
15059 .L1970:
15060         adrp    x2, :got:c_ftl_nand_byte_pre_page
15061         mov     w1, 255
15062         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
15063         ldrh    w2, [x2]
15064         bl      ftl_memset
15065 .L1971:
15066         ldr     x2, [x19, #:got_lo12:req_sys]
15067         mov     x0, x21
15068         mov     w1, w20
15069         ldr     x2, [x2,8]
15070         bl      FtlMapWritePage
15071 .L1968:
15072         ldp     x19, x20, [sp,16]
15073         ldr     x21, [sp,32]
15074         ldp     x29, x30, [sp], 48
15075         ret
15076         .size   FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData
15077         .align  2
15078         .global FtlRecoverySuperblock
15079         .type   FtlRecoverySuperblock, %function
15080 FtlRecoverySuperblock:
15081         stp     x29, x30, [sp, -240]!
15082         add     x29, sp, 0
15083         stp     x19, x20, [sp,16]
15084         stp     x21, x22, [sp,32]
15085         stp     x23, x24, [sp,48]
15086         stp     x25, x26, [sp,64]
15087         stp     x27, x28, [sp,80]
15088         mov     x19, x0
15089         ldrh    w25, [x0,2]
15090         ldrb    w22, [x0,6]
15091         adrp    x0, :got:c_ftl_nand_page_pre_blk
15092         str     x0, [x29,160]
15093         ldr     x1, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
15094         ldrh    w1, [x1]
15095         cmp     w1, w25
15096         bne     .L1976
15097         strh    wzr, [x19,4]
15098         b       .L2119
15099 .L1976:
15100         ldrh    w0, [x19,16]
15101         mov     w1, 0
15102         mov     w2, 65535
15103 .L1978:
15104         cmp     w0, w2
15105         bne     .L2122
15106         add     w1, w1, 1
15107         uxth    w1, w1
15108         add     x0, x19, x1, sxtw 1
15109         ldrh    w0, [x0,16]
15110         b       .L1978
15111 .L2122:
15112         ldrb    w1, [x19,8]
15113         cmp     w1, 1
15114         bne     .L1980
15115         bl      FtlGetLastWrittenPage
15116         cmn     w0, #1
15117         mov     w20, w0
15118         beq     .L1981
15119         adrp    x0, :got:slcPageToMlcPageTbl
15120         ldr     x0, [x0, #:got_lo12:slcPageToMlcPageTbl]
15121         ldrh    w23, [x0,w20,sxtw 1]
15122         b       .L1982
15123 .L1980:
15124         mov     w1, 0
15125         bl      FtlGetLastWrittenPage
15126         cmn     w0, #1
15127         mov     w20, w0
15128         beq     .L1981
15129         mov     w23, w0
15130 .L1982:
15131         adrp    x1, :got:c_ftl_nand_planes_num
15132         adrp    x0, :got:c_ftl_nand_byte_pre_oob
15133         mov     w26, 0
15134         str     x1, [x29,192]
15135         mov     w7, 65535
15136         mov     w8, 56
15137         ldr     x2, [x1, #:got_lo12:c_ftl_nand_planes_num]
15138         adrp    x9, :got:req_read
15139         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
15140         mov     w10, 4
15141         adrp    x11, :got:p_gc_spare_buf
15142         ldrh    w3, [x2]
15143         mov     x2, x19
15144         ldrh    w6, [x0]
15145         add     x3, x19, x3, lsl 1
15146         b       .L1983
15147 .L1981:
15148         strh    wzr, [x19,2]
15149 .L2119:
15150         strb    wzr, [x19,6]
15151         b       .L1977
15152 .L1985:
15153         ldrh    w1, [x2,16]
15154         cmp     w1, w7
15155         beq     .L1984
15156         ldr     x5, [x9, #:got_lo12:req_read]
15157         orr     w1, w23, w1, lsl 10
15158         umull   x0, w26, w8
15159         ldr     x4, [x5]
15160         add     x4, x4, x0
15161         str     w1, [x4,4]
15162         ldr     x1, [x5]
15163         add     x0, x1, x0
15164         mul     w1, w26, w6
15165         add     w26, w26, 1
15166         str     xzr, [x0,8]
15167         sdiv    w1, w1, w10
15168         uxth    w26, w26
15169         ldr     x4, [x11, #:got_lo12:p_gc_spare_buf]
15170         ldr     x4, [x4]
15171         add     x1, x4, x1, sxtw 2
15172         str     x1, [x0,16]
15173 .L1984:
15174         add     x2, x2, 2
15175 .L1983:
15176         cmp     x2, x3
15177         bne     .L1985
15178         adrp    x21, :got:req_read
15179         mov     w1, w26
15180         mov     w2, 0
15181         mov     w24, 65535
15182         ldr     x0, [x21, #:got_lo12:req_read]
15183         ldr     x0, [x0]
15184         bl      FlashReadPages
15185         adrp    x0, :got:g_GlobalDataVersion
15186         mov     x3, 0
15187         str     x0, [x29,152]
15188         mov     x6, 56
15189         uxth    w7, w23
15190         ldr     x1, [x0, #:got_lo12:g_GlobalDataVersion]
15191         ldr     w27, [x1]
15192 .L1986:
15193         uxth    w28, w3
15194         cmp     w28, w26
15195         bcs     .L1995
15196         ldr     x0, [x21, #:got_lo12:req_read]
15197         mul     x2, x3, x6
15198         ldr     x0, [x0]
15199         add     x1, x0, x2
15200         ldr     w0, [x0,x2]
15201         cbnz    w0, .L1987
15202         ldr     x5, [x1,16]
15203         str     x5, [x29,168]
15204         ldr     w0, [x5,4]
15205         cmn     w0, #1
15206         beq     .L1989
15207         ldr     x1, [x29,152]
15208         str     x7, [x29,176]
15209         str     x6, [x29,184]
15210         ldr     x4, [x1, #:got_lo12:g_GlobalDataVersion]
15211         str     x2, [x29,200]
15212         str     x3, [x29,208]
15213         ldr     w1, [x4]
15214         str     x4, [x29,216]
15215         bl      ftl_cmp_data_ver
15216         ldr     x4, [x29,216]
15217         ldr     x3, [x29,208]
15218         ldr     x2, [x29,200]
15219         ldr     x6, [x29,184]
15220         ldr     x7, [x29,176]
15221         ldr     x5, [x29,168]
15222         cbz     w0, .L1989
15223         ldr     w0, [x5,4]
15224         add     w0, w0, 1
15225         str     w0, [x4]
15226 .L1989:
15227         ldr     x0, [x21, #:got_lo12:req_read]
15228         ldr     x0, [x0]
15229         add     x2, x0, x2
15230         ldr     x0, [x2,16]
15231         ldr     w0, [x0]
15232         cmn     w0, #1
15233         bne     .L1991
15234 .L1995:
15235         cmp     w28, w26
15236         bne     .L2114
15237         ldr     x0, [x21, #:got_lo12:req_read]
15238         add     w20, w20, 1
15239         uxth    w20, w20
15240         ldr     x0, [x0]
15241         ldr     w0, [x0,4]
15242         b       .L2115
15243 .L1987:
15244         mov     w24, w7
15245 .L1991:
15246         add     x3, x3, 1
15247         b       .L1986
15248 .L2114:
15249         mov     w0, 56
15250         uxth    w20, w20
15251         umull   x28, w28, w0
15252         ldr     x0, [x21, #:got_lo12:req_read]
15253         ldr     x0, [x0]
15254         add     x28, x0, x28
15255         ldr     w0, [x28,4]
15256 .L2115:
15257         lsr     w0, w0, 10
15258         bl      P2V_plane
15259         uxth    w26, w0
15260         ldrb    w1, [x19,8]
15261         cmp     w1, 1
15262         bne     .L1997
15263         adrp    x0, :got:slcPageToMlcPageTbl
15264         ldr     x0, [x0, #:got_lo12:slcPageToMlcPageTbl]
15265         ldrh    w20, [x0,w20,sxtw 1]
15266 .L1997:
15267         ldr     x0, [x29,160]
15268         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
15269         ldrh    w0, [x0]
15270         cmp     w0, w20
15271         bne     .L1998
15272         strh    w20, [x19,2]
15273         strb    wzr, [x19,6]
15274         strh    wzr, [x19,4]
15275 .L1998:
15276         uxth    w0, w22
15277         cmp     w20, w25
15278         str     w0, [x29,184]
15279         bne     .L1999
15280         cmp     w26, w0
15281         beq     .L2120
15282 .L1999:
15283         mov     w0, 65535
15284         sub     w22, w27, #1
15285         cmp     w24, w0
15286         bne     .L2000
15287         cbnz    w1, .L2001
15288 .L2000:
15289         adrp    x24, :got:g_recovery_page_min_ver
15290         uxth    w5, w23
15291         ldr     x0, [x24, #:got_lo12:g_recovery_page_min_ver]
15292         ldr     w1, [x0]
15293         cmn     w1, #1
15294         bne     .L2002
15295         str     w22, [x0]
15296 .L2002:
15297         ldr     x0, [x24, #:got_lo12:g_recovery_page_min_ver]
15298         mov     w27, w25
15299         ldr     w6, [x0]
15300         add     w0, w25, 7
15301         cmp     w0, w23, uxth
15302         bge     .L2003
15303         sub     w27, w5, #7
15304         uxth    w27, w27
15305 .L2003:
15306         mov     w3, -1
15307         mov     w4, 65535
15308         mov     w28, w3
15309         mov     w7, 56
15310         adrp    x8, :got:mlcPageToSlcPageTbl
15311 .L2004:
15312         cmp     w27, w5
15313         bhi     .L2017
15314         ldr     x0, [x29,192]
15315         mov     w23, 0
15316         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
15317         ldrh    w2, [x0]
15318         mov     x0, x19
15319         add     x2, x19, x2, lsl 1
15320 .L2018:
15321         cmp     x0, x2
15322         beq     .L2123
15323         ldrh    w1, [x0,16]
15324         cmp     w1, w4
15325         beq     .L2005
15326         ldr     x10, [x21, #:got_lo12:req_read]
15327         orr     w1, w27, w1, lsl 10
15328         umull   x9, w23, w7
15329         add     w23, w23, 1
15330         ldr     x10, [x10]
15331         uxth    w23, w23
15332         add     x9, x10, x9
15333         str     w1, [x9,4]
15334 .L2005:
15335         add     x0, x0, 2
15336         b       .L2018
15337 .L2123:
15338         ldr     x9, [x21, #:got_lo12:req_read]
15339         mov     w1, w23
15340         mov     w2, 0
15341         str     x8, [x29,136]
15342         str     x7, [x29,144]
15343         ldr     x0, [x9]
15344         str     x4, [x29,168]
15345         str     x6, [x29,176]
15346         str     x5, [x29,200]
15347         str     x3, [x29,208]
15348         str     x9, [x29,216]
15349         bl      FlashReadPages
15350         ldr     x9, [x29,216]
15351         mov     w1, 0
15352         ldr     x3, [x29,208]
15353         sxtw    x10, w27
15354         ldr     x5, [x29,200]
15355         ldr     x0, [x9]
15356         ldr     x6, [x29,176]
15357         ldr     x4, [x29,168]
15358         add     x0, x0, 16
15359         ldr     x7, [x29,144]
15360         ldr     x8, [x29,136]
15361 .L2007:
15362         cmp     w1, w23
15363         beq     .L2124
15364         ldr     w2, [x0,-16]
15365         cbnz    w2, .L2008
15366         ldr     x2, [x0]
15367         ldrh    w9, [x2]
15368         cmp     w9, w4
15369         beq     .L2009
15370         ldr     w9, [x2,4]
15371         cmn     w9, #1
15372         beq     .L2009
15373         ldr     x2, [x24, #:got_lo12:g_recovery_page_min_ver]
15374         cmn     w3, #1
15375         ldr     w28, [x2]
15376         str     w9, [x2]
15377         bne     .L2009
15378         ldr     x2, [x8, #:got_lo12:mlcPageToSlcPageTbl]
15379         ldrh    w2, [x2,x10,lsl 1]
15380         cmp     w2, w4
15381         beq     .L2009
15382         cmp     w28, w22
15383         csinv   w3, w28, wzr, ne
15384         b       .L2009
15385 .L2008:
15386         ldrb    w0, [x19,8]
15387         cbnz    w0, .L2001
15388         adrp    x0, :got:mlcPageToSlcPageTbl
15389         ldr     x0, [x0, #:got_lo12:mlcPageToSlcPageTbl]
15390         ldrh    w1, [x0,w27,sxtw 1]
15391         mov     w0, 65535
15392         cmp     w1, w0
15393         bne     .L2012
15394         cmn     w3, #1
15395         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15396         beq     .L2013
15397         str     w3, [x24]
15398         b       .L2001
15399 .L2013:
15400         cmp     w6, w22
15401         beq     .L2014
15402         str     w6, [x24]
15403         b       .L2001
15404 .L2014:
15405         ldr     w0, [x24]
15406         b       .L2121
15407 .L2012:
15408         cmp     w28, w22
15409         beq     .L2015
15410         cmn     w28, #1
15411         beq     .L2001
15412         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15413         str     w28, [x24]
15414         b       .L2001
15415 .L2015:
15416         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15417         ldr     w0, [x24]
15418         cmp     w0, w22
15419         beq     .L2001
15420 .L2121:
15421         sub     w0, w0, #1
15422         b       .L2116
15423 .L2009:
15424         add     w1, w1, 1
15425         add     x0, x0, 56
15426         uxth    w1, w1
15427         b       .L2007
15428 .L2124:
15429         add     w27, w27, 1
15430         uxth    w27, w27
15431         b       .L2004
15432 .L2017:
15433         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15434         mov     w0, -1
15435 .L2116:
15436         str     w0, [x24]
15437 .L2001:
15438         adrp    x0, :got:g_power_lost_recovery_flag
15439         mov     w1, 1
15440         mov     w23, w25
15441         ldr     x0, [x0, #:got_lo12:g_power_lost_recovery_flag]
15442         strh    w1, [x0]
15443         adrp    x0, :got:gL2pMapInfo
15444         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
15445         bl      FtlMapBlkWriteDumpData
15446         add     x0, x29, 232
15447         str     x0, [x29,144]
15448         adrp    x0, .LC111
15449         add     x0, x0, :lo12:.LC111
15450         str     x0, [x29,128]
15451         add     x0, x29, 236
15452         str     x0, [x29,120]
15453         add     x0, x29, 228
15454         str     x0, [x29,112]
15455 .L2019:
15456         ldr     x0, [x29,192]
15457         mov     w4, 65535
15458         str     wzr, [x29,216]
15459         mov     w5, 56
15460         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
15461         ldrh    w2, [x0]
15462         mov     x0, x19
15463         add     x2, x19, x2, lsl 1
15464 .L2020:
15465         cmp     x0, x2
15466         beq     .L2125
15467         ldrh    w1, [x0,16]
15468         cmp     w1, w4
15469         beq     .L2021
15470         ldr     w3, [x29,216]
15471         orr     w1, w23, w1, lsl 10
15472         ldr     x6, [x21, #:got_lo12:req_read]
15473         umull   x3, w3, w5
15474         ldr     x6, [x6]
15475         add     x3, x6, x3
15476         str     w1, [x3,4]
15477         ldr     w1, [x29,216]
15478         add     w1, w1, 1
15479         uxth    w1, w1
15480         str     w1, [x29,216]
15481 .L2021:
15482         add     x0, x0, 2
15483         b       .L2020
15484 .L2125:
15485         ldr     x0, [x21, #:got_lo12:req_read]
15486         mov     w2, 0
15487         ldr     w1, [x29,216]
15488         ldr     x0, [x0]
15489         bl      FlashReadPages
15490         str     xzr, [x29,200]
15491 .L2023:
15492         ldrh    w0, [x29,200]
15493         ldr     w1, [x29,216]
15494         cmp     w1, w0, uxth
15495         bls     .L2126
15496         ldr     x0, [x29,200]
15497         mov     x1, 56
15498         mul     x24, x0, x1
15499         ldr     x0, [x21, #:got_lo12:req_read]
15500         ldr     x0, [x0]
15501         add     x0, x0, x24
15502         ldr     w0, [x0,4]
15503         str     w0, [x29,236]
15504         lsr     w0, w0, 10
15505         bl      P2V_plane
15506         uxth    w0, w0
15507         cmp     w23, w25
15508         bcc     .L2024
15509         ldr     w1, [x29,184]
15510         cmp     w0, w1
15511         bcs     .L2056
15512         cmp     w23, w25
15513         beq     .L2024
15514 .L2056:
15515         cmp     w0, w26
15516         bne     .L2057
15517         cmp     w23, w20
15518         beq     .L2026
15519 .L2057:
15520         ldr     x0, [x21, #:got_lo12:req_read]
15521         ldr     x0, [x0]
15522         add     x1, x0, x24
15523         ldr     w0, [x0,x24]
15524         cmn     w0, #1
15525         beq     .L2028
15526         ldr     x28, [x1,16]
15527         mov     w0, 61589
15528         ldrh    w1, [x28]
15529         cmp     w1, w0
15530         bne     .L2037
15531         ldr     w22, [x28,4]
15532         cmn     w22, #1
15533         beq     .L2031
15534         ldr     x0, [x29,152]
15535         ldr     x27, [x0, #:got_lo12:g_GlobalDataVersion]
15536         mov     w0, w22
15537         ldr     w1, [x27]
15538         bl      ftl_cmp_data_ver
15539         cbz     w0, .L2031
15540         ldr     w0, [x28,4]
15541         add     w0, w0, 1
15542         str     w0, [x27]
15543 .L2031:
15544         ldr     w27, [x28,8]
15545         mov     w2, 0
15546         ldr     w0, [x28,12]
15547         ldr     x1, [x29,144]
15548         str     w0, [x29,228]
15549         mov     w0, w27
15550         bl      log2phys
15551         adrp    x0, :got:g_recovery_page_min_ver
15552         str     x0, [x29,136]
15553         ldr     x1, [x0, #:got_lo12:g_recovery_page_min_ver]
15554         str     x1, [x29,168]
15555         ldr     w1, [x1]
15556         cmn     w1, #1
15557         beq     .L2033
15558         mov     w0, w22
15559         bl      ftl_cmp_data_ver
15560         cbz     w0, .L2033
15561         ldr     w1, [x29,228]
15562         cmn     w1, #1
15563         beq     .L2034
15564         ldr     x3, [x21, #:got_lo12:req_read]
15565         str     x3, [x29,104]
15566         ldr     x0, [x3]
15567         add     x0, x0, x24
15568         str     w1, [x0,4]
15569         mov     w1, 1
15570         ldr     x2, [x0,16]
15571         ldr     x0, [x3]
15572         str     x2, [x29,208]
15573         mov     w2, 0
15574         add     x0, x0, x24
15575         bl      FlashReadPages
15576         ldr     x0, [x29,208]
15577         ldr     x3, [x29,104]
15578         ldr     w0, [x0,4]
15579         str     w0, [x29,176]
15580         ldr     x0, [x3]
15581         ldr     w0, [x0,x24]
15582         cmn     w0, #1
15583         bne     .L2035
15584         b       .L2036
15585 .L2034:
15586         ldr     w0, [x29,236]
15587         ldr     w1, [x29,232]
15588         cmp     w1, w0
15589         bne     .L2037
15590         ldr     x1, [x29,112]
15591         mov     w0, w27
15592         mov     w2, 1
15593         bl      log2phys
15594 .L2037:
15595         ldrh    w0, [x19]
15596         b       .L2118
15597 .L2035:
15598         ldr     x0, [x29,208]
15599         ldr     w28, [x0,8]
15600         cmp     w28, w27
15601         bne     .L2036
15602         ldr     x0, [x29,168]
15603         ldr     w1, [x29,176]
15604         str     x3, [x29,104]
15605         ldr     w0, [x0]
15606         bl      ftl_cmp_data_ver
15607         ldr     x3, [x29,104]
15608         cbz     w0, .L2036
15609         ldr     w0, [x29,232]
15610         ldr     w1, [x29,236]
15611         cmp     w0, w1
15612         beq     .L2042
15613         ldr     w1, [x29,228]
15614         cmp     w0, w1
15615         beq     .L2036
15616         cmn     w0, #1
15617         ldr     x1, [x3]
15618         beq     .L2040
15619         add     x1, x1, x24
15620         str     w0, [x1,4]
15621         ldr     x2, [x1,16]
15622         mov     w1, 1
15623         ldr     x0, [x3]
15624         str     x2, [x29,208]
15625         mov     w2, 0
15626         add     x0, x0, x24
15627         bl      FlashReadPages
15628         b       .L2041
15629 .L2040:
15630         str     w0, [x1,x24]
15631 .L2041:
15632         ldr     x0, [x21, #:got_lo12:req_read]
15633         ldr     x0, [x0]
15634         ldr     w0, [x0,x24]
15635         cmn     w0, #1
15636         beq     .L2042
15637         ldr     x0, [x29,208]
15638         ldr     w24, [x0,4]
15639         ldr     x0, [x29,136]
15640         mov     w1, w24
15641         ldr     x0, [x0, #:got_lo12:g_recovery_page_min_ver]
15642         ldr     w0, [x0]
15643         bl      ftl_cmp_data_ver
15644         cbz     w0, .L2042
15645         ldr     w0, [x29,176]
15646         mov     w1, w24
15647         bl      ftl_cmp_data_ver
15648         cbz     w0, .L2036
15649 .L2042:
15650         ldr     w1, [x29,228]
15651         mov     w0, w28
15652         bl      FtlReUsePrevPpa
15653 .L2036:
15654         mov     w0, -1
15655         str     w0, [x29,228]
15656         ldrh    w0, [x19]
15657         bl      decrement_vpc_count
15658         b       .L2044
15659 .L2033:
15660         ldr     w0, [x29,236]
15661         ldr     w1, [x29,232]
15662         cmp     w1, w0
15663         beq     .L2044
15664         ldr     x1, [x29,120]
15665         mov     w0, w27
15666         mov     w2, 1
15667         bl      log2phys
15668         ldr     w0, [x29,232]
15669         cmn     w0, #1
15670         beq     .L2044
15671         ldr     w1, [x29,228]
15672         cmp     w0, w1
15673         beq     .L2044
15674         lsr     w0, w0, 10
15675         bl      P2V_block_in_plane
15676         uxth    w0, w0
15677         adrp    x1, :got:g_active_superblock
15678         ldr     x1, [x1, #:got_lo12:g_active_superblock]
15679         ldrh    w1, [x1]
15680         cmp     w1, w0
15681         beq     .L2047
15682         adrp    x1, :got:g_buffer_superblock
15683         ldr     x1, [x1, #:got_lo12:g_buffer_superblock]
15684         ldrh    w1, [x1]
15685         cmp     w1, w0
15686         beq     .L2047
15687         adrp    x1, :got:g_gc_temp_superblock
15688         ldr     x1, [x1, #:got_lo12:g_gc_temp_superblock]
15689         ldrh    w1, [x1]
15690         cmp     w1, w0
15691         bne     .L2044
15692 .L2047:
15693         ldr     x24, [x21, #:got_lo12:req_read]
15694         mov     w2, 0
15695         ldr     w1, [x29,232]
15696         ldr     x0, [x24]
15697         str     w1, [x0,4]
15698         mov     w1, 1
15699         ldr     x28, [x0,16]
15700         ldr     x0, [x24]
15701         bl      FlashReadPages
15702         ldr     x0, [x24]
15703         ldr     w1, [x28,4]
15704         ldr     w0, [x0]
15705         cmn     w0, #1
15706         beq     .L2044
15707         mov     w0, w22
15708         bl      ftl_cmp_data_ver
15709         cbnz    w0, .L2044
15710         ldr     x1, [x29,144]
15711         mov     w0, w27
15712         mov     w2, 1
15713         bl      log2phys
15714 .L2044:
15715         ldr     w0, [x29,228]
15716         cmn     w0, #1
15717         beq     .L2024
15718         lsr     w0, w0, 10
15719         bl      P2V_block_in_plane
15720         uxth    w1, w0
15721         adrp    x2, :got:p_valid_page_count_table
15722         ubfiz   x3, x1, 1, 16
15723         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
15724         ldr     x2, [x2]
15725         ldrh    w2, [x2,x3]
15726         cbz     w2, .L2048
15727 .L2118:
15728         bl      decrement_vpc_count
15729         b       .L2024
15730 .L2048:
15731         ldr     x0, [x29,128]
15732         bl      printk
15733         b       .L2024
15734 .L2028:
15735         adrp    x1, :got:g_recovery_page_num
15736         ldr     x1, [x1, #:got_lo12:g_recovery_page_num]
15737         ldr     w0, [x1]
15738         cmp     w0, 31
15739         bhi     .L2049
15740         adrp    x2, :got:g_recovery_ppa_tbl
15741         ldr     w3, [x29,236]
15742         ldr     x2, [x2, #:got_lo12:g_recovery_ppa_tbl]
15743         str     w3, [x2,w0,uxtw 2]
15744         add     w0, w0, 1
15745         str     w0, [x1]
15746 .L2049:
15747         ldrh    w0, [x19]
15748         bl      decrement_vpc_count
15749         adrp    x0, :got:g_recovery_page_min_ver
15750         ldr     x0, [x0, #:got_lo12:g_recovery_page_min_ver]
15751         ldr     w1, [x0]
15752         cmn     w1, #1
15753         beq     .L2117
15754         cmp     w1, w22
15755         bls     .L2024
15756 .L2117:
15757         str     w22, [x0]
15758 .L2024:
15759         ldr     x0, [x29,200]
15760         add     x0, x0, 1
15761         str     x0, [x29,200]
15762         b       .L2023
15763 .L2126:
15764         ldr     x0, [x29,160]
15765         add     w23, w23, 1
15766         uxth    w23, w23
15767         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
15768         ldrh    w0, [x0]
15769         cmp     w23, w0
15770         bne     .L2019
15771         ldr     x0, [x29,192]
15772         mov     w3, 65535
15773         strh    w23, [x19,2]
15774         strh    wzr, [x19,4]
15775         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
15776         ldrh    w2, [x0]
15777         mov     x0, 0
15778 .L2052:
15779         uxth    w1, w0
15780         cmp     w1, w2
15781         bcs     .L1977
15782         add     x0, x0, 1
15783         add     x4, x19, x0, lsl 1
15784         ldrh    w4, [x4,14]
15785         cmp     w4, w3
15786         beq     .L2052
15787         strb    w1, [x19,6]
15788         b       .L1977
15789 .L2026:
15790         strb    w26, [x19,6]
15791         strh    w20, [x19,2]
15792 .L2120:
15793         mov     x0, x19
15794         mov     w1, w20
15795         mov     w2, w26
15796         bl      ftl_sb_update_avl_pages
15797 .L1977:
15798         mov     w0, 0
15799         ldp     x19, x20, [sp,16]
15800         ldp     x21, x22, [sp,32]
15801         ldp     x23, x24, [sp,48]
15802         ldp     x25, x26, [sp,64]
15803         ldp     x27, x28, [sp,80]
15804         ldp     x29, x30, [sp], 240
15805         ret
15806         .size   FtlRecoverySuperblock, .-FtlRecoverySuperblock
15807         .align  2
15808         .global FtlWriteDumpData
15809         .type   FtlWriteDumpData, %function
15810 FtlWriteDumpData:
15811         stp     x29, x30, [sp, -144]!
15812         add     x29, sp, 0
15813         stp     x19, x20, [sp,16]
15814         adrp    x19, :got:g_active_superblock
15815         stp     x21, x22, [sp,32]
15816         stp     x23, x24, [sp,48]
15817         ldr     x0, [x19, #:got_lo12:g_active_superblock]
15818         stp     x25, x26, [sp,64]
15819         ldrh    w3, [x0,4]
15820         cbz     w3, .L2128
15821         ldrb    w1, [x0,8]
15822         cbnz    w1, .L2128
15823         adrp    x2, :got:c_ftl_nand_page_pre_blk
15824         ldrb    w1, [x0,7]
15825         ldr     x2, [x2, #:got_lo12:c_ftl_nand_page_pre_blk]
15826         ldrh    w2, [x2]
15827         mul     w1, w1, w2
15828         cmp     w3, w1
15829         beq     .L2128
15830         adrp    x1, :got:g_MaxLpn
15831         ldrb    w23, [x0,10]
15832         ldr     x1, [x1, #:got_lo12:g_MaxLpn]
15833         ldr     w21, [x1]
15834         adrp    x1, :got:c_ftl_nand_planes_num
15835         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
15836         ldrh    w24, [x1]
15837         cbnz    w23, .L2127
15838         sub     w21, w21, #1
15839         add     x1, x29, 84
15840         mov     w2, w23
15841         mov     w0, w21
15842         add     x22, x29, 88
15843         bl      log2phys
15844         str     w21, [x29,112]
15845         adrp    x0, :got:p_sys_data_buf
15846         ldr     w2, [x29,84]
15847         str     w2, [x29,92]
15848         cmn     w2, #1
15849         ldr     x0, [x0, #:got_lo12:p_sys_data_buf]
15850         ldr     x1, [x0]
15851         str     x1, [x29,96]
15852         adrp    x1, :got:p_sys_spare_buf
15853         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
15854         ldr     x20, [x1]
15855         str     x20, [x29,104]
15856         str     w23, [x20,4]
15857         beq     .L2130
15858         mov     x0, x22
15859         mov     w1, 1
15860         mov     w2, w23
15861         bl      FlashReadPages
15862         b       .L2131
15863 .L2130:
15864         adrp    x2, :got:c_ftl_nand_byte_pre_page
15865         ldr     x0, [x0]
15866         mov     w1, 255
15867         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
15868         ldrh    w2, [x2]
15869         bl      ftl_memset
15870 .L2131:
15871         mov     w0, 6
15872         mov     w26, 0
15873         adrp    x25, :got:g_GlobalDataVersion
15874         mul     w24, w24, w0
15875         mov     w0, -3947
15876         strh    w0, [x20]
15877 .L2132:
15878         cmp     w26, w24
15879         beq     .L2133
15880         ldr     x23, [x19, #:got_lo12:g_active_superblock]
15881         ldrh    w0, [x23,4]
15882         cbz     w0, .L2133
15883         ldr     w0, [x22,4]
15884         add     w26, w26, 1
15885         str     w0, [x20,12]
15886         ldrh    w0, [x23]
15887         strh    w0, [x20,2]
15888         mov     x0, x23
15889         str     w21, [x20,8]
15890         bl      get_new_active_ppa
15891         str     w0, [x22,4]
15892         ldr     x0, [x25, #:got_lo12:g_GlobalDataVersion]
15893         mov     w2, 0
15894         mov     w3, w2
15895         ldr     w1, [x0]
15896         str     w1, [x20,4]
15897         add     w1, w1, 1
15898         cmn     w1, #1
15899         csel    w1, w1, wzr, ne
15900         str     w1, [x0]
15901         mov     w1, 1
15902         mov     x0, x22
15903         bl      FlashProgPages
15904         ldrh    w0, [x23]
15905         bl      decrement_vpc_count
15906         b       .L2132
15907 .L2133:
15908         ldr     x19, [x19, #:got_lo12:g_active_superblock]
15909         mov     w0, 1
15910         strb    w0, [x19,10]
15911         b       .L2127
15912 .L2128:
15913         ldr     x19, [x19, #:got_lo12:g_active_superblock]
15914         strb    wzr, [x19,10]
15915 .L2127:
15916         ldp     x19, x20, [sp,16]
15917         ldp     x21, x22, [sp,32]
15918         ldp     x23, x24, [sp,48]
15919         ldp     x25, x26, [sp,64]
15920         ldp     x29, x30, [sp], 144
15921         ret
15922         .size   FtlWriteDumpData, .-FtlWriteDumpData
15923         .align  2
15924         .global l2p_flush
15925         .type   l2p_flush, %function
15926 l2p_flush:
15927         stp     x29, x30, [sp, -48]!
15928         add     x29, sp, 0
15929         stp     x19, x20, [sp,16]
15930         str     x21, [sp,32]
15931         mov     w19, 0
15932         adrp    x20, :got:c_ftl_nand_l2pmap_ram_region_num
15933         adrp    x21, :got:p_l2p_ram_map
15934         bl      FtlWriteDumpData
15935 .L2145:
15936         ldr     x0, [x20, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
15937         ldrh    w0, [x0]
15938         cmp     w0, w19
15939         bls     .L2148
15940         ldr     x1, [x21, #:got_lo12:p_l2p_ram_map]
15941         ubfiz   x0, x19, 4, 16
15942         ldr     x1, [x1]
15943         add     x0, x1, x0
15944         ldr     w0, [x0,4]
15945         tbz     w0, #31, .L2146
15946         mov     w0, w19
15947         bl      flush_l2p_region
15948 .L2146:
15949         add     w19, w19, 1
15950         uxth    w19, w19
15951         b       .L2145
15952 .L2148:
15953         mov     w0, 0
15954         ldr     x21, [sp,32]
15955         ldp     x19, x20, [sp,16]
15956         ldp     x29, x30, [sp], 48
15957         ret
15958         .size   l2p_flush, .-l2p_flush
15959         .align  2
15960         .global FtlVpcCheckAndModify
15961         .type   FtlVpcCheckAndModify, %function
15962 FtlVpcCheckAndModify:
15963         stp     x29, x30, [sp, -112]!
15964         adrp    x1, .LANCHOR1
15965         adrp    x0, .LC112
15966         add     x1, x1, :lo12:.LANCHOR1
15967         add     x29, sp, 0
15968         add     x1, x1, 16
15969         add     x0, x0, :lo12:.LC112
15970         stp     x19, x20, [sp,16]
15971         stp     x21, x22, [sp,32]
15972         stp     x23, x24, [sp,48]
15973         stp     x25, x26, [sp,64]
15974         stp     x27, x28, [sp,80]
15975         bl      printk
15976         adrp    x20, :got:p_valid_page_count_check_table
15977         adrp    x0, :got:c_ftl_nand_blk_pre_plane
15978         mov     w19, 0
15979         adrp    x21, :got:g_MaxLpn
15980         add     x22, x29, 108
15981         ldr     x1, [x20, #:got_lo12:p_valid_page_count_check_table]
15982         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
15983         ldrh    w2, [x0]
15984         ldr     x0, [x1]
15985         mov     w1, 0
15986         lsl     w2, w2, 1
15987         bl      ftl_memset
15988 .L2150:
15989         ldr     x0, [x21, #:got_lo12:g_MaxLpn]
15990         ldr     w0, [x0]
15991         cmp     w19, w0
15992         bcs     .L2165
15993         mov     w0, w19
15994         mov     x1, x22
15995         mov     w2, 0
15996         bl      log2phys
15997         ldr     w0, [x29,108]
15998         cmn     w0, #1
15999         beq     .L2151
16000         lsr     w0, w0, 10
16001         bl      P2V_block_in_plane
16002         ubfiz   x0, x0, 1, 16
16003         ldr     x1, [x20, #:got_lo12:p_valid_page_count_check_table]
16004         ldr     x3, [x1]
16005         ldrh    w2, [x3,x0]
16006         add     w2, w2, 1
16007         strh    w2, [x3,x0]
16008 .L2151:
16009         add     w19, w19, 1
16010         b       .L2150
16011 .L2165:
16012         adrp    x22, .LC113
16013         mov     w19, 0
16014         adrp    x23, :got:c_ftl_nand_data_blks_per_plane
16015         adrp    x24, :got:p_valid_page_count_table
16016         mov     w25, 65535
16017         add     x22, x22, :lo12:.LC113
16018         adrp    x26, :got:g_active_superblock
16019 .L2153:
16020         ldr     x0, [x23, #:got_lo12:c_ftl_nand_data_blks_per_plane]
16021         ldrh    w0, [x0]
16022         cmp     w0, w19
16023         bls     .L2166
16024         ldr     x27, [x24, #:got_lo12:p_valid_page_count_table]
16025         ubfiz   x21, x19, 1, 16
16026         ldr     x28, [x20, #:got_lo12:p_valid_page_count_check_table]
16027         ldr     x0, [x27]
16028         ldrh    w2, [x0,x21]
16029         ldr     x0, [x28]
16030         ldrh    w3, [x0,x21]
16031         cmp     w2, w3
16032         beq     .L2156
16033         cmp     w2, w25
16034         beq     .L2156
16035         mov     x0, x22
16036         mov     w1, w19
16037         bl      printk
16038         ldr     x0, [x26, #:got_lo12:g_active_superblock]
16039         ldrh    w0, [x0]
16040         cmp     w0, w19
16041         beq     .L2156
16042         adrp    x0, :got:g_gc_temp_superblock
16043         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
16044         ldrh    w0, [x0]
16045         cmp     w0, w19
16046         beq     .L2156
16047         adrp    x0, :got:g_buffer_superblock
16048         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
16049         ldrh    w0, [x0]
16050         cmp     w0, w19
16051         beq     .L2156
16052         ldr     x0, [x28]
16053         ldrh    w1, [x0,x21]
16054         ldr     x0, [x27]
16055         strh    w1, [x0,x21]
16056         mov     w0, w19
16057         bl      update_vpc_list
16058         bl      l2p_flush
16059         bl      FtlVpcTblFlush
16060 .L2156:
16061         add     w19, w19, 1
16062         uxth    w19, w19
16063         b       .L2153
16064 .L2166:
16065         ldp     x19, x20, [sp,16]
16066         ldp     x21, x22, [sp,32]
16067         ldp     x23, x24, [sp,48]
16068         ldp     x25, x26, [sp,64]
16069         ldp     x27, x28, [sp,80]
16070         ldp     x29, x30, [sp], 112
16071         ret
16072         .size   FtlVpcCheckAndModify, .-FtlVpcCheckAndModify
16073         .align  2
16074         .global allocate_new_data_superblock
16075         .type   allocate_new_data_superblock, %function
16076 allocate_new_data_superblock:
16077         stp     x29, x30, [sp, -48]!
16078         add     x29, sp, 0
16079         stp     x19, x20, [sp,16]
16080         str     x21, [sp,32]
16081         mov     x19, x0
16082         ldrh    w21, [x0]
16083         mov     w0, 65535
16084         cmp     w21, w0
16085         beq     .L2168
16086         adrp    x1, :got:p_valid_page_count_table
16087         ubfiz   x0, x21, 1, 16
16088         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
16089         ldr     x1, [x1]
16090         ldrh    w0, [x1,x0]
16091         cbz     w0, .L2169
16092         mov     w0, w21
16093         bl      INSERT_DATA_LIST
16094         b       .L2168
16095 .L2169:
16096         mov     w0, w21
16097         bl      INSERT_FREE_LIST
16098 .L2168:
16099         adrp    x0, :got:g_buffer_superblock
16100         strb    wzr, [x19,8]
16101         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
16102         cmp     x19, x0
16103         beq     .L2170
16104         adrp    x0, :got:c_ftl_nand_type
16105         ldr     x0, [x0, #:got_lo12:c_ftl_nand_type]
16106         ldrh    w0, [x0]
16107         cmp     w0, 1
16108         bne     .L2171
16109 .L2170:
16110         mov     w0, 1
16111         strb    w0, [x19,8]
16112         b       .L2172
16113 .L2171:
16114         adrp    x1, :got:g_active_superblock
16115         ldr     x2, [x1, #:got_lo12:g_active_superblock]
16116         cmp     x19, x2
16117         bne     .L2172
16118         cmp     w0, 3
16119         beq     .L2174
16120         adrp    x0, :got:g_all_blk_used_slc_mode
16121         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
16122         ldr     w0, [x0]
16123         cmp     w0, 1
16124         bne     .L2175
16125 .L2174:
16126         ldr     x0, [x1, #:got_lo12:g_active_superblock]
16127         mov     w2, 1
16128         strb    w2, [x0,8]
16129 .L2175:
16130         adrp    x0, :got:g_inkDie_check_enable
16131         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
16132         ldr     w0, [x0]
16133         cbz     w0, .L2172
16134         adrp    x0, :got:g_min_erase_count
16135         ldr     x0, [x0, #:got_lo12:g_min_erase_count]
16136         ldr     w0, [x0]
16137         cmp     w0, 29
16138         bhi     .L2172
16139         ldr     x1, [x1, #:got_lo12:g_active_superblock]
16140         mov     w0, 1
16141         strb    w0, [x1,8]
16142 .L2172:
16143         adrp    x1, :got:g_tmp_data_superblock_id
16144         mov     w2, 65535
16145         mov     x20, x1
16146         ldr     x0, [x1, #:got_lo12:g_tmp_data_superblock_id]
16147         ldrh    w0, [x0]
16148         cmp     w0, w2
16149         beq     .L2177
16150         cmp     w21, w0
16151         bne     .L2178
16152         adrp    x2, :got:p_valid_page_count_table
16153         ubfiz   x1, x0, 1, 16
16154         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
16155         ldr     x2, [x2]
16156         ldrh    w1, [x2,x1]
16157         cbz     w1, .L2179
16158 .L2178:
16159         bl      update_vpc_list
16160 .L2179:
16161         ldr     x1, [x20, #:got_lo12:g_tmp_data_superblock_id]
16162         mov     w0, -1
16163         strh    w0, [x1]
16164 .L2177:
16165         mov     x0, x19
16166         bl      allocate_data_superblock
16167         bl      l2p_flush
16168         bl      FtlVpcTblFlush
16169         mov     w0, 0
16170         bl      FtlEctTblFlush
16171         ldr     x21, [sp,32]
16172         mov     w0, 0
16173         ldp     x19, x20, [sp,16]
16174         ldp     x29, x30, [sp], 48
16175         ret
16176         .size   allocate_new_data_superblock, .-allocate_new_data_superblock
16177         .align  2
16178         .global FtlCacheWriteBack
16179         .type   FtlCacheWriteBack, %function
16180 FtlCacheWriteBack:
16181         adrp    x0, :got:gp_last_act_superblock
16182         stp     x29, x30, [sp, -144]!
16183         add     x29, sp, 0
16184         ldr     x0, [x0, #:got_lo12:gp_last_act_superblock]
16185         stp     x19, x20, [sp,16]
16186         stp     x21, x22, [sp,32]
16187         stp     x23, x24, [sp,48]
16188         stp     x25, x26, [sp,64]
16189         stp     x27, x28, [sp,80]
16190         ldr     x19, [x0]
16191         adrp    x0, :got:g_wr_page_num
16192         str     x0, [x29,120]
16193         ldr     x1, [x0, #:got_lo12:g_wr_page_num]
16194         ldr     w1, [x1]
16195         cbz     w1, .L2190
16196         adrp    x21, :got:req_wr_io
16197         ldrb    w3, [x19,9]
16198         mov     w2, 0
16199         mov     w23, 0
16200         adrp    x24, .LC114
16201         mov     w22, w23
16202         ldr     x0, [x21, #:got_lo12:req_wr_io]
16203         mov     w25, 56
16204         adrp    x26, :got:p_valid_page_count_table
16205         add     x24, x24, :lo12:.LC114
16206         ldr     x0, [x0]
16207         bl      FlashProgPages
16208         add     x0, x29, 140
16209         str     x0, [x29,112]
16210 .L2191:
16211         ldr     x0, [x29,120]
16212         ldr     x0, [x0, #:got_lo12:g_wr_page_num]
16213         ldr     w1, [x0]
16214         cmp     w22, w1
16215         bcs     .L2209
16216         cbz     w23, .L2192
16217         ldr     x1, [x21, #:got_lo12:req_wr_io]
16218         mov     w2, -1
16219         umull   x0, w22, w25
16220         ldr     x1, [x1]
16221         str     w2, [x1,x0]
16222 .L2192:
16223         umull   x20, w22, w25
16224         adrp    x27, :got:c_ftl_nand_page_pre_blk
16225         adrp    x28, :got:g_sys_ext_data
16226 .L2193:
16227         ldr     x3, [x21, #:got_lo12:req_wr_io]
16228         ldr     x1, [x3]
16229         add     x0, x1, x20
16230         ldr     w1, [x1,x20]
16231         cmn     w1, #1
16232         bne     .L2210
16233         ldr     w0, [x0,4]
16234         lsr     w0, w0, 10
16235         bl      P2V_block_in_plane
16236         ldrh    w1, [x19]
16237         cmp     w1, w0, uxth
16238         bne     .L2194
16239         ldr     x0, [x26, #:got_lo12:p_valid_page_count_table]
16240         ubfiz   x1, x1, 1, 16
16241         ldrh    w3, [x19,4]
16242         ldr     x2, [x0]
16243         ldrh    w0, [x2,x1]
16244         sub     w0, w0, w3
16245         strh    w0, [x2,x1]
16246         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_blk]
16247         strb    wzr, [x19,6]
16248         strh    wzr, [x19,4]
16249         ldrh    w0, [x0]
16250         strh    w0, [x19,2]
16251 .L2194:
16252         ldrh    w0, [x19,4]
16253         cbnz    w0, .L2195
16254         mov     x0, x19
16255         bl      allocate_new_data_superblock
16256 .L2195:
16257         ldr     x1, [x28, #:got_lo12:g_sys_ext_data]
16258         ldr     w0, [x1,96]
16259         add     w0, w0, 1
16260         str     w0, [x1,96]
16261         ldr     x23, [x21, #:got_lo12:req_wr_io]
16262         ldr     x0, [x23]
16263         add     x0, x0, x20
16264         ldr     w0, [x0,4]
16265         lsr     w0, w0, 10
16266         bl      FtlGcMarkBadPhyBlk
16267         mov     x0, x19
16268         bl      get_new_active_ppa
16269         str     w0, [x29,140]
16270         ldr     x1, [x23]
16271         mov     w2, 0
16272         add     x1, x1, x20
16273         str     w0, [x1,4]
16274         mov     w1, 1
16275         ldr     x0, [x23]
16276         mov     w23, 1
16277         ldrb    w3, [x19,9]
16278         add     x0, x0, x20
16279         bl      FlashProgPages
16280         b       .L2193
16281 .L2210:
16282         ldr     w1, [x0,4]
16283         mov     w2, 1
16284         str     w1, [x29,140]
16285         ldr     w0, [x0,24]
16286         ldr     x1, [x29,112]
16287         str     x3, [x29,104]
16288         bl      log2phys
16289         ldr     x3, [x29,104]
16290         ldr     x0, [x3]
16291         add     x20, x0, x20
16292         ldr     x0, [x20,16]
16293         ldr     w0, [x0,12]
16294         cmn     w0, #1
16295         beq     .L2197
16296         lsr     w0, w0, 10
16297         bl      P2V_block_in_plane
16298         uxth    w1, w0
16299         ldr     x2, [x26, #:got_lo12:p_valid_page_count_table]
16300         ubfiz   x0, x1, 1, 16
16301         mov     w20, w1
16302         ldr     x2, [x2]
16303         ldrh    w2, [x2,x0]
16304         cbnz    w2, .L2198
16305         mov     x0, x24
16306         bl      printk
16307 .L2198:
16308         mov     w0, w20
16309         bl      decrement_vpc_count
16310 .L2197:
16311         add     w22, w22, 1
16312         b       .L2191
16313 .L2209:
16314         str     wzr, [x0]
16315 .L2190:
16316         mov     w0, 0
16317         ldp     x19, x20, [sp,16]
16318         ldp     x21, x22, [sp,32]
16319         ldp     x23, x24, [sp,48]
16320         ldp     x25, x26, [sp,64]
16321         ldp     x27, x28, [sp,80]
16322         ldp     x29, x30, [sp], 144
16323         ret
16324         .size   FtlCacheWriteBack, .-FtlCacheWriteBack
16325         .align  2
16326         .global rk_ftl_cache_write_back
16327         .type   rk_ftl_cache_write_back, %function
16328 rk_ftl_cache_write_back:
16329         stp     x29, x30, [sp, -16]!
16330         add     x29, sp, 0
16331         bl      FtlCacheWriteBack
16332         ldp     x29, x30, [sp], 16
16333         ret
16334         .size   rk_ftl_cache_write_back, .-rk_ftl_cache_write_back
16335         .align  2
16336         .global FtlSysFlush
16337         .type   FtlSysFlush, %function
16338 FtlSysFlush:
16339         stp     x29, x30, [sp, -16]!
16340         add     x29, sp, 0
16341         bl      FtlCacheWriteBack
16342         bl      l2p_flush
16343         bl      FtlVpcTblFlush
16344         mov     w0, 1
16345         bl      FtlEctTblFlush
16346         mov     w0, 0
16347         ldp     x29, x30, [sp], 16
16348         ret
16349         .size   FtlSysFlush, .-FtlSysFlush
16350         .align  2
16351         .global FtlDeInit
16352         .type   FtlDeInit, %function
16353 FtlDeInit:
16354         adrp    x0, :got:gFtlInitStatus
16355         stp     x29, x30, [sp, -16]!
16356         add     x29, sp, 0
16357         ldr     x0, [x0, #:got_lo12:gFtlInitStatus]
16358         ldr     w0, [x0]
16359         cmp     w0, 1
16360         bne     .L2214
16361         bl      FtlSysFlush
16362 .L2214:
16363         mov     w0, 0
16364         ldp     x29, x30, [sp], 16
16365         ret
16366         .size   FtlDeInit, .-FtlDeInit
16367         .align  2
16368         .global rk_ftl_de_init
16369         .type   rk_ftl_de_init, %function
16370 rk_ftl_de_init:
16371         stp     x29, x30, [sp, -16]!
16372         add     x29, sp, 0
16373         bl      rk_nand_de_init
16374         bl      FtlDeInit
16375         bl      rk_nand_de_init
16376         ldp     x29, x30, [sp], 16
16377         ret
16378         .size   rk_ftl_de_init, .-rk_ftl_de_init
16379         .align  2
16380         .global FtlDiscard
16381         .type   FtlDiscard, %function
16382 FtlDiscard:
16383         stp     x29, x30, [sp, -96]!
16384         add     w2, w0, w1
16385         add     x29, sp, 0
16386         stp     x19, x20, [sp,16]
16387         mov     w20, w0
16388         adrp    x0, :got:g_MaxLbaSector
16389         stp     x21, x22, [sp,32]
16390         stp     x23, x24, [sp,48]
16391         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
16392         mov     w19, w1
16393         str     x25, [sp,64]
16394         ldr     w1, [x0]
16395         mov     w0, -1
16396         cmp     w2, w1
16397         bhi     .L2217
16398         cmp     w19, 31
16399         bls     .L2231
16400         adrp    x22, :got:c_ftl_nand_sec_pre_page
16401         bl      FtlCacheWriteBack
16402         ldr     x0, [x22, #:got_lo12:c_ftl_nand_sec_pre_page]
16403         ldrh    w1, [x0]
16404         udiv    w21, w20, w1
16405         msub    w20, w1, w21, w20
16406         uxth    w20, w20
16407         cbz     w20, .L2219
16408         sub     w1, w1, w20
16409         add     w21, w21, 1
16410         cmp     w1, w19
16411         csel    w1, w1, w19, ls
16412         sub     w19, w19, w1, uxth
16413 .L2219:
16414         adrp    x20, .LANCHOR0
16415         mov     w0, -1
16416         add     x23, x29, 88
16417         str     w0, [x29,92]
16418         add     x20, x20, :lo12:.LANCHOR0
16419         adrp    x24, :got:g_totle_discard_page_count
16420         add     x25, x29, 92
16421 .L2220:
16422         ldr     x0, [x22, #:got_lo12:c_ftl_nand_sec_pre_page]
16423         ldrh    w0, [x0]
16424         cmp     w19, w0
16425         bcc     .L2232
16426         mov     w0, w21
16427         mov     x1, x23
16428         mov     w2, 0
16429         bl      log2phys
16430         ldr     w0, [x29,88]
16431         cmn     w0, #1
16432         beq     .L2221
16433         ldr     w0, [x20,32]
16434         mov     w2, 1
16435         add     w0, w0, 1
16436         str     w0, [x20,32]
16437         ldr     x1, [x24, #:got_lo12:g_totle_discard_page_count]
16438         ldr     w0, [x1]
16439         add     w0, w0, 1
16440         str     w0, [x1]
16441         mov     x1, x25
16442         mov     w0, w21
16443         bl      log2phys
16444         ldr     w0, [x29,88]
16445         lsr     w0, w0, 10
16446         bl      P2V_block_in_plane
16447         bl      decrement_vpc_count
16448 .L2221:
16449         ldr     x0, [x22, #:got_lo12:c_ftl_nand_sec_pre_page]
16450         add     w21, w21, 1
16451         ldrh    w0, [x0]
16452         sub     w19, w19, w0
16453         b       .L2220
16454 .L2232:
16455         adrp    x0, .LANCHOR0
16456         add     x0, x0, :lo12:.LANCHOR0
16457         ldr     w1, [x0,32]
16458         cmp     w1, 32
16459         bls     .L2231
16460         str     wzr, [x0,32]
16461         bl      l2p_flush
16462         bl      FtlVpcTblFlush
16463 .L2231:
16464         mov     w0, 0
16465 .L2217:
16466         ldp     x19, x20, [sp,16]
16467         ldp     x21, x22, [sp,32]
16468         ldp     x23, x24, [sp,48]
16469         ldr     x25, [sp,64]
16470         ldp     x29, x30, [sp], 96
16471         ret
16472         .size   FtlDiscard, .-FtlDiscard
16473         .align  2
16474         .global FtlGcFreeTempBlock
16475         .type   FtlGcFreeTempBlock, %function
16476 FtlGcFreeTempBlock:
16477         stp     x29, x30, [sp, -112]!
16478         add     x29, sp, 0
16479         stp     x19, x20, [sp,16]
16480         adrp    x19, :got:g_gc_temp_superblock
16481         adrp    x20, :got:c_ftl_nand_page_pre_blk
16482         stp     x21, x22, [sp,32]
16483         stp     x23, x24, [sp,48]
16484         ldr     x2, [x19, #:got_lo12:g_gc_temp_superblock]
16485         stp     x25, x26, [sp,64]
16486         stp     x27, x28, [sp,80]
16487         ldr     x1, [x20, #:got_lo12:c_ftl_nand_page_pre_blk]
16488         ldrh    w21, [x2]
16489         mov     w2, 65535
16490         cmp     w21, w2
16491         ldrh    w1, [x1]
16492         bne     .L2234
16493 .L2244:
16494         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
16495         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16496         str     wzr, [x0]
16497         mov     w0, 65535
16498         ldr     x22, [x19, #:got_lo12:g_gc_temp_superblock]
16499         ldrh    w1, [x22]
16500         cmp     w1, w0
16501         beq     .L2262
16502         adrp    x21, :got:p_valid_page_count_table
16503         bl      FtlCacheWriteBack
16504         ldr     x20, [x20, #:got_lo12:c_ftl_nand_page_pre_blk]
16505         adrp    x25, :got:p_gc_page_info
16506         ldrh    w2, [x22]
16507         mov     w26, 12
16508         ldr     x0, [x21, #:got_lo12:p_valid_page_count_table]
16509         add     x27, x29, 108
16510         ldrh    w3, [x20]
16511         adrp    x20, :got:g_gc_page_offset
16512         ldr     x1, [x0]
16513         ldrb    w0, [x22,7]
16514         mov     w22, 0
16515         mul     w0, w0, w3
16516         strh    w0, [x1,x2,lsl 1]
16517         adrp    x0, :got:g_totle_gc_page_count
16518         ldr     x1, [x20, #:got_lo12:g_gc_page_offset]
16519         ldr     x0, [x0, #:got_lo12:g_totle_gc_page_count]
16520         ldrh    w2, [x1]
16521         ldr     w1, [x0]
16522         add     w1, w2, w1
16523         str     w1, [x0]
16524         b       .L2245
16525 .L2234:
16526         cbz     w0, .L2237
16527         adrp    x0, .LANCHOR2
16528         add     x0, x0, :lo12:.LANCHOR2
16529         ldrh    w3, [x0,128]
16530         cmp     w3, w2
16531         beq     .L2238
16532 .L2239:
16533         mov     w1, 2
16534         b       .L2237
16535 .L2238:
16536         strh    wzr, [x0,128]
16537         adrp    x0, :got:g_num_free_superblocks
16538         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
16539         ldrh    w0, [x0]
16540         cmp     w0, 17
16541         bhi     .L2239
16542 .L2237:
16543         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
16544         bl      FtlGcScanTempBlk
16545         str     w0, [x29,108]
16546         cmn     w0, #1
16547         beq     .L2240
16548         adrp    x0, :got:g_sys_ext_data
16549         ubfiz   x21, x21, 1, 16
16550         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
16551         ldr     w1, [x0,96]
16552         add     w1, w1, 1
16553         str     w1, [x0,96]
16554         adrp    x0, :got:p_erase_count_table
16555         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
16556         ldr     x1, [x0]
16557         ldrh    w0, [x1,x21]
16558         cmp     w0, 4
16559         bls     .L2241
16560         sub     w0, w0, #5
16561         strh    w0, [x1,x21]
16562         mov     w0, 1
16563         bl      FtlEctTblFlush
16564 .L2241:
16565         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
16566         mov     x19, x0
16567         ldr     x1, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16568         ldr     w1, [x1]
16569         cbnz    w1, .L2242
16570         ldr     w0, [x29,108]
16571         lsr     w0, w0, 10
16572         bl      FtlBbmMapBadBlock
16573         bl      FtlBbmTblFlush
16574 .L2242:
16575         ldr     x0, [x19, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16576         str     wzr, [x0]
16577         mov     w0, 1
16578         b       .L2243
16579 .L2240:
16580         adrp    x0, .LANCHOR2+128
16581         mov     w1, 65535
16582         ldrh    w2, [x0,#:lo12:.LANCHOR2+128]
16583         mov     w0, 1
16584         cmp     w2, w1
16585         bne     .L2243
16586         b       .L2244
16587 .L2248:
16588         ldr     x0, [x25, #:got_lo12:p_gc_page_info]
16589         mov     x1, x27
16590         umull   x24, w22, w26
16591         mov     w2, 0
16592         ldr     x28, [x0]
16593         add     x23, x28, x24
16594         ldr     w0, [x23,8]
16595         bl      log2phys
16596         ldr     w0, [x29,108]
16597         ldr     w1, [x28,x24]
16598         cmp     w0, w1
16599         bne     .L2246
16600         lsr     w0, w0, 10
16601         bl      P2V_block_in_plane
16602         mov     w24, w0
16603         ldr     w0, [x23,8]
16604         add     x1, x23, 4
16605         mov     w2, 1
16606         bl      log2phys
16607         mov     w0, w24
16608 .L2261:
16609         bl      decrement_vpc_count
16610 .L2247:
16611         add     w22, w22, 1
16612         uxth    w22, w22
16613 .L2245:
16614         ldr     x0, [x20, #:got_lo12:g_gc_page_offset]
16615         ldrh    w0, [x0]
16616         cmp     w0, w22
16617         bhi     .L2248
16618         b       .L2264
16619 .L2246:
16620         ldr     w1, [x23,4]
16621         cmp     w0, w1
16622         beq     .L2247
16623         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
16624         ldrh    w0, [x0]
16625         b       .L2261
16626 .L2264:
16627         mov     w0, -1
16628         bl      decrement_vpc_count
16629         ldr     x21, [x21, #:got_lo12:p_valid_page_count_table]
16630         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
16631         ldr     x2, [x21]
16632         ldrh    w0, [x0]
16633         ubfiz   x1, x0, 1, 16
16634         ldrh    w1, [x2,x1]
16635         cbz     w1, .L2249
16636         bl      INSERT_DATA_LIST
16637         b       .L2250
16638 .L2249:
16639         bl      INSERT_FREE_LIST
16640 .L2250:
16641         ldr     x19, [x19, #:got_lo12:g_gc_temp_superblock]
16642         mov     w0, -1
16643         strh    w0, [x19]
16644         adrp    x0, :got:g_gc_blk_num
16645         ldr     x20, [x20, #:got_lo12:g_gc_page_offset]
16646         strh    wzr, [x20]
16647         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
16648         strh    wzr, [x0]
16649         bl      l2p_flush
16650         bl      FtlVpcTblFlush
16651         adrp    x0, :got:g_inkDie_check_enable
16652         adrp    x1, :got:g_num_free_superblocks
16653         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
16654         ldr     w2, [x0]
16655         adrp    x0, :got:c_ftl_nand_data_op_blks_per_plane
16656         cbz     w2, .L2251
16657         adrp    x2, :got:g_min_erase_count
16658         ldr     x2, [x2, #:got_lo12:g_min_erase_count]
16659         ldr     w2, [x2]
16660         cmp     w2, 29
16661         bhi     .L2251
16662         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
16663         ldr     x1, [x1, #:got_lo12:g_num_free_superblocks]
16664         ldrh    w0, [x0]
16665         ldrh    w1, [x1]
16666         cmp     w1, w0
16667         bcs     .L2252
16668         adrp    x1, :got:g_gc_free_blk_threshold
16669         lsl     w0, w0, 1
16670         ldr     x1, [x1, #:got_lo12:g_gc_free_blk_threshold]
16671         strh    w0, [x1]
16672 .L2252:
16673         adrp    x0, :got:g_gc_superblock
16674         mov     w1, -1
16675         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
16676         b       .L2263
16677 .L2251:
16678         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
16679         ldr     x1, [x1, #:got_lo12:g_num_free_superblocks]
16680         ldrh    w0, [x0]
16681         ldrh    w1, [x1]
16682         add     w0, w0, w0, lsl 1
16683         cmp     w1, w0, lsr 2
16684         ble     .L2262
16685         adrp    x0, :got:g_gc_superblock
16686         mov     w1, -1
16687         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
16688         strh    w1, [x0]
16689         adrp    x0, :got:g_gc_free_blk_threshold
16690         mov     w1, 20
16691         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
16692 .L2263:
16693         strh    w1, [x0]
16694 .L2262:
16695         mov     w0, 0
16696 .L2243:
16697         ldp     x19, x20, [sp,16]
16698         ldp     x21, x22, [sp,32]
16699         ldp     x23, x24, [sp,48]
16700         ldp     x25, x26, [sp,64]
16701         ldp     x27, x28, [sp,80]
16702         ldp     x29, x30, [sp], 112
16703         ret
16704         .size   FtlGcFreeTempBlock, .-FtlGcFreeTempBlock
16705         .align  2
16706         .global FtlGcPageRecovery
16707         .type   FtlGcPageRecovery, %function
16708 FtlGcPageRecovery:
16709         stp     x29, x30, [sp, -32]!
16710         add     x29, sp, 0
16711         stp     x19, x20, [sp,16]
16712         adrp    x19, :got:c_ftl_nand_page_pre_blk
16713         adrp    x20, :got:g_gc_temp_superblock
16714         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_blk]
16715         ldr     x20, [x20, #:got_lo12:g_gc_temp_superblock]
16716         ldrh    w1, [x19]
16717         mov     x0, x20
16718         bl      FtlGcScanTempBlk
16719         ldrh    w1, [x20,2]
16720         ldrh    w0, [x19]
16721         cmp     w1, w0
16722         bcc     .L2265
16723         adrp    x0, :got:gL2pMapInfo
16724         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
16725         bl      FtlMapBlkWriteDumpData
16726         mov     w0, 0
16727         bl      FtlGcFreeTempBlock
16728         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
16729         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16730         str     wzr, [x0]
16731 .L2265:
16732         ldp     x19, x20, [sp,16]
16733         ldp     x29, x30, [sp], 32
16734         ret
16735         .size   FtlGcPageRecovery, .-FtlGcPageRecovery
16736         .align  2
16737         .global FtlPowerLostRecovery
16738         .type   FtlPowerLostRecovery, %function
16739 FtlPowerLostRecovery:
16740         adrp    x0, :got:g_power_lost_recovery_flag
16741         stp     x29, x30, [sp, -32]!
16742         add     x29, sp, 0
16743         ldr     x0, [x0, #:got_lo12:g_power_lost_recovery_flag]
16744         str     x19, [sp,16]
16745         adrp    x19, :got:g_active_superblock
16746         strh    wzr, [x0]
16747         adrp    x0, :got:g_recovery_page_num
16748         ldr     x0, [x0, #:got_lo12:g_recovery_page_num]
16749         str     wzr, [x0]
16750         ldr     x19, [x19, #:got_lo12:g_active_superblock]
16751         mov     x0, x19
16752         bl      FtlRecoverySuperblock
16753         mov     x0, x19
16754         adrp    x19, :got:g_buffer_superblock
16755         bl      FtlSlcSuperblockCheck
16756         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
16757         mov     x0, x19
16758         bl      FtlRecoverySuperblock
16759         mov     x0, x19
16760         bl      FtlSlcSuperblockCheck
16761         bl      FtlGcPageRecovery
16762         mov     w0, -1
16763         bl      decrement_vpc_count
16764         ldr     x19, [sp,16]
16765         mov     w0, 0
16766         ldp     x29, x30, [sp], 32
16767         ret
16768         .size   FtlPowerLostRecovery, .-FtlPowerLostRecovery
16769         .align  2
16770         .global Ftl_gc_temp_data_write_back
16771         .type   Ftl_gc_temp_data_write_back, %function
16772 Ftl_gc_temp_data_write_back:
16773         stp     x29, x30, [sp, -64]!
16774         mov     w2, 0
16775         add     x29, sp, 0
16776         stp     x19, x20, [sp,16]
16777         stp     x21, x22, [sp,32]
16778         adrp    x19, :got:req_gc_dst
16779         adrp    x21, :got:g_gc_num_req
16780         str     x23, [sp,48]
16781         mov     w3, w2
16782         mov     w20, 0
16783         mov     w23, 56
16784         ldr     x0, [x19, #:got_lo12:req_gc_dst]
16785         ldr     x1, [x21, #:got_lo12:g_gc_num_req]
16786         ldr     x0, [x0]
16787         ldr     w1, [x1]
16788         bl      FlashProgPages
16789 .L2269:
16790         ldr     x22, [x21, #:got_lo12:g_gc_num_req]
16791         ldr     w1, [x22]
16792         cmp     w20, w1
16793         bcs     .L2275
16794         ldr     x3, [x19, #:got_lo12:req_gc_dst]
16795         umull   x0, w20, w23
16796         ldr     x2, [x3]
16797         add     x1, x2, x0
16798         ldr     w4, [x2,x0]
16799         cmn     w4, #1
16800         bne     .L2270
16801         adrp    x1, :got:g_gc_temp_superblock
16802         adrp    x2, :got:p_valid_page_count_table
16803         ldr     x1, [x1, #:got_lo12:g_gc_temp_superblock]
16804         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
16805         ldrh    w5, [x1]
16806         ldr     x2, [x2]
16807         strh    wzr, [x2,x5,lsl 1]
16808         strh    w4, [x1]
16809         adrp    x1, :got:g_sys_ext_data
16810         ldr     x1, [x1, #:got_lo12:g_sys_ext_data]
16811         ldr     w2, [x1,96]
16812         add     w2, w2, 1
16813         str     w2, [x1,96]
16814         ldr     x1, [x3]
16815         add     x0, x1, x0
16816         ldr     w0, [x0,4]
16817         lsr     w0, w0, 10
16818         bl      FtlBbmMapBadBlock
16819         bl      FtlBbmTblFlush
16820         bl      FtlGcPageVarInit
16821         b       .L2274
16822 .L2270:
16823         ldr     x2, [x1,16]
16824         add     w20, w20, 1
16825         ldr     w1, [x1,4]
16826         uxth    w20, w20
16827         ldr     w0, [x2,12]
16828         ldr     w2, [x2,8]
16829         bl      FtlGcUpdatePage
16830         b       .L2269
16831 .L2275:
16832         ldr     x19, [x19, #:got_lo12:req_gc_dst]
16833         ldr     x0, [x19]
16834         bl      FtlGcBufFree
16835         str     wzr, [x22]
16836         adrp    x0, :got:g_gc_temp_superblock
16837         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
16838         ldrh    w1, [x0,4]
16839         mov     w0, 0
16840         cbnz    w1, .L2271
16841         mov     w0, 1
16842         bl      FtlGcFreeTempBlock
16843 .L2274:
16844         mov     w0, 1
16845 .L2271:
16846         ldp     x19, x20, [sp,16]
16847         ldp     x21, x22, [sp,32]
16848         ldr     x23, [sp,48]
16849         ldp     x29, x30, [sp], 64
16850         ret
16851         .size   Ftl_gc_temp_data_write_back, .-Ftl_gc_temp_data_write_back
16852         .align  2
16853         .global FtlSysBlkInit
16854         .type   FtlSysBlkInit, %function
16855 FtlSysBlkInit:
16856         adrp    x0, :got:c_ftl_nand_max_sys_blks
16857         stp     x29, x30, [sp, -48]!
16858         add     x29, sp, 0
16859         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_sys_blks]
16860         stp     x19, x20, [sp,16]
16861         stp     x21, x22, [sp,32]
16862         ldrh    w0, [x0]
16863         bl      FtlFreeSysBlkQueueInit
16864         bl      FtlScanSysBlk
16865         adrp    x0, :got:gSysInfo
16866         ldr     x0, [x0, #:got_lo12:gSysInfo]
16867         ldrh    w1, [x0]
16868         mov     w0, 65535
16869         cmp     w1, w0
16870         bne     .L2277
16871 .L2279:
16872         mov     w22, -1
16873         b       .L2278
16874 .L2277:
16875         bl      FtlLoadSysInfo
16876         mov     w22, w0
16877         cbnz    w0, .L2279
16878         bl      FtlLoadMapInfo
16879         bl      FtlLoadVonderInfo
16880         bl      Ftl_load_ext_data
16881         bl      FtlLoadEctTbl
16882         bl      FtlFreeSysBLkSort
16883         bl      SupperBlkListInit
16884         bl      FtlPowerLostRecovery
16885         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
16886         mov     x1, 0
16887         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
16888         ldrh    w2, [x0]
16889         adrp    x0, :got:p_l2p_ram_map
16890         ldr     x0, [x0, #:got_lo12:p_l2p_ram_map]
16891         ldr     x0, [x0]
16892 .L2280:
16893         cmp     w1, w2
16894         mov     w3, w1
16895         bge     .L2284
16896         add     x4, x0, x1, lsl 4
16897         add     x1, x1, 1
16898         ldr     w4, [x4,4]
16899         tbz     w4, #31, .L2280
16900 .L2284:
16901         adrp    x19, :got:g_sys_save_data
16902         cmp     w3, w2
16903         adrp    x20, :got:g_active_superblock
16904         ldr     x1, [x19, #:got_lo12:g_sys_save_data]
16905         ldrh    w0, [x1,28]
16906         add     w0, w0, 1
16907         strh    w0, [x1,28]
16908         blt     .L2281
16909         adrp    x0, :got:g_power_lost_recovery_flag
16910         ldr     x0, [x0, #:got_lo12:g_power_lost_recovery_flag]
16911         ldrh    w0, [x0]
16912         cbz     w0, .L2285
16913 .L2281:
16914         adrp    x3, :got:p_valid_page_count_table
16915         ldr     x1, [x20, #:got_lo12:g_active_superblock]
16916         ldr     x3, [x3, #:got_lo12:p_valid_page_count_table]
16917         ldrh    w0, [x1]
16918         ldrh    w5, [x1,4]
16919         ldr     x4, [x3]
16920         lsl     x0, x0, 1
16921         ldrh    w2, [x4,x0]
16922         sub     w2, w2, w5
16923         strh    w2, [x4,x0]
16924         adrp    x0, :got:c_ftl_nand_page_pre_blk
16925         ldr     x4, [x3]
16926         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
16927         strh    wzr, [x1,4]
16928         strb    wzr, [x1,6]
16929         ldrh    w2, [x0]
16930         strh    w2, [x1,2]
16931         adrp    x1, :got:g_buffer_superblock
16932         ldr     x1, [x1, #:got_lo12:g_buffer_superblock]
16933         ldrh    w2, [x1]
16934         ldrh    w5, [x1,4]
16935         lsl     x2, x2, 1
16936         ldrh    w3, [x4,x2]
16937         sub     w3, w3, w5
16938         strh    w3, [x4,x2]
16939         strb    wzr, [x1,6]
16940         ldrh    w0, [x0]
16941         strh    w0, [x1,2]
16942         adrp    x0, :got:gL2pMapInfo
16943         strh    wzr, [x1,4]
16944         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
16945         bl      FtlMapBlkWriteDumpData
16946         adrp    x0, :got:gVendorBlkInfo
16947         ldr     x0, [x0, #:got_lo12:gVendorBlkInfo]
16948         bl      FtlMapBlkWriteDumpData
16949         ldr     x1, [x19, #:got_lo12:g_sys_save_data]
16950         ldrh    w0, [x1,30]
16951         add     w0, w0, 1
16952         strh    w0, [x1,30]
16953         bl      l2p_flush
16954         bl      FtlVpcTblFlush
16955 .L2285:
16956         mov     w0, 1
16957         bl      FtlUpdateVaildLpn
16958         ldr     x20, [x20, #:got_lo12:g_active_superblock]
16959         mov     w1, 65535
16960         ldrh    w0, [x20]
16961         cmp     w0, w1
16962         beq     .L2286
16963         ldrh    w1, [x20,4]
16964         cbnz    w1, .L2286
16965         adrp    x21, :got:g_buffer_superblock
16966         ldr     x21, [x21, #:got_lo12:g_buffer_superblock]
16967         ldrh    w1, [x21,4]
16968         cbnz    w1, .L2286
16969         bl      FtlGcRefreshBlock
16970         ldrh    w0, [x21]
16971         bl      FtlGcRefreshBlock
16972         mov     x0, x20
16973         bl      allocate_new_data_superblock
16974         mov     x0, x21
16975         bl      allocate_new_data_superblock
16976         adrp    x0, :got:gVendorBlkInfo
16977         ldr     x0, [x0, #:got_lo12:gVendorBlkInfo]
16978         bl      FtlMapBlkWriteDumpData
16979 .L2286:
16980         ldr     x19, [x19, #:got_lo12:g_sys_save_data]
16981         ldrh    w0, [x19,28]
16982         and     w0, w0, 31
16983         cbnz    w0, .L2278
16984         bl      FtlVpcCheckAndModify
16985 .L2278:
16986         mov     w0, w22
16987         ldp     x19, x20, [sp,16]
16988         ldp     x21, x22, [sp,32]
16989         ldp     x29, x30, [sp], 48
16990         ret
16991         .size   FtlSysBlkInit, .-FtlSysBlkInit
16992         .align  2
16993         .global FtlInit
16994         .type   FtlInit, %function
16995 FtlInit:
16996         stp     x29, x30, [sp, -32]!
16997         adrp    x1, :got:g_LowFormat
16998         add     x29, sp, 0
16999         stp     x19, x20, [sp,16]
17000         adrp    x19, :got:gFtlInitStatus
17001         mov     x20, x0
17002         mov     w0, -1
17003         ldr     x19, [x19, #:got_lo12:gFtlInitStatus]
17004         str     w0, [x19]
17005         adrp    x0, .LC72
17006         add     x0, x0, :lo12:.LC72
17007         ldr     x1, [x1, #:got_lo12:g_LowFormat]
17008         str     wzr, [x1]
17009         adrp    x1, .LC73
17010         add     x1, x1, :lo12:.LC73
17011         bl      printk
17012         mov     x0, x20
17013         bl      FtlConstantsInit
17014         bl      FtlMemInit
17015         bl      FtlVariablesInit
17016         adrp    x0, :got:c_ftl_nand_max_sys_blks
17017         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_sys_blks]
17018         ldrh    w0, [x0]
17019         bl      FtlFreeSysBlkQueueInit
17020         bl      FtlLoadBbt
17021         cbnz    w0, .L2294
17022         bl      FtlSysBlkInit
17023         cbnz    w0, .L2294
17024         mov     w0, 1
17025         str     w0, [x19]
17026 .L2294:
17027         mov     w0, 0
17028         ldp     x19, x20, [sp,16]
17029         ldp     x29, x30, [sp], 32
17030         ret
17031         .size   FtlInit, .-FtlInit
17032         .align  2
17033         .global rk_ftl_init
17034         .type   rk_ftl_init, %function
17035 rk_ftl_init:
17036         stp     x29, x30, [sp, -32]!
17037         mov     w0, 2048
17038         add     x29, sp, 0
17039         stp     x19, x20, [sp,16]
17040         adrp    x20, :got:gLoaderBootInfo
17041         bl      ftl_malloc
17042         adrp    x19, :got:RK29_NANDC_REG_BASE
17043         adrp    x1, :got:RK29_NANDC1_REG_BASE
17044         ldr     x20, [x20, #:got_lo12:gLoaderBootInfo]
17045         str     x0, [x20]
17046         ldr     x19, [x19, #:got_lo12:RK29_NANDC_REG_BASE]
17047         mov     x0, x19
17048         str     xzr, [x19]
17049         ldr     x1, [x1, #:got_lo12:RK29_NANDC1_REG_BASE]
17050         str     xzr, [x1]
17051         bl      rknand_get_reg_addr
17052         ldr     x1, [x19]
17053         mov     w0, -1
17054         cbz     x1, .L2297
17055         bl      rk_nandc_irq_init
17056         mov     w1, 0
17057         ldr     x0, [x20]
17058         mov     w2, w1
17059         mov     w3, 2048
17060         bl      FlashSramLoadStore
17061         bl      rknand_flash_cs_init
17062         ldr     x0, [x19]
17063         bl      FlashInit
17064         mov     w19, w0
17065         cbnz    w0, .L2298
17066         adrp    x0, :got:gNandPhyInfo
17067         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
17068         bl      FtlInit
17069 .L2298:
17070         adrp    x0, .LC115
17071         mov     w1, w19
17072         add     x0, x0, :lo12:.LC115
17073         bl      printk
17074         mov     w0, w19
17075 .L2297:
17076         ldp     x19, x20, [sp,16]
17077         ldp     x29, x30, [sp], 32
17078         ret
17079         .size   rk_ftl_init, .-rk_ftl_init
17080         .align  2
17081         .global Ftl_get_new_temp_ppa
17082         .type   Ftl_get_new_temp_ppa, %function
17083 Ftl_get_new_temp_ppa:
17084         stp     x29, x30, [sp, -32]!
17085         mov     w1, 65535
17086         add     x29, sp, 0
17087         str     x19, [sp,16]
17088         adrp    x19, :got:g_gc_temp_superblock
17089         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
17090         ldrh    w2, [x0]
17091         cmp     w2, w1
17092         beq     .L2302
17093         ldrh    w0, [x0,4]
17094         cbnz    w0, .L2303
17095 .L2302:
17096         bl      FtlCacheWriteBack
17097         mov     w0, 0
17098         bl      FtlGcFreeTempBlock
17099         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
17100         strb    wzr, [x0,8]
17101         bl      allocate_data_superblock
17102         adrp    x0, :got:g_gc_blk_num
17103         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
17104         strh    wzr, [x0]
17105         adrp    x0, :got:g_gc_page_offset
17106         ldr     x0, [x0, #:got_lo12:g_gc_page_offset]
17107         strh    wzr, [x0]
17108         bl      l2p_flush
17109         bl      FtlVpcTblFlush
17110         mov     w0, 0
17111         bl      FtlEctTblFlush
17112 .L2303:
17113         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
17114         bl      get_new_active_ppa
17115         ldr     x19, [sp,16]
17116         ldp     x29, x30, [sp], 32
17117         ret
17118         .size   Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa
17119         .align  2
17120         .global rk_ftl_garbage_collect
17121         .type   rk_ftl_garbage_collect, %function
17122 rk_ftl_garbage_collect:
17123         stp     x29, x30, [sp, -160]!
17124         add     x29, sp, 0
17125         stp     x21, x22, [sp,32]
17126         adrp    x22, :got:g_in_gc_progress
17127         stp     x19, x20, [sp,16]
17128         stp     x23, x24, [sp,48]
17129         ldr     x2, [x22, #:got_lo12:g_in_gc_progress]
17130         stp     x25, x26, [sp,64]
17131         stp     x27, x28, [sp,80]
17132         ldr     w3, [x2]
17133         mov     w2, 0
17134         cbnz    w3, .L2431
17135         mov     w24, w0
17136         adrp    x0, .LANCHOR2+128
17137         mov     w23, w1
17138         mov     w1, 65535
17139         ldrh    w0, [x0,#:lo12:.LANCHOR2+128]
17140         cmp     w0, w1
17141         bne     .L2306
17142 .L2309:
17143         adrp    x0, :got:g_gc_next_blk_1
17144         mov     w3, 65535
17145         ldr     x0, [x0, #:got_lo12:g_gc_next_blk_1]
17146         ldrh    w2, [x0]
17147         cmp     w2, w3
17148         bne     .L2307
17149         b       .L2308
17150 .L2306:
17151         adrp    x0, :got:g_gc_temp_superblock
17152         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
17153         ldrh    w0, [x0]
17154         cmp     w0, w1
17155         beq     .L2309
17156         mov     w0, 1
17157         bl      FtlGcFreeTempBlock
17158         mov     w2, 1
17159         cbz     w0, .L2309
17160         b       .L2431
17161 .L2307:
17162         adrp    x1, :got:g_gc_next_blk
17163         ldr     x1, [x1, #:got_lo12:g_gc_next_blk]
17164         ldrh    w4, [x1]
17165         cmp     w4, w3
17166         bne     .L2308
17167         strh    w2, [x1]
17168         mov     w1, -1
17169         strh    w1, [x0]
17170 .L2308:
17171         adrp    x26, :got:g_gc_skip_write_count
17172         cmp     w24, 1
17173         adrp    x19, :got:g_gc_superblock
17174         ldr     x20, [x26, #:got_lo12:g_gc_skip_write_count]
17175         ldr     w0, [x20]
17176         add     w0, w0, 1
17177         add     w0, w0, w24, lsl 7
17178         str     w0, [x20]
17179         beq     .L2310
17180 .L2312:
17181         mov     w21, 65535
17182         b       .L2311
17183 .L2310:
17184         adrp    x1, :got:g_inkDie_check_enable
17185         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
17186         ldr     w1, [x1]
17187         cbz     w1, .L2312
17188         adrp    x27, :got:g_min_erase_count
17189         ldr     x27, [x27, #:got_lo12:g_min_erase_count]
17190         ldr     w1, [x27]
17191         cmp     w1, 29
17192         bhi     .L2312
17193         adrp    x25, :got:gc_ink_free_return_value
17194         ldr     x21, [x25, #:got_lo12:gc_ink_free_return_value]
17195         ldrh    w1, [x21]
17196         add     w0, w0, w1
17197         str     w0, [x20]
17198         bl      FtlGcReFreshBadBlk
17199         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17200         ldrh    w1, [x0]
17201         mov     w0, 65535
17202         cmp     w1, w0
17203         bne     .L2312
17204         adrp    x0, :got:g_gc_next_blk
17205         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
17206         ldrh    w0, [x0]
17207         cmp     w0, w1
17208         bne     .L2312
17209         ldr     w0, [x20]
17210         cmp     w0, 1024
17211         bls     .L2312
17212         ldr     w0, [x27]
17213         str     wzr, [x20]
17214         strh    wzr, [x21]
17215         cbnz    w0, .L2313
17216         mov     w0, 6
17217         b       .L2450
17218 .L2313:
17219         cmp     w0, 5
17220         bhi     .L2314
17221         mov     w0, 18
17222 .L2450:
17223         strh    w0, [x21]
17224 .L2314:
17225         mov     w0, 32
17226         bl      List_get_gc_head_node
17227         uxth    w28, w0
17228         mov     w3, 65535
17229         cmp     w28, w3
17230         beq     .L2318
17231         adrp    x20, :got:g_gc_blk_index
17232         ldr     x20, [x20, #:got_lo12:g_gc_blk_index]
17233         ldrh    w0, [x20]
17234         cbz     w0, .L2316
17235         adrp    x27, :got:p_valid_page_count_table
17236         ubfiz   x28, x28, 1, 16
17237         adrp    x2, :got:c_ftl_nand_planes_num
17238         ldr     x27, [x27, #:got_lo12:p_valid_page_count_table]
17239         ldr     x2, [x2, #:got_lo12:c_ftl_nand_planes_num]
17240         ldr     x1, [x27]
17241         ldrh    w2, [x2]
17242         ldrh    w4, [x1,x28]
17243         adrp    x1, :got:c_ftl_nand_page_pre_slc_blk
17244         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
17245         ldrh    w1, [x1]
17246         mul     w1, w1, w2
17247         add     w1, w1, 1
17248         cmp     w4, w1
17249         bgt     .L2318
17250         adrp    x1, :got:g_in_swl_replace
17251         str     x3, [x29,136]
17252         ldr     x1, [x1, #:got_lo12:g_in_swl_replace]
17253         str     wzr, [x1]
17254         add     w1, w0, 1
17255         strh    w1, [x20]
17256         bl      List_get_gc_head_node
17257         uxth    w21, w0
17258         ldr     x3, [x29,136]
17259         cmp     w21, w3
17260         beq     .L2318
17261         ubfiz   x5, x21, 1, 16
17262         ldr     x4, [x27]
17263         adrp    x0, .LC116
17264         ldrh    w1, [x20]
17265         add     x0, x0, :lo12:.LC116
17266         mov     w2, w21
17267         ldrh    w3, [x4,x5]
17268         ldrh    w4, [x4,x28]
17269         str     x5, [x29,136]
17270         bl      printk
17271         ldrh    w0, [x20]
17272         ldr     x5, [x29,136]
17273         cmp     w0, 40
17274         bls     .L2317
17275         ldr     x0, [x27]
17276         ldrh    w0, [x0,x5]
17277         cmp     w0, 32
17278         bls     .L2317
17279         strh    wzr, [x20]
17280 .L2317:
17281         ldr     x25, [x25, #:got_lo12:gc_ink_free_return_value]
17282         mov     w0, 6
17283         strh    w0, [x25]
17284         b       .L2311
17285 .L2316:
17286         mov     w0, 1
17287         strh    w0, [x20]
17288 .L2318:
17289         bl      GetSwlReplaceBlock
17290         uxth    w21, w0
17291         mov     w0, 65535
17292         cmp     w21, w0
17293         bne     .L2311
17294         ldr     x25, [x25, #:got_lo12:gc_ink_free_return_value]
17295         strh    wzr, [x25]
17296 .L2311:
17297         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17298         ldrh    w2, [x0]
17299         mov     w0, 65535
17300         cmp     w2, w0
17301         bne     .L2319
17302         adrp    x0, :got:g_gc_temp_superblock
17303         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
17304         ldrh    w1, [x0]
17305         cmp     w1, w2
17306         bne     .L2319
17307         adrp    x0, :got:g_gc_next_blk
17308         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
17309         ldrh    w20, [x0]
17310         cmp     w20, w1
17311         bne     .L2319
17312         adrp    x25, :got:g_num_free_superblocks
17313         ldr     x26, [x26, #:got_lo12:g_gc_skip_write_count]
17314         mov     w2, 1024
17315         ldr     x27, [x25, #:got_lo12:g_num_free_superblocks]
17316         ldr     w1, [x26]
17317         ldrh    w0, [x27]
17318         cmp     w0, 24
17319         mov     w0, 5120
17320         csel    w0, w0, w2, cc
17321         cmp     w1, w0
17322         bls     .L2319
17323         adrp    x0, :got:gc_ink_free_return_value
17324         str     wzr, [x26]
17325         ldr     x0, [x0, #:got_lo12:gc_ink_free_return_value]
17326         strh    wzr, [x0]
17327         bl      GetSwlReplaceBlock
17328         uxth    w21, w0
17329         cmp     w21, w20
17330         bne     .L2321
17331         adrp    x20, :got:g_gc_merge_free_blk_threshold
17332         ldrh    w1, [x27]
17333         ldr     x26, [x20, #:got_lo12:g_gc_merge_free_blk_threshold]
17334         ldrh    w0, [x26]
17335         cmp     w1, w0
17336         bcs     .L2322
17337         mov     w0, 64
17338         bl      List_get_gc_head_node
17339         uxth    w0, w0
17340         cmp     w0, w21
17341         beq     .L2331
17342         adrp    x1, :got:g_SlcPartLbaEndSector
17343         adrp    x4, :got:c_ftl_nand_type
17344         uxtw    x2, w0
17345         ldr     x1, [x1, #:got_lo12:g_SlcPartLbaEndSector]
17346         ldr     w3, [x1]
17347         adrp    x1, :got:p_valid_page_count_table
17348         cbnz    w3, .L2324
17349         ldr     x0, [x4, #:got_lo12:c_ftl_nand_type]
17350         ldrh    w0, [x0]
17351         cmp     w0, 3
17352         beq     .L2324
17353         adrp    x0, :got:g_all_blk_used_slc_mode
17354         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
17355         ldr     w0, [x0]
17356         cbnz    w0, .L2324
17357         adrp    x0, :got:g_inkDie_check_enable
17358         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
17359         ldr     w0, [x0]
17360         cbz     w0, .L2325
17361 .L2324:
17362         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17363         ldr     x0, [x1]
17364         ldrh    w5, [x0,x2,lsl 1]
17365         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
17366         ldr     x2, [x4, #:got_lo12:c_ftl_nand_type]
17367         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
17368         ldrh    w2, [x2]
17369         ldrh    w1, [x0]
17370         adrp    x0, :got:c_ftl_nand_planes_num
17371         cmp     w2, 3
17372         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
17373         ldrh    w0, [x0]
17374         mul     w3, w1, w0
17375         mov     w0, 0
17376         lsr     w1, w1, 1
17377         csel    w0, w1, w0, eq
17378         add     w0, w3, w0
17379         cmp     w5, w0
17380         bgt     .L2327
17381         mov     w0, 0
17382         bl      List_get_gc_head_node
17383         uxth    w21, w0
17384         adrp    x0, :got:g_MaxLpn
17385         adrp    x1, :got:g_VaildLpn
17386         ldr     x20, [x20, #:got_lo12:g_gc_merge_free_blk_threshold]
17387         ldr     x0, [x0, #:got_lo12:g_MaxLpn]
17388         ldr     x1, [x1, #:got_lo12:g_VaildLpn]
17389         ldr     w0, [x0]
17390         ldr     w1, [x1]
17391         add     w0, w0, w0, lsl 1
17392         cmp     w1, w0, lsr 2
17393         bls     .L2328
17394         mov     w0, 128
17395         b       .L2451
17396 .L2328:
17397         mov     w0, 160
17398 .L2451:
17399         strh    w0, [x20]
17400         b       .L2329
17401 .L2327:
17402         ldr     x20, [x20, #:got_lo12:g_gc_merge_free_blk_threshold]
17403         mov     w0, 128
17404         strh    w0, [x20]
17405         b       .L2331
17406 .L2325:
17407         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17408         ldr     x1, [x1]
17409         ldrh    w1, [x1,x2,lsl 1]
17410         cmp     w1, 7
17411         bhi     .L2330
17412         bl      List_get_gc_head_node
17413         uxth    w21, w0
17414         mov     w0, 128
17415         strh    w0, [x26]
17416         b       .L2329
17417 .L2330:
17418         mov     w0, 64
17419         b       .L2452
17420 .L2322:
17421         mov     w0, 80
17422 .L2452:
17423         strh    w0, [x26]
17424         b       .L2331
17425 .L2329:
17426         mov     w0, 65535
17427         cmp     w21, w0
17428         beq     .L2331
17429 .L2321:
17430         adrp    x0, :got:p_valid_page_count_table
17431         adrp    x5, :got:g_gc_free_blk_threshold
17432         ubfiz   x4, x21, 1, 16
17433         ldr     x25, [x25, #:got_lo12:g_num_free_superblocks]
17434         mov     w1, w21
17435         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
17436         ldr     x5, [x5, #:got_lo12:g_gc_free_blk_threshold]
17437         ldrh    w2, [x25]
17438         ldr     x3, [x0]
17439         adrp    x0, :got:p_erase_count_table
17440         ldrh    w5, [x5]
17441         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
17442         ldrh    w3, [x3,x4]
17443         ldr     x6, [x0]
17444         adrp    x0, .LC117
17445         add     x0, x0, :lo12:.LC117
17446         ldrh    w4, [x6,x4]
17447         bl      printk
17448 .L2331:
17449         bl      FtlGcReFreshBadBlk
17450 .L2319:
17451         mov     w0, 65535
17452         cmp     w21, w0
17453         cset    w1, eq
17454         cbz     w1, .L2332
17455         cbnz    w24, .L2332
17456         adrp    x0, :got:g_num_free_superblocks
17457         mov     w20, 1
17458         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
17459         ldrh    w1, [x0]
17460         cmp     w1, 24
17461         bhi     .L2333
17462         adrp    x0, :got:c_ftl_nand_page_pre_blk
17463         cmp     w1, 16
17464         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17465         ldrh    w20, [x0]
17466         bls     .L2334
17467         lsr     w20, w20, 5
17468         b       .L2333
17469 .L2334:
17470         cmp     w1, 12
17471         bls     .L2335
17472         lsr     w20, w20, 4
17473         b       .L2333
17474 .L2335:
17475         cmp     w1, 8
17476         bls     .L2333
17477         lsr     w20, w20, 2
17478 .L2333:
17479         adrp    x0, :got:g_gc_free_blk_threshold
17480         ldr     x4, [x0, #:got_lo12:g_gc_free_blk_threshold]
17481         ldrh    w2, [x4]
17482         cmp     w2, w1
17483         bcs     .L2337
17484         adrp    x1, :got:g_gc_temp_superblock
17485         ldr     x1, [x1, #:got_lo12:g_gc_temp_superblock]
17486         ldrh    w2, [x1]
17487         mov     w1, 65535
17488         cmp     w2, w1
17489         bne     .L2338
17490         adrp    x1, :got:g_gc_next_blk
17491         ldr     x1, [x1, #:got_lo12:g_gc_next_blk]
17492         ldrh    w1, [x1]
17493         cmp     w1, w2
17494         bne     .L2338
17495         adrp    x1, :got:gc_ink_free_return_value
17496         ldr     x1, [x1, #:got_lo12:gc_ink_free_return_value]
17497         ldrh    w2, [x1]
17498         cbnz    w2, .L2339
17499         adrp    x1, :got:g_MaxLpn
17500         adrp    x3, :got:g_VaildLpn
17501         ldr     x1, [x1, #:got_lo12:g_MaxLpn]
17502         ldr     x3, [x3, #:got_lo12:g_VaildLpn]
17503         ldr     w1, [x1]
17504         ldr     w3, [x3]
17505         add     w1, w1, w1, lsl 1
17506         cmp     w3, w1, lsr 2
17507         bcs     .L2340
17508 .L2339:
17509         adrp    x1, :got:c_ftl_nand_data_op_blks_per_plane
17510         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
17511         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17512         ldrh    w1, [x1]
17513         add     w1, w1, w1, lsl 1
17514         asr     w1, w1, 2
17515         strh    w1, [x0]
17516         b       .L2341
17517 .L2340:
17518         mov     w0, 18
17519         strh    w0, [x4]
17520 .L2341:
17521         adrp    x0, :got:g_in_swl_replace
17522         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
17523         str     wzr, [x0]
17524         b       .L2431
17525 .L2338:
17526         adrp    x1, :got:c_ftl_nand_data_op_blks_per_plane
17527         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
17528         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17529         ldrh    w1, [x1]
17530         add     w1, w1, w1, lsl 1
17531         asr     w1, w1, 2
17532         strh    w1, [x0]
17533 .L2337:
17534         cmp     w23, 2
17535         bhi     .L2392
17536         adrp    x0, :got:g_inkDie_check_enable
17537         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
17538         ldr     w0, [x0]
17539         cbz     w0, .L2392
17540         add     w20, w20, 1
17541         uxth    w20, w20
17542         b       .L2392
17543 .L2332:
17544         adrp    x0, :got:g_gc_temp_superblock
17545         mov     w2, 65535
17546         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
17547         ldrh    w0, [x0]
17548         cmp     w0, w2
17549         bne     .L2344
17550         cbz     w1, .L2344
17551         adrp    x1, :got:g_gc_next_blk
17552         ldr     x1, [x1, #:got_lo12:g_gc_next_blk]
17553         ldrh    w1, [x1]
17554         cmp     w1, w0
17555         bne     .L2344
17556         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17557         ldrh    w1, [x1]
17558         cmp     w1, w0
17559         beq     .L2345
17560 .L2350:
17561         mov     w21, 65535
17562         b       .L2344
17563 .L2345:
17564         adrp    x0, :got:g_in_swl_replace
17565         adrp    x20, :got:g_num_free_superblocks
17566         adrp    x21, :got:gc_ink_free_return_value
17567         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
17568         str     wzr, [x0]
17569         adrp    x0, :got:g_gc_free_blk_threshold
17570         ldr     x24, [x20, #:got_lo12:g_num_free_superblocks]
17571         ldr     x2, [x0, #:got_lo12:g_gc_free_blk_threshold]
17572         ldrh    w3, [x24]
17573         ldrh    w1, [x2]
17574         cmp     w3, w1
17575         bls     .L2346
17576         ldr     x1, [x21, #:got_lo12:gc_ink_free_return_value]
17577         ldrh    w1, [x1]
17578         cbnz    w1, .L2347
17579         adrp    x1, :got:g_MaxLpn
17580         adrp    x3, :got:g_VaildLpn
17581         ldr     x1, [x1, #:got_lo12:g_MaxLpn]
17582         ldr     x3, [x3, #:got_lo12:g_VaildLpn]
17583         ldr     w1, [x1]
17584         ldr     w3, [x3]
17585         add     w1, w1, w1, lsl 1
17586         cmp     w3, w1, lsr 2
17587         bcs     .L2348
17588 .L2347:
17589         adrp    x1, :got:c_ftl_nand_data_op_blks_per_plane
17590         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
17591         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17592         ldrh    w1, [x1]
17593         add     w1, w1, w1, lsl 1
17594         asr     w1, w1, 2
17595         strh    w1, [x0]
17596         b       .L2349
17597 .L2348:
17598         mov     w0, 18
17599         strh    w0, [x2]
17600 .L2349:
17601         bl      FtlReadRefresh
17602         ldr     x21, [x21, #:got_lo12:gc_ink_free_return_value]
17603         b       .L2453
17604 .L2346:
17605         ldr     x21, [x21, #:got_lo12:gc_ink_free_return_value]
17606         ldrh    w0, [x21]
17607         cbnz    w0, .L2350
17608         adrp    x23, :got:c_ftl_nand_data_op_blks_per_plane
17609         ldr     x23, [x23, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17610         ldrh    w1, [x23]
17611         add     w1, w1, w1, lsl 1
17612         asr     w1, w1, 2
17613         strh    w1, [x2]
17614         bl      List_get_gc_head_node
17615         ubfiz   x0, x0, 1, 16
17616         adrp    x1, :got:p_valid_page_count_table
17617         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17618         ldr     x1, [x1]
17619         ldrh    w2, [x1,x0]
17620         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
17621         adrp    x1, :got:c_ftl_nand_planes_num
17622         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
17623         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
17624         ldrh    w0, [x0]
17625         ldrh    w1, [x1]
17626         mul     w0, w0, w1
17627         mov     w1, 2
17628         sdiv    w0, w0, w1
17629         cmp     w2, w0
17630         ble     .L2351
17631         ldrh    w0, [x23]
17632         ldrh    w1, [x24]
17633         sub     w0, w0, #1
17634         cmp     w1, w0
17635         blt     .L2351
17636         bl      FtlReadRefresh
17637 .L2453:
17638         ldrh    w2, [x21]
17639         b       .L2431
17640 .L2351:
17641         cbnz    w2, .L2350
17642         mov     w0, -1
17643         bl      decrement_vpc_count
17644         ldr     x20, [x20, #:got_lo12:g_num_free_superblocks]
17645         ldrh    w2, [x20]
17646         add     w2, w2, 1
17647         b       .L2431
17648 .L2344:
17649         adrp    x0, :got:g_inkDie_check_enable
17650         mov     w20, 2
17651         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
17652         ldr     w0, [x0]
17653         cmp     w0, wzr
17654         csinc   w20, w20, wzr, ne
17655         b       .L2343
17656 .L2392:
17657         mov     w21, 65535
17658 .L2343:
17659         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17660         mov     w2, 65535
17661         ldrh    w0, [x1]
17662         cmp     w0, w2
17663         bne     .L2353
17664         cmp     w21, w0
17665         beq     .L2354
17666         strh    w21, [x1]
17667         b       .L2355
17668 .L2354:
17669         adrp    x0, :got:g_gc_next_blk
17670         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
17671         ldrh    w2, [x0]
17672         cmp     w2, w21
17673         beq     .L2355
17674         strh    w2, [x1]
17675         mov     w1, -1
17676         strh    w1, [x0]
17677 .L2355:
17678         ldr     x23, [x19, #:got_lo12:g_gc_superblock]
17679         ldrh    w0, [x23]
17680         bl      IsBlkInGcList
17681         cbz     w0, .L2356
17682         mov     w0, -1
17683         strh    w0, [x23]
17684 .L2356:
17685         ldr     x23, [x19, #:got_lo12:g_gc_superblock]
17686         mov     w0, 65535
17687         ldrh    w1, [x23]
17688         cmp     w1, w0
17689         beq     .L2353
17690         mov     x0, x23
17691         bl      make_superblock
17692         strh    wzr, [x23,2]
17693         adrp    x0, :got:g_gc_cur_blk_valid_pages
17694         strb    wzr, [x23,6]
17695         ldrh    w1, [x23]
17696         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17697         strh    wzr, [x0]
17698         adrp    x0, :got:p_valid_page_count_table
17699         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
17700         ldr     x0, [x0]
17701         ldrh    w1, [x0,x1,lsl 1]
17702         adrp    x0, :got:g_gc_cur_blk_max_valid_pages
17703         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_max_valid_pages]
17704         strh    w1, [x0]
17705 .L2353:
17706         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17707         ldrh    w1, [x0]
17708         adrp    x0, :got:g_active_superblock
17709         ldr     x0, [x0, #:got_lo12:g_active_superblock]
17710         ldrh    w0, [x0]
17711         cmp     w0, w1
17712         beq     .L2358
17713         adrp    x0, :got:g_buffer_superblock
17714         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
17715         ldrh    w0, [x0]
17716         cmp     w0, w1
17717         beq     .L2358
17718 .L2359:
17719         add     x0, x29, 156
17720         mov     w24, 65535
17721         str     x0, [x29,136]
17722         b       .L2360
17723 .L2358:
17724         ldr     x19, [x19, #:got_lo12:g_gc_superblock]
17725         mov     w0, -1
17726         strh    w0, [x19]
17727         b       .L2454
17728 .L2378:
17729         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17730         ldrh    w0, [x1,2]
17731         add     w20, w20, w0
17732         adrp    x0, :got:c_ftl_nand_page_pre_blk
17733         uxth    w20, w20
17734         strh    w20, [x1,2]
17735         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17736         ldrh    w0, [x0]
17737         cmp     w0, w20
17738         bls     .L2380
17739         adrp    x1, :got:g_gc_cur_blk_valid_pages
17740         adrp    x0, :got:g_gc_cur_blk_max_valid_pages
17741         ldr     x1, [x1, #:got_lo12:g_gc_cur_blk_valid_pages]
17742         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_max_valid_pages]
17743         ldrh    w1, [x1]
17744         ldrh    w0, [x0]
17745         cmp     w1, w0
17746         beq     .L2380
17747 .L2381:
17748         adrp    x0, :got:g_num_free_superblocks
17749         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
17750         ldrh    w0, [x0]
17751         cmp     w0, 2
17752         bhi     .L2384
17753         adrp    x0, :got:c_ftl_nand_page_pre_blk
17754         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17755         ldrh    w20, [x0]
17756 .L2360:
17757         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17758         ldrh    w0, [x0]
17759         cmp     w0, w24
17760         bne     .L2361
17761         adrp    x0, :got:g_in_swl_replace
17762         adrp    x23, :got:c_ftl_nand_planes_num
17763         mov     w25, 2
17764         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
17765         str     wzr, [x0]
17766 .L2362:
17767         adrp    x0, :got:g_gc_blk_index
17768         adrp    x26, :got:g_gc_blk_index
17769         ldr     x27, [x0, #:got_lo12:g_gc_blk_index]
17770         ldrh    w0, [x27]
17771         bl      List_get_gc_head_node
17772         ldr     x28, [x19, #:got_lo12:g_gc_superblock]
17773         uxth    w0, w0
17774         cmp     w0, w24
17775         strh    w0, [x28]
17776         bne     .L2363
17777         strh    wzr, [x27]
17778         mov     w2, 8
17779         b       .L2431
17780 .L2363:
17781         bl      IsBlkInGcList
17782         cbz     w0, .L2364
17783         ldrh    w0, [x27]
17784         add     w0, w0, 1
17785         strh    w0, [x27]
17786         b       .L2362
17787 .L2364:
17788         ldrh    w0, [x27]
17789         adrp    x1, :got:p_valid_page_count_table
17790         ldrh    w2, [x28]
17791         add     w0, w0, 1
17792         lsl     x2, x2, 1
17793         uxth    w0, w0
17794         strh    w0, [x27]
17795         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17796         ldr     x5, [x23, #:got_lo12:c_ftl_nand_planes_num]
17797         ldr     x3, [x1]
17798         adrp    x1, :got:c_ftl_nand_page_pre_blk
17799         ldrh    w5, [x5]
17800         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
17801         ldrh    w4, [x3,x2]
17802         ldrh    w1, [x1]
17803         mul     w1, w1, w5
17804         sdiv    w5, w1, w25
17805         cmp     w4, w5
17806         bgt     .L2366
17807         cmp     w4, 8
17808         bls     .L2367
17809         cmp     w0, 48
17810         bls     .L2367
17811         adrp    x0, :got:g_gc_blk_num
17812         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
17813         ldrh    w0, [x0]
17814         cmp     w0, 35
17815         bhi     .L2367
17816 .L2366:
17817         ldr     x0, [x26, #:got_lo12:g_gc_blk_index]
17818         strh    wzr, [x0]
17819 .L2367:
17820         cmp     w21, w24
17821         ldrh    w0, [x3,x2]
17822         bne     .L2368
17823         cmp     w0, w1
17824         blt     .L2368
17825         ldr     x19, [x19, #:got_lo12:g_gc_superblock]
17826         mov     w0, -1
17827         strh    w0, [x19]
17828         ldr     x26, [x26, #:got_lo12:g_gc_blk_index]
17829         strh    wzr, [x26]
17830         b       .L2454
17831 .L2368:
17832         cbnz    w0, .L2369
17833         mov     w0, -1
17834         bl      decrement_vpc_count
17835         ldr     x26, [x26, #:got_lo12:g_gc_blk_index]
17836         ldrh    w0, [x26]
17837         add     w0, w0, 1
17838         strh    w0, [x26]
17839         b       .L2362
17840 .L2369:
17841         ldr     x23, [x19, #:got_lo12:g_gc_superblock]
17842         mov     x0, x23
17843         strb    wzr, [x23,8]
17844         bl      make_superblock
17845         adrp    x0, :got:g_gc_cur_blk_valid_pages
17846         ldrh    w1, [x23]
17847         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17848         strh    wzr, [x0]
17849         adrp    x0, :got:p_valid_page_count_table
17850         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
17851         ldr     x0, [x0]
17852         ldrh    w1, [x0,x1,lsl 1]
17853         adrp    x0, :got:g_gc_cur_blk_max_valid_pages
17854         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_max_valid_pages]
17855         strh    wzr, [x23,2]
17856         strb    wzr, [x23,6]
17857         strh    w1, [x0]
17858 .L2361:
17859         bl      FtlReadRefresh
17860         ldr     x0, [x22, #:got_lo12:g_in_gc_progress]
17861         mov     w1, 1
17862         str     w1, [x0]
17863         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17864         ldrh    w1, [x0,2]
17865         adrp    x0, :got:c_ftl_nand_page_pre_blk
17866         add     w2, w1, w20
17867         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17868         ldrh    w0, [x0]
17869         cmp     w2, w0
17870         ble     .L2370
17871         sub     w20, w0, w1
17872         uxth    w20, w20
17873 .L2370:
17874         mov     w25, 0
17875 .L2371:
17876         cmp     w20, w25, uxth
17877         bls     .L2378
17878         adrp    x0, :got:c_ftl_nand_planes_num
17879         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
17880         ldrh    w4, [x0]
17881         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17882         ldrh    w2, [x0,2]
17883         mov     x0, 0
17884         mov     w23, w0
17885         add     w2, w2, w25
17886 .L2379:
17887         cmp     w4, w0, uxth
17888         bls     .L2456
17889         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17890         add     x1, x1, x0, lsl 1
17891         ldrh    w1, [x1,16]
17892         cmp     w1, w24
17893         beq     .L2372
17894         adrp    x5, :got:req_gc
17895         mov     w3, 56
17896         orr     w1, w2, w1, lsl 10
17897         umull   x3, w23, w3
17898         ldr     x5, [x5, #:got_lo12:req_gc]
17899         add     w23, w23, 1
17900         uxth    w23, w23
17901         ldr     x5, [x5]
17902         add     x3, x5, x3
17903         str     w1, [x3,4]
17904 .L2372:
17905         add     x0, x0, 1
17906         b       .L2379
17907 .L2456:
17908         adrp    x0, :got:req_gc
17909         mov     w1, w23
17910         mov     w2, 0
17911         mov     x26, 0
17912         mov     x27, 56
17913         ldr     x0, [x0, #:got_lo12:req_gc]
17914         ldr     x0, [x0]
17915         bl      FlashReadPages
17916 .L2374:
17917         cmp     w23, w26, uxth
17918         bls     .L2457
17919         adrp    x0, :got:req_gc
17920         mul     x4, x26, x27
17921         ldr     x6, [x0, #:got_lo12:req_gc]
17922         ldr     x0, [x6]
17923         add     x1, x0, x4
17924         ldr     w0, [x0,x4]
17925         cmn     w0, #1
17926         ldr     x5, [x1,16]
17927         beq     .L2394
17928         ldrh    w0, [x5]
17929         mov     w1, 61589
17930         cmp     w0, w1
17931         bne     .L2394
17932         ldr     w0, [x5,8]
17933         mov     w2, 0
17934         ldr     x1, [x29,136]
17935         str     x6, [x29,112]
17936         str     x4, [x29,120]
17937         str     x5, [x29,128]
17938         bl      log2phys
17939         ldr     x6, [x29,112]
17940         ldr     x4, [x29,120]
17941         ldr     w1, [x29,156]
17942         ldr     x2, [x6]
17943         ldr     x5, [x29,128]
17944         add     x2, x2, x4
17945         ldr     w0, [x2,4]
17946         cmp     w1, w0
17947         bne     .L2394
17948         adrp    x0, :got:g_gc_cur_blk_valid_pages
17949         str     x6, [x29,96]
17950         str     x4, [x29,104]
17951         str     x5, [x29,112]
17952         ldr     x1, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17953         ldrh    w0, [x1]
17954         add     w0, w0, 1
17955         strh    w0, [x1]
17956         adrp    x0, :got:g_gc_num_req
17957         ldr     x28, [x0, #:got_lo12:g_gc_num_req]
17958         adrp    x0, :got:req_gc_dst
17959         ldr     x7, [x0, #:got_lo12:req_gc_dst]
17960         ldr     w0, [x28]
17961         str     x7, [x29,120]
17962         ldr     x1, [x7]
17963         madd    x1, x0, x27, x1
17964         ldr     w0, [x2,24]
17965         str     x1, [x29,128]
17966         str     w0, [x1,24]
17967         bl      Ftl_get_new_temp_ppa
17968         ldr     x1, [x29,128]
17969         ldr     x7, [x29,120]
17970         ldr     x6, [x29,96]
17971         str     w0, [x1,4]
17972         ldr     w0, [x28]
17973         ldr     x1, [x7]
17974         ldr     x4, [x29,104]
17975         ldr     x5, [x29,112]
17976         madd    x0, x0, x27, x1
17977         ldr     x1, [x6]
17978         add     x1, x1, x4
17979         ldr     x2, [x1,8]
17980         str     x2, [x0,8]
17981         adrp    x2, :got:g_gc_temp_superblock
17982         ldr     x1, [x1,16]
17983         str     x1, [x0,16]
17984         mov     w1, 1
17985         ldr     w0, [x29,156]
17986         str     w0, [x5,12]
17987         ldr     x2, [x2, #:got_lo12:g_gc_temp_superblock]
17988         str     x2, [x29,128]
17989         ldrh    w0, [x2]
17990         strh    w0, [x5,2]
17991         adrp    x0, :got:g_GlobalDataVersion
17992         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
17993         ldr     w0, [x0]
17994         str     w0, [x5,4]
17995         ldr     w0, [x28]
17996         add     w0, w0, 1
17997         str     w0, [x28]
17998         ldr     x0, [x6]
17999         add     x0, x0, x4
18000         bl      FtlGcBufAlloc
18001         ldr     x2, [x29,128]
18002         ldr     w1, [x28]
18003         ldrb    w0, [x2,7]
18004         cmp     w1, w0
18005         beq     .L2376
18006         ldrh    w0, [x2,4]
18007         cbnz    w0, .L2394
18008 .L2376:
18009         bl      Ftl_gc_temp_data_write_back
18010         cbnz    w0, .L2455
18011 .L2394:
18012         add     x26, x26, 1
18013         b       .L2374
18014 .L2457:
18015         add     w25, w25, 1
18016         b       .L2371
18017 .L2380:
18018         adrp    x0, :got:g_gc_num_req
18019         ldr     x0, [x0, #:got_lo12:g_gc_num_req]
18020         ldr     w0, [x0]
18021         cbz     w0, .L2382
18022         bl      Ftl_gc_temp_data_write_back
18023         cbz     w0, .L2382
18024 .L2455:
18025         ldr     x22, [x22, #:got_lo12:g_in_gc_progress]
18026         str     wzr, [x22]
18027 .L2454:
18028         adrp    x0, :got:gc_ink_free_return_value
18029         ldr     x0, [x0, #:got_lo12:gc_ink_free_return_value]
18030         ldrh    w2, [x0]
18031         b       .L2431
18032 .L2382:
18033         adrp    x0, :got:g_gc_cur_blk_valid_pages
18034         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
18035         ldrh    w3, [x0]
18036         cbnz    w3, .L2383
18037         adrp    x0, :got:p_valid_page_count_table
18038         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
18039         ldr     x2, [x0, #:got_lo12:p_valid_page_count_table]
18040         ldrh    w0, [x1]
18041         ldr     x2, [x2]
18042         lsl     x0, x0, 1
18043         ldrh    w4, [x2,x0]
18044         cbz     w4, .L2383
18045         strh    w3, [x2,x0]
18046         ldrh    w0, [x1]
18047         bl      update_vpc_list
18048         bl      FtlCacheWriteBack
18049         bl      l2p_flush
18050         bl      FtlVpcTblFlush
18051 .L2383:
18052         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
18053         mov     w1, -1
18054         strh    w1, [x0]
18055         b       .L2381
18056 .L2384:
18057         ldr     x22, [x22, #:got_lo12:g_in_gc_progress]
18058         adrp    x1, :got:gc_ink_free_return_value
18059         str     wzr, [x22]
18060         ldr     x1, [x1, #:got_lo12:gc_ink_free_return_value]
18061         ldrh    w2, [x1]
18062         cmp     w2, wzr
18063         csinc   w2, w2, w0, ne
18064 .L2431:
18065         mov     w0, w2
18066         ldp     x19, x20, [sp,16]
18067         ldp     x21, x22, [sp,32]
18068         ldp     x23, x24, [sp,48]
18069         ldp     x25, x26, [sp,64]
18070         ldp     x27, x28, [sp,80]
18071         ldp     x29, x30, [sp], 160
18072         ret
18073         .size   rk_ftl_garbage_collect, .-rk_ftl_garbage_collect
18074         .align  2
18075         .global FtlRead
18076         .type   FtlRead, %function
18077 FtlRead:
18078         stp     x29, x30, [sp, -192]!
18079         uxtb    w0, w0
18080         add     x29, sp, 0
18081         stp     x19, x20, [sp,16]
18082         stp     x25, x26, [sp,64]
18083         stp     x27, x28, [sp,80]
18084         stp     x21, x22, [sp,32]
18085         stp     x23, x24, [sp,48]
18086         cmp     w0, 16
18087         mov     w19, w1
18088         mov     w28, w2
18089         mov     x25, x3
18090         bne     .L2459
18091         add     w0, w1, 256
18092         mov     w1, w2
18093         mov     x2, x3
18094         bl      FtlVendorPartRead
18095         b       .L2460
18096 .L2459:
18097         add     w0, w1, w2
18098         str     w0, [x29,172]
18099         adrp    x0, :got:g_MaxLbaSector
18100         ldr     w2, [x29,172]
18101         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
18102         ldr     w1, [x0]
18103         mov     w0, -1
18104         cmp     w2, w1
18105         bhi     .L2460
18106         adrp    x23, :got:c_ftl_nand_sec_pre_page
18107         sub     w24, w2, #1
18108         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18109         ldrh    w0, [x0]
18110         udiv    w27, w19, w0
18111         udiv    w24, w24, w0
18112         adrp    x0, :got:g_totle_read_sector
18113         sub     w22, w24, w27
18114         ldr     x0, [x0, #:got_lo12:g_totle_read_sector]
18115         add     w22, w22, 1
18116         ldr     w1, [x0]
18117         add     w1, w28, w1
18118         str     w1, [x0]
18119         adrp    x0, :got:g_totle_read_page_count
18120         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
18121         ldr     w1, [x0]
18122         add     w1, w22, w1
18123         str     w1, [x0]
18124         mov     w0, w27
18125         mov     w1, w24
18126         bl      FtlCacheMetchLpa
18127         cbz     w0, .L2461
18128         bl      FtlCacheWriteBack
18129 .L2461:
18130         mov     w26, 0
18131         add     x0, x29, 188
18132         mov     w20, w27
18133         str     w26, [x29,168]
18134         mov     w21, w26
18135         str     w26, [x29,156]
18136         str     x0, [x29,112]
18137 .L2462:
18138         cbz     w22, .L2504
18139         ldr     x1, [x29,112]
18140         mov     w0, w20
18141         mov     w2, 0
18142         bl      log2phys
18143         ldr     w3, [x29,188]
18144         cmn     w3, #1
18145         bne     .L2501
18146         mov     w3, 0
18147 .L2463:
18148         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18149         ldrh    w0, [x0]
18150         cmp     w3, w0
18151         bcs     .L2467
18152         madd    w0, w20, w0, w3
18153         cmp     w0, w19
18154         bcc     .L2465
18155         ldr     w1, [x29,172]
18156         cmp     w0, w1
18157         bcs     .L2465
18158         sub     w0, w0, w19
18159         mov     w1, 0
18160         ubfiz   x0, x0, 9, 23
18161         mov     w2, 512
18162         add     x0, x25, x0
18163         str     x3, [x29,160]
18164         bl      ftl_memset
18165         ldr     x3, [x29,160]
18166 .L2465:
18167         add     w3, w3, 1
18168         b       .L2463
18169 .L2501:
18170         mov     w0, 56
18171         cmp     w20, w27
18172         umull   x1, w21, w0
18173         adrp    x0, :got:req_read
18174         ldr     x0, [x0, #:got_lo12:req_read]
18175         ldr     x2, [x0]
18176         add     x2, x2, x1
18177         str     w3, [x2,4]
18178         bne     .L2468
18179         adrp    x2, :got:p_io_data_buf_0
18180         ldr     x0, [x0]
18181         add     x0, x0, x1
18182         ldr     x2, [x2, #:got_lo12:p_io_data_buf_0]
18183         ldr     x2, [x2]
18184         str     x2, [x0,8]
18185         ldr     x2, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18186         ldrh    w2, [x2]
18187         udiv    w3, w19, w2
18188         msub    w3, w3, w2, w19
18189         str     w3, [x29,128]
18190         sub     w3, w2, w3
18191         cmp     w3, w28
18192         csel    w3, w3, w28, ls
18193         str     w3, [x29,168]
18194         cmp     w3, w2
18195         bne     .L2469
18196         str     x25, [x0,8]
18197         b       .L2469
18198 .L2468:
18199         ldr     x2, [x0]
18200         cmp     w20, w24
18201         add     x2, x2, x1
18202         bne     .L2470
18203         adrp    x0, :got:p_io_data_buf_1
18204         ldr     w4, [x29,172]
18205         ldr     x0, [x0, #:got_lo12:p_io_data_buf_1]
18206         ldr     x0, [x0]
18207         str     x0, [x2,8]
18208         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18209         ldrh    w3, [x0]
18210         mul     w0, w20, w3
18211         sub     w26, w4, w0
18212         cmp     w26, w3
18213         bne     .L2469
18214         b       .L2502
18215 .L2470:
18216         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18217         ldrh    w0, [x0]
18218         mul     w0, w20, w0
18219 .L2502:
18220         sub     w0, w0, w19
18221         ubfiz   x0, x0, 9, 23
18222         add     x0, x25, x0
18223         str     x0, [x2,8]
18224 .L2469:
18225         adrp    x0, :got:req_read
18226         adrp    x2, :got:p_io_spare_buf
18227         ldr     x0, [x0, #:got_lo12:req_read]
18228         ldr     x2, [x2, #:got_lo12:p_io_spare_buf]
18229         ldr     x0, [x0]
18230         ldr     x2, [x2]
18231         add     x1, x0, x1
18232         adrp    x0, :got:c_ftl_nand_byte_pre_oob
18233         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
18234         str     w20, [x1,24]
18235         ldrh    w0, [x0]
18236         mul     w0, w21, w0
18237         add     w21, w21, 1
18238         and     x0, x0, 4294967292
18239         add     x0, x2, x0
18240         str     x0, [x1,16]
18241 .L2467:
18242         subs    w22, w22, #1
18243         add     w20, w20, 1
18244         beq     .L2471
18245         adrp    x0, :got:c_ftl_nand_planes_num
18246         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
18247         ldrh    w0, [x0]
18248         cmp     w21, w0, lsl 3
18249         bne     .L2462
18250 .L2471:
18251         cbz     w21, .L2462
18252         adrp    x0, :got:req_read
18253         mov     w1, w21
18254         mov     w2, 0
18255         ldr     x0, [x0, #:got_lo12:req_read]
18256         ldr     x0, [x0]
18257         bl      FlashReadPages
18258         str     xzr, [x29,160]
18259         ldr     x0, [x29,128]
18260         ubfiz   x0, x0, 9, 23
18261         str     x0, [x29,144]
18262         ldr     w0, [x29,168]
18263         lsl     w0, w0, 9
18264         str     w0, [x29,152]
18265         lsl     w0, w26, 9
18266         str     w0, [x29,124]
18267 .L2473:
18268         ldr     w0, [x29,160]
18269         cmp     w21, w0
18270         bls     .L2505
18271         ldr     x0, [x29,160]
18272         mov     x1, 56
18273         mul     x3, x0, x1
18274         adrp    x0, :got:req_read
18275         ldr     x0, [x0, #:got_lo12:req_read]
18276         ldr     x0, [x0]
18277         add     x0, x0, x3
18278         ldr     w1, [x0,24]
18279         cmp     w1, w27
18280         bne     .L2474
18281         ldr     x1, [x0,8]
18282         adrp    x0, :got:p_io_data_buf_0
18283         ldr     x0, [x0, #:got_lo12:p_io_data_buf_0]
18284         ldr     x0, [x0]
18285         cmp     x1, x0
18286         bne     .L2475
18287         ldr     x2, [x29,144]
18288         mov     x0, x25
18289         str     x3, [x29,104]
18290         add     x1, x1, x2
18291         ldr     w2, [x29,152]
18292         b       .L2503
18293 .L2474:
18294         cmp     w1, w24
18295         bne     .L2475
18296         ldr     x1, [x0,8]
18297         adrp    x0, :got:p_io_data_buf_1
18298         ldr     x0, [x0, #:got_lo12:p_io_data_buf_1]
18299         ldr     x0, [x0]
18300         cmp     x1, x0
18301         bne     .L2475
18302         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18303         ldr     w2, [x29,124]
18304         str     x3, [x29,104]
18305         ldrh    w0, [x0]
18306         mul     w0, w24, w0
18307         sub     w0, w0, w19
18308         ubfiz   x0, x0, 9, 23
18309         add     x0, x25, x0
18310 .L2503:
18311         bl      ftl_memcpy
18312         ldr     x3, [x29,104]
18313 .L2475:
18314         adrp    x0, :got:req_read
18315         ldr     x0, [x0, #:got_lo12:req_read]
18316         ldr     x0, [x0]
18317         add     x5, x0, x3
18318         ldr     w2, [x0,x3]
18319         cmn     w2, #1
18320         bne     .L2476
18321         adrp    x1, :got:g_sys_ext_data
18322         str     w2, [x29,156]
18323         ldr     x4, [x1, #:got_lo12:g_sys_ext_data]
18324         ldr     w1, [x4,72]
18325         add     w1, w1, 1
18326         str     w1, [x4,72]
18327 .L2476:
18328         ldr     w0, [x0,x3]
18329         cmp     w0, 256
18330         bne     .L2477
18331         ldr     w0, [x5,4]
18332         lsr     w0, w0, 10
18333         bl      P2V_block_in_plane
18334         bl      FtlGcRefreshBlock
18335 .L2477:
18336         ldr     x0, [x29,160]
18337         add     x0, x0, 1
18338         str     x0, [x29,160]
18339         b       .L2473
18340 .L2505:
18341         mov     w21, 0
18342         b       .L2462
18343 .L2504:
18344         adrp    x0, :got:g_gc_bad_block_temp_num
18345         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_num]
18346         ldrh    w0, [x0]
18347         cbz     w0, .L2480
18348         mov     w0, w22
18349         mov     w1, 1
18350         bl      rk_ftl_garbage_collect
18351 .L2480:
18352         ldr     w0, [x29,156]
18353 .L2460:
18354         ldp     x19, x20, [sp,16]
18355         ldp     x21, x22, [sp,32]
18356         ldp     x23, x24, [sp,48]
18357         ldp     x25, x26, [sp,64]
18358         ldp     x27, x28, [sp,80]
18359         ldp     x29, x30, [sp], 192
18360         ret
18361         .size   FtlRead, .-FtlRead
18362         .align  2
18363         .global StorageSysDataLoad
18364         .type   StorageSysDataLoad, %function
18365 StorageSysDataLoad:
18366         stp     x29, x30, [sp, -48]!
18367         mov     x2, 512
18368         add     x29, sp, 0
18369         str     x19, [sp,16]
18370         mov     w19, w0
18371         mov     x0, x1
18372         str     x1, [x29,40]
18373         mov     w1, 0
18374         bl      memset
18375         bl      rknand_device_lock
18376         ldr     x3, [x29,40]
18377         add     w1, w19, 256
18378         mov     w2, 1
18379         mov     w0, 16
18380         bl      FtlRead
18381         str     x0, [x29,40]
18382         bl      rknand_device_unlock
18383         ldr     x19, [sp,16]
18384         ldr     x0, [x29,40]
18385         ldp     x29, x30, [sp], 48
18386         ret
18387         .size   StorageSysDataLoad, .-StorageSysDataLoad
18388         .align  2
18389         .global FtlWrite
18390         .type   FtlWrite, %function
18391 FtlWrite:
18392         stp     x29, x30, [sp, -320]!
18393         uxtb    w0, w0
18394         add     x29, sp, 0
18395         stp     x23, x24, [sp,48]
18396         stp     x25, x26, [sp,64]
18397         stp     x19, x20, [sp,16]
18398         stp     x21, x22, [sp,32]
18399         stp     x27, x28, [sp,80]
18400         cmp     w0, 16
18401         mov     w23, w1
18402         mov     w24, w2
18403         mov     x25, x3
18404         bne     .L2508
18405         add     w0, w1, 256
18406         mov     w1, w2
18407         mov     x2, x3
18408         bl      FtlVendorPartWrite
18409         b       .L2509
18410 .L2508:
18411         adrp    x0, :got:g_MaxLbaSector
18412         add     w2, w1, w2
18413         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
18414         ldr     w1, [x0]
18415         mov     w0, -1
18416         cmp     w2, w1
18417         bhi     .L2509
18418         adrp    x0, :got:g_ftl_nand_free_count
18419         adrp    x3, :got:c_ftl_nand_sec_pre_page
18420         mov     w1, 2048
18421         sub     w2, w2, #1
18422         str     x3, [x29,248]
18423         ldr     x0, [x0, #:got_lo12:g_ftl_nand_free_count]
18424         str     w1, [x0]
18425         ldr     x0, [x3, #:got_lo12:c_ftl_nand_sec_pre_page]
18426         ldrh    w1, [x0]
18427         udiv    w0, w2, w1
18428         cmp     w24, w1, lsl 1
18429         str     w0, [x29,220]
18430         udiv    w26, w23, w1
18431         sub     w27, w0, w26
18432         adrp    x0, :got:g_totle_write_page_count
18433         add     w21, w27, 1
18434         ldr     x0, [x0, #:got_lo12:g_totle_write_page_count]
18435         ldr     w2, [x0]
18436         add     w2, w21, w2
18437         str     w2, [x0]
18438         adrp    x0, :got:g_totle_write_sector
18439         ldr     x0, [x0, #:got_lo12:g_totle_write_sector]
18440         ldr     w2, [x0]
18441         add     w2, w24, w2
18442         str     w2, [x0]
18443         cset    w0, cs
18444         cmp     w24, 8
18445         str     w0, [x29,236]
18446         bhi     .L2547
18447         adrp    x19, :got:g_buffer_superblock
18448         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
18449         b       .L2510
18450 .L2547:
18451         adrp    x19, :got:g_active_superblock
18452         ldr     x19, [x19, #:got_lo12:g_active_superblock]
18453 .L2510:
18454         adrp    x22, :got:g_wr_page_num
18455         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18456         ldr     w3, [x0]
18457         cbz     w3, .L2511
18458         adrp    x0, :got:req_wr_io
18459         sub     w3, w3, #1
18460         mov     w2, 56
18461         adrp    x20, :got:last_cache_match_count
18462         ldr     x0, [x0, #:got_lo12:req_wr_io]
18463         umull   x3, w3, w2
18464         ldr     x0, [x0]
18465         add     x3, x0, x3
18466         ldr     w0, [x3,24]
18467         cmp     w26, w0
18468         bne     .L2512
18469         adrp    x0, :got:g_totle_cache_write_count
18470         ldr     x0, [x0, #:got_lo12:g_totle_cache_write_count]
18471         ldr     w2, [x0]
18472         add     w2, w2, 1
18473         str     w2, [x0]
18474         ldr     x28, [x20, #:got_lo12:last_cache_match_count]
18475         ldr     w0, [x28]
18476         add     w0, w0, 1
18477         str     w0, [x28]
18478         msub    w0, w26, w1, w23
18479         sub     w1, w1, w0
18480         ubfiz   x0, x0, 9, 23
18481         cmp     w1, w24
18482         csel    w19, w1, w24, ls
18483         ldr     x1, [x3,8]
18484         lsl     w21, w19, 9
18485         add     x0, x1, x0
18486         mov     w2, w21
18487         mov     x1, x25
18488         bl      ftl_memcpy
18489         cbnz    w27, .L2513
18490         ldr     w1, [x28]
18491         mov     w0, w27
18492         cmp     w1, 2
18493         ble     .L2509
18494 .L2513:
18495         add     x25, x25, x21
18496         sub     w24, w24, w19
18497         add     w23, w23, w19
18498         add     w26, w26, 1
18499         mov     w21, w27
18500 .L2512:
18501         ldr     x20, [x20, #:got_lo12:last_cache_match_count]
18502         adrp    x0, :got:gp_last_act_superblock
18503         str     wzr, [x20]
18504         ldr     x0, [x0, #:got_lo12:gp_last_act_superblock]
18505         ldr     x19, [x0]
18506 .L2511:
18507         ldr     w1, [x29,220]
18508         mov     w0, w26
18509         bl      FtlCacheMetchLpa
18510         cbz     w0, .L2514
18511         bl      FtlCacheWriteBack
18512 .L2514:
18513         adrp    x0, :got:gp_last_act_superblock
18514         str     x0, [x29,168]
18515         str     w26, [x29,232]
18516         ldr     x1, [x0, #:got_lo12:gp_last_act_superblock]
18517         add     x0, x29, 260
18518         str     x0, [x29,144]
18519         add     x0, x29, 264
18520         str     x0, [x29,240]
18521         adrp    x0, .LC118
18522         add     x0, x0, :lo12:.LC118
18523         str     x19, [x1]
18524         str     x0, [x29,136]
18525 .L2515:
18526         cbz     w21, .L2572
18527         ldrh    w1, [x19,4]
18528         cbnz    w1, .L2516
18529         adrp    x0, :got:g_active_superblock
18530         adrp    x20, :got:g_active_superblock
18531         ldr     x0, [x0, #:got_lo12:g_active_superblock]
18532         cmp     x19, x0
18533         bne     .L2517
18534         adrp    x19, :got:g_buffer_superblock
18535         ldr     x0, [x19, #:got_lo12:g_buffer_superblock]
18536         ldrh    w27, [x0,4]
18537         cbnz    w27, .L2518
18538         bl      allocate_new_data_superblock
18539         adrp    x0, :got:power_up_flag
18540         ldr     x0, [x0, #:got_lo12:power_up_flag]
18541         str     w27, [x0]
18542 .L2518:
18543         ldr     x0, [x20, #:got_lo12:g_active_superblock]
18544         bl      allocate_new_data_superblock
18545         adrp    x0, :got:power_up_flag
18546         ldr     x0, [x0, #:got_lo12:power_up_flag]
18547         ldr     w0, [x0]
18548         cbnz    w0, .L2549
18549 .L2520:
18550         ldr     x19, [x20, #:got_lo12:g_active_superblock]
18551         b       .L2519
18552 .L2517:
18553         adrp    x2, :got:power_up_flag
18554         ldrh    w0, [x0,4]
18555         ldr     x2, [x2, #:got_lo12:power_up_flag]
18556         str     w1, [x2]
18557         cbnz    w0, .L2520
18558         mov     x0, x19
18559         bl      allocate_new_data_superblock
18560         b       .L2519
18561 .L2549:
18562         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
18563 .L2519:
18564         ldrh    w0, [x19,4]
18565         cbnz    w0, .L2521
18566         mov     x0, x19
18567         bl      allocate_new_data_superblock
18568 .L2521:
18569         ldr     x0, [x29,168]
18570         ldr     x0, [x0, #:got_lo12:gp_last_act_superblock]
18571         str     x19, [x0]
18572 .L2516:
18573         adrp    x2, :got:c_wr_page_buf_num
18574         ldr     x3, [x22, #:got_lo12:g_wr_page_num]
18575         ldrh    w1, [x19,4]
18576         str     xzr, [x29,224]
18577         ldr     x0, [x2, #:got_lo12:c_wr_page_buf_num]
18578         ldr     w3, [x3]
18579         str     x2, [x29,160]
18580         ldr     w0, [x0]
18581         sub     w0, w0, w3
18582         cmp     w1, w0
18583         csel    w0, w1, w0, ls
18584         cmp     w0, w21
18585         csel    w0, w0, w21, ls
18586         str     w0, [x29,212]
18587         ldr     w0, [x29,236]
18588         and     w0, w0, 1
18589         str     w0, [x29,156]
18590         add     w0, w24, w23
18591         str     w0, [x29,208]
18592 .L2522:
18593         ldr     w0, [x29,224]
18594         ldr     w2, [x29,212]
18595         ldr     w1, [x29,232]
18596         cmp     w0, w2
18597         add     w28, w1, w0
18598         bcs     .L2573
18599         ldrh    w1, [x19,4]
18600         cbz     w1, .L2551
18601         ldr     w1, [x29,220]
18602         cmp     w28, w1
18603         cset    w10, eq
18604         cbz     w0, .L2524
18605         ldr     w1, [x29,156]
18606         tst     w10, w1
18607         beq     .L2524
18608         ldr     x1, [x29,248]
18609         ldr     w2, [x29,208]
18610         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page]
18611         ldrh    w1, [x1]
18612         msub    w2, w28, w1, w2
18613         cmp     w2, w1
18614         bne     .L2551
18615 .L2524:
18616         ldr     x1, [x29,144]
18617         mov     w2, 0
18618         mov     w0, w28
18619         str     x10, [x29,96]
18620         bl      log2phys
18621         mov     x0, x19
18622         bl      get_new_active_ppa
18623         ldr     x8, [x22, #:got_lo12:g_wr_page_num]
18624         adrp    x4, :got:req_wr_io
18625         mov     w7, 56
18626         str     x4, [x29,120]
18627         str     x8, [x29,104]
18628         ldr     x6, [x4, #:got_lo12:req_wr_io]
18629         ldr     w9, [x8]
18630         str     x7, [x29,112]
18631         ldr     x2, [x6]
18632         umull   x1, w9, w7
18633         str     x6, [x29,128]
18634         add     x2, x2, x1
18635         str     w0, [x2,4]
18636         ldr     x0, [x6]
18637         add     x1, x0, x1
18638         adrp    x0, :got:c_ftl_nand_byte_pre_oob
18639         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
18640         ldrh    w2, [x0]
18641         adrp    x0, :got:p_wr_io_spare_buf
18642         ldr     x0, [x0, #:got_lo12:p_wr_io_spare_buf]
18643         mul     w5, w2, w9
18644         ldr     x0, [x0]
18645         and     x3, x5, 4294967292
18646         adrp    x5, :got:c_ftl_nand_byte_pre_page
18647         str     x0, [x29,176]
18648         add     x27, x0, x3
18649         str     x27, [x1,16]
18650         str     x5, [x29,192]
18651         ldr     x20, [x5, #:got_lo12:c_ftl_nand_byte_pre_page]
18652         str     x3, [x29,184]
18653         ldrh    w0, [x20]
18654         mul     w0, w0, w9
18655         adrp    x9, :got:p_wr_io_data_buf
18656         and     x0, x0, 4294967292
18657         ldr     x9, [x9, #:got_lo12:p_wr_io_data_buf]
18658         str     w28, [x1,24]
18659         ldr     x9, [x9]
18660         add     x0, x9, x0
18661         str     x0, [x1,8]
18662         mov     x0, x27
18663         mov     w1, 0
18664         bl      ftl_memset
18665         cmp     w28, w26
18666         ldr     x4, [x29,120]
18667         cset    w0, eq
18668         str     w0, [x29,216]
18669         ldr     x5, [x29,192]
18670         cbnz    w0, .L2554
18671         ldr     x10, [x29,96]
18672         ldr     x6, [x29,128]
18673         ldr     x7, [x29,112]
18674         ldr     x8, [x29,104]
18675         cbz     w10, .L2525
18676         ldr     x0, [x29,248]
18677         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18678         ldrh    w20, [x0]
18679         ldr     w0, [x29,208]
18680         msub    w20, w28, w20, w0
18681         ldr     w0, [x29,216]
18682         str     w0, [x29,192]
18683         uxth    w20, w20
18684         b       .L2528
18685 .L2554:
18686         ldr     x0, [x29,248]
18687         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18688         ldrh    w20, [x0]
18689         udiv    w0, w23, w20
18690         msub    w0, w0, w20, w23
18691         str     w0, [x29,192]
18692         sub     w20, w20, w0
18693         cmp     w20, w24
18694         csel    w20, w20, w24, ls
18695 .L2528:
18696         ldr     x0, [x29,248]
18697         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18698         ldrh    w0, [x0]
18699         cmp     w20, w0
18700         bne     .L2529
18701         ldr     w0, [x29,216]
18702         mov     x1, x25
18703         cbnz    w0, .L2530
18704         mul     w1, w20, w28
18705         sub     w1, w1, w23
18706         ubfiz   x1, x1, 9, 23
18707         add     x1, x25, x1
18708 .L2530:
18709         ldr     w2, [x29,236]
18710         mov     w0, 56
18711         cbz     w2, .L2531
18712         ldr     x2, [x22, #:got_lo12:g_wr_page_num]
18713         ldr     x4, [x4, #:got_lo12:req_wr_io]
18714         ldr     w2, [x2]
18715         umull   x0, w2, w0
18716         ldr     x2, [x4]
18717         add     x0, x2, x0
18718         str     x1, [x0,8]
18719         b       .L2532
18720 .L2531:
18721         ldr     x2, [x22, #:got_lo12:g_wr_page_num]
18722         ldr     x4, [x4, #:got_lo12:req_wr_io]
18723         ldr     x5, [x5, #:got_lo12:c_ftl_nand_byte_pre_page]
18724         ldr     w2, [x2]
18725         umull   x0, w2, w0
18726         ldr     x2, [x4]
18727         add     x0, x2, x0
18728         ldrh    w2, [x5]
18729         ldr     x0, [x0,8]
18730         b       .L2571
18731 .L2529:
18732         ldr     w0, [x29,260]
18733         cmn     w0, #1
18734         beq     .L2533
18735         ldr     x1, [x29,240]
18736         mov     w2, 56
18737         str     x4, [x29,128]
18738         str     w28, [x1,24]
18739         str     w0, [x1,4]
18740         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18741         ldr     x1, [x4, #:got_lo12:req_wr_io]
18742         ldr     w0, [x0]
18743         ldr     x1, [x1]
18744         umull   x0, w0, w2
18745         ldr     x2, [x29,240]
18746         add     x0, x1, x0
18747         ldr     x1, [x0,8]
18748         ldr     x0, [x0,16]
18749         str     x1, [x2,8]
18750         mov     w1, 1
18751         str     x0, [x2,16]
18752         mov     x0, x2
18753         mov     w2, 0
18754         bl      FlashReadPages
18755         ldr     x0, [x29,240]
18756         ldr     x4, [x29,128]
18757         ldr     w0, [x0]
18758         cmn     w0, #1
18759         bne     .L2534
18760         adrp    x0, :got:g_sys_ext_data
18761         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
18762         ldr     w1, [x0,72]
18763         add     w1, w1, 1
18764         str     w1, [x0,72]
18765         b       .L2536
18766 .L2534:
18767         ldr     w0, [x27,8]
18768         cmp     w0, w28
18769         beq     .L2536
18770         adrp    x0, :got:g_sys_ext_data
18771         mov     w2, w28
18772         str     x4, [x29,128]
18773         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
18774         ldr     w1, [x0,72]
18775         add     w1, w1, 1
18776         str     w1, [x0,72]
18777         ldr     x0, [x29,136]
18778         ldr     w1, [x27,8]
18779         bl      printk
18780         b       .L2570
18781 .L2533:
18782         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18783         mov     w1, 56
18784         ldr     x5, [x5, #:got_lo12:c_ftl_nand_byte_pre_page]
18785         str     x4, [x29,128]
18786         ldr     w0, [x0]
18787         ldrh    w2, [x5]
18788         umull   x0, w0, w1
18789         ldr     x1, [x4, #:got_lo12:req_wr_io]
18790         ldr     x1, [x1]
18791         add     x0, x1, x0
18792         mov     w1, 0
18793         ldr     x0, [x0,8]
18794         bl      ftl_memset
18795 .L2570:
18796         ldr     x4, [x29,128]
18797 .L2536:
18798         ldr     w1, [x29,216]
18799         mov     w0, 56
18800         lsl     w2, w20, 9
18801         cbz     w1, .L2537
18802         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18803         ldr     x4, [x4, #:got_lo12:req_wr_io]
18804         ldr     w5, [x1]
18805         ldr     x4, [x4]
18806         umull   x0, w5, w0
18807         add     x4, x4, x0
18808         ldr     x0, [x29,192]
18809         ubfiz   x0, x0, 9, 23
18810         ldr     x1, [x4,8]
18811         add     x0, x1, x0
18812         mov     x1, x25
18813         b       .L2571
18814 .L2537:
18815         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18816         ldr     x4, [x4, #:got_lo12:req_wr_io]
18817         ldr     w5, [x1]
18818         ldr     x1, [x4]
18819         umull   x0, w5, w0
18820         add     x0, x1, x0
18821         ldr     x1, [x29,248]
18822         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page]
18823         ldr     x0, [x0,8]
18824         ldrh    w1, [x1]
18825         mul     w1, w28, w1
18826         sub     w1, w1, w23
18827         ubfiz   x1, x1, 9, 23
18828         add     x1, x25, x1
18829         b       .L2571
18830 .L2525:
18831         ldr     w0, [x29,236]
18832         ldr     w1, [x8]
18833         cbz     w0, .L2538
18834         umull   x0, w1, w7
18835         ldr     x1, [x6]
18836         add     x1, x1, x0
18837         ldr     x0, [x29,248]
18838         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18839         ldrh    w0, [x0]
18840         mul     w0, w28, w0
18841         sub     w0, w0, w23
18842         ubfiz   x0, x0, 9, 23
18843         add     x0, x25, x0
18844         str     x0, [x1,8]
18845         b       .L2532
18846 .L2538:
18847         umull   x0, w1, w7
18848         ldr     x1, [x6]
18849         ldrh    w2, [x20]
18850         add     x0, x1, x0
18851         ldr     x1, [x29,248]
18852         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page]
18853         ldr     x0, [x0,8]
18854         ldrh    w1, [x1]
18855         mul     w1, w28, w1
18856         sub     w1, w1, w23
18857         ubfiz   x1, x1, 9, 23
18858         add     x1, x25, x1
18859 .L2571:
18860         bl      ftl_memcpy
18861 .L2532:
18862         ldr     x1, [x29,176]
18863         mov     w0, -3947
18864         ldr     x2, [x29,184]
18865         strh    w0, [x1,x2]
18866         adrp    x1, :got:g_GlobalDataVersion
18867         ldr     x1, [x1, #:got_lo12:g_GlobalDataVersion]
18868         str     w28, [x27,8]
18869         ldr     w0, [x1]
18870         str     w0, [x27,4]
18871         add     w0, w0, 1
18872         cmn     w0, #1
18873         csel    w0, w0, wzr, ne
18874         str     w0, [x1]
18875         ldr     w0, [x29,260]
18876         str     w0, [x27,12]
18877         ldrh    w0, [x19]
18878         strh    w0, [x27,2]
18879         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18880         ldr     w0, [x1]
18881         add     w0, w0, 1
18882         str     w0, [x1]
18883         ldr     x0, [x29,224]
18884         add     x0, x0, 1
18885         str     x0, [x29,224]
18886         b       .L2522
18887 .L2573:
18888         str     w28, [x29,232]
18889         mov     x0, x2
18890         b       .L2523
18891 .L2551:
18892         str     w28, [x29,232]
18893 .L2523:
18894         sub     w21, w21, w0
18895         ldr     w0, [x29,236]
18896         cbnz    w0, .L2542
18897         ldr     x0, [x29,160]
18898         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18899         ldr     x0, [x0, #:got_lo12:c_wr_page_buf_num]
18900         ldr     w1, [x1]
18901         ldr     w0, [x0]
18902         cmp     w1, w0
18903         bcs     .L2542
18904         ldrh    w0, [x19,4]
18905         cbz     w0, .L2542
18906 .L2544:
18907         str     wzr, [x29,236]
18908         b       .L2543
18909 .L2542:
18910         bl      FtlCacheWriteBack
18911         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18912         cmp     w21, 3
18913         str     wzr, [x0]
18914         bls     .L2544
18915 .L2543:
18916         bl      rknand_queue_cond_resched
18917         b       .L2515
18918 .L2572:
18919         ldr     w1, [x29,220]
18920         mov     w0, w21
18921         sub     w1, w1, w26
18922         bl      rk_ftl_garbage_collect
18923         mov     w0, w21
18924 .L2509:
18925         ldp     x19, x20, [sp,16]
18926         ldp     x21, x22, [sp,32]
18927         ldp     x23, x24, [sp,48]
18928         ldp     x25, x26, [sp,64]
18929         ldp     x27, x28, [sp,80]
18930         ldp     x29, x30, [sp], 320
18931         ret
18932         .size   FtlWrite, .-FtlWrite
18933         .align  2
18934         .global StorageSysDataStore
18935         .type   StorageSysDataStore, %function
18936 StorageSysDataStore:
18937         stp     x29, x30, [sp, -48]!
18938         add     x29, sp, 0
18939         str     x19, [sp,16]
18940         mov     w19, w0
18941         str     x1, [x29,40]
18942         bl      rknand_device_lock
18943         ldr     x3, [x29,40]
18944         add     w1, w19, 256
18945         mov     w2, 1
18946         mov     w0, 16
18947         bl      FtlWrite
18948         str     x0, [x29,40]
18949         bl      rknand_device_unlock
18950         ldr     x19, [sp,16]
18951         ldr     x0, [x29,40]
18952         ldp     x29, x30, [sp], 48
18953         ret
18954         .size   StorageSysDataStore, .-StorageSysDataStore
18955         .align  2
18956         .type   FlashReadFacBbtData.part.16, %function
18957 FlashReadFacBbtData.part.16:
18958         stp     x29, x30, [sp, -32]!
18959         mov     w3, 0
18960         adrp    x4, :got:gFlashPageBuffer0
18961         add     x29, sp, 0
18962         str     x19, [sp,16]
18963         mov     x19, x0
18964         cbnz    w1, .L2578
18965         adrp    x1, :got:gNandFlashIdbBlockAddr
18966         mov     w7, 1
18967 .L2581:
18968         ldr     x0, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
18969         ldr     w0, [x0]
18970         cmp     w3, w0
18971         bcs     .L2578
18972         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
18973         ubfx    x5, x3, 5, 11
18974         lsl     x5, x5, 2
18975         lsl     w6, w7, w3
18976         add     w3, w3, 1
18977         ldr     x0, [x0]
18978         uxth    w3, w3
18979         ldr     w8, [x0,x5]
18980         orr     w6, w8, w6
18981         str     w6, [x0,x5]
18982         b       .L2581
18983 .L2578:
18984         ldr     x4, [x4, #:got_lo12:gFlashPageBuffer0]
18985         mov     x0, x19
18986         ldr     x1, [x4]
18987         bl      ftl_memcpy
18988         mov     w2, 4
18989         adrp    x0, .LC119
18990         mov     x1, x19
18991         add     x0, x0, :lo12:.LC119
18992         mov     w3, w2
18993         bl      rknand_print_hex
18994         ldr     x19, [sp,16]
18995         mov     w0, 0
18996         ldp     x29, x30, [sp], 32
18997         ret
18998         .size   FlashReadFacBbtData.part.16, .-FlashReadFacBbtData.part.16
18999         .align  2
19000         .global FlashReadFacBbtData
19001         .type   FlashReadFacBbtData, %function
19002 FlashReadFacBbtData:
19003         adrp    x4, :got:gNandPhyInfo
19004         stp     x29, x30, [sp, -160]!
19005         add     x29, sp, 0
19006         ldr     x4, [x4, #:got_lo12:gNandPhyInfo]
19007         stp     x19, x20, [sp,16]
19008         stp     x21, x22, [sp,32]
19009         stp     x23, x24, [sp,48]
19010         stp     x25, x26, [sp,64]
19011         str     x27, [sp,80]
19012         mov     x22, x0
19013         mov     w24, w1
19014         mov     w26, w2
19015         ldrh    w0, [x4,14]
19016         add     x23, x29, 104
19017         ldrh    w3, [x4,12]
19018         adrp    x4, :got:gFlashSpareBuffer
19019         mov     x21, x4
19020         mov     w27, 61664
19021         mul     w3, w3, w0
19022         adrp    x0, :got:gFlashPageBuffer0
19023         uxth    w3, w3
19024         ldr     x0, [x0, #:got_lo12:gFlashPageBuffer0]
19025         sub     w20, w3, #1
19026         mul     w25, w1, w3
19027         uxth    w20, w20
19028         sub     w19, w3, #16
19029         ldr     x0, [x0]
19030         str     x0, [x29,112]
19031         ldr     x0, [x4, #:got_lo12:gFlashSpareBuffer]
19032         ldr     x0, [x0]
19033         str     x0, [x29,120]
19034 .L2583:
19035         cmp     w20, w19
19036         ble     .L2591
19037         add     w0, w20, w25
19038         mov     w1, 1
19039         lsl     w0, w0, 10
19040         mov     w2, w1
19041         str     w0, [x23,4]
19042         mov     x0, x23
19043         bl      FlashReadPages
19044         ldr     w0, [x23]
19045         cmn     w0, #1
19046         beq     .L2584
19047         ldr     x0, [x21, #:got_lo12:gFlashSpareBuffer]
19048         ldr     x0, [x0]
19049         ldrh    w0, [x0]
19050         cmp     w0, w27
19051         bne     .L2584
19052         mov     w0, w22
19053         cbz     x22, .L2585
19054         mov     x0, x22
19055         mov     w1, w24
19056         mov     w2, w26
19057         bl      FlashReadFacBbtData.part.16
19058         b       .L2585
19059 .L2584:
19060         sub     w20, w20, #1
19061         uxth    w20, w20
19062         b       .L2583
19063 .L2591:
19064         mov     w0, -1
19065 .L2585:
19066         ldp     x19, x20, [sp,16]
19067         ldp     x21, x22, [sp,32]
19068         ldp     x23, x24, [sp,48]
19069         ldp     x25, x26, [sp,64]
19070         ldr     x27, [sp,80]
19071         ldp     x29, x30, [sp], 160
19072         ret
19073         .size   FlashReadFacBbtData, .-FlashReadFacBbtData
19074         .align  2
19075         .global FlashGetBadBlockList
19076         .type   FlashGetBadBlockList, %function
19077 FlashGetBadBlockList:
19078         adrp    x2, :got:gpNandParaInfo
19079         stp     x29, x30, [sp, -48]!
19080         add     x29, sp, 0
19081         ldr     x2, [x2, #:got_lo12:gpNandParaInfo]
19082         stp     x19, x20, [sp,16]
19083         str     x21, [sp,32]
19084         mov     x21, x0
19085         adrp    x20, :got:gFlashPageBuffer1
19086         ldr     x0, [x2]
19087         ldrb    w2, [x0,13]
19088         ldrh    w19, [x0,14]
19089         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer1]
19090         mul     w19, w2, w19
19091         ldr     x0, [x0]
19092         uxth    w19, w19
19093         add     w2, w19, 7
19094         lsr     w2, w2, 3
19095         bl      FlashReadFacBbtData
19096         cmn     w0, #1
19097         bne     .L2593
19098 .L2597:
19099         mov     w1, 0
19100         b       .L2594
19101 .L2593:
19102         mov     w2, 0
19103         lsr     w0, w19, 4
19104         mov     w1, w2
19105         sub     w19, w19, #1
19106         mov     w5, 1
19107 .L2595:
19108         cmp     w2, w19
19109         bge     .L2594
19110         ldr     x3, [x20, #:got_lo12:gFlashPageBuffer1]
19111         ubfx    x4, x2, 5, 11
19112         ldr     x6, [x3]
19113         lsl     w3, w5, w2
19114         ldr     w4, [x6,x4,lsl 2]
19115         tst     w3, w4
19116         beq     .L2596
19117         add     w3, w1, 1
19118         ubfiz   x1, x1, 1, 16
19119         strh    w2, [x21,x1]
19120         uxth    w1, w3
19121 .L2596:
19122         cmp     w1, w0
19123         bcs     .L2597
19124         add     w2, w2, 1
19125         uxth    w2, w2
19126         b       .L2595
19127 .L2594:
19128         ubfiz   x1, x1, 1, 16
19129         mov     w0, -1
19130         ldp     x19, x20, [sp,16]
19131         strh    w0, [x21,x1]
19132         mov     w0, 0
19133         ldr     x21, [sp,32]
19134         ldp     x29, x30, [sp], 48
19135         ret
19136         .size   FlashGetBadBlockList, .-FlashGetBadBlockList
19137         .align  2
19138         .global FtlMakeBbt
19139         .type   FtlMakeBbt, %function
19140 FtlMakeBbt:
19141         stp     x29, x30, [sp, -96]!
19142         add     x29, sp, 0
19143         stp     x19, x20, [sp,16]
19144         adrp    x19, :got:gBbtInfo
19145         stp     x21, x22, [sp,32]
19146         stp     x23, x24, [sp,48]
19147         stp     x25, x26, [sp,64]
19148         stp     x27, x28, [sp,80]
19149         bl      FtlBbtMemInit
19150         mov     w21, 0
19151         bl      FtlLoadFactoryBbt
19152         ldr     x22, [x19, #:got_lo12:gBbtInfo]
19153         adrp    x25, :got:c_ftl_nand_blks_per_die
19154         mov     x23, x22
19155 .L2603:
19156         adrp    x0, :got:c_ftl_nand_die_num
19157         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
19158         ldrh    w0, [x0]
19159         cmp     w21, w0
19160         bcs     .L2621
19161         adrp    x0, :got:p_sys_data_buf
19162         adrp    x1, :got:req_sys
19163         ldrh    w26, [x23,12]
19164         ldr     x0, [x0, #:got_lo12:p_sys_data_buf]
19165         ldr     x20, [x1, #:got_lo12:req_sys]
19166         adrp    x1, :got:p_sys_spare_buf
19167         ldr     x0, [x0]
19168         str     x0, [x20,8]
19169         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
19170         ldr     x24, [x1]
19171         mov     w1, 65535
19172         str     x24, [x20,16]
19173         cmp     w26, w1
19174         beq     .L2604
19175         ldr     x24, [x25, #:got_lo12:c_ftl_nand_blks_per_die]
19176         ldrh    w1, [x24]
19177         madd    w26, w21, w1, w26
19178         mov     w1, 1
19179         lsl     w0, w26, 10
19180         mov     w2, w1
19181         str     w0, [x20,4]
19182         mov     x0, x20
19183         bl      FlashReadPages
19184         ldrh    w2, [x24]
19185         ldr     x0, [x22,32]
19186         add     w2, w2, 7
19187         ldr     x1, [x20,8]
19188         lsr     w2, w2, 3
19189         bl      ftl_memcpy
19190         b       .L2605
19191 .L2604:
19192         mov     w1, w21
19193         adrp    x28, :got:c_ftl_nand_bbm_buf_size
19194         bl      FlashGetBadBlockList
19195         ldr     x0, [x20,8]
19196         ldr     x1, [x22,32]
19197         bl      FtlBbt2Bitmap
19198         ldr     x0, [x25, #:got_lo12:c_ftl_nand_blks_per_die]
19199         ldrh    w20, [x0]
19200         sub     w20, w20, #1
19201         uxth    w20, w20
19202 .L2606:
19203         ldr     x26, [x25, #:got_lo12:c_ftl_nand_blks_per_die]
19204         ldrh    w0, [x26]
19205         madd    w0, w21, w0, w20
19206         bl      FtlBbmIsBadBlock
19207         cmp     w0, 1
19208         bne     .L2622
19209         sub     w20, w20, #1
19210         uxth    w20, w20
19211         b       .L2606
19212 .L2622:
19213         adrp    x0, :got:p_sys_spare_buf
19214         strh    w20, [x23,12]
19215         mov     w1, 0
19216         mov     w2, 16
19217         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
19218         ldr     x0, [x0]
19219         bl      ftl_memset
19220         str     wzr, [x24,4]
19221         mov     w0, -3872
19222         strh    w0, [x24]
19223         ldrh    w0, [x23,12]
19224         strh    w0, [x24,2]
19225         ldrh    w0, [x26]
19226         ldrh    w1, [x23,12]
19227         madd    w26, w21, w0, w1
19228         adrp    x0, :got:req_sys
19229         ldr     x1, [x22,32]
19230         ldr     x27, [x0, #:got_lo12:req_sys]
19231         lsl     w0, w26, 10
19232         str     w0, [x27,4]
19233         ldr     x0, [x28, #:got_lo12:c_ftl_nand_bbm_buf_size]
19234         ldrh    w2, [x0]
19235         ldr     x0, [x27,8]
19236         lsl     w2, w2, 2
19237         bl      ftl_memcpy
19238         mov     w1, 1
19239         mov     x0, x27
19240         bl      FlashEraseBlocks
19241         mov     w1, 1
19242         mov     x0, x27
19243         mov     w2, w1
19244         mov     w3, w1
19245         bl      FlashProgPages
19246         ldr     w0, [x27]
19247         cmn     w0, #1
19248         bne     .L2605
19249         mov     w0, w26
19250         bl      FtlBbmMapBadBlock
19251         b       .L2606
19252 .L2605:
19253         mov     w0, w26
19254         add     w21, w21, 1
19255         add     x22, x22, 8
19256         add     x23, x23, 2
19257         bl      FtlBbmMapBadBlock
19258         b       .L2603
19259 .L2621:
19260         mov     w20, 0
19261         adrp    x21, :got:c_ftl_nand_reserved_blks
19262 .L2610:
19263         ldr     x0, [x21, #:got_lo12:c_ftl_nand_reserved_blks]
19264         ldrh    w0, [x0]
19265         cmp     w0, w20
19266         bls     .L2623
19267         mov     w0, w20
19268         add     w20, w20, 1
19269         bl      FtlBbmMapBadBlock
19270         uxth    w20, w20
19271         b       .L2610
19272 .L2623:
19273         ldr     x0, [x19, #:got_lo12:gBbtInfo]
19274         mov     w22, 65535
19275         ldrh    w20, [x0,12]
19276         sub     w20, w20, #1
19277         uxth    w20, w20
19278 .L2612:
19279         ldr     x21, [x19, #:got_lo12:gBbtInfo]
19280         ldrh    w0, [x21,12]
19281         sub     w0, w0, #48
19282         cmp     w20, w0
19283         ble     .L2616
19284         mov     w0, w20
19285         bl      FtlBbmIsBadBlock
19286         cmp     w0, 1
19287         beq     .L2613
19288         mov     w0, w20
19289         bl      FlashTestBlk
19290         cbz     w0, .L2614
19291         mov     w0, w20
19292         bl      FtlBbmMapBadBlock
19293         b       .L2613
19294 .L2614:
19295         ldrh    w0, [x21]
19296         cmp     w0, w22
19297         bne     .L2615
19298         strh    w20, [x21]
19299         b       .L2613
19300 .L2615:
19301         strh    w20, [x21,4]
19302         b       .L2616
19303 .L2613:
19304         sub     w20, w20, #1
19305         uxth    w20, w20
19306         b       .L2612
19307 .L2616:
19308         ldr     x19, [x19, #:got_lo12:gBbtInfo]
19309         adrp    x0, :got:req_erase
19310         str     wzr, [x19,8]
19311         strh    wzr, [x19,2]
19312         ldrh    w1, [x19]
19313         ldr     x0, [x0, #:got_lo12:req_erase]
19314         lsl     w1, w1, 10
19315         ldr     x2, [x0]
19316         str     w1, [x2,4]
19317         ldrh    w1, [x19,4]
19318         ldr     x0, [x0]
19319         lsl     w1, w1, 10
19320         str     w1, [x0,60]
19321         mov     w1, 2
19322         bl      FlashEraseBlocks
19323         ldrh    w0, [x19]
19324         bl      FtlBbmMapBadBlock
19325         ldrh    w0, [x19,4]
19326         bl      FtlBbmMapBadBlock
19327         bl      FtlBbmTblFlush
19328         strh    wzr, [x19,2]
19329         ldr     w0, [x19,8]
19330         ldrh    w1, [x19,4]
19331         add     w0, w0, 1
19332         str     w0, [x19,8]
19333         ldrh    w0, [x19]
19334         strh    w0, [x19,4]
19335         strh    w1, [x19]
19336         bl      FtlBbmTblFlush
19337         mov     w0, 0
19338         ldp     x19, x20, [sp,16]
19339         ldp     x21, x22, [sp,32]
19340         ldp     x23, x24, [sp,48]
19341         ldp     x25, x26, [sp,64]
19342         ldp     x27, x28, [sp,80]
19343         ldp     x29, x30, [sp], 96
19344         ret
19345         .size   FtlMakeBbt, .-FtlMakeBbt
19346         .align  2
19347         .global FtlLowFormat
19348         .type   FtlLowFormat, %function
19349 FtlLowFormat:
19350         stp     x29, x30, [sp, -80]!
19351         add     x29, sp, 0
19352         stp     x19, x20, [sp,16]
19353         adrp    x19, :got:g_GlobalSysVersion
19354         str     x25, [sp,64]
19355         stp     x23, x24, [sp,48]
19356         stp     x21, x22, [sp,32]
19357         ldr     x0, [x19, #:got_lo12:g_GlobalSysVersion]
19358         adrp    x23, :got:c_ftl_nand_max_sys_blks
19359         str     wzr, [x0]
19360         adrp    x0, :got:g_GlobalDataVersion
19361         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
19362         str     wzr, [x0]
19363         ldr     x0, [x23, #:got_lo12:c_ftl_nand_max_sys_blks]
19364         ldrh    w0, [x0]
19365         bl      FtlFreeSysBlkQueueInit
19366         bl      FtlLoadBbt
19367         cbz     w0, .L2625
19368         bl      FtlMakeBbt
19369 .L2625:
19370         mov     w0, 0
19371         adrp    x3, :got:c_ftl_nand_sec_pre_page
19372         adrp    x4, :got:p_io_data_buf_0
19373         adrp    x5, :got:p_io_data_buf_1
19374 .L2626:
19375         ldr     x1, [x3, #:got_lo12:c_ftl_nand_sec_pre_page]
19376         ldrh    w1, [x1]
19377         cmp     w0, w1, lsl 7
19378         bge     .L2649
19379         ldr     x1, [x4, #:got_lo12:p_io_data_buf_0]
19380         ubfiz   x2, x0, 2, 16
19381         ldr     x6, [x1]
19382         mvn     w1, w0
19383         orr     w1, w0, w1, lsl 16
19384         add     w0, w0, 1
19385         str     w1, [x6,x2]
19386         uxth    w0, w0
19387         ldr     x1, [x5, #:got_lo12:p_io_data_buf_1]
19388         ldr     x6, [x1]
19389         mov     w1, 23752
19390         movk    w1, 0xa0f, lsl 16
19391         str     w1, [x6,x2]
19392         b       .L2626
19393 .L2649:
19394         adrp    x24, :got:c_ftl_nand_data_blks_per_plane
19395         mov     w21, 0
19396         adrp    x25, :got:c_ftl_nand_blk_pre_plane
19397         ldr     x0, [x24, #:got_lo12:c_ftl_nand_data_blks_per_plane]
19398         ldrh    w22, [x0]
19399 .L2628:
19400         ldr     x0, [x25, #:got_lo12:c_ftl_nand_blk_pre_plane]
19401         adrp    x20, :got:c_ftl_nand_blk_pre_plane
19402         ldrh    w0, [x0]
19403         cmp     w0, w22
19404         bls     .L2650
19405         mov     w0, w22
19406         mov     w1, 1
19407         add     w22, w22, 1
19408         bl      FtlLowFormatEraseBlock
19409         add     w0, w21, w0
19410         uxth    w22, w22
19411         uxth    w21, w0
19412         b       .L2628
19413 .L2650:
19414         adrp    x22, :got:c_ftl_nand_planes_num
19415         sub     w1, w21, #3
19416         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
19417         ldrh    w0, [x0]
19418         cmp     w1, w0, lsl 1
19419         bge     .L2630
19420 .L2634:
19421         mov     w21, 0
19422         mov     w23, w21
19423         b       .L2631
19424 .L2630:
19425         udiv    w21, w21, w0
19426         adrp    x0, :got:c_ftl_nand_init_sys_blks_per_plane
19427         ldr     x0, [x0, #:got_lo12:c_ftl_nand_init_sys_blks_per_plane]
19428         ldr     w0, [x0]
19429         add     w0, w21, w0
19430         bl      FtlSysBlkNumInit
19431         ldr     x23, [x23, #:got_lo12:c_ftl_nand_max_sys_blks]
19432         ldrh    w0, [x23]
19433         bl      FtlFreeSysBlkQueueInit
19434         ldr     x0, [x24, #:got_lo12:c_ftl_nand_data_blks_per_plane]
19435         ldrh    w21, [x0]
19436 .L2632:
19437         ldr     x0, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
19438         ldrh    w0, [x0]
19439         cmp     w0, w21
19440         bls     .L2634
19441         mov     w0, w21
19442         mov     w1, 1
19443         add     w21, w21, 1
19444         bl      FtlLowFormatEraseBlock
19445         uxth    w21, w21
19446         b       .L2632
19447 .L2631:
19448         ldr     x0, [x24, #:got_lo12:c_ftl_nand_data_blks_per_plane]
19449         ldrh    w0, [x0]
19450         cmp     w0, w23
19451         bls     .L2651
19452         mov     w0, w23
19453         mov     w1, 0
19454         add     w23, w23, 1
19455         bl      FtlLowFormatEraseBlock
19456         add     w0, w21, w0
19457         uxth    w23, w23
19458         uxth    w21, w0
19459         b       .L2631
19460 .L2651:
19461         adrp    x0, :got:g_cur_erase_blk
19462         ldr     x1, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
19463         adrp    x2, :got:g_MaxLpn
19464         adrp    x5, :got:c_ftl_nand_data_op_blks_per_plane
19465         ldr     x0, [x0, #:got_lo12:g_cur_erase_blk]
19466         ldrh    w1, [x1]
19467         str     w1, [x0]
19468         adrp    x0, :got:c_ftl_nand_max_data_blks
19469         ldr     x22, [x22, #:got_lo12:c_ftl_nand_planes_num]
19470         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_data_blks]
19471         ldr     x8, [x2, #:got_lo12:g_MaxLpn]
19472         ldrh    w6, [x22]
19473         ldr     w1, [x0]
19474         udiv    w0, w1, w6
19475         str     w0, [x8]
19476         ubfx    x7, x0, 5, 16
19477         ldr     x4, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19478         add     w3, w7, 36
19479         strh    w3, [x4]
19480         mov     w3, 24
19481         mul     w3, w6, w3
19482         cmp     w21, w3
19483         ble     .L2636
19484         sub     w1, w1, w21
19485         udiv    w1, w1, w6
19486         str     w1, [x8]
19487         lsr     w1, w1, 5
19488         add     w1, w1, 24
19489         strh    w1, [x4]
19490 .L2636:
19491         adrp    x3, :got:g_inkDie_check_enable
19492         ldr     x3, [x3, #:got_lo12:g_inkDie_check_enable]
19493         ldr     w1, [x3]
19494         cmp     w1, 1
19495         bne     .L2637
19496         ldr     x1, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19497         udiv    w3, w21, w6
19498         ldrh    w4, [x1]
19499         add     w3, w4, w3
19500         add     w3, w4, w3, asr 2
19501         strh    w3, [x1]
19502 .L2637:
19503         adrp    x3, :got:c_ftl_nand_ext_blk_pre_plane
19504         ldr     x3, [x3, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
19505         ldrh    w1, [x3]
19506         cbz     w1, .L2639
19507         ldr     x3, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19508         ldrh    w4, [x3]
19509         add     w4, w4, w1, lsr 1
19510         strh    w4, [x3]
19511         mul     w4, w1, w6
19512         cmp     w4, w21
19513         ble     .L2639
19514         ldr     x4, [x2, #:got_lo12:g_MaxLpn]
19515         add     w1, w1, 32
19516         add     w1, w7, w1
19517         strh    w1, [x3]
19518         str     w0, [x4]
19519 .L2639:
19520         ldr     x1, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19521         adrp    x22, :got:g_MaxLbn
19522         ldr     x2, [x2, #:got_lo12:g_MaxLpn]
19523         adrp    x21, :got:p_valid_page_count_table
19524         ldrh    w0, [x1]
19525         ldr     w1, [x2]
19526         sub     w0, w1, w0
19527         ldr     x1, [x22, #:got_lo12:g_MaxLbn]
19528         mul     w0, w0, w6
19529         str     w0, [x1]
19530         adrp    x1, :got:c_ftl_nand_page_pre_blk
19531         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
19532         ldrh    w1, [x1]
19533         mul     w0, w0, w1
19534         str     w0, [x2]
19535         adrp    x2, :got:c_ftl_nand_sec_pre_page
19536         adrp    x1, :got:g_MaxLbaSector
19537         ldr     x2, [x2, #:got_lo12:c_ftl_nand_sec_pre_page]
19538         ldr     x1, [x1, #:got_lo12:g_MaxLbaSector]
19539         ldrh    w2, [x2]
19540         mul     w0, w0, w2
19541         str     w0, [x1]
19542         bl      FtlBbmTblFlush
19543         ldr     x0, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
19544         mov     x20, x21
19545         ldr     x1, [x21, #:got_lo12:p_valid_page_count_table]
19546         ldrh    w2, [x0]
19547         ldr     x0, [x1]
19548         mov     w1, 0
19549         lsl     w2, w2, 1
19550         bl      ftl_memset
19551         adrp    x0, :got:g_VaildLpn
19552         mov     w1, -1
19553         mov     w23, w1
19554         ldr     x0, [x0, #:got_lo12:g_VaildLpn]
19555         str     wzr, [x0]
19556         adrp    x0, :got:g_gc_superblock
19557         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
19558         strh    w1, [x0]
19559         strh    wzr, [x0,2]
19560         strb    wzr, [x0,6]
19561         strb    wzr, [x0,8]
19562         adrp    x0, :got:g_active_superblock
19563         mov     x24, x0
19564         ldr     x2, [x0, #:got_lo12:g_active_superblock]
19565         strh    wzr, [x2,2]
19566         strb    wzr, [x2,6]
19567         strh    wzr, [x2]
19568         strb    wzr, [x2,8]
19569 .L2641:
19570         ldr     x21, [x24, #:got_lo12:g_active_superblock]
19571         mov     x0, x21
19572         bl      make_superblock
19573         ldrb    w0, [x21,7]
19574         cbnz    w0, .L2642
19575         ldr     x0, [x20, #:got_lo12:p_valid_page_count_table]
19576         ldrh    w1, [x21]
19577         ldr     x0, [x0]
19578         strh    w23, [x0,x1,lsl 1]
19579         ldrh    w0, [x21]
19580         add     w0, w0, 1
19581         strh    w0, [x21]
19582         b       .L2641
19583 .L2642:
19584         ldr     x1, [x19, #:got_lo12:g_GlobalSysVersion]
19585         mov     w24, -1
19586         ldrh    w2, [x21,4]
19587         ldr     w0, [x1]
19588         str     w0, [x21,12]
19589         add     w0, w0, 1
19590         str     w0, [x1]
19591         ldrh    w1, [x21]
19592         ldr     x0, [x20, #:got_lo12:p_valid_page_count_table]
19593         ldr     x0, [x0]
19594         strh    w2, [x0,x1,lsl 1]
19595         adrp    x0, :got:g_buffer_superblock
19596         mov     x23, x0
19597         ldrh    w2, [x21]
19598         ldr     x1, [x0, #:got_lo12:g_buffer_superblock]
19599         add     w2, w2, 1
19600         strh    wzr, [x1,2]
19601         strh    w2, [x1]
19602         mov     w2, 1
19603         strb    wzr, [x1,6]
19604         strb    w2, [x1,8]
19605 .L2643:
19606         ldr     x21, [x23, #:got_lo12:g_buffer_superblock]
19607         mov     x0, x21
19608         bl      make_superblock
19609         ldrb    w0, [x21,7]
19610         cbnz    w0, .L2644
19611         ldr     x0, [x20, #:got_lo12:p_valid_page_count_table]
19612         ldrh    w1, [x21]
19613         ldr     x0, [x0]
19614         strh    w24, [x0,x1,lsl 1]
19615         ldrh    w0, [x21]
19616         add     w0, w0, 1
19617         strh    w0, [x21]
19618         b       .L2643
19619 .L2644:
19620         ldr     x19, [x19, #:got_lo12:g_GlobalSysVersion]
19621         ldrh    w1, [x21]
19622         ldrh    w2, [x21,4]
19623         ldr     w0, [x19]
19624         str     w0, [x21,12]
19625         add     w0, w0, 1
19626         str     w0, [x19]
19627         ldr     x20, [x20, #:got_lo12:p_valid_page_count_table]
19628         ldr     x0, [x20]
19629         mov     w20, -1
19630         strh    w2, [x0,x1,lsl 1]
19631         adrp    x0, :got:g_gc_temp_superblock
19632         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
19633         strh    w20, [x0]
19634         bl      FtlFreeSysBlkQueueOut
19635         adrp    x1, :got:gSysInfo
19636         ldr     x1, [x1, #:got_lo12:gSysInfo]
19637         strh    w0, [x1]
19638         strh    wzr, [x1,2]
19639         strh    w20, [x1,4]
19640         ldr     x22, [x22, #:got_lo12:g_MaxLbn]
19641         ldr     w0, [x22]
19642         strh    w0, [x1,6]
19643         ldr     w0, [x19]
19644         str     w0, [x1,8]
19645         add     w0, w0, 1
19646         str     w0, [x19]
19647         bl      FtlVpcTblFlush
19648         bl      FtlSysBlkInit
19649         cbnz    w0, .L2645
19650         adrp    x0, :got:gFtlInitStatus
19651         mov     w1, 1
19652         ldr     x0, [x0, #:got_lo12:gFtlInitStatus]
19653         str     w1, [x0]
19654 .L2645:
19655         mov     w0, 0
19656         ldr     x25, [sp,64]
19657         ldp     x19, x20, [sp,16]
19658         ldp     x21, x22, [sp,32]
19659         ldp     x23, x24, [sp,48]
19660         ldp     x29, x30, [sp], 80
19661         ret
19662         .size   FtlLowFormat, .-FtlLowFormat
19663         .align  2
19664         .global FtlReInitForSDUpdata
19665         .type   FtlReInitForSDUpdata, %function
19666 FtlReInitForSDUpdata:
19667         adrp    x0, :got:RK29_NANDC_REG_BASE
19668         stp     x29, x30, [sp, -48]!
19669         add     x29, sp, 0
19670         ldr     x0, [x0, #:got_lo12:RK29_NANDC_REG_BASE]
19671         str     x19, [sp,16]
19672         ldr     x0, [x0]
19673         bl      FlashInit
19674         mov     w1, 0
19675         cbnz    w0, .L2653
19676         bl      FlashLoadFactorBbt
19677         cbz     w0, .L2654
19678         bl      FlashMakeFactorBbt
19679 .L2654:
19680         adrp    x0, :got:gFlashPageBuffer1
19681         ldr     x0, [x0, #:got_lo12:gFlashPageBuffer1]
19682         ldr     x0, [x0]
19683         bl      FlashReadIdbDataRaw
19684         cbz     w0, .L2655
19685         mov     w1, 0
19686         mov     w2, 16
19687         add     x0, x29, 32
19688         bl      FlashReadFacBbtData
19689         mov     w0, 0
19690         ldr     w2, [x29,32]
19691         mov     w1, w0
19692         mov     w4, 1
19693 .L2657:
19694         lsl     w3, w4, w1
19695         add     w1, w1, 1
19696         tst     w3, w2
19697         cset    w3, ne
19698         cmp     w1, 16
19699         add     w0, w0, w3
19700         bne     .L2657
19701         cmp     w0, 6
19702         bhi     .L2658
19703         adrp    x0, :got:gNandIDBResBlkNum
19704         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
19705         b       .L2682
19706 .L2658:
19707         mov     w1, 0
19708         mov     w4, 1
19709 .L2661:
19710         lsl     w3, w4, w1
19711         add     w1, w1, 1
19712         tst     w3, w2
19713         cset    w3, ne
19714         cmp     w1, 24
19715         add     w0, w0, w3
19716         bne     .L2661
19717         cmp     w0, 17
19718         adrp    x0, :got:gNandIDBResBlkNum
19719         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
19720         bls     .L2682
19721         mov     w1, 36
19722 .L2682:
19723         strb    w1, [x0]
19724         adrp    x1, :got:gNandIDBResBlkNum
19725         adrp    x0, :got:gNandPhyInfo
19726         ldr     x1, [x1, #:got_lo12:gNandIDBResBlkNum]
19727         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
19728         ldrb    w1, [x1]
19729         strh    w1, [x0,26]
19730 .L2655:
19731         adrp    x0, .LC72
19732         adrp    x1, .LC73
19733         add     x1, x1, :lo12:.LC73
19734         add     x0, x0, :lo12:.LC72
19735         mov     w19, 1
19736         bl      printk
19737         adrp    x0, :got:gNandPhyInfo
19738         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
19739         bl      FtlConstantsInit
19740         bl      FtlVariablesInit
19741         adrp    x0, :got:c_ftl_nand_max_sys_blks
19742         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_sys_blks]
19743         ldrh    w0, [x0]
19744         bl      FtlFreeSysBlkQueueInit
19745 .L2663:
19746         bl      FtlLoadBbt
19747         cbz     w0, .L2664
19748 .L2684:
19749         bl      FtlLowFormat
19750         cmp     w19, 3
19751         bhi     .L2685
19752         add     w19, w19, 1
19753         b       .L2663
19754 .L2685:
19755         mov     w1, -1
19756         b       .L2653
19757 .L2664:
19758         bl      FtlSysBlkInit
19759         cbnz    w0, .L2684
19760         adrp    x1, :got:gFtlInitStatus
19761         mov     w2, 1
19762         ldr     x1, [x1, #:got_lo12:gFtlInitStatus]
19763         str     w2, [x1]
19764         mov     w1, w0
19765 .L2653:
19766         mov     w0, w1
19767         ldr     x19, [sp,16]
19768         ldp     x29, x30, [sp], 48
19769         ret
19770         .size   FtlReInitForSDUpdata, .-FtlReInitForSDUpdata
19771         .align  2
19772         .global IdBlockReadData
19773         .type   IdBlockReadData, %function
19774 IdBlockReadData:
19775         stp     x29, x30, [sp, -176]!
19776         add     x29, sp, 0
19777         stp     x19, x20, [sp,16]
19778         stp     x23, x24, [sp,48]
19779         mov     w20, w0
19780         adrp    x23, :got:gpNandParaInfo
19781         adrp    x0, :got:gBlockPageAlignSize
19782         stp     x21, x22, [sp,32]
19783         ldr     x21, [x23, #:got_lo12:gpNandParaInfo]
19784         mov     x22, x2
19785         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
19786         stp     x27, x28, [sp,80]
19787         stp     x25, x26, [sp,64]
19788         mov     w27, w1
19789         mov     w1, w20
19790         ldr     w3, [x0]
19791         mov     w2, w27
19792         ldr     x0, [x21]
19793         mov     x26, x23
19794         ldrb    w19, [x0,9]
19795         adrp    x0, .LC120
19796         add     x0, x0, :lo12:.LC120
19797         mul     w19, w3, w19
19798         bl      printk
19799         ldr     x0, [x21]
19800         mov     w5, 4
19801         uxth    w19, w19
19802         mov     w21, 0
19803         adrp    x6, :got:slcPageToMlcPageTbl
19804         adrp    x7, :got:gFlashPageBuffer1
19805         ldrb    w28, [x0,9]
19806         adrp    x8, :got:gNandFlashEccBits
19807         udiv    w0, w20, w19
19808         adrp    x9, :got:gNandFlashIDBEccBits
19809         msub    w19, w0, w19, w20
19810         sub     w4, w20, w19
19811         mul     w3, w19, w28
19812         ubfx    x3, x3, 2, 2
19813 .L2687:
19814         cmp     w21, w27
19815         bcs     .L2689
19816         add     w0, w21, w19
19817         ldr     x1, [x6, #:got_lo12:slcPageToMlcPageTbl]
19818         ubfx    x0, x0, 2, 16
19819         ldr     x25, [x7, #:got_lo12:gFlashPageBuffer1]
19820         sub     w23, w5, w3
19821         add     w3, w3, w4
19822         str     x5, [x29,104]
19823         ldrh    w24, [x1,w0,sxtw 1]
19824         uxth    w23, w23
19825         ldr     x0, [x26, #:got_lo12:gpNandParaInfo]
19826         ldr     x2, [x25]
19827         str     x4, [x29,112]
19828         ldr     x0, [x0]
19829         str     x6, [x29,120]
19830         str     x7, [x29,128]
19831         ldrb    w1, [x0,9]
19832         ldr     x0, [x8, #:got_lo12:gNandFlashEccBits]
19833         str     x8, [x29,152]
19834         str     x9, [x29,168]
19835         ldrb    w10, [x0]
19836         ldr     x0, [x9, #:got_lo12:gNandFlashIDBEccBits]
19837         madd    w24, w24, w28, w3
19838         str     x10, [x29,160]
19839         ldrb    w0, [x0]
19840         str     x2, [x29,136]
19841         str     x1, [x29,144]
19842         bl      FlashBchSel
19843         ldr     x1, [x29,144]
19844         mov     x3, 0
19845         ldr     x2, [x29,136]
19846         mov     w0, 0
19847         udiv    w1, w24, w1
19848         bl      FlashReadPage
19849         ldr     x10, [x29,160]
19850         mov     w0, w10
19851         bl      FlashBchSel
19852         ubfiz   x0, x21, 9, 16
19853         ldr     x1, [x25]
19854         add     x0, x22, x0
19855         mov     w2, 2048
19856         add     w21, w23, w21
19857         bl      ftl_memcpy
19858         uxth    w21, w21
19859         mov     w3, 0
19860         ldr     x5, [x29,104]
19861         ldr     x4, [x29,112]
19862         ldr     x6, [x29,120]
19863         ldr     x7, [x29,128]
19864         ldr     x8, [x29,152]
19865         ldr     x9, [x29,168]
19866         b       .L2687
19867 .L2689:
19868         adrp    x0, .LC121
19869         mov     w1, w20
19870         mov     w2, w27
19871         mov     w3, 0
19872         add     x0, x0, :lo12:.LC121
19873         bl      printk
19874         mov     w0, 0
19875         ldp     x19, x20, [sp,16]
19876         ldp     x21, x22, [sp,32]
19877         ldp     x23, x24, [sp,48]
19878         ldp     x25, x26, [sp,64]
19879         ldp     x27, x28, [sp,80]
19880         ldp     x29, x30, [sp], 176
19881         ret
19882         .size   IdBlockReadData, .-IdBlockReadData
19883         .align  2
19884         .global IDBlockWriteData
19885         .type   IDBlockWriteData, %function
19886 IDBlockWriteData:
19887         stp     x29, x30, [sp, -224]!
19888         add     x29, sp, 0
19889         stp     x21, x22, [sp,32]
19890         stp     x25, x26, [sp,64]
19891         adrp    x21, :got:gpNandParaInfo
19892         mov     w25, w0
19893         adrp    x0, :got:gBlockPageAlignSize
19894         stp     x23, x24, [sp,48]
19895         ldr     x22, [x21, #:got_lo12:gpNandParaInfo]
19896         mov     w24, 0
19897         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
19898         stp     x27, x28, [sp,80]
19899         stp     x19, x20, [sp,16]
19900         mov     w27, w1
19901         mov     x20, x2
19902         ldr     w3, [x0]
19903         mov     w1, w25
19904         ldr     x0, [x22]
19905         mov     w2, w27
19906         add     x28, x29, 160
19907         ldrb    w19, [x0,9]
19908         adrp    x0, .LC122
19909         add     x0, x0, :lo12:.LC122
19910         mul     w19, w3, w19
19911         bl      printk
19912         adrp    x0, :got:gNandPhyInfo
19913         mov     w2, 0
19914         uxth    w19, w19
19915         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
19916         ldrh    w1, [x0,20]
19917         mov     w0, 0
19918         udiv    w1, w25, w1
19919         bl      FlashEraseBlock
19920         udiv    w26, w25, w19
19921         ldr     x0, [x22]
19922         adrp    x5, :got:slcPageToMlcPageTbl
19923         adrp    x6, :got:gNandFlashEccBits
19924         adrp    x7, :got:gNandFlashIDBEccBits
19925         ldrb    w22, [x0,9]
19926         msub    w26, w26, w19, w25
19927         sub     w23, w25, w26
19928 .L2691:
19929         cmp     w24, w27
19930         bcs     .L2697
19931         add     w4, w24, w26
19932         lsr     w4, w4, 2
19933         and     w19, w4, 65535
19934         uxth    w0, w4
19935         cbz     w0, .L2692
19936         ldr     x0, [x5, #:got_lo12:slcPageToMlcPageTbl]
19937         add     w1, w19, 1
19938         str     wzr, [x28,4]
19939         ldrh    w4, [x0,w1,sxtw 1]
19940         sub     w4, w4, #1
19941         lsl     w4, w4, 2
19942         str     w4, [x28]
19943 .L2692:
19944         ldr     x4, [x5, #:got_lo12:slcPageToMlcPageTbl]
19945         ubfiz   x2, x24, 9, 16
19946         ldr     x0, [x6, #:got_lo12:gNandFlashEccBits]
19947         add     x2, x20, x2
19948         str     x5, [x29,104]
19949         add     w24, w24, 4
19950         ldrh    w1, [x4,w19,sxtw 1]
19951         ldrb    w8, [x0]
19952         uxth    w24, w24
19953         ldr     x0, [x7, #:got_lo12:gNandFlashIDBEccBits]
19954         madd    w1, w1, w22, w23
19955         str     x6, [x29,136]
19956         ldrb    w0, [x0]
19957         str     x7, [x29,152]
19958         str     x4, [x29,112]
19959         str     x8, [x29,144]
19960         str     x1, [x29,120]
19961         str     x2, [x29,128]
19962         bl      FlashBchSel
19963         ldr     x0, [x21, #:got_lo12:gpNandParaInfo]
19964         ldr     x1, [x29,120]
19965         ldr     x2, [x29,128]
19966         ldr     x0, [x0]
19967         ldrb    w3, [x0,9]
19968         mov     w0, 0
19969         udiv    w1, w1, w3
19970         mov     x3, x28
19971         bl      FlashProgPage
19972         ldr     x8, [x29,144]
19973         mov     w0, w8
19974         bl      FlashBchSel
19975         udiv    w1, w23, w22
19976         ldr     x4, [x29,112]
19977         mov     w0, 0
19978         ldrh    w2, [x4,w19,sxtw 1]
19979         add     w2, w2, 1
19980         bl      FlashPageProgMsbFFData
19981         ldr     x5, [x29,104]
19982         ldr     x6, [x29,136]
19983         ldr     x7, [x29,152]
19984         b       .L2691
19985 .L2697:
19986         adrp    x0, .LC123
19987         mov     w1, w25
19988         mov     w2, w27
19989         mov     w3, 0
19990         add     x0, x0, :lo12:.LC123
19991         bl      printk
19992         mov     w0, 0
19993         ldp     x19, x20, [sp,16]
19994         ldp     x21, x22, [sp,32]
19995         ldp     x23, x24, [sp,48]
19996         ldp     x25, x26, [sp,64]
19997         ldp     x27, x28, [sp,80]
19998         ldp     x29, x30, [sp], 224
19999         ret
20000         .size   IDBlockWriteData, .-IDBlockWriteData
20001         .align  2
20002         .global write_idblock
20003         .type   write_idblock, %function
20004 write_idblock:
20005         stp     x29, x30, [sp, -112]!
20006         add     x29, sp, 0
20007         stp     x23, x24, [sp,48]
20008         mov     w24, w0
20009         adrp    x0, :got:gpNandParaInfo
20010         stp     x19, x20, [sp,16]
20011         stp     x21, x22, [sp,32]
20012         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
20013         mov     x21, x1
20014         stp     x25, x26, [sp,64]
20015         stp     x27, x28, [sp,80]
20016         mov     w1, 192
20017         mov     x23, x2
20018         ldr     x0, [x0]
20019         movk    w1, 0x240, lsl 16
20020         mov     w2, 6
20021         ldrb    w22, [x0,9]
20022         adrp    x0, :got:gBlockPageAlignSize
20023         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
20024         ldr     w25, [x0]
20025         mov     x0, 59392
20026         movk    x0, 0x3, lsl 16
20027         bl      kmalloc_order_trace
20028         mov     x20, x0
20029         mov     w0, -1
20030         cbz     x20, .L2708
20031         add     w19, w24, 511
20032         lsr     w19, w19, 9
20033         cmp     w19, 255
20034         bhi     .L2700
20035         ubfiz   x0, x19, 9, 23
20036         mov     w2, 256
20037         add     x0, x21, x0
20038         mov     x1, x21
20039         sub     w2, w2, w19
20040         bl      memcpy
20041 .L2700:
20042         add     w19, w19, 128
20043         mov     w0, 256
20044         cmp     w19, 256
20045         adrp    x26, :got:gNandIDBResBlkNum
20046         csel    w19, w19, w0, ls
20047         adrp    x0, .LC124
20048         add     x0, x0, :lo12:.LC124
20049         mov     x1, x23
20050         mov     w2, 4
20051         mov     w3, 5
20052         bl      rknand_print_hex
20053         ldr     x26, [x26, #:got_lo12:gNandIDBResBlkNum]
20054         ldr     w1, [x21,512]
20055         adrp    x0, .LC125
20056         add     x0, x0, :lo12:.LC125
20057         ldrb    w2, [x26]
20058         bl      printk
20059         ldrb    w0, [x26]
20060         ldr     w1, [x21,512]
20061         cmp     w1, w0
20062         bls     .L2701
20063         str     w0, [x21,512]
20064 .L2701:
20065         adrp    x0, .LC126
20066         mov     w2, w24
20067         mul     w22, w22, w25
20068         add     x0, x0, :lo12:.LC126
20069         mov     w1, w19
20070         mov     x28, 0
20071         adrp    x25, .LC127
20072         bl      printk
20073         adrp    x26, .LC128
20074         adrp    x27, .LC129
20075         lsl     w0, w19, 7
20076         uxth    w22, w22
20077         str     w0, [x29,108]
20078         mov     w24, w28
20079         add     x25, x25, :lo12:.LC127
20080         add     x26, x26, :lo12:.LC128
20081         add     x27, x27, :lo12:.LC129
20082 .L2706:
20083         adrp    x0, :got:gNandPhyInfo
20084         ldr     w2, [x23,x28,lsl 2]
20085         mov     w8, w28
20086         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
20087         ldrh    w0, [x0,26]
20088         cmp     w2, w0
20089         bcs     .L2702
20090         adrp    x0, :got:gNandFlashIdbBlockAddr
20091         ldr     x0, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
20092         ldr     w0, [x0]
20093         cmp     w2, w0
20094         bcc     .L2702
20095         mov     w1, 0
20096         mov     x2, 512
20097         mov     x0, x20
20098         str     x8, [x29,96]
20099         bl      memset
20100         ldr     w0, [x23,x28,lsl 2]
20101         mov     w1, w19
20102         mov     x2, x21
20103         mul     w0, w22, w0
20104         bl      IDBlockWriteData
20105         ldr     w0, [x23,x28,lsl 2]
20106         mov     w1, w19
20107         mov     x2, x20
20108         mul     w0, w22, w0
20109         bl      IdBlockReadData
20110         ldr     x8, [x29,96]
20111         mov     x0, 0
20112 .L2703:
20113         ldr     w1, [x29,108]
20114         mov     w3, w0
20115         cmp     w0, w1
20116         bcs     .L2713
20117         ldr     w4, [x20,x0,lsl 2]
20118         mov     x7, x0
20119         add     x0, x0, 1
20120         add     x1, x21, x0, lsl 2
20121         ldr     w5, [x1,-4]
20122         cmp     w4, w5
20123         beq     .L2703
20124         ldr     w2, [x23,x28,lsl 2]
20125         mov     w1, w8
20126         mov     x0, x25
20127         str     x7, [x29,96]
20128         bl      printk
20129         ldr     x7, [x29,96]
20130         mov     x0, x26
20131         mov     w2, 4
20132         mov     w3, 256
20133         and     x4, x7, -256
20134         lsl     x4, x4, 2
20135         str     x4, [x29,96]
20136         add     x1, x21, x4
20137         bl      rknand_print_hex
20138         ldr     x4, [x29,96]
20139         mov     w3, 256
20140         mov     x0, x27
20141         mov     w2, 4
20142         add     x1, x20, x4
20143         bl      rknand_print_hex
20144         mov     x0, x20
20145         mov     w1, 0
20146         mov     x2, 512
20147         bl      memset
20148         ldr     w0, [x23,x28,lsl 2]
20149         mov     w1, 4
20150         mov     x2, x20
20151         mul     w0, w22, w0
20152         bl      IDBlockWriteData
20153         adrp    x0, .LC130
20154         add     x0, x0, :lo12:.LC130
20155         bl      printk
20156         b       .L2702
20157 .L2713:
20158         add     w24, w24, 1
20159 .L2702:
20160         add     x28, x28, 1
20161         cmp     x28, 5
20162         bne     .L2706
20163         mov     x0, x20
20164         bl      kfree
20165         cmp     w24, wzr
20166         csetm   w0, eq
20167 .L2708:
20168         ldp     x19, x20, [sp,16]
20169         ldp     x21, x22, [sp,32]
20170         ldp     x23, x24, [sp,48]
20171         ldp     x25, x26, [sp,64]
20172         ldp     x27, x28, [sp,80]
20173         ldp     x29, x30, [sp], 112
20174         ret
20175         .size   write_idblock, .-write_idblock
20176         .align  2
20177         .global CRC_32
20178         .type   CRC_32, %function
20179 CRC_32:
20180         mov     x2, 0
20181         mov     x4, x0
20182         adrp    x5, :got:gTable_Crc32
20183         mov     w0, w2
20184 .L2715:
20185         cmp     w1, w2
20186         bls     .L2717
20187         ldrb    w3, [x4,x2]
20188         add     x2, x2, 1
20189         ldr     x6, [x5, #:got_lo12:gTable_Crc32]
20190         eor     w3, w3, w0, lsr 24
20191         ldr     w3, [x6,w3,uxtw 2]
20192         eor     w0, w3, w0, lsl 8
20193         b       .L2715
20194 .L2717:
20195         ret
20196         .size   CRC_32, .-CRC_32
20197         .align  2
20198         .type   rknand_sys_storage_ioctl, %function
20199 rknand_sys_storage_ioctl:
20200         sub     sp, sp, #528
20201         stp     x29, x30, [sp, -48]!
20202         add     x29, sp, 0
20203         stp     x19, x20, [sp,16]
20204         str     x21, [sp,32]
20205         mov     w19, w1
20206         mov     x21, x2
20207         ldr     x20, [x0,208]
20208         mov     w0, 29187
20209         movk    w0, 0x4004, lsl 16
20210         cmp     w1, w0
20211         beq     .L2720
20212         mov     w0, 29187
20213         movk    w0, 0x4004, lsl 16
20214         cmp     w1, w0
20215         bhi     .L2721
20216         mov     w0, 25726
20217         movk    w0, 0x4004, lsl 16
20218         cmp     w1, w0
20219         beq     .L2722
20220         mov     w0, 25726
20221         movk    w0, 0x4004, lsl 16
20222         cmp     w1, w0
20223         bhi     .L2723
20224         mov     w0, 25601
20225         movk    w0, 0x4004, lsl 16
20226         cmp     w1, w0
20227         beq     .L2724
20228         mov     w0, 25601
20229         movk    w0, 0x4004, lsl 16
20230         cmp     w1, w0
20231         bhi     .L2725
20232         mov     w0, 25364
20233         movk    w0, 0x4004, lsl 16
20234         cmp     w1, w0
20235         bne     .L2773
20236         bl      rknand_dev_flush
20237         b       .L2796
20238 .L2725:
20239         mov     w0, 25602
20240         movk    w0, 0x4004, lsl 16
20241         cmp     w1, w0
20242         beq     .L2727
20243         mov     w0, 25603
20244         movk    w0, 0x4004, lsl 16
20245         cmp     w1, w0
20246         beq     .L2728
20247         b       .L2773
20248 .L2723:
20249         mov     w0, 27688
20250         movk    w0, 0x4004, lsl 16
20251         cmp     w1, w0
20252         beq     .L2729
20253         mov     w0, 27688
20254         movk    w0, 0x4004, lsl 16
20255         cmp     w1, w0
20256         bhi     .L2730
20257         mov     w0, 25727
20258         movk    w0, 0x4004, lsl 16
20259         cmp     w1, w0
20260         beq     .L2731
20261         b       .L2773
20262 .L2730:
20263         mov     w0, 27698
20264         movk    w0, 0x4004, lsl 16
20265         cmp     w1, w0
20266         beq     .L2729
20267         mov     w0, 27708
20268         movk    w0, 0x4004, lsl 16
20269         cmp     w1, w0
20270         beq     .L2729
20271         b       .L2773
20272 .L2721:
20273         mov     w0, 29267
20274         movk    w0, 0x4004, lsl 16
20275         cmp     w1, w0
20276         beq     .L2732
20277         mov     w0, 29267
20278         movk    w0, 0x4004, lsl 16
20279         cmp     w1, w0
20280         bhi     .L2733
20281         mov     w0, 29189
20282         movk    w0, 0x4004, lsl 16
20283         cmp     w1, w0
20284         beq     .L2734
20285         mov     w0, 29189
20286         movk    w0, 0x4004, lsl 16
20287         cmp     w1, w0
20288         bcc     .L2735
20289         mov     w0, 29210
20290         movk    w0, 0x4004, lsl 16
20291         cmp     w1, w0
20292         beq     .L2736
20293         mov     w0, 29266
20294         movk    w0, 0x4004, lsl 16
20295         cmp     w1, w0
20296         beq     .L2737
20297         b       .L2773
20298 .L2733:
20299         mov     w0, 30225
20300         movk    w0, 0x4004, lsl 16
20301         cmp     w1, w0
20302         beq     .L2738
20303         mov     w0, 30225
20304         movk    w0, 0x4004, lsl 16
20305         cmp     w1, w0
20306         bhi     .L2739
20307         mov     w0, 29268
20308         movk    w0, 0x4004, lsl 16
20309         cmp     w1, w0
20310         beq     .L2740
20311         mov     w0, 30224
20312         movk    w0, 0x4004, lsl 16
20313         cmp     w1, w0
20314         beq     .L2741
20315         b       .L2773
20316 .L2739:
20317         mov     w0, 30226
20318         movk    w0, 0x4004, lsl 16
20319         cmp     w1, w0
20320         beq     .L2741
20321         mov     w0, 30227
20322         movk    w0, 0x4004, lsl 16
20323         cmp     w1, w0
20324         beq     .L2738
20325         b       .L2773
20326 .L2735:
20327         adrp    x0, .LC131
20328         add     x0, x0, :lo12:.LC131
20329         bl      printk
20330         mov     x0, x20
20331         mov     x1, x21
20332         mov     x2, 512
20333         bl      rk_copy_from_user
20334         cbz     x0, .L2742
20335 .L2746:
20336         adrp    x0, .LC132
20337         add     x0, x0, :lo12:.LC132
20338         b       .L2800
20339 .L2742:
20340         adrp    x0, .LC133
20341         ldr     w1, [x20]
20342         ldr     w2, [x20,4]
20343         add     x0, x0, :lo12:.LC133
20344         bl      printk
20345         ldr     w19, [x20,4]
20346         cmp     w19, 8
20347         bhi     .L2799
20348         bl      rknand_device_unlock
20349         ldr     w0, [x20]
20350         mov     w1, w19
20351         mov     x2, x20
20352         bl      IdBlockReadData
20353         bl      rknand_device_unlock
20354         mov     x0, x21
20355         mov     x1, x20
20356         ubfiz   x2, x19, 9, 23
20357         bl      rk_copy_to_user
20358         cbz     x0, .L2796
20359         adrp    x0, .LC134
20360         add     x0, x0, :lo12:.LC134
20361 .L2800:
20362         bl      printk
20363         b       .L2799
20364 .L2734:
20365         adrp    x0, .LC135
20366         add     x0, x0, :lo12:.LC135
20367         bl      printk
20368         mov     x0, x20
20369         mov     x1, x21
20370         mov     x2, 4096
20371         bl      rk_copy_from_user
20372         cbnz    x0, .L2746
20373         ldr     w1, [x20]
20374         adrp    x0, .LC136
20375         ldr     w2, [x20,4]
20376         add     x0, x0, :lo12:.LC136
20377         bl      printk
20378         adrp    x0, :got:g_idb_buffer
20379         mov     x19, x0
20380         ldr     x21, [x0, #:got_lo12:g_idb_buffer]
20381         ldr     x1, [x21]
20382         cbz     x1, .L2747
20383 .L2750:
20384         ldr     w2, [x20,4]
20385         cmp     w2, 4088
20386         bls     .L2748
20387         b       .L2799
20388 .L2747:
20389         mov     w1, 192
20390         mov     x0, 260096
20391         movk    w1, 0x240, lsl 16
20392         mov     w2, 6
20393         bl      kmalloc_order_trace
20394         str     x0, [x21]
20395         cbnz    x0, .L2750
20396         b       .L2799
20397 .L2748:
20398         ldr     w0, [x20]
20399         mov     w1, 55296
20400         movk    w1, 0x3, lsl 16
20401         cmp     w0, w1
20402         bhi     .L2799
20403         ldr     x19, [x19, #:got_lo12:g_idb_buffer]
20404         uxtw    x2, w2
20405         ldr     x1, [x19]
20406         add     x0, x1, x0, uxtw
20407         add     x1, x20, 8
20408         bl      memcpy
20409         b       .L2796
20410 .L2737:
20411         adrp    x0, .LC137
20412         add     x0, x0, :lo12:.LC137
20413         bl      printk
20414         mov     x0, x20
20415         mov     x1, x21
20416         mov     x2, 28
20417         bl      rk_copy_from_user
20418         cbnz    x0, .L2746
20419         ldr     w1, [x20]
20420         adrp    x0, .LC138
20421         ldr     w2, [x20,4]
20422         add     x0, x0, :lo12:.LC138
20423         bl      printk
20424         ldr     w1, [x20]
20425         mov     w0, 59392
20426         movk    w0, 0x3, lsl 16
20427         cmp     w1, w0
20428         bhi     .L2799
20429         adrp    x19, :got:g_idb_buffer
20430         ldr     x19, [x19, #:got_lo12:g_idb_buffer]
20431         ldr     x0, [x19]
20432         cbz     x0, .L2799
20433         ldr     w21, [x20,4]
20434         bl      CRC_32
20435         cmp     w21, w0
20436         beq     .L2751
20437 .L2756:
20438         mov     x0, -2
20439         b       .L2719
20440 .L2751:
20441         bl      rknand_device_unlock
20442         ldr     x1, [x19]
20443         add     x2, x20, 8
20444         ldr     w0, [x20]
20445         bl      write_idblock
20446         bl      rknand_device_unlock
20447         ldr     x0, [x19]
20448         bl      kfree
20449         str     xzr, [x19]
20450         b       .L2796
20451 .L2736:
20452         adrp    x0, .LC139
20453         add     x0, x0, :lo12:.LC139
20454         bl      printk
20455         mov     x0, x20
20456         bl      ReadFlashInfo
20457         mov     x0, x21
20458         mov     x1, x20
20459         mov     x2, 11
20460         b       .L2791
20461 .L2720:
20462         adrp    x0, .LC140
20463         add     x0, x0, :lo12:.LC140
20464         bl      printk
20465         bl      rknand_device_unlock
20466         bl      FtlReInitForSDUpdata
20467         mov     w19, w0
20468         bl      rknand_device_unlock
20469         cbnz    w19, .L2799
20470         bl      nand_blk_add_whole_disk
20471         bl      rknand_device_unlock
20472         mov     w1, w19
20473         mov     w2, 64
20474         mov     x0, x20
20475         bl      FlashReadFacBbtData
20476         bl      rknand_device_unlock
20477         adrp    x0, .LC141
20478         mov     x1, x20
20479         add     x0, x0, :lo12:.LC141
20480         mov     w2, 4
20481         mov     w3, 8
20482         bl      rknand_print_hex
20483         mov     x0, x21
20484         mov     x1, x20
20485         mov     x2, 64
20486         b       .L2791
20487 .L2732:
20488         adrp    x0, .LC142
20489         add     x0, x0, :lo12:.LC142
20490         bl      printk
20491         adrp    x0, :got:gpDrmKeyInfo
20492         mov     x1, x20
20493         mov     x2, 4
20494         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20495         ldr     x0, [x0]
20496         ldr     w0, [x0,20]
20497         str     w0, [x20]
20498         mov     x0, x21
20499         b       .L2791
20500 .L2740:
20501         adrp    x0, .LC143
20502         add     x0, x0, :lo12:.LC143
20503         bl      printk
20504         bl      rknand_device_unlock
20505         mov     w1, 264
20506         mov     w2, 2
20507         mov     x3, x20
20508         mov     w0, 16
20509         bl      FtlRead
20510         bl      rknand_device_unlock
20511         mov     x0, x21
20512         mov     x1, x20
20513         mov     x2, 1024
20514         b       .L2791
20515 .L2724:
20516         adrp    x0, .LC144
20517         add     x19, x29, 56
20518         add     x0, x0, :lo12:.LC144
20519         bl      printk
20520         mov     x0, x19
20521         mov     x1, x21
20522         mov     x2, 520
20523         bl      rk_copy_from_user
20524         mov     x20, x0
20525         cbnz    x0, .L2746
20526         ldr     w1, [x19]
20527         mov     w0, 21060
20528         movk    w0, 0x4b4d, lsl 16
20529         cmp     w1, w0
20530         beq     .L2753
20531 .L2754:
20532         mov     x19, -1
20533         b       .L2745
20534 .L2753:
20535         ldr     w0, [x19,4]
20536         cmp     w0, 512
20537         bhi     .L2754
20538         adrp    x1, :got:gpDrmKeyInfo
20539         mov     x0, x19
20540         mov     x2, 512
20541         ldr     x1, [x1, #:got_lo12:gpDrmKeyInfo]
20542         ldr     x1, [x1]
20543         bl      memcpy
20544         adrp    x0, :got:SecureBootCheckOK
20545         ldr     x0, [x0, #:got_lo12:SecureBootCheckOK]
20546         ldr     w1, [x0]
20547         mov     w0, 5161
20548         movk    w0, 0xc059, lsl 16
20549         cmp     w1, w0
20550         beq     .L2755
20551         str     w20, [x19,8]
20552         add     x0, x19, 64
20553         str     w20, [x19,12]
20554         mov     w1, w20
20555         mov     x2, 128
20556         bl      memset
20557 .L2755:
20558         str     wzr, [x19,16]
20559         add     x0, x19, 256
20560         mov     w1, 0
20561         mov     x2, 256
20562         bl      memset
20563         b       .L2795
20564 .L2727:
20565         adrp    x0, .LC145
20566         add     x19, x29, 56
20567         add     x0, x0, :lo12:.LC145
20568         bl      printk
20569         mov     x0, x19
20570         mov     x1, x21
20571         mov     x2, 520
20572         bl      rk_copy_from_user
20573         cbnz    x0, .L2746
20574         ldr     w1, [x19]
20575         mov     w0, 21060
20576         movk    w0, 0x4b4d, lsl 16
20577         cmp     w1, w0
20578         bne     .L2754
20579         ldr     w0, [x19,4]
20580         cmp     w0, 512
20581         bhi     .L2754
20582         adrp    x0, :got:SecureBootCheckOK
20583         ldr     x0, [x0, #:got_lo12:SecureBootCheckOK]
20584         ldr     w1, [x0]
20585         mov     w0, 5161
20586         movk    w0, 0xc059, lsl 16
20587         cmp     w1, w0
20588         bne     .L2756
20589         ldr     w1, [x19,12]
20590         mov     x0, -3
20591         sub     w2, w1, #1
20592         cmp     w2, 127
20593         bhi     .L2719
20594         adrp    x0, :got:gpDrmKeyInfo
20595         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20596         ldr     x20, [x0]
20597         add     x0, x20, 64
20598         str     w1, [x20,12]
20599         add     x1, x19, 64
20600         ldr     w2, [x19,12]
20601         bl      memcpy
20602         mov     w0, 1
20603         mov     x1, x20
20604         b       .L2798
20605 .L2731:
20606         adrp    x0, .LC146
20607         add     x19, x29, 56
20608         add     x0, x0, :lo12:.LC146
20609         bl      printk
20610         mov     x0, x19
20611         mov     x1, x21
20612         mov     x2, 520
20613         bl      rk_copy_from_user
20614         cbnz    x0, .L2746
20615         ldr     w1, [x19]
20616         mov     w0, 17476
20617         movk    w0, 0x4253, lsl 16
20618         cmp     w1, w0
20619         bne     .L2754
20620         ldr     w0, [x19,4]
20621         cmp     w0, 512
20622         bhi     .L2754
20623         adrp    x19, :got:SecureBootEn
20624         ldr     x0, [x19, #:got_lo12:SecureBootEn]
20625         ldr     w0, [x0]
20626         cbnz    w0, .L2757
20627 .L2760:
20628         mov     x0, 0
20629         b       .L2719
20630 .L2757:
20631         adrp    x0, :got:gpBootConfig
20632         mov     w3, 22867
20633         movk    w3, 0x4453, lsl 16
20634         ldr     x1, [x0, #:got_lo12:gpBootConfig]
20635         ldr     x2, [x1]
20636         ldr     w4, [x2]
20637         cmp     w4, w3
20638         beq     .L2758
20639         mov     w3, 22867
20640         movk    w3, 0x4453, lsl 16
20641         str     w3, [x2]
20642         mov     w3, 504
20643         ldr     x2, [x1]
20644         str     w3, [x2,4]
20645         ldr     x1, [x1]
20646         str     wzr, [x1,8]
20647         str     wzr, [x1,12]
20648 .L2758:
20649         ldr     x0, [x0, #:got_lo12:gpBootConfig]
20650         ldr     x1, [x0]
20651         mov     w0, 0
20652         str     wzr, [x1,16]
20653         bl      StorageSysDataStore
20654         adrp    x0, :got:gpDrmKeyInfo
20655         mov     w3, 21060
20656         movk    w3, 0x4b4d, lsl 16
20657         ldr     x1, [x0, #:got_lo12:gpDrmKeyInfo]
20658         ldr     x2, [x1]
20659         ldr     w4, [x2]
20660         cmp     w4, w3
20661         beq     .L2759
20662         mov     w3, 21060
20663         movk    w3, 0x4b4d, lsl 16
20664         str     w3, [x2]
20665         mov     w3, 504
20666         ldr     x2, [x1]
20667         str     w3, [x2,4]
20668         ldr     x1, [x1]
20669         str     wzr, [x1,8]
20670 .L2759:
20671         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20672         mov     w1, 0
20673         mov     x2, 128
20674         ldr     x20, [x0]
20675         add     x0, x20, 64
20676         str     wzr, [x20,12]
20677         bl      memset
20678         mov     w0, 1
20679         mov     x1, x20
20680         bl      StorageSysDataStore
20681         ldr     x19, [x19, #:got_lo12:SecureBootEn]
20682         adrp    x0, :got:SecureBootCheckOK
20683         str     wzr, [x19]
20684         ldr     x0, [x0, #:got_lo12:SecureBootCheckOK]
20685         str     wzr, [x0]
20686         b       .L2796
20687 .L2722:
20688         adrp    x0, .LC147
20689         add     x19, x29, 56
20690         add     x0, x0, :lo12:.LC147
20691         bl      printk
20692         mov     x0, x19
20693         mov     x1, x21
20694         mov     x2, 520
20695         bl      rk_copy_from_user
20696         cbnz    x0, .L2746
20697         ldr     w2, [x19]
20698         mov     w1, 20037
20699         movk    w1, 0x4253, lsl 16
20700         cmp     w2, w1
20701         bne     .L2754
20702         ldr     w1, [x19,4]
20703         cmp     w1, 512
20704         bhi     .L2754
20705         adrp    x19, :got:SecureBootEn
20706         ldr     x1, [x19, #:got_lo12:SecureBootEn]
20707         ldr     w1, [x1]
20708         cmp     w1, 1
20709         beq     .L2760
20710         adrp    x1, :got:gpBootConfig
20711         mov     w4, 22867
20712         movk    w4, 0x4453, lsl 16
20713         ldr     x2, [x1, #:got_lo12:gpBootConfig]
20714         ldr     x3, [x2]
20715         ldr     w5, [x3]
20716         cmp     w5, w4
20717         beq     .L2761
20718         mov     w4, 22867
20719         movk    w4, 0x4453, lsl 16
20720         str     w4, [x3]
20721         mov     w4, 504
20722         ldr     x3, [x2]
20723         str     w4, [x3,4]
20724         ldr     x2, [x2]
20725         str     w0, [x2,8]
20726         str     w0, [x2,12]
20727 .L2761:
20728         ldr     x1, [x1, #:got_lo12:gpBootConfig]
20729         mov     w0, 1
20730         ldr     x1, [x1]
20731         str     w0, [x1,16]
20732         mov     w0, 0
20733         bl      StorageSysDataStore
20734         adrp    x0, :got:gpDrmKeyInfo
20735         mov     w3, 21060
20736         movk    w3, 0x4b4d, lsl 16
20737         ldr     x1, [x0, #:got_lo12:gpDrmKeyInfo]
20738         ldr     x2, [x1]
20739         ldr     w4, [x2]
20740         cmp     w4, w3
20741         beq     .L2762
20742         mov     w3, 21060
20743         movk    w3, 0x4b4d, lsl 16
20744         str     w3, [x2]
20745         mov     w3, 504
20746         ldr     x2, [x1]
20747         str     w3, [x2,4]
20748         ldr     x1, [x1]
20749         str     wzr, [x1,8]
20750 .L2762:
20751         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20752         mov     w1, 0
20753         mov     x2, 128
20754         ldr     x20, [x0]
20755         add     x0, x20, 64
20756         str     wzr, [x20,12]
20757         bl      memset
20758         mov     w0, 1
20759         mov     x1, x20
20760         bl      StorageSysDataStore
20761         ldr     x19, [x19, #:got_lo12:SecureBootEn]
20762         mov     w0, 1
20763         str     w0, [x19]
20764         b       .L2796
20765 .L2728:
20766         adrp    x0, .LC148
20767         add     x19, x29, 56
20768         add     x0, x0, :lo12:.LC148
20769         bl      printk
20770         mov     x0, x19
20771         mov     x1, x21
20772         mov     x2, 520
20773         bl      rk_copy_from_user
20774         cbnz    x0, .L2746
20775         ldr     w1, [x19]
20776         mov     w0, 20051
20777         movk    w0, 0x4144, lsl 16
20778         cmp     w1, w0
20779         bne     .L2754
20780         ldr     w2, [x19,4]
20781         cmp     w2, 512
20782         bhi     .L2754
20783         adrp    x1, :got:gSnSectorData
20784         add     x0, x19, 8
20785         uxtw    x2, w2
20786         ldr     x1, [x1, #:got_lo12:gSnSectorData]
20787         bl      memcpy
20788 .L2795:
20789         mov     x0, x21
20790         mov     x1, x19
20791         b       .L2792
20792 .L2729:
20793         mov     w0, 27698
20794         movk    w0, 0x4004, lsl 16
20795         cmp     w19, w0
20796         bne     .L2763
20797         adrp    x0, .LC149
20798         add     x0, x0, :lo12:.LC149
20799         b       .L2793
20800 .L2763:
20801         mov     w0, 27708
20802         movk    w0, 0x4004, lsl 16
20803         cmp     w19, w0
20804         bne     .L2765
20805         adrp    x0, .LC150
20806         add     x0, x0, :lo12:.LC150
20807         b       .L2793
20808 .L2765:
20809         adrp    x0, .LC151
20810         add     x0, x0, :lo12:.LC151
20811 .L2793:
20812         bl      printk
20813         add     x20, x29, 56
20814         mov     x0, x20
20815         mov     x1, x21
20816         mov     x2, 520
20817         bl      rk_copy_from_user
20818         cbnz    x0, .L2746
20819         ldr     w1, [x20]
20820         mov     w0, 17227
20821         movk    w0, 0x4c4f, lsl 16
20822         cmp     w1, w0
20823         bne     .L2799
20824         mov     w0, 27708
20825         movk    w0, 0x4004, lsl 16
20826         cmp     w19, w0
20827         bne     .L2766
20828         adrp    x0, :got:gpDrmKeyInfo
20829         mov     x1, x20
20830         mov     x2, 16
20831         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20832         ldr     x0, [x0]
20833         ldr     w0, [x0,20]
20834         str     w0, [x20,4]
20835         strb    w0, [x20,8]
20836         mov     x0, x21
20837         bl      rk_copy_to_user
20838         cbz     x0, .L2719
20839         b       .L2799
20840 .L2766:
20841         adrp    x2, :got:SecureBootUnlockTryCount
20842         mov     x3, x2
20843         ldr     x21, [x2, #:got_lo12:SecureBootUnlockTryCount]
20844         ldr     w0, [x21]
20845         cmp     w0, 10
20846         bhi     .L2799
20847         adrp    x0, :got:gpDrmKeyInfo
20848         ldr     w1, [x20,4]
20849         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20850         ldr     x2, [x0]
20851         ldr     w0, [x2,24]
20852         cmp     w0, w1
20853         beq     .L2767
20854         cbz     w0, .L2767
20855         adrp    x0, .LC152
20856         add     x0, x0, :lo12:.LC152
20857         bl      printk
20858         ldr     w0, [x21]
20859         add     w0, w0, 1
20860         str     w0, [x21]
20861 .L2799:
20862         mov     x0, -14
20863         b       .L2719
20864 .L2767:
20865         ldr     x3, [x3, #:got_lo12:SecureBootUnlockTryCount]
20866         mov     w0, 27698
20867         movk    w0, 0x4004, lsl 16
20868         cmp     w19, w0
20869         str     wzr, [x3]
20870         bne     .L2768
20871         str     wzr, [x2,20]
20872         str     wzr, [x2,24]
20873         b       .L2769
20874 .L2768:
20875         mov     w0, 1
20876         str     w1, [x2,24]
20877         str     w0, [x2,20]
20878 .L2769:
20879         mov     w0, 1
20880         mov     x1, x2
20881         mov     x19, -2
20882         bl      StorageSysDataStore
20883         cmn     w0, #1
20884         bne     .L2796
20885         b       .L2745
20886 .L2741:
20887         adrp    x0, .LC153
20888         add     x20, x29, 56
20889         add     x0, x0, :lo12:.LC153
20890         bl      printk
20891         mov     x0, x20
20892         mov     x1, x21
20893         mov     x2, 520
20894         bl      rk_copy_from_user
20895         cbnz    x0, .L2746
20896         ldr     w1, [x20]
20897         mov     w0, 17750
20898         movk    w0, 0x444e, lsl 16
20899         cmp     w1, w0
20900         bne     .L2754
20901         ldr     w2, [x20,4]
20902         cmp     w2, 504
20903         bhi     .L2754
20904         mov     w0, 30224
20905         uxtw    x2, w2
20906         movk    w0, 0x4004, lsl 16
20907         cmp     w19, w0
20908         add     x0, x20, 8
20909         bne     .L2770
20910         adrp    x1, :got:gpVendor0Info
20911         ldr     x1, [x1, #:got_lo12:gpVendor0Info]
20912         b       .L2794
20913 .L2770:
20914         adrp    x1, :got:gpVendor1Info
20915         ldr     x1, [x1, #:got_lo12:gpVendor1Info]
20916 .L2794:
20917         ldr     x1, [x1]
20918         add     x1, x1, 8
20919         bl      memcpy
20920         mov     x0, x21
20921         mov     x1, x20
20922 .L2792:
20923         mov     x2, 520
20924 .L2791:
20925         bl      rk_copy_to_user
20926         cbnz    x0, .L2799
20927         b       .L2796
20928 .L2738:
20929         adrp    x0, .LC154
20930         add     x20, x29, 56
20931         add     x0, x0, :lo12:.LC154
20932         bl      printk
20933         mov     x0, x20
20934         mov     x1, x21
20935         mov     x2, 520
20936         bl      rk_copy_from_user
20937         cbnz    x0, .L2746
20938         ldr     w1, [x20]
20939         mov     w0, 17750
20940         movk    w0, 0x444e, lsl 16
20941         cmp     w1, w0
20942         bne     .L2754
20943         ldr     w2, [x20,4]
20944         cmp     w2, 504
20945         bhi     .L2754
20946         mov     w0, 30225
20947         add     w2, w2, 8
20948         movk    w0, 0x4004, lsl 16
20949         cmp     w19, w0
20950         bne     .L2772
20951         adrp    x19, :got:gpVendor0Info
20952         mov     x1, x20
20953         ldr     x19, [x19, #:got_lo12:gpVendor0Info]
20954         ldr     x0, [x19]
20955         bl      memcpy
20956         mov     w0, 2
20957         b       .L2797
20958 .L2772:
20959         adrp    x19, :got:gpVendor1Info
20960         mov     x1, x20
20961         ldr     x19, [x19, #:got_lo12:gpVendor1Info]
20962         ldr     x0, [x19]
20963         bl      memcpy
20964         mov     w0, 3
20965 .L2797:
20966         ldr     x1, [x19]
20967 .L2798:
20968         bl      StorageSysDataStore
20969         uxtw    x19, w0
20970         b       .L2745
20971 .L2796:
20972         mov     x19, 0
20973 .L2745:
20974         adrp    x0, .LC155
20975         mov     x1, x19
20976         add     x0, x0, :lo12:.LC155
20977         bl      printk
20978         mov     x0, x19
20979         b       .L2719
20980 .L2773:
20981         mov     x0, -22
20982 .L2719:
20983         ldp     x19, x20, [sp,16]
20984         ldr     x21, [sp,32]
20985         ldp     x29, x30, [sp], 48
20986         add     sp, sp, 528
20987         ret
20988         .size   rknand_sys_storage_ioctl, .-rknand_sys_storage_ioctl
20989         .align  2
20990         .global rk_ftl_storage_sys_init
20991         .type   rk_ftl_storage_sys_init, %function
20992 rk_ftl_storage_sys_init:
20993         adrp    x0, :got:g_idb_buffer
20994         stp     x29, x30, [sp, -80]!
20995         add     x29, sp, 0
20996         ldr     x0, [x0, #:got_lo12:g_idb_buffer]
20997         stp     x19, x20, [sp,16]
20998         stp     x21, x22, [sp,32]
20999         stp     x23, x24, [sp,48]
21000         str     x25, [sp,64]
21001         adrp    x21, :got:gpBootConfig
21002         str     xzr, [x0]
21003         adrp    x0, :got:gLoaderBootInfo
21004         adrp    x20, :got:gpVendor0Info
21005         adrp    x19, :got:gpVendor1Info
21006         ldr     x21, [x21, #:got_lo12:gpBootConfig]
21007         ldr     x0, [x0, #:got_lo12:gLoaderBootInfo]
21008         ldr     x1, [x0]
21009         adrp    x0, :got:gpDrmKeyInfo
21010         str     x1, [x21]
21011         add     x2, x1, 512
21012         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
21013         str     x2, [x0]
21014         add     x2, x1, 1024
21015         add     x1, x1, 1536
21016         ldr     x0, [x20, #:got_lo12:gpVendor0Info]
21017         str     x2, [x0]
21018         mov     w2, 512
21019         ldr     x0, [x19, #:got_lo12:gpVendor1Info]
21020         str     x1, [x0]
21021         adrp    x0, :got:gSnSectorData
21022         ldr     x0, [x0, #:got_lo12:gSnSectorData]
21023         bl      ftl_memcpy
21024         adrp    x1, :got:SecureBootEn
21025         ldr     x0, [x21]
21026         adrp    x3, :got:SecureBootCheckOK
21027         mov     x25, x1
21028         mov     x24, x3
21029         ldr     x22, [x1, #:got_lo12:SecureBootEn]
21030         ldr     w2, [x0,16]
21031         ldr     w23, [x0,508]
21032         str     w2, [x22]
21033         ldr     x2, [x3, #:got_lo12:SecureBootCheckOK]
21034         str     wzr, [x2]
21035         adrp    x2, :got:SecureBootUnlockTryCount
21036         ldr     x2, [x2, #:got_lo12:SecureBootUnlockTryCount]
21037         str     wzr, [x2]
21038         cbz     w23, .L2803
21039         mov     w1, 508
21040         bl      JSHash
21041         cmp     w23, w0
21042         beq     .L2803
21043         ldr     x0, [x21]
21044         str     wzr, [x22]
21045         str     wzr, [x0,16]
21046         adrp    x0, .LC156
21047         add     x0, x0, :lo12:.LC156
21048         bl      printk
21049 .L2803:
21050         ldr     x1, [x25, #:got_lo12:SecureBootEn]
21051         ldr     w0, [x1]
21052         cbz     w0, .L2805
21053         ldr     x0, [x24, #:got_lo12:SecureBootCheckOK]
21054         mov     w1, 5161
21055         movk    w1, 0xc059, lsl 16
21056         str     w1, [x0]
21057 .L2805:
21058         ldr     x20, [x20, #:got_lo12:gpVendor0Info]
21059         mov     w0, 2
21060         ldr     x1, [x20]
21061         bl      StorageSysDataLoad
21062         ldr     x19, [x19, #:got_lo12:gpVendor1Info]
21063         mov     w0, 3
21064         ldr     x1, [x19]
21065         bl      StorageSysDataLoad
21066         adrp    x0, .LANCHOR3
21067         add     x0, x0, :lo12:.LANCHOR3
21068         bl      misc_register
21069         ldr     x25, [sp,64]
21070         ldp     x19, x20, [sp,16]
21071         ldp     x21, x22, [sp,32]
21072         ldp     x23, x24, [sp,48]
21073         ldp     x29, x30, [sp], 80
21074         ret
21075         .size   rk_ftl_storage_sys_init, .-rk_ftl_storage_sys_init
21076         .align  2
21077         .global StorageSysDataDeInit
21078         .type   StorageSysDataDeInit, %function
21079 StorageSysDataDeInit:
21080         stp     x29, x30, [sp, -16]!
21081         adrp    x0, .LANCHOR3
21082         add     x29, sp, 0
21083         add     x0, x0, :lo12:.LANCHOR3
21084         bl      misc_deregister
21085         mov     w0, 0
21086         ldp     x29, x30, [sp], 16
21087         ret
21088         .size   StorageSysDataDeInit, .-StorageSysDataDeInit
21089         .global rknand_sys_storage_fops
21090         .global gTable_Crc32
21091         .global SecureBootUnlockTryCount
21092         .global SecureBootCheckOK
21093         .global SecureBootEn
21094         .global gpVendor1Info
21095         .global gpVendor0Info
21096         .global g_idb_buffer
21097         .global gSnSectorData
21098         .global gpDrmKeyInfo
21099         .global gpBootConfig
21100         .global gLoaderBootInfo
21101         .global RK29_NANDC1_REG_BASE
21102         .global RK29_NANDC_REG_BASE
21103         .global gc_ink_free_return_value
21104         .global FtlUpdateVaildLpnCount
21105         .global g_ect_tbl_power_up_flush
21106         .global last_cache_match_count
21107         .global power_up_flag
21108         .global g_LowFormat
21109         .global gFtlInitStatus
21110         .global DeviceCapacity
21111         .global ToshibaRefValue
21112         .global Toshiba15RefValue
21113         .global ToshibaA19RefValue
21114         .global SamsungRefValue
21115         .global refValueDefault
21116         .global FbbtBlk
21117         .global random_seed
21118         .global gSlcNandParaInfo
21119         .global gNandParaInfo
21120         .global NandFlashParaTbl
21121         .global g_power_lost_recovery_flag
21122         .global c_mlc_erase_count_value
21123         .global g_recovery_ppa_tbl
21124         .global g_recovery_page_min_ver
21125         .global g_recovery_page_num
21126         .global g_cur_erase_blk
21127         .global g_gc_skip_write_count
21128         .global g_gc_head_data_block_count
21129         .global g_gc_head_data_block
21130         .global g_ftl_nand_free_count
21131         .global g_in_swl_replace
21132         .global g_in_gc_progress
21133         .global g_all_blk_used_slc_mode
21134         .global g_max_erase_count
21135         .global g_totle_sys_slc_erase_count
21136         .global g_totle_slc_erase_count
21137         .global g_min_erase_count
21138         .global g_totle_avg_erase_count
21139         .global g_totle_mlc_erase_count
21140         .global g_totle_l2p_write_count
21141         .global g_totle_cache_write_count
21142         .global g_tmp_data_superblock_id
21143         .global g_totle_read_page_count
21144         .global g_totle_discard_page_count
21145         .global g_totle_read_sector
21146         .global g_totle_write_sector
21147         .global g_totle_write_page_count
21148         .global g_totle_gc_page_count
21149         .global g_gc_blk_index
21150         .global g_gc_merge_free_blk_threshold
21151         .global g_gc_free_blk_threshold
21152         .global g_gc_bad_block_temp_tbl
21153         .global g_gc_bad_block_gc_index
21154         .global g_gc_bad_block_temp_num
21155         .global g_gc_next_blk_1
21156         .global g_gc_next_blk
21157         .global g_gc_cur_blk_max_valid_pages
21158         .global g_gc_cur_blk_valid_pages
21159         .global g_gc_page_offset
21160         .global g_gc_blk_num
21161         .global p_gc_blk_tbl
21162         .global p_gc_page_info
21163         .global g_sys_ext_data
21164         .global g_sys_save_data
21165         .global gp_last_act_superblock
21166         .global g_gc_superblock
21167         .global g_gc_temp_superblock
21168         .global g_buffer_superblock
21169         .global g_active_superblock
21170         .global g_num_data_superblocks
21171         .global g_num_free_superblocks
21172         .global p_data_block_list_tail
21173         .global p_data_block_list_head
21174         .global p_free_data_block_list_head
21175         .global p_data_block_list_table
21176         .global g_l2p_last_update_region_id
21177         .global p_l2p_map_buf
21178         .global p_l2p_ram_map
21179         .global g_totle_vendor_block
21180         .global p_vendor_region_ppn_table
21181         .global p_vendor_block_ver_table
21182         .global p_vendor_block_valid_page_count
21183         .global p_vendor_block_table
21184         .global g_totle_map_block
21185         .global p_map_region_ppn_table
21186         .global p_map_block_ver_table
21187         .global p_map_block_valid_page_count
21188         .global p_map_block_table
21189         .global p_valid_page_count_check_table
21190         .global p_valid_page_count_table
21191         .global g_totle_swl_count
21192         .global p_swl_mul_table
21193         .global p_erase_count_table
21194         .global g_ect_tbl_info_size
21195         .global gp_ect_tbl_info
21196         .global g_gc_num_req
21197         .global c_gc_page_buf_num
21198         .global gp_gc_page_buf_info
21199         .global p_gc_data_buf
21200         .global p_gc_spare_buf
21201         .global p_io_spare_buf
21202         .global p_io_data_buf_1
21203         .global p_io_data_buf_0
21204         .global p_sys_spare_buf
21205         .global p_vendor_data_buf
21206         .global p_sys_data_buf_1
21207         .global p_sys_data_buf
21208         .global g_wr_page_num
21209         .global req_wr_io
21210         .global c_wr_page_buf_num
21211         .global p_wr_io_data_buf
21212         .global p_wr_io_spare_buf
21213         .global p_plane_order_table
21214         .global g_req_cache
21215         .global req_gc_dst
21216         .global req_gc
21217         .global req_erase
21218         .global req_prgm
21219         .global req_read
21220         .global req_sys
21221         .global gVendorBlkInfo
21222         .global gL2pMapInfo
21223         .global gSysFreeQueue
21224         .global gSysInfo
21225         .global gBbtInfo
21226         .global g_inkDie_check_enable
21227         .global g_SlcPartLbaEndSector
21228         .global g_MaxLbn
21229         .global g_VaildLpn
21230         .global g_MaxLpn
21231         .global g_MaxLbaSector
21232         .global g_GlobalDataVersion
21233         .global g_GlobalSysVersion
21234         .global ftl_gc_temp_power_lost_recovery_flag
21235         .global c_ftl_nand_max_data_blks
21236         .global c_ftl_nand_data_op_blks_per_plane
21237         .global c_ftl_nand_data_blks_per_plane
21238         .global c_ftl_nand_max_sys_blks
21239         .global c_ftl_nand_init_sys_blks_per_plane
21240         .global c_ftl_nand_sys_blks_per_plane
21241         .global c_ftl_vendor_part_size
21242         .global c_ftl_nand_max_vendor_blks
21243         .global c_ftl_nand_max_map_blks
21244         .global c_ftl_nand_map_blks_per_plane
21245         .global c_ftl_nand_vendor_region_num
21246         .global c_ftl_nand_l2pmap_ram_region_num
21247         .global c_ftl_nand_map_region_num
21248         .global c_ftl_nand_totle_phy_blks
21249         .global c_ftl_nand_reserved_blks
21250         .global c_ftl_nand_byte_pre_oob
21251         .global c_ftl_nand_byte_pre_page
21252         .global c_ftl_nand_sec_pre_page_shift
21253         .global c_ftl_nand_sec_pre_page
21254         .global c_ftl_nand_page_pre_super_blk
21255         .global c_ftl_nand_page_pre_slc_blk
21256         .global c_ftl_nand_page_pre_blk
21257         .global c_ftl_nand_bbm_buf_size
21258         .global c_ftl_nand_ext_blk_pre_plane
21259         .global c_ftl_nand_blk_pre_plane
21260         .global c_ftl_nand_planes_num
21261         .global c_ftl_nand_blks_per_die_shift
21262         .global c_ftl_nand_blks_per_die
21263         .global c_ftl_nand_planes_per_die
21264         .global c_ftl_nand_die_num
21265         .global c_ftl_nand_type
21266         .global gMasterTempBuf
21267         .global gMasterInfo
21268         .global gNandcDumpWriteEn
21269         .global gToggleModeClkDiv
21270         .global gBootDdrMode
21271         .global gNandcEccBits
21272         .global gpNandc1
21273         .global gpNandc
21274         .global gNandcVer
21275         .global gNandChipMap
21276         .global gNandIDataBuf
21277         .global FlashDdrTunningReadCount
21278         .global gNandPhyInfo
21279         .global gFlashProgCheckSpareBuffer
21280         .global gFlashProgCheckBuffer
21281         .global gFlashSpareBuffer
21282         .global gFlashPageBuffer1
21283         .global gFlashPageBuffer0
21284         .global gpFlashSaveInfo
21285         .global gReadRetryInfo
21286         .global gpNandParaInfo
21287         .global gNandOptPara
21288         .global g_slc2KBNand
21289         .global g_maxRetryCount
21290         .global g_maxRegNum
21291         .global g_retryMode
21292         .global gNandIDBResBlkNumSaveInFlash
21293         .global gNandIDBResBlkNum
21294         .global gNandFlashResEndPageAddr
21295         .global gNandFlashInfoBlockAddr
21296         .global gNandFlashIdbBlockAddr
21297         .global gNandFlashInfoBlockEcc
21298         .global gNandFlashIDBEccBits
21299         .global gNandFlashEccBits
21300         .global gNandRandomizer
21301         .global gBlockPageAlignSize
21302         .global gTotleBlock
21303         .global gNandMaxChip
21304         .global gNandMaxDie
21305         .global gFlashInterfaceMode
21306         .global gFlashOnfiModeEn
21307         .global gFlashToggleModeEn
21308         .global gFlashSdrModeEn
21309         .global gMultiPageProgEn
21310         .global gMultiPageReadEn
21311         .global gpReadRetrial
21312         .global mlcPageToSlcPageTbl
21313         .global slcPageToMlcPageTbl
21314         .global DieAddrs
21315         .global gDieOp
21316         .global DieCsIndex
21317         .global IDByte
21318         .global read_retry_cur_offset
21319         .section        .rodata
21320         .align  3
21321 .LANCHOR1 = . + 0
21322         .type   __func__.18162, %object
21323         .size   __func__.18162, 11
21324 __func__.18162:
21325         .string "FtlMemInit"
21326         .zero   5
21327         .type   __func__.19016, %object
21328         .size   __func__.19016, 21
21329 __func__.19016:
21330         .string "FtlVpcCheckAndModify"
21331         .section        .data.rel.local,"aw",%progbits
21332         .align  3
21333         .type   rknand_sys_storage_fops, %object
21334         .size   rknand_sys_storage_fops, 216
21335 rknand_sys_storage_fops:
21336         .zero   64
21337         .xword  rknand_sys_storage_ioctl
21338         .xword  rknand_sys_storage_ioctl
21339         .zero   8
21340         .xword  rknand_sys_storage_open
21341         .zero   8
21342         .xword  rknand_sys_storage_release
21343         .zero   104
21344         .data
21345         .align  3
21346 .LANCHOR2 = . + 0
21347         .type   NandOptPara, %object
21348         .size   NandOptPara, 128
21349 NandOptPara:
21350         .byte   1
21351         .byte   0
21352         .byte   49
21353         .byte   63
21354         .byte   0
21355         .byte   49
21356         .byte   -128
21357         .byte   21
21358         .byte   0
21359         .byte   50
21360         .byte   17
21361         .byte   -128
21362         .byte   112
21363         .byte   120
21364         .byte   120
21365         .byte   3
21366         .byte   1
21367         .byte   0
21368         .zero   14
21369         .byte   2
21370         .byte   0
21371         .byte   49
21372         .byte   63
21373         .byte   0
21374         .byte   49
21375         .byte   -128
21376         .byte   21
21377         .byte   0
21378         .byte   0
21379         .byte   17
21380         .byte   -127
21381         .byte   112
21382         .byte   -15
21383         .byte   -14
21384         .byte   0
21385         .byte   0
21386         .byte   0
21387         .zero   14
21388         .byte   3
21389         .byte   0
21390         .byte   49
21391         .byte   63
21392         .byte   0
21393         .byte   49
21394         .byte   -128
21395         .byte   21
21396         .byte   96
21397         .byte   96
21398         .byte   17
21399         .byte   -127
21400         .byte   112
21401         .byte   -15
21402         .byte   -14
21403         .byte   0
21404         .byte   0
21405         .byte   0
21406         .zero   14
21407         .byte   4
21408         .byte   0
21409         .byte   49
21410         .byte   63
21411         .byte   0
21412         .byte   49
21413         .byte   -128
21414         .byte   21
21415         .byte   96
21416         .byte   96
21417         .byte   17
21418         .byte   -127
21419         .byte   112
21420         .byte   112
21421         .byte   112
21422         .byte   0
21423         .byte   0
21424         .byte   0
21425         .zero   14
21426         .type   ftl_gc_temp_block_bops_scan_page_addr, %object
21427         .size   ftl_gc_temp_block_bops_scan_page_addr, 2
21428 ftl_gc_temp_block_bops_scan_page_addr:
21429         .hword  -1
21430         .zero   6
21431         .type   gTable_Crc32, %object
21432         .size   gTable_Crc32, 1024
21433 gTable_Crc32:
21434         .word   0
21435         .word   79760823
21436         .word   159521646
21437         .word   222500569
21438         .word   319043292
21439         .word   398801771
21440         .word   445001138
21441         .word   507977733
21442         .word   638086584
21443         .word   583622671
21444         .word   797603542
21445         .word   726367073
21446         .word   890002276
21447         .word   835540691
21448         .word   1015955466
21449         .word   944721341
21450         .word   1276173168
21451         .word   1221711559
21452         .word   1167245342
21453         .word   1096011177
21454         .word   1595207084
21455         .word   1540743195
21456         .word   1452734146
21457         .word   1381497717
21458         .word   1780004552
21459         .word   1859763071
21460         .word   1671081382
21461         .word   1734058001
21462         .word   2031910932
21463         .word   2111671715
21464         .word   1889442682
21465         .word   1952421581
21466         .word   -1742620960
21467         .word   -1662993577
21468         .word   -1851544178
21469         .word   -1788698567
21470         .word   -1960476612
21471         .word   -1880846965
21472         .word   -2102944942
21473         .word   -2040097051
21474         .word   -1104553128
21475         .word   -1159145745
21476         .word   -1213480906
21477         .word   -1284846207
21478         .word   -1389499004
21479         .word   -1444093901
21480         .word   -1531971862
21481         .word   -1603339427
21482         .word   -734958192
21483         .word   -789553113
21484         .word   -575441154
21485         .word   -646808759
21486         .word   -952804532
21487         .word   -1007397125
21488         .word   -826851294
21489         .word   -898216555
21490         .word   -231145432
21491         .word   -151515745
21492         .word   -71623866
21493         .word   -8775951
21494         .word   -516081932
21495         .word   -436454589
21496         .word   -390124134
21497         .word   -327278547
21498         .word   880959607
21499         .word   809725376
21500         .word   1023441689
21501         .word   968980142
21502         .word   663115435
21503         .word   591878940
21504         .word   772033989
21505         .word   717570162
21506         .word   311037391
21507         .word   374014072
21508         .word   453514913
21509         .word   533273366
21510         .word   26098451
21511         .word   89077412
21512         .word   135012477
21513         .word   214773194
21514         .word   2022882055
21515         .word   2085861040
21516         .word   1896915049
21517         .word   1976675806
21518         .word   1805028827
21519         .word   1868005484
21520         .word   1645516469
21521         .word   1725274882
21522         .word   1587205823
21523         .word   1515969288
21524         .word   1461243345
21525         .word   1406779494
21526         .word   1302257763
21527         .word   1231023572
21528         .word   1142749965
21529         .word   1088288442
21530         .word   -1398548841
21531         .word   -1469916384
21532         .word   -1524511239
21533         .word   -1579106226
21534         .word   -1079517109
21535         .word   -1150882308
21536         .word   -1239024859
21537         .word   -1293617518
21538         .word   -1968456913
21539         .word   -1905609064
21540         .word   -2094423999
21541         .word   -2014794250
21542         .word   -1716548109
21543         .word   -1653702588
21544         .word   -1876060515
21545         .word   -1796433110
21546         .word   -525136409
21547         .word   -462290864
21548         .word   -382658935
21549         .word   -303031490
21550         .word   -206095557
21551         .word   -143247732
21552         .word   -97181611
21553         .word   -17551902
21554         .word   -960798625
21555         .word   -1032163864
21556         .word   -818316495
21557         .word   -872909178
21558         .word   -708880765
21559         .word   -780248268
21560         .word   -599962131
21561         .word   -654557094
21562         .word   1761919214
21563         .word   1841679705
21564         .word   1619450752
21565         .word   1682429495
21566         .word   2046883378
21567         .word   2126642053
21568         .word   1937960284
21569         .word   2000937195
21570         .word   1326230870
21571         .word   1271767265
21572         .word   1183757880
21573         .word   1112521615
21574         .word   1544067978
21575         .word   1489606205
21576         .word   1435140324
21577         .word   1363905875
21578         .word   622074782
21579         .word   567612969
21580         .word   748028144
21581         .word   676793671
21582         .word   907029826
21583         .word   852566261
21584         .word   1066546732
21585         .word   995310491
21586         .word   52196902
21587         .word   131955601
21588         .word   178154824
21589         .word   241131775
21590         .word   270024954
21591         .word   349785421
21592         .word   429546388
21593         .word   492525091
21594         .word   -249203186
21595         .word   -169575495
21596         .word   -123245216
21597         .word   -60399401
21598         .word   -501137198
21599         .word   -421507739
21600         .word   -341615684
21601         .word   -278768117
21602         .word   -684909642
21603         .word   -739502591
21604         .word   -558956328
21605         .word   -630321809
21606         .word   -1003934358
21607         .word   -1058529059
21608         .word   -844417532
21609         .word   -915784781
21610         .word   -1120555650
21611         .word   -1175150391
21612         .word   -1263028720
21613         .word   -1334395993
21614         .word   -1372480606
21615         .word   -1427073515
21616         .word   -1481408308
21617         .word   -1552773765
21618         .word   -1690451770
21619         .word   -1610822287
21620         .word   -1832920152
21621         .word   -1770072545
21622         .word   -2009467366
21623         .word   -1929839699
21624         .word   -2118390412
21625         .word   -2055544637
21626         .word   1569104025
21627         .word   1497869614
21628         .word   1409596407
21629         .word   1355134528
21630         .word   1317180997
21631         .word   1245944818
21632         .word   1191218475
21633         .word   1136754844
21634         .word   2072956193
21635         .word   2135933078
21636         .word   1913443919
21637         .word   1993202680
21638         .word   1753938941
21639         .word   1816917578
21640         .word   1627971731
21641         .word   1707732260
21642         .word   295074793
21643         .word   358053470
21644         .word   403988615
21645         .word   483749168
21646         .word   43142453
21647         .word   106119298
21648         .word   185620059
21649         .word   265378796
21650         .word   933107281
21651         .word   861871078
21652         .word   1042025791
21653         .word   987562120
21654         .word   614080653
21655         .word   542846266
21656         .word   756562915
21657         .word   702101076
21658         .word   -978905479
21659         .word   -1050272818
21660         .word   -869987049
21661         .word   -924581728
21662         .word   -693952347
21663         .word   -765317870
21664         .word   -551470133
21665         .word   -606062980
21666         .word   -475038783
21667         .word   -412191114
21668         .word   -366124881
21669         .word   -286495464
21670         .word   -257209059
21671         .word   -194363222
21672         .word   -114731405
21673         .word   -35103804
21674         .word   -1984443127
21675         .word   -1921597250
21676         .word   -2143955353
21677         .word   -2064327728
21678         .word   -1699480619
21679         .word   -1636632990
21680         .word   -1825447749
21681         .word   -1745818356
21682         .word   -1346395983
21683         .word   -1417761530
21684         .word   -1505903649
21685         .word   -1560496536
21686         .word   -1128556947
21687         .word   -1199924262
21688         .word   -1254519549
21689         .word   -1309114188
21690         .type   power_up_flag, %object
21691         .size   power_up_flag, 4
21692 power_up_flag:
21693         .word   1
21694         .type   gFtlInitStatus, %object
21695         .size   gFtlInitStatus, 4
21696 gFtlInitStatus:
21697         .word   -1
21698         .type   ToshibaRefValue, %object
21699         .size   ToshibaRefValue, 8
21700 ToshibaRefValue:
21701         .byte   0
21702         .byte   4
21703         .byte   124
21704         .byte   120
21705         .byte   116
21706         .byte   8
21707         .byte   12
21708         .byte   112
21709         .type   Toshiba15RefValue, %object
21710         .size   Toshiba15RefValue, 95
21711 Toshiba15RefValue:
21712         .byte   4
21713         .byte   5
21714         .byte   6
21715         .byte   7
21716         .byte   13
21717         .byte   0
21718         .byte   0
21719         .byte   0
21720         .byte   0
21721         .byte   0
21722         .byte   0
21723         .byte   0
21724         .byte   0
21725         .byte   0
21726         .byte   0
21727         .byte   2
21728         .byte   4
21729         .byte   2
21730         .byte   0
21731         .byte   0
21732         .byte   8
21733         .byte   8
21734         .byte   0
21735         .byte   0
21736         .byte   0
21737         .byte   124
21738         .byte   0
21739         .byte   124
21740         .byte   124
21741         .byte   0
21742         .byte   122
21743         .byte   0
21744         .byte   122
21745         .byte   122
21746         .byte   0
21747         .byte   11
21748         .byte   126
21749         .byte   118
21750         .byte   116
21751         .byte   0
21752         .byte   120
21753         .byte   2
21754         .byte   120
21755         .byte   122
21756         .byte   0
21757         .byte   126
21758         .byte   4
21759         .byte   126
21760         .byte   122
21761         .byte   0
21762         .byte   16
21763         .byte   118
21764         .byte   114
21765         .byte   112
21766         .byte   0
21767         .byte   118
21768         .byte   4
21769         .byte   118
21770         .byte   120
21771         .byte   0
21772         .byte   4
21773         .byte   4
21774         .byte   4
21775         .byte   118
21776         .byte   0
21777         .byte   2
21778         .byte   0
21779         .byte   126
21780         .byte   124
21781         .byte   0
21782         .byte   6
21783         .byte   10
21784         .byte   6
21785         .byte   2
21786         .byte   0
21787         .byte   116
21788         .byte   124
21789         .byte   116
21790         .byte   118
21791         .byte   0
21792         .byte   4
21793         .byte   4
21794         .byte   124
21795         .byte   126
21796         .byte   0
21797         .byte   0
21798         .byte   124
21799         .byte   120
21800         .byte   120
21801         .byte   0
21802         .byte   124
21803         .byte   118
21804         .byte   116
21805         .byte   114
21806         .byte   0
21807         .zero   1
21808         .type   ToshibaA19RefValue, %object
21809         .size   ToshibaA19RefValue, 45
21810 ToshibaA19RefValue:
21811         .byte   4
21812         .byte   5
21813         .byte   6
21814         .byte   7
21815         .byte   13
21816         .byte   0
21817         .byte   0
21818         .byte   0
21819         .byte   0
21820         .byte   0
21821         .byte   4
21822         .byte   4
21823         .byte   124
21824         .byte   126
21825         .byte   0
21826         .byte   0
21827         .byte   124
21828         .byte   120
21829         .byte   120
21830         .byte   0
21831         .byte   124
21832         .byte   118
21833         .byte   116
21834         .byte   114
21835         .byte   0
21836         .byte   8
21837         .byte   8
21838         .byte   0
21839         .byte   0
21840         .byte   0
21841         .byte   11
21842         .byte   126
21843         .byte   118
21844         .byte   116
21845         .byte   0
21846         .byte   16
21847         .byte   118
21848         .byte   114
21849         .byte   112
21850         .byte   0
21851         .byte   2
21852         .byte   0
21853         .byte   126
21854         .byte   124
21855         .byte   0
21856         .zero   3
21857         .type   SamsungRefValue, %object
21858         .size   SamsungRefValue, 64
21859 SamsungRefValue:
21860         .byte   -89
21861         .byte   -92
21862         .byte   -91
21863         .byte   -90
21864         .byte   0
21865         .byte   0
21866         .byte   0
21867         .byte   0
21868         .byte   5
21869         .byte   10
21870         .byte   0
21871         .byte   0
21872         .byte   40
21873         .byte   0
21874         .byte   -20
21875         .byte   -40
21876         .byte   -19
21877         .byte   -11
21878         .byte   -19
21879         .byte   -26
21880         .byte   10
21881         .byte   15
21882         .byte   5
21883         .byte   0
21884         .byte   15
21885         .byte   10
21886         .byte   -5
21887         .byte   -20
21888         .byte   -24
21889         .byte   -17
21890         .byte   -24
21891         .byte   -36
21892         .byte   -15
21893         .byte   -5
21894         .byte   -2
21895         .byte   -16
21896         .byte   10
21897         .byte   0
21898         .byte   -5
21899         .byte   -20
21900         .byte   -48
21901         .byte   -30
21902         .byte   -48
21903         .byte   -62
21904         .byte   20
21905         .byte   15
21906         .byte   -5
21907         .byte   -20
21908         .byte   -24
21909         .byte   -5
21910         .byte   -24
21911         .byte   -36
21912         .byte   30
21913         .byte   20
21914         .byte   -5
21915         .byte   -20
21916         .byte   -5
21917         .byte   -1
21918         .byte   -5
21919         .byte   -8
21920         .byte   7
21921         .byte   12
21922         .byte   2
21923         .byte   0
21924         .type   refValueDefault, %object
21925         .size   refValueDefault, 28
21926 refValueDefault:
21927         .byte   0
21928         .byte   0
21929         .byte   0
21930         .byte   0
21931         .byte   0
21932         .byte   6
21933         .byte   10
21934         .byte   6
21935         .byte   0
21936         .byte   -3
21937         .byte   -7
21938         .byte   -8
21939         .byte   0
21940         .byte   -6
21941         .byte   -13
21942         .byte   -15
21943         .byte   0
21944         .byte   -11
21945         .byte   -20
21946         .byte   -23
21947         .byte   0
21948         .byte   0
21949         .byte   -26
21950         .byte   -30
21951         .byte   0
21952         .byte   0
21953         .byte   -32
21954         .byte   -37
21955         .zero   4
21956         .type   random_seed, %object
21957         .size   random_seed, 256
21958 random_seed:
21959         .hword  22378
21960         .hword  1512
21961         .hword  25245
21962         .hword  17827
21963         .hword  25756
21964         .hword  19440
21965         .hword  9026
21966         .hword  10030
21967         .hword  29528
21968         .hword  20467
21969         .hword  29676
21970         .hword  24432
21971         .hword  31328
21972         .hword  6872
21973         .hword  13426
21974         .hword  13842
21975         .hword  8783
21976         .hword  1108
21977         .hword  782
21978         .hword  28837
21979         .hword  30729
21980         .hword  9505
21981         .hword  18676
21982         .hword  23085
21983         .hword  18730
21984         .hword  1085
21985         .hword  32609
21986         .hword  14697
21987         .hword  20858
21988         .hword  15170
21989         .hword  30365
21990         .hword  1607
21991         .hword  32298
21992         .hword  4995
21993         .hword  18905
21994         .hword  1976
21995         .hword  9592
21996         .hword  20204
21997         .hword  17443
21998         .hword  13615
21999         .hword  23330
22000         .hword  29369
22001         .hword  13947
22002         .hword  9398
22003         .hword  32398
22004         .hword  8984
22005         .hword  27600
22006         .hword  21785
22007         .hword  6019
22008         .hword  6311
22009         .hword  31598
22010         .hword  30210
22011         .hword  19327
22012         .hword  13896
22013         .hword  11347
22014         .hword  27545
22015         .hword  3107
22016         .hword  26575
22017         .hword  32270
22018         .hword  19852
22019         .hword  20601
22020         .hword  8349
22021         .hword  9290
22022         .hword  29819
22023         .hword  13579
22024         .hword  3661
22025         .hword  28676
22026         .hword  27331
22027         .hword  32574
22028         .hword  8693
22029         .hword  31253
22030         .hword  9081
22031         .hword  5399
22032         .hword  6842
22033         .hword  20087
22034         .hword  5537
22035         .hword  1274
22036         .hword  11617
22037         .hword  9530
22038         .hword  4866
22039         .hword  8035
22040         .hword  23219
22041         .hword  1178
22042         .hword  23272
22043         .hword  7383
22044         .hword  18944
22045         .hword  12488
22046         .hword  12871
22047         .hword  29340
22048         .hword  20532
22049         .hword  11022
22050         .hword  22514
22051         .hword  228
22052         .hword  22363
22053         .hword  24978
22054         .hword  14584
22055         .hword  12138
22056         .hword  3092
22057         .hword  17916
22058         .hword  16863
22059         .hword  14554
22060         .hword  31457
22061         .hword  29474
22062         .hword  25311
22063         .hword  24121
22064         .hword  3684
22065         .hword  28037
22066         .hword  22865
22067         .hword  22839
22068         .hword  25217
22069         .hword  13217
22070         .hword  27186
22071         .hword  14938
22072         .hword  11180
22073         .hword  29754
22074         .hword  24180
22075         .hword  15150
22076         .hword  32455
22077         .hword  20434
22078         .hword  23848
22079         .hword  29983
22080         .hword  16120
22081         .hword  14769
22082         .hword  20041
22083         .hword  29803
22084         .hword  28406
22085         .hword  17598
22086         .hword  28087
22087         .type   gSlcNandParaInfo, %object
22088         .size   gSlcNandParaInfo, 32
22089 gSlcNandParaInfo:
22090         .byte   2
22091         .byte   -104
22092         .byte   -15
22093         .byte   0
22094         .byte   0
22095         .byte   0
22096         .byte   0
22097         .byte   1
22098         .byte   1
22099         .byte   4
22100         .hword  64
22101         .byte   1
22102         .byte   1
22103         .hword  1024
22104         .hword  256
22105         .byte   0
22106         .byte   0
22107         .byte   16
22108         .byte   40
22109         .byte   1
22110         .byte   0
22111         .byte   1
22112         .byte   0
22113         .byte   0
22114         .zero   5
22115         .type   gNandParaInfo, %object
22116         .size   gNandParaInfo, 32
22117 gNandParaInfo:
22118         .byte   0
22119         .byte   0
22120         .zero   5
22121         .byte   0
22122         .byte   1
22123         .byte   8
22124         .hword  128
22125         .byte   2
22126         .byte   1
22127         .hword  2048
22128         .hword  0
22129         .byte   1
22130         .byte   0
22131         .byte   24
22132         .byte   32
22133         .byte   1
22134         .byte   0
22135         .byte   1
22136         .byte   0
22137         .byte   0
22138         .zero   5
22139         .type   NandFlashParaTbl, %object
22140         .size   NandFlashParaTbl, 2112
22141 NandFlashParaTbl:
22142         .byte   6
22143         .byte   44
22144         .byte   100
22145         .byte   68
22146         .byte   75
22147         .byte   -87
22148         .byte   0
22149         .byte   4
22150         .byte   1
22151         .byte   16
22152         .hword  256
22153         .byte   2
22154         .byte   2
22155         .hword  2048
22156         .hword  479
22157         .byte   3
22158         .byte   17
22159         .byte   40
22160         .byte   32
22161         .byte   1
22162         .byte   0
22163         .byte   1
22164         .byte   0
22165         .byte   0
22166         .zero   5
22167         .byte   6
22168         .byte   44
22169         .byte   68
22170         .byte   68
22171         .byte   75
22172         .byte   -87
22173         .byte   0
22174         .byte   4
22175         .byte   1
22176         .byte   16
22177         .hword  256
22178         .byte   2
22179         .byte   2
22180         .hword  1064
22181         .hword  479
22182         .byte   3
22183         .byte   17
22184         .byte   40
22185         .byte   32
22186         .byte   1
22187         .byte   0
22188         .byte   1
22189         .byte   0
22190         .byte   0
22191         .zero   5
22192         .byte   6
22193         .byte   44
22194         .byte   104
22195         .byte   4
22196         .byte   74
22197         .byte   -87
22198         .byte   0
22199         .byte   4
22200         .byte   1
22201         .byte   8
22202         .hword  256
22203         .byte   2
22204         .byte   2
22205         .hword  2048
22206         .hword  287
22207         .byte   1
22208         .byte   0
22209         .byte   24
22210         .byte   32
22211         .byte   1
22212         .byte   0
22213         .byte   1
22214         .byte   0
22215         .byte   0
22216         .zero   5
22217         .byte   5
22218         .byte   44
22219         .byte   -120
22220         .byte   4
22221         .byte   75
22222         .byte   -87
22223         .byte   0
22224         .byte   4
22225         .byte   1
22226         .byte   16
22227         .hword  256
22228         .byte   2
22229         .byte   2
22230         .hword  2048
22231         .hword  287
22232         .byte   1
22233         .byte   0
22234         .byte   24
22235         .byte   32
22236         .byte   1
22237         .byte   0
22238         .byte   1
22239         .byte   0
22240         .byte   0
22241         .zero   5
22242         .byte   6
22243         .byte   44
22244         .byte   -88
22245         .byte   5
22246         .byte   -53
22247         .byte   -87
22248         .byte   0
22249         .byte   4
22250         .byte   2
22251         .byte   16
22252         .hword  256
22253         .byte   2
22254         .byte   2
22255         .hword  2048
22256         .hword  287
22257         .byte   1
22258         .byte   0
22259         .byte   24
22260         .byte   32
22261         .byte   1
22262         .byte   0
22263         .byte   1
22264         .byte   0
22265         .byte   0
22266         .zero   5
22267         .byte   6
22268         .byte   44
22269         .byte   104
22270         .byte   4
22271         .byte   70
22272         .byte   -119
22273         .byte   0
22274         .byte   4
22275         .byte   1
22276         .byte   8
22277         .hword  256
22278         .byte   2
22279         .byte   2
22280         .hword  2048
22281         .hword  287
22282         .byte   1
22283         .byte   0
22284         .byte   24
22285         .byte   32
22286         .byte   1
22287         .byte   0
22288         .byte   1
22289         .byte   0
22290         .byte   0
22291         .zero   5
22292         .byte   6
22293         .byte   44
22294         .byte   72
22295         .byte   4
22296         .byte   74
22297         .byte   -91
22298         .byte   0
22299         .byte   4
22300         .byte   1
22301         .byte   8
22302         .hword  256
22303         .byte   2
22304         .byte   2
22305         .hword  1024
22306         .hword  287
22307         .byte   1
22308         .byte   0
22309         .byte   24
22310         .byte   32
22311         .byte   1
22312         .byte   0
22313         .byte   1
22314         .byte   0
22315         .byte   0
22316         .zero   5
22317         .byte   6
22318         .byte   44
22319         .byte   -124
22320         .byte   100
22321         .byte   60
22322         .byte   -91
22323         .byte   0
22324         .byte   4
22325         .byte   1
22326         .byte   32
22327         .hword  512
22328         .byte   2
22329         .byte   2
22330         .hword  1024
22331         .hword  479
22332         .byte   3
22333         .byte   17
22334         .byte   40
22335         .byte   32
22336         .byte   1
22337         .byte   0
22338         .byte   1
22339         .byte   0
22340         .byte   0
22341         .zero   5
22342         .byte   6
22343         .byte   44
22344         .byte   -124
22345         .byte   100
22346         .byte   84
22347         .byte   -87
22348         .byte   0
22349         .byte   4
22350         .byte   1
22351         .byte   32
22352         .hword  512
22353         .byte   2
22354         .byte   2
22355         .hword  1024
22356         .hword  479
22357         .byte   4
22358         .byte   18
22359         .byte   60
22360         .byte   32
22361         .byte   1
22362         .byte   0
22363         .byte   1
22364         .byte   0
22365         .byte   0
22366         .zero   5
22367         .byte   6
22368         .byte   44
22369         .byte   -41
22370         .byte   -108
22371         .byte   62
22372         .byte   -124
22373         .byte   0
22374         .byte   4
22375         .byte   1
22376         .byte   8
22377         .hword  128
22378         .byte   2
22379         .byte   2
22380         .hword  4096
22381         .hword  279
22382         .byte   1
22383         .byte   0
22384         .byte   24
22385         .byte   32
22386         .byte   1
22387         .byte   0
22388         .byte   1
22389         .byte   0
22390         .byte   0
22391         .zero   5
22392         .byte   6
22393         .byte   44
22394         .byte   72
22395         .byte   4
22396         .byte   70
22397         .byte   -123
22398         .byte   0
22399         .byte   4
22400         .byte   1
22401         .byte   8
22402         .hword  256
22403         .byte   2
22404         .byte   2
22405         .hword  1024
22406         .hword  287
22407         .byte   1
22408         .byte   0
22409         .byte   24
22410         .byte   32
22411         .byte   1
22412         .byte   0
22413         .byte   1
22414         .byte   0
22415         .byte   0
22416         .zero   5
22417         .byte   6
22418         .byte   44
22419         .byte   -120
22420         .byte   5
22421         .byte   -58
22422         .byte   -119
22423         .byte   0
22424         .byte   4
22425         .byte   2
22426         .byte   8
22427         .hword  256
22428         .byte   2
22429         .byte   2
22430         .hword  2048
22431         .hword  287
22432         .byte   1
22433         .byte   0
22434         .byte   24
22435         .byte   32
22436         .byte   1
22437         .byte   0
22438         .byte   1
22439         .byte   0
22440         .byte   0
22441         .zero   5
22442         .byte   5
22443         .byte   44
22444         .byte   -120
22445         .byte   36
22446         .byte   75
22447         .byte   -87
22448         .byte   0
22449         .byte   4
22450         .byte   1
22451         .byte   16
22452         .hword  256
22453         .byte   2
22454         .byte   2
22455         .hword  2048
22456         .hword  287
22457         .byte   1
22458         .byte   0
22459         .byte   24
22460         .byte   32
22461         .byte   1
22462         .byte   0
22463         .byte   1
22464         .byte   0
22465         .byte   0
22466         .zero   5
22467         .byte   6
22468         .byte   44
22469         .byte   104
22470         .byte   0
22471         .byte   39
22472         .byte   -87
22473         .byte   0
22474         .byte   4
22475         .byte   1
22476         .byte   16
22477         .hword  128
22478         .byte   1
22479         .byte   2
22480         .hword  2048
22481         .hword  287
22482         .byte   0
22483         .byte   0
22484         .byte   24
22485         .byte   32
22486         .byte   1
22487         .byte   0
22488         .byte   1
22489         .byte   0
22490         .byte   0
22491         .zero   5
22492         .byte   5
22493         .byte   44
22494         .byte   100
22495         .byte   100
22496         .byte   86
22497         .byte   -91
22498         .byte   0
22499         .byte   4
22500         .byte   1
22501         .byte   24
22502         .hword  512
22503         .byte   2
22504         .byte   2
22505         .hword  700
22506         .hword  479
22507         .byte   4
22508         .byte   18
22509         .byte   60
22510         .byte   32
22511         .byte   1
22512         .byte   0
22513         .byte   1
22514         .byte   0
22515         .byte   0
22516         .zero   5
22517         .byte   6
22518         .byte   44
22519         .byte   -124
22520         .byte   -59
22521         .byte   75
22522         .byte   -87
22523         .byte   0
22524         .byte   4
22525         .byte   2
22526         .byte   16
22527         .hword  256
22528         .byte   2
22529         .byte   2
22530         .hword  2048
22531         .hword  479
22532         .byte   3
22533         .byte   17
22534         .byte   40
22535         .byte   32
22536         .byte   1
22537         .byte   0
22538         .byte   1
22539         .byte   0
22540         .byte   0
22541         .zero   5
22542         .byte   6
22543         .byte   44
22544         .byte   -43
22545         .byte   -47
22546         .byte   -90
22547         .byte   104
22548         .byte   0
22549         .byte   4
22550         .byte   2
22551         .byte   8
22552         .hword  64
22553         .byte   1
22554         .byte   2
22555         .hword  2048
22556         .hword  279
22557         .byte   0
22558         .byte   0
22559         .byte   24
22560         .byte   32
22561         .byte   1
22562         .byte   0
22563         .byte   1
22564         .byte   0
22565         .byte   0
22566         .zero   5
22567         .byte   6
22568         .byte   -83
22569         .byte   -34
22570         .byte   -108
22571         .byte   -46
22572         .byte   4
22573         .byte   67
22574         .byte   2
22575         .byte   1
22576         .byte   16
22577         .hword  256
22578         .byte   2
22579         .byte   2
22580         .hword  2048
22581         .hword  473
22582         .byte   1
22583         .byte   1
22584         .byte   24
22585         .byte   32
22586         .byte   4
22587         .byte   0
22588         .byte   3
22589         .byte   0
22590         .byte   0
22591         .zero   5
22592         .byte   6
22593         .byte   -83
22594         .byte   -41
22595         .byte   -108
22596         .byte   -38
22597         .byte   116
22598         .byte   -61
22599         .byte   2
22600         .byte   1
22601         .byte   16
22602         .hword  256
22603         .byte   2
22604         .byte   2
22605         .hword  1024
22606         .hword  473
22607         .byte   1
22608         .byte   2
22609         .byte   40
22610         .byte   32
22611         .byte   4
22612         .byte   0
22613         .byte   3
22614         .byte   0
22615         .byte   0
22616         .zero   5
22617         .byte   6
22618         .byte   -83
22619         .byte   -41
22620         .byte   -108
22621         .byte   -111
22622         .byte   96
22623         .byte   68
22624         .byte   2
22625         .byte   1
22626         .byte   16
22627         .hword  256
22628         .byte   2
22629         .byte   2
22630         .hword  1046
22631         .hword  473
22632         .byte   1
22633         .byte   3
22634         .byte   40
22635         .byte   32
22636         .byte   4
22637         .byte   1
22638         .byte   3
22639         .byte   0
22640         .byte   0
22641         .zero   5
22642         .byte   6
22643         .byte   -83
22644         .byte   -34
22645         .byte   -108
22646         .byte   -38
22647         .byte   116
22648         .byte   -60
22649         .byte   2
22650         .byte   1
22651         .byte   16
22652         .hword  256
22653         .byte   2
22654         .byte   2
22655         .hword  2090
22656         .hword  473
22657         .byte   1
22658         .byte   4
22659         .byte   40
22660         .byte   32
22661         .byte   4
22662         .byte   1
22663         .byte   3
22664         .byte   0
22665         .byte   0
22666         .zero   5
22667         .byte   6
22668         .byte   -83
22669         .byte   -34
22670         .byte   -108
22671         .byte   -21
22672         .byte   116
22673         .byte   68
22674         .byte   2
22675         .byte   1
22676         .byte   32
22677         .hword  256
22678         .byte   2
22679         .byte   2
22680         .hword  1066
22681         .hword  473
22682         .byte   1
22683         .byte   3
22684         .byte   40
22685         .byte   32
22686         .byte   4
22687         .byte   1
22688         .byte   3
22689         .byte   0
22690         .byte   0
22691         .zero   5
22692         .byte   6
22693         .byte   -83
22694         .byte   -43
22695         .byte   -108
22696         .byte   -38
22697         .byte   116
22698         .byte   -60
22699         .byte   2
22700         .byte   1
22701         .byte   16
22702         .hword  256
22703         .byte   2
22704         .byte   2
22705         .hword  530
22706         .hword  473
22707         .byte   1
22708         .byte   3
22709         .byte   40
22710         .byte   32
22711         .byte   4
22712         .byte   1
22713         .byte   3
22714         .byte   0
22715         .byte   0
22716         .zero   5
22717         .byte   6
22718         .byte   -83
22719         .byte   -41
22720         .byte   -108
22721         .byte   -102
22722         .byte   116
22723         .byte   66
22724         .byte   2
22725         .byte   1
22726         .byte   16
22727         .hword  256
22728         .byte   2
22729         .byte   2
22730         .hword  1024
22731         .hword  281
22732         .byte   1
22733         .byte   0
22734         .byte   24
22735         .byte   32
22736         .byte   4
22737         .byte   0
22738         .byte   3
22739         .byte   0
22740         .byte   0
22741         .zero   5
22742         .byte   6
22743         .byte   -83
22744         .byte   -34
22745         .byte   20
22746         .byte   -89
22747         .byte   66
22748         .byte   74
22749         .byte   2
22750         .byte   1
22751         .byte   32
22752         .hword  256
22753         .byte   2
22754         .byte   2
22755         .hword  1060
22756         .hword  473
22757         .byte   2
22758         .byte   5
22759         .byte   40
22760         .byte   32
22761         .byte   4
22762         .byte   1
22763         .byte   3
22764         .byte   0
22765         .byte   0
22766         .zero   5
22767         .byte   6
22768         .byte   -83
22769         .byte   -41
22770         .byte   20
22771         .byte   -98
22772         .byte   52
22773         .byte   74
22774         .byte   2
22775         .byte   1
22776         .byte   16
22777         .hword  256
22778         .byte   2
22779         .byte   2
22780         .hword  1056
22781         .hword  473
22782         .byte   2
22783         .byte   5
22784         .byte   40
22785         .byte   32
22786         .byte   4
22787         .byte   1
22788         .byte   3
22789         .byte   0
22790         .byte   0
22791         .zero   5
22792         .byte   6
22793         .byte   -83
22794         .byte   -34
22795         .byte   -108
22796         .byte   -89
22797         .byte   66
22798         .byte   72
22799         .byte   2
22800         .byte   1
22801         .byte   32
22802         .hword  256
22803         .byte   2
22804         .byte   2
22805         .hword  1060
22806         .hword  473
22807         .byte   2
22808         .byte   5
22809         .byte   40
22810         .byte   32
22811         .byte   4
22812         .byte   1
22813         .byte   3
22814         .byte   0
22815         .byte   0
22816         .zero   5
22817         .byte   6
22818         .byte   -83
22819         .byte   -34
22820         .byte   20
22821         .byte   -85
22822         .byte   66
22823         .byte   74
22824         .byte   2
22825         .byte   1
22826         .byte   32
22827         .hword  256
22828         .byte   2
22829         .byte   2
22830         .hword  1056
22831         .hword  1497
22832         .byte   2
22833         .byte   6
22834         .byte   40
22835         .byte   32
22836         .byte   3
22837         .byte   1
22838         .byte   3
22839         .byte   0
22840         .byte   0
22841         .zero   5
22842         .byte   6
22843         .byte   -83
22844         .byte   58
22845         .byte   20
22846         .byte   -85
22847         .byte   66
22848         .byte   74
22849         .byte   2
22850         .byte   1
22851         .byte   32
22852         .hword  256
22853         .byte   2
22854         .byte   2
22855         .hword  2092
22856         .hword  1497
22857         .byte   2
22858         .byte   5
22859         .byte   40
22860         .byte   32
22861         .byte   3
22862         .byte   1
22863         .byte   3
22864         .byte   0
22865         .byte   0
22866         .zero   5
22867         .byte   6
22868         .byte   -119
22869         .byte   100
22870         .byte   68
22871         .byte   75
22872         .byte   -87
22873         .byte   0
22874         .byte   7
22875         .byte   1
22876         .byte   16
22877         .hword  256
22878         .byte   2
22879         .byte   2
22880         .hword  2048
22881         .hword  479
22882         .byte   3
22883         .byte   17
22884         .byte   40
22885         .byte   32
22886         .byte   1
22887         .byte   0
22888         .byte   1
22889         .byte   0
22890         .byte   0
22891         .zero   5
22892         .byte   6
22893         .byte   -119
22894         .byte   -120
22895         .byte   36
22896         .byte   75
22897         .byte   -87
22898         .byte   -124
22899         .byte   7
22900         .byte   1
22901         .byte   16
22902         .hword  256
22903         .byte   2
22904         .byte   2
22905         .hword  2048
22906         .hword  479
22907         .byte   3
22908         .byte   17
22909         .byte   40
22910         .byte   32
22911         .byte   1
22912         .byte   0
22913         .byte   1
22914         .byte   0
22915         .byte   0
22916         .zero   5
22917         .byte   6
22918         .byte   -119
22919         .byte   -120
22920         .byte   36
22921         .byte   75
22922         .byte   -87
22923         .byte   0
22924         .byte   7
22925         .byte   1
22926         .byte   16
22927         .hword  256
22928         .byte   2
22929         .byte   2
22930         .hword  2048
22931         .hword  279
22932         .byte   1
22933         .byte   0
22934         .byte   24
22935         .byte   32
22936         .byte   1
22937         .byte   0
22938         .byte   1
22939         .byte   0
22940         .byte   0
22941         .zero   5
22942         .byte   6
22943         .byte   -119
22944         .byte   104
22945         .byte   36
22946         .byte   74
22947         .byte   -87
22948         .byte   0
22949         .byte   7
22950         .byte   1
22951         .byte   8
22952         .hword  256
22953         .byte   2
22954         .byte   2
22955         .hword  2048
22956         .hword  279
22957         .byte   1
22958         .byte   0
22959         .byte   24
22960         .byte   32
22961         .byte   1
22962         .byte   0
22963         .byte   1
22964         .byte   0
22965         .byte   0
22966         .zero   5
22967         .byte   6
22968         .byte   -119
22969         .byte   104
22970         .byte   4
22971         .byte   74
22972         .byte   -87
22973         .byte   0
22974         .byte   7
22975         .byte   1
22976         .byte   8
22977         .hword  256
22978         .byte   2
22979         .byte   2
22980         .hword  2048
22981         .hword  279
22982         .byte   1
22983         .byte   0
22984         .byte   24
22985         .byte   32
22986         .byte   1
22987         .byte   0
22988         .byte   1
22989         .byte   0
22990         .byte   0
22991         .zero   5
22992         .byte   6
22993         .byte   -119
22994         .byte   -41
22995         .byte   -108
22996         .byte   62
22997         .byte   -124
22998         .byte   0
22999         .byte   7
23000         .byte   1
23001         .byte   8
23002         .hword  256
23003         .byte   2
23004         .byte   2
23005         .hword  2048
23006         .hword  279
23007         .byte   1
23008         .byte   0
23009         .byte   24
23010         .byte   32
23011         .byte   1
23012         .byte   0
23013         .byte   1
23014         .byte   0
23015         .byte   0
23016         .zero   5
23017         .byte   6
23018         .byte   -119
23019         .byte   104
23020         .byte   4
23021         .byte   70
23022         .byte   -87
23023         .byte   0
23024         .byte   7
23025         .byte   1
23026         .byte   8
23027         .hword  256
23028         .byte   2
23029         .byte   2
23030         .hword  2048
23031         .hword  279
23032         .byte   1
23033         .byte   0
23034         .byte   24
23035         .byte   32
23036         .byte   1
23037         .byte   0
23038         .byte   1
23039         .byte   0
23040         .byte   0
23041         .zero   5
23042         .byte   6
23043         .byte   -104
23044         .byte   -41
23045         .byte   -124
23046         .byte   -109
23047         .byte   114
23048         .byte   87
23049         .byte   1
23050         .byte   1
23051         .byte   32
23052         .hword  256
23053         .byte   2
23054         .byte   1
23055         .hword  1060
23056         .hword  1473
23057         .byte   2
23058         .byte   33
23059         .byte   40
23060         .byte   32
23061         .byte   2
23062         .byte   1
23063         .byte   1
23064         .byte   0
23065         .byte   0
23066         .zero   5
23067         .byte   6
23068         .byte   -104
23069         .byte   -34
23070         .byte   -124
23071         .byte   -109
23072         .byte   114
23073         .byte   87
23074         .byte   1
23075         .byte   1
23076         .byte   32
23077         .hword  256
23078         .byte   2
23079         .byte   1
23080         .hword  2092
23081         .hword  1473
23082         .byte   2
23083         .byte   33
23084         .byte   40
23085         .byte   32
23086         .byte   2
23087         .byte   1
23088         .byte   1
23089         .byte   0
23090         .byte   0
23091         .zero   5
23092         .byte   6
23093         .byte   -104
23094         .byte   58
23095         .byte   -123
23096         .byte   -109
23097         .byte   118
23098         .byte   87
23099         .byte   1
23100         .byte   2
23101         .byte   32
23102         .hword  256
23103         .byte   2
23104         .byte   1
23105         .hword  2092
23106         .hword  1505
23107         .byte   2
23108         .byte   33
23109         .byte   40
23110         .byte   32
23111         .byte   2
23112         .byte   1
23113         .byte   1
23114         .byte   0
23115         .byte   0
23116         .zero   5
23117         .byte   6
23118         .byte   -104
23119         .byte   -43
23120         .byte   -124
23121         .byte   50
23122         .byte   114
23123         .byte   86
23124         .byte   1
23125         .byte   1
23126         .byte   16
23127         .hword  128
23128         .byte   2
23129         .byte   1
23130         .hword  2056
23131         .hword  1473
23132         .byte   2
23133         .byte   33
23134         .byte   40
23135         .byte   32
23136         .byte   2
23137         .byte   1
23138         .byte   1
23139         .byte   0
23140         .byte   0
23141         .zero   5
23142         .byte   6
23143         .byte   -104
23144         .byte   -41
23145         .byte   -108
23146         .byte   50
23147         .byte   118
23148         .byte   86
23149         .byte   1
23150         .byte   1
23151         .byte   16
23152         .hword  128
23153         .byte   2
23154         .byte   2
23155         .hword  2058
23156         .hword  1489
23157         .byte   2
23158         .byte   33
23159         .byte   40
23160         .byte   32
23161         .byte   2
23162         .byte   1
23163         .byte   1
23164         .byte   0
23165         .byte   0
23166         .zero   5
23167         .byte   6
23168         .byte   -104
23169         .byte   -34
23170         .byte   -108
23171         .byte   -126
23172         .byte   118
23173         .byte   86
23174         .byte   1
23175         .byte   1
23176         .byte   16
23177         .hword  256
23178         .byte   2
23179         .byte   2
23180         .hword  2062
23181         .hword  1489
23182         .byte   1
23183         .byte   33
23184         .byte   40
23185         .byte   32
23186         .byte   2
23187         .byte   1
23188         .byte   1
23189         .byte   0
23190         .byte   0
23191         .zero   5
23192         .byte   6
23193         .byte   -104
23194         .byte   -34
23195         .byte   -108
23196         .byte   -109
23197         .byte   118
23198         .byte   80
23199         .byte   1
23200         .byte   1
23201         .byte   32
23202         .hword  256
23203         .byte   2
23204         .byte   2
23205         .hword  1066
23206         .hword  1497
23207         .byte   2
23208         .byte   34
23209         .byte   40
23210         .byte   32
23211         .byte   3
23212         .byte   1
23213         .byte   1
23214         .byte   0
23215         .byte   0
23216         .zero   5
23217         .byte   6
23218         .byte   -104
23219         .byte   58
23220         .byte   -107
23221         .byte   -109
23222         .byte   122
23223         .byte   80
23224         .byte   1
23225         .byte   2
23226         .byte   32
23227         .hword  256
23228         .byte   2
23229         .byte   2
23230         .hword  1066
23231         .hword  1497
23232         .byte   2
23233         .byte   34
23234         .byte   40
23235         .byte   32
23236         .byte   3
23237         .byte   1
23238         .byte   1
23239         .byte   0
23240         .byte   0
23241         .zero   5
23242         .byte   6
23243         .byte   -104
23244         .byte   -41
23245         .byte   -108
23246         .byte   50
23247         .byte   118
23248         .byte   85
23249         .byte   1
23250         .byte   1
23251         .byte   16
23252         .hword  128
23253         .byte   2
23254         .byte   2
23255         .hword  2050
23256         .hword  401
23257         .byte   2
23258         .byte   0
23259         .byte   24
23260         .byte   32
23261         .byte   1
23262         .byte   1
23263         .byte   1
23264         .byte   0
23265         .byte   0
23266         .zero   5
23267         .byte   6
23268         .byte   -104
23269         .byte   -34
23270         .byte   -108
23271         .byte   -109
23272         .byte   118
23273         .byte   87
23274         .byte   1
23275         .byte   1
23276         .byte   32
23277         .hword  256
23278         .byte   2
23279         .byte   2
23280         .hword  1058
23281         .hword  1497
23282         .byte   2
23283         .byte   33
23284         .byte   40
23285         .byte   32
23286         .byte   3
23287         .byte   1
23288         .byte   1
23289         .byte   0
23290         .byte   0
23291         .zero   5
23292         .byte   6
23293         .byte   -104
23294         .byte   -41
23295         .byte   -124
23296         .byte   -109
23297         .byte   114
23298         .byte   80
23299         .byte   1
23300         .byte   1
23301         .byte   32
23302         .hword  256
23303         .byte   2
23304         .byte   1
23305         .hword  1060
23306         .hword  1473
23307         .byte   2
23308         .byte   34
23309         .byte   40
23310         .byte   32
23311         .byte   3
23312         .byte   1
23313         .byte   1
23314         .byte   0
23315         .byte   0
23316         .zero   5
23317         .byte   6
23318         .byte   -104
23319         .byte   -34
23320         .byte   -108
23321         .byte   -109
23322         .byte   118
23323         .byte   81
23324         .byte   1
23325         .byte   1
23326         .byte   32
23327         .hword  256
23328         .byte   2
23329         .byte   2
23330         .hword  1074
23331         .hword  1497
23332         .byte   2
23333         .byte   35
23334         .byte   40
23335         .byte   32
23336         .byte   3
23337         .byte   1
23338         .byte   4
23339         .byte   0
23340         .byte   0
23341         .zero   5
23342         .byte   6
23343         .byte   -104
23344         .byte   58
23345         .byte   -108
23346         .byte   -109
23347         .byte   118
23348         .byte   81
23349         .byte   1
23350         .byte   1
23351         .byte   32
23352         .hword  256
23353         .byte   2
23354         .byte   2
23355         .hword  2106
23356         .hword  1497
23357         .byte   2
23358         .byte   35
23359         .byte   40
23360         .byte   32
23361         .byte   3
23362         .byte   1
23363         .byte   4
23364         .byte   0
23365         .byte   0
23366         .zero   5
23367         .byte   6
23368         .byte   -104
23369         .byte   -41
23370         .byte   -124
23371         .byte   -109
23372         .byte   114
23373         .byte   81
23374         .byte   1
23375         .byte   1
23376         .byte   32
23377         .hword  256
23378         .byte   2
23379         .byte   1
23380         .hword  1056
23381         .hword  1497
23382         .byte   2
23383         .byte   35
23384         .byte   40
23385         .byte   32
23386         .byte   3
23387         .byte   1
23388         .byte   4
23389         .byte   0
23390         .byte   0
23391         .zero   5
23392         .byte   6
23393         .byte   69
23394         .byte   -34
23395         .byte   -108
23396         .byte   -109
23397         .byte   118
23398         .byte   87
23399         .byte   8
23400         .byte   1
23401         .byte   32
23402         .hword  256
23403         .byte   2
23404         .byte   2
23405         .hword  1058
23406         .hword  1497
23407         .byte   2
23408         .byte   66
23409         .byte   40
23410         .byte   32
23411         .byte   3
23412         .byte   1
23413         .byte   1
23414         .byte   0
23415         .byte   0
23416         .zero   5
23417         .byte   6
23418         .byte   69
23419         .byte   -41
23420         .byte   -124
23421         .byte   -109
23422         .byte   114
23423         .byte   87
23424         .byte   8
23425         .byte   1
23426         .byte   32
23427         .hword  256
23428         .byte   2
23429         .byte   1
23430         .hword  1060
23431         .hword  1473
23432         .byte   2
23433         .byte   66
23434         .byte   40
23435         .byte   32
23436         .byte   2
23437         .byte   1
23438         .byte   1
23439         .byte   0
23440         .byte   0
23441         .zero   5
23442         .byte   6
23443         .byte   69
23444         .byte   -34
23445         .byte   -92
23446         .byte   -126
23447         .byte   118
23448         .byte   86
23449         .byte   8
23450         .byte   1
23451         .byte   16
23452         .hword  256
23453         .byte   2
23454         .byte   2
23455         .hword  2082
23456         .hword  473
23457         .byte   1
23458         .byte   65
23459         .byte   40
23460         .byte   32
23461         .byte   3
23462         .byte   1
23463         .byte   1
23464         .byte   0
23465         .byte   0
23466         .zero   5
23467         .byte   6
23468         .byte   69
23469         .byte   -34
23470         .byte   -108
23471         .byte   -109
23472         .byte   118
23473         .byte   80
23474         .byte   8
23475         .byte   1
23476         .byte   32
23477         .hword  256
23478         .byte   2
23479         .byte   2
23480         .hword  1066
23481         .hword  1497
23482         .byte   2
23483         .byte   67
23484         .byte   40
23485         .byte   32
23486         .byte   3
23487         .byte   1
23488         .byte   1
23489         .byte   0
23490         .byte   0
23491         .zero   5
23492         .byte   6
23493         .byte   69
23494         .byte   -41
23495         .byte   -124
23496         .byte   -109
23497         .byte   114
23498         .byte   80
23499         .byte   8
23500         .byte   1
23501         .byte   32
23502         .hword  256
23503         .byte   2
23504         .byte   1
23505         .hword  1060
23506         .hword  1473
23507         .byte   2
23508         .byte   67
23509         .byte   40
23510         .byte   32
23511         .byte   3
23512         .byte   1
23513         .byte   1
23514         .byte   0
23515         .byte   0
23516         .zero   5
23517         .byte   6
23518         .byte   69
23519         .byte   -34
23520         .byte   -92
23521         .byte   -126
23522         .byte   118
23523         .byte   -41
23524         .byte   8
23525         .byte   1
23526         .byte   16
23527         .hword  256
23528         .byte   2
23529         .byte   2
23530         .hword  2090
23531         .hword  1241
23532         .byte   1
23533         .byte   66
23534         .byte   40
23535         .byte   32
23536         .byte   3
23537         .byte   1
23538         .byte   1
23539         .byte   0
23540         .byte   0
23541         .zero   5
23542         .byte   6
23543         .byte   69
23544         .byte   -34
23545         .byte   -124
23546         .byte   -109
23547         .byte   114
23548         .byte   87
23549         .byte   8
23550         .byte   1
23551         .byte   32
23552         .hword  256
23553         .byte   2
23554         .byte   1
23555         .hword  2092
23556         .hword  1473
23557         .byte   2
23558         .byte   66
23559         .byte   40
23560         .byte   32
23561         .byte   3
23562         .byte   1
23563         .byte   1
23564         .byte   0
23565         .byte   0
23566         .zero   5
23567         .byte   6
23568         .byte   69
23569         .byte   58
23570         .byte   -108
23571         .byte   -109
23572         .byte   118
23573         .byte   81
23574         .byte   8
23575         .byte   1
23576         .byte   32
23577         .hword  256
23578         .byte   2
23579         .byte   2
23580         .hword  2106
23581         .hword  1497
23582         .byte   2
23583         .byte   68
23584         .byte   40
23585         .byte   32
23586         .byte   3
23587         .byte   1
23588         .byte   4
23589         .byte   0
23590         .byte   0
23591         .zero   5
23592         .byte   6
23593         .byte   69
23594         .byte   -34
23595         .byte   -108
23596         .byte   -109
23597         .byte   118
23598         .byte   81
23599         .byte   8
23600         .byte   1
23601         .byte   32
23602         .hword  256
23603         .byte   2
23604         .byte   2
23605         .hword  1074
23606         .hword  1497
23607         .byte   2
23608         .byte   68
23609         .byte   40
23610         .byte   32
23611         .byte   3
23612         .byte   1
23613         .byte   4
23614         .byte   0
23615         .byte   0
23616         .zero   5
23617         .byte   6
23618         .byte   69
23619         .byte   58
23620         .byte   -92
23621         .byte   -109
23622         .byte   122
23623         .byte   80
23624         .byte   8
23625         .byte   1
23626         .byte   32
23627         .hword  256
23628         .byte   2
23629         .byte   2
23630         .hword  2138
23631         .hword  1497
23632         .byte   2
23633         .byte   0
23634         .byte   40
23635         .byte   32
23636         .byte   3
23637         .byte   1
23638         .byte   1
23639         .byte   0
23640         .byte   0
23641         .zero   5
23642         .byte   6
23643         .byte   -20
23644         .byte   -41
23645         .byte   -108
23646         .byte   126
23647         .byte   100
23648         .byte   68
23649         .byte   0
23650         .byte   1
23651         .byte   16
23652         .hword  128
23653         .byte   2
23654         .byte   2
23655         .hword  2048
23656         .hword  473
23657         .byte   2
23658         .byte   49
23659         .byte   60
23660         .byte   36
23661         .byte   3
23662         .byte   0
23663         .byte   3
23664         .byte   0
23665         .byte   0
23666         .zero   5
23667         .byte   6
23668         .byte   -20
23669         .byte   -34
23670         .byte   -43
23671         .byte   126
23672         .byte   104
23673         .byte   68
23674         .byte   0
23675         .byte   2
23676         .byte   16
23677         .hword  128
23678         .byte   2
23679         .byte   2
23680         .hword  2048
23681         .hword  505
23682         .byte   2
23683         .byte   49
23684         .byte   60
23685         .byte   36
23686         .byte   3
23687         .byte   0
23688         .byte   3
23689         .byte   0
23690         .byte   0
23691         .zero   5
23692         .byte   6
23693         .byte   -20
23694         .byte   -41
23695         .byte   -108
23696         .byte   122
23697         .byte   84
23698         .byte   67
23699         .byte   0
23700         .byte   1
23701         .byte   16
23702         .hword  128
23703         .byte   2
23704         .byte   2
23705         .hword  2076
23706         .hword  409
23707         .byte   2
23708         .byte   0
23709         .byte   40
23710         .byte   36
23711         .byte   3
23712         .byte   1
23713         .byte   3
23714         .byte   0
23715         .byte   0
23716         .zero   5
23717         .byte   6
23718         .byte   -20
23719         .byte   -34
23720         .byte   -43
23721         .byte   122
23722         .byte   88
23723         .byte   67
23724         .byte   0
23725         .byte   2
23726         .byte   16
23727         .hword  128
23728         .byte   2
23729         .byte   2
23730         .hword  2076
23731         .hword  441
23732         .byte   2
23733         .byte   0
23734         .byte   40
23735         .byte   36
23736         .byte   3
23737         .byte   1
23738         .byte   3
23739         .byte   0
23740         .byte   0
23741         .zero   5
23742         .byte   6
23743         .byte   -20
23744         .byte   -43
23745         .byte   -108
23746         .byte   118
23747         .byte   84
23748         .byte   67
23749         .byte   0
23750         .byte   1
23751         .byte   16
23752         .hword  128
23753         .byte   2
23754         .byte   2
23755         .hword  1038
23756         .hword  281
23757         .byte   2
23758         .byte   0
23759         .byte   24
23760         .byte   36
23761         .byte   3
23762         .byte   1
23763         .byte   3
23764         .byte   0
23765         .byte   0
23766         .zero   5
23767         .byte   6
23768         .byte   -20
23769         .byte   -41
23770         .byte   20
23771         .byte   118
23772         .byte   84
23773         .byte   -62
23774         .byte   0
23775         .byte   1
23776         .byte   16
23777         .hword  128
23778         .byte   2
23779         .byte   2
23780         .hword  2076
23781         .hword  1169
23782         .byte   2
23783         .byte   0
23784         .byte   24
23785         .byte   40
23786         .byte   3
23787         .byte   1
23788         .byte   3
23789         .byte   0
23790         .byte   0
23791         .zero   5
23792         .section        .rodata.str1.1,"aMS",%progbits,1
23793 .LC0:
23794         .string "Context allocation failed\n"
23795 .LC1:
23796         .string "phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\n"
23797 .LC2:
23798         .string "FLASH INFO:\n"
23799 .LC3:
23800         .string "FLASH ID: %x\n"
23801 .LC4:
23802         .string "Device Capacity: %d MB\n"
23803 .LC5:
23804         .string "FMWAIT: %x %x %x %x\n"
23805 .LC6:
23806         .string "FTL INFO:\n"
23807 .LC7:
23808         .string "g_MaxLpn = 0x%x\n"
23809 .LC8:
23810         .string "g_VaildLpn = 0x%x\n"
23811 .LC9:
23812         .string "read_page_count = 0x%x\n"
23813 .LC10:
23814         .string "discard_page_count = 0x%x\n"
23815 .LC11:
23816         .string "write_page_count = 0x%x\n"
23817 .LC12:
23818         .string "cache_write_count = 0x%x\n"
23819 .LC13:
23820         .string "l2p_write_count = 0x%x\n"
23821 .LC14:
23822         .string "gc_page_count = 0x%x\n"
23823 .LC15:
23824         .string "totle_write = %d MB\n"
23825 .LC16:
23826         .string "totle_read = %d MB\n"
23827 .LC17:
23828         .string "GSV = 0x%x\n"
23829 .LC18:
23830         .string "GDV = 0x%x\n"
23831 .LC19:
23832         .string "bad blk num = %d %d\n"
23833 .LC20:
23834         .string "free_superblocks = 0x%x\n"
23835 .LC21:
23836         .string "mlc_EC = 0x%x\n"
23837 .LC22:
23838         .string "slc_EC = 0x%x\n"
23839 .LC23:
23840         .string "avg_EC = 0x%x\n"
23841 .LC24:
23842         .string "sys_EC = 0x%x\n"
23843 .LC25:
23844         .string "max_EC = 0x%x\n"
23845 .LC26:
23846         .string "min_EC = 0x%x\n"
23847 .LC27:
23848         .string "PLT = 0x%x\n"
23849 .LC28:
23850         .string "POT = 0x%x\n"
23851 .LC29:
23852         .string "MaxSector = 0x%x\n"
23853 .LC30:
23854         .string "init_sys_blks_pp = 0x%x\n"
23855 .LC31:
23856         .string "sys_blks_pp = 0x%x\n"
23857 .LC32:
23858         .string "free sysblock = 0x%x\n"
23859 .LC33:
23860         .string "data_blks_pp = 0x%x\n"
23861 .LC34:
23862         .string "data_op_blks_pp = 0x%x\n"
23863 .LC35:
23864         .string "max_data_blks = 0x%x\n"
23865 .LC36:
23866         .string "Sys.id = 0x%x\n"
23867 .LC37:
23868         .string "Bbt.id = 0x%x\n"
23869 .LC38:
23870         .string "ACT.page = 0x%x\n"
23871 .LC39:
23872         .string "ACT.plane = 0x%x\n"
23873 .LC40:
23874         .string "ACT.id = 0x%x\n"
23875 .LC41:
23876         .string "ACT.mode = 0x%x\n"
23877 .LC42:
23878         .string "ACT.a_pages = 0x%x\n"
23879 .LC43:
23880         .string "ACT VPC = 0x%x\n"
23881 .LC44:
23882         .string "BUF.page = 0x%x\n"
23883 .LC45:
23884         .string "BUF.plane = 0x%x\n"
23885 .LC46:
23886         .string "BUF.id = 0x%x\n"
23887 .LC47:
23888         .string "BUF.mode = 0x%x\n"
23889 .LC48:
23890         .string "BUF.a_pages = 0x%x\n"
23891 .LC49:
23892         .string "BUF VPC = 0x%x\n"
23893 .LC50:
23894         .string "TMP.page = 0x%x\n"
23895 .LC51:
23896         .string "TMP.plane = 0x%x\n"
23897 .LC52:
23898         .string "TMP.id = 0x%x\n"
23899 .LC53:
23900         .string "TMP.mode = 0x%x\n"
23901 .LC54:
23902         .string "TMP.a_pages = 0x%x\n"
23903 .LC55:
23904         .string "GC.page = 0x%x\n"
23905 .LC56:
23906         .string "GC.plane = 0x%x\n"
23907 .LC57:
23908         .string "GC.id = 0x%x\n"
23909 .LC58:
23910         .string "GC.mode = 0x%x\n"
23911 .LC59:
23912         .string "GC.a_pages = 0x%x\n"
23913 .LC60:
23914         .string "WR_CHK = 0x%x %x %x %x\n"
23915 .LC61:
23916         .string "Read Err Cnt = 0x%x\n"
23917 .LC62:
23918         .string "Prog Err Cnt = 0x%x\n"
23919 .LC63:
23920         .string "gc_free_blk_th= 0x%x\n"
23921 .LC64:
23922         .string "gc_merge_free_blk_th= 0x%x\n"
23923 .LC65:
23924         .string "gc_skip_write_count= 0x%x\n"
23925 .LC66:
23926         .string "gc_blk_index= 0x%x\n"
23927 .LC67:
23928         .string "free min EC= 0x%x\n"
23929 .LC68:
23930         .string "free max EC= 0x%x\n"
23931 .LC69:
23932         .string "GC__SB VPC = 0x%x\n"
23933 .LC70:
23934         .string "%d. [0x%x]=0x%x 0x%x  0x%x\n"
23935 .LC71:
23936         .string "free %d. [0x%x] 0x%x  0x%x\n"
23937 .LC72:
23938         .string "%s\n"
23939 .LC73:
23940         .string "FTL version: 5.0.31 20160315"
23941 .LC74:
23942         .string "GetSwlReplaceBlock min_ec_id =%x %x\n"
23943 .LC75:
23944         .string "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x\n"
23945 .LC76:
23946         .string "FtlGcRefreshBlock  0x%x \n"
23947 .LC77:
23948         .string "FtlGcMarkBadPhyBlk %d 0x%x\n"
23949 .LC78:
23950         .string "%s error allocating memory. return -1\n"
23951 .LC79:
23952         .string "%s 0x%x:"
23953 .LC80:
23954         .string "%x "
23955 .LC81:
23956         .string ""
23957 .LC82:
23958         .string "%d statReg->V6.mtrans_cnt=%d flReg.V6.page_num=%d\n"
23959 .LC83:
23960         .string "nandc:"
23961 .LC84:
23962         .string "%d flReg.d32=%x %x\n"
23963 .LC85:
23964         .string "sdr read ok %x ecc=%d\n"
23965 .LC86:
23966         .string "sync para %d\n"
23967 .LC87:
23968         .string "TOG mode Read error %x %x\n"
23969 .LC88:
23970         .string "read retry status %x %x %x\n"
23971 .LC89:
23972         .string "ECC:%d\n"
23973 .LC90:
23974         .string "No.%d FLASH ID:%x %x %x %x %x %x\n"
23975 .LC91:
23976         .string "FlashLoadPhyInfo fail %x!!\n"
23977 .LC92:
23978         .string "ReadRetry pageadd=%x  ecc=%x err=%x\n"
23979 .LC93:
23980         .string "Read pageadd=%x  ecc=%x err=%x\n"
23981 .LC94:
23982         .string "spare:"
23983 .LC95:
23984         .string "FLFB:%d %d\n"
23985 .LC96:
23986         .string "no ect"
23987 .LC97:
23988         .string "slc mode"
23989 .LC98:
23990         .string "prog error: = %x\n"
23991 .LC99:
23992         .string "prog read error: = %x\n"
23993 .LC100:
23994         .string "prog read s error: = %x %x %x\n"
23995 .LC101:
23996         .string "prog read d error: = %x %x %x\n"
23997 .LC102:
23998         .string "FlashMakeFactorBbt %d\n"
23999 .LC103:
24000         .string "bad block:%d %d\n"
24001 .LC104:
24002         .string "FMFB:%d %d\n"
24003 .LC105:
24004         .string "E:bad block:%d\n"
24005 .LC106:
24006         .string "FMFB:Save %d %d\n"
24007 .LC107:
24008         .string "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\n"
24009 .LC108:
24010         .string "FtlBbmTblFlush error:%x\n"
24011 .LC109:
24012         .string "FtlGcFreeBadSuperBlk 0x%x\n"
24013 .LC110:
24014         .string "decrement_vpc_count %x = %d\n"
24015 .LC111:
24016         .string "spuer block %x vpn is 0\n "
24017 .LC112:
24018         .string "...%s enter...\n"
24019 .LC113:
24020         .string "FtlCheckVpc %x = %x  %x\n"
24021 .LC114:
24022         .string "Ftlwrite decrement_vpc_count %x = %d\n"
24023 .LC115:
24024         .string "FtlInit %x\n"
24025 .LC116:
24026         .string "%d GC datablk  = %x vpc %x %x\n"
24027 .LC117:
24028         .string "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\n"
24029 .LC118:
24030         .string "FtlWrite: lpa error:%x %x\n"
24031 .LC119:
24032         .string "BBT:"
24033 .LC120:
24034         .string "IdBlockReadData %x %x\n"
24035 .LC121:
24036         .string "IdBlockReadData %x %x ret= %x\n"
24037 .LC122:
24038         .string "IDBlockWriteData %x %x\n"
24039 .LC123:
24040         .string "IDBlockWriteData %x %x ret= %x\n"
24041 .LC124:
24042         .string "idblk:"
24043 .LC125:
24044         .string "idb reverse %x %x\n"
24045 .LC126:
24046         .string "write_idblock totle_sec %x %x\n"
24047 .LC127:
24048         .string "write and check error:%d idb=%x,offset=%x,r=%x,w=%x \n"
24049 .LC128:
24050         .string "write"
24051 .LC129:
24052         .string "read"
24053 .LC130:
24054         .string "write_idblock error\n"
24055 .LC131:
24056         .string "READ_SECTOR_IO\n"
24057 .LC132:
24058         .string "rk_copy_from_user error \n"
24059 .LC133:
24060         .string "READ_SECTOR_IO %x %x\n"
24061 .LC134:
24062         .string "rk_copy_to_user error\n"
24063 .LC135:
24064         .string "WRITE_SECTOR_IO\n"
24065 .LC136:
24066         .string "WRITE_SECTOR_IO %x %x\n"
24067 .LC137:
24068         .string "END_WRITE_SECTOR_IO\n"
24069 .LC138:
24070         .string "END_WRITE_SECTOR_IO %x %x\n"
24071 .LC139:
24072         .string "GET_FLASH_INFO_IO\n"
24073 .LC140:
24074         .string "GET_BAD_BLOCK_IO\n"
24075 .LC141:
24076         .string "bbt:"
24077 .LC142:
24078         .string "GET_LOCK_FLAG_IO\n"
24079 .LC143:
24080         .string "GET_PUBLIC_KEY_IO\n"
24081 .LC144:
24082         .string "RKNAND_GET_DRM_KEY\n"
24083 .LC145:
24084         .string "RKNAND_STORE_DRM_KEY\n"
24085 .LC146:
24086         .string "RKNAND_DIASBLE_SECURE_BOOT\n"
24087 .LC147:
24088         .string "RKNAND_ENASBLE_SECURE_BOOT\n"
24089 .LC148:
24090         .string "RKNAND_GET_SN_SECTOR\n"
24091 .LC149:
24092         .string "RKNAND_LOADER_UNLOCK\n"
24093 .LC150:
24094         .string "RKNAND_LOADER_STATUS\n"
24095 .LC151:
24096         .string "RKNAND_LOADER_LOCK\n"
24097 .LC152:
24098         .string "LockKey not match %d\n"
24099 .LC153:
24100         .string "RKNAND_GET_VENDOR_SECTOR\n"
24101 .LC154:
24102         .string "RKNAND_STORE_VENDOR_SECTOR\n"
24103 .LC155:
24104         .string "return ret = %lx\n"
24105 .LC156:
24106         .string "secureBootEn check error\n"
24107 .LC157:
24108         .string "rknand_sys_storage"
24109         .bss
24110         .align  3
24111 .LANCHOR0 = . + 0
24112         .type   NANDC_FMCTL, %object
24113         .size   NANDC_FMCTL, 4
24114 NANDC_FMCTL:
24115         .zero   4
24116         .type   NANDC_FMWAIT, %object
24117         .size   NANDC_FMWAIT, 4
24118 NANDC_FMWAIT:
24119         .zero   4
24120         .type   NANDC_FLCTL, %object
24121         .size   NANDC_FLCTL, 4
24122 NANDC_FLCTL:
24123         .zero   4
24124         .type   NANDC_BCHCTL, %object
24125         .size   NANDC_BCHCTL, 4
24126 NANDC_BCHCTL:
24127         .zero   4
24128         .type   NANDC_DLL_CTL_REG0, %object
24129         .size   NANDC_DLL_CTL_REG0, 4
24130 NANDC_DLL_CTL_REG0:
24131         .zero   4
24132         .type   NANDC_DLL_CTL_REG1, %object
24133         .size   NANDC_DLL_CTL_REG1, 4
24134 NANDC_DLL_CTL_REG1:
24135         .zero   4
24136         .type   NANDC_RANDMZ_CFG, %object
24137         .size   NANDC_RANDMZ_CFG, 4
24138 NANDC_RANDMZ_CFG:
24139         .zero   4
24140         .type   NANDC_FMWAIT_SYN, %object
24141         .size   NANDC_FMWAIT_SYN, 4
24142 NANDC_FMWAIT_SYN:
24143         .zero   4
24144         .type   gc_discard_updated, %object
24145         .size   gc_discard_updated, 4
24146 gc_discard_updated:
24147         .zero   4
24148         .type   SecureBootUnlockTryCount, %object
24149         .size   SecureBootUnlockTryCount, 4
24150 SecureBootUnlockTryCount:
24151         .zero   4
24152         .type   SecureBootCheckOK, %object
24153         .size   SecureBootCheckOK, 4
24154 SecureBootCheckOK:
24155         .zero   4
24156         .type   SecureBootEn, %object
24157         .size   SecureBootEn, 4
24158 SecureBootEn:
24159         .zero   4
24160         .type   gpVendor1Info, %object
24161         .size   gpVendor1Info, 8
24162 gpVendor1Info:
24163         .zero   8
24164         .type   gpVendor0Info, %object
24165         .size   gpVendor0Info, 8
24166 gpVendor0Info:
24167         .zero   8
24168         .type   g_idb_buffer, %object
24169         .size   g_idb_buffer, 8
24170 g_idb_buffer:
24171         .zero   8
24172         .type   gSnSectorData, %object
24173         .size   gSnSectorData, 512
24174 gSnSectorData:
24175         .zero   512
24176         .type   gpDrmKeyInfo, %object
24177         .size   gpDrmKeyInfo, 8
24178 gpDrmKeyInfo:
24179         .zero   8
24180         .type   gpBootConfig, %object
24181         .size   gpBootConfig, 8
24182 gpBootConfig:
24183         .zero   8
24184         .type   gLoaderBootInfo, %object
24185         .size   gLoaderBootInfo, 8
24186 gLoaderBootInfo:
24187         .zero   8
24188         .type   RK29_NANDC1_REG_BASE, %object
24189         .size   RK29_NANDC1_REG_BASE, 8
24190 RK29_NANDC1_REG_BASE:
24191         .zero   8
24192         .type   RK29_NANDC_REG_BASE, %object
24193         .size   RK29_NANDC_REG_BASE, 8
24194 RK29_NANDC_REG_BASE:
24195         .zero   8
24196         .type   gc_ink_free_return_value, %object
24197         .size   gc_ink_free_return_value, 2
24198 gc_ink_free_return_value:
24199         .zero   2
24200         .type   FtlUpdateVaildLpnCount, %object
24201         .size   FtlUpdateVaildLpnCount, 2
24202 FtlUpdateVaildLpnCount:
24203         .zero   2
24204         .type   g_ect_tbl_power_up_flush, %object
24205         .size   g_ect_tbl_power_up_flush, 2
24206 g_ect_tbl_power_up_flush:
24207         .zero   2
24208         .zero   2
24209         .type   last_cache_match_count, %object
24210         .size   last_cache_match_count, 4
24211 last_cache_match_count:
24212         .zero   4
24213         .type   g_LowFormat, %object
24214         .size   g_LowFormat, 4
24215 g_LowFormat:
24216         .zero   4
24217         .type   DeviceCapacity, %object
24218         .size   DeviceCapacity, 4
24219 DeviceCapacity:
24220         .zero   4
24221         .zero   4
24222         .type   FbbtBlk, %object
24223         .size   FbbtBlk, 16
24224 FbbtBlk:
24225         .zero   16
24226         .type   g_power_lost_recovery_flag, %object
24227         .size   g_power_lost_recovery_flag, 2
24228 g_power_lost_recovery_flag:
24229         .zero   2
24230         .type   c_mlc_erase_count_value, %object
24231         .size   c_mlc_erase_count_value, 2
24232 c_mlc_erase_count_value:
24233         .zero   2
24234         .zero   4
24235         .type   g_recovery_ppa_tbl, %object
24236         .size   g_recovery_ppa_tbl, 128
24237 g_recovery_ppa_tbl:
24238         .zero   128
24239         .type   g_recovery_page_min_ver, %object
24240         .size   g_recovery_page_min_ver, 4
24241 g_recovery_page_min_ver:
24242         .zero   4
24243         .type   g_recovery_page_num, %object
24244         .size   g_recovery_page_num, 4
24245 g_recovery_page_num:
24246         .zero   4
24247         .type   g_cur_erase_blk, %object
24248         .size   g_cur_erase_blk, 4
24249 g_cur_erase_blk:
24250         .zero   4
24251         .type   g_gc_skip_write_count, %object
24252         .size   g_gc_skip_write_count, 4
24253 g_gc_skip_write_count:
24254         .zero   4
24255         .type   g_gc_head_data_block_count, %object
24256         .size   g_gc_head_data_block_count, 4
24257 g_gc_head_data_block_count:
24258         .zero   4
24259         .type   g_gc_head_data_block, %object
24260         .size   g_gc_head_data_block, 4
24261 g_gc_head_data_block:
24262         .zero   4
24263         .type   g_ftl_nand_free_count, %object
24264         .size   g_ftl_nand_free_count, 4
24265 g_ftl_nand_free_count:
24266         .zero   4
24267         .type   g_in_swl_replace, %object
24268         .size   g_in_swl_replace, 4
24269 g_in_swl_replace:
24270         .zero   4
24271         .type   g_in_gc_progress, %object
24272         .size   g_in_gc_progress, 4
24273 g_in_gc_progress:
24274         .zero   4
24275         .type   g_all_blk_used_slc_mode, %object
24276         .size   g_all_blk_used_slc_mode, 4
24277 g_all_blk_used_slc_mode:
24278         .zero   4
24279         .type   g_max_erase_count, %object
24280         .size   g_max_erase_count, 4
24281 g_max_erase_count:
24282         .zero   4
24283         .type   g_totle_sys_slc_erase_count, %object
24284         .size   g_totle_sys_slc_erase_count, 4
24285 g_totle_sys_slc_erase_count:
24286         .zero   4
24287         .type   g_totle_slc_erase_count, %object
24288         .size   g_totle_slc_erase_count, 4
24289 g_totle_slc_erase_count:
24290         .zero   4
24291         .type   g_min_erase_count, %object
24292         .size   g_min_erase_count, 4
24293 g_min_erase_count:
24294         .zero   4
24295         .type   g_totle_avg_erase_count, %object
24296         .size   g_totle_avg_erase_count, 4
24297 g_totle_avg_erase_count:
24298         .zero   4
24299         .type   g_totle_mlc_erase_count, %object
24300         .size   g_totle_mlc_erase_count, 4
24301 g_totle_mlc_erase_count:
24302         .zero   4
24303         .type   g_totle_l2p_write_count, %object
24304         .size   g_totle_l2p_write_count, 4
24305 g_totle_l2p_write_count:
24306         .zero   4
24307         .type   g_totle_cache_write_count, %object
24308         .size   g_totle_cache_write_count, 4
24309 g_totle_cache_write_count:
24310         .zero   4
24311         .type   g_tmp_data_superblock_id, %object
24312         .size   g_tmp_data_superblock_id, 2
24313 g_tmp_data_superblock_id:
24314         .zero   2
24315         .zero   2
24316         .type   g_totle_read_page_count, %object
24317         .size   g_totle_read_page_count, 4
24318 g_totle_read_page_count:
24319         .zero   4
24320         .type   g_totle_discard_page_count, %object
24321         .size   g_totle_discard_page_count, 4
24322 g_totle_discard_page_count:
24323         .zero   4
24324         .type   g_totle_read_sector, %object
24325         .size   g_totle_read_sector, 4
24326 g_totle_read_sector:
24327         .zero   4
24328         .type   g_totle_write_sector, %object
24329         .size   g_totle_write_sector, 4
24330 g_totle_write_sector:
24331         .zero   4
24332         .type   g_totle_write_page_count, %object
24333         .size   g_totle_write_page_count, 4
24334 g_totle_write_page_count:
24335         .zero   4
24336         .type   g_totle_gc_page_count, %object
24337         .size   g_totle_gc_page_count, 4
24338 g_totle_gc_page_count:
24339         .zero   4
24340         .type   g_gc_blk_index, %object
24341         .size   g_gc_blk_index, 2
24342 g_gc_blk_index:
24343         .zero   2
24344         .type   g_gc_merge_free_blk_threshold, %object
24345         .size   g_gc_merge_free_blk_threshold, 2
24346 g_gc_merge_free_blk_threshold:
24347         .zero   2
24348         .type   g_gc_free_blk_threshold, %object
24349         .size   g_gc_free_blk_threshold, 2
24350 g_gc_free_blk_threshold:
24351         .zero   2
24352         .zero   6
24353         .type   g_gc_bad_block_temp_tbl, %object
24354         .size   g_gc_bad_block_temp_tbl, 34
24355 g_gc_bad_block_temp_tbl:
24356         .zero   34
24357         .type   g_gc_bad_block_gc_index, %object
24358         .size   g_gc_bad_block_gc_index, 2
24359 g_gc_bad_block_gc_index:
24360         .zero   2
24361         .type   g_gc_bad_block_temp_num, %object
24362         .size   g_gc_bad_block_temp_num, 2
24363 g_gc_bad_block_temp_num:
24364         .zero   2
24365         .type   g_gc_next_blk_1, %object
24366         .size   g_gc_next_blk_1, 2
24367 g_gc_next_blk_1:
24368         .zero   2
24369         .type   g_gc_next_blk, %object
24370         .size   g_gc_next_blk, 2
24371 g_gc_next_blk:
24372         .zero   2
24373         .type   g_gc_cur_blk_max_valid_pages, %object
24374         .size   g_gc_cur_blk_max_valid_pages, 2
24375 g_gc_cur_blk_max_valid_pages:
24376         .zero   2
24377         .type   g_gc_cur_blk_valid_pages, %object
24378         .size   g_gc_cur_blk_valid_pages, 2
24379 g_gc_cur_blk_valid_pages:
24380         .zero   2
24381         .type   g_gc_page_offset, %object
24382         .size   g_gc_page_offset, 2
24383 g_gc_page_offset:
24384         .zero   2
24385         .type   g_gc_blk_num, %object
24386         .size   g_gc_blk_num, 2
24387 g_gc_blk_num:
24388         .zero   2
24389         .zero   6
24390         .type   p_gc_blk_tbl, %object
24391         .size   p_gc_blk_tbl, 8
24392 p_gc_blk_tbl:
24393         .zero   8
24394         .type   p_gc_page_info, %object
24395         .size   p_gc_page_info, 8
24396 p_gc_page_info:
24397         .zero   8
24398         .type   g_sys_ext_data, %object
24399         .size   g_sys_ext_data, 512
24400 g_sys_ext_data:
24401         .zero   512
24402         .type   g_sys_save_data, %object
24403         .size   g_sys_save_data, 48
24404 g_sys_save_data:
24405         .zero   48
24406         .type   gp_last_act_superblock, %object
24407         .size   gp_last_act_superblock, 8
24408 gp_last_act_superblock:
24409         .zero   8
24410         .type   g_gc_superblock, %object
24411         .size   g_gc_superblock, 48
24412 g_gc_superblock:
24413         .zero   48
24414         .type   g_gc_temp_superblock, %object
24415         .size   g_gc_temp_superblock, 48
24416 g_gc_temp_superblock:
24417         .zero   48
24418         .type   g_buffer_superblock, %object
24419         .size   g_buffer_superblock, 48
24420 g_buffer_superblock:
24421         .zero   48
24422         .type   g_active_superblock, %object
24423         .size   g_active_superblock, 48
24424 g_active_superblock:
24425         .zero   48
24426         .type   g_num_data_superblocks, %object
24427         .size   g_num_data_superblocks, 2
24428 g_num_data_superblocks:
24429         .zero   2
24430         .type   g_num_free_superblocks, %object
24431         .size   g_num_free_superblocks, 2
24432 g_num_free_superblocks:
24433         .zero   2
24434         .zero   4
24435         .type   p_data_block_list_tail, %object
24436         .size   p_data_block_list_tail, 8
24437 p_data_block_list_tail:
24438         .zero   8
24439         .type   p_data_block_list_head, %object
24440         .size   p_data_block_list_head, 8
24441 p_data_block_list_head:
24442         .zero   8
24443         .type   p_free_data_block_list_head, %object
24444         .size   p_free_data_block_list_head, 8
24445 p_free_data_block_list_head:
24446         .zero   8
24447         .type   p_data_block_list_table, %object
24448         .size   p_data_block_list_table, 8
24449 p_data_block_list_table:
24450         .zero   8
24451         .type   g_l2p_last_update_region_id, %object
24452         .size   g_l2p_last_update_region_id, 2
24453 g_l2p_last_update_region_id:
24454         .zero   2
24455         .zero   6
24456         .type   p_l2p_map_buf, %object
24457         .size   p_l2p_map_buf, 8
24458 p_l2p_map_buf:
24459         .zero   8
24460         .type   p_l2p_ram_map, %object
24461         .size   p_l2p_ram_map, 8
24462 p_l2p_ram_map:
24463         .zero   8
24464         .type   g_totle_vendor_block, %object
24465         .size   g_totle_vendor_block, 2
24466 g_totle_vendor_block:
24467         .zero   2
24468         .zero   6
24469         .type   p_vendor_region_ppn_table, %object
24470         .size   p_vendor_region_ppn_table, 8
24471 p_vendor_region_ppn_table:
24472         .zero   8
24473         .type   p_vendor_block_ver_table, %object
24474         .size   p_vendor_block_ver_table, 8
24475 p_vendor_block_ver_table:
24476         .zero   8
24477         .type   p_vendor_block_valid_page_count, %object
24478         .size   p_vendor_block_valid_page_count, 8
24479 p_vendor_block_valid_page_count:
24480         .zero   8
24481         .type   p_vendor_block_table, %object
24482         .size   p_vendor_block_table, 8
24483 p_vendor_block_table:
24484         .zero   8
24485         .type   g_totle_map_block, %object
24486         .size   g_totle_map_block, 2
24487 g_totle_map_block:
24488         .zero   2
24489         .zero   6
24490         .type   p_map_region_ppn_table, %object
24491         .size   p_map_region_ppn_table, 8
24492 p_map_region_ppn_table:
24493         .zero   8
24494         .type   p_map_block_ver_table, %object
24495         .size   p_map_block_ver_table, 8
24496 p_map_block_ver_table:
24497         .zero   8
24498         .type   p_map_block_valid_page_count, %object
24499         .size   p_map_block_valid_page_count, 8
24500 p_map_block_valid_page_count:
24501         .zero   8
24502         .type   p_map_block_table, %object
24503         .size   p_map_block_table, 8
24504 p_map_block_table:
24505         .zero   8
24506         .type   p_valid_page_count_check_table, %object
24507         .size   p_valid_page_count_check_table, 8
24508 p_valid_page_count_check_table:
24509         .zero   8
24510         .type   p_valid_page_count_table, %object
24511         .size   p_valid_page_count_table, 8
24512 p_valid_page_count_table:
24513         .zero   8
24514         .type   g_totle_swl_count, %object
24515         .size   g_totle_swl_count, 4
24516 g_totle_swl_count:
24517         .zero   4
24518         .zero   4
24519         .type   p_swl_mul_table, %object
24520         .size   p_swl_mul_table, 8
24521 p_swl_mul_table:
24522         .zero   8
24523         .type   p_erase_count_table, %object
24524         .size   p_erase_count_table, 8
24525 p_erase_count_table:
24526         .zero   8
24527         .type   g_ect_tbl_info_size, %object
24528         .size   g_ect_tbl_info_size, 2
24529 g_ect_tbl_info_size:
24530         .zero   2
24531         .zero   6
24532         .type   gp_ect_tbl_info, %object
24533         .size   gp_ect_tbl_info, 8
24534 gp_ect_tbl_info:
24535         .zero   8
24536         .type   g_gc_num_req, %object
24537         .size   g_gc_num_req, 4
24538 g_gc_num_req:
24539         .zero   4
24540         .type   c_gc_page_buf_num, %object
24541         .size   c_gc_page_buf_num, 4
24542 c_gc_page_buf_num:
24543         .zero   4
24544         .type   gp_gc_page_buf_info, %object
24545         .size   gp_gc_page_buf_info, 8
24546 gp_gc_page_buf_info:
24547         .zero   8
24548         .type   p_gc_data_buf, %object
24549         .size   p_gc_data_buf, 8
24550 p_gc_data_buf:
24551         .zero   8
24552         .type   p_gc_spare_buf, %object
24553         .size   p_gc_spare_buf, 8
24554 p_gc_spare_buf:
24555         .zero   8
24556         .type   p_io_spare_buf, %object
24557         .size   p_io_spare_buf, 8
24558 p_io_spare_buf:
24559         .zero   8
24560         .type   p_io_data_buf_1, %object
24561         .size   p_io_data_buf_1, 8
24562 p_io_data_buf_1:
24563         .zero   8
24564         .type   p_io_data_buf_0, %object
24565         .size   p_io_data_buf_0, 8
24566 p_io_data_buf_0:
24567         .zero   8
24568         .type   p_sys_spare_buf, %object
24569         .size   p_sys_spare_buf, 8
24570 p_sys_spare_buf:
24571         .zero   8
24572         .type   p_vendor_data_buf, %object
24573         .size   p_vendor_data_buf, 8
24574 p_vendor_data_buf:
24575         .zero   8
24576         .type   p_sys_data_buf_1, %object
24577         .size   p_sys_data_buf_1, 8
24578 p_sys_data_buf_1:
24579         .zero   8
24580         .type   p_sys_data_buf, %object
24581         .size   p_sys_data_buf, 8
24582 p_sys_data_buf:
24583         .zero   8
24584         .type   g_wr_page_num, %object
24585         .size   g_wr_page_num, 4
24586 g_wr_page_num:
24587         .zero   4
24588         .zero   4
24589         .type   req_wr_io, %object
24590         .size   req_wr_io, 8
24591 req_wr_io:
24592         .zero   8
24593         .type   c_wr_page_buf_num, %object
24594         .size   c_wr_page_buf_num, 4
24595 c_wr_page_buf_num:
24596         .zero   4
24597         .zero   4
24598         .type   p_wr_io_data_buf, %object
24599         .size   p_wr_io_data_buf, 8
24600 p_wr_io_data_buf:
24601         .zero   8
24602         .type   p_wr_io_spare_buf, %object
24603         .size   p_wr_io_spare_buf, 8
24604 p_wr_io_spare_buf:
24605         .zero   8
24606         .type   p_plane_order_table, %object
24607         .size   p_plane_order_table, 32
24608 p_plane_order_table:
24609         .zero   32
24610         .type   g_req_cache, %object
24611         .size   g_req_cache, 8
24612 g_req_cache:
24613         .zero   8
24614         .type   req_gc_dst, %object
24615         .size   req_gc_dst, 8
24616 req_gc_dst:
24617         .zero   8
24618         .type   req_gc, %object
24619         .size   req_gc, 8
24620 req_gc:
24621         .zero   8
24622         .type   req_erase, %object
24623         .size   req_erase, 8
24624 req_erase:
24625         .zero   8
24626         .type   req_prgm, %object
24627         .size   req_prgm, 8
24628 req_prgm:
24629         .zero   8
24630         .type   req_read, %object
24631         .size   req_read, 8
24632 req_read:
24633         .zero   8
24634         .type   req_sys, %object
24635         .size   req_sys, 56
24636 req_sys:
24637         .zero   56
24638         .type   gVendorBlkInfo, %object
24639         .size   gVendorBlkInfo, 64
24640 gVendorBlkInfo:
24641         .zero   64
24642         .type   gL2pMapInfo, %object
24643         .size   gL2pMapInfo, 64
24644 gL2pMapInfo:
24645         .zero   64
24646         .type   gSysFreeQueue, %object
24647         .size   gSysFreeQueue, 2056
24648 gSysFreeQueue:
24649         .zero   2056
24650         .type   gSysInfo, %object
24651         .size   gSysInfo, 12
24652 gSysInfo:
24653         .zero   12
24654         .zero   4
24655         .type   gBbtInfo, %object
24656         .size   gBbtInfo, 96
24657 gBbtInfo:
24658         .zero   96
24659         .type   g_inkDie_check_enable, %object
24660         .size   g_inkDie_check_enable, 4
24661 g_inkDie_check_enable:
24662         .zero   4
24663         .type   g_SlcPartLbaEndSector, %object
24664         .size   g_SlcPartLbaEndSector, 4
24665 g_SlcPartLbaEndSector:
24666         .zero   4
24667         .type   g_MaxLbn, %object
24668         .size   g_MaxLbn, 4
24669 g_MaxLbn:
24670         .zero   4
24671         .type   g_VaildLpn, %object
24672         .size   g_VaildLpn, 4
24673 g_VaildLpn:
24674         .zero   4
24675         .type   g_MaxLpn, %object
24676         .size   g_MaxLpn, 4
24677 g_MaxLpn:
24678         .zero   4
24679         .type   g_MaxLbaSector, %object
24680         .size   g_MaxLbaSector, 4
24681 g_MaxLbaSector:
24682         .zero   4
24683         .type   g_GlobalDataVersion, %object
24684         .size   g_GlobalDataVersion, 4
24685 g_GlobalDataVersion:
24686         .zero   4
24687         .type   g_GlobalSysVersion, %object
24688         .size   g_GlobalSysVersion, 4
24689 g_GlobalSysVersion:
24690         .zero   4
24691         .type   ftl_gc_temp_power_lost_recovery_flag, %object
24692         .size   ftl_gc_temp_power_lost_recovery_flag, 4
24693 ftl_gc_temp_power_lost_recovery_flag:
24694         .zero   4
24695         .type   c_ftl_nand_max_data_blks, %object
24696         .size   c_ftl_nand_max_data_blks, 4
24697 c_ftl_nand_max_data_blks:
24698         .zero   4
24699         .type   c_ftl_nand_data_op_blks_per_plane, %object
24700         .size   c_ftl_nand_data_op_blks_per_plane, 2
24701 c_ftl_nand_data_op_blks_per_plane:
24702         .zero   2
24703         .type   c_ftl_nand_data_blks_per_plane, %object
24704         .size   c_ftl_nand_data_blks_per_plane, 2
24705 c_ftl_nand_data_blks_per_plane:
24706         .zero   2
24707         .type   c_ftl_nand_max_sys_blks, %object
24708         .size   c_ftl_nand_max_sys_blks, 4
24709 c_ftl_nand_max_sys_blks:
24710         .zero   4
24711         .type   c_ftl_nand_init_sys_blks_per_plane, %object
24712         .size   c_ftl_nand_init_sys_blks_per_plane, 4
24713 c_ftl_nand_init_sys_blks_per_plane:
24714         .zero   4
24715         .type   c_ftl_nand_sys_blks_per_plane, %object
24716         .size   c_ftl_nand_sys_blks_per_plane, 4
24717 c_ftl_nand_sys_blks_per_plane:
24718         .zero   4
24719         .type   c_ftl_vendor_part_size, %object
24720         .size   c_ftl_vendor_part_size, 2
24721 c_ftl_vendor_part_size:
24722         .zero   2
24723         .type   c_ftl_nand_max_vendor_blks, %object
24724         .size   c_ftl_nand_max_vendor_blks, 2
24725 c_ftl_nand_max_vendor_blks:
24726         .zero   2
24727         .type   c_ftl_nand_max_map_blks, %object
24728         .size   c_ftl_nand_max_map_blks, 4
24729 c_ftl_nand_max_map_blks:
24730         .zero   4
24731         .type   c_ftl_nand_map_blks_per_plane, %object
24732         .size   c_ftl_nand_map_blks_per_plane, 2
24733 c_ftl_nand_map_blks_per_plane:
24734         .zero   2
24735         .type   c_ftl_nand_vendor_region_num, %object
24736         .size   c_ftl_nand_vendor_region_num, 2
24737 c_ftl_nand_vendor_region_num:
24738         .zero   2
24739         .type   c_ftl_nand_l2pmap_ram_region_num, %object
24740         .size   c_ftl_nand_l2pmap_ram_region_num, 2
24741 c_ftl_nand_l2pmap_ram_region_num:
24742         .zero   2
24743         .type   c_ftl_nand_map_region_num, %object
24744         .size   c_ftl_nand_map_region_num, 2
24745 c_ftl_nand_map_region_num:
24746         .zero   2
24747         .type   c_ftl_nand_totle_phy_blks, %object
24748         .size   c_ftl_nand_totle_phy_blks, 4
24749 c_ftl_nand_totle_phy_blks:
24750         .zero   4
24751         .type   c_ftl_nand_reserved_blks, %object
24752         .size   c_ftl_nand_reserved_blks, 2
24753 c_ftl_nand_reserved_blks:
24754         .zero   2
24755         .type   c_ftl_nand_byte_pre_oob, %object
24756         .size   c_ftl_nand_byte_pre_oob, 2
24757 c_ftl_nand_byte_pre_oob:
24758         .zero   2
24759         .type   c_ftl_nand_byte_pre_page, %object
24760         .size   c_ftl_nand_byte_pre_page, 2
24761 c_ftl_nand_byte_pre_page:
24762         .zero   2
24763         .type   c_ftl_nand_sec_pre_page_shift, %object
24764         .size   c_ftl_nand_sec_pre_page_shift, 2
24765 c_ftl_nand_sec_pre_page_shift:
24766         .zero   2
24767         .type   c_ftl_nand_sec_pre_page, %object
24768         .size   c_ftl_nand_sec_pre_page, 2
24769 c_ftl_nand_sec_pre_page:
24770         .zero   2
24771         .type   c_ftl_nand_page_pre_super_blk, %object
24772         .size   c_ftl_nand_page_pre_super_blk, 2
24773 c_ftl_nand_page_pre_super_blk:
24774         .zero   2
24775         .type   c_ftl_nand_page_pre_slc_blk, %object
24776         .size   c_ftl_nand_page_pre_slc_blk, 2
24777 c_ftl_nand_page_pre_slc_blk:
24778         .zero   2
24779         .type   c_ftl_nand_page_pre_blk, %object
24780         .size   c_ftl_nand_page_pre_blk, 2
24781 c_ftl_nand_page_pre_blk:
24782         .zero   2
24783         .type   c_ftl_nand_bbm_buf_size, %object
24784         .size   c_ftl_nand_bbm_buf_size, 2
24785 c_ftl_nand_bbm_buf_size:
24786         .zero   2
24787         .type   c_ftl_nand_ext_blk_pre_plane, %object
24788         .size   c_ftl_nand_ext_blk_pre_plane, 2
24789 c_ftl_nand_ext_blk_pre_plane:
24790         .zero   2
24791         .type   c_ftl_nand_blk_pre_plane, %object
24792         .size   c_ftl_nand_blk_pre_plane, 2
24793 c_ftl_nand_blk_pre_plane:
24794         .zero   2
24795         .type   c_ftl_nand_planes_num, %object
24796         .size   c_ftl_nand_planes_num, 2
24797 c_ftl_nand_planes_num:
24798         .zero   2
24799         .type   c_ftl_nand_blks_per_die_shift, %object
24800         .size   c_ftl_nand_blks_per_die_shift, 2
24801 c_ftl_nand_blks_per_die_shift:
24802         .zero   2
24803         .type   c_ftl_nand_blks_per_die, %object
24804         .size   c_ftl_nand_blks_per_die, 2
24805 c_ftl_nand_blks_per_die:
24806         .zero   2
24807         .type   c_ftl_nand_planes_per_die, %object
24808         .size   c_ftl_nand_planes_per_die, 2
24809 c_ftl_nand_planes_per_die:
24810         .zero   2
24811         .type   c_ftl_nand_die_num, %object
24812         .size   c_ftl_nand_die_num, 2
24813 c_ftl_nand_die_num:
24814         .zero   2
24815         .type   c_ftl_nand_type, %object
24816         .size   c_ftl_nand_type, 2
24817 c_ftl_nand_type:
24818         .zero   2
24819         .zero   2
24820         .type   gMasterTempBuf, %object
24821         .size   gMasterTempBuf, 8
24822 gMasterTempBuf:
24823         .zero   8
24824         .type   gMasterInfo, %object
24825         .size   gMasterInfo, 48
24826 gMasterInfo:
24827         .zero   48
24828         .type   gNandcDumpWriteEn, %object
24829         .size   gNandcDumpWriteEn, 4
24830 gNandcDumpWriteEn:
24831         .zero   4
24832         .type   gToggleModeClkDiv, %object
24833         .size   gToggleModeClkDiv, 4
24834 gToggleModeClkDiv:
24835         .zero   4
24836         .type   gBootDdrMode, %object
24837         .size   gBootDdrMode, 4
24838 gBootDdrMode:
24839         .zero   4
24840         .type   gNandcEccBits, %object
24841         .size   gNandcEccBits, 4
24842 gNandcEccBits:
24843         .zero   4
24844         .type   gpNandc1, %object
24845         .size   gpNandc1, 8
24846 gpNandc1:
24847         .zero   8
24848         .type   gpNandc, %object
24849         .size   gpNandc, 8
24850 gpNandc:
24851         .zero   8
24852         .type   gNandcVer, %object
24853         .size   gNandcVer, 4
24854 gNandcVer:
24855         .zero   4
24856         .zero   4
24857         .type   gNandChipMap, %object
24858         .size   gNandChipMap, 64
24859 gNandChipMap:
24860         .zero   64
24861         .type   gNandIDataBuf, %object
24862         .size   gNandIDataBuf, 2048
24863 gNandIDataBuf:
24864         .zero   2048
24865         .type   FlashDdrTunningReadCount, %object
24866         .size   FlashDdrTunningReadCount, 4
24867 FlashDdrTunningReadCount:
24868         .zero   4
24869         .zero   4
24870         .type   gNandPhyInfo, %object
24871         .size   gNandPhyInfo, 28
24872 gNandPhyInfo:
24873         .zero   28
24874         .zero   4
24875         .type   gFlashProgCheckSpareBuffer, %object
24876         .size   gFlashProgCheckSpareBuffer, 8
24877 gFlashProgCheckSpareBuffer:
24878         .zero   8
24879         .type   gFlashProgCheckBuffer, %object
24880         .size   gFlashProgCheckBuffer, 8
24881 gFlashProgCheckBuffer:
24882         .zero   8
24883         .type   gFlashSpareBuffer, %object
24884         .size   gFlashSpareBuffer, 8
24885 gFlashSpareBuffer:
24886         .zero   8
24887         .type   gFlashPageBuffer1, %object
24888         .size   gFlashPageBuffer1, 8
24889 gFlashPageBuffer1:
24890         .zero   8
24891         .type   gFlashPageBuffer0, %object
24892         .size   gFlashPageBuffer0, 8
24893 gFlashPageBuffer0:
24894         .zero   8
24895         .type   gpFlashSaveInfo, %object
24896         .size   gpFlashSaveInfo, 8
24897 gpFlashSaveInfo:
24898         .zero   8
24899         .type   gReadRetryInfo, %object
24900         .size   gReadRetryInfo, 852
24901 gReadRetryInfo:
24902         .zero   852
24903         .zero   4
24904         .type   gpNandParaInfo, %object
24905         .size   gpNandParaInfo, 8
24906 gpNandParaInfo:
24907         .zero   8
24908         .type   gNandOptPara, %object
24909         .size   gNandOptPara, 32
24910 gNandOptPara:
24911         .zero   32
24912         .type   g_slc2KBNand, %object
24913         .size   g_slc2KBNand, 1
24914 g_slc2KBNand:
24915         .zero   1
24916         .type   g_maxRetryCount, %object
24917         .size   g_maxRetryCount, 1
24918 g_maxRetryCount:
24919         .zero   1
24920         .type   g_maxRegNum, %object
24921         .size   g_maxRegNum, 1
24922 g_maxRegNum:
24923         .zero   1
24924         .type   g_retryMode, %object
24925         .size   g_retryMode, 1
24926 g_retryMode:
24927         .zero   1
24928         .type   gNandIDBResBlkNumSaveInFlash, %object
24929         .size   gNandIDBResBlkNumSaveInFlash, 1
24930 gNandIDBResBlkNumSaveInFlash:
24931         .zero   1
24932         .type   gNandIDBResBlkNum, %object
24933         .size   gNandIDBResBlkNum, 1
24934 gNandIDBResBlkNum:
24935         .zero   1
24936         .zero   2
24937         .type   gNandFlashResEndPageAddr, %object
24938         .size   gNandFlashResEndPageAddr, 4
24939 gNandFlashResEndPageAddr:
24940         .zero   4
24941         .type   gNandFlashInfoBlockAddr, %object
24942         .size   gNandFlashInfoBlockAddr, 4
24943 gNandFlashInfoBlockAddr:
24944         .zero   4
24945         .type   gNandFlashIdbBlockAddr, %object
24946         .size   gNandFlashIdbBlockAddr, 4
24947 gNandFlashIdbBlockAddr:
24948         .zero   4
24949         .type   gNandFlashInfoBlockEcc, %object
24950         .size   gNandFlashInfoBlockEcc, 1
24951 gNandFlashInfoBlockEcc:
24952         .zero   1
24953         .type   gNandFlashIDBEccBits, %object
24954         .size   gNandFlashIDBEccBits, 1
24955 gNandFlashIDBEccBits:
24956         .zero   1
24957         .type   gNandFlashEccBits, %object
24958         .size   gNandFlashEccBits, 1
24959 gNandFlashEccBits:
24960         .zero   1
24961         .type   gNandRandomizer, %object
24962         .size   gNandRandomizer, 1
24963 gNandRandomizer:
24964         .zero   1
24965         .type   gBlockPageAlignSize, %object
24966         .size   gBlockPageAlignSize, 4
24967 gBlockPageAlignSize:
24968         .zero   4
24969         .type   gTotleBlock, %object
24970         .size   gTotleBlock, 2
24971 gTotleBlock:
24972         .zero   2
24973         .type   gNandMaxChip, %object
24974         .size   gNandMaxChip, 1
24975 gNandMaxChip:
24976         .zero   1
24977         .type   gNandMaxDie, %object
24978         .size   gNandMaxDie, 1
24979 gNandMaxDie:
24980         .zero   1
24981         .type   gFlashInterfaceMode, %object
24982         .size   gFlashInterfaceMode, 1
24983 gFlashInterfaceMode:
24984         .zero   1
24985         .type   gFlashOnfiModeEn, %object
24986         .size   gFlashOnfiModeEn, 1
24987 gFlashOnfiModeEn:
24988         .zero   1
24989         .type   gFlashToggleModeEn, %object
24990         .size   gFlashToggleModeEn, 1
24991 gFlashToggleModeEn:
24992         .zero   1
24993         .type   gFlashSdrModeEn, %object
24994         .size   gFlashSdrModeEn, 1
24995 gFlashSdrModeEn:
24996         .zero   1
24997         .type   gMultiPageProgEn, %object
24998         .size   gMultiPageProgEn, 1
24999 gMultiPageProgEn:
25000         .zero   1
25001         .type   gMultiPageReadEn, %object
25002         .size   gMultiPageReadEn, 1
25003 gMultiPageReadEn:
25004         .zero   1
25005         .zero   2
25006         .type   gpReadRetrial, %object
25007         .size   gpReadRetrial, 8
25008 gpReadRetrial:
25009         .zero   8
25010         .type   mlcPageToSlcPageTbl, %object
25011         .size   mlcPageToSlcPageTbl, 1024
25012 mlcPageToSlcPageTbl:
25013         .zero   1024
25014         .type   slcPageToMlcPageTbl, %object
25015         .size   slcPageToMlcPageTbl, 512
25016 slcPageToMlcPageTbl:
25017         .zero   512
25018         .type   DieAddrs, %object
25019         .size   DieAddrs, 32
25020 DieAddrs:
25021         .zero   32
25022         .type   gDieOp, %object
25023         .size   gDieOp, 192
25024 gDieOp:
25025         .zero   192
25026         .type   DieCsIndex, %object
25027         .size   DieCsIndex, 8
25028 DieCsIndex:
25029         .zero   8
25030         .type   IDByte, %object
25031         .size   IDByte, 32
25032 IDByte:
25033         .zero   32
25034         .type   read_retry_cur_offset, %object
25035         .size   read_retry_cur_offset, 4
25036 read_retry_cur_offset:
25037         .zero   4
25038         .section        .data.rel,"aw",%progbits
25039         .align  3
25040 .LANCHOR3 = . + 0
25041         .type   rknand_sys_storage_dev, %object
25042         .size   rknand_sys_storage_dev, 80
25043 rknand_sys_storage_dev:
25044         .word   255
25045         .zero   4
25046         .xword  .LC157
25047         .xword  rknand_sys_storage_fops
25048         .zero   56