From 35160dfb7acbeec901762b52cb19564a6b6b122f Mon Sep 17 00:00:00 2001
From: Robby Candra <robbycandra.mail@gmail.com>
Date: Tue, 16 Apr 2019 12:17:27 +0700
Subject: [PATCH] Simplify PLR homing when Z homes to max (#13718)

---
 Marlin/src/feature/power_loss_recovery.cpp | 24 +++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/Marlin/src/feature/power_loss_recovery.cpp b/Marlin/src/feature/power_loss_recovery.cpp
index 5e3ef6fb5b..0b9dba43fd 100644
--- a/Marlin/src/feature/power_loss_recovery.cpp
+++ b/Marlin/src/feature/power_loss_recovery.cpp
@@ -245,13 +245,23 @@ void PrintJobRecovery::resume() {
     gcode.process_subcommands_now_P(PSTR("M420 S0 Z0"));
   #endif
 
-  // Set Z to 0, raise Z by RECOVERY_ZRAISE, and Home (XY only for Cartesian)
-  // with no raise. (Only do simulated homing in Marlin Dev Mode.)
-  gcode.process_subcommands_now_P(PSTR("G92.9 E0 Z0\nG1 Z" STRINGIFY(RECOVERY_ZRAISE) "\nG28 R0"
-    #if ENABLED(MARLIN_DEV_MODE)
-      " S"
-    #elif !IS_KINEMATIC
-      " X Y"
+  // Reset E, raise Z, home XY...
+  gcode.process_subcommands_now_P(PSTR("G92.9 E0"
+    #if Z_HOME_DIR > 0
+      // If Z homing goes to max, reset E and home all
+      "\nG28R0"
+      #if ENABLED(MARLIN_DEV_MODE)
+        "S"
+      #endif
+    #else
+      // Set Z to 0, raise Z by RECOVERY_ZRAISE, and Home (XY only for Cartesian)
+      // with no raise. (Only do simulated homing in Marlin Dev Mode.)
+      "Z0\nG1Z" STRINGIFY(RECOVERY_ZRAISE) "\nG28R0"
+      #if ENABLED(MARLIN_DEV_MODE)
+        "S"
+      #elif !IS_KINEMATIC
+        "XY"
+      #endif
     #endif
   ));
 
-- 
GitLab