Files
linux-nvgpu/drivers/gpu/nvgpu/hal/grmgr/grmgr_ga100.c
Sagar Kadamati 3e43f92f21 gpu: nvgpu: add ga10b & ga100 sources
Mass copy ga10b & ga100 sources from nvgpu-next repo.
TOP COMMIT-ID: 98f530e6924c844a1bf46816933a7fe015f3cce1

Jira NVGPU-4771

Change-Id: Ibf7102e9208133f8ef3bd3a98381138d5396d831
Signed-off-by: Sagar Kadamati <skadamati@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2524817
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com>
Reviewed-by: Debarshi Dutta <ddutta@nvidia.com>
Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Reviewed-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
GVS: Gerrit_Virtual_Submit
2021-06-17 12:56:16 -07:00

1210 lines
40 KiB
C

/*
* GA100 GR MANAGER
*
* Copyright (c) 2020-2021, NVIDIA CORPORATION. All rights reserved.
*
* 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.
*/
#include <nvgpu/types.h>
#include <nvgpu/enabled.h>
#include <nvgpu/io.h>
#include <nvgpu/gk20a.h>
#include "grmgr_ga100.h"
#include <nvgpu/hw/ga100/hw_smcarb_ga100.h>
#define GA100_GRMGR_PSMCARB_ALLOWED_UGPU(gpu_instance_id, gpcgrp_id) \
((gpu_instance_id == 0U) || ((gpu_instance_id == 1U) && (gpcgrp_id == 0U)) || \
((gpu_instance_id == 2U) && (gpcgrp_id == 1U)) || ((gpu_instance_id == 3U) && (gpcgrp_id == 0U)) || \
((gpu_instance_id == 4U) && (gpcgrp_id == 0U)) || ((gpu_instance_id == 5U) && (gpcgrp_id == 1U)) || \
((gpu_instance_id == 6U) && (gpcgrp_id == 1U)) || ((gpu_instance_id == 7U) && (gpcgrp_id == 0U)) || \
((gpu_instance_id == 8U) && (gpcgrp_id == 0U)) || ((gpu_instance_id == 9U) && (gpcgrp_id == 0U)) || \
((gpu_instance_id == 10U) && (gpcgrp_id == 0U)) || ((gpu_instance_id == 11U) && (gpcgrp_id == 1U)) || \
((gpu_instance_id == 12U) && (gpcgrp_id == 1U)) || ((gpu_instance_id == 13U) && (gpcgrp_id == 1U)) || \
((gpu_instance_id == 14U) && (gpcgrp_id == 1U)))
#define GA100_GRMGR_PSMCARB_SYS_PIPE_ALLOWED_UGPU(gr_syspipe_id, gpcgrp_id) \
(((gr_syspipe_id == 0U) && (gpcgrp_id == 0U)) || ((gr_syspipe_id == 1U) && (gpcgrp_id == 0U)) || \
((gr_syspipe_id == 2U) && (gpcgrp_id == 0U)) || ((gr_syspipe_id == 3U) && (gpcgrp_id == 0U)) || \
((gr_syspipe_id == 4U) && (gpcgrp_id == 1U)) || ((gr_syspipe_id == 5U) && (gpcgrp_id == 1U)) || \
((gr_syspipe_id == 6U) && (gpcgrp_id == 1U)) || ((gr_syspipe_id == 7U) && (gpcgrp_id == 1U)))
/* Static mig config list for 8 syspipes(OxFFU) + 8 GPCs + 8 Aysnc LCEs + 4:4 gpc group config */
static const struct nvgpu_mig_gpu_instance_config ga100_gpu_instance_config_8_syspipes = {
.usable_gr_syspipe_count = 8U,
.usable_gr_syspipe_mask = 0xFFU,
.num_config_supported = 10U,
.gpcgrp_gpc_count = { 4U, 4U },
.gpc_count = 8U,
.gpu_instance_config = {
{.config_name = "2 GPU instances each with 4 GPCs",
.num_gpu_instances = 2U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 4U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 4U}}},
{.config_name = "4 GPU instances each with 2 GPCs",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 6U,
.gr_syspipe_id = 6U,
.num_gpc = 2U}}},
{.config_name = "8 GPU instances each with 1 GPC",
.num_gpu_instances = 8U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 1 GPU instance with 4 GPCs + 4 GPU instances each with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 4U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 4 GPU instances each with 1 GPC + 1 GPU instance with 4 GPCs",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 4U}}},
{.config_name = "6 GPU instances - 2 GPU instances each with 2 GPCs + 4 GPU instances each with 1 GPC",
.num_gpu_instances = 6U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "6 GPU instances - 4 GPU instances each with 1 GPC + 2 GPU instances with 2 GPCs",
.num_gpu_instances = 6U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 6U,
.gr_syspipe_id = 6U,
.num_gpc = 2U}}},
{.config_name = "5 GPU instances - 2 GPU instances each with 2 GPCs + 1 GPC instance with 2 GPCs + 2 GPU instances each with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 1 GPC instance with 2 GPCs + 2 GPU instances each with 1 GPC + 2 GPU instances each with 2 GPCs",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 6U,
.gr_syspipe_id = 6U,
.num_gpc = 2U}}},
{.config_name = "1 GPU instance with 8 GPCs",
.num_gpu_instances = 1U,
.gpu_instance_static_config = {
{.gpu_instance_id = 0U,
.gr_syspipe_id = 0U,
.num_gpc = 8U}}}}
};
/* Static mig config list for 7 syspipes(OxFDU) + 8 GPCs + 8 Aysnc LCEs + 3:4 gpc group config */
static const struct nvgpu_mig_gpu_instance_config ga100_gpu_instance_config_7_syspipes = {
.usable_gr_syspipe_count = 7U,
.usable_gr_syspipe_mask = 0xFDU,
.num_config_supported = 10U,
.gpcgrp_gpc_count = { 4U, 4U },
.gpc_count = 8U,
.gpu_instance_config = {
{.config_name = "2 GPU instances each with 4 GPCs",
.num_gpu_instances = 2U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 4U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 4U}}},
{.config_name = "4 GPU instances each with 2 GPCs",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 6U,
.gr_syspipe_id = 6U,
.num_gpc = 2U}}},
{.config_name = "7 GPU instances - 1 GPU instance with 2 GPCs + 6 GPU instances each with 1 GPC",
.num_gpu_instances = 7U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 1 GPU instance with 4 GPCs + 4 GPU instances each with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 4U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "4 GPU instances - 1 GPU instance with 2 GPCs + 2 GPU instances each with 1 GPC + 1 GPU instance with 4 GPCs",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 4U}}},
{.config_name = "6 GPU instances - 2 GPU instances each with 2 GPCs + 4 GPU instances each with 1 GPC",
.num_gpu_instances = 6U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 1 GPU instance with 2 GPCs + 2 GPU instances each with 1 GPC + 2 GPU instances with 2 GPCs",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 6U,
.gr_syspipe_id = 6U,
.num_gpc = 2U}}},
{.config_name = "5 GPU instances - 2 GPU instances each with 2 GPCs + 1 GPC instance with 2 GPCs + 2 GPU instances with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 1 GPC instance with 2 GPCs + 2 GPU instances each with 1 GPC + 2 GPU instances each with 2 GPCs",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 6U,
.gr_syspipe_id = 6U,
.num_gpc = 2U}}},
{.config_name = "1 GPU instance with 8 GPCs",
.num_gpu_instances = 1U,
.gpu_instance_static_config = {
{.gpu_instance_id = 0U,
.gr_syspipe_id = 0U,
.num_gpc = 8U}}}}
};
/* Static mig config list for 8 syspipes(OxFFU) + 7 GPCs + 8 Aysnc LCEs + 4:3 gpc group config */
static const struct nvgpu_mig_gpu_instance_config ga100_gpu_instance_config_8_syspipes_7_gpcs_4_3_gpcgrp = {
.usable_gr_syspipe_count = 8U,
.usable_gr_syspipe_mask = 0xFFU,
.num_config_supported = 10U,
.gpcgrp_gpc_count = { 4U, 3U },
.gpc_count = 7U,
.gpu_instance_config = {
{.config_name = "2 GPU instances - 1 GPU instance with 4 GPCs + 1 GPU instance with 3 GPCs",
.num_gpu_instances = 2U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 4U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 3U}}},
{.config_name = "4 GPU instances - 3 GPU instances each with 2 GPCs + 1 GPU instance with 1 GPC",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "7 GPU instances each with 1 GPC",
.num_gpu_instances = 7U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "4 GPU instances - 1 GPU instance with 4 GPCs + 3 GPU instances each with 1 GPC",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 4U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 2 GPU instances with 2 GPCs + 3 GPU instances each with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "6 GPU instances - 1 GPU instance with 2 GPCs + 5 GPU instances each with 1 GPC",
.num_gpu_instances = 6U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 1 GPU instance with 2 GPCs + 2 GPU instances each with 1 GPC + 1 GPU instance with 2 GPCs + 1 GPU instance with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 2 GPU instances each with 1 GPC + 2 GPC instances each with 2 GPCs + + 1 GPC instance with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 4 GPU instances each with 1 GPC + 1 GPC instance with 3 GPCs",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 3U}}},
{.config_name = "1 GPU instance with 7 GPCs",
.num_gpu_instances = 1U,
.gpu_instance_static_config = {
{.gpu_instance_id = 0U,
.gr_syspipe_id = 0U,
.num_gpc = 7U}}}}
};
/* Static mig config list for 8 syspipes(OxFFU) + 7 GPCs + 8 Aysnc LCEs + 3:4 gpc group config */
static const struct nvgpu_mig_gpu_instance_config ga100_gpu_instance_config_8_syspipes_7_gpcs_3_4_gpcgrp = {
.usable_gr_syspipe_count = 8U,
.usable_gr_syspipe_mask = 0xFFU,
.num_config_supported = 10U,
.gpcgrp_gpc_count = { 3U, 4U },
.gpc_count = 7U,
.gpu_instance_config = {
{.config_name = "2 GPU instances - 1 GPU instance with 3 GPCs + 1 GPU instance with 4 GPCs",
.num_gpu_instances = 2U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 3U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 4U}}},
{.config_name = "4 GPU instances - 1 GPU instance with 2 GPCs + 1 GPU instance with 1 GPC + 2 GPU instances with 2 GPCs",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 6U,
.gr_syspipe_id = 6U,
.num_gpc = 2U}}},
{.config_name = "7 GPU instances each with 1 GPC",
.num_gpu_instances = 7U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "4 GPU instances - 3 GPU instances each with 1 GPC + 1 GPU instance with 4 GPCs",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 4U}}},
{.config_name = "6 GPU instances - 1 GPU instance with 2 GPCs + 1 GPU instance with 1 GPC + 4 GPU instances each with 1 GPC",
.num_gpu_instances = 6U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "6 GPU instances - 1 GPU instances with 2 GPCs + 5 GPU instances each with 1 GPC",
.num_gpu_instances = 6U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 1 GPU instance with 2 GPCs + 1 GPU instance with 1 GPC + 1 GPU instance with 2 GPCs + 2 GPU instances each with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U},
{.gpu_instance_id = 14U,
.gr_syspipe_id = 7U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 3 GPU instances each with 1 GPC + 2 GPC instances with 2 GPCs",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 6U,
.gr_syspipe_id = 6U,
.num_gpc = 2U}}},
{.config_name = "4 GPU instances - 3 GPU instances each with 1 GPC + 1 GPC instance with 4 GPCs",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 4U}}},
{.config_name = "1 GPU instance with 7 GPCs",
.num_gpu_instances = 1U,
.gpu_instance_static_config = {
{.gpu_instance_id = 0U,
.gr_syspipe_id = 0U,
.num_gpc = 7U}}}}
};
/* Static mig config list for 8 syspipes(OxFFU) + 6 GPCs + 8 Aysnc LCEs + 3:3 gpc group config */
static const struct nvgpu_mig_gpu_instance_config ga100_gpu_instance_config_8_syspipes_6_gpcs_3_3_gpcgrp = {
.usable_gr_syspipe_count = 8U,
.usable_gr_syspipe_mask = 0xFFU,
.num_config_supported = 7U,
.gpcgrp_gpc_count = { 3U, 3U },
.gpc_count = 6U,
.gpu_instance_config = {
{.config_name = "2 GPU instances each with 3 GPCs",
.num_gpu_instances = 2U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 3U},
{.gpu_instance_id = 2U,
.gr_syspipe_id = 4U,
.num_gpc = 3U}}},
{.config_name = "3 GPU instances - 1 GPU instance with 3 GPCs + 1 GPU instance with 2 GPCs + 1 GPU instance with 1 GPC",
.num_gpu_instances = 3U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 3U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "6 GPU instances each with 1 GPC",
.num_gpu_instances = 6U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "4 GPU instances - 1 GPU instance with 3 GPCs + 3 GPU instances each with 1 GPC",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 1U,
.gr_syspipe_id = 0U,
.num_gpc = 3U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "4 GPU instances - 1 GPU instance with 2 GPCs + 1 GPU instance with 1 GPC + 1 GPU instance with 2 GPCs + 1 GPU instance with 1 GPC",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "5 GPU instances - 1 GPU instance with 2 GPCs + 1 GPU instance with 1 GPC + 3 GPU instances each with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U},
{.gpu_instance_id = 13U,
.gr_syspipe_id = 6U,
.num_gpc = 1U}}},
{.config_name = "1 GPU instance with 6 GPCs",
.num_gpu_instances = 1U,
.gpu_instance_static_config = {
{.gpu_instance_id = 0U,
.gr_syspipe_id = 0U,
.num_gpc = 6U}}}}
};
/* Static mig config list for 8 syspipes(OxFFU) + 6 GPCs + 8 Aysnc LCEs + 4:2 gpc group config */
static const struct nvgpu_mig_gpu_instance_config ga100_gpu_instance_config_8_syspipes_6_gpcs_4_2_gpcgrp = {
.usable_gr_syspipe_count = 8U,
.usable_gr_syspipe_mask = 0xFFU,
.num_config_supported = 7U,
.gpcgrp_gpc_count = { 4U, 2U },
.gpc_count = 6U,
.gpu_instance_config = {
{.config_name = "3 GPU instances each with 2 GPCs",
.num_gpu_instances = 3U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U}}},
{.config_name = "4 GPU instances - 2 GPU instances each with 2 GPCs + 2 GPU instances each with 1 GPC ",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U}}},
{.config_name = "6 GPU instances each with 1 GPC",
.num_gpu_instances = 6U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U}}},
{.config_name = "4 GPU instances - 2 GPU instances each with 1 GPC + 2 GPU instances each with 2 GPCs",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 7U,
.gr_syspipe_id = 0U,
.num_gpc = 1U},
{.gpu_instance_id = 8U,
.gr_syspipe_id = 1U,
.num_gpc = 1U},
{.gpu_instance_id = 4U,
.gr_syspipe_id = 2U,
.num_gpc = 2U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U}}},
{.config_name = "4 GPU instances - 1 GPU instance with 2 GPCs + 2 GPU instances each with 1 GPC + 1 GPU instance with 2 GPCs ",
.num_gpu_instances = 4U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 5U,
.gr_syspipe_id = 4U,
.num_gpc = 2U}}},
{.config_name = "5 GPU instances - 1 GPU instance with 2 GPCs + 4 GPU instances each with 1 GPC",
.num_gpu_instances = 5U,
.gpu_instance_static_config = {
{.gpu_instance_id = 3U,
.gr_syspipe_id = 0U,
.num_gpc = 2U},
{.gpu_instance_id = 9U,
.gr_syspipe_id = 2U,
.num_gpc = 1U},
{.gpu_instance_id = 10U,
.gr_syspipe_id = 3U,
.num_gpc = 1U},
{.gpu_instance_id = 11U,
.gr_syspipe_id = 4U,
.num_gpc = 1U},
{.gpu_instance_id = 12U,
.gr_syspipe_id = 5U,
.num_gpc = 1U}}},
{.config_name = "1 GPU instance with 6 GPCs",
.num_gpu_instances = 1U,
.gpu_instance_static_config = {
{.gpu_instance_id = 0U,
.gr_syspipe_id = 0U,
.num_gpc = 6U}}}}
};
static int ga100_grmgr_get_first_available_gr_syspipe_id(struct gk20a *g,
u32 gpu_instance_id, u32 ugpu_id, u32 *gr_syspipe_id)
{
u32 usable_gr_syspipe_count = g->mig.usable_gr_syspipe_count;
u32 index;
if (gr_syspipe_id == NULL) {
nvgpu_err(g, "gr_syspipe_id NULL");
return -EINVAL;
}
for (index = 0U; index < usable_gr_syspipe_count; index++) {
u32 local_gr_syspipe_id =
g->mig.usable_gr_syspipe_instance_id[index];
if (GA100_GRMGR_PSMCARB_SYS_PIPE_ALLOWED_UGPU(local_gr_syspipe_id, ugpu_id)) {
*gr_syspipe_id = local_gr_syspipe_id;
return 0;
}
}
return -EINVAL;
}
const struct nvgpu_mig_gpu_instance_config *ga100_grmgr_get_mig_config_ptr(
struct gk20a *g) {
static struct nvgpu_mig_gpu_instance_config ga100_gpu_instance_default_config;
struct nvgpu_gpu_instance_config *gpu_instance_config;
u32 gpc_count_per_gpu_instance = 0U;
u32 num_config = 0U;
int err;
if ((g->mig.usable_gr_syspipe_count ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_3_3_gpcgrp.usable_gr_syspipe_count) &&
(g->mig.usable_gr_syspipe_mask ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_3_3_gpcgrp.usable_gr_syspipe_mask) &&
(g->mig.gpc_count ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_3_3_gpcgrp.gpc_count) &&
(g->mig.gpcgrp_gpc_count[0] ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_3_3_gpcgrp.gpcgrp_gpc_count[0]) &&
(g->mig.gpcgrp_gpc_count[1] ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_3_3_gpcgrp.gpcgrp_gpc_count[1])) {
nvgpu_log(g, gpu_dbg_mig,
"Static mig config list for 8 syspipes(0xFFU) + 6 GPCs + 8 Aysnc LCEs "
"+ 3:3 gpc group config ");
return &ga100_gpu_instance_config_8_syspipes_6_gpcs_3_3_gpcgrp;
} else if ((g->mig.usable_gr_syspipe_count ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_4_2_gpcgrp.usable_gr_syspipe_count) &&
(g->mig.usable_gr_syspipe_mask ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_4_2_gpcgrp.usable_gr_syspipe_mask) &&
(g->mig.gpc_count ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_4_2_gpcgrp.gpc_count) &&
(g->mig.gpcgrp_gpc_count[0] ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_4_2_gpcgrp.gpcgrp_gpc_count[0]) &&
(g->mig.gpcgrp_gpc_count[1] ==
ga100_gpu_instance_config_8_syspipes_6_gpcs_4_2_gpcgrp.gpcgrp_gpc_count[1])) {
nvgpu_log(g, gpu_dbg_mig,
"Static mig config list for 8 syspipes(0xFFU) + 6 GPCs + 8 Aysnc LCEs "
"+ 4:2 gpc group config ");
return &ga100_gpu_instance_config_8_syspipes_6_gpcs_4_2_gpcgrp;
} else if ((g->mig.usable_gr_syspipe_count ==
ga100_gpu_instance_config_8_syspipes.usable_gr_syspipe_count) &&
(g->mig.usable_gr_syspipe_mask ==
ga100_gpu_instance_config_8_syspipes.usable_gr_syspipe_mask) &&
(g->mig.gpc_count ==
ga100_gpu_instance_config_8_syspipes.gpc_count) &&
(g->mig.gpcgrp_gpc_count[0] ==
ga100_gpu_instance_config_8_syspipes.gpcgrp_gpc_count[0]) &&
(g->mig.gpcgrp_gpc_count[1] ==
ga100_gpu_instance_config_8_syspipes.gpcgrp_gpc_count[1])) {
nvgpu_log(g, gpu_dbg_mig,
"Static mig config list for 8 syspipes(0xFFU) + 8 GPCs + 8 Aysnc LCEs "
"+ 4:4 gpc group config ");
return &ga100_gpu_instance_config_8_syspipes;
} else if ((g->mig.usable_gr_syspipe_count ==
ga100_gpu_instance_config_7_syspipes.usable_gr_syspipe_count) &&
(g->mig.usable_gr_syspipe_mask ==
ga100_gpu_instance_config_7_syspipes.usable_gr_syspipe_mask) &&
(g->mig.gpc_count ==
ga100_gpu_instance_config_7_syspipes.gpc_count) &&
(g->mig.gpcgrp_gpc_count[0] ==
ga100_gpu_instance_config_7_syspipes.gpcgrp_gpc_count[0]) &&
(g->mig.gpcgrp_gpc_count[1] ==
ga100_gpu_instance_config_7_syspipes.gpcgrp_gpc_count[1])) {
nvgpu_log(g, gpu_dbg_mig,
"Static mig config list for 7 syspipes(0xFDU) + 8 GPCs + 8 Aysnc LCEs "
"+ 4:4 gpc group config ");
return &ga100_gpu_instance_config_7_syspipes;
} else if ((g->mig.usable_gr_syspipe_count ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_4_3_gpcgrp.usable_gr_syspipe_count) &&
(g->mig.usable_gr_syspipe_mask ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_4_3_gpcgrp.usable_gr_syspipe_mask) &&
(g->mig.gpc_count ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_4_3_gpcgrp.gpc_count) &&
(g->mig.gpcgrp_gpc_count[0] ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_4_3_gpcgrp.gpcgrp_gpc_count[0]) &&
(g->mig.gpcgrp_gpc_count[1] ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_4_3_gpcgrp.gpcgrp_gpc_count[1])) {
nvgpu_log(g, gpu_dbg_mig,
"Static mig config list for 8 syspipes(0xFFU) + 7 GPCs + 8 Aysnc LCEs "
"+ 4:3 gpc group config ");
return &ga100_gpu_instance_config_8_syspipes_7_gpcs_4_3_gpcgrp;
} else if ((g->mig.usable_gr_syspipe_count ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_3_4_gpcgrp.usable_gr_syspipe_count) &&
(g->mig.usable_gr_syspipe_mask ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_3_4_gpcgrp.usable_gr_syspipe_mask) &&
(g->mig.gpc_count ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_3_4_gpcgrp.gpc_count) &&
(g->mig.gpcgrp_gpc_count[0] ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_3_4_gpcgrp.gpcgrp_gpc_count[0]) &&
(g->mig.gpcgrp_gpc_count[1] ==
ga100_gpu_instance_config_8_syspipes_7_gpcs_3_4_gpcgrp.gpcgrp_gpc_count[1])) {
nvgpu_log(g, gpu_dbg_mig,
"Static mig config list for 8 syspipes(0xFFU) + 7 GPCs + 8 Aysnc LCEs "
"+ 3:4 gpc group config ");
return &ga100_gpu_instance_config_8_syspipes_7_gpcs_3_4_gpcgrp;
}
/* Fall back to default config */
ga100_gpu_instance_default_config.usable_gr_syspipe_count =
g->mig.usable_gr_syspipe_count;
ga100_gpu_instance_default_config.usable_gr_syspipe_mask =
g->mig.usable_gr_syspipe_mask;
ga100_gpu_instance_default_config.gpcgrp_gpc_count[0] =
g->mig.gpcgrp_gpc_count[0];
ga100_gpu_instance_default_config.gpcgrp_gpc_count[1] =
g->mig.gpcgrp_gpc_count[1];
ga100_gpu_instance_default_config.gpc_count = g->mig.gpc_count;
gpc_count_per_gpu_instance = (g->mig.gpc_count / 2);
if ((g->mig.usable_gr_syspipe_count >= 0x2U) &&
(g->mig.gpcgrp_gpc_count[0] >= gpc_count_per_gpu_instance) &&
(g->mig.gpcgrp_gpc_count[1] >= gpc_count_per_gpu_instance)) {
u32 index;
u32 start_id_of_half_partition = 0x1;
gpu_instance_config =
&ga100_gpu_instance_default_config.gpu_instance_config[num_config];
snprintf(gpu_instance_config->config_name,
NVGPU_MIG_MAX_CONFIG_NAME_SIZE,
"2 GPU instances each with %u GPCs", gpc_count_per_gpu_instance);
gpu_instance_config->num_gpu_instances = 2U;
for (index = 0U; index < 2U; index++) {
struct nvgpu_gpu_instance_static_config
*gpu_instance_static_config =
&gpu_instance_config->gpu_instance_static_config[index];
gpu_instance_static_config->gpu_instance_id =
nvgpu_safe_add_u32(start_id_of_half_partition, index);
err = ga100_grmgr_get_first_available_gr_syspipe_id(g,
nvgpu_safe_add_u32(start_id_of_half_partition, index),
index,
&gpu_instance_static_config->gr_syspipe_id);
if (err != 0) {
nvgpu_err(g, "ga100_grmgr_get_first_available_gr_syspipe_id-failed "
"index[%u] gpu_instance_id[%u] ",
index,
gpu_instance_static_config->gpu_instance_id);
return NULL;
}
gpu_instance_static_config->num_gpc = gpc_count_per_gpu_instance;
nvgpu_log(g, gpu_dbg_mig,
"Fall back to default HALF partition index[%u] config_index[%u] "
"gpu_instance_id[%u] gr_syspipe_id[%u] num_gpc[%u]",
index,
num_config,
gpu_instance_static_config->gpu_instance_id,
gpu_instance_static_config->gr_syspipe_id,
gpu_instance_static_config->num_gpc);
}
num_config++;
}
gpu_instance_config =
&ga100_gpu_instance_default_config.gpu_instance_config[num_config];
snprintf(gpu_instance_config->config_name,
NVGPU_MIG_MAX_CONFIG_NAME_SIZE,
"1 GPU instance with %u GPCs", g->mig.gpc_count);
gpu_instance_config->num_gpu_instances = 1U;
gpu_instance_config->gpu_instance_static_config[0].gpu_instance_id = 0U;
gpu_instance_config->gpu_instance_static_config[0].gr_syspipe_id = 0U;
gpu_instance_config->gpu_instance_static_config[0].num_gpc =
g->mig.gpc_count;
++num_config;
ga100_gpu_instance_default_config.num_config_supported = num_config;
nvgpu_err(g,
"mig gpu instance config is not found for usable_gr_syspipe_count[%u] "
"usable_gr_syspipe_mask[%x] gpc[%u] "
"fall back to %u default config mode",
g->mig.usable_gr_syspipe_count,
g->mig.usable_gr_syspipe_mask,
g->mig.gpc_count,
num_config);
return ((const struct nvgpu_mig_gpu_instance_config *)
&ga100_gpu_instance_default_config);
}
u32 ga100_grmgr_get_max_sys_pipes(struct gk20a *g)
{
return smcarb_max_partitionable_sys_pipes_v();
}
u32 ga100_grmgr_get_allowed_swizzid_size(struct gk20a *g)
{
return smcarb_allowed_swizzid__size1_v();
}
int ga100_grmgr_get_gpc_instance_gpcgrp_id(struct gk20a *g,
u32 gpu_instance_id, u32 gr_syspipe_id, u32 *gpcgrp_id)
{
u32 local_gpcgrp_id;
bool supported;
if ((gr_syspipe_id >= g->ops.grmgr.get_max_sys_pipes(g)) ||
(gpu_instance_id >= smcarb_allowed_swizzid__size1_v()) ||
(gpcgrp_id == NULL)) {
nvgpu_err(g,
"[Invalid param] gr_syspipe_id[%u %u] gpu_instance_id[%u %u] "
"or gpcgrp_id == NULL ",
gr_syspipe_id, g->ops.grmgr.get_max_sys_pipes(g),
gpu_instance_id, smcarb_allowed_swizzid__size1_v());
return -EINVAL;
}
for (local_gpcgrp_id = 0U; local_gpcgrp_id < 2U; local_gpcgrp_id++) {
supported = GA100_GRMGR_PSMCARB_ALLOWED_UGPU(
gpu_instance_id, local_gpcgrp_id);
supported &= GA100_GRMGR_PSMCARB_SYS_PIPE_ALLOWED_UGPU(
gr_syspipe_id, local_gpcgrp_id);
if (supported) {
*gpcgrp_id = local_gpcgrp_id;
nvgpu_log(g, gpu_dbg_mig,
"Found [%u] gpcgrp id for gpu_instance_id[%u] "
"gr_syspipe_id[%u] ",
*gpcgrp_id,
gpu_instance_id,
gr_syspipe_id);
return 0;
}
}
return -EINVAL;
}