{
 }
 
+#define MTRR_TYPE_WP          5
+#define MTRRcap_MSR           0xfe
 #define MTRRphysBase_MSR(reg) (0x200 + 2 * (reg))
 #define MTRRphysMask_MSR(reg) (0x200 + 2 * (reg) + 1)
 
 {
        /* Un-cache the ROM so the kernel has one
         * more MTRR available.
+        *
+        * Coreboot should have assigned this to the
+        * top available variable MTRR.
         */
-       disable_caches();
-       wrmsrl(MTRRphysBase_MSR(7), 0);
-       wrmsrl(MTRRphysMask_MSR(7), 0);
-       enable_caches();
+       u8 top_mtrr = (native_read_msr(MTRRcap_MSR) & 0xff) - 1;
+       u8 top_type = native_read_msr(MTRRphysBase_MSR(top_mtrr)) & 0xff;
+
+       /* Make sure this MTRR is the correct Write-Protected type */
+       if (top_type == MTRR_TYPE_WP) {
+               disable_caches();
+               wrmsrl(MTRRphysBase_MSR(top_mtrr), 0);
+               wrmsrl(MTRRphysMask_MSR(top_mtrr), 0);
+               enable_caches();
+       }
 
        return 0;
 }