Message ID | 20210301112100.197939-4-mkl@pengutronix.de (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,1/6] can: flexcan: assert FRZ bit in flexcan_chip_freeze() | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Pull request |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net |
netdev/subject_prefix | success | Link |
netdev/cc_maintainers | fail | 2 blamed authors not CCed: wg@grandegger.com s.hauer@pengutronix.de; 2 maintainers not CCed: s.hauer@pengutronix.de wg@grandegger.com |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 26 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
Hello Joakim, Marc, On 01.03.21 12:20, Marc Kleine-Budde wrote: > From: Joakim Zhang <qiangqing.zhang@nxp.com> > > Invoke flexcan_chip_freeze() to enter freeze mode, since need poll > freeze mode acknowledge. > > Fixes: e955cead03117 ("CAN: Add Flexcan CAN controller driver") > Link: https://lore.kernel.org/r/20210218110037.16591-4-qiangqing.zhang@nxp.com > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> > Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> > --- > drivers/net/can/flexcan.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c > index e66a51dbea0a..134c05757a3b 100644 > --- a/drivers/net/can/flexcan.c > +++ b/drivers/net/can/flexcan.c > @@ -1480,10 +1480,13 @@ static int flexcan_chip_start(struct net_device *dev) > > flexcan_set_bittiming(dev); > > + /* set freeze, halt */ > + err = flexcan_chip_freeze(priv); > + if (err) > + goto out_chip_disable; With v5.12-rc3, both my FlexCAN controllers on an i.MX6Q now divide by zero on probe because priv->can.bittiming.bitrate == 0 inside of flexcan_chip_freeze. Reverting this patch fixes it. > + > /* MCR > * > - * enable freeze > - * halt now > * only supervisor access > * enable warning int > * enable individual RX masking > @@ -1492,9 +1495,8 @@ static int flexcan_chip_start(struct net_device *dev) > */ > reg_mcr = priv->read(®s->mcr); > reg_mcr &= ~FLEXCAN_MCR_MAXMB(0xff); > - reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_HALT | FLEXCAN_MCR_SUPV | > - FLEXCAN_MCR_WRN_EN | FLEXCAN_MCR_IRMQ | FLEXCAN_MCR_IDAM_C | > - FLEXCAN_MCR_MAXMB(priv->tx_mb_idx); > + reg_mcr |= FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN | FLEXCAN_MCR_IRMQ | > + FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_MAXMB(priv->tx_mb_idx); > > /* MCR > * >
On 16.03.2021 17:00:25, Ahmad Fatoum wrote: > > --- a/drivers/net/can/flexcan.c > > +++ b/drivers/net/can/flexcan.c > > @@ -1480,10 +1480,13 @@ static int flexcan_chip_start(struct net_device *dev) > > > > flexcan_set_bittiming(dev); > > > > + /* set freeze, halt */ > > + err = flexcan_chip_freeze(priv); > > + if (err) > > + goto out_chip_disable; > > With v5.12-rc3, both my FlexCAN controllers on an i.MX6Q now divide by zero > on probe because priv->can.bittiming.bitrate == 0 inside of flexcan_chip_freeze. > > Reverting this patch fixes it. A fix for this in on its way to net/master: https://lore.kernel.org/linux-can/20210316082104.4027260-6-mkl@pengutronix.de/ regards, Marc
On 17.03.2021 09:18:31, Marc Kleine-Budde wrote: > A fix for this in on its way to net/master: > > https://lore.kernel.org/linux-can/20210316082104.4027260-6-mkl@pengutronix.de/ It's already in net/master. regards, Marc
On 17.03.21 12:49, Marc Kleine-Budde wrote: > On 17.03.2021 09:18:31, Marc Kleine-Budde wrote: >> A fix for this in on its way to net/master: >> >> https://lore.kernel.org/linux-can/20210316082104.4027260-6-mkl@pengutronix.de/ > > It's already in net/master. Cherry-picked and works for me. Thanks, Ahmad > > regards, > Marc >
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index e66a51dbea0a..134c05757a3b 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -1480,10 +1480,13 @@ static int flexcan_chip_start(struct net_device *dev) flexcan_set_bittiming(dev); + /* set freeze, halt */ + err = flexcan_chip_freeze(priv); + if (err) + goto out_chip_disable; + /* MCR * - * enable freeze - * halt now * only supervisor access * enable warning int * enable individual RX masking @@ -1492,9 +1495,8 @@ static int flexcan_chip_start(struct net_device *dev) */ reg_mcr = priv->read(®s->mcr); reg_mcr &= ~FLEXCAN_MCR_MAXMB(0xff); - reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_HALT | FLEXCAN_MCR_SUPV | - FLEXCAN_MCR_WRN_EN | FLEXCAN_MCR_IRMQ | FLEXCAN_MCR_IDAM_C | - FLEXCAN_MCR_MAXMB(priv->tx_mb_idx); + reg_mcr |= FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN | FLEXCAN_MCR_IRMQ | + FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_MAXMB(priv->tx_mb_idx); /* MCR *