mcp->in_mb = MBX_9|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
        if (IS_CNA_CAPABLE(vha->hw))
                mcp->in_mb |= MBX_13|MBX_12|MBX_11|MBX_10;
+       if (IS_FWI2_CAPABLE(vha->hw))
+               mcp->in_mb |= MBX_19|MBX_18|MBX_17|MBX_16;
        mcp->tov = MBX_TOV_SECONDS;
        mcp->flags = 0;
        rval = qla2x00_mailbox_command(vha, mcp);
                        vha->fcoe_vn_port_mac[1] = mcp->mb[13] >> 8;
                        vha->fcoe_vn_port_mac[0] = mcp->mb[13] & 0xff;
                }
+               /* If FA-WWN supported */
+               if (mcp->mb[7] & BIT_14) {
+                       vha->port_name[0] = MSB(mcp->mb[16]);
+                       vha->port_name[1] = LSB(mcp->mb[16]);
+                       vha->port_name[2] = MSB(mcp->mb[17]);
+                       vha->port_name[3] = LSB(mcp->mb[17]);
+                       vha->port_name[4] = MSB(mcp->mb[18]);
+                       vha->port_name[5] = LSB(mcp->mb[18]);
+                       vha->port_name[6] = MSB(mcp->mb[19]);
+                       vha->port_name[7] = LSB(mcp->mb[19]);
+                       fc_host_port_name(vha->host) =
+                           wwn_to_u64(vha->port_name);
+                       ql_dbg(ql_dbg_mbx, vha, 0x10ca,
+                           "FA-WWN acquired %016llx\n",
+                           wwn_to_u64(vha->port_name));
+               }
        }
 
        return rval;
                    rptid_entry->port_id[2], rptid_entry->port_id[1],
                    rptid_entry->port_id[0]);
 
+               /* FA-WWN is only for physical port */
+               if (!vp_idx) {
+                       void *wwpn = ha->init_cb->port_name;
+
+                       if (!MSB(stat)) {
+                               if (rptid_entry->vp_idx_map[1] & BIT_6)
+                                       wwpn = rptid_entry->reserved_4 + 8;
+                       }
+                       memcpy(vha->port_name, wwpn, WWN_SIZE);
+                       fc_host_port_name(vha->host) =
+                           wwn_to_u64(vha->port_name);
+                       ql_dbg(ql_dbg_mbx, vha, 0x1018,
+                           "FA-WWN portname %016llx (%x)\n",
+                           fc_host_port_name(vha->host), MSB(stat));
+               }
+
                vp = vha;
-               if (vp_idx == 0 && (MSB(stat) != 1))
+               if (vp_idx == 0)
                        goto reg_needed;
 
                if (MSB(stat) != 0 && MSB(stat) != 2) {