--- /dev/null
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ *  Copyright IBM Corp. 2022
+ *
+ * Author(s): Tony Krowiak <akrowiak@linux.ibm.com>
+ */
+#ifndef VFIO_AP_DEBUG_H
+#define VFIO_AP_DEBUG_H
+
+#include <asm/debug.h>
+
+#define DBF_ERR                3       /* error conditions   */
+#define DBF_WARN       4       /* warning conditions */
+#define DBF_INFO       5       /* informational      */
+#define DBF_DEBUG      6       /* for debugging only */
+
+#define DBF_MAX_SPRINTF_ARGS 10
+
+#define VFIO_AP_DBF(...)                                       \
+       debug_sprintf_event(vfio_ap_dbf_info, ##__VA_ARGS__)
+#define VFIO_AP_DBF_ERR(...)                                   \
+       debug_sprintf_event(vfio_ap_dbf_info, DBF_ERR, ##__VA_ARGS__)
+#define VFIO_AP_DBF_WARN(...)                                  \
+       debug_sprintf_event(vfio_ap_dbf_info, DBF_WARN, ##__VA_ARGS__)
+#define VFIO_AP_DBF_INFO(...)                                  \
+       debug_sprintf_event(vfio_ap_dbf_info, DBF_INFO, ##__VA_ARGS__)
+#define VFIO_AP_DBF_DBG(...)                                   \
+       debug_sprintf_event(vfio_ap_dbf_info, DBF_DEBUG, ##__VA_ARGS__)
+
+extern debug_info_t *vfio_ap_dbf_info;
+
+#endif /* VFIO_AP_DEBUG_H */
 
 #include <linux/string.h>
 #include <asm/facility.h>
 #include "vfio_ap_private.h"
+#include "vfio_ap_debug.h"
 
 #define VFIO_AP_ROOT_NAME "vfio_ap"
 #define VFIO_AP_DEV_NAME "matrix"
 MODULE_LICENSE("GPL v2");
 
 struct ap_matrix_dev *matrix_dev;
+debug_info_t *vfio_ap_dbf_info;
 
 /* Only type 10 adapters (CEX4 and later) are supported
  * by the AP matrix device driver
        root_device_unregister(root_device);
 }
 
+static int __init vfio_ap_dbf_info_init(void)
+{
+       vfio_ap_dbf_info = debug_register("vfio_ap", 1, 1,
+                                         DBF_MAX_SPRINTF_ARGS * sizeof(long));
+
+       if (!vfio_ap_dbf_info)
+               return -ENOENT;
+
+       debug_register_view(vfio_ap_dbf_info, &debug_sprintf_view);
+       debug_set_level(vfio_ap_dbf_info, DBF_WARN);
+
+       return 0;
+}
+
 static int __init vfio_ap_init(void)
 {
        int ret;
 
+       ret = vfio_ap_dbf_info_init();
+       if (ret)
+               return ret;
+
        /* If there are no AP instructions, there is nothing to pass through. */
        if (!ap_instructions_available())
                return -ENODEV;
        vfio_ap_mdev_unregister();
        ap_driver_unregister(&vfio_ap_drv);
        vfio_ap_matrix_dev_destroy();
+       debug_unregister(vfio_ap_dbf_info);
 }
 
 module_init(vfio_ap_init);