ide: add configuration

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>
This commit is contained in:
Albert Aribaud 2010-08-08 05:17:05 +05:30 committed by Prafulla Wadaskar
parent 9efac4a1eb
commit f2a37fcd9b
7 changed files with 24 additions and 9 deletions

View File

@ -95,4 +95,7 @@
#define CONFIG_FSL_LBC #define CONFIG_FSL_LBC
#endif #endif
/* All PPC boards must swap IDE bytes */
#define CONFIG_IDE_SWAP_IO
#endif /* _ASM_CONFIG_H_ */ #endif /* _ASM_CONFIG_H_ */

View File

@ -847,7 +847,7 @@ input_swap_data(int dev, ulong *sect_buf, int words)
#endif /* __LITTLE_ENDIAN || CONFIG_AU1X00 */ #endif /* __LITTLE_ENDIAN || CONFIG_AU1X00 */
#if defined(__PPC__) || defined(CONFIG_PXA_PCMCIA) || defined(CONFIG_SH) #if defined(CONFIG_IDE_SWAP_IO)
static void static void
output_data(int dev, ulong *sect_buf, int words) output_data(int dev, ulong *sect_buf, int words)
{ {
@ -891,15 +891,15 @@ output_data(int dev, ulong *sect_buf, int words)
} }
#endif #endif
} }
#else /* ! __PPC__ */ #else /* ! CONFIG_IDE_SWAP_IO */
static void static void
output_data(int dev, ulong *sect_buf, int words) output_data(int dev, ulong *sect_buf, int words)
{ {
outsw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, words<<1); 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 static void
input_data(int dev, ulong *sect_buf, int words) input_data(int dev, ulong *sect_buf, int words)
{ {
@ -949,14 +949,14 @@ input_data(int dev, ulong *sect_buf, int words)
} }
#endif #endif
} }
#else /* ! __PPC__ */ #else /* ! CONFIG_IDE_SWAP_IO */
static void static void
input_data(int dev, ulong *sect_buf, int words) input_data(int dev, ulong *sect_buf, int words)
{ {
insw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, words << 1); 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 * 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 /* since ATAPI may use commands with not 4 bytes alligned length
* we have our own transfer functions, 2 bytes alligned */ * we have our own transfer functions, 2 bytes alligned */
static void static void
@ -1640,7 +1640,7 @@ input_data_shorts(int dev, ushort *sect_buf, int shorts)
#endif #endif
} }
#else /* ! __PPC__ */ #else /* ! CONFIG_IDE_SWAP_IO */
static void static void
output_data_shorts(int dev, ushort *sect_buf, int shorts) 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); 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) * Wait until (Status & mask) == res, or timeout (in ms)

View 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 marked memory configuration should be touched since the other parameters
are imposed by the PXA architecture. 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_PCMCIA 1
#define CONFIG_PXA_IDE 1 #define CONFIG_PXA_IDE 1

View File

@ -138,6 +138,7 @@
#define CONFIG_SYS_ATA_DATA_OFFSET 0x200 /* data reg offset */ #define CONFIG_SYS_ATA_DATA_OFFSET 0x200 /* data reg offset */
#define CONFIG_SYS_ATA_REG_OFFSET 0x200 /* reg offset */ #define CONFIG_SYS_ATA_REG_OFFSET 0x200 /* reg offset */
#define CONFIG_SYS_ATA_ALT_OFFSET 0x210 /* alternate register 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. */ /* if you use all NOR Flash , you change dip-switch. Please see Manual. */
#define CONFIG_SYS_MAX_FLASH_BANKS 1 #define CONFIG_SYS_MAX_FLASH_BANKS 1

View File

@ -122,5 +122,6 @@
#define CONFIG_SYS_ATA_DATA_OFFSET 0 /* data reg offset */ #define CONFIG_SYS_ATA_DATA_OFFSET 0 /* data reg offset */
#define CONFIG_SYS_ATA_REG_OFFSET 0 /* reg offset */ #define CONFIG_SYS_ATA_REG_OFFSET 0 /* reg offset */
#define CONFIG_SYS_ATA_ALT_OFFSET 0x200 /* alternate register offset */ #define CONFIG_SYS_ATA_ALT_OFFSET 0x200 /* alternate register offset */
#define CONFIG_IDE_SWAP_IO
#endif /* __MS7720SE_H */ #endif /* __MS7720SE_H */

View File

@ -96,6 +96,7 @@
#define CONFIG_SYS_ATA_DATA_OFFSET 0x1000 /* data reg offset */ #define CONFIG_SYS_ATA_DATA_OFFSET 0x1000 /* data reg offset */
#define CONFIG_SYS_ATA_REG_OFFSET 0x1000 /* reg offset */ #define CONFIG_SYS_ATA_REG_OFFSET 0x1000 /* reg offset */
#define CONFIG_SYS_ATA_ALT_OFFSET 0x800 /* alternate register offset */ #define CONFIG_SYS_ATA_ALT_OFFSET 0x800 /* alternate register offset */
#define CONFIG_IDE_SWAP_IO
/* /*
* SuperH PCI Bridge Configration * SuperH PCI Bridge Configration

View File

@ -171,6 +171,7 @@
#define CONFIG_SYS_ATA_DATA_OFFSET 0x1000 /* data reg offset */ #define CONFIG_SYS_ATA_DATA_OFFSET 0x1000 /* data reg offset */
#define CONFIG_SYS_ATA_REG_OFFSET 0x1000 /* reg offset */ #define CONFIG_SYS_ATA_REG_OFFSET 0x1000 /* reg offset */
#define CONFIG_SYS_ATA_ALT_OFFSET 0x800 /* alternate register offset */ #define CONFIG_SYS_ATA_ALT_OFFSET 0x800 /* alternate register offset */
#define CONFIG_IDE_SWAP_IO
#endif /* CONFIG_CMD_IDE */ #endif /* CONFIG_CMD_IDE */
#endif /* __R7780RP_H */ #endif /* __R7780RP_H */