More potential problems:

When the ATA device is reset via the IDE control reg, the Winbond doc.
says that the controller is also reset to 8 bits fixed-timing i/os. 

I've added some "hackish" code to the do_reset1 function in
drivers/block/ide.c that looks like this:


#if OK_TO_RESET_CONTROLLER
        if (!IDE_CONTROL_REG) {
                __restore_flags(flags);
                return;
        }
        /*
         * Note that we also set nIEN while resetting the device,
         * to mask unwanted interrupts from the interface during the reset.
         * However, due to the design of PC hardware, this will cause an
         * immediate interrupt due to the edge transition it produces.
         * This single interrupt gives us a "fast poll" for drives that
         * recover from reset very quickly, saving us the first 50ms wait time.
         */
        OUT_BYTE(drive->ctl|6,IDE_CONTROL_REG); /* set SRST and nIEN */
        udelay(10);                     /* more than enough time */
        OUT_BYTE(drive->ctl|2,IDE_CONTROL_REG); /* clear SRST, leave nIEN */
        udelay(10);                     /* more than enough time */
        hwgroup->poll_timeout = jiffies + WAIT_WORSTCASE;
        ide_set_handler (drive, &reset_pollfunc, HZ/20);
+#ifdef CONFIG_BLK_DEV_SL82C105
+       /* Winbond need a reset of the controller or secondary port will be
+          set to 8 bits i/o which is definitely not what we want !
+        */
+       if (hwif->pci_devid == DEVID_W82C105)
+               ide_init_sl82c105(hwif);
+#endif 
#endif  /* OK_TO_RESET_CONTROLLER */

        __restore_flags (flags);        /* local CPU only */
}

The ide_init_sl82c105() must be previously declared extern, and this
works since ide_init_sl82c105 currently does the magic of writing 0x33 in
the config register at 0x40.

I'm still having problems with a disk which is very slow to power up and
doesn't show up at all if I don't wait around 20-30secs before letting
the bios scan the IDE (a caviar). I'm trying to figure out a way to
detect that there's indeed a disk which is not ready.

-- 
           E-Mail: <mailto:[EMAIL PROTECTED]>
BenH.      Web   : <http://calvaweb.calvacom.fr/bh40/>


unsubscribe: body of `unsubscribe linux-arm' to [EMAIL PROTECTED]

Reply via email to