Firstly I purchased 2 ADIN1100 evaluation boards and connected them via 900m twisted pair and one to my laptop and the other to my PC via the RJ45 connector. Using iperf we got very good performance. Since the client side sends the data I switched over the ethernet cables to check performance was good in both directions.
Next we moved onto our own PCB which is very similar to the devkit but with a 6-port switch before the RJ45. When testing our board with an evaluation board it performs as expected (nearly 10Mbit/s) when the eval board is the client an our board the server. But when the eval board is the server and our board is the client the bit rate drops to <1Mbit/s. Reading the MSE of the eval board the value is still similar to the previous test despite the poor performance. At the bottom of this post is a screenshot from Wire Shark, showing the TCP Dup ACK error I get when the link is operated in the 'poor' direction.
We're using an RGMII interface between the ADIN1100 and ADIN1200; and both are unmanaged. To get the RGMII interface to work I had to turn off auto-neg and force 10Mb FD in the ADIN1200 otherwise it's RGMII clock ran at 25MHz whereas the ADIN1100 is at 2.5MHz.
Is the micro on the eval board doing some extra configuration, that can't be done by the hardware pull up/downs?