can: m_can: fix not set can_dlc for remote frame
authorDong Aisheng <b29396@freescale.com>
Tue, 18 Nov 2014 11:00:54 +0000 (19:00 +0800)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Tue, 18 Nov 2014 20:35:04 +0000 (21:35 +0100)
The original code missed to set the cf->can_dlc in the RTR case, so add it.

Signed-off-by: Dong Aisheng <b29396@freescale.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/m_can/m_can.c

index 214160b..98f7e0e 100644 (file)
@@ -330,7 +330,7 @@ static void m_can_read_fifo(const struct net_device *dev, struct can_frame *cf,
                            u32 rxfs)
 {
        struct m_can_priv *priv = netdev_priv(dev);
-       u32 id, fgi;
+       u32 id, fgi, dlc;
 
        /* calculate the fifo get index for where to read data */
        fgi = (rxfs & RXFS_FGI_MASK) >> RXFS_FGI_OFF;
@@ -340,11 +340,12 @@ static void m_can_read_fifo(const struct net_device *dev, struct can_frame *cf,
        else
                cf->can_id = (id >> 18) & CAN_SFF_MASK;
 
+       dlc = m_can_fifo_read(priv, fgi, M_CAN_FIFO_DLC);
+       cf->can_dlc = get_can_dlc((dlc >> 16) & 0x0F);
+
        if (id & RX_BUF_RTR) {
                cf->can_id |= CAN_RTR_FLAG;
        } else {
-               id = m_can_fifo_read(priv, fgi, M_CAN_FIFO_DLC);
-               cf->can_dlc = get_can_dlc((id >> 16) & 0x0F);
                *(u32 *)(cf->data + 0) = m_can_fifo_read(priv, fgi,
                                                         M_CAN_FIFO_DATA(0));
                *(u32 *)(cf->data + 4) = m_can_fifo_read(priv, fgi,