diff --git a/arch/arm/include/asm/arch-kirkwood/kirkwood.h b/arch/arm/include/asm/arch-kirkwood/kirkwood.h index baf0c47..fb18ef7 100644 --- a/arch/arm/include/asm/arch-kirkwood/kirkwood.h +++ b/arch/arm/include/asm/arch-kirkwood/kirkwood.h @@ -68,6 +68,8 @@ #define MVGBE0_BASE KW_EGIGA0_BASE #define MVGBE1_BASE KW_EGIGA1_BASE +#define CONFIG_IDE_PREINIT + #if defined (CONFIG_KW88F6281) #include #elif defined (CONFIG_KW88F6192) diff --git a/board/Marvell/openrd_base/openrd_base.c b/board/Marvell/openrd_base/openrd_base.c index 3c4c85d..5d0409f 100644 --- a/board/Marvell/openrd_base/openrd_base.c +++ b/board/Marvell/openrd_base/openrd_base.c @@ -111,16 +111,6 @@ int board_init(void) /* adress of boot parameters */ gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100; -#if defined(CONFIG_MVSATA_IDE) - /* Enable SATA port 0 if SATA IDE was configured */ - mvsata_ide_initialize_port( - (struct mv_sata_port_registers *) - (KW_SATA_BASE + KW_SATA_PORT0_OFFSET)); - mvsata_ide_initialize_port( - (struct mv_sata_port_registers *) - (KW_SATA_BASE + KW_SATA_PORT1_OFFSET)); -#endif - return 0; } @@ -169,3 +159,19 @@ void reset_phy(void) printf("88E1116 Initialized on %s\n", name); } #endif /* CONFIG_RESET_PHY_R */ + +#if defined(CONFIG_MVSATA_IDE) +int ide_preinit (void) +{ + /* Enable SATA port 0 if SATA IDE was configured */ + mvsata_ide_initialize_port( + (struct mv_sata_port_registers *) + (KW_SATA_BASE + KW_SATA_PORT0_OFFSET)); + mvsata_ide_initialize_port( + (struct mv_sata_port_registers *) + (KW_SATA_BASE + KW_SATA_PORT1_OFFSET)); + /* return 0 as we always succeed */ + return 0; +} +#endif + diff --git a/drivers/block/mvsata_ide.c b/drivers/block/mvsata_ide.c index d44a42c..d27fa5c 100644 --- a/drivers/block/mvsata_ide.c +++ b/drivers/block/mvsata_ide.c @@ -54,6 +54,8 @@ void mvsata_ide_initialize_port(struct mvsata_port_registers *port) writel(reg, &port->scontrol); + udelay(41); + reg = (reg & ~MVSATA_SCONTROL_MASK) | MVSATA_PORT_USE; writel(reg, &port->scontrol);