aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/bfa/bfa_defs.h9
-rw-r--r--drivers/scsi/bfa/bfa_fcs.h8
-rw-r--r--drivers/scsi/bfa/bfa_ioc.c29
-rw-r--r--drivers/scsi/bfa/bfa_ioc.h3
-rw-r--r--drivers/scsi/bfa/bfad_bsg.c2
-rw-r--r--drivers/scsi/bfa/bfad_bsg.h4
-rw-r--r--drivers/scsi/bfa/bfi.h6
7 files changed, 43 insertions, 18 deletions
diff --git a/drivers/scsi/bfa/bfa_defs.h b/drivers/scsi/bfa/bfa_defs.h
index d65a9b4a6f65..bef16d276668 100644
--- a/drivers/scsi/bfa/bfa_defs.h
+++ b/drivers/scsi/bfa/bfa_defs.h
@@ -45,6 +45,7 @@ enum {
45 BFA_MFG_TYPE_PROWLER_C = 1710, /* Prowler CNA only cards */ 45 BFA_MFG_TYPE_PROWLER_C = 1710, /* Prowler CNA only cards */
46 BFA_MFG_TYPE_PROWLER_D = 1860, /* Prowler Dual cards */ 46 BFA_MFG_TYPE_PROWLER_D = 1860, /* Prowler Dual cards */
47 BFA_MFG_TYPE_CHINOOK = 1867, /* Chinook cards */ 47 BFA_MFG_TYPE_CHINOOK = 1867, /* Chinook cards */
48 BFA_MFG_TYPE_CHINOOK2 = 1869, /*!< Chinook2 cards */
48 BFA_MFG_TYPE_INVALID = 0, /* Invalid card type */ 49 BFA_MFG_TYPE_INVALID = 0, /* Invalid card type */
49}; 50};
50 51
@@ -59,7 +60,8 @@ enum {
59 (type) == BFA_MFG_TYPE_ASTRA || \ 60 (type) == BFA_MFG_TYPE_ASTRA || \
60 (type) == BFA_MFG_TYPE_LIGHTNING_P0 || \ 61 (type) == BFA_MFG_TYPE_LIGHTNING_P0 || \
61 (type) == BFA_MFG_TYPE_LIGHTNING || \ 62 (type) == BFA_MFG_TYPE_LIGHTNING || \
62 (type) == BFA_MFG_TYPE_CHINOOK)) 63 (type) == BFA_MFG_TYPE_CHINOOK || \
64 (type) == BFA_MFG_TYPE_CHINOOK2))
63 65
64/* 66/*
65 * Check if the card having old wwn/mac handling 67 * Check if the card having old wwn/mac handling
@@ -263,6 +265,7 @@ enum {
263 BFA_ADAPTER_MFG_NAME_LEN = 8, /* manufacturer name length */ 265 BFA_ADAPTER_MFG_NAME_LEN = 8, /* manufacturer name length */
264 BFA_ADAPTER_SYM_NAME_LEN = 64, /* adapter symbolic name length */ 266 BFA_ADAPTER_SYM_NAME_LEN = 64, /* adapter symbolic name length */
265 BFA_ADAPTER_OS_TYPE_LEN = 64, /* adapter os type length */ 267 BFA_ADAPTER_OS_TYPE_LEN = 64, /* adapter os type length */
268 BFA_ADAPTER_UUID_LEN = 16, /* adapter uuid length */
266}; 269};
267 270
268struct bfa_adapter_attr_s { 271struct bfa_adapter_attr_s {
@@ -296,6 +299,7 @@ struct bfa_adapter_attr_s {
296 u8 mfg_month; /* manufacturing month */ 299 u8 mfg_month; /* manufacturing month */
297 u16 mfg_year; /* manufacturing year */ 300 u16 mfg_year; /* manufacturing year */
298 u16 rsvd; 301 u16 rsvd;
302 u8 uuid[BFA_ADAPTER_UUID_LEN];
299}; 303};
300 304
301/* 305/*
@@ -409,7 +413,8 @@ struct bfa_ioc_attr_s {
409 u8 port_mode; /* bfa_mode_s */ 413 u8 port_mode; /* bfa_mode_s */
410 u8 cap_bm; /* capability */ 414 u8 cap_bm; /* capability */
411 u8 port_mode_cfg; /* bfa_mode_s */ 415 u8 port_mode_cfg; /* bfa_mode_s */
412 u8 rsvd[4]; /* 64bit align */ 416 u8 def_fn; /* 1 if default fn */
417 u8 rsvd[3]; /* 64bit align */
413}; 418};
414 419
415/* 420/*
diff --git a/drivers/scsi/bfa/bfa_fcs.h b/drivers/scsi/bfa/bfa_fcs.h
index 4f1e650f3320..94d5d0102f7d 100644
--- a/drivers/scsi/bfa/bfa_fcs.h
+++ b/drivers/scsi/bfa/bfa_fcs.h
@@ -243,19 +243,19 @@ struct bfa_fcs_fabric_s;
243 * Symbolic Name. 243 * Symbolic Name.
244 * 244 *
245 * Physical Port's symbolic name Format : (Total 128 bytes) 245 * Physical Port's symbolic name Format : (Total 128 bytes)
246 * Adapter Model number/name : 12 bytes 246 * Adapter Model number/name : 16 bytes
247 * Driver Version : 10 bytes 247 * Driver Version : 10 bytes
248 * Host Machine Name : 30 bytes 248 * Host Machine Name : 30 bytes
249 * Host OS Info : 48 bytes 249 * Host OS Info : 44 bytes
250 * Host OS PATCH Info : 16 bytes 250 * Host OS PATCH Info : 16 bytes
251 * ( remaining 12 bytes reserved to be used for separator) 251 * ( remaining 12 bytes reserved to be used for separator)
252 */ 252 */
253#define BFA_FCS_PORT_SYMBNAME_SEPARATOR " | " 253#define BFA_FCS_PORT_SYMBNAME_SEPARATOR " | "
254 254
255#define BFA_FCS_PORT_SYMBNAME_MODEL_SZ 12 255#define BFA_FCS_PORT_SYMBNAME_MODEL_SZ 16
256#define BFA_FCS_PORT_SYMBNAME_VERSION_SZ 10 256#define BFA_FCS_PORT_SYMBNAME_VERSION_SZ 10
257#define BFA_FCS_PORT_SYMBNAME_MACHINENAME_SZ 30 257#define BFA_FCS_PORT_SYMBNAME_MACHINENAME_SZ 30
258#define BFA_FCS_PORT_SYMBNAME_OSINFO_SZ 48 258#define BFA_FCS_PORT_SYMBNAME_OSINFO_SZ 44
259#define BFA_FCS_PORT_SYMBNAME_OSPATCH_SZ 16 259#define BFA_FCS_PORT_SYMBNAME_OSPATCH_SZ 16
260 260
261/* 261/*
diff --git a/drivers/scsi/bfa/bfa_ioc.c b/drivers/scsi/bfa/bfa_ioc.c
index 8928b68551c3..c31cb3ca07eb 100644
--- a/drivers/scsi/bfa/bfa_ioc.c
+++ b/drivers/scsi/bfa/bfa_ioc.c
@@ -2508,6 +2508,7 @@ bfa_ioc_get_adapter_attr(struct bfa_ioc_s *ioc,
2508 ad_attr->mfg_day = ioc_attr->mfg_day; 2508 ad_attr->mfg_day = ioc_attr->mfg_day;
2509 ad_attr->mfg_month = ioc_attr->mfg_month; 2509 ad_attr->mfg_month = ioc_attr->mfg_month;
2510 ad_attr->mfg_year = ioc_attr->mfg_year; 2510 ad_attr->mfg_year = ioc_attr->mfg_year;
2511 memcpy(ad_attr->uuid, ioc_attr->uuid, BFA_ADAPTER_UUID_LEN);
2511} 2512}
2512 2513
2513enum bfa_ioc_type_e 2514enum bfa_ioc_type_e
@@ -2572,13 +2573,19 @@ void
2572bfa_ioc_get_adapter_model(struct bfa_ioc_s *ioc, char *model) 2573bfa_ioc_get_adapter_model(struct bfa_ioc_s *ioc, char *model)
2573{ 2574{
2574 struct bfi_ioc_attr_s *ioc_attr; 2575 struct bfi_ioc_attr_s *ioc_attr;
2576 u8 nports = bfa_ioc_get_nports(ioc);
2575 2577
2576 WARN_ON(!model); 2578 WARN_ON(!model);
2577 memset((void *)model, 0, BFA_ADAPTER_MODEL_NAME_LEN); 2579 memset((void *)model, 0, BFA_ADAPTER_MODEL_NAME_LEN);
2578 2580
2579 ioc_attr = ioc->attr; 2581 ioc_attr = ioc->attr;
2580 2582
2581 snprintf(model, BFA_ADAPTER_MODEL_NAME_LEN, "%s-%u", 2583 if (bfa_asic_id_ct2(ioc->pcidev.device_id) &&
2584 (!bfa_mfg_is_mezz(ioc_attr->card_type)))
2585 snprintf(model, BFA_ADAPTER_MODEL_NAME_LEN, "%s-%u-%u%s",
2586 BFA_MFG_NAME, ioc_attr->card_type, nports, "p");
2587 else
2588 snprintf(model, BFA_ADAPTER_MODEL_NAME_LEN, "%s-%u",
2582 BFA_MFG_NAME, ioc_attr->card_type); 2589 BFA_MFG_NAME, ioc_attr->card_type);
2583} 2590}
2584 2591
@@ -2628,7 +2635,7 @@ bfa_ioc_get_attr(struct bfa_ioc_s *ioc, struct bfa_ioc_attr_s *ioc_attr)
2628 memset((void *)ioc_attr, 0, sizeof(struct bfa_ioc_attr_s)); 2635 memset((void *)ioc_attr, 0, sizeof(struct bfa_ioc_attr_s));
2629 2636
2630 ioc_attr->state = bfa_ioc_get_state(ioc); 2637 ioc_attr->state = bfa_ioc_get_state(ioc);
2631 ioc_attr->port_id = ioc->port_id; 2638 ioc_attr->port_id = bfa_ioc_portid(ioc);
2632 ioc_attr->port_mode = ioc->port_mode; 2639 ioc_attr->port_mode = ioc->port_mode;
2633 ioc_attr->port_mode_cfg = ioc->port_mode_cfg; 2640 ioc_attr->port_mode_cfg = ioc->port_mode_cfg;
2634 ioc_attr->cap_bm = ioc->ad_cap_bm; 2641 ioc_attr->cap_bm = ioc->ad_cap_bm;
@@ -2637,8 +2644,9 @@ bfa_ioc_get_attr(struct bfa_ioc_s *ioc, struct bfa_ioc_attr_s *ioc_attr)
2637 2644
2638 bfa_ioc_get_adapter_attr(ioc, &ioc_attr->adapter_attr); 2645 bfa_ioc_get_adapter_attr(ioc, &ioc_attr->adapter_attr);
2639 2646
2640 ioc_attr->pci_attr.device_id = ioc->pcidev.device_id; 2647 ioc_attr->pci_attr.device_id = bfa_ioc_devid(ioc);
2641 ioc_attr->pci_attr.pcifn = ioc->pcidev.pci_func; 2648 ioc_attr->pci_attr.pcifn = bfa_ioc_pcifn(ioc);
2649 ioc_attr->def_fn = (bfa_ioc_pcifn(ioc) == bfa_ioc_portid(ioc));
2642 bfa_ioc_get_pci_chip_rev(ioc, ioc_attr->pci_attr.chip_rev); 2650 bfa_ioc_get_pci_chip_rev(ioc, ioc_attr->pci_attr.chip_rev);
2643} 2651}
2644 2652
@@ -6018,6 +6026,7 @@ bfa_fru_write_send(void *cbarg, enum bfi_fru_h2i_msgs msg_type)
6018 */ 6026 */
6019 msg->last = (len == fru->residue) ? 1 : 0; 6027 msg->last = (len == fru->residue) ? 1 : 0;
6020 6028
6029 msg->trfr_cmpl = (len == fru->residue) ? fru->trfr_cmpl : 0;
6021 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc)); 6030 bfi_h2i_set(msg->mh, BFI_MC_FRU, msg_type, bfa_ioc_portid(fru->ioc));
6022 bfa_alen_set(&msg->alen, len, fru->dbuf_pa); 6031 bfa_alen_set(&msg->alen, len, fru->dbuf_pa);
6023 6032
@@ -6132,13 +6141,14 @@ bfa_fru_memclaim(struct bfa_fru_s *fru, u8 *dm_kva, u64 dm_pa,
6132 */ 6141 */
6133bfa_status_t 6142bfa_status_t
6134bfa_fruvpd_update(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset, 6143bfa_fruvpd_update(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset,
6135 bfa_cb_fru_t cbfn, void *cbarg) 6144 bfa_cb_fru_t cbfn, void *cbarg, u8 trfr_cmpl)
6136{ 6145{
6137 bfa_trc(fru, BFI_FRUVPD_H2I_WRITE_REQ); 6146 bfa_trc(fru, BFI_FRUVPD_H2I_WRITE_REQ);
6138 bfa_trc(fru, len); 6147 bfa_trc(fru, len);
6139 bfa_trc(fru, offset); 6148 bfa_trc(fru, offset);
6140 6149
6141 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) 6150 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2 &&
6151 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2)
6142 return BFA_STATUS_FRU_NOT_PRESENT; 6152 return BFA_STATUS_FRU_NOT_PRESENT;
6143 6153
6144 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK) 6154 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK)
@@ -6160,6 +6170,7 @@ bfa_fruvpd_update(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset,
6160 fru->offset = 0; 6170 fru->offset = 0;
6161 fru->addr_off = offset; 6171 fru->addr_off = offset;
6162 fru->ubuf = buf; 6172 fru->ubuf = buf;
6173 fru->trfr_cmpl = trfr_cmpl;
6163 6174
6164 bfa_fru_write_send(fru, BFI_FRUVPD_H2I_WRITE_REQ); 6175 bfa_fru_write_send(fru, BFI_FRUVPD_H2I_WRITE_REQ);
6165 6176
@@ -6189,7 +6200,8 @@ bfa_fruvpd_read(struct bfa_fru_s *fru, void *buf, u32 len, u32 offset,
6189 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2) 6200 if (fru->ioc->asic_gen != BFI_ASIC_GEN_CT2)
6190 return BFA_STATUS_FRU_NOT_PRESENT; 6201 return BFA_STATUS_FRU_NOT_PRESENT;
6191 6202
6192 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK) 6203 if (fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK &&
6204 fru->ioc->attr->card_type != BFA_MFG_TYPE_CHINOOK2)
6193 return BFA_STATUS_CMD_NOTSUPP; 6205 return BFA_STATUS_CMD_NOTSUPP;
6194 6206
6195 if (!bfa_ioc_is_operational(fru->ioc)) 6207 if (!bfa_ioc_is_operational(fru->ioc))
@@ -6230,7 +6242,8 @@ bfa_fruvpd_get_max_size(struct bfa_fru_s *fru, u32 *max_size)
6230 if (!bfa_ioc_is_operational(fru->ioc)) 6242 if (!bfa_ioc_is_operational(fru->ioc))
6231 return BFA_STATUS_IOC_NON_OP; 6243 return BFA_STATUS_IOC_NON_OP;
6232 6244
6233 if (fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK) 6245 if (fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK ||
6246 fru->ioc->attr->card_type == BFA_MFG_TYPE_CHINOOK2)
6234 *max_size = BFA_FRU_CHINOOK_MAX_SIZE; 6247 *max_size = BFA_FRU_CHINOOK_MAX_SIZE;
6235 else 6248 else
6236 return BFA_STATUS_CMD_NOTSUPP; 6249 return BFA_STATUS_CMD_NOTSUPP;
diff --git a/drivers/scsi/bfa/bfa_ioc.h b/drivers/scsi/bfa/bfa_ioc.h
index de62b68beb64..90814fe85ac1 100644
--- a/drivers/scsi/bfa/bfa_ioc.h
+++ b/drivers/scsi/bfa/bfa_ioc.h
@@ -731,6 +731,7 @@ struct bfa_fru_s {
731 struct bfa_mbox_cmd_s mb; /* mailbox */ 731 struct bfa_mbox_cmd_s mb; /* mailbox */
732 struct bfa_ioc_notify_s ioc_notify; /* ioc event notify */ 732 struct bfa_ioc_notify_s ioc_notify; /* ioc event notify */
733 struct bfa_mem_dma_s fru_dma; 733 struct bfa_mem_dma_s fru_dma;
734 u8 trfr_cmpl;
734}; 735};
735 736
736#define BFA_FRU(__bfa) (&(__bfa)->modules.fru) 737#define BFA_FRU(__bfa) (&(__bfa)->modules.fru)
@@ -738,7 +739,7 @@ struct bfa_fru_s {
738 739
739bfa_status_t bfa_fruvpd_update(struct bfa_fru_s *fru, 740bfa_status_t bfa_fruvpd_update(struct bfa_fru_s *fru,
740 void *buf, u32 len, u32 offset, 741 void *buf, u32 len, u32 offset,
741 bfa_cb_fru_t cbfn, void *cbarg); 742 bfa_cb_fru_t cbfn, void *cbarg, u8 trfr_cmpl);
742bfa_status_t bfa_fruvpd_read(struct bfa_fru_s *fru, 743bfa_status_t bfa_fruvpd_read(struct bfa_fru_s *fru,
743 void *buf, u32 len, u32 offset, 744 void *buf, u32 len, u32 offset,
744 bfa_cb_fru_t cbfn, void *cbarg); 745 bfa_cb_fru_t cbfn, void *cbarg);
diff --git a/drivers/scsi/bfa/bfad_bsg.c b/drivers/scsi/bfa/bfad_bsg.c
index 9863b1c2e567..0467c349251a 100644
--- a/drivers/scsi/bfa/bfad_bsg.c
+++ b/drivers/scsi/bfa/bfad_bsg.c
@@ -2716,7 +2716,7 @@ bfad_iocmd_fruvpd_update(struct bfad_s *bfad, void *cmd)
2716 spin_lock_irqsave(&bfad->bfad_lock, flags); 2716 spin_lock_irqsave(&bfad->bfad_lock, flags);
2717 iocmd->status = bfa_fruvpd_update(BFA_FRU(&bfad->bfa), 2717 iocmd->status = bfa_fruvpd_update(BFA_FRU(&bfad->bfa),
2718 &iocmd->data, iocmd->len, iocmd->offset, 2718 &iocmd->data, iocmd->len, iocmd->offset,
2719 bfad_hcb_comp, &fcomp); 2719 bfad_hcb_comp, &fcomp, iocmd->trfr_cmpl);
2720 spin_unlock_irqrestore(&bfad->bfad_lock, flags); 2720 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
2721 if (iocmd->status == BFA_STATUS_OK) { 2721 if (iocmd->status == BFA_STATUS_OK) {
2722 wait_for_completion(&fcomp.comp); 2722 wait_for_completion(&fcomp.comp);
diff --git a/drivers/scsi/bfa/bfad_bsg.h b/drivers/scsi/bfa/bfad_bsg.h
index b0b5ac7a75ff..05f0fc9cf063 100644
--- a/drivers/scsi/bfa/bfad_bsg.h
+++ b/drivers/scsi/bfa/bfad_bsg.h
@@ -794,10 +794,12 @@ struct bfa_bsg_tfru_s {
794struct bfa_bsg_fruvpd_s { 794struct bfa_bsg_fruvpd_s {
795 bfa_status_t status; 795 bfa_status_t status;
796 u16 bfad_num; 796 u16 bfad_num;
797 u16 rsvd; 797 u16 rsvd1;
798 u32 offset; 798 u32 offset;
799 u32 len; 799 u32 len;
800 u8 data[BFA_MAX_FRUVPD_TRANSFER_SIZE]; 800 u8 data[BFA_MAX_FRUVPD_TRANSFER_SIZE];
801 u8 trfr_cmpl;
802 u8 rsvd2[3];
801}; 803};
802 804
803struct bfa_bsg_fruvpd_max_size_s { 805struct bfa_bsg_fruvpd_max_size_s {
diff --git a/drivers/scsi/bfa/bfi.h b/drivers/scsi/bfa/bfi.h
index bf0a58d03be8..37bd2564e83b 100644
--- a/drivers/scsi/bfa/bfi.h
+++ b/drivers/scsi/bfa/bfi.h
@@ -264,6 +264,7 @@ struct bfi_ioc_getattr_req_s {
264 union bfi_addr_u attr_addr; 264 union bfi_addr_u attr_addr;
265}; 265};
266 266
267#define BFI_IOC_ATTR_UUID_SZ 16
267struct bfi_ioc_attr_s { 268struct bfi_ioc_attr_s {
268 wwn_t mfg_pwwn; /* Mfg port wwn */ 269 wwn_t mfg_pwwn; /* Mfg port wwn */
269 wwn_t mfg_nwwn; /* Mfg node wwn */ 270 wwn_t mfg_nwwn; /* Mfg node wwn */
@@ -292,6 +293,7 @@ struct bfi_ioc_attr_s {
292 u8 mfg_day; /* manufacturing day */ 293 u8 mfg_day; /* manufacturing day */
293 u8 mfg_month; /* manufacturing month */ 294 u8 mfg_month; /* manufacturing month */
294 u16 mfg_year; /* manufacturing year */ 295 u16 mfg_year; /* manufacturing year */
296 u8 uuid[BFI_IOC_ATTR_UUID_SZ]; /*!< chinook uuid */
295}; 297};
296 298
297/* 299/*
@@ -1253,7 +1255,9 @@ enum bfi_fru_i2h_msgs {
1253struct bfi_fru_write_req_s { 1255struct bfi_fru_write_req_s {
1254 struct bfi_mhdr_s mh; /* Common msg header */ 1256 struct bfi_mhdr_s mh; /* Common msg header */
1255 u8 last; 1257 u8 last;
1256 u8 rsv[3]; 1258 u8 rsv_1[3];
1259 u8 trfr_cmpl;
1260 u8 rsv_2[3];
1257 u32 offset; 1261 u32 offset;
1258 u32 length; 1262 u32 length;
1259 struct bfi_alen_s alen; 1263 struct bfi_alen_s alen;