View | Details | Raw Unified | Return to bug 11615 | Differences between
and this patch

Collapse All | Expand All

(-)a/drivers/ata/sata_nv.c (-6 / +40 lines)
Lines 309-314 static void nv_nf2_freeze(struct ata_port *ap); Link Here
309
static void nv_nf2_thaw(struct ata_port *ap);
309
static void nv_nf2_thaw(struct ata_port *ap);
310
static void nv_ck804_freeze(struct ata_port *ap);
310
static void nv_ck804_freeze(struct ata_port *ap);
311
static void nv_ck804_thaw(struct ata_port *ap);
311
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);
312
static int nv_adma_slave_config(struct scsi_device *sdev);
314
static int nv_adma_slave_config(struct scsi_device *sdev);
313
static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc);
315
static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc);
314
static void nv_adma_qc_prep(struct ata_queued_cmd *qc);
316
static void nv_adma_qc_prep(struct ata_queued_cmd *qc);
Lines 403-430 static struct scsi_host_template nv_swncq_sht = { Link Here
403
	.slave_configure	= nv_swncq_slave_config,
405
	.slave_configure	= nv_swncq_slave_config,
404
};
406
};
405
407
406
static struct ata_port_operations nv_generic_ops = {
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
static struct ata_port_operations nv_common_ops = {
407
	.inherits		= &ata_bmdma_port_ops,
417
	.inherits		= &ata_bmdma_port_ops,
408
	.hardreset		= ATA_OP_NULL,
418
	.hardreset		= nv_hardreset,
409
	.scr_read		= nv_scr_read,
419
	.scr_read		= nv_scr_read,
410
	.scr_write		= nv_scr_write,
420
	.scr_write		= nv_scr_write,
411
};
421
};
412
422
423
/* OSDL bz11195 reports that link doesn't come online after hardreset
424
 * on generic nv's and there have been several other similar reports
425
 * on linux-ide.  Disable hardreset for generic nv's.
426
 */
427
static struct ata_port_operations nv_generic_ops = {
428
	.inherits		= &nv_common_ops,
429
	.hardreset		= ATA_OP_NULL,
430
};
431
413
static struct ata_port_operations nv_nf2_ops = {
432
static struct ata_port_operations nv_nf2_ops = {
414
	.inherits		= &nv_generic_ops,
433
	.inherits		= &nv_common_ops,
415
	.freeze			= nv_nf2_freeze,
434
	.freeze			= nv_nf2_freeze,
416
	.thaw			= nv_nf2_thaw,
435
	.thaw			= nv_nf2_thaw,
417
};
436
};
418
437
419
static struct ata_port_operations nv_ck804_ops = {
438
static struct ata_port_operations nv_ck804_ops = {
420
	.inherits		= &nv_generic_ops,
439
	.inherits		= &nv_common_ops,
421
	.freeze			= nv_ck804_freeze,
440
	.freeze			= nv_ck804_freeze,
422
	.thaw			= nv_ck804_thaw,
441
	.thaw			= nv_ck804_thaw,
423
	.host_stop		= nv_ck804_host_stop,
442
	.host_stop		= nv_ck804_host_stop,
424
};
443
};
425
444
426
static struct ata_port_operations nv_adma_ops = {
445
static struct ata_port_operations nv_adma_ops = {
427
	.inherits		= &nv_generic_ops,
446
	.inherits		= &nv_common_ops,
428
447
429
	.check_atapi_dma	= nv_adma_check_atapi_dma,
448
	.check_atapi_dma	= nv_adma_check_atapi_dma,
430
	.sff_tf_read		= nv_adma_tf_read,
449
	.sff_tf_read		= nv_adma_tf_read,
Lines 448-454 static struct ata_port_operations nv_adma_ops = { Link Here
448
};
467
};
449
468
450
static struct ata_port_operations nv_swncq_ops = {
469
static struct ata_port_operations nv_swncq_ops = {
451
	.inherits		= &nv_generic_ops,
470
	.inherits		= &nv_common_ops,
452
471
453
	.qc_defer		= ata_std_qc_defer,
472
	.qc_defer		= ata_std_qc_defer,
454
	.qc_prep		= nv_swncq_qc_prep,
473
	.qc_prep		= nv_swncq_qc_prep,
Lines 1586-1591 static void nv_mcp55_thaw(struct ata_port *ap) Link Here
1586
	ata_sff_thaw(ap);
1605
	ata_sff_thaw(ap);
1587
}
1606
}
1588
1607
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
1589
static void nv_adma_error_handler(struct ata_port *ap)
1623
static void nv_adma_error_handler(struct ata_port *ap)
1590
{
1624
{
1591
	struct nv_adma_port_priv *pp = ap->private_data;
1625
	struct nv_adma_port_priv *pp = ap->private_data;

Return to bug 11615