Lines Matching defs:ipa

15 #include "ipa.h"
33 struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi);
34 dma_addr_t addr = ipa->zero_addr;
44 * @ipa: IPA pointer
58 int ipa_mem_setup(struct ipa *ipa)
60 dma_addr_t addr = ipa->zero_addr;
68 trans = ipa_cmd_trans_alloc(ipa, 4);
70 dev_err(&ipa->pdev->dev, "no transaction for memory setup\n");
77 offset = ipa->mem[IPA_MEM_MODEM_HEADER].offset;
78 size = ipa->mem[IPA_MEM_MODEM_HEADER].size;
79 size += ipa->mem[IPA_MEM_AP_HEADER].size;
83 ipa_mem_zero_region_add(trans, &ipa->mem[IPA_MEM_MODEM_PROC_CTX]);
85 ipa_mem_zero_region_add(trans, &ipa->mem[IPA_MEM_AP_PROC_CTX]);
87 ipa_mem_zero_region_add(trans, &ipa->mem[IPA_MEM_MODEM]);
92 iowrite32(ipa->mem_offset + offset,
93 ipa->reg_virt + IPA_REG_LOCAL_PKT_PROC_CNTXT_BASE_OFFSET);
98 void ipa_mem_teardown(struct ipa *ipa)
105 static bool ipa_mem_valid(struct ipa *ipa, enum ipa_mem_id mem_id)
107 const struct ipa_mem *mem = &ipa->mem[mem_id];
108 struct device *dev = &ipa->pdev->dev;
121 else if (mem->offset + mem->size > ipa->mem_size)
123 mem_id, ipa->mem_size);
132 static bool ipa_mem_valid(struct ipa *ipa, enum ipa_mem_id mem_id)
141 * @ipa: IPA pointer
145 int ipa_mem_config(struct ipa *ipa)
147 struct device *dev = &ipa->pdev->dev;
155 val = ioread32(ipa->reg_virt + IPA_REG_SHARED_MEM_SIZE_OFFSET);
158 ipa->mem_offset = 8 * u32_get_bits(val, SHARED_MEM_BADDR_FMASK);
163 if (ipa->mem_offset + mem_size > ipa->mem_size) {
166 } else if (ipa->mem_offset + mem_size < ipa->mem_size) {
169 ipa->mem_size = mem_size;
176 ipa->zero_addr = addr;
177 ipa->zero_virt = virt;
178 ipa->zero_size = IPA_MEM_MAX;
184 for (mem_id = 0; mem_id < ipa->mem_count; mem_id++) {
185 const struct ipa_mem *mem = &ipa->mem[mem_id];
190 if (!ipa_mem_valid(ipa, mem_id))
202 canary = ipa->mem_virt + ipa->mem_offset + mem->offset;
209 if (!ipa_table_valid(ipa))
213 if (!ipa_cmd_data_valid(ipa))
217 if (ipa->mem[IPA_MEM_UC_EVENT_RING].offset % 1024) {
225 dma_free_coherent(dev, IPA_MEM_MAX, ipa->zero_virt, ipa->zero_addr);
231 void ipa_mem_deconfig(struct ipa *ipa)
233 struct device *dev = &ipa->pdev->dev;
235 dma_free_coherent(dev, ipa->zero_size, ipa->zero_virt, ipa->zero_addr);
236 ipa->zero_size = 0;
237 ipa->zero_virt = NULL;
238 ipa->zero_addr = 0;
243 * @ipa: IPA pointer
251 int ipa_mem_zero_modem(struct ipa *ipa)
258 trans = ipa_cmd_trans_alloc(ipa, 3);
260 dev_err(&ipa->pdev->dev,
265 ipa_mem_zero_region_add(trans, &ipa->mem[IPA_MEM_MODEM_HEADER]);
267 ipa_mem_zero_region_add(trans, &ipa->mem[IPA_MEM_MODEM_PROC_CTX]);
269 ipa_mem_zero_region_add(trans, &ipa->mem[IPA_MEM_MODEM]);
278 * @ipa: IPA pointer
292 static int ipa_imem_init(struct ipa *ipa, unsigned long addr, size_t size)
294 struct device *dev = &ipa->pdev->dev;
318 ipa->imem_iova = iova;
319 ipa->imem_size = size;
324 static void ipa_imem_exit(struct ipa *ipa)
329 if (!ipa->imem_size)
332 dev = &ipa->pdev->dev;
337 size = iommu_unmap(domain, ipa->imem_iova, ipa->imem_size);
338 if (size != ipa->imem_size)
340 size, ipa->imem_size);
345 ipa->imem_size = 0;
346 ipa->imem_iova = 0;
351 * @ipa: IPA pointer
366 static int ipa_smem_init(struct ipa *ipa, u32 item, size_t size)
368 struct device *dev = &ipa->pdev->dev;
426 ipa->smem_iova = iova;
427 ipa->smem_size = size;
432 static void ipa_smem_exit(struct ipa *ipa)
434 struct device *dev = &ipa->pdev->dev;
441 size = iommu_unmap(domain, ipa->smem_iova, ipa->smem_size);
442 if (size != ipa->smem_size)
444 size, ipa->smem_size);
450 ipa->smem_size = 0;
451 ipa->smem_iova = 0;
455 int ipa_mem_init(struct ipa *ipa, const struct ipa_mem_data *mem_data)
457 struct device *dev = &ipa->pdev->dev;
467 ret = dma_set_mask_and_coherent(&ipa->pdev->dev, DMA_BIT_MASK(64));
473 res = platform_get_resource_byname(ipa->pdev, IORESOURCE_MEM,
474 "ipa-shared");
477 "DT error getting \"ipa-shared\" memory property\n");
481 ipa->mem_virt = memremap(res->start, resource_size(res), MEMREMAP_WC);
482 if (!ipa->mem_virt) {
483 dev_err(dev, "unable to remap \"ipa-shared\" memory\n");
487 ipa->mem_addr = res->start;
488 ipa->mem_size = resource_size(res);
490 /* The ipa->mem[] array is indexed by enum ipa_mem_id values */
491 ipa->mem_count = mem_data->local_count;
492 ipa->mem = mem_data->local;
494 ret = ipa_imem_init(ipa, mem_data->imem_addr, mem_data->imem_size);
498 ret = ipa_smem_init(ipa, mem_data->smem_id, mem_data->smem_size);
505 ipa_imem_exit(ipa);
507 memunmap(ipa->mem_virt);
513 void ipa_mem_exit(struct ipa *ipa)
515 ipa_smem_exit(ipa);
516 ipa_imem_exit(ipa);
517 memunmap(ipa->mem_virt);