Project

General

Profile

Bug #105 ยป nehalem_raminit_timeout_for_neutralized_me.diff.txt

Ani Chang, 04/01/2017 11:03 AM

 
diff --git a/src/northbridge/intel/nehalem/raminit.c b/src/northbridge/intel/nehalem/raminit.c
index 122b8ac..f95a291 100644
--- a/src/northbridge/intel/nehalem/raminit.c
+++ b/src/northbridge/intel/nehalem/raminit.c
@@ -1753,24 +1753,45 @@ static const struct ram_training *get_cached_training(void)
}
#endif
-/* FIXME: add timeout. */
+/* FIXME: timeout added to workaround the lack of ME in the case it has been removed with me_cleaner. Testing needed. */
static void wait_heci_ready(void)
{
- while (!(read32(DEFAULT_HECIBAR + 0xc) & 8)); // = 0x8000000c
+ int timeout;
+
+ timeout = 0x7ff;
+ while (!(read32(DEFAULT_HECIBAR + 0xc) & 8) && --timeout) { // = 0x8000000c
+ udelay(10);
+ if ((timeout & 0xff) == 0)
+ printk(BIOS_SPEW, ".");
+ }
+ if (!timeout) {
+ printk(BIOS_DEBUG, "Timeout while waiting for ME init!\n");
+ // return -1;
+ }
write32((DEFAULT_HECIBAR + 0x4),
(read32(DEFAULT_HECIBAR + 0x4) & ~0x10) | 0xc);
}
-/* FIXME: add timeout. */
+/* FIXME: timeout added to workaround the lack of ME in the case it has been removed with me_cleaner. Testing needed. */
static void wait_heci_cb_avail(int len)
{
+ int timeout;
+
union {
struct mei_csr csr;
u32 raw;
} csr;
- while (!(read32(DEFAULT_HECIBAR + 0xc) & 8));
-
+ timeout = 0x7ff;
+ while (!(read32(DEFAULT_HECIBAR + 0xc) & 8) && --timeout) {
+ udelay(10);
+ if ((timeout & 0xff) == 0)
+ printk(BIOS_SPEW, ".");
+ };
+ if (!timeout) {
+ printk(BIOS_DEBUG, "Timeout while waiting for ME init!\n");
+ // return -1;
+ }
do
csr.raw = read32(DEFAULT_HECIBAR + 0x4);
while (len >
    (1-1/1)