Make AMD Fam10h CPU microcode updates optional in Expert mode
authorXavi Drudis Ferran <xdrudis@tinet.cat>
Sat, 26 Feb 2011 23:29:44 +0000 (23:29 +0000)
committerPeter Stuge <peter@stuge.se>
Sat, 26 Feb 2011 23:29:44 +0000 (23:29 +0000)
Signed-off-by: Xavi Drudis Ferran <xdrudis@tinet.cat>
Acked-by: Peter Stuge <peter@stuge.se>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6385 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

18 files changed:
src/cpu/amd/model_10xxx/Kconfig
src/cpu/amd/model_10xxx/Makefile.inc
src/cpu/amd/model_10xxx/init_cpus.c
src/mainboard/amd/bimini_fam10/romstage.c
src/mainboard/amd/mahogany_fam10/romstage.c
src/mainboard/amd/serengeti_cheetah_fam10/romstage.c
src/mainboard/amd/tilapia_fam10/romstage.c
src/mainboard/asus/m4a78-em/romstage.c
src/mainboard/asus/m4a785-m/romstage.c
src/mainboard/gigabyte/ma785gmt/romstage.c
src/mainboard/gigabyte/ma78gm/romstage.c
src/mainboard/hp/dl165_g6_fam10/romstage.c
src/mainboard/iei/kino-780am2-fam10/romstage.c
src/mainboard/jetway/pa78vm5/romstage.c
src/mainboard/msi/ms9652_fam10/romstage.c
src/mainboard/supermicro/h8dmr_fam10/romstage.c
src/mainboard/supermicro/h8qme_fam10/romstage.c
src/mainboard/tyan/s2912_fam10/romstage.c

index 539e1116a8ebb37e1eb2c6f1c0a6caf48d7e8f5e..6aab30a6f223ab42420c249bc8c3c9d10636a8d7 100644 (file)
@@ -50,3 +50,35 @@ config SET_FIDVID_CORE_RANGE
 
 endif
 endif
+
+config UPDATE_CPU_MICROCODE
+       bool
+       default y
+
+config UPDATE_CPU_MICROCODE
+       bool "Update CPU microcode"
+       default y
+       depends on EXPERT && CPU_AMD_MODEL_10XXX
+       help
+         Select this to apply patches to the CPU microcode provided by
+         AMD without source, and distributed with coreboot, to address
+         issues in the CPU post production.
+
+         Microcode updates distributed with coreboot are not necessarily
+         the latest version available from AMD. Updates are only applied
+         if they are newer than the microcode already in your CPU.
+
+         Unselect this to let Fam10h CPUs run with microcode as shipped
+         from factory. No binary microcode patches will be included in the
+         coreboot image in that case, which can help with creating an image
+         for which complete source code is available, which in turn might
+         simplify license compliance.
+
+         Microcode updates intend to solve issues that have been discovered
+         after CPU production. The common case is that systems work as
+         intended with updated microcode, but we have also seen cases where
+         issues were solved by not applying the microcode updates.
+
+         Note that some operating system include these same microcode
+         patches, so you may need to also disable microcode updates in
+         your operating system in order for this option to matter.
index 5b0a89de49fa6c49b1124383ff12d1f86fe0085a..35f32c2d655f8cf513b4f7f088464d18c57377a3 100644 (file)
@@ -1,5 +1,4 @@
-# no conditionals here. If you include this file from a socket, then you get all the binaries.
 driver-y += model_10xxx_init.c
-ramstage-y += update_microcode.c
+ramstage-$(CONFIG_UPDATE_CPU_MICROCODE) += update_microcode.c
 ramstage-y += apic_timer.c
 ramstage-y += processor_name.c
index cd3c23496a87fd1b75136540c21080621041e9bd..c21a13551c0be4e2ae55613f616414c6aa182898 100644 (file)
@@ -325,7 +325,9 @@ static u32 init_cpus(u32 cpu_init_detectedx)
                 * This happens after HTinit.
                 * The BSP runs this code in it's own path.
                 */
+#if CONFIG_UPDATE_CPU_MICROCODE
                update_microcode(cpuid_eax(1));
+#endif
                cpuSetAMDMSR();
 
 #if CONFIG_SET_FIDVID
index ff33d0d41e437fd1765fa25b9c2a1ab1398d978f..7bd4ddd08bc52459394a273b1d61b9e5e27f8926 100644 (file)
@@ -66,7 +66,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 
@@ -132,7 +136,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index ea61a57732280e74514cb19b9471260a2efa35a4..c8296441e30af6cc6e3998018f461aedca6c2426 100644 (file)
@@ -66,7 +66,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 #include "southbridge/amd/sb700/early_setup.c"
@@ -125,7 +129,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index 4a9a6ec77521b320f79b52f1082506db01e9fa0a..cbffa8db37ac6b5feceaf2ebe8dcd2403ef19f78 100644 (file)
@@ -87,7 +87,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 
@@ -227,7 +231,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index 66f0c32d25aa04538894ec643d5a3ea78f9fe3c8..67a1e4eb61c5b206abab8028b6caed9c617cf3af 100644 (file)
@@ -65,7 +65,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 #include <spd.h>
@@ -124,7 +128,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index 66f5574c97cb7a576397e3cfb88cd40c6dc7b29a..99cd4050640db81b88d414bee64023ec7422814d 100644 (file)
@@ -65,7 +65,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 #include <spd.h>
@@ -125,7 +129,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index 66f5574c97cb7a576397e3cfb88cd40c6dc7b29a..99cd4050640db81b88d414bee64023ec7422814d 100644 (file)
@@ -65,7 +65,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 #include <spd.h>
@@ -125,7 +129,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index b6c732b13ddf7eb171f46799e621579bfcbb6b67..0be9bac1d99d7d46511e5fa3bb26b605bb27725c 100644 (file)
@@ -61,7 +61,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 #include <spd.h>
@@ -121,7 +125,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index 39b2d749537337cc6e72d88de7d972f58fb9678f..aa86a8e112ceabf08f2cf2860a7d9e6cdcc29c94 100644 (file)
@@ -65,7 +65,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 #include <spd.h>
@@ -123,7 +127,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index 56ee31b27f79b6abc9a0ac08028ba8f69a9e6a78..b2b3f5197c1e316bb71a9db6f2c6015df4662ad6 100644 (file)
@@ -82,7 +82,11 @@ static inline int spd_read_byte(unsigned device, unsigned address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 
@@ -136,7 +140,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index eaf980e943a88fbd6ca6176529d97aeddf9ffc15..64df5b29e11a1a2b6e17b5bb3370a3068ef9afac 100644 (file)
@@ -67,7 +67,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 #include <spd.h>
@@ -126,7 +130,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index 02c34b9148db925ee27f5f52da9d3e2ff6a8dc07..d4d9a7a824a6d7e56aac2134d10ab0ef75749935 100644 (file)
@@ -72,7 +72,11 @@ static int spd_read_byte(u32 device, u32 address)
 #include "cpu/amd/quadcore/quadcore.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 #include <spd.h>
@@ -131,7 +135,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index d82fceef2c3372ff16d05f642717da1eba849785..9567d2c7f316d9c07b3a4693d916e1ae724dfd04 100644 (file)
@@ -76,7 +76,11 @@ static inline int spd_read_byte(unsigned device, unsigned address)
 #include "southbridge/nvidia/mcp55/early_setup_car.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 
@@ -153,7 +157,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index 327ae3622687654c44059f7336af5e1eb2fe096c..c949f2653916eb85d20c63b2999cf0aebcb8d341 100644 (file)
@@ -68,7 +68,11 @@ static inline int spd_read_byte(unsigned device, unsigned address)
 #include "southbridge/nvidia/mcp55/early_setup_car.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 
@@ -145,7 +149,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();
index 1d6bcf49c8564b9ff3e74755917968af174da639..f3f56c424174c12e72c1e6378ffaab068bbaffc8 100644 (file)
@@ -74,7 +74,11 @@ static inline int spd_read_byte(unsigned device, unsigned address)
 #include "southbridge/nvidia/mcp55/early_setup_car.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 
@@ -197,7 +201,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
  /* Setup sysinfo defaults */
  set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
  update_microcode(val);
+#endif
  post_code(0x33);
 
  cpuSetAMDMSR();
index 976f6915319d36f396b499da4badc34ed1d46b74..d809ff26f7dadded18389c43d9dada8e99c1378b 100644 (file)
@@ -77,7 +77,11 @@ static inline int spd_read_byte(unsigned device, unsigned address)
 #include "southbridge/nvidia/mcp55/early_setup_car.c"
 #include "cpu/amd/car/post_cache_as_ram.c"
 #include "cpu/amd/microcode/microcode.c"
+
+#if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
+#endif
+
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 
@@ -153,7 +157,9 @@ void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
        /* Setup sysinfo defaults */
        set_sysinfo_in_ram(0);
 
+#if CONFIG_UPDATE_CPU_MICROCODE
        update_microcode(val);
+#endif
        post_code(0x33);
 
        cpuSetAMDMSR();