Opened 10 years ago
Closed 9 years ago
#242 closed defect (fixed)
IPEDMA gen3 ignores value of last_read
Reported by: | Suren A. Chilingaryan | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | Application | Version: | |
Keywords: | Cc: | Suren A. Chilingaryan, Michele Caselle, Uros Stevanovic |
Description
I believe something is wrong with gen3 DMA. It is working fine for a while, but then writing to the buffer it is not allowed to. I am configuring 16 buffers and iterating. As readout is currently not fast enough, the DMA buffers are getting full fast and the hardware is waiting for driver to read and immediately quickly fills the newly provided buffers. So, at some point situation as follows:
I am preparing to read buffer 13 (all numbering from 1).
'last_written' points to buffer 11.
register 0x58 = 0xc (12)
now I have processed buffer 13 and set register 0x58 to 0xd (13) indicating that buffer 12 (!) can be overwritten. However:
'last_written' jumps to buffer 13.
register 0x58 = 0xd (13)
According to my knowledge the value 0xd should protect buffer 13 from being overwritten. Thats not directly match the documentation which states, "The driver must write the number (not the address!) of the last descriptor read". However, Lorenzo told me that it should be actually "+1" and it's matches that I observer in normal circumstances. I.e. if I start DMA anew, set 0x58 to 16, the last written descriptor will be 15, not 16.
Attachments (0)
Change History (2)
comment:1 Changed 10 years ago by
comment:2 Changed 9 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
It seems to be fixed by moving "last_address_writen" assignment 1 clk cycle before (under MWR_QWN state).