summaryrefslogtreecommitdiff
path: root/ArmPlatformPkg/Sec/Sec.c
diff options
context:
space:
mode:
Diffstat (limited to 'ArmPlatformPkg/Sec/Sec.c')
-rw-r--r--ArmPlatformPkg/Sec/Sec.c50
1 files changed, 32 insertions, 18 deletions
diff --git a/ArmPlatformPkg/Sec/Sec.c b/ArmPlatformPkg/Sec/Sec.c
index 2ae01d8e54..4de49329d4 100644
--- a/ArmPlatformPkg/Sec/Sec.c
+++ b/ArmPlatformPkg/Sec/Sec.c
@@ -15,6 +15,7 @@
#include <Library/DebugLib.h>
#include <Library/PcdLib.h>
+#include <Library/PrintLib.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/ArmLib.h>
@@ -24,6 +25,8 @@
#include <Library/SerialPortLib.h>
#include <Library/ArmPlatformLib.h>
+#define SerialPrint(txt) SerialPortWrite (txt, AsciiStrLen(txt)+1);
+
extern VOID *monitor_vector_table;
VOID ArmSetupGicNonSecure (
@@ -58,6 +61,9 @@ CEntryPoint (
IN UINTN CoreId
)
{
+ CHAR8 Buffer[100];
+ UINTN CharCount;
+
// Primary CPU clears out the SCU tag RAMs, secondaries wait
if (CoreId == 0) {
if (FixedPcdGet32(PcdMPCoreSupport)) {
@@ -67,8 +73,10 @@ CEntryPoint (
// SEC phase needs to run library constructors by hand. This assumes we are linked against the SerialLib
// In non SEC modules the init call is in autogenerated code.
SerialPortInitialize ();
+
// Start talking
- DEBUG ((EFI_D_ERROR, "UART Enabled\n"));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"UEFI firmware built at %a on %a\n\r",__TIME__, __DATE__);
+ SerialPortWrite ((UINT8 *) Buffer, CharCount);
// Now we've got UART, make the check:
// - The Vector table must be 32-byte aligned
@@ -172,7 +180,7 @@ CEntryPoint (
ArmWriteScr(SCR_NS | SCR_FW | SCR_AW);
} else {
if(0 == CoreId){
- DEBUG ((EFI_D_ERROR, "Trust Zone Configuration is disabled\n"));
+ SerialPrint ("Trust Zone Configuration is disabled\n\r");
}
//Trustzone is not enabled, just enable the Distributor and CPU interface
@@ -189,11 +197,12 @@ CEntryPoint (
if (CoreId == 0) {
UINTN* StartAddress = (UINTN*)PcdGet32(PcdEmbeddedFdBaseAddress);
- DEBUG ((EFI_D_ERROR, "Waiting for firmware at 0x%08X ...\n",StartAddress));
-
// Patch the DRAM to make an infinite loop at the start address
*StartAddress = 0xEAFFFFFE; // opcode for while(1)
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Waiting for firmware at 0x%08X ...\n\r",StartAddress);
+ SerialPortWrite ((UINT8 *) Buffer, CharCount);
+
// To enter into Non Secure state, we need to make a return from exception
return_from_exception(PcdGet32(PcdEmbeddedFdBaseAddress));
} else {
@@ -208,10 +217,6 @@ CEntryPoint (
return_from_exception((UINTN)NonSecureWaitForFirmware);
}
} else {
- if (CoreId == 0) {
- DEBUG ((EFI_D_ERROR, "Standalone Firmware\n"));
- }
-
// To enter into Non Secure state, we need to make a return from exception
return_from_exception(PcdGet32(PcdEmbeddedFdBaseAddress));
}
@@ -241,35 +246,44 @@ VOID NonSecureWaitForFirmware() {
ASSERT (FALSE);
}
-VOID SecCommonExceptionEntry(UINT32 Entry, UINT32 LR) {
+VOID
+SecCommonExceptionEntry (
+ IN UINT32 Entry,
+ IN UINT32 LR
+ )
+{
+ CHAR8 Buffer[100];
+ UINTN CharCount;
+
switch (Entry) {
case 0:
- DEBUG((EFI_D_ERROR,"Reset Exception at 0x%X\n",LR));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Reset Exception at 0x%X\n\r",LR);
break;
case 1:
- DEBUG((EFI_D_ERROR,"Undefined Exception at 0x%X\n",LR));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Undefined Exception at 0x%X\n\r",LR);
break;
case 2:
- DEBUG((EFI_D_ERROR,"SWI Exception at 0x%X\n",LR));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"SWI Exception at 0x%X\n\r",LR);
break;
case 3:
- DEBUG((EFI_D_ERROR,"PrefetchAbort Exception at 0x%X\n",LR));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"PrefetchAbort Exception at 0x%X\n\r",LR);
break;
case 4:
- DEBUG((EFI_D_ERROR,"DataAbort Exception at 0x%X\n",LR));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"DataAbort Exception at 0x%X\n\r",LR);
break;
case 5:
- DEBUG((EFI_D_ERROR,"Reserved Exception at 0x%X\n",LR));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Reserved Exception at 0x%X\n\r",LR);
break;
case 6:
- DEBUG((EFI_D_ERROR,"IRQ Exception at 0x%X\n",LR));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"IRQ Exception at 0x%X\n\r",LR);
break;
case 7:
- DEBUG((EFI_D_ERROR,"FIQ Exception at 0x%X\n",LR));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"FIQ Exception at 0x%X\n\r",LR);
break;
default:
- DEBUG((EFI_D_ERROR,"Unknown Exception at 0x%X\n",LR));
+ CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Unknown Exception at 0x%X\n\r",LR);
break;
}
+ SerialPortWrite ((UINT8 *) Buffer, CharCount);
while(1);
}