blob: 02790b0762a34b13d4682826f09f71e83f88a8ef [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>
Elyes Haouasbdd03c22024-05-27 11:20:07 +02008#include <stdio.h>
Lin Huangc4cbf482016-03-17 15:28:33 +08009#include <types.h>
10
Julius Werner329031f2016-08-19 16:35:22 -070011static const char *sdram_configs[] = {
Lin Huang2bd52ff2017-12-01 16:32:34 +080012 /* Samsung K4E6E304EB-EGCE */
13 [0] = "sdram-lpddr3-generic-4GB",
14
15 /* Hynix H9CCNNNBJTALAR */
16 [1] = "sdram-lpddr3-generic-4GB",
17
18 /* Samsung K4E8E324EB-EGCF */
19 [3] = "sdram-lpddr3-generic-2GB",
20
21 /* Micron MT52L256M32D1PF */
22 [4] = "sdram-lpddr3-generic-2GB",
23
24 /* Samsung K4E6E304EB-EGCE, duplicate to 0 */
25 [5] = "sdram-lpddr3-generic-4GB",
26
27 /* Micron MT52L512M32D2PF */
28 [6] = "sdram-lpddr3-generic-4GB",
Lin Huang627c27b2016-06-16 10:44:30 +080029};
30
Julius Werner329031f2016-08-19 16:35:22 -070031static struct rk3399_sdram_params params;
32
Caesar Wang6c4e5742017-05-05 17:37:42 +080033enum dram_speeds {
34 dram_800MHz = 800,
35 dram_928MHz = 928,
36};
37
38static enum dram_speeds get_sdram_target_mhz(void)
39{
Julius Wernercd49cce2019-03-05 16:53:33 -080040 if (CONFIG(BOARD_GOOGLE_BOB) && board_id() < 4)
Caesar Wang6c4e5742017-05-05 17:37:42 +080041 return dram_800MHz;
42
43 return dram_928MHz;
44}
45
Arthur Heymans71e40782022-11-17 12:47:09 +010046const struct rk3399_sdram_params *get_sdram_config(void)
Lin Huangc4cbf482016-03-17 15:28:33 +080047{
Caesar Wang6c4e5742017-05-05 17:37:42 +080048 char config_file[64];
Shasha Zhaoc99526c2016-11-17 12:42:51 +080049 uint32_t ramcode;
Shasha Zhao6bd75ec2016-11-14 20:10:55 +080050
Shasha Zhaoc99526c2016-11-17 12:42:51 +080051 ramcode = ram_code();
Caesar Wang6c4e5742017-05-05 17:37:42 +080052 if (ramcode >= ARRAY_SIZE(sdram_configs) ||
53 !snprintf(config_file, sizeof(config_file), "%s-%d",
54 sdram_configs[ramcode], get_sdram_target_mhz()) ||
Julius Werner834b3ec2020-03-04 16:52:08 -080055 (cbfs_load(config_file, &params, sizeof(params)) != sizeof(params)))
Julius Werner329031f2016-08-19 16:35:22 -070056 die("Cannot load SDRAM parameter file!");
Caesar Wang6c4e5742017-05-05 17:37:42 +080057
Julius Werner329031f2016-08-19 16:35:22 -070058 return &params;
Lin Huangc4cbf482016-03-17 15:28:33 +080059}