Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 567b2abe authored by Satish Baddipadige's avatar Satish Baddipadige Committed by David S. Miller
Browse files

bnxt_en: Enable NPAR (NIC Partitioning) Support.



NPAR type is read from bnxt_hwrm_func_qcfg.  Do not allow changing link
parameters if in NPAR mode sinc ethe port is shared among multiple
partitions.  The link parameters are set up by firmware.

Signed-off-by: default avatarSatish Baddipadige <sbaddipa@broadcom.com>
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fc0f1929
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -3850,6 +3850,7 @@ static int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp)
static int bnxt_hwrm_func_qcfg(struct bnxt *bp)
{
	struct hwrm_func_qcfg_input req = {0};
	struct hwrm_func_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
	int rc;

	bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_QCFG, -1, -1);
@@ -3861,12 +3862,18 @@ static int bnxt_hwrm_func_qcfg(struct bnxt *bp)

#ifdef CONFIG_BNXT_SRIOV
	if (BNXT_VF(bp)) {
		struct hwrm_func_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
		struct bnxt_vf_info *vf = &bp->vf;

		vf->vlan = le16_to_cpu(resp->vlan) & VLAN_VID_MASK;
	}
#endif
	switch (resp->port_partition_type) {
	case FUNC_QCFG_RESP_PORT_PARTITION_TYPE_NPAR1_0:
	case FUNC_QCFG_RESP_PORT_PARTITION_TYPE_NPAR1_5:
	case FUNC_QCFG_RESP_PORT_PARTITION_TYPE_NPAR2_0:
		bp->port_partition_type = resp->port_partition_type;
		break;
	}

func_qcfg_exit:
	mutex_unlock(&bp->hwrm_cmd_lock);
@@ -4965,7 +4972,7 @@ static int bnxt_hwrm_shutdown_link(struct bnxt *bp)
{
	struct hwrm_port_phy_cfg_input req = {0};

	if (BNXT_VF(bp))
	if (!BNXT_SINGLE_PF(bp))
		return 0;

	if (pci_num_vf(bp->pdev))
@@ -6427,6 +6434,8 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
		goto init_err;
	}

	bnxt_hwrm_func_qcfg(bp);

	bnxt_set_tpa_flags(bp);
	bnxt_set_ring_params(bp);
	if (BNXT_PF(bp))
+3 −0
Original line number Diff line number Diff line
@@ -907,6 +907,8 @@ struct bnxt {

#define BNXT_PF(bp)		(!((bp)->flags & BNXT_FLAG_VF))
#define BNXT_VF(bp)		((bp)->flags & BNXT_FLAG_VF)
#define BNXT_NPAR(bp)		((bp)->port_partition_type)
#define BNXT_SINGLE_PF(bp)	(BNXT_PF(bp) && !BNXT_NPAR(bp))

	struct bnxt_napi	**bnapi;

@@ -993,6 +995,7 @@ struct bnxt {
	__le16			vxlan_fw_dst_port_id;
	u8			nge_port_cnt;
	__le16			nge_fw_dst_port_id;
	u8			port_partition_type;

	u16			rx_coal_ticks;
	u16			rx_coal_ticks_irq;
+3 −3
Original line number Diff line number Diff line
@@ -823,7 +823,7 @@ static int bnxt_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
	u32 speed, fw_advertising = 0;
	bool set_pause = false;

	if (BNXT_VF(bp))
	if (!BNXT_SINGLE_PF(bp))
		return rc;

	if (cmd->autoneg == AUTONEG_ENABLE) {
@@ -911,7 +911,7 @@ static int bnxt_set_pauseparam(struct net_device *dev,
	struct bnxt *bp = netdev_priv(dev);
	struct bnxt_link_info *link_info = &bp->link_info;

	if (BNXT_VF(bp))
	if (!BNXT_SINGLE_PF(bp))
		return rc;

	if (epause->autoneg) {
@@ -1433,7 +1433,7 @@ static int bnxt_set_eee(struct net_device *dev, struct ethtool_eee *edata)
		 _bnxt_fw_to_ethtool_adv_spds(link_info->advertising, 0);
	int rc = 0;

	if (BNXT_VF(bp))
	if (!BNXT_SINGLE_PF(bp))
		return 0;

	if (!(bp->flags & BNXT_FLAG_EEE_CAP))