Skip to content

Commit d323769

Browse files
Russell King (Oracle)kuba-moo
authored andcommitted
net: stmmac: rk: introduce flags indicating support for RGMII/RMII
Introduce two boolean flags into struct rk_priv_data indicating whether RGMII and/or RMII is supported for this instance. Use these to configure the supported_interfaces mask for phylink, validate the interface mode. Initialise these from equivalent flags in the rk_gmac_ops or depending on the presence of the ops->set_to_rgmii and ops->set_to_mii methods. Finally, make ops->set_to_* optional. This will allow us to get rid of empty set_to_rmii() methods. Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Reviewed-by: Heiko Stuebner <heiko@sntech.de> Tested-by: Heiko Stuebner <heiko@sntech.de> #px30,rk3328,rk3568,rk3588 Link: https://patch.msgid.link/E1vnYxl-00000007hol-3XiH@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 7a4cd71 commit d323769

1 file changed

Lines changed: 25 additions & 10 deletions

File tree

drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ struct rk_gmac_ops {
5353

5454
bool gmac_grf_reg_in_php;
5555
bool clock_grf_reg_in_php;
56+
bool supports_rgmii;
57+
bool supports_rmii;
5658
bool php_grf_required;
5759
bool regs_valid;
5860
u32 regs[];
@@ -86,6 +88,8 @@ struct rk_priv_data {
8688
bool clk_enabled;
8789
bool clock_input;
8890
bool integrated_phy;
91+
bool supports_rgmii;
92+
bool supports_rmii;
8993

9094
struct clk_bulk_data *clks;
9195
int num_clks;
@@ -1415,6 +1419,9 @@ static struct rk_priv_data *rk_gmac_setup(struct platform_device *pdev,
14151419
bsp_priv->clock_grf_reg = ops->clock_grf_reg;
14161420
bsp_priv->clock = ops->clock;
14171421

1422+
bsp_priv->supports_rgmii = ops->supports_rgmii || !!ops->set_to_rgmii;
1423+
bsp_priv->supports_rmii = ops->supports_rmii || !!ops->set_to_rmii;
1424+
14181425
if (ops->init) {
14191426
ret = ops->init(bsp_priv);
14201427
if (ret) {
@@ -1434,11 +1441,11 @@ static int rk_gmac_check_ops(struct rk_priv_data *bsp_priv)
14341441
case PHY_INTERFACE_MODE_RGMII_ID:
14351442
case PHY_INTERFACE_MODE_RGMII_RXID:
14361443
case PHY_INTERFACE_MODE_RGMII_TXID:
1437-
if (!bsp_priv->ops->set_to_rgmii)
1444+
if (!bsp_priv->supports_rgmii)
14381445
return -EINVAL;
14391446
break;
14401447
case PHY_INTERFACE_MODE_RMII:
1441-
if (!bsp_priv->ops->set_to_rmii)
1448+
if (!bsp_priv->supports_rmii)
14421449
return -EINVAL;
14431450
break;
14441451
default:
@@ -1489,24 +1496,32 @@ static int rk_gmac_powerup(struct rk_priv_data *bsp_priv)
14891496
switch (bsp_priv->phy_iface) {
14901497
case PHY_INTERFACE_MODE_RGMII:
14911498
dev_info(dev, "init for RGMII\n");
1492-
bsp_priv->ops->set_to_rgmii(bsp_priv, bsp_priv->tx_delay,
1493-
bsp_priv->rx_delay);
1499+
if (bsp_priv->ops->set_to_rgmii)
1500+
bsp_priv->ops->set_to_rgmii(bsp_priv,
1501+
bsp_priv->tx_delay,
1502+
bsp_priv->rx_delay);
14941503
break;
14951504
case PHY_INTERFACE_MODE_RGMII_ID:
14961505
dev_info(dev, "init for RGMII_ID\n");
1497-
bsp_priv->ops->set_to_rgmii(bsp_priv, 0, 0);
1506+
if (bsp_priv->ops->set_to_rgmii)
1507+
bsp_priv->ops->set_to_rgmii(bsp_priv, 0, 0);
14981508
break;
14991509
case PHY_INTERFACE_MODE_RGMII_RXID:
15001510
dev_info(dev, "init for RGMII_RXID\n");
1501-
bsp_priv->ops->set_to_rgmii(bsp_priv, bsp_priv->tx_delay, 0);
1511+
if (bsp_priv->ops->set_to_rgmii)
1512+
bsp_priv->ops->set_to_rgmii(bsp_priv,
1513+
bsp_priv->tx_delay, 0);
15021514
break;
15031515
case PHY_INTERFACE_MODE_RGMII_TXID:
15041516
dev_info(dev, "init for RGMII_TXID\n");
1505-
bsp_priv->ops->set_to_rgmii(bsp_priv, 0, bsp_priv->rx_delay);
1517+
if (bsp_priv->ops->set_to_rgmii)
1518+
bsp_priv->ops->set_to_rgmii(bsp_priv,
1519+
0, bsp_priv->rx_delay);
15061520
break;
15071521
case PHY_INTERFACE_MODE_RMII:
15081522
dev_info(dev, "init for RMII\n");
1509-
bsp_priv->ops->set_to_rmii(bsp_priv);
1523+
if (bsp_priv->ops->set_to_rmii)
1524+
bsp_priv->ops->set_to_rmii(bsp_priv);
15101525
break;
15111526
default:
15121527
dev_err(dev, "NO interface defined!\n");
@@ -1542,10 +1557,10 @@ static void rk_get_interfaces(struct stmmac_priv *priv, void *bsp_priv,
15421557
{
15431558
struct rk_priv_data *rk = bsp_priv;
15441559

1545-
if (rk->ops->set_to_rgmii)
1560+
if (rk->supports_rgmii)
15461561
phy_interface_set_rgmii(interfaces);
15471562

1548-
if (rk->ops->set_to_rmii)
1563+
if (rk->supports_rmii)
15491564
__set_bit(PHY_INTERFACE_MODE_RMII, interfaces);
15501565
}
15511566

0 commit comments

Comments
 (0)