/ src / include / mrc_cache.h
mrc_cache.h
 1  /* SPDX-License-Identifier: GPL-2.0-only */
 2  
 3  #ifndef _COMMON_MRC_CACHE_H_
 4  #define _COMMON_MRC_CACHE_H_
 5  
 6  #include <stddef.h>
 7  #include <stdint.h>
 8  #include <commonlib/region.h>
 9  
10  enum {
11  	MRC_TRAINING_DATA,
12  	MRC_VARIABLE_DATA,
13  };
14  
15  /*
16   * It's up to the caller to decide when to retrieve and stash data. There is
17   * differentiation on recovery mode CONFIG(HAS_RECOVERY_MRC_CACHE), but that's
18   * only for locating where to retrieve and save the data. If a platform doesn't
19   * want to update the data then it shouldn't stash the data for saving.
20   * Similarly, if the platform doesn't need the data for booting because of a
21   * policy don't request the data.
22   */
23  
24  /* Get and stash data for saving provided the type passed in. */
25  
26  /**
27   * mrc_cache_load_current
28   *
29   * Fill in the buffer with the latest slot data.  This will be a
30   * common entry point for ARM platforms.  Returns < 0 on error, size
31   * of the returned data on success.
32   */
33  ssize_t mrc_cache_load_current(int type, uint32_t version, void *buffer,
34  			       size_t buffer_size);
35  /**
36   * mrc_cache_mmap_leak
37   *
38   * Return a pointer to a buffer with the latest slot data.  An mmap
39   * will be executed (without a matching unmap).  This will be a common
40   * entry point for platforms where mmap is considered a noop, like x86
41   */
42  void *mrc_cache_current_mmap_leak(int type, uint32_t version,
43  				  size_t *data_size);
44  /**
45   * Returns < 0 on error, 0 on success.
46   */
47  int mrc_cache_stash_data(int type, uint32_t version, const void *data,
48  			 size_t size);
49  
50  /**
51   * API to locate the FSP Non-Volatile Storage Data (aka memory training data)
52   * and store into the NVS.
53   */
54  void save_memory_training_data(void);
55  
56  #endif /* _COMMON_MRC_CACHE_H_ */