be2net: Bug fix to support newer generation of BE ASIC
Bug fix in be2net for newer generation of BladeEngine ASIC. Signed-off-by: Ajit Khaparde <ajitk@serverengines.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
744595c847
commit
7b139c83c5
3 changed files with 30 additions and 3 deletions
|
@ -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 {
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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,
|
||||||
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;
|
||||||
|
|
Reference in a new issue