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

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
...@@ -49,6 +49,10 @@ ...@@ -49,6 +49,10 @@
#define DRV_NAME "ahci" #define DRV_NAME "ahci"
#define DRV_VERSION "3.0" #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, static int ahci_enable_alpm(struct ata_port *ap,
enum link_pm policy); enum link_pm policy);
static void ahci_disable_alpm(struct ata_port *ap); static void ahci_disable_alpm(struct ata_port *ap);
...@@ -1088,6 +1092,7 @@ static int ahci_reset_controller(struct ata_host *host) ...@@ -1088,6 +1092,7 @@ static int ahci_reset_controller(struct ata_host *host)
ahci_enable_ahci(mmio); ahci_enable_ahci(mmio);
/* global controller reset */ /* global controller reset */
if (!ahci_skip_host_reset) {
tmp = readl(mmio + HOST_CTL); tmp = readl(mmio + HOST_CTL);
if ((tmp & HOST_RESET) == 0) { if ((tmp & HOST_RESET) == 0) {
writel(tmp | HOST_RESET, mmio + HOST_CTL); writel(tmp | HOST_RESET, mmio + HOST_CTL);
...@@ -1109,8 +1114,13 @@ static int ahci_reset_controller(struct ata_host *host) ...@@ -1109,8 +1114,13 @@ static int ahci_reset_controller(struct ata_host *host)
/* turn on AHCI mode */ /* turn on AHCI mode */
ahci_enable_ahci(mmio); 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); ahci_restore_initial_config(host);
} else
dev_printk(KERN_INFO, host->dev,
"skipping global host reset\n");
if (pdev->vendor == PCI_VENDOR_ID_INTEL) { if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
u16 tmp16; u16 tmp16;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment