Commit 9f1f3cea authored by Johannes Berg's avatar Johannes Berg Committed by Reinette Chatre

iwlagn: simplify ucode loading

Move the waiting into iwl5000_load_section instead
of duplicating it in the caller.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
parent 4d695921
...@@ -412,12 +412,14 @@ static void iwl5000_rx_calib_complete(struct iwl_priv *priv, ...@@ -412,12 +412,14 @@ static void iwl5000_rx_calib_complete(struct iwl_priv *priv,
/* /*
* ucode * ucode
*/ */
static int iwl5000_load_section(struct iwl_priv *priv, static int iwl5000_load_section(struct iwl_priv *priv, const char *name,
struct fw_desc *image, struct fw_desc *image, u32 dst_addr)
u32 dst_addr)
{ {
dma_addr_t phy_addr = image->p_addr; dma_addr_t phy_addr = image->p_addr;
u32 byte_cnt = image->len; u32 byte_cnt = image->len;
int ret;
priv->ucode_write_complete = 0;
iwl_write_direct32(priv, iwl_write_direct32(priv,
FH_TCSR_CHNL_TX_CONFIG_REG(FH_SRVC_CHNL), FH_TCSR_CHNL_TX_CONFIG_REG(FH_SRVC_CHNL),
...@@ -447,57 +449,36 @@ static int iwl5000_load_section(struct iwl_priv *priv, ...@@ -447,57 +449,36 @@ static int iwl5000_load_section(struct iwl_priv *priv,
FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE | FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE |
FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_ENDTFD); FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_ENDTFD);
return 0; IWL_DEBUG_INFO(priv, "%s uCode section being loaded...\n", name);
}
static int iwl5000_load_given_ucode(struct iwl_priv *priv,
struct fw_desc *inst_image,
struct fw_desc *data_image)
{
int ret = 0;
ret = iwl5000_load_section(priv, inst_image,
IWL50_RTC_INST_LOWER_BOUND);
if (ret)
return ret;
IWL_DEBUG_INFO(priv, "INST uCode section being loaded...\n");
ret = wait_event_interruptible_timeout(priv->wait_command_queue, ret = wait_event_interruptible_timeout(priv->wait_command_queue,
priv->ucode_write_complete, 5 * HZ); priv->ucode_write_complete, 5 * HZ);
if (ret == -ERESTARTSYS) { if (ret == -ERESTARTSYS) {
IWL_ERR(priv, "Could not load the INST uCode section due " IWL_ERR(priv, "Could not load the %s uCode section due "
"to interrupt\n"); "to interrupt\n", name);
return ret; return ret;
} }
if (!ret) { if (!ret) {
IWL_ERR(priv, "Could not load the INST uCode section\n"); IWL_ERR(priv, "Could not load the %s uCode section\n",
name);
return -ETIMEDOUT; return -ETIMEDOUT;
} }
priv->ucode_write_complete = 0; return 0;
}
ret = iwl5000_load_section(
priv, data_image, IWL50_RTC_DATA_LOWER_BOUND);
if (ret)
return ret;
IWL_DEBUG_INFO(priv, "DATA uCode section being loaded...\n"); static int iwl5000_load_given_ucode(struct iwl_priv *priv,
struct fw_desc *inst_image,
struct fw_desc *data_image)
{
int ret = 0;
ret = wait_event_interruptible_timeout(priv->wait_command_queue, ret = iwl5000_load_section(priv, "INST", inst_image,
priv->ucode_write_complete, 5 * HZ); IWL50_RTC_INST_LOWER_BOUND);
if (ret == -ERESTARTSYS) { if (ret)
IWL_ERR(priv, "Could not load the INST uCode section due "
"to interrupt\n");
return ret; return ret;
} else if (!ret) {
IWL_ERR(priv, "Could not load the DATA uCode section\n");
return -ETIMEDOUT;
} else
ret = 0;
priv->ucode_write_complete = 0;
return ret; return iwl5000_load_section(priv, "DATA", data_image,
IWL50_RTC_DATA_LOWER_BOUND);
} }
int iwl5000_load_ucode(struct iwl_priv *priv) int iwl5000_load_ucode(struct iwl_priv *priv)
......
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