blob: 707f871cc5924a408f19dae3baac485eb35bdc7a [file] [log] [blame]
Michał Żygowski90989b32022-04-07 15:16:46 +02001/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <assert.h>
4#include <console/console.h>
5#include <fsp/api.h>
6#include <soc/romstage.h>
7#include <soc/meminit.h>
8
Michał Żygowskic354f312022-04-15 18:19:19 +02009#include "gpio.h"
10
Michał Żygowski90989b32022-04-07 15:16:46 +020011static const struct mb_cfg ddr4_mem_config = {
12 .type = MEM_TYPE_DDR4,
Michał Żygowski9f87ad22022-10-15 12:38:35 +020013 /* According to DOC #573387 rcomp values no longer have to be provided */
14 /* DDR DIMM configuration does not need to set DQ/DQS maps */
15 .UserBd = BOARD_TYPE_DESKTOP_2DPC,
16
17 .ddr_config = {
18 .dq_pins_interleaved = true,
19 },
20};
21
22static const struct mb_cfg ddr5_mem_config = {
23 .type = MEM_TYPE_DDR5,
24
25 .ect = true, /* Early Command Training */
Michał Żygowski90989b32022-04-07 15:16:46 +020026
Michał Żygowski02db6b42022-04-08 17:12:13 +020027 /* According to DOC #573387 rcomp values no longer have to be provided */
28 /* DDR DIMM configuration does not need to set DQ/DQS maps */
Michał Żygowski9f87ad22022-10-15 12:38:35 +020029 .UserBd = BOARD_TYPE_DESKTOP_2DPC,
Michał Żygowski90989b32022-04-07 15:16:46 +020030
Michał Żygowski9f87ad22022-10-15 12:38:35 +020031 .LpDdrDqDqsReTraining = 1,
Michał Żygowski90989b32022-04-07 15:16:46 +020032
33 .ddr_config = {
Michał Żygowski02db6b42022-04-08 17:12:13 +020034 .dq_pins_interleaved = true,
Michał Żygowski90989b32022-04-07 15:16:46 +020035 },
36};
37
38static const struct mem_spd dimm_module_spd_info = {
39 .topo = MEM_TOPO_DIMM_MODULE,
40 .smbus = {
41 [0] = {
42 .addr_dimm[0] = 0x50,
43 .addr_dimm[1] = 0x51,
44 },
45 [1] = {
46 .addr_dimm[0] = 0x52,
47 .addr_dimm[1] = 0x53,
48 },
49 },
50};
51
52void mainboard_memory_init_params(FSPM_UPD *memupd)
53{
Michał Żygowskic354f312022-04-15 18:19:19 +020054 memupd->FspmConfig.CpuPcieRpClockReqMsgEnable[0] = 1;
55 memupd->FspmConfig.CpuPcieRpClockReqMsgEnable[1] = 1;
56 memupd->FspmConfig.CpuPcieRpClockReqMsgEnable[2] = 0;
57 memupd->FspmConfig.DmiMaxLinkSpeed = 4; // Gen4 speed, undocumented
58 memupd->FspmConfig.SkipExtGfxScan = 0;
59
60 memupd->FspmConfig.PchHdaAudioLinkHdaEnable = 1;
61 memupd->FspmConfig.PchHdaSdiEnable[0] = 1;
62
63 /*
64 * Let FSP configure virtual wires, CLKREQs, etc.
65 * Otherwise undefined behaviour occurs when coreboot enables ASPM on
66 * CPU PCIe root ports. This is caused by FSP reprogramming certain
67 * pads including CLKREQ pins, despite GpioOverride = 1.
68 */
69 memupd->FspmConfig.GpioOverride = 0;
70
Michał Żygowski9f87ad22022-10-15 12:38:35 +020071 if (CONFIG(BOARD_MSI_Z690_A_PRO_WIFI_DDR4))
72 memcfg_init(memupd, &ddr4_mem_config, &dimm_module_spd_info, false);
73 if (CONFIG(BOARD_MSI_Z690_A_PRO_WIFI_DDR5))
74 memcfg_init(memupd, &ddr5_mem_config, &dimm_module_spd_info, false);
Michał Żygowskic354f312022-04-15 18:19:19 +020075
76 gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
Michał Żygowski90989b32022-04-07 15:16:46 +020077}