2016-03-17 08:28:33 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the coreboot project.
|
|
|
|
*
|
|
|
|
* Copyright 2014 Google Inc.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; version 2 of the License.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <arch/io.h>
|
|
|
|
#include <boardid.h>
|
2016-08-20 01:35:22 +02:00
|
|
|
#include <cbfs.h>
|
2016-03-17 08:28:33 +01:00
|
|
|
#include <console/console.h>
|
|
|
|
#include <gpio.h>
|
|
|
|
#include <soc/sdram.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <types.h>
|
|
|
|
|
2016-08-20 01:35:22 +02:00
|
|
|
static const char *sdram_configs[] = {
|
2016-11-14 13:10:55 +01:00
|
|
|
#if IS_ENABLED(CONFIG_BOARD_GOOGLE_BOB)
|
|
|
|
"sdram-lpddr3-samsung-2GB-24EB",
|
|
|
|
"sdram-lpddr3-micron-2GB",
|
|
|
|
"sdram-lpddr3-samsung-4GB-04EB",
|
|
|
|
"sdram-lpddr3-micron-4GB",
|
|
|
|
#else
|
2016-08-20 01:35:22 +02:00
|
|
|
"sdram-lpddr3-hynix-4GB-666",
|
|
|
|
"sdram-lpddr3-hynix-4GB-800",
|
|
|
|
"sdram-lpddr3-hynix-4GB-933",
|
2016-11-14 13:10:55 +01:00
|
|
|
#endif
|
2016-06-16 04:44:30 +02:00
|
|
|
};
|
|
|
|
|
2016-08-20 01:35:22 +02:00
|
|
|
static struct rk3399_sdram_params params;
|
|
|
|
|
2016-11-14 13:10:55 +01:00
|
|
|
#if IS_ENABLED(CONFIG_BOARD_GOOGLE_GRU) || \
|
|
|
|
IS_ENABLED(CONFIG_BOARD_GOOGLE_KEVIN)
|
2016-06-16 04:44:30 +02:00
|
|
|
enum dram_speeds {
|
2016-10-14 05:14:42 +02:00
|
|
|
dram_666MHz = 0,
|
|
|
|
dram_800MHz = 1,
|
|
|
|
dram_933MHz = 2,
|
2016-03-17 08:28:33 +01:00
|
|
|
};
|
|
|
|
|
2016-06-22 04:07:32 +02:00
|
|
|
static enum dram_speeds get_sdram_index(void)
|
2016-03-17 08:28:33 +01:00
|
|
|
{
|
2016-07-11 11:09:53 +02:00
|
|
|
uint32_t id;
|
|
|
|
|
|
|
|
id = board_id();
|
|
|
|
|
2016-07-30 01:15:04 +02:00
|
|
|
if (IS_ENABLED(CONFIG_BOARD_GOOGLE_KEVIN))
|
|
|
|
switch (id) {
|
2016-09-11 12:26:42 +02:00
|
|
|
case 4:
|
2016-09-08 20:16:26 +02:00
|
|
|
return dram_800MHz;
|
2016-09-11 12:26:42 +02:00
|
|
|
default:
|
|
|
|
return dram_933MHz;
|
2016-07-30 01:15:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (IS_ENABLED(CONFIG_BOARD_GOOGLE_GRU))
|
|
|
|
return dram_800MHz;
|
2016-06-22 04:07:32 +02:00
|
|
|
}
|
2016-11-14 13:10:55 +01:00
|
|
|
#endif
|
2016-06-22 04:07:32 +02:00
|
|
|
|
|
|
|
const struct rk3399_sdram_params *get_sdram_config()
|
|
|
|
{
|
2016-11-14 13:10:55 +01:00
|
|
|
#if IS_ENABLED(CONFIG_BOARD_GOOGLE_BOB)
|
|
|
|
u32 ramcode = ram_code();
|
|
|
|
|
|
|
|
/*
|
|
|
|
* through schematic, ramid arrange like following:
|
|
|
|
* 0: sdram-lpddr3-samsung-2GB-24EB
|
|
|
|
* 2: sdram-lpddr3-micron-2GB
|
|
|
|
* 4: sdram-lpddr3-samsung-4GB-04EB
|
|
|
|
* 6: sdram-lpddr3-micron-4GB
|
|
|
|
*/
|
|
|
|
ramcode = ramcode / 2;
|
|
|
|
|
|
|
|
if (cbfs_boot_load_struct(sdram_configs[ramcode],
|
|
|
|
¶ms, sizeof(params)) != sizeof(params))
|
|
|
|
#else
|
2016-08-20 01:35:22 +02:00
|
|
|
if (cbfs_boot_load_struct(sdram_configs[get_sdram_index()],
|
|
|
|
¶ms, sizeof(params)) != sizeof(params))
|
2016-11-14 13:10:55 +01:00
|
|
|
#endif
|
2016-08-20 01:35:22 +02:00
|
|
|
die("Cannot load SDRAM parameter file!");
|
|
|
|
return ¶ms;
|
2016-03-17 08:28:33 +01:00
|
|
|
}
|