802-can-0018-can-flexcan-use-struct-canfd_frame-for-CAN-classic-f.patch 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. From 03374d551c7fbb1b1ecc115df4f374bc5027b1f9 Mon Sep 17 00:00:00 2001
  2. From: Joakim Zhang <[email protected]>
  3. Date: Fri, 12 Jul 2019 08:02:41 +0000
  4. Subject: [PATCH] can: flexcan: use struct canfd_frame for CAN classic frame
  5. This patch prepares for CAN FD mode, using struct canfd_frame can both
  6. for classic format frame and fd format frame.
  7. Signed-off-by: Joakim Zhang <[email protected]>
  8. Signed-off-by: Marc Kleine-Budde <[email protected]>
  9. ---
  10. drivers/net/can/flexcan.c | 34 +++++++++++++++++-----------------
  11. drivers/net/can/rx-offload.c | 4 ++--
  12. 2 files changed, 19 insertions(+), 19 deletions(-)
  13. --- a/drivers/net/can/flexcan.c
  14. +++ b/drivers/net/can/flexcan.c
  15. @@ -629,10 +629,10 @@ static int flexcan_get_berr_counter(cons
  16. static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev)
  17. {
  18. const struct flexcan_priv *priv = netdev_priv(dev);
  19. - struct can_frame *cf = (struct can_frame *)skb->data;
  20. + struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
  21. u32 can_id;
  22. u32 data;
  23. - u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | (cf->can_dlc << 16);
  24. + u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | (cfd->len << 16);
  25. int i;
  26. if (can_dropped_invalid_skb(dev, skb))
  27. @@ -640,18 +640,18 @@ static netdev_tx_t flexcan_start_xmit(st
  28. netif_stop_queue(dev);
  29. - if (cf->can_id & CAN_EFF_FLAG) {
  30. - can_id = cf->can_id & CAN_EFF_MASK;
  31. + if (cfd->can_id & CAN_EFF_FLAG) {
  32. + can_id = cfd->can_id & CAN_EFF_MASK;
  33. ctrl |= FLEXCAN_MB_CNT_IDE | FLEXCAN_MB_CNT_SRR;
  34. } else {
  35. - can_id = (cf->can_id & CAN_SFF_MASK) << 18;
  36. + can_id = (cfd->can_id & CAN_SFF_MASK) << 18;
  37. }
  38. - if (cf->can_id & CAN_RTR_FLAG)
  39. + if (cfd->can_id & CAN_RTR_FLAG)
  40. ctrl |= FLEXCAN_MB_CNT_RTR;
  41. - for (i = 0; i < cf->can_dlc; i += sizeof(u32)) {
  42. - data = be32_to_cpup((__be32 *)&cf->data[i]);
  43. + for (i = 0; i < cfd->len; i += sizeof(u32)) {
  44. + data = be32_to_cpup((__be32 *)&cfd->data[i]);
  45. priv->write(data, &priv->tx_mb->data[i / sizeof(u32)]);
  46. }
  47. @@ -823,7 +823,7 @@ static struct sk_buff *flexcan_mailbox_r
  48. struct flexcan_regs __iomem *regs = priv->regs;
  49. struct flexcan_mb __iomem *mb;
  50. struct sk_buff *skb;
  51. - struct can_frame *cf;
  52. + struct canfd_frame *cfd;
  53. u32 reg_ctrl, reg_id, reg_iflag1;
  54. int i;
  55. @@ -860,8 +860,8 @@ static struct sk_buff *flexcan_mailbox_r
  56. reg_ctrl = priv->read(&mb->can_ctrl);
  57. }
  58. - skb = alloc_can_skb(offload->dev, &cf);
  59. - if (!skb) {
  60. + skb = alloc_can_skb(offload->dev, (struct can_frame **)&cfd);
  61. + if (unlikely(!skb)) {
  62. skb = ERR_PTR(-ENOMEM);
  63. goto mark_as_read;
  64. }
  65. @@ -871,17 +871,17 @@ static struct sk_buff *flexcan_mailbox_r
  66. reg_id = priv->read(&mb->can_id);
  67. if (reg_ctrl & FLEXCAN_MB_CNT_IDE)
  68. - cf->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG;
  69. + cfd->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG;
  70. else
  71. - cf->can_id = (reg_id >> 18) & CAN_SFF_MASK;
  72. + cfd->can_id = (reg_id >> 18) & CAN_SFF_MASK;
  73. if (reg_ctrl & FLEXCAN_MB_CNT_RTR)
  74. - cf->can_id |= CAN_RTR_FLAG;
  75. - cf->can_dlc = get_can_dlc((reg_ctrl >> 16) & 0xf);
  76. + cfd->can_id |= CAN_RTR_FLAG;
  77. + cfd->len = get_can_dlc((reg_ctrl >> 16) & 0xf);
  78. - for (i = 0; i < cf->can_dlc; i += sizeof(u32)) {
  79. + for (i = 0; i < cfd->len; i += sizeof(u32)) {
  80. __be32 data = cpu_to_be32(priv->read(&mb->data[i / sizeof(u32)]));
  81. - *(__be32 *)(cf->data + i) = data;
  82. + *(__be32 *)(cfd->data + i) = data;
  83. }
  84. mark_as_read:
  85. --- a/drivers/net/can/rx-offload.c
  86. +++ b/drivers/net/can/rx-offload.c
  87. @@ -51,11 +51,11 @@ static int can_rx_offload_napi_poll(stru
  88. while ((work_done < quota) &&
  89. (skb = skb_dequeue(&offload->skb_queue))) {
  90. - struct can_frame *cf = (struct can_frame *)skb->data;
  91. + struct canfd_frame *cfd = (struct canfd_frame *)skb->data;
  92. work_done++;
  93. stats->rx_packets++;
  94. - stats->rx_bytes += cf->can_dlc;
  95. + stats->rx_bytes += cfd->len;
  96. netif_receive_skb(skb);
  97. }