ixgbe: Make return values more direct
[cascardo/linux.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_common.c
index 4e5385a..b5f484b 100644 (file)
@@ -122,8 +122,7 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
         */
        if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) {
                hw_dbg(hw, "ixgbe_fc_rx_pause not valid in strict IEEE mode\n");
-               ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
-               goto out;
+               return IXGBE_ERR_INVALID_LINK_SETTINGS;
        }
 
        /*
@@ -143,7 +142,7 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
                /* some MAC's need RMW protection on AUTOC */
                ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &reg_bp);
                if (ret_val)
-                       goto out;
+                       return ret_val;
 
                /* only backplane uses autoc so fall though */
        case ixgbe_media_type_fiber:
@@ -214,9 +213,7 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
                break;
        default:
                hw_dbg(hw, "Flow control param set incorrectly\n");
-               ret_val = IXGBE_ERR_CONFIG;
-               goto out;
-               break;
+               return IXGBE_ERR_CONFIG;
        }
 
        if (hw->mac.type != ixgbe_mac_X540) {
@@ -247,7 +244,7 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
                 */
                ret_val = hw->mac.ops.prot_autoc_write(hw, reg_bp, locked);
                if (ret_val)
-                       goto out;
+                       return ret_val;
 
        } else if ((hw->phy.media_type == ixgbe_media_type_copper) &&
                   ixgbe_device_supports_autoneg_fc(hw)) {
@@ -256,7 +253,6 @@ static s32 ixgbe_setup_fc(struct ixgbe_hw *hw)
        }
 
        hw_dbg(hw, "Set up FC; IXGBE_AUTOC = 0x%08X\n", reg);
-out:
        return ret_val;
 }
 
@@ -295,12 +291,11 @@ s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw)
        /* Setup flow control */
        ret_val = ixgbe_setup_fc(hw);
        if (!ret_val)
-               goto out;
+               return 0;
 
        /* Clear adapter stopped flag */
        hw->adapter_stopped = false;
 
-out:
        return ret_val;
 }
 
@@ -837,20 +832,16 @@ s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw)
 s32 ixgbe_write_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
                                               u16 words, u16 *data)
 {
-       s32 status = 0;
+       s32 status;
        u16 i, count;
 
        hw->eeprom.ops.init_params(hw);
 
-       if (words == 0) {
-               status = IXGBE_ERR_INVALID_ARGUMENT;
-               goto out;
-       }
+       if (words == 0)
+               return IXGBE_ERR_INVALID_ARGUMENT;
 
-       if (offset + words > hw->eeprom.word_size) {
-               status = IXGBE_ERR_EEPROM;
-               goto out;
-       }
+       if (offset + words > hw->eeprom.word_size)
+               return IXGBE_ERR_EEPROM;
 
        /*
         * The EEPROM page size cannot be queried from the chip. We do lazy
@@ -875,7 +866,6 @@ s32 ixgbe_write_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
                        break;
        }
 
-out:
        return status;
 }
 
@@ -900,64 +890,61 @@ static s32 ixgbe_write_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
 
        /* Prepare the EEPROM for writing  */
        status = ixgbe_acquire_eeprom(hw);
+       if (status)
+               return status;
 
-       if (status == 0) {
-               if (ixgbe_ready_eeprom(hw) != 0) {
-                       ixgbe_release_eeprom(hw);
-                       status = IXGBE_ERR_EEPROM;
-               }
+       if (ixgbe_ready_eeprom(hw) != 0) {
+               ixgbe_release_eeprom(hw);
+               return IXGBE_ERR_EEPROM;
        }
 
-       if (status == 0) {
-               for (i = 0; i < words; i++) {
-                       ixgbe_standby_eeprom(hw);
+       for (i = 0; i < words; i++) {
+               ixgbe_standby_eeprom(hw);
+
+               /* Send the WRITE ENABLE command (8 bit opcode) */
+               ixgbe_shift_out_eeprom_bits(hw,
+                                           IXGBE_EEPROM_WREN_OPCODE_SPI,
+                                           IXGBE_EEPROM_OPCODE_BITS);
 
-                       /*  Send the WRITE ENABLE command (8 bit opcode )  */
-                       ixgbe_shift_out_eeprom_bits(hw,
-                                                 IXGBE_EEPROM_WREN_OPCODE_SPI,
-                                                 IXGBE_EEPROM_OPCODE_BITS);
+               ixgbe_standby_eeprom(hw);
 
-                       ixgbe_standby_eeprom(hw);
+               /* Some SPI eeproms use the 8th address bit embedded
+                * in the opcode
+                */
+               if ((hw->eeprom.address_bits == 8) &&
+                   ((offset + i) >= 128))
+                       write_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
 
-                       /*
-                        * Some SPI eeproms use the 8th address bit embedded
-                        * in the opcode
-                        */
-                       if ((hw->eeprom.address_bits == 8) &&
-                           ((offset + i) >= 128))
-                               write_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
-
-                       /* Send the Write command (8-bit opcode + addr) */
-                       ixgbe_shift_out_eeprom_bits(hw, write_opcode,
-                                                   IXGBE_EEPROM_OPCODE_BITS);
-                       ixgbe_shift_out_eeprom_bits(hw, (u16)((offset + i) * 2),
-                                                   hw->eeprom.address_bits);
-
-                       page_size = hw->eeprom.word_page_size;
-
-                       /* Send the data in burst via SPI*/
-                       do {
-                               word = data[i];
-                               word = (word >> 8) | (word << 8);
-                               ixgbe_shift_out_eeprom_bits(hw, word, 16);
-
-                               if (page_size == 0)
-                                       break;
-
-                               /* do not wrap around page */
-                               if (((offset + i) & (page_size - 1)) ==
-                                   (page_size - 1))
-                                       break;
-                       } while (++i < words);
-
-                       ixgbe_standby_eeprom(hw);
-                       usleep_range(10000, 20000);
-               }
-               /* Done with writing - release the EEPROM */
-               ixgbe_release_eeprom(hw);
+               /* Send the Write command (8-bit opcode + addr) */
+               ixgbe_shift_out_eeprom_bits(hw, write_opcode,
+                                           IXGBE_EEPROM_OPCODE_BITS);
+               ixgbe_shift_out_eeprom_bits(hw, (u16)((offset + i) * 2),
+                                           hw->eeprom.address_bits);
+
+               page_size = hw->eeprom.word_page_size;
+
+               /* Send the data in burst via SPI */
+               do {
+                       word = data[i];
+                       word = (word >> 8) | (word << 8);
+                       ixgbe_shift_out_eeprom_bits(hw, word, 16);
+
+                       if (page_size == 0)
+                               break;
+
+                       /* do not wrap around page */
+                       if (((offset + i) & (page_size - 1)) ==
+                           (page_size - 1))
+                               break;
+               } while (++i < words);
+
+               ixgbe_standby_eeprom(hw);
+               usleep_range(10000, 20000);
        }
+       /* Done with writing - release the EEPROM */
+       ixgbe_release_eeprom(hw);
 
-       return status;
+       return 0;
 }
 
 /**
@@ -971,19 +958,12 @@ static s32 ixgbe_write_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
  **/
 s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data)
 {
-       s32 status;
-
        hw->eeprom.ops.init_params(hw);
 
-       if (offset >= hw->eeprom.word_size) {
-               status = IXGBE_ERR_EEPROM;
-               goto out;
-       }
-
-       status = ixgbe_write_eeprom_buffer_bit_bang(hw, offset, 1, &data);
+       if (offset >= hw->eeprom.word_size)
+               return IXGBE_ERR_EEPROM;
 
-out:
-       return status;
+       return ixgbe_write_eeprom_buffer_bit_bang(hw, offset, 1, &data);
 }
 
 /**
@@ -998,20 +978,16 @@ out:
 s32 ixgbe_read_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
                                              u16 words, u16 *data)
 {
-       s32 status = 0;
+       s32 status;
        u16 i, count;
 
        hw->eeprom.ops.init_params(hw);
 
-       if (words == 0) {
-               status = IXGBE_ERR_INVALID_ARGUMENT;
-               goto out;
-       }
+       if (words == 0)
+               return IXGBE_ERR_INVALID_ARGUMENT;
 
-       if (offset + words > hw->eeprom.word_size) {
-               status = IXGBE_ERR_EEPROM;
-               goto out;
-       }
+       if (offset + words > hw->eeprom.word_size)
+               return IXGBE_ERR_EEPROM;
 
        /*
         * We cannot hold synchronization semaphores for too long
@@ -1025,12 +1001,11 @@ s32 ixgbe_read_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
                status = ixgbe_read_eeprom_buffer_bit_bang(hw, offset + i,
                                                           count, &data[i]);
 
-               if (status != 0)
-                       break;
+               if (status)
+                       return status;
        }
 
-out:
-       return status;
+       return 0;
 }
 
 /**
@@ -1052,41 +1027,38 @@ static s32 ixgbe_read_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
 
        /* Prepare the EEPROM for reading  */
        status = ixgbe_acquire_eeprom(hw);
+       if (status)
+               return status;
 
-       if (status == 0) {
-               if (ixgbe_ready_eeprom(hw) != 0) {
-                       ixgbe_release_eeprom(hw);
-                       status = IXGBE_ERR_EEPROM;
-               }
+       if (ixgbe_ready_eeprom(hw) != 0) {
+               ixgbe_release_eeprom(hw);
+               return IXGBE_ERR_EEPROM;
        }
 
-       if (status == 0) {
-               for (i = 0; i < words; i++) {
-                       ixgbe_standby_eeprom(hw);
-                       /*
-                        * Some SPI eeproms use the 8th address bit embedded
-                        * in the opcode
-                        */
-                       if ((hw->eeprom.address_bits == 8) &&
-                           ((offset + i) >= 128))
-                               read_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
-
-                       /* Send the READ command (opcode + addr) */
-                       ixgbe_shift_out_eeprom_bits(hw, read_opcode,
-                                                   IXGBE_EEPROM_OPCODE_BITS);
-                       ixgbe_shift_out_eeprom_bits(hw, (u16)((offset + i) * 2),
-                                                   hw->eeprom.address_bits);
-
-                       /* Read the data. */
-                       word_in = ixgbe_shift_in_eeprom_bits(hw, 16);
-                       data[i] = (word_in >> 8) | (word_in << 8);
-               }
+       for (i = 0; i < words; i++) {
+               ixgbe_standby_eeprom(hw);
+               /* Some SPI eeproms use the 8th address bit embedded
+                * in the opcode
+                */
+               if ((hw->eeprom.address_bits == 8) &&
+                   ((offset + i) >= 128))
+                       read_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI;
 
-               /* End this read operation */
-               ixgbe_release_eeprom(hw);
+               /* Send the READ command (opcode + addr) */
+               ixgbe_shift_out_eeprom_bits(hw, read_opcode,
+                                           IXGBE_EEPROM_OPCODE_BITS);
+               ixgbe_shift_out_eeprom_bits(hw, (u16)((offset + i) * 2),
+                                           hw->eeprom.address_bits);
+
+               /* Read the data. */
+               word_in = ixgbe_shift_in_eeprom_bits(hw, 16);
+               data[i] = (word_in >> 8) | (word_in << 8);
        }
 
-       return status;
+       /* End this read operation */
+       ixgbe_release_eeprom(hw);
+
+       return 0;
 }
 
 /**
@@ -1100,19 +1072,12 @@ static s32 ixgbe_read_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset,
 s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
                                       u16 *data)
 {
-       s32 status;
-
        hw->eeprom.ops.init_params(hw);
 
-       if (offset >= hw->eeprom.word_size) {
-               status = IXGBE_ERR_EEPROM;
-               goto out;
-       }
-
-       status = ixgbe_read_eeprom_buffer_bit_bang(hw, offset, 1, data);
+       if (offset >= hw->eeprom.word_size)
+               return IXGBE_ERR_EEPROM;
 
-out:
-       return status;
+       return ixgbe_read_eeprom_buffer_bit_bang(hw, offset, 1, data);
 }
 
 /**
@@ -1128,20 +1093,16 @@ s32 ixgbe_read_eerd_buffer_generic(struct ixgbe_hw *hw, u16 offset,
                                   u16 words, u16 *data)
 {
        u32 eerd;
-       s32 status = 0;
+       s32 status;
        u32 i;
 
        hw->eeprom.ops.init_params(hw);
 
-       if (words == 0) {
-               status = IXGBE_ERR_INVALID_ARGUMENT;
-               goto out;
-       }
+       if (words == 0)
+               return IXGBE_ERR_INVALID_ARGUMENT;
 
-       if (offset >= hw->eeprom.word_size) {
-               status = IXGBE_ERR_EEPROM;
-               goto out;
-       }
+       if (offset >= hw->eeprom.word_size)
+               return IXGBE_ERR_EEPROM;
 
        for (i = 0; i < words; i++) {
                eerd = ((offset + i) << IXGBE_EEPROM_RW_ADDR_SHIFT) |
@@ -1155,11 +1116,11 @@ s32 ixgbe_read_eerd_buffer_generic(struct ixgbe_hw *hw, u16 offset,
                                   IXGBE_EEPROM_RW_REG_DATA);
                } else {
                        hw_dbg(hw, "Eeprom read timed out\n");
-                       goto out;
+                       return status;
                }
        }
-out:
-       return status;
+
+       return 0;
 }
 
 /**
@@ -1175,7 +1136,7 @@ static s32 ixgbe_detect_eeprom_page_size_generic(struct ixgbe_hw *hw,
                                                 u16 offset)
 {
        u16 data[IXGBE_EEPROM_PAGE_SIZE_MAX];
-       s32 status = 0;
+       s32 status;
        u16 i;
 
        for (i = 0; i < IXGBE_EEPROM_PAGE_SIZE_MAX; i++)
@@ -1185,12 +1146,12 @@ static s32 ixgbe_detect_eeprom_page_size_generic(struct ixgbe_hw *hw,
        status = ixgbe_write_eeprom_buffer_bit_bang(hw, offset,
                                             IXGBE_EEPROM_PAGE_SIZE_MAX, data);
        hw->eeprom.word_page_size = 0;
-       if (status != 0)
-               goto out;
+       if (status)
+               return status;
 
        status = ixgbe_read_eeprom_buffer_bit_bang(hw, offset, 1, data);
-       if (status != 0)
-               goto out;
+       if (status)
+               return status;
 
        /*
         * When writing in burst more than the actual page size
@@ -1200,8 +1161,7 @@ static s32 ixgbe_detect_eeprom_page_size_generic(struct ixgbe_hw *hw,
 
        hw_dbg(hw, "Detected EEPROM page size = %d words.\n",
               hw->eeprom.word_page_size);
-out:
-       return status;
+       return 0;
 }
 
 /**
@@ -1230,20 +1190,16 @@ s32 ixgbe_write_eewr_buffer_generic(struct ixgbe_hw *hw, u16 offset,
                                    u16 words, u16 *data)
 {
        u32 eewr;
-       s32 status = 0;
+       s32 status;
        u16 i;
 
        hw->eeprom.ops.init_params(hw);
 
-       if (words == 0) {
-               status = IXGBE_ERR_INVALID_ARGUMENT;
-               goto out;
-       }
+       if (words == 0)
+               return IXGBE_ERR_INVALID_ARGUMENT;
 
-       if (offset >= hw->eeprom.word_size) {
-               status = IXGBE_ERR_EEPROM;
-               goto out;
-       }
+       if (offset >= hw->eeprom.word_size)
+               return IXGBE_ERR_EEPROM;
 
        for (i = 0; i < words; i++) {
                eewr = ((offset + i) << IXGBE_EEPROM_RW_ADDR_SHIFT) |
@@ -1251,22 +1207,21 @@ s32 ixgbe_write_eewr_buffer_generic(struct ixgbe_hw *hw, u16 offset,
                       IXGBE_EEPROM_RW_REG_START;
 
                status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_WRITE);
-               if (status != 0) {
+               if (status) {
                        hw_dbg(hw, "Eeprom write EEWR timed out\n");
-                       goto out;
+                       return status;
                }
 
                IXGBE_WRITE_REG(hw, IXGBE_EEWR, eewr);
 
                status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_WRITE);
-               if (status != 0) {
+               if (status) {
                        hw_dbg(hw, "Eeprom write EEWR timed out\n");
-                       goto out;
+                       return status;
                }
        }
 
-out:
-       return status;
+       return 0;
 }
 
 /**
@@ -1294,7 +1249,6 @@ static s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
 {
        u32 i;
        u32 reg;
-       s32 status = IXGBE_ERR_EEPROM;
 
        for (i = 0; i < IXGBE_EERD_EEWR_ATTEMPTS; i++) {
                if (ee_reg == IXGBE_NVM_POLL_READ)
@@ -1303,12 +1257,11 @@ static s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
                        reg = IXGBE_READ_REG(hw, IXGBE_EEWR);
 
                if (reg & IXGBE_EEPROM_RW_REG_DONE) {
-                       status = 0;
-                       break;
+                       return 0;
                }
                udelay(5);
        }
-       return status;
+       return IXGBE_ERR_EEPROM;
 }
 
 /**
@@ -1320,47 +1273,42 @@ static s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
  **/
 static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw)
 {
-       s32 status = 0;
        u32 eec;
        u32 i;
 
        if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) != 0)
-               status = IXGBE_ERR_SWFW_SYNC;
-
-       if (status == 0) {
-               eec = IXGBE_READ_REG(hw, IXGBE_EEC);
+               return IXGBE_ERR_SWFW_SYNC;
 
-               /* Request EEPROM Access */
-               eec |= IXGBE_EEC_REQ;
-               IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
+       eec = IXGBE_READ_REG(hw, IXGBE_EEC);
 
-               for (i = 0; i < IXGBE_EEPROM_GRANT_ATTEMPTS; i++) {
-                       eec = IXGBE_READ_REG(hw, IXGBE_EEC);
-                       if (eec & IXGBE_EEC_GNT)
-                               break;
-                       udelay(5);
-               }
+       /* Request EEPROM Access */
+       eec |= IXGBE_EEC_REQ;
+       IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
 
-               /* Release if grant not acquired */
-               if (!(eec & IXGBE_EEC_GNT)) {
-                       eec &= ~IXGBE_EEC_REQ;
-                       IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
-                       hw_dbg(hw, "Could not acquire EEPROM grant\n");
+       for (i = 0; i < IXGBE_EEPROM_GRANT_ATTEMPTS; i++) {
+               eec = IXGBE_READ_REG(hw, IXGBE_EEC);
+               if (eec & IXGBE_EEC_GNT)
+                       break;
+               udelay(5);
+       }
 
-                       hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
-                       status = IXGBE_ERR_EEPROM;
-               }
+       /* Release if grant not acquired */
+       if (!(eec & IXGBE_EEC_GNT)) {
+               eec &= ~IXGBE_EEC_REQ;
+               IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
+               hw_dbg(hw, "Could not acquire EEPROM grant\n");
 
-               /* Setup EEPROM for Read/Write */
-               if (status == 0) {
-                       /* Clear CS and SK */
-                       eec &= ~(IXGBE_EEC_CS | IXGBE_EEC_SK);
-                       IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
-                       IXGBE_WRITE_FLUSH(hw);
-                       udelay(1);
-               }
+               hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
+               return IXGBE_ERR_EEPROM;
        }
-       return status;
+
+       /* Setup EEPROM for Read/Write */
+       /* Clear CS and SK */
+       eec &= ~(IXGBE_EEC_CS | IXGBE_EEC_SK);
+       IXGBE_WRITE_REG(hw, IXGBE_EEC, eec);
+       IXGBE_WRITE_FLUSH(hw);
+       udelay(1);
+       return 0;
 }
 
 /**
@@ -1371,7 +1319,6 @@ static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw)
  **/
 static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw)
 {
-       s32 status = IXGBE_ERR_EEPROM;
        u32 timeout = 2000;
        u32 i;
        u32 swsm;
@@ -1383,68 +1330,60 @@ static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw)
                 * set and we have the semaphore
                 */
                swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
-               if (!(swsm & IXGBE_SWSM_SMBI)) {
-                       status = 0;
+               if (!(swsm & IXGBE_SWSM_SMBI))
                        break;
-               }
-               udelay(50);
+               usleep_range(50, 100);
        }
 
        if (i == timeout) {
                hw_dbg(hw, "Driver can't access the Eeprom - SMBI Semaphore not granted.\n");
-               /*
-                * this release is particularly important because our attempts
+               /* this release is particularly important because our attempts
                 * above to get the semaphore may have succeeded, and if there
                 * was a timeout, we should unconditionally clear the semaphore
                 * bits to free the driver to make progress
                 */
                ixgbe_release_eeprom_semaphore(hw);
 
-               udelay(50);
-               /*
-                * one last try
+               usleep_range(50, 100);
+               /* one last try
                 * If the SMBI bit is 0 when we read it, then the bit will be
                 * set and we have the semaphore
                 */
                swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
-               if (!(swsm & IXGBE_SWSM_SMBI))
-                       status = 0;
+               if (swsm & IXGBE_SWSM_SMBI) {
+                       hw_dbg(hw, "Software semaphore SMBI between device drivers not granted.\n");
+                       return IXGBE_ERR_EEPROM;
+               }
        }
 
        /* Now get the semaphore between SW/FW through the SWESMBI bit */
-       if (status == 0) {
-               for (i = 0; i < timeout; i++) {
-                       swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
+       for (i = 0; i < timeout; i++) {
+               swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
 
-                       /* Set the SW EEPROM semaphore bit to request access */
-                       swsm |= IXGBE_SWSM_SWESMBI;
-                       IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm);
+               /* Set the SW EEPROM semaphore bit to request access */
+               swsm |= IXGBE_SWSM_SWESMBI;
+               IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm);
 
-                       /*
-                        * If we set the bit successfully then we got the
-                        * semaphore.
-                        */
-                       swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
-                       if (swsm & IXGBE_SWSM_SWESMBI)
-                               break;
+               /* If we set the bit successfully then we got the
+                * semaphore.
+                */
+               swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
+               if (swsm & IXGBE_SWSM_SWESMBI)
+                       break;
 
-                       udelay(50);
-               }
+               usleep_range(50, 100);
+       }
 
-               /*
-                * Release semaphores and return error if SW EEPROM semaphore
-                * was not granted because we don't have access to the EEPROM
-                */
-               if (i >= timeout) {
-                       hw_dbg(hw, "SWESMBI Software EEPROM semaphore not granted.\n");
-                       ixgbe_release_eeprom_semaphore(hw);
-                       status = IXGBE_ERR_EEPROM;
-               }
-       } else {
-               hw_dbg(hw, "Software semaphore SMBI between device drivers not granted.\n");
+       /* Release semaphores and return error if SW EEPROM semaphore
+        * was not granted because we don't have access to the EEPROM
+        */
+       if (i >= timeout) {
+               hw_dbg(hw, "SWESMBI Software EEPROM semaphore not granted.\n");
+               ixgbe_release_eeprom_semaphore(hw);
+               return IXGBE_ERR_EEPROM;
        }
 
-       return status;
+       return 0;
 }
 
 /**
@@ -1471,7 +1410,6 @@ static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw)
  **/
 static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw)
 {
-       s32 status = 0;
        u16 i;
        u8 spi_stat_reg;
 
@@ -1498,10 +1436,10 @@ static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw)
         */
        if (i >= IXGBE_EEPROM_MAX_RETRY_SPI) {
                hw_dbg(hw, "SPI EEPROM Status error\n");
-               status = IXGBE_ERR_EEPROM;
+               return IXGBE_ERR_EEPROM;
        }
 
-       return status;
+       return 0;
 }
 
 /**
@@ -2100,17 +2038,14 @@ s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw)
  **/
 s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw)
 {
-       s32 ret_val = 0;
        u32 mflcn_reg, fccfg_reg;
        u32 reg;
        u32 fcrtl, fcrth;
        int i;
 
        /* Validate the water mark configuration. */
-       if (!hw->fc.pause_time) {
-               ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
-               goto out;
-       }
+       if (!hw->fc.pause_time)
+               return IXGBE_ERR_INVALID_LINK_SETTINGS;
 
        /* Low water mark of zero causes XOFF floods */
        for (i = 0; i < MAX_TRAFFIC_CLASS; i++) {
@@ -2119,8 +2054,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw)
                        if (!hw->fc.low_water[i] ||
                            hw->fc.low_water[i] >= hw->fc.high_water[i]) {
                                hw_dbg(hw, "Invalid water mark configuration\n");
-                               ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS;
-                               goto out;
+                               return IXGBE_ERR_INVALID_LINK_SETTINGS;
                        }
                }
        }
@@ -2177,9 +2111,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw)
                break;
        default:
                hw_dbg(hw, "Flow control param set incorrectly\n");
-               ret_val = IXGBE_ERR_CONFIG;
-               goto out;
-               break;
+               return IXGBE_ERR_CONFIG;
        }
 
        /* Set 802.3x based flow control settings. */
@@ -2215,8 +2147,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw)
 
        IXGBE_WRITE_REG(hw, IXGBE_FCRTV, hw->fc.pause_time / 2);
 
-out:
-       return ret_val;
+       return 0;
 }
 
 /**
@@ -2277,7 +2208,7 @@ static s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
 static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw)
 {
        u32 pcs_anadv_reg, pcs_lpab_reg, linkstat;
-       s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
+       s32 ret_val;
 
        /*
         * On multispeed fiber at 1g, bail out if
@@ -2288,7 +2219,7 @@ static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw)
        linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA);
        if ((!!(linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) ||
            (!!(linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1))
-               goto out;
+               return IXGBE_ERR_FC_NOT_NEGOTIATED;
 
        pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
        pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP);
@@ -2299,7 +2230,6 @@ static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw)
                               IXGBE_PCS1GANA_SYM_PAUSE,
                               IXGBE_PCS1GANA_ASM_PAUSE);
 
-out:
        return ret_val;
 }
 
@@ -2312,7 +2242,7 @@ out:
 static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw)
 {
        u32 links2, anlp1_reg, autoc_reg, links;
-       s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
+       s32 ret_val;
 
        /*
         * On backplane, bail out if
@@ -2321,12 +2251,12 @@ static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw)
         */
        links = IXGBE_READ_REG(hw, IXGBE_LINKS);
        if ((links & IXGBE_LINKS_KX_AN_COMP) == 0)
-               goto out;
+               return IXGBE_ERR_FC_NOT_NEGOTIATED;
 
        if (hw->mac.type == ixgbe_mac_82599EB) {
                links2 = IXGBE_READ_REG(hw, IXGBE_LINKS2);
                if ((links2 & IXGBE_LINKS2_AN_SUPPORTED) == 0)
-                       goto out;
+                       return IXGBE_ERR_FC_NOT_NEGOTIATED;
        }
        /*
         * Read the 10g AN autoc and LP ability registers and resolve
@@ -2339,7 +2269,6 @@ static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw)
                anlp1_reg, IXGBE_AUTOC_SYM_PAUSE, IXGBE_AUTOC_ASM_PAUSE,
                IXGBE_ANLP1_SYM_PAUSE, IXGBE_ANLP1_ASM_PAUSE);
 
-out:
        return ret_val;
 }
 
@@ -2485,7 +2414,6 @@ static u32 ixgbe_pcie_timeout_poll(struct ixgbe_hw *hw)
  **/
 static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
 {
-       s32 status = 0;
        u32 i, poll;
        u16 value;
 
@@ -2495,13 +2423,13 @@ static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
        /* Exit if master requests are blocked */
        if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO) ||
            ixgbe_removed(hw->hw_addr))
-               goto out;
+               return 0;
 
        /* Poll for master request bit to clear */
        for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) {
                udelay(100);
                if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO))
-                       goto out;
+                       return 0;
        }
 
        /*
@@ -2524,16 +2452,13 @@ static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
                udelay(100);
                value = ixgbe_read_pci_cfg_word(hw, IXGBE_PCI_DEVICE_STATUS);
                if (ixgbe_removed(hw->hw_addr))
-                       goto out;
+                       return 0;
                if (!(value & IXGBE_PCI_DEVICE_STATUS_TRANSACTION_PENDING))
-                       goto out;
+                       return 0;
        }
 
        hw_dbg(hw, "PCIe transaction pending bit also did not clear.\n");
-       status = IXGBE_ERR_MASTER_REQUESTS_PENDING;
-
-out:
-       return status;
+       return IXGBE_ERR_MASTER_REQUESTS_PENDING;
 }
 
 /**
@@ -2708,8 +2633,8 @@ s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
        bool link_up = false;
        u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
        u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
-       s32 ret_val = 0;
        bool locked = false;
+       s32 ret_val;
 
        /*
         * Link must be up to auto-blink the LEDs;
@@ -2720,14 +2645,14 @@ s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
        if (!link_up) {
                ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &autoc_reg);
                if (ret_val)
-                       goto out;
+                       return ret_val;
 
                autoc_reg |= IXGBE_AUTOC_AN_RESTART;
                autoc_reg |= IXGBE_AUTOC_FLU;
 
                ret_val = hw->mac.ops.prot_autoc_write(hw, autoc_reg, locked);
                if (ret_val)
-                       goto out;
+                       return ret_val;
 
                IXGBE_WRITE_FLUSH(hw);
 
@@ -2739,8 +2664,7 @@ s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
        IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
        IXGBE_WRITE_FLUSH(hw);
 
-out:
-       return ret_val;
+       return 0;
 }
 
 /**
@@ -2752,19 +2676,19 @@ s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
 {
        u32 autoc_reg = 0;
        u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
-       s32 ret_val = 0;
        bool locked = false;
+       s32 ret_val;
 
        ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &autoc_reg);
        if (ret_val)
-               goto out;
+               return ret_val;
 
        autoc_reg &= ~IXGBE_AUTOC_FLU;
        autoc_reg |= IXGBE_AUTOC_AN_RESTART;
 
        ret_val = hw->mac.ops.prot_autoc_write(hw, autoc_reg, locked);
        if (ret_val)
-               goto out;
+               return ret_val;
 
        led_reg &= ~IXGBE_LED_MODE_MASK(index);
        led_reg &= ~IXGBE_LED_BLINK(index);
@@ -2772,8 +2696,7 @@ s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
        IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg);
        IXGBE_WRITE_FLUSH(hw);
 
-out:
-       return ret_val;
+       return 0;
 }
 
 /**
@@ -2865,7 +2788,7 @@ san_mac_addr_clr:
  **/
 u16 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw)
 {
-       u16 msix_count = 1;
+       u16 msix_count;
        u16 max_msix_count;
        u16 pcie_offset;
 
@@ -2880,7 +2803,7 @@ u16 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw)
                max_msix_count = IXGBE_MAX_MSIX_VECTORS_82599;
                break;
        default:
-               return msix_count;
+               return 1;
        }
 
        msix_count = ixgbe_read_pci_cfg_word(hw, pcie_offset);
@@ -2918,10 +2841,10 @@ s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
        mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
 
        if (ixgbe_removed(hw->hw_addr))
-               goto done;
+               return 0;
 
        if (!mpsar_lo && !mpsar_hi)
-               goto done;
+               return 0;
 
        if (vmdq == IXGBE_CLEAR_VMDQ_ALL) {
                if (mpsar_lo) {
@@ -2943,7 +2866,6 @@ s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
        /* was that the last pool using this rar? */
        if (mpsar_lo == 0 && mpsar_hi == 0 && rar != 0)
                hw->mac.ops.clear_rar(hw, rar);
-done:
        return 0;
 }
 
@@ -3312,14 +3234,14 @@ s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
 
        if ((alt_san_mac_blk_offset == 0) ||
            (alt_san_mac_blk_offset == 0xFFFF))
-               goto wwn_prefix_out;
+               return 0;
 
        /* check capability in alternative san mac address block */
        offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET;
        if (hw->eeprom.ops.read(hw, offset, &caps))
                goto wwn_prefix_err;
        if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN))
-               goto wwn_prefix_out;
+               return 0;
 
        /* get the corresponding prefix for WWNN/WWPN */
        offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET;
@@ -3330,7 +3252,6 @@ s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
        if (hw->eeprom.ops.read(hw, offset, wwpn_prefix))
                goto wwn_prefix_err;
 
-wwn_prefix_out:
        return 0;
 
 wwn_prefix_err:
@@ -3524,21 +3445,17 @@ static s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
        u32 hdr_size = sizeof(struct ixgbe_hic_hdr);
        u8 buf_len, dword_len;
 
-       s32 ret_val = 0;
-
        if (length == 0 || length & 0x3 ||
            length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
                hw_dbg(hw, "Buffer length failure.\n");
-               ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
-               goto out;
+               return IXGBE_ERR_HOST_INTERFACE_COMMAND;
        }
 
        /* Check that the host interface is enabled. */
        hicr = IXGBE_READ_REG(hw, IXGBE_HICR);
        if ((hicr & IXGBE_HICR_EN) == 0) {
                hw_dbg(hw, "IXGBE_HOST_EN bit disabled.\n");
-               ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
-               goto out;
+               return IXGBE_ERR_HOST_INTERFACE_COMMAND;
        }
 
        /* Calculate length in DWORDs */
@@ -3566,8 +3483,7 @@ static s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
        if (i == IXGBE_HI_COMMAND_TIMEOUT ||
            (!(IXGBE_READ_REG(hw, IXGBE_HICR) & IXGBE_HICR_SV))) {
                hw_dbg(hw, "Command has failed with no status valid.\n");
-               ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
-               goto out;
+               return IXGBE_ERR_HOST_INTERFACE_COMMAND;
        }
 
        /* Calculate length in DWORDs */
@@ -3582,12 +3498,11 @@ static s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
        /* If there is any thing in data position pull it in */
        buf_len = ((struct ixgbe_hic_hdr *)buffer)->buf_len;
        if (buf_len == 0)
-               goto out;
+               return 0;
 
        if (length < (buf_len + hdr_size)) {
                hw_dbg(hw, "Buffer not large enough for reply message.\n");
-               ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND;
-               goto out;
+               return IXGBE_ERR_HOST_INTERFACE_COMMAND;
        }
 
        /* Calculate length in DWORDs, add 3 for odd lengths */
@@ -3599,8 +3514,7 @@ static s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
                le32_to_cpus(&buffer[bi]);
        }
 
-out:
-       return ret_val;
+       return 0;
 }
 
 /**
@@ -3621,12 +3535,10 @@ s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min,
 {
        struct ixgbe_hic_drv_info fw_cmd;
        int i;
-       s32 ret_val = 0;
+       s32 ret_val;
 
-       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM) != 0) {
-               ret_val = IXGBE_ERR_SWFW_SYNC;
-               goto out;
-       }
+       if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM))
+               return IXGBE_ERR_SWFW_SYNC;
 
        fw_cmd.hdr.cmd = FW_CEM_CMD_DRIVER_INFO;
        fw_cmd.hdr.buf_len = FW_CEM_CMD_DRIVER_INFO_LEN;
@@ -3658,7 +3570,6 @@ s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min,
        }
 
        hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM);
-out:
        return ret_val;
 }
 
@@ -3727,28 +3638,23 @@ static const u8 ixgbe_emc_therm_limit[4] = {
 static s32 ixgbe_get_ets_data(struct ixgbe_hw *hw, u16 *ets_cfg,
                              u16 *ets_offset)
 {
-       s32 status = 0;
+       s32 status;
 
        status = hw->eeprom.ops.read(hw, IXGBE_ETS_CFG, ets_offset);
        if (status)
-               goto out;
+               return status;
 
-       if ((*ets_offset == 0x0000) || (*ets_offset == 0xFFFF)) {
-               status = IXGBE_NOT_IMPLEMENTED;
-               goto out;
-       }
+       if ((*ets_offset == 0x0000) || (*ets_offset == 0xFFFF))
+               return IXGBE_NOT_IMPLEMENTED;
 
        status = hw->eeprom.ops.read(hw, *ets_offset, ets_cfg);
        if (status)
-               goto out;
+               return status;
 
-       if ((*ets_cfg & IXGBE_ETS_TYPE_MASK) != IXGBE_ETS_TYPE_EMC_SHIFTED) {
-               status = IXGBE_NOT_IMPLEMENTED;
-               goto out;
-       }
+       if ((*ets_cfg & IXGBE_ETS_TYPE_MASK) != IXGBE_ETS_TYPE_EMC_SHIFTED)
+               return IXGBE_NOT_IMPLEMENTED;
 
-out:
-       return status;
+       return 0;
 }
 
 /**
@@ -3759,7 +3665,7 @@ out:
  **/
 s32 ixgbe_get_thermal_sensor_data_generic(struct ixgbe_hw *hw)
 {
-       s32 status = 0;
+       s32 status;
        u16 ets_offset;
        u16 ets_cfg;
        u16 ets_sensor;
@@ -3768,14 +3674,12 @@ s32 ixgbe_get_thermal_sensor_data_generic(struct ixgbe_hw *hw)
        struct ixgbe_thermal_sensor_data *data = &hw->mac.thermal_sensor_data;
 
        /* Only support thermal sensors attached to physical port 0 */
-       if ((IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)) {
-               status = IXGBE_NOT_IMPLEMENTED;
-               goto out;
-       }
+       if ((IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1))
+               return IXGBE_NOT_IMPLEMENTED;
 
        status = ixgbe_get_ets_data(hw, &ets_cfg, &ets_offset);
        if (status)
-               goto out;
+               return status;
 
        num_sensors = (ets_cfg & IXGBE_ETS_NUM_SENSORS_MASK);
        if (num_sensors > IXGBE_MAX_SENSORS)
@@ -3788,7 +3692,7 @@ s32 ixgbe_get_thermal_sensor_data_generic(struct ixgbe_hw *hw)
                status = hw->eeprom.ops.read(hw, (ets_offset + 1 + i),
                                             &ets_sensor);
                if (status)
-                       goto out;
+                       return status;
 
                sensor_index = ((ets_sensor & IXGBE_ETS_DATA_INDEX_MASK) >>
                                IXGBE_ETS_DATA_INDEX_SHIFT);
@@ -3801,11 +3705,11 @@ s32 ixgbe_get_thermal_sensor_data_generic(struct ixgbe_hw *hw)
                                        IXGBE_I2C_THERMAL_SENSOR_ADDR,
                                        &data->sensor[i].temp);
                        if (status)
-                               goto out;
+                               return status;
                }
        }
-out:
-       return status;
+
+       return 0;
 }
 
 /**
@@ -3817,7 +3721,7 @@ out:
  **/
 s32 ixgbe_init_thermal_sensor_thresh_generic(struct ixgbe_hw *hw)
 {
-       s32 status = 0;
+       s32 status;
        u16 ets_offset;
        u16 ets_cfg;
        u16 ets_sensor;
@@ -3830,14 +3734,12 @@ s32 ixgbe_init_thermal_sensor_thresh_generic(struct ixgbe_hw *hw)
        memset(data, 0, sizeof(struct ixgbe_thermal_sensor_data));
 
        /* Only support thermal sensors attached to physical port 0 */
-       if ((IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)) {
-               status = IXGBE_NOT_IMPLEMENTED;
-               goto out;
-       }
+       if ((IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1))
+               return IXGBE_NOT_IMPLEMENTED;
 
        status = ixgbe_get_ets_data(hw, &ets_cfg, &ets_offset);
        if (status)
-               goto out;
+               return status;
 
        low_thresh_delta = ((ets_cfg & IXGBE_ETS_LTHRES_DELTA_MASK) >>
                             IXGBE_ETS_LTHRES_DELTA_SHIFT);
@@ -3871,7 +3773,7 @@ s32 ixgbe_init_thermal_sensor_thresh_generic(struct ixgbe_hw *hw)
                data->sensor[i].caution_thresh = therm_limit;
                data->sensor[i].max_op_thresh = therm_limit - low_thresh_delta;
        }
-out:
-       return status;
+
+       return 0;
 }