* [PATCH] Add IDE mode support for SB600 SATA
@ 2006-11-23 4:20 Conke Hu
2006-11-23 8:05 ` Arjan van de Ven
` (2 more replies)
0 siblings, 3 replies; 20+ messages in thread
From: Conke Hu @ 2006-11-23 4:20 UTC (permalink / raw)
To: linux-kernel, alan, Andrew Morton, Jeff Garzik
ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch will make SB600 SATA run in AHCI mode even if it was set as IDE mode by system BIOS.
Signed-off-by: conke.hu@amd.com
---------
--- linux-2.6.19-rc6-git4/drivers/pci/quirks.c.orig 2006-11-23 19:45:49.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/pci/quirks.c 2006-11-23 19:34:23.000000000 +0800
@@ -795,6 +795,25 @@ static void __init quirk_mediagx_master(
}
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master );
+
+#if defined(CONFIG_SATA_AHCI) || defined(CONFIG_SATA_AHCI_MODULE)
+static void __devinit quirk_sb600_sata(struct pci_dev *pdev)
+{
+ /* set sb600 sata to ahci mode */
+ if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
+ u8 tmp;
+
+ pci_read_config_byte(pdev, 0x40, &tmp);
+ pci_write_config_byte(pdev, 0x40, tmp|1);
+ pci_write_config_byte(pdev, 0x9, 1);
+ pci_write_config_byte(pdev, 0xa, 6);
+ pci_write_config_byte(pdev, 0x40, tmp);
+
+ pdev->class = 0x010601;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_sb600_sata);
+#endif
/*
* As per PCI spec, ignore base address registers 0-3 of the IDE controllers
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-23 4:20 [PATCH] Add IDE mode support for SB600 SATA Conke Hu
@ 2006-11-23 8:05 ` Arjan van de Ven
2006-11-23 11:22 ` Alan
2006-11-23 11:21 ` Alan
2006-11-24 6:01 ` Tejun Heo
2 siblings, 1 reply; 20+ messages in thread
From: Arjan van de Ven @ 2006-11-23 8:05 UTC (permalink / raw)
To: Conke Hu; +Cc: linux-kernel, alan, Andrew Morton, Jeff Garzik
On Thu, 2006-11-23 at 12:20 +0800, Conke Hu wrote:
> ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch will make SB600 SATA run in AHCI mode even if it was set as IDE mode by system BIOS.
is this really the right thing? You're overriding a user chosen
configuration here.... while that might be justifiable.. it's probably a
good idea to at least provide a safety-valve for this one. The user
might have made that selection very deliberately.
--
if you want to mail me at work (you don't), use arjan (at) linux.intel.com
Test the interaction between Linux and your BIOS via http://www.linuxfirmwarekit.org
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-23 8:05 ` Arjan van de Ven
@ 2006-11-23 11:22 ` Alan
2006-11-23 13:12 ` Arjan van de Ven
0 siblings, 1 reply; 20+ messages in thread
From: Alan @ 2006-11-23 11:22 UTC (permalink / raw)
To: Arjan van de Ven; +Cc: Conke Hu, linux-kernel, Andrew Morton, Jeff Garzik
> is this really the right thing? You're overriding a user chosen
> configuration here.... while that might be justifiable.. it's probably a
> good idea to at least provide a safety-valve for this one. The user
> might have made that selection very deliberately.
Its what we do for other similar cases and I think its the right thing to
do in this situation. One reason for this is that with multi-boot boxes
you have to set the BIOS option to the dumbest one unless the smart OS's
reconfigure the device.
Alan
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-23 11:22 ` Alan
@ 2006-11-23 13:12 ` Arjan van de Ven
0 siblings, 0 replies; 20+ messages in thread
From: Arjan van de Ven @ 2006-11-23 13:12 UTC (permalink / raw)
To: Alan; +Cc: Conke Hu, linux-kernel, Andrew Morton, Jeff Garzik
On Thu, 2006-11-23 at 11:22 +0000, Alan wrote:
> > is this really the right thing? You're overriding a user chosen
> > configuration here.... while that might be justifiable.. it's probably a
> > good idea to at least provide a safety-valve for this one. The user
> > might have made that selection very deliberately.
>
> Its what we do for other similar cases and I think its the right thing to
> do in this situation. One reason for this is that with multi-boot boxes
> you have to set the BIOS option to the dumbest one unless the smart OS's
> reconfigure the device.
while I can appreciate that.. it does assume things like SMM not
assuming things about it; and on resume.. has to happen as again/well :)
--
if you want to mail me at work (you don't), use arjan (at) linux.intel.com
Test the interaction between Linux and your BIOS via http://www.linuxfirmwarekit.org
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-23 4:20 [PATCH] Add IDE mode support for SB600 SATA Conke Hu
2006-11-23 8:05 ` Arjan van de Ven
@ 2006-11-23 11:21 ` Alan
2006-11-24 6:01 ` Tejun Heo
2 siblings, 0 replies; 20+ messages in thread
From: Alan @ 2006-11-23 11:21 UTC (permalink / raw)
To: Conke Hu; +Cc: linux-kernel, Andrew Morton, Jeff Garzik
On Thu, 23 Nov 2006 12:20:37 +0800
"Conke Hu" <conke.hu@amd.com> wrote:
>
> ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch will make SB600 SATA run in AHCI mode even if it was set as IDE mode by system BIOS.
>
> Signed-off-by: conke.hu@amd.com
Acked-by: Alan Cox <alan@redhat.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-23 4:20 [PATCH] Add IDE mode support for SB600 SATA Conke Hu
2006-11-23 8:05 ` Arjan van de Ven
2006-11-23 11:21 ` Alan
@ 2006-11-24 6:01 ` Tejun Heo
2006-11-24 7:05 ` Tejun Heo
2 siblings, 1 reply; 20+ messages in thread
From: Tejun Heo @ 2006-11-24 6:01 UTC (permalink / raw)
To: Conke Hu; +Cc: linux-kernel, alan, Andrew Morton, Jeff Garzik
Conke Hu wrote:
> ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch will make SB600 SATA run in AHCI mode even if it was set as IDE mode by system BIOS.
>
> Signed-off-by: conke.hu@amd.com
> ---------
> --- linux-2.6.19-rc6-git4/drivers/pci/quirks.c.orig 2006-11-23 19:45:49.000000000 +0800
> +++ linux-2.6.19-rc6-git4/drivers/pci/quirks.c 2006-11-23 19:34:23.000000000 +0800
> @@ -795,6 +795,25 @@ static void __init quirk_mediagx_master(
> }
> }
> DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master );
> +
> +#if defined(CONFIG_SATA_AHCI) || defined(CONFIG_SATA_AHCI_MODULE)
> +static void __devinit quirk_sb600_sata(struct pci_dev *pdev)
> +{
> + /* set sb600 sata to ahci mode */
> + if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
> + u8 tmp;
> +
> + pci_read_config_byte(pdev, 0x40, &tmp);
> + pci_write_config_byte(pdev, 0x40, tmp|1);
> + pci_write_config_byte(pdev, 0x9, 1);
> + pci_write_config_byte(pdev, 0xa, 6);
> + pci_write_config_byte(pdev, 0x40, tmp);
> +
Two trailing tabs in the above line. Please remove those.
> + pdev->class = 0x010601;
> + }
> +}
> +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_sb600_sata);
> +#endif
>
> /*
> * As per PCI spec, ignore base address registers 0-3 of the IDE controllers
Other than that, Acked-by: Tejun Heo <htejun@gmail.com>
--
tejun
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-24 6:01 ` Tejun Heo
@ 2006-11-24 7:05 ` Tejun Heo
2006-11-24 11:13 ` Alan
0 siblings, 1 reply; 20+ messages in thread
From: Tejun Heo @ 2006-11-24 7:05 UTC (permalink / raw)
To: Conke Hu; +Cc: linux-kernel, alan, Andrew Morton, Jeff Garzik, arjan
Tejun Heo wrote:
> Conke Hu wrote:
>> ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE,
>> AHCI and RAID. Legacy/Native IDE mode is designed for compatibility
>> with some old OS without AHCI driver but looses SATAII/AHCI features
>> such as NCQ. This patch will make SB600 SATA run in AHCI mode even if
>> it was set as IDE mode by system BIOS.
[--snip--]
> Other than that, Acked-by: Tejun Heo <htejun@gmail.com>
At the second thought, I think this should be done in
ahci_init_controller().
* Unlike Jmicron's case, this doesn't affect PCI bus scan. Actually, it
does change class code but that's not as disruptive as Jmicron's case
and as long as ahci ignores class code, it doesn't really matter.
Driver can be chosen by changing loading order - this is both plus and
minus.
* As Arjan pointed out, that unlock-modify-lock sequence should be done
on resume too. ahci_init_controller() is the right place for such
stuff. This chip is going into notebooks, right?
--
tejun
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-24 7:05 ` Tejun Heo
@ 2006-11-24 11:13 ` Alan
2006-11-25 1:43 ` Tejun Heo
0 siblings, 1 reply; 20+ messages in thread
From: Alan @ 2006-11-24 11:13 UTC (permalink / raw)
To: Tejun Heo; +Cc: Conke Hu, linux-kernel, Andrew Morton, Jeff Garzik, arjan
> * Unlike Jmicron's case, this doesn't affect PCI bus scan. Actually, it
> does change class code but that's not as disruptive as Jmicron's case
> and as long as ahci ignores class code, it doesn't really matter.
> Driver can be chosen by changing loading order - this is both plus and
> minus.
The load order is basically undefined. You want AHCI so we should do
this early. That means either putting the same gunk all over the kernel
(drivers/ide, drivers/ata/*ati* drivers/ata/ahci) or in one place.
> * As Arjan pointed out, that unlock-modify-lock sequence should be done
> on resume too.
The infrastructure for this is already handled by the pci resume quirk
patches I sent.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-24 11:13 ` Alan
@ 2006-11-25 1:43 ` Tejun Heo
0 siblings, 0 replies; 20+ messages in thread
From: Tejun Heo @ 2006-11-25 1:43 UTC (permalink / raw)
To: Alan; +Cc: Conke Hu, linux-kernel, Andrew Morton, Jeff Garzik, arjan
Alan wrote:
>> * Unlike Jmicron's case, this doesn't affect PCI bus scan. Actually, it
>> does change class code but that's not as disruptive as Jmicron's case
>> and as long as ahci ignores class code, it doesn't really matter.
>> Driver can be chosen by changing loading order - this is both plus and
>> minus.
>
> The load order is basically undefined. You want AHCI so we should do
> this early. That means either putting the same gunk all over the kernel
> (drivers/ide, drivers/ata/*ati* drivers/ata/ahci) or in one place.
>
>> * As Arjan pointed out, that unlock-modify-lock sequence should be done
>> on resume too.
>
> The infrastructure for this is already handled by the pci resume quirk
> patches I sent.
As long as resume is properly handled, no problem.
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 20+ messages in thread
* RE: [PATCH] Add IDE mode support for SB600 SATA
@ 2006-11-24 5:21 Conke Hu
0 siblings, 0 replies; 20+ messages in thread
From: Conke Hu @ 2006-11-24 5:21 UTC (permalink / raw)
To: linux-kernel; +Cc: Alan
-----Original Message-----
From: linux-kernel-owner@vger.kernel.org [mailto:linux-kernel-owner@vger.kernel.org] On Behalf Of Alan
Sent: Friday, November 24, 2006 12:46 AM
To: Luugi Marsan
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Add IDE mode support for SB600 SATA
On Thu, 23 Nov 2006 11:35:47 -0500 (EST) luugi.marsan@amd.com (Luugi Marsan) wrote:
> From: Conke Hu <conke.hu@amd.com>
NAK - Conke Hu's later patch is better and that should be the one applied
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
-----------------------------------------------------------
Hi all,
We've sent out more than one patch on the sb600 sata issue and one of them has been applied, so please just ignore others.
The applied patch is:
--- linux-2.6.19-rc6-git4/drivers/pci/quirks.c.orig 2006-11-23 19:45:49.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/pci/quirks.c 2006-11-23 19:34:23.000000000 +0800
@@ -795,6 +795,25 @@ static void __init quirk_mediagx_master(
}
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master );
+
+#if defined(CONFIG_SATA_AHCI) || defined(CONFIG_SATA_AHCI_MODULE)
+static void __devinit quirk_sb600_sata(struct pci_dev *pdev)
+{
+ /* set sb600 sata to ahci mode */
+ if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
+ u8 tmp;
+
+ pci_read_config_byte(pdev, 0x40, &tmp);
+ pci_write_config_byte(pdev, 0x40, tmp|1);
+ pci_write_config_byte(pdev, 0x9, 1);
+ pci_write_config_byte(pdev, 0xa, 6);
+ pci_write_config_byte(pdev, 0x40, tmp);
+
+ pdev->class = 0x010601;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_sb600_sata);
+#endif
/*
* As per PCI spec, ignore base address registers 0-3 of the IDE controllers
Conke
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH] Add IDE mode support for SB600 SATA
@ 2006-11-23 16:35 Luugi Marsan
2006-11-23 16:45 ` Alan
0 siblings, 1 reply; 20+ messages in thread
From: Luugi Marsan @ 2006-11-23 16:35 UTC (permalink / raw)
To: linux-kernel
From: Conke Hu <conke.hu@amd.com>
ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch provides users with two options when the SB600 SATA is set as IDE mode by BIOS:
1. Setting the controller back to AHCI mode and using ahci as its driver.
2. Using the controller as a normal IDE.
What's more, without this patch, ahci driver always tries to claim all 4 modes of SB600 SATA, but fails in legacy IDE mode.
Signed-off-by; Felix Kuehling
diff -Nur linux-2.6.19-rc5-git7.orig/drivers/ata/ahci.c linux-2.6.19-rc5-git7/drivers/ata/ahci.c
--- linux-2.6.19-rc5-git7.orig/drivers/ata/ahci.c 2006-11-17 00:39:48.000000000 +0800
+++ linux-2.6.19-rc5-git7/drivers/ata/ahci.c 2006-11-17 00:40:48.000000000 +0800
@@ -1502,6 +1502,24 @@
WARN_ON(ATA_MAX_QUEUE > AHCI_MAX_CMDS);
+ if (pdev->vendor == PCI_VENDOR_ID_ATI && pdev->device == 0x4380 && (pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
+#ifdef CONFIG_SB600_AHCI_IDE
+ /* Make sure the SB600 SATA runs in AHCI mode. */
+ u8 tmp;
+
+ pci_read_config_byte(pdev, 0x40, &tmp);
+ pci_write_config_byte(pdev, 0x40, tmp|1);
+ pci_write_config_byte(pdev, 0x9, 1);
+ pci_write_config_byte(pdev, 0xa, 6);
+ pci_write_config_byte(pdev, 0x40, tmp);
+
+ pdev->class = 0x010601;
+#else
+ return -ENODEV;
+#endif
+ }
+
+
if (!printed_version++)
dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
diff -Nur linux-2.6.19-rc5-git7.orig/drivers/ata/Kconfig linux-2.6.19-rc5-git7/drivers/ata/Kconfig
--- linux-2.6.19-rc5-git7.orig/drivers/ata/Kconfig 2006-11-17 00:39:48.000000000 +0800
+++ linux-2.6.19-rc5-git7/drivers/ata/Kconfig 2006-11-17 00:41:01.000000000 +0800
@@ -27,6 +27,18 @@
If unsure, say N.
+config SB600_AHCI_IDE
+ bool "ATI SB600 IDE mode of SATA controller support"
+ depends on SATA_AHCI
+ default y
+ help
+ ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native
+ IDE, AHCI and RAID. If this option is enabled, the contoller
+ will run in AHCI mode and use ahci.ko as it's driver, otherwise
+ it will work as an IDE controller using atiixp.ko as it's driver.
+
+ If unsure, say y.
+
config SATA_SVW
tristate "ServerWorks Frodo / Apple K2 SATA support"
depends on PCI
diff -Nur linux-2.6.19-rc5-git7.orig/drivers/ide/pci/atiixp.c linux-2.6.19-rc5-git7/drivers/ide/pci/atiixp.c
--- linux-2.6.19-rc5-git7.orig/drivers/ide/pci/atiixp.c 2006-11-17 00:39:41.000000000 +0800
+++ linux-2.6.19-rc5-git7/drivers/ide/pci/atiixp.c 2006-11-17 00:41:19.000000000 +0800
@@ -318,7 +318,8 @@
hwif->drives[0].autodma = hwif->autodma;
}
-static void __devinit init_hwif_sb600_legacy(ide_hwif_t *hwif)
+#ifndef CONFIG_SB600_AHCI_IDE
+static void __devinit init_hwif_sb600_sata(ide_hwif_t *hwif)
{
hwif->atapi_dma = 1;
@@ -331,6 +332,7 @@
hwif->drives[0].autodma = hwif->autodma;
hwif->drives[1].autodma = hwif->autodma;
}
+#endif
static ide_pci_device_t atiixp_pci_info[] __devinitdata = {
{ /* 0 */
@@ -340,13 +342,16 @@
.autodma = AUTODMA,
.enablebits = {{0x48,0x01,0x00}, {0x48,0x08,0x00}},
.bootable = ON_BOARD,
- },{ /* 1 */
- .name = "ATI SB600 SATA Legacy IDE",
- .init_hwif = init_hwif_sb600_legacy,
- .channels = 2,
+ },
+#ifndef CONFIG_SB600_AHCI_IDE
+ { /* 1 */
+ .name = "ATI SB600 SATA (IDE mode)",
+ .init_hwif = init_hwif_sb600_sata,
+ .channels = 2,
.autodma = AUTODMA,
.bootable = ON_BOARD,
}
+#endif
};
/**
@@ -368,7 +373,9 @@
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
- { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID, PCI_ANY_ID, (PCI_CLASS_STORAGE_IDE<<8)|0x8a, 0xffff05, 1},
+#ifndef CONFIG_SB600_AHCI_IDE
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE<<8, 0xffff00, 1},
+#endif
{ 0, },
};
MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl);
^ permalink raw reply [flat|nested] 20+ messages in thread* RE: [PATCH] Add IDE mode support for SB600 SATA
@ 2006-11-23 10:16 Conke Hu
0 siblings, 0 replies; 20+ messages in thread
From: Conke Hu @ 2006-11-23 10:16 UTC (permalink / raw)
To: linux-kernel, Arjan van de Ven, alan, Andrew Morton, Jeff Garzik
-----Original Message-----
From: Arjan van de Ven [mailto:arjan@infradead.org]
Sent: Thursday, November 23, 2006 4:06 PM
To: Conke Hu
Cc: linux-kernel@vger.kernel.org; alan@lxorguk.ukuu.org.uk; Andrew Morton; Jeff Garzik
Subject: Re: [PATCH] Add IDE mode support for SB600 SATA
On Thu, 2006-11-23 at 12:20 +0800, Conke Hu wrote:
> ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch will make SB600 SATA run in AHCI mode even if it was set as IDE mode by system BIOS.
is this really the right thing? You're overriding a user chosen configuration here.... while that might be justifiable.. it's probably a good idea to at least provide a safety-valve for this one. The user might have made that selection very deliberately.
--
if you want to mail me at work (you don't), use arjan (at) linux.intel.com Test the interaction between Linux and your BIOS via http://www.linuxfirmwarekit.org
---------------------------------------------------------------------------------
Hi all,
For all your convenience, I paste 2 patches here, pls see following.
For the chip view, I think, either of them is reasonable, but kernel module maintainers maybe have more consideration, so if the module maintainers (Alan Cox?) have any advice, please let me know and I will modify my patch as soon as possible :) Thanks!
=============== solution 1 ==================
diff -Nur linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c linux-2.6.19-rc6-git4/drivers/ata/ahci.c
--- linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c 2006-11-23 13:36:52.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/ata/ahci.c 2006-11-23 13:50:13.000000000 +0800
@@ -323,7 +323,14 @@
{ PCI_VDEVICE(JMICRON, 0x2366), board_ahci }, /* JMicron JMB366 */
/* ATI */
+#ifdef CONFIG_SB600_AHCI_IDE
{ PCI_VDEVICE(ATI, 0x4380), board_ahci }, /* ATI SB600 non-raid */
+#else
+ { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_RAID<<8, 0xffff00,
+ board_ahci },
+ { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, 0x010600, 0xffff00,
+ board_ahci },
+#endif
{ PCI_VDEVICE(ATI, 0x4381), board_ahci }, /* ATI SB600 raid */
/* VIA */
diff -Nur linux-2.6.19-rc6-git4.orig/drivers/ata/Kconfig linux-2.6.19-rc6-git4/drivers/ata/Kconfig
--- linux-2.6.19-rc6-git4.orig/drivers/ata/Kconfig 2006-11-23 13:36:52.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/ata/Kconfig 2006-11-23 13:37:50.000000000 +0800
@@ -27,6 +27,18 @@
If unsure, say N.
+config SB600_AHCI_IDE
+ bool "ATI SB600 IDE mode of SATA controller support"
+ depends on SATA_AHCI
+ default y
+ help
+ ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native
+ IDE, AHCI and RAID. If this option is enabled, the contoller
+ will run in AHCI mode and use ahci.ko as it's driver, otherwise
+ it will work as an IDE controller using atiixp.ko as it's driver.
+
+ If unsure, say y.
+
config SATA_SVW
tristate "ServerWorks Frodo / Apple K2 SATA support"
depends on PCI
diff -Nur linux-2.6.19-rc6-git4.orig/drivers/ide/pci/atiixp.c linux-2.6.19-rc6-git4/drivers/ide/pci/atiixp.c
--- linux-2.6.19-rc6-git4.orig/drivers/ide/pci/atiixp.c 2006-11-23 13:36:51.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/ide/pci/atiixp.c 2006-11-23 13:38:08.000000000 +0800
@@ -318,7 +318,8 @@
hwif->drives[0].autodma = hwif->autodma; }
-static void __devinit init_hwif_sb600_legacy(ide_hwif_t *hwif)
+#ifndef CONFIG_SB600_AHCI_IDE
+static void __devinit init_hwif_sb600_sata(ide_hwif_t *hwif)
{
hwif->atapi_dma = 1;
@@ -331,6 +332,7 @@
hwif->drives[0].autodma = hwif->autodma;
hwif->drives[1].autodma = hwif->autodma; }
+#endif
static ide_pci_device_t atiixp_pci_info[] __devinitdata = {
{ /* 0 */
@@ -340,13 +342,16 @@
.autodma = AUTODMA,
.enablebits = {{0x48,0x01,0x00}, {0x48,0x08,0x00}},
.bootable = ON_BOARD,
- },{ /* 1 */
- .name = "ATI SB600 SATA Legacy IDE",
- .init_hwif = init_hwif_sb600_legacy,
+ },
+#ifndef CONFIG_SB600_AHCI_IDE
+ { /* 1 */
+ .name = "ATI SB600 SATA (IDE mode)",
+ .init_hwif = init_hwif_sb600_sata,
.channels = 2,
.autodma = AUTODMA,
.bootable = ON_BOARD,
}
+#endif
};
/**
@@ -368,7 +373,9 @@
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
- { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID, PCI_ANY_ID, (PCI_CLASS_STORAGE_IDE<<8)|0x8a, 0xffff05, 1},
+#ifndef CONFIG_SB600_AHCI_IDE
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID,
+PCI_ANY_ID, PCI_CLASS_STORAGE_IDE<<8, 0xffff00, 1}, #endif
{ 0, },
};
MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl); diff -Nur linux-2.6.19-rc6-git4.orig/drivers/pci/quirks.c linux-2.6.19-rc6-git4/drivers/pci/quirks.c
--- linux-2.6.19-rc6-git4.orig/drivers/pci/quirks.c 2006-11-23 13:36:52.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/pci/quirks.c 2006-11-23 13:38:17.000000000 +0800
@@ -796,6 +796,25 @@
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master );
+#ifdef CONFIG_SB600_AHCI_IDE
+static void __devinit quirk_sb600_sata(struct pci_dev *pdev) {
+ if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
+ u8 tmp;
+
+ pci_read_config_byte(pdev, 0x40, &tmp);
+ pci_write_config_byte(pdev, 0x40, tmp|1);
+ pci_write_config_byte(pdev, 0x9, 1);
+ pci_write_config_byte(pdev, 0xa, 6);
+ pci_write_config_byte(pdev, 0x40, tmp);
+
+ pdev->class = 0x010601;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI,
+PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_sb600_sata); #endif
+
+
/*
* As per PCI spec, ignore base address registers 0-3 of the IDE controllers
* running in Compatible mode (bits 0 and 2 in the ProgIf for primary and
===================== solution 2 ========================
--- linux-2.6.19-rc6-git4/drivers/pci/quirks.c.orig 2006-11-23 19:45:49.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/pci/quirks.c 2006-11-23 19:34:23.000000000 +0800
@@ -795,6 +795,25 @@ static void __init quirk_mediagx_master(
}
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master );
+
+#if defined(CONFIG_SATA_AHCI) || defined(CONFIG_SATA_AHCI_MODULE)
+static void __devinit quirk_sb600_sata(struct pci_dev *pdev) {
+ /* set sb600 sata to ahci mode */
+ if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
+ u8 tmp;
+
+ pci_read_config_byte(pdev, 0x40, &tmp);
+ pci_write_config_byte(pdev, 0x40, tmp|1);
+ pci_write_config_byte(pdev, 0x9, 1);
+ pci_write_config_byte(pdev, 0xa, 6);
+ pci_write_config_byte(pdev, 0x40, tmp);
+
+ pdev->class = 0x010601;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI,
+PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_sb600_sata); #endif
/*
* As per PCI spec, ignore base address registers 0-3 of the IDE controllers
^ permalink raw reply [flat|nested] 20+ messages in thread* RE: [PATCH] Add IDE mode support for SB600 SATA
@ 2006-11-23 9:50 Conke Hu
0 siblings, 0 replies; 20+ messages in thread
From: Conke Hu @ 2006-11-23 9:50 UTC (permalink / raw)
To: Arjan van de Ven; +Cc: linux-kernel, alan, Andrew Morton, Jeff Garzik
-----Original Message-----
From: Arjan van de Ven [mailto:arjan@infradead.org]
Sent: Thursday, November 23, 2006 4:06 PM
To: Conke Hu
Cc: linux-kernel@vger.kernel.org; alan@lxorguk.ukuu.org.uk; Andrew Morton; Jeff Garzik
Subject: Re: [PATCH] Add IDE mode support for SB600 SATA
On Thu, 2006-11-23 at 12:20 +0800, Conke Hu wrote:
> ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch will make SB600 SATA run in AHCI mode even if it was set as IDE mode by system BIOS.
is this really the right thing? You're overriding a user chosen configuration here.... while that might be justifiable.. it's probably a good idea to at least provide a safety-valve for this one. The user might have made that selection very deliberately.
--
if you want to mail me at work (you don't), use arjan (at) linux.intel.com Test the interaction between Linux and your BIOS via http://www.linuxfirmwarekit.org
-------------------------------
Hi Arjan,
In my preivious patch(with the same email title "[PATCH] Add IDE mode support for SB600 SATA"), I provided a config option and kernel users (the "users" here includes kernel developers and linux fans) can use the sata controller as IDE or AHCI, but Andrew did not think that was good idea.
[Quote from Andrew]
I doubt if it's appropriate to do all this via ifdefs. Users don't compile their kernels - others compile them for the users. We need the one kernel
binary to support both modes. Possible?
Andrew means only one mode (i.e. ahci) support is enough, so I've re-writen this patch according to Alan's adavice, see bellow:
[Quote from Alan Cox]
That seems fine to me. I would have thought putting the code you have into the quirks.c file as you proposed was the better way to do this, but with the addition of the
#if defined (CONFIG_ATA_AHCI) || defined(CONFIG_ATA_AHCI_MODULE)
#endif
around it
Hi Alan,
Today I've sent out 2 patches about the same issue. one patch/solution is providing a config option to support both IDE driver and AHCI driver; another is using ahci driver for all modes. The two patches respectively corresond to two mails with the same title "[PATCH] Add IDE mode support for SB600 SATA", please take a look at both patches for more details.
Which patch/solution do you think is acceptable? Or is there anything that needs to be improved?
Thank you!
Conke
^ permalink raw reply [flat|nested] 20+ messages in thread* RE: [PATCH] Add IDE mode support for SB600 SATA
@ 2006-11-23 4:24 Conke Hu
0 siblings, 0 replies; 20+ messages in thread
From: Conke Hu @ 2006-11-23 4:24 UTC (permalink / raw)
To: linux-kernel, alan, Andrew Morton, Jeff Garzik
-----Original Message-----
From: Conke Hu
Sent: Thursday, November 23, 2006 12:21 PM
To: linux-kernel@vger.kernel.org; 'alan@lxorguk.ukuu.org.uk'; 'Andrew Morton'; Jeff Garzik
Subject: [PATCH] Add IDE mode support for SB600 SATA
ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch will make SB600 SATA run in AHCI mode even if it was set as IDE mode by system BIOS.
Signed-off-by: conke.hu@amd.com
---------
--- linux-2.6.19-rc6-git4/drivers/pci/quirks.c.orig 2006-11-23 19:45:49.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/pci/quirks.c 2006-11-23 19:34:23.000000000 +0800
@@ -795,6 +795,25 @@ static void __init quirk_mediagx_master(
}
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master );
+
+#if defined(CONFIG_SATA_AHCI) || defined(CONFIG_SATA_AHCI_MODULE)
+static void __devinit quirk_sb600_sata(struct pci_dev *pdev) {
+ /* set sb600 sata to ahci mode */
+ if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
+ u8 tmp;
+
+ pci_read_config_byte(pdev, 0x40, &tmp);
+ pci_write_config_byte(pdev, 0x40, tmp|1);
+ pci_write_config_byte(pdev, 0x9, 1);
+ pci_write_config_byte(pdev, 0xa, 6);
+ pci_write_config_byte(pdev, 0x40, tmp);
+
+ pdev->class = 0x010601;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI,
+PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_sb600_sata); #endif
/*
* As per PCI spec, ignore base address registers 0-3 of the IDE controllers
---------------------
This is the re-written patch, if still any unreasonable, please feel free to contact me. Thanks!
Conke
^ permalink raw reply [flat|nested] 20+ messages in thread* RE: [PATCH] Add IDE mode support for SB600 SATA
@ 2006-11-23 4:04 Conke Hu
0 siblings, 0 replies; 20+ messages in thread
From: Conke Hu @ 2006-11-23 4:04 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel, Anatoli Antonovitch, Jeff Garzik, Tejun Heo
-----Original Message-----
From: Andrew Morton [mailto:akpm@osdl.org]
Sent: Thursday, November 23, 2006 10:31 AM
To: Conke Hu
Cc: linux-kernel@vger.kernel.org; Anatoli Antonovitch; Jeff Garzik; Tejun Heo
Subject: Re: [PATCH] Add IDE mode support for SB600 SATA
On Thu, 23 Nov 2006 06:23:50 +0800
"Conke Hu" <conke.hu@amd.com> wrote:
> ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch provides users with two options when the SB600 SATA is set as IDE mode by BIOS:
> 1. Setting the controller back to AHCI mode and using ahci as its driver.
> 2. Using the controller as a normal IDE.
> What's more, without this patch, ahci driver always tries to claim all 4 modes of SB600 SATA, but fails in legacy IDE mode.
>
> Signed-off-by: conke.hu@amd.com
> -------
> diff -Nur linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c linux-2.6.19-rc6-git4/drivers/ata/ahci.c
> --- linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c 2006-11-23 13:36:52.000000000 +0800
> +++ linux-2.6.19-rc6-git4/drivers/ata/ahci.c 2006-11-23 13:50:13.000000000 +0800
> @@ -323,7 +323,14 @@
> { PCI_VDEVICE(JMICRON, 0x2366), board_ahci }, /* JMicron JMB366 */
>
> /* ATI */
> +#ifdef CONFIG_SB600_AHCI_IDE
> { PCI_VDEVICE(ATI, 0x4380), board_ahci }, /* ATI SB600 non-raid */
> +#else
> + { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_RAID<<8, 0xffff00,
> + board_ahci },
> + { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, 0x010600, 0xffff00,
> + board_ahci },
> +#endif
And your patch conflicts in mysterious ways with the below.
I've been sitting on this patch for three months. I don't know why.
From: "Anatoli Antonovitch" <antonovi@ati.com>
Automatically match the proper driver for different SATA/IDE modes of SB600 SATA controller: ahci for SATA/Native IDE/RAID modes and ATIIXP_IDE for legacy mode.
Signed-off-by: Anatoli Antonovitch <antonovi@ati.com>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---
drivers/ata/ahci.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff -puN drivers/ata/ahci.c~ahci-ati-sb600-sata-support-for-various-modes drivers/ata/ahci.c
--- a/drivers/ata/ahci.c~ahci-ati-sb600-sata-support-for-various-modes
+++ a/drivers/ata/ahci.c
@@ -323,7 +323,12 @@ static const struct pci_device_id ahci_p
{ PCI_VDEVICE(JMICRON, 0x2366), board_ahci }, /* JMicron JMB366 */
/* ATI */
- { PCI_VDEVICE(ATI, 0x4380), board_ahci }, /* ATI SB600 non-raid */
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID,
+ PCI_ANY_ID, 0x010600, 0xffff00, board_ahci }, /* ATI SB600 AHCI */
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID,
+ PCI_ANY_ID, 0x010400, 0xffff00, board_ahci }, /* ATI SB600 raid */
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID,
+ PCI_ANY_ID, (PCI_CLASS_STORAGE_IDE<<8)|0x8f, 0xffff05, board_ahci },
+/* ATI SB600 native IDE */
{ PCI_VDEVICE(ATI, 0x4381), board_ahci }, /* ATI SB600 raid */
/* VIA */
_
Hi Andrew,
Thank you! I will re-write the patch since you think it is not reasonable.
There were 3 patches for sb600 sata controller, including the one you listed, but none is accepted, so I will re-create the patch until it is accepted.
(btw, I am sorry for using MS Outlook to reply this maillist. It seems we use different mail format, and I will switch to another email client next time.)
best regards,
conke
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH] Add IDE mode support for SB600 SATA
@ 2006-11-22 22:23 Conke Hu
2006-11-23 2:26 ` Andrew Morton
2006-11-23 2:31 ` Andrew Morton
0 siblings, 2 replies; 20+ messages in thread
From: Conke Hu @ 2006-11-22 22:23 UTC (permalink / raw)
To: linux-kernel
ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch provides users with two options when the SB600 SATA is set as IDE mode by BIOS:
1. Setting the controller back to AHCI mode and using ahci as its driver.
2. Using the controller as a normal IDE.
What's more, without this patch, ahci driver always tries to claim all 4 modes of SB600 SATA, but fails in legacy IDE mode.
Signed-off-by: conke.hu@amd.com
-------
diff -Nur linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c linux-2.6.19-rc6-git4/drivers/ata/ahci.c
--- linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c 2006-11-23 13:36:52.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/ata/ahci.c 2006-11-23 13:50:13.000000000 +0800
@@ -323,7 +323,14 @@
{ PCI_VDEVICE(JMICRON, 0x2366), board_ahci }, /* JMicron JMB366 */
/* ATI */
+#ifdef CONFIG_SB600_AHCI_IDE
{ PCI_VDEVICE(ATI, 0x4380), board_ahci }, /* ATI SB600 non-raid */
+#else
+ { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_RAID<<8, 0xffff00,
+ board_ahci },
+ { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, 0x010600, 0xffff00,
+ board_ahci },
+#endif
{ PCI_VDEVICE(ATI, 0x4381), board_ahci }, /* ATI SB600 raid */
/* VIA */
diff -Nur linux-2.6.19-rc6-git4.orig/drivers/ata/Kconfig linux-2.6.19-rc6-git4/drivers/ata/Kconfig
--- linux-2.6.19-rc6-git4.orig/drivers/ata/Kconfig 2006-11-23 13:36:52.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/ata/Kconfig 2006-11-23 13:37:50.000000000 +0800
@@ -27,6 +27,18 @@
If unsure, say N.
+config SB600_AHCI_IDE
+ bool "ATI SB600 IDE mode of SATA controller support"
+ depends on SATA_AHCI
+ default y
+ help
+ ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native
+ IDE, AHCI and RAID. If this option is enabled, the contoller
+ will run in AHCI mode and use ahci.ko as it's driver, otherwise
+ it will work as an IDE controller using atiixp.ko as it's driver.
+
+ If unsure, say y.
+
config SATA_SVW
tristate "ServerWorks Frodo / Apple K2 SATA support"
depends on PCI
diff -Nur linux-2.6.19-rc6-git4.orig/drivers/ide/pci/atiixp.c linux-2.6.19-rc6-git4/drivers/ide/pci/atiixp.c
--- linux-2.6.19-rc6-git4.orig/drivers/ide/pci/atiixp.c 2006-11-23 13:36:51.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/ide/pci/atiixp.c 2006-11-23 13:38:08.000000000 +0800
@@ -318,7 +318,8 @@
hwif->drives[0].autodma = hwif->autodma;
}
-static void __devinit init_hwif_sb600_legacy(ide_hwif_t *hwif)
+#ifndef CONFIG_SB600_AHCI_IDE
+static void __devinit init_hwif_sb600_sata(ide_hwif_t *hwif)
{
hwif->atapi_dma = 1;
@@ -331,6 +332,7 @@
hwif->drives[0].autodma = hwif->autodma;
hwif->drives[1].autodma = hwif->autodma;
}
+#endif
static ide_pci_device_t atiixp_pci_info[] __devinitdata = {
{ /* 0 */
@@ -340,13 +342,16 @@
.autodma = AUTODMA,
.enablebits = {{0x48,0x01,0x00}, {0x48,0x08,0x00}},
.bootable = ON_BOARD,
- },{ /* 1 */
- .name = "ATI SB600 SATA Legacy IDE",
- .init_hwif = init_hwif_sb600_legacy,
+ },
+#ifndef CONFIG_SB600_AHCI_IDE
+ { /* 1 */
+ .name = "ATI SB600 SATA (IDE mode)",
+ .init_hwif = init_hwif_sb600_sata,
.channels = 2,
.autodma = AUTODMA,
.bootable = ON_BOARD,
}
+#endif
};
/**
@@ -368,7 +373,9 @@
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
- { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID, PCI_ANY_ID, (PCI_CLASS_STORAGE_IDE<<8)|0x8a, 0xffff05, 1},
+#ifndef CONFIG_SB600_AHCI_IDE
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_IDE<<8, 0xffff00, 1},
+#endif
{ 0, },
};
MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl);
diff -Nur linux-2.6.19-rc6-git4.orig/drivers/pci/quirks.c linux-2.6.19-rc6-git4/drivers/pci/quirks.c
--- linux-2.6.19-rc6-git4.orig/drivers/pci/quirks.c 2006-11-23 13:36:52.000000000 +0800
+++ linux-2.6.19-rc6-git4/drivers/pci/quirks.c 2006-11-23 13:38:17.000000000 +0800
@@ -796,6 +796,25 @@
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_PCI_MASTER, quirk_mediagx_master );
+#ifdef CONFIG_SB600_AHCI_IDE
+static void __devinit quirk_sb600_sata(struct pci_dev *pdev)
+{
+ if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
+ u8 tmp;
+
+ pci_read_config_byte(pdev, 0x40, &tmp);
+ pci_write_config_byte(pdev, 0x40, tmp|1);
+ pci_write_config_byte(pdev, 0x9, 1);
+ pci_write_config_byte(pdev, 0xa, 6);
+ pci_write_config_byte(pdev, 0x40, tmp);
+
+ pdev->class = 0x010601;
+ }
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_sb600_sata);
+#endif
+
+
/*
* As per PCI spec, ignore base address registers 0-3 of the IDE controllers
* running in Compatible mode (bits 0 and 2 in the ProgIf for primary and
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-22 22:23 Conke Hu
@ 2006-11-23 2:26 ` Andrew Morton
2006-11-23 11:13 ` Alan
2006-11-23 2:31 ` Andrew Morton
1 sibling, 1 reply; 20+ messages in thread
From: Andrew Morton @ 2006-11-23 2:26 UTC (permalink / raw)
To: Conke Hu; +Cc: linux-kernel
On Thu, 23 Nov 2006 06:23:50 +0800
"Conke Hu" <conke.hu@amd.com> wrote:
> ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch provides users with two options when the SB600 SATA is set as IDE mode by BIOS:
> 1. Setting the controller back to AHCI mode and using ahci as its driver.
> 2. Using the controller as a normal IDE.
> What's more, without this patch, ahci driver always tries to claim all 4 modes of SB600 SATA, but fails in legacy IDE mode.
>
> Signed-off-by: conke.hu@amd.com
> -------
> diff -Nur linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c linux-2.6.19-rc6-git4/drivers/ata/ahci.c
> --- linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c 2006-11-23 13:36:52.000000000 +0800
> +++ linux-2.6.19-rc6-git4/drivers/ata/ahci.c 2006-11-23 13:50:13.000000000 +0800
> @@ -323,7 +323,14 @@
> { PCI_VDEVICE(JMICRON, 0x2366), board_ahci }, /* JMicron JMB366 */
>
> /* ATI */
> +#ifdef CONFIG_SB600_AHCI_IDE
> { PCI_VDEVICE(ATI, 0x4380), board_ahci }, /* ATI SB600 non-raid */
> +#else
> + { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_RAID<<8, 0xffff00,
> + board_ahci },
> + { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, 0x010600, 0xffff00,
> + board_ahci },
> +#endif
> { PCI_VDEVICE(ATI, 0x4381), board_ahci }, /* ATI SB600 raid */
I doubt if it's appropriate to do all this via ifdefs. Users don't compile
their kernels - others compile them for the users. We need the one kernel
binary to support both modes. Possible?
^ permalink raw reply [flat|nested] 20+ messages in thread* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-23 2:26 ` Andrew Morton
@ 2006-11-23 11:13 ` Alan
0 siblings, 0 replies; 20+ messages in thread
From: Alan @ 2006-11-23 11:13 UTC (permalink / raw)
To: Andrew Morton; +Cc: Conke Hu, linux-kernel
On Wed, 22 Nov 2006 18:26:10 -0800
Andrew Morton <akpm@osdl.org> wrote:
> I doubt if it's appropriate to do all this via ifdefs. Users don't compile
> their kernels - others compile them for the users. We need the one kernel
> binary to support both modes. Possible?
I'm not sure we do. What the Jmicron drivers do is
- If SATA (libata) is enabled (module or built in) then turn on AHCI
- If it is not enabled then support the chip fully in SFF mode via
drivers/ide
As the AHCI mode is fundamentally better (both with respect to standards
and to performance) this makes sense.
I think the SB600 should do the same - if support is in the
kernel/modules - then turn on AHCI mode. If not then don't. No user
options needed, no complex config questions.
Alan
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH] Add IDE mode support for SB600 SATA
2006-11-22 22:23 Conke Hu
2006-11-23 2:26 ` Andrew Morton
@ 2006-11-23 2:31 ` Andrew Morton
1 sibling, 0 replies; 20+ messages in thread
From: Andrew Morton @ 2006-11-23 2:31 UTC (permalink / raw)
To: Conke Hu; +Cc: linux-kernel, Anatoli Antonovitch, Jeff Garzik, Tejun Heo
On Thu, 23 Nov 2006 06:23:50 +0800
"Conke Hu" <conke.hu@amd.com> wrote:
> ATI SB600 SATA controller supports 4 modes: Legacy IDE, Native IDE, AHCI and RAID. Legacy/Native IDE mode is designed for compatibility with some old OS without AHCI driver but looses SATAII/AHCI features such as NCQ. This patch provides users with two options when the SB600 SATA is set as IDE mode by BIOS:
> 1. Setting the controller back to AHCI mode and using ahci as its driver.
> 2. Using the controller as a normal IDE.
> What's more, without this patch, ahci driver always tries to claim all 4 modes of SB600 SATA, but fails in legacy IDE mode.
>
> Signed-off-by: conke.hu@amd.com
> -------
> diff -Nur linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c linux-2.6.19-rc6-git4/drivers/ata/ahci.c
> --- linux-2.6.19-rc6-git4.orig/drivers/ata/ahci.c 2006-11-23 13:36:52.000000000 +0800
> +++ linux-2.6.19-rc6-git4/drivers/ata/ahci.c 2006-11-23 13:50:13.000000000 +0800
> @@ -323,7 +323,14 @@
> { PCI_VDEVICE(JMICRON, 0x2366), board_ahci }, /* JMicron JMB366 */
>
> /* ATI */
> +#ifdef CONFIG_SB600_AHCI_IDE
> { PCI_VDEVICE(ATI, 0x4380), board_ahci }, /* ATI SB600 non-raid */
> +#else
> + { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_STORAGE_RAID<<8, 0xffff00,
> + board_ahci },
> + { PCI_VENDOR_ID_ATI, 0x4380, PCI_ANY_ID, PCI_ANY_ID, 0x010600, 0xffff00,
> + board_ahci },
> +#endif
And your patch conflicts in mysterious ways with the below.
I've been sitting on this patch for three months. I don't know why.
From: "Anatoli Antonovitch" <antonovi@ati.com>
Automatically match the proper driver for different SATA/IDE modes of SB600
SATA controller: ahci for SATA/Native IDE/RAID modes and ATIIXP_IDE for legacy
mode.
Signed-off-by: Anatoli Antonovitch <antonovi@ati.com>
Cc: Jeff Garzik <jeff@garzik.org>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---
drivers/ata/ahci.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff -puN drivers/ata/ahci.c~ahci-ati-sb600-sata-support-for-various-modes drivers/ata/ahci.c
--- a/drivers/ata/ahci.c~ahci-ati-sb600-sata-support-for-various-modes
+++ a/drivers/ata/ahci.c
@@ -323,7 +323,12 @@ static const struct pci_device_id ahci_p
{ PCI_VDEVICE(JMICRON, 0x2366), board_ahci }, /* JMicron JMB366 */
/* ATI */
- { PCI_VDEVICE(ATI, 0x4380), board_ahci }, /* ATI SB600 non-raid */
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID,
+ PCI_ANY_ID, 0x010600, 0xffff00, board_ahci }, /* ATI SB600 AHCI */
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID,
+ PCI_ANY_ID, 0x010400, 0xffff00, board_ahci }, /* ATI SB600 raid */
+ { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, PCI_ANY_ID,
+ PCI_ANY_ID, (PCI_CLASS_STORAGE_IDE<<8)|0x8f, 0xffff05, board_ahci }, /* ATI SB600 native IDE */
{ PCI_VDEVICE(ATI, 0x4381), board_ahci }, /* ATI SB600 raid */
/* VIA */
_
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2006-11-25 1:43 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-23 4:20 [PATCH] Add IDE mode support for SB600 SATA Conke Hu
2006-11-23 8:05 ` Arjan van de Ven
2006-11-23 11:22 ` Alan
2006-11-23 13:12 ` Arjan van de Ven
2006-11-23 11:21 ` Alan
2006-11-24 6:01 ` Tejun Heo
2006-11-24 7:05 ` Tejun Heo
2006-11-24 11:13 ` Alan
2006-11-25 1:43 ` Tejun Heo
-- strict thread matches above, loose matches on Subject: below --
2006-11-24 5:21 Conke Hu
2006-11-23 16:35 Luugi Marsan
2006-11-23 16:45 ` Alan
2006-11-23 10:16 Conke Hu
2006-11-23 9:50 Conke Hu
2006-11-23 4:24 Conke Hu
2006-11-23 4:04 Conke Hu
2006-11-22 22:23 Conke Hu
2006-11-23 2:26 ` Andrew Morton
2006-11-23 11:13 ` Alan
2006-11-23 2:31 ` Andrew Morton
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.