#include <adf_gen4_hw_data.h>
 #include <adf_gen4_pfvf.h>
 #include <adf_gen4_pm.h>
+#include "adf_gen4_ras.h"
 #include <adf_gen4_timer.h>
 #include "adf_4xxx_hw_data.h"
 #include "adf_cfg_services.h"
        adf_gen4_init_hw_csr_ops(&hw_data->csr_ops);
        adf_gen4_init_pf_pfvf_ops(&hw_data->pfvf_ops);
        adf_gen4_init_dc_ops(&hw_data->dc_ops);
+       adf_gen4_init_ras_ops(&hw_data->ras_ops);
 }
 
 void adf_clean_hw_data_4xxx(struct adf_hw_device_data *hw_data)
 
        adf_gen4_pm.o \
        adf_gen2_dc.o \
        adf_gen4_dc.o \
+       adf_gen4_ras.o \
        adf_gen4_timer.o \
        adf_clock.o \
        qat_crypto.o \
 
 struct adf_etr_data;
 struct adf_etr_ring_data;
 
+struct adf_ras_ops {
+       void (*enable_ras_errors)(struct adf_accel_dev *accel_dev);
+       void (*disable_ras_errors)(struct adf_accel_dev *accel_dev);
+       bool (*handle_interrupt)(struct adf_accel_dev *accel_dev,
+                                bool *reset_required);
+};
+
 struct adf_pfvf_ops {
        int (*enable_comms)(struct adf_accel_dev *accel_dev);
        u32 (*get_pf2vf_offset)(u32 i);
        struct adf_pfvf_ops pfvf_ops;
        struct adf_hw_csr_ops csr_ops;
        struct adf_dc_ops dc_ops;
+       struct adf_ras_ops ras_ops;
        const char *fw_name;
        const char *fw_mmp_name;
        u32 fuses;
 
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright(c) 2023 Intel Corporation */
+#include "adf_common_drv.h"
+#include "adf_gen4_ras.h"
+
+static void adf_gen4_enable_ras(struct adf_accel_dev *accel_dev)
+{
+}
+
+static void adf_gen4_disable_ras(struct adf_accel_dev *accel_dev)
+{
+}
+
+static bool adf_gen4_handle_interrupt(struct adf_accel_dev *accel_dev,
+                                     bool *reset_required)
+{
+       return false;
+}
+
+void adf_gen4_init_ras_ops(struct adf_ras_ops *ras_ops)
+{
+       ras_ops->enable_ras_errors = adf_gen4_enable_ras;
+       ras_ops->disable_ras_errors = adf_gen4_disable_ras;
+       ras_ops->handle_interrupt = adf_gen4_handle_interrupt;
+}
+EXPORT_SYMBOL_GPL(adf_gen4_init_ras_ops);
 
--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0-only */
+/* Copyright(c) 2023 Intel Corporation */
+#ifndef ADF_GEN4_RAS_H_
+#define ADF_GEN4_RAS_H_
+
+struct adf_ras_ops;
+
+void adf_gen4_init_ras_ops(struct adf_ras_ops *ras_ops);
+
+#endif /* ADF_GEN4_RAS_H_ */
 
        }
        set_bit(ADF_STATUS_IRQ_ALLOCATED, &accel_dev->status);
 
+       if (hw_data->ras_ops.enable_ras_errors)
+               hw_data->ras_ops.enable_ras_errors(accel_dev);
+
        hw_data->enable_ints(accel_dev);
        hw_data->enable_error_correction(accel_dev);
 
                        clear_bit(accel_dev->accel_id, service->init_status);
        }
 
+       if (hw_data->ras_ops.disable_ras_errors)
+               hw_data->ras_ops.disable_ras_errors(accel_dev);
+
        adf_heartbeat_shutdown(accel_dev);
 
        hw_data->disable_iov(accel_dev);
 
        return false;
 }
 
+static bool adf_handle_ras_int(struct adf_accel_dev *accel_dev)
+{
+       struct adf_ras_ops *ras_ops = &accel_dev->hw_device->ras_ops;
+       bool reset_required;
+
+       if (ras_ops->handle_interrupt &&
+           ras_ops->handle_interrupt(accel_dev, &reset_required)) {
+               if (reset_required)
+                       dev_err(&GET_DEV(accel_dev), "Fatal error, reset required\n");
+               return true;
+       }
+
+       return false;
+}
+
 static irqreturn_t adf_msix_isr_ae(int irq, void *dev_ptr)
 {
        struct adf_accel_dev *accel_dev = dev_ptr;
        if (adf_handle_pm_int(accel_dev))
                return IRQ_HANDLED;
 
+       if (adf_handle_ras_int(accel_dev))
+               return IRQ_HANDLED;
+
        dev_dbg(&GET_DEV(accel_dev), "qat_dev%d spurious AE interrupt\n",
                accel_dev->accel_id);