[MLX4] added support to new device. [mlnx: 4473]
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 13 Jul 2009 18:19:03 +0000 (18:19 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Mon, 13 Jul 2009 18:19:03 +0000 (18:19 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2290 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

hw/mlx4/kernel/bus/drv/mlx4_bus.inx
hw/mlx4/kernel/bus/inc/device.h
hw/mlx4/kernel/bus/net/cmd.c
hw/mlx4/kernel/bus/net/main.c
hw/mlx4/kernel/inc/l2w_pci.h
hw/mlx4/user/hca/mlx4.c

index c91fcc8..4de535c 100644 (file)
@@ -77,6 +77,7 @@ wdfcoinstaller$KMDFCOINSTALLERVERSION$.dll = 1,,
 %MT26428.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_673c\r
 %MT26448.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_6750\r
 %MT26458.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_675A\r
+%MT26468.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_6764\r
 %MT00401.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_0191\r
 \r
 [MLX4BUS.DeviceSection.ntamd64]\r
@@ -88,6 +89,7 @@ wdfcoinstaller$KMDFCOINSTALLERVERSION$.dll = 1,,
 %MT26428.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_673c\r
 %MT26448.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_6750\r
 %MT26458.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_675A\r
+%MT26468.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_6764\r
 %MT00401.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_0191\r
 \r
 [MLX4BUS.DeviceSection.ntia64]\r
@@ -99,6 +101,7 @@ wdfcoinstaller$KMDFCOINSTALLERVERSION$.dll = 1,,
 %MT26428.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_673c\r
 %MT26448.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_6750\r
 %MT26458.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_675A\r
+%MT26468.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_6764\r
 %MT00401.DeviceDesc%=MLX4BUS.DDInstall, PCI\VEN_15B3&DEV_0191\r
 \r
 [MLX4BUS.DDInstall.ntx86.hw]\r
@@ -259,6 +262,7 @@ MT26418.DeviceDesc="ConnectX (MT26418) - Mellanox ConnectX DDR PCI Gen2 Channel
 MT26428.DeviceDesc="ConnectX (MT26428) - Mellanox ConnectX QDR PCI Gen2 Channel Adapter"\r
 MT26448.DeviceDesc="ConnectX (MT26448) - Mellanox ConnectX Ethernet PCI Gen2 Adapter"\r
 MT26458.DeviceDesc="ConnectX (MT26458) - Mellanox ConnectX Ethernet PCI Gen2 Adapter"\r
+MT26468.DeviceDesc="ConnectX (MT26468) - Mellanox ConnectX B0 Ethernet PCI Gen2 Adapter"\r
 MT00401.DeviceDesc="ConnectX (MT00401) - Mellanox ConnectX Channel Adapter in Flash Recovery Mode"\r
 DiskId = "Mellanox Mlx4 Bus installation disk"\r
 SPSVCINST_NULL = 0x0\r
index 74ea047..98aa4d6 100644 (file)
@@ -36,6 +36,7 @@
 enum {
        MLX4_FLAG_MSI_X                 = 1 << 0,
        MLX4_FLAG_OLD_PORT_CMDS = 1 << 1,
+       MLX4_FLAG_NOT_PRIME             = 1 << 2,
        MLX4_FLAG_LIVEFISH              = 1 << 10,
        MLX4_FLAG_RESET_CLIENT  = 1 << 11,
        MLX4_FLAG_RESET_DRIVER  = 1 << 12,
index ff8f45e..3875683 100644 (file)
@@ -73,8 +73,10 @@ enum {
        CMD_STAT_BAD_PKT        = 0x30,
        /* More outstanding CQEs in CQ than new CQ size: */
        CMD_STAT_BAD_SIZE       = 0x40,
+       /* Multi Function device support required: */
+       CMD_STAT_MULTI_FUNC_REQ = 0x50,
        /* must be the last and have max value */
-       CMD_STAT_SIZE           = CMD_STAT_BAD_SIZE + 1
+       CMD_STAT_SIZE           = CMD_STAT_MULTI_FUNC_REQ + 1
 };
 
 enum {
@@ -124,6 +126,7 @@ static int mlx4_status_to_errno(u8 status) {
                trans_table[CMD_STAT_LAM_NOT_PRE]         = -EAGAIN;
                trans_table[CMD_STAT_BAD_PKT]     = -EINVAL;
                trans_table[CMD_STAT_BAD_SIZE]    = -ENOMEM;
+               trans_table[CMD_STAT_MULTI_FUNC_REQ]  = -EACCES;
                filled = 1;
        }
 
@@ -252,8 +255,8 @@ static int mlx4_cmd_poll(struct mlx4_dev *dev, u64 in_param, u64 *out_param,
 
        status = (u8)(be32_to_cpu((__force __be32)__raw_readl(hcr + HCR_STATUS_OFFSET)) >> 24);
        err = mlx4_status_to_errno(status);
-       if (status)
-               mlx4_err(dev, "Command failed: op %#hx, status %d, errno %d.\n", 
+       if (status && status != 0x50)
+               mlx4_err(dev, "Command failed: op %#hx, status %#02x, errno %d.\n", 
                        op, status, err);
 
 out:
@@ -274,7 +277,7 @@ void mlx4_cmd_event(struct mlx4_dev *dev, u16 token, u8 status, u64 out_param)
        context->result    = mlx4_status_to_errno(status);
        
        if (status)
-               mlx4_err(dev, "Command failed: token %#hx, status %d, errno %d.\n", 
+               mlx4_err(dev, "Command failed: token %#hx, status %#02x, errno %d.\n", 
                        token, status, context->result);
        context->out_param = out_param;
 
index 508336d..f8782fe 100644 (file)
@@ -93,7 +93,8 @@ mlx4_pci_table[] = {
        HCA(MELLANOX, DDR_G2,           HERMON),
        HCA(MELLANOX, QDR_G2,           HERMON),
        HCA(MELLANOX, ETH_G2,           HERMON),
-       HCA(MELLANOX, ETH_YATIR_G2,             HERMON),
+       HCA(MELLANOX, ETH_YATIR_G2,     HERMON),
+       HCA(MELLANOX, ETH_B0_G2,        HERMON),
        HCA(MELLANOX, BD,               LIVEFISH),
 };
 #define MLX4_PCI_TABLE_SIZE (sizeof(mlx4_pci_table)/sizeof(struct pci_device_id))
@@ -635,7 +636,13 @@ static int mlx4_init_hca(struct mlx4_dev *dev)
 
        err = mlx4_QUERY_FW(dev);
        if (err) {
-               mlx4_err(dev, "QUERY_FW command failed, aborting.\n");
+               if (err == -EACCES) {
+                       static int print_it = 1;
+                       if (print_it-- > 0)
+                               mlx4_warn(dev, "Function disabled, please upgrade to multi function driver.\n");
+               }
+               else
+                       mlx4_err(dev, "QUERY_FW command failed, aborting.\n");
                return err;
        }
 
@@ -988,8 +995,11 @@ run_as_livefish:
        }
 
        err = mlx4_init_hca(dev);
-       if (err)
+       if (err) {
+               if (err == -EACCES) 
+                       dev->flags |= MLX4_FLAG_NOT_PRIME;
                goto err_cmd;
+       }
 
        mlx4_enable_msi_x(dev);
 
index 0a42ee5..8acd9f5 100644 (file)
@@ -12,6 +12,7 @@
 #define DEVID_HERMON_QDR_G2            0x673c  /* 26428 */
 #define DEVID_HERMON_ETH_G2            0x6750  /* 26448 */
 #define DEVID_HERMON_ETH_YATIR_G2              0x675A  /* 26458 */
+#define DEVID_HERMON_ETH_B0_G2         0x6764  /* 26468 */
 /* livefish */
 #define DEVID_HERMON_BD                0x0191  /* 401 */
 
index 7166316..068eae9 100644 (file)
@@ -55,6 +55,7 @@ struct {
        HCA(MELLANOX, 0x6372),  /* MT25458 "Hermon" Ethernet Yatir*/\r
        HCA(MELLANOX, 0x6750),  /* MT26448 "Hermon" Ethernet PCIe gen2 */\r
        HCA(MELLANOX, 0x675A),  /* MT26458 "Hermon" Ethernet Yatir PCIe gen2*/\r
+       HCA(MELLANOX, 0x6764),  /* MT26468 "Hermon" B0 Ethernet PCIe gen2*/\r
 \r
        HCA(MELLANOX, 0x0191),  /* MT25408 "Hermon" livefish mode */ \r
 };\r