ide: add configuration
authorAlbert Aribaud <[albert.aribaud@free.fr]>
Sat, 7 Aug 2010 23:47:05 +0000 (05:17 +0530)
committerPrafulla Wadaskar <prafulla@marvell.com>
Sat, 7 Aug 2010 23:47:05 +0000 (05:17 +0530)
CONFIG_IDE_SWAP_IO

This configuration option replaces a complex conditional
in cmd_ide.c with an explicit define to be added to SoC or
board configs.

Signed-off-by: Albert Aribaud <albert.aribaud@free.fr>
arch/powerpc/include/asm/config.h
common/cmd_ide.c
doc/README.PXA_CF
include/configs/ap325rxa.h
include/configs/ms7720se.h
include/configs/r2dplus.h
include/configs/r7780mp.h

index f70699de2796b1ac446e94d2085d8a4f8771d8ee..d0986570e29111836d0654e2cd3d1e10bb8b5681 100644 (file)
@@ -95,4 +95,7 @@
 #define CONFIG_FSL_LBC
 #endif
 
+/* All PPC boards must swap IDE bytes */
+#define CONFIG_IDE_SWAP_IO
+
 #endif /* _ASM_CONFIG_H_ */
index c0fb88dbc79894cc225f53262161f479a0636b7e..d423e53fe3652100e8ba4b683553627b7a5b0a86 100644 (file)
@@ -847,7 +847,7 @@ input_swap_data(int dev, ulong *sect_buf, int words)
 #endif /* __LITTLE_ENDIAN || CONFIG_AU1X00 */
 
 
-#if defined(__PPC__) || defined(CONFIG_PXA_PCMCIA) || defined(CONFIG_SH)
+#if defined(CONFIG_IDE_SWAP_IO)
 static void
 output_data(int dev, ulong *sect_buf, int words)
 {
@@ -891,15 +891,15 @@ output_data(int dev, ulong *sect_buf, int words)
        }
 #endif
 }
-#else  /* ! __PPC__ */
+#else  /* ! CONFIG_IDE_SWAP_IO */
 static void
 output_data(int dev, ulong *sect_buf, int words)
 {
        outsw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, words<<1);
 }
-#endif /* __PPC__ */
+#endif /* CONFIG_IDE_SWAP_IO */
 
-#if defined(__PPC__) || defined(CONFIG_PXA_PCMCIA) || defined(CONFIG_SH)
+#if defined(CONFIG_IDE_SWAP_IO)
 static void
 input_data(int dev, ulong *sect_buf, int words)
 {
@@ -949,14 +949,14 @@ input_data(int dev, ulong *sect_buf, int words)
        }
 #endif
 }
-#else  /* ! __PPC__ */
+#else  /* ! CONFIG_IDE_SWAP_IO */
 static void
 input_data(int dev, ulong *sect_buf, int words)
 {
        insw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, words << 1);
 }
 
-#endif /* __PPC__ */
+#endif /* CONFIG_IDE_SWAP_IO */
 
 /* -------------------------------------------------------------------------
  */
@@ -1573,7 +1573,7 @@ int ide_device_present(int dev)
  * ATAPI Support
  */
 
-#if defined(__PPC__) || defined(CONFIG_PXA_PCMCIA)
+#if defined(CONFIG_IDE_SWAP_IO)
 /* since ATAPI may use commands with not 4 bytes alligned length
  * we have our own transfer functions, 2 bytes alligned */
 static void
@@ -1640,7 +1640,7 @@ input_data_shorts(int dev, ushort *sect_buf, int shorts)
 #endif
 }
 
-#else  /* ! __PPC__ */
+#else  /* ! CONFIG_IDE_SWAP_IO */
 static void
 output_data_shorts(int dev, ushort *sect_buf, int shorts)
 {
@@ -1653,7 +1653,7 @@ input_data_shorts(int dev, ushort *sect_buf, int shorts)
        insw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, shorts);
 }
 
-#endif /* __PPC__ */
+#endif /* CONFIG_IDE_SWAP_IO */
 
 /*
  * Wait until (Status & mask) == res, or timeout (in ms)
index 6a0f236d3ca8e66555aaca60d46a37ceff508693..1d76b32dd7ad22a51c7473c25acea850ee23847c 100644 (file)
@@ -6,6 +6,14 @@ follow the connections of the standard lubbock. Anyway just the block
 marked memory configuration should be touched since the other parameters
 are imposed by the PXA architecture.
 
+EDIT 2010-07-01: in common/cmd_ide.c, having CONFIG_PXA_PCMCIA defined
+would cause looping on inw()/outw() rather than using insw()/outsw(),
+thus making sure IDE / ATA bytes are properly swapped. This behaviour
+is now controlled by CONFIG_IDE_SWAP_IO, therefore PXA boards with
+PCMCIA should #define CONFIG_IDE_SWAP_IO.
+
+#define CONFIG_IDE_SWAP_IO
+
 #define CONFIG_PXA_PCMCIA 1
 #define CONFIG_PXA_IDE 1
 
index 70dd47ecb56b0886fd03b385fa9ff437fa54de13..80a5797493da1960605cf4d6f6a4e5d66dbce812 100644 (file)
 #define CONFIG_SYS_ATA_DATA_OFFSET     0x200   /* data reg offset */
 #define CONFIG_SYS_ATA_REG_OFFSET      0x200   /* reg offset */
 #define CONFIG_SYS_ATA_ALT_OFFSET      0x210   /* alternate register offset */
+#define CONFIG_IDE_SWAP_IO
 
 /* if you use all NOR Flash , you change dip-switch. Please see Manual. */
 #define CONFIG_SYS_MAX_FLASH_BANKS     1
index ba0a3f8043dfd9a6bb037958a9ecda16d3e7e5dc..0ea3527e30b0821ca886bf9bd9d18d08ff2f06cb 100644 (file)
 #define CONFIG_SYS_ATA_DATA_OFFSET     0               /* data reg offset */
 #define CONFIG_SYS_ATA_REG_OFFSET      0               /* reg offset */
 #define CONFIG_SYS_ATA_ALT_OFFSET      0x200           /* alternate register offset */
+#define CONFIG_IDE_SWAP_IO
 
 #endif /* __MS7720SE_H */
index 8931b974aa24a8b36e310b50fe8acac334a0b9ea..955f3ff57fed8d46af1f9cdc74f6b343b9a7b482 100644 (file)
@@ -96,6 +96,7 @@
 #define CONFIG_SYS_ATA_DATA_OFFSET     0x1000  /* data reg offset */
 #define CONFIG_SYS_ATA_REG_OFFSET      0x1000  /* reg offset */
 #define CONFIG_SYS_ATA_ALT_OFFSET      0x800   /* alternate register offset */
+#define CONFIG_IDE_SWAP_IO
 
 /*
  * SuperH PCI Bridge Configration
index 71c570eee90772bff1274eacec5fb1d37b4800ed..3afe93a67163cd118f29928f972585933f02b4d9 100644 (file)
 #define CONFIG_SYS_ATA_DATA_OFFSET     0x1000          /* data reg offset */
 #define CONFIG_SYS_ATA_REG_OFFSET      0x1000          /* reg offset */
 #define CONFIG_SYS_ATA_ALT_OFFSET      0x800           /* alternate register offset */
+#define CONFIG_IDE_SWAP_IO
 #endif /* CONFIG_CMD_IDE */
 
 #endif /* __R7780RP_H */