[PATCH] sata_sil24: implement sil24_init_port()
authorTejun Heo <htejun@gmail.com>
Tue, 11 Apr 2006 13:32:19 +0000 (22:32 +0900)
committerJeff Garzik <jeff@garzik.org>
Tue, 11 Apr 2006 17:31:36 +0000 (13:31 -0400)
Implement sil24_init_port which performs port initialization via
PORT_CS_INIT.  To be used later by softreset and EH.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/scsi/sata_sil24.c

index c535607e995a0043f3a9a6abd64fd6832bb6a6e2..8199527966ebf578f04a473608b9fd5b1e9c09ea 100644 (file)
@@ -437,6 +437,22 @@ static void sil24_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
        *tf = pp->tf;
 }
 
+static int sil24_init_port(struct ata_port *ap)
+{
+       void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;
+       u32 tmp;
+
+       writel(PORT_CS_INIT, port + PORT_CTRL_STAT);
+       ata_wait_register(port + PORT_CTRL_STAT,
+                         PORT_CS_INIT, PORT_CS_INIT, 10, 100);
+       tmp = ata_wait_register(port + PORT_CTRL_STAT,
+                               PORT_CS_RDY, 0, 10, 100);
+
+       if ((tmp & (PORT_CS_INIT | PORT_CS_RDY)) != PORT_CS_RDY)
+               return -EIO;
+       return 0;
+}
+
 static int sil24_softreset(struct ata_port *ap, unsigned int *class)
 {
        void __iomem *port = (void __iomem *)ap->ioaddr.cmd_addr;