net: stmmac: provide function to lookup hwif

Provide a function to lookup the hwif entry given the core type,
Synopsys version, and device ID (used for XGMAC cores).

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Tested-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1vDtf6-0000000CCCL-1cQA@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Russell King (Oracle)
2025-10-29 00:03:36 +00:00
committed by Jakub Kicinski
parent b2fe9e29b5
commit 7b510ea8e5

View File

@@ -299,6 +299,30 @@ static const struct stmmac_hwif_entry {
},
};
static const struct stmmac_hwif_entry *
stmmac_hwif_find(enum dwmac_core_type core_type, u8 snpsver, u8 dev_id)
{
const struct stmmac_hwif_entry *entry;
int i;
for (i = ARRAY_SIZE(stmmac_hw) - 1; i >= 0; i--) {
entry = &stmmac_hw[i];
if (core_type != entry->core_type)
continue;
/* Use synopsys_id var because some setups can override this */
if (snpsver < entry->min_id)
continue;
if (core_type == DWMAC_CORE_XGMAC &&
(dev_id ^ entry->dev_id))
continue;
return entry;
}
return NULL;
}
int stmmac_hwif_init(struct stmmac_priv *priv)
{
enum dwmac_core_type core_type = priv->plat->core_type;
@@ -306,7 +330,7 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
struct stmmac_version version;
struct mac_device_info *mac;
bool needs_setup = true;
int i, ret;
int ret;
stmmac_get_version(priv, &version);
@@ -339,18 +363,10 @@ int stmmac_hwif_init(struct stmmac_priv *priv)
spin_lock_init(&mac->irq_ctrl_lock);
/* Fallback to generic HW */
for (i = ARRAY_SIZE(stmmac_hw) - 1; i >= 0; i--) {
entry = &stmmac_hw[i];
if (core_type != entry->core_type)
continue;
/* Use synopsys_id var because some setups can override this */
if (priv->synopsys_id < entry->min_id)
continue;
if (core_type == DWMAC_CORE_XGMAC &&
(version.dev_id ^ entry->dev_id))
continue;
/* Use synopsys_id var because some setups can override this */
entry = stmmac_hwif_find(core_type, priv->synopsys_id, version.dev_id);
if (entry) {
/* Only use generic HW helpers if needed */
mac->desc = mac->desc ? : entry->desc;
mac->dma = mac->dma ? : entry->dma;