xref: /openbmc/linux/drivers/net/ipa/ipa_endpoint.c (revision bc33f5e5)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
4  * Copyright (C) 2019-2022 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 #include "ipa_power.h"
25 
26 /* Hardware is told about receive buffers once a "batch" has been queued */
27 #define IPA_REPLENISH_BATCH	16		/* Must be non-zero */
28 
29 /* The amount of RX buffer space consumed by standard skb overhead */
30 #define IPA_RX_BUFFER_OVERHEAD	(PAGE_SIZE - SKB_MAX_ORDER(NET_SKB_PAD, 0))
31 
32 /* Where to find the QMAP mux_id for a packet within modem-supplied metadata */
33 #define IPA_ENDPOINT_QMAP_METADATA_MASK		0x000000ff /* host byte order */
34 
35 #define IPA_ENDPOINT_RESET_AGGR_RETRY_MAX	3
36 
37 /** enum ipa_status_opcode - status element opcode hardware values */
38 enum ipa_status_opcode {
39 	IPA_STATUS_OPCODE_PACKET		= 0x01,
40 	IPA_STATUS_OPCODE_DROPPED_PACKET	= 0x04,
41 	IPA_STATUS_OPCODE_SUSPENDED_PACKET	= 0x08,
42 	IPA_STATUS_OPCODE_PACKET_2ND_PASS	= 0x40,
43 };
44 
45 /** enum ipa_status_exception - status element exception type */
46 enum ipa_status_exception {
47 	/* 0 means no exception */
48 	IPA_STATUS_EXCEPTION_DEAGGR		= 0x01,
49 };
50 
51 /* Status element provided by hardware */
52 struct ipa_status {
53 	u8 opcode;		/* enum ipa_status_opcode */
54 	u8 exception;		/* enum ipa_status_exception */
55 	__le16 mask;
56 	__le16 pkt_len;
57 	u8 endp_src_idx;
58 	u8 endp_dst_idx;
59 	__le32 metadata;
60 	__le32 flags1;
61 	__le64 flags2;
62 	__le32 flags3;
63 	__le32 flags4;
64 };
65 
66 /* Field masks for struct ipa_status structure fields */
67 #define IPA_STATUS_MASK_TAG_VALID_FMASK		GENMASK(4, 4)
68 #define IPA_STATUS_SRC_IDX_FMASK		GENMASK(4, 0)
69 #define IPA_STATUS_DST_IDX_FMASK		GENMASK(4, 0)
70 #define IPA_STATUS_FLAGS1_RT_RULE_ID_FMASK	GENMASK(31, 22)
71 #define IPA_STATUS_FLAGS2_TAG_FMASK		GENMASK_ULL(63, 16)
72 
73 /* Compute the aggregation size value to use for a given buffer size */
74 static u32 ipa_aggr_size_kb(u32 rx_buffer_size, bool aggr_hard_limit)
75 {
76 	/* A hard aggregation limit will not be crossed; aggregation closes
77 	 * if saving incoming data would cross the hard byte limit boundary.
78 	 *
79 	 * With a soft limit, aggregation closes *after* the size boundary
80 	 * has been crossed.  In that case the limit must leave enough space
81 	 * after that limit to receive a full MTU of data plus overhead.
82 	 */
83 	if (!aggr_hard_limit)
84 		rx_buffer_size -= IPA_MTU + IPA_RX_BUFFER_OVERHEAD;
85 
86 	/* The byte limit is encoded as a number of kilobytes */
87 
88 	return rx_buffer_size / SZ_1K;
89 }
90 
91 static bool ipa_endpoint_data_valid_one(struct ipa *ipa, u32 count,
92 			    const struct ipa_gsi_endpoint_data *all_data,
93 			    const struct ipa_gsi_endpoint_data *data)
94 {
95 	const struct ipa_gsi_endpoint_data *other_data;
96 	struct device *dev = &ipa->pdev->dev;
97 	enum ipa_endpoint_name other_name;
98 
99 	if (ipa_gsi_endpoint_data_empty(data))
100 		return true;
101 
102 	if (!data->toward_ipa) {
103 		const struct ipa_endpoint_rx *rx_config;
104 		const struct ipa_reg *reg;
105 		u32 buffer_size;
106 		u32 aggr_size;
107 		u32 limit;
108 
109 		if (data->endpoint.filter_support) {
110 			dev_err(dev, "filtering not supported for "
111 					"RX endpoint %u\n",
112 				data->endpoint_id);
113 			return false;
114 		}
115 
116 		/* Nothing more to check for non-AP RX */
117 		if (data->ee_id != GSI_EE_AP)
118 			return true;
119 
120 		rx_config = &data->endpoint.config.rx;
121 
122 		/* The buffer size must hold an MTU plus overhead */
123 		buffer_size = rx_config->buffer_size;
124 		limit = IPA_MTU + IPA_RX_BUFFER_OVERHEAD;
125 		if (buffer_size < limit) {
126 			dev_err(dev, "RX buffer size too small for RX endpoint %u (%u < %u)\n",
127 				data->endpoint_id, buffer_size, limit);
128 			return false;
129 		}
130 
131 		if (!data->endpoint.config.aggregation) {
132 			bool result = true;
133 
134 			/* No aggregation; check for bogus aggregation data */
135 			if (rx_config->aggr_time_limit) {
136 				dev_err(dev,
137 					"time limit with no aggregation for RX endpoint %u\n",
138 					data->endpoint_id);
139 				result = false;
140 			}
141 
142 			if (rx_config->aggr_hard_limit) {
143 				dev_err(dev, "hard limit with no aggregation for RX endpoint %u\n",
144 					data->endpoint_id);
145 				result = false;
146 			}
147 
148 			if (rx_config->aggr_close_eof) {
149 				dev_err(dev, "close EOF with no aggregation for RX endpoint %u\n",
150 					data->endpoint_id);
151 				result = false;
152 			}
153 
154 			return result;	/* Nothing more to check */
155 		}
156 
157 		/* For an endpoint supporting receive aggregation, the byte
158 		 * limit defines the point at which aggregation closes.  This
159 		 * check ensures the receive buffer size doesn't result in a
160 		 * limit that exceeds what's representable in the aggregation
161 		 * byte limit field.
162 		 */
163 		aggr_size = ipa_aggr_size_kb(buffer_size - NET_SKB_PAD,
164 					     rx_config->aggr_hard_limit);
165 		reg = ipa_reg(ipa, ENDP_INIT_AGGR);
166 
167 		limit = ipa_reg_field_max(reg, BYTE_LIMIT);
168 		if (aggr_size > limit) {
169 			dev_err(dev, "aggregated size too large for RX endpoint %u (%u KB > %u KB)\n",
170 				data->endpoint_id, aggr_size, limit);
171 
172 			return false;
173 		}
174 
175 		return true;	/* Nothing more to check for RX */
176 	}
177 
178 	/* Starting with IPA v4.5 sequencer replication is obsolete */
179 	if (ipa->version >= IPA_VERSION_4_5) {
180 		if (data->endpoint.config.tx.seq_rep_type) {
181 			dev_err(dev, "no-zero seq_rep_type TX endpoint %u\n",
182 				data->endpoint_id);
183 			return false;
184 		}
185 	}
186 
187 	if (data->endpoint.config.status_enable) {
188 		other_name = data->endpoint.config.tx.status_endpoint;
189 		if (other_name >= count) {
190 			dev_err(dev, "status endpoint name %u out of range "
191 					"for endpoint %u\n",
192 				other_name, data->endpoint_id);
193 			return false;
194 		}
195 
196 		/* Status endpoint must be defined... */
197 		other_data = &all_data[other_name];
198 		if (ipa_gsi_endpoint_data_empty(other_data)) {
199 			dev_err(dev, "DMA endpoint name %u undefined "
200 					"for endpoint %u\n",
201 				other_name, data->endpoint_id);
202 			return false;
203 		}
204 
205 		/* ...and has to be an RX endpoint... */
206 		if (other_data->toward_ipa) {
207 			dev_err(dev,
208 				"status endpoint for endpoint %u not RX\n",
209 				data->endpoint_id);
210 			return false;
211 		}
212 
213 		/* ...and if it's to be an AP endpoint... */
214 		if (other_data->ee_id == GSI_EE_AP) {
215 			/* ...make sure it has status enabled. */
216 			if (!other_data->endpoint.config.status_enable) {
217 				dev_err(dev,
218 					"status not enabled for endpoint %u\n",
219 					other_data->endpoint_id);
220 				return false;
221 			}
222 		}
223 	}
224 
225 	if (data->endpoint.config.dma_mode) {
226 		other_name = data->endpoint.config.dma_endpoint;
227 		if (other_name >= count) {
228 			dev_err(dev, "DMA endpoint name %u out of range "
229 					"for endpoint %u\n",
230 				other_name, data->endpoint_id);
231 			return false;
232 		}
233 
234 		other_data = &all_data[other_name];
235 		if (ipa_gsi_endpoint_data_empty(other_data)) {
236 			dev_err(dev, "DMA endpoint name %u undefined "
237 					"for endpoint %u\n",
238 				other_name, data->endpoint_id);
239 			return false;
240 		}
241 	}
242 
243 	return true;
244 }
245 
246 static bool ipa_endpoint_data_valid(struct ipa *ipa, u32 count,
247 				    const struct ipa_gsi_endpoint_data *data)
248 {
249 	const struct ipa_gsi_endpoint_data *dp = data;
250 	struct device *dev = &ipa->pdev->dev;
251 	enum ipa_endpoint_name name;
252 
253 	if (count > IPA_ENDPOINT_COUNT) {
254 		dev_err(dev, "too many endpoints specified (%u > %u)\n",
255 			count, IPA_ENDPOINT_COUNT);
256 		return false;
257 	}
258 
259 	/* Make sure needed endpoints have defined data */
260 	if (ipa_gsi_endpoint_data_empty(&data[IPA_ENDPOINT_AP_COMMAND_TX])) {
261 		dev_err(dev, "command TX endpoint not defined\n");
262 		return false;
263 	}
264 	if (ipa_gsi_endpoint_data_empty(&data[IPA_ENDPOINT_AP_LAN_RX])) {
265 		dev_err(dev, "LAN RX endpoint not defined\n");
266 		return false;
267 	}
268 	if (ipa_gsi_endpoint_data_empty(&data[IPA_ENDPOINT_AP_MODEM_TX])) {
269 		dev_err(dev, "AP->modem TX endpoint not defined\n");
270 		return false;
271 	}
272 	if (ipa_gsi_endpoint_data_empty(&data[IPA_ENDPOINT_AP_MODEM_RX])) {
273 		dev_err(dev, "AP<-modem RX endpoint not defined\n");
274 		return false;
275 	}
276 
277 	for (name = 0; name < count; name++, dp++)
278 		if (!ipa_endpoint_data_valid_one(ipa, count, data, dp))
279 			return false;
280 
281 	return true;
282 }
283 
284 /* Allocate a transaction to use on a non-command endpoint */
285 static struct gsi_trans *ipa_endpoint_trans_alloc(struct ipa_endpoint *endpoint,
286 						  u32 tre_count)
287 {
288 	struct gsi *gsi = &endpoint->ipa->gsi;
289 	u32 channel_id = endpoint->channel_id;
290 	enum dma_data_direction direction;
291 
292 	direction = endpoint->toward_ipa ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
293 
294 	return gsi_channel_trans_alloc(gsi, channel_id, tre_count, direction);
295 }
296 
297 /* suspend_delay represents suspend for RX, delay for TX endpoints.
298  * Note that suspend is not supported starting with IPA v4.0, and
299  * delay mode should not be used starting with IPA v4.2.
300  */
301 static bool
302 ipa_endpoint_init_ctrl(struct ipa_endpoint *endpoint, bool suspend_delay)
303 {
304 	struct ipa *ipa = endpoint->ipa;
305 	const struct ipa_reg *reg;
306 	u32 field_id;
307 	u32 offset;
308 	bool state;
309 	u32 mask;
310 	u32 val;
311 
312 	if (endpoint->toward_ipa)
313 		WARN_ON(ipa->version >= IPA_VERSION_4_2);
314 	else
315 		WARN_ON(ipa->version >= IPA_VERSION_4_0);
316 
317 	reg = ipa_reg(ipa, ENDP_INIT_CTRL);
318 	offset = ipa_reg_n_offset(reg, endpoint->endpoint_id);
319 	val = ioread32(ipa->reg_virt + offset);
320 
321 	field_id = endpoint->toward_ipa ? ENDP_DELAY : ENDP_SUSPEND;
322 	mask = ipa_reg_bit(reg, field_id);
323 
324 	state = !!(val & mask);
325 
326 	/* Don't bother if it's already in the requested state */
327 	if (suspend_delay != state) {
328 		val ^= mask;
329 		iowrite32(val, ipa->reg_virt + offset);
330 	}
331 
332 	return state;
333 }
334 
335 /* We don't care what the previous state was for delay mode */
336 static void
337 ipa_endpoint_program_delay(struct ipa_endpoint *endpoint, bool enable)
338 {
339 	/* Delay mode should not be used for IPA v4.2+ */
340 	WARN_ON(endpoint->ipa->version >= IPA_VERSION_4_2);
341 	WARN_ON(!endpoint->toward_ipa);
342 
343 	(void)ipa_endpoint_init_ctrl(endpoint, enable);
344 }
345 
346 static bool ipa_endpoint_aggr_active(struct ipa_endpoint *endpoint)
347 {
348 	u32 mask = BIT(endpoint->endpoint_id);
349 	struct ipa *ipa = endpoint->ipa;
350 	const struct ipa_reg *reg;
351 	u32 val;
352 
353 	WARN_ON(!(mask & ipa->available));
354 
355 	reg = ipa_reg(ipa, STATE_AGGR_ACTIVE);
356 	val = ioread32(ipa->reg_virt + ipa_reg_offset(reg));
357 
358 	return !!(val & mask);
359 }
360 
361 static void ipa_endpoint_force_close(struct ipa_endpoint *endpoint)
362 {
363 	u32 mask = BIT(endpoint->endpoint_id);
364 	struct ipa *ipa = endpoint->ipa;
365 	const struct ipa_reg *reg;
366 
367 	WARN_ON(!(mask & ipa->available));
368 
369 	reg = ipa_reg(ipa, AGGR_FORCE_CLOSE);
370 	iowrite32(mask, ipa->reg_virt + ipa_reg_offset(reg));
371 }
372 
373 /**
374  * ipa_endpoint_suspend_aggr() - Emulate suspend interrupt
375  * @endpoint:	Endpoint on which to emulate a suspend
376  *
377  *  Emulate suspend IPA interrupt to unsuspend an endpoint suspended
378  *  with an open aggregation frame.  This is to work around a hardware
379  *  issue in IPA version 3.5.1 where the suspend interrupt will not be
380  *  generated when it should be.
381  */
382 static void ipa_endpoint_suspend_aggr(struct ipa_endpoint *endpoint)
383 {
384 	struct ipa *ipa = endpoint->ipa;
385 
386 	if (!endpoint->config.aggregation)
387 		return;
388 
389 	/* Nothing to do if the endpoint doesn't have aggregation open */
390 	if (!ipa_endpoint_aggr_active(endpoint))
391 		return;
392 
393 	/* Force close aggregation */
394 	ipa_endpoint_force_close(endpoint);
395 
396 	ipa_interrupt_simulate_suspend(ipa->interrupt);
397 }
398 
399 /* Returns previous suspend state (true means suspend was enabled) */
400 static bool
401 ipa_endpoint_program_suspend(struct ipa_endpoint *endpoint, bool enable)
402 {
403 	bool suspended;
404 
405 	if (endpoint->ipa->version >= IPA_VERSION_4_0)
406 		return enable;	/* For IPA v4.0+, no change made */
407 
408 	WARN_ON(endpoint->toward_ipa);
409 
410 	suspended = ipa_endpoint_init_ctrl(endpoint, enable);
411 
412 	/* A client suspended with an open aggregation frame will not
413 	 * generate a SUSPEND IPA interrupt.  If enabling suspend, have
414 	 * ipa_endpoint_suspend_aggr() handle this.
415 	 */
416 	if (enable && !suspended)
417 		ipa_endpoint_suspend_aggr(endpoint);
418 
419 	return suspended;
420 }
421 
422 /* Put all modem RX endpoints into suspend mode, and stop transmission
423  * on all modem TX endpoints.  Prior to IPA v4.2, endpoint DELAY mode is
424  * used for TX endpoints; starting with IPA v4.2 we use GSI channel flow
425  * control instead.
426  */
427 void ipa_endpoint_modem_pause_all(struct ipa *ipa, bool enable)
428 {
429 	u32 endpoint_id;
430 
431 	for (endpoint_id = 0; endpoint_id < IPA_ENDPOINT_MAX; endpoint_id++) {
432 		struct ipa_endpoint *endpoint = &ipa->endpoint[endpoint_id];
433 
434 		if (endpoint->ee_id != GSI_EE_MODEM)
435 			continue;
436 
437 		if (!endpoint->toward_ipa)
438 			(void)ipa_endpoint_program_suspend(endpoint, enable);
439 		else if (ipa->version < IPA_VERSION_4_2)
440 			ipa_endpoint_program_delay(endpoint, enable);
441 		else
442 			gsi_modem_channel_flow_control(&ipa->gsi,
443 						       endpoint->channel_id,
444 						       enable);
445 	}
446 }
447 
448 /* Reset all modem endpoints to use the default exception endpoint */
449 int ipa_endpoint_modem_exception_reset_all(struct ipa *ipa)
450 {
451 	u32 initialized = ipa->initialized;
452 	struct gsi_trans *trans;
453 	u32 count;
454 
455 	/* We need one command per modem TX endpoint, plus the commands
456 	 * that clear the pipeline.
457 	 */
458 	count = ipa->modem_tx_count + ipa_cmd_pipeline_clear_count();
459 	trans = ipa_cmd_trans_alloc(ipa, count);
460 	if (!trans) {
461 		dev_err(&ipa->pdev->dev,
462 			"no transaction to reset modem exception endpoints\n");
463 		return -EBUSY;
464 	}
465 
466 	while (initialized) {
467 		u32 endpoint_id = __ffs(initialized);
468 		struct ipa_endpoint *endpoint;
469 		const struct ipa_reg *reg;
470 		u32 offset;
471 
472 		initialized ^= BIT(endpoint_id);
473 
474 		/* We only reset modem TX endpoints */
475 		endpoint = &ipa->endpoint[endpoint_id];
476 		if (!(endpoint->ee_id == GSI_EE_MODEM && endpoint->toward_ipa))
477 			continue;
478 
479 		reg = ipa_reg(ipa, ENDP_STATUS);
480 		offset = ipa_reg_n_offset(reg, endpoint_id);
481 
482 		/* Value written is 0, and all bits are updated.  That
483 		 * means status is disabled on the endpoint, and as a
484 		 * result all other fields in the register are ignored.
485 		 */
486 		ipa_cmd_register_write_add(trans, offset, 0, ~0, false);
487 	}
488 
489 	ipa_cmd_pipeline_clear_add(trans);
490 
491 	gsi_trans_commit_wait(trans);
492 
493 	ipa_cmd_pipeline_clear_wait(ipa);
494 
495 	return 0;
496 }
497 
498 static void ipa_endpoint_init_cfg(struct ipa_endpoint *endpoint)
499 {
500 	u32 endpoint_id = endpoint->endpoint_id;
501 	struct ipa *ipa = endpoint->ipa;
502 	enum ipa_cs_offload_en enabled;
503 	const struct ipa_reg *reg;
504 	u32 val = 0;
505 
506 	reg = ipa_reg(ipa, ENDP_INIT_CFG);
507 	/* FRAG_OFFLOAD_EN is 0 */
508 	if (endpoint->config.checksum) {
509 		enum ipa_version version = ipa->version;
510 
511 		if (endpoint->toward_ipa) {
512 			u32 off;
513 
514 			/* Checksum header offset is in 4-byte units */
515 			off = sizeof(struct rmnet_map_header) / sizeof(u32);
516 			val |= ipa_reg_encode(reg, CS_METADATA_HDR_OFFSET, off);
517 
518 			enabled = version < IPA_VERSION_4_5
519 					? IPA_CS_OFFLOAD_UL
520 					: IPA_CS_OFFLOAD_INLINE;
521 		} else {
522 			enabled = version < IPA_VERSION_4_5
523 					? IPA_CS_OFFLOAD_DL
524 					: IPA_CS_OFFLOAD_INLINE;
525 		}
526 	} else {
527 		enabled = IPA_CS_OFFLOAD_NONE;
528 	}
529 	val |= ipa_reg_encode(reg, CS_OFFLOAD_EN, enabled);
530 	/* CS_GEN_QMB_MASTER_SEL is 0 */
531 
532 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
533 }
534 
535 static void ipa_endpoint_init_nat(struct ipa_endpoint *endpoint)
536 {
537 	u32 endpoint_id = endpoint->endpoint_id;
538 	struct ipa *ipa = endpoint->ipa;
539 	const struct ipa_reg *reg;
540 	u32 val;
541 
542 	if (!endpoint->toward_ipa)
543 		return;
544 
545 	reg = ipa_reg(ipa, ENDP_INIT_NAT);
546 	val = ipa_reg_encode(reg, NAT_EN, IPA_NAT_BYPASS);
547 
548 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
549 }
550 
551 static u32
552 ipa_qmap_header_size(enum ipa_version version, struct ipa_endpoint *endpoint)
553 {
554 	u32 header_size = sizeof(struct rmnet_map_header);
555 
556 	/* Without checksum offload, we just have the MAP header */
557 	if (!endpoint->config.checksum)
558 		return header_size;
559 
560 	if (version < IPA_VERSION_4_5) {
561 		/* Checksum header inserted for AP TX endpoints only */
562 		if (endpoint->toward_ipa)
563 			header_size += sizeof(struct rmnet_map_ul_csum_header);
564 	} else {
565 		/* Checksum header is used in both directions */
566 		header_size += sizeof(struct rmnet_map_v5_csum_header);
567 	}
568 
569 	return header_size;
570 }
571 
572 /* Encoded value for ENDP_INIT_HDR register HDR_LEN* field(s) */
573 static u32 ipa_header_size_encode(enum ipa_version version,
574 				  const struct ipa_reg *reg, u32 header_size)
575 {
576 	u32 field_max = ipa_reg_field_max(reg, HDR_LEN);
577 	u32 val;
578 
579 	/* We know field_max can be used as a mask (2^n - 1) */
580 	val = ipa_reg_encode(reg, HDR_LEN, header_size & field_max);
581 	if (version < IPA_VERSION_4_5) {
582 		WARN_ON(header_size > field_max);
583 		return val;
584 	}
585 
586 	/* IPA v4.5 adds a few more most-significant bits */
587 	header_size >>= hweight32(field_max);
588 	WARN_ON(header_size > ipa_reg_field_max(reg, HDR_LEN_MSB));
589 	val |= ipa_reg_encode(reg, HDR_LEN_MSB, header_size);
590 
591 	return val;
592 }
593 
594 /* Encoded value for ENDP_INIT_HDR register OFST_METADATA* field(s) */
595 static u32 ipa_metadata_offset_encode(enum ipa_version version,
596 				      const struct ipa_reg *reg, u32 offset)
597 {
598 	u32 field_max = ipa_reg_field_max(reg, HDR_OFST_METADATA);
599 	u32 val;
600 
601 	/* We know field_max can be used as a mask (2^n - 1) */
602 	val = ipa_reg_encode(reg, HDR_OFST_METADATA, offset);
603 	if (version < IPA_VERSION_4_5) {
604 		WARN_ON(offset > field_max);
605 		return val;
606 	}
607 
608 	/* IPA v4.5 adds a few more most-significant bits */
609 	offset >>= hweight32(field_max);
610 	WARN_ON(offset > ipa_reg_field_max(reg, HDR_OFST_METADATA_MSB));
611 	val |= ipa_reg_encode(reg, HDR_OFST_METADATA_MSB, offset);
612 
613 	return val;
614 }
615 
616 /**
617  * ipa_endpoint_init_hdr() - Initialize HDR endpoint configuration register
618  * @endpoint:	Endpoint pointer
619  *
620  * We program QMAP endpoints so each packet received is preceded by a QMAP
621  * header structure.  The QMAP header contains a 1-byte mux_id and 2-byte
622  * packet size field, and we have the IPA hardware populate both for each
623  * received packet.  The header is configured (in the HDR_EXT register)
624  * to use big endian format.
625  *
626  * The packet size is written into the QMAP header's pkt_len field.  That
627  * location is defined here using the HDR_OFST_PKT_SIZE field.
628  *
629  * The mux_id comes from a 4-byte metadata value supplied with each packet
630  * by the modem.  It is *not* a QMAP header, but it does contain the mux_id
631  * value that we want, in its low-order byte.  A bitmask defined in the
632  * endpoint's METADATA_MASK register defines which byte within the modem
633  * metadata contains the mux_id.  And the OFST_METADATA field programmed
634  * here indicates where the extracted byte should be placed within the QMAP
635  * header.
636  */
637 static void ipa_endpoint_init_hdr(struct ipa_endpoint *endpoint)
638 {
639 	u32 endpoint_id = endpoint->endpoint_id;
640 	struct ipa *ipa = endpoint->ipa;
641 	const struct ipa_reg *reg;
642 	u32 val = 0;
643 
644 	reg = ipa_reg(ipa, ENDP_INIT_HDR);
645 	if (endpoint->config.qmap) {
646 		enum ipa_version version = ipa->version;
647 		size_t header_size;
648 
649 		header_size = ipa_qmap_header_size(version, endpoint);
650 		val = ipa_header_size_encode(version, reg, header_size);
651 
652 		/* Define how to fill fields in a received QMAP header */
653 		if (!endpoint->toward_ipa) {
654 			u32 off;     /* Field offset within header */
655 
656 			/* Where IPA will write the metadata value */
657 			off = offsetof(struct rmnet_map_header, mux_id);
658 			val |= ipa_metadata_offset_encode(version, reg, off);
659 
660 			/* Where IPA will write the length */
661 			off = offsetof(struct rmnet_map_header, pkt_len);
662 			/* Upper bits are stored in HDR_EXT with IPA v4.5 */
663 			if (version >= IPA_VERSION_4_5)
664 				off &= ipa_reg_field_max(reg, HDR_OFST_PKT_SIZE);
665 
666 			val |= ipa_reg_bit(reg, HDR_OFST_PKT_SIZE_VALID);
667 			val |= ipa_reg_encode(reg, HDR_OFST_PKT_SIZE, off);
668 		}
669 		/* For QMAP TX, metadata offset is 0 (modem assumes this) */
670 		val |= ipa_reg_bit(reg, HDR_OFST_METADATA_VALID);
671 
672 		/* HDR_ADDITIONAL_CONST_LEN is 0; (RX only) */
673 		/* HDR_A5_MUX is 0 */
674 		/* HDR_LEN_INC_DEAGG_HDR is 0 */
675 		/* HDR_METADATA_REG_VALID is 0 (TX only, version < v4.5) */
676 	}
677 
678 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
679 }
680 
681 static void ipa_endpoint_init_hdr_ext(struct ipa_endpoint *endpoint)
682 {
683 	u32 pad_align = endpoint->config.rx.pad_align;
684 	u32 endpoint_id = endpoint->endpoint_id;
685 	struct ipa *ipa = endpoint->ipa;
686 	const struct ipa_reg *reg;
687 	u32 val = 0;
688 
689 	reg = ipa_reg(ipa, ENDP_INIT_HDR_EXT);
690 	if (endpoint->config.qmap) {
691 		/* We have a header, so we must specify its endianness */
692 		val |= ipa_reg_bit(reg, HDR_ENDIANNESS);	/* big endian */
693 
694 		/* A QMAP header contains a 6 bit pad field at offset 0.
695 		 * The RMNet driver assumes this field is meaningful in
696 		 * packets it receives, and assumes the header's payload
697 		 * length includes that padding.  The RMNet driver does
698 		 * *not* pad packets it sends, however, so the pad field
699 		 * (although 0) should be ignored.
700 		 */
701 		if (!endpoint->toward_ipa) {
702 			val |= ipa_reg_bit(reg, HDR_TOTAL_LEN_OR_PAD_VALID);
703 			/* HDR_TOTAL_LEN_OR_PAD is 0 (pad, not total_len) */
704 			val |= ipa_reg_bit(reg, HDR_PAYLOAD_LEN_INC_PADDING);
705 			/* HDR_TOTAL_LEN_OR_PAD_OFFSET is 0 */
706 		}
707 	}
708 
709 	/* HDR_PAYLOAD_LEN_INC_PADDING is 0 */
710 	if (!endpoint->toward_ipa)
711 		val |= ipa_reg_encode(reg, HDR_PAD_TO_ALIGNMENT, pad_align);
712 
713 	/* IPA v4.5 adds some most-significant bits to a few fields,
714 	 * two of which are defined in the HDR (not HDR_EXT) register.
715 	 */
716 	if (ipa->version >= IPA_VERSION_4_5) {
717 		/* HDR_TOTAL_LEN_OR_PAD_OFFSET is 0, so MSB is 0 */
718 		if (endpoint->config.qmap && !endpoint->toward_ipa) {
719 			u32 mask = ipa_reg_field_max(reg, HDR_OFST_PKT_SIZE);
720 			u32 off;     /* Field offset within header */
721 
722 			off = offsetof(struct rmnet_map_header, pkt_len);
723 			/* Low bits are in the ENDP_INIT_HDR register */
724 			off >>= hweight32(mask);
725 			val |= ipa_reg_encode(reg, HDR_OFST_PKT_SIZE_MSB, off);
726 			/* HDR_ADDITIONAL_CONST_LEN is 0 so MSB is 0 */
727 		}
728 	}
729 
730 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
731 }
732 
733 static void ipa_endpoint_init_hdr_metadata_mask(struct ipa_endpoint *endpoint)
734 {
735 	u32 endpoint_id = endpoint->endpoint_id;
736 	struct ipa *ipa = endpoint->ipa;
737 	const struct ipa_reg *reg;
738 	u32 val = 0;
739 	u32 offset;
740 
741 	if (endpoint->toward_ipa)
742 		return;		/* Register not valid for TX endpoints */
743 
744 	reg = ipa_reg(ipa,  ENDP_INIT_HDR_METADATA_MASK);
745 	offset = ipa_reg_n_offset(reg, endpoint_id);
746 
747 	/* Note that HDR_ENDIANNESS indicates big endian header fields */
748 	if (endpoint->config.qmap)
749 		val = (__force u32)cpu_to_be32(IPA_ENDPOINT_QMAP_METADATA_MASK);
750 
751 	iowrite32(val, ipa->reg_virt + offset);
752 }
753 
754 static void ipa_endpoint_init_mode(struct ipa_endpoint *endpoint)
755 {
756 	struct ipa *ipa = endpoint->ipa;
757 	const struct ipa_reg *reg;
758 	u32 offset;
759 	u32 val;
760 
761 	if (!endpoint->toward_ipa)
762 		return;		/* Register not valid for RX endpoints */
763 
764 	reg = ipa_reg(ipa, ENDP_INIT_MODE);
765 	if (endpoint->config.dma_mode) {
766 		enum ipa_endpoint_name name = endpoint->config.dma_endpoint;
767 		u32 dma_endpoint_id = ipa->name_map[name]->endpoint_id;
768 
769 		val = ipa_reg_encode(reg, ENDP_MODE, IPA_DMA);
770 		val |= ipa_reg_encode(reg, DEST_PIPE_INDEX, dma_endpoint_id);
771 	} else {
772 		val = ipa_reg_encode(reg, ENDP_MODE, IPA_BASIC);
773 	}
774 	/* All other bits unspecified (and 0) */
775 
776 	offset = ipa_reg_n_offset(reg, endpoint->endpoint_id);
777 	iowrite32(val, ipa->reg_virt + offset);
778 }
779 
780 /* For IPA v4.5+, times are expressed using Qtime.  The AP uses one of two
781  * pulse generators (0 and 1) to measure elapsed time.  In ipa_qtime_config()
782  * they're configured to have granularity 100 usec and 1 msec, respectively.
783  *
784  * The return value is the positive or negative Qtime value to use to
785  * express the (microsecond) time provided.  A positive return value
786  * means pulse generator 0 can be used; otherwise use pulse generator 1.
787  */
788 static int ipa_qtime_val(u32 microseconds, u32 max)
789 {
790 	u32 val;
791 
792 	/* Use 100 microsecond granularity if possible */
793 	val = DIV_ROUND_CLOSEST(microseconds, 100);
794 	if (val <= max)
795 		return (int)val;
796 
797 	/* Have to use pulse generator 1 (millisecond granularity) */
798 	val = DIV_ROUND_CLOSEST(microseconds, 1000);
799 	WARN_ON(val > max);
800 
801 	return (int)-val;
802 }
803 
804 /* Encode the aggregation timer limit (microseconds) based on IPA version */
805 static u32 aggr_time_limit_encode(struct ipa *ipa, const struct ipa_reg *reg,
806 				  u32 microseconds)
807 {
808 	u32 max;
809 	u32 val;
810 
811 	if (!microseconds)
812 		return 0;	/* Nothing to compute if time limit is 0 */
813 
814 	max = ipa_reg_field_max(reg, TIME_LIMIT);
815 	if (ipa->version >= IPA_VERSION_4_5) {
816 		u32 gran_sel;
817 		int ret;
818 
819 		/* Compute the Qtime limit value to use */
820 		ret = ipa_qtime_val(microseconds, max);
821 		if (ret < 0) {
822 			val = -ret;
823 			gran_sel = ipa_reg_bit(reg, AGGR_GRAN_SEL);
824 		} else {
825 			val = ret;
826 			gran_sel = 0;
827 		}
828 
829 		return gran_sel | ipa_reg_encode(reg, TIME_LIMIT, val);
830 	}
831 
832 	/* We program aggregation granularity in ipa_hardware_config() */
833 	val = DIV_ROUND_CLOSEST(microseconds, IPA_AGGR_GRANULARITY);
834 	WARN(val > max, "aggr_time_limit too large (%u > %u usec)\n",
835 	     microseconds, max * IPA_AGGR_GRANULARITY);
836 
837 	return ipa_reg_encode(reg, TIME_LIMIT, val);
838 }
839 
840 static void ipa_endpoint_init_aggr(struct ipa_endpoint *endpoint)
841 {
842 	u32 endpoint_id = endpoint->endpoint_id;
843 	struct ipa *ipa = endpoint->ipa;
844 	const struct ipa_reg *reg;
845 	u32 val = 0;
846 
847 	reg = ipa_reg(ipa, ENDP_INIT_AGGR);
848 	if (endpoint->config.aggregation) {
849 		if (!endpoint->toward_ipa) {
850 			const struct ipa_endpoint_rx *rx_config;
851 			u32 buffer_size;
852 			u32 limit;
853 
854 			rx_config = &endpoint->config.rx;
855 			val |= ipa_reg_encode(reg, AGGR_EN, IPA_ENABLE_AGGR);
856 			val |= ipa_reg_encode(reg, AGGR_TYPE, IPA_GENERIC);
857 
858 			buffer_size = rx_config->buffer_size;
859 			limit = ipa_aggr_size_kb(buffer_size - NET_SKB_PAD,
860 						 rx_config->aggr_hard_limit);
861 			val |= ipa_reg_encode(reg, BYTE_LIMIT, limit);
862 
863 			limit = rx_config->aggr_time_limit;
864 			val |= aggr_time_limit_encode(ipa, reg, limit);
865 
866 			/* AGGR_PKT_LIMIT is 0 (unlimited) */
867 
868 			if (rx_config->aggr_close_eof)
869 				val |= ipa_reg_bit(reg, SW_EOF_ACTIVE);
870 		} else {
871 			val |= ipa_reg_encode(reg, AGGR_EN, IPA_ENABLE_DEAGGR);
872 			val |= ipa_reg_encode(reg, AGGR_TYPE, IPA_QCMAP);
873 			/* other fields ignored */
874 		}
875 		/* AGGR_FORCE_CLOSE is 0 */
876 		/* AGGR_GRAN_SEL is 0 for IPA v4.5 */
877 	} else {
878 		val |= ipa_reg_encode(reg, AGGR_EN, IPA_BYPASS_AGGR);
879 		/* other fields ignored */
880 	}
881 
882 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
883 }
884 
885 /* The head-of-line blocking timer is defined as a tick count.  For
886  * IPA version 4.5 the tick count is based on the Qtimer, which is
887  * derived from the 19.2 MHz SoC XO clock.  For older IPA versions
888  * each tick represents 128 cycles of the IPA core clock.
889  *
890  * Return the encoded value representing the timeout period provided
891  * that should be written to the ENDP_INIT_HOL_BLOCK_TIMER register.
892  */
893 static u32 hol_block_timer_encode(struct ipa *ipa, const struct ipa_reg *reg,
894 				  u32 microseconds)
895 {
896 	u32 width;
897 	u32 scale;
898 	u64 ticks;
899 	u64 rate;
900 	u32 high;
901 	u32 val;
902 
903 	if (!microseconds)
904 		return 0;	/* Nothing to compute if timer period is 0 */
905 
906 	if (ipa->version >= IPA_VERSION_4_5) {
907 		u32 max = ipa_reg_field_max(reg, TIMER_LIMIT);
908 		u32 gran_sel;
909 		int ret;
910 
911 		/* Compute the Qtime limit value to use */
912 		ret = ipa_qtime_val(microseconds, max);
913 		if (ret < 0) {
914 			val = -ret;
915 			gran_sel = ipa_reg_bit(reg, TIMER_GRAN_SEL);
916 		} else {
917 			val = ret;
918 			gran_sel = 0;
919 		}
920 
921 		return gran_sel | ipa_reg_encode(reg, TIMER_LIMIT, val);
922 	}
923 
924 	/* Use 64 bit arithmetic to avoid overflow */
925 	rate = ipa_core_clock_rate(ipa);
926 	ticks = DIV_ROUND_CLOSEST(microseconds * rate, 128 * USEC_PER_SEC);
927 
928 	/* We still need the result to fit into the field */
929 	WARN_ON(ticks > ipa_reg_field_max(reg, TIMER_BASE_VALUE));
930 
931 	/* IPA v3.5.1 through v4.1 just record the tick count */
932 	if (ipa->version < IPA_VERSION_4_2)
933 		return ipa_reg_encode(reg, TIMER_BASE_VALUE, (u32)ticks);
934 
935 	/* For IPA v4.2, the tick count is represented by base and
936 	 * scale fields within the 32-bit timer register, where:
937 	 *     ticks = base << scale;
938 	 * The best precision is achieved when the base value is as
939 	 * large as possible.  Find the highest set bit in the tick
940 	 * count, and extract the number of bits in the base field
941 	 * such that high bit is included.
942 	 */
943 	high = fls(ticks);		/* 1..32 (or warning above) */
944 	width = hweight32(ipa_reg_fmask(reg, TIMER_BASE_VALUE));
945 	scale = high > width ? high - width : 0;
946 	if (scale) {
947 		/* If we're scaling, round up to get a closer result */
948 		ticks += 1 << (scale - 1);
949 		/* High bit was set, so rounding might have affected it */
950 		if (fls(ticks) != high)
951 			scale++;
952 	}
953 
954 	val = ipa_reg_encode(reg, TIMER_SCALE, scale);
955 	val |= ipa_reg_encode(reg, TIMER_BASE_VALUE, (u32)ticks >> scale);
956 
957 	return val;
958 }
959 
960 /* If microseconds is 0, timeout is immediate */
961 static void ipa_endpoint_init_hol_block_timer(struct ipa_endpoint *endpoint,
962 					      u32 microseconds)
963 {
964 	u32 endpoint_id = endpoint->endpoint_id;
965 	struct ipa *ipa = endpoint->ipa;
966 	const struct ipa_reg *reg;
967 	u32 val;
968 
969 	/* This should only be changed when HOL_BLOCK_EN is disabled */
970 	reg = ipa_reg(ipa, ENDP_INIT_HOL_BLOCK_TIMER);
971 	val = hol_block_timer_encode(ipa, reg, microseconds);
972 
973 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
974 }
975 
976 static void
977 ipa_endpoint_init_hol_block_en(struct ipa_endpoint *endpoint, bool enable)
978 {
979 	u32 endpoint_id = endpoint->endpoint_id;
980 	struct ipa *ipa = endpoint->ipa;
981 	const struct ipa_reg *reg;
982 	u32 offset;
983 	u32 val;
984 
985 	reg = ipa_reg(ipa, ENDP_INIT_HOL_BLOCK_EN);
986 	offset = ipa_reg_n_offset(reg, endpoint_id);
987 	val = enable ? ipa_reg_bit(reg, HOL_BLOCK_EN) : 0;
988 
989 	iowrite32(val, ipa->reg_virt + offset);
990 
991 	/* When enabling, the register must be written twice for IPA v4.5+ */
992 	if (enable && ipa->version >= IPA_VERSION_4_5)
993 		iowrite32(val, ipa->reg_virt + offset);
994 }
995 
996 /* Assumes HOL_BLOCK is in disabled state */
997 static void ipa_endpoint_init_hol_block_enable(struct ipa_endpoint *endpoint,
998 					       u32 microseconds)
999 {
1000 	ipa_endpoint_init_hol_block_timer(endpoint, microseconds);
1001 	ipa_endpoint_init_hol_block_en(endpoint, true);
1002 }
1003 
1004 static void ipa_endpoint_init_hol_block_disable(struct ipa_endpoint *endpoint)
1005 {
1006 	ipa_endpoint_init_hol_block_en(endpoint, false);
1007 }
1008 
1009 void ipa_endpoint_modem_hol_block_clear_all(struct ipa *ipa)
1010 {
1011 	u32 i;
1012 
1013 	for (i = 0; i < IPA_ENDPOINT_MAX; i++) {
1014 		struct ipa_endpoint *endpoint = &ipa->endpoint[i];
1015 
1016 		if (endpoint->toward_ipa || endpoint->ee_id != GSI_EE_MODEM)
1017 			continue;
1018 
1019 		ipa_endpoint_init_hol_block_disable(endpoint);
1020 		ipa_endpoint_init_hol_block_enable(endpoint, 0);
1021 	}
1022 }
1023 
1024 static void ipa_endpoint_init_deaggr(struct ipa_endpoint *endpoint)
1025 {
1026 	u32 endpoint_id = endpoint->endpoint_id;
1027 	struct ipa *ipa = endpoint->ipa;
1028 	const struct ipa_reg *reg;
1029 	u32 val = 0;
1030 
1031 	if (!endpoint->toward_ipa)
1032 		return;		/* Register not valid for RX endpoints */
1033 
1034 	reg = ipa_reg(ipa, ENDP_INIT_DEAGGR);
1035 	/* DEAGGR_HDR_LEN is 0 */
1036 	/* PACKET_OFFSET_VALID is 0 */
1037 	/* PACKET_OFFSET_LOCATION is ignored (not valid) */
1038 	/* MAX_PACKET_LEN is 0 (not enforced) */
1039 
1040 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
1041 }
1042 
1043 static void ipa_endpoint_init_rsrc_grp(struct ipa_endpoint *endpoint)
1044 {
1045 	u32 resource_group = endpoint->config.resource_group;
1046 	u32 endpoint_id = endpoint->endpoint_id;
1047 	struct ipa *ipa = endpoint->ipa;
1048 	const struct ipa_reg *reg;
1049 	u32 val;
1050 
1051 	reg = ipa_reg(ipa, ENDP_INIT_RSRC_GRP);
1052 	val = ipa_reg_encode(reg, ENDP_RSRC_GRP, resource_group);
1053 
1054 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
1055 }
1056 
1057 static void ipa_endpoint_init_seq(struct ipa_endpoint *endpoint)
1058 {
1059 	u32 endpoint_id = endpoint->endpoint_id;
1060 	struct ipa *ipa = endpoint->ipa;
1061 	const struct ipa_reg *reg;
1062 	u32 val;
1063 
1064 	if (!endpoint->toward_ipa)
1065 		return;		/* Register not valid for RX endpoints */
1066 
1067 	reg = ipa_reg(ipa, ENDP_INIT_SEQ);
1068 
1069 	/* Low-order byte configures primary packet processing */
1070 	val = ipa_reg_encode(reg, SEQ_TYPE, endpoint->config.tx.seq_type);
1071 
1072 	/* Second byte (if supported) configures replicated packet processing */
1073 	if (ipa->version < IPA_VERSION_4_5)
1074 		val |= ipa_reg_encode(reg, SEQ_REP_TYPE,
1075 				      endpoint->config.tx.seq_rep_type);
1076 
1077 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
1078 }
1079 
1080 /**
1081  * ipa_endpoint_skb_tx() - Transmit a socket buffer
1082  * @endpoint:	Endpoint pointer
1083  * @skb:	Socket buffer to send
1084  *
1085  * Returns:	0 if successful, or a negative error code
1086  */
1087 int ipa_endpoint_skb_tx(struct ipa_endpoint *endpoint, struct sk_buff *skb)
1088 {
1089 	struct gsi_trans *trans;
1090 	u32 nr_frags;
1091 	int ret;
1092 
1093 	/* Make sure source endpoint's TLV FIFO has enough entries to
1094 	 * hold the linear portion of the skb and all its fragments.
1095 	 * If not, see if we can linearize it before giving up.
1096 	 */
1097 	nr_frags = skb_shinfo(skb)->nr_frags;
1098 	if (nr_frags > endpoint->skb_frag_max) {
1099 		if (skb_linearize(skb))
1100 			return -E2BIG;
1101 		nr_frags = 0;
1102 	}
1103 
1104 	trans = ipa_endpoint_trans_alloc(endpoint, 1 + nr_frags);
1105 	if (!trans)
1106 		return -EBUSY;
1107 
1108 	ret = gsi_trans_skb_add(trans, skb);
1109 	if (ret)
1110 		goto err_trans_free;
1111 	trans->data = skb;	/* transaction owns skb now */
1112 
1113 	gsi_trans_commit(trans, !netdev_xmit_more());
1114 
1115 	return 0;
1116 
1117 err_trans_free:
1118 	gsi_trans_free(trans);
1119 
1120 	return -ENOMEM;
1121 }
1122 
1123 static void ipa_endpoint_status(struct ipa_endpoint *endpoint)
1124 {
1125 	u32 endpoint_id = endpoint->endpoint_id;
1126 	struct ipa *ipa = endpoint->ipa;
1127 	const struct ipa_reg *reg;
1128 	u32 val = 0;
1129 
1130 	reg = ipa_reg(ipa, ENDP_STATUS);
1131 	if (endpoint->config.status_enable) {
1132 		val |= ipa_reg_bit(reg, STATUS_EN);
1133 		if (endpoint->toward_ipa) {
1134 			enum ipa_endpoint_name name;
1135 			u32 status_endpoint_id;
1136 
1137 			name = endpoint->config.tx.status_endpoint;
1138 			status_endpoint_id = ipa->name_map[name]->endpoint_id;
1139 
1140 			val |= ipa_reg_encode(reg, STATUS_ENDP,
1141 					      status_endpoint_id);
1142 		}
1143 		/* STATUS_LOCATION is 0, meaning status element precedes
1144 		 * packet (not present for IPA v4.5+)
1145 		 */
1146 		/* STATUS_PKT_SUPPRESS_FMASK is 0 (not present for v4.0+) */
1147 	}
1148 
1149 	iowrite32(val, ipa->reg_virt + ipa_reg_n_offset(reg, endpoint_id));
1150 }
1151 
1152 static int ipa_endpoint_replenish_one(struct ipa_endpoint *endpoint,
1153 				      struct gsi_trans *trans)
1154 {
1155 	struct page *page;
1156 	u32 buffer_size;
1157 	u32 offset;
1158 	u32 len;
1159 	int ret;
1160 
1161 	buffer_size = endpoint->config.rx.buffer_size;
1162 	page = dev_alloc_pages(get_order(buffer_size));
1163 	if (!page)
1164 		return -ENOMEM;
1165 
1166 	/* Offset the buffer to make space for skb headroom */
1167 	offset = NET_SKB_PAD;
1168 	len = buffer_size - offset;
1169 
1170 	ret = gsi_trans_page_add(trans, page, len, offset);
1171 	if (ret)
1172 		put_page(page);
1173 	else
1174 		trans->data = page;	/* transaction owns page now */
1175 
1176 	return ret;
1177 }
1178 
1179 /**
1180  * ipa_endpoint_replenish() - Replenish endpoint receive buffers
1181  * @endpoint:	Endpoint to be replenished
1182  *
1183  * The IPA hardware can hold a fixed number of receive buffers for an RX
1184  * endpoint, based on the number of entries in the underlying channel ring
1185  * buffer.  If an endpoint's "backlog" is non-zero, it indicates how many
1186  * more receive buffers can be supplied to the hardware.  Replenishing for
1187  * an endpoint can be disabled, in which case buffers are not queued to
1188  * the hardware.
1189  */
1190 static void ipa_endpoint_replenish(struct ipa_endpoint *endpoint)
1191 {
1192 	struct gsi_trans *trans;
1193 
1194 	if (!test_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags))
1195 		return;
1196 
1197 	/* Skip it if it's already active */
1198 	if (test_and_set_bit(IPA_REPLENISH_ACTIVE, endpoint->replenish_flags))
1199 		return;
1200 
1201 	while ((trans = ipa_endpoint_trans_alloc(endpoint, 1))) {
1202 		bool doorbell;
1203 
1204 		if (ipa_endpoint_replenish_one(endpoint, trans))
1205 			goto try_again_later;
1206 
1207 
1208 		/* Ring the doorbell if we've got a full batch */
1209 		doorbell = !(++endpoint->replenish_count % IPA_REPLENISH_BATCH);
1210 		gsi_trans_commit(trans, doorbell);
1211 	}
1212 
1213 	clear_bit(IPA_REPLENISH_ACTIVE, endpoint->replenish_flags);
1214 
1215 	return;
1216 
1217 try_again_later:
1218 	gsi_trans_free(trans);
1219 	clear_bit(IPA_REPLENISH_ACTIVE, endpoint->replenish_flags);
1220 
1221 	/* Whenever a receive buffer transaction completes we'll try to
1222 	 * replenish again.  It's unlikely, but if we fail to supply even
1223 	 * one buffer, nothing will trigger another replenish attempt.
1224 	 * If the hardware has no receive buffers queued, schedule work to
1225 	 * try replenishing again.
1226 	 */
1227 	if (gsi_channel_trans_idle(&endpoint->ipa->gsi, endpoint->channel_id))
1228 		schedule_delayed_work(&endpoint->replenish_work,
1229 				      msecs_to_jiffies(1));
1230 }
1231 
1232 static void ipa_endpoint_replenish_enable(struct ipa_endpoint *endpoint)
1233 {
1234 	set_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags);
1235 
1236 	/* Start replenishing if hardware currently has no buffers */
1237 	if (gsi_channel_trans_idle(&endpoint->ipa->gsi, endpoint->channel_id))
1238 		ipa_endpoint_replenish(endpoint);
1239 }
1240 
1241 static void ipa_endpoint_replenish_disable(struct ipa_endpoint *endpoint)
1242 {
1243 	clear_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags);
1244 }
1245 
1246 static void ipa_endpoint_replenish_work(struct work_struct *work)
1247 {
1248 	struct delayed_work *dwork = to_delayed_work(work);
1249 	struct ipa_endpoint *endpoint;
1250 
1251 	endpoint = container_of(dwork, struct ipa_endpoint, replenish_work);
1252 
1253 	ipa_endpoint_replenish(endpoint);
1254 }
1255 
1256 static void ipa_endpoint_skb_copy(struct ipa_endpoint *endpoint,
1257 				  void *data, u32 len, u32 extra)
1258 {
1259 	struct sk_buff *skb;
1260 
1261 	if (!endpoint->netdev)
1262 		return;
1263 
1264 	skb = __dev_alloc_skb(len, GFP_ATOMIC);
1265 	if (skb) {
1266 		/* Copy the data into the socket buffer and receive it */
1267 		skb_put(skb, len);
1268 		memcpy(skb->data, data, len);
1269 		skb->truesize += extra;
1270 	}
1271 
1272 	ipa_modem_skb_rx(endpoint->netdev, skb);
1273 }
1274 
1275 static bool ipa_endpoint_skb_build(struct ipa_endpoint *endpoint,
1276 				   struct page *page, u32 len)
1277 {
1278 	u32 buffer_size = endpoint->config.rx.buffer_size;
1279 	struct sk_buff *skb;
1280 
1281 	/* Nothing to do if there's no netdev */
1282 	if (!endpoint->netdev)
1283 		return false;
1284 
1285 	WARN_ON(len > SKB_WITH_OVERHEAD(buffer_size - NET_SKB_PAD));
1286 
1287 	skb = build_skb(page_address(page), buffer_size);
1288 	if (skb) {
1289 		/* Reserve the headroom and account for the data */
1290 		skb_reserve(skb, NET_SKB_PAD);
1291 		skb_put(skb, len);
1292 	}
1293 
1294 	/* Receive the buffer (or record drop if unable to build it) */
1295 	ipa_modem_skb_rx(endpoint->netdev, skb);
1296 
1297 	return skb != NULL;
1298 }
1299 
1300 /* The format of a packet status element is the same for several status
1301  * types (opcodes).  Other types aren't currently supported.
1302  */
1303 static bool ipa_status_format_packet(enum ipa_status_opcode opcode)
1304 {
1305 	switch (opcode) {
1306 	case IPA_STATUS_OPCODE_PACKET:
1307 	case IPA_STATUS_OPCODE_DROPPED_PACKET:
1308 	case IPA_STATUS_OPCODE_SUSPENDED_PACKET:
1309 	case IPA_STATUS_OPCODE_PACKET_2ND_PASS:
1310 		return true;
1311 	default:
1312 		return false;
1313 	}
1314 }
1315 
1316 static bool ipa_endpoint_status_skip(struct ipa_endpoint *endpoint,
1317 				     const struct ipa_status *status)
1318 {
1319 	u32 endpoint_id;
1320 
1321 	if (!ipa_status_format_packet(status->opcode))
1322 		return true;
1323 	if (!status->pkt_len)
1324 		return true;
1325 	endpoint_id = u8_get_bits(status->endp_dst_idx,
1326 				  IPA_STATUS_DST_IDX_FMASK);
1327 	if (endpoint_id != endpoint->endpoint_id)
1328 		return true;
1329 
1330 	return false;	/* Don't skip this packet, process it */
1331 }
1332 
1333 static bool ipa_endpoint_status_tag(struct ipa_endpoint *endpoint,
1334 				    const struct ipa_status *status)
1335 {
1336 	struct ipa_endpoint *command_endpoint;
1337 	struct ipa *ipa = endpoint->ipa;
1338 	u32 endpoint_id;
1339 
1340 	if (!le16_get_bits(status->mask, IPA_STATUS_MASK_TAG_VALID_FMASK))
1341 		return false;	/* No valid tag */
1342 
1343 	/* The status contains a valid tag.  We know the packet was sent to
1344 	 * this endpoint (already verified by ipa_endpoint_status_skip()).
1345 	 * If the packet came from the AP->command TX endpoint we know
1346 	 * this packet was sent as part of the pipeline clear process.
1347 	 */
1348 	endpoint_id = u8_get_bits(status->endp_src_idx,
1349 				  IPA_STATUS_SRC_IDX_FMASK);
1350 	command_endpoint = ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX];
1351 	if (endpoint_id == command_endpoint->endpoint_id) {
1352 		complete(&ipa->completion);
1353 	} else {
1354 		dev_err(&ipa->pdev->dev,
1355 			"unexpected tagged packet from endpoint %u\n",
1356 			endpoint_id);
1357 	}
1358 
1359 	return true;
1360 }
1361 
1362 /* Return whether the status indicates the packet should be dropped */
1363 static bool ipa_endpoint_status_drop(struct ipa_endpoint *endpoint,
1364 				     const struct ipa_status *status)
1365 {
1366 	u32 val;
1367 
1368 	/* If the status indicates a tagged transfer, we'll drop the packet */
1369 	if (ipa_endpoint_status_tag(endpoint, status))
1370 		return true;
1371 
1372 	/* Deaggregation exceptions we drop; all other types we consume */
1373 	if (status->exception)
1374 		return status->exception == IPA_STATUS_EXCEPTION_DEAGGR;
1375 
1376 	/* Drop the packet if it fails to match a routing rule; otherwise no */
1377 	val = le32_get_bits(status->flags1, IPA_STATUS_FLAGS1_RT_RULE_ID_FMASK);
1378 
1379 	return val == field_max(IPA_STATUS_FLAGS1_RT_RULE_ID_FMASK);
1380 }
1381 
1382 static void ipa_endpoint_status_parse(struct ipa_endpoint *endpoint,
1383 				      struct page *page, u32 total_len)
1384 {
1385 	u32 buffer_size = endpoint->config.rx.buffer_size;
1386 	void *data = page_address(page) + NET_SKB_PAD;
1387 	u32 unused = buffer_size - total_len;
1388 	u32 resid = total_len;
1389 
1390 	while (resid) {
1391 		const struct ipa_status *status = data;
1392 		u32 align;
1393 		u32 len;
1394 
1395 		if (resid < sizeof(*status)) {
1396 			dev_err(&endpoint->ipa->pdev->dev,
1397 				"short message (%u bytes < %zu byte status)\n",
1398 				resid, sizeof(*status));
1399 			break;
1400 		}
1401 
1402 		/* Skip over status packets that lack packet data */
1403 		if (ipa_endpoint_status_skip(endpoint, status)) {
1404 			data += sizeof(*status);
1405 			resid -= sizeof(*status);
1406 			continue;
1407 		}
1408 
1409 		/* Compute the amount of buffer space consumed by the packet,
1410 		 * including the status element.  If the hardware is configured
1411 		 * to pad packet data to an aligned boundary, account for that.
1412 		 * And if checksum offload is enabled a trailer containing
1413 		 * computed checksum information will be appended.
1414 		 */
1415 		align = endpoint->config.rx.pad_align ? : 1;
1416 		len = le16_to_cpu(status->pkt_len);
1417 		len = sizeof(*status) + ALIGN(len, align);
1418 		if (endpoint->config.checksum)
1419 			len += sizeof(struct rmnet_map_dl_csum_trailer);
1420 
1421 		if (!ipa_endpoint_status_drop(endpoint, status)) {
1422 			void *data2;
1423 			u32 extra;
1424 			u32 len2;
1425 
1426 			/* Client receives only packet data (no status) */
1427 			data2 = data + sizeof(*status);
1428 			len2 = le16_to_cpu(status->pkt_len);
1429 
1430 			/* Have the true size reflect the extra unused space in
1431 			 * the original receive buffer.  Distribute the "cost"
1432 			 * proportionately across all aggregated packets in the
1433 			 * buffer.
1434 			 */
1435 			extra = DIV_ROUND_CLOSEST(unused * len, total_len);
1436 			ipa_endpoint_skb_copy(endpoint, data2, len2, extra);
1437 		}
1438 
1439 		/* Consume status and the full packet it describes */
1440 		data += len;
1441 		resid -= len;
1442 	}
1443 }
1444 
1445 void ipa_endpoint_trans_complete(struct ipa_endpoint *endpoint,
1446 				 struct gsi_trans *trans)
1447 {
1448 	struct page *page;
1449 
1450 	if (endpoint->toward_ipa)
1451 		return;
1452 
1453 	if (trans->cancelled)
1454 		goto done;
1455 
1456 	/* Parse or build a socket buffer using the actual received length */
1457 	page = trans->data;
1458 	if (endpoint->config.status_enable)
1459 		ipa_endpoint_status_parse(endpoint, page, trans->len);
1460 	else if (ipa_endpoint_skb_build(endpoint, page, trans->len))
1461 		trans->data = NULL;	/* Pages have been consumed */
1462 done:
1463 	ipa_endpoint_replenish(endpoint);
1464 }
1465 
1466 void ipa_endpoint_trans_release(struct ipa_endpoint *endpoint,
1467 				struct gsi_trans *trans)
1468 {
1469 	if (endpoint->toward_ipa) {
1470 		struct ipa *ipa = endpoint->ipa;
1471 
1472 		/* Nothing to do for command transactions */
1473 		if (endpoint != ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]) {
1474 			struct sk_buff *skb = trans->data;
1475 
1476 			if (skb)
1477 				dev_kfree_skb_any(skb);
1478 		}
1479 	} else {
1480 		struct page *page = trans->data;
1481 
1482 		if (page)
1483 			put_page(page);
1484 	}
1485 }
1486 
1487 void ipa_endpoint_default_route_set(struct ipa *ipa, u32 endpoint_id)
1488 {
1489 	const struct ipa_reg *reg;
1490 	u32 val;
1491 
1492 	reg = ipa_reg(ipa, ROUTE);
1493 	/* ROUTE_DIS is 0 */
1494 	val = ipa_reg_encode(reg, ROUTE_DEF_PIPE, endpoint_id);
1495 	val |= ipa_reg_bit(reg, ROUTE_DEF_HDR_TABLE);
1496 	/* ROUTE_DEF_HDR_OFST is 0 */
1497 	val |= ipa_reg_encode(reg, ROUTE_FRAG_DEF_PIPE, endpoint_id);
1498 	val |= ipa_reg_bit(reg, ROUTE_DEF_RETAIN_HDR);
1499 
1500 	iowrite32(val, ipa->reg_virt + ipa_reg_offset(reg));
1501 }
1502 
1503 void ipa_endpoint_default_route_clear(struct ipa *ipa)
1504 {
1505 	ipa_endpoint_default_route_set(ipa, 0);
1506 }
1507 
1508 /**
1509  * ipa_endpoint_reset_rx_aggr() - Reset RX endpoint with aggregation active
1510  * @endpoint:	Endpoint to be reset
1511  *
1512  * If aggregation is active on an RX endpoint when a reset is performed
1513  * on its underlying GSI channel, a special sequence of actions must be
1514  * taken to ensure the IPA pipeline is properly cleared.
1515  *
1516  * Return:	0 if successful, or a negative error code
1517  */
1518 static int ipa_endpoint_reset_rx_aggr(struct ipa_endpoint *endpoint)
1519 {
1520 	struct device *dev = &endpoint->ipa->pdev->dev;
1521 	struct ipa *ipa = endpoint->ipa;
1522 	struct gsi *gsi = &ipa->gsi;
1523 	bool suspended = false;
1524 	dma_addr_t addr;
1525 	u32 retries;
1526 	u32 len = 1;
1527 	void *virt;
1528 	int ret;
1529 
1530 	virt = kzalloc(len, GFP_KERNEL);
1531 	if (!virt)
1532 		return -ENOMEM;
1533 
1534 	addr = dma_map_single(dev, virt, len, DMA_FROM_DEVICE);
1535 	if (dma_mapping_error(dev, addr)) {
1536 		ret = -ENOMEM;
1537 		goto out_kfree;
1538 	}
1539 
1540 	/* Force close aggregation before issuing the reset */
1541 	ipa_endpoint_force_close(endpoint);
1542 
1543 	/* Reset and reconfigure the channel with the doorbell engine
1544 	 * disabled.  Then poll until we know aggregation is no longer
1545 	 * active.  We'll re-enable the doorbell (if appropriate) when
1546 	 * we reset again below.
1547 	 */
1548 	gsi_channel_reset(gsi, endpoint->channel_id, false);
1549 
1550 	/* Make sure the channel isn't suspended */
1551 	suspended = ipa_endpoint_program_suspend(endpoint, false);
1552 
1553 	/* Start channel and do a 1 byte read */
1554 	ret = gsi_channel_start(gsi, endpoint->channel_id);
1555 	if (ret)
1556 		goto out_suspend_again;
1557 
1558 	ret = gsi_trans_read_byte(gsi, endpoint->channel_id, addr);
1559 	if (ret)
1560 		goto err_endpoint_stop;
1561 
1562 	/* Wait for aggregation to be closed on the channel */
1563 	retries = IPA_ENDPOINT_RESET_AGGR_RETRY_MAX;
1564 	do {
1565 		if (!ipa_endpoint_aggr_active(endpoint))
1566 			break;
1567 		usleep_range(USEC_PER_MSEC, 2 * USEC_PER_MSEC);
1568 	} while (retries--);
1569 
1570 	/* Check one last time */
1571 	if (ipa_endpoint_aggr_active(endpoint))
1572 		dev_err(dev, "endpoint %u still active during reset\n",
1573 			endpoint->endpoint_id);
1574 
1575 	gsi_trans_read_byte_done(gsi, endpoint->channel_id);
1576 
1577 	ret = gsi_channel_stop(gsi, endpoint->channel_id);
1578 	if (ret)
1579 		goto out_suspend_again;
1580 
1581 	/* Finally, reset and reconfigure the channel again (re-enabling
1582 	 * the doorbell engine if appropriate).  Sleep for 1 millisecond to
1583 	 * complete the channel reset sequence.  Finish by suspending the
1584 	 * channel again (if necessary).
1585 	 */
1586 	gsi_channel_reset(gsi, endpoint->channel_id, true);
1587 
1588 	usleep_range(USEC_PER_MSEC, 2 * USEC_PER_MSEC);
1589 
1590 	goto out_suspend_again;
1591 
1592 err_endpoint_stop:
1593 	(void)gsi_channel_stop(gsi, endpoint->channel_id);
1594 out_suspend_again:
1595 	if (suspended)
1596 		(void)ipa_endpoint_program_suspend(endpoint, true);
1597 	dma_unmap_single(dev, addr, len, DMA_FROM_DEVICE);
1598 out_kfree:
1599 	kfree(virt);
1600 
1601 	return ret;
1602 }
1603 
1604 static void ipa_endpoint_reset(struct ipa_endpoint *endpoint)
1605 {
1606 	u32 channel_id = endpoint->channel_id;
1607 	struct ipa *ipa = endpoint->ipa;
1608 	bool special;
1609 	int ret = 0;
1610 
1611 	/* On IPA v3.5.1, if an RX endpoint is reset while aggregation
1612 	 * is active, we need to handle things specially to recover.
1613 	 * All other cases just need to reset the underlying GSI channel.
1614 	 */
1615 	special = ipa->version < IPA_VERSION_4_0 && !endpoint->toward_ipa &&
1616 			endpoint->config.aggregation;
1617 	if (special && ipa_endpoint_aggr_active(endpoint))
1618 		ret = ipa_endpoint_reset_rx_aggr(endpoint);
1619 	else
1620 		gsi_channel_reset(&ipa->gsi, channel_id, true);
1621 
1622 	if (ret)
1623 		dev_err(&ipa->pdev->dev,
1624 			"error %d resetting channel %u for endpoint %u\n",
1625 			ret, endpoint->channel_id, endpoint->endpoint_id);
1626 }
1627 
1628 static void ipa_endpoint_program(struct ipa_endpoint *endpoint)
1629 {
1630 	if (endpoint->toward_ipa) {
1631 		/* Newer versions of IPA use GSI channel flow control
1632 		 * instead of endpoint DELAY mode to prevent sending data.
1633 		 * Flow control is disabled for newly-allocated channels,
1634 		 * and we can assume flow control is not (ever) enabled
1635 		 * for AP TX channels.
1636 		 */
1637 		if (endpoint->ipa->version < IPA_VERSION_4_2)
1638 			ipa_endpoint_program_delay(endpoint, false);
1639 	} else {
1640 		/* Ensure suspend mode is off on all AP RX endpoints */
1641 		(void)ipa_endpoint_program_suspend(endpoint, false);
1642 	}
1643 	ipa_endpoint_init_cfg(endpoint);
1644 	ipa_endpoint_init_nat(endpoint);
1645 	ipa_endpoint_init_hdr(endpoint);
1646 	ipa_endpoint_init_hdr_ext(endpoint);
1647 	ipa_endpoint_init_hdr_metadata_mask(endpoint);
1648 	ipa_endpoint_init_mode(endpoint);
1649 	ipa_endpoint_init_aggr(endpoint);
1650 	if (!endpoint->toward_ipa) {
1651 		if (endpoint->config.rx.holb_drop)
1652 			ipa_endpoint_init_hol_block_enable(endpoint, 0);
1653 		else
1654 			ipa_endpoint_init_hol_block_disable(endpoint);
1655 	}
1656 	ipa_endpoint_init_deaggr(endpoint);
1657 	ipa_endpoint_init_rsrc_grp(endpoint);
1658 	ipa_endpoint_init_seq(endpoint);
1659 	ipa_endpoint_status(endpoint);
1660 }
1661 
1662 int ipa_endpoint_enable_one(struct ipa_endpoint *endpoint)
1663 {
1664 	struct ipa *ipa = endpoint->ipa;
1665 	struct gsi *gsi = &ipa->gsi;
1666 	int ret;
1667 
1668 	ret = gsi_channel_start(gsi, endpoint->channel_id);
1669 	if (ret) {
1670 		dev_err(&ipa->pdev->dev,
1671 			"error %d starting %cX channel %u for endpoint %u\n",
1672 			ret, endpoint->toward_ipa ? 'T' : 'R',
1673 			endpoint->channel_id, endpoint->endpoint_id);
1674 		return ret;
1675 	}
1676 
1677 	if (!endpoint->toward_ipa) {
1678 		ipa_interrupt_suspend_enable(ipa->interrupt,
1679 					     endpoint->endpoint_id);
1680 		ipa_endpoint_replenish_enable(endpoint);
1681 	}
1682 
1683 	ipa->enabled |= BIT(endpoint->endpoint_id);
1684 
1685 	return 0;
1686 }
1687 
1688 void ipa_endpoint_disable_one(struct ipa_endpoint *endpoint)
1689 {
1690 	u32 mask = BIT(endpoint->endpoint_id);
1691 	struct ipa *ipa = endpoint->ipa;
1692 	struct gsi *gsi = &ipa->gsi;
1693 	int ret;
1694 
1695 	if (!(ipa->enabled & mask))
1696 		return;
1697 
1698 	ipa->enabled ^= mask;
1699 
1700 	if (!endpoint->toward_ipa) {
1701 		ipa_endpoint_replenish_disable(endpoint);
1702 		ipa_interrupt_suspend_disable(ipa->interrupt,
1703 					      endpoint->endpoint_id);
1704 	}
1705 
1706 	/* Note that if stop fails, the channel's state is not well-defined */
1707 	ret = gsi_channel_stop(gsi, endpoint->channel_id);
1708 	if (ret)
1709 		dev_err(&ipa->pdev->dev,
1710 			"error %d attempting to stop endpoint %u\n", ret,
1711 			endpoint->endpoint_id);
1712 }
1713 
1714 void ipa_endpoint_suspend_one(struct ipa_endpoint *endpoint)
1715 {
1716 	struct device *dev = &endpoint->ipa->pdev->dev;
1717 	struct gsi *gsi = &endpoint->ipa->gsi;
1718 	int ret;
1719 
1720 	if (!(endpoint->ipa->enabled & BIT(endpoint->endpoint_id)))
1721 		return;
1722 
1723 	if (!endpoint->toward_ipa) {
1724 		ipa_endpoint_replenish_disable(endpoint);
1725 		(void)ipa_endpoint_program_suspend(endpoint, true);
1726 	}
1727 
1728 	ret = gsi_channel_suspend(gsi, endpoint->channel_id);
1729 	if (ret)
1730 		dev_err(dev, "error %d suspending channel %u\n", ret,
1731 			endpoint->channel_id);
1732 }
1733 
1734 void ipa_endpoint_resume_one(struct ipa_endpoint *endpoint)
1735 {
1736 	struct device *dev = &endpoint->ipa->pdev->dev;
1737 	struct gsi *gsi = &endpoint->ipa->gsi;
1738 	int ret;
1739 
1740 	if (!(endpoint->ipa->enabled & BIT(endpoint->endpoint_id)))
1741 		return;
1742 
1743 	if (!endpoint->toward_ipa)
1744 		(void)ipa_endpoint_program_suspend(endpoint, false);
1745 
1746 	ret = gsi_channel_resume(gsi, endpoint->channel_id);
1747 	if (ret)
1748 		dev_err(dev, "error %d resuming channel %u\n", ret,
1749 			endpoint->channel_id);
1750 	else if (!endpoint->toward_ipa)
1751 		ipa_endpoint_replenish_enable(endpoint);
1752 }
1753 
1754 void ipa_endpoint_suspend(struct ipa *ipa)
1755 {
1756 	if (!ipa->setup_complete)
1757 		return;
1758 
1759 	if (ipa->modem_netdev)
1760 		ipa_modem_suspend(ipa->modem_netdev);
1761 
1762 	ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]);
1763 	ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]);
1764 }
1765 
1766 void ipa_endpoint_resume(struct ipa *ipa)
1767 {
1768 	if (!ipa->setup_complete)
1769 		return;
1770 
1771 	ipa_endpoint_resume_one(ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]);
1772 	ipa_endpoint_resume_one(ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]);
1773 
1774 	if (ipa->modem_netdev)
1775 		ipa_modem_resume(ipa->modem_netdev);
1776 }
1777 
1778 static void ipa_endpoint_setup_one(struct ipa_endpoint *endpoint)
1779 {
1780 	struct gsi *gsi = &endpoint->ipa->gsi;
1781 	u32 channel_id = endpoint->channel_id;
1782 
1783 	/* Only AP endpoints get set up */
1784 	if (endpoint->ee_id != GSI_EE_AP)
1785 		return;
1786 
1787 	endpoint->skb_frag_max = gsi->channel[channel_id].trans_tre_max - 1;
1788 	if (!endpoint->toward_ipa) {
1789 		/* RX transactions require a single TRE, so the maximum
1790 		 * backlog is the same as the maximum outstanding TREs.
1791 		 */
1792 		clear_bit(IPA_REPLENISH_ENABLED, endpoint->replenish_flags);
1793 		clear_bit(IPA_REPLENISH_ACTIVE, endpoint->replenish_flags);
1794 		INIT_DELAYED_WORK(&endpoint->replenish_work,
1795 				  ipa_endpoint_replenish_work);
1796 	}
1797 
1798 	ipa_endpoint_program(endpoint);
1799 
1800 	endpoint->ipa->set_up |= BIT(endpoint->endpoint_id);
1801 }
1802 
1803 static void ipa_endpoint_teardown_one(struct ipa_endpoint *endpoint)
1804 {
1805 	endpoint->ipa->set_up &= ~BIT(endpoint->endpoint_id);
1806 
1807 	if (!endpoint->toward_ipa)
1808 		cancel_delayed_work_sync(&endpoint->replenish_work);
1809 
1810 	ipa_endpoint_reset(endpoint);
1811 }
1812 
1813 void ipa_endpoint_setup(struct ipa *ipa)
1814 {
1815 	u32 initialized = ipa->initialized;
1816 
1817 	ipa->set_up = 0;
1818 	while (initialized) {
1819 		u32 endpoint_id = __ffs(initialized);
1820 
1821 		initialized ^= BIT(endpoint_id);
1822 
1823 		ipa_endpoint_setup_one(&ipa->endpoint[endpoint_id]);
1824 	}
1825 }
1826 
1827 void ipa_endpoint_teardown(struct ipa *ipa)
1828 {
1829 	u32 set_up = ipa->set_up;
1830 
1831 	while (set_up) {
1832 		u32 endpoint_id = __fls(set_up);
1833 
1834 		set_up ^= BIT(endpoint_id);
1835 
1836 		ipa_endpoint_teardown_one(&ipa->endpoint[endpoint_id]);
1837 	}
1838 	ipa->set_up = 0;
1839 }
1840 
1841 int ipa_endpoint_config(struct ipa *ipa)
1842 {
1843 	struct device *dev = &ipa->pdev->dev;
1844 	const struct ipa_reg *reg;
1845 	u32 initialized;
1846 	u32 rx_base;
1847 	u32 rx_mask;
1848 	u32 tx_mask;
1849 	int ret = 0;
1850 	u32 max;
1851 	u32 val;
1852 
1853 	/* Prior to IPAv3.5, the FLAVOR_0 register was not supported.
1854 	 * Furthermore, the endpoints were not grouped such that TX
1855 	 * endpoint numbers started with 0 and RX endpoints had numbers
1856 	 * higher than all TX endpoints, so we can't do the simple
1857 	 * direction check used for newer hardware below.
1858 	 *
1859 	 * For hardware that doesn't support the FLAVOR_0 register,
1860 	 * just set the available mask to support any endpoint, and
1861 	 * assume the configuration is valid.
1862 	 */
1863 	if (ipa->version < IPA_VERSION_3_5) {
1864 		ipa->available = ~0;
1865 		return 0;
1866 	}
1867 
1868 	/* Find out about the endpoints supplied by the hardware, and ensure
1869 	 * the highest one doesn't exceed the number we support.
1870 	 */
1871 	reg = ipa_reg(ipa, FLAVOR_0);
1872 	val = ioread32(ipa->reg_virt + ipa_reg_offset(reg));
1873 
1874 	/* Our RX is an IPA producer */
1875 	rx_base = ipa_reg_decode(reg, PROD_LOWEST, val);
1876 	max = rx_base + ipa_reg_decode(reg, MAX_PROD_PIPES, val);
1877 	if (max > IPA_ENDPOINT_MAX) {
1878 		dev_err(dev, "too many endpoints (%u > %u)\n",
1879 			max, IPA_ENDPOINT_MAX);
1880 		return -EINVAL;
1881 	}
1882 	rx_mask = GENMASK(max - 1, rx_base);
1883 
1884 	/* Our TX is an IPA consumer */
1885 	max = ipa_reg_decode(reg, MAX_CONS_PIPES, val);
1886 	tx_mask = GENMASK(max - 1, 0);
1887 
1888 	ipa->available = rx_mask | tx_mask;
1889 
1890 	/* Check for initialized endpoints not supported by the hardware */
1891 	if (ipa->initialized & ~ipa->available) {
1892 		dev_err(dev, "unavailable endpoint id(s) 0x%08x\n",
1893 			ipa->initialized & ~ipa->available);
1894 		ret = -EINVAL;		/* Report other errors too */
1895 	}
1896 
1897 	initialized = ipa->initialized;
1898 	while (initialized) {
1899 		u32 endpoint_id = __ffs(initialized);
1900 		struct ipa_endpoint *endpoint;
1901 
1902 		initialized ^= BIT(endpoint_id);
1903 
1904 		/* Make sure it's pointing in the right direction */
1905 		endpoint = &ipa->endpoint[endpoint_id];
1906 		if ((endpoint_id < rx_base) != endpoint->toward_ipa) {
1907 			dev_err(dev, "endpoint id %u wrong direction\n",
1908 				endpoint_id);
1909 			ret = -EINVAL;
1910 		}
1911 	}
1912 
1913 	return ret;
1914 }
1915 
1916 void ipa_endpoint_deconfig(struct ipa *ipa)
1917 {
1918 	ipa->available = 0;	/* Nothing more to do */
1919 }
1920 
1921 static void ipa_endpoint_init_one(struct ipa *ipa, enum ipa_endpoint_name name,
1922 				  const struct ipa_gsi_endpoint_data *data)
1923 {
1924 	struct ipa_endpoint *endpoint;
1925 
1926 	endpoint = &ipa->endpoint[data->endpoint_id];
1927 
1928 	if (data->ee_id == GSI_EE_AP)
1929 		ipa->channel_map[data->channel_id] = endpoint;
1930 	ipa->name_map[name] = endpoint;
1931 
1932 	endpoint->ipa = ipa;
1933 	endpoint->ee_id = data->ee_id;
1934 	endpoint->channel_id = data->channel_id;
1935 	endpoint->endpoint_id = data->endpoint_id;
1936 	endpoint->toward_ipa = data->toward_ipa;
1937 	endpoint->config = data->endpoint.config;
1938 
1939 	ipa->initialized |= BIT(endpoint->endpoint_id);
1940 }
1941 
1942 static void ipa_endpoint_exit_one(struct ipa_endpoint *endpoint)
1943 {
1944 	endpoint->ipa->initialized &= ~BIT(endpoint->endpoint_id);
1945 
1946 	memset(endpoint, 0, sizeof(*endpoint));
1947 }
1948 
1949 void ipa_endpoint_exit(struct ipa *ipa)
1950 {
1951 	u32 initialized = ipa->initialized;
1952 
1953 	while (initialized) {
1954 		u32 endpoint_id = __fls(initialized);
1955 
1956 		initialized ^= BIT(endpoint_id);
1957 
1958 		ipa_endpoint_exit_one(&ipa->endpoint[endpoint_id]);
1959 	}
1960 	memset(ipa->name_map, 0, sizeof(ipa->name_map));
1961 	memset(ipa->channel_map, 0, sizeof(ipa->channel_map));
1962 }
1963 
1964 /* Returns a bitmask of endpoints that support filtering, or 0 on error */
1965 u32 ipa_endpoint_init(struct ipa *ipa, u32 count,
1966 		      const struct ipa_gsi_endpoint_data *data)
1967 {
1968 	enum ipa_endpoint_name name;
1969 	u32 filter_map;
1970 
1971 	BUILD_BUG_ON(!IPA_REPLENISH_BATCH);
1972 
1973 	if (!ipa_endpoint_data_valid(ipa, count, data))
1974 		return 0;	/* Error */
1975 
1976 	ipa->initialized = 0;
1977 
1978 	filter_map = 0;
1979 	for (name = 0; name < count; name++, data++) {
1980 		if (ipa_gsi_endpoint_data_empty(data))
1981 			continue;	/* Skip over empty slots */
1982 
1983 		ipa_endpoint_init_one(ipa, name, data);
1984 
1985 		if (data->endpoint.filter_support)
1986 			filter_map |= BIT(data->endpoint_id);
1987 		if (data->ee_id == GSI_EE_MODEM && data->toward_ipa)
1988 			ipa->modem_tx_count++;
1989 	}
1990 
1991 	if (!ipa_filter_map_valid(ipa, filter_map))
1992 		goto err_endpoint_exit;
1993 
1994 	return filter_map;	/* Non-zero bitmask */
1995 
1996 err_endpoint_exit:
1997 	ipa_endpoint_exit(ipa);
1998 
1999 	return 0;	/* Error */
2000 }
2001