Lines Matching +full:pcfg +full:-
1 /* Copyright 2008 - 2016 Freescale Semiconductor, Inc.
45 static void portal_set_cpu(struct qm_portal_config *pcfg, int cpu) in portal_set_cpu() argument
48 struct device *dev = pcfg->dev; in portal_set_cpu()
51 pcfg->iommu_domain = iommu_domain_alloc(&platform_bus_type); in portal_set_cpu()
52 if (!pcfg->iommu_domain) { in portal_set_cpu()
56 ret = fsl_pamu_configure_l1_stash(pcfg->iommu_domain, cpu); in portal_set_cpu()
62 ret = iommu_attach_device(pcfg->iommu_domain, dev); in portal_set_cpu()
71 qman_set_sdest(pcfg->channel, cpu); in portal_set_cpu()
77 iommu_domain_free(pcfg->iommu_domain); in portal_set_cpu()
78 pcfg->iommu_domain = NULL; in portal_set_cpu()
82 static struct qman_portal *init_pcfg(struct qm_portal_config *pcfg) in init_pcfg() argument
88 qman_liodn_fixup(pcfg->channel); in init_pcfg()
90 pcfg->iommu_domain = NULL; in init_pcfg()
91 portal_set_cpu(pcfg, pcfg->cpu); in init_pcfg()
93 p = qman_create_affine_portal(pcfg, NULL); in init_pcfg()
95 dev_crit(pcfg->dev, "%s: Portal failure on cpu %d\n", in init_pcfg()
96 __func__, pcfg->cpu); in init_pcfg()
100 /* Determine what should be interrupt-vs-poll driven */ in init_pcfg()
121 dev_info(pcfg->dev, "Portal initialised, cpu %d\n", pcfg->cpu); in init_pcfg()
126 static void qman_portal_update_sdest(const struct qm_portal_config *pcfg, in qman_portal_update_sdest() argument
130 if (pcfg->iommu_domain) { in qman_portal_update_sdest()
131 if (fsl_pamu_configure_l1_stash(pcfg->iommu_domain, cpu) < 0) { in qman_portal_update_sdest()
132 dev_err(pcfg->dev, in qman_portal_update_sdest()
138 qman_set_sdest(pcfg->channel, cpu); in qman_portal_update_sdest()
144 const struct qm_portal_config *pcfg; in qman_offline_cpu() local
148 pcfg = qman_get_qm_portal_config(p); in qman_offline_cpu()
149 if (pcfg) { in qman_offline_cpu()
152 irq_set_affinity(pcfg->irq, cpumask_of(cpu)); in qman_offline_cpu()
153 qman_portal_update_sdest(pcfg, cpu); in qman_offline_cpu()
162 const struct qm_portal_config *pcfg; in qman_online_cpu() local
166 pcfg = qman_get_qm_portal_config(p); in qman_online_cpu()
167 if (pcfg) { in qman_online_cpu()
168 irq_set_affinity(pcfg->irq, cpumask_of(cpu)); in qman_online_cpu()
169 qman_portal_update_sdest(pcfg, cpu); in qman_online_cpu()
183 struct device *dev = &pdev->dev; in qman_portal_probe()
184 struct device_node *node = dev->of_node; in qman_portal_probe()
185 struct qm_portal_config *pcfg; in qman_portal_probe() local
192 return -EPROBE_DEFER; in qman_portal_probe()
194 dev_err(&pdev->dev, "failing probe due to qman probe error\n"); in qman_portal_probe()
195 return -ENODEV; in qman_portal_probe()
198 pcfg = devm_kmalloc(dev, sizeof(*pcfg), GFP_KERNEL); in qman_portal_probe()
199 if (!pcfg) { in qman_portal_probe()
200 __qman_portals_probed = -1; in qman_portal_probe()
201 return -ENOMEM; in qman_portal_probe()
204 pcfg->dev = dev; in qman_portal_probe()
220 err = of_property_read_u32(node, "cell-index", &val); in qman_portal_probe()
222 dev_err(dev, "Can't get %pOF property 'cell-index'\n", node); in qman_portal_probe()
223 __qman_portals_probed = -1; in qman_portal_probe()
226 pcfg->channel = val; in qman_portal_probe()
227 pcfg->cpu = -1; in qman_portal_probe()
231 pcfg->irq = irq; in qman_portal_probe()
233 pcfg->addr_virt_ce = memremap(addr_phys[0]->start, in qman_portal_probe()
236 if (!pcfg->addr_virt_ce) { in qman_portal_probe()
241 pcfg->addr_virt_ci = ioremap(addr_phys[1]->start, in qman_portal_probe()
243 if (!pcfg->addr_virt_ci) { in qman_portal_probe()
248 pcfg->pools = qm_get_pools_sdqcr(); in qman_portal_probe()
261 pcfg->cpu = cpu; in qman_portal_probe()
268 if (!init_pcfg(pcfg)) { in qman_portal_probe()
297 iounmap(pcfg->addr_virt_ci); in qman_portal_probe()
299 memunmap(pcfg->addr_virt_ce); in qman_portal_probe()
301 __qman_portals_probed = -1; in qman_portal_probe()
303 return -ENXIO; in qman_portal_probe()
308 .compatible = "fsl,qman-portal",