Re: FDC motor left on

From: Mikael Pettersson
Date: Mon Oct 06 2003 - 08:00:59 EST


Richard B. Johnson writes:
> On Sat, 4 Oct 2003, Dave Jones wrote:
>
> > On Fri, Oct 03, 2003 at 01:25:30PM -0400, Richard B. Johnson wrote:
> > > In linux-2.4.22 and earlier, if there is no FDC driver installed,
> > > the FDC motor may continue to run after boot if the motor was
> > > started as part of the BIOS boot sequence.
> > > This patch turns OFF the motor once Linux gets control.
> > >
> > >
> > > --- linux-2.4.22/arch/i386/boot/setup.S.orig Fri Aug 2 20:39:42 2002
> > > +++ linux-2.4.22/arch/i386/boot/setup.S Fri Oct 3 11:50:43 2003
> > > @@ -59,6 +59,8 @@
> >
> > Does this mean the 'kill_motor' function in bootsect.S isn't doing
> > what it should be? If so, maybe that needs fixing instead of turning
> > it off in two places ?
> >
> > Dave
>
> Yes. I didn't even see that. The code there makes me kinda sick.
> Anyway, the kill_motor function executes "reset diskette/disk" function
> which will never turn OFF the drive. Instead, it will restart
> the motor timer because, as a condition of reseting the diskette,
> it must make sure the motor is running.
>
> I suggest that the FDC control byte be read, then the result be
> ANDed with ~0x10, then written back. The ifed-out code clears
> the whole control word which is inappropriate at a time the
> diskette channel may be still be active.

Do NOT do any outbs to the FDC unless you've done the equivalent of
the HW detection done in the floppy driver. The BIOS call in kill_motor
is a workaround for the fact that the original raw accesses lock up
the FDCs in some SuperIO chips (including the one in my ASUS P4T-E).

The floppy driver gets it right, but it also does HW detection
first and does the reset differently for non-ancient FDCs.

/Mikael
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/