We should not call airoha_fe_init() from GDM port independent code, because it do a GDM specific things.
Makes airoha_fe_maccr_init() and airoha_fe_init() port dependent and call them from airoha_eth_port_probe() Signed-off-by: Mikhail Kshevetskiy <[email protected]> --- drivers/net/airoha_eth.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/drivers/net/airoha_eth.c b/drivers/net/airoha_eth.c index ed8ee9da4c9..b1256866046 100644 --- a/drivers/net/airoha_eth.c +++ b/drivers/net/airoha_eth.c @@ -431,22 +431,18 @@ static int airoha_get_fe_port(struct airoha_gdm_port *port) } } -static void airoha_fe_maccr_init(struct airoha_eth *eth) +static void airoha_fe_maccr_init(struct airoha_gdm_port *port) { - int p; - - for (p = 1; p <= AIROHA_MAX_NUM_GDM_PORTS; p++) { - /* - * Disable any kind of CRC drop or offload. - * Enable padding of short TX packets to 60 bytes. - */ - airoha_fe_wr(eth, REG_GDM_FWD_CFG(p), GDM_PAD_EN); - } + /* + * Disable any kind of CRC drop or offload. + * Enable padding of short TX packets to 60 bytes. + */ + airoha_fe_wr(port->qdma->eth, REG_GDM_FWD_CFG(port->id), GDM_PAD_EN); } -static int airoha_fe_init(struct airoha_eth *eth) +static int airoha_fe_init(struct airoha_gdm_port *port) { - airoha_fe_maccr_init(eth); + airoha_fe_maccr_init(port); return 0; } @@ -718,10 +714,6 @@ static int airoha_hw_init(struct udevice *dev, mdelay(20); - ret = airoha_fe_init(eth); - if (ret) - return ret; - for (i = 0; i < ARRAY_SIZE(eth->qdma); i++) { ret = airoha_qdma_init(dev, eth, ð->qdma[i]); if (ret) @@ -898,6 +890,10 @@ static int airoha_eth_port_probe(struct udevice *dev) port->qdma = ð->qdma[0]; + ret = airoha_fe_init(port); + if (ret) + return ret; + return 0; } -- 2.51.0

