README for MIPS AU1XXX IDE driver - Released 2005-07-15

ABOUT
-----
This file describes the 'drivers/ide/mips/au1xxx-ide.c', related files and the
services they provide.

If you are short in patience and just want to know how to add your hard disc to
the white or black list, go to the 'ADD NEW HARD DISC TO WHITE OR BLACK LIST'
section.


LICENSE
-------

Copyright (c) 2003-2005 AMD, Personal Connectivity Solutions

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.

THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
675 Mass Ave, Cambridge, MA 02139, USA.

Note: for more information, please refer "AMD Alchemy Au1200/Au1550 IDE
      Interface and Linux Device Driver" Application Note.


FILES, CONFIGS AND COMPATABILITY
--------------------------------

Two files are introduced:

  a) 'include/asm-mips/mach-au1x00/au1xxx_ide.h'
     containes : struct _auide_hwif
                 struct drive_list_entry dma_white_list
                 struct drive_list_entry dma_black_list
                 timing parameters for PIO mode 0/1/2/3/4
                 timing parameters for MWDMA 0/1/2

  b) 'drivers/ide/mips/au1xxx-ide.c'
     contains the functionality of the AU1XXX IDE driver

Four configs variables are introduced:

  CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA    - enable the PIO+DBDMA mode
  CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA  - enable the MWDMA mode
  CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON - set Burstable FIFO in DBDMA
                                           controller
  CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ - maximum transfer size
                                           per descriptor

If MWDMA is enabled and the connected hard disc is not on the white list, the
kernel switches to a "safe mwdma mode" at boot time. In this mode the IDE
performance is substantial slower then in full speed mwdma. In this case
please add your hard disc to the white list (follow instruction from 'ADD NEW
HARD DISC TO WHITE OR BLACK LIST' section).


SUPPORTED IDE MODES
-------------------

The AU1XXX IDE driver supported all PIO modes - PIO mode 0/1/2/3/4 - and all
MWDMA modes - MWDMA 0/1/2 -. There is no support for SWDMA and UDMA mode.

To change the PIO mode use the program hdparm with option -p, e.g.
'hdparm -p0 [device]' for PIO mode 0. To enable the MWDMA mode use the option
-X, e.g. 'hdparm -X32 [device]' for MWDMA mode 0.


PERFORMANCE CONFIGURATIONS
--------------------------

If the used system doesn't need USB support enable the following kernel configs:

CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y
CONFIG_IDE_GENERIC=y
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_GENERIC=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDE_AU1XXX=y
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y

Also define 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to enable
the burst support on DBDMA controller.

If the used system need the USB support enable the following kernel configs for
high IDE to USB throughput.

CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDE_GENERIC=y
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_BLK_DEV_GENERIC=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDE_AU1XXX=y
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y

Also undefine 'IDE_AU1XXX_BURSTMODE' in 'drivers/ide/mips/au1xxx-ide.c' to
disable the burst support on DBDMA controller.

ADD NEW HARD DISC TO WHITE OR BLACK LIST
----------------------------------------

Step 1 : detect the model name of your hard disc

  a) connect your hard disc to the AU1XXX

  b) boot your kernel and get the hard disc model.

     Example boot log:

     --snipped--
     Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
     ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
     Au1xxx IDE(builtin) configured for MWDMA2
     Probing IDE interface ide0...
     hda: Maxtor 6E040L0, ATA DISK drive
     ide0 at 0xac800000-0xac800007,0xac8001c0 on irq 64
     hda: max request size: 64KiB
     hda: 80293248 sectors (41110 MB) w/2048KiB Cache, CHS=65535/16/63, (U)DMA
     --snipped--

     In this example 'Maxtor 6E040L0'.

Step  2 : edit 'include/asm-mips/mach-au1x00/au1xxx_ide.h'

  Add your hard disc to the dma_white_list or dma_black_list structur.

Step 3 : Recompile the kernel

  Enable MWDMA support in the kernel configuration. Recompile the kernel and
  reboot.

Step 4 : Tests

  If you have add a hard disc to the white list, please run some stress tests
  for verification.


ACKNOWLEDGMENTS
---------------

These drivers wouldn't have been done without the base of kernel 2.4.x AU1XXX
IDE driver from AMD.

Additional input also from:
Matthias Lenk <matthias.lenk@amd.com>

Happy hacking!
Enrico Walther <enrico.walther@amd.com>
