Reviewed-by: Alice Guo <alice....@nxp.com> Best Regards, Alice Guo
> -----邮件原件----- > 发件人: U-Boot <u-boot-boun...@lists.denx.de> 代表 Heiko Thiery > 发送时间: 2025年4月28日 18:00 > 收件人: u-boot@lists.denx.de > 抄送: Joe Hershberger <joe.hershber...@ni.com>; Ramon Fried > <rfried....@gmail.com>; Tom Rini <tr...@konsulko.com>; Marek Vasut > <ma...@denx.de>; Alice Guo <alice....@nxp.com>; Ye Li <ye...@nxp.com>; > thar...@gateworks.com; Michael Walle <mwa...@kernel.org>; Thomas > Schäfer <thomas.schae...@kontron.com>; Heiko Thiery > <heiko.thi...@gmail.com> > 主题: [PATCH] net: fsl_enetc: fix imdio register calculation > > From: Thomas Schaefer <thomas.schae...@kontron.com> > > With commit cc4e8af2c552, fsl_enetc register accessors have been split to > handle different register offsets on different SoCs. However, for internal > MDIO > register calculation, only ENETC_PM_IMDIO_BASE was fixed without adding the > SoC specific MAC register offset. > > As a result, the network support for the Kontron SMARC-sAL28 and probably > other boards based on the LS1028A CPU is broken. > > Add the SoC specific MAC register offset to calculation of imdio.priv to fix > this. > > Fixes: cc4e8af2c552 ("net: fsl_enetc: Split register accessors") > Signed-off-by: Thomas Schaefer <thomas.schae...@kontron.com> > Signed-off-by: Heiko Thiery <heiko.thi...@gmail.com> > > --- > > But the question that now arises is, does this code path work on the imx SoCs > as > well. Now the imx specific offset 0x5000 is added here and was not used > before. > > Can someone please test this on an imx9 and confirm? > > drivers/net/fsl_enetc.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/fsl_enetc.c b/drivers/net/fsl_enetc.c index > 52fa820f51..97cccda451 100644 > --- a/drivers/net/fsl_enetc.c > +++ b/drivers/net/fsl_enetc.c > @@ -473,13 +473,15 @@ static int enetc_init_sxgmii(struct udevice *dev) > /* Apply protocol specific configuration to MAC, serdes as needed */ static > void enetc_start_pcs(struct udevice *dev) { > + struct enetc_data *data = (struct enetc_data > +*)dev_get_driver_data(dev); > struct enetc_priv *priv = dev_get_priv(dev); > > /* register internal MDIO for debug purposes */ > if (enetc_read_pcapr_mdio(dev)) { > priv->imdio.read = enetc_mdio_read; > priv->imdio.write = enetc_mdio_write; > - priv->imdio.priv = priv->port_regs + ENETC_PM_IMDIO_BASE; > + priv->imdio.priv = priv->port_regs + data->reg_offset_mac + > + ENETC_PM_IMDIO_BASE; > strlcpy(priv->imdio.name, dev->name, MDIO_NAME_LEN); > if (!miiphy_get_dev_by_name(priv->imdio.name)) > mdio_register(&priv->imdio); > -- > 2.20.1