I've ported the LinkPort driver (drivers/char/bfin_lp.c)  from CCES-Linux-addin v.1.2.0 to LTS Linux (4.9).
- We send burst data from device to sc584. The byte clock is 50MHz.
- The sc584 is a receiver.
- It seems that the driver  works in non-DMA mode; it reads data from internal FIFO (in ISR) and copies it to kernel allocated buffer (via kfifo).
Do you have Linux (non bare-metal) Linkport driver, which supports burst DMA transmissions?
The  is not available either in vanila Linux  nor some unofficial ADI port .
- We receive a lot of interrupts:
44: 143 GIC-0 109 Edge bfin-linkport
45: 0 GIC-0 110 Edge bfin-linkport
But no proper data is read;
"dd if=/dev/linkport0 bs=4 count=1" hangs
- I've attached Kernel logs  from receiving data:
Please find following snippet:
bfin lp irq 44 stat 30 dev c0814b84 status 0 <- OK IRQ received
wait event <- OK
lp_rx_fifo: cnt: 3 <- OK 3 x words (32bits) in internal RX FIFO
data: 0x86b1235 ret: 1 stat: 0x20 <- OK,we have sent one word to kfifo
data: 0x86b1236 ret: 1 stat: 0x20 <- ERR, why stat is still 0x20 [*]
data: 0x86b1237 ret: 1 stat: 0x20 <- ERR, why stat is still 0x20 [**]
[*] - should be 0x10 ; [**] - should be 0x00 ?
Why is the FIFO status (FFST) not updated as we read LP_RX register?
Also, we shall exit from the driver after receiving the first word (as we asked for 4 bytes transfer with dd).
- Now the driver  is using workqueue triggered from LinkPort ISR.
Could you confirm that it shall be used for some low-rate data?
It looks to me that for some high throughput use cases (with interrupt frequency of tens of MHz) the DMA should be used (as sc584 sclk is 450 MHz).
Or maybe there is other way to make LinkPort transmission more robust?
 - git.kernel.org
 - https://github.com/analogdevicesinc/linux/tree/xcomm_zynq/drivers/char