|
|
@@ -119,14 +119,16 @@ static u8 __mtrr_type_lookup(u64 start, u64 end, u64 *partial_end, int *repeat)
|
|
|
if (!mtrr_state_set)
|
|
|
return 0xFF;
|
|
|
|
|
|
- if (!mtrr_state.enabled)
|
|
|
+ if (!(mtrr_state.enabled & MTRR_STATE_MTRR_ENABLED))
|
|
|
return 0xFF;
|
|
|
|
|
|
/* Make end inclusive end, instead of exclusive */
|
|
|
end--;
|
|
|
|
|
|
/* Look in fixed ranges. Just return the type as per start */
|
|
|
- if (mtrr_state.have_fixed && (start < 0x100000)) {
|
|
|
+ if ((start < 0x100000) &&
|
|
|
+ (mtrr_state.have_fixed) &&
|
|
|
+ (mtrr_state.enabled & MTRR_STATE_MTRR_FIXED_ENABLED)) {
|
|
|
int idx;
|
|
|
|
|
|
if (start < 0x80000) {
|
|
|
@@ -149,9 +151,6 @@ static u8 __mtrr_type_lookup(u64 start, u64 end, u64 *partial_end, int *repeat)
|
|
|
* Look of multiple ranges matching this address and pick type
|
|
|
* as per MTRR precedence
|
|
|
*/
|
|
|
- if (!(mtrr_state.enabled & 2))
|
|
|
- return mtrr_state.def_type;
|
|
|
-
|
|
|
prev_match = 0xFF;
|
|
|
for (i = 0; i < num_var_ranges; ++i) {
|
|
|
unsigned short start_state, end_state, inclusive;
|
|
|
@@ -355,7 +354,9 @@ static void __init print_mtrr_state(void)
|
|
|
mtrr_attrib_to_str(mtrr_state.def_type));
|
|
|
if (mtrr_state.have_fixed) {
|
|
|
pr_debug("MTRR fixed ranges %sabled:\n",
|
|
|
- mtrr_state.enabled & 1 ? "en" : "dis");
|
|
|
+ ((mtrr_state.enabled & MTRR_STATE_MTRR_ENABLED) &&
|
|
|
+ (mtrr_state.enabled & MTRR_STATE_MTRR_FIXED_ENABLED)) ?
|
|
|
+ "en" : "dis");
|
|
|
print_fixed(0x00000, 0x10000, mtrr_state.fixed_ranges + 0);
|
|
|
for (i = 0; i < 2; ++i)
|
|
|
print_fixed(0x80000 + i * 0x20000, 0x04000,
|
|
|
@@ -368,7 +369,7 @@ static void __init print_mtrr_state(void)
|
|
|
print_fixed_last();
|
|
|
}
|
|
|
pr_debug("MTRR variable ranges %sabled:\n",
|
|
|
- mtrr_state.enabled & 2 ? "en" : "dis");
|
|
|
+ mtrr_state.enabled & MTRR_STATE_MTRR_ENABLED ? "en" : "dis");
|
|
|
high_width = (__ffs64(size_or_mask) - (32 - PAGE_SHIFT) + 3) / 4;
|
|
|
|
|
|
for (i = 0; i < num_var_ranges; ++i) {
|