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)
diff --git a/src/cpu/x86/mtrr/mtrr.c b/src/cpu/x86/mtrr/mtrr.c
index efd0b68..794df99 100644
--- a/src/cpu/x86/mtrr/mtrr.c
+++ b/src/cpu/x86/mtrr/mtrr.c
@@ -789,8 +789,6 @@
 	addr_space = get_physical_address_space();
 
 	if (sol == NULL) {
-		if (above4gb == 2)
-			detect_var_mtrrs();
 		sol = &mtrr_global_solution;
 		sol->mtrr_default_type =
 			calc_var_mtrrs(addr_space, !!above4gb, address_bits);
@@ -804,12 +802,21 @@
 void x86_setup_mtrrs(void)
 {
 	int address_size;
+
 	x86_setup_fixed_mtrrs();
 	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);
 }
 
+void x86_setup_mtrrs_with_detect(void)
+{
+	detect_var_mtrrs();
+	x86_setup_mtrrs();
+}
+
 void x86_mtrr_check(void)
 {
 	/* Only Pentium Pro and later have MTRR */