Lines Matching +full:qman +full:- +full:portals
1 /* Copyright 2008 - 2016 Freescale Semiconductor, Inc.
42 /* protect qman global registers and global data shared among portals */
48 struct device *dev = pcfg->dev; in portal_set_cpu()
51 pcfg->iommu_domain = iommu_paging_domain_alloc(dev); in portal_set_cpu()
52 if (IS_ERR(pcfg->iommu_domain)) { in portal_set_cpu()
54 pcfg->iommu_domain = NULL; in portal_set_cpu()
57 ret = fsl_pamu_configure_l1_stash(pcfg->iommu_domain, cpu); in portal_set_cpu()
63 ret = iommu_attach_device(pcfg->iommu_domain, dev); in portal_set_cpu()
72 qman_set_sdest(pcfg->channel, cpu); in portal_set_cpu()
78 iommu_domain_free(pcfg->iommu_domain); in portal_set_cpu()
79 pcfg->iommu_domain = NULL; in portal_set_cpu()
88 /* We need the same LIODN offset for all portals */ in init_pcfg()
89 qman_liodn_fixup(pcfg->channel); in init_pcfg()
91 pcfg->iommu_domain = NULL; in init_pcfg()
92 portal_set_cpu(pcfg, pcfg->cpu); in init_pcfg()
96 dev_crit(pcfg->dev, "%s: Portal failure on cpu %d\n", in init_pcfg()
97 __func__, pcfg->cpu); in init_pcfg()
101 /* Determine what should be interrupt-vs-poll driven */ in init_pcfg()
113 /* all assigned portals are initialized now */ in init_pcfg()
122 dev_info(pcfg->dev, "Portal initialised, cpu %d\n", pcfg->cpu); in init_pcfg()
131 if (pcfg->iommu_domain) { in qman_portal_update_sdest()
132 if (fsl_pamu_configure_l1_stash(pcfg->iommu_domain, cpu) < 0) { in qman_portal_update_sdest()
133 dev_err(pcfg->dev, in qman_portal_update_sdest()
139 qman_set_sdest(pcfg->channel, cpu); in qman_portal_update_sdest()
153 irq_set_affinity(pcfg->irq, cpumask_of(cpu)); in qman_offline_cpu()
169 irq_set_affinity(pcfg->irq, cpumask_of(cpu)); in qman_online_cpu()
184 struct device *dev = &pdev->dev; in qman_portal_probe()
185 struct device_node *node = dev->of_node; in qman_portal_probe()
193 return -EPROBE_DEFER; in qman_portal_probe()
195 dev_err(&pdev->dev, "failing probe due to qman probe error\n"); in qman_portal_probe()
196 return -ENODEV; in qman_portal_probe()
201 __qman_portals_probed = -1; in qman_portal_probe()
202 return -ENOMEM; in qman_portal_probe()
205 pcfg->dev = dev; in qman_portal_probe()
221 err = of_property_read_u32(node, "cell-index", &val); in qman_portal_probe()
223 dev_err(dev, "Can't get %pOF property 'cell-index'\n", node); in qman_portal_probe()
224 __qman_portals_probed = -1; in qman_portal_probe()
227 pcfg->channel = val; in qman_portal_probe()
228 pcfg->cpu = -1; in qman_portal_probe()
232 pcfg->irq = irq; in qman_portal_probe()
234 pcfg->addr_virt_ce = memremap(addr_phys[0]->start, in qman_portal_probe()
237 if (!pcfg->addr_virt_ce) { in qman_portal_probe()
242 pcfg->addr_virt_ci = ioremap(addr_phys[1]->start, in qman_portal_probe()
244 if (!pcfg->addr_virt_ci) { in qman_portal_probe()
249 pcfg->pools = qm_get_pools_sdqcr(); in qman_portal_probe()
262 pcfg->cpu = cpu; in qman_portal_probe()
281 * QMan wasn't reset prior to boot (Kexec for example) in qman_portal_probe()
298 iounmap(pcfg->addr_virt_ci); in qman_portal_probe()
300 memunmap(pcfg->addr_virt_ce); in qman_portal_probe()
302 __qman_portals_probed = -1; in qman_portal_probe()
304 return -ENXIO; in qman_portal_probe()
309 .compatible = "fsl,qman-portal",
335 pr_err("qman: failed to register hotplug callbacks.\n"); in qman_portal_driver_register()