rsi: Properly initialize data in rsi_sdio_ta_reset
When building with -Wuninitialized, Clang warns:
drivers/net/wireless/rsi/rsi_91x_sdio.c:940:43: warning: variable 'data'
is uninitialized when used here [-Wuninitialized]
put_unaligned_le32(TA_HOLD_THREAD_VALUE, data);
^~~~
drivers/net/wireless/rsi/rsi_91x_sdio.c:930:10: note: initialize the
variable 'data' to silence this warning
u8 *data;
^
= NULL
1 warning generated.
Using Clang's suggestion of initializing data to NULL wouldn't work out
because data will be dereferenced by put_unaligned_le32. Use kzalloc to
properly initialize data, which matches a couple of other places in this
driver.
Fixes: e5a1ecc97e
("rsi: add firmware loading for 9116 device")
Link: https://github.com/ClangBuiltLinux/linux/issues/464
Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
a24bad7473
commit
f57b5d85ed
|
@ -929,11 +929,15 @@ static int rsi_sdio_ta_reset(struct rsi_hw *adapter)
|
||||||
u32 addr;
|
u32 addr;
|
||||||
u8 *data;
|
u8 *data;
|
||||||
|
|
||||||
|
data = kzalloc(RSI_9116_REG_SIZE, GFP_KERNEL);
|
||||||
|
if (!data)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
status = rsi_sdio_master_access_msword(adapter, TA_BASE_ADDR);
|
status = rsi_sdio_master_access_msword(adapter, TA_BASE_ADDR);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
rsi_dbg(ERR_ZONE,
|
rsi_dbg(ERR_ZONE,
|
||||||
"Unable to set ms word to common reg\n");
|
"Unable to set ms word to common reg\n");
|
||||||
return status;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
rsi_dbg(INIT_ZONE, "%s: Bring TA out of reset\n", __func__);
|
rsi_dbg(INIT_ZONE, "%s: Bring TA out of reset\n", __func__);
|
||||||
|
@ -944,7 +948,7 @@ static int rsi_sdio_ta_reset(struct rsi_hw *adapter)
|
||||||
RSI_9116_REG_SIZE);
|
RSI_9116_REG_SIZE);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
rsi_dbg(ERR_ZONE, "Unable to hold TA threads\n");
|
rsi_dbg(ERR_ZONE, "Unable to hold TA threads\n");
|
||||||
return status;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
put_unaligned_le32(TA_SOFT_RST_CLR, data);
|
put_unaligned_le32(TA_SOFT_RST_CLR, data);
|
||||||
|
@ -954,7 +958,7 @@ static int rsi_sdio_ta_reset(struct rsi_hw *adapter)
|
||||||
RSI_9116_REG_SIZE);
|
RSI_9116_REG_SIZE);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
rsi_dbg(ERR_ZONE, "Unable to get TA out of reset\n");
|
rsi_dbg(ERR_ZONE, "Unable to get TA out of reset\n");
|
||||||
return status;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
put_unaligned_le32(TA_PC_ZERO, data);
|
put_unaligned_le32(TA_PC_ZERO, data);
|
||||||
|
@ -964,7 +968,8 @@ static int rsi_sdio_ta_reset(struct rsi_hw *adapter)
|
||||||
RSI_9116_REG_SIZE);
|
RSI_9116_REG_SIZE);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
rsi_dbg(ERR_ZONE, "Unable to Reset TA PC value\n");
|
rsi_dbg(ERR_ZONE, "Unable to Reset TA PC value\n");
|
||||||
return -EINVAL;
|
status = -EINVAL;
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
put_unaligned_le32(TA_RELEASE_THREAD_VALUE, data);
|
put_unaligned_le32(TA_RELEASE_THREAD_VALUE, data);
|
||||||
|
@ -974,17 +979,19 @@ static int rsi_sdio_ta_reset(struct rsi_hw *adapter)
|
||||||
RSI_9116_REG_SIZE);
|
RSI_9116_REG_SIZE);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
rsi_dbg(ERR_ZONE, "Unable to release TA threads\n");
|
rsi_dbg(ERR_ZONE, "Unable to release TA threads\n");
|
||||||
return status;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = rsi_sdio_master_access_msword(adapter, MISC_CFG_BASE_ADDR);
|
status = rsi_sdio_master_access_msword(adapter, MISC_CFG_BASE_ADDR);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
rsi_dbg(ERR_ZONE, "Unable to set ms word to common reg\n");
|
rsi_dbg(ERR_ZONE, "Unable to set ms word to common reg\n");
|
||||||
return status;
|
goto err;
|
||||||
}
|
}
|
||||||
rsi_dbg(INIT_ZONE, "***** TA Reset done *****\n");
|
rsi_dbg(INIT_ZONE, "***** TA Reset done *****\n");
|
||||||
|
|
||||||
return 0;
|
err:
|
||||||
|
kfree(data);
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct rsi_host_intf_ops sdio_host_intf_ops = {
|
static struct rsi_host_intf_ops sdio_host_intf_ops = {
|
||||||
|
|
Loading…
Reference in New Issue