mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-04 15:19:59 +00:00
550.76
This commit is contained in:
@@ -4456,9 +4456,93 @@ typedef struct
|
||||
NvU32 commandNvdmType;
|
||||
NvU32 responseNvdmType;
|
||||
NvU32 errorCode;
|
||||
NvU8* pRspPayload;
|
||||
} NVSWITCH_FSPRPC_GET_CAPS_PARAMS;
|
||||
|
||||
typedef enum nvswitch_device_tnvl_mode
|
||||
{
|
||||
NVSWITCH_DEVICE_TNVL_MODE_DISABLED = 0, // TNVL mode is disabled
|
||||
NVSWITCH_DEVICE_TNVL_MODE_ENABLED, // TNVL mode is enabled
|
||||
NVSWITCH_DEVICE_TNVL_MODE_FAILURE, // TNVL mode is enabled but in failure state
|
||||
NVSWITCH_DEVICE_TNVL_MODE_LOCKED, // TNVL mode is enabled and locked
|
||||
NVSWITCH_DEVICE_TNVL_MODE_COUNT
|
||||
} NVSWITCH_DEVICE_TNVL_MODE;
|
||||
|
||||
/*
|
||||
* CTRL_NVSWITCH_SET_DEVICE_TNVL_LOCK
|
||||
*
|
||||
* Control to set Trusted NVLink(TNVL) lock
|
||||
*
|
||||
* FM sets the TNVL lock after Fabric State is CONFIGURED
|
||||
*
|
||||
* Parameters:
|
||||
* tnvlStatus [OUT]
|
||||
* TNVL mode status of the device
|
||||
*/
|
||||
typedef struct nvswitch_set_device_tnvl_lock_params
|
||||
{
|
||||
NVSWITCH_DEVICE_TNVL_MODE tnvlStatus;
|
||||
} NVSWITCH_SET_DEVICE_TNVL_LOCK_PARAMS;
|
||||
|
||||
/*
|
||||
* CTRL_NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN
|
||||
*
|
||||
* Control to query NvSwitch session attestation certificate chain
|
||||
*
|
||||
* Parameters:
|
||||
*
|
||||
* attestationCertChain: [OUT]
|
||||
* Attestation certificate chain for the NvSwitch queried
|
||||
*
|
||||
* attestationCertChainSize: [OUT]
|
||||
* Actual size of attestation cert chain data
|
||||
*/
|
||||
|
||||
#define NVSWITCH_ATTESTATION_CERT_CHAIN_MAX_SIZE 0x1400
|
||||
|
||||
typedef struct nvswitch_get_attestation_certificate_chain_params
|
||||
{
|
||||
NvU8 attestationCertChain[NVSWITCH_ATTESTATION_CERT_CHAIN_MAX_SIZE];
|
||||
NvU32 attestationCertChainSize;
|
||||
} NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN_PARAMS;
|
||||
|
||||
/*
|
||||
* CTRL_NVSWITCH_GET_ATTESTATION_REPORT
|
||||
*
|
||||
* Control to query NvSwitch attestation report.
|
||||
*
|
||||
* Parameters:
|
||||
* nonce: [IN]
|
||||
* nonce
|
||||
* attestationReport: [OUT]
|
||||
* Attestation report of the NvSwitch queried
|
||||
* attestationReportSize: [OUT]
|
||||
* Actual size of the report
|
||||
*/
|
||||
|
||||
#define NVSWITCH_NONCE_SIZE 0x20
|
||||
#define NVSWITCH_ATTESTATION_REPORT_MAX_SIZE 0x2000
|
||||
|
||||
typedef struct nvswitch_get_attestation_report_params
|
||||
{
|
||||
NvU8 nonce[NVSWITCH_NONCE_SIZE];
|
||||
NvU8 attestationReport[NVSWITCH_ATTESTATION_REPORT_MAX_SIZE];
|
||||
NvU32 attestationReportSize;
|
||||
} NVSWITCH_GET_ATTESTATION_REPORT_PARAMS;
|
||||
|
||||
/*
|
||||
* CTRL_NVSWITCH_GET_TNVL_STATUS
|
||||
*
|
||||
* Control to query Trusted NVLink(TNVL) status
|
||||
*
|
||||
* Parameters :
|
||||
* status: [OUT]
|
||||
* TNVL mode status
|
||||
*/
|
||||
typedef struct nvswitch_get_tnvl_status_params
|
||||
{
|
||||
NVSWITCH_DEVICE_TNVL_MODE status;
|
||||
} NVSWITCH_GET_TNVL_STATUS_PARAMS;
|
||||
|
||||
#define REGISTER_RW_ENGINE_RAW 0x00
|
||||
|
||||
#define REGISTER_RW_ENGINE_CLKS 0x10
|
||||
@@ -4604,6 +4688,10 @@ typedef struct
|
||||
#define CTRL_NVSWITCH_GET_NVLINK_L1_THRESHOLD 0x66
|
||||
#define CTRL_NVSWITCH_SET_NVLINK_L1_THRESHOLD 0x67
|
||||
#define CTRL_NVSWITCH_FSPRPC_GET_CAPS 0x68
|
||||
#define CTRL_NVSWITCH_SET_DEVICE_TNVL_LOCK 0x69
|
||||
#define CTRL_NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN 0x6A
|
||||
#define CTRL_NVSWITCH_GET_ATTESTATION_REPORT 0x6B
|
||||
#define CTRL_NVSWITCH_GET_TNVL_STATUS 0x6C
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -994,6 +994,22 @@ nvswitch_os_get_supported_register_events_params
|
||||
NvBool *bUserSuppliesOsData
|
||||
);
|
||||
|
||||
/*
|
||||
* @Brief : Is TNVL mode enabled.
|
||||
*
|
||||
* @Description : Returns if TNVL is enabled for the device
|
||||
*
|
||||
* @param[in] device a reference to the device
|
||||
*
|
||||
* @returns NV_TRUE, if TNVL is enabled
|
||||
* NV_FALSE, if TNVL is disabled
|
||||
*/
|
||||
NvBool
|
||||
nvswitch_lib_is_tnvl_enabled
|
||||
(
|
||||
nvswitch_device *device
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: Copyright (c) 2019 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-FileCopyrightText: Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
|
||||
@@ -25,9 +25,6 @@
|
||||
#include "haldef_nvswitch.h"
|
||||
#include "fsprpc_nvswitch.h"
|
||||
|
||||
#include "fsp/nvdm_payload_cmd_response.h"
|
||||
#include "fsp/fsp_nvdm_format.h"
|
||||
|
||||
/*!
|
||||
* @brief Check if FSP RM command queue is empty
|
||||
*
|
||||
|
||||
@@ -469,6 +469,9 @@ struct nvswitch_device
|
||||
|
||||
// To be removed once newer vbios is on TOT.
|
||||
NvBool bIsNvlinkVbiosTableVersion2;
|
||||
|
||||
// Trusted NVLink Mode
|
||||
NVSWITCH_DEVICE_TNVL_MODE tnvl_mode;
|
||||
};
|
||||
|
||||
#define NVSWITCH_IS_DEVICE_VALID(device) \
|
||||
|
||||
@@ -24,6 +24,12 @@
|
||||
#ifndef _FSPRPC_NVSWITCH_H_
|
||||
#define _FSPRPC_NVSWITCH_H_
|
||||
|
||||
#include "fsp/fsp_emem_channels.h"
|
||||
#include "fsp/nvdm_payload_cmd_response.h"
|
||||
#include "fsp/fsp_nvdm_format.h"
|
||||
#include "fsp/fsp_mctp_format.h"
|
||||
#include "fsp/fsp_tnvl_rpc.h"
|
||||
|
||||
#define FSP_OK (0x00U)
|
||||
#define FSP_ERR_IFS_ERR_INVALID_STATE (0x9EU)
|
||||
#define FSP_ERR_IFR_FILE_NOT_FOUND (0x9FU)
|
||||
|
||||
@@ -288,6 +288,13 @@
|
||||
_op(NvlStatus, nvswitch_fsp_error_code_to_nvlstatus_map, (nvswitch_device *device, NvU32 errorCode), _arch) \
|
||||
_op(NvlStatus, nvswitch_fsp_get_packet_info, (nvswitch_device *device, NvU8 *pBuffer, NvU32 size, NvU8 *pPacketState, NvU8 *pTag), _arch) \
|
||||
_op(NvlStatus, nvswitch_fsprpc_get_caps, (nvswitch_device *device, NVSWITCH_FSPRPC_GET_CAPS_PARAMS *params), _arch) \
|
||||
_op(NvlStatus, nvswitch_detect_tnvl_mode, (nvswitch_device *device), _arch) \
|
||||
_op(NvBool, nvswitch_is_tnvl_mode_enabled, (nvswitch_device *device), _arch) \
|
||||
_op(NvBool, nvswitch_is_tnvl_mode_locked, (nvswitch_device *device), _arch) \
|
||||
_op(NvlStatus, nvswitch_tnvl_get_attestation_certificate_chain, (nvswitch_device *device, NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN_PARAMS *params), _arch) \
|
||||
_op(NvlStatus, nvswitch_tnvl_get_attestation_report, (nvswitch_device *device, NVSWITCH_GET_ATTESTATION_REPORT_PARAMS *params), _arch) \
|
||||
_op(NvlStatus, nvswitch_tnvl_send_fsp_lock_config, (nvswitch_device *device), _arch) \
|
||||
_op(NvlStatus, nvswitch_tnvl_get_status, (nvswitch_device *device, NVSWITCH_GET_TNVL_STATUS_PARAMS *params), _arch) \
|
||||
NVSWITCH_HAL_FUNCTION_LIST_FEATURE_0(_op, _arch) \
|
||||
|
||||
#define NVSWITCH_HAL_FUNCTION_LIST_LS10(_op, _arch) \
|
||||
|
||||
@@ -707,5 +707,7 @@ NvlStatus nvswitch_fsp_config_ememc_lr10(nvswitch_device *device, NvU32 offset,
|
||||
NvlStatus nvswitch_fsp_write_to_emem_lr10(nvswitch_device *device, NvU8 *pBuffer, NvU32 size);
|
||||
NvlStatus nvswitch_fsp_read_from_emem_lr10(nvswitch_device *device, NvU8 *pBuffer, NvU32 size);
|
||||
NvlStatus nvswitch_fsp_error_code_to_nvlstatus_map_lr10(nvswitch_device *device, NvU32 errorCode);
|
||||
|
||||
NvlStatus nvswitch_tnvl_get_attestation_certificate_chain_lr10(nvswitch_device *device, NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN_PARAMS *params);
|
||||
NvlStatus nvswitch_tnvl_get_attestation_report_lr10(nvswitch_device *device, NVSWITCH_GET_ATTESTATION_REPORT_PARAMS *params);
|
||||
NvlStatus nvswitch_tnvl_get_status_lr10(nvswitch_device *device, NVSWITCH_GET_TNVL_STATUS_PARAMS *params);
|
||||
#endif //_LR10_H_
|
||||
|
||||
@@ -1051,6 +1051,13 @@ NvlStatus nvswitch_fsp_write_to_emem_ls10(nvswitch_device *device, NvU8 *pBuffer
|
||||
NvlStatus nvswitch_fsp_read_from_emem_ls10(nvswitch_device *device, NvU8 *pBuffer, NvU32 size);
|
||||
NvlStatus nvswitch_fsp_error_code_to_nvlstatus_map_ls10(nvswitch_device *device, NvU32 errorCode);
|
||||
NvlStatus nvswitch_fsprpc_get_caps_ls10(nvswitch_device *device, NVSWITCH_FSPRPC_GET_CAPS_PARAMS *params);
|
||||
NvlStatus nvswitch_detect_tnvl_mode_ls10(nvswitch_device *device);
|
||||
NvBool nvswitch_is_tnvl_mode_enabled_ls10(nvswitch_device *device);
|
||||
NvBool nvswitch_is_tnvl_mode_locked_ls10(nvswitch_device *device);
|
||||
NvlStatus nvswitch_tnvl_get_attestation_certificate_chain_ls10(nvswitch_device *device, NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN_PARAMS *params);
|
||||
NvlStatus nvswitch_tnvl_get_attestation_report_ls10(nvswitch_device *device, NVSWITCH_GET_ATTESTATION_REPORT_PARAMS *params);
|
||||
NvlStatus nvswitch_tnvl_send_fsp_lock_config_ls10(nvswitch_device *device);
|
||||
NvlStatus nvswitch_tnvl_get_status_ls10(nvswitch_device *device, NVSWITCH_GET_TNVL_STATUS_PARAMS *params);
|
||||
|
||||
NvlStatus nvswitch_ctrl_get_soe_heartbeat_ls10(nvswitch_device *device, NVSWITCH_GET_SOE_HEARTBEAT_PARAMS *p);
|
||||
NvlStatus nvswitch_cci_enable_iobist_ls10(nvswitch_device *device, NvU32 linkNumber, NvBool bEnable);
|
||||
|
||||
@@ -3720,6 +3720,9 @@ nvswitch_initialize_device_state_lr10
|
||||
(NvU64)device->regkeys.link_enable_mask) &
|
||||
((~0ULL) >> (64 - NVSWITCH_LINK_COUNT(device))));
|
||||
|
||||
// Detect TNVL mode
|
||||
nvswitch_detect_tnvl_mode(device);
|
||||
|
||||
if (nvswitch_is_soe_supported(device))
|
||||
{
|
||||
retval = nvswitch_init_soe(device);
|
||||
@@ -8107,10 +8110,80 @@ nvswitch_fsprpc_get_caps_lr10
|
||||
nvswitch_device *device,
|
||||
NVSWITCH_FSPRPC_GET_CAPS_PARAMS *params
|
||||
)
|
||||
{
|
||||
return -NVL_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
NvlStatus
|
||||
nvswitch_detect_tnvl_mode_lr10
|
||||
(
|
||||
nvswitch_device *device
|
||||
)
|
||||
{
|
||||
return -NVL_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
NvBool
|
||||
nvswitch_is_tnvl_mode_enabled_lr10
|
||||
(
|
||||
nvswitch_device *device
|
||||
)
|
||||
{
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
NvBool
|
||||
nvswitch_is_tnvl_mode_locked_lr10
|
||||
(
|
||||
nvswitch_device *device
|
||||
)
|
||||
{
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
NvlStatus
|
||||
nvswitch_tnvl_get_attestation_certificate_chain_lr10
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN_PARAMS *params
|
||||
)
|
||||
{
|
||||
// Not supported in LR10
|
||||
return -NVL_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
NvlStatus
|
||||
nvswitch_tnvl_get_attestation_report_lr10
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NVSWITCH_GET_ATTESTATION_REPORT_PARAMS *params
|
||||
)
|
||||
{
|
||||
// Not supported in LR10
|
||||
return -NVL_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
NvlStatus
|
||||
nvswitch_tnvl_send_fsp_lock_config_lr10
|
||||
(
|
||||
nvswitch_device *device
|
||||
)
|
||||
{
|
||||
// Not supported in LR10
|
||||
return -NVL_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
NvlStatus
|
||||
nvswitch_tnvl_get_status_lr10
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NVSWITCH_GET_TNVL_STATUS_PARAMS *params
|
||||
)
|
||||
{
|
||||
// Not supported in LR10
|
||||
return -NVL_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
//
|
||||
// This function auto creates the lr10 HAL connectivity from the NVSWITCH_INIT_HAL
|
||||
// macro in haldef_nvswitch.h
|
||||
|
||||
@@ -28,12 +28,6 @@
|
||||
#include "fsprpc_nvswitch.h"
|
||||
#include "ls10/ls10.h"
|
||||
|
||||
#include "fsp/fsp_emem_channels.h"
|
||||
#include "fsp/nvdm_payload_cmd_response.h"
|
||||
#include "fsp/fsp_nvdm_format.h"
|
||||
#include "fsp/fsp_mctp_format.h"
|
||||
#include "fsp/fsp_tnvl_rpc.h"
|
||||
|
||||
#include "nvswitch/ls10/dev_fsp_pri.h"
|
||||
|
||||
/*!
|
||||
@@ -346,6 +340,7 @@ nvswitch_fsp_process_nvdm_msg_ls10
|
||||
|
||||
switch (nvdmType)
|
||||
{
|
||||
case NVDM_TYPE_TNVL:
|
||||
case NVDM_TYPE_FSP_RESPONSE:
|
||||
status = nvswitch_fsp_process_cmd_response(device, pBuffer, size);
|
||||
break;
|
||||
@@ -606,7 +601,6 @@ nvswitch_fsprpc_get_caps_ls10
|
||||
params->responseNvdmType = responsePayload.nvdmType;
|
||||
params->commandNvdmType = responsePayload.cmdResponse.commandNvdmType;
|
||||
params->errorCode = responsePayload.cmdResponse.errorCode;
|
||||
params->pRspPayload = responsePayload.rspPayload;
|
||||
|
||||
return NVL_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -2979,6 +2979,13 @@ nvswitch_is_soe_supported_ls10
|
||||
NVSWITCH_PRINT(device, WARN, "SOE can not be disabled via regkey.\n");
|
||||
}
|
||||
|
||||
if (nvswitch_is_tnvl_mode_locked(device))
|
||||
{
|
||||
NVSWITCH_PRINT(device, INFO,
|
||||
"SOE is not supported when TNVL mode is locked\n");
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
return NV_TRUE;
|
||||
}
|
||||
|
||||
@@ -3026,6 +3033,13 @@ nvswitch_is_inforom_supported_ls10
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
if (nvswitch_is_tnvl_mode_enabled(device))
|
||||
{
|
||||
NVSWITCH_PRINT(device, INFO,
|
||||
"INFOROM is not supported when TNVL mode is enabled\n");
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
if (!nvswitch_is_soe_supported(device))
|
||||
{
|
||||
NVSWITCH_PRINT(device, INFO,
|
||||
@@ -3124,6 +3138,13 @@ nvswitch_is_smbpbi_supported_ls10
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
if (nvswitch_is_tnvl_mode_enabled(device))
|
||||
{
|
||||
NVSWITCH_PRINT(device, INFO,
|
||||
"SMBPBI is not supported when TNVL mode is enabled\n");
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
status = _nvswitch_get_bios_version(device, &version);
|
||||
if (status != NVL_SUCCESS)
|
||||
{
|
||||
|
||||
1037
src/common/nvswitch/kernel/ls10/tnvl_ls10.c
Normal file
1037
src/common/nvswitch/kernel/ls10/tnvl_ls10.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -991,6 +991,36 @@ _nvswitch_ctrl_fsprpc_get_caps
|
||||
return device->hal.nvswitch_fsprpc_get_caps(device, params);
|
||||
}
|
||||
|
||||
static NvlStatus
|
||||
_nvswitch_ctrl_get_attestation_certificate_chain
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN_PARAMS *params
|
||||
)
|
||||
{
|
||||
return device->hal.nvswitch_tnvl_get_attestation_certificate_chain(device, params);
|
||||
}
|
||||
|
||||
static NvlStatus
|
||||
_nvswitch_ctrl_get_attestation_report
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NVSWITCH_GET_ATTESTATION_REPORT_PARAMS *params
|
||||
)
|
||||
{
|
||||
return device->hal.nvswitch_tnvl_get_attestation_report(device, params);
|
||||
}
|
||||
|
||||
static NvlStatus
|
||||
_nvswitch_ctrl_get_tnvl_status
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NVSWITCH_GET_TNVL_STATUS_PARAMS *params
|
||||
)
|
||||
{
|
||||
return device->hal.nvswitch_tnvl_get_status(device, params);
|
||||
}
|
||||
|
||||
static NvlStatus
|
||||
_nvswitch_construct_soe
|
||||
(
|
||||
@@ -2777,6 +2807,11 @@ nvswitch_lib_register_device
|
||||
device->device_fabric_state = NVSWITCH_DEVICE_FABRIC_STATE_STANDBY;
|
||||
device->device_blacklist_reason = NVSWITCH_DEVICE_BLACKLIST_REASON_NONE;
|
||||
|
||||
//
|
||||
// Initialize TNVL Mode
|
||||
//
|
||||
device->tnvl_mode = NVSWITCH_DEVICE_TNVL_MODE_DISABLED;
|
||||
|
||||
//
|
||||
// Initialize HAL connectivity as early as possible so that other lib
|
||||
// interfaces can work.
|
||||
@@ -5888,6 +5923,101 @@ _nvswitch_ctrl_set_link_l1_threshold
|
||||
return NVL_SUCCESS;
|
||||
}
|
||||
|
||||
NvlStatus
|
||||
nvswitch_detect_tnvl_mode
|
||||
(
|
||||
nvswitch_device *device
|
||||
)
|
||||
{
|
||||
return device->hal.nvswitch_detect_tnvl_mode(device);
|
||||
}
|
||||
|
||||
NvBool
|
||||
nvswitch_is_tnvl_mode_enabled
|
||||
(
|
||||
nvswitch_device *device
|
||||
)
|
||||
{
|
||||
return device->hal.nvswitch_is_tnvl_mode_enabled(device);
|
||||
}
|
||||
|
||||
NvBool
|
||||
nvswitch_is_tnvl_mode_locked
|
||||
(
|
||||
nvswitch_device *device
|
||||
)
|
||||
{
|
||||
return device->hal.nvswitch_is_tnvl_mode_locked(device);
|
||||
}
|
||||
|
||||
NvBool NV_API_CALL
|
||||
nvswitch_lib_is_tnvl_enabled
|
||||
(
|
||||
nvswitch_device *device
|
||||
)
|
||||
{
|
||||
return nvswitch_is_tnvl_mode_enabled(device);
|
||||
}
|
||||
|
||||
NvlStatus
|
||||
nvswitch_tnvl_send_fsp_lock_config
|
||||
(
|
||||
nvswitch_device *device
|
||||
)
|
||||
{
|
||||
return device->hal.nvswitch_tnvl_send_fsp_lock_config(device);
|
||||
}
|
||||
|
||||
static NvlStatus
|
||||
_nvswitch_ctrl_set_device_tnvl_lock
|
||||
(
|
||||
nvswitch_device *device,
|
||||
NVSWITCH_SET_DEVICE_TNVL_LOCK_PARAMS *p
|
||||
)
|
||||
{
|
||||
NvlStatus status = NVL_SUCCESS;
|
||||
|
||||
if (!NVSWITCH_IS_DEVICE_ACCESSIBLE(device))
|
||||
{
|
||||
return -NVL_BAD_ARGS;
|
||||
}
|
||||
|
||||
if (!nvswitch_is_tnvl_mode_enabled(device))
|
||||
{
|
||||
NVSWITCH_PRINT(device, ERROR,
|
||||
"%s: TNVL is not enabled\n",
|
||||
__FUNCTION__);
|
||||
return -NVL_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
// Return failure if FM is not yet configured
|
||||
if (device->device_fabric_state != NVSWITCH_DEVICE_FABRIC_STATE_CONFIGURED)
|
||||
{
|
||||
NVSWITCH_PRINT(device, ERROR,
|
||||
"%s: FM is not configured yet\n",
|
||||
__FUNCTION__);
|
||||
return -NVL_ERR_INVALID_STATE;
|
||||
}
|
||||
|
||||
//
|
||||
// Disable non-fatal and legacy interrupts
|
||||
// Disable commands to SOE
|
||||
//
|
||||
|
||||
// Send lock-config command to FSP
|
||||
status = nvswitch_tnvl_send_fsp_lock_config(device);
|
||||
if (status == NVL_SUCCESS)
|
||||
{
|
||||
device->tnvl_mode = NVSWITCH_DEVICE_TNVL_MODE_LOCKED;
|
||||
}
|
||||
else
|
||||
{
|
||||
device->tnvl_mode = NVSWITCH_DEVICE_TNVL_MODE_FAILURE;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
NvlStatus
|
||||
nvswitch_lib_ctrl
|
||||
(
|
||||
@@ -6308,7 +6438,26 @@ nvswitch_lib_ctrl
|
||||
NVSWITCH_DEV_CMD_DISPATCH(CTRL_NVSWITCH_FSPRPC_GET_CAPS,
|
||||
_nvswitch_ctrl_fsprpc_get_caps,
|
||||
NVSWITCH_FSPRPC_GET_CAPS_PARAMS);
|
||||
|
||||
NVSWITCH_DEV_CMD_DISPATCH_PRIVILEGED(
|
||||
CTRL_NVSWITCH_SET_DEVICE_TNVL_LOCK,
|
||||
_nvswitch_ctrl_set_device_tnvl_lock,
|
||||
NVSWITCH_SET_DEVICE_TNVL_LOCK_PARAMS,
|
||||
osPrivate, flags);
|
||||
NVSWITCH_DEV_CMD_DISPATCH_PRIVILEGED(
|
||||
CTRL_NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN,
|
||||
_nvswitch_ctrl_get_attestation_certificate_chain,
|
||||
NVSWITCH_GET_ATTESTATION_CERTIFICATE_CHAIN_PARAMS,
|
||||
osPrivate, flags);
|
||||
NVSWITCH_DEV_CMD_DISPATCH_PRIVILEGED(
|
||||
CTRL_NVSWITCH_GET_ATTESTATION_REPORT,
|
||||
_nvswitch_ctrl_get_attestation_report,
|
||||
NVSWITCH_GET_ATTESTATION_REPORT_PARAMS,
|
||||
osPrivate, flags);
|
||||
NVSWITCH_DEV_CMD_DISPATCH_PRIVILEGED(
|
||||
CTRL_NVSWITCH_GET_TNVL_STATUS,
|
||||
_nvswitch_ctrl_get_tnvl_status,
|
||||
NVSWITCH_GET_TNVL_STATUS_PARAMS,
|
||||
osPrivate, flags);
|
||||
default:
|
||||
nvswitch_os_print(NVSWITCH_DBG_LEVEL_INFO, "unknown ioctl %x\n", cmd);
|
||||
retval = -NVL_BAD_ARGS;
|
||||
|
||||
Reference in New Issue
Block a user