[PATCH] net: ti: am65-cpsw-nuss: Use dedicated port mode control registers
Siddharth Vadapalli
s-vadapalli at ti.com
Sat Jul 8 12:43:37 CEST 2023
Hello Tom,
Can this patch please be merged?
On 15/06/23 03:58, Andreas Dannenberg wrote:
> The different CPSW sub-system Ethernet ports have different PHY mode
> control registers. In order to allow the modes to get configured
> independently only the register for the port in question must be
> accessed, otherwise we would just be re-configuring the mode for port 1,
> while leaving all others at their power-on defaults. Fix this issue by
> adding a port-number based offset to the mode control base register
> address based on the fact that the control registers for the different
> ports are spaced exactly 0x4 bytes apart.
>
> Fixes: 9d0dca1199d1 ("net: ethernet: ti: Introduce am654 gigabit eth switch subsystem driver")
> Signed-off-by: Andreas Dannenberg <dannenberg at ti.com>
> Reviewed-by: Siddharth Vadapalli <s-vadapalli at ti.com>
> ---
> Driver changes bench-tested on an SK-AM62 EVM by iterating through
> different variations of RGMII and RMII modes for CPSW ports 1 and 2 and
> checking operation as well as CTRL_ENET1_CTRL and CTRL_ENET2_CTRL
> control register contents from the U-Boot command line via 'md.l'.
> Testing was done on top of today's 'next' branch.
>
> drivers/net/ti/am65-cpsw-nuss.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ti/am65-cpsw-nuss.c b/drivers/net/ti/am65-cpsw-nuss.c
> index f674b0baa3..523a4c9f91 100644
> --- a/drivers/net/ti/am65-cpsw-nuss.c
> +++ b/drivers/net/ti/am65-cpsw-nuss.c
> @@ -223,6 +223,8 @@ out:
> return phy->link;
> }
>
> +#define AM65_GMII_SEL_PORT_OFFS(x) (0x4 * ((x) - 1))
> +
> #define AM65_GMII_SEL_MODE_MII 0
> #define AM65_GMII_SEL_MODE_RMII 1
> #define AM65_GMII_SEL_MODE_RGMII 2
> @@ -233,11 +235,12 @@ static void am65_cpsw_gmii_sel_k3(struct am65_cpsw_priv *priv,
> phy_interface_t phy_mode, int slave)
> {
> struct am65_cpsw_common *common = priv->cpsw_common;
> + fdt_addr_t gmii_sel = common->gmii_sel + AM65_GMII_SEL_PORT_OFFS(slave);
> u32 reg;
> u32 mode = 0;
> bool rgmii_id = false;
>
> - reg = readl(common->gmii_sel);
> + reg = readl(gmii_sel);
>
> dev_dbg(common->dev, "old gmii_sel: %08x\n", reg);
>
> @@ -273,9 +276,9 @@ static void am65_cpsw_gmii_sel_k3(struct am65_cpsw_priv *priv,
> reg = mode;
> dev_dbg(common->dev, "gmii_sel PHY mode: %u, new gmii_sel: %08x\n",
> phy_mode, reg);
> - writel(reg, common->gmii_sel);
> + writel(reg, gmii_sel);
>
> - reg = readl(common->gmii_sel);
> + reg = readl(gmii_sel);
> if (reg != mode)
> dev_err(common->dev,
> "gmii_sel PHY mode NOT SET!: requested: %08x, gmii_sel: %08x\n",
--
Regards,
Siddharth.
More information about the U-Boot
mailing list