📄 xlli_lowlev_init.s
字号:
;
mrc p14, 0, r1, c6, c0, 0 ; Get data in CP14, Register 6
and r1, r1, #0x8 ; Grab just the "B" bit
mov r1, r1, LSR #0x2 ; move it to bit position 1
orr r9, r3, r1 ; At this point r9 contains the A-bit at pos. 0 & B-bit at pos. 1
ldr r1, =xlli_MEMORY_CONFIG_BASE ; Load r1 with memory controller base address
;
; The MemClk speed is determined by the L, A and B values.
; Unfortunaly, the only practical way to do this is to rip through all the legal
; values and load a register when there is a match. Illegal values result in no change
;
ldr r3, =0x7FF07FF0 ; Bit mask for RDF, RDN and RRR (MSC0)
ldr r4, [r1, #xlli_MSC0_offset] ; Get present MSC0 value
bic r4, r4, r3 ; Clear the RDF, RDN and RRR bits
ldr r5, =0x03000300 ; DTC0, DTC2 bit mask (MDCNFG)
ldr r6, [r1, #xlli_MDCNFG_offset] ; Get present MDCNFG value
bic r6, r6, r5 ; Clear DTC0, DTC2
ldr r7, =0xC0200FFF ; DRI and RESERVED bit mask (MDREFR)
ldr r8, [r1, #xlli_MDREFR_offset] ; Get present MDREFR value
bic r8, r8, r7 ; Clear DRI and RESERVED bits
ldr r7, = 0xFFF ; Reload r7 with worst-case DRI value for safety
;
; r9 = 0x0: A=0, B=0
; 0x1: A=1, B=0
; 0x2: A=0, B=1
; 0x3: A=1, B=1
;
cmp r9, #0x1 ; A == 1, B == 0 ?
beq xlli_A1B0_Table
cmp r9, #0x3 ; A == 1, B == 1 ?
beq xlli_A1B1_Table
;
; Else drop through to A=0, B=x table
;
xlli_A0Bx_Table
cmp r2, #2 ; Is L=2?
ldreq r3, =xlli_MSC0_26 ; Yes - load values
ldreq r5, =xlli_DTC_26
ldreq r7, =xlli_DRI_26
cmp r2, #3 ; Is L=3?
ldreq r3, =xlli_MSC0_39 ; Yes - load values
ldreq r5, =xlli_DTC_39
ldreq r7, =xlli_DRI_39
cmp r2, #4 ; Is L=4?
ldreq r3, =xlli_MSC0_52 ; Yes - load values
ldreq r5, =xlli_DTC_52
ldreq r7, =xlli_DRI_52
cmp r2, #5 ; Is L=5?
ldreq r3, =xlli_MSC0_65 ; Yes - load values
ldreq r5, =xlli_DTC_65
ldreq r7, =xlli_DRI_65
cmp r2, #6 ; Is L=6?
ldreq r3, =xlli_MSC0_78 ; Yes - load values
ldreq r5, =xlli_DTC_78
ldreq r7, =xlli_DRI_78
cmp r2, #7 ; Is L=7?
ldreq r3, =xlli_MSC0_91 ; Yes - load values
ldreq r5, =xlli_DTC_91
ldreq r7, =xlli_DRI_91
cmp r2, #8 ; Is L=8?
ldreq r3, =xlli_MSC0_104 ; Yes - load values
ldreq r5, =xlli_DTC_104
ldreq r7, =xlli_DRI_104
cmp r2, #9 ; Is L=9?
ldreq r3, =xlli_MSC0_117 ; Yes - load values
ldreq r5, =xlli_DTC_117
ldreq r7, =xlli_DRI_117
cmp r2, #10 ; Is L=10?
ldreq r3, =xlli_MSC0_130 ; Yes - load values
ldreq r5, =xlli_DTC_130
ldreq r7, =xlli_DRI_130
cmp r2, #11 ; Is L=11?
ldreq r3, =xlli_MSC0_71 ; Yes - load values
ldreq r5, =xlli_DTC_71
ldreq r7, =xlli_DRI_71
cmp r2, #12 ; Is L=12?
ldreq r3, =xlli_MSC0_78 ; Yes - load values
ldreq r5, =xlli_DTC_78
ldreq r7, =xlli_DRI_78
cmp r2, #13 ; Is L=13?
ldreq r3, =xlli_MSC0_84 ; Yes - load value
ldreq r5, =xlli_DTC_84
ldreq r7, =xlli_DRI_84
cmp r2, #14 ; Is L=14?
ldreq r3, =xlli_MSC0_91 ; Yes - load values
ldreq r5, =xlli_DTC_91
ldreq r7, =xlli_DRI_91
cmp r2, #15 ; Is L=15?
ldreq r3, =xlli_MSC0_97 ; Yes - load values
ldreq r5, =xlli_DTC_97
ldreq r7, =xlli_DRI_97
cmp r2, #16 ; Is L=16?
ldreq r3, =xlli_MSC0_104 ; Yes - load values
ldreq r5, =xlli_DTC_104
ldreq r7, =xlli_DRI_104
cmp r2, #17 ; Is L=17?
ldreq r3, =xlli_MSC0_110 ; Yes - load values
ldreq r5, =xlli_DTC_110
ldreq r7, =xlli_DRI_110
cmp r2, #18 ; Is L=18?
ldreq r3, =xlli_MSC0_117 ; Yes - load values
ldreq r5, =xlli_DTC_117
ldreq r7, =xlli_DRI_117
cmp r2, #19 ; Is L=19?
ldreq r3, =xlli_MSC0_124 ; Yes - load values
ldreq r5, =xlli_DTC_124
ldreq r7, =xlli_DRI_124
cmp r2, #20 ; Is L=20?
ldreq r3, =xlli_MSC0_130 ; Yes - load values
ldreq r5, =xlli_DTC_130
ldreq r7, =xlli_DRI_130
cmp r2, #21 ; Is L=21?
ldreq r3, =xlli_MSC0_68 ; Yes - load values
ldreq r5, =xlli_DTC_68
ldreq r7, =xlli_DRI_68
cmp r2, #22 ; Is L=22?
ldreq r3, =xlli_MSC0_71 ; Yes - load values
ldreq r5, =xlli_DTC_71
ldreq r7, =xlli_DRI_71
cmp r2, #23 ; Is L=23?
ldreq r3, =xlli_MSC0_74 ; Yes - load values
ldreq r5, =xlli_DTC_74
ldreq r7, =xlli_DRI_74
cmp r2, #24 ; Is L=24?
ldreq r3, =xlli_MSC0_78 ; Yes - load values
ldreq r5, =xlli_DTC_78
ldreq r7, =xlli_DRI_78
cmp r2, #25 ; Is L=25?
ldreq r3, =xlli_MSC0_81 ; Yes - load values
ldreq r5, =xlli_DTC_81
ldreq r7, =xlli_DRI_81
cmp r2, #26 ; Is L=26?
ldreq r3, =xlli_MSC0_84 ; Yes - load values
ldreq r5, =xlli_DTC_84
ldreq r7, =xlli_DRI_84
cmp r2, #27 ; Is L=27?
ldreq r3, =xlli_MSC0_87 ; Yes - load values
ldreq r5, =xlli_DTC_87
ldreq r7, =xlli_DRI_87
cmp r2, #28 ; Is L=28?
ldreq r3, =xlli_MSC0_91 ; Yes - load values
ldreq r5, =xlli_DTC_91
ldreq r7, =xlli_DRI_91
cmp r2, #29 ; Is L=29?
ldreq r3, =xlli_MSC0_94 ; Yes - load values
ldreq r5, =xlli_DTC_94
ldreq r7, =xlli_DRI_94
cmp r2, #30 ; Is L=30?
ldreq r3, =xlli_MSC0_97 ; Yes - load values
ldreq r5, =xlli_DTC_97
ldreq r7, =xlli_DRI_97
cmp r2, #31 ; Is L=31?
ldreq r3, =xlli_MSC0_100 ; Yes - load values
ldreq r5, =xlli_DTC_100
ldreq r7, =xlli_DRI_100
b XLLI_Done_MSC0_Opt_Update
xlli_A1B0_Table
cmp r2, #2 ; Is L=2?
ldreq r3, =xlli_MSC0_13 ; Yes - load values
ldreq r5, =xlli_DTC_13
ldreq r7, =xlli_DRI_13
cmp r2, #3 ; Is L=3?
ldreq r3, =xlli_MSC0_19 ; Yes - load values
ldreq r5, =xlli_DTC_19
ldreq r7, =xlli_DRI_19
cmp r2, #4 ; Is L=4?
ldreq r3, =xlli_MSC0_26 ; Yes - load values
ldreq r5, =xlli_DTC_26
ldreq r7, =xlli_DRI_26
cmp r2, #5 ; Is L=5?
ldreq r3, =xlli_MSC0_32 ; Yes - load values
ldreq r5, =xlli_DTC_32
ldreq r7, =xlli_DRI_32
cmp r2, #6 ; Is L=6?
ldreq r3, =xlli_MSC0_39 ; Yes - load values
ldreq r5, =xlli_DTC_39
ldreq r7, =xlli_DRI_39
cmp r2, #7 ; Is L=7?
ldreq r3, =xlli_MSC0_45 ; Yes - load values
ldreq r5, =xlli_DTC_45
ldreq r7, =xlli_DRI_45
cmp r2, #8 ; Is L=8?
ldreq r3, =xlli_MSC0_52 ; Yes - load values
ldreq r5, =xlli_DTC_52
ldreq r7, =xlli_DRI_52
cmp r2, #9 ; Is L=9?
ldreq r3, =xlli_MSC0_58 ; Yes - load values
ldreq r5, =xlli_DTC_58
ldreq r7, =xlli_DRI_58
cmp r2, #10 ; Is L=10?
ldreq r3, =xlli_MSC0_65 ; Yes - load values
ldreq r5, =xlli_DTC_65
ldreq r7, =xlli_DRI_65
;
; L11 - L20 ARE THE SAME for A0Bx
;
cmp r2, #11 ; Is L=11?
ldreq r3, =xlli_MSC0_71 ; Yes - load values
ldreq r5, =xlli_DTC_71
ldreq r7, =xlli_DRI_71
cmp r2, #12 ; Is L=12?
ldreq r3, =xlli_MSC0_78 ; Yes - load values
ldreq r5, =xlli_DTC_78
ldreq r7, =xlli_DRI_78
cmp r2, #13 ; Is L=13?
ldreq r3, =xlli_MSC0_84 ; Yes - load values
ldreq r5, =xlli_DTC_84
ldreq r7, =xlli_DRI_84
cmp r2, #14 ; Is L=14?
ldreq r3, =xlli_MSC0_91 ; Yes - load values
ldreq r5, =xlli_DTC_91
ldreq r7, =xlli_DRI_91
cmp r2, #15 ; Is L=15?
ldreq r3, =xlli_MSC0_97 ; Yes - load values
ldreq r5, =xlli_DTC_97
ldreq r7, =xlli_DRI_97
cmp r2, #16 ; Is L=16?
ldreq r3, =xlli_MSC0_104 ; Yes - load values
ldreq r5, =xlli_DTC_104
ldreq r7, =xlli_DRI_104
cmp r2, #17 ; Is L=17?
ldreq r3, =xlli_MSC0_110 ; Yes - load values
ldreq r5, =xlli_DTC_110
ldreq r7, =xlli_DRI_110
cmp r2, #18 ; Is L=18?
ldreq r3, =xlli_MSC0_117 ; Yes - load values
ldreq r5, =xlli_DTC_117
ldreq r7, =xlli_DRI_117
cmp r2, #19 ; Is L=19?
ldreq r3, =xlli_MSC0_124 ; Yes - load values
ldreq r5, =xlli_DTC_124
ldreq r7, =xlli_DRI_124
cmp r2, #20 ; Is L=20?
ldreq r3, =xlli_MSC0_130 ; Yes - load values
ldreq r5, =xlli_DTC_130
ldreq r7, =xlli_DRI_130
cmp r2, #21 ; Is L=21?
ldreq r3, =xlli_MSC0_136 ; Yes - load values
ldreq r5, =xlli_DTC_136
ldreq r7, =xlli_DRI_136
cmp r2, #22 ; Is L=22?
ldreq r3, =xlli_MSC0_143 ; Yes - load values
ldreq r5, =xlli_DTC_143
ldreq r7, =xlli_DRI_143
cmp r2, #23 ; Is L=23?
ldreq r3, =xlli_MSC0_149 ; Yes - load values
ldreq r5, =xlli_DTC_149
ldreq r7, =xlli_DRI_149
cmp r2, #24 ; Is L=24?
ldreq r3, =xlli_MSC0_156 ; Yes - load values
ldreq r5, =xlli_DTC_156
ldreq r7, =xlli_DRI_156
cmp r2, #25 ; Is L=25?
ldreq r3, =xlli_MSC0_162 ; Yes - load values
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -