hi all
my platform : imx8mm
Linux version : 5.10
I am in troubled in mcp251xfd-core.c of kernel driver. When I setting the data , it is alwayse call trace.
I traced the mcp251xfd-core.c and I find the problem is mcp251xfd_irq. Please see the attach file.
static irqreturn_t mcp251xfd_irq(int irq, void *dev_id)
{
struct mcp251xfd_priv *priv = dev_id;
irqreturn_t handled = IRQ_NONE;
int err;
int val;
if (priv->rx_int)
do {
int rx_pending;
rx_pending = gpiod_get_value_cansleep(priv->rx_int);
if (!rx_pending)
break;
err = mcp251xfd_handle(priv, rxif);
if (err)
goto out_fail;
handled = IRQ_HANDLED;
} while (1);
do {
u32 intf_pending, intf_pending_clearable;
bool set_normal_mode = false;
err = regmap_bulk_read(priv->map_reg, MCP251XFD_REG_INT,
&priv->regs_status,
sizeof(priv->regs_status) /
sizeof(u32));
if (err)
goto out_fail;
intf_pending = FIELD_GET(MCP251XFD_REG_INT_IF_MASK,
priv->regs_status.intf) &
FIELD_GET(MCP251XFD_REG_INT_IE_MASK,
priv->regs_status.intf);
if (!(intf_pending))
return handled;
}
I find the this
(1) handled = IRQ_NONE;
(2) intf_pending = 0
(3) if (!(intf_pending))
return handled;
handled = IRQ_NONE so this is the call trace reaseon.
Summary : Can you help me why intf_pending is 0. I already seeting the INT register but it doesn't any chanage of low bit in interrupt function
.
Please help me .
thank you