blob: b5bb77747669dc61d03d8bc7d8b46668c85fe2f9 [file] [log] [blame]
Jamie Ryu12367e02022-07-27 04:11:26 -07001/* SPDX-License-Identifier: GPL-2.0-or-later */
2
3#include <baseboard/variants.h>
4#include <console/console.h>
5#include <ec/intel/board_id.h>
6#include <soc/romstage.h>
7
Ashish Kumar Mishra8894a552022-11-17 14:48:26 +05308#define SPD_ID_MASK 0x7
9
10static size_t get_spd_index(void)
11{
12 uint8_t board_id = get_rvp_board_id();
13 size_t spd_index;
14
15 printk(BIOS_INFO, "board id is 0x%x\n", board_id);
16
17 spd_index = board_id & SPD_ID_MASK;
18
19 printk(BIOS_INFO, "SPD index is 0x%x\n", (unsigned int)spd_index);
20 return spd_index;
21}
22
Jamie Ryu12367e02022-07-27 04:11:26 -070023void mainboard_memory_init_params(FSPM_UPD *memupd)
24{
25 const struct mb_cfg *mem_config = variant_memory_params();
26 int board_id = get_rvp_board_id();
27 const bool half_populated = false;
28
Ashish Kumar Mishra8894a552022-11-17 14:48:26 +053029 const struct mem_spd memory_down_spd_info = {
30 .topo = MEM_TOPO_MEMORY_DOWN,
31 .cbfs_index = get_spd_index(),
32 };
33
Jamie Ryu12367e02022-07-27 04:11:26 -070034 const struct mem_spd dimm_module_spd_info = {
35 .topo = MEM_TOPO_DIMM_MODULE,
36 .smbus = {
37 [0] = {
38 .addr_dimm[0] = 0x50,
39 .addr_dimm[1] = 0x0,
40 },
41 [1] = {
42 .addr_dimm[0] = 0x50,
43 .addr_dimm[1] = 0x0,
44 },
45 [2] = {
46 .addr_dimm[0] = 0x52,
47 .addr_dimm[1] = 0x0,
48 },
49 [3] = {
50 .addr_dimm[0] = 0x52,
51 .addr_dimm[1] = 0x0,
52 },
53 },
54 };
55
56 switch (board_id) {
57 case MTLP_DDR5_RVP:
58 memcfg_init(memupd, mem_config, &dimm_module_spd_info, half_populated);
59 break;
Ashish Kumar Mishra8894a552022-11-17 14:48:26 +053060 case MTLP_LP5_T3_RVP:
61 case MTLP_LP5_T4_RVP:
62 memcfg_init(memupd, mem_config, &memory_down_spd_info, half_populated);
63 break;
Jamie Ryu12367e02022-07-27 04:11:26 -070064 default:
65 die("Unknown board id = 0x%x\n", board_id);
66 break;
67 }
68}