This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] sim: bfin: add hw tracing to gpio/sic port events


Makes it a lot easier to find out what's going on with interrupt lines
if the ports have tracing output.

Committed.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>

2011-03-24  Mike Frysinger  <vapier@gentoo.org>

	* dv-bfin_gpio.c (bfin_gpio_port_event): Call HW_TRACE at every
	major code flow point.
	* dv-bfin_sic.c (bfin_sic_forward_interrupts): Call HW_TRACE just
	before calling hw_port_event on ourselves.
	(bfin_sic_52x_port_event, bfin_sic_537_port_event,
	bfin_sic_54x_port_event, bfin_sic_561_port_event): Call HW_TRACE
	at the start of the function.
---
 sim/bfin/dv-bfin_gpio.c |   38 ++++++++++++++++++++++++++++++++------
 sim/bfin/dv-bfin_sic.c  |   26 ++++++++++++++++++++++----
 2 files changed, 54 insertions(+), 10 deletions(-)

diff --git a/sim/bfin/dv-bfin_gpio.c b/sim/bfin/dv-bfin_gpio.c
index e9b79a8..6847b52 100644
--- a/sim/bfin/dv-bfin_gpio.c
+++ b/sim/bfin/dv-bfin_gpio.c
@@ -203,10 +203,16 @@ bfin_gpio_port_event (struct hw *me, int my_port, struct hw *source,
      lets us assume only those two values below.  */
   level = !!level;
 
+  HW_TRACE ((me, "pin %i set to %i", my_port, level));
+
   /* Only screw with state if this pin is set as an input, and the
      input is actually enabled.  */
   if ((port->dir & bit) || !(port->inen & bit))
-    return;
+    {
+      HW_TRACE ((me, "ignoring level/int due to DIR=%i INEN=%i",
+		 !!(port->dir & bit), !!(port->inen & bit)));
+      return;
+    }
 
   /* Get the old pin state for calculating an interrupt.  */
   olvl = !!(port->data & bit);
@@ -224,28 +230,48 @@ bfin_gpio_port_event (struct hw *me, int my_port, struct hw *source,
 	{
 	  /* Both edges.  */
 	  if (olvl == nlvl)
-	    return;
+	    {
+	      HW_TRACE ((me, "ignoring int due to EDGE=%i BOTH=%i lvl=%i->%i",
+			 !!(port->edge & bit), !!(port->both & bit),
+			 olvl, nlvl));
+	      return;
+	    }
 	}
       else
 	{
 	  /* Just one edge.  */
 	  if (!(((port->polar & bit) && olvl > nlvl)
 		|| (!(port->polar & bit) && olvl < nlvl)))
-	    return;
+	    {
+	      HW_TRACE ((me, "ignoring int due to EDGE=%i POLAR=%i lvl=%i->%i",
+			 !!(port->edge & bit), !!(port->polar & bit),
+			 olvl, nlvl));
+	      return;
+	    }
 	}
     }
   else
     {
       /* Pin is level triggered.  */
       if (nlvl == !!(port->polar & bit))
-	return;
+	{
+	  HW_TRACE ((me, "ignoring int due to EDGE=%i POLAR=%i lvl=%i",
+		     !!(port->edge & bit), !!(port->polar & bit), nlvl));
+	  return;
+	}
     }
 
   /* If the masks allow it, push the interrupt even higher.  */
   if (port->maska & bit)
-    hw_port_event (me, 0, 1);
+    {
+      HW_TRACE ((me, "pin %i triggered an int via mask a", my_port));
+      hw_port_event (me, 0, 1);
+    }
   if (port->maskb & bit)
-    hw_port_event (me, 1, 1);
+    {
+      HW_TRACE ((me, "pin %i triggered an int via mask b", my_port));
+      hw_port_event (me, 1, 1);
+    }
 }
 
 static void
diff --git a/sim/bfin/dv-bfin_sic.c b/sim/bfin/dv-bfin_sic.c
index f77bc07..3578388 100644
--- a/sim/bfin/dv-bfin_sic.c
+++ b/sim/bfin/dv-bfin_sic.c
@@ -127,6 +127,7 @@ bfin_sic_forward_interrupts (struct hw *me, bu32 *isr, bu32 *imask, bu32 *iar)
       iar_idx = my_port / 8;
       iar_off = (my_port % 8) * 4;
       iar_val = (iar[iar_idx] & (0xf << iar_off)) >> iar_off;
+      HW_TRACE ((me, "forwarding int %i to CEC", IVG7 + iar_val));
       hw_port_event (me, IVG7 + iar_val, 1);
     }
 }
@@ -763,7 +764,11 @@ bfin_sic_52x_port_event (struct hw *me, int my_port, struct hw *source,
 {
   struct bfin_sic *sic = hw_data (me);
   bu32 idx = DEC_SIC (my_port);
-  bu32 bit = 1 << DEC_PIN (my_port);
+  bu32 pin = DEC_PIN (my_port);
+  bu32 bit = 1 << pin;
+
+  HW_TRACE ((me, "processing system int from %i (SIC %u pin %u)",
+	     my_port, idx, pin));
 
   /* SIC only exists to forward interrupts from the system to the CEC.  */
   switch (idx)
@@ -873,7 +878,12 @@ bfin_sic_537_port_event (struct hw *me, int my_port, struct hw *source,
 			 int source_port, int level)
 {
   struct bfin_sic *sic = hw_data (me);
-  bu32 bit = 1 << DEC_PIN (my_port);
+  bu32 idx = DEC_SIC (my_port);
+  bu32 pin = DEC_PIN (my_port);
+  bu32 bit = 1 << pin;
+
+  HW_TRACE ((me, "processing system int from %i (SIC %u pin %u)",
+	     my_port, idx, pin));
 
   /* SIC only exists to forward interrupts from the system to the CEC.  */
   sic->bf537.isr |= bit;
@@ -1056,7 +1066,11 @@ bfin_sic_54x_port_event (struct hw *me, int my_port, struct hw *source,
 {
   struct bfin_sic *sic = hw_data (me);
   bu32 idx = DEC_SIC (my_port);
-  bu32 bit = 1 << DEC_PIN (my_port);
+  bu32 pin = DEC_PIN (my_port);
+  bu32 bit = 1 << pin;
+
+  HW_TRACE ((me, "processing system int from %i (SIC %u pin %u)",
+	     my_port, idx, pin));
 
   /* SIC only exists to forward interrupts from the system to the CEC.  */
   switch (idx)
@@ -1156,7 +1170,11 @@ bfin_sic_561_port_event (struct hw *me, int my_port, struct hw *source,
 {
   struct bfin_sic *sic = hw_data (me);
   bu32 idx = DEC_SIC (my_port);
-  bu32 bit = 1 << DEC_PIN (my_port);
+  bu32 pin = DEC_PIN (my_port);
+  bu32 bit = 1 << pin;
+
+  HW_TRACE ((me, "processing system int from %i (SIC %u pin %u)",
+	     my_port, idx, pin));
 
   /* SIC only exists to forward interrupts from the system to the CEC.  */
   switch (idx)
-- 
1.7.4.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]