diff options
Diffstat (limited to 'arch/x86')
| -rw-r--r-- | arch/x86/cpu/mtrr.c | 11 | ||||
| -rw-r--r-- | arch/x86/include/asm/mtrr.h | 30 | 
2 files changed, 41 insertions, 0 deletions
| diff --git a/arch/x86/cpu/mtrr.c b/arch/x86/cpu/mtrr.c index 7ec0733337d..c9b4e7d06ee 100644 --- a/arch/x86/cpu/mtrr.c +++ b/arch/x86/cpu/mtrr.c @@ -21,6 +21,7 @@  #include <log.h>  #include <asm/cache.h>  #include <asm/io.h> +#include <asm/mp.h>  #include <asm/msr.h>  #include <asm/mtrr.h> @@ -63,6 +64,16 @@ static void set_var_mtrr(uint reg, uint type, uint64_t start, uint64_t size)  	wrmsrl(MTRR_PHYS_MASK_MSR(reg), mask | MTRR_PHYS_MASK_VALID);  } +void mtrr_read_all(struct mtrr_info *info) +{ +	int i; + +	for (i = 0; i < MTRR_COUNT; i++) { +		info->mtrr[i].base = native_read_msr(MTRR_PHYS_BASE_MSR(i)); +		info->mtrr[i].mask = native_read_msr(MTRR_PHYS_MASK_MSR(i)); +	} +} +  int mtrr_commit(bool do_caches)  {  	struct mtrr_request *req = gd->arch.mtrr_req; diff --git a/arch/x86/include/asm/mtrr.h b/arch/x86/include/asm/mtrr.h index 212a699c1b2..e1f1a446436 100644 --- a/arch/x86/include/asm/mtrr.h +++ b/arch/x86/include/asm/mtrr.h @@ -71,6 +71,26 @@ struct mtrr_state {  };  /** + * struct mtrr - Information about a single MTRR + * + * @base: Base address and MTRR_BASE_TYPE_MASK + * @mask: Mask and MTRR_PHYS_MASK_VALID + */ +struct mtrr { +	u64 base; +	u64 mask; +}; + +/** + * struct mtrr_info - Information about all MTRRs + * + * @mtrr: Information about each mtrr + */ +struct mtrr_info { +	struct mtrr mtrr[MTRR_COUNT]; +}; + +/**   * mtrr_open() - Prepare to adjust MTRRs   *   * Use mtrr_open() passing in a structure - this function will init it. Then @@ -129,6 +149,16 @@ int mtrr_commit(bool do_caches);   */  int mtrr_set_next_var(uint type, uint64_t base, uint64_t size); +/** + * mtrr_read_all() - Save all the MTRRs + * + * This reads all MTRRs from the boot CPU into a struct so they can be loaded + * onto other CPUs + * + * @info: Place to put the MTRR info + */ +void mtrr_read_all(struct mtrr_info *info); +  #endif  #if ((CONFIG_XIP_ROM_SIZE & (CONFIG_XIP_ROM_SIZE - 1)) != 0) | 
