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

Commit 3cc3eb11 authored by Jeff Garzik's avatar Jeff Garzik
Browse files

[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: default avatarJeff Garzik <jeff@garzik.org>
parent b90fe23b
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -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 */