; Copyright 2009 Castle Technology Ltd ; ; Licensed under the Apache License, Version 2.0 (the "License"); ; you may not use this file except in compliance with the License. ; You may obtain a copy of the License at ; ; http://www.apache.org/licenses/LICENSE-2.0 ; ; Unless required by applicable law or agreed to in writing, software ; distributed under the License is distributed on an "AS IS" BASIS, ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ; See the License for the specific language governing permissions and ; limitations under the License. ; ; a1 <= Highest physical address in RAM +1 get_end_of_ram LDR v1, =SDRC_Regs LDR a3, [v1, #SDRC_MCFG_1] LDR a2, =&3FF00<<13 ANDS a3, a2, a3, LSL #13 BEQ %FT10 LDR a2, =CS1_SDRAM LDR a4, [v1, #SDRC_CS_CFG] AND v2, a4, #7 ; Offset in 128MB units ADD a2, a2, v2, LSL #20+7 AND v2, a4, #&300 ; Offset in 32MB units ADD a2, a2, v2, LSL #20+5-8 ADD a1, a3, a2 MOV pc, lr 10 ; No RAM in CS1; therefore must be in CS0 LDR a3, [v1, #SDRC_MCFG_0] LDR a2, =&3FF00<<13 AND a3, a2, a3, LSL #13 ; Get CS0 RAM size LDR a2, =CS0_SDRAM ADD a1, a3, a2 MOV pc, lr clear_ram ; Clear everything up to a1 MOV v2, a1 LDR v1, =SDRC_Regs LDR a3, [v1, #SDRC_MCFG_0] LDR a2, =&3FF00<<13 ANDS a3, a2, a3, LSL #13 ; Get CS0 RAM size BEQ %FT10 LDR a2, =CS0_SDRAM SUB a1, v2, a2 CMP a1, a3 MOVGT a1, a3 ; Work out how much we're meant to be clearing MOV a3, #0 20 STR a3, [a2], #4 SUBS a1, a1, #4 BGT %BT20 10 LDR a3, [v1, #SDRC_MCFG_1] LDR a2, =&3FF00<<13 ANDS a3, a2, a3, LSL #13 BEQ %FT30 LDR a2, =CS1_SDRAM LDR a4, [v1, #SDRC_CS_CFG] AND v2, a4, #7 ; Offset in 128MB units ADD a2, a2, v2, LSL #20+7 AND v2, a4, #&300 ; Offset in 32MB units ADD a2, a2, v2, LSL #20+5-8 SUB a1, v2, a2 CMP a1, a3 MOVGT a1, a3 ; Work out how much we're meant to be clearing MOV a3, #0 40 STR a3, [a2], #4 SUBS a1, a1, #4 BGT %BT40 30 MOV pc, lr END