/Linux-v5.15/drivers/net/ipa/ |
D | ipa_main.c | 22 #include "ipa.h" 40 * This driver supports the Qualcomm IP Accelerator (IPA), which is a 41 * networking component found in many Qualcomm SoCs. The IPA is connected 45 * The IPA is the conduit between the AP and the modem that carries network 49 * The IPA provides protocol checksum calculation, offloading this work 50 * from the AP. The IPA offers additional functionality, including routing, 56 * There are two distinct layers that implement the IPA hardware, and this 58 * interface (GSI) is an integral component of the IPA, providing a 59 * well-defined communication layer between the AP subsystem and the IPA 61 * between the AP and the IPA. [all …]
|
D | ipa_interrupt.c | 7 /* DOC: IPA Interrupts 9 * The IPA has an interrupt line distinct from the interrupt used by the GSI 11 * transfer completions), IPA interrupts are related to other events related 12 * to the IPA. Some of the IPA interrupts come from a microcontroller 13 * embedded in the IPA. Each IPA interrupt type can be both masked and 16 * Two of the IPA interrupts are initiated by the microcontroller. A third 17 * can be generated to signal the need for a wakeup/resume when an IPA 18 * endpoint has been suspended. There are other IPA events, but at this 26 #include "ipa.h" 32 * struct ipa_interrupt - IPA interrupt information [all …]
|
D | ipa_mem.c | 15 #include "ipa.h" 29 const struct ipa_mem *ipa_mem_find(struct ipa *ipa, enum ipa_mem_id mem_id) in ipa_mem_find() argument 33 for (i = 0; i < ipa->mem_count; i++) { in ipa_mem_find() 34 const struct ipa_mem *mem = &ipa->mem[i]; in ipa_mem_find() 47 struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi); in ipa_mem_zero_region_add() local 48 const struct ipa_mem *mem = ipa_mem_find(ipa, mem_id); in ipa_mem_zero_region_add() 49 dma_addr_t addr = ipa->zero_addr; in ipa_mem_zero_region_add() 58 * ipa_mem_setup() - Set up IPA AP and modem shared memory areas 59 * @ipa: IPA pointer 61 * Set up the shared memory regions in IPA local memory. This involves [all …]
|
D | ipa_modem.c | 15 #include "ipa.h" 38 * struct ipa_priv - IPA network device private data 39 * @ipa: IPA pointer 43 struct ipa *ipa; member 51 struct ipa *ipa = priv->ipa; in ipa_open() local 55 dev = &ipa->pdev->dev; in ipa_open() 60 ret = ipa_endpoint_enable_one(ipa->name_map[IPA_ENDPOINT_AP_MODEM_TX]); in ipa_open() 64 ret = ipa_endpoint_enable_one(ipa->name_map[IPA_ENDPOINT_AP_MODEM_RX]); in ipa_open() 76 ipa_endpoint_disable_one(ipa->name_map[IPA_ENDPOINT_AP_MODEM_TX]); in ipa_open() 87 struct ipa *ipa = priv->ipa; in ipa_stop() local [all …]
|
D | ipa_table.h | 11 struct ipa; 21 * @ipa: IPA pointer 25 bool ipa_table_valid(struct ipa *ipa); 29 * @ipa: IPA pointer 34 bool ipa_filter_map_valid(struct ipa *ipa, u32 filter_mask); 38 * @ipa: IPA pointer 40 static inline bool ipa_table_hash_support(struct ipa *ipa) in ipa_table_hash_support() argument 42 return ipa->version != IPA_VERSION_4_2; in ipa_table_hash_support() 47 * @ipa: IPA pointer 50 void ipa_table_reset(struct ipa *ipa, bool modem); [all …]
|
D | ipa_power.c | 14 #include "ipa.h" 21 * DOC: IPA Power Management 23 * The IPA hardware is enabled when the IPA core clock and all the 36 * struct ipa_interconnect - IPA interconnect information 48 * enum ipa_power_flag - IPA power flags 64 * struct ipa_power - IPA power management information 65 * @dev: IPA device pointer 66 * @core: IPA core clock 110 /* Initialize interconnects required for IPA operation */ 155 static int ipa_interconnect_enable(struct ipa *ipa) in ipa_interconnect_enable() argument [all …]
|
D | ipa_power.h | 11 struct ipa; 14 /* IPA device power management function block */ 18 * ipa_core_clock_rate() - Return the current IPA core clock rate 19 * @ipa: IPA structure 23 u32 ipa_core_clock_rate(struct ipa *ipa); 27 * @ipa: IPA pointer 29 void ipa_power_modem_queue_stop(struct ipa *ipa); 33 * @ipa: IPA pointer 35 void ipa_power_modem_queue_wake(struct ipa *ipa); 39 * @ipa: IPA pointer [all …]
|
D | ipa_endpoint.h | 19 struct ipa; 44 * struct ipa_endpoint - IPA endpoint information 45 * @ipa: IPA pointer 48 * @endpoint_id: IPA endpoint number 61 struct ipa *ipa; member 82 void ipa_endpoint_modem_hol_block_clear_all(struct ipa *ipa); 84 void ipa_endpoint_modem_pause_all(struct ipa *ipa, bool enable); 86 int ipa_endpoint_modem_exception_reset_all(struct ipa *ipa); 96 void ipa_endpoint_suspend(struct ipa *ipa); 97 void ipa_endpoint_resume(struct ipa *ipa); [all …]
|
D | ipa_cmd.c | 15 #include "ipa.h" 22 * DOC: IPA Immediate Commands 24 * The AP command TX endpoint is used to issue immediate commands to the IPA. 25 * An immediate command is generally used to request the IPA do something 74 /* For IPA v4.0+, the pipeline clear options are encoded in the opcode */ 79 __le16 flags; /* Unused/reserved prior to IPA v4.0 */ 83 __le32 clear_options; /* Unused/reserved for IPA v4.0+ */ 87 /* The next field is present for IPA v4.0+ */ 89 /* The next field is not present for IPA v4.0+ */ 92 /* The next field and its values are not present for IPA v4.0+ */ [all …]
|
D | ipa_table.c | 17 #include "ipa.h" 28 * DOC: IPA Filter and Route Tables 30 * The IPA has tables defined in its local (IPA-resident) memory that define 38 * by all IPA hardware (IPA v4.2 doesn't support hashed tables). 41 * an object (such as a route or filter table) in IPA-resident memory must 59 * for endpoint 2, and so on. Space is set aside in IPA local memory to 66 * IPA filtering functionality. 68 * IPA Filter Table 87 * though the AP currently does not use the IPA routing functionality. 89 * IPA Route Table [all …]
|
D | ipa_uc.c | 12 #include "ipa.h" 16 * DOC: The IPA embedded microcontroller 18 * The IPA incorporates a microcontroller that is able to do some additional 28 * A 128 byte block of structured memory within the IPA SRAM is used together 30 * AP and the IPA microcontroller. Each side writes data to the shared area 63 * A shared memory area at the base of IPA resident memory is used for 117 static struct ipa_uc_mem_area *ipa_uc_shared(struct ipa *ipa) in ipa_uc_shared() argument 119 const struct ipa_mem *mem = ipa_mem_find(ipa, IPA_MEM_UC_SHARED); in ipa_uc_shared() 120 u32 offset = ipa->mem_offset + mem->offset; in ipa_uc_shared() 122 return ipa->mem_virt + offset; in ipa_uc_shared() [all …]
|
D | ipa_endpoint.c | 16 #include "ipa.h" 78 static bool ipa_endpoint_data_valid_one(struct ipa *ipa, u32 count, in ipa_endpoint_data_valid_one() argument 83 struct device *dev = &ipa->pdev->dev; in ipa_endpoint_data_valid_one() 167 static bool ipa_endpoint_data_valid(struct ipa *ipa, u32 count, in ipa_endpoint_data_valid() argument 171 struct device *dev = &ipa->pdev->dev; in ipa_endpoint_data_valid() 183 * IPA hardware as a number of KB. We don't use "hard byte in ipa_endpoint_data_valid() 193 limit = aggr_byte_limit_max(ipa->version) * SZ_1K; in ipa_endpoint_data_valid() 220 if (!ipa_endpoint_data_valid_one(ipa, count, data, dp)) in ipa_endpoint_data_valid() 230 struct gsi *gsi = &endpoint->ipa->gsi; in ipa_endpoint_trans_alloc() 240 * Note that suspend is not supported starting with IPA v4.0. [all …]
|
D | ipa_interrupt.h | 12 struct ipa; 16 * typedef ipa_irq_handler_t - IPA interrupt handler function type 17 * @ipa: IPA pointer 21 * IPA interrupt type 23 typedef void (*ipa_irq_handler_t)(struct ipa *ipa, enum ipa_irq_id irq_id); 26 * ipa_interrupt_add() - Register a handler for an IPA interrupt type 27 * @interrupt: IPA interrupt structure 28 * @irq_id: IPA interrupt type 31 * Add a handler for an IPA interrupt and enable it. IPA interrupt 39 * ipa_interrupt_remove() - Remove the handler for an IPA interrupt type [all …]
|
D | ipa_smp2p.c | 17 #include "ipa.h" 21 * DOC: IPA SMP2P communication with the modem 24 * the modem. The IPA driver uses this for two purposes: to enable the modem 26 * state of IPA power in the event of a crash. 30 * latter case, the modem uses an SMP2P interrupt to tell the AP IPA driver 33 * The modem is also able to inquire about the current state of IPA 38 * at that time records whether the AP has IPA power enabled. 45 * struct ipa_smp2p - IPA SMP2P information 46 * @ipa: IPA pointer 52 * @clock_query_irq: IPA interrupt triggered by modem for power query [all …]
|
D | ipa_mem.h | 9 struct ipa; 13 * DOC: IPA Local Memory 15 * The IPA has a block of shared memory, divided into regions used for 19 * the "ipa-shared" memory range) and size found in the IPA_SHARED_MEM_SIZE 25 * of canaries for all IPA hardware versions. Still, the number used is 44 /* IPA-resident memory region ids */ 62 IPA_MEM_PDN_CONFIG, /* 0/2 canaries (IPA v4.0+) */ 63 IPA_MEM_STATS_QUOTA_MODEM, /* 2/4 canaries (IPA v4.0+) */ 64 IPA_MEM_STATS_QUOTA_AP, /* 0 canaries, optional (IPA v4.0+) */ 65 IPA_MEM_STATS_TETHERING, /* 0 canaries (IPA v4.0+) */ [all …]
|
D | ipa_qmi.c | 13 #include "ipa.h" 28 * complete, the AP and modem may begin IPA operation. This occurs 29 * only when the AP IPA driver, modem IPA driver, and IPA microcontroller 36 * contains a success result, the AP knows the modem IPA driver is ready. 38 * The modem is responsible for loading firmware on the IPA microcontroller. 53 * - Whenever the AP learns the modem has booted and its IPA QMI service 56 * - On the initial boot, the modem sets up the IPA microcontroller, and 86 struct ipa *ipa = container_of(ipa_qmi, struct ipa, qmi); in ipa_server_init_complete() local 99 dev_err(&ipa->pdev->dev, in ipa_server_init_complete() 118 * We know everything (else) is ready when we know the IPA driver on [all …]
|
D | ipa_cmd.h | 15 struct ipa; 21 * enum ipa_cmd_opcode: IPA immediate commands 27 * @IPA_CMD_HDR_INIT_LOCAL: Initialize IPA-local header memory 28 * @IPA_CMD_REGISTER_WRITE: Register write performed by IPA 30 * @IPA_CMD_DMA_SHARED_MEM: DMA command performed by IPA 50 * struct ipa_cmd_info - information needed for an IPA immediate command 62 * @ipa: - IPA pointer 63 * @mem: - IPA memory region descriptor 68 bool ipa_cmd_table_valid(struct ipa *ipa, const struct ipa_mem *mem, 73 * @ipa: - IPA pointer [all …]
|
D | ipa_smp2p.h | 11 struct ipa; 14 * ipa_smp2p_init() - Initialize the IPA SMP2P subsystem 15 * @ipa: IPA pointer 21 int ipa_smp2p_init(struct ipa *ipa, bool modem_init); 25 * @ipa: IPA pointer 27 void ipa_smp2p_exit(struct ipa *ipa); 30 * ipa_smp2p_disable() - Prevent "ipa-setup-ready" interrupt handling 31 * @ipa: IPA pointer 36 void ipa_smp2p_disable(struct ipa *ipa); 40 * @ipa: IPA pointer [all …]
|
D | ipa_uc.h | 9 struct ipa; 12 * ipa_uc_config() - Configure the IPA microcontroller subsystem 13 * @ipa: IPA pointer 15 void ipa_uc_config(struct ipa *ipa); 19 * @ipa: IPA pointer 21 void ipa_uc_deconfig(struct ipa *ipa); 25 * @ipa: IPA pointer 28 * IPA-resident microcontroller. The microcontroller signals that it 30 * message to the AP. The AP must ensure the IPA is powered until 35 void ipa_uc_power(struct ipa *ipa); [all …]
|
D | ipa_sysfs.c | 10 #include "ipa.h" 14 static const char *ipa_version_string(struct ipa *ipa) in ipa_version_string() argument 16 switch (ipa->version) { in ipa_version_string() 47 struct ipa *ipa = dev_get_drvdata(dev); in version_show() local 49 return scnprintf(buf, PAGE_SIZE, "%s\n", ipa_version_string(ipa)); in version_show() 63 static const char *ipa_offload_string(struct ipa *ipa) in ipa_offload_string() argument 65 return ipa->version < IPA_VERSION_4_5 ? "MAPv4" : "MAPv5"; in ipa_offload_string() 71 struct ipa *ipa = dev_get_drvdata(dev); in rx_offload_show() local 73 return scnprintf(buf, PAGE_SIZE, "%s\n", ipa_offload_string(ipa)); in rx_offload_show() 81 struct ipa *ipa = dev_get_drvdata(dev); in tx_offload_show() local [all …]
|
D | ipa_gsi.c | 11 #include "ipa.h" 17 struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi); in ipa_gsi_trans_complete() local 19 ipa_endpoint_trans_complete(ipa->channel_map[trans->channel_id], trans); in ipa_gsi_trans_complete() 24 struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi); in ipa_gsi_trans_release() local 26 ipa_endpoint_trans_release(ipa->channel_map[trans->channel_id], trans); in ipa_gsi_trans_release() 32 struct ipa *ipa = container_of(gsi, struct ipa, gsi); in ipa_gsi_channel_tx_queued() local 35 endpoint = ipa->channel_map[channel_id]; in ipa_gsi_channel_tx_queued() 43 struct ipa *ipa = container_of(gsi, struct ipa, gsi); in ipa_gsi_channel_tx_completed() local 46 endpoint = ipa->channel_map[channel_id]; in ipa_gsi_channel_tx_completed()
|
D | ipa.h | 31 * struct ipa - IPA information 33 * @version: IPA hardware version 39 * @power: IPA power information 42 * @interrupt: IPA Interrupt information 45 * @reg_addr: DMA address used for IPA register access 46 * @reg_virt: Virtual address used for IPA register access 47 * @mem_addr: DMA address of IPA-local memory space 48 * @mem_virt: Virtual address of IPA-local memory space 49 * @mem_offset: Offset from @mem_virt used for access to IPA memory 52 * @mem: Array of IPA-local memory region descriptors [all …]
|
D | ipa_resource.c | 10 #include "ipa.h" 16 * DOC: IPA Resources 18 * The IPA manages a set of resources internally for various purposes. 19 * A given IPA version has a fixed number of resource types, and a fixed 23 * Each version of IPA also has some number of resource groups. Each 29 static bool ipa_resource_limits_valid(struct ipa *ipa, in ipa_resource_limits_valid() argument 72 ipa_resource_config_common(struct ipa *ipa, u32 offset, in ipa_resource_config_common() argument 85 iowrite32(val, ipa->reg_virt + offset); in ipa_resource_config_common() 88 static void ipa_resource_config_src(struct ipa *ipa, u32 resource_type, in ipa_resource_config_src() argument 100 ipa_resource_config_common(ipa, offset, &resource->limits[0], ylimits); in ipa_resource_config_src() [all …]
|
/Linux-v5.15/Documentation/devicetree/bindings/net/ |
D | qcom,ipa.yaml | 4 $id: http://devicetree.org/schemas/net/qcom,ipa.yaml# 7 title: Qualcomm IP Accelerator (IPA) 13 This binding describes the Qualcomm IPA. The IPA is capable of offloading 17 The IPA sits between multiple independent "execution environments," 18 including the Application Processor (AP) and the modem. The IPA presents 20 The GSI is an integral part of the IPA, but it is logically isolated 40 | IPA | 47 - qcom,msm8998-ipa 48 - qcom,sc7180-ipa 49 - qcom,sc7280-ipa [all …]
|
/Linux-v5.15/Documentation/ABI/testing/ |
D | sysfs-devices-platform-soc-ipa | 1 What: /sys/devices/platform/soc@X/XXXXXXX.ipa/ 6 The /sys/devices/platform/soc@X/XXXXXXX.ipa/ directory 8 an IPA device. The X values could vary, but are typically 9 "soc@0/1e40000.ipa". 11 What: .../XXXXXXX.ipa/version 16 The .../XXXXXXX.ipa/version file contains the IPA hardware 20 What: .../XXXXXXX.ipa/feature/ 25 The .../XXXXXXX.ipa/feature/ directory contains a set of 26 attributes describing features implemented by the IPA 29 What: .../XXXXXXX.ipa/feature/rx_offload [all …]
|