blob: 80524fc22a20c3ad0a1772c674c9c22c5b1a17ce [file] [log] [blame]
Jiafei Pan46367ad2018-03-02 07:23:30 +00001/*
2 * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <arch.h>
8#include <asm_macros.S>
9#include <platform_def.h>
10
11 .globl plat_reset_handler
12 .globl plat_my_core_pos
13 .globl platform_mem_init
14
15func plat_my_core_pos
16 mrs x0, mpidr_el1
17 and x1, x0, #MPIDR_CPU_MASK //reserve the last 8 bits
18 and x0, x0, #MPIDR_CLUSTER_MASK
19 add x0, x1, x0, LSR #4 //4 cores
20 ret
21endfunc plat_my_core_pos
22
23func platform_mem_init
24 mov x29, x30
25 bl inv_dcache_range
26
27//SDRAM_CFG
28 ldr w0, =0x1080000
29 ldr w1, =0x0c000c45
30 str w1, [x0, #0x110]
31//CS0_BNDS
32 ldr w1, =0x7f000000
33 str w1, [x0, #0x000]
34//CS0_CONFIG
35 ldr w1, =0x22030480
36 str w1, [x0, #0x080]
37//TIMING_CFG_0
38 ldr w1, =0x18005591
39 str w1, [x0, #0x104]
40//TIMING_CFG_1
41 ldr w1, =0x428cb4bb
42 str w1, [x0, #0x108]
43//TIMING_CFG_2
44 ldr w1, =0x11c14800
45 str w1, [x0, #0x10C]
46//TIMING_CFG_3
47 ldr w1, =0x00100c01
48 str w1, [x0, #0x100]
49//TIMING_CFG_4
50 ldr w1, =0x02000000
51 str w1, [x0, #0x160]
52//TIMING_CFG_5
53 ldr w1, =0x00144003
54 str w1, [x0, #0x164]
55//TIMING_CFG_7
56 ldr w1, =0x00003013
57 str w1, [x0, #0x16C]
58//TIMING_CFG_8
59 ldr w1, =0x00561102
60 str w1, [x0, #0x250]
61//SDRAM_CFG_2
62 ldr w1, =0x00114000
63 str w1, [x0, #0x114]
64//SDRAM_MODE
65 ldr w1, =0x10020103
66 str w1, [x0, #0x118]
67//SDRAM_MODE_2
68 ldr w1, =0x0
69 str w1, [x0, #0x11C]
70//SDRAM_INTERVAL
71 ldr w1, =0x18066018
72 str w1, [x0, #0x124]
73//DDR_WRLVL_CNTL
74 ldr w1, =0x07f675c6
75 str w1, [x0, #0x174]
76//DDR_WRLVL_CNTL_2
77 ldr w1, =0x00080907
78 str w1, [x0, #0x190]
79//DDR_WRLVL_CNTL_3
80 ldr w1, =0x0
81 str w1, [x0, #0x194]
82//DDR_CDR1
83 ldr w1, =0x00000480
84 str w1, [x0, #0xB28]
85//DDR_CDR2
86 ldr w1, =0x81a10000
87 str w1, [x0, #0xB2C]
88//SDRAM_CLK_CNTL
89 ldr w1, =0x00000003
90 str w1, [x0, #0x130]
91//DDR_ZQ_CNTL
92 ldr w1, =0x0507098a
93 str w1, [x0, #0x170]
94//SDRAM_MODE_9
95 ldr w1, =0x00050000
96 str w1, [x0, #0x220]
97//SDRAM_MODE_10
98 ldr w1, =0x00000004
99 str w1, [x0, #0x224]
100//CS0_CONFIG_2
101 ldr w1, =0x0
102 str w1, [x0, #0x0C0]
103//SDRAM_CFG
104 ldr w1, =0x08000cc5
105 str w1, [x0, #0x110]
106
107 mov w3,#0
108 ldr w4,=0xffffff01
109z_loop:
110delay_loop1:
111 sub w4, w4, #1
112 cmp w4, #0
113 b.gt delay_loop1
114
115 ldr w1, [x0, #0x114]
116 add w3, w3, #1
117 cmp w1, #0 //'\n'
118 b.eq 1f
119 cmp w3, #20
120 b.gt 1f
121 b z_loop
122
1231:
124 ldr w4,=0xffffff02
125delay_loop2:
126 sub w4, w4, #1
127 cmp w4, #0
128 b.gt delay_loop2
129
130 ldr w1, =0x00000000
131 str w1, [x0]
132
133 ret x29
134endfunc platform_mem_init
135
136func apply_platform_errata
137 /*TODO if needed*/
138 ret
139endfunc apply_platform_errata
140
141func plat_reset_handler
142 mov x29, x30
143 bl apply_platform_errata
144
145 mov x30, x29
146 ret
147endfunc plat_reset_handler