/openbmc/linux/drivers/net/ipa/ |
H A 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 27 #include "ipa.h" 35 * struct ipa_interrupt - IPA interrupt information [all …]
|
H A D | ipa_main.c | 22 #include "ipa.h" 41 * This driver supports the Qualcomm IP Accelerator (IPA), which is a 42 * networking component found in many Qualcomm SoCs. The IPA is connected 46 * The IPA is the conduit between the AP and the modem that carries network 50 * The IPA provides protocol checksum calculation, offloading this work 51 * from the AP. The IPA offers additional functionality, including routing, 57 * There are two distinct layers that implement the IPA hardware, and this 59 * interface (GSI) is an integral component of the IPA, providing a 60 * well-defined communication layer between the AP subsystem and the IPA 62 * between the AP and the IPA. [all …]
|
H A 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 …]
|
H A D | ipa_power.h | 11 struct ipa; 15 /* IPA device power management function block */ 19 * ipa_core_clock_rate() - Return the current IPA core clock rate 20 * @ipa: IPA structure 24 u32 ipa_core_clock_rate(struct ipa *ipa); 28 * @ipa: IPA pointer 30 void ipa_power_modem_queue_stop(struct ipa *ipa); 34 * @ipa: IPA pointer 36 void ipa_power_modem_queue_wake(struct ipa *ipa); 40 * @ipa: IPA pointer [all …]
|
H A D | ipa_table.h | 11 struct ipa; 15 * @ipa: IPA pointer 20 bool ipa_filtered_valid(struct ipa *ipa, u64 filtered); 24 * @ipa: IPA pointer 26 static inline bool ipa_table_hash_support(struct ipa *ipa) in ipa_table_hash_support() argument 28 return ipa->version != IPA_VERSION_4_2; in ipa_table_hash_support() 33 * @ipa: IPA pointer 36 void ipa_table_reset(struct ipa *ipa, bool modem); 40 * @ipa: IPA pointer 42 int ipa_table_hash_flush(struct ipa *ipa); [all …]
|
H A D | ipa_interrupt.h | 12 struct ipa; 18 * @interrupt: IPA interrupt structure 21 * Note: The "TX" in the name is from the perspective of the IPA hardware. 31 * @interrupt: IPA interrupt structure 39 * @interrupt: IPA interrupt structure 46 * ipa_interrupt_simulate_suspend() - Simulate TX_SUSPEND IPA interrupt 47 * @interrupt: IPA interrupt structure 57 * ipa_interrupt_enable() - Enable an IPA interrupt type 58 * @ipa: IPA pointer 59 * @ipa_irq: IPA interrupt ID [all …]
|
H A D | ipa_modem.c | 17 #include "ipa.h" 40 * struct ipa_priv - IPA network device private data 41 * @ipa: IPA pointer 45 struct ipa *ipa; member 53 struct ipa *ipa = priv->ipa; in ipa_open() local 57 dev = &ipa->pdev->dev; in ipa_open() 62 ret = ipa_endpoint_enable_one(ipa->name_map[IPA_ENDPOINT_AP_MODEM_TX]); in ipa_open() 66 ret = ipa_endpoint_enable_one(ipa->name_map[IPA_ENDPOINT_AP_MODEM_RX]); in ipa_open() 78 ipa_endpoint_disable_one(ipa->name_map[IPA_ENDPOINT_AP_MODEM_TX]); in ipa_open() 89 struct ipa *ipa = priv->ipa; in ipa_stop() local [all …]
|
H A D | ipa_endpoint.c | 16 #include "ipa.h" 37 /** enum ipa_status_opcode - IPA status opcode field hardware values */ 48 /** enum ipa_status_exception - IPA status exception field hardware values */ 64 /** enum ipa_status_mask - IPA status mask field bitmask hardware values */ 84 /* Special IPA filter/router rule field value indicating "rule miss" */ 87 /** The IPA status nat_type field uses enum ipa_nat_type hardware values */ 89 /* enum ipa_status_field_id - IPA packet status structure field identifiers */ 121 /* Size in bytes of an IPA packet status structure */ 124 /* IPA status structure decoder; looks up field values for a structure */ 125 static u32 ipa_status_extract(struct ipa *ipa, const void *data, in ipa_status_extract() argument [all …]
|
H A 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 55 * address of a filter rule in the memory following the bitmap. Until IPA 61 * removed starting at IPA v5.0. For IPA v5.0+, the endpoint bitmap 63 * bitmap, endpoint 1 has a filter rule. Older versions of IPA represent 75 * endpoints they "own" directly. Currently the AP does not use the IPA 79 * bitmap as defined prior to IPA v5.0. [all …]
|
H A 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 73 /* For IPA v4.0+, the pipeline clear options are encoded in the opcode */ 78 __le16 flags; /* Unused/reserved prior to IPA v4.0 */ 82 __le32 clear_options; /* Unused/reserved for IPA v4.0+ */ 86 /* The next field is present for IPA v4.0+ */ 88 /* The next field is not present for IPA v4.0+ */ 91 /* The next field and its values are not present for IPA v4.0+ */ [all …]
|
H A D | ipa_uc.c | 12 #include "ipa.h" 17 * DOC: The IPA embedded microcontroller 19 * The IPA incorporates a microcontroller that is able to do some additional 29 * A 128 byte block of structured memory within the IPA SRAM is used together 31 * AP and the IPA microcontroller. Each side writes data to the shared area 64 * A shared memory area at the base of IPA resident memory is used for 118 static struct ipa_uc_mem_area *ipa_uc_shared(struct ipa *ipa) in ipa_uc_shared() argument 120 const struct ipa_mem *mem = ipa_mem_find(ipa, IPA_MEM_UC_SHARED); in ipa_uc_shared() 121 u32 offset = ipa->mem_offset + mem->offset; in ipa_uc_shared() 123 return ipa->mem_virt + offset; in ipa_uc_shared() [all …]
|
H A D | ipa_reg.h | 15 struct ipa; 18 * DOC: IPA Registers 20 * IPA registers are located within the "ipa-reg" address space defined by 24 * All IPA registers are 32 bits wide. 27 * instances of something. For example, each IPA endpoint has an set of 35 * Each version of IPA implements an array of ipa_reg structures indexed 38 * of IPA define all registers. The offset for a register is returned by 55 /* enum ipa_reg_id - IPA register IDs */ 63 FILT_ROUT_HASH_EN, /* IPA v4.2 */ 64 FILT_ROUT_HASH_FLUSH, /* Not IPA v4.2 nor IPA v5.0+ */ [all …]
|
H A D | ipa_uc.h | 9 struct ipa; 13 * ipa_uc_interrupt_handler() - Handler for microcontroller IPA interrupts 14 * @ipa: IPA pointer 15 * @irq_id: IPA interrupt ID 17 void ipa_uc_interrupt_handler(struct ipa *ipa, enum ipa_irq_id irq_id); 20 * ipa_uc_config() - Configure the IPA microcontroller subsystem 21 * @ipa: IPA pointer 23 void ipa_uc_config(struct ipa *ipa); 27 * @ipa: IPA pointer 29 void ipa_uc_deconfig(struct ipa *ipa); [all …]
|
H A D | ipa_power.c | 16 #include "ipa.h" 23 * DOC: IPA Power Management 25 * The IPA hardware is enabled when the IPA core clock and all the 38 * enum ipa_power_flag - IPA power flags 54 * struct ipa_power - IPA power management information 55 * @dev: IPA device pointer 56 * @core: IPA core clock 73 /* Initialize interconnects required for IPA operation */ 114 /* Enable IPA power, enabling interconnects and the core clock */ 115 static int ipa_power_enable(struct ipa *ipa) in ipa_power_enable() argument [all …]
|
H A 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 …]
|
H A 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, optional (IPA v4.0+) */ [all …]
|
H A 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 …]
|
H A 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 51 * @ipa: - IPA pointer 52 * @mem: - IPA memory region descriptor 57 bool ipa_cmd_table_init_valid(struct ipa *ipa, const struct ipa_mem *mem, 62 * @ipa: - IPA pointer 66 bool ipa_cmd_data_valid(struct ipa *ipa); [all …]
|
H A D | ipa_endpoint.h | 19 struct ipa; 70 * With each packet it transfers, the IPA hardware can perform certain 99 * struct ipa_endpoint_config - IPA endpoint hardware configuration 138 * struct ipa_endpoint - IPA endpoint information 139 * @ipa: IPA pointer 142 * @endpoint_id: IPA endpoint number 153 struct ipa *ipa; member 172 void ipa_endpoint_modem_hol_block_clear_all(struct ipa *ipa); 174 void ipa_endpoint_modem_pause_all(struct ipa *ipa, bool enable); 176 int ipa_endpoint_modem_exception_reset_all(struct ipa *ipa); [all …]
|
H A 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); 31 * @ipa: IPA pointer 33 * Disable the "ipa-setup-ready" interrupt from the modem. 35 void ipa_smp2p_irq_disable_setup(struct ipa *ipa); 39 * @ipa: IPA pointer [all …]
|
H A 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 resource_type, in ipa_resource_config_common() argument 86 iowrite32(val, ipa->reg_virt + reg_n_offset(reg, resource_type)); in ipa_resource_config_common() 89 static void ipa_resource_config_src(struct ipa *ipa, u32 resource_type, in ipa_resource_config_src() argument 99 reg = ipa_reg(ipa, SRC_RSRC_GRP_01_RSRC_TYPE); in ipa_resource_config_src() [all …]
|
H A D | ipa_reg.c | 9 #include "ipa.h" 12 /* Is this register ID valid for the current IPA version? */ 13 static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id) in ipa_reg_id_valid() argument 15 enum ipa_version version = ipa->version; in ipa_reg_id_valid() 101 const struct reg *ipa_reg(struct ipa *ipa, enum ipa_reg_id reg_id) in ipa_reg() argument 103 if (WARN(!ipa_reg_id_valid(ipa, reg_id), "invalid reg %u\n", reg_id)) in ipa_reg() 106 return reg(ipa->regs, reg_id); in ipa_reg() 133 int ipa_reg_init(struct ipa *ipa) in ipa_reg_init() argument 135 struct device *dev = &ipa->pdev->dev; in ipa_reg_init() 139 regs = ipa_regs(ipa->version); in ipa_reg_init() [all …]
|
H A D | ipa_data.h | 16 * DOC: IPA/GSI Configuration Data 19 * IPA and GSI resources to use for a given platform. This data is supplied 25 * Resources are data structures used internally by the IPA hardware. The 29 * Endpoint configuration data defines properties of both IPA endpoints and 31 * communication path between the IPA and a particular execution environment 36 * An endpoint is an IPA construct representing a single channel anywhere 37 * in the system. An IPA endpoint ID maps directly to an (EE, channel_id) 40 * added. IPA endpoint and GSI channel configuration data are defined 44 * are common to IPA and GSI (EE ID, channel ID, endpoint ID, and direction); 46 * the IPA endpoint. [all …]
|
/openbmc/linux/Documentation/ABI/testing/ |
H A 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 …]
|
/openbmc/linux/Documentation/devicetree/bindings/net/ |
H A 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 …]
|