blob: 7f5ea85fd543abe69acfa7c5c9a4a555afb1cfa5 [file] [log] [blame]
Michał Żygowski90989b32022-04-07 15:16:46 +02001/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <assert.h>
Michał Żygowski90989b32022-04-07 15:16:46 +02004#include <fsp/api.h>
5#include <soc/romstage.h>
6#include <soc/meminit.h>
Michał Żygowski97112482022-11-09 18:15:51 +01007#include <string.h>
Michał Żygowski90989b32022-04-07 15:16:46 +02008
Michał Żygowskic354f312022-04-15 18:19:19 +02009#include "gpio.h"
10
Michał Żygowski97112482022-11-09 18:15:51 +010011#define FSP_CLK_NOTUSED 0xFF
12#define FSP_CLK_FREE_RUNNING 0x80
13
Michał Żygowski90989b32022-04-07 15:16:46 +020014static const struct mb_cfg ddr4_mem_config = {
15 .type = MEM_TYPE_DDR4,
Michał Żygowski9f87ad22022-10-15 12:38:35 +020016 /* According to DOC #573387 rcomp values no longer have to be provided */
17 /* DDR DIMM configuration does not need to set DQ/DQS maps */
18 .UserBd = BOARD_TYPE_DESKTOP_2DPC,
19
20 .ddr_config = {
21 .dq_pins_interleaved = true,
22 },
23};
24
25static const struct mb_cfg ddr5_mem_config = {
26 .type = MEM_TYPE_DDR5,
27
28 .ect = true, /* Early Command Training */
Michał Żygowski90989b32022-04-07 15:16:46 +020029
Michał Żygowski02db6b42022-04-08 17:12:13 +020030 /* According to DOC #573387 rcomp values no longer have to be provided */
31 /* DDR DIMM configuration does not need to set DQ/DQS maps */
Michał Żygowski9f87ad22022-10-15 12:38:35 +020032 .UserBd = BOARD_TYPE_DESKTOP_2DPC,
Michał Żygowski90989b32022-04-07 15:16:46 +020033
Michał Żygowski9f87ad22022-10-15 12:38:35 +020034 .LpDdrDqDqsReTraining = 1,
Michał Żygowski90989b32022-04-07 15:16:46 +020035
36 .ddr_config = {
Michał Żygowski02db6b42022-04-08 17:12:13 +020037 .dq_pins_interleaved = true,
Michał Żygowski90989b32022-04-07 15:16:46 +020038 },
39};
40
41static const struct mem_spd dimm_module_spd_info = {
42 .topo = MEM_TOPO_DIMM_MODULE,
43 .smbus = {
44 [0] = {
45 .addr_dimm[0] = 0x50,
46 .addr_dimm[1] = 0x51,
47 },
48 [1] = {
49 .addr_dimm[0] = 0x52,
50 .addr_dimm[1] = 0x53,
51 },
52 },
53};
54
Michał Żygowski97112482022-11-09 18:15:51 +010055static void disable_pcie_clock_requests(FSP_M_CONFIG *m_cfg)
56{
57 memset(m_cfg->PcieClkSrcUsage, FSP_CLK_NOTUSED, sizeof(m_cfg->PcieClkSrcUsage));
58 memset(m_cfg->PcieClkSrcClkReq, FSP_CLK_NOTUSED, sizeof(m_cfg->PcieClkSrcClkReq));
59
60 /* PCIe CLK SRCes as per devicetree.cb */
61 m_cfg->PcieClkSrcUsage[0] = FSP_CLK_FREE_RUNNING;
62 m_cfg->PcieClkSrcUsage[8] = FSP_CLK_FREE_RUNNING;
63 m_cfg->PcieClkSrcUsage[9] = FSP_CLK_FREE_RUNNING;
64 m_cfg->PcieClkSrcUsage[10] = FSP_CLK_FREE_RUNNING;
65 m_cfg->PcieClkSrcUsage[12] = FSP_CLK_FREE_RUNNING;
66 m_cfg->PcieClkSrcUsage[13] = FSP_CLK_FREE_RUNNING;
67 m_cfg->PcieClkSrcUsage[14] = FSP_CLK_FREE_RUNNING;
68 m_cfg->PcieClkSrcUsage[15] = FSP_CLK_FREE_RUNNING;
69 m_cfg->PcieClkSrcUsage[17] = FSP_CLK_FREE_RUNNING;
70
71 gpio_configure_pads(clkreq_disabled_table, ARRAY_SIZE(clkreq_disabled_table));
72}
73
Michał Żygowski90989b32022-04-07 15:16:46 +020074void mainboard_memory_init_params(FSPM_UPD *memupd)
75{
Michał Żygowski97112482022-11-09 18:15:51 +010076 memupd->FspmConfig.CpuPcieRpClockReqMsgEnable[0] = CONFIG(PCIEXP_CLK_PM);
77 memupd->FspmConfig.CpuPcieRpClockReqMsgEnable[1] = CONFIG(PCIEXP_CLK_PM);
78 memupd->FspmConfig.CpuPcieRpClockReqMsgEnable[2] = CONFIG(PCIEXP_CLK_PM);
Michał Żygowskic354f312022-04-15 18:19:19 +020079 memupd->FspmConfig.DmiMaxLinkSpeed = 4; // Gen4 speed, undocumented
Michał Żygowskicd3a99e2022-11-18 17:33:45 +010080 memupd->FspmConfig.DmiAspm = 0;
81 memupd->FspmConfig.DmiAspmCtrl = 0;
Michał Żygowskic354f312022-04-15 18:19:19 +020082 memupd->FspmConfig.SkipExtGfxScan = 0;
83
Michał Żygowskic354f312022-04-15 18:19:19 +020084 memupd->FspmConfig.PchHdaSdiEnable[0] = 1;
85
Michał Żygowski9f87ad22022-10-15 12:38:35 +020086 if (CONFIG(BOARD_MSI_Z690_A_PRO_WIFI_DDR4))
87 memcfg_init(memupd, &ddr4_mem_config, &dimm_module_spd_info, false);
88 if (CONFIG(BOARD_MSI_Z690_A_PRO_WIFI_DDR5))
89 memcfg_init(memupd, &ddr5_mem_config, &dimm_module_spd_info, false);
Michał Żygowskic354f312022-04-15 18:19:19 +020090
91 gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
Michał Żygowski97112482022-11-09 18:15:51 +010092
93 if (!CONFIG(PCIEXP_CLK_PM))
94 disable_pcie_clock_requests(&memupd->FspmConfig);
Michał Żygowski90989b32022-04-07 15:16:46 +020095}