Re: arm-lh7a40x IDE support in 2.6.6

From: Marc Singer
Date: Fri May 14 2004 - 12:27:57 EST


On Fri, May 14, 2004 at 06:40:04PM +0200, Bartlomiej Zolnierkiewicz wrote:
>
> I was just porting my patches killing <asm/arch/ide.h> for
> ARM to 2.6.6 when noticed that more work is needed now. :-(
>
> arch/arm/mach-lh7a40x/ide-lpd7a40x.c
> include/asm-arm/arch-lh7a40x/ide.h
>
> Why it couldn't be done in drivers/ide/arm
> (as discussed on linux-ide)?

Your response took look enough for me to switch to another job. I
haven't yet returned to dealing with this.

> Code from <asm/ide.h> is inlined into IDE core code in far too
> many interesting places which greatly increasing complexity/insanity
> to anybody trying to understand or change it.
>
> The rule is simple:
> code outside drivers/ide SHOULDN'T need to know about <linux/ide.h>.

I am emulating what has come before. All of my examples look like
what I did.

> WTF everybody wants to be "smart" and abuses it?
> [ and then people complain why IDE is so ugly ]

Where's the model?

> BTW does it even work as IDE polling code is not merged yet?

Huh?

aThe solution isn't really that complex. I need two things. First, I
must override the register-level access routines in order to do a
little hardware workaround cha-cha-cha. There's nothing I can do to
fix the hardware. Second, I need to be able to poll the interface
after initiating a command. IIRC, you said that I missed at least one
place where this needed to be done.

There are also some very important code (hacks) in

arch/arm/mach-lh7a40x/ide-lpd7a40x.c

to deal with the fact that I didn't want to touch the SELECT_DRIVE
call from the IDE driver. The problem was that the SELECT_DRIVE call
in ide-iops.c does this:

void SELECT_DRIVE (ide_drive_t *drive)
{
if (HWIF(drive)->selectproc)
HWIF(drive)->selectproc(drive);
HWIF(drive)->OUTB(drive->select.all, IDE_SELECT_REG);
}


instead of this:

void SELECT_DRIVE (ide_drive_t *drive)
{
if (HWIF(drive)->selectproc)
HWIF(drive)->selectproc(drive);
else
HWIF(drive)->OUTB(drive->select.all, IDE_SELECT_REG);
}

The OUTB breaks my interface because I don't really have byte-level
access to the resgisters. So, is selectproc a pre-select procedure or
should it be a substitute?

Anyway, that is what I did in a nutshell. I plan to get back to this
in a week or so. Since Russell King already integrated the lh7a40x
code into the kernel, this stuff should be easy to test.

Cheers.

-
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/