cpu/x86/mtrr: add helper function to detect variable MTRRs
The current MTRR API doesn't allow one to detect variable MTRRs along with handling fixed MTRRs in one function call. Therefore, add x86_setup_mtrrs_with_detect() to perform the same actions as x86_setup_mtrrs() but always do the dynamic detection. Change-Id: I443909691afa28ce11882e2beab12e836e5bcb3d Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/13935 Reviewed-by: Furquan Shaikh <furquan@google.com> Tested-by: build bot (Jenkins)
This commit is contained in:
parent
e99e2b65cf
commit
e63be8971b
|
@ -789,8 +789,6 @@ void x86_setup_var_mtrrs(unsigned int address_bits, unsigned int above4gb)
|
||||||
addr_space = get_physical_address_space();
|
addr_space = get_physical_address_space();
|
||||||
|
|
||||||
if (sol == NULL) {
|
if (sol == NULL) {
|
||||||
if (above4gb == 2)
|
|
||||||
detect_var_mtrrs();
|
|
||||||
sol = &mtrr_global_solution;
|
sol = &mtrr_global_solution;
|
||||||
sol->mtrr_default_type =
|
sol->mtrr_default_type =
|
||||||
calc_var_mtrrs(addr_space, !!above4gb, address_bits);
|
calc_var_mtrrs(addr_space, !!above4gb, address_bits);
|
||||||
|
@ -804,12 +802,21 @@ void x86_setup_var_mtrrs(unsigned int address_bits, unsigned int above4gb)
|
||||||
void x86_setup_mtrrs(void)
|
void x86_setup_mtrrs(void)
|
||||||
{
|
{
|
||||||
int address_size;
|
int address_size;
|
||||||
|
|
||||||
x86_setup_fixed_mtrrs();
|
x86_setup_fixed_mtrrs();
|
||||||
address_size = cpu_phys_address_size();
|
address_size = cpu_phys_address_size();
|
||||||
printk(BIOS_DEBUG, "CPU physical address size: %d bits\n", address_size);
|
printk(BIOS_DEBUG, "CPU physical address size: %d bits\n",
|
||||||
|
address_size);
|
||||||
|
/* Always handle addresses above 4GiB. */
|
||||||
x86_setup_var_mtrrs(address_size, 1);
|
x86_setup_var_mtrrs(address_size, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void x86_setup_mtrrs_with_detect(void)
|
||||||
|
{
|
||||||
|
detect_var_mtrrs();
|
||||||
|
x86_setup_mtrrs();
|
||||||
|
}
|
||||||
|
|
||||||
void x86_mtrr_check(void)
|
void x86_mtrr_check(void)
|
||||||
{
|
{
|
||||||
/* Only Pentium Pro and later have MTRR */
|
/* Only Pentium Pro and later have MTRR */
|
||||||
|
|
|
@ -56,14 +56,20 @@
|
||||||
* of the nature of the global MTRR enable flag. Therefore, all direct
|
* of the nature of the global MTRR enable flag. Therefore, all direct
|
||||||
* or indirect callers of enable_fixed_mtrr() should ensure that the
|
* or indirect callers of enable_fixed_mtrr() should ensure that the
|
||||||
* variable MTRR MSRs do not contain bad ranges.
|
* variable MTRR MSRs do not contain bad ranges.
|
||||||
|
*
|
||||||
|
* Note that this function sets up MTRRs for addresses above 4GiB.
|
||||||
*/
|
*/
|
||||||
void x86_setup_mtrrs(void);
|
void x86_setup_mtrrs(void);
|
||||||
|
/*
|
||||||
|
* x86_setup_mtrrs_with_detect() does the same thing as x86_setup_mtrrs(), but
|
||||||
|
* it always dynamically detects the number of variable MTRRs available.
|
||||||
|
*/
|
||||||
|
void x86_setup_mtrrs_with_detect(void);
|
||||||
/*
|
/*
|
||||||
* x86_setup_var_mtrrs() parameters:
|
* x86_setup_var_mtrrs() parameters:
|
||||||
* address_bits - number of physical address bits supported by cpu
|
* address_bits - number of physical address bits supported by cpu
|
||||||
* above4gb - 2 means dynamically detect number of variable MTRRs available.
|
* above4gb - if set setup MTRRs for addresses above 4GiB else ignore
|
||||||
* non-zero means handle memory ranges above 4GiB.
|
* memory ranges above 4GiB
|
||||||
* 0 means ignore memory ranges above 4GiB
|
|
||||||
*/
|
*/
|
||||||
void x86_setup_var_mtrrs(unsigned int address_bits, unsigned int above4gb);
|
void x86_setup_var_mtrrs(unsigned int address_bits, unsigned int above4gb);
|
||||||
void enable_fixed_mtrr(void);
|
void enable_fixed_mtrr(void);
|
||||||
|
|
Loading…
Reference in New Issue