Skip to content

Commit 3381503

Browse files
bijudasmarckleinebudde
authored andcommitted
can: rcar_canfd: Simplify data bit rate config
Introduce rcar_canfd_compute_data_bit_rate_cfg() for simplifying data bit rate configuration by replacing function-like macros. Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com> Link: https://patch.msgid.link/20250908120940.147196-5-biju.das.jz@bp.renesas.com Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
1 parent 02d274a commit 3381503

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

drivers/net/can/rcar/rcar_canfd.c

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -169,15 +169,7 @@
169169
#define RCANFD_CERFL_ERR(x) ((x) & (0x7fff)) /* above bits 14:0 */
170170

171171
/* RSCFDnCFDCmDCFG */
172-
#define RCANFD_DCFG_DSJW(gpriv, x) (((x) & ((gpriv)->info->data_bittiming->sjw_max - 1)) << 24)
173-
174-
#define RCANFD_DCFG_DTSEG2(gpriv, x) \
175-
(((x) & ((gpriv)->info->data_bittiming->tseg2_max - 1)) << (gpriv)->info->sh->dtseg2)
176-
177-
#define RCANFD_DCFG_DTSEG1(gpriv, x) \
178-
(((x) & ((gpriv)->info->data_bittiming->tseg1_max - 1)) << (gpriv)->info->sh->dtseg1)
179-
180-
#define RCANFD_DCFG_DBRP(x) (((x) & 0xff) << 0)
172+
#define RCANFD_DCFG_DBRP GENMASK(7, 0)
181173

182174
/* RSCFDnCFDCmFDCFG */
183175
#define RCANFD_GEN4_FDCFG_CLOE BIT(30)
@@ -1401,6 +1393,19 @@ static inline u32 rcar_canfd_compute_nominal_bit_rate_cfg(struct rcar_canfd_chan
14011393
return (ntseg1 | ntseg2 | nsjw | nbrp);
14021394
}
14031395

1396+
static inline u32 rcar_canfd_compute_data_bit_rate_cfg(const struct rcar_canfd_hw_info *info,
1397+
u16 tseg1, u16 tseg2, u16 sjw, u16 brp)
1398+
{
1399+
u32 dtseg1, dtseg2, dsjw, dbrp;
1400+
1401+
dtseg1 = (tseg1 & (info->data_bittiming->tseg1_max - 1)) << info->sh->dtseg1;
1402+
dtseg2 = (tseg2 & (info->data_bittiming->tseg2_max - 1)) << info->sh->dtseg2;
1403+
dsjw = (sjw & (info->data_bittiming->sjw_max - 1)) << 24;
1404+
dbrp = FIELD_PREP(RCANFD_DCFG_DBRP, brp);
1405+
1406+
return (dtseg1 | dtseg2 | dsjw | dbrp);
1407+
}
1408+
14041409
static void rcar_canfd_set_bittiming(struct net_device *ndev)
14051410
{
14061411
u32 mask = RCANFD_FDCFG_TDCO | RCANFD_FDCFG_TDCE | RCANFD_FDCFG_TDCOC;
@@ -1430,10 +1435,7 @@ static void rcar_canfd_set_bittiming(struct net_device *ndev)
14301435
sjw = dbt->sjw - 1;
14311436
tseg1 = dbt->prop_seg + dbt->phase_seg1 - 1;
14321437
tseg2 = dbt->phase_seg2 - 1;
1433-
1434-
cfg = (RCANFD_DCFG_DTSEG1(gpriv, tseg1) | RCANFD_DCFG_DBRP(brp) |
1435-
RCANFD_DCFG_DSJW(gpriv, sjw) | RCANFD_DCFG_DTSEG2(gpriv, tseg2));
1436-
1438+
cfg = rcar_canfd_compute_data_bit_rate_cfg(gpriv->info, tseg1, tseg2, sjw, brp);
14371439
writel(cfg, &gpriv->fcbase[ch].dcfg);
14381440

14391441
/* Transceiver Delay Compensation */

0 commit comments

Comments
 (0)