]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Dec 2021 12:03:37 +0000 (13:03 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Dec 2021 12:03:37 +0000 (13:03 +0100)
added patches:
can-kvaser_usb-get-can-clock-frequency-from-device.patch
net-usb-lan78xx-add-allied-telesis-at29m2-af.patch

queue-4.4/can-kvaser_usb-get-can-clock-frequency-from-device.patch [new file with mode: 0644]
queue-4.4/net-usb-lan78xx-add-allied-telesis-at29m2-af.patch [new file with mode: 0644]
queue-4.4/series [new file with mode: 0644]

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 (file)
index 0000000..b9832ad
--- /dev/null
@@ -0,0 +1,117 @@
+From fb12797ab1fef480ad8a32a30984844444eeb00d Mon Sep 17 00:00:00 2001
+From: Jimmy Assarsson <extja@kvaser.com>
+Date: Wed, 8 Dec 2021 16:21:22 +0100
+Subject: can: kvaser_usb: get CAN clock frequency from device
+
+From: Jimmy Assarsson <extja@kvaser.com>
+
+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 <extja@kvaser.com>
+Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..29cd314
--- /dev/null
@@ -0,0 +1,42 @@
+From ef8a0f6eab1ca5d1a75c242c5c7b9d386735fa0a Mon Sep 17 00:00:00 2001
+From: Greg Jesionowski <jesionowskigreg@gmail.com>
+Date: Tue, 14 Dec 2021 15:10:27 -0700
+Subject: net: usb: lan78xx: add Allied Telesis AT29M2-AF
+
+From: Greg Jesionowski <jesionowskigreg@gmail.com>
+
+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 <jesionowskigreg@gmail.com>
+Link: https://lore.kernel.org/r/20211214221027.305784-1-jesionowskigreg@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..5e5e880
--- /dev/null
@@ -0,0 +1,2 @@
+net-usb-lan78xx-add-allied-telesis-at29m2-af.patch
+can-kvaser_usb-get-can-clock-frequency-from-device.patch