[Nouveau] [PATCH 33/44] drm/nouveau/gsp/r535: add support for rm control
Philipp Stanner
pstanner at redhat.com
Tue Oct 24 09:31:25 UTC 2023
On Tue, 2023-09-19 at 06:21 +1000, Ben Skeggs wrote:
> From: Ben Skeggs <bskeggs at redhat.com>
>
> Adds the plumbing to start making RM control calls, and initialises
> objects to represent internal RM objects provided to us during init.
>
> These will be used by subsequent patches.
>
> Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
> ---
> .../gpu/drm/nouveau/include/nvkm/subdev/gsp.h | 62 +++++++++++
> .../nvidia/inc/ctrl/ctrl0080/ctrl0080gpu.h | 48 +++++++++
> .../sdk/nvidia/inc/ctrl/ctrl0080/ctrl0080gr.h | 31 ++++++
> .../nvidia/inc/ctrl/ctrl2080/ctrl2080bios.h | 40 +++++++
> .../sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080fb.h | 51 +++++++++
> .../nvidia/inc/ctrl/ctrl2080/ctrl2080gpu.h | 25 +++++
> .../sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gr.h | 41 +++++++
> .../535.54.03/nvidia/generated/g_gpu_nvoc.h | 35 ++++++
> .../nvidia/generated/g_rpc-structures.h | 11 ++
> .../nvidia/inc/kernel/gpu/gpu_engine_type.h | 86 +++++++++++++++
> .../inc/kernel/gpu/gsp/gsp_static_config.h | 100
> +++++++++++++++++
> .../nvidia/inc/kernel/gpu/nvbitmask.h | 33 ++++++
> .../nvidia/kernel/inc/vgpu/rpc_headers.h | 44 ++++++++
> .../gpu/drm/nouveau/nvkm/subdev/gsp/r535.c | 101
> ++++++++++++++++++
> 14 files changed, 708 insertions(+)
> create mode 100644
> drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/inc/
> ctrl/ctrl0080/ctrl0080gpu.h
> create mode 100644
> drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/inc/
> ctrl/ctrl0080/ctrl0080gr.h
> create mode 100644
> drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/inc/
> ctrl/ctrl2080/ctrl2080bios.h
> create mode 100644
> drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/inc/
> ctrl/ctrl2080/ctrl2080fb.h
> create mode 100644
> drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/inc/
> ctrl/ctrl2080/ctrl2080gr.h
> create mode 100644
> drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/generated/g_gpu
> _nvoc.h
> create mode 100644
> drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gpu/
> gpu_engine_type.h
> create mode 100644
> drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gpu/
> nvbitmask.h
> create mode 100644
> drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/kernel/inc/vgpu
> /rpc_headers.h
>
> diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
> b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
> index 41fd11822b30..8f0805474981 100644
> --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
> +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
> @@ -132,10 +132,32 @@ struct nvkm_gsp {
>
> bool running;
>
> + /* Internal GSP-RM control handles. */
> + struct {
> + struct nvkm_gsp_client {
> + struct nvkm_gsp_object {
> + struct nvkm_gsp_client *client;
> + struct nvkm_gsp_object *parent;
> + u32 handle;
> + } object;
> +
> + struct nvkm_gsp *gsp;
> + } client;
> +
> + struct nvkm_gsp_device {
> + struct nvkm_gsp_object object;
> + struct nvkm_gsp_object subdevice;
> + } device;
> + } internal;
> +
> const struct nvkm_gsp_rm {
> void *(*rpc_get)(struct nvkm_gsp *, u32 fn, u32
> argc);
> void *(*rpc_push)(struct nvkm_gsp *, void *argv, bool
> wait, u32 repc);
> void (*rpc_done)(struct nvkm_gsp *gsp, void *repv);
> +
> + void *(*rm_ctrl_get)(struct nvkm_gsp_object *, u32
> cmd, u32 argc);
> + void *(*rm_ctrl_push)(struct nvkm_gsp_object *, void
> *argv, u32 repc);
> + void (*rm_ctrl_done)(struct nvkm_gsp_object *, void
> *repv);
> } *rm;
> };
>
> @@ -185,6 +207,46 @@ nvkm_gsp_rpc_done(struct nvkm_gsp *gsp, void
> *repv)
> gsp->rm->rpc_done(gsp, repv);
> }
>
> +static inline void *
> +nvkm_gsp_rm_ctrl_get(struct nvkm_gsp_object *object, u32 cmd, u32
> argc)
> +{
> + return object->client->gsp->rm->rm_ctrl_get(object, cmd,
> argc);
> +}
> +
> +static inline void *
> +nvkm_gsp_rm_ctrl_push(struct nvkm_gsp_object *object, void *argv,
> u32 repc)
> +{
What's repc? Repitition-count? See below:
> + return object->client->gsp->rm->rm_ctrl_push(object, argv,
> repc);
> +}
> +
> +static inline void *
> +nvkm_gsp_rm_ctrl_rd(struct nvkm_gsp_object *object, u32 cmd, u32
> repc)
> +{
> + void *argv = nvkm_gsp_rm_ctrl_get(object, cmd, repc);
> +
> + if (IS_ERR(argv))
> + return argv;
> +
> + return nvkm_gsp_rm_ctrl_push(object, argv, repc);
> +}
> +
> +static inline int
> +nvkm_gsp_rm_ctrl_wr(struct nvkm_gsp_object *object, void *argv)
> +{
> + void *repv = nvkm_gsp_rm_ctrl_push(object, argv, 0);
Why 0? For a generic flags-field I think 0 is indeed intuitive, but
this does not seem to be flags.
Maybe write a comment or make it:
u32 do_obvious_thing = 0;
void *repv = nvkm_gsp_rm_ctrl_push(object, argv, do_obvious_thing);
> +
> + if (IS_ERR(repv))
> + return PTR_ERR(repv);
> +
> + return 0;
> +}
> +
> +static inline void
> +nvkm_gsp_rm_ctrl_done(struct nvkm_gsp_object *object, void *repv)
> +{
> + object->client->gsp->rm->rm_ctrl_done(object, repv);
> +}
> +
> int gv100_gsp_new(struct nvkm_device *, enum nvkm_subdev_type, int,
> struct nvkm_gsp **);
> int tu102_gsp_new(struct nvkm_device *, enum nvkm_subdev_type, int,
> struct nvkm_gsp **);
> int tu116_gsp_new(struct nvkm_device *, enum nvkm_subdev_type, int,
> struct nvkm_gsp **);
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl0080/ctrl0080gpu.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl0080/ctrl0080gpu.h
> new file mode 100644
> index 000000000000..60ba4967dcd9
> --- /dev/null
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl0080/ctrl0080gpu.h
> @@ -0,0 +1,48 @@
> +#ifndef __src_common_sdk_nvidia_inc_ctrl_ctrl0080_ctrl0080gpu_h__
> +#define __src_common_sdk_nvidia_inc_ctrl_ctrl0080_ctrl0080gpu_h__
> +
> +/* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
> +
> +/*
> + * SPDX-FileCopyrightText: Copyright (c) 2004-2022 NVIDIA
> CORPORATION & AFFILIATES. All rights reserved.
> + * SPDX-License-Identifier: MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom
> the
> + * Software is furnished to do so, subject to the following
> conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +typedef struct NV0080_CTRL_GPU_GET_SRIOV_CAPS_PARAMS {
> + NvU32 totalVFs;
> + NvU32 firstVfOffset;
> + NvU32 vfFeatureMask;
> + NV_DECLARE_ALIGNED(NvU64 FirstVFBar0Address, 8);
> + NV_DECLARE_ALIGNED(NvU64 FirstVFBar1Address, 8);
> + NV_DECLARE_ALIGNED(NvU64 FirstVFBar2Address, 8);
> + NV_DECLARE_ALIGNED(NvU64 bar0Size, 8);
> + NV_DECLARE_ALIGNED(NvU64 bar1Size, 8);
> + NV_DECLARE_ALIGNED(NvU64 bar2Size, 8);
> + NvBool b64bitBar0;
> + NvBool b64bitBar1;
> + NvBool b64bitBar2;
> + NvBool bSriovEnabled;
> + NvBool bSriovHeavyEnabled;
> + NvBool bEmulateVFBar0TlbInvalidationRegister;
> + NvBool bClientRmAllocatedCtxBuffer;
> +} NV0080_CTRL_GPU_GET_SRIOV_CAPS_PARAMS;
> +
> +#endif
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl0080/ctrl0080gr.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl0080/ctrl0080gr.h
> new file mode 100644
> index 000000000000..c08e2fcb4979
> --- /dev/null
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl0080/ctrl0080gr.h
> @@ -0,0 +1,31 @@
> +#ifndef __src_common_sdk_nvidia_inc_ctrl_ctrl0080_ctrl0080gr_h__
> +#define __src_common_sdk_nvidia_inc_ctrl_ctrl0080_ctrl0080gr_h__
> +
> +/* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
> +
> +/*
> + * SPDX-FileCopyrightText: Copyright (c) 2004-2022 NVIDIA
> CORPORATION & AFFILIATES. All rights reserved.
> + * SPDX-License-Identifier: MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom
> the
> + * Software is furnished to do so, subject to the following
> conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +#define NV0080_CTRL_GR_CAPS_TBL_SIZE 23
> +
> +#endif
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080bios.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080bios.h
> new file mode 100644
> index 000000000000..9c61a6f74aa4
> --- /dev/null
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080bios.h
> @@ -0,0 +1,40 @@
> +#ifndef __src_common_sdk_nvidia_inc_ctrl_ctrl2080_ctrl2080bios_h__
> +#define __src_common_sdk_nvidia_inc_ctrl_ctrl2080_ctrl2080bios_h__
> +
> +/* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
> +
> +/*
> + * SPDX-FileCopyrightText: Copyright (c) 2005-2021 NVIDIA
> CORPORATION & AFFILIATES. All rights reserved.
> + * SPDX-License-Identifier: MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom
> the
> + * Software is furnished to do so, subject to the following
> conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +typedef struct NV2080_CTRL_BIOS_GET_SKU_INFO_PARAMS {
> + NvU32 BoardID;
> + char chipSKU[4];
> + char chipSKUMod[2];
> + char project[5];
> + char projectSKU[5];
> + char CDP[6];
> + char projectSKUMod[2];
> + NvU32 businessCycle;
> +} NV2080_CTRL_BIOS_GET_SKU_INFO_PARAMS;
> +
> +#endif
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080fb.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080fb.h
> new file mode 100644
> index 000000000000..20a50a22e748
> --- /dev/null
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080fb.h
> @@ -0,0 +1,51 @@
> +#ifndef __src_common_sdk_nvidia_inc_ctrl_ctrl2080_ctrl2080fb_h__
> +#define __src_common_sdk_nvidia_inc_ctrl_ctrl2080_ctrl2080fb_h__
> +
> +/* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
> +
> +/*
> + * SPDX-FileCopyrightText: Copyright (c) 2006-2021 NVIDIA
> CORPORATION & AFFILIATES. All rights reserved.
> + * SPDX-License-Identifier: MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom
> the
> + * Software is furnished to do so, subject to the following
> conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +#define NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_MEM_TYPES 17U
> +
> +typedef NvBool
> NV2080_CTRL_CMD_FB_GET_FB_REGION_SURFACE_MEM_TYPE_FLAG[NV2080_CTRL_CM
> D_FB_GET_FB_REGION_INFO_MEM_TYPES];
> +
> +typedef struct NV2080_CTRL_CMD_FB_GET_FB_REGION_FB_REGION_INFO {
> + NV_DECLARE_ALIGNED(NvU64 base, 8);
> + NV_DECLARE_ALIGNED(NvU64 limit, 8);
> + NV_DECLARE_ALIGNED(NvU64 reserved, 8);
> + NvU32
> performance;
> + NvBool
> supportCompressed;
> + NvBool
> supportISO;
> + NvBool
> bProtected;
> + NV2080_CTRL_CMD_FB_GET_FB_REGION_SURFACE_MEM_TYPE_FLAG
> blackList;
> +} NV2080_CTRL_CMD_FB_GET_FB_REGION_FB_REGION_INFO;
> +
> +#define NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_MAX_ENTRIES 16U
> +
> +typedef struct NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_PARAMS {
> + NvU32 numFBRegions;
> +
> NV_DECLARE_ALIGNED(NV2080_CTRL_CMD_FB_GET_FB_REGION_FB_REGION_INFO
> fbRegion[NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_MAX_ENTRIES], 8);
> +} NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_PARAMS;
> +
> +#endif
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080gpu.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080gpu.h
> index a9a287469305..49a1390743c4 100644
> ---
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080gpu.h
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080gpu.h
> @@ -26,8 +26,33 @@
> * DEALINGS IN THE SOFTWARE.
> */
>
> +#define NV2080_GPU_MAX_NAME_STRING_LENGTH
> (0x0000040U)
> +
> #define NV2080_CTRL_GPU_SET_POWER_STATE_GPU_LEVEL_0
> (0x00000000U)
>
> #define NV2080_CTRL_GPU_SET_POWER_STATE_GPU_LEVEL_3
> (0x00000003U)
>
> +typedef struct NV2080_CTRL_GPU_GET_FERMI_GPC_INFO_PARAMS {
> + NvU32 gpcMask;
> +} NV2080_CTRL_GPU_GET_FERMI_GPC_INFO_PARAMS;
> +
> +typedef struct NV2080_CTRL_GPU_GET_FERMI_TPC_INFO_PARAMS {
> + NvU32 gpcId;
> + NvU32 tpcMask;
> +} NV2080_CTRL_GPU_GET_FERMI_TPC_INFO_PARAMS;
> +
> +typedef struct NV2080_CTRL_GPU_GET_FERMI_ZCULL_INFO_PARAMS {
> + NvU32 gpcId;
> + NvU32 zcullMask;
> +} NV2080_CTRL_GPU_GET_FERMI_ZCULL_INFO_PARAMS;
> +
> +#define NV2080_GPU_MAX_GID_LENGTH (0x000000100ULL)
> +
> +typedef struct NV2080_CTRL_GPU_GET_GID_INFO_PARAMS {
> + NvU32 index;
> + NvU32 flags;
> + NvU32 length;
> + NvU8 data[NV2080_GPU_MAX_GID_LENGTH];
> +} NV2080_CTRL_GPU_GET_GID_INFO_PARAMS;
> +
> #endif
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080gr.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080gr.h
> new file mode 100644
> index 000000000000..6f99038d6e16
> --- /dev/null
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/common/sdk/nvidia/in
> c/ctrl/ctrl2080/ctrl2080gr.h
> @@ -0,0 +1,41 @@
> +#ifndef __src_common_sdk_nvidia_inc_ctrl_ctrl2080_ctrl2080gr_h__
> +#define __src_common_sdk_nvidia_inc_ctrl_ctrl2080_ctrl2080gr_h__
> +
> +/* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
> +
> +/*
> + * SPDX-FileCopyrightText: Copyright (c) 2006-2023 NVIDIA
> CORPORATION & AFFILIATES. All rights reserved.
> + * SPDX-License-Identifier: MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom
> the
> + * Software is furnished to do so, subject to the following
> conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +typedef enum NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS {
> + NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_MAIN = 0,
> + NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_SPILL = 1,
> + NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_PAGEPOOL = 2,
> + NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_BETACB = 3,
> + NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_RTV = 4,
> + NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_CONTEXT_POOL =
> 5,
> +
> NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_CONTEXT_POOL_CONTROL
> = 6,
> +
> NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_CONTEXT_POOL_CONTROL
> _CPU = 7,
> + NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_END = 8,
> +} NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS;
> +
> +#endif
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/generated/g_g
> pu_nvoc.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/generated/g_g
> pu_nvoc.h
> new file mode 100644
> index 000000000000..7194a8f02909
> --- /dev/null
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/generated/g_g
> pu_nvoc.h
> @@ -0,0 +1,35 @@
> +#ifndef __src_nvidia_generated_g_gpu_nvoc_h__
> +#define __src_nvidia_generated_g_gpu_nvoc_h__
> +
> +/* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
> +
> +/*
> + * SPDX-FileCopyrightText: Copyright (c) 2004-2023 NVIDIA
> CORPORATION & AFFILIATES. All rights reserved.
> + * SPDX-License-Identifier: MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom
> the
> + * Software is furnished to do so, subject to the following
> conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +typedef enum
> +{
> + COMPUTE_BRANDING_TYPE_NONE,
> + COMPUTE_BRANDING_TYPE_TESLA,
> +} COMPUTE_BRANDING_TYPE;
> +
> +#endif
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/generated/g_r
> pc-structures.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/generated/g_r
> pc-structures.h
> index ac59ffa4330b..1ae0a97df392 100644
> ---
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/generated/g_r
> pc-structures.h
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/generated/g_r
> pc-structures.h
> @@ -33,6 +33,17 @@ typedef struct rpc_unloading_guest_driver_v1F_07
> NvU32 newLevel;
> } rpc_unloading_guest_driver_v1F_07;
>
> +typedef struct rpc_gsp_rm_control_v03_00
> +{
> + NvHandle hClient;
> + NvHandle hObject;
> + NvU32 cmd;
> + NvU32 status;
> + NvU32 paramsSize;
> + NvU32 flags;
> + NvU8 params[];
> +} rpc_gsp_rm_control_v03_00;
> +
> typedef struct rpc_run_cpu_sequencer_v17_00
> {
> NvU32 bufferSizeDWord;
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/gpu_engine_type.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/gpu_engine_type.h
> new file mode 100644
> index 000000000000..90cd9f6c4d9a
> --- /dev/null
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/gpu_engine_type.h
> @@ -0,0 +1,86 @@
> +#ifndef __src_nvidia_inc_kernel_gpu_gpu_engine_type_h__
> +#define __src_nvidia_inc_kernel_gpu_gpu_engine_type_h__
> +
> +/* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
> +
> +/*
> + * SPDX-FileCopyrightText: Copyright (c) 2021-2022 NVIDIA
> CORPORATION & AFFILIATES. All rights reserved.
> + * SPDX-License-Identifier: MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom
> the
> + * Software is furnished to do so, subject to the following
> conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +typedef enum
> +{
> + RM_ENGINE_TYPE_NULL = (0x00000000),
> + RM_ENGINE_TYPE_GR0 = (0x00000001),
> + RM_ENGINE_TYPE_GR1 = (0x00000002),
> + RM_ENGINE_TYPE_GR2 = (0x00000003),
> + RM_ENGINE_TYPE_GR3 = (0x00000004),
> + RM_ENGINE_TYPE_GR4 = (0x00000005),
> + RM_ENGINE_TYPE_GR5 = (0x00000006),
> + RM_ENGINE_TYPE_GR6 = (0x00000007),
> + RM_ENGINE_TYPE_GR7 = (0x00000008),
> + RM_ENGINE_TYPE_COPY0 = (0x00000009),
> + RM_ENGINE_TYPE_COPY1 = (0x0000000a),
> + RM_ENGINE_TYPE_COPY2 = (0x0000000b),
> + RM_ENGINE_TYPE_COPY3 = (0x0000000c),
> + RM_ENGINE_TYPE_COPY4 = (0x0000000d),
> + RM_ENGINE_TYPE_COPY5 = (0x0000000e),
> + RM_ENGINE_TYPE_COPY6 = (0x0000000f),
> + RM_ENGINE_TYPE_COPY7 = (0x00000010),
> + RM_ENGINE_TYPE_COPY8 = (0x00000011),
> + RM_ENGINE_TYPE_COPY9 = (0x00000012),
> + RM_ENGINE_TYPE_NVDEC0 = (0x0000001d),
> + RM_ENGINE_TYPE_NVDEC1 = (0x0000001e),
> + RM_ENGINE_TYPE_NVDEC2 = (0x0000001f),
> + RM_ENGINE_TYPE_NVDEC3 = (0x00000020),
> + RM_ENGINE_TYPE_NVDEC4 = (0x00000021),
> + RM_ENGINE_TYPE_NVDEC5 = (0x00000022),
> + RM_ENGINE_TYPE_NVDEC6 = (0x00000023),
> + RM_ENGINE_TYPE_NVDEC7 = (0x00000024),
> + RM_ENGINE_TYPE_NVENC0 = (0x00000025),
> + RM_ENGINE_TYPE_NVENC1 = (0x00000026),
> + RM_ENGINE_TYPE_NVENC2 = (0x00000027),
> + RM_ENGINE_TYPE_VP = (0x00000028),
> + RM_ENGINE_TYPE_ME = (0x00000029),
> + RM_ENGINE_TYPE_PPP = (0x0000002a),
> + RM_ENGINE_TYPE_MPEG = (0x0000002b),
> + RM_ENGINE_TYPE_SW = (0x0000002c),
> + RM_ENGINE_TYPE_TSEC = (0x0000002d),
> + RM_ENGINE_TYPE_VIC = (0x0000002e),
> + RM_ENGINE_TYPE_MP = (0x0000002f),
> + RM_ENGINE_TYPE_SEC2 = (0x00000030),
> + RM_ENGINE_TYPE_HOST = (0x00000031),
> + RM_ENGINE_TYPE_DPU = (0x00000032),
> + RM_ENGINE_TYPE_PMU = (0x00000033),
> + RM_ENGINE_TYPE_FBFLCN = (0x00000034),
> + RM_ENGINE_TYPE_NVJPEG0 = (0x00000035),
> + RM_ENGINE_TYPE_NVJPEG1 = (0x00000036),
> + RM_ENGINE_TYPE_NVJPEG2 = (0x00000037),
> + RM_ENGINE_TYPE_NVJPEG3 = (0x00000038),
> + RM_ENGINE_TYPE_NVJPEG4 = (0x00000039),
> + RM_ENGINE_TYPE_NVJPEG5 = (0x0000003a),
> + RM_ENGINE_TYPE_NVJPEG6 = (0x0000003b),
> + RM_ENGINE_TYPE_NVJPEG7 = (0x0000003c),
> + RM_ENGINE_TYPE_OFA = (0x0000003d),
> + RM_ENGINE_TYPE_LAST = (0x0000003e),
> +} RM_ENGINE_TYPE;
> +
> +#endif
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/gsp/gsp_static_config.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/gsp/gsp_static_config.h
> index ba8cd897ebcc..3f99cab47a13 100644
> ---
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/gsp/gsp_static_config.h
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/gsp/gsp_static_config.h
> @@ -1,7 +1,16 @@
> #ifndef __src_nvidia_inc_kernel_gpu_gsp_gsp_static_config_h__
> #define __src_nvidia_inc_kernel_gpu_gsp_gsp_static_config_h__
> +#include
> <nvrm/535.54.03/common/sdk/nvidia/inc/ctrl/ctrl0080/ctrl0080gpu.h>
> +#include
> <nvrm/535.54.03/common/sdk/nvidia/inc/ctrl/ctrl0080/ctrl0080gr.h>
> +#include
> <nvrm/535.54.03/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080bios.h>
> +#include
> <nvrm/535.54.03/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080fb.h>
> +#include
> <nvrm/535.54.03/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gpu.h>
> +#include
> <nvrm/535.54.03/common/sdk/nvidia/inc/ctrl/ctrl2080/ctrl2080gr.h>
> #include <nvrm/535.54.03/nvidia/generated/g_chipset_nvoc.h>
> +#include <nvrm/535.54.03/nvidia/generated/g_gpu_nvoc.h>
> #include <nvrm/535.54.03/nvidia/inc/kernel/gpu/gpu_acpi_data.h>
> +#include <nvrm/535.54.03/nvidia/inc/kernel/gpu/nvbitmask.h>
> +#include <nvrm/535.54.03/nvidia/kernel/inc/vgpu/rpc_headers.h>
>
> /* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
>
> @@ -40,6 +49,97 @@ typedef struct GSP_VF_INFO
> NvBool b64bitBar2;
> } GSP_VF_INFO;
>
> +typedef struct GspSMInfo_t
> +{
> + NvU32 version;
> + NvU32 regBankCount;
> + NvU32 regBankRegCount;
> + NvU32 maxWarpsPerSM;
> + NvU32 maxThreadsPerWarp;
> + NvU32 geomGsObufEntries;
> + NvU32 geomXbufEntries;
> + NvU32 maxSPPerSM;
> + NvU32 rtCoreCount;
> +} GspSMInfo;
> +
> +typedef struct GspStaticConfigInfo_t
> +{
> + NvU8 grCapsBits[NV0080_CTRL_GR_CAPS_TBL_SIZE];
> + NV2080_CTRL_GPU_GET_GID_INFO_PARAMS gidInfo;
> + NV2080_CTRL_GPU_GET_FERMI_GPC_INFO_PARAMS gpcInfo;
> + NV2080_CTRL_GPU_GET_FERMI_TPC_INFO_PARAMS
> tpcInfo[MAX_GPC_COUNT];
> + NV2080_CTRL_GPU_GET_FERMI_ZCULL_INFO_PARAMS
> zcullInfo[MAX_GPC_COUNT];
> + NV2080_CTRL_BIOS_GET_SKU_INFO_PARAMS SKUInfo;
> + NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_PARAMS fbRegionInfoParams;
> + COMPUTE_BRANDING_TYPE computeBranding;
> +
> + NV0080_CTRL_GPU_GET_SRIOV_CAPS_PARAMS sriovCaps;
> + NvU32 sriovMaxGfid;
> +
> + NvU32 engineCaps[NVGPU_ENGINE_CAPS_MASK_ARRAY_MAX];
> +
> + GspSMInfo SM_info;
> +
> + NvBool poisonFuseEnabled;
> +
> + NvU64 fb_length;
> + NvU32 fbio_mask;
> + NvU32 fb_bus_width;
> + NvU32 fb_ram_type;
> + NvU32 fbp_mask;
> + NvU32 l2_cache_size;
> +
> + NvU32
> gfxpBufferSize[NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_CONTE
> XT_POOL];
> + NvU32
> gfxpBufferAlignment[NV2080_CTRL_CMD_GR_CTXSW_PREEMPTION_BIND_BUFFERS_
> CONTEXT_POOL];
> +
> + NvU8 gpuNameString[NV2080_GPU_MAX_NAME_STRING_LENGTH];
> + NvU8 gpuShortNameString[NV2080_GPU_MAX_NAME_STRING_LENGTH];
> + NvU16 gpuNameString_Unicode[NV2080_GPU_MAX_NAME_STRING_LENGTH];
> + NvBool bGpuInternalSku;
> + NvBool bIsQuadroGeneric;
> + NvBool bIsQuadroAd;
> + NvBool bIsNvidiaNvs;
> + NvBool bIsVgx;
> + NvBool bGeforceSmb;
> + NvBool bIsTitan;
> + NvBool bIsTesla;
> + NvBool bIsMobile;
> + NvBool bIsGc6Rtd3Allowed;
> + NvBool bIsGcOffRtd3Allowed;
> + NvBool bIsGcoffLegacyAllowed;
> +
> + NvU64 bar1PdeBase;
> + NvU64 bar2PdeBase;
> +
> + NvBool bVbiosValid;
> + NvU32 vbiosSubVendor;
> + NvU32 vbiosSubDevice;
> +
> + NvBool bPageRetirementSupported;
> +
> + NvBool bSplitVasBetweenServerClientRm;
> +
> + NvBool bClRootportNeedsNosnoopWAR;
> +
> + VIRTUAL_DISPLAY_GET_NUM_HEADS_PARAMS displaylessMaxHeads;
> + VIRTUAL_DISPLAY_GET_MAX_RESOLUTION_PARAMS
> displaylessMaxResolution;
> + NvU64 displaylessMaxPixels;
> +
> + // Client handle for internal RMAPI control.
> + NvHandle hInternalClient;
> +
> + // Device handle for internal RMAPI control.
> + NvHandle hInternalDevice;
> +
> + // Subdevice handle for internal RMAPI control.
> + NvHandle hInternalSubdevice;
> +
> + NvBool bSelfHostedMode;
> + NvBool bAtsSupported;
> +
> + NvBool bIsGpuUefi;
> +} GspStaticConfigInfo;
> +
> typedef struct GspSystemInfo
> {
> NvU64 gpuPhysAddr;
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/nvbitmask.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/nvbitmask.h
> new file mode 100644
> index 000000000000..16168294e524
> --- /dev/null
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/inc/kernel/gp
> u/nvbitmask.h
> @@ -0,0 +1,33 @@
> +#ifndef __src_nvidia_inc_kernel_gpu_nvbitmask_h__
> +#define __src_nvidia_inc_kernel_gpu_nvbitmask_h__
> +#include <nvrm/535.54.03/nvidia/inc/kernel/gpu/gpu_engine_type.h>
> +
> +/* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
> +
> +/*
> + * SPDX-FileCopyrightText: Copyright (c) 2021-2022 NVIDIA
> CORPORATION & AFFILIATES. All rights reserved.
> + * SPDX-License-Identifier: MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom
> the
> + * Software is furnished to do so, subject to the following
> conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +#define NVGPU_ENGINE_CAPS_MASK_BITS 32
> +#define NVGPU_ENGINE_CAPS_MASK_ARRAY_MAX
> ((RM_ENGINE_TYPE_LAST-1)/NVGPU_ENGINE_CAPS_MASK_BITS + 1)
> +
> +#endif
> diff --git
> a/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/kernel/inc/vg
> pu/rpc_headers.h
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/kernel/inc/vg
> pu/rpc_headers.h
> new file mode 100644
> index 000000000000..b48b26049b9d
> --- /dev/null
> +++
> b/drivers/gpu/drm/nouveau/include/nvrm/535.54.03/nvidia/kernel/inc/vg
> pu/rpc_headers.h
> @@ -0,0 +1,44 @@
> +#ifndef __src_nvidia_kernel_inc_vgpu_rpc_headers_h__
> +#define __src_nvidia_kernel_inc_vgpu_rpc_headers_h__
> +
> +/* Excerpt of RM headers from
> https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.54.03 */
> +
> +/*
> + * SPDX-FileCopyrightText: Copyright (c) 2017-2022 NVIDIA
> CORPORATION & AFFILIATES. All rights reserved.
> + * SPDX-License-Identifier: MIT
> + *
> + * Permission is hereby granted, free of charge, to any person
> obtaining a
> + * copy of this software and associated documentation files (the
> "Software"),
> + * to deal in the Software without restriction, including without
> limitation
> + * the rights to use, copy, modify, merge, publish, distribute,
> sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom
> the
> + * Software is furnished to do so, subject to the following
> conditions:
> + *
> + * The above copyright notice and this permission notice shall be
> included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> OTHER
> + * DEALINGS IN THE SOFTWARE.
> + */
> +
> +#define MAX_GPC_COUNT 32
> +
> +typedef struct VIRTUAL_DISPLAY_GET_MAX_RESOLUTION_PARAMS
> +{
> + NvU32 headIndex;
> + NvU32 maxHResolution;
> + NvU32 maxVResolution;
> +} VIRTUAL_DISPLAY_GET_MAX_RESOLUTION_PARAMS;
> +
> +typedef struct VIRTUAL_DISPLAY_GET_NUM_HEADS_PARAMS
> +{
> + NvU32 numHeads;
> + NvU32 maxNumHeads;
> +} VIRTUAL_DISPLAY_GET_NUM_HEADS_PARAMS;
> +
> +#endif
> diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
> b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
> index 4aaceb65217d..0fafb8f1e88d 100644
> --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
> +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
> @@ -354,6 +354,61 @@ r535_gsp_rpc_send(struct nvkm_gsp *gsp, void
> *argv, bool wait, u32 repc)
> return repv;
> }
>
> +static void
> +r535_gsp_rpc_rm_ctrl_done(struct nvkm_gsp_object *object, void
> *repv)
> +{
> + rpc_gsp_rm_control_v03_00 *rpc = container_of(repv,
> typeof(*rpc), params);
> +
> + nvkm_gsp_rpc_done(object->client->gsp, rpc);
> +}
> +
> +static void *
> +r535_gsp_rpc_rm_ctrl_push(struct nvkm_gsp_object *object, void
> *argv, u32 repc)
> +{
> + rpc_gsp_rm_control_v03_00 *rpc = container_of(argv,
> typeof(*rpc), params);
> + struct nvkm_gsp *gsp = object->client->gsp;
> + void *ret;
> +
> + rpc = nvkm_gsp_rpc_push(gsp, rpc, true, repc);
> + if (IS_ERR_OR_NULL(rpc))
> + return rpc;
> +
> + if (rpc->status) {
> + nvkm_error(&gsp->subdev, "cli:0x%08x obj:0x%08x ctrl
> cmd:0x%08x failed: 0x%08x\n",
> + object->client->object.handle, object-
> >handle, rpc->cmd, rpc->status);
> + ret = ERR_PTR(-EINVAL);
> + } else {
> + ret = repc ? rpc->params : NULL;
> + }
> +
> + if (IS_ERR_OR_NULL(ret))
> + nvkm_gsp_rpc_done(gsp, rpc);
> +
> + return ret;
> +}
> +
> +static void *
> +r535_gsp_rpc_rm_ctrl_get(struct nvkm_gsp_object *object, u32 cmd,
> u32 argc)
> +{
> + struct nvkm_gsp_client *client = object->client;
> + struct nvkm_gsp *gsp = client->gsp;
> + rpc_gsp_rm_control_v03_00 *rpc;
> +
> + nvkm_debug(&gsp->subdev, "cli:0x%08x obj:0x%08x ctrl
> cmd:0x%08x argc:%d\n",
> + client->object.handle, object->handle, cmd, argc);
> +
> + rpc = nvkm_gsp_rpc_get(gsp,
> NV_VGPU_MSG_FUNCTION_GSP_RM_CONTROL, sizeof(*rpc) + argc);
> + if (IS_ERR(rpc))
> + return rpc;
> +
> + rpc->hClient = client->object.handle;
> + rpc->hObject = object->handle;
> + rpc->cmd = cmd;
> + rpc->status = 0;
> + rpc->paramsSize = argc;
> + return rpc->params;
> +}
> +
> static void
> r535_gsp_rpc_done(struct nvkm_gsp *gsp, void *repv)
> {
> @@ -450,8 +505,50 @@ r535_gsp_rm = {
> .rpc_get = r535_gsp_rpc_get,
> .rpc_push = r535_gsp_rpc_push,
> .rpc_done = r535_gsp_rpc_done,
> +
> + .rm_ctrl_get = r535_gsp_rpc_rm_ctrl_get,
> + .rm_ctrl_push = r535_gsp_rpc_rm_ctrl_push,
> + .rm_ctrl_done = r535_gsp_rpc_rm_ctrl_done,
> };
>
> +static int
> +r535_gsp_rpc_get_gsp_static_info(struct nvkm_gsp *gsp)
> +{
> + GspStaticConfigInfo *rpc;
> +
> + rpc = nvkm_gsp_rpc_rd(gsp,
> NV_VGPU_MSG_FUNCTION_GET_GSP_STATIC_INFO, sizeof(*rpc));
> + if (IS_ERR(rpc))
> + return PTR_ERR(rpc);
> +
> + gsp->internal.client.object.client = &gsp->internal.client;
> + gsp->internal.client.object.parent = NULL;
> + gsp->internal.client.object.handle = rpc->hInternalClient;
> + gsp->internal.client.gsp = gsp;
> +
> + gsp->internal.device.object.client = &gsp->internal.client;
> + gsp->internal.device.object.parent = &gsp-
> >internal.client.object;
> + gsp->internal.device.object.handle = rpc->hInternalDevice;
> +
> + gsp->internal.device.subdevice.client = &gsp-
> >internal.client;
> + gsp->internal.device.subdevice.parent = &gsp-
> >internal.device.object;
> + gsp->internal.device.subdevice.handle = rpc-
> >hInternalSubdevice;
> +
> + nvkm_gsp_rpc_done(gsp, rpc);
> + return 0;
> +}
> +
> +static int
> +r535_gsp_postinit(struct nvkm_gsp *gsp)
> +{
> + int ret;
> +
> + ret = r535_gsp_rpc_get_gsp_static_info(gsp);
> + if (WARN_ON(ret))
> + return ret;
> +
> + return ret;
> +}
> +
> static int
> r535_gsp_rpc_unloading_guest_driver(struct nvkm_gsp *gsp, bool
> suspend)
> {
> @@ -1302,8 +1399,12 @@ r535_gsp_init(struct nvkm_gsp *gsp)
> nvkm_gsp_mem_dtor(gsp, &gsp->sr.meta);
> nvkm_gsp_radix3_dtor(gsp, &gsp->sr.radix3);
> nvkm_gsp_sg_free(gsp->subdev.device, &gsp->sr.sgt);
> + return ret;
> }
>
> + if (ret == 0)
> + ret = r535_gsp_postinit(gsp);
> +
> return ret;
> }
>
More information about the Nouveau
mailing list