Home
last modified time | relevance | path

Searched refs:gsp (Results 1 – 25 of 74) sorted by relevance

123

/linux/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/
H A Dbase.c26 nvkm_gsp_intr_nonstall(struct nvkm_gsp *gsp, enum nvkm_subdev_type type, int inst) in nvkm_gsp_intr_nonstall() argument
28 for (int i = 0; i < gsp->intr_nr; i++) { in nvkm_gsp_intr_nonstall()
29 if (gsp->intr[i].type == type && gsp->intr[i].inst == inst) in nvkm_gsp_intr_nonstall()
30 return gsp->intr[i].nonstall; in nvkm_gsp_intr_nonstall()
37 nvkm_gsp_intr_stall(struct nvkm_gsp *gsp, enum nvkm_subdev_type type, int inst) in nvkm_gsp_intr_stall() argument
39 for (int i = 0; i < gsp->intr_nr; i++) { in nvkm_gsp_intr_stall()
40 if (gsp->intr[i].type == type && gsp->intr[i].inst == inst) { in nvkm_gsp_intr_stall()
41 if (gsp->intr[i].stall != ~0) in nvkm_gsp_intr_stall()
42 return gsp->intr[i].stall; in nvkm_gsp_intr_stall()
52 nvkm_gsp_gcx_ready(struct nvkm_gsp *gsp) in nvkm_gsp_gcx_ready() argument
[all …]
H A Dgh100.c20 gh100_gsp_fini(struct nvkm_gsp *gsp, enum nvkm_suspend_state suspend) in gh100_gsp_fini() argument
22 struct nvkm_falcon *falcon = &gsp->falcon; in gh100_gsp_fini()
26 ret = r535_gsp_fini(gsp, suspend); in gh100_gsp_fini()
44 gh100_gsp_lockdown_released(struct nvkm_gsp *gsp, u32 *mbox0) in gh100_gsp_lockdown_released() argument
49 *mbox0 = nvkm_falcon_rd32(&gsp->falcon, NV_PFALCON_FALCON_MAILBOX0); in gh100_gsp_lockdown_released()
56 u32 mbox1 = nvkm_falcon_rd32(&gsp->falcon, NV_PFALCON_FALCON_MAILBOX1); in gh100_gsp_lockdown_released()
59 if ((((u64)mbox1 << 32) | *mbox0) != gsp->fmc.args.addr) in gh100_gsp_lockdown_released()
64 data = nvkm_falcon_rd32(&gsp->falcon, NV_PFALCON_FALCON_HWCFG2); in gh100_gsp_lockdown_released()
69 gh100_gsp_init(struct nvkm_gsp *gsp) in gh100_gsp_init() argument
71 struct nvkm_subdev *subdev = &gsp->subdev; in gh100_gsp_init()
[all …]
H A Dfwsec.c89 nvkm_gsp_fwsec_patch(struct nvkm_gsp *gsp, struct nvkm_falcon_fw *fw, u32 if_offset, u32 init_cmd) in nvkm_gsp_fwsec_patch() argument
120 frtscmd->frts_region.addr = gsp->fb.wpr2.frts.addr >> 12; in nvkm_gsp_fwsec_patch()
121 frtscmd->frts_region.size = gsp->fb.wpr2.frts.size >> 12; in nvkm_gsp_fwsec_patch()
172 nvkm_gsp_fwsec_v2(struct nvkm_gsp *gsp, const char *name, in nvkm_gsp_fwsec_v2() argument
176 struct nvkm_subdev *subdev = &gsp->subdev; in nvkm_gsp_fwsec_v2()
183 ret = nvkm_falcon_fw_ctor(gsp->func->fwsec, name, subdev->device, true, in nvkm_gsp_fwsec_v2()
185 &gsp->falcon, fw); in nvkm_gsp_fwsec_v2()
219 return nvkm_gsp_fwsec_patch(gsp, fw, desc->InterfaceOffset, init_cmd); in nvkm_gsp_fwsec_v2()
223 nvkm_gsp_fwsec_v3(struct nvkm_gsp *gsp, const char *name, in nvkm_gsp_fwsec_v3() argument
227 struct nvkm_device *device = gsp->subdev.device; in nvkm_gsp_fwsec_v3()
[all …]
H A Dpriv.h11 int nvkm_gsp_fwsec_sb_init(struct nvkm_gsp *gsp);
96 int r535_gsp_gcx_ready(struct nvkm_gsp *gsp);
101 static inline int nvkm_gsp_fwsec_sb_ctor(struct nvkm_gsp *gsp) in nvkm_gsp_fwsec_sb_ctor() argument
103 if (gsp->func->fwsec_sb.ctor) in nvkm_gsp_fwsec_sb_ctor()
104 return gsp->func->fwsec_sb.ctor(gsp); in nvkm_gsp_fwsec_sb_ctor()
108 static inline void nvkm_gsp_fwsec_sb_dtor(struct nvkm_gsp *gsp) in nvkm_gsp_fwsec_sb_dtor() argument
110 if (gsp->func->fwsec_sb.dtor) in nvkm_gsp_fwsec_sb_dtor()
111 gsp->func->fwsec_sb.dtor(gsp); in nvkm_gsp_fwsec_sb_dtor()
H A Dga102.c29 ga102_gsp_reset(struct nvkm_gsp *gsp) in ga102_gsp_reset() argument
33 ret = gsp->falcon.func->reset_eng(&gsp->falcon); in ga102_gsp_reset()
37 nvkm_falcon_mask(&gsp->falcon, 0x1668, 0x00000111, 0x00000111); in ga102_gsp_reset()
42 ga102_gsp_booter_ctor(struct nvkm_gsp *gsp, const char *name, const struct firmware *blob, in ga102_gsp_booter_ctor() argument
45 struct nvkm_subdev *subdev = &gsp->subdev; in ga102_gsp_booter_ctor()
/linux/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/
H A Dgsp.c51 struct nvkm_gsp *gsp = container_of(work, typeof(*gsp), msgq.work); in r535_gsp_msgq_work() local
53 mutex_lock(&gsp->cmdq.mutex); in r535_gsp_msgq_work()
54 if (*gsp->msgq.rptr != *gsp->msgq.wptr) in r535_gsp_msgq_work()
55 r535_gsp_msg_recv(gsp, 0, 0); in r535_gsp_msgq_work()
56 mutex_unlock(&gsp->cmdq.mutex); in r535_gsp_msgq_work()
62 struct nvkm_gsp *gsp = container_of(inth, typeof(*gsp), subdev.inth); in r535_gsp_intr() local
63 struct nvkm_subdev *subdev = &gsp->subdev; in r535_gsp_intr()
64 u32 intr = nvkm_falcon_rd32(&gsp->falcon, 0x0008); in r535_gsp_intr()
65 u32 inte = nvkm_falcon_rd32(&gsp->falcon, gsp->falcon.func->addr2 + in r535_gsp_intr()
66 gsp->falcon.func->riscv_irqmask); in r535_gsp_intr()
[all …]
H A Drpc.c142 r535_gsp_msgq_wait(struct nvkm_gsp *gsp, u32 gsp_rpc_len, int *ptime) in r535_gsp_msgq_wait() argument
144 u32 size, rptr = *gsp->msgq.rptr; in r535_gsp_msgq_wait()
149 if (WARN_ON(!size || size >= gsp->msgq.cnt)) in r535_gsp_msgq_wait()
153 u32 wptr = *gsp->msgq.wptr; in r535_gsp_msgq_wait()
155 used = wptr + gsp->msgq.cnt - rptr; in r535_gsp_msgq_wait()
156 if (used >= gsp->msgq.cnt) in r535_gsp_msgq_wait()
157 used -= gsp->msgq.cnt; in r535_gsp_msgq_wait()
171 r535_gsp_msgq_get_entry(struct nvkm_gsp *gsp) in r535_gsp_msgq_get_entry() argument
173 u32 rptr = *gsp->msgq.rptr; in r535_gsp_msgq_get_entry()
176 return (void *)((u8 *)gsp->shm.msgq.ptr + GSP_PAGE_SIZE + in r535_gsp_msgq_get_entry()
[all …]
H A Dfbsr.c56 struct nvkm_gsp *gsp = client->gsp; in r535_fbsr_memlist() local
61 rpc = nvkm_gsp_rpc_get(gsp, NV_VGPU_MSG_FUNCTION_ALLOC_MEMORY, in r535_fbsr_memlist()
102 ret = nvkm_gsp_rpc_wr(gsp, rpc, NVKM_GSP_RPC_REPLY_POLL); in r535_fbsr_memlist()
116 struct nvkm_gsp *gsp = fbsr->client.gsp; in fbsr_send() local
125 ctrl = nvkm_gsp_rm_ctrl_get(&gsp->internal.device.subdevice, in fbsr_send()
140 ret = nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl); in fbsr_send()
154 struct nvkm_gsp *gsp = fbsr->client.gsp; in fbsr_init() local
163 ctrl = nvkm_gsp_rm_ctrl_get(&gsp->internal.device.subdevice, in fbsr_init()
174 ret = nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl); in fbsr_init()
204 r535_fbsr_resume(struct nvkm_gsp *gsp) in r535_fbsr_resume() argument
[all …]
H A Dbar.c53 r535_bar_bar2_update_pde(struct nvkm_gsp *gsp, u8 page_shift, u64 pdbe) in r535_bar_bar2_update_pde() argument
57 rpc = nvkm_gsp_rpc_get(gsp, NV_VGPU_MSG_FUNCTION_UPDATE_BAR_PDE, sizeof(*rpc)); in r535_bar_bar2_update_pde()
65 return nvkm_gsp_rpc_wr(gsp, rpc, NVKM_GSP_RPC_REPLY_RECV); in r535_bar_bar2_update_pde()
72 struct nvkm_gsp *gsp = bar->subdev.device->gsp; in r535_bar_bar2_fini() local
77 WARN_ON(r535_bar_bar2_update_pde(gsp, vmm->func->page[0].shift, 0)); in r535_bar_bar2_fini()
85 struct nvkm_gsp *gsp = device->gsp; in r535_bar_bar2_init() local
97 WARN_ON(r535_bar_bar2_update_pde(gsp, vmm->func->page[0].shift, pdbe)); in r535_bar_bar2_init()
98 vmm->rm.bar2_pdb = gsp->bar.rm_bar2_pdb; in r535_bar_bar2_init()
131 struct nvkm_gsp *gsp = device->gsp; in r535_bar_bar1_init() local
136 ret = nvkm_ram_wrap(device, gsp->bar.rm_bar1_pdb, 0x1000, &pd3); in r535_bar_bar1_init()
H A Dfifo.c44 struct nvkm_gsp *gsp = chan->rm.object.client->gsp; in r535_chan_doorbell_handle() local
46 return gsp->rm->gpu->fifo.chan.doorbell_handle(chan); in r535_chan_doorbell_handle()
80 struct nvkm_gsp *gsp = device->object.client->gsp; in r535_chan_alloc() local
81 struct nvkm_fifo *fifo = gsp->subdev.device->fifo; in r535_chan_alloc()
159 const struct nvkm_rm_api *rmapi = device->gsp->rm->api; in r535_chan_ramfc_write()
245 ret = nvkm_gsp_intr_nonstall(subdev->device->gsp, subdev->type, subdev->inst); in r535_engn_nonstall()
364 struct nvkm_gsp *gsp = priv; in r535_fifo_rc_triggered() local
369 nvkm_error(&gsp->subdev, "rc: engn:%08x chid:%d type:%d scope:%d part:%d\n", in r535_fifo_rc_triggered()
373 r535_fifo_rc_chid(gsp->subdev.device->fifo, msg->chid); in r535_fifo_rc_triggered()
430 struct nvkm_gsp *gsp = fifo->engine.subdev.device->gsp; in r535_fifo_ectx_size() local
[all …]
H A Ddisp.c75 struct nvkm_gsp *gsp = disp->rm.objcom.client->gsp; in r535_disp_chan_set_pushbuf() local
78 ctrl = nvkm_gsp_rm_ctrl_get(&gsp->internal.device.subdevice, in r535_disp_chan_set_pushbuf()
110 return nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl); in r535_disp_chan_set_pushbuf()
116 const struct nvkm_rm_api *rmapi = chan->disp->rm.objcom.client->gsp->rm->api; in r535_curs_init()
187 const struct nvkm_rm_api *rmapi = chan->disp->rm.objcom.client->gsp->rm->api; in r535_dmac_init()
293 const struct nvkm_rm_api *rmapi = disp->engine.subdev.device->gsp->rm->api; in r535_sor_bl_set()
302 const struct nvkm_rm_api *rmapi = disp->engine.subdev.device->gsp->rm->api; in r535_sor_bl_get()
438 const struct nvkm_rm_api *rmapi = sor->disp->engine.subdev.device->gsp->rm->api; in r535_sor_dp_vcpi()
476 const struct nvkm_rm_api *rmapi = sor->disp->engine.subdev.device->gsp->rm->api; in r535_sor_dp_sst()
567 sor->disp->func->gsp.hdmi_gcp(sor, head, enable); in r535_sor_hdmi_audio()
[all …]
/linux/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/
H A Dgsp.c19 r570_gsp_sr_data_size(struct nvkm_gsp *gsp) in r570_gsp_sr_data_size() argument
21 GspFwWprMeta *meta = gsp->wpr_meta.data; in r570_gsp_sr_data_size()
28 r570_gsp_drop_post_nocat_record(struct nvkm_gsp *gsp) in r570_gsp_drop_post_nocat_record() argument
30 if (gsp->subdev.debug < NV_DBG_DEBUG) { in r570_gsp_drop_post_nocat_record()
31 r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_GSP_POST_NOCAT_RECORD, NULL, NULL); in r570_gsp_drop_post_nocat_record()
32 r535_gsp_msg_ntfy_add(gsp, NV_VGPU_MSG_EVENT_GSP_LOCKDOWN_NOTICE, NULL, NULL); in r570_gsp_drop_post_nocat_record()
87 r570_gsp_get_static_info(struct nvkm_gsp *gsp) in r570_gsp_get_static_info() argument
94 rpc = nvkm_gsp_rpc_rd(gsp, NV_VGPU_MSG_FUNCTION_GET_GSP_STATIC_INFO, sizeof(*rpc)); in r570_gsp_get_static_info()
98 gsp->internal.client.object.client = &gsp->internal.client; in r570_gsp_get_static_info()
99 gsp->internal.client.object.parent = NULL; in r570_gsp_get_static_info()
[all …]
H A Dfbsr.c14 r570_fbsr_suspend_channels(struct nvkm_gsp *gsp, bool suspend) in r570_fbsr_suspend_channels() argument
18 ctrl = nvkm_gsp_rm_ctrl_get(&gsp->internal.device.subdevice, in r570_fbsr_suspend_channels()
26 return nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl); in r570_fbsr_suspend_channels()
30 r570_fb_get_compbit_store_size(struct nvkm_gsp *gsp, u64 *size) in r570_fb_get_compbit_store_size() argument
34 ctrl = nvkm_gsp_rm_ctrl_rd(&gsp->internal.device.object, in r570_fb_get_compbit_store_size()
42 nvkm_gsp_rm_ctrl_done(&gsp->internal.device.object, ctrl); in r570_fb_get_compbit_store_size()
47 r570_memsys_enable_raw_comp_mode(struct nvkm_gsp *gsp, bool enable) in r570_memsys_enable_raw_comp_mode() argument
52 ctrl = nvkm_gsp_rm_ctrl_get(&gsp->internal.device.subdevice, in r570_memsys_enable_raw_comp_mode()
60 ret = nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl); in r570_memsys_enable_raw_comp_mode()
62 nvkm_debug(&gsp->subdev, "memsys: Raw compression mode %s\n", in r570_memsys_enable_raw_comp_mode()
[all …]
H A Ddisp.c36 struct nvkm_gsp *gsp = disp->rm.objcom.client->gsp; in r570_disp_chan_set_pushbuf() local
39 ctrl = nvkm_gsp_rm_ctrl_get(&gsp->internal.device.subdevice, in r570_disp_chan_set_pushbuf()
75 return nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl); in r570_disp_chan_set_pushbuf()
295 struct nvkm_gsp *gsp = disp->engine.subdev.device->gsp; in r570_disp_get_static_info() local
297 ctrl = nvkm_gsp_rm_ctrl_rd(&gsp->internal.device.subdevice, in r570_disp_get_static_info()
306 nvkm_gsp_rm_ctrl_done(&gsp->internal.device.subdevice, ctrl); in r570_disp_get_static_info()
/linux/drivers/gpu/drm/nouveau/include/nvkm/subdev/
H A Dgsp.h211 struct nvkm_gsp *gsp; member
275 nvkm_gsp_rm(struct nvkm_gsp *gsp) in nvkm_gsp_rm() argument
277 return gsp && (gsp->fws.rm || gsp->fw.img); in nvkm_gsp_rm()
283 nvkm_gsp_rpc_get(struct nvkm_gsp *gsp, u32 fn, u32 argc) in nvkm_gsp_rpc_get() argument
285 return gsp->rm->api->rpc->get(gsp, fn, argc); in nvkm_gsp_rpc_get()
289 nvkm_gsp_rpc_push(struct nvkm_gsp *gsp, void *argv, in nvkm_gsp_rpc_push() argument
292 return gsp->rm->api->rpc->push(gsp, argv, policy, repc); in nvkm_gsp_rpc_push()
296 nvkm_gsp_rpc_rd(struct nvkm_gsp *gsp, u32 fn, u32 argc) in nvkm_gsp_rpc_rd() argument
298 void *argv = nvkm_gsp_rpc_get(gsp, fn, argc); in nvkm_gsp_rpc_rd()
303 return nvkm_gsp_rpc_push(gsp, argv, NVKM_GSP_RPC_REPLY_RECV, argc); in nvkm_gsp_rpc_rd()
[all …]
/linux/include/linux/
H A Drcutiny.h33 static inline void get_state_synchronize_rcu_full(struct rcu_gp_seq *gsp) in get_state_synchronize_rcu_full() argument
35 gsp->norm = get_state_synchronize_rcu(); in get_state_synchronize_rcu_full()
40 static inline void start_poll_synchronize_rcu_full(struct rcu_gp_seq *gsp) in start_poll_synchronize_rcu_full() argument
42 gsp->norm = start_poll_synchronize_rcu(); in start_poll_synchronize_rcu_full()
47 static inline bool poll_state_synchronize_rcu_full(struct rcu_gp_seq *gsp) in poll_state_synchronize_rcu_full() argument
49 return poll_state_synchronize_rcu(gsp->norm); in poll_state_synchronize_rcu_full()
57 static inline void cond_synchronize_rcu_full(struct rcu_gp_seq *gsp) in cond_synchronize_rcu_full() argument
59 cond_synchronize_rcu(gsp->norm); in cond_synchronize_rcu_full()
67 static inline void start_poll_synchronize_rcu_expedited_full(struct rcu_gp_seq *gsp) in start_poll_synchronize_rcu_expedited_full() argument
69 gsp->norm = start_poll_synchronize_rcu_expedited(); in start_poll_synchronize_rcu_expedited_full()
[all …]
H A Drcutree.h70 void start_poll_synchronize_rcu_expedited_full(struct rcu_gp_seq *gsp);
72 void cond_synchronize_rcu_expedited_full(struct rcu_gp_seq *gsp);
74 void get_state_synchronize_rcu_full(struct rcu_gp_seq *gsp);
76 void start_poll_synchronize_rcu_full(struct rcu_gp_seq *gsp);
78 bool poll_state_synchronize_rcu_full(struct rcu_gp_seq *gsp);
80 void cond_synchronize_rcu_full(struct rcu_gp_seq *gsp);
/linux/drivers/gpu/drm/nouveau/nvkm/subdev/fb/
H A Dr535.c34 struct nvkm_gsp *gsp = fb->subdev.device->gsp; in r535_fb_ram_new() local
44 ram->size = gsp->fb.size; in r535_fb_ram_new()
48 for (int i = 0; i < gsp->fb.region_nr; i++) { in r535_fb_ram_new()
50 gsp->fb.region[i].addr >> NVKM_RAM_MM_SHIFT, in r535_fb_ram_new()
51 gsp->fb.region[i].size >> NVKM_RAM_MM_SHIFT, in r535_fb_ram_new()
/linux/drivers/gpu/drm/nouveau/nvkm/engine/disp/
H A Dga102.c151 .gsp.intr = tu102_disp_intr,
152 .gsp.head = &tu102_gsp_head,
153 .gsp.hdmi_gcp = tu102_sor_hdmi_gcp,
154 .gsp.hdmi_infoframe_avi = gv100_sor_hdmi_infoframe_avi,
155 .gsp.hdmi_infoframe_vsi = gv100_sor_hdmi_infoframe_vsi,
162 if (nvkm_gsp_rm(device->gsp)) in ga102_disp_new()
H A Dgb202.c177 .gsp.intr = gb202_disp_intr,
178 .gsp.intr_low_latency = true,
179 .gsp.head = &gb202_gsp_head,
180 .gsp.hdmi_gcp = gb202_sor_hdmi_gcp,
182 .gsp.hdmi_infoframe_avi = gv100_sor_hdmi_infoframe_avi,
183 .gsp.hdmi_infoframe_vsi = gb202_sor_hdmi_infoframe_vsi,
H A Dtu102.c310 .gsp.intr = tu102_disp_intr,
311 .gsp.head = &tu102_gsp_head,
312 .gsp.hdmi_gcp = tu102_sor_hdmi_gcp,
313 .gsp.hdmi_infoframe_avi = gv100_sor_hdmi_infoframe_avi,
314 .gsp.hdmi_infoframe_vsi = gv100_sor_hdmi_infoframe_vsi,
321 if (nvkm_gsp_rm(device->gsp)) in tu102_disp_new()
/linux/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/
H A Drm.h43 int (*gcx_ready)(struct nvkm_gsp *gsp);
44 } *gsp; member
48 void *(*push)(struct nvkm_gsp *gsp, void *argv,
50 void (*done)(struct nvkm_gsp *gsp, void *repv);
178 int r570_gsp_gcx_ready(struct nvkm_gsp *gsp);
179 int r535_gsp_get_static_memsys_info(struct nvkm_gsp *gsp);
/linux/arch/powerpc/kvm/
H A Dguest-state-buffer.c303 int kvmppc_gse_parse(struct kvmppc_gs_parser *gsp, struct kvmppc_gs_buff *gsb) in kvmppc_gse_parse() argument
312 kvmppc_gsp_insert(gsp, kvmppc_gse_iden(curr), curr); in kvmppc_gse_parse()
432 void kvmppc_gsp_insert(struct kvmppc_gs_parser *gsp, u16 iden, in kvmppc_gsp_insert() argument
438 kvmppc_gsbm_set(&gsp->iterator, iden); in kvmppc_gsp_insert()
439 gsp->gses[i] = gse; in kvmppc_gsp_insert()
450 struct kvmppc_gs_elem *kvmppc_gsp_lookup(struct kvmppc_gs_parser *gsp, u16 iden) in kvmppc_gsp_lookup() argument
455 return gsp->gses[i]; in kvmppc_gsp_lookup()
/linux/kernel/rcu/
H A Drcu_segcblist.c313 bool rcu_segcblist_nextgp(struct rcu_segcblist *rsclp, struct rcu_gp_seq *gsp) in rcu_segcblist_nextgp() argument
317 *gsp = rsclp->gp_seq[RCU_WAIT_TAIL]; in rcu_segcblist_nextgp()
544 bool rcu_segcblist_accelerate(struct rcu_segcblist *rsclp, struct rcu_gp_seq *gsp) in rcu_segcblist_accelerate() argument
562 ULONG_CMP_LT(rsclp->gp_seq[i].norm, gsp->norm)) in rcu_segcblist_accelerate()
602 rsclp->gp_seq[i] = *gsp; in rcu_segcblist_accelerate()
/linux/Documentation/gpu/
H A Dnouveau.rst28 .. kernel-doc:: drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rpc.c
31 .. kernel-doc:: drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h

123