xref: /rk3399_rockchip-uboot/arch/x86/include/asm/fsp/fsp_support.h (revision 4edde96111aefac63d6aaca6ba87a90d149e973e)
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