summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2018-12-24 00:15:28 +0800
committerIru Cai <mytbk920423@gmail.com>2019-11-17 15:10:44 +0800
commit0758286f8df1e686454725ef0da882d9560028e6 (patch)
tree4173e732a5cff611ab6f92c39cfcbd744bc17c40
parent93e69d4121ca824d718675847c84e9a937e77a60 (diff)
downloadcoreboot-0758286f8df1e686454725ef0da882d9560028e6.tar.xz
frag_fffa54e7
-rw-r--r--src/northbridge/intel/haswell/do_raminit_frag.c30
-rw-r--r--src/northbridge/intel/haswell/mrc.asm60
-rw-r--r--src/northbridge/intel/haswell/mrc_pei.h2
-rw-r--r--src/northbridge/intel/haswell/pei_svc.c2
4 files changed, 40 insertions, 54 deletions
diff --git a/src/northbridge/intel/haswell/do_raminit_frag.c b/src/northbridge/intel/haswell/do_raminit_frag.c
index 4ce1221782..8cf59d2811 100644
--- a/src/northbridge/intel/haswell/do_raminit_frag.c
+++ b/src/northbridge/intel/haswell/do_raminit_frag.c
@@ -328,3 +328,33 @@ void* frag_fffa3f8c(void *hob)
}
return ppi;
}
+
+extern EFI_PEI_PPI_DESCRIPTOR ref_fffcc910;
+extern EFI_PEI_PPI_DESCRIPTOR PchMeUmaDesc;
+extern void __attribute((regparm(1))) mrc_init_memory(const EFI_PEI_SERVICES **pps);
+extern EFI_GUID mEfiMemoryRestoreDataGuid;
+
+void frag_fffa54e7(int bootmode, struct pei_data *pd);
+void frag_fffa54e7(int bootmode, struct pei_data *pd)
+{
+ const EFI_PEI_SERVICES **pps = *gpPei;
+
+ (*pps)->InstallPpi(pps, &ref_fffcc910);
+ mrc_printk("System Agent: Initializing PCH (Me UMA)\n");
+ (*pps)->InstallPpi(pps, &PchMeUmaDesc);
+ mrc_printk("System Agent: Initializing Memory\n");
+ mrc_init_memory(pps);
+
+ void *hob = locate_hob(&mEfiMemoryRestoreDataGuid, 0xfffe);
+ if (hob == NULL) {
+ if (bootmode != 0x11)
+ mrc_printk("System Agent: failed to locate restore data hob!\n");
+
+ pd->mrc_output_len = 0;
+ pd->mrc_output = NULL;
+ } else {
+ pd->mrc_output_len = *(uint32_t*)(hob + 0x18);
+ pd->mrc_output = (unsigned char*)(hob + 0x1c);
+ }
+ mrc_printk("System Agent: Done.\n");
+}
diff --git a/src/northbridge/intel/haswell/mrc.asm b/src/northbridge/intel/haswell/mrc.asm
index 964e693c57..8a370f5678 100644
--- a/src/northbridge/intel/haswell/mrc.asm
+++ b/src/northbridge/intel/haswell/mrc.asm
@@ -158,6 +158,8 @@ extern mrc_set_bars
extern frag_fffa3eec
extern frag_fffa3f8c
global ref_fffcc8bc
+extern frag_fffa54e7
+global ref_fffcc910
;; mrc_wdt
@@ -3946,64 +3948,18 @@ call PeiServiceNotifyPpi
lea eax, [ebp - 0x5e8]
call PeiServiceGetBootMode ; call 0xfffbf908
test eax, eax
-jne short loc_fffa54e7 ; jne 0xfffa54e7
+jne short loc_fffa54e7
cmp dword [ebp - 0x5e8], 0x11
-jne short loc_fffa54e7 ; jne 0xfffa54e7
+jne short loc_fffa54e7
mov eax, ref_fffcd554 ; mov eax, 0xfffcd554
call PeiServiceNotifyPpi
loc_fffa54e7:
-mov ecx, dword [ebp - 0x640]
-push eax
-push eax
-mov eax, dword [ecx]
-push ref_fffcc910 ; push 0xfffcc910
-push ecx
-call dword [eax + 0x18] ; ucall
-mov dword [esp], str_init_me_uma ; mov dword [esp], 0xfffcc65f
-call mrc_printk
-mov eax, dword [0xff7d7538]
-pop edx
-pop ecx
-mov edx, dword [eax]
-push PchMeUmaDesc
-push eax
-call dword [edx + 0x18] ; ucall
-mov dword [esp], str_init_memory ; mov dword [esp], 0xfffcc688
-call mrc_printk
-mov eax, dword [0xff7d7538]
-call mrc_init_memory
-mov edx, 0xfffe
-mov eax, mEfiMemoryRestoreDataGuid ; mov eax, 0xfffcd4c4
-call locate_hob
-add esp, 0x10
-test eax, eax
-jne short loc_fffa5573 ; jne 0xfffa5573
-cmp dword [ebp - 0x20c], 0x11
-je short loc_fffa555d ; je 0xfffa555d
-sub esp, 0xc
-push str_locate_restore_hob_failed
-call mrc_printk
-add esp, 0x10
-
-loc_fffa555d:
-mov eax, dword [ebp - 0x63c]
-mov dword [eax + 0x66], 0
-mov dword [eax + 0x62], 0
-jmp short loc_fffa5585 ; jmp 0xfffa5585
-loc_fffa5573:
-mov ecx, dword [ebp - 0x63c]
-mov edx, dword [eax + 0x18]
-add eax, 0x1c
-mov dword [ecx + 0x66], edx
-mov dword [ecx + 0x62], eax
-
-loc_fffa5585:
-sub esp, 0xc
-push str_sa_done
-call mrc_printk
-add esp, 0x10
+push dword [ebp - 0x63c]
+push dword [ebp - 0x20c]
+call frag_fffa54e7
+add esp, 8
xor eax, eax
jmp near loc_fffa56a4 ; jmp 0xfffa56a4
diff --git a/src/northbridge/intel/haswell/mrc_pei.h b/src/northbridge/intel/haswell/mrc_pei.h
index 65166fc9e6..d7262fff2a 100644
--- a/src/northbridge/intel/haswell/mrc_pei.h
+++ b/src/northbridge/intel/haswell/mrc_pei.h
@@ -175,5 +175,7 @@ int __attribute((regparm(1)))
PeiServiceNotifyPpi(const EFI_PEI_NOTIFY_DESCRIPTOR *NotifyList);
void init_pei_svc(EFI_PEI_SERVICES *sv);
+EFI_HOB_DATA * __attribute((regparm(2)))
+locate_hob(EFI_GUID *guid, uint16_t v);
#endif
diff --git a/src/northbridge/intel/haswell/pei_svc.c b/src/northbridge/intel/haswell/pei_svc.c
index d0ce344a75..8d6d958687 100644
--- a/src/northbridge/intel/haswell/pei_svc.c
+++ b/src/northbridge/intel/haswell/pei_svc.c
@@ -156,8 +156,6 @@ void init_pei_svc(EFI_PEI_SERVICES *sv)
}
EFI_HOB_DATA * __attribute((regparm(2)))
-locate_hob(EFI_GUID *guid, uint16_t v);
-EFI_HOB_DATA * __attribute((regparm(2)))
locate_hob(EFI_GUID *guid, uint16_t v)
{
EFI_HOB *hoblist;