spi Overrun: RX data lost when "spi_sync_transfer" too long in kernel
Hi,
I would like to make my STM32MP157 communicate with a FPGA in spi. I need to make long transfer (2-3 Mb) spi to get data acquired by the FPGA. But when I use the "spi_sync_transfer" function in my driver, I get the following kernel message:
#spi_stm32 4000b000.spi: Overrun: RX data lost
#spi0.0: SPI transfer failed: -5
# spi_master spi0: failed to transfer one message from queue
This driver works on an ompa3 platform.
I use a kernel linux 5.10, there is my device tree overlay :
/dts-v1/;
/plugin/;
&spi2 {
ifsttarhf8ch: ifsttarhf8ch@0 {
compatible = "ifsttar,ifsttarhf8ch";
reg = <0>;
spi-max-frequency = <100000000>;
interrupt-parent = <&gpioi>;
interrupts = <9 IRQ_TYPE_EDGE_RISING>;
};
};and my device tree :
#include "stm32mp157.dtsi"
&spi2 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&spi2_pins_mx>;
pinctrl-1 = <&spi2_sleep_pins_mx>;
cs-gpios = <&gpiob 9 0>,
<&gpioi 1 0>,
<&gpiob 8 0> ;
status = "okay";
spidev2_1: spidev2_1@1{
compatible = "rohm,dh2228fv";
spi-max-frequency = <30000000>;
reg = <1>;
};
spidev2_2: spidev2_2@2{
compatible = "rohm,dh2228fv";
spi-max-frequency = <30000000>;
reg = <2>;
};
};In my driver i use this code to read on the FPGA :
temp = CMD_READ(ADDR_BURST_DATA_RX); //fpga registry
transfer[0].tx_buf = &temp;
transfer[0].len = sizeof(temp);
transfer[1].rx_buf = data
transfer[1].len = sizeof(u16)*4095*8 // 4095 data * nb channel (8)
ret = spi_sync_transfer(spiHandler,&transfer[0],2);Another problem, when I modify the "spi-max-frequency" field in the device tree, the clock frequency does not increase more than 12.5Mhz.
Sincerely
