{
        struct i40e_pf *pf = i40e_netdev_to_pf(dev);
 
+       /* only report HW timestamping if PTP is enabled */
+       if (!(pf->flags & I40E_FLAG_PTP))
+               return ethtool_op_get_ts_info(dev, info);
+
        info->so_timestamping = SOF_TIMESTAMPING_TX_SOFTWARE |
                                SOF_TIMESTAMPING_RX_SOFTWARE |
                                SOF_TIMESTAMPING_SOFTWARE |
 
 {
        struct hwtstamp_config *config = &pf->tstamp_config;
 
+       if (!(pf->flags & I40E_FLAG_PTP))
+               return -EOPNOTSUPP;
+
        return copy_to_user(ifr->ifr_data, config, sizeof(*config)) ?
                -EFAULT : 0;
 }
                                       struct hwtstamp_config *config)
 {
        struct i40e_hw *hw = &pf->hw;
-       u32 pf_id, tsyntype, regval;
+       u32 tsyntype, regval;
 
        /* Reserved for future extensions. */
        if (config->flags)
                return -EINVAL;
 
-       /* Confirm that 1588 is supported on this PF. */
-       pf_id = (rd32(hw, I40E_PRTTSYN_CTL0) & I40E_PRTTSYN_CTL0_PF_ID_MASK) >>
-               I40E_PRTTSYN_CTL0_PF_ID_SHIFT;
-       if (hw->pf_id != pf_id) {
-               dev_err(&pf->pdev->dev,
-                       "PF %d attempted to control timestamp mode on port %d, which is owned by PF %d\n",
-                       hw->pf_id, hw->port, pf_id);
-               return -EPERM;
-       }
-
        switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
                pf->ptp_tx = false;
        struct hwtstamp_config config;
        int err;
 
+       if (!(pf->flags & I40E_FLAG_PTP))
+               return -EOPNOTSUPP;
+
        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
                return -EFAULT;
 
 {
        struct net_device *netdev = pf->vsi[pf->lan_vsi]->netdev;
        struct i40e_hw *hw = &pf->hw;
+       u32 pf_id;
        long err;
 
+       /* Only one PF is assigned to control 1588 logic per port. Do not
+        * enable any support for PFs not assigned via PRTTSYN_CTL0.PF_ID
+        */
+       pf_id = (rd32(hw, I40E_PRTTSYN_CTL0) & I40E_PRTTSYN_CTL0_PF_ID_MASK) >>
+               I40E_PRTTSYN_CTL0_PF_ID_SHIFT;
+       if (hw->pf_id != pf_id) {
+               pf->flags &= ~I40E_FLAG_PTP;
+               dev_info(&pf->pdev->dev, "%s: PTP not supported on %s\n",
+                        __func__,
+                        netdev->name);
+               return;
+       }
+
        /* we have to initialize the lock first, since we can't control
         * when the user will enter the PHC device entry points
         */