Hi all,
We are developing on a custom board consisting of several C6678 DSPs divided into pairs. Of each pair, one is directly connected to a Marvell network switch via SGMII and the other is daisy-chained through the first. (The network switch has a PHY connected to one of its ports to enable external communications. None of the DSPs are directly connected to a PHY.) Here is a crude diagram of one such pair:
<Marvell Switch> --- <SGMII0 – DSP1 – SGMII1> --- <SGMII1 – DSP2>
So DSP 1 sees the network switch through SGMII0 and is connected to DSP 2 through SGMII1. DSP 2 is connected to DSP 1 on its SGMII1 and has nothing connected to its SGMII0.
This is different from the EVM, where the DSP has a PHY on port 1 and port 0 leads to the external AMC connector. So we need to modify some software components that were built specifically for the EVM - hopefully just the platform lib.
Our platform lib for this board is based on the EVMC6678 version. We’ve modified the function platform_init such that it inits SGMII0 only on DSP 1, and SGMII1 on both DSPs. Function call Init_SGMII for port 1 returns properly on both DSPs, detecting a successful link and autonegotiation with the opposing device.
The NIMU driver (part of the 6678-specific PDK, used by the NDK) calls the platform lib’s platform_get_emac_info function to query the MAC address, and also to discover which port it should access. It seems to ask the platform lib which of the ports is connected to a PHY (as opposed to the AMC) then assigns the number of that port to a variable named gTxPort.
We modified the platform lib such that on DSP 1 port 0 will be declared as the PHY, and on DSP 2 port 1. This doesn’t seem like a correct solution because on DSP 1 both ports are supposed to be active (utilizing the switching capability of the Ethernet module) but it was our best guess. With this code in place, DSP 1 can access the network with no problem, but DSP 2 seems to have a network connection but it lasts very briefly – it is able to ping and receive a connection from the outside world for a few seconds – and then the network stops functioning until the next restart. However, at no time are the two DSPs able to ping each other.
I find it strange that NIMU queries for a MAC address per port. This makes no sense because the DSP is supposed to have just one MAC address regardless of how many ports its internal switch has. Perhaps I'm misunderstanding something.
In any case, any ideas on getting this daisy-chained architecture working properly would be most welcome.
Thanks,
-itay