crypto: tegra-aes - bitwise vs logical and
Subsystems (3)
PATCH 1/1 crypto: tegra-aes - bitwise vs logical and
The bug here is that:
while (eng_busy & (!icq_empty) & dma_busy)
is never true because it's using bitwise instead of logical ANDs. The other bitwise AND conditions work as intended but I changed them as well for consistency.
---
Static checker stuff. I don't have the hardware.
drivers/crypto/tegra-aes.c +3 -3
@@ -275,7 +275,7 @@ static int aes_start_crypt(struct tegra_aes_dev *dd, u32 in_addr, u32 out_addr, value =aes_readl (dd,TEGRA_AES_INTR_STATUS ); eng_busy = value &TEGRA_AES_ENGINE_BUSY_FIELD ; icq_empty = value &TEGRA_AES_ICQ_EMPTY_FIELD ; - }while (eng_busy & (!icq_empty)); + }while (eng_busy && !icq_empty);aes_writel (dd, cmdq[i],TEGRA_AES_ICMDQUE_WR ); }
@@ -365,7 +365,7 @@ static int aes_set_key(struct tegra_aes_dev *dd) eng_busy = value &TEGRA_AES_ENGINE_BUSY_FIELD ; icq_empty = value &TEGRA_AES_ICQ_EMPTY_FIELD ; dma_busy = value &TEGRA_AES_DMA_BUSY_FIELD ; - }while (eng_busy & (!icq_empty) & dma_busy); + }while (eng_busy && !icq_empty && dma_busy);/* settable command to get key into internal registers */ value = CMD_SETTABLE << CMDQ_OPCODE_SHIFT |
@@ -379,7 +379,7 @@ static int aes_set_key(struct tegra_aes_dev *dd) value =aes_readl (dd,TEGRA_AES_INTR_STATUS ); eng_busy = value &TEGRA_AES_ENGINE_BUSY_FIELD ; icq_empty = value &TEGRA_AES_ICQ_EMPTY_FIELD ; - }while (eng_busy & (!icq_empty)); + }while (eng_busy && !icq_empty);return 0 ; }
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 11 lines · Dan Carpenter
The bug here is that:
while (
eng_busy& (!icq_empty) &dma_busy)is never true because it's using bitwise instead of logical ANDs. The other bitwise AND conditions work as intended but I changed them as well for consistency.
Signed-off-by Dan Carpenter <[email protected]>---
Static checker stuff. I don't have the hardware.
Varun, can you please test the driver with this change applied and make sure it works correctly.
If you could also update our internal testing wiki with the steps you use for this testing, that'd be great too.
Thanks.
Herbert Xu
maintainerQuoted 9 lines · Dan Carpenter
The bug here is that:
while (
eng_busy& (!icq_empty) &dma_busy)is never true because it's using bitwise instead of logical ANDs. The other bitwise AND conditions work as intended but I changed them as well for consistency.
Signed-off-by Dan Carpenter <[email protected]>
Also applied.
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt