if (bp->test_info)
                        bp->test_info->flags |= BNXT_TEST_FL_AN_PHY_LPBK;
        }
+       if (resp->flags & PORT_PHY_QCAPS_RESP_FLAGS_SHARED_PHY_CFG_SUPPORTED) {
+               if (BNXT_PF(bp))
+                       bp->fw_cap |= BNXT_FW_CAP_SHARED_PORT_CFG;
+       }
        if (resp->supported_speeds_auto_mode)
                link_info->support_auto_speeds =
                        le16_to_cpu(resp->supported_speeds_auto_mode);
        }
        mutex_unlock(&bp->hwrm_cmd_lock);
 
-       if (!BNXT_SINGLE_PF(bp))
+       if (!BNXT_PHY_CFG_ABLE(bp))
                return 0;
 
        diff = link_info->support_auto_speeds ^ link_info->advertising;
 
 #define BNXT_NPAR(bp)          ((bp)->port_partition_type)
 #define BNXT_MH(bp)            ((bp)->flags & BNXT_FLAG_MULTI_HOST)
 #define BNXT_SINGLE_PF(bp)     (BNXT_PF(bp) && !BNXT_NPAR(bp) && !BNXT_MH(bp))
+#define BNXT_PHY_CFG_ABLE(bp)  (BNXT_SINGLE_PF(bp) ||                  \
+                                ((bp)->fw_cap & BNXT_FW_CAP_SHARED_PORT_CFG))
 #define BNXT_CHIP_TYPE_NITRO_A0(bp) ((bp)->flags & BNXT_FLAG_CHIP_NITRO_A0)
 #define BNXT_RX_PAGE_MODE(bp)  ((bp)->flags & BNXT_FLAG_RX_PAGE_MODE)
 #define BNXT_SUPPORTS_TPA(bp)  (!BNXT_CHIP_TYPE_NITRO_A0(bp) &&        \
        #define BNXT_FW_CAP_EXT_STATS_SUPPORTED         0x00040000
        #define BNXT_FW_CAP_ERR_RECOVER_RELOAD          0x00100000
        #define BNXT_FW_CAP_HOT_RESET                   0x00200000
+       #define BNXT_FW_CAP_SHARED_PORT_CFG             0x00400000
 
 #define BNXT_NEW_RM(bp)                ((bp)->fw_cap & BNXT_FW_CAP_NEW_RM)
        u32                     hwrm_spec_code;
 
        u32 speed;
        int rc = 0;
 
-       if (!BNXT_SINGLE_PF(bp))
+       if (!BNXT_PHY_CFG_ABLE(bp))
                return -EOPNOTSUPP;
 
        mutex_lock(&bp->link_lock);
        struct bnxt *bp = netdev_priv(dev);
        struct bnxt_link_info *link_info = &bp->link_info;
 
-       if (!BNXT_SINGLE_PF(bp))
+       if (!BNXT_PHY_CFG_ABLE(bp))
                return -EOPNOTSUPP;
 
        if (epause->autoneg) {
                 _bnxt_fw_to_ethtool_adv_spds(link_info->advertising, 0);
        int rc = 0;
 
-       if (!BNXT_SINGLE_PF(bp))
+       if (!BNXT_PHY_CFG_ABLE(bp))
                return -EOPNOTSUPP;
 
        if (!(bp->flags & BNXT_FLAG_EEE_CAP))
        struct bnxt *bp = netdev_priv(dev);
        struct bnxt_link_info *link_info = &bp->link_info;
 
-       if (!BNXT_SINGLE_PF(bp))
+       if (!BNXT_PHY_CFG_ABLE(bp))
                return -EOPNOTSUPP;
 
        if (!(link_info->autoneg & BNXT_AUTONEG_SPEED))