coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
romstage.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <soc/romstage.h>
4 #include <spd_bin.h>
5 #include <string.h>
6 
7 static void mainboard_fill_dq_map_data(void *dq_map_ch0, void *dq_map_ch1)
8 {
9  const u8 dq_map[2][12] = {
10  { 0x0F, 0xF0, 0x00, 0xF0, 0x0F, 0xF0,
11  0x0F, 0x00, 0xFF, 0x00, 0xFF, 0x00 },
12  { 0x33, 0xCC, 0x00, 0xCC, 0x33, 0xCC,
13  0x33, 0x00, 0xFF, 0x00, 0xFF, 0x00 } };
14  memcpy(dq_map_ch0, dq_map[0], sizeof(dq_map[0]));
15  memcpy(dq_map_ch1, dq_map[1], sizeof(dq_map[1]));
16 }
17 
18 static void mainboard_fill_dqs_map_data(void *dqs_map_ch0, void *dqs_map_ch1)
19 {
20  const u8 dqs_map[2][8] = {
21  { 0, 1, 2, 3, 4, 5, 6, 7 },
22  { 1, 0, 2, 3, 4, 5, 6, 7 } };
23  memcpy(dqs_map_ch0, dqs_map[0], sizeof(dqs_map[0]));
24  memcpy(dqs_map_ch1, dqs_map[1], sizeof(dqs_map[1]));
25 }
26 
27 static void mainboard_fill_rcomp_res_data(void *rcomp_ptr)
28 {
29  const u16 RcompResistor[3] = { 121, 81, 100 };
30  memcpy(rcomp_ptr, RcompResistor, sizeof(RcompResistor));
31 }
32 
33 static void mainboard_fill_rcomp_strength_data(void *rcomp_strength_ptr)
34 {
35  const u16 RcompTarget[5] = { 100, 40, 20, 20, 26 };
36  memcpy(rcomp_strength_ptr, RcompTarget, sizeof(RcompTarget));
37 }
38 
39 void mainboard_memory_init_params(FSPM_UPD *mupd)
40 {
41  FSP_M_CONFIG *mem_cfg;
42  mem_cfg = &mupd->FspmConfig;
43 
44  mainboard_fill_dq_map_data(&mem_cfg->DqByteMapCh0, &mem_cfg->DqByteMapCh1);
45  mainboard_fill_dqs_map_data(&mem_cfg->DqsMapCpu2DramCh0, &mem_cfg->DqsMapCpu2DramCh1);
46  mainboard_fill_rcomp_res_data(&mem_cfg->RcompResistor);
47  mainboard_fill_rcomp_strength_data(&mem_cfg->RcompTarget);
48 
49  struct spd_block blk = {
50  .addr_map = { 0x50, 0x52, },
51  };
52 
53  mem_cfg->DqPinsInterleaved = 1;
54  mem_cfg->CaVrefConfig = 2;
55 
56  get_spd_smbus(&blk);
57  dump_spd_info(&blk);
58 
59  mem_cfg->MemorySpdDataLen = blk.len;
60  mem_cfg->MemorySpdPtr00 = (uintptr_t)blk.spd_array[0];
61  mem_cfg->MemorySpdPtr10 = (uintptr_t)blk.spd_array[1];
62 }
void * memcpy(void *dest, const void *src, size_t n)
Definition: memcpy.c:7
#define FSP_M_CONFIG
Definition: fsp_upd.h:8
void mainboard_memory_init_params(FSPM_UPD *mupd)
Definition: romstage.c:22
static const u8 dqs_map[][8]
Definition: memory.c:17
static const u8 dq_map[][12]
Definition: memory.c:9
static void mainboard_fill_rcomp_res_data(void *rcomp_ptr)
Definition: romstage.c:27
static void mainboard_fill_dq_map_data(void *dq_map_ch0, void *dq_map_ch1)
Definition: romstage.c:7
static void mainboard_fill_rcomp_strength_data(void *rcomp_strength_ptr)
Definition: romstage.c:33
static void mainboard_fill_dqs_map_data(void *dqs_map_ch0, void *dqs_map_ch1)
Definition: romstage.c:18
void get_spd_smbus(struct spd_block *blk)
Definition: smbuslib.c:72
void dump_spd_info(struct spd_block *blk)
Definition: spd_bin.c:10
unsigned long uintptr_t
Definition: stdint.h:21
uint16_t u16
Definition: stdint.h:48
uint8_t u8
Definition: stdint.h:45
Definition: ddr4.c:86
u8 addr_map[CONFIG_DIMM_MAX]
Definition: spd_bin.h:39
u8 * spd_array[CONFIG_DIMM_MAX]
Definition: spd_bin.h:40
uint16_t len
Definition: ddr4.c:89