Lines Matching +full:per +full:- +full:slice
1 // SPDX-License-Identifier: GPL-2.0-or-later
62 return -EINVAL; in read_handle()
88 afu->guest->handle = addr; in read_phys_addr()
91 afu->guest->p2n_phys += addr; in read_phys_addr()
92 afu->guest->p2n_size = size; in read_phys_addr()
95 afu->psn_phys += addr; in read_phys_addr()
96 afu->adapter->ps_size = size; in read_phys_addr()
101 return -EINVAL; in read_phys_addr()
133 if (read_handle(afu_np, &afu->guest->handle)) in cxl_of_read_afu_handle()
134 return -EINVAL; in cxl_of_read_afu_handle()
135 pr_devel("AFU handle: 0x%.16llx\n", afu->guest->handle); in cxl_of_read_afu_handle()
151 pr_info("Dump of the 'ibm,coherent-platform-function' node properties:\n"); in cxl_of_read_afu_properties()
167 rc = read_phys_addr(np, "assigned-addresses", afu); in cxl_of_read_afu_properties()
171 if (afu->psn_phys == 0) in cxl_of_read_afu_properties()
172 afu->psa = false; in cxl_of_read_afu_properties()
174 afu->psa = true; in cxl_of_read_afu_properties()
177 read_prop_string(np, "ibm,loc-code"); in cxl_of_read_afu_properties()
181 read_prop_dword(np, "ibm,#processes", &afu->max_procs_virtualised); in cxl_of_read_afu_properties()
184 read_prop_dword(np, "ibm,scratchpad-size", &val); in cxl_of_read_afu_properties()
190 read_prop_dword(np, "ibm,max-ints-per-process", &afu->guest->max_ints); in cxl_of_read_afu_properties()
191 afu->irqs_max = afu->guest->max_ints; in cxl_of_read_afu_properties()
193 prop = read_prop_dword(np, "ibm,min-ints-per-process", &afu->pp_irqs); in cxl_of_read_afu_properties()
199 afu->pp_irqs--; in cxl_of_read_afu_properties()
203 read_prop_dword(np, "ibm,max-ints", &val); in cxl_of_read_afu_properties()
204 read_prop_dword(np, "ibm,vpd-size", &val); in cxl_of_read_afu_properties()
207 read_prop64_dword(np, "ibm,error-buffer-size", &afu->eb_len); in cxl_of_read_afu_properties()
208 afu->eb_offset = 0; in cxl_of_read_afu_properties()
211 read_prop_dword(np, "ibm,config-record-type", &val); in cxl_of_read_afu_properties()
213 read_prop64_dword(np, "ibm,config-record-size", &afu->crs_len); in cxl_of_read_afu_properties()
214 afu->crs_offset = 0; in cxl_of_read_afu_properties()
216 read_prop_dword(np, "ibm,#config-records", &afu->crs_num); in cxl_of_read_afu_properties()
219 for (i = 0; i < afu->crs_num; i++) { in cxl_of_read_afu_properties()
220 rc = cxl_ops->afu_cr_read16(afu, i, PCI_DEVICE_ID, in cxl_of_read_afu_properties()
223 pr_info("record %d - device-id: %#x\n", in cxl_of_read_afu_properties()
225 rc = cxl_ops->afu_cr_read16(afu, i, PCI_VENDOR_ID, in cxl_of_read_afu_properties()
228 pr_info("record %d - vendor-id: %#x\n", in cxl_of_read_afu_properties()
230 rc = cxl_ops->afu_cr_read32(afu, i, PCI_CLASS_REVISION, in cxl_of_read_afu_properties()
234 pr_info("record %d - class-code: %#x\n", in cxl_of_read_afu_properties()
239 read_prop_dword(np, "ibm,function-number", &val); in cxl_of_read_afu_properties()
240 read_prop_dword(np, "ibm,privileged-function", &val); in cxl_of_read_afu_properties()
241 read_prop_dword(np, "vendor-id", &val); in cxl_of_read_afu_properties()
242 read_prop_dword(np, "device-id", &val); in cxl_of_read_afu_properties()
243 read_prop_dword(np, "revision-id", &val); in cxl_of_read_afu_properties()
244 read_prop_dword(np, "class-code", &val); in cxl_of_read_afu_properties()
245 read_prop_dword(np, "subsystem-vendor-id", &val); in cxl_of_read_afu_properties()
246 read_prop_dword(np, "subsystem-id", &val); in cxl_of_read_afu_properties()
249 * if "ibm,process-mmio" doesn't exist then per-process mmio is in cxl_of_read_afu_properties()
253 prop = read_prop_dword(np, "ibm,process-mmio", &val); in cxl_of_read_afu_properties()
255 afu->pp_psa = true; in cxl_of_read_afu_properties()
257 afu->pp_psa = false; in cxl_of_read_afu_properties()
260 read_prop_dword(np, "ibm,supports-aur", &val); in cxl_of_read_afu_properties()
261 read_prop_dword(np, "ibm,supports-csrp", &val); in cxl_of_read_afu_properties()
262 read_prop_dword(np, "ibm,supports-prr", &val); in cxl_of_read_afu_properties()
265 prop = read_prop_dword(np, "ibm,function-error-interrupt", &val); in cxl_of_read_afu_properties()
267 afu->serr_hwirq = val; in cxl_of_read_afu_properties()
269 pr_devel("AFU handle: %#llx\n", afu->guest->handle); in cxl_of_read_afu_properties()
271 afu->guest->p2n_phys, afu->guest->p2n_size); in cxl_of_read_afu_properties()
273 afu->psn_phys, afu->adapter->ps_size); in cxl_of_read_afu_properties()
275 afu->max_procs_virtualised); in cxl_of_read_afu_properties()
276 pr_devel("Per-process irqs min=%i, max=%i\n", afu->pp_irqs, in cxl_of_read_afu_properties()
277 afu->irqs_max); in cxl_of_read_afu_properties()
278 pr_devel("Slice error interrupt=%#lx\n", afu->serr_hwirq); in cxl_of_read_afu_properties()
289 ranges = of_get_property(np, "interrupt-ranges", &len); in read_adapter_irq_config()
291 return -EINVAL; in read_adapter_irq_config()
294 * encoded array of two cells per entry, each cell encoded as in read_adapter_irq_config()
295 * with encode-int in read_adapter_irq_config()
299 return -EINVAL; in read_adapter_irq_config()
301 adapter->guest->irq_avail = kcalloc(nranges, sizeof(struct irq_avail), in read_adapter_irq_config()
303 if (adapter->guest->irq_avail == NULL) in read_adapter_irq_config()
304 return -ENOMEM; in read_adapter_irq_config()
306 adapter->guest->irq_base_offset = be32_to_cpu(ranges[0]); in read_adapter_irq_config()
308 cur = &adapter->guest->irq_avail[i]; in read_adapter_irq_config()
309 cur->offset = be32_to_cpu(ranges[i * 2]); in read_adapter_irq_config()
310 cur->range = be32_to_cpu(ranges[i * 2 + 1]); in read_adapter_irq_config()
311 cur->bitmap = kcalloc(BITS_TO_LONGS(cur->range), in read_adapter_irq_config()
312 sizeof(*cur->bitmap), GFP_KERNEL); in read_adapter_irq_config()
313 if (cur->bitmap == NULL) in read_adapter_irq_config()
315 if (cur->offset < adapter->guest->irq_base_offset) in read_adapter_irq_config()
316 adapter->guest->irq_base_offset = cur->offset; in read_adapter_irq_config()
318 pr_info("available IRQ range: %#lx-%#lx (%lu)\n", in read_adapter_irq_config()
319 cur->offset, cur->offset + cur->range - 1, in read_adapter_irq_config()
320 cur->range); in read_adapter_irq_config()
322 adapter->guest->irq_nranges = nranges; in read_adapter_irq_config()
323 spin_lock_init(&adapter->guest->irq_alloc_lock); in read_adapter_irq_config()
327 for (i--; i >= 0; i--) { in read_adapter_irq_config()
328 cur = &adapter->guest->irq_avail[i]; in read_adapter_irq_config()
329 kfree(cur->bitmap); in read_adapter_irq_config()
331 kfree(adapter->guest->irq_avail); in read_adapter_irq_config()
332 adapter->guest->irq_avail = NULL; in read_adapter_irq_config()
333 return -ENOMEM; in read_adapter_irq_config()
338 if (read_handle(np, &adapter->guest->handle)) in cxl_of_read_adapter_handle()
339 return -EINVAL; in cxl_of_read_adapter_handle()
340 pr_devel("Adapter handle: 0x%.16llx\n", adapter->guest->handle); in cxl_of_read_adapter_handle()
357 pr_info("Dump of the 'ibm,coherent-platform-facility' node properties:\n"); in cxl_of_read_adapter_properties()
359 read_prop_dword(np, "#address-cells", &val); in cxl_of_read_adapter_properties()
360 read_prop_dword(np, "#size-cells", &val); in cxl_of_read_adapter_properties()
379 read_prop_string(np, "ibm,loc-code"); in cxl_of_read_adapter_properties()
390 prop = read_prop_dword(np, "ibm,caia-version", &val); in cxl_of_read_adapter_properties()
392 adapter->caia_major = (val & 0xFF00) >> 8; in cxl_of_read_adapter_properties()
393 adapter->caia_minor = val & 0xFF; in cxl_of_read_adapter_properties()
396 prop = read_prop_dword(np, "ibm,psl-revision", &val); in cxl_of_read_adapter_properties()
398 adapter->psl_rev = val; in cxl_of_read_adapter_properties()
402 adapter->guest->status = kasprintf(GFP_KERNEL, "%s", (char *) prop); in cxl_of_read_adapter_properties()
403 if (adapter->guest->status == NULL) in cxl_of_read_adapter_properties()
404 return -ENOMEM; in cxl_of_read_adapter_properties()
407 prop = read_prop_dword(np, "vendor-id", &val); in cxl_of_read_adapter_properties()
409 adapter->guest->vendor = val; in cxl_of_read_adapter_properties()
411 prop = read_prop_dword(np, "device-id", &val); in cxl_of_read_adapter_properties()
413 adapter->guest->device = val; in cxl_of_read_adapter_properties()
416 read_prop_dword(np, "ibm,privileged-facility", &val); in cxl_of_read_adapter_properties()
417 read_prop_dword(np, "revision-id", &val); in cxl_of_read_adapter_properties()
418 read_prop_dword(np, "class-code", &val); in cxl_of_read_adapter_properties()
421 prop = read_prop_dword(np, "subsystem-vendor-id", &val); in cxl_of_read_adapter_properties()
423 adapter->guest->subsystem_vendor = val; in cxl_of_read_adapter_properties()
425 prop = read_prop_dword(np, "subsystem-id", &val); in cxl_of_read_adapter_properties()
427 adapter->guest->subsystem = val; in cxl_of_read_adapter_properties()
440 adapter = dev_get_drvdata(&pdev->dev); in cxl_of_remove()
441 for (afu = 0; afu < adapter->slices; afu++) in cxl_of_remove()
442 cxl_guest_remove_afu(adapter->afu[afu]); in cxl_of_remove()
459 int slice = 0, slice_ok = 0; in cxl_of_probe() local
463 np = pdev->dev.of_node; in cxl_of_probe()
465 return -ENODEV; in cxl_of_probe()
470 dev_err(&pdev->dev, "guest_init_adapter failed: %li\n", PTR_ERR(adapter)); in cxl_of_probe()
476 if ((ret = cxl_guest_init_afu(adapter, slice, afu_np))) in cxl_of_probe()
477 dev_err(&pdev->dev, "AFU %i failed to initialise: %i\n", in cxl_of_probe()
478 slice, ret); in cxl_of_probe()
481 slice++; in cxl_of_probe()
485 dev_info(&pdev->dev, "No active AFU"); in cxl_of_probe()
486 adapter->slices = 0; in cxl_of_probe()
493 { .compatible = "ibm,coherent-platform-facility",},