<p>Iru Cai has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/c/coreboot/+/30190">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mrc main<br><br>Change-Id: Id2626410e23d153ac11b796115c5a63bc6f21711<br>Signed-off-by: Iru Cai <mytbk920423@gmail.com><br>---<br>M src/northbridge/intel/haswell/Makefile.inc<br>M src/northbridge/intel/haswell/mrc.asm<br>A src/northbridge/intel/haswell/mrc_main.c<br>3 files changed, 67 insertions(+), 111 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/90/30190/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/northbridge/intel/haswell/Makefile.inc b/src/northbridge/intel/haswell/Makefile.inc</span><br><span>index 7f53f78..30c3267 100644</span><br><span>--- a/src/northbridge/intel/haswell/Makefile.inc</span><br><span>+++ b/src/northbridge/intel/haswell/Makefile.inc</span><br><span>@@ -35,6 +35,7 @@</span><br><span>    nasm -f elf32 -o $@ $<</span><br><span> </span><br><span> romstage-y += mrc_utils.c</span><br><span style="color: hsl(120, 100%, 40%);">+romstage-y += mrc_main.c</span><br><span> </span><br><span> postcar-y += ram_calc.c</span><br><span> </span><br><span>diff --git a/src/northbridge/intel/haswell/mrc.asm b/src/northbridge/intel/haswell/mrc.asm</span><br><span>index feca76f..9bb6b28 100644</span><br><span>--- a/src/northbridge/intel/haswell/mrc.asm</span><br><span>+++ b/src/northbridge/intel/haswell/mrc.asm</span><br><span>@@ -3,6 +3,8 @@</span><br><span> bits 32</span><br><span> </span><br><span> global mrc_entry</span><br><span style="color: hsl(120, 100%, 40%);">+global do_raminit</span><br><span style="color: hsl(120, 100%, 40%);">+global heap_check</span><br><span> </span><br><span> extern mrc_printk</span><br><span> extern mrc_setmem</span><br><span>@@ -11,6 +13,7 @@</span><br><span> extern mrc_fillword</span><br><span> extern mrc_zeromem</span><br><span> extern mrc_highest_bit</span><br><span style="color: hsl(120, 100%, 40%);">+extern mrc_main</span><br><span> </span><br><span> mrc_entry:</span><br><span> mov ecx, esp</span><br><span>@@ -20,7 +23,7 @@</span><br><span> mov al, 1</span><br><span> out 0x80, al</span><br><span> cld</span><br><span style="color: hsl(0, 100%, 40%);">-call fcn_fffc18c8  ; call 0xfffc18c8</span><br><span style="color: hsl(120, 100%, 40%);">+call mrc_main</span><br><span> pop ecx</span><br><span> pop ecx</span><br><span> mov esp, ecx</span><br><span>@@ -2482,7 +2485,7 @@</span><br><span> pop ebp</span><br><span> ret</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-fcn_fffa2937:</span><br><span style="color: hsl(120, 100%, 40%);">+heap_check:</span><br><span> push ebp</span><br><span> lea edx, [eax + 3]</span><br><span> and edx, 0xfffffffc</span><br><span>@@ -2550,7 +2553,7 @@</span><br><span> jne short loc_fffa29f2  ; jne 0xfffa29f2</span><br><span> add eax, 4</span><br><span> mov dword [ebp - 0x1c], edx</span><br><span style="color: hsl(0, 100%, 40%);">-call fcn_fffa2937  ; call 0xfffa2937</span><br><span style="color: hsl(120, 100%, 40%);">+call heap_check  ; call 0xfffa2937</span><br><span> test eax, eax</span><br><span> mov edx, dword [ebp - 0x1c]</span><br><span> jne short loc_fffa29f4  ; jne 0xfffa29f4</span><br><span>@@ -2840,7 +2843,7 @@</span><br><span> pop ebp</span><br><span> ret</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-fcn_fffa2c51:</span><br><span style="color: hsl(120, 100%, 40%);">+do_raminit:</span><br><span> push ebp</span><br><span> xor edx, edx</span><br><span> mov ebp, esp</span><br><span>@@ -3758,14 +3761,14 @@</span><br><span> mov eax, ebx</span><br><span> call fcn_fffc7c9d  ; call 0xfffc7c9d</span><br><span> mov eax, 0xc</span><br><span style="color: hsl(0, 100%, 40%);">-call fcn_fffa2937  ; call 0xfffa2937</span><br><span style="color: hsl(120, 100%, 40%);">+call heap_check  ; call 0xfffa2937</span><br><span> test eax, eax</span><br><span> mov esi, eax</span><br><span> je short loc_fffa3d32  ; je 0xfffa3d32</span><br><span> mov edx, 0xc</span><br><span> call mrc_zeromem</span><br><span> mov eax, 0x28</span><br><span style="color: hsl(0, 100%, 40%);">-call fcn_fffa2937  ; call 0xfffa2937</span><br><span style="color: hsl(120, 100%, 40%);">+call heap_check  ; call 0xfffa2937</span><br><span> test eax, eax</span><br><span> mov edi, eax</span><br><span> je short loc_fffa3d32  ; je 0xfffa3d32</span><br><span>@@ -3814,7 +3817,7 @@</span><br><span> call mrc_printk  ; call 0xfffa1253</span><br><span> mov eax, 0x10f</span><br><span> mov esi, dword [0xff7d7538]</span><br><span style="color: hsl(0, 100%, 40%);">-call fcn_fffa2937  ; call 0xfffa2937</span><br><span style="color: hsl(120, 100%, 40%);">+call heap_check  ; call 0xfffa2937</span><br><span> add esp, 0x10</span><br><span> test eax, eax</span><br><span> mov ebx, eax</span><br><span>@@ -42190,101 +42193,6 @@</span><br><span> db 0x00</span><br><span> db 0x00</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-fcn_fffc18c8:</span><br><span style="color: hsl(0, 100%, 40%);">-push ebp</span><br><span style="color: hsl(0, 100%, 40%);">-mov ecx, 8</span><br><span style="color: hsl(0, 100%, 40%);">-mov ebp, esp</span><br><span style="color: hsl(0, 100%, 40%);">-push edi</span><br><span style="color: hsl(0, 100%, 40%);">-push esi</span><br><span style="color: hsl(0, 100%, 40%);">-push ebx</span><br><span style="color: hsl(0, 100%, 40%);">-mov ebx, 0xff800000</span><br><span style="color: hsl(0, 100%, 40%);">-sub ebx, 0xff7d7544</span><br><span style="color: hsl(0, 100%, 40%);">-lea esp, [esp - 0x1c]</span><br><span style="color: hsl(0, 100%, 40%);">-sar ebx, 2</span><br><span style="color: hsl(0, 100%, 40%);">-mov eax, ebx</span><br><span style="color: hsl(0, 100%, 40%);">-cdq</span><br><span style="color: hsl(0, 100%, 40%);">-idiv ecx</span><br><span style="color: hsl(0, 100%, 40%);">-mov dword [ebp - 0x1c], eax</span><br><span style="color: hsl(0, 100%, 40%);">-xor eax, eax</span><br><span style="color: hsl(0, 100%, 40%);">-jmp short loc_fffc190c  ; jmp 0xfffc190c</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc18f1:</span><br><span style="color: hsl(0, 100%, 40%);">-xor edx, edx</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc18f3:</span><br><span style="color: hsl(0, 100%, 40%);">-lea ecx, [edx + eax]</span><br><span style="color: hsl(0, 100%, 40%);">-inc edx</span><br><span style="color: hsl(0, 100%, 40%);">-cmp edx, 4</span><br><span style="color: hsl(0, 100%, 40%);">-mov dword [ecx*4 - 0x828abc], 0xdeedbeef</span><br><span style="color: hsl(0, 100%, 40%);">-jne short loc_fffc18f3  ; jne 0xfffc18f3</span><br><span style="color: hsl(0, 100%, 40%);">-add eax, 0x100</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc190c:</span><br><span style="color: hsl(0, 100%, 40%);">-cmp eax, dword [ebp - 0x1c]</span><br><span style="color: hsl(0, 100%, 40%);">-jl short loc_fffc18f1  ; jl 0xfffc18f1</span><br><span style="color: hsl(0, 100%, 40%);">-mov eax, dword [ebp + 8]</span><br><span style="color: hsl(0, 100%, 40%);">-xor esi, esi</span><br><span style="color: hsl(0, 100%, 40%);">-call fcn_fffa2c51  ; call 0xfffa2c51</span><br><span style="color: hsl(0, 100%, 40%);">-mov edi, eax</span><br><span style="color: hsl(0, 100%, 40%);">-jmp short loc_fffc1939  ; jmp 0xfffc1939</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc191f:</span><br><span style="color: hsl(0, 100%, 40%);">-xor eax, eax</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc1921:</span><br><span style="color: hsl(0, 100%, 40%);">-lea ecx, [eax + esi]</span><br><span style="color: hsl(0, 100%, 40%);">-cmp dword [ecx*4 - 0x828abc], 0xdeedbeef</span><br><span style="color: hsl(0, 100%, 40%);">-jne short loc_fffc195a  ; jne 0xfffc195a</span><br><span style="color: hsl(0, 100%, 40%);">-inc eax</span><br><span style="color: hsl(0, 100%, 40%);">-cmp eax, 4</span><br><span style="color: hsl(0, 100%, 40%);">-jne short loc_fffc1921  ; jne 0xfffc1921</span><br><span style="color: hsl(0, 100%, 40%);">-jmp short loc_fffc1952  ; jmp 0xfffc1952</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc1939:</span><br><span style="color: hsl(0, 100%, 40%);">-cmp esi, dword [ebp - 0x1c]</span><br><span style="color: hsl(0, 100%, 40%);">-jl short loc_fffc191f  ; jl 0xfffc191f</span><br><span style="color: hsl(0, 100%, 40%);">-jmp short loc_fffc197a  ; jmp 0xfffc197a</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc1940:</span><br><span style="color: hsl(0, 100%, 40%);">-sub esp, 0xc</span><br><span style="color: hsl(0, 100%, 40%);">-push ref_fffcc6f2  ; push 0xfffcc6f2</span><br><span style="color: hsl(0, 100%, 40%);">-call mrc_printk  ; call 0xfffa1253</span><br><span style="color: hsl(0, 100%, 40%);">-add esp, 0x10</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc1950:</span><br><span style="color: hsl(0, 100%, 40%);">-jmp short loc_fffc1950  ; jmp 0xfffc1950</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc1952:</span><br><span style="color: hsl(0, 100%, 40%);">-add esi, 0x100</span><br><span style="color: hsl(0, 100%, 40%);">-jmp short loc_fffc1939  ; jmp 0xfffc1939</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc195a:</span><br><span style="color: hsl(0, 100%, 40%);">-push eax</span><br><span style="color: hsl(0, 100%, 40%);">-lea eax, [ebx*4]</span><br><span style="color: hsl(0, 100%, 40%);">-sub ebx, esi</span><br><span style="color: hsl(0, 100%, 40%);">-push eax</span><br><span style="color: hsl(0, 100%, 40%);">-shl ebx, 2</span><br><span style="color: hsl(0, 100%, 40%);">-push ebx</span><br><span style="color: hsl(0, 100%, 40%);">-push ref_fffcc725  ; push 0xfffcc725</span><br><span style="color: hsl(0, 100%, 40%);">-call mrc_printk  ; call 0xfffa1253</span><br><span style="color: hsl(0, 100%, 40%);">-add esp, 0x10</span><br><span style="color: hsl(0, 100%, 40%);">-test esi, esi</span><br><span style="color: hsl(0, 100%, 40%);">-je short loc_fffc1940  ; je 0xfffc1940</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-loc_fffc197a:</span><br><span style="color: hsl(0, 100%, 40%);">-sub esp, 0xc</span><br><span style="color: hsl(0, 100%, 40%);">-push ref_fffcc70e  ; push 0xfffcc70e</span><br><span style="color: hsl(0, 100%, 40%);">-call mrc_printk  ; call 0xfffa1253</span><br><span style="color: hsl(0, 100%, 40%);">-mov eax, 8</span><br><span style="color: hsl(0, 100%, 40%);">-call fcn_fffa2937  ; call 0xfffa2937</span><br><span style="color: hsl(0, 100%, 40%);">-lea esp, [ebp - 0xc]</span><br><span style="color: hsl(0, 100%, 40%);">-mov eax, edi</span><br><span style="color: hsl(0, 100%, 40%);">-pop ebx</span><br><span style="color: hsl(0, 100%, 40%);">-pop esi</span><br><span style="color: hsl(0, 100%, 40%);">-pop edi</span><br><span style="color: hsl(0, 100%, 40%);">-pop ebp</span><br><span style="color: hsl(0, 100%, 40%);">-ret</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> fcn_fffc1ae2:</span><br><span> push ebp</span><br><span> mov ebp, esp</span><br><span>@@ -56223,15 +56131,6 @@</span><br><span> ref_fffcc6dd:</span><br><span> db 'System Agent: Done.',0x0a,0x00</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-ref_fffcc6f2:</span><br><span style="color: hsl(0, 100%, 40%);">-db 'Stack completely exhaused!',0x0a,0x00</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-ref_fffcc70e:</span><br><span style="color: hsl(0, 100%, 40%);">-db 'Sanity checking heap.',0x0a,0x00</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-ref_fffcc725:</span><br><span style="color: hsl(0, 100%, 40%);">-db 'Reference code used approx 0x%x/0x%x of stack.',0x0a,0x00,0x00</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> ref_fffcc756:</span><br><span> db 0x50</span><br><span> db 0x00</span><br><span>diff --git a/src/northbridge/intel/haswell/mrc_main.c b/src/northbridge/intel/haswell/mrc_main.c</span><br><span>new file mode 100644</span><br><span>index 0000000..a00abf2</span><br><span>--- /dev/null</span><br><span>+++ b/src/northbridge/intel/haswell/mrc_main.c</span><br><span>@@ -0,0 +1,56 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include "pei_data.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <console/console.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int *STACK_TOP = (int *)0xff800000;</span><br><span style="color: hsl(120, 100%, 40%);">+static int *STACK_BTM = (int *)0xff7d7544;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int __attribute((regparm(1))) do_raminit(struct pei_data *pd);</span><br><span style="color: hsl(120, 100%, 40%);">+int __attribute((regparm(1))) heap_check(int n);</span><br><span style="color: hsl(120, 100%, 40%);">+int mrc_main(struct pei_data *pd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int mrc_main(struct pei_data *pd)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     int stkwords = (STACK_TOP - STACK_BTM);</span><br><span style="color: hsl(120, 100%, 40%);">+       int lowsize = stkwords / 8;</span><br><span style="color: hsl(120, 100%, 40%);">+   int rv;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     for (int i = 0; i < lowsize; i += 0x100) {</span><br><span style="color: hsl(120, 100%, 40%);">+         for (int j = 0; j < 4; j++)</span><br><span style="color: hsl(120, 100%, 40%);">+                        STACK_BTM[i + j] = 0xdeadbeef;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   rv = do_raminit(pd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        for (int i = 0; i < lowsize; i += 0x100) {</span><br><span style="color: hsl(120, 100%, 40%);">+         for (int j = 0; j < 4; j++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (STACK_BTM[i + j] != 0xdeadbeef) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         mrc_printk("Reference code used "</span><br><span style="color: hsl(120, 100%, 40%);">+                                           "approx 0x%x/0x%x of stack.\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                             (stkwords - i) * 4,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           stkwords * 4);</span><br><span style="color: hsl(120, 100%, 40%);">+                                if (i == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                 mrc_printk("Stack completely exhaused!\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                                 while (1)</span><br><span style="color: hsl(120, 100%, 40%);">+                                             ;</span><br><span style="color: hsl(120, 100%, 40%);">+                             }</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   mrc_printk("Sanity checking heap.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+      heap_check(8);</span><br><span style="color: hsl(120, 100%, 40%);">+        return rv;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/c/coreboot/+/30190">change 30190</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/c/coreboot/+/30190"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id2626410e23d153ac11b796115c5a63bc6f21711 </div>
<div style="display:none"> Gerrit-Change-Number: 30190 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Iru Cai <mytbk920423@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Iru Cai <mytbk920423@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Martin Roth <martinroth@google.com> </div>
<div style="display:none"> Gerrit-Reviewer: Patrick Georgi <pgeorgi@google.com> </div>
<div style="display:none"> Gerrit-Reviewer: Patrick Rudolph <siro@das-labor.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>