[PATCH net-next v9 11/12] net: pcs: airoha: add PCS driver for Airoha AN7581 SoC

Philipp Zabel p.zabel at pengutronix.de
Mon Jul 27 01:02:42 PDT 2026


On Fr, 2026-07-17 at 08:54 +0200, Christian Marangi wrote:
> Add PCS driver for Airoha AN7581 SoC for Ethernet/PON/PCIe/USB SERDES
> and permit usage of external PHY or connected SFP cage. Supported modes
> are USXGMII, 10G-BASER, 2500BASE-X, 1000BASE-X and SGMII.
> 
> The driver probe and register the various needed registers and register as
> a PCS provider for fwnode usage.
> 
> Signed-off-by: Christian Marangi <ansuelsmth at gmail.com>
> ---
>  drivers/net/pcs/Kconfig                    |    2 +
>  drivers/net/pcs/Makefile                   |    2 +
>  drivers/net/pcs/airoha/Kconfig             |   12 +
>  drivers/net/pcs/airoha/Makefile            |    7 +
>  drivers/net/pcs/airoha/pcs-airoha-common.c | 1324 +++++++++++++
>  drivers/net/pcs/airoha/pcs-airoha.h        | 1311 ++++++++++++
>  drivers/net/pcs/airoha/pcs-an7581.c        | 2093 ++++++++++++++++++++
>  7 files changed, 4751 insertions(+)
>  create mode 100644 drivers/net/pcs/airoha/Kconfig
>  create mode 100644 drivers/net/pcs/airoha/Makefile
>  create mode 100644 drivers/net/pcs/airoha/pcs-airoha-common.c
>  create mode 100644 drivers/net/pcs/airoha/pcs-airoha.h
>  create mode 100644 drivers/net/pcs/airoha/pcs-an7581.c
> 
[...]
> diff --git a/drivers/net/pcs/airoha/pcs-airoha-common.c b/drivers/net/pcs/airoha/pcs-airoha-common.c
> new file mode 100644
> index 000000000000..781f89adf3ab
> --- /dev/null
> +++ b/drivers/net/pcs/airoha/pcs-airoha-common.c
> @@ -0,0 +1,1324 @@
[...]
> +static int airoha_pcs_setup_scu(struct airoha_pcs_priv *priv,
> +				int index, phy_interface_t interface)
> +{
> +	const struct airoha_pcs_match_data *data = priv->data;
> +	int ret;
> +
> +	switch (data->port_type) {
> +	case AIROHA_PCS_ETH:
> +		airoha_pcs_setup_scu_eth(priv, interface);
> +		break;
> +	case AIROHA_PCS_PON:
> +		airoha_pcs_setup_scu_pon(priv, interface);
> +		break;
> +	case AIROHA_PCS_PCIE:
> +		airoha_pcs_setup_scu_pcie(priv, index, interface);
> +		break;
> +	case AIROHA_PCS_USB:
> +		break;
> +	}
> +
> +	/* TODO better handle reset from MAC */

What does this mean? There's a "mac" and a "phy" control in rsts.
Should the "mac" reset be handled differently? Or is there a separate
reset line that is controlled by the MAC itself?

> +	ret = reset_control_bulk_assert(ARRAY_SIZE(priv->rsts),
> +					priv->rsts);
> +	if (ret)
> +		return ret;
> +
> +	ret = reset_control_bulk_deassert(ARRAY_SIZE(priv->rsts),
> +					  priv->rsts);
> +	if (ret)
> +		return ret;
> +
> +	return 0;
> +}

regards
Philipp



More information about the Linux-mediatek mailing list