From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Jander Subject: Re: RFC: [PATCH v2 1/2] can: flexcan: Correctly initialize mailboxes Date: Wed, 3 Sep 2014 16:34:24 +0200 Message-ID: <20140903163424.60f72a00@archvile> References: <1409670216-25674-1-git-send-email-mkl@pengutronix.de> <1409670216-25674-2-git-send-email-mkl@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Return-path: Received: from protonic.xs4all.nl ([83.163.252.89]:9106 "EHLO protonic.xs4all.nl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932402AbaICOeN (ORCPT ); Wed, 3 Sep 2014 10:34:13 -0400 In-Reply-To: <1409670216-25674-2-git-send-email-mkl@pengutronix.de> Sender: linux-can-owner@vger.kernel.org List-ID: To: Marc Kleine-Budde Cc: linux-can@vger.kernel.org On Tue, 2 Sep 2014 17:03:35 +0200 Marc Kleine-Budde wrote: > From: David Jander > > Apparently mailboxes may contain random data at startup, causing some of > them being prepared for message reception. This causes overruns being > missed or even confusing the IRQ check for trasmitted messages, increasing > the transmit counter instead of the error counter. > > Signed-off-by: David Jander > [mkl: adjust starting value of loop] > Signed-off-by: Marc Kleine-Budde > --- > Changes since v1: > - don't remove existing initialization of FLEXCAN_TX_BUF_ID > - start loop at FLEXCAN_TX_BUF_ID + 1 > > Marc > > drivers/net/can/flexcan.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c > index 630c7bf..6ec49bd 100644 > --- a/drivers/net/can/flexcan.c > +++ b/drivers/net/can/flexcan.c > @@ -801,6 +801,7 @@ static int flexcan_chip_start(struct net_device *dev) > struct flexcan_regs __iomem *regs = priv->base; > int err; > u32 reg_mcr, reg_ctrl; > + int i; > > /* enable module */ > err = flexcan_chip_enable(priv); > @@ -870,6 +871,11 @@ static int flexcan_chip_start(struct net_device *dev) > /* Abort any pending TX, mark Mailbox as INACTIVE */ > flexcan_write(FLEXCAN_MB_CNT_CODE(0x4), > ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); > + /* Clear and invalidate all mailboxes first */ > + for (i = FLEXCAN_TX_BUF_ID + 1; i < ARRAY_SIZE(regs->cantxfg; i++) { Oops! You are missing a closing parenthesis in this line. I will assume you amend this commit and base mine on top of that... > + flexcan_write(FLEXCAN_MB_CNT_CODE(0), > + ®s->cantxfg[i].can_ctrl); > + } > > /* acceptance mask/acceptance code (accept everything) */ > flexcan_write(0x0, ®s->rxgmask); Best regards, -- David Jander Protonic Holland.