thermal: rockchip: add temperature dump when panic
[firefly-linux-kernel-4.4.55.git] / drivers / rk_nand / rk_ftl_arm_v8.S
1 /*
2  * Copyright (c) 2016, Fuzhou Rockchip Electronics Co., Ltd
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  */
9         .cpu generic+fp+simd
10         .file   "rk_ftl_arm_v8.S"
11 #APP
12         .irp    num,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17\
13                 ,18,19,20,21,22,23,24,25,26,27,28,29,30
14         .equ    __reg_num_x\num, \num
15         .endr
16         .equ    __reg_num_xzr, 31
17
18         .macro  mrs_s, rt, sreg
19         .inst   0xd5200000|(\sreg)|(__reg_num_\rt)
20         .endm
21
22         .macro  msr_s, sreg, rt
23         .inst   0xd5000000|(\sreg)|(__reg_num_\rt)
24         .endm
25
26 #NO_APP
27         .text
28         .align  2
29         .type   rknand_sys_storage_open, %function
30 rknand_sys_storage_open:
31         adrp    x0, :got:kmalloc_caches
32         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         adrp    x19, :got:IDByte
948         mov     w20, 0
949         stp     x21, x22, [sp,32]
950         stp     x23, x24, [sp,48]
951         ldr     x19, [x19, #:got_lo12:IDByte]
952         mov     w21, w0
953         stp     x25, x26, [sp,64]
954         adrp    x22, :got:gFlashInterfaceMode
955         mov     w23, 239
956         mov     w24, 128
957         mov     w25, 1
958         mov     w26, 32
959 .L131:
960         mov     w0, w20
961         bl      NandcGetChipIf
962         ldrb    w1, [x19]
963         cmp     w1, 69
964         cset    w3, eq
965         cmp     w1, 152
966         cset    w2, eq
967         orr     w2, w3, w2
968         cbnz    w2, .L132
969         cmp     w1, 173
970         bne     .L124
971 .L132:
972         ldr     x1, [x22, #:got_lo12:gFlashInterfaceMode]
973         cmp     w21, 1
974         ldrb    w1, [x1]
975         bne     .L126
976         tbz     x1, 0, .L124
977         str     w23, [x0,8]
978         ldrb    w1, [x19]
979         cmp     w1, 173
980         bne     .L127
981         str     w21, [x0,4]
982         b       .L143
983 .L127:
984         str     w24, [x0,4]
985         str     w21, [x0]
986         b       .L130
987 .L126:
988         tbz     x1, 2, .L124
989         str     w23, [x0,8]
990         ldrb    w1, [x19]
991         cmp     w1, 173
992         bne     .L129
993         str     w25, [x0,4]
994         str     w26, [x0]
995         b       .L130
996 .L129:
997         str     w24, [x0,4]
998 .L143:
999         str     wzr, [x0]
1000 .L130:
1001         str     wzr, [x0]
1002         str     wzr, [x0]
1003         str     wzr, [x0]
1004 .L124:
1005         add     w20, w20, 1
1006         add     x19, x19, 8
1007         uxtb    w20, w20
1008         cmp     w20, 4
1009         bne     .L131
1010         mov     w0, 0
1011         bl      NandcWaitFlashReady
1012         mov     w0, 0
1013         ldp     x19, x20, [sp,16]
1014         ldp     x21, x22, [sp,32]
1015         ldp     x23, x24, [sp,48]
1016         ldp     x25, x26, [sp,64]
1017         ldp     x29, x30, [sp], 80
1018         ret
1019         .size   FlashSetInterfaceMode, .-FlashSetInterfaceMode
1020         .align  2
1021         .global FlashReadSpare
1022         .type   FlashReadSpare, %function
1023 FlashReadSpare:
1024         adrp    x3, :got:gNandParaInfo
1025         stp     x29, x30, [sp, -64]!
1026         add     x29, sp, 0
1027         ldr     x3, [x3, #:got_lo12:gNandParaInfo]
1028         stp     x19, x20, [sp,16]
1029         str     x21, [sp,32]
1030         uxtb    w21, w0
1031         mov     w0, w21
1032         str     x2, [x29,56]
1033         ldrb    w20, [x3,9]
1034         str     x1, [x29,48]
1035         bl      NandcGetChipIf
1036         str     wzr, [x0,8]
1037         mov     x19, x0
1038         ldr     x1, [x29,48]
1039         lsl     w20, w20, 9
1040         str     w20, [x0,4]
1041         lsr     w20, w20, 8
1042         str     w20, [x0,4]
1043         and     w0, w1, 255
1044         str     w0, [x19,4]
1045         lsr     w0, w1, 8
1046         str     w0, [x19,4]
1047         lsr     w1, w1, 16
1048         mov     w0, 48
1049         str     w1, [x19,4]
1050         str     w0, [x19,8]
1051         mov     w0, w21
1052         bl      NandcWaitFlashReady
1053         ldr     x2, [x29,56]
1054         ldr     w0, [x19]
1055         strb    w0, [x2]
1056         ldp     x19, x20, [sp,16]
1057         ldr     x21, [sp,32]
1058         ldp     x29, x30, [sp], 64
1059         ret
1060         .size   FlashReadSpare, .-FlashReadSpare
1061         .align  2
1062         .global SandiskProgTestBadBlock
1063         .type   SandiskProgTestBadBlock, %function
1064 SandiskProgTestBadBlock:
1065         stp     x29, x30, [sp, -48]!
1066         add     x29, sp, 0
1067         stp     x19, x20, [sp,16]
1068         uxtb    w20, w0
1069         mov     w0, w20
1070         str     x1, [x29,40]
1071         bl      NandcGetChipIf
1072         mov     x19, x0
1073         mov     w0, 162
1074         ldr     x1, [x29,40]
1075         str     w0, [x19,8]
1076         mov     w0, 128
1077         str     w0, [x19,8]
1078         and     w0, w1, 255
1079         str     wzr, [x19,4]
1080         str     wzr, [x19,4]
1081         str     w0, [x19,4]
1082         lsr     w0, w1, 8
1083         str     w0, [x19,4]
1084         lsr     w1, w1, 16
1085         mov     w0, 16
1086         str     w1, [x19,4]
1087         str     w0, [x19,8]
1088         mov     w0, w20
1089         bl      NandcWaitFlashReady
1090         mov     w0, 112
1091         str     w0, [x19,8]
1092         mov     w0, 80
1093         bl      NandcDelayns
1094         ldr     w0, [x19]
1095         ldp     x19, x20, [sp,16]
1096         and     w0, w0, 1
1097         ldp     x29, x30, [sp], 48
1098         ret
1099         .size   SandiskProgTestBadBlock, .-SandiskProgTestBadBlock
1100         .align  2
1101         .global SandiskSetRRPara
1102         .type   SandiskSetRRPara, %function
1103 SandiskSetRRPara:
1104         stp     x29, x30, [sp, -32]!
1105         add     x29, sp, 0
1106         stp     x19, x20, [sp,16]
1107         mov     x20, x0
1108         mov     w0, 239
1109         uxtb    w19, w1
1110         add     w19, w19, 1
1111         str     w0, [x20,8]
1112         mov     w0, 17
1113         str     w0, [x20,4]
1114         mov     w0, 200
1115         bl      NandcDelayns
1116         adrp    x3, :got:ToshibaA19RefValue
1117         adrp    x2, :got:Toshiba15RefValue
1118         mov     w1, 5
1119         adrp    x4, :got:g_maxRegNum
1120         adrp    x5, :got:g_retryMode
1121         smull   x1, w19, w1
1122         ldr     x2, [x2, #:got_lo12:Toshiba15RefValue]
1123         ldr     x3, [x3, #:got_lo12:ToshibaA19RefValue]
1124         add     x3, x1, x3
1125         add     x1, x1, x2
1126         mov     x2, 0
1127 .L147:
1128         ldr     x0, [x4, #:got_lo12:g_maxRegNum]
1129         ldrb    w0, [x0]
1130         cmp     w0, w2
1131         bls     .L152
1132         ldr     x0, [x5, #:got_lo12:g_retryMode]
1133         ldrb    w0, [x0]
1134         cmp     w0, 67
1135         bne     .L148
1136         ldrsb   w0, [x3,x2]
1137         b       .L151
1138 .L148:
1139         ldrsb   w0, [x1,x2]
1140 .L151:
1141         str     w0, [x20]
1142         add     x2, x2, 1
1143         b       .L147
1144 .L152:
1145         mov     w0, 0
1146         bl      NandcWaitFlashReady
1147         ldp     x19, x20, [sp,16]
1148         ldp     x29, x30, [sp], 32
1149         ret
1150         .size   SandiskSetRRPara, .-SandiskSetRRPara
1151         .align  2
1152         .global NandcRandmzSel
1153         .type   NandcRandmzSel, %function
1154 NandcRandmzSel:
1155         adrp    x2, :got:gNandChipMap
1156         ubfiz   x0, x0, 4, 8
1157         ldr     x2, [x2, #:got_lo12:gNandChipMap]
1158         ldr     x0, [x2,x0]
1159         str     w1, [x0,336]
1160         ret
1161         .size   NandcRandmzSel, .-NandcRandmzSel
1162         .align  2
1163         .global FlashSetRandomizer
1164         .type   FlashSetRandomizer, %function
1165 FlashSetRandomizer:
1166         stp     x29, x30, [sp, -48]!
1167         add     x29, sp, 0
1168         str     x21, [sp,32]
1169         uxtb    w21, w0
1170         adrp    x0, :got:gNandcVer
1171         stp     x19, x20, [sp,16]
1172         mov     w19, w1
1173         ldr     x0, [x0, #:got_lo12:gNandcVer]
1174         ldr     w0, [x0]
1175         cmp     w0, 5
1176         bls     .L155
1177         adrp    x0, :got:random_seed
1178         and     w19, w1, 127
1179         ldr     x0, [x0, #:got_lo12:random_seed]
1180         ldrh    w19, [x0,w19,uxtw 1]
1181         adrp    x0, :got:gNandRandomizer
1182         ldr     x0, [x0, #:got_lo12:gNandRandomizer]
1183         ldrb    w0, [x0]
1184         cbz     w0, .L156
1185         mov     w0, w21
1186         bl      FlashRsvdBlkChk
1187         cmp     w0, wzr
1188         orr     w1, w19, -1073741824
1189         csel    w19, w1, w19, ne
1190 .L156:
1191         mov     w0, w21
1192         mov     w1, w19
1193         b       .L170
1194 .L155:
1195         cmp     w0, 4
1196         bne     .L154
1197         adrp    x0, :got:random_seed
1198         and     w2, w1, 127
1199         ldr     x0, [x0, #:got_lo12:random_seed]
1200         ldrh    w20, [x0,w2,uxtw 1]
1201         mov     w0, w21
1202         lsl     w20, w20, 8
1203         bl      FlashRsvdBlkChk
1204         cbz     w0, .L158
1205         adrp    x0, :got:gNandRandomizer
1206         ldr     x0, [x0, #:got_lo12:gNandRandomizer]
1207         ldrb    w0, [x0]
1208         cbz     w0, .L158
1209         ubfiz   w19, w19, 1, 7
1210         orr     w19, w19, 1
1211         orr     w20, w20, w19
1212 .L158:
1213         mov     w0, w21
1214         mov     w1, w20
1215 .L170:
1216         bl      NandcRandmzSel
1217 .L154:
1218         ldp     x19, x20, [sp,16]
1219         ldr     x21, [sp,32]
1220         ldp     x29, x30, [sp], 48
1221         ret
1222         .size   FlashSetRandomizer, .-FlashSetRandomizer
1223         .align  2
1224         .global FlashReadCmd
1225         .type   FlashReadCmd, %function
1226 FlashReadCmd:
1227         stp     x29, x30, [sp, -48]!
1228         add     x29, sp, 0
1229         str     x19, [sp,16]
1230         uxtb    w19, w0
1231         mov     w0, w19
1232         str     x1, [x29,40]
1233         bl      NandcGetChipIf
1234         str     wzr, [x0,8]
1235         str     wzr, [x0,4]
1236         ldr     x1, [x29,40]
1237         str     wzr, [x0,4]
1238         and     w2, w1, 255
1239         str     w2, [x0,4]
1240         lsr     w2, w1, 8
1241         str     w2, [x0,4]
1242         lsr     w2, w1, 16
1243         str     w2, [x0,4]
1244         mov     w2, 48
1245         str     w2, [x0,8]
1246         mov     w0, w19
1247         bl      FlashSetRandomizer
1248         ldr     x19, [sp,16]
1249         ldp     x29, x30, [sp], 48
1250         ret
1251         .size   FlashReadCmd, .-FlashReadCmd
1252         .align  2
1253         .global HynixGetReadRetryDefault
1254         .type   HynixGetReadRetryDefault, %function
1255 HynixGetReadRetryDefault:
1256         stp     x29, x30, [sp, -144]!
1257         mov     w4, -83
1258         mov     w3, -82
1259         add     x29, sp, 0
1260         stp     x19, x20, [sp,16]
1261         adrp    x19, :got:gReadRetryInfo
1262         stp     x27, x28, [sp,80]
1263         stp     x21, x22, [sp,32]
1264         ldr     x1, [x19, #:got_lo12:gReadRetryInfo]
1265         mov     w28, w0
1266         stp     x23, x24, [sp,48]
1267         stp     x25, x26, [sp,64]
1268         strb    w0, [x1]
1269         mov     w0, -84
1270         strb    w4, [x1,5]
1271         cmp     w28, 2
1272         strb    w0, [x1,4]
1273         mov     w0, -81
1274         strb    w3, [x1,6]
1275         strb    w0, [x1,7]
1276         bne     .L173
1277         mov     w0, -89
1278         strb    w0, [x1,4]
1279         adrp    x0, :got:refValueDefault
1280         mov     w1, -9
1281         ldr     x0, [x0, #:got_lo12:refValueDefault]
1282         strb    w1, [x0,17]
1283         b       .L210
1284 .L173:
1285         cmp     w28, 3
1286         bne     .L175
1287         mov     w0, -80
1288         strb    w0, [x1,4]
1289         mov     w0, -79
1290         strb    w0, [x1,5]
1291         mov     w0, -78
1292         strb    w0, [x1,6]
1293         mov     w0, -77
1294         strb    w0, [x1,7]
1295         mov     w0, -76
1296         strb    w0, [x1,8]
1297         mov     w0, -75
1298         strb    w0, [x1,9]
1299         mov     w0, -74
1300         strb    w0, [x1,10]
1301         mov     w0, -73
1302         b       .L226
1303 .L175:
1304         cmp     w28, 4
1305         bne     .L176
1306         mov     w5, -52
1307         strb    w5, [x1,4]
1308         mov     w5, -65
1309         strb    w5, [x1,5]
1310         mov     w5, -86
1311         strb    w5, [x1,6]
1312         mov     w5, -85
1313         strb    w4, [x1,9]
1314         strb    w5, [x1,7]
1315         mov     w5, -51
1316         strb    w3, [x1,10]
1317         strb    w5, [x1,8]
1318 .L226:
1319         mov     w21, 8
1320         strb    w0, [x1,11]
1321         mov     w20, w21
1322         b       .L174
1323 .L176:
1324         cmp     w28, 5
1325         bne     .L177
1326         mov     w0, 56
1327         strb    w0, [x1,4]
1328         mov     w0, 57
1329         strb    w0, [x1,5]
1330         mov     w0, 58
1331         mov     w21, 8
1332         strb    w0, [x1,6]
1333         mov     w0, 59
1334         strb    w0, [x1,7]
1335         b       .L225
1336 .L177:
1337         cmp     w28, 6
1338         bne     .L210
1339         mov     w0, 14
1340         strb    w0, [x1,4]
1341         mov     w0, 15
1342         strb    w0, [x1,5]
1343         mov     w0, 16
1344         mov     w21, 12
1345         strb    w0, [x1,6]
1346         mov     w0, 17
1347         strb    w0, [x1,7]
1348         b       .L225
1349 .L210:
1350         mov     w21, 7
1351 .L225:
1352         mov     w20, 4
1353 .L174:
1354         sub     w0, w28, #1
1355         cmp     w0, 1
1356         bhi     .L222
1357         mov     w27, 0
1358         adrp    x23, :got:gNandMaxDie
1359         adrp    x24, :got:DieCsIndex
1360         mov     w25, 55
1361         adrp    x26, :got:refValueDefault
1362 .L178:
1363         ldr     x0, [x23, #:got_lo12:gNandMaxDie]
1364         ldrb    w0, [x0]
1365         cmp     w0, w27
1366         bls     .L185
1367         ldr     x0, [x24, #:got_lo12:DieCsIndex]
1368         mov     x28, 0
1369         ldr     x22, [x19, #:got_lo12:gReadRetryInfo]
1370         ldrb    w0, [x0,w27,sxtw]
1371         sbfiz   x1, x0, 6, 32
1372         add     x22, x22, x1
1373         add     x22, x22, 20
1374         bl      NandcGetChipIf
1375         mov     x1, x0
1376 .L180:
1377         str     w25, [x1,8]
1378         str     x1, [x29,136]
1379         ldr     x0, [x19, #:got_lo12:gReadRetryInfo]
1380         add     x0, x28, x0
1381         ldrb    w0, [x0,4]
1382         str     w0, [x1,4]
1383         mov     w0, 80
1384         bl      NandcDelayns
1385         ldr     x1, [x29,136]
1386         ldr     w0, [x1]
1387         strb    w0, [x22,x28]
1388         add     x28, x28, 1
1389         cmp     w20, w28, uxtb
1390         bhi     .L180
1391         mov     x0, 0
1392 .L181:
1393         add     w2, w0, 8
1394         mov     x1, 0
1395 .L182:
1396         ldr     x3, [x26, #:got_lo12:refValueDefault]
1397         add     x4, x1, x0
1398         add     x1, x1, 4
1399         add     x3, x4, x3
1400         cmp     x1, 24
1401         ldrb    w4, [x3,4]
1402         ldrb    w3, [x22,x0]
1403         add     w3, w4, w3
1404         strb    w3, [x22,w2,sxtw]
1405         add     w2, w2, 8
1406         bne     .L182
1407         add     x0, x0, 1
1408         cmp     x0, 4
1409         bne     .L181
1410         add     w27, w27, 1
1411         strb    wzr, [x22,16]
1412         strb    wzr, [x22,24]
1413         strb    wzr, [x22,32]
1414         uxtb    w27, w27
1415         strb    wzr, [x22,40]
1416         strb    wzr, [x22,48]
1417         strb    wzr, [x22,41]
1418         strb    wzr, [x22,49]
1419         b       .L178
1420 .L222:
1421         sub     w0, w28, #3
1422         cmp     w0, 3
1423         bhi     .L185
1424         mul     w0, w20, w21
1425         sub     w25, w20, #1
1426         cmp     w28, 6
1427         asr     w24, w0, 2
1428         lsl     w0, w0, 4
1429         str     w0, [x29,136]
1430         lsl     w0, w24, 1
1431         mov     w1, 4
1432         str     w0, [x29,128]
1433         mov     w0, 8
1434         uxtb    x25, w25
1435         csel    w0, w1, w0, eq
1436         mov     w22, 0
1437         str     w0, [x29,132]
1438         sub     w27, w28, #5
1439         add     x0, x25, 1
1440         str     x0, [x29,120]
1441 .L186:
1442         adrp    x0, :got:gNandMaxDie
1443         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
1444         ldrb    w0, [x0]
1445         cmp     w0, w22
1446         bhi     .L209
1447 .L185:
1448         ldr     x19, [x19, #:got_lo12:gReadRetryInfo]
1449         strb    w20, [x19,1]
1450         strb    w21, [x19,2]
1451         ldp     x19, x20, [sp,16]
1452         ldp     x21, x22, [sp,32]
1453         ldp     x23, x24, [sp,48]
1454         ldp     x25, x26, [sp,64]
1455         ldp     x27, x28, [sp,80]
1456         ldp     x29, x30, [sp], 144
1457         ret
1458 .L209:
1459         adrp    x0, :got:DieCsIndex
1460         ldr     x3, [x19, #:got_lo12:gReadRetryInfo]
1461         str     x3, [x29,104]
1462         ldr     x0, [x0, #:got_lo12:DieCsIndex]
1463         ldrb    w23, [x0,w22,sxtw]
1464         mov     w0, w23
1465         sbfiz   x26, x23, 6, 32
1466         add     x26, x3, x26
1467         bl      NandcGetChipIf
1468         mov     x25, x0
1469         mov     w4, 255
1470         str     w4, [x0,8]
1471         mov     w0, w23
1472         str     x4, [x29,112]
1473         add     x26, x26, 20
1474         bl      NandcWaitFlashReady
1475         mov     w0, 54
1476         cmp     w28, 4
1477         str     w0, [x25,8]
1478         ldr     x4, [x29,112]
1479         ldr     x3, [x29,104]
1480         bne     .L187
1481         mov     w0, 64
1482         str     w4, [x25,4]
1483         str     w0, [x25]
1484         mov     w0, 204
1485         b       .L227
1486 .L187:
1487         cmp     w27, 1
1488         bhi     .L189
1489         ldrb    w0, [x3,4]
1490         str     w0, [x25,4]
1491         mov     w0, 82
1492         b       .L228
1493 .L189:
1494         mov     w0, 174
1495         str     w0, [x25,4]
1496         str     wzr, [x25]
1497         mov     w0, 176
1498 .L227:
1499         str     w0, [x25,4]
1500         mov     w0, 77
1501 .L228:
1502         str     w0, [x25]
1503         mov     w0, 22
1504         str     w0, [x25,8]
1505         mov     w0, 23
1506         str     w0, [x25,8]
1507         mov     w0, 4
1508         str     w0, [x25,8]
1509         mov     w0, 25
1510         str     w0, [x25,8]
1511         cmp     w28, 6
1512         str     wzr, [x25,8]
1513         str     wzr, [x25,4]
1514         str     wzr, [x25,4]
1515         bne     .L190
1516         mov     w0, 31
1517         str     w0, [x25,4]
1518         b       .L191
1519 .L190:
1520         str     wzr, [x25,4]
1521 .L191:
1522         mov     w3, 2
1523         str     w3, [x25,4]
1524         str     wzr, [x25,4]
1525         mov     w0, 48
1526         str     w0, [x25,8]
1527         mov     w0, w23
1528         str     x3, [x29,112]
1529         bl      NandcWaitFlashReady
1530         ldr     x3, [x29,112]
1531         mov     w0, 16
1532         cmp     w27, 1
1533         csel    w3, w3, w0, hi
1534         mov     w0, 0
1535 .L193:
1536         add     w0, w0, 1
1537         ldr     w4, [x25]
1538         uxtb    w0, w0
1539         cmp     w0, w3
1540         bne     .L193
1541         adrp    x4, :got:gFlashPageBuffer0
1542         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
1543         ldr     x7, [x0]
1544         mov     x0, 0
1545 .L194:
1546         ldr     w1, [x29,136]
1547         cmp     w1, w0
1548         ble     .L229
1549         ldr     w3, [x25]
1550         strb    w3, [x7,x0]
1551         add     x0, x0, 1
1552         b       .L194
1553 .L229:
1554         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
1555         mov     w6, w24
1556         mov     w5, 8
1557         ldr     x9, [x0]
1558 .L197:
1559         mov     w0, 0
1560 .L196:
1561         add     w3, w0, w6
1562         add     w0, w0, 1
1563         sbfiz   x3, x3, 2, 32
1564         cmp     w0, w24
1565         ldr     w8, [x9,x3]
1566         mvn     w8, w8
1567         str     w8, [x9,x3]
1568         bne     .L196
1569         ldr     w0, [x29,128]
1570         subs    w5, w5, #1
1571         add     w6, w6, w0
1572         bne     .L197
1573         mov     x5, 0
1574         mov     w13, 1
1575 .L198:
1576         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
1577         mov     w3, 0
1578         mov     w8, w3
1579         ldr     x12, [x0]
1580 .L202:
1581         lsl     w6, w13, w8
1582         mov     w10, w5
1583         mov     w0, 16
1584         mov     w9, 0
1585 .L200:
1586         ldr     w11, [x12,w10,sxtw 2]
1587         add     w10, w10, w24
1588         and     w11, w6, w11
1589         cmp     w11, w6
1590         csinc   w9, w9, w9, ne
1591         subs    w0, w0, #1
1592         bne     .L200
1593         cmp     w9, 9
1594         orr     w6, w3, w6
1595         add     w8, w8, 1
1596         csel    w3, w6, w3, cs
1597         cmp     w8, 32
1598         bne     .L202
1599         str     w3, [x12,x5,lsl 2]
1600         add     x5, x5, 1
1601         cmp     w24, w5
1602         bgt     .L198
1603         mov     w4, w0
1604 .L205:
1605         mov     x3, 0
1606 .L204:
1607         add     w5, w0, w3
1608         ldrb    w6, [x7,x3]
1609         add     x3, x3, 1
1610         cmp     w20, w3, uxtb
1611         strb    w6, [x26,w5,sxtw]
1612         bhi     .L204
1613         ldr     x1, [x29,120]
1614         add     w4, w4, 1
1615         cmp     w4, w21
1616         add     x7, x7, x1
1617         ldr     w1, [x29,132]
1618         add     w0, w0, w1
1619         blt     .L205
1620         mov     w0, 255
1621         str     w0, [x25,8]
1622         mov     w0, w23
1623         bl      NandcWaitFlashReady
1624         cmp     w27, 1
1625         bhi     .L207
1626         mov     w0, 54
1627         str     w0, [x25,8]
1628         mov     w1, -1
1629         ldr     x0, [x19, #:got_lo12:gReadRetryInfo]
1630         ldrb    w0, [x0,4]
1631         str     w0, [x25,4]
1632         mov     w0, 22
1633         str     wzr, [x25]
1634         str     w0, [x25,8]
1635         mov     w0, w22
1636         bl      FlashReadCmd
1637         b       .L208
1638 .L207:
1639         mov     w0, 56
1640         str     w0, [x25,8]
1641 .L208:
1642         mov     w0, w23
1643         add     w22, w22, 1
1644         bl      NandcWaitFlashReady
1645         uxtb    w22, w22
1646         b       .L186
1647         .size   HynixGetReadRetryDefault, .-HynixGetReadRetryDefault
1648         .align  2
1649         .global FlashReadDpDataOutCmd
1650         .type   FlashReadDpDataOutCmd, %function
1651 FlashReadDpDataOutCmd:
1652         stp     x29, x30, [sp, -48]!
1653         add     x29, sp, 0
1654         str     x19, [sp,16]
1655         uxtb    w19, w0
1656         mov     w0, w19
1657         str     x1, [x29,40]
1658         bl      NandcGetChipIf
1659         adrp    x2, :got:gNandOptPara
1660         ldr     x1, [x29,40]
1661         and     w4, w1, 255
1662         lsr     w3, w1, 8
1663         ldr     x2, [x2, #:got_lo12:gNandOptPara]
1664         ldrb    w2, [x2,16]
1665         cmp     w2, 1
1666         lsr     w2, w1, 16
1667         bne     .L231
1668         mov     w5, 6
1669         str     w5, [x0,8]
1670         str     wzr, [x0,4]
1671         str     wzr, [x0,4]
1672         str     w4, [x0,4]
1673         str     w3, [x0,4]
1674         str     w2, [x0,4]
1675         b       .L233
1676 .L231:
1677         str     wzr, [x0,8]
1678         str     wzr, [x0,4]
1679         str     wzr, [x0,4]
1680         str     w4, [x0,4]
1681         str     w3, [x0,4]
1682         str     w2, [x0,4]
1683         mov     w2, 5
1684         str     w2, [x0,8]
1685         str     wzr, [x0,4]
1686         str     wzr, [x0,4]
1687 .L233:
1688         mov     w2, 224
1689         str     w2, [x0,8]
1690         mov     w0, w19
1691         bl      FlashSetRandomizer
1692         ldr     x19, [sp,16]
1693         ldp     x29, x30, [sp], 48
1694         ret
1695         .size   FlashReadDpDataOutCmd, .-FlashReadDpDataOutCmd
1696         .align  2
1697         .global FlashReadDpCmd
1698         .type   FlashReadDpCmd, %function
1699 FlashReadDpCmd:
1700         stp     x29, x30, [sp, -80]!
1701         add     x29, sp, 0
1702         stp     x21, x22, [sp,32]
1703         uxtb    w21, w0
1704         str     x23, [sp,48]
1705         mov     w0, w21
1706         str     x1, [x29,64]
1707         stp     x19, x20, [sp,16]
1708         str     x2, [x29,72]
1709         bl      NandcGetChipIf
1710         adrp    x3, :got:gNandOptPara
1711         mov     x19, x0
1712         ldr     x1, [x29,64]
1713         ldr     x2, [x29,72]
1714         ldr     x3, [x3, #:got_lo12:gNandOptPara]
1715         and     w5, w1, 255
1716         lsr     w4, w1, 8
1717         and     w23, w2, 255
1718         lsr     w22, w2, 8
1719         lsr     w20, w2, 16
1720         ldrb    w0, [x3,16]
1721         cmp     w0, 1
1722         lsr     w0, w1, 16
1723         bne     .L235
1724         ldrb    w2, [x3,8]
1725         str     w2, [x19,8]
1726         str     wzr, [x19,4]
1727         str     wzr, [x19,4]
1728         str     w5, [x19,4]
1729         str     w4, [x19,4]
1730         str     w0, [x19,4]
1731         str     x1, [x29,72]
1732         ldrb    w0, [x3,9]
1733         str     w0, [x19,8]
1734         mov     w0, w21
1735         bl      NandcWaitFlashReady
1736         str     wzr, [x19,8]
1737         str     wzr, [x19,4]
1738         mov     w0, 48
1739         str     wzr, [x19,4]
1740         str     w23, [x19,4]
1741         str     w22, [x19,4]
1742         str     w20, [x19,4]
1743         str     w0, [x19,8]
1744         ldr     x1, [x29,72]
1745         b       .L236
1746 .L235:
1747         ldrb    w2, [x3,8]
1748         str     w2, [x19,8]
1749         str     w5, [x19,4]
1750         str     w4, [x19,4]
1751         str     w0, [x19,4]
1752         ldrb    w0, [x3,9]
1753         str     w0, [x19,8]
1754         mov     w0, 48
1755         str     w23, [x19,4]
1756         str     w22, [x19,4]
1757         str     w20, [x19,4]
1758         str     w0, [x19,8]
1759 .L236:
1760         mov     w0, w21
1761         bl      FlashSetRandomizer
1762         ldr     x23, [sp,48]
1763         ldp     x19, x20, [sp,16]
1764         ldp     x21, x22, [sp,32]
1765         ldp     x29, x30, [sp], 80
1766         ret
1767         .size   FlashReadDpCmd, .-FlashReadDpCmd
1768         .align  2
1769         .global FlashProgFirstCmd
1770         .type   FlashProgFirstCmd, %function
1771 FlashProgFirstCmd:
1772         stp     x29, x30, [sp, -48]!
1773         add     x29, sp, 0
1774         str     x19, [sp,16]
1775         uxtb    w19, w0
1776         mov     w0, w19
1777         str     x1, [x29,40]
1778         bl      NandcGetChipIf
1779         mov     w2, 128
1780         str     w2, [x0,8]
1781         str     wzr, [x0,4]
1782         ldr     x1, [x29,40]
1783         str     wzr, [x0,4]
1784         and     w2, w1, 255
1785         str     w2, [x0,4]
1786         lsr     w2, w1, 8
1787         str     w2, [x0,4]
1788         lsr     w2, w1, 16
1789         str     w2, [x0,4]
1790         mov     w0, w19
1791         bl      FlashSetRandomizer
1792         ldr     x19, [sp,16]
1793         ldp     x29, x30, [sp], 48
1794         ret
1795         .size   FlashProgFirstCmd, .-FlashProgFirstCmd
1796         .align  2
1797         .global FlashProgDpSecondCmd
1798         .type   FlashProgDpSecondCmd, %function
1799 FlashProgDpSecondCmd:
1800         stp     x29, x30, [sp, -48]!
1801         add     x29, sp, 0
1802         str     x19, [sp,16]
1803         uxtb    w19, w0
1804         mov     w0, w19
1805         str     x1, [x29,40]
1806         bl      NandcGetChipIf
1807         adrp    x2, :got:gNandOptPara
1808         ldr     x1, [x29,40]
1809         ldr     x2, [x2, #:got_lo12:gNandOptPara]
1810         ldrb    w2, [x2,11]
1811         str     w2, [x0,8]
1812         and     w2, w1, 255
1813         str     wzr, [x0,4]
1814         str     wzr, [x0,4]
1815         str     w2, [x0,4]
1816         lsr     w2, w1, 8
1817         str     w2, [x0,4]
1818         lsr     w2, w1, 16
1819         str     w2, [x0,4]
1820         mov     w0, w19
1821         bl      FlashSetRandomizer
1822         ldr     x19, [sp,16]
1823         ldp     x29, x30, [sp], 48
1824         ret
1825         .size   FlashProgDpSecondCmd, .-FlashProgDpSecondCmd
1826         .align  2
1827         .global FlashDeInit
1828         .type   FlashDeInit, %function
1829 FlashDeInit:
1830         stp     x29, x30, [sp, -32]!
1831         mov     w0, 0
1832         add     x29, sp, 0
1833         str     x19, [sp,16]
1834         adrp    x19, :got:gFlashToggleModeEn
1835         bl      NandcWaitFlashReady
1836         bl      FlashSetReadRetryDefault
1837         ldr     x19, [x19, #:got_lo12:gFlashToggleModeEn]
1838         ldrb    w0, [x19]
1839         cbz     w0, .L240
1840         adrp    x0, :got:gFlashInterfaceMode
1841         ldr     x0, [x0, #:got_lo12:gFlashInterfaceMode]
1842         ldrb    w0, [x0]
1843         tbz     x0, 0, .L240
1844         mov     w0, 1
1845         bl      FlashSetInterfaceMode
1846         mov     w0, 1
1847         bl      NandcSetMode
1848         strb    wzr, [x19]
1849 .L240:
1850         mov     w0, 0
1851         mov     w1, 0
1852         bl      NandcRandmzSel
1853         ldr     x19, [sp,16]
1854         mov     w0, 0
1855         ldp     x29, x30, [sp], 32
1856         ret
1857         .size   FlashDeInit, .-FlashDeInit
1858         .align  2
1859         .global NandcTimeCfg
1860         .type   NandcTimeCfg, %function
1861 NandcTimeCfg:
1862         stp     x29, x30, [sp, -32]!
1863         add     x29, sp, 0
1864         str     x19, [sp,16]
1865         mov     w19, w0
1866         mov     w0, 0
1867         bl      rknand_get_clk_rate
1868         mov     w2, 16960
1869         adrp    x1, :got:gpNandc
1870         movk    w2, 0xf, lsl 16
1871         sdiv    w0, w0, w2
1872         ldr     x1, [x1, #:got_lo12:gpNandc]
1873         cmp     w0, 250
1874         ble     .L248
1875         ldr     x0, [x1]
1876         mov     w1, 8354
1877         b       .L255
1878 .L248:
1879         cmp     w0, 220
1880         ble     .L250
1881         ldr     x0, [x1]
1882         b       .L256
1883 .L250:
1884         cmp     w0, 185
1885         ble     .L251
1886         ldr     x0, [x1]
1887         mov     w1, 4226
1888         b       .L255
1889 .L251:
1890         cmp     w0, 160
1891         ldr     x0, [x1]
1892         ble     .L252
1893         mov     w1, 4194
1894         b       .L255
1895 .L252:
1896         cmp     w19, 35
1897         mov     w1, 4193
1898         bls     .L255
1899         cmp     w19, 99
1900         mov     w1, 4225
1901         bls     .L255
1902 .L256:
1903         mov     w1, 8322
1904 .L255:
1905         str     w1, [x0,4]
1906         ldr     x19, [sp,16]
1907         ldp     x29, x30, [sp], 32
1908         ret
1909         .size   NandcTimeCfg, .-NandcTimeCfg
1910         .align  2
1911         .global FlashTimingCfg
1912         .type   FlashTimingCfg, %function
1913 FlashTimingCfg:
1914         sub     w1, w0, #4096
1915         sub     w1, w1, #97
1916         stp     x29, x30, [sp, -16]!
1917         and     w1, w1, -33
1918         cmp     w1, 1
1919         add     x29, sp, 0
1920         bls     .L258
1921         mov     w1, 8322
1922         cmp     w0, w1
1923         bne     .L259
1924 .L258:
1925         adrp    x1, :got:gpNandc
1926         ldr     x1, [x1, #:got_lo12:gpNandc]
1927         ldr     x1, [x1]
1928         str     w0, [x1,4]
1929 .L259:
1930         adrp    x0, :got:gNandParaInfo
1931         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
1932         ldrb    w0, [x0,21]
1933         bl      NandcTimeCfg
1934         ldp     x29, x30, [sp], 16
1935         ret
1936         .size   FlashTimingCfg, .-FlashTimingCfg
1937         .align  2
1938         .global NandcGetTimeCfg
1939         .type   NandcGetTimeCfg, %function
1940 NandcGetTimeCfg:
1941         adrp    x4, :got:gpNandc
1942         ldr     x4, [x4, #:got_lo12:gpNandc]
1943         ldr     x5, [x4]
1944         ldr     w5, [x5,4]
1945         str     w5, [x0]
1946         ldr     x0, [x4]
1947         ldr     w0, [x0]
1948         str     w0, [x1]
1949         ldr     x0, [x4]
1950         ldr     w0, [x0,304]
1951         str     w0, [x2]
1952         ldr     x1, [x4]
1953         ldr     w0, [x1,308]
1954         ldr     w1, [x1,344]
1955         and     w0, w0, 255
1956         orr     w0, w0, w1, lsl 16
1957         str     w0, [x3]
1958         ret
1959         .size   NandcGetTimeCfg, .-NandcGetTimeCfg
1960         .align  2
1961         .global NandcBchSel
1962         .type   NandcBchSel, %function
1963 NandcBchSel:
1964         adrp    x1, :got:gpNandc
1965         uxtb    w0, w0
1966         cmp     w0, 16
1967         ldr     x1, [x1, #:got_lo12:gpNandc]
1968         ldr     x2, [x1]
1969         mov     w1, 1
1970         str     w1, [x2,8]
1971         adrp    x1, :got:gNandcEccBits
1972         ldr     x1, [x1, #:got_lo12:gNandcEccBits]
1973         str     w0, [x1]
1974         mov     w1, 4096
1975         bne     .L262
1976 .L265:
1977         and     w1, w1, -17
1978         b       .L263
1979 .L262:
1980         cmp     w0, 24
1981         bne     .L264
1982         orr     w1, w1, 16
1983         b       .L263
1984 .L264:
1985         cmp     w0, 40
1986         orr     w1, w1, 262144
1987         orr     w1, w1, 16
1988         beq     .L265
1989 .L263:
1990         orr     w1, w1, 1
1991         str     w1, [x2,12]
1992         ret
1993         .size   NandcBchSel, .-NandcBchSel
1994         .align  2
1995         .global FlashBchSel
1996         .type   FlashBchSel, %function
1997 FlashBchSel:
1998         adrp    x1, :got:gNandFlashEccBits
1999         uxtb    w0, w0
2000         stp     x29, x30, [sp, -16]!
2001         add     x29, sp, 0
2002         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
2003         strb    w0, [x1]
2004         bl      NandcBchSel
2005         ldp     x29, x30, [sp], 16
2006         ret
2007         .size   FlashBchSel, .-FlashBchSel
2008         .align  2
2009         .global FlashResume
2010         .type   FlashResume, %function
2011 FlashResume:
2012         adrp    x1, :got:gpNandc
2013         stp     x29, x30, [sp, -48]!
2014         add     x29, sp, 0
2015         ldr     x1, [x1, #:got_lo12:gpNandc]
2016         stp     x19, x20, [sp,16]
2017         str     x21, [sp,32]
2018         adrp    x19, .LANCHOR0
2019         add     x0, x19, :lo12:.LANCHOR0
2020         mov     x20, 0
2021         ldr     x2, [x1]
2022         adrp    x21, :got:IDByte
2023         ldr     w3, [x19,#:lo12:.LANCHOR0]
2024         str     w3, [x2]
2025         ldr     w3, [x0,4]
2026         ldr     x2, [x1]
2027         str     w3, [x2,4]
2028         ldr     w2, [x0,8]
2029         ldr     x1, [x1]
2030         str     w2, [x1,8]
2031         ldr     w2, [x0,12]
2032         str     w2, [x1,12]
2033         ldr     w2, [x0,16]
2034         str     w2, [x1,304]
2035         ldr     w2, [x0,20]
2036         str     w2, [x1,308]
2037         ldr     w2, [x0,24]
2038         str     w2, [x1,336]
2039         ldr     w0, [x0,28]
2040         str     w0, [x1,344]
2041 .L272:
2042         lsl     x0, x20, 3
2043         ldr     x1, [x21, #:got_lo12:IDByte]
2044         ldrb    w0, [x0,x1]
2045         sub     w0, w0, #1
2046         uxtb    w0, w0
2047         cmp     w0, 253
2048         bhi     .L271
2049         mov     w0, w20
2050         bl      FlashReset
2051 .L271:
2052         add     x20, x20, 1
2053         cmp     x20, 4
2054         bne     .L272
2055         adrp    x0, :got:gFlashToggleModeEn
2056         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
2057         ldrb    w0, [x0]
2058         cbz     w0, .L273
2059         adrp    x20, :got:gFlashInterfaceMode
2060         mov     w0, 1
2061         add     x19, x19, :lo12:.LANCHOR0
2062         bl      NandcSetMode
2063         ldr     x20, [x20, #:got_lo12:gFlashInterfaceMode]
2064         ldrb    w0, [x20]
2065         bl      FlashSetInterfaceMode
2066         ldrb    w0, [x20]
2067         bl      NandcSetMode
2068         ldr     w0, [x19,16]
2069         lsr     w0, w0, 8
2070         bl      NandcSetDdrPara
2071 .L273:
2072         adrp    x0, :got:gpNandParaInfo
2073         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
2074         ldr     x0, [x0]
2075         ldrb    w0, [x0,20]
2076         bl      FlashBchSel
2077         ldr     x21, [sp,32]
2078         mov     w0, 0
2079         ldp     x19, x20, [sp,16]
2080         ldp     x29, x30, [sp], 48
2081         ret
2082         .size   FlashResume, .-FlashResume
2083         .align  2
2084         .global NandCIrqEnable
2085         .type   NandCIrqEnable, %function
2086 NandCIrqEnable:
2087         ldr     w3, [x0,368]
2088         mov     x2, 1
2089         lsl     x1, x2, x1
2090         orr     w3, w3, w1
2091         str     w3, [x0,368]
2092         ldr     w2, [x0,364]
2093         orr     w1, w2, w1
2094         str     w1, [x0,364]
2095         ret
2096         .size   NandCIrqEnable, .-NandCIrqEnable
2097         .align  2
2098         .global NandCIrqDisable
2099         .type   NandCIrqDisable, %function
2100 NandCIrqDisable:
2101         ldr     w3, [x0,368]
2102         mov     x2, 1
2103         lsl     x1, x2, x1
2104         orr     w3, w3, w1
2105         str     w3, [x0,368]
2106         ldr     w2, [x0,364]
2107         bic     w1, w2, w1
2108         str     w1, [x0,364]
2109         ret
2110         .size   NandCIrqDisable, .-NandCIrqDisable
2111         .align  2
2112         .global rk_nandc_get_irq_status
2113         .type   rk_nandc_get_irq_status, %function
2114 rk_nandc_get_irq_status:
2115         ldr     w0, [x0,372]
2116         ret
2117         .size   rk_nandc_get_irq_status, .-rk_nandc_get_irq_status
2118         .align  2
2119         .global rk_nandc_flash_ready
2120         .type   rk_nandc_flash_ready, %function
2121 rk_nandc_flash_ready:
2122         stp     x29, x30, [sp, -16]!
2123         mov     w1, 1
2124         add     x29, sp, 0
2125         bl      NandCIrqDisable
2126         ldp     x29, x30, [sp], 16
2127         ret
2128         .size   rk_nandc_flash_ready, .-rk_nandc_flash_ready
2129         .align  2
2130         .global NandcIqrWaitFlashReady
2131         .type   NandcIqrWaitFlashReady, %function
2132 NandcIqrWaitFlashReady:
2133         stp     x29, x30, [sp, -32]!
2134         add     x29, sp, 0
2135         str     x19, [sp,16]
2136         mov     x19, x0
2137         bl      rk_nandc_rb_irq_flag_init
2138         mov     x0, x19
2139         mov     w1, 1
2140         bl      NandCIrqEnable
2141         ldr     w0, [x19]
2142         tbnz    x0, 9, .L283
2143         mov     x0, x19
2144         bl      wait_for_nand_flash_ready
2145         b       .L282
2146 .L283:
2147         mov     x0, x19
2148         mov     w1, 1
2149         bl      NandCIrqDisable
2150 .L282:
2151         ldr     x19, [sp,16]
2152         ldp     x29, x30, [sp], 32
2153         ret
2154         .size   NandcIqrWaitFlashReady, .-NandcIqrWaitFlashReady
2155         .align  2
2156         .global FlashEraseBlocks
2157         .type   FlashEraseBlocks, %function
2158 FlashEraseBlocks:
2159         stp     x29, x30, [sp, -128]!
2160         add     x29, sp, 0
2161         stp     x19, x20, [sp,16]
2162         stp     x21, x22, [sp,32]
2163         stp     x25, x26, [sp,64]
2164         stp     x27, x28, [sp,80]
2165         stp     x23, x24, [sp,48]
2166         mov     x20, x0
2167         mov     w21, w1
2168         mov     w19, 0
2169         mov     w22, 56
2170         add     x25, x29, 120
2171         add     x26, x29, 124
2172         adrp    x27, :got:gMultiPageProgEn
2173         adrp    x28, :got:gDieOp
2174 .L286:
2175         cmp     w19, w21
2176         adrp    x23, :got:gNandMaxDie
2177         bcs     .L301
2178         umull   x5, w19, w22
2179         mov     w1, 0
2180         sub     w4, w21, w19
2181         add     x23, x20, x5
2182         mov     x2, x25
2183         mov     x0, x23
2184         mov     x3, x26
2185         str     x5, [x29,104]
2186         bl      LogAddr2PhyAddr
2187         mov     w24, w0
2188         adrp    x1, :got:gNandMaxDie
2189         ldr     w0, [x29,124]
2190         ldr     x5, [x29,104]
2191         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
2192         ldrb    w1, [x1]
2193         cmp     w0, w1
2194         bcc     .L287
2195         mov     w0, -1
2196         str     w0, [x20,x5]
2197         b       .L288
2198 .L287:
2199         ldr     x1, [x27, #:got_lo12:gMultiPageProgEn]
2200         mov     x5, 24
2201         ldr     x4, [x28, #:got_lo12:gDieOp]
2202         ldrb    w1, [x1]
2203         cmp     w1, wzr
2204         uxtw    x1, w0
2205         csel    w24, w24, wzr, ne
2206         madd    x1, x1, x5, x4
2207         adrp    x4, :got:gDieOp
2208         ldr     x1, [x1,8]
2209         cbz     x1, .L290
2210         str     x4, [x29,104]
2211         bl      FlashWaitCmdDone
2212         ldr     x4, [x29,104]
2213 .L290:
2214         ldr     x2, [x4, #:got_lo12:gDieOp]
2215         mov     x1, 24
2216         ldr     w0, [x29,124]
2217         madd    x1, x0, x1, x2
2218         ldr     w2, [x29,120]
2219         str     x23, [x1,8]
2220         str     xzr, [x1,16]
2221         str     w2, [x1,4]
2222         cbz     w24, .L291
2223         add     w2, w19, 1
2224         umull   x2, w2, w22
2225         add     x2, x20, x2
2226         str     x2, [x1,16]
2227 .L291:
2228         adrp    x1, :got:DieCsIndex
2229         ldr     x4, [x4, #:got_lo12:gDieOp]
2230         add     w19, w19, w24
2231         ldr     x1, [x1, #:got_lo12:DieCsIndex]
2232         ldrb    w23, [x1,x0]
2233         mov     x1, 24
2234         mul     x0, x0, x1
2235         strb    w23, [x4,x0]
2236         mov     w0, w23
2237         bl      NandcFlashCs
2238         adrp    x0, :got:DieAddrs
2239         ldr     w1, [x29,124]
2240         ldr     x0, [x0, #:got_lo12:DieAddrs]
2241         ldr     w0, [x0,x1,lsl 2]
2242         ldr     w1, [x29,120]
2243         cmp     w0, wzr
2244         mov     w0, w23
2245         cset    w2, ne
2246         bl      FlashWaitReadyEN
2247         ldr     w1, [x29,120]
2248         mov     w0, w23
2249         mov     w2, w24
2250         bl      FlashEraseCmd
2251         mov     w0, w23
2252         bl      NandcFlashDeCs
2253 .L288:
2254         add     w19, w19, 1
2255         b       .L286
2256 .L301:
2257         adrp    x0, :got:gpNandc
2258         mov     w19, 0
2259         ldr     x0, [x0, #:got_lo12:gpNandc]
2260         ldr     x0, [x0]
2261         bl      NandcIqrWaitFlashReady
2262 .L293:
2263         ldr     x0, [x23, #:got_lo12:gNandMaxDie]
2264         ldrb    w0, [x0]
2265         cmp     w19, w0
2266         bcs     .L302
2267         mov     w0, w19
2268         add     w19, w19, 1
2269         bl      FlashWaitCmdDone
2270         b       .L293
2271 .L302:
2272         mov     w0, 0
2273         ldp     x19, x20, [sp,16]
2274         ldp     x21, x22, [sp,32]
2275         ldp     x23, x24, [sp,48]
2276         ldp     x25, x26, [sp,64]
2277         ldp     x27, x28, [sp,80]
2278         ldp     x29, x30, [sp], 128
2279         ret
2280         .size   FlashEraseBlocks, .-FlashEraseBlocks
2281         .align  2
2282         .global rk_nandc_flash_xfer_completed
2283         .type   rk_nandc_flash_xfer_completed, %function
2284 rk_nandc_flash_xfer_completed:
2285         stp     x29, x30, [sp, -16]!
2286         mov     w1, 0
2287         add     x29, sp, 0
2288         bl      NandCIrqDisable
2289         ldp     x29, x30, [sp], 16
2290         ret
2291         .size   rk_nandc_flash_xfer_completed, .-rk_nandc_flash_xfer_completed
2292         .align  2
2293         .global NandcSendDumpDataStart
2294         .type   NandcSendDumpDataStart, %function
2295 NandcSendDumpDataStart:
2296         sub     sp, sp, #16
2297         mov     w2, 1
2298         mov     w1, 10
2299         bfi     w1, w2, 5, 2
2300         ldr     w2, [x0,16]
2301         str     w2, [sp,8]
2302         orr     w1, w1, 536870912
2303         orr     w1, w1, 1024
2304         ldr     w2, [sp,8]
2305         orr     w1, w1, 2097152
2306         and     w2, w2, -5
2307         str     w2, [sp,8]
2308         ldr     w2, [sp,8]
2309         add     sp, sp, 16
2310         str     w2, [x0,16]
2311         str     w1, [x0,8]
2312         orr     w1, w1, 4
2313         str     w1, [x0,8]
2314         ret
2315         .size   NandcSendDumpDataStart, .-NandcSendDumpDataStart
2316         .align  2
2317         .global NandcSendDumpDataDone
2318         .type   NandcSendDumpDataDone, %function
2319 NandcSendDumpDataDone:
2320         sub     sp, sp, #16
2321 .L306:
2322         ldr     w1, [x0,8]
2323         str     w1, [sp,8]
2324         ldr     w1, [sp,8]
2325         tbz     x1, 20, .L306
2326         add     sp, sp, 16
2327         ret
2328         .size   NandcSendDumpDataDone, .-NandcSendDumpDataDone
2329         .align  2
2330         .global NandcXferStart
2331         .type   NandcXferStart, %function
2332 NandcXferStart:
2333         stp     x29, x30, [sp, -96]!
2334         ubfiz   x0, x0, 4, 8
2335         ubfx    x3, x3, 1, 7
2336         add     x29, sp, 0
2337         str     x25, [sp,64]
2338         uxtb    w25, w1
2339         adrp    x1, :got:gNandChipMap
2340         stp     x19, x20, [sp,16]
2341         stp     x21, x22, [sp,32]
2342         ldr     x1, [x1, #:got_lo12:gNandChipMap]
2343         ubfiz   w19, w25, 1, 1
2344         stp     x23, x24, [sp,48]
2345         uxtb    w23, w2
2346         add     x2, x1, x0
2347         ldr     x21, [x1,x0]
2348         mov     w1, 16
2349         orr     w19, w19, 8
2350         mov     x22, x4
2351         ldrb    w0, [x2,8]
2352         ldr     w24, [x21,12]
2353         bfi     w24, w1, 8, 8
2354         and     w24, w24, -9
2355         bfi     w24, w0, 5, 3
2356         mov     w0, 1
2357         bfi     w19, w0, 5, 2
2358         adrp    x0, :got:gNandcVer
2359         orr     w19, w19, 536870912
2360         orr     w19, w19, 1024
2361         ldr     x0, [x0, #:got_lo12:gNandcVer]
2362         bfi     w19, w3, 4, 1
2363         ldr     w0, [x0]
2364         cmp     w0, 3
2365         bls     .L310
2366         ldr     w0, [x21,16]
2367         cmp     x5, xzr
2368         str     w0, [x29,88]
2369         cset    w6, ne
2370         ldr     w0, [x29,88]
2371         and     w0, w0, -5
2372         str     w0, [x29,88]
2373         cbnz    w6, .L324
2374         cbz     x4, .L311
2375 .L324:
2376         adrp    x20, :got:gMasterInfo
2377         cbnz    w25, .L313
2378 .L321:
2379         mov     x0, x21
2380         add     w23, w23, 1
2381         asr     w23, w23, 1
2382         bl      rk_nandc_xfer_irq_flag_init
2383         bfi     w19, w23, 22, 6
2384         mov     x0, x21
2385         mov     w1, 0
2386         bl      NandCIrqEnable
2387         mov     x0, x22
2388         cbnz    x22, .L315
2389         ldr     x0, [x20, #:got_lo12:gMasterInfo]
2390         ldr     x0, [x0]
2391         b       .L315
2392 .L313:
2393         adrp    x0, :got:gNandcEccBits
2394         mov     w3, 128
2395         mov     w1, 0
2396         lsr     w7, w23, 1
2397         mov     w2, w1
2398         mov     w8, -1
2399         ldr     x0, [x0, #:got_lo12:gNandcEccBits]
2400         ldr     w0, [x0]
2401         cmp     w0, 25
2402         mov     w0, 64
2403         csel    w3, w0, w3, cc
2404 .L317:
2405         cmp     w2, w7
2406         bcs     .L321
2407         lsr     w0, w1, 2
2408         ldr     x4, [x20, #:got_lo12:gMasterInfo]
2409         ubfiz   x0, x0, 2, 30
2410         cbz     w6, .L318
2411         ldr     x9, [x4,8]
2412         ldrh    w4, [x5,2]
2413         ldrh    w10, [x5],4
2414         orr     w4, w10, w4, lsl 16
2415         str     w4, [x9,x0]
2416         b       .L319
2417 .L318:
2418         ldr     x4, [x4,8]
2419         str     w8, [x4,x0]
2420 .L319:
2421         add     w2, w2, 1
2422         add     w1, w1, w3
2423         b       .L317
2424 .L315:
2425         ldr     x20, [x20, #:got_lo12:gMasterInfo]
2426         ubfx    x23, x19, 22, 5
2427         mov     w2, w25
2428         and     x22, x22, 3
2429         ldr     x1, [x20,8]
2430         str     x1, [x20,24]
2431         lsl     w1, w23, 10
2432         str     x0, [x20,16]
2433         bl      rknand_dma_map_single
2434         str     w0, [x20,32]
2435         ldr     x0, [x20,24]
2436         lsl     w1, w23, 7
2437         mov     w2, w25
2438         bl      rknand_dma_map_single
2439         str     w0, [x20,36]
2440         mov     w0, 1
2441         str     w0, [x20,40]
2442         ldr     w0, [x20,32]
2443         mov     w1, 16
2444         str     w0, [x21,20]
2445         ldr     w0, [x20,36]
2446         str     w0, [x21,24]
2447         str     wzr, [x29,88]
2448         ldr     w0, [x29,88]
2449         bfi     w0, w1, 9, 5
2450         str     w0, [x29,88]
2451         ldr     w0, [x29,88]
2452         orr     w0, w0, 448
2453         str     w0, [x29,88]
2454         cbnz    x22, .L322
2455         ldr     w0, [x29,88]
2456         mov     w1, 2
2457         bfi     w0, w1, 3, 3
2458         str     w0, [x29,88]
2459 .L322:
2460         ldr     w0, [x29,88]
2461         cmp     w25, wzr
2462         cset    w1, eq
2463         orr     w0, w0, 4
2464         str     w0, [x29,88]
2465         ldr     w0, [x29,88]
2466         bfi     w0, w1, 1, 1
2467         str     w0, [x29,88]
2468         ldr     w0, [x29,88]
2469         orr     w0, w0, 1
2470         str     w0, [x29,88]
2471 .L311:
2472         ldr     w0, [x29,88]
2473         str     w0, [x21,16]
2474 .L310:
2475         str     w24, [x21,12]
2476         str     w19, [x21,8]
2477         orr     w19, w19, 4
2478         str     w19, [x21,8]
2479         ldp     x19, x20, [sp,16]
2480         ldp     x21, x22, [sp,32]
2481         ldp     x23, x24, [sp,48]
2482         ldr     x25, [sp,64]
2483         ldp     x29, x30, [sp], 96
2484         ret
2485         .size   NandcXferStart, .-NandcXferStart
2486         .align  2
2487         .global Ftl_log2
2488         .type   Ftl_log2, %function
2489 Ftl_log2:
2490         mov     w2, 1
2491         mov     w1, 0
2492 .L329:
2493         cmp     w2, w0
2494         bhi     .L331
2495         add     w1, w1, 1
2496         lsl     w2, w2, 1
2497         uxth    w1, w1
2498         b       .L329
2499 .L331:
2500         sub     w0, w1, #1
2501         ret
2502         .size   Ftl_log2, .-Ftl_log2
2503         .align  2
2504         .global FtlPrintInfo
2505         .type   FtlPrintInfo, %function
2506 FtlPrintInfo:
2507         ret
2508         .size   FtlPrintInfo, .-FtlPrintInfo
2509         .align  2
2510         .global FtlSysBlkNumInit
2511         .type   FtlSysBlkNumInit, %function
2512 FtlSysBlkNumInit:
2513         uxth    w0, w0
2514         mov     w1, 24
2515         cmp     w0, 23
2516         adrp    x2, :got:c_ftl_nand_max_sys_blks
2517         csel    w0, w0, w1, hi
2518         adrp    x1, :got:c_ftl_nand_sys_blks_per_plane
2519         adrp    x3, :got:c_ftl_nand_blk_pre_plane
2520         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
2521         str     w0, [x1]
2522         adrp    x1, :got:c_ftl_nand_planes_num
2523         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_sys_blks]
2524         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
2525         ldrh    w1, [x1]
2526         mul     w1, w0, w1
2527         str     w1, [x2]
2528         adrp    x2, :got:c_ftl_nand_data_blks_per_plane
2529         ldr     x3, [x3, #:got_lo12:c_ftl_nand_blk_pre_plane]
2530         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_blks_per_plane]
2531         ldrh    w3, [x3]
2532         sub     w0, w3, w0
2533         strh    w0, [x2]
2534         adrp    x2, :got:c_ftl_nand_totle_phy_blks
2535         adrp    x0, :got:c_ftl_nand_max_data_blks
2536         ldr     x2, [x2, #:got_lo12:c_ftl_nand_totle_phy_blks]
2537         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_data_blks]
2538         ldr     w2, [x2]
2539         sub     w1, w2, w1
2540         str     w1, [x0]
2541         mov     w0, 0
2542         ret
2543         .size   FtlSysBlkNumInit, .-FtlSysBlkNumInit
2544         .align  2
2545         .global FtlConstantsInit
2546         .type   FtlConstantsInit, %function
2547 FtlConstantsInit:
2548         stp     x29, x30, [sp, -96]!
2549         adrp    x3, :got:c_ftl_nand_planes_per_die
2550         adrp    x6, :got:p_plane_order_table
2551         add     x29, sp, 0
2552         stp     x19, x20, [sp,16]
2553         stp     x21, x22, [sp,32]
2554         stp     x23, x24, [sp,48]
2555         stp     x25, x26, [sp,64]
2556         stp     x27, x28, [sp,80]
2557         mov     x19, x0
2558         adrp    x20, :got:c_ftl_nand_blk_pre_plane
2559         ldrh    w7, [x0,8]
2560         adrp    x0, :got:c_ftl_nand_type
2561         ldrh    w2, [x19,10]
2562         ldr     x0, [x0, #:got_lo12:c_ftl_nand_type]
2563         ldrh    w5, [x19,14]
2564         strh    w7, [x0]
2565         adrp    x0, :got:c_ftl_nand_die_num
2566         ldr     x1, [x0, #:got_lo12:c_ftl_nand_die_num]
2567         strh    w2, [x1]
2568         ldrh    w1, [x19,12]
2569         ldr     x3, [x3, #:got_lo12:c_ftl_nand_planes_per_die]
2570         strh    w1, [x3]
2571         ldr     x3, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
2572         strh    w5, [x3]
2573         mov     x3, 0
2574 .L336:
2575         ldr     x4, [x6, #:got_lo12:p_plane_order_table]
2576         adrp    x13, :got:p_plane_order_table
2577         strb    w3, [x3,x4]
2578         add     x3, x3, 1
2579         cmp     x3, 32
2580         bne     .L336
2581         ldrh    w4, [x19,20]
2582         ldrb    w3, [x19,15]
2583         cmp     w4, w3
2584         bcs     .L337
2585         uxtb    w9, w1
2586         mov     w4, 0
2587         mul     w12, w1, w2
2588         ubfiz   w11, w9, 1, 7
2589 .L338:
2590         cmp     w4, w1
2591         bcs     .L340
2592         uxtb    w3, w4
2593         mov     w6, w4
2594         mov     w8, 0
2595 .L341:
2596         cmp     w8, w2
2597         bcs     .L354
2598         ldr     x10, [x13, #:got_lo12:p_plane_order_table]
2599         add     w14, w6, w12
2600         add     w15, w3, w9
2601         add     w8, w8, 1
2602         strb    w3, [x10,w6,uxtw]
2603         add     w3, w3, w11
2604         strb    w15, [x10,x14]
2605         add     w6, w6, w1
2606         uxtb    w3, w3
2607         b       .L341
2608 .L354:
2609         add     w4, w4, 1
2610         b       .L338
2611 .L340:
2612         ldr     x3, [x0, #:got_lo12:c_ftl_nand_die_num]
2613         lsl     w2, w2, 1
2614         lsr     w5, w5, 1
2615         strh    w2, [x3]
2616         ldr     x2, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
2617         strh    w5, [x2]
2618 .L337:
2619         adrp    x2, :got:c_mlc_erase_count_value
2620         adrp    x21, :got:c_ftl_nand_ext_blk_pre_plane
2621         mov     w3, 5
2622         cmp     w7, 1
2623         ldr     x2, [x2, #:got_lo12:c_mlc_erase_count_value]
2624         strh    w3, [x2]
2625         ldr     x3, [x21, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
2626         strh    wzr, [x3]
2627         bne     .L342
2628         strh    w7, [x2]
2629 .L342:
2630         adrp    x23, :got:c_ftl_vendor_part_size
2631         mov     w2, 4352
2632         ldr     x3, [x23, #:got_lo12:c_ftl_vendor_part_size]
2633         strh    w2, [x3]
2634         adrp    x2, :got:g_slc2KBNand
2635         ldr     x2, [x2, #:got_lo12:g_slc2KBNand]
2636         ldrb    w2, [x2]
2637         cbz     w2, .L343
2638         mov     w2, 384
2639         strh    w2, [x3]
2640 .L343:
2641         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
2642         adrp    x24, :got:c_ftl_nand_planes_num
2643         adrp    x25, :got:c_ftl_nand_page_pre_blk
2644         adrp    x28, :got:c_ftl_nand_page_pre_slc_blk
2645         adrp    x27, :got:c_ftl_nand_sec_pre_page
2646         adrp    x22, :got:c_ftl_nand_sec_pre_page_shift
2647         ldrh    w0, [x0]
2648         ldr     x24, [x24, #:got_lo12:c_ftl_nand_planes_num]
2649         mul     w0, w1, w0
2650         strh    w0, [x24]
2651         ldr     x20, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
2652         ldrh    w0, [x20]
2653         mul     w1, w1, w0
2654         adrp    x0, :got:c_ftl_nand_blks_per_die
2655         uxth    w1, w1
2656         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blks_per_die]
2657         strh    w1, [x0]
2658         mov     w0, w1
2659         bl      Ftl_log2
2660         adrp    x1, :got:c_ftl_nand_blks_per_die_shift
2661         ldrh    w2, [x19,18]
2662         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blks_per_die_shift]
2663         strh    w0, [x1]
2664         ldrh    w0, [x19,16]
2665         ldr     x1, [x25, #:got_lo12:c_ftl_nand_page_pre_blk]
2666         strh    w0, [x1]
2667         ldr     x1, [x28, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
2668         strh    w2, [x1]
2669         adrp    x1, :got:c_ftl_nand_page_pre_super_blk
2670         ldrh    w2, [x24]
2671         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_super_blk]
2672         mul     w0, w0, w2
2673         strh    w0, [x1]
2674         ldrh    w0, [x19,20]
2675         ldr     x26, [x27, #:got_lo12:c_ftl_nand_sec_pre_page]
2676         strh    w0, [x26]
2677         bl      Ftl_log2
2678         ldr     x1, [x22, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
2679         uxth    w6, w0
2680         ldrh    w2, [x26]
2681         mov     x4, x28
2682         ldrh    w5, [x24]
2683         strh    w0, [x1]
2684         adrp    x0, :got:c_ftl_nand_byte_pre_page
2685         lsl     w1, w2, 9
2686         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_page]
2687         strh    w1, [x0]
2688         adrp    x0, :got:c_ftl_nand_byte_pre_oob
2689         ubfx    x1, x1, 9, 7
2690         lsl     w1, w1, 1
2691         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
2692         strh    w1, [x0]
2693         adrp    x0, :got:c_ftl_nand_reserved_blks
2694         ldrh    w1, [x19,26]
2695         mov     x19, x25
2696         ldr     x0, [x0, #:got_lo12:c_ftl_nand_reserved_blks]
2697         strh    w1, [x0]
2698         adrp    x1, :got:c_ftl_nand_totle_phy_blks
2699         ldrh    w0, [x20]
2700         mov     x20, x27
2701         ldr     x1, [x1, #:got_lo12:c_ftl_nand_totle_phy_blks]
2702         cmp     w0, 1024
2703         mul     w3, w5, w0
2704         str     w3, [x1]
2705         bls     .L344
2706         ldr     x1, [x21, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
2707         and     w3, w0, 255
2708         strh    w3, [x1]
2709 .L344:
2710         ldr     x21, [x21, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
2711         adrp    x3, :got:DeviceCapacity
2712         ldr     x7, [x19, #:got_lo12:c_ftl_nand_page_pre_blk]
2713         ldrh    w1, [x21]
2714         ldrh    w7, [x7]
2715         sub     w1, w0, w1
2716         ldr     x3, [x3, #:got_lo12:DeviceCapacity]
2717         mul     w1, w5, w1
2718         mul     w1, w1, w2
2719         mul     w1, w1, w7
2720         asr     w1, w1, 11
2721         str     w1, [x3]
2722         ldr     x4, [x4, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
2723         ldr     x23, [x23, #:got_lo12:c_ftl_vendor_part_size]
2724         ldrh    w4, [x4]
2725         ldrh    w1, [x23]
2726         mul     w2, w2, w4
2727         lsl     w3, w1, 3
2728         sdiv    w2, w3, w2
2729         adrp    x3, :got:c_ftl_nand_max_vendor_blks
2730         uxth    w2, w2
2731         cmp     w2, 4
2732         bls     .L345
2733         ldr     x4, [x3, #:got_lo12:c_ftl_nand_max_vendor_blks]
2734         strh    w2, [x4]
2735         b       .L346
2736 .L345:
2737         ldr     x2, [x3, #:got_lo12:c_ftl_nand_max_vendor_blks]
2738         mov     w4, 4
2739         strh    w4, [x2]
2740 .L346:
2741         adrp    x2, :got:c_ftl_nand_vendor_region_num
2742         asr     w1, w1, w6
2743         add     w1, w1, 2
2744         lsl     w0, w0, 6
2745         cmp     w5, 1
2746         ldr     x2, [x2, #:got_lo12:c_ftl_nand_vendor_region_num]
2747         strh    w1, [x2]
2748         add     w1, w6, 9
2749         asr     w0, w0, w1
2750         adrp    x1, :got:c_ftl_nand_map_blks_per_plane
2751         ldr     x1, [x1, #:got_lo12:c_ftl_nand_map_blks_per_plane]
2752         strh    w0, [x1]
2753         adrp    x1, :got:c_ftl_nand_max_map_blks
2754         and     w0, w0, 65535
2755         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_map_blks]
2756         mul     w2, w0, w5
2757         add     w0, w0, 8
2758         str     w2, [x1]
2759         ldr     x3, [x3, #:got_lo12:c_ftl_nand_max_vendor_blks]
2760         ldrh    w1, [x3]
2761         udiv    w1, w1, w5
2762         add     w0, w0, w1
2763         adrp    x1, :got:c_ftl_nand_sys_blks_per_plane
2764         ldr     x2, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
2765         bne     .L353
2766         add     w0, w0, 4
2767 .L353:
2768         str     w0, [x2]
2769         ldr     x21, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
2770         ldrh    w0, [x21]
2771         bl      FtlSysBlkNumInit
2772         adrp    x0, :got:c_ftl_nand_init_sys_blks_per_plane
2773         ldr     w1, [x21]
2774         adrp    x2, :got:c_ftl_nand_map_region_num
2775         ldr     x0, [x0, #:got_lo12:c_ftl_nand_init_sys_blks_per_plane]
2776         str     w1, [x0]
2777         adrp    x0, :got:c_ftl_nand_max_data_blks
2778         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_blk]
2779         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_data_blks]
2780         ldr     x22, [x22, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
2781         ldrh    w1, [x19]
2782         ldr     w0, [x0]
2783         ldr     x2, [x2, #:got_lo12:c_ftl_nand_map_region_num]
2784         lsl     w0, w0, 2
2785         mul     w1, w0, w1
2786         ldrh    w0, [x22]
2787         add     w0, w0, 9
2788         lsr     w0, w1, w0
2789         mov     w1, 2048
2790         add     w0, w0, 2
2791         strh    w0, [x2]
2792         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
2793         ldr     x20, [x20, #:got_lo12:c_ftl_nand_sec_pre_page]
2794         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
2795         ldrh    w2, [x20]
2796         sdiv    w1, w1, w2
2797         strh    w1, [x0]
2798         adrp    x0, :got:g_MaxLbaSector
2799         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
2800         str     wzr, [x0]
2801         mov     w0, 0
2802         ldp     x19, x20, [sp,16]
2803         ldp     x21, x22, [sp,32]
2804         ldp     x23, x24, [sp,48]
2805         ldp     x25, x26, [sp,64]
2806         ldp     x27, x28, [sp,80]
2807         ldp     x29, x30, [sp], 96
2808         ret
2809         .size   FtlConstantsInit, .-FtlConstantsInit
2810         .align  2
2811         .global IsBlkInVendorPart
2812         .type   IsBlkInVendorPart, %function
2813 IsBlkInVendorPart:
2814         adrp    x1, :got:g_totle_vendor_block
2815         uxth    w4, w0
2816         mov     w0, 0
2817         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
2818         ldrh    w1, [x1]
2819         cbz     w1, .L356
2820         adrp    x1, :got:c_ftl_nand_max_vendor_blks
2821         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
2822         ldrh    w2, [x1]
2823         adrp    x1, :got:p_vendor_block_table
2824         ldr     x1, [x1, #:got_lo12:p_vendor_block_table]
2825         ldr     x3, [x1]
2826         mov     x1, 0
2827 .L357:
2828         cmp     w2, w1, uxth
2829         bls     .L362
2830         add     x1, x1, 1
2831         add     x0, x3, x1, lsl 1
2832         ldrh    w0, [x0,-2]
2833         cmp     w0, w4
2834         bne     .L357
2835         mov     w0, 1
2836         b       .L356
2837 .L362:
2838         mov     w0, 0
2839 .L356:
2840         ret
2841         .size   IsBlkInVendorPart, .-IsBlkInVendorPart
2842         .align  2
2843         .global FtlCacheMetchLpa
2844         .type   FtlCacheMetchLpa, %function
2845 FtlCacheMetchLpa:
2846         adrp    x2, :got:g_wr_page_num
2847         mov     w6, w0
2848         mov     w0, 0
2849         ldr     x2, [x2, #:got_lo12:g_wr_page_num]
2850         ldr     w3, [x2]
2851         cbz     w3, .L364
2852         adrp    x2, :got:req_wr_io
2853         mov     x0, 56
2854         ldr     x2, [x2, #:got_lo12:req_wr_io]
2855         ldr     x5, [x2]
2856         mov     x2, 0
2857 .L365:
2858         cmp     w3, w2
2859         bls     .L374
2860         madd    x4, x2, x0, x5
2861         add     x2, x2, 1
2862         ldr     w4, [x4,24]
2863         cmp     w4, w6
2864         bcc     .L365
2865         cmp     w4, w1
2866         bhi     .L365
2867         mov     w0, 1
2868         b       .L364
2869 .L374:
2870         mov     w0, 0
2871 .L364:
2872         ret
2873         .size   FtlCacheMetchLpa, .-FtlCacheMetchLpa
2874         .align  2
2875         .global FtlGetCap
2876         .type   FtlGetCap, %function
2877 FtlGetCap:
2878         adrp    x0, :got:g_MaxLbaSector
2879         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
2880         ldr     w0, [x0]
2881         ret
2882         .size   FtlGetCap, .-FtlGetCap
2883         .align  2
2884         .global FtlGetCapacity
2885         .type   FtlGetCapacity, %function
2886 FtlGetCapacity:
2887         adrp    x0, :got:g_MaxLbaSector
2888         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
2889         ldr     w0, [x0]
2890         ret
2891         .size   FtlGetCapacity, .-FtlGetCapacity
2892         .align  2
2893         .global FtlGetLpn
2894         .type   FtlGetLpn, %function
2895 FtlGetLpn:
2896         adrp    x0, :got:g_MaxLpn
2897         ldr     x0, [x0, #:got_lo12:g_MaxLpn]
2898         ldr     w0, [x0]
2899         ret
2900         .size   FtlGetLpn, .-FtlGetLpn
2901         .align  2
2902         .global FtlGetCurEraseBlock
2903         .type   FtlGetCurEraseBlock, %function
2904 FtlGetCurEraseBlock:
2905         adrp    x0, :got:c_ftl_nand_planes_num
2906         adrp    x1, :got:g_cur_erase_blk
2907         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
2908         ldr     x1, [x1, #:got_lo12:g_cur_erase_blk]
2909         ldrh    w2, [x0]
2910         ldr     w0, [x1]
2911         mul     w0, w2, w0
2912         ret
2913         .size   FtlGetCurEraseBlock, .-FtlGetCurEraseBlock
2914         .align  2
2915         .global FtlGetAllBlockNum
2916         .type   FtlGetAllBlockNum, %function
2917 FtlGetAllBlockNum:
2918         adrp    x0, :got:c_ftl_nand_blk_pre_plane
2919         adrp    x1, :got:c_ftl_nand_planes_num
2920         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
2921         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
2922         ldrh    w2, [x0]
2923         ldrh    w0, [x1]
2924         mul     w0, w2, w0
2925         ret
2926         .size   FtlGetAllBlockNum, .-FtlGetAllBlockNum
2927         .align  2
2928         .global FtlBbmMapBadBlock
2929         .type   FtlBbmMapBadBlock, %function
2930 FtlBbmMapBadBlock:
2931         uxth    w1, w0
2932         adrp    x0, :got:c_ftl_nand_blks_per_die
2933         stp     x29, x30, [sp, -32]!
2934         mov     w4, 1
2935         add     x29, sp, 0
2936         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blks_per_die]
2937         str     x19, [sp,16]
2938         adrp    x19, :got:gBbtInfo
2939         ldrh    w3, [x0]
2940         ldr     x19, [x19, #:got_lo12:gBbtInfo]
2941         udiv    w2, w1, w3
2942         add     x0, x19, x2, uxth 3
2943         ldr     x0, [x0,32]
2944         msub    w3, w2, w3, w1
2945         uxth    w3, w3
2946         ubfx    x6, x3, 5, 11
2947         lsl     w4, w4, w3
2948         lsl     x6, x6, 2
2949         ldr     w5, [x0,x6]
2950         orr     w4, w4, w5
2951         str     w4, [x0,x6]
2952         adrp    x0, .LC1
2953         add     x0, x0, :lo12:.LC1
2954         bl      printk
2955         ldrh    w0, [x19,6]
2956         add     w0, w0, 1
2957         strh    w0, [x19,6]
2958         mov     w0, 0
2959         ldr     x19, [sp,16]
2960         ldp     x29, x30, [sp], 32
2961         ret
2962         .size   FtlBbmMapBadBlock, .-FtlBbmMapBadBlock
2963         .align  2
2964         .global FtlBbmIsBadBlock
2965         .type   FtlBbmIsBadBlock, %function
2966 FtlBbmIsBadBlock:
2967         adrp    x2, :got:c_ftl_nand_blks_per_die
2968         uxth    w0, w0
2969         ldr     x2, [x2, #:got_lo12:c_ftl_nand_blks_per_die]
2970         ldrh    w1, [x2]
2971         udiv    w2, w0, w1
2972         msub    w0, w2, w1, w0
2973         adrp    x1, :got:gBbtInfo
2974         uxth    w0, w0
2975         ldr     x1, [x1, #:got_lo12:gBbtInfo]
2976         ubfx    x3, x0, 5, 11
2977         add     x2, x1, x2, uxth 3
2978         ldr     x1, [x2,32]
2979         ldr     w1, [x1,x3,lsl 2]
2980         lsr     w0, w1, w0
2981         and     w0, w0, 1
2982         ret
2983         .size   FtlBbmIsBadBlock, .-FtlBbmIsBadBlock
2984         .align  2
2985         .global FtlBbtInfoPrint
2986         .type   FtlBbtInfoPrint, %function
2987 FtlBbtInfoPrint:
2988         ret
2989         .size   FtlBbtInfoPrint, .-FtlBbtInfoPrint
2990         .align  2
2991         .global FtlBbtCalcTotleCnt
2992         .type   FtlBbtCalcTotleCnt, %function
2993 FtlBbtCalcTotleCnt:
2994         stp     x29, x30, [sp, -48]!
2995         add     x29, sp, 0
2996         stp     x19, x20, [sp,16]
2997         mov     w19, 0
2998         stp     x21, x22, [sp,32]
2999         mov     w20, w19
3000         adrp    x22, :got:c_ftl_nand_blks_per_die
3001         adrp    x21, :got:c_ftl_nand_die_num
3002 .L384:
3003         ldr     x0, [x22, #:got_lo12:c_ftl_nand_blks_per_die]
3004         ldr     x1, [x21, #:got_lo12:c_ftl_nand_die_num]
3005         ldrh    w0, [x0]
3006         ldrh    w1, [x1]
3007         mul     w0, w0, w1
3008         cmp     w20, w0
3009         bge     .L390
3010         mov     w0, w20
3011         bl      FtlBbmIsBadBlock
3012         cbz     w0, .L385
3013         add     w19, w19, 1
3014         uxth    w19, w19
3015 .L385:
3016         add     w20, w20, 1
3017         uxth    w20, w20
3018         b       .L384
3019 .L390:
3020         mov     w0, w19
3021         ldp     x19, x20, [sp,16]
3022         ldp     x21, x22, [sp,32]
3023         ldp     x29, x30, [sp], 48
3024         ret
3025         .size   FtlBbtCalcTotleCnt, .-FtlBbtCalcTotleCnt
3026         .align  2
3027         .global V2P_block
3028         .type   V2P_block, %function
3029 V2P_block:
3030         adrp    x2, :got:c_ftl_nand_planes_per_die
3031         uxth    w0, w0
3032         uxth    w1, w1
3033         ldr     x2, [x2, #:got_lo12:c_ftl_nand_planes_per_die]
3034         ldrh    w3, [x2]
3035         udiv    w2, w0, w3
3036         msub    w0, w2, w3, w0
3037         madd    w0, w1, w3, w0
3038         adrp    x1, :got:c_ftl_nand_blks_per_die
3039         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blks_per_die]
3040         ldrh    w1, [x1]
3041         madd    w0, w2, w1, w0
3042         ret
3043         .size   V2P_block, .-V2P_block
3044         .align  2
3045         .global P2V_plane
3046         .type   P2V_plane, %function
3047 P2V_plane:
3048         adrp    x1, :got:c_ftl_nand_planes_per_die
3049         adrp    x2, :got:c_ftl_nand_blks_per_die
3050         uxth    w0, w0
3051         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_per_die]
3052         ldr     x2, [x2, #:got_lo12:c_ftl_nand_blks_per_die]
3053         ldrh    w1, [x1]
3054         ldrh    w3, [x2]
3055         udiv    w2, w0, w1
3056         udiv    w3, w0, w3
3057         msub    w0, w2, w1, w0
3058         madd    w0, w1, w3, w0
3059         ret
3060         .size   P2V_plane, .-P2V_plane
3061         .align  2
3062         .global P2V_block_in_plane
3063         .type   P2V_block_in_plane, %function
3064 P2V_block_in_plane:
3065         adrp    x1, :got:c_ftl_nand_blks_per_die
3066         uxth    w0, w0
3067         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blks_per_die]
3068         ldrh    w2, [x1]
3069         udiv    w1, w0, w2
3070         msub    w0, w1, w2, w0
3071         adrp    x1, :got:c_ftl_nand_planes_per_die
3072         uxth    w0, w0
3073         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_per_die]
3074         ldrh    w1, [x1]
3075         udiv    w0, w0, w1
3076         ret
3077         .size   P2V_block_in_plane, .-P2V_block_in_plane
3078         .align  2
3079         .global ftl_cmp_data_ver
3080         .type   ftl_cmp_data_ver, %function
3081 ftl_cmp_data_ver:
3082         cmp     w0, w1
3083         mov     w2, -2147483648
3084         bls     .L395
3085         sub     w1, w0, w1
3086         cmp     w1, w2
3087         cset    w0, ls
3088         b       .L396
3089 .L395:
3090         sub     w1, w1, w0
3091         cmp     w1, w2
3092         cset    w0, hi
3093 .L396:
3094         ret
3095         .size   ftl_cmp_data_ver, .-ftl_cmp_data_ver
3096         .align  2
3097         .global FtlFreeSysBlkQueueEmpty
3098         .type   FtlFreeSysBlkQueueEmpty, %function
3099 FtlFreeSysBlkQueueEmpty:
3100         adrp    x0, :got:gSysFreeQueue
3101         ldr     x0, [x0, #:got_lo12:gSysFreeQueue]
3102         ldrh    w0, [x0,6]
3103         cmp     w0, wzr
3104         cset    w0, eq
3105         ret
3106         .size   FtlFreeSysBlkQueueEmpty, .-FtlFreeSysBlkQueueEmpty
3107         .align  2
3108         .global FtlFreeSysBlkQueueFull
3109         .type   FtlFreeSysBlkQueueFull, %function
3110 FtlFreeSysBlkQueueFull:
3111         adrp    x0, :got:gSysFreeQueue
3112         ldr     x0, [x0, #:got_lo12:gSysFreeQueue]
3113         ldrh    w0, [x0,6]
3114         cmp     w0, 1024
3115         cset    w0, eq
3116         ret
3117         .size   FtlFreeSysBlkQueueFull, .-FtlFreeSysBlkQueueFull
3118         .align  2
3119         .global FtlFreeSysBlkQueueIn
3120         .type   FtlFreeSysBlkQueueIn, %function
3121 FtlFreeSysBlkQueueIn:
3122         stp     x29, x30, [sp, -32]!
3123         add     x29, sp, 0
3124         stp     x19, x20, [sp,16]
3125         uxth    w20, w0
3126         uxth    w19, w1
3127         bl      FtlFreeSysBlkQueueFull
3128         uxth    w0, w0
3129         cbnz    w0, .L399
3130         cbz     w19, .L401
3131         mov     w0, w20
3132         bl      P2V_block_in_plane
3133         uxth    w19, w0
3134         adrp    x1, :got:req_erase
3135         lsl     w2, w20, 10
3136         ldr     x1, [x1, #:got_lo12:req_erase]
3137         ldr     x0, [x1]
3138         str     w2, [x0,4]
3139         ldr     x0, [x1]
3140         mov     w1, 1
3141         bl      FlashEraseBlocks
3142         adrp    x0, :got:p_erase_count_table
3143         ubfiz   x1, x19, 1, 16
3144         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
3145         ldr     x2, [x0]
3146         ldrh    w0, [x2,x1]
3147         add     w0, w0, 1
3148         strh    w0, [x2,x1]
3149         adrp    x1, :got:g_totle_sys_slc_erase_count
3150         ldr     x1, [x1, #:got_lo12:g_totle_sys_slc_erase_count]
3151         ldr     w0, [x1]
3152         add     w0, w0, 1
3153         str     w0, [x1]
3154 .L401:
3155         adrp    x1, :got:gSysFreeQueue
3156         ldr     x1, [x1, #:got_lo12:gSysFreeQueue]
3157         ldrh    w0, [x1,6]
3158         ldrh    w2, [x1,4]
3159         add     w0, w0, 1
3160         strh    w0, [x1,6]
3161         add     x0, x1, x2, sxtw 1
3162         add     w2, w2, 1
3163         and     w2, w2, 1023
3164         strh    w20, [x0,8]
3165         strh    w2, [x1,4]
3166 .L399:
3167         ldp     x19, x20, [sp,16]
3168         ldp     x29, x30, [sp], 32
3169         ret
3170         .size   FtlFreeSysBlkQueueIn, .-FtlFreeSysBlkQueueIn
3171         .align  2
3172         .global FtlFreeSysBLkSort
3173         .type   FtlFreeSysBLkSort, %function
3174 FtlFreeSysBLkSort:
3175         stp     x29, x30, [sp, -48]!
3176         add     x29, sp, 0
3177         stp     x19, x20, [sp,16]
3178         stp     x21, x22, [sp,32]
3179         mov     w19, 0
3180         adrp    x20, :got:gSysFreeQueue
3181         adrp    x21, :got:p_sys_data_buf
3182         adrp    x22, :got:p_erase_count_table
3183 .L406:
3184         ldr     x1, [x20, #:got_lo12:gSysFreeQueue]
3185         adrp    x6, :got:gSysFreeQueue
3186         ldrh    w0, [x1,6]
3187         cmp     w0, w19
3188         bls     .L414
3189         ldrh    w0, [x1,2]
3190         add     w0, w0, w19
3191         add     x0, x1, x0, sxtw 1
3192         ldrh    w0, [x0,8]
3193         bl      P2V_block_in_plane
3194         ubfiz   x0, x0, 1, 16
3195         ldr     x3, [x22, #:got_lo12:p_erase_count_table]
3196         ubfiz   x1, x19, 2, 16
3197         ldr     x2, [x21, #:got_lo12:p_sys_data_buf]
3198         add     w19, w19, 1
3199         ldr     x3, [x3]
3200         uxth    w19, w19
3201         ldr     x2, [x2]
3202         ldrh    w0, [x3,x0]
3203         str     w0, [x2,x1]
3204         b       .L406
3205 .L414:
3206         mov     w0, 0
3207         adrp    x7, :got:p_sys_data_buf
3208 .L408:
3209         ldr     x1, [x6, #:got_lo12:gSysFreeQueue]
3210         ldrh    w5, [x1,6]
3211         sub     w1, w5, #1
3212         cmp     w0, w1
3213         bge     .L415
3214         ldr     x1, [x7, #:got_lo12:p_sys_data_buf]
3215         add     w4, w0, 1
3216         uxth    w4, w4
3217         ldr     x3, [x1]
3218         mov     w2, w4
3219         mov     w1, w0
3220 .L409:
3221         cmp     w2, w5
3222         bcs     .L416
3223         ubfiz   x8, x2, 2, 16
3224         ldr     w9, [x3,w1,uxtw 2]
3225         ldr     w8, [x3,x8]
3226         cmp     w9, w8
3227         csel    w1, w1, w2, ls
3228         add     w2, w2, 1
3229         uxth    w2, w2
3230         b       .L409
3231 .L416:
3232         cmp     w0, w1
3233         beq     .L412
3234         ubfiz   x5, x0, 2, 16
3235         ubfiz   x2, x1, 2, 32
3236         ldr     w9, [x3,x5]
3237         ldr     w8, [x3,x2]
3238         str     w9, [x3,x2]
3239         adrp    x2, :got:p_sys_data_buf
3240         ldr     x2, [x2, #:got_lo12:p_sys_data_buf]
3241         ldr     x2, [x2]
3242         str     w8, [x2,x5]
3243         ldr     x2, [x6, #:got_lo12:gSysFreeQueue]
3244         ldrh    w3, [x2,2]
3245         add     w1, w3, w1
3246         add     w0, w3, w0
3247         add     x1, x2, x1, sxtw 1
3248         add     x0, x2, x0, sxtw 1
3249         ldrh    w2, [x0,8]
3250         ldrh    w5, [x1,8]
3251         strh    w2, [x1,8]
3252         strh    w5, [x0,8]
3253 .L412:
3254         mov     w0, w4
3255         b       .L408
3256 .L415:
3257         ldp     x19, x20, [sp,16]
3258         ldp     x21, x22, [sp,32]
3259         ldp     x29, x30, [sp], 48
3260         ret
3261         .size   FtlFreeSysBLkSort, .-FtlFreeSysBLkSort
3262         .align  2
3263         .global IsInFreeQueue
3264         .type   IsInFreeQueue, %function
3265 IsInFreeQueue:
3266         stp     x29, x30, [sp, -32]!
3267         add     x29, sp, 0
3268         str     x19, [sp,16]
3269         uxth    w19, w0
3270         bl      FtlFreeSysBlkQueueFull
3271         uxth    w1, w0
3272         mov     w0, 0
3273         cbnz    w1, .L418
3274         adrp    x2, :got:gSysFreeQueue
3275         mov     w0, w1
3276         ldr     x3, [x2, #:got_lo12:gSysFreeQueue]
3277         ldrh    w4, [x3,6]
3278         ldrh    w3, [x3,2]
3279 .L419:
3280         cmp     w0, w4
3281         bcs     .L423
3282         ldr     x5, [x2, #:got_lo12:gSysFreeQueue]
3283         add     w1, w0, w3
3284         ubfiz   x1, x1, 1, 10
3285         add     x1, x5, x1
3286         ldrh    w1, [x1,8]
3287         cmp     w1, w19
3288         beq     .L422
3289         add     w0, w0, 1
3290         b       .L419
3291 .L423:
3292         mov     w0, 0
3293         b       .L418
3294 .L422:
3295         mov     w0, 1
3296 .L418:
3297         ldr     x19, [sp,16]
3298         ldp     x29, x30, [sp], 32
3299         ret
3300         .size   IsInFreeQueue, .-IsInFreeQueue
3301         .align  2
3302         .global FtlFreeSysBlkQueueOut
3303         .type   FtlFreeSysBlkQueueOut, %function
3304 FtlFreeSysBlkQueueOut:
3305         stp     x29, x30, [sp, -16]!
3306         add     x29, sp, 0
3307         bl      FtlFreeSysBlkQueueEmpty
3308         uxth    w1, w0
3309         mov     w0, 0
3310         cbnz    w1, .L425
3311         adrp    x1, :got:gSysFreeQueue
3312         ldr     x1, [x1, #:got_lo12:gSysFreeQueue]
3313         ldrh    w2, [x1,2]
3314         add     x0, x1, x2, sxtw 1
3315         ldrh    w3, [x1,6]
3316         add     w2, w2, 1
3317         ldrh    w0, [x0,8]
3318         sub     w3, w3, #1
3319         and     w2, w2, 1023
3320         strh    w3, [x1,6]
3321         strh    w2, [x1,2]
3322 .L425:
3323         ldp     x29, x30, [sp], 16
3324         ret
3325         .size   FtlFreeSysBlkQueueOut, .-FtlFreeSysBlkQueueOut
3326         .align  2
3327         .global insert_data_list
3328         .type   insert_data_list, %function
3329 insert_data_list:
3330         uxth    w0, w0
3331         mov     w9, 65535
3332         cmp     w0, w9
3333         beq     .L428
3334         adrp    x3, :got:p_data_block_list_table
3335         mov     w4, 6
3336         mov     w1, -1
3337         adrp    x2, :got:p_data_block_list_head
3338         umull   x11, w0, w4
3339         ldr     x8, [x3, #:got_lo12:p_data_block_list_table]
3340         mov     x10, x3
3341         mov     x5, x2
3342         ldr     x12, [x8]
3343         add     x6, x12, x11
3344         strh    w1, [x6,2]
3345         strh    w1, [x12,x11]
3346         ldr     x7, [x2, #:got_lo12:p_data_block_list_head]
3347         ldr     x1, [x7]
3348         cbnz    x1, .L429
3349         str     x6, [x7]
3350         b       .L428
3351 .L429:
3352         adrp    x2, :got:p_valid_page_count_table
3353         ubfiz   x7, x0, 1, 16
3354         ldr     x13, [x8]
3355         mov     x8, -6148914691236517206
3356         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
3357         ldr     x14, [x2]
3358         ldrh    w2, [x6,4]
3359         ldrh    w3, [x14,x7]
3360         cmp     w2, wzr
3361         mul     w3, w3, w2
3362         sub     x2, x1, x13
3363         asr     x2, x2, 1
3364         csinv   w3, w3, wzr, ne
3365         madd    x2, x8, x2, x2
3366         adrp    x8, :got:p_erase_count_table
3367         uxth    w2, w2
3368         ldr     x8, [x8, #:got_lo12:p_erase_count_table]
3369         ldr     x15, [x8]
3370         add     x8, x15, x7
3371         mov     w7, w4
3372 .L436:
3373         ubfiz   x16, x2, 1, 16
3374         ldrh    w17, [x1,4]
3375         cmp     w17, wzr
3376         ldrh    w4, [x14,x16]
3377         mul     w4, w4, w17
3378         csinv   w4, w4, wzr, ne
3379         cmp     w4, w3
3380         bne     .L432
3381         ldrh    w16, [x15,x16]
3382         ldrh    w4, [x8]
3383         cmp     w16, w4
3384         bcc     .L434
3385         b       .L433
3386 .L432:
3387         bhi     .L433
3388 .L434:
3389         ldrh    w4, [x1]
3390         cmp     w4, w9
3391         bne     .L435
3392         strh    w2, [x6,2]
3393         strh    w0, [x1]
3394         adrp    x0, :got:p_data_block_list_tail
3395         ldr     x0, [x0, #:got_lo12:p_data_block_list_tail]
3396         str     x6, [x0]
3397         b       .L428
3398 .L435:
3399         umull   x1, w4, w7
3400         mov     w2, w4
3401         add     x1, x13, x1
3402         b       .L436
3403 .L433:
3404         strh    w2, [x12,x11]
3405         ldrh    w2, [x1,2]
3406         strh    w2, [x6,2]
3407         ldr     x2, [x5, #:got_lo12:p_data_block_list_head]
3408         ldr     x3, [x2]
3409         cmp     x1, x3
3410         bne     .L437
3411         strh    w0, [x1,2]
3412         str     x6, [x2]
3413         b       .L428
3414 .L437:
3415         ldrh    w2, [x1,2]
3416         mov     w3, 6
3417         umull   x2, w2, w3
3418         ldr     x3, [x10, #:got_lo12:p_data_block_list_table]
3419         ldr     x3, [x3]
3420         strh    w0, [x3,x2]
3421         strh    w0, [x1,2]
3422 .L428:
3423         mov     w0, 0
3424         ret
3425         .size   insert_data_list, .-insert_data_list
3426         .align  2
3427         .global INSERT_DATA_LIST
3428         .type   INSERT_DATA_LIST, %function
3429 INSERT_DATA_LIST:
3430         stp     x29, x30, [sp, -16]!
3431         add     x29, sp, 0
3432         bl      insert_data_list
3433         adrp    x0, :got:g_num_data_superblocks
3434         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
3435         ldrh    w1, [x0]
3436         add     w1, w1, 1
3437         strh    w1, [x0]
3438         ldp     x29, x30, [sp], 16
3439         ret
3440         .size   INSERT_DATA_LIST, .-INSERT_DATA_LIST
3441         .align  2
3442         .global insert_free_list
3443         .type   insert_free_list, %function
3444 insert_free_list:
3445         uxth    w0, w0
3446         mov     w6, 65535
3447         cmp     w0, w6
3448         beq     .L442
3449         adrp    x3, :got:p_data_block_list_table
3450         mov     w5, 6
3451         mov     w1, -1
3452         adrp    x2, :got:p_free_data_block_list_head
3453         umull   x7, w0, w5
3454         ldr     x9, [x3, #:got_lo12:p_data_block_list_table]
3455         mov     x12, x3
3456         mov     x3, x2
3457         ldr     x8, [x9]
3458         add     x4, x8, x7
3459         strh    w1, [x4,2]
3460         strh    w1, [x8,x7]
3461         ldr     x10, [x2, #:got_lo12:p_free_data_block_list_head]
3462         ldr     x1, [x10]
3463         cbnz    x1, .L443
3464         str     x4, [x10]
3465         b       .L442
3466 .L443:
3467         adrp    x2, :got:p_erase_count_table
3468         ldr     x10, [x9]
3469         mov     x9, -6148914691236517206
3470         ldr     x2, [x2, #:got_lo12:p_erase_count_table]
3471         ldr     x11, [x2]
3472         ubfiz   x2, x0, 1, 16
3473         ldrh    w13, [x11,x2]
3474         sub     x2, x1, x10
3475         asr     x2, x2, 1
3476         madd    x2, x9, x2, x2
3477         uxth    w2, w2
3478 .L446:
3479         ubfiz   x9, x2, 1, 16
3480         ldrh    w9, [x11,x9]
3481         cmp     w9, w13
3482         bcs     .L444
3483         ldrh    w9, [x1]
3484         cmp     w9, w6
3485         bne     .L445
3486         strh    w2, [x4,2]
3487         strh    w0, [x1]
3488         b       .L442
3489 .L445:
3490         umull   x1, w9, w5
3491         mov     w2, w9
3492         add     x1, x10, x1
3493         b       .L446
3494 .L444:
3495         ldrh    w5, [x1,2]
3496         strh    w5, [x4,2]
3497         strh    w2, [x8,x7]
3498         ldr     x2, [x3, #:got_lo12:p_free_data_block_list_head]
3499         ldr     x3, [x2]
3500         cmp     x1, x3
3501         bne     .L447
3502         strh    w0, [x1,2]
3503         str     x4, [x2]
3504         b       .L442
3505 .L447:
3506         ldrh    w2, [x1,2]
3507         mov     w3, 6
3508         umull   x2, w2, w3
3509         ldr     x3, [x12, #:got_lo12:p_data_block_list_table]
3510         ldr     x3, [x3]
3511         strh    w0, [x3,x2]
3512         strh    w0, [x1,2]
3513 .L442:
3514         mov     w0, 0
3515         ret
3516         .size   insert_free_list, .-insert_free_list
3517         .align  2
3518         .global INSERT_FREE_LIST
3519         .type   INSERT_FREE_LIST, %function
3520 INSERT_FREE_LIST:
3521         stp     x29, x30, [sp, -16]!
3522         add     x29, sp, 0
3523         bl      insert_free_list
3524         adrp    x0, :got:g_num_free_superblocks
3525         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
3526         ldrh    w1, [x0]
3527         add     w1, w1, 1
3528         strh    w1, [x0]
3529         ldp     x29, x30, [sp], 16
3530         ret
3531         .size   INSERT_FREE_LIST, .-INSERT_FREE_LIST
3532         .align  2
3533         .global List_remove_node
3534         .type   List_remove_node, %function
3535 List_remove_node:
3536         adrp    x6, :got:p_data_block_list_table
3537         uxth    w1, w1
3538         mov     w5, 6
3539         ldr     x3, [x0]
3540         mov     w7, 65535
3541         ldr     x6, [x6, #:got_lo12:p_data_block_list_table]
3542         umull   x1, w1, w5
3543         ldr     x2, [x6]
3544         add     x4, x2, x1
3545         cmp     x4, x3
3546         bne     .L450
3547         ldrh    w3, [x2,x1]
3548         cmp     w3, w7
3549         bne     .L451
3550         str     xzr, [x0]
3551         b       .L452
3552 .L451:
3553         umull   x3, w3, w5
3554         add     x3, x2, x3
3555         str     x3, [x0]
3556         mov     w0, -1
3557         strh    w0, [x3,2]
3558         b       .L452
3559 .L450:
3560         ldrh    w0, [x2,x1]
3561         ldrh    w3, [x4,2]
3562         cmp     w0, w7
3563         bne     .L453
3564         umull   x3, w3, w5
3565         mov     w0, -1
3566         strh    w0, [x2,x3]
3567         b       .L452
3568 .L453:
3569         umull   x0, w0, w5
3570         add     x0, x2, x0
3571         strh    w3, [x0,2]
3572         ldrh    w3, [x4,2]
3573         ldr     x0, [x6]
3574         ldrh    w7, [x2,x1]
3575         umull   x3, w3, w5
3576         strh    w7, [x0,x3]
3577 .L452:
3578         mov     w0, -1
3579         strh    w0, [x2,x1]
3580         strh    w0, [x4,2]
3581         mov     w0, 0
3582         ret
3583         .size   List_remove_node, .-List_remove_node
3584         .align  2
3585         .global List_pop_index_node
3586         .type   List_pop_index_node, %function
3587 List_pop_index_node:
3588         stp     x29, x30, [sp, -32]!
3589         uxth    w1, w1
3590         add     x29, sp, 0
3591         str     x19, [sp,16]
3592         mov     w19, 65535
3593         ldr     x2, [x0]
3594         cbz     x2, .L455
3595         adrp    x3, :got:p_data_block_list_table
3596         mov     w5, w19
3597         mov     w6, 6
3598         ldr     x3, [x3, #:got_lo12:p_data_block_list_table]
3599         ldr     x4, [x3]
3600 .L456:
3601         cbnz    w1, .L457
3602 .L459:
3603         sub     x2, x2, x4
3604         mov     x1, -6148914691236517206
3605         asr     x2, x2, 1
3606         madd    x2, x1, x2, x2
3607         uxth    w19, w2
3608         mov     w1, w19
3609         bl      List_remove_node
3610         b       .L455
3611 .L457:
3612         ldrh    w3, [x2]
3613         cmp     w3, w5
3614         beq     .L459
3615         umull   x3, w3, w6
3616         sub     w1, w1, #1
3617         add     x2, x4, x3
3618         uxth    w1, w1
3619         b       .L456
3620 .L455:
3621         mov     w0, w19
3622         ldr     x19, [sp,16]
3623         ldp     x29, x30, [sp], 32
3624         ret
3625         .size   List_pop_index_node, .-List_pop_index_node
3626         .align  2
3627         .global List_pop_head_node
3628         .type   List_pop_head_node, %function
3629 List_pop_head_node:
3630         stp     x29, x30, [sp, -16]!
3631         mov     w1, 0
3632         add     x29, sp, 0
3633         bl      List_pop_index_node
3634         ldp     x29, x30, [sp], 16
3635         ret
3636         .size   List_pop_head_node, .-List_pop_head_node
3637         .align  2
3638         .global List_get_gc_head_node
3639         .type   List_get_gc_head_node, %function
3640 List_get_gc_head_node:
3641         uxth    w2, w0
3642         adrp    x0, :got:p_data_block_list_head
3643         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
3644         ldr     x1, [x0]
3645         mov     w0, 65535
3646         cbz     x1, .L463
3647         adrp    x0, :got:p_data_block_list_table
3648         mov     w4, 65535
3649         mov     w5, 6
3650         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
3651         ldr     x0, [x0]
3652 .L464:
3653         cbnz    w2, .L465
3654 .L467:
3655         sub     x1, x1, x0
3656         mov     x0, -6148914691236517206
3657         asr     x1, x1, 1
3658         madd    x1, x0, x1, x1
3659         uxth    w0, w1
3660         b       .L463
3661 .L465:
3662         ldrh    w3, [x1]
3663         cmp     w3, w4
3664         beq     .L467
3665         umull   x3, w3, w5
3666         sub     w2, w2, #1
3667         add     x1, x0, x3
3668         uxth    w2, w2
3669         b       .L464
3670 .L463:
3671         ret
3672         .size   List_get_gc_head_node, .-List_get_gc_head_node
3673         .align  2
3674         .global List_update_data_list
3675         .type   List_update_data_list, %function
3676 List_update_data_list:
3677         stp     x29, x30, [sp, -32]!
3678         add     x29, sp, 0
3679         str     x19, [sp,16]
3680         uxth    w19, w0
3681         adrp    x0, :got:g_active_superblock
3682         ldr     x0, [x0, #:got_lo12:g_active_superblock]
3683         ldrh    w0, [x0]
3684         cmp     w0, w19
3685         beq     .L470
3686         adrp    x0, :got:g_buffer_superblock
3687         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
3688         ldrh    w0, [x0]
3689         cmp     w0, w19
3690         beq     .L470
3691         adrp    x0, :got:g_gc_temp_superblock
3692         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
3693         ldrh    w0, [x0]
3694         cmp     w0, w19
3695         beq     .L470
3696         adrp    x0, :got:p_data_block_list_table
3697         mov     w3, 6
3698         umull   x4, w19, w3
3699         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
3700         ldr     x5, [x0]
3701         adrp    x0, :got:p_data_block_list_head
3702         add     x4, x5, x4
3703         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
3704         ldr     x1, [x0]
3705         cmp     x4, x1
3706         beq     .L470
3707         adrp    x1, :got:p_valid_page_count_table
3708         ldrh    w2, [x4,4]
3709         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
3710         ldr     x6, [x1]
3711         ubfiz   x1, x19, 1, 16
3712         ldrh    w1, [x6,x1]
3713         mul     w2, w1, w2
3714         ldrh    w1, [x4,2]
3715         mov     x4, -6148914691236517206
3716         cmp     w2, wzr
3717         csinv   w2, w2, wzr, ne
3718         umull   x3, w1, w3
3719         asr     x1, x3, 1
3720         add     x3, x5, x3
3721         madd    x1, x4, x1, x1
3722         ldrh    w3, [x3,4]
3723         ldrh    w1, [x6,x1,lsl 1]
3724         mul     w1, w1, w3
3725         cmp     w1, wzr
3726         csinv   w1, w1, wzr, ne
3727         cmp     w2, w1
3728         bcs     .L470
3729         mov     w1, w19
3730         bl      List_remove_node
3731         adrp    x0, :got:g_num_data_superblocks
3732         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
3733         ldrh    w1, [x0]
3734         sub     w1, w1, #1
3735         strh    w1, [x0]
3736         mov     w0, w19
3737         bl      INSERT_DATA_LIST
3738 .L470:
3739         mov     w0, 0
3740         ldr     x19, [sp,16]
3741         ldp     x29, x30, [sp], 32
3742         ret
3743         .size   List_update_data_list, .-List_update_data_list
3744         .align  2
3745         .global ftl_map_blk_alloc_new_blk
3746         .type   ftl_map_blk_alloc_new_blk, %function
3747 ftl_map_blk_alloc_new_blk:
3748         stp     x29, x30, [sp, -48]!
3749         add     x29, sp, 0
3750         stp     x19, x20, [sp,16]
3751         stp     x21, x22, [sp,32]
3752         mov     w20, 0
3753         ldrh    w2, [x0,10]
3754         ldr     x1, [x0,16]
3755 .L474:
3756         cmp     w20, w2
3757         beq     .L477
3758         mov     x22, x1
3759         ldrh    w21, [x1],2
3760         cbnz    w21, .L475
3761         mov     x19, x0
3762         bl      FtlFreeSysBlkQueueOut
3763         uxth    w1, w0
3764         strh    w0, [x22]
3765         cbz     w1, .L477
3766         ldr     w0, [x19,48]
3767         strh    w21, [x19,2]
3768         add     w0, w0, 1
3769         str     w0, [x19,48]
3770         ldrh    w0, [x19,8]
3771         strh    w20, [x19]
3772         add     w0, w0, 1
3773         strh    w0, [x19,8]
3774         b       .L477
3775 .L475:
3776         add     w20, w20, 1
3777         uxth    w20, w20
3778         b       .L474
3779 .L477:
3780         mov     w0, 0
3781         ldp     x19, x20, [sp,16]
3782         ldp     x21, x22, [sp,32]
3783         ldp     x29, x30, [sp], 48
3784         ret
3785         .size   ftl_map_blk_alloc_new_blk, .-ftl_map_blk_alloc_new_blk
3786         .align  2
3787         .global select_l2p_ram_region
3788         .type   select_l2p_ram_region, %function
3789 select_l2p_ram_region:
3790         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
3791         mov     x3, 0
3792         mov     w4, 65535
3793         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
3794         ldrh    w2, [x0]
3795         adrp    x0, :got:p_l2p_ram_map
3796         ldr     x0, [x0, #:got_lo12:p_l2p_ram_map]
3797         ldr     x1, [x0]
3798 .L481:
3799         uxth    w0, w3
3800         cmp     w0, w2
3801         bcs     .L497
3802         add     x3, x3, 1
3803         add     x5, x1, x3, lsl 4
3804         ldrh    w5, [x5,-16]
3805         cmp     w5, w4
3806         bne     .L481
3807         b       .L482
3808 .L497:
3809         mov     w0, w2
3810         mov     x3, 0
3811         mov     w6, -2147483648
3812 .L484:
3813         uxth    w5, w3
3814         cmp     w5, w2
3815         bcs     .L498
3816         add     x4, x1, x3, lsl 4
3817         ldr     w4, [x4,4]
3818         tbnz    w4, #31, .L493
3819         cmp     w4, w6
3820         bcc     .L485
3821 .L493:
3822         mov     w4, w6
3823         mov     w5, w0
3824 .L485:
3825         add     x3, x3, 1
3826         mov     w6, w4
3827         mov     w0, w5
3828         b       .L484
3829 .L498:
3830         cmp     w0, w2
3831         bcc     .L482
3832         adrp    x0, :got:g_l2p_last_update_region_id
3833         add     x1, x1, 4
3834         mov     w4, -1
3835         mov     w3, 0
3836         ldr     x0, [x0, #:got_lo12:g_l2p_last_update_region_id]
3837         ldrh    w5, [x0]
3838         mov     w0, w2
3839 .L488:
3840         cmp     w3, w2
3841         beq     .L482
3842         ldr     w7, [x1]
3843         cmp     w7, w4
3844         bcs     .L489
3845         ldrh    w6, [x1,-4]
3846         cmp     w6, w5
3847         csel    w4, w4, w7, eq
3848         cmp     w6, w5
3849         csel    w0, w0, w3, eq
3850 .L489:
3851         add     w3, w3, 1
3852         add     x1, x1, 16
3853         uxth    w3, w3
3854         b       .L488
3855 .L482:
3856         ret
3857         .size   select_l2p_ram_region, .-select_l2p_ram_region
3858         .align  2
3859         .global FtlUpdateVaildLpn
3860         .type   FtlUpdateVaildLpn, %function
3861 FtlUpdateVaildLpn:
3862         adrp    x1, :got:FtlUpdateVaildLpnCount
3863         ldr     x3, [x1, #:got_lo12:FtlUpdateVaildLpnCount]
3864         ldrh    w2, [x3]
3865         cbnz    w0, .L500
3866         cmp     w2, 4
3867         bhi     .L500
3868         add     w2, w2, 1
3869         strh    w2, [x3]
3870         b       .L499
3871 .L500:
3872         ldr     x1, [x1, #:got_lo12:FtlUpdateVaildLpnCount]
3873         mov     w7, 65535
3874         strh    wzr, [x1]
3875         adrp    x1, :got:g_VaildLpn
3876         ldr     x0, [x1, #:got_lo12:g_VaildLpn]
3877         str     wzr, [x0]
3878         adrp    x0, :got:c_ftl_nand_data_blks_per_plane
3879         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_blks_per_plane]
3880         ldrh    w5, [x0]
3881         adrp    x0, :got:p_valid_page_count_table
3882         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
3883         ldr     x6, [x0]
3884         mov     x0, 0
3885 .L501:
3886         cmp     w5, w0, uxth
3887         bls     .L499
3888         ldrh    w4, [x6,x0,lsl 1]
3889         cmp     w4, w7
3890         beq     .L502
3891         ldr     x3, [x1, #:got_lo12:g_VaildLpn]
3892         ldr     w2, [x3]
3893         add     w2, w4, w2
3894         str     w2, [x3]
3895 .L502:
3896         add     x0, x0, 1
3897         b       .L501
3898 .L499:
3899         ret
3900         .size   FtlUpdateVaildLpn, .-FtlUpdateVaildLpn
3901         .align  2
3902         .global ftl_sb_update_avl_pages
3903         .type   ftl_sb_update_avl_pages, %function
3904 ftl_sb_update_avl_pages:
3905         adrp    x3, :got:c_ftl_nand_planes_num
3906         strh    wzr, [x0,4]
3907         uxth    w1, w1
3908         uxth    w2, w2
3909         mov     w5, 65535
3910         ldr     x3, [x3, #:got_lo12:c_ftl_nand_planes_num]
3911         ldrh    w3, [x3]
3912 .L506:
3913         cmp     w2, w3
3914         bcs     .L512
3915         add     x4, x0, x2, sxtw 1
3916         ldrh    w4, [x4,16]
3917         cmp     w4, w5
3918         beq     .L507
3919         ldrh    w4, [x0,4]
3920         add     w4, w4, 1
3921         strh    w4, [x0,4]
3922 .L507:
3923         add     w2, w2, 1
3924         uxth    w2, w2
3925         b       .L506
3926 .L512:
3927         adrp    x2, :got:c_ftl_nand_page_pre_blk
3928         mov     x4, x0
3929         mov     w6, 65535
3930         add     x3, x0, x3, uxth 1
3931         ldr     x2, [x2, #:got_lo12:c_ftl_nand_page_pre_blk]
3932         ldrh    w5, [x2]
3933 .L509:
3934         cmp     x4, x3
3935         beq     .L513
3936         ldrh    w2, [x4,16]
3937         cmp     w2, w6
3938         beq     .L510
3939         ldrh    w2, [x0,4]
3940         add     w2, w5, w2
3941         sub     w2, w2, #1
3942         sub     w2, w2, w1
3943         strh    w2, [x0,4]
3944 .L510:
3945         add     x4, x4, 2
3946         b       .L509
3947 .L513:
3948         ret
3949         .size   ftl_sb_update_avl_pages, .-ftl_sb_update_avl_pages
3950         .align  2
3951         .global make_superblock
3952         .type   make_superblock, %function
3953 make_superblock:
3954         stp     x29, x30, [sp, -80]!
3955         add     x29, sp, 0
3956         stp     x19, x20, [sp,16]
3957         stp     x23, x24, [sp,48]
3958         stp     x21, x22, [sp,32]
3959         str     x25, [sp,64]
3960         mov     x19, x0
3961         strh    wzr, [x0,4]
3962         mov     w20, 0
3963         strb    wzr, [x0,7]
3964         adrp    x22, :got:c_ftl_nand_planes_num
3965         adrp    x24, :got:p_plane_order_table
3966         mov     w23, -1
3967 .L515:
3968         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
3969         ldrh    w0, [x0]
3970         cmp     w0, w20
3971         bls     .L522
3972         ldr     x0, [x24, #:got_lo12:p_plane_order_table]
3973         add     x21, x19, x20, uxth 1
3974         ldrh    w1, [x19]
3975         ldrb    w0, [x0,w20,sxtw]
3976         bl      V2P_block
3977         strh    w23, [x21,16]
3978         mov     w25, w0
3979         bl      FtlBbmIsBadBlock
3980         cbnz    w0, .L516
3981         strh    w25, [x21,16]
3982         ldrb    w0, [x19,7]
3983         add     w0, w0, 1
3984         strb    w0, [x19,7]
3985 .L516:
3986         add     w20, w20, 1
3987         uxth    w20, w20
3988         b       .L515
3989 .L522:
3990         adrp    x1, :got:c_ftl_nand_page_pre_blk
3991         ldrb    w0, [x19,7]
3992         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
3993         strb    wzr, [x19,9]
3994         ldrh    w1, [x1]
3995         mul     w0, w0, w1
3996         strh    w0, [x19,4]
3997         adrp    x0, :got:g_inkDie_check_enable
3998         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
3999         ldr     w0, [x0]
4000         cbz     w0, .L518
4001         adrp    x0, :got:p_erase_count_table
4002         ldrh    w1, [x19]
4003         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
4004         ldr     x0, [x0]
4005         ldrh    w0, [x0,x1,lsl 1]
4006         cmp     w0, 59
4007         bhi     .L518
4008         mov     w0, 1
4009         strb    w0, [x19,9]
4010 .L518:
4011         mov     w0, 0
4012         ldr     x25, [sp,64]
4013         ldp     x19, x20, [sp,16]
4014         ldp     x21, x22, [sp,32]
4015         ldp     x23, x24, [sp,48]
4016         ldp     x29, x30, [sp], 80
4017         ret
4018         .size   make_superblock, .-make_superblock
4019         .align  2
4020         .global update_multiplier_value
4021         .type   update_multiplier_value, %function
4022 update_multiplier_value:
4023         stp     x29, x30, [sp, -64]!
4024         add     x29, sp, 0
4025         stp     x19, x20, [sp,16]
4026         mov     w19, 0
4027         uxth    w20, w0
4028         stp     x21, x22, [sp,32]
4029         stp     x23, x24, [sp,48]
4030         mov     w21, w19
4031         adrp    x22, :got:c_ftl_nand_planes_num
4032         adrp    x23, :got:p_plane_order_table
4033         adrp    x24, :got:c_ftl_nand_page_pre_blk
4034 .L524:
4035         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
4036         ldrh    w0, [x0]
4037         cmp     w0, w21
4038         bls     .L531
4039         ldr     x0, [x23, #:got_lo12:p_plane_order_table]
4040         mov     w1, w20
4041         ldrb    w0, [x0,w21,sxtw]
4042         bl      V2P_block
4043         bl      FtlBbmIsBadBlock
4044         cbnz    w0, .L525
4045         ldr     x0, [x24, #:got_lo12:c_ftl_nand_page_pre_blk]
4046         ldrh    w0, [x0]
4047         add     w19, w19, w0
4048         uxth    w19, w19
4049 .L525:
4050         add     w21, w21, 1
4051         uxth    w21, w21
4052         b       .L524
4053 .L531:
4054         cbz     w19, .L527
4055         mov     w0, 32768
4056         sdiv    w19, w0, w19
4057 .L527:
4058         mov     w0, 6
4059         umull   x20, w20, w0
4060         adrp    x0, :got:p_data_block_list_table
4061         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4062         ldr     x0, [x0]
4063         add     x20, x0, x20
4064         mov     w0, 0
4065         strh    w19, [x20,4]
4066         ldp     x19, x20, [sp,16]
4067         ldp     x21, x22, [sp,32]
4068         ldp     x23, x24, [sp,48]
4069         ldp     x29, x30, [sp], 64
4070         ret
4071         .size   update_multiplier_value, .-update_multiplier_value
4072         .align  2
4073         .global GetFreeBlockMinEraseCount
4074         .type   GetFreeBlockMinEraseCount, %function
4075 GetFreeBlockMinEraseCount:
4076         adrp    x0, :got:p_free_data_block_list_head
4077         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
4078         ldr     x1, [x0]
4079         mov     w0, w1
4080         cbz     x1, .L533
4081         adrp    x0, :got:p_data_block_list_table
4082         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4083         ldr     x0, [x0]
4084         sub     x1, x1, x0
4085         mov     x0, -6148914691236517206
4086         asr     x1, x1, 1
4087         madd    x1, x0, x1, x1
4088         adrp    x0, :got:p_erase_count_table
4089         and     x1, x1, 65535
4090         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
4091         ldr     x0, [x0]
4092         ldrh    w0, [x0,x1,lsl 1]
4093 .L533:
4094         ret
4095         .size   GetFreeBlockMinEraseCount, .-GetFreeBlockMinEraseCount
4096         .align  2
4097         .global GetFreeBlockMaxEraseCount
4098         .type   GetFreeBlockMaxEraseCount, %function
4099 GetFreeBlockMaxEraseCount:
4100         uxth    w3, w0
4101         adrp    x0, :got:p_free_data_block_list_head
4102         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
4103         ldr     x1, [x0]
4104         mov     w0, w1
4105         cbz     x1, .L536
4106         adrp    x0, :got:g_num_free_superblocks
4107         mov     w5, 6
4108         mov     w6, 65535
4109         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
4110         ldrh    w2, [x0]
4111         mov     w0, 7
4112         mul     w2, w2, w0
4113         adrp    x0, :got:p_data_block_list_table
4114         asr     w2, w2, 3
4115         cmp     w3, w2
4116         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4117         csel    w3, w2, w3, gt
4118         mov     x2, -6148914691236517206
4119         ldr     x0, [x0]
4120         sub     x1, x1, x0
4121         asr     x1, x1, 1
4122         madd    x1, x2, x1, x1
4123         mov     w2, 0
4124         uxth    w1, w1
4125 .L538:
4126         cmp     w2, w3
4127         beq     .L541
4128         umull   x4, w1, w5
4129         ldrh    w4, [x0,x4]
4130         cmp     w4, w6
4131         bne     .L539
4132 .L541:
4133         adrp    x0, :got:p_erase_count_table
4134         ubfiz   x1, x1, 1, 16
4135         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
4136         ldr     x0, [x0]
4137         ldrh    w0, [x0,x1]
4138         b       .L536
4139 .L539:
4140         add     w2, w2, 1
4141         mov     w1, w4
4142         uxth    w2, w2
4143         b       .L538
4144 .L536:
4145         ret
4146         .size   GetFreeBlockMaxEraseCount, .-GetFreeBlockMaxEraseCount
4147         .align  2
4148         .global FtlPrintInfo2buf
4149         .type   FtlPrintInfo2buf, %function
4150 FtlPrintInfo2buf:
4151         stp     x29, x30, [sp, -128]!
4152         adrp    x1, .LC2
4153         add     x29, sp, 0
4154         add     x1, x1, :lo12:.LC2
4155         stp     x19, x20, [sp,16]
4156         stp     x21, x22, [sp,32]
4157         stp     x23, x24, [sp,48]
4158         mov     x22, x0
4159         stp     x25, x26, [sp,64]
4160         stp     x27, x28, [sp,80]
4161         bl      strcpy
4162         add     x20, x22, 12
4163         adrp    x2, :got:gNandPhyInfo
4164         adrp    x1, .LC3
4165         mov     x0, x20
4166         add     x1, x1, :lo12:.LC3
4167         ldr     x2, [x2, #:got_lo12:gNandPhyInfo]
4168         ldr     w2, [x2]
4169         bl      sprintf
4170         add     x20, x20, x0, sxtw
4171         adrp    x2, :got:DeviceCapacity
4172         adrp    x1, .LC4
4173         mov     x0, x20
4174         add     x1, x1, :lo12:.LC4
4175         ldr     x2, [x2, #:got_lo12:DeviceCapacity]
4176         ldr     w2, [x2]
4177         bl      sprintf
4178         add     x20, x20, x0, sxtw
4179         adrp    x0, :got:gFtlInitStatus
4180         ldr     x0, [x0, #:got_lo12:gFtlInitStatus]
4181         ldr     w0, [x0]
4182         cmp     w0, 1
4183         beq     .L544
4184         sub     w0, w20, w22
4185         b       .L545
4186 .L544:
4187         add     x0, x29, 112
4188         add     x1, x29, 116
4189         add     x2, x29, 120
4190         add     x3, x29, 124
4191         adrp    x19, :got:gBbtInfo
4192         adrp    x25, :got:g_num_free_superblocks
4193         bl      NandcGetTimeCfg
4194         adrp    x23, :got:p_valid_page_count_table
4195         ldr     w4, [x29,120]
4196         adrp    x1, .LC5
4197         ldr     w5, [x29,124]
4198         mov     x0, x20
4199         ldr     w3, [x29,116]
4200         add     x1, x1, :lo12:.LC5
4201         ldr     w2, [x29,112]
4202         adrp    x26, :got:g_sys_ext_data
4203         bl      sprintf
4204         add     x21, x20, x0, sxtw
4205         adrp    x1, .LC6
4206         mov     x0, x21
4207         add     x1, x1, :lo12:.LC6
4208         add     x21, x21, 10
4209         adrp    x20, :got:g_sys_save_data
4210         bl      strcpy
4211         adrp    x2, :got:g_MaxLpn
4212         adrp    x1, .LC7
4213         mov     x0, x21
4214         add     x1, x1, :lo12:.LC7
4215         ldr     x2, [x2, #:got_lo12:g_MaxLpn]
4216         ldr     w2, [x2]
4217         bl      sprintf
4218         add     x21, x21, x0, sxtw
4219         adrp    x2, :got:g_VaildLpn
4220         adrp    x1, .LC8
4221         mov     x0, x21
4222         add     x1, x1, :lo12:.LC8
4223         ldr     x2, [x2, #:got_lo12:g_VaildLpn]
4224         ldr     w2, [x2]
4225         bl      sprintf
4226         add     x21, x21, x0, sxtw
4227         adrp    x2, :got:g_totle_read_page_count
4228         adrp    x1, .LC9
4229         mov     x0, x21
4230         add     x1, x1, :lo12:.LC9
4231         ldr     x2, [x2, #:got_lo12:g_totle_read_page_count]
4232         ldr     w2, [x2]
4233         bl      sprintf
4234         add     x21, x21, x0, sxtw
4235         adrp    x2, :got:g_totle_discard_page_count
4236         adrp    x1, .LC10
4237         mov     x0, x21
4238         add     x1, x1, :lo12:.LC10
4239         ldr     x2, [x2, #:got_lo12:g_totle_discard_page_count]
4240         ldr     w2, [x2]
4241         bl      sprintf
4242         add     x21, x21, x0, sxtw
4243         adrp    x2, :got:g_totle_write_page_count
4244         adrp    x1, .LC11
4245         mov     x0, x21
4246         add     x1, x1, :lo12:.LC11
4247         ldr     x2, [x2, #:got_lo12:g_totle_write_page_count]
4248         ldr     w2, [x2]
4249         bl      sprintf
4250         add     x21, x21, x0, sxtw
4251         adrp    x2, :got:g_totle_cache_write_count
4252         adrp    x1, .LC12
4253         mov     x0, x21
4254         add     x1, x1, :lo12:.LC12
4255         ldr     x2, [x2, #:got_lo12:g_totle_cache_write_count]
4256         ldr     w2, [x2]
4257         bl      sprintf
4258         add     x21, x21, x0, sxtw
4259         adrp    x2, :got:g_totle_l2p_write_count
4260         adrp    x1, .LC13
4261         mov     x0, x21
4262         add     x1, x1, :lo12:.LC13
4263         ldr     x2, [x2, #:got_lo12:g_totle_l2p_write_count]
4264         ldr     w2, [x2]
4265         bl      sprintf
4266         add     x21, x21, x0, sxtw
4267         adrp    x2, :got:g_totle_gc_page_count
4268         adrp    x1, .LC14
4269         mov     x0, x21
4270         add     x1, x1, :lo12:.LC14
4271         ldr     x2, [x2, #:got_lo12:g_totle_gc_page_count]
4272         ldr     w2, [x2]
4273         bl      sprintf
4274         add     x21, x21, x0, sxtw
4275         adrp    x0, :got:g_totle_write_sector
4276         adrp    x1, .LC15
4277         add     x1, x1, :lo12:.LC15
4278         ldr     x0, [x0, #:got_lo12:g_totle_write_sector]
4279         ldr     w2, [x0]
4280         mov     x0, x21
4281         lsr     w2, w2, 11
4282         bl      sprintf
4283         add     x21, x21, x0, sxtw
4284         adrp    x0, :got:g_totle_read_sector
4285         adrp    x1, .LC16
4286         add     x1, x1, :lo12:.LC16
4287         ldr     x0, [x0, #:got_lo12:g_totle_read_sector]
4288         ldr     w2, [x0]
4289         mov     x0, x21
4290         lsr     w2, w2, 11
4291         bl      sprintf
4292         add     x21, x21, x0, sxtw
4293         adrp    x2, :got:g_GlobalSysVersion
4294         adrp    x1, .LC17
4295         mov     x0, x21
4296         add     x1, x1, :lo12:.LC17
4297         ldr     x2, [x2, #:got_lo12:g_GlobalSysVersion]
4298         ldr     w2, [x2]
4299         bl      sprintf
4300         add     x21, x21, x0, sxtw
4301         adrp    x2, :got:g_GlobalDataVersion
4302         adrp    x1, .LC18
4303         add     x1, x1, :lo12:.LC18
4304         mov     x0, x21
4305         ldr     x2, [x2, #:got_lo12:g_GlobalDataVersion]
4306         ldr     w2, [x2]
4307         bl      sprintf
4308         ldr     x19, [x19, #:got_lo12:gBbtInfo]
4309         add     x21, x21, x0, sxtw
4310         ldrh    w2, [x19,6]
4311         str     x2, [x29,104]
4312         bl      FtlBbtCalcTotleCnt
4313         uxth    w3, w0
4314         ldr     x2, [x29,104]
4315         adrp    x1, .LC19
4316         mov     x0, x21
4317         add     x1, x1, :lo12:.LC19
4318         bl      sprintf
4319         ldr     x25, [x25, #:got_lo12:g_num_free_superblocks]
4320         adrp    x1, .LC20
4321         add     x21, x21, x0, sxtw
4322         add     x1, x1, :lo12:.LC20
4323         mov     x0, x21
4324         ldrh    w2, [x25]
4325         bl      sprintf
4326         add     x21, x21, x0, sxtw
4327         adrp    x2, :got:g_totle_mlc_erase_count
4328         adrp    x1, .LC21
4329         mov     x0, x21
4330         add     x1, x1, :lo12:.LC21
4331         ldr     x2, [x2, #:got_lo12:g_totle_mlc_erase_count]
4332         ldr     w2, [x2]
4333         bl      sprintf
4334         add     x21, x21, x0, sxtw
4335         adrp    x2, :got:g_totle_slc_erase_count
4336         adrp    x1, .LC22
4337         mov     x0, x21
4338         add     x1, x1, :lo12:.LC22
4339         ldr     x2, [x2, #:got_lo12:g_totle_slc_erase_count]
4340         ldr     w2, [x2]
4341         bl      sprintf
4342         add     x21, x21, x0, sxtw
4343         adrp    x2, :got:g_totle_avg_erase_count
4344         adrp    x1, .LC23
4345         mov     x0, x21
4346         add     x1, x1, :lo12:.LC23
4347         ldr     x2, [x2, #:got_lo12:g_totle_avg_erase_count]
4348         ldr     w2, [x2]
4349         bl      sprintf
4350         add     x21, x21, x0, sxtw
4351         adrp    x2, :got:g_totle_sys_slc_erase_count
4352         adrp    x1, .LC24
4353         mov     x0, x21
4354         add     x1, x1, :lo12:.LC24
4355         ldr     x2, [x2, #:got_lo12:g_totle_sys_slc_erase_count]
4356         ldr     w2, [x2]
4357         bl      sprintf
4358         add     x21, x21, x0, sxtw
4359         adrp    x2, :got:g_max_erase_count
4360         adrp    x1, .LC25
4361         mov     x0, x21
4362         add     x1, x1, :lo12:.LC25
4363         ldr     x2, [x2, #:got_lo12:g_max_erase_count]
4364         ldr     w2, [x2]
4365         bl      sprintf
4366         add     x21, x21, x0, sxtw
4367         adrp    x2, :got:g_min_erase_count
4368         adrp    x1, .LC26
4369         mov     x0, x21
4370         add     x1, x1, :lo12:.LC26
4371         ldr     x2, [x2, #:got_lo12:g_min_erase_count]
4372         ldr     w2, [x2]
4373         bl      sprintf
4374         ldr     x20, [x20, #:got_lo12:g_sys_save_data]
4375         adrp    x1, .LC27
4376         add     x21, x21, x0, sxtw
4377         add     x1, x1, :lo12:.LC27
4378         mov     x0, x21
4379         ldrh    w2, [x20,30]
4380         bl      sprintf
4381         add     x21, x21, x0, sxtw
4382         ldrh    w2, [x20,28]
4383         adrp    x1, .LC28
4384         mov     x0, x21
4385         add     x1, x1, :lo12:.LC28
4386         adrp    x20, :got:g_gc_superblock
4387         bl      sprintf
4388         add     x21, x21, x0, sxtw
4389         adrp    x2, :got:g_MaxLbaSector
4390         adrp    x1, .LC29
4391         mov     x0, x21
4392         add     x1, x1, :lo12:.LC29
4393         ldr     x2, [x2, #:got_lo12:g_MaxLbaSector]
4394         ldr     w2, [x2]
4395         bl      sprintf
4396         add     x21, x21, x0, sxtw
4397         adrp    x2, :got:c_ftl_nand_init_sys_blks_per_plane
4398         adrp    x1, .LC30
4399         mov     x0, x21
4400         add     x1, x1, :lo12:.LC30
4401         ldr     x2, [x2, #:got_lo12:c_ftl_nand_init_sys_blks_per_plane]
4402         ldr     w2, [x2]
4403         bl      sprintf
4404         add     x21, x21, x0, sxtw
4405         adrp    x2, :got:c_ftl_nand_sys_blks_per_plane
4406         adrp    x1, .LC31
4407         mov     x0, x21
4408         add     x1, x1, :lo12:.LC31
4409         ldr     x2, [x2, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
4410         ldr     w2, [x2]
4411         bl      sprintf
4412         add     x21, x21, x0, sxtw
4413         adrp    x2, :got:gSysFreeQueue
4414         adrp    x1, .LC32
4415         mov     x0, x21
4416         add     x1, x1, :lo12:.LC32
4417         ldr     x2, [x2, #:got_lo12:gSysFreeQueue]
4418         ldrh    w2, [x2,6]
4419         bl      sprintf
4420         add     x21, x21, x0, sxtw
4421         adrp    x2, :got:c_ftl_nand_data_blks_per_plane
4422         adrp    x1, .LC33
4423         mov     x0, x21
4424         add     x1, x1, :lo12:.LC33
4425         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_blks_per_plane]
4426         ldrh    w2, [x2]
4427         bl      sprintf
4428         add     x21, x21, x0, sxtw
4429         adrp    x2, :got:c_ftl_nand_data_op_blks_per_plane
4430         adrp    x1, .LC34
4431         mov     x0, x21
4432         add     x1, x1, :lo12:.LC34
4433         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
4434         ldrh    w2, [x2]
4435         bl      sprintf
4436         add     x21, x21, x0, sxtw
4437         adrp    x2, :got:c_ftl_nand_max_data_blks
4438         adrp    x1, .LC35
4439         mov     x0, x21
4440         add     x1, x1, :lo12:.LC35
4441         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_data_blks]
4442         ldr     w2, [x2]
4443         bl      sprintf
4444         add     x21, x21, x0, sxtw
4445         adrp    x2, :got:gSysInfo
4446         adrp    x1, .LC36
4447         mov     x0, x21
4448         add     x1, x1, :lo12:.LC36
4449         ldr     x2, [x2, #:got_lo12:gSysInfo]
4450         ldrh    w2, [x2]
4451         bl      sprintf
4452         add     x21, x21, x0, sxtw
4453         ldrh    w2, [x19]
4454         adrp    x1, .LC37
4455         adrp    x19, :got:g_active_superblock
4456         mov     x0, x21
4457         add     x1, x1, :lo12:.LC37
4458         bl      sprintf
4459         ldr     x19, [x19, #:got_lo12:g_active_superblock]
4460         adrp    x1, .LC38
4461         add     x21, x21, x0, sxtw
4462         add     x1, x1, :lo12:.LC38
4463         mov     x0, x21
4464         ldrh    w2, [x19,2]
4465         bl      sprintf
4466         add     x21, x21, x0, sxtw
4467         ldrb    w2, [x19,6]
4468         adrp    x1, .LC39
4469         mov     x0, x21
4470         add     x1, x1, :lo12:.LC39
4471         bl      sprintf
4472         add     x21, x21, x0, sxtw
4473         ldrh    w2, [x19]
4474         adrp    x1, .LC40
4475         mov     x0, x21
4476         add     x1, x1, :lo12:.LC40
4477         bl      sprintf
4478         add     x21, x21, x0, sxtw
4479         ldrb    w2, [x19,8]
4480         adrp    x1, .LC41
4481         mov     x0, x21
4482         add     x1, x1, :lo12:.LC41
4483         bl      sprintf
4484         add     x21, x21, x0, sxtw
4485         ldrh    w2, [x19,4]
4486         adrp    x1, .LC42
4487         mov     x0, x21
4488         add     x1, x1, :lo12:.LC42
4489         bl      sprintf
4490         ldr     x24, [x23, #:got_lo12:p_valid_page_count_table]
4491         ldrh    w3, [x19]
4492         adrp    x1, .LC43
4493         adrp    x19, :got:g_buffer_superblock
4494         add     x21, x21, x0, sxtw
4495         ldr     x2, [x24]
4496         mov     x0, x21
4497         add     x1, x1, :lo12:.LC43
4498         ldrh    w2, [x2,x3,lsl 1]
4499         bl      sprintf
4500         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
4501         adrp    x1, .LC44
4502         add     x21, x21, x0, sxtw
4503         add     x1, x1, :lo12:.LC44
4504         mov     x0, x21
4505         ldrh    w2, [x19,2]
4506         bl      sprintf
4507         add     x21, x21, x0, sxtw
4508         ldrb    w2, [x19,6]
4509         adrp    x1, .LC45
4510         mov     x0, x21
4511         add     x1, x1, :lo12:.LC45
4512         bl      sprintf
4513         add     x21, x21, x0, sxtw
4514         ldrh    w2, [x19]
4515         adrp    x1, .LC46
4516         mov     x0, x21
4517         add     x1, x1, :lo12:.LC46
4518         bl      sprintf
4519         add     x21, x21, x0, sxtw
4520         ldrb    w2, [x19,8]
4521         adrp    x1, .LC47
4522         mov     x0, x21
4523         add     x1, x1, :lo12:.LC47
4524         bl      sprintf
4525         add     x21, x21, x0, sxtw
4526         ldrh    w2, [x19,4]
4527         adrp    x1, .LC48
4528         mov     x0, x21
4529         add     x1, x1, :lo12:.LC48
4530         bl      sprintf
4531         add     x21, x21, x0, sxtw
4532         ldrh    w3, [x19]
4533         adrp    x1, .LC49
4534         ldr     x2, [x24]
4535         adrp    x19, :got:g_gc_temp_superblock
4536         mov     x0, x21
4537         add     x1, x1, :lo12:.LC49
4538         ldrh    w2, [x2,x3,lsl 1]
4539         bl      sprintf
4540         ldr     x19, [x19, #:got_lo12:g_gc_temp_superblock]
4541         adrp    x1, .LC50
4542         add     x21, x21, x0, sxtw
4543         add     x1, x1, :lo12:.LC50
4544         mov     x0, x21
4545         ldrh    w2, [x19,2]
4546         bl      sprintf
4547         add     x21, x21, x0, sxtw
4548         ldrb    w2, [x19,6]
4549         adrp    x1, .LC51
4550         mov     x0, x21
4551         add     x1, x1, :lo12:.LC51
4552         bl      sprintf
4553         add     x21, x21, x0, sxtw
4554         ldrh    w2, [x19]
4555         adrp    x1, .LC52
4556         mov     x0, x21
4557         add     x1, x1, :lo12:.LC52
4558         bl      sprintf
4559         add     x21, x21, x0, sxtw
4560         ldrb    w2, [x19,8]
4561         adrp    x1, .LC53
4562         mov     x0, x21
4563         add     x1, x1, :lo12:.LC53
4564         bl      sprintf
4565         add     x21, x21, x0, sxtw
4566         ldrh    w2, [x19,4]
4567         adrp    x1, .LC54
4568         mov     x0, x21
4569         add     x1, x1, :lo12:.LC54
4570         bl      sprintf
4571         ldr     x20, [x20, #:got_lo12:g_gc_superblock]
4572         adrp    x1, .LC55
4573         add     x21, x21, x0, sxtw
4574         add     x1, x1, :lo12:.LC55
4575         mov     x0, x21
4576         ldrh    w2, [x20,2]
4577         bl      sprintf
4578         add     x21, x21, x0, sxtw
4579         ldrb    w2, [x20,6]
4580         adrp    x1, .LC56
4581         mov     x0, x21
4582         add     x1, x1, :lo12:.LC56
4583         bl      sprintf
4584         add     x21, x21, x0, sxtw
4585         ldrh    w2, [x20]
4586         adrp    x1, .LC57
4587         mov     x0, x21
4588         add     x1, x1, :lo12:.LC57
4589         bl      sprintf
4590         add     x21, x21, x0, sxtw
4591         ldrb    w2, [x20,8]
4592         adrp    x1, .LC58
4593         mov     x0, x21
4594         add     x1, x1, :lo12:.LC58
4595         bl      sprintf
4596         add     x21, x21, x0, sxtw
4597         ldrh    w2, [x20,4]
4598         adrp    x1, .LC59
4599         mov     x0, x21
4600         add     x1, x1, :lo12:.LC59
4601         bl      sprintf
4602         add     x21, x21, x0, sxtw
4603         adrp    x0, :got:g_all_blk_used_slc_mode
4604         ldr     x26, [x26, #:got_lo12:g_sys_ext_data]
4605         adrp    x1, .LC60
4606         add     x1, x1, :lo12:.LC60
4607         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
4608         ldr     w4, [x26,84]
4609         ldr     w5, [x26,76]
4610         ldr     w3, [x0]
4611         adrp    x0, :got:g_inkDie_check_enable
4612         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
4613         ldr     w2, [x0]
4614         mov     x0, x21
4615         orr     w2, w2, w3, lsl 8
4616         ldr     w3, [x26,80]
4617         bl      sprintf
4618         add     x19, x21, x0, sxtw
4619         ldr     w2, [x26,72]
4620         adrp    x1, .LC61
4621         mov     x0, x19
4622         add     x1, x1, :lo12:.LC61
4623         bl      sprintf
4624         add     x19, x19, x0, sxtw
4625         ldr     w2, [x26,96]
4626         adrp    x1, .LC62
4627         mov     x0, x19
4628         add     x1, x1, :lo12:.LC62
4629         bl      sprintf
4630         add     x19, x19, x0, sxtw
4631         adrp    x2, :got:g_gc_free_blk_threshold
4632         adrp    x1, .LC63
4633         mov     x0, x19
4634         add     x1, x1, :lo12:.LC63
4635         ldr     x2, [x2, #:got_lo12:g_gc_free_blk_threshold]
4636         ldrh    w2, [x2]
4637         bl      sprintf
4638         add     x19, x19, x0, sxtw
4639         adrp    x2, :got:g_gc_merge_free_blk_threshold
4640         adrp    x1, .LC64
4641         mov     x0, x19
4642         add     x1, x1, :lo12:.LC64
4643         ldr     x2, [x2, #:got_lo12:g_gc_merge_free_blk_threshold]
4644         ldrh    w2, [x2]
4645         bl      sprintf
4646         add     x19, x19, x0, sxtw
4647         adrp    x2, :got:g_gc_skip_write_count
4648         adrp    x1, .LC65
4649         mov     x0, x19
4650         add     x1, x1, :lo12:.LC65
4651         ldr     x2, [x2, #:got_lo12:g_gc_skip_write_count]
4652         ldr     w2, [x2]
4653         bl      sprintf
4654         add     x19, x19, x0, sxtw
4655         adrp    x2, :got:g_gc_blk_index
4656         adrp    x1, .LC66
4657         add     x1, x1, :lo12:.LC66
4658         mov     x0, x19
4659         ldr     x2, [x2, #:got_lo12:g_gc_blk_index]
4660         ldrh    w2, [x2]
4661         bl      sprintf
4662         add     x19, x19, x0, sxtw
4663         bl      GetFreeBlockMinEraseCount
4664         uxth    w2, w0
4665         adrp    x1, .LC67
4666         mov     x0, x19
4667         add     x1, x1, :lo12:.LC67
4668         bl      sprintf
4669         add     x19, x19, x0, sxtw
4670         ldrh    w0, [x25]
4671         bl      GetFreeBlockMaxEraseCount
4672         uxth    w2, w0
4673         adrp    x1, .LC68
4674         mov     x0, x19
4675         add     x1, x1, :lo12:.LC68
4676         bl      sprintf
4677         add     x19, x19, x0, sxtw
4678         ldrh    w0, [x20]
4679         mov     w1, 65535
4680         cmp     w0, w1
4681         beq     .L546
4682         ubfiz   x2, x0, 1, 16
4683         ldr     x3, [x24]
4684         adrp    x1, .LC69
4685         mov     x0, x19
4686         add     x1, x1, :lo12:.LC69
4687         ldrh    w2, [x3,x2]
4688         bl      sprintf
4689         add     x19, x19, x0, sxtw
4690 .L546:
4691         mov     w0, 0
4692         adrp    x24, .LC70
4693         mov     w20, 0
4694         adrp    x28, :got:p_data_block_list_table
4695         bl      List_get_gc_head_node
4696         add     x24, x24, :lo12:.LC70
4697         uxth    w3, w0
4698         mov     w9, 65535
4699         mov     w8, 6
4700         adrp    x27, :got:p_erase_count_table
4701 .L548:
4702         cmp     w3, w9
4703         str     x9, [x29,96]
4704         adrp    x21, :got:p_data_block_list_table
4705         beq     .L547
4706         ldr     x0, [x23, #:got_lo12:p_valid_page_count_table]
4707         ubfiz   x6, x3, 1, 16
4708         ldr     x26, [x28, #:got_lo12:p_data_block_list_table]
4709         mov     w2, w20
4710         umull   x25, w3, w8
4711         ldr     x4, [x0]
4712         mov     x1, x24
4713         ldr     x0, [x27, #:got_lo12:p_erase_count_table]
4714         add     w20, w20, 1
4715         ldr     x5, [x26]
4716         ldrh    w4, [x4,x6]
4717         ldr     x7, [x0]
4718         add     x5, x5, x25
4719         mov     x0, x19
4720         str     x8, [x29,104]
4721         ldrh    w5, [x5,4]
4722         ldrh    w6, [x7,x6]
4723         bl      sprintf
4724         add     x19, x19, x0, sxtw
4725         ldr     x0, [x26]
4726         cmp     w20, 16
4727         ldr     x8, [x29,104]
4728         ldr     x9, [x29,96]
4729         ldrh    w3, [x0,x25]
4730         bne     .L548
4731 .L547:
4732         adrp    x0, :got:p_free_data_block_list_head
4733         ldr     x1, [x21, #:got_lo12:p_data_block_list_table]
4734         adrp    x23, .LC71
4735         mov     w20, 0
4736         mov     w28, 65535
4737         mov     w27, 6
4738         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
4739         add     x23, x23, :lo12:.LC71
4740         ldr     x3, [x1]
4741         adrp    x26, :got:p_erase_count_table
4742         ldr     x0, [x0]
4743         sub     x3, x0, x3
4744         mov     x0, -6148914691236517206
4745         asr     x3, x3, 1
4746         madd    x3, x0, x3, x3
4747         uxth    w3, w3
4748 .L550:
4749         cmp     w3, w28
4750         beq     .L549
4751         ldr     x25, [x21, #:got_lo12:p_data_block_list_table]
4752         ubfiz   x5, x3, 1, 16
4753         ldr     x0, [x26, #:got_lo12:p_erase_count_table]
4754         mov     w2, w20
4755         umull   x24, w3, w27
4756         ldr     x4, [x25]
4757         mov     x1, x23
4758         ldr     x6, [x0]
4759         mov     x0, x19
4760         add     x4, x4, x24
4761         add     w20, w20, 1
4762         ldrh    w5, [x6,x5]
4763         ldrh    w4, [x4,4]
4764         bl      sprintf
4765         add     x19, x19, x0, sxtw
4766         ldr     x0, [x25]
4767         cmp     w20, 4
4768         ldrh    w3, [x0,x24]
4769         bne     .L550
4770 .L549:
4771         sub     w0, w19, w22
4772 .L545:
4773         ldp     x19, x20, [sp,16]
4774         ldp     x21, x22, [sp,32]
4775         ldp     x23, x24, [sp,48]
4776         ldp     x25, x26, [sp,64]
4777         ldp     x27, x28, [sp,80]
4778         ldp     x29, x30, [sp], 128
4779         ret
4780         .size   FtlPrintInfo2buf, .-FtlPrintInfo2buf
4781         .align  2
4782         .global rknand_proc_ftlread
4783         .type   rknand_proc_ftlread, %function
4784 rknand_proc_ftlread:
4785         stp     x29, x30, [sp, -32]!
4786         adrp    x1, .LC72
4787         adrp    x2, .LC73
4788         add     x29, sp, 0
4789         add     x1, x1, :lo12:.LC72
4790         add     x2, x2, :lo12:.LC73
4791         stp     x19, x20, [sp,16]
4792         mov     x20, x0
4793         bl      sprintf
4794         add     x19, x20, x0, sxtw
4795         mov     x0, x19
4796         bl      FtlPrintInfo2buf
4797         add     x0, x19, x0, sxtw
4798         sub     w0, w0, w20
4799         ldp     x19, x20, [sp,16]
4800         ldp     x29, x30, [sp], 32
4801         ret
4802         .size   rknand_proc_ftlread, .-rknand_proc_ftlread
4803         .align  2
4804         .global GetSwlReplaceBlock
4805         .type   GetSwlReplaceBlock, %function
4806 GetSwlReplaceBlock:
4807         adrp    x1, :got:g_totle_avg_erase_count
4808         adrp    x2, :got:g_min_erase_count
4809         stp     x29, x30, [sp, -96]!
4810         add     x29, sp, 0
4811         ldr     x0, [x1, #:got_lo12:g_totle_avg_erase_count]
4812         stp     x23, x24, [sp,48]
4813         str     x25, [sp,64]
4814         mov     x24, x1
4815         stp     x19, x20, [sp,16]
4816         stp     x21, x22, [sp,32]
4817         mov     x25, x2
4818         ldr     w3, [x0]
4819         ldr     x0, [x2, #:got_lo12:g_min_erase_count]
4820         ldr     w0, [x0]
4821         cmp     w3, w0
4822         bcs     .L555
4823         adrp    x0, :got:g_totle_mlc_erase_count
4824         adrp    x2, :got:p_erase_count_table
4825         ldr     x1, [x0, #:got_lo12:g_totle_mlc_erase_count]
4826         str     wzr, [x1]
4827         adrp    x1, :got:c_ftl_nand_data_blks_per_plane
4828         ldr     x2, [x2, #:got_lo12:p_erase_count_table]
4829         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_blks_per_plane]
4830         ldr     x5, [x2]
4831         mov     x2, 0
4832         ldrh    w1, [x1]
4833 .L556:
4834         cmp     w1, w2
4835         bls     .L599
4836         ldr     x4, [x0, #:got_lo12:g_totle_mlc_erase_count]
4837         ldrh    w6, [x5,x2,lsl 1]
4838         add     x2, x2, 1
4839         ldr     w3, [x4]
4840         add     w3, w6, w3
4841         str     w3, [x4]
4842         b       .L556
4843 .L599:
4844         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
4845         ldr     x2, [x24, #:got_lo12:g_totle_avg_erase_count]
4846         ldr     w3, [x0]
4847         udiv    w1, w3, w1
4848         str     w1, [x2]
4849         adrp    x1, :got:g_totle_slc_erase_count
4850         ldr     x1, [x1, #:got_lo12:g_totle_slc_erase_count]
4851         ldr     w1, [x1]
4852         sub     w3, w3, w1
4853         adrp    x1, :got:c_mlc_erase_count_value
4854         ldr     x1, [x1, #:got_lo12:c_mlc_erase_count_value]
4855         ldrh    w1, [x1]
4856         udiv    w3, w3, w1
4857         str     w3, [x0]
4858         b       .L558
4859 .L555:
4860         adrp    x0, :got:g_max_erase_count
4861         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
4862         ldr     w1, [x0]
4863         cmp     w3, w1
4864         bls     .L558
4865         add     w1, w1, 1
4866         adrp    x4, :got:c_ftl_nand_data_blks_per_plane
4867         str     w1, [x0]
4868         adrp    x5, :got:p_erase_count_table
4869         mov     w0, 0
4870 .L560:
4871         ldr     x1, [x4, #:got_lo12:c_ftl_nand_data_blks_per_plane]
4872         ldrh    w1, [x1]
4873         cmp     w0, w1
4874         bcs     .L558
4875         ldr     x1, [x5, #:got_lo12:p_erase_count_table]
4876         ubfiz   x2, x0, 1, 32
4877         add     w0, w0, 1
4878         ldr     x3, [x1]
4879         ldrh    w1, [x3,x2]
4880         add     w1, w1, 1
4881         strh    w1, [x3,x2]
4882         b       .L560
4883 .L558:
4884         ldr     x0, [x25, #:got_lo12:g_min_erase_count]
4885         ldr     x1, [x24, #:got_lo12:g_totle_avg_erase_count]
4886         ldr     w0, [x0]
4887         ldr     w1, [x1]
4888         add     w2, w0, 341
4889         cmp     w2, w1
4890         bls     .L563
4891         adrp    x2, :got:g_max_erase_count
4892         add     w1, w0, 1024
4893         ldr     x2, [x2, #:got_lo12:g_max_erase_count]
4894         ldr     w2, [x2]
4895         cmp     w1, w2
4896         bls     .L563
4897         adrp    x1, :got:g_inkDie_check_enable
4898         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
4899         ldr     w1, [x1]
4900         cbz     w1, .L566
4901         cmp     w0, 30
4902         bls     .L563
4903 .L566:
4904         mov     w0, 65535
4905         b       .L565
4906 .L563:
4907         adrp    x0, :got:g_num_free_superblocks
4908         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
4909         ldrh    w0, [x0]
4910         add     w0, w0, w0, lsl 1
4911         lsr     w0, w0, 2
4912         bl      GetFreeBlockMaxEraseCount
4913         uxth    w6, w0
4914         ldr     x0, [x25, #:got_lo12:g_min_erase_count]
4915         ldr     w1, [x0]
4916         add     w0, w1, 64
4917         cmp     w6, w0
4918         bcs     .L579
4919         cmp     w1, 30
4920         bhi     .L566
4921 .L579:
4922         adrp    x0, :got:p_data_block_list_head
4923         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
4924         ldr     x2, [x0]
4925         cbz     x2, .L566
4926         adrp    x0, :got:p_data_block_list_table
4927         adrp    x21, :got:p_erase_count_table
4928         mov     w22, 65535
4929         mov     w10, 6
4930         mov     w19, w22
4931         mov     w9, w22
4932         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
4933         ldr     x8, [x0]
4934         ldr     x0, [x21, #:got_lo12:p_erase_count_table]
4935         ldr     x5, [x0]
4936         mov     x0, -6148914691236517206
4937         add     x0, x0, 1
4938 .L568:
4939         ldrh    w4, [x2]
4940         cmp     w4, w9
4941         beq     .L570
4942         ldrh    w3, [x2,4]
4943         cbz     w3, .L569
4944         sub     x3, x2, x8
4945         asr     x3, x3, 1
4946         mul     x3, x3, x0
4947         uxth    w7, w3
4948         and     x3, x3, 65535
4949         ldrh    w2, [x5,x3,lsl 1]
4950         cmp     w2, w1
4951         bls     .L578
4952         cmp     w2, w22
4953         bcs     .L569
4954         mov     w22, w2
4955         mov     w19, w7
4956 .L569:
4957         umull   x2, w4, w10
4958         add     x2, x8, x2
4959         b       .L568
4960 .L578:
4961         mov     w19, w7
4962 .L570:
4963         mov     w0, 65535
4964         cmp     w19, w0
4965         beq     .L566
4966         ubfiz   x23, x19, 1, 16
4967         ldrh    w20, [x5,x23]
4968         cmp     w20, w1
4969         bls     .L573
4970         str     x6, [x29,88]
4971         bl      GetFreeBlockMinEraseCount
4972         ldr     x2, [x25, #:got_lo12:g_min_erase_count]
4973         ldr     x6, [x29,88]
4974         ldr     w1, [x2]
4975         cmp     w1, w0, uxth
4976         bcs     .L573
4977         str     w22, [x2]
4978 .L573:
4979         cmp     w20, 29
4980         bhi     .L575
4981         adrp    x0, :got:g_inkDie_check_enable
4982         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
4983         ldr     w0, [x0]
4984         cbz     w0, .L575
4985         ldr     x1, [x24, #:got_lo12:g_totle_avg_erase_count]
4986         add     w0, w20, 10
4987         ldr     w1, [x1]
4988         cmp     w0, w1
4989         bls     .L576
4990         adrp    x0, :got:c_mlc_erase_count_value
4991         ldr     x0, [x0, #:got_lo12:c_mlc_erase_count_value]
4992         ldrh    w0, [x0]
4993         cmp     w0, w20
4994         bls     .L575
4995 .L576:
4996         adrp    x0, :got:g_num_data_superblocks
4997         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
4998         ldrh    w0, [x0]
4999         cmp     w0, 64
5000         bls     .L575
5001         ldr     x21, [x21, #:got_lo12:p_erase_count_table]
5002         adrp    x0, .LC74
5003         mov     w1, w19
5004         add     x0, x0, :lo12:.LC74
5005         ldr     x2, [x21]
5006         ldrh    w2, [x2,x23]
5007         bl      printk
5008         b       .L598
5009 .L575:
5010         ldr     x1, [x24, #:got_lo12:g_totle_avg_erase_count]
5011         ldr     w2, [x1]
5012         cmp     w20, w2
5013         bcs     .L566
5014         add     w0, w20, 128
5015         cmp     w6, w0
5016         ble     .L566
5017         add     w0, w20, 341
5018         adrp    x1, :got:g_max_erase_count
5019         cmp     w0, w2
5020         bcc     .L577
5021         ldr     x0, [x1, #:got_lo12:g_max_erase_count]
5022         add     w20, w20, 1024
5023         ldr     w0, [x0]
5024         cmp     w20, w0
5025         bcs     .L566
5026 .L577:
5027         adrp    x0, :got:p_valid_page_count_table
5028         ldr     x21, [x21, #:got_lo12:p_erase_count_table]
5029         ldr     x3, [x1, #:got_lo12:g_max_erase_count]
5030         mov     w1, w19
5031         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
5032         ldr     x5, [x21]
5033         ldr     w3, [x3]
5034         ldr     x4, [x0]
5035         adrp    x0, .LC75
5036         ldrh    w5, [x5,x23]
5037         add     x0, x0, :lo12:.LC75
5038         ldrh    w4, [x4,x23]
5039         bl      printk
5040 .L598:
5041         adrp    x0, :got:g_in_swl_replace
5042         mov     w1, 1
5043         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
5044         str     w1, [x0]
5045         mov     w0, w19
5046 .L565:
5047         ldp     x19, x20, [sp,16]
5048         ldp     x21, x22, [sp,32]
5049         ldp     x23, x24, [sp,48]
5050         ldr     x25, [sp,64]
5051         ldp     x29, x30, [sp], 96
5052         ret
5053         .size   GetSwlReplaceBlock, .-GetSwlReplaceBlock
5054         .align  2
5055         .global free_data_superblock
5056         .type   free_data_superblock, %function
5057 free_data_superblock:
5058         stp     x29, x30, [sp, -16]!
5059         uxth    w0, w0
5060         mov     w1, 65535
5061         cmp     w0, w1
5062         add     x29, sp, 0
5063         beq     .L601
5064         adrp    x1, :got:p_valid_page_count_table
5065         ubfiz   x2, x0, 1, 16
5066         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
5067         ldr     x1, [x1]
5068         strh    wzr, [x1,x2]
5069         bl      INSERT_FREE_LIST
5070 .L601:
5071         mov     w0, 0
5072         ldp     x29, x30, [sp], 16
5073         ret
5074         .size   free_data_superblock, .-free_data_superblock
5075         .align  2
5076         .global FtlGcBufInit
5077         .type   FtlGcBufInit, %function
5078 FtlGcBufInit:
5079         adrp    x0, :got:g_gc_num_req
5080         mov     w1, 0
5081         adrp    x6, :got:c_ftl_nand_planes_num
5082         mov     w7, 24
5083         adrp    x8, :got:gp_gc_page_buf_info
5084         mov     w9, 1
5085         ldr     x0, [x0, #:got_lo12:g_gc_num_req]
5086         adrp    x10, :got:c_ftl_nand_byte_pre_page
5087         mov     w3, 4
5088         adrp    x11, :got:p_gc_data_buf
5089         adrp    x12, :got:c_ftl_nand_byte_pre_oob
5090         adrp    x13, :got:p_gc_spare_buf
5091         str     wzr, [x0]
5092         adrp    x14, :got:req_gc
5093         mov     w15, 56
5094 .L603:
5095         ldr     x0, [x6, #:got_lo12:c_ftl_nand_planes_num]
5096         ldrh    w0, [x0]
5097         cmp     w1, w0
5098         bcs     .L607
5099         ldr     x4, [x8, #:got_lo12:gp_gc_page_buf_info]
5100         umull   x2, w1, w7
5101         ldr     x5, [x4]
5102         add     x0, x5, x2
5103         str     w9, [x0,16]
5104         ldr     x0, [x10, #:got_lo12:c_ftl_nand_byte_pre_page]
5105         ldr     x16, [x11, #:got_lo12:p_gc_data_buf]
5106         ldrh    w0, [x0]
5107         ldr     x16, [x16]
5108         mul     w0, w1, w0
5109         sdiv    w0, w0, w3
5110         add     x0, x16, x0, sxtw 2
5111         str     x0, [x5,x2]
5112         ldr     x0, [x12, #:got_lo12:c_ftl_nand_byte_pre_oob]
5113         ldr     x5, [x4]
5114         ldr     x16, [x13, #:got_lo12:p_gc_spare_buf]
5115         ldrh    w0, [x0]
5116         add     x4, x5, x2
5117         ldr     x16, [x16]
5118         mul     w0, w1, w0
5119         sdiv    w0, w0, w3
5120         add     x0, x16, x0, sxtw 2
5121         str     x0, [x4,8]
5122         umull   x0, w1, w15
5123         ldr     x16, [x14, #:got_lo12:req_gc]
5124         add     w1, w1, 1
5125         ldr     x2, [x5,x2]
5126         uxth    w1, w1
5127         ldr     x16, [x16]
5128         add     x0, x16, x0
5129         str     x2, [x0,8]
5130         ldr     x2, [x4,8]
5131         str     x2, [x0,16]
5132         b       .L603
5133 .L607:
5134         adrp    x6, :got:c_gc_page_buf_num
5135         mov     w7, 24
5136         adrp    x8, :got:gp_gc_page_buf_info
5137         adrp    x9, :got:c_ftl_nand_byte_pre_page
5138         mov     w3, 4
5139         adrp    x10, :got:p_gc_data_buf
5140         adrp    x11, :got:c_ftl_nand_byte_pre_oob
5141         adrp    x12, :got:p_gc_spare_buf
5142 .L605:
5143         ldr     x1, [x6, #:got_lo12:c_gc_page_buf_num]
5144         ldr     w1, [x1]
5145         cmp     w0, w1
5146         bcs     .L608
5147         ldr     x4, [x8, #:got_lo12:gp_gc_page_buf_info]
5148         umull   x2, w0, w7
5149         ldr     x5, [x4]
5150         add     x1, x5, x2
5151         str     wzr, [x1,16]
5152         ldr     x1, [x9, #:got_lo12:c_ftl_nand_byte_pre_page]
5153         ldr     x13, [x10, #:got_lo12:p_gc_data_buf]
5154         ldrh    w1, [x1]
5155         ldr     x13, [x13]
5156         mul     w1, w0, w1
5157         sdiv    w1, w1, w3
5158         add     x1, x13, x1, sxtw 2
5159         str     x1, [x5,x2]
5160         ldr     x1, [x11, #:got_lo12:c_ftl_nand_byte_pre_oob]
5161         ldr     x4, [x4]
5162         ldrh    w1, [x1]
5163         add     x2, x4, x2
5164         ldr     x4, [x12, #:got_lo12:p_gc_spare_buf]
5165         mul     w1, w0, w1
5166         add     w0, w0, 1
5167         ldr     x4, [x4]
5168         sdiv    w1, w1, w3
5169         uxth    w0, w0
5170         add     x1, x4, x1, sxtw 2
5171         str     x1, [x2,8]
5172         b       .L605
5173 .L608:
5174         ret
5175         .size   FtlGcBufInit, .-FtlGcBufInit
5176         .align  2
5177         .global FtlGcBufFree
5178         .type   FtlGcBufFree, %function
5179 FtlGcBufFree:
5180         adrp    x2, :got:c_gc_page_buf_num
5181         mov     w3, 0
5182         mov     w7, 56
5183         mov     w9, 24
5184         ldr     x2, [x2, #:got_lo12:c_gc_page_buf_num]
5185         ldr     w8, [x2]
5186         adrp    x2, :got:gp_gc_page_buf_info
5187         ldr     x2, [x2, #:got_lo12:gp_gc_page_buf_info]
5188         ldr     x5, [x2]
5189 .L610:
5190         cmp     w3, w1
5191         bcs     .L609
5192         umull   x4, w3, w7
5193         mov     w2, 0
5194         add     x4, x0, x4
5195 .L615:
5196         cmp     w2, w8
5197         bcs     .L612
5198         umull   x6, w2, w9
5199         add     x10, x5, x6
5200         ldr     x11, [x5,x6]
5201         ldr     x6, [x4,8]
5202         cmp     x11, x6
5203         bne     .L611
5204         str     wzr, [x10,16]
5205         b       .L612
5206 .L611:
5207         add     w2, w2, 1
5208         uxth    w2, w2
5209         b       .L615
5210 .L612:
5211         add     w3, w3, 1
5212         uxth    w3, w3
5213         b       .L610
5214 .L609:
5215         ret
5216         .size   FtlGcBufFree, .-FtlGcBufFree
5217         .align  2
5218         .global FtlGcBufAlloc
5219         .type   FtlGcBufAlloc, %function
5220 FtlGcBufAlloc:
5221         adrp    x2, :got:c_gc_page_buf_num
5222         mov     w7, 24
5223         mov     w8, 1
5224         mov     w9, 56
5225         ldr     x2, [x2, #:got_lo12:c_gc_page_buf_num]
5226         ldr     w5, [x2]
5227         adrp    x2, :got:gp_gc_page_buf_info
5228         ldr     x2, [x2, #:got_lo12:gp_gc_page_buf_info]
5229         ldr     x6, [x2]
5230         mov     w2, 0
5231 .L617:
5232         cmp     w2, w1
5233         bcs     .L623
5234         mov     w3, 0
5235 .L621:
5236         cmp     w3, w5
5237         bcs     .L619
5238         umull   x4, w3, w7
5239         add     x4, x6, x4
5240         ldr     w10, [x4,16]
5241         cbnz    w10, .L618
5242         umull   x3, w2, w9
5243         str     w8, [x4,16]
5244         add     x3, x0, x3
5245         ldr     x10, [x4]
5246         str     x10, [x3,8]
5247         ldr     x4, [x4,8]
5248         str     x4, [x3,16]
5249         b       .L619
5250 .L618:
5251         add     w3, w3, 1
5252         uxth    w3, w3
5253         b       .L621
5254 .L619:
5255         add     w2, w2, 1
5256         uxth    w2, w2
5257         b       .L617
5258 .L623:
5259         ret
5260         .size   FtlGcBufAlloc, .-FtlGcBufAlloc
5261         .align  2
5262         .global IsBlkInGcList
5263         .type   IsBlkInGcList, %function
5264 IsBlkInGcList:
5265         adrp    x1, :got:g_gc_blk_num
5266         uxth    w0, w0
5267         ldr     x1, [x1, #:got_lo12:g_gc_blk_num]
5268         ldrh    w2, [x1]
5269         adrp    x1, :got:p_gc_blk_tbl
5270         ldr     x1, [x1, #:got_lo12:p_gc_blk_tbl]
5271         ldr     x3, [x1]
5272         mov     x1, 0
5273 .L625:
5274         cmp     w2, w1, uxth
5275         bls     .L629
5276         add     x1, x1, 1
5277         add     x4, x3, x1, lsl 1
5278         ldrh    w4, [x4,-2]
5279         cmp     w4, w0
5280         bne     .L625
5281         mov     w0, 1
5282         b       .L626
5283 .L629:
5284         mov     w0, 0
5285 .L626:
5286         ret
5287         .size   IsBlkInGcList, .-IsBlkInGcList
5288         .align  2
5289         .global FtlGcUpdatePage
5290         .type   FtlGcUpdatePage, %function
5291 FtlGcUpdatePage:
5292         stp     x29, x30, [sp, -48]!
5293         add     x29, sp, 0
5294         str     x19, [sp,16]
5295         mov     w19, w0
5296         lsr     w0, w0, 10
5297         str     x1, [x29,32]
5298         str     x2, [x29,40]
5299         bl      P2V_block_in_plane
5300         adrp    x3, :got:g_gc_blk_num
5301         ldr     x2, [x29,40]
5302         ldr     x1, [x29,32]
5303         uxth    w8, w0
5304         mov     x5, 0
5305         ldr     x4, [x3, #:got_lo12:g_gc_blk_num]
5306         ldrh    w7, [x4]
5307         adrp    x4, :got:p_gc_blk_tbl
5308         ldr     x4, [x4, #:got_lo12:p_gc_blk_tbl]
5309         ldr     x6, [x4]
5310 .L631:
5311         uxth    w4, w5
5312         cmp     w4, w7
5313         bcs     .L635
5314         add     x5, x5, 1
5315         add     x9, x6, x5, lsl 1
5316         ldrh    w9, [x9,-2]
5317         cmp     w9, w8
5318         bne     .L631
5319 .L635:
5320         cmp     w4, w7
5321         bne     .L633
5322         ubfiz   x4, x4, 1, 16
5323         strh    w0, [x6,x4]
5324         ldr     x3, [x3, #:got_lo12:g_gc_blk_num]
5325         ldrh    w4, [x3]
5326         add     w4, w4, 1
5327         strh    w4, [x3]
5328 .L633:
5329         adrp    x3, :got:g_gc_page_offset
5330         adrp    x5, :got:p_gc_page_info
5331         mov     w0, 12
5332         ldr     x3, [x3, #:got_lo12:g_gc_page_offset]
5333         ldr     x5, [x5, #:got_lo12:p_gc_page_info]
5334         ldrh    w4, [x3]
5335         ldr     x6, [x5]
5336         umull   x4, w4, w0
5337         add     x6, x6, x4
5338         str     w1, [x6,4]
5339         ldr     x1, [x5]
5340         add     x0, x1, x4
5341         str     w2, [x0,8]
5342         str     w19, [x1,x4]
5343         ldrh    w0, [x3]
5344         add     w0, w0, 1
5345         strh    w0, [x3]
5346         ldr     x19, [sp,16]
5347         ldp     x29, x30, [sp], 48
5348         ret
5349         .size   FtlGcUpdatePage, .-FtlGcUpdatePage
5350         .align  2
5351         .global FtlGcRefreshBlock
5352         .type   FtlGcRefreshBlock, %function
5353 FtlGcRefreshBlock:
5354         stp     x29, x30, [sp, -32]!
5355         add     x29, sp, 0
5356         str     x19, [sp,16]
5357         uxth    w19, w0
5358         adrp    x0, .LC76
5359         mov     w1, w19
5360         add     x0, x0, :lo12:.LC76
5361         bl      printk
5362         adrp    x2, :got:g_gc_next_blk
5363         mov     w0, 65535
5364         ldr     x2, [x2, #:got_lo12:g_gc_next_blk]
5365         ldrh    w1, [x2]
5366         cmp     w1, w0
5367         beq     .L640
5368         adrp    x2, :got:g_gc_next_blk_1
5369         ldr     x2, [x2, #:got_lo12:g_gc_next_blk_1]
5370         ldrh    w1, [x2]
5371         cmp     w1, w0
5372         bne     .L639
5373 .L640:
5374         strh    w19, [x2]
5375 .L639:
5376         mov     w0, 0
5377         ldr     x19, [sp,16]
5378         ldp     x29, x30, [sp], 32
5379         ret
5380         .size   FtlGcRefreshBlock, .-FtlGcRefreshBlock
5381         .align  2
5382         .global FtlGcMarkBadPhyBlk
5383         .type   FtlGcMarkBadPhyBlk, %function
5384 FtlGcMarkBadPhyBlk:
5385         stp     x29, x30, [sp, -48]!
5386         add     x29, sp, 0
5387         stp     x19, x20, [sp,16]
5388         uxth    w20, w0
5389         adrp    x19, :got:g_gc_bad_block_temp_num
5390         mov     w0, w20
5391         stp     x21, x22, [sp,32]
5392         bl      P2V_block_in_plane
5393         uxth    w21, w0
5394         ldr     x1, [x19, #:got_lo12:g_gc_bad_block_temp_num]
5395         adrp    x0, .LC77
5396         mov     w2, w20
5397         add     x0, x0, :lo12:.LC77
5398         ldrh    w1, [x1]
5399         bl      printk
5400         mov     w0, w21
5401         bl      FtlGcRefreshBlock
5402         adrp    x0, :got:g_inkDie_check_enable
5403         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
5404         ldr     w0, [x0]
5405         cbz     w0, .L642
5406         adrp    x1, :got:p_erase_count_table
5407         ubfiz   x0, x21, 1, 16
5408         ldr     x1, [x1, #:got_lo12:p_erase_count_table]
5409         ldr     x2, [x1]
5410         ldrh    w1, [x2,x0]
5411         cmp     w1, 29
5412         bls     .L642
5413         sub     w1, w1, #30
5414         strh    w1, [x2,x0]
5415 .L642:
5416         ldr     x0, [x19, #:got_lo12:g_gc_bad_block_temp_num]
5417         adrp    x3, :got:g_gc_bad_block_temp_tbl
5418         ldrh    w1, [x0]
5419         mov     x0, 0
5420 .L643:
5421         cmp     w1, w0, uxth
5422         bls     .L649
5423         add     x0, x0, 1
5424         ldr     x2, [x3, #:got_lo12:g_gc_bad_block_temp_tbl]
5425         add     x2, x2, x0, lsl 1
5426         ldrh    w2, [x2,-2]
5427         cmp     w2, w20
5428         bne     .L643
5429         b       .L644
5430 .L649:
5431         cmp     w1, 15
5432         bhi     .L644
5433         ldr     x19, [x19, #:got_lo12:g_gc_bad_block_temp_num]
5434         add     w0, w1, 1
5435         strh    w0, [x19]
5436         adrp    x0, :got:g_gc_bad_block_temp_tbl
5437         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_tbl]
5438         strh    w20, [x0,w1,sxtw 1]
5439 .L644:
5440         mov     w0, 0
5441         ldp     x19, x20, [sp,16]
5442         ldp     x21, x22, [sp,32]
5443         ldp     x29, x30, [sp], 48
5444         ret
5445         .size   FtlGcMarkBadPhyBlk, .-FtlGcMarkBadPhyBlk
5446         .align  2
5447         .global FtlGcReFreshBadBlk
5448         .type   FtlGcReFreshBadBlk, %function
5449 FtlGcReFreshBadBlk:
5450         adrp    x0, :got:g_gc_bad_block_temp_num
5451         stp     x29, x30, [sp, -32]!
5452         add     x29, sp, 0
5453         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_num]
5454         str     x19, [sp,16]
5455         ldrh    w1, [x0]
5456         cbz     w1, .L651
5457         adrp    x0, :got:g_gc_next_blk
5458         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
5459         ldrh    w2, [x0]
5460         mov     w0, 65535
5461         cmp     w2, w0
5462         bne     .L651
5463         adrp    x19, :got:g_gc_bad_block_gc_index
5464         ldr     x0, [x19, #:got_lo12:g_gc_bad_block_gc_index]
5465         ldrh    w2, [x0]
5466         cmp     w2, w1
5467         bcc     .L652
5468         strh    wzr, [x0]
5469 .L652:
5470         ldr     x19, [x19, #:got_lo12:g_gc_bad_block_gc_index]
5471         adrp    x0, :got:g_gc_bad_block_temp_tbl
5472         ldrh    w1, [x19]
5473         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_tbl]
5474         ldrh    w0, [x0,w1,sxtw 1]
5475         bl      P2V_block_in_plane
5476         bl      FtlGcRefreshBlock
5477         ldrh    w0, [x19]
5478         add     w0, w0, 1
5479         strh    w0, [x19]
5480 .L651:
5481         mov     w0, 0
5482         ldr     x19, [sp,16]
5483         ldp     x29, x30, [sp], 32
5484         ret
5485         .size   FtlGcReFreshBadBlk, .-FtlGcReFreshBadBlk
5486         .align  2
5487         .global ftl_malloc
5488         .type   ftl_malloc, %function
5489 ftl_malloc:
5490         stp     x29, x30, [sp, -16]!
5491         mov     w1, 193
5492         sxtw    x0, w0
5493         add     x29, sp, 0
5494         movk    w1, 0x240, lsl 16
5495         bl      __kmalloc
5496         ldp     x29, x30, [sp], 16
5497         ret
5498         .size   ftl_malloc, .-ftl_malloc
5499         .align  2
5500         .global NandcInit
5501         .type   NandcInit, %function
5502 NandcInit:
5503         adrp    x1, :got:gNandChipMap
5504         mov     w2, 1
5505         stp     x29, x30, [sp, -32]!
5506         add     x29, sp, 0
5507         ldr     x1, [x1, #:got_lo12:gNandChipMap]
5508         str     x19, [sp,16]
5509         adrp    x19, :got:gpNandc
5510         str     w2, [x1,24]
5511         mov     w2, 2
5512         str     x0, [x1]
5513         str     x0, [x1,16]
5514         str     w2, [x1,40]
5515         mov     w2, 3
5516         str     x0, [x1,32]
5517         str     w2, [x1,56]
5518         adrp    x2, :got:gBootDdrMode
5519         str     x0, [x1,48]
5520         str     wzr, [x1,8]
5521         ldr     x19, [x19, #:got_lo12:gpNandc]
5522         str     x0, [x19]
5523         ldr     x2, [x2, #:got_lo12:gBootDdrMode]
5524         ldr     w1, [x0]
5525         ubfx    x3, x1, 13, 1
5526         str     w3, [x2]
5527         adrp    x2, :got:gNandcVer
5528         ldr     w3, [x0,352]
5529         and     w1, w1, 245760
5530         ubfx    x3, x3, 16, 4
5531         orr     w1, w1, 256
5532         ldr     x2, [x2, #:got_lo12:gNandcVer]
5533         str     w3, [x2]
5534         str     w1, [x0]
5535         ldr     x0, [x19]
5536         str     wzr, [x0,336]
5537         mov     w0, 40
5538         bl      NandcTimeCfg
5539         ldr     x0, [x19]
5540         mov     w1, 8322
5541         str     w1, [x0,344]
5542         mov     w1, 6145
5543         movk    w1, 0x18, lsl 16
5544         str     w1, [x0,304]
5545         mov     w0, 36864
5546         bl      ftl_malloc
5547         adrp    x1, :got:gMasterTempBuf
5548         ldr     x1, [x1, #:got_lo12:gMasterTempBuf]
5549         str     x0, [x1]
5550         adrp    x1, :got:gMasterInfo
5551         ldr     x1, [x1, #:got_lo12:gMasterInfo]
5552         str     x0, [x1]
5553         add     x0, x0, 32768
5554         str     x0, [x1,8]
5555         adrp    x0, :got:gNandcDumpWriteEn
5556         str     wzr, [x1,40]
5557         ldr     x0, [x0, #:got_lo12:gNandcDumpWriteEn]
5558         str     wzr, [x0]
5559         ldr     x19, [sp,16]
5560         ldp     x29, x30, [sp], 32
5561         ret
5562         .size   NandcInit, .-NandcInit
5563         .align  2
5564         .global ftl_free
5565         .type   ftl_free, %function
5566 ftl_free:
5567         stp     x29, x30, [sp, -16]!
5568         add     x29, sp, 0
5569         bl      kfree
5570         ldp     x29, x30, [sp], 16
5571         ret
5572         .size   ftl_free, .-ftl_free
5573         .align  2
5574         .global ftl_memset
5575         .type   ftl_memset, %function
5576 ftl_memset:
5577         stp     x29, x30, [sp, -16]!
5578         uxtw    x2, w2
5579         add     x29, sp, 0
5580         bl      memset
5581         ldp     x29, x30, [sp], 16
5582         ret
5583         .size   ftl_memset, .-ftl_memset
5584         .align  2
5585         .global BuildFlashLsbPageTable
5586         .type   BuildFlashLsbPageTable, %function
5587 BuildFlashLsbPageTable:
5588         stp     x29, x30, [sp, -32]!
5589         add     x29, sp, 0
5590         stp     x19, x20, [sp,16]
5591         mov     w19, w1
5592         cbnz    w0, .L661
5593         mov     x0, 0
5594         adrp    x2, :got:slcPageToMlcPageTbl
5595 .L662:
5596         ldr     x1, [x2, #:got_lo12:slcPageToMlcPageTbl]
5597         strh    w0, [x1,x0,lsl 1]
5598         add     x0, x0, 1
5599         cmp     x0, 256
5600         bne     .L662
5601 .L668:
5602         adrp    x20, :got:mlcPageToSlcPageTbl
5603         mov     w2, 1024
5604         mov     w1, 255
5605         uxth    w19, w19
5606         ldr     x0, [x20, #:got_lo12:mlcPageToSlcPageTbl]
5607         bl      ftl_memset
5608         mov     x0, 0
5609         adrp    x2, :got:slcPageToMlcPageTbl
5610         b       .L663
5611 .L661:
5612         cmp     w0, 1
5613         bne     .L664
5614         mov     x0, 0
5615         mov     w4, 3
5616         mov     w5, 2
5617         adrp    x3, :got:slcPageToMlcPageTbl
5618 .L667:
5619         cmp     x0, 3
5620         uxth    w1, w0
5621         mov     w2, w1
5622         bls     .L665
5623         ubfiz   w2, w1, 1, 15
5624         and     w1, w1, 1
5625         cmp     w1, wzr
5626         csel    w1, w4, w5, ne
5627         sub     w2, w2, w1
5628         uxth    w2, w2
5629 .L665:
5630         ldr     x1, [x3, #:got_lo12:slcPageToMlcPageTbl]
5631         strh    w2, [x1,x0,lsl 1]
5632         add     x0, x0, 1
5633         cmp     x0, 256
5634         bne     .L667
5635         b       .L668
5636 .L664:
5637         cmp     w0, 2
5638         bne     .L669
5639         mov     w2, 65535
5640         mov     x0, 0
5641         adrp    x4, :got:slcPageToMlcPageTbl
5642 .L671:
5643         ldr     x3, [x4, #:got_lo12:slcPageToMlcPageTbl]
5644         cmp     x0, 1
5645         uxth    w1, w0
5646         csel    w1, w2, w1, hi
5647         add     w2, w2, 2
5648         strh    w1, [x3,x0,lsl 1]
5649         add     x0, x0, 1
5650         cmp     x0, 256
5651         uxth    w2, w2
5652         bne     .L671
5653         b       .L668
5654 .L669:
5655         cmp     w0, 3
5656         bne     .L672
5657         mov     x0, 0
5658         mov     w5, 5
5659         mov     w6, 4
5660         adrp    x4, :got:slcPageToMlcPageTbl
5661 .L675:
5662         cmp     x0, 5
5663         uxth    w3, w0
5664         mov     w2, w3
5665         bls     .L673
5666         ubfiz   w2, w3, 1, 15
5667         and     w3, w3, 1
5668         cmp     w3, wzr
5669         csel    w1, w5, w6, ne
5670         sub     w2, w2, w1
5671         uxth    w2, w2
5672 .L673:
5673         ldr     x1, [x4, #:got_lo12:slcPageToMlcPageTbl]
5674         strh    w2, [x1,x0,lsl 1]
5675         add     x0, x0, 1
5676         cmp     x0, 256
5677         bne     .L675
5678         b       .L668
5679 .L672:
5680         cmp     w0, 4
5681         bne     .L676
5682         adrp    x2, :got:slcPageToMlcPageTbl
5683         mov     w1, 1
5684         mov     w5, 7
5685         mov     w4, 6
5686         ldr     x2, [x2, #:got_lo12:slcPageToMlcPageTbl]
5687         strh    w0, [x2,8]
5688         mov     w0, 5
5689         strh    w0, [x2,10]
5690         mov     w0, 7
5691         strh    w1, [x2,2]
5692         mov     w1, 2
5693         strh    w0, [x2,12]
5694         mov     w0, 8
5695         strh    w1, [x2,4]
5696         mov     w1, 3
5697         strh    w0, [x2,14]
5698         mov     w0, 8
5699         strh    wzr, [x2]
5700         strh    w1, [x2,6]
5701 .L678:
5702         and     w3, w0, 1
5703         ubfiz   w1, w0, 1, 15
5704         add     w0, w0, 1
5705         cmp     w3, wzr
5706         csel    w3, w5, w4, ne
5707         add     x2, x2, 2
5708         uxth    w0, w0
5709         sub     w1, w1, w3
5710         cmp     w0, 256
5711         strh    w1, [x2,14]
5712         bne     .L678
5713         b       .L668
5714 .L676:
5715         cmp     w0, 6
5716         bne     .L668
5717         mov     x2, 0
5718         mov     w5, 12
5719         mov     w6, 10
5720         adrp    x4, :got:slcPageToMlcPageTbl
5721 .L681:
5722         cmp     x2, 5
5723         uxth    w3, w2
5724         mov     w0, w3
5725         bls     .L679
5726         add     w0, w3, w3, lsl 1
5727         and     w3, w3, 1
5728         cmp     w3, wzr
5729         uxth    w0, w0
5730         csel    w1, w5, w6, ne
5731         sub     w0, w0, w1
5732         uxth    w0, w0
5733 .L679:
5734         ldr     x1, [x4, #:got_lo12:slcPageToMlcPageTbl]
5735         strh    w0, [x1,x2,lsl 1]
5736         add     x2, x2, 1
5737         cmp     x2, 256
5738         bne     .L681
5739         b       .L668
5740 .L663:
5741         cmp     w19, w0, uxth
5742         bls     .L697
5743         ldr     x1, [x2, #:got_lo12:slcPageToMlcPageTbl]
5744         ldr     x3, [x20, #:got_lo12:mlcPageToSlcPageTbl]
5745         ldrh    w1, [x1,x0,lsl 1]
5746         add     x0, x0, 1
5747         strh    w1, [x3,w1,sxtw 1]
5748         b       .L663
5749 .L697:
5750         ldp     x19, x20, [sp,16]
5751         ldp     x29, x30, [sp], 32
5752         ret
5753         .size   BuildFlashLsbPageTable, .-BuildFlashLsbPageTable
5754         .align  2
5755         .global FlashDieInfoInit
5756         .type   FlashDieInfoInit, %function
5757 FlashDieInfoInit:
5758         stp     x29, x30, [sp, -96]!
5759         add     x29, sp, 0
5760         stp     x19, x20, [sp,16]
5761         adrp    x19, :got:gNandMaxDie
5762         stp     x21, x22, [sp,32]
5763         stp     x23, x24, [sp,48]
5764         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5765         adrp    x23, :got:gNandMaxChip
5766         stp     x25, x26, [sp,64]
5767         stp     x27, x28, [sp,80]
5768         strb    wzr, [x0]
5769         adrp    x22, :got:gBlockPageAlignSize
5770         ldr     x0, [x23, #:got_lo12:gNandMaxChip]
5771         strb    wzr, [x0]
5772         adrp    x0, :got:gNandParaInfo
5773         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
5774         ldrh    w0, [x0,10]
5775         cmp     w0, 256
5776         bls     .L699
5777         ldr     x0, [x22, #:got_lo12:gBlockPageAlignSize]
5778         mov     w1, 512
5779         b       .L715
5780 .L699:
5781         cmp     w0, 128
5782         bhi     .L701
5783         ldr     x1, [x22, #:got_lo12:gBlockPageAlignSize]
5784         str     w0, [x1]
5785         b       .L700
5786 .L701:
5787         ldr     x0, [x22, #:got_lo12:gBlockPageAlignSize]
5788         mov     w1, 256
5789 .L715:
5790         str     w1, [x0]
5791 .L700:
5792         adrp    x20, :got:DieCsIndex
5793         mov     w1, 0
5794         mov     w2, 8
5795         adrp    x21, :got:DieAddrs
5796         mov     x25, 0
5797         adrp    x27, :got:gpNandParaInfo
5798         ldr     x0, [x20, #:got_lo12:DieCsIndex]
5799         adrp    x28, :got:IDByte
5800         bl      ftl_memset
5801         ldr     x0, [x21, #:got_lo12:DieAddrs]
5802         mov     w1, 0
5803         mov     w2, 32
5804         bl      ftl_memset
5805         adrp    x0, :got:gDieOp
5806         mov     w1, 0
5807         mov     w2, 192
5808         ldr     x0, [x0, #:got_lo12:gDieOp]
5809         bl      ftl_memset
5810 .L703:
5811         ldr     x0, [x27, #:got_lo12:gpNandParaInfo]
5812         adrp    x24, :got:gpNandParaInfo
5813         ldr     x1, [x28, #:got_lo12:IDByte]
5814         adrp    x26, :got:IDByte
5815         ldr     x2, [x0]
5816         add     x1, x1, x25, lsl 3
5817         add     x0, x2, 1
5818         ldrb    w2, [x2]
5819         bl      FlashMemCmp8
5820         cbnz    w0, .L702
5821         ldr     x2, [x19, #:got_lo12:gNandMaxDie]
5822         ldr     x3, [x21, #:got_lo12:DieAddrs]
5823         ldrb    w1, [x2]
5824         str     w0, [x3,w1,sxtw 2]
5825         add     w0, w1, 1
5826         strb    w0, [x2]
5827         ldr     x0, [x20, #:got_lo12:DieCsIndex]
5828         strb    w25, [x0,w1,sxtw]
5829 .L702:
5830         add     x25, x25, 1
5831         cmp     x25, 4
5832         bne     .L703
5833         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5834         ldr     x23, [x23, #:got_lo12:gNandMaxChip]
5835         ldrb    w0, [x0]
5836         strb    w0, [x23]
5837         ldr     x0, [x24, #:got_lo12:gpNandParaInfo]
5838         ldr     x0, [x0]
5839         ldrb    w0, [x0,8]
5840         cmp     w0, 2
5841         beq     .L708
5842 .L707:
5843         ldr     x24, [x24, #:got_lo12:gpNandParaInfo]
5844         adrp    x1, :got:gTotleBlock
5845         ldr     x19, [x19, #:got_lo12:gNandMaxDie]
5846         ldr     x2, [x24]
5847         ldrb    w0, [x19]
5848         ldr     x1, [x1, #:got_lo12:gTotleBlock]
5849         ldrb    w3, [x2,13]
5850         ldrh    w2, [x2,14]
5851         mul     w0, w0, w3
5852         mul     w0, w0, w2
5853         strh    w0, [x1]
5854         ldp     x19, x20, [sp,16]
5855         ldp     x21, x22, [sp,32]
5856         ldp     x23, x24, [sp,48]
5857         ldp     x25, x26, [sp,64]
5858         ldp     x27, x28, [sp,80]
5859         ldp     x29, x30, [sp], 96
5860         ret
5861 .L708:
5862         mov     x23, 0
5863 .L704:
5864         ldr     x25, [x24, #:got_lo12:gpNandParaInfo]
5865         ldr     x1, [x26, #:got_lo12:IDByte]
5866         ldr     x2, [x25]
5867         add     x1, x1, x23, lsl 3
5868         add     x0, x2, 1
5869         ldrb    w2, [x2]
5870         bl      FlashMemCmp8
5871         cbnz    w0, .L705
5872         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5873         ldr     x3, [x25]
5874         ldr     x1, [x22, #:got_lo12:gBlockPageAlignSize]
5875         ldrb    w4, [x0]
5876         ldrb    w0, [x3,13]
5877         ldr     w1, [x1]
5878         mov     x2, x4
5879         mul     w1, w0, w1
5880         ldrh    w0, [x3,14]
5881         and     w0, w0, 65280
5882         mul     w0, w1, w0
5883         ldr     x1, [x21, #:got_lo12:DieAddrs]
5884         str     w0, [x1,w4,sxtw 2]
5885         ldrb    w3, [x3,23]
5886         cbz     w3, .L706
5887         lsl     w0, w0, 1
5888         str     w0, [x1,w4,sxtw 2]
5889 .L706:
5890         ldr     x0, [x19, #:got_lo12:gNandMaxDie]
5891         add     w2, w2, 1
5892         strb    w2, [x0]
5893         ldr     x0, [x20, #:got_lo12:DieCsIndex]
5894         strb    w23, [x0,x4]
5895 .L705:
5896         add     x23, x23, 1
5897         cmp     x23, 4
5898         bne     .L704
5899         b       .L707
5900         .size   FlashDieInfoInit, .-FlashDieInfoInit
5901         .align  2
5902         .global ReadFlashInfo
5903         .type   ReadFlashInfo, %function
5904 ReadFlashInfo:
5905         stp     x29, x30, [sp, -32]!
5906         mov     w1, 0
5907         mov     w2, 11
5908         add     x29, sp, 0
5909         str     x19, [sp,16]
5910         mov     x19, x0
5911         bl      ftl_memset
5912         adrp    x2, :got:gpNandParaInfo
5913         adrp    x1, :got:gBlockPageAlignSize
5914         adrp    x4, :got:DieCsIndex
5915         mov     w5, 1
5916         ldr     x2, [x2, #:got_lo12:gpNandParaInfo]
5917         ldr     x1, [x1, #:got_lo12:gBlockPageAlignSize]
5918         ldr     x0, [x2]
5919         ldrb    w3, [x0,9]
5920         ldr     w0, [x1]
5921         adrp    x1, :got:gNandFlashEccBits
5922         mul     w0, w0, w3
5923         uxth    w0, w0
5924         strh    w0, [x19,4]
5925         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
5926         ldrb    w1, [x1]
5927         strb    w1, [x19,7]
5928         ldr     x3, [x2]
5929         ldrb    w1, [x3,13]
5930         mul     w0, w1, w0
5931         ldrh    w1, [x3,14]
5932         mul     w0, w0, w1
5933         ldrb    w1, [x3,8]
5934         mul     w0, w0, w1
5935         str     w0, [x19]
5936         ldr     x0, [x2]
5937         ldrb    w0, [x0,9]
5938         strb    w0, [x19,6]
5939         mov     w0, 32
5940         strb    w0, [x19,8]
5941         ldr     x0, [x2]
5942         ldrb    w0, [x0,7]
5943         strb    w0, [x19,9]
5944         adrp    x0, :got:gNandMaxDie
5945         strb    wzr, [x19,10]
5946         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
5947         ldrb    w3, [x0]
5948         mov     x0, 0
5949 .L717:
5950         cmp     w3, w0, uxtb
5951         bls     .L719
5952         ldr     x1, [x4, #:got_lo12:DieCsIndex]
5953         ldrb    w2, [x19,10]
5954         ldrb    w1, [x0,x1]
5955         add     x0, x0, 1
5956         lsl     w1, w5, w1
5957         orr     w1, w1, w2
5958         strb    w1, [x19,10]
5959         b       .L717
5960 .L719:
5961         ldr     x19, [sp,16]
5962         ldp     x29, x30, [sp], 32
5963         ret
5964         .size   ReadFlashInfo, .-ReadFlashInfo
5965         .align  2
5966         .global FtlMemInit
5967         .type   FtlMemInit, %function
5968 FtlMemInit:
5969         adrp    x0, :got:g_SlcPartLbaEndSector
5970         mov     w1, 65535
5971         stp     x29, x30, [sp, -224]!
5972         add     x29, sp, 0
5973         ldr     x0, [x0, #:got_lo12:g_SlcPartLbaEndSector]
5974         stp     x19, x20, [sp,16]
5975         stp     x23, x24, [sp,48]
5976         stp     x21, x22, [sp,32]
5977         stp     x25, x26, [sp,64]
5978         stp     x27, x28, [sp,80]
5979         str     wzr, [x0]
5980         adrp    x0, :got:g_all_blk_used_slc_mode
5981         adrp    x20, :got:c_ftl_nand_planes_num
5982         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
5983         str     wzr, [x0]
5984         adrp    x0, :got:g_GlobalSysVersion
5985         ldr     x0, [x0, #:got_lo12:g_GlobalSysVersion]
5986         str     wzr, [x0]
5987         adrp    x0, :got:g_GlobalDataVersion
5988         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
5989         str     wzr, [x0]
5990         adrp    x0, :got:g_totle_gc_page_count
5991         ldr     x0, [x0, #:got_lo12:g_totle_gc_page_count]
5992         str     wzr, [x0]
5993         adrp    x0, :got:g_totle_write_page_count
5994         ldr     x0, [x0, #:got_lo12:g_totle_write_page_count]
5995         str     wzr, [x0]
5996         adrp    x0, :got:g_totle_discard_page_count
5997         ldr     x0, [x0, #:got_lo12:g_totle_discard_page_count]
5998         str     wzr, [x0]
5999         adrp    x0, :got:g_totle_cache_write_count
6000         ldr     x0, [x0, #:got_lo12:g_totle_cache_write_count]
6001         str     wzr, [x0]
6002         adrp    x0, :got:g_totle_l2p_write_count
6003         ldr     x0, [x0, #:got_lo12:g_totle_l2p_write_count]
6004         str     wzr, [x0]
6005         adrp    x0, :got:g_totle_read_page_count
6006         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
6007         str     wzr, [x0]
6008         adrp    x0, :got:g_totle_mlc_erase_count
6009         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
6010         str     wzr, [x0]
6011         adrp    x0, :got:g_totle_slc_erase_count
6012         ldr     x0, [x0, #:got_lo12:g_totle_slc_erase_count]
6013         str     wzr, [x0]
6014         adrp    x0, :got:g_totle_sys_slc_erase_count
6015         ldr     x0, [x0, #:got_lo12:g_totle_sys_slc_erase_count]
6016         str     wzr, [x0]
6017         adrp    x0, :got:g_max_erase_count
6018         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
6019         str     wzr, [x0]
6020         adrp    x0, :got:g_min_erase_count
6021         ldr     x0, [x0, #:got_lo12:g_min_erase_count]
6022         str     wzr, [x0]
6023         adrp    x0, :got:g_in_gc_progress
6024         ldr     x0, [x0, #:got_lo12:g_in_gc_progress]
6025         str     wzr, [x0]
6026         adrp    x0, :got:g_in_swl_replace
6027         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
6028         str     wzr, [x0]
6029         adrp    x0, :got:g_gc_head_data_block
6030         ldr     x0, [x0, #:got_lo12:g_gc_head_data_block]
6031         str     w1, [x0]
6032         adrp    x0, :got:g_gc_head_data_block_count
6033         mov     w1, -1
6034         ldr     x0, [x0, #:got_lo12:g_gc_head_data_block_count]
6035         str     wzr, [x0]
6036         adrp    x0, :got:g_gc_skip_write_count
6037         ldr     x0, [x0, #:got_lo12:g_gc_skip_write_count]
6038         str     wzr, [x0]
6039         adrp    x0, :got:g_cur_erase_blk
6040         ldr     x0, [x0, #:got_lo12:g_cur_erase_blk]
6041         str     wzr, [x0]
6042         adrp    x0, :got:g_gc_next_blk
6043         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
6044         strh    w1, [x0]
6045         adrp    x0, :got:g_gc_next_blk_1
6046         ldr     x0, [x0, #:got_lo12:g_gc_next_blk_1]
6047         strh    w1, [x0]
6048         adrp    x0, :got:g_gc_free_blk_threshold
6049         mov     w1, 32
6050         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
6051         strh    w1, [x0]
6052         adrp    x0, :got:g_gc_merge_free_blk_threshold
6053         mov     w1, 128
6054         ldr     x0, [x0, #:got_lo12:g_gc_merge_free_blk_threshold]
6055         strh    w1, [x0]
6056         adrp    x0, :got:g_gc_blk_index
6057         adrp    x1, :got:c_wr_page_buf_num
6058         mov     x23, x1
6059         ldr     x0, [x0, #:got_lo12:g_gc_blk_index]
6060         strh    wzr, [x0]
6061         adrp    x0, :got:g_gc_bad_block_temp_num
6062         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_num]
6063         strh    wzr, [x0]
6064         adrp    x0, :got:g_gc_bad_block_gc_index
6065         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_gc_index]
6066         strh    wzr, [x0]
6067         adrp    x0, :got:c_ftl_nand_sec_pre_page
6068         ldr     x3, [x1, #:got_lo12:c_wr_page_buf_num]
6069         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
6070         ldrh    w2, [x0]
6071         mov     w0, 1024
6072         sdiv    w2, w0, w2
6073         str     w2, [x3]
6074         ldr     x0, [x20, #:got_lo12:c_ftl_nand_planes_num]
6075         ldrh    w0, [x0]
6076         lsl     w0, w0, 2
6077         cmp     w2, w0
6078         bls     .L721
6079         str     w0, [x3]
6080 .L721:
6081         adrp    x0, :got:g_wr_page_num
6082         adrp    x19, :got:c_ftl_nand_page_pre_super_blk
6083         mov     w21, 56
6084         adrp    x28, :got:req_gc_dst
6085         adrp    x27, :got:p_sys_data_buf
6086         adrp    x26, :got:p_sys_data_buf_1
6087         ldr     x0, [x0, #:got_lo12:g_wr_page_num]
6088         adrp    x25, :got:p_vendor_data_buf
6089         adrp    x24, :got:p_gc_data_buf
6090         str     wzr, [x0]
6091         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_super_blk]
6092         ldrh    w0, [x19]
6093         lsl     w0, w0, 1
6094         bl      ftl_malloc
6095         adrp    x8, :got:p_gc_blk_tbl
6096         str     x8, [x29,96]
6097         ldr     x1, [x8, #:got_lo12:p_gc_blk_tbl]
6098         str     x0, [x1]
6099         mov     w0, 12
6100         ldrh    w1, [x19]
6101         mul     w0, w1, w0
6102         bl      ftl_malloc
6103         adrp    x7, :got:p_gc_page_info
6104         str     x7, [x29,104]
6105         ldr     x1, [x7, #:got_lo12:p_gc_page_info]
6106         str     x0, [x1]
6107         ldr     x20, [x20, #:got_lo12:c_ftl_nand_planes_num]
6108         ldrh    w19, [x20]
6109         mul     w19, w19, w21
6110         lsl     w22, w19, 3
6111         mov     w0, w22
6112         bl      ftl_malloc
6113         adrp    x6, :got:req_read
6114         str     x6, [x29,112]
6115         ldr     x1, [x6, #:got_lo12:req_read]
6116         str     x0, [x1]
6117         mov     w0, w19
6118         bl      ftl_malloc
6119         ldr     x1, [x28, #:got_lo12:req_gc_dst]
6120         str     x0, [x1]
6121         mov     w0, w22
6122         bl      ftl_malloc
6123         adrp    x5, :got:req_prgm
6124         str     x5, [x29,120]
6125         ldr     x1, [x5, #:got_lo12:req_prgm]
6126         str     x0, [x1]
6127         mov     w0, w19
6128         bl      ftl_malloc
6129         adrp    x4, :got:req_erase
6130         str     x4, [x29,128]
6131         ldr     x1, [x4, #:got_lo12:req_erase]
6132         str     x0, [x1]
6133         mov     w0, w19
6134         bl      ftl_malloc
6135         adrp    x3, :got:req_gc
6136         str     x3, [x29,136]
6137         ldr     x1, [x3, #:got_lo12:req_gc]
6138         str     x0, [x1]
6139         ldr     x22, [x23, #:got_lo12:c_wr_page_buf_num]
6140         ldr     w0, [x22]
6141         mul     w0, w0, w21
6142         bl      ftl_malloc
6143         adrp    x2, :got:req_wr_io
6144         adrp    x12, :got:c_ftl_nand_byte_pre_page
6145         adrp    x9, :got:c_gc_page_buf_num
6146         ldr     x2, [x2, #:got_lo12:req_wr_io]
6147         str     x0, [x2]
6148         ldrh    w0, [x20]
6149         ldr     x12, [x12, #:got_lo12:c_ftl_nand_byte_pre_page]
6150         ldr     x23, [x9, #:got_lo12:c_gc_page_buf_num]
6151         lsl     w0, w0, 1
6152         add     w0, w0, 1
6153         str     x12, [x29,144]
6154         ldrh    w19, [x12]
6155         str     w0, [x23]
6156         mov     w0, w19
6157         bl      ftl_malloc
6158         ldr     x2, [x27, #:got_lo12:p_sys_data_buf]
6159         str     x0, [x2]
6160         mov     w0, w19
6161         bl      ftl_malloc
6162         ldr     x2, [x26, #:got_lo12:p_sys_data_buf_1]
6163         str     x0, [x2]
6164         mov     w0, w19
6165         bl      ftl_malloc
6166         ldr     x2, [x25, #:got_lo12:p_vendor_data_buf]
6167         str     x0, [x2]
6168         ldr     w0, [x23]
6169         mul     w0, w19, w0
6170         bl      ftl_malloc
6171         ldr     x2, [x24, #:got_lo12:p_gc_data_buf]
6172         str     x0, [x2]
6173         ldr     w0, [x22]
6174         mul     w0, w19, w0
6175         bl      ftl_malloc
6176         adrp    x2, :got:p_wr_io_data_buf
6177         ldr     x2, [x2, #:got_lo12:p_wr_io_data_buf]
6178         str     x0, [x2]
6179         mov     w0, w19
6180         bl      ftl_malloc
6181         adrp    x1, :got:p_io_data_buf_0
6182         ldr     x2, [x1, #:got_lo12:p_io_data_buf_0]
6183         str     x0, [x2]
6184         mov     w0, w19
6185         bl      ftl_malloc
6186         adrp    x1, :got:p_io_data_buf_1
6187         ldr     x2, [x1, #:got_lo12:p_io_data_buf_1]
6188         str     x0, [x2]
6189         mov     w0, 24
6190         ldr     w2, [x23]
6191         mul     w0, w2, w0
6192         bl      ftl_malloc
6193         ldrh    w19, [x20]
6194         adrp    x1, :got:gp_gc_page_buf_info
6195         ldr     x2, [x1, #:got_lo12:gp_gc_page_buf_info]
6196         str     x0, [x2]
6197         adrp    x2, :got:c_ftl_nand_byte_pre_oob
6198         ldr     x21, [x2, #:got_lo12:c_ftl_nand_byte_pre_oob]
6199         ldrh    w0, [x21]
6200         mul     w19, w0, w19
6201         mov     w0, w19
6202         bl      ftl_malloc
6203         adrp    x1, :got:p_sys_spare_buf
6204         ldr     x10, [x1, #:got_lo12:p_sys_spare_buf]
6205         str     x0, [x10]
6206         lsl     w0, w19, 3
6207         bl      ftl_malloc
6208         adrp    x1, :got:p_io_spare_buf
6209         ldr     x10, [x1, #:got_lo12:p_io_spare_buf]
6210         str     x0, [x10]
6211         ldrh    w10, [x21]
6212         ldr     w0, [x23]
6213         adrp    x23, :got:p_io_data_buf_0
6214         mul     w0, w10, w0
6215         bl      ftl_malloc
6216         adrp    x15, :got:p_gc_spare_buf
6217         ldrh    w2, [x21]
6218         str     x15, [x29,152]
6219         adrp    x21, :got:gp_gc_page_buf_info
6220         ldr     x9, [x15, #:got_lo12:p_gc_spare_buf]
6221         str     x0, [x9]
6222         ldr     w0, [x22]
6223         adrp    x22, :got:p_io_data_buf_1
6224         mul     w0, w2, w0
6225         bl      ftl_malloc
6226         adrp    x1, :got:p_wr_io_spare_buf
6227         adrp    x13, :got:c_ftl_nand_blk_pre_plane
6228         ldr     x1, [x1, #:got_lo12:p_wr_io_spare_buf]
6229         str     x0, [x1]
6230         adrp    x1, :got:g_ect_tbl_info_size
6231         ldr     x19, [x13, #:got_lo12:c_ftl_nand_blk_pre_plane]
6232         ldr     x20, [x1, #:got_lo12:g_ect_tbl_info_size]
6233         ldrh    w0, [x19]
6234         lsl     w0, w0, 1
6235         strh    w0, [x20]
6236         and     w0, w0, 65534
6237         bl      ftl_malloc
6238         adrp    x2, :got:p_swl_mul_table
6239         ldr     x2, [x2, #:got_lo12:p_swl_mul_table]
6240         str     x0, [x2]
6241         ldrh    w0, [x20]
6242         add     x0, x0, 547
6243         lsr     x0, x0, 9
6244         strh    w0, [x20]
6245         lsl     w0, w0, 9
6246         bl      ftl_malloc
6247         adrp    x1, :got:gp_ect_tbl_info
6248         adrp    x14, :got:p_erase_count_table
6249         str     x14, [x29,160]
6250         ldr     x1, [x1, #:got_lo12:gp_ect_tbl_info]
6251         str     x0, [x1]
6252         add     x0, x0, 32
6253         ldr     x1, [x14, #:got_lo12:p_erase_count_table]
6254         str     x0, [x1]
6255         ldrh    w1, [x19]
6256         lsl     w20, w1, 1
6257         mov     w0, w20
6258         bl      ftl_malloc
6259         adrp    x2, :got:p_valid_page_count_check_table
6260         ldr     x2, [x2, #:got_lo12:p_valid_page_count_check_table]
6261         str     x0, [x2]
6262         mov     w0, w20
6263         bl      ftl_malloc
6264         adrp    x9, :got:p_valid_page_count_table
6265         adrp    x16, :got:c_ftl_nand_max_map_blks
6266         str     x9, [x29,168]
6267         ldr     x1, [x9, #:got_lo12:p_valid_page_count_table]
6268         str     x0, [x1]
6269         ldr     x16, [x16, #:got_lo12:c_ftl_nand_max_map_blks]
6270         str     x16, [x29,208]
6271         ldr     w1, [x16]
6272         lsl     w20, w1, 1
6273         mov     w0, w20
6274         bl      ftl_malloc
6275         adrp    x11, :got:p_map_block_table
6276         str     x11, [x29,176]
6277         ldr     x2, [x11, #:got_lo12:p_map_block_table]
6278         str     x0, [x2]
6279         mov     w0, w20
6280         bl      ftl_malloc
6281         adrp    x10, :got:p_map_block_valid_page_count
6282         str     x10, [x29,184]
6283         ldr     x1, [x10, #:got_lo12:p_map_block_valid_page_count]
6284         str     x0, [x1]
6285         adrp    x1, :got:c_ftl_nand_max_vendor_blks
6286         ldr     x20, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
6287         ldrh    w0, [x20]
6288         lsl     w0, w0, 1
6289         bl      ftl_malloc
6290         adrp    x2, :got:p_vendor_block_table
6291         ldr     x2, [x2, #:got_lo12:p_vendor_block_table]
6292         str     x0, [x2]
6293         ldrh    w0, [x20]
6294         lsl     w0, w0, 1
6295         bl      ftl_malloc
6296         adrp    x2, :got:p_vendor_block_valid_page_count
6297         ldr     x2, [x2, #:got_lo12:p_vendor_block_valid_page_count]
6298         str     x0, [x2]
6299         ldrh    w0, [x20]
6300         adrp    x20, :got:p_sys_spare_buf
6301         lsl     w0, w0, 2
6302         bl      ftl_malloc
6303         adrp    x1, :got:p_vendor_block_ver_table
6304         ldr     x1, [x1, #:got_lo12:p_vendor_block_ver_table]
6305         str     x0, [x1]
6306         adrp    x1, :got:c_ftl_nand_vendor_region_num
6307         ldr     x1, [x1, #:got_lo12:c_ftl_nand_vendor_region_num]
6308         str     x1, [x29,216]
6309         ldrh    w0, [x1]
6310         lsl     w0, w0, 2
6311         bl      ftl_malloc
6312         adrp    x2, :got:p_vendor_region_ppn_table
6313         ldr     x1, [x29,216]
6314         ldr     x2, [x2, #:got_lo12:p_vendor_region_ppn_table]
6315         str     x0, [x2]
6316         ldrh    w2, [x1]
6317         mov     w1, 0
6318         lsl     w2, w2, 2
6319         bl      ftl_memset
6320         adrp    x0, :got:c_ftl_nand_map_region_num
6321         ldr     x0, [x0, #:got_lo12:c_ftl_nand_map_region_num]
6322         ldrh    w0, [x0]
6323         lsl     w0, w0, 2
6324         bl      ftl_malloc
6325         adrp    x2, :got:p_map_region_ppn_table
6326         ldr     x16, [x29,208]
6327         str     x2, [x29,192]
6328         ldr     x1, [x2, #:got_lo12:p_map_region_ppn_table]
6329         str     x0, [x1]
6330         ldr     w0, [x16]
6331         lsl     w0, w0, 2
6332         bl      ftl_malloc
6333         adrp    x1, :got:p_map_block_ver_table
6334         str     x1, [x29,200]
6335         ldr     x16, [x1, #:got_lo12:p_map_block_ver_table]
6336         str     x0, [x16]
6337         adrp    x16, :got:c_ftl_nand_l2pmap_ram_region_num
6338         ldr     x16, [x16, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
6339         str     x16, [x29,216]
6340         ldrh    w0, [x16]
6341         lsl     w0, w0, 4
6342         bl      ftl_malloc
6343         adrp    x17, :got:p_l2p_ram_map
6344         ldr     x12, [x29,144]
6345         ldr     x16, [x29,216]
6346         ldr     x17, [x17, #:got_lo12:p_l2p_ram_map]
6347         ldrh    w16, [x16]
6348         str     x0, [x17]
6349         ldrh    w0, [x12]
6350         mul     w0, w16, w0
6351         bl      ftl_malloc
6352         adrp    x12, :got:p_l2p_map_buf
6353         ldr     x12, [x12, #:got_lo12:p_l2p_map_buf]
6354         str     x0, [x12]
6355         mov     w0, 6
6356         ldrh    w12, [x19]
6357         adrp    x19, :got:p_io_spare_buf
6358         mul     w0, w12, w0
6359         bl      ftl_malloc
6360         adrp    x12, :got:p_data_block_list_table
6361         adrp    x16, :got:c_ftl_nand_bbm_buf_size
6362         adrp    x17, :got:c_ftl_nand_die_num
6363         ldr     x12, [x12, #:got_lo12:p_data_block_list_table]
6364         str     x0, [x12]
6365         adrp    x0, :got:c_ftl_nand_blks_per_die
6366         ldr     x16, [x16, #:got_lo12:c_ftl_nand_bbm_buf_size]
6367         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blks_per_die]
6368         str     x16, [x29,208]
6369         ldrh    w0, [x0]
6370         add     w0, w0, 31
6371         asr     w0, w0, 5
6372         strh    w0, [x16]
6373         ldr     x17, [x17, #:got_lo12:c_ftl_nand_die_num]
6374         str     x17, [x29,216]
6375         ldrh    w12, [x17]
6376         mul     w0, w0, w12
6377         lsl     w0, w0, 2
6378         bl      ftl_malloc
6379         adrp    x13, :got:gBbtInfo
6380         ldr     x17, [x29,216]
6381         ldr     x16, [x29,208]
6382         ldr     x15, [x29,152]
6383         ldr     x12, [x13, #:got_lo12:gBbtInfo]
6384         ldrh    w18, [x17]
6385         ldrh    w17, [x16]
6386         ldr     x14, [x29,160]
6387         ldr     x8, [x29,96]
6388         mov     w16, w17
6389         ldr     x7, [x29,104]
6390         ldr     x6, [x29,112]
6391         ldr     x5, [x29,120]
6392         ldr     x4, [x29,128]
6393         ldr     x3, [x29,136]
6394         ldr     x9, [x29,168]
6395         ldr     x11, [x29,176]
6396         ldr     x10, [x29,184]
6397         ldr     x2, [x29,192]
6398         ldr     x1, [x29,200]
6399         str     x0, [x12,32]
6400         mov     w0, 1
6401         str     x15, [x29,216]
6402         mov     x15, x13
6403         str     x14, [x29,208]
6404 .L722:
6405         cmp     w0, w18
6406         add     x12, x12, 8
6407         bcs     .L724
6408         ldr     x14, [x15, #:got_lo12:gBbtInfo]
6409         add     w0, w0, 1
6410         ldr     x14, [x14,32]
6411         add     x14, x14, x16, uxtw 2
6412         add     w16, w16, w17
6413         str     x14, [x12,32]
6414         b       .L722
6415 .L724:
6416         cmp     w0, 8
6417         beq     .L822
6418         ldr     x12, [x13, #:got_lo12:gBbtInfo]
6419         add     x12, x12, x0, uxtw 3
6420         add     w0, w0, 1
6421         str     xzr, [x12,32]
6422         b       .L724
6423 .L822:
6424         ldr     x11, [x11, #:got_lo12:p_map_block_table]
6425         ldr     x0, [x11]
6426         cbnz    x0, .L726
6427 .L728:
6428         adrp    x0, .LC78
6429         adrp    x1, .LANCHOR1
6430         add     x0, x0, :lo12:.LC78
6431         add     x1, x1, :lo12:.LANCHOR1
6432         bl      printk
6433         mov     w0, -1
6434         b       .L727
6435 .L726:
6436         ldr     x10, [x10, #:got_lo12:p_map_block_valid_page_count]
6437         ldr     x0, [x10]
6438         cbz     x0, .L728
6439         ldr     x2, [x2, #:got_lo12:p_map_region_ppn_table]
6440         ldr     x0, [x2]
6441         cbz     x0, .L728
6442         ldr     x1, [x1, #:got_lo12:p_map_block_ver_table]
6443         ldr     x0, [x1]
6444         cbz     x0, .L728
6445         adrp    x0, :got:p_l2p_ram_map
6446         ldr     x0, [x0, #:got_lo12:p_l2p_ram_map]
6447         ldr     x0, [x0]
6448         cbz     x0, .L728
6449         adrp    x0, :got:p_l2p_map_buf
6450         ldr     x0, [x0, #:got_lo12:p_l2p_map_buf]
6451         ldr     x0, [x0]
6452         cbz     x0, .L728
6453         adrp    x0, :got:p_data_block_list_table
6454         ldr     x0, [x0, #:got_lo12:p_data_block_list_table]
6455         ldr     x0, [x0]
6456         cbz     x0, .L728
6457         adrp    x0, :got:gBbtInfo
6458         ldr     x0, [x0, #:got_lo12:gBbtInfo]
6459         ldr     x0, [x0,32]
6460         cbz     x0, .L728
6461         ldr     x9, [x9, #:got_lo12:p_valid_page_count_table]
6462         ldr     x0, [x9]
6463         cbz     x0, .L728
6464         ldr     x8, [x8, #:got_lo12:p_gc_blk_tbl]
6465         ldr     x0, [x8]
6466         cbz     x0, .L728
6467         ldr     x7, [x7, #:got_lo12:p_gc_page_info]
6468         ldr     x0, [x7]
6469         cbz     x0, .L728
6470         ldr     x6, [x6, #:got_lo12:req_read]
6471         ldr     x0, [x6]
6472         cbz     x0, .L728
6473         ldr     x5, [x5, #:got_lo12:req_prgm]
6474         ldr     x0, [x5]
6475         cbz     x0, .L728
6476         ldr     x4, [x4, #:got_lo12:req_erase]
6477         ldr     x0, [x4]
6478         cbz     x0, .L728
6479         ldr     x3, [x3, #:got_lo12:req_gc]
6480         ldr     x0, [x3]
6481         cbz     x0, .L728
6482         ldr     x28, [x28, #:got_lo12:req_gc_dst]
6483         ldr     x0, [x28]
6484         cbz     x0, .L728
6485         ldr     x27, [x27, #:got_lo12:p_sys_data_buf]
6486         ldr     x0, [x27]
6487         cbz     x0, .L728
6488         ldr     x26, [x26, #:got_lo12:p_sys_data_buf_1]
6489         ldr     x0, [x26]
6490         cbz     x0, .L728
6491         ldr     x25, [x25, #:got_lo12:p_vendor_data_buf]
6492         ldr     x0, [x25]
6493         cbz     x0, .L728
6494         ldr     x24, [x24, #:got_lo12:p_gc_data_buf]
6495         ldr     x0, [x24]
6496         cbz     x0, .L728
6497         ldr     x23, [x23, #:got_lo12:p_io_data_buf_0]
6498         ldr     x0, [x23]
6499         cbz     x0, .L728
6500         ldr     x22, [x22, #:got_lo12:p_io_data_buf_1]
6501         ldr     x0, [x22]
6502         cbz     x0, .L728
6503         ldr     x21, [x21, #:got_lo12:gp_gc_page_buf_info]
6504         ldr     x0, [x21]
6505         cbz     x0, .L728
6506         ldr     x20, [x20, #:got_lo12:p_sys_spare_buf]
6507         ldr     x0, [x20]
6508         cbz     x0, .L728
6509         ldr     x19, [x19, #:got_lo12:p_io_spare_buf]
6510         ldr     x0, [x19]
6511         cbz     x0, .L728
6512         ldr     x0, [x29,216]
6513         ldr     x15, [x0, #:got_lo12:p_gc_spare_buf]
6514         ldr     x0, [x15]
6515         cbz     x0, .L728
6516         ldr     x0, [x29,208]
6517         ldr     x14, [x0, #:got_lo12:p_erase_count_table]
6518         ldr     x0, [x14]
6519         cbz     x0, .L728
6520         adrp    x0, :got:p_swl_mul_table
6521         ldr     x0, [x0, #:got_lo12:p_swl_mul_table]
6522         ldr     x0, [x0]
6523         cbz     x0, .L728
6524         adrp    x0, :got:p_vendor_block_table
6525         ldr     x0, [x0, #:got_lo12:p_vendor_block_table]
6526         ldr     x0, [x0]
6527         cbz     x0, .L728
6528         adrp    x0, :got:p_vendor_block_valid_page_count
6529         ldr     x0, [x0, #:got_lo12:p_vendor_block_valid_page_count]
6530         ldr     x0, [x0]
6531         cbz     x0, .L728
6532         adrp    x0, :got:p_vendor_block_ver_table
6533         ldr     x0, [x0, #:got_lo12:p_vendor_block_ver_table]
6534         ldr     x0, [x0]
6535         cbz     x0, .L728
6536         adrp    x0, :got:p_vendor_region_ppn_table
6537         ldr     x0, [x0, #:got_lo12:p_vendor_region_ppn_table]
6538         ldr     x0, [x0]
6539         cbz     x0, .L728
6540         mov     w0, 0
6541 .L727:
6542         ldp     x19, x20, [sp,16]
6543         ldp     x21, x22, [sp,32]
6544         ldp     x23, x24, [sp,48]
6545         ldp     x25, x26, [sp,64]
6546         ldp     x27, x28, [sp,80]
6547         ldp     x29, x30, [sp], 224
6548         ret
6549         .size   FtlMemInit, .-FtlMemInit
6550         .align  2
6551         .global FtlBbt2Bitmap
6552         .type   FtlBbt2Bitmap, %function
6553 FtlBbt2Bitmap:
6554         stp     x29, x30, [sp, -32]!
6555         add     x29, sp, 0
6556         stp     x19, x20, [sp,16]
6557         mov     x19, x1
6558         adrp    x1, :got:c_ftl_nand_bbm_buf_size
6559         mov     x20, x0
6560         mov     x0, x19
6561         ldr     x1, [x1, #:got_lo12:c_ftl_nand_bbm_buf_size]
6562         ldrh    w2, [x1]
6563         mov     w1, 0
6564         lsl     w2, w2, 2
6565         bl      ftl_memset
6566         mov     x3, 0
6567         mov     w0, 65535
6568         mov     w5, 1
6569 .L825:
6570         ldrh    w2, [x20,x3]
6571         cmp     w2, w0
6572         beq     .L823
6573         ubfx    x4, x2, 5, 11
6574         add     x3, x3, 2
6575         lsl     x4, x4, 2
6576         lsl     w2, w5, w2
6577         cmp     x3, 1024
6578         ldr     w1, [x19,x4]
6579         orr     w2, w1, w2
6580         str     w2, [x19,x4]
6581         bne     .L825
6582 .L823:
6583         ldp     x19, x20, [sp,16]
6584         ldp     x29, x30, [sp], 32
6585         ret
6586         .size   FtlBbt2Bitmap, .-FtlBbt2Bitmap
6587         .align  2
6588         .global FtlBbtMemInit
6589         .type   FtlBbtMemInit, %function
6590 FtlBbtMemInit:
6591         adrp    x0, :got:gBbtInfo
6592         mov     w1, -1
6593         stp     x29, x30, [sp, -16]!
6594         mov     w2, 16
6595         add     x29, sp, 0
6596         ldr     x0, [x0, #:got_lo12:gBbtInfo]
6597         add     x0, x0, 12
6598         strh    w1, [x0,-12]
6599         mov     w1, 255
6600         strh    wzr, [x0,-6]
6601         bl      ftl_memset
6602         ldp     x29, x30, [sp], 16
6603         ret
6604         .size   FtlBbtMemInit, .-FtlBbtMemInit
6605         .align  2
6606         .global FtlFreeSysBlkQueueInit
6607         .type   FtlFreeSysBlkQueueInit, %function
6608 FtlFreeSysBlkQueueInit:
6609         adrp    x1, :got:gSysFreeQueue
6610         mov     w2, 2048
6611         stp     x29, x30, [sp, -16]!
6612         add     x29, sp, 0
6613         ldr     x1, [x1, #:got_lo12:gSysFreeQueue]
6614         strh    wzr, [x1,2]
6615         strh    wzr, [x1,4]
6616         strh    wzr, [x1,6]
6617         strh    w0, [x1],8
6618         mov     x0, x1
6619         mov     w1, 0
6620         bl      ftl_memset
6621         mov     w0, 0
6622         ldp     x29, x30, [sp], 16
6623         ret
6624         .size   FtlFreeSysBlkQueueInit, .-FtlFreeSysBlkQueueInit
6625         .align  2
6626         .global ftl_free_no_use_map_blk
6627         .type   ftl_free_no_use_map_blk, %function
6628 ftl_free_no_use_map_blk:
6629         stp     x29, x30, [sp, -96]!
6630         mov     w1, 0
6631         add     x29, sp, 0
6632         stp     x19, x20, [sp,16]
6633         stp     x21, x22, [sp,32]
6634         stp     x23, x24, [sp,48]
6635         stp     x25, x26, [sp,64]
6636         str     x27, [sp,80]
6637         mov     x19, x0
6638         ldrh    w2, [x0,10]
6639         ldr     x21, [x0,32]
6640         ldr     x25, [x0,16]
6641         lsl     w2, w2, 1
6642         ldr     x20, [x0,40]
6643         mov     x0, x21
6644         bl      ftl_memset
6645         mov     w0, 0
6646 .L831:
6647         ldrh    w1, [x19,6]
6648         cmp     w1, w0
6649         bls     .L844
6650         ubfiz   x1, x0, 2, 16
6651         ldr     w2, [x20,x1]
6652         mov     w1, 0
6653         ubfx    x2, x2, 10, 16
6654 .L832:
6655         ldrh    w3, [x19,10]
6656         cmp     w3, w1
6657         bls     .L845
6658         ubfiz   x3, x1, 1, 16
6659         ldrh    w4, [x25,x3]
6660         cmp     w4, w2
6661         bne     .L833
6662         ldrh    w4, [x21,x3]
6663         add     w4, w4, 1
6664         strh    w4, [x21,x3]
6665 .L833:
6666         add     w1, w1, 1
6667         uxth    w1, w1
6668         b       .L832
6669 .L845:
6670         add     w0, w0, 1
6671         uxth    w0, w0
6672         b       .L831
6673 .L844:
6674         mov     w24, 0
6675         ldrh    w26, [x21]
6676         mov     w20, w24
6677         adrp    x27, :got:c_ftl_nand_page_pre_slc_blk
6678 .L836:
6679         ldrh    w0, [x19,10]
6680         cmp     w0, w20
6681         bls     .L846
6682         ldrh    w0, [x19]
6683         uxtw    x22, w20
6684         cmp     w0, w20
6685         bne     .L837
6686         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
6687         ldrh    w1, [x19,2]
6688         ldrh    w0, [x0]
6689         cmp     w1, w0
6690         bcs     .L837
6691         strh    w0, [x21,x22,lsl 1]
6692 .L837:
6693         lsl     x22, x22, 1
6694         ldrh    w23, [x21,x22]
6695         cmp     w26, w23
6696         bls     .L838
6697         mov     w24, w20
6698         mov     w26, w23
6699 .L838:
6700         cbnz    w23, .L839
6701         ldrh    w0, [x25,x22]
6702         cbz     w0, .L839
6703         mov     w1, 1
6704         bl      FtlFreeSysBlkQueueIn
6705         strh    w23, [x25,x22]
6706         ldrh    w0, [x19,8]
6707         sub     w0, w0, #1
6708         strh    w0, [x19,8]
6709 .L839:
6710         add     w20, w20, 1
6711         uxth    w20, w20
6712         b       .L836
6713 .L846:
6714         mov     w0, w24
6715         ldr     x27, [sp,80]
6716         ldp     x19, x20, [sp,16]
6717         ldp     x21, x22, [sp,32]
6718         ldp     x23, x24, [sp,48]
6719         ldp     x25, x26, [sp,64]
6720         ldp     x29, x30, [sp], 96
6721         ret
6722         .size   ftl_free_no_use_map_blk, .-ftl_free_no_use_map_blk
6723         .align  2
6724         .global FtlL2PDataInit
6725         .type   FtlL2PDataInit, %function
6726 FtlL2PDataInit:
6727         stp     x29, x30, [sp, -64]!
6728         add     x29, sp, 0
6729         stp     x21, x22, [sp,32]
6730         adrp    x22, :got:c_ftl_nand_max_map_blks
6731         str     x23, [sp,48]
6732         adrp    x23, :got:p_map_block_valid_page_count
6733         adrp    x21, :got:c_ftl_nand_byte_pre_page
6734         stp     x19, x20, [sp,16]
6735         ldr     x1, [x22, #:got_lo12:c_ftl_nand_max_map_blks]
6736         adrp    x19, :got:c_ftl_nand_l2pmap_ram_region_num
6737         ldr     x0, [x23, #:got_lo12:p_map_block_valid_page_count]
6738         adrp    x20, :got:p_l2p_map_buf
6739         ldr     w2, [x1]
6740         mov     w1, 0
6741         ldr     x0, [x0]
6742         lsl     w2, w2, 1
6743         bl      ftl_memset
6744         ldr     x1, [x21, #:got_lo12:c_ftl_nand_byte_pre_page]
6745         ldr     x0, [x20, #:got_lo12:p_l2p_map_buf]
6746         ldrh    w3, [x1]
6747         ldr     x1, [x19, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
6748         ldr     x0, [x0]
6749         ldrh    w2, [x1]
6750         mov     w1, 255
6751         mul     w2, w3, w2
6752         bl      ftl_memset
6753         mov     w1, 0
6754         mov     x3, x23
6755         adrp    x5, :got:p_l2p_ram_map
6756         mov     w6, -1
6757 .L848:
6758         ldr     x0, [x19, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
6759         ldrh    w0, [x0]
6760         cmp     w0, w1
6761         bls     .L850
6762         ldr     x2, [x5, #:got_lo12:p_l2p_ram_map]
6763         ubfiz   x0, x1, 4, 16
6764         ldr     x4, [x2]
6765         add     x4, x4, x0
6766         str     wzr, [x4,4]
6767         ldr     x4, [x2]
6768         strh    w6, [x4,x0]
6769         ldr     x2, [x2]
6770         ldr     x4, [x20, #:got_lo12:p_l2p_map_buf]
6771         add     x2, x2, x0
6772         ldr     x0, [x21, #:got_lo12:c_ftl_nand_byte_pre_page]
6773         ldr     x4, [x4]
6774         ldrh    w0, [x0]
6775         mul     w0, w0, w1
6776         sxtw    x0, w0
6777         and     x0, x0, -4
6778         add     x0, x4, x0
6779         str     x0, [x2,8]
6780         add     w0, w1, 1
6781         uxth    w1, w0
6782         b       .L848
6783 .L850:
6784         adrp    x0, :got:gL2pMapInfo
6785         mov     w2, -1
6786         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
6787         strh    w2, [x0,2]
6788         strh    w2, [x0]
6789         ldr     x1, [x22, #:got_lo12:c_ftl_nand_max_map_blks]
6790         ldr     w1, [x1]
6791         strh    w1, [x0,10]
6792         mov     w1, -3902
6793         strh    w1, [x0,4]
6794         adrp    x1, :got:g_totle_map_block
6795         ldr     x1, [x1, #:got_lo12:g_totle_map_block]
6796         ldrh    w1, [x1]
6797         strh    w1, [x0,8]
6798         adrp    x1, :got:c_ftl_nand_map_region_num
6799         ldr     x1, [x1, #:got_lo12:c_ftl_nand_map_region_num]
6800         ldrh    w1, [x1]
6801         strh    w1, [x0,6]
6802         adrp    x1, :got:p_map_block_table
6803         ldr     x1, [x1, #:got_lo12:p_map_block_table]
6804         ldr     x1, [x1]
6805         str     x1, [x0,16]
6806         adrp    x1, :got:p_map_block_ver_table
6807         ldr     x1, [x1, #:got_lo12:p_map_block_ver_table]
6808         ldr     x1, [x1]
6809         str     x1, [x0,24]
6810         ldr     x1, [x3, #:got_lo12:p_map_block_valid_page_count]
6811         ldr     x1, [x1]
6812         str     x1, [x0,32]
6813         adrp    x1, :got:p_map_region_ppn_table
6814         ldr     x1, [x1, #:got_lo12:p_map_region_ppn_table]
6815         ldr     x1, [x1]
6816         str     x1, [x0,40]
6817         ldp     x19, x20, [sp,16]
6818         ldp     x21, x22, [sp,32]
6819         ldr     x23, [sp,48]
6820         ldp     x29, x30, [sp], 64
6821         ret
6822         .size   FtlL2PDataInit, .-FtlL2PDataInit
6823         .align  2
6824         .global FtlVariablesInit
6825         .type   FtlVariablesInit, %function
6826 FtlVariablesInit:
6827         adrp    x0, :got:g_req_cache
6828         mov     w1, -1
6829         stp     x29, x30, [sp, -32]!
6830         add     x29, sp, 0
6831         ldr     x0, [x0, #:got_lo12:g_req_cache]
6832         str     x19, [sp,16]
6833         adrp    x19, :got:c_ftl_nand_blk_pre_plane
6834         str     xzr, [x0]
6835         adrp    x0, :got:g_tmp_data_superblock_id
6836         ldr     x0, [x0, #:got_lo12:g_tmp_data_superblock_id]
6837         strh    w1, [x0]
6838         adrp    x0, :got:g_totle_swl_count
6839         mov     w1, -1
6840         ldr     x0, [x0, #:got_lo12:g_totle_swl_count]
6841         str     wzr, [x0]
6842         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
6843         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
6844         str     wzr, [x0]
6845         adrp    x0, :got:g_recovery_page_min_ver
6846         ldr     x0, [x0, #:got_lo12:g_recovery_page_min_ver]
6847         str     w1, [x0]
6848         adrp    x0, :got:g_inkDie_check_enable
6849         adrp    x1, :got:c_ftl_nand_max_vendor_blks
6850         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
6851         str     wzr, [x0]
6852         adrp    x0, :got:g_totle_vendor_block
6853         ldr     x0, [x0, #:got_lo12:g_totle_vendor_block]
6854         strh    wzr, [x0]
6855         adrp    x0, :got:p_vendor_block_table
6856         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
6857         ldr     x0, [x0, #:got_lo12:p_vendor_block_table]
6858         ldrh    w2, [x1]
6859         mov     w1, 0
6860         ldr     x0, [x0]
6861         lsl     w2, w2, 1
6862         bl      ftl_memset
6863         ldr     x19, [x19, #:got_lo12:c_ftl_nand_blk_pre_plane]
6864         adrp    x0, :got:p_erase_count_table
6865         mov     w1, 0
6866         ldrh    w2, [x19]
6867         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
6868         lsl     w2, w2, 1
6869         ldr     x0, [x0]
6870         bl      ftl_memset
6871         adrp    x0, :got:p_swl_mul_table
6872         ldrh    w2, [x19]
6873         mov     w1, 0
6874         lsl     w2, w2, 1
6875         ldr     x0, [x0, #:got_lo12:p_swl_mul_table]
6876         ldr     x0, [x0]
6877         bl      ftl_memset
6878         adrp    x0, :got:g_sys_save_data
6879         mov     w1, 0
6880         mov     w2, 48
6881         ldr     x0, [x0, #:got_lo12:g_sys_save_data]
6882         bl      ftl_memset
6883         adrp    x0, :got:g_sys_ext_data
6884         mov     w1, 0
6885         mov     w2, 512
6886         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
6887         bl      ftl_memset
6888         bl      FtlGcBufInit
6889         bl      FtlL2PDataInit
6890         ldr     x19, [sp,16]
6891         mov     w0, 0
6892         ldp     x29, x30, [sp], 32
6893         ret
6894         .size   FtlVariablesInit, .-FtlVariablesInit
6895         .align  2
6896         .global SupperBlkListInit
6897         .type   SupperBlkListInit, %function
6898 SupperBlkListInit:
6899         stp     x29, x30, [sp, -112]!
6900         adrp    x0, :got:c_ftl_nand_blk_pre_plane
6901         mov     w2, 6
6902         add     x29, sp, 0
6903         stp     x23, x24, [sp,48]
6904         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
6905         adrp    x23, :got:p_data_block_list_table
6906         stp     x19, x20, [sp,16]
6907         stp     x21, x22, [sp,32]
6908         stp     x25, x26, [sp,64]
6909         stp     x27, x28, [sp,80]
6910         ldr     x1, [x23, #:got_lo12:p_data_block_list_table]
6911         adrp    x21, :got:g_num_data_superblocks
6912         ldrh    w3, [x0]
6913         adrp    x20, :got:g_num_free_superblocks
6914         mov     w24, 0
6915         adrp    x25, :got:c_ftl_nand_planes_num
6916         ldr     x0, [x1]
6917         mov     w1, 0
6918         mul     w2, w3, w2
6919         mov     w22, w24
6920         mov     w19, w24
6921         adrp    x26, :got:p_plane_order_table
6922         adrp    x27, :got:c_ftl_nand_page_pre_blk
6923         bl      ftl_memset
6924         mov     w28, 32768
6925         adrp    x0, :got:p_free_data_block_list_head
6926         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
6927         str     xzr, [x0]
6928         adrp    x0, :got:p_data_block_list_head
6929         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
6930         str     xzr, [x0]
6931         adrp    x0, :got:p_data_block_list_tail
6932         ldr     x0, [x0, #:got_lo12:p_data_block_list_tail]
6933         str     xzr, [x0]
6934         ldr     x0, [x21, #:got_lo12:g_num_data_superblocks]
6935         strh    wzr, [x0]
6936         ldr     x0, [x20, #:got_lo12:g_num_free_superblocks]
6937         strh    wzr, [x0]
6938 .L853:
6939         adrp    x0, :got:c_ftl_nand_data_blks_per_plane
6940         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_blks_per_plane]
6941         ldrh    w0, [x0]
6942         cmp     w0, w19
6943         bls     .L864
6944         mov     w2, 0
6945         mov     w4, w2
6946 .L859:
6947         ldr     x0, [x25, #:got_lo12:c_ftl_nand_planes_num]
6948         ldrh    w0, [x0]
6949         cmp     w0, w4
6950         bls     .L865
6951         ldr     x0, [x26, #:got_lo12:p_plane_order_table]
6952         mov     w1, w19
6953         str     x2, [x29,96]
6954         str     x4, [x29,104]
6955         ldrb    w0, [x0,w4,sxtw]
6956         bl      V2P_block
6957         bl      FtlBbmIsBadBlock
6958         ldr     x4, [x29,104]
6959         ldr     x2, [x29,96]
6960         cbnz    w0, .L854
6961         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_blk]
6962         ldrh    w0, [x0]
6963         add     w2, w2, w0
6964         uxth    w2, w2
6965 .L854:
6966         add     w4, w4, 1
6967         uxth    w4, w4
6968         b       .L859
6969 .L865:
6970         cbz     w2, .L856
6971         sdiv    w2, w28, w2
6972 .L856:
6973         ldr     x1, [x23, #:got_lo12:p_data_block_list_table]
6974         mov     w0, 6
6975         umull   x0, w19, w0
6976         ldr     x1, [x1]
6977         add     x0, x1, x0
6978         strh    w2, [x0,4]
6979         adrp    x0, :got:g_active_superblock
6980         ldr     x0, [x0, #:got_lo12:g_active_superblock]
6981         ldrh    w0, [x0]
6982         cmp     w0, w19
6983         beq     .L857
6984         adrp    x0, :got:g_buffer_superblock
6985         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
6986         ldrh    w0, [x0]
6987         cmp     w0, w19
6988         beq     .L857
6989         adrp    x0, :got:g_gc_temp_superblock
6990         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
6991         ldrh    w0, [x0]
6992         cmp     w0, w19
6993         beq     .L857
6994         adrp    x1, :got:p_valid_page_count_table
6995         ubfiz   x0, x19, 1, 16
6996         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
6997         ldr     x1, [x1]
6998         ldrh    w0, [x1,x0]
6999         cbnz    w0, .L858
7000         add     w3, w24, 1
7001         mov     w0, w19
7002         uxth    w24, w3
7003         bl      INSERT_FREE_LIST
7004         b       .L857
7005 .L858:
7006         add     w22, w22, 1
7007         mov     w0, w19
7008         uxth    w22, w22
7009         bl      INSERT_DATA_LIST
7010 .L857:
7011         add     w19, w19, 1
7012         uxth    w19, w19
7013         b       .L853
7014 .L864:
7015         ldr     x21, [x21, #:got_lo12:g_num_data_superblocks]
7016         mov     w0, 0
7017         strh    w22, [x21]
7018         ldr     x20, [x20, #:got_lo12:g_num_free_superblocks]
7019         strh    w24, [x20]
7020         ldp     x19, x20, [sp,16]
7021         ldp     x21, x22, [sp,32]
7022         ldp     x23, x24, [sp,48]
7023         ldp     x25, x26, [sp,64]
7024         ldp     x27, x28, [sp,80]
7025         ldp     x29, x30, [sp], 112
7026         ret
7027         .size   SupperBlkListInit, .-SupperBlkListInit
7028         .align  2
7029         .global FtlGcPageVarInit
7030         .type   FtlGcPageVarInit, %function
7031 FtlGcPageVarInit:
7032         adrp    x0, :got:g_gc_blk_num
7033         mov     w1, 255
7034         stp     x29, x30, [sp, -32]!
7035         add     x29, sp, 0
7036         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
7037         str     x19, [sp,16]
7038         adrp    x19, :got:c_ftl_nand_page_pre_super_blk
7039         strh    wzr, [x0]
7040         adrp    x0, :got:g_gc_page_offset
7041         ldr     x0, [x0, #:got_lo12:g_gc_page_offset]
7042         strh    wzr, [x0]
7043         adrp    x0, :got:p_gc_blk_tbl
7044         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_super_blk]
7045         ldr     x0, [x0, #:got_lo12:p_gc_blk_tbl]
7046         ldrh    w2, [x19]
7047         ldr     x0, [x0]
7048         lsl     w2, w2, 1
7049         bl      ftl_memset
7050         adrp    x0, :got:p_gc_page_info
7051         ldrh    w3, [x19]
7052         mov     w2, 12
7053         mov     w1, 255
7054         ldr     x0, [x0, #:got_lo12:p_gc_page_info]
7055         mul     w2, w3, w2
7056         ldr     x0, [x0]
7057         bl      ftl_memset
7058         bl      FtlGcBufInit
7059         ldr     x19, [sp,16]
7060         ldp     x29, x30, [sp], 32
7061         ret
7062         .size   FtlGcPageVarInit, .-FtlGcPageVarInit
7063         .align  2
7064         .global ftl_memcpy
7065         .type   ftl_memcpy, %function
7066 ftl_memcpy:
7067         stp     x29, x30, [sp, -16]!
7068         uxtw    x2, w2
7069         add     x29, sp, 0
7070         bl      memcpy
7071         ldp     x29, x30, [sp], 16
7072         ret
7073         .size   ftl_memcpy, .-ftl_memcpy
7074         .align  2
7075         .global FlashGetReadRetryDefault
7076         .type   FlashGetReadRetryDefault, %function
7077 FlashGetReadRetryDefault:
7078         stp     x29, x30, [sp, -16]!
7079         mov     w1, w0
7080         add     x29, sp, 0
7081         cbz     w0, .L868
7082         sub     w2, w0, #1
7083         cmp     w2, 5
7084         bhi     .L870
7085         bl      HynixGetReadRetryDefault
7086         b       .L868
7087 .L870:
7088         cmp     w0, 49
7089         bne     .L871
7090         adrp    x0, :got:gReadRetryInfo
7091         mov     w2, 64
7092         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7093         add     x0, x0, 4
7094         strb    w1, [x0,-4]
7095         mov     w1, 4
7096         strb    w1, [x0,-3]
7097         mov     w1, 15
7098         strb    w1, [x0,-2]
7099         adrp    x1, :got:SamsungRefValue
7100         ldr     x1, [x1, #:got_lo12:SamsungRefValue]
7101         b       .L886
7102 .L871:
7103         sub     w0, w0, #65
7104         cmp     w0, 1
7105         bls     .L877
7106         cmp     w1, 33
7107         bne     .L872
7108 .L877:
7109         adrp    x0, :got:gReadRetryInfo
7110         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7111         strb    w1, [x0]
7112         mov     w1, 4
7113         b       .L887
7114 .L872:
7115         cmp     w1, 67
7116         beq     .L878
7117         cmp     w1, 34
7118         bne     .L874
7119 .L878:
7120         adrp    x0, :got:gReadRetryInfo
7121         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7122         strb    w1, [x0]
7123         mov     w1, 5
7124 .L887:
7125         strb    w1, [x0,1]
7126         mov     w1, 7
7127         strb    w1, [x0,2]
7128         adrp    x1, :got:ToshibaA19RefValue
7129         add     x0, x0, 4
7130         mov     w2, 45
7131         ldr     x1, [x1, #:got_lo12:ToshibaA19RefValue]
7132         b       .L886
7133 .L874:
7134         cmp     w1, 68
7135         beq     .L879
7136         cmp     w1, 35
7137         bne     .L868
7138 .L879:
7139         adrp    x0, :got:gReadRetryInfo
7140         mov     w2, 95
7141         ldr     x0, [x0, #:got_lo12:gReadRetryInfo]
7142         add     x0, x0, 4
7143         strb    w1, [x0,-4]
7144         mov     w1, 5
7145         strb    w1, [x0,-3]
7146         mov     w1, 17
7147         strb    w1, [x0,-2]
7148         adrp    x1, :got:Toshiba15RefValue
7149         ldr     x1, [x1, #:got_lo12:Toshiba15RefValue]
7150 .L886:
7151         bl      ftl_memcpy
7152 .L868:
7153         ldp     x29, x30, [sp], 16
7154         ret
7155         .size   FlashGetReadRetryDefault, .-FlashGetReadRetryDefault
7156         .align  2
7157         .global FlashReadIdbData
7158         .type   FlashReadIdbData, %function
7159 FlashReadIdbData:
7160         adrp    x1, :got:gNandIDataBuf
7161         mov     w2, 2048
7162         stp     x29, x30, [sp, -16]!
7163         add     x29, sp, 0
7164         ldr     x1, [x1, #:got_lo12:gNandIDataBuf]
7165         bl      ftl_memcpy
7166         mov     w0, 0
7167         ldp     x29, x30, [sp], 16
7168         ret
7169         .size   FlashReadIdbData, .-FlashReadIdbData
7170         .align  2
7171         .global FlashLoadPhyInfoInRam
7172         .type   FlashLoadPhyInfoInRam, %function
7173 FlashLoadPhyInfoInRam:
7174         stp     x29, x30, [sp, -64]!
7175         add     x29, sp, 0
7176         stp     x19, x20, [sp,16]
7177         adrp    x19, :got:NandFlashParaTbl
7178         str     x23, [sp,48]
7179         stp     x21, x22, [sp,32]
7180         mov     w20, 0
7181         adrp    x23, :got:IDByte
7182         ldr     x22, [x19, #:got_lo12:NandFlashParaTbl]
7183 .L893:
7184         ldr     x1, [x23, #:got_lo12:IDByte]
7185         add     x0, x22, 1
7186         ldrb    w2, [x22]
7187         bl      FlashMemCmp8
7188         mov     w21, w0
7189         cbnz    w0, .L890
7190         ldr     x19, [x19, #:got_lo12:NandFlashParaTbl]
7191         ubfiz   x20, x20, 5, 32
7192         adds    x19, x20, x19
7193         beq     .L896
7194         ldrb    w3, [x19,22]
7195         mov     x2, 0
7196         adrp    x4, .LANCHOR2
7197         b       .L895
7198 .L890:
7199         add     w20, w20, 1
7200         add     x22, x22, 32
7201         cmp     w20, 66
7202         bne     .L893
7203         b       .L896
7204 .L895:
7205         lsl     x0, x2, 5
7206         add     x5, x4, :lo12:.LANCHOR2
7207         mov     w1, w2
7208         ldrb    w0, [x0,x5]
7209         cmp     w0, w3
7210         beq     .L894
7211         add     x2, x2, 1
7212         cmp     x2, 4
7213         bne     .L895
7214         mov     w1, w2
7215 .L894:
7216         adrp    x0, :got:gNandOptPara
7217         adrp    x2, .LANCHOR2
7218         add     x2, x2, :lo12:.LANCHOR2
7219         ubfiz   x1, x1, 5, 32
7220         add     x1, x2, x1
7221         mov     w2, 32
7222         ldr     x0, [x0, #:got_lo12:gNandOptPara]
7223         bl      ftl_memcpy
7224         adrp    x0, :got:gNandParaInfo
7225         mov     x1, x19
7226         mov     w2, 32
7227         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
7228         bl      ftl_memcpy
7229         b       .L891
7230 .L896:
7231         mov     w21, -1
7232 .L891:
7233         mov     w0, w21
7234         ldr     x23, [sp,48]
7235         ldp     x19, x20, [sp,16]
7236         ldp     x21, x22, [sp,32]
7237         ldp     x29, x30, [sp], 64
7238         ret
7239         .size   FlashLoadPhyInfoInRam, .-FlashLoadPhyInfoInRam
7240         .align  2
7241         .global NandcCopy1KB
7242         .type   NandcCopy1KB, %function
7243 NandcCopy1KB:
7244         stp     x29, x30, [sp, -48]!
7245         uxtb    w1, w1
7246         add     x29, sp, 0
7247         stp     x19, x20, [sp,16]
7248         str     x21, [sp,32]
7249         uxtb    w19, w2
7250         cmp     w1, 1
7251         mov     x20, x4
7252         ubfiz   x2, x19, 9, 8
7253         add     x4, x0, 4096
7254         add     x21, x0, 512
7255         add     x2, x4, x2
7256         bne     .L901
7257         cbz     x3, .L902
7258         mov     x0, x2
7259         mov     x1, x3
7260         mov     w2, 1024
7261         bl      ftl_memcpy
7262 .L902:
7263         cbz     x20, .L900
7264         mov     w0, 48
7265         lsr     w19, w19, 1
7266         ldrb    w1, [x20,1]
7267         mul     w19, w19, w0
7268         ldrb    w0, [x20,2]
7269         asr     w19, w19, 2
7270         lsl     w0, w0, 16
7271         orr     w0, w0, w1, lsl 8
7272         ldrb    w1, [x20]
7273         orr     w0, w0, w1
7274         ldrb    w1, [x20,3]
7275         orr     w0, w0, w1, lsl 24
7276         str     w0, [x21,w19,sxtw 2]
7277         b       .L900
7278 .L901:
7279         cbz     x3, .L905
7280         mov     x1, x2
7281         mov     x0, x3
7282         mov     w2, 1024
7283         bl      ftl_memcpy
7284 .L905:
7285         cbz     x20, .L900
7286         mov     w0, 48
7287         lsr     w19, w19, 1
7288         mul     w19, w19, w0
7289         asr     w19, w19, 2
7290         ldr     w0, [x21,w19,sxtw 2]
7291         strb    w0, [x20]
7292         lsr     w1, w0, 8
7293         strb    w1, [x20,1]
7294         lsr     w1, w0, 16
7295         lsr     w0, w0, 24
7296         strb    w1, [x20,2]
7297         strb    w0, [x20,3]
7298 .L900:
7299         ldp     x19, x20, [sp,16]
7300         ldr     x21, [sp,32]
7301         ldp     x29, x30, [sp], 48
7302         ret
7303         .size   NandcCopy1KB, .-NandcCopy1KB
7304         .align  2
7305         .global ftl_memcmp
7306         .type   ftl_memcmp, %function
7307 ftl_memcmp:
7308         stp     x29, x30, [sp, -16]!
7309         uxtw    x2, w2
7310         add     x29, sp, 0
7311         bl      memcmp
7312         ldp     x29, x30, [sp], 16
7313         ret
7314         .size   ftl_memcmp, .-ftl_memcmp
7315         .align  2
7316         .global FlashSramLoadStore
7317         .type   FlashSramLoadStore, %function
7318 FlashSramLoadStore:
7319         adrp    x4, :got:RK29_NANDC_REG_BASE
7320         mov     x6, x0
7321         stp     x29, x30, [sp, -16]!
7322         uxtw    x1, w1
7323         add     x29, sp, 0
7324         ldr     x4, [x4, #:got_lo12:RK29_NANDC_REG_BASE]
7325         ldr     x4, [x4]
7326         add     x4, x4, 4096
7327         cbnz    w2, .L918
7328         add     x1, x4, x1
7329         b       .L920
7330 .L918:
7331         add     x0, x4, x1
7332         mov     x1, x6
7333 .L920:
7334         mov     w2, w3
7335         bl      ftl_memcpy
7336         ldp     x29, x30, [sp], 16
7337         ret
7338         .size   FlashSramLoadStore, .-FlashSramLoadStore
7339         .align  2
7340         .global FlashCs123Init
7341         .type   FlashCs123Init, %function
7342 FlashCs123Init:
7343         ret
7344         .size   FlashCs123Init, .-FlashCs123Init
7345         .align  2
7346         .global rk_nand_de_init
7347         .type   rk_nand_de_init, %function
7348 rk_nand_de_init:
7349         stp     x29, x30, [sp, -16]!
7350         add     x29, sp, 0
7351         bl      FlashDeInit
7352         ldp     x29, x30, [sp], 16
7353         ret
7354         .size   rk_nand_de_init, .-rk_nand_de_init
7355         .align  2
7356         .global rk_nand_suspend
7357         .type   rk_nand_suspend, %function
7358 rk_nand_suspend:
7359         stp     x29, x30, [sp, -16]!
7360         add     x29, sp, 0
7361         bl      FlashSuspend
7362         ldp     x29, x30, [sp], 16
7363         ret
7364         .size   rk_nand_suspend, .-rk_nand_suspend
7365         .align  2
7366         .global rk_nand_resume
7367         .type   rk_nand_resume, %function
7368 rk_nand_resume:
7369         stp     x29, x30, [sp, -16]!
7370         add     x29, sp, 0
7371         bl      FlashResume
7372         ldp     x29, x30, [sp], 16
7373         ret
7374         .size   rk_nand_resume, .-rk_nand_resume
7375         .align  2
7376         .global rk_ftl_get_capacity
7377         .type   rk_ftl_get_capacity, %function
7378 rk_ftl_get_capacity:
7379         stp     x29, x30, [sp, -16]!
7380         mov     w0, -1
7381         add     x29, sp, 0
7382         bl      FtlGetCapacity
7383         ldp     x29, x30, [sp], 16
7384         ret
7385         .size   rk_ftl_get_capacity, .-rk_ftl_get_capacity
7386         .align  2
7387         .global rknand_print_hex
7388         .type   rknand_print_hex, %function
7389 rknand_print_hex:
7390         stp     x29, x30, [sp, -96]!
7391         add     x29, sp, 0
7392         stp     x19, x20, [sp,16]
7393         stp     x21, x22, [sp,32]
7394         stp     x23, x24, [sp,48]
7395         mov     x19, 0
7396         adrp    x23, .LC79
7397         adrp    x21, .LC80
7398         adrp    x24, .LC72
7399         stp     x25, x26, [sp,64]
7400         str     x27, [sp,80]
7401         mov     x22, x1
7402         mov     x27, x0
7403         mov     w25, w2
7404         uxtw    x26, w3
7405         mov     w20, w19
7406         add     x23, x23, :lo12:.LC79
7407         add     x21, x21, :lo12:.LC80
7408         add     x24, x24, :lo12:.LC72
7409 .L927:
7410         cmp     x19, x26
7411         beq     .L935
7412         cbnz    w20, .L928
7413         mov     x0, x23
7414         mov     x1, x27
7415         mov     w2, w19
7416         bl      printk
7417 .L928:
7418         cmp     w25, 4
7419         mov     x0, x21
7420         bne     .L929
7421         ldr     w1, [x22,x19,lsl 2]
7422         b       .L934
7423 .L929:
7424         cmp     w25, 2
7425         bne     .L931
7426         ldrsh   w1, [x22,x19,lsl 1]
7427         b       .L934
7428 .L931:
7429         ldrb    w1, [x22,x19]
7430 .L934:
7431         bl      printk
7432         add     w20, w20, 1
7433         cmp     w20, 15
7434         bls     .L932
7435         adrp    x1, .LC81
7436         mov     x0, x24
7437         add     x1, x1, :lo12:.LC81
7438         mov     w20, 0
7439         bl      printk
7440 .L932:
7441         add     x19, x19, 1
7442         b       .L927
7443 .L935:
7444         adrp    x0, .LC72
7445         adrp    x1, .LC81
7446         add     x1, x1, :lo12:.LC81
7447         add     x0, x0, :lo12:.LC72
7448         bl      printk
7449         ldr     x27, [sp,80]
7450         ldp     x19, x20, [sp,16]
7451         ldp     x21, x22, [sp,32]
7452         ldp     x23, x24, [sp,48]
7453         ldp     x25, x26, [sp,64]
7454         ldp     x29, x30, [sp], 96
7455         ret
7456         .size   rknand_print_hex, .-rknand_print_hex
7457         .align  2
7458         .global NandcXferComp
7459         .type   NandcXferComp, %function
7460 NandcXferComp:
7461         stp     x29, x30, [sp, -80]!
7462         adrp    x1, :got:gNandChipMap
7463         ubfiz   x0, x0, 4, 8
7464         add     x29, sp, 0
7465         stp     x21, x22, [sp,32]
7466         ldr     x1, [x1, #:got_lo12:gNandChipMap]
7467         adrp    x21, :got:gNandcVer
7468         stp     x19, x20, [sp,16]
7469         str     x23, [sp,48]
7470         ldr     x19, [x1,x0]
7471         ldr     x0, [x21, #:got_lo12:gNandcVer]
7472         ldr     w0, [x0]
7473         cmp     w0, 3
7474         bls     .L967
7475         ldr     w0, [x19,16]
7476         tbz     x0, 2, .L967
7477         mov     x0, x19
7478         bl      wait_for_nandc_xfer_completed
7479         ldr     w20, [x19,16]
7480         ldr     w0, [x19,8]
7481         ubfx    x20, x20, 1, 1
7482         str     w0, [x29,64]
7483         cbz     w20, .L938
7484         adrp    x22, .LC82
7485         adrp    x23, .LC83
7486         mov     w20, 0
7487         add     x22, x22, :lo12:.LC82
7488         add     x23, x23, :lo12:.LC83
7489 .L939:
7490         ldr     w2, [x19,28]
7491         ldr     w1, [x29,64]
7492         ubfx    x2, x2, 16, 5
7493         ubfx    x1, x1, 22, 6
7494         cmp     w2, w1
7495         bge     .L947
7496         ldr     x0, [x21, #:got_lo12:gNandcVer]
7497         ldr     w0, [x0]
7498         cmp     w0, 5
7499         bhi     .L940
7500 .L943:
7501         add     w20, w20, 1
7502         and     w0, w20, 16777215
7503         cbnz    w0, .L939
7504         ldr     w2, [x19,28]
7505         mov     w1, w20
7506         ldr     w3, [x29,64]
7507         mov     x0, x22
7508         ubfx    x2, x2, 16, 5
7509         ubfx    x3, x3, 22, 6
7510         bl      printk
7511         mov     x0, x23
7512         mov     x1, x19
7513         mov     w2, 4
7514         mov     w3, 512
7515         bl      rknand_print_hex
7516         b       .L939
7517 .L940:
7518         ldr     w0, [x19]
7519         str     w0, [x29,72]
7520         ldr     w0, [x29,72]
7521         tbz     x0, 13, .L943
7522         ldr     w0, [x29,72]
7523         tbz     x0, 17, .L943
7524 .L947:
7525         adrp    x19, :got:gMasterInfo
7526         ldr     x19, [x19, #:got_lo12:gMasterInfo]
7527         ldr     w0, [x19,40]
7528         cbz     w0, .L948
7529         ldr     w1, [x29,64]
7530         mov     w2, 0
7531         ldr     w0, [x19,32]
7532         ubfx    x1, x1, 22, 5
7533         lsl     w1, w1, 10
7534         bl      rknand_dma_unmap_single
7535         ldr     w1, [x29,64]
7536         mov     w2, 0
7537         ldr     w0, [x19,36]
7538         ubfx    x1, x1, 22, 5
7539         lsl     w1, w1, 7
7540         bl      rknand_dma_unmap_single
7541         b       .L948
7542 .L938:
7543         adrp    x21, .LC84
7544         adrp    x22, .LC83
7545         add     x21, x21, :lo12:.LC84
7546         add     x22, x22, :lo12:.LC83
7547 .L949:
7548         ldr     w0, [x29,64]
7549         tbnz    x0, 20, .L975
7550         ldr     w0, [x19,8]
7551         add     w20, w20, 1
7552         str     w0, [x29,64]
7553         and     w0, w20, 16777215
7554         cbnz    w0, .L949
7555         ldr     w2, [x29,64]
7556         mov     w1, w20
7557         ldr     w3, [x19,28]
7558         mov     x0, x21
7559         ubfx    x3, x3, 16, 5
7560         bl      printk
7561         mov     x0, x22
7562         mov     x1, x19
7563         mov     w2, 4
7564         mov     w3, 512
7565         bl      rknand_print_hex
7566         b       .L949
7567 .L975:
7568         adrp    x0, :got:gNandcDumpWriteEn
7569         mov     x20, x0
7570         ldr     x1, [x0, #:got_lo12:gNandcDumpWriteEn]
7571         ldr     w1, [x1]
7572         cbz     w1, .L952
7573         mov     x0, x19
7574         bl      NandcSendDumpDataStart
7575 .L952:
7576         adrp    x21, :got:gMasterInfo
7577         ldr     x21, [x21, #:got_lo12:gMasterInfo]
7578         ldr     w0, [x21,40]
7579         cbz     w0, .L953
7580         ldr     w1, [x29,64]
7581         mov     w2, 1
7582         ldr     w0, [x21,32]
7583         ubfx    x1, x1, 22, 5
7584         lsl     w1, w1, 10
7585         bl      rknand_dma_unmap_single
7586         ldr     w1, [x29,64]
7587         mov     w2, 1
7588         ldr     w0, [x21,36]
7589         ubfx    x1, x1, 22, 5
7590         lsl     w1, w1, 7
7591         bl      rknand_dma_unmap_single
7592 .L953:
7593         ldr     x0, [x20, #:got_lo12:gNandcDumpWriteEn]
7594         ldr     w0, [x0]
7595         cbz     w0, .L948
7596         mov     x0, x19
7597         bl      NandcSendDumpDataDone
7598 .L948:
7599         adrp    x0, :got:gMasterInfo
7600         ldr     x0, [x0, #:got_lo12:gMasterInfo]
7601         str     wzr, [x0,40]
7602         b       .L936
7603 .L967:
7604         ldr     w0, [x19,8]
7605         str     w0, [x29,64]
7606         ldr     w0, [x29,64]
7607         tbz     x0, 20, .L967
7608 .L936:
7609         ldp     x19, x20, [sp,16]
7610         ldp     x21, x22, [sp,32]
7611         ldr     x23, [sp,48]
7612         ldp     x29, x30, [sp], 80
7613         ret
7614         .size   NandcXferComp, .-NandcXferComp
7615         .align  2
7616         .global NandcXferData
7617         .type   NandcXferData, %function
7618 NandcXferData:
7619         stp     x29, x30, [sp, -176]!
7620         add     x29, sp, 0
7621         stp     x23, x24, [sp,48]
7622         uxtb    w24, w0
7623         adrp    x0, :got:gNandChipMap
7624         stp     x19, x20, [sp,16]
7625         uxtb    w20, w1
7626         sbfiz   x1, x24, 4, 32
7627         ldr     x0, [x0, #:got_lo12:gNandChipMap]
7628         uxtb    w23, w2
7629         stp     x21, x22, [sp,32]
7630         stp     x25, x26, [sp,64]
7631         stp     x27, x28, [sp,80]
7632         mov     x25, x3
7633         mov     x21, x4
7634         ldr     x19, [x0,x1]
7635         and     x0, x3, 63
7636         cbnz    x0, .L977
7637         cbnz    x4, .L978
7638         add     x21, x29, 112
7639         mov     w1, 255
7640         mov     x0, x21
7641         mov     w2, 64
7642         bl      ftl_memset
7643 .L978:
7644         mov     w0, w24
7645         mov     w1, w20
7646         mov     w2, w23
7647         mov     w3, 0
7648         mov     x4, x25
7649         mov     x5, x21
7650         mov     w22, 0
7651         bl      NandcXferStart
7652         mov     w0, w24
7653         bl      NandcXferComp
7654         cbnz    w20, .L979
7655         adrp    x0, :got:gNandcEccBits
7656         ubfx    x2, x23, 1, 7
7657         mov     w3, 128
7658         adrp    x5, :got:gMasterInfo
7659         add     x2, x21, x2, lsl 2
7660         ldr     x1, [x0, #:got_lo12:gNandcEccBits]
7661         ldr     w1, [x1]
7662         cmp     w1, 25
7663         mov     w1, 64
7664         csel    w3, w1, w3, cc
7665         mov     w1, w20
7666 .L981:
7667         cmp     x21, x2
7668         add     w4, w1, w3
7669         beq     .L1023
7670         ldr     x6, [x5, #:got_lo12:gMasterInfo]
7671         and     x1, x1, 4294967292
7672         add     x21, x21, 4
7673         ldr     x6, [x6,8]
7674         ldr     w1, [x6,x1]
7675         strb    w1, [x21,-4]
7676         lsr     w6, w1, 8
7677         strb    w6, [x21,-3]
7678         lsr     w6, w1, 16
7679         strb    w6, [x21,-2]
7680         lsr     w1, w1, 24
7681         strb    w1, [x21,-1]
7682         mov     w1, w4
7683         b       .L981
7684 .L1023:
7685         ldr     x0, [x0, #:got_lo12:gNandcEccBits]
7686         lsr     w23, w23, 2
7687         ldr     w5, [x0]
7688         adrp    x0, :got:gNandcVer
7689         ldr     x0, [x0, #:got_lo12:gNandcVer]
7690         ldr     w4, [x0]
7691         mov     w0, 0
7692         mov     w22, w0
7693 .L983:
7694         cmp     w0, w23
7695         bcs     .L979
7696         cbz     w5, .L979
7697         uxtw    x1, w0
7698         add     x1, x1, 8
7699         ldr     w1, [x19,x1,lsl 2]
7700         str     w1, [x29,104]
7701         ldr     w1, [x29,104]
7702         tbnz    x1, 2, .L1007
7703         ldr     w3, [x29,104]
7704         ubfx    x3, x3, 15, 1
7705         cbnz    w3, .L1007
7706         cmp     w4, 5
7707         bls     .L985
7708         ldr     w2, [x29,104]
7709         ubfx    x6, x2, 3, 5
7710         ldr     w2, [x29,104]
7711         ldr     w1, [x29,104]
7712         ubfx    x2, x2, 27, 1
7713         ubfx    x3, x1, 16, 5
7714         ldr     w1, [x29,104]
7715         orr     w2, w6, w2, lsl 5
7716         ubfx    x1, x1, 29, 1
7717         orr     w1, w3, w1, lsl 5
7718         ldr     w3, [x29,104]
7719         cmp     w2, w1
7720         bls     .L986
7721         ldr     w1, [x29,104]
7722         ubfx    x3, x3, 3, 5
7723         ubfx    x1, x1, 27, 1
7724         orr     w3, w3, w1, lsl 5
7725         b       .L987
7726 .L986:
7727         ubfx    x1, x3, 16, 5
7728         ldr     w3, [x29,104]
7729         ubfx    x3, x3, 29, 1
7730         b       .L1022
7731 .L985:
7732         cmp     w4, 3
7733         bls     .L987
7734         ldr     w2, [x29,104]
7735         ubfx    x6, x2, 3, 5
7736         ldr     w2, [x29,104]
7737         ldr     w1, [x29,104]
7738         ubfx    x2, x2, 28, 1
7739         ubfx    x3, x1, 16, 5
7740         ldr     w1, [x29,104]
7741         orr     w2, w6, w2, lsl 5
7742         ubfx    x1, x1, 30, 1
7743         orr     w1, w3, w1, lsl 5
7744         ldr     w3, [x29,104]
7745         cmp     w2, w1
7746         bls     .L988
7747         ubfx    x1, x3, 3, 5
7748         ldr     w3, [x29,104]
7749         ubfx    x3, x3, 28, 1
7750         b       .L1022
7751 .L988:
7752         ubfx    x1, x3, 16, 5
7753         ldr     w3, [x29,104]
7754         ubfx    x3, x3, 30, 1
7755 .L1022:
7756         orr     w3, w1, w3, lsl 5
7757 .L987:
7758         cmp     w22, w3
7759         csel    w22, w22, w3, cs
7760         b       .L984
7761 .L1007:
7762         mov     w22, -1
7763 .L984:
7764         add     w0, w0, 1
7765         b       .L983
7766 .L979:
7767         str     wzr, [x19,16]
7768         b       .L990
7769 .L977:
7770         cmp     w20, 1
7771         bne     .L1021
7772         mov     w22, 0
7773         mov     w27, 2
7774 .L991:
7775         cmp     w22, w23
7776         bcs     .L1024
7777         and     w26, w22, 3
7778         mov     x3, x25
7779         cbz     x25, .L993
7780         ubfiz   x0, x22, 9, 23
7781         add     x3, x25, x0
7782 .L993:
7783         cmp     x21, xzr
7784         mov     x0, x19
7785         csel    w4, w27, wzr, ne
7786         mov     w1, 1
7787         mov     w2, w26
7788         mul     w4, w4, w22
7789         add     w22, w22, 2
7790         add     x4, x21, x4
7791         bl      NandcCopy1KB
7792         mov     x4, 0
7793         mov     w0, w24
7794         mov     w1, 1
7795         mov     w2, 2
7796         mov     w3, w26
7797         mov     x5, x4
7798         bl      NandcXferStart
7799         mov     w0, w24
7800         bl      NandcXferComp
7801         b       .L991
7802 .L1024:
7803         mov     w22, 0
7804         b       .L990
7805 .L1021:
7806         mov     w1, 0
7807         mov     x4, 0
7808         mov     w26, 0
7809         mov     w0, w24
7810         mov     w2, 2
7811         mov     w3, w1
7812         mov     x5, x4
7813         mov     w22, w26
7814         mov     w27, 2
7815         bl      NandcXferStart
7816 .L996:
7817         cmp     w26, w23
7818         bcs     .L990
7819         mov     w0, w24
7820         add     w28, w26, 2
7821         bl      NandcXferComp
7822         ldr     w0, [x19,32]
7823         cmp     w28, w23
7824         str     w0, [x29,104]
7825         bcs     .L997
7826         mov     x4, 0
7827         mov     w0, w24
7828         mov     w1, 0
7829         mov     w2, 2
7830         and     w3, w28, 3
7831         mov     x5, x4
7832         bl      NandcXferStart
7833 .L997:
7834         ldr     w0, [x29,104]
7835         tbnz    x0, 2, .L1012
7836         ldr     w0, [x29,104]
7837         ubfx    x1, x0, 3, 5
7838         ldr     w0, [x29,104]
7839         ubfx    x0, x0, 27, 1
7840         orr     w0, w1, w0, lsl 5
7841         cmp     w22, w0
7842         csel    w22, w22, w0, cs
7843         b       .L998
7844 .L1012:
7845         mov     w22, -1
7846 .L998:
7847         and     w2, w26, 3
7848         mov     x3, x25
7849         cbz     x25, .L999
7850         ubfiz   x3, x26, 9, 23
7851         add     x3, x25, x3
7852 .L999:
7853         cmp     x21, xzr
7854         mov     x0, x19
7855         csel    w4, w27, wzr, ne
7856         mov     w1, 0
7857         mul     w4, w4, w26
7858         mov     w26, w28
7859         add     x4, x21, x4
7860         bl      NandcCopy1KB
7861         b       .L996
7862 .L990:
7863         cbnz    w20, .L1002
7864         adrp    x0, :got:gNandcVer
7865         ldr     x0, [x0, #:got_lo12:gNandcVer]
7866         ldr     w0, [x0]
7867         cmp     w0, 5
7868         bls     .L1002
7869         ldr     w0, [x19]
7870         mov     w1, 8192
7871         movk    w1, 0x2, lsl 16
7872         and     w1, w0, w1
7873         cmp     w1, 139264
7874         bne     .L1002
7875         orr     w0, w0, 131072
7876         mov     w22, -1
7877         str     w0, [x19]
7878 .L1002:
7879         mov     w0, w22
7880         ldp     x19, x20, [sp,16]
7881         ldp     x21, x22, [sp,32]
7882         ldp     x23, x24, [sp,48]
7883         ldp     x25, x26, [sp,64]
7884         ldp     x27, x28, [sp,80]
7885         ldp     x29, x30, [sp], 176
7886         ret
7887         .size   NandcXferData, .-NandcXferData
7888         .align  2
7889         .global FlashReadRawPage
7890         .type   FlashReadRawPage, %function
7891 FlashReadRawPage:
7892         stp     x29, x30, [sp, -64]!
7893         mov     x4, x3
7894         add     x29, sp, 0
7895         stp     x19, x20, [sp,16]
7896         uxtb    w19, w0
7897         adrp    x0, :got:gNandParaInfo
7898         str     x21, [sp,32]
7899         mov     x21, x2
7900         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
7901         ldrb    w20, [x0,9]
7902         cbnz    w19, .L1026
7903         adrp    x0, :got:gNandIDBResBlkNum
7904         adrp    x5, :got:gBlockPageAlignSize
7905         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
7906         ldr     x5, [x5, #:got_lo12:gBlockPageAlignSize]
7907         ldrb    w0, [x0]
7908         ldr     w2, [x5]
7909         mul     w0, w0, w2
7910         cmp     w1, w0
7911         mov     w0, 4
7912         csel    w20, w20, w0, cs
7913 .L1026:
7914         mov     w0, w19
7915         str     x4, [x29,48]
7916         str     x1, [x29,56]
7917         bl      NandcWaitFlashReady
7918         mov     w0, w19
7919         bl      NandcFlashCs
7920         ldr     x1, [x29,56]
7921         mov     w0, w19
7922         bl      FlashReadCmd
7923         mov     w0, w19
7924         bl      NandcWaitFlashReady
7925         ldr     x4, [x29,48]
7926         mov     w2, w20
7927         mov     x3, x21
7928         mov     w1, 0
7929         mov     w0, w19
7930         bl      NandcXferData
7931         mov     w20, w0
7932         mov     w0, w19
7933         bl      NandcFlashDeCs
7934         ldr     x21, [sp,32]
7935         mov     w0, w20
7936         ldp     x19, x20, [sp,16]
7937         ldp     x29, x30, [sp], 64
7938         ret
7939         .size   FlashReadRawPage, .-FlashReadRawPage
7940         .align  2
7941         .global FlashDdrTunningRead
7942         .type   FlashDdrTunningRead, %function
7943 FlashDdrTunningRead:
7944         stp     x29, x30, [sp, -112]!
7945         add     x29, sp, 0
7946         stp     x21, x22, [sp,32]
7947         uxtb    w22, w0
7948         adrp    x0, :got:gpNandc
7949         stp     x19, x20, [sp,16]
7950         stp     x23, x24, [sp,48]
7951         ldr     x0, [x0, #:got_lo12:gpNandc]
7952         mov     w19, 6
7953         stp     x25, x26, [sp,64]
7954         stp     x27, x28, [sp,80]
7955         mov     w24, w1
7956         mov     x23, x2
7957         ldr     x0, [x0]
7958         mov     x21, x3
7959         mov     w25, w4
7960         mov     w20, 1024
7961         ldr     w26, [x0,304]
7962         adrp    x0, :got:gNandcVer
7963         ldr     x0, [x0, #:got_lo12:gNandcVer]
7964         ldr     w0, [x0]
7965         cmp     w0, 8
7966         mov     w0, 18
7967         csel    w19, w19, w0, cc
7968         cbz     w4, .L1029
7969         mov     w0, 1
7970         bl      FlashSetInterfaceMode
7971         mov     w0, 1
7972         bl      NandcSetMode
7973         mov     w0, w22
7974         bl      FlashReset
7975         mov     x3, x21
7976         adrp    x21, :got:gFlashInterfaceMode
7977         mov     w1, w24
7978         mov     x2, x23
7979         mov     w0, w22
7980         bl      FlashReadRawPage
7981         ldr     x21, [x21, #:got_lo12:gFlashInterfaceMode]
7982         mov     w20, w0
7983         ldrb    w0, [x21]
7984         bl      FlashSetInterfaceMode
7985         ldrb    w0, [x21]
7986         bl      NandcSetMode
7987         cmn     w20, #1
7988         bne     .L1030
7989 .L1038:
7990         mov     w20, -1
7991         b       .L1031
7992 .L1030:
7993         cmp     w20, 9
7994         bhi     .L1032
7995         adrp    x1, :got:IDByte
7996         sxtw    x0, w22
7997         lsl     x2, x0, 3
7998         ldr     x1, [x1, #:got_lo12:IDByte]
7999         ldrb    w1, [x1,x2]
8000         cmp     w1, 173
8001         bne     .L1032
8002         adrp    x1, :got:gNandChipMap
8003         lsl     x0, x0, 4
8004         ldr     x1, [x1, #:got_lo12:gNandChipMap]
8005         ldr     x0, [x1,x0]
8006         ldr     w1, [x0,3840]
8007         ldr     w1, [x0]
8008         orr     w1, w1, 131072
8009         str     w1, [x0]
8010 .L1032:
8011         adrp    x3, :got:FlashDdrTunningReadCount
8012         ldr     x3, [x3, #:got_lo12:FlashDdrTunningReadCount]
8013         ldr     w0, [x3]
8014         add     w0, w0, 1
8015         cmp     w0, 2047
8016         bhi     .L1033
8017         str     w0, [x3]
8018         b       .L1031
8019 .L1033:
8020         mov     x21, 0
8021         str     wzr, [x3]
8022         mov     x23, x21
8023 .L1029:
8024         mov     w28, 0
8025         mov     w5, w20
8026         mov     w4, w28
8027         mov     w27, -1
8028 .L1036:
8029         mov     w0, w19
8030         str     x5, [x29,96]
8031         str     x4, [x29,104]
8032         bl      NandcSetDdrPara
8033         mov     w0, w22
8034         mov     w1, w24
8035         mov     x2, x23
8036         mov     x3, x21
8037         bl      FlashReadRawPage
8038         mov     w20, w0
8039         ldr     x5, [x29,96]
8040         ldr     x4, [x29,104]
8041         add     w0, w5, 1
8042         cmp     w20, w0
8043         bhi     .L1041
8044         cmp     w20, 2
8045         bhi     .L1042
8046         add     w4, w4, 1
8047         cmp     w4, 4
8048         bls     .L1042
8049         b       .L1043
8050 .L1041:
8051         mov     w20, w5
8052         b       .L1034
8053 .L1042:
8054         mov     x21, 0
8055         mov     w28, w19
8056         mov     w27, 0
8057         mov     x23, x21
8058 .L1034:
8059         add     w19, w19, 2
8060         cmp     w19, 69
8061         bhi     .L1058
8062         mov     w5, w20
8063         b       .L1036
8064 .L1058:
8065         mov     w19, w28
8066         cbz     w28, .L1037
8067         b       .L1035
8068 .L1043:
8069         mov     w27, 0
8070 .L1035:
8071         adrp    x0, .LC85
8072         mov     w1, w19
8073         add     x0, x0, :lo12:.LC85
8074         bl      printk
8075         mov     w0, w19
8076         bl      NandcSetDdrPara
8077 .L1037:
8078         cbz     w27, .L1031
8079         adrp    x0, .LC86
8080         mov     w1, w22
8081         add     x0, x0, :lo12:.LC86
8082         mov     w2, w24
8083         bl      printk
8084         cbz     w25, .L1038
8085         lsr     w0, w26, 8
8086         bl      NandcSetDdrPara
8087 .L1031:
8088         mov     w0, w20
8089         ldp     x19, x20, [sp,16]
8090         ldp     x21, x22, [sp,32]
8091         ldp     x23, x24, [sp,48]
8092         ldp     x25, x26, [sp,64]
8093         ldp     x27, x28, [sp,80]
8094         ldp     x29, x30, [sp], 112
8095         ret
8096         .size   FlashDdrTunningRead, .-FlashDdrTunningRead
8097         .align  2
8098         .global FlashReadPage
8099         .type   FlashReadPage, %function
8100 FlashReadPage:
8101         stp     x29, x30, [sp, -80]!
8102         add     x29, sp, 0
8103         stp     x19, x20, [sp,16]
8104         uxtb    w20, w0
8105         str     x25, [sp,64]
8106         mov     w0, w20
8107         stp     x23, x24, [sp,48]
8108         stp     x21, x22, [sp,32]
8109         mov     x24, x2
8110         mov     w22, w1
8111         mov     x23, x3
8112         bl      FlashReadRawPage
8113         cmn     w0, #1
8114         mov     w19, w0
8115         bne     .L1060
8116         adrp    x21, :got:gNandRandomizer
8117         ldr     x21, [x21, #:got_lo12:gNandRandomizer]
8118         ldrb    w25, [x21]
8119         cbz     w25, .L1060
8120         mov     w0, w20
8121         mov     w1, w22
8122         mov     x2, x24
8123         mov     x3, x23
8124         strb    wzr, [x21]
8125         bl      FlashReadRawPage
8126         strb    w25, [x21]
8127         mov     w19, w0
8128 .L1060:
8129         adrp    x0, :got:gpReadRetrial
8130         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
8131         ldr     x4, [x0]
8132         cbz     x4, .L1061
8133         cmn     w19, #1
8134         bne     .L1062
8135         mov     w1, w22
8136         mov     x2, x24
8137         mov     x3, x23
8138         mov     w0, w20
8139         blr     x4
8140         mov     w19, w0
8141         adrp    x0, .LC87
8142         mov     w1, w19
8143         add     x0, x0, :lo12:.LC87
8144         mov     w2, w20
8145         mov     w3, w22
8146         bl      printk
8147 .L1061:
8148         cmn     w19, #1
8149         bne     .L1062
8150         adrp    x0, :got:gFlashToggleModeEn
8151         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
8152         ldrb    w0, [x0]
8153         cbz     w0, .L1062
8154         adrp    x0, :got:gpNandc
8155         mov     w1, w22
8156         mov     x2, x24
8157         mov     x3, x23
8158         mov     w4, 1
8159         ldr     x0, [x0, #:got_lo12:gpNandc]
8160         ldr     x0, [x0]
8161         ldr     w21, [x0,304]
8162         mov     w0, w20
8163         bl      FlashDdrTunningRead
8164         cmn     w0, #1
8165         mov     w19, w0
8166         beq     .L1063
8167         adrp    x1, :got:gNandFlashEccBits
8168         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
8169         ldrb    w0, [x1]
8170         cmp     w19, w0, lsr 1
8171         bls     .L1062
8172 .L1063:
8173         lsr     w0, w21, 8
8174         bl      NandcSetDdrPara
8175 .L1062:
8176         mov     w0, w19
8177         ldr     x25, [sp,64]
8178         ldp     x19, x20, [sp,16]
8179         ldp     x21, x22, [sp,32]
8180         ldp     x23, x24, [sp,48]
8181         ldp     x29, x30, [sp], 80
8182         ret
8183         .size   FlashReadPage, .-FlashReadPage
8184         .align  2
8185         .global FlashDdrParaScan
8186         .type   FlashDdrParaScan, %function
8187 FlashDdrParaScan:
8188         stp     x29, x30, [sp, -48]!
8189         add     x29, sp, 0
8190         stp     x19, x20, [sp,16]
8191         adrp    x19, :got:gFlashInterfaceMode
8192         mov     w20, w1
8193         stp     x21, x22, [sp,32]
8194         uxtb    w21, w0
8195         ldr     x22, [x19, #:got_lo12:gFlashInterfaceMode]
8196         ldrb    w0, [x22]
8197         bl      FlashSetInterfaceMode
8198         ldrb    w0, [x22]
8199         bl      NandcSetMode
8200         mov     x2, 0
8201         mov     w1, w20
8202         mov     x3, x2
8203         mov     w4, w2
8204         mov     w0, w21
8205         bl      FlashDdrTunningRead
8206         mov     w22, w0
8207         mov     x2, 0
8208         mov     w1, w20
8209         mov     w0, w21
8210         mov     x3, x2
8211         bl      FlashReadRawPage
8212         cmn     w0, #1
8213         mov     x1, x19
8214         adrp    x19, :got:gFlashToggleModeEn
8215         beq     .L1080
8216         cmn     w22, #1
8217         bne     .L1077
8218 .L1080:
8219         ldr     x0, [x1, #:got_lo12:gFlashInterfaceMode]
8220         ldrb    w0, [x0]
8221         tbz     x0, 0, .L1077
8222         mov     w0, 1
8223         bl      FlashSetInterfaceMode
8224         mov     w0, 1
8225         bl      NandcSetMode
8226         ldr     x19, [x19, #:got_lo12:gFlashToggleModeEn]
8227         strb    wzr, [x19]
8228         b       .L1079
8229 .L1077:
8230         ldr     x19, [x19, #:got_lo12:gFlashToggleModeEn]
8231         mov     w0, 1
8232         strb    w0, [x19]
8233 .L1079:
8234         mov     w0, 0
8235         ldp     x19, x20, [sp,16]
8236         ldp     x21, x22, [sp,32]
8237         ldp     x29, x30, [sp], 48
8238         ret
8239         .size   FlashDdrParaScan, .-FlashDdrParaScan
8240         .align  2
8241         .global FlashLoadPhyInfo
8242         .type   FlashLoadPhyInfo, %function
8243 FlashLoadPhyInfo:
8244         stp     x29, x30, [sp, -144]!
8245         mov     w0, 60
8246         add     x29, sp, 0
8247         stp     x19, x20, [sp,16]
8248         adrp    x20, :got:gNandParaInfo
8249         mov     w19, 0
8250         strb    w0, [x29,136]
8251         mov     w0, 40
8252         strb    w0, [x29,137]
8253         mov     w0, 24
8254         strb    w0, [x29,138]
8255         mov     w0, 16
8256         stp     x21, x22, [sp,32]
8257         strb    w0, [x29,139]
8258         adrp    x22, :got:gFlashPageBuffer0
8259         ldr     x0, [x20, #:got_lo12:gNandParaInfo]
8260         adrp    x21, :got:gpFlashSaveInfo
8261         stp     x23, x24, [sp,48]
8262         stp     x25, x26, [sp,64]
8263         stp     x27, x28, [sp,80]
8264         ldr     x1, [x22, #:got_lo12:gFlashPageBuffer0]
8265         adrp    x23, :got:gNandFlashInfoBlockAddr
8266         ldrh    w0, [x0,10]
8267         mov     w24, 4
8268         str     w0, [x29,124]
8269         mov     w25, -1
8270         ldr     x0, [x21, #:got_lo12:gpFlashSaveInfo]
8271         adrp    x26, :got:gNandOptPara
8272         ldr     x1, [x1]
8273         adrp    x27, :got:gReadRetryInfo
8274         str     x21, [x29,112]
8275         str     x1, [x0]
8276         ldr     x0, [x23, #:got_lo12:gNandFlashInfoBlockAddr]
8277         str     wzr, [x0]
8278 .L1088:
8279         add     w28, w19, 1
8280         mov     x21, 0
8281 .L1090:
8282         add     x0, x29, 136
8283         ldrb    w0, [x21,x0]
8284         bl      FlashBchSel
8285         ldr     x6, [x22, #:got_lo12:gFlashPageBuffer0]
8286         mov     w0, 0
8287         mov     w1, w19
8288         mov     x3, 0
8289         str     x6, [x29,104]
8290         ldr     x2, [x6]
8291         bl      FlashReadRawPage
8292         cmn     w0, #1
8293         bne     .L1089
8294         ldr     x6, [x29,104]
8295         mov     w0, 0
8296         mov     w1, w28
8297         mov     x3, 0
8298         ldr     x2, [x6]
8299         bl      FlashReadRawPage
8300         cmn     w0, #1
8301         bne     .L1089
8302         add     x21, x21, 1
8303         cmp     x21, 4
8304         beq     .L1091
8305         b       .L1090
8306 .L1092:
8307         ldr     w21, [x0,8]
8308         mov     w1, 2036
8309         add     x0, x0, 12
8310         mov     w25, -1
8311         bl      JSHash
8312         cmp     w21, w0
8313         beq     .L1102
8314 .L1091:
8315         ldr     w0, [x29,124]
8316         subs    w24, w24, #1
8317         add     w19, w19, w0
8318         bne     .L1088
8319         b       .L1099
8320 .L1089:
8321         ldr     x0, [x29,112]
8322         mov     w1, 20036
8323         movk    w1, 0x4e41, lsl 16
8324         ldr     x28, [x0, #:got_lo12:gpFlashSaveInfo]
8325         ldr     x0, [x28]
8326         ldr     w2, [x0]
8327         cmp     w2, w1
8328         bne     .L1091
8329         cbnz    w25, .L1092
8330         ldr     x20, [x20, #:got_lo12:gNandParaInfo]
8331         adrp    x0, :got:gNandFlashIdbBlockAddr
8332         ldrh    w1, [x20,10]
8333         ldr     x0, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
8334         udiv    w19, w19, w1
8335         add     w19, w19, 1
8336         str     w19, [x0]
8337         b       .L1099
8338 .L1102:
8339         ldr     x21, [x20, #:got_lo12:gNandParaInfo]
8340         mov     w2, 32
8341         ldr     x1, [x28]
8342         mov     x0, x21
8343         add     x1, x1, 160
8344         bl      ftl_memcpy
8345         ldr     x1, [x28]
8346         mov     w2, 32
8347         ldr     x0, [x26, #:got_lo12:gNandOptPara]
8348         add     x1, x1, 192
8349         bl      ftl_memcpy
8350         ldr     x1, [x28]
8351         mov     w2, 852
8352         ldr     x0, [x27, #:got_lo12:gReadRetryInfo]
8353         add     x1, x1, 224
8354         bl      ftl_memcpy
8355         adrp    x1, :got:gFlashToggleModeEn
8356         ldr     x2, [x28]
8357         ldr     x1, [x1, #:got_lo12:gFlashToggleModeEn]
8358         ldr     w0, [x2,1076]
8359         strb    w0, [x1]
8360         ldrh    w1, [x21,10]
8361         ldr     x0, [x23, #:got_lo12:gNandFlashInfoBlockAddr]
8362         udiv    w1, w19, w1
8363         str     w19, [x0]
8364         adrp    x0, :got:gNandFlashIdbBlockAddr
8365         add     w3, w1, 1
8366         ldr     x0, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
8367         cbz     w1, .L1094
8368         str     w3, [x0]
8369         b       .L1095
8370 .L1094:
8371         mov     w1, 2
8372         str     w1, [x0]
8373 .L1095:
8374         adrp    x0, :got:gNandIDBResBlkNumSaveInFlash
8375         ldrh    w1, [x2,14]
8376         mov     w25, 0
8377         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNumSaveInFlash]
8378         strb    w1, [x0]
8379         b       .L1091
8380 .L1099:
8381         mov     w0, w25
8382         ldp     x19, x20, [sp,16]
8383         ldp     x21, x22, [sp,32]
8384         ldp     x23, x24, [sp,48]
8385         ldp     x25, x26, [sp,64]
8386         ldp     x27, x28, [sp,80]
8387         ldp     x29, x30, [sp], 144
8388         ret
8389         .size   FlashLoadPhyInfo, .-FlashLoadPhyInfo
8390         .align  2
8391         .global ToshibaReadRetrial
8392         .type   ToshibaReadRetrial, %function
8393 ToshibaReadRetrial:
8394         stp     x29, x30, [sp, -96]!
8395         add     x29, sp, 0
8396         stp     x23, x24, [sp,48]
8397         uxtb    w23, w0
8398         mov     w0, w23
8399         stp     x19, x20, [sp,16]
8400         stp     x25, x26, [sp,64]
8401         stp     x21, x22, [sp,32]
8402         stp     x27, x28, [sp,80]
8403         mov     x26, x2
8404         mov     w27, w1
8405         mov     x25, x3
8406         bl      NandcWaitFlashReady
8407         mov     w0, w23
8408         adrp    x20, :got:g_retryMode
8409         mov     w22, 0
8410         bl      NandcGetChipIf
8411         mov     x19, x0
8412         ldr     x0, [x20, #:got_lo12:g_retryMode]
8413         ldrb    w0, [x0]
8414         sub     w0, w0, #67
8415         uxtb    w0, w0
8416         cmp     w0, 1
8417         bls     .L1104
8418         adrp    x0, :got:gFlashToggleModeEn
8419         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
8420         ldrb    w0, [x0]
8421         cbz     w0, .L1105
8422         mov     w0, w22
8423         mov     w22, 1
8424         bl      NandcSetDdrMode
8425 .L1105:
8426         mov     w0, 92
8427         str     w0, [x19,8]
8428         mov     w0, 197
8429         str     w0, [x19,8]
8430 .L1104:
8431         mov     w21, 1
8432         mov     w24, -1
8433 .L1106:
8434         adrp    x0, :got:g_maxRetryCount
8435         ldr     x0, [x0, #:got_lo12:g_maxRetryCount]
8436         ldrb    w0, [x0]
8437         add     w0, w0, 1
8438         cmp     w21, w0
8439         bcs     .L1131
8440         ldr     x0, [x20, #:got_lo12:g_retryMode]
8441         mov     w1, w21
8442         ldrb    w0, [x0]
8443         sub     w0, w0, #67
8444         uxtb    w0, w0
8445         cmp     w0, 1
8446         mov     x0, x19
8447         bhi     .L1107
8448         bl      SandiskSetRRPara
8449         b       .L1108
8450 .L1107:
8451         bl      ToshibaSetRRPara
8452 .L1108:
8453         ldr     x0, [x20, #:got_lo12:g_retryMode]
8454         ldrb    w0, [x0]
8455         cmp     w0, 34
8456         bne     .L1109
8457         adrp    x0, :got:g_maxRetryCount
8458         ldr     x0, [x0, #:got_lo12:g_maxRetryCount]
8459         ldrb    w0, [x0]
8460         sub     w0, w0, #3
8461         cmp     w21, w0
8462         bne     .L1109
8463         mov     w0, 179
8464         str     w0, [x19,8]
8465 .L1109:
8466         mov     w0, 38
8467         str     w0, [x19,8]
8468         mov     w0, 93
8469         str     w0, [x19,8]
8470         cbz     w22, .L1110
8471         mov     w0, 4
8472         bl      NandcSetDdrMode
8473         mov     w0, w23
8474         mov     w1, w27
8475         mov     x2, x26
8476         mov     x3, x25
8477         bl      FlashReadRawPage
8478         mov     w28, w0
8479         mov     w0, 0
8480         bl      NandcSetDdrMode
8481         b       .L1111
8482 .L1110:
8483         mov     w0, w23
8484         mov     w1, w27
8485         mov     x2, x26
8486         mov     x3, x25
8487         bl      FlashReadRawPage
8488         mov     w28, w0
8489 .L1111:
8490         cmn     w28, #1
8491         beq     .L1112
8492         adrp    x0, :got:gNandFlashEccBits
8493         cmn     w24, #1
8494         csel    w24, w24, w28, ne
8495         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8496         ldrb    w0, [x0]
8497         add     w0, w0, w0, lsl 1
8498         cmp     w28, w0, lsr 2
8499         bcc     .L1114
8500         mov     x25, 0
8501         mov     x26, x25
8502 .L1112:
8503         add     w21, w21, 1
8504         b       .L1106
8505 .L1131:
8506         mov     w28, w24
8507 .L1114:
8508         ldr     x20, [x20, #:got_lo12:g_retryMode]
8509         mov     w1, 0
8510         ldrb    w0, [x20]
8511         sub     w0, w0, #67
8512         uxtb    w0, w0
8513         cmp     w0, 1
8514         mov     x0, x19
8515         bhi     .L1116
8516         bl      SandiskSetRRPara
8517         b       .L1117
8518 .L1116:
8519         bl      ToshibaSetRRPara
8520 .L1117:
8521         mov     w0, 255
8522         str     w0, [x19,8]
8523         adrp    x0, :got:gNandFlashEccBits
8524         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8525         ldrb    w0, [x0]
8526         add     w0, w0, w0, lsl 1
8527         cmp     w28, w0, lsr 2
8528         bcc     .L1118
8529         cmn     w28, #1
8530         mov     w0, 256
8531         csel    w28, w28, w0, eq
8532 .L1118:
8533         mov     w0, w23
8534         bl      NandcWaitFlashReady
8535         cbz     w22, .L1119
8536         mov     w0, 4
8537         bl      NandcSetDdrMode
8538 .L1119:
8539         mov     w0, w28
8540         ldp     x19, x20, [sp,16]
8541         ldp     x21, x22, [sp,32]
8542         ldp     x23, x24, [sp,48]
8543         ldp     x25, x26, [sp,64]
8544         ldp     x27, x28, [sp,80]
8545         ldp     x29, x30, [sp], 96
8546         ret
8547         .size   ToshibaReadRetrial, .-ToshibaReadRetrial
8548         .align  2
8549         .global SamsungReadRetrial
8550         .type   SamsungReadRetrial, %function
8551 SamsungReadRetrial:
8552         stp     x29, x30, [sp, -96]!
8553         add     x29, sp, 0
8554         stp     x21, x22, [sp,32]
8555         uxtb    w21, w0
8556         str     x27, [sp,80]
8557         mov     w0, w21
8558         mov     x22, x3
8559         stp     x19, x20, [sp,16]
8560         stp     x23, x24, [sp,48]
8561         stp     x25, x26, [sp,64]
8562         mov     w23, w1
8563         mov     x25, x2
8564         bl      NandcWaitFlashReady
8565         mov     w20, 1
8566         mov     w0, w21
8567         mov     w19, -1
8568         adrp    x26, :got:g_maxRetryCount
8569         adrp    x27, :got:gNandFlashEccBits
8570         bl      NandcGetChipIf
8571         mov     x24, x0
8572 .L1133:
8573         ldr     x0, [x26, #:got_lo12:g_maxRetryCount]
8574         ldrb    w4, [x0]
8575         add     w4, w4, 1
8576         cmp     w20, w4
8577         bcs     .L1136
8578         mov     x0, x24
8579         mov     w1, w20
8580         bl      SamsungSetRRPara
8581         mov     w0, w21
8582         mov     w1, w23
8583         mov     x2, x25
8584         mov     x3, x22
8585         bl      FlashReadRawPage
8586         cmn     w0, #1
8587         mov     w4, w0
8588         beq     .L1134
8589         cmn     w19, #1
8590         csel    w19, w19, w0, ne
8591         ldr     x0, [x27, #:got_lo12:gNandFlashEccBits]
8592         ldrb    w2, [x0]
8593         add     w2, w2, w2, lsl 1
8594         cmp     w4, w2, lsr 2
8595         bcc     .L1139
8596         mov     x22, 0
8597         mov     x25, x22
8598 .L1134:
8599         add     w20, w20, 1
8600         b       .L1133
8601 .L1139:
8602         mov     w19, w4
8603 .L1136:
8604         mov     x0, x24
8605         mov     w1, 0
8606         bl      SamsungSetRRPara
8607         adrp    x0, :got:gNandFlashEccBits
8608         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8609         ldrb    w0, [x0]
8610         add     w0, w0, w0, lsl 1
8611         cmp     w19, w0, lsr 2
8612         bcc     .L1138
8613         cmn     w19, #1
8614         mov     w0, 256
8615         csel    w19, w19, w0, eq
8616 .L1138:
8617         mov     w0, w19
8618         ldr     x27, [sp,80]
8619         ldp     x19, x20, [sp,16]
8620         ldp     x21, x22, [sp,32]
8621         ldp     x23, x24, [sp,48]
8622         ldp     x25, x26, [sp,64]
8623         ldp     x29, x30, [sp], 96
8624         ret
8625         .size   SamsungReadRetrial, .-SamsungReadRetrial
8626         .align  2
8627         .global MicronReadRetrial
8628         .type   MicronReadRetrial, %function
8629 MicronReadRetrial:
8630         stp     x29, x30, [sp, -96]!
8631         add     x29, sp, 0
8632         stp     x21, x22, [sp,32]
8633         uxtb    w22, w0
8634         mov     w21, 0
8635         mov     w0, w22
8636         stp     x19, x20, [sp,16]
8637         stp     x23, x24, [sp,48]
8638         stp     x25, x26, [sp,64]
8639         stp     x27, x28, [sp,80]
8640         mov     w25, w1
8641         mov     x24, x2
8642         mov     x23, x3
8643         bl      NandcWaitFlashReady
8644         mov     w0, w22
8645         mov     w20, -1
8646         mov     w26, 239
8647         mov     w27, 137
8648         bl      NandcGetChipIf
8649         adrp    x28, :got:gNandFlashEccBits
8650         mov     x19, x0
8651 .L1149:
8652         str     w26, [x19,8]
8653         mov     w0, 200
8654         str     w27, [x19,4]
8655         add     w21, w21, 1
8656         bl      NandcDelayns
8657         str     w21, [x19]
8658         str     wzr, [x19]
8659         mov     w0, w22
8660         str     wzr, [x19]
8661         mov     w1, w25
8662         str     wzr, [x19]
8663         mov     x2, x24
8664         mov     x3, x23
8665         bl      FlashReadRawPage
8666         cmn     w0, #1
8667         beq     .L1146
8668         ldr     x1, [x28, #:got_lo12:gNandFlashEccBits]
8669         cmn     w20, #1
8670         csel    w20, w20, w0, ne
8671         ldrb    w2, [x1]
8672         add     w2, w2, w2, lsl 1
8673         cmp     w0, w2, lsr 2
8674         bcc     .L1151
8675         mov     x23, 0
8676         mov     x24, x23
8677 .L1146:
8678         cmp     w21, 7
8679         bne     .L1149
8680         b       .L1148
8681 .L1151:
8682         mov     w20, w0
8683 .L1148:
8684         mov     w0, 239
8685         str     w0, [x19,8]
8686         mov     w0, 137
8687         str     w0, [x19,4]
8688         mov     w0, 200
8689         bl      NandcDelayns
8690         str     wzr, [x19]
8691         str     wzr, [x19]
8692         adrp    x0, :got:gNandFlashEccBits
8693         str     wzr, [x19]
8694         str     wzr, [x19]
8695         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8696         ldrb    w0, [x0]
8697         add     w0, w0, w0, lsl 1
8698         cmp     w20, w0, lsr 2
8699         bcc     .L1150
8700         cmn     w20, #1
8701         mov     w0, 256
8702         csel    w20, w20, w0, eq
8703 .L1150:
8704         mov     w0, w20
8705         ldp     x19, x20, [sp,16]
8706         ldp     x21, x22, [sp,32]
8707         ldp     x23, x24, [sp,48]
8708         ldp     x25, x26, [sp,64]
8709         ldp     x27, x28, [sp,80]
8710         ldp     x29, x30, [sp], 96
8711         ret
8712         .size   MicronReadRetrial, .-MicronReadRetrial
8713         .align  2
8714         .global HynixReadRetrial
8715         .type   HynixReadRetrial, %function
8716 HynixReadRetrial:
8717         stp     x29, x30, [sp, -112]!
8718         add     x29, sp, 0
8719         stp     x21, x22, [sp,32]
8720         adrp    x21, :got:gReadRetryInfo
8721         uxtb    x22, w0
8722         stp     x23, x24, [sp,48]
8723         stp     x27, x28, [sp,80]
8724         ldr     x0, [x21, #:got_lo12:gReadRetryInfo]
8725         mov     w27, w1
8726         stp     x19, x20, [sp,16]
8727         stp     x25, x26, [sp,64]
8728         add     x1, x0, x22
8729         mov     x26, x2
8730         ldrb    w25, [x0,2]
8731         mov     w0, w22
8732         mov     x24, x3
8733         mov     x23, x22
8734         ldrb    w20, [x1,12]
8735         bl      NandcWaitFlashReady
8736         mov     w28, 0
8737         mov     w19, -1
8738         adrp    x4, :got:gNandFlashEccBits
8739 .L1159:
8740         cmp     w28, w25
8741         bcs     .L1163
8742         add     w20, w20, 1
8743         ldr     x2, [x21, #:got_lo12:gReadRetryInfo]
8744         mov     w0, w23
8745         str     x4, [x29,104]
8746         uxtb    w20, w20
8747         add     x2, x2, 4
8748         cmp     w20, w25
8749         ldrb    w1, [x2,-3]
8750         csel    w20, w20, wzr, cc
8751         mov     w3, w20
8752         bl      HynixSetRRPara
8753         mov     w0, w23
8754         mov     w1, w27
8755         mov     x2, x26
8756         mov     x3, x24
8757         bl      FlashReadRawPage
8758         cmn     w0, #1
8759         ldr     x4, [x29,104]
8760         beq     .L1161
8761         ldr     x1, [x4, #:got_lo12:gNandFlashEccBits]
8762         cmn     w19, #1
8763         csel    w19, w19, w0, ne
8764         ldrb    w1, [x1]
8765         add     w1, w1, w1, lsl 1
8766         cmp     w0, w1, lsr 2
8767         bcc     .L1166
8768         mov     x24, 0
8769         mov     x26, x24
8770 .L1161:
8771         add     w28, w28, 1
8772         b       .L1159
8773 .L1166:
8774         mov     w19, w0
8775 .L1163:
8776         ldr     x21, [x21, #:got_lo12:gReadRetryInfo]
8777         adrp    x0, :got:gNandFlashEccBits
8778         add     x21, x21, x22
8779         strb    w20, [x21,12]
8780         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
8781         ldrb    w0, [x0]
8782         add     w0, w0, w0, lsl 1
8783         cmp     w19, w0, lsr 2
8784         bcc     .L1165
8785         cmn     w19, #1
8786         mov     w0, 256
8787         csel    w19, w19, w0, eq
8788 .L1165:
8789         mov     w0, w19
8790         ldp     x19, x20, [sp,16]
8791         ldp     x21, x22, [sp,32]
8792         ldp     x23, x24, [sp,48]
8793         ldp     x25, x26, [sp,64]
8794         ldp     x27, x28, [sp,80]
8795         ldp     x29, x30, [sp], 112
8796         ret
8797         .size   HynixReadRetrial, .-HynixReadRetrial
8798         .align  2
8799         .global FlashProgPage
8800         .type   FlashProgPage, %function
8801 FlashProgPage:
8802         stp     x29, x30, [sp, -64]!
8803         mov     x4, x3
8804         add     x29, sp, 0
8805         stp     x19, x20, [sp,16]
8806         uxtb    w19, w0
8807         adrp    x0, :got:gNandParaInfo
8808         stp     x21, x22, [sp,32]
8809         mov     w20, w1
8810         mov     x22, x2
8811         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
8812         ldrb    w21, [x0,9]
8813         cbnz    w19, .L1173
8814         adrp    x0, :got:gNandIDBResBlkNum
8815         adrp    x1, :got:gBlockPageAlignSize
8816         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
8817         ldr     x1, [x1, #:got_lo12:gBlockPageAlignSize]
8818         ldrb    w0, [x0]
8819         ldr     w1, [x1]
8820         mul     w0, w0, w1
8821         cmp     w20, w0
8822         bcs     .L1173
8823         adrp    x0, :got:g_slc2KBNand
8824         ldr     x0, [x0, #:got_lo12:g_slc2KBNand]
8825         ldrb    w0, [x0]
8826         cbnz    w0, .L1174
8827         sub     w21, w21, #2
8828         b       .L1173
8829 .L1174:
8830         mov     w21, 4
8831 .L1173:
8832         mov     w0, w19
8833         str     x4, [x29,56]
8834         bl      NandcWaitFlashReady
8835         mov     w0, w19
8836         bl      NandcFlashCs
8837         mov     w0, w19
8838         mov     w1, w20
8839         bl      FlashProgFirstCmd
8840         ldr     x4, [x29,56]
8841         mov     w2, w21
8842         mov     x3, x22
8843         mov     w0, w19
8844         mov     w1, 1
8845         bl      NandcXferData
8846         mov     w1, w20
8847         mov     w0, w19
8848         bl      FlashProgSecondCmd
8849         mov     w0, w19
8850         bl      NandcWaitFlashReady
8851         mov     w1, w20
8852         mov     w0, w19
8853         bl      FlashReadStatus
8854         mov     w20, w0
8855         mov     w0, w19
8856         bl      NandcFlashDeCs
8857         and     w0, w20, 1
8858         ldp     x19, x20, [sp,16]
8859         ldp     x21, x22, [sp,32]
8860         ldp     x29, x30, [sp], 64
8861         ret
8862         .size   FlashProgPage, .-FlashProgPage
8863         .align  2
8864         .global FlashSavePhyInfo
8865         .type   FlashSavePhyInfo, %function
8866 FlashSavePhyInfo:
8867         stp     x29, x30, [sp, -112]!
8868         add     x29, sp, 0
8869         stp     x23, x24, [sp,48]
8870         adrp    x23, :got:gFlashPageBuffer0
8871         adrp    x24, :got:gFlashPageBuffer1
8872         stp     x21, x22, [sp,32]
8873         adrp    x22, :got:gpFlashSaveInfo
8874         stp     x19, x20, [sp,16]
8875         ldr     x20, [x23, #:got_lo12:gFlashPageBuffer0]
8876         ldr     x19, [x22, #:got_lo12:gpFlashSaveInfo]
8877         stp     x25, x26, [sp,64]
8878         stp     x27, x28, [sp,80]
8879         adrp    x25, :got:gBlockPageAlignSize
8880         adrp    x26, :got:gNandFlashIdbBlockAddr
8881         ldr     x0, [x20]
8882         adrp    x27, :got:gNandFlashInfoBlockAddr
8883         str     x0, [x19]
8884         adrp    x0, :got:gNandFlashIDBEccBits
8885         ldr     x0, [x0, #:got_lo12:gNandFlashIDBEccBits]
8886         ldrb    w0, [x0]
8887         bl      FlashBchSel
8888         ldr     x0, [x20]
8889         mov     w1, 0
8890         mov     w2, 2048
8891         bl      ftl_memset
8892         ldr     x1, [x19]
8893         mov     w0, 20036
8894         movk    w0, 0x4e41, lsl 16
8895         mov     w2, 32
8896         str     w0, [x1]
8897         adrp    x1, :got:gNandMaxDie
8898         ldr     x0, [x19]
8899         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
8900         add     x0, x0, 16
8901         ldrb    w1, [x1]
8902         strh    w1, [x0,-4]
8903         adrp    x1, :got:gNandIDBResBlkNum
8904         ldr     x1, [x1, #:got_lo12:gNandIDBResBlkNum]
8905         ldrb    w1, [x1]
8906         strh    w1, [x0,-2]
8907         adrp    x1, :got:gFlashToggleModeEn
8908         ldr     x1, [x1, #:got_lo12:gFlashToggleModeEn]
8909         ldrb    w1, [x1]
8910         str     w1, [x0,1060]
8911         adrp    x1, :got:IDByte
8912         ldr     x1, [x1, #:got_lo12:IDByte]
8913         bl      ftl_memcpy
8914         adrp    x1, :got:DieCsIndex
8915         ldr     x0, [x19]
8916         mov     w2, 8
8917         add     x0, x0, 80
8918         ldr     x1, [x1, #:got_lo12:DieCsIndex]
8919         bl      ftl_memcpy
8920         adrp    x1, :got:DieAddrs
8921         ldr     x0, [x19]
8922         mov     w2, 32
8923         add     x0, x0, 96
8924         ldr     x1, [x1, #:got_lo12:DieAddrs]
8925         bl      ftl_memcpy
8926         adrp    x1, :got:gNandParaInfo
8927         ldr     x0, [x19]
8928         mov     w2, 32
8929         add     x0, x0, 160
8930         ldr     x1, [x1, #:got_lo12:gNandParaInfo]
8931         bl      ftl_memcpy
8932         adrp    x1, :got:gNandOptPara
8933         ldr     x0, [x19]
8934         mov     w2, 32
8935         add     x0, x0, 192
8936         ldr     x1, [x1, #:got_lo12:gNandOptPara]
8937         bl      ftl_memcpy
8938         adrp    x1, :got:gReadRetryInfo
8939         ldr     x0, [x19]
8940         mov     w2, 852
8941         add     x0, x0, 224
8942         ldr     x1, [x1, #:got_lo12:gReadRetryInfo]
8943         bl      ftl_memcpy
8944         ldr     x20, [x19]
8945         mov     w1, 2036
8946         add     x0, x20, 12
8947         bl      JSHash
8948         str     w0, [x20,8]
8949         ldr     x0, [x19]
8950         mov     w1, 1592
8951         str     w1, [x0,4]
8952         ldr     x0, [x24, #:got_lo12:gFlashPageBuffer1]
8953         ldr     x0, [x0]
8954         str     x0, [x19]
8955         mov     w19, 0
8956         mov     w20, w19
8957 .L1178:
8958         ldr     x21, [x25, #:got_lo12:gBlockPageAlignSize]
8959         mov     w2, 0
8960         mov     w0, 0
8961         ldr     w1, [x21]
8962         mul     w1, w20, w1
8963         bl      FlashEraseBlock
8964         ldr     x28, [x23, #:got_lo12:gFlashPageBuffer0]
8965         ldr     w1, [x21]
8966         mov     x3, 0
8967         mov     w0, 0
8968         ldr     x2, [x28]
8969         mul     w1, w20, w1
8970         bl      FlashProgPage
8971         ldr     w1, [x21]
8972         mov     x3, 0
8973         ldr     x2, [x28]
8974         mov     w0, 0
8975         add     w28, w20, 1
8976         mul     w1, w20, w1
8977         add     w1, w1, 1
8978         bl      FlashProgPage
8979         ldr     w1, [x21]
8980         mov     w0, 0
8981         ldr     x2, [x24, #:got_lo12:gFlashPageBuffer1]
8982         mov     x3, 0
8983         mul     w1, w20, w1
8984         ldr     x2, [x2]
8985         bl      FlashReadRawPage
8986         cmn     w0, #1
8987         beq     .L1179
8988         ldr     x0, [x22, #:got_lo12:gpFlashSaveInfo]
8989         mov     w1, 20036
8990         movk    w1, 0x4e41, lsl 16
8991         ldr     x0, [x0]
8992         ldr     w2, [x0]
8993         cmp     w2, w1
8994         bne     .L1179
8995         ldr     w2, [x0,8]
8996         mov     w1, 2036
8997         add     x0, x0, 12
8998         str     x2, [x29,104]
8999         bl      JSHash
9000         ldr     x2, [x29,104]
9001         cmp     w2, w0
9002         bne     .L1179
9003         ldr     x0, [x26, #:got_lo12:gNandFlashIdbBlockAddr]
9004         str     w28, [x0]
9005         ldr     w0, [x21]
9006         ldr     x1, [x27, #:got_lo12:gNandFlashInfoBlockAddr]
9007         mul     w20, w20, w0
9008         str     w20, [x1]
9009         cbnz    w19, .L1180
9010         mov     w19, 1
9011 .L1179:
9012         cmp     w28, 4
9013         mov     w20, w28
9014         bne     .L1178
9015         eor     w0, w19, 1
9016         neg     w0, w0
9017         b       .L1177
9018 .L1180:
9019         mov     w0, 0
9020 .L1177:
9021         ldp     x19, x20, [sp,16]
9022         ldp     x21, x22, [sp,32]
9023         ldp     x23, x24, [sp,48]
9024         ldp     x25, x26, [sp,64]
9025         ldp     x27, x28, [sp,80]
9026         ldp     x29, x30, [sp], 112
9027         ret
9028         .size   FlashSavePhyInfo, .-FlashSavePhyInfo
9029         .align  2
9030         .global FlashReadIdbDataRaw
9031         .type   FlashReadIdbDataRaw, %function
9032 FlashReadIdbDataRaw:
9033         stp     x29, x30, [sp, -128]!
9034         mov     w1, 60
9035         mov     w2, 2048
9036         add     x29, sp, 0
9037         stp     x23, x24, [sp,48]
9038         stp     x25, x26, [sp,64]
9039         strb    w1, [x29,120]
9040         mov     w1, 40
9041         strb    w1, [x29,121]
9042         mov     w1, 24
9043         strb    w1, [x29,122]
9044         mov     w1, 16
9045         strb    w1, [x29,123]
9046         adrp    x1, :got:gNandFlashEccBits
9047         stp     x19, x20, [sp,16]
9048         stp     x21, x22, [sp,32]
9049         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
9050         adrp    x21, .LC88
9051         stp     x27, x28, [sp,80]
9052         mov     w19, 2
9053         mov     w28, -1
9054         ldrb    w22, [x1]
9055         adrp    x24, :got:gNandIDBResBlkNum
9056         mov     w1, 0
9057         adrp    x25, :got:gBlockPageAlignSize
9058         adrp    x26, :got:gFlashPageBuffer0
9059         add     x21, x21, :lo12:.LC88
9060         mov     x23, x0
9061         bl      ftl_memset
9062 .L1186:
9063         ldr     x0, [x24, #:got_lo12:gNandIDBResBlkNum]
9064         ldrb    w0, [x0]
9065         cmp     w19, w0
9066         bcs     .L1190
9067         mov     x27, 0
9068 .L1188:
9069         add     x0, x29, 120
9070         ldrb    w4, [x27,x0]
9071         str     x4, [x29,104]
9072         mov     w0, w4
9073         bl      FlashBchSel
9074         ldr     x20, [x26, #:got_lo12:gFlashPageBuffer0]
9075         ldr     x0, [x25, #:got_lo12:gBlockPageAlignSize]
9076         mov     x3, 0
9077         ldr     x2, [x20]
9078         ldr     w1, [x0]
9079         mov     w0, 0
9080         mul     w1, w19, w1
9081         bl      FlashReadRawPage
9082         cmn     w0, #1
9083         ldr     x4, [x29,104]
9084         bne     .L1187
9085         add     x27, x27, 1
9086         cmp     x27, 4
9087         bne     .L1188
9088         b       .L1189
9089 .L1187:
9090         ldr     x0, [x20]
9091         ldr     w1, [x0]
9092         mov     w0, 35899
9093         movk    w0, 0xfcdc, lsl 16
9094         cmp     w1, w0
9095         bne     .L1189
9096         mov     w1, w4
9097         mov     x0, x21
9098         bl      printk
9099         ldr     x1, [x20]
9100         mov     x0, x23
9101         mov     w2, 2048
9102         bl      ftl_memcpy
9103         adrp    x0, :got:gNandIDBResBlkNum
9104         ldr     x1, [x20]
9105         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
9106         ldr     w1, [x1,512]
9107         strb    w1, [x0]
9108         adrp    x1, :got:gNandFlashIdbBlockAddr
9109         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
9110         ldr     w0, [x1]
9111         cmp     w0, w19
9112         bls     .L1192
9113         mov     w28, 0
9114         str     w19, [x1]
9115         bl      FlashSavePhyInfo
9116 .L1189:
9117         add     w19, w19, 1
9118         b       .L1186
9119 .L1192:
9120         mov     w28, 0
9121 .L1190:
9122         mov     w0, w22
9123         bl      FlashBchSel
9124         mov     w0, w28
9125         ldp     x19, x20, [sp,16]
9126         ldp     x21, x22, [sp,32]
9127         ldp     x23, x24, [sp,48]
9128         ldp     x25, x26, [sp,64]
9129         ldp     x27, x28, [sp,80]
9130         ldp     x29, x30, [sp], 128
9131         ret
9132         .size   FlashReadIdbDataRaw, .-FlashReadIdbDataRaw
9133         .align  2
9134         .global FlashInit
9135         .type   FlashInit, %function
9136 FlashInit:
9137         stp     x29, x30, [sp, -112]!
9138         add     x29, sp, 0
9139         stp     x19, x20, [sp,16]
9140         mov     x19, x0
9141         mov     w0, 32768
9142         stp     x21, x22, [sp,32]
9143         stp     x23, x24, [sp,48]
9144         stp     x27, x28, [sp,80]
9145         stp     x25, x26, [sp,64]
9146         bl      ftl_malloc
9147         adrp    x20, :got:gNandIDBResBlkNum
9148         adrp    x1, :got:gFlashPageBuffer0
9149         adrp    x24, :got:gNandIDBResBlkNumSaveInFlash
9150         adrp    x23, :got:gFlashToggleModeEn
9151         adrp    x22, :got:g_slc2KBNand
9152         adrp    x25, :got:gNandFlashIDBEccBits
9153         adrp    x21, :got:IDByte
9154         ldr     x1, [x1, #:got_lo12:gFlashPageBuffer0]
9155         adrp    x27, .LC89
9156         mov     w28, 0
9157         add     x27, x27, :lo12:.LC89
9158         str     x0, [x1]
9159         mov     w0, 32768
9160         bl      ftl_malloc
9161         adrp    x1, :got:gFlashPageBuffer1
9162         ldr     x1, [x1, #:got_lo12:gFlashPageBuffer1]
9163         str     x0, [x1]
9164         mov     w0, 4096
9165         bl      ftl_malloc
9166         adrp    x1, :got:gFlashSpareBuffer
9167         ldr     x1, [x1, #:got_lo12:gFlashSpareBuffer]
9168         str     x0, [x1]
9169         mov     w0, 32768
9170         bl      ftl_malloc
9171         adrp    x1, :got:gFlashProgCheckBuffer
9172         ldr     x1, [x1, #:got_lo12:gFlashProgCheckBuffer]
9173         str     x0, [x1]
9174         mov     w0, 4096
9175         bl      ftl_malloc
9176         adrp    x1, :got:gFlashProgCheckSpareBuffer
9177         ldr     x1, [x1, #:got_lo12:gFlashProgCheckSpareBuffer]
9178         str     x0, [x1]
9179         mov     w1, 50
9180         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9181         strb    w1, [x0]
9182         ldr     x0, [x24, #:got_lo12:gNandIDBResBlkNumSaveInFlash]
9183         strb    w1, [x0]
9184         adrp    x1, :got:gNandFlashIdbBlockAddr
9185         mov     w0, 128
9186         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
9187         str     wzr, [x1]
9188         adrp    x1, :got:gBlockPageAlignSize
9189         ldr     x1, [x1, #:got_lo12:gBlockPageAlignSize]
9190         str     w0, [x1]
9191         adrp    x1, :got:FlashDdrTunningReadCount
9192         ldr     x0, [x23, #:got_lo12:gFlashToggleModeEn]
9193         strb    wzr, [x0]
9194         ldr     x1, [x1, #:got_lo12:FlashDdrTunningReadCount]
9195         str     wzr, [x1]
9196         mov     w1, 60
9197         ldr     x0, [x22, #:got_lo12:g_slc2KBNand]
9198         strb    wzr, [x0]
9199         ldr     x0, [x25, #:got_lo12:gNandFlashIDBEccBits]
9200         strb    w1, [x0]
9201         mov     x0, x19
9202         bl      NandcInit
9203         ldr     x19, [x21, #:got_lo12:IDByte]
9204         str     x24, [x29,104]
9205 .L1200:
9206         uxtb    w26, w28
9207         mov     w0, w26
9208         bl      FlashReset
9209         mov     w0, w26
9210         bl      NandcGetChipIf
9211         mov     x24, x0
9212         mov     w0, w26
9213         bl      NandcFlashCs
9214         mov     w0, 144
9215         str     w0, [x24,8]
9216         str     wzr, [x24,4]
9217         mov     w0, 200
9218         bl      NandcDelayns
9219         ldr     w0, [x24]
9220         strb    w0, [x19]
9221         ldr     w0, [x24]
9222         strb    w0, [x19,1]
9223         ldr     w0, [x24]
9224         strb    w0, [x19,2]
9225         ldr     w0, [x24]
9226         strb    w0, [x19,3]
9227         ldr     w0, [x24]
9228         strb    w0, [x19,4]
9229         ldr     w0, [x24]
9230         strb    w0, [x19,5]
9231         ldr     w0, [x24]
9232         strb    w0, [x19,6]
9233         ldr     w0, [x24]
9234         strb    w0, [x19,7]
9235         mov     w0, w26
9236         bl      NandcFlashDeCs
9237         ldrb    w2, [x19]
9238         sub     w0, w2, #1
9239         uxtb    w0, w0
9240         cmp     w0, 253
9241         bhi     .L1197
9242         ldrb    w3, [x19,1]
9243         mov     x0, x27
9244         ldrb    w4, [x19,2]
9245         add     w1, w28, 1
9246         ldrb    w5, [x19,3]
9247         ldrb    w6, [x19,4]
9248         ldrb    w7, [x19,5]
9249         bl      printk
9250 .L1197:
9251         cbnz    w28, .L1198
9252         ldr     x0, [x21, #:got_lo12:IDByte]
9253         ldrb    w0, [x0]
9254         sub     w0, w0, #1
9255         uxtb    w0, w0
9256         cmp     w0, 253
9257         bhi     .L1234
9258         bl      FlashCs123Init
9259 .L1198:
9260         add     w28, w28, 1
9261         add     x19, x19, 8
9262         cmp     w28, 4
9263         bne     .L1200
9264         ldr     x0, [x21, #:got_lo12:IDByte]
9265         ldrb    w0, [x0]
9266         cmp     w0, 173
9267         beq     .L1201
9268         adrp    x0, :got:gBootDdrMode
9269         ldr     x0, [x0, #:got_lo12:gBootDdrMode]
9270         ldr     w0, [x0]
9271         bl      NandcSetDdrMode
9272 .L1201:
9273         adrp    x26, :got:gReadRetryInfo
9274         mov     w1, 0
9275         mov     w2, 852
9276         adrp    x19, :got:gpNandParaInfo
9277         adrp    x27, :got:gNandRandomizer
9278         ldr     x0, [x26, #:got_lo12:gReadRetryInfo]
9279         bl      ftl_memset
9280         adrp    x0, :got:gNandParaInfo
9281         ldr     x1, [x19, #:got_lo12:gpNandParaInfo]
9282         mov     x28, x0
9283         ldr     x2, [x0, #:got_lo12:gNandParaInfo]
9284         str     x2, [x1]
9285         ldr     x1, [x27, #:got_lo12:gNandRandomizer]
9286         strb    wzr, [x1]
9287         ldr     x1, [x21, #:got_lo12:IDByte]
9288         ldrb    w2, [x1,1]
9289         cmp     w2, 218
9290         cset    w1, eq
9291         cbnz    w1, .L1235
9292         cmp     w2, 241
9293         bne     .L1202
9294 .L1235:
9295         ldr     x0, [x22, #:got_lo12:g_slc2KBNand]
9296         mov     w2, 1
9297         strb    w2, [x0]
9298         mov     w2, 16
9299         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9300         strb    w2, [x0]
9301         ldr     x25, [x25, #:got_lo12:gNandFlashIDBEccBits]
9302         strb    w2, [x25]
9303         ldr     x0, [x21, #:got_lo12:IDByte]
9304         ldrb    w0, [x0]
9305         cmp     w0, 152
9306         bne     .L1204
9307         mov     w0, 24
9308         strb    w0, [x25]
9309 .L1204:
9310         adrp    x25, :got:gSlcNandParaInfo
9311         cbz     w1, .L1205
9312         ldr     x0, [x25, #:got_lo12:gSlcNandParaInfo]
9313         mov     w1, 2048
9314         strh    w1, [x0,14]
9315 .L1205:
9316         adrp    x0, :got:gNandOptPara
9317         adrp    x1, .LANCHOR2
9318         add     x1, x1, :lo12:.LANCHOR2
9319         mov     w2, 32
9320         add     x1, x1, 32
9321         ldr     x0, [x0, #:got_lo12:gNandOptPara]
9322         bl      ftl_memcpy
9323         ldr     x0, [x28, #:got_lo12:gNandParaInfo]
9324         mov     w2, 32
9325         ldr     x1, [x25, #:got_lo12:gSlcNandParaInfo]
9326         bl      ftl_memcpy
9327 .L1202:
9328         ldr     x0, [x22, #:got_lo12:g_slc2KBNand]
9329         ldrb    w0, [x0]
9330         cbnz    w0, .L1206
9331         bl      FlashLoadPhyInfoInRam
9332         cbnz    w0, .L1208
9333         ldr     x0, [x19, #:got_lo12:gpNandParaInfo]
9334         adrp    x25, :got:gFlashInterfaceMode
9335         ldr     x0, [x0]
9336         ldr     x25, [x25, #:got_lo12:gFlashInterfaceMode]
9337         ldrb    w1, [x0,17]
9338         and     w0, w1, 7
9339         strb    w0, [x25]
9340         tbnz    x1, 0, .L1208
9341         ldr     x1, [x23, #:got_lo12:gFlashToggleModeEn]
9342         mov     w2, 1
9343         strb    w2, [x1]
9344         bl      FlashSetInterfaceMode
9345         ldrb    w0, [x25]
9346         bl      NandcSetMode
9347 .L1208:
9348         bl      FlashLoadPhyInfo
9349         cbz     w0, .L1206
9350         adrp    x0, :got:gBootDdrMode
9351         ldr     x0, [x0, #:got_lo12:gBootDdrMode]
9352         ldr     w0, [x0]
9353         cbz     w0, .L1211
9354         mov     w0, 1
9355         bl      FlashSetInterfaceMode
9356         mov     w0, 1
9357         b       .L1263
9358 .L1211:
9359         adrp    x25, :got:gFlashInterfaceMode
9360         ldr     x25, [x25, #:got_lo12:gFlashInterfaceMode]
9361         ldrb    w0, [x25]
9362         bl      FlashSetInterfaceMode
9363         ldrb    w0, [x25]
9364 .L1263:
9365         bl      NandcSetMode
9366         bl      FlashLoadPhyInfo
9367         cbz     w0, .L1206
9368         mov     w0, 1
9369         bl      FlashSetInterfaceMode
9370         mov     w0, 1
9371         bl      NandcSetMode
9372         ldr     x25, [x19, #:got_lo12:gpNandParaInfo]
9373         adrp    x0, .LC90
9374         add     x0, x0, :lo12:.LC90
9375         ldr     x1, [x25]
9376         ldrh    w1, [x1,14]
9377         bl      printk
9378         bl      FlashLoadPhyInfoInRam
9379         cmn     w0, #1
9380         beq     .L1199
9381         bl      FlashDieInfoInit
9382         ldr     x0, [x25]
9383         ldrb    w0, [x0,19]
9384         bl      FlashGetReadRetryDefault
9385         adrp    x1, :got:gTotleBlock
9386         ldr     x0, [x25]
9387         ldr     x1, [x1, #:got_lo12:gTotleBlock]
9388         ldrb    w2, [x0,9]
9389         ldrh    w1, [x1]
9390         add     w1, w1, 4095
9391         cmp     w2, w1, lsr 12
9392         blt     .L1213
9393         ldrh    w1, [x0,14]
9394         add     w1, w1, 255
9395         cmp     w2, w1, lsr 8
9396         bge     .L1214
9397 .L1213:
9398         ldrh    w1, [x0,14]
9399         and     w1, w1, -256
9400         strh    w1, [x0,14]
9401 .L1214:
9402         adrp    x0, :got:gFlashInterfaceMode
9403         ldr     x0, [x0, #:got_lo12:gFlashInterfaceMode]
9404         ldrb    w0, [x0]
9405         tst     w0, 6
9406         beq     .L1215
9407         bl      FlashSavePhyInfo
9408         adrp    x1, :got:gNandFlashInfoBlockAddr
9409         mov     w0, 0
9410         ldr     x1, [x1, #:got_lo12:gNandFlashInfoBlockAddr]
9411         ldr     w1, [x1]
9412         bl      FlashDdrParaScan
9413 .L1215:
9414         bl      FlashSavePhyInfo
9415 .L1206:
9416         ldr     x0, [x19, #:got_lo12:gpNandParaInfo]
9417         adrp    x25, :got:gFlashInterfaceMode
9418         ldr     x27, [x27, #:got_lo12:gNandRandomizer]
9419         adrp    x3, :got:gpReadRetrial
9420         ldr     x4, [x0]
9421         ldrh    w0, [x4,16]
9422         ubfx    x1, x0, 7, 1
9423         strb    w1, [x27]
9424         adrp    x1, :got:gMultiPageReadEn
9425         ubfx    x2, x0, 3, 1
9426         ldr     x1, [x1, #:got_lo12:gMultiPageReadEn]
9427         strb    w2, [x1]
9428         adrp    x1, :got:gMultiPageProgEn
9429         ubfx    x2, x0, 4, 1
9430         ldr     x1, [x1, #:got_lo12:gMultiPageProgEn]
9431         strb    w2, [x1]
9432         ubfx    x2, x0, 8, 3
9433         ldr     x1, [x25, #:got_lo12:gFlashInterfaceMode]
9434         strb    w2, [x1]
9435         ldr     x6, [x3, #:got_lo12:gpReadRetrial]
9436         str     xzr, [x6]
9437         tbz     x0, 6, .L1217
9438         adrp    x1, :got:g_retryMode
9439         ldrb    w0, [x4,19]
9440         ldr     x1, [x1, #:got_lo12:g_retryMode]
9441         strb    w0, [x1]
9442         adrp    x1, :got:g_maxRegNum
9443         ldr     x26, [x26, #:got_lo12:gReadRetryInfo]
9444         ldr     x2, [x1, #:got_lo12:g_maxRegNum]
9445         ldrb    w5, [x26,1]
9446         strb    w5, [x2]
9447         adrp    x2, :got:g_maxRetryCount
9448         ldrb    w7, [x26,2]
9449         ldr     x5, [x2, #:got_lo12:g_maxRetryCount]
9450         strb    w7, [x5]
9451         sub     w5, w0, #1
9452         uxtb    w5, w5
9453         cmp     w5, 5
9454         bhi     .L1218
9455         adrp    x1, :got:HynixReadRetrial
9456         sub     w0, w0, #5
9457         uxtb    w0, w0
9458         ldr     x1, [x1, #:got_lo12:HynixReadRetrial]
9459         cmp     w0, 1
9460         str     x1, [x6]
9461         bhi     .L1217
9462         adrp    x0, :got:gNandcDumpWriteEn
9463         mov     w1, 1
9464         ldr     x0, [x0, #:got_lo12:gNandcDumpWriteEn]
9465         str     w1, [x0]
9466         b       .L1217
9467 .L1218:
9468         sub     w5, w0, #17
9469         uxtb    w5, w5
9470         cmp     w5, 1
9471         bhi     .L1220
9472         adrp    x0, :got:MicronReadRetrial
9473         ldr     x0, [x0, #:got_lo12:MicronReadRetrial]
9474         b       .L1265
9475 .L1220:
9476         sub     w5, w0, #65
9477         uxtb    w5, w5
9478         cmp     w5, 1
9479         bls     .L1236
9480         cmp     w0, 33
9481         bne     .L1221
9482 .L1236:
9483         adrp    x0, :got:ToshibaReadRetrial
9484         ldr     x3, [x3, #:got_lo12:gpReadRetrial]
9485         ldr     x0, [x0, #:got_lo12:ToshibaReadRetrial]
9486         str     x0, [x3]
9487         mov     w0, 4
9488         ldr     x1, [x1, #:got_lo12:g_maxRegNum]
9489         strb    w0, [x1]
9490         mov     w0, 7
9491         ldr     x2, [x2, #:got_lo12:g_maxRetryCount]
9492         strb    w0, [x2]
9493         b       .L1217
9494 .L1221:
9495         sub     w5, w0, #67
9496         uxtb    w5, w5
9497         cmp     w5, 1
9498         sub     w5, w0, #34
9499         cset    w7, ls
9500         uxtb    w5, w5
9501         cmp     w5, 1
9502         bls     .L1237
9503         cbz     w7, .L1223
9504 .L1237:
9505         adrp    x5, :got:ToshibaReadRetrial
9506         ldr     x3, [x3, #:got_lo12:gpReadRetrial]
9507         cmp     w0, 35
9508         ldr     x5, [x5, #:got_lo12:ToshibaReadRetrial]
9509         str     x5, [x3]
9510         ldr     x2, [x2, #:got_lo12:g_maxRetryCount]
9511         beq     .L1225
9512         cmp     w0, 68
9513         beq     .L1225
9514         mov     w0, 7
9515         b       .L1264
9516 .L1225:
9517         mov     w0, 17
9518 .L1264:
9519         strb    w0, [x2]
9520         mov     w0, 4
9521         ldr     x1, [x1, #:got_lo12:g_maxRegNum]
9522         cbnz    w7, .L1266
9523         mov     w0, 5
9524 .L1266:
9525         strb    w0, [x1]
9526         b       .L1217
9527 .L1223:
9528         cmp     w0, 49
9529         bne     .L1217
9530         adrp    x0, :got:SamsungReadRetrial
9531         ldr     x0, [x0, #:got_lo12:SamsungReadRetrial]
9532 .L1265:
9533         str     x0, [x6]
9534 .L1217:
9535         ldrh    w2, [x4,10]
9536         ldrb    w1, [x4,12]
9537         ldrb    w0, [x4,18]
9538         sdiv    w1, w2, w1
9539         bl      BuildFlashLsbPageTable
9540         bl      FlashDieInfoInit
9541         ldr     x25, [x25, #:got_lo12:gFlashInterfaceMode]
9542         ldrb    w0, [x25]
9543         tst     w0, 6
9544         beq     .L1228
9545         ldr     x23, [x23, #:got_lo12:gFlashToggleModeEn]
9546         ldrb    w1, [x23]
9547         cbnz    w1, .L1229
9548         tbnz    x0, 0, .L1228
9549 .L1229:
9550         adrp    x1, :got:gNandFlashInfoBlockAddr
9551         mov     w0, 0
9552         ldr     x1, [x1, #:got_lo12:gNandFlashInfoBlockAddr]
9553         ldr     w1, [x1]
9554         bl      FlashDdrParaScan
9555 .L1228:
9556         ldr     x0, [x19, #:got_lo12:gpNandParaInfo]
9557         ldr     x0, [x0]
9558         ldrb    w0, [x0,20]
9559         bl      FlashBchSel
9560         adrp    x0, :got:gNandIDataBuf
9561         ldr     x0, [x0, #:got_lo12:gNandIDataBuf]
9562         bl      FlashReadIdbDataRaw
9563         cbnz    w0, .L1230
9564         ldr     x0, [x29,104]
9565         ldr     x24, [x0, #:got_lo12:gNandIDBResBlkNumSaveInFlash]
9566         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9567         ldrb    w1, [x24]
9568         ldrb    w2, [x0]
9569         cmp     w2, w1
9570         bls     .L1231
9571         strb    w1, [x0]
9572 .L1231:
9573         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9574         ldrb    w0, [x0]
9575         cmp     w0, 15
9576         bhi     .L1232
9577 .L1230:
9578         ldr     x0, [x20, #:got_lo12:gNandIDBResBlkNum]
9579         mov     w1, 16
9580         strb    w1, [x0]
9581 .L1232:
9582         mov     w0, 18928
9583         movk    w0, 0x2, lsl 16
9584         bl      FlashTimingCfg
9585         bl      FlashPrintInfo
9586         ldr     x19, [x19, #:got_lo12:gpNandParaInfo]
9587         adrp    x0, :got:gNandPhyInfo
9588         ldr     x4, [x19]
9589         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
9590         ldrb    w1, [x4,12]
9591         strh    w1, [x0,8]
9592         ldrh    w3, [x4,14]
9593         ldrb    w1, [x4,7]
9594         str     w1, [x0,4]
9595         ldr     x21, [x21, #:got_lo12:IDByte]
9596         ldr     w1, [x21]
9597         str     w1, [x0]
9598         adrp    x1, :got:gNandMaxDie
9599         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
9600         ldrb    w1, [x1]
9601         strh    w1, [x0,10]
9602         ldrb    w1, [x4,13]
9603         strh    w1, [x0,12]
9604         strh    w3, [x0,14]
9605         ldrh    w1, [x4,10]
9606         strh    w1, [x0,16]
9607         ldrb    w2, [x4,12]
9608         ldrh    w1, [x4,10]
9609         sdiv    w1, w1, w2
9610         strh    w1, [x0,18]
9611         ldrb    w2, [x4,9]
9612         strh    w2, [x0,20]
9613         ldrh    w5, [x4,10]
9614         ldrb    w1, [x4,9]
9615         mul     w1, w1, w5
9616         mov     w5, 512
9617         strh    w5, [x0,24]
9618         uxth    w1, w1
9619         strh    w1, [x0,22]
9620         ldr     x20, [x20, #:got_lo12:gNandIDBResBlkNum]
9621         ldrb    w5, [x20]
9622         strh    w5, [x0,26]
9623         ldr     x22, [x22, #:got_lo12:g_slc2KBNand]
9624         ldrb    w5, [x22]
9625         cmp     w5, 1
9626         bne     .L1233
9627         lsl     w1, w1, 1
9628         mov     w5, 16
9629         lsr     w3, w3, 1
9630         lsl     w2, w2, 1
9631         strh    w1, [x0,22]
9632         mov     w1, 8
9633         strb    w5, [x20]
9634         strh    w3, [x0,14]
9635         strh    w2, [x0,20]
9636         strh    w1, [x0,26]
9637 .L1233:
9638         ldrb    w0, [x4,20]
9639         bl      FlashBchSel
9640         bl      FlashSuspend
9641         mov     w0, 0
9642         b       .L1199
9643 .L1234:
9644         mov     w0, -2
9645 .L1199:
9646         ldp     x19, x20, [sp,16]
9647         ldp     x21, x22, [sp,32]
9648         ldp     x23, x24, [sp,48]
9649         ldp     x25, x26, [sp,64]
9650         ldp     x27, x28, [sp,80]
9651         ldp     x29, x30, [sp], 112
9652         ret
9653         .size   FlashInit, .-FlashInit
9654         .align  2
9655         .global FlashPageProgMsbFFData
9656         .type   FlashPageProgMsbFFData, %function
9657 FlashPageProgMsbFFData:
9658         stp     x29, x30, [sp, -80]!
9659         adrp    x3, :got:gpNandParaInfo
9660         add     x29, sp, 0
9661         stp     x21, x22, [sp,32]
9662         uxtb    w22, w0
9663         ldr     x0, [x3, #:got_lo12:gpNandParaInfo]
9664         stp     x19, x20, [sp,16]
9665         stp     x23, x24, [sp,48]
9666         stp     x25, x26, [sp,64]
9667         uxtb    w19, w2
9668         mov     x20, x3
9669         ldr     x0, [x0]
9670         ldrb    w2, [x0,19]
9671         cmp     w2, 35
9672         cset    w4, eq
9673         cmp     w2, 68
9674         cset    w0, eq
9675         orr     w4, w4, w0
9676         cbnz    w4, .L1272
9677         sub     w2, w2, #5
9678         uxtb    w2, w2
9679         cmp     w2, 1
9680         bhi     .L1267
9681 .L1272:
9682         mov     w21, w1
9683         adrp    x24, :got:mlcPageToSlcPageTbl
9684         mov     w25, 65535
9685         adrp    x26, :got:gFlashPageBuffer1
9686 .L1270:
9687         ldr     x0, [x20, #:got_lo12:gpNandParaInfo]
9688         ldr     x0, [x0]
9689         ldrh    w0, [x0,10]
9690         cmp     w0, w19
9691         bls     .L1267
9692         ldr     x0, [x24, #:got_lo12:mlcPageToSlcPageTbl]
9693         ldrh    w0, [x0,w19,sxtw 1]
9694         cmp     w0, w25
9695         bne     .L1267
9696         ldr     x23, [x26, #:got_lo12:gFlashPageBuffer1]
9697         mov     w1, 255
9698         mov     w2, 32768
9699         ldr     x0, [x23]
9700         bl      ftl_memset
9701         ldr     x2, [x23]
9702         add     w1, w19, w21
9703         mov     w0, w22
9704         mov     x3, 0
9705         add     w19, w19, 1
9706         bl      FlashProgPage
9707         uxtb    w19, w19
9708         b       .L1270
9709 .L1267:
9710         ldp     x19, x20, [sp,16]
9711         ldp     x21, x22, [sp,32]
9712         ldp     x23, x24, [sp,48]
9713         ldp     x25, x26, [sp,64]
9714         ldp     x29, x30, [sp], 80
9715         ret
9716         .size   FlashPageProgMsbFFData, .-FlashPageProgMsbFFData
9717         .align  2
9718         .global FlashProgPageDp
9719         .type   FlashProgPageDp, %function
9720 FlashProgPageDp:
9721         stp     x29, x30, [sp, -80]!
9722         add     x29, sp, 0
9723         stp     x19, x20, [sp,16]
9724         uxtb    w19, w0
9725         adrp    x0, :got:gNandParaInfo
9726         stp     x23, x24, [sp,48]
9727         stp     x21, x22, [sp,32]
9728         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
9729         mov     w20, w1
9730         str     x5, [x29,72]
9731         mov     x24, x2
9732         mov     x21, x3
9733         mov     x23, x4
9734         ldrb    w22, [x0,9]
9735         mov     w0, w19
9736         bl      NandcWaitFlashReady
9737         mov     w0, w19
9738         bl      NandcFlashCs
9739         mov     w0, w19
9740         mov     w1, w20
9741         bl      FlashProgFirstCmd
9742         mov     w2, w22
9743         mov     x3, x24
9744         mov     x4, x21
9745         mov     w0, w19
9746         mov     w1, 1
9747         adrp    x21, :got:gBlockPageAlignSize
9748         bl      NandcXferData
9749         mov     w1, w20
9750         mov     w0, w19
9751         bl      FlashProgDpFirstCmd
9752         mov     w0, w19
9753         bl      NandcWaitFlashReady
9754         ldr     x21, [x21, #:got_lo12:gBlockPageAlignSize]
9755         mov     w0, w19
9756         ldr     w1, [x21]
9757         add     w1, w20, w1
9758         bl      FlashProgDpSecondCmd
9759         ldr     x5, [x29,72]
9760         mov     w2, w22
9761         mov     x3, x23
9762         mov     w0, w19
9763         mov     x4, x5
9764         mov     w1, 1
9765         bl      NandcXferData
9766         ldr     w1, [x21]
9767         mov     w0, w19
9768         add     w1, w20, w1
9769         bl      FlashProgSecondCmd
9770         mov     w0, w19
9771         bl      NandcWaitFlashReady
9772         mov     w1, w20
9773         mov     w0, w19
9774         bl      FlashReadStatus
9775         mov     w20, w0
9776         mov     w0, w19
9777         bl      NandcFlashDeCs
9778         and     w0, w20, 1
9779         ldp     x19, x20, [sp,16]
9780         ldp     x21, x22, [sp,32]
9781         ldp     x23, x24, [sp,48]
9782         ldp     x29, x30, [sp], 80
9783         ret
9784         .size   FlashProgPageDp, .-FlashProgPageDp
9785         .align  2
9786         .global FlashReadPages
9787         .type   FlashReadPages, %function
9788 FlashReadPages:
9789         stp     x29, x30, [sp, -160]!
9790         add     x29, sp, 0
9791         stp     x23, x24, [sp,48]
9792         mov     x24, x0
9793         adrp    x0, :got:gNandParaInfo
9794         stp     x21, x22, [sp,32]
9795         stp     x25, x26, [sp,64]
9796         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
9797         adrp    x26, :got:gNandRandomizer
9798         stp     x27, x28, [sp,80]
9799         stp     x19, x20, [sp,16]
9800         mov     w23, 0
9801         mov     w27, w1
9802         ldrb    w0, [x0,9]
9803         mov     w22, w23
9804         str     w0, [x29,140]
9805         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
9806         str     w2, [x29,132]
9807         ldrb    w0, [x0]
9808         str     w0, [x29,136]
9809         adrp    x0, .LC92
9810         add     x0, x0, :lo12:.LC92
9811         str     x0, [x29,112]
9812         adrp    x0, .LC93
9813         add     x0, x0, :lo12:.LC93
9814         str     x0, [x29,104]
9815         adrp    x0, .LC91
9816         add     x0, x0, :lo12:.LC91
9817         str     x0, [x29,96]
9818 .L1278:
9819         cmp     w22, w27
9820         bcs     .L1346
9821         mov     w25, 56
9822         ldr     w1, [x29,132]
9823         sub     w4, w27, w22
9824         add     x2, x29, 156
9825         umull   x25, w22, w25
9826         add     x3, x29, 152
9827         add     x21, x24, x25
9828         mov     x0, x21
9829         bl      LogAddr2PhyAddr
9830         mov     w19, w0
9831         adrp    x0, :got:gNandMaxDie
9832         ldr     w1, [x29,152]
9833         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
9834         ldrb    w0, [x0]
9835         cmp     w1, w0
9836         bcc     .L1279
9837         mov     w0, -1
9838         str     w0, [x24,x25]
9839         b       .L1280
9840 .L1279:
9841         adrp    x0, :got:DieCsIndex
9842         ldr     x0, [x0, #:got_lo12:DieCsIndex]
9843         ldrb    w20, [x0,w1,uxtw]
9844         adrp    x0, :got:gMultiPageReadEn
9845         ldr     x0, [x0, #:got_lo12:gMultiPageReadEn]
9846         ldrb    w0, [x0]
9847         cmp     w0, wzr
9848         mov     w0, w20
9849         csel    w19, w19, wzr, ne
9850         bl      NandcWaitFlashReady
9851         adrp    x1, :got:gpNandParaInfo
9852         str     x1, [x29,120]
9853         ldr     x0, [x1, #:got_lo12:gpNandParaInfo]
9854         ldr     x0, [x0]
9855         ldrb    w0, [x0,19]
9856         sub     w0, w0, #1
9857         uxtb    w0, w0
9858         cmp     w0, 5
9859         bhi     .L1282
9860         adrp    x2, :got:gReadRetryInfo
9861         sxtw    x1, w20
9862         ldr     x2, [x2, #:got_lo12:gReadRetryInfo]
9863         add     x0, x2, x1
9864         ldrb    w3, [x0,12]
9865         adrp    x0, :got:read_retry_cur_offset
9866         ldr     x0, [x0, #:got_lo12:read_retry_cur_offset]
9867         ldrb    w0, [x0,x1]
9868         cmp     w0, w3
9869         beq     .L1282
9870         ldrb    w1, [x2,1]
9871         mov     w0, w20
9872         add     x2, x2, 4
9873         bl      HynixSetRRPara
9874 .L1282:
9875         mov     w0, w20
9876         bl      NandcFlashCs
9877 .L1283:
9878         cmp     w20, 255
9879         ldr     w1, [x29,156]
9880         bne     .L1315
9881         cmn     w1, #1
9882         cset    w0, ne
9883         cbz     w0, .L1311
9884 .L1315:
9885         cbz     w19, .L1286
9886         adrp    x0, :got:gBlockPageAlignSize
9887         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
9888         ldr     w2, [x0]
9889         mov     w0, w20
9890         add     w2, w1, w2
9891         bl      FlashReadDpCmd
9892         b       .L1287
9893 .L1286:
9894         mov     w0, w20
9895         bl      FlashReadCmd
9896         b       .L1287
9897 .L1311:
9898         mov     w19, w0
9899 .L1284:
9900         ldrb    w2, [x29,140]
9901         mov     w1, 0
9902         ldr     x3, [x21,8]
9903         mov     w0, w20
9904         ldr     x4, [x21,16]
9905         bl      NandcXferData
9906         mov     w28, w0
9907         mov     w0, 0
9908         bl      NandcReadDontCaseBusyEn
9909         cmn     w28, #1
9910         bne     .L1288
9911         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
9912         ldrb    w1, [x0]
9913         cbz     w1, .L1288
9914         strb    wzr, [x0]
9915         mov     w19, 0
9916         b       .L1283
9917 .L1288:
9918         cbz     w19, .L1289
9919         adrp    x0, :got:gBlockPageAlignSize
9920         ldr     w1, [x29,156]
9921         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
9922         ldr     w2, [x0]
9923         mov     w0, w20
9924         add     w1, w2, w1
9925         bl      FlashReadDpDataOutCmd
9926         add     w0, w22, 1
9927         mov     w4, 56
9928         ldrb    w2, [x29,140]
9929         mov     w1, 0
9930         umull   x4, w0, w4
9931         mov     w0, w20
9932         add     x4, x24, x4
9933         ldr     x3, [x4,8]
9934         ldr     x4, [x4,16]
9935         bl      NandcXferData
9936         cmn     w0, #1
9937         mov     w23, w0
9938         csel    w19, w19, wzr, ne
9939 .L1289:
9940         mov     w0, w20
9941         bl      NandcFlashDeCs
9942         ldr     x0, [x26, #:got_lo12:gNandRandomizer]
9943         cmn     w28, #1
9944         ldrb    w1, [x29,136]
9945         strb    w1, [x0]
9946         bne     .L1296
9947         adrp    x0, :got:gFlashToggleModeEn
9948         ldr     x0, [x0, #:got_lo12:gFlashToggleModeEn]
9949         ldrb    w0, [x0]
9950         cbnz    w0, .L1291
9951 .L1295:
9952         adrp    x0, :got:gpReadRetrial
9953         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
9954         ldr     x19, [x0]
9955         cbnz    x19, .L1292
9956         b       .L1347
9957 .L1291:
9958         adrp    x0, :got:gpNandc
9959         ldr     w1, [x29,156]
9960         ldr     x2, [x21,8]
9961         mov     w4, 1
9962         ldr     x3, [x21,16]
9963         ldr     x0, [x0, #:got_lo12:gpNandc]
9964         ldr     x0, [x0]
9965         ldr     w19, [x0,304]
9966         mov     w0, w20
9967         bl      FlashDdrTunningRead
9968         cmn     w0, #1
9969         mov     w28, w0
9970         beq     .L1294
9971         adrp    x1, :got:gNandFlashEccBits
9972         ldr     x1, [x1, #:got_lo12:gNandFlashEccBits]
9973         ldrb    w0, [x1]
9974         cmp     w28, w0, lsr 1
9975         bls     .L1313
9976 .L1294:
9977         lsr     w0, w19, 8
9978         bl      NandcSetDdrPara
9979         cmn     w28, #1
9980         beq     .L1295
9981         b       .L1313
9982 .L1292:
9983         ldr     w1, [x29,156]
9984         mov     w0, w20
9985         ldr     x2, [x21,8]
9986         ldr     x3, [x21,16]
9987         blr     x19
9988         cmn     w0, #1
9989         mov     w28, w0
9990         mov     w19, 0
9991         bne     .L1297
9992         ldr     x0, [x29,120]
9993         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
9994         ldr     x0, [x0]
9995         ldrb    w0, [x0,19]
9996         sub     w0, w0, #1
9997         uxtb    w0, w0
9998         cmp     w0, 5
9999         bhi     .L1298
10000         adrp    x2, :got:gReadRetryInfo
10001         mov     w0, w20
10002         mov     w3, w19
10003         ldr     x2, [x2, #:got_lo12:gReadRetryInfo]
10004         add     x2, x2, 4
10005         ldrb    w1, [x2,-3]
10006         bl      HynixSetRRPara
10007 .L1298:
10008         ldr     w1, [x29,156]
10009         mov     w0, w20
10010         ldr     x2, [x21,8]
10011         mov     w19, 0
10012         ldr     x3, [x21,16]
10013         bl      FlashReadRawPage
10014         mov     w28, w0
10015         adrp    x2, :got:gNandFlashEccBits
10016         ldr     x0, [x29,96]
10017         ldr     w1, [x21,4]
10018         mov     w3, w28
10019         ldr     x2, [x2, #:got_lo12:gNandFlashEccBits]
10020         ldrb    w2, [x2]
10021         bl      printk
10022         b       .L1297
10023 .L1347:
10024         ldr     w1, [x29,156]
10025         mov     w0, w20
10026         ldr     x2, [x21,8]
10027         ldr     x3, [x21,16]
10028         bl      FlashReadRawPage
10029         mov     w28, w0
10030         b       .L1297
10031 .L1313:
10032         mov     w19, 0
10033 .L1296:
10034         adrp    x0, :got:gNandFlashEccBits
10035         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
10036         ldrb    w0, [x0]
10037         add     w0, w0, w0, lsl 1
10038         cmp     w28, w0, lsr 2
10039         bls     .L1297
10040         adrp    x0, :got:gpReadRetrial
10041         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
10042         ldr     x0, [x0]
10043         cmp     x0, xzr
10044         mov     w0, 256
10045         csel    w28, w28, w0, ne
10046 .L1297:
10047         cmp     w28, 256
10048         beq     .L1316
10049         cmn     w28, #1
10050         bne     .L1299
10051 .L1316:
10052         str     w28, [x24,x25]
10053         b       .L1301
10054 .L1299:
10055         str     wzr, [x24,x25]
10056 .L1301:
10057         ldr     w3, [x24,x25]
10058         cmn     w3, #1
10059         bne     .L1303
10060         adrp    x2, :got:gNandFlashEccBits
10061         ldr     w1, [x21,4]
10062         ldr     x0, [x29,112]
10063         ldr     x2, [x2, #:got_lo12:gNandFlashEccBits]
10064         ldrb    w2, [x2]
10065         bl      printk
10066         ldr     x1, [x21,16]
10067         cbz     x1, .L1303
10068         mov     w2, 4
10069         ldr     x0, [x29,104]
10070         mov     w3, w2
10071         bl      rknand_print_hex
10072 .L1303:
10073         cbz     w19, .L1305
10074         adrp    x0, :got:gNandFlashEccBits
10075         ldr     x0, [x0, #:got_lo12:gNandFlashEccBits]
10076         ldrb    w0, [x0]
10077         add     w0, w0, w0, lsl 1
10078         cmp     w23, w0, lsr 2
10079         bls     .L1306
10080         adrp    x0, :got:gpReadRetrial
10081         ldr     x0, [x0, #:got_lo12:gpReadRetrial]
10082         ldr     x0, [x0]
10083         cmp     x0, xzr
10084         mov     w0, 256
10085         csel    w23, w23, w0, ne
10086 .L1306:
10087         add     w0, w22, 1
10088         mov     w1, 56
10089         cmp     w23, 256
10090         umull   x0, w0, w1
10091         beq     .L1317
10092         cmn     w23, #1
10093         bne     .L1307
10094 .L1317:
10095         str     w23, [x24,x0]
10096         b       .L1305
10097 .L1307:
10098         str     wzr, [x24,x0]
10099 .L1305:
10100         add     w22, w22, w19
10101 .L1280:
10102         add     w22, w22, 1
10103         b       .L1278
10104 .L1287:
10105         mov     w0, w20
10106         bl      NandcWaitFlashReady
10107         cbz     w19, .L1284
10108         ldr     w1, [x29,156]
10109         mov     w0, w20
10110         bl      FlashReadDpDataOutCmd
10111         b       .L1284
10112 .L1346:
10113         mov     w0, 0
10114         ldp     x19, x20, [sp,16]
10115         ldp     x21, x22, [sp,32]
10116         ldp     x23, x24, [sp,48]
10117         ldp     x25, x26, [sp,64]
10118         ldp     x27, x28, [sp,80]
10119         ldp     x29, x30, [sp], 160
10120         ret
10121         .size   FlashReadPages, .-FlashReadPages
10122         .align  2
10123         .global FlashLoadFactorBbt
10124         .type   FlashLoadFactorBbt, %function
10125 FlashLoadFactorBbt:
10126         adrp    x0, :got:gNandPhyInfo
10127         mov     w2, 16
10128         stp     x29, x30, [sp, -192]!
10129         add     x29, sp, 0
10130         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
10131         stp     x23, x24, [sp,48]
10132         stp     x25, x26, [sp,64]
10133         stp     x27, x28, [sp,80]
10134         stp     x19, x20, [sp,16]
10135         stp     x21, x22, [sp,32]
10136         adrp    x23, :got:FbbtBlk
10137         adrp    x24, :got:gFlashSpareBuffer
10138         ldrh    w1, [x0,12]
10139         mov     w27, -1
10140         ldrh    w21, [x0,14]
10141         adrp    x26, .LC94
10142         ldr     x0, [x23, #:got_lo12:FbbtBlk]
10143         add     x28, x29, 136
10144         add     x26, x26, :lo12:.LC94
10145         mul     w21, w1, w21
10146         mov     w1, 0
10147         bl      ftl_memset
10148         uxth    w21, w21
10149         ldr     x0, [x24, #:got_lo12:gFlashSpareBuffer]
10150         add     w25, w21, w27
10151         mov     w3, 0
10152         str     xzr, [x29,144]
10153         mov     w19, w3
10154         uxth    w25, w25
10155         ldr     x0, [x0]
10156         str     x0, [x29,152]
10157         sub     w0, w21, #16
10158         str     w0, [x29,124]
10159 .L1349:
10160         adrp    x22, :got:gNandMaxDie
10161         ldr     x1, [x22, #:got_lo12:gNandMaxDie]
10162         ldrb    w1, [x1]
10163         cmp     w1, w19
10164         bls     .L1359
10165         mul     w4, w19, w21
10166         mov     w20, w25
10167         mov     w5, 61664
10168 .L1350:
10169         ldr     w0, [x29,124]
10170         cmp     w20, w0
10171         ble     .L1352
10172         add     w1, w4, w20
10173         mov     x0, x28
10174         lsl     w1, w1, 10
10175         str     w1, [x28,4]
10176         mov     w1, 1
10177         str     x5, [x29,96]
10178         mov     w2, w1
10179         str     x3, [x29,104]
10180         str     x4, [x29,112]
10181         bl      FlashReadPages
10182         ldr     w0, [x28]
10183         ldr     x4, [x29,112]
10184         cmn     w0, #1
10185         ldr     x3, [x29,104]
10186         ldr     x5, [x29,96]
10187         beq     .L1351
10188         ldr     x0, [x24, #:got_lo12:gFlashSpareBuffer]
10189         ldr     x0, [x0]
10190         ldrh    w0, [x0]
10191         cmp     w0, w5
10192         bne     .L1351
10193         mov     x0, x26
10194         mov     w1, w19
10195         mov     w2, w20
10196         str     x3, [x29,112]
10197         bl      printk
10198         ldr     x3, [x29,112]
10199         ldr     x0, [x23, #:got_lo12:FbbtBlk]
10200         add     w3, w3, 1
10201         strh    w20, [x0,w19,sxtw 1]
10202         uxth    w3, w3
10203         b       .L1352
10204 .L1351:
10205         sub     w20, w20, #1
10206         uxth    w20, w20
10207         b       .L1350
10208 .L1352:
10209         ldr     x22, [x22, #:got_lo12:gNandMaxDie]
10210         add     w19, w19, 1
10211         uxtb    w19, w19
10212         ldrb    w1, [x22]
10213         cmp     w1, w3
10214         csel    w27, w27, wzr, ne
10215         b       .L1349
10216 .L1359:
10217         mov     w0, w27
10218         ldp     x19, x20, [sp,16]
10219         ldp     x21, x22, [sp,32]
10220         ldp     x23, x24, [sp,48]
10221         ldp     x25, x26, [sp,64]
10222         ldp     x27, x28, [sp,80]
10223         ldp     x29, x30, [sp], 192
10224         ret
10225         .size   FlashLoadFactorBbt, .-FlashLoadFactorBbt
10226         .align  2
10227         .global FtlLoadFactoryBbt
10228         .type   FtlLoadFactoryBbt, %function
10229 FtlLoadFactoryBbt:
10230         adrp    x1, :got:p_sys_data_buf
10231         adrp    x0, :got:req_sys
10232         stp     x29, x30, [sp, -112]!
10233         add     x29, sp, 0
10234         ldr     x1, [x1, #:got_lo12:p_sys_data_buf]
10235         stp     x21, x22, [sp,32]
10236         stp     x25, x26, [sp,64]
10237         stp     x27, x28, [sp,80]
10238         stp     x19, x20, [sp,16]
10239         stp     x23, x24, [sp,48]
10240         ldr     x2, [x0, #:got_lo12:req_sys]
10241         adrp    x20, :got:gBbtInfo
10242         ldr     x1, [x1]
10243         mov     w21, 0
10244         mov     x22, x0
10245         adrp    x25, :got:c_ftl_nand_die_num
10246         str     x1, [x2,8]
10247         adrp    x1, :got:p_sys_spare_buf
10248         mov     w26, -1
10249         adrp    x27, :got:c_ftl_nand_blks_per_die
10250         mov     w28, 61664
10251         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
10252         ldr     x24, [x1]
10253         str     x24, [x2,16]
10254         ldr     x20, [x20, #:got_lo12:gBbtInfo]
10255 .L1361:
10256         ldr     x0, [x25, #:got_lo12:c_ftl_nand_die_num]
10257         ldrh    w0, [x0]
10258         cmp     w21, w0
10259         bcs     .L1370
10260         strh    w26, [x20,12]
10261         adrp    x3, :got:c_ftl_nand_blks_per_die
10262         ldr     x0, [x27, #:got_lo12:c_ftl_nand_blks_per_die]
10263         ldrh    w19, [x0]
10264         sub     w19, w19, #1
10265         uxth    w19, w19
10266 .L1362:
10267         ldr     x0, [x3, #:got_lo12:c_ftl_nand_blks_per_die]
10268         ldrh    w1, [x0]
10269         sub     w0, w1, #16
10270         cmp     w19, w0
10271         ble     .L1364
10272         ldr     x23, [x22, #:got_lo12:req_sys]
10273         madd    w1, w21, w1, w19
10274         mov     x0, x23
10275         str     x3, [x29,104]
10276         lsl     w1, w1, 10
10277         str     w1, [x23,4]
10278         mov     w1, 1
10279         mov     w2, w1
10280         bl      FlashReadPages
10281         ldr     w0, [x23]
10282         ldr     x3, [x29,104]
10283         cmn     w0, #1
10284         beq     .L1363
10285         ldrh    w0, [x24]
10286         cmp     w0, w28
10287         bne     .L1363
10288         strh    w19, [x20,12]
10289         b       .L1364
10290 .L1363:
10291         sub     w19, w19, #1
10292         uxth    w19, w19
10293         b       .L1362
10294 .L1364:
10295         add     w21, w21, 1
10296         add     x20, x20, 2
10297         b       .L1361
10298 .L1370:
10299         mov     w0, 0
10300         ldp     x19, x20, [sp,16]
10301         ldp     x21, x22, [sp,32]
10302         ldp     x23, x24, [sp,48]
10303         ldp     x25, x26, [sp,64]
10304         ldp     x27, x28, [sp,80]
10305         ldp     x29, x30, [sp], 112
10306         ret
10307         .size   FtlLoadFactoryBbt, .-FtlLoadFactoryBbt
10308         .align  2
10309         .global FtlGetLastWrittenPage
10310         .type   FtlGetLastWrittenPage, %function
10311 FtlGetLastWrittenPage:
10312         stp     x29, x30, [sp, -208]!
10313         cmp     w1, 1
10314         add     x29, sp, 0
10315         stp     x23, x24, [sp,48]
10316         stp     x19, x20, [sp,16]
10317         stp     x21, x22, [sp,32]
10318         stp     x25, x26, [sp,64]
10319         mov     w24, w1
10320         bne     .L1372
10321         adrp    x1, :got:c_ftl_nand_page_pre_slc_blk
10322         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
10323         b       .L1382
10324 .L1372:
10325         adrp    x1, :got:c_ftl_nand_page_pre_blk
10326         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
10327 .L1382:
10328         ldrh    w19, [x1]
10329         lsl     w21, w0, 10
10330         add     x22, x29, 88
10331         mov     w1, 1
10332         sub     w19, w19, #1
10333         mov     w2, w24
10334         str     xzr, [x29,96]
10335         add     x25, x29, 144
10336         sxth    w19, w19
10337         str     x25, [x29,104]
10338         orr     w0, w19, w21
10339         str     w0, [x29,92]
10340         mov     x0, x22
10341         bl      FlashReadPages
10342         ldr     w0, [x29,144]
10343         cmn     w0, #1
10344         bne     .L1374
10345         mov     w23, 0
10346         mov     w26, 2
10347 .L1375:
10348         cmp     w23, w19
10349         bgt     .L1374
10350         add     w3, w23, w19
10351         mov     w1, 1
10352         mov     w2, w24
10353         sdiv    w20, w3, w26
10354         sxth    w0, w20
10355         orr     w0, w0, w21
10356         str     w0, [x22,4]
10357         mov     x0, x22
10358         bl      FlashReadPages
10359         ldr     w0, [x25]
10360         cmn     w0, #1
10361         bne     .L1376
10362         ldr     w0, [x25,4]
10363         cmn     w0, #1
10364         bne     .L1376
10365         ldr     w0, [x22]
10366         cmn     w0, #1
10367         beq     .L1376
10368         sub     w19, w20, #1
10369         sxth    w19, w19
10370         b       .L1375
10371 .L1376:
10372         add     w20, w20, 1
10373         sxth    w23, w20
10374         b       .L1375
10375 .L1374:
10376         mov     w0, w19
10377         ldp     x19, x20, [sp,16]
10378         ldp     x21, x22, [sp,32]
10379         ldp     x23, x24, [sp,48]
10380         ldp     x25, x26, [sp,64]
10381         ldp     x29, x30, [sp], 208
10382         ret
10383         .size   FtlGetLastWrittenPage, .-FtlGetLastWrittenPage
10384         .align  2
10385         .global FtlLoadBbt
10386         .type   FtlLoadBbt, %function
10387 FtlLoadBbt:
10388         stp     x29, x30, [sp, -64]!
10389         adrp    x0, :got:p_sys_spare_buf
10390         add     x29, sp, 0
10391         stp     x21, x22, [sp,32]
10392         adrp    x21, :got:req_sys
10393         stp     x23, x24, [sp,48]
10394         stp     x19, x20, [sp,16]
10395         ldr     x1, [x21, #:got_lo12:req_sys]
10396         adrp    x23, :got:c_ftl_nand_blks_per_die
10397         mov     w24, 61649
10398         str     xzr, [x1,8]
10399         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
10400         ldr     x20, [x0]
10401         str     x20, [x1,16]
10402         bl      FtlBbtMemInit
10403         ldr     x0, [x23, #:got_lo12:c_ftl_nand_blks_per_die]
10404         ldrh    w19, [x0]
10405         sub     w19, w19, #1
10406         uxth    w19, w19
10407 .L1384:
10408         ldr     x0, [x23, #:got_lo12:c_ftl_nand_blks_per_die]
10409         ldrh    w0, [x0]
10410         sub     w0, w0, #48
10411         cmp     w19, w0
10412         ble     .L1387
10413         ldr     x22, [x21, #:got_lo12:req_sys]
10414         lsl     w0, w19, 10
10415         mov     w1, 1
10416         mov     w2, w1
10417         str     w0, [x22,4]
10418         mov     x0, x22
10419         bl      FlashReadPages
10420         ldr     w0, [x22]
10421         cmn     w0, #1
10422         bne     .L1385
10423         ldr     w0, [x22,4]
10424         mov     w1, 1
10425         mov     w2, w1
10426         add     w0, w0, 1
10427         str     w0, [x22,4]
10428         mov     x0, x22
10429         bl      FlashReadPages
10430 .L1385:
10431         ldr     x0, [x21, #:got_lo12:req_sys]
10432         ldr     w0, [x0]
10433         cmn     w0, #1
10434         beq     .L1386
10435         ldrh    w0, [x20]
10436         cmp     w0, w24
10437         bne     .L1386
10438         adrp    x0, :got:gBbtInfo
10439         ldr     w1, [x20,4]
10440         ldr     x0, [x0, #:got_lo12:gBbtInfo]
10441         str     w1, [x0,8]
10442         strh    w19, [x0]
10443         ldrh    w1, [x20,8]
10444         strh    w1, [x0,4]
10445         b       .L1387
10446 .L1386:
10447         sub     w19, w19, #1
10448         uxth    w19, w19
10449         b       .L1384
10450 .L1387:
10451         adrp    x19, :got:gBbtInfo
10452         mov     w2, 65535
10453         mov     w0, -1
10454         ldr     x22, [x19, #:got_lo12:gBbtInfo]
10455         ldrh    w1, [x22]
10456         cmp     w1, w2
10457         beq     .L1389
10458         ldrh    w1, [x22,4]
10459         cmp     w1, w2
10460         beq     .L1391
10461         ldr     x23, [x21, #:got_lo12:req_sys]
10462         lsl     w1, w1, 10
10463         mov     x0, x23
10464         str     w1, [x23,4]
10465         mov     w1, 1
10466         mov     w2, w1
10467         bl      FlashReadPages
10468         ldr     w0, [x23]
10469         cmn     w0, #1
10470         beq     .L1391
10471         ldrh    w1, [x20]
10472         mov     w0, 61649
10473         cmp     w1, w0
10474         bne     .L1391
10475         ldr     w0, [x20,4]
10476         ldr     w1, [x22,8]
10477         cmp     w0, w1
10478         bls     .L1391
10479         str     w0, [x22,8]
10480         ldrh    w1, [x22,4]
10481         ldrh    w0, [x20,8]
10482         strh    w1, [x22]
10483         strh    w0, [x22,4]
10484 .L1391:
10485         ldr     x23, [x19, #:got_lo12:gBbtInfo]
10486         mov     w1, 1
10487         adrp    x24, :got:p_sys_data_buf
10488         ldrh    w0, [x23]
10489         bl      FtlGetLastWrittenPage
10490         sxth    w22, w0
10491         add     w0, w0, 1
10492         strh    w0, [x23,2]
10493 .L1393:
10494         tbnz    w22, #31, .L1398
10495         ldr     x0, [x19, #:got_lo12:gBbtInfo]
10496         mov     w1, 1
10497         ldr     x23, [x21, #:got_lo12:req_sys]
10498         mov     w2, w1
10499         ldrh    w0, [x0]
10500         orr     w0, w22, w0, lsl 10
10501         str     w0, [x23,4]
10502         ldr     x0, [x24, #:got_lo12:p_sys_data_buf]
10503         ldr     x0, [x0]
10504         str     x0, [x23,8]
10505         mov     x0, x23
10506         bl      FlashReadPages
10507         ldr     w0, [x23]
10508         cmn     w0, #1
10509         beq     .L1394
10510 .L1398:
10511         ldr     x0, [x19, #:got_lo12:gBbtInfo]
10512         ldrh    w1, [x20,10]
10513         strh    w1, [x0,6]
10514         mov     w1, 65535
10515         ldrh    w0, [x20,12]
10516         cmp     w0, w1
10517         bne     .L1395
10518         b       .L1396
10519 .L1394:
10520         sub     w22, w22, #1
10521         sxth    w22, w22
10522         b       .L1393
10523 .L1395:
10524         adrp    x1, :got:c_ftl_nand_sys_blks_per_plane
10525         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
10526         ldr     w2, [x1]
10527         cmp     w0, w2
10528         beq     .L1396
10529         adrp    x1, :got:c_ftl_nand_blk_pre_plane
10530         ldr     x1, [x1, #:got_lo12:c_ftl_nand_blk_pre_plane]
10531         ldrh    w1, [x1]
10532         lsr     w1, w1, 2
10533         cmp     w0, w1
10534         bcs     .L1396
10535         cmp     w2, w1
10536         bcs     .L1396
10537         bl      FtlSysBlkNumInit
10538 .L1396:
10539         mov     x20, 0
10540         adrp    x22, :got:c_ftl_nand_die_num
10541         adrp    x23, :got:c_ftl_nand_bbm_buf_size
10542 .L1399:
10543         ldr     x0, [x22, #:got_lo12:c_ftl_nand_die_num]
10544         mov     w1, w20
10545         add     x20, x20, 1
10546         ldrh    w0, [x0]
10547         cmp     w1, w0
10548         bcs     .L1414
10549         ldr     x0, [x23, #:got_lo12:c_ftl_nand_bbm_buf_size]
10550         ldr     x3, [x21, #:got_lo12:req_sys]
10551         ldrh    w2, [x0]
10552         ldr     x0, [x19, #:got_lo12:gBbtInfo]
10553         ldr     x3, [x3,8]
10554         add     x0, x0, x20, lsl 3
10555         mul     w1, w1, w2
10556         lsl     w2, w2, 2
10557         ldr     x0, [x0,24]
10558         add     x1, x3, x1, lsl 2
10559         bl      ftl_memcpy
10560         b       .L1399
10561 .L1414:
10562         mov     w0, 0
10563 .L1389:
10564         ldp     x19, x20, [sp,16]
10565         ldp     x21, x22, [sp,32]
10566         ldp     x23, x24, [sp,48]
10567         ldp     x29, x30, [sp], 64
10568         ret
10569         .size   FtlLoadBbt, .-FtlLoadBbt
10570         .align  2
10571         .global load_l2p_region
10572         .type   load_l2p_region, %function
10573 load_l2p_region:
10574         stp     x29, x30, [sp, -48]!
10575         uxth    x1, w1
10576         add     x29, sp, 0
10577         stp     x21, x22, [sp,32]
10578         uxth    w21, w0
10579         adrp    x0, :got:p_map_region_ppn_table
10580         stp     x19, x20, [sp,16]
10581         ubfiz   x2, x21, 2, 16
10582         adrp    x20, :got:p_l2p_ram_map
10583         ldr     x0, [x0, #:got_lo12:p_map_region_ppn_table]
10584         ldr     x0, [x0]
10585         ldr     w22, [x0,x2]
10586         cbnz    w22, .L1416
10587         ldr     x20, [x20, #:got_lo12:p_l2p_ram_map]
10588         adrp    x2, :got:c_ftl_nand_byte_pre_page
10589         lsl     x19, x1, 4
10590         mov     w1, 255
10591         ldr     x0, [x20]
10592         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
10593         add     x0, x0, x19
10594         ldrh    w2, [x2]
10595         ldr     x0, [x0,8]
10596         bl      ftl_memset
10597         ldr     x0, [x20]
10598         strh    w21, [x0,x19]
10599         ldr     x1, [x20]
10600         add     x19, x1, x19
10601         str     w22, [x19,4]
10602         b       .L1417
10603 .L1416:
10604         adrp    x0, :got:req_sys
10605         lsl     x19, x1, 4
10606         ldr     x0, [x0, #:got_lo12:req_sys]
10607         str     w22, [x0,4]
10608         ldr     x20, [x20, #:got_lo12:p_l2p_ram_map]
10609         ldr     x1, [x20]
10610         add     x1, x1, x19
10611         ldr     x1, [x1,8]
10612         str     x1, [x0,8]
10613         adrp    x1, :got:p_sys_spare_buf
10614         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
10615         ldr     x1, [x1]
10616         str     x1, [x0,16]
10617         mov     w1, 1
10618         mov     w2, w1
10619         bl      FlashReadPages
10620         ldr     x0, [x20]
10621         add     x0, x0, x19
10622         str     wzr, [x0,4]
10623         ldr     x0, [x20]
10624         strh    w21, [x0,x19]
10625 .L1417:
10626         mov     w0, 0
10627         ldp     x19, x20, [sp,16]
10628         ldp     x21, x22, [sp,32]
10629         ldp     x29, x30, [sp], 48
10630         ret
10631         .size   load_l2p_region, .-load_l2p_region
10632         .align  2
10633         .global FtlVendorPartRead
10634         .type   FtlVendorPartRead, %function
10635 FtlVendorPartRead:
10636         stp     x29, x30, [sp, -176]!
10637         add     x29, sp, 0
10638         stp     x21, x22, [sp,32]
10639         mov     w22, w0
10640         adrp    x0, :got:c_ftl_nand_sec_pre_page_shift
10641         stp     x19, x20, [sp,16]
10642         stp     x23, x24, [sp,48]
10643         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
10644         mov     w21, w1
10645         stp     x25, x26, [sp,64]
10646         stp     x27, x28, [sp,80]
10647         add     w1, w22, w1
10648         mov     x23, x2
10649         ldrh    w3, [x0]
10650         adrp    x0, :got:c_ftl_vendor_part_size
10651         mov     w20, -1
10652         ldr     x0, [x0, #:got_lo12:c_ftl_vendor_part_size]
10653         ldrh    w0, [x0]
10654         cmp     w1, w0
10655         bhi     .L1419
10656         lsr     w24, w22, w3
10657         mov     w20, 0
10658         add     x25, x29, 120
10659         adrp    x26, :got:p_vendor_data_buf
10660 .L1420:
10661         cbz     w21, .L1419
10662         adrp    x0, :got:p_vendor_region_ppn_table
10663         ldr     x0, [x0, #:got_lo12:p_vendor_region_ppn_table]
10664         ldr     x0, [x0]
10665         ldr     w1, [x0,w24,uxtw 2]
10666         adrp    x0, :got:c_ftl_nand_sec_pre_page
10667         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
10668         ldrh    w19, [x0]
10669         uxth    w0, w21
10670         udiv    w27, w22, w19
10671         msub    w27, w27, w19, w22
10672         sub     w19, w19, w27
10673         uxth    w19, w19
10674         cmp     w19, w21
10675         csel    w19, w0, w19, hi
10676         lsl     w28, w19, 9
10677         cbz     w1, .L1422
10678         ldr     x5, [x26, #:got_lo12:p_vendor_data_buf]
10679         ubfiz   x27, x27, 9, 16
10680         str     w1, [x25,4]
10681         mov     w1, 1
10682         mov     w2, w1
10683         str     x5, [x29,104]
10684         ldr     x0, [x5]
10685         str     x0, [x25,8]
10686         mov     x0, x25
10687         str     xzr, [x25,16]
10688         bl      FlashReadPages
10689         ldr     x5, [x29,104]
10690         mov     w2, w28
10691         ldr     w0, [x25]
10692         ldr     x1, [x5]
10693         cmn     w0, #1
10694         mov     x0, x23
10695         csinv   w20, w20, wzr, ne
10696         add     x1, x1, x27
10697         bl      ftl_memcpy
10698         b       .L1424
10699 .L1422:
10700         mov     x0, x23
10701         mov     w2, w28
10702         bl      ftl_memset
10703 .L1424:
10704         add     w24, w24, 1
10705         sub     w21, w21, w19
10706         add     w22, w22, w19
10707         add     x23, x23, x28, sxtw
10708         b       .L1420
10709 .L1419:
10710         mov     w0, w20
10711         ldp     x19, x20, [sp,16]
10712         ldp     x21, x22, [sp,32]
10713         ldp     x23, x24, [sp,48]
10714         ldp     x25, x26, [sp,64]
10715         ldp     x27, x28, [sp,80]
10716         ldp     x29, x30, [sp], 176
10717         ret
10718         .size   FtlVendorPartRead, .-FtlVendorPartRead
10719         .align  2
10720         .global FtlLoadEctTbl
10721         .type   FtlLoadEctTbl, %function
10722 FtlLoadEctTbl:
10723         stp     x29, x30, [sp, -32]!
10724         mov     w0, 64
10725         add     x29, sp, 0
10726         stp     x19, x20, [sp,16]
10727         adrp    x20, :got:g_ect_tbl_info_size
10728         adrp    x19, :got:gp_ect_tbl_info
10729         ldr     x20, [x20, #:got_lo12:g_ect_tbl_info_size]
10730         ldr     x19, [x19, #:got_lo12:gp_ect_tbl_info]
10731         ldrh    w1, [x20]
10732         ldr     x2, [x19]
10733         bl      FtlVendorPartRead
10734         ldr     x0, [x19]
10735         ldr     w1, [x0]
10736         mov     w0, 17221
10737         movk    w0, 0x4254, lsl 16
10738         cmp     w1, w0
10739         beq     .L1428
10740         adrp    x0, .LC72
10741         adrp    x1, .LC95
10742         add     x1, x1, :lo12:.LC95
10743         add     x0, x0, :lo12:.LC72
10744         bl      printk
10745         ldrh    w2, [x20]
10746         mov     w1, 0
10747         ldr     x0, [x19]
10748         lsl     w2, w2, 9
10749         bl      ftl_memset
10750 .L1428:
10751         mov     w0, 0
10752         ldp     x19, x20, [sp,16]
10753         ldp     x29, x30, [sp], 32
10754         ret
10755         .size   FtlLoadEctTbl, .-FtlLoadEctTbl
10756         .align  2
10757         .global Ftl_load_ext_data
10758         .type   Ftl_load_ext_data, %function
10759 Ftl_load_ext_data:
10760         stp     x29, x30, [sp, -32]!
10761         mov     w1, 1
10762         mov     w0, 0
10763         add     x29, sp, 0
10764         stp     x19, x20, [sp,16]
10765         adrp    x19, :got:g_sys_ext_data
10766         ldr     x20, [x19, #:got_lo12:g_sys_ext_data]
10767         mov     x2, x20
10768         bl      FtlVendorPartRead
10769         ldr     w1, [x20]
10770         mov     w0, 19539
10771         movk    w0, 0x4654, lsl 16
10772         cmp     w1, w0
10773         beq     .L1430
10774         mov     x0, x20
10775         mov     w1, 0
10776         mov     w2, 512
10777         bl      ftl_memset
10778         mov     w0, 19539
10779         movk    w0, 0x4654, lsl 16
10780         str     w0, [x20]
10781 .L1430:
10782         ldr     x0, [x19, #:got_lo12:g_sys_ext_data]
10783         mov     w1, 19539
10784         movk    w1, 0x4654, lsl 16
10785         adrp    x20, :got:g_totle_slc_erase_count
10786         ldr     w2, [x0]
10787         cmp     w2, w1
10788         bne     .L1431
10789         adrp    x1, :got:g_totle_write_sector
10790         ldr     w2, [x0,88]
10791         ldr     x1, [x1, #:got_lo12:g_totle_write_sector]
10792         str     w2, [x1]
10793         adrp    x1, :got:g_totle_read_sector
10794         ldr     w2, [x0,92]
10795         ldr     x1, [x1, #:got_lo12:g_totle_read_sector]
10796         str     w2, [x1]
10797         adrp    x1, :got:g_totle_gc_page_count
10798         ldr     w2, [x0,8]
10799         ldr     x1, [x1, #:got_lo12:g_totle_gc_page_count]
10800         str     w2, [x1]
10801         adrp    x1, :got:g_totle_write_page_count
10802         ldr     w2, [x0,12]
10803         ldr     x1, [x1, #:got_lo12:g_totle_write_page_count]
10804         str     w2, [x1]
10805         adrp    x1, :got:g_totle_read_page_count
10806         ldr     w2, [x0,16]
10807         ldr     x1, [x1, #:got_lo12:g_totle_read_page_count]
10808         str     w2, [x1]
10809         adrp    x1, :got:g_totle_l2p_write_count
10810         ldr     w2, [x0,20]
10811         ldr     x1, [x1, #:got_lo12:g_totle_l2p_write_count]
10812         str     w2, [x1]
10813         ldr     w2, [x0,28]
10814         ldr     x1, [x20, #:got_lo12:g_totle_slc_erase_count]
10815         str     w2, [x1]
10816         adrp    x1, :got:g_totle_sys_slc_erase_count
10817         ldr     w2, [x0,32]
10818         ldr     x1, [x1, #:got_lo12:g_totle_sys_slc_erase_count]
10819         str     w2, [x1]
10820         adrp    x1, :got:g_totle_discard_page_count
10821         ldr     w2, [x0,36]
10822         ldr     x1, [x1, #:got_lo12:g_totle_discard_page_count]
10823         str     w2, [x1]
10824         adrp    x1, :got:g_totle_cache_write_count
10825         ldr     w2, [x0,40]
10826         ldr     x1, [x1, #:got_lo12:g_totle_cache_write_count]
10827         str     w2, [x1]
10828         adrp    x1, :got:g_max_erase_count
10829         ldr     w2, [x0,44]
10830         ldr     x1, [x1, #:got_lo12:g_max_erase_count]
10831         str     w2, [x1]
10832         adrp    x1, :got:g_min_erase_count
10833         ldr     x1, [x1, #:got_lo12:g_min_erase_count]
10834         ldr     w2, [x0,48]
10835         ldr     w0, [x0,60]
10836         str     w2, [x1]
10837         adrp    x1, :got:g_all_blk_used_slc_mode
10838         ldr     x1, [x1, #:got_lo12:g_all_blk_used_slc_mode]
10839         str     w0, [x1]
10840 .L1431:
10841         adrp    x0, :got:g_SlcPartLbaEndSector
10842         ldr     x0, [x0, #:got_lo12:g_SlcPartLbaEndSector]
10843         str     wzr, [x0]
10844         mov     w0, 34661
10845         movk    w0, 0x1234, lsl 16
10846         ldr     x19, [x19, #:got_lo12:g_sys_ext_data]
10847         ldr     w1, [x19,68]
10848         cmp     w1, w0
10849         bne     .L1432
10850         adrp    x0, :got:g_inkDie_check_enable
10851         mov     w1, 1
10852         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
10853         str     w1, [x0]
10854         adrp    x0, .LC72
10855         adrp    x1, .LC96
10856         add     x0, x0, :lo12:.LC72
10857         add     x1, x1, :lo12:.LC96
10858         bl      printk
10859 .L1432:
10860         adrp    x0, :got:c_mlc_erase_count_value
10861         ldr     x2, [x20, #:got_lo12:g_totle_slc_erase_count]
10862         adrp    x3, :got:g_totle_avg_erase_count
10863         ldr     x0, [x0, #:got_lo12:c_mlc_erase_count_value]
10864         ldr     x3, [x3, #:got_lo12:g_totle_avg_erase_count]
10865         ldrh    w1, [x0]
10866         adrp    x0, :got:g_totle_mlc_erase_count
10867         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
10868         ldr     w4, [x0]
10869         ldr     w0, [x2]
10870         madd    w0, w1, w4, w0
10871         adrp    x1, :got:c_ftl_nand_data_blks_per_plane
10872         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_blks_per_plane]
10873         ldrh    w1, [x1]
10874         udiv    w0, w0, w1
10875         str     w0, [x3]
10876         ldp     x19, x20, [sp,16]
10877         ldp     x29, x30, [sp], 32
10878         ret
10879         .size   Ftl_load_ext_data, .-Ftl_load_ext_data
10880         .align  2
10881         .global FtlScanSysBlk
10882         .type   FtlScanSysBlk, %function
10883 FtlScanSysBlk:
10884         stp     x29, x30, [sp, -160]!
10885         mov     w1, 0
10886         add     x29, sp, 0
10887         stp     x19, x20, [sp,16]
10888         adrp    x19, :got:g_totle_map_block
10889         stp     x21, x22, [sp,32]
10890         stp     x23, x24, [sp,48]
10891         ldr     x0, [x19, #:got_lo12:g_totle_map_block]
10892         adrp    x24, :got:p_map_block_ver_table
10893         stp     x27, x28, [sp,80]
10894         stp     x25, x26, [sp,64]
10895         adrp    x28, :got:g_totle_vendor_block
10896         strh    wzr, [x0]
10897         adrp    x25, :got:c_ftl_nand_max_map_blks
10898         adrp    x21, :got:p_map_block_table
10899         adrp    x27, :got:c_ftl_nand_max_vendor_blks
10900         adrp    x23, :got:p_vendor_block_ver_table
10901         ldr     x0, [x28, #:got_lo12:g_totle_vendor_block]
10902         strh    wzr, [x0]
10903         ldr     x20, [x25, #:got_lo12:c_ftl_nand_max_map_blks]
10904         ldr     x0, [x24, #:got_lo12:p_map_block_ver_table]
10905         ldr     w2, [x20]
10906         ldr     x0, [x0]
10907         lsl     w2, w2, 2
10908         bl      ftl_memset
10909         ldr     x0, [x21, #:got_lo12:p_map_block_table]
10910         mov     w1, 0
10911         ldr     w2, [x20]
10912         adrp    x20, :got:p_vendor_block_table
10913         ldr     x0, [x0]
10914         lsl     w2, w2, 1
10915         bl      ftl_memset
10916         ldr     x22, [x27, #:got_lo12:c_ftl_nand_max_vendor_blks]
10917         ldr     x0, [x23, #:got_lo12:p_vendor_block_ver_table]
10918         mov     w1, 0
10919         ldrh    w2, [x22]
10920         ldr     x0, [x0]
10921         lsl     w2, w2, 2
10922         bl      ftl_memset
10923         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
10924         mov     w1, 0
10925         ldrh    w2, [x22]
10926         adrp    x22, :got:gSysInfo
10927         ldr     x0, [x0]
10928         lsl     w2, w2, 1
10929         bl      ftl_memset
10930         ldr     x0, [x22, #:got_lo12:gSysInfo]
10931         mov     w1, 255
10932         mov     w2, 12
10933         bl      ftl_memset
10934         str     x28, [x29,144]
10935         adrp    x0, :got:c_ftl_nand_data_blks_per_plane
10936         str     x25, [x29,136]
10937         str     x27, [x29,128]
10938         str     x22, [x29,120]
10939         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_blks_per_plane]
10940         ldrh    w0, [x0]
10941         str     w0, [x29,156]
10942 .L1434:
10943         adrp    x0, :got:c_ftl_nand_blk_pre_plane
10944         ldr     w1, [x29,156]
10945         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
10946         ldrh    w0, [x0]
10947         cmp     w0, w1
10948         bls     .L1510
10949         mov     w22, 0
10950         adrp    x25, :got:c_ftl_nand_byte_pre_oob
10951         mov     w27, w22
10952         mov     w26, 4
10953 .L1477:
10954         adrp    x0, :got:c_ftl_nand_planes_num
10955         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
10956         ldrh    w0, [x0]
10957         cmp     w0, w27
10958         bls     .L1511
10959         adrp    x0, :got:p_plane_order_table
10960         ldrh    w1, [x29,156]
10961         ldr     x0, [x0, #:got_lo12:p_plane_order_table]
10962         ldrb    w0, [x0,w27,sxtw]
10963         bl      V2P_block
10964         uxth    w28, w0
10965         bl      FtlBbmIsBadBlock
10966         cbnz    w0, .L1435
10967         adrp    x1, :got:req_read
10968         mov     w0, 56
10969         lsl     w28, w28, 10
10970         umull   x0, w22, w0
10971         ldr     x2, [x1, #:got_lo12:req_read]
10972         ldr     x1, [x2]
10973         add     x1, x1, x0
10974         str     w28, [x1,4]
10975         ldr     x1, [x2]
10976         adrp    x2, :got:p_gc_spare_buf
10977         add     x1, x1, x0
10978         str     xzr, [x1,8]
10979         ldr     x0, [x25, #:got_lo12:c_ftl_nand_byte_pre_oob]
10980         ldr     x2, [x2, #:got_lo12:p_gc_spare_buf]
10981         ldrh    w0, [x0]
10982         ldr     x2, [x2]
10983         mul     w0, w22, w0
10984         add     w22, w22, 1
10985         sdiv    w0, w0, w26
10986         uxth    w22, w22
10987         add     x0, x2, x0, sxtw 2
10988         str     x0, [x1,16]
10989 .L1435:
10990         add     w27, w27, 1
10991         uxth    w27, w27
10992         b       .L1477
10993 .L1511:
10994         adrp    x0, :got:req_read
10995         mov     w1, w22
10996         mov     w2, 1
10997         mov     x27, 0
10998         mov     w28, 65535
10999         ldr     x0, [x0, #:got_lo12:req_read]
11000         ldr     x0, [x0]
11001         bl      FlashReadPages
11002 .L1437:
11003         cmp     w22, w27, uxth
11004         bls     .L1512
11005         mov     x0, 56
11006         mul     x5, x27, x0
11007         adrp    x0, :got:req_read
11008         ldr     x6, [x0, #:got_lo12:req_read]
11009         ldr     x2, [x6]
11010         add     x1, x2, x5
11011         ldr     w7, [x2,x5]
11012         ldr     w0, [x1,4]
11013         cmn     w7, #1
11014         ldr     x26, [x1,16]
11015         ubfx    x25, x0, 10, 16
11016         bne     .L1439
11017         add     w0, w0, 1
11018         str     w0, [x1,4]
11019         mov     w1, 1
11020         str     x7, [x29,96]
11021         ldr     x0, [x6]
11022         mov     w2, w1
11023         str     x6, [x29,104]
11024         add     x0, x0, x5
11025         str     x5, [x29,112]
11026         bl      FlashReadPages
11027         ldrh    w0, [x26]
11028         ldr     x5, [x29,112]
11029         cmp     w0, w28
11030         ldr     x6, [x29,104]
11031         ldr     x7, [x29,96]
11032         bne     .L1439
11033         ldr     x0, [x6]
11034         str     w7, [x0,x5]
11035 .L1439:
11036         adrp    x0, :got:req_read
11037         ldr     x0, [x0, #:got_lo12:req_read]
11038         ldr     x0, [x0]
11039         ldr     w0, [x0,x5]
11040         cmn     w0, #1
11041         beq     .L1441
11042         adrp    x0, :got:g_GlobalSysVersion
11043         ldr     x0, [x0, #:got_lo12:g_GlobalSysVersion]
11044         ldr     w0, [x0]
11045         cmn     w0, #1
11046         beq     .L1442
11047         ldr     w1, [x26,4]
11048         cmp     w0, w1
11049         bhi     .L1443
11050 .L1442:
11051         ldr     w0, [x26,4]
11052         cmn     w0, #1
11053         beq     .L1443
11054         adrp    x1, :got:g_GlobalSysVersion
11055         add     w0, w0, 1
11056         ldr     x1, [x1, #:got_lo12:g_GlobalSysVersion]
11057         str     w0, [x1]
11058 .L1443:
11059         ldrh    w0, [x26]
11060         mov     w1, 61604
11061         cmp     w0, w1
11062         beq     .L1445
11063         bhi     .L1446
11064         mov     w1, 61574
11065         cmp     w0, w1
11066         bne     .L1444
11067         ldr     x0, [x29,128]
11068         ldr     x6, [x23, #:got_lo12:p_vendor_block_ver_table]
11069         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_vendor_blks]
11070         ldr     x6, [x6]
11071         ldrh    w5, [x0]
11072         ldr     x0, [x29,144]
11073         sub     w1, w5, #1
11074         ldr     x0, [x0, #:got_lo12:g_totle_vendor_block]
11075         sxth    w2, w1
11076         ldrh    w0, [x0]
11077         sub     w1, w1, w0
11078         b       .L1462
11079 .L1446:
11080         mov     w1, 61634
11081         cmp     w0, w1
11082         beq     .L1448
11083         cmp     w0, w28
11084         bne     .L1444
11085         mov     w0, w25
11086         mov     w1, 0
11087         b       .L1507
11088 .L1448:
11089         ldr     x0, [x29,136]
11090         ldr     x6, [x24, #:got_lo12:p_map_block_ver_table]
11091         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_map_blks]
11092         ldr     x6, [x6]
11093         ldr     w5, [x0]
11094         ldr     x0, [x19, #:got_lo12:g_totle_map_block]
11095         uxth    w1, w5
11096         ldrh    w0, [x0]
11097         sub     w2, w1, #1
11098         sub     w1, w1, w0
11099         sxth    w2, w2
11100         sub     w1, w1, #1
11101         sxth    w1, w1
11102 .L1450:
11103         cmp     w2, w1
11104         ble     .L1513
11105         sbfiz   x7, x2, 2, 32
11106         ldr     w10, [x26,4]
11107         sxth    x8, w2
11108         ldr     w9, [x6,x7]
11109         cmp     w10, w9
11110         bls     .L1451
11111         ldr     w1, [x6]
11112         cbnz    w1, .L1452
11113         cmp     w0, w5
11114         bne     .L1453
11115 .L1452:
11116         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11117         mov     w1, 1
11118         str     x8, [x29,96]
11119         str     x2, [x29,104]
11120         ldr     x0, [x0]
11121         str     x7, [x29,112]
11122         ldrh    w0, [x0]
11123         bl      FtlFreeSysBlkQueueIn
11124         ldr     x7, [x29,112]
11125         ldr     x2, [x29,104]
11126         ldr     x8, [x29,96]
11127         b       .L1454
11128 .L1453:
11129         ldr     x1, [x19, #:got_lo12:g_totle_map_block]
11130         add     w0, w0, 1
11131         strh    w0, [x1]
11132 .L1454:
11133         mov     w0, 0
11134 .L1455:
11135         cmp     w0, w2
11136         beq     .L1514
11137         ldr     x1, [x24, #:got_lo12:p_map_block_ver_table]
11138         ldr     x6, [x1]
11139         sxtw    x1, w0
11140         lsl     x5, x1, 2
11141         lsl     x1, x1, 1
11142         add     x9, x6, x5
11143         add     w0, w0, 1
11144         sxth    w0, w0
11145         ldr     w9, [x9,4]
11146         str     w9, [x6,x5]
11147         ldr     x5, [x21, #:got_lo12:p_map_block_table]
11148         ldr     x5, [x5]
11149         add     x6, x5, x1
11150         ldrh    w6, [x6,2]
11151         strh    w6, [x5,x1]
11152         b       .L1455
11153 .L1514:
11154         ldr     x0, [x24, #:got_lo12:p_map_block_ver_table]
11155         ldr     w1, [x26,4]
11156         ldr     x0, [x0]
11157         str     w1, [x0,x7]
11158         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11159         ldr     x0, [x0]
11160         strh    w25, [x0,x8,lsl 1]
11161         tbz     w2, #31, .L1506
11162         b       .L1441
11163 .L1451:
11164         sub     w2, w2, #1
11165         sxth    w2, w2
11166         b       .L1450
11167 .L1513:
11168         tbz     w2, #31, .L1461
11169         b       .L1441
11170 .L1506:
11171         ldr     x1, [x29,136]
11172         ldr     x0, [x19, #:got_lo12:g_totle_map_block]
11173         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_map_blks]
11174         ldrh    w0, [x0]
11175         ldr     w1, [x1]
11176         sub     w1, w1, w0
11177         sub     w1, w1, #1
11178         cmp     w2, w1, sxth
11179         bgt     .L1444
11180 .L1461:
11181         ldr     x1, [x19, #:got_lo12:g_totle_map_block]
11182         add     w0, w0, 1
11183         sxtw    x2, w2
11184         strh    w0, [x1]
11185         ldr     w1, [x26,4]
11186         ldr     x0, [x24, #:got_lo12:p_map_block_ver_table]
11187         ldr     x0, [x0]
11188         str     w1, [x0,x2,lsl 2]
11189         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11190         b       .L1508
11191 .L1470:
11192         sbfiz   x7, x2, 2, 32
11193         ldr     w10, [x26,4]
11194         sxth    x8, w2
11195         ldr     w9, [x6,x7]
11196         cmp     w10, w9
11197         bhi     .L1515
11198         sub     w2, w2, #1
11199         sxth    w2, w2
11200 .L1462:
11201         cmp     w2, w1
11202         bgt     .L1470
11203         b       .L1469
11204 .L1515:
11205         ldr     w1, [x6]
11206         cbnz    w1, .L1464
11207         cmp     w0, w5
11208         bne     .L1465
11209 .L1464:
11210         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11211         mov     w1, 1
11212         str     x8, [x29,96]
11213         str     x7, [x29,104]
11214         ldr     x0, [x0]
11215         str     x2, [x29,112]
11216         ldrh    w0, [x0]
11217         bl      FtlFreeSysBlkQueueIn
11218         ldr     x2, [x29,112]
11219         ldr     x7, [x29,104]
11220         ldr     x8, [x29,96]
11221         b       .L1466
11222 .L1465:
11223         ldr     x1, [x29,144]
11224         add     w0, w0, 1
11225         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
11226         strh    w0, [x1]
11227 .L1466:
11228         mov     w0, 0
11229 .L1467:
11230         cmp     w0, w2
11231         beq     .L1516
11232         ldr     x1, [x23, #:got_lo12:p_vendor_block_ver_table]
11233         ldr     x6, [x1]
11234         sxtw    x1, w0
11235         lsl     x5, x1, 2
11236         lsl     x1, x1, 1
11237         add     x9, x6, x5
11238         add     w0, w0, 1
11239         sxth    w0, w0
11240         ldr     w9, [x9,4]
11241         str     w9, [x6,x5]
11242         ldr     x5, [x20, #:got_lo12:p_vendor_block_table]
11243         ldr     x5, [x5]
11244         add     x6, x5, x1
11245         ldrh    w6, [x6,2]
11246         strh    w6, [x5,x1]
11247         b       .L1467
11248 .L1516:
11249         ldr     x0, [x23, #:got_lo12:p_vendor_block_ver_table]
11250         ldr     w1, [x26,4]
11251         ldr     x0, [x0]
11252         str     w1, [x0,x7]
11253         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11254         ldr     x0, [x0]
11255         strh    w25, [x0,x8,lsl 1]
11256 .L1469:
11257         tbnz    w2, #31, .L1441
11258         ldr     x0, [x29,144]
11259         ldr     x5, [x0, #:got_lo12:g_totle_vendor_block]
11260         ldr     x0, [x29,128]
11261         ldrh    w1, [x5]
11262         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_vendor_blks]
11263         ldrh    w0, [x0]
11264         sub     w0, w0, #1
11265         sub     w0, w0, w1
11266         cmp     w2, w0, sxth
11267         bgt     .L1444
11268         add     w1, w1, 1
11269         strh    w1, [x5]
11270         sxtw    x2, w2
11271         ldr     w1, [x26,4]
11272         ldr     x0, [x23, #:got_lo12:p_vendor_block_ver_table]
11273         ldr     x0, [x0]
11274         str     w1, [x0,x2,lsl 2]
11275         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11276 .L1508:
11277         ldr     x0, [x0]
11278         strh    w25, [x0,x2,lsl 1]
11279         b       .L1444
11280 .L1445:
11281         ldr     x0, [x29,120]
11282         ldr     x0, [x0, #:got_lo12:gSysInfo]
11283         ldrh    w1, [x0]
11284         cmp     w1, w28
11285         beq     .L1509
11286         ldrh    w0, [x0,4]
11287         cmp     w0, w28
11288         beq     .L1474
11289         mov     w1, 1
11290         bl      FtlFreeSysBlkQueueIn
11291 .L1474:
11292         ldr     x0, [x29,120]
11293         ldr     w1, [x26,4]
11294         ldr     x0, [x0, #:got_lo12:gSysInfo]
11295         ldr     w2, [x0,8]
11296         cmp     w2, w1
11297         bcs     .L1475
11298         ldrh    w1, [x0]
11299         strh    w1, [x0,4]
11300 .L1509:
11301         ldr     w1, [x26,4]
11302         strh    w25, [x0]
11303         str     w1, [x0,8]
11304         b       .L1444
11305 .L1475:
11306         strh    w25, [x0,4]
11307         b       .L1444
11308 .L1441:
11309         mov     w0, w25
11310         mov     w1, 1
11311 .L1507:
11312         bl      FtlFreeSysBlkQueueIn
11313 .L1444:
11314         add     x27, x27, 1
11315         b       .L1437
11316 .L1512:
11317         ldr     w0, [x29,156]
11318         add     w26, w0, 1
11319         uxth    w0, w26
11320         str     w0, [x29,156]
11321         b       .L1434
11322 .L1510:
11323         ldr     x0, [x21, #:got_lo12:p_map_block_table]
11324         ldr     x1, [x0]
11325         ldrh    w0, [x1]
11326         cbz     w0, .L1478
11327 .L1481:
11328         ldr     x0, [x20, #:got_lo12:p_vendor_block_table]
11329         ldr     x2, [x0]
11330         ldrh    w0, [x2]
11331         cbz     w0, .L1479
11332         b       .L1501
11333 .L1478:
11334         ldr     x19, [x19, #:got_lo12:g_totle_map_block]
11335         ldrh    w2, [x19]
11336         cbz     w2, .L1481
11337         ldr     x2, [x29,136]
11338         ldr     x2, [x2, #:got_lo12:c_ftl_nand_max_map_blks]
11339         ldr     w2, [x2]
11340 .L1482:
11341         cmp     w0, w2
11342         bcs     .L1481
11343         ldrh    w3, [x1,w0,sxtw 1]
11344         cbz     w3, .L1483
11345         mov     w6, w0
11346 .L1484:
11347         ldr     x1, [x29,136]
11348         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_map_blks]
11349         ldr     w1, [x1]
11350         cmp     w0, w1
11351         bcs     .L1481
11352         ldr     x3, [x21, #:got_lo12:p_map_block_table]
11353         sxtw    x5, w0
11354         sub     w1, w0, w6
11355         lsl     x2, x5, 1
11356         add     w0, w0, 1
11357         ldr     x4, [x3]
11358         sxtw    x1, w1
11359         sxth    w0, w0
11360         ldrh    w7, [x4,x2]
11361         strh    w7, [x4,x1,lsl 1]
11362         ldr     x4, [x24, #:got_lo12:p_map_block_ver_table]
11363         ldr     x4, [x4]
11364         ldr     w5, [x4,x5,lsl 2]
11365         str     w5, [x4,x1,lsl 2]
11366         ldr     x1, [x3]
11367         strh    wzr, [x1,x2]
11368         b       .L1484
11369 .L1483:
11370         add     w0, w0, 1
11371         sxth    w0, w0
11372         b       .L1482
11373 .L1479:
11374         ldr     x1, [x29,144]
11375         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
11376         ldrh    w1, [x1]
11377         cbz     w1, .L1501
11378         ldr     x1, [x29,128]
11379         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
11380         ldrh    w1, [x1]
11381 .L1487:
11382         cmp     w0, w1
11383         mov     w6, w0
11384         bge     .L1501
11385         ldrh    w3, [x2,w0,sxtw 1]
11386         cbz     w3, .L1488
11387 .L1489:
11388         ldr     x1, [x29,128]
11389         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
11390         ldrh    w1, [x1]
11391         cmp     w0, w1
11392         bge     .L1501
11393         ldr     x3, [x20, #:got_lo12:p_vendor_block_table]
11394         sxtw    x5, w0
11395         sub     w1, w0, w6
11396         lsl     x2, x5, 1
11397         add     w0, w0, 1
11398         ldr     x4, [x3]
11399         sxtw    x1, w1
11400         sxth    w0, w0
11401         ldrh    w7, [x4,x2]
11402         strh    w7, [x4,x1,lsl 1]
11403         ldr     x4, [x23, #:got_lo12:p_vendor_block_ver_table]
11404         ldr     x4, [x4]
11405         ldr     w5, [x4,x5,lsl 2]
11406         str     w5, [x4,x1,lsl 2]
11407         ldr     x1, [x3]
11408         strh    wzr, [x1,x2]
11409         b       .L1489
11410 .L1488:
11411         add     w0, w0, 1
11412         sxth    w0, w0
11413         b       .L1487
11414 .L1501:
11415         mov     w0, 0
11416         ldp     x19, x20, [sp,16]
11417         ldp     x21, x22, [sp,32]
11418         ldp     x23, x24, [sp,48]
11419         ldp     x25, x26, [sp,64]
11420         ldp     x27, x28, [sp,80]
11421         ldp     x29, x30, [sp], 160
11422         ret
11423         .size   FtlScanSysBlk, .-FtlScanSysBlk
11424         .align  2
11425         .global FtlLoadSysInfo
11426         .type   FtlLoadSysInfo, %function
11427 FtlLoadSysInfo:
11428         stp     x29, x30, [sp, -80]!
11429         adrp    x0, :got:p_sys_spare_buf
11430         add     x29, sp, 0
11431         stp     x19, x20, [sp,16]
11432         adrp    x20, :got:req_sys
11433         str     x25, [sp,64]
11434         stp     x21, x22, [sp,32]
11435         stp     x23, x24, [sp,48]
11436         ldr     x1, [x20, #:got_lo12:req_sys]
11437         adrp    x22, :got:c_ftl_nand_data_blks_per_plane
11438         adrp    x21, :got:p_valid_page_count_table
11439         adrp    x23, :got:gSysInfo
11440         str     xzr, [x1,8]
11441         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
11442         ldr     x0, [x0]
11443         str     x0, [x1,16]
11444         ldr     x1, [x22, #:got_lo12:c_ftl_nand_data_blks_per_plane]
11445         ldr     x0, [x21, #:got_lo12:p_valid_page_count_table]
11446         ldrh    w2, [x1]
11447         mov     w1, 0
11448         ldr     x0, [x0]
11449         lsl     w2, w2, 1
11450         bl      ftl_memset
11451         ldr     x24, [x23, #:got_lo12:gSysInfo]
11452         mov     w1, 65535
11453         ldrh    w0, [x24]
11454         cmp     w0, w1
11455         bne     .L1518
11456 .L1522:
11457         mov     w19, -1
11458         b       .L1519
11459 .L1518:
11460         mov     w1, 1
11461         adrp    x25, :got:p_sys_data_buf
11462         bl      FtlGetLastWrittenPage
11463         sxth    w19, w0
11464         add     w0, w0, 1
11465         strh    w0, [x24,2]
11466 .L1520:
11467         tbnz    w19, #31, .L1525
11468         ldr     x0, [x23, #:got_lo12:gSysInfo]
11469         mov     w1, 1
11470         ldr     x24, [x20, #:got_lo12:req_sys]
11471         mov     w2, w1
11472         ldrh    w0, [x0]
11473         orr     w0, w19, w0, lsl 10
11474         str     w0, [x24,4]
11475         ldr     x0, [x25, #:got_lo12:p_sys_data_buf]
11476         ldr     x0, [x0]
11477         str     x0, [x24,8]
11478         mov     x0, x24
11479         bl      FlashReadPages
11480         ldr     w0, [x24]
11481         cmn     w0, #1
11482         beq     .L1521
11483 .L1525:
11484         adrp    x24, :got:g_sys_save_data
11485         ldr     x20, [x20, #:got_lo12:req_sys]
11486         mov     w2, 48
11487         ldr     x19, [x24, #:got_lo12:g_sys_save_data]
11488         ldr     x1, [x20,8]
11489         mov     x0, x19
11490         bl      ftl_memcpy
11491         ldr     x22, [x22, #:got_lo12:c_ftl_nand_data_blks_per_plane]
11492         ldr     x21, [x21, #:got_lo12:p_valid_page_count_table]
11493         ldr     x1, [x20,8]
11494         ldrh    w2, [x22]
11495         ldr     x0, [x21]
11496         add     x1, x1, 48
11497         lsl     w2, w2, 1
11498         bl      ftl_memcpy
11499         ldr     w1, [x19]
11500         mov     w0, 19539
11501         movk    w0, 0x4654, lsl 16
11502         mov     x2, x24
11503         cmp     w1, w0
11504         beq     .L1532
11505         b       .L1522
11506 .L1521:
11507         sub     w19, w19, #1
11508         sxth    w19, w19
11509         b       .L1520
11510 .L1532:
11511         ldr     x23, [x23, #:got_lo12:gSysInfo]
11512         adrp    x0, :got:c_ftl_nand_die_num
11513         ldrh    w3, [x19,8]
11514         ldrb    w1, [x19,10]
11515         strh    w3, [x23,6]
11516         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
11517         ldrh    w0, [x0]
11518         cmp     w1, w0
11519         bne     .L1522
11520         adrp    x0, :got:g_MaxLbn
11521         adrp    x4, :got:c_ftl_nand_sec_pre_page
11522         ldrh    w6, [x19,14]
11523         adrp    x20, :got:g_gc_superblock
11524         ldr     x0, [x0, #:got_lo12:g_MaxLbn]
11525         str     w3, [x0]
11526         adrp    x0, :got:c_ftl_nand_page_pre_blk
11527         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11528         ldrh    w1, [x0]
11529         adrp    x0, :got:g_MaxLpn
11530         ldr     x0, [x0, #:got_lo12:g_MaxLpn]
11531         mul     w1, w1, w3
11532         str     w1, [x0]
11533         adrp    x0, :got:g_MaxLbaSector
11534         ldr     x4, [x4, #:got_lo12:c_ftl_nand_sec_pre_page]
11535         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
11536         ldrh    w4, [x4]
11537         mul     w1, w1, w4
11538         str     w1, [x0]
11539         adrp    x1, :got:c_ftl_nand_max_data_blks
11540         adrp    x0, :got:gBbtInfo
11541         adrp    x4, :got:c_ftl_nand_data_op_blks_per_plane
11542         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_data_blks]
11543         ldr     x0, [x0, #:got_lo12:gBbtInfo]
11544         ldr     x4, [x4, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
11545         ldr     w1, [x1]
11546         ldrh    w0, [x0,6]
11547         sub     w0, w1, w0
11548         adrp    x1, :got:c_ftl_nand_planes_num
11549         sub     w0, w0, w3
11550         adrp    x3, :got:g_active_superblock
11551         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
11552         ldrh    w1, [x1]
11553         udiv    w0, w0, w1
11554         ldrh    w1, [x19,16]
11555         strh    w0, [x4]
11556         lsr     w4, w1, 6
11557         and     w1, w1, 63
11558         ldr     x0, [x3, #:got_lo12:g_active_superblock]
11559         strb    w1, [x0,6]
11560         ldrb    w1, [x19,11]
11561         strh    w6, [x0]
11562         strh    w4, [x0,2]
11563         strb    w1, [x0,8]
11564         mov     w0, -1
11565         ldr     x1, [x20, #:got_lo12:g_gc_superblock]
11566         strh    w0, [x1]
11567         strh    wzr, [x1,2]
11568         strb    wzr, [x1,6]
11569         strb    wzr, [x1,8]
11570         adrp    x1, :got:g_buffer_superblock
11571         ldrh    w0, [x19,18]
11572         ldr     x4, [x1, #:got_lo12:g_buffer_superblock]
11573         strh    w0, [x4]
11574         ldrh    w5, [x19,20]
11575         lsr     w0, w5, 6
11576         strh    w0, [x4,2]
11577         ldrb    w0, [x19,12]
11578         and     w5, w5, 63
11579         strb    w0, [x4,8]
11580         adrp    x0, :got:g_gc_temp_superblock
11581         strb    w5, [x4,6]
11582         mov     x21, x0
11583         ldrh    w5, [x19,22]
11584         ldr     x4, [x0, #:got_lo12:g_gc_temp_superblock]
11585         strh    w5, [x4]
11586         ldrh    w5, [x19,24]
11587         lsr     w7, w5, 6
11588         and     w5, w5, 63
11589         strb    w5, [x4,6]
11590         ldrb    w5, [x19,13]
11591         strh    w7, [x4,2]
11592         strb    w5, [x4,8]
11593         adrp    x4, :got:g_totle_gc_page_count
11594         ldr     w5, [x19,32]
11595         ldr     x4, [x4, #:got_lo12:g_totle_gc_page_count]
11596         str     wzr, [x4]
11597         adrp    x4, :got:g_totle_write_page_count
11598         ldr     x4, [x4, #:got_lo12:g_totle_write_page_count]
11599         str     wzr, [x4]
11600         adrp    x4, :got:g_totle_read_page_count
11601         ldr     x4, [x4, #:got_lo12:g_totle_read_page_count]
11602         str     wzr, [x4]
11603         adrp    x4, :got:g_totle_l2p_write_count
11604         ldr     x4, [x4, #:got_lo12:g_totle_l2p_write_count]
11605         str     wzr, [x4]
11606         adrp    x4, :got:g_totle_mlc_erase_count
11607         ldr     x4, [x4, #:got_lo12:g_totle_mlc_erase_count]
11608         str     w5, [x4]
11609         adrp    x4, :got:g_totle_slc_erase_count
11610         ldr     w5, [x19,40]
11611         mov     x19, x1
11612         ldr     x4, [x4, #:got_lo12:g_totle_slc_erase_count]
11613         str     wzr, [x4]
11614         adrp    x4, :got:g_max_erase_count
11615         ldr     x4, [x4, #:got_lo12:g_max_erase_count]
11616         str     wzr, [x4]
11617         adrp    x4, :got:g_totle_cache_write_count
11618         ldr     x4, [x4, #:got_lo12:g_totle_cache_write_count]
11619         str     wzr, [x4]
11620         adrp    x4, :got:g_GlobalSysVersion
11621         ldr     x4, [x4, #:got_lo12:g_GlobalSysVersion]
11622         ldr     w7, [x4]
11623         cmp     w5, w7
11624         bls     .L1526
11625         str     w5, [x4]
11626 .L1526:
11627         adrp    x0, :got:g_GlobalDataVersion
11628         ldr     x2, [x2, #:got_lo12:g_sys_save_data]
11629         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
11630         ldr     w1, [x2,36]
11631         ldr     w2, [x0]
11632         cmp     w1, w2
11633         bls     .L1527
11634         str     w1, [x0]
11635 .L1527:
11636         mov     w0, 65535
11637         cmp     w6, w0
11638         beq     .L1528
11639         ldr     x0, [x3, #:got_lo12:g_active_superblock]
11640         bl      make_superblock
11641 .L1528:
11642         ldr     x0, [x19, #:got_lo12:g_buffer_superblock]
11643         mov     w1, 65535
11644         ldrh    w2, [x0]
11645         cmp     w2, w1
11646         beq     .L1529
11647         bl      make_superblock
11648 .L1529:
11649         ldr     x0, [x21, #:got_lo12:g_gc_temp_superblock]
11650         mov     w1, 65535
11651         ldrh    w2, [x0]
11652         cmp     w2, w1
11653         beq     .L1530
11654         bl      make_superblock
11655 .L1530:
11656         ldr     x0, [x20, #:got_lo12:g_gc_superblock]
11657         mov     w1, 65535
11658         mov     w19, 0
11659         ldrh    w2, [x0]
11660         cmp     w2, w1
11661         beq     .L1519
11662         bl      make_superblock
11663 .L1519:
11664         mov     w0, w19
11665         ldr     x25, [sp,64]
11666         ldp     x19, x20, [sp,16]
11667         ldp     x21, x22, [sp,32]
11668         ldp     x23, x24, [sp,48]
11669         ldp     x29, x30, [sp], 80
11670         ret
11671         .size   FtlLoadSysInfo, .-FtlLoadSysInfo
11672         .align  2
11673         .global FtlGcScanTempBlk
11674         .type   FtlGcScanTempBlk, %function
11675 FtlGcScanTempBlk:
11676         stp     x29, x30, [sp, -128]!
11677         add     x29, sp, 0
11678         stp     x19, x20, [sp,16]
11679         adrp    x19, .LANCHOR2
11680         stp     x25, x26, [sp,64]
11681         mov     x26, x0
11682         add     x0, x19, :lo12:.LANCHOR2
11683         stp     x23, x24, [sp,48]
11684         stp     x21, x22, [sp,32]
11685         stp     x27, x28, [sp,80]
11686         mov     w23, w1
11687         ldrh    w25, [x0,128]
11688         mov     w0, 65535
11689         cmp     w25, w0
11690         beq     .L1554
11691         cbnz    w25, .L1534
11692         b       .L1535
11693 .L1554:
11694         mov     w25, 0
11695 .L1534:
11696         adrp    x0, :got:c_ftl_nand_page_pre_blk
11697         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11698         ldrh    w0, [x0]
11699         cmp     w23, w0
11700         bne     .L1536
11701 .L1535:
11702         bl      FtlGcPageVarInit
11703 .L1536:
11704         mov     w22, -1
11705         mov     w20, 0
11706         mov     w21, 65535
11707         adrp    x24, :got:req_read
11708 .L1548:
11709         ldrh    w0, [x26]
11710         strb    wzr, [x26,8]
11711         cmp     w0, w21
11712         beq     .L1555
11713 .L1538:
11714 .L1551:
11715         adrp    x0, :got:c_ftl_nand_planes_num
11716         adrp    x1, :got:c_ftl_nand_byte_pre_oob
11717         mov     x2, x26
11718         mov     w27, 0
11719         mov     w10, 4
11720         adrp    x11, :got:p_gc_spare_buf
11721         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
11722         ldr     x1, [x1, #:got_lo12:c_ftl_nand_byte_pre_oob]
11723         ldrh    w6, [x0]
11724         ldrh    w9, [x1]
11725         add     x6, x26, x6, lsl 1
11726 .L1539:
11727         cmp     x2, x6
11728         beq     .L1563
11729         ldrh    w1, [x2,16]
11730         cmp     w1, w21
11731         beq     .L1540
11732         ldr     x8, [x24, #:got_lo12:req_read]
11733         mov     w0, 56
11734         orr     w1, w25, w1, lsl 10
11735         add     w5, w27, 1
11736         umull   x0, w27, w0
11737         ldr     x7, [x8]
11738         add     x7, x7, x0
11739         str     w1, [x7,4]
11740         ldr     x1, [x8]
11741         add     x0, x1, x0
11742         mul     w1, w27, w9
11743         uxth    w27, w5
11744         str     xzr, [x0,8]
11745         sdiv    w1, w1, w10
11746         ldr     x7, [x11, #:got_lo12:p_gc_spare_buf]
11747         ldr     x7, [x7]
11748         add     x1, x7, x1, sxtw 2
11749         str     x1, [x0,16]
11750 .L1540:
11751         add     x2, x2, 2
11752         b       .L1539
11753 .L1563:
11754         ldr     x0, [x24, #:got_lo12:req_read]
11755         mov     w1, w27
11756         mov     w2, 0
11757         mov     x28, 0
11758         ldr     x0, [x0]
11759         bl      FlashReadPages
11760 .L1542:
11761         cmp     w27, w28, uxth
11762         bls     .L1564
11763         mov     x0, 56
11764         mul     x6, x28, x0
11765         adrp    x0, :got:req_read
11766         str     x6, [x29,112]
11767         ldr     x8, [x0, #:got_lo12:req_read]
11768         str     x8, [x29,104]
11769         ldr     x0, [x8]
11770         add     x0, x0, x6
11771         ldr     w1, [x0,4]
11772         str     x1, [x29,120]
11773         lsr     w0, w1, 10
11774         bl      P2V_plane
11775         uxth    w2, w0
11776         ldr     x8, [x29,104]
11777         ldr     x6, [x29,112]
11778         ldr     x0, [x8]
11779         add     x8, x0, x6
11780         ldr     w6, [x0,x6]
11781         cbnz    w6, .L1543
11782         ldr     x6, [x8,16]
11783         add     x28, x28, 1
11784         ldr     x1, [x29,120]
11785         ldrh    w0, [x6]
11786         cmp     w0, w21
11787         bne     .L1544
11788         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
11789         mov     w1, 1
11790         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
11791         str     w1, [x0]
11792         b       .L1537
11793 .L1544:
11794         ldr     w0, [x6,12]
11795         ldr     w2, [x6,8]
11796         bl      FtlGcUpdatePage
11797         b       .L1542
11798 .L1543:
11799         adrp    x0, :got:g_inkDie_check_enable
11800         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
11801         ldr     w0, [x0]
11802         cbz     w0, .L1545
11803         adrp    x0, :got:p_erase_count_table
11804         ldrh    w1, [x26]
11805         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
11806         ldr     x0, [x0]
11807         ldrh    w0, [x0,x1,lsl 1]
11808         cmp     w0, 119
11809         bls     .L1546
11810 .L1545:
11811         cmn     w6, #1
11812         bne     .L1547
11813 .L1546:
11814         ldr     w22, [x8,4]
11815 .L1547:
11816         adrp    x0, :got:p_valid_page_count_table
11817         ldrh    w1, [x26]
11818         mov     w25, 0
11819         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
11820         ldr     x0, [x0]
11821         strh    wzr, [x0,x1,lsl 1]
11822         ldrh    w0, [x26]
11823         bl      INSERT_FREE_LIST
11824         mov     w0, -1
11825         strh    w0, [x26]
11826         bl      FtlGcPageVarInit
11827         b       .L1548
11828 .L1564:
11829         add     w20, w20, 1
11830         add     w3, w25, 1
11831         cmp     w20, w23
11832         adrp    x0, :got:c_ftl_nand_page_pre_blk
11833         uxth    w25, w3
11834         bcs     .L1550
11835 .L1552:
11836         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11837         ldrh    w0, [x0]
11838         cmp     w0, w25
11839         bhi     .L1551
11840         b       .L1555
11841 .L1550:
11842         add     x2, x19, :lo12:.LANCHOR2
11843         ldrh    w1, [x2,128]
11844         cmp     w1, w21
11845         beq     .L1552
11846         add     w1, w1, w20
11847         strh    w1, [x2,128]
11848         ldr     x1, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
11849         ldrh    w1, [x1]
11850         cmp     w1, w25
11851         bls     .L1552
11852         b       .L1553
11853 .L1555:
11854         mov     w2, 0
11855 .L1537:
11856         add     x19, x19, :lo12:.LANCHOR2
11857         mov     w0, -1
11858         strh    w25, [x26,2]
11859         mov     w1, w25
11860         strb    w2, [x26,6]
11861         strh    w0, [x19,128]
11862         mov     x0, x26
11863         bl      ftl_sb_update_avl_pages
11864 .L1553:
11865         mov     w0, w22
11866         ldp     x19, x20, [sp,16]
11867         ldp     x21, x22, [sp,32]
11868         ldp     x23, x24, [sp,48]
11869         ldp     x25, x26, [sp,64]
11870         ldp     x27, x28, [sp,80]
11871         ldp     x29, x30, [sp], 128
11872         ret
11873         .size   FtlGcScanTempBlk, .-FtlGcScanTempBlk
11874         .align  2
11875         .global FlashProgPages
11876         .type   FlashProgPages, %function
11877 FlashProgPages:
11878         stp     x29, x30, [sp, -192]!
11879         add     x29, sp, 0
11880         stp     x19, x20, [sp,16]
11881         mov     x19, x0
11882         adrp    x0, :got:gpNandParaInfo
11883         stp     x21, x22, [sp,32]
11884         stp     x23, x24, [sp,48]
11885         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
11886         mov     w24, w1
11887         stp     x25, x26, [sp,64]
11888         stp     x27, x28, [sp,80]
11889         mov     w26, w2
11890         str     w3, [x29,120]
11891         ldr     x0, [x0]
11892         mov     w21, 0
11893         mov     w27, 56
11894         ldrb    w1, [x0,19]
11895         adrp    x0, :got:gNandParaInfo
11896         ldr     x0, [x0, #:got_lo12:gNandParaInfo]
11897         ldrb    w28, [x0,9]
11898         add     x0, x29, 128
11899         str     x0, [x29,112]
11900         add     x0, x29, 132
11901         str     x0, [x29,104]
11902         sub     w0, w1, #1
11903         str     w0, [x29,100]
11904 .L1566:
11905         cmp     w21, w24
11906         adrp    x20, :got:gNandMaxDie
11907         bcs     .L1608
11908         umull   x20, w21, w27
11909         ldr     x2, [x29,112]
11910         mov     w1, w26
11911         add     x25, x19, x20
11912         ldr     x3, [x29,104]
11913         sub     w4, w24, w21
11914         mov     x0, x25
11915         bl      LogAddr2PhyAddr
11916         mov     w23, w0
11917         adrp    x1, :got:gNandMaxDie
11918         ldr     w0, [x29,132]
11919         ldr     x1, [x1, #:got_lo12:gNandMaxDie]
11920         ldrb    w2, [x1]
11921         cmp     w0, w2
11922         bcc     .L1567
11923         mov     w0, -1
11924         str     w0, [x19,x20]
11925         b       .L1568
11926 .L1567:
11927         adrp    x1, :got:gMultiPageProgEn
11928         adrp    x22, :got:gDieOp
11929         ldr     x1, [x1, #:got_lo12:gMultiPageProgEn]
11930         ldr     x3, [x22, #:got_lo12:gDieOp]
11931         ldrb    w1, [x1]
11932         cmp     w1, wzr
11933         uxtw    x1, w0
11934         mov     x0, 24
11935         csel    w23, w23, wzr, ne
11936         madd    x0, x1, x0, x3
11937         ldr     x0, [x0,8]
11938         cbz     x0, .L1570
11939         cmp     w2, 1
11940         bne     .L1571
11941         adrp    x0, :got:gpNandc
11942         ldr     x0, [x0, #:got_lo12:gpNandc]
11943         ldr     x0, [x0]
11944         bl      NandcIqrWaitFlashReady
11945 .L1571:
11946         ldrb    w0, [x29,132]
11947         bl      FlashWaitCmdDone
11948 .L1570:
11949         ldr     x2, [x22, #:got_lo12:gDieOp]
11950         mov     x0, 24
11951         ldr     w1, [x29,132]
11952         madd    x0, x1, x0, x2
11953         ldr     w2, [x29,128]
11954         str     x25, [x0,8]
11955         str     xzr, [x0,16]
11956         str     w2, [x0,4]
11957         cbz     w23, .L1572
11958         add     w2, w21, 1
11959         umull   x2, w2, w27
11960         add     x2, x19, x2
11961         str     x2, [x0,16]
11962 .L1572:
11963         adrp    x0, :got:DieCsIndex
11964         ldr     x22, [x22, #:got_lo12:gDieOp]
11965         ldr     x0, [x0, #:got_lo12:DieCsIndex]
11966         ldrb    w20, [x0,x1]
11967         mov     x0, 24
11968         mul     x1, x1, x0
11969         adrp    x0, :got:gNandMaxDie
11970         strb    w20, [x22,x1]
11971         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
11972         ldrb    w0, [x0]
11973         cmp     w0, 1
11974         mov     w0, w20
11975         bne     .L1573
11976         bl      NandcWaitFlashReady
11977         b       .L1574
11978 .L1573:
11979         bl      NandcFlashCs
11980         adrp    x0, :got:DieAddrs
11981         ldr     w1, [x29,132]
11982         ldr     x0, [x0, #:got_lo12:DieAddrs]
11983         ldr     w0, [x0,x1,lsl 2]
11984         ldr     w1, [x29,128]
11985         cmp     w0, wzr
11986         mov     w0, w20
11987         cset    w2, ne
11988         bl      FlashWaitReadyEN
11989         mov     w0, w20
11990         bl      NandcFlashDeCs
11991 .L1574:
11992         ldr     w0, [x29,100]
11993         cmp     w0, 5
11994         bhi     .L1575
11995         adrp    x0, :got:read_retry_cur_offset
11996         ldr     x0, [x0, #:got_lo12:read_retry_cur_offset]
11997         ldrb    w0, [x0,w20,sxtw]
11998         cbz     w0, .L1575
11999         adrp    x2, :got:gReadRetryInfo
12000         mov     w0, w20
12001         mov     w3, 0
12002         ldr     x2, [x2, #:got_lo12:gReadRetryInfo]
12003         add     x2, x2, 4
12004         ldrb    w1, [x2,-3]
12005         bl      HynixSetRRPara
12006 .L1575:
12007         mov     w0, w20
12008         bl      NandcFlashCs
12009         ldr     w1, [x29,128]
12010         mov     w0, w20
12011         bl      FlashProgFirstCmd
12012         ldr     x3, [x25,8]
12013         mov     w0, w20
12014         ldr     x4, [x25,16]
12015         mov     w1, 1
12016         mov     w2, w28
12017         bl      NandcXferData
12018         cbz     w23, .L1576
12019         ldr     w1, [x29,128]
12020         mov     w0, w20
12021         bl      FlashProgDpFirstCmd
12022         adrp    x0, :got:DieAddrs
12023         ldr     w1, [x29,132]
12024         ldr     x0, [x0, #:got_lo12:DieAddrs]
12025         ldr     w0, [x0,x1,lsl 2]
12026         ldr     w1, [x29,128]
12027         cmp     w0, wzr
12028         mov     w0, w20
12029         cset    w2, ne
12030         bl      FlashWaitReadyEN
12031         adrp    x0, :got:gBlockPageAlignSize
12032         ldr     w1, [x29,128]
12033         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
12034         ldr     w2, [x0]
12035         mov     w0, w20
12036         add     w1, w2, w1
12037         bl      FlashProgDpSecondCmd
12038         add     w4, w21, 1
12039         mov     w0, w20
12040         mov     w1, 1
12041         mov     w2, w28
12042         umull   x4, w4, w27
12043         add     x4, x19, x4
12044         ldr     x3, [x4,8]
12045         ldr     x4, [x4,16]
12046         bl      NandcXferData
12047 .L1576:
12048         ldr     w1, [x29,128]
12049         mov     w0, w20
12050         add     w21, w21, w23
12051         bl      FlashProgSecondCmd
12052         mov     w0, w20
12053         bl      NandcFlashDeCs
12054 .L1568:
12055         add     w21, w21, 1
12056         b       .L1566
12057 .L1608:
12058         adrp    x0, :got:gpNandc
12059         mov     w21, 0
12060         ldr     x0, [x0, #:got_lo12:gpNandc]
12061         ldr     x0, [x0]
12062         bl      NandcIqrWaitFlashReady
12063 .L1578:
12064         ldr     x0, [x20, #:got_lo12:gNandMaxDie]
12065         ldrb    w0, [x0]
12066         cmp     w21, w0
12067         bcs     .L1609
12068         mov     w0, w21
12069         add     w21, w21, 1
12070         bl      FlashWaitCmdDone
12071         b       .L1578
12072 .L1609:
12073         ldr     w0, [x29,120]
12074         cbz     w0, .L1607
12075         adrp    x23, .LC100
12076         adrp    x25, .LC99
12077         adrp    x27, .LC98
12078         mov     w22, 0
12079         add     x23, x23, :lo12:.LC100
12080         add     x25, x25, :lo12:.LC99
12081         add     x27, x27, :lo12:.LC98
12082 .L1581:
12083         cmp     w22, w24
12084         beq     .L1607
12085         ldr     w0, [x19]
12086         cmn     w0, #1
12087         bne     .L1582
12088         adrp    x0, .LC97
12089         ldr     w1, [x19,4]
12090         add     x0, x0, :lo12:.LC97
12091         bl      printk
12092         b       .L1583
12093 .L1582:
12094         sub     w4, w24, w22
12095         mov     w1, w26
12096         add     x2, x29, 128
12097         add     x3, x29, 132
12098         mov     x0, x19
12099         adrp    x20, :got:gFlashProgCheckBuffer
12100         adrp    x21, :got:gFlashProgCheckSpareBuffer
12101         bl      LogAddr2PhyAddr
12102         ldr     x4, [x20, #:got_lo12:gFlashProgCheckBuffer]
12103         add     x3, x29, 136
12104         mov     x1, x19
12105         mov     x2, 56
12106         str     x4, [x29,120]
12107         ldr     x0, [x4]
12108         str     wzr, [x0]
12109         ldr     x28, [x21, #:got_lo12:gFlashProgCheckSpareBuffer]
12110         ldr     x0, [x28]
12111         str     wzr, [x0]
12112         mov     x0, x3
12113         bl      memcpy
12114         mov     x3, x0
12115         ldr     x4, [x29,120]
12116         mov     w1, 1
12117         mov     w2, w26
12118         ldr     x0, [x4]
12119         str     x0, [x29,144]
12120         ldr     x0, [x28]
12121         str     x0, [x29,152]
12122         mov     x0, x3
12123         bl      FlashReadPages
12124         ldr     w28, [x29,136]
12125         cmn     w28, #1
12126         bne     .L1584
12127         ldr     w1, [x19,4]
12128         mov     x0, x27
12129         bl      printk
12130         str     w28, [x19]
12131 .L1584:
12132         ldr     x0, [x19,16]
12133         cbz     x0, .L1585
12134         ldr     x21, [x21, #:got_lo12:gFlashProgCheckSpareBuffer]
12135         ldr     w2, [x0]
12136         ldr     x0, [x21]
12137         ldr     w3, [x0]
12138         cmp     w2, w3
12139         beq     .L1585
12140         ldr     w1, [x19,4]
12141         mov     x0, x25
12142         bl      printk
12143         mov     w0, -1
12144         str     w0, [x19]
12145 .L1585:
12146         ldr     x0, [x19,8]
12147         cbz     x0, .L1583
12148         ldr     x20, [x20, #:got_lo12:gFlashProgCheckBuffer]
12149         ldr     w2, [x0]
12150         ldr     x0, [x20]
12151         ldr     w3, [x0]
12152         cmp     w2, w3
12153         beq     .L1583
12154         ldr     w1, [x19,4]
12155         mov     x0, x23
12156         bl      printk
12157         mov     w0, -1
12158         str     w0, [x19]
12159 .L1583:
12160         add     w22, w22, 1
12161         add     x19, x19, 56
12162         b       .L1581
12163 .L1607:
12164         mov     w0, 0
12165         ldp     x19, x20, [sp,16]
12166         ldp     x21, x22, [sp,32]
12167         ldp     x23, x24, [sp,48]
12168         ldp     x25, x26, [sp,64]
12169         ldp     x27, x28, [sp,80]
12170         ldp     x29, x30, [sp], 192
12171         ret
12172         .size   FlashProgPages, .-FlashProgPages
12173         .align  2
12174         .type   FlashTestBlk.part.19, %function
12175 FlashTestBlk.part.19:
12176         stp     x29, x30, [sp, -176]!
12177         mov     w1, 165
12178         mov     w2, 32
12179         add     x29, sp, 0
12180         stp     x19, x20, [sp,16]
12181         adrp    x20, :got:gFlashPageBuffer1
12182         str     x21, [sp,32]
12183         uxth    w21, w0
12184         add     x19, x29, 56
12185         lsl     w21, w21, 10
12186         ldr     x20, [x20, #:got_lo12:gFlashPageBuffer1]
12187         ldr     x0, [x20]
12188         str     x0, [x29,64]
12189         add     x0, x29, 112
12190         str     x0, [x29,72]
12191         bl      ftl_memset
12192         ldr     x0, [x20]
12193         mov     w2, 8
12194         mov     w1, 90
12195         bl      ftl_memset
12196         str     w21, [x29,60]
12197         mov     x0, x19
12198         mov     w1, 0
12199         bl      FlashEraseBlocks
12200         mov     w1, 1
12201         mov     x0, x19
12202         mov     w2, w1
12203         mov     w3, w1
12204         bl      FlashProgPages
12205         ldr     w0, [x29,56]
12206         mov     w1, 1
12207         cmn     w0, #1
12208         mov     x0, x19
12209         csetm   w20, eq
12210         bl      FlashEraseBlocks
12211         ldr     x21, [sp,32]
12212         mov     w0, w20
12213         ldp     x19, x20, [sp,16]
12214         ldp     x29, x30, [sp], 176
12215         ret
12216         .size   FlashTestBlk.part.19, .-FlashTestBlk.part.19
12217         .align  2
12218         .global FlashTestBlk
12219         .type   FlashTestBlk, %function
12220 FlashTestBlk:
12221         adrp    x1, :got:gNandFlashIdbBlockAddr
12222         uxth    w2, w0
12223         stp     x29, x30, [sp, -16]!
12224         mov     w0, 0
12225         add     x29, sp, 0
12226         ldr     x1, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
12227         ldr     w1, [x1]
12228         cmp     w2, w1
12229         bcc     .L1612
12230         mov     w0, w2
12231         bl      FlashTestBlk.part.19
12232 .L1612:
12233         ldp     x29, x30, [sp], 16
12234         ret
12235         .size   FlashTestBlk, .-FlashTestBlk
12236         .align  2
12237         .global FlashMakeFactorBbt
12238         .type   FlashMakeFactorBbt, %function
12239 FlashMakeFactorBbt:
12240         adrp    x5, :got:gFlashSpareBuffer
12241         adrp    x4, :got:gNandPhyInfo
12242         stp     x29, x30, [sp, -256]!
12243         adrp    x3, :got:gpNandParaInfo
12244         adrp    x2, :got:gBlockPageAlignSize
12245         add     x29, sp, 0
12246         ldr     x0, [x5, #:got_lo12:gFlashSpareBuffer]
12247         stp     x19, x20, [sp,16]
12248         stp     x21, x22, [sp,32]
12249         stp     x23, x24, [sp,48]
12250         stp     x25, x26, [sp,64]
12251         stp     x27, x28, [sp,80]
12252         ldr     x1, [x4, #:got_lo12:gNandPhyInfo]
12253         mov     w19, 0
12254         ldr     x0, [x0]
12255         str     x0, [x29,184]
12256         ldrh    w22, [x1,14]
12257         ldrh    w0, [x1,12]
12258         adrp    x1, :got:g_slc2KBNand
12259         str     x1, [x29,128]
12260         str     x5, [x29,160]
12261         mul     w22, w0, w22
12262         ldr     x0, [x3, #:got_lo12:gpNandParaInfo]
12263         str     x4, [x29,168]
12264         str     x3, [x29,152]
12265         uxth    w22, w22
12266         ldr     x0, [x0]
12267         str     x2, [x29,136]
12268         ldrb    w0, [x0,24]
12269         str     w0, [x29,180]
12270         ldr     x0, [x2, #:got_lo12:gBlockPageAlignSize]
12271         ldrh    w25, [x0]
12272         ldr     x0, [x1, #:got_lo12:g_slc2KBNand]
12273         ubfiz   w1, w25, 1, 15
12274         ldrb    w0, [x0]
12275         cmp     w0, 1
12276         adrp    x0, .LC101
12277         csel    w25, w1, w25, eq
12278         add     x0, x0, :lo12:.LC101
12279         mov     w1, 1
12280         bl      printk
12281         ldr     x0, [x29,160]
12282         mov     w1, 0
12283         mov     w2, 4096
12284         ldr     x0, [x0, #:got_lo12:gFlashSpareBuffer]
12285         ldr     x0, [x0]
12286         bl      ftl_memset
12287         lsr     w0, w22, 4
12288         str     w0, [x29,176]
12289         ldr     w0, [x29,180]
12290         and     w0, w0, 1
12291         str     w0, [x29,112]
12292         ldr     w0, [x29,180]
12293         and     w0, w0, 2
12294         uxtb    w0, w0
12295         str     w0, [x29,108]
12296         sub     w0, w22, #1
12297         uxth    w0, w0
12298         str     w0, [x29,104]
12299 .L1616:
12300         adrp    x0, :got:gNandMaxDie
12301         str     x0, [x29,144]
12302         ldr     x1, [x0, #:got_lo12:gNandMaxDie]
12303         ldrb    w1, [x1]
12304         cmp     w1, w19
12305         bls     .L1661
12306         adrp    x0, :got:FbbtBlk
12307         str     x0, [x29,120]
12308         sxtw    x24, w19
12309         ldr     x1, [x0, #:got_lo12:FbbtBlk]
12310         ldrh    w20, [x1,w19,sxtw 1]
12311         cbnz    w20, .L1643
12312         ldr     x1, [x29,168]
12313         adrp    x21, :got:gFlashPageBuffer0
12314         mov     w26, w20
12315         mov     w23, w20
12316         ldr     x1, [x1, #:got_lo12:gNandPhyInfo]
12317         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12318         ldrh    w2, [x1,20]
12319         mov     w1, w20
12320         ldr     x0, [x0]
12321         lsl     w2, w2, 9
12322         bl      ftl_memset
12323         adrp    x0, :got:DieCsIndex
12324         ldr     x0, [x0, #:got_lo12:DieCsIndex]
12325         ldrb    w27, [x0,x24]
12326         ldr     w0, [x29,180]
12327         and     w0, w0, 4
12328         uxtb    w0, w0
12329         str     w0, [x29,116]
12330 .L1618:
12331         uxth    w28, w26
12332         cmp     w28, w22
12333         bcs     .L1628
12334         mov     w0, -1
12335         strb    w0, [x29,198]
12336         strb    w0, [x29,199]
12337         ldr     w0, [x29,112]
12338         cbz     w0, .L1620
12339         adrp    x0, :got:DieAddrs
12340         add     x2, x29, 198
12341         ldr     x0, [x0, #:got_lo12:DieAddrs]
12342         ldr     w3, [x0,x24,lsl 2]
12343         mov     w0, w27
12344         add     w3, w20, w3
12345         str     x3, [x29,96]
12346         mov     w1, w3
12347         bl      FlashReadSpare
12348         ldr     x0, [x29,128]
12349         ldr     x3, [x29,96]
12350         ldr     x0, [x0, #:got_lo12:g_slc2KBNand]
12351         ldrb    w0, [x0]
12352         cmp     w0, 1
12353         bne     .L1620
12354         ldr     x0, [x29,136]
12355         add     x2, x29, 199
12356         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
12357         ldr     w1, [x0]
12358         mov     w0, w27
12359         add     w1, w3, w1
12360         bl      FlashReadSpare
12361         ldrb    w0, [x29,198]
12362         ldrb    w1, [x29,199]
12363         and     w0, w1, w0
12364         strb    w0, [x29,198]
12365 .L1620:
12366         ldr     w0, [x29,108]
12367         cbz     w0, .L1622
12368         ldr     x0, [x29,152]
12369         add     x2, x29, 199
12370         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
12371         ldr     x0, [x0]
12372         ldrh    w1, [x0,10]
12373         adrp    x0, :got:DieAddrs
12374         sub     w1, w1, #1
12375         ldr     x0, [x0, #:got_lo12:DieAddrs]
12376         ldr     w0, [x0,x24,lsl 2]
12377         add     w1, w1, w0
12378         mov     w0, w27
12379         add     w1, w1, w20
12380         bl      FlashReadSpare
12381 .L1622:
12382         ldr     x0, [x29,152]
12383         ldrb    w1, [x29,198]
12384         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
12385         ldr     x0, [x0]
12386         ldrb    w0, [x0,7]
12387         cmp     w0, 8
12388         beq     .L1644
12389         cmp     w0, 1
12390         bne     .L1623
12391 .L1644:
12392         mov     w0, 1
12393         cbz     w1, .L1625
12394         ldrb    w0, [x29,199]
12395         cmp     w0, wzr
12396         cset    w0, eq
12397         b       .L1625
12398 .L1623:
12399         cmp     w1, 255
12400         mov     w0, 1
12401         bne     .L1625
12402         ldrb    w0, [x29,199]
12403         cmp     w0, 255
12404         cset    w0, ne
12405 .L1625:
12406         ldr     w1, [x29,116]
12407         cbz     w1, .L1626
12408         adrp    x0, :got:DieAddrs
12409         ldr     x0, [x0, #:got_lo12:DieAddrs]
12410         ldr     w1, [x0,x24,lsl 2]
12411         mov     w0, w27
12412         add     w1, w20, w1
12413         bl      SandiskProgTestBadBlock
12414 .L1626:
12415         cbz     w0, .L1627
12416         adrp    x0, .LC102
12417         mov     w1, w19
12418         mov     w2, w26
12419         add     x0, x0, :lo12:.LC102
12420         add     w23, w23, 1
12421         bl      printk
12422         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12423         ubfx    x1, x28, 5, 11
12424         lsl     x1, x1, 2
12425         uxth    w23, w23
12426         ldr     x2, [x0]
12427         mov     w0, 1
12428         lsl     w28, w0, w28
12429         ldr     w0, [x2,x1]
12430         orr     w28, w0, w28
12431         ldr     x0, [x29,144]
12432         str     w28, [x2,x1]
12433         ldr     w1, [x29,176]
12434         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
12435         ldrb    w0, [x0]
12436         mul     w0, w1, w0
12437         cmp     w23, w0
12438         bgt     .L1628
12439 .L1627:
12440         add     w26, w26, 1
12441         add     w20, w20, w25
12442         b       .L1618
12443 .L1628:
12444         adrp    x0, .LC103
12445         mov     w1, w19
12446         add     x0, x0, :lo12:.LC103
12447         mov     w2, w23
12448         bl      printk
12449         ldr     x0, [x29,144]
12450         ldr     w1, [x29,176]
12451         ldr     x0, [x0, #:got_lo12:gNandMaxDie]
12452         ldrb    w0, [x0]
12453         mul     w0, w1, w0
12454         cmp     w23, w0
12455         blt     .L1630
12456         ldr     x1, [x29,168]
12457         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12458         ldr     x1, [x1, #:got_lo12:gNandPhyInfo]
12459         ldr     x0, [x0]
12460         ldrh    w2, [x1,20]
12461         mov     w1, 0
12462         lsl     w2, w2, 9
12463         bl      ftl_memset
12464 .L1630:
12465         cbnz    w19, .L1632
12466         adrp    x27, :got:gNandFlashIdbBlockAddr
12467         adrp    x23, .LC104
12468         mov     w20, w19
12469         adrp    x26, :got:gNandIDBResBlkNum
12470         add     x23, x23, :lo12:.LC104
12471         ldr     x0, [x27, #:got_lo12:gNandFlashIdbBlockAddr]
12472         ldrh    w28, [x0]
12473 .L1633:
12474         ldr     x0, [x26, #:got_lo12:gNandIDBResBlkNum]
12475         ldrb    w0, [x0]
12476         cmp     w28, w0
12477         bcs     .L1662
12478         mov     w0, w28
12479         bl      FlashTestBlk
12480         cbz     w0, .L1634
12481         mov     w1, w28
12482         mov     x0, x23
12483         bl      printk
12484         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12485         ubfx    x1, x28, 5, 11
12486         lsl     x1, x1, 2
12487         add     w2, w20, 1
12488         ldr     x3, [x0]
12489         mov     w0, 1
12490         lsl     w0, w0, w28
12491         uxth    w20, w2
12492         ldr     w4, [x3,x1]
12493         orr     w0, w4, w0
12494         str     w0, [x3,x1]
12495 .L1634:
12496         add     w28, w28, 1
12497         uxth    w28, w28
12498         b       .L1633
12499 .L1662:
12500         ldr     x27, [x27, #:got_lo12:gNandFlashIdbBlockAddr]
12501         ldr     w1, [x27]
12502         sub     w0, w0, w1
12503         cmp     w20, w0
12504         bcc     .L1632
12505         ldr     x1, [x29,168]
12506         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12507         ldr     x1, [x1, #:got_lo12:gNandPhyInfo]
12508         ldr     x0, [x0]
12509         ldrh    w2, [x1,20]
12510         mov     w1, 0
12511         lsl     w2, w2, 9
12512         bl      ftl_memset
12513 .L1632:
12514         adrp    x23, .LC105
12515         ldr     w27, [x29,104]
12516         mul     w26, w19, w22
12517         add     x23, x23, :lo12:.LC105
12518         mov     w20, -3872
12519         add     x28, x29, 200
12520 .L1637:
12521         mov     w2, w27
12522         mov     x0, x23
12523         mov     w1, w19
12524         bl      printk
12525         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12526         ldr     x2, [x0]
12527 .L1638:
12528         ubfx    x0, x27, 5, 11
12529         ldr     w1, [x2,x0,lsl 2]
12530         lsr     w1, w1, w27
12531         and     w0, w1, 1
12532         tbz     x1, 0, .L1663
12533         sub     w27, w27, #1
12534         uxth    w27, w27
12535         b       .L1638
12536 .L1663:
12537         ldr     x1, [x29,120]
12538         ldr     x1, [x1, #:got_lo12:FbbtBlk]
12539         strh    w27, [x1,x24,lsl 1]
12540         ldr     x1, [x29,184]
12541         strh    w20, [x1]
12542         strh    w27, [x1,2]
12543         strh    w0, [x1,8]
12544         add     w1, w27, w26
12545         lsl     w1, w1, 10
12546         ldr     x0, [x21, #:got_lo12:gFlashPageBuffer0]
12547         ldr     x0, [x0]
12548         str     x0, [x28,8]
12549         ldr     x0, [x29,160]
12550         ldr     x0, [x0, #:got_lo12:gFlashSpareBuffer]
12551         str     w1, [x28,4]
12552         mov     w1, 1
12553         ldr     x0, [x0]
12554         str     x0, [x28,16]
12555         mov     x0, x28
12556         bl      FlashEraseBlocks
12557         mov     w1, 1
12558         mov     x0, x28
12559         mov     w2, w1
12560         mov     w3, w1
12561         bl      FlashProgPages
12562         ldr     w0, [x28]
12563         cbz     w0, .L1643
12564         sub     w27, w27, #1
12565         uxth    w27, w27
12566         b       .L1637
12567 .L1643:
12568         add     w19, w19, 1
12569         uxtb    w19, w19
12570         b       .L1616
12571 .L1661:
12572         ldp     x19, x20, [sp,16]
12573         ldp     x21, x22, [sp,32]
12574         ldp     x23, x24, [sp,48]
12575         ldp     x25, x26, [sp,64]
12576         ldp     x27, x28, [sp,80]
12577         ldp     x29, x30, [sp], 256
12578         ret
12579         .size   FlashMakeFactorBbt, .-FlashMakeFactorBbt
12580         .align  2
12581         .global FtlLowFormatEraseBlock
12582         .type   FtlLowFormatEraseBlock, %function
12583 FtlLowFormatEraseBlock:
12584         stp     x29, x30, [sp, -128]!
12585         add     x29, sp, 0
12586         stp     x21, x22, [sp,32]
12587         uxth    w21, w0
12588         adrp    x0, :got:g_cur_erase_blk
12589         stp     x19, x20, [sp,16]
12590         stp     x23, x24, [sp,48]
12591         ldr     x0, [x0, #:got_lo12:g_cur_erase_blk]
12592         uxtb    w23, w1
12593         stp     x25, x26, [sp,64]
12594         stp     x27, x28, [sp,80]
12595         mov     w25, 0
12596         str     w21, [x0]
12597         mov     w20, w25
12598         mov     w19, w25
12599         mov     w24, 56
12600         adrp    x26, :got:p_plane_order_table
12601         adrp    x27, :got:c_ftl_nand_byte_pre_oob
12602         mov     w28, 4
12603 .L1665:
12604         adrp    x0, :got:c_ftl_nand_planes_num
12605         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
12606         ldrh    w0, [x0]
12607         cmp     w0, w25
12608         bls     .L1703
12609         adrp    x1, :got:req_erase
12610         umull   x0, w25, w24
12611         ldr     x1, [x1, #:got_lo12:req_erase]
12612         ldr     x1, [x1]
12613         str     wzr, [x1,x0]
12614         mov     w1, w21
12615         ldr     x0, [x26, #:got_lo12:p_plane_order_table]
12616         ldrb    w0, [x0,w25,sxtw]
12617         bl      V2P_block
12618         uxth    w22, w0
12619         mov     w1, w22
12620         cbnz    w23, .L1666
12621 .L1670:
12622         mov     w0, w1
12623         bl      FtlBbmIsBadBlock
12624         cbnz    w0, .L1704
12625         adrp    x1, :got:req_erase
12626         lsl     w22, w22, 10
12627         umull   x0, w20, w24
12628         ldr     x1, [x1, #:got_lo12:req_erase]
12629         ldr     x3, [x1]
12630         add     x3, x3, x0
12631         str     w22, [x3,4]
12632         adrp    x3, :got:p_io_spare_buf
12633         ldr     x1, [x1]
12634         add     x1, x1, x0
12635         str     xzr, [x1,8]
12636         ldr     x0, [x27, #:got_lo12:c_ftl_nand_byte_pre_oob]
12637         ldr     x3, [x3, #:got_lo12:p_io_spare_buf]
12638         ldrh    w0, [x0]
12639         ldr     x3, [x3]
12640         mul     w0, w20, w0
12641         add     w20, w20, 1
12642         sdiv    w0, w0, w28
12643         uxth    w20, w20
12644         add     x0, x3, x0, sxtw 2
12645         str     x0, [x1,16]
12646         b       .L1669
12647 .L1666:
12648         str     x1, [x29,120]
12649         bl      IsBlkInVendorPart
12650         ldr     x1, [x29,120]
12651         cbnz    w0, .L1669
12652         b       .L1670
12653 .L1704:
12654         add     w19, w19, 1
12655         uxth    w19, w19
12656 .L1669:
12657         add     w2, w25, 1
12658         uxth    w25, w2
12659         b       .L1665
12660 .L1703:
12661         cbz     w20, .L1673
12662         adrp    x22, :got:req_erase
12663         mov     w1, w20
12664         mov     x24, 0
12665         mov     x25, 56
12666         ldr     x0, [x22, #:got_lo12:req_erase]
12667         ldr     x0, [x0]
12668         bl      FlashEraseBlocks
12669 .L1674:
12670         cmp     w20, w24, uxth
12671         bls     .L1705
12672         ldr     x1, [x22, #:got_lo12:req_erase]
12673         mul     x0, x24, x25
12674         ldr     x1, [x1]
12675         add     x2, x1, x0
12676         ldr     w0, [x1,x0]
12677         cmn     w0, #1
12678         bne     .L1675
12679         ldr     w0, [x2,4]
12680         add     w19, w19, 1
12681         lsr     w0, w0, 10
12682         uxth    w19, w19
12683         bl      FtlBbmMapBadBlock
12684 .L1675:
12685         add     x24, x24, 1
12686         b       .L1674
12687 .L1705:
12688         cmp     w23, wzr
12689         cset    w26, ne
12690         cbz     w26, .L1691
12691         adrp    x0, :got:g_inkDie_check_enable
12692         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
12693         ldr     w0, [x0]
12694         cbz     w0, .L1691
12695         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
12696         mov     w23, 5
12697         mov     w27, 1
12698         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
12699         ldrh    w25, [x0]
12700         udiv    w23, w25, w23
12701         sub     w23, w23, #1
12702         uxth    w0, w23
12703         str     w0, [x29,120]
12704         b       .L1677
12705 .L1691:
12706         mov     w0, 6
12707         mov     w27, 0
12708         str     w0, [x29,120]
12709         mov     w25, 1
12710 .L1677:
12711         mov     w24, 0
12712         mov     w28, 56
12713 .L1689:
12714         mov     w23, 0
12715         mov     w20, w23
12716 .L1678:
12717         adrp    x0, :got:c_ftl_nand_planes_num
12718         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
12719         ldrh    w0, [x0]
12720         cmp     w0, w23
12721         bls     .L1706
12722         ldr     x1, [x22, #:got_lo12:req_erase]
12723         umull   x0, w23, w28
12724         ldr     x1, [x1]
12725         str     wzr, [x1,x0]
12726         adrp    x0, :got:p_plane_order_table
12727         mov     w1, w21
12728         ldr     x0, [x0, #:got_lo12:p_plane_order_table]
12729         ldrb    w0, [x0,w23,sxtw]
12730         bl      V2P_block
12731         uxth    w2, w0
12732         str     w2, [x29,116]
12733         mov     w1, w2
12734         cbnz    w26, .L1679
12735 .L1682:
12736         mov     w0, w1
12737         bl      FtlBbmIsBadBlock
12738         cbnz    w0, .L1681
12739         ldr     x4, [x22, #:got_lo12:req_erase]
12740         umull   x0, w20, w28
12741         ldr     w2, [x29,116]
12742         ldr     x1, [x4]
12743         add     x1, x1, x0
12744         add     w3, w24, w2, lsl 10
12745         mov     w2, 4
12746         str     w3, [x1,4]
12747         ldr     x1, [x4]
12748         add     x1, x1, x0
12749         adrp    x0, :got:p_io_data_buf_0
12750         ldr     x0, [x0, #:got_lo12:p_io_data_buf_0]
12751         ldr     x0, [x0]
12752         str     x0, [x1,8]
12753         adrp    x0, :got:c_ftl_nand_byte_pre_oob
12754         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
12755         ldrh    w0, [x0]
12756         mul     w0, w20, w0
12757         add     w20, w20, 1
12758         sdiv    w0, w0, w2
12759         adrp    x2, :got:p_io_data_buf_1
12760         uxth    w20, w20
12761         ldr     x3, [x2, #:got_lo12:p_io_data_buf_1]
12762         ldr     x3, [x3]
12763         add     x0, x3, x0, sxtw 2
12764         str     x0, [x1,16]
12765         b       .L1681
12766 .L1679:
12767         str     x1, [x29,104]
12768         bl      IsBlkInVendorPart
12769         ldr     x1, [x29,104]
12770         cbz     w0, .L1682
12771 .L1681:
12772         add     w2, w23, 1
12773         uxth    w23, w2
12774         b       .L1678
12775 .L1706:
12776         cbz     w20, .L1673
12777         ldr     x0, [x22, #:got_lo12:req_erase]
12778         mov     w1, w20
12779         mov     w2, w27
12780         mov     w3, 1
12781         mov     x23, 0
12782         ldr     x0, [x0]
12783         bl      FlashProgPages
12784 .L1685:
12785         cmp     w20, w23, uxth
12786         bls     .L1707
12787         ldr     x1, [x22, #:got_lo12:req_erase]
12788         mov     x0, 56
12789         mul     x0, x23, x0
12790         ldr     x3, [x1]
12791         add     x1, x3, x0
12792         ldr     w0, [x3,x0]
12793         cmn     w0, #1
12794         bne     .L1686
12795         ldr     w0, [x1,4]
12796         add     w19, w19, 1
12797         lsr     w0, w0, 10
12798         uxth    w19, w19
12799         bl      FtlBbmMapBadBlock
12800         b       .L1687
12801 .L1686:
12802         cbz     w26, .L1687
12803         ldr     w0, [x1,4]
12804         mov     w1, 1
12805         lsr     w0, w0, 10
12806         bl      FtlFreeSysBlkQueueIn
12807 .L1687:
12808         add     x23, x23, 1
12809         b       .L1685
12810 .L1707:
12811         ldr     w0, [x29,120]
12812         add     w24, w24, w0
12813         uxth    w24, w24
12814         cmp     w24, w25
12815         bcc     .L1689
12816         cmp     w21, 63
12817         bhi     .L1673
12818         ldr     x22, [x22, #:got_lo12:req_erase]
12819         mov     w1, w20
12820         ldr     x0, [x22]
12821         bl      FlashEraseBlocks
12822 .L1673:
12823         mov     w0, w19
12824         ldp     x19, x20, [sp,16]
12825         ldp     x21, x22, [sp,32]
12826         ldp     x23, x24, [sp,48]
12827         ldp     x25, x26, [sp,64]
12828         ldp     x27, x28, [sp,80]
12829         ldp     x29, x30, [sp], 128
12830         ret
12831         .size   FtlLowFormatEraseBlock, .-FtlLowFormatEraseBlock
12832         .align  2
12833         .global FtlBbmTblFlush
12834         .type   FtlBbmTblFlush, %function
12835 FtlBbmTblFlush:
12836         stp     x29, x30, [sp, -112]!
12837         add     x29, sp, 0
12838         stp     x21, x22, [sp,32]
12839         adrp    x21, :got:p_sys_data_buf
12840         adrp    x22, :got:p_sys_spare_buf
12841         stp     x19, x20, [sp,16]
12842         adrp    x20, :got:req_sys
12843         mov     x19, 0
12844         ldr     x0, [x21, #:got_lo12:p_sys_data_buf]
12845         stp     x25, x26, [sp,64]
12846         stp     x23, x24, [sp,48]
12847         stp     x27, x28, [sp,80]
12848         ldr     x1, [x20, #:got_lo12:req_sys]
12849         adrp    x24, :got:c_ftl_nand_die_num
12850         ldr     x0, [x0]
12851         adrp    x25, :got:gBbtInfo
12852         adrp    x26, :got:c_ftl_nand_bbm_buf_size
12853         str     x0, [x1,8]
12854         ldr     x2, [x22, #:got_lo12:p_sys_spare_buf]
12855         ldr     x2, [x2]
12856         str     x2, [x1,16]
12857         adrp    x2, :got:c_ftl_nand_byte_pre_page
12858         mov     w1, 0
12859         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
12860         ldrh    w2, [x2]
12861         bl      ftl_memset
12862         str     x21, [x29,104]
12863         str     x22, [x29,96]
12864 .L1709:
12865         ldr     x1, [x24, #:got_lo12:c_ftl_nand_die_num]
12866         mov     w0, w19
12867         adrp    x23, :got:gBbtInfo
12868         add     x19, x19, 1
12869         ldrh    w1, [x1]
12870         cmp     w0, w1
12871         bge     .L1716
12872         ldr     x1, [x26, #:got_lo12:c_ftl_nand_bbm_buf_size]
12873         ldrh    w2, [x1]
12874         ldr     x1, [x20, #:got_lo12:req_sys]
12875         mul     w0, w0, w2
12876         ldr     x3, [x1,8]
12877         lsl     w2, w2, 2
12878         ldr     x1, [x25, #:got_lo12:gBbtInfo]
12879         add     x0, x3, x0, sxtw 2
12880         add     x1, x1, x19, lsl 3
12881         ldr     x1, [x1,24]
12882         bl      ftl_memcpy
12883         b       .L1709
12884 .L1716:
12885         ldr     x0, [x20, #:got_lo12:req_sys]
12886         mov     w1, 255
12887         mov     w2, 16
12888         adrp    x24, .LC106
12889         adrp    x25, .LC107
12890         mov     w26, 0
12891         ldr     x21, [x0,16]
12892         add     x24, x24, :lo12:.LC106
12893         adrp    x27, :got:c_ftl_nand_page_pre_slc_blk
12894         adrp    x28, :got:req_erase
12895         mov     x0, x21
12896         add     x25, x25, :lo12:.LC107
12897         bl      ftl_memset
12898         mov     w0, -3887
12899         strh    w0, [x21]
12900         ldr     x0, [x23, #:got_lo12:gBbtInfo]
12901         ldr     w1, [x0,8]
12902         str     w1, [x21,4]
12903         ldrh    w1, [x0]
12904         strh    w1, [x21,2]
12905         ldrh    w1, [x0,4]
12906         ldrh    w0, [x0,6]
12907         strh    w0, [x21,10]
12908         adrp    x0, :got:c_ftl_nand_sys_blks_per_plane
12909         strh    w1, [x21,8]
12910         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sys_blks_per_plane]
12911         ldr     w0, [x0]
12912         strh    w0, [x21,12]
12913 .L1711:
12914         ldr     x0, [x29,104]
12915         ldr     x22, [x20, #:got_lo12:req_sys]
12916         ldr     x0, [x0, #:got_lo12:p_sys_data_buf]
12917         ldr     x0, [x0]
12918         str     x0, [x22,8]
12919         ldr     x0, [x29,96]
12920         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
12921         str     wzr, [x22]
12922         ldr     x0, [x0]
12923         str     x0, [x22,16]
12924         ldr     x19, [x23, #:got_lo12:gBbtInfo]
12925         ldrh    w4, [x21,10]
12926         ldrh    w1, [x19]
12927         ldrh    w2, [x19,2]
12928         ldrh    w3, [x19,4]
12929         orr     w0, w2, w1, lsl 10
12930         str     w0, [x22,4]
12931         mov     x0, x24
12932         bl      printk
12933         mov     w1, 1
12934         mov     x0, x22
12935         mov     w2, w1
12936         mov     w3, w1
12937         bl      FlashProgPages
12938         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
12939         ldrh    w1, [x19,2]
12940         ldrh    w0, [x0]
12941         sub     w0, w0, #1
12942         cmp     w1, w0
12943         blt     .L1712
12944         ldr     w0, [x19,8]
12945         ldrh    w1, [x19]
12946         add     w0, w0, 1
12947         str     w0, [x19,8]
12948         str     w0, [x21,4]
12949         strh    w1, [x21,8]
12950         ldrh    w0, [x19,4]
12951         strh    w0, [x19]
12952         strh    w1, [x19,4]
12953         lsl     w0, w0, 10
12954         strh    wzr, [x19,2]
12955         str     w0, [x22,4]
12956         ldr     x1, [x28, #:got_lo12:req_erase]
12957         ldr     x2, [x1]
12958         str     w0, [x2,4]
12959         ldr     x0, [x1]
12960         mov     w1, 1
12961         bl      FlashEraseBlocks
12962         mov     w1, 1
12963         mov     x0, x22
12964         mov     w2, w1
12965         mov     w3, w1
12966         bl      FlashProgPages
12967 .L1712:
12968         bl      FtlBbtInfoPrint
12969         ldr     x1, [x23, #:got_lo12:gBbtInfo]
12970         ldrh    w0, [x1,2]
12971         add     w0, w0, 1
12972         strh    w0, [x1,2]
12973         ldr     x1, [x20, #:got_lo12:req_sys]
12974         ldr     w0, [x1]
12975         cmn     w0, #1
12976         bne     .L1713
12977         ldr     w1, [x1,4]
12978         mov     x0, x25
12979         bl      printk
12980         b       .L1711
12981 .L1713:
12982         cbnz    w26, .L1717
12983         mov     w26, 1
12984         b       .L1711
12985 .L1717:
12986         mov     w0, 0
12987         ldp     x19, x20, [sp,16]
12988         ldp     x21, x22, [sp,32]
12989         ldp     x23, x24, [sp,48]
12990         ldp     x25, x26, [sp,64]
12991         ldp     x27, x28, [sp,80]
12992         ldp     x29, x30, [sp], 112
12993         ret
12994         .size   FtlBbmTblFlush, .-FtlBbmTblFlush
12995         .align  2
12996         .global allocate_data_superblock
12997         .type   allocate_data_superblock, %function
12998 allocate_data_superblock:
12999         stp     x29, x30, [sp, -128]!
13000         add     x29, sp, 0
13001         stp     x19, x20, [sp,16]
13002         stp     x21, x22, [sp,32]
13003         stp     x23, x24, [sp,48]
13004         stp     x25, x26, [sp,64]
13005         stp     x27, x28, [sp,80]
13006         mov     x19, x0
13007         adrp    x20, :got:g_num_free_superblocks
13008         adrp    x24, :got:c_ftl_nand_type
13009         adrp    x21, :got:g_inkDie_check_enable
13010         adrp    x22, :got:g_min_erase_count
13011 .L1719:
13012         adrp    x0, :got:g_gc_temp_superblock
13013         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
13014         cmp     x19, x0
13015         bne     .L1720
13016         ldr     x0, [x20, #:got_lo12:g_num_free_superblocks]
13017         ldrh    w2, [x0]
13018         adrp    x0, :got:g_in_swl_replace
13019         lsr     w3, w2, 1
13020         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
13021         add     w1, w3, 1
13022         ldr     w4, [x0]
13023         mul     w0, w2, w4
13024         add     w1, w1, w0, lsr 2
13025         ldr     x0, [x21, #:got_lo12:g_inkDie_check_enable]
13026         uxth    w1, w1
13027         ldr     w0, [x0]
13028         cbz     w0, .L1721
13029         ldr     x0, [x22, #:got_lo12:g_min_erase_count]
13030         ldr     w0, [x0]
13031         cmp     w0, 29
13032         bhi     .L1721
13033         cmp     w0, 2
13034         mov     w1, 0
13035         bls     .L1722
13036         tbz     x2, 0, .L1746
13037         cbz     w4, .L1722
13038 .L1746:
13039         mov     w1, w3
13040         b       .L1721
13041 .L1720:
13042         ldrb    w0, [x19,8]
13043         mov     w1, 0
13044         cmp     w0, 1
13045         bne     .L1722
13046         ldr     x0, [x24, #:got_lo12:c_ftl_nand_type]
13047         ldrh    w0, [x0]
13048         cmp     w0, 1
13049         beq     .L1722
13050         ldr     x2, [x21, #:got_lo12:g_inkDie_check_enable]
13051         ldr     x0, [x20, #:got_lo12:g_num_free_superblocks]
13052         ldr     w2, [x2]
13053         ldrh    w0, [x0]
13054         lsr     w1, w0, 3
13055         cbz     w2, .L1721
13056         ldr     x2, [x22, #:got_lo12:g_min_erase_count]
13057         ldr     w2, [x2]
13058         cmp     w2, 1
13059         bhi     .L1721
13060         mov     w1, 7
13061         mul     w1, w0, w1
13062         lsr     w1, w1, 3
13063 .L1721:
13064         cbz     w1, .L1722
13065         sub     w1, w1, #1
13066         uxth    w1, w1
13067 .L1722:
13068         adrp    x0, :got:p_free_data_block_list_head
13069         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
13070         bl      List_pop_index_node
13071         uxth    w26, w0
13072         ldr     x1, [x20, #:got_lo12:g_num_free_superblocks]
13073         ldrh    w0, [x1]
13074         sub     w0, w0, #1
13075         strh    w0, [x1]
13076         strh    w26, [x19]
13077         mov     x0, x19
13078         bl      make_superblock
13079         ldrb    w0, [x19,7]
13080         cbz     w0, .L1724
13081         adrp    x0, :got:c_ftl_nand_planes_num
13082         adrp    x6, :got:req_erase
13083         mov     x3, 56
13084         mov     w7, 65535
13085         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
13086         ldrh    w5, [x0]
13087         mov     x0, 0
13088         mov     w25, w0
13089         b       .L1725
13090 .L1724:
13091         adrp    x0, :got:p_valid_page_count_table
13092         ubfiz   x1, x26, 1, 16
13093         mov     w2, -1
13094         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13095         ldr     x0, [x0]
13096         strh    w2, [x0,x1]
13097         b       .L1768
13098 .L1728:
13099         ldr     x1, [x6, #:got_lo12:req_erase]
13100         ldr     x4, [x1]
13101         madd    x1, x0, x3, x4
13102         str     xzr, [x1,16]
13103         str     xzr, [x1,8]
13104         add     x1, x19, x0, lsl 1
13105         ldrh    w1, [x1,16]
13106         cmp     w1, w7
13107         beq     .L1727
13108         umull   x2, w25, w3
13109         add     w25, w25, 1
13110         lsl     w1, w1, 10
13111         add     x2, x4, x2
13112         uxth    w25, w25
13113         str     w1, [x2,4]
13114 .L1727:
13115         add     x0, x0, 1
13116 .L1725:
13117         cmp     w5, w0, uxth
13118         adrp    x23, :got:req_erase
13119         bhi     .L1728
13120         adrp    x1, :got:g_active_superblock
13121         uxtw    x27, w26
13122         adrp    x0, :got:p_erase_count_table
13123         ldr     x1, [x1, #:got_lo12:g_active_superblock]
13124         cmp     x19, x1
13125         bne     .L1729
13126         ldr     x2, [x21, #:got_lo12:g_inkDie_check_enable]
13127         ldr     w2, [x2]
13128         cbz     w2, .L1729
13129         ldr     x2, [x0, #:got_lo12:p_erase_count_table]
13130         ldr     x2, [x2]
13131         ldrh    w2, [x2,x27,lsl 1]
13132         cmp     w2, 30
13133         bls     .L1729
13134         strb    wzr, [x1,8]
13135 .L1729:
13136         ldrb    w5, [x19,8]
13137         adrp    x1, :got:c_mlc_erase_count_value
13138         adrp    x3, :got:g_totle_mlc_erase_count
13139         adrp    x2, :got:g_totle_slc_erase_count
13140         ldr     x6, [x0, #:got_lo12:p_erase_count_table]
13141         cbnz    w5, .L1730
13142         lsl     x5, x27, 1
13143         ldr     x6, [x6]
13144         mov     w7, 2
13145         ldrh    w8, [x6,x5]
13146         cbz     w8, .L1769
13147         ldr     x7, [x1, #:got_lo12:c_mlc_erase_count_value]
13148         ldrh    w7, [x7]
13149         add     w7, w8, w7
13150 .L1769:
13151         strh    w7, [x6,x5]
13152         ldr     x6, [x3, #:got_lo12:g_totle_mlc_erase_count]
13153         b       .L1770
13154 .L1730:
13155         lsl     x5, x27, 1
13156         ldr     x7, [x6]
13157         ldrh    w6, [x7,x5]
13158         add     w6, w6, 1
13159         strh    w6, [x7,x5]
13160         ldr     x6, [x2, #:got_lo12:g_totle_slc_erase_count]
13161 .L1770:
13162         ldr     w5, [x6]
13163         lsl     x27, x27, 1
13164         add     w5, w5, 1
13165         str     w5, [x6]
13166         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
13167         ldr     x0, [x0]
13168         ldrh    w5, [x0,x27]
13169         adrp    x0, :got:g_max_erase_count
13170         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
13171         ldr     w6, [x0]
13172         cmp     w5, w6
13173         bls     .L1734
13174         str     w5, [x0]
13175 .L1734:
13176         ldr     x1, [x1, #:got_lo12:c_mlc_erase_count_value]
13177         adrp    x5, :got:g_totle_avg_erase_count
13178         ldr     x3, [x3, #:got_lo12:g_totle_mlc_erase_count]
13179         ldr     x2, [x2, #:got_lo12:g_totle_slc_erase_count]
13180         ldrh    w1, [x1]
13181         ldr     w3, [x3]
13182         ldr     w0, [x2]
13183         ldr     x5, [x5, #:got_lo12:g_totle_avg_erase_count]
13184         madd    w0, w1, w3, w0
13185         adrp    x1, :got:c_ftl_nand_data_blks_per_plane
13186         mov     x3, 56
13187         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_blks_per_plane]
13188         ldrh    w1, [x1]
13189         udiv    w0, w0, w1
13190         str     w0, [x5]
13191         adrp    x0, :got:gp_ect_tbl_info
13192         ldr     x0, [x0, #:got_lo12:gp_ect_tbl_info]
13193         ldr     x1, [x0]
13194         ldr     w0, [x1,16]
13195         add     w0, w0, 1
13196         str     w0, [x1,16]
13197         mov     x0, 0
13198 .L1735:
13199         cmp     w25, w0, uxth
13200         bls     .L1771
13201         ldr     x1, [x23, #:got_lo12:req_erase]
13202         ldr     x1, [x1]
13203         madd    x1, x0, x3, x1
13204         add     x0, x0, 1
13205         ldr     w2, [x1,4]
13206         and     w2, w2, -1024
13207         str     w2, [x1,4]
13208         b       .L1735
13209 .L1771:
13210         ldr     x0, [x23, #:got_lo12:req_erase]
13211         mov     w1, w25
13212         mov     x28, 0
13213         ldr     x0, [x0]
13214         bl      FlashEraseBlocks
13215         mov     w1, w28
13216         mov     x3, 56
13217 .L1737:
13218         cmp     w25, w28, uxth
13219         bls     .L1772
13220         ldr     x2, [x23, #:got_lo12:req_erase]
13221         mul     x0, x28, x3
13222         ldr     x2, [x2]
13223         add     x5, x2, x0
13224         ldr     w2, [x2,x0]
13225         cmn     w2, #1
13226         bne     .L1738
13227         ldr     w0, [x5,4]
13228         add     w1, w1, 1
13229         str     x3, [x29,96]
13230         lsr     w0, w0, 10
13231         str     x2, [x29,104]
13232         str     x1, [x29,112]
13233         str     x1, [x29,120]
13234         bl      FtlBbmMapBadBlock
13235         add     x0, x19, x28, lsl 1
13236         ldr     x2, [x29,104]
13237         ldr     x3, [x29,96]
13238         ldr     x1, [x29,120]
13239         strh    w2, [x0,16]
13240         ldrb    w0, [x19,7]
13241         sub     w0, w0, #1
13242         strb    w0, [x19,7]
13243 .L1738:
13244         add     x28, x28, 1
13245         b       .L1737
13246 .L1772:
13247         cbz     w1, .L1740
13248         mov     w0, w26
13249         bl      update_multiplier_value
13250         bl      FtlBbmTblFlush
13251 .L1740:
13252         ldrb    w1, [x19,7]
13253         adrp    x0, :got:p_valid_page_count_table
13254         cbnz    w1, .L1741
13255         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13256         mov     w1, -1
13257         ldr     x0, [x0]
13258         strh    w1, [x0,x27]
13259 .L1768:
13260         mov     w0, w26
13261         bl      INSERT_DATA_LIST
13262         b       .L1719
13263 .L1741:
13264         adrp    x2, :got:c_ftl_nand_page_pre_blk
13265         ldr     x2, [x2, #:got_lo12:c_ftl_nand_page_pre_blk]
13266         strh    wzr, [x19,2]
13267         strb    wzr, [x19,6]
13268         ldrh    w2, [x2]
13269         strh    w26, [x19]
13270         mul     w1, w1, w2
13271         adrp    x2, :got:g_GlobalSysVersion
13272         uxth    w1, w1
13273         strh    w1, [x19,4]
13274         ldr     x2, [x2, #:got_lo12:g_GlobalSysVersion]
13275         ldr     w3, [x2]
13276         str     w3, [x19,12]
13277         add     w3, w3, 1
13278         str     w3, [x2]
13279         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13280         ldrh    w2, [x19]
13281         ldr     x0, [x0]
13282         strh    w1, [x0,x2,lsl 1]
13283         mov     w0, 0
13284         ldp     x19, x20, [sp,16]
13285         ldp     x21, x22, [sp,32]
13286         ldp     x23, x24, [sp,48]
13287         ldp     x25, x26, [sp,64]
13288         ldp     x27, x28, [sp,80]
13289         ldp     x29, x30, [sp], 128
13290         ret
13291         .size   allocate_data_superblock, .-allocate_data_superblock
13292         .align  2
13293         .global FtlGcFreeBadSuperBlk
13294         .type   FtlGcFreeBadSuperBlk, %function
13295 FtlGcFreeBadSuperBlk:
13296         stp     x29, x30, [sp, -112]!
13297         add     x29, sp, 0
13298         stp     x21, x22, [sp,32]
13299         adrp    x21, :got:g_gc_bad_block_temp_num
13300         stp     x23, x24, [sp,48]
13301         uxth    w24, w0
13302         ldr     x0, [x21, #:got_lo12:g_gc_bad_block_temp_num]
13303         stp     x19, x20, [sp,16]
13304         stp     x25, x26, [sp,64]
13305         stp     x27, x28, [sp,80]
13306         mov     w20, 0
13307         ldrh    w0, [x0]
13308         cbz     w0, .L1775
13309         adrp    x22, .LC108
13310         adrp    x23, :got:c_ftl_nand_planes_num
13311         adrp    x25, :got:p_plane_order_table
13312         adrp    x26, :got:g_gc_bad_block_temp_tbl
13313         add     x22, x22, :lo12:.LC108
13314 .L1783:
13315         ldr     x0, [x23, #:got_lo12:c_ftl_nand_planes_num]
13316         ldrh    w0, [x0]
13317         cmp     w0, w20
13318         bls     .L1784
13319         ldr     x0, [x25, #:got_lo12:p_plane_order_table]
13320         mov     w1, w24
13321         mov     w19, 0
13322         ldrb    w0, [x0,w20,sxtw]
13323         bl      V2P_block
13324         uxth    w27, w0
13325 .L1776:
13326         ldr     x28, [x21, #:got_lo12:g_gc_bad_block_temp_num]
13327         ldrh    w0, [x28]
13328         cmp     w0, w19
13329         bls     .L1785
13330         ldr     x0, [x26, #:got_lo12:g_gc_bad_block_temp_tbl]
13331         adrp    x4, :got:g_gc_bad_block_temp_tbl
13332         ldrh    w0, [x0,w19,sxtw 1]
13333         cmp     w0, w27
13334         bne     .L1777
13335         mov     w1, w27
13336         mov     x0, x22
13337         str     x4, [x29,104]
13338         bl      printk
13339         mov     w0, w27
13340         bl      FtlBbmMapBadBlock
13341         bl      FtlBbmTblFlush
13342         ldrh    w2, [x28]
13343         mov     w3, w19
13344         ldr     x4, [x29,104]
13345 .L1778:
13346         cmp     w3, w2
13347         bcs     .L1786
13348         ldr     x1, [x4, #:got_lo12:g_gc_bad_block_temp_tbl]
13349         add     w0, w3, 1
13350         ldrh    w5, [x1,w0,sxtw 1]
13351         strh    w5, [x1,w3,sxtw 1]
13352         uxth    w3, w0
13353         b       .L1778
13354 .L1786:
13355         ldr     x0, [x21, #:got_lo12:g_gc_bad_block_temp_num]
13356         sub     w2, w2, #1
13357         strh    w2, [x0]
13358 .L1777:
13359         add     w19, w19, 1
13360         uxth    w19, w19
13361         b       .L1776
13362 .L1785:
13363         add     w20, w20, 1
13364         uxth    w20, w20
13365         b       .L1783
13366 .L1784:
13367         bl      FtlGcReFreshBadBlk
13368 .L1775:
13369         mov     w0, 0
13370         ldp     x19, x20, [sp,16]
13371         ldp     x21, x22, [sp,32]
13372         ldp     x23, x24, [sp,48]
13373         ldp     x25, x26, [sp,64]
13374         ldp     x27, x28, [sp,80]
13375         ldp     x29, x30, [sp], 112
13376         ret
13377         .size   FtlGcFreeBadSuperBlk, .-FtlGcFreeBadSuperBlk
13378         .align  2
13379         .global update_vpc_list
13380         .type   update_vpc_list, %function
13381 update_vpc_list:
13382         stp     x29, x30, [sp, -32]!
13383         add     x29, sp, 0
13384         str     x19, [sp,16]
13385         uxth    w19, w0
13386         adrp    x0, :got:p_valid_page_count_table
13387         ubfiz   x1, x19, 1, 16
13388         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13389         ldr     x0, [x0]
13390         ldrh    w1, [x0,x1]
13391         cbnz    w1, .L1788
13392         adrp    x0, :got:g_gc_superblock
13393         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
13394         ldrh    w2, [x0]
13395         cmp     w2, w19
13396         bne     .L1789
13397         mov     w1, -1
13398         strh    w1, [x0]
13399         b       .L1790
13400 .L1789:
13401         adrp    x0, :got:g_active_superblock
13402         ldr     x0, [x0, #:got_lo12:g_active_superblock]
13403         ldrh    w2, [x0]
13404         mov     w0, w1
13405         cmp     w2, w19
13406         beq     .L1791
13407         adrp    x0, :got:g_buffer_superblock
13408         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
13409         ldrh    w2, [x0]
13410         mov     w0, w1
13411         cmp     w2, w19
13412         beq     .L1791
13413         adrp    x0, :got:g_gc_temp_superblock
13414         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
13415         ldrh    w2, [x0]
13416         mov     w0, w1
13417         cmp     w2, w19
13418         beq     .L1791
13419 .L1790:
13420         adrp    x0, :got:p_data_block_list_head
13421         mov     w1, w19
13422         ldr     x0, [x0, #:got_lo12:p_data_block_list_head]
13423         bl      List_remove_node
13424         adrp    x0, :got:g_num_data_superblocks
13425         ldr     x0, [x0, #:got_lo12:g_num_data_superblocks]
13426         ldrh    w1, [x0]
13427         sub     w1, w1, #1
13428         strh    w1, [x0]
13429         mov     w0, w19
13430         bl      free_data_superblock
13431         mov     w0, w19
13432         bl      FtlGcFreeBadSuperBlk
13433         mov     w0, 1
13434         b       .L1791
13435 .L1788:
13436         mov     w0, w19
13437         bl      List_update_data_list
13438         mov     w0, 0
13439 .L1791:
13440         ldr     x19, [sp,16]
13441         ldp     x29, x30, [sp], 32
13442         ret
13443         .size   update_vpc_list, .-update_vpc_list
13444         .align  2
13445         .global decrement_vpc_count
13446         .type   decrement_vpc_count, %function
13447 decrement_vpc_count:
13448         stp     x29, x30, [sp, -48]!
13449         uxth    w1, w0
13450         mov     w0, 65535
13451         add     x29, sp, 0
13452         str     x19, [sp,16]
13453         cmp     w1, w0
13454         beq     .L1796
13455         adrp    x0, :got:p_valid_page_count_table
13456         ubfiz   x2, x1, 1, 16
13457         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
13458         ldr     x0, [x0]
13459         ldrh    w19, [x0,x2]
13460         cbnz    w19, .L1797
13461         adrp    x0, .LC109
13462         mov     w2, w19
13463         add     x0, x0, :lo12:.LC109
13464         bl      printk
13465         b       .L1801
13466 .L1797:
13467         sub     w19, w19, #1
13468         strh    w19, [x0,x2]
13469 .L1796:
13470         adrp    x19, :got:g_tmp_data_superblock_id
13471         mov     w0, 65535
13472         ldr     x19, [x19, #:got_lo12:g_tmp_data_superblock_id]
13473         ldrh    w2, [x19]
13474         cmp     w2, w0
13475         bne     .L1799
13476         strh    w1, [x19]
13477 .L1801:
13478         mov     w0, 0
13479         b       .L1798
13480 .L1799:
13481         cmp     w2, w1
13482         str     x1, [x29,40]
13483         mov     w0, 0
13484         beq     .L1798
13485         mov     w0, w2
13486         bl      update_vpc_list
13487         cmp     w0, wzr
13488         ldr     x1, [x29,40]
13489         cset    w0, ne
13490         strh    w1, [x19]
13491 .L1798:
13492         ldr     x19, [sp,16]
13493         ldp     x29, x30, [sp], 48
13494         ret
13495         .size   decrement_vpc_count, .-decrement_vpc_count
13496         .align  2
13497         .global FtlSlcSuperblockCheck
13498         .type   FtlSlcSuperblockCheck, %function
13499 FtlSlcSuperblockCheck:
13500         stp     x29, x30, [sp, -48]!
13501         add     x29, sp, 0
13502         stp     x19, x20, [sp,16]
13503         stp     x21, x22, [sp,32]
13504         ldrh    w1, [x0,4]
13505         cbz     w1, .L1802
13506         mov     x19, x0
13507         ldrb    w0, [x0,6]
13508         mov     w20, 65535
13509         adrp    x21, :got:mlcPageToSlcPageTbl
13510         add     x0, x0, 8
13511         adrp    x22, :got:c_ftl_nand_planes_num
13512         ldrh    w0, [x19,x0,lsl 1]
13513 .L1805:
13514         cmp     w0, w20
13515         bne     .L1809
13516 .L1807:
13517         ldrb    w0, [x19,6]
13518         add     w0, w0, 1
13519         uxtb    w0, w0
13520         strb    w0, [x19,6]
13521         ldr     x1, [x22, #:got_lo12:c_ftl_nand_planes_num]
13522         ldrh    w1, [x1]
13523         cmp     w1, w0
13524         bne     .L1806
13525         ldrh    w0, [x19,2]
13526         strb    wzr, [x19,6]
13527         add     w0, w0, 1
13528         strh    w0, [x19,2]
13529 .L1806:
13530         ldrb    w0, [x19,6]
13531         add     x0, x0, 8
13532         ldrh    w0, [x19,x0,lsl 1]
13533         b       .L1805
13534 .L1809:
13535         ldrb    w0, [x19,8]
13536         cmp     w0, 1
13537         bne     .L1802
13538         ldr     x0, [x21, #:got_lo12:mlcPageToSlcPageTbl]
13539         ldrh    w1, [x19,2]
13540         ldrh    w0, [x0,w1,sxtw 1]
13541         cmp     w0, w20
13542         bne     .L1802
13543         ldrh    w0, [x19,4]
13544         sub     w0, w0, #1
13545         strh    w0, [x19,4]
13546         ldrh    w0, [x19]
13547         bl      decrement_vpc_count
13548         ldrh    w1, [x19,4]
13549         cbnz    w1, .L1807
13550         ldrh    w0, [x19,2]
13551         strb    w1, [x19,6]
13552         add     w0, w0, 1
13553         strh    w0, [x19,2]
13554 .L1802:
13555         ldp     x19, x20, [sp,16]
13556         ldp     x21, x22, [sp,32]
13557         ldp     x29, x30, [sp], 48
13558         ret
13559         .size   FtlSlcSuperblockCheck, .-FtlSlcSuperblockCheck
13560         .align  2
13561         .global get_new_active_ppa
13562         .type   get_new_active_ppa, %function
13563 get_new_active_ppa:
13564         stp     x29, x30, [sp, -64]!
13565         add     x29, sp, 0
13566         stp     x19, x20, [sp,16]
13567         stp     x21, x22, [sp,32]
13568         stp     x23, x24, [sp,48]
13569         mov     x19, x0
13570         strb    wzr, [x0,10]
13571         ldrb    w0, [x0,6]
13572         mov     w20, 65535
13573         adrp    x21, :got:c_ftl_nand_planes_num
13574         adrp    x23, :got:mlcPageToSlcPageTbl
13575         add     x0, x0, 8
13576         ldrh    w0, [x19,x0,lsl 1]
13577 .L1811:
13578         cmp     w0, w20
13579         adrp    x22, :got:c_ftl_nand_planes_num
13580         bne     .L1823
13581 .L1812:
13582         ldrb    w0, [x19,6]
13583         add     w0, w0, 1
13584         uxtb    w0, w0
13585         strb    w0, [x19,6]
13586         ldr     x1, [x21, #:got_lo12:c_ftl_nand_planes_num]
13587         ldrh    w1, [x1]
13588         cmp     w1, w0
13589         bne     .L1813
13590         ldrh    w0, [x19,2]
13591         strb    wzr, [x19,6]
13592         add     w0, w0, 1
13593         strh    w0, [x19,2]
13594 .L1813:
13595         ldrb    w0, [x19,6]
13596         add     x0, x0, 8
13597         ldrh    w0, [x19,x0,lsl 1]
13598         b       .L1811
13599 .L1823:
13600         ldrb    w1, [x19,8]
13601         cmp     w1, 1
13602         bne     .L1814
13603         ldr     x1, [x23, #:got_lo12:mlcPageToSlcPageTbl]
13604         ldrh    w2, [x19,2]
13605         ldrh    w1, [x1,w2,sxtw 1]
13606         cmp     w1, w20
13607         bne     .L1814
13608         ldrh    w0, [x19,4]
13609         sub     w0, w0, #1
13610         strh    w0, [x19,4]
13611         ldrh    w0, [x19]
13612         bl      decrement_vpc_count
13613         b       .L1812
13614 .L1814:
13615         ldrh    w20, [x19,2]
13616         mov     w21, 65535
13617         mov     w23, w21
13618         adrp    x24, :got:mlcPageToSlcPageTbl
13619         orr     w20, w20, w0, lsl 10
13620         ldrh    w0, [x19,4]
13621         sub     w0, w0, #1
13622         strh    w0, [x19,4]
13623 .L1815:
13624         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
13625         ldrb    w1, [x19,6]
13626         ldrh    w2, [x0]
13627 .L1817:
13628         add     w1, w1, 1
13629         uxtb    w1, w1
13630         cmp     w1, w2
13631         bne     .L1816
13632         ldrh    w0, [x19,2]
13633         mov     w1, 0
13634         add     w0, w0, 1
13635         strh    w0, [x19,2]
13636 .L1816:
13637         add     x0, x19, x1, sxtw 1
13638         ldrh    w0, [x0,16]
13639         cmp     w0, w21
13640         beq     .L1817
13641         ldrb    w0, [x19,8]
13642         strb    w1, [x19,6]
13643         cmp     w0, 1
13644         bne     .L1818
13645         ldr     x0, [x24, #:got_lo12:mlcPageToSlcPageTbl]
13646         ldrh    w1, [x19,2]
13647         ldrh    w0, [x0,w1,sxtw 1]
13648         cmp     w0, w23
13649         bne     .L1818
13650         ldrh    w0, [x19,4]
13651         cbz     w0, .L1818
13652         sub     w0, w0, #1
13653         strh    w0, [x19,4]
13654         ldrh    w0, [x19]
13655         bl      decrement_vpc_count
13656         b       .L1815
13657 .L1818:
13658         mov     w0, w20
13659         ldp     x19, x20, [sp,16]
13660         ldp     x21, x22, [sp,32]
13661         ldp     x23, x24, [sp,48]
13662         ldp     x29, x30, [sp], 64
13663         ret
13664         .size   get_new_active_ppa, .-get_new_active_ppa
13665         .align  2
13666         .global FtlVpcTblFlush
13667         .type   FtlVpcTblFlush, %function
13668 FtlVpcTblFlush:
13669         stp     x29, x30, [sp, -96]!
13670         add     x29, sp, 0
13671         stp     x23, x24, [sp,48]
13672         adrp    x23, :got:p_sys_data_buf
13673         adrp    x24, :got:p_sys_spare_buf
13674         stp     x21, x22, [sp,32]
13675         adrp    x21, :got:req_sys
13676         adrp    x22, :got:gSysInfo
13677         ldr     x0, [x23, #:got_lo12:p_sys_data_buf]
13678         stp     x25, x26, [sp,64]
13679         stp     x19, x20, [sp,16]
13680         stp     x27, x28, [sp,80]
13681         ldr     x26, [x21, #:got_lo12:req_sys]
13682         adrp    x19, :got:g_sys_save_data
13683         ldr     x0, [x0]
13684         adrp    x25, :got:g_GlobalSysVersion
13685         mov     w28, 65535
13686         str     x0, [x26,8]
13687         ldr     x0, [x24, #:got_lo12:p_sys_spare_buf]
13688         ldr     x20, [x0]
13689         str     x20, [x26,16]
13690         ldr     x0, [x22, #:got_lo12:gSysInfo]
13691         str     wzr, [x20,12]
13692         ldrh    w1, [x0]
13693         strh    w1, [x20,2]
13694         mov     w1, -3932
13695         strh    w1, [x20]
13696         ldr     w1, [x0,8]
13697         str     w1, [x20,4]
13698         mov     w1, 19539
13699         str     wzr, [x20,8]
13700         movk    w1, 0x4654, lsl 16
13701         ldrh    w0, [x0,6]
13702         ldr     x19, [x19, #:got_lo12:g_sys_save_data]
13703         str     w1, [x19]
13704         mov     w1, 39
13705         strh    w0, [x19,8]
13706         adrp    x0, :got:c_ftl_nand_die_num
13707         movk    w1, 0x5000, lsl 16
13708         str     w1, [x19,4]
13709         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
13710         ldrh    w0, [x0]
13711         strb    w0, [x19,10]
13712         adrp    x0, :got:g_active_superblock
13713         ldr     x0, [x0, #:got_lo12:g_active_superblock]
13714         ldrh    w1, [x0]
13715         strh    w1, [x19,14]
13716         ldrh    w1, [x0,2]
13717         ldrb    w2, [x0,6]
13718         ldrb    w0, [x0,8]
13719         strb    w0, [x19,11]
13720         adrp    x0, :got:g_buffer_superblock
13721         orr     w1, w2, w1, lsl 6
13722         strh    w1, [x19,16]
13723         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
13724         ldrh    w1, [x0]
13725         strh    w1, [x19,18]
13726         ldrh    w1, [x0,2]
13727         ldrb    w2, [x0,6]
13728         ldrb    w0, [x0,8]
13729         strb    w0, [x19,12]
13730         adrp    x0, :got:g_gc_temp_superblock
13731         orr     w1, w2, w1, lsl 6
13732         strh    w1, [x19,20]
13733         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
13734         ldrh    w1, [x0]
13735         strh    w1, [x19,22]
13736         ldrh    w1, [x0,2]
13737         ldrb    w2, [x0,6]
13738         ldrb    w0, [x0,8]
13739         strb    w0, [x19,13]
13740         adrp    x0, :got:g_totle_mlc_erase_count
13741         orr     w1, w2, w1, lsl 6
13742         strh    w1, [x19,24]
13743         adrp    x2, :got:c_ftl_nand_byte_pre_page
13744         mov     w1, 255
13745         ldr     x0, [x0, #:got_lo12:g_totle_mlc_erase_count]
13746         ldr     w0, [x0]
13747         str     w0, [x19,32]
13748         ldr     x0, [x25, #:got_lo12:g_GlobalSysVersion]
13749         ldr     w0, [x0]
13750         str     w0, [x19,40]
13751         adrp    x0, :got:g_GlobalDataVersion
13752         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
13753         ldr     w0, [x0]
13754         str     w0, [x19,36]
13755         ldr     x0, [x26,8]
13756         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
13757         ldrh    w2, [x2]
13758         bl      ftl_memset
13759         ldr     x0, [x26,8]
13760         mov     x1, x19
13761         mov     w2, 48
13762         bl      ftl_memcpy
13763         adrp    x2, :got:c_ftl_nand_data_blks_per_plane
13764         adrp    x1, :got:p_valid_page_count_table
13765         ldr     x0, [x26,8]
13766         adrp    x26, :got:c_ftl_nand_page_pre_slc_blk
13767         ldr     x2, [x2, #:got_lo12:c_ftl_nand_data_blks_per_plane]
13768         add     x0, x0, 48
13769         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
13770         ldrh    w2, [x2]
13771         ldr     x1, [x1]
13772         lsl     w2, w2, 1
13773         bl      ftl_memcpy
13774         mov     w0, 0
13775         bl      FtlUpdateVaildLpn
13776 .L1825:
13777         ldr     x0, [x23, #:got_lo12:p_sys_data_buf]
13778         ldr     x27, [x21, #:got_lo12:req_sys]
13779         ldr     x0, [x0]
13780         str     x0, [x27,8]
13781         ldr     x0, [x24, #:got_lo12:p_sys_spare_buf]
13782         ldr     x0, [x0]
13783         str     x0, [x27,16]
13784         ldr     x19, [x22, #:got_lo12:gSysInfo]
13785         ldrh    w0, [x19]
13786         ldrh    w1, [x19,2]
13787         orr     w0, w1, w0, lsl 10
13788         mov     w1, 1
13789         str     w0, [x27,4]
13790         mov     w2, w1
13791         mov     w3, w1
13792         mov     x0, x27
13793         bl      FlashProgPages
13794         ldr     x0, [x26, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13795         ldrh    w1, [x19,2]
13796         ldrh    w0, [x0]
13797         sub     w0, w0, #1
13798         cmp     w1, w0
13799         blt     .L1826
13800         ldrh    w0, [x19]
13801         ldrh    w28, [x19,4]
13802         strh    wzr, [x19,2]
13803         strh    w0, [x19,4]
13804         bl      FtlFreeSysBlkQueueOut
13805         strh    w0, [x19]
13806         ldr     x2, [x25, #:got_lo12:g_GlobalSysVersion]
13807         ldr     w1, [x2]
13808         str     w1, [x19,8]
13809         add     w3, w1, 1
13810         str     w3, [x2]
13811         ubfiz   w2, w0, 10, 16
13812         str     w2, [x27,4]
13813         str     w1, [x20,4]
13814         mov     w1, 1
13815         strh    w0, [x20,2]
13816         mov     w2, w1
13817         mov     x0, x27
13818         mov     w3, w1
13819         bl      FlashProgPages
13820 .L1826:
13821         ldr     x0, [x22, #:got_lo12:gSysInfo]
13822         ldrh    w1, [x0,2]
13823         add     w1, w1, 1
13824         uxth    w1, w1
13825         strh    w1, [x0,2]
13826         ldr     x2, [x21, #:got_lo12:req_sys]
13827         ldr     w2, [x2]
13828         cmn     w2, #1
13829         bne     .L1827
13830         cmp     w1, 1
13831         bne     .L1825
13832         adrp    x1, :got:c_ftl_nand_page_pre_slc_blk
13833         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13834         ldrh    w1, [x1]
13835         sub     w1, w1, #1
13836         strh    w1, [x0,2]
13837         b       .L1825
13838 .L1827:
13839         cmp     w1, 1
13840         beq     .L1825
13841         mov     w0, 65535
13842         cmp     w28, w0
13843         beq     .L1829
13844         mov     w0, w28
13845         mov     w1, 1
13846         bl      FtlFreeSysBlkQueueIn
13847 .L1829:
13848         mov     w0, 0
13849         ldp     x19, x20, [sp,16]
13850         ldp     x21, x22, [sp,32]
13851         ldp     x23, x24, [sp,48]
13852         ldp     x25, x26, [sp,64]
13853         ldp     x27, x28, [sp,80]
13854         ldp     x29, x30, [sp], 96
13855         ret
13856         .size   FtlVpcTblFlush, .-FtlVpcTblFlush
13857         .align  2
13858         .global ftl_map_blk_gc
13859         .type   ftl_map_blk_gc, %function
13860 ftl_map_blk_gc:
13861         stp     x29, x30, [sp, -96]!
13862         add     x29, sp, 0
13863         stp     x19, x20, [sp,16]
13864         stp     x21, x22, [sp,32]
13865         stp     x23, x24, [sp,48]
13866         stp     x25, x26, [sp,64]
13867         stp     x27, x28, [sp,80]
13868         mov     x19, x0
13869         adrp    x22, :got:c_ftl_nand_page_pre_slc_blk
13870         ldr     x20, [x0,16]
13871         ldr     x24, [x0,40]
13872         bl      ftl_free_no_use_map_blk
13873         ldrh    w1, [x19,10]
13874         ldrh    w2, [x19,8]
13875         sub     w1, w1, #1
13876         cmp     w2, w1
13877         blt     .L1834
13878         ubfiz   x1, x0, 1, 16
13879         ldrh    w23, [x20,x1]
13880         cbz     w23, .L1834
13881         ldr     w0, [x19,52]
13882         cbnz    w0, .L1834
13883         mov     w2, 1
13884         str     w2, [x19,52]
13885         strh    w0, [x20,x1]
13886         ldrh    w0, [x19,8]
13887         ldrh    w1, [x19,2]
13888         sub     w0, w0, #1
13889         strh    w0, [x19,8]
13890         ldr     x0, [x22, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13891         ldrh    w0, [x0]
13892         cmp     w1, w0
13893         bcc     .L1835
13894         mov     x0, x19
13895         bl      ftl_map_blk_alloc_new_blk
13896 .L1835:
13897         mov     w20, 0
13898         adrp    x25, :got:req_sys
13899         adrp    x26, :got:p_sys_data_buf_1
13900         adrp    x27, :got:p_sys_spare_buf
13901 .L1836:
13902         ldrh    w0, [x19,6]
13903         cmp     w0, w20
13904         bls     .L1844
13905         ubfiz   x28, x20, 2, 16
13906         ldr     w0, [x24,x28]
13907         cmp     w23, w0, lsr 10
13908         bne     .L1837
13909         ldr     x0, [x26, #:got_lo12:p_sys_data_buf_1]
13910         mov     w1, 1
13911         ldr     x21, [x25, #:got_lo12:req_sys]
13912         mov     w2, w1
13913         ldr     x0, [x0]
13914         str     x0, [x21,8]
13915         ldr     x0, [x27, #:got_lo12:p_sys_spare_buf]
13916         ldr     x0, [x0]
13917         str     x0, [x21,16]
13918         ldr     w0, [x24,x28]
13919         str     w0, [x21,4]
13920         mov     x0, x21
13921         bl      FlashReadPages
13922         ldr     w0, [x21]
13923         cmn     w0, #1
13924         bne     .L1838
13925         str     wzr, [x24,x28]
13926         b       .L1837
13927 .L1838:
13928         ldr     x2, [x21,8]
13929         mov     x0, x19
13930         mov     w1, w20
13931         bl      FtlMapWritePage
13932 .L1837:
13933         add     w20, w20, 1
13934         uxth    w20, w20
13935         b       .L1836
13936 .L1844:
13937         mov     w0, w23
13938         mov     w1, 1
13939         bl      FtlFreeSysBlkQueueIn
13940         str     wzr, [x19,52]
13941 .L1834:
13942         ldr     x22, [x22, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
13943         ldrh    w1, [x19,2]
13944         ldrh    w0, [x22]
13945         cmp     w1, w0
13946         bcc     .L1840
13947         mov     x0, x19
13948         bl      ftl_map_blk_alloc_new_blk
13949 .L1840:
13950         mov     w0, 0
13951         ldp     x19, x20, [sp,16]
13952         ldp     x21, x22, [sp,32]
13953         ldp     x23, x24, [sp,48]
13954         ldp     x25, x26, [sp,64]
13955         ldp     x27, x28, [sp,80]
13956         ldp     x29, x30, [sp], 96
13957         ret
13958         .size   ftl_map_blk_gc, .-ftl_map_blk_gc
13959         .align  2
13960         .global Ftl_write_map_blk_to_last_page
13961         .type   Ftl_write_map_blk_to_last_page, %function
13962 Ftl_write_map_blk_to_last_page:
13963         stp     x29, x30, [sp, -64]!
13964         mov     w1, 65535
13965         add     x29, sp, 0
13966         stp     x19, x20, [sp,16]
13967         stp     x21, x22, [sp,32]
13968         str     x23, [sp,48]
13969         mov     x19, x0
13970         ldr     x20, [x0,16]
13971         ldr     x23, [x0,40]
13972         ldrh    w0, [x0]
13973         cmp     w0, w1
13974         bne     .L1846
13975         ldrh    w0, [x19,8]
13976         add     w0, w0, 1
13977         strh    w0, [x19,8]
13978         bl      FtlFreeSysBlkQueueOut
13979         strh    w0, [x20]
13980         strh    wzr, [x19,2]
13981         ldr     w0, [x19,48]
13982         strh    wzr, [x19]
13983         add     w0, w0, 1
13984         str     w0, [x19,48]
13985         b       .L1847
13986 .L1846:
13987         ubfiz   x0, x0, 1, 16
13988         ldrh    w1, [x19,2]
13989         adrp    x21, :got:p_sys_data_buf
13990         ldrh    w22, [x20,x0]
13991         adrp    x20, :got:req_sys
13992         ldr     x0, [x20, #:got_lo12:req_sys]
13993         orr     w1, w1, w22, lsl 10
13994         str     w1, [x0,4]
13995         ldr     x3, [x21, #:got_lo12:p_sys_data_buf]
13996         ldr     x1, [x3]
13997         str     x1, [x0,8]
13998         adrp    x1, :got:p_sys_spare_buf
13999         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
14000         ldr     x1, [x1]
14001         str     x1, [x0,16]
14002         ldr     w0, [x19,48]
14003         str     w0, [x1,4]
14004         mov     w0, -1291
14005         strh    w0, [x1,8]
14006         ldrh    w0, [x19,4]
14007         strh    w0, [x1]
14008         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
14009         strh    w22, [x1,2]
14010         mov     w1, 255
14011         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14012         ldrh    w2, [x0]
14013         ldr     x0, [x3]
14014         lsl     w2, w2, 3
14015         bl      ftl_memset
14016         mov     w2, 0
14017         mov     w1, w2
14018 .L1848:
14019         ldrh    w0, [x19,6]
14020         cmp     w0, w1
14021         bls     .L1851
14022         ubfiz   x4, x1, 2, 16
14023         ldr     w0, [x23,x4]
14024         cmp     w22, w0, lsr 10
14025         bne     .L1849
14026         ldr     x3, [x21, #:got_lo12:p_sys_data_buf]
14027         add     w2, w2, 1
14028         uxth    w2, w2
14029         ldr     x5, [x3]
14030         ubfiz   x0, x2, 3, 16
14031         str     w1, [x5,x0]
14032         ldr     x3, [x3]
14033         ldr     w4, [x23,x4]
14034         add     x0, x3, x0
14035         str     w4, [x0,4]
14036 .L1849:
14037         add     w1, w1, 1
14038         uxth    w1, w1
14039         b       .L1848
14040 .L1851:
14041         mov     w1, 1
14042         ldr     x0, [x20, #:got_lo12:req_sys]
14043         mov     w2, w1
14044         mov     w3, 0
14045         bl      FlashProgPages
14046         ldrh    w0, [x19,2]
14047         add     w0, w0, 1
14048         strh    w0, [x19,2]
14049         mov     x0, x19
14050         bl      ftl_map_blk_gc
14051 .L1847:
14052         mov     w0, 0
14053         ldr     x23, [sp,48]
14054         ldp     x19, x20, [sp,16]
14055         ldp     x21, x22, [sp,32]
14056         ldp     x29, x30, [sp], 64
14057         ret
14058         .size   Ftl_write_map_blk_to_last_page, .-Ftl_write_map_blk_to_last_page
14059         .align  2
14060         .global FtlMapWritePage
14061         .type   FtlMapWritePage, %function
14062 FtlMapWritePage:
14063         stp     x29, x30, [sp, -96]!
14064         add     x29, sp, 0
14065         stp     x21, x22, [sp,32]
14066         stp     x23, x24, [sp,48]
14067         stp     x25, x26, [sp,64]
14068         stp     x19, x20, [sp,16]
14069         stp     x27, x28, [sp,80]
14070         mov     x19, x0
14071         mov     w21, w1
14072         mov     x22, x2
14073         adrp    x23, :got:g_totle_l2p_write_count
14074         adrp    x24, :got:c_ftl_nand_page_pre_slc_blk
14075         mov     w25, 65535
14076         adrp    x26, :got:req_sys
14077         adrp    x27, :got:p_sys_spare_buf
14078 .L1858:
14079         ldr     x1, [x23, #:got_lo12:g_totle_l2p_write_count]
14080         ldr     w0, [x1]
14081         add     w0, w0, 1
14082         str     w0, [x1]
14083         ldr     x0, [x24, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14084         ldrh    w1, [x19,2]
14085         ldrh    w0, [x0]
14086         sub     w0, w0, #1
14087         cmp     w1, w0
14088         bge     .L1853
14089         ldrh    w0, [x19]
14090         cmp     w0, w25
14091         bne     .L1854
14092 .L1853:
14093         mov     x0, x19
14094         bl      Ftl_write_map_blk_to_last_page
14095 .L1854:
14096         ldrh    w1, [x19]
14097         mov     w2, 16
14098         ldr     x0, [x19,16]
14099         ldr     x20, [x26, #:got_lo12:req_sys]
14100         ldrh    w28, [x0,x1,lsl 1]
14101         mov     w1, 0
14102         ldrh    w0, [x19,2]
14103         str     x22, [x20,8]
14104         orr     w0, w0, w28, lsl 10
14105         str     w0, [x20,4]
14106         ldr     x0, [x27, #:got_lo12:p_sys_spare_buf]
14107         ldr     x0, [x0]
14108         str     x0, [x20,16]
14109         bl      ftl_memset
14110         ldr     x0, [x20,16]
14111         ldr     w1, [x19,48]
14112         str     w1, [x0,4]
14113         strh    w21, [x0,8]
14114         ldrh    w1, [x19,4]
14115         strh    w1, [x0]
14116         mov     w1, 1
14117         strh    w28, [x0,2]
14118         mov     w2, w1
14119         mov     x0, x20
14120         mov     w3, w1
14121         bl      FlashProgPages
14122         ldrh    w0, [x19,2]
14123         add     w0, w0, 1
14124         uxth    w0, w0
14125         strh    w0, [x19,2]
14126         cmp     w0, 1
14127         beq     .L1858
14128         ldr     w0, [x20]
14129         cmn     w0, #1
14130         beq     .L1858
14131         ldr     x0, [x19,40]
14132         ldr     w1, [x20,4]
14133         str     w1, [x0,w21,uxtw 2]
14134         mov     w0, 0
14135         ldp     x19, x20, [sp,16]
14136         ldp     x21, x22, [sp,32]
14137         ldp     x23, x24, [sp,48]
14138         ldp     x25, x26, [sp,64]
14139         ldp     x27, x28, [sp,80]
14140         ldp     x29, x30, [sp], 96
14141         ret
14142         .size   FtlMapWritePage, .-FtlMapWritePage
14143         .align  2
14144         .global flush_l2p_region
14145         .type   flush_l2p_region, %function
14146 flush_l2p_region:
14147         stp     x29, x30, [sp, -32]!
14148         add     x29, sp, 0
14149         stp     x19, x20, [sp,16]
14150         adrp    x20, :got:p_l2p_ram_map
14151         ubfiz   x19, x0, 4, 16
14152         adrp    x0, :got:gL2pMapInfo
14153         ldr     x20, [x20, #:got_lo12:p_l2p_ram_map]
14154         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
14155         ldr     x1, [x20]
14156         add     x2, x1, x19
14157         ldrh    w1, [x1,x19]
14158         ldr     x2, [x2,8]
14159         bl      FtlMapWritePage
14160         ldr     x0, [x20]
14161         add     x19, x0, x19
14162         ldr     w0, [x19,4]
14163         and     w0, w0, 2147483647
14164         str     w0, [x19,4]
14165         mov     w0, 0
14166         ldp     x19, x20, [sp,16]
14167         ldp     x29, x30, [sp], 32
14168         ret
14169         .size   flush_l2p_region, .-flush_l2p_region
14170         .align  2
14171         .global log2phys
14172         .type   log2phys, %function
14173 log2phys:
14174         stp     x29, x30, [sp, -80]!
14175         mov     x4, 1
14176         add     x29, sp, 0
14177         stp     x21, x22, [sp,32]
14178         mov     x21, x1
14179         adrp    x1, :got:c_ftl_nand_sec_pre_page_shift
14180         stp     x23, x24, [sp,48]
14181         stp     x19, x20, [sp,16]
14182         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
14183         adrp    x23, :got:p_l2p_ram_map
14184         mov     w22, w2
14185         ldrh    w3, [x1]
14186         ldr     x1, [x23, #:got_lo12:p_l2p_ram_map]
14187         add     w3, w3, 7
14188         lsr     w20, w0, w3
14189         lsl     x3, x4, x3
14190         sub     w3, w3, #1
14191         ldr     x1, [x1]
14192         and     w0, w3, w0
14193         uxth    w20, w20
14194         mov     x4, 0
14195         uxth    x24, w0
14196         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
14197         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
14198         ldrh    w0, [x0]
14199 .L1863:
14200         uxth    x19, w4
14201         cmp     w19, w0
14202         bcs     .L1875
14203         add     x4, x4, 1
14204         add     x2, x1, x4, lsl 4
14205         ldrh    w2, [x2,-16]
14206         cmp     w2, w20
14207         bne     .L1863
14208 .L1864:
14209         cbnz    w22, .L1865
14210         ldr     x0, [x23, #:got_lo12:p_l2p_ram_map]
14211         ldr     x1, [x0]
14212         add     x1, x1, x19, lsl 4
14213         ldr     x0, [x1,8]
14214         ldr     w0, [x0,x24,lsl 2]
14215         str     w0, [x21]
14216         b       .L1866
14217 .L1865:
14218         ldr     x2, [x23, #:got_lo12:p_l2p_ram_map]
14219         lsl     x0, x19, 4
14220         ldr     w3, [x21]
14221         ldr     x1, [x2]
14222         add     x1, x1, x0
14223         ldr     x1, [x1,8]
14224         str     w3, [x1,x24,lsl 2]
14225         ldr     x1, [x2]
14226         add     x0, x1, x0
14227         ldr     w1, [x0,4]
14228         orr     w1, w1, -2147483648
14229         str     w1, [x0,4]
14230         adrp    x0, :got:g_l2p_last_update_region_id
14231         ldr     x0, [x0, #:got_lo12:g_l2p_last_update_region_id]
14232         strh    w20, [x0]
14233 .L1866:
14234         ldr     x23, [x23, #:got_lo12:p_l2p_ram_map]
14235         ldr     x0, [x23]
14236         add     x19, x0, x19, lsl 4
14237         ldr     w0, [x19,4]
14238         cmn     w0, #1
14239         beq     .L1872
14240         add     w0, w0, 1
14241         str     w0, [x19,4]
14242         b       .L1872
14243 .L1875:
14244         bl      select_l2p_ram_region
14245         uxth    x19, w0
14246         ldr     x3, [x23, #:got_lo12:p_l2p_ram_map]
14247         ubfiz   x2, x19, 4, 16
14248         mov     w1, w0
14249         ldr     x3, [x3]
14250         add     x4, x3, x2
14251         ldrh    w3, [x3,x2]
14252         mov     w2, 65535
14253         cmp     w3, w2
14254         beq     .L1869
14255         ldr     w2, [x4,4]
14256         tbz     w2, #31, .L1869
14257         str     x1, [x29,72]
14258         bl      flush_l2p_region
14259         ldr     x1, [x29,72]
14260 .L1869:
14261         mov     w0, w20
14262         bl      load_l2p_region
14263         b       .L1864
14264 .L1872:
14265         mov     w0, 0
14266         ldp     x19, x20, [sp,16]
14267         ldp     x21, x22, [sp,32]
14268         ldp     x23, x24, [sp,48]
14269         ldp     x29, x30, [sp], 80
14270         ret
14271         .size   log2phys, .-log2phys
14272         .align  2
14273         .global FtlReUsePrevPpa
14274         .type   FtlReUsePrevPpa, %function
14275 FtlReUsePrevPpa:
14276         stp     x29, x30, [sp, -80]!
14277         add     x29, sp, 0
14278         stp     x19, x20, [sp,16]
14279         mov     w20, w0
14280         lsr     w0, w1, 10
14281         stp     x21, x22, [sp,32]
14282         str     x23, [sp,48]
14283         str     w1, [x29,76]
14284         bl      P2V_block_in_plane
14285         uxth    w4, w0
14286         adrp    x0, :got:p_valid_page_count_table
14287         ubfiz   x22, x4, 1, 16
14288         mov     x23, x0
14289         ldr     x1, [x0, #:got_lo12:p_valid_page_count_table]
14290         ldr     x2, [x1]
14291         ldrh    w1, [x2,x22]
14292         cbnz    w1, .L1877
14293         adrp    x0, :got:p_free_data_block_list_head
14294         ldr     x2, [x0, #:got_lo12:p_free_data_block_list_head]
14295         ldr     x19, [x2]
14296         cbz     x19, .L1878
14297         adrp    x2, :got:g_num_free_superblocks
14298         mov     x6, -6148914691236517206
14299         mov     x21, x2
14300         ldr     x3, [x2, #:got_lo12:g_num_free_superblocks]
14301         mov     w2, 6
14302         ldrh    w5, [x3]
14303         adrp    x3, :got:p_data_block_list_table
14304         ldr     x3, [x3, #:got_lo12:p_data_block_list_table]
14305         ldr     x3, [x3]
14306         sub     x19, x19, x3
14307         asr     x19, x19, 1
14308         madd    x19, x6, x19, x19
14309         mov     w6, 65535
14310         uxth    w19, w19
14311 .L1879:
14312         cmp     w1, w5
14313         beq     .L1878
14314         cmp     w19, w4
14315         bne     .L1880
14316         ldr     x0, [x0, #:got_lo12:p_free_data_block_list_head]
14317         mov     w1, w19
14318         bl      List_remove_node
14319         ldr     x0, [x21, #:got_lo12:g_num_free_superblocks]
14320         ldrh    w1, [x0]
14321         sub     w1, w1, #1
14322         strh    w1, [x0]
14323         mov     w0, w19
14324         bl      INSERT_DATA_LIST
14325         ldr     x0, [x23, #:got_lo12:p_valid_page_count_table]
14326         ldr     x1, [x0]
14327         ldrh    w0, [x1,x22]
14328         add     w0, w0, 1
14329         strh    w0, [x1,x22]
14330         b       .L1878
14331 .L1880:
14332         umull   x19, w19, w2
14333         ldrh    w19, [x3,x19]
14334         cmp     w19, w6
14335         beq     .L1878
14336         add     w1, w1, 1
14337         uxth    w1, w1
14338         b       .L1879
14339 .L1877:
14340         add     w1, w1, 1
14341         strh    w1, [x2,x22]
14342 .L1878:
14343         add     x1, x29, 76
14344         mov     w0, w20
14345         mov     w2, 1
14346         bl      log2phys
14347         ldr     x23, [sp,48]
14348         ldp     x19, x20, [sp,16]
14349         ldp     x21, x22, [sp,32]
14350         ldp     x29, x30, [sp], 80
14351         ret
14352         .size   FtlReUsePrevPpa, .-FtlReUsePrevPpa
14353         .align  2
14354         .global FtlMapTblRecovery
14355         .type   FtlMapTblRecovery, %function
14356 FtlMapTblRecovery:
14357         stp     x29, x30, [sp, -144]!
14358         mov     w1, 0
14359         add     x29, sp, 0
14360         stp     x25, x26, [sp,64]
14361         mov     x26, x0
14362         stp     x19, x20, [sp,16]
14363         stp     x21, x22, [sp,32]
14364         stp     x23, x24, [sp,48]
14365         stp     x27, x28, [sp,80]
14366         ldrh    w23, [x26,6]
14367         adrp    x20, :got:p_sys_data_buf
14368         ldr     x0, [x0,40]
14369         adrp    x19, :got:req_sys
14370         lsl     w2, w23, 2
14371         ldrh    w24, [x26,8]
14372         str     x0, [x29,136]
14373         mov     w27, 0
14374         ldr     x22, [x26,16]
14375         ldr     x25, [x26,24]
14376         bl      ftl_memset
14377         ldr     x0, [x20, #:got_lo12:p_sys_data_buf]
14378         ldr     x1, [x19, #:got_lo12:req_sys]
14379         ldr     x0, [x0]
14380         str     x0, [x1,8]
14381         adrp    x0, :got:p_sys_spare_buf
14382         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
14383         str     wzr, [x26,52]
14384         str     wzr, [x26,48]
14385         ldr     x21, [x0]
14386         mov     w0, -1
14387         str     x21, [x1,16]
14388         strh    w0, [x26]
14389         strh    w0, [x26,2]
14390         mov     w0, 1
14391         str     w0, [x26,56]
14392         sub     w0, w24, #1
14393         str     w0, [x29,132]
14394 .L1886:
14395         cmp     w27, w24
14396         bge     .L1903
14397         ldr     w0, [x29,132]
14398         sxtw    x28, w27
14399         cmp     w27, w0
14400         bne     .L1887
14401         lsl     x0, x28, 1
14402         mov     w1, 1
14403         add     x20, x22, x0
14404         ldrh    w0, [x22,x0]
14405         mov     w22, 0
14406         bl      FtlGetLastWrittenPage
14407         strh    w27, [x26]
14408         sxth    w1, w0
14409         add     w0, w0, 1
14410         strh    w0, [x26,2]
14411         ldr     w0, [x25,x28,lsl 2]
14412         add     w25, w1, 1
14413         str     w0, [x26,48]
14414         ldr     x0, [x19, #:got_lo12:req_sys]
14415         str     xzr, [x0,8]
14416 .L1888:
14417         cmp     w22, w25
14418         bge     .L1903
14419         ldrh    w0, [x20]
14420         mov     w1, 1
14421         ldr     x24, [x19, #:got_lo12:req_sys]
14422         mov     w2, w1
14423         orr     w0, w22, w0, lsl 10
14424         str     w0, [x24,4]
14425         mov     x0, x24
14426         bl      FlashReadPages
14427         ldr     w0, [x24]
14428         cmn     w0, #1
14429         beq     .L1889
14430         ldrh    w1, [x21,8]
14431         cmp     w1, w23
14432         bcs     .L1889
14433         ldrh    w2, [x21]
14434         ldrh    w0, [x26,4]
14435         cmp     w2, w0
14436         bne     .L1889
14437         ubfiz   x1, x1, 2, 16
14438         ldr     x2, [x29,136]
14439         ldr     w0, [x24,4]
14440         str     w0, [x2,x1]
14441 .L1889:
14442         add     w22, w22, 1
14443         sxth    w22, w22
14444         b       .L1888
14445 .L1903:
14446         mov     x0, x26
14447         bl      ftl_free_no_use_map_blk
14448         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
14449         ldrh    w1, [x26,2]
14450         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14451         ldrh    w0, [x0]
14452         cmp     w1, w0
14453         bne     .L1892
14454         mov     x0, x26
14455         bl      ftl_map_blk_alloc_new_blk
14456         b       .L1892
14457 .L1887:
14458         ldr     x0, [x20, #:got_lo12:p_sys_data_buf]
14459         lsl     x1, x28, 1
14460         ldr     x6, [x19, #:got_lo12:req_sys]
14461         add     x28, x22, x1
14462         str     x6, [x29,120]
14463         ldr     x0, [x0]
14464         str     x0, [x6,8]
14465         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
14466         ldrh    w1, [x22,x1]
14467         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14468         ldrh    w0, [x0]
14469         sub     w0, w0, #1
14470         orr     w0, w0, w1, lsl 10
14471         mov     w1, 1
14472         str     w0, [x6,4]
14473         mov     w2, w1
14474         mov     x0, x6
14475         bl      FlashReadPages
14476         ldr     x6, [x29,120]
14477         adrp    x8, :got:c_ftl_nand_page_pre_slc_blk
14478         ldr     w0, [x6]
14479         cmn     w0, #1
14480         beq     .L1893
14481         ldrh    w1, [x21]
14482         ldrh    w0, [x26,4]
14483         cmp     w1, w0
14484         bne     .L1893
14485         ldrh    w0, [x21,8]
14486         mov     w1, 64245
14487         cmp     w0, w1
14488         bne     .L1893
14489         mov     w0, 0
14490 .L1894:
14491         ldr     x1, [x8, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14492         ldrh    w1, [x1]
14493         sub     w1, w1, #1
14494         cmp     w0, w1
14495         bge     .L1897
14496         ldr     x1, [x20, #:got_lo12:p_sys_data_buf]
14497         sbfiz   x2, x0, 3, 32
14498         ldr     x6, [x1]
14499         ldrh    w1, [x6,x2]
14500         cmp     w1, w23
14501         bcs     .L1895
14502         add     x2, x6, x2
14503         ubfiz   x1, x1, 2, 16
14504         ldr     x3, [x29,136]
14505         ldr     w2, [x2,4]
14506         str     w2, [x3,x1]
14507 .L1895:
14508         add     w0, w0, 1
14509         sxth    w0, w0
14510         b       .L1894
14511 .L1893:
14512         ldr     x0, [x19, #:got_lo12:req_sys]
14513         mov     w6, 0
14514         str     xzr, [x0,8]
14515 .L1898:
14516         ldr     x0, [x8, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
14517         ldrh    w0, [x0]
14518         cmp     w6, w0
14519         bge     .L1897
14520         ldrh    w0, [x28]
14521         mov     w1, 1
14522         ldr     x7, [x19, #:got_lo12:req_sys]
14523         mov     w2, w1
14524         str     x8, [x29,104]
14525         orr     w0, w6, w0, lsl 10
14526         str     x6, [x29,112]
14527         str     w0, [x7,4]
14528         mov     x0, x7
14529         str     x7, [x29,120]
14530         bl      FlashReadPages
14531         ldr     x7, [x29,120]
14532         ldr     x6, [x29,112]
14533         ldr     x8, [x29,104]
14534         ldr     w0, [x7]
14535         cmn     w0, #1
14536         beq     .L1899
14537         ldrh    w1, [x21,8]
14538         cmp     w1, w23
14539         bcs     .L1899
14540         ldrh    w2, [x21]
14541         ldrh    w0, [x26,4]
14542         cmp     w2, w0
14543         bne     .L1899
14544         ubfiz   x1, x1, 2, 16
14545         ldr     x2, [x29,136]
14546         ldr     w0, [x7,4]
14547         str     w0, [x2,x1]
14548 .L1899:
14549         add     w6, w6, 1
14550         sxth    w6, w6
14551         b       .L1898
14552 .L1897:
14553         add     w4, w27, 1
14554         sxth    w27, w4
14555         b       .L1886
14556 .L1892:
14557         ldrh    w1, [x26,8]
14558         ldrh    w0, [x26,10]
14559         cmp     w1, w0
14560         bcc     .L1904
14561         mov     x0, x26
14562         bl      ftl_map_blk_gc
14563 .L1904:
14564         mov     w0, 0
14565         ldp     x19, x20, [sp,16]
14566         ldp     x21, x22, [sp,32]
14567         ldp     x23, x24, [sp,48]
14568         ldp     x25, x26, [sp,64]
14569         ldp     x27, x28, [sp,80]
14570         ldp     x29, x30, [sp], 144
14571         ret
14572         .size   FtlMapTblRecovery, .-FtlMapTblRecovery
14573         .align  2
14574         .global FtlLoadVonderInfo
14575         .type   FtlLoadVonderInfo, %function
14576 FtlLoadVonderInfo:
14577         adrp    x1, :got:c_ftl_nand_max_vendor_blks
14578         adrp    x0, :got:gVendorBlkInfo
14579         stp     x29, x30, [sp, -16]!
14580         add     x29, sp, 0
14581         ldr     x1, [x1, #:got_lo12:c_ftl_nand_max_vendor_blks]
14582         ldr     x0, [x0, #:got_lo12:gVendorBlkInfo]
14583         ldrh    w1, [x1]
14584         strh    w1, [x0,10]
14585         mov     w1, -3962
14586         strh    w1, [x0,4]
14587         adrp    x1, :got:g_totle_vendor_block
14588         ldr     x1, [x1, #:got_lo12:g_totle_vendor_block]
14589         ldrh    w1, [x1]
14590         strh    w1, [x0,8]
14591         adrp    x1, :got:c_ftl_nand_vendor_region_num
14592         ldr     x1, [x1, #:got_lo12:c_ftl_nand_vendor_region_num]
14593         ldrh    w1, [x1]
14594         strh    w1, [x0,6]
14595         adrp    x1, :got:p_vendor_block_table
14596         ldr     x1, [x1, #:got_lo12:p_vendor_block_table]
14597         ldr     x1, [x1]
14598         str     x1, [x0,16]
14599         adrp    x1, :got:p_vendor_block_ver_table
14600         ldr     x1, [x1, #:got_lo12:p_vendor_block_ver_table]
14601         ldr     x1, [x1]
14602         str     x1, [x0,24]
14603         adrp    x1, :got:p_vendor_block_valid_page_count
14604         ldr     x1, [x1, #:got_lo12:p_vendor_block_valid_page_count]
14605         ldr     x1, [x1]
14606         str     x1, [x0,32]
14607         adrp    x1, :got:p_vendor_region_ppn_table
14608         ldr     x1, [x1, #:got_lo12:p_vendor_region_ppn_table]
14609         ldr     x1, [x1]
14610         str     x1, [x0,40]
14611         bl      FtlMapTblRecovery
14612         mov     w0, 0
14613         ldp     x29, x30, [sp], 16
14614         ret
14615         .size   FtlLoadVonderInfo, .-FtlLoadVonderInfo
14616         .align  2
14617         .global FtlLoadMapInfo
14618         .type   FtlLoadMapInfo, %function
14619 FtlLoadMapInfo:
14620         stp     x29, x30, [sp, -16]!
14621         add     x29, sp, 0
14622         bl      FtlL2PDataInit
14623         adrp    x0, :got:gL2pMapInfo
14624         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
14625         bl      FtlMapTblRecovery
14626         mov     w0, 0
14627         ldp     x29, x30, [sp], 16
14628         ret
14629         .size   FtlLoadMapInfo, .-FtlLoadMapInfo
14630         .align  2
14631         .global FtlReadRefresh
14632         .type   FtlReadRefresh, %function
14633 FtlReadRefresh:
14634         stp     x29, x30, [sp, -128]!
14635         add     x29, sp, 0
14636         stp     x19, x20, [sp,16]
14637         adrp    x19, :got:g_sys_ext_data
14638         str     x23, [sp,48]
14639         stp     x21, x22, [sp,32]
14640         ldr     x1, [x19, #:got_lo12:g_sys_ext_data]
14641         ldr     w0, [x1,80]
14642         cbz     w0, .L1918
14643         adrp    x0, :got:g_MaxLpn
14644         ldr     w3, [x1,84]
14645         mov     x20, x0
14646         ldr     x2, [x0, #:got_lo12:g_MaxLpn]
14647         ldr     w2, [x2]
14648         cmp     w3, w2
14649         bcs     .L1919
14650         mov     w21, 2048
14651         add     x23, x29, 68
14652 .L1924:
14653         ldr     x22, [x19, #:got_lo12:g_sys_ext_data]
14654         ldr     x1, [x20, #:got_lo12:g_MaxLpn]
14655         ldr     w0, [x22,84]
14656         ldr     w1, [x1]
14657         cmp     w0, w1
14658         bcs     .L1921
14659         mov     w2, 0
14660         mov     x1, x23
14661         bl      log2phys
14662         ldr     w0, [x22,84]
14663         ldr     w2, [x29,68]
14664         add     w0, w0, 1
14665         str     w0, [x22,84]
14666         cmn     w2, #1
14667         beq     .L1922
14668         str     w2, [x29,76]
14669         mov     w1, 1
14670         str     w0, [x29,96]
14671         mov     w2, 0
14672         add     x0, x29, 72
14673         str     xzr, [x29,80]
14674         str     xzr, [x29,88]
14675         str     wzr, [x29,72]
14676         bl      FlashReadPages
14677         ldr     w0, [x29,72]
14678         cmp     w0, 256
14679         bne     .L1921
14680         ldr     w0, [x29,68]
14681         lsr     w0, w0, 10
14682         bl      P2V_block_in_plane
14683         bl      FtlGcRefreshBlock
14684         b       .L1921
14685 .L1922:
14686         subs    w21, w21, #1
14687         bne     .L1924
14688 .L1921:
14689         mov     w0, -1
14690         b       .L1926
14691 .L1919:
14692         adrp    x0, :got:g_totle_read_page_count
14693         str     wzr, [x1,80]
14694         str     wzr, [x1,84]
14695         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
14696         ldr     w0, [x0]
14697         str     w0, [x1,76]
14698         b       .L1930
14699 .L1918:
14700         adrp    x2, :got:g_max_erase_count
14701         ldr     w1, [x1,76]
14702         ldr     x2, [x2, #:got_lo12:g_max_erase_count]
14703         ldr     w3, [x2]
14704         adrp    x2, :got:g_inkDie_check_enable
14705         ldr     x2, [x2, #:got_lo12:g_inkDie_check_enable]
14706         ldr     w4, [x2]
14707         adrp    x2, :got:g_totle_read_page_count
14708         ldr     x2, [x2, #:got_lo12:g_totle_read_page_count]
14709         ldr     w2, [x2]
14710         add     w5, w2, 1048576
14711         cmp     w1, w5
14712         bhi     .L1927
14713         add     w3, w4, w3, lsr 10
14714         mov     w4, 33554432
14715         asr     w3, w4, w3
14716         add     w1, w3, w1
14717         cmp     w1, w2
14718         bcs     .L1926
14719 .L1927:
14720         ldr     x0, [x19, #:got_lo12:g_sys_ext_data]
14721         mov     w1, 1
14722         str     wzr, [x0,84]
14723         str     w1, [x0,80]
14724         str     w2, [x0,76]
14725 .L1930:
14726         mov     w0, 0
14727 .L1926:
14728         ldp     x19, x20, [sp,16]
14729         ldp     x21, x22, [sp,32]
14730         ldr     x23, [sp,48]
14731         ldp     x29, x30, [sp], 128
14732         ret
14733         .size   FtlReadRefresh, .-FtlReadRefresh
14734         .align  2
14735         .global FtlVendorPartWrite
14736         .type   FtlVendorPartWrite, %function
14737 FtlVendorPartWrite:
14738         stp     x29, x30, [sp, -176]!
14739         add     x29, sp, 0
14740         stp     x25, x26, [sp,64]
14741         mov     w26, w0
14742         adrp    x0, :got:c_ftl_nand_sec_pre_page_shift
14743         stp     x19, x20, [sp,16]
14744         stp     x23, x24, [sp,48]
14745         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page_shift]
14746         mov     w25, w1
14747         stp     x21, x22, [sp,32]
14748         stp     x27, x28, [sp,80]
14749         add     w1, w26, w1
14750         mov     x23, x2
14751         ldrh    w20, [x0]
14752         adrp    x0, :got:c_ftl_vendor_part_size
14753         mov     w19, -1
14754         ldr     x0, [x0, #:got_lo12:c_ftl_vendor_part_size]
14755         ldrh    w0, [x0]
14756         cmp     w1, w0
14757         bhi     .L1932
14758         lsr     w20, w26, w20
14759         mov     w19, 0
14760         adrp    x24, :got:p_vendor_data_buf
14761         add     x22, x29, 120
14762         adrp    x28, :got:gVendorBlkInfo
14763 .L1933:
14764         cbz     w25, .L1932
14765         adrp    x0, :got:p_vendor_region_ppn_table
14766         ldr     x0, [x0, #:got_lo12:p_vendor_region_ppn_table]
14767         ldr     x0, [x0]
14768         ldr     w2, [x0,w20,uxtw 2]
14769         adrp    x0, :got:c_ftl_nand_sec_pre_page
14770         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
14771         ldrh    w1, [x0]
14772         uxth    w0, w25
14773         udiv    w21, w26, w1
14774         msub    w21, w21, w1, w26
14775         sub     w3, w1, w21
14776         uxth    w27, w3
14777         cmp     w27, w25
14778         csel    w27, w0, w27, hi
14779         cmp     w27, w1
14780         beq     .L1935
14781         cbz     w2, .L1935
14782         ldr     x0, [x24, #:got_lo12:p_vendor_data_buf]
14783         mov     w1, 1
14784         str     w2, [x22,4]
14785         mov     w2, w1
14786         str     xzr, [x22,16]
14787         ldr     x0, [x0]
14788         str     x0, [x22,8]
14789         mov     x0, x22
14790         bl      FlashReadPages
14791         b       .L1936
14792 .L1935:
14793         adrp    x1, :got:c_ftl_nand_byte_pre_page
14794         ldr     x0, [x24, #:got_lo12:p_vendor_data_buf]
14795         ldr     x2, [x1, #:got_lo12:c_ftl_nand_byte_pre_page]
14796         mov     w1, 0
14797         ldr     x0, [x0]
14798         ldrh    w2, [x2]
14799         bl      ftl_memset
14800 .L1936:
14801         ldr     x7, [x24, #:got_lo12:p_vendor_data_buf]
14802         lsl     w6, w27, 9
14803         ubfiz   x21, x21, 9, 16
14804         mov     w2, w6
14805         mov     x1, x23
14806         str     x6, [x29,104]
14807         ldr     x0, [x7]
14808         sub     w25, w25, w27
14809         str     x7, [x29,96]
14810         add     w26, w26, w27
14811         add     x0, x0, x21
14812         bl      ftl_memcpy
14813         ldr     x7, [x29,96]
14814         mov     w1, w20
14815         ldr     x0, [x28, #:got_lo12:gVendorBlkInfo]
14816         add     w20, w20, 1
14817         ldr     x2, [x7]
14818         bl      FtlMapWritePage
14819         cmn     w0, #1
14820         ldr     x6, [x29,104]
14821         csinv   w19, w19, wzr, ne
14822         add     x23, x23, x6, sxtw
14823         b       .L1933
14824 .L1932:
14825         mov     w0, w19
14826         ldp     x19, x20, [sp,16]
14827         ldp     x21, x22, [sp,32]
14828         ldp     x23, x24, [sp,48]
14829         ldp     x25, x26, [sp,64]
14830         ldp     x27, x28, [sp,80]
14831         ldp     x29, x30, [sp], 176
14832         ret
14833         .size   FtlVendorPartWrite, .-FtlVendorPartWrite
14834         .align  2
14835         .global Ftl_save_ext_data
14836         .type   Ftl_save_ext_data, %function
14837 Ftl_save_ext_data:
14838         adrp    x2, :got:g_sys_ext_data
14839         mov     w0, 19539
14840         stp     x29, x30, [sp, -16]!
14841         movk    w0, 0x4654, lsl 16
14842         add     x29, sp, 0
14843         ldr     x2, [x2, #:got_lo12:g_sys_ext_data]
14844         ldr     w1, [x2]
14845         cmp     w1, w0
14846         bne     .L1946
14847         mov     w0, 39
14848         mov     w1, 1
14849         movk    w0, 0x5000, lsl 16
14850         str     w0, [x2,4]
14851         adrp    x0, :got:g_totle_write_sector
14852         ldr     x0, [x0, #:got_lo12:g_totle_write_sector]
14853         ldr     w0, [x0]
14854         str     w0, [x2,88]
14855         adrp    x0, :got:g_totle_read_sector
14856         ldr     x0, [x0, #:got_lo12:g_totle_read_sector]
14857         ldr     w0, [x0]
14858         str     w0, [x2,92]
14859         adrp    x0, :got:g_totle_gc_page_count
14860         ldr     x0, [x0, #:got_lo12:g_totle_gc_page_count]
14861         ldr     w0, [x0]
14862         str     w0, [x2,8]
14863         adrp    x0, :got:g_totle_write_page_count
14864         ldr     x0, [x0, #:got_lo12:g_totle_write_page_count]
14865         ldr     w0, [x0]
14866         str     w0, [x2,12]
14867         adrp    x0, :got:g_totle_read_page_count
14868         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
14869         ldr     w0, [x0]
14870         str     w0, [x2,16]
14871         adrp    x0, :got:g_totle_l2p_write_count
14872         ldr     x0, [x0, #:got_lo12:g_totle_l2p_write_count]
14873         ldr     w0, [x0]
14874         str     w0, [x2,20]
14875         adrp    x0, :got:g_totle_slc_erase_count
14876         ldr     x0, [x0, #:got_lo12:g_totle_slc_erase_count]
14877         ldr     w0, [x0]
14878         str     w0, [x2,28]
14879         adrp    x0, :got:g_totle_sys_slc_erase_count
14880         ldr     x0, [x0, #:got_lo12:g_totle_sys_slc_erase_count]
14881         ldr     w0, [x0]
14882         str     w0, [x2,32]
14883         adrp    x0, :got:g_totle_discard_page_count
14884         ldr     x0, [x0, #:got_lo12:g_totle_discard_page_count]
14885         ldr     w0, [x0]
14886         str     w0, [x2,36]
14887         adrp    x0, :got:g_totle_cache_write_count
14888         ldr     x0, [x0, #:got_lo12:g_totle_cache_write_count]
14889         ldr     w0, [x0]
14890         str     w0, [x2,40]
14891         adrp    x0, :got:g_max_erase_count
14892         ldr     x0, [x0, #:got_lo12:g_max_erase_count]
14893         ldr     w0, [x0]
14894         str     w0, [x2,44]
14895         adrp    x0, :got:g_min_erase_count
14896         ldr     x0, [x0, #:got_lo12:g_min_erase_count]
14897         ldr     w0, [x0]
14898         str     w0, [x2,48]
14899         adrp    x0, :got:g_all_blk_used_slc_mode
14900         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
14901         ldr     w0, [x0]
14902         str     w0, [x2,60]
14903         adrp    x0, :got:g_SlcPartLbaEndSector
14904         ldr     x0, [x0, #:got_lo12:g_SlcPartLbaEndSector]
14905         ldr     w0, [x0]
14906         str     w0, [x2,64]
14907         mov     w0, 0
14908         bl      FtlVendorPartWrite
14909 .L1946:
14910         ldp     x29, x30, [sp], 16
14911         ret
14912         .size   Ftl_save_ext_data, .-Ftl_save_ext_data
14913         .align  2
14914         .global FtlEctTblFlush
14915         .type   FtlEctTblFlush, %function
14916 FtlEctTblFlush:
14917         adrp    x1, :got:g_inkDie_check_enable
14918         stp     x29, x30, [sp, -16]!
14919         add     x29, sp, 0
14920         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
14921         ldr     w2, [x1]
14922         mov     w1, 32
14923         cbz     w2, .L1949
14924         adrp    x2, :got:g_min_erase_count
14925         ldr     x2, [x2, #:got_lo12:g_min_erase_count]
14926         ldr     w2, [x2]
14927         cmp     w2, 29
14928         mov     w2, 4
14929         csel    w1, w1, w2, hi
14930 .L1949:
14931         adrp    x2, :got:g_ect_tbl_power_up_flush
14932         ldr     x2, [x2, #:got_lo12:g_ect_tbl_power_up_flush]
14933         ldrh    w3, [x2]
14934         cmp     w3, 31
14935         bhi     .L1950
14936         add     w3, w3, 1
14937         mov     w1, 1
14938         strh    w3, [x2]
14939 .L1950:
14940         adrp    x2, :got:gp_ect_tbl_info
14941         cbnz    w0, .L1951
14942         ldr     x0, [x2, #:got_lo12:gp_ect_tbl_info]
14943         ldr     x3, [x0]
14944         ldr     w0, [x3,20]
14945         add     w1, w1, w0
14946         ldr     w0, [x3,16]
14947         cmp     w0, w1
14948         bcc     .L1952
14949 .L1951:
14950         ldr     x2, [x2, #:got_lo12:gp_ect_tbl_info]
14951         ldr     x0, [x2]
14952         ldr     w1, [x0,16]
14953         str     w1, [x0,20]
14954         mov     w1, 17221
14955         movk    w1, 0x4254, lsl 16
14956         str     w1, [x0]
14957         adrp    x1, :got:g_ect_tbl_info_size
14958         ldr     x0, [x2]
14959         ldr     x1, [x1, #:got_lo12:g_ect_tbl_info_size]
14960         str     wzr, [x0,4]
14961         ldrh    w1, [x1]
14962         ldr     x2, [x2]
14963         lsl     w3, w1, 9
14964         str     w3, [x0,12]
14965         ldr     w3, [x0,8]
14966         add     w3, w3, 1
14967         str     w3, [x0,8]
14968         mov     w0, 64
14969         bl      FtlVendorPartWrite
14970         bl      Ftl_save_ext_data
14971 .L1952:
14972         mov     w0, 0
14973         ldp     x29, x30, [sp], 16
14974         ret
14975         .size   FtlEctTblFlush, .-FtlEctTblFlush
14976         .align  2
14977         .global FtlMapBlkWriteDumpData
14978         .type   FtlMapBlkWriteDumpData, %function
14979 FtlMapBlkWriteDumpData:
14980         stp     x29, x30, [sp, -48]!
14981         add     x29, sp, 0
14982         stp     x19, x20, [sp,16]
14983         str     x21, [sp,32]
14984         ldr     w1, [x0,56]
14985         ldrh    w20, [x0,6]
14986         ldr     x4, [x0,40]
14987         cbz     w1, .L1956
14988         str     wzr, [x0,56]
14989         mov     x21, x0
14990         adrp    x0, :got:p_sys_data_buf_1
14991         adrp    x2, :got:req_sys
14992         adrp    x3, :got:p_sys_spare_buf
14993         sub     w20, w20, #1
14994         mov     x19, x2
14995         ldr     x0, [x0, #:got_lo12:p_sys_data_buf_1]
14996         uxth    w20, w20
14997         ldr     x1, [x2, #:got_lo12:req_sys]
14998         ldr     x0, [x0]
14999         str     x0, [x1,8]
15000         ldr     x3, [x3, #:got_lo12:p_sys_spare_buf]
15001         ldr     x3, [x3]
15002         str     x3, [x1,16]
15003         ubfiz   x3, x20, 2, 16
15004         ldr     w3, [x4,x3]
15005         str     w3, [x1,4]
15006         cbz     w3, .L1958
15007         mov     x0, x1
15008         mov     w1, 1
15009         mov     w2, w1
15010         bl      FlashReadPages
15011         b       .L1959
15012 .L1958:
15013         adrp    x2, :got:c_ftl_nand_byte_pre_page
15014         mov     w1, 255
15015         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
15016         ldrh    w2, [x2]
15017         bl      ftl_memset
15018 .L1959:
15019         ldr     x2, [x19, #:got_lo12:req_sys]
15020         mov     x0, x21
15021         mov     w1, w20
15022         ldr     x2, [x2,8]
15023         bl      FtlMapWritePage
15024 .L1956:
15025         ldp     x19, x20, [sp,16]
15026         ldr     x21, [sp,32]
15027         ldp     x29, x30, [sp], 48
15028         ret
15029         .size   FtlMapBlkWriteDumpData, .-FtlMapBlkWriteDumpData
15030         .align  2
15031         .global FtlRecoverySuperblock
15032         .type   FtlRecoverySuperblock, %function
15033 FtlRecoverySuperblock:
15034         stp     x29, x30, [sp, -240]!
15035         add     x29, sp, 0
15036         stp     x19, x20, [sp,16]
15037         stp     x21, x22, [sp,32]
15038         stp     x23, x24, [sp,48]
15039         stp     x25, x26, [sp,64]
15040         stp     x27, x28, [sp,80]
15041         mov     x19, x0
15042         ldrh    w25, [x0,2]
15043         ldrb    w22, [x0,6]
15044         adrp    x0, :got:c_ftl_nand_page_pre_blk
15045         str     x0, [x29,160]
15046         ldr     x1, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
15047         ldrh    w1, [x1]
15048         cmp     w1, w25
15049         bne     .L1964
15050         strh    wzr, [x19,4]
15051         b       .L2107
15052 .L1964:
15053         ldrh    w0, [x19,16]
15054         mov     w1, 0
15055         mov     w2, 65535
15056 .L1966:
15057         cmp     w0, w2
15058         bne     .L2110
15059         add     w1, w1, 1
15060         uxth    w1, w1
15061         add     x0, x19, x1, sxtw 1
15062         ldrh    w0, [x0,16]
15063         b       .L1966
15064 .L2110:
15065         ldrb    w1, [x19,8]
15066         cmp     w1, 1
15067         bne     .L1968
15068         bl      FtlGetLastWrittenPage
15069         cmn     w0, #1
15070         mov     w20, w0
15071         beq     .L1969
15072         adrp    x0, :got:slcPageToMlcPageTbl
15073         ldr     x0, [x0, #:got_lo12:slcPageToMlcPageTbl]
15074         ldrh    w23, [x0,w20,sxtw 1]
15075         b       .L1970
15076 .L1968:
15077         mov     w1, 0
15078         bl      FtlGetLastWrittenPage
15079         cmn     w0, #1
15080         mov     w20, w0
15081         beq     .L1969
15082         mov     w23, w0
15083 .L1970:
15084         adrp    x1, :got:c_ftl_nand_planes_num
15085         adrp    x0, :got:c_ftl_nand_byte_pre_oob
15086         mov     w26, 0
15087         str     x1, [x29,192]
15088         mov     w7, 65535
15089         mov     w8, 56
15090         ldr     x2, [x1, #:got_lo12:c_ftl_nand_planes_num]
15091         adrp    x9, :got:req_read
15092         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
15093         mov     w10, 4
15094         adrp    x11, :got:p_gc_spare_buf
15095         ldrh    w3, [x2]
15096         mov     x2, x19
15097         ldrh    w6, [x0]
15098         add     x3, x19, x3, lsl 1
15099         b       .L1971
15100 .L1969:
15101         strh    wzr, [x19,2]
15102 .L2107:
15103         strb    wzr, [x19,6]
15104         b       .L1965
15105 .L1973:
15106         ldrh    w1, [x2,16]
15107         cmp     w1, w7
15108         beq     .L1972
15109         ldr     x5, [x9, #:got_lo12:req_read]
15110         orr     w1, w23, w1, lsl 10
15111         umull   x0, w26, w8
15112         ldr     x4, [x5]
15113         add     x4, x4, x0
15114         str     w1, [x4,4]
15115         ldr     x1, [x5]
15116         add     x0, x1, x0
15117         mul     w1, w26, w6
15118         add     w26, w26, 1
15119         str     xzr, [x0,8]
15120         sdiv    w1, w1, w10
15121         uxth    w26, w26
15122         ldr     x4, [x11, #:got_lo12:p_gc_spare_buf]
15123         ldr     x4, [x4]
15124         add     x1, x4, x1, sxtw 2
15125         str     x1, [x0,16]
15126 .L1972:
15127         add     x2, x2, 2
15128 .L1971:
15129         cmp     x2, x3
15130         bne     .L1973
15131         adrp    x21, :got:req_read
15132         mov     w1, w26
15133         mov     w2, 0
15134         mov     w24, 65535
15135         ldr     x0, [x21, #:got_lo12:req_read]
15136         ldr     x0, [x0]
15137         bl      FlashReadPages
15138         adrp    x0, :got:g_GlobalDataVersion
15139         mov     x3, 0
15140         str     x0, [x29,152]
15141         mov     x6, 56
15142         uxth    w7, w23
15143         ldr     x1, [x0, #:got_lo12:g_GlobalDataVersion]
15144         ldr     w27, [x1]
15145 .L1974:
15146         uxth    w28, w3
15147         cmp     w28, w26
15148         bcs     .L1983
15149         ldr     x0, [x21, #:got_lo12:req_read]
15150         mul     x2, x3, x6
15151         ldr     x0, [x0]
15152         add     x1, x0, x2
15153         ldr     w0, [x0,x2]
15154         cbnz    w0, .L1975
15155         ldr     x5, [x1,16]
15156         str     x5, [x29,168]
15157         ldr     w0, [x5,4]
15158         cmn     w0, #1
15159         beq     .L1977
15160         ldr     x1, [x29,152]
15161         str     x7, [x29,176]
15162         str     x6, [x29,184]
15163         ldr     x4, [x1, #:got_lo12:g_GlobalDataVersion]
15164         str     x2, [x29,200]
15165         str     x3, [x29,208]
15166         ldr     w1, [x4]
15167         str     x4, [x29,216]
15168         bl      ftl_cmp_data_ver
15169         ldr     x4, [x29,216]
15170         ldr     x3, [x29,208]
15171         ldr     x2, [x29,200]
15172         ldr     x6, [x29,184]
15173         ldr     x7, [x29,176]
15174         ldr     x5, [x29,168]
15175         cbz     w0, .L1977
15176         ldr     w0, [x5,4]
15177         add     w0, w0, 1
15178         str     w0, [x4]
15179 .L1977:
15180         ldr     x0, [x21, #:got_lo12:req_read]
15181         ldr     x0, [x0]
15182         add     x2, x0, x2
15183         ldr     x0, [x2,16]
15184         ldr     w0, [x0]
15185         cmn     w0, #1
15186         bne     .L1979
15187 .L1983:
15188         cmp     w28, w26
15189         bne     .L2102
15190         ldr     x0, [x21, #:got_lo12:req_read]
15191         add     w20, w20, 1
15192         uxth    w20, w20
15193         ldr     x0, [x0]
15194         ldr     w0, [x0,4]
15195         b       .L2103
15196 .L1975:
15197         mov     w24, w7
15198 .L1979:
15199         add     x3, x3, 1
15200         b       .L1974
15201 .L2102:
15202         mov     w0, 56
15203         uxth    w20, w20
15204         umull   x28, w28, w0
15205         ldr     x0, [x21, #:got_lo12:req_read]
15206         ldr     x0, [x0]
15207         add     x28, x0, x28
15208         ldr     w0, [x28,4]
15209 .L2103:
15210         lsr     w0, w0, 10
15211         bl      P2V_plane
15212         uxth    w26, w0
15213         ldrb    w1, [x19,8]
15214         cmp     w1, 1
15215         bne     .L1985
15216         adrp    x0, :got:slcPageToMlcPageTbl
15217         ldr     x0, [x0, #:got_lo12:slcPageToMlcPageTbl]
15218         ldrh    w20, [x0,w20,sxtw 1]
15219 .L1985:
15220         ldr     x0, [x29,160]
15221         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
15222         ldrh    w0, [x0]
15223         cmp     w0, w20
15224         bne     .L1986
15225         strh    w20, [x19,2]
15226         strb    wzr, [x19,6]
15227         strh    wzr, [x19,4]
15228 .L1986:
15229         uxth    w0, w22
15230         cmp     w20, w25
15231         str     w0, [x29,184]
15232         bne     .L1987
15233         cmp     w26, w0
15234         beq     .L2108
15235 .L1987:
15236         mov     w0, 65535
15237         sub     w22, w27, #1
15238         cmp     w24, w0
15239         bne     .L1988
15240         cbnz    w1, .L1989
15241 .L1988:
15242         adrp    x24, :got:g_recovery_page_min_ver
15243         uxth    w5, w23
15244         ldr     x0, [x24, #:got_lo12:g_recovery_page_min_ver]
15245         ldr     w1, [x0]
15246         cmn     w1, #1
15247         bne     .L1990
15248         str     w22, [x0]
15249 .L1990:
15250         ldr     x0, [x24, #:got_lo12:g_recovery_page_min_ver]
15251         mov     w27, w25
15252         ldr     w6, [x0]
15253         add     w0, w25, 7
15254         cmp     w0, w23, uxth
15255         bge     .L1991
15256         sub     w27, w5, #7
15257         uxth    w27, w27
15258 .L1991:
15259         mov     w3, -1
15260         mov     w4, 65535
15261         mov     w28, w3
15262         mov     w7, 56
15263         adrp    x8, :got:mlcPageToSlcPageTbl
15264 .L1992:
15265         cmp     w27, w5
15266         bhi     .L2005
15267         ldr     x0, [x29,192]
15268         mov     w23, 0
15269         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
15270         ldrh    w2, [x0]
15271         mov     x0, x19
15272         add     x2, x19, x2, lsl 1
15273 .L2006:
15274         cmp     x0, x2
15275         beq     .L2111
15276         ldrh    w1, [x0,16]
15277         cmp     w1, w4
15278         beq     .L1993
15279         ldr     x10, [x21, #:got_lo12:req_read]
15280         orr     w1, w27, w1, lsl 10
15281         umull   x9, w23, w7
15282         add     w23, w23, 1
15283         ldr     x10, [x10]
15284         uxth    w23, w23
15285         add     x9, x10, x9
15286         str     w1, [x9,4]
15287 .L1993:
15288         add     x0, x0, 2
15289         b       .L2006
15290 .L2111:
15291         ldr     x9, [x21, #:got_lo12:req_read]
15292         mov     w1, w23
15293         mov     w2, 0
15294         str     x8, [x29,136]
15295         str     x7, [x29,144]
15296         ldr     x0, [x9]
15297         str     x4, [x29,168]
15298         str     x6, [x29,176]
15299         str     x5, [x29,200]
15300         str     x3, [x29,208]
15301         str     x9, [x29,216]
15302         bl      FlashReadPages
15303         ldr     x9, [x29,216]
15304         mov     w1, 0
15305         ldr     x3, [x29,208]
15306         sxtw    x10, w27
15307         ldr     x5, [x29,200]
15308         ldr     x0, [x9]
15309         ldr     x6, [x29,176]
15310         ldr     x4, [x29,168]
15311         add     x0, x0, 16
15312         ldr     x7, [x29,144]
15313         ldr     x8, [x29,136]
15314 .L1995:
15315         cmp     w1, w23
15316         beq     .L2112
15317         ldr     w2, [x0,-16]
15318         cbnz    w2, .L1996
15319         ldr     x2, [x0]
15320         ldrh    w9, [x2]
15321         cmp     w9, w4
15322         beq     .L1997
15323         ldr     w9, [x2,4]
15324         cmn     w9, #1
15325         beq     .L1997
15326         ldr     x2, [x24, #:got_lo12:g_recovery_page_min_ver]
15327         cmn     w3, #1
15328         ldr     w28, [x2]
15329         str     w9, [x2]
15330         bne     .L1997
15331         ldr     x2, [x8, #:got_lo12:mlcPageToSlcPageTbl]
15332         ldrh    w2, [x2,x10,lsl 1]
15333         cmp     w2, w4
15334         beq     .L1997
15335         cmp     w28, w22
15336         csinv   w3, w28, wzr, ne
15337         b       .L1997
15338 .L1996:
15339         ldrb    w0, [x19,8]
15340         cbnz    w0, .L1989
15341         adrp    x0, :got:mlcPageToSlcPageTbl
15342         ldr     x0, [x0, #:got_lo12:mlcPageToSlcPageTbl]
15343         ldrh    w1, [x0,w27,sxtw 1]
15344         mov     w0, 65535
15345         cmp     w1, w0
15346         bne     .L2000
15347         cmn     w3, #1
15348         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15349         beq     .L2001
15350         str     w3, [x24]
15351         b       .L1989
15352 .L2001:
15353         cmp     w6, w22
15354         beq     .L2002
15355         str     w6, [x24]
15356         b       .L1989
15357 .L2002:
15358         ldr     w0, [x24]
15359         b       .L2109
15360 .L2000:
15361         cmp     w28, w22
15362         beq     .L2003
15363         cmn     w28, #1
15364         beq     .L1989
15365         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15366         str     w28, [x24]
15367         b       .L1989
15368 .L2003:
15369         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15370         ldr     w0, [x24]
15371         cmp     w0, w22
15372         beq     .L1989
15373 .L2109:
15374         sub     w0, w0, #1
15375         b       .L2104
15376 .L1997:
15377         add     w1, w1, 1
15378         add     x0, x0, 56
15379         uxth    w1, w1
15380         b       .L1995
15381 .L2112:
15382         add     w27, w27, 1
15383         uxth    w27, w27
15384         b       .L1992
15385 .L2005:
15386         ldr     x24, [x24, #:got_lo12:g_recovery_page_min_ver]
15387         mov     w0, -1
15388 .L2104:
15389         str     w0, [x24]
15390 .L1989:
15391         adrp    x0, :got:g_power_lost_recovery_flag
15392         mov     w1, 1
15393         mov     w23, w25
15394         ldr     x0, [x0, #:got_lo12:g_power_lost_recovery_flag]
15395         strh    w1, [x0]
15396         adrp    x0, :got:gL2pMapInfo
15397         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
15398         bl      FtlMapBlkWriteDumpData
15399         add     x0, x29, 232
15400         str     x0, [x29,144]
15401         adrp    x0, .LC110
15402         add     x0, x0, :lo12:.LC110
15403         str     x0, [x29,128]
15404         add     x0, x29, 236
15405         str     x0, [x29,120]
15406         add     x0, x29, 228
15407         str     x0, [x29,112]
15408 .L2007:
15409         ldr     x0, [x29,192]
15410         mov     w4, 65535
15411         str     wzr, [x29,216]
15412         mov     w5, 56
15413         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
15414         ldrh    w2, [x0]
15415         mov     x0, x19
15416         add     x2, x19, x2, lsl 1
15417 .L2008:
15418         cmp     x0, x2
15419         beq     .L2113
15420         ldrh    w1, [x0,16]
15421         cmp     w1, w4
15422         beq     .L2009
15423         ldr     w3, [x29,216]
15424         orr     w1, w23, w1, lsl 10
15425         ldr     x6, [x21, #:got_lo12:req_read]
15426         umull   x3, w3, w5
15427         ldr     x6, [x6]
15428         add     x3, x6, x3
15429         str     w1, [x3,4]
15430         ldr     w1, [x29,216]
15431         add     w1, w1, 1
15432         uxth    w1, w1
15433         str     w1, [x29,216]
15434 .L2009:
15435         add     x0, x0, 2
15436         b       .L2008
15437 .L2113:
15438         ldr     x0, [x21, #:got_lo12:req_read]
15439         mov     w2, 0
15440         ldr     w1, [x29,216]
15441         ldr     x0, [x0]
15442         bl      FlashReadPages
15443         str     xzr, [x29,200]
15444 .L2011:
15445         ldrh    w0, [x29,200]
15446         ldr     w1, [x29,216]
15447         cmp     w1, w0, uxth
15448         bls     .L2114
15449         ldr     x0, [x29,200]
15450         mov     x1, 56
15451         mul     x24, x0, x1
15452         ldr     x0, [x21, #:got_lo12:req_read]
15453         ldr     x0, [x0]
15454         add     x0, x0, x24
15455         ldr     w0, [x0,4]
15456         str     w0, [x29,236]
15457         lsr     w0, w0, 10
15458         bl      P2V_plane
15459         uxth    w0, w0
15460         cmp     w23, w25
15461         bcc     .L2012
15462         ldr     w1, [x29,184]
15463         cmp     w0, w1
15464         bcs     .L2044
15465         cmp     w23, w25
15466         beq     .L2012
15467 .L2044:
15468         cmp     w0, w26
15469         bne     .L2045
15470         cmp     w23, w20
15471         beq     .L2014
15472 .L2045:
15473         ldr     x0, [x21, #:got_lo12:req_read]
15474         ldr     x0, [x0]
15475         add     x1, x0, x24
15476         ldr     w0, [x0,x24]
15477         cmn     w0, #1
15478         beq     .L2016
15479         ldr     x28, [x1,16]
15480         mov     w0, 61589
15481         ldrh    w1, [x28]
15482         cmp     w1, w0
15483         bne     .L2025
15484         ldr     w22, [x28,4]
15485         cmn     w22, #1
15486         beq     .L2019
15487         ldr     x0, [x29,152]
15488         ldr     x27, [x0, #:got_lo12:g_GlobalDataVersion]
15489         mov     w0, w22
15490         ldr     w1, [x27]
15491         bl      ftl_cmp_data_ver
15492         cbz     w0, .L2019
15493         ldr     w0, [x28,4]
15494         add     w0, w0, 1
15495         str     w0, [x27]
15496 .L2019:
15497         ldr     w27, [x28,8]
15498         mov     w2, 0
15499         ldr     w0, [x28,12]
15500         ldr     x1, [x29,144]
15501         str     w0, [x29,228]
15502         mov     w0, w27
15503         bl      log2phys
15504         adrp    x0, :got:g_recovery_page_min_ver
15505         str     x0, [x29,136]
15506         ldr     x1, [x0, #:got_lo12:g_recovery_page_min_ver]
15507         str     x1, [x29,168]
15508         ldr     w1, [x1]
15509         cmn     w1, #1
15510         beq     .L2021
15511         mov     w0, w22
15512         bl      ftl_cmp_data_ver
15513         cbz     w0, .L2021
15514         ldr     w1, [x29,228]
15515         cmn     w1, #1
15516         beq     .L2022
15517         ldr     x3, [x21, #:got_lo12:req_read]
15518         str     x3, [x29,104]
15519         ldr     x0, [x3]
15520         add     x0, x0, x24
15521         str     w1, [x0,4]
15522         mov     w1, 1
15523         ldr     x2, [x0,16]
15524         ldr     x0, [x3]
15525         str     x2, [x29,208]
15526         mov     w2, 0
15527         add     x0, x0, x24
15528         bl      FlashReadPages
15529         ldr     x0, [x29,208]
15530         ldr     x3, [x29,104]
15531         ldr     w0, [x0,4]
15532         str     w0, [x29,176]
15533         ldr     x0, [x3]
15534         ldr     w0, [x0,x24]
15535         cmn     w0, #1
15536         bne     .L2023
15537         b       .L2024
15538 .L2022:
15539         ldr     w0, [x29,236]
15540         ldr     w1, [x29,232]
15541         cmp     w1, w0
15542         bne     .L2025
15543         ldr     x1, [x29,112]
15544         mov     w0, w27
15545         mov     w2, 1
15546         bl      log2phys
15547 .L2025:
15548         ldrh    w0, [x19]
15549         b       .L2106
15550 .L2023:
15551         ldr     x0, [x29,208]
15552         ldr     w28, [x0,8]
15553         cmp     w28, w27
15554         bne     .L2024
15555         ldr     x0, [x29,168]
15556         ldr     w1, [x29,176]
15557         str     x3, [x29,104]
15558         ldr     w0, [x0]
15559         bl      ftl_cmp_data_ver
15560         ldr     x3, [x29,104]
15561         cbz     w0, .L2024
15562         ldr     w0, [x29,232]
15563         ldr     w1, [x29,236]
15564         cmp     w0, w1
15565         beq     .L2030
15566         ldr     w1, [x29,228]
15567         cmp     w0, w1
15568         beq     .L2024
15569         cmn     w0, #1
15570         ldr     x1, [x3]
15571         beq     .L2028
15572         add     x1, x1, x24
15573         str     w0, [x1,4]
15574         ldr     x2, [x1,16]
15575         mov     w1, 1
15576         ldr     x0, [x3]
15577         str     x2, [x29,208]
15578         mov     w2, 0
15579         add     x0, x0, x24
15580         bl      FlashReadPages
15581         b       .L2029
15582 .L2028:
15583         str     w0, [x1,x24]
15584 .L2029:
15585         ldr     x0, [x21, #:got_lo12:req_read]
15586         ldr     x0, [x0]
15587         ldr     w0, [x0,x24]
15588         cmn     w0, #1
15589         beq     .L2030
15590         ldr     x0, [x29,208]
15591         ldr     w24, [x0,4]
15592         ldr     x0, [x29,136]
15593         mov     w1, w24
15594         ldr     x0, [x0, #:got_lo12:g_recovery_page_min_ver]
15595         ldr     w0, [x0]
15596         bl      ftl_cmp_data_ver
15597         cbz     w0, .L2030
15598         ldr     w0, [x29,176]
15599         mov     w1, w24
15600         bl      ftl_cmp_data_ver
15601         cbz     w0, .L2024
15602 .L2030:
15603         ldr     w1, [x29,228]
15604         mov     w0, w28
15605         bl      FtlReUsePrevPpa
15606 .L2024:
15607         mov     w0, -1
15608         str     w0, [x29,228]
15609         ldrh    w0, [x19]
15610         bl      decrement_vpc_count
15611         b       .L2032
15612 .L2021:
15613         ldr     w0, [x29,236]
15614         ldr     w1, [x29,232]
15615         cmp     w1, w0
15616         beq     .L2032
15617         ldr     x1, [x29,120]
15618         mov     w0, w27
15619         mov     w2, 1
15620         bl      log2phys
15621         ldr     w0, [x29,232]
15622         cmn     w0, #1
15623         beq     .L2032
15624         ldr     w1, [x29,228]
15625         cmp     w0, w1
15626         beq     .L2032
15627         lsr     w0, w0, 10
15628         bl      P2V_block_in_plane
15629         uxth    w0, w0
15630         adrp    x1, :got:g_active_superblock
15631         ldr     x1, [x1, #:got_lo12:g_active_superblock]
15632         ldrh    w1, [x1]
15633         cmp     w1, w0
15634         beq     .L2035
15635         adrp    x1, :got:g_buffer_superblock
15636         ldr     x1, [x1, #:got_lo12:g_buffer_superblock]
15637         ldrh    w1, [x1]
15638         cmp     w1, w0
15639         beq     .L2035
15640         adrp    x1, :got:g_gc_temp_superblock
15641         ldr     x1, [x1, #:got_lo12:g_gc_temp_superblock]
15642         ldrh    w1, [x1]
15643         cmp     w1, w0
15644         bne     .L2032
15645 .L2035:
15646         ldr     x24, [x21, #:got_lo12:req_read]
15647         mov     w2, 0
15648         ldr     w1, [x29,232]
15649         ldr     x0, [x24]
15650         str     w1, [x0,4]
15651         mov     w1, 1
15652         ldr     x28, [x0,16]
15653         ldr     x0, [x24]
15654         bl      FlashReadPages
15655         ldr     x0, [x24]
15656         ldr     w1, [x28,4]
15657         ldr     w0, [x0]
15658         cmn     w0, #1
15659         beq     .L2032
15660         mov     w0, w22
15661         bl      ftl_cmp_data_ver
15662         cbnz    w0, .L2032
15663         ldr     x1, [x29,144]
15664         mov     w0, w27
15665         mov     w2, 1
15666         bl      log2phys
15667 .L2032:
15668         ldr     w0, [x29,228]
15669         cmn     w0, #1
15670         beq     .L2012
15671         lsr     w0, w0, 10
15672         bl      P2V_block_in_plane
15673         uxth    w1, w0
15674         adrp    x2, :got:p_valid_page_count_table
15675         ubfiz   x3, x1, 1, 16
15676         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
15677         ldr     x2, [x2]
15678         ldrh    w2, [x2,x3]
15679         cbz     w2, .L2036
15680 .L2106:
15681         bl      decrement_vpc_count
15682         b       .L2012
15683 .L2036:
15684         ldr     x0, [x29,128]
15685         bl      printk
15686         b       .L2012
15687 .L2016:
15688         adrp    x1, :got:g_recovery_page_num
15689         ldr     x1, [x1, #:got_lo12:g_recovery_page_num]
15690         ldr     w0, [x1]
15691         cmp     w0, 31
15692         bhi     .L2037
15693         adrp    x2, :got:g_recovery_ppa_tbl
15694         ldr     w3, [x29,236]
15695         ldr     x2, [x2, #:got_lo12:g_recovery_ppa_tbl]
15696         str     w3, [x2,w0,uxtw 2]
15697         add     w0, w0, 1
15698         str     w0, [x1]
15699 .L2037:
15700         ldrh    w0, [x19]
15701         bl      decrement_vpc_count
15702         adrp    x0, :got:g_recovery_page_min_ver
15703         ldr     x0, [x0, #:got_lo12:g_recovery_page_min_ver]
15704         ldr     w1, [x0]
15705         cmn     w1, #1
15706         beq     .L2105
15707         cmp     w1, w22
15708         bls     .L2012
15709 .L2105:
15710         str     w22, [x0]
15711 .L2012:
15712         ldr     x0, [x29,200]
15713         add     x0, x0, 1
15714         str     x0, [x29,200]
15715         b       .L2011
15716 .L2114:
15717         ldr     x0, [x29,160]
15718         add     w23, w23, 1
15719         uxth    w23, w23
15720         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
15721         ldrh    w0, [x0]
15722         cmp     w23, w0
15723         bne     .L2007
15724         ldr     x0, [x29,192]
15725         mov     w3, 65535
15726         strh    w23, [x19,2]
15727         strh    wzr, [x19,4]
15728         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
15729         ldrh    w2, [x0]
15730         mov     x0, 0
15731 .L2040:
15732         uxth    w1, w0
15733         cmp     w1, w2
15734         bcs     .L1965
15735         add     x0, x0, 1
15736         add     x4, x19, x0, lsl 1
15737         ldrh    w4, [x4,14]
15738         cmp     w4, w3
15739         beq     .L2040
15740         strb    w1, [x19,6]
15741         b       .L1965
15742 .L2014:
15743         strb    w26, [x19,6]
15744         strh    w20, [x19,2]
15745 .L2108:
15746         mov     x0, x19
15747         mov     w1, w20
15748         mov     w2, w26
15749         bl      ftl_sb_update_avl_pages
15750 .L1965:
15751         mov     w0, 0
15752         ldp     x19, x20, [sp,16]
15753         ldp     x21, x22, [sp,32]
15754         ldp     x23, x24, [sp,48]
15755         ldp     x25, x26, [sp,64]
15756         ldp     x27, x28, [sp,80]
15757         ldp     x29, x30, [sp], 240
15758         ret
15759         .size   FtlRecoverySuperblock, .-FtlRecoverySuperblock
15760         .align  2
15761         .global FtlWriteDumpData
15762         .type   FtlWriteDumpData, %function
15763 FtlWriteDumpData:
15764         stp     x29, x30, [sp, -144]!
15765         add     x29, sp, 0
15766         stp     x19, x20, [sp,16]
15767         adrp    x19, :got:g_active_superblock
15768         stp     x21, x22, [sp,32]
15769         stp     x23, x24, [sp,48]
15770         ldr     x0, [x19, #:got_lo12:g_active_superblock]
15771         stp     x25, x26, [sp,64]
15772         ldrh    w3, [x0,4]
15773         cbz     w3, .L2116
15774         ldrb    w1, [x0,8]
15775         cbnz    w1, .L2116
15776         adrp    x2, :got:c_ftl_nand_page_pre_blk
15777         ldrb    w1, [x0,7]
15778         ldr     x2, [x2, #:got_lo12:c_ftl_nand_page_pre_blk]
15779         ldrh    w2, [x2]
15780         mul     w1, w1, w2
15781         cmp     w3, w1
15782         beq     .L2116
15783         adrp    x1, :got:g_MaxLpn
15784         ldrb    w23, [x0,10]
15785         ldr     x1, [x1, #:got_lo12:g_MaxLpn]
15786         ldr     w21, [x1]
15787         adrp    x1, :got:c_ftl_nand_planes_num
15788         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
15789         ldrh    w24, [x1]
15790         cbnz    w23, .L2115
15791         sub     w21, w21, #1
15792         add     x1, x29, 84
15793         mov     w2, w23
15794         mov     w0, w21
15795         add     x22, x29, 88
15796         bl      log2phys
15797         str     w21, [x29,112]
15798         adrp    x0, :got:p_sys_data_buf
15799         ldr     w2, [x29,84]
15800         str     w2, [x29,92]
15801         cmn     w2, #1
15802         ldr     x0, [x0, #:got_lo12:p_sys_data_buf]
15803         ldr     x1, [x0]
15804         str     x1, [x29,96]
15805         adrp    x1, :got:p_sys_spare_buf
15806         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
15807         ldr     x20, [x1]
15808         str     x20, [x29,104]
15809         str     w23, [x20,4]
15810         beq     .L2118
15811         mov     x0, x22
15812         mov     w1, 1
15813         mov     w2, w23
15814         bl      FlashReadPages
15815         b       .L2119
15816 .L2118:
15817         adrp    x2, :got:c_ftl_nand_byte_pre_page
15818         ldr     x0, [x0]
15819         mov     w1, 255
15820         ldr     x2, [x2, #:got_lo12:c_ftl_nand_byte_pre_page]
15821         ldrh    w2, [x2]
15822         bl      ftl_memset
15823 .L2119:
15824         mov     w0, 6
15825         mov     w26, 0
15826         adrp    x25, :got:g_GlobalDataVersion
15827         mul     w24, w24, w0
15828         mov     w0, -3947
15829         strh    w0, [x20]
15830 .L2120:
15831         cmp     w26, w24
15832         beq     .L2121
15833         ldr     x23, [x19, #:got_lo12:g_active_superblock]
15834         ldrh    w0, [x23,4]
15835         cbz     w0, .L2121
15836         ldr     w0, [x22,4]
15837         add     w26, w26, 1
15838         str     w0, [x20,12]
15839         ldrh    w0, [x23]
15840         strh    w0, [x20,2]
15841         mov     x0, x23
15842         str     w21, [x20,8]
15843         bl      get_new_active_ppa
15844         str     w0, [x22,4]
15845         ldr     x0, [x25, #:got_lo12:g_GlobalDataVersion]
15846         mov     w2, 0
15847         mov     w3, w2
15848         ldr     w1, [x0]
15849         str     w1, [x20,4]
15850         add     w1, w1, 1
15851         cmn     w1, #1
15852         csel    w1, w1, wzr, ne
15853         str     w1, [x0]
15854         mov     w1, 1
15855         mov     x0, x22
15856         bl      FlashProgPages
15857         ldrh    w0, [x23]
15858         bl      decrement_vpc_count
15859         b       .L2120
15860 .L2121:
15861         ldr     x19, [x19, #:got_lo12:g_active_superblock]
15862         mov     w0, 1
15863         strb    w0, [x19,10]
15864         b       .L2115
15865 .L2116:
15866         ldr     x19, [x19, #:got_lo12:g_active_superblock]
15867         strb    wzr, [x19,10]
15868 .L2115:
15869         ldp     x19, x20, [sp,16]
15870         ldp     x21, x22, [sp,32]
15871         ldp     x23, x24, [sp,48]
15872         ldp     x25, x26, [sp,64]
15873         ldp     x29, x30, [sp], 144
15874         ret
15875         .size   FtlWriteDumpData, .-FtlWriteDumpData
15876         .align  2
15877         .global l2p_flush
15878         .type   l2p_flush, %function
15879 l2p_flush:
15880         stp     x29, x30, [sp, -48]!
15881         add     x29, sp, 0
15882         stp     x19, x20, [sp,16]
15883         str     x21, [sp,32]
15884         mov     w19, 0
15885         adrp    x20, :got:c_ftl_nand_l2pmap_ram_region_num
15886         adrp    x21, :got:p_l2p_ram_map
15887         bl      FtlWriteDumpData
15888 .L2133:
15889         ldr     x0, [x20, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
15890         ldrh    w0, [x0]
15891         cmp     w0, w19
15892         bls     .L2136
15893         ldr     x1, [x21, #:got_lo12:p_l2p_ram_map]
15894         ubfiz   x0, x19, 4, 16
15895         ldr     x1, [x1]
15896         add     x0, x1, x0
15897         ldr     w0, [x0,4]
15898         tbz     w0, #31, .L2134
15899         mov     w0, w19
15900         bl      flush_l2p_region
15901 .L2134:
15902         add     w19, w19, 1
15903         uxth    w19, w19
15904         b       .L2133
15905 .L2136:
15906         mov     w0, 0
15907         ldr     x21, [sp,32]
15908         ldp     x19, x20, [sp,16]
15909         ldp     x29, x30, [sp], 48
15910         ret
15911         .size   l2p_flush, .-l2p_flush
15912         .align  2
15913         .global FtlVpcCheckAndModify
15914         .type   FtlVpcCheckAndModify, %function
15915 FtlVpcCheckAndModify:
15916         stp     x29, x30, [sp, -112]!
15917         adrp    x1, .LANCHOR1
15918         adrp    x0, .LC111
15919         add     x1, x1, :lo12:.LANCHOR1
15920         add     x29, sp, 0
15921         add     x1, x1, 16
15922         add     x0, x0, :lo12:.LC111
15923         stp     x19, x20, [sp,16]
15924         stp     x21, x22, [sp,32]
15925         stp     x23, x24, [sp,48]
15926         stp     x25, x26, [sp,64]
15927         stp     x27, x28, [sp,80]
15928         bl      printk
15929         adrp    x20, :got:p_valid_page_count_check_table
15930         adrp    x0, :got:c_ftl_nand_blk_pre_plane
15931         mov     w19, 0
15932         adrp    x21, :got:g_MaxLpn
15933         add     x22, x29, 108
15934         ldr     x1, [x20, #:got_lo12:p_valid_page_count_check_table]
15935         ldr     x0, [x0, #:got_lo12:c_ftl_nand_blk_pre_plane]
15936         ldrh    w2, [x0]
15937         ldr     x0, [x1]
15938         mov     w1, 0
15939         lsl     w2, w2, 1
15940         bl      ftl_memset
15941 .L2138:
15942         ldr     x0, [x21, #:got_lo12:g_MaxLpn]
15943         ldr     w0, [x0]
15944         cmp     w19, w0
15945         bcs     .L2153
15946         mov     w0, w19
15947         mov     x1, x22
15948         mov     w2, 0
15949         bl      log2phys
15950         ldr     w0, [x29,108]
15951         cmn     w0, #1
15952         beq     .L2139
15953         lsr     w0, w0, 10
15954         bl      P2V_block_in_plane
15955         ubfiz   x0, x0, 1, 16
15956         ldr     x1, [x20, #:got_lo12:p_valid_page_count_check_table]
15957         ldr     x3, [x1]
15958         ldrh    w2, [x3,x0]
15959         add     w2, w2, 1
15960         strh    w2, [x3,x0]
15961 .L2139:
15962         add     w19, w19, 1
15963         b       .L2138
15964 .L2153:
15965         adrp    x22, .LC112
15966         mov     w19, 0
15967         adrp    x23, :got:c_ftl_nand_data_blks_per_plane
15968         adrp    x24, :got:p_valid_page_count_table
15969         mov     w25, 65535
15970         add     x22, x22, :lo12:.LC112
15971         adrp    x26, :got:g_active_superblock
15972 .L2141:
15973         ldr     x0, [x23, #:got_lo12:c_ftl_nand_data_blks_per_plane]
15974         ldrh    w0, [x0]
15975         cmp     w0, w19
15976         bls     .L2154
15977         ldr     x27, [x24, #:got_lo12:p_valid_page_count_table]
15978         ubfiz   x21, x19, 1, 16
15979         ldr     x28, [x20, #:got_lo12:p_valid_page_count_check_table]
15980         ldr     x0, [x27]
15981         ldrh    w2, [x0,x21]
15982         ldr     x0, [x28]
15983         ldrh    w3, [x0,x21]
15984         cmp     w2, w3
15985         beq     .L2144
15986         cmp     w2, w25
15987         beq     .L2144
15988         mov     x0, x22
15989         mov     w1, w19
15990         bl      printk
15991         ldr     x0, [x26, #:got_lo12:g_active_superblock]
15992         ldrh    w0, [x0]
15993         cmp     w0, w19
15994         beq     .L2144
15995         adrp    x0, :got:g_gc_temp_superblock
15996         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
15997         ldrh    w0, [x0]
15998         cmp     w0, w19
15999         beq     .L2144
16000         adrp    x0, :got:g_buffer_superblock
16001         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
16002         ldrh    w0, [x0]
16003         cmp     w0, w19
16004         beq     .L2144
16005         ldr     x0, [x28]
16006         ldrh    w1, [x0,x21]
16007         ldr     x0, [x27]
16008         strh    w1, [x0,x21]
16009         mov     w0, w19
16010         bl      update_vpc_list
16011         bl      l2p_flush
16012         bl      FtlVpcTblFlush
16013 .L2144:
16014         add     w19, w19, 1
16015         uxth    w19, w19
16016         b       .L2141
16017 .L2154:
16018         ldp     x19, x20, [sp,16]
16019         ldp     x21, x22, [sp,32]
16020         ldp     x23, x24, [sp,48]
16021         ldp     x25, x26, [sp,64]
16022         ldp     x27, x28, [sp,80]
16023         ldp     x29, x30, [sp], 112
16024         ret
16025         .size   FtlVpcCheckAndModify, .-FtlVpcCheckAndModify
16026         .align  2
16027         .global allocate_new_data_superblock
16028         .type   allocate_new_data_superblock, %function
16029 allocate_new_data_superblock:
16030         stp     x29, x30, [sp, -48]!
16031         add     x29, sp, 0
16032         stp     x19, x20, [sp,16]
16033         str     x21, [sp,32]
16034         mov     x19, x0
16035         ldrh    w21, [x0]
16036         mov     w0, 65535
16037         cmp     w21, w0
16038         beq     .L2156
16039         adrp    x1, :got:p_valid_page_count_table
16040         ubfiz   x0, x21, 1, 16
16041         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
16042         ldr     x1, [x1]
16043         ldrh    w0, [x1,x0]
16044         cbz     w0, .L2157
16045         mov     w0, w21
16046         bl      INSERT_DATA_LIST
16047         b       .L2156
16048 .L2157:
16049         mov     w0, w21
16050         bl      INSERT_FREE_LIST
16051 .L2156:
16052         adrp    x0, :got:g_buffer_superblock
16053         strb    wzr, [x19,8]
16054         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
16055         cmp     x19, x0
16056         beq     .L2158
16057         adrp    x0, :got:c_ftl_nand_type
16058         ldr     x0, [x0, #:got_lo12:c_ftl_nand_type]
16059         ldrh    w0, [x0]
16060         cmp     w0, 1
16061         bne     .L2159
16062 .L2158:
16063         mov     w0, 1
16064         strb    w0, [x19,8]
16065         b       .L2160
16066 .L2159:
16067         adrp    x1, :got:g_active_superblock
16068         ldr     x2, [x1, #:got_lo12:g_active_superblock]
16069         cmp     x19, x2
16070         bne     .L2160
16071         cmp     w0, 3
16072         beq     .L2162
16073         adrp    x0, :got:g_all_blk_used_slc_mode
16074         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
16075         ldr     w0, [x0]
16076         cmp     w0, 1
16077         bne     .L2163
16078 .L2162:
16079         ldr     x0, [x1, #:got_lo12:g_active_superblock]
16080         mov     w2, 1
16081         strb    w2, [x0,8]
16082 .L2163:
16083         adrp    x0, :got:g_inkDie_check_enable
16084         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
16085         ldr     w0, [x0]
16086         cbz     w0, .L2160
16087         adrp    x0, :got:g_min_erase_count
16088         ldr     x0, [x0, #:got_lo12:g_min_erase_count]
16089         ldr     w0, [x0]
16090         cmp     w0, 29
16091         bhi     .L2160
16092         ldr     x1, [x1, #:got_lo12:g_active_superblock]
16093         mov     w0, 1
16094         strb    w0, [x1,8]
16095 .L2160:
16096         adrp    x1, :got:g_tmp_data_superblock_id
16097         mov     w2, 65535
16098         mov     x20, x1
16099         ldr     x0, [x1, #:got_lo12:g_tmp_data_superblock_id]
16100         ldrh    w0, [x0]
16101         cmp     w0, w2
16102         beq     .L2165
16103         cmp     w21, w0
16104         bne     .L2166
16105         adrp    x2, :got:p_valid_page_count_table
16106         ubfiz   x1, x0, 1, 16
16107         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
16108         ldr     x2, [x2]
16109         ldrh    w1, [x2,x1]
16110         cbz     w1, .L2167
16111 .L2166:
16112         bl      update_vpc_list
16113 .L2167:
16114         ldr     x1, [x20, #:got_lo12:g_tmp_data_superblock_id]
16115         mov     w0, -1
16116         strh    w0, [x1]
16117 .L2165:
16118         mov     x0, x19
16119         bl      allocate_data_superblock
16120         bl      l2p_flush
16121         bl      FtlVpcTblFlush
16122         mov     w0, 0
16123         bl      FtlEctTblFlush
16124         ldr     x21, [sp,32]
16125         mov     w0, 0
16126         ldp     x19, x20, [sp,16]
16127         ldp     x29, x30, [sp], 48
16128         ret
16129         .size   allocate_new_data_superblock, .-allocate_new_data_superblock
16130         .align  2
16131         .global FtlCacheWriteBack
16132         .type   FtlCacheWriteBack, %function
16133 FtlCacheWriteBack:
16134         adrp    x0, :got:gp_last_act_superblock
16135         stp     x29, x30, [sp, -144]!
16136         add     x29, sp, 0
16137         ldr     x0, [x0, #:got_lo12:gp_last_act_superblock]
16138         stp     x19, x20, [sp,16]
16139         stp     x21, x22, [sp,32]
16140         stp     x23, x24, [sp,48]
16141         stp     x25, x26, [sp,64]
16142         stp     x27, x28, [sp,80]
16143         ldr     x19, [x0]
16144         adrp    x0, :got:g_wr_page_num
16145         str     x0, [x29,120]
16146         ldr     x1, [x0, #:got_lo12:g_wr_page_num]
16147         ldr     w1, [x1]
16148         cbz     w1, .L2178
16149         adrp    x21, :got:req_wr_io
16150         ldrb    w3, [x19,9]
16151         mov     w2, 0
16152         mov     w23, 0
16153         adrp    x24, .LC113
16154         mov     w22, w23
16155         ldr     x0, [x21, #:got_lo12:req_wr_io]
16156         mov     w25, 56
16157         adrp    x26, :got:p_valid_page_count_table
16158         add     x24, x24, :lo12:.LC113
16159         ldr     x0, [x0]
16160         bl      FlashProgPages
16161         add     x0, x29, 140
16162         str     x0, [x29,112]
16163 .L2179:
16164         ldr     x0, [x29,120]
16165         ldr     x0, [x0, #:got_lo12:g_wr_page_num]
16166         ldr     w1, [x0]
16167         cmp     w22, w1
16168         bcs     .L2197
16169         cbz     w23, .L2180
16170         ldr     x1, [x21, #:got_lo12:req_wr_io]
16171         mov     w2, -1
16172         umull   x0, w22, w25
16173         ldr     x1, [x1]
16174         str     w2, [x1,x0]
16175 .L2180:
16176         umull   x20, w22, w25
16177         adrp    x27, :got:c_ftl_nand_page_pre_blk
16178         adrp    x28, :got:g_sys_ext_data
16179 .L2181:
16180         ldr     x3, [x21, #:got_lo12:req_wr_io]
16181         ldr     x1, [x3]
16182         add     x0, x1, x20
16183         ldr     w1, [x1,x20]
16184         cmn     w1, #1
16185         bne     .L2198
16186         ldr     w0, [x0,4]
16187         lsr     w0, w0, 10
16188         bl      P2V_block_in_plane
16189         ldrh    w1, [x19]
16190         cmp     w1, w0, uxth
16191         bne     .L2182
16192         ldr     x0, [x26, #:got_lo12:p_valid_page_count_table]
16193         ubfiz   x1, x1, 1, 16
16194         ldrh    w3, [x19,4]
16195         ldr     x2, [x0]
16196         ldrh    w0, [x2,x1]
16197         sub     w0, w0, w3
16198         strh    w0, [x2,x1]
16199         ldr     x0, [x27, #:got_lo12:c_ftl_nand_page_pre_blk]
16200         strb    wzr, [x19,6]
16201         strh    wzr, [x19,4]
16202         ldrh    w0, [x0]
16203         strh    w0, [x19,2]
16204 .L2182:
16205         ldrh    w0, [x19,4]
16206         cbnz    w0, .L2183
16207         mov     x0, x19
16208         bl      allocate_new_data_superblock
16209 .L2183:
16210         ldr     x1, [x28, #:got_lo12:g_sys_ext_data]
16211         ldr     w0, [x1,96]
16212         add     w0, w0, 1
16213         str     w0, [x1,96]
16214         ldr     x23, [x21, #:got_lo12:req_wr_io]
16215         ldr     x0, [x23]
16216         add     x0, x0, x20
16217         ldr     w0, [x0,4]
16218         lsr     w0, w0, 10
16219         bl      FtlGcMarkBadPhyBlk
16220         mov     x0, x19
16221         bl      get_new_active_ppa
16222         str     w0, [x29,140]
16223         ldr     x1, [x23]
16224         mov     w2, 0
16225         add     x1, x1, x20
16226         str     w0, [x1,4]
16227         mov     w1, 1
16228         ldr     x0, [x23]
16229         mov     w23, 1
16230         ldrb    w3, [x19,9]
16231         add     x0, x0, x20
16232         bl      FlashProgPages
16233         b       .L2181
16234 .L2198:
16235         ldr     w1, [x0,4]
16236         mov     w2, 1
16237         str     w1, [x29,140]
16238         ldr     w0, [x0,24]
16239         ldr     x1, [x29,112]
16240         str     x3, [x29,104]
16241         bl      log2phys
16242         ldr     x3, [x29,104]
16243         ldr     x0, [x3]
16244         add     x20, x0, x20
16245         ldr     x0, [x20,16]
16246         ldr     w0, [x0,12]
16247         cmn     w0, #1
16248         beq     .L2185
16249         lsr     w0, w0, 10
16250         bl      P2V_block_in_plane
16251         uxth    w1, w0
16252         ldr     x2, [x26, #:got_lo12:p_valid_page_count_table]
16253         ubfiz   x0, x1, 1, 16
16254         mov     w20, w1
16255         ldr     x2, [x2]
16256         ldrh    w2, [x2,x0]
16257         cbnz    w2, .L2186
16258         mov     x0, x24
16259         bl      printk
16260 .L2186:
16261         mov     w0, w20
16262         bl      decrement_vpc_count
16263 .L2185:
16264         add     w22, w22, 1
16265         b       .L2179
16266 .L2197:
16267         str     wzr, [x0]
16268 .L2178:
16269         mov     w0, 0
16270         ldp     x19, x20, [sp,16]
16271         ldp     x21, x22, [sp,32]
16272         ldp     x23, x24, [sp,48]
16273         ldp     x25, x26, [sp,64]
16274         ldp     x27, x28, [sp,80]
16275         ldp     x29, x30, [sp], 144
16276         ret
16277         .size   FtlCacheWriteBack, .-FtlCacheWriteBack
16278         .align  2
16279         .global rk_ftl_cache_write_back
16280         .type   rk_ftl_cache_write_back, %function
16281 rk_ftl_cache_write_back:
16282         stp     x29, x30, [sp, -16]!
16283         add     x29, sp, 0
16284         bl      FtlCacheWriteBack
16285         ldp     x29, x30, [sp], 16
16286         ret
16287         .size   rk_ftl_cache_write_back, .-rk_ftl_cache_write_back
16288         .align  2
16289         .global FtlSysFlush
16290         .type   FtlSysFlush, %function
16291 FtlSysFlush:
16292         stp     x29, x30, [sp, -16]!
16293         add     x29, sp, 0
16294         bl      FtlCacheWriteBack
16295         bl      l2p_flush
16296         bl      FtlVpcTblFlush
16297         mov     w0, 1
16298         bl      FtlEctTblFlush
16299         mov     w0, 0
16300         ldp     x29, x30, [sp], 16
16301         ret
16302         .size   FtlSysFlush, .-FtlSysFlush
16303         .align  2
16304         .global FtlDeInit
16305         .type   FtlDeInit, %function
16306 FtlDeInit:
16307         adrp    x0, :got:gFtlInitStatus
16308         stp     x29, x30, [sp, -16]!
16309         add     x29, sp, 0
16310         ldr     x0, [x0, #:got_lo12:gFtlInitStatus]
16311         ldr     w0, [x0]
16312         cmp     w0, 1
16313         bne     .L2202
16314         bl      FtlSysFlush
16315 .L2202:
16316         mov     w0, 0
16317         ldp     x29, x30, [sp], 16
16318         ret
16319         .size   FtlDeInit, .-FtlDeInit
16320         .align  2
16321         .global rk_ftl_de_init
16322         .type   rk_ftl_de_init, %function
16323 rk_ftl_de_init:
16324         stp     x29, x30, [sp, -16]!
16325         add     x29, sp, 0
16326         bl      rk_nand_de_init
16327         bl      FtlDeInit
16328         bl      rk_nand_de_init
16329         ldp     x29, x30, [sp], 16
16330         ret
16331         .size   rk_ftl_de_init, .-rk_ftl_de_init
16332         .align  2
16333         .global FtlDiscard
16334         .type   FtlDiscard, %function
16335 FtlDiscard:
16336         stp     x29, x30, [sp, -96]!
16337         add     w2, w0, w1
16338         add     x29, sp, 0
16339         stp     x19, x20, [sp,16]
16340         mov     w20, w0
16341         adrp    x0, :got:g_MaxLbaSector
16342         stp     x21, x22, [sp,32]
16343         stp     x23, x24, [sp,48]
16344         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
16345         mov     w19, w1
16346         str     x25, [sp,64]
16347         ldr     w1, [x0]
16348         mov     w0, -1
16349         cmp     w2, w1
16350         bhi     .L2205
16351         cmp     w19, 31
16352         bls     .L2219
16353         adrp    x22, :got:c_ftl_nand_sec_pre_page
16354         bl      FtlCacheWriteBack
16355         ldr     x0, [x22, #:got_lo12:c_ftl_nand_sec_pre_page]
16356         ldrh    w1, [x0]
16357         udiv    w21, w20, w1
16358         msub    w20, w1, w21, w20
16359         uxth    w20, w20
16360         cbz     w20, .L2207
16361         sub     w1, w1, w20
16362         add     w21, w21, 1
16363         cmp     w1, w19
16364         csel    w1, w1, w19, ls
16365         sub     w19, w19, w1, uxth
16366 .L2207:
16367         adrp    x20, .LANCHOR0
16368         mov     w0, -1
16369         add     x23, x29, 88
16370         str     w0, [x29,92]
16371         add     x20, x20, :lo12:.LANCHOR0
16372         adrp    x24, :got:g_totle_discard_page_count
16373         add     x25, x29, 92
16374 .L2208:
16375         ldr     x0, [x22, #:got_lo12:c_ftl_nand_sec_pre_page]
16376         ldrh    w0, [x0]
16377         cmp     w19, w0
16378         bcc     .L2220
16379         mov     w0, w21
16380         mov     x1, x23
16381         mov     w2, 0
16382         bl      log2phys
16383         ldr     w0, [x29,88]
16384         cmn     w0, #1
16385         beq     .L2209
16386         ldr     w0, [x20,32]
16387         mov     w2, 1
16388         add     w0, w0, 1
16389         str     w0, [x20,32]
16390         ldr     x1, [x24, #:got_lo12:g_totle_discard_page_count]
16391         ldr     w0, [x1]
16392         add     w0, w0, 1
16393         str     w0, [x1]
16394         mov     x1, x25
16395         mov     w0, w21
16396         bl      log2phys
16397         ldr     w0, [x29,88]
16398         lsr     w0, w0, 10
16399         bl      P2V_block_in_plane
16400         bl      decrement_vpc_count
16401 .L2209:
16402         ldr     x0, [x22, #:got_lo12:c_ftl_nand_sec_pre_page]
16403         add     w21, w21, 1
16404         ldrh    w0, [x0]
16405         sub     w19, w19, w0
16406         b       .L2208
16407 .L2220:
16408         adrp    x0, .LANCHOR0
16409         add     x0, x0, :lo12:.LANCHOR0
16410         ldr     w1, [x0,32]
16411         cmp     w1, 32
16412         bls     .L2219
16413         str     wzr, [x0,32]
16414         bl      l2p_flush
16415         bl      FtlVpcTblFlush
16416 .L2219:
16417         mov     w0, 0
16418 .L2205:
16419         ldp     x19, x20, [sp,16]
16420         ldp     x21, x22, [sp,32]
16421         ldp     x23, x24, [sp,48]
16422         ldr     x25, [sp,64]
16423         ldp     x29, x30, [sp], 96
16424         ret
16425         .size   FtlDiscard, .-FtlDiscard
16426         .align  2
16427         .global FtlGcFreeTempBlock
16428         .type   FtlGcFreeTempBlock, %function
16429 FtlGcFreeTempBlock:
16430         stp     x29, x30, [sp, -112]!
16431         add     x29, sp, 0
16432         stp     x19, x20, [sp,16]
16433         adrp    x19, :got:g_gc_temp_superblock
16434         adrp    x20, :got:c_ftl_nand_page_pre_blk
16435         stp     x21, x22, [sp,32]
16436         stp     x23, x24, [sp,48]
16437         ldr     x2, [x19, #:got_lo12:g_gc_temp_superblock]
16438         stp     x25, x26, [sp,64]
16439         stp     x27, x28, [sp,80]
16440         ldr     x1, [x20, #:got_lo12:c_ftl_nand_page_pre_blk]
16441         ldrh    w21, [x2]
16442         mov     w2, 65535
16443         cmp     w21, w2
16444         ldrh    w1, [x1]
16445         bne     .L2222
16446 .L2232:
16447         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
16448         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16449         str     wzr, [x0]
16450         mov     w0, 65535
16451         ldr     x22, [x19, #:got_lo12:g_gc_temp_superblock]
16452         ldrh    w1, [x22]
16453         cmp     w1, w0
16454         beq     .L2250
16455         adrp    x21, :got:p_valid_page_count_table
16456         bl      FtlCacheWriteBack
16457         ldr     x20, [x20, #:got_lo12:c_ftl_nand_page_pre_blk]
16458         adrp    x25, :got:p_gc_page_info
16459         ldrh    w2, [x22]
16460         mov     w26, 12
16461         ldr     x0, [x21, #:got_lo12:p_valid_page_count_table]
16462         add     x27, x29, 108
16463         ldrh    w3, [x20]
16464         adrp    x20, :got:g_gc_page_offset
16465         ldr     x1, [x0]
16466         ldrb    w0, [x22,7]
16467         mov     w22, 0
16468         mul     w0, w0, w3
16469         strh    w0, [x1,x2,lsl 1]
16470         adrp    x0, :got:g_totle_gc_page_count
16471         ldr     x1, [x20, #:got_lo12:g_gc_page_offset]
16472         ldr     x0, [x0, #:got_lo12:g_totle_gc_page_count]
16473         ldrh    w2, [x1]
16474         ldr     w1, [x0]
16475         add     w1, w2, w1
16476         str     w1, [x0]
16477         b       .L2233
16478 .L2222:
16479         cbz     w0, .L2225
16480         adrp    x0, .LANCHOR2
16481         add     x0, x0, :lo12:.LANCHOR2
16482         ldrh    w3, [x0,128]
16483         cmp     w3, w2
16484         beq     .L2226
16485 .L2227:
16486         mov     w1, 2
16487         b       .L2225
16488 .L2226:
16489         strh    wzr, [x0,128]
16490         adrp    x0, :got:g_num_free_superblocks
16491         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
16492         ldrh    w0, [x0]
16493         cmp     w0, 17
16494         bhi     .L2227
16495 .L2225:
16496         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
16497         bl      FtlGcScanTempBlk
16498         str     w0, [x29,108]
16499         cmn     w0, #1
16500         beq     .L2228
16501         adrp    x0, :got:g_sys_ext_data
16502         ubfiz   x21, x21, 1, 16
16503         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
16504         ldr     w1, [x0,96]
16505         add     w1, w1, 1
16506         str     w1, [x0,96]
16507         adrp    x0, :got:p_erase_count_table
16508         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
16509         ldr     x1, [x0]
16510         ldrh    w0, [x1,x21]
16511         cmp     w0, 4
16512         bls     .L2229
16513         sub     w0, w0, #5
16514         strh    w0, [x1,x21]
16515         mov     w0, 1
16516         bl      FtlEctTblFlush
16517 .L2229:
16518         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
16519         mov     x19, x0
16520         ldr     x1, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16521         ldr     w1, [x1]
16522         cbnz    w1, .L2230
16523         ldr     w0, [x29,108]
16524         lsr     w0, w0, 10
16525         bl      FtlBbmMapBadBlock
16526         bl      FtlBbmTblFlush
16527 .L2230:
16528         ldr     x0, [x19, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16529         str     wzr, [x0]
16530         mov     w0, 1
16531         b       .L2231
16532 .L2228:
16533         adrp    x0, .LANCHOR2+128
16534         mov     w1, 65535
16535         ldrh    w2, [x0,#:lo12:.LANCHOR2+128]
16536         mov     w0, 1
16537         cmp     w2, w1
16538         bne     .L2231
16539         b       .L2232
16540 .L2236:
16541         ldr     x0, [x25, #:got_lo12:p_gc_page_info]
16542         mov     x1, x27
16543         umull   x24, w22, w26
16544         mov     w2, 0
16545         ldr     x28, [x0]
16546         add     x23, x28, x24
16547         ldr     w0, [x23,8]
16548         bl      log2phys
16549         ldr     w0, [x29,108]
16550         ldr     w1, [x28,x24]
16551         cmp     w0, w1
16552         bne     .L2234
16553         lsr     w0, w0, 10
16554         bl      P2V_block_in_plane
16555         mov     w24, w0
16556         ldr     w0, [x23,8]
16557         add     x1, x23, 4
16558         mov     w2, 1
16559         bl      log2phys
16560         mov     w0, w24
16561 .L2249:
16562         bl      decrement_vpc_count
16563 .L2235:
16564         add     w22, w22, 1
16565         uxth    w22, w22
16566 .L2233:
16567         ldr     x0, [x20, #:got_lo12:g_gc_page_offset]
16568         ldrh    w0, [x0]
16569         cmp     w0, w22
16570         bhi     .L2236
16571         b       .L2252
16572 .L2234:
16573         ldr     w1, [x23,4]
16574         cmp     w0, w1
16575         beq     .L2235
16576         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
16577         ldrh    w0, [x0]
16578         b       .L2249
16579 .L2252:
16580         mov     w0, -1
16581         bl      decrement_vpc_count
16582         ldr     x21, [x21, #:got_lo12:p_valid_page_count_table]
16583         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
16584         ldr     x2, [x21]
16585         ldrh    w0, [x0]
16586         ubfiz   x1, x0, 1, 16
16587         ldrh    w1, [x2,x1]
16588         cbz     w1, .L2237
16589         bl      INSERT_DATA_LIST
16590         b       .L2238
16591 .L2237:
16592         bl      INSERT_FREE_LIST
16593 .L2238:
16594         ldr     x19, [x19, #:got_lo12:g_gc_temp_superblock]
16595         mov     w0, -1
16596         strh    w0, [x19]
16597         adrp    x0, :got:g_gc_blk_num
16598         ldr     x20, [x20, #:got_lo12:g_gc_page_offset]
16599         strh    wzr, [x20]
16600         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
16601         strh    wzr, [x0]
16602         bl      l2p_flush
16603         bl      FtlVpcTblFlush
16604         adrp    x0, :got:g_inkDie_check_enable
16605         adrp    x1, :got:g_num_free_superblocks
16606         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
16607         ldr     w2, [x0]
16608         adrp    x0, :got:c_ftl_nand_data_op_blks_per_plane
16609         cbz     w2, .L2239
16610         adrp    x2, :got:g_min_erase_count
16611         ldr     x2, [x2, #:got_lo12:g_min_erase_count]
16612         ldr     w2, [x2]
16613         cmp     w2, 29
16614         bhi     .L2239
16615         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
16616         ldr     x1, [x1, #:got_lo12:g_num_free_superblocks]
16617         ldrh    w0, [x0]
16618         ldrh    w1, [x1]
16619         cmp     w1, w0
16620         bcs     .L2240
16621         adrp    x1, :got:g_gc_free_blk_threshold
16622         lsl     w0, w0, 1
16623         ldr     x1, [x1, #:got_lo12:g_gc_free_blk_threshold]
16624         strh    w0, [x1]
16625 .L2240:
16626         adrp    x0, :got:g_gc_superblock
16627         mov     w1, -1
16628         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
16629         b       .L2251
16630 .L2239:
16631         ldr     x0, [x0, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
16632         ldr     x1, [x1, #:got_lo12:g_num_free_superblocks]
16633         ldrh    w0, [x0]
16634         ldrh    w1, [x1]
16635         add     w0, w0, w0, lsl 1
16636         cmp     w1, w0, lsr 2
16637         ble     .L2250
16638         adrp    x0, :got:g_gc_superblock
16639         mov     w1, -1
16640         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
16641         strh    w1, [x0]
16642         adrp    x0, :got:g_gc_free_blk_threshold
16643         mov     w1, 20
16644         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
16645 .L2251:
16646         strh    w1, [x0]
16647 .L2250:
16648         mov     w0, 0
16649 .L2231:
16650         ldp     x19, x20, [sp,16]
16651         ldp     x21, x22, [sp,32]
16652         ldp     x23, x24, [sp,48]
16653         ldp     x25, x26, [sp,64]
16654         ldp     x27, x28, [sp,80]
16655         ldp     x29, x30, [sp], 112
16656         ret
16657         .size   FtlGcFreeTempBlock, .-FtlGcFreeTempBlock
16658         .align  2
16659         .global FtlGcPageRecovery
16660         .type   FtlGcPageRecovery, %function
16661 FtlGcPageRecovery:
16662         stp     x29, x30, [sp, -32]!
16663         add     x29, sp, 0
16664         stp     x19, x20, [sp,16]
16665         adrp    x19, :got:c_ftl_nand_page_pre_blk
16666         adrp    x20, :got:g_gc_temp_superblock
16667         ldr     x19, [x19, #:got_lo12:c_ftl_nand_page_pre_blk]
16668         ldr     x20, [x20, #:got_lo12:g_gc_temp_superblock]
16669         ldrh    w1, [x19]
16670         mov     x0, x20
16671         bl      FtlGcScanTempBlk
16672         ldrh    w1, [x20,2]
16673         ldrh    w0, [x19]
16674         cmp     w1, w0
16675         bcc     .L2253
16676         adrp    x0, :got:gL2pMapInfo
16677         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
16678         bl      FtlMapBlkWriteDumpData
16679         mov     w0, 0
16680         bl      FtlGcFreeTempBlock
16681         adrp    x0, :got:ftl_gc_temp_power_lost_recovery_flag
16682         ldr     x0, [x0, #:got_lo12:ftl_gc_temp_power_lost_recovery_flag]
16683         str     wzr, [x0]
16684 .L2253:
16685         ldp     x19, x20, [sp,16]
16686         ldp     x29, x30, [sp], 32
16687         ret
16688         .size   FtlGcPageRecovery, .-FtlGcPageRecovery
16689         .align  2
16690         .global FtlPowerLostRecovery
16691         .type   FtlPowerLostRecovery, %function
16692 FtlPowerLostRecovery:
16693         adrp    x0, :got:g_power_lost_recovery_flag
16694         stp     x29, x30, [sp, -32]!
16695         add     x29, sp, 0
16696         ldr     x0, [x0, #:got_lo12:g_power_lost_recovery_flag]
16697         str     x19, [sp,16]
16698         adrp    x19, :got:g_active_superblock
16699         strh    wzr, [x0]
16700         adrp    x0, :got:g_recovery_page_num
16701         ldr     x0, [x0, #:got_lo12:g_recovery_page_num]
16702         str     wzr, [x0]
16703         ldr     x19, [x19, #:got_lo12:g_active_superblock]
16704         mov     x0, x19
16705         bl      FtlRecoverySuperblock
16706         mov     x0, x19
16707         adrp    x19, :got:g_buffer_superblock
16708         bl      FtlSlcSuperblockCheck
16709         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
16710         mov     x0, x19
16711         bl      FtlRecoverySuperblock
16712         mov     x0, x19
16713         bl      FtlSlcSuperblockCheck
16714         bl      FtlGcPageRecovery
16715         mov     w0, -1
16716         bl      decrement_vpc_count
16717         ldr     x19, [sp,16]
16718         mov     w0, 0
16719         ldp     x29, x30, [sp], 32
16720         ret
16721         .size   FtlPowerLostRecovery, .-FtlPowerLostRecovery
16722         .align  2
16723         .global Ftl_gc_temp_data_write_back
16724         .type   Ftl_gc_temp_data_write_back, %function
16725 Ftl_gc_temp_data_write_back:
16726         stp     x29, x30, [sp, -64]!
16727         mov     w2, 0
16728         add     x29, sp, 0
16729         stp     x19, x20, [sp,16]
16730         stp     x21, x22, [sp,32]
16731         adrp    x19, :got:req_gc_dst
16732         adrp    x21, :got:g_gc_num_req
16733         str     x23, [sp,48]
16734         mov     w3, w2
16735         mov     w20, 0
16736         mov     w23, 56
16737         ldr     x0, [x19, #:got_lo12:req_gc_dst]
16738         ldr     x1, [x21, #:got_lo12:g_gc_num_req]
16739         ldr     x0, [x0]
16740         ldr     w1, [x1]
16741         bl      FlashProgPages
16742 .L2257:
16743         ldr     x22, [x21, #:got_lo12:g_gc_num_req]
16744         ldr     w1, [x22]
16745         cmp     w20, w1
16746         bcs     .L2263
16747         ldr     x3, [x19, #:got_lo12:req_gc_dst]
16748         umull   x0, w20, w23
16749         ldr     x2, [x3]
16750         add     x1, x2, x0
16751         ldr     w4, [x2,x0]
16752         cmn     w4, #1
16753         bne     .L2258
16754         adrp    x1, :got:g_gc_temp_superblock
16755         adrp    x2, :got:p_valid_page_count_table
16756         ldr     x1, [x1, #:got_lo12:g_gc_temp_superblock]
16757         ldr     x2, [x2, #:got_lo12:p_valid_page_count_table]
16758         ldrh    w5, [x1]
16759         ldr     x2, [x2]
16760         strh    wzr, [x2,x5,lsl 1]
16761         strh    w4, [x1]
16762         adrp    x1, :got:g_sys_ext_data
16763         ldr     x1, [x1, #:got_lo12:g_sys_ext_data]
16764         ldr     w2, [x1,96]
16765         add     w2, w2, 1
16766         str     w2, [x1,96]
16767         ldr     x1, [x3]
16768         add     x0, x1, x0
16769         ldr     w0, [x0,4]
16770         lsr     w0, w0, 10
16771         bl      FtlBbmMapBadBlock
16772         bl      FtlBbmTblFlush
16773         bl      FtlGcPageVarInit
16774         b       .L2262
16775 .L2258:
16776         ldr     x2, [x1,16]
16777         add     w20, w20, 1
16778         ldr     w1, [x1,4]
16779         uxth    w20, w20
16780         ldr     w0, [x2,12]
16781         ldr     w2, [x2,8]
16782         bl      FtlGcUpdatePage
16783         b       .L2257
16784 .L2263:
16785         ldr     x19, [x19, #:got_lo12:req_gc_dst]
16786         ldr     x0, [x19]
16787         bl      FtlGcBufFree
16788         str     wzr, [x22]
16789         adrp    x0, :got:g_gc_temp_superblock
16790         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
16791         ldrh    w1, [x0,4]
16792         mov     w0, 0
16793         cbnz    w1, .L2259
16794         mov     w0, 1
16795         bl      FtlGcFreeTempBlock
16796 .L2262:
16797         mov     w0, 1
16798 .L2259:
16799         ldp     x19, x20, [sp,16]
16800         ldp     x21, x22, [sp,32]
16801         ldr     x23, [sp,48]
16802         ldp     x29, x30, [sp], 64
16803         ret
16804         .size   Ftl_gc_temp_data_write_back, .-Ftl_gc_temp_data_write_back
16805         .align  2
16806         .global FtlSysBlkInit
16807         .type   FtlSysBlkInit, %function
16808 FtlSysBlkInit:
16809         adrp    x0, :got:c_ftl_nand_max_sys_blks
16810         stp     x29, x30, [sp, -48]!
16811         add     x29, sp, 0
16812         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_sys_blks]
16813         stp     x19, x20, [sp,16]
16814         stp     x21, x22, [sp,32]
16815         ldrh    w0, [x0]
16816         bl      FtlFreeSysBlkQueueInit
16817         bl      FtlScanSysBlk
16818         adrp    x0, :got:gSysInfo
16819         ldr     x0, [x0, #:got_lo12:gSysInfo]
16820         ldrh    w1, [x0]
16821         mov     w0, 65535
16822         cmp     w1, w0
16823         bne     .L2265
16824 .L2267:
16825         mov     w22, -1
16826         b       .L2266
16827 .L2265:
16828         bl      FtlLoadSysInfo
16829         mov     w22, w0
16830         cbnz    w0, .L2267
16831         bl      FtlLoadMapInfo
16832         bl      FtlLoadVonderInfo
16833         bl      Ftl_load_ext_data
16834         bl      FtlLoadEctTbl
16835         bl      FtlFreeSysBLkSort
16836         bl      SupperBlkListInit
16837         bl      FtlPowerLostRecovery
16838         adrp    x0, :got:c_ftl_nand_l2pmap_ram_region_num
16839         mov     x1, 0
16840         ldr     x0, [x0, #:got_lo12:c_ftl_nand_l2pmap_ram_region_num]
16841         ldrh    w2, [x0]
16842         adrp    x0, :got:p_l2p_ram_map
16843         ldr     x0, [x0, #:got_lo12:p_l2p_ram_map]
16844         ldr     x0, [x0]
16845 .L2268:
16846         cmp     w1, w2
16847         mov     w3, w1
16848         bge     .L2272
16849         add     x4, x0, x1, lsl 4
16850         add     x1, x1, 1
16851         ldr     w4, [x4,4]
16852         tbz     w4, #31, .L2268
16853 .L2272:
16854         adrp    x19, :got:g_sys_save_data
16855         cmp     w3, w2
16856         adrp    x20, :got:g_active_superblock
16857         ldr     x1, [x19, #:got_lo12:g_sys_save_data]
16858         ldrh    w0, [x1,28]
16859         add     w0, w0, 1
16860         strh    w0, [x1,28]
16861         blt     .L2269
16862         adrp    x0, :got:g_power_lost_recovery_flag
16863         ldr     x0, [x0, #:got_lo12:g_power_lost_recovery_flag]
16864         ldrh    w0, [x0]
16865         cbz     w0, .L2273
16866 .L2269:
16867         adrp    x3, :got:p_valid_page_count_table
16868         ldr     x1, [x20, #:got_lo12:g_active_superblock]
16869         ldr     x3, [x3, #:got_lo12:p_valid_page_count_table]
16870         ldrh    w0, [x1]
16871         ldrh    w5, [x1,4]
16872         ldr     x4, [x3]
16873         lsl     x0, x0, 1
16874         ldrh    w2, [x4,x0]
16875         sub     w2, w2, w5
16876         strh    w2, [x4,x0]
16877         adrp    x0, :got:c_ftl_nand_page_pre_blk
16878         ldr     x4, [x3]
16879         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
16880         strh    wzr, [x1,4]
16881         strb    wzr, [x1,6]
16882         ldrh    w2, [x0]
16883         strh    w2, [x1,2]
16884         adrp    x1, :got:g_buffer_superblock
16885         ldr     x1, [x1, #:got_lo12:g_buffer_superblock]
16886         ldrh    w2, [x1]
16887         ldrh    w5, [x1,4]
16888         lsl     x2, x2, 1
16889         ldrh    w3, [x4,x2]
16890         sub     w3, w3, w5
16891         strh    w3, [x4,x2]
16892         strb    wzr, [x1,6]
16893         ldrh    w0, [x0]
16894         strh    w0, [x1,2]
16895         adrp    x0, :got:gL2pMapInfo
16896         strh    wzr, [x1,4]
16897         ldr     x0, [x0, #:got_lo12:gL2pMapInfo]
16898         bl      FtlMapBlkWriteDumpData
16899         adrp    x0, :got:gVendorBlkInfo
16900         ldr     x0, [x0, #:got_lo12:gVendorBlkInfo]
16901         bl      FtlMapBlkWriteDumpData
16902         ldr     x1, [x19, #:got_lo12:g_sys_save_data]
16903         ldrh    w0, [x1,30]
16904         add     w0, w0, 1
16905         strh    w0, [x1,30]
16906         bl      l2p_flush
16907         bl      FtlVpcTblFlush
16908 .L2273:
16909         mov     w0, 1
16910         bl      FtlUpdateVaildLpn
16911         ldr     x20, [x20, #:got_lo12:g_active_superblock]
16912         mov     w1, 65535
16913         ldrh    w0, [x20]
16914         cmp     w0, w1
16915         beq     .L2274
16916         ldrh    w1, [x20,4]
16917         cbnz    w1, .L2274
16918         adrp    x21, :got:g_buffer_superblock
16919         ldr     x21, [x21, #:got_lo12:g_buffer_superblock]
16920         ldrh    w1, [x21,4]
16921         cbnz    w1, .L2274
16922         bl      FtlGcRefreshBlock
16923         ldrh    w0, [x21]
16924         bl      FtlGcRefreshBlock
16925         mov     x0, x20
16926         bl      allocate_new_data_superblock
16927         mov     x0, x21
16928         bl      allocate_new_data_superblock
16929         adrp    x0, :got:gVendorBlkInfo
16930         ldr     x0, [x0, #:got_lo12:gVendorBlkInfo]
16931         bl      FtlMapBlkWriteDumpData
16932 .L2274:
16933         ldr     x19, [x19, #:got_lo12:g_sys_save_data]
16934         ldrh    w0, [x19,28]
16935         and     w0, w0, 31
16936         cbnz    w0, .L2266
16937         bl      FtlVpcCheckAndModify
16938 .L2266:
16939         mov     w0, w22
16940         ldp     x19, x20, [sp,16]
16941         ldp     x21, x22, [sp,32]
16942         ldp     x29, x30, [sp], 48
16943         ret
16944         .size   FtlSysBlkInit, .-FtlSysBlkInit
16945         .align  2
16946         .global FtlInit
16947         .type   FtlInit, %function
16948 FtlInit:
16949         stp     x29, x30, [sp, -32]!
16950         adrp    x1, :got:g_LowFormat
16951         add     x29, sp, 0
16952         stp     x19, x20, [sp,16]
16953         adrp    x19, :got:gFtlInitStatus
16954         mov     x20, x0
16955         mov     w0, -1
16956         ldr     x19, [x19, #:got_lo12:gFtlInitStatus]
16957         str     w0, [x19]
16958         adrp    x0, .LC72
16959         add     x0, x0, :lo12:.LC72
16960         ldr     x1, [x1, #:got_lo12:g_LowFormat]
16961         str     wzr, [x1]
16962         adrp    x1, .LC73
16963         add     x1, x1, :lo12:.LC73
16964         bl      printk
16965         mov     x0, x20
16966         bl      FtlConstantsInit
16967         bl      FtlMemInit
16968         bl      FtlVariablesInit
16969         adrp    x0, :got:c_ftl_nand_max_sys_blks
16970         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_sys_blks]
16971         ldrh    w0, [x0]
16972         bl      FtlFreeSysBlkQueueInit
16973         bl      FtlLoadBbt
16974         cbnz    w0, .L2282
16975         bl      FtlSysBlkInit
16976         cbnz    w0, .L2282
16977         mov     w0, 1
16978         str     w0, [x19]
16979 .L2282:
16980         mov     w0, 0
16981         ldp     x19, x20, [sp,16]
16982         ldp     x29, x30, [sp], 32
16983         ret
16984         .size   FtlInit, .-FtlInit
16985         .align  2
16986         .global rk_ftl_init
16987         .type   rk_ftl_init, %function
16988 rk_ftl_init:
16989         stp     x29, x30, [sp, -32]!
16990         mov     w0, 2048
16991         add     x29, sp, 0
16992         stp     x19, x20, [sp,16]
16993         adrp    x20, :got:gLoaderBootInfo
16994         bl      ftl_malloc
16995         adrp    x19, :got:RK29_NANDC_REG_BASE
16996         adrp    x1, :got:RK29_NANDC1_REG_BASE
16997         ldr     x20, [x20, #:got_lo12:gLoaderBootInfo]
16998         str     x0, [x20]
16999         ldr     x19, [x19, #:got_lo12:RK29_NANDC_REG_BASE]
17000         mov     x0, x19
17001         str     xzr, [x19]
17002         ldr     x1, [x1, #:got_lo12:RK29_NANDC1_REG_BASE]
17003         str     xzr, [x1]
17004         bl      rknand_get_reg_addr
17005         ldr     x1, [x19]
17006         mov     w0, -1
17007         cbz     x1, .L2285
17008         bl      rk_nandc_irq_init
17009         mov     w1, 0
17010         ldr     x0, [x20]
17011         mov     w2, w1
17012         mov     w3, 2048
17013         bl      FlashSramLoadStore
17014         bl      rknand_flash_cs_init
17015         ldr     x0, [x19]
17016         bl      FlashInit
17017         mov     w19, w0
17018         cbnz    w0, .L2286
17019         adrp    x0, :got:gNandPhyInfo
17020         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
17021         bl      FtlInit
17022 .L2286:
17023         adrp    x0, .LC114
17024         mov     w1, w19
17025         add     x0, x0, :lo12:.LC114
17026         bl      printk
17027         mov     w0, w19
17028 .L2285:
17029         ldp     x19, x20, [sp,16]
17030         ldp     x29, x30, [sp], 32
17031         ret
17032         .size   rk_ftl_init, .-rk_ftl_init
17033         .align  2
17034         .global Ftl_get_new_temp_ppa
17035         .type   Ftl_get_new_temp_ppa, %function
17036 Ftl_get_new_temp_ppa:
17037         stp     x29, x30, [sp, -32]!
17038         mov     w1, 65535
17039         add     x29, sp, 0
17040         str     x19, [sp,16]
17041         adrp    x19, :got:g_gc_temp_superblock
17042         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
17043         ldrh    w2, [x0]
17044         cmp     w2, w1
17045         beq     .L2290
17046         ldrh    w0, [x0,4]
17047         cbnz    w0, .L2291
17048 .L2290:
17049         bl      FtlCacheWriteBack
17050         mov     w0, 0
17051         bl      FtlGcFreeTempBlock
17052         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
17053         strb    wzr, [x0,8]
17054         bl      allocate_data_superblock
17055         adrp    x0, :got:g_gc_blk_num
17056         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
17057         strh    wzr, [x0]
17058         adrp    x0, :got:g_gc_page_offset
17059         ldr     x0, [x0, #:got_lo12:g_gc_page_offset]
17060         strh    wzr, [x0]
17061         bl      l2p_flush
17062         bl      FtlVpcTblFlush
17063         mov     w0, 0
17064         bl      FtlEctTblFlush
17065 .L2291:
17066         ldr     x0, [x19, #:got_lo12:g_gc_temp_superblock]
17067         bl      get_new_active_ppa
17068         ldr     x19, [sp,16]
17069         ldp     x29, x30, [sp], 32
17070         ret
17071         .size   Ftl_get_new_temp_ppa, .-Ftl_get_new_temp_ppa
17072         .align  2
17073         .global rk_ftl_garbage_collect
17074         .type   rk_ftl_garbage_collect, %function
17075 rk_ftl_garbage_collect:
17076         stp     x29, x30, [sp, -160]!
17077         add     x29, sp, 0
17078         stp     x21, x22, [sp,32]
17079         adrp    x22, :got:g_in_gc_progress
17080         stp     x19, x20, [sp,16]
17081         stp     x23, x24, [sp,48]
17082         ldr     x2, [x22, #:got_lo12:g_in_gc_progress]
17083         stp     x25, x26, [sp,64]
17084         stp     x27, x28, [sp,80]
17085         ldr     w3, [x2]
17086         mov     w2, 0
17087         cbnz    w3, .L2419
17088         mov     w24, w0
17089         adrp    x0, .LANCHOR2+128
17090         mov     w23, w1
17091         mov     w1, 65535
17092         ldrh    w0, [x0,#:lo12:.LANCHOR2+128]
17093         cmp     w0, w1
17094         bne     .L2294
17095 .L2297:
17096         adrp    x0, :got:g_gc_next_blk_1
17097         mov     w3, 65535
17098         ldr     x0, [x0, #:got_lo12:g_gc_next_blk_1]
17099         ldrh    w2, [x0]
17100         cmp     w2, w3
17101         bne     .L2295
17102         b       .L2296
17103 .L2294:
17104         adrp    x0, :got:g_gc_temp_superblock
17105         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
17106         ldrh    w0, [x0]
17107         cmp     w0, w1
17108         beq     .L2297
17109         mov     w0, 1
17110         bl      FtlGcFreeTempBlock
17111         mov     w2, 1
17112         cbz     w0, .L2297
17113         b       .L2419
17114 .L2295:
17115         adrp    x1, :got:g_gc_next_blk
17116         ldr     x1, [x1, #:got_lo12:g_gc_next_blk]
17117         ldrh    w4, [x1]
17118         cmp     w4, w3
17119         bne     .L2296
17120         strh    w2, [x1]
17121         mov     w1, -1
17122         strh    w1, [x0]
17123 .L2296:
17124         adrp    x26, :got:g_gc_skip_write_count
17125         cmp     w24, 1
17126         adrp    x19, :got:g_gc_superblock
17127         ldr     x20, [x26, #:got_lo12:g_gc_skip_write_count]
17128         ldr     w0, [x20]
17129         add     w0, w0, 1
17130         add     w0, w0, w24, lsl 7
17131         str     w0, [x20]
17132         beq     .L2298
17133 .L2300:
17134         mov     w21, 65535
17135         b       .L2299
17136 .L2298:
17137         adrp    x1, :got:g_inkDie_check_enable
17138         ldr     x1, [x1, #:got_lo12:g_inkDie_check_enable]
17139         ldr     w1, [x1]
17140         cbz     w1, .L2300
17141         adrp    x27, :got:g_min_erase_count
17142         ldr     x27, [x27, #:got_lo12:g_min_erase_count]
17143         ldr     w1, [x27]
17144         cmp     w1, 29
17145         bhi     .L2300
17146         adrp    x25, :got:gc_ink_free_return_value
17147         ldr     x21, [x25, #:got_lo12:gc_ink_free_return_value]
17148         ldrh    w1, [x21]
17149         add     w0, w0, w1
17150         str     w0, [x20]
17151         bl      FtlGcReFreshBadBlk
17152         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17153         ldrh    w1, [x0]
17154         mov     w0, 65535
17155         cmp     w1, w0
17156         bne     .L2300
17157         adrp    x0, :got:g_gc_next_blk
17158         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
17159         ldrh    w0, [x0]
17160         cmp     w0, w1
17161         bne     .L2300
17162         ldr     w0, [x20]
17163         cmp     w0, 1024
17164         bls     .L2300
17165         ldr     w0, [x27]
17166         str     wzr, [x20]
17167         strh    wzr, [x21]
17168         cbnz    w0, .L2301
17169         mov     w0, 6
17170         b       .L2438
17171 .L2301:
17172         cmp     w0, 5
17173         bhi     .L2302
17174         mov     w0, 18
17175 .L2438:
17176         strh    w0, [x21]
17177 .L2302:
17178         mov     w0, 32
17179         bl      List_get_gc_head_node
17180         uxth    w28, w0
17181         mov     w3, 65535
17182         cmp     w28, w3
17183         beq     .L2306
17184         adrp    x20, :got:g_gc_blk_index
17185         ldr     x20, [x20, #:got_lo12:g_gc_blk_index]
17186         ldrh    w0, [x20]
17187         cbz     w0, .L2304
17188         adrp    x27, :got:p_valid_page_count_table
17189         ubfiz   x28, x28, 1, 16
17190         adrp    x2, :got:c_ftl_nand_planes_num
17191         ldr     x27, [x27, #:got_lo12:p_valid_page_count_table]
17192         ldr     x2, [x2, #:got_lo12:c_ftl_nand_planes_num]
17193         ldr     x1, [x27]
17194         ldrh    w2, [x2]
17195         ldrh    w4, [x1,x28]
17196         adrp    x1, :got:c_ftl_nand_page_pre_slc_blk
17197         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
17198         ldrh    w1, [x1]
17199         mul     w1, w1, w2
17200         add     w1, w1, 1
17201         cmp     w4, w1
17202         bgt     .L2306
17203         adrp    x1, :got:g_in_swl_replace
17204         str     x3, [x29,136]
17205         ldr     x1, [x1, #:got_lo12:g_in_swl_replace]
17206         str     wzr, [x1]
17207         add     w1, w0, 1
17208         strh    w1, [x20]
17209         bl      List_get_gc_head_node
17210         uxth    w21, w0
17211         ldr     x3, [x29,136]
17212         cmp     w21, w3
17213         beq     .L2306
17214         ubfiz   x5, x21, 1, 16
17215         ldr     x4, [x27]
17216         adrp    x0, .LC115
17217         ldrh    w1, [x20]
17218         add     x0, x0, :lo12:.LC115
17219         mov     w2, w21
17220         ldrh    w3, [x4,x5]
17221         ldrh    w4, [x4,x28]
17222         str     x5, [x29,136]
17223         bl      printk
17224         ldrh    w0, [x20]
17225         ldr     x5, [x29,136]
17226         cmp     w0, 40
17227         bls     .L2305
17228         ldr     x0, [x27]
17229         ldrh    w0, [x0,x5]
17230         cmp     w0, 32
17231         bls     .L2305
17232         strh    wzr, [x20]
17233 .L2305:
17234         ldr     x25, [x25, #:got_lo12:gc_ink_free_return_value]
17235         mov     w0, 6
17236         strh    w0, [x25]
17237         b       .L2299
17238 .L2304:
17239         mov     w0, 1
17240         strh    w0, [x20]
17241 .L2306:
17242         bl      GetSwlReplaceBlock
17243         uxth    w21, w0
17244         mov     w0, 65535
17245         cmp     w21, w0
17246         bne     .L2299
17247         ldr     x25, [x25, #:got_lo12:gc_ink_free_return_value]
17248         strh    wzr, [x25]
17249 .L2299:
17250         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17251         ldrh    w2, [x0]
17252         mov     w0, 65535
17253         cmp     w2, w0
17254         bne     .L2307
17255         adrp    x0, :got:g_gc_temp_superblock
17256         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
17257         ldrh    w1, [x0]
17258         cmp     w1, w2
17259         bne     .L2307
17260         adrp    x0, :got:g_gc_next_blk
17261         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
17262         ldrh    w20, [x0]
17263         cmp     w20, w1
17264         bne     .L2307
17265         adrp    x25, :got:g_num_free_superblocks
17266         ldr     x26, [x26, #:got_lo12:g_gc_skip_write_count]
17267         mov     w2, 1024
17268         ldr     x27, [x25, #:got_lo12:g_num_free_superblocks]
17269         ldr     w1, [x26]
17270         ldrh    w0, [x27]
17271         cmp     w0, 24
17272         mov     w0, 5120
17273         csel    w0, w0, w2, cc
17274         cmp     w1, w0
17275         bls     .L2307
17276         adrp    x0, :got:gc_ink_free_return_value
17277         str     wzr, [x26]
17278         ldr     x0, [x0, #:got_lo12:gc_ink_free_return_value]
17279         strh    wzr, [x0]
17280         bl      GetSwlReplaceBlock
17281         uxth    w21, w0
17282         cmp     w21, w20
17283         bne     .L2309
17284         adrp    x20, :got:g_gc_merge_free_blk_threshold
17285         ldrh    w1, [x27]
17286         ldr     x26, [x20, #:got_lo12:g_gc_merge_free_blk_threshold]
17287         ldrh    w0, [x26]
17288         cmp     w1, w0
17289         bcs     .L2310
17290         mov     w0, 64
17291         bl      List_get_gc_head_node
17292         uxth    w0, w0
17293         cmp     w0, w21
17294         beq     .L2319
17295         adrp    x1, :got:g_SlcPartLbaEndSector
17296         adrp    x4, :got:c_ftl_nand_type
17297         uxtw    x2, w0
17298         ldr     x1, [x1, #:got_lo12:g_SlcPartLbaEndSector]
17299         ldr     w3, [x1]
17300         adrp    x1, :got:p_valid_page_count_table
17301         cbnz    w3, .L2312
17302         ldr     x0, [x4, #:got_lo12:c_ftl_nand_type]
17303         ldrh    w0, [x0]
17304         cmp     w0, 3
17305         beq     .L2312
17306         adrp    x0, :got:g_all_blk_used_slc_mode
17307         ldr     x0, [x0, #:got_lo12:g_all_blk_used_slc_mode]
17308         ldr     w0, [x0]
17309         cbnz    w0, .L2312
17310         adrp    x0, :got:g_inkDie_check_enable
17311         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
17312         ldr     w0, [x0]
17313         cbz     w0, .L2313
17314 .L2312:
17315         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17316         ldr     x0, [x1]
17317         ldrh    w5, [x0,x2,lsl 1]
17318         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
17319         ldr     x2, [x4, #:got_lo12:c_ftl_nand_type]
17320         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
17321         ldrh    w2, [x2]
17322         ldrh    w1, [x0]
17323         adrp    x0, :got:c_ftl_nand_planes_num
17324         cmp     w2, 3
17325         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
17326         ldrh    w0, [x0]
17327         mul     w3, w1, w0
17328         mov     w0, 0
17329         lsr     w1, w1, 1
17330         csel    w0, w1, w0, eq
17331         add     w0, w3, w0
17332         cmp     w5, w0
17333         bgt     .L2315
17334         mov     w0, 0
17335         bl      List_get_gc_head_node
17336         uxth    w21, w0
17337         adrp    x0, :got:g_MaxLpn
17338         adrp    x1, :got:g_VaildLpn
17339         ldr     x20, [x20, #:got_lo12:g_gc_merge_free_blk_threshold]
17340         ldr     x0, [x0, #:got_lo12:g_MaxLpn]
17341         ldr     x1, [x1, #:got_lo12:g_VaildLpn]
17342         ldr     w0, [x0]
17343         ldr     w1, [x1]
17344         add     w0, w0, w0, lsl 1
17345         cmp     w1, w0, lsr 2
17346         bls     .L2316
17347         mov     w0, 128
17348         b       .L2439
17349 .L2316:
17350         mov     w0, 160
17351 .L2439:
17352         strh    w0, [x20]
17353         b       .L2317
17354 .L2315:
17355         ldr     x20, [x20, #:got_lo12:g_gc_merge_free_blk_threshold]
17356         mov     w0, 128
17357         strh    w0, [x20]
17358         b       .L2319
17359 .L2313:
17360         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17361         ldr     x1, [x1]
17362         ldrh    w1, [x1,x2,lsl 1]
17363         cmp     w1, 7
17364         bhi     .L2318
17365         bl      List_get_gc_head_node
17366         uxth    w21, w0
17367         mov     w0, 128
17368         strh    w0, [x26]
17369         b       .L2317
17370 .L2318:
17371         mov     w0, 64
17372         b       .L2440
17373 .L2310:
17374         mov     w0, 80
17375 .L2440:
17376         strh    w0, [x26]
17377         b       .L2319
17378 .L2317:
17379         mov     w0, 65535
17380         cmp     w21, w0
17381         beq     .L2319
17382 .L2309:
17383         adrp    x0, :got:p_valid_page_count_table
17384         adrp    x5, :got:g_gc_free_blk_threshold
17385         ubfiz   x4, x21, 1, 16
17386         ldr     x25, [x25, #:got_lo12:g_num_free_superblocks]
17387         mov     w1, w21
17388         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
17389         ldr     x5, [x5, #:got_lo12:g_gc_free_blk_threshold]
17390         ldrh    w2, [x25]
17391         ldr     x3, [x0]
17392         adrp    x0, :got:p_erase_count_table
17393         ldrh    w5, [x5]
17394         ldr     x0, [x0, #:got_lo12:p_erase_count_table]
17395         ldrh    w3, [x3,x4]
17396         ldr     x6, [x0]
17397         adrp    x0, .LC116
17398         add     x0, x0, :lo12:.LC116
17399         ldrh    w4, [x6,x4]
17400         bl      printk
17401 .L2319:
17402         bl      FtlGcReFreshBadBlk
17403 .L2307:
17404         mov     w0, 65535
17405         cmp     w21, w0
17406         cset    w1, eq
17407         cbz     w1, .L2320
17408         cbnz    w24, .L2320
17409         adrp    x0, :got:g_num_free_superblocks
17410         mov     w20, 1
17411         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
17412         ldrh    w1, [x0]
17413         cmp     w1, 24
17414         bhi     .L2321
17415         adrp    x0, :got:c_ftl_nand_page_pre_blk
17416         cmp     w1, 16
17417         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17418         ldrh    w20, [x0]
17419         bls     .L2322
17420         lsr     w20, w20, 5
17421         b       .L2321
17422 .L2322:
17423         cmp     w1, 12
17424         bls     .L2323
17425         lsr     w20, w20, 4
17426         b       .L2321
17427 .L2323:
17428         cmp     w1, 8
17429         bls     .L2321
17430         lsr     w20, w20, 2
17431 .L2321:
17432         adrp    x0, :got:g_gc_free_blk_threshold
17433         ldr     x4, [x0, #:got_lo12:g_gc_free_blk_threshold]
17434         ldrh    w2, [x4]
17435         cmp     w2, w1
17436         bcs     .L2325
17437         adrp    x1, :got:g_gc_temp_superblock
17438         ldr     x1, [x1, #:got_lo12:g_gc_temp_superblock]
17439         ldrh    w2, [x1]
17440         mov     w1, 65535
17441         cmp     w2, w1
17442         bne     .L2326
17443         adrp    x1, :got:g_gc_next_blk
17444         ldr     x1, [x1, #:got_lo12:g_gc_next_blk]
17445         ldrh    w1, [x1]
17446         cmp     w1, w2
17447         bne     .L2326
17448         adrp    x1, :got:gc_ink_free_return_value
17449         ldr     x1, [x1, #:got_lo12:gc_ink_free_return_value]
17450         ldrh    w2, [x1]
17451         cbnz    w2, .L2327
17452         adrp    x1, :got:g_MaxLpn
17453         adrp    x3, :got:g_VaildLpn
17454         ldr     x1, [x1, #:got_lo12:g_MaxLpn]
17455         ldr     x3, [x3, #:got_lo12:g_VaildLpn]
17456         ldr     w1, [x1]
17457         ldr     w3, [x3]
17458         add     w1, w1, w1, lsl 1
17459         cmp     w3, w1, lsr 2
17460         bcs     .L2328
17461 .L2327:
17462         adrp    x1, :got:c_ftl_nand_data_op_blks_per_plane
17463         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
17464         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17465         ldrh    w1, [x1]
17466         add     w1, w1, w1, lsl 1
17467         asr     w1, w1, 2
17468         strh    w1, [x0]
17469         b       .L2329
17470 .L2328:
17471         mov     w0, 18
17472         strh    w0, [x4]
17473 .L2329:
17474         adrp    x0, :got:g_in_swl_replace
17475         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
17476         str     wzr, [x0]
17477         b       .L2419
17478 .L2326:
17479         adrp    x1, :got:c_ftl_nand_data_op_blks_per_plane
17480         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
17481         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17482         ldrh    w1, [x1]
17483         add     w1, w1, w1, lsl 1
17484         asr     w1, w1, 2
17485         strh    w1, [x0]
17486 .L2325:
17487         cmp     w23, 2
17488         bhi     .L2380
17489         adrp    x0, :got:g_inkDie_check_enable
17490         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
17491         ldr     w0, [x0]
17492         cbz     w0, .L2380
17493         add     w20, w20, 1
17494         uxth    w20, w20
17495         b       .L2380
17496 .L2320:
17497         adrp    x0, :got:g_gc_temp_superblock
17498         mov     w2, 65535
17499         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
17500         ldrh    w0, [x0]
17501         cmp     w0, w2
17502         bne     .L2332
17503         cbz     w1, .L2332
17504         adrp    x1, :got:g_gc_next_blk
17505         ldr     x1, [x1, #:got_lo12:g_gc_next_blk]
17506         ldrh    w1, [x1]
17507         cmp     w1, w0
17508         bne     .L2332
17509         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17510         ldrh    w1, [x1]
17511         cmp     w1, w0
17512         beq     .L2333
17513 .L2338:
17514         mov     w21, 65535
17515         b       .L2332
17516 .L2333:
17517         adrp    x0, :got:g_in_swl_replace
17518         adrp    x20, :got:g_num_free_superblocks
17519         adrp    x21, :got:gc_ink_free_return_value
17520         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
17521         str     wzr, [x0]
17522         adrp    x0, :got:g_gc_free_blk_threshold
17523         ldr     x24, [x20, #:got_lo12:g_num_free_superblocks]
17524         ldr     x2, [x0, #:got_lo12:g_gc_free_blk_threshold]
17525         ldrh    w3, [x24]
17526         ldrh    w1, [x2]
17527         cmp     w3, w1
17528         bls     .L2334
17529         ldr     x1, [x21, #:got_lo12:gc_ink_free_return_value]
17530         ldrh    w1, [x1]
17531         cbnz    w1, .L2335
17532         adrp    x1, :got:g_MaxLpn
17533         adrp    x3, :got:g_VaildLpn
17534         ldr     x1, [x1, #:got_lo12:g_MaxLpn]
17535         ldr     x3, [x3, #:got_lo12:g_VaildLpn]
17536         ldr     w1, [x1]
17537         ldr     w3, [x3]
17538         add     w1, w1, w1, lsl 1
17539         cmp     w3, w1, lsr 2
17540         bcs     .L2336
17541 .L2335:
17542         adrp    x1, :got:c_ftl_nand_data_op_blks_per_plane
17543         ldr     x0, [x0, #:got_lo12:g_gc_free_blk_threshold]
17544         ldr     x1, [x1, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17545         ldrh    w1, [x1]
17546         add     w1, w1, w1, lsl 1
17547         asr     w1, w1, 2
17548         strh    w1, [x0]
17549         b       .L2337
17550 .L2336:
17551         mov     w0, 18
17552         strh    w0, [x2]
17553 .L2337:
17554         bl      FtlReadRefresh
17555         ldr     x21, [x21, #:got_lo12:gc_ink_free_return_value]
17556         b       .L2441
17557 .L2334:
17558         ldr     x21, [x21, #:got_lo12:gc_ink_free_return_value]
17559         ldrh    w0, [x21]
17560         cbnz    w0, .L2338
17561         adrp    x23, :got:c_ftl_nand_data_op_blks_per_plane
17562         ldr     x23, [x23, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
17563         ldrh    w1, [x23]
17564         add     w1, w1, w1, lsl 1
17565         asr     w1, w1, 2
17566         strh    w1, [x2]
17567         bl      List_get_gc_head_node
17568         ubfiz   x0, x0, 1, 16
17569         adrp    x1, :got:p_valid_page_count_table
17570         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17571         ldr     x1, [x1]
17572         ldrh    w2, [x1,x0]
17573         adrp    x0, :got:c_ftl_nand_page_pre_slc_blk
17574         adrp    x1, :got:c_ftl_nand_planes_num
17575         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_slc_blk]
17576         ldr     x1, [x1, #:got_lo12:c_ftl_nand_planes_num]
17577         ldrh    w0, [x0]
17578         ldrh    w1, [x1]
17579         mul     w0, w0, w1
17580         mov     w1, 2
17581         sdiv    w0, w0, w1
17582         cmp     w2, w0
17583         ble     .L2339
17584         ldrh    w0, [x23]
17585         ldrh    w1, [x24]
17586         sub     w0, w0, #1
17587         cmp     w1, w0
17588         blt     .L2339
17589         bl      FtlReadRefresh
17590 .L2441:
17591         ldrh    w2, [x21]
17592         b       .L2419
17593 .L2339:
17594         cbnz    w2, .L2338
17595         mov     w0, -1
17596         bl      decrement_vpc_count
17597         ldr     x20, [x20, #:got_lo12:g_num_free_superblocks]
17598         ldrh    w2, [x20]
17599         add     w2, w2, 1
17600         b       .L2419
17601 .L2332:
17602         adrp    x0, :got:g_inkDie_check_enable
17603         mov     w20, 2
17604         ldr     x0, [x0, #:got_lo12:g_inkDie_check_enable]
17605         ldr     w0, [x0]
17606         cmp     w0, wzr
17607         csinc   w20, w20, wzr, ne
17608         b       .L2331
17609 .L2380:
17610         mov     w21, 65535
17611 .L2331:
17612         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17613         mov     w2, 65535
17614         ldrh    w0, [x1]
17615         cmp     w0, w2
17616         bne     .L2341
17617         cmp     w21, w0
17618         beq     .L2342
17619         strh    w21, [x1]
17620         b       .L2343
17621 .L2342:
17622         adrp    x0, :got:g_gc_next_blk
17623         ldr     x0, [x0, #:got_lo12:g_gc_next_blk]
17624         ldrh    w2, [x0]
17625         cmp     w2, w21
17626         beq     .L2343
17627         strh    w2, [x1]
17628         mov     w1, -1
17629         strh    w1, [x0]
17630 .L2343:
17631         ldr     x23, [x19, #:got_lo12:g_gc_superblock]
17632         ldrh    w0, [x23]
17633         bl      IsBlkInGcList
17634         cbz     w0, .L2344
17635         mov     w0, -1
17636         strh    w0, [x23]
17637 .L2344:
17638         ldr     x23, [x19, #:got_lo12:g_gc_superblock]
17639         mov     w0, 65535
17640         ldrh    w1, [x23]
17641         cmp     w1, w0
17642         beq     .L2341
17643         mov     x0, x23
17644         bl      make_superblock
17645         strh    wzr, [x23,2]
17646         adrp    x0, :got:g_gc_cur_blk_valid_pages
17647         strb    wzr, [x23,6]
17648         ldrh    w1, [x23]
17649         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17650         strh    wzr, [x0]
17651         adrp    x0, :got:p_valid_page_count_table
17652         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
17653         ldr     x0, [x0]
17654         ldrh    w1, [x0,x1,lsl 1]
17655         adrp    x0, :got:g_gc_cur_blk_max_valid_pages
17656         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_max_valid_pages]
17657         strh    w1, [x0]
17658 .L2341:
17659         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17660         ldrh    w1, [x0]
17661         adrp    x0, :got:g_active_superblock
17662         ldr     x0, [x0, #:got_lo12:g_active_superblock]
17663         ldrh    w0, [x0]
17664         cmp     w0, w1
17665         beq     .L2346
17666         adrp    x0, :got:g_buffer_superblock
17667         ldr     x0, [x0, #:got_lo12:g_buffer_superblock]
17668         ldrh    w0, [x0]
17669         cmp     w0, w1
17670         beq     .L2346
17671 .L2347:
17672         add     x0, x29, 156
17673         mov     w24, 65535
17674         str     x0, [x29,136]
17675         b       .L2348
17676 .L2346:
17677         ldr     x19, [x19, #:got_lo12:g_gc_superblock]
17678         mov     w0, -1
17679         strh    w0, [x19]
17680         b       .L2442
17681 .L2366:
17682         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17683         ldrh    w0, [x1,2]
17684         add     w20, w20, w0
17685         adrp    x0, :got:c_ftl_nand_page_pre_blk
17686         uxth    w20, w20
17687         strh    w20, [x1,2]
17688         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17689         ldrh    w0, [x0]
17690         cmp     w0, w20
17691         bls     .L2368
17692         adrp    x1, :got:g_gc_cur_blk_valid_pages
17693         adrp    x0, :got:g_gc_cur_blk_max_valid_pages
17694         ldr     x1, [x1, #:got_lo12:g_gc_cur_blk_valid_pages]
17695         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_max_valid_pages]
17696         ldrh    w1, [x1]
17697         ldrh    w0, [x0]
17698         cmp     w1, w0
17699         beq     .L2368
17700 .L2369:
17701         adrp    x0, :got:g_num_free_superblocks
17702         ldr     x0, [x0, #:got_lo12:g_num_free_superblocks]
17703         ldrh    w0, [x0]
17704         cmp     w0, 2
17705         bhi     .L2372
17706         adrp    x0, :got:c_ftl_nand_page_pre_blk
17707         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17708         ldrh    w20, [x0]
17709 .L2348:
17710         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17711         ldrh    w0, [x0]
17712         cmp     w0, w24
17713         bne     .L2349
17714         adrp    x0, :got:g_in_swl_replace
17715         adrp    x23, :got:c_ftl_nand_planes_num
17716         mov     w25, 2
17717         ldr     x0, [x0, #:got_lo12:g_in_swl_replace]
17718         str     wzr, [x0]
17719 .L2350:
17720         adrp    x0, :got:g_gc_blk_index
17721         adrp    x26, :got:g_gc_blk_index
17722         ldr     x27, [x0, #:got_lo12:g_gc_blk_index]
17723         ldrh    w0, [x27]
17724         bl      List_get_gc_head_node
17725         ldr     x28, [x19, #:got_lo12:g_gc_superblock]
17726         uxth    w0, w0
17727         cmp     w0, w24
17728         strh    w0, [x28]
17729         bne     .L2351
17730         strh    wzr, [x27]
17731         mov     w2, 8
17732         b       .L2419
17733 .L2351:
17734         bl      IsBlkInGcList
17735         cbz     w0, .L2352
17736         ldrh    w0, [x27]
17737         add     w0, w0, 1
17738         strh    w0, [x27]
17739         b       .L2350
17740 .L2352:
17741         ldrh    w0, [x27]
17742         adrp    x1, :got:p_valid_page_count_table
17743         ldrh    w2, [x28]
17744         add     w0, w0, 1
17745         lsl     x2, x2, 1
17746         uxth    w0, w0
17747         strh    w0, [x27]
17748         ldr     x1, [x1, #:got_lo12:p_valid_page_count_table]
17749         ldr     x5, [x23, #:got_lo12:c_ftl_nand_planes_num]
17750         ldr     x3, [x1]
17751         adrp    x1, :got:c_ftl_nand_page_pre_blk
17752         ldrh    w5, [x5]
17753         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
17754         ldrh    w4, [x3,x2]
17755         ldrh    w1, [x1]
17756         mul     w1, w1, w5
17757         sdiv    w5, w1, w25
17758         cmp     w4, w5
17759         bgt     .L2354
17760         cmp     w4, 8
17761         bls     .L2355
17762         cmp     w0, 48
17763         bls     .L2355
17764         adrp    x0, :got:g_gc_blk_num
17765         ldr     x0, [x0, #:got_lo12:g_gc_blk_num]
17766         ldrh    w0, [x0]
17767         cmp     w0, 35
17768         bhi     .L2355
17769 .L2354:
17770         ldr     x0, [x26, #:got_lo12:g_gc_blk_index]
17771         strh    wzr, [x0]
17772 .L2355:
17773         cmp     w21, w24
17774         ldrh    w0, [x3,x2]
17775         bne     .L2356
17776         cmp     w0, w1
17777         blt     .L2356
17778         ldr     x19, [x19, #:got_lo12:g_gc_superblock]
17779         mov     w0, -1
17780         strh    w0, [x19]
17781         ldr     x26, [x26, #:got_lo12:g_gc_blk_index]
17782         strh    wzr, [x26]
17783         b       .L2442
17784 .L2356:
17785         cbnz    w0, .L2357
17786         mov     w0, -1
17787         bl      decrement_vpc_count
17788         ldr     x26, [x26, #:got_lo12:g_gc_blk_index]
17789         ldrh    w0, [x26]
17790         add     w0, w0, 1
17791         strh    w0, [x26]
17792         b       .L2350
17793 .L2357:
17794         ldr     x23, [x19, #:got_lo12:g_gc_superblock]
17795         mov     x0, x23
17796         strb    wzr, [x23,8]
17797         bl      make_superblock
17798         adrp    x0, :got:g_gc_cur_blk_valid_pages
17799         ldrh    w1, [x23]
17800         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17801         strh    wzr, [x0]
17802         adrp    x0, :got:p_valid_page_count_table
17803         ldr     x0, [x0, #:got_lo12:p_valid_page_count_table]
17804         ldr     x0, [x0]
17805         ldrh    w1, [x0,x1,lsl 1]
17806         adrp    x0, :got:g_gc_cur_blk_max_valid_pages
17807         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_max_valid_pages]
17808         strh    wzr, [x23,2]
17809         strb    wzr, [x23,6]
17810         strh    w1, [x0]
17811 .L2349:
17812         bl      FtlReadRefresh
17813         ldr     x0, [x22, #:got_lo12:g_in_gc_progress]
17814         mov     w1, 1
17815         str     w1, [x0]
17816         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17817         ldrh    w1, [x0,2]
17818         adrp    x0, :got:c_ftl_nand_page_pre_blk
17819         add     w2, w1, w20
17820         ldr     x0, [x0, #:got_lo12:c_ftl_nand_page_pre_blk]
17821         ldrh    w0, [x0]
17822         cmp     w2, w0
17823         ble     .L2358
17824         sub     w20, w0, w1
17825         uxth    w20, w20
17826 .L2358:
17827         mov     w25, 0
17828 .L2359:
17829         cmp     w20, w25, uxth
17830         bls     .L2366
17831         adrp    x0, :got:c_ftl_nand_planes_num
17832         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
17833         ldrh    w4, [x0]
17834         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
17835         ldrh    w2, [x0,2]
17836         mov     x0, 0
17837         mov     w23, w0
17838         add     w2, w2, w25
17839 .L2367:
17840         cmp     w4, w0, uxth
17841         bls     .L2444
17842         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17843         add     x1, x1, x0, lsl 1
17844         ldrh    w1, [x1,16]
17845         cmp     w1, w24
17846         beq     .L2360
17847         adrp    x5, :got:req_gc
17848         mov     w3, 56
17849         orr     w1, w2, w1, lsl 10
17850         umull   x3, w23, w3
17851         ldr     x5, [x5, #:got_lo12:req_gc]
17852         add     w23, w23, 1
17853         uxth    w23, w23
17854         ldr     x5, [x5]
17855         add     x3, x5, x3
17856         str     w1, [x3,4]
17857 .L2360:
17858         add     x0, x0, 1
17859         b       .L2367
17860 .L2444:
17861         adrp    x0, :got:req_gc
17862         mov     w1, w23
17863         mov     w2, 0
17864         mov     x26, 0
17865         mov     x27, 56
17866         ldr     x0, [x0, #:got_lo12:req_gc]
17867         ldr     x0, [x0]
17868         bl      FlashReadPages
17869 .L2362:
17870         cmp     w23, w26, uxth
17871         bls     .L2445
17872         adrp    x0, :got:req_gc
17873         mul     x4, x26, x27
17874         ldr     x6, [x0, #:got_lo12:req_gc]
17875         ldr     x0, [x6]
17876         add     x1, x0, x4
17877         ldr     w0, [x0,x4]
17878         cmn     w0, #1
17879         ldr     x5, [x1,16]
17880         beq     .L2382
17881         ldrh    w0, [x5]
17882         mov     w1, 61589
17883         cmp     w0, w1
17884         bne     .L2382
17885         ldr     w0, [x5,8]
17886         mov     w2, 0
17887         ldr     x1, [x29,136]
17888         str     x6, [x29,112]
17889         str     x4, [x29,120]
17890         str     x5, [x29,128]
17891         bl      log2phys
17892         ldr     x6, [x29,112]
17893         ldr     x4, [x29,120]
17894         ldr     w1, [x29,156]
17895         ldr     x2, [x6]
17896         ldr     x5, [x29,128]
17897         add     x2, x2, x4
17898         ldr     w0, [x2,4]
17899         cmp     w1, w0
17900         bne     .L2382
17901         adrp    x0, :got:g_gc_cur_blk_valid_pages
17902         str     x6, [x29,96]
17903         str     x4, [x29,104]
17904         str     x5, [x29,112]
17905         ldr     x1, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17906         ldrh    w0, [x1]
17907         add     w0, w0, 1
17908         strh    w0, [x1]
17909         adrp    x0, :got:g_gc_num_req
17910         ldr     x28, [x0, #:got_lo12:g_gc_num_req]
17911         adrp    x0, :got:req_gc_dst
17912         ldr     x7, [x0, #:got_lo12:req_gc_dst]
17913         ldr     w0, [x28]
17914         str     x7, [x29,120]
17915         ldr     x1, [x7]
17916         madd    x1, x0, x27, x1
17917         ldr     w0, [x2,24]
17918         str     x1, [x29,128]
17919         str     w0, [x1,24]
17920         bl      Ftl_get_new_temp_ppa
17921         ldr     x1, [x29,128]
17922         ldr     x7, [x29,120]
17923         ldr     x6, [x29,96]
17924         str     w0, [x1,4]
17925         ldr     w0, [x28]
17926         ldr     x1, [x7]
17927         ldr     x4, [x29,104]
17928         ldr     x5, [x29,112]
17929         madd    x0, x0, x27, x1
17930         ldr     x1, [x6]
17931         add     x1, x1, x4
17932         ldr     x2, [x1,8]
17933         str     x2, [x0,8]
17934         adrp    x2, :got:g_gc_temp_superblock
17935         ldr     x1, [x1,16]
17936         str     x1, [x0,16]
17937         mov     w1, 1
17938         ldr     w0, [x29,156]
17939         str     w0, [x5,12]
17940         ldr     x2, [x2, #:got_lo12:g_gc_temp_superblock]
17941         str     x2, [x29,128]
17942         ldrh    w0, [x2]
17943         strh    w0, [x5,2]
17944         adrp    x0, :got:g_GlobalDataVersion
17945         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
17946         ldr     w0, [x0]
17947         str     w0, [x5,4]
17948         ldr     w0, [x28]
17949         add     w0, w0, 1
17950         str     w0, [x28]
17951         ldr     x0, [x6]
17952         add     x0, x0, x4
17953         bl      FtlGcBufAlloc
17954         ldr     x2, [x29,128]
17955         ldr     w1, [x28]
17956         ldrb    w0, [x2,7]
17957         cmp     w1, w0
17958         beq     .L2364
17959         ldrh    w0, [x2,4]
17960         cbnz    w0, .L2382
17961 .L2364:
17962         bl      Ftl_gc_temp_data_write_back
17963         cbnz    w0, .L2443
17964 .L2382:
17965         add     x26, x26, 1
17966         b       .L2362
17967 .L2445:
17968         add     w25, w25, 1
17969         b       .L2359
17970 .L2368:
17971         adrp    x0, :got:g_gc_num_req
17972         ldr     x0, [x0, #:got_lo12:g_gc_num_req]
17973         ldr     w0, [x0]
17974         cbz     w0, .L2370
17975         bl      Ftl_gc_temp_data_write_back
17976         cbz     w0, .L2370
17977 .L2443:
17978         ldr     x22, [x22, #:got_lo12:g_in_gc_progress]
17979         str     wzr, [x22]
17980 .L2442:
17981         adrp    x0, :got:gc_ink_free_return_value
17982         ldr     x0, [x0, #:got_lo12:gc_ink_free_return_value]
17983         ldrh    w2, [x0]
17984         b       .L2419
17985 .L2370:
17986         adrp    x0, :got:g_gc_cur_blk_valid_pages
17987         ldr     x0, [x0, #:got_lo12:g_gc_cur_blk_valid_pages]
17988         ldrh    w3, [x0]
17989         cbnz    w3, .L2371
17990         adrp    x0, :got:p_valid_page_count_table
17991         ldr     x1, [x19, #:got_lo12:g_gc_superblock]
17992         ldr     x2, [x0, #:got_lo12:p_valid_page_count_table]
17993         ldrh    w0, [x1]
17994         ldr     x2, [x2]
17995         lsl     x0, x0, 1
17996         ldrh    w4, [x2,x0]
17997         cbz     w4, .L2371
17998         strh    w3, [x2,x0]
17999         ldrh    w0, [x1]
18000         bl      update_vpc_list
18001         bl      FtlCacheWriteBack
18002         bl      l2p_flush
18003         bl      FtlVpcTblFlush
18004 .L2371:
18005         ldr     x0, [x19, #:got_lo12:g_gc_superblock]
18006         mov     w1, -1
18007         strh    w1, [x0]
18008         b       .L2369
18009 .L2372:
18010         ldr     x22, [x22, #:got_lo12:g_in_gc_progress]
18011         adrp    x1, :got:gc_ink_free_return_value
18012         str     wzr, [x22]
18013         ldr     x1, [x1, #:got_lo12:gc_ink_free_return_value]
18014         ldrh    w2, [x1]
18015         cmp     w2, wzr
18016         csinc   w2, w2, w0, ne
18017 .L2419:
18018         mov     w0, w2
18019         ldp     x19, x20, [sp,16]
18020         ldp     x21, x22, [sp,32]
18021         ldp     x23, x24, [sp,48]
18022         ldp     x25, x26, [sp,64]
18023         ldp     x27, x28, [sp,80]
18024         ldp     x29, x30, [sp], 160
18025         ret
18026         .size   rk_ftl_garbage_collect, .-rk_ftl_garbage_collect
18027         .align  2
18028         .global FtlRead
18029         .type   FtlRead, %function
18030 FtlRead:
18031         stp     x29, x30, [sp, -192]!
18032         uxtb    w0, w0
18033         add     x29, sp, 0
18034         stp     x19, x20, [sp,16]
18035         stp     x25, x26, [sp,64]
18036         stp     x27, x28, [sp,80]
18037         stp     x21, x22, [sp,32]
18038         stp     x23, x24, [sp,48]
18039         cmp     w0, 16
18040         mov     w19, w1
18041         mov     w28, w2
18042         mov     x25, x3
18043         bne     .L2447
18044         add     w0, w1, 256
18045         mov     w1, w2
18046         mov     x2, x3
18047         bl      FtlVendorPartRead
18048         b       .L2448
18049 .L2447:
18050         add     w0, w1, w2
18051         str     w0, [x29,172]
18052         adrp    x0, :got:g_MaxLbaSector
18053         ldr     w2, [x29,172]
18054         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
18055         ldr     w1, [x0]
18056         mov     w0, -1
18057         cmp     w2, w1
18058         bhi     .L2448
18059         adrp    x23, :got:c_ftl_nand_sec_pre_page
18060         sub     w24, w2, #1
18061         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18062         ldrh    w0, [x0]
18063         udiv    w27, w19, w0
18064         udiv    w24, w24, w0
18065         adrp    x0, :got:g_totle_read_sector
18066         sub     w22, w24, w27
18067         ldr     x0, [x0, #:got_lo12:g_totle_read_sector]
18068         add     w22, w22, 1
18069         ldr     w1, [x0]
18070         add     w1, w28, w1
18071         str     w1, [x0]
18072         adrp    x0, :got:g_totle_read_page_count
18073         ldr     x0, [x0, #:got_lo12:g_totle_read_page_count]
18074         ldr     w1, [x0]
18075         add     w1, w22, w1
18076         str     w1, [x0]
18077         mov     w0, w27
18078         mov     w1, w24
18079         bl      FtlCacheMetchLpa
18080         cbz     w0, .L2449
18081         bl      FtlCacheWriteBack
18082 .L2449:
18083         mov     w26, 0
18084         add     x0, x29, 188
18085         mov     w20, w27
18086         str     w26, [x29,168]
18087         mov     w21, w26
18088         str     w26, [x29,156]
18089         str     x0, [x29,112]
18090 .L2450:
18091         cbz     w22, .L2492
18092         ldr     x1, [x29,112]
18093         mov     w0, w20
18094         mov     w2, 0
18095         bl      log2phys
18096         ldr     w3, [x29,188]
18097         cmn     w3, #1
18098         bne     .L2489
18099         mov     w3, 0
18100 .L2451:
18101         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18102         ldrh    w0, [x0]
18103         cmp     w3, w0
18104         bcs     .L2455
18105         madd    w0, w20, w0, w3
18106         cmp     w0, w19
18107         bcc     .L2453
18108         ldr     w1, [x29,172]
18109         cmp     w0, w1
18110         bcs     .L2453
18111         sub     w0, w0, w19
18112         mov     w1, 0
18113         ubfiz   x0, x0, 9, 23
18114         mov     w2, 512
18115         add     x0, x25, x0
18116         str     x3, [x29,160]
18117         bl      ftl_memset
18118         ldr     x3, [x29,160]
18119 .L2453:
18120         add     w3, w3, 1
18121         b       .L2451
18122 .L2489:
18123         mov     w0, 56
18124         cmp     w20, w27
18125         umull   x1, w21, w0
18126         adrp    x0, :got:req_read
18127         ldr     x0, [x0, #:got_lo12:req_read]
18128         ldr     x2, [x0]
18129         add     x2, x2, x1
18130         str     w3, [x2,4]
18131         bne     .L2456
18132         adrp    x2, :got:p_io_data_buf_0
18133         ldr     x0, [x0]
18134         add     x0, x0, x1
18135         ldr     x2, [x2, #:got_lo12:p_io_data_buf_0]
18136         ldr     x2, [x2]
18137         str     x2, [x0,8]
18138         ldr     x2, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18139         ldrh    w2, [x2]
18140         udiv    w3, w19, w2
18141         msub    w3, w3, w2, w19
18142         str     w3, [x29,128]
18143         sub     w3, w2, w3
18144         cmp     w3, w28
18145         csel    w3, w3, w28, ls
18146         str     w3, [x29,168]
18147         cmp     w3, w2
18148         bne     .L2457
18149         str     x25, [x0,8]
18150         b       .L2457
18151 .L2456:
18152         ldr     x2, [x0]
18153         cmp     w20, w24
18154         add     x2, x2, x1
18155         bne     .L2458
18156         adrp    x0, :got:p_io_data_buf_1
18157         ldr     w4, [x29,172]
18158         ldr     x0, [x0, #:got_lo12:p_io_data_buf_1]
18159         ldr     x0, [x0]
18160         str     x0, [x2,8]
18161         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18162         ldrh    w3, [x0]
18163         mul     w0, w20, w3
18164         sub     w26, w4, w0
18165         cmp     w26, w3
18166         bne     .L2457
18167         b       .L2490
18168 .L2458:
18169         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18170         ldrh    w0, [x0]
18171         mul     w0, w20, w0
18172 .L2490:
18173         sub     w0, w0, w19
18174         ubfiz   x0, x0, 9, 23
18175         add     x0, x25, x0
18176         str     x0, [x2,8]
18177 .L2457:
18178         adrp    x0, :got:req_read
18179         adrp    x2, :got:p_io_spare_buf
18180         ldr     x0, [x0, #:got_lo12:req_read]
18181         ldr     x2, [x2, #:got_lo12:p_io_spare_buf]
18182         ldr     x0, [x0]
18183         ldr     x2, [x2]
18184         add     x1, x0, x1
18185         adrp    x0, :got:c_ftl_nand_byte_pre_oob
18186         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
18187         str     w20, [x1,24]
18188         ldrh    w0, [x0]
18189         mul     w0, w21, w0
18190         add     w21, w21, 1
18191         and     x0, x0, 4294967292
18192         add     x0, x2, x0
18193         str     x0, [x1,16]
18194 .L2455:
18195         subs    w22, w22, #1
18196         add     w20, w20, 1
18197         beq     .L2459
18198         adrp    x0, :got:c_ftl_nand_planes_num
18199         ldr     x0, [x0, #:got_lo12:c_ftl_nand_planes_num]
18200         ldrh    w0, [x0]
18201         cmp     w21, w0, lsl 3
18202         bne     .L2450
18203 .L2459:
18204         cbz     w21, .L2450
18205         adrp    x0, :got:req_read
18206         mov     w1, w21
18207         mov     w2, 0
18208         ldr     x0, [x0, #:got_lo12:req_read]
18209         ldr     x0, [x0]
18210         bl      FlashReadPages
18211         str     xzr, [x29,160]
18212         ldr     x0, [x29,128]
18213         ubfiz   x0, x0, 9, 23
18214         str     x0, [x29,144]
18215         ldr     w0, [x29,168]
18216         lsl     w0, w0, 9
18217         str     w0, [x29,152]
18218         lsl     w0, w26, 9
18219         str     w0, [x29,124]
18220 .L2461:
18221         ldr     w0, [x29,160]
18222         cmp     w21, w0
18223         bls     .L2493
18224         ldr     x0, [x29,160]
18225         mov     x1, 56
18226         mul     x3, x0, x1
18227         adrp    x0, :got:req_read
18228         ldr     x0, [x0, #:got_lo12:req_read]
18229         ldr     x0, [x0]
18230         add     x0, x0, x3
18231         ldr     w1, [x0,24]
18232         cmp     w1, w27
18233         bne     .L2462
18234         ldr     x1, [x0,8]
18235         adrp    x0, :got:p_io_data_buf_0
18236         ldr     x0, [x0, #:got_lo12:p_io_data_buf_0]
18237         ldr     x0, [x0]
18238         cmp     x1, x0
18239         bne     .L2463
18240         ldr     x2, [x29,144]
18241         mov     x0, x25
18242         str     x3, [x29,104]
18243         add     x1, x1, x2
18244         ldr     w2, [x29,152]
18245         b       .L2491
18246 .L2462:
18247         cmp     w1, w24
18248         bne     .L2463
18249         ldr     x1, [x0,8]
18250         adrp    x0, :got:p_io_data_buf_1
18251         ldr     x0, [x0, #:got_lo12:p_io_data_buf_1]
18252         ldr     x0, [x0]
18253         cmp     x1, x0
18254         bne     .L2463
18255         ldr     x0, [x23, #:got_lo12:c_ftl_nand_sec_pre_page]
18256         ldr     w2, [x29,124]
18257         str     x3, [x29,104]
18258         ldrh    w0, [x0]
18259         mul     w0, w24, w0
18260         sub     w0, w0, w19
18261         ubfiz   x0, x0, 9, 23
18262         add     x0, x25, x0
18263 .L2491:
18264         bl      ftl_memcpy
18265         ldr     x3, [x29,104]
18266 .L2463:
18267         adrp    x0, :got:req_read
18268         ldr     x0, [x0, #:got_lo12:req_read]
18269         ldr     x0, [x0]
18270         add     x5, x0, x3
18271         ldr     w2, [x0,x3]
18272         cmn     w2, #1
18273         bne     .L2464
18274         adrp    x1, :got:g_sys_ext_data
18275         str     w2, [x29,156]
18276         ldr     x4, [x1, #:got_lo12:g_sys_ext_data]
18277         ldr     w1, [x4,72]
18278         add     w1, w1, 1
18279         str     w1, [x4,72]
18280 .L2464:
18281         ldr     w0, [x0,x3]
18282         cmp     w0, 256
18283         bne     .L2465
18284         ldr     w0, [x5,4]
18285         lsr     w0, w0, 10
18286         bl      P2V_block_in_plane
18287         bl      FtlGcRefreshBlock
18288 .L2465:
18289         ldr     x0, [x29,160]
18290         add     x0, x0, 1
18291         str     x0, [x29,160]
18292         b       .L2461
18293 .L2493:
18294         mov     w21, 0
18295         b       .L2450
18296 .L2492:
18297         adrp    x0, :got:g_gc_bad_block_temp_num
18298         ldr     x0, [x0, #:got_lo12:g_gc_bad_block_temp_num]
18299         ldrh    w0, [x0]
18300         cbz     w0, .L2468
18301         mov     w0, w22
18302         mov     w1, 1
18303         bl      rk_ftl_garbage_collect
18304 .L2468:
18305         ldr     w0, [x29,156]
18306 .L2448:
18307         ldp     x19, x20, [sp,16]
18308         ldp     x21, x22, [sp,32]
18309         ldp     x23, x24, [sp,48]
18310         ldp     x25, x26, [sp,64]
18311         ldp     x27, x28, [sp,80]
18312         ldp     x29, x30, [sp], 192
18313         ret
18314         .size   FtlRead, .-FtlRead
18315         .align  2
18316         .global StorageSysDataLoad
18317         .type   StorageSysDataLoad, %function
18318 StorageSysDataLoad:
18319         stp     x29, x30, [sp, -48]!
18320         mov     x2, 512
18321         add     x29, sp, 0
18322         str     x19, [sp,16]
18323         mov     w19, w0
18324         mov     x0, x1
18325         str     x1, [x29,40]
18326         mov     w1, 0
18327         bl      memset
18328         bl      rknand_device_lock
18329         ldr     x3, [x29,40]
18330         add     w1, w19, 256
18331         mov     w2, 1
18332         mov     w0, 16
18333         bl      FtlRead
18334         str     x0, [x29,40]
18335         bl      rknand_device_unlock
18336         ldr     x19, [sp,16]
18337         ldr     x0, [x29,40]
18338         ldp     x29, x30, [sp], 48
18339         ret
18340         .size   StorageSysDataLoad, .-StorageSysDataLoad
18341         .align  2
18342         .global FtlWrite
18343         .type   FtlWrite, %function
18344 FtlWrite:
18345         stp     x29, x30, [sp, -320]!
18346         uxtb    w0, w0
18347         add     x29, sp, 0
18348         stp     x23, x24, [sp,48]
18349         stp     x25, x26, [sp,64]
18350         stp     x19, x20, [sp,16]
18351         stp     x21, x22, [sp,32]
18352         stp     x27, x28, [sp,80]
18353         cmp     w0, 16
18354         mov     w23, w1
18355         mov     w24, w2
18356         mov     x25, x3
18357         bne     .L2496
18358         add     w0, w1, 256
18359         mov     w1, w2
18360         mov     x2, x3
18361         bl      FtlVendorPartWrite
18362         b       .L2497
18363 .L2496:
18364         adrp    x0, :got:g_MaxLbaSector
18365         add     w2, w1, w2
18366         ldr     x0, [x0, #:got_lo12:g_MaxLbaSector]
18367         ldr     w1, [x0]
18368         mov     w0, -1
18369         cmp     w2, w1
18370         bhi     .L2497
18371         adrp    x0, :got:g_ftl_nand_free_count
18372         adrp    x3, :got:c_ftl_nand_sec_pre_page
18373         mov     w1, 2048
18374         sub     w2, w2, #1
18375         str     x3, [x29,248]
18376         ldr     x0, [x0, #:got_lo12:g_ftl_nand_free_count]
18377         str     w1, [x0]
18378         ldr     x0, [x3, #:got_lo12:c_ftl_nand_sec_pre_page]
18379         ldrh    w1, [x0]
18380         udiv    w0, w2, w1
18381         cmp     w24, w1, lsl 1
18382         str     w0, [x29,220]
18383         udiv    w26, w23, w1
18384         sub     w27, w0, w26
18385         adrp    x0, :got:g_totle_write_page_count
18386         add     w21, w27, 1
18387         ldr     x0, [x0, #:got_lo12:g_totle_write_page_count]
18388         ldr     w2, [x0]
18389         add     w2, w21, w2
18390         str     w2, [x0]
18391         adrp    x0, :got:g_totle_write_sector
18392         ldr     x0, [x0, #:got_lo12:g_totle_write_sector]
18393         ldr     w2, [x0]
18394         add     w2, w24, w2
18395         str     w2, [x0]
18396         cset    w0, cs
18397         cmp     w24, 8
18398         str     w0, [x29,236]
18399         bhi     .L2535
18400         adrp    x19, :got:g_buffer_superblock
18401         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
18402         b       .L2498
18403 .L2535:
18404         adrp    x19, :got:g_active_superblock
18405         ldr     x19, [x19, #:got_lo12:g_active_superblock]
18406 .L2498:
18407         adrp    x22, :got:g_wr_page_num
18408         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18409         ldr     w3, [x0]
18410         cbz     w3, .L2499
18411         adrp    x0, :got:req_wr_io
18412         sub     w3, w3, #1
18413         mov     w2, 56
18414         adrp    x20, :got:last_cache_match_count
18415         ldr     x0, [x0, #:got_lo12:req_wr_io]
18416         umull   x3, w3, w2
18417         ldr     x0, [x0]
18418         add     x3, x0, x3
18419         ldr     w0, [x3,24]
18420         cmp     w26, w0
18421         bne     .L2500
18422         adrp    x0, :got:g_totle_cache_write_count
18423         ldr     x0, [x0, #:got_lo12:g_totle_cache_write_count]
18424         ldr     w2, [x0]
18425         add     w2, w2, 1
18426         str     w2, [x0]
18427         ldr     x28, [x20, #:got_lo12:last_cache_match_count]
18428         ldr     w0, [x28]
18429         add     w0, w0, 1
18430         str     w0, [x28]
18431         msub    w0, w26, w1, w23
18432         sub     w1, w1, w0
18433         ubfiz   x0, x0, 9, 23
18434         cmp     w1, w24
18435         csel    w19, w1, w24, ls
18436         ldr     x1, [x3,8]
18437         lsl     w21, w19, 9
18438         add     x0, x1, x0
18439         mov     w2, w21
18440         mov     x1, x25
18441         bl      ftl_memcpy
18442         cbnz    w27, .L2501
18443         ldr     w1, [x28]
18444         mov     w0, w27
18445         cmp     w1, 2
18446         ble     .L2497
18447 .L2501:
18448         add     x25, x25, x21
18449         sub     w24, w24, w19
18450         add     w23, w23, w19
18451         add     w26, w26, 1
18452         mov     w21, w27
18453 .L2500:
18454         ldr     x20, [x20, #:got_lo12:last_cache_match_count]
18455         adrp    x0, :got:gp_last_act_superblock
18456         str     wzr, [x20]
18457         ldr     x0, [x0, #:got_lo12:gp_last_act_superblock]
18458         ldr     x19, [x0]
18459 .L2499:
18460         ldr     w1, [x29,220]
18461         mov     w0, w26
18462         bl      FtlCacheMetchLpa
18463         cbz     w0, .L2502
18464         bl      FtlCacheWriteBack
18465 .L2502:
18466         adrp    x0, :got:gp_last_act_superblock
18467         str     x0, [x29,168]
18468         str     w26, [x29,232]
18469         ldr     x1, [x0, #:got_lo12:gp_last_act_superblock]
18470         add     x0, x29, 260
18471         str     x0, [x29,144]
18472         add     x0, x29, 264
18473         str     x0, [x29,240]
18474         adrp    x0, .LC117
18475         add     x0, x0, :lo12:.LC117
18476         str     x19, [x1]
18477         str     x0, [x29,136]
18478 .L2503:
18479         cbz     w21, .L2560
18480         ldrh    w1, [x19,4]
18481         cbnz    w1, .L2504
18482         adrp    x0, :got:g_active_superblock
18483         adrp    x20, :got:g_active_superblock
18484         ldr     x0, [x0, #:got_lo12:g_active_superblock]
18485         cmp     x19, x0
18486         bne     .L2505
18487         adrp    x19, :got:g_buffer_superblock
18488         ldr     x0, [x19, #:got_lo12:g_buffer_superblock]
18489         ldrh    w27, [x0,4]
18490         cbnz    w27, .L2506
18491         bl      allocate_new_data_superblock
18492         adrp    x0, :got:power_up_flag
18493         ldr     x0, [x0, #:got_lo12:power_up_flag]
18494         str     w27, [x0]
18495 .L2506:
18496         ldr     x0, [x20, #:got_lo12:g_active_superblock]
18497         bl      allocate_new_data_superblock
18498         adrp    x0, :got:power_up_flag
18499         ldr     x0, [x0, #:got_lo12:power_up_flag]
18500         ldr     w0, [x0]
18501         cbnz    w0, .L2537
18502 .L2508:
18503         ldr     x19, [x20, #:got_lo12:g_active_superblock]
18504         b       .L2507
18505 .L2505:
18506         adrp    x2, :got:power_up_flag
18507         ldrh    w0, [x0,4]
18508         ldr     x2, [x2, #:got_lo12:power_up_flag]
18509         str     w1, [x2]
18510         cbnz    w0, .L2508
18511         mov     x0, x19
18512         bl      allocate_new_data_superblock
18513         b       .L2507
18514 .L2537:
18515         ldr     x19, [x19, #:got_lo12:g_buffer_superblock]
18516 .L2507:
18517         ldrh    w0, [x19,4]
18518         cbnz    w0, .L2509
18519         mov     x0, x19
18520         bl      allocate_new_data_superblock
18521 .L2509:
18522         ldr     x0, [x29,168]
18523         ldr     x0, [x0, #:got_lo12:gp_last_act_superblock]
18524         str     x19, [x0]
18525 .L2504:
18526         adrp    x2, :got:c_wr_page_buf_num
18527         ldr     x3, [x22, #:got_lo12:g_wr_page_num]
18528         ldrh    w1, [x19,4]
18529         str     xzr, [x29,224]
18530         ldr     x0, [x2, #:got_lo12:c_wr_page_buf_num]
18531         ldr     w3, [x3]
18532         str     x2, [x29,160]
18533         ldr     w0, [x0]
18534         sub     w0, w0, w3
18535         cmp     w1, w0
18536         csel    w0, w1, w0, ls
18537         cmp     w0, w21
18538         csel    w0, w0, w21, ls
18539         str     w0, [x29,212]
18540         ldr     w0, [x29,236]
18541         and     w0, w0, 1
18542         str     w0, [x29,156]
18543         add     w0, w24, w23
18544         str     w0, [x29,208]
18545 .L2510:
18546         ldr     w0, [x29,224]
18547         ldr     w2, [x29,212]
18548         ldr     w1, [x29,232]
18549         cmp     w0, w2
18550         add     w28, w1, w0
18551         bcs     .L2561
18552         ldrh    w1, [x19,4]
18553         cbz     w1, .L2539
18554         ldr     w1, [x29,220]
18555         cmp     w28, w1
18556         cset    w10, eq
18557         cbz     w0, .L2512
18558         ldr     w1, [x29,156]
18559         tst     w10, w1
18560         beq     .L2512
18561         ldr     x1, [x29,248]
18562         ldr     w2, [x29,208]
18563         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page]
18564         ldrh    w1, [x1]
18565         msub    w2, w28, w1, w2
18566         cmp     w2, w1
18567         bne     .L2539
18568 .L2512:
18569         ldr     x1, [x29,144]
18570         mov     w2, 0
18571         mov     w0, w28
18572         str     x10, [x29,96]
18573         bl      log2phys
18574         mov     x0, x19
18575         bl      get_new_active_ppa
18576         ldr     x8, [x22, #:got_lo12:g_wr_page_num]
18577         adrp    x4, :got:req_wr_io
18578         mov     w7, 56
18579         str     x4, [x29,120]
18580         str     x8, [x29,104]
18581         ldr     x6, [x4, #:got_lo12:req_wr_io]
18582         ldr     w9, [x8]
18583         str     x7, [x29,112]
18584         ldr     x2, [x6]
18585         umull   x1, w9, w7
18586         str     x6, [x29,128]
18587         add     x2, x2, x1
18588         str     w0, [x2,4]
18589         ldr     x0, [x6]
18590         add     x1, x0, x1
18591         adrp    x0, :got:c_ftl_nand_byte_pre_oob
18592         ldr     x0, [x0, #:got_lo12:c_ftl_nand_byte_pre_oob]
18593         ldrh    w2, [x0]
18594         adrp    x0, :got:p_wr_io_spare_buf
18595         ldr     x0, [x0, #:got_lo12:p_wr_io_spare_buf]
18596         mul     w5, w2, w9
18597         ldr     x0, [x0]
18598         and     x3, x5, 4294967292
18599         adrp    x5, :got:c_ftl_nand_byte_pre_page
18600         str     x0, [x29,176]
18601         add     x27, x0, x3
18602         str     x27, [x1,16]
18603         str     x5, [x29,192]
18604         ldr     x20, [x5, #:got_lo12:c_ftl_nand_byte_pre_page]
18605         str     x3, [x29,184]
18606         ldrh    w0, [x20]
18607         mul     w0, w0, w9
18608         adrp    x9, :got:p_wr_io_data_buf
18609         and     x0, x0, 4294967292
18610         ldr     x9, [x9, #:got_lo12:p_wr_io_data_buf]
18611         str     w28, [x1,24]
18612         ldr     x9, [x9]
18613         add     x0, x9, x0
18614         str     x0, [x1,8]
18615         mov     x0, x27
18616         mov     w1, 0
18617         bl      ftl_memset
18618         cmp     w28, w26
18619         ldr     x4, [x29,120]
18620         cset    w0, eq
18621         str     w0, [x29,216]
18622         ldr     x5, [x29,192]
18623         cbnz    w0, .L2542
18624         ldr     x10, [x29,96]
18625         ldr     x6, [x29,128]
18626         ldr     x7, [x29,112]
18627         ldr     x8, [x29,104]
18628         cbz     w10, .L2513
18629         ldr     x0, [x29,248]
18630         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18631         ldrh    w20, [x0]
18632         ldr     w0, [x29,208]
18633         msub    w20, w28, w20, w0
18634         ldr     w0, [x29,216]
18635         str     w0, [x29,192]
18636         uxth    w20, w20
18637         b       .L2516
18638 .L2542:
18639         ldr     x0, [x29,248]
18640         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18641         ldrh    w20, [x0]
18642         udiv    w0, w23, w20
18643         msub    w0, w0, w20, w23
18644         str     w0, [x29,192]
18645         sub     w20, w20, w0
18646         cmp     w20, w24
18647         csel    w20, w20, w24, ls
18648 .L2516:
18649         ldr     x0, [x29,248]
18650         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18651         ldrh    w0, [x0]
18652         cmp     w20, w0
18653         bne     .L2517
18654         ldr     w0, [x29,216]
18655         mov     x1, x25
18656         cbnz    w0, .L2518
18657         mul     w1, w20, w28
18658         sub     w1, w1, w23
18659         ubfiz   x1, x1, 9, 23
18660         add     x1, x25, x1
18661 .L2518:
18662         ldr     w2, [x29,236]
18663         mov     w0, 56
18664         cbz     w2, .L2519
18665         ldr     x2, [x22, #:got_lo12:g_wr_page_num]
18666         ldr     x4, [x4, #:got_lo12:req_wr_io]
18667         ldr     w2, [x2]
18668         umull   x0, w2, w0
18669         ldr     x2, [x4]
18670         add     x0, x2, x0
18671         str     x1, [x0,8]
18672         b       .L2520
18673 .L2519:
18674         ldr     x2, [x22, #:got_lo12:g_wr_page_num]
18675         ldr     x4, [x4, #:got_lo12:req_wr_io]
18676         ldr     x5, [x5, #:got_lo12:c_ftl_nand_byte_pre_page]
18677         ldr     w2, [x2]
18678         umull   x0, w2, w0
18679         ldr     x2, [x4]
18680         add     x0, x2, x0
18681         ldrh    w2, [x5]
18682         ldr     x0, [x0,8]
18683         b       .L2559
18684 .L2517:
18685         ldr     w0, [x29,260]
18686         cmn     w0, #1
18687         beq     .L2521
18688         ldr     x1, [x29,240]
18689         mov     w2, 56
18690         str     x4, [x29,128]
18691         str     w28, [x1,24]
18692         str     w0, [x1,4]
18693         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18694         ldr     x1, [x4, #:got_lo12:req_wr_io]
18695         ldr     w0, [x0]
18696         ldr     x1, [x1]
18697         umull   x0, w0, w2
18698         ldr     x2, [x29,240]
18699         add     x0, x1, x0
18700         ldr     x1, [x0,8]
18701         ldr     x0, [x0,16]
18702         str     x1, [x2,8]
18703         mov     w1, 1
18704         str     x0, [x2,16]
18705         mov     x0, x2
18706         mov     w2, 0
18707         bl      FlashReadPages
18708         ldr     x0, [x29,240]
18709         ldr     x4, [x29,128]
18710         ldr     w0, [x0]
18711         cmn     w0, #1
18712         bne     .L2522
18713         adrp    x0, :got:g_sys_ext_data
18714         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
18715         ldr     w1, [x0,72]
18716         add     w1, w1, 1
18717         str     w1, [x0,72]
18718         b       .L2524
18719 .L2522:
18720         ldr     w0, [x27,8]
18721         cmp     w0, w28
18722         beq     .L2524
18723         adrp    x0, :got:g_sys_ext_data
18724         mov     w2, w28
18725         str     x4, [x29,128]
18726         ldr     x0, [x0, #:got_lo12:g_sys_ext_data]
18727         ldr     w1, [x0,72]
18728         add     w1, w1, 1
18729         str     w1, [x0,72]
18730         ldr     x0, [x29,136]
18731         ldr     w1, [x27,8]
18732         bl      printk
18733         b       .L2558
18734 .L2521:
18735         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18736         mov     w1, 56
18737         ldr     x5, [x5, #:got_lo12:c_ftl_nand_byte_pre_page]
18738         str     x4, [x29,128]
18739         ldr     w0, [x0]
18740         ldrh    w2, [x5]
18741         umull   x0, w0, w1
18742         ldr     x1, [x4, #:got_lo12:req_wr_io]
18743         ldr     x1, [x1]
18744         add     x0, x1, x0
18745         mov     w1, 0
18746         ldr     x0, [x0,8]
18747         bl      ftl_memset
18748 .L2558:
18749         ldr     x4, [x29,128]
18750 .L2524:
18751         ldr     w1, [x29,216]
18752         mov     w0, 56
18753         lsl     w2, w20, 9
18754         cbz     w1, .L2525
18755         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18756         ldr     x4, [x4, #:got_lo12:req_wr_io]
18757         ldr     w5, [x1]
18758         ldr     x4, [x4]
18759         umull   x0, w5, w0
18760         add     x4, x4, x0
18761         ldr     x0, [x29,192]
18762         ubfiz   x0, x0, 9, 23
18763         ldr     x1, [x4,8]
18764         add     x0, x1, x0
18765         mov     x1, x25
18766         b       .L2559
18767 .L2525:
18768         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18769         ldr     x4, [x4, #:got_lo12:req_wr_io]
18770         ldr     w5, [x1]
18771         ldr     x1, [x4]
18772         umull   x0, w5, w0
18773         add     x0, x1, x0
18774         ldr     x1, [x29,248]
18775         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page]
18776         ldr     x0, [x0,8]
18777         ldrh    w1, [x1]
18778         mul     w1, w28, w1
18779         sub     w1, w1, w23
18780         ubfiz   x1, x1, 9, 23
18781         add     x1, x25, x1
18782         b       .L2559
18783 .L2513:
18784         ldr     w0, [x29,236]
18785         ldr     w1, [x8]
18786         cbz     w0, .L2526
18787         umull   x0, w1, w7
18788         ldr     x1, [x6]
18789         add     x1, x1, x0
18790         ldr     x0, [x29,248]
18791         ldr     x0, [x0, #:got_lo12:c_ftl_nand_sec_pre_page]
18792         ldrh    w0, [x0]
18793         mul     w0, w28, w0
18794         sub     w0, w0, w23
18795         ubfiz   x0, x0, 9, 23
18796         add     x0, x25, x0
18797         str     x0, [x1,8]
18798         b       .L2520
18799 .L2526:
18800         umull   x0, w1, w7
18801         ldr     x1, [x6]
18802         ldrh    w2, [x20]
18803         add     x0, x1, x0
18804         ldr     x1, [x29,248]
18805         ldr     x1, [x1, #:got_lo12:c_ftl_nand_sec_pre_page]
18806         ldr     x0, [x0,8]
18807         ldrh    w1, [x1]
18808         mul     w1, w28, w1
18809         sub     w1, w1, w23
18810         ubfiz   x1, x1, 9, 23
18811         add     x1, x25, x1
18812 .L2559:
18813         bl      ftl_memcpy
18814 .L2520:
18815         ldr     x1, [x29,176]
18816         mov     w0, -3947
18817         ldr     x2, [x29,184]
18818         strh    w0, [x1,x2]
18819         adrp    x1, :got:g_GlobalDataVersion
18820         ldr     x1, [x1, #:got_lo12:g_GlobalDataVersion]
18821         str     w28, [x27,8]
18822         ldr     w0, [x1]
18823         str     w0, [x27,4]
18824         add     w0, w0, 1
18825         cmn     w0, #1
18826         csel    w0, w0, wzr, ne
18827         str     w0, [x1]
18828         ldr     w0, [x29,260]
18829         str     w0, [x27,12]
18830         ldrh    w0, [x19]
18831         strh    w0, [x27,2]
18832         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18833         ldr     w0, [x1]
18834         add     w0, w0, 1
18835         str     w0, [x1]
18836         ldr     x0, [x29,224]
18837         add     x0, x0, 1
18838         str     x0, [x29,224]
18839         b       .L2510
18840 .L2561:
18841         str     w28, [x29,232]
18842         mov     x0, x2
18843         b       .L2511
18844 .L2539:
18845         str     w28, [x29,232]
18846 .L2511:
18847         sub     w21, w21, w0
18848         ldr     w0, [x29,236]
18849         cbnz    w0, .L2530
18850         ldr     x0, [x29,160]
18851         ldr     x1, [x22, #:got_lo12:g_wr_page_num]
18852         ldr     x0, [x0, #:got_lo12:c_wr_page_buf_num]
18853         ldr     w1, [x1]
18854         ldr     w0, [x0]
18855         cmp     w1, w0
18856         bcs     .L2530
18857         ldrh    w0, [x19,4]
18858         cbz     w0, .L2530
18859 .L2532:
18860         str     wzr, [x29,236]
18861         b       .L2531
18862 .L2530:
18863         bl      FtlCacheWriteBack
18864         ldr     x0, [x22, #:got_lo12:g_wr_page_num]
18865         cmp     w21, 3
18866         str     wzr, [x0]
18867         bls     .L2532
18868 .L2531:
18869         bl      rknand_queue_cond_resched
18870         b       .L2503
18871 .L2560:
18872         ldr     w1, [x29,220]
18873         mov     w0, w21
18874         sub     w1, w1, w26
18875         bl      rk_ftl_garbage_collect
18876         mov     w0, w21
18877 .L2497:
18878         ldp     x19, x20, [sp,16]
18879         ldp     x21, x22, [sp,32]
18880         ldp     x23, x24, [sp,48]
18881         ldp     x25, x26, [sp,64]
18882         ldp     x27, x28, [sp,80]
18883         ldp     x29, x30, [sp], 320
18884         ret
18885         .size   FtlWrite, .-FtlWrite
18886         .align  2
18887         .global StorageSysDataStore
18888         .type   StorageSysDataStore, %function
18889 StorageSysDataStore:
18890         stp     x29, x30, [sp, -48]!
18891         add     x29, sp, 0
18892         str     x19, [sp,16]
18893         mov     w19, w0
18894         str     x1, [x29,40]
18895         bl      rknand_device_lock
18896         ldr     x3, [x29,40]
18897         add     w1, w19, 256
18898         mov     w2, 1
18899         mov     w0, 16
18900         bl      FtlWrite
18901         str     x0, [x29,40]
18902         bl      rknand_device_unlock
18903         ldr     x19, [sp,16]
18904         ldr     x0, [x29,40]
18905         ldp     x29, x30, [sp], 48
18906         ret
18907         .size   StorageSysDataStore, .-StorageSysDataStore
18908         .align  2
18909         .type   FlashReadFacBbtData.part.16, %function
18910 FlashReadFacBbtData.part.16:
18911         stp     x29, x30, [sp, -32]!
18912         mov     w3, 0
18913         adrp    x4, :got:gFlashPageBuffer0
18914         add     x29, sp, 0
18915         str     x19, [sp,16]
18916         mov     x19, x0
18917         cbnz    w1, .L2566
18918         adrp    x1, :got:gNandFlashIdbBlockAddr
18919         mov     w7, 1
18920 .L2569:
18921         ldr     x0, [x1, #:got_lo12:gNandFlashIdbBlockAddr]
18922         ldr     w0, [x0]
18923         cmp     w3, w0
18924         bcs     .L2566
18925         ldr     x0, [x4, #:got_lo12:gFlashPageBuffer0]
18926         ubfx    x5, x3, 5, 11
18927         lsl     x5, x5, 2
18928         lsl     w6, w7, w3
18929         add     w3, w3, 1
18930         ldr     x0, [x0]
18931         uxth    w3, w3
18932         ldr     w8, [x0,x5]
18933         orr     w6, w8, w6
18934         str     w6, [x0,x5]
18935         b       .L2569
18936 .L2566:
18937         ldr     x4, [x4, #:got_lo12:gFlashPageBuffer0]
18938         mov     x0, x19
18939         ldr     x1, [x4]
18940         bl      ftl_memcpy
18941         mov     w2, 4
18942         adrp    x0, .LC118
18943         mov     x1, x19
18944         add     x0, x0, :lo12:.LC118
18945         mov     w3, w2
18946         bl      rknand_print_hex
18947         ldr     x19, [sp,16]
18948         mov     w0, 0
18949         ldp     x29, x30, [sp], 32
18950         ret
18951         .size   FlashReadFacBbtData.part.16, .-FlashReadFacBbtData.part.16
18952         .align  2
18953         .global FlashReadFacBbtData
18954         .type   FlashReadFacBbtData, %function
18955 FlashReadFacBbtData:
18956         adrp    x4, :got:gNandPhyInfo
18957         stp     x29, x30, [sp, -160]!
18958         add     x29, sp, 0
18959         ldr     x4, [x4, #:got_lo12:gNandPhyInfo]
18960         stp     x19, x20, [sp,16]
18961         stp     x21, x22, [sp,32]
18962         stp     x23, x24, [sp,48]
18963         stp     x25, x26, [sp,64]
18964         str     x27, [sp,80]
18965         mov     x22, x0
18966         mov     w24, w1
18967         mov     w26, w2
18968         ldrh    w0, [x4,14]
18969         add     x23, x29, 104
18970         ldrh    w3, [x4,12]
18971         adrp    x4, :got:gFlashSpareBuffer
18972         mov     x21, x4
18973         mov     w27, 61664
18974         mul     w3, w3, w0
18975         adrp    x0, :got:gFlashPageBuffer0
18976         uxth    w3, w3
18977         ldr     x0, [x0, #:got_lo12:gFlashPageBuffer0]
18978         sub     w20, w3, #1
18979         mul     w25, w1, w3
18980         uxth    w20, w20
18981         sub     w19, w3, #16
18982         ldr     x0, [x0]
18983         str     x0, [x29,112]
18984         ldr     x0, [x4, #:got_lo12:gFlashSpareBuffer]
18985         ldr     x0, [x0]
18986         str     x0, [x29,120]
18987 .L2571:
18988         cmp     w20, w19
18989         ble     .L2579
18990         add     w0, w20, w25
18991         mov     w1, 1
18992         lsl     w0, w0, 10
18993         mov     w2, w1
18994         str     w0, [x23,4]
18995         mov     x0, x23
18996         bl      FlashReadPages
18997         ldr     w0, [x23]
18998         cmn     w0, #1
18999         beq     .L2572
19000         ldr     x0, [x21, #:got_lo12:gFlashSpareBuffer]
19001         ldr     x0, [x0]
19002         ldrh    w0, [x0]
19003         cmp     w0, w27
19004         bne     .L2572
19005         mov     w0, w22
19006         cbz     x22, .L2573
19007         mov     x0, x22
19008         mov     w1, w24
19009         mov     w2, w26
19010         bl      FlashReadFacBbtData.part.16
19011         b       .L2573
19012 .L2572:
19013         sub     w20, w20, #1
19014         uxth    w20, w20
19015         b       .L2571
19016 .L2579:
19017         mov     w0, -1
19018 .L2573:
19019         ldp     x19, x20, [sp,16]
19020         ldp     x21, x22, [sp,32]
19021         ldp     x23, x24, [sp,48]
19022         ldp     x25, x26, [sp,64]
19023         ldr     x27, [sp,80]
19024         ldp     x29, x30, [sp], 160
19025         ret
19026         .size   FlashReadFacBbtData, .-FlashReadFacBbtData
19027         .align  2
19028         .global FlashGetBadBlockList
19029         .type   FlashGetBadBlockList, %function
19030 FlashGetBadBlockList:
19031         adrp    x2, :got:gpNandParaInfo
19032         stp     x29, x30, [sp, -48]!
19033         add     x29, sp, 0
19034         ldr     x2, [x2, #:got_lo12:gpNandParaInfo]
19035         stp     x19, x20, [sp,16]
19036         str     x21, [sp,32]
19037         mov     x21, x0
19038         adrp    x20, :got:gFlashPageBuffer1
19039         ldr     x0, [x2]
19040         ldrb    w2, [x0,13]
19041         ldrh    w19, [x0,14]
19042         ldr     x0, [x20, #:got_lo12:gFlashPageBuffer1]
19043         mul     w19, w2, w19
19044         ldr     x0, [x0]
19045         uxth    w19, w19
19046         add     w2, w19, 7
19047         lsr     w2, w2, 3
19048         bl      FlashReadFacBbtData
19049         cmn     w0, #1
19050         bne     .L2581
19051 .L2585:
19052         mov     w1, 0
19053         b       .L2582
19054 .L2581:
19055         mov     w2, 0
19056         lsr     w0, w19, 4
19057         mov     w1, w2
19058         sub     w19, w19, #1
19059         mov     w5, 1
19060 .L2583:
19061         cmp     w2, w19
19062         bge     .L2582
19063         ldr     x3, [x20, #:got_lo12:gFlashPageBuffer1]
19064         ubfx    x4, x2, 5, 11
19065         ldr     x6, [x3]
19066         lsl     w3, w5, w2
19067         ldr     w4, [x6,x4,lsl 2]
19068         tst     w3, w4
19069         beq     .L2584
19070         add     w3, w1, 1
19071         ubfiz   x1, x1, 1, 16
19072         strh    w2, [x21,x1]
19073         uxth    w1, w3
19074 .L2584:
19075         cmp     w1, w0
19076         bcs     .L2585
19077         add     w2, w2, 1
19078         uxth    w2, w2
19079         b       .L2583
19080 .L2582:
19081         ubfiz   x1, x1, 1, 16
19082         mov     w0, -1
19083         ldp     x19, x20, [sp,16]
19084         strh    w0, [x21,x1]
19085         mov     w0, 0
19086         ldr     x21, [sp,32]
19087         ldp     x29, x30, [sp], 48
19088         ret
19089         .size   FlashGetBadBlockList, .-FlashGetBadBlockList
19090         .align  2
19091         .global FtlMakeBbt
19092         .type   FtlMakeBbt, %function
19093 FtlMakeBbt:
19094         stp     x29, x30, [sp, -96]!
19095         add     x29, sp, 0
19096         stp     x19, x20, [sp,16]
19097         adrp    x19, :got:gBbtInfo
19098         stp     x21, x22, [sp,32]
19099         stp     x23, x24, [sp,48]
19100         stp     x25, x26, [sp,64]
19101         stp     x27, x28, [sp,80]
19102         bl      FtlBbtMemInit
19103         mov     w21, 0
19104         bl      FtlLoadFactoryBbt
19105         ldr     x22, [x19, #:got_lo12:gBbtInfo]
19106         adrp    x25, :got:c_ftl_nand_blks_per_die
19107         mov     x23, x22
19108 .L2591:
19109         adrp    x0, :got:c_ftl_nand_die_num
19110         ldr     x0, [x0, #:got_lo12:c_ftl_nand_die_num]
19111         ldrh    w0, [x0]
19112         cmp     w21, w0
19113         bcs     .L2609
19114         adrp    x0, :got:p_sys_data_buf
19115         adrp    x1, :got:req_sys
19116         ldrh    w26, [x23,12]
19117         ldr     x0, [x0, #:got_lo12:p_sys_data_buf]
19118         ldr     x20, [x1, #:got_lo12:req_sys]
19119         adrp    x1, :got:p_sys_spare_buf
19120         ldr     x0, [x0]
19121         str     x0, [x20,8]
19122         ldr     x1, [x1, #:got_lo12:p_sys_spare_buf]
19123         ldr     x24, [x1]
19124         mov     w1, 65535
19125         str     x24, [x20,16]
19126         cmp     w26, w1
19127         beq     .L2592
19128         ldr     x24, [x25, #:got_lo12:c_ftl_nand_blks_per_die]
19129         ldrh    w1, [x24]
19130         madd    w26, w21, w1, w26
19131         mov     w1, 1
19132         lsl     w0, w26, 10
19133         mov     w2, w1
19134         str     w0, [x20,4]
19135         mov     x0, x20
19136         bl      FlashReadPages
19137         ldrh    w2, [x24]
19138         ldr     x0, [x22,32]
19139         add     w2, w2, 7
19140         ldr     x1, [x20,8]
19141         lsr     w2, w2, 3
19142         bl      ftl_memcpy
19143         b       .L2593
19144 .L2592:
19145         mov     w1, w21
19146         adrp    x28, :got:c_ftl_nand_bbm_buf_size
19147         bl      FlashGetBadBlockList
19148         ldr     x0, [x20,8]
19149         ldr     x1, [x22,32]
19150         bl      FtlBbt2Bitmap
19151         ldr     x0, [x25, #:got_lo12:c_ftl_nand_blks_per_die]
19152         ldrh    w20, [x0]
19153         sub     w20, w20, #1
19154         uxth    w20, w20
19155 .L2594:
19156         ldr     x26, [x25, #:got_lo12:c_ftl_nand_blks_per_die]
19157         ldrh    w0, [x26]
19158         madd    w0, w21, w0, w20
19159         bl      FtlBbmIsBadBlock
19160         cmp     w0, 1
19161         bne     .L2610
19162         sub     w20, w20, #1
19163         uxth    w20, w20
19164         b       .L2594
19165 .L2610:
19166         adrp    x0, :got:p_sys_spare_buf
19167         strh    w20, [x23,12]
19168         mov     w1, 0
19169         mov     w2, 16
19170         ldr     x0, [x0, #:got_lo12:p_sys_spare_buf]
19171         ldr     x0, [x0]
19172         bl      ftl_memset
19173         str     wzr, [x24,4]
19174         mov     w0, -3872
19175         strh    w0, [x24]
19176         ldrh    w0, [x23,12]
19177         strh    w0, [x24,2]
19178         ldrh    w0, [x26]
19179         ldrh    w1, [x23,12]
19180         madd    w26, w21, w0, w1
19181         adrp    x0, :got:req_sys
19182         ldr     x1, [x22,32]
19183         ldr     x27, [x0, #:got_lo12:req_sys]
19184         lsl     w0, w26, 10
19185         str     w0, [x27,4]
19186         ldr     x0, [x28, #:got_lo12:c_ftl_nand_bbm_buf_size]
19187         ldrh    w2, [x0]
19188         ldr     x0, [x27,8]
19189         lsl     w2, w2, 2
19190         bl      ftl_memcpy
19191         mov     w1, 1
19192         mov     x0, x27
19193         bl      FlashEraseBlocks
19194         mov     w1, 1
19195         mov     x0, x27
19196         mov     w2, w1
19197         mov     w3, w1
19198         bl      FlashProgPages
19199         ldr     w0, [x27]
19200         cmn     w0, #1
19201         bne     .L2593
19202         mov     w0, w26
19203         bl      FtlBbmMapBadBlock
19204         b       .L2594
19205 .L2593:
19206         mov     w0, w26
19207         add     w21, w21, 1
19208         add     x22, x22, 8
19209         add     x23, x23, 2
19210         bl      FtlBbmMapBadBlock
19211         b       .L2591
19212 .L2609:
19213         mov     w20, 0
19214         adrp    x21, :got:c_ftl_nand_reserved_blks
19215 .L2598:
19216         ldr     x0, [x21, #:got_lo12:c_ftl_nand_reserved_blks]
19217         ldrh    w0, [x0]
19218         cmp     w0, w20
19219         bls     .L2611
19220         mov     w0, w20
19221         add     w20, w20, 1
19222         bl      FtlBbmMapBadBlock
19223         uxth    w20, w20
19224         b       .L2598
19225 .L2611:
19226         ldr     x0, [x19, #:got_lo12:gBbtInfo]
19227         mov     w22, 65535
19228         ldrh    w20, [x0,12]
19229         sub     w20, w20, #1
19230         uxth    w20, w20
19231 .L2600:
19232         ldr     x21, [x19, #:got_lo12:gBbtInfo]
19233         ldrh    w0, [x21,12]
19234         sub     w0, w0, #48
19235         cmp     w20, w0
19236         ble     .L2604
19237         mov     w0, w20
19238         bl      FtlBbmIsBadBlock
19239         cmp     w0, 1
19240         beq     .L2601
19241         mov     w0, w20
19242         bl      FlashTestBlk
19243         cbz     w0, .L2602
19244         mov     w0, w20
19245         bl      FtlBbmMapBadBlock
19246         b       .L2601
19247 .L2602:
19248         ldrh    w0, [x21]
19249         cmp     w0, w22
19250         bne     .L2603
19251         strh    w20, [x21]
19252         b       .L2601
19253 .L2603:
19254         strh    w20, [x21,4]
19255         b       .L2604
19256 .L2601:
19257         sub     w20, w20, #1
19258         uxth    w20, w20
19259         b       .L2600
19260 .L2604:
19261         ldr     x19, [x19, #:got_lo12:gBbtInfo]
19262         adrp    x0, :got:req_erase
19263         str     wzr, [x19,8]
19264         strh    wzr, [x19,2]
19265         ldrh    w1, [x19]
19266         ldr     x0, [x0, #:got_lo12:req_erase]
19267         lsl     w1, w1, 10
19268         ldr     x2, [x0]
19269         str     w1, [x2,4]
19270         ldrh    w1, [x19,4]
19271         ldr     x0, [x0]
19272         lsl     w1, w1, 10
19273         str     w1, [x0,60]
19274         mov     w1, 2
19275         bl      FlashEraseBlocks
19276         ldrh    w0, [x19]
19277         bl      FtlBbmMapBadBlock
19278         ldrh    w0, [x19,4]
19279         bl      FtlBbmMapBadBlock
19280         bl      FtlBbmTblFlush
19281         strh    wzr, [x19,2]
19282         ldr     w0, [x19,8]
19283         ldrh    w1, [x19,4]
19284         add     w0, w0, 1
19285         str     w0, [x19,8]
19286         ldrh    w0, [x19]
19287         strh    w0, [x19,4]
19288         strh    w1, [x19]
19289         bl      FtlBbmTblFlush
19290         mov     w0, 0
19291         ldp     x19, x20, [sp,16]
19292         ldp     x21, x22, [sp,32]
19293         ldp     x23, x24, [sp,48]
19294         ldp     x25, x26, [sp,64]
19295         ldp     x27, x28, [sp,80]
19296         ldp     x29, x30, [sp], 96
19297         ret
19298         .size   FtlMakeBbt, .-FtlMakeBbt
19299         .align  2
19300         .global FtlLowFormat
19301         .type   FtlLowFormat, %function
19302 FtlLowFormat:
19303         stp     x29, x30, [sp, -80]!
19304         add     x29, sp, 0
19305         stp     x19, x20, [sp,16]
19306         adrp    x19, :got:g_GlobalSysVersion
19307         str     x25, [sp,64]
19308         stp     x23, x24, [sp,48]
19309         stp     x21, x22, [sp,32]
19310         ldr     x0, [x19, #:got_lo12:g_GlobalSysVersion]
19311         adrp    x23, :got:c_ftl_nand_max_sys_blks
19312         str     wzr, [x0]
19313         adrp    x0, :got:g_GlobalDataVersion
19314         ldr     x0, [x0, #:got_lo12:g_GlobalDataVersion]
19315         str     wzr, [x0]
19316         ldr     x0, [x23, #:got_lo12:c_ftl_nand_max_sys_blks]
19317         ldrh    w0, [x0]
19318         bl      FtlFreeSysBlkQueueInit
19319         bl      FtlLoadBbt
19320         cbz     w0, .L2613
19321         bl      FtlMakeBbt
19322 .L2613:
19323         mov     w0, 0
19324         adrp    x3, :got:c_ftl_nand_sec_pre_page
19325         adrp    x4, :got:p_io_data_buf_0
19326         adrp    x5, :got:p_io_data_buf_1
19327 .L2614:
19328         ldr     x1, [x3, #:got_lo12:c_ftl_nand_sec_pre_page]
19329         ldrh    w1, [x1]
19330         cmp     w0, w1, lsl 7
19331         bge     .L2637
19332         ldr     x1, [x4, #:got_lo12:p_io_data_buf_0]
19333         ubfiz   x2, x0, 2, 16
19334         ldr     x6, [x1]
19335         mvn     w1, w0
19336         orr     w1, w0, w1, lsl 16
19337         add     w0, w0, 1
19338         str     w1, [x6,x2]
19339         uxth    w0, w0
19340         ldr     x1, [x5, #:got_lo12:p_io_data_buf_1]
19341         ldr     x6, [x1]
19342         mov     w1, 23752
19343         movk    w1, 0xa0f, lsl 16
19344         str     w1, [x6,x2]
19345         b       .L2614
19346 .L2637:
19347         adrp    x24, :got:c_ftl_nand_data_blks_per_plane
19348         mov     w21, 0
19349         adrp    x25, :got:c_ftl_nand_blk_pre_plane
19350         ldr     x0, [x24, #:got_lo12:c_ftl_nand_data_blks_per_plane]
19351         ldrh    w22, [x0]
19352 .L2616:
19353         ldr     x0, [x25, #:got_lo12:c_ftl_nand_blk_pre_plane]
19354         adrp    x20, :got:c_ftl_nand_blk_pre_plane
19355         ldrh    w0, [x0]
19356         cmp     w0, w22
19357         bls     .L2638
19358         mov     w0, w22
19359         mov     w1, 1
19360         add     w22, w22, 1
19361         bl      FtlLowFormatEraseBlock
19362         add     w0, w21, w0
19363         uxth    w22, w22
19364         uxth    w21, w0
19365         b       .L2616
19366 .L2638:
19367         adrp    x22, :got:c_ftl_nand_planes_num
19368         sub     w1, w21, #3
19369         ldr     x0, [x22, #:got_lo12:c_ftl_nand_planes_num]
19370         ldrh    w0, [x0]
19371         cmp     w1, w0, lsl 1
19372         bge     .L2618
19373 .L2622:
19374         mov     w21, 0
19375         mov     w23, w21
19376         b       .L2619
19377 .L2618:
19378         udiv    w21, w21, w0
19379         adrp    x0, :got:c_ftl_nand_init_sys_blks_per_plane
19380         ldr     x0, [x0, #:got_lo12:c_ftl_nand_init_sys_blks_per_plane]
19381         ldr     w0, [x0]
19382         add     w0, w21, w0
19383         bl      FtlSysBlkNumInit
19384         ldr     x23, [x23, #:got_lo12:c_ftl_nand_max_sys_blks]
19385         ldrh    w0, [x23]
19386         bl      FtlFreeSysBlkQueueInit
19387         ldr     x0, [x24, #:got_lo12:c_ftl_nand_data_blks_per_plane]
19388         ldrh    w21, [x0]
19389 .L2620:
19390         ldr     x0, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
19391         ldrh    w0, [x0]
19392         cmp     w0, w21
19393         bls     .L2622
19394         mov     w0, w21
19395         mov     w1, 1
19396         add     w21, w21, 1
19397         bl      FtlLowFormatEraseBlock
19398         uxth    w21, w21
19399         b       .L2620
19400 .L2619:
19401         ldr     x0, [x24, #:got_lo12:c_ftl_nand_data_blks_per_plane]
19402         ldrh    w0, [x0]
19403         cmp     w0, w23
19404         bls     .L2639
19405         mov     w0, w23
19406         mov     w1, 0
19407         add     w23, w23, 1
19408         bl      FtlLowFormatEraseBlock
19409         add     w0, w21, w0
19410         uxth    w23, w23
19411         uxth    w21, w0
19412         b       .L2619
19413 .L2639:
19414         adrp    x0, :got:g_cur_erase_blk
19415         ldr     x1, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
19416         adrp    x2, :got:g_MaxLpn
19417         adrp    x5, :got:c_ftl_nand_data_op_blks_per_plane
19418         ldr     x0, [x0, #:got_lo12:g_cur_erase_blk]
19419         ldrh    w1, [x1]
19420         str     w1, [x0]
19421         adrp    x0, :got:c_ftl_nand_max_data_blks
19422         ldr     x22, [x22, #:got_lo12:c_ftl_nand_planes_num]
19423         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_data_blks]
19424         ldr     x8, [x2, #:got_lo12:g_MaxLpn]
19425         ldrh    w6, [x22]
19426         ldr     w1, [x0]
19427         udiv    w0, w1, w6
19428         str     w0, [x8]
19429         ubfx    x7, x0, 5, 16
19430         ldr     x4, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19431         add     w3, w7, 36
19432         strh    w3, [x4]
19433         mov     w3, 24
19434         mul     w3, w6, w3
19435         cmp     w21, w3
19436         ble     .L2624
19437         sub     w1, w1, w21
19438         udiv    w1, w1, w6
19439         str     w1, [x8]
19440         lsr     w1, w1, 5
19441         add     w1, w1, 24
19442         strh    w1, [x4]
19443 .L2624:
19444         adrp    x3, :got:g_inkDie_check_enable
19445         ldr     x3, [x3, #:got_lo12:g_inkDie_check_enable]
19446         ldr     w1, [x3]
19447         cmp     w1, 1
19448         bne     .L2625
19449         ldr     x1, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19450         udiv    w3, w21, w6
19451         ldrh    w4, [x1]
19452         add     w3, w4, w3
19453         add     w3, w4, w3, asr 2
19454         strh    w3, [x1]
19455 .L2625:
19456         adrp    x3, :got:c_ftl_nand_ext_blk_pre_plane
19457         ldr     x3, [x3, #:got_lo12:c_ftl_nand_ext_blk_pre_plane]
19458         ldrh    w1, [x3]
19459         cbz     w1, .L2627
19460         ldr     x3, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19461         ldrh    w4, [x3]
19462         add     w4, w4, w1, lsr 1
19463         strh    w4, [x3]
19464         mul     w4, w1, w6
19465         cmp     w4, w21
19466         ble     .L2627
19467         ldr     x4, [x2, #:got_lo12:g_MaxLpn]
19468         add     w1, w1, 32
19469         add     w1, w7, w1
19470         strh    w1, [x3]
19471         str     w0, [x4]
19472 .L2627:
19473         ldr     x1, [x5, #:got_lo12:c_ftl_nand_data_op_blks_per_plane]
19474         adrp    x22, :got:g_MaxLbn
19475         ldr     x2, [x2, #:got_lo12:g_MaxLpn]
19476         adrp    x21, :got:p_valid_page_count_table
19477         ldrh    w0, [x1]
19478         ldr     w1, [x2]
19479         sub     w0, w1, w0
19480         ldr     x1, [x22, #:got_lo12:g_MaxLbn]
19481         mul     w0, w0, w6
19482         str     w0, [x1]
19483         adrp    x1, :got:c_ftl_nand_page_pre_blk
19484         ldr     x1, [x1, #:got_lo12:c_ftl_nand_page_pre_blk]
19485         ldrh    w1, [x1]
19486         mul     w0, w0, w1
19487         str     w0, [x2]
19488         adrp    x2, :got:c_ftl_nand_sec_pre_page
19489         adrp    x1, :got:g_MaxLbaSector
19490         ldr     x2, [x2, #:got_lo12:c_ftl_nand_sec_pre_page]
19491         ldr     x1, [x1, #:got_lo12:g_MaxLbaSector]
19492         ldrh    w2, [x2]
19493         mul     w0, w0, w2
19494         str     w0, [x1]
19495         bl      FtlBbmTblFlush
19496         ldr     x0, [x20, #:got_lo12:c_ftl_nand_blk_pre_plane]
19497         mov     x20, x21
19498         ldr     x1, [x21, #:got_lo12:p_valid_page_count_table]
19499         ldrh    w2, [x0]
19500         ldr     x0, [x1]
19501         mov     w1, 0
19502         lsl     w2, w2, 1
19503         bl      ftl_memset
19504         adrp    x0, :got:g_VaildLpn
19505         mov     w1, -1
19506         mov     w23, w1
19507         ldr     x0, [x0, #:got_lo12:g_VaildLpn]
19508         str     wzr, [x0]
19509         adrp    x0, :got:g_gc_superblock
19510         ldr     x0, [x0, #:got_lo12:g_gc_superblock]
19511         strh    w1, [x0]
19512         strh    wzr, [x0,2]
19513         strb    wzr, [x0,6]
19514         strb    wzr, [x0,8]
19515         adrp    x0, :got:g_active_superblock
19516         mov     x24, x0
19517         ldr     x2, [x0, #:got_lo12:g_active_superblock]
19518         strh    wzr, [x2,2]
19519         strb    wzr, [x2,6]
19520         strh    wzr, [x2]
19521         strb    wzr, [x2,8]
19522 .L2629:
19523         ldr     x21, [x24, #:got_lo12:g_active_superblock]
19524         mov     x0, x21
19525         bl      make_superblock
19526         ldrb    w0, [x21,7]
19527         cbnz    w0, .L2630
19528         ldr     x0, [x20, #:got_lo12:p_valid_page_count_table]
19529         ldrh    w1, [x21]
19530         ldr     x0, [x0]
19531         strh    w23, [x0,x1,lsl 1]
19532         ldrh    w0, [x21]
19533         add     w0, w0, 1
19534         strh    w0, [x21]
19535         b       .L2629
19536 .L2630:
19537         ldr     x1, [x19, #:got_lo12:g_GlobalSysVersion]
19538         mov     w24, -1
19539         ldrh    w2, [x21,4]
19540         ldr     w0, [x1]
19541         str     w0, [x21,12]
19542         add     w0, w0, 1
19543         str     w0, [x1]
19544         ldrh    w1, [x21]
19545         ldr     x0, [x20, #:got_lo12:p_valid_page_count_table]
19546         ldr     x0, [x0]
19547         strh    w2, [x0,x1,lsl 1]
19548         adrp    x0, :got:g_buffer_superblock
19549         mov     x23, x0
19550         ldrh    w2, [x21]
19551         ldr     x1, [x0, #:got_lo12:g_buffer_superblock]
19552         add     w2, w2, 1
19553         strh    wzr, [x1,2]
19554         strh    w2, [x1]
19555         mov     w2, 1
19556         strb    wzr, [x1,6]
19557         strb    w2, [x1,8]
19558 .L2631:
19559         ldr     x21, [x23, #:got_lo12:g_buffer_superblock]
19560         mov     x0, x21
19561         bl      make_superblock
19562         ldrb    w0, [x21,7]
19563         cbnz    w0, .L2632
19564         ldr     x0, [x20, #:got_lo12:p_valid_page_count_table]
19565         ldrh    w1, [x21]
19566         ldr     x0, [x0]
19567         strh    w24, [x0,x1,lsl 1]
19568         ldrh    w0, [x21]
19569         add     w0, w0, 1
19570         strh    w0, [x21]
19571         b       .L2631
19572 .L2632:
19573         ldr     x19, [x19, #:got_lo12:g_GlobalSysVersion]
19574         ldrh    w1, [x21]
19575         ldrh    w2, [x21,4]
19576         ldr     w0, [x19]
19577         str     w0, [x21,12]
19578         add     w0, w0, 1
19579         str     w0, [x19]
19580         ldr     x20, [x20, #:got_lo12:p_valid_page_count_table]
19581         ldr     x0, [x20]
19582         mov     w20, -1
19583         strh    w2, [x0,x1,lsl 1]
19584         adrp    x0, :got:g_gc_temp_superblock
19585         ldr     x0, [x0, #:got_lo12:g_gc_temp_superblock]
19586         strh    w20, [x0]
19587         bl      FtlFreeSysBlkQueueOut
19588         adrp    x1, :got:gSysInfo
19589         ldr     x1, [x1, #:got_lo12:gSysInfo]
19590         strh    w0, [x1]
19591         strh    wzr, [x1,2]
19592         strh    w20, [x1,4]
19593         ldr     x22, [x22, #:got_lo12:g_MaxLbn]
19594         ldr     w0, [x22]
19595         strh    w0, [x1,6]
19596         ldr     w0, [x19]
19597         str     w0, [x1,8]
19598         add     w0, w0, 1
19599         str     w0, [x19]
19600         bl      FtlVpcTblFlush
19601         bl      FtlSysBlkInit
19602         cbnz    w0, .L2633
19603         adrp    x0, :got:gFtlInitStatus
19604         mov     w1, 1
19605         ldr     x0, [x0, #:got_lo12:gFtlInitStatus]
19606         str     w1, [x0]
19607 .L2633:
19608         mov     w0, 0
19609         ldr     x25, [sp,64]
19610         ldp     x19, x20, [sp,16]
19611         ldp     x21, x22, [sp,32]
19612         ldp     x23, x24, [sp,48]
19613         ldp     x29, x30, [sp], 80
19614         ret
19615         .size   FtlLowFormat, .-FtlLowFormat
19616         .align  2
19617         .global FtlReInitForSDUpdata
19618         .type   FtlReInitForSDUpdata, %function
19619 FtlReInitForSDUpdata:
19620         adrp    x0, :got:RK29_NANDC_REG_BASE
19621         stp     x29, x30, [sp, -48]!
19622         add     x29, sp, 0
19623         ldr     x0, [x0, #:got_lo12:RK29_NANDC_REG_BASE]
19624         str     x19, [sp,16]
19625         ldr     x0, [x0]
19626         bl      FlashInit
19627         mov     w1, 0
19628         cbnz    w0, .L2641
19629         bl      FlashLoadFactorBbt
19630         cbz     w0, .L2642
19631         bl      FlashMakeFactorBbt
19632 .L2642:
19633         adrp    x0, :got:gFlashPageBuffer1
19634         ldr     x0, [x0, #:got_lo12:gFlashPageBuffer1]
19635         ldr     x0, [x0]
19636         bl      FlashReadIdbDataRaw
19637         cbz     w0, .L2643
19638         mov     w1, 0
19639         mov     w2, 16
19640         add     x0, x29, 32
19641         bl      FlashReadFacBbtData
19642         mov     w0, 0
19643         ldr     w2, [x29,32]
19644         mov     w1, w0
19645         mov     w4, 1
19646 .L2645:
19647         lsl     w3, w4, w1
19648         add     w1, w1, 1
19649         tst     w3, w2
19650         cset    w3, ne
19651         cmp     w1, 16
19652         add     w0, w0, w3
19653         bne     .L2645
19654         cmp     w0, 6
19655         bhi     .L2646
19656         adrp    x0, :got:gNandIDBResBlkNum
19657         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
19658         b       .L2670
19659 .L2646:
19660         mov     w1, 0
19661         mov     w4, 1
19662 .L2649:
19663         lsl     w3, w4, w1
19664         add     w1, w1, 1
19665         tst     w3, w2
19666         cset    w3, ne
19667         cmp     w1, 24
19668         add     w0, w0, w3
19669         bne     .L2649
19670         cmp     w0, 17
19671         adrp    x0, :got:gNandIDBResBlkNum
19672         ldr     x0, [x0, #:got_lo12:gNandIDBResBlkNum]
19673         bls     .L2670
19674         mov     w1, 36
19675 .L2670:
19676         strb    w1, [x0]
19677         adrp    x1, :got:gNandIDBResBlkNum
19678         adrp    x0, :got:gNandPhyInfo
19679         ldr     x1, [x1, #:got_lo12:gNandIDBResBlkNum]
19680         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
19681         ldrb    w1, [x1]
19682         strh    w1, [x0,26]
19683 .L2643:
19684         adrp    x0, .LC72
19685         adrp    x1, .LC73
19686         add     x1, x1, :lo12:.LC73
19687         add     x0, x0, :lo12:.LC72
19688         mov     w19, 1
19689         bl      printk
19690         adrp    x0, :got:gNandPhyInfo
19691         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
19692         bl      FtlConstantsInit
19693         bl      FtlVariablesInit
19694         adrp    x0, :got:c_ftl_nand_max_sys_blks
19695         ldr     x0, [x0, #:got_lo12:c_ftl_nand_max_sys_blks]
19696         ldrh    w0, [x0]
19697         bl      FtlFreeSysBlkQueueInit
19698 .L2651:
19699         bl      FtlLoadBbt
19700         cbz     w0, .L2652
19701 .L2672:
19702         bl      FtlLowFormat
19703         cmp     w19, 3
19704         bhi     .L2673
19705         add     w19, w19, 1
19706         b       .L2651
19707 .L2673:
19708         mov     w1, -1
19709         b       .L2641
19710 .L2652:
19711         bl      FtlSysBlkInit
19712         cbnz    w0, .L2672
19713         adrp    x1, :got:gFtlInitStatus
19714         mov     w2, 1
19715         ldr     x1, [x1, #:got_lo12:gFtlInitStatus]
19716         str     w2, [x1]
19717         mov     w1, w0
19718 .L2641:
19719         mov     w0, w1
19720         ldr     x19, [sp,16]
19721         ldp     x29, x30, [sp], 48
19722         ret
19723         .size   FtlReInitForSDUpdata, .-FtlReInitForSDUpdata
19724         .align  2
19725         .global IdBlockReadData
19726         .type   IdBlockReadData, %function
19727 IdBlockReadData:
19728         stp     x29, x30, [sp, -176]!
19729         add     x29, sp, 0
19730         stp     x19, x20, [sp,16]
19731         stp     x23, x24, [sp,48]
19732         mov     w20, w0
19733         adrp    x23, :got:gpNandParaInfo
19734         adrp    x0, :got:gBlockPageAlignSize
19735         stp     x21, x22, [sp,32]
19736         ldr     x21, [x23, #:got_lo12:gpNandParaInfo]
19737         mov     x22, x2
19738         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
19739         stp     x27, x28, [sp,80]
19740         stp     x25, x26, [sp,64]
19741         mov     w27, w1
19742         mov     w1, w20
19743         ldr     w3, [x0]
19744         mov     w2, w27
19745         ldr     x0, [x21]
19746         mov     x26, x23
19747         ldrb    w19, [x0,9]
19748         adrp    x0, .LC119
19749         add     x0, x0, :lo12:.LC119
19750         mul     w19, w3, w19
19751         bl      printk
19752         ldr     x0, [x21]
19753         mov     w5, 4
19754         uxth    w19, w19
19755         mov     w21, 0
19756         adrp    x6, :got:slcPageToMlcPageTbl
19757         adrp    x7, :got:gFlashPageBuffer1
19758         ldrb    w28, [x0,9]
19759         adrp    x8, :got:gNandFlashEccBits
19760         udiv    w0, w20, w19
19761         adrp    x9, :got:gNandFlashIDBEccBits
19762         msub    w19, w0, w19, w20
19763         sub     w4, w20, w19
19764         mul     w3, w19, w28
19765         ubfx    x3, x3, 2, 2
19766 .L2675:
19767         cmp     w21, w27
19768         bcs     .L2677
19769         add     w0, w21, w19
19770         ldr     x1, [x6, #:got_lo12:slcPageToMlcPageTbl]
19771         ubfx    x0, x0, 2, 16
19772         ldr     x25, [x7, #:got_lo12:gFlashPageBuffer1]
19773         sub     w23, w5, w3
19774         add     w3, w3, w4
19775         str     x5, [x29,104]
19776         ldrh    w24, [x1,w0,sxtw 1]
19777         uxth    w23, w23
19778         ldr     x0, [x26, #:got_lo12:gpNandParaInfo]
19779         ldr     x2, [x25]
19780         str     x4, [x29,112]
19781         ldr     x0, [x0]
19782         str     x6, [x29,120]
19783         str     x7, [x29,128]
19784         ldrb    w1, [x0,9]
19785         ldr     x0, [x8, #:got_lo12:gNandFlashEccBits]
19786         str     x8, [x29,152]
19787         str     x9, [x29,168]
19788         ldrb    w10, [x0]
19789         ldr     x0, [x9, #:got_lo12:gNandFlashIDBEccBits]
19790         madd    w24, w24, w28, w3
19791         str     x10, [x29,160]
19792         ldrb    w0, [x0]
19793         str     x2, [x29,136]
19794         str     x1, [x29,144]
19795         bl      FlashBchSel
19796         ldr     x1, [x29,144]
19797         mov     x3, 0
19798         ldr     x2, [x29,136]
19799         mov     w0, 0
19800         udiv    w1, w24, w1
19801         bl      FlashReadPage
19802         ldr     x10, [x29,160]
19803         mov     w0, w10
19804         bl      FlashBchSel
19805         ubfiz   x0, x21, 9, 16
19806         ldr     x1, [x25]
19807         add     x0, x22, x0
19808         mov     w2, 2048
19809         add     w21, w23, w21
19810         bl      ftl_memcpy
19811         uxth    w21, w21
19812         mov     w3, 0
19813         ldr     x5, [x29,104]
19814         ldr     x4, [x29,112]
19815         ldr     x6, [x29,120]
19816         ldr     x7, [x29,128]
19817         ldr     x8, [x29,152]
19818         ldr     x9, [x29,168]
19819         b       .L2675
19820 .L2677:
19821         adrp    x0, .LC120
19822         mov     w1, w20
19823         mov     w2, w27
19824         mov     w3, 0
19825         add     x0, x0, :lo12:.LC120
19826         bl      printk
19827         mov     w0, 0
19828         ldp     x19, x20, [sp,16]
19829         ldp     x21, x22, [sp,32]
19830         ldp     x23, x24, [sp,48]
19831         ldp     x25, x26, [sp,64]
19832         ldp     x27, x28, [sp,80]
19833         ldp     x29, x30, [sp], 176
19834         ret
19835         .size   IdBlockReadData, .-IdBlockReadData
19836         .align  2
19837         .global IDBlockWriteData
19838         .type   IDBlockWriteData, %function
19839 IDBlockWriteData:
19840         stp     x29, x30, [sp, -224]!
19841         add     x29, sp, 0
19842         stp     x21, x22, [sp,32]
19843         stp     x25, x26, [sp,64]
19844         adrp    x21, :got:gpNandParaInfo
19845         mov     w25, w0
19846         adrp    x0, :got:gBlockPageAlignSize
19847         stp     x23, x24, [sp,48]
19848         ldr     x22, [x21, #:got_lo12:gpNandParaInfo]
19849         mov     w24, 0
19850         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
19851         stp     x27, x28, [sp,80]
19852         stp     x19, x20, [sp,16]
19853         mov     w27, w1
19854         mov     x20, x2
19855         ldr     w3, [x0]
19856         mov     w1, w25
19857         ldr     x0, [x22]
19858         mov     w2, w27
19859         add     x28, x29, 160
19860         ldrb    w19, [x0,9]
19861         adrp    x0, .LC121
19862         add     x0, x0, :lo12:.LC121
19863         mul     w19, w3, w19
19864         bl      printk
19865         adrp    x0, :got:gNandPhyInfo
19866         mov     w2, 0
19867         uxth    w19, w19
19868         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
19869         ldrh    w1, [x0,20]
19870         mov     w0, 0
19871         udiv    w1, w25, w1
19872         bl      FlashEraseBlock
19873         udiv    w26, w25, w19
19874         ldr     x0, [x22]
19875         adrp    x5, :got:slcPageToMlcPageTbl
19876         adrp    x6, :got:gNandFlashEccBits
19877         adrp    x7, :got:gNandFlashIDBEccBits
19878         ldrb    w22, [x0,9]
19879         msub    w26, w26, w19, w25
19880         sub     w23, w25, w26
19881 .L2679:
19882         cmp     w24, w27
19883         bcs     .L2685
19884         add     w4, w24, w26
19885         lsr     w4, w4, 2
19886         and     w19, w4, 65535
19887         uxth    w0, w4
19888         cbz     w0, .L2680
19889         ldr     x0, [x5, #:got_lo12:slcPageToMlcPageTbl]
19890         add     w1, w19, 1
19891         str     wzr, [x28,4]
19892         ldrh    w4, [x0,w1,sxtw 1]
19893         sub     w4, w4, #1
19894         lsl     w4, w4, 2
19895         str     w4, [x28]
19896 .L2680:
19897         ldr     x4, [x5, #:got_lo12:slcPageToMlcPageTbl]
19898         ubfiz   x2, x24, 9, 16
19899         ldr     x0, [x6, #:got_lo12:gNandFlashEccBits]
19900         add     x2, x20, x2
19901         str     x5, [x29,104]
19902         add     w24, w24, 4
19903         ldrh    w1, [x4,w19,sxtw 1]
19904         ldrb    w8, [x0]
19905         uxth    w24, w24
19906         ldr     x0, [x7, #:got_lo12:gNandFlashIDBEccBits]
19907         madd    w1, w1, w22, w23
19908         str     x6, [x29,136]
19909         ldrb    w0, [x0]
19910         str     x7, [x29,152]
19911         str     x4, [x29,112]
19912         str     x8, [x29,144]
19913         str     x1, [x29,120]
19914         str     x2, [x29,128]
19915         bl      FlashBchSel
19916         ldr     x0, [x21, #:got_lo12:gpNandParaInfo]
19917         ldr     x1, [x29,120]
19918         ldr     x2, [x29,128]
19919         ldr     x0, [x0]
19920         ldrb    w3, [x0,9]
19921         mov     w0, 0
19922         udiv    w1, w1, w3
19923         mov     x3, x28
19924         bl      FlashProgPage
19925         ldr     x8, [x29,144]
19926         mov     w0, w8
19927         bl      FlashBchSel
19928         udiv    w1, w23, w22
19929         ldr     x4, [x29,112]
19930         mov     w0, 0
19931         ldrh    w2, [x4,w19,sxtw 1]
19932         add     w2, w2, 1
19933         bl      FlashPageProgMsbFFData
19934         ldr     x5, [x29,104]
19935         ldr     x6, [x29,136]
19936         ldr     x7, [x29,152]
19937         b       .L2679
19938 .L2685:
19939         adrp    x0, .LC122
19940         mov     w1, w25
19941         mov     w2, w27
19942         mov     w3, 0
19943         add     x0, x0, :lo12:.LC122
19944         bl      printk
19945         mov     w0, 0
19946         ldp     x19, x20, [sp,16]
19947         ldp     x21, x22, [sp,32]
19948         ldp     x23, x24, [sp,48]
19949         ldp     x25, x26, [sp,64]
19950         ldp     x27, x28, [sp,80]
19951         ldp     x29, x30, [sp], 224
19952         ret
19953         .size   IDBlockWriteData, .-IDBlockWriteData
19954         .align  2
19955         .global write_idblock
19956         .type   write_idblock, %function
19957 write_idblock:
19958         stp     x29, x30, [sp, -112]!
19959         add     x29, sp, 0
19960         stp     x23, x24, [sp,48]
19961         mov     w24, w0
19962         adrp    x0, :got:gpNandParaInfo
19963         stp     x19, x20, [sp,16]
19964         stp     x21, x22, [sp,32]
19965         ldr     x0, [x0, #:got_lo12:gpNandParaInfo]
19966         mov     x21, x1
19967         stp     x25, x26, [sp,64]
19968         stp     x27, x28, [sp,80]
19969         mov     w1, 192
19970         mov     x23, x2
19971         ldr     x0, [x0]
19972         movk    w1, 0x240, lsl 16
19973         mov     w2, 6
19974         ldrb    w22, [x0,9]
19975         adrp    x0, :got:gBlockPageAlignSize
19976         ldr     x0, [x0, #:got_lo12:gBlockPageAlignSize]
19977         ldr     w25, [x0]
19978         mov     x0, 59392
19979         movk    x0, 0x3, lsl 16
19980         bl      kmalloc_order_trace
19981         mov     x20, x0
19982         mov     w0, -1
19983         cbz     x20, .L2696
19984         add     w19, w24, 511
19985         lsr     w19, w19, 9
19986         cmp     w19, 255
19987         bhi     .L2688
19988         ubfiz   x0, x19, 9, 23
19989         mov     w2, 256
19990         add     x0, x21, x0
19991         mov     x1, x21
19992         sub     w2, w2, w19
19993         bl      memcpy
19994 .L2688:
19995         add     w19, w19, 128
19996         mov     w0, 256
19997         cmp     w19, 256
19998         adrp    x26, :got:gNandIDBResBlkNum
19999         csel    w19, w19, w0, ls
20000         adrp    x0, .LC123
20001         add     x0, x0, :lo12:.LC123
20002         mov     x1, x23
20003         mov     w2, 4
20004         mov     w3, 5
20005         bl      rknand_print_hex
20006         ldr     x26, [x26, #:got_lo12:gNandIDBResBlkNum]
20007         ldr     w1, [x21,512]
20008         adrp    x0, .LC124
20009         add     x0, x0, :lo12:.LC124
20010         ldrb    w2, [x26]
20011         bl      printk
20012         ldrb    w0, [x26]
20013         ldr     w1, [x21,512]
20014         cmp     w1, w0
20015         bls     .L2689
20016         str     w0, [x21,512]
20017 .L2689:
20018         adrp    x0, .LC125
20019         mov     w2, w24
20020         mul     w22, w22, w25
20021         add     x0, x0, :lo12:.LC125
20022         mov     w1, w19
20023         mov     x28, 0
20024         adrp    x25, .LC126
20025         bl      printk
20026         adrp    x26, .LC127
20027         adrp    x27, .LC128
20028         lsl     w0, w19, 7
20029         uxth    w22, w22
20030         str     w0, [x29,108]
20031         mov     w24, w28
20032         add     x25, x25, :lo12:.LC126
20033         add     x26, x26, :lo12:.LC127
20034         add     x27, x27, :lo12:.LC128
20035 .L2694:
20036         adrp    x0, :got:gNandPhyInfo
20037         ldr     w2, [x23,x28,lsl 2]
20038         mov     w8, w28
20039         ldr     x0, [x0, #:got_lo12:gNandPhyInfo]
20040         ldrh    w0, [x0,26]
20041         cmp     w2, w0
20042         bcs     .L2690
20043         adrp    x0, :got:gNandFlashIdbBlockAddr
20044         ldr     x0, [x0, #:got_lo12:gNandFlashIdbBlockAddr]
20045         ldr     w0, [x0]
20046         cmp     w2, w0
20047         bcc     .L2690
20048         mov     w1, 0
20049         mov     x2, 512
20050         mov     x0, x20
20051         str     x8, [x29,96]
20052         bl      memset
20053         ldr     w0, [x23,x28,lsl 2]
20054         mov     w1, w19
20055         mov     x2, x21
20056         mul     w0, w22, w0
20057         bl      IDBlockWriteData
20058         ldr     w0, [x23,x28,lsl 2]
20059         mov     w1, w19
20060         mov     x2, x20
20061         mul     w0, w22, w0
20062         bl      IdBlockReadData
20063         ldr     x8, [x29,96]
20064         mov     x0, 0
20065 .L2691:
20066         ldr     w1, [x29,108]
20067         mov     w3, w0
20068         cmp     w0, w1
20069         bcs     .L2701
20070         ldr     w4, [x20,x0,lsl 2]
20071         mov     x7, x0
20072         add     x0, x0, 1
20073         add     x1, x21, x0, lsl 2
20074         ldr     w5, [x1,-4]
20075         cmp     w4, w5
20076         beq     .L2691
20077         ldr     w2, [x23,x28,lsl 2]
20078         mov     w1, w8
20079         mov     x0, x25
20080         str     x7, [x29,96]
20081         bl      printk
20082         ldr     x7, [x29,96]
20083         mov     x0, x26
20084         mov     w2, 4
20085         mov     w3, 256
20086         and     x4, x7, -256
20087         lsl     x4, x4, 2
20088         str     x4, [x29,96]
20089         add     x1, x21, x4
20090         bl      rknand_print_hex
20091         ldr     x4, [x29,96]
20092         mov     w3, 256
20093         mov     x0, x27
20094         mov     w2, 4
20095         add     x1, x20, x4
20096         bl      rknand_print_hex
20097         mov     x0, x20
20098         mov     w1, 0
20099         mov     x2, 512
20100         bl      memset
20101         ldr     w0, [x23,x28,lsl 2]
20102         mov     w1, 4
20103         mov     x2, x20
20104         mul     w0, w22, w0
20105         bl      IDBlockWriteData
20106         adrp    x0, .LC129
20107         add     x0, x0, :lo12:.LC129
20108         bl      printk
20109         b       .L2690
20110 .L2701:
20111         add     w24, w24, 1
20112 .L2690:
20113         add     x28, x28, 1
20114         cmp     x28, 5
20115         bne     .L2694
20116         mov     x0, x20
20117         bl      kfree
20118         cmp     w24, wzr
20119         csetm   w0, eq
20120 .L2696:
20121         ldp     x19, x20, [sp,16]
20122         ldp     x21, x22, [sp,32]
20123         ldp     x23, x24, [sp,48]
20124         ldp     x25, x26, [sp,64]
20125         ldp     x27, x28, [sp,80]
20126         ldp     x29, x30, [sp], 112
20127         ret
20128         .size   write_idblock, .-write_idblock
20129         .align  2
20130         .global CRC_32
20131         .type   CRC_32, %function
20132 CRC_32:
20133         mov     x2, 0
20134         mov     x4, x0
20135         adrp    x5, :got:gTable_Crc32
20136         mov     w0, w2
20137 .L2703:
20138         cmp     w1, w2
20139         bls     .L2705
20140         ldrb    w3, [x4,x2]
20141         add     x2, x2, 1
20142         ldr     x6, [x5, #:got_lo12:gTable_Crc32]
20143         eor     w3, w3, w0, lsr 24
20144         ldr     w3, [x6,w3,uxtw 2]
20145         eor     w0, w3, w0, lsl 8
20146         b       .L2703
20147 .L2705:
20148         ret
20149         .size   CRC_32, .-CRC_32
20150         .align  2
20151         .type   rknand_sys_storage_ioctl, %function
20152 rknand_sys_storage_ioctl:
20153         sub     sp, sp, #528
20154         stp     x29, x30, [sp, -48]!
20155         add     x29, sp, 0
20156         stp     x19, x20, [sp,16]
20157         stp     x21, x22, [sp,32]
20158         mov     x19, x2
20159         mov     w21, w1
20160         ldr     x20, [x0,208]
20161         mov     w0, 29187
20162         movk    w0, 0x4004, lsl 16
20163         cmp     w1, w0
20164         beq     .L2708
20165         mov     w0, 29187
20166         movk    w0, 0x4004, lsl 16
20167         cmp     w1, w0
20168         bhi     .L2709
20169         mov     w0, 25726
20170         movk    w0, 0x4004, lsl 16
20171         cmp     w1, w0
20172         beq     .L2710
20173         mov     w0, 25726
20174         movk    w0, 0x4004, lsl 16
20175         cmp     w1, w0
20176         bhi     .L2711
20177         mov     w0, 25601
20178         movk    w0, 0x4004, lsl 16
20179         cmp     w1, w0
20180         beq     .L2712
20181         mov     w0, 25601
20182         movk    w0, 0x4004, lsl 16
20183         cmp     w1, w0
20184         bhi     .L2713
20185         mov     w0, 25364
20186         movk    w0, 0x4004, lsl 16
20187         cmp     w1, w0
20188         bne     .L2768
20189         bl      rknand_dev_flush
20190         b       .L2851
20191 .L2713:
20192         mov     w0, 25602
20193         movk    w0, 0x4004, lsl 16
20194         cmp     w1, w0
20195         beq     .L2715
20196         mov     w0, 25603
20197         movk    w0, 0x4004, lsl 16
20198         cmp     w1, w0
20199         beq     .L2716
20200         b       .L2768
20201 .L2711:
20202         mov     w0, 27688
20203         movk    w0, 0x4004, lsl 16
20204         cmp     w1, w0
20205         beq     .L2717
20206         mov     w0, 27688
20207         movk    w0, 0x4004, lsl 16
20208         cmp     w1, w0
20209         bhi     .L2718
20210         mov     w0, 25727
20211         movk    w0, 0x4004, lsl 16
20212         cmp     w1, w0
20213         beq     .L2719
20214         b       .L2768
20215 .L2718:
20216         mov     w0, 27698
20217         movk    w0, 0x4004, lsl 16
20218         cmp     w1, w0
20219         beq     .L2717
20220         mov     w0, 27708
20221         movk    w0, 0x4004, lsl 16
20222         cmp     w1, w0
20223         beq     .L2717
20224         b       .L2768
20225 .L2709:
20226         mov     w0, 29267
20227         movk    w0, 0x4004, lsl 16
20228         cmp     w1, w0
20229         beq     .L2720
20230         mov     w0, 29267
20231         movk    w0, 0x4004, lsl 16
20232         cmp     w1, w0
20233         bhi     .L2721
20234         mov     w0, 29189
20235         movk    w0, 0x4004, lsl 16
20236         cmp     w1, w0
20237         beq     .L2722
20238         mov     w0, 29189
20239         movk    w0, 0x4004, lsl 16
20240         cmp     w1, w0
20241         bcc     .L2723
20242         mov     w0, 29210
20243         movk    w0, 0x4004, lsl 16
20244         cmp     w1, w0
20245         beq     .L2724
20246         mov     w0, 29266
20247         movk    w0, 0x4004, lsl 16
20248         cmp     w1, w0
20249         beq     .L2725
20250         b       .L2768
20251 .L2721:
20252         mov     w0, 30225
20253         movk    w0, 0x4004, lsl 16
20254         cmp     w1, w0
20255         beq     .L2726
20256         mov     w0, 30225
20257         movk    w0, 0x4004, lsl 16
20258         cmp     w1, w0
20259         bhi     .L2727
20260         mov     w0, 29268
20261         movk    w0, 0x4004, lsl 16
20262         cmp     w1, w0
20263         beq     .L2728
20264         mov     w0, 30224
20265         movk    w0, 0x4004, lsl 16
20266         cmp     w1, w0
20267         beq     .L2729
20268         b       .L2768
20269 .L2727:
20270         mov     w0, 30226
20271         movk    w0, 0x4004, lsl 16
20272         cmp     w1, w0
20273         beq     .L2729
20274         mov     w0, 30227
20275         movk    w0, 0x4004, lsl 16
20276         cmp     w1, w0
20277         beq     .L2726
20278         b       .L2768
20279 .L2723:
20280         adrp    x0, .LC130
20281         add     x0, x0, :lo12:.LC130
20282         bl      printk
20283         mov     x0, sp
20284         and     x0, x0, -16384
20285         ldr     x2, [x0,8]
20286         mov     x0, x19
20287 #APP
20288 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20289         adds x0, x0, 512; ccmp x0, x2, #2, cc; cset x1, ls
20290 // 0 "" 2
20291 #NO_APP
20292         mov     x0, x20
20293         cbz     x1, .L2730
20294         mov     x1, x19
20295         mov     x2, 512
20296         bl      __copy_from_user
20297         cbz     x0, .L2731
20298         b       .L2732
20299 .L2730:
20300         mov     x2, 512
20301 .L2842:
20302         bl      memset
20303 .L2732:
20304         adrp    x0, .LC131
20305         add     x0, x0, :lo12:.LC131
20306         b       .L2855
20307 .L2731:
20308         adrp    x0, .LC132
20309         ldr     w1, [x20]
20310         ldr     w2, [x20,4]
20311         add     x0, x0, :lo12:.LC132
20312         bl      printk
20313         ldr     w21, [x20,4]
20314         cmp     w21, 8
20315         bhi     .L2854
20316         bl      rknand_device_unlock
20317         ldr     w0, [x20]
20318         mov     w1, w21
20319         mov     x2, x20
20320         bl      IdBlockReadData
20321         bl      rknand_device_unlock
20322         mov     x0, sp
20323         and     x0, x0, -16384
20324         ubfiz   x2, x21, 9, 23
20325         ldr     x1, [x0,8]
20326         mov     x0, x19
20327 #APP
20328 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20329         adds x0, x0, x2; ccmp x0, x1, #2, cc; cset x3, ls
20330 // 0 "" 2
20331 #NO_APP
20332         cbz     x3, .L2734
20333         mov     x0, x19
20334         mov     x1, x20
20335         bl      __copy_to_user
20336         mov     x2, x0
20337 .L2734:
20338         cbz     x2, .L2851
20339         adrp    x0, .LC133
20340         add     x0, x0, :lo12:.LC133
20341 .L2855:
20342         bl      printk
20343 .L2854:
20344         mov     x19, -14
20345         b       .L2707
20346 .L2722:
20347         adrp    x0, .LC134
20348         add     x0, x0, :lo12:.LC134
20349         bl      printk
20350         mov     x0, sp
20351         and     x0, x0, -16384
20352         ldr     x2, [x0,8]
20353         mov     x0, x19
20354 #APP
20355 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20356         adds x0, x0, 4096; ccmp x0, x2, #2, cc; cset x1, ls
20357 // 0 "" 2
20358 #NO_APP
20359         mov     x0, x20
20360         cbz     x1, .L2737
20361         mov     x1, x19
20362         mov     x2, 4096
20363         bl      __copy_from_user
20364         cbz     x0, .L2839
20365         b       .L2732
20366 .L2737:
20367         mov     x2, 4096
20368         b       .L2842
20369 .L2839:
20370         ldr     w1, [x20]
20371         adrp    x0, .LC135
20372         ldr     w2, [x20,4]
20373         add     x0, x0, :lo12:.LC135
20374         bl      printk
20375         adrp    x0, :got:g_idb_buffer
20376         mov     x19, x0
20377         ldr     x21, [x0, #:got_lo12:g_idb_buffer]
20378         ldr     x1, [x21]
20379         cbz     x1, .L2740
20380 .L2743:
20381         ldr     w2, [x20,4]
20382         cmp     w2, 4088
20383         bls     .L2741
20384         b       .L2854
20385 .L2740:
20386         mov     w1, 192
20387         mov     x0, 260096
20388         movk    w1, 0x240, lsl 16
20389         mov     w2, 6
20390         bl      kmalloc_order_trace
20391         str     x0, [x21]
20392         cbnz    x0, .L2743
20393         b       .L2854
20394 .L2741:
20395         ldr     w0, [x20]
20396         mov     w1, 55296
20397         movk    w1, 0x3, lsl 16
20398         cmp     w0, w1
20399         bhi     .L2854
20400         ldr     x19, [x19, #:got_lo12:g_idb_buffer]
20401         uxtw    x2, w2
20402         ldr     x1, [x19]
20403         add     x0, x1, x0, uxtw
20404         add     x1, x20, 8
20405         bl      memcpy
20406         b       .L2851
20407 .L2725:
20408         adrp    x0, .LC136
20409         add     x0, x0, :lo12:.LC136
20410         bl      printk
20411         mov     x0, sp
20412         and     x0, x0, -16384
20413         mov     x1, x19
20414         ldr     x2, [x0,8]
20415 #APP
20416 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20417         adds x1, x1, 28; ccmp x1, x2, #2, cc; cset x0, ls
20418 // 0 "" 2
20419 #NO_APP
20420         cbz     x0, .L2744
20421         mov     x0, x20
20422         mov     x1, x19
20423         mov     x2, 28
20424         bl      __copy_from_user
20425         cbz     x0, .L2840
20426         b       .L2732
20427 .L2744:
20428         stp     xzr, xzr, [x20]
20429         str     x0, [x20,16]
20430         str     w0, [x20,24]
20431         b       .L2732
20432 .L2840:
20433         ldr     w1, [x20]
20434         adrp    x0, .LC137
20435         ldr     w2, [x20,4]
20436         add     x0, x0, :lo12:.LC137
20437         bl      printk
20438         ldr     w1, [x20]
20439         mov     w0, 59392
20440         movk    w0, 0x3, lsl 16
20441         cmp     w1, w0
20442         bhi     .L2854
20443         adrp    x21, :got:g_idb_buffer
20444         ldr     x21, [x21, #:got_lo12:g_idb_buffer]
20445         ldr     x0, [x21]
20446         cbz     x0, .L2854
20447         ldr     w22, [x20,4]
20448         bl      CRC_32
20449         mov     x19, -2
20450         cmp     w22, w0
20451         bne     .L2707
20452         bl      rknand_device_unlock
20453         ldr     x1, [x21]
20454         add     x2, x20, 8
20455         ldr     w0, [x20]
20456         bl      write_idblock
20457         bl      rknand_device_unlock
20458         ldr     x0, [x21]
20459         bl      kfree
20460         str     xzr, [x21]
20461         b       .L2851
20462 .L2724:
20463         adrp    x0, .LC138
20464         add     x0, x0, :lo12:.LC138
20465         bl      printk
20466         mov     x0, x20
20467         bl      ReadFlashInfo
20468         mov     x0, sp
20469         and     x0, x0, -16384
20470         ldr     x1, [x0,8]
20471         mov     x0, x19
20472 #APP
20473 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20474         adds x0, x0, 11; ccmp x0, x1, #2, cc; cset x2, ls
20475 // 0 "" 2
20476 #NO_APP
20477         cbz     x2, .L2854
20478         mov     x0, x19
20479         mov     x1, x20
20480         mov     x2, 11
20481         b       .L2843
20482 .L2708:
20483         adrp    x0, .LC139
20484         add     x0, x0, :lo12:.LC139
20485         bl      printk
20486         bl      rknand_device_unlock
20487         bl      FtlReInitForSDUpdata
20488         mov     w21, w0
20489         bl      rknand_device_unlock
20490         cbnz    w21, .L2854
20491         bl      nand_blk_add_whole_disk
20492         bl      rknand_device_unlock
20493         mov     w1, w21
20494         mov     w2, 64
20495         mov     x0, x20
20496         bl      FlashReadFacBbtData
20497         bl      rknand_device_unlock
20498         adrp    x0, .LC140
20499         mov     x1, x20
20500         add     x0, x0, :lo12:.LC140
20501         mov     w2, 4
20502         mov     w3, 8
20503         bl      rknand_print_hex
20504         mov     x0, sp
20505         and     x0, x0, -16384
20506         ldr     x1, [x0,8]
20507         mov     x0, x19
20508 #APP
20509 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20510         adds x0, x0, 64; ccmp x0, x1, #2, cc; cset x2, ls
20511 // 0 "" 2
20512 #NO_APP
20513         cbz     x2, .L2854
20514         mov     x0, x19
20515         mov     x1, x20
20516         mov     x2, 64
20517         b       .L2843
20518 .L2720:
20519         adrp    x0, .LC141
20520         add     x0, x0, :lo12:.LC141
20521         bl      printk
20522         adrp    x0, :got:gpDrmKeyInfo
20523         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20524         ldr     x0, [x0]
20525         ldr     w0, [x0,20]
20526         str     w0, [x20]
20527         mov     x0, sp
20528         and     x0, x0, -16384
20529         ldr     x1, [x0,8]
20530         mov     x0, x19
20531 #APP
20532 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20533         adds x0, x0, 4; ccmp x0, x1, #2, cc; cset x2, ls
20534 // 0 "" 2
20535 #NO_APP
20536         cbz     x2, .L2854
20537         mov     x0, x19
20538         mov     x1, x20
20539         mov     x2, 4
20540         b       .L2843
20541 .L2728:
20542         adrp    x0, .LC142
20543         add     x0, x0, :lo12:.LC142
20544         bl      printk
20545         bl      rknand_device_unlock
20546         mov     w1, 264
20547         mov     w2, 2
20548         mov     x3, x20
20549         mov     w0, 16
20550         bl      FtlRead
20551         bl      rknand_device_unlock
20552         mov     x0, sp
20553         and     x0, x0, -16384
20554         ldr     x1, [x0,8]
20555         mov     x0, x19
20556 #APP
20557 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20558         adds x0, x0, 1024; ccmp x0, x1, #2, cc; cset x2, ls
20559 // 0 "" 2
20560 #NO_APP
20561         cbz     x2, .L2854
20562         mov     x0, x19
20563         mov     x1, x20
20564         mov     x2, 1024
20565         b       .L2843
20566 .L2712:
20567         adrp    x0, .LC143
20568         add     x0, x0, :lo12:.LC143
20569         bl      printk
20570         mov     x0, sp
20571         and     x0, x0, -16384
20572         ldr     x1, [x0,8]
20573         mov     x0, x19
20574 #APP
20575 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20576         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20577 // 0 "" 2
20578 #NO_APP
20579         cbz     x2, .L2747
20580         add     x20, x29, 56
20581         mov     x1, x19
20582         mov     x0, x20
20583         mov     x2, 520
20584         bl      __copy_from_user
20585         cbz     x0, .L2841
20586         b       .L2732
20587 .L2715:
20588         adrp    x0, .LC144
20589         add     x0, x0, :lo12:.LC144
20590         bl      printk
20591         mov     x0, sp
20592         and     x0, x0, -16384
20593         ldr     x1, [x0,8]
20594         mov     x0, x19
20595 #APP
20596 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20597         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20598 // 0 "" 2
20599 #NO_APP
20600         cbnz    x2, .L2856
20601 .L2747:
20602         add     x0, x29, 56
20603         mov     w1, 0
20604         mov     x2, 520
20605         b       .L2842
20606 .L2841:
20607         ldr     w1, [x20]
20608         mov     w0, 21060
20609         movk    w0, 0x4b4d, lsl 16
20610         cmp     w1, w0
20611         beq     .L2749
20612 .L2750:
20613         mov     x19, -1
20614         b       .L2736
20615 .L2749:
20616         ldr     w0, [x20,4]
20617         cmp     w0, 512
20618         bhi     .L2750
20619         adrp    x1, :got:gpDrmKeyInfo
20620         mov     x0, x20
20621         mov     x2, 512
20622         ldr     x1, [x1, #:got_lo12:gpDrmKeyInfo]
20623         ldr     x1, [x1]
20624         bl      memcpy
20625         adrp    x0, :got:SecureBootCheckOK
20626         ldr     x0, [x0, #:got_lo12:SecureBootCheckOK]
20627         ldr     w1, [x0]
20628         mov     w0, 5161
20629         movk    w0, 0xc059, lsl 16
20630         cmp     w1, w0
20631         beq     .L2751
20632         str     wzr, [x20,8]
20633         add     x0, x20, 64
20634         str     wzr, [x20,12]
20635         mov     w1, 0
20636         mov     x2, 128
20637         bl      memset
20638 .L2751:
20639         str     wzr, [x20,16]
20640         add     x0, x20, 256
20641         mov     w1, 0
20642         mov     x2, 256
20643         bl      memset
20644         b       .L2848
20645 .L2856:
20646         add     x20, x29, 56
20647         mov     x1, x19
20648         mov     x0, x20
20649         mov     x2, 520
20650         bl      __copy_from_user
20651         cbnz    x0, .L2732
20652         ldr     w1, [x20]
20653         mov     w0, 21060
20654         movk    w0, 0x4b4d, lsl 16
20655         cmp     w1, w0
20656         bne     .L2750
20657         ldr     w0, [x20,4]
20658         cmp     w0, 512
20659         bhi     .L2750
20660         adrp    x0, :got:SecureBootCheckOK
20661         mov     x19, -2
20662         ldr     x0, [x0, #:got_lo12:SecureBootCheckOK]
20663         ldr     w1, [x0]
20664         mov     w0, 5161
20665         movk    w0, 0xc059, lsl 16
20666         cmp     w1, w0
20667         bne     .L2707
20668         ldr     w1, [x20,12]
20669         mov     x19, -3
20670         sub     w0, w1, #1
20671         cmp     w0, 127
20672         bhi     .L2707
20673         adrp    x0, :got:gpDrmKeyInfo
20674         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20675         ldr     x19, [x0]
20676         add     x0, x19, 64
20677         str     w1, [x19,12]
20678         add     x1, x20, 64
20679         ldr     w2, [x20,12]
20680         bl      memcpy
20681         mov     w0, 1
20682         mov     x1, x19
20683         b       .L2853
20684 .L2719:
20685         adrp    x0, .LC145
20686         add     x0, x0, :lo12:.LC145
20687         bl      printk
20688         mov     x0, sp
20689         and     x0, x0, -16384
20690         ldr     x1, [x0,8]
20691         mov     x0, x19
20692 #APP
20693 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20694         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20695 // 0 "" 2
20696 #NO_APP
20697         cbz     x2, .L2747
20698         add     x20, x29, 56
20699         mov     x1, x19
20700         mov     x0, x20
20701         mov     x2, 520
20702         bl      __copy_from_user
20703         cbnz    x0, .L2732
20704         ldr     w1, [x20]
20705         mov     w0, 17476
20706         movk    w0, 0x4253, lsl 16
20707         cmp     w1, w0
20708         bne     .L2750
20709         ldr     w0, [x20,4]
20710         cmp     w0, 512
20711         bhi     .L2750
20712         adrp    x19, :got:SecureBootEn
20713         ldr     x0, [x19, #:got_lo12:SecureBootEn]
20714         ldr     w0, [x0]
20715         cbnz    w0, .L2752
20716 .L2755:
20717         mov     x19, 0
20718         b       .L2707
20719 .L2752:
20720         adrp    x0, :got:gpBootConfig
20721         mov     w3, 22867
20722         movk    w3, 0x4453, lsl 16
20723         ldr     x1, [x0, #:got_lo12:gpBootConfig]
20724         ldr     x2, [x1]
20725         ldr     w4, [x2]
20726         cmp     w4, w3
20727         beq     .L2753
20728         mov     w3, 22867
20729         movk    w3, 0x4453, lsl 16
20730         str     w3, [x2]
20731         mov     w3, 504
20732         ldr     x2, [x1]
20733         str     w3, [x2,4]
20734         ldr     x1, [x1]
20735         str     wzr, [x1,8]
20736         str     wzr, [x1,12]
20737 .L2753:
20738         ldr     x0, [x0, #:got_lo12:gpBootConfig]
20739         ldr     x1, [x0]
20740         mov     w0, 0
20741         str     wzr, [x1,16]
20742         bl      StorageSysDataStore
20743         adrp    x0, :got:gpDrmKeyInfo
20744         mov     w3, 21060
20745         movk    w3, 0x4b4d, lsl 16
20746         ldr     x1, [x0, #:got_lo12:gpDrmKeyInfo]
20747         ldr     x2, [x1]
20748         ldr     w4, [x2]
20749         cmp     w4, w3
20750         beq     .L2754
20751         mov     w3, 21060
20752         movk    w3, 0x4b4d, lsl 16
20753         str     w3, [x2]
20754         mov     w3, 504
20755         ldr     x2, [x1]
20756         str     w3, [x2,4]
20757         ldr     x1, [x1]
20758         str     wzr, [x1,8]
20759 .L2754:
20760         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20761         mov     w1, 0
20762         mov     x2, 128
20763         ldr     x20, [x0]
20764         add     x0, x20, 64
20765         str     wzr, [x20,12]
20766         bl      memset
20767         mov     w0, 1
20768         mov     x1, x20
20769         bl      StorageSysDataStore
20770         ldr     x19, [x19, #:got_lo12:SecureBootEn]
20771         adrp    x0, :got:SecureBootCheckOK
20772         str     wzr, [x19]
20773         ldr     x0, [x0, #:got_lo12:SecureBootCheckOK]
20774         str     wzr, [x0]
20775         b       .L2851
20776 .L2710:
20777         adrp    x0, .LC146
20778         add     x0, x0, :lo12:.LC146
20779         bl      printk
20780         mov     x0, sp
20781         and     x0, x0, -16384
20782         ldr     x1, [x0,8]
20783         mov     x0, x19
20784 #APP
20785 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20786         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20787 // 0 "" 2
20788 #NO_APP
20789         cbz     x2, .L2747
20790         add     x20, x29, 56
20791         mov     x1, x19
20792         mov     x0, x20
20793         mov     x2, 520
20794         bl      __copy_from_user
20795         cbnz    x0, .L2732
20796         ldr     w2, [x20]
20797         mov     w1, 20037
20798         movk    w1, 0x4253, lsl 16
20799         cmp     w2, w1
20800         bne     .L2750
20801         ldr     w1, [x20,4]
20802         cmp     w1, 512
20803         bhi     .L2750
20804         adrp    x19, :got:SecureBootEn
20805         ldr     x1, [x19, #:got_lo12:SecureBootEn]
20806         ldr     w1, [x1]
20807         cmp     w1, 1
20808         beq     .L2755
20809         adrp    x1, :got:gpBootConfig
20810         mov     w4, 22867
20811         movk    w4, 0x4453, lsl 16
20812         ldr     x2, [x1, #:got_lo12:gpBootConfig]
20813         ldr     x3, [x2]
20814         ldr     w5, [x3]
20815         cmp     w5, w4
20816         beq     .L2756
20817         mov     w4, 22867
20818         movk    w4, 0x4453, lsl 16
20819         str     w4, [x3]
20820         mov     w4, 504
20821         ldr     x3, [x2]
20822         str     w4, [x3,4]
20823         ldr     x2, [x2]
20824         str     w0, [x2,8]
20825         str     w0, [x2,12]
20826 .L2756:
20827         ldr     x1, [x1, #:got_lo12:gpBootConfig]
20828         mov     w0, 1
20829         ldr     x1, [x1]
20830         str     w0, [x1,16]
20831         mov     w0, 0
20832         bl      StorageSysDataStore
20833         adrp    x0, :got:gpDrmKeyInfo
20834         mov     w3, 21060
20835         movk    w3, 0x4b4d, lsl 16
20836         ldr     x1, [x0, #:got_lo12:gpDrmKeyInfo]
20837         ldr     x2, [x1]
20838         ldr     w4, [x2]
20839         cmp     w4, w3
20840         beq     .L2757
20841         mov     w3, 21060
20842         movk    w3, 0x4b4d, lsl 16
20843         str     w3, [x2]
20844         mov     w3, 504
20845         ldr     x2, [x1]
20846         str     w3, [x2,4]
20847         ldr     x1, [x1]
20848         str     wzr, [x1,8]
20849 .L2757:
20850         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20851         mov     w1, 0
20852         mov     x2, 128
20853         ldr     x20, [x0]
20854         add     x0, x20, 64
20855         str     wzr, [x20,12]
20856         bl      memset
20857         mov     w0, 1
20858         mov     x1, x20
20859         bl      StorageSysDataStore
20860         ldr     x19, [x19, #:got_lo12:SecureBootEn]
20861         mov     w0, 1
20862         str     w0, [x19]
20863         b       .L2851
20864 .L2716:
20865         adrp    x0, .LC147
20866         add     x0, x0, :lo12:.LC147
20867         bl      printk
20868         mov     x0, sp
20869         and     x0, x0, -16384
20870         ldr     x1, [x0,8]
20871         mov     x0, x19
20872 #APP
20873 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20874         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20875 // 0 "" 2
20876 #NO_APP
20877         cbz     x2, .L2747
20878         add     x20, x29, 56
20879         mov     x1, x19
20880         mov     x0, x20
20881         mov     x2, 520
20882         bl      __copy_from_user
20883         cbnz    x0, .L2732
20884         ldr     w1, [x20]
20885         mov     w0, 20051
20886         movk    w0, 0x4144, lsl 16
20887         cmp     w1, w0
20888         bne     .L2750
20889         ldr     w2, [x20,4]
20890         cmp     w2, 512
20891         bhi     .L2750
20892         adrp    x1, :got:gSnSectorData
20893         add     x0, x20, 8
20894         uxtw    x2, w2
20895         ldr     x1, [x1, #:got_lo12:gSnSectorData]
20896         b       .L2850
20897 .L2717:
20898         mov     w0, 27698
20899         movk    w0, 0x4004, lsl 16
20900         cmp     w21, w0
20901         bne     .L2758
20902         adrp    x0, .LC148
20903         add     x0, x0, :lo12:.LC148
20904         b       .L2845
20905 .L2758:
20906         mov     w0, 27708
20907         movk    w0, 0x4004, lsl 16
20908         cmp     w21, w0
20909         bne     .L2760
20910         adrp    x0, .LC149
20911         add     x0, x0, :lo12:.LC149
20912         b       .L2845
20913 .L2760:
20914         adrp    x0, .LC150
20915         add     x0, x0, :lo12:.LC150
20916 .L2845:
20917         bl      printk
20918         mov     x0, sp
20919         and     x0, x0, -16384
20920         ldr     x1, [x0,8]
20921         mov     x0, x19
20922 #APP
20923 // 257 "./arch/arm64/include/asm/uaccess.h" 1
20924         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
20925 // 0 "" 2
20926 #NO_APP
20927         cbz     x2, .L2747
20928         add     x20, x29, 56
20929         mov     x1, x19
20930         mov     x0, x20
20931         mov     x2, 520
20932         bl      __copy_from_user
20933         cbnz    x0, .L2732
20934         ldr     w1, [x20]
20935         mov     w0, 17227
20936         movk    w0, 0x4c4f, lsl 16
20937         cmp     w1, w0
20938         bne     .L2854
20939         mov     w0, 27708
20940         movk    w0, 0x4004, lsl 16
20941         cmp     w21, w0
20942         bne     .L2761
20943         adrp    x0, :got:gpDrmKeyInfo
20944         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20945         ldr     x0, [x0]
20946         ldr     w0, [x0,20]
20947         strb    w0, [x20,8]
20948         str     w0, [x20,4]
20949         mov     x0, sp
20950         and     x0, x0, -16384
20951         ldr     x1, [x0,8]
20952         mov     x0, x19
20953 #APP
20954 // 266 "./arch/arm64/include/asm/uaccess.h" 1
20955         adds x0, x0, 16; ccmp x0, x1, #2, cc; cset x2, ls
20956 // 0 "" 2
20957 #NO_APP
20958         cbz     x2, .L2854
20959         mov     x0, x19
20960         mov     x1, x20
20961         mov     x2, 16
20962         bl      __copy_to_user
20963         cbz     x0, .L2755
20964         b       .L2854
20965 .L2761:
20966         adrp    x2, :got:SecureBootUnlockTryCount
20967         mov     x3, x2
20968         ldr     x19, [x2, #:got_lo12:SecureBootUnlockTryCount]
20969         ldr     w0, [x19]
20970         cmp     w0, 10
20971         bhi     .L2854
20972         adrp    x0, :got:gpDrmKeyInfo
20973         ldr     w1, [x20,4]
20974         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
20975         ldr     x2, [x0]
20976         ldr     w0, [x2,24]
20977         cmp     w0, w1
20978         beq     .L2762
20979         cbz     w0, .L2762
20980         adrp    x0, .LC151
20981         add     x0, x0, :lo12:.LC151
20982         bl      printk
20983         ldr     w0, [x19]
20984         add     w0, w0, 1
20985         str     w0, [x19]
20986         b       .L2854
20987 .L2762:
20988         ldr     x3, [x3, #:got_lo12:SecureBootUnlockTryCount]
20989         mov     w0, 27698
20990         movk    w0, 0x4004, lsl 16
20991         cmp     w21, w0
20992         str     wzr, [x3]
20993         bne     .L2763
20994         str     wzr, [x2,20]
20995         str     wzr, [x2,24]
20996         b       .L2764
20997 .L2763:
20998         mov     w0, 1
20999         str     w1, [x2,24]
21000         str     w0, [x2,20]
21001 .L2764:
21002         mov     w0, 1
21003         mov     x1, x2
21004         mov     x19, -2
21005         bl      StorageSysDataStore
21006         cmn     w0, #1
21007         bne     .L2851
21008         b       .L2736
21009 .L2729:
21010         adrp    x0, .LC152
21011         add     x0, x0, :lo12:.LC152
21012         bl      printk
21013         mov     x0, sp
21014         and     x0, x0, -16384
21015         ldr     x1, [x0,8]
21016         mov     x0, x19
21017 #APP
21018 // 257 "./arch/arm64/include/asm/uaccess.h" 1
21019         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
21020 // 0 "" 2
21021 #NO_APP
21022         cbz     x2, .L2747
21023         add     x20, x29, 56
21024         mov     x1, x19
21025         mov     x0, x20
21026         mov     x2, 520
21027         bl      __copy_from_user
21028         cbnz    x0, .L2732
21029         ldr     w1, [x20]
21030         mov     w0, 17750
21031         movk    w0, 0x444e, lsl 16
21032         cmp     w1, w0
21033         bne     .L2750
21034         ldr     w2, [x20,4]
21035         cmp     w2, 504
21036         bhi     .L2750
21037         mov     w0, 30224
21038         uxtw    x2, w2
21039         movk    w0, 0x4004, lsl 16
21040         cmp     w21, w0
21041         add     x0, x20, 8
21042         bne     .L2765
21043         adrp    x1, :got:gpVendor0Info
21044         ldr     x1, [x1, #:got_lo12:gpVendor0Info]
21045         b       .L2846
21046 .L2765:
21047         adrp    x1, :got:gpVendor1Info
21048         ldr     x1, [x1, #:got_lo12:gpVendor1Info]
21049 .L2846:
21050         ldr     x1, [x1]
21051         add     x1, x1, 8
21052 .L2850:
21053         bl      memcpy
21054 .L2848:
21055         mov     x0, sp
21056         and     x0, x0, -16384
21057         ldr     x1, [x0,8]
21058         mov     x0, x19
21059 #APP
21060 // 266 "./arch/arm64/include/asm/uaccess.h" 1
21061         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
21062 // 0 "" 2
21063 #NO_APP
21064         cbz     x2, .L2854
21065         mov     x0, x19
21066         mov     x1, x20
21067         mov     x2, 520
21068 .L2843:
21069         bl      __copy_to_user
21070         cbnz    x0, .L2854
21071         b       .L2851
21072 .L2726:
21073         adrp    x0, .LC153
21074         add     x0, x0, :lo12:.LC153
21075         bl      printk
21076         mov     x0, sp
21077         and     x0, x0, -16384
21078         ldr     x1, [x0,8]
21079         mov     x0, x19
21080 #APP
21081 // 257 "./arch/arm64/include/asm/uaccess.h" 1
21082         adds x0, x0, 520; ccmp x0, x1, #2, cc; cset x2, ls
21083 // 0 "" 2
21084 #NO_APP
21085         cbz     x2, .L2747
21086         add     x20, x29, 56
21087         mov     x1, x19
21088         mov     x0, x20
21089         mov     x2, 520
21090         bl      __copy_from_user
21091         cbnz    x0, .L2732
21092         ldr     w1, [x20]
21093         mov     w0, 17750
21094         movk    w0, 0x444e, lsl 16
21095         cmp     w1, w0
21096         bne     .L2750
21097         ldr     w2, [x20,4]
21098         cmp     w2, 504
21099         bhi     .L2750
21100         mov     w0, 30225
21101         add     w2, w2, 8
21102         movk    w0, 0x4004, lsl 16
21103         cmp     w21, w0
21104         bne     .L2767
21105         adrp    x19, :got:gpVendor0Info
21106         mov     x1, x20
21107         ldr     x19, [x19, #:got_lo12:gpVendor0Info]
21108         ldr     x0, [x19]
21109         bl      memcpy
21110         mov     w0, 2
21111         b       .L2852
21112 .L2767:
21113         adrp    x19, :got:gpVendor1Info
21114         mov     x1, x20
21115         ldr     x19, [x19, #:got_lo12:gpVendor1Info]
21116         ldr     x0, [x19]
21117         bl      memcpy
21118         mov     w0, 3
21119 .L2852:
21120         ldr     x1, [x19]
21121 .L2853:
21122         bl      StorageSysDataStore
21123         uxtw    x19, w0
21124         b       .L2736
21125 .L2851:
21126         mov     x19, 0
21127 .L2736:
21128         adrp    x0, .LC154
21129         mov     x1, x19
21130         add     x0, x0, :lo12:.LC154
21131         bl      printk
21132         b       .L2707
21133 .L2768:
21134         mov     x19, -22
21135 .L2707:
21136         mov     x0, x19
21137         ldp     x19, x20, [sp,16]
21138         ldp     x21, x22, [sp,32]
21139         ldp     x29, x30, [sp], 48
21140         add     sp, sp, 528
21141         ret
21142         .size   rknand_sys_storage_ioctl, .-rknand_sys_storage_ioctl
21143         .align  2
21144         .global rk_ftl_storage_sys_init
21145         .type   rk_ftl_storage_sys_init, %function
21146 rk_ftl_storage_sys_init:
21147         adrp    x0, :got:g_idb_buffer
21148         stp     x29, x30, [sp, -80]!
21149         add     x29, sp, 0
21150         ldr     x0, [x0, #:got_lo12:g_idb_buffer]
21151         stp     x19, x20, [sp,16]
21152         stp     x21, x22, [sp,32]
21153         stp     x23, x24, [sp,48]
21154         str     x25, [sp,64]
21155         adrp    x21, :got:gpBootConfig
21156         str     xzr, [x0]
21157         adrp    x0, :got:gLoaderBootInfo
21158         adrp    x20, :got:gpVendor0Info
21159         adrp    x19, :got:gpVendor1Info
21160         ldr     x21, [x21, #:got_lo12:gpBootConfig]
21161         ldr     x0, [x0, #:got_lo12:gLoaderBootInfo]
21162         ldr     x1, [x0]
21163         adrp    x0, :got:gpDrmKeyInfo
21164         str     x1, [x21]
21165         add     x2, x1, 512
21166         ldr     x0, [x0, #:got_lo12:gpDrmKeyInfo]
21167         str     x2, [x0]
21168         add     x2, x1, 1024
21169         add     x1, x1, 1536
21170         ldr     x0, [x20, #:got_lo12:gpVendor0Info]
21171         str     x2, [x0]
21172         mov     w2, 512
21173         ldr     x0, [x19, #:got_lo12:gpVendor1Info]
21174         str     x1, [x0]
21175         adrp    x0, :got:gSnSectorData
21176         ldr     x0, [x0, #:got_lo12:gSnSectorData]
21177         bl      ftl_memcpy
21178         adrp    x1, :got:SecureBootEn
21179         ldr     x0, [x21]
21180         adrp    x3, :got:SecureBootCheckOK
21181         mov     x25, x1
21182         mov     x24, x3
21183         ldr     x22, [x1, #:got_lo12:SecureBootEn]
21184         ldr     w2, [x0,16]
21185         ldr     w23, [x0,508]
21186         str     w2, [x22]
21187         ldr     x2, [x3, #:got_lo12:SecureBootCheckOK]
21188         str     wzr, [x2]
21189         adrp    x2, :got:SecureBootUnlockTryCount
21190         ldr     x2, [x2, #:got_lo12:SecureBootUnlockTryCount]
21191         str     wzr, [x2]
21192         cbz     w23, .L2859
21193         mov     w1, 508
21194         bl      JSHash
21195         cmp     w23, w0
21196         beq     .L2859
21197         ldr     x0, [x21]
21198         str     wzr, [x22]
21199         str     wzr, [x0,16]
21200         adrp    x0, .LC155
21201         add     x0, x0, :lo12:.LC155
21202         bl      printk
21203 .L2859:
21204         ldr     x1, [x25, #:got_lo12:SecureBootEn]
21205         ldr     w0, [x1]
21206         cbz     w0, .L2861
21207         ldr     x0, [x24, #:got_lo12:SecureBootCheckOK]
21208         mov     w1, 5161
21209         movk    w1, 0xc059, lsl 16
21210         str     w1, [x0]
21211 .L2861:
21212         ldr     x20, [x20, #:got_lo12:gpVendor0Info]
21213         mov     w0, 2
21214         ldr     x1, [x20]
21215         bl      StorageSysDataLoad
21216         ldr     x19, [x19, #:got_lo12:gpVendor1Info]
21217         mov     w0, 3
21218         ldr     x1, [x19]
21219         bl      StorageSysDataLoad
21220         adrp    x0, .LANCHOR3
21221         add     x0, x0, :lo12:.LANCHOR3
21222         bl      misc_register
21223         ldr     x25, [sp,64]
21224         ldp     x19, x20, [sp,16]
21225         ldp     x21, x22, [sp,32]
21226         ldp     x23, x24, [sp,48]
21227         ldp     x29, x30, [sp], 80
21228         ret
21229         .size   rk_ftl_storage_sys_init, .-rk_ftl_storage_sys_init
21230         .align  2
21231         .global StorageSysDataDeInit
21232         .type   StorageSysDataDeInit, %function
21233 StorageSysDataDeInit:
21234         stp     x29, x30, [sp, -16]!
21235         adrp    x0, .LANCHOR3
21236         add     x29, sp, 0
21237         add     x0, x0, :lo12:.LANCHOR3
21238         bl      misc_deregister
21239         mov     w0, 0
21240         ldp     x29, x30, [sp], 16
21241         ret
21242         .size   StorageSysDataDeInit, .-StorageSysDataDeInit
21243         .global rknand_sys_storage_fops
21244         .global gTable_Crc32
21245         .global SecureBootUnlockTryCount
21246         .global SecureBootCheckOK
21247         .global SecureBootEn
21248         .global gpVendor1Info
21249         .global gpVendor0Info
21250         .global g_idb_buffer
21251         .global gSnSectorData
21252         .global gpDrmKeyInfo
21253         .global gpBootConfig
21254         .global gLoaderBootInfo
21255         .global RK29_NANDC1_REG_BASE
21256         .global RK29_NANDC_REG_BASE
21257         .global gc_ink_free_return_value
21258         .global FtlUpdateVaildLpnCount
21259         .global g_ect_tbl_power_up_flush
21260         .global last_cache_match_count
21261         .global power_up_flag
21262         .global g_LowFormat
21263         .global gFtlInitStatus
21264         .global DeviceCapacity
21265         .global ToshibaRefValue
21266         .global Toshiba15RefValue
21267         .global ToshibaA19RefValue
21268         .global SamsungRefValue
21269         .global refValueDefault
21270         .global FbbtBlk
21271         .global random_seed
21272         .global gSlcNandParaInfo
21273         .global gNandParaInfo
21274         .global NandFlashParaTbl
21275         .global g_power_lost_recovery_flag
21276         .global c_mlc_erase_count_value
21277         .global g_recovery_ppa_tbl
21278         .global g_recovery_page_min_ver
21279         .global g_recovery_page_num
21280         .global g_cur_erase_blk
21281         .global g_gc_skip_write_count
21282         .global g_gc_head_data_block_count
21283         .global g_gc_head_data_block
21284         .global g_ftl_nand_free_count
21285         .global g_in_swl_replace
21286         .global g_in_gc_progress
21287         .global g_all_blk_used_slc_mode
21288         .global g_max_erase_count
21289         .global g_totle_sys_slc_erase_count
21290         .global g_totle_slc_erase_count
21291         .global g_min_erase_count
21292         .global g_totle_avg_erase_count
21293         .global g_totle_mlc_erase_count
21294         .global g_totle_l2p_write_count
21295         .global g_totle_cache_write_count
21296         .global g_tmp_data_superblock_id
21297         .global g_totle_read_page_count
21298         .global g_totle_discard_page_count
21299         .global g_totle_read_sector
21300         .global g_totle_write_sector
21301         .global g_totle_write_page_count
21302         .global g_totle_gc_page_count
21303         .global g_gc_blk_index
21304         .global g_gc_merge_free_blk_threshold
21305         .global g_gc_free_blk_threshold
21306         .global g_gc_bad_block_temp_tbl
21307         .global g_gc_bad_block_gc_index
21308         .global g_gc_bad_block_temp_num
21309         .global g_gc_next_blk_1
21310         .global g_gc_next_blk
21311         .global g_gc_cur_blk_max_valid_pages
21312         .global g_gc_cur_blk_valid_pages
21313         .global g_gc_page_offset
21314         .global g_gc_blk_num
21315         .global p_gc_blk_tbl
21316         .global p_gc_page_info
21317         .global g_sys_ext_data
21318         .global g_sys_save_data
21319         .global gp_last_act_superblock
21320         .global g_gc_superblock
21321         .global g_gc_temp_superblock
21322         .global g_buffer_superblock
21323         .global g_active_superblock
21324         .global g_num_data_superblocks
21325         .global g_num_free_superblocks
21326         .global p_data_block_list_tail
21327         .global p_data_block_list_head
21328         .global p_free_data_block_list_head
21329         .global p_data_block_list_table
21330         .global g_l2p_last_update_region_id
21331         .global p_l2p_map_buf
21332         .global p_l2p_ram_map
21333         .global g_totle_vendor_block
21334         .global p_vendor_region_ppn_table
21335         .global p_vendor_block_ver_table
21336         .global p_vendor_block_valid_page_count
21337         .global p_vendor_block_table
21338         .global g_totle_map_block
21339         .global p_map_region_ppn_table
21340         .global p_map_block_ver_table
21341         .global p_map_block_valid_page_count
21342         .global p_map_block_table
21343         .global p_valid_page_count_check_table
21344         .global p_valid_page_count_table
21345         .global g_totle_swl_count
21346         .global p_swl_mul_table
21347         .global p_erase_count_table
21348         .global g_ect_tbl_info_size
21349         .global gp_ect_tbl_info
21350         .global g_gc_num_req
21351         .global c_gc_page_buf_num
21352         .global gp_gc_page_buf_info
21353         .global p_gc_data_buf
21354         .global p_gc_spare_buf
21355         .global p_io_spare_buf
21356         .global p_io_data_buf_1
21357         .global p_io_data_buf_0
21358         .global p_sys_spare_buf
21359         .global p_vendor_data_buf
21360         .global p_sys_data_buf_1
21361         .global p_sys_data_buf
21362         .global g_wr_page_num
21363         .global req_wr_io
21364         .global c_wr_page_buf_num
21365         .global p_wr_io_data_buf
21366         .global p_wr_io_spare_buf
21367         .global p_plane_order_table
21368         .global g_req_cache
21369         .global req_gc_dst
21370         .global req_gc
21371         .global req_erase
21372         .global req_prgm
21373         .global req_read
21374         .global req_sys
21375         .global gVendorBlkInfo
21376         .global gL2pMapInfo
21377         .global gSysFreeQueue
21378         .global gSysInfo
21379         .global gBbtInfo
21380         .global g_inkDie_check_enable
21381         .global g_SlcPartLbaEndSector
21382         .global g_MaxLbn
21383         .global g_VaildLpn
21384         .global g_MaxLpn
21385         .global g_MaxLbaSector
21386         .global g_GlobalDataVersion
21387         .global g_GlobalSysVersion
21388         .global ftl_gc_temp_power_lost_recovery_flag
21389         .global c_ftl_nand_max_data_blks
21390         .global c_ftl_nand_data_op_blks_per_plane
21391         .global c_ftl_nand_data_blks_per_plane
21392         .global c_ftl_nand_max_sys_blks
21393         .global c_ftl_nand_init_sys_blks_per_plane
21394         .global c_ftl_nand_sys_blks_per_plane
21395         .global c_ftl_vendor_part_size
21396         .global c_ftl_nand_max_vendor_blks
21397         .global c_ftl_nand_max_map_blks
21398         .global c_ftl_nand_map_blks_per_plane
21399         .global c_ftl_nand_vendor_region_num
21400         .global c_ftl_nand_l2pmap_ram_region_num
21401         .global c_ftl_nand_map_region_num
21402         .global c_ftl_nand_totle_phy_blks
21403         .global c_ftl_nand_reserved_blks
21404         .global c_ftl_nand_byte_pre_oob
21405         .global c_ftl_nand_byte_pre_page
21406         .global c_ftl_nand_sec_pre_page_shift
21407         .global c_ftl_nand_sec_pre_page
21408         .global c_ftl_nand_page_pre_super_blk
21409         .global c_ftl_nand_page_pre_slc_blk
21410         .global c_ftl_nand_page_pre_blk
21411         .global c_ftl_nand_bbm_buf_size
21412         .global c_ftl_nand_ext_blk_pre_plane
21413         .global c_ftl_nand_blk_pre_plane
21414         .global c_ftl_nand_planes_num
21415         .global c_ftl_nand_blks_per_die_shift
21416         .global c_ftl_nand_blks_per_die
21417         .global c_ftl_nand_planes_per_die
21418         .global c_ftl_nand_die_num
21419         .global c_ftl_nand_type
21420         .global gMasterTempBuf
21421         .global gMasterInfo
21422         .global gNandcDumpWriteEn
21423         .global gToggleModeClkDiv
21424         .global gBootDdrMode
21425         .global gNandcEccBits
21426         .global gpNandc1
21427         .global gpNandc
21428         .global gNandcVer
21429         .global gNandChipMap
21430         .global gNandIDataBuf
21431         .global FlashDdrTunningReadCount
21432         .global gNandPhyInfo
21433         .global gFlashProgCheckSpareBuffer
21434         .global gFlashProgCheckBuffer
21435         .global gFlashSpareBuffer
21436         .global gFlashPageBuffer1
21437         .global gFlashPageBuffer0
21438         .global gpFlashSaveInfo
21439         .global gReadRetryInfo
21440         .global gpNandParaInfo
21441         .global gNandOptPara
21442         .global g_slc2KBNand
21443         .global g_maxRetryCount
21444         .global g_maxRegNum
21445         .global g_retryMode
21446         .global gNandIDBResBlkNumSaveInFlash
21447         .global gNandIDBResBlkNum
21448         .global gNandFlashResEndPageAddr
21449         .global gNandFlashInfoBlockAddr
21450         .global gNandFlashIdbBlockAddr
21451         .global gNandFlashInfoBlockEcc
21452         .global gNandFlashIDBEccBits
21453         .global gNandFlashEccBits
21454         .global gNandRandomizer
21455         .global gBlockPageAlignSize
21456         .global gTotleBlock
21457         .global gNandMaxChip
21458         .global gNandMaxDie
21459         .global gFlashInterfaceMode
21460         .global gFlashOnfiModeEn
21461         .global gFlashToggleModeEn
21462         .global gFlashSdrModeEn
21463         .global gMultiPageProgEn
21464         .global gMultiPageReadEn
21465         .global gpReadRetrial
21466         .global mlcPageToSlcPageTbl
21467         .global slcPageToMlcPageTbl
21468         .global DieAddrs
21469         .global gDieOp
21470         .global DieCsIndex
21471         .global IDByte
21472         .global read_retry_cur_offset
21473         .section        .rodata
21474         .align  3
21475 .LANCHOR1 = . + 0
21476         .type   __func__.18703, %object
21477         .size   __func__.18703, 11
21478 __func__.18703:
21479         .string "FtlMemInit"
21480         .zero   5
21481         .type   __func__.19557, %object
21482         .size   __func__.19557, 21
21483 __func__.19557:
21484         .string "FtlVpcCheckAndModify"
21485         .section        .data.rel.local,"aw",%progbits
21486         .align  3
21487         .type   rknand_sys_storage_fops, %object
21488         .size   rknand_sys_storage_fops, 216
21489 rknand_sys_storage_fops:
21490         .zero   64
21491         .xword  rknand_sys_storage_ioctl
21492         .xword  rknand_sys_storage_ioctl
21493         .zero   8
21494         .xword  rknand_sys_storage_open
21495         .zero   8
21496         .xword  rknand_sys_storage_release
21497         .zero   104
21498         .data
21499         .align  3
21500 .LANCHOR2 = . + 0
21501         .type   NandOptPara, %object
21502         .size   NandOptPara, 128
21503 NandOptPara:
21504         .byte   1
21505         .byte   0
21506         .byte   49
21507         .byte   63
21508         .byte   0
21509         .byte   49
21510         .byte   -128
21511         .byte   21
21512         .byte   0
21513         .byte   50
21514         .byte   17
21515         .byte   -128
21516         .byte   112
21517         .byte   120
21518         .byte   120
21519         .byte   3
21520         .byte   1
21521         .byte   0
21522         .zero   14
21523         .byte   2
21524         .byte   0
21525         .byte   49
21526         .byte   63
21527         .byte   0
21528         .byte   49
21529         .byte   -128
21530         .byte   21
21531         .byte   0
21532         .byte   0
21533         .byte   17
21534         .byte   -127
21535         .byte   112
21536         .byte   -15
21537         .byte   -14
21538         .byte   0
21539         .byte   0
21540         .byte   0
21541         .zero   14
21542         .byte   3
21543         .byte   0
21544         .byte   49
21545         .byte   63
21546         .byte   0
21547         .byte   49
21548         .byte   -128
21549         .byte   21
21550         .byte   96
21551         .byte   96
21552         .byte   17
21553         .byte   -127
21554         .byte   112
21555         .byte   -15
21556         .byte   -14
21557         .byte   0
21558         .byte   0
21559         .byte   0
21560         .zero   14
21561         .byte   4
21562         .byte   0
21563         .byte   49
21564         .byte   63
21565         .byte   0
21566         .byte   49
21567         .byte   -128
21568         .byte   21
21569         .byte   96
21570         .byte   96
21571         .byte   17
21572         .byte   -127
21573         .byte   112
21574         .byte   112
21575         .byte   112
21576         .byte   0
21577         .byte   0
21578         .byte   0
21579         .zero   14
21580         .type   ftl_gc_temp_block_bops_scan_page_addr, %object
21581         .size   ftl_gc_temp_block_bops_scan_page_addr, 2
21582 ftl_gc_temp_block_bops_scan_page_addr:
21583         .hword  -1
21584         .zero   6
21585         .type   gTable_Crc32, %object
21586         .size   gTable_Crc32, 1024
21587 gTable_Crc32:
21588         .word   0
21589         .word   79760823
21590         .word   159521646
21591         .word   222500569
21592         .word   319043292
21593         .word   398801771
21594         .word   445001138
21595         .word   507977733
21596         .word   638086584
21597         .word   583622671
21598         .word   797603542
21599         .word   726367073
21600         .word   890002276
21601         .word   835540691
21602         .word   1015955466
21603         .word   944721341
21604         .word   1276173168
21605         .word   1221711559
21606         .word   1167245342
21607         .word   1096011177
21608         .word   1595207084
21609         .word   1540743195
21610         .word   1452734146
21611         .word   1381497717
21612         .word   1780004552
21613         .word   1859763071
21614         .word   1671081382
21615         .word   1734058001
21616         .word   2031910932
21617         .word   2111671715
21618         .word   1889442682
21619         .word   1952421581
21620         .word   -1742620960
21621         .word   -1662993577
21622         .word   -1851544178
21623         .word   -1788698567
21624         .word   -1960476612
21625         .word   -1880846965
21626         .word   -2102944942
21627         .word   -2040097051
21628         .word   -1104553128
21629         .word   -1159145745
21630         .word   -1213480906
21631         .word   -1284846207
21632         .word   -1389499004
21633         .word   -1444093901
21634         .word   -1531971862
21635         .word   -1603339427
21636         .word   -734958192
21637         .word   -789553113
21638         .word   -575441154
21639         .word   -646808759
21640         .word   -952804532
21641         .word   -1007397125
21642         .word   -826851294
21643         .word   -898216555
21644         .word   -231145432
21645         .word   -151515745
21646         .word   -71623866
21647         .word   -8775951
21648         .word   -516081932
21649         .word   -436454589
21650         .word   -390124134
21651         .word   -327278547
21652         .word   880959607
21653         .word   809725376
21654         .word   1023441689
21655         .word   968980142
21656         .word   663115435
21657         .word   591878940
21658         .word   772033989
21659         .word   717570162
21660         .word   311037391
21661         .word   374014072
21662         .word   453514913
21663         .word   533273366
21664         .word   26098451
21665         .word   89077412
21666         .word   135012477
21667         .word   214773194
21668         .word   2022882055
21669         .word   2085861040
21670         .word   1896915049
21671         .word   1976675806
21672         .word   1805028827
21673         .word   1868005484
21674         .word   1645516469
21675         .word   1725274882
21676         .word   1587205823
21677         .word   1515969288
21678         .word   1461243345
21679         .word   1406779494
21680         .word   1302257763
21681         .word   1231023572
21682         .word   1142749965
21683         .word   1088288442
21684         .word   -1398548841
21685         .word   -1469916384
21686         .word   -1524511239
21687         .word   -1579106226
21688         .word   -1079517109
21689         .word   -1150882308
21690         .word   -1239024859
21691         .word   -1293617518
21692         .word   -1968456913
21693         .word   -1905609064
21694         .word   -2094423999
21695         .word   -2014794250
21696         .word   -1716548109
21697         .word   -1653702588
21698         .word   -1876060515
21699         .word   -1796433110
21700         .word   -525136409
21701         .word   -462290864
21702         .word   -382658935
21703         .word   -303031490
21704         .word   -206095557
21705         .word   -143247732
21706         .word   -97181611
21707         .word   -17551902
21708         .word   -960798625
21709         .word   -1032163864
21710         .word   -818316495
21711         .word   -872909178
21712         .word   -708880765
21713         .word   -780248268
21714         .word   -599962131
21715         .word   -654557094
21716         .word   1761919214
21717         .word   1841679705
21718         .word   1619450752
21719         .word   1682429495
21720         .word   2046883378
21721         .word   2126642053
21722         .word   1937960284
21723         .word   2000937195
21724         .word   1326230870
21725         .word   1271767265
21726         .word   1183757880
21727         .word   1112521615
21728         .word   1544067978
21729         .word   1489606205
21730         .word   1435140324
21731         .word   1363905875
21732         .word   622074782
21733         .word   567612969
21734         .word   748028144
21735         .word   676793671
21736         .word   907029826
21737         .word   852566261
21738         .word   1066546732
21739         .word   995310491
21740         .word   52196902
21741         .word   131955601
21742         .word   178154824
21743         .word   241131775
21744         .word   270024954
21745         .word   349785421
21746         .word   429546388
21747         .word   492525091
21748         .word   -249203186
21749         .word   -169575495
21750         .word   -123245216
21751         .word   -60399401
21752         .word   -501137198
21753         .word   -421507739
21754         .word   -341615684
21755         .word   -278768117
21756         .word   -684909642
21757         .word   -739502591
21758         .word   -558956328
21759         .word   -630321809
21760         .word   -1003934358
21761         .word   -1058529059
21762         .word   -844417532
21763         .word   -915784781
21764         .word   -1120555650
21765         .word   -1175150391
21766         .word   -1263028720
21767         .word   -1334395993
21768         .word   -1372480606
21769         .word   -1427073515
21770         .word   -1481408308
21771         .word   -1552773765
21772         .word   -1690451770
21773         .word   -1610822287
21774         .word   -1832920152
21775         .word   -1770072545
21776         .word   -2009467366
21777         .word   -1929839699
21778         .word   -2118390412
21779         .word   -2055544637
21780         .word   1569104025
21781         .word   1497869614
21782         .word   1409596407
21783         .word   1355134528
21784         .word   1317180997
21785         .word   1245944818
21786         .word   1191218475
21787         .word   1136754844
21788         .word   2072956193
21789         .word   2135933078
21790         .word   1913443919
21791         .word   1993202680
21792         .word   1753938941
21793         .word   1816917578
21794         .word   1627971731
21795         .word   1707732260
21796         .word   295074793
21797         .word   358053470
21798         .word   403988615
21799         .word   483749168
21800         .word   43142453
21801         .word   106119298
21802         .word   185620059
21803         .word   265378796
21804         .word   933107281
21805         .word   861871078
21806         .word   1042025791
21807         .word   987562120
21808         .word   614080653
21809         .word   542846266
21810         .word   756562915
21811         .word   702101076
21812         .word   -978905479
21813         .word   -1050272818
21814         .word   -869987049
21815         .word   -924581728
21816         .word   -693952347
21817         .word   -765317870
21818         .word   -551470133
21819         .word   -606062980
21820         .word   -475038783
21821         .word   -412191114
21822         .word   -366124881
21823         .word   -286495464
21824         .word   -257209059
21825         .word   -194363222
21826         .word   -114731405
21827         .word   -35103804
21828         .word   -1984443127
21829         .word   -1921597250
21830         .word   -2143955353
21831         .word   -2064327728
21832         .word   -1699480619
21833         .word   -1636632990
21834         .word   -1825447749
21835         .word   -1745818356
21836         .word   -1346395983
21837         .word   -1417761530
21838         .word   -1505903649
21839         .word   -1560496536
21840         .word   -1128556947
21841         .word   -1199924262
21842         .word   -1254519549
21843         .word   -1309114188
21844         .type   power_up_flag, %object
21845         .size   power_up_flag, 4
21846 power_up_flag:
21847         .word   1
21848         .type   gFtlInitStatus, %object
21849         .size   gFtlInitStatus, 4
21850 gFtlInitStatus:
21851         .word   -1
21852         .type   ToshibaRefValue, %object
21853         .size   ToshibaRefValue, 8
21854 ToshibaRefValue:
21855         .byte   0
21856         .byte   4
21857         .byte   124
21858         .byte   120
21859         .byte   116
21860         .byte   8
21861         .byte   12
21862         .byte   112
21863         .type   Toshiba15RefValue, %object
21864         .size   Toshiba15RefValue, 95
21865 Toshiba15RefValue:
21866         .byte   4
21867         .byte   5
21868         .byte   6
21869         .byte   7
21870         .byte   13
21871         .byte   0
21872         .byte   0
21873         .byte   0
21874         .byte   0
21875         .byte   0
21876         .byte   0
21877         .byte   0
21878         .byte   0
21879         .byte   0
21880         .byte   0
21881         .byte   2
21882         .byte   4
21883         .byte   2
21884         .byte   0
21885         .byte   0
21886         .byte   8
21887         .byte   8
21888         .byte   0
21889         .byte   0
21890         .byte   0
21891         .byte   124
21892         .byte   0
21893         .byte   124
21894         .byte   124
21895         .byte   0
21896         .byte   122
21897         .byte   0
21898         .byte   122
21899         .byte   122
21900         .byte   0
21901         .byte   11
21902         .byte   126
21903         .byte   118
21904         .byte   116
21905         .byte   0
21906         .byte   120
21907         .byte   2
21908         .byte   120
21909         .byte   122
21910         .byte   0
21911         .byte   126
21912         .byte   4
21913         .byte   126
21914         .byte   122
21915         .byte   0
21916         .byte   16
21917         .byte   118
21918         .byte   114
21919         .byte   112
21920         .byte   0
21921         .byte   118
21922         .byte   4
21923         .byte   118
21924         .byte   120
21925         .byte   0
21926         .byte   4
21927         .byte   4
21928         .byte   4
21929         .byte   118
21930         .byte   0
21931         .byte   2
21932         .byte   0
21933         .byte   126
21934         .byte   124
21935         .byte   0
21936         .byte   6
21937         .byte   10
21938         .byte   6
21939         .byte   2
21940         .byte   0
21941         .byte   116
21942         .byte   124
21943         .byte   116
21944         .byte   118
21945         .byte   0
21946         .byte   4
21947         .byte   4
21948         .byte   124
21949         .byte   126
21950         .byte   0
21951         .byte   0
21952         .byte   124
21953         .byte   120
21954         .byte   120
21955         .byte   0
21956         .byte   124
21957         .byte   118
21958         .byte   116
21959         .byte   114
21960         .byte   0
21961         .zero   1
21962         .type   ToshibaA19RefValue, %object
21963         .size   ToshibaA19RefValue, 45
21964 ToshibaA19RefValue:
21965         .byte   4
21966         .byte   5
21967         .byte   6
21968         .byte   7
21969         .byte   13
21970         .byte   0
21971         .byte   0
21972         .byte   0
21973         .byte   0
21974         .byte   0
21975         .byte   4
21976         .byte   4
21977         .byte   124
21978         .byte   126
21979         .byte   0
21980         .byte   0
21981         .byte   124
21982         .byte   120
21983         .byte   120
21984         .byte   0
21985         .byte   124
21986         .byte   118
21987         .byte   116
21988         .byte   114
21989         .byte   0
21990         .byte   8
21991         .byte   8
21992         .byte   0
21993         .byte   0
21994         .byte   0
21995         .byte   11
21996         .byte   126
21997         .byte   118
21998         .byte   116
21999         .byte   0
22000         .byte   16
22001         .byte   118
22002         .byte   114
22003         .byte   112
22004         .byte   0
22005         .byte   2
22006         .byte   0
22007         .byte   126
22008         .byte   124
22009         .byte   0
22010         .zero   3
22011         .type   SamsungRefValue, %object
22012         .size   SamsungRefValue, 64
22013 SamsungRefValue:
22014         .byte   -89
22015         .byte   -92
22016         .byte   -91
22017         .byte   -90
22018         .byte   0
22019         .byte   0
22020         .byte   0
22021         .byte   0
22022         .byte   5
22023         .byte   10
22024         .byte   0
22025         .byte   0
22026         .byte   40
22027         .byte   0
22028         .byte   -20
22029         .byte   -40
22030         .byte   -19
22031         .byte   -11
22032         .byte   -19
22033         .byte   -26
22034         .byte   10
22035         .byte   15
22036         .byte   5
22037         .byte   0
22038         .byte   15
22039         .byte   10
22040         .byte   -5
22041         .byte   -20
22042         .byte   -24
22043         .byte   -17
22044         .byte   -24
22045         .byte   -36
22046         .byte   -15
22047         .byte   -5
22048         .byte   -2
22049         .byte   -16
22050         .byte   10
22051         .byte   0
22052         .byte   -5
22053         .byte   -20
22054         .byte   -48
22055         .byte   -30
22056         .byte   -48
22057         .byte   -62
22058         .byte   20
22059         .byte   15
22060         .byte   -5
22061         .byte   -20
22062         .byte   -24
22063         .byte   -5
22064         .byte   -24
22065         .byte   -36
22066         .byte   30
22067         .byte   20
22068         .byte   -5
22069         .byte   -20
22070         .byte   -5
22071         .byte   -1
22072         .byte   -5
22073         .byte   -8
22074         .byte   7
22075         .byte   12
22076         .byte   2
22077         .byte   0
22078         .type   refValueDefault, %object
22079         .size   refValueDefault, 28
22080 refValueDefault:
22081         .byte   0
22082         .byte   0
22083         .byte   0
22084         .byte   0
22085         .byte   0
22086         .byte   6
22087         .byte   10
22088         .byte   6
22089         .byte   0
22090         .byte   -3
22091         .byte   -7
22092         .byte   -8
22093         .byte   0
22094         .byte   -6
22095         .byte   -13
22096         .byte   -15
22097         .byte   0
22098         .byte   -11
22099         .byte   -20
22100         .byte   -23
22101         .byte   0
22102         .byte   0
22103         .byte   -26
22104         .byte   -30
22105         .byte   0
22106         .byte   0
22107         .byte   -32
22108         .byte   -37
22109         .zero   4
22110         .type   random_seed, %object
22111         .size   random_seed, 256
22112 random_seed:
22113         .hword  22378
22114         .hword  1512
22115         .hword  25245
22116         .hword  17827
22117         .hword  25756
22118         .hword  19440
22119         .hword  9026
22120         .hword  10030
22121         .hword  29528
22122         .hword  20467
22123         .hword  29676
22124         .hword  24432
22125         .hword  31328
22126         .hword  6872
22127         .hword  13426
22128         .hword  13842
22129         .hword  8783
22130         .hword  1108
22131         .hword  782
22132         .hword  28837
22133         .hword  30729
22134         .hword  9505
22135         .hword  18676
22136         .hword  23085
22137         .hword  18730
22138         .hword  1085
22139         .hword  32609
22140         .hword  14697
22141         .hword  20858
22142         .hword  15170
22143         .hword  30365
22144         .hword  1607
22145         .hword  32298
22146         .hword  4995
22147         .hword  18905
22148         .hword  1976
22149         .hword  9592
22150         .hword  20204
22151         .hword  17443
22152         .hword  13615
22153         .hword  23330
22154         .hword  29369
22155         .hword  13947
22156         .hword  9398
22157         .hword  32398
22158         .hword  8984
22159         .hword  27600
22160         .hword  21785
22161         .hword  6019
22162         .hword  6311
22163         .hword  31598
22164         .hword  30210
22165         .hword  19327
22166         .hword  13896
22167         .hword  11347
22168         .hword  27545
22169         .hword  3107
22170         .hword  26575
22171         .hword  32270
22172         .hword  19852
22173         .hword  20601
22174         .hword  8349
22175         .hword  9290
22176         .hword  29819
22177         .hword  13579
22178         .hword  3661
22179         .hword  28676
22180         .hword  27331
22181         .hword  32574
22182         .hword  8693
22183         .hword  31253
22184         .hword  9081
22185         .hword  5399
22186         .hword  6842
22187         .hword  20087
22188         .hword  5537
22189         .hword  1274
22190         .hword  11617
22191         .hword  9530
22192         .hword  4866
22193         .hword  8035
22194         .hword  23219
22195         .hword  1178
22196         .hword  23272
22197         .hword  7383
22198         .hword  18944
22199         .hword  12488
22200         .hword  12871
22201         .hword  29340
22202         .hword  20532
22203         .hword  11022
22204         .hword  22514
22205         .hword  228
22206         .hword  22363
22207         .hword  24978
22208         .hword  14584
22209         .hword  12138
22210         .hword  3092
22211         .hword  17916
22212         .hword  16863
22213         .hword  14554
22214         .hword  31457
22215         .hword  29474
22216         .hword  25311
22217         .hword  24121
22218         .hword  3684
22219         .hword  28037
22220         .hword  22865
22221         .hword  22839
22222         .hword  25217
22223         .hword  13217
22224         .hword  27186
22225         .hword  14938
22226         .hword  11180
22227         .hword  29754
22228         .hword  24180
22229         .hword  15150
22230         .hword  32455
22231         .hword  20434
22232         .hword  23848
22233         .hword  29983
22234         .hword  16120
22235         .hword  14769
22236         .hword  20041
22237         .hword  29803
22238         .hword  28406
22239         .hword  17598
22240         .hword  28087
22241         .type   gSlcNandParaInfo, %object
22242         .size   gSlcNandParaInfo, 32
22243 gSlcNandParaInfo:
22244         .byte   2
22245         .byte   -104
22246         .byte   -15
22247         .byte   0
22248         .byte   0
22249         .byte   0
22250         .byte   0
22251         .byte   1
22252         .byte   1
22253         .byte   4
22254         .hword  64
22255         .byte   1
22256         .byte   1
22257         .hword  1024
22258         .hword  256
22259         .byte   0
22260         .byte   0
22261         .byte   16
22262         .byte   40
22263         .byte   1
22264         .byte   0
22265         .byte   1
22266         .byte   0
22267         .byte   0
22268         .zero   5
22269         .type   gNandParaInfo, %object
22270         .size   gNandParaInfo, 32
22271 gNandParaInfo:
22272         .byte   0
22273         .byte   0
22274         .zero   5
22275         .byte   0
22276         .byte   1
22277         .byte   8
22278         .hword  128
22279         .byte   2
22280         .byte   1
22281         .hword  2048
22282         .hword  0
22283         .byte   1
22284         .byte   0
22285         .byte   24
22286         .byte   32
22287         .byte   1
22288         .byte   0
22289         .byte   1
22290         .byte   0
22291         .byte   0
22292         .zero   5
22293         .type   NandFlashParaTbl, %object
22294         .size   NandFlashParaTbl, 2112
22295 NandFlashParaTbl:
22296         .byte   6
22297         .byte   44
22298         .byte   100
22299         .byte   68
22300         .byte   75
22301         .byte   -87
22302         .byte   0
22303         .byte   4
22304         .byte   1
22305         .byte   16
22306         .hword  256
22307         .byte   2
22308         .byte   2
22309         .hword  2048
22310         .hword  479
22311         .byte   3
22312         .byte   17
22313         .byte   40
22314         .byte   32
22315         .byte   1
22316         .byte   0
22317         .byte   1
22318         .byte   0
22319         .byte   0
22320         .zero   5
22321         .byte   6
22322         .byte   44
22323         .byte   68
22324         .byte   68
22325         .byte   75
22326         .byte   -87
22327         .byte   0
22328         .byte   4
22329         .byte   1
22330         .byte   16
22331         .hword  256
22332         .byte   2
22333         .byte   2
22334         .hword  1064
22335         .hword  479
22336         .byte   3
22337         .byte   17
22338         .byte   40
22339         .byte   32
22340         .byte   1
22341         .byte   0
22342         .byte   1
22343         .byte   0
22344         .byte   0
22345         .zero   5
22346         .byte   6
22347         .byte   44
22348         .byte   104
22349         .byte   4
22350         .byte   74
22351         .byte   -87
22352         .byte   0
22353         .byte   4
22354         .byte   1
22355         .byte   8
22356         .hword  256
22357         .byte   2
22358         .byte   2
22359         .hword  2048
22360         .hword  287
22361         .byte   1
22362         .byte   0
22363         .byte   24
22364         .byte   32
22365         .byte   1
22366         .byte   0
22367         .byte   1
22368         .byte   0
22369         .byte   0
22370         .zero   5
22371         .byte   5
22372         .byte   44
22373         .byte   -120
22374         .byte   4
22375         .byte   75
22376         .byte   -87
22377         .byte   0
22378         .byte   4
22379         .byte   1
22380         .byte   16
22381         .hword  256
22382         .byte   2
22383         .byte   2
22384         .hword  2048
22385         .hword  287
22386         .byte   1
22387         .byte   0
22388         .byte   24
22389         .byte   32
22390         .byte   1
22391         .byte   0
22392         .byte   1
22393         .byte   0
22394         .byte   0
22395         .zero   5
22396         .byte   6
22397         .byte   44
22398         .byte   -88
22399         .byte   5
22400         .byte   -53
22401         .byte   -87
22402         .byte   0
22403         .byte   4
22404         .byte   2
22405         .byte   16
22406         .hword  256
22407         .byte   2
22408         .byte   2
22409         .hword  2048
22410         .hword  287
22411         .byte   1
22412         .byte   0
22413         .byte   24
22414         .byte   32
22415         .byte   1
22416         .byte   0
22417         .byte   1
22418         .byte   0
22419         .byte   0
22420         .zero   5
22421         .byte   6
22422         .byte   44
22423         .byte   104
22424         .byte   4
22425         .byte   70
22426         .byte   -119
22427         .byte   0
22428         .byte   4
22429         .byte   1
22430         .byte   8
22431         .hword  256
22432         .byte   2
22433         .byte   2
22434         .hword  2048
22435         .hword  287
22436         .byte   1
22437         .byte   0
22438         .byte   24
22439         .byte   32
22440         .byte   1
22441         .byte   0
22442         .byte   1
22443         .byte   0
22444         .byte   0
22445         .zero   5
22446         .byte   6
22447         .byte   44
22448         .byte   72
22449         .byte   4
22450         .byte   74
22451         .byte   -91
22452         .byte   0
22453         .byte   4
22454         .byte   1
22455         .byte   8
22456         .hword  256
22457         .byte   2
22458         .byte   2
22459         .hword  1024
22460         .hword  287
22461         .byte   1
22462         .byte   0
22463         .byte   24
22464         .byte   32
22465         .byte   1
22466         .byte   0
22467         .byte   1
22468         .byte   0
22469         .byte   0
22470         .zero   5
22471         .byte   6
22472         .byte   44
22473         .byte   -124
22474         .byte   100
22475         .byte   60
22476         .byte   -91
22477         .byte   0
22478         .byte   4
22479         .byte   1
22480         .byte   32
22481         .hword  512
22482         .byte   2
22483         .byte   2
22484         .hword  1024
22485         .hword  479
22486         .byte   3
22487         .byte   17
22488         .byte   40
22489         .byte   32
22490         .byte   1
22491         .byte   0
22492         .byte   1
22493         .byte   0
22494         .byte   0
22495         .zero   5
22496         .byte   6
22497         .byte   44
22498         .byte   -124
22499         .byte   100
22500         .byte   84
22501         .byte   -87
22502         .byte   0
22503         .byte   4
22504         .byte   1
22505         .byte   32
22506         .hword  512
22507         .byte   2
22508         .byte   2
22509         .hword  1024
22510         .hword  3039
22511         .byte   4
22512         .byte   18
22513         .byte   60
22514         .byte   32
22515         .byte   1
22516         .byte   0
22517         .byte   1
22518         .byte   0
22519         .byte   0
22520         .zero   5
22521         .byte   6
22522         .byte   44
22523         .byte   -41
22524         .byte   -108
22525         .byte   62
22526         .byte   -124
22527         .byte   0
22528         .byte   4
22529         .byte   1
22530         .byte   8
22531         .hword  128
22532         .byte   2
22533         .byte   2
22534         .hword  4096
22535         .hword  279
22536         .byte   1
22537         .byte   0
22538         .byte   24
22539         .byte   32
22540         .byte   1
22541         .byte   0
22542         .byte   1
22543         .byte   0
22544         .byte   0
22545         .zero   5
22546         .byte   6
22547         .byte   44
22548         .byte   72
22549         .byte   4
22550         .byte   70
22551         .byte   -123
22552         .byte   0
22553         .byte   4
22554         .byte   1
22555         .byte   8
22556         .hword  256
22557         .byte   2
22558         .byte   2
22559         .hword  1024
22560         .hword  287
22561         .byte   1
22562         .byte   0
22563         .byte   24
22564         .byte   32
22565         .byte   1
22566         .byte   0
22567         .byte   1
22568         .byte   0
22569         .byte   0
22570         .zero   5
22571         .byte   6
22572         .byte   44
22573         .byte   -120
22574         .byte   5
22575         .byte   -58
22576         .byte   -119
22577         .byte   0
22578         .byte   4
22579         .byte   2
22580         .byte   8
22581         .hword  256
22582         .byte   2
22583         .byte   2
22584         .hword  2048
22585         .hword  287
22586         .byte   1
22587         .byte   0
22588         .byte   24
22589         .byte   32
22590         .byte   1
22591         .byte   0
22592         .byte   1
22593         .byte   0
22594         .byte   0
22595         .zero   5
22596         .byte   5
22597         .byte   44
22598         .byte   -120
22599         .byte   36
22600         .byte   75
22601         .byte   -87
22602         .byte   0
22603         .byte   4
22604         .byte   1
22605         .byte   16
22606         .hword  256
22607         .byte   2
22608         .byte   2
22609         .hword  2048
22610         .hword  287
22611         .byte   1
22612         .byte   0
22613         .byte   24
22614         .byte   32
22615         .byte   1
22616         .byte   0
22617         .byte   1
22618         .byte   0
22619         .byte   0
22620         .zero   5
22621         .byte   6
22622         .byte   44
22623         .byte   104
22624         .byte   0
22625         .byte   39
22626         .byte   -87
22627         .byte   0
22628         .byte   4
22629         .byte   1
22630         .byte   16
22631         .hword  128
22632         .byte   1
22633         .byte   2
22634         .hword  2048
22635         .hword  287
22636         .byte   0
22637         .byte   0
22638         .byte   24
22639         .byte   32
22640         .byte   1
22641         .byte   0
22642         .byte   1
22643         .byte   0
22644         .byte   0
22645         .zero   5
22646         .byte   5
22647         .byte   44
22648         .byte   100
22649         .byte   100
22650         .byte   86
22651         .byte   -91
22652         .byte   0
22653         .byte   4
22654         .byte   1
22655         .byte   24
22656         .hword  512
22657         .byte   2
22658         .byte   2
22659         .hword  700
22660         .hword  479
22661         .byte   4
22662         .byte   18
22663         .byte   60
22664         .byte   32
22665         .byte   1
22666         .byte   0
22667         .byte   1
22668         .byte   0
22669         .byte   0
22670         .zero   5
22671         .byte   6
22672         .byte   44
22673         .byte   -124
22674         .byte   -59
22675         .byte   75
22676         .byte   -87
22677         .byte   0
22678         .byte   4
22679         .byte   2
22680         .byte   16
22681         .hword  256
22682         .byte   2
22683         .byte   2
22684         .hword  2048
22685         .hword  479
22686         .byte   3
22687         .byte   17
22688         .byte   40
22689         .byte   32
22690         .byte   1
22691         .byte   0
22692         .byte   1
22693         .byte   0
22694         .byte   0
22695         .zero   5
22696         .byte   6
22697         .byte   44
22698         .byte   -43
22699         .byte   -47
22700         .byte   -90
22701         .byte   104
22702         .byte   0
22703         .byte   4
22704         .byte   2
22705         .byte   8
22706         .hword  64
22707         .byte   1
22708         .byte   2
22709         .hword  2048
22710         .hword  279
22711         .byte   0
22712         .byte   0
22713         .byte   24
22714         .byte   32
22715         .byte   1
22716         .byte   0
22717         .byte   1
22718         .byte   0
22719         .byte   0
22720         .zero   5
22721         .byte   6
22722         .byte   -83
22723         .byte   -34
22724         .byte   -108
22725         .byte   -46
22726         .byte   4
22727         .byte   67
22728         .byte   2
22729         .byte   1
22730         .byte   16
22731         .hword  256
22732         .byte   2
22733         .byte   2
22734         .hword  2048
22735         .hword  473
22736         .byte   1
22737         .byte   1
22738         .byte   24
22739         .byte   32
22740         .byte   4
22741         .byte   0
22742         .byte   3
22743         .byte   0
22744         .byte   0
22745         .zero   5
22746         .byte   6
22747         .byte   -83
22748         .byte   -41
22749         .byte   -108
22750         .byte   -38
22751         .byte   116
22752         .byte   -61
22753         .byte   2
22754         .byte   1
22755         .byte   16
22756         .hword  256
22757         .byte   2
22758         .byte   2
22759         .hword  1024
22760         .hword  473
22761         .byte   1
22762         .byte   2
22763         .byte   40
22764         .byte   32
22765         .byte   4
22766         .byte   0
22767         .byte   3
22768         .byte   0
22769         .byte   0
22770         .zero   5
22771         .byte   6
22772         .byte   -83
22773         .byte   -41
22774         .byte   -108
22775         .byte   -111
22776         .byte   96
22777         .byte   68
22778         .byte   2
22779         .byte   1
22780         .byte   16
22781         .hword  256
22782         .byte   2
22783         .byte   2
22784         .hword  1046
22785         .hword  473
22786         .byte   1
22787         .byte   3
22788         .byte   40
22789         .byte   32
22790         .byte   4
22791         .byte   1
22792         .byte   3
22793         .byte   0
22794         .byte   0
22795         .zero   5
22796         .byte   6
22797         .byte   -83
22798         .byte   -34
22799         .byte   -108
22800         .byte   -38
22801         .byte   116
22802         .byte   -60
22803         .byte   2
22804         .byte   1
22805         .byte   16
22806         .hword  256
22807         .byte   2
22808         .byte   2
22809         .hword  2090
22810         .hword  473
22811         .byte   1
22812         .byte   4
22813         .byte   40
22814         .byte   32
22815         .byte   4
22816         .byte   1
22817         .byte   3
22818         .byte   0
22819         .byte   0
22820         .zero   5
22821         .byte   6
22822         .byte   -83
22823         .byte   -34
22824         .byte   -108
22825         .byte   -21
22826         .byte   116
22827         .byte   68
22828         .byte   2
22829         .byte   1
22830         .byte   32
22831         .hword  256
22832         .byte   2
22833         .byte   2
22834         .hword  1066
22835         .hword  473
22836         .byte   1
22837         .byte   3
22838         .byte   40
22839         .byte   32
22840         .byte   4
22841         .byte   1
22842         .byte   3
22843         .byte   0
22844         .byte   0
22845         .zero   5
22846         .byte   6
22847         .byte   -83
22848         .byte   -43
22849         .byte   -108
22850         .byte   -38
22851         .byte   116
22852         .byte   -60
22853         .byte   2
22854         .byte   1
22855         .byte   16
22856         .hword  256
22857         .byte   2
22858         .byte   2
22859         .hword  530
22860         .hword  473
22861         .byte   1
22862         .byte   3
22863         .byte   40
22864         .byte   32
22865         .byte   4
22866         .byte   1
22867         .byte   3
22868         .byte   0
22869         .byte   0
22870         .zero   5
22871         .byte   6
22872         .byte   -83
22873         .byte   -41
22874         .byte   -108
22875         .byte   -102
22876         .byte   116
22877         .byte   66
22878         .byte   2
22879         .byte   1
22880         .byte   16
22881         .hword  256
22882         .byte   2
22883         .byte   2
22884         .hword  1024
22885         .hword  281
22886         .byte   1
22887         .byte   0
22888         .byte   24
22889         .byte   32
22890         .byte   4
22891         .byte   0
22892         .byte   3
22893         .byte   0
22894         .byte   0
22895         .zero   5
22896         .byte   6
22897         .byte   -83
22898         .byte   -34
22899         .byte   20
22900         .byte   -89
22901         .byte   66
22902         .byte   74
22903         .byte   2
22904         .byte   1
22905         .byte   32
22906         .hword  256
22907         .byte   2
22908         .byte   2
22909         .hword  1060
22910         .hword  473
22911         .byte   2
22912         .byte   5
22913         .byte   40
22914         .byte   32
22915         .byte   4
22916         .byte   1
22917         .byte   3
22918         .byte   0
22919         .byte   0
22920         .zero   5
22921         .byte   6
22922         .byte   -83
22923         .byte   -41
22924         .byte   20
22925         .byte   -98
22926         .byte   52
22927         .byte   74
22928         .byte   2
22929         .byte   1
22930         .byte   16
22931         .hword  256
22932         .byte   2
22933         .byte   2
22934         .hword  1056
22935         .hword  473
22936         .byte   2
22937         .byte   5
22938         .byte   40
22939         .byte   32
22940         .byte   4
22941         .byte   1
22942         .byte   3
22943         .byte   0
22944         .byte   0
22945         .zero   5
22946         .byte   6
22947         .byte   -83
22948         .byte   -34
22949         .byte   -108
22950         .byte   -89
22951         .byte   66
22952         .byte   72
22953         .byte   2
22954         .byte   1
22955         .byte   32
22956         .hword  256
22957         .byte   2
22958         .byte   2
22959         .hword  1060
22960         .hword  473
22961         .byte   2
22962         .byte   5
22963         .byte   40
22964         .byte   32
22965         .byte   4
22966         .byte   1
22967         .byte   3
22968         .byte   0
22969         .byte   0
22970         .zero   5
22971         .byte   6
22972         .byte   -83
22973         .byte   -34
22974         .byte   20
22975         .byte   -85
22976         .byte   66
22977         .byte   74
22978         .byte   2
22979         .byte   1
22980         .byte   32
22981         .hword  256
22982         .byte   2
22983         .byte   2
22984         .hword  1056
22985         .hword  1497
22986         .byte   2
22987         .byte   6
22988         .byte   40
22989         .byte   32
22990         .byte   3
22991         .byte   1
22992         .byte   3
22993         .byte   0
22994         .byte   0
22995         .zero   5
22996         .byte   6
22997         .byte   -83
22998         .byte   58
22999         .byte   20
23000         .byte   -85
23001         .byte   66
23002         .byte   74
23003         .byte   2
23004         .byte   1
23005         .byte   32
23006         .hword  256
23007         .byte   2
23008         .byte   2
23009         .hword  2092
23010         .hword  1497
23011         .byte   2
23012         .byte   5
23013         .byte   40
23014         .byte   32
23015         .byte   3
23016         .byte   1
23017         .byte   3
23018         .byte   0
23019         .byte   0
23020         .zero   5
23021         .byte   6
23022         .byte   -119
23023         .byte   100
23024         .byte   68
23025         .byte   75
23026         .byte   -87
23027         .byte   0
23028         .byte   7
23029         .byte   1
23030         .byte   16
23031         .hword  256
23032         .byte   2
23033         .byte   2
23034         .hword  2048
23035         .hword  479
23036         .byte   3
23037         .byte   17
23038         .byte   40
23039         .byte   32
23040         .byte   1
23041         .byte   0
23042         .byte   1
23043         .byte   0
23044         .byte   0
23045         .zero   5
23046         .byte   6
23047         .byte   -119
23048         .byte   -120
23049         .byte   36
23050         .byte   75
23051         .byte   -87
23052         .byte   -124
23053         .byte   7
23054         .byte   1
23055         .byte   16
23056         .hword  256
23057         .byte   2
23058         .byte   2
23059         .hword  2048
23060         .hword  479
23061         .byte   3
23062         .byte   17
23063         .byte   40
23064         .byte   32
23065         .byte   1
23066         .byte   0
23067         .byte   1
23068         .byte   0
23069         .byte   0
23070         .zero   5
23071         .byte   6
23072         .byte   -119
23073         .byte   -120
23074         .byte   36
23075         .byte   75
23076         .byte   -87
23077         .byte   0
23078         .byte   7
23079         .byte   1
23080         .byte   16
23081         .hword  256
23082         .byte   2
23083         .byte   2
23084         .hword  2048
23085         .hword  279
23086         .byte   1
23087         .byte   0
23088         .byte   24
23089         .byte   32
23090         .byte   1
23091         .byte   0
23092         .byte   1
23093         .byte   0
23094         .byte   0
23095         .zero   5
23096         .byte   6
23097         .byte   -119
23098         .byte   104
23099         .byte   36
23100         .byte   74
23101         .byte   -87
23102         .byte   0
23103         .byte   7
23104         .byte   1
23105         .byte   8
23106         .hword  256
23107         .byte   2
23108         .byte   2
23109         .hword  2048
23110         .hword  279
23111         .byte   1
23112         .byte   0
23113         .byte   24
23114         .byte   32
23115         .byte   1
23116         .byte   0
23117         .byte   1
23118         .byte   0
23119         .byte   0
23120         .zero   5
23121         .byte   6
23122         .byte   -119
23123         .byte   104
23124         .byte   4
23125         .byte   74
23126         .byte   -87
23127         .byte   0
23128         .byte   7
23129         .byte   1
23130         .byte   8
23131         .hword  256
23132         .byte   2
23133         .byte   2
23134         .hword  2048
23135         .hword  279
23136         .byte   1
23137         .byte   0
23138         .byte   24
23139         .byte   32
23140         .byte   1
23141         .byte   0
23142         .byte   1
23143         .byte   0
23144         .byte   0
23145         .zero   5
23146         .byte   6
23147         .byte   -119
23148         .byte   -41
23149         .byte   -108
23150         .byte   62
23151         .byte   -124
23152         .byte   0
23153         .byte   7
23154         .byte   1
23155         .byte   8
23156         .hword  256
23157         .byte   2
23158         .byte   2
23159         .hword  2048
23160         .hword  279
23161         .byte   1
23162         .byte   0
23163         .byte   24
23164         .byte   32
23165         .byte   1
23166         .byte   0
23167         .byte   1
23168         .byte   0
23169         .byte   0
23170         .zero   5
23171         .byte   6
23172         .byte   -119
23173         .byte   104
23174         .byte   4
23175         .byte   70
23176         .byte   -87
23177         .byte   0
23178         .byte   7
23179         .byte   1
23180         .byte   8
23181         .hword  256
23182         .byte   2
23183         .byte   2
23184         .hword  2048
23185         .hword  279
23186         .byte   1
23187         .byte   0
23188         .byte   24
23189         .byte   32
23190         .byte   1
23191         .byte   0
23192         .byte   1
23193         .byte   0
23194         .byte   0
23195         .zero   5
23196         .byte   6
23197         .byte   -104
23198         .byte   -41
23199         .byte   -124
23200         .byte   -109
23201         .byte   114
23202         .byte   87
23203         .byte   1
23204         .byte   1
23205         .byte   32
23206         .hword  256
23207         .byte   2
23208         .byte   1
23209         .hword  1060
23210         .hword  1473
23211         .byte   2
23212         .byte   33
23213         .byte   40
23214         .byte   32
23215         .byte   2
23216         .byte   1
23217         .byte   1
23218         .byte   0
23219         .byte   0
23220         .zero   5
23221         .byte   6
23222         .byte   -104
23223         .byte   -34
23224         .byte   -124
23225         .byte   -109
23226         .byte   114
23227         .byte   87
23228         .byte   1
23229         .byte   1
23230         .byte   32
23231         .hword  256
23232         .byte   2
23233         .byte   1
23234         .hword  2092
23235         .hword  1473
23236         .byte   2
23237         .byte   33
23238         .byte   40
23239         .byte   32
23240         .byte   2
23241         .byte   1
23242         .byte   1
23243         .byte   0
23244         .byte   0
23245         .zero   5
23246         .byte   6
23247         .byte   -104
23248         .byte   58
23249         .byte   -123
23250         .byte   -109
23251         .byte   118
23252         .byte   87
23253         .byte   1
23254         .byte   2
23255         .byte   32
23256         .hword  256
23257         .byte   2
23258         .byte   1
23259         .hword  2092
23260         .hword  1505
23261         .byte   2
23262         .byte   33
23263         .byte   40
23264         .byte   32
23265         .byte   2
23266         .byte   1
23267         .byte   1
23268         .byte   0
23269         .byte   0
23270         .zero   5
23271         .byte   6
23272         .byte   -104
23273         .byte   -43
23274         .byte   -124
23275         .byte   50
23276         .byte   114
23277         .byte   86
23278         .byte   1
23279         .byte   1
23280         .byte   16
23281         .hword  128
23282         .byte   2
23283         .byte   1
23284         .hword  2056
23285         .hword  1473
23286         .byte   2
23287         .byte   33
23288         .byte   40
23289         .byte   32
23290         .byte   2
23291         .byte   1
23292         .byte   1
23293         .byte   0
23294         .byte   0
23295         .zero   5
23296         .byte   6
23297         .byte   -104
23298         .byte   -41
23299         .byte   -108
23300         .byte   50
23301         .byte   118
23302         .byte   86
23303         .byte   1
23304         .byte   1
23305         .byte   16
23306         .hword  128
23307         .byte   2
23308         .byte   2
23309         .hword  2058
23310         .hword  1489
23311         .byte   2
23312         .byte   33
23313         .byte   40
23314         .byte   32
23315         .byte   2
23316         .byte   1
23317         .byte   1
23318         .byte   0
23319         .byte   0
23320         .zero   5
23321         .byte   6
23322         .byte   -104
23323         .byte   -34
23324         .byte   -108
23325         .byte   -126
23326         .byte   118
23327         .byte   86
23328         .byte   1
23329         .byte   1
23330         .byte   16
23331         .hword  256
23332         .byte   2
23333         .byte   2
23334         .hword  2062
23335         .hword  1489
23336         .byte   1
23337         .byte   33
23338         .byte   40
23339         .byte   32
23340         .byte   2
23341         .byte   1
23342         .byte   1
23343         .byte   0
23344         .byte   0
23345         .zero   5
23346         .byte   6
23347         .byte   -104
23348         .byte   -34
23349         .byte   -108
23350         .byte   -109
23351         .byte   118
23352         .byte   80
23353         .byte   1
23354         .byte   1
23355         .byte   32
23356         .hword  256
23357         .byte   2
23358         .byte   2
23359         .hword  1066
23360         .hword  1497
23361         .byte   2
23362         .byte   34
23363         .byte   40
23364         .byte   32
23365         .byte   3
23366         .byte   1
23367         .byte   1
23368         .byte   0
23369         .byte   0
23370         .zero   5
23371         .byte   6
23372         .byte   -104
23373         .byte   58
23374         .byte   -107
23375         .byte   -109
23376         .byte   122
23377         .byte   80
23378         .byte   1
23379         .byte   2
23380         .byte   32
23381         .hword  256
23382         .byte   2
23383         .byte   2
23384         .hword  1066
23385         .hword  1497
23386         .byte   2
23387         .byte   34
23388         .byte   40
23389         .byte   32
23390         .byte   3
23391         .byte   1
23392         .byte   1
23393         .byte   0
23394         .byte   0
23395         .zero   5
23396         .byte   6
23397         .byte   -104
23398         .byte   -41
23399         .byte   -108
23400         .byte   50
23401         .byte   118
23402         .byte   85
23403         .byte   1
23404         .byte   1
23405         .byte   16
23406         .hword  128
23407         .byte   2
23408         .byte   2
23409         .hword  2050
23410         .hword  401
23411         .byte   2
23412         .byte   0
23413         .byte   24
23414         .byte   32
23415         .byte   1
23416         .byte   1
23417         .byte   1
23418         .byte   0
23419         .byte   0
23420         .zero   5
23421         .byte   6
23422         .byte   -104
23423         .byte   -34
23424         .byte   -108
23425         .byte   -109
23426         .byte   118
23427         .byte   87
23428         .byte   1
23429         .byte   1
23430         .byte   32
23431         .hword  256
23432         .byte   2
23433         .byte   2
23434         .hword  1058
23435         .hword  1497
23436         .byte   2
23437         .byte   33
23438         .byte   40
23439         .byte   32
23440         .byte   3
23441         .byte   1
23442         .byte   1
23443         .byte   0
23444         .byte   0
23445         .zero   5
23446         .byte   6
23447         .byte   -104
23448         .byte   -41
23449         .byte   -124
23450         .byte   -109
23451         .byte   114
23452         .byte   80
23453         .byte   1
23454         .byte   1
23455         .byte   32
23456         .hword  256
23457         .byte   2
23458         .byte   1
23459         .hword  1060
23460         .hword  1473
23461         .byte   2
23462         .byte   34
23463         .byte   40
23464         .byte   32
23465         .byte   3
23466         .byte   1
23467         .byte   1
23468         .byte   0
23469         .byte   0
23470         .zero   5
23471         .byte   6
23472         .byte   -104
23473         .byte   -34
23474         .byte   -108
23475         .byte   -109
23476         .byte   118
23477         .byte   81
23478         .byte   1
23479         .byte   1
23480         .byte   32
23481         .hword  256
23482         .byte   2
23483         .byte   2
23484         .hword  1074
23485         .hword  1497
23486         .byte   2
23487         .byte   35
23488         .byte   40
23489         .byte   32
23490         .byte   3
23491         .byte   1
23492         .byte   4
23493         .byte   0
23494         .byte   0
23495         .zero   5
23496         .byte   6
23497         .byte   -104
23498         .byte   58
23499         .byte   -108
23500         .byte   -109
23501         .byte   118
23502         .byte   81
23503         .byte   1
23504         .byte   1
23505         .byte   32
23506         .hword  256
23507         .byte   2
23508         .byte   2
23509         .hword  2106
23510         .hword  1497
23511         .byte   2
23512         .byte   35
23513         .byte   40
23514         .byte   32
23515         .byte   3
23516         .byte   1
23517         .byte   4
23518         .byte   0
23519         .byte   0
23520         .zero   5
23521         .byte   6
23522         .byte   -104
23523         .byte   -41
23524         .byte   -124
23525         .byte   -109
23526         .byte   114
23527         .byte   81
23528         .byte   1
23529         .byte   1
23530         .byte   32
23531         .hword  256
23532         .byte   2
23533         .byte   1
23534         .hword  1056
23535         .hword  1497
23536         .byte   2
23537         .byte   35
23538         .byte   40
23539         .byte   32
23540         .byte   3
23541         .byte   1
23542         .byte   4
23543         .byte   0
23544         .byte   0
23545         .zero   5
23546         .byte   6
23547         .byte   69
23548         .byte   -34
23549         .byte   -108
23550         .byte   -109
23551         .byte   118
23552         .byte   87
23553         .byte   8
23554         .byte   1
23555         .byte   32
23556         .hword  256
23557         .byte   2
23558         .byte   2
23559         .hword  1058
23560         .hword  1497
23561         .byte   2
23562         .byte   66
23563         .byte   40
23564         .byte   32
23565         .byte   3
23566         .byte   1
23567         .byte   1
23568         .byte   0
23569         .byte   0
23570         .zero   5
23571         .byte   6
23572         .byte   69
23573         .byte   -41
23574         .byte   -124
23575         .byte   -109
23576         .byte   114
23577         .byte   87
23578         .byte   8
23579         .byte   1
23580         .byte   32
23581         .hword  256
23582         .byte   2
23583         .byte   1
23584         .hword  1060
23585         .hword  1473
23586         .byte   2
23587         .byte   66
23588         .byte   40
23589         .byte   32
23590         .byte   2
23591         .byte   1
23592         .byte   1
23593         .byte   0
23594         .byte   0
23595         .zero   5
23596         .byte   6
23597         .byte   69
23598         .byte   -34
23599         .byte   -92
23600         .byte   -126
23601         .byte   118
23602         .byte   86
23603         .byte   8
23604         .byte   1
23605         .byte   16
23606         .hword  256
23607         .byte   2
23608         .byte   2
23609         .hword  2082
23610         .hword  473
23611         .byte   1
23612         .byte   65
23613         .byte   40
23614         .byte   32
23615         .byte   3
23616         .byte   1
23617         .byte   1
23618         .byte   0
23619         .byte   0
23620         .zero   5
23621         .byte   6
23622         .byte   69
23623         .byte   -34
23624         .byte   -108
23625         .byte   -109
23626         .byte   118
23627         .byte   80
23628         .byte   8
23629         .byte   1
23630         .byte   32
23631         .hword  256
23632         .byte   2
23633         .byte   2
23634         .hword  1066
23635         .hword  1497
23636         .byte   2
23637         .byte   67
23638         .byte   40
23639         .byte   32
23640         .byte   3
23641         .byte   1
23642         .byte   1
23643         .byte   0
23644         .byte   0
23645         .zero   5
23646         .byte   6
23647         .byte   69
23648         .byte   -41
23649         .byte   -124
23650         .byte   -109
23651         .byte   114
23652         .byte   80
23653         .byte   8
23654         .byte   1
23655         .byte   32
23656         .hword  256
23657         .byte   2
23658         .byte   1
23659         .hword  1060
23660         .hword  1473
23661         .byte   2
23662         .byte   67
23663         .byte   40
23664         .byte   32
23665         .byte   3
23666         .byte   1
23667         .byte   1
23668         .byte   0
23669         .byte   0
23670         .zero   5
23671         .byte   6
23672         .byte   69
23673         .byte   -34
23674         .byte   -92
23675         .byte   -126
23676         .byte   118
23677         .byte   -41
23678         .byte   8
23679         .byte   1
23680         .byte   16
23681         .hword  256
23682         .byte   2
23683         .byte   2
23684         .hword  2090
23685         .hword  1241
23686         .byte   1
23687         .byte   66
23688         .byte   40
23689         .byte   32
23690         .byte   3
23691         .byte   1
23692         .byte   1
23693         .byte   0
23694         .byte   0
23695         .zero   5
23696         .byte   6
23697         .byte   69
23698         .byte   -34
23699         .byte   -124
23700         .byte   -109
23701         .byte   114
23702         .byte   87
23703         .byte   8
23704         .byte   1
23705         .byte   32
23706         .hword  256
23707         .byte   2
23708         .byte   1
23709         .hword  2092
23710         .hword  1473
23711         .byte   2
23712         .byte   66
23713         .byte   40
23714         .byte   32
23715         .byte   3
23716         .byte   1
23717         .byte   1
23718         .byte   0
23719         .byte   0
23720         .zero   5
23721         .byte   6
23722         .byte   69
23723         .byte   58
23724         .byte   -108
23725         .byte   -109
23726         .byte   118
23727         .byte   81
23728         .byte   8
23729         .byte   1
23730         .byte   32
23731         .hword  256
23732         .byte   2
23733         .byte   2
23734         .hword  2106
23735         .hword  1497
23736         .byte   2
23737         .byte   68
23738         .byte   40
23739         .byte   32
23740         .byte   3
23741         .byte   1
23742         .byte   4
23743         .byte   0
23744         .byte   0
23745         .zero   5
23746         .byte   6
23747         .byte   69
23748         .byte   -34
23749         .byte   -108
23750         .byte   -109
23751         .byte   118
23752         .byte   81
23753         .byte   8
23754         .byte   1
23755         .byte   32
23756         .hword  256
23757         .byte   2
23758         .byte   2
23759         .hword  1074
23760         .hword  1497
23761         .byte   2
23762         .byte   68
23763         .byte   40
23764         .byte   32
23765         .byte   3
23766         .byte   1
23767         .byte   4
23768         .byte   0
23769         .byte   0
23770         .zero   5
23771         .byte   6
23772         .byte   69
23773         .byte   58
23774         .byte   -92
23775         .byte   -109
23776         .byte   122
23777         .byte   80
23778         .byte   8
23779         .byte   1
23780         .byte   32
23781         .hword  256
23782         .byte   2
23783         .byte   2
23784         .hword  2138
23785         .hword  1497
23786         .byte   2
23787         .byte   0
23788         .byte   40
23789         .byte   32
23790         .byte   3
23791         .byte   1
23792         .byte   1
23793         .byte   0
23794         .byte   0
23795         .zero   5
23796         .byte   6
23797         .byte   -20
23798         .byte   -41
23799         .byte   -108
23800         .byte   126
23801         .byte   100
23802         .byte   68
23803         .byte   0
23804         .byte   1
23805         .byte   16
23806         .hword  128
23807         .byte   2
23808         .byte   2
23809         .hword  2048
23810         .hword  473
23811         .byte   2
23812         .byte   49
23813         .byte   60
23814         .byte   36
23815         .byte   3
23816         .byte   0
23817         .byte   3
23818         .byte   0
23819         .byte   0
23820         .zero   5
23821         .byte   6
23822         .byte   -20
23823         .byte   -34
23824         .byte   -43
23825         .byte   126
23826         .byte   104
23827         .byte   68
23828         .byte   0
23829         .byte   2
23830         .byte   16
23831         .hword  128
23832         .byte   2
23833         .byte   2
23834         .hword  2048
23835         .hword  505
23836         .byte   2
23837         .byte   49
23838         .byte   60
23839         .byte   36
23840         .byte   3
23841         .byte   0
23842         .byte   3
23843         .byte   0
23844         .byte   0
23845         .zero   5
23846         .byte   6
23847         .byte   -20
23848         .byte   -41
23849         .byte   -108
23850         .byte   122
23851         .byte   84
23852         .byte   67
23853         .byte   0
23854         .byte   1
23855         .byte   16
23856         .hword  128
23857         .byte   2
23858         .byte   2
23859         .hword  2076
23860         .hword  409
23861         .byte   2
23862         .byte   0
23863         .byte   40
23864         .byte   36
23865         .byte   3
23866         .byte   1
23867         .byte   3
23868         .byte   0
23869         .byte   0
23870         .zero   5
23871         .byte   6
23872         .byte   -20
23873         .byte   -34
23874         .byte   -43
23875         .byte   122
23876         .byte   88
23877         .byte   67
23878         .byte   0
23879         .byte   2
23880         .byte   16
23881         .hword  128
23882         .byte   2
23883         .byte   2
23884         .hword  2076
23885         .hword  441
23886         .byte   2
23887         .byte   0
23888         .byte   40
23889         .byte   36
23890         .byte   3
23891         .byte   1
23892         .byte   3
23893         .byte   0
23894         .byte   0
23895         .zero   5
23896         .byte   6
23897         .byte   -20
23898         .byte   -43
23899         .byte   -108
23900         .byte   118
23901         .byte   84
23902         .byte   67
23903         .byte   0
23904         .byte   1
23905         .byte   16
23906         .hword  128
23907         .byte   2
23908         .byte   2
23909         .hword  1038
23910         .hword  281
23911         .byte   2
23912         .byte   0
23913         .byte   24
23914         .byte   36
23915         .byte   3
23916         .byte   1
23917         .byte   3
23918         .byte   0
23919         .byte   0
23920         .zero   5
23921         .byte   6
23922         .byte   -20
23923         .byte   -41
23924         .byte   20
23925         .byte   118
23926         .byte   84
23927         .byte   -62
23928         .byte   0
23929         .byte   1
23930         .byte   16
23931         .hword  128
23932         .byte   2
23933         .byte   2
23934         .hword  2076
23935         .hword  1169
23936         .byte   2
23937         .byte   0
23938         .byte   24
23939         .byte   40
23940         .byte   3
23941         .byte   1
23942         .byte   3
23943         .byte   0
23944         .byte   0
23945         .zero   5
23946         .section        .rodata.str1.1,"aMS",%progbits,1
23947 .LC0:
23948         .string "Context allocation failed\n"
23949 .LC1:
23950         .string "phyBlk = 0x%x die = %d block_in_die = 0x%x 0x%8x\n"
23951 .LC2:
23952         .string "FLASH INFO:\n"
23953 .LC3:
23954         .string "FLASH ID: %x\n"
23955 .LC4:
23956         .string "Device Capacity: %d MB\n"
23957 .LC5:
23958         .string "FMWAIT: %x %x %x %x\n"
23959 .LC6:
23960         .string "FTL INFO:\n"
23961 .LC7:
23962         .string "g_MaxLpn = 0x%x\n"
23963 .LC8:
23964         .string "g_VaildLpn = 0x%x\n"
23965 .LC9:
23966         .string "read_page_count = 0x%x\n"
23967 .LC10:
23968         .string "discard_page_count = 0x%x\n"
23969 .LC11:
23970         .string "write_page_count = 0x%x\n"
23971 .LC12:
23972         .string "cache_write_count = 0x%x\n"
23973 .LC13:
23974         .string "l2p_write_count = 0x%x\n"
23975 .LC14:
23976         .string "gc_page_count = 0x%x\n"
23977 .LC15:
23978         .string "totle_write = %d MB\n"
23979 .LC16:
23980         .string "totle_read = %d MB\n"
23981 .LC17:
23982         .string "GSV = 0x%x\n"
23983 .LC18:
23984         .string "GDV = 0x%x\n"
23985 .LC19:
23986         .string "bad blk num = %d %d\n"
23987 .LC20:
23988         .string "free_superblocks = 0x%x\n"
23989 .LC21:
23990         .string "mlc_EC = 0x%x\n"
23991 .LC22:
23992         .string "slc_EC = 0x%x\n"
23993 .LC23:
23994         .string "avg_EC = 0x%x\n"
23995 .LC24:
23996         .string "sys_EC = 0x%x\n"
23997 .LC25:
23998         .string "max_EC = 0x%x\n"
23999 .LC26:
24000         .string "min_EC = 0x%x\n"
24001 .LC27:
24002         .string "PLT = 0x%x\n"
24003 .LC28:
24004         .string "POT = 0x%x\n"
24005 .LC29:
24006         .string "MaxSector = 0x%x\n"
24007 .LC30:
24008         .string "init_sys_blks_pp = 0x%x\n"
24009 .LC31:
24010         .string "sys_blks_pp = 0x%x\n"
24011 .LC32:
24012         .string "free sysblock = 0x%x\n"
24013 .LC33:
24014         .string "data_blks_pp = 0x%x\n"
24015 .LC34:
24016         .string "data_op_blks_pp = 0x%x\n"
24017 .LC35:
24018         .string "max_data_blks = 0x%x\n"
24019 .LC36:
24020         .string "Sys.id = 0x%x\n"
24021 .LC37:
24022         .string "Bbt.id = 0x%x\n"
24023 .LC38:
24024         .string "ACT.page = 0x%x\n"
24025 .LC39:
24026         .string "ACT.plane = 0x%x\n"
24027 .LC40:
24028         .string "ACT.id = 0x%x\n"
24029 .LC41:
24030         .string "ACT.mode = 0x%x\n"
24031 .LC42:
24032         .string "ACT.a_pages = 0x%x\n"
24033 .LC43:
24034         .string "ACT VPC = 0x%x\n"
24035 .LC44:
24036         .string "BUF.page = 0x%x\n"
24037 .LC45:
24038         .string "BUF.plane = 0x%x\n"
24039 .LC46:
24040         .string "BUF.id = 0x%x\n"
24041 .LC47:
24042         .string "BUF.mode = 0x%x\n"
24043 .LC48:
24044         .string "BUF.a_pages = 0x%x\n"
24045 .LC49:
24046         .string "BUF VPC = 0x%x\n"
24047 .LC50:
24048         .string "TMP.page = 0x%x\n"
24049 .LC51:
24050         .string "TMP.plane = 0x%x\n"
24051 .LC52:
24052         .string "TMP.id = 0x%x\n"
24053 .LC53:
24054         .string "TMP.mode = 0x%x\n"
24055 .LC54:
24056         .string "TMP.a_pages = 0x%x\n"
24057 .LC55:
24058         .string "GC.page = 0x%x\n"
24059 .LC56:
24060         .string "GC.plane = 0x%x\n"
24061 .LC57:
24062         .string "GC.id = 0x%x\n"
24063 .LC58:
24064         .string "GC.mode = 0x%x\n"
24065 .LC59:
24066         .string "GC.a_pages = 0x%x\n"
24067 .LC60:
24068         .string "WR_CHK = 0x%x %x %x %x\n"
24069 .LC61:
24070         .string "Read Err Cnt = 0x%x\n"
24071 .LC62:
24072         .string "Prog Err Cnt = 0x%x\n"
24073 .LC63:
24074         .string "gc_free_blk_th= 0x%x\n"
24075 .LC64:
24076         .string "gc_merge_free_blk_th= 0x%x\n"
24077 .LC65:
24078         .string "gc_skip_write_count= 0x%x\n"
24079 .LC66:
24080         .string "gc_blk_index= 0x%x\n"
24081 .LC67:
24082         .string "free min EC= 0x%x\n"
24083 .LC68:
24084         .string "free max EC= 0x%x\n"
24085 .LC69:
24086         .string "GC__SB VPC = 0x%x\n"
24087 .LC70:
24088         .string "%d. [0x%x]=0x%x 0x%x  0x%x\n"
24089 .LC71:
24090         .string "free %d. [0x%x] 0x%x  0x%x\n"
24091 .LC72:
24092         .string "%s\n"
24093 .LC73:
24094         .string "FTL version: 5.0.31 20160315"
24095 .LC74:
24096         .string "GetSwlReplaceBlock min_ec_id =%x %x\n"
24097 .LC75:
24098         .string "swblk %x ,avg = %x max= %x vpc= %x,ec=%x ,max ec=%x\n"
24099 .LC76:
24100         .string "FtlGcRefreshBlock  0x%x \n"
24101 .LC77:
24102         .string "FtlGcMarkBadPhyBlk %d 0x%x\n"
24103 .LC78:
24104         .string "%s error allocating memory. return -1\n"
24105 .LC79:
24106         .string "%s 0x%x:"
24107 .LC80:
24108         .string "%x "
24109 .LC81:
24110         .string ""
24111 .LC82:
24112         .string "%d statReg->V6.mtrans_cnt=%d flReg.V6.page_num=%d\n"
24113 .LC83:
24114         .string "nandc:"
24115 .LC84:
24116         .string "%d flReg.d32=%x %x\n"
24117 .LC85:
24118         .string "sync para %d\n"
24119 .LC86:
24120         .string "TOG mode Read error %x %x\n"
24121 .LC87:
24122         .string "read retry status %x %x %x\n"
24123 .LC88:
24124         .string "ECC:%d\n"
24125 .LC89:
24126         .string "No.%d FLASH ID:%x %x %x %x %x %x\n"
24127 .LC90:
24128         .string "FlashLoadPhyInfo fail %x!!\n"
24129 .LC91:
24130         .string "ReadRetry pageadd=%x  ecc=%x err=%x\n"
24131 .LC92:
24132         .string "Read pageadd=%x  ecc=%x err=%x\n"
24133 .LC93:
24134         .string "spare:"
24135 .LC94:
24136         .string "FLFB:%d %d\n"
24137 .LC95:
24138         .string "no ect"
24139 .LC96:
24140         .string "slc mode"
24141 .LC97:
24142         .string "prog error: = %x\n"
24143 .LC98:
24144         .string "prog read error: = %x\n"
24145 .LC99:
24146         .string "prog read s error: = %x %x %x\n"
24147 .LC100:
24148         .string "prog read d error: = %x %x %x\n"
24149 .LC101:
24150         .string "FlashMakeFactorBbt %d\n"
24151 .LC102:
24152         .string "bad block:%d %d\n"
24153 .LC103:
24154         .string "FMFB:%d %d\n"
24155 .LC104:
24156         .string "E:bad block:%d\n"
24157 .LC105:
24158         .string "FMFB:Save %d %d\n"
24159 .LC106:
24160         .string "FtlBbmTblFlush id=%x,page=%x,previd=%x cnt=%d\n"
24161 .LC107:
24162         .string "FtlBbmTblFlush error:%x\n"
24163 .LC108:
24164         .string "FtlGcFreeBadSuperBlk 0x%x\n"
24165 .LC109:
24166         .string "decrement_vpc_count %x = %d\n"
24167 .LC110:
24168         .string "spuer block %x vpn is 0\n "
24169 .LC111:
24170         .string "...%s enter...\n"
24171 .LC112:
24172         .string "FtlCheckVpc %x = %x  %x\n"
24173 .LC113:
24174         .string "Ftlwrite decrement_vpc_count %x = %d\n"
24175 .LC114:
24176         .string "FtlInit %x\n"
24177 .LC115:
24178         .string "%d GC datablk  = %x vpc %x %x\n"
24179 .LC116:
24180         .string "SWL %x, FSB = %x vpc= %x,ec=%x th=%x\n"
24181 .LC117:
24182         .string "FtlWrite: lpa error:%x %x\n"
24183 .LC118:
24184         .string "BBT:"
24185 .LC119:
24186         .string "IdBlockReadData %x %x\n"
24187 .LC120:
24188         .string "IdBlockReadData %x %x ret= %x\n"
24189 .LC121:
24190         .string "IDBlockWriteData %x %x\n"
24191 .LC122:
24192         .string "IDBlockWriteData %x %x ret= %x\n"
24193 .LC123:
24194         .string "idblk:"
24195 .LC124:
24196         .string "idb reverse %x %x\n"
24197 .LC125:
24198         .string "write_idblock totle_sec %x %x\n"
24199 .LC126:
24200         .string "write and check error:%d idb=%x,offset=%x,r=%x,w=%x \n"
24201 .LC127:
24202         .string "write"
24203 .LC128:
24204         .string "read"
24205 .LC129:
24206         .string "write_idblock error\n"
24207 .LC130:
24208         .string "READ_SECTOR_IO\n"
24209 .LC131:
24210         .string "copy_from_user error \n"
24211 .LC132:
24212         .string "READ_SECTOR_IO %x %x\n"
24213 .LC133:
24214         .string "copy_to_user error\n"
24215 .LC134:
24216         .string "WRITE_SECTOR_IO\n"
24217 .LC135:
24218         .string "WRITE_SECTOR_IO %x %x\n"
24219 .LC136:
24220         .string "END_WRITE_SECTOR_IO\n"
24221 .LC137:
24222         .string "END_WRITE_SECTOR_IO %x %x\n"
24223 .LC138:
24224         .string "GET_FLASH_INFO_IO\n"
24225 .LC139:
24226         .string "GET_BAD_BLOCK_IO\n"
24227 .LC140:
24228         .string "bbt:"
24229 .LC141:
24230         .string "GET_LOCK_FLAG_IO\n"
24231 .LC142:
24232         .string "GET_PUBLIC_KEY_IO\n"
24233 .LC143:
24234         .string "RKNAND_GET_DRM_KEY\n"
24235 .LC144:
24236         .string "RKNAND_STORE_DRM_KEY\n"
24237 .LC145:
24238         .string "RKNAND_DIASBLE_SECURE_BOOT\n"
24239 .LC146:
24240         .string "RKNAND_ENASBLE_SECURE_BOOT\n"
24241 .LC147:
24242         .string "RKNAND_GET_SN_SECTOR\n"
24243 .LC148:
24244         .string "RKNAND_LOADER_UNLOCK\n"
24245 .LC149:
24246         .string "RKNAND_LOADER_STATUS\n"
24247 .LC150:
24248         .string "RKNAND_LOADER_LOCK\n"
24249 .LC151:
24250         .string "LockKey not match %d\n"
24251 .LC152:
24252         .string "RKNAND_GET_VENDOR_SECTOR\n"
24253 .LC153:
24254         .string "RKNAND_STORE_VENDOR_SECTOR\n"
24255 .LC154:
24256         .string "return ret = %lx\n"
24257 .LC155:
24258         .string "secureBootEn check error\n"
24259 .LC156:
24260         .string "rknand_sys_storage"
24261         .bss
24262         .align  3
24263 .LANCHOR0 = . + 0
24264         .type   NANDC_FMCTL, %object
24265         .size   NANDC_FMCTL, 4
24266 NANDC_FMCTL:
24267         .zero   4
24268         .type   NANDC_FMWAIT, %object
24269         .size   NANDC_FMWAIT, 4
24270 NANDC_FMWAIT:
24271         .zero   4
24272         .type   NANDC_FLCTL, %object
24273         .size   NANDC_FLCTL, 4
24274 NANDC_FLCTL:
24275         .zero   4
24276         .type   NANDC_BCHCTL, %object
24277         .size   NANDC_BCHCTL, 4
24278 NANDC_BCHCTL:
24279         .zero   4
24280         .type   NANDC_DLL_CTL_REG0, %object
24281         .size   NANDC_DLL_CTL_REG0, 4
24282 NANDC_DLL_CTL_REG0:
24283         .zero   4
24284         .type   NANDC_DLL_CTL_REG1, %object
24285         .size   NANDC_DLL_CTL_REG1, 4
24286 NANDC_DLL_CTL_REG1:
24287         .zero   4
24288         .type   NANDC_RANDMZ_CFG, %object
24289         .size   NANDC_RANDMZ_CFG, 4
24290 NANDC_RANDMZ_CFG:
24291         .zero   4
24292         .type   NANDC_FMWAIT_SYN, %object
24293         .size   NANDC_FMWAIT_SYN, 4
24294 NANDC_FMWAIT_SYN:
24295         .zero   4
24296         .type   gc_discard_updated, %object
24297         .size   gc_discard_updated, 4
24298 gc_discard_updated:
24299         .zero   4
24300         .type   SecureBootUnlockTryCount, %object
24301         .size   SecureBootUnlockTryCount, 4
24302 SecureBootUnlockTryCount:
24303         .zero   4
24304         .type   SecureBootCheckOK, %object
24305         .size   SecureBootCheckOK, 4
24306 SecureBootCheckOK:
24307         .zero   4
24308         .type   SecureBootEn, %object
24309         .size   SecureBootEn, 4
24310 SecureBootEn:
24311         .zero   4
24312         .type   gpVendor1Info, %object
24313         .size   gpVendor1Info, 8
24314 gpVendor1Info:
24315         .zero   8
24316         .type   gpVendor0Info, %object
24317         .size   gpVendor0Info, 8
24318 gpVendor0Info:
24319         .zero   8
24320         .type   g_idb_buffer, %object
24321         .size   g_idb_buffer, 8
24322 g_idb_buffer:
24323         .zero   8
24324         .type   gSnSectorData, %object
24325         .size   gSnSectorData, 512
24326 gSnSectorData:
24327         .zero   512
24328         .type   gpDrmKeyInfo, %object
24329         .size   gpDrmKeyInfo, 8
24330 gpDrmKeyInfo:
24331         .zero   8
24332         .type   gpBootConfig, %object
24333         .size   gpBootConfig, 8
24334 gpBootConfig:
24335         .zero   8
24336         .type   gLoaderBootInfo, %object
24337         .size   gLoaderBootInfo, 8
24338 gLoaderBootInfo:
24339         .zero   8
24340         .type   RK29_NANDC1_REG_BASE, %object
24341         .size   RK29_NANDC1_REG_BASE, 8
24342 RK29_NANDC1_REG_BASE:
24343         .zero   8
24344         .type   RK29_NANDC_REG_BASE, %object
24345         .size   RK29_NANDC_REG_BASE, 8
24346 RK29_NANDC_REG_BASE:
24347         .zero   8
24348         .type   gc_ink_free_return_value, %object
24349         .size   gc_ink_free_return_value, 2
24350 gc_ink_free_return_value:
24351         .zero   2
24352         .type   FtlUpdateVaildLpnCount, %object
24353         .size   FtlUpdateVaildLpnCount, 2
24354 FtlUpdateVaildLpnCount:
24355         .zero   2
24356         .type   g_ect_tbl_power_up_flush, %object
24357         .size   g_ect_tbl_power_up_flush, 2
24358 g_ect_tbl_power_up_flush:
24359         .zero   2
24360         .zero   2
24361         .type   last_cache_match_count, %object
24362         .size   last_cache_match_count, 4
24363 last_cache_match_count:
24364         .zero   4
24365         .type   g_LowFormat, %object
24366         .size   g_LowFormat, 4
24367 g_LowFormat:
24368         .zero   4
24369         .type   DeviceCapacity, %object
24370         .size   DeviceCapacity, 4
24371 DeviceCapacity:
24372         .zero   4
24373         .zero   4
24374         .type   FbbtBlk, %object
24375         .size   FbbtBlk, 16
24376 FbbtBlk:
24377         .zero   16
24378         .type   g_power_lost_recovery_flag, %object
24379         .size   g_power_lost_recovery_flag, 2
24380 g_power_lost_recovery_flag:
24381         .zero   2
24382         .type   c_mlc_erase_count_value, %object
24383         .size   c_mlc_erase_count_value, 2
24384 c_mlc_erase_count_value:
24385         .zero   2
24386         .zero   4
24387         .type   g_recovery_ppa_tbl, %object
24388         .size   g_recovery_ppa_tbl, 128
24389 g_recovery_ppa_tbl:
24390         .zero   128
24391         .type   g_recovery_page_min_ver, %object
24392         .size   g_recovery_page_min_ver, 4
24393 g_recovery_page_min_ver:
24394         .zero   4
24395         .type   g_recovery_page_num, %object
24396         .size   g_recovery_page_num, 4
24397 g_recovery_page_num:
24398         .zero   4
24399         .type   g_cur_erase_blk, %object
24400         .size   g_cur_erase_blk, 4
24401 g_cur_erase_blk:
24402         .zero   4
24403         .type   g_gc_skip_write_count, %object
24404         .size   g_gc_skip_write_count, 4
24405 g_gc_skip_write_count:
24406         .zero   4
24407         .type   g_gc_head_data_block_count, %object
24408         .size   g_gc_head_data_block_count, 4
24409 g_gc_head_data_block_count:
24410         .zero   4
24411         .type   g_gc_head_data_block, %object
24412         .size   g_gc_head_data_block, 4
24413 g_gc_head_data_block:
24414         .zero   4
24415         .type   g_ftl_nand_free_count, %object
24416         .size   g_ftl_nand_free_count, 4
24417 g_ftl_nand_free_count:
24418         .zero   4
24419         .type   g_in_swl_replace, %object
24420         .size   g_in_swl_replace, 4
24421 g_in_swl_replace:
24422         .zero   4
24423         .type   g_in_gc_progress, %object
24424         .size   g_in_gc_progress, 4
24425 g_in_gc_progress:
24426         .zero   4
24427         .type   g_all_blk_used_slc_mode, %object
24428         .size   g_all_blk_used_slc_mode, 4
24429 g_all_blk_used_slc_mode:
24430         .zero   4
24431         .type   g_max_erase_count, %object
24432         .size   g_max_erase_count, 4
24433 g_max_erase_count:
24434         .zero   4
24435         .type   g_totle_sys_slc_erase_count, %object
24436         .size   g_totle_sys_slc_erase_count, 4
24437 g_totle_sys_slc_erase_count:
24438         .zero   4
24439         .type   g_totle_slc_erase_count, %object
24440         .size   g_totle_slc_erase_count, 4
24441 g_totle_slc_erase_count:
24442         .zero   4
24443         .type   g_min_erase_count, %object
24444         .size   g_min_erase_count, 4
24445 g_min_erase_count:
24446         .zero   4
24447         .type   g_totle_avg_erase_count, %object
24448         .size   g_totle_avg_erase_count, 4
24449 g_totle_avg_erase_count:
24450         .zero   4
24451         .type   g_totle_mlc_erase_count, %object
24452         .size   g_totle_mlc_erase_count, 4
24453 g_totle_mlc_erase_count:
24454         .zero   4
24455         .type   g_totle_l2p_write_count, %object
24456         .size   g_totle_l2p_write_count, 4
24457 g_totle_l2p_write_count:
24458         .zero   4
24459         .type   g_totle_cache_write_count, %object
24460         .size   g_totle_cache_write_count, 4
24461 g_totle_cache_write_count:
24462         .zero   4
24463         .type   g_tmp_data_superblock_id, %object
24464         .size   g_tmp_data_superblock_id, 2
24465 g_tmp_data_superblock_id:
24466         .zero   2
24467         .zero   2
24468         .type   g_totle_read_page_count, %object
24469         .size   g_totle_read_page_count, 4
24470 g_totle_read_page_count:
24471         .zero   4
24472         .type   g_totle_discard_page_count, %object
24473         .size   g_totle_discard_page_count, 4
24474 g_totle_discard_page_count:
24475         .zero   4
24476         .type   g_totle_read_sector, %object
24477         .size   g_totle_read_sector, 4
24478 g_totle_read_sector:
24479         .zero   4
24480         .type   g_totle_write_sector, %object
24481         .size   g_totle_write_sector, 4
24482 g_totle_write_sector:
24483         .zero   4
24484         .type   g_totle_write_page_count, %object
24485         .size   g_totle_write_page_count, 4
24486 g_totle_write_page_count:
24487         .zero   4
24488         .type   g_totle_gc_page_count, %object
24489         .size   g_totle_gc_page_count, 4
24490 g_totle_gc_page_count:
24491         .zero   4
24492         .type   g_gc_blk_index, %object
24493         .size   g_gc_blk_index, 2
24494 g_gc_blk_index:
24495         .zero   2
24496         .type   g_gc_merge_free_blk_threshold, %object
24497         .size   g_gc_merge_free_blk_threshold, 2
24498 g_gc_merge_free_blk_threshold:
24499         .zero   2
24500         .type   g_gc_free_blk_threshold, %object
24501         .size   g_gc_free_blk_threshold, 2
24502 g_gc_free_blk_threshold:
24503         .zero   2
24504         .zero   6
24505         .type   g_gc_bad_block_temp_tbl, %object
24506         .size   g_gc_bad_block_temp_tbl, 34
24507 g_gc_bad_block_temp_tbl:
24508         .zero   34
24509         .type   g_gc_bad_block_gc_index, %object
24510         .size   g_gc_bad_block_gc_index, 2
24511 g_gc_bad_block_gc_index:
24512         .zero   2
24513         .type   g_gc_bad_block_temp_num, %object
24514         .size   g_gc_bad_block_temp_num, 2
24515 g_gc_bad_block_temp_num:
24516         .zero   2
24517         .type   g_gc_next_blk_1, %object
24518         .size   g_gc_next_blk_1, 2
24519 g_gc_next_blk_1:
24520         .zero   2
24521         .type   g_gc_next_blk, %object
24522         .size   g_gc_next_blk, 2
24523 g_gc_next_blk:
24524         .zero   2
24525         .type   g_gc_cur_blk_max_valid_pages, %object
24526         .size   g_gc_cur_blk_max_valid_pages, 2
24527 g_gc_cur_blk_max_valid_pages:
24528         .zero   2
24529         .type   g_gc_cur_blk_valid_pages, %object
24530         .size   g_gc_cur_blk_valid_pages, 2
24531 g_gc_cur_blk_valid_pages:
24532         .zero   2
24533         .type   g_gc_page_offset, %object
24534         .size   g_gc_page_offset, 2
24535 g_gc_page_offset:
24536         .zero   2
24537         .type   g_gc_blk_num, %object
24538         .size   g_gc_blk_num, 2
24539 g_gc_blk_num:
24540         .zero   2
24541         .zero   6
24542         .type   p_gc_blk_tbl, %object
24543         .size   p_gc_blk_tbl, 8
24544 p_gc_blk_tbl:
24545         .zero   8
24546         .type   p_gc_page_info, %object
24547         .size   p_gc_page_info, 8
24548 p_gc_page_info:
24549         .zero   8
24550         .type   g_sys_ext_data, %object
24551         .size   g_sys_ext_data, 512
24552 g_sys_ext_data:
24553         .zero   512
24554         .type   g_sys_save_data, %object
24555         .size   g_sys_save_data, 48
24556 g_sys_save_data:
24557         .zero   48
24558         .type   gp_last_act_superblock, %object
24559         .size   gp_last_act_superblock, 8
24560 gp_last_act_superblock:
24561         .zero   8
24562         .type   g_gc_superblock, %object
24563         .size   g_gc_superblock, 48
24564 g_gc_superblock:
24565         .zero   48
24566         .type   g_gc_temp_superblock, %object
24567         .size   g_gc_temp_superblock, 48
24568 g_gc_temp_superblock:
24569         .zero   48
24570         .type   g_buffer_superblock, %object
24571         .size   g_buffer_superblock, 48
24572 g_buffer_superblock:
24573         .zero   48
24574         .type   g_active_superblock, %object
24575         .size   g_active_superblock, 48
24576 g_active_superblock:
24577         .zero   48
24578         .type   g_num_data_superblocks, %object
24579         .size   g_num_data_superblocks, 2
24580 g_num_data_superblocks:
24581         .zero   2
24582         .type   g_num_free_superblocks, %object
24583         .size   g_num_free_superblocks, 2
24584 g_num_free_superblocks:
24585         .zero   2
24586         .zero   4
24587         .type   p_data_block_list_tail, %object
24588         .size   p_data_block_list_tail, 8
24589 p_data_block_list_tail:
24590         .zero   8
24591         .type   p_data_block_list_head, %object
24592         .size   p_data_block_list_head, 8
24593 p_data_block_list_head:
24594         .zero   8
24595         .type   p_free_data_block_list_head, %object
24596         .size   p_free_data_block_list_head, 8
24597 p_free_data_block_list_head:
24598         .zero   8
24599         .type   p_data_block_list_table, %object
24600         .size   p_data_block_list_table, 8
24601 p_data_block_list_table:
24602         .zero   8
24603         .type   g_l2p_last_update_region_id, %object
24604         .size   g_l2p_last_update_region_id, 2
24605 g_l2p_last_update_region_id:
24606         .zero   2
24607         .zero   6
24608         .type   p_l2p_map_buf, %object
24609         .size   p_l2p_map_buf, 8
24610 p_l2p_map_buf:
24611         .zero   8
24612         .type   p_l2p_ram_map, %object
24613         .size   p_l2p_ram_map, 8
24614 p_l2p_ram_map:
24615         .zero   8
24616         .type   g_totle_vendor_block, %object
24617         .size   g_totle_vendor_block, 2
24618 g_totle_vendor_block:
24619         .zero   2
24620         .zero   6
24621         .type   p_vendor_region_ppn_table, %object
24622         .size   p_vendor_region_ppn_table, 8
24623 p_vendor_region_ppn_table:
24624         .zero   8
24625         .type   p_vendor_block_ver_table, %object
24626         .size   p_vendor_block_ver_table, 8
24627 p_vendor_block_ver_table:
24628         .zero   8
24629         .type   p_vendor_block_valid_page_count, %object
24630         .size   p_vendor_block_valid_page_count, 8
24631 p_vendor_block_valid_page_count:
24632         .zero   8
24633         .type   p_vendor_block_table, %object
24634         .size   p_vendor_block_table, 8
24635 p_vendor_block_table:
24636         .zero   8
24637         .type   g_totle_map_block, %object
24638         .size   g_totle_map_block, 2
24639 g_totle_map_block:
24640         .zero   2
24641         .zero   6
24642         .type   p_map_region_ppn_table, %object
24643         .size   p_map_region_ppn_table, 8
24644 p_map_region_ppn_table:
24645         .zero   8
24646         .type   p_map_block_ver_table, %object
24647         .size   p_map_block_ver_table, 8
24648 p_map_block_ver_table:
24649         .zero   8
24650         .type   p_map_block_valid_page_count, %object
24651         .size   p_map_block_valid_page_count, 8
24652 p_map_block_valid_page_count:
24653         .zero   8
24654         .type   p_map_block_table, %object
24655         .size   p_map_block_table, 8
24656 p_map_block_table:
24657         .zero   8
24658         .type   p_valid_page_count_check_table, %object
24659         .size   p_valid_page_count_check_table, 8
24660 p_valid_page_count_check_table:
24661         .zero   8
24662         .type   p_valid_page_count_table, %object
24663         .size   p_valid_page_count_table, 8
24664 p_valid_page_count_table:
24665         .zero   8
24666         .type   g_totle_swl_count, %object
24667         .size   g_totle_swl_count, 4
24668 g_totle_swl_count:
24669         .zero   4
24670         .zero   4
24671         .type   p_swl_mul_table, %object
24672         .size   p_swl_mul_table, 8
24673 p_swl_mul_table:
24674         .zero   8
24675         .type   p_erase_count_table, %object
24676         .size   p_erase_count_table, 8
24677 p_erase_count_table:
24678         .zero   8
24679         .type   g_ect_tbl_info_size, %object
24680         .size   g_ect_tbl_info_size, 2
24681 g_ect_tbl_info_size:
24682         .zero   2
24683         .zero   6
24684         .type   gp_ect_tbl_info, %object
24685         .size   gp_ect_tbl_info, 8
24686 gp_ect_tbl_info:
24687         .zero   8
24688         .type   g_gc_num_req, %object
24689         .size   g_gc_num_req, 4
24690 g_gc_num_req:
24691         .zero   4
24692         .type   c_gc_page_buf_num, %object
24693         .size   c_gc_page_buf_num, 4
24694 c_gc_page_buf_num:
24695         .zero   4
24696         .type   gp_gc_page_buf_info, %object
24697         .size   gp_gc_page_buf_info, 8
24698 gp_gc_page_buf_info:
24699         .zero   8
24700         .type   p_gc_data_buf, %object
24701         .size   p_gc_data_buf, 8
24702 p_gc_data_buf:
24703         .zero   8
24704         .type   p_gc_spare_buf, %object
24705         .size   p_gc_spare_buf, 8
24706 p_gc_spare_buf:
24707         .zero   8
24708         .type   p_io_spare_buf, %object
24709         .size   p_io_spare_buf, 8
24710 p_io_spare_buf:
24711         .zero   8
24712         .type   p_io_data_buf_1, %object
24713         .size   p_io_data_buf_1, 8
24714 p_io_data_buf_1:
24715         .zero   8
24716         .type   p_io_data_buf_0, %object
24717         .size   p_io_data_buf_0, 8
24718 p_io_data_buf_0:
24719         .zero   8
24720         .type   p_sys_spare_buf, %object
24721         .size   p_sys_spare_buf, 8
24722 p_sys_spare_buf:
24723         .zero   8
24724         .type   p_vendor_data_buf, %object
24725         .size   p_vendor_data_buf, 8
24726 p_vendor_data_buf:
24727         .zero   8
24728         .type   p_sys_data_buf_1, %object
24729         .size   p_sys_data_buf_1, 8
24730 p_sys_data_buf_1:
24731         .zero   8
24732         .type   p_sys_data_buf, %object
24733         .size   p_sys_data_buf, 8
24734 p_sys_data_buf:
24735         .zero   8
24736         .type   g_wr_page_num, %object
24737         .size   g_wr_page_num, 4
24738 g_wr_page_num:
24739         .zero   4
24740         .zero   4
24741         .type   req_wr_io, %object
24742         .size   req_wr_io, 8
24743 req_wr_io:
24744         .zero   8
24745         .type   c_wr_page_buf_num, %object
24746         .size   c_wr_page_buf_num, 4
24747 c_wr_page_buf_num:
24748         .zero   4
24749         .zero   4
24750         .type   p_wr_io_data_buf, %object
24751         .size   p_wr_io_data_buf, 8
24752 p_wr_io_data_buf:
24753         .zero   8
24754         .type   p_wr_io_spare_buf, %object
24755         .size   p_wr_io_spare_buf, 8
24756 p_wr_io_spare_buf:
24757         .zero   8
24758         .type   p_plane_order_table, %object
24759         .size   p_plane_order_table, 32
24760 p_plane_order_table:
24761         .zero   32
24762         .type   g_req_cache, %object
24763         .size   g_req_cache, 8
24764 g_req_cache:
24765         .zero   8
24766         .type   req_gc_dst, %object
24767         .size   req_gc_dst, 8
24768 req_gc_dst:
24769         .zero   8
24770         .type   req_gc, %object
24771         .size   req_gc, 8
24772 req_gc:
24773         .zero   8
24774         .type   req_erase, %object
24775         .size   req_erase, 8
24776 req_erase:
24777         .zero   8
24778         .type   req_prgm, %object
24779         .size   req_prgm, 8
24780 req_prgm:
24781         .zero   8
24782         .type   req_read, %object
24783         .size   req_read, 8
24784 req_read:
24785         .zero   8
24786         .type   req_sys, %object
24787         .size   req_sys, 56
24788 req_sys:
24789         .zero   56
24790         .type   gVendorBlkInfo, %object
24791         .size   gVendorBlkInfo, 64
24792 gVendorBlkInfo:
24793         .zero   64
24794         .type   gL2pMapInfo, %object
24795         .size   gL2pMapInfo, 64
24796 gL2pMapInfo:
24797         .zero   64
24798         .type   gSysFreeQueue, %object
24799         .size   gSysFreeQueue, 2056
24800 gSysFreeQueue:
24801         .zero   2056
24802         .type   gSysInfo, %object
24803         .size   gSysInfo, 12
24804 gSysInfo:
24805         .zero   12
24806         .zero   4
24807         .type   gBbtInfo, %object
24808         .size   gBbtInfo, 96
24809 gBbtInfo:
24810         .zero   96
24811         .type   g_inkDie_check_enable, %object
24812         .size   g_inkDie_check_enable, 4
24813 g_inkDie_check_enable:
24814         .zero   4
24815         .type   g_SlcPartLbaEndSector, %object
24816         .size   g_SlcPartLbaEndSector, 4
24817 g_SlcPartLbaEndSector:
24818         .zero   4
24819         .type   g_MaxLbn, %object
24820         .size   g_MaxLbn, 4
24821 g_MaxLbn:
24822         .zero   4
24823         .type   g_VaildLpn, %object
24824         .size   g_VaildLpn, 4
24825 g_VaildLpn:
24826         .zero   4
24827         .type   g_MaxLpn, %object
24828         .size   g_MaxLpn, 4
24829 g_MaxLpn:
24830         .zero   4
24831         .type   g_MaxLbaSector, %object
24832         .size   g_MaxLbaSector, 4
24833 g_MaxLbaSector:
24834         .zero   4
24835         .type   g_GlobalDataVersion, %object
24836         .size   g_GlobalDataVersion, 4
24837 g_GlobalDataVersion:
24838         .zero   4
24839         .type   g_GlobalSysVersion, %object
24840         .size   g_GlobalSysVersion, 4
24841 g_GlobalSysVersion:
24842         .zero   4
24843         .type   ftl_gc_temp_power_lost_recovery_flag, %object
24844         .size   ftl_gc_temp_power_lost_recovery_flag, 4
24845 ftl_gc_temp_power_lost_recovery_flag:
24846         .zero   4
24847         .type   c_ftl_nand_max_data_blks, %object
24848         .size   c_ftl_nand_max_data_blks, 4
24849 c_ftl_nand_max_data_blks:
24850         .zero   4
24851         .type   c_ftl_nand_data_op_blks_per_plane, %object
24852         .size   c_ftl_nand_data_op_blks_per_plane, 2
24853 c_ftl_nand_data_op_blks_per_plane:
24854         .zero   2
24855         .type   c_ftl_nand_data_blks_per_plane, %object
24856         .size   c_ftl_nand_data_blks_per_plane, 2
24857 c_ftl_nand_data_blks_per_plane:
24858         .zero   2
24859         .type   c_ftl_nand_max_sys_blks, %object
24860         .size   c_ftl_nand_max_sys_blks, 4
24861 c_ftl_nand_max_sys_blks:
24862         .zero   4
24863         .type   c_ftl_nand_init_sys_blks_per_plane, %object
24864         .size   c_ftl_nand_init_sys_blks_per_plane, 4
24865 c_ftl_nand_init_sys_blks_per_plane:
24866         .zero   4
24867         .type   c_ftl_nand_sys_blks_per_plane, %object
24868         .size   c_ftl_nand_sys_blks_per_plane, 4
24869 c_ftl_nand_sys_blks_per_plane:
24870         .zero   4
24871         .type   c_ftl_vendor_part_size, %object
24872         .size   c_ftl_vendor_part_size, 2
24873 c_ftl_vendor_part_size:
24874         .zero   2
24875         .type   c_ftl_nand_max_vendor_blks, %object
24876         .size   c_ftl_nand_max_vendor_blks, 2
24877 c_ftl_nand_max_vendor_blks:
24878         .zero   2
24879         .type   c_ftl_nand_max_map_blks, %object
24880         .size   c_ftl_nand_max_map_blks, 4
24881 c_ftl_nand_max_map_blks:
24882         .zero   4
24883         .type   c_ftl_nand_map_blks_per_plane, %object
24884         .size   c_ftl_nand_map_blks_per_plane, 2
24885 c_ftl_nand_map_blks_per_plane:
24886         .zero   2
24887         .type   c_ftl_nand_vendor_region_num, %object
24888         .size   c_ftl_nand_vendor_region_num, 2
24889 c_ftl_nand_vendor_region_num:
24890         .zero   2
24891         .type   c_ftl_nand_l2pmap_ram_region_num, %object
24892         .size   c_ftl_nand_l2pmap_ram_region_num, 2
24893 c_ftl_nand_l2pmap_ram_region_num:
24894         .zero   2
24895         .type   c_ftl_nand_map_region_num, %object
24896         .size   c_ftl_nand_map_region_num, 2
24897 c_ftl_nand_map_region_num:
24898         .zero   2
24899         .type   c_ftl_nand_totle_phy_blks, %object
24900         .size   c_ftl_nand_totle_phy_blks, 4
24901 c_ftl_nand_totle_phy_blks:
24902         .zero   4
24903         .type   c_ftl_nand_reserved_blks, %object
24904         .size   c_ftl_nand_reserved_blks, 2
24905 c_ftl_nand_reserved_blks:
24906         .zero   2
24907         .type   c_ftl_nand_byte_pre_oob, %object
24908         .size   c_ftl_nand_byte_pre_oob, 2
24909 c_ftl_nand_byte_pre_oob:
24910         .zero   2
24911         .type   c_ftl_nand_byte_pre_page, %object
24912         .size   c_ftl_nand_byte_pre_page, 2
24913 c_ftl_nand_byte_pre_page:
24914         .zero   2
24915         .type   c_ftl_nand_sec_pre_page_shift, %object
24916         .size   c_ftl_nand_sec_pre_page_shift, 2
24917 c_ftl_nand_sec_pre_page_shift:
24918         .zero   2
24919         .type   c_ftl_nand_sec_pre_page, %object
24920         .size   c_ftl_nand_sec_pre_page, 2
24921 c_ftl_nand_sec_pre_page:
24922         .zero   2
24923         .type   c_ftl_nand_page_pre_super_blk, %object
24924         .size   c_ftl_nand_page_pre_super_blk, 2
24925 c_ftl_nand_page_pre_super_blk:
24926         .zero   2
24927         .type   c_ftl_nand_page_pre_slc_blk, %object
24928         .size   c_ftl_nand_page_pre_slc_blk, 2
24929 c_ftl_nand_page_pre_slc_blk:
24930         .zero   2
24931         .type   c_ftl_nand_page_pre_blk, %object
24932         .size   c_ftl_nand_page_pre_blk, 2
24933 c_ftl_nand_page_pre_blk:
24934         .zero   2
24935         .type   c_ftl_nand_bbm_buf_size, %object
24936         .size   c_ftl_nand_bbm_buf_size, 2
24937 c_ftl_nand_bbm_buf_size:
24938         .zero   2
24939         .type   c_ftl_nand_ext_blk_pre_plane, %object
24940         .size   c_ftl_nand_ext_blk_pre_plane, 2
24941 c_ftl_nand_ext_blk_pre_plane:
24942         .zero   2
24943         .type   c_ftl_nand_blk_pre_plane, %object
24944         .size   c_ftl_nand_blk_pre_plane, 2
24945 c_ftl_nand_blk_pre_plane:
24946         .zero   2
24947         .type   c_ftl_nand_planes_num, %object
24948         .size   c_ftl_nand_planes_num, 2
24949 c_ftl_nand_planes_num:
24950         .zero   2
24951         .type   c_ftl_nand_blks_per_die_shift, %object
24952         .size   c_ftl_nand_blks_per_die_shift, 2
24953 c_ftl_nand_blks_per_die_shift:
24954         .zero   2
24955         .type   c_ftl_nand_blks_per_die, %object
24956         .size   c_ftl_nand_blks_per_die, 2
24957 c_ftl_nand_blks_per_die:
24958         .zero   2
24959         .type   c_ftl_nand_planes_per_die, %object
24960         .size   c_ftl_nand_planes_per_die, 2
24961 c_ftl_nand_planes_per_die:
24962         .zero   2
24963         .type   c_ftl_nand_die_num, %object
24964         .size   c_ftl_nand_die_num, 2
24965 c_ftl_nand_die_num:
24966         .zero   2
24967         .type   c_ftl_nand_type, %object
24968         .size   c_ftl_nand_type, 2
24969 c_ftl_nand_type:
24970         .zero   2
24971         .zero   2
24972         .type   gMasterTempBuf, %object
24973         .size   gMasterTempBuf, 8
24974 gMasterTempBuf:
24975         .zero   8
24976         .type   gMasterInfo, %object
24977         .size   gMasterInfo, 48
24978 gMasterInfo:
24979         .zero   48
24980         .type   gNandcDumpWriteEn, %object
24981         .size   gNandcDumpWriteEn, 4
24982 gNandcDumpWriteEn:
24983         .zero   4
24984         .type   gToggleModeClkDiv, %object
24985         .size   gToggleModeClkDiv, 4
24986 gToggleModeClkDiv:
24987         .zero   4
24988         .type   gBootDdrMode, %object
24989         .size   gBootDdrMode, 4
24990 gBootDdrMode:
24991         .zero   4
24992         .type   gNandcEccBits, %object
24993         .size   gNandcEccBits, 4
24994 gNandcEccBits:
24995         .zero   4
24996         .type   gpNandc1, %object
24997         .size   gpNandc1, 8
24998 gpNandc1:
24999         .zero   8
25000         .type   gpNandc, %object
25001         .size   gpNandc, 8
25002 gpNandc:
25003         .zero   8
25004         .type   gNandcVer, %object
25005         .size   gNandcVer, 4
25006 gNandcVer:
25007         .zero   4
25008         .zero   4
25009         .type   gNandChipMap, %object
25010         .size   gNandChipMap, 64
25011 gNandChipMap:
25012         .zero   64
25013         .type   gNandIDataBuf, %object
25014         .size   gNandIDataBuf, 2048
25015 gNandIDataBuf:
25016         .zero   2048
25017         .type   FlashDdrTunningReadCount, %object
25018         .size   FlashDdrTunningReadCount, 4
25019 FlashDdrTunningReadCount:
25020         .zero   4
25021         .zero   4
25022         .type   gNandPhyInfo, %object
25023         .size   gNandPhyInfo, 28
25024 gNandPhyInfo:
25025         .zero   28
25026         .zero   4
25027         .type   gFlashProgCheckSpareBuffer, %object
25028         .size   gFlashProgCheckSpareBuffer, 8
25029 gFlashProgCheckSpareBuffer:
25030         .zero   8
25031         .type   gFlashProgCheckBuffer, %object
25032         .size   gFlashProgCheckBuffer, 8
25033 gFlashProgCheckBuffer:
25034         .zero   8
25035         .type   gFlashSpareBuffer, %object
25036         .size   gFlashSpareBuffer, 8
25037 gFlashSpareBuffer:
25038         .zero   8
25039         .type   gFlashPageBuffer1, %object
25040         .size   gFlashPageBuffer1, 8
25041 gFlashPageBuffer1:
25042         .zero   8
25043         .type   gFlashPageBuffer0, %object
25044         .size   gFlashPageBuffer0, 8
25045 gFlashPageBuffer0:
25046         .zero   8
25047         .type   gpFlashSaveInfo, %object
25048         .size   gpFlashSaveInfo, 8
25049 gpFlashSaveInfo:
25050         .zero   8
25051         .type   gReadRetryInfo, %object
25052         .size   gReadRetryInfo, 852
25053 gReadRetryInfo:
25054         .zero   852
25055         .zero   4
25056         .type   gpNandParaInfo, %object
25057         .size   gpNandParaInfo, 8
25058 gpNandParaInfo:
25059         .zero   8
25060         .type   gNandOptPara, %object
25061         .size   gNandOptPara, 32
25062 gNandOptPara:
25063         .zero   32
25064         .type   g_slc2KBNand, %object
25065         .size   g_slc2KBNand, 1
25066 g_slc2KBNand:
25067         .zero   1
25068         .type   g_maxRetryCount, %object
25069         .size   g_maxRetryCount, 1
25070 g_maxRetryCount:
25071         .zero   1
25072         .type   g_maxRegNum, %object
25073         .size   g_maxRegNum, 1
25074 g_maxRegNum:
25075         .zero   1
25076         .type   g_retryMode, %object
25077         .size   g_retryMode, 1
25078 g_retryMode:
25079         .zero   1
25080         .type   gNandIDBResBlkNumSaveInFlash, %object
25081         .size   gNandIDBResBlkNumSaveInFlash, 1
25082 gNandIDBResBlkNumSaveInFlash:
25083         .zero   1
25084         .type   gNandIDBResBlkNum, %object
25085         .size   gNandIDBResBlkNum, 1
25086 gNandIDBResBlkNum:
25087         .zero   1
25088         .zero   2
25089         .type   gNandFlashResEndPageAddr, %object
25090         .size   gNandFlashResEndPageAddr, 4
25091 gNandFlashResEndPageAddr:
25092         .zero   4
25093         .type   gNandFlashInfoBlockAddr, %object
25094         .size   gNandFlashInfoBlockAddr, 4
25095 gNandFlashInfoBlockAddr:
25096         .zero   4
25097         .type   gNandFlashIdbBlockAddr, %object
25098         .size   gNandFlashIdbBlockAddr, 4
25099 gNandFlashIdbBlockAddr:
25100         .zero   4
25101         .type   gNandFlashInfoBlockEcc, %object
25102         .size   gNandFlashInfoBlockEcc, 1
25103 gNandFlashInfoBlockEcc:
25104         .zero   1
25105         .type   gNandFlashIDBEccBits, %object
25106         .size   gNandFlashIDBEccBits, 1
25107 gNandFlashIDBEccBits:
25108         .zero   1
25109         .type   gNandFlashEccBits, %object
25110         .size   gNandFlashEccBits, 1
25111 gNandFlashEccBits:
25112         .zero   1
25113         .type   gNandRandomizer, %object
25114         .size   gNandRandomizer, 1
25115 gNandRandomizer:
25116         .zero   1
25117         .type   gBlockPageAlignSize, %object
25118         .size   gBlockPageAlignSize, 4
25119 gBlockPageAlignSize:
25120         .zero   4
25121         .type   gTotleBlock, %object
25122         .size   gTotleBlock, 2
25123 gTotleBlock:
25124         .zero   2
25125         .type   gNandMaxChip, %object
25126         .size   gNandMaxChip, 1
25127 gNandMaxChip:
25128         .zero   1
25129         .type   gNandMaxDie, %object
25130         .size   gNandMaxDie, 1
25131 gNandMaxDie:
25132         .zero   1
25133         .type   gFlashInterfaceMode, %object
25134         .size   gFlashInterfaceMode, 1
25135 gFlashInterfaceMode:
25136         .zero   1
25137         .type   gFlashOnfiModeEn, %object
25138         .size   gFlashOnfiModeEn, 1
25139 gFlashOnfiModeEn:
25140         .zero   1
25141         .type   gFlashToggleModeEn, %object
25142         .size   gFlashToggleModeEn, 1
25143 gFlashToggleModeEn:
25144         .zero   1
25145         .type   gFlashSdrModeEn, %object
25146         .size   gFlashSdrModeEn, 1
25147 gFlashSdrModeEn:
25148         .zero   1
25149         .type   gMultiPageProgEn, %object
25150         .size   gMultiPageProgEn, 1
25151 gMultiPageProgEn:
25152         .zero   1
25153         .type   gMultiPageReadEn, %object
25154         .size   gMultiPageReadEn, 1
25155 gMultiPageReadEn:
25156         .zero   1
25157         .zero   2
25158         .type   gpReadRetrial, %object
25159         .size   gpReadRetrial, 8
25160 gpReadRetrial:
25161         .zero   8
25162         .type   mlcPageToSlcPageTbl, %object
25163         .size   mlcPageToSlcPageTbl, 1024
25164 mlcPageToSlcPageTbl:
25165         .zero   1024
25166         .type   slcPageToMlcPageTbl, %object
25167         .size   slcPageToMlcPageTbl, 512
25168 slcPageToMlcPageTbl:
25169         .zero   512
25170         .type   DieAddrs, %object
25171         .size   DieAddrs, 32
25172 DieAddrs:
25173         .zero   32
25174         .type   gDieOp, %object
25175         .size   gDieOp, 192
25176 gDieOp:
25177         .zero   192
25178         .type   DieCsIndex, %object
25179         .size   DieCsIndex, 8
25180 DieCsIndex:
25181         .zero   8
25182         .type   IDByte, %object
25183         .size   IDByte, 32
25184 IDByte:
25185         .zero   32
25186         .type   read_retry_cur_offset, %object
25187         .size   read_retry_cur_offset, 4
25188 read_retry_cur_offset:
25189         .zero   4
25190         .section        .data.rel,"aw",%progbits
25191         .align  3
25192 .LANCHOR3 = . + 0
25193         .type   rknand_sys_storage_dev, %object
25194         .size   rknand_sys_storage_dev, 80
25195 rknand_sys_storage_dev:
25196         .word   255
25197         .zero   4
25198         .xword  .LC156
25199         .xword  rknand_sys_storage_fops
25200         .zero   56