1 /* SPDX-License-Identifier: Intel */ 2 /* 3 * Copyright (C) 2015-2016 Intel Corp. 4 * (Written by Alexandru Gagniuc <alexandrux.gagniuc@intel.com> for Intel Corp.) 5 * Mostly taken from coreboot 6 */ 7 8 #ifndef __ASM_FSP_INTERNAL_H 9 #define __ASM_FSP_INTERNAL_H 10 11 struct binman_entry; 12 struct fsp_header; 13 struct fspm_upd; 14 struct fsps_upd; 15 16 enum fsp_type_t { 17 FSP_M, 18 FSP_S, 19 }; 20 21 int fsp_get_header(ulong offset, ulong size, bool use_spi_flash, 22 struct fsp_header **fspp); 23 24 /** 25 * fsp_locate_fsp() - Locate an FSP component 26 * 27 * This finds an FSP component by various methods. It is not as general-purpose 28 * as it looks, since it expects FSP-M to be requested in SPL (only), and FSP-S 29 * to be requested in U-Boot proper. 30 * 31 * @type: Component to locate 32 * @entry: Returns location of component 33 * @use_spi_flash: true to read using the Fast SPI driver, false to use 34 * memory-mapped SPI flash 35 * @devp: Returns northbridge device 36 * @hdrp: Returns FSP header 37 * @rom_offsetp: If non-NULL, returns the offset to add to any image position to 38 * find the memory-mapped location of that position. For example, for ROM 39 * position 0x1000, it will be mapped into 0x1000 + *rom_offsetp. 40 */ 41 int fsp_locate_fsp(enum fsp_type_t type, struct binman_entry *entry, 42 bool use_spi_flash, struct udevice **devp, 43 struct fsp_header **hdrp, ulong *rom_offsetp); 44 45 /** 46 * arch_fsps_preinit() - Perform init needed before calling FSP-S 47 * 48 * This allows use of probed drivers and PCI so is a convenient place to do any 49 * init that is needed before FSP-S is called. After this, U-Boot relocates and 50 * calls arch_fsp_init_r() before PCI is probed, and that function is not 51 * allowed to probe PCI before calling FSP-S. 52 */ 53 int arch_fsps_preinit(void); 54 55 /** 56 * fspm_update_config() - Set up the config structure for FSP-M 57 * 58 * @dev: Hostbridge device containing config 59 * @upd: Config data to fill in 60 * @return 0 if OK, -ENOENT if OK but no MRC-cache data was found, other -ve on 61 * error 62 */ 63 int fspm_update_config(struct udevice *dev, struct fspm_upd *upd); 64 65 /** 66 * fspm_done() - Indicate that memory init is complete 67 * 68 * This allows the board to do whatever post-init it needs before things 69 * continue. 70 * 71 * @dev: Hostbridge device 72 * @return 0 if OK, -ve on error 73 */ 74 int fspm_done(struct udevice *dev); 75 76 /** 77 * fsps_update_config() - Set up the config structure for FSP-S 78 * 79 * @dev: Hostbridge device containing config 80 * @rom_offset: Value to add to convert from ROM offset to memory-mapped address 81 * @upd: Config data to fill in 82 * @return 0 if OK, -ve on error 83 */ 84 int fsps_update_config(struct udevice *dev, ulong rom_offset, 85 struct fsps_upd *upd); 86 87 /** 88 * prepare_mrc_cache() - Read the MRC cache into the product-data struct 89 * 90 * This looks for cached Memory-reference code (MRC) data and stores it into 91 * @upd for use by the FSP-M binary. 92 * 93 * @return 0 if OK, -ENOENT if no data (whereupon the caller can continue and 94 * expect a slower boot), other -ve value on other error 95 */ 96 int prepare_mrc_cache(struct fspm_upd *upd); 97 98 #endif 99