Commit 85afb934 authored by Mark Lord's avatar Mark Lord Committed by Jeff Garzik
Browse files

sata_mv: re-enable hotplug, update TODO list



Re-enable hotplug, now that the interrupt/error handling are mostly sane.
Also update the TODO list at the top.

Signed-off-by: default avatarMark Lord <mlord@pobox.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 8d07379d
Loading
Loading
Loading
Loading
+29 −50
Original line number Original line Diff line number Diff line
@@ -23,45 +23,33 @@
 */
 */


/*
/*
  sata_mv TODO list:
 * sata_mv TODO list:

 *
  1) Needs a full errata audit for all chipsets.  I implemented most
 * --> Errata workaround for NCQ device errors.
  of the errata workarounds found in the Marvell vendor driver, but
 *
  I distinctly remember a couple workarounds (one related to PCI-X)
 * --> More errata workarounds for PCI-X.
  are still needed.
 *

 * --> Complete a full errata audit for all chipsets to identify others.
  2) Improve/fix IRQ and error handling sequences.
 *

 * --> ATAPI support (Marvell claims the 60xx/70xx chips can do it).
  3) ATAPI support (Marvell claims the 60xx/70xx chips can do it).
 *

 * --> Investigate problems with PCI Message Signalled Interrupts (MSI).
  4) Think about TCQ support here, and for libata in general
 *
  with controllers that suppport it via host-queuing hardware
 * --> Cache frequently-accessed registers in mv_port_priv to reduce overhead.
  (a software-only implementation could be a nightmare).
 *

 * --> Develop a low-power-consumption strategy, and implement it.
  5) Investigate problems with PCI Message Signalled Interrupts (MSI).
 *

 * --> [Experiment, low priority] Investigate interrupt coalescing.
  6) Cache frequently-accessed registers in mv_port_priv to reduce overhead.
 *       Quite often, especially with PCI Message Signalled Interrupts (MSI),

 *       the overhead reduced by interrupt mitigation is quite often not
  7) Fix/reenable hot plug/unplug (should happen as a side-effect of (2) above).
 *       worth the latency cost.

 *
  8) Develop a low-power-consumption strategy, and implement it.
 * --> [Experiment, Marvell value added] Is it possible to use target

 *       mode to cross-connect two Linux boxes with Marvell cards?  If so,
  9) [Experiment, low priority] See if ATAPI can be supported using
 *       creating LibATA target mode support would be very interesting.
  "unknown FIS" or "vendor-specific FIS" support, or something creative
 *
  like that.
 *       Target mode, for those without docs, is the ability to directly

 *       connect two SATA ports.
  10) [Experiment, low priority] Investigate interrupt coalescing.
  Quite often, especially with PCI Message Signalled Interrupts (MSI),
  the overhead reduced by interrupt mitigation is quite often not
  worth the latency cost.

  11) [Experiment, Marvell value added] Is it possible to use target
  mode to cross-connect two Linux boxes with Marvell cards?  If so,
  creating LibATA target mode support would be very interesting.

  Target mode, for those without docs, is the ability to directly
  connect two SATA controllers.

 */
 */


#include <linux/kernel.h>
#include <linux/kernel.h>
@@ -300,9 +288,7 @@ enum {
	EDMA_ERR_IRQ_TRANSIENT  = EDMA_ERR_LNK_CTRL_RX_0 |
	EDMA_ERR_IRQ_TRANSIENT  = EDMA_ERR_LNK_CTRL_RX_0 |
				  EDMA_ERR_LNK_CTRL_RX_1 |
				  EDMA_ERR_LNK_CTRL_RX_1 |
				  EDMA_ERR_LNK_CTRL_RX_3 |
				  EDMA_ERR_LNK_CTRL_RX_3 |
				  EDMA_ERR_LNK_CTRL_TX |
				  EDMA_ERR_LNK_CTRL_TX,
				 /* temporary, until we fix hotplug: */
				 (EDMA_ERR_DEV_DCON | EDMA_ERR_DEV_CON),


	EDMA_EH_FREEZE		= EDMA_ERR_D_PAR |
	EDMA_EH_FREEZE		= EDMA_ERR_D_PAR |
				  EDMA_ERR_PRD_PAR |
				  EDMA_ERR_PRD_PAR |
@@ -2124,13 +2110,6 @@ static int mv6_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
		printk(KERN_ERR DRV_NAME ": can't clear global reset\n");
		printk(KERN_ERR DRV_NAME ": can't clear global reset\n");
		rc = 1;
		rc = 1;
	}
	}
	/*
	 * Temporary: wait 3 seconds before port-probing can happen,
	 * so that we don't miss finding sleepy SilXXXX port-multipliers.
	 * This can go away once hotplug is fully/correctly implemented.
	 */
	if (rc == 0)
		msleep(3000);
done:
done:
	return rc;
	return rc;
}
}