mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
scsi: lpfc: Add support for ATTO Fibre Channel devices
Update pci_device_id table and generate reporting strings for ATTO Celerity and ThunderLink Fibre Channel devices. Link: https://lore.kernel.org/r/20220524125621.47102-1-bgrove@attotech.com Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: James Smart <jsmart2021@gmail.com> Co-developed-by: Jason Seba <jseba@attotech.com> Signed-off-by: Jason Seba <jseba@attotech.com> Signed-off-by: Bradley Grove <bgrove@attotech.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
b3bc1a88b5
commit
a5b168efba
3 changed files with 141 additions and 0 deletions
|
@ -1736,6 +1736,28 @@ struct lpfc_fdmi_reg_portattr {
|
|||
#define PCI_DEVICE_ID_TOMCAT 0x0714
|
||||
#define PCI_DEVICE_ID_SKYHAWK 0x0724
|
||||
#define PCI_DEVICE_ID_SKYHAWK_VF 0x072c
|
||||
#define PCI_VENDOR_ID_ATTO 0x117c
|
||||
#define PCI_DEVICE_ID_CLRY_16XE 0x0064
|
||||
#define PCI_DEVICE_ID_CLRY_161E 0x0063
|
||||
#define PCI_DEVICE_ID_CLRY_162E 0x0064
|
||||
#define PCI_DEVICE_ID_CLRY_164E 0x0065
|
||||
#define PCI_DEVICE_ID_CLRY_16XP 0x0094
|
||||
#define PCI_DEVICE_ID_CLRY_161P 0x00a0
|
||||
#define PCI_DEVICE_ID_CLRY_162P 0x0094
|
||||
#define PCI_DEVICE_ID_CLRY_164P 0x00a1
|
||||
#define PCI_DEVICE_ID_CLRY_32XE 0x0094
|
||||
#define PCI_DEVICE_ID_CLRY_321E 0x00a2
|
||||
#define PCI_DEVICE_ID_CLRY_322E 0x00a3
|
||||
#define PCI_DEVICE_ID_CLRY_324E 0x00ac
|
||||
#define PCI_DEVICE_ID_CLRY_32XP 0x00bb
|
||||
#define PCI_DEVICE_ID_CLRY_321P 0x00bc
|
||||
#define PCI_DEVICE_ID_CLRY_322P 0x00bd
|
||||
#define PCI_DEVICE_ID_CLRY_324P 0x00be
|
||||
#define PCI_DEVICE_ID_TLFC_2 0x0064
|
||||
#define PCI_DEVICE_ID_TLFC_2XX2 0x4064
|
||||
#define PCI_DEVICE_ID_TLFC_3 0x0094
|
||||
#define PCI_DEVICE_ID_TLFC_3162 0x40a6
|
||||
#define PCI_DEVICE_ID_TLFC_3322 0x40a7
|
||||
|
||||
#define JEDEC_ID_ADDRESS 0x0080001c
|
||||
#define FIREFLY_JEDEC_ID 0x1ACC
|
||||
|
|
|
@ -124,5 +124,35 @@ const struct pci_device_id lpfc_id_table[] = {
|
|||
PCI_ANY_ID, PCI_ANY_ID, },
|
||||
{PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SKYHAWK_VF,
|
||||
PCI_ANY_ID, PCI_ANY_ID, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_16XE,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_161E, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_16XE,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_162E, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_16XE,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_164E, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_16XP,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_161P, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_16XP,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_162P, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_16XP,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_164P, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_32XE,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_321E, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_32XE,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_322E, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_32XE,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_324E, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_32XP,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_321P, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_32XP,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_322P, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_32XP,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_CLRY_324P, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_TLFC_2,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_TLFC_2XX2, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_TLFC_3,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_TLFC_3162, },
|
||||
{PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_TLFC_3,
|
||||
PCI_VENDOR_ID_ATTO, PCI_DEVICE_ID_TLFC_3322, },
|
||||
{ 0 }
|
||||
};
|
||||
|
|
|
@ -2414,6 +2414,90 @@ lpfc_parse_vpd(struct lpfc_hba *phba, uint8_t *vpd, int len)
|
|||
return(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* lpfc_get_atto_model_desc - Retrieve ATTO HBA device model name and description
|
||||
* @phba: pointer to lpfc hba data structure.
|
||||
* @mdp: pointer to the data structure to hold the derived model name.
|
||||
* @descp: pointer to the data structure to hold the derived description.
|
||||
*
|
||||
* This routine retrieves HBA's description based on its registered PCI device
|
||||
* ID. The @descp passed into this function points to an array of 256 chars. It
|
||||
* shall be returned with the model name, maximum speed, and the host bus type.
|
||||
* The @mdp passed into this function points to an array of 80 chars. When the
|
||||
* function returns, the @mdp will be filled with the model name.
|
||||
**/
|
||||
static void
|
||||
lpfc_get_atto_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
|
||||
{
|
||||
uint16_t sub_dev_id = phba->pcidev->subsystem_device;
|
||||
char *model = "<Unknown>";
|
||||
int tbolt = 0;
|
||||
|
||||
switch (sub_dev_id) {
|
||||
case PCI_DEVICE_ID_CLRY_161E:
|
||||
model = "161E";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_162E:
|
||||
model = "162E";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_164E:
|
||||
model = "164E";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_161P:
|
||||
model = "161P";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_162P:
|
||||
model = "162P";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_164P:
|
||||
model = "164P";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_321E:
|
||||
model = "321E";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_322E:
|
||||
model = "322E";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_324E:
|
||||
model = "324E";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_321P:
|
||||
model = "321P";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_322P:
|
||||
model = "322P";
|
||||
break;
|
||||
case PCI_DEVICE_ID_CLRY_324P:
|
||||
model = "324P";
|
||||
break;
|
||||
case PCI_DEVICE_ID_TLFC_2XX2:
|
||||
model = "2XX2";
|
||||
tbolt = 1;
|
||||
break;
|
||||
case PCI_DEVICE_ID_TLFC_3162:
|
||||
model = "3162";
|
||||
tbolt = 1;
|
||||
break;
|
||||
case PCI_DEVICE_ID_TLFC_3322:
|
||||
model = "3322";
|
||||
tbolt = 1;
|
||||
break;
|
||||
default:
|
||||
model = "Unknown";
|
||||
break;
|
||||
}
|
||||
|
||||
if (mdp && mdp[0] == '\0')
|
||||
snprintf(mdp, 79, "%s", model);
|
||||
|
||||
if (descp && descp[0] == '\0')
|
||||
snprintf(descp, 255,
|
||||
"ATTO %s%s, Fibre Channel Adapter Initiator, Port %s",
|
||||
(tbolt) ? "ThunderLink FC " : "Celerity FC-",
|
||||
model,
|
||||
phba->Port);
|
||||
}
|
||||
|
||||
/**
|
||||
* lpfc_get_hba_model_desc - Retrieve HBA device model name and description
|
||||
* @phba: pointer to lpfc hba data structure.
|
||||
|
@ -2444,6 +2528,11 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
|
|||
&& descp && descp[0] != '\0')
|
||||
return;
|
||||
|
||||
if (phba->pcidev->vendor == PCI_VENDOR_ID_ATTO) {
|
||||
lpfc_get_atto_model_desc(phba, mdp, descp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (phba->lmt & LMT_64Gb)
|
||||
max_speed = 64;
|
||||
else if (phba->lmt & LMT_32Gb)
|
||||
|
|
Loading…
Reference in a new issue