]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/Sec/Sec.c
ArmPlatformPkg: Use Serial print function to print out non debugging information
[mirror_edk2.git] / ArmPlatformPkg / Sec / Sec.c
index 2ae01d8e541fccb939ecc8103778b9b54f70d30f..4de49329d45b9e24fb9fa4b3dfef519abe907d5c 100644 (file)
@@ -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);
 }