}
 EXPORT_SYMBOL_GPL(enetc_port_mac_wr);
 
+void enetc_set_ptcfpr(struct enetc_hw *hw, unsigned long preemptible_tcs)
+{
+       u32 val;
+       int tc;
+
+       for (tc = 0; tc < 8; tc++) {
+               val = enetc_port_rd(hw, ENETC_PTCFPR(tc));
+
+               if (preemptible_tcs & BIT(tc))
+                       val |= ENETC_PTCFPR_FPE;
+               else
+                       val &= ~ENETC_PTCFPR_FPE;
+
+               enetc_port_wr(hw, ENETC_PTCFPR(tc), val);
+       }
+}
+EXPORT_SYMBOL_GPL(enetc_set_ptcfpr);
+
 static int enetc_num_stack_tx_queues(struct enetc_ndev_priv *priv)
 {
        int num_tx_rings = priv->num_tx_rings;
        }
 
        enetc_debug_tx_ring_prios(priv);
+
+       enetc_set_ptcfpr(hw, 0);
 }
 
 int enetc_setup_tc_mqprio(struct net_device *ndev, void *type_data)
 
        enetc_debug_tx_ring_prios(priv);
 
+       enetc_set_ptcfpr(hw, mqprio->preemptible_tcs);
+
        return 0;
 
 err_reset_tc:
 
 
 void enetc_reset_ptcmsdur(struct enetc_hw *hw);
 void enetc_set_ptcmsdur(struct enetc_hw *hw, u32 *queue_max_sdu);
+void enetc_set_ptcfpr(struct enetc_hw *hw, unsigned long preemptible_tcs);
 
 #ifdef CONFIG_FSL_ENETC_QOS
 int enetc_qos_query_caps(struct net_device *ndev, void *type_data);
 
        return (u32)div_u64(usecs * ENETC_CLK, 1000000ULL);
 }
 
+/* Port traffic class frame preemption register */
+#define ENETC_PTCFPR(n)                        (0x1910 + (n) * 4) /* n = [0 ..7] */
+#define ENETC_PTCFPR_FPE               BIT(31)
+
 /* port time gating control register */
 #define ENETC_PTGCR                    0x11a00
 #define ENETC_PTGCR_TGE                        BIT(31)