fadump_release_memory(fw_dump.boot_memory_size, memblock_end_of_DRAM());
        fadump_free_cpu_notes_buf();
 
-       /* Initialize the kernel dump memory structure for FAD registration. */
+       /*
+        * Setup kernel metadata and initialize the kernel dump
+        * memory structure for FADump re-registration.
+        */
+       if (fw_dump.ops->fadump_setup_metadata &&
+           (fw_dump.ops->fadump_setup_metadata(&fw_dump) < 0))
+               pr_warn("Failed to setup kernel metadata!\n");
        fw_dump.ops->fadump_init_mem_struct(&fw_dump);
 }
 
 
 
 static int opal_fadump_invalidate(struct fw_dump *fadump_conf)
 {
-       return -EIO;
+       s64 rc;
+
+       rc = opal_mpipl_update(OPAL_MPIPL_FREE_PRESERVED_MEMORY, 0, 0, 0);
+       if (rc) {
+               pr_err("Failed to invalidate - unexpected Error(%lld).\n", rc);
+               return -EIO;
+       }
+
+       fadump_conf->dump_active = 0;
+       opal_fdm_active = NULL;
+       return 0;
 }
 
 static void opal_fadump_cleanup(struct fw_dump *fadump_conf)