summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2018-12-24 20:49:02 +0800
committerIru Cai <mytbk920423@gmail.com>2019-11-17 15:10:44 +0800
commitb65a87b52ac82b1f0d199e856f4983b49438976c (patch)
treeb644f3918d7a5c81e1d9da9e46363c8e72511689
parentb8b66f0541d0d77a1384fdd6676882aa3ffb0c97 (diff)
downloadcoreboot-b65a87b52ac82b1f0d199e856f4983b49438976c.tar.xz
frag_fffa3aa7, frag_fffa3ba4, frag_fffa3c1b
-rw-r--r--src/northbridge/intel/haswell/do_raminit_frag.c79
-rw-r--r--src/northbridge/intel/haswell/mrc.asm158
2 files changed, 96 insertions, 141 deletions
diff --git a/src/northbridge/intel/haswell/do_raminit_frag.c b/src/northbridge/intel/haswell/do_raminit_frag.c
index 24bbd0d964..13e647251e 100644
--- a/src/northbridge/intel/haswell/do_raminit_frag.c
+++ b/src/northbridge/intel/haswell/do_raminit_frag.c
@@ -9,6 +9,7 @@
#include "pei_data.h"
#include "pei_usb.h"
#include "pei_ram.h"
+#include "mrc_sku.h"
static void io_fffa3c2e(void)
{
@@ -373,3 +374,81 @@ void frag_fffa3fd4(pei_raminit_ppi *ram_ppi)
write32((void*)(dmibar + 0x720), 0x1060100);
}
}
+
+void frag_fffa3ba4(PEI_USB *pusb);
+void frag_fffa3ba4(PEI_USB *pusb)
+{
+ int nb_ehci = nb_usb2_ports();
+
+ for (int i = 0; i < nb_ehci; i++) {
+ PEI_EHCI *setting = &pusb->ehci_settings[i];
+ uint8_t loc = setting->location;
+ if (loc == 5) {
+ setting->f4 = 5;
+ setting->f5 = 2;
+ } else if (loc == 2) {
+ setting->f4 = 4;
+ setting->f5 = 2 - (setting->length < 0x50);
+ } else if (setting->length <= 0x6f) {
+ setting->f4 = 5;
+ setting->f5 = 2;
+ } else {
+ setting->f4 = 6;
+ if (setting->length <= 0xff) {
+ setting->f5 = 2;
+ } else {
+ setting->f5 = 3;
+ }
+ }
+ }
+}
+
+void frag_fffa3aa7(PEI_USB *pusb);
+void frag_fffa3aa7(PEI_USB *pusb)
+{
+ int nb_ehci = nb_usb2_ports();
+
+ for (int i = 0; i < nb_ehci; i++) {
+ PEI_EHCI *setting = &pusb->ehci_settings[i];
+ uint8_t loc = setting->location;
+ if (loc == 0) {
+ setting->f4 = 4;
+ if (setting->length <= 0x7f) {
+ setting->f5 = 2;
+ }
+ setting->f5 = 4 - (setting->length < 0x130);
+ } else {
+ setting->f4 = 3;
+ setting->f5 = 2;
+ }
+ }
+}
+
+void frag_fffa3c1b(PEI_USB *pusb);
+void frag_fffa3c1b(PEI_USB *pusb)
+{
+ int nb_ehci = nb_usb2_ports();
+
+ for (int i = 0; i < nb_ehci; i++) {
+ PEI_EHCI *setting = &pusb->ehci_settings[i];
+ uint8_t loc = setting->location;
+ if (loc == 0 || loc == 3) {
+ if (setting->length > 0x6f) {
+ setting->f4 = 6;
+ if (setting->length > 0xff)
+ setting->f5 = 3;
+ else
+ setting->f5 = 2;
+ } else {
+ setting->f4 = 5;
+ setting->f5 = 2;
+ }
+ } else if (loc == 2) {
+ setting->f4 = 0x50;
+ setting->f5 = 2 - (setting->length < 0x50);
+ } else {
+ setting->f4 = 5;
+ setting->f5 = 2;
+ }
+ }
+}
diff --git a/src/northbridge/intel/haswell/mrc.asm b/src/northbridge/intel/haswell/mrc.asm
index 61f9b70669..5915d2f190 100644
--- a/src/northbridge/intel/haswell/mrc.asm
+++ b/src/northbridge/intel/haswell/mrc.asm
@@ -163,6 +163,9 @@ global ref_fffcc8bc
extern frag_fffa54e7
global ref_fffcc910
extern frag_fffa3fd4
+extern frag_fffa3aa7
+extern frag_fffa3ba4
+extern frag_fffa3c1b
;; mrc_wdt
@@ -2703,168 +2706,41 @@ call is_mobile_pch
pop edx
pop edx
test eax, eax
-jne loc_fffa3ba2
+jne loc_fffa3ba4
add dx, 0x63bf
-xor ebx, ebx
cmp dx, 6
jbe loc_fffa3ba4 ; all LP PCH
jmp near loc_fffa3ab5 ; jmp 0xfffa3ab5
-
-loc_fffa3a6d:
-imul eax, ebx, 6
-lea eax, [ebp + eax - 0x402]
-cmp byte [eax + 1], 0
-jne short loc_fffa3a8d ; jne 0xfffa3a8d
-mov dx, word [eax + 2]
-mov byte [eax + 4], 4
-cmp dx, 0x7f
-jbe short loc_fffa3a91 ; jbe 0xfffa3a91
-jmp short loc_fffa3a97 ; jmp 0xfffa3a97
-
-loc_fffa3a8d:
-mov byte [eax + 4], 3
-
-loc_fffa3a91:
-mov byte [eax + 5], 2
-jmp short loc_fffa3aa4 ; jmp 0xfffa3aa4
-
-loc_fffa3a97:
-cmp dx, 0x130
-sbb edx, edx
-add edx, 4
-mov byte [eax + 5], dl
-
-loc_fffa3aa4:
-inc ebx
-jmp short loc_fffa3aa9 ; jmp 0xfffa3aa9
-
loc_fffa3aa7:
-xor ebx, ebx
-
-loc_fffa3aa9:
-call nb_usb2_ports
-movzx eax, al
-cmp ebx, eax
-jl short loc_fffa3a6d ; jl 0xfffa3a6d
+lea eax, [ebp - 0x403]
+push eax
+call frag_fffa3aa7
+add esp, 4
loc_fffa3ab5:
call mrc_frag_pch
call mrc_frag_smbus
jmp loc_init_usb
-loc_fffa3b4e:
-imul eax, ebx, 6
-lea eax, [ebp + eax - 0x402]
-mov dl, byte [eax + 1]
-cmp dl, 5
-jne short loc_fffa3b62 ; jne 0xfffa3b62
-jmp short loc_fffa3b84 ; jmp 0xfffa3b84
-
-loc_fffa3b62:
-cmp dl, 2
-jne short loc_fffa3b7a ; jne 0xfffa3b7a
-cmp word [eax + 2], 0x50
-mov byte [eax + 4], 4
-sbb edx, edx
-add edx, 2
-mov byte [eax + 5], dl
-jmp short loc_fffa3b9f ; jmp 0xfffa3b9f
-
-loc_fffa3b7a:
-mov dx, word [eax + 2]
-cmp dx, 0x6f
-ja short loc_fffa3b8a ; ja 0xfffa3b8a
-
-loc_fffa3b84:
-mov byte [eax + 4], 5
-jmp short loc_fffa3b95 ; jmp 0xfffa3b95
-
-loc_fffa3b8a:
-cmp dx, 0xff
-mov byte [eax + 4], 6
-ja short loc_fffa3b9b ; ja 0xfffa3b9b
-
-loc_fffa3b95:
-mov byte [eax + 5], 2
-jmp short loc_fffa3b9f ; jmp 0xfffa3b9f
-
-loc_fffa3b9b:
-mov byte [eax + 5], 3
-
-loc_fffa3b9f:
-inc ebx
-jmp short loc_fffa3ba4 ; jmp 0xfffa3ba4
-
-loc_fffa3ba2:
-xor ebx, ebx
-
loc_fffa3ba4:
-call nb_usb2_ports
-movzx eax, al
-cmp ebx, eax
-jl short loc_fffa3b4e ; jl 0xfffa3b4e
+lea eax, [ebp - 0x403]
+push eax
+call frag_fffa3ba4
+add esp, 4
+
jmp near loc_fffa3ab5 ; jmp 0xfffa3ab5
loc_fffa3bb5:
cmp eax, 2
jne loc_fffa3ab5 ; jne 0xfffa3ab5
-jmp short loc_fffa3c1b ; jmp 0xfffa3c1b
-
-loc_fffa3bc0:
-imul eax, ebx, 6
-lea esi, [ebp + eax - 0x402]
-mov al, byte [esi + 1]
-cmp al, 3
-sete cl
-test al, al
-sete dl
-or cl, dl
-je short loc_fffa3bf3 ; je 0xfffa3bf3
-mov ax, word [esi + 2]
-cmp ax, 0x6f
-ja short loc_fffa3be7 ; ja 0xfffa3be7
-jmp short loc_fffa3c0a ; jmp 0xfffa3c0a
-
-loc_fffa3be7:
-cmp ax, 0xff
-mov byte [esi + 4], 6
-ja short loc_fffa3c14 ; ja 0xfffa3c14
-jmp short loc_fffa3c0e ; jmp 0xfffa3c0e
-
-loc_fffa3bf3:
-cmp al, 2
-jne short loc_fffa3c0a ; jne 0xfffa3c0a
-cmp word [esi + 2], 0x50
-mov byte [esi + 4], 4
-sbb eax, eax
-add eax, 2
-mov byte [esi + 5], al
-jmp short loc_fffa3c18 ; jmp 0xfffa3c18
-
-loc_fffa3c0a:
-mov byte [esi + 4], 5
-
-loc_fffa3c0e:
-mov byte [esi + 5], 2
-jmp short loc_fffa3c18 ; jmp 0xfffa3c18
-
-loc_fffa3c14:
-mov byte [esi + 5], 3
-loc_fffa3c18:
-inc ebx
-jmp short loc_fffa3c1d ; jmp 0xfffa3c1d
-
-loc_fffa3c1b:
-xor ebx, ebx
+lea eax, [ebp - 0x403]
+push eax
+call frag_fffa3c1b
+add esp, 4
-loc_fffa3c1d:
-call nb_usb2_ports
-movzx eax, al
-cmp ebx, eax
-jl short loc_fffa3bc0 ; jl 0xfffa3bc0
jmp near loc_fffa3ab5 ; jmp 0xfffa3ab5
loc_init_usb: