Angel Pons | 60ec365 | 2020-04-03 01:22:13 +0200 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 2 | #include <assert.h> |
| 3 | #include <console/console.h> |
Ravi Sarawadi | ebb2d3c | 2019-12-19 23:01:48 -0800 | [diff] [blame] | 4 | #include <fsp/api.h> |
| 5 | #include <soc/romstage.h> |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 6 | #include <spd_bin.h> |
Aamir Bohra | 555c9b6 | 2020-03-23 10:13:10 +0530 | [diff] [blame] | 7 | #include <soc/meminit.h> |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 8 | #include <baseboard/variants.h> |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 9 | #include "board_id.h" |
| 10 | #include "spd/spd.h" |
| 11 | |
| 12 | static uintptr_t mainboard_get_spd_index(void) |
| 13 | { |
| 14 | uint8_t board_id = (get_board_id() & 0xFF); |
| 15 | int spd_index; |
| 16 | |
| 17 | printk(BIOS_INFO, "board id is 0x%x\n", board_id); |
| 18 | |
| 19 | switch (board_id) { |
Srinidhi N Kaushik | 9900cf8 | 2020-03-06 16:46:39 -0800 | [diff] [blame] | 20 | case TGL_UP3_LP4_MICRON: |
| 21 | case TGL_UP4_LP4_MICRON: |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 22 | spd_index = SPD_ID_MICRON; |
| 23 | break; |
Srinidhi N Kaushik | 9900cf8 | 2020-03-06 16:46:39 -0800 | [diff] [blame] | 24 | case TGL_UP3_LP4_SAMSUNG: |
| 25 | case TGL_UP4_LP4_SAMSUNG: |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 26 | spd_index = SPD_ID_SAMSUNG; |
| 27 | break; |
Srinidhi N Kaushik | 9900cf8 | 2020-03-06 16:46:39 -0800 | [diff] [blame] | 28 | case TGL_UP3_LP4_HYNIX: |
| 29 | case TGL_UP4_LP4_HYNIX: |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 30 | spd_index = SPD_ID_HYNIX; |
| 31 | break; |
| 32 | default: |
| 33 | spd_index = SPD_ID_MICRON; |
| 34 | printk(BIOS_WARNING, "Invalid board_id 0x%x\n", board_id); |
| 35 | } |
| 36 | |
| 37 | printk(BIOS_INFO, "SPD index is 0x%x\n", spd_index); |
| 38 | return spd_index; |
| 39 | } |
Ravi Sarawadi | ebb2d3c | 2019-12-19 23:01:48 -0800 | [diff] [blame] | 40 | |
| 41 | void mainboard_memory_init_params(FSPM_UPD *mupd) |
| 42 | { |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 43 | FSP_M_CONFIG *mem_cfg = &mupd->FspmConfig; |
| 44 | |
Furquan Shaikh | 5b1f335 | 2020-03-26 15:36:19 -0700 | [diff] [blame] | 45 | const struct lpddr4x_cfg *mem_config = variant_memory_params(); |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 46 | const struct spd_info spd_info = { |
Furquan Shaikh | 5b1f335 | 2020-03-26 15:36:19 -0700 | [diff] [blame] | 47 | .topology = MEMORY_DOWN, |
| 48 | .md_spd_loc = SPD_CBFS, |
| 49 | .cbfs_index = mainboard_get_spd_index(), |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 50 | }; |
| 51 | bool half_populated = false; |
| 52 | |
Furquan Shaikh | 5b1f335 | 2020-03-26 15:36:19 -0700 | [diff] [blame] | 53 | meminit_lpddr4x(mem_cfg, mem_config, &spd_info, half_populated); |
Srinidhi N Kaushik | fdba0cd | 2020-02-19 00:48:55 -0800 | [diff] [blame] | 54 | |
Ravi Sarawadi | ebb2d3c | 2019-12-19 23:01:48 -0800 | [diff] [blame] | 55 | } |