mirror of https://gitee.com/openkylin/linux.git
[libata] AHCI: enable AHCI mode, before using AHCI reset
AHCI spec says host-reset bit may only be set when the ahci-enable bit is also set. Noticed by Peer Chen <peerchen@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
b90fe23bd5
commit
3cc3eb1148
|
@ -827,8 +827,14 @@ static int ahci_reset_controller(struct ata_host *host)
|
||||||
void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
|
void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
|
||||||
u32 tmp;
|
u32 tmp;
|
||||||
|
|
||||||
/* global controller reset */
|
/* we must be in AHCI mode, before using anything
|
||||||
|
* AHCI-specific, such as HOST_RESET.
|
||||||
|
*/
|
||||||
tmp = readl(mmio + HOST_CTL);
|
tmp = readl(mmio + HOST_CTL);
|
||||||
|
if (!(tmp & HOST_AHCI_EN))
|
||||||
|
writel(tmp | HOST_AHCI_EN, mmio + HOST_CTL);
|
||||||
|
|
||||||
|
/* global controller reset */
|
||||||
if ((tmp & HOST_RESET) == 0) {
|
if ((tmp & HOST_RESET) == 0) {
|
||||||
writel(tmp | HOST_RESET, mmio + HOST_CTL);
|
writel(tmp | HOST_RESET, mmio + HOST_CTL);
|
||||||
readl(mmio + HOST_CTL); /* flush */
|
readl(mmio + HOST_CTL); /* flush */
|
||||||
|
|
Loading…
Reference in New Issue