Hi Herbert, [auto build test WARNING on cryptodev/master] [also build test WARNING on v4.10-rc7 next-20170206] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Herbert-Xu/crypto-atmel-Fix-authenc-compile-test-warnings/20170206-171201 base: https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master config: ia64-allmodconfig (attached as .config) compiler: ia64-linux-gcc (GCC) 6.2.0 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=ia64 All warnings (new ones prefixed by >>): In file included from drivers/crypto/atmel-tdes.c:17:0: drivers/crypto/atmel-tdes.c: In function 'atmel_tdes_sg_copy': include/linux/kernel.h:753:16: warning: comparison of distinct pointer types lacks a cast (void) (&min1 == &min2); \ ^ include/linux/kernel.h:756:2: note: in expansion of macro '__min' __min(typeof(x), typeof(y), \ ^~~~~ >> drivers/crypto/atmel-tdes.c:157:11: note: in expansion of macro 'min' count = min(count, buflen); ^~~ In file included from include/linux/printk.h:6:0, from include/linux/kernel.h:13, from drivers/crypto/atmel-tdes.c:17: drivers/crypto/atmel-tdes.c: In function 'atmel_tdes_crypt_pdc_stop': >> include/linux/kern_levels.h:4:18: warning: format '%u' expects argument of type 'unsigned int', but argument 2 has type 'size_t {aka long unsigned int}' [-Wformat=] #define KERN_SOH "\001" /* ASCII Start Of Header */ ^ include/linux/kern_levels.h:10:18: note: in expansion of macro 'KERN_SOH' #define KERN_ERR KERN_SOH "3" /* error conditions */ ^~~~~~~~ include/linux/printk.h:292:9: note: in expansion of macro 'KERN_ERR' printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) ^~~~~~~~ >> drivers/crypto/atmel-tdes.c:339:4: note: in expansion of macro 'pr_err' pr_err("not all data converted: %u\n", count); ^~~~~~ drivers/crypto/atmel-tdes.c: In function 'atmel_tdes_buff_init': >> drivers/crypto/atmel-tdes.c:364:26: warning: format '%d' expects argument of type 'int', but argument 3 has type 'size_t {aka long unsigned int}' [-Wformat=] dev_err(dd->dev, "dma %d bytes error\n", dd->buflen); ^ drivers/crypto/atmel-tdes.c:372:26: warning: format '%d' expects argument of type 'int', but argument 3 has type 'size_t {aka long unsigned int}' [-Wformat=] dev_err(dd->dev, "dma %d bytes error\n", dd->buflen); ^ In file included from drivers/crypto/atmel-tdes.c:17:0: drivers/crypto/atmel-tdes.c: In function 'atmel_tdes_crypt_start': include/linux/kernel.h:753:16: warning: comparison of distinct pointer types lacks a cast (void) (&min1 == &min2); \ ^ include/linux/kernel.h:756:2: note: in expansion of macro '__min' __min(typeof(x), typeof(y), \ ^~~~~ drivers/crypto/atmel-tdes.c:528:11: note: in expansion of macro 'min' count = min(dd->total, sg_dma_len(dd->in_sg)); ^~~ include/linux/kernel.h:753:16: warning: comparison of distinct pointer types lacks a cast (void) (&min1 == &min2); \ ^ include/linux/kernel.h:756:2: note: in expansion of macro '__min' __min(typeof(x), typeof(y), \ ^~~~~ drivers/crypto/atmel-tdes.c:529:11: note: in expansion of macro 'min' count = min(count, sg_dma_len(dd->out_sg)); ^~~ In file included from include/linux/printk.h:6:0, from include/linux/kernel.h:13, from drivers/crypto/atmel-tdes.c:17: drivers/crypto/atmel-tdes.c: In function 'atmel_tdes_crypt_dma_stop': >> include/linux/kern_levels.h:4:18: warning: format '%u' expects argument of type 'unsigned int', but argument 2 has type 'size_t {aka long unsigned int}' [-Wformat=] #define KERN_SOH "\001" /* ASCII Start Of Header */ ^ include/linux/kern_levels.h:10:18: note: in expansion of macro 'KERN_SOH' #define KERN_ERR KERN_SOH "3" /* error conditions */ ^~~~~~~~ include/linux/printk.h:292:9: note: in expansion of macro 'KERN_ERR' printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) ^~~~~~~~ drivers/crypto/atmel-tdes.c:664:5: note: in expansion of macro 'pr_err' pr_err("not all data converted: %u\n", count); ^~~~~~ vim +/min +157 drivers/crypto/atmel-tdes.c 13802005 Nicolas Royer 2012-07-01 11 * by the Free Software Foundation. 13802005 Nicolas Royer 2012-07-01 12 * 13802005 Nicolas Royer 2012-07-01 13 * Some ideas are from omap-aes.c drivers. 13802005 Nicolas Royer 2012-07-01 14 */ 13802005 Nicolas Royer 2012-07-01 15 13802005 Nicolas Royer 2012-07-01 16 13802005 Nicolas Royer 2012-07-01 @17 #include 13802005 Nicolas Royer 2012-07-01 18 #include 13802005 Nicolas Royer 2012-07-01 19 #include 13802005 Nicolas Royer 2012-07-01 20 #include 13802005 Nicolas Royer 2012-07-01 21 #include 13802005 Nicolas Royer 2012-07-01 22 #include 13802005 Nicolas Royer 2012-07-01 23 #include 13802005 Nicolas Royer 2012-07-01 24 #include 13802005 Nicolas Royer 2012-07-01 25 13802005 Nicolas Royer 2012-07-01 26 #include 13802005 Nicolas Royer 2012-07-01 27 #include 13802005 Nicolas Royer 2012-07-01 28 #include 13802005 Nicolas Royer 2012-07-01 29 #include 13802005 Nicolas Royer 2012-07-01 30 #include 13802005 Nicolas Royer 2012-07-01 31 #include 13802005 Nicolas Royer 2012-07-01 32 #include 84c8976b Nicolas Ferre 2013-10-15 33 #include 13802005 Nicolas Royer 2012-07-01 34 #include 13802005 Nicolas Royer 2012-07-01 35 #include 13802005 Nicolas Royer 2012-07-01 36 #include 13802005 Nicolas Royer 2012-07-01 37 #include 13802005 Nicolas Royer 2012-07-01 38 #include 13802005 Nicolas Royer 2012-07-01 39 #include 13802005 Nicolas Royer 2012-07-01 40 #include 13802005 Nicolas Royer 2012-07-01 41 #include 1f858040 Nicolas Royer 2013-02-20 42 #include 13802005 Nicolas Royer 2012-07-01 43 #include "atmel-tdes-regs.h" 13802005 Nicolas Royer 2012-07-01 44 13802005 Nicolas Royer 2012-07-01 45 /* TDES flags */ 1f858040 Nicolas Royer 2013-02-20 46 #define TDES_FLAGS_MODE_MASK 0x00ff 13802005 Nicolas Royer 2012-07-01 47 #define TDES_FLAGS_ENCRYPT BIT(0) 13802005 Nicolas Royer 2012-07-01 48 #define TDES_FLAGS_CBC BIT(1) 13802005 Nicolas Royer 2012-07-01 49 #define TDES_FLAGS_CFB BIT(2) 13802005 Nicolas Royer 2012-07-01 50 #define TDES_FLAGS_CFB8 BIT(3) 13802005 Nicolas Royer 2012-07-01 51 #define TDES_FLAGS_CFB16 BIT(4) 13802005 Nicolas Royer 2012-07-01 52 #define TDES_FLAGS_CFB32 BIT(5) 1f858040 Nicolas Royer 2013-02-20 53 #define TDES_FLAGS_CFB64 BIT(6) 1f858040 Nicolas Royer 2013-02-20 54 #define TDES_FLAGS_OFB BIT(7) 13802005 Nicolas Royer 2012-07-01 55 13802005 Nicolas Royer 2012-07-01 56 #define TDES_FLAGS_INIT BIT(16) 13802005 Nicolas Royer 2012-07-01 57 #define TDES_FLAGS_FAST BIT(17) 13802005 Nicolas Royer 2012-07-01 58 #define TDES_FLAGS_BUSY BIT(18) 1f858040 Nicolas Royer 2013-02-20 59 #define TDES_FLAGS_DMA BIT(19) 13802005 Nicolas Royer 2012-07-01 60 1f858040 Nicolas Royer 2013-02-20 61 #define ATMEL_TDES_QUEUE_LENGTH 50 13802005 Nicolas Royer 2012-07-01 62 13802005 Nicolas Royer 2012-07-01 63 #define CFB8_BLOCK_SIZE 1 13802005 Nicolas Royer 2012-07-01 64 #define CFB16_BLOCK_SIZE 2 13802005 Nicolas Royer 2012-07-01 65 #define CFB32_BLOCK_SIZE 4 13802005 Nicolas Royer 2012-07-01 66 1f858040 Nicolas Royer 2013-02-20 67 struct atmel_tdes_caps { 1f858040 Nicolas Royer 2013-02-20 68 bool has_dma; 1f858040 Nicolas Royer 2013-02-20 69 u32 has_cfb_3keys; 1f858040 Nicolas Royer 2013-02-20 70 }; 13802005 Nicolas Royer 2012-07-01 71 13802005 Nicolas Royer 2012-07-01 72 struct atmel_tdes_dev; 13802005 Nicolas Royer 2012-07-01 73 13802005 Nicolas Royer 2012-07-01 74 struct atmel_tdes_ctx { 13802005 Nicolas Royer 2012-07-01 75 struct atmel_tdes_dev *dd; 13802005 Nicolas Royer 2012-07-01 76 13802005 Nicolas Royer 2012-07-01 77 int keylen; 13802005 Nicolas Royer 2012-07-01 78 u32 key[3*DES_KEY_SIZE / sizeof(u32)]; 13802005 Nicolas Royer 2012-07-01 79 unsigned long flags; 1f858040 Nicolas Royer 2013-02-20 80 1f858040 Nicolas Royer 2013-02-20 81 u16 block_size; 13802005 Nicolas Royer 2012-07-01 82 }; 13802005 Nicolas Royer 2012-07-01 83 13802005 Nicolas Royer 2012-07-01 84 struct atmel_tdes_reqctx { 13802005 Nicolas Royer 2012-07-01 85 unsigned long mode; 13802005 Nicolas Royer 2012-07-01 86 }; 13802005 Nicolas Royer 2012-07-01 87 1f858040 Nicolas Royer 2013-02-20 88 struct atmel_tdes_dma { 1f858040 Nicolas Royer 2013-02-20 89 struct dma_chan *chan; 1f858040 Nicolas Royer 2013-02-20 90 struct dma_slave_config dma_conf; 1f858040 Nicolas Royer 2013-02-20 91 }; 1f858040 Nicolas Royer 2013-02-20 92 13802005 Nicolas Royer 2012-07-01 93 struct atmel_tdes_dev { 13802005 Nicolas Royer 2012-07-01 94 struct list_head list; 13802005 Nicolas Royer 2012-07-01 95 unsigned long phys_base; 13802005 Nicolas Royer 2012-07-01 96 void __iomem *io_base; 13802005 Nicolas Royer 2012-07-01 97 13802005 Nicolas Royer 2012-07-01 98 struct atmel_tdes_ctx *ctx; 13802005 Nicolas Royer 2012-07-01 99 struct device *dev; 13802005 Nicolas Royer 2012-07-01 100 struct clk *iclk; 13802005 Nicolas Royer 2012-07-01 101 int irq; 13802005 Nicolas Royer 2012-07-01 102 13802005 Nicolas Royer 2012-07-01 103 unsigned long flags; 13802005 Nicolas Royer 2012-07-01 104 int err; 13802005 Nicolas Royer 2012-07-01 105 13802005 Nicolas Royer 2012-07-01 106 spinlock_t lock; 13802005 Nicolas Royer 2012-07-01 107 struct crypto_queue queue; 13802005 Nicolas Royer 2012-07-01 108 13802005 Nicolas Royer 2012-07-01 109 struct tasklet_struct done_task; 13802005 Nicolas Royer 2012-07-01 110 struct tasklet_struct queue_task; 13802005 Nicolas Royer 2012-07-01 111 13802005 Nicolas Royer 2012-07-01 112 struct ablkcipher_request *req; 13802005 Nicolas Royer 2012-07-01 113 size_t total; 13802005 Nicolas Royer 2012-07-01 114 13802005 Nicolas Royer 2012-07-01 115 struct scatterlist *in_sg; 1f858040 Nicolas Royer 2013-02-20 116 unsigned int nb_in_sg; 13802005 Nicolas Royer 2012-07-01 117 size_t in_offset; 13802005 Nicolas Royer 2012-07-01 118 struct scatterlist *out_sg; 1f858040 Nicolas Royer 2013-02-20 119 unsigned int nb_out_sg; 13802005 Nicolas Royer 2012-07-01 120 size_t out_offset; 13802005 Nicolas Royer 2012-07-01 121 13802005 Nicolas Royer 2012-07-01 122 size_t buflen; 13802005 Nicolas Royer 2012-07-01 123 size_t dma_size; 13802005 Nicolas Royer 2012-07-01 124 13802005 Nicolas Royer 2012-07-01 125 void *buf_in; 13802005 Nicolas Royer 2012-07-01 126 int dma_in; 13802005 Nicolas Royer 2012-07-01 127 dma_addr_t dma_addr_in; 1f858040 Nicolas Royer 2013-02-20 128 struct atmel_tdes_dma dma_lch_in; 13802005 Nicolas Royer 2012-07-01 129 13802005 Nicolas Royer 2012-07-01 130 void *buf_out; 13802005 Nicolas Royer 2012-07-01 131 int dma_out; 13802005 Nicolas Royer 2012-07-01 132 dma_addr_t dma_addr_out; 1f858040 Nicolas Royer 2013-02-20 133 struct atmel_tdes_dma dma_lch_out; 1f858040 Nicolas Royer 2013-02-20 134 1f858040 Nicolas Royer 2013-02-20 135 struct atmel_tdes_caps caps; 1f858040 Nicolas Royer 2013-02-20 136 1f858040 Nicolas Royer 2013-02-20 137 u32 hw_version; 13802005 Nicolas Royer 2012-07-01 138 }; 13802005 Nicolas Royer 2012-07-01 139 13802005 Nicolas Royer 2012-07-01 140 struct atmel_tdes_drv { 13802005 Nicolas Royer 2012-07-01 141 struct list_head dev_list; 13802005 Nicolas Royer 2012-07-01 142 spinlock_t lock; 13802005 Nicolas Royer 2012-07-01 143 }; 13802005 Nicolas Royer 2012-07-01 144 13802005 Nicolas Royer 2012-07-01 145 static struct atmel_tdes_drv atmel_tdes = { 13802005 Nicolas Royer 2012-07-01 146 .dev_list = LIST_HEAD_INIT(atmel_tdes.dev_list), 13802005 Nicolas Royer 2012-07-01 147 .lock = __SPIN_LOCK_UNLOCKED(atmel_tdes.lock), 13802005 Nicolas Royer 2012-07-01 148 }; 13802005 Nicolas Royer 2012-07-01 149 13802005 Nicolas Royer 2012-07-01 150 static int atmel_tdes_sg_copy(struct scatterlist **sg, size_t *offset, 13802005 Nicolas Royer 2012-07-01 151 void *buf, size_t buflen, size_t total, int out) 13802005 Nicolas Royer 2012-07-01 152 { 13802005 Nicolas Royer 2012-07-01 153 unsigned int count, off = 0; 13802005 Nicolas Royer 2012-07-01 154 13802005 Nicolas Royer 2012-07-01 155 while (buflen && total) { 13802005 Nicolas Royer 2012-07-01 156 count = min((*sg)->length - *offset, total); 13802005 Nicolas Royer 2012-07-01 @157 count = min(count, buflen); 13802005 Nicolas Royer 2012-07-01 158 13802005 Nicolas Royer 2012-07-01 159 if (!count) 13802005 Nicolas Royer 2012-07-01 160 return off; 13802005 Nicolas Royer 2012-07-01 161 13802005 Nicolas Royer 2012-07-01 162 scatterwalk_map_and_copy(buf + off, *sg, *offset, count, out); 13802005 Nicolas Royer 2012-07-01 163 13802005 Nicolas Royer 2012-07-01 164 off += count; 13802005 Nicolas Royer 2012-07-01 165 buflen -= count; 13802005 Nicolas Royer 2012-07-01 166 *offset += count; 13802005 Nicolas Royer 2012-07-01 167 total -= count; 13802005 Nicolas Royer 2012-07-01 168 13802005 Nicolas Royer 2012-07-01 169 if (*offset == (*sg)->length) { 13802005 Nicolas Royer 2012-07-01 170 *sg = sg_next(*sg); 13802005 Nicolas Royer 2012-07-01 171 if (*sg) 13802005 Nicolas Royer 2012-07-01 172 *offset = 0; 13802005 Nicolas Royer 2012-07-01 173 else 13802005 Nicolas Royer 2012-07-01 174 total = 0; 13802005 Nicolas Royer 2012-07-01 175 } 13802005 Nicolas Royer 2012-07-01 176 } 13802005 Nicolas Royer 2012-07-01 177 13802005 Nicolas Royer 2012-07-01 178 return off; 13802005 Nicolas Royer 2012-07-01 179 } 13802005 Nicolas Royer 2012-07-01 180 13802005 Nicolas Royer 2012-07-01 181 static inline u32 atmel_tdes_read(struct atmel_tdes_dev *dd, u32 offset) 13802005 Nicolas Royer 2012-07-01 182 { 13802005 Nicolas Royer 2012-07-01 183 return readl_relaxed(dd->io_base + offset); 13802005 Nicolas Royer 2012-07-01 184 } 13802005 Nicolas Royer 2012-07-01 185 13802005 Nicolas Royer 2012-07-01 186 static inline void atmel_tdes_write(struct atmel_tdes_dev *dd, 13802005 Nicolas Royer 2012-07-01 187 u32 offset, u32 value) 13802005 Nicolas Royer 2012-07-01 188 { 13802005 Nicolas Royer 2012-07-01 189 writel_relaxed(value, dd->io_base + offset); 13802005 Nicolas Royer 2012-07-01 190 } 13802005 Nicolas Royer 2012-07-01 191 13802005 Nicolas Royer 2012-07-01 192 static void atmel_tdes_write_n(struct atmel_tdes_dev *dd, u32 offset, 13802005 Nicolas Royer 2012-07-01 193 u32 *value, int count) 13802005 Nicolas Royer 2012-07-01 194 { 13802005 Nicolas Royer 2012-07-01 195 for (; count--; value++, offset += 4) 13802005 Nicolas Royer 2012-07-01 196 atmel_tdes_write(dd, offset, *value); 13802005 Nicolas Royer 2012-07-01 197 } 13802005 Nicolas Royer 2012-07-01 198 13802005 Nicolas Royer 2012-07-01 199 static struct atmel_tdes_dev *atmel_tdes_find_dev(struct atmel_tdes_ctx *ctx) 13802005 Nicolas Royer 2012-07-01 200 { 13802005 Nicolas Royer 2012-07-01 201 struct atmel_tdes_dev *tdes_dd = NULL; 13802005 Nicolas Royer 2012-07-01 202 struct atmel_tdes_dev *tmp; 13802005 Nicolas Royer 2012-07-01 203 13802005 Nicolas Royer 2012-07-01 204 spin_lock_bh(&atmel_tdes.lock); 13802005 Nicolas Royer 2012-07-01 205 if (!ctx->dd) { 13802005 Nicolas Royer 2012-07-01 206 list_for_each_entry(tmp, &atmel_tdes.dev_list, list) { 13802005 Nicolas Royer 2012-07-01 207 tdes_dd = tmp; 13802005 Nicolas Royer 2012-07-01 208 break; 13802005 Nicolas Royer 2012-07-01 209 } 13802005 Nicolas Royer 2012-07-01 210 ctx->dd = tdes_dd; 13802005 Nicolas Royer 2012-07-01 211 } else { 13802005 Nicolas Royer 2012-07-01 212 tdes_dd = ctx->dd; 13802005 Nicolas Royer 2012-07-01 213 } 13802005 Nicolas Royer 2012-07-01 214 spin_unlock_bh(&atmel_tdes.lock); 13802005 Nicolas Royer 2012-07-01 215 13802005 Nicolas Royer 2012-07-01 216 return tdes_dd; 13802005 Nicolas Royer 2012-07-01 217 } 13802005 Nicolas Royer 2012-07-01 218 13802005 Nicolas Royer 2012-07-01 219 static int atmel_tdes_hw_init(struct atmel_tdes_dev *dd) 13802005 Nicolas Royer 2012-07-01 220 { 9d83d299 LABBE Corentin 2015-10-02 221 int err; 9d83d299 LABBE Corentin 2015-10-02 222 9d83d299 LABBE Corentin 2015-10-02 223 err = clk_prepare_enable(dd->iclk); 9d83d299 LABBE Corentin 2015-10-02 224 if (err) 9d83d299 LABBE Corentin 2015-10-02 225 return err; 13802005 Nicolas Royer 2012-07-01 226 13802005 Nicolas Royer 2012-07-01 227 if (!(dd->flags & TDES_FLAGS_INIT)) { 13802005 Nicolas Royer 2012-07-01 228 atmel_tdes_write(dd, TDES_CR, TDES_CR_SWRST); 13802005 Nicolas Royer 2012-07-01 229 dd->flags |= TDES_FLAGS_INIT; 13802005 Nicolas Royer 2012-07-01 230 dd->err = 0; 13802005 Nicolas Royer 2012-07-01 231 } 13802005 Nicolas Royer 2012-07-01 232 13802005 Nicolas Royer 2012-07-01 233 return 0; 13802005 Nicolas Royer 2012-07-01 234 } 13802005 Nicolas Royer 2012-07-01 235 1f858040 Nicolas Royer 2013-02-20 236 static inline unsigned int atmel_tdes_get_version(struct atmel_tdes_dev *dd) 1f858040 Nicolas Royer 2013-02-20 237 { 1f858040 Nicolas Royer 2013-02-20 238 return atmel_tdes_read(dd, TDES_HW_VERSION) & 0x00000fff; 1f858040 Nicolas Royer 2013-02-20 239 } 1f858040 Nicolas Royer 2013-02-20 240 1f858040 Nicolas Royer 2013-02-20 241 static void atmel_tdes_hw_version_init(struct atmel_tdes_dev *dd) 1f858040 Nicolas Royer 2013-02-20 242 { 1f858040 Nicolas Royer 2013-02-20 243 atmel_tdes_hw_init(dd); 1f858040 Nicolas Royer 2013-02-20 244 1f858040 Nicolas Royer 2013-02-20 245 dd->hw_version = atmel_tdes_get_version(dd); 1f858040 Nicolas Royer 2013-02-20 246 1f858040 Nicolas Royer 2013-02-20 247 dev_info(dd->dev, 1f858040 Nicolas Royer 2013-02-20 248 "version: 0x%x\n", dd->hw_version); 1f858040 Nicolas Royer 2013-02-20 249 1f858040 Nicolas Royer 2013-02-20 250 clk_disable_unprepare(dd->iclk); 1f858040 Nicolas Royer 2013-02-20 251 } 1f858040 Nicolas Royer 2013-02-20 252 1f858040 Nicolas Royer 2013-02-20 253 static void atmel_tdes_dma_callback(void *data) 1f858040 Nicolas Royer 2013-02-20 254 { 1f858040 Nicolas Royer 2013-02-20 255 struct atmel_tdes_dev *dd = data; 1f858040 Nicolas Royer 2013-02-20 256 1f858040 Nicolas Royer 2013-02-20 257 /* dma_lch_out - completed */ 1f858040 Nicolas Royer 2013-02-20 258 tasklet_schedule(&dd->done_task); 1f858040 Nicolas Royer 2013-02-20 259 } 1f858040 Nicolas Royer 2013-02-20 260 13802005 Nicolas Royer 2012-07-01 261 static int atmel_tdes_write_ctrl(struct atmel_tdes_dev *dd) 13802005 Nicolas Royer 2012-07-01 262 { 13802005 Nicolas Royer 2012-07-01 263 int err; 13802005 Nicolas Royer 2012-07-01 264 u32 valcr = 0, valmr = TDES_MR_SMOD_PDC; 13802005 Nicolas Royer 2012-07-01 265 13802005 Nicolas Royer 2012-07-01 266 err = atmel_tdes_hw_init(dd); 13802005 Nicolas Royer 2012-07-01 267 13802005 Nicolas Royer 2012-07-01 268 if (err) 13802005 Nicolas Royer 2012-07-01 269 return err; 13802005 Nicolas Royer 2012-07-01 270 1f858040 Nicolas Royer 2013-02-20 271 if (!dd->caps.has_dma) 1f858040 Nicolas Royer 2013-02-20 272 atmel_tdes_write(dd, TDES_PTCR, 1f858040 Nicolas Royer 2013-02-20 273 TDES_PTCR_TXTDIS | TDES_PTCR_RXTDIS); 13802005 Nicolas Royer 2012-07-01 274 13802005 Nicolas Royer 2012-07-01 275 /* MR register must be set before IV registers */ 13802005 Nicolas Royer 2012-07-01 276 if (dd->ctx->keylen > (DES_KEY_SIZE << 1)) { 13802005 Nicolas Royer 2012-07-01 277 valmr |= TDES_MR_KEYMOD_3KEY; 13802005 Nicolas Royer 2012-07-01 278 valmr |= TDES_MR_TDESMOD_TDES; 13802005 Nicolas Royer 2012-07-01 279 } else if (dd->ctx->keylen > DES_KEY_SIZE) { 13802005 Nicolas Royer 2012-07-01 280 valmr |= TDES_MR_KEYMOD_2KEY; 13802005 Nicolas Royer 2012-07-01 281 valmr |= TDES_MR_TDESMOD_TDES; 13802005 Nicolas Royer 2012-07-01 282 } else { 13802005 Nicolas Royer 2012-07-01 283 valmr |= TDES_MR_TDESMOD_DES; 13802005 Nicolas Royer 2012-07-01 284 } 13802005 Nicolas Royer 2012-07-01 285 13802005 Nicolas Royer 2012-07-01 286 if (dd->flags & TDES_FLAGS_CBC) { 13802005 Nicolas Royer 2012-07-01 287 valmr |= TDES_MR_OPMOD_CBC; 13802005 Nicolas Royer 2012-07-01 288 } else if (dd->flags & TDES_FLAGS_CFB) { 13802005 Nicolas Royer 2012-07-01 289 valmr |= TDES_MR_OPMOD_CFB; 13802005 Nicolas Royer 2012-07-01 290 13802005 Nicolas Royer 2012-07-01 291 if (dd->flags & TDES_FLAGS_CFB8) 13802005 Nicolas Royer 2012-07-01 292 valmr |= TDES_MR_CFBS_8b; 13802005 Nicolas Royer 2012-07-01 293 else if (dd->flags & TDES_FLAGS_CFB16) 13802005 Nicolas Royer 2012-07-01 294 valmr |= TDES_MR_CFBS_16b; 13802005 Nicolas Royer 2012-07-01 295 else if (dd->flags & TDES_FLAGS_CFB32) 13802005 Nicolas Royer 2012-07-01 296 valmr |= TDES_MR_CFBS_32b; 1f858040 Nicolas Royer 2013-02-20 297 else if (dd->flags & TDES_FLAGS_CFB64) 1f858040 Nicolas Royer 2013-02-20 298 valmr |= TDES_MR_CFBS_64b; 13802005 Nicolas Royer 2012-07-01 299 } else if (dd->flags & TDES_FLAGS_OFB) { 13802005 Nicolas Royer 2012-07-01 300 valmr |= TDES_MR_OPMOD_OFB; 13802005 Nicolas Royer 2012-07-01 301 } 13802005 Nicolas Royer 2012-07-01 302 13802005 Nicolas Royer 2012-07-01 303 if ((dd->flags & TDES_FLAGS_ENCRYPT) || (dd->flags & TDES_FLAGS_OFB)) 13802005 Nicolas Royer 2012-07-01 304 valmr |= TDES_MR_CYPHER_ENC; 13802005 Nicolas Royer 2012-07-01 305 13802005 Nicolas Royer 2012-07-01 306 atmel_tdes_write(dd, TDES_CR, valcr); 13802005 Nicolas Royer 2012-07-01 307 atmel_tdes_write(dd, TDES_MR, valmr); 13802005 Nicolas Royer 2012-07-01 308 13802005 Nicolas Royer 2012-07-01 309 atmel_tdes_write_n(dd, TDES_KEY1W1R, dd->ctx->key, 13802005 Nicolas Royer 2012-07-01 310 dd->ctx->keylen >> 2); 13802005 Nicolas Royer 2012-07-01 311 13802005 Nicolas Royer 2012-07-01 312 if (((dd->flags & TDES_FLAGS_CBC) || (dd->flags & TDES_FLAGS_CFB) || 13802005 Nicolas Royer 2012-07-01 313 (dd->flags & TDES_FLAGS_OFB)) && dd->req->info) { 13802005 Nicolas Royer 2012-07-01 314 atmel_tdes_write_n(dd, TDES_IV1R, dd->req->info, 2); 13802005 Nicolas Royer 2012-07-01 315 } 13802005 Nicolas Royer 2012-07-01 316 13802005 Nicolas Royer 2012-07-01 317 return 0; 13802005 Nicolas Royer 2012-07-01 318 } 13802005 Nicolas Royer 2012-07-01 319 1f858040 Nicolas Royer 2013-02-20 320 static int atmel_tdes_crypt_pdc_stop(struct atmel_tdes_dev *dd) 13802005 Nicolas Royer 2012-07-01 321 { 13802005 Nicolas Royer 2012-07-01 322 int err = 0; 13802005 Nicolas Royer 2012-07-01 323 size_t count; 13802005 Nicolas Royer 2012-07-01 324 13802005 Nicolas Royer 2012-07-01 325 atmel_tdes_write(dd, TDES_PTCR, TDES_PTCR_TXTDIS|TDES_PTCR_RXTDIS); 13802005 Nicolas Royer 2012-07-01 326 13802005 Nicolas Royer 2012-07-01 327 if (dd->flags & TDES_FLAGS_FAST) { 13802005 Nicolas Royer 2012-07-01 328 dma_unmap_sg(dd->dev, dd->out_sg, 1, DMA_FROM_DEVICE); 13802005 Nicolas Royer 2012-07-01 329 dma_unmap_sg(dd->dev, dd->in_sg, 1, DMA_TO_DEVICE); 13802005 Nicolas Royer 2012-07-01 330 } else { 13802005 Nicolas Royer 2012-07-01 331 dma_sync_single_for_device(dd->dev, dd->dma_addr_out, 13802005 Nicolas Royer 2012-07-01 332 dd->dma_size, DMA_FROM_DEVICE); 13802005 Nicolas Royer 2012-07-01 333 13802005 Nicolas Royer 2012-07-01 334 /* copy data */ 13802005 Nicolas Royer 2012-07-01 335 count = atmel_tdes_sg_copy(&dd->out_sg, &dd->out_offset, 13802005 Nicolas Royer 2012-07-01 336 dd->buf_out, dd->buflen, dd->dma_size, 1); 13802005 Nicolas Royer 2012-07-01 337 if (count != dd->dma_size) { 13802005 Nicolas Royer 2012-07-01 338 err = -EINVAL; 13802005 Nicolas Royer 2012-07-01 @339 pr_err("not all data converted: %u\n", count); 13802005 Nicolas Royer 2012-07-01 340 } 13802005 Nicolas Royer 2012-07-01 341 } 13802005 Nicolas Royer 2012-07-01 342 :::::: The code at line 157 was first introduced by commit :::::: 13802005d8f2db244ec1f5d7f6923de8f7a463db crypto: atmel - add Atmel DES/TDES driver :::::: TO: Nicolas Royer :::::: CC: Herbert Xu --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation