On 08/19/2013 11:48 AM, Michael Schmitz wrote:
I guess those two bytes have something to do with target (re)selection... There are two different ways of attempting to read these bytes in the code, one is reading them from the FIFO byte by byte, and the other way is to setup a DMA read (write from device). The two different schemes are used in two different functions, and I do not understand why one method would be preferred over the other when comparing these functions.Geert,On Sun, Aug 18, 2013 at 10:58 AM, Michael Schmitz <schmitzmic@xxxxxxxxx> wrote:I'll also need to check the command_block and command_block_dma addresses -does the DMA require virtual or physical addresses?Physical, of course.:-) VDMA was invented a bit later ...I'll go check the usage of the DMA API calls again, but as the driver seems to do DMA fine until the short transfer, that seems the most likely cause. PIO for dma_count < 7 might be an option.I see transfers with esp_count=1 and dma_count=7 in the log - wonder why that works but the short 2/2 byte case does not.Cheers, Michael
I think I managed to find these two bytes; They are not ready for DMA, but are sitting in the FIFO waiting to be read. So the loop before the "IRQ2 timeout" is waiting for an interrupt that would tell that the DMA transfer has finished.
... [13433.390000] ESP: Disconnecting tgt[1] tag[20:0] [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x97, 2 bytes in FIFO. [13433.400000] ESP: intr sreg[97] seqreg[04] sreg2[00] ireg[0c][13433.400000] ESP: reconnect tag, zorro_esp_irq_pending(): ESP_STATUS = 0x97, 0 bytes in FIFO. [13433.400000] IRQ(0:10:97), zorro_esp: esp_count = 2, dma_count = 2, addr = 0x7fa59000. Writing.
[13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. [13433.400000] zorro_esp_irq_pending(): ESP_STATUS = 0x17, 2 bytes in FIFO. ... Remember that write is read :)Now, I guess, I have to check whether those two bytes contain the right information...
-Tuomas
Attachment:
zesp014.cap.gz
Description: GNU Zip compressed data