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