The patch titled Add IDE mode support for SB600 SATA has been added to the -mm tree. Its filename is add-ide-mode-support-for-sb600-sata.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: Add IDE mode support for SB600 SATA From: "Conke Hu" <conke.hu@xxxxxxx> 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" <conke.hu@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- drivers/ata/Kconfig | 12 ++++++++++++ drivers/ata/ahci.c | 7 +++++++ drivers/ide/pci/atiixp.c | 17 ++++++++++++----- drivers/pci/quirks.c | 19 +++++++++++++++++++ 4 files changed, 50 insertions(+), 5 deletions(-) diff -puN drivers/ata/ahci.c~add-ide-mode-support-for-sb600-sata drivers/ata/ahci.c --- a/drivers/ata/ahci.c~add-ide-mode-support-for-sb600-sata +++ a/drivers/ata/ahci.c @@ -367,7 +367,14 @@ static const struct pci_device_id ahci_p { 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 -puN drivers/ata/Kconfig~add-ide-mode-support-for-sb600-sata drivers/ata/Kconfig --- a/drivers/ata/Kconfig~add-ide-mode-support-for-sb600-sata +++ a/drivers/ata/Kconfig @@ -27,6 +27,18 @@ config SATA_AHCI 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 -puN drivers/ide/pci/atiixp.c~add-ide-mode-support-for-sb600-sata drivers/ide/pci/atiixp.c --- a/drivers/ide/pci/atiixp.c~add-ide-mode-support-for-sb600-sata +++ a/drivers/ide/pci/atiixp.c @@ -318,7 +318,8 @@ static void __devinit init_hwif_atiixp(i 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 @@ static void __devinit init_hwif_sb600_le 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 @@ static ide_pci_device_t atiixp_pci_info[ .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 @@ static struct pci_device_id atiixp_pci_t { 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 -puN drivers/pci/quirks.c~add-ide-mode-support-for-sb600-sata drivers/pci/quirks.c --- a/drivers/pci/quirks.c~add-ide-mode-support-for-sb600-sata +++ a/drivers/pci/quirks.c @@ -796,6 +796,25 @@ static void __init quirk_mediagx_master( } 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 _ Patches currently in -mm which might be from conke.hu@xxxxxxx are add-ide-mode-support-for-sb600-sata.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html