Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a22e6444 authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

ahci: implement skip_host_reset parameter



Under certain circumstances (SSP turned off by the BIOS) and for
debugging purposes, skipping global controller reset is helpful.  Add
a kernel parameter for it.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent dea55137
Loading
Loading
Loading
Loading
+29 −19
Original line number Diff line number Diff line
@@ -49,6 +49,10 @@
#define DRV_NAME	"ahci"
#define DRV_VERSION	"3.0"

static int ahci_skip_host_reset;
module_param_named(skip_host_reset, ahci_skip_host_reset, int, 0444);
MODULE_PARM_DESC(skip_host_reset, "skip global host reset (0=don't skip, 1=skip)");

static int ahci_enable_alpm(struct ata_port *ap,
		enum link_pm policy);
static void ahci_disable_alpm(struct ata_port *ap);
@@ -1088,6 +1092,7 @@ static int ahci_reset_controller(struct ata_host *host)
	ahci_enable_ahci(mmio);

	/* global controller reset */
	if (!ahci_skip_host_reset) {
		tmp = readl(mmio + HOST_CTL);
		if ((tmp & HOST_RESET) == 0) {
			writel(tmp | HOST_RESET, mmio + HOST_CTL);
@@ -1109,8 +1114,13 @@ static int ahci_reset_controller(struct ata_host *host)
		/* turn on AHCI mode */
		ahci_enable_ahci(mmio);

	/* some registers might be cleared on reset.  restore initial values */
		/* Some registers might be cleared on reset.  Restore
		 * initial values.
		 */
		ahci_restore_initial_config(host);
	} else
		dev_printk(KERN_INFO, host->dev,
			   "skipping global host reset\n");

	if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
		u16 tmp16;