From: Greg Kroah-Hartman Date: Wed, 22 Dec 2021 12:03:37 +0000 (+0100) Subject: 4.4-stable patches X-Git-Tag: v4.4.297~67 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a55cb31dbda97d37e8f9e7eb805d64b13fb1f425;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: can-kvaser_usb-get-can-clock-frequency-from-device.patch net-usb-lan78xx-add-allied-telesis-at29m2-af.patch --- diff --git a/queue-4.4/can-kvaser_usb-get-can-clock-frequency-from-device.patch b/queue-4.4/can-kvaser_usb-get-can-clock-frequency-from-device.patch new file mode 100644 index 00000000000..b9832adb2d2 --- /dev/null +++ b/queue-4.4/can-kvaser_usb-get-can-clock-frequency-from-device.patch @@ -0,0 +1,117 @@ +From fb12797ab1fef480ad8a32a30984844444eeb00d Mon Sep 17 00:00:00 2001 +From: Jimmy Assarsson +Date: Wed, 8 Dec 2021 16:21:22 +0100 +Subject: can: kvaser_usb: get CAN clock frequency from device + +From: Jimmy Assarsson + +commit fb12797ab1fef480ad8a32a30984844444eeb00d upstream. + +The CAN clock frequency is used when calculating the CAN bittiming +parameters. When wrong clock frequency is used, the device may end up +with wrong bittiming parameters, depending on user requested bittiming +parameters. + +To avoid this, get the CAN clock frequency from the device. Various +existing Kvaser Leaf products use different CAN clocks. + +Fixes: 080f40a6fa28 ("can: kvaser_usb: Add support for Kvaser CAN/USB devices") +Link: https://lore.kernel.org/all/20211208152122.250852-2-extja@kvaser.com +Cc: stable@vger.kernel.org +Signed-off-by: Jimmy Assarsson +Signed-off-by: Marc Kleine-Budde +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/can/usb/kvaser_usb.c | 41 ++++++++++++++++++++++++++++++++++----- + 1 file changed, 36 insertions(+), 5 deletions(-) + +--- a/drivers/net/can/usb/kvaser_usb.c ++++ b/drivers/net/can/usb/kvaser_usb.c +@@ -31,7 +31,10 @@ + #define USB_SEND_TIMEOUT 1000 /* msecs */ + #define USB_RECV_TIMEOUT 1000 /* msecs */ + #define RX_BUFFER_SIZE 3072 +-#define CAN_USB_CLOCK 8000000 ++#define KVASER_USB_CAN_CLOCK_8MHZ 8000000 ++#define KVASER_USB_CAN_CLOCK_16MHZ 16000000 ++#define KVASER_USB_CAN_CLOCK_24MHZ 24000000 ++#define KVASER_USB_CAN_CLOCK_32MHZ 32000000 + #define MAX_NET_DEVICES 3 + #define MAX_USBCAN_NET_DEVICES 2 + +@@ -139,6 +142,12 @@ static inline bool kvaser_is_usbcan(cons + #define CMD_LEAF_USB_THROTTLE 77 + #define CMD_LEAF_LOG_MESSAGE 106 + ++/* Leaf frequency options */ ++#define KVASER_USB_LEAF_SWOPTION_FREQ_MASK 0x60 ++#define KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK 0 ++#define KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK BIT(5) ++#define KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK BIT(6) ++ + /* error factors */ + #define M16C_EF_ACKE BIT(0) + #define M16C_EF_CRCE BIT(1) +@@ -469,6 +478,8 @@ struct kvaser_usb { + bool rxinitdone; + void *rxbuf[MAX_RX_URBS]; + dma_addr_t rxbuf_dma[MAX_RX_URBS]; ++ ++ struct can_clock clock; + }; + + struct kvaser_usb_net_priv { +@@ -646,6 +657,27 @@ static int kvaser_usb_send_simple_msg(co + return rc; + } + ++static void kvaser_usb_get_software_info_leaf(struct kvaser_usb *dev, ++ const struct leaf_msg_softinfo *softinfo) ++{ ++ u32 sw_options = le32_to_cpu(softinfo->sw_options); ++ ++ dev->fw_version = le32_to_cpu(softinfo->fw_version); ++ dev->max_tx_urbs = le16_to_cpu(softinfo->max_outstanding_tx); ++ ++ switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK) { ++ case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK: ++ dev->clock.freq = KVASER_USB_CAN_CLOCK_16MHZ; ++ break; ++ case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK: ++ dev->clock.freq = KVASER_USB_CAN_CLOCK_24MHZ; ++ break; ++ case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK: ++ dev->clock.freq = KVASER_USB_CAN_CLOCK_32MHZ; ++ break; ++ } ++} ++ + static int kvaser_usb_get_software_info(struct kvaser_usb *dev) + { + struct kvaser_msg msg; +@@ -661,14 +693,13 @@ static int kvaser_usb_get_software_info( + + switch (dev->family) { + case KVASER_LEAF: +- dev->fw_version = le32_to_cpu(msg.u.leaf.softinfo.fw_version); +- dev->max_tx_urbs = +- le16_to_cpu(msg.u.leaf.softinfo.max_outstanding_tx); ++ kvaser_usb_get_software_info_leaf(dev, &msg.u.leaf.softinfo); + break; + case KVASER_USBCAN: + dev->fw_version = le32_to_cpu(msg.u.usbcan.softinfo.fw_version); + dev->max_tx_urbs = + le16_to_cpu(msg.u.usbcan.softinfo.max_outstanding_tx); ++ dev->clock.freq = KVASER_USB_CAN_CLOCK_8MHZ; + break; + } + +@@ -1925,7 +1956,7 @@ static int kvaser_usb_init_one(struct us + kvaser_usb_reset_tx_urb_contexts(priv); + + priv->can.state = CAN_STATE_STOPPED; +- priv->can.clock.freq = CAN_USB_CLOCK; ++ priv->can.clock.freq = dev->clock.freq; + priv->can.bittiming_const = &kvaser_usb_bittiming_const; + priv->can.do_set_bittiming = kvaser_usb_set_bittiming; + priv->can.do_set_mode = kvaser_usb_set_mode; diff --git a/queue-4.4/net-usb-lan78xx-add-allied-telesis-at29m2-af.patch b/queue-4.4/net-usb-lan78xx-add-allied-telesis-at29m2-af.patch new file mode 100644 index 00000000000..29cd314317c --- /dev/null +++ b/queue-4.4/net-usb-lan78xx-add-allied-telesis-at29m2-af.patch @@ -0,0 +1,42 @@ +From ef8a0f6eab1ca5d1a75c242c5c7b9d386735fa0a Mon Sep 17 00:00:00 2001 +From: Greg Jesionowski +Date: Tue, 14 Dec 2021 15:10:27 -0700 +Subject: net: usb: lan78xx: add Allied Telesis AT29M2-AF + +From: Greg Jesionowski + +commit ef8a0f6eab1ca5d1a75c242c5c7b9d386735fa0a upstream. + +This adds the vendor and product IDs for the AT29M2-AF which is a +lan7801-based device. + +Signed-off-by: Greg Jesionowski +Link: https://lore.kernel.org/r/20211214221027.305784-1-jesionowskigreg@gmail.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/usb/lan78xx.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/net/usb/lan78xx.c ++++ b/drivers/net/usb/lan78xx.c +@@ -66,6 +66,8 @@ + #define LAN7850_USB_PRODUCT_ID (0x7850) + #define LAN78XX_EEPROM_MAGIC (0x78A5) + #define LAN78XX_OTP_MAGIC (0x78F3) ++#define AT29M2AF_USB_VENDOR_ID (0x07C9) ++#define AT29M2AF_USB_PRODUCT_ID (0x0012) + + #define MII_READ 1 + #define MII_WRITE 0 +@@ -3334,6 +3336,10 @@ static const struct usb_device_id produc + /* LAN7850 USB Gigabit Ethernet Device */ + USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7850_USB_PRODUCT_ID), + }, ++ { ++ /* ATM2-AF USB Gigabit Ethernet Device */ ++ USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID), ++ }, + {}, + }; + MODULE_DEVICE_TABLE(usb, products); diff --git a/queue-4.4/series b/queue-4.4/series new file mode 100644 index 00000000000..5e5e8801a85 --- /dev/null +++ b/queue-4.4/series @@ -0,0 +1,2 @@ +net-usb-lan78xx-add-allied-telesis-at29m2-af.patch +can-kvaser_usb-get-can-clock-frequency-from-device.patch