drivers/char/hw_random/airoha-trng.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
wait_for_completion_timeout() returns an unsigned long
representing remaining jiffies, not an int. It returns
0 on timeout and a positive value on completion, never
a negative error code.
Change the type of ret to unsigned long, and update the
check to == 0 to correctly detect timeouts.
Fixes: e53ca8efcc5e ("hwrng: airoha - add support for Airoha EN7581 TRNG")
Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
---
drivers/char/hw_random/airoha-trng.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/char/hw_random/airoha-trng.c b/drivers/char/hw_random/airoha-trng.c
index 1dbfa9505c21..3e94233e1389 100644
--- a/drivers/char/hw_random/airoha-trng.c
+++ b/drivers/char/hw_random/airoha-trng.c
@@ -76,7 +76,7 @@ static int airoha_trng_irq_unmask(struct airoha_trng *trng)
static int airoha_trng_init(struct hwrng *rng)
{
struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng);
- int ret;
+ unsigned long ret;
u32 val;
val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN);
@@ -88,7 +88,7 @@ static int airoha_trng_init(struct hwrng *rng)
writel(0, trng->base + TRNG_HEALTH_TEST_SW_RST);
ret = wait_for_completion_timeout(&trng->rng_op_done, BUSY_LOOP_TIMEOUT);
- if (ret <= 0) {
+ if (ret == 0) {
dev_err(trng->dev, "Timeout waiting for Health Check\n");
airoha_trng_irq_mask(trng);
return -ENODEV;
--
2.50.1.windows.1
Hi Haotian,
kernel test robot noticed the following build warnings:
[auto build test WARNING on char-misc/char-misc-testing]
[also build test WARNING on char-misc/char-misc-next char-misc/char-misc-linus linus/master v6.18 next-20251212]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Haotian-Zhang/hwrng-airoha-Fix-wait_for_completion_timeout-return-value-check/20251208-161314
base: char-misc/char-misc-testing
patch link: https://lore.kernel.org/r/20251208080836.1010-1-vulab%40iscas.ac.cn
patch subject: [PATCH] hwrng: airoha: Fix wait_for_completion_timeout return value check
config: arm-randconfig-r072-20251210 (https://download.01.org/0day-ci/archive/20251212/202512121309.biSQJ5fC-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 12.5.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202512121309.biSQJ5fC-lkp@intel.com/
New smatch warnings:
drivers/char/hw_random/airoha-trng.c:108 airoha_trng_init() warn: unsigned 'ret' is never less than zero.
Old smatch warnings:
drivers/char/hw_random/airoha-trng.c:117 airoha_trng_init() warn: unsigned 'ret' is never less than zero.
vim +/ret +108 drivers/char/hw_random/airoha-trng.c
e53ca8efcc5ec1 Christian Marangi 2024-10-17 75
e53ca8efcc5ec1 Christian Marangi 2024-10-17 76 static int airoha_trng_init(struct hwrng *rng)
e53ca8efcc5ec1 Christian Marangi 2024-10-17 77 {
e53ca8efcc5ec1 Christian Marangi 2024-10-17 78 struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng);
cd62dba83f93a0 Haotian Zhang 2025-12-08 79 unsigned long ret;
e53ca8efcc5ec1 Christian Marangi 2024-10-17 80 u32 val;
e53ca8efcc5ec1 Christian Marangi 2024-10-17 81
e53ca8efcc5ec1 Christian Marangi 2024-10-17 82 val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN);
e53ca8efcc5ec1 Christian Marangi 2024-10-17 83 val |= RNG_EN;
e53ca8efcc5ec1 Christian Marangi 2024-10-17 84 writel(val, trng->base + TRNG_NS_SEK_AND_DAT_EN);
e53ca8efcc5ec1 Christian Marangi 2024-10-17 85
e53ca8efcc5ec1 Christian Marangi 2024-10-17 86 /* Set out of SW Reset */
e53ca8efcc5ec1 Christian Marangi 2024-10-17 87 airoha_trng_irq_unmask(trng);
e53ca8efcc5ec1 Christian Marangi 2024-10-17 88 writel(0, trng->base + TRNG_HEALTH_TEST_SW_RST);
e53ca8efcc5ec1 Christian Marangi 2024-10-17 89
e53ca8efcc5ec1 Christian Marangi 2024-10-17 90 ret = wait_for_completion_timeout(&trng->rng_op_done, BUSY_LOOP_TIMEOUT);
cd62dba83f93a0 Haotian Zhang 2025-12-08 91 if (ret == 0) {
e53ca8efcc5ec1 Christian Marangi 2024-10-17 92 dev_err(trng->dev, "Timeout waiting for Health Check\n");
e53ca8efcc5ec1 Christian Marangi 2024-10-17 93 airoha_trng_irq_mask(trng);
e53ca8efcc5ec1 Christian Marangi 2024-10-17 94 return -ENODEV;
e53ca8efcc5ec1 Christian Marangi 2024-10-17 95 }
e53ca8efcc5ec1 Christian Marangi 2024-10-17 96
e53ca8efcc5ec1 Christian Marangi 2024-10-17 97 /* Check if Health Test Failed */
e53ca8efcc5ec1 Christian Marangi 2024-10-17 98 val = readl(trng->base + TRNG_HEALTH_TEST_STATUS);
e53ca8efcc5ec1 Christian Marangi 2024-10-17 99 if (val & (RST_STARTUP_AP_TEST_FAIL | RST_STARTUP_RC_TEST_FAIL)) {
e53ca8efcc5ec1 Christian Marangi 2024-10-17 100 dev_err(trng->dev, "Health Check fail: %s test fail\n",
e53ca8efcc5ec1 Christian Marangi 2024-10-17 101 val & RST_STARTUP_AP_TEST_FAIL ? "AP" : "RC");
e53ca8efcc5ec1 Christian Marangi 2024-10-17 102 return -ENODEV;
e53ca8efcc5ec1 Christian Marangi 2024-10-17 103 }
e53ca8efcc5ec1 Christian Marangi 2024-10-17 104
e53ca8efcc5ec1 Christian Marangi 2024-10-17 105 /* Check if IP is ready */
e53ca8efcc5ec1 Christian Marangi 2024-10-17 106 ret = readl_poll_timeout(trng->base + TRNG_IP_RDY, val,
e53ca8efcc5ec1 Christian Marangi 2024-10-17 107 val & SAMPLE_RDY, 10, 1000);
e53ca8efcc5ec1 Christian Marangi 2024-10-17 @108 if (ret < 0) {
e53ca8efcc5ec1 Christian Marangi 2024-10-17 109 dev_err(trng->dev, "Timeout waiting for IP ready");
e53ca8efcc5ec1 Christian Marangi 2024-10-17 110 return -ENODEV;
e53ca8efcc5ec1 Christian Marangi 2024-10-17 111 }
e53ca8efcc5ec1 Christian Marangi 2024-10-17 112
e53ca8efcc5ec1 Christian Marangi 2024-10-17 113 /* CNT_TRANS must be 0x80 for IP to be considered ready */
e53ca8efcc5ec1 Christian Marangi 2024-10-17 114 ret = readl_poll_timeout(trng->base + TRNG_IP_RDY, val,
e53ca8efcc5ec1 Christian Marangi 2024-10-17 115 FIELD_GET(CNT_TRANS, val) == TRNG_CNT_TRANS_VALID,
e53ca8efcc5ec1 Christian Marangi 2024-10-17 116 10, 1000);
e53ca8efcc5ec1 Christian Marangi 2024-10-17 117 if (ret < 0) {
e53ca8efcc5ec1 Christian Marangi 2024-10-17 118 dev_err(trng->dev, "Timeout waiting for IP ready");
e53ca8efcc5ec1 Christian Marangi 2024-10-17 119 return -ENODEV;
e53ca8efcc5ec1 Christian Marangi 2024-10-17 120 }
e53ca8efcc5ec1 Christian Marangi 2024-10-17 121
e53ca8efcc5ec1 Christian Marangi 2024-10-17 122 return 0;
e53ca8efcc5ec1 Christian Marangi 2024-10-17 123 }
e53ca8efcc5ec1 Christian Marangi 2024-10-17 124
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Thus wrote Haotian Zhang (vulab@iscas.ac.cn):
> wait_for_completion_timeout() returns an unsigned long
> representing remaining jiffies, not an int. It returns
> 0 on timeout and a positive value on completion, never
> a negative error code.
> Change the type of ret to unsigned long, and update the
> check to == 0 to correctly detect timeouts.
> Fixes: e53ca8efcc5e ("hwrng: airoha - add support for Airoha EN7581 TRNG")
> Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
> ---
> drivers/char/hw_random/airoha-trng.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
> diff --git a/drivers/char/hw_random/airoha-trng.c b/drivers/char/hw_random/airoha-trng.c
> index 1dbfa9505c21..3e94233e1389 100644
> --- a/drivers/char/hw_random/airoha-trng.c
> +++ b/drivers/char/hw_random/airoha-trng.c
> @@ -76,7 +76,7 @@ static int airoha_trng_irq_unmask(struct airoha_trng *trng)
> static int airoha_trng_init(struct hwrng *rng)
> {
> struct airoha_trng *trng = container_of(rng, struct airoha_trng, rng);
> - int ret;
> + unsigned long ret;
> u32 val;
> val = readl(trng->base + TRNG_NS_SEK_AND_DAT_EN);
> @@ -88,7 +88,7 @@ static int airoha_trng_init(struct hwrng *rng)
> writel(0, trng->base + TRNG_HEALTH_TEST_SW_RST);
> ret = wait_for_completion_timeout(&trng->rng_op_done, BUSY_LOOP_TIMEOUT);
> - if (ret <= 0) {
> + if (ret == 0) {
> dev_err(trng->dev, "Timeout waiting for Health Check\n");
> airoha_trng_irq_mask(trng);
> return -ENODEV;
> --
> 2.50.1.windows.1
Reviewed-by: Martin Kaiser <martin@kaiser.cx>
© 2016 - 2025 Red Hat, Inc.