linux/drivers/ata/sata_nv.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 *  sata_nv.c - NVIDIA nForce SATA
   4 *
   5 *  Copyright 2004 NVIDIA Corp.  All rights reserved.
   6 *  Copyright 2004 Andrew Chew
   7 *
   8 *  libata documentation is available via 'make {ps|pdf}docs',
   9 *  as Documentation/driver-api/libata.rst
  10 *
  11 *  No hardware documentation available outside of NVIDIA.
  12 *  This driver programs the NVIDIA SATA controller in a similar
  13 *  fashion as with other PCI IDE BMDMA controllers, with a few
  14 *  NV-specific details such as register offsets, SATA phy location,
  15 *  hotplug info, etc.
  16 *
  17 *  CK804/MCP04 controllers support an alternate programming interface
  18 *  similar to the ADMA specification (with some modifications).
  19 *  This allows the use of NCQ. Non-DMA-mapped ATA commands are still
  20 *  sent through the legacy interface.
  21 */
  22
  23#include <linux/kernel.h>
  24#include <linux/module.h>
  25#include <linux/gfp.h>
  26#include <linux/pci.h>
  27#include <linux/blkdev.h>
  28#include <linux/delay.h>
  29#include <linux/interrupt.h>
  30#include <linux/device.h>
  31#include <scsi/scsi_host.h>
  32#include <scsi/scsi_device.h>
  33#include <linux/libata.h>
  34
  35#define DRV_NAME                        "sata_nv"
  36#define DRV_VERSION                     "3.5"
  37
  38#define NV_ADMA_DMA_BOUNDARY            0xffffffffUL
  39
  40enum {
  41        NV_MMIO_BAR                     = 5,
  42
  43        NV_PORTS                        = 2,
  44        NV_PIO_MASK                     = ATA_PIO4,
  45        NV_MWDMA_MASK                   = ATA_MWDMA2,
  46        NV_UDMA_MASK                    = ATA_UDMA6,
  47        NV_PORT0_SCR_REG_OFFSET         = 0x00,
  48        NV_PORT1_SCR_REG_OFFSET         = 0x40,
  49
  50        /* INT_STATUS/ENABLE */
  51        NV_INT_STATUS                   = 0x10,
  52        NV_INT_ENABLE                   = 0x11,
  53        NV_INT_STATUS_CK804             = 0x440,
  54        NV_INT_ENABLE_CK804             = 0x441,
  55
  56        /* INT_STATUS/ENABLE bits */
  57        NV_INT_DEV                      = 0x01,
  58        NV_INT_PM                       = 0x02,
  59        NV_INT_ADDED                    = 0x04,
  60        NV_INT_REMOVED                  = 0x08,
  61
  62        NV_INT_PORT_SHIFT               = 4,    /* each port occupies 4 bits */
  63
  64        NV_INT_ALL                      = 0x0f,
  65        NV_INT_MASK                     = NV_INT_DEV |
  66                                          NV_INT_ADDED | NV_INT_REMOVED,
  67
  68        /* INT_CONFIG */
  69        NV_INT_CONFIG                   = 0x12,
  70        NV_INT_CONFIG_METHD             = 0x01, // 0 = INT, 1 = SMI
  71
  72        // For PCI config register 20
  73        NV_MCP_SATA_CFG_20              = 0x50,
  74        NV_MCP_SATA_CFG_20_SATA_SPACE_EN = 0x04,
  75        NV_MCP_SATA_CFG_20_PORT0_EN     = (1 << 17),
  76        NV_MCP_SATA_CFG_20_PORT1_EN     = (1 << 16),
  77        NV_MCP_SATA_CFG_20_PORT0_PWB_EN = (1 << 14),
  78        NV_MCP_SATA_CFG_20_PORT1_PWB_EN = (1 << 12),
  79
  80        NV_ADMA_MAX_CPBS                = 32,
  81        NV_ADMA_CPB_SZ                  = 128,
  82        NV_ADMA_APRD_SZ                 = 16,
  83        NV_ADMA_SGTBL_LEN               = (1024 - NV_ADMA_CPB_SZ) /
  84                                           NV_ADMA_APRD_SZ,
  85        NV_ADMA_SGTBL_TOTAL_LEN         = NV_ADMA_SGTBL_LEN + 5,
  86        NV_ADMA_SGTBL_SZ                = NV_ADMA_SGTBL_LEN * NV_ADMA_APRD_SZ,
  87        NV_ADMA_PORT_PRIV_DMA_SZ        = NV_ADMA_MAX_CPBS *
  88                                           (NV_ADMA_CPB_SZ + NV_ADMA_SGTBL_SZ),
  89
  90        /* BAR5 offset to ADMA general registers */
  91        NV_ADMA_GEN                     = 0x400,
  92        NV_ADMA_GEN_CTL                 = 0x00,
  93        NV_ADMA_NOTIFIER_CLEAR          = 0x30,
  94
  95        /* BAR5 offset to ADMA ports */
  96        NV_ADMA_PORT                    = 0x480,
  97
  98        /* size of ADMA port register space  */
  99        NV_ADMA_PORT_SIZE               = 0x100,
 100
 101        /* ADMA port registers */
 102        NV_ADMA_CTL                     = 0x40,
 103        NV_ADMA_CPB_COUNT               = 0x42,
 104        NV_ADMA_NEXT_CPB_IDX            = 0x43,
 105        NV_ADMA_STAT                    = 0x44,
 106        NV_ADMA_CPB_BASE_LOW            = 0x48,
 107        NV_ADMA_CPB_BASE_HIGH           = 0x4C,
 108        NV_ADMA_APPEND                  = 0x50,
 109        NV_ADMA_NOTIFIER                = 0x68,
 110        NV_ADMA_NOTIFIER_ERROR          = 0x6C,
 111
 112        /* NV_ADMA_CTL register bits */
 113        NV_ADMA_CTL_HOTPLUG_IEN         = (1 << 0),
 114        NV_ADMA_CTL_CHANNEL_RESET       = (1 << 5),
 115        NV_ADMA_CTL_GO                  = (1 << 7),
 116        NV_ADMA_CTL_AIEN                = (1 << 8),
 117        NV_ADMA_CTL_READ_NON_COHERENT   = (1 << 11),
 118        NV_ADMA_CTL_WRITE_NON_COHERENT  = (1 << 12),
 119
 120        /* CPB response flag bits */
 121        NV_CPB_RESP_DONE                = (1 << 0),
 122        NV_CPB_RESP_ATA_ERR             = (1 << 3),
 123        NV_CPB_RESP_CMD_ERR             = (1 << 4),
 124        NV_CPB_RESP_CPB_ERR             = (1 << 7),
 125
 126        /* CPB control flag bits */
 127        NV_CPB_CTL_CPB_VALID            = (1 << 0),
 128        NV_CPB_CTL_QUEUE                = (1 << 1),
 129        NV_CPB_CTL_APRD_VALID           = (1 << 2),
 130        NV_CPB_CTL_IEN                  = (1 << 3),
 131        NV_CPB_CTL_FPDMA                = (1 << 4),
 132
 133        /* APRD flags */
 134        NV_APRD_WRITE                   = (1 << 1),
 135        NV_APRD_END                     = (1 << 2),
 136        NV_APRD_CONT                    = (1 << 3),
 137
 138        /* NV_ADMA_STAT flags */
 139        NV_ADMA_STAT_TIMEOUT            = (1 << 0),
 140        NV_ADMA_STAT_HOTUNPLUG          = (1 << 1),
 141        NV_ADMA_STAT_HOTPLUG            = (1 << 2),
 142        NV_ADMA_STAT_CPBERR             = (1 << 4),
 143        NV_ADMA_STAT_SERROR             = (1 << 5),
 144        NV_ADMA_STAT_CMD_COMPLETE       = (1 << 6),
 145        NV_ADMA_STAT_IDLE               = (1 << 8),
 146        NV_ADMA_STAT_LEGACY             = (1 << 9),
 147        NV_ADMA_STAT_STOPPED            = (1 << 10),
 148        NV_ADMA_STAT_DONE               = (1 << 12),
 149        NV_ADMA_STAT_ERR                = NV_ADMA_STAT_CPBERR |
 150                                          NV_ADMA_STAT_TIMEOUT,
 151
 152        /* port flags */
 153        NV_ADMA_PORT_REGISTER_MODE      = (1 << 0),
 154        NV_ADMA_ATAPI_SETUP_COMPLETE    = (1 << 1),
 155
 156        /* MCP55 reg offset */
 157        NV_CTL_MCP55                    = 0x400,
 158        NV_INT_STATUS_MCP55             = 0x440,
 159        NV_INT_ENABLE_MCP55             = 0x444,
 160        NV_NCQ_REG_MCP55                = 0x448,
 161
 162        /* MCP55 */
 163        NV_INT_ALL_MCP55                = 0xffff,
 164        NV_INT_PORT_SHIFT_MCP55         = 16,   /* each port occupies 16 bits */
 165        NV_INT_MASK_MCP55               = NV_INT_ALL_MCP55 & 0xfffd,
 166
 167        /* SWNCQ ENABLE BITS*/
 168        NV_CTL_PRI_SWNCQ                = 0x02,
 169        NV_CTL_SEC_SWNCQ                = 0x04,
 170
 171        /* SW NCQ status bits*/
 172        NV_SWNCQ_IRQ_DEV                = (1 << 0),
 173        NV_SWNCQ_IRQ_PM                 = (1 << 1),
 174        NV_SWNCQ_IRQ_ADDED              = (1 << 2),
 175        NV_SWNCQ_IRQ_REMOVED            = (1 << 3),
 176
 177        NV_SWNCQ_IRQ_BACKOUT            = (1 << 4),
 178        NV_SWNCQ_IRQ_SDBFIS             = (1 << 5),
 179        NV_SWNCQ_IRQ_DHREGFIS           = (1 << 6),
 180        NV_SWNCQ_IRQ_DMASETUP           = (1 << 7),
 181
 182        NV_SWNCQ_IRQ_HOTPLUG            = NV_SWNCQ_IRQ_ADDED |
 183                                          NV_SWNCQ_IRQ_REMOVED,
 184
 185};
 186
 187/* ADMA Physical Region Descriptor - one SG segment */
 188struct nv_adma_prd {
 189        __le64                  addr;
 190        __le32                  len;
 191        u8                      flags;
 192        u8                      packet_len;
 193        __le16                  reserved;
 194};
 195
 196enum nv_adma_regbits {
 197        CMDEND  = (1 << 15),            /* end of command list */
 198        WNB     = (1 << 14),            /* wait-not-BSY */
 199        IGN     = (1 << 13),            /* ignore this entry */
 200        CS1n    = (1 << (4 + 8)),       /* std. PATA signals follow... */
 201        DA2     = (1 << (2 + 8)),
 202        DA1     = (1 << (1 + 8)),
 203        DA0     = (1 << (0 + 8)),
 204};
 205
 206/* ADMA Command Parameter Block
 207   The first 5 SG segments are stored inside the Command Parameter Block itself.
 208   If there are more than 5 segments the remainder are stored in a separate
 209   memory area indicated by next_aprd. */
 210struct nv_adma_cpb {
 211        u8                      resp_flags;    /* 0 */
 212        u8                      reserved1;     /* 1 */
 213        u8                      ctl_flags;     /* 2 */
 214        /* len is length of taskfile in 64 bit words */
 215        u8                      len;            /* 3  */
 216        u8                      tag;           /* 4 */
 217        u8                      next_cpb_idx;  /* 5 */
 218        __le16                  reserved2;     /* 6-7 */
 219        __le16                  tf[12];        /* 8-31 */
 220        struct nv_adma_prd      aprd[5];       /* 32-111 */
 221        __le64                  next_aprd;     /* 112-119 */
 222        __le64                  reserved3;     /* 120-127 */
 223};
 224
 225
 226struct nv_adma_port_priv {
 227        struct nv_adma_cpb      *cpb;
 228        dma_addr_t              cpb_dma;
 229        struct nv_adma_prd      *aprd;
 230        dma_addr_t              aprd_dma;
 231        void __iomem            *ctl_block;
 232        void __iomem            *gen_block;
 233        void __iomem            *notifier_clear_block;
 234        u64                     adma_dma_mask;
 235        u8                      flags;
 236        int                     last_issue_ncq;
 237};
 238
 239struct nv_host_priv {
 240        unsigned long           type;
 241};
 242
 243struct defer_queue {
 244        u32             defer_bits;
 245        unsigned int    head;
 246        unsigned int    tail;
 247        unsigned int    tag[ATA_MAX_QUEUE];
 248};
 249
 250enum ncq_saw_flag_list {
 251        ncq_saw_d2h     = (1U << 0),
 252        ncq_saw_dmas    = (1U << 1),
 253        ncq_saw_sdb     = (1U << 2),
 254        ncq_saw_backout = (1U << 3),
 255};
 256
 257struct nv_swncq_port_priv {
 258        struct ata_bmdma_prd *prd;       /* our SG list */
 259        dma_addr_t      prd_dma; /* and its DMA mapping */
 260        void __iomem    *sactive_block;
 261        void __iomem    *irq_block;
 262        void __iomem    *tag_block;
 263        u32             qc_active;
 264
 265        unsigned int    last_issue_tag;
 266
 267        /* fifo circular queue to store deferral command */
 268        struct defer_queue defer_queue;
 269
 270        /* for NCQ interrupt analysis */
 271        u32             dhfis_bits;
 272        u32             dmafis_bits;
 273        u32             sdbfis_bits;
 274
 275        unsigned int    ncq_flags;
 276};
 277
 278
 279#define NV_ADMA_CHECK_INTR(GCTL, PORT) ((GCTL) & (1 << (19 + (12 * (PORT)))))
 280
 281static int nv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
 282#ifdef CONFIG_PM_SLEEP
 283static int nv_pci_device_resume(struct pci_dev *pdev);
 284#endif
 285static void nv_ck804_host_stop(struct ata_host *host);
 286static irqreturn_t nv_generic_interrupt(int irq, void *dev_instance);
 287static irqreturn_t nv_nf2_interrupt(int irq, void *dev_instance);
 288static irqreturn_t nv_ck804_interrupt(int irq, void *dev_instance);
 289static int nv_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val);
 290static int nv_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val);
 291
 292static int nv_hardreset(struct ata_link *link, unsigned int *class,
 293                        unsigned long deadline);
 294static void nv_nf2_freeze(struct ata_port *ap);
 295static void nv_nf2_thaw(struct ata_port *ap);
 296static void nv_ck804_freeze(struct ata_port *ap);
 297static void nv_ck804_thaw(struct ata_port *ap);
 298static int nv_adma_slave_config(struct scsi_device *sdev);
 299static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc);
 300static void nv_adma_qc_prep(struct ata_queued_cmd *qc);
 301static unsigned int nv_adma_qc_issue(struct ata_queued_cmd *qc);
 302static irqreturn_t nv_adma_interrupt(int irq, void *dev_instance);
 303static void nv_adma_irq_clear(struct ata_port *ap);
 304static int nv_adma_port_start(struct ata_port *ap);
 305static void nv_adma_port_stop(struct ata_port *ap);
 306#ifdef CONFIG_PM
 307static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg);
 308static int nv_adma_port_resume(struct ata_port *ap);
 309#endif
 310static void nv_adma_freeze(struct ata_port *ap);
 311static void nv_adma_thaw(struct ata_port *ap);
 312static void nv_adma_error_handler(struct ata_port *ap);
 313static void nv_adma_host_stop(struct ata_host *host);
 314static void nv_adma_post_internal_cmd(struct ata_queued_cmd *qc);
 315static void nv_adma_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
 316
 317static void nv_mcp55_thaw(struct ata_port *ap);
 318static void nv_mcp55_freeze(struct ata_port *ap);
 319static void nv_swncq_error_handler(struct ata_port *ap);
 320static int nv_swncq_slave_config(struct scsi_device *sdev);
 321static int nv_swncq_port_start(struct ata_port *ap);
 322static void nv_swncq_qc_prep(struct ata_queued_cmd *qc);
 323static void nv_swncq_fill_sg(struct ata_queued_cmd *qc);
 324static unsigned int nv_swncq_qc_issue(struct ata_queued_cmd *qc);
 325static void nv_swncq_irq_clear(struct ata_port *ap, u16 fis);
 326static irqreturn_t nv_swncq_interrupt(int irq, void *dev_instance);
 327#ifdef CONFIG_PM
 328static int nv_swncq_port_suspend(struct ata_port *ap, pm_message_t mesg);
 329static int nv_swncq_port_resume(struct ata_port *ap);
 330#endif
 331
 332enum nv_host_type
 333{
 334        GENERIC,
 335        NFORCE2,
 336        NFORCE3 = NFORCE2,      /* NF2 == NF3 as far as sata_nv is concerned */
 337        CK804,
 338        ADMA,
 339        MCP5x,
 340        SWNCQ,
 341};
 342
 343static const struct pci_device_id nv_pci_tbl[] = {
 344        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE2S_SATA), NFORCE2 },
 345        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA), NFORCE3 },
 346        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE3S_SATA2), NFORCE3 },
 347        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA), CK804 },
 348        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_CK804_SATA2), CK804 },
 349        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA), CK804 },
 350        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2), CK804 },
 351        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA), MCP5x },
 352        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2), MCP5x },
 353        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA), MCP5x },
 354        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2), MCP5x },
 355        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA), GENERIC },
 356        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA2), GENERIC },
 357        { PCI_VDEVICE(NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP61_SATA3), GENERIC },
 358
 359        { } /* terminate list */
 360};
 361
 362static struct pci_driver nv_pci_driver = {
 363        .name                   = DRV_NAME,
 364        .id_table               = nv_pci_tbl,
 365        .probe                  = nv_init_one,
 366#ifdef CONFIG_PM_SLEEP
 367        .suspend                = ata_pci_device_suspend,
 368        .resume                 = nv_pci_device_resume,
 369#endif
 370        .remove                 = ata_pci_remove_one,
 371};
 372
 373static struct scsi_host_template nv_sht = {
 374        ATA_BMDMA_SHT(DRV_NAME),
 375};
 376
 377static struct scsi_host_template nv_adma_sht = {
 378        ATA_NCQ_SHT(DRV_NAME),
 379        .can_queue              = NV_ADMA_MAX_CPBS,
 380        .sg_tablesize           = NV_ADMA_SGTBL_TOTAL_LEN,
 381        .dma_boundary           = NV_ADMA_DMA_BOUNDARY,
 382        .slave_configure        = nv_adma_slave_config,
 383};
 384
 385static struct scsi_host_template nv_swncq_sht = {
 386        ATA_NCQ_SHT(DRV_NAME),
 387        .can_queue              = ATA_MAX_QUEUE - 1,
 388        .sg_tablesize           = LIBATA_MAX_PRD,
 389        .dma_boundary           = ATA_DMA_BOUNDARY,
 390        .slave_configure        = nv_swncq_slave_config,
 391};
 392
 393/*
 394 * NV SATA controllers have various different problems with hardreset
 395 * protocol depending on the specific controller and device.
 396 *
 397 * GENERIC:
 398 *
 399 *  bko11195 reports that link doesn't come online after hardreset on
 400 *  generic nv's and there have been several other similar reports on
 401 *  linux-ide.
 402 *
 403 *  bko12351#c23 reports that warmplug on MCP61 doesn't work with
 404 *  softreset.
 405 *
 406 * NF2/3:
 407 *
 408 *  bko3352 reports nf2/3 controllers can't determine device signature
 409 *  reliably after hardreset.  The following thread reports detection
 410 *  failure on cold boot with the standard debouncing timing.
 411 *
 412 *  http://thread.gmane.org/gmane.linux.ide/34098
 413 *
 414 *  bko12176 reports that hardreset fails to bring up the link during
 415 *  boot on nf2.
 416 *
 417 * CK804:
 418 *
 419 *  For initial probing after boot and hot plugging, hardreset mostly
 420 *  works fine on CK804 but curiously, reprobing on the initial port
 421 *  by rescanning or rmmod/insmod fails to acquire the initial D2H Reg
 422 *  FIS in somewhat undeterministic way.
 423 *
 424 * SWNCQ:
 425 *
 426 *  bko12351 reports that when SWNCQ is enabled, for hotplug to work,
 427 *  hardreset should be used and hardreset can't report proper
 428 *  signature, which suggests that mcp5x is closer to nf2 as long as
 429 *  reset quirkiness is concerned.
 430 *
 431 *  bko12703 reports that boot probing fails for intel SSD with
 432 *  hardreset.  Link fails to come online.  Softreset works fine.
 433 *
 434 * The failures are varied but the following patterns seem true for
 435 * all flavors.
 436 *
 437 * - Softreset during boot always works.
 438 *
 439 * - Hardreset during boot sometimes fails to bring up the link on
 440 *   certain comibnations and device signature acquisition is
 441 *   unreliable.
 442 *
 443 * - Hardreset is often necessary after hotplug.
 444 *
 445 * So, preferring softreset for boot probing and error handling (as
 446 * hardreset might bring down the link) but using hardreset for
 447 * post-boot probing should work around the above issues in most
 448 * cases.  Define nv_hardreset() which only kicks in for post-boot
 449 * probing and use it for all variants.
 450 */
 451static struct ata_port_operations nv_generic_ops = {
 452        .inherits               = &ata_bmdma_port_ops,
 453        .lost_interrupt         = ATA_OP_NULL,
 454        .scr_read               = nv_scr_read,
 455        .scr_write              = nv_scr_write,
 456        .hardreset              = nv_hardreset,
 457};
 458
 459static struct ata_port_operations nv_nf2_ops = {
 460        .inherits               = &nv_generic_ops,
 461        .freeze                 = nv_nf2_freeze,
 462        .thaw                   = nv_nf2_thaw,
 463};
 464
 465static struct ata_port_operations nv_ck804_ops = {
 466        .inherits               = &nv_generic_ops,
 467        .freeze                 = nv_ck804_freeze,
 468        .thaw                   = nv_ck804_thaw,
 469        .host_stop              = nv_ck804_host_stop,
 470};
 471
 472static struct ata_port_operations nv_adma_ops = {
 473        .inherits               = &nv_ck804_ops,
 474
 475        .check_atapi_dma        = nv_adma_check_atapi_dma,
 476        .sff_tf_read            = nv_adma_tf_read,
 477        .qc_defer               = ata_std_qc_defer,
 478        .qc_prep                = nv_adma_qc_prep,
 479        .qc_issue               = nv_adma_qc_issue,
 480        .sff_irq_clear          = nv_adma_irq_clear,
 481
 482        .freeze                 = nv_adma_freeze,
 483        .thaw                   = nv_adma_thaw,
 484        .error_handler          = nv_adma_error_handler,
 485        .post_internal_cmd      = nv_adma_post_internal_cmd,
 486
 487        .port_start             = nv_adma_port_start,
 488        .port_stop              = nv_adma_port_stop,
 489#ifdef CONFIG_PM
 490        .port_suspend           = nv_adma_port_suspend,
 491        .port_resume            = nv_adma_port_resume,
 492#endif
 493        .host_stop              = nv_adma_host_stop,
 494};
 495
 496static struct ata_port_operations nv_swncq_ops = {
 497        .inherits               = &nv_generic_ops,
 498
 499        .qc_defer               = ata_std_qc_defer,
 500        .qc_prep                = nv_swncq_qc_prep,
 501        .qc_issue               = nv_swncq_qc_issue,
 502
 503        .freeze                 = nv_mcp55_freeze,
 504        .thaw                   = nv_mcp55_thaw,
 505        .error_handler          = nv_swncq_error_handler,
 506
 507#ifdef CONFIG_PM
 508        .port_suspend           = nv_swncq_port_suspend,
 509        .port_resume            = nv_swncq_port_resume,
 510#endif
 511        .port_start             = nv_swncq_port_start,
 512};
 513
 514struct nv_pi_priv {
 515        irq_handler_t                   irq_handler;
 516        struct scsi_host_template       *sht;
 517};
 518
 519#define NV_PI_PRIV(_irq_handler, _sht) \
 520        &(struct nv_pi_priv){ .irq_handler = _irq_handler, .sht = _sht }
 521
 522static const struct ata_port_info nv_port_info[] = {
 523        /* generic */
 524        {
 525                .flags          = ATA_FLAG_SATA,
 526                .pio_mask       = NV_PIO_MASK,
 527                .mwdma_mask     = NV_MWDMA_MASK,
 528                .udma_mask      = NV_UDMA_MASK,
 529                .port_ops       = &nv_generic_ops,
 530                .private_data   = NV_PI_PRIV(nv_generic_interrupt, &nv_sht),
 531        },
 532        /* nforce2/3 */
 533        {
 534                .flags          = ATA_FLAG_SATA,
 535                .pio_mask       = NV_PIO_MASK,
 536                .mwdma_mask     = NV_MWDMA_MASK,
 537                .udma_mask      = NV_UDMA_MASK,
 538                .port_ops       = &nv_nf2_ops,
 539                .private_data   = NV_PI_PRIV(nv_nf2_interrupt, &nv_sht),
 540        },
 541        /* ck804 */
 542        {
 543                .flags          = ATA_FLAG_SATA,
 544                .pio_mask       = NV_PIO_MASK,
 545                .mwdma_mask     = NV_MWDMA_MASK,
 546                .udma_mask      = NV_UDMA_MASK,
 547                .port_ops       = &nv_ck804_ops,
 548                .private_data   = NV_PI_PRIV(nv_ck804_interrupt, &nv_sht),
 549        },
 550        /* ADMA */
 551        {
 552                .flags          = ATA_FLAG_SATA | ATA_FLAG_NCQ,
 553                .pio_mask       = NV_PIO_MASK,
 554                .mwdma_mask     = NV_MWDMA_MASK,
 555                .udma_mask      = NV_UDMA_MASK,
 556                .port_ops       = &nv_adma_ops,
 557                .private_data   = NV_PI_PRIV(nv_adma_interrupt, &nv_adma_sht),
 558        },
 559        /* MCP5x */
 560        {
 561                .flags          = ATA_FLAG_SATA,
 562                .pio_mask       = NV_PIO_MASK,
 563                .mwdma_mask     = NV_MWDMA_MASK,
 564                .udma_mask      = NV_UDMA_MASK,
 565                .port_ops       = &nv_generic_ops,
 566                .private_data   = NV_PI_PRIV(nv_generic_interrupt, &nv_sht),
 567        },
 568        /* SWNCQ */
 569        {
 570                .flags          = ATA_FLAG_SATA | ATA_FLAG_NCQ,
 571                .pio_mask       = NV_PIO_MASK,
 572                .mwdma_mask     = NV_MWDMA_MASK,
 573                .udma_mask      = NV_UDMA_MASK,
 574                .port_ops       = &nv_swncq_ops,
 575                .private_data   = NV_PI_PRIV(nv_swncq_interrupt, &nv_swncq_sht),
 576        },
 577};
 578
 579MODULE_AUTHOR("NVIDIA");
 580MODULE_DESCRIPTION("low-level driver for NVIDIA nForce SATA controller");
 581MODULE_LICENSE("GPL");
 582MODULE_DEVICE_TABLE(pci, nv_pci_tbl);
 583MODULE_VERSION(DRV_VERSION);
 584
 585static bool adma_enabled;
 586static bool swncq_enabled = true;
 587static bool msi_enabled;
 588
 589static void nv_adma_register_mode(struct ata_port *ap)
 590{
 591        struct nv_adma_port_priv *pp = ap->private_data;
 592        void __iomem *mmio = pp->ctl_block;
 593        u16 tmp, status;
 594        int count = 0;
 595
 596        if (pp->flags & NV_ADMA_PORT_REGISTER_MODE)
 597                return;
 598
 599        status = readw(mmio + NV_ADMA_STAT);
 600        while (!(status & NV_ADMA_STAT_IDLE) && count < 20) {
 601                ndelay(50);
 602                status = readw(mmio + NV_ADMA_STAT);
 603                count++;
 604        }
 605        if (count == 20)
 606                ata_port_warn(ap, "timeout waiting for ADMA IDLE, stat=0x%hx\n",
 607                              status);
 608
 609        tmp = readw(mmio + NV_ADMA_CTL);
 610        writew(tmp & ~NV_ADMA_CTL_GO, mmio + NV_ADMA_CTL);
 611
 612        count = 0;
 613        status = readw(mmio + NV_ADMA_STAT);
 614        while (!(status & NV_ADMA_STAT_LEGACY) && count < 20) {
 615                ndelay(50);
 616                status = readw(mmio + NV_ADMA_STAT);
 617                count++;
 618        }
 619        if (count == 20)
 620                ata_port_warn(ap,
 621                              "timeout waiting for ADMA LEGACY, stat=0x%hx\n",
 622                              status);
 623
 624        pp->flags |= NV_ADMA_PORT_REGISTER_MODE;
 625}
 626
 627static void nv_adma_mode(struct ata_port *ap)
 628{
 629        struct nv_adma_port_priv *pp = ap->private_data;
 630        void __iomem *mmio = pp->ctl_block;
 631        u16 tmp, status;
 632        int count = 0;
 633
 634        if (!(pp->flags & NV_ADMA_PORT_REGISTER_MODE))
 635                return;
 636
 637        WARN_ON(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE);
 638
 639        tmp = readw(mmio + NV_ADMA_CTL);
 640        writew(tmp | NV_ADMA_CTL_GO, mmio + NV_ADMA_CTL);
 641
 642        status = readw(mmio + NV_ADMA_STAT);
 643        while (((status & NV_ADMA_STAT_LEGACY) ||
 644              !(status & NV_ADMA_STAT_IDLE)) && count < 20) {
 645                ndelay(50);
 646                status = readw(mmio + NV_ADMA_STAT);
 647                count++;
 648        }
 649        if (count == 20)
 650                ata_port_warn(ap,
 651                        "timeout waiting for ADMA LEGACY clear and IDLE, stat=0x%hx\n",
 652                        status);
 653
 654        pp->flags &= ~NV_ADMA_PORT_REGISTER_MODE;
 655}
 656
 657static int nv_adma_slave_config(struct scsi_device *sdev)
 658{
 659        struct ata_port *ap = ata_shost_to_port(sdev->host);
 660        struct nv_adma_port_priv *pp = ap->private_data;
 661        struct nv_adma_port_priv *port0, *port1;
 662        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
 663        unsigned long segment_boundary, flags;
 664        unsigned short sg_tablesize;
 665        int rc;
 666        int adma_enable;
 667        u32 current_reg, new_reg, config_mask;
 668
 669        rc = ata_scsi_slave_config(sdev);
 670
 671        if (sdev->id >= ATA_MAX_DEVICES || sdev->channel || sdev->lun)
 672                /* Not a proper libata device, ignore */
 673                return rc;
 674
 675        spin_lock_irqsave(ap->lock, flags);
 676
 677        if (ap->link.device[sdev->id].class == ATA_DEV_ATAPI) {
 678                /*
 679                 * NVIDIA reports that ADMA mode does not support ATAPI commands.
 680                 * Therefore ATAPI commands are sent through the legacy interface.
 681                 * However, the legacy interface only supports 32-bit DMA.
 682                 * Restrict DMA parameters as required by the legacy interface
 683                 * when an ATAPI device is connected.
 684                 */
 685                segment_boundary = ATA_DMA_BOUNDARY;
 686                /* Subtract 1 since an extra entry may be needed for padding, see
 687                   libata-scsi.c */
 688                sg_tablesize = LIBATA_MAX_PRD - 1;
 689
 690                /* Since the legacy DMA engine is in use, we need to disable ADMA
 691                   on the port. */
 692                adma_enable = 0;
 693                nv_adma_register_mode(ap);
 694        } else {
 695                segment_boundary = NV_ADMA_DMA_BOUNDARY;
 696                sg_tablesize = NV_ADMA_SGTBL_TOTAL_LEN;
 697                adma_enable = 1;
 698        }
 699
 700        pci_read_config_dword(pdev, NV_MCP_SATA_CFG_20, &current_reg);
 701
 702        if (ap->port_no == 1)
 703                config_mask = NV_MCP_SATA_CFG_20_PORT1_EN |
 704                              NV_MCP_SATA_CFG_20_PORT1_PWB_EN;
 705        else
 706                config_mask = NV_MCP_SATA_CFG_20_PORT0_EN |
 707                              NV_MCP_SATA_CFG_20_PORT0_PWB_EN;
 708
 709        if (adma_enable) {
 710                new_reg = current_reg | config_mask;
 711                pp->flags &= ~NV_ADMA_ATAPI_SETUP_COMPLETE;
 712        } else {
 713                new_reg = current_reg & ~config_mask;
 714                pp->flags |= NV_ADMA_ATAPI_SETUP_COMPLETE;
 715        }
 716
 717        if (current_reg != new_reg)
 718                pci_write_config_dword(pdev, NV_MCP_SATA_CFG_20, new_reg);
 719
 720        port0 = ap->host->ports[0]->private_data;
 721        port1 = ap->host->ports[1]->private_data;
 722        if ((port0->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) ||
 723            (port1->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)) {
 724                /*
 725                 * We have to set the DMA mask to 32-bit if either port is in
 726                 * ATAPI mode, since they are on the same PCI device which is
 727                 * used for DMA mapping.  If either SCSI device is not allocated
 728                 * yet, it's OK since that port will discover its correct
 729                 * setting when it does get allocated.
 730                 */
 731                rc = dma_set_mask(&pdev->dev, ATA_DMA_MASK);
 732        } else {
 733                rc = dma_set_mask(&pdev->dev, pp->adma_dma_mask);
 734        }
 735
 736        blk_queue_segment_boundary(sdev->request_queue, segment_boundary);
 737        blk_queue_max_segments(sdev->request_queue, sg_tablesize);
 738        ata_port_info(ap,
 739                      "DMA mask 0x%llX, segment boundary 0x%lX, hw segs %hu\n",
 740                      (unsigned long long)*ap->host->dev->dma_mask,
 741                      segment_boundary, sg_tablesize);
 742
 743        spin_unlock_irqrestore(ap->lock, flags);
 744
 745        return rc;
 746}
 747
 748static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc)
 749{
 750        struct nv_adma_port_priv *pp = qc->ap->private_data;
 751        return !(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE);
 752}
 753
 754static void nv_adma_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
 755{
 756        /* Other than when internal or pass-through commands are executed,
 757           the only time this function will be called in ADMA mode will be
 758           if a command fails. In the failure case we don't care about going
 759           into register mode with ADMA commands pending, as the commands will
 760           all shortly be aborted anyway. We assume that NCQ commands are not
 761           issued via passthrough, which is the only way that switching into
 762           ADMA mode could abort outstanding commands. */
 763        nv_adma_register_mode(ap);
 764
 765        ata_sff_tf_read(ap, tf);
 766}
 767
 768static unsigned int nv_adma_tf_to_cpb(struct ata_taskfile *tf, __le16 *cpb)
 769{
 770        unsigned int idx = 0;
 771
 772        if (tf->flags & ATA_TFLAG_ISADDR) {
 773                if (tf->flags & ATA_TFLAG_LBA48) {
 774                        cpb[idx++] = cpu_to_le16((ATA_REG_ERR   << 8) | tf->hob_feature | WNB);
 775                        cpb[idx++] = cpu_to_le16((ATA_REG_NSECT << 8) | tf->hob_nsect);
 776                        cpb[idx++] = cpu_to_le16((ATA_REG_LBAL  << 8) | tf->hob_lbal);
 777                        cpb[idx++] = cpu_to_le16((ATA_REG_LBAM  << 8) | tf->hob_lbam);
 778                        cpb[idx++] = cpu_to_le16((ATA_REG_LBAH  << 8) | tf->hob_lbah);
 779                        cpb[idx++] = cpu_to_le16((ATA_REG_ERR    << 8) | tf->feature);
 780                } else
 781                        cpb[idx++] = cpu_to_le16((ATA_REG_ERR    << 8) | tf->feature | WNB);
 782
 783                cpb[idx++] = cpu_to_le16((ATA_REG_NSECT  << 8) | tf->nsect);
 784                cpb[idx++] = cpu_to_le16((ATA_REG_LBAL   << 8) | tf->lbal);
 785                cpb[idx++] = cpu_to_le16((ATA_REG_LBAM   << 8) | tf->lbam);
 786                cpb[idx++] = cpu_to_le16((ATA_REG_LBAH   << 8) | tf->lbah);
 787        }
 788
 789        if (tf->flags & ATA_TFLAG_DEVICE)
 790                cpb[idx++] = cpu_to_le16((ATA_REG_DEVICE << 8) | tf->device);
 791
 792        cpb[idx++] = cpu_to_le16((ATA_REG_CMD    << 8) | tf->command | CMDEND);
 793
 794        while (idx < 12)
 795                cpb[idx++] = cpu_to_le16(IGN);
 796
 797        return idx;
 798}
 799
 800static int nv_adma_check_cpb(struct ata_port *ap, int cpb_num, int force_err)
 801{
 802        struct nv_adma_port_priv *pp = ap->private_data;
 803        u8 flags = pp->cpb[cpb_num].resp_flags;
 804
 805        VPRINTK("CPB %d, flags=0x%x\n", cpb_num, flags);
 806
 807        if (unlikely((force_err ||
 808                     flags & (NV_CPB_RESP_ATA_ERR |
 809                              NV_CPB_RESP_CMD_ERR |
 810                              NV_CPB_RESP_CPB_ERR)))) {
 811                struct ata_eh_info *ehi = &ap->link.eh_info;
 812                int freeze = 0;
 813
 814                ata_ehi_clear_desc(ehi);
 815                __ata_ehi_push_desc(ehi, "CPB resp_flags 0x%x: ", flags);
 816                if (flags & NV_CPB_RESP_ATA_ERR) {
 817                        ata_ehi_push_desc(ehi, "ATA error");
 818                        ehi->err_mask |= AC_ERR_DEV;
 819                } else if (flags & NV_CPB_RESP_CMD_ERR) {
 820                        ata_ehi_push_desc(ehi, "CMD error");
 821                        ehi->err_mask |= AC_ERR_DEV;
 822                } else if (flags & NV_CPB_RESP_CPB_ERR) {
 823                        ata_ehi_push_desc(ehi, "CPB error");
 824                        ehi->err_mask |= AC_ERR_SYSTEM;
 825                        freeze = 1;
 826                } else {
 827                        /* notifier error, but no error in CPB flags? */
 828                        ata_ehi_push_desc(ehi, "unknown");
 829                        ehi->err_mask |= AC_ERR_OTHER;
 830                        freeze = 1;
 831                }
 832                /* Kill all commands. EH will determine what actually failed. */
 833                if (freeze)
 834                        ata_port_freeze(ap);
 835                else
 836                        ata_port_abort(ap);
 837                return -1;
 838        }
 839
 840        if (likely(flags & NV_CPB_RESP_DONE))
 841                return 1;
 842        return 0;
 843}
 844
 845static int nv_host_intr(struct ata_port *ap, u8 irq_stat)
 846{
 847        struct ata_queued_cmd *qc = ata_qc_from_tag(ap, ap->link.active_tag);
 848
 849        /* freeze if hotplugged */
 850        if (unlikely(irq_stat & (NV_INT_ADDED | NV_INT_REMOVED))) {
 851                ata_port_freeze(ap);
 852                return 1;
 853        }
 854
 855        /* bail out if not our interrupt */
 856        if (!(irq_stat & NV_INT_DEV))
 857                return 0;
 858
 859        /* DEV interrupt w/ no active qc? */
 860        if (unlikely(!qc || (qc->tf.flags & ATA_TFLAG_POLLING))) {
 861                ata_sff_check_status(ap);
 862                return 1;
 863        }
 864
 865        /* handle interrupt */
 866        return ata_bmdma_port_intr(ap, qc);
 867}
 868
 869static irqreturn_t nv_adma_interrupt(int irq, void *dev_instance)
 870{
 871        struct ata_host *host = dev_instance;
 872        int i, handled = 0;
 873        u32 notifier_clears[2];
 874
 875        spin_lock(&host->lock);
 876
 877        for (i = 0; i < host->n_ports; i++) {
 878                struct ata_port *ap = host->ports[i];
 879                struct nv_adma_port_priv *pp = ap->private_data;
 880                void __iomem *mmio = pp->ctl_block;
 881                u16 status;
 882                u32 gen_ctl;
 883                u32 notifier, notifier_error;
 884
 885                notifier_clears[i] = 0;
 886
 887                /* if ADMA is disabled, use standard ata interrupt handler */
 888                if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) {
 889                        u8 irq_stat = readb(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804)
 890                                >> (NV_INT_PORT_SHIFT * i);
 891                        handled += nv_host_intr(ap, irq_stat);
 892                        continue;
 893                }
 894
 895                /* if in ATA register mode, check for standard interrupts */
 896                if (pp->flags & NV_ADMA_PORT_REGISTER_MODE) {
 897                        u8 irq_stat = readb(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804)
 898                                >> (NV_INT_PORT_SHIFT * i);
 899                        if (ata_tag_valid(ap->link.active_tag))
 900                                /** NV_INT_DEV indication seems unreliable
 901                                    at times at least in ADMA mode. Force it
 902                                    on always when a command is active, to
 903                                    prevent losing interrupts. */
 904                                irq_stat |= NV_INT_DEV;
 905                        handled += nv_host_intr(ap, irq_stat);
 906                }
 907
 908                notifier = readl(mmio + NV_ADMA_NOTIFIER);
 909                notifier_error = readl(mmio + NV_ADMA_NOTIFIER_ERROR);
 910                notifier_clears[i] = notifier | notifier_error;
 911
 912                gen_ctl = readl(pp->gen_block + NV_ADMA_GEN_CTL);
 913
 914                if (!NV_ADMA_CHECK_INTR(gen_ctl, ap->port_no) && !notifier &&
 915                    !notifier_error)
 916                        /* Nothing to do */
 917                        continue;
 918
 919                status = readw(mmio + NV_ADMA_STAT);
 920
 921                /*
 922                 * Clear status. Ensure the controller sees the
 923                 * clearing before we start looking at any of the CPB
 924                 * statuses, so that any CPB completions after this
 925                 * point in the handler will raise another interrupt.
 926                 */
 927                writew(status, mmio + NV_ADMA_STAT);
 928                readw(mmio + NV_ADMA_STAT); /* flush posted write */
 929                rmb();
 930
 931                handled++; /* irq handled if we got here */
 932
 933                /* freeze if hotplugged or controller error */
 934                if (unlikely(status & (NV_ADMA_STAT_HOTPLUG |
 935                                       NV_ADMA_STAT_HOTUNPLUG |
 936                                       NV_ADMA_STAT_TIMEOUT |
 937                                       NV_ADMA_STAT_SERROR))) {
 938                        struct ata_eh_info *ehi = &ap->link.eh_info;
 939
 940                        ata_ehi_clear_desc(ehi);
 941                        __ata_ehi_push_desc(ehi, "ADMA status 0x%08x: ", status);
 942                        if (status & NV_ADMA_STAT_TIMEOUT) {
 943                                ehi->err_mask |= AC_ERR_SYSTEM;
 944                                ata_ehi_push_desc(ehi, "timeout");
 945                        } else if (status & NV_ADMA_STAT_HOTPLUG) {
 946                                ata_ehi_hotplugged(ehi);
 947                                ata_ehi_push_desc(ehi, "hotplug");
 948                        } else if (status & NV_ADMA_STAT_HOTUNPLUG) {
 949                                ata_ehi_hotplugged(ehi);
 950                                ata_ehi_push_desc(ehi, "hot unplug");
 951                        } else if (status & NV_ADMA_STAT_SERROR) {
 952                                /* let EH analyze SError and figure out cause */
 953                                ata_ehi_push_desc(ehi, "SError");
 954                        } else
 955                                ata_ehi_push_desc(ehi, "unknown");
 956                        ata_port_freeze(ap);
 957                        continue;
 958                }
 959
 960                if (status & (NV_ADMA_STAT_DONE |
 961                              NV_ADMA_STAT_CPBERR |
 962                              NV_ADMA_STAT_CMD_COMPLETE)) {
 963                        u32 check_commands = notifier_clears[i];
 964                        u32 done_mask = 0;
 965                        int pos, rc;
 966
 967                        if (status & NV_ADMA_STAT_CPBERR) {
 968                                /* check all active commands */
 969                                if (ata_tag_valid(ap->link.active_tag))
 970                                        check_commands = 1 <<
 971                                                ap->link.active_tag;
 972                                else
 973                                        check_commands = ap->link.sactive;
 974                        }
 975
 976                        /* check CPBs for completed commands */
 977                        while ((pos = ffs(check_commands))) {
 978                                pos--;
 979                                rc = nv_adma_check_cpb(ap, pos,
 980                                                notifier_error & (1 << pos));
 981                                if (rc > 0)
 982                                        done_mask |= 1 << pos;
 983                                else if (unlikely(rc < 0))
 984                                        check_commands = 0;
 985                                check_commands &= ~(1 << pos);
 986                        }
 987                        ata_qc_complete_multiple(ap, ap->qc_active ^ done_mask);
 988                }
 989        }
 990
 991        if (notifier_clears[0] || notifier_clears[1]) {
 992                /* Note: Both notifier clear registers must be written
 993                   if either is set, even if one is zero, according to NVIDIA. */
 994                struct nv_adma_port_priv *pp = host->ports[0]->private_data;
 995                writel(notifier_clears[0], pp->notifier_clear_block);
 996                pp = host->ports[1]->private_data;
 997                writel(notifier_clears[1], pp->notifier_clear_block);
 998        }
 999
1000        spin_unlock(&host->lock);
1001
1002        return IRQ_RETVAL(handled);
1003}
1004
1005static void nv_adma_freeze(struct ata_port *ap)
1006{
1007        struct nv_adma_port_priv *pp = ap->private_data;
1008        void __iomem *mmio = pp->ctl_block;
1009        u16 tmp;
1010
1011        nv_ck804_freeze(ap);
1012
1013        if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)
1014                return;
1015
1016        /* clear any outstanding CK804 notifications */
1017        writeb(NV_INT_ALL << (ap->port_no * NV_INT_PORT_SHIFT),
1018                ap->host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804);
1019
1020        /* Disable interrupt */
1021        tmp = readw(mmio + NV_ADMA_CTL);
1022        writew(tmp & ~(NV_ADMA_CTL_AIEN | NV_ADMA_CTL_HOTPLUG_IEN),
1023                mmio + NV_ADMA_CTL);
1024        readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1025}
1026
1027static void nv_adma_thaw(struct ata_port *ap)
1028{
1029        struct nv_adma_port_priv *pp = ap->private_data;
1030        void __iomem *mmio = pp->ctl_block;
1031        u16 tmp;
1032
1033        nv_ck804_thaw(ap);
1034
1035        if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)
1036                return;
1037
1038        /* Enable interrupt */
1039        tmp = readw(mmio + NV_ADMA_CTL);
1040        writew(tmp | (NV_ADMA_CTL_AIEN | NV_ADMA_CTL_HOTPLUG_IEN),
1041                mmio + NV_ADMA_CTL);
1042        readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1043}
1044
1045static void nv_adma_irq_clear(struct ata_port *ap)
1046{
1047        struct nv_adma_port_priv *pp = ap->private_data;
1048        void __iomem *mmio = pp->ctl_block;
1049        u32 notifier_clears[2];
1050
1051        if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) {
1052                ata_bmdma_irq_clear(ap);
1053                return;
1054        }
1055
1056        /* clear any outstanding CK804 notifications */
1057        writeb(NV_INT_ALL << (ap->port_no * NV_INT_PORT_SHIFT),
1058                ap->host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804);
1059
1060        /* clear ADMA status */
1061        writew(0xffff, mmio + NV_ADMA_STAT);
1062
1063        /* clear notifiers - note both ports need to be written with
1064           something even though we are only clearing on one */
1065        if (ap->port_no == 0) {
1066                notifier_clears[0] = 0xFFFFFFFF;
1067                notifier_clears[1] = 0;
1068        } else {
1069                notifier_clears[0] = 0;
1070                notifier_clears[1] = 0xFFFFFFFF;
1071        }
1072        pp = ap->host->ports[0]->private_data;
1073        writel(notifier_clears[0], pp->notifier_clear_block);
1074        pp = ap->host->ports[1]->private_data;
1075        writel(notifier_clears[1], pp->notifier_clear_block);
1076}
1077
1078static void nv_adma_post_internal_cmd(struct ata_queued_cmd *qc)
1079{
1080        struct nv_adma_port_priv *pp = qc->ap->private_data;
1081
1082        if (pp->flags & NV_ADMA_PORT_REGISTER_MODE)
1083                ata_bmdma_post_internal_cmd(qc);
1084}
1085
1086static int nv_adma_port_start(struct ata_port *ap)
1087{
1088        struct device *dev = ap->host->dev;
1089        struct nv_adma_port_priv *pp;
1090        int rc;
1091        void *mem;
1092        dma_addr_t mem_dma;
1093        void __iomem *mmio;
1094        struct pci_dev *pdev = to_pci_dev(dev);
1095        u16 tmp;
1096
1097        VPRINTK("ENTER\n");
1098
1099        /*
1100         * Ensure DMA mask is set to 32-bit before allocating legacy PRD and
1101         * pad buffers.
1102         */
1103        rc = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
1104        if (rc)
1105                return rc;
1106
1107        /* we might fallback to bmdma, allocate bmdma resources */
1108        rc = ata_bmdma_port_start(ap);
1109        if (rc)
1110                return rc;
1111
1112        pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1113        if (!pp)
1114                return -ENOMEM;
1115
1116        mmio = ap->host->iomap[NV_MMIO_BAR] + NV_ADMA_PORT +
1117               ap->port_no * NV_ADMA_PORT_SIZE;
1118        pp->ctl_block = mmio;
1119        pp->gen_block = ap->host->iomap[NV_MMIO_BAR] + NV_ADMA_GEN;
1120        pp->notifier_clear_block = pp->gen_block +
1121               NV_ADMA_NOTIFIER_CLEAR + (4 * ap->port_no);
1122
1123        /*
1124         * Now that the legacy PRD and padding buffer are allocated we can
1125         * raise the DMA mask to allocate the CPB/APRD table.
1126         */
1127        dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
1128
1129        pp->adma_dma_mask = *dev->dma_mask;
1130
1131        mem = dmam_alloc_coherent(dev, NV_ADMA_PORT_PRIV_DMA_SZ,
1132                                  &mem_dma, GFP_KERNEL);
1133        if (!mem)
1134                return -ENOMEM;
1135
1136        /*
1137         * First item in chunk of DMA memory:
1138         * 128-byte command parameter block (CPB)
1139         * one for each command tag
1140         */
1141        pp->cpb     = mem;
1142        pp->cpb_dma = mem_dma;
1143
1144        writel(mem_dma & 0xFFFFFFFF,    mmio + NV_ADMA_CPB_BASE_LOW);
1145        writel((mem_dma >> 16) >> 16,   mmio + NV_ADMA_CPB_BASE_HIGH);
1146
1147        mem     += NV_ADMA_MAX_CPBS * NV_ADMA_CPB_SZ;
1148        mem_dma += NV_ADMA_MAX_CPBS * NV_ADMA_CPB_SZ;
1149
1150        /*
1151         * Second item: block of ADMA_SGTBL_LEN s/g entries
1152         */
1153        pp->aprd = mem;
1154        pp->aprd_dma = mem_dma;
1155
1156        ap->private_data = pp;
1157
1158        /* clear any outstanding interrupt conditions */
1159        writew(0xffff, mmio + NV_ADMA_STAT);
1160
1161        /* initialize port variables */
1162        pp->flags = NV_ADMA_PORT_REGISTER_MODE;
1163
1164        /* clear CPB fetch count */
1165        writew(0, mmio + NV_ADMA_CPB_COUNT);
1166
1167        /* clear GO for register mode, enable interrupt */
1168        tmp = readw(mmio + NV_ADMA_CTL);
1169        writew((tmp & ~NV_ADMA_CTL_GO) | NV_ADMA_CTL_AIEN |
1170                NV_ADMA_CTL_HOTPLUG_IEN, mmio + NV_ADMA_CTL);
1171
1172        tmp = readw(mmio + NV_ADMA_CTL);
1173        writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1174        readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1175        udelay(1);
1176        writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1177        readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1178
1179        return 0;
1180}
1181
1182static void nv_adma_port_stop(struct ata_port *ap)
1183{
1184        struct nv_adma_port_priv *pp = ap->private_data;
1185        void __iomem *mmio = pp->ctl_block;
1186
1187        VPRINTK("ENTER\n");
1188        writew(0, mmio + NV_ADMA_CTL);
1189}
1190
1191#ifdef CONFIG_PM
1192static int nv_adma_port_suspend(struct ata_port *ap, pm_message_t mesg)
1193{
1194        struct nv_adma_port_priv *pp = ap->private_data;
1195        void __iomem *mmio = pp->ctl_block;
1196
1197        /* Go to register mode - clears GO */
1198        nv_adma_register_mode(ap);
1199
1200        /* clear CPB fetch count */
1201        writew(0, mmio + NV_ADMA_CPB_COUNT);
1202
1203        /* disable interrupt, shut down port */
1204        writew(0, mmio + NV_ADMA_CTL);
1205
1206        return 0;
1207}
1208
1209static int nv_adma_port_resume(struct ata_port *ap)
1210{
1211        struct nv_adma_port_priv *pp = ap->private_data;
1212        void __iomem *mmio = pp->ctl_block;
1213        u16 tmp;
1214
1215        /* set CPB block location */
1216        writel(pp->cpb_dma & 0xFFFFFFFF,        mmio + NV_ADMA_CPB_BASE_LOW);
1217        writel((pp->cpb_dma >> 16) >> 16,       mmio + NV_ADMA_CPB_BASE_HIGH);
1218
1219        /* clear any outstanding interrupt conditions */
1220        writew(0xffff, mmio + NV_ADMA_STAT);
1221
1222        /* initialize port variables */
1223        pp->flags |= NV_ADMA_PORT_REGISTER_MODE;
1224
1225        /* clear CPB fetch count */
1226        writew(0, mmio + NV_ADMA_CPB_COUNT);
1227
1228        /* clear GO for register mode, enable interrupt */
1229        tmp = readw(mmio + NV_ADMA_CTL);
1230        writew((tmp & ~NV_ADMA_CTL_GO) | NV_ADMA_CTL_AIEN |
1231                NV_ADMA_CTL_HOTPLUG_IEN, mmio + NV_ADMA_CTL);
1232
1233        tmp = readw(mmio + NV_ADMA_CTL);
1234        writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1235        readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1236        udelay(1);
1237        writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1238        readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1239
1240        return 0;
1241}
1242#endif
1243
1244static void nv_adma_setup_port(struct ata_port *ap)
1245{
1246        void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1247        struct ata_ioports *ioport = &ap->ioaddr;
1248
1249        VPRINTK("ENTER\n");
1250
1251        mmio += NV_ADMA_PORT + ap->port_no * NV_ADMA_PORT_SIZE;
1252
1253        ioport->cmd_addr        = mmio;
1254        ioport->data_addr       = mmio + (ATA_REG_DATA * 4);
1255        ioport->error_addr      =
1256        ioport->feature_addr    = mmio + (ATA_REG_ERR * 4);
1257        ioport->nsect_addr      = mmio + (ATA_REG_NSECT * 4);
1258        ioport->lbal_addr       = mmio + (ATA_REG_LBAL * 4);
1259        ioport->lbam_addr       = mmio + (ATA_REG_LBAM * 4);
1260        ioport->lbah_addr       = mmio + (ATA_REG_LBAH * 4);
1261        ioport->device_addr     = mmio + (ATA_REG_DEVICE * 4);
1262        ioport->status_addr     =
1263        ioport->command_addr    = mmio + (ATA_REG_STATUS * 4);
1264        ioport->altstatus_addr  =
1265        ioport->ctl_addr        = mmio + 0x20;
1266}
1267
1268static int nv_adma_host_init(struct ata_host *host)
1269{
1270        struct pci_dev *pdev = to_pci_dev(host->dev);
1271        unsigned int i;
1272        u32 tmp32;
1273
1274        VPRINTK("ENTER\n");
1275
1276        /* enable ADMA on the ports */
1277        pci_read_config_dword(pdev, NV_MCP_SATA_CFG_20, &tmp32);
1278        tmp32 |= NV_MCP_SATA_CFG_20_PORT0_EN |
1279                 NV_MCP_SATA_CFG_20_PORT0_PWB_EN |
1280                 NV_MCP_SATA_CFG_20_PORT1_EN |
1281                 NV_MCP_SATA_CFG_20_PORT1_PWB_EN;
1282
1283        pci_write_config_dword(pdev, NV_MCP_SATA_CFG_20, tmp32);
1284
1285        for (i = 0; i < host->n_ports; i++)
1286                nv_adma_setup_port(host->ports[i]);
1287
1288        return 0;
1289}
1290
1291static void nv_adma_fill_aprd(struct ata_queued_cmd *qc,
1292                              struct scatterlist *sg,
1293                              int idx,
1294                              struct nv_adma_prd *aprd)
1295{
1296        u8 flags = 0;
1297        if (qc->tf.flags & ATA_TFLAG_WRITE)
1298                flags |= NV_APRD_WRITE;
1299        if (idx == qc->n_elem - 1)
1300                flags |= NV_APRD_END;
1301        else if (idx != 4)
1302                flags |= NV_APRD_CONT;
1303
1304        aprd->addr  = cpu_to_le64(((u64)sg_dma_address(sg)));
1305        aprd->len   = cpu_to_le32(((u32)sg_dma_len(sg))); /* len in bytes */
1306        aprd->flags = flags;
1307        aprd->packet_len = 0;
1308}
1309
1310static void nv_adma_fill_sg(struct ata_queued_cmd *qc, struct nv_adma_cpb *cpb)
1311{
1312        struct nv_adma_port_priv *pp = qc->ap->private_data;
1313        struct nv_adma_prd *aprd;
1314        struct scatterlist *sg;
1315        unsigned int si;
1316
1317        VPRINTK("ENTER\n");
1318
1319        for_each_sg(qc->sg, sg, qc->n_elem, si) {
1320                aprd = (si < 5) ? &cpb->aprd[si] :
1321                        &pp->aprd[NV_ADMA_SGTBL_LEN * qc->hw_tag + (si-5)];
1322                nv_adma_fill_aprd(qc, sg, si, aprd);
1323        }
1324        if (si > 5)
1325                cpb->next_aprd = cpu_to_le64(((u64)(pp->aprd_dma + NV_ADMA_SGTBL_SZ * qc->hw_tag)));
1326        else
1327                cpb->next_aprd = cpu_to_le64(0);
1328}
1329
1330static int nv_adma_use_reg_mode(struct ata_queued_cmd *qc)
1331{
1332        struct nv_adma_port_priv *pp = qc->ap->private_data;
1333
1334        /* ADMA engine can only be used for non-ATAPI DMA commands,
1335           or interrupt-driven no-data commands. */
1336        if ((pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) ||
1337           (qc->tf.flags & ATA_TFLAG_POLLING))
1338                return 1;
1339
1340        if ((qc->flags & ATA_QCFLAG_DMAMAP) ||
1341           (qc->tf.protocol == ATA_PROT_NODATA))
1342                return 0;
1343
1344        return 1;
1345}
1346
1347static void nv_adma_qc_prep(struct ata_queued_cmd *qc)
1348{
1349        struct nv_adma_port_priv *pp = qc->ap->private_data;
1350        struct nv_adma_cpb *cpb = &pp->cpb[qc->hw_tag];
1351        u8 ctl_flags = NV_CPB_CTL_CPB_VALID |
1352                       NV_CPB_CTL_IEN;
1353
1354        if (nv_adma_use_reg_mode(qc)) {
1355                BUG_ON(!(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) &&
1356                        (qc->flags & ATA_QCFLAG_DMAMAP));
1357                nv_adma_register_mode(qc->ap);
1358                ata_bmdma_qc_prep(qc);
1359                return;
1360        }
1361
1362        cpb->resp_flags = NV_CPB_RESP_DONE;
1363        wmb();
1364        cpb->ctl_flags = 0;
1365        wmb();
1366
1367        cpb->len                = 3;
1368        cpb->tag                = qc->hw_tag;
1369        cpb->next_cpb_idx       = 0;
1370
1371        /* turn on NCQ flags for NCQ commands */
1372        if (qc->tf.protocol == ATA_PROT_NCQ)
1373                ctl_flags |= NV_CPB_CTL_QUEUE | NV_CPB_CTL_FPDMA;
1374
1375        VPRINTK("qc->flags = 0x%lx\n", qc->flags);
1376
1377        nv_adma_tf_to_cpb(&qc->tf, cpb->tf);
1378
1379        if (qc->flags & ATA_QCFLAG_DMAMAP) {
1380                nv_adma_fill_sg(qc, cpb);
1381                ctl_flags |= NV_CPB_CTL_APRD_VALID;
1382        } else
1383                memset(&cpb->aprd[0], 0, sizeof(struct nv_adma_prd) * 5);
1384
1385        /* Be paranoid and don't let the device see NV_CPB_CTL_CPB_VALID
1386           until we are finished filling in all of the contents */
1387        wmb();
1388        cpb->ctl_flags = ctl_flags;
1389        wmb();
1390        cpb->resp_flags = 0;
1391}
1392
1393static unsigned int nv_adma_qc_issue(struct ata_queued_cmd *qc)
1394{
1395        struct nv_adma_port_priv *pp = qc->ap->private_data;
1396        void __iomem *mmio = pp->ctl_block;
1397        int curr_ncq = (qc->tf.protocol == ATA_PROT_NCQ);
1398
1399        VPRINTK("ENTER\n");
1400
1401        /* We can't handle result taskfile with NCQ commands, since
1402           retrieving the taskfile switches us out of ADMA mode and would abort
1403           existing commands. */
1404        if (unlikely(qc->tf.protocol == ATA_PROT_NCQ &&
1405                     (qc->flags & ATA_QCFLAG_RESULT_TF))) {
1406                ata_dev_err(qc->dev, "NCQ w/ RESULT_TF not allowed\n");
1407                return AC_ERR_SYSTEM;
1408        }
1409
1410        if (nv_adma_use_reg_mode(qc)) {
1411                /* use ATA register mode */
1412                VPRINTK("using ATA register mode: 0x%lx\n", qc->flags);
1413                BUG_ON(!(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) &&
1414                        (qc->flags & ATA_QCFLAG_DMAMAP));
1415                nv_adma_register_mode(qc->ap);
1416                return ata_bmdma_qc_issue(qc);
1417        } else
1418                nv_adma_mode(qc->ap);
1419
1420        /* write append register, command tag in lower 8 bits
1421           and (number of cpbs to append -1) in top 8 bits */
1422        wmb();
1423
1424        if (curr_ncq != pp->last_issue_ncq) {
1425                /* Seems to need some delay before switching between NCQ and
1426                   non-NCQ commands, else we get command timeouts and such. */
1427                udelay(20);
1428                pp->last_issue_ncq = curr_ncq;
1429        }
1430
1431        writew(qc->hw_tag, mmio + NV_ADMA_APPEND);
1432
1433        DPRINTK("Issued tag %u\n", qc->hw_tag);
1434
1435        return 0;
1436}
1437
1438static irqreturn_t nv_generic_interrupt(int irq, void *dev_instance)
1439{
1440        struct ata_host *host = dev_instance;
1441        unsigned int i;
1442        unsigned int handled = 0;
1443        unsigned long flags;
1444
1445        spin_lock_irqsave(&host->lock, flags);
1446
1447        for (i = 0; i < host->n_ports; i++) {
1448                struct ata_port *ap = host->ports[i];
1449                struct ata_queued_cmd *qc;
1450
1451                qc = ata_qc_from_tag(ap, ap->link.active_tag);
1452                if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) {
1453                        handled += ata_bmdma_port_intr(ap, qc);
1454                } else {
1455                        /*
1456                         * No request pending?  Clear interrupt status
1457                         * anyway, in case there's one pending.
1458                         */
1459                        ap->ops->sff_check_status(ap);
1460                }
1461        }
1462
1463        spin_unlock_irqrestore(&host->lock, flags);
1464
1465        return IRQ_RETVAL(handled);
1466}
1467
1468static irqreturn_t nv_do_interrupt(struct ata_host *host, u8 irq_stat)
1469{
1470        int i, handled = 0;
1471
1472        for (i = 0; i < host->n_ports; i++) {
1473                handled += nv_host_intr(host->ports[i], irq_stat);
1474                irq_stat >>= NV_INT_PORT_SHIFT;
1475        }
1476
1477        return IRQ_RETVAL(handled);
1478}
1479
1480static irqreturn_t nv_nf2_interrupt(int irq, void *dev_instance)
1481{
1482        struct ata_host *host = dev_instance;
1483        u8 irq_stat;
1484        irqreturn_t ret;
1485
1486        spin_lock(&host->lock);
1487        irq_stat = ioread8(host->ports[0]->ioaddr.scr_addr + NV_INT_STATUS);
1488        ret = nv_do_interrupt(host, irq_stat);
1489        spin_unlock(&host->lock);
1490
1491        return ret;
1492}
1493
1494static irqreturn_t nv_ck804_interrupt(int irq, void *dev_instance)
1495{
1496        struct ata_host *host = dev_instance;
1497        u8 irq_stat;
1498        irqreturn_t ret;
1499
1500        spin_lock(&host->lock);
1501        irq_stat = readb(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_CK804);
1502        ret = nv_do_interrupt(host, irq_stat);
1503        spin_unlock(&host->lock);
1504
1505        return ret;
1506}
1507
1508static int nv_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val)
1509{
1510        if (sc_reg > SCR_CONTROL)
1511                return -EINVAL;
1512
1513        *val = ioread32(link->ap->ioaddr.scr_addr + (sc_reg * 4));
1514        return 0;
1515}
1516
1517static int nv_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val)
1518{
1519        if (sc_reg > SCR_CONTROL)
1520                return -EINVAL;
1521
1522        iowrite32(val, link->ap->ioaddr.scr_addr + (sc_reg * 4));
1523        return 0;
1524}
1525
1526static int nv_hardreset(struct ata_link *link, unsigned int *class,
1527                        unsigned long deadline)
1528{
1529        struct ata_eh_context *ehc = &link->eh_context;
1530
1531        /* Do hardreset iff it's post-boot probing, please read the
1532         * comment above port ops for details.
1533         */
1534        if (!(link->ap->pflags & ATA_PFLAG_LOADING) &&
1535            !ata_dev_enabled(link->device))
1536                sata_link_hardreset(link, sata_deb_timing_hotplug, deadline,
1537                                    NULL, NULL);
1538        else {
1539                const unsigned long *timing = sata_ehc_deb_timing(ehc);
1540                int rc;
1541
1542                if (!(ehc->i.flags & ATA_EHI_QUIET))
1543                        ata_link_info(link,
1544                                      "nv: skipping hardreset on occupied port\n");
1545
1546                /* make sure the link is online */
1547                rc = sata_link_resume(link, timing, deadline);
1548                /* whine about phy resume failure but proceed */
1549                if (rc && rc != -EOPNOTSUPP)
1550                        ata_link_warn(link, "failed to resume link (errno=%d)\n",
1551                                      rc);
1552        }
1553
1554        /* device signature acquisition is unreliable */
1555        return -EAGAIN;
1556}
1557
1558static void nv_nf2_freeze(struct ata_port *ap)
1559{
1560        void __iomem *scr_addr = ap->host->ports[0]->ioaddr.scr_addr;
1561        int shift = ap->port_no * NV_INT_PORT_SHIFT;
1562        u8 mask;
1563
1564        mask = ioread8(scr_addr + NV_INT_ENABLE);
1565        mask &= ~(NV_INT_ALL << shift);
1566        iowrite8(mask, scr_addr + NV_INT_ENABLE);
1567}
1568
1569static void nv_nf2_thaw(struct ata_port *ap)
1570{
1571        void __iomem *scr_addr = ap->host->ports[0]->ioaddr.scr_addr;
1572        int shift = ap->port_no * NV_INT_PORT_SHIFT;
1573        u8 mask;
1574
1575        iowrite8(NV_INT_ALL << shift, scr_addr + NV_INT_STATUS);
1576
1577        mask = ioread8(scr_addr + NV_INT_ENABLE);
1578        mask |= (NV_INT_MASK << shift);
1579        iowrite8(mask, scr_addr + NV_INT_ENABLE);
1580}
1581
1582static void nv_ck804_freeze(struct ata_port *ap)
1583{
1584        void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1585        int shift = ap->port_no * NV_INT_PORT_SHIFT;
1586        u8 mask;
1587
1588        mask = readb(mmio_base + NV_INT_ENABLE_CK804);
1589        mask &= ~(NV_INT_ALL << shift);
1590        writeb(mask, mmio_base + NV_INT_ENABLE_CK804);
1591}
1592
1593static void nv_ck804_thaw(struct ata_port *ap)
1594{
1595        void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1596        int shift = ap->port_no * NV_INT_PORT_SHIFT;
1597        u8 mask;
1598
1599        writeb(NV_INT_ALL << shift, mmio_base + NV_INT_STATUS_CK804);
1600
1601        mask = readb(mmio_base + NV_INT_ENABLE_CK804);
1602        mask |= (NV_INT_MASK << shift);
1603        writeb(mask, mmio_base + NV_INT_ENABLE_CK804);
1604}
1605
1606static void nv_mcp55_freeze(struct ata_port *ap)
1607{
1608        void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1609        int shift = ap->port_no * NV_INT_PORT_SHIFT_MCP55;
1610        u32 mask;
1611
1612        writel(NV_INT_ALL_MCP55 << shift, mmio_base + NV_INT_STATUS_MCP55);
1613
1614        mask = readl(mmio_base + NV_INT_ENABLE_MCP55);
1615        mask &= ~(NV_INT_ALL_MCP55 << shift);
1616        writel(mask, mmio_base + NV_INT_ENABLE_MCP55);
1617}
1618
1619static void nv_mcp55_thaw(struct ata_port *ap)
1620{
1621        void __iomem *mmio_base = ap->host->iomap[NV_MMIO_BAR];
1622        int shift = ap->port_no * NV_INT_PORT_SHIFT_MCP55;
1623        u32 mask;
1624
1625        writel(NV_INT_ALL_MCP55 << shift, mmio_base + NV_INT_STATUS_MCP55);
1626
1627        mask = readl(mmio_base + NV_INT_ENABLE_MCP55);
1628        mask |= (NV_INT_MASK_MCP55 << shift);
1629        writel(mask, mmio_base + NV_INT_ENABLE_MCP55);
1630}
1631
1632static void nv_adma_error_handler(struct ata_port *ap)
1633{
1634        struct nv_adma_port_priv *pp = ap->private_data;
1635        if (!(pp->flags & NV_ADMA_PORT_REGISTER_MODE)) {
1636                void __iomem *mmio = pp->ctl_block;
1637                int i;
1638                u16 tmp;
1639
1640                if (ata_tag_valid(ap->link.active_tag) || ap->link.sactive) {
1641                        u32 notifier = readl(mmio + NV_ADMA_NOTIFIER);
1642                        u32 notifier_error = readl(mmio + NV_ADMA_NOTIFIER_ERROR);
1643                        u32 gen_ctl = readl(pp->gen_block + NV_ADMA_GEN_CTL);
1644                        u32 status = readw(mmio + NV_ADMA_STAT);
1645                        u8 cpb_count = readb(mmio + NV_ADMA_CPB_COUNT);
1646                        u8 next_cpb_idx = readb(mmio + NV_ADMA_NEXT_CPB_IDX);
1647
1648                        ata_port_err(ap,
1649                                "EH in ADMA mode, notifier 0x%X "
1650                                "notifier_error 0x%X gen_ctl 0x%X status 0x%X "
1651                                "next cpb count 0x%X next cpb idx 0x%x\n",
1652                                notifier, notifier_error, gen_ctl, status,
1653                                cpb_count, next_cpb_idx);
1654
1655                        for (i = 0; i < NV_ADMA_MAX_CPBS; i++) {
1656                                struct nv_adma_cpb *cpb = &pp->cpb[i];
1657                                if ((ata_tag_valid(ap->link.active_tag) && i == ap->link.active_tag) ||
1658                                    ap->link.sactive & (1 << i))
1659                                        ata_port_err(ap,
1660                                                "CPB %d: ctl_flags 0x%x, resp_flags 0x%x\n",
1661                                                i, cpb->ctl_flags, cpb->resp_flags);
1662                        }
1663                }
1664
1665                /* Push us back into port register mode for error handling. */
1666                nv_adma_register_mode(ap);
1667
1668                /* Mark all of the CPBs as invalid to prevent them from
1669                   being executed */
1670                for (i = 0; i < NV_ADMA_MAX_CPBS; i++)
1671                        pp->cpb[i].ctl_flags &= ~NV_CPB_CTL_CPB_VALID;
1672
1673                /* clear CPB fetch count */
1674                writew(0, mmio + NV_ADMA_CPB_COUNT);
1675
1676                /* Reset channel */
1677                tmp = readw(mmio + NV_ADMA_CTL);
1678                writew(tmp | NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1679                readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1680                udelay(1);
1681                writew(tmp & ~NV_ADMA_CTL_CHANNEL_RESET, mmio + NV_ADMA_CTL);
1682                readw(mmio + NV_ADMA_CTL);      /* flush posted write */
1683        }
1684
1685        ata_bmdma_error_handler(ap);
1686}
1687
1688static void nv_swncq_qc_to_dq(struct ata_port *ap, struct ata_queued_cmd *qc)
1689{
1690        struct nv_swncq_port_priv *pp = ap->private_data;
1691        struct defer_queue *dq = &pp->defer_queue;
1692
1693        /* queue is full */
1694        WARN_ON(dq->tail - dq->head == ATA_MAX_QUEUE);
1695        dq->defer_bits |= (1 << qc->hw_tag);
1696        dq->tag[dq->tail++ & (ATA_MAX_QUEUE - 1)] = qc->hw_tag;
1697}
1698
1699static struct ata_queued_cmd *nv_swncq_qc_from_dq(struct ata_port *ap)
1700{
1701        struct nv_swncq_port_priv *pp = ap->private_data;
1702        struct defer_queue *dq = &pp->defer_queue;
1703        unsigned int tag;
1704
1705        if (dq->head == dq->tail)       /* null queue */
1706                return NULL;
1707
1708        tag = dq->tag[dq->head & (ATA_MAX_QUEUE - 1)];
1709        dq->tag[dq->head++ & (ATA_MAX_QUEUE - 1)] = ATA_TAG_POISON;
1710        WARN_ON(!(dq->defer_bits & (1 << tag)));
1711        dq->defer_bits &= ~(1 << tag);
1712
1713        return ata_qc_from_tag(ap, tag);
1714}
1715
1716static void nv_swncq_fis_reinit(struct ata_port *ap)
1717{
1718        struct nv_swncq_port_priv *pp = ap->private_data;
1719
1720        pp->dhfis_bits = 0;
1721        pp->dmafis_bits = 0;
1722        pp->sdbfis_bits = 0;
1723        pp->ncq_flags = 0;
1724}
1725
1726static void nv_swncq_pp_reinit(struct ata_port *ap)
1727{
1728        struct nv_swncq_port_priv *pp = ap->private_data;
1729        struct defer_queue *dq = &pp->defer_queue;
1730
1731        dq->head = 0;
1732        dq->tail = 0;
1733        dq->defer_bits = 0;
1734        pp->qc_active = 0;
1735        pp->last_issue_tag = ATA_TAG_POISON;
1736        nv_swncq_fis_reinit(ap);
1737}
1738
1739static void nv_swncq_irq_clear(struct ata_port *ap, u16 fis)
1740{
1741        struct nv_swncq_port_priv *pp = ap->private_data;
1742
1743        writew(fis, pp->irq_block);
1744}
1745
1746static void __ata_bmdma_stop(struct ata_port *ap)
1747{
1748        struct ata_queued_cmd qc;
1749
1750        qc.ap = ap;
1751        ata_bmdma_stop(&qc);
1752}
1753
1754static void nv_swncq_ncq_stop(struct ata_port *ap)
1755{
1756        struct nv_swncq_port_priv *pp = ap->private_data;
1757        unsigned int i;
1758        u32 sactive;
1759        u32 done_mask;
1760
1761        ata_port_err(ap, "EH in SWNCQ mode,QC:qc_active 0x%llX sactive 0x%X\n",
1762                     ap->qc_active, ap->link.sactive);
1763        ata_port_err(ap,
1764                "SWNCQ:qc_active 0x%X defer_bits 0x%X last_issue_tag 0x%x\n  "
1765                "dhfis 0x%X dmafis 0x%X sdbfis 0x%X\n",
1766                pp->qc_active, pp->defer_queue.defer_bits, pp->last_issue_tag,
1767                pp->dhfis_bits, pp->dmafis_bits, pp->sdbfis_bits);
1768
1769        ata_port_err(ap, "ATA_REG 0x%X ERR_REG 0x%X\n",
1770                     ap->ops->sff_check_status(ap),
1771                     ioread8(ap->ioaddr.error_addr));
1772
1773        sactive = readl(pp->sactive_block);
1774        done_mask = pp->qc_active ^ sactive;
1775
1776        ata_port_err(ap, "tag : dhfis dmafis sdbfis sactive\n");
1777        for (i = 0; i < ATA_MAX_QUEUE; i++) {
1778                u8 err = 0;
1779                if (pp->qc_active & (1 << i))
1780                        err = 0;
1781                else if (done_mask & (1 << i))
1782                        err = 1;
1783                else
1784                        continue;
1785
1786                ata_port_err(ap,
1787                             "tag 0x%x: %01x %01x %01x %01x %s\n", i,
1788                             (pp->dhfis_bits >> i) & 0x1,
1789                             (pp->dmafis_bits >> i) & 0x1,
1790                             (pp->sdbfis_bits >> i) & 0x1,
1791                             (sactive >> i) & 0x1,
1792                             (err ? "error! tag doesn't exit" : " "));
1793        }
1794
1795        nv_swncq_pp_reinit(ap);
1796        ap->ops->sff_irq_clear(ap);
1797        __ata_bmdma_stop(ap);
1798        nv_swncq_irq_clear(ap, 0xffff);
1799}
1800
1801static void nv_swncq_error_handler(struct ata_port *ap)
1802{
1803        struct ata_eh_context *ehc = &ap->link.eh_context;
1804
1805        if (ap->link.sactive) {
1806                nv_swncq_ncq_stop(ap);
1807                ehc->i.action |= ATA_EH_RESET;
1808        }
1809
1810        ata_bmdma_error_handler(ap);
1811}
1812
1813#ifdef CONFIG_PM
1814static int nv_swncq_port_suspend(struct ata_port *ap, pm_message_t mesg)
1815{
1816        void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1817        u32 tmp;
1818
1819        /* clear irq */
1820        writel(~0, mmio + NV_INT_STATUS_MCP55);
1821
1822        /* disable irq */
1823        writel(0, mmio + NV_INT_ENABLE_MCP55);
1824
1825        /* disable swncq */
1826        tmp = readl(mmio + NV_CTL_MCP55);
1827        tmp &= ~(NV_CTL_PRI_SWNCQ | NV_CTL_SEC_SWNCQ);
1828        writel(tmp, mmio + NV_CTL_MCP55);
1829
1830        return 0;
1831}
1832
1833static int nv_swncq_port_resume(struct ata_port *ap)
1834{
1835        void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1836        u32 tmp;
1837
1838        /* clear irq */
1839        writel(~0, mmio + NV_INT_STATUS_MCP55);
1840
1841        /* enable irq */
1842        writel(0x00fd00fd, mmio + NV_INT_ENABLE_MCP55);
1843
1844        /* enable swncq */
1845        tmp = readl(mmio + NV_CTL_MCP55);
1846        writel(tmp | NV_CTL_PRI_SWNCQ | NV_CTL_SEC_SWNCQ, mmio + NV_CTL_MCP55);
1847
1848        return 0;
1849}
1850#endif
1851
1852static void nv_swncq_host_init(struct ata_host *host)
1853{
1854        u32 tmp;
1855        void __iomem *mmio = host->iomap[NV_MMIO_BAR];
1856        struct pci_dev *pdev = to_pci_dev(host->dev);
1857        u8 regval;
1858
1859        /* disable  ECO 398 */
1860        pci_read_config_byte(pdev, 0x7f, &regval);
1861        regval &= ~(1 << 7);
1862        pci_write_config_byte(pdev, 0x7f, regval);
1863
1864        /* enable swncq */
1865        tmp = readl(mmio + NV_CTL_MCP55);
1866        VPRINTK("HOST_CTL:0x%X\n", tmp);
1867        writel(tmp | NV_CTL_PRI_SWNCQ | NV_CTL_SEC_SWNCQ, mmio + NV_CTL_MCP55);
1868
1869        /* enable irq intr */
1870        tmp = readl(mmio + NV_INT_ENABLE_MCP55);
1871        VPRINTK("HOST_ENABLE:0x%X\n", tmp);
1872        writel(tmp | 0x00fd00fd, mmio + NV_INT_ENABLE_MCP55);
1873
1874        /*  clear port irq */
1875        writel(~0x0, mmio + NV_INT_STATUS_MCP55);
1876}
1877
1878static int nv_swncq_slave_config(struct scsi_device *sdev)
1879{
1880        struct ata_port *ap = ata_shost_to_port(sdev->host);
1881        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
1882        struct ata_device *dev;
1883        int rc;
1884        u8 rev;
1885        u8 check_maxtor = 0;
1886        unsigned char model_num[ATA_ID_PROD_LEN + 1];
1887
1888        rc = ata_scsi_slave_config(sdev);
1889        if (sdev->id >= ATA_MAX_DEVICES || sdev->channel || sdev->lun)
1890                /* Not a proper libata device, ignore */
1891                return rc;
1892
1893        dev = &ap->link.device[sdev->id];
1894        if (!(ap->flags & ATA_FLAG_NCQ) || dev->class == ATA_DEV_ATAPI)
1895                return rc;
1896
1897        /* if MCP51 and Maxtor, then disable ncq */
1898        if (pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA ||
1899                pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2)
1900                check_maxtor = 1;
1901
1902        /* if MCP55 and rev <= a2 and Maxtor, then disable ncq */
1903        if (pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA ||
1904                pdev->device == PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2) {
1905                pci_read_config_byte(pdev, 0x8, &rev);
1906                if (rev <= 0xa2)
1907                        check_maxtor = 1;
1908        }
1909
1910        if (!check_maxtor)
1911                return rc;
1912
1913        ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
1914
1915        if (strncmp(model_num, "Maxtor", 6) == 0) {
1916                ata_scsi_change_queue_depth(sdev, 1);
1917                ata_dev_notice(dev, "Disabling SWNCQ mode (depth %x)\n",
1918                               sdev->queue_depth);
1919        }
1920
1921        return rc;
1922}
1923
1924static int nv_swncq_port_start(struct ata_port *ap)
1925{
1926        struct device *dev = ap->host->dev;
1927        void __iomem *mmio = ap->host->iomap[NV_MMIO_BAR];
1928        struct nv_swncq_port_priv *pp;
1929        int rc;
1930
1931        /* we might fallback to bmdma, allocate bmdma resources */
1932        rc = ata_bmdma_port_start(ap);
1933        if (rc)
1934                return rc;
1935
1936        pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1937        if (!pp)
1938                return -ENOMEM;
1939
1940        pp->prd = dmam_alloc_coherent(dev, ATA_PRD_TBL_SZ * ATA_MAX_QUEUE,
1941                                      &pp->prd_dma, GFP_KERNEL);
1942        if (!pp->prd)
1943                return -ENOMEM;
1944
1945        ap->private_data = pp;
1946        pp->sactive_block = ap->ioaddr.scr_addr + 4 * SCR_ACTIVE;
1947        pp->irq_block = mmio + NV_INT_STATUS_MCP55 + ap->port_no * 2;
1948        pp->tag_block = mmio + NV_NCQ_REG_MCP55 + ap->port_no * 2;
1949
1950        return 0;
1951}
1952
1953static void nv_swncq_qc_prep(struct ata_queued_cmd *qc)
1954{
1955        if (qc->tf.protocol != ATA_PROT_NCQ) {
1956                ata_bmdma_qc_prep(qc);
1957                return;
1958        }
1959
1960        if (!(qc->flags & ATA_QCFLAG_DMAMAP))
1961                return;
1962
1963        nv_swncq_fill_sg(qc);
1964}
1965
1966static void nv_swncq_fill_sg(struct ata_queued_cmd *qc)
1967{
1968        struct ata_port *ap = qc->ap;
1969        struct scatterlist *sg;
1970        struct nv_swncq_port_priv *pp = ap->private_data;
1971        struct ata_bmdma_prd *prd;
1972        unsigned int si, idx;
1973
1974        prd = pp->prd + ATA_MAX_PRD * qc->hw_tag;
1975
1976        idx = 0;
1977        for_each_sg(qc->sg, sg, qc->n_elem, si) {
1978                u32 addr, offset;
1979                u32 sg_len, len;
1980
1981                addr = (u32)sg_dma_address(sg);
1982                sg_len = sg_dma_len(sg);
1983
1984                while (sg_len) {
1985                        offset = addr & 0xffff;
1986                        len = sg_len;
1987                        if ((offset + sg_len) > 0x10000)
1988                                len = 0x10000 - offset;
1989
1990                        prd[idx].addr = cpu_to_le32(addr);
1991                        prd[idx].flags_len = cpu_to_le32(len & 0xffff);
1992
1993                        idx++;
1994                        sg_len -= len;
1995                        addr += len;
1996                }
1997        }
1998
1999        prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
2000}
2001
2002static unsigned int nv_swncq_issue_atacmd(struct ata_port *ap,
2003                                          struct ata_queued_cmd *qc)
2004{
2005        struct nv_swncq_port_priv *pp = ap->private_data;
2006
2007        if (qc == NULL)
2008                return 0;
2009
2010        DPRINTK("Enter\n");
2011
2012        writel((1 << qc->hw_tag), pp->sactive_block);
2013        pp->last_issue_tag = qc->hw_tag;
2014        pp->dhfis_bits &= ~(1 << qc->hw_tag);
2015        pp->dmafis_bits &= ~(1 << qc->hw_tag);
2016        pp->qc_active |= (0x1 << qc->hw_tag);
2017
2018        ap->ops->sff_tf_load(ap, &qc->tf);       /* load tf registers */
2019        ap->ops->sff_exec_command(ap, &qc->tf);
2020
2021        DPRINTK("Issued tag %u\n", qc->hw_tag);
2022
2023        return 0;
2024}
2025
2026static unsigned int nv_swncq_qc_issue(struct ata_queued_cmd *qc)
2027{
2028        struct ata_port *ap = qc->ap;
2029        struct nv_swncq_port_priv *pp = ap->private_data;
2030
2031        if (qc->tf.protocol != ATA_PROT_NCQ)
2032                return ata_bmdma_qc_issue(qc);
2033
2034        DPRINTK("Enter\n");
2035
2036        if (!pp->qc_active)
2037                nv_swncq_issue_atacmd(ap, qc);
2038        else
2039                nv_swncq_qc_to_dq(ap, qc);      /* add qc to defer queue */
2040
2041        return 0;
2042}
2043
2044static void nv_swncq_hotplug(struct ata_port *ap, u32 fis)
2045{
2046        u32 serror;
2047        struct ata_eh_info *ehi = &ap->link.eh_info;
2048
2049        ata_ehi_clear_desc(ehi);
2050
2051        /* AHCI needs SError cleared; otherwise, it might lock up */
2052        sata_scr_read(&ap->link, SCR_ERROR, &serror);
2053        sata_scr_write(&ap->link, SCR_ERROR, serror);
2054
2055        /* analyze @irq_stat */
2056        if (fis & NV_SWNCQ_IRQ_ADDED)
2057                ata_ehi_push_desc(ehi, "hot plug");
2058        else if (fis & NV_SWNCQ_IRQ_REMOVED)
2059                ata_ehi_push_desc(ehi, "hot unplug");
2060
2061        ata_ehi_hotplugged(ehi);
2062
2063        /* okay, let's hand over to EH */
2064        ehi->serror |= serror;
2065
2066        ata_port_freeze(ap);
2067}
2068
2069static int nv_swncq_sdbfis(struct ata_port *ap)
2070{
2071        struct ata_queued_cmd *qc;
2072        struct nv_swncq_port_priv *pp = ap->private_data;
2073        struct ata_eh_info *ehi = &ap->link.eh_info;
2074        u32 sactive;
2075        u32 done_mask;
2076        u8 host_stat;
2077        u8 lack_dhfis = 0;
2078
2079        host_stat = ap->ops->bmdma_status(ap);
2080        if (unlikely(host_stat & ATA_DMA_ERR)) {
2081                /* error when transferring data to/from memory */
2082                ata_ehi_clear_desc(ehi);
2083                ata_ehi_push_desc(ehi, "BMDMA stat 0x%x", host_stat);
2084                ehi->err_mask |= AC_ERR_HOST_BUS;
2085                ehi->action |= ATA_EH_RESET;
2086                return -EINVAL;
2087        }
2088
2089        ap->ops->sff_irq_clear(ap);
2090        __ata_bmdma_stop(ap);
2091
2092        sactive = readl(pp->sactive_block);
2093        done_mask = pp->qc_active ^ sactive;
2094
2095        pp->qc_active &= ~done_mask;
2096        pp->dhfis_bits &= ~done_mask;
2097        pp->dmafis_bits &= ~done_mask;
2098        pp->sdbfis_bits |= done_mask;
2099        ata_qc_complete_multiple(ap, ap->qc_active ^ done_mask);
2100
2101        if (!ap->qc_active) {
2102                DPRINTK("over\n");
2103                nv_swncq_pp_reinit(ap);
2104                return 0;
2105        }
2106
2107        if (pp->qc_active & pp->dhfis_bits)
2108                return 0;
2109
2110        if ((pp->ncq_flags & ncq_saw_backout) ||
2111            (pp->qc_active ^ pp->dhfis_bits))
2112                /* if the controller can't get a device to host register FIS,
2113                 * The driver needs to reissue the new command.
2114                 */
2115                lack_dhfis = 1;
2116
2117        DPRINTK("id 0x%x QC: qc_active 0x%x,"
2118                "SWNCQ:qc_active 0x%X defer_bits %X "
2119                "dhfis 0x%X dmafis 0x%X last_issue_tag %x\n",
2120                ap->print_id, ap->qc_active, pp->qc_active,
2121                pp->defer_queue.defer_bits, pp->dhfis_bits,
2122                pp->dmafis_bits, pp->last_issue_tag);
2123
2124        nv_swncq_fis_reinit(ap);
2125
2126        if (lack_dhfis) {
2127                qc = ata_qc_from_tag(ap, pp->last_issue_tag);
2128                nv_swncq_issue_atacmd(ap, qc);
2129                return 0;
2130        }
2131
2132        if (pp->defer_queue.defer_bits) {
2133                /* send deferral queue command */
2134                qc = nv_swncq_qc_from_dq(ap);
2135                WARN_ON(qc == NULL);
2136                nv_swncq_issue_atacmd(ap, qc);
2137        }
2138
2139        return 0;
2140}
2141
2142static inline u32 nv_swncq_tag(struct ata_port *ap)
2143{
2144        struct nv_swncq_port_priv *pp = ap->private_data;
2145        u32 tag;
2146
2147        tag = readb(pp->tag_block) >> 2;
2148        return (tag & 0x1f);
2149}
2150
2151static void nv_swncq_dmafis(struct ata_port *ap)
2152{
2153        struct ata_queued_cmd *qc;
2154        unsigned int rw;
2155        u8 dmactl;
2156        u32 tag;
2157        struct nv_swncq_port_priv *pp = ap->private_data;
2158
2159        __ata_bmdma_stop(ap);
2160        tag = nv_swncq_tag(ap);
2161
2162        DPRINTK("dma setup tag 0x%x\n", tag);
2163        qc = ata_qc_from_tag(ap, tag);
2164
2165        if (unlikely(!qc))
2166                return;
2167
2168        rw = qc->tf.flags & ATA_TFLAG_WRITE;
2169
2170        /* load PRD table addr. */
2171        iowrite32(pp->prd_dma + ATA_PRD_TBL_SZ * qc->hw_tag,
2172                  ap->ioaddr.bmdma_addr + ATA_DMA_TABLE_OFS);
2173
2174        /* specify data direction, triple-check start bit is clear */
2175        dmactl = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
2176        dmactl &= ~ATA_DMA_WR;
2177        if (!rw)
2178                dmactl |= ATA_DMA_WR;
2179
2180        iowrite8(dmactl | ATA_DMA_START, ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
2181}
2182
2183static void nv_swncq_host_interrupt(struct ata_port *ap, u16 fis)
2184{
2185        struct nv_swncq_port_priv *pp = ap->private_data;
2186        struct ata_queued_cmd *qc;
2187        struct ata_eh_info *ehi = &ap->link.eh_info;
2188        u32 serror;
2189        u8 ata_stat;
2190
2191        ata_stat = ap->ops->sff_check_status(ap);
2192        nv_swncq_irq_clear(ap, fis);
2193        if (!fis)
2194                return;
2195
2196        if (ap->pflags & ATA_PFLAG_FROZEN)
2197                return;
2198
2199        if (fis & NV_SWNCQ_IRQ_HOTPLUG) {
2200                nv_swncq_hotplug(ap, fis);
2201                return;
2202        }
2203
2204        if (!pp->qc_active)
2205                return;
2206
2207        if (ap->ops->scr_read(&ap->link, SCR_ERROR, &serror))
2208                return;
2209        ap->ops->scr_write(&ap->link, SCR_ERROR, serror);
2210
2211        if (ata_stat & ATA_ERR) {
2212                ata_ehi_clear_desc(ehi);
2213                ata_ehi_push_desc(ehi, "Ata error. fis:0x%X", fis);
2214                ehi->err_mask |= AC_ERR_DEV;
2215                ehi->serror |= serror;
2216                ehi->action |= ATA_EH_RESET;
2217                ata_port_freeze(ap);
2218                return;
2219        }
2220
2221        if (fis & NV_SWNCQ_IRQ_BACKOUT) {
2222                /* If the IRQ is backout, driver must issue
2223                 * the new command again some time later.
2224                 */
2225                pp->ncq_flags |= ncq_saw_backout;
2226        }
2227
2228        if (fis & NV_SWNCQ_IRQ_SDBFIS) {
2229                pp->ncq_flags |= ncq_saw_sdb;
2230                DPRINTK("id 0x%x SWNCQ: qc_active 0x%X "
2231                        "dhfis 0x%X dmafis 0x%X sactive 0x%X\n",
2232                        ap->print_id, pp->qc_active, pp->dhfis_bits,
2233                        pp->dmafis_bits, readl(pp->sactive_block));
2234                if (nv_swncq_sdbfis(ap) < 0)
2235                        goto irq_error;
2236        }
2237
2238        if (fis & NV_SWNCQ_IRQ_DHREGFIS) {
2239                /* The interrupt indicates the new command
2240                 * was transmitted correctly to the drive.
2241                 */
2242                pp->dhfis_bits |= (0x1 << pp->last_issue_tag);
2243                pp->ncq_flags |= ncq_saw_d2h;
2244                if (pp->ncq_flags & (ncq_saw_sdb | ncq_saw_backout)) {
2245                        ata_ehi_push_desc(ehi, "illegal fis transaction");
2246                        ehi->err_mask |= AC_ERR_HSM;
2247                        ehi->action |= ATA_EH_RESET;
2248                        goto irq_error;
2249                }
2250
2251                if (!(fis & NV_SWNCQ_IRQ_DMASETUP) &&
2252                    !(pp->ncq_flags & ncq_saw_dmas)) {
2253                        ata_stat = ap->ops->sff_check_status(ap);
2254                        if (ata_stat & ATA_BUSY)
2255                                goto irq_exit;
2256
2257                        if (pp->defer_queue.defer_bits) {
2258                                DPRINTK("send next command\n");
2259                                qc = nv_swncq_qc_from_dq(ap);
2260                                nv_swncq_issue_atacmd(ap, qc);
2261                        }
2262                }
2263        }
2264
2265        if (fis & NV_SWNCQ_IRQ_DMASETUP) {
2266                /* program the dma controller with appropriate PRD buffers
2267                 * and start the DMA transfer for requested command.
2268                 */
2269                pp->dmafis_bits |= (0x1 << nv_swncq_tag(ap));
2270                pp->ncq_flags |= ncq_saw_dmas;
2271                nv_swncq_dmafis(ap);
2272        }
2273
2274irq_exit:
2275        return;
2276irq_error:
2277        ata_ehi_push_desc(ehi, "fis:0x%x", fis);
2278        ata_port_freeze(ap);
2279        return;
2280}
2281
2282static irqreturn_t nv_swncq_interrupt(int irq, void *dev_instance)
2283{
2284        struct ata_host *host = dev_instance;
2285        unsigned int i;
2286        unsigned int handled = 0;
2287        unsigned long flags;
2288        u32 irq_stat;
2289
2290        spin_lock_irqsave(&host->lock, flags);
2291
2292        irq_stat = readl(host->iomap[NV_MMIO_BAR] + NV_INT_STATUS_MCP55);
2293
2294        for (i = 0; i < host->n_ports; i++) {
2295                struct ata_port *ap = host->ports[i];
2296
2297                if (ap->link.sactive) {
2298                        nv_swncq_host_interrupt(ap, (u16)irq_stat);
2299                        handled = 1;
2300                } else {
2301                        if (irq_stat)   /* reserve Hotplug */
2302                                nv_swncq_irq_clear(ap, 0xfff0);
2303
2304                        handled += nv_host_intr(ap, (u8)irq_stat);
2305                }
2306                irq_stat >>= NV_INT_PORT_SHIFT_MCP55;
2307        }
2308
2309        spin_unlock_irqrestore(&host->lock, flags);
2310
2311        return IRQ_RETVAL(handled);
2312}
2313
2314static int nv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2315{
2316        const struct ata_port_info *ppi[] = { NULL, NULL };
2317        struct nv_pi_priv *ipriv;
2318        struct ata_host *host;
2319        struct nv_host_priv *hpriv;
2320        int rc;
2321        u32 bar;
2322        void __iomem *base;
2323        unsigned long type = ent->driver_data;
2324
2325        // Make sure this is a SATA controller by counting the number of bars
2326        // (NVIDIA SATA controllers will always have six bars).  Otherwise,
2327        // it's an IDE controller and we ignore it.
2328        for (bar = 0; bar < 6; bar++)
2329                if (pci_resource_start(pdev, bar) == 0)
2330                        return -ENODEV;
2331
2332        ata_print_version_once(&pdev->dev, DRV_VERSION);
2333
2334        rc = pcim_enable_device(pdev);
2335        if (rc)
2336                return rc;
2337
2338        /* determine type and allocate host */
2339        if (type == CK804 && adma_enabled) {
2340                dev_notice(&pdev->dev, "Using ADMA mode\n");
2341                type = ADMA;
2342        } else if (type == MCP5x && swncq_enabled) {
2343                dev_notice(&pdev->dev, "Using SWNCQ mode\n");
2344                type = SWNCQ;
2345        }
2346
2347        ppi[0] = &nv_port_info[type];
2348        ipriv = ppi[0]->private_data;
2349        rc = ata_pci_bmdma_prepare_host(pdev, ppi, &host);
2350        if (rc)
2351                return rc;
2352
2353        hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL);
2354        if (!hpriv)
2355                return -ENOMEM;
2356        hpriv->type = type;
2357        host->private_data = hpriv;
2358
2359        /* request and iomap NV_MMIO_BAR */
2360        rc = pcim_iomap_regions(pdev, 1 << NV_MMIO_BAR, DRV_NAME);
2361        if (rc)
2362                return rc;
2363
2364        /* configure SCR access */
2365        base = host->iomap[NV_MMIO_BAR];
2366        host->ports[0]->ioaddr.scr_addr = base + NV_PORT0_SCR_REG_OFFSET;
2367        host->ports[1]->ioaddr.scr_addr = base + NV_PORT1_SCR_REG_OFFSET;
2368
2369        /* enable SATA space for CK804 */
2370        if (type >= CK804) {
2371                u8 regval;
2372
2373                pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
2374                regval |= NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
2375                pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
2376        }
2377
2378        /* init ADMA */
2379        if (type == ADMA) {
2380                rc = nv_adma_host_init(host);
2381                if (rc)
2382                        return rc;
2383        } else if (type == SWNCQ)
2384                nv_swncq_host_init(host);
2385
2386        if (msi_enabled) {
2387                dev_notice(&pdev->dev, "Using MSI\n");
2388                pci_enable_msi(pdev);
2389        }
2390
2391        pci_set_master(pdev);
2392        return ata_pci_sff_activate_host(host, ipriv->irq_handler, ipriv->sht);
2393}
2394
2395#ifdef CONFIG_PM_SLEEP
2396static int nv_pci_device_resume(struct pci_dev *pdev)
2397{
2398        struct ata_host *host = pci_get_drvdata(pdev);
2399        struct nv_host_priv *hpriv = host->private_data;
2400        int rc;
2401
2402        rc = ata_pci_device_do_resume(pdev);
2403        if (rc)
2404                return rc;
2405
2406        if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
2407                if (hpriv->type >= CK804) {
2408                        u8 regval;
2409
2410                        pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
2411                        regval |= NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
2412                        pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
2413                }
2414                if (hpriv->type == ADMA) {
2415                        u32 tmp32;
2416                        struct nv_adma_port_priv *pp;
2417                        /* enable/disable ADMA on the ports appropriately */
2418                        pci_read_config_dword(pdev, NV_MCP_SATA_CFG_20, &tmp32);
2419
2420                        pp = host->ports[0]->private_data;
2421                        if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)
2422                                tmp32 &= ~(NV_MCP_SATA_CFG_20_PORT0_EN |
2423                                           NV_MCP_SATA_CFG_20_PORT0_PWB_EN);
2424                        else
2425                                tmp32 |=  (NV_MCP_SATA_CFG_20_PORT0_EN |
2426                                           NV_MCP_SATA_CFG_20_PORT0_PWB_EN);
2427                        pp = host->ports[1]->private_data;
2428                        if (pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE)
2429                                tmp32 &= ~(NV_MCP_SATA_CFG_20_PORT1_EN |
2430                                           NV_MCP_SATA_CFG_20_PORT1_PWB_EN);
2431                        else
2432                                tmp32 |=  (NV_MCP_SATA_CFG_20_PORT1_EN |
2433                                           NV_MCP_SATA_CFG_20_PORT1_PWB_EN);
2434
2435                        pci_write_config_dword(pdev, NV_MCP_SATA_CFG_20, tmp32);
2436                }
2437        }
2438
2439        ata_host_resume(host);
2440
2441        return 0;
2442}
2443#endif
2444
2445static void nv_ck804_host_stop(struct ata_host *host)
2446{
2447        struct pci_dev *pdev = to_pci_dev(host->dev);
2448        u8 regval;
2449
2450        /* disable SATA space for CK804 */
2451        pci_read_config_byte(pdev, NV_MCP_SATA_CFG_20, &regval);
2452        regval &= ~NV_MCP_SATA_CFG_20_SATA_SPACE_EN;
2453        pci_write_config_byte(pdev, NV_MCP_SATA_CFG_20, regval);
2454}
2455
2456static void nv_adma_host_stop(struct ata_host *host)
2457{
2458        struct pci_dev *pdev = to_pci_dev(host->dev);
2459        u32 tmp32;
2460
2461        /* disable ADMA on the ports */
2462        pci_read_config_dword(pdev, NV_MCP_SATA_CFG_20, &tmp32);
2463        tmp32 &= ~(NV_MCP_SATA_CFG_20_PORT0_EN |
2464                   NV_MCP_SATA_CFG_20_PORT0_PWB_EN |
2465                   NV_MCP_SATA_CFG_20_PORT1_EN |
2466                   NV_MCP_SATA_CFG_20_PORT1_PWB_EN);
2467
2468        pci_write_config_dword(pdev, NV_MCP_SATA_CFG_20, tmp32);
2469
2470        nv_ck804_host_stop(host);
2471}
2472
2473module_pci_driver(nv_pci_driver);
2474
2475module_param_named(adma, adma_enabled, bool, 0444);
2476MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: false)");
2477module_param_named(swncq, swncq_enabled, bool, 0444);
2478MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)");
2479module_param_named(msi, msi_enabled, bool, 0444);
2480MODULE_PARM_DESC(msi, "Enable use of MSI (Default: false)");
2481