cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cdnsp-mem.c (36334B)


      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
     21static 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 */
     29static 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
     64free_dma:
     65	dma_pool_free(pdev->segment_pool, seg->trbs, dma);
     66	kfree(seg);
     67
     68	return NULL;
     69}
     70
     71static 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
     81static 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 */
    105static 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 */
    136static 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 */
    193static 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
    217static 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
    227static 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
    250remove_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
    263static 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
    274static 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
    280static 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
    297void 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. */
    322static 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 */
    370static 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;
    405fail:
    406	kfree(ring);
    407	return NULL;
    408}
    409
    410void 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 */
    421int 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
    461static 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
    489struct 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
    498struct 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
    506struct 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
    517static 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. */
    525static 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
    543struct 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 */
    561int 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
    626cleanup_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
    635cleanup_stream_rings:
    636	kfree(pep->stream_info.stream_rings);
    637
    638	return -ENOMEM;
    639}
    640
    641/* Frees all stream contexts associated with the endpoint. */
    642static 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.*/
    669static 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
    687static 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;
    706fail:
    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
    715void 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. */
    726int 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 */
    781static 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 */
    811static 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 */
    829static 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 */
    866static 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
    875static 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
    890static 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 */
    915static 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
    941int 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
   1017void 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
   1025static 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
   1054static 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
   1066void 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
   1100static 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
   1122static 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 */
   1147static 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 */
   1208int 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
   1320free_erst:
   1321	cdnsp_free_erst(pdev, &pdev->erst);
   1322free_event_ring:
   1323	cdnsp_ring_free(pdev, pdev->event_ring);
   1324free_cmd_ring:
   1325	cdnsp_ring_free(pdev, pdev->cmd_ring);
   1326destroy_device_pool:
   1327	dma_pool_destroy(pdev->device_pool);
   1328destroy_segment_pool:
   1329	dma_pool_destroy(pdev->segment_pool);
   1330release_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}