Merge tag 'media/v5.8-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[linux-2.6-microblaze.git] / drivers / net / ipa / ipa_endpoint.c
1 // SPDX-License-Identifier: GPL-2.0
2
3 /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
4  * Copyright (C) 2019-2020 Linaro Ltd.
5  */
6
7 #include <linux/types.h>
8 #include <linux/device.h>
9 #include <linux/slab.h>
10 #include <linux/bitfield.h>
11 #include <linux/if_rmnet.h>
12 #include <linux/dma-direction.h>
13
14 #include "gsi.h"
15 #include "gsi_trans.h"
16 #include "ipa.h"
17 #include "ipa_data.h"
18 #include "ipa_endpoint.h"
19 #include "ipa_cmd.h"
20 #include "ipa_mem.h"
21 #include "ipa_modem.h"
22 #include "ipa_table.h"
23 #include "ipa_gsi.h"
24
25 #define atomic_dec_not_zero(v)  atomic_add_unless((v), -1, 0)
26
27 #define IPA_REPLENISH_BATCH     16
28
29 /* RX buffer is 1 page (or a power-of-2 contiguous pages) */
30 #define IPA_RX_BUFFER_SIZE      8192    /* PAGE_SIZE > 4096 wastes a LOT */
31
32 /* The amount of RX buffer space consumed by standard skb overhead */
33 #define IPA_RX_BUFFER_OVERHEAD  (PAGE_SIZE - SKB_MAX_ORDER(NET_SKB_PAD, 0))
34
35 #define IPA_ENDPOINT_RESET_AGGR_RETRY_MAX       3
36 #define IPA_AGGR_TIME_LIMIT_DEFAULT             1000    /* microseconds */
37
38 /** enum ipa_status_opcode - status element opcode hardware values */
39 enum ipa_status_opcode {
40         IPA_STATUS_OPCODE_PACKET                = 0x01,
41         IPA_STATUS_OPCODE_NEW_FRAG_RULE         = 0x02,
42         IPA_STATUS_OPCODE_DROPPED_PACKET        = 0x04,
43         IPA_STATUS_OPCODE_SUSPENDED_PACKET      = 0x08,
44         IPA_STATUS_OPCODE_LOG                   = 0x10,
45         IPA_STATUS_OPCODE_DCMP                  = 0x20,
46         IPA_STATUS_OPCODE_PACKET_2ND_PASS       = 0x40,
47 };
48
49 /** enum ipa_status_exception - status element exception type */
50 enum ipa_status_exception {
51         /* 0 means no exception */
52         IPA_STATUS_EXCEPTION_DEAGGR             = 0x01,
53         IPA_STATUS_EXCEPTION_IPTYPE             = 0x04,
54         IPA_STATUS_EXCEPTION_PACKET_LENGTH      = 0x08,
55         IPA_STATUS_EXCEPTION_FRAG_RULE_MISS     = 0x10,
56         IPA_STATUS_EXCEPTION_SW_FILT            = 0x20,
57         /* The meaning of the next value depends on whether the IP version */
58         IPA_STATUS_EXCEPTION_NAT                = 0x40,         /* IPv4 */
59         IPA_STATUS_EXCEPTION_IPV6CT             = IPA_STATUS_EXCEPTION_NAT,
60 };
61
62 /* Status element provided by hardware */
63 struct ipa_status {
64         u8 opcode;              /* enum ipa_status_opcode */
65         u8 exception;           /* enum ipa_status_exception */
66         __le16 mask;
67         __le16 pkt_len;
68         u8 endp_src_idx;
69         u8 endp_dst_idx;
70         __le32 metadata;
71         __le32 flags1;
72         __le64 flags2;
73         __le32 flags3;
74         __le32 flags4;
75 };
76
77 /* Field masks for struct ipa_status structure fields */
78
79 #define IPA_STATUS_SRC_IDX_FMASK                GENMASK(4, 0)
80
81 #define IPA_STATUS_DST_IDX_FMASK                GENMASK(4, 0)
82
83 #define IPA_STATUS_FLAGS1_FLT_LOCAL_FMASK       GENMASK(0, 0)
84 #define IPA_STATUS_FLAGS1_FLT_HASH_FMASK        GENMASK(1, 1)
85 #define IPA_STATUS_FLAGS1_FLT_GLOBAL_FMASK      GENMASK(2, 2)
86 #define IPA_STATUS_FLAGS1_FLT_RET_HDR_FMASK     GENMASK(3, 3)
87 #define IPA_STATUS_FLAGS1_FLT_RULE_ID_FMASK     GENMASK(13, 4)
88 #define IPA_STATUS_FLAGS1_RT_LOCAL_FMASK        GENMASK(14, 14)
89 #define IPA_STATUS_FLAGS1_RT_HASH_FMASK         GENMASK(15, 15)
90 #define IPA_STATUS_FLAGS1_UCP_FMASK             GENMASK(16, 16)
91 #define IPA_STATUS_FLAGS1_RT_TBL_IDX_FMASK      GENMASK(21, 17)
92 #define IPA_STATUS_FLAGS1_RT_RULE_ID_FMASK      GENMASK(31, 22)
93
94 #define IPA_STATUS_FLAGS2_NAT_HIT_FMASK         GENMASK_ULL(0, 0)
95 #define IPA_STATUS_FLAGS2_NAT_ENTRY_IDX_FMASK   GENMASK_ULL(13, 1)
96 #define IPA_STATUS_FLAGS2_NAT_TYPE_FMASK        GENMASK_ULL(15, 14)
97 #define IPA_STATUS_FLAGS2_TAG_INFO_FMASK        GENMASK_ULL(63, 16)
98
99 #define IPA_STATUS_FLAGS3_SEQ_NUM_FMASK         GENMASK(7, 0)
100 #define IPA_STATUS_FLAGS3_TOD_CTR_FMASK         GENMASK(31, 8)
101
102 #define IPA_STATUS_FLAGS4_HDR_LOCAL_FMASK       GENMASK(0, 0)
103 #define IPA_STATUS_FLAGS4_HDR_OFFSET_FMASK      GENMASK(10, 1)
104 #define IPA_STATUS_FLAGS4_FRAG_HIT_FMASK        GENMASK(11, 11)
105 #define IPA_STATUS_FLAGS4_FRAG_RULE_FMASK       GENMASK(15, 12)
106 #define IPA_STATUS_FLAGS4_HW_SPECIFIC_FMASK     GENMASK(31, 16)
107
108 #ifdef IPA_VALIDATE
109
110 static void ipa_endpoint_validate_build(void)
111 {
112         /* The aggregation byte limit defines the point at which an
113          * aggregation window will close.  It is programmed into the
114          * IPA hardware as a number of KB.  We don't use "hard byte
115          * limit" aggregation, which means that we need to supply
116          * enough space in a receive buffer to hold a complete MTU
117          * plus normal skb overhead *after* that aggregation byte
118          * limit has been crossed.
119          *
120          * This check just ensures we don't define a receive buffer
121          * size that would exceed what we can represent in the field
122          * that is used to program its size.
123          */
124         BUILD_BUG_ON(IPA_RX_BUFFER_SIZE >
125                      field_max(AGGR_BYTE_LIMIT_FMASK) * SZ_1K +
126                      IPA_MTU + IPA_RX_BUFFER_OVERHEAD);
127
128         /* I honestly don't know where this requirement comes from.  But
129          * it holds, and if we someday need to loosen the constraint we
130          * can try to track it down.
131          */
132         BUILD_BUG_ON(sizeof(struct ipa_status) % 4);
133 }
134
135 static bool ipa_endpoint_data_valid_one(struct ipa *ipa, u32 count,
136                             const struct ipa_gsi_endpoint_data *all_data,
137                             const struct ipa_gsi_endpoint_data *data)
138 {
139         const struct ipa_gsi_endpoint_data *other_data;
140         struct device *dev = &ipa->pdev->dev;
141         enum ipa_endpoint_name other_name;
142
143         if (ipa_gsi_endpoint_data_empty(data))
144                 return true;
145
146         if (!data->toward_ipa) {
147                 if (data->endpoint.filter_support) {
148                         dev_err(dev, "filtering not supported for "
149                                         "RX endpoint %u\n",
150                                 data->endpoint_id);
151                         return false;
152                 }
153
154                 return true;    /* Nothing more to check for RX */
155         }
156
157         if (data->endpoint.config.status_enable) {
158                 other_name = data->endpoint.config.tx.status_endpoint;
159                 if (other_name >= count) {
160                         dev_err(dev, "status endpoint name %u out of range "
161                                         "for endpoint %u\n",
162                                 other_name, data->endpoint_id);
163                         return false;
164                 }
165
166                 /* Status endpoint must be defined... */
167                 other_data = &all_data[other_name];
168                 if (ipa_gsi_endpoint_data_empty(other_data)) {
169                         dev_err(dev, "DMA endpoint name %u undefined "
170                                         "for endpoint %u\n",
171                                 other_name, data->endpoint_id);
172                         return false;
173                 }
174
175                 /* ...and has to be an RX endpoint... */
176                 if (other_data->toward_ipa) {
177                         dev_err(dev,
178                                 "status endpoint for endpoint %u not RX\n",
179                                 data->endpoint_id);
180                         return false;
181                 }
182
183                 /* ...and if it's to be an AP endpoint... */
184                 if (other_data->ee_id == GSI_EE_AP) {
185                         /* ...make sure it has status enabled. */
186                         if (!other_data->endpoint.config.status_enable) {
187                                 dev_err(dev,
188                                         "status not enabled for endpoint %u\n",
189                                         other_data->endpoint_id);
190                                 return false;
191                         }
192                 }
193         }
194
195         if (data->endpoint.config.dma_mode) {
196                 other_name = data->endpoint.config.dma_endpoint;
197                 if (other_name >= count) {
198                         dev_err(dev, "DMA endpoint name %u out of range "
199                                         "for endpoint %u\n",
200                                 other_name, data->endpoint_id);
201                         return false;
202                 }
203
204                 other_data = &all_data[other_name];
205                 if (ipa_gsi_endpoint_data_empty(other_data)) {
206                         dev_err(dev, "DMA endpoint name %u undefined "
207                                         "for endpoint %u\n",
208                                 other_name, data->endpoint_id);
209                         return false;
210                 }
211         }
212
213         return true;
214 }
215
216 static bool ipa_endpoint_data_valid(struct ipa *ipa, u32 count,
217                                     const struct ipa_gsi_endpoint_data *data)
218 {
219         const struct ipa_gsi_endpoint_data *dp = data;
220         struct device *dev = &ipa->pdev->dev;
221         enum ipa_endpoint_name name;
222
223         ipa_endpoint_validate_build();
224
225         if (count > IPA_ENDPOINT_COUNT) {
226                 dev_err(dev, "too many endpoints specified (%u > %u)\n",
227                         count, IPA_ENDPOINT_COUNT);
228                 return false;
229         }
230
231         /* Make sure needed endpoints have defined data */
232         if (ipa_gsi_endpoint_data_empty(&data[IPA_ENDPOINT_AP_COMMAND_TX])) {
233                 dev_err(dev, "command TX endpoint not defined\n");
234                 return false;
235         }
236         if (ipa_gsi_endpoint_data_empty(&data[IPA_ENDPOINT_AP_LAN_RX])) {
237                 dev_err(dev, "LAN RX endpoint not defined\n");
238                 return false;
239         }
240         if (ipa_gsi_endpoint_data_empty(&data[IPA_ENDPOINT_AP_MODEM_TX])) {
241                 dev_err(dev, "AP->modem TX endpoint not defined\n");
242                 return false;
243         }
244         if (ipa_gsi_endpoint_data_empty(&data[IPA_ENDPOINT_AP_MODEM_RX])) {
245                 dev_err(dev, "AP<-modem RX endpoint not defined\n");
246                 return false;
247         }
248
249         for (name = 0; name < count; name++, dp++)
250                 if (!ipa_endpoint_data_valid_one(ipa, count, data, dp))
251                         return false;
252
253         return true;
254 }
255
256 #else /* !IPA_VALIDATE */
257
258 static bool ipa_endpoint_data_valid(struct ipa *ipa, u32 count,
259                                     const struct ipa_gsi_endpoint_data *data)
260 {
261         return true;
262 }
263
264 #endif /* !IPA_VALIDATE */
265
266 /* Allocate a transaction to use on a non-command endpoint */
267 static struct gsi_trans *ipa_endpoint_trans_alloc(struct ipa_endpoint *endpoint,
268                                                   u32 tre_count)
269 {
270         struct gsi *gsi = &endpoint->ipa->gsi;
271         u32 channel_id = endpoint->channel_id;
272         enum dma_data_direction direction;
273
274         direction = endpoint->toward_ipa ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
275
276         return gsi_channel_trans_alloc(gsi, channel_id, tre_count, direction);
277 }
278
279 /* suspend_delay represents suspend for RX, delay for TX endpoints.
280  * Note that suspend is not supported starting with IPA v4.0.
281  */
282 static bool
283 ipa_endpoint_init_ctrl(struct ipa_endpoint *endpoint, bool suspend_delay)
284 {
285         u32 offset = IPA_REG_ENDP_INIT_CTRL_N_OFFSET(endpoint->endpoint_id);
286         struct ipa *ipa = endpoint->ipa;
287         bool state;
288         u32 mask;
289         u32 val;
290
291         /* Suspend is not supported for IPA v4.0+.  Delay doesn't work
292          * correctly on IPA v4.2.
293          *
294          * if (endpoint->toward_ipa)
295          *      assert(ipa->version != IPA_VERSION_4.2);
296          * else
297          *      assert(ipa->version == IPA_VERSION_3_5_1);
298          */
299         mask = endpoint->toward_ipa ? ENDP_DELAY_FMASK : ENDP_SUSPEND_FMASK;
300
301         val = ioread32(ipa->reg_virt + offset);
302         /* Don't bother if it's already in the requested state */
303         state = !!(val & mask);
304         if (suspend_delay != state) {
305                 val ^= mask;
306                 iowrite32(val, ipa->reg_virt + offset);
307         }
308
309         return state;
310 }
311
312 /* We currently don't care what the previous state was for delay mode */
313 static void
314 ipa_endpoint_program_delay(struct ipa_endpoint *endpoint, bool enable)
315 {
316         /* assert(endpoint->toward_ipa); */
317
318         (void)ipa_endpoint_init_ctrl(endpoint, enable);
319 }
320
321 /* Returns previous suspend state (true means it was enabled) */
322 static bool
323 ipa_endpoint_program_suspend(struct ipa_endpoint *endpoint, bool enable)
324 {
325         /* assert(!endpoint->toward_ipa); */
326
327         return ipa_endpoint_init_ctrl(endpoint, enable);
328 }
329
330 /* Enable or disable delay or suspend mode on all modem endpoints */
331 void ipa_endpoint_modem_pause_all(struct ipa *ipa, bool enable)
332 {
333         bool support_suspend;
334         u32 endpoint_id;
335
336         /* DELAY mode doesn't work correctly on IPA v4.2 */
337         if (ipa->version == IPA_VERSION_4_2)
338                 return;
339
340         /* Only IPA v3.5.1 supports SUSPEND mode on RX endpoints */
341         support_suspend = ipa->version == IPA_VERSION_3_5_1;
342
343         for (endpoint_id = 0; endpoint_id < IPA_ENDPOINT_MAX; endpoint_id++) {
344                 struct ipa_endpoint *endpoint = &ipa->endpoint[endpoint_id];
345
346                 if (endpoint->ee_id != GSI_EE_MODEM)
347                         continue;
348
349                 /* Set TX delay mode, or for IPA v3.5.1 RX suspend mode */
350                 if (endpoint->toward_ipa)
351                         ipa_endpoint_program_delay(endpoint, enable);
352                 else if (support_suspend)
353                         (void)ipa_endpoint_program_suspend(endpoint, enable);
354         }
355 }
356
357 /* Reset all modem endpoints to use the default exception endpoint */
358 int ipa_endpoint_modem_exception_reset_all(struct ipa *ipa)
359 {
360         u32 initialized = ipa->initialized;
361         struct gsi_trans *trans;
362         u32 count;
363
364         /* We need one command per modem TX endpoint.  We can get an upper
365          * bound on that by assuming all initialized endpoints are modem->IPA.
366          * That won't happen, and we could be more precise, but this is fine
367          * for now.  We need to end the transaction with a "tag process."
368          */
369         count = hweight32(initialized) + ipa_cmd_tag_process_count();
370         trans = ipa_cmd_trans_alloc(ipa, count);
371         if (!trans) {
372                 dev_err(&ipa->pdev->dev,
373                         "no transaction to reset modem exception endpoints\n");
374                 return -EBUSY;
375         }
376
377         while (initialized) {
378                 u32 endpoint_id = __ffs(initialized);
379                 struct ipa_endpoint *endpoint;
380                 u32 offset;
381
382                 initialized ^= BIT(endpoint_id);
383
384                 /* We only reset modem TX endpoints */
385                 endpoint = &ipa->endpoint[endpoint_id];
386                 if (!(endpoint->ee_id == GSI_EE_MODEM && endpoint->toward_ipa))
387                         continue;
388
389                 offset = IPA_REG_ENDP_STATUS_N_OFFSET(endpoint_id);
390
391                 /* Value written is 0, and all bits are updated.  That
392                  * means status is disabled on the endpoint, and as a
393                  * result all other fields in the register are ignored.
394                  */
395                 ipa_cmd_register_write_add(trans, offset, 0, ~0, false);
396         }
397
398         ipa_cmd_tag_process_add(trans);
399
400         /* XXX This should have a 1 second timeout */
401         gsi_trans_commit_wait(trans);
402
403         return 0;
404 }
405
406 static void ipa_endpoint_init_cfg(struct ipa_endpoint *endpoint)
407 {
408         u32 offset = IPA_REG_ENDP_INIT_CFG_N_OFFSET(endpoint->endpoint_id);
409         u32 val = 0;
410
411         /* FRAG_OFFLOAD_EN is 0 */
412         if (endpoint->data->checksum) {
413                 if (endpoint->toward_ipa) {
414                         u32 checksum_offset;
415
416                         val |= u32_encode_bits(IPA_CS_OFFLOAD_UL,
417                                                CS_OFFLOAD_EN_FMASK);
418                         /* Checksum header offset is in 4-byte units */
419                         checksum_offset = sizeof(struct rmnet_map_header);
420                         checksum_offset /= sizeof(u32);
421                         val |= u32_encode_bits(checksum_offset,
422                                                CS_METADATA_HDR_OFFSET_FMASK);
423                 } else {
424                         val |= u32_encode_bits(IPA_CS_OFFLOAD_DL,
425                                                CS_OFFLOAD_EN_FMASK);
426                 }
427         } else {
428                 val |= u32_encode_bits(IPA_CS_OFFLOAD_NONE,
429                                        CS_OFFLOAD_EN_FMASK);
430         }
431         /* CS_GEN_QMB_MASTER_SEL is 0 */
432
433         iowrite32(val, endpoint->ipa->reg_virt + offset);
434 }
435
436 static void ipa_endpoint_init_hdr(struct ipa_endpoint *endpoint)
437 {
438         u32 offset = IPA_REG_ENDP_INIT_HDR_N_OFFSET(endpoint->endpoint_id);
439         u32 val = 0;
440
441         if (endpoint->data->qmap) {
442                 size_t header_size = sizeof(struct rmnet_map_header);
443
444                 if (endpoint->toward_ipa && endpoint->data->checksum)
445                         header_size += sizeof(struct rmnet_map_ul_csum_header);
446
447                 val |= u32_encode_bits(header_size, HDR_LEN_FMASK);
448                 /* metadata is the 4 byte rmnet_map header itself */
449                 val |= HDR_OFST_METADATA_VALID_FMASK;
450                 val |= u32_encode_bits(0, HDR_OFST_METADATA_FMASK);
451                 /* HDR_ADDITIONAL_CONST_LEN is 0; (IPA->AP only) */
452                 if (!endpoint->toward_ipa) {
453                         u32 size_offset = offsetof(struct rmnet_map_header,
454                                                    pkt_len);
455
456                         val |= HDR_OFST_PKT_SIZE_VALID_FMASK;
457                         val |= u32_encode_bits(size_offset,
458                                                HDR_OFST_PKT_SIZE_FMASK);
459                 }
460                 /* HDR_A5_MUX is 0 */
461                 /* HDR_LEN_INC_DEAGG_HDR is 0 */
462                 /* HDR_METADATA_REG_VALID is 0; (AP->IPA only) */
463         }
464
465         iowrite32(val, endpoint->ipa->reg_virt + offset);
466 }
467
468 static void ipa_endpoint_init_hdr_ext(struct ipa_endpoint *endpoint)
469 {
470         u32 offset = IPA_REG_ENDP_INIT_HDR_EXT_N_OFFSET(endpoint->endpoint_id);
471         u32 pad_align = endpoint->data->rx.pad_align;
472         u32 val = 0;
473
474         val |= HDR_ENDIANNESS_FMASK;            /* big endian */
475         val |= HDR_TOTAL_LEN_OR_PAD_VALID_FMASK;
476         /* HDR_TOTAL_LEN_OR_PAD is 0 (pad, not total_len) */
477         /* HDR_PAYLOAD_LEN_INC_PADDING is 0 */
478         /* HDR_TOTAL_LEN_OR_PAD_OFFSET is 0 */
479         if (!endpoint->toward_ipa)
480                 val |= u32_encode_bits(pad_align, HDR_PAD_TO_ALIGNMENT_FMASK);
481
482         iowrite32(val, endpoint->ipa->reg_virt + offset);
483 }
484
485 /**
486  * Generate a metadata mask value that will select only the mux_id
487  * field in an rmnet_map header structure.  The mux_id is at offset
488  * 1 byte from the beginning of the structure, but the metadata
489  * value is treated as a 4-byte unit.  So this mask must be computed
490  * with endianness in mind.  Note that ipa_endpoint_init_hdr_metadata_mask()
491  * will convert this value to the proper byte order.
492  *
493  * Marked __always_inline because this is really computing a
494  * constant value.
495  */
496 static __always_inline __be32 ipa_rmnet_mux_id_metadata_mask(void)
497 {
498         size_t mux_id_offset = offsetof(struct rmnet_map_header, mux_id);
499         u32 mux_id_mask = 0;
500         u8 *bytes;
501
502         bytes = (u8 *)&mux_id_mask;
503         bytes[mux_id_offset] = 0xff;    /* mux_id is 1 byte */
504
505         return cpu_to_be32(mux_id_mask);
506 }
507
508 static void ipa_endpoint_init_hdr_metadata_mask(struct ipa_endpoint *endpoint)
509 {
510         u32 endpoint_id = endpoint->endpoint_id;
511         u32 val = 0;
512         u32 offset;
513
514         offset = IPA_REG_ENDP_INIT_HDR_METADATA_MASK_N_OFFSET(endpoint_id);
515
516         if (!endpoint->toward_ipa && endpoint->data->qmap)
517                 val = ipa_rmnet_mux_id_metadata_mask();
518
519         iowrite32(val, endpoint->ipa->reg_virt + offset);
520 }
521
522 static void ipa_endpoint_init_mode(struct ipa_endpoint *endpoint)
523 {
524         u32 offset = IPA_REG_ENDP_INIT_MODE_N_OFFSET(endpoint->endpoint_id);
525         u32 val;
526
527         if (endpoint->toward_ipa && endpoint->data->dma_mode) {
528                 enum ipa_endpoint_name name = endpoint->data->dma_endpoint;
529                 u32 dma_endpoint_id;
530
531                 dma_endpoint_id = endpoint->ipa->name_map[name]->endpoint_id;
532
533                 val = u32_encode_bits(IPA_DMA, MODE_FMASK);
534                 val |= u32_encode_bits(dma_endpoint_id, DEST_PIPE_INDEX_FMASK);
535         } else {
536                 val = u32_encode_bits(IPA_BASIC, MODE_FMASK);
537         }
538         /* Other bitfields unspecified (and 0) */
539
540         iowrite32(val, endpoint->ipa->reg_virt + offset);
541 }
542
543 /* Compute the aggregation size value to use for a given buffer size */
544 static u32 ipa_aggr_size_kb(u32 rx_buffer_size)
545 {
546         /* We don't use "hard byte limit" aggregation, so we define the
547          * aggregation limit such that our buffer has enough space *after*
548          * that limit to receive a full MTU of data, plus overhead.
549          */
550         rx_buffer_size -= IPA_MTU + IPA_RX_BUFFER_OVERHEAD;
551
552         return rx_buffer_size / SZ_1K;
553 }
554
555 static void ipa_endpoint_init_aggr(struct ipa_endpoint *endpoint)
556 {
557         u32 offset = IPA_REG_ENDP_INIT_AGGR_N_OFFSET(endpoint->endpoint_id);
558         u32 val = 0;
559
560         if (endpoint->data->aggregation) {
561                 if (!endpoint->toward_ipa) {
562                         u32 aggr_size = ipa_aggr_size_kb(IPA_RX_BUFFER_SIZE);
563                         u32 limit;
564
565                         val |= u32_encode_bits(IPA_ENABLE_AGGR, AGGR_EN_FMASK);
566                         val |= u32_encode_bits(IPA_GENERIC, AGGR_TYPE_FMASK);
567                         val |= u32_encode_bits(aggr_size,
568                                                AGGR_BYTE_LIMIT_FMASK);
569                         limit = IPA_AGGR_TIME_LIMIT_DEFAULT;
570                         val |= u32_encode_bits(limit / IPA_AGGR_GRANULARITY,
571                                                AGGR_TIME_LIMIT_FMASK);
572                         val |= u32_encode_bits(0, AGGR_PKT_LIMIT_FMASK);
573                         if (endpoint->data->rx.aggr_close_eof)
574                                 val |= AGGR_SW_EOF_ACTIVE_FMASK;
575                         /* AGGR_HARD_BYTE_LIMIT_ENABLE is 0 */
576                 } else {
577                         val |= u32_encode_bits(IPA_ENABLE_DEAGGR,
578                                                AGGR_EN_FMASK);
579                         val |= u32_encode_bits(IPA_QCMAP, AGGR_TYPE_FMASK);
580                         /* other fields ignored */
581                 }
582                 /* AGGR_FORCE_CLOSE is 0 */
583         } else {
584                 val |= u32_encode_bits(IPA_BYPASS_AGGR, AGGR_EN_FMASK);
585                 /* other fields ignored */
586         }
587
588         iowrite32(val, endpoint->ipa->reg_virt + offset);
589 }
590
591 /* A return value of 0 indicates an error */
592 static u32 ipa_reg_init_hol_block_timer_val(struct ipa *ipa, u32 microseconds)
593 {
594         u32 scale;
595         u32 base;
596         u32 val;
597
598         if (!microseconds)
599                 return 0;       /* invalid delay */
600
601         /* Timer is represented in units of clock ticks. */
602         if (ipa->version < IPA_VERSION_4_2)
603                 return microseconds;    /* XXX Needs to be computed */
604
605         /* IPA v4.2 represents the tick count as base * scale */
606         scale = 1;                      /* XXX Needs to be computed */
607         if (scale > field_max(SCALE_FMASK))
608                 return 0;               /* scale too big */
609
610         base = DIV_ROUND_CLOSEST(microseconds, scale);
611         if (base > field_max(BASE_VALUE_FMASK))
612                 return 0;               /* microseconds too big */
613
614         val = u32_encode_bits(scale, SCALE_FMASK);
615         val |= u32_encode_bits(base, BASE_VALUE_FMASK);
616
617         return val;
618 }
619
620 static int ipa_endpoint_init_hol_block_timer(struct ipa_endpoint *endpoint,
621                                              u32 microseconds)
622 {
623         u32 endpoint_id = endpoint->endpoint_id;
624         struct ipa *ipa = endpoint->ipa;
625         u32 offset;
626         u32 val;
627
628         /* XXX We'll fix this when the register definition is clear */
629         if (microseconds) {
630                 struct device *dev = &ipa->pdev->dev;
631
632                 dev_err(dev, "endpoint %u non-zero HOLB period (ignoring)\n",
633                         endpoint_id);
634                 microseconds = 0;
635         }
636
637         if (microseconds) {
638                 val = ipa_reg_init_hol_block_timer_val(ipa, microseconds);
639                 if (!val)
640                         return -EINVAL;
641         } else {
642                 val = 0;        /* timeout is immediate */
643         }
644         offset = IPA_REG_ENDP_INIT_HOL_BLOCK_TIMER_N_OFFSET(endpoint_id);
645         iowrite32(val, ipa->reg_virt + offset);
646
647         return 0;
648 }
649
650 static void
651 ipa_endpoint_init_hol_block_enable(struct ipa_endpoint *endpoint, bool enable)
652 {
653         u32 endpoint_id = endpoint->endpoint_id;
654         u32 offset;
655         u32 val;
656
657         val = u32_encode_bits(enable ? 1 : 0, HOL_BLOCK_EN_FMASK);
658         offset = IPA_REG_ENDP_INIT_HOL_BLOCK_EN_N_OFFSET(endpoint_id);
659         iowrite32(val, endpoint->ipa->reg_virt + offset);
660 }
661
662 void ipa_endpoint_modem_hol_block_clear_all(struct ipa *ipa)
663 {
664         u32 i;
665
666         for (i = 0; i < IPA_ENDPOINT_MAX; i++) {
667                 struct ipa_endpoint *endpoint = &ipa->endpoint[i];
668
669                 if (endpoint->ee_id != GSI_EE_MODEM)
670                         continue;
671
672                 (void)ipa_endpoint_init_hol_block_timer(endpoint, 0);
673                 ipa_endpoint_init_hol_block_enable(endpoint, true);
674         }
675 }
676
677 static void ipa_endpoint_init_deaggr(struct ipa_endpoint *endpoint)
678 {
679         u32 offset = IPA_REG_ENDP_INIT_DEAGGR_N_OFFSET(endpoint->endpoint_id);
680         u32 val = 0;
681
682         /* DEAGGR_HDR_LEN is 0 */
683         /* PACKET_OFFSET_VALID is 0 */
684         /* PACKET_OFFSET_LOCATION is ignored (not valid) */
685         /* MAX_PACKET_LEN is 0 (not enforced) */
686
687         iowrite32(val, endpoint->ipa->reg_virt + offset);
688 }
689
690 static void ipa_endpoint_init_seq(struct ipa_endpoint *endpoint)
691 {
692         u32 offset = IPA_REG_ENDP_INIT_SEQ_N_OFFSET(endpoint->endpoint_id);
693         u32 seq_type = endpoint->seq_type;
694         u32 val = 0;
695
696         val |= u32_encode_bits(seq_type & 0xf, HPS_SEQ_TYPE_FMASK);
697         val |= u32_encode_bits((seq_type >> 4) & 0xf, DPS_SEQ_TYPE_FMASK);
698         /* HPS_REP_SEQ_TYPE is 0 */
699         /* DPS_REP_SEQ_TYPE is 0 */
700
701         iowrite32(val, endpoint->ipa->reg_virt + offset);
702 }
703
704 /**
705  * ipa_endpoint_skb_tx() - Transmit a socket buffer
706  * @endpoint:   Endpoint pointer
707  * @skb:        Socket buffer to send
708  *
709  * Returns:     0 if successful, or a negative error code
710  */
711 int ipa_endpoint_skb_tx(struct ipa_endpoint *endpoint, struct sk_buff *skb)
712 {
713         struct gsi_trans *trans;
714         u32 nr_frags;
715         int ret;
716
717         /* Make sure source endpoint's TLV FIFO has enough entries to
718          * hold the linear portion of the skb and all its fragments.
719          * If not, see if we can linearize it before giving up.
720          */
721         nr_frags = skb_shinfo(skb)->nr_frags;
722         if (1 + nr_frags > endpoint->trans_tre_max) {
723                 if (skb_linearize(skb))
724                         return -E2BIG;
725                 nr_frags = 0;
726         }
727
728         trans = ipa_endpoint_trans_alloc(endpoint, 1 + nr_frags);
729         if (!trans)
730                 return -EBUSY;
731
732         ret = gsi_trans_skb_add(trans, skb);
733         if (ret)
734                 goto err_trans_free;
735         trans->data = skb;      /* transaction owns skb now */
736
737         gsi_trans_commit(trans, !netdev_xmit_more());
738
739         return 0;
740
741 err_trans_free:
742         gsi_trans_free(trans);
743
744         return -ENOMEM;
745 }
746
747 static void ipa_endpoint_status(struct ipa_endpoint *endpoint)
748 {
749         u32 endpoint_id = endpoint->endpoint_id;
750         struct ipa *ipa = endpoint->ipa;
751         u32 val = 0;
752         u32 offset;
753
754         offset = IPA_REG_ENDP_STATUS_N_OFFSET(endpoint_id);
755
756         if (endpoint->data->status_enable) {
757                 val |= STATUS_EN_FMASK;
758                 if (endpoint->toward_ipa) {
759                         enum ipa_endpoint_name name;
760                         u32 status_endpoint_id;
761
762                         name = endpoint->data->tx.status_endpoint;
763                         status_endpoint_id = ipa->name_map[name]->endpoint_id;
764
765                         val |= u32_encode_bits(status_endpoint_id,
766                                                STATUS_ENDP_FMASK);
767                 }
768                 /* STATUS_LOCATION is 0 (status element precedes packet) */
769                 /* The next field is present for IPA v4.0 and above */
770                 /* STATUS_PKT_SUPPRESS_FMASK is 0 */
771         }
772
773         iowrite32(val, ipa->reg_virt + offset);
774 }
775
776 static int ipa_endpoint_replenish_one(struct ipa_endpoint *endpoint)
777 {
778         struct gsi_trans *trans;
779         bool doorbell = false;
780         struct page *page;
781         u32 offset;
782         u32 len;
783         int ret;
784
785         page = dev_alloc_pages(get_order(IPA_RX_BUFFER_SIZE));
786         if (!page)
787                 return -ENOMEM;
788
789         trans = ipa_endpoint_trans_alloc(endpoint, 1);
790         if (!trans)
791                 goto err_free_pages;
792
793         /* Offset the buffer to make space for skb headroom */
794         offset = NET_SKB_PAD;
795         len = IPA_RX_BUFFER_SIZE - offset;
796
797         ret = gsi_trans_page_add(trans, page, len, offset);
798         if (ret)
799                 goto err_trans_free;
800         trans->data = page;     /* transaction owns page now */
801
802         if (++endpoint->replenish_ready == IPA_REPLENISH_BATCH) {
803                 doorbell = true;
804                 endpoint->replenish_ready = 0;
805         }
806
807         gsi_trans_commit(trans, doorbell);
808
809         return 0;
810
811 err_trans_free:
812         gsi_trans_free(trans);
813 err_free_pages:
814         __free_pages(page, get_order(IPA_RX_BUFFER_SIZE));
815
816         return -ENOMEM;
817 }
818
819 /**
820  * ipa_endpoint_replenish() - Replenish the Rx packets cache.
821  *
822  * Allocate RX packet wrapper structures with maximal socket buffers
823  * for an endpoint.  These are supplied to the hardware, which fills
824  * them with incoming data.
825  */
826 static void ipa_endpoint_replenish(struct ipa_endpoint *endpoint, u32 count)
827 {
828         struct gsi *gsi;
829         u32 backlog;
830
831         if (!endpoint->replenish_enabled) {
832                 if (count)
833                         atomic_add(count, &endpoint->replenish_saved);
834                 return;
835         }
836
837
838         while (atomic_dec_not_zero(&endpoint->replenish_backlog))
839                 if (ipa_endpoint_replenish_one(endpoint))
840                         goto try_again_later;
841         if (count)
842                 atomic_add(count, &endpoint->replenish_backlog);
843
844         return;
845
846 try_again_later:
847         /* The last one didn't succeed, so fix the backlog */
848         backlog = atomic_inc_return(&endpoint->replenish_backlog);
849
850         if (count)
851                 atomic_add(count, &endpoint->replenish_backlog);
852
853         /* Whenever a receive buffer transaction completes we'll try to
854          * replenish again.  It's unlikely, but if we fail to supply even
855          * one buffer, nothing will trigger another replenish attempt.
856          * Receive buffer transactions use one TRE, so schedule work to
857          * try replenishing again if our backlog is *all* available TREs.
858          */
859         gsi = &endpoint->ipa->gsi;
860         if (backlog == gsi_channel_tre_max(gsi, endpoint->channel_id))
861                 schedule_delayed_work(&endpoint->replenish_work,
862                                       msecs_to_jiffies(1));
863 }
864
865 static void ipa_endpoint_replenish_enable(struct ipa_endpoint *endpoint)
866 {
867         struct gsi *gsi = &endpoint->ipa->gsi;
868         u32 max_backlog;
869         u32 saved;
870
871         endpoint->replenish_enabled = true;
872         while ((saved = atomic_xchg(&endpoint->replenish_saved, 0)))
873                 atomic_add(saved, &endpoint->replenish_backlog);
874
875         /* Start replenishing if hardware currently has no buffers */
876         max_backlog = gsi_channel_tre_max(gsi, endpoint->channel_id);
877         if (atomic_read(&endpoint->replenish_backlog) == max_backlog)
878                 ipa_endpoint_replenish(endpoint, 0);
879 }
880
881 static void ipa_endpoint_replenish_disable(struct ipa_endpoint *endpoint)
882 {
883         u32 backlog;
884
885         endpoint->replenish_enabled = false;
886         while ((backlog = atomic_xchg(&endpoint->replenish_backlog, 0)))
887                 atomic_add(backlog, &endpoint->replenish_saved);
888 }
889
890 static void ipa_endpoint_replenish_work(struct work_struct *work)
891 {
892         struct delayed_work *dwork = to_delayed_work(work);
893         struct ipa_endpoint *endpoint;
894
895         endpoint = container_of(dwork, struct ipa_endpoint, replenish_work);
896
897         ipa_endpoint_replenish(endpoint, 0);
898 }
899
900 static void ipa_endpoint_skb_copy(struct ipa_endpoint *endpoint,
901                                   void *data, u32 len, u32 extra)
902 {
903         struct sk_buff *skb;
904
905         skb = __dev_alloc_skb(len, GFP_ATOMIC);
906         if (skb) {
907                 skb_put(skb, len);
908                 memcpy(skb->data, data, len);
909                 skb->truesize += extra;
910         }
911
912         /* Now receive it, or drop it if there's no netdev */
913         if (endpoint->netdev)
914                 ipa_modem_skb_rx(endpoint->netdev, skb);
915         else if (skb)
916                 dev_kfree_skb_any(skb);
917 }
918
919 static bool ipa_endpoint_skb_build(struct ipa_endpoint *endpoint,
920                                    struct page *page, u32 len)
921 {
922         struct sk_buff *skb;
923
924         /* Nothing to do if there's no netdev */
925         if (!endpoint->netdev)
926                 return false;
927
928         /* assert(len <= SKB_WITH_OVERHEAD(IPA_RX_BUFFER_SIZE-NET_SKB_PAD)); */
929         skb = build_skb(page_address(page), IPA_RX_BUFFER_SIZE);
930         if (skb) {
931                 /* Reserve the headroom and account for the data */
932                 skb_reserve(skb, NET_SKB_PAD);
933                 skb_put(skb, len);
934         }
935
936         /* Receive the buffer (or record drop if unable to build it) */
937         ipa_modem_skb_rx(endpoint->netdev, skb);
938
939         return skb != NULL;
940 }
941
942 /* The format of a packet status element is the same for several status
943  * types (opcodes).  The NEW_FRAG_RULE, LOG, DCMP (decompression) types
944  * aren't currently supported
945  */
946 static bool ipa_status_format_packet(enum ipa_status_opcode opcode)
947 {
948         switch (opcode) {
949         case IPA_STATUS_OPCODE_PACKET:
950         case IPA_STATUS_OPCODE_DROPPED_PACKET:
951         case IPA_STATUS_OPCODE_SUSPENDED_PACKET:
952         case IPA_STATUS_OPCODE_PACKET_2ND_PASS:
953                 return true;
954         default:
955                 return false;
956         }
957 }
958
959 static bool ipa_endpoint_status_skip(struct ipa_endpoint *endpoint,
960                                      const struct ipa_status *status)
961 {
962         u32 endpoint_id;
963
964         if (!ipa_status_format_packet(status->opcode))
965                 return true;
966         if (!status->pkt_len)
967                 return true;
968         endpoint_id = u32_get_bits(status->endp_dst_idx,
969                                    IPA_STATUS_DST_IDX_FMASK);
970         if (endpoint_id != endpoint->endpoint_id)
971                 return true;
972
973         return false;   /* Don't skip this packet, process it */
974 }
975
976 /* Return whether the status indicates the packet should be dropped */
977 static bool ipa_status_drop_packet(const struct ipa_status *status)
978 {
979         u32 val;
980
981         /* Deaggregation exceptions we drop; others we consume */
982         if (status->exception)
983                 return status->exception == IPA_STATUS_EXCEPTION_DEAGGR;
984
985         /* Drop the packet if it fails to match a routing rule; otherwise no */
986         val = le32_get_bits(status->flags1, IPA_STATUS_FLAGS1_RT_RULE_ID_FMASK);
987
988         return val == field_max(IPA_STATUS_FLAGS1_RT_RULE_ID_FMASK);
989 }
990
991 static void ipa_endpoint_status_parse(struct ipa_endpoint *endpoint,
992                                       struct page *page, u32 total_len)
993 {
994         void *data = page_address(page) + NET_SKB_PAD;
995         u32 unused = IPA_RX_BUFFER_SIZE - total_len;
996         u32 resid = total_len;
997
998         while (resid) {
999                 const struct ipa_status *status = data;
1000                 u32 align;
1001                 u32 len;
1002
1003                 if (resid < sizeof(*status)) {
1004                         dev_err(&endpoint->ipa->pdev->dev,
1005                                 "short message (%u bytes < %zu byte status)\n",
1006                                 resid, sizeof(*status));
1007                         break;
1008                 }
1009
1010                 /* Skip over status packets that lack packet data */
1011                 if (ipa_endpoint_status_skip(endpoint, status)) {
1012                         data += sizeof(*status);
1013                         resid -= sizeof(*status);
1014                         continue;
1015                 }
1016
1017                 /* Compute the amount of buffer space consumed by the
1018                  * packet, including the status element.  If the hardware
1019                  * is configured to pad packet data to an aligned boundary,
1020                  * account for that.  And if checksum offload is is enabled
1021                  * a trailer containing computed checksum information will
1022                  * be appended.
1023                  */
1024                 align = endpoint->data->rx.pad_align ? : 1;
1025                 len = le16_to_cpu(status->pkt_len);
1026                 len = sizeof(*status) + ALIGN(len, align);
1027                 if (endpoint->data->checksum)
1028                         len += sizeof(struct rmnet_map_dl_csum_trailer);
1029
1030                 /* Charge the new packet with a proportional fraction of
1031                  * the unused space in the original receive buffer.
1032                  * XXX Charge a proportion of the *whole* receive buffer?
1033                  */
1034                 if (!ipa_status_drop_packet(status)) {
1035                         u32 extra = unused * len / total_len;
1036                         void *data2 = data + sizeof(*status);
1037                         u32 len2 = le16_to_cpu(status->pkt_len);
1038
1039                         /* Client receives only packet data (no status) */
1040                         ipa_endpoint_skb_copy(endpoint, data2, len2, extra);
1041                 }
1042
1043                 /* Consume status and the full packet it describes */
1044                 data += len;
1045                 resid -= len;
1046         }
1047 }
1048
1049 /* Complete a TX transaction, command or from ipa_endpoint_skb_tx() */
1050 static void ipa_endpoint_tx_complete(struct ipa_endpoint *endpoint,
1051                                      struct gsi_trans *trans)
1052 {
1053 }
1054
1055 /* Complete transaction initiated in ipa_endpoint_replenish_one() */
1056 static void ipa_endpoint_rx_complete(struct ipa_endpoint *endpoint,
1057                                      struct gsi_trans *trans)
1058 {
1059         struct page *page;
1060
1061         ipa_endpoint_replenish(endpoint, 1);
1062
1063         if (trans->cancelled)
1064                 return;
1065
1066         /* Parse or build a socket buffer using the actual received length */
1067         page = trans->data;
1068         if (endpoint->data->status_enable)
1069                 ipa_endpoint_status_parse(endpoint, page, trans->len);
1070         else if (ipa_endpoint_skb_build(endpoint, page, trans->len))
1071                 trans->data = NULL;     /* Pages have been consumed */
1072 }
1073
1074 void ipa_endpoint_trans_complete(struct ipa_endpoint *endpoint,
1075                                  struct gsi_trans *trans)
1076 {
1077         if (endpoint->toward_ipa)
1078                 ipa_endpoint_tx_complete(endpoint, trans);
1079         else
1080                 ipa_endpoint_rx_complete(endpoint, trans);
1081 }
1082
1083 void ipa_endpoint_trans_release(struct ipa_endpoint *endpoint,
1084                                 struct gsi_trans *trans)
1085 {
1086         if (endpoint->toward_ipa) {
1087                 struct ipa *ipa = endpoint->ipa;
1088
1089                 /* Nothing to do for command transactions */
1090                 if (endpoint != ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]) {
1091                         struct sk_buff *skb = trans->data;
1092
1093                         if (skb)
1094                                 dev_kfree_skb_any(skb);
1095                 }
1096         } else {
1097                 struct page *page = trans->data;
1098
1099                 if (page)
1100                         __free_pages(page, get_order(IPA_RX_BUFFER_SIZE));
1101         }
1102 }
1103
1104 void ipa_endpoint_default_route_set(struct ipa *ipa, u32 endpoint_id)
1105 {
1106         u32 val;
1107
1108         /* ROUTE_DIS is 0 */
1109         val = u32_encode_bits(endpoint_id, ROUTE_DEF_PIPE_FMASK);
1110         val |= ROUTE_DEF_HDR_TABLE_FMASK;
1111         val |= u32_encode_bits(0, ROUTE_DEF_HDR_OFST_FMASK);
1112         val |= u32_encode_bits(endpoint_id, ROUTE_FRAG_DEF_PIPE_FMASK);
1113         val |= ROUTE_DEF_RETAIN_HDR_FMASK;
1114
1115         iowrite32(val, ipa->reg_virt + IPA_REG_ROUTE_OFFSET);
1116 }
1117
1118 void ipa_endpoint_default_route_clear(struct ipa *ipa)
1119 {
1120         ipa_endpoint_default_route_set(ipa, 0);
1121 }
1122
1123 static bool ipa_endpoint_aggr_active(struct ipa_endpoint *endpoint)
1124 {
1125         u32 mask = BIT(endpoint->endpoint_id);
1126         struct ipa *ipa = endpoint->ipa;
1127         u32 offset;
1128         u32 val;
1129
1130         /* assert(mask & ipa->available); */
1131         offset = ipa_reg_state_aggr_active_offset(ipa->version);
1132         val = ioread32(ipa->reg_virt + offset);
1133
1134         return !!(val & mask);
1135 }
1136
1137 static void ipa_endpoint_force_close(struct ipa_endpoint *endpoint)
1138 {
1139         u32 mask = BIT(endpoint->endpoint_id);
1140         struct ipa *ipa = endpoint->ipa;
1141
1142         /* assert(mask & ipa->available); */
1143         iowrite32(mask, ipa->reg_virt + IPA_REG_AGGR_FORCE_CLOSE_OFFSET);
1144 }
1145
1146 /**
1147  * ipa_endpoint_reset_rx_aggr() - Reset RX endpoint with aggregation active
1148  * @endpoint:   Endpoint to be reset
1149  *
1150  * If aggregation is active on an RX endpoint when a reset is performed
1151  * on its underlying GSI channel, a special sequence of actions must be
1152  * taken to ensure the IPA pipeline is properly cleared.
1153  *
1154  * @Return:     0 if successful, or a negative error code
1155  */
1156 static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint)
1157 {
1158         struct device *dev = &endpoint->ipa->pdev->dev;
1159         struct ipa *ipa = endpoint->ipa;
1160         struct gsi *gsi = &ipa->gsi;
1161         bool suspended = false;
1162         dma_addr_t addr;
1163         bool legacy;
1164         u32 retries;
1165         u32 len = 1;
1166         void *virt;
1167         int ret;
1168
1169         virt = kzalloc(len, GFP_KERNEL);
1170         if (!virt)
1171                 return -ENOMEM;
1172
1173         addr = dma_map_single(dev, virt, len, DMA_FROM_DEVICE);
1174         if (dma_mapping_error(dev, addr)) {
1175                 ret = -ENOMEM;
1176                 goto out_kfree;
1177         }
1178
1179         /* Force close aggregation before issuing the reset */
1180         ipa_endpoint_force_close(endpoint);
1181
1182         /* Reset and reconfigure the channel with the doorbell engine
1183          * disabled.  Then poll until we know aggregation is no longer
1184          * active.  We'll re-enable the doorbell (if appropriate) when
1185          * we reset again below.
1186          */
1187         gsi_channel_reset(gsi, endpoint->channel_id, false);
1188
1189         /* Make sure the channel isn't suspended */
1190         if (endpoint->ipa->version == IPA_VERSION_3_5_1)
1191                 suspended = ipa_endpoint_program_suspend(endpoint, false);
1192
1193         /* Start channel and do a 1 byte read */
1194         ret = gsi_channel_start(gsi, endpoint->channel_id);
1195         if (ret)
1196                 goto out_suspend_again;
1197
1198         ret = gsi_trans_read_byte(gsi, endpoint->channel_id, addr);
1199         if (ret)
1200                 goto err_endpoint_stop;
1201
1202         /* Wait for aggregation to be closed on the channel */
1203         retries = IPA_ENDPOINT_RESET_AGGR_RETRY_MAX;
1204         do {
1205                 if (!ipa_endpoint_aggr_active(endpoint))
1206                         break;
1207                 msleep(1);
1208         } while (retries--);
1209
1210         /* Check one last time */
1211         if (ipa_endpoint_aggr_active(endpoint))
1212                 dev_err(dev, "endpoint %u still active during reset\n",
1213                         endpoint->endpoint_id);
1214
1215         gsi_trans_read_byte_done(gsi, endpoint->channel_id);
1216
1217         ret = gsi_channel_stop(gsi, endpoint->channel_id);
1218         if (ret)
1219                 goto out_suspend_again;
1220
1221         /* Finally, reset and reconfigure the channel again (re-enabling the
1222          * the doorbell engine if appropriate).  Sleep for 1 millisecond to
1223          * complete the channel reset sequence.  Finish by suspending the
1224          * channel again (if necessary).
1225          */
1226         legacy = ipa->version == IPA_VERSION_3_5_1;
1227         gsi_channel_reset(gsi, endpoint->channel_id, legacy);
1228
1229         msleep(1);
1230
1231         goto out_suspend_again;
1232
1233 err_endpoint_stop:
1234         (void)gsi_channel_stop(gsi, endpoint->channel_id);
1235 out_suspend_again:
1236         if (suspended)
1237                 (void)ipa_endpoint_program_suspend(endpoint, true);
1238         dma_unmap_single(dev, addr, len, DMA_FROM_DEVICE);
1239 out_kfree:
1240         kfree(virt);
1241
1242         return ret;
1243 }
1244
1245 static void ipa_endpoint_reset(struct ipa_endpoint *endpoint)
1246 {
1247         u32 channel_id = endpoint->channel_id;
1248         struct ipa *ipa = endpoint->ipa;
1249         bool special;
1250         bool legacy;
1251         int ret = 0;
1252
1253         /* On IPA v3.5.1, if an RX endpoint is reset while aggregation
1254          * is active, we need to handle things specially to recover.
1255          * All other cases just need to reset the underlying GSI channel.
1256          *
1257          * IPA v3.5.1 enables the doorbell engine.  Newer versions do not.
1258          */
1259         legacy = ipa->version == IPA_VERSION_3_5_1;
1260         special = !endpoint->toward_ipa && endpoint->data->aggregation;
1261         if (special && ipa_endpoint_aggr_active(endpoint))
1262                 ret = ipa_endpoint_reset_rx_aggr(endpoint);
1263         else
1264                 gsi_channel_reset(&ipa->gsi, channel_id, legacy);
1265
1266         if (ret)
1267                 dev_err(&ipa->pdev->dev,
1268                         "error %d resetting channel %u for endpoint %u\n",
1269                         ret, endpoint->channel_id, endpoint->endpoint_id);
1270 }
1271
1272 static void ipa_endpoint_program(struct ipa_endpoint *endpoint)
1273 {
1274         if (endpoint->toward_ipa) {
1275                 if (endpoint->ipa->version != IPA_VERSION_4_2)
1276                         ipa_endpoint_program_delay(endpoint, false);
1277                 ipa_endpoint_init_hdr_ext(endpoint);
1278                 ipa_endpoint_init_aggr(endpoint);
1279                 ipa_endpoint_init_deaggr(endpoint);
1280                 ipa_endpoint_init_seq(endpoint);
1281         } else {
1282                 if (endpoint->ipa->version == IPA_VERSION_3_5_1)
1283                         (void)ipa_endpoint_program_suspend(endpoint, false);
1284                 ipa_endpoint_init_hdr_ext(endpoint);
1285                 ipa_endpoint_init_aggr(endpoint);
1286         }
1287         ipa_endpoint_init_cfg(endpoint);
1288         ipa_endpoint_init_hdr(endpoint);
1289         ipa_endpoint_init_hdr_metadata_mask(endpoint);
1290         ipa_endpoint_init_mode(endpoint);
1291         ipa_endpoint_status(endpoint);
1292 }
1293
1294 int ipa_endpoint_enable_one(struct ipa_endpoint *endpoint)
1295 {
1296         struct ipa *ipa = endpoint->ipa;
1297         struct gsi *gsi = &ipa->gsi;
1298         int ret;
1299
1300         ret = gsi_channel_start(gsi, endpoint->channel_id);
1301         if (ret) {
1302                 dev_err(&ipa->pdev->dev,
1303                         "error %d starting %cX channel %u for endpoint %u\n",
1304                         ret, endpoint->toward_ipa ? 'T' : 'R',
1305                         endpoint->channel_id, endpoint->endpoint_id);
1306                 return ret;
1307         }
1308
1309         if (!endpoint->toward_ipa) {
1310                 ipa_interrupt_suspend_enable(ipa->interrupt,
1311                                              endpoint->endpoint_id);
1312                 ipa_endpoint_replenish_enable(endpoint);
1313         }
1314
1315         ipa->enabled |= BIT(endpoint->endpoint_id);
1316
1317         return 0;
1318 }
1319
1320 void ipa_endpoint_disable_one(struct ipa_endpoint *endpoint)
1321 {
1322         u32 mask = BIT(endpoint->endpoint_id);
1323         struct ipa *ipa = endpoint->ipa;
1324         struct gsi *gsi = &ipa->gsi;
1325         int ret;
1326
1327         if (!(ipa->enabled & mask))
1328                 return;
1329
1330         ipa->enabled ^= mask;
1331
1332         if (!endpoint->toward_ipa) {
1333                 ipa_endpoint_replenish_disable(endpoint);
1334                 ipa_interrupt_suspend_disable(ipa->interrupt,
1335                                               endpoint->endpoint_id);
1336         }
1337
1338         /* Note that if stop fails, the channel's state is not well-defined */
1339         ret = gsi_channel_stop(gsi, endpoint->channel_id);
1340         if (ret)
1341                 dev_err(&ipa->pdev->dev,
1342                         "error %d attempting to stop endpoint %u\n", ret,
1343                         endpoint->endpoint_id);
1344 }
1345
1346 /**
1347  * ipa_endpoint_suspend_aggr() - Emulate suspend interrupt
1348  * @endpoint_id:        Endpoint on which to emulate a suspend
1349  *
1350  *  Emulate suspend IPA interrupt to unsuspend an endpoint suspended
1351  *  with an open aggregation frame.  This is to work around a hardware
1352  *  issue in IPA version 3.5.1 where the suspend interrupt will not be
1353  *  generated when it should be.
1354  */
1355 static void ipa_endpoint_suspend_aggr(struct ipa_endpoint *endpoint)
1356 {
1357         struct ipa *ipa = endpoint->ipa;
1358
1359         /* assert(ipa->version == IPA_VERSION_3_5_1); */
1360
1361         if (!endpoint->data->aggregation)
1362                 return;
1363
1364         /* Nothing to do if the endpoint doesn't have aggregation open */
1365         if (!ipa_endpoint_aggr_active(endpoint))
1366                 return;
1367
1368         /* Force close aggregation */
1369         ipa_endpoint_force_close(endpoint);
1370
1371         ipa_interrupt_simulate_suspend(ipa->interrupt);
1372 }
1373
1374 void ipa_endpoint_suspend_one(struct ipa_endpoint *endpoint)
1375 {
1376         struct device *dev = &endpoint->ipa->pdev->dev;
1377         struct gsi *gsi = &endpoint->ipa->gsi;
1378         bool stop_channel;
1379         int ret;
1380
1381         if (!(endpoint->ipa->enabled & BIT(endpoint->endpoint_id)))
1382                 return;
1383
1384         if (!endpoint->toward_ipa)
1385                 ipa_endpoint_replenish_disable(endpoint);
1386
1387         /* IPA v3.5.1 doesn't use channel stop for suspend */
1388         stop_channel = endpoint->ipa->version != IPA_VERSION_3_5_1;
1389         if (!endpoint->toward_ipa && !stop_channel) {
1390                 /* Due to a hardware bug, a client suspended with an open
1391                  * aggregation frame will not generate a SUSPEND IPA
1392                  * interrupt.  We work around this by force-closing the
1393                  * aggregation frame, then simulating the arrival of such
1394                  * an interrupt.
1395                  */
1396                 (void)ipa_endpoint_program_suspend(endpoint, true);
1397                 ipa_endpoint_suspend_aggr(endpoint);
1398         }
1399
1400         ret = gsi_channel_suspend(gsi, endpoint->channel_id, stop_channel);
1401         if (ret)
1402                 dev_err(dev, "error %d suspending channel %u\n", ret,
1403                         endpoint->channel_id);
1404 }
1405
1406 void ipa_endpoint_resume_one(struct ipa_endpoint *endpoint)
1407 {
1408         struct device *dev = &endpoint->ipa->pdev->dev;
1409         struct gsi *gsi = &endpoint->ipa->gsi;
1410         bool start_channel;
1411         int ret;
1412
1413         if (!(endpoint->ipa->enabled & BIT(endpoint->endpoint_id)))
1414                 return;
1415
1416         /* IPA v3.5.1 doesn't use channel start for resume */
1417         start_channel = endpoint->ipa->version != IPA_VERSION_3_5_1;
1418         if (!endpoint->toward_ipa && !start_channel)
1419                 (void)ipa_endpoint_program_suspend(endpoint, false);
1420
1421         ret = gsi_channel_resume(gsi, endpoint->channel_id, start_channel);
1422         if (ret)
1423                 dev_err(dev, "error %d resuming channel %u\n", ret,
1424                         endpoint->channel_id);
1425         else if (!endpoint->toward_ipa)
1426                 ipa_endpoint_replenish_enable(endpoint);
1427 }
1428
1429 void ipa_endpoint_suspend(struct ipa *ipa)
1430 {
1431         if (ipa->modem_netdev)
1432                 ipa_modem_suspend(ipa->modem_netdev);
1433
1434         ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]);
1435         ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]);
1436 }
1437
1438 void ipa_endpoint_resume(struct ipa *ipa)
1439 {
1440         ipa_endpoint_resume_one(ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]);
1441         ipa_endpoint_resume_one(ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]);
1442
1443         if (ipa->modem_netdev)
1444                 ipa_modem_resume(ipa->modem_netdev);
1445 }
1446
1447 static void ipa_endpoint_setup_one(struct ipa_endpoint *endpoint)
1448 {
1449         struct gsi *gsi = &endpoint->ipa->gsi;
1450         u32 channel_id = endpoint->channel_id;
1451
1452         /* Only AP endpoints get set up */
1453         if (endpoint->ee_id != GSI_EE_AP)
1454                 return;
1455
1456         endpoint->trans_tre_max = gsi_channel_trans_tre_max(gsi, channel_id);
1457         if (!endpoint->toward_ipa) {
1458                 /* RX transactions require a single TRE, so the maximum
1459                  * backlog is the same as the maximum outstanding TREs.
1460                  */
1461                 endpoint->replenish_enabled = false;
1462                 atomic_set(&endpoint->replenish_saved,
1463                            gsi_channel_tre_max(gsi, endpoint->channel_id));
1464                 atomic_set(&endpoint->replenish_backlog, 0);
1465                 INIT_DELAYED_WORK(&endpoint->replenish_work,
1466                                   ipa_endpoint_replenish_work);
1467         }
1468
1469         ipa_endpoint_program(endpoint);
1470
1471         endpoint->ipa->set_up |= BIT(endpoint->endpoint_id);
1472 }
1473
1474 static void ipa_endpoint_teardown_one(struct ipa_endpoint *endpoint)
1475 {
1476         endpoint->ipa->set_up &= ~BIT(endpoint->endpoint_id);
1477
1478         if (!endpoint->toward_ipa)
1479                 cancel_delayed_work_sync(&endpoint->replenish_work);
1480
1481         ipa_endpoint_reset(endpoint);
1482 }
1483
1484 void ipa_endpoint_setup(struct ipa *ipa)
1485 {
1486         u32 initialized = ipa->initialized;
1487
1488         ipa->set_up = 0;
1489         while (initialized) {
1490                 u32 endpoint_id = __ffs(initialized);
1491
1492                 initialized ^= BIT(endpoint_id);
1493
1494                 ipa_endpoint_setup_one(&ipa->endpoint[endpoint_id]);
1495         }
1496 }
1497
1498 void ipa_endpoint_teardown(struct ipa *ipa)
1499 {
1500         u32 set_up = ipa->set_up;
1501
1502         while (set_up) {
1503                 u32 endpoint_id = __fls(set_up);
1504
1505                 set_up ^= BIT(endpoint_id);
1506
1507                 ipa_endpoint_teardown_one(&ipa->endpoint[endpoint_id]);
1508         }
1509         ipa->set_up = 0;
1510 }
1511
1512 int ipa_endpoint_config(struct ipa *ipa)
1513 {
1514         struct device *dev = &ipa->pdev->dev;
1515         u32 initialized;
1516         u32 rx_base;
1517         u32 rx_mask;
1518         u32 tx_mask;
1519         int ret = 0;
1520         u32 max;
1521         u32 val;
1522
1523         /* Find out about the endpoints supplied by the hardware, and ensure
1524          * the highest one doesn't exceed the number we support.
1525          */
1526         val = ioread32(ipa->reg_virt + IPA_REG_FLAVOR_0_OFFSET);
1527
1528         /* Our RX is an IPA producer */
1529         rx_base = u32_get_bits(val, BAM_PROD_LOWEST_FMASK);
1530         max = rx_base + u32_get_bits(val, BAM_MAX_PROD_PIPES_FMASK);
1531         if (max > IPA_ENDPOINT_MAX) {
1532                 dev_err(dev, "too many endpoints (%u > %u)\n",
1533                         max, IPA_ENDPOINT_MAX);
1534                 return -EINVAL;
1535         }
1536         rx_mask = GENMASK(max - 1, rx_base);
1537
1538         /* Our TX is an IPA consumer */
1539         max = u32_get_bits(val, BAM_MAX_CONS_PIPES_FMASK);
1540         tx_mask = GENMASK(max - 1, 0);
1541
1542         ipa->available = rx_mask | tx_mask;
1543
1544         /* Check for initialized endpoints not supported by the hardware */
1545         if (ipa->initialized & ~ipa->available) {
1546                 dev_err(dev, "unavailable endpoint id(s) 0x%08x\n",
1547                         ipa->initialized & ~ipa->available);
1548                 ret = -EINVAL;          /* Report other errors too */
1549         }
1550
1551         initialized = ipa->initialized;
1552         while (initialized) {
1553                 u32 endpoint_id = __ffs(initialized);
1554                 struct ipa_endpoint *endpoint;
1555
1556                 initialized ^= BIT(endpoint_id);
1557
1558                 /* Make sure it's pointing in the right direction */
1559                 endpoint = &ipa->endpoint[endpoint_id];
1560                 if ((endpoint_id < rx_base) != !!endpoint->toward_ipa) {
1561                         dev_err(dev, "endpoint id %u wrong direction\n",
1562                                 endpoint_id);
1563                         ret = -EINVAL;
1564                 }
1565         }
1566
1567         return ret;
1568 }
1569
1570 void ipa_endpoint_deconfig(struct ipa *ipa)
1571 {
1572         ipa->available = 0;     /* Nothing more to do */
1573 }
1574
1575 static void ipa_endpoint_init_one(struct ipa *ipa, enum ipa_endpoint_name name,
1576                                   const struct ipa_gsi_endpoint_data *data)
1577 {
1578         struct ipa_endpoint *endpoint;
1579
1580         endpoint = &ipa->endpoint[data->endpoint_id];
1581
1582         if (data->ee_id == GSI_EE_AP)
1583                 ipa->channel_map[data->channel_id] = endpoint;
1584         ipa->name_map[name] = endpoint;
1585
1586         endpoint->ipa = ipa;
1587         endpoint->ee_id = data->ee_id;
1588         endpoint->seq_type = data->endpoint.seq_type;
1589         endpoint->channel_id = data->channel_id;
1590         endpoint->endpoint_id = data->endpoint_id;
1591         endpoint->toward_ipa = data->toward_ipa;
1592         endpoint->data = &data->endpoint.config;
1593
1594         ipa->initialized |= BIT(endpoint->endpoint_id);
1595 }
1596
1597 void ipa_endpoint_exit_one(struct ipa_endpoint *endpoint)
1598 {
1599         endpoint->ipa->initialized &= ~BIT(endpoint->endpoint_id);
1600
1601         memset(endpoint, 0, sizeof(*endpoint));
1602 }
1603
1604 void ipa_endpoint_exit(struct ipa *ipa)
1605 {
1606         u32 initialized = ipa->initialized;
1607
1608         while (initialized) {
1609                 u32 endpoint_id = __fls(initialized);
1610
1611                 initialized ^= BIT(endpoint_id);
1612
1613                 ipa_endpoint_exit_one(&ipa->endpoint[endpoint_id]);
1614         }
1615         memset(ipa->name_map, 0, sizeof(ipa->name_map));
1616         memset(ipa->channel_map, 0, sizeof(ipa->channel_map));
1617 }
1618
1619 /* Returns a bitmask of endpoints that support filtering, or 0 on error */
1620 u32 ipa_endpoint_init(struct ipa *ipa, u32 count,
1621                       const struct ipa_gsi_endpoint_data *data)
1622 {
1623         enum ipa_endpoint_name name;
1624         u32 filter_map;
1625
1626         if (!ipa_endpoint_data_valid(ipa, count, data))
1627                 return 0;       /* Error */
1628
1629         ipa->initialized = 0;
1630
1631         filter_map = 0;
1632         for (name = 0; name < count; name++, data++) {
1633                 if (ipa_gsi_endpoint_data_empty(data))
1634                         continue;       /* Skip over empty slots */
1635
1636                 ipa_endpoint_init_one(ipa, name, data);
1637
1638                 if (data->endpoint.filter_support)
1639                         filter_map |= BIT(data->endpoint_id);
1640         }
1641
1642         if (!ipa_filter_map_valid(ipa, filter_map))
1643                 goto err_endpoint_exit;
1644
1645         return filter_map;      /* Non-zero bitmask */
1646
1647 err_endpoint_exit:
1648         ipa_endpoint_exit(ipa);
1649
1650         return 0;       /* Error */
1651 }