Skip to content

Commit ea79c1c

Browse files
can: ti_hecc: fix endianness related sparse warning
This patch fixes the following sparse warning, which occurs in casts when accessing the data in the CAN frames (struct can_frame) in the RX and TX routines: drivers/net/can/ti_hecc.c:521:17: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:521:17: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:521:17: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:521:17: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:521:17: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:521:17: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:524:25: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:524:25: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:524:25: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:524:25: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:524:25: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:524:25: warning: cast to restricted __be32 drivers/net/can/ti_hecc.c:572:28: warning: incorrect type in assignment (different base types) drivers/net/can/ti_hecc.c:572:28: expected unsigned int [unsigned] [usertype] <noident> drivers/net/can/ti_hecc.c:572:28: got restricted __be32 [usertype] <noident> drivers/net/can/ti_hecc.c:575:40: warning: incorrect type in assignment (different base types) drivers/net/can/ti_hecc.c:575:40: expected unsigned int [unsigned] [usertype] <noident> drivers/net/can/ti_hecc.c:575:40: got restricted __be32 [usertype] <noident> As the data is indeed big endian, use "__be32" instead of "u32", when casting it. Signed-off-by: Marc Kleine-Budde <[email protected]>
1 parent 40d4511 commit ea79c1c

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

drivers/net/can/ti_hecc.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -518,10 +518,10 @@ static netdev_tx_t ti_hecc_xmit(struct sk_buff *skb, struct net_device *ndev)
518518
data = (cf->can_id & CAN_SFF_MASK) << 18;
519519
hecc_write_mbx(priv, mbxno, HECC_CANMID, data);
520520
hecc_write_mbx(priv, mbxno, HECC_CANMDL,
521-
be32_to_cpu(*(u32 *)(cf->data)));
521+
be32_to_cpu(*(__be32 *)(cf->data)));
522522
if (cf->can_dlc > 4)
523523
hecc_write_mbx(priv, mbxno, HECC_CANMDH,
524-
be32_to_cpu(*(u32 *)(cf->data + 4)));
524+
be32_to_cpu(*(__be32 *)(cf->data + 4)));
525525
else
526526
*(u32 *)(cf->data + 4) = 0;
527527
can_put_echo_skb(skb, ndev, mbxno);
@@ -569,12 +569,10 @@ static int ti_hecc_rx_pkt(struct ti_hecc_priv *priv, int mbxno)
569569
cf->can_id |= CAN_RTR_FLAG;
570570
cf->can_dlc = get_can_dlc(data & 0xF);
571571
data = hecc_read_mbx(priv, mbxno, HECC_CANMDL);
572-
*(u32 *)(cf->data) = cpu_to_be32(data);
572+
*(__be32 *)(cf->data) = cpu_to_be32(data);
573573
if (cf->can_dlc > 4) {
574574
data = hecc_read_mbx(priv, mbxno, HECC_CANMDH);
575-
*(u32 *)(cf->data + 4) = cpu_to_be32(data);
576-
} else {
577-
*(u32 *)(cf->data + 4) = 0;
575+
*(__be32 *)(cf->data + 4) = cpu_to_be32(data);
578576
}
579577
spin_lock_irqsave(&priv->mbx_lock, flags);
580578
hecc_clear_bit(priv, HECC_CANME, mbx_mask);

0 commit comments

Comments
 (0)