blob: bdb76c12bb8199924d610136fb15694ab5b7266e [file] [log] [blame]
Angel Pons4b429832020-04-02 23:48:50 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Kyösti Mälkki191d2212014-06-15 12:06:12 +03002
3#define __SIMPLE_DEVICE__
4
Kyösti Mälkkia963acd2019-08-16 20:34:25 +03005#include <arch/romstage.h>
Kyösti Mälkkif1b58b72019-03-01 13:43:02 +02006#include <device/pci_ops.h>
Kyösti Mälkki191d2212014-06-15 12:06:12 +03007#include <cbmem.h>
Kyösti Mälkki2c3fd492016-07-22 22:52:14 +03008#include <cpu/x86/mtrr.h>
Kyösti Mälkkid53fd702019-08-14 06:25:55 +03009#include <cpu/x86/smm.h>
Angel Pons11ca2ae2020-10-01 20:45:27 +020010#include <types.h>
11
Angel Pons95de2312020-02-17 13:08:53 +010012#include "ironlake.h"
Kyösti Mälkki191d2212014-06-15 12:06:12 +030013
Kyösti Mälkkid53fd702019-08-14 06:25:55 +030014static uintptr_t northbridge_get_tseg_base(void)
Arthur Heymans97c7c6b2018-05-15 16:45:21 +020015{
Angel Ponsb70c66b2020-10-01 21:36:32 +020016 /* Base of TSEG is top of usable DRAM */
17 return pci_read_config32(PCI_DEV(0, 0, 0), TSEG);
Arthur Heymans97c7c6b2018-05-15 16:45:21 +020018}
19
Kyösti Mälkkid53fd702019-08-14 06:25:55 +030020static size_t northbridge_get_tseg_size(void)
Kyösti Mälkkif6c20682019-08-02 06:14:50 +030021{
22 return CONFIG_SMM_TSEG_SIZE;
23}
24
Elyes Haouas799c3212022-11-09 14:00:44 +010025uintptr_t cbmem_top_chipset(void)
Kyösti Mälkkif1e3c762014-12-22 12:28:07 +020026{
Elyes Haouas799c3212022-11-09 14:00:44 +010027 return northbridge_get_tseg_base();
Kyösti Mälkki191d2212014-06-15 12:06:12 +030028}
Kyösti Mälkkia4ffe9d2016-06-27 13:24:11 +030029
Kyösti Mälkkid53fd702019-08-14 06:25:55 +030030void smm_region(uintptr_t *start, size_t *size)
Kyösti Mälkkif6c20682019-08-02 06:14:50 +030031{
Kyösti Mälkkid53fd702019-08-14 06:25:55 +030032 *start = northbridge_get_tseg_base();
33 *size = northbridge_get_tseg_size();
Kyösti Mälkkif6c20682019-08-02 06:14:50 +030034}
35
Kyösti Mälkki5bc641a2019-08-09 09:37:49 +030036void fill_postcar_frame(struct postcar_frame *pcf)
Kyösti Mälkkia4ffe9d2016-06-27 13:24:11 +030037{
Kyösti Mälkki2c3fd492016-07-22 22:52:14 +030038 uintptr_t top_of_ram;
39
Kyösti Mälkki2c3fd492016-07-22 22:52:14 +030040 /* Cache at least 8 MiB below the top of ram, and at most 8 MiB
41 * above top of the ram. This satisfies MTRR alignment requirement
42 * with different TSEG size configurations.
43 */
44 top_of_ram = ALIGN_DOWN((uintptr_t)cbmem_top(), 8*MiB);
Kyösti Mälkki5bc641a2019-08-09 09:37:49 +030045 postcar_frame_add_mtrr(pcf, top_of_ram - 8*MiB, 8*MiB, MTRR_TYPE_WRBACK);
46 postcar_frame_add_mtrr(pcf, top_of_ram, 8*MiB, MTRR_TYPE_WRBACK);
Kyösti Mälkkia4ffe9d2016-06-27 13:24:11 +030047}