<div dir="ltr">Hello, Peter!<br>The mistake was found in the following part of the code (southbridge/intel/bd82x6x/<wbr>bootblock.c):<br><br><div>static void bootblock_southbridge_init(<wbr>void)</div><div>{</div><div>       store_initial_timestamp();</div><div>       enable_spi_prefetch();</div><div>       enable_port80_on_lpc();</div><div>       set_spi_speed();</div><div><br></div><div>       /* Enable upper 128bytes of CMOS */</div><div>       RCBA32(RC) = (1 << 2);</div><div>}<br><br>This mistake was eliminated in the Haswell-code:<br><br>static void map_rcba(void)<br>{<br>    pci_devfn_t dev = PCI_DEV(0, 0x1f, 0);<br><br>    pci_write_config32(dev, RCBA, (uintptr_t)DEFAULT_RCBA | 1);<br>}<br><br>static void enable_port80_on_lpc(void)<br>{<br>    /* Enable port 80 POST on LPC. */<br>    u32 gcs = RCBA32(GCS);<br>    gcs = gcs & ~0x4;<br>    RCBA32(GCS) = gcs;<br>}<div><div><br></div>static void bootblock_southbridge_init(void)<br>{<br>    store_initial_timestamp();<br><br>    map_rcba();<br>    enable_spi_prefetch();<br>#if CONFIG_POST_DEVICE_LPC<br>    enable_port80_on_lpc();<br>#endif<br>    set_spi_speed();<br><br>    /* Enable upper 128bytes of CMOS */<br>    RCBA32(RC) = (1 << 2);<br>}<br><div><br>After that all the post-codes are sended correctly.<br><br>Also we have found he mistake in the part of the code for the memory-banks. In the code for SandyBridge/IvyBridge variables are assigned "hardly" while for the Haswell variables are defined dynamically:<br><br>static void configure_mca(void)<br>{<br>    msr_t msr;<br>    int i;<br><br>    msr.lo = msr.hi = 0;<br>    /* This should only be done on a cold boot */<br>    for (i = 0; i < 7; i++)<br>        wrmsr(IA32_MC0_STATUS + (i * 4), msr);<br>}<br><br>Now I port ASUS P8B75-V motherboard. Everything is OK with using Intel Core i3, but with Intel Celeron G440 on the seventh iteration we have got a mistake because there is not the seventh memory bank there. With using Haswell-code our project runs correctly with both processors:<br><br>static void configure_mca(void)<br>{<br>    msr_t msr;<br>    int i;<br>    int num_banks;<br>    const unsigned int mcg_cap_msr = 0x179;<br>    <br>    msr = rdmsr(mcg_cap_msr);<br>    num_banks = msr.lo & 0xff;<br>    msr.lo = msr.hi = 0;<br>    /* This should only be done on a cold boot */<br>    for (i = 0; i < num_banks; i++)<br>        wrmsr(IA32_MC0_STATUS + (i * 4), msr);<br>}<br></div></div></div></div>