mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 09:57:08 +03:00
gpu: nvgpu: Multiple WPR support
The WPR will be divided into several sub-WPRs, one for each Falcon and one common for sharing between Falcons which bootstrap falcons - Defined & used flag NVGPU_SUPPORT_MULTIPLE_WPR to know M-WPR support. - Added struct lsfm_sub_wpr to hold subWPR header info - Added struct lsf_shared_sub_wpr_header to hold subWPR info & copied to WPR blob after LSF_WPR_HEADER - Set NVGPU_SUPPORT_MULTIPLE_WPR to false for gp106, gv100 & gv11b. - Added methods to support to multiple WPR support & called by checking flag NVGPU_SUPPORT_MULTIPLE_WPR in ucode blob preparation flow. JIRA NVGPUTU10X / NVGPUT-99 Change-Id: I81d0490158390e79b6841374158805f7a84ee6cb Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1725369 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
Tejal Kudav
parent
7aded206bc
commit
25fc64b944
@@ -368,6 +368,50 @@ rel_sig:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Discover all supported shared data falcon SUB WPRs
|
||||||
|
*/
|
||||||
|
static u32 lsfm_discover_and_add_sub_wprs(struct gk20a *g,
|
||||||
|
struct ls_flcn_mgr_v1 *plsfm)
|
||||||
|
{
|
||||||
|
struct lsfm_sub_wpr *pnode;
|
||||||
|
u32 size_4K = 0;
|
||||||
|
u32 sub_wpr_index;
|
||||||
|
|
||||||
|
for (sub_wpr_index = 1;
|
||||||
|
sub_wpr_index <= LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_MAX;
|
||||||
|
sub_wpr_index++) {
|
||||||
|
|
||||||
|
switch (sub_wpr_index) {
|
||||||
|
case LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_FRTS_VBIOS_TABLES:
|
||||||
|
size_4K = LSF_SHARED_DATA_SUB_WPR_FRTS_VBIOS_TABLES_SIZE_IN_4K;
|
||||||
|
break;
|
||||||
|
case LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_PLAYREADY_SHARED_DATA:
|
||||||
|
size_4K = LSF_SHARED_DATA_SUB_WPR_PLAYREADY_SHARED_DATA_SIZE_IN_4K;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
size_4K = 0; /* subWpr not supported */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size_4K) {
|
||||||
|
pnode = nvgpu_kzalloc(g, sizeof(struct lsfm_sub_wpr));
|
||||||
|
if (pnode == NULL)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
pnode->sub_wpr_header.use_case_id = sub_wpr_index;
|
||||||
|
pnode->sub_wpr_header.size_4K = size_4K;
|
||||||
|
|
||||||
|
pnode->pnext = plsfm->psub_wpr_list;
|
||||||
|
plsfm->psub_wpr_list = pnode;
|
||||||
|
|
||||||
|
plsfm->managed_sub_wpr_count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int gp106_prepare_ucode_blob(struct gk20a *g)
|
int gp106_prepare_ucode_blob(struct gk20a *g)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -400,6 +444,9 @@ int gp106_prepare_ucode_blob(struct gk20a *g)
|
|||||||
if (err)
|
if (err)
|
||||||
goto exit_err;
|
goto exit_err;
|
||||||
|
|
||||||
|
if (nvgpu_is_enabled(g, NVGPU_SUPPORT_MULTIPLE_WPR))
|
||||||
|
lsfm_discover_and_add_sub_wprs(g, plsfm);
|
||||||
|
|
||||||
if (plsfm->managed_flcn_cnt && !g->acr.ucode_blob.cpu_va) {
|
if (plsfm->managed_flcn_cnt && !g->acr.ucode_blob.cpu_va) {
|
||||||
/* Generate WPR requirements*/
|
/* Generate WPR requirements*/
|
||||||
err = lsf_gen_wpr_requirements(g, plsfm);
|
err = lsf_gen_wpr_requirements(g, plsfm);
|
||||||
@@ -671,6 +718,40 @@ int lsfm_fill_flcn_bl_gen_desc(struct gk20a *g,
|
|||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32 lsfm_init_sub_wpr_contents(struct gk20a *g,
|
||||||
|
struct ls_flcn_mgr_v1 *plsfm, struct nvgpu_mem *ucode)
|
||||||
|
{
|
||||||
|
struct lsfm_sub_wpr *psub_wpr_node;
|
||||||
|
struct lsf_shared_sub_wpr_header last_sub_wpr_header;
|
||||||
|
u32 temp_size = sizeof(struct lsf_shared_sub_wpr_header);
|
||||||
|
u32 sub_wpr_header_offset = 0;
|
||||||
|
u32 i = 0;
|
||||||
|
|
||||||
|
/* SubWpr headers are placed after WPR headers */
|
||||||
|
sub_wpr_header_offset = LSF_WPR_HEADERS_TOTAL_SIZE_MAX;
|
||||||
|
|
||||||
|
/* Walk through the managed shared subWPRs headers
|
||||||
|
* and flush them to FB
|
||||||
|
*/
|
||||||
|
psub_wpr_node = plsfm->psub_wpr_list;
|
||||||
|
i = 0;
|
||||||
|
while (psub_wpr_node) {
|
||||||
|
nvgpu_mem_wr_n(g, ucode,
|
||||||
|
sub_wpr_header_offset + (i * temp_size),
|
||||||
|
&psub_wpr_node->sub_wpr_header, temp_size);
|
||||||
|
|
||||||
|
psub_wpr_node = psub_wpr_node->pnext;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
last_sub_wpr_header.use_case_id =
|
||||||
|
LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_INVALID;
|
||||||
|
nvgpu_mem_wr_n(g, ucode, sub_wpr_header_offset +
|
||||||
|
(plsfm->managed_sub_wpr_count * temp_size),
|
||||||
|
&last_sub_wpr_header, temp_size);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize WPR contents */
|
/* Initialize WPR contents */
|
||||||
void lsfm_init_wpr_contents(struct gk20a *g,
|
void lsfm_init_wpr_contents(struct gk20a *g,
|
||||||
struct ls_flcn_mgr_v1 *plsfm, struct nvgpu_mem *ucode)
|
struct ls_flcn_mgr_v1 *plsfm, struct nvgpu_mem *ucode)
|
||||||
@@ -684,6 +765,9 @@ void lsfm_init_wpr_contents(struct gk20a *g,
|
|||||||
memset(&last_wpr_hdr, 0, sizeof(struct lsf_wpr_header_v1));
|
memset(&last_wpr_hdr, 0, sizeof(struct lsf_wpr_header_v1));
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
|
if (nvgpu_is_enabled(g, NVGPU_SUPPORT_MULTIPLE_WPR))
|
||||||
|
lsfm_init_sub_wpr_contents(g, plsfm, ucode);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Walk the managed falcons, flush WPR and LSB headers to FB.
|
* Walk the managed falcons, flush WPR and LSB headers to FB.
|
||||||
* flush any bl args to the storage area relative to the
|
* flush any bl args to the storage area relative to the
|
||||||
@@ -956,6 +1040,7 @@ int lsf_gen_wpr_requirements(struct gk20a *g,
|
|||||||
struct ls_flcn_mgr_v1 *plsfm)
|
struct ls_flcn_mgr_v1 *plsfm)
|
||||||
{
|
{
|
||||||
struct lsfm_managed_ucode_img_v2 *pnode = plsfm->ucode_img_list;
|
struct lsfm_managed_ucode_img_v2 *pnode = plsfm->ucode_img_list;
|
||||||
|
struct lsfm_sub_wpr *pnode_sub_wpr = plsfm->psub_wpr_list;
|
||||||
u32 wpr_offset;
|
u32 wpr_offset;
|
||||||
|
|
||||||
/* Calculate WPR size required */
|
/* Calculate WPR size required */
|
||||||
@@ -967,6 +1052,22 @@ int lsf_gen_wpr_requirements(struct gk20a *g,
|
|||||||
wpr_offset = sizeof(struct lsf_wpr_header_v1) *
|
wpr_offset = sizeof(struct lsf_wpr_header_v1) *
|
||||||
(plsfm->managed_flcn_cnt+1);
|
(plsfm->managed_flcn_cnt+1);
|
||||||
|
|
||||||
|
if (nvgpu_is_enabled(g, NVGPU_SUPPORT_MULTIPLE_WPR)) {
|
||||||
|
wpr_offset = ALIGN_UP(wpr_offset,
|
||||||
|
LSF_WPR_HEADERS_TOTAL_SIZE_MAX);
|
||||||
|
/*
|
||||||
|
* SUB WPR header is appended after
|
||||||
|
* LSF_WPR_HEADER in WPR blob.
|
||||||
|
* The size is allocated as per the managed
|
||||||
|
* SUB WPR count.
|
||||||
|
*/
|
||||||
|
wpr_offset = ALIGN_UP(wpr_offset,
|
||||||
|
LSF_SUB_WPR_HEADER_ALIGNMENT);
|
||||||
|
wpr_offset = wpr_offset +
|
||||||
|
(sizeof(struct lsf_shared_sub_wpr_header) *
|
||||||
|
(plsfm->managed_sub_wpr_count + 1));
|
||||||
|
}
|
||||||
|
|
||||||
/* Walk the managed falcons, accounting for the LSB structs
|
/* Walk the managed falcons, accounting for the LSB structs
|
||||||
as well as the ucode images. */
|
as well as the ucode images. */
|
||||||
while (pnode) {
|
while (pnode) {
|
||||||
@@ -1028,6 +1129,23 @@ int lsf_gen_wpr_requirements(struct gk20a *g,
|
|||||||
}
|
}
|
||||||
pnode = pnode->next;
|
pnode = pnode->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nvgpu_is_enabled(g, NVGPU_SUPPORT_MULTIPLE_WPR)) {
|
||||||
|
/* Walk through the sub wpr headers to accommodate
|
||||||
|
* sub wprs in WPR request
|
||||||
|
*/
|
||||||
|
while (pnode_sub_wpr) {
|
||||||
|
wpr_offset = ALIGN_UP(wpr_offset,
|
||||||
|
SUB_WPR_SIZE_ALIGNMENT);
|
||||||
|
pnode_sub_wpr->sub_wpr_header.start_addr = wpr_offset;
|
||||||
|
wpr_offset = wpr_offset +
|
||||||
|
(pnode_sub_wpr->sub_wpr_header.size_4K
|
||||||
|
<< SHIFT_4KB);
|
||||||
|
pnode_sub_wpr = pnode_sub_wpr->pnext;
|
||||||
|
}
|
||||||
|
wpr_offset = ALIGN_UP(wpr_offset, SUB_WPR_SIZE_ALIGNMENT);
|
||||||
|
}
|
||||||
|
|
||||||
plsfm->wpr_size = wpr_offset;
|
plsfm->wpr_size = wpr_offset;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -830,6 +830,7 @@ int gp106_init_hal(struct gk20a *g)
|
|||||||
__nvgpu_set_enabled(g, NVGPU_GR_USE_DMA_FOR_FW_BOOTSTRAP, true);
|
__nvgpu_set_enabled(g, NVGPU_GR_USE_DMA_FOR_FW_BOOTSTRAP, true);
|
||||||
__nvgpu_set_enabled(g, NVGPU_PMU_PSTATE, true);
|
__nvgpu_set_enabled(g, NVGPU_PMU_PSTATE, true);
|
||||||
__nvgpu_set_enabled(g, NVGPU_PMU_FECS_BOOTSTRAP_DONE, false);
|
__nvgpu_set_enabled(g, NVGPU_PMU_FECS_BOOTSTRAP_DONE, false);
|
||||||
|
__nvgpu_set_enabled(g, NVGPU_SUPPORT_MULTIPLE_WPR, false);
|
||||||
|
|
||||||
/* Read fuses to check if gpu needs to boot in secure/non-secure mode */
|
/* Read fuses to check if gpu needs to boot in secure/non-secure mode */
|
||||||
if (gops->fuse.check_priv_security(g))
|
if (gops->fuse.check_priv_security(g))
|
||||||
|
|||||||
@@ -911,6 +911,7 @@ int gv100_init_hal(struct gk20a *g)
|
|||||||
__nvgpu_set_enabled(g, NVGPU_SEC_PRIVSECURITY, true);
|
__nvgpu_set_enabled(g, NVGPU_SEC_PRIVSECURITY, true);
|
||||||
__nvgpu_set_enabled(g, NVGPU_SEC_SECUREGPCCS, true);
|
__nvgpu_set_enabled(g, NVGPU_SEC_SECUREGPCCS, true);
|
||||||
__nvgpu_set_enabled(g, NVGPU_PMU_FECS_BOOTSTRAP_DONE, false);
|
__nvgpu_set_enabled(g, NVGPU_PMU_FECS_BOOTSTRAP_DONE, false);
|
||||||
|
__nvgpu_set_enabled(g, NVGPU_SUPPORT_MULTIPLE_WPR, false);
|
||||||
/* for now */
|
/* for now */
|
||||||
__nvgpu_set_enabled(g, NVGPU_PMU_PSTATE, false);
|
__nvgpu_set_enabled(g, NVGPU_PMU_PSTATE, false);
|
||||||
|
|
||||||
|
|||||||
@@ -841,6 +841,8 @@ int gv11b_init_hal(struct gk20a *g)
|
|||||||
__nvgpu_set_enabled(g, NVGPU_PMU_FECS_BOOTSTRAP_DONE, false);
|
__nvgpu_set_enabled(g, NVGPU_PMU_FECS_BOOTSTRAP_DONE, false);
|
||||||
g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT;
|
g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT;
|
||||||
|
|
||||||
|
__nvgpu_set_enabled(g, NVGPU_SUPPORT_MULTIPLE_WPR, false);
|
||||||
|
|
||||||
g->name = "gv11b";
|
g->name = "gv11b";
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
@@ -27,6 +27,22 @@
|
|||||||
"Include nvgpu_acr.h instead of acr_xxx.h to get access to ACR interfaces"
|
"Include nvgpu_acr.h instead of acr_xxx.h to get access to ACR interfaces"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* READ/WRITE masks for WPR region
|
||||||
|
*/
|
||||||
|
/* Readable only from level 2 and 3 client */
|
||||||
|
#define LSF_WPR_REGION_RMASK (0xC)
|
||||||
|
/* Writable only from level 2 and 3 client */
|
||||||
|
#define LSF_WPR_REGION_WMASK (0xC)
|
||||||
|
/* Readable only from level 3 client */
|
||||||
|
#define LSF_WPR_REGION_RMASK_SUB_WPR_ENABLED (0x8)
|
||||||
|
/* Writable only from level 3 client */
|
||||||
|
#define LSF_WPR_REGION_WMASK_SUB_WPR_ENABLED (0x8)
|
||||||
|
/* Disallow read mis-match for all clients */
|
||||||
|
#define LSF_WPR_REGION_ALLOW_READ_MISMATCH_NO (0x0)
|
||||||
|
/* Disallow write mis-match for all clients */
|
||||||
|
#define LSF_WPR_REGION_ALLOW_WRITE_MISMATCH_NO (0x0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Falcon Id Defines
|
* Falcon Id Defines
|
||||||
* Defines a common Light Secure Falcon identifier.
|
* Defines a common Light Secure Falcon identifier.
|
||||||
@@ -84,6 +100,42 @@ struct lsf_wpr_header_v1 {
|
|||||||
u32 bin_version;
|
u32 bin_version;
|
||||||
u32 status;
|
u32 status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LSF shared SubWpr Header
|
||||||
|
*
|
||||||
|
* use_case_id - Shared SubWpr use case ID (updated by nvgpu)
|
||||||
|
* start_addr - start address of subWpr (updated by nvgpu)
|
||||||
|
* size_4K - size of subWpr in 4K (updated by nvgpu)
|
||||||
|
*/
|
||||||
|
struct lsf_shared_sub_wpr_header {
|
||||||
|
u32 use_case_id;
|
||||||
|
u32 start_addr;
|
||||||
|
u32 size_4K;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* shared sub_wpr use case IDs */
|
||||||
|
enum {
|
||||||
|
LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_FRTS_VBIOS_TABLES = 1,
|
||||||
|
LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_PLAYREADY_SHARED_DATA = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
#define LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_MAX \
|
||||||
|
LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_PLAYREADY_SHARED_DATA
|
||||||
|
|
||||||
|
#define LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_INVALID (0xFFFFFFFF)
|
||||||
|
|
||||||
|
#define MAX_SUPPORTED_SHARED_SUB_WPR_USE_CASES \
|
||||||
|
LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_MAX
|
||||||
|
|
||||||
|
/* Static sizes of shared subWPRs */
|
||||||
|
/* Minimum granularity supported is 4K */
|
||||||
|
/* 1MB in 4K */
|
||||||
|
#define LSF_SHARED_DATA_SUB_WPR_FRTS_VBIOS_TABLES_SIZE_IN_4K (0x100)
|
||||||
|
/* 4K */
|
||||||
|
#define LSF_SHARED_DATA_SUB_WPR_PLAYREADY_SHARED_DATA_SIZE_IN_4K (0x1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Bootstrap Owner Defines
|
* Bootstrap Owner Defines
|
||||||
*/
|
*/
|
||||||
@@ -147,13 +199,40 @@ struct lsf_lsb_header_v1 {
|
|||||||
/*
|
/*
|
||||||
* Light Secure WPR Content Alignments
|
* Light Secure WPR Content Alignments
|
||||||
*/
|
*/
|
||||||
#define LSF_LSB_HEADER_ALIGNMENT 256
|
#define LSF_WPR_HEADER_ALIGNMENT (256U)
|
||||||
#define LSF_BL_DATA_ALIGNMENT 256
|
#define LSF_SUB_WPR_HEADER_ALIGNMENT (256U)
|
||||||
#define LSF_BL_DATA_SIZE_ALIGNMENT 256
|
#define LSF_LSB_HEADER_ALIGNMENT (256U)
|
||||||
#define LSF_BL_CODE_SIZE_ALIGNMENT 256
|
#define LSF_BL_DATA_ALIGNMENT (256U)
|
||||||
|
#define LSF_BL_DATA_SIZE_ALIGNMENT (256U)
|
||||||
|
#define LSF_BL_CODE_SIZE_ALIGNMENT (256U)
|
||||||
|
#define LSF_DATA_SIZE_ALIGNMENT (256U)
|
||||||
|
#define LSF_CODE_SIZE_ALIGNMENT (256U)
|
||||||
|
|
||||||
|
/* MMU excepts sub_wpr sizes in units of 4K */
|
||||||
|
#define SUB_WPR_SIZE_ALIGNMENT (4096U)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Maximum WPR Header size
|
||||||
|
*/
|
||||||
|
#define LSF_WPR_HEADERS_TOTAL_SIZE_MAX \
|
||||||
|
(ALIGN_UP((sizeof(struct lsf_wpr_header_v1) * LSF_FALCON_ID_END), \
|
||||||
|
LSF_WPR_HEADER_ALIGNMENT))
|
||||||
|
#define LSF_LSB_HEADER_TOTAL_SIZE_MAX (\
|
||||||
|
ALIGN_UP(sizeof(struct lsf_lsb_header_v1), LSF_LSB_HEADER_ALIGNMENT))
|
||||||
|
|
||||||
|
/* Maximum SUB WPR header size */
|
||||||
|
#define LSF_SUB_WPR_HEADERS_TOTAL_SIZE_MAX (ALIGN_UP( \
|
||||||
|
(sizeof(struct lsf_shared_sub_wpr_header) * \
|
||||||
|
LSF_SHARED_DATA_SUB_WPR_USE_CASE_ID_MAX), \
|
||||||
|
LSF_SUB_WPR_HEADER_ALIGNMENT))
|
||||||
|
|
||||||
|
|
||||||
#define LSF_UCODE_DATA_ALIGNMENT 4096
|
#define LSF_UCODE_DATA_ALIGNMENT 4096
|
||||||
|
|
||||||
|
/* Defined for 1MB alignment */
|
||||||
|
#define SHIFT_1MB (20)
|
||||||
|
#define SHIFT_4KB (12)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Supporting maximum of 2 regions.
|
* Supporting maximum of 2 regions.
|
||||||
* This is needed to pre-allocate space in DMEM
|
* This is needed to pre-allocate space in DMEM
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
@@ -73,12 +73,24 @@ struct ls_flcn_mgr {
|
|||||||
void *wpr_client_req_state;/*PACR_CLIENT_REQUEST_STATE originally*/
|
void *wpr_client_req_state;/*PACR_CLIENT_REQUEST_STATE originally*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LSFM SUB WPRs struct
|
||||||
|
* pnext : Next entry in the list, NULL if last
|
||||||
|
* sub_wpr_header : SubWpr Header struct
|
||||||
|
*/
|
||||||
|
struct lsfm_sub_wpr {
|
||||||
|
struct lsfm_sub_wpr *pnext;
|
||||||
|
struct lsf_shared_sub_wpr_header sub_wpr_header;
|
||||||
|
};
|
||||||
|
|
||||||
struct ls_flcn_mgr_v1 {
|
struct ls_flcn_mgr_v1 {
|
||||||
u16 managed_flcn_cnt;
|
u16 managed_flcn_cnt;
|
||||||
u32 wpr_size;
|
u32 wpr_size;
|
||||||
u32 disable_mask;
|
u32 disable_mask;
|
||||||
struct lsfm_managed_ucode_img_v2 *ucode_img_list;
|
struct lsfm_managed_ucode_img_v2 *ucode_img_list;
|
||||||
void *wpr_client_req_state;/*PACR_CLIENT_REQUEST_STATE originally*/
|
void *wpr_client_req_state;/*PACR_CLIENT_REQUEST_STATE originally*/
|
||||||
|
u16 managed_sub_wpr_count;
|
||||||
|
struct lsfm_sub_wpr *psub_wpr_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -163,10 +163,13 @@ struct gk20a;
|
|||||||
/* USERMODE enable bit */
|
/* USERMODE enable bit */
|
||||||
#define NVGPU_SUPPORT_USERMODE_SUBMIT 67
|
#define NVGPU_SUPPORT_USERMODE_SUBMIT 67
|
||||||
|
|
||||||
|
/* Multiple WPR support */
|
||||||
|
#define NVGPU_SUPPORT_MULTIPLE_WPR 68
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Must be greater than the largest bit offset in the above list.
|
* Must be greater than the largest bit offset in the above list.
|
||||||
*/
|
*/
|
||||||
#define NVGPU_MAX_ENABLED_BITS 68
|
#define NVGPU_MAX_ENABLED_BITS 69
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nvgpu_is_enabled - Check if the passed flag is enabled.
|
* nvgpu_is_enabled - Check if the passed flag is enabled.
|
||||||
|
|||||||
Reference in New Issue
Block a user