blob: 8532225dc0dbfd8291f5b33e12ed8e4ecebc98f1 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0
Paul Burtonf5de32a2016-09-08 07:47:39 +01002/*
3 * Copyright (C) 2016 Imagination Technologies
Paul Burtonf5de32a2016-09-08 07:47:39 +01004 */
5
6#include <common.h>
Simon Glass6980b6b2019-11-14 12:57:45 -07007#include <init.h>
Simon Glass3ba929a2020-10-30 21:38:53 -06008#include <asm/global_data.h>
Paul Burtonf5de32a2016-09-08 07:47:39 +01009
10#include <asm/io.h>
11
12#include "boston-regs.h"
13
Simon Glass39f90ba2017-03-31 08:40:25 -060014DECLARE_GLOBAL_DATA_PTR;
15
Simon Glassd35f3382017-04-06 12:47:05 -060016int dram_init(void)
Paul Burtonf5de32a2016-09-08 07:47:39 +010017{
18 u32 ddrconf0 = __raw_readl((uint32_t *)BOSTON_PLAT_DDRCONF0);
19
Simon Glass39f90ba2017-03-31 08:40:25 -060020 gd->ram_size = (phys_size_t)(ddrconf0 & BOSTON_PLAT_DDRCONF0_SIZE) <<
21 30;
22
23 return 0;
Paul Burtonf5de32a2016-09-08 07:47:39 +010024}
25
Pali Rohár4f4f5832022-09-09 17:32:40 +020026phys_size_t board_get_usable_ram_top(phys_size_t total_size)
Paul Burtonf5de32a2016-09-08 07:47:39 +010027{
28 DECLARE_GLOBAL_DATA_PTR;
29
Tom Rinibb4dd962022-11-16 13:10:37 -050030 if (gd->ram_top < CFG_SYS_SDRAM_BASE) {
Paul Burtonf5de32a2016-09-08 07:47:39 +010031 /* 2GB wrapped around to 0 */
32 return CKSEG0ADDR(256 << 20);
33 }
34
35 return min_t(unsigned long, gd->ram_top, CKSEG0ADDR(256 << 20));
36}