Lines Matching defs:ipc_pcie

24 static void ipc_pcie_resources_release(struct iosm_pcie *ipc_pcie)
27 ipc_release_irq(ipc_pcie);
30 iounmap(ipc_pcie->scratchpad);
33 iounmap(ipc_pcie->ipc_regs);
39 pci_release_regions(ipc_pcie->pci);
42 static void ipc_pcie_cleanup(struct iosm_pcie *ipc_pcie)
45 ipc_imem_cleanup(ipc_pcie->imem);
47 ipc_pcie_resources_release(ipc_pcie);
50 pci_disable_device(ipc_pcie->pci);
53 static void ipc_pcie_deinit(struct iosm_pcie *ipc_pcie)
55 kfree(ipc_pcie->imem);
56 kfree(ipc_pcie);
61 struct iosm_pcie *ipc_pcie = pci_get_drvdata(pci);
63 ipc_pcie_cleanup(ipc_pcie);
65 ipc_pcie_deinit(ipc_pcie);
68 static int ipc_pcie_resources_request(struct iosm_pcie *ipc_pcie)
70 struct pci_dev *pci = ipc_pcie->pci;
80 dev_err(ipc_pcie->dev, "failed pci request regions");
89 ipc_pcie->ipc_regs = pci_ioremap_bar(pci, ipc_pcie->ipc_regs_bar_nr);
91 if (!ipc_pcie->ipc_regs) {
92 dev_err(ipc_pcie->dev, "IPC REGS ioremap error");
102 ipc_pcie->scratchpad =
103 pci_ioremap_bar(pci, ipc_pcie->scratchpad_bar_nr);
105 if (!ipc_pcie->scratchpad) {
106 dev_err(ipc_pcie->dev, "doorbell scratchpad ioremap error");
112 ret = ipc_acquire_irq(ipc_pcie);
114 dev_err(ipc_pcie->dev, "acquiring MSI irq failed!");
124 pcie_capability_read_dword(ipc_pcie->pci, PCI_EXP_DEVCAP2, &cap);
126 pcie_capability_set_word(ipc_pcie->pci, PCI_EXP_DEVCTL2,
129 dev_dbg(ipc_pcie->dev, "link between AP and CP is fully on");
134 iounmap(ipc_pcie->scratchpad);
136 iounmap(ipc_pcie->ipc_regs);
143 bool ipc_pcie_check_aspm_enabled(struct iosm_pcie *ipc_pcie,
151 pdev = ipc_pcie->pci->bus->self;
153 pdev = ipc_pcie->pci;
157 dev_dbg(ipc_pcie->dev, "ASPM L1: 0x%04X 0x%03X", pdev->device, value);
163 bool ipc_pcie_check_data_link_active(struct iosm_pcie *ipc_pcie)
168 if (!ipc_pcie->pci->bus || !ipc_pcie->pci->bus->self) {
169 dev_err(ipc_pcie->dev, "root port not found");
173 parent = ipc_pcie->pci->bus->self;
176 dev_dbg(ipc_pcie->dev, "Link status: 0x%04X", link_status);
181 static bool ipc_pcie_check_aspm_supported(struct iosm_pcie *ipc_pcie,
189 pdev = ipc_pcie->pci->bus->self;
191 pdev = ipc_pcie->pci;
195 dev_dbg(ipc_pcie->dev, "ASPM L1 not supported: 0x%04X",
202 void ipc_pcie_config_aspm(struct iosm_pcie *ipc_pcie)
207 if (!ipc_pcie_check_aspm_supported(ipc_pcie, true) ||
208 !ipc_pcie_check_aspm_supported(ipc_pcie, false))
211 parent_aspm_enabled = ipc_pcie_check_aspm_enabled(ipc_pcie, true);
212 dev_aspm_enabled = ipc_pcie_check_aspm_enabled(ipc_pcie, false);
214 dev_dbg(ipc_pcie->dev, "ASPM parent: %s device: %s",
220 static void ipc_pcie_config_init(struct iosm_pcie *ipc_pcie)
223 ipc_pcie->ipc_regs_bar_nr = IPC_DOORBELL_BAR0;
226 ipc_pcie->scratchpad_bar_nr = IPC_SCRATCHPAD_BAR2;
227 ipc_pcie->doorbell_reg_offset = IPC_DOORBELL_CH_OFFSET;
228 ipc_pcie->doorbell_write = IPC_WRITE_PTR_REG_0;
229 ipc_pcie->doorbell_capture = IPC_CAPTURE_PTR_REG_0;
263 struct iosm_pcie *ipc_pcie = kzalloc(sizeof(*ipc_pcie), GFP_KERNEL);
269 if (!ipc_pcie)
273 ipc_pcie->dev = &pci->dev;
276 pci_set_drvdata(pci, ipc_pcie);
279 ipc_pcie->pci = pci;
282 ipc_pcie_config_init(ipc_pcie);
288 dev_err(ipc_pcie->dev, "failed to enable the AP PCIe device");
297 ret = dma_set_mask(ipc_pcie->dev, DMA_BIT_MASK(64));
299 dev_err(ipc_pcie->dev, "Could not set PCI DMA mask: %d", ret);
303 ipc_pcie_config_aspm(ipc_pcie);
304 dev_dbg(ipc_pcie->dev, "PCIe device enabled.");
308 ipc_pcie->d3l2_support = ipc_pcie_read_bios_cfg(&pci->dev);
310 ipc_pcie->suspend = 0;
312 if (ipc_pcie_resources_request(ipc_pcie))
316 ipc_pcie->imem = ipc_imem_init(ipc_pcie, pci->device,
317 ipc_pcie->scratchpad, ipc_pcie->dev);
318 if (!ipc_pcie->imem) {
319 dev_err(ipc_pcie->dev, "failed to init imem");
326 ipc_pcie_resources_release(ipc_pcie);
331 kfree(ipc_pcie);
345 static int __maybe_unused ipc_pcie_suspend_s2idle(struct iosm_pcie *ipc_pcie)
347 ipc_cp_irq_sleep_control(ipc_pcie, IPC_MEM_DEV_PM_FORCE_SLEEP);
352 set_bit(0, &ipc_pcie->suspend);
357 ipc_imem_pm_s2idle_sleep(ipc_pcie->imem, true);
364 static int __maybe_unused ipc_pcie_resume_s2idle(struct iosm_pcie *ipc_pcie)
366 ipc_cp_irq_sleep_control(ipc_pcie, IPC_MEM_DEV_PM_FORCE_ACTIVE);
368 ipc_imem_pm_s2idle_sleep(ipc_pcie->imem, false);
373 clear_bit(0, &ipc_pcie->suspend);
380 int __maybe_unused ipc_pcie_suspend(struct iosm_pcie *ipc_pcie)
383 ipc_imem_pm_suspend(ipc_pcie->imem);
385 dev_dbg(ipc_pcie->dev, "SUSPEND done");
389 int __maybe_unused ipc_pcie_resume(struct iosm_pcie *ipc_pcie)
394 ipc_imem_pm_resume(ipc_pcie->imem);
396 dev_dbg(ipc_pcie->dev, "RESUME done");
402 struct iosm_pcie *ipc_pcie;
407 ipc_pcie = pci_get_drvdata(pdev);
409 switch (ipc_pcie->d3l2_support) {
411 ipc_pcie_suspend_s2idle(ipc_pcie);
414 ipc_pcie_suspend(ipc_pcie);
423 struct iosm_pcie *ipc_pcie;
428 ipc_pcie = pci_get_drvdata(pdev);
430 switch (ipc_pcie->d3l2_support) {
432 ipc_pcie_resume_s2idle(ipc_pcie);
435 ipc_pcie_resume(ipc_pcie);
454 int ipc_pcie_addr_map(struct iosm_pcie *ipc_pcie, unsigned char *data,
457 if (ipc_pcie->pci) {
458 *mapping = dma_map_single(&ipc_pcie->pci->dev, data, size,
460 if (dma_mapping_error(&ipc_pcie->pci->dev, *mapping)) {
461 dev_err(ipc_pcie->dev, "dma mapping failed");
468 void ipc_pcie_addr_unmap(struct iosm_pcie *ipc_pcie, size_t size,
473 if (ipc_pcie->pci)
474 dma_unmap_single(&ipc_pcie->pci->dev, mapping, size, direction);
477 struct sk_buff *ipc_pcie_alloc_local_skb(struct iosm_pcie *ipc_pcie,
482 if (!ipc_pcie || !size) {
497 struct sk_buff *ipc_pcie_alloc_skb(struct iosm_pcie *ipc_pcie, size_t size,
501 struct sk_buff *skb = ipc_pcie_alloc_local_skb(ipc_pcie, flags,
509 if (ipc_pcie_addr_map(ipc_pcie, skb->data, size, mapping, direction)) {
524 void ipc_pcie_kfree_skb(struct iosm_pcie *ipc_pcie, struct sk_buff *skb)
529 ipc_pcie_addr_unmap(ipc_pcie, IPC_CB(skb)->len, IPC_CB(skb)->mapping,