#define OPAL_DUMP_INFO2                                94
 #define OPAL_PCI_EEH_FREEZE_SET                        97
 #define OPAL_HANDLE_HMI                                98
+#define OPAL_REGISTER_DUMP_REGION              101
+#define OPAL_UNREGISTER_DUMP_REGION            102
 
 #ifndef __ASSEMBLY__
 
                uint64_t length);
 int64_t opal_sensor_read(uint32_t sensor_hndl, int token, __be32 *sensor_data);
 int64_t opal_handle_hmi(void);
+int64_t opal_register_dump_region(uint32_t id, uint64_t start, uint64_t end);
+int64_t opal_unregister_dump_region(uint32_t id);
 
 /* Internal functions */
 extern int early_init_dt_scan_opal(unsigned long node, const char *uname,
                                             unsigned long vmalloc_size);
 void opal_free_sg_list(struct opal_sg_list *sg);
 
+/*
+ * Dump region ID range usable by the OS
+ */
+#define OPAL_DUMP_REGION_HOST_START            0x80
+#define OPAL_DUMP_REGION_LOG_BUF               0x80
+#define OPAL_DUMP_REGION_HOST_END              0xFF
+
 #endif /* __ASSEMBLY__ */
 
 #endif /* __OPAL_H */
 
 OPAL_CALL(opal_get_param,                      OPAL_GET_PARAM);
 OPAL_CALL(opal_set_param,                      OPAL_SET_PARAM);
 OPAL_CALL(opal_handle_hmi,                     OPAL_HANDLE_HMI);
+OPAL_CALL(opal_register_dump_region,           OPAL_REGISTER_DUMP_REGION);
+OPAL_CALL(opal_unregister_dump_region,         OPAL_UNREGISTER_DUMP_REGION);
 
        return 0;
 }
 
+static void __init opal_dump_region_init(void)
+{
+       void *addr;
+       uint64_t size;
+       int rc;
+
+       /* Register kernel log buffer */
+       addr = log_buf_addr_get();
+       size = log_buf_len_get();
+       rc = opal_register_dump_region(OPAL_DUMP_REGION_LOG_BUF,
+                                      __pa(addr), size);
+       /* Don't warn if this is just an older OPAL that doesn't
+        * know about that call
+        */
+       if (rc && rc != OPAL_UNSUPPORTED)
+               pr_warn("DUMP: Failed to register kernel log buffer. "
+                       "rc = %d\n", rc);
+}
 static int __init opal_init(void)
 {
        struct device_node *np, *consoles;
        /* Create "opal" kobject under /sys/firmware */
        rc = opal_sysfs_init();
        if (rc == 0) {
+               /* Setup dump region interface */
+               opal_dump_region_init();
                /* Setup error log interface */
                rc = opal_elog_init();
                /* Setup code update interface */
                else
                        mdelay(10);
        }
+
+       /* Unregister memory dump region */
+       opal_unregister_dump_region(OPAL_DUMP_REGION_LOG_BUF);
 }
 
 /* Export this so that test modules can use it */