11021af4dSSimon Glass /* 21021af4dSSimon Glass * Copyright (C) 2013, Intel Corporation 31021af4dSSimon Glass * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com> 41021af4dSSimon Glass * 51021af4dSSimon Glass * SPDX-License-Identifier: Intel 61021af4dSSimon Glass */ 71021af4dSSimon Glass 81021af4dSSimon Glass #ifndef __FSP_SUPPORT_H__ 91021af4dSSimon Glass #define __FSP_SUPPORT_H__ 101021af4dSSimon Glass 111021af4dSSimon Glass #include "fsp_types.h" 121021af4dSSimon Glass #include "fsp_fv.h" 131021af4dSSimon Glass #include "fsp_ffs.h" 141021af4dSSimon Glass #include "fsp_api.h" 151021af4dSSimon Glass #include "fsp_hob.h" 161021af4dSSimon Glass #include "fsp_infoheader.h" 171021af4dSSimon Glass #include "fsp_bootmode.h" 181021af4dSSimon Glass #include <asm/arch/fsp/fsp_vpd.h> 19cb379a34SBin Meng #include <asm/arch/fsp/fsp_configs.h> 201021af4dSSimon Glass 211021af4dSSimon Glass #define FSP_LOWMEM_BASE 0x100000UL 221021af4dSSimon Glass #define FSP_HIGHMEM_BASE 0x100000000ULL 2382196cf3SSimon Glass #define UPD_TERMINATOR 0x55AA 2482196cf3SSimon Glass 251021af4dSSimon Glass 261021af4dSSimon Glass /** 271021af4dSSimon Glass * FSP Continuation assembly helper routine 281021af4dSSimon Glass * 291021af4dSSimon Glass * This routine jumps to the C version of FSP continuation function 301021af4dSSimon Glass */ 311021af4dSSimon Glass void asm_continuation(void); 321021af4dSSimon Glass 331021af4dSSimon Glass /** 341021af4dSSimon Glass * FSP initialization complete 351021af4dSSimon Glass * 361021af4dSSimon Glass * This is the function that indicates FSP initialization is complete and jumps 371021af4dSSimon Glass * back to the bootloader with HOB list pointer as the parameter. 381021af4dSSimon Glass * 391021af4dSSimon Glass * @hob_list: HOB list pointer 401021af4dSSimon Glass */ 411021af4dSSimon Glass void fsp_init_done(void *hob_list); 421021af4dSSimon Glass 431021af4dSSimon Glass /** 441021af4dSSimon Glass * FSP Continuation function 451021af4dSSimon Glass * 461021af4dSSimon Glass * @status: Always 0 471021af4dSSimon Glass * @hob_list: HOB list pointer 481021af4dSSimon Glass * 491021af4dSSimon Glass * @retval: Never returns 501021af4dSSimon Glass */ 51aa024464SBin Meng void fsp_continue(u32 status, void *hob_list); 521021af4dSSimon Glass 531021af4dSSimon Glass /** 541021af4dSSimon Glass * Find FSP header offset in FSP image 551021af4dSSimon Glass * 561021af4dSSimon Glass * @retval: the offset of FSP header. If signature is invalid, returns 0. 571021af4dSSimon Glass */ 5882196cf3SSimon Glass struct fsp_header *find_fsp_header(void); 591021af4dSSimon Glass 601021af4dSSimon Glass /** 611021af4dSSimon Glass * FSP initialization wrapper function. 621021af4dSSimon Glass * 631021af4dSSimon Glass * @stack_top: bootloader stack top address 641021af4dSSimon Glass * @boot_mode: boot mode defined in fsp_bootmode.h 651021af4dSSimon Glass * @nvs_buf: Non-volatile memory buffer pointer 661021af4dSSimon Glass */ 671021af4dSSimon Glass void fsp_init(u32 stack_top, u32 boot_mode, void *nvs_buf); 681021af4dSSimon Glass 691021af4dSSimon Glass /** 701021af4dSSimon Glass * FSP notification wrapper function 711021af4dSSimon Glass * 721021af4dSSimon Glass * @fsp_hdr: Pointer to FSP information header 731021af4dSSimon Glass * @phase: FSP initialization phase defined in enum fsp_phase 741021af4dSSimon Glass * 751021af4dSSimon Glass * @retval: compatible status code with EFI_STATUS defined in PI spec 761021af4dSSimon Glass */ 771021af4dSSimon Glass u32 fsp_notify(struct fsp_header *fsp_hdr, u32 phase); 781021af4dSSimon Glass 791021af4dSSimon Glass /** 801021af4dSSimon Glass * This function retrieves the top of usable low memory. 811021af4dSSimon Glass * 821021af4dSSimon Glass * @hob_list: A HOB list pointer. 831021af4dSSimon Glass * 841021af4dSSimon Glass * @retval: Usable low memory top. 851021af4dSSimon Glass */ 861021af4dSSimon Glass u32 fsp_get_usable_lowmem_top(const void *hob_list); 871021af4dSSimon Glass 881021af4dSSimon Glass /** 891021af4dSSimon Glass * This function retrieves the top of usable high memory. 901021af4dSSimon Glass * 911021af4dSSimon Glass * @hob_list: A HOB list pointer. 921021af4dSSimon Glass * 931021af4dSSimon Glass * @retval: Usable high memory top. 941021af4dSSimon Glass */ 951021af4dSSimon Glass u64 fsp_get_usable_highmem_top(const void *hob_list); 961021af4dSSimon Glass 971021af4dSSimon Glass /** 981021af4dSSimon Glass * This function retrieves a special reserved memory region. 991021af4dSSimon Glass * 1001021af4dSSimon Glass * @hob_list: A HOB list pointer. 1011021af4dSSimon Glass * @len: A pointer to the GUID HOB data buffer length. 1021021af4dSSimon Glass * If the GUID HOB is located, the length will be updated. 1031021af4dSSimon Glass * @guid: A pointer to the owner guild. 1041021af4dSSimon Glass * 1051021af4dSSimon Glass * @retval: Reserved region start address. 1061021af4dSSimon Glass * 0 if this region does not exist. 1071021af4dSSimon Glass */ 1081021af4dSSimon Glass u64 fsp_get_reserved_mem_from_guid(const void *hob_list, 1091021af4dSSimon Glass u64 *len, struct efi_guid *guid); 1101021af4dSSimon Glass 1111021af4dSSimon Glass /** 1121021af4dSSimon Glass * This function retrieves the FSP reserved normal memory. 1131021af4dSSimon Glass * 1141021af4dSSimon Glass * @hob_list: A HOB list pointer. 1151021af4dSSimon Glass * @len: A pointer to the FSP reserved memory length buffer. 1161021af4dSSimon Glass * If the GUID HOB is located, the length will be updated. 1171021af4dSSimon Glass * @retval: FSP reserved memory base 1181021af4dSSimon Glass * 0 if this region does not exist. 1191021af4dSSimon Glass */ 1201021af4dSSimon Glass u32 fsp_get_fsp_reserved_mem(const void *hob_list, u32 *len); 1211021af4dSSimon Glass 1221021af4dSSimon Glass /** 1231021af4dSSimon Glass * This function retrieves the TSEG reserved normal memory. 1241021af4dSSimon Glass * 1251021af4dSSimon Glass * @hob_list: A HOB list pointer. 1261021af4dSSimon Glass * @len: A pointer to the TSEG reserved memory length buffer. 1271021af4dSSimon Glass * If the GUID HOB is located, the length will be updated. 1281021af4dSSimon Glass * 1291021af4dSSimon Glass * @retval NULL: Failed to find the TSEG reserved memory. 1301021af4dSSimon Glass * @retval others: TSEG reserved memory base. 1311021af4dSSimon Glass */ 1321021af4dSSimon Glass u32 fsp_get_tseg_reserved_mem(const void *hob_list, u32 *len); 1331021af4dSSimon Glass 1341021af4dSSimon Glass /** 1351021af4dSSimon Glass * Returns the next instance of a HOB type from the starting HOB. 1361021af4dSSimon Glass * 1371021af4dSSimon Glass * @type: HOB type to search 1381021af4dSSimon Glass * @hob_list: A pointer to the HOB list 1391021af4dSSimon Glass * 1401021af4dSSimon Glass * @retval: A HOB object with matching type; Otherwise NULL. 1411021af4dSSimon Glass */ 1421021af4dSSimon Glass const struct hob_header *fsp_get_next_hob(uint type, const void *hob_list); 1431021af4dSSimon Glass 1441021af4dSSimon Glass /** 1451021af4dSSimon Glass * Returns the next instance of the matched GUID HOB from the starting HOB. 1461021af4dSSimon Glass * 1471021af4dSSimon Glass * @guid: GUID to search 1481021af4dSSimon Glass * @hob_list: A pointer to the HOB list 1491021af4dSSimon Glass * 1501021af4dSSimon Glass * @retval: A HOB object with matching GUID; Otherwise NULL. 1511021af4dSSimon Glass */ 1521021af4dSSimon Glass const struct hob_header *fsp_get_next_guid_hob(const struct efi_guid *guid, 1531021af4dSSimon Glass const void *hob_list); 1541021af4dSSimon Glass 1551021af4dSSimon Glass /** 1561021af4dSSimon Glass * This function retrieves a GUID HOB data buffer and size. 1571021af4dSSimon Glass * 1581021af4dSSimon Glass * @hob_list: A HOB list pointer. 1591021af4dSSimon Glass * @len: A pointer to the GUID HOB data buffer length. 1601021af4dSSimon Glass * If the GUID HOB is located, the length will be updated. 1611021af4dSSimon Glass * @guid A pointer to HOB GUID. 1621021af4dSSimon Glass * 1631021af4dSSimon Glass * @retval NULL: Failed to find the GUID HOB. 1641021af4dSSimon Glass * @retval others: GUID HOB data buffer pointer. 1651021af4dSSimon Glass */ 1661021af4dSSimon Glass void *fsp_get_guid_hob_data(const void *hob_list, u32 *len, 1671021af4dSSimon Glass struct efi_guid *guid); 1681021af4dSSimon Glass 1691021af4dSSimon Glass /** 1701021af4dSSimon Glass * This function retrieves FSP Non-volatile Storage HOB buffer and size. 1711021af4dSSimon Glass * 1721021af4dSSimon Glass * @hob_list: A HOB list pointer. 1731021af4dSSimon Glass * @len: A pointer to the NVS data buffer length. 1741021af4dSSimon Glass * If the HOB is located, the length will be updated. 1751021af4dSSimon Glass * 1761021af4dSSimon Glass * @retval NULL: Failed to find the NVS HOB. 1771021af4dSSimon Glass * @retval others: FSP NVS data buffer pointer. 1781021af4dSSimon Glass */ 1791021af4dSSimon Glass void *fsp_get_nvs_data(const void *hob_list, u32 *len); 1801021af4dSSimon Glass 1811021af4dSSimon Glass /** 1821021af4dSSimon Glass * This function retrieves Bootloader temporary stack buffer and size. 1831021af4dSSimon Glass * 1841021af4dSSimon Glass * @hob_list: A HOB list pointer. 1851021af4dSSimon Glass * @len: A pointer to the bootloader temporary stack length. 1861021af4dSSimon Glass * If the HOB is located, the length will be updated. 1871021af4dSSimon Glass * 1881021af4dSSimon Glass * @retval NULL: Failed to find the bootloader temporary stack HOB. 1891021af4dSSimon Glass * @retval others: Bootloader temporary stackbuffer pointer. 1901021af4dSSimon Glass */ 1911021af4dSSimon Glass void *fsp_get_bootloader_tmp_mem(const void *hob_list, u32 *len); 1921021af4dSSimon Glass 1931021af4dSSimon Glass /** 19481f84aa6SBin Meng * This function overrides the default configurations of FSP. 1951021af4dSSimon Glass * 19681f84aa6SBin Meng * @config: A pointer to the FSP configuration data structure 197*214feec1SBin Meng * @rt_buf: A pointer to the FSP runtime buffer data structure 1981021af4dSSimon Glass * 1991021af4dSSimon Glass * @return: None 2001021af4dSSimon Glass */ 201*214feec1SBin Meng void update_fsp_configs(struct fsp_config_data *config, 202*214feec1SBin Meng struct fspinit_rtbuf *rt_buf); 2031021af4dSSimon Glass 204412400abSSimon Glass /** 205412400abSSimon Glass * fsp_init_phase_pci() - Tell the FSP that we have completed PCI init 206412400abSSimon Glass * 207412400abSSimon Glass * @return 0 if OK, -EPERM if the FSP gave an error. 208412400abSSimon Glass */ 209412400abSSimon Glass int fsp_init_phase_pci(void); 210412400abSSimon Glass 2111021af4dSSimon Glass #endif 212