[U-Boot-Users] ide support on arm
michael
trimarchi at gandalf.sssup.it
Sat Feb 9 19:28:19 CET 2008
Hi,
Wolfgang Denk wrote:
> In message <20080203165731.63cn9koo2s4c4wwc at feanor.sssup.it> you wrote:
>
>>> Indeed. There is no magic way for your code to make it into the
>>> public source tree without you posting proper patches first.
>>>
>>>
>> I have two patches pending:
>> - ide arm
>> - ixp465 patch (posted one year ago)
>>
>
> I can't find them. Please rebase and resubmit.
>
> Best regards,
>
> Wolfgang Denk
>
>
this is the patch and how to use it:
+#define CONFIG_DOS_PARTITION
+#define CFG_IDE_MAXBUS 1 /* max. 1 IDE bus */
+#define CFG_IDE_MAXDEVICE 1 /* max. 2 drives per IDE bus */
+
+#define CFG_ATA_IDE0_OFFSET (0)
+
+#define CFG_ATA_BASE_ADDR (0x10000000)
+
+/* Offset for data I/O */
+#define CFG_ATA_DATA_OFFSET (0)
+
+/* Offset for normal register accesses */
+#define CFG_ATA_REG_OFFSET (0)
+
+/* Offset for alternate registers */
+#define CFG_ATA_ALT_OFFSET (0)
+
+/* Interval between
registers */
+#define CFG_ATA_STRIDE (1<<21)
+#define __io
+
diff --git a/common/cmd_ide.c b/common/cmd_ide.c
index c38be4f..5b0b738 100644
--- a/common/cmd_ide.c
+++ b/common/cmd_ide.c
@@ -934,7 +934,14 @@ output_data(int dev, ulong *sect_buf, int words)
static void
output_data(int dev, ulong *sect_buf, int words)
{
+#ifndef __ARM__
outsw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, words<<1);
+#else
+ int i = words;
+ u16 *buf = (u16 *) sect_buf;
+ for (i=0; i < (words << 1); i++, buf++)
+ outw(ATA_CURR_BASE(dev)+ATA_DATA_REG, buf);
+#endif
}
#endif /* __PPC__ */
@@ -992,7 +999,14 @@ input_data(int dev, ulong *sect_buf, int words)
static void
input_data(int dev, ulong *sect_buf, int words)
{
+#ifndef __ARM__
insw(ATA_CURR_BASE(dev)+ATA_DATA_REG, sect_buf, words << 1);
+#else
+ int i;
+ volatile u16 *buf = (u16 *) sect_buf;
+ for(i = 0; i < (words<<1); i++, buf++)
+ *buf = inw(ATA_CURR_BASE(dev)+ATA_DATA_REG);
+#endif
}
diff --git a/lib_arm/board.c b/lib_arm/board.c
index 7e7a282..ddf4d5f 100644
--- a/lib_arm/board.c
+++ b/lib_arm/board.c
@@ -435,6 +435,12 @@ extern void dm644x_eth_set_mac_addr (const u_int8_t
*addr);
reset_phy();
#endif
#endif
+
+#if defined(CONFIG_CMD_IDE)
+ puts("IDE: ");
+ ide_init();
+#endif
+
/* main_loop() can return to retry autoboot, if so just run it
again. */
for (;;) {
main_loop ();
More information about the U-Boot
mailing list