aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorRasesh Mody <rmody@brocade.com>2011-09-27 06:39:07 -0400
committerDavid S. Miller <davem@davemloft.net>2011-09-29 19:36:35 -0400
commit1bf9fd70dd7411372e80fdb8b4b3d5c36236e7b7 (patch)
treef7dac20732ce93a46ea24c3364d6bafe01b662a5 /drivers/net
parentf391fda1f447222fa45db3380fc1e9d2d93c85c9 (diff)
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>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/brocade/bna/bfa_defs.h7
-rw-r--r--drivers/net/ethernet/brocade/bna/bfi.h1
-rw-r--r--drivers/net/ethernet/brocade/bna/bnad.c1
-rw-r--r--drivers/net/ethernet/brocade/bna/cna.h1
-rw-r--r--drivers/net/ethernet/brocade/bna/cna_fwimg.c48
5 files changed, 48 insertions, 10 deletions
diff --git a/drivers/net/ethernet/brocade/bna/bfa_defs.h b/drivers/net/ethernet/brocade/bna/bfa_defs.h
index 66a62072c05d..f9d4100f919d 100644
--- a/drivers/net/ethernet/brocade/bna/bfa_defs.h
+++ b/drivers/net/ethernet/brocade/bna/bfa_defs.h
@@ -261,6 +261,13 @@ struct bfa_mfg_block {
261 * ---------------------- pci definitions ------------ 261 * ---------------------- pci definitions ------------
262 */ 262 */
263 263
264/*
265 * PCI device ID information
266 */
267enum {
268 BFA_PCI_DEVICE_ID_CT2 = 0x22,
269};
270
264#define bfa_asic_id_ct(device) \ 271#define bfa_asic_id_ct(device) \
265 ((device) == PCI_DEVICE_ID_BROCADE_CT || \ 272 ((device) == PCI_DEVICE_ID_BROCADE_CT || \
266 (device) == PCI_DEVICE_ID_BROCADE_CT_FC) 273 (device) == PCI_DEVICE_ID_BROCADE_CT_FC)
diff --git a/drivers/net/ethernet/brocade/bna/bfi.h b/drivers/net/ethernet/brocade/bna/bfi.h
index 4e04c140c84c..54bcafe4d557 100644
--- a/drivers/net/ethernet/brocade/bna/bfi.h
+++ b/drivers/net/ethernet/brocade/bna/bfi.h
@@ -159,6 +159,7 @@ enum bfi_mclass {
159enum bfi_asic_gen { 159enum bfi_asic_gen {
160 BFI_ASIC_GEN_CB = 1, 160 BFI_ASIC_GEN_CB = 1,
161 BFI_ASIC_GEN_CT = 2, 161 BFI_ASIC_GEN_CT = 2,
162 BFI_ASIC_GEN_CT2 = 3,
162}; 163};
163 164
164enum bfi_asic_mode { 165enum bfi_asic_mode {
diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c
index db6c0978899b..320f11c76e14 100644
--- a/drivers/net/ethernet/brocade/bna/bnad.c
+++ b/drivers/net/ethernet/brocade/bna/bnad.c
@@ -3477,3 +3477,4 @@ MODULE_LICENSE("GPL");
3477MODULE_DESCRIPTION("Brocade 10G PCIe Ethernet driver"); 3477MODULE_DESCRIPTION("Brocade 10G PCIe Ethernet driver");
3478MODULE_VERSION(BNAD_VERSION); 3478MODULE_VERSION(BNAD_VERSION);
3479MODULE_FIRMWARE(CNA_FW_FILE_CT); 3479MODULE_FIRMWARE(CNA_FW_FILE_CT);
3480MODULE_FIRMWARE(CNA_FW_FILE_CT2);
diff --git a/drivers/net/ethernet/brocade/bna/cna.h b/drivers/net/ethernet/brocade/bna/cna.h
index cb4874210aa3..1b3e90dfbd9a 100644
--- a/drivers/net/ethernet/brocade/bna/cna.h
+++ b/drivers/net/ethernet/brocade/bna/cna.h
@@ -38,6 +38,7 @@
38extern char bfa_version[]; 38extern char bfa_version[];
39 39
40#define CNA_FW_FILE_CT "ctfw.bin" 40#define CNA_FW_FILE_CT "ctfw.bin"
41#define CNA_FW_FILE_CT2 "ct2fw.bin"
41#define FC_SYMNAME_MAX 256 /*!< max name server symbolic name size */ 42#define FC_SYMNAME_MAX 256 /*!< max name server symbolic name size */
42 43
43#pragma pack(1) 44#pragma pack(1)
diff --git a/drivers/net/ethernet/brocade/bna/cna_fwimg.c b/drivers/net/ethernet/brocade/bna/cna_fwimg.c
index e8f4ecd9ebb5..725b9fff337f 100644
--- a/drivers/net/ethernet/brocade/bna/cna_fwimg.c
+++ b/drivers/net/ethernet/brocade/bna/cna_fwimg.c
@@ -16,11 +16,12 @@
16 * www.brocade.com 16 * www.brocade.com
17 */ 17 */
18#include <linux/firmware.h> 18#include <linux/firmware.h>
19#include "bfi.h"
19#include "cna.h" 20#include "cna.h"
20 21
21const struct firmware *bfi_fw; 22const struct firmware *bfi_fw;
22static u32 *bfi_image_ct_cna; 23static u32 *bfi_image_ct_cna, *bfi_image_ct2_cna;
23static u32 bfi_image_ct_cna_size; 24static u32 bfi_image_ct_cna_size, bfi_image_ct2_cna_size;
24 25
25static u32 * 26static u32 *
26cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image, 27cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image,
@@ -45,20 +46,47 @@ error:
45u32 * 46u32 *
46cna_get_firmware_buf(struct pci_dev *pdev) 47cna_get_firmware_buf(struct pci_dev *pdev)
47{ 48{
48 if (bfi_image_ct_cna_size == 0) 49 if (pdev->device == BFA_PCI_DEVICE_ID_CT2) {
49 cna_read_firmware(pdev, &bfi_image_ct_cna, 50 if (bfi_image_ct2_cna_size == 0)
50 &bfi_image_ct_cna_size, CNA_FW_FILE_CT); 51 cna_read_firmware(pdev, &bfi_image_ct2_cna,
51 return bfi_image_ct_cna; 52 &bfi_image_ct2_cna_size, CNA_FW_FILE_CT2);
53 return bfi_image_ct2_cna;
54 } else if (bfa_asic_id_ct(pdev->device)) {
55 if (bfi_image_ct_cna_size == 0)
56 cna_read_firmware(pdev, &bfi_image_ct_cna,
57 &bfi_image_ct_cna_size, CNA_FW_FILE_CT);
58 return bfi_image_ct_cna;
59 }
60
61 return NULL;
52} 62}
53 63
54u32 * 64u32 *
55bfa_cb_image_get_chunk(int type, u32 off) 65bfa_cb_image_get_chunk(enum bfi_asic_gen asic_gen, u32 off)
56{ 66{
57 return (u32 *)(bfi_image_ct_cna + off); 67 switch (asic_gen) {
68 case BFI_ASIC_GEN_CT:
69 return (u32 *)(bfi_image_ct_cna + off);
70 break;
71 case BFI_ASIC_GEN_CT2:
72 return (u32 *)(bfi_image_ct2_cna + off);
73 break;
74 default:
75 return NULL;
76 }
58} 77}
59 78
60u32 79u32
61bfa_cb_image_get_size(int type) 80bfa_cb_image_get_size(enum bfi_asic_gen asic_gen)
62{ 81{
63 return bfi_image_ct_cna_size; 82 switch (asic_gen) {
83 case BFI_ASIC_GEN_CT:
84 return bfi_image_ct_cna_size;
85 break;
86 case BFI_ASIC_GEN_CT2:
87 return bfi_image_ct2_cna_size;
88 break;
89 default:
90 return 0;
91 }
64} 92}