summaryrefslogtreecommitdiff
path: root/drivers
AgeCommit message (Collapse)Author
2019-12-13random: try to actively add entropy rather than passively wait for itLinus Torvalds
For 5.3 we had to revert a nice ext4 IO pattern improvement, because it caused a bootup regression due to lack of entropy at bootup together with arguably broken user space that was asking for secure random numbers when it really didn't need to. See commit 72dbcf721566 (Revert "ext4: make __ext4_get_inode_loc plug"). This aims to solve the issue by actively generating entropy noise using the CPU cycle counter when waiting for the random number generator to initialize. This only works when you have a high-frequency time stamp counter available, but that's the case on all modern x86 CPU's, and on most other modern CPU's too. What we do is to generate jitter entropy from the CPU cycle counter under a somewhat complex load: calling the scheduler while also guaranteeing a certain amount of timing noise by also triggering a timer. I'm sure we can tweak this, and that people will want to look at other alternatives, but there's been a number of papers written on jitter entropy, and this should really be fairly conservative by crediting one bit of entropy for every timer-induced jump in the cycle counter. Not because the timer itself would be all that unpredictable, but because the interaction between the timer and the loop is going to be. Even if (and perhaps particularly if) the timer actually happens on another CPU, the cacheline interaction between the loop that reads the cycle counter and the timer itself firing is going to add perturbations to the cycle counter values that get mixed into the entropy pool. As Thomas pointed out, with a modern out-of-order CPU, even quite simple loops show a fair amount of hard-to-predict timing variability even in the absense of external interrupts. But this tries to take that further by actually having a fairly complex interaction. This is not going to solve the entropy issue for architectures that have no CPU cycle counter, but it's not clear how (and if) that is solvable, and the hardware in question is largely starting to be irrelevant. And by doing this we can at least avoid some of the even more contentious approaches (like making the entropy waiting time out in order to avoid the possibly unbounded waiting). Cc: Ahmed Darwish <darwish.07@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Theodore Ts'o <tytso@mit.edu> Cc: Nicholas Mc Guire <hofrat@opentech.at> Cc: Andy Lutomirski <luto@kernel.org> Cc: Kees Cook <keescook@chromium.org> Cc: Willy Tarreau <w@1wt.eu> Cc: Alexander E. Patrakov <patrakov@gmail.com> Cc: Lennart Poettering <mzxreary@0pointer.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> (cherry picked from commit 50ee7529ec4500c88f8664560770a7a1b65db72b)
2019-12-10dma: pxp: enable pxp clocks before soft resetPhilippe Schenker
pxp_soft_reset is writing to registers that are not clocked and then resulting in a lockup. Interestingly I could only see this behaviour when starting a kernel using kexec. This could have something to do with how u-boot enables clocks on a regular boot. In this commit this gets fixed with enabling the clocks before doing a pxp_soft_reset. Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
2019-12-09watchdog: imx8_wdt: improve help and loggingOleksandr Suvorov
Improve module help messages and logging operations in debug mode. Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
2019-12-09watchdog: imx8_wdt: fix load/unload driverOleksandr Suvorov
- Fix a probing to handle errors in scu notifier registration. - Unregister scu notifier properly on unload, so it is possible to load driver again. Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
2019-12-09watchdog: imx8_wdt: Pretimeout should follow SCU firmware formatOleksandr Suvorov
backport of 2c50a6b825b ("watchdog: imx_sc_wdt: Pretimeout should follow SCU firmware format") SCU firmware calculates pretimeout based on current time stamp instead of watchdog timeout stamp, need to convert the pretimeout to SCU firmware's timeout value. Fixes: 15f7d7fc5542 ("watchdog: imx_sc: Add pretimeout support") Signed-off-by: Anson Huang <Anson.Huang@nxp.com> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org> Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
2019-12-04rpmsg: virtio rpmsg: compilation error and warningsIgor Opaniuk
1. Fix this compilation error: /workdir/oe/tmp-glibc/work-shared/verdin-imx8mm/kernel-source/drivers/ rpmsg/virtio_rpmsg_bus.c:1106:23: error: redeclaration of 'newch' with no linkage struct rpmsg_device *newch; ^~~~~ /workdir/oe/tmp-glibc/work-shared/verdin-imx8mm/kernel-source/drivers/ rpmsg/virtio_rpmsg_bus.c:1101:23: note: previous declaration of 'newch' was here struct rpmsg_device *newch; 2. Fix warnings that are reproduced when RPMsg char device support is disabled. Fixes: 1172ee2e ("rpmsg: virtio rpmsg: Add RPMsg char driver support") Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
2019-12-04spi: fsl-lpspi: register spi controller earlier in probePhilippe Schenker
Ordering of stuff in lpspi probe was a little off. - num_chipselect gets set with devm_spi_register_controller. - devm_spi_register_controller needs data that gets set into controller variable Order stuff appropriate so num_chipselect gets set before it is used. Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
2019-12-04regulator: fixed: add possibility to enable by clockPhilippe Schenker
This commit adds the possibility to choose the compatible "regulator-fixed-clock" in devicetree. This is a special regulator-fixed that has to have a clock, from which the regulator gets switched on and off. Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com> Link: https://lore.kernel.org/r/20190910062103.39641-2-philippe.schenker@toradex.com Signed-off-by: Mark Brown <broonie@kernel.org> (cherry picked from commit 8959e5324485ace9bedc33ce1e760b759d4dd2ac) Conflicts: drivers/regulator/fixed.c Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
2019-12-04Revert "Regulator: Core: Add clock-enable to fixed-regulator"Philippe Schenker
Reverting in favour of cherry-picked upstream solution. This was done because errors where seen with old solution if, fec was not compiled into the kernel. This reverts commit 23d009e9486c4c31bcb204ec2316e0cf7ff3e277.
2019-12-03rpmsg: virtio rpmsg: Add RPMsg char driver supportIgor Opaniuk
virtio rpmsg was not implemented to use RPMsg char driver. Each virtio ns announcement will create a new RPMsg device which is supposed to bound to a RPMsg driver. It doesn't support dynamic endpoints with name service per RPMsg device. With RPMsg char driver, you can have multiple endpoints per RPMsg device. Here is the change from this patch: * Introduce a macro to indicate if want to use RPMsg char driver for virtio RPMsg. The RPMsg device can either be bounded to a simple RPMsg driver or the RPMsg char driver. * Create Virtio RPMsg char device when the virtio RPMsg driver is probed. * when there is a remote service announced, keep it in the virtio proc remote services list. * when there is an endpoint created, bind it to a remote service from the remote services list. If the service doesn't exist yet, create one and mark the service address as ANY. That patch ported to our 4.14 kernel + additional fixes added [1]. Example of usage from userspace app: ``` char data_buf [] = {'a', 'b', 'c', 'd', '\0'}; struct rpmsg_endpoint_info ept_info = {"rpmsg-openamp-demo-channel", 0x2, 0x1}; int fd = open("/dev/rpmsg_ctrl0", O_RDWR); /* create endpoint interface */ ioctl(fd, RPMSG_CREATE_EPT_IOCTL, &ept_info); /* create endpoint */ int fd_ept = open("/dev/rpmsg0", O_RDWR); /* receive data from remote device */ read(fd_ept, &data_buf, sizeof(data_buf)); /* send data to remote device */ write(fd_ept, &data_buf, sizeof(data_buf)); /* destroy endpoint */ ioctl(fd_ept, RPMSG_DESTROY_EPT_IOCTL); close(fd_ept); close(fd); ``` [1] https://patchwork.kernel.org/patch/10145779/ Signed-off-by: Wendy Liang <jliang@xilinx.com> Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
2019-12-02regulator: bd71837: add enable_time for all ldoMax Krummenacher
The LDO have a Soft-Start feature. Add enable_time to all LDOs to account for that. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
2019-12-02drm: bridge: lt8912: set bus_formatMax Krummenacher
Some CRTC drivers use and evaluate this information and if missing print a warning. | [ 248.956112] imx_sec_dsim_drv 32e10000.mipi_dsi: no bus formats assigned by connector Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
2019-12-02phy: tja110x: silence a message on alert levelMax Krummenacher
This is at most an informational message. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
2019-12-02rtc: ds1307: add OF and ACPI entries for Epson RX8130Bastian Stender
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)
2019-12-02can: mcp25xxfd: allow to keep the clock allways onMax Krummenacher
This allows to have a clock on clko even if the controller is disabled. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
2019-12-02can: mcp25xxfd: allow using clko as start of frameMax Krummenacher
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>
2019-12-02can: mcp25xxfd: backport missing helper functionsMax Krummenacher
Backport helper functions not available from the 4.14 kernel from 5.3. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
2019-12-02can: mcp25xxfd: allow building without debugfs functionalityMax Krummenacher
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>
2019-12-02can: mcp25xxfd: mcp25xxfd_can_fifo_clear(): fix fifo initializationMarc Kleine-Budde
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)
2019-12-02can: mcp25xxfd: mcp25xxfd_can_int(): do not reschedule after inital loopMarc Kleine-Budde
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)
2019-12-02can: mcp25xxfd: mcp25xxfd_can_queue_frame(): change argument "ts" to u32Marc Kleine-Budde
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)
2019-12-02can: mcp25xxfd: mcp25xxfd_can_tx_start_xmit() fix possible race conditionMarc Kleine-Budde
Put sbk into echo queue before triggering send. Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 2c1df7da765455d86f5630e050905aa3b599ed97)
2019-12-02can: mcp25xxfd: mcp25xxfd_can_int_send_error_skb(): use correct function to ↵Marc Kleine-Budde
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)
2019-12-02can: mcp25xxfd: remove struct mcp25xxfd_tx_spi_message_queue::spi_lockMarc Kleine-Budde
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)
2019-12-02can: mcp25xxfd: only build GPIOLIB support if enabledMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 6f267fd90b21536d3dcb3b4549dbf800357cd944)
2019-12-02can: mcp25xxfd: fix building without CONFIG_GPIOLIBMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 4dc124bd4f631ff0f83a43a2ae9bfafd664b0e34)
2019-12-02can: mcp25xxfd: gpio: remove unused enum mcp25xxfd_gpio_pinsMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 9781ee8b4dc9feb1809e864bbbbe0bd2001aed59)
2019-12-02can: mcp25xxfd: make debugfs support a separate optionMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 6cf806f542afb974470f29324fcfa76539539c8b)
2019-12-02can: mcp25xxfd: only build DEBUG_FS code if enabledMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit d8a864d5eab58cfb0e4deb137359f80a828dc050)
2019-12-02can: mcp25xxfd: fix building without CONFIG_DEBUG_FSMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 5a142c75c22d38f7166e2e3ac8b08b3f834b61bc)
2019-12-02can: mcp25xxfd: mcp25xxfd_can_queue_frame: always increment the ↵Marc Kleine-Budde
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)
2019-12-02can: mcp25xxfd: mcp25xxfd_can_tx_handle_int_tefif(): simplyfy function and ↵Marc Kleine-Budde
add comments Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit bd0713e14f8665ffaff2f17f6e0ac0b7fcaef902)
2019-12-02can: mcp25xxfd: mcp25xxfd_cmd_sync_write(): use C99 initializersMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 252e80b4deb8cc90c723d64eac22b2ccdb699234)
2019-12-02can: mcp25xxfd: mcp25xxfd_cmd_sync_write(): make argument tx_len an "unsigned"Marc Kleine-Budde
... to match struct spi_transfer::len Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 39254b601f7f8b96772b2e5438f246b3222aa394)
2019-12-02can: mcp25xxfd: mcp25xxfd_cmd_writen(): simplify functionMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 6aea7d2725f280dba39fdaef0c44ad44e3e6ac28)
2019-12-02can: mcp25xxfd: mcp25xxfd_cmd_readn(): simplify functionMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 50eb980ed7a5ce26e282bbbb1a9967e8eeb90103)
2019-12-02can: mcp25xxfd: mcp25xxfd_cmd_calc(): simplify functionMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 9aad623041c9f51dbbfdabdb06105c2418250a58)
2019-12-02can: mcp25xxfd: remove return of int in void functionMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 8cbcb26c1b0b5b3651b1b8ad3b45108ade0a3520)
2019-12-02can: mcp25xxfd: mcp25xxfd_can_int: sort include alphabeticallyMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 94cb09bb6940af90e070b35795700eebd80de944)
2019-12-02can: mcp25xxfd: mcp25xxfd_priv: struct mcp25xxfd_priv: fix typoMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 07b342ed30c877fa5c80a12e2ebc00912991cafb)
2019-12-02can: mcp25xxfd: mcp25xxfd_can_rx: mcp25xxfd_can_rx_predict_prefetch(): fix typoMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 0471451da27026b16091e2eeb5e23a642c730202)
2019-12-02can: mcp25xxfd: Makefile: fix indentionMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit e777dddeaa081a0384c20b079844e3216bfb5dc9)
2019-12-02can: mcp25xxfd: Kconfig/Makefile: add SPDX identifiersMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit 045e9e8c3dfa53b0cc47ea7e514a0d5b10a79ec1)
2019-12-02can: mcp25xxfd: fix checkpatch warningsMarc Kleine-Budde
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> (cherry picked from commit ed57b613fa490cc9c85ddfc8ff00c2ff951581d3)
2019-12-02can: mcp25xxfd: fix register definitions, cleanup names to match DSThomas Kopp
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)
2019-12-02can: mcp25xxfd: optimize reception of big CanFD frame reception with BRSMartin Sperl
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)
2019-12-02can: mcp25xxfd: add prediction of CanFD frames sizes based on historyMartin Sperl
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)
2019-12-02can: mcp25xxfd: optimize SPI reads of FIFOs in can2.0 modeMartin Sperl
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)
2019-12-02can: mcp25xxfd: optimize TEF reads reading multiple TEFs in one goMartin Sperl
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)
2019-12-02can: mcp25xxfd: optimize TEF read avoiding unnecessary SPI transfersMartin Sperl
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)