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 */
                                                          (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;
        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) {
                !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,
 
        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 */
        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;