Commit 1bf9fd70 authored by Rasesh Mody's avatar Rasesh Mody Committed by David S. Miller

bna: Implement FW Download for New HW

Add new device ID 0x22 and new asic generation BFI_ASIC_GEN_CT2 for 1860.
Implement FW download from user space for new Brocade HW.
Signed-off-by: default avatarGurunatha Karaje <gkaraje@brocade.com>
Signed-off-by: default avatarRasesh Mody <rmody@brocade.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f391fda1
...@@ -261,6 +261,13 @@ struct bfa_mfg_block { ...@@ -261,6 +261,13 @@ struct bfa_mfg_block {
* ---------------------- pci definitions ------------ * ---------------------- pci definitions ------------
*/ */
/*
* PCI device ID information
*/
enum {
BFA_PCI_DEVICE_ID_CT2 = 0x22,
};
#define bfa_asic_id_ct(device) \ #define bfa_asic_id_ct(device) \
((device) == PCI_DEVICE_ID_BROCADE_CT || \ ((device) == PCI_DEVICE_ID_BROCADE_CT || \
(device) == PCI_DEVICE_ID_BROCADE_CT_FC) (device) == PCI_DEVICE_ID_BROCADE_CT_FC)
......
...@@ -159,6 +159,7 @@ enum bfi_mclass { ...@@ -159,6 +159,7 @@ enum bfi_mclass {
enum bfi_asic_gen { enum bfi_asic_gen {
BFI_ASIC_GEN_CB = 1, BFI_ASIC_GEN_CB = 1,
BFI_ASIC_GEN_CT = 2, BFI_ASIC_GEN_CT = 2,
BFI_ASIC_GEN_CT2 = 3,
}; };
enum bfi_asic_mode { enum bfi_asic_mode {
......
...@@ -3477,3 +3477,4 @@ MODULE_LICENSE("GPL"); ...@@ -3477,3 +3477,4 @@ MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Brocade 10G PCIe Ethernet driver"); MODULE_DESCRIPTION("Brocade 10G PCIe Ethernet driver");
MODULE_VERSION(BNAD_VERSION); MODULE_VERSION(BNAD_VERSION);
MODULE_FIRMWARE(CNA_FW_FILE_CT); MODULE_FIRMWARE(CNA_FW_FILE_CT);
MODULE_FIRMWARE(CNA_FW_FILE_CT2);
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
extern char bfa_version[]; extern char bfa_version[];
#define CNA_FW_FILE_CT "ctfw.bin" #define CNA_FW_FILE_CT "ctfw.bin"
#define CNA_FW_FILE_CT2 "ct2fw.bin"
#define FC_SYMNAME_MAX 256 /*!< max name server symbolic name size */ #define FC_SYMNAME_MAX 256 /*!< max name server symbolic name size */
#pragma pack(1) #pragma pack(1)
......
...@@ -16,11 +16,12 @@ ...@@ -16,11 +16,12 @@
* www.brocade.com * www.brocade.com
*/ */
#include <linux/firmware.h> #include <linux/firmware.h>
#include "bfi.h"
#include "cna.h" #include "cna.h"
const struct firmware *bfi_fw; const struct firmware *bfi_fw;
static u32 *bfi_image_ct_cna; static u32 *bfi_image_ct_cna, *bfi_image_ct2_cna;
static u32 bfi_image_ct_cna_size; static u32 bfi_image_ct_cna_size, bfi_image_ct2_cna_size;
static u32 * static u32 *
cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image, cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image,
...@@ -45,20 +46,47 @@ cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image, ...@@ -45,20 +46,47 @@ cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image,
u32 * u32 *
cna_get_firmware_buf(struct pci_dev *pdev) cna_get_firmware_buf(struct pci_dev *pdev)
{ {
if (bfi_image_ct_cna_size == 0) if (pdev->device == BFA_PCI_DEVICE_ID_CT2) {
cna_read_firmware(pdev, &bfi_image_ct_cna, if (bfi_image_ct2_cna_size == 0)
&bfi_image_ct_cna_size, CNA_FW_FILE_CT); cna_read_firmware(pdev, &bfi_image_ct2_cna,
return bfi_image_ct_cna; &bfi_image_ct2_cna_size, CNA_FW_FILE_CT2);
return bfi_image_ct2_cna;
} else if (bfa_asic_id_ct(pdev->device)) {
if (bfi_image_ct_cna_size == 0)
cna_read_firmware(pdev, &bfi_image_ct_cna,
&bfi_image_ct_cna_size, CNA_FW_FILE_CT);
return bfi_image_ct_cna;
}
return NULL;
} }
u32 * u32 *
bfa_cb_image_get_chunk(int type, u32 off) bfa_cb_image_get_chunk(enum bfi_asic_gen asic_gen, u32 off)
{ {
return (u32 *)(bfi_image_ct_cna + off); switch (asic_gen) {
case BFI_ASIC_GEN_CT:
return (u32 *)(bfi_image_ct_cna + off);
break;
case BFI_ASIC_GEN_CT2:
return (u32 *)(bfi_image_ct2_cna + off);
break;
default:
return NULL;
}
} }
u32 u32
bfa_cb_image_get_size(int type) bfa_cb_image_get_size(enum bfi_asic_gen asic_gen)
{ {
return bfi_image_ct_cna_size; switch (asic_gen) {
case BFI_ASIC_GEN_CT:
return bfi_image_ct_cna_size;
break;
case BFI_ASIC_GEN_CT2:
return bfi_image_ct2_cna_size;
break;
default:
return 0;
}
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment