bnx2x: Take chip version from MFW
authorYuval Mintz <yuvalmin@broadcom.com>
Mon, 11 Mar 2013 05:17:43 +0000 (05:17 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 12 Mar 2013 11:54:22 +0000 (07:54 -0400)
In latest boards, the CHIP_METAL register contains an incorrect
revision value, so the correct one needs to be obtained in a
different manner.

Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h

index 14a778433522b259a32a020be979f79ab4fc39a2..82f2e963782b038521cdea865e7dd6e1714f7a95 100644 (file)
@@ -10034,8 +10034,12 @@ static void bnx2x_get_common_hwinfo(struct bnx2x *bp)
        id = ((val & 0xffff) << 16);
        val = REG_RD(bp, MISC_REG_CHIP_REV);
        id |= ((val & 0xf) << 12);
-       val = REG_RD(bp, MISC_REG_CHIP_METAL);
-       id |= ((val & 0xff) << 4);
+
+       /* Metal is read from PCI regs, but we can't access >=0x400 from
+        * the configuration space (so we need to reg_rd)
+        */
+       val = REG_RD(bp, PCICFG_OFFSET + PCI_ID_VAL3);
+       id |= (((val >> 24) & 0xf) << 4);
        val = REG_RD(bp, MISC_REG_BOND_ID);
        id |= (val & 0xf);
        bp->common.chip_id = id;
index 791eb2d530111dd7e5fa8aa5c88adadf5e91ddb9..d22bc40091ec47738a0132dd549c095645f90702 100644 (file)
 /* [R 4] This field indicates the type of the device. '0' - 2 Ports; '1' - 1
    Port. */
 #define MISC_REG_BOND_ID                                        0xa400
-/* [R 8] These bits indicate the metal revision of the chip. This value
-   starts at 0x00 for each all-layer tape-out and increments by one for each
-   tape-out. */
-#define MISC_REG_CHIP_METAL                                     0xa404
 /* [R 16] These bits indicate the part number for the chip. */
 #define MISC_REG_CHIP_NUM                                       0xa408
 /* [R 4] These bits indicate the base revision of the chip. This value
 #define PCI_PM_DATA_B                                  0x414
 #define PCI_ID_VAL1                                    0x434
 #define PCI_ID_VAL2                                    0x438
+#define PCI_ID_VAL3                                    0x43c
+
 #define GRC_CONFIG_REG_PF_INIT_VF              0x624
 #define GRC_CR_PF_INIT_VF_PF_FIRST_VF_NUM_MASK 0xf
 /* First VF_NUM for PF is encoded in this register.