On Thu, 24 Feb 2005, Kars de Jong wrote:
> 7.0 IDE HARD DRIVE
>
> The IDE (AT) hard drive requires two mutually exclusive chip selects. Please
> see the chart
> below for address range in which each is active. The _IOW and _IOR signals
> have timing that is
> valid for IDE hard drives during these cycles.
> Data register accesses can be performed faster than control register
> accesses. Accesses to the
> control registers are called "8 bit accesses" while those to the data
> register are called "16 bit
> accesses". Shown below is a table that gives the chip select and access speed
> versus address
> range.
>
> A4 A3 A2 Address Range Chip Select Speed
> 0 0 0 $0DA0000 to $0DA0FFF _CS1 8 bit
> 0 0 1 $0DA1000 to $0DA1FFF _CS2 8 bit
> 0 1 0 $0DA2000 to $0DA2FFF _CS1 16 bit
> 0 1 1 $0DA3000 to $0DA3FFF _CS2 16 bit
> 1 0 X $0DA4000 to $0DA5FFF None 8 bit
> 1 1 X $0DA6000 to $0DA7FFF None 16 bit
>
> 7.3 IDE Register Map
>
> The disk drive address lines DA0, DA1, and DA2 are expected to be connected
> to processor
> address lines A2, A3, and A4 respectively. When connected in this fashion,
> the following
> memory map results:
>
> Addr on A1000+ Addr on AT Valid Data Read Function Write Function
> $0DA1018 3F6 8 bits Alternate Status Device Control
> $0DA101C 3F7 8 bits Drive address Not used
> $0DA0004 1F1 8 bits Error Register Features
> $0DA0008 1F2 8 bits Sector Count Sector Count
> $0DA000C 1F3 8 bits Sector Number Sector Number
> $0DA0010 1F4 8 bits Cylinder Low Cylinder Low
> $0DA0014 1F5 8 bits Cylinder High Cylinder High
> $0DA0018 1F6 8 bits Drive/Head Drive/Head
> $0DA001C 1F7 8 bits Status Command
> $0DA2000 1F0 16 bits Data Data
>
> -------------------
>
> Which means that with the current definitions in the driver, the data is
> read using 8 bit cycles...
>
> It also nicely shows how IDE doublers work: they just use _CS2 to select
> the second controller...
Yep, they sacrifice the not-really-needed `1018' and unused `101c' registers to
support a second port. Should work on PC as well.
> I changed the definitions to conform to the above table, and did some
So you changed GAYLE_DATA from 0x00 to 0x2000?
> simple timings using hdparm -t:
>
> Old driver: 1.16 MB/s
> New driver: 1.59 MB/s
>
> So it does make a difference...
Impressive!
> Any problems with converting to the above addresses, and can anyone test
> it on an A4000 (it has different addresses, but I'm assuming the 8/16
> bit thing holds there too)?
I'm afraid it won't work, but I (or someone else, my Amiga is still not set up
since my last move) could give it a try anyway, you wouldn't loose data if it
doesn't work.
The A4000 Gayle is a lot different from the A600/A1200. E.g. the interrupt
register is at offset 0x1000, compared to the data register.
And when I wrote support for the Amiga 4000 IDE interface back in 1994, I did
reverse engineer the A4000's scsi.device, so I think I would have noticed if
they used offset 0x2000 for the data register.
Perhaps we can ask Dave Haynie? Is he still around?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [EMAIL PROTECTED]
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
-
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html