109109#define RCANFD_CFG_BRP GENMASK(9, 0)
110110
111111/* RSCFDnCFDCmNCFG - CAN FD only */
112- #define RCANFD_NCFG_NTSEG2 (gpriv , x ) \
113- (((x) & ((gpriv)->info->nom_bittiming->tseg2_max - 1)) << (gpriv)->info->sh->ntseg2)
114-
115- #define RCANFD_NCFG_NTSEG1 (gpriv , x ) \
116- (((x) & ((gpriv)->info->nom_bittiming->tseg1_max - 1)) << (gpriv)->info->sh->ntseg1)
117-
118- #define RCANFD_NCFG_NSJW (gpriv , x ) \
119- (((x) & ((gpriv)->info->nom_bittiming->sjw_max - 1)) << (gpriv)->info->sh->nsjw)
120-
121- #define RCANFD_NCFG_NBRP (x ) (((x) & 0x3ff) << 0)
112+ #define RCANFD_NCFG_NBRP GENMASK(9, 0)
122113
123114/* RSCFDnCFDCmCTR / RSCFDnCmCTR */
124115#define RCANFD_CCTR_CTME BIT(24)
@@ -1388,6 +1379,28 @@ static irqreturn_t rcar_canfd_channel_interrupt(int irq, void *dev_id)
13881379 return IRQ_HANDLED ;
13891380}
13901381
1382+ static inline u32 rcar_canfd_compute_nominal_bit_rate_cfg (struct rcar_canfd_channel * priv ,
1383+ u16 tseg1 , u16 tseg2 , u16 sjw , u16 brp )
1384+ {
1385+ struct rcar_canfd_global * gpriv = priv -> gpriv ;
1386+ const struct rcar_canfd_hw_info * info = gpriv -> info ;
1387+ u32 ntseg1 , ntseg2 , nsjw , nbrp ;
1388+
1389+ if ((priv -> can .ctrlmode & CAN_CTRLMODE_FD ) || gpriv -> info -> shared_can_regs ) {
1390+ ntseg1 = (tseg1 & (info -> nom_bittiming -> tseg1_max - 1 )) << info -> sh -> ntseg1 ;
1391+ ntseg2 = (tseg2 & (info -> nom_bittiming -> tseg2_max - 1 )) << info -> sh -> ntseg2 ;
1392+ nsjw = (sjw & (info -> nom_bittiming -> sjw_max - 1 )) << info -> sh -> nsjw ;
1393+ nbrp = FIELD_PREP (RCANFD_NCFG_NBRP , brp );
1394+ } else {
1395+ ntseg1 = FIELD_PREP (RCANFD_CFG_TSEG1 , tseg1 );
1396+ ntseg2 = FIELD_PREP (RCANFD_CFG_TSEG2 , tseg2 );
1397+ nsjw = FIELD_PREP (RCANFD_CFG_SJW , sjw );
1398+ nbrp = FIELD_PREP (RCANFD_CFG_BRP , brp );
1399+ }
1400+
1401+ return (ntseg1 | ntseg2 | nsjw | nbrp );
1402+ }
1403+
13911404static void rcar_canfd_set_bittiming (struct net_device * ndev )
13921405{
13931406 u32 mask = RCANFD_FDCFG_TDCO | RCANFD_FDCFG_TDCE | RCANFD_FDCFG_TDCOC ;
@@ -1406,15 +1419,7 @@ static void rcar_canfd_set_bittiming(struct net_device *ndev)
14061419 sjw = bt -> sjw - 1 ;
14071420 tseg1 = bt -> prop_seg + bt -> phase_seg1 - 1 ;
14081421 tseg2 = bt -> phase_seg2 - 1 ;
1409-
1410- if ((priv -> can .ctrlmode & CAN_CTRLMODE_FD ) || gpriv -> info -> shared_can_regs ) {
1411- cfg = (RCANFD_NCFG_NTSEG1 (gpriv , tseg1 ) | RCANFD_NCFG_NBRP (brp ) |
1412- RCANFD_NCFG_NSJW (gpriv , sjw ) | RCANFD_NCFG_NTSEG2 (gpriv , tseg2 ));
1413- } else {
1414- cfg = FIELD_PREP (RCANFD_CFG_TSEG1 , tseg1 ) | FIELD_PREP (RCANFD_CFG_BRP , brp ) |
1415- FIELD_PREP (RCANFD_CFG_SJW , sjw ) | FIELD_PREP (RCANFD_CFG_TSEG2 , tseg2 );
1416- }
1417-
1422+ cfg = rcar_canfd_compute_nominal_bit_rate_cfg (priv , tseg1 , tseg2 , sjw , brp );
14181423 rcar_canfd_write (priv -> base , RCANFD_CCFG (ch ), cfg );
14191424
14201425 if (!(priv -> can .ctrlmode & CAN_CTRLMODE_FD ))
0 commit comments