Lines Matching refs:ipa

15 #include "ipa.h"
29 const struct ipa_mem *ipa_mem_find(struct ipa *ipa, enum ipa_mem_id mem_id)
33 for (i = 0; i < ipa->mem_count; i++) {
34 const struct ipa_mem *mem = &ipa->mem[i];
47 struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi);
48 const struct ipa_mem *mem = ipa_mem_find(ipa, mem_id);
49 dma_addr_t addr = ipa->zero_addr;
59 * @ipa: IPA pointer
75 int ipa_mem_setup(struct ipa *ipa)
77 dma_addr_t addr = ipa->zero_addr;
88 trans = ipa_cmd_trans_alloc(ipa, 4);
90 dev_err(&ipa->pdev->dev, "no transaction for memory setup\n");
98 mem = ipa_mem_find(ipa, IPA_MEM_MODEM_HEADER);
101 mem = ipa_mem_find(ipa, IPA_MEM_AP_HEADER);
114 mem = ipa_mem_find(ipa, IPA_MEM_MODEM_PROC_CTX);
115 offset = ipa->mem_offset + mem->offset;
117 reg = ipa_reg(ipa, LOCAL_PKT_PROC_CNTXT);
119 iowrite32(val, ipa->reg_virt + reg_offset(reg));
125 static bool ipa_mem_id_valid(struct ipa *ipa, enum ipa_mem_id mem_id)
127 enum ipa_version version = ipa->version;
186 static bool ipa_mem_id_required(struct ipa *ipa, enum ipa_mem_id mem_id)
207 return ipa->version >= IPA_VERSION_4_0;
210 return ipa->version >= IPA_VERSION_4_0 &&
211 ipa->version != IPA_VERSION_5_0;
218 static bool ipa_mem_valid_one(struct ipa *ipa, const struct ipa_mem *mem)
220 struct device *dev = &ipa->pdev->dev;
225 if (!ipa_mem_id_valid(ipa, mem_id)) {
254 static bool ipa_mem_valid(struct ipa *ipa, const struct ipa_mem_data *mem_data)
257 struct device *dev = &ipa->pdev->dev;
276 if (!ipa_mem_valid_one(ipa, mem))
282 if (ipa_mem_id_required(ipa, mem_id))
291 static bool ipa_mem_size_valid(struct ipa *ipa)
293 struct device *dev = &ipa->pdev->dev;
294 u32 limit = ipa->mem_size;
297 for (i = 0; i < ipa->mem_count; i++) {
298 const struct ipa_mem *mem = &ipa->mem[i];
314 * @ipa: IPA pointer
318 int ipa_mem_config(struct ipa *ipa)
320 struct device *dev = &ipa->pdev->dev;
330 reg = ipa_reg(ipa, SHARED_MEM_SIZE);
331 val = ioread32(ipa->reg_virt + reg_offset(reg));
334 ipa->mem_offset = 8 * reg_decode(reg, MEM_BADDR, val);
340 if (ipa->mem_offset + mem_size < ipa->mem_size) {
343 ipa->mem_size = mem_size;
344 } else if (ipa->mem_offset + mem_size > ipa->mem_size) {
350 if (!ipa_mem_size_valid(ipa))
357 ipa->zero_addr = addr;
358 ipa->zero_virt = virt;
359 ipa->zero_size = IPA_MEM_MAX;
364 for (i = 0; i < ipa->mem_count; i++) {
365 u16 canary_count = ipa->mem[i].canary_count;
372 canary = ipa->mem_virt + ipa->mem_offset + ipa->mem[i].offset;
379 mem = ipa_mem_find(ipa, IPA_MEM_UC_EVENT_RING);
388 dma_free_coherent(dev, IPA_MEM_MAX, ipa->zero_virt, ipa->zero_addr);
394 void ipa_mem_deconfig(struct ipa *ipa)
396 struct device *dev = &ipa->pdev->dev;
398 dma_free_coherent(dev, ipa->zero_size, ipa->zero_virt, ipa->zero_addr);
399 ipa->zero_size = 0;
400 ipa->zero_virt = NULL;
401 ipa->zero_addr = 0;
406 * @ipa: IPA pointer
414 int ipa_mem_zero_modem(struct ipa *ipa)
421 trans = ipa_cmd_trans_alloc(ipa, 3);
423 dev_err(&ipa->pdev->dev,
439 * @ipa: IPA pointer
453 static int ipa_imem_init(struct ipa *ipa, unsigned long addr, size_t size)
455 struct device *dev = &ipa->pdev->dev;
480 ipa->imem_iova = iova;
481 ipa->imem_size = size;
486 static void ipa_imem_exit(struct ipa *ipa)
491 if (!ipa->imem_size)
494 dev = &ipa->pdev->dev;
499 size = iommu_unmap(domain, ipa->imem_iova, ipa->imem_size);
500 if (size != ipa->imem_size)
502 size, ipa->imem_size);
507 ipa->imem_size = 0;
508 ipa->imem_iova = 0;
513 * @ipa: IPA pointer
528 static int ipa_smem_init(struct ipa *ipa, u32 item, size_t size)
530 struct device *dev = &ipa->pdev->dev;
589 ipa->smem_iova = iova;
590 ipa->smem_size = size;
595 static void ipa_smem_exit(struct ipa *ipa)
597 struct device *dev = &ipa->pdev->dev;
604 size = iommu_unmap(domain, ipa->smem_iova, ipa->smem_size);
605 if (size != ipa->smem_size)
607 size, ipa->smem_size);
613 ipa->smem_size = 0;
614 ipa->smem_iova = 0;
618 int ipa_mem_init(struct ipa *ipa, const struct ipa_mem_data *mem_data)
620 struct device *dev = &ipa->pdev->dev;
625 if (!ipa_mem_valid(ipa, mem_data))
628 ipa->mem_count = mem_data->local_count;
629 ipa->mem = mem_data->local;
632 if (!ipa_table_mem_valid(ipa, false))
634 if (!ipa_table_mem_valid(ipa, true))
637 ret = dma_set_mask_and_coherent(&ipa->pdev->dev, DMA_BIT_MASK(64));
643 res = platform_get_resource_byname(ipa->pdev, IORESOURCE_MEM,
644 "ipa-shared");
647 "DT error getting \"ipa-shared\" memory property\n");
651 ipa->mem_virt = memremap(res->start, resource_size(res), MEMREMAP_WC);
652 if (!ipa->mem_virt) {
653 dev_err(dev, "unable to remap \"ipa-shared\" memory\n");
657 ipa->mem_addr = res->start;
658 ipa->mem_size = resource_size(res);
660 ret = ipa_imem_init(ipa, mem_data->imem_addr, mem_data->imem_size);
664 ret = ipa_smem_init(ipa, mem_data->smem_id, mem_data->smem_size);
671 ipa_imem_exit(ipa);
673 memunmap(ipa->mem_virt);
679 void ipa_mem_exit(struct ipa *ipa)
681 ipa_smem_exit(ipa);
682 ipa_imem_exit(ipa);
683 memunmap(ipa->mem_virt);