Lines Matching +full:retain +full:- +full:state +full:- +full:shutdown
1 /* Copyright 2008 - 2016 Freescale Semiconductor, Inc.
5 * * Redistributions of source code must retain the above copyright
48 struct device *dev = pcfg->dev; in portal_set_cpu()
54 pcfg->iommu_domain = iommu_domain_alloc(&platform_bus_type); in portal_set_cpu()
55 if (!pcfg->iommu_domain) { in portal_set_cpu()
61 ((dma_addr_t)1 << min(8 * sizeof(dma_addr_t), (size_t)36)) - 1; in portal_set_cpu()
63 ret = iommu_domain_set_attr(pcfg->iommu_domain, DOMAIN_ATTR_GEOMETRY, in portal_set_cpu()
70 ret = iommu_domain_set_attr(pcfg->iommu_domain, DOMAIN_ATTR_WINDOWS, in portal_set_cpu()
79 ret = iommu_domain_set_attr(pcfg->iommu_domain, in portal_set_cpu()
87 ret = iommu_domain_window_enable(pcfg->iommu_domain, 0, 0, 1ULL << 36, in portal_set_cpu()
94 ret = iommu_attach_device(pcfg->iommu_domain, dev); in portal_set_cpu()
100 ret = iommu_domain_set_attr(pcfg->iommu_domain, in portal_set_cpu()
111 qman_set_sdest(pcfg->channel, cpu); in portal_set_cpu()
117 iommu_detach_device(pcfg->iommu_domain, NULL); in portal_set_cpu()
119 iommu_domain_free(pcfg->iommu_domain); in portal_set_cpu()
120 pcfg->iommu_domain = NULL; in portal_set_cpu()
130 qman_liodn_fixup(pcfg->channel); in init_pcfg()
132 pcfg->iommu_domain = NULL; in init_pcfg()
133 portal_set_cpu(pcfg, pcfg->cpu); in init_pcfg()
137 dev_crit(pcfg->dev, "%s: Portal failure on cpu %d\n", in init_pcfg()
138 __func__, pcfg->cpu); in init_pcfg()
142 /* Determine what should be interrupt-vs-poll driven */ in init_pcfg()
163 dev_info(pcfg->dev, "Portal initialised, cpu %d\n", pcfg->cpu); in init_pcfg()
175 if (pcfg->iommu_domain) { in qman_portal_update_sdest()
178 ret = iommu_domain_set_attr(pcfg->iommu_domain, in qman_portal_update_sdest()
181 dev_err(pcfg->dev, in qman_portal_update_sdest()
187 qman_set_sdest(pcfg->channel, cpu); in qman_portal_update_sdest()
201 irq_set_affinity(pcfg->irq, cpumask_of(cpu)); in qman_offline_cpu()
217 irq_set_affinity(pcfg->irq, cpumask_of(cpu)); in qman_online_cpu()
232 struct device *dev = &pdev->dev; in qman_portal_probe()
233 struct device_node *node = dev->of_node; in qman_portal_probe()
241 return -EPROBE_DEFER; in qman_portal_probe()
243 dev_err(&pdev->dev, "failing probe due to qman probe error\n"); in qman_portal_probe()
244 return -ENODEV; in qman_portal_probe()
249 __qman_portals_probed = -1; in qman_portal_probe()
250 return -ENOMEM; in qman_portal_probe()
253 pcfg->dev = dev; in qman_portal_probe()
269 err = of_property_read_u32(node, "cell-index", &val); in qman_portal_probe()
271 dev_err(dev, "Can't get %pOF property 'cell-index'\n", node); in qman_portal_probe()
272 __qman_portals_probed = -1; in qman_portal_probe()
275 pcfg->channel = val; in qman_portal_probe()
276 pcfg->cpu = -1; in qman_portal_probe()
280 pcfg->irq = irq; in qman_portal_probe()
282 pcfg->addr_virt_ce = memremap(addr_phys[0]->start, in qman_portal_probe()
285 if (!pcfg->addr_virt_ce) { in qman_portal_probe()
290 pcfg->addr_virt_ci = ioremap(addr_phys[1]->start, in qman_portal_probe()
292 if (!pcfg->addr_virt_ci) { in qman_portal_probe()
297 pcfg->pools = qm_get_pools_sdqcr(); in qman_portal_probe()
300 cpu = cpumask_next_zero(-1, &portal_cpus); in qman_portal_probe()
310 pcfg->cpu = cpu; in qman_portal_probe()
329 * Empty all the frame queues so they are in reset state in qman_portal_probe()
334 dev_err(dev, "Failed to shutdown frame queue %d\n", in qman_portal_probe()
345 iounmap(pcfg->addr_virt_ci); in qman_portal_probe()
347 memunmap(pcfg->addr_virt_ce); in qman_portal_probe()
349 __qman_portals_probed = -1; in qman_portal_probe()
351 return -ENXIO; in qman_portal_probe()
356 .compatible = "fsl,qman-portal",