blob: 1dfb3e5a6e3149efb0c62d444ec9443a12c38bec [file] [log] [blame]
Caesar Wang9740bba2016-08-25 08:37:42 +08001/*
2 * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * Redistributions of source code must retain the above copyright notice, this
8 * list of conditions and the following disclaimer.
9 *
10 * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 *
14 * Neither the name of ARM nor the names of its contributors may be used
15 * to endorse or promote products derived from this software without specific
16 * prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 */
30
Caesar Wanga8456902016-10-27 01:12:34 +080031#include <dram.h>
Caesar Wang9740bba2016-08-25 08:37:42 +080032#include <plat_private.h>
Xing Zheng22a98712017-02-24 14:56:41 +080033#include <secure.h>
Caesar Wanga8456902016-10-27 01:12:34 +080034#include <soc.h>
35#include <rk3399_def.h>
Caesar Wang9740bba2016-08-25 08:37:42 +080036
Caesar Wanga8456902016-10-27 01:12:34 +080037__sramdata struct rk3399_sdram_params sdram_config;
Caesar Wang9740bba2016-08-25 08:37:42 +080038
Caesar Wanga8456902016-10-27 01:12:34 +080039void dram_init(void)
Caesar Wang9740bba2016-08-25 08:37:42 +080040{
41 uint32_t os_reg2_val, i;
42
Caesar Wanga8456902016-10-27 01:12:34 +080043 os_reg2_val = mmio_read_32(PMUGRF_BASE + PMUGRF_OSREG(2));
44 sdram_config.dramtype = SYS_REG_DEC_DDRTYPE(os_reg2_val);
45 sdram_config.num_channels = SYS_REG_DEC_NUM_CH(os_reg2_val);
46 sdram_config.stride = (mmio_read_32(SGRF_BASE + SGRF_SOC_CON3_7(4)) >>
47 10) & 0x1f;
Caesar Wang9740bba2016-08-25 08:37:42 +080048
Caesar Wanga8456902016-10-27 01:12:34 +080049 for (i = 0; i < 2; i++) {
50 struct rk3399_sdram_channel *ch = &sdram_config.ch[i];
51 struct rk3399_msch_timings *noc = &ch->noc_timings;
Caesar Wang9740bba2016-08-25 08:37:42 +080052
Caesar Wanga8456902016-10-27 01:12:34 +080053 if (!(SYS_REG_DEC_CHINFO(os_reg2_val, i)))
Caesar Wang9740bba2016-08-25 08:37:42 +080054 continue;
55
Caesar Wanga8456902016-10-27 01:12:34 +080056 ch->rank = SYS_REG_DEC_RANK(os_reg2_val, i);
57 ch->col = SYS_REG_DEC_COL(os_reg2_val, i);
58 ch->bk = SYS_REG_DEC_BK(os_reg2_val, i);
59 ch->bw = SYS_REG_DEC_BW(os_reg2_val, i);
60 ch->dbw = SYS_REG_DEC_DBW(os_reg2_val, i);
61 ch->row_3_4 = SYS_REG_DEC_ROW_3_4(os_reg2_val, i);
62 ch->cs0_row = SYS_REG_DEC_CS0_ROW(os_reg2_val, i);
63 ch->cs1_row = SYS_REG_DEC_CS1_ROW(os_reg2_val, i);
64 ch->ddrconfig = mmio_read_32(MSCH_BASE(i) + MSCH_DEVICECONF);
Caesar Wang9740bba2016-08-25 08:37:42 +080065
Caesar Wanga8456902016-10-27 01:12:34 +080066 noc->ddrtiminga0.d32 = mmio_read_32(MSCH_BASE(i) +
67 MSCH_DDRTIMINGA0);
68 noc->ddrtimingb0.d32 = mmio_read_32(MSCH_BASE(i) +
69 MSCH_DDRTIMINGB0);
70 noc->ddrtimingc0.d32 = mmio_read_32(MSCH_BASE(i) +
71 MSCH_DDRTIMINGC0);
72 noc->devtodev0.d32 = mmio_read_32(MSCH_BASE(i) +
73 MSCH_DEVTODEV0);
74 noc->ddrmode.d32 = mmio_read_32(MSCH_BASE(i) + MSCH_DDRMODE);
75 noc->agingx0 = mmio_read_32(MSCH_BASE(i) + MSCH_AGINGX0);
Caesar Wang9740bba2016-08-25 08:37:42 +080076 }
Caesar Wang9740bba2016-08-25 08:37:42 +080077}