forked from luck/tmp_suning_uos_patched
linux-can-fixes-for-5.10-20201118
-----BEGIN PGP SIGNATURE----- iQFHBAABCgAxFiEEK3kIWJt9yTYMP3ehqclaivrt76kFAl+1QxwTHG1rbEBwZW5n dXRyb25peC5kZQAKCRCpyVqK+u3vqVKjB/wO4VxhYVsszeJTTqO2KmQA/v0EkPUq +bUlA8Zew1D9x7YkRT9bf3vt7UxGCIMG4hqIRIt9ktK6gc6HIvqvTSIEDZXTs6N5 dFtY7+YEezSpDYo5Z9tzsBrMTH7JGGqRPjlHuKJkPoTWJ5UYqGQcrsXqZvOVD2t8 hKNtV0loaTrAv1d68I5IP+Yk/OCFeIHdg/WBArJ1BxXgsPhN1kpb3Zr8wj1yVIVu 7je9sJ5FheNEPtR+rJOKbRlJl+s2Qn3tubnz0rsbJzbThsBS3tTmY27XKQ7yWvRX BdmuQgm9dfx/glHvZDRCnUKvlWka+CopLT8RTkK3B3o2E04aIZuSdPAl =PDPZ -----END PGP SIGNATURE----- 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: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
f0b0a2d8a1
|
@ -1567,14 +1567,10 @@ static int flexcan_chip_start(struct net_device *dev)
|
|||
priv->write(reg_ctrl2, ®s->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,
|
||||
®s->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);
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user