* [PATCH libata-dev-2.6:sil24] sil24: initialization fix
@ 2005-09-11 7:15 Tejun Heo
2005-09-12 16:58 ` Edward Falk
0 siblings, 1 reply; 3+ messages in thread
From: Tejun Heo @ 2005-09-11 7:15 UTC (permalink / raw)
To: Jeff Garzik; +Cc: mb, linux-ide, efalk
sil24 0.20 didn't use to perform (what seems to be) port multiplier
initialization and controller reset 0.10 driver does. This makes some
sil24 controllers malfunction. This patch adds PM initialization and
controller resetting to initilization. Please refer to the following
thread for more information.
http://marc.theaimsgroup.com/?l=linux-ide&m=112582819830324&w=2
http://marc.theaimsgroup.com/?l=linux-ide&m=112636045531060&w=2
Signed-off-by: Tejun Heo <htejun@gmail.com>
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c
--- a/drivers/scsi/sata_sil24.c
+++ b/drivers/scsi/sata_sil24.c
@@ -426,15 +426,11 @@ static void sil24_irq_clear(struct ata_p
/* unused */
}
-static void sil24_reset_controller(struct ata_port *ap)
+static int __sil24_reset_controller(void *port)
{
- void *port = (void *)ap->ioaddr.cmd_addr;
int cnt;
u32 tmp;
- printk(KERN_NOTICE DRV_NAME
- " ata%u: resetting controller...\n", ap->id);
-
/* Reset controller state. Is this correct? */
writel(PORT_CS_DEV_RST, port + PORT_CTRL_STAT);
readl(port + PORT_CTRL_STAT); /* sync */
@@ -446,9 +442,19 @@ static void sil24_reset_controller(struc
if (!(tmp & PORT_CS_DEV_RST))
break;
}
+
if (tmp & PORT_CS_DEV_RST)
- printk(KERN_ERR DRV_NAME
- " ata%u: failed to reset controller\n", ap->id);
+ return -1;
+ return 0;
+}
+
+static void sil24_reset_controller(struct ata_port *ap)
+{
+ printk(KERN_NOTICE DRV_NAME
+ " ata%u: resetting controller...\n", ap->id);
+ if (__sil24_reset_controller((void *)ap->ioaddr.cmd_addr))
+ printk(KERN_ERR DRV_NAME
+ " ata%u: failed to reset controller\n", ap->id);
}
static void sil24_eng_timeout(struct ata_port *ap)
@@ -740,6 +746,15 @@ static int sil24_init_one(struct pci_dev
/* Clear interrupts */
writel(0x0fff0fff, port + PORT_IRQ_STAT);
writel(PORT_CS_IRQ_WOC, port + PORT_CTRL_CLR);
+
+ /* Clear port multiplier enable and resume bits */
+ writel(PORT_CS_PM_EN | PORT_CS_RESUME, port + PORT_CTRL_CLR);
+
+ /* Reset itself */
+ if (__sil24_reset_controller(port))
+ printk(KERN_ERR DRV_NAME
+ "(%s): failed to reset controller\n",
+ pci_name(pdev));
}
/* Turn on interrupts */
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH libata-dev-2.6:sil24] sil24: initialization fix
2005-09-11 7:15 [PATCH libata-dev-2.6:sil24] sil24: initialization fix Tejun Heo
@ 2005-09-12 16:58 ` Edward Falk
2005-09-13 4:21 ` Tejun Heo
0 siblings, 1 reply; 3+ messages in thread
From: Edward Falk @ 2005-09-12 16:58 UTC (permalink / raw)
To: Tejun Heo; +Cc: Jeff Garzik, mb, linux-ide
Thanks, I'll try to merge those changes in. You should bump the version
number too.
I'll have a fully port multiplier-aware driver in a few more days for
you to look at.
-ed
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH libata-dev-2.6:sil24] sil24: initialization fix
2005-09-12 16:58 ` Edward Falk
@ 2005-09-13 4:21 ` Tejun Heo
0 siblings, 0 replies; 3+ messages in thread
From: Tejun Heo @ 2005-09-13 4:21 UTC (permalink / raw)
To: Edward Falk; +Cc: Jeff Garzik, mb, linux-ide
Hello, Edward.
> Thanks, I'll try to merge those changes in. You should bump the version
> number too.
Yeap, modified patch follows. Jeff, please ignore the previous
posting.
> I'll have a fully port multiplier-aware driver in a few more days for
> you to look at.
Great. I'll be expecting to see it soon. :-)
sil24 0.20 didn't use to perform (what seems to be) port multiplier
initialization and controller reset 0.10 driver does. This makes some
sil24 controllers malfunction. This patch adds PM initialization and
controller resetting to initilization and bumps version to 0.21.
Please refer to the following thread for more information.
http://marc.theaimsgroup.com/?l=linux-ide&m=112582819830324&w=2
http://marc.theaimsgroup.com/?l=linux-ide&m=112636045531060&w=2
Signed-off-by: Tejun Heo <htejun@gmail.com>
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c
--- a/drivers/scsi/sata_sil24.c
+++ b/drivers/scsi/sata_sil24.c
@@ -41,7 +41,7 @@
#include <asm/io.h>
#define DRV_NAME "sata_sil24"
-#define DRV_VERSION "0.20" /* Silicon Image's preview driver was 0.10 */
+#define DRV_VERSION "0.21" /* Silicon Image's preview driver was 0.10 */
#define NR_PORTS 4
@@ -426,15 +426,11 @@ static void sil24_irq_clear(struct ata_p
/* unused */
}
-static void sil24_reset_controller(struct ata_port *ap)
+static int __sil24_reset_controller(void *port)
{
- void *port = (void *)ap->ioaddr.cmd_addr;
int cnt;
u32 tmp;
- printk(KERN_NOTICE DRV_NAME
- " ata%u: resetting controller...\n", ap->id);
-
/* Reset controller state. Is this correct? */
writel(PORT_CS_DEV_RST, port + PORT_CTRL_STAT);
readl(port + PORT_CTRL_STAT); /* sync */
@@ -446,9 +442,19 @@ static void sil24_reset_controller(struc
if (!(tmp & PORT_CS_DEV_RST))
break;
}
+
if (tmp & PORT_CS_DEV_RST)
- printk(KERN_ERR DRV_NAME
- " ata%u: failed to reset controller\n", ap->id);
+ return -1;
+ return 0;
+}
+
+static void sil24_reset_controller(struct ata_port *ap)
+{
+ printk(KERN_NOTICE DRV_NAME
+ " ata%u: resetting controller...\n", ap->id);
+ if (__sil24_reset_controller((void *)ap->ioaddr.cmd_addr))
+ printk(KERN_ERR DRV_NAME
+ " ata%u: failed to reset controller\n", ap->id);
}
static void sil24_eng_timeout(struct ata_port *ap)
@@ -740,6 +746,15 @@ static int sil24_init_one(struct pci_dev
/* Clear interrupts */
writel(0x0fff0fff, port + PORT_IRQ_STAT);
writel(PORT_CS_IRQ_WOC, port + PORT_CTRL_CLR);
+
+ /* Clear port multiplier enable and resume bits */
+ writel(PORT_CS_PM_EN | PORT_CS_RESUME, port + PORT_CTRL_CLR);
+
+ /* Reset itself */
+ if (__sil24_reset_controller(port))
+ printk(KERN_ERR DRV_NAME
+ "(%s): failed to reset controller\n",
+ pci_name(pdev));
}
/* Turn on interrupts */
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-09-13 4:21 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-09-11 7:15 [PATCH libata-dev-2.6:sil24] sil24: initialization fix Tejun Heo
2005-09-12 16:58 ` Edward Falk
2005-09-13 4:21 ` Tejun Heo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.