Commit ff5f58f5 authored by David S. Miller's avatar David S. Miller

Merge branch 'be2net-next'

Suresh Reddy says:

====================
be2net: patch-set

Hi Dave, Please consider applying these two patches to net-next
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 2baec2c3 aab0830a
......@@ -37,7 +37,7 @@
#include "be_hw.h"
#include "be_roce.h"
#define DRV_VER "11.1.0.0"
#define DRV_VER "11.4.0.0"
#define DRV_NAME "be2net"
#define BE_NAME "Emulex BladeEngine2"
#define BE3_NAME "Emulex BladeEngine3"
......
......@@ -49,6 +49,9 @@
#define POST_STAGE_BE_RESET 0x3 /* Host wants to reset chip */
#define POST_STAGE_ARMFW_RDY 0xc000 /* FW is done with POST */
#define POST_STAGE_RECOVERABLE_ERR 0xE000 /* Recoverable err detected */
/* FW has detected a UE and is dumping FAT log data */
#define POST_STAGE_FAT_LOG_START 0x0D00
#define POST_STAGE_ARMFW_UE 0xF000 /*FW has asserted an UE*/
/* Lancer SLIPORT registers */
#define SLIPORT_STATUS_OFFSET 0x404
......
......@@ -3241,8 +3241,9 @@ void be_detect_error(struct be_adapter *adapter)
{
u32 ue_lo = 0, ue_hi = 0, ue_lo_mask = 0, ue_hi_mask = 0;
u32 sliport_status = 0, sliport_err1 = 0, sliport_err2 = 0;
u32 i;
struct device *dev = &adapter->pdev->dev;
u16 val;
u32 i;
if (be_check_error(adapter, BE_ERROR_HW))
return;
......@@ -3280,14 +3281,24 @@ void be_detect_error(struct be_adapter *adapter)
ue_lo = (ue_lo & ~ue_lo_mask);
ue_hi = (ue_hi & ~ue_hi_mask);
/* On certain platforms BE hardware can indicate spurious UEs.
* Allow HW to stop working completely in case of a real UE.
* Hence not setting the hw_error for UE detection.
if (ue_lo || ue_hi) {
/* On certain platforms BE3 hardware can indicate
* spurious UEs. In case of a UE in the chip,
* the POST register correctly reports either a
* FAT_LOG_START state (FW is currently dumping
* FAT log data) or a ARMFW_UE state. Check for the
* above states to ascertain if the UE is valid or not.
*/
if (BE3_chip(adapter)) {
val = be_POST_stage_get(adapter);
if ((val & POST_STAGE_FAT_LOG_START)
!= POST_STAGE_FAT_LOG_START &&
(val & POST_STAGE_ARMFW_UE)
!= POST_STAGE_ARMFW_UE)
return;
}
if (ue_lo || ue_hi) {
dev_err(dev, "Error detected in the adapter");
if (skyhawk_chip(adapter))
be_set_error(adapter, BE_ERROR_UE);
for (i = 0; ue_lo; ue_lo >>= 1, i++) {
......
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