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. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
b72cc8e145
commit
a31d4fd99d
|
@ -1,3 +1,13 @@
|
||||||
|
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>
|
2011-03-24 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
* dv-bfin_gpio.c (bfin_gpio_port_event): Split dir/inen bit checking.
|
* dv-bfin_gpio.c (bfin_gpio_port_event): Split dir/inen bit checking.
|
||||||
|
|
|
@ -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. */
|
lets us assume only those two values below. */
|
||||||
level = !!level;
|
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
|
/* Only screw with state if this pin is set as an input, and the
|
||||||
input is actually enabled. */
|
input is actually enabled. */
|
||||||
if ((port->dir & bit) || !(port->inen & bit))
|
if ((port->dir & bit) || !(port->inen & bit))
|
||||||
|
{
|
||||||
|
HW_TRACE ((me, "ignoring level/int due to DIR=%i INEN=%i",
|
||||||
|
!!(port->dir & bit), !!(port->inen & bit)));
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Get the old pin state for calculating an interrupt. */
|
/* Get the old pin state for calculating an interrupt. */
|
||||||
olvl = !!(port->data & bit);
|
olvl = !!(port->data & bit);
|
||||||
|
@ -224,29 +230,49 @@ bfin_gpio_port_event (struct hw *me, int my_port, struct hw *source,
|
||||||
{
|
{
|
||||||
/* Both edges. */
|
/* Both edges. */
|
||||||
if (olvl == nlvl)
|
if (olvl == nlvl)
|
||||||
|
{
|
||||||
|
HW_TRACE ((me, "ignoring int due to EDGE=%i BOTH=%i lvl=%i->%i",
|
||||||
|
!!(port->edge & bit), !!(port->both & bit),
|
||||||
|
olvl, nlvl));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Just one edge. */
|
/* Just one edge. */
|
||||||
if (!(((port->polar & bit) && olvl > nlvl)
|
if (!(((port->polar & bit) && olvl > nlvl)
|
||||||
|| (!(port->polar & bit) && olvl < nlvl)))
|
|| (!(port->polar & bit) && olvl < nlvl)))
|
||||||
|
{
|
||||||
|
HW_TRACE ((me, "ignoring int due to EDGE=%i POLAR=%i lvl=%i->%i",
|
||||||
|
!!(port->edge & bit), !!(port->polar & bit),
|
||||||
|
olvl, nlvl));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Pin is level triggered. */
|
/* Pin is level triggered. */
|
||||||
if (nlvl == !!(port->polar & bit))
|
if (nlvl == !!(port->polar & bit))
|
||||||
|
{
|
||||||
|
HW_TRACE ((me, "ignoring int due to EDGE=%i POLAR=%i lvl=%i",
|
||||||
|
!!(port->edge & bit), !!(port->polar & bit), nlvl));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* If the masks allow it, push the interrupt even higher. */
|
/* If the masks allow it, push the interrupt even higher. */
|
||||||
if (port->maska & bit)
|
if (port->maska & bit)
|
||||||
|
{
|
||||||
|
HW_TRACE ((me, "pin %i triggered an int via mask a", my_port));
|
||||||
hw_port_event (me, 0, 1);
|
hw_port_event (me, 0, 1);
|
||||||
|
}
|
||||||
if (port->maskb & bit)
|
if (port->maskb & bit)
|
||||||
|
{
|
||||||
|
HW_TRACE ((me, "pin %i triggered an int via mask b", my_port));
|
||||||
hw_port_event (me, 1, 1);
|
hw_port_event (me, 1, 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
attach_bfin_gpio_regs (struct hw *me, struct bfin_gpio *port)
|
attach_bfin_gpio_regs (struct hw *me, struct bfin_gpio *port)
|
||||||
|
|
|
@ -127,6 +127,7 @@ bfin_sic_forward_interrupts (struct hw *me, bu32 *isr, bu32 *imask, bu32 *iar)
|
||||||
iar_idx = my_port / 8;
|
iar_idx = my_port / 8;
|
||||||
iar_off = (my_port % 8) * 4;
|
iar_off = (my_port % 8) * 4;
|
||||||
iar_val = (iar[iar_idx] & (0xf << iar_off)) >> iar_off;
|
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);
|
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);
|
struct bfin_sic *sic = hw_data (me);
|
||||||
bu32 idx = DEC_SIC (my_port);
|
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. */
|
/* SIC only exists to forward interrupts from the system to the CEC. */
|
||||||
switch (idx)
|
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)
|
int source_port, int level)
|
||||||
{
|
{
|
||||||
struct bfin_sic *sic = hw_data (me);
|
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 only exists to forward interrupts from the system to the CEC. */
|
||||||
sic->bf537.isr |= bit;
|
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);
|
struct bfin_sic *sic = hw_data (me);
|
||||||
bu32 idx = DEC_SIC (my_port);
|
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. */
|
/* SIC only exists to forward interrupts from the system to the CEC. */
|
||||||
switch (idx)
|
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);
|
struct bfin_sic *sic = hw_data (me);
|
||||||
bu32 idx = DEC_SIC (my_port);
|
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. */
|
/* SIC only exists to forward interrupts from the system to the CEC. */
|
||||||
switch (idx)
|
switch (idx)
|
||||||
|
|
Loading…
Reference in New Issue