[net-next v2 4/4] net: ftgmac100: Add RGMII delay configuration for AST2600

Andrew Lunn andrew at lunn.ch
Sat Aug 16 04:23:10 AEST 2025


On Wed, Aug 13, 2025 at 02:33:01PM +0800, Jacky Chou wrote:
> In AST2600, the RGMII delay is configured in SCU register.
> The MAC0/1 and the MAC2/3 on AST2600 have different delay unit with
> their delay chain.
> These MACs all have the 32 stage to configure 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 |
> ------+----------+-----------+-------------+-------------+
> The RX edge stage of MAC2 and MAC3 are strating from 26.

strating? 

> +static void ftgmac100_set_internal_delay(struct platform_device *pdev)
> +{
> +	struct device_node *np = pdev->dev.of_node;
> +	struct regmap *scu;
> +	u32 rgmii_tx_delay;
> +	u32 rgmii_rx_delay;
> +	int dly_mask;
> +	int dly_reg;
> +	int id;
> +
> +	if (!(of_device_is_compatible(np, "aspeed,ast2600-mac01") ||
> +	      of_device_is_compatible(np, "aspeed,ast2600-mac23")))
> +		return;
> +
> +	/* If lack one of them, do not configure anything */
> +	if (of_property_read_u32(np, "tx-internal-delay-ps", &rgmii_tx_delay)) {
> +		dev_warn(&pdev->dev, "failed to get tx-internal-delay-ps\n");
> +		return;
> +	}
> +	if (of_property_read_u32(np, "rx-internal-delay-ps", &rgmii_rx_delay)) {
> +		dev_warn(&pdev->dev, "failed to get tx-internal-delay-ps\n");
> +		return;
> +	}

If these properties are required, but are missing, the DT blob is
broken. Please return -EINVAL, and fail the probe.

Please make all errors in this function due to a bad DT blob fatal.

	Andrew


More information about the Linux-aspeed mailing list