[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230913183348.1349409-5-jithu.joseph@intel.com>
Date: Wed, 13 Sep 2023 11:33:42 -0700
From: Jithu Joseph <jithu.joseph@...el.com>
To: hdegoede@...hat.com, markgross@...nel.org
Cc: tglx@...utronix.de, mingo@...hat.com, bp@...en8.de,
dave.hansen@...ux.intel.com, x86@...nel.org, hpa@...or.com,
rostedt@...dmis.org, jithu.joseph@...el.com, ashok.raj@...el.com,
tony.luck@...el.com, linux-kernel@...r.kernel.org,
platform-driver-x86@...r.kernel.org, patches@...ts.linux.dev,
ravi.v.shankar@...el.com, pengfei.xu@...el.com
Subject: [PATCH 04/10] platform/x86/intel/ifs: Scan test for new generations
Make changes to scan test flow such that MSRs are populated
appropriately based on the generation supported by hardware.
Width of chunk related bitfields is ACTIVATE_SCAN and SCAN_STATUS MSRs
are different in newer IFS generation compared to gen0.
Signed-off-by: Jithu Joseph <jithu.joseph@...el.com>
Reviewed-by: Tony Luck <tony.luck@...el.com>
Tested-by: Pengfei Xu <pengfei.xu@...el.com>
---
drivers/platform/x86/intel/ifs/ifs.h | 14 ++++++++++++++
drivers/platform/x86/intel/ifs/runtest.c | 23 ++++++++++++++++++-----
2 files changed, 32 insertions(+), 5 deletions(-)
diff --git a/drivers/platform/x86/intel/ifs/ifs.h b/drivers/platform/x86/intel/ifs/ifs.h
index 886dc74de57d..3265a6d8a6f3 100644
--- a/drivers/platform/x86/intel/ifs/ifs.h
+++ b/drivers/platform/x86/intel/ifs/ifs.h
@@ -205,6 +205,12 @@ union ifs_scan {
u32 delay :31;
u32 sigmce :1;
};
+ struct {
+ u16 start;
+ u16 stop;
+ u32 delay :31;
+ u32 sigmce :1;
+ } gen2;
};
/* MSR_SCAN_STATUS bit fields */
@@ -219,6 +225,14 @@ union ifs_status {
u32 control_error :1;
u32 signature_error :1;
};
+ struct {
+ u16 chunk_num;
+ u16 chunk_stop_index;
+ u8 error_code;
+ u32 rsvd1 :22;
+ u32 control_error :1;
+ u32 signature_error :1;
+ } gen2;
};
/* MSR_ARRAY_BIST bit fields */
diff --git a/drivers/platform/x86/intel/ifs/runtest.c b/drivers/platform/x86/intel/ifs/runtest.c
index 1061eb7ec399..4bbab6be2fa2 100644
--- a/drivers/platform/x86/intel/ifs/runtest.c
+++ b/drivers/platform/x86/intel/ifs/runtest.c
@@ -171,6 +171,8 @@ static void ifs_test_core(int cpu, struct device *dev)
union ifs_status status;
unsigned long timeout;
struct ifs_data *ifsd;
+ int to_start, to_stop;
+ int status_chunk;
u64 msrvals[2];
int retries;
@@ -179,13 +181,21 @@ static void ifs_test_core(int cpu, struct device *dev)
activate.rsvd = 0;
activate.delay = IFS_THREAD_WAIT;
activate.sigmce = 0;
- activate.start = 0;
- activate.stop = ifsd->valid_chunks - 1;
+ to_start = 0;
+ to_stop = ifsd->valid_chunks - 1;
+
+ if (ifsd->generation) {
+ activate.gen2.start = to_start;
+ activate.gen2.stop = to_stop;
+ } else {
+ activate.start = to_start;
+ activate.stop = to_stop;
+ }
timeout = jiffies + HZ / 2;
retries = MAX_IFS_RETRIES;
- while (activate.start <= activate.stop) {
+ while (to_start <= to_stop) {
if (time_after(jiffies, timeout)) {
status.error_code = IFS_SW_TIMEOUT;
break;
@@ -202,7 +212,8 @@ static void ifs_test_core(int cpu, struct device *dev)
if (!can_restart(status))
break;
- if (status.chunk_num == activate.start) {
+ status_chunk = ifsd->generation ? status.gen2.chunk_num : status.chunk_num;
+ if (status_chunk == to_start) {
/* Check for forward progress */
if (--retries == 0) {
if (status.error_code == IFS_NO_ERROR)
@@ -211,7 +222,9 @@ static void ifs_test_core(int cpu, struct device *dev)
}
} else {
retries = MAX_IFS_RETRIES;
- activate.start = status.chunk_num;
+ ifsd->generation ? (activate.gen2.start = status_chunk) :
+ (activate.start = status_chunk);
+ to_start = status_chunk;
}
}
--
2.25.1
Powered by blists - more mailing lists