Commit 7b139c83 authored by Ajit Khaparde's avatar Ajit Khaparde Committed by David S. Miller

be2net: Bug fix to support newer generation of BE ASIC

Bug fix in be2net for newer generation of BladeEngine ASIC.
Signed-off-by: default avatarAjit Khaparde <ajitk@serverengines.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 744595c8
...@@ -276,8 +276,13 @@ struct be_adapter { ...@@ -276,8 +276,13 @@ struct be_adapter {
int link_speed; int link_speed;
u8 port_type; u8 port_type;
u8 transceiver; u8 transceiver;
u8 generation; /* BladeEngine ASIC generation */
}; };
/* BladeEngine Generation numbers */
#define BE_GEN2 2
#define BE_GEN3 3
extern const struct ethtool_ops be_ethtool_ops; extern const struct ethtool_ops be_ethtool_ops;
#define drvr_stats(adapter) (&adapter->stats.drvr_stats) #define drvr_stats(adapter) (&adapter->stats.drvr_stats)
......
...@@ -164,7 +164,8 @@ struct be_cmd_req_hdr { ...@@ -164,7 +164,8 @@ struct be_cmd_req_hdr {
u8 domain; /* dword 0 */ u8 domain; /* dword 0 */
u32 timeout; /* dword 1 */ u32 timeout; /* dword 1 */
u32 request_length; /* dword 2 */ u32 request_length; /* dword 2 */
u32 rsvd; /* dword 3 */ u8 version; /* dword 3 */
u8 rsvd[3]; /* dword 3 */
}; };
#define RESP_HDR_INFO_OPCODE_SHIFT 0 /* bits 0 - 7 */ #define RESP_HDR_INFO_OPCODE_SHIFT 0 /* bits 0 - 7 */
......
...@@ -2051,6 +2051,7 @@ static void be_unmap_pci_bars(struct be_adapter *adapter) ...@@ -2051,6 +2051,7 @@ static void be_unmap_pci_bars(struct be_adapter *adapter)
static int be_map_pci_bars(struct be_adapter *adapter) static int be_map_pci_bars(struct be_adapter *adapter)
{ {
u8 __iomem *addr; u8 __iomem *addr;
int pcicfg_reg;
addr = ioremap_nocache(pci_resource_start(adapter->pdev, 2), addr = ioremap_nocache(pci_resource_start(adapter->pdev, 2),
pci_resource_len(adapter->pdev, 2)); pci_resource_len(adapter->pdev, 2));
...@@ -2064,8 +2065,13 @@ static int be_map_pci_bars(struct be_adapter *adapter) ...@@ -2064,8 +2065,13 @@ static int be_map_pci_bars(struct be_adapter *adapter)
goto pci_map_err; goto pci_map_err;
adapter->db = addr; adapter->db = addr;
addr = ioremap_nocache(pci_resource_start(adapter->pdev, 1), if (adapter->generation == BE_GEN2)
pci_resource_len(adapter->pdev, 1)); pcicfg_reg = 1;
else
pcicfg_reg = 0;
addr = ioremap_nocache(pci_resource_start(adapter->pdev, pcicfg_reg),
pci_resource_len(adapter->pdev, pcicfg_reg));
if (addr == NULL) if (addr == NULL)
goto pci_map_err; goto pci_map_err;
adapter->pcicfg = addr; adapter->pcicfg = addr;
...@@ -2162,6 +2168,7 @@ static int be_stats_init(struct be_adapter *adapter) ...@@ -2162,6 +2168,7 @@ static int be_stats_init(struct be_adapter *adapter)
cmd->va = pci_alloc_consistent(adapter->pdev, cmd->size, &cmd->dma); cmd->va = pci_alloc_consistent(adapter->pdev, cmd->size, &cmd->dma);
if (cmd->va == NULL) if (cmd->va == NULL)
return -1; return -1;
memset(cmd->va, cmd->size, 0);
return 0; return 0;
} }
...@@ -2240,6 +2247,20 @@ static int __devinit be_probe(struct pci_dev *pdev, ...@@ -2240,6 +2247,20 @@ static int __devinit be_probe(struct pci_dev *pdev,
goto rel_reg; goto rel_reg;
} }
adapter = netdev_priv(netdev); adapter = netdev_priv(netdev);
switch (pdev->device) {
case BE_DEVICE_ID1:
case OC_DEVICE_ID1:
adapter->generation = BE_GEN2;
break;
case BE_DEVICE_ID2:
case OC_DEVICE_ID2:
adapter->generation = BE_GEN3;
break;
default:
adapter->generation = 0;
}
adapter->pdev = pdev; adapter->pdev = pdev;
pci_set_drvdata(pdev, adapter); pci_set_drvdata(pdev, adapter);
adapter->netdev = netdev; adapter->netdev = netdev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment