Age | Commit message (Collapse) | Author |
|
Make Epson RX8130 device tree and ACPI aware.
Fixes: ee0981be7704 ("rtc: ds1307: Add support for Epson RX8130CE")
Signed-off-by: Bastian Stender <bst@pengutronix.de>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
(cherry picked from commit 47dd47292828a552d62d0e68b7cd6bdc99d9e0aa)
|
|
This allows to have a clock on clko even if the controller is
disabled.
Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
|
|
The current implementation uses the clko pin always as a clock out.
Implement the binding documentation and use the pin as a start of frame
indication when microchip,clock-out-div is set to 0.
Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
|
|
Backport helper functions not available from the 4.14 kernel from 5.3.
Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
|
|
If CONFIG_CAN_MCP25XXFD_DEBUG_FS is not defined but CONFIG_DEBUG_FS is
then the code fails to compile.
Fix this by conditionally compile on CONFIG_CAN_MCP25XXFD_DEBUG_FS.
CONFIG_CAN_MCP25XXFD_DEBUG_FS depends on CONFIG_DEBUG_FS, there is no
need to test for both.
Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
|
|
Add device-tree bindings for Microcip CanFD Controller mcp2517fd
--
Changelog:
V1 -> V2: new more generic name based on feedback from microchip
cleanup of dt custom properties removing (most) gpio functions
V2 -> V3: added vendor-prefix for gpio-opendrain
s/_/-/
added gpio-controller
V3 -> V4: resend
added: Reviewed-by: Rob Herring <robh@kernel.org>
V7 -> V8: added support for mcp2518fd
added microchip,gpio0-xstandby
removed Reviewed-by because of changes
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit ca3c427d353bafffa51d38da57e49f61ba16dbbf)
|
|
By masking the FIFO number in the MCP25XXFD_CAN_FLTCON macro, the
mcp25xxfd_can_fifo_clear() function doesn't clear the filters at all, as
the masking makes MCP25XXFD_CAN_FLTCON(32) equal MCP25XXFD_CAN_FLTCON(0).
| mcp25xxfd_can_fifo_clear_regs(cpriv, MCP25XXFD_CAN_FLTCON(0),
| MCP25XXFD_CAN_FLTCON(32));
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 265153724aa0339bae525d22511377380fa45af5)
|
|
The interrupt handler thread mcp25xxfd_can_int() will reschedule, if
"loops % reschedule_int_thread_after" equals 0. This is the case for the
initial loop.
Change the code to match what the module parameter suggests to do.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit d4f9db41f6db9c233dd8847171c82c7f2ba0ec2e)
|
|
The timestamp is an u32, so don't cap to upper 16 bit.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 6546a196615cae17d1e4c52f5135b02469adc15f)
|
|
Put sbk into echo queue before triggering send.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 2c1df7da765455d86f5630e050905aa3b599ed97)
|
|
push skb into networking stack in interrupt handler
Use netif_rx() instead of netif_receive_skb() to push skb into
networking stack from interrupt handler.
Reported-by: Tom Prohaszka <tprohaszka@capp-tech.com>
Tested-by: Tom Prohaszka <tprohaszka@capp-tech.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 62f9531af8e7f470830d3d285b39570b361e6473)
|
|
The xmit callback is serialized by the network stack, no need for
locking.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 8d59059d2098ef612fad460e0e9f832ec36d5fbd)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 6f267fd90b21536d3dcb3b4549dbf800357cd944)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 4dc124bd4f631ff0f83a43a2ae9bfafd664b0e34)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 9781ee8b4dc9feb1809e864bbbbe0bd2001aed59)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 6cf806f542afb974470f29324fcfa76539539c8b)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit d8a864d5eab58cfb0e4deb137359f80a828dc050)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 5a142c75c22d38f7166e2e3ac8b08b3f834b61bc)
|
|
submit_queue_count
otherwise with switched off DEBUGFS support the driver will not work
anymore.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 3d566db75ce8a954c0a4ad67b23d9069e7851175)
|
|
add comments
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit bd0713e14f8665ffaff2f17f6e0ac0b7fcaef902)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 252e80b4deb8cc90c723d64eac22b2ccdb699234)
|
|
... to match struct spi_transfer::len
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 39254b601f7f8b96772b2e5438f246b3222aa394)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 6aea7d2725f280dba39fdaef0c44ad44e3e6ac28)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 50eb980ed7a5ce26e282bbbb1a9967e8eeb90103)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 9aad623041c9f51dbbfdabdb06105c2418250a58)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 8cbcb26c1b0b5b3651b1b8ad3b45108ade0a3520)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 94cb09bb6940af90e070b35795700eebd80de944)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 07b342ed30c877fa5c80a12e2ebc00912991cafb)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 0471451da27026b16091e2eeb5e23a642c730202)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit e777dddeaa081a0384c20b079844e3216bfb5dc9)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit 045e9e8c3dfa53b0cc47ea7e514a0d5b10a79ec1)
|
|
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit ed57b613fa490cc9c85ddfc8ff00c2ff951581d3)
|
|
Fixing a couple MCP25xxFD reg/bit definitions, switching to the names
used in the DS.
Signed-off-by: Thomas Kopp <thomas.kopp@microchip.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
(cherry picked from commit bc37d9df4543a47703fa876d8a283d7db23ab2c9)
|
|
In case of predicted DLC=15 and in case at least 33% of those are
sent via BRS be aggressive and use bulk fifo reads to avoid missing
any frames due to releasing FIFOs not as fast as possible.
This would be of most impact when having a 1MHz Can Bus with
a 8MHz data bitrate.
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit c23b97d9301f0683d0064f446cc2116109b03b6b)
|
|
Allow prediction of can frame sizes based on the last 32 Can Frames
received.
Naive histogram approach hast been taken for now.
Some simple stats based on 1000 frames received with DLC=6:
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_reads_prefetched_too_few
16
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_reads_prefetched_too_few_bytes
96
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_reads_prefetched_too_many
0
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_reads_prefetched_too_many_bytes
0
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_reads_prefetch_predicted
6
The first 16 frames are predicted as 0, but after that the prediction is 6.
It should be possible to take this prediction to use bulk reads for CanFD
as well when we have a prediction of length of 48 or 64.
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit f355fdaa97c026ad70882a0cb11943cccefad81b)
|
|
To reduce the amount of spi_messages send this patch optimizes the
read of RX fifos so that multiple Fifos are read together.
This only works well in CAN2.0 mode where the overhead of prefetching
8 bytes (even if the actual length is 0) is negligable compared
to the SPI-framework overhead.
Statistics in debugfs show for 1000000 DLC=0 can messages received:
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_bulk_reads <==
355411
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_bulk_reads_1 <==
92778
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_bulk_reads_2 <==
7133
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_bulk_reads_3 <==
130390
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_bulk_reads_4 <==
123807
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_bulk_reads_5 <==
1266
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_bulk_reads_6 <==
34
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_bulk_reads_7 <==
1
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_bulk_reads_8+ <==
0
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/rx_reads <==
999999
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/int_system_error <==
1
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/int_system_error_rx <==
1
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/int_system_error_tx <==
0
There was one SERR error where we lost one can frame during the handling
of the error condition.
So to read all of those 999999 RX fifos we formerly have scheduled
999999 spi_messages.
With this patch we have only scheduled 355411 spi_messages, so
only 35.5% of the former value.
This also means we have not been transferring 1289176 (=2*(999999-355411))
unnecessary command bytes over the SPI bus.
As we have been issuing less SPI transfers reading SRAM this
also has reduced the likleyhood of SERR happening - it does not
solve the complete issue as seen above.
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit 0f869f3a7c36805b1b64c54ebf654a94e81735c1)
|
|
To reduce the amount of spi_messages send this patch optimizes the
read TEF so that multiple TEFs are read together.
Statistics in debugfs show for 100000 DLC=0 can messages sent:
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_conservative_reads
0
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_optimized_reads
44691
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_optimized_reads_1
1862
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_optimized_reads_2
30349
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_optimized_reads_3
12480
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_optimized_reads_4
0
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_optimized_reads_5
0
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_optimized_reads_6
0
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_optimized_reads_7
0
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_optimized_reads_8+
0
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_reads
100000
==> /sys/kernel/debug/mcp25xxfd-spi0.0/can/stats/tef_read_splits
0
So to read all of those 100000 TEF frames to read we formerly have
scheduled 100000 spi_messages.
While with this patch we have only scheduled 44691 spi_messages, so
only 44.6% of the former value.
This also means we have not been transferring 110618 (=2*30349+2*2*12480)
unnecessary command bytes over the SPI bus.
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit 345593580ee21f51fee1eb410905641379dcb329)
|
|
We have already enough information to know how many tx-messages have
been terminated so that we do not have to query TEF every time if
there is anything pending but we can read the tefs blindly.
This avoids 1 SPI transfer per TEF read.
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit 4c0efe3aeb48a536fd6a9d6f23954e64e60f8c0c)
|
|
To more reliably detect if the controller is connected use
crc spi commands and fail when the CRC does not match.
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit 974eff55c1aff4c83de955fc12cb9cc5776a219c)
|
|
Allow the (optional) use of SPI CRC read commands that can get enabled
via a module parameter.
In the future it may become necessary to enable this for register reads
(or at least some specific register reads) as there is a HW bug that
may result in glitches on the spi bus.
Possible variants here are:
* just retry the read
* do not use some fifos (7, 15, 23, 31) at all
* test for bit flips of specific bits and retest CRC
--
Changelog:
V7 -> V8: added in V8
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit 1e37e00f473bc9b9f192234a40e4b0ffac1d27ad)
|
|
Add un-optimized Can2.0 and CanFD transmission support.
On a Rpi3 we can saturate the CAN bus at 1MHz transmitting Can2.0
frames with DLC=0 for the number of configured tx-fifos.
Afterwards we need some time to recover the state before we can
fill in the fifos again.
With 7 tx fifos we can: send those 7 frames in 0.33ms and then we
wait for 0.26ms so that is a 56% duty cycle.
With 24 tx fifos this changes to: 1.19ms for 24 frames and then we
wait for 0.52ms so that is a 70% duty cycle.
--
Changelog:
V6 -> V7: added can transmission into a separate patch to reduce
the size of the individual patches to make the linux-can
mailing-list happy...
V7 -> V8: reduce default number of tx fifos to 6 to avoid HW-bug
during spi-read of TXREQ
include feedback by Joe Burmeister
sparse fixes based on feedback by Marc Kleine-Budde
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit 69a74571ed18c82f0c5d8cc8e8ce5d6214070481)
|
|
Add un-optimized Can2.0 and CanFD support.
CAN-Transmission and Optimizations and are separate patches
On a Rasperry pi 3 it is already able to process Can2.0 Frames
with DLC=0 on a CAN bus with 1MHz. without losing any packets
on the SPI side. Packets still get lost inside the network stack.
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
---
Changelog:
V1 -> V2: new more generic name based on feedback from microchip
cleanup of code (checkpatch)
address all feedback on code
prepare code for GPIO handling (separate patches)
handle systemerrors in a much better/reliable way
V2 -> V3: added vendor-prefix for gpio-opendrain
V3 -> V4: resend
V4 -> V5: split can driver into a separate patch
code cleanup/rewrite
V5 -> V6: update copyright year
add rational documentation for basic rx-prefetch length
fix CAN_OBJ_FLAGS_BRS and CAN_OBJ_FLAGS_ESI bug
fixed TDC configuration - at this moment configurable
via module parameters but with (hopefully) sensible
defaults
use length instead of dlc as parameter in call of
mcp25xxfd_can_submit_rx_fd_frame
moved use of mcp25xxfd_can_int_handle_tefif_oportunistic
to separate patch
reorganized code based on feedback by Wolfgang Grandegger
fixed transmission problem reported by Hubert Denkmair
added extra custom error flags
added voluntary scheduling in interrupt thread
V6 -> V7: added include linux/irqreturn.h (feedback by Eric Scholz)
move can transmission into a separate patch to reduce
the size of the individual patches to make the linux-can
mailing-list happy...
V7 -> V8: sparse changes as hinted by Marc Kleine-Budde
integrate feedback by Marc Kleine-Budde
integrate feedback by Joe Burmeister
mcp25xxfd_can_get_mode return error handling
error messages on error in interrupt-handler
disable interrupts when we experience errors.
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit 531555f2fb48fa41e4dcc2259bbd3a37257effca)
|
|
Add GPIOLIB support to mcp25xxfd.
--
Changelog:
V4 -> V5: reorganisation of the patchset into smaller patches
V7 -> V8: include mcp25xxfd_gpio.h to fix sparse checks
as per feedback from Marc Kleine-Budde
added xstandby and open drain support
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit a350a0e406c4c3d988d6486ab893a4755b441d7d)
|
|
This patch adds basic driver support for the Microchip mcp2517fd
CAN-FD controller.
The mcp2517fd is capable of transmitting and receiving standard data
frames, extended data frames, remote frames and Can-FD frames.
The mcp2517fd interfaces with the host over SPI.
This patch iprovides basic driver functionality:
setting up clocks and the infrastructure for the can and gpio portions
of the driver.
Datasheet:
* http://ww1.microchip.com/downloads/en/DeviceDoc/20005688A.pdf
Reference manual:
* http://ww1.microchip.com/downloads/en/DeviceDoc/20005678A.pdf
Errata:
* http://ww1.microchip.com/downloads/en/DeviceDoc/MCP2517FD-Silicon-Errata-and-Data-Sheet-Clarification-DS80000792A.pdf
--
Changelog:
V4 -> V5: reorganisation of the patchset into smaller patches
review of the whole driver code for better modularization
V5 -> V6: Major refactoring as per feedback from Wilhelm Grandegger
Fixing bugs reported by several other parties
Split out of optimizations into separate patches
V6 -> V7: added include linux/irqreturn.h (feedback by Eric Scholz)
move can transmission into a separate patch to reduce
the size of the individual patches to make the linux-can
mailing-list happy...
V7 -> V8: add support for mcp2518fd
fixed mcp25xxfd_cmd_read_mask bug clearing bits
allow setting SPI clock speeds via debugfs
Incorprated Feedback by Marc Kleine-Budde
sparse fixes
makefile indenting
Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
(cherry picked from commit db3a48198fe1e4131a85df5b29a60851cd975703)
(git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git -- mcp25xxfd-rpi)
|
|
This fixes the following device tree compilation issue as introduced by
the previous commit 621db2fdb2e1 ("arm64: dts: apalis-imx8x: add adv7280
to devicetree"):
DTC arch/arm64/boot/dts/freescale/fsl-imx8qxp-apalis-eval.dtb
arch/arm64/boot/dts/freescale/fsl-imx8qxp-apalis-eval.dtb: ERROR
(phandle_references): Reference to non-existent node or label
"adv7280_ep"
Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
|
|
This patch adds the adv7280 to the devicetree and makes changes that
are necessary for parallel-CSI.
Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
|
|
Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
|
|
Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
|
|
Some pinmuxings are obviously wrong, originating from a copy/paste
error. This patch corrects that with the following strategy:
- Set all reserved bits to zero
- Leave drive strength and slew rate as is
- Add sensible pull and hysteresis depending on the function of the pin
- Not used pins are muxed to their reset-value defined by the SoC
Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
|
|
Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
|