mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
drm/amdgpu: add tracking for the enablement of SCPM
Add parmeter to shows whether SCPM feature is enabled or not, and whether is valid. Signed-off-by: Likun Gao <Likun.Gao@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
a6b6d38ed8
commit
7f318f4e30
|
|
@ -1016,6 +1016,9 @@ struct amdgpu_device {
|
|||
/* reset dump register */
|
||||
uint32_t *reset_dump_reg_list;
|
||||
int num_regs;
|
||||
|
||||
bool scpm_enabled;
|
||||
uint32_t scpm_status;
|
||||
};
|
||||
|
||||
static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev)
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@ static bool psp_get_runtime_db_entry(struct amdgpu_device *adev,
|
|||
case PSP_RUNTIME_ENTRY_TYPE_BOOT_CONFIG:
|
||||
if (db_dir.entry_list[i].size < sizeof(struct psp_runtime_boot_cfg_entry)) {
|
||||
/* invalid db entry size */
|
||||
dev_warn(adev->dev, "Invalid PSP runtime database entry size\n");
|
||||
dev_warn(adev->dev, "Invalid PSP runtime database boot cfg entry size\n");
|
||||
return false;
|
||||
}
|
||||
/* read runtime database entry */
|
||||
|
|
@ -290,6 +290,17 @@ static bool psp_get_runtime_db_entry(struct amdgpu_device *adev,
|
|||
(uint32_t *)db_entry, sizeof(struct psp_runtime_boot_cfg_entry), false);
|
||||
ret = true;
|
||||
break;
|
||||
case PSP_RUNTIME_ENTRY_TYPE_PPTABLE_ERR_STATUS:
|
||||
if (db_dir.entry_list[i].size < sizeof(struct psp_runtime_scpm_entry)) {
|
||||
/* invalid db entry size */
|
||||
dev_warn(adev->dev, "Invalid PSP runtime database scpm entry size\n");
|
||||
return false;
|
||||
}
|
||||
/* read runtime database entry */
|
||||
amdgpu_device_vram_access(adev, db_header_pos + db_dir.entry_list[i].offset,
|
||||
(uint32_t *)db_entry, sizeof(struct psp_runtime_scpm_entry), false);
|
||||
ret = true;
|
||||
break;
|
||||
default:
|
||||
ret = false;
|
||||
break;
|
||||
|
|
@ -334,6 +345,7 @@ static int psp_sw_init(void *handle)
|
|||
int ret;
|
||||
struct psp_runtime_boot_cfg_entry boot_cfg_entry;
|
||||
struct psp_memory_training_context *mem_training_ctx = &psp->mem_train_ctx;
|
||||
struct psp_runtime_scpm_entry scpm_entry;
|
||||
|
||||
psp->cmd = kzalloc(sizeof(struct psp_gfx_cmd_resp), GFP_KERNEL);
|
||||
if (!psp->cmd) {
|
||||
|
|
@ -354,6 +366,20 @@ static int psp_sw_init(void *handle)
|
|||
!adev->gmc.xgmi.connected_to_cpu &&
|
||||
adev->ip_versions[MP0_HWIP][0] == IP_VERSION(13, 0, 2);
|
||||
|
||||
memset(&scpm_entry, 0, sizeof(scpm_entry));
|
||||
if ((psp_get_runtime_db_entry(adev,
|
||||
PSP_RUNTIME_ENTRY_TYPE_PPTABLE_ERR_STATUS,
|
||||
&scpm_entry)) &&
|
||||
(SCPM_DISABLE != scpm_entry.scpm_status)) {
|
||||
adev->scpm_enabled = true;
|
||||
adev->scpm_status = scpm_entry.scpm_status;
|
||||
} else {
|
||||
adev->scpm_enabled = false;
|
||||
adev->scpm_status = SCPM_DISABLE;
|
||||
}
|
||||
|
||||
/* TODO: stop gpu driver services and print alarm if scpm is enabled with error status */
|
||||
|
||||
memset(&boot_cfg_entry, 0, sizeof(boot_cfg_entry));
|
||||
if (psp_get_runtime_db_entry(adev,
|
||||
PSP_RUNTIME_ENTRY_TYPE_BOOT_CONFIG,
|
||||
|
|
|
|||
|
|
@ -244,6 +244,7 @@ enum psp_runtime_entry_type {
|
|||
PSP_RUNTIME_ENTRY_TYPE_MGPU_WAFL = 0x3, /* WAFL runtime data */
|
||||
PSP_RUNTIME_ENTRY_TYPE_MGPU_XGMI = 0x4, /* XGMI runtime data */
|
||||
PSP_RUNTIME_ENTRY_TYPE_BOOT_CONFIG = 0x5, /* Boot Config runtime data */
|
||||
PSP_RUNTIME_ENTRY_TYPE_PPTABLE_ERR_STATUS = 0x6, /* SCPM validation data */
|
||||
};
|
||||
|
||||
/* PSP runtime DB header */
|
||||
|
|
@ -278,12 +279,24 @@ enum psp_runtime_boot_cfg_feature {
|
|||
BOOT_CFG_FEATURE_TWO_STAGE_DRAM_TRAINING = 0x2,
|
||||
};
|
||||
|
||||
/* PSP run time DB SCPM authentication defines */
|
||||
enum psp_runtime_scpm_authentication {
|
||||
SCPM_DISABLE = 0x0,
|
||||
SCPM_ENABLE = 0x1,
|
||||
SCPM_ENABLE_WITH_SCPM_ERR = 0x2,
|
||||
};
|
||||
|
||||
/* PSP runtime DB boot config entry */
|
||||
struct psp_runtime_boot_cfg_entry {
|
||||
uint32_t boot_cfg_bitmask;
|
||||
uint32_t reserved;
|
||||
};
|
||||
|
||||
/* PSP runtime DB SCPM entry */
|
||||
struct psp_runtime_scpm_entry {
|
||||
enum psp_runtime_scpm_authentication scpm_status;
|
||||
};
|
||||
|
||||
struct psp_context
|
||||
{
|
||||
struct amdgpu_device *adev;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user