can: kvaser_usb: kvaser_usb_leaf: fix bittiming limits
commit b3b6df2c56d80b8c6740433cff5f016668b8de70 upstream. Use correct bittiming limits depending on device. For devices based on USBcanII, Leaf M32C or Leaf i.MX28. Fixes:080f40a6fa
("can: kvaser_usb: Add support for Kvaser CAN/USB devices") Fixes:b4f20130af
("can: kvaser_usb: add support for Kvaser Leaf v2 and usb mini PCIe") Fixes:f5d4abea3c
("can: kvaser_usb: Add support for the USBcan-II family") Link: https://lore.kernel.org/all/20220603083820.800246-4-extja@kvaser.com Cc: stable@vger.kernel.org Signed-off-by: Jimmy Assarsson <extja@kvaser.com> [mkl: remove stray netlink.h include] [mkl: keep struct can_bittiming_const kvaser_usb_flexc_bittiming_const in kvaser_usb_hydra.c] Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
a741e762e1
commit
852952ea0e
@@ -188,4 +188,6 @@ int kvaser_usb_send_cmd_async(struct kvaser_usb_net_priv *priv, void *cmd,
|
|||||||
|
|
||||||
int kvaser_usb_can_rx_over_error(struct net_device *netdev);
|
int kvaser_usb_can_rx_over_error(struct net_device *netdev);
|
||||||
|
|
||||||
|
extern const struct can_bittiming_const kvaser_usb_flexc_bittiming_const;
|
||||||
|
|
||||||
#endif /* KVASER_USB_H */
|
#endif /* KVASER_USB_H */
|
||||||
|
@@ -371,7 +371,7 @@ static const struct can_bittiming_const kvaser_usb_hydra_kcan_bittiming_c = {
|
|||||||
.brp_inc = 1,
|
.brp_inc = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct can_bittiming_const kvaser_usb_hydra_flexc_bittiming_c = {
|
const struct can_bittiming_const kvaser_usb_flexc_bittiming_const = {
|
||||||
.name = "kvaser_usb_flex",
|
.name = "kvaser_usb_flex",
|
||||||
.tseg1_min = 4,
|
.tseg1_min = 4,
|
||||||
.tseg1_max = 16,
|
.tseg1_max = 16,
|
||||||
@@ -2024,5 +2024,5 @@ static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_flexc = {
|
|||||||
.freq = 24000000,
|
.freq = 24000000,
|
||||||
},
|
},
|
||||||
.timestamp_freq = 1,
|
.timestamp_freq = 1,
|
||||||
.bittiming_const = &kvaser_usb_hydra_flexc_bittiming_c,
|
.bittiming_const = &kvaser_usb_flexc_bittiming_const,
|
||||||
};
|
};
|
||||||
|
@@ -100,16 +100,6 @@
|
|||||||
#define USBCAN_ERROR_STATE_RX_ERROR BIT(1)
|
#define USBCAN_ERROR_STATE_RX_ERROR BIT(1)
|
||||||
#define USBCAN_ERROR_STATE_BUSERROR BIT(2)
|
#define USBCAN_ERROR_STATE_BUSERROR BIT(2)
|
||||||
|
|
||||||
/* bittiming parameters */
|
|
||||||
#define KVASER_USB_TSEG1_MIN 1
|
|
||||||
#define KVASER_USB_TSEG1_MAX 16
|
|
||||||
#define KVASER_USB_TSEG2_MIN 1
|
|
||||||
#define KVASER_USB_TSEG2_MAX 8
|
|
||||||
#define KVASER_USB_SJW_MAX 4
|
|
||||||
#define KVASER_USB_BRP_MIN 1
|
|
||||||
#define KVASER_USB_BRP_MAX 64
|
|
||||||
#define KVASER_USB_BRP_INC 1
|
|
||||||
|
|
||||||
/* ctrl modes */
|
/* ctrl modes */
|
||||||
#define KVASER_CTRL_MODE_NORMAL 1
|
#define KVASER_CTRL_MODE_NORMAL 1
|
||||||
#define KVASER_CTRL_MODE_SILENT 2
|
#define KVASER_CTRL_MODE_SILENT 2
|
||||||
@@ -342,48 +332,68 @@ struct kvaser_usb_err_summary {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct can_bittiming_const kvaser_usb_leaf_bittiming_const = {
|
static const struct can_bittiming_const kvaser_usb_leaf_m16c_bittiming_const = {
|
||||||
.name = "kvaser_usb",
|
.name = "kvaser_usb_ucii",
|
||||||
.tseg1_min = KVASER_USB_TSEG1_MIN,
|
.tseg1_min = 4,
|
||||||
.tseg1_max = KVASER_USB_TSEG1_MAX,
|
.tseg1_max = 16,
|
||||||
.tseg2_min = KVASER_USB_TSEG2_MIN,
|
.tseg2_min = 2,
|
||||||
.tseg2_max = KVASER_USB_TSEG2_MAX,
|
.tseg2_max = 8,
|
||||||
.sjw_max = KVASER_USB_SJW_MAX,
|
.sjw_max = 4,
|
||||||
.brp_min = KVASER_USB_BRP_MIN,
|
.brp_min = 1,
|
||||||
.brp_max = KVASER_USB_BRP_MAX,
|
.brp_max = 16,
|
||||||
.brp_inc = KVASER_USB_BRP_INC,
|
.brp_inc = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_8mhz = {
|
static const struct can_bittiming_const kvaser_usb_leaf_m32c_bittiming_const = {
|
||||||
|
.name = "kvaser_usb_leaf",
|
||||||
|
.tseg1_min = 3,
|
||||||
|
.tseg1_max = 16,
|
||||||
|
.tseg2_min = 2,
|
||||||
|
.tseg2_max = 8,
|
||||||
|
.sjw_max = 4,
|
||||||
|
.brp_min = 2,
|
||||||
|
.brp_max = 128,
|
||||||
|
.brp_inc = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_usbcan_dev_cfg = {
|
||||||
.clock = {
|
.clock = {
|
||||||
.freq = 8000000,
|
.freq = 8000000,
|
||||||
},
|
},
|
||||||
.timestamp_freq = 1,
|
.timestamp_freq = 1,
|
||||||
.bittiming_const = &kvaser_usb_leaf_bittiming_const,
|
.bittiming_const = &kvaser_usb_leaf_m16c_bittiming_const,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_16mhz = {
|
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_m32c_dev_cfg = {
|
||||||
.clock = {
|
.clock = {
|
||||||
.freq = 16000000,
|
.freq = 16000000,
|
||||||
},
|
},
|
||||||
.timestamp_freq = 1,
|
.timestamp_freq = 1,
|
||||||
.bittiming_const = &kvaser_usb_leaf_bittiming_const,
|
.bittiming_const = &kvaser_usb_leaf_m32c_bittiming_const,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_24mhz = {
|
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_imx_dev_cfg_16mhz = {
|
||||||
|
.clock = {
|
||||||
|
.freq = 16000000,
|
||||||
|
},
|
||||||
|
.timestamp_freq = 1,
|
||||||
|
.bittiming_const = &kvaser_usb_flexc_bittiming_const,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_imx_dev_cfg_24mhz = {
|
||||||
.clock = {
|
.clock = {
|
||||||
.freq = 24000000,
|
.freq = 24000000,
|
||||||
},
|
},
|
||||||
.timestamp_freq = 1,
|
.timestamp_freq = 1,
|
||||||
.bittiming_const = &kvaser_usb_leaf_bittiming_const,
|
.bittiming_const = &kvaser_usb_flexc_bittiming_const,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_32mhz = {
|
static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_imx_dev_cfg_32mhz = {
|
||||||
.clock = {
|
.clock = {
|
||||||
.freq = 32000000,
|
.freq = 32000000,
|
||||||
},
|
},
|
||||||
.timestamp_freq = 1,
|
.timestamp_freq = 1,
|
||||||
.bittiming_const = &kvaser_usb_leaf_bittiming_const,
|
.bittiming_const = &kvaser_usb_flexc_bittiming_const,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
@@ -529,17 +539,17 @@ static void kvaser_usb_leaf_get_software_info_leaf(struct kvaser_usb *dev,
|
|||||||
/* Firmware expects bittiming parameters calculated for 16MHz
|
/* Firmware expects bittiming parameters calculated for 16MHz
|
||||||
* clock, regardless of the actual clock
|
* clock, regardless of the actual clock
|
||||||
*/
|
*/
|
||||||
dev->cfg = &kvaser_usb_leaf_dev_cfg_16mhz;
|
dev->cfg = &kvaser_usb_leaf_m32c_dev_cfg;
|
||||||
} else {
|
} else {
|
||||||
switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK) {
|
switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK) {
|
||||||
case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK:
|
case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK:
|
||||||
dev->cfg = &kvaser_usb_leaf_dev_cfg_16mhz;
|
dev->cfg = &kvaser_usb_leaf_imx_dev_cfg_16mhz;
|
||||||
break;
|
break;
|
||||||
case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK:
|
case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK:
|
||||||
dev->cfg = &kvaser_usb_leaf_dev_cfg_24mhz;
|
dev->cfg = &kvaser_usb_leaf_imx_dev_cfg_24mhz;
|
||||||
break;
|
break;
|
||||||
case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK:
|
case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK:
|
||||||
dev->cfg = &kvaser_usb_leaf_dev_cfg_32mhz;
|
dev->cfg = &kvaser_usb_leaf_imx_dev_cfg_32mhz;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -566,7 +576,7 @@ static int kvaser_usb_leaf_get_software_info_inner(struct kvaser_usb *dev)
|
|||||||
dev->fw_version = le32_to_cpu(cmd.u.usbcan.softinfo.fw_version);
|
dev->fw_version = le32_to_cpu(cmd.u.usbcan.softinfo.fw_version);
|
||||||
dev->max_tx_urbs =
|
dev->max_tx_urbs =
|
||||||
le16_to_cpu(cmd.u.usbcan.softinfo.max_outstanding_tx);
|
le16_to_cpu(cmd.u.usbcan.softinfo.max_outstanding_tx);
|
||||||
dev->cfg = &kvaser_usb_leaf_dev_cfg_8mhz;
|
dev->cfg = &kvaser_usb_leaf_usbcan_dev_cfg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user