xref: /linux/drivers/gpu/drm/xe/xe_gt_sriov_pf_control_types.h (revision 6dfafbd0299a60bfb5d5e277fdf100037c7ded07)
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2024 Intel Corporation
4  */
5 
6 #ifndef _XE_GT_SRIOV_PF_CONTROL_TYPES_H_
7 #define _XE_GT_SRIOV_PF_CONTROL_TYPES_H_
8 
9 #include <linux/completion.h>
10 #include <linux/spinlock.h>
11 #include <linux/workqueue_types.h>
12 
13 /**
14  * enum xe_gt_sriov_control_bits - Various bits used by the PF to represent a VF state
15  *
16  * @XE_GT_SRIOV_STATE_WIP: indicates that some operations are in progress.
17  * @XE_GT_SRIOV_STATE_FLR_WIP: indicates that a VF FLR is in progress.
18  * @XE_GT_SRIOV_STATE_FLR_SEND_START: indicates that the PF wants to send a FLR START command.
19  * @XE_GT_SRIOV_STATE_FLR_WAIT_GUC: indicates that the PF awaits for a response from the GuC.
20  * @XE_GT_SRIOV_STATE_FLR_GUC_DONE: indicates that the PF has received a response from the GuC.
21  * @XE_GT_SRIOV_STATE_FLR_SYNC: indicates that the PF awaits to synchronize with other GuCs.
22  * @XE_GT_SRIOV_STATE_FLR_RESET_CONFIG: indicates that the PF needs to clear VF's resources.
23  * @XE_GT_SRIOV_STATE_FLR_RESET_DATA: indicates that the PF needs to clear VF's data.
24  * @XE_GT_SRIOV_STATE_FLR_RESET_MMIO: indicates that the PF needs to reset VF's registers.
25  * @XE_GT_SRIOV_STATE_FLR_SEND_FINISH: indicates that the PF wants to send a FLR FINISH message.
26  * @XE_GT_SRIOV_STATE_FLR_FAILED: indicates that VF FLR sequence failed.
27  * @XE_GT_SRIOV_STATE_PAUSE_WIP: indicates that a VF pause operation is in progress.
28  * @XE_GT_SRIOV_STATE_PAUSE_SEND_PAUSE: indicates that the PF is about to send a PAUSE command.
29  * @XE_GT_SRIOV_STATE_PAUSE_WAIT_GUC: indicates that the PF awaits for a response from the GuC.
30  * @XE_GT_SRIOV_STATE_PAUSE_GUC_DONE: indicates that the PF has received a response from the GuC.
31  * @XE_GT_SRIOV_STATE_PAUSE_FAILED: indicates that a VF pause operation has failed.
32  * @XE_GT_SRIOV_STATE_PAUSED: indicates that the VF is paused.
33  * @XE_GT_SRIOV_STATE_SAVE_WIP: indicates that VF save operation is in progress.
34  * @XE_GT_SRIOV_STATE_SAVE_PROCESS_DATA: indicates that VF migration data is being produced.
35  * @XE_GT_SRIOV_STATE_SAVE_WAIT_DATA: indicates that PF awaits for space in migration data ring.
36  * @XE_GT_SRIOV_STATE_SAVE_DATA_DONE: indicates that all migration data was produced by Xe.
37  * @XE_GT_SRIOV_STATE_SAVE_FAILED: indicates that VF save operation has failed.
38  * @XE_GT_SRIOV_STATE_SAVED: indicates that VF data is saved.
39  * @XE_GT_SRIOV_STATE_RESTORE_WIP: indicates that VF restore operation is in progress.
40  * @XE_GT_SRIOV_STATE_RESTORE_PROCESS_DATA: indicates that VF migration data is being consumed.
41  * @XE_GT_SRIOV_STATE_RESTORE_WAIT_DATA: indicates that PF awaits for data in migration data ring.
42  * @XE_GT_SRIOV_STATE_RESTORE_DATA_DONE: indicates that all migration data was produced by the user.
43  * @XE_GT_SRIOV_STATE_RESTORE_FAILED: indicates that VF restore operation has failed.
44  * @XE_GT_SRIOV_STATE_RESTORED: indicates that VF data is restored.
45  * @XE_GT_SRIOV_STATE_RESUME_WIP: indicates the a VF resume operation is in progress.
46  * @XE_GT_SRIOV_STATE_RESUME_SEND_RESUME: indicates that the PF is about to send RESUME command.
47  * @XE_GT_SRIOV_STATE_RESUME_FAILED: indicates that a VF resume operation has failed.
48  * @XE_GT_SRIOV_STATE_RESUMED: indicates that the VF was resumed.
49  * @XE_GT_SRIOV_STATE_STOP_WIP: indicates that a VF stop operation is in progress.
50  * @XE_GT_SRIOV_STATE_STOP_SEND_STOP: indicates that the PF wants to send a STOP command.
51  * @XE_GT_SRIOV_STATE_STOP_FAILED: indicates that the VF stop operation has failed
52  * @XE_GT_SRIOV_STATE_STOPPED: indicates that the VF was stopped.
53  * @XE_GT_SRIOV_STATE_MISMATCH: indicates that the PF has detected a VF state mismatch.
54  */
55 enum xe_gt_sriov_control_bits {
56 	XE_GT_SRIOV_STATE_WIP = 1,
57 
58 	XE_GT_SRIOV_STATE_FLR_WIP,
59 	XE_GT_SRIOV_STATE_FLR_SEND_START,
60 	XE_GT_SRIOV_STATE_FLR_WAIT_GUC,
61 	XE_GT_SRIOV_STATE_FLR_GUC_DONE,
62 	XE_GT_SRIOV_STATE_FLR_SYNC,
63 	XE_GT_SRIOV_STATE_FLR_RESET_CONFIG,
64 	XE_GT_SRIOV_STATE_FLR_RESET_DATA,
65 	XE_GT_SRIOV_STATE_FLR_RESET_MMIO,
66 	XE_GT_SRIOV_STATE_FLR_SEND_FINISH,
67 	XE_GT_SRIOV_STATE_FLR_FAILED,
68 
69 	XE_GT_SRIOV_STATE_PAUSE_WIP,
70 	XE_GT_SRIOV_STATE_PAUSE_SEND_PAUSE,
71 	XE_GT_SRIOV_STATE_PAUSE_WAIT_GUC,
72 	XE_GT_SRIOV_STATE_PAUSE_GUC_DONE,
73 	XE_GT_SRIOV_STATE_PAUSE_FAILED,
74 	XE_GT_SRIOV_STATE_PAUSED,
75 
76 	XE_GT_SRIOV_STATE_SAVE_WIP,
77 	XE_GT_SRIOV_STATE_SAVE_PROCESS_DATA,
78 	XE_GT_SRIOV_STATE_SAVE_WAIT_DATA,
79 	XE_GT_SRIOV_STATE_SAVE_DATA_DONE,
80 	XE_GT_SRIOV_STATE_SAVE_FAILED,
81 	XE_GT_SRIOV_STATE_SAVED,
82 
83 	XE_GT_SRIOV_STATE_RESTORE_WIP,
84 	XE_GT_SRIOV_STATE_RESTORE_PROCESS_DATA,
85 	XE_GT_SRIOV_STATE_RESTORE_WAIT_DATA,
86 	XE_GT_SRIOV_STATE_RESTORE_DATA_DONE,
87 	XE_GT_SRIOV_STATE_RESTORE_FAILED,
88 	XE_GT_SRIOV_STATE_RESTORED,
89 
90 	XE_GT_SRIOV_STATE_RESUME_WIP,
91 	XE_GT_SRIOV_STATE_RESUME_SEND_RESUME,
92 	XE_GT_SRIOV_STATE_RESUME_FAILED,
93 	XE_GT_SRIOV_STATE_RESUMED,
94 
95 	XE_GT_SRIOV_STATE_STOP_WIP,
96 	XE_GT_SRIOV_STATE_STOP_SEND_STOP,
97 	XE_GT_SRIOV_STATE_STOP_FAILED,
98 	XE_GT_SRIOV_STATE_STOPPED,
99 
100 	XE_GT_SRIOV_STATE_MISMATCH, /* always keep as last */
101 };
102 
103 #define XE_GT_SRIOV_NUM_STATES (XE_GT_SRIOV_STATE_MISMATCH + 1)
104 
105 /**
106  * struct xe_gt_sriov_control_state - GT-level per-VF control state.
107  *
108  * Used by the PF driver to maintain per-VF control data.
109  */
110 struct xe_gt_sriov_control_state {
111 	/** @state: VF state bits */
112 	DECLARE_BITMAP(state, XE_GT_SRIOV_NUM_STATES);
113 
114 	/** @done: completion of async operations */
115 	struct completion done;
116 
117 	/** @link: link into worker list */
118 	struct list_head link;
119 };
120 
121 /**
122  * struct xe_gt_sriov_pf_control - GT-level control data.
123  *
124  * Used by the PF driver to maintain its data.
125  */
126 struct xe_gt_sriov_pf_control {
127 	/** @worker: worker that executes a VF operations */
128 	struct work_struct worker;
129 
130 	/** @list: list of VF entries that have a pending work */
131 	struct list_head list;
132 
133 	/** @lock: protects VF pending list */
134 	spinlock_t lock;
135 };
136 
137 #endif
138