On Thu, Jan 09, 2025 at 10:33:20AM +0000, Jacky Chou wrote: > Hi Andrew, > > > > There are around 11 boards in Aspeed SOC with phy-mode set to "rgmii" > > > (some of them are mac0&1 and others are mac2&3). "rgmii-rxid" is only > > mine. > > > > > > No one in aspeed SOC using "rgmii-id". > > > > O.K, so we have to be careful how we fix this. But the fact they are all equally > > broken might help here. > > > > > > Humm, interesting. Looking at ftgmac100.c, i don't see where you > > > > configure the RGMII delays in the MAC? > > > > This is going to be important. How are delays configured if they are not in the > > MAC driver? > > The RGMII delay is adjusted on clk-ast2600 driver. Please refer to the following link. > https://github.com/AspeedTech-BMC/linux/blob/f52a0cf7c475dc576482db46759e2d854c1f36e4/drivers/clk/clk-ast2600.c#L1008 O.K. So in your vendor tree, you have additional DT properties mac1-clk-delay, mac2-clk-delay, mac3-clk-delay. Which is fine, you can do whatever you want in your vendor tree, it is all open source. But for mainline, this will not be accepted. We have standard properties defined for configuring MAC delays in picoseconds: rx-internal-delay-ps: description: RGMII Receive Clock Delay defined in pico seconds. This is used for controllers that have configurable RX internal delays. If this property is present then the MAC applies the RX delay. tx-internal-delay-ps: description: RGMII Transmit Clock Delay defined in pico seconds. This is used for controllers that have configurable TX internal delays. If this property is present then the MAC applies the TX delay. You need to use these, and in the MAC driver, not a clock driver. That is also part of the issue. Your MAC driver looks correct, it just silently passes phy-mode to the PHY just like every other MAC driver. But you have some code hidden away in the clock controller which adds the delays. If this was in the MAC driver, where it should be, this broken behaviour would of been found earlier. So, looking at mainline, i see where you create a gated clock. But what i do not see is where you set the delays. How does this work in mainline? Is there more hidden code somewhere setting the ASPEED_MAC12_CLK_DLY register? Andrew