|
@@ -586,35 +586,18 @@ static void ahci_power_down(void __iomem *port_mmio, u32 cap)
|
|
|
{
|
|
|
u32 cmd, scontrol;
|
|
|
|
|
|
- cmd = readl(port_mmio + PORT_CMD) & ~PORT_CMD_ICC_MASK;
|
|
|
-
|
|
|
- if (cap & HOST_CAP_SSC) {
|
|
|
- /* enable transitions to slumber mode */
|
|
|
- scontrol = readl(port_mmio + PORT_SCR_CTL);
|
|
|
- if ((scontrol & 0x0f00) > 0x100) {
|
|
|
- scontrol &= ~0xf00;
|
|
|
- writel(scontrol, port_mmio + PORT_SCR_CTL);
|
|
|
- }
|
|
|
-
|
|
|
- /* put device into slumber mode */
|
|
|
- writel(cmd | PORT_CMD_ICC_SLUMBER, port_mmio + PORT_CMD);
|
|
|
-
|
|
|
- /* wait for the transition to complete */
|
|
|
- ata_wait_register(port_mmio + PORT_CMD, PORT_CMD_ICC_SLUMBER,
|
|
|
- PORT_CMD_ICC_SLUMBER, 1, 50);
|
|
|
- }
|
|
|
+ if (!(cap & HOST_CAP_SSS))
|
|
|
+ return;
|
|
|
|
|
|
- /* put device into listen mode */
|
|
|
- if (cap & HOST_CAP_SSS) {
|
|
|
- /* first set PxSCTL.DET to 0 */
|
|
|
- scontrol = readl(port_mmio + PORT_SCR_CTL);
|
|
|
- scontrol &= ~0xf;
|
|
|
- writel(scontrol, port_mmio + PORT_SCR_CTL);
|
|
|
+ /* put device into listen mode, first set PxSCTL.DET to 0 */
|
|
|
+ scontrol = readl(port_mmio + PORT_SCR_CTL);
|
|
|
+ scontrol &= ~0xf;
|
|
|
+ writel(scontrol, port_mmio + PORT_SCR_CTL);
|
|
|
|
|
|
- /* then set PxCMD.SUD to 0 */
|
|
|
- cmd &= ~PORT_CMD_SPIN_UP;
|
|
|
- writel(cmd, port_mmio + PORT_CMD);
|
|
|
- }
|
|
|
+ /* then set PxCMD.SUD to 0 */
|
|
|
+ cmd = readl(port_mmio + PORT_CMD) & ~PORT_CMD_ICC_MASK;
|
|
|
+ cmd &= ~PORT_CMD_SPIN_UP;
|
|
|
+ writel(cmd, port_mmio + PORT_CMD);
|
|
|
}
|
|
|
|
|
|
static void ahci_init_port(void __iomem *port_mmio, u32 cap,
|