Commit f0b0a2d8 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge tag 'linux-can-fixes-for-5.10-20201118' of...

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

Marc Kleine-Budde says:

====================
pull-request: can 2020-11-18

Jimmy Assarsson provides two patches for the kvaser_pciefd and kvaser_usb
drivers, where the can_bittiming_const are fixed.

The next patch is by me and fixes an erroneous flexcan_transceiver_enable()
during bus-off recovery in the flexcan driver.

Jarkko Nikula's patch for the m_can driver fixes the IRQ handler to only
process the interrupts if the device is not suspended.

* tag 'linux-can-fixes-for-5.10-20201118' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can:
  can: m_can: process interrupt only when not runtime suspended
  can: flexcan: flexcan_chip_start(): fix erroneous flexcan_transceiver_enable() during bus-off recovery
  can: kvaser_usb: kvaser_usb_hydra: Fix KCAN bittiming limits
  can: kvaser_pciefd: Fix KCAN bittiming limits
====================

Link: https://lore.kernel.org/r/20201118160414.2731659-1-mkl@pengutronix.de


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 6d9c8d15 a1f63446
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -1567,14 +1567,10 @@ static int flexcan_chip_start(struct net_device *dev)
		priv->write(reg_ctrl2, &regs->ctrl2);
	}

	err = flexcan_transceiver_enable(priv);
	if (err)
		goto out_chip_disable;

	/* synchronize with the can bus */
	err = flexcan_chip_unfreeze(priv);
	if (err)
		goto out_transceiver_disable;
		goto out_chip_disable;

	priv->can.state = CAN_STATE_ERROR_ACTIVE;

@@ -1592,8 +1588,6 @@ static int flexcan_chip_start(struct net_device *dev)

	return 0;

 out_transceiver_disable:
	flexcan_transceiver_disable(priv);
 out_chip_disable:
	flexcan_chip_disable(priv);
	return err;
@@ -1623,7 +1617,6 @@ static int __flexcan_chip_stop(struct net_device *dev, bool disable_on_error)
	priv->write(priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_ALL,
		    &regs->ctrl);

	flexcan_transceiver_disable(priv);
	priv->can.state = CAN_STATE_STOPPED;

	return 0;
@@ -1665,10 +1658,14 @@ static int flexcan_open(struct net_device *dev)
	if (err)
		goto out_runtime_put;

	err = request_irq(dev->irq, flexcan_irq, IRQF_SHARED, dev->name, dev);
	err = flexcan_transceiver_enable(priv);
	if (err)
		goto out_close;

	err = request_irq(dev->irq, flexcan_irq, IRQF_SHARED, dev->name, dev);
	if (err)
		goto out_transceiver_disable;

	if (priv->can.ctrlmode & CAN_CTRLMODE_FD)
		priv->mb_size = sizeof(struct flexcan_mb) + CANFD_MAX_DLEN;
	else
@@ -1720,6 +1717,8 @@ static int flexcan_open(struct net_device *dev)
	can_rx_offload_del(&priv->offload);
 out_free_irq:
	free_irq(dev->irq, dev);
 out_transceiver_disable:
	flexcan_transceiver_disable(priv);
 out_close:
	close_candev(dev);
 out_runtime_put:
@@ -1738,6 +1737,7 @@ static int flexcan_close(struct net_device *dev)

	can_rx_offload_del(&priv->offload);
	free_irq(dev->irq, dev);
	flexcan_transceiver_disable(priv);

	close_candev(dev);
	pm_runtime_put(priv->dev);
+2 −2
Original line number Diff line number Diff line
@@ -287,12 +287,12 @@ struct kvaser_pciefd_tx_packet {
static const struct can_bittiming_const kvaser_pciefd_bittiming_const = {
	.name = KVASER_PCIEFD_DRV_NAME,
	.tseg1_min = 1,
	.tseg1_max = 255,
	.tseg1_max = 512,
	.tseg2_min = 1,
	.tseg2_max = 32,
	.sjw_max = 16,
	.brp_min = 1,
	.brp_max = 4096,
	.brp_max = 8192,
	.brp_inc = 1,
};

+2 −0
Original line number Diff line number Diff line
@@ -956,6 +956,8 @@ static irqreturn_t m_can_isr(int irq, void *dev_id)
	struct net_device_stats *stats = &dev->stats;
	u32 ir;

	if (pm_runtime_suspended(cdev->dev))
		return IRQ_NONE;
	ir = m_can_read(cdev, M_CAN_IR);
	if (!ir)
		return IRQ_NONE;
+1 −1
Original line number Diff line number Diff line
@@ -367,7 +367,7 @@ static const struct can_bittiming_const kvaser_usb_hydra_kcan_bittiming_c = {
	.tseg2_max = 32,
	.sjw_max = 16,
	.brp_min = 1,
	.brp_max = 4096,
	.brp_max = 8192,
	.brp_inc = 1,
};