aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch')
-rw-r--r--target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch115
1 files changed, 115 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch b/target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch
new file mode 100644
index 0000000000..968bc11d51
--- /dev/null
+++ b/target/linux/layerscape/patches-5.4/802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch
@@ -0,0 +1,115 @@
+From 03374d551c7fbb1b1ecc115df4f374bc5027b1f9 Mon Sep 17 00:00:00 2001
+From: Joakim Zhang <qiangqing.zhang@nxp.com>
+Date: Fri, 12 Jul 2019 08:02:41 +0000
+Subject: [PATCH] can: flexcan: use struct canfd_frame for CAN classic frame
+
+This patch prepares for CAN FD mode, using struct canfd_frame can both
+for classic format frame and fd format frame.
+
+Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+---
+ drivers/net/can/flexcan.c | 34 +++++++++++++++++-----------------
+ drivers/net/can/rx-offload.c | 4 ++--
+ 2 files changed, 19 insertions(+), 19 deletions(-)
+
+--- a/drivers/net/can/flexcan.c
++++ b/drivers/net/can/flexcan.c
+@@ -628,10 +628,10 @@ static int flexcan_get_berr_counter(cons
+ static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ const struct flexcan_priv *priv = netdev_priv(dev);
+- struct can_frame *cf = (struct can_frame *)skb->data;
++ struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
+ u32 can_id;
+ u32 data;
+- u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | (cf->can_dlc << 16);
++ u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | (cfd->len << 16);
+ int i;
+
+ if (can_dropped_invalid_skb(dev, skb))
+@@ -639,18 +639,18 @@ static netdev_tx_t flexcan_start_xmit(st
+
+ netif_stop_queue(dev);
+
+- if (cf->can_id & CAN_EFF_FLAG) {
+- can_id = cf->can_id & CAN_EFF_MASK;
++ if (cfd->can_id & CAN_EFF_FLAG) {
++ can_id = cfd->can_id & CAN_EFF_MASK;
+ ctrl |= FLEXCAN_MB_CNT_IDE | FLEXCAN_MB_CNT_SRR;
+ } else {
+- can_id = (cf->can_id & CAN_SFF_MASK) << 18;
++ can_id = (cfd->can_id & CAN_SFF_MASK) << 18;
+ }
+
+- if (cf->can_id & CAN_RTR_FLAG)
++ if (cfd->can_id & CAN_RTR_FLAG)
+ ctrl |= FLEXCAN_MB_CNT_RTR;
+
+- for (i = 0; i < cf->can_dlc; i += sizeof(u32)) {
+- data = be32_to_cpup((__be32 *)&cf->data[i]);
++ for (i = 0; i < cfd->len; i += sizeof(u32)) {
++ data = be32_to_cpup((__be32 *)&cfd->data[i]);
+ priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]);
+ }
+
+@@ -822,7 +822,7 @@ static struct sk_buff *flexcan_mailbox_r
+ struct flexcan_regs __iomem *regs = priv->regs;
+ struct flexcan_mb __iomem *mb;
+ struct sk_buff *skb;
+- struct can_frame *cf;
++ struct canfd_frame *cfd;
+ u32 reg_ctrl, reg_id, reg_iflag1;
+ int i;
+
+@@ -859,8 +859,8 @@ static struct sk_buff *flexcan_mailbox_r
+ reg_ctrl = priv->read(&mb->can_ctrl);
+ }
+
+- skb = alloc_can_skb(offload->dev, &cf);
+- if (!skb) {
++ skb = alloc_can_skb(offload->dev, (struct can_frame **)&cfd);
++ if (unlikely(!skb)) {
+ skb = ERR_PTR(-ENOMEM);
+ goto mark_as_read;
+ }
+@@ -870,17 +870,17 @@ static struct sk_buff *flexcan_mailbox_r
+
+ reg_id = priv->read(&mb->can_id);
+ if (reg_ctrl & FLEXCAN_MB_CNT_IDE)
+- cf->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG;
++ cfd->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG;
+ else
+- cf->can_id = (reg_id >> 18) & CAN_SFF_MASK;
++ cfd->can_id = (reg_id >> 18) & CAN_SFF_MASK;
+
+ if (reg_ctrl & FLEXCAN_MB_CNT_RTR)
+- cf->can_id |= CAN_RTR_FLAG;
+- cf->can_dlc = get_can_dlc((reg_ctrl >> 16) & 0xf);
++ cfd->can_id |= CAN_RTR_FLAG;
++ cfd->len = get_can_dlc((reg_ctrl >> 16) & 0xf);
+
+- for (i = 0; i < cf->can_dlc; i += sizeof(u32)) {
++ for (i = 0; i < cfd->len; i += sizeof(u32)) {
+ __be32 data = cpu_to_be32(priv->read(&mb->data[i / sizeof(u32)]));
+- *(__be32 *)(cf->data + i) = data;
++ *(__be32 *)(cfd->data + i) = data;
+ }
+
+ mark_as_read:
+--- a/drivers/net/can/rx-offload.c
++++ b/drivers/net/can/rx-offload.c
+@@ -51,11 +51,11 @@ static int can_rx_offload_napi_poll(stru
+
+ while ((work_done < quota) &&
+ (skb = skb_dequeue(&offload->skb_queue))) {
+- struct can_frame *cf = (struct can_frame *)skb->data;
++ struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
+
+ work_done++;
+ stats->rx_packets++;
+- stats->rx_bytes += cf->can_dlc;
++ stats->rx_bytes += cfd->len;
+ netif_receive_skb(skb);
+ }
+