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: Gurunatha Karaje <gkaraje@brocade.com> Signed-off-by: Rasesh Mody <rmody@brocade.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
f391fda1f4
commit
1bf9fd70dd
@@ -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 {
|
|||||||
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");
|
|||||||
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 @@
|
|||||||
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 @@
|
|||||||
* 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 @@ error:
|
|||||||
u32 *
|
u32 *
|
||||||
cna_get_firmware_buf(struct pci_dev *pdev)
|
cna_get_firmware_buf(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
|
if (pdev->device == BFA_PCI_DEVICE_ID_CT2) {
|
||||||
|
if (bfi_image_ct2_cna_size == 0)
|
||||||
|
cna_read_firmware(pdev, &bfi_image_ct2_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)
|
if (bfi_image_ct_cna_size == 0)
|
||||||
cna_read_firmware(pdev, &bfi_image_ct_cna,
|
cna_read_firmware(pdev, &bfi_image_ct_cna,
|
||||||
&bfi_image_ct_cna_size, CNA_FW_FILE_CT);
|
&bfi_image_ct_cna_size, CNA_FW_FILE_CT);
|
||||||
return bfi_image_ct_cna;
|
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)
|
||||||
{
|
{
|
||||||
|
switch (asic_gen) {
|
||||||
|
case BFI_ASIC_GEN_CT:
|
||||||
return (u32 *)(bfi_image_ct_cna + off);
|
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)
|
||||||
{
|
{
|
||||||
|
switch (asic_gen) {
|
||||||
|
case BFI_ASIC_GEN_CT:
|
||||||
return bfi_image_ct_cna_size;
|
return bfi_image_ct_cna_size;
|
||||||
|
break;
|
||||||
|
case BFI_ASIC_GEN_CT2:
|
||||||
|
return bfi_image_ct2_cna_size;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user