linux_dsm_epyc7002/drivers/net/can
Marc Kleine-Budde cd9f13c594 can: flexcan: flexcan_chip_start(): fix erroneous flexcan_transceiver_enable() during bus-off recovery
If the CAN controller goes into bus off, the do_set_mode() callback with
CAN_MODE_START can be used to recover the controller, which then calls
flexcan_chip_start(). If configured, this is done automatically by the
framework or manually by the user.

In flexcan_chip_start() there is an explicit call to
flexcan_transceiver_enable(), which does a regulator_enable() on the
transceiver regulator. This results in a net usage counter increase, as there
is no corresponding flexcan_transceiver_disable() in the bus off code path.
This further leads to the transceiver stuck enabled, even if the CAN interface
is shut down.

To fix this problem the
flexcan_transceiver_enable()/flexcan_transceiver_disable() are moved out of
flexcan_chip_start()/flexcan_chip_stop() into flexcan_open()/flexcan_close().

Fixes: e955cead03 ("CAN: Add Flexcan CAN controller driver")
Link: https://lore.kernel.org/r/20201118150148.2664024-1-mkl@pengutronix.de
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
2020-11-18 16:02:34 +01:00
..
c_can can: c_can: reg_map_{c,d}_can: mark as __maybe_unused 2020-10-06 22:44:26 +02:00
cc770 can: drivers: fix spelling mistakes 2020-09-21 10:13:16 +02:00
ifi_canfd treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
m_can can: m_can: m_can_stop(): set device to software init mode before closing 2020-11-15 18:33:45 +01:00
mscan can: mscan: simplify clock enable/disable 2020-09-21 10:13:19 +02:00
peak_canfd can: peak_canfd: pucan_handle_can_rx(): fix echo management when loopback is on 2020-11-03 22:30:32 +01:00
rcar treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
sja1000 can: drivers: fix spelling mistakes 2020-09-21 10:13:16 +02:00
softing can: softing: softing_card_shutdown(): add braces around empty body in an 'if' statement 2020-10-06 22:44:03 +02:00
spi can: mcp251xfd: remove unneeded break 2020-11-03 22:30:33 +01:00
usb can: kvaser_usb: kvaser_usb_hydra: Fix KCAN bittiming limits 2020-11-18 09:06:35 +01:00
at91_can.c can: drivers: fix spelling mistakes 2020-09-21 10:13:16 +02:00
dev.c can: dev: can_restart(): post buffer from the right context 2020-11-15 18:24:35 +01:00
flexcan.c can: flexcan: flexcan_chip_start(): fix erroneous flexcan_transceiver_enable() during bus-off recovery 2020-11-18 16:02:34 +01:00
grcan.c can: drivers: fix spelling mistakes 2020-09-21 10:13:16 +02:00
janz-ican3.c treewide: Remove uninitialized_var() usage 2020-07-16 12:35:15 -07:00
Kconfig can: slcan: update dead link 2020-09-21 10:13:16 +02:00
kvaser_pciefd.c can: kvaser_pciefd: Fix KCAN bittiming limits 2020-11-18 09:06:35 +01:00
led.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
Makefile can: kvaser_pciefd: Add driver for Kvaser PCIEcan devices 2019-07-24 10:31:53 +02:00
pch_can.c can: pch_can: use generic power management 2020-09-21 10:13:18 +02:00
rx-offload.c can: rx-offload: don't call kfree_skb() from IRQ context 2020-11-03 22:24:19 +01:00
slcan.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
sun4i_can.c net: Fix return value about devm_platform_ioremap_resource() 2020-05-23 16:28:25 -07:00
ti_hecc.c can: ti_hecc: Fix memleak in ti_hecc_probe 2020-11-15 18:24:35 +01:00
vcan.c can: make use of preallocated can_ml_priv for per device struct can_dev_rcv_lists 2019-09-04 13:29:15 +02:00
vxcan.c can: make use of preallocated can_ml_priv for per device struct can_dev_rcv_lists 2019-09-04 13:29:15 +02:00
xilinx_can.c can: xilinx_can: handle failure cases of pm_runtime_get_sync 2020-11-03 22:30:32 +01:00