## @file
#
# Copyright (C) 2022-2025 Advanced Micro Devices, Inc. All rights reserved.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
##############################################################################
#
# Turin reference board - 2 SPI FLash devices accessible by x86 (selected by DIP-switch):
# 1) 32MB Flash with 10-pin header next to the VGA connector.
# 2) 64MB Flash with 10-pin header at 90-degrees from VGA connector, and also accessible by the BMC.
#
################################################################################
################################################################################
#
# BIOS image layout
#
################################################################################
### Flash layout, 16MB and 32MB iamge size with ROM3_FLASH_ENABLE = FALSE
################################################################################
# Start End Size FV Name
################################################################################
# 0x00000000 0x0001ffff 0x00020000 None Unused
# 0x00020000 0x00020fff 0x00001000 DATA EFS
# 0x00021000 0x0005efff 0x0003e000 DATA NVRAM
# 0x0005f000 0x0005ffff 0x00001000 DATA NVRAM FTW
# 0x00060000 0x000a0fff 0x00041000 None NVRAM Reserved
# 0x000a1000 0x002e2fff 0x00242000 None PSPDirectory
# 0x002e3000 0x0033efff 0x0005c000 None BIOSDirectory
# 0x0033f000 0x005adfff 0x0026f000 None PSPDirectory
# 0x005ae000 0x006fffff 0x00152000 None BIOSDirectory
# 0x00700000 0x007d7fff 0x000d8000 FV FVADVANCED
# 0x007d8000 0x0085ffff 0x00088000 FV FVADVANCEDSECURITY
# 0x00860000 0x0090dfff 0x000ae000 FV FVOSBOOT
# 0x0090e000 0x00bfbfff 0x002ee000 FV FVUEFIBOOT
# 0x00bfc000 0x00c27fff 0x0002c000 FV FVSECURITY
# 0x00c28000 0x00c37fff 0x00010000 FV FVPOSTMEMORY
# 0x00c38000 0x00c3ffff 0x00008000 FV FVADVANCEDPREMEMORY
# 0x00c40000 0x00ffffff 0x003c0000 FV FVPREMEMORY
################################################################################
# Extra padding for 32MB image size
# 0x01000000 0x01ffffff 0x01000000 None unused
################################################################################
### Flash layout, 32MB with ROM3_FLASH_ENABLE = TRUE
################################################################################
# Start End Size FV Name
################################################################################
# 0x00000000 0x0001ffff 0x00020000 None Unused
# 0x00020000 0x00020fff 0x00001000 DATA EFS
# 0x00021000 0x0005efff 0x0003e000 DATA NVRAM
# 0x0005f000 0x0005ffff 0x00001000 DATA NVRAM FTW
# 0x00060000 0x000a0fff 0x00041000 None NVRAM Reserved
# 0x000a1000 0x002e2fff 0x00242000 None PSPDirectory
# 0x002e3000 0x0033efff 0x0005c000 None BIOSDirectory
# 0x0033f000 0x005adfff 0x0026f000 None PSPDirectory
# 0x005ae000 0x006fffff 0x00152000 None BIOSDirectory
# 0x00bec000 0x00c17fff 0x0002c000 FV FVSECURITY
# 0x00c18000 0x00c37fff 0x00020000 FV FVPOSTMEMORY
# 0x00c38000 0x00c3ffff 0x00008000 FV FVADVANCEDPREMEMORY
# 0x00c40000 0x00ffffff 0x003c0000 FV FVPREMEMORY
# 0x01000000 0x010d7fff 0x000d8000 FV FVADVANCED
# 0x010d8000 0x0115ffff 0x00088000 FV FVADVANCEDSECURITY
# 0x01160000 0x0120dfff 0x000ae000 FV FVOSBOOT
# 0x0120e000 0x014fbfff 0x002ee000 FV FVUEFIBOOT
# 0x01fff000 0x01ffffff 0x00001000 None Unused
################################################################################
DEFINE ROM2_FLASH_BASE = 0xFF000000
DEFINE ROM2_FLASH_SIZE = 0x01000000
DEFINE ROM3_FLASH_SIZE = 0x02000000
DEFINE SPI_BLOCK_SIZE = 0x1000
!ifndef BUILD_16MB_IMAGE
DEFINE BUILD_16MB_IMAGE = FALSE
!endif
!ifndef ROM3_FLASH_ENABLE
DEFINE ROM3_FLASH_ENABLE = FALSE
!endif
!ifndef ROM3_FLASH_BASE
DEFINE ROM3_FLASH_BASE = 0xFD02000000
!endif
!if $(BUILD_16MB_IMAGE) == TRUE
DEFINE SPI_NUM_BLOCKS = 0x1000
!else
DEFINE SPI_NUM_BLOCKS = 0x2000
!endif
!if ($(ROM3_FLASH_ENABLE) == TRUE) && ($(BUILD_16MB_IMAGE) == TRUE)
!error "ROM3 cannot be enabled on 16MB image"
!endif
!ifndef FV_PRE_MEMORY_SIZE
# requires changes in PspData also
DEFINE FV_PRE_MEMORY_SIZE = 0x003C0000
!endif
!ifndef FV_ADVANCED_PRE_MEMORY_SIZE
DEFINE FV_ADVANCED_PRE_MEMORY_SIZE = 0x00008000
!endif
!ifndef FV_POST_MEMORY_SIZE
!if ($(ROM3_FLASH_ENABLE) == TRUE)
# Need extra space for DxeMain
DEFINE FV_POST_MEMORY_SIZE = 0x00020000
!else
DEFINE FV_POST_MEMORY_SIZE = 0x00010000
!endif
!endif
!ifndef FV_SECURITY_SIZE
DEFINE FV_SECURITY_SIZE = 0x0002C000
!endif
!ifndef FV_UEFI_BOOT_SIZE
DEFINE FV_UEFI_BOOT_SIZE = 0x002EE000
!endif
!ifndef FV_OS_BOOT_SIZE
DEFINE FV_OS_BOOT_SIZE = 0x000AE000
!endif
!ifndef FV_ADVANCED_SECURITY_SIZE
DEFINE FV_ADVANCED_SECURITY_SIZE = 0x00088000
!endif
!ifndef FV_ADVANCED_SIZE
DEFINE FV_ADVANCED_SIZE = 0x000D8000
!endif
DEFINE FV_FW_SIG_OFFSET = 0x00020000
DEFINE FV_FW_SIG_SIZE = 0x00001000
DEFINE NVRAM_AREA_VAR_OFFSET = 0x00021000
DEFINE NVRAM_AREA_VAR_SIZE = 0x0003E000
DEFINE NVRAM_AREA_SIZE = 0x00080000
DEFINE FTW_WORKING_OFFSET = $(NVRAM_AREA_VAR_OFFSET) + $(NVRAM_AREA_VAR_SIZE)
DEFINE FTW_WORKING_SIZE = $(SPI_BLOCK_SIZE)
DEFINE FTW_SPARE_OFFSET = $(FTW_WORKING_OFFSET) + $(FTW_WORKING_SIZE)
DEFINE FTW_SPARE_SIZE = $(NVRAM_AREA_SIZE) - $(NVRAM_AREA_VAR_SIZE) - $(FTW_WORKING_SIZE)
# NOTE:
#
# BOOT_FV_BASE value should match with the PspData.xml ResetImage address
# e.g.
#
#
#
#
# Also note that C40000 from 0x76C40000 came from PcdFlashFvPreMemoryOffset
# if PcdFlashFvPreMemoryOffset gets changed then the below value should also
# need to be change.
#
!ifndef BOOT_FV_BASE
DEFINE BOOT_FV_BASE = 0x76C40000
!endif
SET gEfiAmdAgesaPkgTokenSpaceGuid.PcdAgesaFlashNvStorageBlockSize = $(SPI_BLOCK_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaBaseAddress = 0xFF000000
SET gEfiAmdAgesaPkgTokenSpaceGuid.PcdAgesaFlashAreaBaseAddress = gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaBaseAddress
# SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageOffset = 0x00000000
# SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageSize = 0x00040000
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset = $(NVRAM_AREA_VAR_OFFSET)
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize = $(NVRAM_AREA_VAR_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingOffset = $(FTW_WORKING_OFFSET)
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize = $(FTW_WORKING_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareOffset = $(FTW_SPARE_OFFSET)
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize = $(FTW_SPARE_SIZE)
#
# FV offset and size assignment
#
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemorySize = $(FV_PRE_MEMORY_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemoryOffset = ($(ROM2_FLASH_SIZE) - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemorySize)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedPreMemorySize = $(FV_ADVANCED_PRE_MEMORY_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedPreMemoryOffset = (gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPreMemoryOffset - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedPreMemorySize)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemorySize = $(FV_POST_MEMORY_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemoryOffset = (gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedPreMemoryOffset - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemorySize)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize = $(FV_SECURITY_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset = gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemoryOffset - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize
!if $(ROM3_FLASH_ENABLE) == FALSE
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize = $(FV_UEFI_BOOT_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset = (gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize = $(FV_OS_BOOT_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset = (gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize)
SET gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecuritySize = $(FV_ADVANCED_SECURITY_SIZE)
SET gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecurityOffset = (gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset - gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecuritySize)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize = $(FV_ADVANCED_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset = (gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecurityOffset - gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize)
# NOTE:
# for ROM3_FLASH_ENABLE disabled BIOS image max address (PcdFlashFvAdvancedSize + PcdFlashFvAdvancedOffset)
# should not overlap with BIOS DIR2 offset + size in PspData.xml
# e.g
#
#
!endif
!if $(ROM3_FLASH_ENABLE) == TRUE
# if ROM3 is enabled then continue the offset update
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset = $(ROM2_FLASH_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize = $(FV_ADVANCED_SIZE)
SET gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecurityOffset = (gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize)
SET gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecuritySize = $(FV_ADVANCED_SECURITY_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset = (gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecurityOffset + gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecuritySize)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize = $(FV_OS_BOOT_SIZE)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset = (gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize)
SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize = $(FV_UEFI_BOOT_SIZE)
# NOTE:
# for ROM3_FLASH_ENABLE enabled BIOS image max address (PcdFlashFvSecuritySize + PcdFlashFvSecurityOffset)
# should not overlap with BIOS DIR2 offset + size in PspData.xml
# e.g
#
!endif
SET gAmdMinBoardPkgTokenSpaceGuid.PcdBootFvBase = $(BOOT_FV_BASE)
!if $(ROM3_FLASH_ENABLE) == TRUE
SET gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedBase = $(ROM3_FLASH_BASE)
SET gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecurityBase = (gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize)
SET gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvOsBootBase = (gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecurityBase + gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvAdvancedSecuritySize)
SET gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvUefiBootBase = (gAmdMinBoardPkgTokenSpaceGuid.PcdAmdFlashFvOsBootBase + gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize)
!endif