platform/x86/intel/ifs: Classify error scenarios correctly
"Scan controller error" means that scan hardware encountered an error prior to doing an actual test on the target CPU. It does not mean that there is an actual cpu/core failure. "scan signature failure" indicates that the test result on the target core did not match the expected value and should be treated as a cpu failure. Current driver classifies both these scenarios as failures. Modify the driver to classify this situation with a more appropriate "untested" status instead of "fail" status. Signed-off-by: Jithu Joseph <jithu.joseph@intel.com> Reviewed-by: Tony Luck <tony.luck@intel.com> Reviewed-by: Ashok Raj <ashok.raj@intel.com> Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com> Link: https://lore.kernel.org/r/20240412172349.544064-2-jithu.joseph@intel.com Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
67e9b62085
commit
02153e5dcb
@ -69,6 +69,19 @@ static const char * const scan_test_status[] = {
|
||||
|
||||
static void message_not_tested(struct device *dev, int cpu, union ifs_status status)
|
||||
{
|
||||
struct ifs_data *ifsd = ifs_get_data(dev);
|
||||
|
||||
/*
|
||||
* control_error is set when the microcode runs into a problem
|
||||
* loading the image from the reserved BIOS memory, or it has
|
||||
* been corrupted. Reloading the image may fix this issue.
|
||||
*/
|
||||
if (status.control_error) {
|
||||
dev_warn(dev, "CPU(s) %*pbl: Scan controller error. Batch: %02x version: 0x%x\n",
|
||||
cpumask_pr_args(cpu_smt_mask(cpu)), ifsd->cur_batch, ifsd->loaded_version);
|
||||
return;
|
||||
}
|
||||
|
||||
if (status.error_code < ARRAY_SIZE(scan_test_status)) {
|
||||
dev_info(dev, "CPU(s) %*pbl: SCAN operation did not start. %s\n",
|
||||
cpumask_pr_args(cpu_smt_mask(cpu)),
|
||||
@ -90,16 +103,6 @@ static void message_fail(struct device *dev, int cpu, union ifs_status status)
|
||||
{
|
||||
struct ifs_data *ifsd = ifs_get_data(dev);
|
||||
|
||||
/*
|
||||
* control_error is set when the microcode runs into a problem
|
||||
* loading the image from the reserved BIOS memory, or it has
|
||||
* been corrupted. Reloading the image may fix this issue.
|
||||
*/
|
||||
if (status.control_error) {
|
||||
dev_err(dev, "CPU(s) %*pbl: could not execute from loaded scan image. Batch: %02x version: 0x%x\n",
|
||||
cpumask_pr_args(cpu_smt_mask(cpu)), ifsd->cur_batch, ifsd->loaded_version);
|
||||
}
|
||||
|
||||
/*
|
||||
* signature_error is set when the output from the scan chains does not
|
||||
* match the expected signature. This might be a transient problem (e.g.
|
||||
@ -285,10 +288,10 @@ static void ifs_test_core(int cpu, struct device *dev)
|
||||
/* Update status for this core */
|
||||
ifsd->scan_details = status.data;
|
||||
|
||||
if (status.control_error || status.signature_error) {
|
||||
if (status.signature_error) {
|
||||
ifsd->status = SCAN_TEST_FAIL;
|
||||
message_fail(dev, cpu, status);
|
||||
} else if (status.error_code) {
|
||||
} else if (status.control_error || status.error_code) {
|
||||
ifsd->status = SCAN_NOT_TESTED;
|
||||
message_not_tested(dev, cpu, status);
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user