We've got a C6455 here that's connected to an MPC8548 via SRIO. I've got a nasty message passing issue that has been very difficult to debug. We're using one lane (lane 0) at 3.125Gb and physical connectivity is good. Maintenance operations also work and the 8548 is able to read and write C6455 SRIO registers over the bus.
No messages can make it across properly, however. When the 8548 attempts to originate the first message to the C6455 only one instanceo f a changed register value can be seen at the C6455. The Port Local Ack ID Status CSR (for port 0) does indeed change to reflect the inbound ack ID value sent by the 8548, however the rest of the register doesn't change. Only the upper 2 nibbles of this register (INBOUND_ACKID) change. Meanwhile, no other bits in this register or anywhere else in the C6455 SRIO internal register space change, and the acknowledgement is never sent back to the 8548. The 8548 then times out waiting for the acknowledgement.
I've tried a variety of register settings in order to capture any physical layer errors, logical layer errors, or otherwise determine what's going wrong. Promiscuous destination address decode is being used (so the 6455 should receive for any destination address seen on the bus), and all capturing is enabled both at the physical and the logical level as per the 6455 SRIO register definitions. Hardware error recovery is also enabled, so the chip is not waiting for software to generate the ack.
Can anyone point out how it's possible for physical layer and maintenance operations to properly work, but for only the INBOUND_ACKID field of the Port Local Ack ID Status register to be updated (and no other registers whatsoever) when a message is received? No error status is available anywhere and I'm not quite sure where to look next...
Thanks for all info...