mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-20 06:17:45 +07:00
net: stmmac: ARP Offload for GMAC4+ Cores
Implement the ARP Offload feature in GMAC4 and GMAC5 cores. Signed-off-by: Jose Abreu <joabreu@synopsys.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e94e3f3b51
commit
c9b10043d0
@ -40,6 +40,7 @@
|
||||
#define GMAC_HW_FEATURE3 0x00000128
|
||||
#define GMAC_MDIO_ADDR 0x00000200
|
||||
#define GMAC_MDIO_DATA 0x00000204
|
||||
#define GMAC_ARP_ADDR 0x00000210
|
||||
#define GMAC_ADDR_HIGH(reg) (0x300 + reg * 8)
|
||||
#define GMAC_ADDR_LOW(reg) (0x304 + reg * 8)
|
||||
|
||||
@ -165,6 +166,7 @@ enum power_event {
|
||||
#define GMAC_DEBUG_RPESTS BIT(0)
|
||||
|
||||
/* MAC config */
|
||||
#define GMAC_CONFIG_ARPEN BIT(31)
|
||||
#define GMAC_CONFIG_SARC GENMASK(30, 28)
|
||||
#define GMAC_CONFIG_SARC_SHIFT 28
|
||||
#define GMAC_CONFIG_IPC BIT(27)
|
||||
@ -188,6 +190,7 @@ enum power_event {
|
||||
#define GMAC_HW_FEAT_TXCOSEL BIT(14)
|
||||
#define GMAC_HW_FEAT_EEESEL BIT(13)
|
||||
#define GMAC_HW_FEAT_TSSEL BIT(12)
|
||||
#define GMAC_HW_FEAT_ARPOFFSEL BIT(9)
|
||||
#define GMAC_HW_FEAT_MMCSEL BIT(8)
|
||||
#define GMAC_HW_FEAT_MGKSEL BIT(7)
|
||||
#define GMAC_HW_FEAT_RWKSEL BIT(6)
|
||||
|
@ -782,6 +782,22 @@ static void dwmac4_enable_vlan(struct mac_device_info *hw, u32 type)
|
||||
writel(value, ioaddr + GMAC_VLAN_INCL);
|
||||
}
|
||||
|
||||
static void dwmac4_set_arp_offload(struct mac_device_info *hw, bool en,
|
||||
u32 addr)
|
||||
{
|
||||
void __iomem *ioaddr = hw->pcsr;
|
||||
u32 value;
|
||||
|
||||
writel(addr, ioaddr + GMAC_ARP_ADDR);
|
||||
|
||||
value = readl(ioaddr + GMAC_CONFIG);
|
||||
if (en)
|
||||
value |= GMAC_CONFIG_ARPEN;
|
||||
else
|
||||
value &= ~GMAC_CONFIG_ARPEN;
|
||||
writel(value, ioaddr + GMAC_CONFIG);
|
||||
}
|
||||
|
||||
const struct stmmac_ops dwmac4_ops = {
|
||||
.core_init = dwmac4_core_init,
|
||||
.set_mac = stmmac_set_mac,
|
||||
@ -815,6 +831,7 @@ const struct stmmac_ops dwmac4_ops = {
|
||||
.update_vlan_hash = dwmac4_update_vlan_hash,
|
||||
.sarc_configure = dwmac4_sarc_configure,
|
||||
.enable_vlan = dwmac4_enable_vlan,
|
||||
.set_arp_offload = dwmac4_set_arp_offload,
|
||||
};
|
||||
|
||||
const struct stmmac_ops dwmac410_ops = {
|
||||
@ -850,6 +867,7 @@ const struct stmmac_ops dwmac410_ops = {
|
||||
.update_vlan_hash = dwmac4_update_vlan_hash,
|
||||
.sarc_configure = dwmac4_sarc_configure,
|
||||
.enable_vlan = dwmac4_enable_vlan,
|
||||
.set_arp_offload = dwmac4_set_arp_offload,
|
||||
};
|
||||
|
||||
const struct stmmac_ops dwmac510_ops = {
|
||||
@ -890,6 +908,7 @@ const struct stmmac_ops dwmac510_ops = {
|
||||
.update_vlan_hash = dwmac4_update_vlan_hash,
|
||||
.sarc_configure = dwmac4_sarc_configure,
|
||||
.enable_vlan = dwmac4_enable_vlan,
|
||||
.set_arp_offload = dwmac4_set_arp_offload,
|
||||
};
|
||||
|
||||
int dwmac4_setup(struct stmmac_priv *priv)
|
||||
|
@ -349,6 +349,7 @@ static void dwmac4_get_hw_feature(void __iomem *ioaddr,
|
||||
dma_cap->tx_coe = (hw_cap & GMAC_HW_FEAT_TXCOSEL) >> 14;
|
||||
dma_cap->rx_coe = (hw_cap & GMAC_HW_FEAT_RXCOESEL) >> 16;
|
||||
dma_cap->vlins = (hw_cap & GMAC_HW_FEAT_SAVLANINS) >> 27;
|
||||
dma_cap->arpoffsel = (hw_cap & GMAC_HW_FEAT_ARPOFFSEL) >> 9;
|
||||
|
||||
/* MAC HW feature1 */
|
||||
hw_cap = readl(ioaddr + GMAC_HW_FEATURE1);
|
||||
|
Loading…
Reference in New Issue
Block a user