Skip to content

Commit 259039f

Browse files
committed
Merge branch 'stmmac-fixes'
Ong Boon Leong says: ==================== net: stmmac: general fixes for Ethernet functionality 1/5: It ensures that the previous value of GMAC_VLAN_TAG register is read first before for updating the register. 2/5: Similar to 2/6 patch but it is a fix for XGMAC_VLAN_TAG register as requested by Jose Abreu. 3/5: It ensures the GMAC IP v4.xx and above behaves correctly to:- ip link set <devname> multicast off|on 4/5: Added similar IFF_MULTICAST flag for xgmac2, similar to 4/6. 5/5: It ensures PCI platform data is using plat->phy_interface. Changes from v4:- patch 1/6 - this patch is dropped now and will take the input on handling return value from netif_set_real_num_rx| tx_queues() in future patch series. v3:- patch 1/6 - add rtnl_lock() and rtnl_unlock() for stmmac_hw_setup() called inside stmmac_resume() patch 3/6 - Added new patch to fix XGMAC_VLAN_TAG register writting v2:- patch 1/5 - added control for rtnl_lock() & rtnl_unlock() to ensure they are used forstmmac_resume() patch 4/5 - added IFF_MULTICAST flag check for xgmac to ensure multicast works correctly. v1:- - Drop v1 patches (1/7, 3/7 & 4/7) that are not valid. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 184367d + 909c1dd commit 259039f

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ static void dwmac4_set_filter(struct mac_device_info *hw,
420420
value |= GMAC_PACKET_FILTER_PM;
421421
/* Set all the bits of the HASH tab */
422422
memset(mc_filter, 0xff, sizeof(mc_filter));
423-
} else if (!netdev_mc_empty(dev)) {
423+
} else if (!netdev_mc_empty(dev) && (dev->flags & IFF_MULTICAST)) {
424424
struct netdev_hw_addr *ha;
425425

426426
/* Hash filter for multicast */
@@ -736,11 +736,14 @@ static void dwmac4_update_vlan_hash(struct mac_device_info *hw, u32 hash,
736736
__le16 perfect_match, bool is_double)
737737
{
738738
void __iomem *ioaddr = hw->pcsr;
739+
u32 value;
739740

740741
writel(hash, ioaddr + GMAC_VLAN_HASH_TABLE);
741742

743+
value = readl(ioaddr + GMAC_VLAN_TAG);
744+
742745
if (hash) {
743-
u32 value = GMAC_VLAN_VTHM | GMAC_VLAN_ETV;
746+
value |= GMAC_VLAN_VTHM | GMAC_VLAN_ETV;
744747
if (is_double) {
745748
value |= GMAC_VLAN_EDVLP;
746749
value |= GMAC_VLAN_ESVL;
@@ -759,8 +762,6 @@ static void dwmac4_update_vlan_hash(struct mac_device_info *hw, u32 hash,
759762

760763
writel(value | perfect_match, ioaddr + GMAC_VLAN_TAG);
761764
} else {
762-
u32 value = readl(ioaddr + GMAC_VLAN_TAG);
763-
764765
value &= ~(GMAC_VLAN_VTHM | GMAC_VLAN_ETV);
765766
value &= ~(GMAC_VLAN_EDVLP | GMAC_VLAN_ESVL);
766767
value &= ~GMAC_VLAN_DOVLTC;

drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ static void dwxgmac2_set_filter(struct mac_device_info *hw,
458458

459459
for (i = 0; i < XGMAC_MAX_HASH_TABLE; i++)
460460
writel(~0x0, ioaddr + XGMAC_HASH_TABLE(i));
461-
} else if (!netdev_mc_empty(dev)) {
461+
} else if (!netdev_mc_empty(dev) && (dev->flags & IFF_MULTICAST)) {
462462
struct netdev_hw_addr *ha;
463463

464464
value |= XGMAC_FILTER_HMC;
@@ -569,7 +569,9 @@ static void dwxgmac2_update_vlan_hash(struct mac_device_info *hw, u32 hash,
569569

570570
writel(value, ioaddr + XGMAC_PACKET_FILTER);
571571

572-
value = XGMAC_VLAN_VTHM | XGMAC_VLAN_ETV;
572+
value = readl(ioaddr + XGMAC_VLAN_TAG);
573+
574+
value |= XGMAC_VLAN_VTHM | XGMAC_VLAN_ETV;
573575
if (is_double) {
574576
value |= XGMAC_VLAN_EDVLP;
575577
value |= XGMAC_VLAN_ESVL;
@@ -584,7 +586,9 @@ static void dwxgmac2_update_vlan_hash(struct mac_device_info *hw, u32 hash,
584586

585587
writel(value, ioaddr + XGMAC_PACKET_FILTER);
586588

587-
value = XGMAC_VLAN_ETV;
589+
value = readl(ioaddr + XGMAC_VLAN_TAG);
590+
591+
value |= XGMAC_VLAN_ETV;
588592
if (is_double) {
589593
value |= XGMAC_VLAN_EDVLP;
590594
value |= XGMAC_VLAN_ESVL;

drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ static int stmmac_default_data(struct pci_dev *pdev,
9595

9696
plat->bus_id = 1;
9797
plat->phy_addr = 0;
98-
plat->interface = PHY_INTERFACE_MODE_GMII;
98+
plat->phy_interface = PHY_INTERFACE_MODE_GMII;
9999

100100
plat->dma_cfg->pbl = 32;
101101
plat->dma_cfg->pblx8 = true;
@@ -217,7 +217,8 @@ static int ehl_sgmii_data(struct pci_dev *pdev,
217217
{
218218
plat->bus_id = 1;
219219
plat->phy_addr = 0;
220-
plat->interface = PHY_INTERFACE_MODE_SGMII;
220+
plat->phy_interface = PHY_INTERFACE_MODE_SGMII;
221+
221222
return ehl_common_data(pdev, plat);
222223
}
223224

@@ -230,7 +231,8 @@ static int ehl_rgmii_data(struct pci_dev *pdev,
230231
{
231232
plat->bus_id = 1;
232233
plat->phy_addr = 0;
233-
plat->interface = PHY_INTERFACE_MODE_RGMII;
234+
plat->phy_interface = PHY_INTERFACE_MODE_RGMII;
235+
234236
return ehl_common_data(pdev, plat);
235237
}
236238

@@ -258,7 +260,7 @@ static int tgl_sgmii_data(struct pci_dev *pdev,
258260
{
259261
plat->bus_id = 1;
260262
plat->phy_addr = 0;
261-
plat->interface = PHY_INTERFACE_MODE_SGMII;
263+
plat->phy_interface = PHY_INTERFACE_MODE_SGMII;
262264
return tgl_common_data(pdev, plat);
263265
}
264266

@@ -358,7 +360,7 @@ static int quark_default_data(struct pci_dev *pdev,
358360

359361
plat->bus_id = pci_dev_id(pdev);
360362
plat->phy_addr = ret;
361-
plat->interface = PHY_INTERFACE_MODE_RMII;
363+
plat->phy_interface = PHY_INTERFACE_MODE_RMII;
362364

363365
plat->dma_cfg->pbl = 16;
364366
plat->dma_cfg->pblx8 = true;
@@ -415,7 +417,7 @@ static int snps_gmac5_default_data(struct pci_dev *pdev,
415417

416418
plat->bus_id = 1;
417419
plat->phy_addr = -1;
418-
plat->interface = PHY_INTERFACE_MODE_GMII;
420+
plat->phy_interface = PHY_INTERFACE_MODE_GMII;
419421

420422
plat->dma_cfg->pbl = 32;
421423
plat->dma_cfg->pblx8 = true;

0 commit comments

Comments
 (0)