]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
can: rcar_can: Mailbox bitfield conversion
authorGeert Uytterhoeven <geert+renesas@glider.be>
Fri, 22 Aug 2025 10:17:10 +0000 (12:17 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 19 Sep 2025 17:25:16 +0000 (19:25 +0200)
Convert CAN Mailbox Register field accesses to use the FIELD_PREP() and
FIELD_GET() bitfield access macro.

This gets rid of explicit shifts, and keeps a clear separation between
hardware register layouts and offical CAN definitions.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/c75c7d6ed5929c4becf7c9178cec04a0731e8ab1.1755857536.git.geert+renesas@glider.be
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/rcar/rcar_can.c

index 4c5c1f0446913d37d078e125ecda7c287e72ae5c..de1829477659757c13a8a7d7a1cd8c80eeb1b6e5 100644 (file)
@@ -160,7 +160,8 @@ static const struct can_bittiming_const rcar_can_bittiming_const = {
 /* Mailbox and Mask Registers bits */
 #define RCAR_CAN_IDE           BIT(31)         /* ID Extension */
 #define RCAR_CAN_RTR           BIT(30)         /* Remote Transmission Request */
-#define RCAR_CAN_SID_SHIFT     18
+#define RCAR_CAN_SID           GENMASK(28, 18) /* Standard ID */
+#define RCAR_CAN_EID           GENMASK(28, 0)  /* Extended ID */
 
 /* Mailbox Interrupt Enable Register 1 bits */
 #define RCAR_CAN_MIER1_RXFIE   BIT(28)         /* Receive  FIFO Interrupt Enable */
@@ -599,9 +600,10 @@ static netdev_tx_t rcar_can_start_xmit(struct sk_buff *skb,
                return NETDEV_TX_OK;
 
        if (cf->can_id & CAN_EFF_FLAG)  /* Extended frame format */
-               data = (cf->can_id & CAN_EFF_MASK) | RCAR_CAN_IDE;
+               data = FIELD_PREP(RCAR_CAN_EID, cf->can_id & CAN_EFF_MASK) |
+                      RCAR_CAN_IDE;
        else                            /* Standard frame format */
-               data = (cf->can_id & CAN_SFF_MASK) << RCAR_CAN_SID_SHIFT;
+               data = FIELD_PREP(RCAR_CAN_SID, cf->can_id & CAN_SFF_MASK);
 
        if (cf->can_id & CAN_RTR_FLAG) { /* Remote transmission request */
                data |= RCAR_CAN_RTR;
@@ -656,9 +658,9 @@ static void rcar_can_rx_pkt(struct rcar_can_priv *priv)
 
        data = readl(&priv->regs->mb[RCAR_CAN_RX_FIFO_MBX].id);
        if (data & RCAR_CAN_IDE)
-               cf->can_id = (data & CAN_EFF_MASK) | CAN_EFF_FLAG;
+               cf->can_id = FIELD_GET(RCAR_CAN_EID, data) | CAN_EFF_FLAG;
        else
-               cf->can_id = (data >> RCAR_CAN_SID_SHIFT) & CAN_SFF_MASK;
+               cf->can_id = FIELD_GET(RCAR_CAN_SID, data);
 
        dlc = readb(&priv->regs->mb[RCAR_CAN_RX_FIFO_MBX].dlc);
        cf->len = can_cc_dlc2len(dlc);