diff --git a/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_can.c b/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_can.c index e28aad2b6ac8..f2c9bcbb71f9 100644 --- a/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_can.c +++ b/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_can.c @@ -565,6 +565,9 @@ static int mcp25xxfd_can_stop(struct net_device *net) struct mcp25xxfd_priv *priv = cpriv->priv; struct spi_device *spi = priv->spi; + disable_irq(spi->irq); + cpriv->irq.enabled = false; + /* stop transmit queue */ mcp25xxfd_can_tx_queue_manage(cpriv, MCP25XXFD_CAN_TX_QUEUE_STATE_STOPPED); @@ -575,6 +578,8 @@ static int mcp25xxfd_can_stop(struct net_device *net) /* shutdown the can controller */ mcp25xxfd_can_shutdown(cpriv); + mcp25xxfd_cmd_reset(spi); + /* disable inerrupts on controller */ mcp25xxfd_int_enable(cpriv->priv, false); diff --git a/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_can_fifo.c b/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_can_fifo.c index bf94120f2609..3862ed3eff42 100644 --- a/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_can_fifo.c +++ b/drivers/net/can/spi/mcp25xxfd/mcp25xxfd_can_fifo.c @@ -266,6 +266,10 @@ static int mcp25xxfd_can_fifo_clear(struct mcp25xxfd_can_priv *cpriv) memset(&cpriv->fifos.info, 0, sizeof(cpriv->fifos.info)); memset(&cpriv->fifos.tx, 0, sizeof(cpriv->fifos.tx)); memset(&cpriv->fifos.rx, 0, sizeof(cpriv->fifos.rx)); + memset(&cpriv->fifos.tef, 0, sizeof(cpriv->fifos.tef)); + memset(&cpriv->fifos.submit_queue, 0, sizeof(cpriv->fifos.submit_queue)); + + cpriv->fifos.submit_queue_count = 0; /* clear FIFO config */ ret = mcp25xxfd_can_fifo_clear_regs(cpriv, MCP25XXFD_CAN_FIFOCON(1),