diff options
author | Iru Cai <mytbk920423@gmail.com> | 2018-12-24 00:15:28 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2019-11-17 15:10:44 +0800 |
commit | 0758286f8df1e686454725ef0da882d9560028e6 (patch) | |
tree | 4173e732a5cff611ab6f92c39cfcbd744bc17c40 | |
parent | 93e69d4121ca824d718675847c84e9a937e77a60 (diff) | |
download | coreboot-0758286f8df1e686454725ef0da882d9560028e6.tar.xz |
frag_fffa54e7
-rw-r--r-- | src/northbridge/intel/haswell/do_raminit_frag.c | 30 | ||||
-rw-r--r-- | src/northbridge/intel/haswell/mrc.asm | 60 | ||||
-rw-r--r-- | src/northbridge/intel/haswell/mrc_pei.h | 2 | ||||
-rw-r--r-- | src/northbridge/intel/haswell/pei_svc.c | 2 |
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; |