coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
memory.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <baseboard/gpio.h>
4 #include <baseboard/variants.h>
5 #include <gpio.h>
6 #include <soc/romstage.h>
7 #include <string.h>
8 
9 static const struct mb_cfg baseboard_memcfg = {
11 
12  /* DQ byte map */
13  .ddr4_dq_map = {
14  .ddr0 = {
15  .dq0 = { 10, 15, 11, 14, 13, 8, 12, 9, }, /* Byte 0 */
16  .dq1 = { 3, 5, 1, 0, 4, 7, 2, 6, }, /* Byte 1 */
17  .dq2 = { 15, 8, 11, 13, 10, 12, 14, 9, }, /* Byte 2 */
18  .dq3 = { 1, 6, 2, 4, 7, 5, 3, 0, }, /* Byte 3 */
19  .dq4 = { 7, 2, 6, 3, 4, 0, 5, 1, }, /* Byte 4 */
20  .dq5 = { 14, 10, 15, 11, 9, 13, 8, 12, }, /* Byte 5 */
21  .dq6 = { 8, 10, 14, 12, 9, 13, 11, 15, }, /* Byte 6 */
22  .dq7 = { 2, 7, 4, 5, 1, 3, 0, 6 }, /* Byte 7 */
23  },
24 
25  .ddr1 = {
26  .dq0 = { 12, 14, 10, 11, 15, 13, 9, 8, }, /* Byte 0 */
27  .dq1 = { 0, 6, 2, 7, 3, 5, 1, 4, }, /* Byte 1 */
28  .dq2 = { 10, 9, 14, 12, 11, 8, 15, 13, }, /* Byte 2 */
29  .dq3 = { 7, 3, 1, 4, 6, 2, 0, 5, }, /* Byte 3 */
30  .dq4 = { 10, 9, 13, 12, 8, 14, 11, 15, }, /* Byte 4 */
31  .dq5 = { 5, 4, 0, 2, 7, 3, 6, 1, }, /* Byte 5 */
32  .dq6 = { 15, 9, 11, 13, 10, 14, 8, 12, }, /* Byte 6 */
33  .dq7 = { 7, 3, 0, 4, 2, 5, 1, 6 }, /* Byte 7 */
34  },
35  },
36 
37  /* DQS CPU<>DRAM map */
38  .ddr4_dqs_map = {
39  .ddr0 = {
40  .dqs0 = 1,
41  .dqs1 = 0,
42  .dqs2 = 1,
43  .dqs3 = 0,
44  .dqs4 = 0,
45  .dqs5 = 1,
46  .dqs6 = 1,
47  .dqs7 = 0,
48  },
49  .ddr1 = {
50  .dqs0 = 1,
51  .dqs1 = 0,
52  .dqs2 = 1,
53  .dqs3 = 0,
54  .dqs4 = 1,
55  .dqs5 = 0,
56  .dqs6 = 1,
57  .dqs7 = 0,
58  }
59  },
60 
61  .ect = false, /* Disable Early Command Training */
62 };
63 
64 void variant_memory_init(FSPM_UPD *mupd)
65 {
66  const struct mem_spd spd_info = {
67  .topo = MEM_TOPO_DIMM_MODULE,
68  .smbus = {
69  [0] = { .addr_dimm[0] = 0x50, },
70  [1] = { .addr_dimm[0] = 0x52, },
71  },
72  };
73  const bool half_populated = false;
74  struct mb_cfg new_board_cfg_ddr4;
75 
76  memcpy(&new_board_cfg_ddr4, &baseboard_memcfg, sizeof(baseboard_memcfg));
77 
79 
80  memcfg_init(mupd, &new_board_cfg_ddr4, &spd_info, half_populated);
81 }
void memcfg_init(FSPM_UPD *memupd, const struct mb_cfg *mb_cfg, const struct mem_spd *spd_info, bool half_populated)
Definition: meminit.c:238
@ MEM_TYPE_DDR4
Definition: meminit.h:11
void * memcpy(void *dest, const void *src, size_t n)
Definition: memcpy.c:7
@ MEM_TOPO_DIMM_MODULE
Definition: meminit.h:26
int gpio_get(gpio_t gpio)
Definition: gpio.c:166
#define MEMORY_INTERLEAVED
Definition: gpio.h:27
static const struct mb_cfg baseboard_memcfg
Definition: memory.c:9
void variant_memory_init(FSPM_UPD *mupd)
Definition: memory.c:64
Definition: meminit.h:71
enum mem_type type
Definition: meminit.h:72
struct mem_ddr4_config ddr4_config
Definition: meminit.h:111
bool dq_pins_interleaved
Definition: meminit.h:80
Definition: spd.h:11