|
@@ -410,7 +410,6 @@ static int iwl_find_otp_image(struct iwl_priv *priv,
|
|
|
u16 *validblockaddr)
|
|
|
{
|
|
|
u16 next_link_addr = 0, link_value = 0, valid_addr;
|
|
|
- int ret = 0;
|
|
|
int usedblocks = 0;
|
|
|
|
|
|
/* set addressing mode to absolute to traverse the link list */
|
|
@@ -430,29 +429,29 @@ static int iwl_find_otp_image(struct iwl_priv *priv,
|
|
|
* check for more block on the link list
|
|
|
*/
|
|
|
valid_addr = next_link_addr;
|
|
|
- next_link_addr = link_value;
|
|
|
+ next_link_addr = link_value * sizeof(u16);
|
|
|
IWL_DEBUG_INFO(priv, "OTP blocks %d addr 0x%x\n",
|
|
|
usedblocks, next_link_addr);
|
|
|
if (iwl_read_otp_word(priv, next_link_addr, &link_value))
|
|
|
return -EINVAL;
|
|
|
if (!link_value) {
|
|
|
/*
|
|
|
- * reach the end of link list,
|
|
|
+ * reach the end of link list, return success and
|
|
|
* set address point to the starting address
|
|
|
* of the image
|
|
|
*/
|
|
|
- goto done;
|
|
|
+ *validblockaddr = valid_addr;
|
|
|
+ /* skip first 2 bytes (link list pointer) */
|
|
|
+ *validblockaddr += 2;
|
|
|
+ return 0;
|
|
|
}
|
|
|
/* more in the link list, continue */
|
|
|
usedblocks++;
|
|
|
- } while (usedblocks < priv->cfg->max_ll_items);
|
|
|
- /* OTP full, use last block */
|
|
|
- IWL_DEBUG_INFO(priv, "OTP is full, use last block\n");
|
|
|
-done:
|
|
|
- *validblockaddr = valid_addr;
|
|
|
- /* skip first 2 bytes (link list pointer) */
|
|
|
- *validblockaddr += 2;
|
|
|
- return ret;
|
|
|
+ } while (usedblocks <= priv->cfg->max_ll_items);
|
|
|
+
|
|
|
+ /* OTP has no valid blocks */
|
|
|
+ IWL_DEBUG_INFO(priv, "OTP has no valid blocks\n");
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
|
|
|
/**
|