vxge: Check if FCS stripping is disabled by the firmware.
- Added a function to check if FCS stripping is disabled by the firmware, if it is not disabled fail driver load. - By default FCS stripping is disabled by the firmware. With this assumption driver decrements the indicated packet length by 4 bytes(FCS length). - This patch ensures that FCS stripping is disabled during driver load time. Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f0dfebafcc
commit
fa41fd1003
3 changed files with 33 additions and 0 deletions
|
@ -2156,6 +2156,28 @@ vxge_hw_mgmt_reg_read(struct __vxge_hw_device *hldev,
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vxge_hw_vpath_strip_fcs_check - Check for FCS strip.
|
||||||
|
*/
|
||||||
|
enum vxge_hw_status
|
||||||
|
vxge_hw_vpath_strip_fcs_check(struct __vxge_hw_device *hldev, u64 vpath_mask)
|
||||||
|
{
|
||||||
|
struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg;
|
||||||
|
enum vxge_hw_status status = VXGE_HW_OK;
|
||||||
|
int i = 0, j = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
|
||||||
|
if (!((vpath_mask) & vxge_mBIT(i)))
|
||||||
|
continue;
|
||||||
|
vpmgmt_reg = hldev->vpmgmt_reg[i];
|
||||||
|
for (j = 0; j < VXGE_HW_MAC_MAX_MAC_PORT_ID; j++) {
|
||||||
|
if (readq(&vpmgmt_reg->rxmac_cfg0_port_vpmgmt_clone[j])
|
||||||
|
& VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_STRIP_FCS)
|
||||||
|
return VXGE_HW_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* vxge_hw_mgmt_reg_Write - Write Titan register.
|
* vxge_hw_mgmt_reg_Write - Write Titan register.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2201,6 +2201,8 @@ __vxge_hw_vpath_func_id_get(
|
||||||
enum vxge_hw_status
|
enum vxge_hw_status
|
||||||
__vxge_hw_vpath_reset_check(struct __vxge_hw_virtualpath *vpath);
|
__vxge_hw_vpath_reset_check(struct __vxge_hw_virtualpath *vpath);
|
||||||
|
|
||||||
|
enum vxge_hw_status
|
||||||
|
vxge_hw_vpath_strip_fcs_check(struct __vxge_hw_device *hldev, u64 vpath_mask);
|
||||||
/**
|
/**
|
||||||
* vxge_debug
|
* vxge_debug
|
||||||
* @level: level of debug verbosity.
|
* @level: level of debug verbosity.
|
||||||
|
|
|
@ -4244,6 +4244,15 @@ vxge_probe(struct pci_dev *pdev, const struct pci_device_id *pre)
|
||||||
goto _exit3;
|
goto _exit3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if FCS stripping is not disabled in MAC fail driver load */
|
||||||
|
if (vxge_hw_vpath_strip_fcs_check(hldev, vpath_mask) != VXGE_HW_OK) {
|
||||||
|
vxge_debug_init(VXGE_ERR,
|
||||||
|
"%s: FCS stripping is not disabled in MAC"
|
||||||
|
" failing driver load", VXGE_DRIVER_NAME);
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto _exit4;
|
||||||
|
}
|
||||||
|
|
||||||
vxge_hw_device_debug_set(hldev, VXGE_ERR, VXGE_COMPONENT_LL);
|
vxge_hw_device_debug_set(hldev, VXGE_ERR, VXGE_COMPONENT_LL);
|
||||||
|
|
||||||
/* set private device info */
|
/* set private device info */
|
||||||
|
|
Loading…
Reference in a new issue