.test_num = IFS_TYPE_ARRAY_BIST,
 };
 
+static const struct ifs_test_msrs scan_msrs = {
+       .copy_hashes = MSR_COPY_SCAN_HASHES,
+       .copy_hashes_status = MSR_SCAN_HASHES_STATUS,
+       .copy_chunks = MSR_AUTHENTICATE_AND_COPY_CHUNK,
+       .copy_chunks_status = MSR_CHUNKS_AUTHENTICATION_STATUS,
+       .test_ctrl = MSR_SAF_CTRL,
+};
+
 static struct ifs_device ifs_devices[] = {
        [IFS_TYPE_SAF] = {
                .test_caps = &scan_test,
+               .test_msrs = &scan_msrs,
                .misc = {
                        .name = "intel_ifs_0",
                        .minor = MISC_DYNAMIC_MINOR,
 
        int     test_num;
 };
 
+/**
+ * struct ifs_test_msrs - MSRs used in IFS tests
+ * @copy_hashes: Copy test hash data
+ * @copy_hashes_status: Status of copied test hash data
+ * @copy_chunks: Copy chunks of the test data
+ * @copy_chunks_status: Status of the copied test data chunks
+ * @test_ctrl: Control the test attributes
+ */
+struct ifs_test_msrs {
+       u32     copy_hashes;
+       u32     copy_hashes_status;
+       u32     copy_chunks;
+       u32     copy_chunks_status;
+       u32     test_ctrl;
+};
+
 /**
  * struct ifs_data - attributes related to intel IFS driver
  * @loaded_version: stores the currently loaded ifs image version.
 
 struct ifs_device {
        const struct ifs_test_caps *test_caps;
+       const struct ifs_test_msrs *test_msrs;
        struct ifs_data rw_data;
        struct miscdevice misc;
 };
        return d->test_caps;
 }
 
+static inline const struct ifs_test_msrs *ifs_get_test_msrs(struct device *dev)
+{
+       struct miscdevice *m = dev_get_drvdata(dev);
+       struct ifs_device *d = container_of(m, struct ifs_device, misc);
+
+       return d->test_msrs;
+}
+
 extern bool *ifs_pkg_auth;
 int ifs_load_firmware(struct device *dev);
 int do_core_test(int cpu, struct device *dev);
 
        union ifs_scan_hashes_status hashes_status;
        union ifs_chunks_auth_status chunk_status;
        struct device *dev = local_work->dev;
+       const struct ifs_test_msrs *msrs;
        int i, num_chunks, chunk_size;
        struct ifs_data *ifsd;
        u64 linear_addr, base;
        u32 err_code;
 
        ifsd = ifs_get_data(dev);
+       msrs = ifs_get_test_msrs(dev);
        /* run scan hash copy */
-       wrmsrl(MSR_COPY_SCAN_HASHES, ifs_hash_ptr);
-       rdmsrl(MSR_SCAN_HASHES_STATUS, hashes_status.data);
+       wrmsrl(msrs->copy_hashes, ifs_hash_ptr);
+       rdmsrl(msrs->copy_hashes_status, hashes_status.data);
 
        /* enumerate the scan image information */
        num_chunks = hashes_status.num_chunks;
                linear_addr = base + i * chunk_size;
                linear_addr |= i;
 
-               wrmsrl(MSR_AUTHENTICATE_AND_COPY_CHUNK, linear_addr);
-               rdmsrl(MSR_CHUNKS_AUTHENTICATION_STATUS, chunk_status.data);
+               wrmsrl(msrs->copy_chunks, linear_addr);
+               rdmsrl(msrs->copy_chunks_status, chunk_status.data);
 
                ifsd->valid_chunks = chunk_status.valid_chunks;
                err_code = chunk_status.error_code;
        union ifs_scan_hashes_status_gen2 hashes_status;
        union ifs_chunks_auth_status_gen2 chunk_status;
        u32 err_code, valid_chunks, total_chunks;
+       const struct ifs_test_msrs *msrs;
        int i, num_chunks, chunk_size;
        union meta_data *ifs_meta;
        int starting_chunk_nr;
        int retry_count;
 
        ifsd = ifs_get_data(dev);
+       msrs = ifs_get_test_msrs(dev);
 
        if (need_copy_scan_hashes(ifsd)) {
-               wrmsrl(MSR_COPY_SCAN_HASHES, ifs_hash_ptr);
-               rdmsrl(MSR_SCAN_HASHES_STATUS, hashes_status.data);
+               wrmsrl(msrs->copy_hashes, ifs_hash_ptr);
+               rdmsrl(msrs->copy_hashes_status, hashes_status.data);
 
                /* enumerate the scan image information */
                chunk_size = hashes_status.chunk_size * SZ_1K;
        }
 
        if (ifsd->generation >= IFS_GEN_STRIDE_AWARE) {
-               wrmsrl(MSR_SAF_CTRL, INVALIDATE_STRIDE);
-               rdmsrl(MSR_CHUNKS_AUTHENTICATION_STATUS, chunk_status.data);
+               wrmsrl(msrs->test_ctrl, INVALIDATE_STRIDE);
+               rdmsrl(msrs->copy_chunks_status, chunk_status.data);
                if (chunk_status.valid_chunks != 0) {
                        dev_err(dev, "Couldn't invalidate installed stride - %d\n",
                                chunk_status.valid_chunks);
                chunk_table[1] = linear_addr;
                do {
                        local_irq_disable();
-                       wrmsrl(MSR_AUTHENTICATE_AND_COPY_CHUNK, (u64)chunk_table);
+                       wrmsrl(msrs->copy_chunks, (u64)chunk_table);
                        local_irq_enable();
-                       rdmsrl(MSR_CHUNKS_AUTHENTICATION_STATUS, chunk_status.data);
+                       rdmsrl(msrs->copy_chunks_status, chunk_status.data);
                        err_code = chunk_status.error_code;
                } while (err_code == AUTH_INTERRUPTED_ERROR && --retry_count);