回覆: [PATCH net-next v6 3/5] net: ftgmac100: Add RGMII delay support for AST2600

Jacky Chou jacky_chou at aspeedtech.com
Wed Mar 4 14:31:11 AEDT 2026


Hi Andrew,

Thank you for your reply.

> > On the AST2600 platform, the RGMII delay is controlled via the SCU
> > registers. The delay chain configuration differs between MAC0/1 and
> > MAC2/3, even though all four MACs use a 32-stage delay chain.
> > +------+----------+-----------+-------------+-------------+
> > |      |Delay Unit|Delay Stage|TX Edge Stage|RX Edge Stage|
> > +------+----------+-----------+-------------+-------------+
> > |MAC0/1|     45 ps|        32 |           0 |           0 |
> > +------+----------+-----------+-------------+-------------+
> > |MAC2/3|    250 ps|        32 |           0 |          26 |
> > +------+----------+-----------+-------------+-------------+
> > For MAC2/3, the "no delay" condition starts from stage 26.
> > Setting the RX delay stage to 26 means that no additional RX delay is
> > applied.
> > Here lists the RX delay setting of MAC2/3 below.
> > 26 -> 0   ns, 27 -> 0.25 ns, ... , 31 -> 1.25 ns,
> > 0  -> 1.5 ns, 1  -> 1.75 ns, ... , 25 -> 7.75 ns
> >
> > Therefore, we calculate the delay stage from the rx-internal-delay-ps
> > of MAC2/3 to add 26. If the stage is equel to or bigger than 32, the
> > delay stage will be mask 0x1f to get the correct setting.
> 
> Please return -EINVAL. Asking for more than 7.75ns is clearly broken.

...
	tx_delay_index = DIV_ROUND_CLOSEST(rgmii_tx_delay, rgmii_delay_unit);
	if (tx_delay_index >= 32) {
		dev_err(dev, "The %u ps of TX delay is out of range\n",
			rgmii_tx_delay);
		return -EINVAL;
	}

	rx_delay_index = DIV_ROUND_CLOSEST(rgmii_rx_delay, rgmii_delay_unit);
	if (rx_delay_index >= 32) {
		dev_err(dev, "The %u ps of RX delay is out of range\n",
			rgmii_rx_delay);
		return -EINVAL;
	}
...

These codes will calculate the ns delay to MAC delay index.
(rgmii_delay_unit is 250 ps on MAC2/3)
If set tx delay to 8 ns on MAC2 or MAC3, it will get index is 32.
It is over the delay configuration range, here will return -EINVAL.

Thanks,
Jacky



More information about the Linux-aspeed mailing list