@@ -307,10 +307,10 @@ static int nv_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val);
307
307
308
308
static void nv_nf2_freeze (struct ata_port * ap );
309
309
static void nv_nf2_thaw (struct ata_port * ap );
310
+ static int nv_nf2_hardreset (struct ata_link * link , unsigned int * class ,
311
+ unsigned long deadline );
310
312
static void nv_ck804_freeze (struct ata_port * ap );
311
313
static void nv_ck804_thaw (struct ata_port * ap );
312
- static int nv_hardreset (struct ata_link * link , unsigned int * class ,
313
- unsigned long deadline );
314
314
static int nv_adma_slave_config (struct scsi_device * sdev );
315
315
static int nv_adma_check_atapi_dma (struct ata_queued_cmd * qc );
316
316
static void nv_adma_qc_prep (struct ata_queued_cmd * qc );
@@ -405,17 +405,8 @@ static struct scsi_host_template nv_swncq_sht = {
405
405
.slave_configure = nv_swncq_slave_config ,
406
406
};
407
407
408
- /* OSDL bz3352 reports that some nv controllers can't determine device
409
- * signature reliably and nv_hardreset is implemented to work around
410
- * the problem. This was reported on nf3 and it's unclear whether any
411
- * other controllers are affected. However, the workaround has been
412
- * applied to all variants and there isn't much to gain by trying to
413
- * find out exactly which ones are affected at this point especially
414
- * because NV has moved over to ahci for newer controllers.
415
- */
416
408
static struct ata_port_operations nv_common_ops = {
417
409
.inherits = & ata_bmdma_port_ops ,
418
- .hardreset = nv_hardreset ,
419
410
.scr_read = nv_scr_read ,
420
411
.scr_write = nv_scr_write ,
421
412
};
@@ -429,12 +420,22 @@ static struct ata_port_operations nv_generic_ops = {
429
420
.hardreset = ATA_OP_NULL ,
430
421
};
431
422
423
+ /* OSDL bz3352 reports that nf2/3 controllers can't determine device
424
+ * signature reliably. Also, the following thread reports detection
425
+ * failure on cold boot with the standard debouncing timing.
426
+ *
427
+ * http://thread.gmane.org/gmane.linux.ide/34098
428
+ *
429
+ * Debounce with hotplug timing and request follow-up SRST.
430
+ */
432
431
static struct ata_port_operations nv_nf2_ops = {
433
432
.inherits = & nv_common_ops ,
434
433
.freeze = nv_nf2_freeze ,
435
434
.thaw = nv_nf2_thaw ,
435
+ .hardreset = nv_nf2_hardreset ,
436
436
};
437
437
438
+ /* CK804 finally gets hardreset right */
438
439
static struct ata_port_operations nv_ck804_ops = {
439
440
.inherits = & nv_common_ops ,
440
441
.freeze = nv_ck804_freeze ,
@@ -443,7 +444,7 @@ static struct ata_port_operations nv_ck804_ops = {
443
444
};
444
445
445
446
static struct ata_port_operations nv_adma_ops = {
446
- .inherits = & nv_common_ops ,
447
+ .inherits = & nv_ck804_ops ,
447
448
448
449
.check_atapi_dma = nv_adma_check_atapi_dma ,
449
450
.sff_tf_read = nv_adma_tf_read ,
@@ -467,7 +468,7 @@ static struct ata_port_operations nv_adma_ops = {
467
468
};
468
469
469
470
static struct ata_port_operations nv_swncq_ops = {
470
- .inherits = & nv_common_ops ,
471
+ .inherits = & nv_generic_ops ,
471
472
472
473
.qc_defer = ata_std_qc_defer ,
473
474
.qc_prep = nv_swncq_qc_prep ,
@@ -1553,6 +1554,17 @@ static void nv_nf2_thaw(struct ata_port *ap)
1553
1554
iowrite8 (mask , scr_addr + NV_INT_ENABLE );
1554
1555
}
1555
1556
1557
+ static int nv_nf2_hardreset (struct ata_link * link , unsigned int * class ,
1558
+ unsigned long deadline )
1559
+ {
1560
+ bool online ;
1561
+ int rc ;
1562
+
1563
+ rc = sata_link_hardreset (link , sata_deb_timing_hotplug , deadline ,
1564
+ & online , NULL );
1565
+ return online ? - EAGAIN : rc ;
1566
+ }
1567
+
1556
1568
static void nv_ck804_freeze (struct ata_port * ap )
1557
1569
{
1558
1570
void __iomem * mmio_base = ap -> host -> iomap [NV_MMIO_BAR ];
@@ -1605,21 +1617,6 @@ static void nv_mcp55_thaw(struct ata_port *ap)
1605
1617
ata_sff_thaw (ap );
1606
1618
}
1607
1619
1608
- static int nv_hardreset (struct ata_link * link , unsigned int * class ,
1609
- unsigned long deadline )
1610
- {
1611
- int rc ;
1612
-
1613
- /* SATA hardreset fails to retrieve proper device signature on
1614
- * some controllers. Request follow up SRST. For more info,
1615
- * see http://bugzilla.kernel.org/show_bug.cgi?id=3352
1616
- */
1617
- rc = sata_sff_hardreset (link , class , deadline );
1618
- if (rc )
1619
- return rc ;
1620
- return - EAGAIN ;
1621
- }
1622
-
1623
1620
static void nv_adma_error_handler (struct ata_port * ap )
1624
1621
{
1625
1622
struct nv_adma_port_priv * pp = ap -> private_data ;
0 commit comments