xref: /linux/drivers/usb/cdns3/cdnsp-mem.c (revision 4ade0818cf048bb166e875ed4f8b456e6c2c7b3c)
1  // SPDX-License-Identifier: GPL-2.0
2  /*
3   * Cadence CDNSP DRD Driver.
4   *
5   * Copyright (C) 2020 Cadence.
6   *
7   * Author: Pawel Laszczak <pawell@cadence.com>
8   *
9   * Code based on Linux XHCI driver.
10   * Origin: Copyright (C) 2008 Intel Corp.
11   */
12  
13  #include <linux/dma-mapping.h>
14  #include <linux/dmapool.h>
15  #include <linux/slab.h>
16  #include <linux/usb.h>
17  
18  #include "cdnsp-gadget.h"
19  #include "cdnsp-trace.h"
20  
21  static void cdnsp_free_stream_info(struct cdnsp_device *pdev,
22  				   struct cdnsp_ep *pep);
23  /*
24   * Allocates a generic ring segment from the ring pool, sets the dma address,
25   * initializes the segment to zero, and sets the private next pointer to NULL.
26   *
27   * "All components of all Command and Transfer TRBs shall be initialized to '0'"
28   */
29  static struct cdnsp_segment *cdnsp_segment_alloc(struct cdnsp_device *pdev,
30  						 unsigned int cycle_state,
31  						 unsigned int max_packet,
32  						 gfp_t flags)
33  {
34  	struct cdnsp_segment *seg;
35  	dma_addr_t dma;
36  	int i;
37  
38  	seg = kzalloc(sizeof(*seg), flags);
39  	if (!seg)
40  		return NULL;
41  
42  	seg->trbs = dma_pool_zalloc(pdev->segment_pool, flags, &dma);
43  	if (!seg->trbs) {
44  		kfree(seg);
45  		return NULL;
46  	}
47  
48  	if (max_packet) {
49  		seg->bounce_buf = kzalloc(max_packet, flags | GFP_DMA);
50  		if (!seg->bounce_buf)
51  			goto free_dma;
52  	}
53  
54  	/* If the cycle state is 0, set the cycle bit to 1 for all the TRBs. */
55  	if (cycle_state == 0) {
56  		for (i = 0; i < TRBS_PER_SEGMENT; i++)
57  			seg->trbs[i].link.control |= cpu_to_le32(TRB_CYCLE);
58  	}
59  	seg->dma = dma;
60  	seg->next = NULL;
61  
62  	return seg;
63  
64  free_dma:
65  	dma_pool_free(pdev->segment_pool, seg->trbs, dma);
66  	kfree(seg);
67  
68  	return NULL;
69  }
70  
71  static void cdnsp_segment_free(struct cdnsp_device *pdev,
72  			       struct cdnsp_segment *seg)
73  {
74  	if (seg->trbs)
75  		dma_pool_free(pdev->segment_pool, seg->trbs, seg->dma);
76  
77  	kfree(seg->bounce_buf);
78  	kfree(seg);
79  }
80  
81  static void cdnsp_free_segments_for_ring(struct cdnsp_device *pdev,
82  					 struct cdnsp_segment *first)
83  {
84  	struct cdnsp_segment *seg;
85  
86  	seg = first->next;
87  
88  	while (seg != first) {
89  		struct cdnsp_segment *next = seg->next;
90  
91  		cdnsp_segment_free(pdev, seg);
92  		seg = next;
93  	}
94  
95  	cdnsp_segment_free(pdev, first);
96  }
97  
98  /*
99   * Make the prev segment point to the next segment.
100   *
101   * Change the last TRB in the prev segment to be a Link TRB which points to the
102   * DMA address of the next segment. The caller needs to set any Link TRB
103   * related flags, such as End TRB, Toggle Cycle, and no snoop.
104   */
105  static void cdnsp_link_segments(struct cdnsp_device *pdev,
106  				struct cdnsp_segment *prev,
107  				struct cdnsp_segment *next,
108  				enum cdnsp_ring_type type)
109  {
110  	struct cdnsp_link_trb *link;
111  	u32 val;
112  
113  	if (!prev || !next)
114  		return;
115  
116  	prev->next = next;
117  	if (type != TYPE_EVENT) {
118  		link = &prev->trbs[TRBS_PER_SEGMENT - 1].link;
119  		link->segment_ptr = cpu_to_le64(next->dma);
120  
121  		/*
122  		 * Set the last TRB in the segment to have a TRB type ID
123  		 * of Link TRB
124  		 */
125  		val = le32_to_cpu(link->control);
126  		val &= ~TRB_TYPE_BITMASK;
127  		val |= TRB_TYPE(TRB_LINK);
128  		link->control = cpu_to_le32(val);
129  	}
130  }
131  
132  /*
133   * Link the ring to the new segments.
134   * Set Toggle Cycle for the new ring if needed.
135   */
136  static void cdnsp_link_rings(struct cdnsp_device *pdev,
137  			     struct cdnsp_ring *ring,
138  			     struct cdnsp_segment *first,
139  			     struct cdnsp_segment *last,
140  			     unsigned int num_segs)
141  {
142  	struct cdnsp_segment *next;
143  
144  	if (!ring || !first || !last)
145  		return;
146  
147  	next = ring->enq_seg->next;
148  	cdnsp_link_segments(pdev, ring->enq_seg, first, ring->type);
149  	cdnsp_link_segments(pdev, last, next, ring->type);
150  	ring->num_segs += num_segs;
151  	ring->num_trbs_free += (TRBS_PER_SEGMENT - 1) * num_segs;
152  
153  	if (ring->type != TYPE_EVENT && ring->enq_seg == ring->last_seg) {
154  		ring->last_seg->trbs[TRBS_PER_SEGMENT - 1].link.control &=
155  			~cpu_to_le32(LINK_TOGGLE);
156  		last->trbs[TRBS_PER_SEGMENT - 1].link.control |=
157  			cpu_to_le32(LINK_TOGGLE);
158  		ring->last_seg = last;
159  	}
160  }
161  
162  /*
163   * We need a radix tree for mapping physical addresses of TRBs to which stream
164   * ID they belong to. We need to do this because the device controller won't
165   * tell us which stream ring the TRB came from. We could store the stream ID
166   * in an event data TRB, but that doesn't help us for the cancellation case,
167   * since the endpoint may stop before it reaches that event data TRB.
168   *
169   * The radix tree maps the upper portion of the TRB DMA address to a ring
170   * segment that has the same upper portion of DMA addresses. For example,
171   * say I have segments of size 1KB, that are always 1KB aligned. A segment may
172   * start at 0x10c91000 and end at 0x10c913f0. If I use the upper 10 bits, the
173   * key to the stream ID is 0x43244. I can use the DMA address of the TRB to
174   * pass the radix tree a key to get the right stream ID:
175   *
176   *	0x10c90fff >> 10 = 0x43243
177   *	0x10c912c0 >> 10 = 0x43244
178   *	0x10c91400 >> 10 = 0x43245
179   *
180   * Obviously, only those TRBs with DMA addresses that are within the segment
181   * will make the radix tree return the stream ID for that ring.
182   *
183   * Caveats for the radix tree:
184   *
185   * The radix tree uses an unsigned long as a key pair. On 32-bit systems, an
186   * unsigned long will be 32-bits; on a 64-bit system an unsigned long will be
187   * 64-bits. Since we only request 32-bit DMA addresses, we can use that as the
188   * key on 32-bit or 64-bit systems (it would also be fine if we asked for 64-bit
189   * PCI DMA addresses on a 64-bit system). There might be a problem on 32-bit
190   * extended systems (where the DMA address can be bigger than 32-bits),
191   * if we allow the PCI dma mask to be bigger than 32-bits. So don't do that.
192   */
193  static int cdnsp_insert_segment_mapping(struct radix_tree_root *trb_address_map,
194  					struct cdnsp_ring *ring,
195  					struct cdnsp_segment *seg,
196  					gfp_t mem_flags)
197  {
198  	unsigned long key;
199  	int ret;
200  
201  	key = (unsigned long)(seg->dma >> TRB_SEGMENT_SHIFT);
202  
203  	/* Skip any segments that were already added. */
204  	if (radix_tree_lookup(trb_address_map, key))
205  		return 0;
206  
207  	ret = radix_tree_maybe_preload(mem_flags);
208  	if (ret)
209  		return ret;
210  
211  	ret = radix_tree_insert(trb_address_map, key, ring);
212  	radix_tree_preload_end();
213  
214  	return ret;
215  }
216  
217  static void cdnsp_remove_segment_mapping(struct radix_tree_root *trb_address_map,
218  					 struct cdnsp_segment *seg)
219  {
220  	unsigned long key;
221  
222  	key = (unsigned long)(seg->dma >> TRB_SEGMENT_SHIFT);
223  	if (radix_tree_lookup(trb_address_map, key))
224  		radix_tree_delete(trb_address_map, key);
225  }
226  
227  static int cdnsp_update_stream_segment_mapping(struct radix_tree_root *trb_address_map,
228  					       struct cdnsp_ring *ring,
229  					       struct cdnsp_segment *first_seg,
230  					       struct cdnsp_segment *last_seg,
231  					       gfp_t mem_flags)
232  {
233  	struct cdnsp_segment *failed_seg;
234  	struct cdnsp_segment *seg;
235  	int ret;
236  
237  	seg = first_seg;
238  	do {
239  		ret = cdnsp_insert_segment_mapping(trb_address_map, ring, seg,
240  						   mem_flags);
241  		if (ret)
242  			goto remove_streams;
243  		if (seg == last_seg)
244  			return 0;
245  		seg = seg->next;
246  	} while (seg != first_seg);
247  
248  	return 0;
249  
250  remove_streams:
251  	failed_seg = seg;
252  	seg = first_seg;
253  	do {
254  		cdnsp_remove_segment_mapping(trb_address_map, seg);
255  		if (seg == failed_seg)
256  			return ret;
257  		seg = seg->next;
258  	} while (seg != first_seg);
259  
260  	return ret;
261  }
262  
263  static void cdnsp_remove_stream_mapping(struct cdnsp_ring *ring)
264  {
265  	struct cdnsp_segment *seg;
266  
267  	seg = ring->first_seg;
268  	do {
269  		cdnsp_remove_segment_mapping(ring->trb_address_map, seg);
270  		seg = seg->next;
271  	} while (seg != ring->first_seg);
272  }
273  
274  static int cdnsp_update_stream_mapping(struct cdnsp_ring *ring)
275  {
276  	return cdnsp_update_stream_segment_mapping(ring->trb_address_map, ring,
277  			ring->first_seg, ring->last_seg, GFP_ATOMIC);
278  }
279  
280  static void cdnsp_ring_free(struct cdnsp_device *pdev, struct cdnsp_ring *ring)
281  {
282  	if (!ring)
283  		return;
284  
285  	trace_cdnsp_ring_free(ring);
286  
287  	if (ring->first_seg) {
288  		if (ring->type == TYPE_STREAM)
289  			cdnsp_remove_stream_mapping(ring);
290  
291  		cdnsp_free_segments_for_ring(pdev, ring->first_seg);
292  	}
293  
294  	kfree(ring);
295  }
296  
297  void cdnsp_initialize_ring_info(struct cdnsp_ring *ring)
298  {
299  	ring->enqueue = ring->first_seg->trbs;
300  	ring->enq_seg = ring->first_seg;
301  	ring->dequeue = ring->enqueue;
302  	ring->deq_seg = ring->first_seg;
303  
304  	/*
305  	 * The ring is initialized to 0. The producer must write 1 to the cycle
306  	 * bit to handover ownership of the TRB, so PCS = 1. The consumer must
307  	 * compare CCS to the cycle bit to check ownership, so CCS = 1.
308  	 *
309  	 * New rings are initialized with cycle state equal to 1; if we are
310  	 * handling ring expansion, set the cycle state equal to the old ring.
311  	 */
312  	ring->cycle_state = 1;
313  
314  	/*
315  	 * Each segment has a link TRB, and leave an extra TRB for SW
316  	 * accounting purpose
317  	 */
318  	ring->num_trbs_free = ring->num_segs * (TRBS_PER_SEGMENT - 1) - 1;
319  }
320  
321  /* Allocate segments and link them for a ring. */
322  static int cdnsp_alloc_segments_for_ring(struct cdnsp_device *pdev,
323  					 struct cdnsp_segment **first,
324  					 struct cdnsp_segment **last,
325  					 unsigned int num_segs,
326  					 unsigned int cycle_state,
327  					 enum cdnsp_ring_type type,
328  					 unsigned int max_packet,
329  					 gfp_t flags)
330  {
331  	struct cdnsp_segment *prev;
332  
333  	/* Allocate first segment. */
334  	prev = cdnsp_segment_alloc(pdev, cycle_state, max_packet, flags);
335  	if (!prev)
336  		return -ENOMEM;
337  
338  	num_segs--;
339  	*first = prev;
340  
341  	/* Allocate all other segments. */
342  	while (num_segs > 0) {
343  		struct cdnsp_segment	*next;
344  
345  		next = cdnsp_segment_alloc(pdev, cycle_state,
346  					   max_packet, flags);
347  		if (!next) {
348  			cdnsp_free_segments_for_ring(pdev, *first);
349  			return -ENOMEM;
350  		}
351  
352  		cdnsp_link_segments(pdev, prev, next, type);
353  
354  		prev = next;
355  		num_segs--;
356  	}
357  
358  	cdnsp_link_segments(pdev, prev, *first, type);
359  	*last = prev;
360  
361  	return 0;
362  }
363  
364  /*
365   * Create a new ring with zero or more segments.
366   *
367   * Link each segment together into a ring.
368   * Set the end flag and the cycle toggle bit on the last segment.
369   */
370  static struct cdnsp_ring *cdnsp_ring_alloc(struct cdnsp_device *pdev,
371  					   unsigned int num_segs,
372  					   enum cdnsp_ring_type type,
373  					   unsigned int max_packet,
374  					   gfp_t flags)
375  {
376  	struct cdnsp_ring *ring;
377  	int ret;
378  
379  	ring = kzalloc(sizeof *(ring), flags);
380  	if (!ring)
381  		return NULL;
382  
383  	ring->num_segs = num_segs;
384  	ring->bounce_buf_len = max_packet;
385  	INIT_LIST_HEAD(&ring->td_list);
386  	ring->type = type;
387  
388  	if (num_segs == 0)
389  		return ring;
390  
391  	ret = cdnsp_alloc_segments_for_ring(pdev, &ring->first_seg,
392  					    &ring->last_seg, num_segs,
393  					    1, type, max_packet, flags);
394  	if (ret)
395  		goto fail;
396  
397  	/* Only event ring does not use link TRB. */
398  	if (type != TYPE_EVENT)
399  		ring->last_seg->trbs[TRBS_PER_SEGMENT - 1].link.control |=
400  			cpu_to_le32(LINK_TOGGLE);
401  
402  	cdnsp_initialize_ring_info(ring);
403  	trace_cdnsp_ring_alloc(ring);
404  	return ring;
405  fail:
406  	kfree(ring);
407  	return NULL;
408  }
409  
410  void cdnsp_free_endpoint_rings(struct cdnsp_device *pdev, struct cdnsp_ep *pep)
411  {
412  	cdnsp_ring_free(pdev, pep->ring);
413  	pep->ring = NULL;
414  	cdnsp_free_stream_info(pdev, pep);
415  }
416  
417  /*
418   * Expand an existing ring.
419   * Allocate a new ring which has same segment numbers and link the two rings.
420   */
421  int cdnsp_ring_expansion(struct cdnsp_device *pdev,
422  			 struct cdnsp_ring *ring,
423  			 unsigned int num_trbs,
424  			 gfp_t flags)
425  {
426  	unsigned int num_segs_needed;
427  	struct cdnsp_segment *first;
428  	struct cdnsp_segment *last;
429  	unsigned int num_segs;
430  	int ret;
431  
432  	num_segs_needed = (num_trbs + (TRBS_PER_SEGMENT - 1) - 1) /
433  			(TRBS_PER_SEGMENT - 1);
434  
435  	/* Allocate number of segments we needed, or double the ring size. */
436  	num_segs = max(ring->num_segs, num_segs_needed);
437  
438  	ret = cdnsp_alloc_segments_for_ring(pdev, &first, &last, num_segs,
439  					    ring->cycle_state, ring->type,
440  					    ring->bounce_buf_len, flags);
441  	if (ret)
442  		return -ENOMEM;
443  
444  	if (ring->type == TYPE_STREAM)
445  		ret = cdnsp_update_stream_segment_mapping(ring->trb_address_map,
446  							  ring, first,
447  							  last, flags);
448  
449  	if (ret) {
450  		cdnsp_free_segments_for_ring(pdev, first);
451  
452  		return ret;
453  	}
454  
455  	cdnsp_link_rings(pdev, ring, first, last, num_segs);
456  	trace_cdnsp_ring_expansion(ring);
457  
458  	return 0;
459  }
460  
461  static int cdnsp_init_device_ctx(struct cdnsp_device *pdev)
462  {
463  	int size = HCC_64BYTE_CONTEXT(pdev->hcc_params) ? 2048 : 1024;
464  
465  	pdev->out_ctx.type = CDNSP_CTX_TYPE_DEVICE;
466  	pdev->out_ctx.size = size;
467  	pdev->out_ctx.ctx_size = CTX_SIZE(pdev->hcc_params);
468  	pdev->out_ctx.bytes = dma_pool_zalloc(pdev->device_pool, GFP_ATOMIC,
469  					      &pdev->out_ctx.dma);
470  
471  	if (!pdev->out_ctx.bytes)
472  		return -ENOMEM;
473  
474  	pdev->in_ctx.type = CDNSP_CTX_TYPE_INPUT;
475  	pdev->in_ctx.ctx_size = pdev->out_ctx.ctx_size;
476  	pdev->in_ctx.size = size + pdev->out_ctx.ctx_size;
477  	pdev->in_ctx.bytes = dma_pool_zalloc(pdev->device_pool, GFP_ATOMIC,
478  					     &pdev->in_ctx.dma);
479  
480  	if (!pdev->in_ctx.bytes) {
481  		dma_pool_free(pdev->device_pool, pdev->out_ctx.bytes,
482  			      pdev->out_ctx.dma);
483  		return -ENOMEM;
484  	}
485  
486  	return 0;
487  }
488  
489  struct cdnsp_input_control_ctx
490  	*cdnsp_get_input_control_ctx(struct cdnsp_container_ctx *ctx)
491  {
492  	if (ctx->type != CDNSP_CTX_TYPE_INPUT)
493  		return NULL;
494  
495  	return (struct cdnsp_input_control_ctx *)ctx->bytes;
496  }
497  
498  struct cdnsp_slot_ctx *cdnsp_get_slot_ctx(struct cdnsp_container_ctx *ctx)
499  {
500  	if (ctx->type == CDNSP_CTX_TYPE_DEVICE)
501  		return (struct cdnsp_slot_ctx *)ctx->bytes;
502  
503  	return (struct cdnsp_slot_ctx *)(ctx->bytes + ctx->ctx_size);
504  }
505  
506  struct cdnsp_ep_ctx *cdnsp_get_ep_ctx(struct cdnsp_container_ctx *ctx,
507  				      unsigned int ep_index)
508  {
509  	/* Increment ep index by offset of start of ep ctx array. */
510  	ep_index++;
511  	if (ctx->type == CDNSP_CTX_TYPE_INPUT)
512  		ep_index++;
513  
514  	return (struct cdnsp_ep_ctx *)(ctx->bytes + (ep_index * ctx->ctx_size));
515  }
516  
517  static void cdnsp_free_stream_ctx(struct cdnsp_device *pdev,
518  				  struct cdnsp_ep *pep)
519  {
520  	dma_pool_free(pdev->device_pool, pep->stream_info.stream_ctx_array,
521  		      pep->stream_info.ctx_array_dma);
522  }
523  
524  /* The stream context array must be a power of 2. */
525  static struct cdnsp_stream_ctx
526  	*cdnsp_alloc_stream_ctx(struct cdnsp_device *pdev, struct cdnsp_ep *pep)
527  {
528  	size_t size = sizeof(struct cdnsp_stream_ctx) *
529  		      pep->stream_info.num_stream_ctxs;
530  
531  	if (size > CDNSP_CTX_SIZE)
532  		return NULL;
533  
534  	/**
535  	 * Driver uses intentionally the device_pool to allocated stream
536  	 * context array. Device Pool has 2048 bytes of size what gives us
537  	 * 128 entries.
538  	 */
539  	return dma_pool_zalloc(pdev->device_pool, GFP_DMA32 | GFP_ATOMIC,
540  			       &pep->stream_info.ctx_array_dma);
541  }
542  
543  struct cdnsp_ring *cdnsp_dma_to_transfer_ring(struct cdnsp_ep *pep, u64 address)
544  {
545  	if (pep->ep_state & EP_HAS_STREAMS)
546  		return radix_tree_lookup(&pep->stream_info.trb_address_map,
547  					 address >> TRB_SEGMENT_SHIFT);
548  
549  	return pep->ring;
550  }
551  
552  /*
553   * Change an endpoint's internal structure so it supports stream IDs.
554   * The number of requested streams includes stream 0, which cannot be used by
555   * driver.
556   *
557   * The number of stream contexts in the stream context array may be bigger than
558   * the number of streams the driver wants to use. This is because the number of
559   * stream context array entries must be a power of two.
560   */
561  int cdnsp_alloc_stream_info(struct cdnsp_device *pdev,
562  			    struct cdnsp_ep *pep,
563  			    unsigned int num_stream_ctxs,
564  			    unsigned int num_streams)
565  {
566  	struct cdnsp_stream_info *stream_info;
567  	struct cdnsp_ring *cur_ring;
568  	u32 cur_stream;
569  	u64 addr;
570  	int ret;
571  	int mps;
572  
573  	stream_info = &pep->stream_info;
574  	stream_info->num_streams = num_streams;
575  	stream_info->num_stream_ctxs = num_stream_ctxs;
576  
577  	/* Initialize the array of virtual pointers to stream rings. */
578  	stream_info->stream_rings = kcalloc(num_streams,
579  					    sizeof(struct cdnsp_ring *),
580  					    GFP_ATOMIC);
581  	if (!stream_info->stream_rings)
582  		return -ENOMEM;
583  
584  	/* Initialize the array of DMA addresses for stream rings for the HW. */
585  	stream_info->stream_ctx_array = cdnsp_alloc_stream_ctx(pdev, pep);
586  	if (!stream_info->stream_ctx_array)
587  		goto cleanup_stream_rings;
588  
589  	memset(stream_info->stream_ctx_array, 0,
590  	       sizeof(struct cdnsp_stream_ctx) * num_stream_ctxs);
591  	INIT_RADIX_TREE(&stream_info->trb_address_map, GFP_ATOMIC);
592  	mps = usb_endpoint_maxp(pep->endpoint.desc);
593  
594  	/*
595  	 * Allocate rings for all the streams that the driver will use,
596  	 * and add their segment DMA addresses to the radix tree.
597  	 * Stream 0 is reserved.
598  	 */
599  	for (cur_stream = 1; cur_stream < num_streams; cur_stream++) {
600  		cur_ring = cdnsp_ring_alloc(pdev, 2, TYPE_STREAM, mps,
601  					    GFP_ATOMIC);
602  		stream_info->stream_rings[cur_stream] = cur_ring;
603  
604  		if (!cur_ring)
605  			goto cleanup_rings;
606  
607  		cur_ring->stream_id = cur_stream;
608  		cur_ring->trb_address_map = &stream_info->trb_address_map;
609  
610  		/* Set deq ptr, cycle bit, and stream context type. */
611  		addr = cur_ring->first_seg->dma | SCT_FOR_CTX(SCT_PRI_TR) |
612  		       cur_ring->cycle_state;
613  
614  		stream_info->stream_ctx_array[cur_stream].stream_ring =
615  			cpu_to_le64(addr);
616  
617  		trace_cdnsp_set_stream_ring(cur_ring);
618  
619  		ret = cdnsp_update_stream_mapping(cur_ring);
620  		if (ret)
621  			goto cleanup_rings;
622  	}
623  
624  	return 0;
625  
626  cleanup_rings:
627  	for (cur_stream = 1; cur_stream < num_streams; cur_stream++) {
628  		cur_ring = stream_info->stream_rings[cur_stream];
629  		if (cur_ring) {
630  			cdnsp_ring_free(pdev, cur_ring);
631  			stream_info->stream_rings[cur_stream] = NULL;
632  		}
633  	}
634  
635  cleanup_stream_rings:
636  	kfree(pep->stream_info.stream_rings);
637  
638  	return -ENOMEM;
639  }
640  
641  /* Frees all stream contexts associated with the endpoint. */
642  static void cdnsp_free_stream_info(struct cdnsp_device *pdev,
643  				   struct cdnsp_ep *pep)
644  {
645  	struct cdnsp_stream_info *stream_info = &pep->stream_info;
646  	struct cdnsp_ring *cur_ring;
647  	int cur_stream;
648  
649  	if (!(pep->ep_state & EP_HAS_STREAMS))
650  		return;
651  
652  	for (cur_stream = 1; cur_stream < stream_info->num_streams;
653  	     cur_stream++) {
654  		cur_ring = stream_info->stream_rings[cur_stream];
655  		if (cur_ring) {
656  			cdnsp_ring_free(pdev, cur_ring);
657  			stream_info->stream_rings[cur_stream] = NULL;
658  		}
659  	}
660  
661  	if (stream_info->stream_ctx_array)
662  		cdnsp_free_stream_ctx(pdev, pep);
663  
664  	kfree(stream_info->stream_rings);
665  	pep->ep_state &= ~EP_HAS_STREAMS;
666  }
667  
668  /* All the cdnsp_tds in the ring's TD list should be freed at this point.*/
669  static void cdnsp_free_priv_device(struct cdnsp_device *pdev)
670  {
671  	pdev->dcbaa->dev_context_ptrs[1] = 0;
672  
673  	cdnsp_free_endpoint_rings(pdev, &pdev->eps[0]);
674  
675  	if (pdev->in_ctx.bytes)
676  		dma_pool_free(pdev->device_pool, pdev->in_ctx.bytes,
677  			      pdev->in_ctx.dma);
678  
679  	if (pdev->out_ctx.bytes)
680  		dma_pool_free(pdev->device_pool, pdev->out_ctx.bytes,
681  			      pdev->out_ctx.dma);
682  
683  	pdev->in_ctx.bytes = NULL;
684  	pdev->out_ctx.bytes = NULL;
685  }
686  
687  static int cdnsp_alloc_priv_device(struct cdnsp_device *pdev)
688  {
689  	int ret;
690  
691  	ret = cdnsp_init_device_ctx(pdev);
692  	if (ret)
693  		return ret;
694  
695  	/* Allocate endpoint 0 ring. */
696  	pdev->eps[0].ring = cdnsp_ring_alloc(pdev, 2, TYPE_CTRL, 0, GFP_ATOMIC);
697  	if (!pdev->eps[0].ring)
698  		goto fail;
699  
700  	/* Point to output device context in dcbaa. */
701  	pdev->dcbaa->dev_context_ptrs[1] = cpu_to_le64(pdev->out_ctx.dma);
702  	pdev->cmd.in_ctx = &pdev->in_ctx;
703  
704  	trace_cdnsp_alloc_priv_device(pdev);
705  	return 0;
706  fail:
707  	dma_pool_free(pdev->device_pool, pdev->out_ctx.bytes,
708  		      pdev->out_ctx.dma);
709  	dma_pool_free(pdev->device_pool, pdev->in_ctx.bytes,
710  		      pdev->in_ctx.dma);
711  
712  	return ret;
713  }
714  
715  void cdnsp_copy_ep0_dequeue_into_input_ctx(struct cdnsp_device *pdev)
716  {
717  	struct cdnsp_ep_ctx *ep0_ctx = pdev->eps[0].in_ctx;
718  	struct cdnsp_ring *ep_ring = pdev->eps[0].ring;
719  	dma_addr_t dma;
720  
721  	dma = cdnsp_trb_virt_to_dma(ep_ring->enq_seg, ep_ring->enqueue);
722  	ep0_ctx->deq = cpu_to_le64(dma | ep_ring->cycle_state);
723  }
724  
725  /* Setup an controller private device for a Set Address command. */
726  int cdnsp_setup_addressable_priv_dev(struct cdnsp_device *pdev)
727  {
728  	struct cdnsp_slot_ctx *slot_ctx;
729  	struct cdnsp_ep_ctx *ep0_ctx;
730  	u32 max_packets, port;
731  
732  	ep0_ctx = cdnsp_get_ep_ctx(&pdev->in_ctx, 0);
733  	slot_ctx = cdnsp_get_slot_ctx(&pdev->in_ctx);
734  
735  	/* Only the control endpoint is valid - one endpoint context. */
736  	slot_ctx->dev_info |= cpu_to_le32(LAST_CTX(1));
737  
738  	switch (pdev->gadget.speed) {
739  	case USB_SPEED_SUPER_PLUS:
740  		slot_ctx->dev_info |= cpu_to_le32(SLOT_SPEED_SSP);
741  		max_packets = MAX_PACKET(512);
742  		break;
743  	case USB_SPEED_SUPER:
744  		slot_ctx->dev_info |= cpu_to_le32(SLOT_SPEED_SS);
745  		max_packets = MAX_PACKET(512);
746  		break;
747  	case USB_SPEED_HIGH:
748  		slot_ctx->dev_info |= cpu_to_le32(SLOT_SPEED_HS);
749  		max_packets = MAX_PACKET(64);
750  		break;
751  	case USB_SPEED_FULL:
752  		slot_ctx->dev_info |= cpu_to_le32(SLOT_SPEED_FS);
753  		max_packets = MAX_PACKET(64);
754  		break;
755  	default:
756  		/* Speed was not set , this shouldn't happen. */
757  		return -EINVAL;
758  	}
759  
760  	port = DEV_PORT(pdev->active_port->port_num);
761  	slot_ctx->dev_port |= cpu_to_le32(port);
762  	slot_ctx->dev_state = cpu_to_le32((pdev->device_address &
763  					   DEV_ADDR_MASK));
764  	ep0_ctx->tx_info = cpu_to_le32(EP_AVG_TRB_LENGTH(0x8));
765  	ep0_ctx->ep_info2 = cpu_to_le32(EP_TYPE(CTRL_EP));
766  	ep0_ctx->ep_info2 |= cpu_to_le32(MAX_BURST(0) | ERROR_COUNT(3) |
767  					 max_packets);
768  
769  	ep0_ctx->deq = cpu_to_le64(pdev->eps[0].ring->first_seg->dma |
770  				   pdev->eps[0].ring->cycle_state);
771  
772  	trace_cdnsp_setup_addressable_priv_device(pdev);
773  
774  	return 0;
775  }
776  
777  /*
778   * Convert interval expressed as 2^(bInterval - 1) == interval into
779   * straight exponent value 2^n == interval.
780   */
781  static unsigned int cdnsp_parse_exponent_interval(struct usb_gadget *g,
782  						  struct cdnsp_ep *pep)
783  {
784  	unsigned int interval;
785  
786  	interval = clamp_val(pep->endpoint.desc->bInterval, 1, 16) - 1;
787  	if (interval != pep->endpoint.desc->bInterval - 1)
788  		dev_warn(&g->dev, "ep %s - rounding interval to %d %sframes\n",
789  			 pep->name, 1 << interval,
790  			 g->speed == USB_SPEED_FULL ? "" : "micro");
791  
792  	/*
793  	 * Full speed isoc endpoints specify interval in frames,
794  	 * not microframes. We are using microframes everywhere,
795  	 * so adjust accordingly.
796  	 */
797  	if (g->speed == USB_SPEED_FULL)
798  		interval += 3;	/* 1 frame = 2^3 uframes */
799  
800  	/* Controller handles only up to 512ms (2^12). */
801  	if (interval > 12)
802  		interval = 12;
803  
804  	return interval;
805  }
806  
807  /*
808   * Convert bInterval expressed in microframes (in 1-255 range) to exponent of
809   * microframes, rounded down to nearest power of 2.
810   */
811  static unsigned int cdnsp_microframes_to_exponent(struct usb_gadget *g,
812  						  struct cdnsp_ep *pep,
813  						  unsigned int desc_interval,
814  						  unsigned int min_exponent,
815  						  unsigned int max_exponent)
816  {
817  	unsigned int interval;
818  
819  	interval = fls(desc_interval) - 1;
820  	return clamp_val(interval, min_exponent, max_exponent);
821  }
822  
823  /*
824   * Return the polling interval.
825   *
826   * The polling interval is expressed in "microframes". If controllers's Interval
827   * field is set to N, it will service the endpoint every 2^(Interval)*125us.
828   */
829  static unsigned int cdnsp_get_endpoint_interval(struct usb_gadget *g,
830  						struct cdnsp_ep *pep)
831  {
832  	unsigned int interval = 0;
833  
834  	switch (g->speed) {
835  	case USB_SPEED_HIGH:
836  	case USB_SPEED_SUPER_PLUS:
837  	case USB_SPEED_SUPER:
838  		if (usb_endpoint_xfer_int(pep->endpoint.desc) ||
839  		    usb_endpoint_xfer_isoc(pep->endpoint.desc))
840  			interval = cdnsp_parse_exponent_interval(g, pep);
841  		break;
842  	case USB_SPEED_FULL:
843  		if (usb_endpoint_xfer_isoc(pep->endpoint.desc)) {
844  			interval = cdnsp_parse_exponent_interval(g, pep);
845  		} else if (usb_endpoint_xfer_int(pep->endpoint.desc)) {
846  			interval = pep->endpoint.desc->bInterval << 3;
847  			interval = cdnsp_microframes_to_exponent(g, pep,
848  								 interval,
849  								 3, 10);
850  		}
851  
852  		break;
853  	default:
854  		WARN_ON(1);
855  	}
856  
857  	return interval;
858  }
859  
860  /*
861   * The "Mult" field in the endpoint context is only set for SuperSpeed isoc eps.
862   * High speed endpoint descriptors can define "the number of additional
863   * transaction opportunities per microframe", but that goes in the Max Burst
864   * endpoint context field.
865   */
866  static u32 cdnsp_get_endpoint_mult(struct usb_gadget *g, struct cdnsp_ep *pep)
867  {
868  	if (g->speed < USB_SPEED_SUPER ||
869  	    !usb_endpoint_xfer_isoc(pep->endpoint.desc))
870  		return 0;
871  
872  	return pep->endpoint.comp_desc->bmAttributes;
873  }
874  
875  static u32 cdnsp_get_endpoint_max_burst(struct usb_gadget *g,
876  					struct cdnsp_ep *pep)
877  {
878  	/* Super speed and Plus have max burst in ep companion desc */
879  	if (g->speed >= USB_SPEED_SUPER)
880  		return pep->endpoint.comp_desc->bMaxBurst;
881  
882  	if (g->speed == USB_SPEED_HIGH &&
883  	    (usb_endpoint_xfer_isoc(pep->endpoint.desc) ||
884  	     usb_endpoint_xfer_int(pep->endpoint.desc)))
885  		return usb_endpoint_maxp_mult(pep->endpoint.desc) - 1;
886  
887  	return 0;
888  }
889  
890  static u32 cdnsp_get_endpoint_type(const struct usb_endpoint_descriptor *desc)
891  {
892  	int in;
893  
894  	in = usb_endpoint_dir_in(desc);
895  
896  	switch (usb_endpoint_type(desc)) {
897  	case USB_ENDPOINT_XFER_CONTROL:
898  		return CTRL_EP;
899  	case USB_ENDPOINT_XFER_BULK:
900  		return in ? BULK_IN_EP : BULK_OUT_EP;
901  	case USB_ENDPOINT_XFER_ISOC:
902  		return in ? ISOC_IN_EP : ISOC_OUT_EP;
903  	case USB_ENDPOINT_XFER_INT:
904  		return in ? INT_IN_EP : INT_OUT_EP;
905  	}
906  
907  	return 0;
908  }
909  
910  /*
911   * Return the maximum endpoint service interval time (ESIT) payload.
912   * Basically, this is the maxpacket size, multiplied by the burst size
913   * and mult size.
914   */
915  static u32 cdnsp_get_max_esit_payload(struct usb_gadget *g,
916  				      struct cdnsp_ep *pep)
917  {
918  	int max_packet;
919  	int max_burst;
920  
921  	/* Only applies for interrupt or isochronous endpoints*/
922  	if (usb_endpoint_xfer_control(pep->endpoint.desc) ||
923  	    usb_endpoint_xfer_bulk(pep->endpoint.desc))
924  		return 0;
925  
926  	/* SuperSpeedPlus Isoc ep sending over 48k per EIST. */
927  	if (g->speed >= USB_SPEED_SUPER_PLUS &&
928  	    USB_SS_SSP_ISOC_COMP(pep->endpoint.desc->bmAttributes))
929  		return le16_to_cpu(pep->endpoint.comp_desc->wBytesPerInterval);
930  	/* SuperSpeed or SuperSpeedPlus Isoc ep with less than 48k per esit */
931  	else if (g->speed >= USB_SPEED_SUPER)
932  		return le16_to_cpu(pep->endpoint.comp_desc->wBytesPerInterval);
933  
934  	max_packet = usb_endpoint_maxp(pep->endpoint.desc);
935  	max_burst = usb_endpoint_maxp_mult(pep->endpoint.desc);
936  
937  	/* A 0 in max burst means 1 transfer per ESIT */
938  	return max_packet * max_burst;
939  }
940  
941  int cdnsp_endpoint_init(struct cdnsp_device *pdev,
942  			struct cdnsp_ep *pep,
943  			gfp_t mem_flags)
944  {
945  	enum cdnsp_ring_type ring_type;
946  	struct cdnsp_ep_ctx *ep_ctx;
947  	unsigned int err_count = 0;
948  	unsigned int avg_trb_len;
949  	unsigned int max_packet;
950  	unsigned int max_burst;
951  	unsigned int interval;
952  	u32 max_esit_payload;
953  	unsigned int mult;
954  	u32 endpoint_type;
955  	int ret;
956  
957  	ep_ctx = pep->in_ctx;
958  
959  	endpoint_type = cdnsp_get_endpoint_type(pep->endpoint.desc);
960  	if (!endpoint_type)
961  		return -EINVAL;
962  
963  	ring_type = usb_endpoint_type(pep->endpoint.desc);
964  
965  	/*
966  	 * Get values to fill the endpoint context, mostly from ep descriptor.
967  	 * The average TRB buffer length for bulk endpoints is unclear as we
968  	 * have no clue on scatter gather list entry size. For Isoc and Int,
969  	 * set it to max available.
970  	 */
971  	max_esit_payload = cdnsp_get_max_esit_payload(&pdev->gadget, pep);
972  	interval = cdnsp_get_endpoint_interval(&pdev->gadget, pep);
973  	mult = cdnsp_get_endpoint_mult(&pdev->gadget, pep);
974  	max_packet = usb_endpoint_maxp(pep->endpoint.desc);
975  	max_burst = cdnsp_get_endpoint_max_burst(&pdev->gadget, pep);
976  	avg_trb_len = max_esit_payload;
977  
978  	/* Allow 3 retries for everything but isoc, set CErr = 3. */
979  	if (!usb_endpoint_xfer_isoc(pep->endpoint.desc))
980  		err_count = 3;
981  	if (usb_endpoint_xfer_bulk(pep->endpoint.desc) &&
982  	    pdev->gadget.speed == USB_SPEED_HIGH)
983  		max_packet = 512;
984  	/* Controller spec indicates that ctrl ep avg TRB Length should be 8. */
985  	if (usb_endpoint_xfer_control(pep->endpoint.desc))
986  		avg_trb_len = 8;
987  
988  	/* Set up the endpoint ring. */
989  	pep->ring = cdnsp_ring_alloc(pdev, 2, ring_type, max_packet, mem_flags);
990  	if (!pep->ring)
991  		return -ENOMEM;
992  
993  	pep->skip = false;
994  
995  	/* Fill the endpoint context */
996  	ep_ctx->ep_info = cpu_to_le32(EP_MAX_ESIT_PAYLOAD_HI(max_esit_payload) |
997  				EP_INTERVAL(interval) | EP_MULT(mult));
998  	ep_ctx->ep_info2 = cpu_to_le32(EP_TYPE(endpoint_type) |
999  				MAX_PACKET(max_packet) | MAX_BURST(max_burst) |
1000  				ERROR_COUNT(err_count));
1001  	ep_ctx->deq = cpu_to_le64(pep->ring->first_seg->dma |
1002  				  pep->ring->cycle_state);
1003  
1004  	ep_ctx->tx_info = cpu_to_le32(EP_MAX_ESIT_PAYLOAD_LO(max_esit_payload) |
1005  				EP_AVG_TRB_LENGTH(avg_trb_len));
1006  
1007  	if (usb_endpoint_xfer_bulk(pep->endpoint.desc) &&
1008  	    pdev->gadget.speed > USB_SPEED_HIGH) {
1009  		ret = cdnsp_alloc_streams(pdev, pep);
1010  		if (ret < 0)
1011  			return ret;
1012  	}
1013  
1014  	return 0;
1015  }
1016  
1017  void cdnsp_endpoint_zero(struct cdnsp_device *pdev, struct cdnsp_ep *pep)
1018  {
1019  	pep->in_ctx->ep_info = 0;
1020  	pep->in_ctx->ep_info2 = 0;
1021  	pep->in_ctx->deq = 0;
1022  	pep->in_ctx->tx_info = 0;
1023  }
1024  
1025  static int cdnsp_alloc_erst(struct cdnsp_device *pdev,
1026  			    struct cdnsp_ring *evt_ring,
1027  			    struct cdnsp_erst *erst)
1028  {
1029  	struct cdnsp_erst_entry *entry;
1030  	struct cdnsp_segment *seg;
1031  	unsigned int val;
1032  	size_t size;
1033  
1034  	size = sizeof(struct cdnsp_erst_entry) * evt_ring->num_segs;
1035  	erst->entries = dma_alloc_coherent(pdev->dev, size,
1036  					   &erst->erst_dma_addr, GFP_KERNEL);
1037  	if (!erst->entries)
1038  		return -ENOMEM;
1039  
1040  	erst->num_entries = evt_ring->num_segs;
1041  
1042  	seg = evt_ring->first_seg;
1043  	for (val = 0; val < evt_ring->num_segs; val++) {
1044  		entry = &erst->entries[val];
1045  		entry->seg_addr = cpu_to_le64(seg->dma);
1046  		entry->seg_size = cpu_to_le32(TRBS_PER_SEGMENT);
1047  		entry->rsvd = 0;
1048  		seg = seg->next;
1049  	}
1050  
1051  	return 0;
1052  }
1053  
1054  static void cdnsp_free_erst(struct cdnsp_device *pdev, struct cdnsp_erst *erst)
1055  {
1056  	size_t size = sizeof(struct cdnsp_erst_entry) * (erst->num_entries);
1057  	struct device *dev = pdev->dev;
1058  
1059  	if (erst->entries)
1060  		dma_free_coherent(dev, size, erst->entries,
1061  				  erst->erst_dma_addr);
1062  
1063  	erst->entries = NULL;
1064  }
1065  
1066  void cdnsp_mem_cleanup(struct cdnsp_device *pdev)
1067  {
1068  	struct device *dev = pdev->dev;
1069  
1070  	cdnsp_free_priv_device(pdev);
1071  	cdnsp_free_erst(pdev, &pdev->erst);
1072  
1073  	if (pdev->event_ring)
1074  		cdnsp_ring_free(pdev, pdev->event_ring);
1075  
1076  	pdev->event_ring = NULL;
1077  
1078  	if (pdev->cmd_ring)
1079  		cdnsp_ring_free(pdev, pdev->cmd_ring);
1080  
1081  	pdev->cmd_ring = NULL;
1082  
1083  	dma_pool_destroy(pdev->segment_pool);
1084  	pdev->segment_pool = NULL;
1085  	dma_pool_destroy(pdev->device_pool);
1086  	pdev->device_pool = NULL;
1087  
1088  	dma_free_coherent(dev, sizeof(*pdev->dcbaa),
1089  			  pdev->dcbaa, pdev->dcbaa->dma);
1090  
1091  	pdev->dcbaa = NULL;
1092  
1093  	pdev->usb2_port.exist = 0;
1094  	pdev->usb3_port.exist = 0;
1095  	pdev->usb2_port.port_num = 0;
1096  	pdev->usb3_port.port_num = 0;
1097  	pdev->active_port = NULL;
1098  }
1099  
1100  static void cdnsp_set_event_deq(struct cdnsp_device *pdev)
1101  {
1102  	dma_addr_t deq;
1103  	u64 temp;
1104  
1105  	deq = cdnsp_trb_virt_to_dma(pdev->event_ring->deq_seg,
1106  				    pdev->event_ring->dequeue);
1107  
1108  	/* Update controller event ring dequeue pointer */
1109  	temp = cdnsp_read_64(&pdev->ir_set->erst_dequeue);
1110  	temp &= ERST_PTR_MASK;
1111  
1112  	/*
1113  	 * Don't clear the EHB bit (which is RW1C) because
1114  	 * there might be more events to service.
1115  	 */
1116  	temp &= ~ERST_EHB;
1117  
1118  	cdnsp_write_64(((u64)deq & (u64)~ERST_PTR_MASK) | temp,
1119  		       &pdev->ir_set->erst_dequeue);
1120  }
1121  
1122  static void cdnsp_add_in_port(struct cdnsp_device *pdev,
1123  			      struct cdnsp_port *port,
1124  			      __le32 __iomem *addr)
1125  {
1126  	u32 temp, port_offset, port_count;
1127  
1128  	temp = readl(addr);
1129  	port->maj_rev = CDNSP_EXT_PORT_MAJOR(temp);
1130  	port->min_rev = CDNSP_EXT_PORT_MINOR(temp);
1131  
1132  	/* Port offset and count in the third dword.*/
1133  	temp = readl(addr + 2);
1134  	port_offset = CDNSP_EXT_PORT_OFF(temp);
1135  	port_count = CDNSP_EXT_PORT_COUNT(temp);
1136  
1137  	trace_cdnsp_port_info(addr, port_offset, port_count, port->maj_rev);
1138  
1139  	port->port_num = port_offset;
1140  	port->exist = 1;
1141  }
1142  
1143  /*
1144   * Scan the Extended Capabilities for the "Supported Protocol Capabilities" that
1145   * specify what speeds each port is supposed to be.
1146   */
1147  static int cdnsp_setup_port_arrays(struct cdnsp_device *pdev)
1148  {
1149  	void __iomem *base;
1150  	u32 offset;
1151  	int i;
1152  
1153  	base = &pdev->cap_regs->hc_capbase;
1154  	offset = cdnsp_find_next_ext_cap(base, 0,
1155  					 EXT_CAP_CFG_DEV_20PORT_CAP_ID);
1156  	pdev->port20_regs = base + offset;
1157  
1158  	offset = cdnsp_find_next_ext_cap(base, 0, D_XEC_CFG_3XPORT_CAP);
1159  	pdev->port3x_regs =  base + offset;
1160  
1161  	offset = 0;
1162  	base = &pdev->cap_regs->hc_capbase;
1163  
1164  	/* Driver expects max 2 extended protocol capability. */
1165  	for (i = 0; i < 2; i++) {
1166  		u32 temp;
1167  
1168  		offset = cdnsp_find_next_ext_cap(base, offset,
1169  						 EXT_CAPS_PROTOCOL);
1170  		temp = readl(base + offset);
1171  
1172  		if (CDNSP_EXT_PORT_MAJOR(temp) == 0x03 &&
1173  		    !pdev->usb3_port.port_num)
1174  			cdnsp_add_in_port(pdev, &pdev->usb3_port,
1175  					  base + offset);
1176  
1177  		if (CDNSP_EXT_PORT_MAJOR(temp) == 0x02 &&
1178  		    !pdev->usb2_port.port_num)
1179  			cdnsp_add_in_port(pdev, &pdev->usb2_port,
1180  					  base + offset);
1181  	}
1182  
1183  	if (!pdev->usb2_port.exist || !pdev->usb3_port.exist) {
1184  		dev_err(pdev->dev, "Error: Only one port detected\n");
1185  		return -ENODEV;
1186  	}
1187  
1188  	trace_cdnsp_init("Found USB 2.0 ports and  USB 3.0 ports.");
1189  
1190  	pdev->usb2_port.regs = (struct cdnsp_port_regs __iomem *)
1191  			       (&pdev->op_regs->port_reg_base + NUM_PORT_REGS *
1192  				(pdev->usb2_port.port_num - 1));
1193  
1194  	pdev->usb3_port.regs = (struct cdnsp_port_regs __iomem *)
1195  			       (&pdev->op_regs->port_reg_base + NUM_PORT_REGS *
1196  				(pdev->usb3_port.port_num - 1));
1197  
1198  	return 0;
1199  }
1200  
1201  /*
1202   * Initialize memory for CDNSP (one-time init).
1203   *
1204   * Program the PAGESIZE register, initialize the device context array, create
1205   * device contexts, set up a command ring segment, create event
1206   * ring (one for now).
1207   */
1208  int cdnsp_mem_init(struct cdnsp_device *pdev)
1209  {
1210  	struct device *dev = pdev->dev;
1211  	int ret = -ENOMEM;
1212  	unsigned int val;
1213  	dma_addr_t dma;
1214  	u32 page_size;
1215  	u64 val_64;
1216  
1217  	/*
1218  	 * Use 4K pages, since that's common and the minimum the
1219  	 * controller supports
1220  	 */
1221  	page_size = 1 << 12;
1222  
1223  	val = readl(&pdev->op_regs->config_reg);
1224  	val |= ((val & ~MAX_DEVS) | CDNSP_DEV_MAX_SLOTS) | CONFIG_U3E;
1225  	writel(val, &pdev->op_regs->config_reg);
1226  
1227  	/*
1228  	 * Doorbell array must be physically contiguous
1229  	 * and 64-byte (cache line) aligned.
1230  	 */
1231  	pdev->dcbaa = dma_alloc_coherent(dev, sizeof(*pdev->dcbaa),
1232  					 &dma, GFP_KERNEL);
1233  	if (!pdev->dcbaa)
1234  		return -ENOMEM;
1235  
1236  	pdev->dcbaa->dma = dma;
1237  
1238  	cdnsp_write_64(dma, &pdev->op_regs->dcbaa_ptr);
1239  
1240  	/*
1241  	 * Initialize the ring segment pool.  The ring must be a contiguous
1242  	 * structure comprised of TRBs. The TRBs must be 16 byte aligned,
1243  	 * however, the command ring segment needs 64-byte aligned segments
1244  	 * and our use of dma addresses in the trb_address_map radix tree needs
1245  	 * TRB_SEGMENT_SIZE alignment, so driver pick the greater alignment
1246  	 * need.
1247  	 */
1248  	pdev->segment_pool = dma_pool_create("CDNSP ring segments", dev,
1249  					     TRB_SEGMENT_SIZE, TRB_SEGMENT_SIZE,
1250  					     page_size);
1251  	if (!pdev->segment_pool)
1252  		goto release_dcbaa;
1253  
1254  	pdev->device_pool = dma_pool_create("CDNSP input/output contexts", dev,
1255  					    CDNSP_CTX_SIZE, 64, page_size);
1256  	if (!pdev->device_pool)
1257  		goto destroy_segment_pool;
1258  
1259  
1260  	/* Set up the command ring to have one segments for now. */
1261  	pdev->cmd_ring = cdnsp_ring_alloc(pdev, 1, TYPE_COMMAND, 0, GFP_KERNEL);
1262  	if (!pdev->cmd_ring)
1263  		goto destroy_device_pool;
1264  
1265  	/* Set the address in the Command Ring Control register */
1266  	val_64 = cdnsp_read_64(&pdev->op_regs->cmd_ring);
1267  	val_64 = (val_64 & (u64)CMD_RING_RSVD_BITS) |
1268  		 (pdev->cmd_ring->first_seg->dma & (u64)~CMD_RING_RSVD_BITS) |
1269  		 pdev->cmd_ring->cycle_state;
1270  	cdnsp_write_64(val_64, &pdev->op_regs->cmd_ring);
1271  
1272  	val = readl(&pdev->cap_regs->db_off);
1273  	val &= DBOFF_MASK;
1274  	pdev->dba = (void __iomem *)pdev->cap_regs + val;
1275  
1276  	/* Set ir_set to interrupt register set 0 */
1277  	pdev->ir_set = &pdev->run_regs->ir_set[0];
1278  
1279  	/*
1280  	 * Event ring setup: Allocate a normal ring, but also setup
1281  	 * the event ring segment table (ERST).
1282  	 */
1283  	pdev->event_ring = cdnsp_ring_alloc(pdev, ERST_NUM_SEGS, TYPE_EVENT,
1284  					    0, GFP_KERNEL);
1285  	if (!pdev->event_ring)
1286  		goto free_cmd_ring;
1287  
1288  	ret = cdnsp_alloc_erst(pdev, pdev->event_ring, &pdev->erst);
1289  	if (ret)
1290  		goto free_event_ring;
1291  
1292  	/* Set ERST count with the number of entries in the segment table. */
1293  	val = readl(&pdev->ir_set->erst_size);
1294  	val &= ERST_SIZE_MASK;
1295  	val |= ERST_NUM_SEGS;
1296  	writel(val, &pdev->ir_set->erst_size);
1297  
1298  	/* Set the segment table base address. */
1299  	val_64 = cdnsp_read_64(&pdev->ir_set->erst_base);
1300  	val_64 &= ERST_PTR_MASK;
1301  	val_64 |= (pdev->erst.erst_dma_addr & (u64)~ERST_PTR_MASK);
1302  	cdnsp_write_64(val_64, &pdev->ir_set->erst_base);
1303  
1304  	/* Set the event ring dequeue address. */
1305  	cdnsp_set_event_deq(pdev);
1306  
1307  	ret = cdnsp_setup_port_arrays(pdev);
1308  	if (ret)
1309  		goto free_erst;
1310  
1311  	ret = cdnsp_alloc_priv_device(pdev);
1312  	if (ret) {
1313  		dev_err(pdev->dev,
1314  			"Could not allocate cdnsp_device data structures\n");
1315  		goto free_erst;
1316  	}
1317  
1318  	return 0;
1319  
1320  free_erst:
1321  	cdnsp_free_erst(pdev, &pdev->erst);
1322  free_event_ring:
1323  	cdnsp_ring_free(pdev, pdev->event_ring);
1324  free_cmd_ring:
1325  	cdnsp_ring_free(pdev, pdev->cmd_ring);
1326  destroy_device_pool:
1327  	dma_pool_destroy(pdev->device_pool);
1328  destroy_segment_pool:
1329  	dma_pool_destroy(pdev->segment_pool);
1330  release_dcbaa:
1331  	dma_free_coherent(dev, sizeof(*pdev->dcbaa), pdev->dcbaa,
1332  			  pdev->dcbaa->dma);
1333  
1334  	cdnsp_reset(pdev);
1335  
1336  	return ret;
1337  }
1338