diff --git a/Marlin/Conditionals.h b/Marlin/Conditionals.h
index 29d643909b03c9bb7de47544172be5617343754e..e5e072a22490ba6d8ba78ba00d0b52cc6d6eec06 100644
--- a/Marlin/Conditionals.h
+++ b/Marlin/Conditionals.h
@@ -388,13 +388,11 @@
*/
#define HAS_PROBING_PROCEDURE (ENABLED(AUTO_BED_LEVELING_FEATURE) || ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST))
- #if HAS_PROBING_PROCEDURE
- // Boundaries for probing based on set limits
- #define MIN_PROBE_X (max(X_MIN_POS, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
- #define MAX_PROBE_X (min(X_MAX_POS, X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
- #define MIN_PROBE_Y (max(Y_MIN_POS, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
- #define MAX_PROBE_Y (min(Y_MAX_POS, Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
- #endif
+ // Boundaries for probing based on set limits
+ #define MIN_PROBE_X (max(X_MIN_POS, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
+ #define MAX_PROBE_X (min(X_MAX_POS, X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
+ #define MIN_PROBE_Y (max(Y_MIN_POS, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
+ #define MAX_PROBE_Y (min(Y_MAX_POS, Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
#define HAS_Z_SERVO_ENDSTOP (defined(Z_ENDSTOP_SERVO_NR) && Z_ENDSTOP_SERVO_NR >= 0)
diff --git a/Marlin/SanityCheck.h b/Marlin/SanityCheck.h
index 5eea066a6fa4dfe16eca545bd9622390bfd172f9..9ed8caaff7c05808953932717ca4efc1083ea40c 100644
--- a/Marlin/SanityCheck.h
+++ b/Marlin/SanityCheck.h
@@ -353,10 +353,23 @@
#error "AUTO_BED_LEVELING_FEATURE requires a probe! Define a Z Servo, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or FIX_MOUNTED_PROBE."
#elif ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST)
#error "Z_MIN_PROBE_REPEATABILITY_TEST requires a probe! Define a Z Servo, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or FIX_MOUNTED_PROBE."
+ #elif ENABLED(Z_SAFE_HOMING)
+ #error "Z_SAFE_HOMING currently requires a probe."
#endif
#endif
+/**
+ * Make sure Z_SAFE_HOMING point is reachable
+ */
+#if ENABLED(Z_SAFE_HOMING)
+ #if Z_SAFE_HOMING_X_POINT < MIN_PROBE_X || Z_SAFE_HOMING_X_POINT > MAX_PROBE_X
+ #error "The given Z_SAFE_HOMING_X_POINT can't be reached by the Z probe."
+ #elif Z_SAFE_HOMING_Y_POINT < MIN_PROBE_Y || Z_SAFE_HOMING_Y_POINT > MAX_PROBE_Y
+ #error "The given Z_SAFE_HOMING_Y_POINT can't be reached by the Z probe."
+ #endif
+#endif // Z_SAFE_HOMING
+
/**
* Auto Bed Leveling
*/