diff options
author | Arthur Heymans <arthur@aheymans.xyz> | 2018-01-26 11:50:04 +0100 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2018-06-07 06:40:55 +0000 |
commit | f6d14773b24ef918bdafb1108ccbd87aa742fada (patch) | |
tree | 413d91d025d7a4870e8368160198c1e22748a342 /src/northbridge/intel/i945/northbridge.c | |
parent | 20c893e82c0cc4e9a44da048fdd5ba75ad9f547c (diff) | |
download | coreboot-f6d14773b24ef918bdafb1108ccbd87aa742fada.tar.xz |
nb/intel/i945: Add a common function to compute TSEG size
This adds a common function to decode the TSEG size from the ESMRAM
register. This will come in handy when SMM in TSEG is implemented.
This function is used both in romstage and in ramstage.
Change-Id: I4e163598752fb6cd036aec229fce439ebad74def
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/23448
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/northbridge/intel/i945/northbridge.c')
-rw-r--r-- | src/northbridge/intel/i945/northbridge.c | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/src/northbridge/intel/i945/northbridge.c b/src/northbridge/intel/i945/northbridge.c index eb8e321f31..b8a225562b 100644 --- a/src/northbridge/intel/i945/northbridge.c +++ b/src/northbridge/intel/i945/northbridge.c @@ -59,8 +59,8 @@ static int get_pcie_bar(u32 *base) static void pci_domain_set_resources(struct device *dev) { - uint32_t pci_tolm; - uint8_t tolud, reg8; + uint32_t pci_tolm, tseg_sizek; + uint8_t tolud; uint16_t reg16; unsigned long long tomk, tomk_stolen; uint64_t uma_memory_base = 0, uma_memory_size = 0; @@ -95,31 +95,12 @@ static void pci_domain_set_resources(struct device *dev) uma_memory_size = uma_size * 1024ULL; } - reg8 = pci_read_config8(dev_find_slot(0, PCI_DEVFN(0, 0)), ESMRAMC); - if (reg8 & 1) { - int tseg_size = 0; - printk(BIOS_DEBUG, "TSEG decoded, subtracting "); - reg8 >>= 1; - reg8 &= 3; - switch (reg8) { - case 0: - tseg_size = 1024; - break; /* TSEG = 1M */ - case 1: - tseg_size = 2048; - break; /* TSEG = 2M */ - case 2: - tseg_size = 8192; - break; /* TSEG = 8M */ - } - - printk(BIOS_DEBUG, "%dM\n", tseg_size >> 10); - tomk_stolen -= tseg_size; - - /* For reserving TSEG memory in the memory map */ - tseg_memory_base = tomk_stolen * 1024ULL; - tseg_memory_size = tseg_size * 1024ULL; - } + tseg_sizek = decode_tseg_size(pci_read_config8(dev_find_slot(0, + PCI_DEVFN(0, 0)), ESMRAMC)) >> 10; + printk(BIOS_DEBUG, "TSEG decoded, subtracting %dM\n", tseg_sizek >> 10); + tomk_stolen -= tseg_sizek; + tseg_memory_base = tomk_stolen * 1024ULL; + tseg_memory_size = tseg_sizek * 1024ULL; /* The following needs to be 2 lines, otherwise the second * number is always 0 |