Skip to content

Commit

Permalink
patch edid to fix garbled screen ( 8 apple logos) on second stage boot
Browse files Browse the repository at this point in the history
  • Loading branch information
hereisderek committed Nov 25, 2017
1 parent 96a1c63 commit ee301ef
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 1 deletion.
90 changes: 89 additions & 1 deletion rEFIt_UEFI/Platform/Edid.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ UINT8* getCurrentEdid (VOID)
}

// EDID code was rewritten by Sherlocks
// HorizontalSyncPulseWidth: 64 - "HorizontalSyncPulseWidth"
// VideoInputSignal: 20 - "VideoInputSignal"
EFI_STATUS GetEdidDiscovered(VOID)
{
EFI_STATUS Status;
Expand Down Expand Up @@ -190,6 +192,36 @@ EFI_STATUS GetEdidDiscovered(VOID)
}
}
}

// fixes garbled apple logo during second stage boot
MsgLog("1. EdidFixHorizontalSyncPulseWidth: 0x%02x, EdidFixVideoInputSignal: 0x%02x\n", gSettings.EdidFixHorizontalSyncPulseWidth, gSettings.EdidFixVideoInputSignal);
if (gSettings.EdidFixHorizontalSyncPulseWidth || gSettings.EdidFixVideoInputSignal) {
if (gSettings.EdidFixHorizontalSyncPulseWidth) {
((UINT8*)gSettings.CustomEDID)[64] = gSettings.EdidFixHorizontalSyncPulseWidth;
}
if (gSettings.EdidFixVideoInputSignal) {
((UINT8*)gSettings.CustomEDID)[20] = gSettings.EdidFixVideoInputSignal;
}

((UINT8*)gSettings.CustomEDID)[127] = (UINT8)(256 - Checksum8(gSettings.CustomEDID, 127));

if (!GlobalConfig.DebugLog) {
MsgLog("------- New Custom EDID Table\n");
for (i=0; i<N; i+=10) {
MsgLog("%03d |", i);
for (j=0; j<10; j++) {
if (i+j > N-1) break;
MsgLog(" %02x", gSettings.CustomEDID[i+j]);
}
MsgLog("\n");
}
}
} else {
MsgLog("EdidFixHorizontalSyncPulseWidth and EdidFixVideoInputSignal not found\n");
// ((UINT8*)gSettings.CustomEDID)[127] = (UINT8)(100);
}


}
return Status;
} else if (N == 0) {
Expand Down Expand Up @@ -277,6 +309,35 @@ EFI_STATUS GetEdidDiscovered(VOID)
}
}
}

// fixes garbled apple logo during second stage boot
MsgLog("2. EdidFixHorizontalSyncPulseWidth: 0x%02x, EdidFixVideoInputSignal: 0x%02x\n", gSettings.EdidFixHorizontalSyncPulseWidth, gSettings.EdidFixVideoInputSignal);
if (gSettings.EdidFixHorizontalSyncPulseWidth || gSettings.EdidFixVideoInputSignal) {
if (gSettings.EdidFixHorizontalSyncPulseWidth) {
((UINT8*)gEDID)[64] = gSettings.EdidFixHorizontalSyncPulseWidth;
}
if (gSettings.EdidFixVideoInputSignal) {
((UINT8*)gEDID)[20] = gSettings.EdidFixVideoInputSignal;
}
((UINT8*)gEDID)[127] = (UINT8)(256 - Checksum8(gSettings.CustomEDID, 127));
gSettings.CustomEDID = gEDID;


if (!GlobalConfig.DebugLog) {
MsgLog("------- New EDID Table\n");
for (i=0; i<N; i+=10) {
MsgLog("%03d |", i);
for (j=0; j<10; j++) {
if (i+j > N-1) break;
MsgLog(" %02x", gEDID[i+j]);
}
MsgLog("\n");
}
}
} else {
MsgLog("EdidFixHorizontalSyncPulseWidth and EdidFixVideoInputSignal not found\n");
}

} else if (gSettings.CustomEDID) {
MsgLog(" Use Custom EDID\n");

Expand Down Expand Up @@ -370,6 +431,34 @@ EFI_STATUS GetEdidDiscovered(VOID)
}
}
}

// fixes garbled apple logo during second stage boot
MsgLog("3. EdidFixHorizontalSyncPulseWidth: 0x%02x, EdidFixVideoInputSignal: 0x%02x\n", gSettings.EdidFixHorizontalSyncPulseWidth, gSettings.EdidFixVideoInputSignal);
if (gSettings.EdidFixHorizontalSyncPulseWidth || gSettings.EdidFixVideoInputSignal) {
if (gSettings.EdidFixHorizontalSyncPulseWidth) {
((UINT8*)gSettings.CustomEDID)[64] = gSettings.EdidFixHorizontalSyncPulseWidth;
}
if (gSettings.EdidFixVideoInputSignal) {
((UINT8*)gSettings.CustomEDID)[20] = gSettings.EdidFixVideoInputSignal;
}

((UINT8*)gSettings.CustomEDID)[127] = (UINT8)(256 - Checksum8(gSettings.CustomEDID, 127));

if (!GlobalConfig.DebugLog) {
MsgLog("------- New Custom EDID Table\n");
for (i=0; i<N; i+=10) {
MsgLog("%03d |", i);
for (j=0; j<10; j++) {
if (i+j > N-1) break;
MsgLog(" %02x", gSettings.CustomEDID[i+j]);
}
MsgLog("\n");
}
}
} else {
MsgLog("EdidFixHorizontalSyncPulseWidth and EdidFixVideoInputSignal not found\n");
}

}
} else {
//MsgLog ("Not Inject EDID\n");
Expand All @@ -393,4 +482,3 @@ EFI_STATUS GetEdidDiscovered(VOID)
return Status;
}


2 changes: 2 additions & 0 deletions rEFIt_UEFI/Platform/Platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -1003,6 +1003,8 @@ typedef struct {
BOOLEAN LpcTune;
UINT16 DropOEM_DSM;
UINT8 *CustomEDID;
UINT8 EdidFixHorizontalSyncPulseWidth;
UINT8 EdidFixVideoInputSignal;

CHAR16 FBName[16];
UINT16 VideoPorts;
Expand Down
15 changes: 15 additions & 0 deletions rEFIt_UEFI/Platform/Settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -2290,6 +2290,21 @@ GetEDIDSettings(TagPtr DictPointer)
gSettings.ProductEDID = (UINT16)GetPropertyInteger(Prop, gSettings.ProductEDID);
//DBG(" ProductID = 0x%04lx\n", gSettings.ProductEDID);
}


Prop = GetProperty (Dict, "HorizontalSyncPulseWidth");
if (Prop) {
gSettings.EdidFixHorizontalSyncPulseWidth = (UINT8)GetPropertyInteger(Prop, gSettings.EdidFixHorizontalSyncPulseWidth);
DBG(" EdidFixHorizontalSyncPulseWidth = 0x%04lx\n", gSettings.EdidFixHorizontalSyncPulseWidth);
}


Prop = GetProperty (Dict, "VideoInputSignal");
if (Prop) {
gSettings.EdidFixVideoInputSignal = (UINT8)GetPropertyInteger(Prop, gSettings.EdidFixVideoInputSignal);
DBG(" EdidFixVideoInputSignal = 0x%04lx\n", gSettings.EdidFixVideoInputSignal);
}

} else {
//DBG ("Not Inject EDID\n");
}
Expand Down

0 comments on commit ee301ef

Please sign in to comment.