cpu/x86/mtrr: add x86_setup_mtrrs_with_detect_no_above_4gb()

There's not a function that is the equivalent to
x86_setup_mtrrs_with_detect() but not solving for above 4GiB.
Provide x86_setup_mtrrs_with_detect_no_above_4gb() which is the
equivalent to x86_setup_mtrrs_with_detect() but instructs the MTRR
solver to not take into account memory above 4GiB.

BUG=b:155426691

Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Change-Id: Ia1b5d67d6f139aaa929e03ddbc394d57dfb949e0
Reviewed-on: https://review.coreboot.org/c/coreboot/+/41897
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/cpu/x86/mtrr/mtrr.c b/src/cpu/x86/mtrr/mtrr.c
index 1f37659..77525a7 100644
--- a/src/cpu/x86/mtrr/mtrr.c
+++ b/src/cpu/x86/mtrr/mtrr.c
@@ -774,7 +774,7 @@
 	commit_var_mtrrs(sol);
 }
 
-void x86_setup_mtrrs(void)
+static void _x86_setup_mtrrs(unsigned int above4gb)
 {
 	int address_size;
 
@@ -782,14 +782,26 @@
 	address_size = cpu_phys_address_size();
 	printk(BIOS_DEBUG, "CPU physical address size: %d bits\n",
 		address_size);
+	x86_setup_var_mtrrs(address_size, above4gb);
+}
+
+void x86_setup_mtrrs(void)
+{
 	/* Always handle addresses above 4GiB. */
-	x86_setup_var_mtrrs(address_size, 1);
+	_x86_setup_mtrrs(1);
 }
 
 void x86_setup_mtrrs_with_detect(void)
 {
 	detect_var_mtrrs();
-	x86_setup_mtrrs();
+	/* Always handle addresses above 4GiB. */
+	_x86_setup_mtrrs(1);
+}
+
+void x86_setup_mtrrs_with_detect_no_above_4gb(void)
+{
+	detect_var_mtrrs();
+	_x86_setup_mtrrs(0);
 }
 
 void x86_mtrr_check(void)