summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/soc/intel/common/block/fast_spi/Makefile.inc20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/soc/intel/common/block/fast_spi/Makefile.inc b/src/soc/intel/common/block/fast_spi/Makefile.inc
index eeaae51d75..4fe6163773 100644
--- a/src/soc/intel/common/block/fast_spi/Makefile.inc
+++ b/src/soc/intel/common/block/fast_spi/Makefile.inc
@@ -32,22 +32,34 @@ postcar-y += mmap_boot.c
ramstage-y += mmap_boot.c
smm-y += mmap_boot.c
-# Check to ensure that no sections in the FMAP cross 16MiB boundary if
-# the platform supports split decode windows for BIOS region greater
-# than 16MiB.
+# When using extended BIOS window, no sub-region within the BIOS region must
+# cross 16MiB boundary from the end of the BIOS region. This is because the
+# top 16MiB of the BIOS region are decoded by the standard window from
+# (4G - 16M) to 4G. There is no standard section name that identifies the BIOS
+# region in flashmap. This check assumes that BIOS region is placed at the top
+# of SPI flash and hence calculates the boundary as flash_size - 16M. If any
+# region within the SPI flash crosses this boundary, then the check complains
+# and exits.
$(call add_intermediate, check-fmap-16mib-crossing)
check-fmap-16mib-crossing: $(obj)/fmap_config.h
fmap_get() { awk "/$$1/ { print \$$NF }" < $<; }; \
\
flash_offset=$$(fmap_get FMAP_SECTION_FLASH_START); \
+ flash_size=$$(fmap_get FMAP_SECTION_FLASH_SIZE); \
+ if [ $$((flash_size)) -le $$((0x1000000)) ]; then \
+ exit; \
+ fi; \
+ bios_16M_boundary=$$((flash_size-0x1000000)); \
for x in $$(grep "FMAP_TERMINAL_SECTIONS" < $< | cut -d\" -f2); \
do \
start=$$(fmap_get "FMAP_SECTION_$${x}_START"); \
size=$$(fmap_get "FMAP_SECTION_$${x}_SIZE"); \
start=$$((start-flash_offset)); \
end=$$((start+size-1)); \
- if [ $$start -lt 16777216 ] && [ $$end -ge 16777216 ]; then \
+ if [ $$((start)) -lt $$((bios_16M_boundary)) ] && \
+ [ $$((end)) -ge $$((bios_16M_boundary)) ]; \
+ then \
echo "ERROR: $$x crosses 16MiB boundary"; \
fail=1; \
break; \