net: enetc: detect frame preemption hardware capability
authorVladimir Oltean <vladimir.oltean@nxp.com>
Thu, 19 Jan 2023 16:04:27 +0000 (18:04 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 23 Jan 2023 13:13:08 +0000 (13:13 +0000)
Similar to other TSN features, query the Station Interface capability
register to see whether preemption is supported on this port or not.
On LS1028A, preemption is available on ports 0 and 2, but not on 1
and 3.

This will allow us in the future to write the pMAC registers only on the
ENETC ports where a pMAC actually exists.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/enetc/enetc.c
drivers/net/ethernet/freescale/enetc/enetc.h
drivers/net/ethernet/freescale/enetc/enetc_hw.h

index 07a6eef1d5ee1f318db735e38fac8978891432ed..347e698cbedc96ba10f275973142a0e3e115f8a5 100644 (file)
@@ -1713,6 +1713,9 @@ void enetc_get_si_caps(struct enetc_si *si)
        if (val & ENETC_SIPCAPR0_QBV)
                si->hw_features |= ENETC_SI_F_QBV;
 
+       if (val & ENETC_SIPCAPR0_QBU)
+               si->hw_features |= ENETC_SI_F_QBU;
+
        if (val & ENETC_SIPCAPR0_PSFP)
                si->hw_features |= ENETC_SI_F_PSFP;
 }
index 6a87aa972e1eab9e5313a364a00e04f8e10e1213..cb227c93a07b6df78d33ed83af07538c5bd33ed6 100644 (file)
@@ -229,8 +229,9 @@ enum enetc_errata {
        ENETC_ERR_UCMCSWP       = BIT(1),
 };
 
-#define ENETC_SI_F_QBV BIT(0)
-#define ENETC_SI_F_PSFP BIT(1)
+#define ENETC_SI_F_PSFP BIT(0)
+#define ENETC_SI_F_QBV  BIT(1)
+#define ENETC_SI_F_QBU  BIT(2)
 
 /* PCI IEP device data */
 struct enetc_si {
index 18ca1f42b1f754584dbab8471e16f31e68ee9836..cc8f1afdc3bc71beb3c1c1bb0a2e44a3ab12ec5a 100644 (file)
 #define ENETC_SICTR0   0x18
 #define ENETC_SICTR1   0x1c
 #define ENETC_SIPCAPR0 0x20
-#define ENETC_SIPCAPR0_QBV     BIT(4)
 #define ENETC_SIPCAPR0_PSFP    BIT(9)
 #define ENETC_SIPCAPR0_RSS     BIT(8)
+#define ENETC_SIPCAPR0_QBV     BIT(4)
+#define ENETC_SIPCAPR0_QBU     BIT(3)
 #define ENETC_SIPCAPR1 0x24
 #define ENETC_SITGTGR  0x30
 #define ENETC_SIRBGCR  0x38