diff options
Diffstat (limited to 'ArmPlatformPkg/Sec/Sec.c')
-rw-r--r-- | ArmPlatformPkg/Sec/Sec.c | 50 |
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); } |