Make sure FIQ debugger stuff can work.
authorandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 13 Apr 2010 22:30:42 +0000 (22:30 +0000)
committerandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 13 Apr 2010 22:30:42 +0000 (22:30 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10369 6f19259b-4bc3-4df7-8a09-765794883524

ArmPkg/Library/ArmLib/ArmV7/ArmV7Support.asm
Omap35xxPkg/Include/Omap3530/Omap3530Interrupt.h
Omap35xxPkg/InterruptDxe/HardwareInterrupt.c

index 64c8207..41f8e22 100644 (file)
@@ -86,7 +86,6 @@ ArmCleanDataCacheEntryBySetWay
 
 ArmInvalidateInstructionCache
   mcr     p15,0,R0,c7,c5,0      ;Invalidate entire instruction cache
-  dsb
   isb
   bx      LR
 
@@ -228,3 +227,4 @@ ArmInstructionSynchronizationBarrier
   bx      LR
 
     END
+
index 23b9945..e4a27fe 100644 (file)
@@ -39,6 +39,7 @@
 #define INTCPS_PENDING_FIQ(n) (INTERRUPT_BASE + 0x009C + (0x20 * (n)))
 #define INTCPS_ILR(m)         (INTERRUPT_BASE + 0x0100 + (0x04 * (m)))
 
+#define INTCPS_ILR_FIQ            BIT0
 #define INTCPS_SIR_IRQ_MASK       (0x7F)
 #define INTCPS_CONTROL_NEWIRQAGR  BIT0
 #define INTCPS_CONTROL_NEWFIQAGR  BIT1
index 72135c2..8ffdc0b 100644 (file)
@@ -87,6 +87,14 @@ RegisterInterruptSource (
     return EFI_UNSUPPORTED;\r
   } \r
   \r
+  if ((MmioRead32 (INTCPS_ILR(Source)) & INTCPS_ILR_FIQ) == INTCPS_ILR_FIQ) {\r
+    // This vector has been programmed as FIQ so we can't use it for IRQ\r
+    // EFI does not use FIQ, but the debugger can use it to check for \r
+    // ctrl-c. So this ASSERT means you have a conflict with the debug agent\r
+    ASSERT (FALSE);\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+  \r
   if ((Handler == NULL) && (gRegisteredInterruptHandlers[Source] == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -203,7 +211,7 @@ GetInterruptSourceState (
   Bank = Source / 32;\r
   Bit  = 1UL << (Source % 32);\r
     \r
-  if ((MmioRead32 (INTCPS_MIR(Bank)) & Bit) == Bit) {\r
+  if ((MmioRead32(INTCPS_MIR(Bank)) & Bit) == Bit) {\r
     *InterruptState = FALSE;\r
   } else {\r
     *InterruptState = TRUE;\r