Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 87423
b: refs/heads/master
c: a22e644
h: refs/heads/master
i:
  87421: 315737f
  87419: d01debb
  87415: 78b9df2
  87407: 48fa072
  87391: ab99768
  87359: ffd985f
  87295: 47bd6e8
v: v3
  • Loading branch information
Tejun Heo authored and Jeff Garzik committed Mar 17, 2008
1 parent 9debc03 commit aa2371e
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 20 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: dea55137634226fd74d5187a15dee1244ec252cb
refs/heads/master: a22e64443f0aa4aa4e3c56a49e5c060e90752c07
48 changes: 29 additions & 19 deletions trunk/drivers/ata/ahci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -1088,29 +1092,35 @@ static int ahci_reset_controller(struct ata_host *host)
ahci_enable_ahci(mmio);

/* global controller reset */
tmp = readl(mmio + HOST_CTL);
if ((tmp & HOST_RESET) == 0) {
writel(tmp | HOST_RESET, mmio + HOST_CTL);
readl(mmio + HOST_CTL); /* flush */
}
if (!ahci_skip_host_reset) {
tmp = readl(mmio + HOST_CTL);
if ((tmp & HOST_RESET) == 0) {
writel(tmp | HOST_RESET, mmio + HOST_CTL);
readl(mmio + HOST_CTL); /* flush */
}

/* reset must complete within 1 second, or
* the hardware should be considered fried.
*/
ssleep(1);
/* reset must complete within 1 second, or
* the hardware should be considered fried.
*/
ssleep(1);

tmp = readl(mmio + HOST_CTL);
if (tmp & HOST_RESET) {
dev_printk(KERN_ERR, host->dev,
"controller reset failed (0x%x)\n", tmp);
return -EIO;
}
tmp = readl(mmio + HOST_CTL);
if (tmp & HOST_RESET) {
dev_printk(KERN_ERR, host->dev,
"controller reset failed (0x%x)\n", tmp);
return -EIO;
}

/* turn on AHCI mode */
ahci_enable_ahci(mmio);
/* turn on AHCI mode */
ahci_enable_ahci(mmio);

/* some registers might be cleared on reset. restore initial values */
ahci_restore_initial_config(host);
/* 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;
Expand Down

0 comments on commit aa2371e

Please sign in to comment.