summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/gen5200/irq/irq.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-12-11 15:46:33 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-12-11 15:46:33 +0000
commit5023c87431b2c2f7b18251fa54028cd0b797fcb1 (patch)
tree29db4c1733f71b6e5ddccb0f78bbb8d0cb4861cf /c/src/lib/libbsp/powerpc/gen5200/irq/irq.c
parent2007-12-11 Joel Sherrill <joel.sherrill@OARcorp.com> (diff)
downloadrtems-5023c87431b2c2f7b18251fa54028cd0b797fcb1.tar.bz2
2007-12-11 Joel Sherrill <joel.sherrill@OARcorp.com>
* bsp_specs, clock/clock.c, include/bsp.h, irq/irq.c, startup/bspclean.c, startup/bspstart.c: Eliminate copies of the Configuration Table. Use the RTEMS provided accessor macros to obtain configuration fields.
Diffstat (limited to 'c/src/lib/libbsp/powerpc/gen5200/irq/irq.c')
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/irq/irq.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen5200/irq/irq.c b/c/src/lib/libbsp/powerpc/gen5200/irq/irq.c
index 2914452f23..b792ca5fe7 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/irq/irq.c
+++ b/c/src/lib/libbsp/powerpc/gen5200/irq/irq.c
@@ -631,6 +631,50 @@ int BSP_rtems_irq_mngt_get(rtems_irq_global_settings** config)
return 0;
}
+#include <stdio.h>
+uint64_t BSP_Starting_TBR;
+uint64_t BSP_Total_in_ISR;
+uint32_t BSP_ISR_Count;
+uint32_t BSP_Worst_ISR;
+#define BSP_COUNTED_IRQ 16
+uint32_t BSP_ISR_Count_Per[BSP_COUNTED_IRQ + 1];
+
+void BSP_initialize_IRQ_Timing(void)
+{
+ int i;
+ BSP_Starting_TBR = PPC_Get_timebase_register();
+ BSP_Total_in_ISR = 0;
+ BSP_ISR_Count = 0;
+ BSP_Worst_ISR = 0;
+ for ( i=0 ; i<BSP_COUNTED_IRQ ; i++ )
+ BSP_ISR_Count_Per[i] = 0;
+}
+
+static const char * u64tostring(
+ char *buffer,
+ uint64_t v
+)
+{
+ sprintf( buffer, "%lld %lld usecs", v, (v / 33) );
+ return buffer;
+}
+void BSP_report_IRQ_Timing(void)
+{
+ uint64_t now;
+ char buffer[96];
+ int i;
+
+ now = PPC_Get_timebase_register();
+ printk( "Started at: %s\n", u64tostring(buffer, BSP_Starting_TBR) );
+ printk( "Current : %s\n", u64tostring(buffer, now) );
+ printk( "System up : %s\n", u64tostring(buffer, now - BSP_Starting_TBR) );
+ printk( "ISRs : %d\n", BSP_ISR_Count );
+ printk( "ISRs ran : %s\n", u64tostring(buffer, BSP_Total_in_ISR) );
+ printk( "Worst ISR : %s\n", u64tostring(buffer, BSP_Worst_ISR) );
+ for ( i=0 ; i<BSP_COUNTED_IRQ ; i++ )
+ printk( "IRQ %d: %d\n", i, BSP_ISR_Count_Per[i] );
+ printk( "Ticks : %d\n", Clock_driver_ticks );
+}
/*
* High level IRQ handler called from shared_raw_irq_code_entry
@@ -642,6 +686,14 @@ int C_dispatch_irq_handler (CPU_Interrupt_frame *frame, unsigned int excNum)
register unsigned int new_msr;
register unsigned int pmce;
register unsigned int crit_pri_main_mask, per_mask;
+ uint64_t start, stop, thisTime;
+
+ start = PPC_Get_timebase_register();
+ BSP_ISR_Count++;
+ if ( excNum < BSP_COUNTED_IRQ )
+ BSP_ISR_Count_Per[excNum]++;
+ else
+ printk( "not counting %d\n", excNum);
switch (excNum) {
/*