1# 2# Copyright (c) 2011-2012, ARM Limited. All rights reserved. 3# 4# This program and the accompanying materials 5# are licensed and made available under the terms and conditions of the BSD License 6# which accompanies this distribution. The full text of the license may be found at 7# http://opensource.org/licenses/bsd-license.php 8# 9# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11# 12# 13 14#include <AsmMacroIoLib.h> 15#include <Library/PcdLib.h> 16#include <AutoGen.h> 17#include <Drivers/PL35xSmc.h> 18 19.text 20 21#Maintain 8 byte alignment 22.align 3 23 24GCC_ASM_EXPORT(PL35xSmcInitialize) 25GCC_ASM_EXPORT(PL35xSmcSetRefresh) 26 27// IN r1 Smc Base Address 28// IN r2 Smc Configuration Start Address 29// IN r3 Smc Configuration End Address 30// NOTE: This code is been called before any stack has been setup. It means some registers 31// could be overwritten (case of 'r0') 32ASM_PFX(PL35xSmcInitialize): 33 // While (SmcConfigurationStart < SmcConfigurationEnd) 34 cmp r2, r3 35 blxge lr 36 37 // Write to set_cycle register(holding register for NOR 1 cycle register or NAND cycle register) 38 ldr r0, [r2, #0x4] 39 str r0, [r1, #PL350_SMC_SET_CYCLES_OFFSET] 40 41 // Write to set_opmode register(holding register for NOR 1 opomode register or NAND opmode register) 42 ldr r0, [r2, #0x8] 43 str r0, [r1, #PL350_SMC_SET_OPMODE_OFFSET] 44 45 // Write to direct_cmd register so that the NOR 1 registers(set-cycles and opmode) are updated with holding registers 46 ldr r0, =PL350_SMC_DIRECT_CMD_ADDR_CMD_UPDATE 47 ldr r4, [r2, #0x0] 48 orr r0, r0, r4 49 str r0, [r1, #PL350_SMC_DIRECT_CMD_OFFSET] 50 51 add r2, #0xC 52 b ASM_PFX(PL35xSmcInitialize) 53 54// IN r1 Smc Base Address 55// IN r2 Smc Refresh Period 0 56// IN r3 Smc Refresh Period 1 57ASM_PFX(PL35xSmcSetRefresh): 58 str r2, [r1, #PL350_SMC_REFRESH_0_OFFSET] 59 str r3, [r1, #PL350_SMC_REFRESH_1_OFFSET] 60 blx lr 61