blob: 43b96c1c3480632af1e1f9b721c9a04b8ca5e2ae [file] [log] [blame]
Angel Ponsc3f58f62020-04-05 15:46:41 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -05002
Kyösti Mälkki81100bf2019-08-16 10:37:15 +03003#include <arch/romstage.h>
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -05004#include <cbmem.h>
Kyösti Mälkki81100bf2019-08-16 10:37:15 +03005#include <cpu/x86/mtrr.h>
Kyösti Mälkki568a42a2019-08-14 06:48:28 +03006#include <cpu/x86/smm.h>
Julius Werner18ea2d32014-10-07 16:42:17 -07007#include <soc/iosf.h>
Aaron Durbin7837be62013-10-21 22:32:00 -05008
Kyösti Mälkki568a42a2019-08-14 06:48:28 +03009static uintptr_t smm_region_start(void)
Aaron Durbin7837be62013-10-21 22:32:00 -050010{
Kyösti Mälkkif1e3c762014-12-22 12:28:07 +020011 return (iosf_bunit_read(BUNIT_SMRRL) << 20);
Aaron Durbin7837be62013-10-21 22:32:00 -050012}
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050013
Kyösti Mälkki568a42a2019-08-14 06:48:28 +030014static size_t smm_region_size(void)
15{
16 return CONFIG_SMM_TSEG_SIZE;
17}
18
Elyes Haouas799c3212022-11-09 14:00:44 +010019uintptr_t cbmem_top_chipset(void)
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050020{
Elyes Haouas799c3212022-11-09 14:00:44 +010021 return smm_region_start();
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050022}
Kyösti Mälkki26a682c2019-08-02 06:13:22 +030023
Kyösti Mälkki568a42a2019-08-14 06:48:28 +030024void smm_region(uintptr_t *start, size_t *size)
Kyösti Mälkki26a682c2019-08-02 06:13:22 +030025{
Kyösti Mälkki568a42a2019-08-14 06:48:28 +030026 *start = (iosf_bunit_read(BUNIT_SMRRL) & 0xFFFF) << 20;
27 *size = smm_region_size();
Kyösti Mälkki26a682c2019-08-02 06:13:22 +030028}
Kyösti Mälkki81100bf2019-08-16 10:37:15 +030029
30void fill_postcar_frame(struct postcar_frame *pcf)
31{
32 uintptr_t top_of_ram;
33
34 /* Cache at least 8 MiB below the top of ram, and at most 8 MiB
35 * above top of the ram. This satisfies MTRR alignment requirement
36 * with different TSEG size configurations.
37 */
38 top_of_ram = ALIGN_DOWN((uintptr_t)cbmem_top(), 8*MiB);
39 postcar_frame_add_mtrr(pcf, top_of_ram - 8*MiB, 16*MiB,
40 MTRR_TYPE_WRBACK);
41}