Hi
I am trying to understand the ACKID protocol. According to the Rapid IO Interconnect Specification Rev 2.1, 8/2009,
http://www.rapidio.org/specs/current
the inbound and outstanding should only be one apart.
. An external processing element write of a
command to the link-request register with a Part I: Input/Output Logical Specification
maintenance write transaction causes an aligned link-request control symbol to be issued
onto the output port of the device, but only one link-request can be outstanding on a link at
a time. The device that is linked to the sending device shall respond with an aligned
link-response control symbol if the link-request command required it to do so.Below is my output from the C6472 when doing SRIO read and writes. Note how the SP_ACKID_STAT register OUTSTANDING ACKID starts out close to the INBOUND and then climbs higher than INBOUND. I put in a 1 sec delay between transactions thinking that this was a delay issue with the target SRIO node (Altera FPGA) and the result was the same.
Is this normal behavior to have the ACKIDs more than 1 apart? It doesn't seem to match the TI SRIO users guide sprue13h.pdf Appendic A.
And the definition of the OUTSTANDING_ACKID in the RapidIO Part IV spec says "A set bit indicastes that the corresponding ACKID value has been used to send a packet...but the corresponding ack ctrl sym has not been received. They have 8 bits defined. So obviously the Outstanding AckID definition in the spec is different than the TI SRIO guide. Could you explain what it means in TI's context?
Also, why does the LINK_STATUS field continually have 0x10 below (SP_LM_RESP)? According to the Rapid IO Interconnect Specification Part IV Table 4-7 link_status Field Definition, its only supposed to be 4 bits. So if b4 is bogus, then the status is 0x0, which is a "reserved" response according to the table. Any thoughts on what the link_status should be since the SP_ERR_STAT register does not indicate there are any transfer errors.
Furthermore, the link_response control symbol that contains the link_status only has 4 bits allocated to link_status.
Could it be that the field is ~(link_status) - the control symbol has a bit-wise inversion in the later 16 bits.. That still wouldn't make sense though since b01111 is "Working properly, expecting ackID 7".
Cheers
************C6272 output***********************************
Link is UP!
SP_LM_RESP (0x2d01144) = 0x80000010
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x0
ACKIDS: INBOUND = 0x0, OUTSTANDING = 0x0, OUTBOUND = 0x0
Start srio_write
SP_LM_RESP (0x2d01144) = 0x80000010
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x100
ACKIDS: INBOUND = 0x0, OUTSTANDING = 0x1, OUTBOUND = 0x0
Start srio_read
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x1000200
ACKIDS: INBOUND = 0x1, OUTSTANDING = 0x2, OUTBOUND = 0x0
Start srio_write
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x1000300
ACKIDS: INBOUND = 0x1, OUTSTANDING = 0x3, OUTBOUND = 0x0
Start srio_read
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x2000400
ACKIDS: INBOUND = 0x2, OUTSTANDING = 0x4, OUTBOUND = 0x0
Start srio_write
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x2000500
ACKIDS: INBOUND = 0x2, OUTSTANDING = 0x5, OUTBOUND = 0x0
Start srio_read
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x3000600
ACKIDS: INBOUND = 0x3, OUTSTANDING = 0x6, OUTBOUND = 0x0
Start srio_write
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x3000700
ACKIDS: INBOUND = 0x3, OUTSTANDING = 0x7, OUTBOUND = 0x0
Start srio_read
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x4000800
ACKIDS: INBOUND = 0x4, OUTSTANDING = 0x8, OUTBOUND = 0x0
Start srio_write
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x4000900
ACKIDS: INBOUND = 0x4, OUTSTANDING = 0x9, OUTBOUND = 0x0
Start srio_read
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x5000a00
ACKIDS: INBOUND = 0x5, OUTSTANDING = 0xa, OUTBOUND = 0x0
Start srio_write
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x5000b00
ACKIDS: INBOUND = 0x5, OUTSTANDING = 0xb, OUTBOUND = 0x0
Start srio_read
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x6000c00
ACKIDS: INBOUND = 0x6, OUTSTANDING = 0xc, OUTBOUND = 0x0
Start srio_write
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x6000d00
ACKIDS: INBOUND = 0x6, OUTSTANDING = 0xd, OUTBOUND = 0x0
Start srio_read
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x7000e00
ACKIDS: INBOUND = 0x7, OUTSTANDING = 0xe, OUTBOUND = 0x0
Start srio_write
SP_LM_RESP (0x2d01144) = 0x10
ACKID_STATUS = 0x0, LINK_STATUS = 0x10
SP_ACKID_STAT (0x2d01148) = 0x7000f00
ACKIDS: INBOUND = 0x7, OUTSTANDING = 0xf, OUTBOUND = 0x0
and awhile later we get wrap around (I cut out all the other printfs)
ACKIDS: INBOUND = 0xf, OUTSTANDING = 0x1e, OUTBOUND = 0x0
ACKIDS: INBOUND = 0xf, OUTSTANDING = 0x1f, OUTBOUND = 0x0
ACKIDS: INBOUND = 0x10, OUTSTANDING = 0x0, OUTBOUND = 0x0
ACKIDS: INBOUND = 0x10, OUTSTANDING = 0x1, OUTBOUND = 0x0
ACKIDS: INBOUND = 0x11, OUTSTANDING = 0x2, OUTBOUND = 0x0
ACKIDS: INBOUND = 0x11, OUTSTANDING = 0x3, OUTBOUND = 0x0