提交 c364c453 编写于 作者: J James Smart 提交者: Martin K. Petersen

scsi: lpfc: Revise FDMI reporting of supported port speed for trunk groups

Trunk port FDMI supported port speed shows single port supported speed
rather than the trunked port speed.

Modify supported port speed logic calculation during registration.

Link: https://lore.kernel.org/r/20220412222008.126521-17-jsmart2021@gmail.comCo-developed-by: NJustin Tee <justin.tee@broadcom.com>
Signed-off-by: NJustin Tee <justin.tee@broadcom.com>
Signed-off-by: NJames Smart <jsmart2021@gmail.com>
Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
上级 d6d45f67
...@@ -2830,31 +2830,59 @@ lpfc_fdmi_port_attr_support_speed(struct lpfc_vport *vport, ...@@ -2830,31 +2830,59 @@ lpfc_fdmi_port_attr_support_speed(struct lpfc_vport *vport,
struct lpfc_hba *phba = vport->phba; struct lpfc_hba *phba = vport->phba;
struct lpfc_fdmi_attr_entry *ae; struct lpfc_fdmi_attr_entry *ae;
uint32_t size; uint32_t size;
u32 tcfg;
u8 i, cnt;
ae = &ad->AttrValue; ae = &ad->AttrValue;
ae->un.AttrInt = 0; ae->un.AttrInt = 0;
if (!(phba->hba_flag & HBA_FCOE_MODE)) { if (!(phba->hba_flag & HBA_FCOE_MODE)) {
if (phba->lmt & LMT_256Gb) cnt = 0;
ae->un.AttrInt |= HBA_PORTSPEED_256GFC; if (phba->sli_rev == LPFC_SLI_REV4) {
if (phba->lmt & LMT_128Gb) tcfg = phba->sli4_hba.conf_trunk;
ae->un.AttrInt |= HBA_PORTSPEED_128GFC; for (i = 0; i < 4; i++, tcfg >>= 1)
if (phba->lmt & LMT_64Gb) if (tcfg & 1)
ae->un.AttrInt |= HBA_PORTSPEED_64GFC; cnt++;
if (phba->lmt & LMT_32Gb) }
ae->un.AttrInt |= HBA_PORTSPEED_32GFC;
if (phba->lmt & LMT_16Gb) if (cnt > 2) { /* 4 lane trunk group */
ae->un.AttrInt |= HBA_PORTSPEED_16GFC; if (phba->lmt & LMT_64Gb)
if (phba->lmt & LMT_10Gb) ae->un.AttrInt |= HBA_PORTSPEED_256GFC;
ae->un.AttrInt |= HBA_PORTSPEED_10GFC; if (phba->lmt & LMT_32Gb)
if (phba->lmt & LMT_8Gb) ae->un.AttrInt |= HBA_PORTSPEED_128GFC;
ae->un.AttrInt |= HBA_PORTSPEED_8GFC; if (phba->lmt & LMT_16Gb)
if (phba->lmt & LMT_4Gb) ae->un.AttrInt |= HBA_PORTSPEED_64GFC;
ae->un.AttrInt |= HBA_PORTSPEED_4GFC; } else if (cnt) { /* 2 lane trunk group */
if (phba->lmt & LMT_2Gb) if (phba->lmt & LMT_128Gb)
ae->un.AttrInt |= HBA_PORTSPEED_2GFC; ae->un.AttrInt |= HBA_PORTSPEED_256GFC;
if (phba->lmt & LMT_1Gb) if (phba->lmt & LMT_64Gb)
ae->un.AttrInt |= HBA_PORTSPEED_1GFC; ae->un.AttrInt |= HBA_PORTSPEED_128GFC;
if (phba->lmt & LMT_32Gb)
ae->un.AttrInt |= HBA_PORTSPEED_64GFC;
if (phba->lmt & LMT_16Gb)
ae->un.AttrInt |= HBA_PORTSPEED_32GFC;
} else {
if (phba->lmt & LMT_256Gb)
ae->un.AttrInt |= HBA_PORTSPEED_256GFC;
if (phba->lmt & LMT_128Gb)
ae->un.AttrInt |= HBA_PORTSPEED_128GFC;
if (phba->lmt & LMT_64Gb)
ae->un.AttrInt |= HBA_PORTSPEED_64GFC;
if (phba->lmt & LMT_32Gb)
ae->un.AttrInt |= HBA_PORTSPEED_32GFC;
if (phba->lmt & LMT_16Gb)
ae->un.AttrInt |= HBA_PORTSPEED_16GFC;
if (phba->lmt & LMT_10Gb)
ae->un.AttrInt |= HBA_PORTSPEED_10GFC;
if (phba->lmt & LMT_8Gb)
ae->un.AttrInt |= HBA_PORTSPEED_8GFC;
if (phba->lmt & LMT_4Gb)
ae->un.AttrInt |= HBA_PORTSPEED_4GFC;
if (phba->lmt & LMT_2Gb)
ae->un.AttrInt |= HBA_PORTSPEED_2GFC;
if (phba->lmt & LMT_1Gb)
ae->un.AttrInt |= HBA_PORTSPEED_1GFC;
}
} else { } else {
/* FCoE links support only one speed */ /* FCoE links support only one speed */
switch (phba->fc_linkspeed) { switch (phba->fc_linkspeed) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册