Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
14 years ago

tse (Triple speed ethernet) and SGDMA (Scatter Gather DMA) do not seem fully connecte

So I've searched, and nothing seems to quite fit my case.

I am using SGDMA and TSE with InterNiche Portable TCp/IP v3.1 and Simple Socket Server demo and Altera 10.0 (or very close, maybe 10.1).

The interface device is apparently detected just fine (I am not including that info here, below info should make clear why I think its less than helpful), and I have hard coded the IP address to something easy (1.1.1.1, netmask 255.0.0.0).

If I hard-code the system's TCP/IP MAC address into a Linux box and send a ping to the board, the ping packets indeed show up inside the TSE buffer (as evidenced by the statistics counters), but nobody seems to be able to take them out. Indeed when the SSS tries to read from the TSE, it looks to me like SGDMA is not noticing that there is data in the buffers. Or maybe it cannot write or read from the source or destination.... In any case, the SSS never notices any packets, and to all intents and purposes the system is dead.

Some info dumped from my gdb activity is attached as the txt file. Salient portions, along with comments, below:

Note that I believe that 0x30000000 is the base address of the TSE MAC

register space, 0x30100000 is the base address of the SGDMA control,

and that 0x30300000 is the base address of the SGDMA descriptor as

shown below:

(gdb) p tse_ptr->currdescriptor_ptr

$33 = (alt_sgdma_descriptor *) 0x30300040

Now, just before pinging the board:

(gdb) x/100 0x30000000

0x30000000: ...same...

0x30000060: 0xffed0700 0x0000ffff 0x00000000 0x00000009 (*)

0x30000070: 0x00000000 0x00000000 0x00000000 0x000002e5

0x30000080: ...same...

0x30000090: 0x00000000 0x00000009 0x00000000 0x00000000

0x300000a0: ...same...

0x300000b0: 0x00000387 0x00000009 0x00000000 0x00000000

0x300000c0: 0x00000000 0x00000009 0x00000000 0x00000000

0x300000d0: ...same from there down...

just after pinging the board:

(gdb) x/100 0x30000000

0x30000000: ...same...

0x30000060: 0xffed0700 0x0000ffff 0x00000000 0x0000000d (*)

0x30000070: 0x00000000 0x00000000 0x00000000 0x00000435

0x30000080: ...same...

0x30000090: 0x00000004 0x00000009 0x00000000 0x00000000

0x300000a0: ...same...

0x300000b0: 0x0000051f 0x0000000d 0x00000000 0x00000000

0x300000c0: 0x00000000 0x0000000d 0x00000000 0x00000000

0x300000d0: ...same from there down....

Note the differences are highlighted above. In the past I have dug around in the documentation and convinced myself that at least one of those changes was due to the receipt of packets inside the TSE. (In fact, I believe that the 9 which changes to d (see '(*)' above) is 'aFramesReceivedOK', and indeed I sent 4 ping packets to the board)

In the attached file, I also dump what I think are the SGDMA descriptor and SGDMA control areas.

My current theory is that the SGDMA descriptor is somehow not set up right. But it all looks ok to me.

Is the above enough to confirm or deny? Any suggestions for more data gathering or pointers to what I've got wrong? (even pointers to the Fine Manuals would be appreciated at this point!)

Thanks!

Rusty

13 Replies