Re: [PATCH net-next-2.6 12/17 v3] can: EG20T PCH: Fix bit timingcalculation issue

From: Marc Kleine-Budde
Date: Wed Nov 24 2010 - 07:58:41 EST


On 11/24/2010 01:22 PM, Tomoya MORINAGA wrote:
> Fix bit timing calculation issue
> Modify like use calculated value directly passed by CAN core module.
>
> Signed-off-by: Tomoya MORINAGA <tomoya-linux@xxxxxxxxxxxxxxx>

Acked-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>

> ---
> drivers/net/can/pch_can.c | 6 ++----
> 1 files changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
> index 7342030..466f011 100644
> --- a/drivers/net/can/pch_can.c
> +++ b/drivers/net/can/pch_can.c
> @@ -800,17 +800,15 @@ static int pch_set_bittiming(struct net_device *ndev)
> const struct can_bittiming *bt = &priv->can.bittiming;
> u32 canbit;
> u32 bepe;
> - u32 brp;
>
> /* Setting the CCE bit for accessing the Can Timing register. */
> pch_can_bit_set(&priv->regs->cont, PCH_CTRL_CCE);
>
> - brp = (bt->tq) / (1000000000/PCH_CAN_CLK) - 1;
> - canbit = brp & PCH_MSK_BITT_BRP;
> + canbit = (bt->brp - 1) & PCH_MSK_BITT_BRP;

Masking here shouldn't be necessary but won't hurt, better play safe.

> canbit |= (bt->sjw - 1) << PCH_BIT_SJW_SHIFT;
> canbit |= (bt->phase_seg1 + bt->prop_seg - 1) << PCH_BIT_TSEG1_SHIFT;
> canbit |= (bt->phase_seg2 - 1) << PCH_BIT_TSEG2_SHIFT;
> - bepe = (brp & PCH_MSK_BRPE_BRPE) >> PCH_BIT_BRPE_BRPE_SHIFT;
> + bepe = ((bt->brp - 1) & PCH_MSK_BRPE_BRPE) >> PCH_BIT_BRPE_BRPE_SHIFT;

dito

> iowrite32(canbit, &priv->regs->bitt);
> iowrite32(bepe, &priv->regs->brpe);
> pch_can_bit_clear(&priv->regs->cont, PCH_CTRL_CCE);

cheers, Marc

--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |

Attachment: signature.asc
Description: OpenPGP digital signature