linux/drivers/ide/hpt366.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (C) 1999-2003              Andre Hedrick <andre@linux-ide.org>
   4 * Portions Copyright (C) 2001          Sun Microsystems, Inc.
   5 * Portions Copyright (C) 2003          Red Hat Inc
   6 * Portions Copyright (C) 2007          Bartlomiej Zolnierkiewicz
   7 * Portions Copyright (C) 2005-2009     MontaVista Software, Inc.
   8 *
   9 * Thanks to HighPoint Technologies for their assistance, and hardware.
  10 * Special Thanks to Jon Burchmore in SanDiego for the deep pockets, his
  11 * donation of an ABit BP6 mainboard, processor, and memory acellerated
  12 * development and support.
  13 *
  14 *
  15 * HighPoint has its own drivers (open source except for the RAID part)
  16 * available from http://www.highpoint-tech.com/USA_new/service_support.htm 
  17 * This may be useful to anyone wanting to work on this driver, however  do not
  18 * trust  them too much since the code tends to become less and less meaningful
  19 * as the time passes... :-/
  20 *
  21 * Note that final HPT370 support was done by force extraction of GPL.
  22 *
  23 * - add function for getting/setting power status of drive
  24 * - the HPT370's state machine can get confused. reset it before each dma 
  25 *   xfer to prevent that from happening.
  26 * - reset state engine whenever we get an error.
  27 * - check for busmaster state at end of dma. 
  28 * - use new highpoint timings.
  29 * - detect bus speed using highpoint register.
  30 * - use pll if we don't have a clock table. added a 66MHz table that's
  31 *   just 2x the 33MHz table.
  32 * - removed turnaround. NOTE: we never want to switch between pll and
  33 *   pci clocks as the chip can glitch in those cases. the highpoint
  34 *   approved workaround slows everything down too much to be useful. in
  35 *   addition, we would have to serialize access to each chip.
  36 *      Adrian Sun <a.sun@sun.com>
  37 *
  38 * add drive timings for 66MHz PCI bus,
  39 * fix ATA Cable signal detection, fix incorrect /proc info
  40 * add /proc display for per-drive PIO/DMA/UDMA mode and
  41 * per-channel ATA-33/66 Cable detect.
  42 *      Duncan Laurie <void@sun.com>
  43 *
  44 * fixup /proc output for multiple controllers
  45 *      Tim Hockin <thockin@sun.com>
  46 *
  47 * On hpt366: 
  48 * Reset the hpt366 on error, reset on dma
  49 * Fix disabling Fast Interrupt hpt366.
  50 *      Mike Waychison <crlf@sun.com>
  51 *
  52 * Added support for 372N clocking and clock switching. The 372N needs
  53 * different clocks on read/write. This requires overloading rw_disk and
  54 * other deeply crazy things. Thanks to <http://www.hoerstreich.de> for
  55 * keeping me sane. 
  56 *              Alan Cox <alan@lxorguk.ukuu.org.uk>
  57 *
  58 * - fix the clock turnaround code: it was writing to the wrong ports when
  59 *   called for the secondary channel, caching the current clock mode per-
  60 *   channel caused the cached register value to get out of sync with the
  61 *   actual one, the channels weren't serialized, the turnaround shouldn't
  62 *   be done on 66 MHz PCI bus
  63 * - disable UltraATA/100 for HPT370 by default as the 33 MHz clock being used
  64 *   does not allow for this speed anyway
  65 * - avoid touching disabled channels (e.g. HPT371/N are single channel chips,
  66 *   their primary channel is kind of virtual, it isn't tied to any pins)
  67 * - fix/remove bad/unused timing tables and use one set of tables for the whole
  68 *   HPT37x chip family; save space by introducing the separate transfer mode
  69 *   table in which the mode lookup is done
  70 * - use f_CNT value saved by  the HighPoint BIOS as reading it directly gives
  71 *   the wrong PCI frequency since DPLL has already been calibrated by BIOS;
  72 *   read it only from the function 0 of HPT374 chips
  73 * - fix the hotswap code:  it caused RESET- to glitch when tristating the bus,
  74 *   and for HPT36x the obsolete HDIO_TRISTATE_HWIF handler was called instead
  75 * - pass to init_chipset() handlers a copy of the IDE PCI device structure as
  76 *   they tamper with its fields
  77 * - pass  to the init_setup handlers a copy of the ide_pci_device_t structure
  78 *   since they may tamper with its fields
  79 * - prefix the driver startup messages with the real chip name
  80 * - claim the extra 240 bytes of I/O space for all chips
  81 * - optimize the UltraDMA filtering and the drive list lookup code
  82 * - use pci_get_slot() to get to the function 1 of HPT36x/374
  83 * - cache offset of the channel's misc. control registers (MCRs) being used
  84 *   throughout the driver
  85 * - only touch the relevant MCR when detecting the cable type on HPT374's
  86 *   function 1
  87 * - rename all the register related variables consistently
  88 * - move all the interrupt twiddling code from the speedproc handlers into
  89 *   init_hwif_hpt366(), also grouping all the DMA related code together there
  90 * - merge HPT36x/HPT37x speedproc handlers, fix PIO timing register mask and
  91 *   separate the UltraDMA and MWDMA masks there to avoid changing PIO timings
  92 *   when setting an UltraDMA mode
  93 * - fix hpt3xx_tune_drive() to set the PIO mode requested, not always select
  94 *   the best possible one
  95 * - clean up DMA timeout handling for HPT370
  96 * - switch to using the enumeration type to differ between the numerous chip
  97 *   variants, matching PCI device/revision ID with the chip type early, at the
  98 *   init_setup stage
  99 * - extend the hpt_info structure to hold the DPLL and PCI clock frequencies,
 100 *   stop duplicating it for each channel by storing the pointer in the pci_dev
 101 *   structure: first, at the init_setup stage, point it to a static "template"
 102 *   with only the chip type and its specific base DPLL frequency, the highest
 103 *   UltraDMA mode, and the chip settings table pointer filled,  then, at the
 104 *   init_chipset stage, allocate per-chip instance  and fill it with the rest
 105 *   of the necessary information
 106 * - get rid of the constant thresholds in the HPT37x PCI clock detection code,
 107 *   switch  to calculating  PCI clock frequency based on the chip's base DPLL
 108 *   frequency
 109 * - switch to using the  DPLL clock and enable UltraATA/133 mode by default on
 110 *   anything  newer than HPT370/A (except HPT374 that is not capable of this
 111 *   mode according to the manual)
 112 * - fold PCI clock detection and DPLL setup code into init_chipset_hpt366(),
 113 *   also fixing the interchanged 25/40 MHz PCI clock cases for HPT36x chips;
 114 *   unify HPT36x/37x timing setup code and the speedproc handlers by joining
 115 *   the register setting lists into the table indexed by the clock selected
 116 * - set the correct hwif->ultra_mask for each individual chip
 117 * - add Ultra and MW DMA mode filtering for the HPT37[24] based SATA cards
 118 * - stop resetting HPT370's state machine before each DMA transfer as that has
 119 *   caused more harm than good
 120 *      Sergei Shtylyov, <sshtylyov@ru.mvista.com> or <source@mvista.com>
 121 */
 122
 123#include <linux/types.h>
 124#include <linux/module.h>
 125#include <linux/kernel.h>
 126#include <linux/delay.h>
 127#include <linux/blkdev.h>
 128#include <linux/interrupt.h>
 129#include <linux/pci.h>
 130#include <linux/init.h>
 131#include <linux/ide.h>
 132#include <linux/slab.h>
 133
 134#include <linux/uaccess.h>
 135#include <asm/io.h>
 136
 137#define DRV_NAME "hpt366"
 138
 139/* various tuning parameters */
 140#undef  HPT_RESET_STATE_ENGINE
 141#undef  HPT_DELAY_INTERRUPT
 142
 143static const char *bad_ata100_5[] = {
 144        "IBM-DTLA-307075",
 145        "IBM-DTLA-307060",
 146        "IBM-DTLA-307045",
 147        "IBM-DTLA-307030",
 148        "IBM-DTLA-307020",
 149        "IBM-DTLA-307015",
 150        "IBM-DTLA-305040",
 151        "IBM-DTLA-305030",
 152        "IBM-DTLA-305020",
 153        "IC35L010AVER07-0",
 154        "IC35L020AVER07-0",
 155        "IC35L030AVER07-0",
 156        "IC35L040AVER07-0",
 157        "IC35L060AVER07-0",
 158        "WDC AC310200R",
 159        NULL
 160};
 161
 162static const char *bad_ata66_4[] = {
 163        "IBM-DTLA-307075",
 164        "IBM-DTLA-307060",
 165        "IBM-DTLA-307045",
 166        "IBM-DTLA-307030",
 167        "IBM-DTLA-307020",
 168        "IBM-DTLA-307015",
 169        "IBM-DTLA-305040",
 170        "IBM-DTLA-305030",
 171        "IBM-DTLA-305020",
 172        "IC35L010AVER07-0",
 173        "IC35L020AVER07-0",
 174        "IC35L030AVER07-0",
 175        "IC35L040AVER07-0",
 176        "IC35L060AVER07-0",
 177        "WDC AC310200R",
 178        "MAXTOR STM3320620A",
 179        NULL
 180};
 181
 182static const char *bad_ata66_3[] = {
 183        "WDC AC310200R",
 184        NULL
 185};
 186
 187static const char *bad_ata33[] = {
 188        "Maxtor 92720U8", "Maxtor 92040U6", "Maxtor 91360U4", "Maxtor 91020U3", "Maxtor 90845U3", "Maxtor 90650U2",
 189        "Maxtor 91360D8", "Maxtor 91190D7", "Maxtor 91020D6", "Maxtor 90845D5", "Maxtor 90680D4", "Maxtor 90510D3", "Maxtor 90340D2",
 190        "Maxtor 91152D8", "Maxtor 91008D7", "Maxtor 90845D6", "Maxtor 90840D6", "Maxtor 90720D5", "Maxtor 90648D5", "Maxtor 90576D4",
 191        "Maxtor 90510D4",
 192        "Maxtor 90432D3", "Maxtor 90288D2", "Maxtor 90256D2",
 193        "Maxtor 91000D8", "Maxtor 90910D8", "Maxtor 90875D7", "Maxtor 90840D7", "Maxtor 90750D6", "Maxtor 90625D5", "Maxtor 90500D4",
 194        "Maxtor 91728D8", "Maxtor 91512D7", "Maxtor 91303D6", "Maxtor 91080D5", "Maxtor 90845D4", "Maxtor 90680D4", "Maxtor 90648D3", "Maxtor 90432D2",
 195        NULL
 196};
 197
 198static u8 xfer_speeds[] = {
 199        XFER_UDMA_6,
 200        XFER_UDMA_5,
 201        XFER_UDMA_4,
 202        XFER_UDMA_3,
 203        XFER_UDMA_2,
 204        XFER_UDMA_1,
 205        XFER_UDMA_0,
 206
 207        XFER_MW_DMA_2,
 208        XFER_MW_DMA_1,
 209        XFER_MW_DMA_0,
 210
 211        XFER_PIO_4,
 212        XFER_PIO_3,
 213        XFER_PIO_2,
 214        XFER_PIO_1,
 215        XFER_PIO_0
 216};
 217
 218/* Key for bus clock timings
 219 * 36x   37x
 220 * bits  bits
 221 * 0:3   0:3    data_high_time. Inactive time of DIOW_/DIOR_ for PIO and MW DMA.
 222 *              cycles = value + 1
 223 * 4:7   4:8    data_low_time. Active time of DIOW_/DIOR_ for PIO and MW DMA.
 224 *              cycles = value + 1
 225 * 8:11  9:12   cmd_high_time. Inactive time of DIOW_/DIOR_ during task file
 226 *              register access.
 227 * 12:15 13:17  cmd_low_time. Active time of DIOW_/DIOR_ during task file
 228 *              register access.
 229 * 16:18 18:20  udma_cycle_time. Clock cycles for UDMA xfer.
 230 * -     21     CLK frequency: 0=ATA clock, 1=dual ATA clock.
 231 * 19:21 22:24  pre_high_time. Time to initialize the 1st cycle for PIO and
 232 *              MW DMA xfer.
 233 * 22:24 25:27  cmd_pre_high_time. Time to initialize the 1st PIO cycle for
 234 *              task file register access.
 235 * 28    28     UDMA enable.
 236 * 29    29     DMA  enable.
 237 * 30    30     PIO MST enable. If set, the chip is in bus master mode during
 238 *              PIO xfer.
 239 * 31    31     FIFO enable.
 240 */
 241
 242static u32 forty_base_hpt36x[] = {
 243        /* XFER_UDMA_6 */       0x900fd943,
 244        /* XFER_UDMA_5 */       0x900fd943,
 245        /* XFER_UDMA_4 */       0x900fd943,
 246        /* XFER_UDMA_3 */       0x900ad943,
 247        /* XFER_UDMA_2 */       0x900bd943,
 248        /* XFER_UDMA_1 */       0x9008d943,
 249        /* XFER_UDMA_0 */       0x9008d943,
 250
 251        /* XFER_MW_DMA_2 */     0xa008d943,
 252        /* XFER_MW_DMA_1 */     0xa010d955,
 253        /* XFER_MW_DMA_0 */     0xa010d9fc,
 254
 255        /* XFER_PIO_4 */        0xc008d963,
 256        /* XFER_PIO_3 */        0xc010d974,
 257        /* XFER_PIO_2 */        0xc010d997,
 258        /* XFER_PIO_1 */        0xc010d9c7,
 259        /* XFER_PIO_0 */        0xc018d9d9
 260};
 261
 262static u32 thirty_three_base_hpt36x[] = {
 263        /* XFER_UDMA_6 */       0x90c9a731,
 264        /* XFER_UDMA_5 */       0x90c9a731,
 265        /* XFER_UDMA_4 */       0x90c9a731,
 266        /* XFER_UDMA_3 */       0x90cfa731,
 267        /* XFER_UDMA_2 */       0x90caa731,
 268        /* XFER_UDMA_1 */       0x90cba731,
 269        /* XFER_UDMA_0 */       0x90c8a731,
 270
 271        /* XFER_MW_DMA_2 */     0xa0c8a731,
 272        /* XFER_MW_DMA_1 */     0xa0c8a732,     /* 0xa0c8a733 */
 273        /* XFER_MW_DMA_0 */     0xa0c8a797,
 274
 275        /* XFER_PIO_4 */        0xc0c8a731,
 276        /* XFER_PIO_3 */        0xc0c8a742,
 277        /* XFER_PIO_2 */        0xc0d0a753,
 278        /* XFER_PIO_1 */        0xc0d0a7a3,     /* 0xc0d0a793 */
 279        /* XFER_PIO_0 */        0xc0d0a7aa      /* 0xc0d0a7a7 */
 280};
 281
 282static u32 twenty_five_base_hpt36x[] = {
 283        /* XFER_UDMA_6 */       0x90c98521,
 284        /* XFER_UDMA_5 */       0x90c98521,
 285        /* XFER_UDMA_4 */       0x90c98521,
 286        /* XFER_UDMA_3 */       0x90cf8521,
 287        /* XFER_UDMA_2 */       0x90cf8521,
 288        /* XFER_UDMA_1 */       0x90cb8521,
 289        /* XFER_UDMA_0 */       0x90cb8521,
 290
 291        /* XFER_MW_DMA_2 */     0xa0ca8521,
 292        /* XFER_MW_DMA_1 */     0xa0ca8532,
 293        /* XFER_MW_DMA_0 */     0xa0ca8575,
 294
 295        /* XFER_PIO_4 */        0xc0ca8521,
 296        /* XFER_PIO_3 */        0xc0ca8532,
 297        /* XFER_PIO_2 */        0xc0ca8542,
 298        /* XFER_PIO_1 */        0xc0d08572,
 299        /* XFER_PIO_0 */        0xc0d08585
 300};
 301
 302/*
 303 * The following are the new timing tables with PIO mode data/taskfile transfer
 304 * overclocking fixed...
 305 */
 306
 307/* This table is taken from the HPT370 data manual rev. 1.02 */
 308static u32 thirty_three_base_hpt37x[] = {
 309        /* XFER_UDMA_6 */       0x16455031,     /* 0x16655031 ?? */
 310        /* XFER_UDMA_5 */       0x16455031,
 311        /* XFER_UDMA_4 */       0x16455031,
 312        /* XFER_UDMA_3 */       0x166d5031,
 313        /* XFER_UDMA_2 */       0x16495031,
 314        /* XFER_UDMA_1 */       0x164d5033,
 315        /* XFER_UDMA_0 */       0x16515097,
 316
 317        /* XFER_MW_DMA_2 */     0x26515031,
 318        /* XFER_MW_DMA_1 */     0x26515033,
 319        /* XFER_MW_DMA_0 */     0x26515097,
 320
 321        /* XFER_PIO_4 */        0x06515021,
 322        /* XFER_PIO_3 */        0x06515022,
 323        /* XFER_PIO_2 */        0x06515033,
 324        /* XFER_PIO_1 */        0x06915065,
 325        /* XFER_PIO_0 */        0x06d1508a
 326};
 327
 328static u32 fifty_base_hpt37x[] = {
 329        /* XFER_UDMA_6 */       0x1a861842,
 330        /* XFER_UDMA_5 */       0x1a861842,
 331        /* XFER_UDMA_4 */       0x1aae1842,
 332        /* XFER_UDMA_3 */       0x1a8e1842,
 333        /* XFER_UDMA_2 */       0x1a0e1842,
 334        /* XFER_UDMA_1 */       0x1a161854,
 335        /* XFER_UDMA_0 */       0x1a1a18ea,
 336
 337        /* XFER_MW_DMA_2 */     0x2a821842,
 338        /* XFER_MW_DMA_1 */     0x2a821854,
 339        /* XFER_MW_DMA_0 */     0x2a8218ea,
 340
 341        /* XFER_PIO_4 */        0x0a821842,
 342        /* XFER_PIO_3 */        0x0a821843,
 343        /* XFER_PIO_2 */        0x0a821855,
 344        /* XFER_PIO_1 */        0x0ac218a8,
 345        /* XFER_PIO_0 */        0x0b02190c
 346};
 347
 348static u32 sixty_six_base_hpt37x[] = {
 349        /* XFER_UDMA_6 */       0x1c86fe62,
 350        /* XFER_UDMA_5 */       0x1caefe62,     /* 0x1c8afe62 */
 351        /* XFER_UDMA_4 */       0x1c8afe62,
 352        /* XFER_UDMA_3 */       0x1c8efe62,
 353        /* XFER_UDMA_2 */       0x1c92fe62,
 354        /* XFER_UDMA_1 */       0x1c9afe62,
 355        /* XFER_UDMA_0 */       0x1c82fe62,
 356
 357        /* XFER_MW_DMA_2 */     0x2c82fe62,
 358        /* XFER_MW_DMA_1 */     0x2c82fe66,
 359        /* XFER_MW_DMA_0 */     0x2c82ff2e,
 360
 361        /* XFER_PIO_4 */        0x0c82fe62,
 362        /* XFER_PIO_3 */        0x0c82fe84,
 363        /* XFER_PIO_2 */        0x0c82fea6,
 364        /* XFER_PIO_1 */        0x0d02ff26,
 365        /* XFER_PIO_0 */        0x0d42ff7f
 366};
 367
 368#define HPT371_ALLOW_ATA133_6           1
 369#define HPT302_ALLOW_ATA133_6           1
 370#define HPT372_ALLOW_ATA133_6           1
 371#define HPT370_ALLOW_ATA100_5           0
 372#define HPT366_ALLOW_ATA66_4            1
 373#define HPT366_ALLOW_ATA66_3            1
 374
 375/* Supported ATA clock frequencies */
 376enum ata_clock {
 377        ATA_CLOCK_25MHZ,
 378        ATA_CLOCK_33MHZ,
 379        ATA_CLOCK_40MHZ,
 380        ATA_CLOCK_50MHZ,
 381        ATA_CLOCK_66MHZ,
 382        NUM_ATA_CLOCKS
 383};
 384
 385struct hpt_timings {
 386        u32 pio_mask;
 387        u32 dma_mask;
 388        u32 ultra_mask;
 389        u32 *clock_table[NUM_ATA_CLOCKS];
 390};
 391
 392/*
 393 *      Hold all the HighPoint chip information in one place.
 394 */
 395
 396struct hpt_info {
 397        char *chip_name;        /* Chip name */
 398        u8 chip_type;           /* Chip type */
 399        u8 udma_mask;           /* Allowed UltraDMA modes mask. */
 400        u8 dpll_clk;            /* DPLL clock in MHz */
 401        u8 pci_clk;             /* PCI  clock in MHz */
 402        struct hpt_timings *timings; /* Chipset timing data */
 403        u8 clock;               /* ATA clock selected */
 404};
 405
 406/* Supported HighPoint chips */
 407enum {
 408        HPT36x,
 409        HPT370,
 410        HPT370A,
 411        HPT374,
 412        HPT372,
 413        HPT372A,
 414        HPT302,
 415        HPT371,
 416        HPT372N,
 417        HPT302N,
 418        HPT371N
 419};
 420
 421static struct hpt_timings hpt36x_timings = {
 422        .pio_mask       = 0xc1f8ffff,
 423        .dma_mask       = 0x303800ff,
 424        .ultra_mask     = 0x30070000,
 425        .clock_table    = {
 426                [ATA_CLOCK_25MHZ] = twenty_five_base_hpt36x,
 427                [ATA_CLOCK_33MHZ] = thirty_three_base_hpt36x,
 428                [ATA_CLOCK_40MHZ] = forty_base_hpt36x,
 429                [ATA_CLOCK_50MHZ] = NULL,
 430                [ATA_CLOCK_66MHZ] = NULL
 431        }
 432};
 433
 434static struct hpt_timings hpt37x_timings = {
 435        .pio_mask       = 0xcfc3ffff,
 436        .dma_mask       = 0x31c001ff,
 437        .ultra_mask     = 0x303c0000,
 438        .clock_table    = {
 439                [ATA_CLOCK_25MHZ] = NULL,
 440                [ATA_CLOCK_33MHZ] = thirty_three_base_hpt37x,
 441                [ATA_CLOCK_40MHZ] = NULL,
 442                [ATA_CLOCK_50MHZ] = fifty_base_hpt37x,
 443                [ATA_CLOCK_66MHZ] = sixty_six_base_hpt37x
 444        }
 445};
 446
 447static const struct hpt_info hpt36x = {
 448        .chip_name      = "HPT36x",
 449        .chip_type      = HPT36x,
 450        .udma_mask      = HPT366_ALLOW_ATA66_3 ? (HPT366_ALLOW_ATA66_4 ? ATA_UDMA4 : ATA_UDMA3) : ATA_UDMA2,
 451        .dpll_clk       = 0,    /* no DPLL */
 452        .timings        = &hpt36x_timings
 453};
 454
 455static const struct hpt_info hpt370 = {
 456        .chip_name      = "HPT370",
 457        .chip_type      = HPT370,
 458        .udma_mask      = HPT370_ALLOW_ATA100_5 ? ATA_UDMA5 : ATA_UDMA4,
 459        .dpll_clk       = 48,
 460        .timings        = &hpt37x_timings
 461};
 462
 463static const struct hpt_info hpt370a = {
 464        .chip_name      = "HPT370A",
 465        .chip_type      = HPT370A,
 466        .udma_mask      = HPT370_ALLOW_ATA100_5 ? ATA_UDMA5 : ATA_UDMA4,
 467        .dpll_clk       = 48,
 468        .timings        = &hpt37x_timings
 469};
 470
 471static const struct hpt_info hpt374 = {
 472        .chip_name      = "HPT374",
 473        .chip_type      = HPT374,
 474        .udma_mask      = ATA_UDMA5,
 475        .dpll_clk       = 48,
 476        .timings        = &hpt37x_timings
 477};
 478
 479static const struct hpt_info hpt372 = {
 480        .chip_name      = "HPT372",
 481        .chip_type      = HPT372,
 482        .udma_mask      = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
 483        .dpll_clk       = 55,
 484        .timings        = &hpt37x_timings
 485};
 486
 487static const struct hpt_info hpt372a = {
 488        .chip_name      = "HPT372A",
 489        .chip_type      = HPT372A,
 490        .udma_mask      = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
 491        .dpll_clk       = 66,
 492        .timings        = &hpt37x_timings
 493};
 494
 495static const struct hpt_info hpt302 = {
 496        .chip_name      = "HPT302",
 497        .chip_type      = HPT302,
 498        .udma_mask      = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
 499        .dpll_clk       = 66,
 500        .timings        = &hpt37x_timings
 501};
 502
 503static const struct hpt_info hpt371 = {
 504        .chip_name      = "HPT371",
 505        .chip_type      = HPT371,
 506        .udma_mask      = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
 507        .dpll_clk       = 66,
 508        .timings        = &hpt37x_timings
 509};
 510
 511static const struct hpt_info hpt372n = {
 512        .chip_name      = "HPT372N",
 513        .chip_type      = HPT372N,
 514        .udma_mask      = HPT372_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
 515        .dpll_clk       = 77,
 516        .timings        = &hpt37x_timings
 517};
 518
 519static const struct hpt_info hpt302n = {
 520        .chip_name      = "HPT302N",
 521        .chip_type      = HPT302N,
 522        .udma_mask      = HPT302_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
 523        .dpll_clk       = 77,
 524        .timings        = &hpt37x_timings
 525};
 526
 527static const struct hpt_info hpt371n = {
 528        .chip_name      = "HPT371N",
 529        .chip_type      = HPT371N,
 530        .udma_mask      = HPT371_ALLOW_ATA133_6 ? ATA_UDMA6 : ATA_UDMA5,
 531        .dpll_clk       = 77,
 532        .timings        = &hpt37x_timings
 533};
 534
 535static bool check_in_drive_list(ide_drive_t *drive, const char **list)
 536{
 537        return match_string(list, -1, (char *)&drive->id[ATA_ID_PROD]) >= 0;
 538}
 539
 540static struct hpt_info *hpt3xx_get_info(struct device *dev)
 541{
 542        struct ide_host *host   = dev_get_drvdata(dev);
 543        struct hpt_info *info   = (struct hpt_info *)host->host_priv;
 544
 545        return dev == host->dev[1] ? info + 1 : info;
 546}
 547
 548/*
 549 * The Marvell bridge chips used on the HighPoint SATA cards do not seem
 550 * to support the UltraDMA modes 1, 2, and 3 as well as any MWDMA modes...
 551 */
 552
 553static u8 hpt3xx_udma_filter(ide_drive_t *drive)
 554{
 555        ide_hwif_t *hwif        = drive->hwif;
 556        struct hpt_info *info   = hpt3xx_get_info(hwif->dev);
 557        u8 mask                 = hwif->ultra_mask;
 558
 559        switch (info->chip_type) {
 560        case HPT36x:
 561                if (!HPT366_ALLOW_ATA66_4 ||
 562                    check_in_drive_list(drive, bad_ata66_4))
 563                        mask = ATA_UDMA3;
 564
 565                if (!HPT366_ALLOW_ATA66_3 ||
 566                    check_in_drive_list(drive, bad_ata66_3))
 567                        mask = ATA_UDMA2;
 568                break;
 569        case HPT370:
 570                if (!HPT370_ALLOW_ATA100_5 ||
 571                    check_in_drive_list(drive, bad_ata100_5))
 572                        mask = ATA_UDMA4;
 573                break;
 574        case HPT370A:
 575                if (!HPT370_ALLOW_ATA100_5 ||
 576                    check_in_drive_list(drive, bad_ata100_5))
 577                        return ATA_UDMA4;
 578                /* fall through */
 579        case HPT372 :
 580        case HPT372A:
 581        case HPT372N:
 582        case HPT374 :
 583                if (ata_id_is_sata(drive->id))
 584                        mask &= ~0x0e;
 585                /* fall through */
 586        default:
 587                return mask;
 588        }
 589
 590        return check_in_drive_list(drive, bad_ata33) ? 0x00 : mask;
 591}
 592
 593static u8 hpt3xx_mdma_filter(ide_drive_t *drive)
 594{
 595        ide_hwif_t *hwif        = drive->hwif;
 596        struct hpt_info *info   = hpt3xx_get_info(hwif->dev);
 597
 598        switch (info->chip_type) {
 599        case HPT372 :
 600        case HPT372A:
 601        case HPT372N:
 602        case HPT374 :
 603                if (ata_id_is_sata(drive->id))
 604                        return 0x00;
 605                /* fall through */
 606        default:
 607                return 0x07;
 608        }
 609}
 610
 611static u32 get_speed_setting(u8 speed, struct hpt_info *info)
 612{
 613        int i;
 614
 615        /*
 616         * Lookup the transfer mode table to get the index into
 617         * the timing table.
 618         *
 619         * NOTE: For XFER_PIO_SLOW, PIO mode 0 timings will be used.
 620         */
 621        for (i = 0; i < ARRAY_SIZE(xfer_speeds) - 1; i++)
 622                if (xfer_speeds[i] == speed)
 623                        break;
 624
 625        return info->timings->clock_table[info->clock][i];
 626}
 627
 628static void hpt3xx_set_mode(ide_hwif_t *hwif, ide_drive_t *drive)
 629{
 630        struct pci_dev *dev     = to_pci_dev(hwif->dev);
 631        struct hpt_info *info   = hpt3xx_get_info(hwif->dev);
 632        struct hpt_timings *t   = info->timings;
 633        u8  itr_addr            = 0x40 + (drive->dn * 4);
 634        u32 old_itr             = 0;
 635        const u8 speed          = drive->dma_mode;
 636        u32 new_itr             = get_speed_setting(speed, info);
 637        u32 itr_mask            = speed < XFER_MW_DMA_0 ? t->pio_mask :
 638                                 (speed < XFER_UDMA_0   ? t->dma_mask :
 639                                                          t->ultra_mask);
 640
 641        pci_read_config_dword(dev, itr_addr, &old_itr);
 642        new_itr = (old_itr & ~itr_mask) | (new_itr & itr_mask);
 643        /*
 644         * Disable on-chip PIO FIFO/buffer (and PIO MST mode as well)
 645         * to avoid problems handling I/O errors later
 646         */
 647        new_itr &= ~0xc0000000;
 648
 649        pci_write_config_dword(dev, itr_addr, new_itr);
 650}
 651
 652static void hpt3xx_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive)
 653{
 654        drive->dma_mode = drive->pio_mode;
 655        hpt3xx_set_mode(hwif, drive);
 656}
 657
 658static void hpt3xx_maskproc(ide_drive_t *drive, int mask)
 659{
 660        ide_hwif_t *hwif        = drive->hwif;
 661        struct pci_dev  *dev    = to_pci_dev(hwif->dev);
 662        struct hpt_info *info   = hpt3xx_get_info(hwif->dev);
 663
 664        if ((drive->dev_flags & IDE_DFLAG_NIEN_QUIRK) == 0)
 665                return;
 666
 667        if (info->chip_type >= HPT370) {
 668                u8 scr1 = 0;
 669
 670                pci_read_config_byte(dev, 0x5a, &scr1);
 671                if (((scr1 & 0x10) >> 4) != mask) {
 672                        if (mask)
 673                                scr1 |=  0x10;
 674                        else
 675                                scr1 &= ~0x10;
 676                        pci_write_config_byte(dev, 0x5a, scr1);
 677                }
 678        } else if (mask)
 679                disable_irq(hwif->irq);
 680        else
 681                enable_irq(hwif->irq);
 682}
 683
 684/*
 685 * This is specific to the HPT366 UDMA chipset
 686 * by HighPoint|Triones Technologies, Inc.
 687 */
 688static void hpt366_dma_lost_irq(ide_drive_t *drive)
 689{
 690        struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
 691        u8 mcr1 = 0, mcr3 = 0, scr1 = 0;
 692
 693        pci_read_config_byte(dev, 0x50, &mcr1);
 694        pci_read_config_byte(dev, 0x52, &mcr3);
 695        pci_read_config_byte(dev, 0x5a, &scr1);
 696        printk("%s: (%s)  mcr1=0x%02x, mcr3=0x%02x, scr1=0x%02x\n",
 697                drive->name, __func__, mcr1, mcr3, scr1);
 698        if (scr1 & 0x10)
 699                pci_write_config_byte(dev, 0x5a, scr1 & ~0x10);
 700        ide_dma_lost_irq(drive);
 701}
 702
 703static void hpt370_clear_engine(ide_drive_t *drive)
 704{
 705        ide_hwif_t *hwif = drive->hwif;
 706        struct pci_dev *dev = to_pci_dev(hwif->dev);
 707
 708        pci_write_config_byte(dev, hwif->select_data, 0x37);
 709        udelay(10);
 710}
 711
 712static void hpt370_irq_timeout(ide_drive_t *drive)
 713{
 714        ide_hwif_t *hwif        = drive->hwif;
 715        struct pci_dev *dev     = to_pci_dev(hwif->dev);
 716        u16 bfifo               = 0;
 717        u8  dma_cmd;
 718
 719        pci_read_config_word(dev, hwif->select_data + 2, &bfifo);
 720        printk(KERN_DEBUG "%s: %d bytes in FIFO\n", drive->name, bfifo & 0x1ff);
 721
 722        /* get DMA command mode */
 723        dma_cmd = inb(hwif->dma_base + ATA_DMA_CMD);
 724        /* stop DMA */
 725        outb(dma_cmd & ~ATA_DMA_START, hwif->dma_base + ATA_DMA_CMD);
 726        hpt370_clear_engine(drive);
 727}
 728
 729static void hpt370_dma_start(ide_drive_t *drive)
 730{
 731#ifdef HPT_RESET_STATE_ENGINE
 732        hpt370_clear_engine(drive);
 733#endif
 734        ide_dma_start(drive);
 735}
 736
 737static int hpt370_dma_end(ide_drive_t *drive)
 738{
 739        ide_hwif_t *hwif        = drive->hwif;
 740        u8  dma_stat            = inb(hwif->dma_base + ATA_DMA_STATUS);
 741
 742        if (dma_stat & ATA_DMA_ACTIVE) {
 743                /* wait a little */
 744                udelay(20);
 745                dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
 746                if (dma_stat & ATA_DMA_ACTIVE)
 747                        hpt370_irq_timeout(drive);
 748        }
 749        return ide_dma_end(drive);
 750}
 751
 752/* returns 1 if DMA IRQ issued, 0 otherwise */
 753static int hpt374_dma_test_irq(ide_drive_t *drive)
 754{
 755        ide_hwif_t *hwif        = drive->hwif;
 756        struct pci_dev *dev     = to_pci_dev(hwif->dev);
 757        u16 bfifo               = 0;
 758        u8  dma_stat;
 759
 760        pci_read_config_word(dev, hwif->select_data + 2, &bfifo);
 761        if (bfifo & 0x1FF) {
 762//              printk("%s: %d bytes in FIFO\n", drive->name, bfifo);
 763                return 0;
 764        }
 765
 766        dma_stat = inb(hwif->dma_base + ATA_DMA_STATUS);
 767        /* return 1 if INTR asserted */
 768        if (dma_stat & ATA_DMA_INTR)
 769                return 1;
 770
 771        return 0;
 772}
 773
 774static int hpt374_dma_end(ide_drive_t *drive)
 775{
 776        ide_hwif_t *hwif        = drive->hwif;
 777        struct pci_dev *dev     = to_pci_dev(hwif->dev);
 778        u8 mcr  = 0, mcr_addr   = hwif->select_data;
 779        u8 bwsr = 0, mask       = hwif->channel ? 0x02 : 0x01;
 780
 781        pci_read_config_byte(dev, 0x6a, &bwsr);
 782        pci_read_config_byte(dev, mcr_addr, &mcr);
 783        if (bwsr & mask)
 784                pci_write_config_byte(dev, mcr_addr, mcr | 0x30);
 785        return ide_dma_end(drive);
 786}
 787
 788/**
 789 *      hpt3xxn_set_clock       -       perform clock switching dance
 790 *      @hwif: hwif to switch
 791 *      @mode: clocking mode (0x21 for write, 0x23 otherwise)
 792 *
 793 *      Switch the DPLL clock on the HPT3xxN devices. This is a right mess.
 794 */
 795
 796static void hpt3xxn_set_clock(ide_hwif_t *hwif, u8 mode)
 797{
 798        unsigned long base = hwif->extra_base;
 799        u8 scr2 = inb(base + 0x6b);
 800
 801        if ((scr2 & 0x7f) == mode)
 802                return;
 803
 804        /* Tristate the bus */
 805        outb(0x80, base + 0x63);
 806        outb(0x80, base + 0x67);
 807
 808        /* Switch clock and reset channels */
 809        outb(mode, base + 0x6b);
 810        outb(0xc0, base + 0x69);
 811
 812        /*
 813         * Reset the state machines.
 814         * NOTE: avoid accidentally enabling the disabled channels.
 815         */
 816        outb(inb(base + 0x60) | 0x32, base + 0x60);
 817        outb(inb(base + 0x64) | 0x32, base + 0x64);
 818
 819        /* Complete reset */
 820        outb(0x00, base + 0x69);
 821
 822        /* Reconnect channels to bus */
 823        outb(0x00, base + 0x63);
 824        outb(0x00, base + 0x67);
 825}
 826
 827/**
 828 *      hpt3xxn_rw_disk         -       prepare for I/O
 829 *      @drive: drive for command
 830 *      @rq: block request structure
 831 *
 832 *      This is called when a disk I/O is issued to HPT3xxN.
 833 *      We need it because of the clock switching.
 834 */
 835
 836static void hpt3xxn_rw_disk(ide_drive_t *drive, struct request *rq)
 837{
 838        hpt3xxn_set_clock(drive->hwif, rq_data_dir(rq) ? 0x21 : 0x23);
 839}
 840
 841/**
 842 *      hpt37x_calibrate_dpll   -       calibrate the DPLL
 843 *      @dev: PCI device
 844 *
 845 *      Perform a calibration cycle on the DPLL.
 846 *      Returns 1 if this succeeds
 847 */
 848static int hpt37x_calibrate_dpll(struct pci_dev *dev, u16 f_low, u16 f_high)
 849{
 850        u32 dpll = (f_high << 16) | f_low | 0x100;
 851        u8  scr2;
 852        int i;
 853
 854        pci_write_config_dword(dev, 0x5c, dpll);
 855
 856        /* Wait for oscillator ready */
 857        for(i = 0; i < 0x5000; ++i) {
 858                udelay(50);
 859                pci_read_config_byte(dev, 0x5b, &scr2);
 860                if (scr2 & 0x80)
 861                        break;
 862        }
 863        /* See if it stays ready (we'll just bail out if it's not yet) */
 864        for(i = 0; i < 0x1000; ++i) {
 865                pci_read_config_byte(dev, 0x5b, &scr2);
 866                /* DPLL destabilized? */
 867                if(!(scr2 & 0x80))
 868                        return 0;
 869        }
 870        /* Turn off tuning, we have the DPLL set */
 871        pci_read_config_dword (dev, 0x5c, &dpll);
 872        pci_write_config_dword(dev, 0x5c, (dpll & ~0x100));
 873        return 1;
 874}
 875
 876static void hpt3xx_disable_fast_irq(struct pci_dev *dev, u8 mcr_addr)
 877{
 878        struct ide_host *host   = pci_get_drvdata(dev);
 879        struct hpt_info *info   = host->host_priv + (&dev->dev == host->dev[1]);
 880        u8  chip_type           = info->chip_type;
 881        u8  new_mcr, old_mcr    = 0;
 882
 883        /*
 884         * Disable the "fast interrupt" prediction.  Don't hold off
 885         * on interrupts. (== 0x01 despite what the docs say)
 886         */
 887        pci_read_config_byte(dev, mcr_addr + 1, &old_mcr);
 888
 889        if (chip_type >= HPT374)
 890                new_mcr = old_mcr & ~0x07;
 891        else if (chip_type >= HPT370) {
 892                new_mcr = old_mcr;
 893                new_mcr &= ~0x02;
 894#ifdef HPT_DELAY_INTERRUPT
 895                new_mcr &= ~0x01;
 896#else
 897                new_mcr |=  0x01;
 898#endif
 899        } else                                  /* HPT366 and HPT368  */
 900                new_mcr = old_mcr & ~0x80;
 901
 902        if (new_mcr != old_mcr)
 903                pci_write_config_byte(dev, mcr_addr + 1, new_mcr);
 904}
 905
 906static int init_chipset_hpt366(struct pci_dev *dev)
 907{
 908        unsigned long io_base   = pci_resource_start(dev, 4);
 909        struct hpt_info *info   = hpt3xx_get_info(&dev->dev);
 910        const char *name        = DRV_NAME;
 911        u8 pci_clk,  dpll_clk   = 0;    /* PCI and DPLL clock in MHz */
 912        u8 chip_type;
 913        enum ata_clock  clock;
 914
 915        chip_type = info->chip_type;
 916
 917        pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, (L1_CACHE_BYTES / 4));
 918        pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x78);
 919        pci_write_config_byte(dev, PCI_MIN_GNT, 0x08);
 920        pci_write_config_byte(dev, PCI_MAX_LAT, 0x08);
 921
 922        /*
 923         * First, try to estimate the PCI clock frequency...
 924         */
 925        if (chip_type >= HPT370) {
 926                u8  scr1  = 0;
 927                u16 f_cnt = 0;
 928                u32 temp  = 0;
 929
 930                /* Interrupt force enable. */
 931                pci_read_config_byte(dev, 0x5a, &scr1);
 932                if (scr1 & 0x10)
 933                        pci_write_config_byte(dev, 0x5a, scr1 & ~0x10);
 934
 935                /*
 936                 * HighPoint does this for HPT372A.
 937                 * NOTE: This register is only writeable via I/O space.
 938                 */
 939                if (chip_type == HPT372A)
 940                        outb(0x0e, io_base + 0x9c);
 941
 942                /*
 943                 * Default to PCI clock. Make sure MA15/16 are set to output
 944                 * to prevent drives having problems with 40-pin cables.
 945                 */
 946                pci_write_config_byte(dev, 0x5b, 0x23);
 947
 948                /*
 949                 * We'll have to read f_CNT value in order to determine
 950                 * the PCI clock frequency according to the following ratio:
 951                 *
 952                 * f_CNT = Fpci * 192 / Fdpll
 953                 *
 954                 * First try reading the register in which the HighPoint BIOS
 955                 * saves f_CNT value before  reprogramming the DPLL from its
 956                 * default setting (which differs for the various chips).
 957                 *
 958                 * NOTE: This register is only accessible via I/O space;
 959                 * HPT374 BIOS only saves it for the function 0, so we have to
 960                 * always read it from there -- no need to check the result of
 961                 * pci_get_slot() for the function 0 as the whole device has
 962                 * been already "pinned" (via function 1) in init_setup_hpt374()
 963                 */
 964                if (chip_type == HPT374 && (PCI_FUNC(dev->devfn) & 1)) {
 965                        struct pci_dev  *dev1 = pci_get_slot(dev->bus,
 966                                                             dev->devfn - 1);
 967                        unsigned long io_base = pci_resource_start(dev1, 4);
 968
 969                        temp =  inl(io_base + 0x90);
 970                        pci_dev_put(dev1);
 971                } else
 972                        temp =  inl(io_base + 0x90);
 973
 974                /*
 975                 * In case the signature check fails, we'll have to
 976                 * resort to reading the f_CNT register itself in hopes
 977                 * that nobody has touched the DPLL yet...
 978                 */
 979                if ((temp & 0xFFFFF000) != 0xABCDE000) {
 980                        int i;
 981
 982                        printk(KERN_WARNING "%s %s: no clock data saved by "
 983                                "BIOS\n", name, pci_name(dev));
 984
 985                        /* Calculate the average value of f_CNT. */
 986                        for (temp = i = 0; i < 128; i++) {
 987                                pci_read_config_word(dev, 0x78, &f_cnt);
 988                                temp += f_cnt & 0x1ff;
 989                                mdelay(1);
 990                        }
 991                        f_cnt = temp / 128;
 992                } else
 993                        f_cnt = temp & 0x1ff;
 994
 995                dpll_clk = info->dpll_clk;
 996                pci_clk  = (f_cnt * dpll_clk) / 192;
 997
 998                /* Clamp PCI clock to bands. */
 999                if (pci_clk < 40)
1000                        pci_clk = 33;
1001                else if(pci_clk < 45)
1002                        pci_clk = 40;
1003                else if(pci_clk < 55)
1004                        pci_clk = 50;
1005                else
1006                        pci_clk = 66;
1007
1008                printk(KERN_INFO "%s %s: DPLL base: %d MHz, f_CNT: %d, "
1009                        "assuming %d MHz PCI\n", name, pci_name(dev),
1010                        dpll_clk, f_cnt, pci_clk);
1011        } else {
1012                u32 itr1 = 0;
1013
1014                pci_read_config_dword(dev, 0x40, &itr1);
1015
1016                /* Detect PCI clock by looking at cmd_high_time. */
1017                switch ((itr1 >> 8) & 0x0f) {
1018                        case 0x09:
1019                                pci_clk = 40;
1020                                break;
1021                        case 0x05:
1022                                pci_clk = 25;
1023                                break;
1024                        case 0x07:
1025                        default:
1026                                pci_clk = 33;
1027                                break;
1028                }
1029        }
1030
1031        /* Let's assume we'll use PCI clock for the ATA clock... */
1032        switch (pci_clk) {
1033                case 25:
1034                        clock = ATA_CLOCK_25MHZ;
1035                        break;
1036                case 33:
1037                default:
1038                        clock = ATA_CLOCK_33MHZ;
1039                        break;
1040                case 40:
1041                        clock = ATA_CLOCK_40MHZ;
1042                        break;
1043                case 50:
1044                        clock = ATA_CLOCK_50MHZ;
1045                        break;
1046                case 66:
1047                        clock = ATA_CLOCK_66MHZ;
1048                        break;
1049        }
1050
1051        /*
1052         * Only try the DPLL if we don't have a table for the PCI clock that
1053         * we are running at for HPT370/A, always use it  for anything newer...
1054         *
1055         * NOTE: Using the internal DPLL results in slow reads on 33 MHz PCI.
1056         * We also  don't like using  the DPLL because this causes glitches
1057         * on PRST-/SRST- when the state engine gets reset...
1058         */
1059        if (chip_type >= HPT374 || info->timings->clock_table[clock] == NULL) {
1060                u16 f_low, delta = pci_clk < 50 ? 2 : 4;
1061                int adjust;
1062
1063                 /*
1064                  * Select 66 MHz DPLL clock only if UltraATA/133 mode is
1065                  * supported/enabled, use 50 MHz DPLL clock otherwise...
1066                  */
1067                if (info->udma_mask == ATA_UDMA6) {
1068                        dpll_clk = 66;
1069                        clock = ATA_CLOCK_66MHZ;
1070                } else if (dpll_clk) {  /* HPT36x chips don't have DPLL */
1071                        dpll_clk = 50;
1072                        clock = ATA_CLOCK_50MHZ;
1073                }
1074
1075                if (info->timings->clock_table[clock] == NULL) {
1076                        printk(KERN_ERR "%s %s: unknown bus timing!\n",
1077                                name, pci_name(dev));
1078                        return -EIO;
1079                }
1080
1081                /* Select the DPLL clock. */
1082                pci_write_config_byte(dev, 0x5b, 0x21);
1083
1084                /*
1085                 * Adjust the DPLL based upon PCI clock, enable it,
1086                 * and wait for stabilization...
1087                 */
1088                f_low = (pci_clk * 48) / dpll_clk;
1089
1090                for (adjust = 0; adjust < 8; adjust++) {
1091                        if(hpt37x_calibrate_dpll(dev, f_low, f_low + delta))
1092                                break;
1093
1094                        /*
1095                         * See if it'll settle at a fractionally different clock
1096                         */
1097                        if (adjust & 1)
1098                                f_low -= adjust >> 1;
1099                        else
1100                                f_low += adjust >> 1;
1101                }
1102                if (adjust == 8) {
1103                        printk(KERN_ERR "%s %s: DPLL did not stabilize!\n",
1104                                name, pci_name(dev));
1105                        return -EIO;
1106                }
1107
1108                printk(KERN_INFO "%s %s: using %d MHz DPLL clock\n",
1109                        name, pci_name(dev), dpll_clk);
1110        } else {
1111                /* Mark the fact that we're not using the DPLL. */
1112                dpll_clk = 0;
1113
1114                printk(KERN_INFO "%s %s: using %d MHz PCI clock\n",
1115                        name, pci_name(dev), pci_clk);
1116        }
1117
1118        /* Store the clock frequencies. */
1119        info->dpll_clk  = dpll_clk;
1120        info->pci_clk   = pci_clk;
1121        info->clock     = clock;
1122
1123        if (chip_type >= HPT370) {
1124                u8  mcr1, mcr4;
1125
1126                /*
1127                 * Reset the state engines.
1128                 * NOTE: Avoid accidentally enabling the disabled channels.
1129                 */
1130                pci_read_config_byte (dev, 0x50, &mcr1);
1131                pci_read_config_byte (dev, 0x54, &mcr4);
1132                pci_write_config_byte(dev, 0x50, (mcr1 | 0x32));
1133                pci_write_config_byte(dev, 0x54, (mcr4 | 0x32));
1134                udelay(100);
1135        }
1136
1137        /*
1138         * On  HPT371N, if ATA clock is 66 MHz we must set bit 2 in
1139         * the MISC. register to stretch the UltraDMA Tss timing.
1140         * NOTE: This register is only writeable via I/O space.
1141         */
1142        if (chip_type == HPT371N && clock == ATA_CLOCK_66MHZ)
1143                outb(inb(io_base + 0x9c) | 0x04, io_base + 0x9c);
1144
1145        hpt3xx_disable_fast_irq(dev, 0x50);
1146        hpt3xx_disable_fast_irq(dev, 0x54);
1147
1148        return 0;
1149}
1150
1151static u8 hpt3xx_cable_detect(ide_hwif_t *hwif)
1152{
1153        struct pci_dev  *dev    = to_pci_dev(hwif->dev);
1154        struct hpt_info *info   = hpt3xx_get_info(hwif->dev);
1155        u8 chip_type            = info->chip_type;
1156        u8 scr1 = 0, ata66      = hwif->channel ? 0x01 : 0x02;
1157
1158        /*
1159         * The HPT37x uses the CBLID pins as outputs for MA15/MA16
1160         * address lines to access an external EEPROM.  To read valid
1161         * cable detect state the pins must be enabled as inputs.
1162         */
1163        if (chip_type == HPT374 && (PCI_FUNC(dev->devfn) & 1)) {
1164                /*
1165                 * HPT374 PCI function 1
1166                 * - set bit 15 of reg 0x52 to enable TCBLID as input
1167                 * - set bit 15 of reg 0x56 to enable FCBLID as input
1168                 */
1169                u8  mcr_addr = hwif->select_data + 2;
1170                u16 mcr;
1171
1172                pci_read_config_word(dev, mcr_addr, &mcr);
1173                pci_write_config_word(dev, mcr_addr, mcr | 0x8000);
1174                /* Debounce, then read cable ID register */
1175                udelay(10);
1176                pci_read_config_byte(dev, 0x5a, &scr1);
1177                pci_write_config_word(dev, mcr_addr, mcr);
1178        } else if (chip_type >= HPT370) {
1179                /*
1180                 * HPT370/372 and 374 pcifn 0
1181                 * - clear bit 0 of reg 0x5b to enable P/SCBLID as inputs
1182                 */
1183                u8 scr2 = 0;
1184
1185                pci_read_config_byte(dev, 0x5b, &scr2);
1186                pci_write_config_byte(dev, 0x5b, scr2 & ~1);
1187                /* Debounce, then read cable ID register */
1188                udelay(10);
1189                pci_read_config_byte(dev, 0x5a, &scr1);
1190                pci_write_config_byte(dev, 0x5b, scr2);
1191        } else
1192                pci_read_config_byte(dev, 0x5a, &scr1);
1193
1194        return (scr1 & ata66) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
1195}
1196
1197static void init_hwif_hpt366(ide_hwif_t *hwif)
1198{
1199        struct hpt_info *info   = hpt3xx_get_info(hwif->dev);
1200        u8  chip_type           = info->chip_type;
1201
1202        /* Cache the channel's MISC. control registers' offset */
1203        hwif->select_data       = hwif->channel ? 0x54 : 0x50;
1204
1205        /*
1206         * HPT3xxN chips have some complications:
1207         *
1208         * - on 33 MHz PCI we must clock switch
1209         * - on 66 MHz PCI we must NOT use the PCI clock
1210         */
1211        if (chip_type >= HPT372N && info->dpll_clk && info->pci_clk < 66) {
1212                /*
1213                 * Clock is shared between the channels,
1214                 * so we'll have to serialize them... :-(
1215                 */
1216                hwif->host->host_flags |= IDE_HFLAG_SERIALIZE;
1217                hwif->rw_disk = &hpt3xxn_rw_disk;
1218        }
1219}
1220
1221static int init_dma_hpt366(ide_hwif_t *hwif,
1222                                     const struct ide_port_info *d)
1223{
1224        struct pci_dev *dev = to_pci_dev(hwif->dev);
1225        unsigned long flags, base = ide_pci_dma_base(hwif, d);
1226        u8 dma_old, dma_new, masterdma = 0, slavedma = 0;
1227
1228        if (base == 0)
1229                return -1;
1230
1231        hwif->dma_base = base;
1232
1233        if (ide_pci_check_simplex(hwif, d) < 0)
1234                return -1;
1235
1236        if (ide_pci_set_master(dev, d->name) < 0)
1237                return -1;
1238
1239        dma_old = inb(base + 2);
1240
1241        local_irq_save(flags);
1242
1243        dma_new = dma_old;
1244        pci_read_config_byte(dev, hwif->channel ? 0x4b : 0x43, &masterdma);
1245        pci_read_config_byte(dev, hwif->channel ? 0x4f : 0x47,  &slavedma);
1246
1247        if (masterdma & 0x30)   dma_new |= 0x20;
1248        if ( slavedma & 0x30)   dma_new |= 0x40;
1249        if (dma_new != dma_old)
1250                outb(dma_new, base + 2);
1251
1252        local_irq_restore(flags);
1253
1254        printk(KERN_INFO "    %s: BM-DMA at 0x%04lx-0x%04lx\n",
1255                         hwif->name, base, base + 7);
1256
1257        hwif->extra_base = base + (hwif->channel ? 8 : 16);
1258
1259        if (ide_allocate_dma_engine(hwif))
1260                return -1;
1261
1262        return 0;
1263}
1264
1265static void hpt374_init(struct pci_dev *dev, struct pci_dev *dev2)
1266{
1267        if (dev2->irq != dev->irq) {
1268                /* FIXME: we need a core pci_set_interrupt() */
1269                dev2->irq = dev->irq;
1270                printk(KERN_INFO DRV_NAME " %s: PCI config space interrupt "
1271                        "fixed\n", pci_name(dev2));
1272        }
1273}
1274
1275static void hpt371_init(struct pci_dev *dev)
1276{
1277        u8 mcr1 = 0;
1278
1279        /*
1280         * HPT371 chips physically have only one channel, the secondary one,
1281         * but the primary channel registers do exist!  Go figure...
1282         * So,  we manually disable the non-existing channel here
1283         * (if the BIOS hasn't done this already).
1284         */
1285        pci_read_config_byte(dev, 0x50, &mcr1);
1286        if (mcr1 & 0x04)
1287                pci_write_config_byte(dev, 0x50, mcr1 & ~0x04);
1288}
1289
1290static int hpt36x_init(struct pci_dev *dev, struct pci_dev *dev2)
1291{
1292        u8 mcr1 = 0, pin1 = 0, pin2 = 0;
1293
1294        /*
1295         * Now we'll have to force both channels enabled if
1296         * at least one of them has been enabled by BIOS...
1297         */
1298        pci_read_config_byte(dev, 0x50, &mcr1);
1299        if (mcr1 & 0x30)
1300                pci_write_config_byte(dev, 0x50, mcr1 | 0x30);
1301
1302        pci_read_config_byte(dev,  PCI_INTERRUPT_PIN, &pin1);
1303        pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2);
1304
1305        if (pin1 != pin2 && dev->irq == dev2->irq) {
1306                printk(KERN_INFO DRV_NAME " %s: onboard version of chipset, "
1307                        "pin1=%d pin2=%d\n", pci_name(dev), pin1, pin2);
1308                return 1;
1309        }
1310
1311        return 0;
1312}
1313
1314#define IDE_HFLAGS_HPT3XX \
1315        (IDE_HFLAG_NO_ATAPI_DMA | \
1316         IDE_HFLAG_OFF_BOARD)
1317
1318static const struct ide_port_ops hpt3xx_port_ops = {
1319        .set_pio_mode           = hpt3xx_set_pio_mode,
1320        .set_dma_mode           = hpt3xx_set_mode,
1321        .maskproc               = hpt3xx_maskproc,
1322        .mdma_filter            = hpt3xx_mdma_filter,
1323        .udma_filter            = hpt3xx_udma_filter,
1324        .cable_detect           = hpt3xx_cable_detect,
1325};
1326
1327static const struct ide_dma_ops hpt37x_dma_ops = {
1328        .dma_host_set           = ide_dma_host_set,
1329        .dma_setup              = ide_dma_setup,
1330        .dma_start              = ide_dma_start,
1331        .dma_end                = hpt374_dma_end,
1332        .dma_test_irq           = hpt374_dma_test_irq,
1333        .dma_lost_irq           = ide_dma_lost_irq,
1334        .dma_timer_expiry       = ide_dma_sff_timer_expiry,
1335        .dma_sff_read_status    = ide_dma_sff_read_status,
1336};
1337
1338static const struct ide_dma_ops hpt370_dma_ops = {
1339        .dma_host_set           = ide_dma_host_set,
1340        .dma_setup              = ide_dma_setup,
1341        .dma_start              = hpt370_dma_start,
1342        .dma_end                = hpt370_dma_end,
1343        .dma_test_irq           = ide_dma_test_irq,
1344        .dma_lost_irq           = ide_dma_lost_irq,
1345        .dma_timer_expiry       = ide_dma_sff_timer_expiry,
1346        .dma_clear              = hpt370_irq_timeout,
1347        .dma_sff_read_status    = ide_dma_sff_read_status,
1348};
1349
1350static const struct ide_dma_ops hpt36x_dma_ops = {
1351        .dma_host_set           = ide_dma_host_set,
1352        .dma_setup              = ide_dma_setup,
1353        .dma_start              = ide_dma_start,
1354        .dma_end                = ide_dma_end,
1355        .dma_test_irq           = ide_dma_test_irq,
1356        .dma_lost_irq           = hpt366_dma_lost_irq,
1357        .dma_timer_expiry       = ide_dma_sff_timer_expiry,
1358        .dma_sff_read_status    = ide_dma_sff_read_status,
1359};
1360
1361static const struct ide_port_info hpt366_chipsets[] = {
1362        {       /* 0: HPT36x */
1363                .name           = DRV_NAME,
1364                .init_chipset   = init_chipset_hpt366,
1365                .init_hwif      = init_hwif_hpt366,
1366                .init_dma       = init_dma_hpt366,
1367                /*
1368                 * HPT36x chips have one channel per function and have
1369                 * both channel enable bits located differently and visible
1370                 * to both functions -- really stupid design decision... :-(
1371                 * Bit 4 is for the primary channel, bit 5 for the secondary.
1372                 */
1373                .enablebits     = {{0x50,0x10,0x10}, {0x54,0x04,0x04}},
1374                .port_ops       = &hpt3xx_port_ops,
1375                .dma_ops        = &hpt36x_dma_ops,
1376                .host_flags     = IDE_HFLAGS_HPT3XX | IDE_HFLAG_SINGLE,
1377                .pio_mask       = ATA_PIO4,
1378                .mwdma_mask     = ATA_MWDMA2,
1379        },
1380        {       /* 1: HPT3xx */
1381                .name           = DRV_NAME,
1382                .init_chipset   = init_chipset_hpt366,
1383                .init_hwif      = init_hwif_hpt366,
1384                .init_dma       = init_dma_hpt366,
1385                .enablebits     = {{0x50,0x04,0x04}, {0x54,0x04,0x04}},
1386                .port_ops       = &hpt3xx_port_ops,
1387                .dma_ops        = &hpt37x_dma_ops,
1388                .host_flags     = IDE_HFLAGS_HPT3XX,
1389                .pio_mask       = ATA_PIO4,
1390                .mwdma_mask     = ATA_MWDMA2,
1391        }
1392};
1393
1394/**
1395 *      hpt366_init_one -       called when an HPT366 is found
1396 *      @dev: the hpt366 device
1397 *      @id: the matching pci id
1398 *
1399 *      Called when the PCI registration layer (or the IDE initialization)
1400 *      finds a device matching our IDE device tables.
1401 */
1402static int hpt366_init_one(struct pci_dev *dev, const struct pci_device_id *id)
1403{
1404        const struct hpt_info *info = NULL;
1405        struct hpt_info *dyn_info;
1406        struct pci_dev *dev2 = NULL;
1407        struct ide_port_info d;
1408        u8 idx = id->driver_data;
1409        u8 rev = dev->revision;
1410        int ret;
1411
1412        if ((idx == 0 || idx == 4) && (PCI_FUNC(dev->devfn) & 1))
1413                return -ENODEV;
1414
1415        switch (idx) {
1416        case 0:
1417                if (rev < 3)
1418                        info = &hpt36x;
1419                else {
1420                        switch (min_t(u8, rev, 6)) {
1421                        case 3: info = &hpt370;  break;
1422                        case 4: info = &hpt370a; break;
1423                        case 5: info = &hpt372;  break;
1424                        case 6: info = &hpt372n; break;
1425                        }
1426                        idx++;
1427                }
1428                break;
1429        case 1:
1430                info = (rev > 1) ? &hpt372n : &hpt372a;
1431                break;
1432        case 2:
1433                info = (rev > 1) ? &hpt302n : &hpt302;
1434                break;
1435        case 3:
1436                hpt371_init(dev);
1437                info = (rev > 1) ? &hpt371n : &hpt371;
1438                break;
1439        case 4:
1440                info = &hpt374;
1441                break;
1442        case 5:
1443                info = &hpt372n;
1444                break;
1445        }
1446
1447        printk(KERN_INFO DRV_NAME ": %s chipset detected\n", info->chip_name);
1448
1449        d = hpt366_chipsets[min_t(u8, idx, 1)];
1450
1451        d.udma_mask = info->udma_mask;
1452
1453        /* fixup ->dma_ops for HPT370/HPT370A */
1454        if (info == &hpt370 || info == &hpt370a)
1455                d.dma_ops = &hpt370_dma_ops;
1456
1457        if (info == &hpt36x || info == &hpt374)
1458                dev2 = pci_get_slot(dev->bus, dev->devfn + 1);
1459
1460        dyn_info = kcalloc(dev2 ? 2 : 1, sizeof(*dyn_info), GFP_KERNEL);
1461        if (dyn_info == NULL) {
1462                printk(KERN_ERR "%s %s: out of memory!\n",
1463                        d.name, pci_name(dev));
1464                pci_dev_put(dev2);
1465                return -ENOMEM;
1466        }
1467
1468        /*
1469         * Copy everything from a static "template" structure
1470         * to just allocated per-chip hpt_info structure.
1471         */
1472        memcpy(dyn_info, info, sizeof(*dyn_info));
1473
1474        if (dev2) {
1475                memcpy(dyn_info + 1, info, sizeof(*dyn_info));
1476
1477                if (info == &hpt374)
1478                        hpt374_init(dev, dev2);
1479                else {
1480                        if (hpt36x_init(dev, dev2))
1481                                d.host_flags &= ~IDE_HFLAG_NON_BOOTABLE;
1482                }
1483
1484                ret = ide_pci_init_two(dev, dev2, &d, dyn_info);
1485                if (ret < 0) {
1486                        pci_dev_put(dev2);
1487                        kfree(dyn_info);
1488                }
1489                return ret;
1490        }
1491
1492        ret = ide_pci_init_one(dev, &d, dyn_info);
1493        if (ret < 0)
1494                kfree(dyn_info);
1495
1496        return ret;
1497}
1498
1499static void hpt366_remove(struct pci_dev *dev)
1500{
1501        struct ide_host *host = pci_get_drvdata(dev);
1502        struct ide_info *info = host->host_priv;
1503        struct pci_dev *dev2 = host->dev[1] ? to_pci_dev(host->dev[1]) : NULL;
1504
1505        ide_pci_remove(dev);
1506        pci_dev_put(dev2);
1507        kfree(info);
1508}
1509
1510static const struct pci_device_id hpt366_pci_tbl[] = {
1511        { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT366),  0 },
1512        { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372),  1 },
1513        { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT302),  2 },
1514        { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT371),  3 },
1515        { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT374),  4 },
1516        { PCI_VDEVICE(TTI, PCI_DEVICE_ID_TTI_HPT372N), 5 },
1517        { 0, },
1518};
1519MODULE_DEVICE_TABLE(pci, hpt366_pci_tbl);
1520
1521static struct pci_driver hpt366_pci_driver = {
1522        .name           = "HPT366_IDE",
1523        .id_table       = hpt366_pci_tbl,
1524        .probe          = hpt366_init_one,
1525        .remove         = hpt366_remove,
1526        .suspend        = ide_pci_suspend,
1527        .resume         = ide_pci_resume,
1528};
1529
1530static int __init hpt366_ide_init(void)
1531{
1532        return ide_pci_register_driver(&hpt366_pci_driver);
1533}
1534
1535static void __exit hpt366_ide_exit(void)
1536{
1537        pci_unregister_driver(&hpt366_pci_driver);
1538}
1539
1540module_init(hpt366_ide_init);
1541module_exit(hpt366_ide_exit);
1542
1543MODULE_AUTHOR("Andre Hedrick");
1544MODULE_DESCRIPTION("PCI driver module for Highpoint HPT366 IDE");
1545MODULE_LICENSE("GPL");
1546