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