+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.
+
2011-03-24 Mike Frysinger <vapier@gentoo.org>
* dv-bfin_gpio.c (bfin_gpio_port_event): Split dir/inen bit checking.
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);
{
/* 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
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);
}
}
{
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)
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;
{
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)
{
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)