aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/bnx2.c')
-rw-r--r--drivers/net/bnx2.c38
1 files changed, 31 insertions, 7 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index e7551040b096..406b2e16052e 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -5546,11 +5546,7 @@ bnx2_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
5546 strcpy(info->driver, DRV_MODULE_NAME); 5546 strcpy(info->driver, DRV_MODULE_NAME);
5547 strcpy(info->version, DRV_MODULE_VERSION); 5547 strcpy(info->version, DRV_MODULE_VERSION);
5548 strcpy(info->bus_info, pci_name(bp->pdev)); 5548 strcpy(info->bus_info, pci_name(bp->pdev));
5549 info->fw_version[0] = ((bp->fw_ver & 0xff000000) >> 24) + '0'; 5549 strcpy(info->fw_version, bp->fw_version);
5550 info->fw_version[2] = ((bp->fw_ver & 0xff0000) >> 16) + '0';
5551 info->fw_version[4] = ((bp->fw_ver & 0xff00) >> 8) + '0';
5552 info->fw_version[1] = info->fw_version[3] = '.';
5553 info->fw_version[5] = 0;
5554} 5550}
5555 5551
5556#define BNX2_REGDUMP_LEN (32 * 1024) 5552#define BNX2_REGDUMP_LEN (32 * 1024)
@@ -6462,7 +6458,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
6462{ 6458{
6463 struct bnx2 *bp; 6459 struct bnx2 *bp;
6464 unsigned long mem_len; 6460 unsigned long mem_len;
6465 int rc; 6461 int rc, i, j;
6466 u32 reg; 6462 u32 reg;
6467 u64 dma_mask, persist_dma_mask; 6463 u64 dma_mask, persist_dma_mask;
6468 6464
@@ -6619,7 +6615,35 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
6619 goto err_out_unmap; 6615 goto err_out_unmap;
6620 } 6616 }
6621 6617
6622 bp->fw_ver = REG_RD_IND(bp, bp->shmem_base + BNX2_DEV_INFO_BC_REV); 6618 reg = REG_RD_IND(bp, bp->shmem_base + BNX2_DEV_INFO_BC_REV);
6619 for (i = 0, j = 0; i < 3; i++) {
6620 u8 num, k, skip0;
6621
6622 num = (u8) (reg >> (24 - (i * 8)));
6623 for (k = 100, skip0 = 1; k >= 1; num %= k, k /= 10) {
6624 if (num >= k || !skip0 || k == 1) {
6625 bp->fw_version[j++] = (num / k) + '0';
6626 skip0 = 0;
6627 }
6628 }
6629 if (i != 2)
6630 bp->fw_version[j++] = '.';
6631 }
6632 reg = REG_RD_IND(bp, bp->shmem_base + BNX2_BC_STATE_CONDITION);
6633 reg &= BNX2_CONDITION_MFW_RUN_MASK;
6634 if (reg != BNX2_CONDITION_MFW_RUN_UNKNOWN &&
6635 reg != BNX2_CONDITION_MFW_RUN_NONE) {
6636 int i;
6637 u32 addr = REG_RD_IND(bp, bp->shmem_base + BNX2_MFW_VER_PTR);
6638
6639 bp->fw_version[j++] = ' ';
6640 for (i = 0; i < 3; i++) {
6641 reg = REG_RD_IND(bp, addr + i * 4);
6642 reg = swab32(reg);
6643 memcpy(&bp->fw_version[j], &reg, 4);
6644 j += 4;
6645 }
6646 }
6623 6647
6624 reg = REG_RD_IND(bp, bp->shmem_base + BNX2_PORT_HW_CFG_MAC_UPPER); 6648 reg = REG_RD_IND(bp, bp->shmem_base + BNX2_PORT_HW_CFG_MAC_UPPER);
6625 bp->mac_addr[0] = (u8) (reg >> 8); 6649 bp->mac_addr[0] = (u8) (reg >> 8);