Commit ed75e1ac authored by David S. Miller's avatar David S. Miller

Merge tag 'linux-can-fixes-for-4.15-20171201' of...

Merge tag 'linux-can-fixes-for-4.15-20171201' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can

Marc Kleine-Budde says:

====================
pull-request: can 2017-12-01

this is a pull for net consisting of nine patches.

The first three patches are by Jimmy Assarsson for the kvaser_usb driver
and add the missing free()s in some error path, a signed/unsigned
comparison and ratelimit the error messages in case of incomplete
messages. Oliver Stäbler's patch for the ti_hecc driver fix the napi
poll function's return value. The return values of the probe function of
the peak_canfd and peak_pci PCI drivers are fixed by Stephane Grosjean's
patch. Two patches by me for the flexcan driver update the
bugs/features/quirks overview table and fix the error state transition
for the VF610 SoC. The two patches by Martin Kelly for the mcba_usb
driver fix a typo and a device disconnect bug.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 45ab4b13 1cb35a33
...@@ -184,12 +184,12 @@ ...@@ -184,12 +184,12 @@
* Below is some version info we got: * Below is some version info we got:
* SOC Version IP-Version Glitch- [TR]WRN_INT IRQ Err Memory err RTR re- * SOC Version IP-Version Glitch- [TR]WRN_INT IRQ Err Memory err RTR re-
* Filter? connected? Passive detection ception in MB * Filter? connected? Passive detection ception in MB
* MX25 FlexCAN2 03.00.00.00 no no ? no no * MX25 FlexCAN2 03.00.00.00 no no no no no
* MX28 FlexCAN2 03.00.04.00 yes yes no no no * MX28 FlexCAN2 03.00.04.00 yes yes no no no
* MX35 FlexCAN2 03.00.00.00 no no ? no no * MX35 FlexCAN2 03.00.00.00 no no no no no
* MX53 FlexCAN2 03.00.00.00 yes no no no no * MX53 FlexCAN2 03.00.00.00 yes no no no no
* MX6s FlexCAN3 10.00.12.00 yes yes no no yes * MX6s FlexCAN3 10.00.12.00 yes yes no no yes
* VF610 FlexCAN3 ? no yes ? yes yes? * VF610 FlexCAN3 ? no yes no yes yes?
* *
* Some SOCs do not have the RX_WARN & TX_WARN interrupt line connected. * Some SOCs do not have the RX_WARN & TX_WARN interrupt line connected.
*/ */
...@@ -297,7 +297,8 @@ static const struct flexcan_devtype_data fsl_imx6q_devtype_data = { ...@@ -297,7 +297,8 @@ static const struct flexcan_devtype_data fsl_imx6q_devtype_data = {
static const struct flexcan_devtype_data fsl_vf610_devtype_data = { static const struct flexcan_devtype_data fsl_vf610_devtype_data = {
.quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS |
FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP, FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP |
FLEXCAN_QUIRK_BROKEN_PERR_STATE,
}; };
static const struct can_bittiming_const flexcan_bittiming_const = { static const struct can_bittiming_const flexcan_bittiming_const = {
......
...@@ -825,7 +825,10 @@ static int peak_pciefd_probe(struct pci_dev *pdev, ...@@ -825,7 +825,10 @@ static int peak_pciefd_probe(struct pci_dev *pdev,
err_disable_pci: err_disable_pci:
pci_disable_device(pdev); pci_disable_device(pdev);
return err; /* pci_xxx_config_word() return positive PCIBIOS_xxx error codes while
* the probe() function must return a negative errno in case of failure
* (err is unchanged if negative) */
return pcibios_err_to_errno(err);
} }
/* free the board structure object, as well as its resources: */ /* free the board structure object, as well as its resources: */
......
...@@ -717,7 +717,10 @@ static int peak_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -717,7 +717,10 @@ static int peak_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
failure_disable_pci: failure_disable_pci:
pci_disable_device(pdev); pci_disable_device(pdev);
return err; /* pci_xxx_config_word() return positive PCIBIOS_xxx error codes while
* the probe() function must return a negative errno in case of failure
* (err is unchanged if negative) */
return pcibios_err_to_errno(err);
} }
static void peak_pci_remove(struct pci_dev *pdev) static void peak_pci_remove(struct pci_dev *pdev)
......
...@@ -637,6 +637,9 @@ static int ti_hecc_rx_poll(struct napi_struct *napi, int quota) ...@@ -637,6 +637,9 @@ static int ti_hecc_rx_poll(struct napi_struct *napi, int quota)
mbx_mask = hecc_read(priv, HECC_CANMIM); mbx_mask = hecc_read(priv, HECC_CANMIM);
mbx_mask |= HECC_TX_MBOX_MASK; mbx_mask |= HECC_TX_MBOX_MASK;
hecc_write(priv, HECC_CANMIM, mbx_mask); hecc_write(priv, HECC_CANMIM, mbx_mask);
} else {
/* repoll is done only if whole budget is used */
num_pkts = quota;
} }
return num_pkts; return num_pkts;
......
...@@ -609,7 +609,7 @@ static int kvaser_usb_wait_msg(const struct kvaser_usb *dev, u8 id, ...@@ -609,7 +609,7 @@ static int kvaser_usb_wait_msg(const struct kvaser_usb *dev, u8 id,
} }
if (pos + tmp->len > actual_len) { if (pos + tmp->len > actual_len) {
dev_err(dev->udev->dev.parent, dev_err_ratelimited(dev->udev->dev.parent,
"Format error\n"); "Format error\n");
break; break;
} }
...@@ -813,6 +813,7 @@ static int kvaser_usb_simple_msg_async(struct kvaser_usb_net_priv *priv, ...@@ -813,6 +813,7 @@ static int kvaser_usb_simple_msg_async(struct kvaser_usb_net_priv *priv,
if (err) { if (err) {
netdev_err(netdev, "Error transmitting URB\n"); netdev_err(netdev, "Error transmitting URB\n");
usb_unanchor_urb(urb); usb_unanchor_urb(urb);
kfree(buf);
usb_free_urb(urb); usb_free_urb(urb);
return err; return err;
} }
...@@ -1333,7 +1334,7 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb) ...@@ -1333,7 +1334,7 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb)
goto resubmit_urb; goto resubmit_urb;
} }
while (pos <= urb->actual_length - MSG_HEADER_LEN) { while (pos <= (int)(urb->actual_length - MSG_HEADER_LEN)) {
msg = urb->transfer_buffer + pos; msg = urb->transfer_buffer + pos;
/* The Kvaser firmware can only read and write messages that /* The Kvaser firmware can only read and write messages that
...@@ -1352,7 +1353,8 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb) ...@@ -1352,7 +1353,8 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb)
} }
if (pos + msg->len > urb->actual_length) { if (pos + msg->len > urb->actual_length) {
dev_err(dev->udev->dev.parent, "Format error\n"); dev_err_ratelimited(dev->udev->dev.parent,
"Format error\n");
break; break;
} }
...@@ -1768,6 +1770,7 @@ static netdev_tx_t kvaser_usb_start_xmit(struct sk_buff *skb, ...@@ -1768,6 +1770,7 @@ static netdev_tx_t kvaser_usb_start_xmit(struct sk_buff *skb,
spin_unlock_irqrestore(&priv->tx_contexts_lock, flags); spin_unlock_irqrestore(&priv->tx_contexts_lock, flags);
usb_unanchor_urb(urb); usb_unanchor_urb(urb);
kfree(buf);
stats->tx_dropped++; stats->tx_dropped++;
......
...@@ -592,6 +592,7 @@ static void mcba_usb_read_bulk_callback(struct urb *urb) ...@@ -592,6 +592,7 @@ static void mcba_usb_read_bulk_callback(struct urb *urb)
break; break;
case -ENOENT: case -ENOENT:
case -EPIPE:
case -ESHUTDOWN: case -ESHUTDOWN:
return; return;
...@@ -862,7 +863,7 @@ static int mcba_usb_probe(struct usb_interface *intf, ...@@ -862,7 +863,7 @@ static int mcba_usb_probe(struct usb_interface *intf,
goto cleanup_unregister_candev; goto cleanup_unregister_candev;
} }
dev_info(&intf->dev, "Microchip CAN BUS analizer connected\n"); dev_info(&intf->dev, "Microchip CAN BUS Analyzer connected\n");
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment