mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-02 06:29:47 +00:00
550.76
This commit is contained in:
@@ -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