* Patch by Pierre Aubert, 24 Nov 2003:
  - add a return value for the fpga command
  - add ide_preinit() function called in ide_init if CONFIG_IDE_PREINIT
    is defined. If ide_preinit fails, ide_init is aborted.
  - fix an endianess problem in fat.h
diff --git a/common/cmd_fpga.c b/common/cmd_fpga.c
index 8e180da..41ed459 100644
--- a/common/cmd_fpga.c
+++ b/common/cmd_fpga.c
@@ -70,6 +70,7 @@
     void *fpga_data = NULL;
     char *devstr = getenv("fpga");
     char *datastr = getenv("fpgadata");
+    int rc = FPGA_FAIL;
 
 	if ( devstr ) dev = (int)simple_strtoul( devstr, NULL, 16 );
 	if ( datastr ) fpga_data = (void *)simple_strtoul( datastr, NULL, 16 );
@@ -106,15 +107,15 @@
 		    break;
 
 	    case FPGA_INFO:
-		    fpga_info( dev );
+		    rc = fpga_info( dev );
 		    break;
 
 	    case FPGA_LOAD:
-			fpga_load( dev, fpga_data, data_size );
+                    rc = fpga_load( dev, fpga_data, data_size );
 		    break;
 
 	    case FPGA_DUMP:
-			fpga_dump( dev, fpga_data, data_size );
+                    rc = fpga_dump( dev, fpga_data, data_size );
 		    break;
 
 	    default:
@@ -122,7 +123,7 @@
 		    fpga_usage( cmdtp );
 		    break;
     }
-    return 0;
+    return (rc);
 }
 
 static void fpga_usage ( cmd_tbl_t *cmdtp )
diff --git a/common/cmd_ide.c b/common/cmd_ide.c
index 45f6368..3f18b00 100644
--- a/common/cmd_ide.c
+++ b/common/cmd_ide.c
@@ -486,6 +486,19 @@
 	unsigned int ata_reset_time;
 	char *s;
 #endif
+#ifdef CONFIG_IDE_8xx_PCCARD
+	extern int pcmcia_on (void);
+	extern int ide_devices_found; /* Initialized in check_ide_device() */
+#endif	/* CONFIG_IDE_8xx_PCCARD */
+
+#ifdef CONFIG_IDE_PREINIT
+	WATCHDOG_RESET();
+
+	if (ide_preinit ()) {
+		puts ("ide_preinit failed\n");
+		return;
+	}
+#endif	/* CONFIG_IDE_PREINIT */
 
 #ifdef CONFIG_IDE_8xx_PCCARD
 	extern int pcmcia_on (void);
@@ -756,12 +769,12 @@
 static void __inline__
 ide_outb(int dev, int port, unsigned char val)
 {
+	PRINTF ("ide_outb (dev= %d, port= %d, val= 0x%02x) : @ 0x%08lx\n",
+		dev, port, val, (ATA_CURR_BASE(dev)+port));
+    
 	/* Ensure I/O operations complete */
 	__asm__ volatile("eieio");
 	*((uchar *)(ATA_CURR_BASE(dev)+port)) = val;
-#if 0
-	printf ("ide_outb: 0x%08lx <== 0x%02x\n", ATA_CURR_BASE(dev)+port, val);
-#endif
 }
 #else	/* ! __PPC__ */
 static void __inline__
@@ -780,9 +793,8 @@
 	/* Ensure I/O operations complete */
 	__asm__ volatile("eieio");
 	val = *((uchar *)(ATA_CURR_BASE(dev)+port));
-#if 0
-	printf ("ide_inb: 0x%08lx ==> 0x%02x\n", ATA_CURR_BASE(dev)+port, val);
-#endif
+	PRINTF ("ide_inb (dev= %d, port= %d) : @ 0x%08lx -> 0x%02x\n",
+		dev, port, (ATA_CURR_BASE(dev)+port), val);
 	return (val);
 }
 #else	/* ! __PPC__ */