1 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2 /*
3  * Copyright (C) 2014-2016 Freescale Semiconductor, Inc.
4  * Copyright 2016 NXP
5  *
6  */
7 
8 #include <asm/cacheflush.h>
9 #include <linux/io.h>
10 #include <linux/slab.h>
11 #include <soc/fsl/dpaa2-global.h>
12 
13 #include "qbman-portal.h"
14 
15 #define QMAN_REV_4000   0x04000000
16 #define QMAN_REV_4100   0x04010000
17 #define QMAN_REV_4101   0x04010001
18 #define QMAN_REV_MASK   0xffff0000
19 
20 /* All QBMan command and result structures use this "valid bit" encoding */
21 #define QB_VALID_BIT ((u32)0x80)
22 
23 /* QBMan portal management command codes */
24 #define QBMAN_MC_ACQUIRE       0x30
25 #define QBMAN_WQCHAN_CONFIGURE 0x46
26 
27 /* CINH register offsets */
28 #define QBMAN_CINH_SWP_EQAR    0x8c0
29 #define QBMAN_CINH_SWP_DQPI    0xa00
30 #define QBMAN_CINH_SWP_DCAP    0xac0
31 #define QBMAN_CINH_SWP_SDQCR   0xb00
32 #define QBMAN_CINH_SWP_RAR     0xcc0
33 #define QBMAN_CINH_SWP_ISR     0xe00
34 #define QBMAN_CINH_SWP_IER     0xe40
35 #define QBMAN_CINH_SWP_ISDR    0xe80
36 #define QBMAN_CINH_SWP_IIR     0xec0
37 
38 /* CENA register offsets */
39 #define QBMAN_CENA_SWP_EQCR(n) (0x000 + ((u32)(n) << 6))
40 #define QBMAN_CENA_SWP_DQRR(n) (0x200 + ((u32)(n) << 6))
41 #define QBMAN_CENA_SWP_RCR(n)  (0x400 + ((u32)(n) << 6))
42 #define QBMAN_CENA_SWP_CR      0x600
43 #define QBMAN_CENA_SWP_RR(vb)  (0x700 + ((u32)(vb) >> 1))
44 #define QBMAN_CENA_SWP_VDQCR   0x780
45 
46 /* Reverse mapping of QBMAN_CENA_SWP_DQRR() */
47 #define QBMAN_IDX_FROM_DQRR(p) (((unsigned long)(p) & 0x1ff) >> 6)
48 
49 /* Define token used to determine if response written to memory is valid */
50 #define QMAN_DQ_TOKEN_VALID 1
51 
52 /* SDQCR attribute codes */
53 #define QB_SDQCR_FC_SHIFT   29
54 #define QB_SDQCR_FC_MASK    0x1
55 #define QB_SDQCR_DCT_SHIFT  24
56 #define QB_SDQCR_DCT_MASK   0x3
57 #define QB_SDQCR_TOK_SHIFT  16
58 #define QB_SDQCR_TOK_MASK   0xff
59 #define QB_SDQCR_SRC_SHIFT  0
60 #define QB_SDQCR_SRC_MASK   0xffff
61 
62 /* opaque token for static dequeues */
63 #define QMAN_SDQCR_TOKEN    0xbb
64 
65 enum qbman_sdqcr_dct {
66 	qbman_sdqcr_dct_null = 0,
67 	qbman_sdqcr_dct_prio_ics,
68 	qbman_sdqcr_dct_active_ics,
69 	qbman_sdqcr_dct_active
70 };
71 
72 enum qbman_sdqcr_fc {
73 	qbman_sdqcr_fc_one = 0,
74 	qbman_sdqcr_fc_up_to_3 = 1
75 };
76 
77 /* Portal Access */
78 
79 static inline u32 qbman_read_register(struct qbman_swp *p, u32 offset)
80 {
81 	return readl_relaxed(p->addr_cinh + offset);
82 }
83 
84 static inline void qbman_write_register(struct qbman_swp *p, u32 offset,
85 					u32 value)
86 {
87 	writel_relaxed(value, p->addr_cinh + offset);
88 }
89 
90 static inline void *qbman_get_cmd(struct qbman_swp *p, u32 offset)
91 {
92 	return p->addr_cena + offset;
93 }
94 
95 #define QBMAN_CINH_SWP_CFG   0xd00
96 
97 #define SWP_CFG_DQRR_MF_SHIFT 20
98 #define SWP_CFG_EST_SHIFT     16
99 #define SWP_CFG_WN_SHIFT      14
100 #define SWP_CFG_RPM_SHIFT     12
101 #define SWP_CFG_DCM_SHIFT     10
102 #define SWP_CFG_EPM_SHIFT     8
103 #define SWP_CFG_SD_SHIFT      5
104 #define SWP_CFG_SP_SHIFT      4
105 #define SWP_CFG_SE_SHIFT      3
106 #define SWP_CFG_DP_SHIFT      2
107 #define SWP_CFG_DE_SHIFT      1
108 #define SWP_CFG_EP_SHIFT      0
109 
110 static inline u32 qbman_set_swp_cfg(u8 max_fill, u8 wn,	u8 est, u8 rpm, u8 dcm,
111 				    u8 epm, int sd, int sp, int se,
112 				    int dp, int de, int ep)
113 {
114 	return (max_fill << SWP_CFG_DQRR_MF_SHIFT |
115 		est << SWP_CFG_EST_SHIFT |
116 		wn << SWP_CFG_WN_SHIFT |
117 		rpm << SWP_CFG_RPM_SHIFT |
118 		dcm << SWP_CFG_DCM_SHIFT |
119 		epm << SWP_CFG_EPM_SHIFT |
120 		sd << SWP_CFG_SD_SHIFT |
121 		sp << SWP_CFG_SP_SHIFT |
122 		se << SWP_CFG_SE_SHIFT |
123 		dp << SWP_CFG_DP_SHIFT |
124 		de << SWP_CFG_DE_SHIFT |
125 		ep << SWP_CFG_EP_SHIFT);
126 }
127 
128 /**
129  * qbman_swp_init() - Create a functional object representing the given
130  *                    QBMan portal descriptor.
131  * @d: the given qbman swp descriptor
132  *
133  * Return qbman_swp portal for success, NULL if the object cannot
134  * be created.
135  */
136 struct qbman_swp *qbman_swp_init(const struct qbman_swp_desc *d)
137 {
138 	struct qbman_swp *p = kmalloc(sizeof(*p), GFP_KERNEL);
139 	u32 reg;
140 
141 	if (!p)
142 		return NULL;
143 	p->desc = d;
144 	p->mc.valid_bit = QB_VALID_BIT;
145 	p->sdq = 0;
146 	p->sdq |= qbman_sdqcr_dct_prio_ics << QB_SDQCR_DCT_SHIFT;
147 	p->sdq |= qbman_sdqcr_fc_up_to_3 << QB_SDQCR_FC_SHIFT;
148 	p->sdq |= QMAN_SDQCR_TOKEN << QB_SDQCR_TOK_SHIFT;
149 
150 	atomic_set(&p->vdq.available, 1);
151 	p->vdq.valid_bit = QB_VALID_BIT;
152 	p->dqrr.next_idx = 0;
153 	p->dqrr.valid_bit = QB_VALID_BIT;
154 
155 	if ((p->desc->qman_version & QMAN_REV_MASK) < QMAN_REV_4100) {
156 		p->dqrr.dqrr_size = 4;
157 		p->dqrr.reset_bug = 1;
158 	} else {
159 		p->dqrr.dqrr_size = 8;
160 		p->dqrr.reset_bug = 0;
161 	}
162 
163 	p->addr_cena = d->cena_bar;
164 	p->addr_cinh = d->cinh_bar;
165 
166 	reg = qbman_set_swp_cfg(p->dqrr.dqrr_size,
167 				1, /* Writes Non-cacheable */
168 				0, /* EQCR_CI stashing threshold */
169 				3, /* RPM: Valid bit mode, RCR in array mode */
170 				2, /* DCM: Discrete consumption ack mode */
171 				3, /* EPM: Valid bit mode, EQCR in array mode */
172 				1, /* mem stashing drop enable == TRUE */
173 				1, /* mem stashing priority == TRUE */
174 				1, /* mem stashing enable == TRUE */
175 				1, /* dequeue stashing priority == TRUE */
176 				0, /* dequeue stashing enable == FALSE */
177 				0); /* EQCR_CI stashing priority == FALSE */
178 
179 	qbman_write_register(p, QBMAN_CINH_SWP_CFG, reg);
180 	reg = qbman_read_register(p, QBMAN_CINH_SWP_CFG);
181 	if (!reg) {
182 		pr_err("qbman: the portal is not enabled!\n");
183 		kfree(p);
184 		return NULL;
185 	}
186 
187 	/*
188 	 * SDQCR needs to be initialized to 0 when no channels are
189 	 * being dequeued from or else the QMan HW will indicate an
190 	 * error.  The values that were calculated above will be
191 	 * applied when dequeues from a specific channel are enabled.
192 	 */
193 	qbman_write_register(p, QBMAN_CINH_SWP_SDQCR, 0);
194 	return p;
195 }
196 
197 /**
198  * qbman_swp_finish() - Create and destroy a functional object representing
199  *                      the given QBMan portal descriptor.
200  * @p: the qbman_swp object to be destroyed
201  */
202 void qbman_swp_finish(struct qbman_swp *p)
203 {
204 	kfree(p);
205 }
206 
207 /**
208  * qbman_swp_interrupt_read_status()
209  * @p: the given software portal
210  *
211  * Return the value in the SWP_ISR register.
212  */
213 u32 qbman_swp_interrupt_read_status(struct qbman_swp *p)
214 {
215 	return qbman_read_register(p, QBMAN_CINH_SWP_ISR);
216 }
217 
218 /**
219  * qbman_swp_interrupt_clear_status()
220  * @p: the given software portal
221  * @mask: The mask to clear in SWP_ISR register
222  */
223 void qbman_swp_interrupt_clear_status(struct qbman_swp *p, u32 mask)
224 {
225 	qbman_write_register(p, QBMAN_CINH_SWP_ISR, mask);
226 }
227 
228 /**
229  * qbman_swp_interrupt_get_trigger() - read interrupt enable register
230  * @p: the given software portal
231  *
232  * Return the value in the SWP_IER register.
233  */
234 u32 qbman_swp_interrupt_get_trigger(struct qbman_swp *p)
235 {
236 	return qbman_read_register(p, QBMAN_CINH_SWP_IER);
237 }
238 
239 /**
240  * qbman_swp_interrupt_set_trigger() - enable interrupts for a swp
241  * @p: the given software portal
242  * @mask: The mask of bits to enable in SWP_IER
243  */
244 void qbman_swp_interrupt_set_trigger(struct qbman_swp *p, u32 mask)
245 {
246 	qbman_write_register(p, QBMAN_CINH_SWP_IER, mask);
247 }
248 
249 /**
250  * qbman_swp_interrupt_get_inhibit() - read interrupt mask register
251  * @p: the given software portal object
252  *
253  * Return the value in the SWP_IIR register.
254  */
255 int qbman_swp_interrupt_get_inhibit(struct qbman_swp *p)
256 {
257 	return qbman_read_register(p, QBMAN_CINH_SWP_IIR);
258 }
259 
260 /**
261  * qbman_swp_interrupt_set_inhibit() - write interrupt mask register
262  * @p: the given software portal object
263  * @mask: The mask to set in SWP_IIR register
264  */
265 void qbman_swp_interrupt_set_inhibit(struct qbman_swp *p, int inhibit)
266 {
267 	qbman_write_register(p, QBMAN_CINH_SWP_IIR, inhibit ? 0xffffffff : 0);
268 }
269 
270 /*
271  * Different management commands all use this common base layer of code to issue
272  * commands and poll for results.
273  */
274 
275 /*
276  * Returns a pointer to where the caller should fill in their management command
277  * (caller should ignore the verb byte)
278  */
279 void *qbman_swp_mc_start(struct qbman_swp *p)
280 {
281 	return qbman_get_cmd(p, QBMAN_CENA_SWP_CR);
282 }
283 
284 /*
285  * Commits merges in the caller-supplied command verb (which should not include
286  * the valid-bit) and submits the command to hardware
287  */
288 void qbman_swp_mc_submit(struct qbman_swp *p, void *cmd, u8 cmd_verb)
289 {
290 	u8 *v = cmd;
291 
292 	dma_wmb();
293 	*v = cmd_verb | p->mc.valid_bit;
294 }
295 
296 /*
297  * Checks for a completed response (returns non-NULL if only if the response
298  * is complete).
299  */
300 void *qbman_swp_mc_result(struct qbman_swp *p)
301 {
302 	u32 *ret, verb;
303 
304 	ret = qbman_get_cmd(p, QBMAN_CENA_SWP_RR(p->mc.valid_bit));
305 
306 	/* Remove the valid-bit - command completed if the rest is non-zero */
307 	verb = ret[0] & ~QB_VALID_BIT;
308 	if (!verb)
309 		return NULL;
310 	p->mc.valid_bit ^= QB_VALID_BIT;
311 	return ret;
312 }
313 
314 #define QB_ENQUEUE_CMD_OPTIONS_SHIFT    0
315 enum qb_enqueue_commands {
316 	enqueue_empty = 0,
317 	enqueue_response_always = 1,
318 	enqueue_rejects_to_fq = 2
319 };
320 
321 #define QB_ENQUEUE_CMD_ORP_ENABLE_SHIFT      2
322 #define QB_ENQUEUE_CMD_IRQ_ON_DISPATCH_SHIFT 3
323 #define QB_ENQUEUE_CMD_TARGET_TYPE_SHIFT     4
324 
325 /**
326  * qbman_eq_desc_clear() - Clear the contents of a descriptor to
327  *                         default/starting state.
328  */
329 void qbman_eq_desc_clear(struct qbman_eq_desc *d)
330 {
331 	memset(d, 0, sizeof(*d));
332 }
333 
334 /**
335  * qbman_eq_desc_set_no_orp() - Set enqueue descriptor without orp
336  * @d:                the enqueue descriptor.
337  * @response_success: 1 = enqueue with response always; 0 = enqueue with
338  *                    rejections returned on a FQ.
339  */
340 void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success)
341 {
342 	d->verb &= ~(1 << QB_ENQUEUE_CMD_ORP_ENABLE_SHIFT);
343 	if (respond_success)
344 		d->verb |= enqueue_response_always;
345 	else
346 		d->verb |= enqueue_rejects_to_fq;
347 }
348 
349 /*
350  * Exactly one of the following descriptor "targets" should be set. (Calling any
351  * one of these will replace the effect of any prior call to one of these.)
352  *   -enqueue to a frame queue
353  *   -enqueue to a queuing destination
354  */
355 
356 /**
357  * qbman_eq_desc_set_fq() - set the FQ for the enqueue command
358  * @d:    the enqueue descriptor
359  * @fqid: the id of the frame queue to be enqueued
360  */
361 void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, u32 fqid)
362 {
363 	d->verb &= ~(1 << QB_ENQUEUE_CMD_TARGET_TYPE_SHIFT);
364 	d->tgtid = cpu_to_le32(fqid);
365 }
366 
367 /**
368  * qbman_eq_desc_set_qd() - Set Queuing Destination for the enqueue command
369  * @d:       the enqueue descriptor
370  * @qdid:    the id of the queuing destination to be enqueued
371  * @qd_bin:  the queuing destination bin
372  * @qd_prio: the queuing destination priority
373  */
374 void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, u32 qdid,
375 			  u32 qd_bin, u32 qd_prio)
376 {
377 	d->verb |= 1 << QB_ENQUEUE_CMD_TARGET_TYPE_SHIFT;
378 	d->tgtid = cpu_to_le32(qdid);
379 	d->qdbin = cpu_to_le16(qd_bin);
380 	d->qpri = qd_prio;
381 }
382 
383 #define EQAR_IDX(eqar)     ((eqar) & 0x7)
384 #define EQAR_VB(eqar)      ((eqar) & 0x80)
385 #define EQAR_SUCCESS(eqar) ((eqar) & 0x100)
386 
387 /**
388  * qbman_swp_enqueue() - Issue an enqueue command
389  * @s:  the software portal used for enqueue
390  * @d:  the enqueue descriptor
391  * @fd: the frame descriptor to be enqueued
392  *
393  * Please note that 'fd' should only be NULL if the "action" of the
394  * descriptor is "orp_hole" or "orp_nesn".
395  *
396  * Return 0 for successful enqueue, -EBUSY if the EQCR is not ready.
397  */
398 int qbman_swp_enqueue(struct qbman_swp *s, const struct qbman_eq_desc *d,
399 		      const struct dpaa2_fd *fd)
400 {
401 	struct qbman_eq_desc *p;
402 	u32 eqar = qbman_read_register(s, QBMAN_CINH_SWP_EQAR);
403 
404 	if (!EQAR_SUCCESS(eqar))
405 		return -EBUSY;
406 
407 	p = qbman_get_cmd(s, QBMAN_CENA_SWP_EQCR(EQAR_IDX(eqar)));
408 	memcpy(&p->dca, &d->dca, 31);
409 	memcpy(&p->fd, fd, sizeof(*fd));
410 
411 	/* Set the verb byte, have to substitute in the valid-bit */
412 	dma_wmb();
413 	p->verb = d->verb | EQAR_VB(eqar);
414 
415 	return 0;
416 }
417 
418 /* Static (push) dequeue */
419 
420 /**
421  * qbman_swp_push_get() - Get the push dequeue setup
422  * @p:           the software portal object
423  * @channel_idx: the channel index to query
424  * @enabled:     returned boolean to show whether the push dequeue is enabled
425  *               for the given channel
426  */
427 void qbman_swp_push_get(struct qbman_swp *s, u8 channel_idx, int *enabled)
428 {
429 	u16 src = (s->sdq >> QB_SDQCR_SRC_SHIFT) & QB_SDQCR_SRC_MASK;
430 
431 	WARN_ON(channel_idx > 15);
432 	*enabled = src | (1 << channel_idx);
433 }
434 
435 /**
436  * qbman_swp_push_set() - Enable or disable push dequeue
437  * @p:           the software portal object
438  * @channel_idx: the channel index (0 to 15)
439  * @enable:      enable or disable push dequeue
440  */
441 void qbman_swp_push_set(struct qbman_swp *s, u8 channel_idx, int enable)
442 {
443 	u16 dqsrc;
444 
445 	WARN_ON(channel_idx > 15);
446 	if (enable)
447 		s->sdq |= 1 << channel_idx;
448 	else
449 		s->sdq &= ~(1 << channel_idx);
450 
451 	/* Read make the complete src map.  If no channels are enabled
452 	 * the SDQCR must be 0 or else QMan will assert errors
453 	 */
454 	dqsrc = (s->sdq >> QB_SDQCR_SRC_SHIFT) & QB_SDQCR_SRC_MASK;
455 	if (dqsrc != 0)
456 		qbman_write_register(s, QBMAN_CINH_SWP_SDQCR, s->sdq);
457 	else
458 		qbman_write_register(s, QBMAN_CINH_SWP_SDQCR, 0);
459 }
460 
461 #define QB_VDQCR_VERB_DCT_SHIFT    0
462 #define QB_VDQCR_VERB_DT_SHIFT     2
463 #define QB_VDQCR_VERB_RLS_SHIFT    4
464 #define QB_VDQCR_VERB_WAE_SHIFT    5
465 
466 enum qb_pull_dt_e {
467 	qb_pull_dt_channel,
468 	qb_pull_dt_workqueue,
469 	qb_pull_dt_framequeue
470 };
471 
472 /**
473  * qbman_pull_desc_clear() - Clear the contents of a descriptor to
474  *                           default/starting state
475  * @d: the pull dequeue descriptor to be cleared
476  */
477 void qbman_pull_desc_clear(struct qbman_pull_desc *d)
478 {
479 	memset(d, 0, sizeof(*d));
480 }
481 
482 /**
483  * qbman_pull_desc_set_storage()- Set the pull dequeue storage
484  * @d:            the pull dequeue descriptor to be set
485  * @storage:      the pointer of the memory to store the dequeue result
486  * @storage_phys: the physical address of the storage memory
487  * @stash:        to indicate whether write allocate is enabled
488  *
489  * If not called, or if called with 'storage' as NULL, the result pull dequeues
490  * will produce results to DQRR. If 'storage' is non-NULL, then results are
491  * produced to the given memory location (using the DMA address which
492  * the caller provides in 'storage_phys'), and 'stash' controls whether or not
493  * those writes to main-memory express a cache-warming attribute.
494  */
495 void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
496 				 struct dpaa2_dq *storage,
497 				 dma_addr_t storage_phys,
498 				 int stash)
499 {
500 	/* save the virtual address */
501 	d->rsp_addr_virt = (u64)(uintptr_t)storage;
502 
503 	if (!storage) {
504 		d->verb &= ~(1 << QB_VDQCR_VERB_RLS_SHIFT);
505 		return;
506 	}
507 	d->verb |= 1 << QB_VDQCR_VERB_RLS_SHIFT;
508 	if (stash)
509 		d->verb |= 1 << QB_VDQCR_VERB_WAE_SHIFT;
510 	else
511 		d->verb &= ~(1 << QB_VDQCR_VERB_WAE_SHIFT);
512 
513 	d->rsp_addr = cpu_to_le64(storage_phys);
514 }
515 
516 /**
517  * qbman_pull_desc_set_numframes() - Set the number of frames to be dequeued
518  * @d:         the pull dequeue descriptor to be set
519  * @numframes: number of frames to be set, must be between 1 and 16, inclusive
520  */
521 void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d, u8 numframes)
522 {
523 	d->numf = numframes - 1;
524 }
525 
526 /*
527  * Exactly one of the following descriptor "actions" should be set. (Calling any
528  * one of these will replace the effect of any prior call to one of these.)
529  * - pull dequeue from the given frame queue (FQ)
530  * - pull dequeue from any FQ in the given work queue (WQ)
531  * - pull dequeue from any FQ in any WQ in the given channel
532  */
533 
534 /**
535  * qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues
536  * @fqid: the frame queue index of the given FQ
537  */
538 void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, u32 fqid)
539 {
540 	d->verb |= 1 << QB_VDQCR_VERB_DCT_SHIFT;
541 	d->verb |= qb_pull_dt_framequeue << QB_VDQCR_VERB_DT_SHIFT;
542 	d->dq_src = cpu_to_le32(fqid);
543 }
544 
545 /**
546  * qbman_pull_desc_set_wq() - Set wqid from which the dequeue command dequeues
547  * @wqid: composed of channel id and wqid within the channel
548  * @dct:  the dequeue command type
549  */
550 void qbman_pull_desc_set_wq(struct qbman_pull_desc *d, u32 wqid,
551 			    enum qbman_pull_type_e dct)
552 {
553 	d->verb |= dct << QB_VDQCR_VERB_DCT_SHIFT;
554 	d->verb |= qb_pull_dt_workqueue << QB_VDQCR_VERB_DT_SHIFT;
555 	d->dq_src = cpu_to_le32(wqid);
556 }
557 
558 /**
559  * qbman_pull_desc_set_channel() - Set channelid from which the dequeue command
560  *                                 dequeues
561  * @chid: the channel id to be dequeued
562  * @dct:  the dequeue command type
563  */
564 void qbman_pull_desc_set_channel(struct qbman_pull_desc *d, u32 chid,
565 				 enum qbman_pull_type_e dct)
566 {
567 	d->verb |= dct << QB_VDQCR_VERB_DCT_SHIFT;
568 	d->verb |= qb_pull_dt_channel << QB_VDQCR_VERB_DT_SHIFT;
569 	d->dq_src = cpu_to_le32(chid);
570 }
571 
572 /**
573  * qbman_swp_pull() - Issue the pull dequeue command
574  * @s: the software portal object
575  * @d: the software portal descriptor which has been configured with
576  *     the set of qbman_pull_desc_set_*() calls
577  *
578  * Return 0 for success, and -EBUSY if the software portal is not ready
579  * to do pull dequeue.
580  */
581 int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d)
582 {
583 	struct qbman_pull_desc *p;
584 
585 	if (!atomic_dec_and_test(&s->vdq.available)) {
586 		atomic_inc(&s->vdq.available);
587 		return -EBUSY;
588 	}
589 	s->vdq.storage = (void *)(uintptr_t)d->rsp_addr_virt;
590 	p = qbman_get_cmd(s, QBMAN_CENA_SWP_VDQCR);
591 	p->numf = d->numf;
592 	p->tok = QMAN_DQ_TOKEN_VALID;
593 	p->dq_src = d->dq_src;
594 	p->rsp_addr = d->rsp_addr;
595 	p->rsp_addr_virt = d->rsp_addr_virt;
596 	dma_wmb();
597 
598 	/* Set the verb byte, have to substitute in the valid-bit */
599 	p->verb = d->verb | s->vdq.valid_bit;
600 	s->vdq.valid_bit ^= QB_VALID_BIT;
601 
602 	return 0;
603 }
604 
605 #define QMAN_DQRR_PI_MASK   0xf
606 
607 /**
608  * qbman_swp_dqrr_next() - Get an valid DQRR entry
609  * @s: the software portal object
610  *
611  * Return NULL if there are no unconsumed DQRR entries. Return a DQRR entry
612  * only once, so repeated calls can return a sequence of DQRR entries, without
613  * requiring they be consumed immediately or in any particular order.
614  */
615 const struct dpaa2_dq *qbman_swp_dqrr_next(struct qbman_swp *s)
616 {
617 	u32 verb;
618 	u32 response_verb;
619 	u32 flags;
620 	struct dpaa2_dq *p;
621 
622 	/* Before using valid-bit to detect if something is there, we have to
623 	 * handle the case of the DQRR reset bug...
624 	 */
625 	if (unlikely(s->dqrr.reset_bug)) {
626 		/*
627 		 * We pick up new entries by cache-inhibited producer index,
628 		 * which means that a non-coherent mapping would require us to
629 		 * invalidate and read *only* once that PI has indicated that
630 		 * there's an entry here. The first trip around the DQRR ring
631 		 * will be much less efficient than all subsequent trips around
632 		 * it...
633 		 */
634 		u8 pi = qbman_read_register(s, QBMAN_CINH_SWP_DQPI) &
635 			QMAN_DQRR_PI_MASK;
636 
637 		/* there are new entries if pi != next_idx */
638 		if (pi == s->dqrr.next_idx)
639 			return NULL;
640 
641 		/*
642 		 * if next_idx is/was the last ring index, and 'pi' is
643 		 * different, we can disable the workaround as all the ring
644 		 * entries have now been DMA'd to so valid-bit checking is
645 		 * repaired. Note: this logic needs to be based on next_idx
646 		 * (which increments one at a time), rather than on pi (which
647 		 * can burst and wrap-around between our snapshots of it).
648 		 */
649 		if (s->dqrr.next_idx == (s->dqrr.dqrr_size - 1)) {
650 			pr_debug("next_idx=%d, pi=%d, clear reset bug\n",
651 				 s->dqrr.next_idx, pi);
652 			s->dqrr.reset_bug = 0;
653 		}
654 		prefetch(qbman_get_cmd(s,
655 				       QBMAN_CENA_SWP_DQRR(s->dqrr.next_idx)));
656 	}
657 
658 	p = qbman_get_cmd(s, QBMAN_CENA_SWP_DQRR(s->dqrr.next_idx));
659 	verb = p->dq.verb;
660 
661 	/*
662 	 * If the valid-bit isn't of the expected polarity, nothing there. Note,
663 	 * in the DQRR reset bug workaround, we shouldn't need to skip these
664 	 * check, because we've already determined that a new entry is available
665 	 * and we've invalidated the cacheline before reading it, so the
666 	 * valid-bit behaviour is repaired and should tell us what we already
667 	 * knew from reading PI.
668 	 */
669 	if ((verb & QB_VALID_BIT) != s->dqrr.valid_bit) {
670 		prefetch(qbman_get_cmd(s,
671 				       QBMAN_CENA_SWP_DQRR(s->dqrr.next_idx)));
672 		return NULL;
673 	}
674 	/*
675 	 * There's something there. Move "next_idx" attention to the next ring
676 	 * entry (and prefetch it) before returning what we found.
677 	 */
678 	s->dqrr.next_idx++;
679 	s->dqrr.next_idx &= s->dqrr.dqrr_size - 1; /* Wrap around */
680 	if (!s->dqrr.next_idx)
681 		s->dqrr.valid_bit ^= QB_VALID_BIT;
682 
683 	/*
684 	 * If this is the final response to a volatile dequeue command
685 	 * indicate that the vdq is available
686 	 */
687 	flags = p->dq.stat;
688 	response_verb = verb & QBMAN_RESULT_MASK;
689 	if ((response_verb == QBMAN_RESULT_DQ) &&
690 	    (flags & DPAA2_DQ_STAT_VOLATILE) &&
691 	    (flags & DPAA2_DQ_STAT_EXPIRED))
692 		atomic_inc(&s->vdq.available);
693 
694 	prefetch(qbman_get_cmd(s, QBMAN_CENA_SWP_DQRR(s->dqrr.next_idx)));
695 
696 	return p;
697 }
698 
699 /**
700  * qbman_swp_dqrr_consume() -  Consume DQRR entries previously returned from
701  *                             qbman_swp_dqrr_next().
702  * @s: the software portal object
703  * @dq: the DQRR entry to be consumed
704  */
705 void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct dpaa2_dq *dq)
706 {
707 	qbman_write_register(s, QBMAN_CINH_SWP_DCAP, QBMAN_IDX_FROM_DQRR(dq));
708 }
709 
710 /**
711  * qbman_result_has_new_result() - Check and get the dequeue response from the
712  *                                 dq storage memory set in pull dequeue command
713  * @s: the software portal object
714  * @dq: the dequeue result read from the memory
715  *
716  * Return 1 for getting a valid dequeue result, or 0 for not getting a valid
717  * dequeue result.
718  *
719  * Only used for user-provided storage of dequeue results, not DQRR. For
720  * efficiency purposes, the driver will perform any required endianness
721  * conversion to ensure that the user's dequeue result storage is in host-endian
722  * format. As such, once the user has called qbman_result_has_new_result() and
723  * been returned a valid dequeue result, they should not call it again on
724  * the same memory location (except of course if another dequeue command has
725  * been executed to produce a new result to that location).
726  */
727 int qbman_result_has_new_result(struct qbman_swp *s, const struct dpaa2_dq *dq)
728 {
729 	if (dq->dq.tok != QMAN_DQ_TOKEN_VALID)
730 		return 0;
731 
732 	/*
733 	 * Set token to be 0 so we will detect change back to 1
734 	 * next time the looping is traversed. Const is cast away here
735 	 * as we want users to treat the dequeue responses as read only.
736 	 */
737 	((struct dpaa2_dq *)dq)->dq.tok = 0;
738 
739 	/*
740 	 * Determine whether VDQCR is available based on whether the
741 	 * current result is sitting in the first storage location of
742 	 * the busy command.
743 	 */
744 	if (s->vdq.storage == dq) {
745 		s->vdq.storage = NULL;
746 		atomic_inc(&s->vdq.available);
747 	}
748 
749 	return 1;
750 }
751 
752 /**
753  * qbman_release_desc_clear() - Clear the contents of a descriptor to
754  *                              default/starting state.
755  */
756 void qbman_release_desc_clear(struct qbman_release_desc *d)
757 {
758 	memset(d, 0, sizeof(*d));
759 	d->verb = 1 << 5; /* Release Command Valid */
760 }
761 
762 /**
763  * qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
764  */
765 void qbman_release_desc_set_bpid(struct qbman_release_desc *d, u16 bpid)
766 {
767 	d->bpid = cpu_to_le16(bpid);
768 }
769 
770 /**
771  * qbman_release_desc_set_rcdi() - Determines whether or not the portal's RCDI
772  * interrupt source should be asserted after the release command is completed.
773  */
774 void qbman_release_desc_set_rcdi(struct qbman_release_desc *d, int enable)
775 {
776 	if (enable)
777 		d->verb |= 1 << 6;
778 	else
779 		d->verb &= ~(1 << 6);
780 }
781 
782 #define RAR_IDX(rar)     ((rar) & 0x7)
783 #define RAR_VB(rar)      ((rar) & 0x80)
784 #define RAR_SUCCESS(rar) ((rar) & 0x100)
785 
786 /**
787  * qbman_swp_release() - Issue a buffer release command
788  * @s:           the software portal object
789  * @d:           the release descriptor
790  * @buffers:     a pointer pointing to the buffer address to be released
791  * @num_buffers: number of buffers to be released,  must be less than 8
792  *
793  * Return 0 for success, -EBUSY if the release command ring is not ready.
794  */
795 int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
796 		      const u64 *buffers, unsigned int num_buffers)
797 {
798 	int i;
799 	struct qbman_release_desc *p;
800 	u32 rar;
801 
802 	if (!num_buffers || (num_buffers > 7))
803 		return -EINVAL;
804 
805 	rar = qbman_read_register(s, QBMAN_CINH_SWP_RAR);
806 	if (!RAR_SUCCESS(rar))
807 		return -EBUSY;
808 
809 	/* Start the release command */
810 	p = qbman_get_cmd(s, QBMAN_CENA_SWP_RCR(RAR_IDX(rar)));
811 	/* Copy the caller's buffer pointers to the command */
812 	for (i = 0; i < num_buffers; i++)
813 		p->buf[i] = cpu_to_le64(buffers[i]);
814 	p->bpid = d->bpid;
815 
816 	/*
817 	 * Set the verb byte, have to substitute in the valid-bit and the number
818 	 * of buffers.
819 	 */
820 	dma_wmb();
821 	p->verb = d->verb | RAR_VB(rar) | num_buffers;
822 
823 	return 0;
824 }
825 
826 struct qbman_acquire_desc {
827 	u8 verb;
828 	u8 reserved;
829 	__le16 bpid;
830 	u8 num;
831 	u8 reserved2[59];
832 };
833 
834 struct qbman_acquire_rslt {
835 	u8 verb;
836 	u8 rslt;
837 	__le16 reserved;
838 	u8 num;
839 	u8 reserved2[3];
840 	__le64 buf[7];
841 };
842 
843 /**
844  * qbman_swp_acquire() - Issue a buffer acquire command
845  * @s:           the software portal object
846  * @bpid:        the buffer pool index
847  * @buffers:     a pointer pointing to the acquired buffer addresses
848  * @num_buffers: number of buffers to be acquired, must be less than 8
849  *
850  * Return 0 for success, or negative error code if the acquire command
851  * fails.
852  */
853 int qbman_swp_acquire(struct qbman_swp *s, u16 bpid, u64 *buffers,
854 		      unsigned int num_buffers)
855 {
856 	struct qbman_acquire_desc *p;
857 	struct qbman_acquire_rslt *r;
858 	int i;
859 
860 	if (!num_buffers || (num_buffers > 7))
861 		return -EINVAL;
862 
863 	/* Start the management command */
864 	p = qbman_swp_mc_start(s);
865 
866 	if (!p)
867 		return -EBUSY;
868 
869 	/* Encode the caller-provided attributes */
870 	p->bpid = cpu_to_le16(bpid);
871 	p->num = num_buffers;
872 
873 	/* Complete the management command */
874 	r = qbman_swp_mc_complete(s, p, QBMAN_MC_ACQUIRE);
875 	if (unlikely(!r)) {
876 		pr_err("qbman: acquire from BPID %d failed, no response\n",
877 		       bpid);
878 		return -EIO;
879 	}
880 
881 	/* Decode the outcome */
882 	WARN_ON((r->verb & 0x7f) != QBMAN_MC_ACQUIRE);
883 
884 	/* Determine success or failure */
885 	if (unlikely(r->rslt != QBMAN_MC_RSLT_OK)) {
886 		pr_err("qbman: acquire from BPID 0x%x failed, code=0x%02x\n",
887 		       bpid, r->rslt);
888 		return -EIO;
889 	}
890 
891 	WARN_ON(r->num > num_buffers);
892 
893 	/* Copy the acquired buffers to the caller's array */
894 	for (i = 0; i < r->num; i++)
895 		buffers[i] = le64_to_cpu(r->buf[i]);
896 
897 	return (int)r->num;
898 }
899 
900 struct qbman_alt_fq_state_desc {
901 	u8 verb;
902 	u8 reserved[3];
903 	__le32 fqid;
904 	u8 reserved2[56];
905 };
906 
907 struct qbman_alt_fq_state_rslt {
908 	u8 verb;
909 	u8 rslt;
910 	u8 reserved[62];
911 };
912 
913 #define ALT_FQ_FQID_MASK 0x00FFFFFF
914 
915 int qbman_swp_alt_fq_state(struct qbman_swp *s, u32 fqid,
916 			   u8 alt_fq_verb)
917 {
918 	struct qbman_alt_fq_state_desc *p;
919 	struct qbman_alt_fq_state_rslt *r;
920 
921 	/* Start the management command */
922 	p = qbman_swp_mc_start(s);
923 	if (!p)
924 		return -EBUSY;
925 
926 	p->fqid = cpu_to_le32(fqid & ALT_FQ_FQID_MASK);
927 
928 	/* Complete the management command */
929 	r = qbman_swp_mc_complete(s, p, alt_fq_verb);
930 	if (unlikely(!r)) {
931 		pr_err("qbman: mgmt cmd failed, no response (verb=0x%x)\n",
932 		       alt_fq_verb);
933 		return -EIO;
934 	}
935 
936 	/* Decode the outcome */
937 	WARN_ON((r->verb & QBMAN_RESULT_MASK) != alt_fq_verb);
938 
939 	/* Determine success or failure */
940 	if (unlikely(r->rslt != QBMAN_MC_RSLT_OK)) {
941 		pr_err("qbman: ALT FQID %d failed: verb = 0x%08x code = 0x%02x\n",
942 		       fqid, r->verb, r->rslt);
943 		return -EIO;
944 	}
945 
946 	return 0;
947 }
948 
949 struct qbman_cdan_ctrl_desc {
950 	u8 verb;
951 	u8 reserved;
952 	__le16 ch;
953 	u8 we;
954 	u8 ctrl;
955 	__le16 reserved2;
956 	__le64 cdan_ctx;
957 	u8 reserved3[48];
958 
959 };
960 
961 struct qbman_cdan_ctrl_rslt {
962 	u8 verb;
963 	u8 rslt;
964 	__le16 ch;
965 	u8 reserved[60];
966 };
967 
968 int qbman_swp_CDAN_set(struct qbman_swp *s, u16 channelid,
969 		       u8 we_mask, u8 cdan_en,
970 		       u64 ctx)
971 {
972 	struct qbman_cdan_ctrl_desc *p = NULL;
973 	struct qbman_cdan_ctrl_rslt *r = NULL;
974 
975 	/* Start the management command */
976 	p = qbman_swp_mc_start(s);
977 	if (!p)
978 		return -EBUSY;
979 
980 	/* Encode the caller-provided attributes */
981 	p->ch = cpu_to_le16(channelid);
982 	p->we = we_mask;
983 	if (cdan_en)
984 		p->ctrl = 1;
985 	else
986 		p->ctrl = 0;
987 	p->cdan_ctx = cpu_to_le64(ctx);
988 
989 	/* Complete the management command */
990 	r = qbman_swp_mc_complete(s, p, QBMAN_WQCHAN_CONFIGURE);
991 	if (unlikely(!r)) {
992 		pr_err("qbman: wqchan config failed, no response\n");
993 		return -EIO;
994 	}
995 
996 	WARN_ON((r->verb & 0x7f) != QBMAN_WQCHAN_CONFIGURE);
997 
998 	/* Determine success or failure */
999 	if (unlikely(r->rslt != QBMAN_MC_RSLT_OK)) {
1000 		pr_err("qbman: CDAN cQID %d failed: code = 0x%02x\n",
1001 		       channelid, r->rslt);
1002 		return -EIO;
1003 	}
1004 
1005 	return 0;
1006 }
1007 
1008 #define QBMAN_RESPONSE_VERB_MASK	0x7f
1009 #define QBMAN_FQ_QUERY_NP		0x45
1010 #define QBMAN_BP_QUERY			0x32
1011 
1012 struct qbman_fq_query_desc {
1013 	u8 verb;
1014 	u8 reserved[3];
1015 	__le32 fqid;
1016 	u8 reserved2[56];
1017 };
1018 
1019 int qbman_fq_query_state(struct qbman_swp *s, u32 fqid,
1020 			 struct qbman_fq_query_np_rslt *r)
1021 {
1022 	struct qbman_fq_query_desc *p;
1023 	void *resp;
1024 
1025 	p = (struct qbman_fq_query_desc *)qbman_swp_mc_start(s);
1026 	if (!p)
1027 		return -EBUSY;
1028 
1029 	/* FQID is a 24 bit value */
1030 	p->fqid = cpu_to_le32(fqid & 0x00FFFFFF);
1031 	resp = qbman_swp_mc_complete(s, p, QBMAN_FQ_QUERY_NP);
1032 	if (!resp) {
1033 		pr_err("qbman: Query FQID %d NP fields failed, no response\n",
1034 		       fqid);
1035 		return -EIO;
1036 	}
1037 	*r = *(struct qbman_fq_query_np_rslt *)resp;
1038 	/* Decode the outcome */
1039 	WARN_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_FQ_QUERY_NP);
1040 
1041 	/* Determine success or failure */
1042 	if (r->rslt != QBMAN_MC_RSLT_OK) {
1043 		pr_err("Query NP fields of FQID 0x%x failed, code=0x%02x\n",
1044 		       p->fqid, r->rslt);
1045 		return -EIO;
1046 	}
1047 
1048 	return 0;
1049 }
1050 
1051 u32 qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r)
1052 {
1053 	return (le32_to_cpu(r->frm_cnt) & 0x00FFFFFF);
1054 }
1055 
1056 u32 qbman_fq_state_byte_count(const struct qbman_fq_query_np_rslt *r)
1057 {
1058 	return le32_to_cpu(r->byte_cnt);
1059 }
1060 
1061 struct qbman_bp_query_desc {
1062 	u8 verb;
1063 	u8 reserved;
1064 	__le16 bpid;
1065 	u8 reserved2[60];
1066 };
1067 
1068 int qbman_bp_query(struct qbman_swp *s, u16 bpid,
1069 		   struct qbman_bp_query_rslt *r)
1070 {
1071 	struct qbman_bp_query_desc *p;
1072 	void *resp;
1073 
1074 	p = (struct qbman_bp_query_desc *)qbman_swp_mc_start(s);
1075 	if (!p)
1076 		return -EBUSY;
1077 
1078 	p->bpid = cpu_to_le16(bpid);
1079 	resp = qbman_swp_mc_complete(s, p, QBMAN_BP_QUERY);
1080 	if (!resp) {
1081 		pr_err("qbman: Query BPID %d fields failed, no response\n",
1082 		       bpid);
1083 		return -EIO;
1084 	}
1085 	*r = *(struct qbman_bp_query_rslt *)resp;
1086 	/* Decode the outcome */
1087 	WARN_ON((r->verb & QBMAN_RESPONSE_VERB_MASK) != QBMAN_BP_QUERY);
1088 
1089 	/* Determine success or failure */
1090 	if (r->rslt != QBMAN_MC_RSLT_OK) {
1091 		pr_err("Query fields of BPID 0x%x failed, code=0x%02x\n",
1092 		       bpid, r->rslt);
1093 		return -EIO;
1094 	}
1095 
1096 	return 0;
1097 }
1098 
1099 u32 qbman_bp_info_num_free_bufs(struct qbman_bp_query_rslt *a)
1100 {
1101 	return le32_to_cpu(a->fill);
1102 }
1103