Patchwork achi, ata_generic: Add ASMedia ASM1061 support

login
register
mail settings
Submitter Keng-Yu Lin
Date Sept. 8, 2011, 3:43 a.m.
Message ID <1315453426-8796-1-git-send-email-kengyu@canonical.com>
Download mbox | patch
Permalink /patch/113865/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Keng-Yu Lin - Sept. 8, 2011, 3:43 a.m.
ASM1061 PCI-E to SATA bridge controller has two variants.
One works under AHCI and the other works with ata_generic.

Add the PCI vendor ID and product IDs accordingly.

Signed-off-by: Keng-Yu Lin <kengyu@canonical.com>
---
 drivers/ata/ahci.c        |    3 +++
 drivers/ata/ata_generic.c |    1 +
 include/linux/pci_ids.h   |    4 ++++
 3 files changed, 8 insertions(+), 0 deletions(-)
Alan Cox - Sept. 8, 2011, 9:40 a.m.
On Thu,  8 Sep 2011 11:43:46 +0800
Keng-Yu Lin <kengyu@canonical.com> wrote:

> ASM1061 PCI-E to SATA bridge controller has two variants.
> One works under AHCI and the other works with ata_generic.

ata_generic should be an absolute last resort - it doesn't support error
recovery by speed dropping, mode setting, hotplug, timing tuning etc. 

Is there any documentation on the device or does it appear to follow the
usual mode setting behaviours ? The web page merely says

"Bus Master Programming Interface to IDE ATA Controller Rev. 1.0"

which covers only the basic transfers and not timing (ie ata_generic) as
you say but there are a few ways to find out more about how it works

- dump the PCI space in IDE mode and see if it looks like d1510r1 - some
  controllers are pretty unimaginative and so follow follow Appendix B
  of this document.

- see if it will run with the pata_acpi driver (ie it has _GTM and
  similar methods in the BIOS). If it does then this is preferable as it
  can do limited mode handling and you can also see what the ACPI code
  itself actually does for _GTM/_STM.

- See if Asmedia will provide documentation. I don't see anything useful
  on the English web site but perhaps someone has as Asmedia contact ?

The AHCI one looks good - AHCI standardises all this
stuff so the AHCI one can just be a device id.

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov - Sept. 8, 2011, 10:36 a.m.
Hello.

On 08-09-2011 7:43, Keng-Yu Lin wrote:

> ASM1061 PCI-E to SATA bridge controller has two variants.
> One works under AHCI and the other works with ata_generic.

> Add the PCI vendor ID and product IDs accordingly.

> Signed-off-by: Keng-Yu Lin<kengyu@canonical.com>
[...]
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index f8910e1..87182b8 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -2844,3 +2844,7 @@
>
>   #define PCI_VENDOR_ID_XEN		0x5853
>   #define PCI_DEVICE_ID_XEN_PLATFORM	0x0001
> +
> +#define PCI_VENDOR_ID_ASMEDIA		0x1b21
> +#define PCI_DEVICE_ID_ASM1061_IDE	0x0611
> +#define PCI_DEVICE_ID_ASM1061_AHCI	0x0612

    Adding new device IDs to that file is frowned upon. Define the device ID 
locally in the driver file, if you must. You don't even use the second one.

WBR, Sergei
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 71afe03..4899aad 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -397,6 +397,9 @@  static const struct pci_device_id ahci_pci_tbl[] = {
 	/* Promise */
 	{ PCI_VDEVICE(PROMISE, 0x3f20), board_ahci },	/* PDC42819 */
 
+	/* Asmedia */
+	{ PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci },	/* ASM1061 */
+
 	/* Generic, PCI class code for AHCI */
 	{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
 	  PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci },
diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
index 721d38b..8187503 100644
--- a/drivers/ata/ata_generic.c
+++ b/drivers/ata/ata_generic.c
@@ -220,6 +220,7 @@  static struct pci_device_id ata_generic[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_HINT,   PCI_DEVICE_ID_HINT_VXPROII_IDE), },
 	{ PCI_DEVICE(PCI_VENDOR_ID_VIA,    PCI_DEVICE_ID_VIA_82C561), },
 	{ PCI_DEVICE(PCI_VENDOR_ID_OPTI,   PCI_DEVICE_ID_OPTI_82C558), },
+	{ PCI_DEVICE(PCI_VENDOR_ID_ASMEDIA,PCI_DEVICE_ID_ASM1061_IDE), },
 	{ PCI_DEVICE(PCI_VENDOR_ID_CENATEK,PCI_DEVICE_ID_CENATEK_IDE),
 	  .driver_data = ATA_GEN_FORCE_DMA },
 	/*
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index f8910e1..87182b8 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2844,3 +2844,7 @@ 
 
 #define PCI_VENDOR_ID_XEN		0x5853
 #define PCI_DEVICE_ID_XEN_PLATFORM	0x0001
+
+#define PCI_VENDOR_ID_ASMEDIA		0x1b21
+#define PCI_DEVICE_ID_ASM1061_IDE	0x0611
+#define PCI_DEVICE_ID_ASM1061_AHCI	0x0612