linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH]AHCI: disable sntf cap for ich8
@ 2009-11-16  1:56 Shaohua Li
  2009-11-17  3:19 ` Jeff Garzik
  0 siblings, 1 reply; 2+ messages in thread
From: Shaohua Li @ 2009-11-16  1:56 UTC (permalink / raw)
  To: linux-ide, linux-kernel; +Cc: jgarzik, sean.hefty

I obseved there is a sata_async_notification() for every ahci interrupt. But the
async notification does nothing (this is hard disk drive and no pmp). This cause
cpu wastes some time on sntf register access.

It appears ICH AHCI doesn't support SNotification register, but the controller
reports it does. After quirking it, the async notification disappears.

PS. it appears all ICH don't support SNotification register from ICH manual, don't
know if we need quirk all ICH. I don't have machines with all kinds of ICH.

Signed-off-by: Shaohua Li <shaohua.li@intel.com>
---
 drivers/ata/ahci.c |   20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

Index: linux/drivers/ata/ahci.c
===================================================================
--- linux.orig/drivers/ata/ahci.c	2009-11-16 09:36:40.000000000 +0800
+++ linux/drivers/ata/ahci.c	2009-11-16 09:53:44.000000000 +0800
@@ -113,6 +113,7 @@ enum {
 	board_ahci_mcp65	= 6,
 	board_ahci_nopmp	= 7,
 	board_ahci_yesncq	= 8,
+	board_ahci_nosntf	= 9,
 
 	/* global controller registers */
 	HOST_CAP		= 0x00, /* host capabilities */
@@ -235,6 +236,7 @@ enum {
 	AHCI_HFLAG_NO_SUSPEND		= (1 << 10), /* don't suspend */
 	AHCI_HFLAG_SRST_TOUT_IS_OFFLINE	= (1 << 11), /* treat SRST timeout as
 							link offline */
+	AHCI_HFLAG_NO_SNTF		= (1 << 12), /* no sntf */
 
 	/* ap->flags bits */
 
@@ -508,7 +510,7 @@ static const struct ata_port_info ahci_p
 		.udma_mask	= ATA_UDMA6,
 		.port_ops	= &ahci_ops,
 	},
-	/* board_ahci_yesncq */
+	[board_ahci_yesncq] =
 	{
 		AHCI_HFLAGS	(AHCI_HFLAG_YES_NCQ),
 		.flags		= AHCI_FLAG_COMMON,
@@ -516,6 +518,14 @@ static const struct ata_port_info ahci_p
 		.udma_mask	= ATA_UDMA6,
 		.port_ops	= &ahci_ops,
 	},
+	[board_ahci_nosntf] =
+	{
+		AHCI_HFLAGS	(AHCI_HFLAG_NO_SNTF),
+		.flags		= AHCI_FLAG_COMMON,
+		.pio_mask	= ATA_PIO4,
+		.udma_mask	= ATA_UDMA6,
+		.port_ops	= &ahci_ops,
+	},
 };
 
 static const struct pci_device_id ahci_pci_tbl[] = {
@@ -531,7 +541,7 @@ static const struct pci_device_id ahci_p
 	{ PCI_VDEVICE(INTEL, 0x2683), board_ahci }, /* ESB2 */
 	{ PCI_VDEVICE(INTEL, 0x27c6), board_ahci }, /* ICH7-M DH */
 	{ PCI_VDEVICE(INTEL, 0x2821), board_ahci }, /* ICH8 */
-	{ PCI_VDEVICE(INTEL, 0x2822), board_ahci }, /* ICH8 */
+	{ PCI_VDEVICE(INTEL, 0x2822), board_ahci_nosntf }, /* ICH8 */
 	{ PCI_VDEVICE(INTEL, 0x2824), board_ahci }, /* ICH8 */
 	{ PCI_VDEVICE(INTEL, 0x2829), board_ahci }, /* ICH8M */
 	{ PCI_VDEVICE(INTEL, 0x282a), board_ahci }, /* ICH8M */
@@ -849,6 +859,12 @@ static void ahci_save_initial_config(str
 		cap &= ~HOST_CAP_PMP;
 	}
 
+	if ((cap & HOST_CAP_SNTF) && (hpriv->flags & AHCI_HFLAG_NO_SNTF)) {
+		dev_printk(KERN_INFO, &pdev->dev,
+			   "controller can't do SNTF, turning off CAP_SNTF\n");
+		cap &= ~HOST_CAP_SNTF;
+	}
+
 	if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361 &&
 	    port_map != 1) {
 		dev_printk(KERN_INFO, &pdev->dev,

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH]AHCI: disable sntf cap for ich8
  2009-11-16  1:56 [PATCH]AHCI: disable sntf cap for ich8 Shaohua Li
@ 2009-11-17  3:19 ` Jeff Garzik
  0 siblings, 0 replies; 2+ messages in thread
From: Jeff Garzik @ 2009-11-17  3:19 UTC (permalink / raw)
  To: Shaohua Li
  Cc: linux-ide, linux-kernel, jgarzik, sean.hefty, Arjan van de Ven,
	Alan Cox

On 11/15/2009 08:56 PM, Shaohua Li wrote:
> I obseved there is a sata_async_notification() for every ahci interrupt. But the
> async notification does nothing (this is hard disk drive and no pmp). This cause
> cpu wastes some time on sntf register access.
>
> It appears ICH AHCI doesn't support SNotification register, but the controller
> reports it does. After quirking it, the async notification disappears.

Patch applied.


> PS. it appears all ICH don't support SNotification register from ICH manual, don't
> know if we need quirk all ICH. I don't have machines with all kinds of ICH.

You work for Intel -- you or somebody needs to research and figure this 
out...  This is an Intel vendor issue that only Intel can definitively 
resolve.

	Jeff



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-11-17  3:19 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-16  1:56 [PATCH]AHCI: disable sntf cap for ich8 Shaohua Li
2009-11-17  3:19 ` Jeff Garzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).