Hi Corentin, I love your patch! Perhaps something to improve: [auto build test WARNING on sunxi/sunxi/for-next] [also build test WARNING on cryptodev/master crypto/master v5.8-rc2] [cannot apply to next-20200621] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Corentin-Labbe/crypto-allwinner-add-xRNG-and-hashes/20200622-033401 base: https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git sunxi/for-next config: x86_64-allyesconfig (attached as .config) compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project ef455a55bcf2cfea04a99c361b182ad18b7f03f1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>, old ones prefixed by <<): >> drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c:22:5: warning: no previous prototype for function 'sun8i_ce_trng_read' [-Wmissing-prototypes] int sun8i_ce_trng_read(struct hwrng *rng, void *data, size_t max, bool wait) ^ drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c:22:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int sun8i_ce_trng_read(struct hwrng *rng, void *data, size_t max, bool wait) ^ static >> drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c:105:24: warning: result of comparison of constant 255 with expression of type 'const char' is always false [-Wtautological-constant-out-of-range-compare] if (ce->variant->trng == CE_ID_NOTSUPP) { ~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~ drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c:121:24: warning: result of comparison of constant 255 with expression of type 'const char' is always false [-Wtautological-constant-out-of-range-compare] if (ce->variant->trng == CE_ID_NOTSUPP) ~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~ 3 warnings generated. vim +/sun8i_ce_trng_read +22 drivers/crypto/allwinner/sun8i-ce/sun8i-ce-trng.c > 22 int sun8i_ce_trng_read(struct hwrng *rng, void *data, size_t max, bool wait) 23 { 24 struct sun8i_ce_dev *ce; 25 dma_addr_t dma_dst; 26 int err = 0; 27 int flow = 3; 28 unsigned int todo; 29 struct sun8i_ce_flow *chan; 30 struct ce_task *cet; 31 u32 common; 32 void *d; 33 34 ce = container_of(rng, struct sun8i_ce_dev, trng); 35 36 /* round the data length to a multiple of 32*/ 37 todo = max + 32; 38 todo -= todo % 32; 39 40 d = kzalloc(todo, GFP_KERNEL | GFP_DMA); 41 if (!d) 42 return -ENOMEM; 43 44 #ifdef CONFIG_CRYPTO_DEV_SUN8I_CE_DEBUG 45 ce->hwrng_stat_req++; 46 ce->hwrng_stat_bytes += todo; 47 #endif 48 49 dma_dst = dma_map_single(ce->dev, d, todo, DMA_FROM_DEVICE); 50 if (dma_mapping_error(ce->dev, dma_dst)) { 51 dev_err(ce->dev, "Cannot DMA MAP DST\n"); 52 err = -EFAULT; 53 goto err_dst; 54 } 55 56 err = pm_runtime_get_sync(ce->dev); 57 if (err < 0) 58 goto err_pm; 59 60 mutex_lock(&ce->rnglock); 61 chan = &ce->chanlist[flow]; 62 63 cet = &chan->tl[0]; 64 memset(cet, 0, sizeof(struct ce_task)); 65 66 cet->t_id = cpu_to_le32(flow); 67 common = ce->variant->trng | CE_COMM_INT; 68 cet->t_common_ctl = cpu_to_le32(common); 69 70 /* recent CE (H6) need length in bytes, in word otherwise */ 71 if (ce->variant->trng_t_dlen_in_bytes) 72 cet->t_dlen = cpu_to_le32(todo); 73 else 74 cet->t_dlen = cpu_to_le32(todo / 4); 75 76 cet->t_sym_ctl = 0; 77 cet->t_asym_ctl = 0; 78 79 cet->t_dst[0].addr = cpu_to_le32(dma_dst); 80 cet->t_dst[0].len = cpu_to_le32(todo / 4); 81 ce->chanlist[flow].timeout = todo; 82 83 err = sun8i_ce_run_task(ce, 3, "TRNG"); 84 mutex_unlock(&ce->rnglock); 85 86 pm_runtime_put(ce->dev); 87 88 err_pm: 89 dma_unmap_single(ce->dev, dma_dst, todo, DMA_FROM_DEVICE); 90 91 if (!err) { 92 memcpy(data, d, max); 93 err = max; 94 } 95 memzero_explicit(d, todo); 96 err_dst: 97 kfree(d); 98 return err; 99 } 100 101 int sun8i_ce_hwrng_register(struct sun8i_ce_dev *ce) 102 { 103 int ret; 104 > 105 if (ce->variant->trng == CE_ID_NOTSUPP) { 106 dev_info(ce->dev, "TRNG not supported\n"); 107 return 0; 108 } 109 ce->trng.name = "sun8i Crypto Engine TRNG"; 110 ce->trng.read = sun8i_ce_trng_read; 111 ce->trng.quality = 1000; 112 113 ret = hwrng_register(&ce->trng); 114 if (ret) 115 dev_err(ce->dev, "Fail to register the TRNG\n"); 116 return ret; 117 } 118 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org