diff --git a/README b/README
index ce86e74baf31ea70b02a7d51e46aa73125fad73a..dee0e674a18c007fa98393db9a7d3b0a70e8a42b 100644
--- a/README
+++ b/README
@@ -388,6 +388,15 @@ The following options need to be configured:
 		This define fills in the correct boot CPU in the boot
 		param header, the default value is zero if undefined.
 
+		CONFIG_OF_IDE_FIXUP
+
+		U-Boot can detect if an IDE device is present or not.
+		If not, and this new config option is activated, U-Boot
+		removes the ATA node from the DTS before booting Linux,
+		so the Linux IDE driver does not probe the device and
+		crash. This is needed for buggy hardware (uc101) where
+		no pull down resistor is connected to the signal IDE5V_DD7.
+
 - vxWorks boot parameters:
 
 		bootvx constructs a valid bootline using the following
diff --git a/common/cmd_ide.c b/common/cmd_ide.c
index 4d7a0ac9e46a465147e55355912d417401f40519..ec9a1df38e778483237fb2241d1d05d15c323017 100644
--- a/common/cmd_ide.c
+++ b/common/cmd_ide.c
@@ -1624,6 +1624,14 @@ static void ide_led (uchar led, uchar status)
 
 #endif	/* CONFIG_IDE_LED */
 
+#if defined(CONFIG_OF_IDE_FIXUP)
+int ide_device_present(int dev)
+{
+	if (dev >= CONFIG_SYS_IDE_MAXBUS)
+		return 0;
+	return (ide_dev_desc[dev].type == DEV_TYPE_UNKNOWN ? 0 : 1);
+}
+#endif
 /* ------------------------------------------------------------------------- */
 
 #ifdef CONFIG_ATAPI
diff --git a/cpu/mpc5xxx/cpu.c b/cpu/mpc5xxx/cpu.c
index f6258c7be60b9f00d4d546be36ed9c3f5e06174e..efa64c74815ca26e6c4d9b051f0acae41670397b 100644
--- a/cpu/mpc5xxx/cpu.c
+++ b/cpu/mpc5xxx/cpu.c
@@ -40,6 +40,10 @@
 #include <fdt_support.h>
 #endif
 
+#if defined(CONFIG_OF_IDE_FIXUP)
+#include <ide.h>
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 int checkcpu (void)
@@ -137,6 +141,22 @@ void ft_cpu_setup(void *blob, bd_t *bd)
 	do_fixup_by_path(blob, eth_path, "mac-address", enetaddr, 6, 0);
 	do_fixup_by_path(blob, eth_path, "local-mac-address", enetaddr, 6, 0);
 #endif
+#if defined(CONFIG_OF_IDE_FIXUP)
+	if (!ide_device_present(0)) {
+		/* NO CF card detected -> delete ata node in DTS */
+		int nodeoffset = 0;
+		char nodename[] = "/soc5200@f0000000/ata@3a00";
+
+		nodeoffset = fdt_path_offset(blob, nodename);
+		if (nodeoffset >= 0) {
+			fdt_del_node(blob, nodeoffset);
+		} else {
+			printf("%s: cannot find %s node err:%s\n",
+				__func__, nodename, fdt_strerror(nodeoffset));
+		}
+	}
+
+#endif
 }
 #endif
 
diff --git a/include/configs/manroland/mpc5200-common.h b/include/configs/manroland/mpc5200-common.h
index 2f092b180726e7da2692a24af759cc6932c733ec..b29ef9b65591798b9ed04ed840ca5ea1a29d6966 100644
--- a/include/configs/manroland/mpc5200-common.h
+++ b/include/configs/manroland/mpc5200-common.h
@@ -225,5 +225,6 @@
 #define OF_SOC			"soc5200@f0000000"
 #define OF_TBCLK		(bd->bi_busfreq / 4)
 #define OF_STDOUT_PATH		"/soc5200@f0000000/serial@2000"
+#define CONFIG_OF_IDE_FIXUP
 
 #endif /* __MANROLAND_MPC52XX__COMMON_H */
diff --git a/include/ide.h b/include/ide.h
index ddb9579f8fa07307b807ee1118dea11cf242b7ff..6a1b7ae844f34529e6dfa4d18ae7887c9f068ea6 100644
--- a/include/ide.h
+++ b/include/ide.h
@@ -54,4 +54,7 @@ void ide_init(void);
 ulong ide_read(int device, lbaint_t blknr, ulong blkcnt, void *buffer);
 ulong ide_write(int device, lbaint_t blknr, ulong blkcnt, void *buffer);
 
+#if defined(CONFIG_OF_IDE_FIXUP)
+int ide_device_present(int dev);
+#endif
 #endif /* _IDE_H */