diff options
Diffstat (limited to 'drivers/ata/sata_nv.c')
-rw-r--r-- | drivers/ata/sata_nv.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/ata/sata_nv.c b/drivers/ata/sata_nv.c index c49ad0e61b6f..f65b53785a8f 100644 --- a/drivers/ata/sata_nv.c +++ b/drivers/ata/sata_nv.c | |||
@@ -421,26 +421,33 @@ static struct ata_port_operations nv_generic_ops = { | |||
421 | .hardreset = ATA_OP_NULL, | 421 | .hardreset = ATA_OP_NULL, |
422 | }; | 422 | }; |
423 | 423 | ||
424 | /* OSDL bz3352 reports that nf2/3 controllers can't determine device | 424 | /* nf2 is ripe with hardreset related problems. |
425 | * signature reliably. Also, the following thread reports detection | 425 | * |
426 | * failure on cold boot with the standard debouncing timing. | 426 | * kernel bz#3352 reports nf2/3 controllers can't determine device |
427 | * signature reliably. The following thread reports detection failure | ||
428 | * on cold boot with the standard debouncing timing. | ||
427 | * | 429 | * |
428 | * http://thread.gmane.org/gmane.linux.ide/34098 | 430 | * http://thread.gmane.org/gmane.linux.ide/34098 |
429 | * | 431 | * |
430 | * Debounce with hotplug timing and request follow-up SRST. | 432 | * And bz#12176 reports that hardreset simply doesn't work on nf2. |
433 | * Give up on it and just don't do hardreset. | ||
431 | */ | 434 | */ |
432 | static struct ata_port_operations nv_nf2_ops = { | 435 | static struct ata_port_operations nv_nf2_ops = { |
433 | .inherits = &nv_common_ops, | 436 | .inherits = &nv_generic_ops, |
434 | .freeze = nv_nf2_freeze, | 437 | .freeze = nv_nf2_freeze, |
435 | .thaw = nv_nf2_thaw, | 438 | .thaw = nv_nf2_thaw, |
436 | .hardreset = nv_noclassify_hardreset, | ||
437 | }; | 439 | }; |
438 | 440 | ||
439 | /* CK804 finally gets hardreset right */ | 441 | /* For initial probing after boot and hot plugging, hardreset mostly |
442 | * works fine on CK804 but curiously, reprobing on the initial port by | ||
443 | * rescanning or rmmod/insmod fails to acquire the initial D2H Reg FIS | ||
444 | * in somewhat undeterministic way. Use noclassify hardreset. | ||
445 | */ | ||
440 | static struct ata_port_operations nv_ck804_ops = { | 446 | static struct ata_port_operations nv_ck804_ops = { |
441 | .inherits = &nv_common_ops, | 447 | .inherits = &nv_common_ops, |
442 | .freeze = nv_ck804_freeze, | 448 | .freeze = nv_ck804_freeze, |
443 | .thaw = nv_ck804_thaw, | 449 | .thaw = nv_ck804_thaw, |
450 | .hardreset = nv_noclassify_hardreset, | ||
444 | .host_stop = nv_ck804_host_stop, | 451 | .host_stop = nv_ck804_host_stop, |
445 | }; | 452 | }; |
446 | 453 | ||
@@ -2516,7 +2523,7 @@ static void __exit nv_exit(void) | |||
2516 | module_init(nv_init); | 2523 | module_init(nv_init); |
2517 | module_exit(nv_exit); | 2524 | module_exit(nv_exit); |
2518 | module_param_named(adma, adma_enabled, bool, 0444); | 2525 | module_param_named(adma, adma_enabled, bool, 0444); |
2519 | MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: true)"); | 2526 | MODULE_PARM_DESC(adma, "Enable use of ADMA (Default: false)"); |
2520 | module_param_named(swncq, swncq_enabled, bool, 0444); | 2527 | module_param_named(swncq, swncq_enabled, bool, 0444); |
2521 | MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)"); | 2528 | MODULE_PARM_DESC(swncq, "Enable use of SWNCQ (Default: true)"); |
2522 | 2529 | ||