xref: /openbmc/linux/drivers/crypto/n2_core.c (revision 1ab1d63a)
1 /* n2_core.c: Niagara2 Stream Processing Unit (SPU) crypto support.
2  *
3  * Copyright (C) 2010 David S. Miller <davem@davemloft.net>
4  */
5 
6 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
7 
8 #include <linux/kernel.h>
9 #include <linux/module.h>
10 #include <linux/of.h>
11 #include <linux/of_device.h>
12 #include <linux/cpumask.h>
13 #include <linux/slab.h>
14 #include <linux/interrupt.h>
15 #include <linux/crypto.h>
16 #include <crypto/md5.h>
17 #include <crypto/sha.h>
18 #include <crypto/aes.h>
19 #include <crypto/des.h>
20 #include <linux/mutex.h>
21 #include <linux/delay.h>
22 #include <linux/sched.h>
23 
24 #include <crypto/internal/hash.h>
25 #include <crypto/scatterwalk.h>
26 #include <crypto/algapi.h>
27 
28 #include <asm/hypervisor.h>
29 #include <asm/mdesc.h>
30 
31 #include "n2_core.h"
32 
33 #define DRV_MODULE_NAME		"n2_crypto"
34 #define DRV_MODULE_VERSION	"0.1"
35 #define DRV_MODULE_RELDATE	"April 29, 2010"
36 
37 static char version[] __devinitdata =
38 	DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
39 
40 MODULE_AUTHOR("David S. Miller (davem@davemloft.net)");
41 MODULE_DESCRIPTION("Niagara2 Crypto driver");
42 MODULE_LICENSE("GPL");
43 MODULE_VERSION(DRV_MODULE_VERSION);
44 
45 #define N2_CRA_PRIORITY		300
46 
47 static DEFINE_MUTEX(spu_lock);
48 
49 struct spu_queue {
50 	cpumask_t		sharing;
51 	unsigned long		qhandle;
52 
53 	spinlock_t		lock;
54 	u8			q_type;
55 	void			*q;
56 	unsigned long		head;
57 	unsigned long		tail;
58 	struct list_head	jobs;
59 
60 	unsigned long		devino;
61 
62 	char			irq_name[32];
63 	unsigned int		irq;
64 
65 	struct list_head	list;
66 };
67 
68 static struct spu_queue **cpu_to_cwq;
69 static struct spu_queue **cpu_to_mau;
70 
71 static unsigned long spu_next_offset(struct spu_queue *q, unsigned long off)
72 {
73 	if (q->q_type == HV_NCS_QTYPE_MAU) {
74 		off += MAU_ENTRY_SIZE;
75 		if (off == (MAU_ENTRY_SIZE * MAU_NUM_ENTRIES))
76 			off = 0;
77 	} else {
78 		off += CWQ_ENTRY_SIZE;
79 		if (off == (CWQ_ENTRY_SIZE * CWQ_NUM_ENTRIES))
80 			off = 0;
81 	}
82 	return off;
83 }
84 
85 struct n2_request_common {
86 	struct list_head	entry;
87 	unsigned int		offset;
88 };
89 #define OFFSET_NOT_RUNNING	(~(unsigned int)0)
90 
91 /* An async job request records the final tail value it used in
92  * n2_request_common->offset, test to see if that offset is in
93  * the range old_head, new_head, inclusive.
94  */
95 static inline bool job_finished(struct spu_queue *q, unsigned int offset,
96 				unsigned long old_head, unsigned long new_head)
97 {
98 	if (old_head <= new_head) {
99 		if (offset > old_head && offset <= new_head)
100 			return true;
101 	} else {
102 		if (offset > old_head || offset <= new_head)
103 			return true;
104 	}
105 	return false;
106 }
107 
108 /* When the HEAD marker is unequal to the actual HEAD, we get
109  * a virtual device INO interrupt.  We should process the
110  * completed CWQ entries and adjust the HEAD marker to clear
111  * the IRQ.
112  */
113 static irqreturn_t cwq_intr(int irq, void *dev_id)
114 {
115 	unsigned long off, new_head, hv_ret;
116 	struct spu_queue *q = dev_id;
117 
118 	pr_err("CPU[%d]: Got CWQ interrupt for qhdl[%lx]\n",
119 	       smp_processor_id(), q->qhandle);
120 
121 	spin_lock(&q->lock);
122 
123 	hv_ret = sun4v_ncs_gethead(q->qhandle, &new_head);
124 
125 	pr_err("CPU[%d]: CWQ gethead[%lx] hv_ret[%lu]\n",
126 	       smp_processor_id(), new_head, hv_ret);
127 
128 	for (off = q->head; off != new_head; off = spu_next_offset(q, off)) {
129 		/* XXX ... XXX */
130 	}
131 
132 	hv_ret = sun4v_ncs_sethead_marker(q->qhandle, new_head);
133 	if (hv_ret == HV_EOK)
134 		q->head = new_head;
135 
136 	spin_unlock(&q->lock);
137 
138 	return IRQ_HANDLED;
139 }
140 
141 static irqreturn_t mau_intr(int irq, void *dev_id)
142 {
143 	struct spu_queue *q = dev_id;
144 	unsigned long head, hv_ret;
145 
146 	spin_lock(&q->lock);
147 
148 	pr_err("CPU[%d]: Got MAU interrupt for qhdl[%lx]\n",
149 	       smp_processor_id(), q->qhandle);
150 
151 	hv_ret = sun4v_ncs_gethead(q->qhandle, &head);
152 
153 	pr_err("CPU[%d]: MAU gethead[%lx] hv_ret[%lu]\n",
154 	       smp_processor_id(), head, hv_ret);
155 
156 	sun4v_ncs_sethead_marker(q->qhandle, head);
157 
158 	spin_unlock(&q->lock);
159 
160 	return IRQ_HANDLED;
161 }
162 
163 static void *spu_queue_next(struct spu_queue *q, void *cur)
164 {
165 	return q->q + spu_next_offset(q, cur - q->q);
166 }
167 
168 static int spu_queue_num_free(struct spu_queue *q)
169 {
170 	unsigned long head = q->head;
171 	unsigned long tail = q->tail;
172 	unsigned long end = (CWQ_ENTRY_SIZE * CWQ_NUM_ENTRIES);
173 	unsigned long diff;
174 
175 	if (head > tail)
176 		diff = head - tail;
177 	else
178 		diff = (end - tail) + head;
179 
180 	return (diff / CWQ_ENTRY_SIZE) - 1;
181 }
182 
183 static void *spu_queue_alloc(struct spu_queue *q, int num_entries)
184 {
185 	int avail = spu_queue_num_free(q);
186 
187 	if (avail >= num_entries)
188 		return q->q + q->tail;
189 
190 	return NULL;
191 }
192 
193 static unsigned long spu_queue_submit(struct spu_queue *q, void *last)
194 {
195 	unsigned long hv_ret, new_tail;
196 
197 	new_tail = spu_next_offset(q, last - q->q);
198 
199 	hv_ret = sun4v_ncs_settail(q->qhandle, new_tail);
200 	if (hv_ret == HV_EOK)
201 		q->tail = new_tail;
202 	return hv_ret;
203 }
204 
205 static u64 control_word_base(unsigned int len, unsigned int hmac_key_len,
206 			     int enc_type, int auth_type,
207 			     unsigned int hash_len,
208 			     bool sfas, bool sob, bool eob, bool encrypt,
209 			     int opcode)
210 {
211 	u64 word = (len - 1) & CONTROL_LEN;
212 
213 	word |= ((u64) opcode << CONTROL_OPCODE_SHIFT);
214 	word |= ((u64) enc_type << CONTROL_ENC_TYPE_SHIFT);
215 	word |= ((u64) auth_type << CONTROL_AUTH_TYPE_SHIFT);
216 	if (sfas)
217 		word |= CONTROL_STORE_FINAL_AUTH_STATE;
218 	if (sob)
219 		word |= CONTROL_START_OF_BLOCK;
220 	if (eob)
221 		word |= CONTROL_END_OF_BLOCK;
222 	if (encrypt)
223 		word |= CONTROL_ENCRYPT;
224 	if (hmac_key_len)
225 		word |= ((u64) (hmac_key_len - 1)) << CONTROL_HMAC_KEY_LEN_SHIFT;
226 	if (hash_len)
227 		word |= ((u64) (hash_len - 1)) << CONTROL_HASH_LEN_SHIFT;
228 
229 	return word;
230 }
231 
232 #if 0
233 static inline bool n2_should_run_async(struct spu_queue *qp, int this_len)
234 {
235 	if (this_len >= 64 ||
236 	    qp->head != qp->tail)
237 		return true;
238 	return false;
239 }
240 #endif
241 
242 struct n2_base_ctx {
243 	struct list_head		list;
244 };
245 
246 static void n2_base_ctx_init(struct n2_base_ctx *ctx)
247 {
248 	INIT_LIST_HEAD(&ctx->list);
249 }
250 
251 struct n2_hash_ctx {
252 	struct n2_base_ctx		base;
253 
254 	struct crypto_ahash		*fallback_tfm;
255 };
256 
257 struct n2_hash_req_ctx {
258 	union {
259 		struct md5_state	md5;
260 		struct sha1_state	sha1;
261 		struct sha256_state	sha256;
262 	} u;
263 
264 	unsigned char			hash_key[64];
265 	unsigned char			keyed_zero_hash[32];
266 
267 	struct ahash_request		fallback_req;
268 };
269 
270 static int n2_hash_async_init(struct ahash_request *req)
271 {
272 	struct n2_hash_req_ctx *rctx = ahash_request_ctx(req);
273 	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
274 	struct n2_hash_ctx *ctx = crypto_ahash_ctx(tfm);
275 
276 	ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
277 	rctx->fallback_req.base.flags = req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP;
278 
279 	return crypto_ahash_init(&rctx->fallback_req);
280 }
281 
282 static int n2_hash_async_update(struct ahash_request *req)
283 {
284 	struct n2_hash_req_ctx *rctx = ahash_request_ctx(req);
285 	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
286 	struct n2_hash_ctx *ctx = crypto_ahash_ctx(tfm);
287 
288 	ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
289 	rctx->fallback_req.base.flags = req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP;
290 	rctx->fallback_req.nbytes = req->nbytes;
291 	rctx->fallback_req.src = req->src;
292 
293 	return crypto_ahash_update(&rctx->fallback_req);
294 }
295 
296 static int n2_hash_async_final(struct ahash_request *req)
297 {
298 	struct n2_hash_req_ctx *rctx = ahash_request_ctx(req);
299 	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
300 	struct n2_hash_ctx *ctx = crypto_ahash_ctx(tfm);
301 
302 	ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
303 	rctx->fallback_req.base.flags = req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP;
304 	rctx->fallback_req.result = req->result;
305 
306 	return crypto_ahash_final(&rctx->fallback_req);
307 }
308 
309 static int n2_hash_async_finup(struct ahash_request *req)
310 {
311 	struct n2_hash_req_ctx *rctx = ahash_request_ctx(req);
312 	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
313 	struct n2_hash_ctx *ctx = crypto_ahash_ctx(tfm);
314 
315 	ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
316 	rctx->fallback_req.base.flags = req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP;
317 	rctx->fallback_req.nbytes = req->nbytes;
318 	rctx->fallback_req.src = req->src;
319 	rctx->fallback_req.result = req->result;
320 
321 	return crypto_ahash_finup(&rctx->fallback_req);
322 }
323 
324 static int n2_hash_cra_init(struct crypto_tfm *tfm)
325 {
326 	const char *fallback_driver_name = tfm->__crt_alg->cra_name;
327 	struct crypto_ahash *ahash = __crypto_ahash_cast(tfm);
328 	struct n2_hash_ctx *ctx = crypto_ahash_ctx(ahash);
329 	struct crypto_ahash *fallback_tfm;
330 	int err;
331 
332 	fallback_tfm = crypto_alloc_ahash(fallback_driver_name, 0,
333 					  CRYPTO_ALG_NEED_FALLBACK);
334 	if (IS_ERR(fallback_tfm)) {
335 		pr_warning("Fallback driver '%s' could not be loaded!\n",
336 			   fallback_driver_name);
337 		err = PTR_ERR(fallback_tfm);
338 		goto out;
339 	}
340 
341 	crypto_ahash_set_reqsize(ahash, (sizeof(struct n2_hash_req_ctx) +
342 					 crypto_ahash_reqsize(fallback_tfm)));
343 
344 	ctx->fallback_tfm = fallback_tfm;
345 	return 0;
346 
347 out:
348 	return err;
349 }
350 
351 static void n2_hash_cra_exit(struct crypto_tfm *tfm)
352 {
353 	struct crypto_ahash *ahash = __crypto_ahash_cast(tfm);
354 	struct n2_hash_ctx *ctx = crypto_ahash_ctx(ahash);
355 
356 	crypto_free_ahash(ctx->fallback_tfm);
357 }
358 
359 static unsigned long wait_for_tail(struct spu_queue *qp)
360 {
361 	unsigned long head, hv_ret;
362 
363 	do {
364 		hv_ret = sun4v_ncs_gethead(qp->qhandle, &head);
365 		if (hv_ret != HV_EOK) {
366 			pr_err("Hypervisor error on gethead\n");
367 			break;
368 		}
369 		if (head == qp->tail) {
370 			qp->head = head;
371 			break;
372 		}
373 	} while (1);
374 	return hv_ret;
375 }
376 
377 static unsigned long submit_and_wait_for_tail(struct spu_queue *qp,
378 					      struct cwq_initial_entry *ent)
379 {
380 	unsigned long hv_ret = spu_queue_submit(qp, ent);
381 
382 	if (hv_ret == HV_EOK)
383 		hv_ret = wait_for_tail(qp);
384 
385 	return hv_ret;
386 }
387 
388 static int n2_hash_async_digest(struct ahash_request *req,
389 				unsigned int auth_type, unsigned int digest_size,
390 				unsigned int result_size, void *hash_loc)
391 {
392 	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
393 	struct n2_hash_ctx *ctx = crypto_ahash_ctx(tfm);
394 	struct cwq_initial_entry *ent;
395 	struct crypto_hash_walk walk;
396 	struct spu_queue *qp;
397 	unsigned long flags;
398 	int err = -ENODEV;
399 	int nbytes, cpu;
400 
401 	/* The total effective length of the operation may not
402 	 * exceed 2^16.
403 	 */
404 	if (unlikely(req->nbytes > (1 << 16))) {
405 		struct n2_hash_req_ctx *rctx = ahash_request_ctx(req);
406 
407 		ahash_request_set_tfm(&rctx->fallback_req, ctx->fallback_tfm);
408 		rctx->fallback_req.base.flags =
409 			req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP;
410 		rctx->fallback_req.nbytes = req->nbytes;
411 		rctx->fallback_req.src = req->src;
412 		rctx->fallback_req.result = req->result;
413 
414 		return crypto_ahash_digest(&rctx->fallback_req);
415 	}
416 
417 	n2_base_ctx_init(&ctx->base);
418 
419 	nbytes = crypto_hash_walk_first(req, &walk);
420 
421 	cpu = get_cpu();
422 	qp = cpu_to_cwq[cpu];
423 	if (!qp)
424 		goto out;
425 
426 	spin_lock_irqsave(&qp->lock, flags);
427 
428 	/* XXX can do better, improve this later by doing a by-hand scatterlist
429 	 * XXX walk, etc.
430 	 */
431 	ent = qp->q + qp->tail;
432 
433 	ent->control = control_word_base(nbytes, 0, 0,
434 					 auth_type, digest_size,
435 					 false, true, false, false,
436 					 OPCODE_INPLACE_BIT |
437 					 OPCODE_AUTH_MAC);
438 	ent->src_addr = __pa(walk.data);
439 	ent->auth_key_addr = 0UL;
440 	ent->auth_iv_addr = __pa(hash_loc);
441 	ent->final_auth_state_addr = 0UL;
442 	ent->enc_key_addr = 0UL;
443 	ent->enc_iv_addr = 0UL;
444 	ent->dest_addr = __pa(hash_loc);
445 
446 	nbytes = crypto_hash_walk_done(&walk, 0);
447 	while (nbytes > 0) {
448 		ent = spu_queue_next(qp, ent);
449 
450 		ent->control = (nbytes - 1);
451 		ent->src_addr = __pa(walk.data);
452 		ent->auth_key_addr = 0UL;
453 		ent->auth_iv_addr = 0UL;
454 		ent->final_auth_state_addr = 0UL;
455 		ent->enc_key_addr = 0UL;
456 		ent->enc_iv_addr = 0UL;
457 		ent->dest_addr = 0UL;
458 
459 		nbytes = crypto_hash_walk_done(&walk, 0);
460 	}
461 	ent->control |= CONTROL_END_OF_BLOCK;
462 
463 	if (submit_and_wait_for_tail(qp, ent) != HV_EOK)
464 		err = -EINVAL;
465 	else
466 		err = 0;
467 
468 	spin_unlock_irqrestore(&qp->lock, flags);
469 
470 	if (!err)
471 		memcpy(req->result, hash_loc, result_size);
472 out:
473 	put_cpu();
474 
475 	return err;
476 }
477 
478 static int n2_md5_async_digest(struct ahash_request *req)
479 {
480 	struct n2_hash_req_ctx *rctx = ahash_request_ctx(req);
481 	struct md5_state *m = &rctx->u.md5;
482 
483 	if (unlikely(req->nbytes == 0)) {
484 		static const char md5_zero[MD5_DIGEST_SIZE] = {
485 			0xd4, 0x1d, 0x8c, 0xd9, 0x8f, 0x00, 0xb2, 0x04,
486 			0xe9, 0x80, 0x09, 0x98, 0xec, 0xf8, 0x42, 0x7e,
487 		};
488 
489 		memcpy(req->result, md5_zero, MD5_DIGEST_SIZE);
490 		return 0;
491 	}
492 	m->hash[0] = cpu_to_le32(0x67452301);
493 	m->hash[1] = cpu_to_le32(0xefcdab89);
494 	m->hash[2] = cpu_to_le32(0x98badcfe);
495 	m->hash[3] = cpu_to_le32(0x10325476);
496 
497 	return n2_hash_async_digest(req, AUTH_TYPE_MD5,
498 				    MD5_DIGEST_SIZE, MD5_DIGEST_SIZE,
499 				    m->hash);
500 }
501 
502 static int n2_sha1_async_digest(struct ahash_request *req)
503 {
504 	struct n2_hash_req_ctx *rctx = ahash_request_ctx(req);
505 	struct sha1_state *s = &rctx->u.sha1;
506 
507 	if (unlikely(req->nbytes == 0)) {
508 		static const char sha1_zero[SHA1_DIGEST_SIZE] = {
509 			0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b, 0x0d, 0x32,
510 			0x55, 0xbf, 0xef, 0x95, 0x60, 0x18, 0x90, 0xaf, 0xd8,
511 			0x07, 0x09
512 		};
513 
514 		memcpy(req->result, sha1_zero, SHA1_DIGEST_SIZE);
515 		return 0;
516 	}
517 	s->state[0] = SHA1_H0;
518 	s->state[1] = SHA1_H1;
519 	s->state[2] = SHA1_H2;
520 	s->state[3] = SHA1_H3;
521 	s->state[4] = SHA1_H4;
522 
523 	return n2_hash_async_digest(req, AUTH_TYPE_SHA1,
524 				    SHA1_DIGEST_SIZE, SHA1_DIGEST_SIZE,
525 				    s->state);
526 }
527 
528 static int n2_sha256_async_digest(struct ahash_request *req)
529 {
530 	struct n2_hash_req_ctx *rctx = ahash_request_ctx(req);
531 	struct sha256_state *s = &rctx->u.sha256;
532 
533 	if (req->nbytes == 0) {
534 		static const char sha256_zero[SHA256_DIGEST_SIZE] = {
535 			0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a,
536 			0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae,
537 			0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99,
538 			0x1b, 0x78, 0x52, 0xb8, 0x55
539 		};
540 
541 		memcpy(req->result, sha256_zero, SHA256_DIGEST_SIZE);
542 		return 0;
543 	}
544 	s->state[0] = SHA256_H0;
545 	s->state[1] = SHA256_H1;
546 	s->state[2] = SHA256_H2;
547 	s->state[3] = SHA256_H3;
548 	s->state[4] = SHA256_H4;
549 	s->state[5] = SHA256_H5;
550 	s->state[6] = SHA256_H6;
551 	s->state[7] = SHA256_H7;
552 
553 	return n2_hash_async_digest(req, AUTH_TYPE_SHA256,
554 				    SHA256_DIGEST_SIZE, SHA256_DIGEST_SIZE,
555 				    s->state);
556 }
557 
558 static int n2_sha224_async_digest(struct ahash_request *req)
559 {
560 	struct n2_hash_req_ctx *rctx = ahash_request_ctx(req);
561 	struct sha256_state *s = &rctx->u.sha256;
562 
563 	if (req->nbytes == 0) {
564 		static const char sha224_zero[SHA224_DIGEST_SIZE] = {
565 			0xd1, 0x4a, 0x02, 0x8c, 0x2a, 0x3a, 0x2b, 0xc9, 0x47,
566 			0x61, 0x02, 0xbb, 0x28, 0x82, 0x34, 0xc4, 0x15, 0xa2,
567 			0xb0, 0x1f, 0x82, 0x8e, 0xa6, 0x2a, 0xc5, 0xb3, 0xe4,
568 			0x2f
569 		};
570 
571 		memcpy(req->result, sha224_zero, SHA224_DIGEST_SIZE);
572 		return 0;
573 	}
574 	s->state[0] = SHA224_H0;
575 	s->state[1] = SHA224_H1;
576 	s->state[2] = SHA224_H2;
577 	s->state[3] = SHA224_H3;
578 	s->state[4] = SHA224_H4;
579 	s->state[5] = SHA224_H5;
580 	s->state[6] = SHA224_H6;
581 	s->state[7] = SHA224_H7;
582 
583 	return n2_hash_async_digest(req, AUTH_TYPE_SHA256,
584 				    SHA256_DIGEST_SIZE, SHA224_DIGEST_SIZE,
585 				    s->state);
586 }
587 
588 struct n2_cipher_context {
589 	int			key_len;
590 	int			enc_type;
591 	union {
592 		u8		aes[AES_MAX_KEY_SIZE];
593 		u8		des[DES_KEY_SIZE];
594 		u8		des3[3 * DES_KEY_SIZE];
595 		u8		arc4[258]; /* S-box, X, Y */
596 	} key;
597 };
598 
599 #define N2_CHUNK_ARR_LEN	16
600 
601 struct n2_crypto_chunk {
602 	struct list_head	entry;
603 	unsigned long		iv_paddr : 44;
604 	unsigned long		arr_len : 20;
605 	unsigned long		dest_paddr;
606 	unsigned long		dest_final;
607 	struct {
608 		unsigned long	src_paddr : 44;
609 		unsigned long	src_len : 20;
610 	} arr[N2_CHUNK_ARR_LEN];
611 };
612 
613 struct n2_request_context {
614 	struct ablkcipher_walk	walk;
615 	struct list_head	chunk_list;
616 	struct n2_crypto_chunk	chunk;
617 	u8			temp_iv[16];
618 };
619 
620 /* The SPU allows some level of flexibility for partial cipher blocks
621  * being specified in a descriptor.
622  *
623  * It merely requires that every descriptor's length field is at least
624  * as large as the cipher block size.  This means that a cipher block
625  * can span at most 2 descriptors.  However, this does not allow a
626  * partial block to span into the final descriptor as that would
627  * violate the rule (since every descriptor's length must be at lest
628  * the block size).  So, for example, assuming an 8 byte block size:
629  *
630  *	0xe --> 0xa --> 0x8
631  *
632  * is a valid length sequence, whereas:
633  *
634  *	0xe --> 0xb --> 0x7
635  *
636  * is not a valid sequence.
637  */
638 
639 struct n2_cipher_alg {
640 	struct list_head	entry;
641 	u8			enc_type;
642 	struct crypto_alg	alg;
643 };
644 
645 static inline struct n2_cipher_alg *n2_cipher_alg(struct crypto_tfm *tfm)
646 {
647 	struct crypto_alg *alg = tfm->__crt_alg;
648 
649 	return container_of(alg, struct n2_cipher_alg, alg);
650 }
651 
652 struct n2_cipher_request_context {
653 	struct ablkcipher_walk	walk;
654 };
655 
656 static int n2_aes_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
657 			 unsigned int keylen)
658 {
659 	struct crypto_tfm *tfm = crypto_ablkcipher_tfm(cipher);
660 	struct n2_cipher_context *ctx = crypto_tfm_ctx(tfm);
661 	struct n2_cipher_alg *n2alg = n2_cipher_alg(tfm);
662 
663 	ctx->enc_type = (n2alg->enc_type & ENC_TYPE_CHAINING_MASK);
664 
665 	switch (keylen) {
666 	case AES_KEYSIZE_128:
667 		ctx->enc_type |= ENC_TYPE_ALG_AES128;
668 		break;
669 	case AES_KEYSIZE_192:
670 		ctx->enc_type |= ENC_TYPE_ALG_AES192;
671 		break;
672 	case AES_KEYSIZE_256:
673 		ctx->enc_type |= ENC_TYPE_ALG_AES256;
674 		break;
675 	default:
676 		crypto_ablkcipher_set_flags(cipher, CRYPTO_TFM_RES_BAD_KEY_LEN);
677 		return -EINVAL;
678 	}
679 
680 	ctx->key_len = keylen;
681 	memcpy(ctx->key.aes, key, keylen);
682 	return 0;
683 }
684 
685 static int n2_des_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
686 			 unsigned int keylen)
687 {
688 	struct crypto_tfm *tfm = crypto_ablkcipher_tfm(cipher);
689 	struct n2_cipher_context *ctx = crypto_tfm_ctx(tfm);
690 	struct n2_cipher_alg *n2alg = n2_cipher_alg(tfm);
691 	u32 tmp[DES_EXPKEY_WORDS];
692 	int err;
693 
694 	ctx->enc_type = n2alg->enc_type;
695 
696 	if (keylen != DES_KEY_SIZE) {
697 		crypto_ablkcipher_set_flags(cipher, CRYPTO_TFM_RES_BAD_KEY_LEN);
698 		return -EINVAL;
699 	}
700 
701 	err = des_ekey(tmp, key);
702 	if (err == 0 && (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) {
703 		tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
704 		return -EINVAL;
705 	}
706 
707 	ctx->key_len = keylen;
708 	memcpy(ctx->key.des, key, keylen);
709 	return 0;
710 }
711 
712 static int n2_3des_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
713 			  unsigned int keylen)
714 {
715 	struct crypto_tfm *tfm = crypto_ablkcipher_tfm(cipher);
716 	struct n2_cipher_context *ctx = crypto_tfm_ctx(tfm);
717 	struct n2_cipher_alg *n2alg = n2_cipher_alg(tfm);
718 
719 	ctx->enc_type = n2alg->enc_type;
720 
721 	if (keylen != (3 * DES_KEY_SIZE)) {
722 		crypto_ablkcipher_set_flags(cipher, CRYPTO_TFM_RES_BAD_KEY_LEN);
723 		return -EINVAL;
724 	}
725 	ctx->key_len = keylen;
726 	memcpy(ctx->key.des3, key, keylen);
727 	return 0;
728 }
729 
730 static int n2_arc4_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
731 			  unsigned int keylen)
732 {
733 	struct crypto_tfm *tfm = crypto_ablkcipher_tfm(cipher);
734 	struct n2_cipher_context *ctx = crypto_tfm_ctx(tfm);
735 	struct n2_cipher_alg *n2alg = n2_cipher_alg(tfm);
736 	u8 *s = ctx->key.arc4;
737 	u8 *x = s + 256;
738 	u8 *y = x + 1;
739 	int i, j, k;
740 
741 	ctx->enc_type = n2alg->enc_type;
742 
743 	j = k = 0;
744 	*x = 0;
745 	*y = 0;
746 	for (i = 0; i < 256; i++)
747 		s[i] = i;
748 	for (i = 0; i < 256; i++) {
749 		u8 a = s[i];
750 		j = (j + key[k] + a) & 0xff;
751 		s[i] = s[j];
752 		s[j] = a;
753 		if (++k >= keylen)
754 			k = 0;
755 	}
756 
757 	return 0;
758 }
759 
760 static inline int cipher_descriptor_len(int nbytes, unsigned int block_size)
761 {
762 	int this_len = nbytes;
763 
764 	this_len -= (nbytes & (block_size - 1));
765 	return this_len > (1 << 16) ? (1 << 16) : this_len;
766 }
767 
768 static int __n2_crypt_chunk(struct crypto_tfm *tfm, struct n2_crypto_chunk *cp,
769 			    struct spu_queue *qp, bool encrypt)
770 {
771 	struct n2_cipher_context *ctx = crypto_tfm_ctx(tfm);
772 	struct cwq_initial_entry *ent;
773 	bool in_place;
774 	int i;
775 
776 	ent = spu_queue_alloc(qp, cp->arr_len);
777 	if (!ent) {
778 		pr_info("queue_alloc() of %d fails\n",
779 			cp->arr_len);
780 		return -EBUSY;
781 	}
782 
783 	in_place = (cp->dest_paddr == cp->arr[0].src_paddr);
784 
785 	ent->control = control_word_base(cp->arr[0].src_len,
786 					 0, ctx->enc_type, 0, 0,
787 					 false, true, false, encrypt,
788 					 OPCODE_ENCRYPT |
789 					 (in_place ? OPCODE_INPLACE_BIT : 0));
790 	ent->src_addr = cp->arr[0].src_paddr;
791 	ent->auth_key_addr = 0UL;
792 	ent->auth_iv_addr = 0UL;
793 	ent->final_auth_state_addr = 0UL;
794 	ent->enc_key_addr = __pa(&ctx->key);
795 	ent->enc_iv_addr = cp->iv_paddr;
796 	ent->dest_addr = (in_place ? 0UL : cp->dest_paddr);
797 
798 	for (i = 1; i < cp->arr_len; i++) {
799 		ent = spu_queue_next(qp, ent);
800 
801 		ent->control = cp->arr[i].src_len - 1;
802 		ent->src_addr = cp->arr[i].src_paddr;
803 		ent->auth_key_addr = 0UL;
804 		ent->auth_iv_addr = 0UL;
805 		ent->final_auth_state_addr = 0UL;
806 		ent->enc_key_addr = 0UL;
807 		ent->enc_iv_addr = 0UL;
808 		ent->dest_addr = 0UL;
809 	}
810 	ent->control |= CONTROL_END_OF_BLOCK;
811 
812 	return (spu_queue_submit(qp, ent) != HV_EOK) ? -EINVAL : 0;
813 }
814 
815 static int n2_compute_chunks(struct ablkcipher_request *req)
816 {
817 	struct n2_request_context *rctx = ablkcipher_request_ctx(req);
818 	struct ablkcipher_walk *walk = &rctx->walk;
819 	struct n2_crypto_chunk *chunk;
820 	unsigned long dest_prev;
821 	unsigned int tot_len;
822 	bool prev_in_place;
823 	int err, nbytes;
824 
825 	ablkcipher_walk_init(walk, req->dst, req->src, req->nbytes);
826 	err = ablkcipher_walk_phys(req, walk);
827 	if (err)
828 		return err;
829 
830 	INIT_LIST_HEAD(&rctx->chunk_list);
831 
832 	chunk = &rctx->chunk;
833 	INIT_LIST_HEAD(&chunk->entry);
834 
835 	chunk->iv_paddr = 0UL;
836 	chunk->arr_len = 0;
837 	chunk->dest_paddr = 0UL;
838 
839 	prev_in_place = false;
840 	dest_prev = ~0UL;
841 	tot_len = 0;
842 
843 	while ((nbytes = walk->nbytes) != 0) {
844 		unsigned long dest_paddr, src_paddr;
845 		bool in_place;
846 		int this_len;
847 
848 		src_paddr = (page_to_phys(walk->src.page) +
849 			     walk->src.offset);
850 		dest_paddr = (page_to_phys(walk->dst.page) +
851 			      walk->dst.offset);
852 		in_place = (src_paddr == dest_paddr);
853 		this_len = cipher_descriptor_len(nbytes, walk->blocksize);
854 
855 		if (chunk->arr_len != 0) {
856 			if (in_place != prev_in_place ||
857 			    (!prev_in_place &&
858 			     dest_paddr != dest_prev) ||
859 			    chunk->arr_len == N2_CHUNK_ARR_LEN ||
860 			    tot_len + this_len > (1 << 16)) {
861 				chunk->dest_final = dest_prev;
862 				list_add_tail(&chunk->entry,
863 					      &rctx->chunk_list);
864 				chunk = kzalloc(sizeof(*chunk), GFP_ATOMIC);
865 				if (!chunk) {
866 					err = -ENOMEM;
867 					break;
868 				}
869 				INIT_LIST_HEAD(&chunk->entry);
870 			}
871 		}
872 		if (chunk->arr_len == 0) {
873 			chunk->dest_paddr = dest_paddr;
874 			tot_len = 0;
875 		}
876 		chunk->arr[chunk->arr_len].src_paddr = src_paddr;
877 		chunk->arr[chunk->arr_len].src_len = this_len;
878 		chunk->arr_len++;
879 
880 		dest_prev = dest_paddr + this_len;
881 		prev_in_place = in_place;
882 		tot_len += this_len;
883 
884 		err = ablkcipher_walk_done(req, walk, nbytes - this_len);
885 		if (err)
886 			break;
887 	}
888 	if (!err && chunk->arr_len != 0) {
889 		chunk->dest_final = dest_prev;
890 		list_add_tail(&chunk->entry, &rctx->chunk_list);
891 	}
892 
893 	return err;
894 }
895 
896 static void n2_chunk_complete(struct ablkcipher_request *req, void *final_iv)
897 {
898 	struct n2_request_context *rctx = ablkcipher_request_ctx(req);
899 	struct n2_crypto_chunk *c, *tmp;
900 
901 	if (final_iv)
902 		memcpy(rctx->walk.iv, final_iv, rctx->walk.blocksize);
903 
904 	ablkcipher_walk_complete(&rctx->walk);
905 	list_for_each_entry_safe(c, tmp, &rctx->chunk_list, entry) {
906 		list_del(&c->entry);
907 		if (unlikely(c != &rctx->chunk))
908 			kfree(c);
909 	}
910 
911 }
912 
913 static int n2_do_ecb(struct ablkcipher_request *req, bool encrypt)
914 {
915 	struct n2_request_context *rctx = ablkcipher_request_ctx(req);
916 	struct crypto_tfm *tfm = req->base.tfm;
917 	int err = n2_compute_chunks(req);
918 	struct n2_crypto_chunk *c, *tmp;
919 	unsigned long flags, hv_ret;
920 	struct spu_queue *qp;
921 
922 	if (err)
923 		return err;
924 
925 	qp = cpu_to_cwq[get_cpu()];
926 	err = -ENODEV;
927 	if (!qp)
928 		goto out;
929 
930 	spin_lock_irqsave(&qp->lock, flags);
931 
932 	list_for_each_entry_safe(c, tmp, &rctx->chunk_list, entry) {
933 		err = __n2_crypt_chunk(tfm, c, qp, encrypt);
934 		if (err)
935 			break;
936 		list_del(&c->entry);
937 		if (unlikely(c != &rctx->chunk))
938 			kfree(c);
939 	}
940 	if (!err) {
941 		hv_ret = wait_for_tail(qp);
942 		if (hv_ret != HV_EOK)
943 			err = -EINVAL;
944 	}
945 
946 	spin_unlock_irqrestore(&qp->lock, flags);
947 
948 	put_cpu();
949 
950 out:
951 	n2_chunk_complete(req, NULL);
952 	return err;
953 }
954 
955 static int n2_encrypt_ecb(struct ablkcipher_request *req)
956 {
957 	return n2_do_ecb(req, true);
958 }
959 
960 static int n2_decrypt_ecb(struct ablkcipher_request *req)
961 {
962 	return n2_do_ecb(req, false);
963 }
964 
965 static int n2_do_chaining(struct ablkcipher_request *req, bool encrypt)
966 {
967 	struct n2_request_context *rctx = ablkcipher_request_ctx(req);
968 	struct crypto_tfm *tfm = req->base.tfm;
969 	unsigned long flags, hv_ret, iv_paddr;
970 	int err = n2_compute_chunks(req);
971 	struct n2_crypto_chunk *c, *tmp;
972 	struct spu_queue *qp;
973 	void *final_iv_addr;
974 
975 	final_iv_addr = NULL;
976 
977 	if (err)
978 		return err;
979 
980 	qp = cpu_to_cwq[get_cpu()];
981 	err = -ENODEV;
982 	if (!qp)
983 		goto out;
984 
985 	spin_lock_irqsave(&qp->lock, flags);
986 
987 	if (encrypt) {
988 		iv_paddr = __pa(rctx->walk.iv);
989 		list_for_each_entry_safe(c, tmp, &rctx->chunk_list,
990 					 entry) {
991 			c->iv_paddr = iv_paddr;
992 			err = __n2_crypt_chunk(tfm, c, qp, true);
993 			if (err)
994 				break;
995 			iv_paddr = c->dest_final - rctx->walk.blocksize;
996 			list_del(&c->entry);
997 			if (unlikely(c != &rctx->chunk))
998 				kfree(c);
999 		}
1000 		final_iv_addr = __va(iv_paddr);
1001 	} else {
1002 		list_for_each_entry_safe_reverse(c, tmp, &rctx->chunk_list,
1003 						 entry) {
1004 			if (c == &rctx->chunk) {
1005 				iv_paddr = __pa(rctx->walk.iv);
1006 			} else {
1007 				iv_paddr = (tmp->arr[tmp->arr_len-1].src_paddr +
1008 					    tmp->arr[tmp->arr_len-1].src_len -
1009 					    rctx->walk.blocksize);
1010 			}
1011 			if (!final_iv_addr) {
1012 				unsigned long pa;
1013 
1014 				pa = (c->arr[c->arr_len-1].src_paddr +
1015 				      c->arr[c->arr_len-1].src_len -
1016 				      rctx->walk.blocksize);
1017 				final_iv_addr = rctx->temp_iv;
1018 				memcpy(rctx->temp_iv, __va(pa),
1019 				       rctx->walk.blocksize);
1020 			}
1021 			c->iv_paddr = iv_paddr;
1022 			err = __n2_crypt_chunk(tfm, c, qp, false);
1023 			if (err)
1024 				break;
1025 			list_del(&c->entry);
1026 			if (unlikely(c != &rctx->chunk))
1027 				kfree(c);
1028 		}
1029 	}
1030 	if (!err) {
1031 		hv_ret = wait_for_tail(qp);
1032 		if (hv_ret != HV_EOK)
1033 			err = -EINVAL;
1034 	}
1035 
1036 	spin_unlock_irqrestore(&qp->lock, flags);
1037 
1038 	put_cpu();
1039 
1040 out:
1041 	n2_chunk_complete(req, err ? NULL : final_iv_addr);
1042 	return err;
1043 }
1044 
1045 static int n2_encrypt_chaining(struct ablkcipher_request *req)
1046 {
1047 	return n2_do_chaining(req, true);
1048 }
1049 
1050 static int n2_decrypt_chaining(struct ablkcipher_request *req)
1051 {
1052 	return n2_do_chaining(req, false);
1053 }
1054 
1055 struct n2_cipher_tmpl {
1056 	const char		*name;
1057 	const char		*drv_name;
1058 	u8			block_size;
1059 	u8			enc_type;
1060 	struct ablkcipher_alg	ablkcipher;
1061 };
1062 
1063 static const struct n2_cipher_tmpl cipher_tmpls[] = {
1064 	/* ARC4: only ECB is supported (chaining bits ignored) */
1065 	{	.name		= "ecb(arc4)",
1066 		.drv_name	= "ecb-arc4",
1067 		.block_size	= 1,
1068 		.enc_type	= (ENC_TYPE_ALG_RC4_STREAM |
1069 				   ENC_TYPE_CHAINING_ECB),
1070 		.ablkcipher	= {
1071 			.min_keysize	= 1,
1072 			.max_keysize	= 256,
1073 			.setkey		= n2_arc4_setkey,
1074 			.encrypt	= n2_encrypt_ecb,
1075 			.decrypt	= n2_decrypt_ecb,
1076 		},
1077 	},
1078 
1079 	/* DES: ECB CBC and CFB are supported */
1080 	{	.name		= "ecb(des)",
1081 		.drv_name	= "ecb-des",
1082 		.block_size	= DES_BLOCK_SIZE,
1083 		.enc_type	= (ENC_TYPE_ALG_DES |
1084 				   ENC_TYPE_CHAINING_ECB),
1085 		.ablkcipher	= {
1086 			.min_keysize	= DES_KEY_SIZE,
1087 			.max_keysize	= DES_KEY_SIZE,
1088 			.setkey		= n2_des_setkey,
1089 			.encrypt	= n2_encrypt_ecb,
1090 			.decrypt	= n2_decrypt_ecb,
1091 		},
1092 	},
1093 	{	.name		= "cbc(des)",
1094 		.drv_name	= "cbc-des",
1095 		.block_size	= DES_BLOCK_SIZE,
1096 		.enc_type	= (ENC_TYPE_ALG_DES |
1097 				   ENC_TYPE_CHAINING_CBC),
1098 		.ablkcipher	= {
1099 			.ivsize		= DES_BLOCK_SIZE,
1100 			.min_keysize	= DES_KEY_SIZE,
1101 			.max_keysize	= DES_KEY_SIZE,
1102 			.setkey		= n2_des_setkey,
1103 			.encrypt	= n2_encrypt_chaining,
1104 			.decrypt	= n2_decrypt_chaining,
1105 		},
1106 	},
1107 	{	.name		= "cfb(des)",
1108 		.drv_name	= "cfb-des",
1109 		.block_size	= DES_BLOCK_SIZE,
1110 		.enc_type	= (ENC_TYPE_ALG_DES |
1111 				   ENC_TYPE_CHAINING_CFB),
1112 		.ablkcipher	= {
1113 			.min_keysize	= DES_KEY_SIZE,
1114 			.max_keysize	= DES_KEY_SIZE,
1115 			.setkey		= n2_des_setkey,
1116 			.encrypt	= n2_encrypt_chaining,
1117 			.decrypt	= n2_decrypt_chaining,
1118 		},
1119 	},
1120 
1121 	/* 3DES: ECB CBC and CFB are supported */
1122 	{	.name		= "ecb(des3_ede)",
1123 		.drv_name	= "ecb-3des",
1124 		.block_size	= DES_BLOCK_SIZE,
1125 		.enc_type	= (ENC_TYPE_ALG_3DES |
1126 				   ENC_TYPE_CHAINING_ECB),
1127 		.ablkcipher	= {
1128 			.min_keysize	= 3 * DES_KEY_SIZE,
1129 			.max_keysize	= 3 * DES_KEY_SIZE,
1130 			.setkey		= n2_3des_setkey,
1131 			.encrypt	= n2_encrypt_ecb,
1132 			.decrypt	= n2_decrypt_ecb,
1133 		},
1134 	},
1135 	{	.name		= "cbc(des3_ede)",
1136 		.drv_name	= "cbc-3des",
1137 		.block_size	= DES_BLOCK_SIZE,
1138 		.enc_type	= (ENC_TYPE_ALG_3DES |
1139 				   ENC_TYPE_CHAINING_CBC),
1140 		.ablkcipher	= {
1141 			.ivsize		= DES_BLOCK_SIZE,
1142 			.min_keysize	= 3 * DES_KEY_SIZE,
1143 			.max_keysize	= 3 * DES_KEY_SIZE,
1144 			.setkey		= n2_3des_setkey,
1145 			.encrypt	= n2_encrypt_chaining,
1146 			.decrypt	= n2_decrypt_chaining,
1147 		},
1148 	},
1149 	{	.name		= "cfb(des3_ede)",
1150 		.drv_name	= "cfb-3des",
1151 		.block_size	= DES_BLOCK_SIZE,
1152 		.enc_type	= (ENC_TYPE_ALG_3DES |
1153 				   ENC_TYPE_CHAINING_CFB),
1154 		.ablkcipher	= {
1155 			.min_keysize	= 3 * DES_KEY_SIZE,
1156 			.max_keysize	= 3 * DES_KEY_SIZE,
1157 			.setkey		= n2_3des_setkey,
1158 			.encrypt	= n2_encrypt_chaining,
1159 			.decrypt	= n2_decrypt_chaining,
1160 		},
1161 	},
1162 	/* AES: ECB CBC and CTR are supported */
1163 	{	.name		= "ecb(aes)",
1164 		.drv_name	= "ecb-aes",
1165 		.block_size	= AES_BLOCK_SIZE,
1166 		.enc_type	= (ENC_TYPE_ALG_AES128 |
1167 				   ENC_TYPE_CHAINING_ECB),
1168 		.ablkcipher	= {
1169 			.min_keysize	= AES_MIN_KEY_SIZE,
1170 			.max_keysize	= AES_MAX_KEY_SIZE,
1171 			.setkey		= n2_aes_setkey,
1172 			.encrypt	= n2_encrypt_ecb,
1173 			.decrypt	= n2_decrypt_ecb,
1174 		},
1175 	},
1176 	{	.name		= "cbc(aes)",
1177 		.drv_name	= "cbc-aes",
1178 		.block_size	= AES_BLOCK_SIZE,
1179 		.enc_type	= (ENC_TYPE_ALG_AES128 |
1180 				   ENC_TYPE_CHAINING_CBC),
1181 		.ablkcipher	= {
1182 			.ivsize		= AES_BLOCK_SIZE,
1183 			.min_keysize	= AES_MIN_KEY_SIZE,
1184 			.max_keysize	= AES_MAX_KEY_SIZE,
1185 			.setkey		= n2_aes_setkey,
1186 			.encrypt	= n2_encrypt_chaining,
1187 			.decrypt	= n2_decrypt_chaining,
1188 		},
1189 	},
1190 	{	.name		= "ctr(aes)",
1191 		.drv_name	= "ctr-aes",
1192 		.block_size	= AES_BLOCK_SIZE,
1193 		.enc_type	= (ENC_TYPE_ALG_AES128 |
1194 				   ENC_TYPE_CHAINING_COUNTER),
1195 		.ablkcipher	= {
1196 			.ivsize		= AES_BLOCK_SIZE,
1197 			.min_keysize	= AES_MIN_KEY_SIZE,
1198 			.max_keysize	= AES_MAX_KEY_SIZE,
1199 			.setkey		= n2_aes_setkey,
1200 			.encrypt	= n2_encrypt_chaining,
1201 			.decrypt	= n2_encrypt_chaining,
1202 		},
1203 	},
1204 
1205 };
1206 #define NUM_CIPHER_TMPLS ARRAY_SIZE(cipher_tmpls)
1207 
1208 static LIST_HEAD(cipher_algs);
1209 
1210 struct n2_hash_tmpl {
1211 	const char	*name;
1212 	int		(*digest)(struct ahash_request *req);
1213 	u8		digest_size;
1214 	u8		block_size;
1215 };
1216 static const struct n2_hash_tmpl hash_tmpls[] = {
1217 	{ .name		= "md5",
1218 	  .digest	= n2_md5_async_digest,
1219 	  .digest_size	= MD5_DIGEST_SIZE,
1220 	  .block_size	= MD5_HMAC_BLOCK_SIZE },
1221 	{ .name		= "sha1",
1222 	  .digest	= n2_sha1_async_digest,
1223 	  .digest_size	= SHA1_DIGEST_SIZE,
1224 	  .block_size	= SHA1_BLOCK_SIZE },
1225 	{ .name		= "sha256",
1226 	  .digest	= n2_sha256_async_digest,
1227 	  .digest_size	= SHA256_DIGEST_SIZE,
1228 	  .block_size	= SHA256_BLOCK_SIZE },
1229 	{ .name		= "sha224",
1230 	  .digest	= n2_sha224_async_digest,
1231 	  .digest_size	= SHA224_DIGEST_SIZE,
1232 	  .block_size	= SHA224_BLOCK_SIZE },
1233 };
1234 #define NUM_HASH_TMPLS ARRAY_SIZE(hash_tmpls)
1235 
1236 struct n2_ahash_alg {
1237 	struct list_head	entry;
1238 	struct ahash_alg	alg;
1239 };
1240 static LIST_HEAD(ahash_algs);
1241 
1242 static int algs_registered;
1243 
1244 static void __n2_unregister_algs(void)
1245 {
1246 	struct n2_cipher_alg *cipher, *cipher_tmp;
1247 	struct n2_ahash_alg *alg, *alg_tmp;
1248 
1249 	list_for_each_entry_safe(cipher, cipher_tmp, &cipher_algs, entry) {
1250 		crypto_unregister_alg(&cipher->alg);
1251 		list_del(&cipher->entry);
1252 		kfree(cipher);
1253 	}
1254 	list_for_each_entry_safe(alg, alg_tmp, &ahash_algs, entry) {
1255 		crypto_unregister_ahash(&alg->alg);
1256 		list_del(&alg->entry);
1257 		kfree(alg);
1258 	}
1259 }
1260 
1261 static int n2_cipher_cra_init(struct crypto_tfm *tfm)
1262 {
1263 	tfm->crt_ablkcipher.reqsize = sizeof(struct n2_request_context);
1264 	return 0;
1265 }
1266 
1267 static int __devinit __n2_register_one_cipher(const struct n2_cipher_tmpl *tmpl)
1268 {
1269 	struct n2_cipher_alg *p = kzalloc(sizeof(*p), GFP_KERNEL);
1270 	struct crypto_alg *alg;
1271 	int err;
1272 
1273 	if (!p)
1274 		return -ENOMEM;
1275 
1276 	alg = &p->alg;
1277 
1278 	snprintf(alg->cra_name, CRYPTO_MAX_ALG_NAME, "%s", tmpl->name);
1279 	snprintf(alg->cra_driver_name, CRYPTO_MAX_ALG_NAME, "%s-n2", tmpl->drv_name);
1280 	alg->cra_priority = N2_CRA_PRIORITY;
1281 	alg->cra_flags = CRYPTO_ALG_TYPE_ABLKCIPHER | CRYPTO_ALG_ASYNC;
1282 	alg->cra_blocksize = tmpl->block_size;
1283 	p->enc_type = tmpl->enc_type;
1284 	alg->cra_ctxsize = sizeof(struct n2_cipher_context);
1285 	alg->cra_type = &crypto_ablkcipher_type;
1286 	alg->cra_u.ablkcipher = tmpl->ablkcipher;
1287 	alg->cra_init = n2_cipher_cra_init;
1288 	alg->cra_module = THIS_MODULE;
1289 
1290 	list_add(&p->entry, &cipher_algs);
1291 	err = crypto_register_alg(alg);
1292 	if (err) {
1293 		list_del(&p->entry);
1294 		kfree(p);
1295 	}
1296 	return err;
1297 }
1298 
1299 static int __devinit __n2_register_one_ahash(const struct n2_hash_tmpl *tmpl)
1300 {
1301 	struct n2_ahash_alg *p = kzalloc(sizeof(*p), GFP_KERNEL);
1302 	struct hash_alg_common *halg;
1303 	struct crypto_alg *base;
1304 	struct ahash_alg *ahash;
1305 	int err;
1306 
1307 	if (!p)
1308 		return -ENOMEM;
1309 
1310 	ahash = &p->alg;
1311 	ahash->init = n2_hash_async_init;
1312 	ahash->update = n2_hash_async_update;
1313 	ahash->final = n2_hash_async_final;
1314 	ahash->finup = n2_hash_async_finup;
1315 	ahash->digest = tmpl->digest;
1316 
1317 	halg = &ahash->halg;
1318 	halg->digestsize = tmpl->digest_size;
1319 
1320 	base = &halg->base;
1321 	snprintf(base->cra_name, CRYPTO_MAX_ALG_NAME, "%s", tmpl->name);
1322 	snprintf(base->cra_driver_name, CRYPTO_MAX_ALG_NAME, "%s-n2", tmpl->name);
1323 	base->cra_priority = N2_CRA_PRIORITY;
1324 	base->cra_flags = CRYPTO_ALG_TYPE_AHASH | CRYPTO_ALG_NEED_FALLBACK;
1325 	base->cra_blocksize = tmpl->block_size;
1326 	base->cra_ctxsize = sizeof(struct n2_hash_ctx);
1327 	base->cra_module = THIS_MODULE;
1328 	base->cra_init = n2_hash_cra_init;
1329 	base->cra_exit = n2_hash_cra_exit;
1330 
1331 	list_add(&p->entry, &ahash_algs);
1332 	err = crypto_register_ahash(ahash);
1333 	if (err) {
1334 		list_del(&p->entry);
1335 		kfree(p);
1336 	}
1337 	return err;
1338 }
1339 
1340 static int __devinit n2_register_algs(void)
1341 {
1342 	int i, err = 0;
1343 
1344 	mutex_lock(&spu_lock);
1345 	if (algs_registered++)
1346 		goto out;
1347 
1348 	for (i = 0; i < NUM_HASH_TMPLS; i++) {
1349 		err = __n2_register_one_ahash(&hash_tmpls[i]);
1350 		if (err) {
1351 			__n2_unregister_algs();
1352 			goto out;
1353 		}
1354 	}
1355 	for (i = 0; i < NUM_CIPHER_TMPLS; i++) {
1356 		err = __n2_register_one_cipher(&cipher_tmpls[i]);
1357 		if (err) {
1358 			__n2_unregister_algs();
1359 			goto out;
1360 		}
1361 	}
1362 
1363 out:
1364 	mutex_unlock(&spu_lock);
1365 	return err;
1366 }
1367 
1368 static void __exit n2_unregister_algs(void)
1369 {
1370 	mutex_lock(&spu_lock);
1371 	if (!--algs_registered)
1372 		__n2_unregister_algs();
1373 	mutex_unlock(&spu_lock);
1374 }
1375 
1376 /* To map CWQ queues to interrupt sources, the hypervisor API provides
1377  * a devino.  This isn't very useful to us because all of the
1378  * interrupts listed in the of_device node have been translated to
1379  * Linux virtual IRQ cookie numbers.
1380  *
1381  * So we have to back-translate, going through the 'intr' and 'ino'
1382  * property tables of the n2cp MDESC node, matching it with the OF
1383  * 'interrupts' property entries, in order to to figure out which
1384  * devino goes to which already-translated IRQ.
1385  */
1386 static int find_devino_index(struct of_device *dev, struct spu_mdesc_info *ip,
1387 			     unsigned long dev_ino)
1388 {
1389 	const unsigned int *dev_intrs;
1390 	unsigned int intr;
1391 	int i;
1392 
1393 	for (i = 0; i < ip->num_intrs; i++) {
1394 		if (ip->ino_table[i].ino == dev_ino)
1395 			break;
1396 	}
1397 	if (i == ip->num_intrs)
1398 		return -ENODEV;
1399 
1400 	intr = ip->ino_table[i].intr;
1401 
1402 	dev_intrs = of_get_property(dev->dev.of_node, "interrupts", NULL);
1403 	if (!dev_intrs)
1404 		return -ENODEV;
1405 
1406 	for (i = 0; i < dev->num_irqs; i++) {
1407 		if (dev_intrs[i] == intr)
1408 			return i;
1409 	}
1410 
1411 	return -ENODEV;
1412 }
1413 
1414 static int spu_map_ino(struct of_device *dev, struct spu_mdesc_info *ip,
1415 		       const char *irq_name, struct spu_queue *p,
1416 		       irq_handler_t handler)
1417 {
1418 	unsigned long herr;
1419 	int index;
1420 
1421 	herr = sun4v_ncs_qhandle_to_devino(p->qhandle, &p->devino);
1422 	if (herr)
1423 		return -EINVAL;
1424 
1425 	index = find_devino_index(dev, ip, p->devino);
1426 	if (index < 0)
1427 		return index;
1428 
1429 	p->irq = dev->irqs[index];
1430 
1431 	sprintf(p->irq_name, "%s-%d", irq_name, index);
1432 
1433 	return request_irq(p->irq, handler, IRQF_SAMPLE_RANDOM,
1434 			   p->irq_name, p);
1435 }
1436 
1437 static struct kmem_cache *queue_cache[2];
1438 
1439 static void *new_queue(unsigned long q_type)
1440 {
1441 	return kmem_cache_zalloc(queue_cache[q_type - 1], GFP_KERNEL);
1442 }
1443 
1444 static void free_queue(void *p, unsigned long q_type)
1445 {
1446 	return kmem_cache_free(queue_cache[q_type - 1], p);
1447 }
1448 
1449 static int queue_cache_init(void)
1450 {
1451 	if (!queue_cache[HV_NCS_QTYPE_MAU - 1])
1452 		queue_cache[HV_NCS_QTYPE_MAU - 1] =
1453 			kmem_cache_create("mau_queue",
1454 					  (MAU_NUM_ENTRIES *
1455 					   MAU_ENTRY_SIZE),
1456 					  MAU_ENTRY_SIZE, 0, NULL);
1457 	if (!queue_cache[HV_NCS_QTYPE_MAU - 1])
1458 		return -ENOMEM;
1459 
1460 	if (!queue_cache[HV_NCS_QTYPE_CWQ - 1])
1461 		queue_cache[HV_NCS_QTYPE_CWQ - 1] =
1462 			kmem_cache_create("cwq_queue",
1463 					  (CWQ_NUM_ENTRIES *
1464 					   CWQ_ENTRY_SIZE),
1465 					  CWQ_ENTRY_SIZE, 0, NULL);
1466 	if (!queue_cache[HV_NCS_QTYPE_CWQ - 1]) {
1467 		kmem_cache_destroy(queue_cache[HV_NCS_QTYPE_MAU - 1]);
1468 		return -ENOMEM;
1469 	}
1470 	return 0;
1471 }
1472 
1473 static void queue_cache_destroy(void)
1474 {
1475 	kmem_cache_destroy(queue_cache[HV_NCS_QTYPE_MAU - 1]);
1476 	kmem_cache_destroy(queue_cache[HV_NCS_QTYPE_CWQ - 1]);
1477 }
1478 
1479 static int spu_queue_register(struct spu_queue *p, unsigned long q_type)
1480 {
1481 	cpumask_var_t old_allowed;
1482 	unsigned long hv_ret;
1483 
1484 	if (cpumask_empty(&p->sharing))
1485 		return -EINVAL;
1486 
1487 	if (!alloc_cpumask_var(&old_allowed, GFP_KERNEL))
1488 		return -ENOMEM;
1489 
1490 	cpumask_copy(old_allowed, &current->cpus_allowed);
1491 
1492 	set_cpus_allowed_ptr(current, &p->sharing);
1493 
1494 	hv_ret = sun4v_ncs_qconf(q_type, __pa(p->q),
1495 				 CWQ_NUM_ENTRIES, &p->qhandle);
1496 	if (!hv_ret)
1497 		sun4v_ncs_sethead_marker(p->qhandle, 0);
1498 
1499 	set_cpus_allowed_ptr(current, old_allowed);
1500 
1501 	free_cpumask_var(old_allowed);
1502 
1503 	return (hv_ret ? -EINVAL : 0);
1504 }
1505 
1506 static int spu_queue_setup(struct spu_queue *p)
1507 {
1508 	int err;
1509 
1510 	p->q = new_queue(p->q_type);
1511 	if (!p->q)
1512 		return -ENOMEM;
1513 
1514 	err = spu_queue_register(p, p->q_type);
1515 	if (err) {
1516 		free_queue(p->q, p->q_type);
1517 		p->q = NULL;
1518 	}
1519 
1520 	return err;
1521 }
1522 
1523 static void spu_queue_destroy(struct spu_queue *p)
1524 {
1525 	unsigned long hv_ret;
1526 
1527 	if (!p->q)
1528 		return;
1529 
1530 	hv_ret = sun4v_ncs_qconf(p->q_type, p->qhandle, 0, &p->qhandle);
1531 
1532 	if (!hv_ret)
1533 		free_queue(p->q, p->q_type);
1534 }
1535 
1536 static void spu_list_destroy(struct list_head *list)
1537 {
1538 	struct spu_queue *p, *n;
1539 
1540 	list_for_each_entry_safe(p, n, list, list) {
1541 		int i;
1542 
1543 		for (i = 0; i < NR_CPUS; i++) {
1544 			if (cpu_to_cwq[i] == p)
1545 				cpu_to_cwq[i] = NULL;
1546 		}
1547 
1548 		if (p->irq) {
1549 			free_irq(p->irq, p);
1550 			p->irq = 0;
1551 		}
1552 		spu_queue_destroy(p);
1553 		list_del(&p->list);
1554 		kfree(p);
1555 	}
1556 }
1557 
1558 /* Walk the backward arcs of a CWQ 'exec-unit' node,
1559  * gathering cpu membership information.
1560  */
1561 static int spu_mdesc_walk_arcs(struct mdesc_handle *mdesc,
1562 			       struct of_device *dev,
1563 			       u64 node, struct spu_queue *p,
1564 			       struct spu_queue **table)
1565 {
1566 	u64 arc;
1567 
1568 	mdesc_for_each_arc(arc, mdesc, node, MDESC_ARC_TYPE_BACK) {
1569 		u64 tgt = mdesc_arc_target(mdesc, arc);
1570 		const char *name = mdesc_node_name(mdesc, tgt);
1571 		const u64 *id;
1572 
1573 		if (strcmp(name, "cpu"))
1574 			continue;
1575 		id = mdesc_get_property(mdesc, tgt, "id", NULL);
1576 		if (table[*id] != NULL) {
1577 			dev_err(&dev->dev, "%s: SPU cpu slot already set.\n",
1578 				dev->dev.of_node->full_name);
1579 			return -EINVAL;
1580 		}
1581 		cpu_set(*id, p->sharing);
1582 		table[*id] = p;
1583 	}
1584 	return 0;
1585 }
1586 
1587 /* Process an 'exec-unit' MDESC node of type 'cwq'.  */
1588 static int handle_exec_unit(struct spu_mdesc_info *ip, struct list_head *list,
1589 			    struct of_device *dev, struct mdesc_handle *mdesc,
1590 			    u64 node, const char *iname, unsigned long q_type,
1591 			    irq_handler_t handler, struct spu_queue **table)
1592 {
1593 	struct spu_queue *p;
1594 	int err;
1595 
1596 	p = kzalloc(sizeof(struct spu_queue), GFP_KERNEL);
1597 	if (!p) {
1598 		dev_err(&dev->dev, "%s: Could not allocate SPU queue.\n",
1599 			dev->dev.of_node->full_name);
1600 		return -ENOMEM;
1601 	}
1602 
1603 	cpus_clear(p->sharing);
1604 	spin_lock_init(&p->lock);
1605 	p->q_type = q_type;
1606 	INIT_LIST_HEAD(&p->jobs);
1607 	list_add(&p->list, list);
1608 
1609 	err = spu_mdesc_walk_arcs(mdesc, dev, node, p, table);
1610 	if (err)
1611 		return err;
1612 
1613 	err = spu_queue_setup(p);
1614 	if (err)
1615 		return err;
1616 
1617 	return spu_map_ino(dev, ip, iname, p, handler);
1618 }
1619 
1620 static int spu_mdesc_scan(struct mdesc_handle *mdesc, struct of_device *dev,
1621 			  struct spu_mdesc_info *ip, struct list_head *list,
1622 			  const char *exec_name, unsigned long q_type,
1623 			  irq_handler_t handler, struct spu_queue **table)
1624 {
1625 	int err = 0;
1626 	u64 node;
1627 
1628 	mdesc_for_each_node_by_name(mdesc, node, "exec-unit") {
1629 		const char *type;
1630 
1631 		type = mdesc_get_property(mdesc, node, "type", NULL);
1632 		if (!type || strcmp(type, exec_name))
1633 			continue;
1634 
1635 		err = handle_exec_unit(ip, list, dev, mdesc, node,
1636 				       exec_name, q_type, handler, table);
1637 		if (err) {
1638 			spu_list_destroy(list);
1639 			break;
1640 		}
1641 	}
1642 
1643 	return err;
1644 }
1645 
1646 static int __devinit get_irq_props(struct mdesc_handle *mdesc, u64 node,
1647 				   struct spu_mdesc_info *ip)
1648 {
1649 	const u64 *intr, *ino;
1650 	int intr_len, ino_len;
1651 	int i;
1652 
1653 	intr = mdesc_get_property(mdesc, node, "intr", &intr_len);
1654 	if (!intr)
1655 		return -ENODEV;
1656 
1657 	ino = mdesc_get_property(mdesc, node, "ino", &ino_len);
1658 	if (!intr)
1659 		return -ENODEV;
1660 
1661 	if (intr_len != ino_len)
1662 		return -EINVAL;
1663 
1664 	ip->num_intrs = intr_len / sizeof(u64);
1665 	ip->ino_table = kzalloc((sizeof(struct ino_blob) *
1666 				 ip->num_intrs),
1667 				GFP_KERNEL);
1668 	if (!ip->ino_table)
1669 		return -ENOMEM;
1670 
1671 	for (i = 0; i < ip->num_intrs; i++) {
1672 		struct ino_blob *b = &ip->ino_table[i];
1673 		b->intr = intr[i];
1674 		b->ino = ino[i];
1675 	}
1676 
1677 	return 0;
1678 }
1679 
1680 static int __devinit grab_mdesc_irq_props(struct mdesc_handle *mdesc,
1681 					  struct of_device *dev,
1682 					  struct spu_mdesc_info *ip,
1683 					  const char *node_name)
1684 {
1685 	const unsigned int *reg;
1686 	u64 node;
1687 
1688 	reg = of_get_property(dev->dev.of_node, "reg", NULL);
1689 	if (!reg)
1690 		return -ENODEV;
1691 
1692 	mdesc_for_each_node_by_name(mdesc, node, "virtual-device") {
1693 		const char *name;
1694 		const u64 *chdl;
1695 
1696 		name = mdesc_get_property(mdesc, node, "name", NULL);
1697 		if (!name || strcmp(name, node_name))
1698 			continue;
1699 		chdl = mdesc_get_property(mdesc, node, "cfg-handle", NULL);
1700 		if (!chdl || (*chdl != *reg))
1701 			continue;
1702 		ip->cfg_handle = *chdl;
1703 		return get_irq_props(mdesc, node, ip);
1704 	}
1705 
1706 	return -ENODEV;
1707 }
1708 
1709 static unsigned long n2_spu_hvapi_major;
1710 static unsigned long n2_spu_hvapi_minor;
1711 
1712 static int __devinit n2_spu_hvapi_register(void)
1713 {
1714 	int err;
1715 
1716 	n2_spu_hvapi_major = 2;
1717 	n2_spu_hvapi_minor = 0;
1718 
1719 	err = sun4v_hvapi_register(HV_GRP_NCS,
1720 				   n2_spu_hvapi_major,
1721 				   &n2_spu_hvapi_minor);
1722 
1723 	if (!err)
1724 		pr_info("Registered NCS HVAPI version %lu.%lu\n",
1725 			n2_spu_hvapi_major,
1726 			n2_spu_hvapi_minor);
1727 
1728 	return err;
1729 }
1730 
1731 static void n2_spu_hvapi_unregister(void)
1732 {
1733 	sun4v_hvapi_unregister(HV_GRP_NCS);
1734 }
1735 
1736 static int global_ref;
1737 
1738 static int __devinit grab_global_resources(void)
1739 {
1740 	int err = 0;
1741 
1742 	mutex_lock(&spu_lock);
1743 
1744 	if (global_ref++)
1745 		goto out;
1746 
1747 	err = n2_spu_hvapi_register();
1748 	if (err)
1749 		goto out;
1750 
1751 	err = queue_cache_init();
1752 	if (err)
1753 		goto out_hvapi_release;
1754 
1755 	err = -ENOMEM;
1756 	cpu_to_cwq = kzalloc(sizeof(struct spu_queue *) * NR_CPUS,
1757 			     GFP_KERNEL);
1758 	if (!cpu_to_cwq)
1759 		goto out_queue_cache_destroy;
1760 
1761 	cpu_to_mau = kzalloc(sizeof(struct spu_queue *) * NR_CPUS,
1762 			     GFP_KERNEL);
1763 	if (!cpu_to_mau)
1764 		goto out_free_cwq_table;
1765 
1766 	err = 0;
1767 
1768 out:
1769 	if (err)
1770 		global_ref--;
1771 	mutex_unlock(&spu_lock);
1772 	return err;
1773 
1774 out_free_cwq_table:
1775 	kfree(cpu_to_cwq);
1776 	cpu_to_cwq = NULL;
1777 
1778 out_queue_cache_destroy:
1779 	queue_cache_destroy();
1780 
1781 out_hvapi_release:
1782 	n2_spu_hvapi_unregister();
1783 	goto out;
1784 }
1785 
1786 static void release_global_resources(void)
1787 {
1788 	mutex_lock(&spu_lock);
1789 	if (!--global_ref) {
1790 		kfree(cpu_to_cwq);
1791 		cpu_to_cwq = NULL;
1792 
1793 		kfree(cpu_to_mau);
1794 		cpu_to_mau = NULL;
1795 
1796 		queue_cache_destroy();
1797 		n2_spu_hvapi_unregister();
1798 	}
1799 	mutex_unlock(&spu_lock);
1800 }
1801 
1802 static struct n2_crypto * __devinit alloc_n2cp(void)
1803 {
1804 	struct n2_crypto *np = kzalloc(sizeof(struct n2_crypto), GFP_KERNEL);
1805 
1806 	if (np)
1807 		INIT_LIST_HEAD(&np->cwq_list);
1808 
1809 	return np;
1810 }
1811 
1812 static void free_n2cp(struct n2_crypto *np)
1813 {
1814 	if (np->cwq_info.ino_table) {
1815 		kfree(np->cwq_info.ino_table);
1816 		np->cwq_info.ino_table = NULL;
1817 	}
1818 
1819 	kfree(np);
1820 }
1821 
1822 static void __devinit n2_spu_driver_version(void)
1823 {
1824 	static int n2_spu_version_printed;
1825 
1826 	if (n2_spu_version_printed++ == 0)
1827 		pr_info("%s", version);
1828 }
1829 
1830 static int __devinit n2_crypto_probe(struct of_device *dev,
1831 				     const struct of_device_id *match)
1832 {
1833 	struct mdesc_handle *mdesc;
1834 	const char *full_name;
1835 	struct n2_crypto *np;
1836 	int err;
1837 
1838 	n2_spu_driver_version();
1839 
1840 	full_name = dev->dev.of_node->full_name;
1841 	pr_info("Found N2CP at %s\n", full_name);
1842 
1843 	np = alloc_n2cp();
1844 	if (!np) {
1845 		dev_err(&dev->dev, "%s: Unable to allocate n2cp.\n",
1846 			full_name);
1847 		return -ENOMEM;
1848 	}
1849 
1850 	err = grab_global_resources();
1851 	if (err) {
1852 		dev_err(&dev->dev, "%s: Unable to grab "
1853 			"global resources.\n", full_name);
1854 		goto out_free_n2cp;
1855 	}
1856 
1857 	mdesc = mdesc_grab();
1858 
1859 	if (!mdesc) {
1860 		dev_err(&dev->dev, "%s: Unable to grab MDESC.\n",
1861 			full_name);
1862 		err = -ENODEV;
1863 		goto out_free_global;
1864 	}
1865 	err = grab_mdesc_irq_props(mdesc, dev, &np->cwq_info, "n2cp");
1866 	if (err) {
1867 		dev_err(&dev->dev, "%s: Unable to grab IRQ props.\n",
1868 			full_name);
1869 		mdesc_release(mdesc);
1870 		goto out_free_global;
1871 	}
1872 
1873 	err = spu_mdesc_scan(mdesc, dev, &np->cwq_info, &np->cwq_list,
1874 			     "cwq", HV_NCS_QTYPE_CWQ, cwq_intr,
1875 			     cpu_to_cwq);
1876 	mdesc_release(mdesc);
1877 
1878 	if (err) {
1879 		dev_err(&dev->dev, "%s: CWQ MDESC scan failed.\n",
1880 			full_name);
1881 		goto out_free_global;
1882 	}
1883 
1884 	err = n2_register_algs();
1885 	if (err) {
1886 		dev_err(&dev->dev, "%s: Unable to register algorithms.\n",
1887 			full_name);
1888 		goto out_free_spu_list;
1889 	}
1890 
1891 	dev_set_drvdata(&dev->dev, np);
1892 
1893 	return 0;
1894 
1895 out_free_spu_list:
1896 	spu_list_destroy(&np->cwq_list);
1897 
1898 out_free_global:
1899 	release_global_resources();
1900 
1901 out_free_n2cp:
1902 	free_n2cp(np);
1903 
1904 	return err;
1905 }
1906 
1907 static int __devexit n2_crypto_remove(struct of_device *dev)
1908 {
1909 	struct n2_crypto *np = dev_get_drvdata(&dev->dev);
1910 
1911 	n2_unregister_algs();
1912 
1913 	spu_list_destroy(&np->cwq_list);
1914 
1915 	release_global_resources();
1916 
1917 	free_n2cp(np);
1918 
1919 	return 0;
1920 }
1921 
1922 static struct n2_mau * __devinit alloc_ncp(void)
1923 {
1924 	struct n2_mau *mp = kzalloc(sizeof(struct n2_mau), GFP_KERNEL);
1925 
1926 	if (mp)
1927 		INIT_LIST_HEAD(&mp->mau_list);
1928 
1929 	return mp;
1930 }
1931 
1932 static void free_ncp(struct n2_mau *mp)
1933 {
1934 	if (mp->mau_info.ino_table) {
1935 		kfree(mp->mau_info.ino_table);
1936 		mp->mau_info.ino_table = NULL;
1937 	}
1938 
1939 	kfree(mp);
1940 }
1941 
1942 static int __devinit n2_mau_probe(struct of_device *dev,
1943 				     const struct of_device_id *match)
1944 {
1945 	struct mdesc_handle *mdesc;
1946 	const char *full_name;
1947 	struct n2_mau *mp;
1948 	int err;
1949 
1950 	n2_spu_driver_version();
1951 
1952 	full_name = dev->dev.of_node->full_name;
1953 	pr_info("Found NCP at %s\n", full_name);
1954 
1955 	mp = alloc_ncp();
1956 	if (!mp) {
1957 		dev_err(&dev->dev, "%s: Unable to allocate ncp.\n",
1958 			full_name);
1959 		return -ENOMEM;
1960 	}
1961 
1962 	err = grab_global_resources();
1963 	if (err) {
1964 		dev_err(&dev->dev, "%s: Unable to grab "
1965 			"global resources.\n", full_name);
1966 		goto out_free_ncp;
1967 	}
1968 
1969 	mdesc = mdesc_grab();
1970 
1971 	if (!mdesc) {
1972 		dev_err(&dev->dev, "%s: Unable to grab MDESC.\n",
1973 			full_name);
1974 		err = -ENODEV;
1975 		goto out_free_global;
1976 	}
1977 
1978 	err = grab_mdesc_irq_props(mdesc, dev, &mp->mau_info, "ncp");
1979 	if (err) {
1980 		dev_err(&dev->dev, "%s: Unable to grab IRQ props.\n",
1981 			full_name);
1982 		mdesc_release(mdesc);
1983 		goto out_free_global;
1984 	}
1985 
1986 	err = spu_mdesc_scan(mdesc, dev, &mp->mau_info, &mp->mau_list,
1987 			     "mau", HV_NCS_QTYPE_MAU, mau_intr,
1988 			     cpu_to_mau);
1989 	mdesc_release(mdesc);
1990 
1991 	if (err) {
1992 		dev_err(&dev->dev, "%s: MAU MDESC scan failed.\n",
1993 			full_name);
1994 		goto out_free_global;
1995 	}
1996 
1997 	dev_set_drvdata(&dev->dev, mp);
1998 
1999 	return 0;
2000 
2001 out_free_global:
2002 	release_global_resources();
2003 
2004 out_free_ncp:
2005 	free_ncp(mp);
2006 
2007 	return err;
2008 }
2009 
2010 static int __devexit n2_mau_remove(struct of_device *dev)
2011 {
2012 	struct n2_mau *mp = dev_get_drvdata(&dev->dev);
2013 
2014 	spu_list_destroy(&mp->mau_list);
2015 
2016 	release_global_resources();
2017 
2018 	free_ncp(mp);
2019 
2020 	return 0;
2021 }
2022 
2023 static struct of_device_id n2_crypto_match[] = {
2024 	{
2025 		.name = "n2cp",
2026 		.compatible = "SUNW,n2-cwq",
2027 	},
2028 	{
2029 		.name = "n2cp",
2030 		.compatible = "SUNW,vf-cwq",
2031 	},
2032 	{},
2033 };
2034 
2035 MODULE_DEVICE_TABLE(of, n2_crypto_match);
2036 
2037 static struct of_platform_driver n2_crypto_driver = {
2038 	.driver = {
2039 		.name		=	"n2cp",
2040 		.owner		=	THIS_MODULE,
2041 		.of_match_table	=	n2_crypto_match,
2042 	},
2043 	.probe		=	n2_crypto_probe,
2044 	.remove		=	__devexit_p(n2_crypto_remove),
2045 };
2046 
2047 static struct of_device_id n2_mau_match[] = {
2048 	{
2049 		.name = "ncp",
2050 		.compatible = "SUNW,n2-mau",
2051 	},
2052 	{
2053 		.name = "ncp",
2054 		.compatible = "SUNW,vf-mau",
2055 	},
2056 	{},
2057 };
2058 
2059 MODULE_DEVICE_TABLE(of, n2_mau_match);
2060 
2061 static struct of_platform_driver n2_mau_driver = {
2062 	.driver = {
2063 		.name		=	"ncp",
2064 		.owner		=	THIS_MODULE,
2065 		.of_match_table	=	n2_mau_match,
2066 	},
2067 	.probe		=	n2_mau_probe,
2068 	.remove		=	__devexit_p(n2_mau_remove),
2069 };
2070 
2071 static int __init n2_init(void)
2072 {
2073 	int err = of_register_platform_driver(&n2_crypto_driver);
2074 
2075 	if (!err) {
2076 		err = of_register_platform_driver(&n2_mau_driver);
2077 		if (err)
2078 			of_unregister_platform_driver(&n2_crypto_driver);
2079 	}
2080 	return err;
2081 }
2082 
2083 static void __exit n2_exit(void)
2084 {
2085 	of_unregister_platform_driver(&n2_mau_driver);
2086 	of_unregister_platform_driver(&n2_crypto_driver);
2087 }
2088 
2089 module_init(n2_init);
2090 module_exit(n2_exit);
2091