1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * CXL Flash Device Driver
4 *
5 * Written by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>, IBM Corporation
6 *             Uma Krishnan <ukrishn@linux.vnet.ibm.com>, IBM Corporation
7 *
8 * Copyright (C) 2018 IBM Corporation
9 */
10
11#include <linux/file.h>
12#include <linux/idr.h>
13#include <linux/module.h>
14#include <linux/mount.h>
15#include <linux/pseudo_fs.h>
16#include <linux/poll.h>
17#include <linux/sched/signal.h>
18#include <linux/interrupt.h>
19#include <asm/xive.h>
20#include <misc/ocxl.h>
21
22#include <uapi/misc/cxl.h>
23
24#include "backend.h"
25#include "ocxl_hw.h"
26
27/*
28 * Pseudo-filesystem to allocate inodes.
29 */
30
31#define OCXLFLASH_FS_MAGIC      0x1697698f
32
33static int ocxlflash_fs_cnt;
34static struct vfsmount *ocxlflash_vfs_mount;
35
36static int ocxlflash_fs_init_fs_context(struct fs_context *fc)
37{
38	return init_pseudo(fc, OCXLFLASH_FS_MAGIC) ? 0 : -ENOMEM;
39}
40
41static struct file_system_type ocxlflash_fs_type = {
42	.name		= "ocxlflash",
43	.owner		= THIS_MODULE,
44	.init_fs_context = ocxlflash_fs_init_fs_context,
45	.kill_sb	= kill_anon_super,
46};
47
48/*
49 * ocxlflash_release_mapping() - release the memory mapping
50 * @ctx:	Context whose mapping is to be released.
51 */
52static void ocxlflash_release_mapping(struct ocxlflash_context *ctx)
53{
54	if (ctx->mapping)
55		simple_release_fs(&ocxlflash_vfs_mount, &ocxlflash_fs_cnt);
56	ctx->mapping = NULL;
57}
58
59/*
60 * ocxlflash_getfile() - allocate pseudo filesystem, inode, and the file
61 * @dev:	Generic device of the host.
62 * @name:	Name of the pseudo filesystem.
63 * @fops:	File operations.
64 * @priv:	Private data.
65 * @flags:	Flags for the file.
66 *
67 * Return: pointer to the file on success, ERR_PTR on failure
68 */
69static struct file *ocxlflash_getfile(struct device *dev, const char *name,
70				      const struct file_operations *fops,
71				      void *priv, int flags)
72{
73	struct file *file;
74	struct inode *inode;
75	int rc;
76
77	if (fops->owner && !try_module_get(fops->owner)) {
78		dev_err(dev, "%s: Owner does not exist\n", __func__);
79		rc = -ENOENT;
80		goto err1;
81	}
82
83	rc = simple_pin_fs(&ocxlflash_fs_type, &ocxlflash_vfs_mount,
84			   &ocxlflash_fs_cnt);
85	if (unlikely(rc < 0)) {
86		dev_err(dev, "%s: Cannot mount ocxlflash pseudofs rc=%d\n",
87			__func__, rc);
88		goto err2;
89	}
90
91	inode = alloc_anon_inode(ocxlflash_vfs_mount->mnt_sb);
92	if (IS_ERR(inode)) {
93		rc = PTR_ERR(inode);
94		dev_err(dev, "%s: alloc_anon_inode failed rc=%d\n",
95			__func__, rc);
96		goto err3;
97	}
98
99	file = alloc_file_pseudo(inode, ocxlflash_vfs_mount, name,
100				 flags & (O_ACCMODE | O_NONBLOCK), fops);
101	if (IS_ERR(file)) {
102		rc = PTR_ERR(file);
103		dev_err(dev, "%s: alloc_file failed rc=%d\n",
104			__func__, rc);
105		goto err4;
106	}
107
108	file->private_data = priv;
109out:
110	return file;
111err4:
112	iput(inode);
113err3:
114	simple_release_fs(&ocxlflash_vfs_mount, &ocxlflash_fs_cnt);
115err2:
116	module_put(fops->owner);
117err1:
118	file = ERR_PTR(rc);
119	goto out;
120}
121
122/**
123 * ocxlflash_psa_map() - map the process specific MMIO space
124 * @ctx_cookie:	Adapter context for which the mapping needs to be done.
125 *
126 * Return: MMIO pointer of the mapped region
127 */
128static void __iomem *ocxlflash_psa_map(void *ctx_cookie)
129{
130	struct ocxlflash_context *ctx = ctx_cookie;
131	struct device *dev = ctx->hw_afu->dev;
132
133	mutex_lock(&ctx->state_mutex);
134	if (ctx->state != STARTED) {
135		dev_err(dev, "%s: Context not started, state=%d\n", __func__,
136			ctx->state);
137		mutex_unlock(&ctx->state_mutex);
138		return NULL;
139	}
140	mutex_unlock(&ctx->state_mutex);
141
142	return ioremap(ctx->psn_phys, ctx->psn_size);
143}
144
145/**
146 * ocxlflash_psa_unmap() - unmap the process specific MMIO space
147 * @addr:	MMIO pointer to unmap.
148 */
149static void ocxlflash_psa_unmap(void __iomem *addr)
150{
151	iounmap(addr);
152}
153
154/**
155 * ocxlflash_process_element() - get process element of the adapter context
156 * @ctx_cookie:	Adapter context associated with the process element.
157 *
158 * Return: process element of the adapter context
159 */
160static int ocxlflash_process_element(void *ctx_cookie)
161{
162	struct ocxlflash_context *ctx = ctx_cookie;
163
164	return ctx->pe;
165}
166
167/**
168 * afu_map_irq() - map the interrupt of the adapter context
169 * @flags:	Flags.
170 * @ctx:	Adapter context.
171 * @num:	Per-context AFU interrupt number.
172 * @handler:	Interrupt handler to register.
173 * @cookie:	Interrupt handler private data.
174 * @name:	Name of the interrupt.
175 *
176 * Return: 0 on success, -errno on failure
177 */
178static int afu_map_irq(u64 flags, struct ocxlflash_context *ctx, int num,
179		       irq_handler_t handler, void *cookie, char *name)
180{
181	struct ocxl_hw_afu *afu = ctx->hw_afu;
182	struct device *dev = afu->dev;
183	struct ocxlflash_irqs *irq;
184	struct xive_irq_data *xd;
185	u32 virq;
186	int rc = 0;
187
188	if (num < 0 || num >= ctx->num_irqs) {
189		dev_err(dev, "%s: Interrupt %d not allocated\n", __func__, num);
190		rc = -ENOENT;
191		goto out;
192	}
193
194	irq = &ctx->irqs[num];
195	virq = irq_create_mapping(NULL, irq->hwirq);
196	if (unlikely(!virq)) {
197		dev_err(dev, "%s: irq_create_mapping failed\n", __func__);
198		rc = -ENOMEM;
199		goto out;
200	}
201
202	rc = request_irq(virq, handler, 0, name, cookie);
203	if (unlikely(rc)) {
204		dev_err(dev, "%s: request_irq failed rc=%d\n", __func__, rc);
205		goto err1;
206	}
207
208	xd = irq_get_handler_data(virq);
209	if (unlikely(!xd)) {
210		dev_err(dev, "%s: Can't get interrupt data\n", __func__);
211		rc = -ENXIO;
212		goto err2;
213	}
214
215	irq->virq = virq;
216	irq->vtrig = xd->trig_mmio;
217out:
218	return rc;
219err2:
220	free_irq(virq, cookie);
221err1:
222	irq_dispose_mapping(virq);
223	goto out;
224}
225
226/**
227 * ocxlflash_map_afu_irq() - map the interrupt of the adapter context
228 * @ctx_cookie:	Adapter context.
229 * @num:	Per-context AFU interrupt number.
230 * @handler:	Interrupt handler to register.
231 * @cookie:	Interrupt handler private data.
232 * @name:	Name of the interrupt.
233 *
234 * Return: 0 on success, -errno on failure
235 */
236static int ocxlflash_map_afu_irq(void *ctx_cookie, int num,
237				 irq_handler_t handler, void *cookie,
238				 char *name)
239{
240	return afu_map_irq(0, ctx_cookie, num, handler, cookie, name);
241}
242
243/**
244 * afu_unmap_irq() - unmap the interrupt
245 * @flags:	Flags.
246 * @ctx:	Adapter context.
247 * @num:	Per-context AFU interrupt number.
248 * @cookie:	Interrupt handler private data.
249 */
250static void afu_unmap_irq(u64 flags, struct ocxlflash_context *ctx, int num,
251			  void *cookie)
252{
253	struct ocxl_hw_afu *afu = ctx->hw_afu;
254	struct device *dev = afu->dev;
255	struct ocxlflash_irqs *irq;
256
257	if (num < 0 || num >= ctx->num_irqs) {
258		dev_err(dev, "%s: Interrupt %d not allocated\n", __func__, num);
259		return;
260	}
261
262	irq = &ctx->irqs[num];
263
264	if (irq_find_mapping(NULL, irq->hwirq)) {
265		free_irq(irq->virq, cookie);
266		irq_dispose_mapping(irq->virq);
267	}
268
269	memset(irq, 0, sizeof(*irq));
270}
271
272/**
273 * ocxlflash_unmap_afu_irq() - unmap the interrupt
274 * @ctx_cookie:	Adapter context.
275 * @num:	Per-context AFU interrupt number.
276 * @cookie:	Interrupt handler private data.
277 */
278static void ocxlflash_unmap_afu_irq(void *ctx_cookie, int num, void *cookie)
279{
280	return afu_unmap_irq(0, ctx_cookie, num, cookie);
281}
282
283/**
284 * ocxlflash_get_irq_objhndl() - get the object handle for an interrupt
285 * @ctx_cookie:	Context associated with the interrupt.
286 * @irq:	Interrupt number.
287 *
288 * Return: effective address of the mapped region
289 */
290static u64 ocxlflash_get_irq_objhndl(void *ctx_cookie, int irq)
291{
292	struct ocxlflash_context *ctx = ctx_cookie;
293
294	if (irq < 0 || irq >= ctx->num_irqs)
295		return 0;
296
297	return (__force u64)ctx->irqs[irq].vtrig;
298}
299
300/**
301 * ocxlflash_xsl_fault() - callback when translation error is triggered
302 * @data:	Private data provided at callback registration, the context.
303 * @addr:	Address that triggered the error.
304 * @dsisr:	Value of dsisr register.
305 */
306static void ocxlflash_xsl_fault(void *data, u64 addr, u64 dsisr)
307{
308	struct ocxlflash_context *ctx = data;
309
310	spin_lock(&ctx->slock);
311	ctx->fault_addr = addr;
312	ctx->fault_dsisr = dsisr;
313	ctx->pending_fault = true;
314	spin_unlock(&ctx->slock);
315
316	wake_up_all(&ctx->wq);
317}
318
319/**
320 * start_context() - local routine to start a context
321 * @ctx:	Adapter context to be started.
322 *
323 * Assign the context specific MMIO space, add and enable the PE.
324 *
325 * Return: 0 on success, -errno on failure
326 */
327static int start_context(struct ocxlflash_context *ctx)
328{
329	struct ocxl_hw_afu *afu = ctx->hw_afu;
330	struct ocxl_afu_config *acfg = &afu->acfg;
331	void *link_token = afu->link_token;
332	struct device *dev = afu->dev;
333	bool master = ctx->master;
334	struct mm_struct *mm;
335	int rc = 0;
336	u32 pid;
337
338	mutex_lock(&ctx->state_mutex);
339	if (ctx->state != OPENED) {
340		dev_err(dev, "%s: Context state invalid, state=%d\n",
341			__func__, ctx->state);
342		rc = -EINVAL;
343		goto out;
344	}
345
346	if (master) {
347		ctx->psn_size = acfg->global_mmio_size;
348		ctx->psn_phys = afu->gmmio_phys;
349	} else {
350		ctx->psn_size = acfg->pp_mmio_stride;
351		ctx->psn_phys = afu->ppmmio_phys + (ctx->pe * ctx->psn_size);
352	}
353
354	/* pid and mm not set for master contexts */
355	if (master) {
356		pid = 0;
357		mm = NULL;
358	} else {
359		pid = current->mm->context.id;
360		mm = current->mm;
361	}
362
363	rc = ocxl_link_add_pe(link_token, ctx->pe, pid, 0, 0, mm,
364			      ocxlflash_xsl_fault, ctx);
365	if (unlikely(rc)) {
366		dev_err(dev, "%s: ocxl_link_add_pe failed rc=%d\n",
367			__func__, rc);
368		goto out;
369	}
370
371	ctx->state = STARTED;
372out:
373	mutex_unlock(&ctx->state_mutex);
374	return rc;
375}
376
377/**
378 * ocxlflash_start_context() - start a kernel context
379 * @ctx_cookie:	Adapter context to be started.
380 *
381 * Return: 0 on success, -errno on failure
382 */
383static int ocxlflash_start_context(void *ctx_cookie)
384{
385	struct ocxlflash_context *ctx = ctx_cookie;
386
387	return start_context(ctx);
388}
389
390/**
391 * ocxlflash_stop_context() - stop a context
392 * @ctx_cookie:	Adapter context to be stopped.
393 *
394 * Return: 0 on success, -errno on failure
395 */
396static int ocxlflash_stop_context(void *ctx_cookie)
397{
398	struct ocxlflash_context *ctx = ctx_cookie;
399	struct ocxl_hw_afu *afu = ctx->hw_afu;
400	struct ocxl_afu_config *acfg = &afu->acfg;
401	struct pci_dev *pdev = afu->pdev;
402	struct device *dev = afu->dev;
403	enum ocxlflash_ctx_state state;
404	int rc = 0;
405
406	mutex_lock(&ctx->state_mutex);
407	state = ctx->state;
408	ctx->state = CLOSED;
409	mutex_unlock(&ctx->state_mutex);
410	if (state != STARTED)
411		goto out;
412
413	rc = ocxl_config_terminate_pasid(pdev, acfg->dvsec_afu_control_pos,
414					 ctx->pe);
415	if (unlikely(rc)) {
416		dev_err(dev, "%s: ocxl_config_terminate_pasid failed rc=%d\n",
417			__func__, rc);
418		/* If EBUSY, PE could be referenced in future by the AFU */
419		if (rc == -EBUSY)
420			goto out;
421	}
422
423	rc = ocxl_link_remove_pe(afu->link_token, ctx->pe);
424	if (unlikely(rc)) {
425		dev_err(dev, "%s: ocxl_link_remove_pe failed rc=%d\n",
426			__func__, rc);
427		goto out;
428	}
429out:
430	return rc;
431}
432
433/**
434 * ocxlflash_afu_reset() - reset the AFU
435 * @ctx_cookie:	Adapter context.
436 */
437static int ocxlflash_afu_reset(void *ctx_cookie)
438{
439	struct ocxlflash_context *ctx = ctx_cookie;
440	struct device *dev = ctx->hw_afu->dev;
441
442	/* Pending implementation from OCXL transport services */
443	dev_err_once(dev, "%s: afu_reset() fop not supported\n", __func__);
444
445	/* Silently return success until it is implemented */
446	return 0;
447}
448
449/**
450 * ocxlflash_set_master() - sets the context as master
451 * @ctx_cookie:	Adapter context to set as master.
452 */
453static void ocxlflash_set_master(void *ctx_cookie)
454{
455	struct ocxlflash_context *ctx = ctx_cookie;
456
457	ctx->master = true;
458}
459
460/**
461 * ocxlflash_get_context() - obtains the context associated with the host
462 * @pdev:	PCI device associated with the host.
463 * @afu_cookie:	Hardware AFU associated with the host.
464 *
465 * Return: returns the pointer to host adapter context
466 */
467static void *ocxlflash_get_context(struct pci_dev *pdev, void *afu_cookie)
468{
469	struct ocxl_hw_afu *afu = afu_cookie;
470
471	return afu->ocxl_ctx;
472}
473
474/**
475 * ocxlflash_dev_context_init() - allocate and initialize an adapter context
476 * @pdev:	PCI device associated with the host.
477 * @afu_cookie:	Hardware AFU associated with the host.
478 *
479 * Return: returns the adapter context on success, ERR_PTR on failure
480 */
481static void *ocxlflash_dev_context_init(struct pci_dev *pdev, void *afu_cookie)
482{
483	struct ocxl_hw_afu *afu = afu_cookie;
484	struct device *dev = afu->dev;
485	struct ocxlflash_context *ctx;
486	int rc;
487
488	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
489	if (unlikely(!ctx)) {
490		dev_err(dev, "%s: Context allocation failed\n", __func__);
491		rc = -ENOMEM;
492		goto err1;
493	}
494
495	idr_preload(GFP_KERNEL);
496	rc = idr_alloc(&afu->idr, ctx, 0, afu->max_pasid, GFP_NOWAIT);
497	idr_preload_end();
498	if (unlikely(rc < 0)) {
499		dev_err(dev, "%s: idr_alloc failed rc=%d\n", __func__, rc);
500		goto err2;
501	}
502
503	spin_lock_init(&ctx->slock);
504	init_waitqueue_head(&ctx->wq);
505	mutex_init(&ctx->state_mutex);
506
507	ctx->state = OPENED;
508	ctx->pe = rc;
509	ctx->master = false;
510	ctx->mapping = NULL;
511	ctx->hw_afu = afu;
512	ctx->irq_bitmap = 0;
513	ctx->pending_irq = false;
514	ctx->pending_fault = false;
515out:
516	return ctx;
517err2:
518	kfree(ctx);
519err1:
520	ctx = ERR_PTR(rc);
521	goto out;
522}
523
524/**
525 * ocxlflash_release_context() - releases an adapter context
526 * @ctx_cookie:	Adapter context to be released.
527 *
528 * Return: 0 on success, -errno on failure
529 */
530static int ocxlflash_release_context(void *ctx_cookie)
531{
532	struct ocxlflash_context *ctx = ctx_cookie;
533	struct device *dev;
534	int rc = 0;
535
536	if (!ctx)
537		goto out;
538
539	dev = ctx->hw_afu->dev;
540	mutex_lock(&ctx->state_mutex);
541	if (ctx->state >= STARTED) {
542		dev_err(dev, "%s: Context in use, state=%d\n", __func__,
543			ctx->state);
544		mutex_unlock(&ctx->state_mutex);
545		rc = -EBUSY;
546		goto out;
547	}
548	mutex_unlock(&ctx->state_mutex);
549
550	idr_remove(&ctx->hw_afu->idr, ctx->pe);
551	ocxlflash_release_mapping(ctx);
552	kfree(ctx);
553out:
554	return rc;
555}
556
557/**
558 * ocxlflash_perst_reloads_same_image() - sets the image reload policy
559 * @afu_cookie:	Hardware AFU associated with the host.
560 * @image:	Whether to load the same image on PERST.
561 */
562static void ocxlflash_perst_reloads_same_image(void *afu_cookie, bool image)
563{
564	struct ocxl_hw_afu *afu = afu_cookie;
565
566	afu->perst_same_image = image;
567}
568
569/**
570 * ocxlflash_read_adapter_vpd() - reads the adapter VPD
571 * @pdev:	PCI device associated with the host.
572 * @buf:	Buffer to get the VPD data.
573 * @count:	Size of buffer (maximum bytes that can be read).
574 *
575 * Return: size of VPD on success, -errno on failure
576 */
577static ssize_t ocxlflash_read_adapter_vpd(struct pci_dev *pdev, void *buf,
578					  size_t count)
579{
580	return pci_read_vpd(pdev, 0, count, buf);
581}
582
583/**
584 * free_afu_irqs() - internal service to free interrupts
585 * @ctx:	Adapter context.
586 */
587static void free_afu_irqs(struct ocxlflash_context *ctx)
588{
589	struct ocxl_hw_afu *afu = ctx->hw_afu;
590	struct device *dev = afu->dev;
591	int i;
592
593	if (!ctx->irqs) {
594		dev_err(dev, "%s: Interrupts not allocated\n", __func__);
595		return;
596	}
597
598	for (i = ctx->num_irqs; i >= 0; i--)
599		ocxl_link_free_irq(afu->link_token, ctx->irqs[i].hwirq);
600
601	kfree(ctx->irqs);
602	ctx->irqs = NULL;
603}
604
605/**
606 * alloc_afu_irqs() - internal service to allocate interrupts
607 * @ctx:	Context associated with the request.
608 * @num:	Number of interrupts requested.
609 *
610 * Return: 0 on success, -errno on failure
611 */
612static int alloc_afu_irqs(struct ocxlflash_context *ctx, int num)
613{
614	struct ocxl_hw_afu *afu = ctx->hw_afu;
615	struct device *dev = afu->dev;
616	struct ocxlflash_irqs *irqs;
617	int rc = 0;
618	int hwirq;
619	int i;
620
621	if (ctx->irqs) {
622		dev_err(dev, "%s: Interrupts already allocated\n", __func__);
623		rc = -EEXIST;
624		goto out;
625	}
626
627	if (num > OCXL_MAX_IRQS) {
628		dev_err(dev, "%s: Too many interrupts num=%d\n", __func__, num);
629		rc = -EINVAL;
630		goto out;
631	}
632
633	irqs = kcalloc(num, sizeof(*irqs), GFP_KERNEL);
634	if (unlikely(!irqs)) {
635		dev_err(dev, "%s: Context irqs allocation failed\n", __func__);
636		rc = -ENOMEM;
637		goto out;
638	}
639
640	for (i = 0; i < num; i++) {
641		rc = ocxl_link_irq_alloc(afu->link_token, &hwirq);
642		if (unlikely(rc)) {
643			dev_err(dev, "%s: ocxl_link_irq_alloc failed rc=%d\n",
644				__func__, rc);
645			goto err;
646		}
647
648		irqs[i].hwirq = hwirq;
649	}
650
651	ctx->irqs = irqs;
652	ctx->num_irqs = num;
653out:
654	return rc;
655err:
656	for (i = i-1; i >= 0; i--)
657		ocxl_link_free_irq(afu->link_token, irqs[i].hwirq);
658	kfree(irqs);
659	goto out;
660}
661
662/**
663 * ocxlflash_allocate_afu_irqs() - allocates the requested number of interrupts
664 * @ctx_cookie:	Context associated with the request.
665 * @num:	Number of interrupts requested.
666 *
667 * Return: 0 on success, -errno on failure
668 */
669static int ocxlflash_allocate_afu_irqs(void *ctx_cookie, int num)
670{
671	return alloc_afu_irqs(ctx_cookie, num);
672}
673
674/**
675 * ocxlflash_free_afu_irqs() - frees the interrupts of an adapter context
676 * @ctx_cookie:	Adapter context.
677 */
678static void ocxlflash_free_afu_irqs(void *ctx_cookie)
679{
680	free_afu_irqs(ctx_cookie);
681}
682
683/**
684 * ocxlflash_unconfig_afu() - unconfigure the AFU
685 * @afu: AFU associated with the host.
686 */
687static void ocxlflash_unconfig_afu(struct ocxl_hw_afu *afu)
688{
689	if (afu->gmmio_virt) {
690		iounmap(afu->gmmio_virt);
691		afu->gmmio_virt = NULL;
692	}
693}
694
695/**
696 * ocxlflash_destroy_afu() - destroy the AFU structure
697 * @afu_cookie:	AFU to be freed.
698 */
699static void ocxlflash_destroy_afu(void *afu_cookie)
700{
701	struct ocxl_hw_afu *afu = afu_cookie;
702	int pos;
703
704	if (!afu)
705		return;
706
707	ocxlflash_release_context(afu->ocxl_ctx);
708	idr_destroy(&afu->idr);
709
710	/* Disable the AFU */
711	pos = afu->acfg.dvsec_afu_control_pos;
712	ocxl_config_set_afu_state(afu->pdev, pos, 0);
713
714	ocxlflash_unconfig_afu(afu);
715	kfree(afu);
716}
717
718/**
719 * ocxlflash_config_fn() - configure the host function
720 * @pdev:	PCI device associated with the host.
721 * @afu:	AFU associated with the host.
722 *
723 * Return: 0 on success, -errno on failure
724 */
725static int ocxlflash_config_fn(struct pci_dev *pdev, struct ocxl_hw_afu *afu)
726{
727	struct ocxl_fn_config *fcfg = &afu->fcfg;
728	struct device *dev = &pdev->dev;
729	u16 base, enabled, supported;
730	int rc = 0;
731
732	/* Read DVSEC config of the function */
733	rc = ocxl_config_read_function(pdev, fcfg);
734	if (unlikely(rc)) {
735		dev_err(dev, "%s: ocxl_config_read_function failed rc=%d\n",
736			__func__, rc);
737		goto out;
738	}
739
740	/* Check if function has AFUs defined, only 1 per function supported */
741	if (fcfg->max_afu_index >= 0) {
742		afu->is_present = true;
743		if (fcfg->max_afu_index != 0)
744			dev_warn(dev, "%s: Unexpected AFU index value %d\n",
745				 __func__, fcfg->max_afu_index);
746	}
747
748	rc = ocxl_config_get_actag_info(pdev, &base, &enabled, &supported);
749	if (unlikely(rc)) {
750		dev_err(dev, "%s: ocxl_config_get_actag_info failed rc=%d\n",
751			__func__, rc);
752		goto out;
753	}
754
755	afu->fn_actag_base = base;
756	afu->fn_actag_enabled = enabled;
757
758	ocxl_config_set_actag(pdev, fcfg->dvsec_function_pos, base, enabled);
759	dev_dbg(dev, "%s: Function acTag range base=%u enabled=%u\n",
760		__func__, base, enabled);
761
762	rc = ocxl_link_setup(pdev, 0, &afu->link_token);
763	if (unlikely(rc)) {
764		dev_err(dev, "%s: ocxl_link_setup failed rc=%d\n",
765			__func__, rc);
766		goto out;
767	}
768
769	rc = ocxl_config_set_TL(pdev, fcfg->dvsec_tl_pos);
770	if (unlikely(rc)) {
771		dev_err(dev, "%s: ocxl_config_set_TL failed rc=%d\n",
772			__func__, rc);
773		goto err;
774	}
775out:
776	return rc;
777err:
778	ocxl_link_release(pdev, afu->link_token);
779	goto out;
780}
781
782/**
783 * ocxlflash_unconfig_fn() - unconfigure the host function
784 * @pdev:	PCI device associated with the host.
785 * @afu:	AFU associated with the host.
786 */
787static void ocxlflash_unconfig_fn(struct pci_dev *pdev, struct ocxl_hw_afu *afu)
788{
789	ocxl_link_release(pdev, afu->link_token);
790}
791
792/**
793 * ocxlflash_map_mmio() - map the AFU MMIO space
794 * @afu: AFU associated with the host.
795 *
796 * Return: 0 on success, -errno on failure
797 */
798static int ocxlflash_map_mmio(struct ocxl_hw_afu *afu)
799{
800	struct ocxl_afu_config *acfg = &afu->acfg;
801	struct pci_dev *pdev = afu->pdev;
802	struct device *dev = afu->dev;
803	phys_addr_t gmmio, ppmmio;
804	int rc = 0;
805
806	rc = pci_request_region(pdev, acfg->global_mmio_bar, "ocxlflash");
807	if (unlikely(rc)) {
808		dev_err(dev, "%s: pci_request_region for global failed rc=%d\n",
809			__func__, rc);
810		goto out;
811	}
812	gmmio = pci_resource_start(pdev, acfg->global_mmio_bar);
813	gmmio += acfg->global_mmio_offset;
814
815	rc = pci_request_region(pdev, acfg->pp_mmio_bar, "ocxlflash");
816	if (unlikely(rc)) {
817		dev_err(dev, "%s: pci_request_region for pp bar failed rc=%d\n",
818			__func__, rc);
819		goto err1;
820	}
821	ppmmio = pci_resource_start(pdev, acfg->pp_mmio_bar);
822	ppmmio += acfg->pp_mmio_offset;
823
824	afu->gmmio_virt = ioremap(gmmio, acfg->global_mmio_size);
825	if (unlikely(!afu->gmmio_virt)) {
826		dev_err(dev, "%s: MMIO mapping failed\n", __func__);
827		rc = -ENOMEM;
828		goto err2;
829	}
830
831	afu->gmmio_phys = gmmio;
832	afu->ppmmio_phys = ppmmio;
833out:
834	return rc;
835err2:
836	pci_release_region(pdev, acfg->pp_mmio_bar);
837err1:
838	pci_release_region(pdev, acfg->global_mmio_bar);
839	goto out;
840}
841
842/**
843 * ocxlflash_config_afu() - configure the host AFU
844 * @pdev:	PCI device associated with the host.
845 * @afu:	AFU associated with the host.
846 *
847 * Must be called _after_ host function configuration.
848 *
849 * Return: 0 on success, -errno on failure
850 */
851static int ocxlflash_config_afu(struct pci_dev *pdev, struct ocxl_hw_afu *afu)
852{
853	struct ocxl_afu_config *acfg = &afu->acfg;
854	struct ocxl_fn_config *fcfg = &afu->fcfg;
855	struct device *dev = &pdev->dev;
856	int count;
857	int base;
858	int pos;
859	int rc = 0;
860
861	/* This HW AFU function does not have any AFUs defined */
862	if (!afu->is_present)
863		goto out;
864
865	/* Read AFU config at index 0 */
866	rc = ocxl_config_read_afu(pdev, fcfg, acfg, 0);
867	if (unlikely(rc)) {
868		dev_err(dev, "%s: ocxl_config_read_afu failed rc=%d\n",
869			__func__, rc);
870		goto out;
871	}
872
873	/* Only one AFU per function is supported, so actag_base is same */
874	base = afu->fn_actag_base;
875	count = min_t(int, acfg->actag_supported, afu->fn_actag_enabled);
876	pos = acfg->dvsec_afu_control_pos;
877
878	ocxl_config_set_afu_actag(pdev, pos, base, count);
879	dev_dbg(dev, "%s: acTag base=%d enabled=%d\n", __func__, base, count);
880	afu->afu_actag_base = base;
881	afu->afu_actag_enabled = count;
882	afu->max_pasid = 1 << acfg->pasid_supported_log;
883
884	ocxl_config_set_afu_pasid(pdev, pos, 0, acfg->pasid_supported_log);
885
886	rc = ocxlflash_map_mmio(afu);
887	if (unlikely(rc)) {
888		dev_err(dev, "%s: ocxlflash_map_mmio failed rc=%d\n",
889			__func__, rc);
890		goto out;
891	}
892
893	/* Enable the AFU */
894	ocxl_config_set_afu_state(pdev, acfg->dvsec_afu_control_pos, 1);
895out:
896	return rc;
897}
898
899/**
900 * ocxlflash_create_afu() - create the AFU for OCXL
901 * @pdev:	PCI device associated with the host.
902 *
903 * Return: AFU on success, NULL on failure
904 */
905static void *ocxlflash_create_afu(struct pci_dev *pdev)
906{
907	struct device *dev = &pdev->dev;
908	struct ocxlflash_context *ctx;
909	struct ocxl_hw_afu *afu;
910	int rc;
911
912	afu = kzalloc(sizeof(*afu), GFP_KERNEL);
913	if (unlikely(!afu)) {
914		dev_err(dev, "%s: HW AFU allocation failed\n", __func__);
915		goto out;
916	}
917
918	afu->pdev = pdev;
919	afu->dev = dev;
920	idr_init(&afu->idr);
921
922	rc = ocxlflash_config_fn(pdev, afu);
923	if (unlikely(rc)) {
924		dev_err(dev, "%s: Function configuration failed rc=%d\n",
925			__func__, rc);
926		goto err1;
927	}
928
929	rc = ocxlflash_config_afu(pdev, afu);
930	if (unlikely(rc)) {
931		dev_err(dev, "%s: AFU configuration failed rc=%d\n",
932			__func__, rc);
933		goto err2;
934	}
935
936	ctx = ocxlflash_dev_context_init(pdev, afu);
937	if (IS_ERR(ctx)) {
938		rc = PTR_ERR(ctx);
939		dev_err(dev, "%s: ocxlflash_dev_context_init failed rc=%d\n",
940			__func__, rc);
941		goto err3;
942	}
943
944	afu->ocxl_ctx = ctx;
945out:
946	return afu;
947err3:
948	ocxlflash_unconfig_afu(afu);
949err2:
950	ocxlflash_unconfig_fn(pdev, afu);
951err1:
952	idr_destroy(&afu->idr);
953	kfree(afu);
954	afu = NULL;
955	goto out;
956}
957
958/**
959 * ctx_event_pending() - check for any event pending on the context
960 * @ctx:	Context to be checked.
961 *
962 * Return: true if there is an event pending, false if none pending
963 */
964static inline bool ctx_event_pending(struct ocxlflash_context *ctx)
965{
966	if (ctx->pending_irq || ctx->pending_fault)
967		return true;
968
969	return false;
970}
971
972/**
973 * afu_poll() - poll the AFU for events on the context
974 * @file:	File associated with the adapter context.
975 * @poll:	Poll structure from the user.
976 *
977 * Return: poll mask
978 */
979static unsigned int afu_poll(struct file *file, struct poll_table_struct *poll)
980{
981	struct ocxlflash_context *ctx = file->private_data;
982	struct device *dev = ctx->hw_afu->dev;
983	ulong lock_flags;
984	int mask = 0;
985
986	poll_wait(file, &ctx->wq, poll);
987
988	spin_lock_irqsave(&ctx->slock, lock_flags);
989	if (ctx_event_pending(ctx))
990		mask |= POLLIN | POLLRDNORM;
991	else if (ctx->state == CLOSED)
992		mask |= POLLERR;
993	spin_unlock_irqrestore(&ctx->slock, lock_flags);
994
995	dev_dbg(dev, "%s: Poll wait completed for pe %i mask %i\n",
996		__func__, ctx->pe, mask);
997
998	return mask;
999}
1000
1001/**
1002 * afu_read() - perform a read on the context for any event
1003 * @file:	File associated with the adapter context.
1004 * @buf:	Buffer to receive the data.
1005 * @count:	Size of buffer (maximum bytes that can be read).
1006 * @off:	Offset.
1007 *
1008 * Return: size of the data read on success, -errno on failure
1009 */
1010static ssize_t afu_read(struct file *file, char __user *buf, size_t count,
1011			loff_t *off)
1012{
1013	struct ocxlflash_context *ctx = file->private_data;
1014	struct device *dev = ctx->hw_afu->dev;
1015	struct cxl_event event;
1016	ulong lock_flags;
1017	ssize_t esize;
1018	ssize_t rc;
1019	int bit;
1020	DEFINE_WAIT(event_wait);
1021
1022	if (*off != 0) {
1023		dev_err(dev, "%s: Non-zero offset not supported, off=%lld\n",
1024			__func__, *off);
1025		rc = -EINVAL;
1026		goto out;
1027	}
1028
1029	spin_lock_irqsave(&ctx->slock, lock_flags);
1030
1031	for (;;) {
1032		prepare_to_wait(&ctx->wq, &event_wait, TASK_INTERRUPTIBLE);
1033
1034		if (ctx_event_pending(ctx) || (ctx->state == CLOSED))
1035			break;
1036
1037		if (file->f_flags & O_NONBLOCK) {
1038			dev_err(dev, "%s: File cannot be blocked on I/O\n",
1039				__func__);
1040			rc = -EAGAIN;
1041			goto err;
1042		}
1043
1044		if (signal_pending(current)) {
1045			dev_err(dev, "%s: Signal pending on the process\n",
1046				__func__);
1047			rc = -ERESTARTSYS;
1048			goto err;
1049		}
1050
1051		spin_unlock_irqrestore(&ctx->slock, lock_flags);
1052		schedule();
1053		spin_lock_irqsave(&ctx->slock, lock_flags);
1054	}
1055
1056	finish_wait(&ctx->wq, &event_wait);
1057
1058	memset(&event, 0, sizeof(event));
1059	event.header.process_element = ctx->pe;
1060	event.header.size = sizeof(struct cxl_event_header);
1061	if (ctx->pending_irq) {
1062		esize = sizeof(struct cxl_event_afu_interrupt);
1063		event.header.size += esize;
1064		event.header.type = CXL_EVENT_AFU_INTERRUPT;
1065
1066		bit = find_first_bit(&ctx->irq_bitmap, ctx->num_irqs);
1067		clear_bit(bit, &ctx->irq_bitmap);
1068		event.irq.irq = bit + 1;
1069		if (bitmap_empty(&ctx->irq_bitmap, ctx->num_irqs))
1070			ctx->pending_irq = false;
1071	} else if (ctx->pending_fault) {
1072		event.header.size += sizeof(struct cxl_event_data_storage);
1073		event.header.type = CXL_EVENT_DATA_STORAGE;
1074		event.fault.addr = ctx->fault_addr;
1075		event.fault.dsisr = ctx->fault_dsisr;
1076		ctx->pending_fault = false;
1077	}
1078
1079	spin_unlock_irqrestore(&ctx->slock, lock_flags);
1080
1081	if (copy_to_user(buf, &event, event.header.size)) {
1082		dev_err(dev, "%s: copy_to_user failed\n", __func__);
1083		rc = -EFAULT;
1084		goto out;
1085	}
1086
1087	rc = event.header.size;
1088out:
1089	return rc;
1090err:
1091	finish_wait(&ctx->wq, &event_wait);
1092	spin_unlock_irqrestore(&ctx->slock, lock_flags);
1093	goto out;
1094}
1095
1096/**
1097 * afu_release() - release and free the context
1098 * @inode:	File inode pointer.
1099 * @file:	File associated with the context.
1100 *
1101 * Return: 0 on success, -errno on failure
1102 */
1103static int afu_release(struct inode *inode, struct file *file)
1104{
1105	struct ocxlflash_context *ctx = file->private_data;
1106	int i;
1107
1108	/* Unmap and free the interrupts associated with the context */
1109	for (i = ctx->num_irqs; i >= 0; i--)
1110		afu_unmap_irq(0, ctx, i, ctx);
1111	free_afu_irqs(ctx);
1112
1113	return ocxlflash_release_context(ctx);
1114}
1115
1116/**
1117 * ocxlflash_mmap_fault() - mmap fault handler
1118 * @vmf:	VM fault associated with current fault.
1119 *
1120 * Return: 0 on success, -errno on failure
1121 */
1122static vm_fault_t ocxlflash_mmap_fault(struct vm_fault *vmf)
1123{
1124	struct vm_area_struct *vma = vmf->vma;
1125	struct ocxlflash_context *ctx = vma->vm_file->private_data;
1126	struct device *dev = ctx->hw_afu->dev;
1127	u64 mmio_area, offset;
1128
1129	offset = vmf->pgoff << PAGE_SHIFT;
1130	if (offset >= ctx->psn_size)
1131		return VM_FAULT_SIGBUS;
1132
1133	mutex_lock(&ctx->state_mutex);
1134	if (ctx->state != STARTED) {
1135		dev_err(dev, "%s: Context not started, state=%d\n",
1136			__func__, ctx->state);
1137		mutex_unlock(&ctx->state_mutex);
1138		return VM_FAULT_SIGBUS;
1139	}
1140	mutex_unlock(&ctx->state_mutex);
1141
1142	mmio_area = ctx->psn_phys;
1143	mmio_area += offset;
1144
1145	return vmf_insert_pfn(vma, vmf->address, mmio_area >> PAGE_SHIFT);
1146}
1147
1148static const struct vm_operations_struct ocxlflash_vmops = {
1149	.fault = ocxlflash_mmap_fault,
1150};
1151
1152/**
1153 * afu_mmap() - map the fault handler operations
1154 * @file:	File associated with the context.
1155 * @vma:	VM area associated with mapping.
1156 *
1157 * Return: 0 on success, -errno on failure
1158 */
1159static int afu_mmap(struct file *file, struct vm_area_struct *vma)
1160{
1161	struct ocxlflash_context *ctx = file->private_data;
1162
1163	if ((vma_pages(vma) + vma->vm_pgoff) >
1164	    (ctx->psn_size >> PAGE_SHIFT))
1165		return -EINVAL;
1166
1167	vma->vm_flags |= VM_IO | VM_PFNMAP;
1168	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
1169	vma->vm_ops = &ocxlflash_vmops;
1170	return 0;
1171}
1172
1173static const struct file_operations ocxl_afu_fops = {
1174	.owner		= THIS_MODULE,
1175	.poll		= afu_poll,
1176	.read		= afu_read,
1177	.release	= afu_release,
1178	.mmap		= afu_mmap,
1179};
1180
1181#define PATCH_FOPS(NAME)						\
1182	do { if (!fops->NAME) fops->NAME = ocxl_afu_fops.NAME; } while (0)
1183
1184/**
1185 * ocxlflash_get_fd() - get file descriptor for an adapter context
1186 * @ctx_cookie:	Adapter context.
1187 * @fops:	File operations to be associated.
1188 * @fd:		File descriptor to be returned back.
1189 *
1190 * Return: pointer to the file on success, ERR_PTR on failure
1191 */
1192static struct file *ocxlflash_get_fd(void *ctx_cookie,
1193				     struct file_operations *fops, int *fd)
1194{
1195	struct ocxlflash_context *ctx = ctx_cookie;
1196	struct device *dev = ctx->hw_afu->dev;
1197	struct file *file;
1198	int flags, fdtmp;
1199	int rc = 0;
1200	char *name = NULL;
1201
1202	/* Only allow one fd per context */
1203	if (ctx->mapping) {
1204		dev_err(dev, "%s: Context is already mapped to an fd\n",
1205			__func__);
1206		rc = -EEXIST;
1207		goto err1;
1208	}
1209
1210	flags = O_RDWR | O_CLOEXEC;
1211
1212	/* This code is similar to anon_inode_getfd() */
1213	rc = get_unused_fd_flags(flags);
1214	if (unlikely(rc < 0)) {
1215		dev_err(dev, "%s: get_unused_fd_flags failed rc=%d\n",
1216			__func__, rc);
1217		goto err1;
1218	}
1219	fdtmp = rc;
1220
1221	/* Patch the file ops that are not defined */
1222	if (fops) {
1223		PATCH_FOPS(poll);
1224		PATCH_FOPS(read);
1225		PATCH_FOPS(release);
1226		PATCH_FOPS(mmap);
1227	} else /* Use default ops */
1228		fops = (struct file_operations *)&ocxl_afu_fops;
1229
1230	name = kasprintf(GFP_KERNEL, "ocxlflash:%d", ctx->pe);
1231	file = ocxlflash_getfile(dev, name, fops, ctx, flags);
1232	kfree(name);
1233	if (IS_ERR(file)) {
1234		rc = PTR_ERR(file);
1235		dev_err(dev, "%s: ocxlflash_getfile failed rc=%d\n",
1236			__func__, rc);
1237		goto err2;
1238	}
1239
1240	ctx->mapping = file->f_mapping;
1241	*fd = fdtmp;
1242out:
1243	return file;
1244err2:
1245	put_unused_fd(fdtmp);
1246err1:
1247	file = ERR_PTR(rc);
1248	goto out;
1249}
1250
1251/**
1252 * ocxlflash_fops_get_context() - get the context associated with the file
1253 * @file:	File associated with the adapter context.
1254 *
1255 * Return: pointer to the context
1256 */
1257static void *ocxlflash_fops_get_context(struct file *file)
1258{
1259	return file->private_data;
1260}
1261
1262/**
1263 * ocxlflash_afu_irq() - interrupt handler for user contexts
1264 * @irq:	Interrupt number.
1265 * @data:	Private data provided at interrupt registration, the context.
1266 *
1267 * Return: Always return IRQ_HANDLED.
1268 */
1269static irqreturn_t ocxlflash_afu_irq(int irq, void *data)
1270{
1271	struct ocxlflash_context *ctx = data;
1272	struct device *dev = ctx->hw_afu->dev;
1273	int i;
1274
1275	dev_dbg(dev, "%s: Interrupt raised for pe %i virq %i\n",
1276		__func__, ctx->pe, irq);
1277
1278	for (i = 0; i < ctx->num_irqs; i++) {
1279		if (ctx->irqs[i].virq == irq)
1280			break;
1281	}
1282	if (unlikely(i >= ctx->num_irqs)) {
1283		dev_err(dev, "%s: Received AFU IRQ out of range\n", __func__);
1284		goto out;
1285	}
1286
1287	spin_lock(&ctx->slock);
1288	set_bit(i - 1, &ctx->irq_bitmap);
1289	ctx->pending_irq = true;
1290	spin_unlock(&ctx->slock);
1291
1292	wake_up_all(&ctx->wq);
1293out:
1294	return IRQ_HANDLED;
1295}
1296
1297/**
1298 * ocxlflash_start_work() - start a user context
1299 * @ctx_cookie:	Context to be started.
1300 * @num_irqs:	Number of interrupts requested.
1301 *
1302 * Return: 0 on success, -errno on failure
1303 */
1304static int ocxlflash_start_work(void *ctx_cookie, u64 num_irqs)
1305{
1306	struct ocxlflash_context *ctx = ctx_cookie;
1307	struct ocxl_hw_afu *afu = ctx->hw_afu;
1308	struct device *dev = afu->dev;
1309	char *name;
1310	int rc = 0;
1311	int i;
1312
1313	rc = alloc_afu_irqs(ctx, num_irqs);
1314	if (unlikely(rc < 0)) {
1315		dev_err(dev, "%s: alloc_afu_irqs failed rc=%d\n", __func__, rc);
1316		goto out;
1317	}
1318
1319	for (i = 0; i < num_irqs; i++) {
1320		name = kasprintf(GFP_KERNEL, "ocxlflash-%s-pe%i-%i",
1321				 dev_name(dev), ctx->pe, i);
1322		rc = afu_map_irq(0, ctx, i, ocxlflash_afu_irq, ctx, name);
1323		kfree(name);
1324		if (unlikely(rc < 0)) {
1325			dev_err(dev, "%s: afu_map_irq failed rc=%d\n",
1326				__func__, rc);
1327			goto err;
1328		}
1329	}
1330
1331	rc = start_context(ctx);
1332	if (unlikely(rc)) {
1333		dev_err(dev, "%s: start_context failed rc=%d\n", __func__, rc);
1334		goto err;
1335	}
1336out:
1337	return rc;
1338err:
1339	for (i = i-1; i >= 0; i--)
1340		afu_unmap_irq(0, ctx, i, ctx);
1341	free_afu_irqs(ctx);
1342	goto out;
1343};
1344
1345/**
1346 * ocxlflash_fd_mmap() - mmap handler for adapter file descriptor
1347 * @file:	File installed with adapter file descriptor.
1348 * @vma:	VM area associated with mapping.
1349 *
1350 * Return: 0 on success, -errno on failure
1351 */
1352static int ocxlflash_fd_mmap(struct file *file, struct vm_area_struct *vma)
1353{
1354	return afu_mmap(file, vma);
1355}
1356
1357/**
1358 * ocxlflash_fd_release() - release the context associated with the file
1359 * @inode:	File inode pointer.
1360 * @file:	File associated with the adapter context.
1361 *
1362 * Return: 0 on success, -errno on failure
1363 */
1364static int ocxlflash_fd_release(struct inode *inode, struct file *file)
1365{
1366	return afu_release(inode, file);
1367}
1368
1369/* Backend ops to ocxlflash services */
1370const struct cxlflash_backend_ops cxlflash_ocxl_ops = {
1371	.module			= THIS_MODULE,
1372	.psa_map		= ocxlflash_psa_map,
1373	.psa_unmap		= ocxlflash_psa_unmap,
1374	.process_element	= ocxlflash_process_element,
1375	.map_afu_irq		= ocxlflash_map_afu_irq,
1376	.unmap_afu_irq		= ocxlflash_unmap_afu_irq,
1377	.get_irq_objhndl	= ocxlflash_get_irq_objhndl,
1378	.start_context		= ocxlflash_start_context,
1379	.stop_context		= ocxlflash_stop_context,
1380	.afu_reset		= ocxlflash_afu_reset,
1381	.set_master		= ocxlflash_set_master,
1382	.get_context		= ocxlflash_get_context,
1383	.dev_context_init	= ocxlflash_dev_context_init,
1384	.release_context	= ocxlflash_release_context,
1385	.perst_reloads_same_image = ocxlflash_perst_reloads_same_image,
1386	.read_adapter_vpd	= ocxlflash_read_adapter_vpd,
1387	.allocate_afu_irqs	= ocxlflash_allocate_afu_irqs,
1388	.free_afu_irqs		= ocxlflash_free_afu_irqs,
1389	.create_afu		= ocxlflash_create_afu,
1390	.destroy_afu		= ocxlflash_destroy_afu,
1391	.get_fd			= ocxlflash_get_fd,
1392	.fops_get_context	= ocxlflash_fops_get_context,
1393	.start_work		= ocxlflash_start_work,
1394	.fd_mmap		= ocxlflash_fd_mmap,
1395	.fd_release		= ocxlflash_fd_release,
1396};
1397