Skip to content

Commit 8d6b32a

Browse files
committed
Merge tag 'linux-can-fixes-for-5.16-20211209' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can
Marc Kleine-Budde says: ==================== can 2021-12-09 Both patches are by Jimmy Assarsson. The first one fixes the incrementing of the rx/tx error counters in the Kvaser PCIe FD driver. The second one fixes the Kvaser USB driver by using the CAN clock frequency provided by the device instead of using a hard coded value. * tag 'linux-can-fixes-for-5.16-20211209' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can: can: kvaser_usb: get CAN clock frequency from device can: kvaser_pciefd: kvaser_pciefd_rx_error_frame(): increase correct stats->{rx,tx}_errors counter ==================== Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents a50e659 + fb12797 commit 8d6b32a

File tree

2 files changed

+80
-29
lines changed

2 files changed

+80
-29
lines changed

drivers/net/can/kvaser_pciefd.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");
248248
#define KVASER_PCIEFD_SPACK_EWLR BIT(23)
249249
#define KVASER_PCIEFD_SPACK_EPLR BIT(24)
250250

251+
/* Kvaser KCAN_EPACK second word */
252+
#define KVASER_PCIEFD_EPACK_DIR_TX BIT(0)
253+
251254
struct kvaser_pciefd;
252255

253256
struct kvaser_pciefd_can {
@@ -1285,7 +1288,10 @@ static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can,
12851288

12861289
can->err_rep_cnt++;
12871290
can->can.can_stats.bus_error++;
1288-
stats->rx_errors++;
1291+
if (p->header[1] & KVASER_PCIEFD_EPACK_DIR_TX)
1292+
stats->tx_errors++;
1293+
else
1294+
stats->rx_errors++;
12891295

12901296
can->bec.txerr = bec.txerr;
12911297
can->bec.rxerr = bec.rxerr;

drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c

Lines changed: 73 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@
2828

2929
#include "kvaser_usb.h"
3030

31-
/* Forward declaration */
32-
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg;
33-
34-
#define CAN_USB_CLOCK 8000000
3531
#define MAX_USBCAN_NET_DEVICES 2
3632

3733
/* Command header size */
@@ -80,6 +76,12 @@ static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg;
8076

8177
#define CMD_LEAF_LOG_MESSAGE 106
8278

79+
/* Leaf frequency options */
80+
#define KVASER_USB_LEAF_SWOPTION_FREQ_MASK 0x60
81+
#define KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK 0
82+
#define KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK BIT(5)
83+
#define KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK BIT(6)
84+
8385
/* error factors */
8486
#define M16C_EF_ACKE BIT(0)
8587
#define M16C_EF_CRCE BIT(1)
@@ -340,6 +342,50 @@ struct kvaser_usb_err_summary {
340342
};
341343
};
342344

345+
static const struct can_bittiming_const kvaser_usb_leaf_bittiming_const = {
346+
.name = "kvaser_usb",
347+
.tseg1_min = KVASER_USB_TSEG1_MIN,
348+
.tseg1_max = KVASER_USB_TSEG1_MAX,
349+
.tseg2_min = KVASER_USB_TSEG2_MIN,
350+
.tseg2_max = KVASER_USB_TSEG2_MAX,
351+
.sjw_max = KVASER_USB_SJW_MAX,
352+
.brp_min = KVASER_USB_BRP_MIN,
353+
.brp_max = KVASER_USB_BRP_MAX,
354+
.brp_inc = KVASER_USB_BRP_INC,
355+
};
356+
357+
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_8mhz = {
358+
.clock = {
359+
.freq = 8000000,
360+
},
361+
.timestamp_freq = 1,
362+
.bittiming_const = &kvaser_usb_leaf_bittiming_const,
363+
};
364+
365+
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_16mhz = {
366+
.clock = {
367+
.freq = 16000000,
368+
},
369+
.timestamp_freq = 1,
370+
.bittiming_const = &kvaser_usb_leaf_bittiming_const,
371+
};
372+
373+
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_24mhz = {
374+
.clock = {
375+
.freq = 24000000,
376+
},
377+
.timestamp_freq = 1,
378+
.bittiming_const = &kvaser_usb_leaf_bittiming_const,
379+
};
380+
381+
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_32mhz = {
382+
.clock = {
383+
.freq = 32000000,
384+
},
385+
.timestamp_freq = 1,
386+
.bittiming_const = &kvaser_usb_leaf_bittiming_const,
387+
};
388+
343389
static void *
344390
kvaser_usb_leaf_frame_to_cmd(const struct kvaser_usb_net_priv *priv,
345391
const struct sk_buff *skb, int *frame_len,
@@ -471,6 +517,27 @@ static int kvaser_usb_leaf_send_simple_cmd(const struct kvaser_usb *dev,
471517
return rc;
472518
}
473519

520+
static void kvaser_usb_leaf_get_software_info_leaf(struct kvaser_usb *dev,
521+
const struct leaf_cmd_softinfo *softinfo)
522+
{
523+
u32 sw_options = le32_to_cpu(softinfo->sw_options);
524+
525+
dev->fw_version = le32_to_cpu(softinfo->fw_version);
526+
dev->max_tx_urbs = le16_to_cpu(softinfo->max_outstanding_tx);
527+
528+
switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK) {
529+
case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK:
530+
dev->cfg = &kvaser_usb_leaf_dev_cfg_16mhz;
531+
break;
532+
case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK:
533+
dev->cfg = &kvaser_usb_leaf_dev_cfg_24mhz;
534+
break;
535+
case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK:
536+
dev->cfg = &kvaser_usb_leaf_dev_cfg_32mhz;
537+
break;
538+
}
539+
}
540+
474541
static int kvaser_usb_leaf_get_software_info_inner(struct kvaser_usb *dev)
475542
{
476543
struct kvaser_cmd cmd;
@@ -486,14 +553,13 @@ static int kvaser_usb_leaf_get_software_info_inner(struct kvaser_usb *dev)
486553

487554
switch (dev->card_data.leaf.family) {
488555
case KVASER_LEAF:
489-
dev->fw_version = le32_to_cpu(cmd.u.leaf.softinfo.fw_version);
490-
dev->max_tx_urbs =
491-
le16_to_cpu(cmd.u.leaf.softinfo.max_outstanding_tx);
556+
kvaser_usb_leaf_get_software_info_leaf(dev, &cmd.u.leaf.softinfo);
492557
break;
493558
case KVASER_USBCAN:
494559
dev->fw_version = le32_to_cpu(cmd.u.usbcan.softinfo.fw_version);
495560
dev->max_tx_urbs =
496561
le16_to_cpu(cmd.u.usbcan.softinfo.max_outstanding_tx);
562+
dev->cfg = &kvaser_usb_leaf_dev_cfg_8mhz;
497563
break;
498564
}
499565

@@ -1225,24 +1291,11 @@ static int kvaser_usb_leaf_init_card(struct kvaser_usb *dev)
12251291
{
12261292
struct kvaser_usb_dev_card_data *card_data = &dev->card_data;
12271293

1228-
dev->cfg = &kvaser_usb_leaf_dev_cfg;
12291294
card_data->ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES;
12301295

12311296
return 0;
12321297
}
12331298

1234-
static const struct can_bittiming_const kvaser_usb_leaf_bittiming_const = {
1235-
.name = "kvaser_usb",
1236-
.tseg1_min = KVASER_USB_TSEG1_MIN,
1237-
.tseg1_max = KVASER_USB_TSEG1_MAX,
1238-
.tseg2_min = KVASER_USB_TSEG2_MIN,
1239-
.tseg2_max = KVASER_USB_TSEG2_MAX,
1240-
.sjw_max = KVASER_USB_SJW_MAX,
1241-
.brp_min = KVASER_USB_BRP_MIN,
1242-
.brp_max = KVASER_USB_BRP_MAX,
1243-
.brp_inc = KVASER_USB_BRP_INC,
1244-
};
1245-
12461299
static int kvaser_usb_leaf_set_bittiming(struct net_device *netdev)
12471300
{
12481301
struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
@@ -1348,11 +1401,3 @@ const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops = {
13481401
.dev_read_bulk_callback = kvaser_usb_leaf_read_bulk_callback,
13491402
.dev_frame_to_cmd = kvaser_usb_leaf_frame_to_cmd,
13501403
};
1351-
1352-
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg = {
1353-
.clock = {
1354-
.freq = CAN_USB_CLOCK,
1355-
},
1356-
.timestamp_freq = 1,
1357-
.bittiming_const = &kvaser_usb_leaf_bittiming_const,
1358-
};

0 commit comments

Comments
 (0)