|
@@ -1342,6 +1342,10 @@ static bool reg_pattern_test(struct ixgbe_adapter *adapter, u64 *data, int reg,
|
|
|
static const u32 test_pattern[] = {
|
|
static const u32 test_pattern[] = {
|
|
|
0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};
|
|
0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};
|
|
|
|
|
|
|
|
|
|
+ if (ixgbe_removed(adapter->hw.hw_addr)) {
|
|
|
|
|
+ *data = 1;
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ }
|
|
|
for (pat = 0; pat < ARRAY_SIZE(test_pattern); pat++) {
|
|
for (pat = 0; pat < ARRAY_SIZE(test_pattern); pat++) {
|
|
|
before = ixgbe_read_reg(&adapter->hw, reg);
|
|
before = ixgbe_read_reg(&adapter->hw, reg);
|
|
|
ixgbe_write_reg(&adapter->hw, reg, test_pattern[pat] & write);
|
|
ixgbe_write_reg(&adapter->hw, reg, test_pattern[pat] & write);
|
|
@@ -1364,6 +1368,10 @@ static bool reg_set_and_check(struct ixgbe_adapter *adapter, u64 *data, int reg,
|
|
|
{
|
|
{
|
|
|
u32 val, before;
|
|
u32 val, before;
|
|
|
|
|
|
|
|
|
|
+ if (ixgbe_removed(adapter->hw.hw_addr)) {
|
|
|
|
|
+ *data = 1;
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ }
|
|
|
before = ixgbe_read_reg(&adapter->hw, reg);
|
|
before = ixgbe_read_reg(&adapter->hw, reg);
|
|
|
ixgbe_write_reg(&adapter->hw, reg, write & mask);
|
|
ixgbe_write_reg(&adapter->hw, reg, write & mask);
|
|
|
val = ixgbe_read_reg(&adapter->hw, reg);
|
|
val = ixgbe_read_reg(&adapter->hw, reg);
|
|
@@ -1384,6 +1392,11 @@ static int ixgbe_reg_test(struct ixgbe_adapter *adapter, u64 *data)
|
|
|
u32 value, before, after;
|
|
u32 value, before, after;
|
|
|
u32 i, toggle;
|
|
u32 i, toggle;
|
|
|
|
|
|
|
|
|
|
+ if (ixgbe_removed(adapter->hw.hw_addr)) {
|
|
|
|
|
+ e_err(drv, "Adapter removed - register test blocked\n");
|
|
|
|
|
+ *data = 1;
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ }
|
|
|
switch (adapter->hw.mac.type) {
|
|
switch (adapter->hw.mac.type) {
|
|
|
case ixgbe_mac_82598EB:
|
|
case ixgbe_mac_82598EB:
|
|
|
toggle = 0x7FFFF3FF;
|
|
toggle = 0x7FFFF3FF;
|
|
@@ -1950,6 +1963,15 @@ static void ixgbe_diag_test(struct net_device *netdev,
|
|
|
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
struct ixgbe_adapter *adapter = netdev_priv(netdev);
|
|
|
bool if_running = netif_running(netdev);
|
|
bool if_running = netif_running(netdev);
|
|
|
|
|
|
|
|
|
|
+ if (ixgbe_removed(adapter->hw.hw_addr)) {
|
|
|
|
|
+ e_err(hw, "Adapter removed - test blocked\n");
|
|
|
|
|
+ data[0] = 1;
|
|
|
|
|
+ data[1] = 1;
|
|
|
|
|
+ data[2] = 1;
|
|
|
|
|
+ data[3] = 1;
|
|
|
|
|
+ eth_test->flags |= ETH_TEST_FL_FAILED;
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
set_bit(__IXGBE_TESTING, &adapter->state);
|
|
set_bit(__IXGBE_TESTING, &adapter->state);
|
|
|
if (eth_test->flags == ETH_TEST_FL_OFFLINE) {
|
|
if (eth_test->flags == ETH_TEST_FL_OFFLINE) {
|
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
struct ixgbe_hw *hw = &adapter->hw;
|