blob: 8b5cd1819535cce18f881fb9dc8a8955bc2c0852 [file] [log] [blame]
Rizwan Qureshi1222a732016-08-23 14:31:23 +05301/*
2 * This file is part of the coreboot project.
3 *
4 * Copyright (C) 2016 Intel Corp.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; version 2 of the License.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
Barnali Sarkar5bf42c62016-08-24 20:48:46 +053016#include <arch/cpu.h>
Kyösti Mälkkia963acd2019-08-16 20:34:25 +030017#include <arch/romstage.h>
Barnali Sarkar5bf42c62016-08-24 20:48:46 +053018#include <arch/symbols.h>
19#include <assert.h>
20#include <cpu/x86/mtrr.h>
Naresh G Solanki79239b72016-11-16 21:34:41 +053021#include <cpu/x86/msr.h>
Kyösti Mälkkib2a5f0b2019-08-04 19:54:32 +030022#include <cpu/x86/smm.h>
Barnali Sarkar5bf42c62016-08-24 20:48:46 +053023#include <cbmem.h>
Rizwan Qureshi1222a732016-08-23 14:31:23 +053024#include <console/console.h>
Barnali Sarkar5bf42c62016-08-24 20:48:46 +053025#include <device/pci_def.h>
Rizwan Qureshi1222a732016-08-23 14:31:23 +053026#include <fsp/util.h>
Shaunak Sahad3476802017-07-08 01:08:40 -070027#include <intelblocks/pmclib.h>
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +053028#include <memory_info.h>
Barnali Sarkarf7f01f72018-01-11 16:40:54 +053029#include <smbios.h>
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +053030#include <soc/intel/common/smbios.h>
Naresh G Solanki79239b72016-11-16 21:34:41 +053031#include <soc/msr.h>
Barnali Sarkar5bf42c62016-08-24 20:48:46 +053032#include <soc/pci_devs.h>
33#include <soc/pm.h>
Rizwan Qureshi1222a732016-08-23 14:31:23 +053034#include <soc/romstage.h>
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +053035#include <string.h>
Barnali Sarkar5bf42c62016-08-24 20:48:46 +053036#include <timestamp.h>
Philipp Deppenwiesefea24292017-10-17 17:02:29 +020037#include <security/vboot/vboot_common.h>
Barnali Sarkar5bf42c62016-08-24 20:48:46 +053038
Elyes HAOUASc3385072019-03-21 15:38:06 +010039#include "../chip.h"
40
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +053041#define FSP_SMBIOS_MEMORY_INFO_GUID \
42{ \
43 0xd4, 0x71, 0x20, 0x9b, 0x54, 0xb0, 0x0c, 0x4e, \
44 0x8d, 0x09, 0x11, 0xcf, 0x8b, 0x9f, 0x03, 0x23 \
45}
46
Subrata Banik54fa28e2018-02-07 14:59:34 +053047/* Memory Channel Present Status */
48enum {
49 CHANNEL_NOT_PRESENT,
50 CHANNEL_DISABLED,
51 CHANNEL_PRESENT
52};
53
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +053054/* Save the DIMM information for SMBIOS table 17 */
55static void save_dimm_info(void)
56{
57 int channel, dimm, dimm_max, index;
58 size_t hob_size;
Barnali Sarkarf7f01f72018-01-11 16:40:54 +053059 uint8_t ddr_type;
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +053060 const CONTROLLER_INFO *ctrlr_info;
61 const CHANNEL_INFO *channel_info;
62 const DIMM_INFO *src_dimm;
63 struct dimm_info *dest_dimm;
64 struct memory_info *mem_info;
65 const MEMORY_INFO_DATA_HOB *memory_info_hob;
Subrata Banik54fa28e2018-02-07 14:59:34 +053066 const uint8_t smbios_memory_info_guid[16] =
67 FSP_SMBIOS_MEMORY_INFO_GUID;
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +053068
69 /* Locate the memory info HOB, presence validated by raminit */
70 memory_info_hob =
71 fsp_find_extension_hob_by_guid(smbios_memory_info_guid,
72 &hob_size);
Subrata Banik54fa28e2018-02-07 14:59:34 +053073 if (memory_info_hob == NULL || hob_size == 0) {
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +053074 printk(BIOS_ERR, "SMBIOS MEMORY_INFO_DATA_HOB not found\n");
75 return;
76 }
77
78 /*
79 * Allocate CBMEM area for DIMM information used to populate SMBIOS
80 * table 17
81 */
82 mem_info = cbmem_add(CBMEM_ID_MEMINFO, sizeof(*mem_info));
83 if (mem_info == NULL) {
84 printk(BIOS_ERR, "CBMEM entry for DIMM info missing\n");
85 return;
86 }
87 memset(mem_info, 0, sizeof(*mem_info));
88
89 /* Describe the first N DIMMs in the system */
90 index = 0;
91 dimm_max = ARRAY_SIZE(mem_info->dimm);
92 ctrlr_info = &memory_info_hob->Controller[0];
Nico Huber9dc62ea2017-07-19 15:45:14 +020093 for (channel = 0; channel < MAX_CH && index < dimm_max; channel++) {
Balaji Manigandan Bbd55c022017-09-22 14:27:56 +053094 channel_info = &ctrlr_info->ChannelInfo[channel];
Subrata Banik54fa28e2018-02-07 14:59:34 +053095 if (channel_info->Status != CHANNEL_PRESENT)
Nico Huber9dc62ea2017-07-19 15:45:14 +020096 continue;
97 for (dimm = 0; dimm < MAX_DIMM && index < dimm_max; dimm++) {
Balaji Manigandan Bbd55c022017-09-22 14:27:56 +053098 src_dimm = &channel_info->DimmInfo[dimm];
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +053099 dest_dimm = &mem_info->dimm[index];
100
Nico Huber9dc62ea2017-07-19 15:45:14 +0200101 if (src_dimm->Status != DIMM_PRESENT)
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +0530102 continue;
103
Elyes HAOUAS0ce41f12018-11-13 10:03:31 +0100104 switch (memory_info_hob->MemoryType) {
Barnali Sarkarf7f01f72018-01-11 16:40:54 +0530105 case MRC_DDR_TYPE_DDR4:
Elyes HAOUAS28114ae2018-11-14 17:51:00 +0100106 ddr_type = MEMORY_TYPE_DDR4;
Barnali Sarkarf7f01f72018-01-11 16:40:54 +0530107 break;
108 case MRC_DDR_TYPE_DDR3:
Elyes HAOUAS28114ae2018-11-14 17:51:00 +0100109 ddr_type = MEMORY_TYPE_DDR3;
Barnali Sarkarf7f01f72018-01-11 16:40:54 +0530110 break;
111 case MRC_DDR_TYPE_LPDDR3:
Elyes HAOUAS28114ae2018-11-14 17:51:00 +0100112 ddr_type = MEMORY_TYPE_LPDDR3;
Barnali Sarkarf7f01f72018-01-11 16:40:54 +0530113 break;
114 default:
Elyes HAOUAS28114ae2018-11-14 17:51:00 +0100115 ddr_type = MEMORY_TYPE_UNKNOWN;
Barnali Sarkarf7f01f72018-01-11 16:40:54 +0530116 break;
117 }
Christian Walterf9723222019-05-28 10:37:24 +0200118 u8 memProfNum = memory_info_hob->MemoryProfile;
Barnali Sarkarf7f01f72018-01-11 16:40:54 +0530119
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +0530120 /* Populate the DIMM information */
121 dimm_info_fill(dest_dimm,
122 src_dimm->DimmCapacity,
Barnali Sarkarf7f01f72018-01-11 16:40:54 +0530123 ddr_type,
Balaji Manigandan Bbd55c022017-09-22 14:27:56 +0530124 memory_info_hob->ConfiguredMemoryClockSpeed,
Francois Toguo993f68a2019-02-04 17:05:51 -0800125 src_dimm->RankInDimm,
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +0530126 channel_info->ChannelId,
127 src_dimm->DimmId,
128 (const char *)src_dimm->ModulePartNum,
129 sizeof(src_dimm->ModulePartNum),
Duncan Laurie46340d02019-05-17 14:57:31 -0600130 src_dimm->SpdSave + SPD_SAVE_OFFSET_SERIAL,
Christian Walterf9723222019-05-28 10:37:24 +0200131 memory_info_hob->DataWidth,
132 memory_info_hob->VddVoltage[memProfNum],
Duncan Laurie1a86cda2019-06-10 14:00:56 -0700133 memory_info_hob->EccSupport,
134 src_dimm->MfgId,
135 src_dimm->SpdModuleType);
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +0530136 index++;
137 }
138 }
139 mem_info->dimm_cnt = index;
140 printk(BIOS_DEBUG, "%d DIMMs found\n", mem_info->dimm_cnt);
141}
142
Aaron Durbin79f07412017-04-16 21:49:29 -0500143asmlinkage void car_stage_entry(void)
Rizwan Qureshi1222a732016-08-23 14:31:23 +0530144{
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530145 bool s3wake;
146 struct postcar_frame pcf;
147 uintptr_t top_of_ram;
148 struct chipset_power_state *ps;
149
Rizwan Qureshi1222a732016-08-23 14:31:23 +0530150 console_init();
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530151
152 /* Program MCHBAR, DMIBAR, GDXBAR and EDRAMBAR */
153 systemagent_early_init();
154
Shaunak Sahad3476802017-07-08 01:08:40 -0700155 ps = pmc_get_power_state();
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530156 timestamp_add_now(TS_START_ROMSTAGE);
Shaunak Sahad3476802017-07-08 01:08:40 -0700157 s3wake = pmc_fill_power_state(ps) == ACPI_S3;
Rizwan Qureshi1222a732016-08-23 14:31:23 +0530158 fsp_memory_init(s3wake);
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530159 pmc_set_disb();
Barnali Sarkarb7fa7fb2017-02-10 21:36:58 +0530160 if (!s3wake)
161 save_dimm_info();
Kyösti Mälkki6e2d0c12019-06-28 10:08:51 +0300162 if (postcar_frame_init(&pcf, 0))
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530163 die("Unable to initialize postcar frame.\n");
164
165 /*
166 * We need to make sure ramstage will be run cached. At this
167 * point exact location of ramstage in cbmem is not known.
168 * Instruct postcar to cache 16 megs under cbmem top which is
169 * a safe bet to cover ramstage.
170 */
171 top_of_ram = (uintptr_t) cbmem_top();
172 printk(BIOS_DEBUG, "top_of_ram = 0x%lx\n", top_of_ram);
173 top_of_ram -= 16*MiB;
174 postcar_frame_add_mtrr(&pcf, top_of_ram, 16*MiB, MTRR_TYPE_WRBACK);
175
Julius Wernercd49cce2019-03-05 16:53:33 -0800176 if (CONFIG(HAVE_SMI_HANDLER)) {
Kyösti Mälkki14222d82019-08-05 15:10:18 +0300177 uintptr_t smm_base;
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530178 size_t smm_size;
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530179
180 /*
181 * Cache the TSEG region at the top of ram. This region is
182 * not restricted to SMM mode until SMM has been relocated.
183 * By setting the region to cacheable it provides faster access
184 * when relocating the SMM handler as well as using the TSEG
185 * region for other purposes.
186 */
187 smm_region(&smm_base, &smm_size);
Kyösti Mälkki14222d82019-08-05 15:10:18 +0300188 postcar_frame_add_mtrr(&pcf, smm_base, smm_size,
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530189 MTRR_TYPE_WRBACK);
190 }
191
192 /* Cache the ROM as WP just below 4GiB. */
Nico Huber6ea67752018-05-27 14:37:52 +0200193 postcar_frame_add_romcache(&pcf, MTRR_TYPE_WRPROT);
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530194
Aaron Durbin79f07412017-04-16 21:49:29 -0500195 run_postcar_phase(&pcf);
Rizwan Qureshi1222a732016-08-23 14:31:23 +0530196}
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530197
Naresh G Solanki79239b72016-11-16 21:34:41 +0530198static void cpu_flex_override(FSP_M_CONFIG *m_cfg)
199{
200 msr_t flex_ratio;
201 m_cfg->CpuRatioOverride = 1;
202 /*
203 * Set cpuratio to that value set in bootblock, This will ensure FSPM
204 * knows the intended flex ratio.
205 */
206 flex_ratio = rdmsr(MSR_FLEX_RATIO);
207 m_cfg->CpuRatio = (flex_ratio.lo >> 8) & 0xff;
208}
209
Maxim Polyakov0220d1e2019-03-18 17:38:44 +0300210static void soc_peg_init_params(FSP_M_CONFIG *m_cfg,
211 FSP_M_TEST_CONFIG *m_t_cfg,
212 const struct soc_intel_skylake_config *config)
213{
214 const struct device *dev;
215 /*
216 * To enable or disable the corresponding PEG root port you need to
217 * add to the devicetree.cb:
218 *
219 * device pci 01.0 on end # enable PEG0 root port
220 * device pci 01.1 off end # do not configure PEG1
221 *
222 * If PEG port is not defined in the device tree, it will be disabled
223 * in FSP
224 */
Kyösti Mälkki71756c212019-07-12 13:10:19 +0300225 dev = pcidev_on_root(SA_DEV_SLOT_PEG, 0); /* PEG 0:1:0 */
Maxim Polyakov0220d1e2019-03-18 17:38:44 +0300226 if (!dev || !dev->enabled)
227 m_cfg->Peg0Enable = 0;
228 else if (dev->enabled) {
229 m_cfg->Peg0Enable = dev->enabled;
230 m_cfg->Peg0MaxLinkWidth = config->Peg0MaxLinkWidth;
231 /* Use maximum possible link speed */
232 m_cfg->Peg0MaxLinkSpeed = 0;
233 /* Power down unused lanes based on the max possible width */
234 m_cfg->Peg0PowerDownUnusedLanes = 1;
235 /* Set [Auto] for options to enable equalization methods */
236 m_t_cfg->Peg0Gen3EqPh2Enable = 2;
237 m_t_cfg->Peg0Gen3EqPh3Method = 0;
238 }
239
Kyösti Mälkki71756c212019-07-12 13:10:19 +0300240 dev = pcidev_on_root(SA_DEV_SLOT_PEG, 1); /* PEG 0:1:1 */
Maxim Polyakov0220d1e2019-03-18 17:38:44 +0300241 if (!dev || !dev->enabled)
242 m_cfg->Peg1Enable = 0;
243 else if (dev->enabled) {
244 m_cfg->Peg1Enable = dev->enabled;
245 m_cfg->Peg1MaxLinkWidth = config->Peg1MaxLinkWidth;
246 m_cfg->Peg1MaxLinkSpeed = 0;
247 m_cfg->Peg1PowerDownUnusedLanes = 1;
248 m_t_cfg->Peg1Gen3EqPh2Enable = 2;
249 m_t_cfg->Peg1Gen3EqPh3Method = 0;
250 }
251
Kyösti Mälkki71756c212019-07-12 13:10:19 +0300252 dev = pcidev_on_root(SA_DEV_SLOT_PEG, 2); /* PEG 0:1:2 */
Maxim Polyakov0220d1e2019-03-18 17:38:44 +0300253 if (!dev || !dev->enabled)
254 m_cfg->Peg2Enable = 0;
255 else if (dev->enabled) {
256 m_cfg->Peg2Enable = dev->enabled;
257 m_cfg->Peg2MaxLinkWidth = config->Peg2MaxLinkWidth;
258 m_cfg->Peg2MaxLinkSpeed = 0;
259 m_cfg->Peg2PowerDownUnusedLanes = 1;
260 m_t_cfg->Peg2Gen3EqPh2Enable = 2;
261 m_t_cfg->Peg2Gen3EqPh3Method = 0;
262 }
263}
264
Aamir Bohra63755122017-02-06 21:48:48 +0530265static void soc_memory_init_params(FSP_M_CONFIG *m_cfg,
266 const struct soc_intel_skylake_config *config)
Rizwan Qureshi1222a732016-08-23 14:31:23 +0530267{
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530268 int i;
269 uint32_t mask = 0;
270
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530271 m_cfg->MmioSize = 0x800; /* 2GB in MB */
272 m_cfg->TsegSize = CONFIG_SMM_TSEG_SIZE;
273 m_cfg->IedSize = CONFIG_IED_REGION_SIZE;
274 m_cfg->ProbelessTrace = config->ProbelessTrace;
Subrata Banik3214bc42017-07-10 13:17:09 +0530275 m_cfg->SaGv = config->SaGv;
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530276 m_cfg->UserBd = BOARD_TYPE_ULT_ULX;
277 m_cfg->RMT = config->Rmt;
Shaunak Sahaef250c42018-08-31 12:49:08 -0700278 m_cfg->CmdTriStateDis = config->CmdTriStateDis;
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530279 m_cfg->DdrFreqLimit = config->DdrFreqLimit;
Julius Wernercd49cce2019-03-05 16:53:33 -0800280 m_cfg->VmxEnable = CONFIG(ENABLE_VMX);
Robbie Zhange65affa2017-02-13 12:07:53 -0800281 m_cfg->PrmrrSize = config->PrmrrSize;
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530282 for (i = 0; i < ARRAY_SIZE(config->PcieRpEnable); i++) {
283 if (config->PcieRpEnable[i])
284 mask |= (1<<i);
285 }
286 m_cfg->PcieRpEnableMask = mask;
Naresh G Solanki79239b72016-11-16 21:34:41 +0530287
288 cpu_flex_override(m_cfg);
Nico Huber2afe4dc2017-09-19 09:36:03 +0200289
290 if (!config->ignore_vtd) {
291 m_cfg->PchHpetBdfValid = 1;
292 m_cfg->PchHpetBusNumber = 250;
293 m_cfg->PchHpetDeviceNumber = 15;
294 m_cfg->PchHpetFunctionNumber = 0;
295 }
Rizwan Qureshi1222a732016-08-23 14:31:23 +0530296}
297
Maxim Polyakovde08ae12019-03-21 18:50:42 +0300298static void soc_primary_gfx_config_params(FSP_M_CONFIG *m_cfg,
299 const struct soc_intel_skylake_config *config)
300{
301 const struct device *dev;
302
Kyösti Mälkki903b40a2019-07-03 07:25:59 +0300303 dev = pcidev_path_on_root(SA_DEVFN_IGD);
Maxim Polyakovde08ae12019-03-21 18:50:42 +0300304 if (!dev || !dev->enabled) {
305 /*
306 * If iGPU is disabled or not defined in the devicetree.cb,
307 * the FSP does not initialize this device
308 */
309 m_cfg->InternalGfx = 0;
Maxim Polyakov58066652019-04-25 12:32:15 +0300310 m_cfg->IgdDvmt50PreAlloc = 0;
Maxim Polyakovde08ae12019-03-21 18:50:42 +0300311 } else {
312 m_cfg->InternalGfx = 1;
Maxim Polyakov58066652019-04-25 12:32:15 +0300313 /*
314 * Set IGD stolen size to 64MB. The FBC hardware for skylake
315 * does not have access to the bios_reserved range so it always
316 * assumes 8MB is used and so the kernel will avoid the last
317 * 8MB of the stolen window. With the default stolen size of
318 * 32MB(-8MB) there is not enough space for FBC to work with
319 * a high resolution panel
320 */
321 m_cfg->IgdDvmt50PreAlloc = 2;
Maxim Polyakovde08ae12019-03-21 18:50:42 +0300322 }
Maxim Polyakov3ba38072019-05-06 12:07:24 +0300323 m_cfg->PrimaryDisplay = config->PrimaryDisplay;
Maxim Polyakovde08ae12019-03-21 18:50:42 +0300324}
325
Andrey Petrovf796c6e2016-11-18 14:57:51 -0800326void platform_fsp_memory_init_params_cb(FSPM_UPD *mupd, uint32_t version)
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530327{
Aamir Bohra63755122017-02-06 21:48:48 +0530328 const struct soc_intel_skylake_config *config;
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530329 FSP_M_CONFIG *m_cfg = &mupd->FspmConfig;
330 FSP_M_TEST_CONFIG *m_t_cfg = &mupd->FspmTestConfig;
Rizwan Qureshi1222a732016-08-23 14:31:23 +0530331
Kyösti Mälkki8950cfb2019-07-13 22:16:25 +0300332 config = config_of_path(PCH_DEVFN_LPC);
Aamir Bohra63755122017-02-06 21:48:48 +0530333
334 soc_memory_init_params(m_cfg, config);
Maxim Polyakov0220d1e2019-03-18 17:38:44 +0300335 soc_peg_init_params(m_cfg, m_t_cfg, config);
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530336
Duncan Lauriee0b57952017-08-10 16:27:48 -0700337 /* Skip creating Management Engine MBP HOB */
338 m_t_cfg->SkipMbpHob = 0x01;
339
Barnali Sarkar5bf42c62016-08-24 20:48:46 +0530340 /* Enable DMI Virtual Channel for ME */
341 m_t_cfg->DmiVcm = 0x01;
342
343 /* Enable Sending DID to ME */
344 m_t_cfg->SendDidMsg = 0x01;
345 m_t_cfg->DidInitStat = 0x01;
346
Aamir Bohra63755122017-02-06 21:48:48 +0530347 /* DCI and TraceHub configs */
348 m_t_cfg->PchDciEn = config->PchDciEn;
349 m_cfg->EnableTraceHub = config->EnableTraceHub;
350 m_cfg->TraceHubMemReg0Size = config->TraceHubMemReg0Size;
351 m_cfg->TraceHubMemReg1Size = config->TraceHubMemReg1Size;
352
Naresh G Solankiff48b3b2017-07-12 23:01:26 +0530353 /* Enable SMBus controller based on config */
354 m_cfg->SmbusEnable = config->SmbusEnable;
355
Maxim Polyakovde08ae12019-03-21 18:50:42 +0300356 /* Set primary graphic device */
357 soc_primary_gfx_config_params(m_cfg, config);
Maxim Polyakova12e9b02019-04-03 11:21:17 +0300358 m_t_cfg->SkipExtGfxScan = config->SkipExtGfxScan;
Maxim Polyakovde08ae12019-03-21 18:50:42 +0300359
Rizwan Qureshi1222a732016-08-23 14:31:23 +0530360 mainboard_memory_init_params(mupd);
361}
362
Pratik Prajapatiffc934d2016-11-18 14:36:34 -0800363void soc_update_memory_params_for_mma(FSP_M_CONFIG *memory_cfg,
364 struct mma_config_param *mma_cfg)
365{
366 /* Boot media is memory mapped for Skylake and Kabylake (SPI). */
Julius Wernercd49cce2019-03-05 16:53:33 -0800367 assert(CONFIG(BOOT_DEVICE_MEMORY_MAPPED));
Pratik Prajapatiffc934d2016-11-18 14:36:34 -0800368
369 memory_cfg->MmaTestContentPtr =
370 (uintptr_t) rdev_mmap_full(&mma_cfg->test_content);
371 memory_cfg->MmaTestContentSize =
372 region_device_sz(&mma_cfg->test_content);
373 memory_cfg->MmaTestConfigPtr =
374 (uintptr_t) rdev_mmap_full(&mma_cfg->test_param);
375 memory_cfg->MmaTestConfigSize =
376 region_device_sz(&mma_cfg->test_param);
377 memory_cfg->MrcFastBoot = 0x00;
378 memory_cfg->SaGv = 0x02;
379}
380
Aaron Durbin64031672018-04-21 14:45:32 -0600381__weak void mainboard_memory_init_params(FSPM_UPD *mupd)
Rizwan Qureshi1222a732016-08-23 14:31:23 +0530382{
383 /* Do nothing */
384}