diff options
author | Rasesh Mody <rmody@brocade.com> | 2011-09-27 06:39:07 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-09-29 19:36:35 -0400 |
commit | 1bf9fd70dd7411372e80fdb8b4b3d5c36236e7b7 (patch) | |
tree | f7dac20732ce93a46ea24c3364d6bafe01b662a5 /drivers/net/ethernet/brocade | |
parent | f391fda1f447222fa45db3380fc1e9d2d93c85c9 (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/ethernet/brocade')
-rw-r--r-- | drivers/net/ethernet/brocade/bna/bfa_defs.h | 7 | ||||
-rw-r--r-- | drivers/net/ethernet/brocade/bna/bfi.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/brocade/bna/bnad.c | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/brocade/bna/cna.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/brocade/bna/cna_fwimg.c | 48 |
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 | */ | ||
267 | enum { | ||
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 { | |||
159 | enum bfi_asic_gen { | 159 | enum 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 | ||
164 | enum bfi_asic_mode { | 165 | enum 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"); | |||
3477 | MODULE_DESCRIPTION("Brocade 10G PCIe Ethernet driver"); | 3477 | MODULE_DESCRIPTION("Brocade 10G PCIe Ethernet driver"); |
3478 | MODULE_VERSION(BNAD_VERSION); | 3478 | MODULE_VERSION(BNAD_VERSION); |
3479 | MODULE_FIRMWARE(CNA_FW_FILE_CT); | 3479 | MODULE_FIRMWARE(CNA_FW_FILE_CT); |
3480 | MODULE_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 @@ | |||
38 | extern char bfa_version[]; | 38 | extern 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 | ||
21 | const struct firmware *bfi_fw; | 22 | const struct firmware *bfi_fw; |
22 | static u32 *bfi_image_ct_cna; | 23 | static u32 *bfi_image_ct_cna, *bfi_image_ct2_cna; |
23 | static u32 bfi_image_ct_cna_size; | 24 | static u32 bfi_image_ct_cna_size, bfi_image_ct2_cna_size; |
24 | 25 | ||
25 | static u32 * | 26 | static u32 * |
26 | cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image, | 27 | cna_read_firmware(struct pci_dev *pdev, u32 **bfi_image, |
@@ -45,20 +46,47 @@ error: | |||
45 | u32 * | 46 | u32 * |
46 | cna_get_firmware_buf(struct pci_dev *pdev) | 47 | cna_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 | ||
54 | u32 * | 64 | u32 * |
55 | bfa_cb_image_get_chunk(int type, u32 off) | 65 | bfa_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 | ||
60 | u32 | 79 | u32 |
61 | bfa_cb_image_get_size(int type) | 80 | bfa_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 | } |