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