<html><head></head><body><div style="color:#000; background-color:#fff; font-family:Courier New, courier, monaco, monospace, sans-serif;font-size:16px"><div id="yui_3_16_0_ym19_1_1519688637203_58593"><span id="yui_3_16_0_ym19_1_1519688637203_58620">This was my original email, see below. It has it's own topic. Hopefully it may it's way to the mailer.</span></div><div class="qtdSeparateBR" id="yui_3_16_0_ym19_1_1519688637203_58665"><br><br></div> <div class="yahoo_quoted" id="yui_3_16_0_ym19_1_1519688637203_58670" style="display: block;"> <div style="font-family: Courier New, courier, monaco, monospace, sans-serif; font-size: 16px;" id="yui_3_16_0_ym19_1_1519688637203_58669"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;" id="yui_3_16_0_ym19_1_1519688637203_58668"> <div dir="ltr" id="yui_3_16_0_ym19_1_1519688637203_58667"><font size="2" face="Arial" id="yui_3_16_0_ym19_1_1519688637203_58672"> On Monday, February 26, 2018 2:39 PM, mark pleso <mpleso@yahoo.com> wrote:<br></font></div> <br><br> <div class="y_msg_container" id="yui_3_16_0_ym19_1_1519688637203_58677"><div id="yiv9794643798"><div id="yui_3_16_0_ym19_1_1519688637203_58676"><div style="color:#000;background-color:#fff;font-family:Courier New, courier, monaco, monospace, sans-serif;font-size:16px;" id="yui_3_16_0_ym19_1_1519688637203_58675"><div id="yiv9794643798"><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_12186"><div style="color:#000;background-color:#fff;font-family:Courier New, courier, monaco, monospace, sans-serif;font-size:16px;" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_12185"><div id="yiv9794643798"><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_10938"><div style="color:#000;background-color:#fff;font-family:Courier New, courier, monaco, monospace, sans-serif;font-size:16px;" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_10937"><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622">Has anyone else seen a hang during coreboot booting on a Broadwell-DE? The issue appears to be in mp_init.c, in the function smm_do_relocation(). This is coreboot 4.7, but I think the issue exists in 4.6 as well.</div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622"><br></div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr">Enabling the printk will stop the hang. Or, just adding a wbinvd() instruction will stop the hang, and things proceed normally. Code is below.</div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr"><br></div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr">Any help would be appreciated.</div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr"><br></div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr">btw - This not a commercial motherboard.</div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr"><br></div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr">coreboot/src/cpu/x86/mp_init.c</div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr">static void asmlinkage smm_do_relocation(void *arg)<br></div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr"><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11182">{</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11183"> const struct smm_module_params *p;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11184"> const struct smm_runtime *runtime;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11185"> int cpu;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11186"> uintptr_t curr_smbase;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11187"> uintptr_t perm_smbase;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11188"><br id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11189"></div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11190"> p = arg;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11191"> runtime = p->runtime;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11192"> cpu = p->cpu;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11193"> curr_smbase = runtime->smbase;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11194"><br id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11195"></div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11196"> if (cpu >= CONFIG_MAX_CPUS) {</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11197"> printk(BIOS_CRIT,</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11198"> "Invalid CPU number assigned in SMM stub: %d\n", cpu);</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11199"> return;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11200"> }</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11201"><br id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11202"></div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11203"> /*</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11204"> * The permanent handler runs with all cpus concurrently. Precalculate</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11205"> * the location of the new SMBASE. If using SMM modules then this</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11206"> * calculation needs to match that of the module loader.</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11207"> */</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11208"> perm_smbase = mp_state.perm_smbase;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11209"> perm_smbase -= cpu * runtime->save_state_size;</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11210"><br id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11211"></div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11212"> printk(BIOS_DEBUG, "New SMBASE 0x%08lx\n", perm_smbase);</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11212"><br></div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11212"> /* write cache to DRAM before calling relocation handler */ /* will stop hang */</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11212"> wbinvd(); /* <<=== OR NEW INSTRUCTION w/o printk STOPS HANG */</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11213"><br id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11214"></div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11215"> /* Setup code checks this callback for validity. */</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11216"> mp_state.ops.relocation_handler(cpu, curr_smbase, perm_smbase);</div><div dir="ltr" id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_11217">}</div></div><div id="yiv9794643798yui_3_16_0_ym19_1_1519681767422_4622" dir="ltr"><br></div></div></div></div></div></div></div></div></div></div><br><br></div> </div> </div> </div></div></body></html>