[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