blob: 2aceb9f084196c57baf66182ac5ae518ae595740 [file] [log] [blame]
Angel Pons16c851f2020-04-05 13:21:38 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Lin Huangc4cbf482016-03-17 15:28:33 +08002
Lin Huangc4cbf482016-03-17 15:28:33 +08003#include <boardid.h>
Julius Werner329031f2016-08-19 16:35:22 -07004#include <cbfs.h>
Lin Huangc4cbf482016-03-17 15:28:33 +08005#include <console/console.h>
6#include <gpio.h>
7#include <soc/sdram.h>
8#include <string.h>
9#include <types.h>
10
Julius Werner329031f2016-08-19 16:35:22 -070011static const char *sdram_configs[] = {
Lin Huang2bd52ff2017-12-01 16:32:34 +080012
13 /* Samsung K4E6E304EB-EGCE */
14 [0] = "sdram-lpddr3-generic-4GB",
15
16 /* Hynix H9CCNNNBJTALAR */
17 [1] = "sdram-lpddr3-generic-4GB",
18
19 /* Samsung K4E8E324EB-EGCF */
20 [3] = "sdram-lpddr3-generic-2GB",
21
22 /* Micron MT52L256M32D1PF */
23 [4] = "sdram-lpddr3-generic-2GB",
24
25 /* Samsung K4E6E304EB-EGCE, duplicate to 0 */
26 [5] = "sdram-lpddr3-generic-4GB",
27
28 /* Micron MT52L512M32D2PF */
29 [6] = "sdram-lpddr3-generic-4GB",
Lin Huang627c27b2016-06-16 10:44:30 +080030};
31
Julius Werner329031f2016-08-19 16:35:22 -070032static struct rk3399_sdram_params params;
33
Caesar Wang6c4e5742017-05-05 17:37:42 +080034enum dram_speeds {
35 dram_800MHz = 800,
36 dram_928MHz = 928,
37};
38
39static enum dram_speeds get_sdram_target_mhz(void)
40{
Julius Wernercd49cce2019-03-05 16:53:33 -080041 if (CONFIG(BOARD_GOOGLE_BOB) && board_id() < 4)
Caesar Wang6c4e5742017-05-05 17:37:42 +080042 return dram_800MHz;
43
44 return dram_928MHz;
45}
46
Lin Huangc4cbf482016-03-17 15:28:33 +080047const struct rk3399_sdram_params *get_sdram_config()
48{
Caesar Wang6c4e5742017-05-05 17:37:42 +080049 char config_file[64];
Shasha Zhaoc99526c2016-11-17 12:42:51 +080050 uint32_t ramcode;
Shasha Zhao6bd75ec2016-11-14 20:10:55 +080051
Shasha Zhaoc99526c2016-11-17 12:42:51 +080052 ramcode = ram_code();
Caesar Wang6c4e5742017-05-05 17:37:42 +080053 if (ramcode >= ARRAY_SIZE(sdram_configs) ||
54 !snprintf(config_file, sizeof(config_file), "%s-%d",
55 sdram_configs[ramcode], get_sdram_target_mhz()) ||
Julius Werner834b3ec2020-03-04 16:52:08 -080056 (cbfs_load(config_file, &params, sizeof(params)) != sizeof(params)))
Julius Werner329031f2016-08-19 16:35:22 -070057 die("Cannot load SDRAM parameter file!");
Caesar Wang6c4e5742017-05-05 17:37:42 +080058
Julius Werner329031f2016-08-19 16:35:22 -070059 return &params;
Lin Huangc4cbf482016-03-17 15:28:33 +080060}