]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: macb: Enable PTP unicast
authorHarini Katakam <harini.katakam@xilinx.com>
Tue, 11 Apr 2023 12:37:11 +0000 (18:07 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 19 Sep 2023 10:28:09 +0000 (12:28 +0200)
[ Upstream commit ee4e92c26c60b7344b7261035683a37da5a6119b ]

Enable transmission and reception of PTP unicast packets by
updating PTP unicast config bit and setting current HW mac
address as allowed address in PTP unicast filter registers.

Signed-off-by: Harini Katakam <harini.katakam@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Stable-dep-of: 403f0e771457 ("net: macb: fix sleep inside spinlock")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/cadence/macb.h
drivers/net/ethernet/cadence/macb_main.c

index 9c410f93a1039bca6f8212c05652426351dbd318..1aa578c1ca4adce7e7451c6c0766a3766f1926bd 100644 (file)
@@ -95,6 +95,8 @@
 #define GEM_SA4B               0x00A0 /* Specific4 Bottom */
 #define GEM_SA4T               0x00A4 /* Specific4 Top */
 #define GEM_WOL                        0x00b8 /* Wake on LAN */
+#define GEM_RXPTPUNI           0x00D4 /* PTP RX Unicast address */
+#define GEM_TXPTPUNI           0x00D8 /* PTP TX Unicast address */
 #define GEM_EFTSH              0x00e8 /* PTP Event Frame Transmitted Seconds Register 47:32 */
 #define GEM_EFRSH              0x00ec /* PTP Event Frame Received Seconds Register 47:32 */
 #define GEM_PEFTSH             0x00f0 /* PTP Peer Event Frame Transmitted Seconds Register 47:32 */
 #define MACB_TZQ_OFFSET                12 /* Transmit zero quantum pause frame */
 #define MACB_TZQ_SIZE          1
 #define MACB_SRTSM_OFFSET      15 /* Store Receive Timestamp to Memory */
+#define MACB_PTPUNI_OFFSET     20 /* PTP Unicast packet enable */
+#define MACB_PTPUNI_SIZE       1
 #define MACB_OSSMODE_OFFSET    24 /* Enable One Step Synchro Mode */
 #define MACB_OSSMODE_SIZE      1
 #define MACB_MIIONRGMII_OFFSET 28 /* MII Usage on RGMII Interface */
index 5fb991835078a01e7f094b8ee0fad2046b810499..9470e895591e546b994ed135847daa58270dfb80 100644 (file)
@@ -288,6 +288,11 @@ static void macb_set_hwaddr(struct macb *bp)
        top = cpu_to_le16(*((u16 *)(bp->dev->dev_addr + 4)));
        macb_or_gem_writel(bp, SA1T, top);
 
+       if (gem_has_ptp(bp)) {
+               gem_writel(bp, RXPTPUNI, bottom);
+               gem_writel(bp, TXPTPUNI, bottom);
+       }
+
        /* Clear unused address register sets */
        macb_or_gem_writel(bp, SA2B, 0);
        macb_or_gem_writel(bp, SA2T, 0);
@@ -721,8 +726,12 @@ static void macb_mac_link_up(struct phylink_config *config,
 
        spin_unlock_irqrestore(&bp->lock, flags);
 
-       /* Enable Rx and Tx */
-       macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(RE) | MACB_BIT(TE));
+       /* Enable Rx and Tx; Enable PTP unicast */
+       ctrl = macb_readl(bp, NCR);
+       if (gem_has_ptp(bp))
+               ctrl |= MACB_BIT(PTPUNI);
+
+       macb_writel(bp, NCR, ctrl | MACB_BIT(RE) | MACB_BIT(TE));
 
        netif_tx_wake_all_queues(ndev);
 }