Re: crypto: atmel - Fix authenc compile test warnings

From: kbuild test robot
Date: Mon Feb 06 2017 - 07:55:08 EST


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 <linux/kernel.h>
13802005 Nicolas Royer 2012-07-01 18 #include <linux/module.h>
13802005 Nicolas Royer 2012-07-01 19 #include <linux/slab.h>
13802005 Nicolas Royer 2012-07-01 20 #include <linux/err.h>
13802005 Nicolas Royer 2012-07-01 21 #include <linux/clk.h>
13802005 Nicolas Royer 2012-07-01 22 #include <linux/io.h>
13802005 Nicolas Royer 2012-07-01 23 #include <linux/hw_random.h>
13802005 Nicolas Royer 2012-07-01 24 #include <linux/platform_device.h>
13802005 Nicolas Royer 2012-07-01 25
13802005 Nicolas Royer 2012-07-01 26 #include <linux/device.h>
13802005 Nicolas Royer 2012-07-01 27 #include <linux/init.h>
13802005 Nicolas Royer 2012-07-01 28 #include <linux/errno.h>
13802005 Nicolas Royer 2012-07-01 29 #include <linux/interrupt.h>
13802005 Nicolas Royer 2012-07-01 30 #include <linux/irq.h>
13802005 Nicolas Royer 2012-07-01 31 #include <linux/scatterlist.h>
13802005 Nicolas Royer 2012-07-01 32 #include <linux/dma-mapping.h>
84c8976b Nicolas Ferre 2013-10-15 33 #include <linux/of_device.h>
13802005 Nicolas Royer 2012-07-01 34 #include <linux/delay.h>
13802005 Nicolas Royer 2012-07-01 35 #include <linux/crypto.h>
13802005 Nicolas Royer 2012-07-01 36 #include <linux/cryptohash.h>
13802005 Nicolas Royer 2012-07-01 37 #include <crypto/scatterwalk.h>
13802005 Nicolas Royer 2012-07-01 38 #include <crypto/algapi.h>
13802005 Nicolas Royer 2012-07-01 39 #include <crypto/des.h>
13802005 Nicolas Royer 2012-07-01 40 #include <crypto/hash.h>
13802005 Nicolas Royer 2012-07-01 41 #include <crypto/internal/hash.h>
1f858040 Nicolas Royer 2013-02-20 42 #include <linux/platform_data/crypto-atmel.h>
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 <nicolas@xxxxxxxxxx>
:::::: CC: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip